X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fscreens.c;h=127333bcb1408058c3793f57886a78bb8d4e75e7;hp=758e536d29a16b17e97e7bdc095e29d094ea8f6e;hb=44cbf1a27c4d4ca88eb39dfb3728a5206d97d931;hpb=dad6457f2f778d11ad84e90d328981532d0ba0ea diff --git a/src/screens.c b/src/screens.c index 758e536d..127333bc 100644 --- a/src/screens.c +++ b/src/screens.c @@ -68,23 +68,24 @@ #define SETUP_MODE_CHOOSE_WINDOW_SIZE 19 #define SETUP_MODE_CHOOSE_SCALING_TYPE 20 #define SETUP_MODE_CHOOSE_RENDERING 21 -#define SETUP_MODE_CHOOSE_GRAPHICS 22 -#define SETUP_MODE_CHOOSE_SOUNDS 23 -#define SETUP_MODE_CHOOSE_MUSIC 24 -#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 25 -#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 26 -#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 27 -#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 28 -#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 29 -#define SETUP_MODE_CHOOSE_DROP_DISTANCE 30 -#define SETUP_MODE_CHOOSE_TRANSPARENCY 31 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 32 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 33 -#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 34 -#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 35 -#define SETUP_MODE_CONFIG_VIRT_BUTTONS 36 - -#define MAX_SETUP_MODES 37 +#define SETUP_MODE_CHOOSE_VSYNC 22 +#define SETUP_MODE_CHOOSE_GRAPHICS 23 +#define SETUP_MODE_CHOOSE_SOUNDS 24 +#define SETUP_MODE_CHOOSE_MUSIC 25 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 26 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 27 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 28 +#define SETUP_MODE_CHOOSE_TOUCH_CONTROL 29 +#define SETUP_MODE_CHOOSE_MOVE_DISTANCE 30 +#define SETUP_MODE_CHOOSE_DROP_DISTANCE 31 +#define SETUP_MODE_CHOOSE_TRANSPARENCY 32 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_0 33 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_0 34 +#define SETUP_MODE_CHOOSE_GRID_XSIZE_1 35 +#define SETUP_MODE_CHOOSE_GRID_YSIZE_1 36 +#define SETUP_MODE_CONFIG_VIRT_BUTTONS 37 + +#define MAX_SETUP_MODES 38 #define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES) @@ -107,6 +108,7 @@ #define STR_SETUP_CHOOSE_WINDOW_SIZE "Window Scaling" #define STR_SETUP_CHOOSE_SCALING_TYPE "Anti-Aliasing" #define STR_SETUP_CHOOSE_RENDERING "Rendering Mode" +#define STR_SETUP_CHOOSE_VSYNC "VSync Mode" #define STR_SETUP_CHOOSE_VOLUME_SIMPLE "Sound Volume" #define STR_SETUP_CHOOSE_VOLUME_LOOPS "Loops Volume" #define STR_SETUP_CHOOSE_VOLUME_MUSIC "Music Volume" @@ -128,6 +130,8 @@ #define MENU_SETUP_FONT_TITLE FONT_TEXT_1 #define MENU_SETUP_FONT_TEXT FONT_TITLE_2 +#define MAX_SETUP_TEXT_INPUT_LEN 28 + /* for various menu stuff */ #define MENU_SCREEN_START_XPOS 1 #define MENU_SCREEN_START_YPOS 2 @@ -167,7 +171,7 @@ #define MAX_MENU_TEXT_LENGTH_BIG 13 #define MAX_MENU_TEXT_LENGTH_MEDIUM (MAX_MENU_TEXT_LENGTH_BIG * 2) -/* buttons and scrollbars identifiers */ +/* screen gadget identifiers */ #define SCREEN_CTRL_ID_PREV_LEVEL 0 #define SCREEN_CTRL_ID_NEXT_LEVEL 1 #define SCREEN_CTRL_ID_PREV_PLAYER 2 @@ -177,12 +181,14 @@ #define SCREEN_CTRL_ID_SCROLL_UP 6 #define SCREEN_CTRL_ID_SCROLL_DOWN 7 #define SCREEN_CTRL_ID_SCROLL_VERTICAL 8 +#define SCREEN_CTRL_ID_NETWORK_SERVER 9 -#define NUM_SCREEN_GADGETS 9 +#define NUM_SCREEN_GADGETS 10 #define NUM_SCREEN_MENUBUTTONS 6 #define NUM_SCREEN_SCROLLBUTTONS 2 #define NUM_SCREEN_SCROLLBARS 1 +#define NUM_SCREEN_TEXTINPUT 1 #define SCREEN_MASK_MAIN (1 << 0) #define SCREEN_MASK_MAIN_HAS_SOLUTION (1 << 1) @@ -221,7 +227,7 @@ static void HandleSetupScreen_Generic(int, int, int, int, int); static void HandleSetupScreen_Input(int, int, int, int, int); static void CustomizeKeyboard(int); static void ConfigureJoystick(int); -static void ConfigureVirtualButtons(); +static void ConfigureVirtualButtons(void); static void execSetupGame(void); static void execSetupGraphics(void); static void execSetupSound(void); @@ -265,6 +271,9 @@ static TreeInfo *scaling_type_current = NULL; static TreeInfo *rendering_modes = NULL; static TreeInfo *rendering_mode_current = NULL; +static TreeInfo *vsync_modes = NULL; +static TreeInfo *vsync_mode_current = NULL; + static TreeInfo *scroll_delays = NULL; static TreeInfo *scroll_delay_current = NULL; @@ -353,6 +362,19 @@ static struct { NULL, NULL }, }; +static struct +{ + char *value; + char *text; +} vsync_modes_list[] = +{ + { STR_VSYNC_MODE_OFF, "Off" }, + { STR_VSYNC_MODE_NORMAL, "Normal" }, + { STR_VSYNC_MODE_ADAPTIVE, "Adaptive" }, + + { NULL, NULL }, +}; + static struct { int value; @@ -652,6 +674,8 @@ static char str_main_text_first_level[10]; static char str_main_text_last_level[10]; static char str_main_text_level_number[10]; +static char network_server_hostname[MAX_SETUP_TEXT_INPUT_LEN + 1]; + static char *main_text_name = str_main_text_name; static char *main_text_first_level = str_main_text_first_level; static char *main_text_last_level = str_main_text_last_level; @@ -1085,7 +1109,7 @@ static boolean visibleTextPos(struct TextPosInfo *pos) return (pos != NULL && pos->x != -1 && pos->y != -1); } -static void InitializeMainControls() +static void InitializeMainControls(void) { boolean local_team_mode = (!network.enabled && setup.team_mode); int i; @@ -1361,7 +1385,7 @@ static void AdjustChooseTreeScrollbar(int id, int first_entry, TreeInfo *ti) first_entry); } -static void clearMenuListArea() +static void clearMenuListArea(void) { int scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset; @@ -1415,13 +1439,13 @@ static void drawChooseTreeCursor(int ypos, boolean active) drawCursorExt(0, ypos, active, -1); } -void DrawHeadline() +static void DrawHeadline(void) { DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, main_text_title_1); DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, main_text_title_2); } -void DrawTitleScreenImage(int nr, boolean initial) +static void DrawTitleScreenImage(int nr, boolean initial) { int graphic = getTitleScreenGraphic(nr, initial); Bitmap *bitmap = graphic_info[graphic].bitmap; @@ -1465,7 +1489,7 @@ void DrawTitleScreenImage(int nr, boolean initial) redraw_mask = REDRAW_ALL; } -void DrawTitleScreenMessage(int nr, boolean initial) +static void DrawTitleScreenMessage(int nr, boolean initial) { char *filename = getLevelSetTitleMessageFilename(nr, initial); struct TitleMessageInfo *tmi = getTitleMessageInfo(nr, initial); @@ -1516,14 +1540,14 @@ void DrawTitleScreenMessage(int nr, boolean initial) ResetFontStatus(); } -void DrawTitleScreen() +static void DrawTitleScreen(void) { KeyboardAutoRepeatOff(); HandleTitleScreen(0, 0, 0, 0, MB_MENU_INITIALIZE); } -boolean CheckTitleScreen(boolean levelset_has_changed) +static boolean CheckTitleScreen(boolean levelset_has_changed) { static boolean show_title_initial = TRUE; boolean show_titlescreen = FALSE; @@ -1540,7 +1564,7 @@ boolean CheckTitleScreen(boolean levelset_has_changed) return (show_titlescreen && num_title_screens > 0); } -void DrawMainMenu() +void DrawMainMenu(void) { static LevelDirTree *leveldir_last_valid = NULL; boolean levelset_has_changed = FALSE; @@ -1686,7 +1710,7 @@ void DrawMainMenu() OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); } -static void gotoTopLevelDir() +static void gotoTopLevelDir(void) { /* move upwards until inside (but not above) top level directory */ while (leveldir_current->node_parent && @@ -1887,7 +1911,8 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) } } -void HandleMainMenu_SelectLevel(int step, int direction, int selected_level_nr) +static void HandleMainMenu_SelectLevel(int step, int direction, + int selected_level_nr) { int old_level_nr = level_nr; int new_level_nr; @@ -2137,56 +2162,56 @@ static struct TokenInfo *info_info; static int num_info_info; /* number of info entries shown on screen */ static int max_info_info; /* total number of info entries in list */ -static void execInfoTitleScreen() +static void execInfoTitleScreen(void) { info_mode = INFO_MODE_TITLE; DrawInfoScreen(); } -static void execInfoElements() +static void execInfoElements(void) { info_mode = INFO_MODE_ELEMENTS; DrawInfoScreen(); } -static void execInfoMusic() +static void execInfoMusic(void) { info_mode = INFO_MODE_MUSIC; DrawInfoScreen(); } -static void execInfoCredits() +static void execInfoCredits(void) { info_mode = INFO_MODE_CREDITS; DrawInfoScreen(); } -static void execInfoProgram() +static void execInfoProgram(void) { info_mode = INFO_MODE_PROGRAM; DrawInfoScreen(); } -static void execInfoVersion() +static void execInfoVersion(void) { info_mode = INFO_MODE_VERSION; DrawInfoScreen(); } -static void execInfoLevelSet() +static void execInfoLevelSet(void) { info_mode = INFO_MODE_LEVELSET; DrawInfoScreen(); } -static void execExitInfo() +static void execExitInfo(void) { SetGameStatus(GAME_MODE_MAIN); @@ -2217,7 +2242,8 @@ static int getMenuTextFont(int type) TYPE_PLAYER | TYPE_ECS_AGA | TYPE_KEYTEXT | - TYPE_ENTER_LIST)) + TYPE_ENTER_LIST | + TYPE_TEXT_INPUT)) return FONT_MENU_2; else return FONT_MENU_1; @@ -2264,6 +2290,7 @@ static void DrawCursorAndText_Setup(int screen_pos, int menu_info_pos_raw, static char *window_size_text; static char *scaling_type_text; +static char *network_server_text; static void drawSetupValue(int, int); @@ -2301,13 +2328,32 @@ static void drawMenuInfoList(int first_entry, int num_page_entries, DrawCursorAndText_Menu(i, menu_info_pos, FALSE); + if (si->type & TYPE_STRING) + { + int gadget_id = -1; + + if (value_ptr == &network_server_text) + gadget_id = SCREEN_CTRL_ID_NETWORK_SERVER; + + if (gadget_id != -1) + { + struct GadgetInfo *gi = screen_gadget[gadget_id]; + int xpos = MENU_SCREEN_START_XPOS; + int ypos = MENU_SCREEN_START_YPOS + i; + int x = mSX + xpos * 32; + int y = mSY + ypos * 32; + + ModifyGadget(gi, GDI_X, x, GDI_Y, y, GDI_END); + } + } + if (si->type & TYPE_VALUE && menu_info == setup_info) drawSetupValue(i, menu_info_pos); } } -static void DrawInfoScreen_Main() +static void DrawInfoScreen_Main(void) { int fade_mask = REDRAW_FIELD; int i; @@ -2367,8 +2413,9 @@ static void DrawInfoScreen_Main() static void changeSetupValue(int, int, int); -void HandleMenuScreen(int mx, int my, int dx, int dy, int button, - int mode, int num_page_entries, int max_page_entries) +static void HandleMenuScreen(int mx, int my, int dx, int dy, int button, + int mode, int num_page_entries, + int max_page_entries) { static int num_page_entries_all_last[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES]; static int choice_stores[NUM_SPECIAL_GFX_ARGS][MAX_MENU_MODES]; @@ -2645,6 +2692,11 @@ void HandleMenuScreen(int mx, int my, int dx, int dy, int button, menu_info[first_entry + y - 1].type & TYPE_ENTER_LIST) y--; + /* when selecting string value, execute function for text input gadget */ + if (menu_info[first_entry + y].type & TYPE_STRING && y > 0 && + menu_info[first_entry + y - 1].type & TYPE_TEXT_INPUT) + y--; + if (menu_info[first_entry + y].type & TYPE_ENTER_OR_LEAVE) { void (*menu_callback_function)(void) = @@ -2654,6 +2706,13 @@ void HandleMenuScreen(int mx, int my, int dx, int dy, int button, menu_callback_function(); } + else if (menu_info[first_entry + y].type & TYPE_TEXT_INPUT) + { + void (*gadget_callback_function)(void) = + menu_info[first_entry + y].value; + + gadget_callback_function(); + } else if (menu_info[first_entry + y].type & TYPE_VALUE && menu_info == setup_info) { @@ -2885,7 +2944,7 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos) TRUE, FALSE, FALSE); } -void DrawInfoScreen_TitleScreen() +static void DrawInfoScreen_TitleScreen(void) { SetGameStatus(GAME_MODE_TITLE); @@ -2897,7 +2956,7 @@ void HandleInfoScreen_TitleScreen(int button) HandleTitleScreen(0, 0, 0, 0, button); } -void DrawInfoScreen_Elements() +static void DrawInfoScreen_Elements(void) { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS); @@ -2990,7 +3049,7 @@ void HandleInfoScreen_Elements(int button) } } -void DrawInfoScreen_Music() +static void DrawInfoScreen_Music(void) { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_MUSIC); @@ -3096,7 +3155,12 @@ void HandleInfoScreen_Music(int button) } else { - PlayMusic(list->music); + int music = list->music; + + if (music_info[music].loop) + PlayMusicLoop(music); + else + PlayMusic(music); DrawTextSCentered(ystart, font_title, "The Game Background Music:"); } @@ -3396,7 +3460,7 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) "Press any key or button for next page"); } -void DrawInfoScreen_Credits() +static void DrawInfoScreen_Credits(void) { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_CREDITS); @@ -3466,7 +3530,7 @@ void HandleInfoScreen_Credits(int button) } } -void DrawInfoScreen_Program() +static void DrawInfoScreen_Program(void) { int font_title = MENU_INFO_FONT_TITLE; int font_head = MENU_INFO_FONT_HEAD; @@ -3551,7 +3615,7 @@ void HandleInfoScreen_Program(int button) } } -void DrawInfoScreen_Version() +static void DrawInfoScreen_Version(void) { int font_title = MENU_INFO_FONT_TITLE; int font_head = MENU_INFO_FONT_HEAD; @@ -3748,7 +3812,7 @@ void HandleInfoScreen_Version(int button) } } -void DrawInfoScreen_LevelSet() +static void DrawInfoScreen_LevelSet(void) { struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); @@ -3810,7 +3874,7 @@ void DrawInfoScreen_LevelSet() FadeIn(REDRAW_FIELD); } -void HandleInfoScreen_LevelSet(int button) +static void HandleInfoScreen_LevelSet(int button) { if (button == MB_MENU_LEAVE) { @@ -3836,7 +3900,7 @@ void HandleInfoScreen_LevelSet(int button) } } -static void DrawInfoScreen() +static void DrawInfoScreen(void) { if (info_mode == INFO_MODE_TITLE) DrawInfoScreen_TitleScreen(); @@ -4161,7 +4225,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, execSetupGame(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || - setup_mode == SETUP_MODE_CHOOSE_RENDERING) + setup_mode == SETUP_MODE_CHOOSE_RENDERING || + setup_mode == SETUP_MODE_CHOOSE_VSYNC) execSetupGraphics(); else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || @@ -4318,7 +4383,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, execSetupGame(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || - setup_mode == SETUP_MODE_CHOOSE_RENDERING) + setup_mode == SETUP_MODE_CHOOSE_RENDERING || + setup_mode == SETUP_MODE_CHOOSE_VSYNC) execSetupGraphics(); else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || @@ -4389,7 +4455,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, execSetupGame(); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE || - setup_mode == SETUP_MODE_CHOOSE_RENDERING) + setup_mode == SETUP_MODE_CHOOSE_RENDERING || + setup_mode == SETUP_MODE_CHOOSE_VSYNC) execSetupGraphics(); else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || @@ -4425,7 +4492,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } } -void DrawChooseLevelSet() +void DrawChooseLevelSet(void) { FadeMenuSoundsAndMusic(); @@ -4439,7 +4506,7 @@ void HandleChooseLevelSet(int mx, int my, int dx, int dy, int button) HandleChooseTree(mx, my, dx, dy, button, &leveldir_current); } -void DrawChooseLevelNr() +void DrawChooseLevelNr(void) { int i; @@ -4532,14 +4599,15 @@ void DrawHallOfFame(int level_nr, int highlight_position) OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); - HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE); + HandleHallOfFame(level_nr, highlight_position, 0, 0, MB_MENU_INITIALIZE); DrawMaskedBorder(fade_mask); FadeIn(fade_mask); } -static void drawHallOfFameList(int first_entry, int highlight_position) +static void drawHallOfFameList(int level_nr, int first_entry, + int highlight_position) { int i, j; @@ -4582,15 +4650,18 @@ static void drawHallOfFameList(int first_entry, int highlight_position) void HandleHallOfFame(int mx, int my, int dx, int dy, int button) { + static int level_nr = 0; static int first_entry = 0; static int highlight_position = 0; int step = (button == 1 ? 1 : button == 2 ? 5 : 10); if (button == MB_MENU_INITIALIZE) { + level_nr = mx; first_entry = 0; - highlight_position = mx; - drawHallOfFameList(first_entry, highlight_position); + highlight_position = my; + + drawHallOfFameList(level_nr, first_entry, highlight_position); return; } @@ -4606,7 +4677,7 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) if (first_entry < 0) first_entry = 0; - drawHallOfFameList(first_entry, highlight_position); + drawHallOfFameList(level_nr, first_entry, highlight_position); } } else if (dy > 0) @@ -4617,7 +4688,7 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN > MAX_SCORE_ENTRIES) first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN); - drawHallOfFameList(first_entry, highlight_position); + drawHallOfFameList(level_nr, first_entry, highlight_position); } } else if (button == MB_MENU_LEAVE || button == MB_MENU_CHOICE) @@ -4626,16 +4697,17 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) FadeSound(SND_BACKGROUND_SCORES); - if (game_status_last_screen != GAME_MODE_PLAYING || - !setup.auto_play_next_level || !setup.increment_levels) + if (game_status_last_screen == GAME_MODE_PLAYING && + setup.auto_play_next_level && setup.increment_levels && + !network_playing) { - SetGameStatus(GAME_MODE_MAIN); - - DrawMainMenu(); + StartGameActions(network.enabled, setup.autorecord, level.random_seed); } else { - StartGameActions(network.enabled, setup.autorecord, level.random_seed); + SetGameStatus(GAME_MODE_MAIN); + + DrawMainMenu(); } } @@ -4655,9 +4727,11 @@ static int max_setup_info; /* total number of setup entries in list */ static char *window_size_text; static char *scaling_type_text; static char *rendering_mode_text; +static char *vsync_mode_text; static char *scroll_delay_text; static char *snapshot_mode_text; static char *game_speed_text; +static char *network_server_text; static char *graphics_set_name; static char *sounds_set_name; static char *music_set_name; @@ -4670,14 +4744,14 @@ static char *drop_distance_text; static char *transparency_text; static char *grid_size_text[2][2]; -static void execSetupMain() +static void execSetupMain(void) { setup_mode = SETUP_MODE_MAIN; DrawSetupScreen(); } -static void execSetupGame_setGameSpeeds() +static void execSetupGame_setGameSpeeds(void) { if (game_speeds == NULL) { @@ -4727,7 +4801,7 @@ static void execSetupGame_setGameSpeeds() game_speed_text = game_speed_current->name; } -static void execSetupGame_setScrollDelays() +static void execSetupGame_setScrollDelays(void) { if (scroll_delays == NULL) { @@ -4777,7 +4851,7 @@ static void execSetupGame_setScrollDelays() scroll_delay_text = scroll_delay_current->name; } -static void execSetupGame_setSnapshotModes() +static void execSetupGame_setSnapshotModes(void) { if (snapshot_modes == NULL) { @@ -4827,39 +4901,58 @@ static void execSetupGame_setSnapshotModes() snapshot_mode_text = snapshot_mode_current->name; } -static void execSetupGame() +static void execSetupGame_setNetworkServerText(void) +{ + if (strEqual(setup.network_server_hostname, STR_NETWORK_AUTO_DETECT)) + { + strcpy(network_server_hostname, STR_NETWORK_AUTO_DETECT_SETUP); + } + else + { + strncpy(network_server_hostname, setup.network_server_hostname, + MAX_SETUP_TEXT_INPUT_LEN); + network_server_hostname[MAX_SETUP_TEXT_INPUT_LEN] = '\0'; + } + + /* needed for displaying network server text instead of identifier */ + network_server_text = network_server_hostname; +} + +static void execSetupGame(void) { execSetupGame_setGameSpeeds(); execSetupGame_setScrollDelays(); execSetupGame_setSnapshotModes(); + execSetupGame_setNetworkServerText(); + setup_mode = SETUP_MODE_GAME; DrawSetupScreen(); } -static void execSetupChooseGameSpeed() +static void execSetupChooseGameSpeed(void) { setup_mode = SETUP_MODE_CHOOSE_GAME_SPEED; DrawSetupScreen(); } -static void execSetupChooseScrollDelay() +static void execSetupChooseScrollDelay(void) { setup_mode = SETUP_MODE_CHOOSE_SCROLL_DELAY; DrawSetupScreen(); } -static void execSetupChooseSnapshotMode() +static void execSetupChooseSnapshotMode(void) { setup_mode = SETUP_MODE_CHOOSE_SNAPSHOT_MODE; DrawSetupScreen(); } -static void execSetupEditor() +static void execSetupEditor(void) { setup_mode = SETUP_MODE_EDITOR; @@ -4951,7 +5044,7 @@ static void execSetupGraphics_setWindowSizes(boolean update_list) window_size_text = window_size_current->name; } -static void execSetupGraphics_setScalingTypes() +static void execSetupGraphics_setScalingTypes(void) { if (scaling_types == NULL) { @@ -5001,7 +5094,7 @@ static void execSetupGraphics_setScalingTypes() scaling_type_text = scaling_type_current->name; } -static void execSetupGraphics_setRenderingModes() +static void execSetupGraphics_setRenderingModes(void) { if (rendering_modes == NULL) { @@ -5052,7 +5145,57 @@ static void execSetupGraphics_setRenderingModes() rendering_mode_text = rendering_mode_current->name; } -static void execSetupGraphics() +static void execSetupGraphics_setVsyncModes(void) +{ + if (vsync_modes == NULL) + { + int i; + + for (i = 0; vsync_modes_list[i].value != NULL; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + char *value = vsync_modes_list[i].value; + char *text = vsync_modes_list[i].text; + + ti->node_top = &vsync_modes; + ti->sort_priority = i; + + sprintf(identifier, "%s", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, STR_SETUP_CHOOSE_VSYNC); + + pushTreeInfo(&vsync_modes, ti); + } + + /* sort vsync mode values to start with lowest vsync mode value */ + sortTreeInfo(&vsync_modes); + + /* set current vsync mode value to configured vsync mode value */ + vsync_mode_current = + getTreeInfoFromIdentifier(vsync_modes, setup.vsync_mode); + + /* if that fails, set current vsync mode to reliable default value */ + if (vsync_mode_current == NULL) + vsync_mode_current = + getTreeInfoFromIdentifier(vsync_modes, STR_VSYNC_MODE_DEFAULT); + + /* if that also fails, set current vsync mode to first available one */ + if (vsync_mode_current == NULL) + vsync_mode_current = vsync_modes; + } + + setup.vsync_mode = vsync_mode_current->identifier; + + /* needed for displaying vsync mode text instead of identifier */ + vsync_mode_text = vsync_mode_current->name; +} + +static void execSetupGraphics(void) { // update "setup.window_scaling_percent" from list selection // (in this case, window scaling was changed on setup screen) @@ -5065,6 +5208,7 @@ static void execSetupGraphics() execSetupGraphics_setScalingTypes(); execSetupGraphics_setRenderingModes(); + execSetupGraphics_setVsyncModes(); setup_mode = SETUP_MODE_GRAPHICS; @@ -5080,52 +5224,62 @@ static void execSetupGraphics() // screen rendering mode may have changed at this point SDLSetScreenRenderingMode(setup.screen_rendering_mode); + + // screen vsync mode may have changed at this point + SDLSetScreenVsyncMode(setup.vsync_mode); #endif } -static void execSetupChooseWindowSize() +static void execSetupChooseWindowSize(void) { setup_mode = SETUP_MODE_CHOOSE_WINDOW_SIZE; DrawSetupScreen(); } -static void execSetupChooseScalingType() +static void execSetupChooseScalingType(void) { setup_mode = SETUP_MODE_CHOOSE_SCALING_TYPE; DrawSetupScreen(); } -static void execSetupChooseRenderingMode() +static void execSetupChooseRenderingMode(void) { setup_mode = SETUP_MODE_CHOOSE_RENDERING; DrawSetupScreen(); } -static void execSetupChooseVolumeSimple() +static void execSetupChooseVsyncMode(void) +{ + setup_mode = SETUP_MODE_CHOOSE_VSYNC; + + DrawSetupScreen(); +} + +static void execSetupChooseVolumeSimple(void) { setup_mode = SETUP_MODE_CHOOSE_VOLUME_SIMPLE; DrawSetupScreen(); } -static void execSetupChooseVolumeLoops() +static void execSetupChooseVolumeLoops(void) { setup_mode = SETUP_MODE_CHOOSE_VOLUME_LOOPS; DrawSetupScreen(); } -static void execSetupChooseVolumeMusic() +static void execSetupChooseVolumeMusic(void) { setup_mode = SETUP_MODE_CHOOSE_VOLUME_MUSIC; DrawSetupScreen(); } -static void execSetupSound() +static void execSetupSound(void) { if (volumes_simple == NULL) { @@ -5345,63 +5499,63 @@ static void execSetupSound() DrawSetupScreen(); } -static void execSetupChooseTouchControls() +static void execSetupChooseTouchControls(void) { setup_mode = SETUP_MODE_CHOOSE_TOUCH_CONTROL; DrawSetupScreen(); } -static void execSetupChooseMoveDistance() +static void execSetupChooseMoveDistance(void) { setup_mode = SETUP_MODE_CHOOSE_MOVE_DISTANCE; DrawSetupScreen(); } -static void execSetupChooseDropDistance() +static void execSetupChooseDropDistance(void) { setup_mode = SETUP_MODE_CHOOSE_DROP_DISTANCE; DrawSetupScreen(); } -static void execSetupChooseTransparency() +static void execSetupChooseTransparency(void) { setup_mode = SETUP_MODE_CHOOSE_TRANSPARENCY; DrawSetupScreen(); } -static void execSetupChooseGridXSize_0() +static void execSetupChooseGridXSize_0(void) { setup_mode = SETUP_MODE_CHOOSE_GRID_XSIZE_0; DrawSetupScreen(); } -static void execSetupChooseGridYSize_0() +static void execSetupChooseGridYSize_0(void) { setup_mode = SETUP_MODE_CHOOSE_GRID_YSIZE_0; DrawSetupScreen(); } -static void execSetupChooseGridXSize_1() +static void execSetupChooseGridXSize_1(void) { setup_mode = SETUP_MODE_CHOOSE_GRID_XSIZE_1; DrawSetupScreen(); } -static void execSetupChooseGridYSize_1() +static void execSetupChooseGridYSize_1(void) { setup_mode = SETUP_MODE_CHOOSE_GRID_YSIZE_1; DrawSetupScreen(); } -static void execSetupConfigureVirtualButtons() +static void execSetupConfigureVirtualButtons(void) { setup_mode = SETUP_MODE_CONFIG_VIRT_BUTTONS; @@ -5412,7 +5566,7 @@ static void execSetupConfigureVirtualButtons() DrawSetupScreen(); } -static void execSetupTouch() +static void execSetupTouch(void) { int i, j, k; @@ -5673,7 +5827,7 @@ static void execSetupTouch() DrawSetupScreen(); } -static void execSetupArtwork() +static void execSetupArtwork(void) { #if 0 printf("::: '%s', '%s', '%s'\n", @@ -5699,89 +5853,138 @@ static void execSetupArtwork() DrawSetupScreen(); } -static void execSetupChooseGraphics() +static void execSetupChooseGraphics(void) { setup_mode = SETUP_MODE_CHOOSE_GRAPHICS; DrawSetupScreen(); } -static void execSetupChooseSounds() +static void execSetupChooseSounds(void) { setup_mode = SETUP_MODE_CHOOSE_SOUNDS; DrawSetupScreen(); } -static void execSetupChooseMusic() +static void execSetupChooseMusic(void) { setup_mode = SETUP_MODE_CHOOSE_MUSIC; DrawSetupScreen(); } -static void execSetupInput() +static void execSetupInput(void) { setup_mode = SETUP_MODE_INPUT; DrawSetupScreen(); } -static void execSetupShortcuts() +static void execSetupShortcuts(void) { setup_mode = SETUP_MODE_SHORTCUTS; DrawSetupScreen(); } -static void execSetupShortcuts1() +static void execSetupShortcuts1(void) { setup_mode = SETUP_MODE_SHORTCUTS_1; DrawSetupScreen(); } -static void execSetupShortcuts2() +static void execSetupShortcuts2(void) { setup_mode = SETUP_MODE_SHORTCUTS_2; DrawSetupScreen(); } -static void execSetupShortcuts3() +static void execSetupShortcuts3(void) { setup_mode = SETUP_MODE_SHORTCUTS_3; DrawSetupScreen(); } -static void execSetupShortcuts4() +static void execSetupShortcuts4(void) { setup_mode = SETUP_MODE_SHORTCUTS_4; DrawSetupScreen(); } -static void execSetupShortcuts5() +static void execSetupShortcuts5(void) { setup_mode = SETUP_MODE_SHORTCUTS_5; DrawSetupScreen(); } -static void execExitSetup() +static void execExitSetup(void) { SetGameStatus(GAME_MODE_MAIN); DrawMainMenu(); } -static void execSaveAndExitSetup() +static void execSaveAndExitSetup(void) { SaveSetup(); execExitSetup(); } +static void execGadgetNetworkServer(void) +{ + int gadget_id = SCREEN_CTRL_ID_NETWORK_SERVER; + struct GadgetInfo *gi = screen_gadget[gadget_id]; + + if (strEqual(setup.network_server_hostname, STR_NETWORK_AUTO_DETECT)) + network_server_hostname[0] = '\0'; + + ModifyGadget(gi, GDI_TEXT_VALUE, network_server_hostname, GDI_END); + + MapGadget(gi); + + ClickOnGadget(gi, MB_LEFTBUTTON); +} + +static void ToggleNetworkModeIfNeeded(void) +{ + int font_title = FONT_TITLE_1; + int font_foot = FC_BLUE; + int ystart = mSY - SY + 16; + int ybottom = mSY - SY + SYSIZE - 20; + char *text = (setup.network_mode ? "Start Network" : "Stop Network"); + + if (setup.network_mode == network.enabled) + return; + + network.enabled = setup.network_mode; + + FadeOut(REDRAW_ALL); + + ClearField(); + + DrawTextSCentered(ystart, font_title, text); + + FadeIn(REDRAW_ALL); + + if (network.enabled) + InitNetworkServer(); + else + DisconnectFromNetworkServer(); + + DrawTextSCentered(ybottom, font_foot, + "Press any key or button for setup menu"); + + WaitForEventToContinue(); + + DrawSetupScreen(); +} + static struct { void *value; @@ -5806,6 +6009,9 @@ static struct { &setup.screen_rendering_mode, execSetupChooseRenderingMode }, { &setup.screen_rendering_mode, &rendering_mode_text }, + { &setup.vsync_mode, execSetupChooseVsyncMode }, + { &setup.vsync_mode, &vsync_mode_text }, + { &setup.graphics_set, execSetupChooseGraphics }, { &setup.graphics_set, &graphics_set_name }, @@ -5851,7 +6057,7 @@ static struct { NULL, NULL } }; -void setHideRelatedSetupEntries() +void setHideRelatedSetupEntries(void) { int i; @@ -5882,6 +6088,8 @@ static struct TokenInfo setup_info_game[] = { TYPE_SWITCH, &setup.team_mode, "Team-Mode (Multi-Player):" }, { TYPE_SWITCH, &setup.network_mode, "Network Multi-Player Mode:" }, { TYPE_PLAYER, &setup.network_player_nr,"Preferred Network Player:" }, + { TYPE_TEXT_INPUT, execGadgetNetworkServer, "Network Server Hostname:" }, + { TYPE_STRING, &network_server_text, "" }, { TYPE_YES_NO, &setup.input_on_focus, "Only Move Focussed Player:" }, { TYPE_SWITCH, &setup.time_limit, "Time Limit:" }, { TYPE_SWITCH, &setup.handicap, "Handicap:" }, @@ -5954,6 +6162,8 @@ static struct TokenInfo setup_info_graphics[] = { TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay:" }, { TYPE_STRING, &scroll_delay_text, "" }, #endif + { TYPE_ENTER_LIST, execSetupChooseVsyncMode, "Vertical Sync (VSync):" }, + { TYPE_STRING, &vsync_mode_text, "" }, { TYPE_SWITCH, &setup.fade_screens, "Fade Screens:" }, { TYPE_SWITCH, &setup.quick_switch, "Quick Player Focus Switch:" }, { TYPE_SWITCH, &setup.quick_doors, "Quick Menu Doors:" }, @@ -6195,7 +6405,7 @@ static struct TokenInfo setup_info_shortcuts_5[] = { 0, NULL, NULL } }; -static Key getSetupKey() +static Key getSetupKey(void) { Key key = KSYM_UNDEFINED; boolean got_key_event = FALSE; @@ -6279,10 +6489,12 @@ static void drawSetupValue(int screen_pos, int setup_info_pos_raw) int ypos = MENU_SCREEN_START_YPOS + screen_pos; int startx = mSX + xpos * 32; int starty = mSY + ypos * 32; - int font_nr, font_nr_default, font_width_default; int type = si->type; void *value = si->value; char *value_string = getSetupValue(type, value); + int font_nr_default = getSetupValueFont(type, value); + int font_width_default = getFontWidth(font_nr_default); + int font_nr = font_nr_default; int i; if (value_string == NULL) @@ -6317,10 +6529,6 @@ static void drawSetupValue(int screen_pos, int setup_info_pos_raw) startx = mSX + xpos * 32; starty = mSY + ypos * 32; - font_nr_default = getSetupValueFont(type, value); - font_width_default = getFontWidth(font_nr_default); - - font_nr = font_nr_default; // special check if right-side setup values moved left due to scrollbar if (scrollbar_needed && xpos > MENU_SCREEN_START_XPOS) @@ -6386,10 +6594,17 @@ static void drawSetupValue(int screen_pos, int setup_info_pos_raw) if (type & TYPE_PLAYER) { + struct FontBitmapInfo *font = getFontBitmapInfo(font_nr); int player_nr = *(int *)value; - int xoff = getFontWidth(font_nr); + int xoff = font->draw_xoffset + getFontWidth(font_nr); + int yoff = font->draw_yoffset + (getFontHeight(font_nr) - TILEY) / 2; + int startx2 = startx + xoff; + int starty2 = starty + yoff; - DrawFixedGraphicThruMaskExt(drawto, startx + xoff, starty, + if (DrawingOnBackground(startx2, starty2)) + ClearRectangleOnBackground(drawto, startx2, starty2, TILEX, TILEY); + + DrawFixedGraphicThruMaskExt(drawto, startx2, starty2, PLAYER_NR_GFX(IMG_PLAYER_1, player_nr), 0); } @@ -6445,24 +6660,9 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx) if (si->value == &setup.fullscreen) ToggleFullscreenOrChangeWindowScalingIfNeeded(); - if (si->value == &setup.network_mode && - setup.network_mode != network.enabled) - { - network.enabled = setup.network_mode; - - FadeOut(REDRAW_ALL); - - ClearField(); - - FadeIn(REDRAW_ALL); - - if (network.enabled) - InitNetworkServer(); - else - DisconnectFromNetworkServer(); - - DrawSetupScreen(); - } + // network mode may have changed at this point + if (si->value == &setup.network_mode) + ToggleNetworkModeIfNeeded(); } static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig) @@ -6497,7 +6697,7 @@ static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig) return setup_info_final; } -static void DrawSetupScreen_Generic() +static void DrawSetupScreen_Generic(void) { int fade_mask = REDRAW_FIELD; boolean redraw_all = FALSE; @@ -6633,7 +6833,7 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) setup_mode, num_setup_info, max_setup_info); } -void DrawSetupScreen_Input() +static void DrawSetupScreen_Input(void) { int i; @@ -6787,7 +6987,7 @@ static void drawPlayerSetupInputInfo(int player_nr, boolean active) static int input_player_nr = 0; -void HandleSetupScreen_Input_Player(int step, int direction) +static void HandleSetupScreen_Input_Player(int step, int direction) { int old_player_nr = input_player_nr; int new_player_nr; @@ -7541,7 +7741,7 @@ void ConfigureJoystick(int player_nr) DrawSetupScreen_Input(); } -boolean ConfigureVirtualButtonsMain() +static boolean ConfigureVirtualButtonsMain(void) { static char *customize_step_text[] = { @@ -7778,7 +7978,7 @@ boolean ConfigureVirtualButtonsMain() return success; } -void ConfigureVirtualButtons() +void ConfigureVirtualButtons(void) { boolean success = ConfigureVirtualButtonsMain(); @@ -7805,7 +8005,7 @@ void ConfigureVirtualButtons() } } -void DrawSetupScreen() +void DrawSetupScreen(void) { if (setup_mode == SETUP_MODE_INPUT) DrawSetupScreen_Input(); @@ -7821,6 +8021,8 @@ void DrawSetupScreen() DrawChooseTree(&scaling_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_RENDERING) DrawChooseTree(&rendering_mode_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VSYNC) + DrawChooseTree(&vsync_mode_current); else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) DrawChooseTree(&artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) @@ -7855,7 +8057,7 @@ void DrawSetupScreen() PlayMenuSoundsAndMusic(); } -void RedrawSetupScreenAfterFullscreenToggle() +void RedrawSetupScreenAfterFullscreenToggle(void) { if (setup_mode == SETUP_MODE_GRAPHICS || setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) @@ -7901,6 +8103,8 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) HandleChooseTree(mx, my, dx, dy, button, &scaling_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_RENDERING) HandleChooseTree(mx, my, dx, dy, button, &rendering_mode_current); + else if (setup_mode == SETUP_MODE_CHOOSE_VSYNC) + HandleChooseTree(mx, my, dx, dy, button, &vsync_mode_current); else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) HandleChooseTree(mx, my, dx, dy, button, &artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) @@ -7933,7 +8137,7 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) HandleSetupScreen_Generic(mx, my, dx, dy, button); } -void HandleGameActions() +void HandleGameActions(void) { if (game.restart_game_message != NULL) RequestRestartGame(game.restart_game_message); @@ -8084,7 +8288,27 @@ static struct } }; -static void CreateScreenMenubuttons() +static struct +{ + int graphic; + int gadget_id; + int x, y; + int size; + char *value; + char *infotext; +} textinput_info[NUM_SCREEN_TEXTINPUT] = +{ + { + IMG_SETUP_INPUT_TEXT, + SCREEN_CTRL_ID_NETWORK_SERVER, + -1, -1, /* these values are not constant, but can change at runtime */ + MAX_SETUP_TEXT_INPUT_LEN, + network_server_hostname, + "Network Server Hostname / IP" + }, +}; + +static void CreateScreenMenubuttons(void) { struct GadgetInfo *gi; unsigned int event_mask; @@ -8149,7 +8373,7 @@ static void CreateScreenMenubuttons() } } -static void CreateScreenScrollbuttons() +static void CreateScreenScrollbuttons(void) { struct GadgetInfo *gi; unsigned int event_mask; @@ -8217,7 +8441,7 @@ static void CreateScreenScrollbuttons() } } -static void CreateScreenScrollbars() +static void CreateScreenScrollbars(void) { int i; @@ -8298,15 +8522,63 @@ static void CreateScreenScrollbars() } } -void CreateScreenGadgets() +static void CreateScreenTextInputGadgets(void) +{ + int i; + + for (i = 0; i < NUM_SCREEN_TEXTINPUT; i++) + { + int graphic = textinput_info[i].graphic; + struct GraphicInfo *gd = &graphic_info[graphic]; + int gd_x1 = gd->src_x; + int gd_y1 = gd->src_y; + int gd_x2 = gd->src_x + gd->active_xoffset; + int gd_y2 = gd->src_y + gd->active_yoffset; + struct GadgetInfo *gi; + unsigned int event_mask; + int id = textinput_info[i].gadget_id; + int x = textinput_info[i].x; + int y = textinput_info[i].y; + + event_mask = GD_EVENT_TEXT_RETURN | GD_EVENT_TEXT_LEAVING; + + gi = CreateGadget(GDI_CUSTOM_ID, id, + GDI_CUSTOM_TYPE_ID, i, + GDI_INFO_TEXT, textinput_info[i].infotext, + GDI_X, SX + x, + GDI_Y, SY + y, + GDI_TYPE, GD_TYPE_TEXT_INPUT_ALPHANUMERIC, + GDI_TEXT_VALUE, textinput_info[i].value, + GDI_TEXT_SIZE, textinput_info[i].size, + GDI_TEXT_FONT, getSetupValueFont(TYPE_STRING, NULL), + GDI_TEXT_FONT_ACTIVE, FONT_TEXT_1, + GDI_DESIGN_UNPRESSED, gd->bitmap, gd_x1, gd_y1, + GDI_DESIGN_PRESSED, gd->bitmap, gd_x2, gd_y2, + GDI_BORDER_SIZE, gd->border_size, gd->border_size, + GDI_DESIGN_WIDTH, gd->width, + GDI_EVENT_MASK, event_mask, + GDI_CALLBACK_ACTION, HandleScreenGadgets, + GDI_CALLBACK_ACTION_ALWAYS, TRUE, + GDI_END); + + if (gi == NULL) + Error(ERR_EXIT, "cannot create gadget"); + + screen_gadget[id] = gi; + } +} + +void CreateScreenGadgets(void) { CreateScreenMenubuttons(); CreateScreenScrollbuttons(); CreateScreenScrollbars(); + + CreateScreenTextInputGadgets(); } -void FreeScreenGadgets() +void FreeScreenGadgets(void) { int i; @@ -8323,7 +8595,7 @@ void MapScreenMenuGadgets(int screen_mask) MapGadget(screen_gadget[menubutton_info[i].gadget_id]); } -void UnmapScreenMenuGadgets(int screen_mask) +static void UnmapScreenMenuGadgets(int screen_mask) { int i; @@ -8436,12 +8708,37 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) HandleInfoScreen(0,0, 999,gi->event.item_position,MB_MENU_INITIALIZE); break; + case SCREEN_CTRL_ID_NETWORK_SERVER: + { + if (!strEqual(gi->textinput.value, "")) + { + setString(&setup.network_server_hostname, gi->textinput.value); + + network.server_host = setup.network_server_hostname; + } + else + { + setString(&setup.network_server_hostname, STR_NETWORK_AUTO_DETECT); + + network.server_host = NULL; + } + + if (strEqual(network.server_host, STR_NETWORK_AUTO_DETECT)) + network.server_host = NULL; + + execSetupGame_setNetworkServerText(); + + DrawSetupScreen(); + + break; + } + default: break; } } -void DumpScreenIdentifiers() +void DumpScreenIdentifiers(void) { int i;