You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bomberclone/src/configuration.c

814 lines
26 KiB

/* $Id: configuration.c,v 1.80 2006/08/15 00:57:46 stpohle Exp $
* configuration */
#include <SDL.h>
#include "basic.h"
#include "bomberclone.h"
#include "network.h"
#include "packets.h"
#include "gfx.h"
#include "chat.h"
#include "sound.h"
#include "menu.h"
#include "keyb.h"
#include "player.h"
/*
* try to find the datapath and set the variable bman.datapath
* test: 1) PACKAGE_DATA_DIR
* 2) ./data
* 3) ../data
*/
void
config_get_datapath ()
{
FILE *f;
char filename[255];
sprintf (bman.datapath, PACKAGE_DATA_DIR);
sprintf (filename, "%s/gfx/logo.png", bman.datapath);
f = fopen (filename, "r");
if (!f) {
sprintf (bman.datapath, "data");
sprintf (filename, "%s/gfx/logo.png", bman.datapath);
f = fopen (filename, "r");
if (!f) {
sprintf (bman.datapath, "../data");
sprintf (filename, "%s/gfx/logo.png", bman.datapath);
f = fopen (filename, "r");
if (!f) {
printf ("Can't find Datafiles.\n");
exit (1);
}
}
}
fclose (f);
}
/*
* reset all variables and load all configs.
*/
void
config_init (int argc, char **argv)
{
SDL_Surface *icon_img;
char text[255],
icon[255];
int i,
j;
config_get_datapath ();
srand (((int) time (NULL))); // initialize randomgenerator
for (i = 0; i < MAX_TEAMS; i++) {
teams[i].col = i;
sprintf (teams[i].name, "Team %d", i + 1);
for (j = 0; j < MAX_PLAYERS; j++)
teams[i].players[j] = NULL;
}
stonelist_del ();
chat.oldscreen = NULL;
chat.active = 0;
chat.curline = 0;
keyb_config_reset ();
keybinput_new (&chat.input, KEYBI_text, 255);
for (i = 0; i < CHAT_MAX_LINES; i++)
chat.lines[i].text[0] = 0;
bman.maxplayer = MAX_PLAYERS;
bman.net_ai_family = PF_INET;
bman.sock = -1;
bman.p_nr = -1;
bman.p2_nr = -1;
bman.gamename[0] = 0;
sprintf (bman.playername, "Player1");
sprintf (bman.player2name, "Player2");
sprintf (bman.port, "%d", DEFAULT_UDPPORT);
sprintf (bman.ogcserver, DEFAULT_GAMECACHE);
sprintf (bman.ogc_port, DEFAULT_GAMECACHEPORT);
rscache.count = 0;
bman.notifygamemaster = 1;
bman.broadcast = 1;
bman.autostart = AUTOSTART;
bman.askplayername = 0;
debug = 0;
gfx.res.x = 640;
gfx.res.y = 480;
gfx.bpp = 16;
gfx.players = NULL;
bman.password[0] = 0;
bman.passwordenabled = 0;
map.tileset[0] = 0;
map.random_tileset = 1;
map.size.x = 25;
map.size.y = 17;
map.map[0] = 0;
map.map_selection = 2;
map.type = -1;
bman.firewall = 0;
bman.init_timeout = GAME_TIMEOUT;
bman.ai_players = 1;
bman.minplayers = 0;
snd.inited = 0;
snd.audio_rate = 22050;
snd.audio_format = AUDIO_S16;
snd.audio_channels = 2;
snd.playmusic = 1;
snd.playsound = 1;
map.bombs = GAME_SPECIAL_ITEMBOMB;
map.fire = GAME_SPECIAL_ITEMFIRE;
map.shoes = GAME_SPECIAL_ITEMSHOE;
map.mixed = GAME_SPECIAL_ITEMMIXED;
map.death = GAME_SPECIAL_ITEMDEATH;
map.sp_trigger = GAME_SPECIAL_ITEMSTRIGGER;
map.sp_row = GAME_SPECIAL_ITEMSROW;
map.sp_push = GAME_SPECIAL_ITEMSPUSH;
map.sp_kick = GAME_SPECIAL_ITEMSKICK;
bman.start_bombs = START_BOMBS;
bman.start_speed = START_SPEED;
bman.start_range = START_RANGE;
bman.bomb_tickingtime = BOMB_TIMEOUT;
bman.dropitemsondeath = 0;
d_printf ("\n\n ***** Bomberclone Version %s \n\n", VERSION);
config_read ();
ReadPrgArgs (argc, argv);
gfx_init ();
draw_logo ();
if (bman.askplayername)
playernamemenu ();
snd_init ();
gfx_blitdraw ();
SDL_Flip (gfx.screen);
sprintf (text, "Bomberclone %s", VERSION);
sprintf (icon, "%s/pixmaps/bomberclone.png", bman.datapath);
SDL_WM_SetCaption (text, NULL);
icon_img = IMG_Load (icon);
if (icon_img == NULL)
d_printf ("could not load icon. (%s)\n", icon);
#ifdef _WIN32
{
SDL_Surface *tmp = icon_img;
icon_img = scale_image (tmp, 32, 32);
SDL_FreeSurface (tmp);
}
#endif
SDL_WM_SetIcon (icon_img, NULL);
ReadPrgArgs_Jump (argc, argv);
};
/* read the configuration file
* return -1 if something went wrong and 0 if no problem */
int
config_read ()
{
FILE *config;
char buf[1024];
char *findit,
*keyword,
*value;
int i;
char filename[512];
#ifdef _WIN32
sprintf (filename, "%sbomberclone.cfg", s_gethomedir ());
#else
sprintf (filename, "%s.bomberclone.cfg", s_gethomedir ());
#endif
config = fopen (filename, "r");
if (config == NULL) {
d_printf ("Error: Config file not found!\n");
return -1;
}
d_printf ("Reading Config-file: %s", filename);
while (fgets (buf, sizeof (buf), config) != NULL) {
findit = strchr (buf, '\n');
if (findit)
findit[0] = '\0';
if (buf[0] == '\0')
continue;
keyword = buf;
while (isspace (*keyword))
keyword++;
value = strchr (buf, '=');
if (value == NULL)
continue;
*value = 0;
value++;
while (*value == ' ')
value++;
while (keyword[strlen (keyword) - 1] == ' ')
keyword[strlen (keyword) - 1] = 0;
while (value[strlen (value) - 1] == ' ')
value[strlen (value) - 1] = 0;
if (strlen (value) == 0)
continue;
for (i = 0; i < (int) strlen (keyword); i++)
keyword[i] = tolower (keyword[i]);
if (!strcmp (keyword, "playername")) {
if (strlen (value) > LEN_PLAYERNAME) {
d_printf
("*** Error - playername too long (maximum size permitted is %d characters)!\n\n",
LEN_PLAYERNAME);
}
value[LEN_PLAYERNAME - 1] = 0;
strcpy (bman.playername, value);
}
if (!strcmp (keyword, "player2name")) {
if (strlen (value) > LEN_PLAYERNAME) {
d_printf
("*** Error - playername too long (maximum size permitted is %d characters)!\n\n",
LEN_PLAYERNAME);
}
value[LEN_PLAYERNAME - 1] = 0;
strcpy (bman.player2name, value);
}
if (!strcmp (keyword, "gamename")) {
if (strlen (value) > LEN_GAMENAME) {
d_printf
("*** Error - servername too long (maximum size permitted is %d characters)!\n\n",
LEN_GAMENAME);
}
value[LEN_GAMENAME - 1] = 0;
strcpy (bman.gamename, value);
}
if (!strcmp (keyword, "askplayername")) {
bman.askplayername = atoi (value);
}
if (!strcmp (keyword, "password")) {
if (strlen (value) > LEN_PASSWORD) {
d_printf
("*** Error - Password is too long (maximum size permitted is %d characters)!\n\n",
LEN_PASSWORD);
}
value[LEN_PASSWORD - 1] = 0;
strcpy (bman.password, value);
}
if (!strcmp (keyword, "passwordenabled")) {
bman.passwordenabled = atoi (value);
}
if (!strcmp (keyword, "resolutionx")) {
gfx.res.x = atoi (value);
}
if (!strcmp (keyword, "resolutiony")) {
gfx.res.y = atoi (value);
}
if (!strcmp (keyword, "tileset")) {
strcpy (map.tileset, value);
}
if (!strcmp (keyword, "mapname")) {
if (strlen (value) > LEN_PATHFILENAME) {
d_printf
("*** Error - fieldpath too long (maximum size permitted is %d characters)!\n\n",
LEN_PATHFILENAME);
}
value[511] = 0;
strcpy (map.map, value);
}
if (!strcmp (keyword, "udpport")) {
if (strlen (value) > LEN_PORT) {
d_printf
("*** Error - servername too long (maximum size permitted is %d characters)!\n\n",
LEN_PORT);
}
value[LEN_PORT - 1] = 0;
strcpy (bman.port, value);
}
if (!strcmp (keyword, "ai_players")) {
bman.ai_players = atoi (value);
}
if (!strcmp (keyword, "fieldsizex")) {
map.size.x = atoi (value);
}
if (!strcmp (keyword, "fieldsizey")) {
map.size.y = atoi (value);
}
if (!strcmp (keyword, "fullscreen")) {
gfx.fullscreen = atoi (value);
}
if (!strcmp (keyword, "bitsperpixel")) {
gfx.bpp = atoi (value);
}
if (!strcmp (keyword, "ai_family")) {
bman.net_ai_family = atoi (value);
}
if (!strcmp (keyword, "debug")) {
debug = atoi (value);
}
if (!strcmp (keyword, "notify")) {
bman.notifygamemaster = atoi (value);
}
if (!strcmp (keyword, "broadcast")) {
bman.broadcast = atoi (value);
}
if (!strcmp (keyword, "ogcserver")) {
strcpy (bman.ogcserver, value);
}
if (!strcmp (keyword, "ogc_port")) {
strcpy (bman.ogc_port, value);
}
if (!strcmp (keyword, "maxplayer")) {
bman.maxplayer = atoi (value);
}
if (!strcmp (keyword, "mapselection")) {
map.map_selection = atoi (value);
}
if (!strcmp (keyword, "randomtileset")) {
map.random_tileset = atoi (value);
}
if (!strcmp (keyword, "gametimeout")) {
bman.init_timeout = atoi (value);
}
if (!strcmp (keyword, "gametype")) {
bman.gametype = atoi (value);
}
if (!strcmp (keyword, "sndrate")) {
snd.audio_rate = atoi (value);
}
if (!strcmp (keyword, "sndchannels")) {
snd.audio_channels = atoi (value);
}
if (!strcmp (keyword, "sndformat")) {
snd.audio_format = atoi (value);
}
if (!strcmp (keyword, "sndplaymusic")) {
snd.playmusic = atoi (value);
}
if (!strcmp (keyword, "sndplaysound")) {
snd.playsound = atoi (value);
}
if (!strcmp (keyword, "start_bombs")) {
bman.start_bombs = atoi (value);
}
if (!strcmp (keyword, "start_range")) {
bman.start_range = atoi (value);
}
if (!strcmp (keyword, "start_speed")) {
sscanf (value, "%f", &bman.start_speed);
}
if (!strcmp (keyword, "bomb_ticking")) {
sscanf (value, "%f", &bman.bomb_tickingtime);
}
if (!strcmp (keyword, "dropitemsondeath")) {
bman.dropitemsondeath = atoi (value);
}
for (i = 0; i < MAX_TEAMS; i++) {
char txt[255];
sprintf (txt, "teamcol%d", i);
if (!strcmp (keyword, txt)) {
teams[i].col = atoi (value);
}
sprintf (txt, "teamname%d", i);
if (!strcmp (keyword, txt)) {
strncpy (teams[i].name, value, LEN_PLAYERNAME);
}
}
/*
* keyboard config, i will give names to the keys insteed of the numbers,
* this is done to add more keys to the game without destroying the config.
*/
if (!strcmp (keyword, "key_p1_up"))
keyb_gamekeys.keycode[BCPK_up] = atoi (value);
if (!strcmp (keyword, "key_p1_down"))
keyb_gamekeys.keycode[BCPK_down] = atoi (value);
if (!strcmp (keyword, "key_p1_left"))
keyb_gamekeys.keycode[BCPK_left] = atoi (value);
if (!strcmp (keyword, "key_p1_right"))
keyb_gamekeys.keycode[BCPK_right] = atoi (value);
if (!strcmp (keyword, "key_p1_bomb"))
keyb_gamekeys.keycode[BCPK_drop] = atoi (value);
if (!strcmp (keyword, "key_p1_special"))
keyb_gamekeys.keycode[BCPK_special] = atoi (value);
if (!strcmp (keyword, "key_p2_up"))
keyb_gamekeys.keycode[BCPK_max + BCPK_up] = atoi (value);
if (!strcmp (keyword, "key_p2_down"))
keyb_gamekeys.keycode[BCPK_max + BCPK_down] = atoi (value);
if (!strcmp (keyword, "key_p2_left"))
keyb_gamekeys.keycode[BCPK_max + BCPK_left] = atoi (value);
if (!strcmp (keyword, "key_p2_right"))
keyb_gamekeys.keycode[BCPK_max + BCPK_right] = atoi (value);
if (!strcmp (keyword, "key_p2_bomb"))
keyb_gamekeys.keycode[BCPK_max + BCPK_drop] = atoi (value);
if (!strcmp (keyword, "key_p2_special"))
keyb_gamekeys.keycode[BCPK_max + BCPK_special] = atoi (value);
if (!strcmp (keyword, "key_help"))
keyb_gamekeys.keycode[BCK_help] = atoi (value);
if (!strcmp (keyword, "key_playermenu"))
keyb_gamekeys.keycode[BCK_playermenu] = atoi (value);
if (!strcmp (keyword, "key_mapmenu"))
keyb_gamekeys.keycode[BCK_mapmenu] = atoi (value);
if (!strcmp (keyword, "key_chat"))
keyb_gamekeys.keycode[BCK_chat] = atoi (value);
if (!strcmp (keyword, "key_pause"))
keyb_gamekeys.keycode[BCK_pause] = atoi (value);
if (!strcmp (keyword, "key_fullscreen"))
keyb_gamekeys.keycode[BCK_fullscreen] = atoi (value);
}
fclose (config);
return 0;
};
int
config_write ()
{
FILE *config;
int i;
char filename[512];
#ifdef _WIN32
sprintf (filename, "%sbomberclone.cfg", s_gethomedir ());
#else
sprintf (filename, "%s.bomberclone.cfg", s_gethomedir ());
#endif
if ((config = fopen (filename, "w")) == NULL)
return -1;
fprintf (config, "resolutionx=%d\n", gfx.res.x);
fprintf (config, "resolutiony=%d\n", gfx.res.y);
fprintf (config, "fullscreen=%d\n", gfx.fullscreen);
fprintf (config, "tileset=%s\n", map.tileset);
fprintf (config, "mapname=%s\n", map.map);
fprintf (config, "udpport=%s\n", bman.port);
fprintf (config, "ai_players=%d\n", bman.ai_players);
fprintf (config, "fieldsizex=%d\n", map.size.x);
fprintf (config, "fieldsizey=%d\n", map.size.y);
fprintf (config, "notify=%d\n", bman.notifygamemaster);
fprintf (config, "broadcast=%d\n", bman.broadcast);
fprintf (config, "ai_family=%d\n", bman.net_ai_family);
fprintf (config, "ogcserver=%s\n", bman.ogcserver);
fprintf (config, "ogc_port=%s\n", bman.ogc_port);
fprintf (config, "gamename=%s\n", bman.gamename);
fprintf (config, "gametimeout=%d\n", bman.init_timeout);
fprintf (config, "gametype=%d\n", bman.gametype);
fprintf (config, "maxplayer=%d\n", bman.maxplayer);
fprintf (config, "debug=%d\n", debug);
fprintf (config, "password=%s\n", bman.password);
fprintf (config, "passwordenabled=%d\n", bman.passwordenabled);
fprintf (config, "askplayername=%d\n", bman.askplayername);
fprintf (config, "playername=%s\n", bman.playername);
fprintf (config, "player2name=%s\n", bman.player2name);
fprintf (config, "bitsperpixel=%d\n", gfx.bpp);
fprintf (config, "randomtileset=%d\n", map.random_tileset);
fprintf (config, "mapselection=%d\n", map.map_selection);
fprintf (config, "sndrate=%d\n", snd.audio_rate);
fprintf (config, "sndchannels=%d\n", snd.audio_channels);
fprintf (config, "sndformat=%d\n", snd.audio_format);
fprintf (config, "sndplaymusic=%d\n", snd.playmusic);
fprintf (config, "sndplaysound=%d\n", snd.playsound);
fprintf (config, "start_bombs=%d\n", bman.start_bombs);
fprintf (config, "start_range=%d\n", bman.start_range);
fprintf (config, "start_speed=%f\n", bman.start_speed);
fprintf (config, "bomb_ticking=%f\n", bman.bomb_tickingtime);
fprintf (config, "dropitemsondeath=%d\n",bman.dropitemsondeath);
for (i = 0; i < MAX_TEAMS; i++) {
fprintf (config, "teamcol%d=%d\n", i, teams[i].col);
fprintf (config, "teamname%d=%s\n", i, teams[i].name);
}
/*
* keyboard config
*/
fprintf (config, "key_p1_up=%d\n", keyb_gamekeys.keycode[BCPK_up]);
fprintf (config, "key_p1_down=%d\n", keyb_gamekeys.keycode[BCPK_down]);
fprintf (config, "key_p1_left=%d\n", keyb_gamekeys.keycode[BCPK_left]);
fprintf (config, "key_p1_right=%d\n", keyb_gamekeys.keycode[BCPK_right]);
fprintf (config, "key_p1_bomb=%d\n", keyb_gamekeys.keycode[BCPK_drop]);
fprintf (config, "key_p1_special=%d\n", keyb_gamekeys.keycode[BCPK_special]);
fprintf (config, "key_p2_up=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_up]);
fprintf (config, "key_p2_down=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_down]);
fprintf (config, "key_p2_left=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_left]);
fprintf (config, "key_p2_right=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_right]);
fprintf (config, "key_p2_bomb=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_drop]);
fprintf (config, "key_p2_special=%d\n", keyb_gamekeys.keycode[BCPK_max + BCPK_special]);
fprintf (config, "key_help=%d\n", keyb_gamekeys.keycode[BCK_help]);
fprintf (config, "key_fullscreen=%d\n", keyb_gamekeys.keycode[BCK_fullscreen]);
fprintf (config, "key_chat=%d\n", keyb_gamekeys.keycode[BCK_chat]);
fprintf (config, "key_mapmenu=%d\n", keyb_gamekeys.keycode[BCK_mapmenu]);
fprintf (config, "key_pause=%d\n", keyb_gamekeys.keycode[BCK_pause]);
fprintf (config, "key_playermenu=%d\n", keyb_gamekeys.keycode[BCK_playermenu]);
fclose (config);
return 0;
}
void
config_video ()
{
int done = 0,
menuselect,
x,
y;
_charlist screenres[] = {
{"640x480", NULL},
{"800x600", NULL},
{"1024x768", NULL},
{"1280x1024", NULL},
{"1600x1200", NULL},
{"1280x800", NULL}
};
_charlist screenbpp[] = {
{"16", NULL},
{"24", NULL},
{"32", NULL}
};
_charlist *selres = NULL;
_charlist *selbpp = NULL;
char text[100];
_menu *menu;
/* set all pointers in this array */
charlist_fillarraypointer (screenres, 6);
charlist_fillarraypointer (screenbpp, 3);
/* select the current settings */
sprintf (text, "%dx%d", gfx.res.x, gfx.res.y);
selres = charlist_findtext (screenres, text);
sprintf (text, "%d", gfx.bpp);
selbpp = charlist_findtext (screenbpp, text);
while (!done && bman.state != GS_quit) {
menu = menu_new ("Video Setup", 325, 300);
menu_create_label (menu, "Resolution", 25, 70, 0, COLOR_brown);
menu_create_list (menu, "res", 155, 55, 150, 85, screenres, &selres, 1);
menu_create_label (menu, "Colors", 65, 170, 0, COLOR_brown);
menu_create_list (menu, "bpp", 195, 155, 50, 55, screenbpp, &selbpp, 2);
menu_create_bool (menu, "Fullscreen", -1, 220, 150, &gfx.fullscreen, 3);
menu_create_button (menu, "OK", -1, 260, 100, 0);
menuselect = menu_loop (menu);
menu_delete (menu);
switch (menuselect) {
case (0):
done = 1;
gfx_shutdown ();
gfx_init ();
break;
case (1): // new resolution
gfx_shutdown ();
sscanf (selres->text, "%dx%d", &x, &y);
gfx.res.x = x;
gfx.res.y = y;
gfx_init ();
draw_logo ();
break;
case (2): // new color depth
gfx_shutdown ();
sscanf (selbpp->text, "%d", &x);
gfx.bpp = x;
gfx_init ();
draw_logo ();
break;
default:
done = 1;
break;
}
};
draw_logo ();
SDL_Flip (gfx.screen);
};
/* Configuration Menu */
void
config_menu ()
{
int menuselect = 0;
_menu *menu;
while (menuselect != -1 && bman.state != GS_quit) {
menu = menu_new ("Configuration", 400, 300);
menu_create_label (menu, "General Option", -1, 50, 1, COLOR_brown);
menu_create_button (menu, "Playernames", 25, 85, 150, 1);
menu_create_button (menu, "Keyboard", 225, 85, 150, 2);
menu_create_button (menu, "Video Setup", -1, 120, 200, 3);
menu_create_label (menu, "Sound", 25, 154, 0, COLOR_brown);
menu_create_bool (menu, "ON", 100, 150, 50, &snd.playsound, 4);
menu_create_label (menu, "Music", 250, 154, 0, COLOR_brown);
menu_create_bool (menu, "ON", 325, 150, 50, &snd.playmusic, 5);
menu_create_label (menu, "Extended Option", -1, 200, 1, COLOR_brown);
menu_create_bool (menu, "Debug", 25, 230, 150, &debug, 6);
menu_create_bool (menu, "Ask Playername", 250, 230, 150, &bman.askplayername, 7);
menu_create_button (menu, "Ok", -1, 270, 150, 0);
if (bman.playername[0] == '\0')
menu_focus_id (menu, 1);
else
menu_focus_id (menu, 0);
menu_reload (menu);
menuselect = menu_loop (menu);
menu_delete (menu);
switch (menuselect) {
case (0): // Back to the Main Menu
if (bman.playername[0] == '\0')
menuselect = 0;
else
menuselect = -1;
break;
case (1): // player screen
playernamemenu ();
break;
case (2): // keyboard settings
keyb_config ();
break;
case (3): // Screen Options
config_video ();
break;
}
}
config_write ();
};
/* Read Programm parameter */
void
ReadPrgArgs (int argc, char **argv)
{
int i = 0;
char s;
while (argv[++i] != NULL) {
if (!strcmp (argv[i], "-h")||!strcmp (argv[i], "-help")||!strcmp (argv[i], "--help")) {
printf ("BomberClone Version " VERSION "\n");
printf (" WebPage : http://www.bomberclone.de\n");
printf (" Bug Report to :\n");
printf (" http://sourceforge.net/tracker/?group_id=79449&atid=556629\n");
printf (" Other Comments: steffen@bomberclone.de\n");
printf ("\nProgramm options:\n");
printf (" -name PLAYERNAME - set the Playername\n");
printf (" -name2 PLAYERNAME - set the Playername for the second player\n");
printf (" -gamename GAMENAME - set the name of the game\n");
printf (" -port PORT - set the local BomberClone port\n");
printf (" (Def.: 11000)\n");
printf (" -ogcport PORT - set the local OGC Port (Def.: 11100)\n");
printf (" -ogc 0/1 - Enable/Disable OGC\n");
printf (" -broadcast 0/1 - Enable/Disable broadcast requests.\n");
printf (" -host - start a network game\n");
printf (" -join - go into the join menu\n");
printf (" -connect ADDRESS - connect to a server\n");
printf (" -debug 0/1 - enable/disable debug\n");
printf (" -autostart SECONDS - time before a game starts\n");
exit (0);
}
}
i=0;
while (argv[++i] != NULL) {
if (argv[i][0]=='-') {
if (argv[i+1] != NULL)
s=argv[i+1][0];
else
s='-';
if (!strcmp (argv[i], "-port")) {
if (s!='-')
strncpy (bman.port, argv[++i], LEN_PORT);
else {
printf("Error: Parameter required for -port\n");
exit(1);
}
}
if (!strcmp (argv[i], "-ogcport")) {
if (s!='-')
strncpy (bman.ogc_port, argv[++i], LEN_PORT);
else {
printf("Error: Parameter required for -ogcport\n");
exit(1);
}
}
if (!strcmp (argv[i], "-name")) {
if (s!='-')
strncpy (bman.playername, argv[++i], LEN_PLAYERNAME);
else {
printf("Error: Parameter required for -name\n");
exit(1);
}
}
if (!strcmp (argv[i], "-name2")) {
if (s!='-')
strncpy (bman.player2name, argv[++i], LEN_PLAYERNAME);
else {
printf("Error: Parameter required for -name2\n");
exit(1);
}
}
if (!strcmp (argv[i], "-gamename")) {
if (s!='-')
strncpy (bman.gamename, argv[++i], LEN_GAMENAME);
else {
printf("Error: Parameter required for -gamename\n");
exit(1);
}
}
if (!strcmp (argv[i], "-autostart")) {
if (s!='-')
bman.autostart = atoi (argv[++i]);
else {
printf("Error: Parameter required for -autostart\n");
exit(1);
}
}
if (!strcmp (argv[i], "-ogc")) {
if (s!='-')
bman.notifygamemaster = atoi (argv[++i]);
else
bman.notifygamemaster = 1;
}
if (!strcmp (argv[i], "-broadcast")) {
if (s!='-')
bman.broadcast = atoi (argv[++i]);
else
bman.broadcast = 1;
}
if (!strcmp (argv[i], "-debug")) {
if (s!='-')
debug = atoi (argv[++i]);
else
debug = 1;
}
}
}
};
/* Read Programm Parameter which will drop us in a special menu */
void
ReadPrgArgs_Jump (int argc, char **argv)
{
int i = 0;
while (argv[++i] != NULL) {
/* check for commands which will put us into a certain menu */
if (!strcmp (argv[i], "-host")) {
host_multiplayer_game ();
}
else if (!strcmp (argv[i], "-join")) {
join_multiplayer_game ();
}
else if (!strcmp (argv[i], "-connect")) {
strncpy (bman.servername, argv[++i], LEN_SERVERNAME + LEN_PORT + 2);
join_multiplayer_game ();
}
}
};
/* check the version number, return [ 0 =] [-1 <] [ 1 >] */
int
check_version (int ma, int mi, int su, char *ver)
{
int v1,
v2,
v3,
res = 0;
sscanf (ver, "%d.%d.%d", &v1, &v2, &v3);
if (v1 < ma)
res = -1;
else if (v1 > ma)
res = 1;
else if (v2 < mi)
res = -1;
else if (v2 > mi)
res = 1;
else if (v3 < su)
res = -1;
else if (v3 > su)
res = 1;
// d_printf ("version_check (%d.%d.%d, %s = %d\n" , ma, mi, su, ver, res);
return res;
};