diff -purN bomberclone-0.11.8.orig/src/configuration.c bomberclone-0.11.8/src/configuration.c --- bomberclone-0.11.8.orig/src/configuration.c 2010-01-21 19:34:52.000000000 +0100 +++ bomberclone-0.11.8/src/configuration.c 2010-01-21 19:40:17.000000000 +0100 @@ -545,6 +545,7 @@ config_video () x, y; _charlist screenres[] = { + {"320x240", NULL}, {"640x480", NULL}, {"800x600", NULL}, {"1024x768", NULL}, diff -purN bomberclone-0.11.8.orig/src/configuration.c~ bomberclone-0.11.8/src/configuration.c~ --- bomberclone-0.11.8.orig/src/configuration.c~ 1970-01-01 01:00:00.000000000 +0100 +++ bomberclone-0.11.8/src/configuration.c~ 2010-01-21 19:38:07.000000000 +0100 @@ -0,0 +1,833 @@ +/* $Id: configuration.c,v 1.82 2007/12/07 22:06:57 stpohle Exp $ + * configuration */ + +#include + +#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, "special_trigger")) { + sscanf (value, "%d", &map.sp_trigger); + } + if (!strcmp (keyword, "special_row")) { + sscanf (value, "%d", &map.sp_row); + } + if (!strcmp (keyword, "special_push")) { + sscanf (value, "%d", &map.sp_push); + } + if (!strcmp (keyword, "special_kick")) { + sscanf (value, "%d", &map.sp_kick); + } + 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, "special_trigger=%d\n", map.sp_trigger); + fprintf (config, "special_row=%d\n", map.sp_row); + fprintf (config, "special_push=%d\n", map.sp_push); + fprintf (config, "special_kick=%d\n", map.sp_kick); + + 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[] = { + {"320x240", NULL + {"640x480", NULL}, + {"800x600", NULL}, + {"1024x768", NULL}, + {"1280x1024", NULL}, + {"1600x1200", NULL}, + {"1920x1080", NULL}, + {"1920x1200", 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; +};