From 19806aa7ecc44f7df9a4718db672e8a8193b0344 Mon Sep 17 00:00:00 2001 From: kreatordxx <> Date: Tue, 8 Dec 2009 11:01:36 +0000 Subject: [PATCH] Move newmenu_get_filename to menu.c, call it get_filename and have it use newmenu_listbox1; support long demo filenames --- CHANGELOG.txt | 4 + main/gameseq.c | 11 +- main/menu.c | 201 ++++++++++++++++++++- main/menu.h | 1 + main/newdemo.c | 18 +- main/newmenu.c | 476 ------------------------------------------------- main/newmenu.h | 8 +- 7 files changed, 222 insertions(+), 497 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 42ef29e01..dc4c982cc 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20091208 +-------- +main/gameseq.c, main/menu.c, main/menu.h, main/newdemo.c, main/newmenu.c, main/newmenu.h: Move newmenu_get_filename to menu.c, call it get_filename and have it use newmenu_listbox1; support long demo filenames + 20091207 -------- main/net_ipx.c: Removing old use of variable already_showing_info which was removed from newmenu code diff --git a/main/gameseq.c b/main/gameseq.c index 649f78baa..60540cbc6 100644 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -674,22 +674,23 @@ try_again: //Inputs the player's name, without putting up the background screen int RegisterPlayer() { - char filename[14]; + char filename[PATH_MAX]; int allow_abort_flag = 1; - if ( Players[Player_num].callsign[0] == 0 ) { + if ( Players[Player_num].callsign[0] == 0 ) { // Read the last player's name from config file, not lastplr.txt strncpy( Players[Player_num].callsign, GameCfg.LastPlayer, CALLSIGN_LEN ); if (GameCfg.LastPlayer[0]==0) allow_abort_flag = 0; - } + } do_menu_again: ; - if (!newmenu_get_filename(TXT_SELECT_PILOT, ".plr", filename, allow_abort_flag)) - goto do_menu_again; //return 0; // They hit Esc in file selector + if (!get_filename(TXT_SELECT_PILOT, ".plr", filename, allow_abort_flag)) + goto do_menu_again; // They hit Esc in file selector + if ( filename[0] == '<' ) { // They selected 'create new pilot' if (!MakeNewPlayerFile(allow_abort_flag)) diff --git a/main/menu.c b/main/menu.c index 0303f428c..43025fa61 100644 --- a/main/menu.c +++ b/main/menu.c @@ -261,8 +261,8 @@ void do_option ( int select) break; case MENU_DEMO_PLAY: { - char demo_file[16]; - if (newmenu_get_filename(TXT_SELECT_DEMO, ".dem", demo_file, 1)) + char demo_file[PATH_MAX]; + if (get_filename(TXT_SELECT_DEMO, ".dem", demo_file, 1)) newdemo_start_playback(demo_file); break; } @@ -386,6 +386,203 @@ void do_option ( int select) } +void delete_player_saved_games(char * name) +{ + int i; + char filename[FILENAME_LEN + 9]; + + for (i=0;i<10; i++) + { + sprintf( filename, GameArg.SysUsePlayersDir? "Players/%s.sg%x" : "%s.sg%x", name, i ); + + PHYSFS_delete(filename); + } +} + +int fname_sort_func(char **e0, char **e1) +{ + return stricmp(*e0, *e1); +} + +enum +{ + K_DELETED = -5, + K_DELETED_DEMO = -6 +}; + +// These have to be statics until the newmenu callback system is revised +static int player_mode=0; +static int demo_mode=0; + +int filename_menu_handler( int * citem, int *nitems, char * items[], int *keypress ) +{ + switch (*keypress) + { + case KEY_CTRLED+KEY_D: + if ( ((player_mode)&&(*citem>0)) || ((demo_mode)&&(*citem>=0)) ) + { + int x = 1; + if (player_mode) + x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_PILOT, items[*citem]+((player_mode && items[*citem][0]=='$')?1:0) ); + else if (demo_mode) + x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_DEMO, items[*citem]+((demo_mode && items[*citem][0]=='$')?1:0) ); + if (x==0) { + char * p; + char plxfile[PATH_MAX]; + int ret; + char name[PATH_MAX]; + + p = items[*citem] + strlen(items[*citem]); + if (player_mode) + *p = '.'; + + strcpy(name, demo_mode ? DEMO_DIR : ((player_mode && GameArg.SysUsePlayersDir) ? "Players/" : "")); + strcat(name,items[*citem]); + + ret = !PHYSFS_delete(name); + if (player_mode) + *p = 0; + + if ((!ret) && player_mode) { + delete_player_saved_games( items[*citem] ); + // delete PLX file + sprintf(plxfile, GameArg.SysUsePlayersDir? "Players/%.8s.plx" : "%.8s.plx", items[*citem]); + if (cfexist(plxfile)) + PHYSFS_delete(plxfile); + } + + *keypress = K_DELETED; + + if (ret) { + if (player_mode) + nm_messagebox( NULL, 1, TXT_OK, "%s %s %s", TXT_COULDNT, TXT_DELETE_PILOT, items[*citem]+((player_mode && items[*citem][0]=='$')?1:0) ); + else if (demo_mode) + nm_messagebox( NULL, 1, TXT_OK, "%s %s %s", TXT_COULDNT, TXT_DELETE_DEMO, items[*citem]+((demo_mode && items[*citem][0]=='$')?1:0) ); + } else if (demo_mode) + *keypress = K_DELETED_DEMO; + } + } + break; + + case KEY_CTRLED+KEY_C: + if (demo_mode) + { + int x = 1; + char bakname[PATH_MAX]; + + *keypress = 0; + // Get backup name + change_filename_extension(bakname, items[*citem]+((demo_mode && items[*citem][0]=='$')?1:0), DEMO_BACKUP_EXT); + x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "Are you sure you want to\n" + "swap the endianness of\n" + "%s? If the file is\n" + "already endian native, D1X\n" + "will likely crash. A backup\n" + "%s will be created", items[*citem]+((demo_mode && items[*citem][0]=='$')?1:0), bakname ); + if (x) + break; + + newdemo_swap_endian(items[*citem]); + } + break; + } + + return 1; +} + +int get_filename(char *title, char *type, char *filename, int allow_abort_flag) +{ + char **m; + char **find; + char **f; + char *types[] = { type, NULL }; + int i = 0, NumItems; + int citem = 0; + + player_mode = demo_mode = 0; + + if (!stricmp(type, ".plr")) + player_mode = 1; + else if (!stricmp(type, ".dem")) + demo_mode = 1; + +ReadFileNames: + find = PHYSFSX_findFiles(demo_mode ? DEMO_DIR : ((player_mode && GameArg.SysUsePlayersDir) ? "Players/" : ""), types); + if (!find) + return 0; // memory error + if ( !*find && demo_mode && (citem > -1) ) + { + nm_messagebox( NULL, 1, TXT_OK, "%s %s\n%s", TXT_NO_DEMO_FILES, TXT_USE_F5, TXT_TO_CREATE_ONE); + PHYSFS_freeList(find); + return 0; + } + else if ( !*find && player_mode ) { + strcpy(filename, TXT_CREATE_NEW); // make a new player without showing listbox + PHYSFS_freeList(find); + return 0; + } + else if ( !*find ) { + nm_messagebox(NULL, 1, "Ok", "%s\n '%s' %s", TXT_NO_FILES_MATCHING, type, TXT_WERE_FOUND); + PHYSFS_freeList(find); + return 0; + } // else create a player file + + + for (NumItems = 0; find[NumItems] != NULL; NumItems++) {} + if (player_mode) + NumItems++; + + MALLOC(m, char *, NumItems); + if (m == NULL) + { + PHYSFS_freeList(find); + return 0; + } + + if (player_mode) + m[i++] = TXT_CREATE_NEW; + + for (f = find; *f != NULL; f++) + { + m[i++] = *f; + + if (player_mode) + { + char *p; + + p = strchr(*f, '.'); + if (p) + *p = '\0'; // chop the .plr + if ((p - *f) > 8) + *f[8] = 0; // sorry guys, can only have up to eight chars for the player name + } + } + + // Sort by name, except the string if applicable + qsort(&m[player_mode ? 1 : 0], NumItems - player_mode, sizeof(char *), (int (*)( const void *, const void * ))fname_sort_func); + + if (player_mode) + for ( i=0; i -1 ) + strncpy( filename, m[citem] + ((player_mode && m[citem][0]=='$')?1:0), PATH_MAX ); + + PHYSFS_freeList(find); + d_free(m); + + // The following wouldn't be necessary if the newmenu code didn't have its own loop + if ((citem == K_DELETED) || ((citem == K_DELETED_DEMO) && NumItems > 1)) // NumItems was *before* a demo got deleted + goto ReadFileNames; + else if (citem == -1) + return 0; // aborted + + return 1; +} + int do_difficulty_menu() { int s; diff --git a/main/menu.h b/main/menu.h index 8642fb5bc..93b19d6a5 100644 --- a/main/menu.h +++ b/main/menu.h @@ -24,6 +24,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. extern int DoMenu(); extern void do_options_menu(); extern void d2x_options_menu(); +extern int get_filename(char *title, char *type, char *filename, int allow_abort_flag); #define MENU_PCX_MAC_SHARE ("menub.pcx") #define MENU_PCX_SHAREWARE ("menud.pcx") diff --git a/main/newdemo.c b/main/newdemo.c index 93b4e2714..bcf0b68ae 100644 --- a/main/newdemo.c +++ b/main/newdemo.c @@ -3444,9 +3444,9 @@ void newdemo_stop_recording() { newmenu_item m[6]; int exit; - static char filename[15] = "", *s; + static char filename[PATH_MAX] = "", *s; static sbyte tmpcnt = 0; - char fullname[15+FILENAME_LEN] = DEMO_DIR; + char fullname[PATH_MAX] = DEMO_DIR; exit = 0; @@ -3460,7 +3460,7 @@ void newdemo_stop_recording() if (filename[0] != '\0') { int num, i = strlen(filename) - 1; - char newfile[15]; + char newfile[PATH_MAX]; while (isdigit(filename[i])) { i--; @@ -3472,8 +3472,8 @@ void newdemo_stop_recording() num++; filename[i] = '\0'; sprintf (newfile, "%s%d", filename, num); - strncpy(filename, newfile, 8); - filename[8] = '\0'; + strncpy(filename, newfile, PATH_MAX); + filename[PATH_MAX] = '\0'; } try_again: @@ -3481,21 +3481,21 @@ try_again: Newmenu_allowed_chars = demoname_allowed_chars; if (!Newdemo_no_space) { - m[0].type=NM_TYPE_INPUT; m[0].text_len = 8; m[0].text = filename; + m[0].type=NM_TYPE_INPUT; m[0].text_len = PATH_MAX - 1; m[0].text = filename; exit = newmenu_do( NULL, TXT_SAVE_DEMO_AS, 1, &(m[0]), NULL ); } else if (Newdemo_no_space == 1) { m[ 0].type = NM_TYPE_TEXT; m[ 0].text = TXT_DEMO_SAVE_BAD; - m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = 8; m[1].text = filename; + m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = PATH_MAX - 1; m[1].text = filename; exit = newmenu_do( NULL, NULL, 2, m, NULL ); } else if (Newdemo_no_space == 2) { m[ 0].type = NM_TYPE_TEXT; m[ 0].text = TXT_DEMO_SAVE_NOSPACE; - m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = 8; m[1].text = filename; + m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = PATH_MAX - 1; m[1].text = filename; exit = newmenu_do( NULL, NULL, 2, m, NULL ); } Newmenu_allowed_chars = NULL; if (exit == -2) { // got bumped out from network menu - char save_file[7+FILENAME_LEN]; + char save_file[PATH_MAX]; if (filename[0] != '\0') { strcpy(save_file, DEMO_DIR); diff --git a/main/newmenu.c b/main/newmenu.c index 6aef15e93..e16bb3df7 100644 --- a/main/newmenu.c +++ b/main/newmenu.c @@ -1464,482 +1464,6 @@ int nm_messagebox( char *title, int nchoices, ... ) return newmenu_do( title, nm_text, nchoices, nm_message_items, NULL ); } -/* Honestly I think we don't ened this function anymore since PhysFS already takes care about - sorting files. However I keep it since: - a) it's just one function - b) works with FILENAME_LEN so it doesn'T break if we decide to support more than 8+3 filename length - c) I am not sure if PhysFS sorty correctly on all platforms -*/ -void newmenu_file_sort( int n, char *list ) -{ - int i, j, incr; - char t[(FILENAME_LEN+1)]; - - incr = n / 2; - while( incr > 0 ) { - for (i=incr; i=0 ) { - if (strncmp(&list[j*(FILENAME_LEN+1)], &list[(j+incr)*(FILENAME_LEN+1)], FILENAME_LEN-1) > 0) { - memcpy( t, &list[j*(FILENAME_LEN+1)], FILENAME_LEN ); - memcpy( &list[j*(FILENAME_LEN+1)], &list[(j+incr)*(FILENAME_LEN+1)], FILENAME_LEN ); - memcpy( &list[(j+incr)*(FILENAME_LEN+1)], t, FILENAME_LEN ); - j -= incr; - } - else - break; - } - } - incr = incr / 2; - } -} - -void delete_player_saved_games(char * name) -{ - int i; - char filename[FILENAME_LEN + 9]; - - for (i=0;i<10; i++) - { - sprintf( filename, GameArg.SysUsePlayersDir? "Players/%s.sg%x" : "%s.sg%x", name, i ); - - PHYSFS_delete(filename); - } -} - -#define MAX_FILES 300 - -int newmenu_get_filename(char *title, char *type, char *filename, int allow_abort_flag) -{ - int i; - char **find; - char **f; - char *ext; - int NumFiles=0, key,done, citem, ocitem; - char * filenames = NULL; - int NumFiles_displayed = 8; - int first_item = -1, ofirst_item; - int old_keyd_repeat = keyd_repeat; - int player_mode=0; - int demo_mode=0; - int demos_deleted=0; - int initialized = 0; - int exit_value = 0; - int w_x, w_y, w_w, w_h, title_height, height=0; - int box_x, box_y, box_w, box_h; -#ifdef NEWMENU_MOUSE - int mx, my, mz, x1, x2, y1, y2, mouse_state, omouse_state; - int mouse2_state, omouse2_state; - int dblclick_flag=0; -#endif - - w_x=w_y=w_w=w_h=title_height=0; - box_x=box_y=box_w=box_h=0; - - filenames = d_malloc( MAX_FILES * (FILENAME_LEN+1) ); - if (filenames==NULL) return 0; - - newmenu_close(); - citem = 0; - keyd_repeat = 1; - - if (!stricmp(type, ".plr")) - player_mode = 1; - else if (!stricmp(type, ".dem")) - demo_mode = 1; - -ReadFileNames: - done = 0; - NumFiles=0; - - if (player_mode) { - strncpy( &filenames[NumFiles*(FILENAME_LEN+1)], TXT_CREATE_NEW, FILENAME_LEN ); - NumFiles++; - } - - find = PHYSFS_enumerateFiles(demo_mode ? DEMO_DIR : ((player_mode && GameArg.SysUsePlayersDir) ? "Players/" : "")); - for (f = find; *f != NULL; f++) - { - ext = strrchr(*f, '.'); - if (!ext || strnicmp(ext, type, 4)) - continue; - - if (NumFiles < MAX_FILES) - { - strncpy(&filenames[NumFiles*(FILENAME_LEN+1)],*f,FILENAME_LEN); - if (player_mode) - { - char *p; - - p = strchr(&filenames[NumFiles*(FILENAME_LEN+1)], '.'); - if (p) - *p = '\0'; - } - NumFiles++; - } - else - break; - } - - PHYSFS_freeList(find); - - if ( (NumFiles < 1) && demos_deleted ) { - exit_value = 0; - goto ExitFileMenu; - } - if ( (NumFiles < 1) && demo_mode ) { - nm_messagebox( NULL, 1, TXT_OK, "%s %s\n%s", TXT_NO_DEMO_FILES, TXT_USE_F5, TXT_TO_CREATE_ONE); - exit_value = 0; - goto ExitFileMenu; - } - - if ( (NumFiles < 2) && player_mode ) { - citem = 0; - goto ExitFileMenuEarly; - } - - - if ( NumFiles<1 ) { - nm_messagebox(NULL, 1, "Ok", "%s\n '%s' %s", TXT_NO_FILES_MATCHING, type, TXT_WERE_FOUND); - exit_value = 0; - goto ExitFileMenu; - } - - if (!initialized) - { - gr_set_current_canvas(NULL); - - gr_set_curfont(MEDIUM3_FONT); - - box_w = 0; - for (i=0; i box_w ) - box_w = w+FSPACX(10); - } - - height = (LINE_SPACING * NumFiles_displayed); - - { - int w, h, aw; - gr_get_string_size( title, &w, &h, &aw ); - if ( w > box_w ) - box_w = w; - title_height = h+FSPACY(5); - } - - box_x = (grd_curcanv->cv_bitmap.bm_w-box_w)/2; - box_y = (grd_curcanv->cv_bitmap.bm_h-(height+title_height))/2 + title_height; - if ( box_y < title_height ) - box_y = title_height; - - initialized = 1; - } - - if ( !player_mode ) { - newmenu_file_sort( NumFiles, filenames ); - } else { - newmenu_file_sort( NumFiles-1, &filenames[(FILENAME_LEN+1)] ); // Don't sort first one! - for ( i=0; i0)) || ((demo_mode)&&(citem>=0)) ) { - int x = 1; - newmenu_hide_cursor(); - if (player_mode) - x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_PILOT, &filenames[citem*(FILENAME_LEN+1)]+((player_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0) ); - else if (demo_mode) - x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_DEMO, &filenames[citem*(FILENAME_LEN+1)]+((demo_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0) ); - newmenu_show_cursor(); - if (x==0) { - char * p; - char plxfile[PATH_MAX]; - int ret; - char name[PATH_MAX]; - - p = &filenames[(citem*(FILENAME_LEN+1))+strlen(&filenames[citem*(FILENAME_LEN+1)])]; - if (player_mode) - *p = '.'; - - strcpy(name, demo_mode ? DEMO_DIR : ((player_mode && GameArg.SysUsePlayersDir) ? "Players/" : "")); - strcat(name,&filenames[citem*(FILENAME_LEN+1)]); - - ret = !PHYSFS_delete(name); - if (player_mode) - *p = 0; - - if ((!ret) && player_mode) { - delete_player_saved_games( &filenames[citem*(FILENAME_LEN+1)] ); - // delete PLX file - sprintf(plxfile, GameArg.SysUsePlayersDir? "Players/%.8s.plx" : "%.8s.plx", &filenames[citem*(FILENAME_LEN+1)]); - if (cfexist(plxfile)) - PHYSFS_delete(plxfile); - } - - if (ret) { - if (player_mode) - nm_messagebox( NULL, 1, TXT_OK, "%s %s %s", TXT_COULDNT, TXT_DELETE_PILOT, &filenames[citem*(FILENAME_LEN+1)]+((player_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0) ); - else if (demo_mode) - nm_messagebox( NULL, 1, TXT_OK, "%s %s %s", TXT_COULDNT, TXT_DELETE_DEMO, &filenames[citem*(FILENAME_LEN+1)]+((demo_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0) ); - } else if (demo_mode) - demos_deleted = 1; - first_item = -1; - goto ReadFileNames; - } - } - break; - case KEY_CTRLED+KEY_C: - if (demo_mode) - { - int x = 1; - char bakname[PATH_MAX]; - - // Get backup name - change_filename_extension(bakname, &filenames[citem*(FILENAME_LEN+1)]+((demo_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0), DEMO_BACKUP_EXT); - x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "Are you sure you want to\n" - "swap the endianness of\n" - "%s? If the file is\n" - "already endian native, D2X\n" - "will likely crash. A backup\n" - "%s will be created", &filenames[citem*(FILENAME_LEN+1)]+((demo_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0), bakname ); - if (x) - break; - - newdemo_swap_endian(&filenames[citem*(FILENAME_LEN+1)]); - } - break; - case KEY_HOME: - case KEY_PAD7: - citem = 0; - break; - case KEY_END: - case KEY_PAD1: - citem = NumFiles-1; - break; - case KEY_UP: - case KEY_PAD8: - citem--; - break; - case KEY_DOWN: - case KEY_PAD2: - citem++; - break; - case KEY_PAGEDOWN: - case KEY_PAD3: - citem += NumFiles_displayed; - break; - case KEY_PAGEUP: - case KEY_PAD9: - citem -= NumFiles_displayed; - break; - case KEY_ESC: - if (allow_abort_flag) { - citem = -1; - done = 1; - } - break; - case KEY_ENTER: - case KEY_PADENTER: - done = 1; - break; - - case KEY_ALTED+KEY_ENTER: - case KEY_ALTED+KEY_PADENTER: - gr_toggle_fullscreen(); - break; - - default: - { - int ascii = key_ascii(); - if ( ascii < 255 ) { - int cc,cc1; - cc=cc1=citem+1; - if (cc1 < 0 ) cc1 = 0; - if (cc1 >= NumFiles ) cc1 = 0; - while(1) { - if ( cc < 0 ) cc = 0; - if ( cc >= NumFiles ) cc = 0; - if ( citem == cc ) break; - - if ( toupper(filenames[cc*(FILENAME_LEN+1)]) == toupper(ascii) ) { - citem = cc; - break; - } - cc++; - } - } - } - } - if ( done ) break; - - - if (citem<0) - citem=0; - - if (citem>=NumFiles) - citem = NumFiles-1; - - if (citem< first_item) - first_item = citem; - - if (citem>=( first_item+NumFiles_displayed)) - { - first_item = citem-NumFiles_displayed+1; - } - - if (NumFiles <= NumFiles_displayed ) - first_item = 0; - - if (first_item>NumFiles-NumFiles_displayed) - { - first_item = NumFiles-NumFiles_displayed; - } - - if (first_item < 0 ) first_item = 0; - -#ifdef NEWMENU_MOUSE - if (mouse_state || mouse2_state) { - int w, h, aw; - - mouse_get_pos(&mx, &my, &mz); - for (i=first_item; i x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) { - if (i == citem && !mouse2_state) { - break; - } - citem = i; - dblclick_flag = 0; - break; - } - } - } - - if (!mouse_state && omouse_state) { - int w, h, aw; - - gr_get_string_size(&filenames[citem*(FILENAME_LEN+1)], &w, &h, &aw ); - mouse_get_pos(&mx, &my, &mz); - x1 = box_x; - x2 = box_x + box_w; - y1 = (citem-first_item)*LINE_SPACING + box_y; - y2 = y1+h; - if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) { - if (dblclick_flag) done = 1; - else dblclick_flag = 1; - } - } -#endif - - gr_setcolor( BM_XRGB( 0,0,0) ); - for (i=first_item; i= NumFiles ) { - gr_setcolor( BM_XRGB(5,5,5)); - gr_rect( box_x + box_w - FSPACX(1), y-FSPACY(1), box_x + box_w, y + LINE_SPACING); - gr_setcolor( BM_XRGB(2,2,2)); - gr_rect( box_x - FSPACX(1), y - FSPACY(1), box_x, y + LINE_SPACING ); - gr_setcolor( BM_XRGB(0,0,0)); - gr_rect( box_x, y - FSPACY(1), box_x + box_w - FSPACX(1), y + LINE_SPACING); - } else { - if ( i == citem ) - gr_set_curfont(MEDIUM2_FONT); - else - gr_set_curfont(MEDIUM1_FONT); - gr_get_string_size(&filenames[i*(FILENAME_LEN+1)], &w, &h, &aw ); - - gr_setcolor( BM_XRGB(5,5,5)); - gr_rect( box_x + box_w - FSPACX(1), y-FSPACY(1), box_x + box_w, y + LINE_SPACING); - gr_setcolor( BM_XRGB(2,2,2)); - gr_rect( box_x - FSPACX(1), y - FSPACY(1), box_x, y + LINE_SPACING ); - gr_setcolor( BM_XRGB(0,0,0)); - gr_rect( box_x, y - FSPACY(1), box_x + box_w - FSPACX(1), y + LINE_SPACING); - - gr_string( box_x + FSPACX(5), y, (&filenames[i*(FILENAME_LEN+1)])+((player_mode && filenames[i*(FILENAME_LEN+1)]=='$')?1:0) ); - } - } - } - -#ifdef NEWMENU_MOUSE - newmenu_hide_cursor(); -#endif - -ExitFileMenuEarly: - if ( citem > -1 ) { - strncpy( filename, (&filenames[citem*(FILENAME_LEN+1)])+((player_mode && filenames[citem*(FILENAME_LEN+1)]=='$')?1:0), FILENAME_LEN ); - exit_value = 1; - } else { - exit_value = 0; - } - -ExitFileMenu: - keyd_repeat = old_keyd_repeat; - - if ( filenames ) - d_free(filenames); - - return exit_value; - -} - - // Example listbox callback function... // int lb_callback( int * citem, int *nitems, char * items[], int *keypress ) // { diff --git a/main/newmenu.h b/main/newmenu.h index ed5bfb94a..dc3e3549b 100644 --- a/main/newmenu.h +++ b/main/newmenu.h @@ -102,9 +102,6 @@ int nm_messagebox1(char *title, void (*subfunction)(int nitems, newmenu_item *it void nm_draw_background(int x1, int y1, int x2, int y2); void nm_restore_background(int x, int y, int w, int h); -// Returns 0 if no file selected, else filename is filled with selected file. -int newmenu_get_filename(char *title, char *filespec, char *filename, int allow_abort_flag); - extern char *Newmenu_allowed_chars; // Example listbox callback function... @@ -140,13 +137,12 @@ int nm_messagebox_fixedfont(char *title, int nchoices, ...); //should be called whenever the palette changes extern void newmenu_close(); -# define NEWMENU_MOUSE +#define NEWMENU_MOUSE # include # define newmenu_show_cursor() if (!GameArg.CtlNoMouse) SDL_ShowCursor(SDL_ENABLE) # define newmenu_hide_cursor() SDL_ShowCursor(SDL_DISABLE) -#endif /* _NEWMENU_H */ #define NORMAL_CHECK_BOX "" #define CHECKED_CHECK_BOX "" @@ -164,3 +160,5 @@ extern void newmenu_close(); #define BORDERX (15*(SWIDTH/320)) #define BORDERY (15*(SHEIGHT/200)) +#endif /* _NEWMENU_H */ +