diff --git a/common/main/newmenu.h b/common/main/newmenu.h index b86fd4ad8..ccf911589 100644 --- a/common/main/newmenu.h +++ b/common/main/newmenu.h @@ -159,6 +159,13 @@ static inline void nm_set_item_menu(newmenu_item *ni, const char *text) ni->text = (char *)text; } +static inline void nm_set_item_input(newmenu_item *ni, unsigned len, char *text) +{ + ni->type = NM_TYPE_INPUT; + ni->text = text; + ni->text_len = len; +} + static inline void nm_set_item_text(newmenu_item *ni, const char *text) { ni->type = NM_TYPE_TEXT; @@ -230,9 +237,7 @@ static inline void nm_set_item_text(newmenu_item *ni, const char *text) #define DXX_ADD_TEXT(S,OPT) \ nm_set_item_text(&((DXX_NEWMENU_VARIABLE)[(OPT)]), (S)); #define DXX_ADD_INPUT(S,OPT,MAX_TEXT_LEN) \ - (DXX_NEWMENU_VARIABLE)[(OPT)].type = NM_TYPE_INPUT; \ - (DXX_NEWMENU_VARIABLE)[(OPT)].text=(S); \ - (DXX_NEWMENU_VARIABLE)[(OPT)].text_len=MAX_TEXT_LEN; + nm_set_item_input(&((DXX_NEWMENU_VARIABLE)[(OPT)]),MAX_TEXT_LEN,(S)); #define DXX_READ_CHECK(S,OPT,V) \ V = (DXX_NEWMENU_VARIABLE)[(OPT)].value; #define DXX_READ_SLIDER(S,OPT,V,MIN,MAX) \ diff --git a/d2x-rebirth/main/escort.c b/d2x-rebirth/main/escort.c index 11159684c..51ec37cfd 100644 --- a/d2x-rebirth/main/escort.c +++ b/d2x-rebirth/main/escort.c @@ -379,7 +379,7 @@ void change_guidebot_name() strcpy(text,PlayerCfg.GuidebotName); - m.type=NM_TYPE_INPUT; m.text_len = GUIDEBOT_NAME_LEN; m.text = text; + nm_set_item_input(&m, GUIDEBOT_NAME_LEN, text); item = newmenu_do( NULL, "Enter Guide-bot name:", 1, &m, NULL, NULL ); if (item != -1) { diff --git a/d2x-rebirth/main/newdemo.c b/d2x-rebirth/main/newdemo.c index b0612c51e..cb987652c 100644 --- a/d2x-rebirth/main/newdemo.c +++ b/d2x-rebirth/main/newdemo.c @@ -3443,11 +3443,11 @@ try_again: Newmenu_allowed_chars = demoname_allowed_chars; if (!nd_record_v_no_space) { - m[0].type=NM_TYPE_INPUT; m[0].text_len = PATH_MAX - 1; m[0].text = filename; + nm_set_item_input(&m[0], PATH_MAX - 1, filename); exit = newmenu_do( NULL, TXT_SAVE_DEMO_AS, 1, &(m[0]), NULL, NULL ); } else if (nd_record_v_no_space == 2) { nm_set_item_text(& m[ 0], TXT_DEMO_SAVE_NOSPACE); - m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = PATH_MAX - 1; m[1].text = filename; + nm_set_item_input(&m[ 1], PATH_MAX - 1, filename); exit = newmenu_do( NULL, NULL, 2, m, NULL, NULL ); } Newmenu_allowed_chars = NULL; diff --git a/similar/main/gamecntl.c b/similar/main/gamecntl.c index fe9af2968..b0de39c37 100644 --- a/similar/main/gamecntl.c +++ b/similar/main/gamecntl.c @@ -566,14 +566,14 @@ int HandleDemoKey(int key) filename[0] = '\0'; nm_set_item_text(& m[ 0], "output file name"); - m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = 8; m[1].text = filename; + nm_set_item_input(&m[ 1], 8, filename); c = newmenu_do( NULL, NULL, 2, m, NULL, NULL ); if (c == -2) break; strcat(filename, DEMO_EXT); num[0] = '\0'; nm_set_item_text(& m[ 0], "strip how many bytes"); - m[ 1].type = NM_TYPE_INPUT;m[ 1].text_len = 16; m[1].text = num; + nm_set_item_input(&m[ 1], 16, num); c = newmenu_do( NULL, NULL, 2, m, NULL, NULL ); if (c == -2) break; @@ -1390,7 +1390,7 @@ int HandleTestKey(int key) newmenu_item m; char text[FILENAME_LEN]=""; int item; - m.type=NM_TYPE_INPUT; m.text_len = FILENAME_LEN; m.text = text; + nm_set_item_input(&m, FILENAME_LEN, text); item = newmenu_do( NULL, "Briefing to play?", 1, &m, NULL, NULL ); if (item != -1) { do_briefing_screens(text,1); @@ -1658,8 +1658,7 @@ int FinalCheats(int key) char text[10]=""; int new_level_num; int item; - - m.type=NM_TYPE_INPUT; m.text_len = 10; m.text = text; + nm_set_item_input(&m, 10, text); item = newmenu_do( NULL, TXT_WARP_TO_LEVEL, 1, &m, NULL, NULL ); if (item != -1) { new_level_num = atoi(m.text); @@ -1765,7 +1764,7 @@ void do_cheat_menu() mm[3].type=NM_TYPE_NUMBER; mm[3].value=f2i(Players[Player_num].energy); mm[3].text="% Energy"; mm[3].min_value=0; mm[3].max_value=200; mm[4].type=NM_TYPE_NUMBER; mm[4].value=f2i(Players[Player_num].shields); mm[4].text="% Shields"; mm[4].min_value=0; mm[4].max_value=200; nm_set_item_text(& mm[5], "Score:"); - mm[6].type=NM_TYPE_INPUT; mm[6].text_len = 10; mm[6].text = score_text; + nm_set_item_input(&mm[6], 10, score_text); #if defined(DXX_BUILD_DESCENT_I) mm[7].type=NM_TYPE_RADIO; mm[7].value=(Players[Player_num].laser_level==0); mm[7].group=0; mm[7].text="Laser level 1"; mm[8].type=NM_TYPE_RADIO; mm[8].value=(Players[Player_num].laser_level==1); mm[8].group=0; mm[8].text="Laser level 2"; diff --git a/similar/main/gamesave.c b/similar/main/gamesave.c index 462484f4c..1f2c1bde7 100644 --- a/similar/main/gamesave.c +++ b/similar/main/gamesave.c @@ -1635,7 +1635,7 @@ int get_level_name() newmenu_item m[2]; nm_set_item_text(& m[0], "Please enter a name for this mine:"); - m[1].type = NM_TYPE_INPUT; m[1].text = Current_level_name; m[1].text_len = LEVEL_NAME_LEN; + nm_set_item_input(&m[1], LEVEL_NAME_LEN, Current_level_name); return newmenu_do( NULL, "Enter mine name", 2, m, NULL, NULL ) >= 0; diff --git a/similar/main/menu.c b/similar/main/menu.c index 4b799e557..85f55d6ce 100644 --- a/similar/main/menu.c +++ b/similar/main/menu.c @@ -179,7 +179,7 @@ int MakeNewPlayerFile(int allow_abort) strncpy(text, Players[Player_num].callsign,CALLSIGN_LEN); try_again: - m.type=NM_TYPE_INPUT; m.text_len = CALLSIGN_LEN; m.text = text; + nm_set_item_input(&m, CALLSIGN_LEN, text); Newmenu_allowed_chars = playername_allowed_chars; x = newmenu_do( NULL, TXT_ENTER_PILOT_NAME, 1, &m, NULL, NULL ); @@ -822,7 +822,7 @@ int do_new_game_menu() { nm_set_item_text(& m[0], info_text); - m[1].type=NM_TYPE_INPUT; m[1].text_len = 10; m[1].text = num_text; + nm_set_item_input(&m[1], 10, num_text); n_items = 2; strcpy(num_text,"1"); @@ -935,10 +935,10 @@ void change_res() m[mc].type = NM_TYPE_RADIO; m[mc].text = "use custom values"; m[mc].value = (citem == -1); m[mc].group = 0; mc++; nm_set_item_text(& m[mc], "resolution:"); mc++; snprintf(crestext, sizeof(crestext), "%ix%i", SM_W(Game_screen_mode), SM_H(Game_screen_mode)); - m[mc].type = NM_TYPE_INPUT; m[mc].text = crestext; m[mc].text_len = 11; modes[mc] = 0; mc++; + nm_set_item_input(&m[mc], 11, crestext); modes[mc] = 0; mc++; nm_set_item_text(& m[mc], "aspect:"); mc++; snprintf(casptext, sizeof(casptext), "%ix%i", GameCfg.AspectY, GameCfg.AspectX); - m[mc].type = NM_TYPE_INPUT; m[mc].text = casptext; m[mc].text_len = 11; modes[mc] = 0; mc++; + nm_set_item_input(&m[mc], 11, casptext); modes[mc] = 0; mc++; nm_set_item_text(& m[mc], ""); mc++; // little space for overview // fullscreen opt_fullscr = mc; @@ -1409,7 +1409,7 @@ int select_file_handler(listbox *menu, d_event *event, browser *b) MALLOC(text, char, 2); MALLOC(m, newmenu_item, 1); snprintf(text, sizeof(char)*PATH_MAX, "c"); - m->type=NM_TYPE_INPUT; m->text_len = 3; m->text = text; + nm_set_item_input(m, 3, text); rval = newmenu_do( NULL, "Enter drive letter", 1, m, NULL, NULL ); text[1] = '\0'; snprintf(newpath, sizeof(char)*PATH_MAX, "%s:%s", text, sep); @@ -1850,7 +1850,7 @@ void do_sound_menu() opt_sm_mtype3_lmpath = nitems; nm_set_item_browse(&m[nitems++], "path for level music" BROWSE_TXT); - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMLevelMusicPath; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMLevelMusicPath); nm_set_item_text(& m[nitems++], ""); @@ -1873,31 +1873,31 @@ void do_sound_menu() nm_set_item_browse(&m[nitems++], "main menu" BROWSE_TXT); opt_sm_cm_mtype3_file1 = nitems; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMMiscMusic[SONG_TITLE]; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMMiscMusic[SONG_TITLE]); opt_sm_cm_mtype3_file2_b = nitems; nm_set_item_browse(&m[nitems++], "briefing" BROWSE_TXT); opt_sm_cm_mtype3_file2 = nitems; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMMiscMusic[SONG_BRIEFING]; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMMiscMusic[SONG_BRIEFING]); opt_sm_cm_mtype3_file3_b = nitems; nm_set_item_browse(&m[nitems++], "credits" BROWSE_TXT); opt_sm_cm_mtype3_file3 = nitems; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMMiscMusic[SONG_CREDITS]; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMMiscMusic[SONG_CREDITS]); opt_sm_cm_mtype3_file4_b = nitems; nm_set_item_browse(&m[nitems++], "escape sequence" BROWSE_TXT); opt_sm_cm_mtype3_file4 = nitems; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMMiscMusic[SONG_ENDLEVEL]; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMMiscMusic[SONG_ENDLEVEL]); opt_sm_cm_mtype3_file5_b = nitems; nm_set_item_browse(&m[nitems++], "game ending" BROWSE_TXT); opt_sm_cm_mtype3_file5 = nitems; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text = GameCfg.CMMiscMusic[SONG_ENDGAME]; m[nitems++].text_len = NM_MAX_TEXT_LEN-1; + nm_set_item_input(&m[nitems++], NM_MAX_TEXT_LEN-1, GameCfg.CMMiscMusic[SONG_ENDGAME]); #endif Assert(nitems == SOUND_MENU_NITEMS); diff --git a/similar/main/multi.c b/similar/main/multi.c index ea60afc41..fec27bbbd 100644 --- a/similar/main/multi.c +++ b/similar/main/multi.c @@ -1529,7 +1529,7 @@ multi_send_message_dialog(void) Network_message[0] = 0; // Get rid of old contents - m[0].type=NM_TYPE_INPUT; m[0].text = Network_message; m[0].text_len = MAX_MESSAGE_LEN-1; + nm_set_item_input(&m[0], MAX_MESSAGE_LEN-1, Network_message); choice = newmenu_do( NULL, TXT_SEND_MESSAGE, 1, m, NULL, NULL ); if ((choice > -1) && (strlen(Network_message) > 0)) { diff --git a/similar/main/net_udp.c b/similar/main/net_udp.c index fea7ce78b..299cd133d 100644 --- a/similar/main/net_udp.c +++ b/similar/main/net_udp.c @@ -684,11 +684,11 @@ void net_udp_manual_join_game() nitems = 0; nm_set_item_text(& m[nitems++],"GAME ADDRESS OR HOSTNAME:"); - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=dj->addrbuf; m[nitems].text_len=128; nitems++; + nm_set_item_input(&m[nitems++],128,dj->addrbuf); nm_set_item_text(& m[nitems++],"GAME PORT:"); - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=dj->portbuf; m[nitems].text_len=5; nitems++; + nm_set_item_input(&m[nitems++],5,dj->portbuf); nm_set_item_text(& m[nitems++],"MY PORT:"); - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=UDP_MyPort; m[nitems].text_len=5; nitems++; + nm_set_item_input(&m[nitems++],5,UDP_MyPort); nm_set_item_text(& m[nitems++],""); newmenu_do1( NULL, "ENTER GAME ADDRESS", nitems, m, (int (*)(newmenu *, d_event *, void *))manual_join_game_handler, dj, 0 ); @@ -3286,7 +3286,7 @@ int net_udp_setup_game() nm_set_item_text(& m[optnum], TXT_DESCRIPTION); optnum++; opt.name = optnum; - m[optnum].type = NM_TYPE_INPUT; m[optnum].text = Netgame.game_name; m[optnum].text_len = NETGAME_NAME_LEN; optnum++; + nm_set_item_input(&m[optnum], NETGAME_NAME_LEN, Netgame.game_name); optnum++; sprintf(level_text, "%s (1-%d)", TXT_LEVEL_, Last_level); #if defined(DXX_BUILD_DESCENT_I) @@ -3301,7 +3301,7 @@ int net_udp_setup_game() nm_set_item_text(& m[optnum], level_text); optnum++; opt.level = optnum; - m[optnum].type = NM_TYPE_INPUT; m[optnum].text = slevel; m[optnum].text_len=4; optnum++; + nm_set_item_input(&m[optnum],4, slevel); optnum++; nm_set_item_text(& m[optnum], TXT_OPTIONS); optnum++; opt.mode = optnum; @@ -3579,7 +3579,7 @@ net_udp_select_teams(void) // Here comes da menu menu: - m[0].type = NM_TYPE_INPUT; m[0].text = team_names[0]; m[0].text_len = CALLSIGN_LEN; + nm_set_item_input(&m[0], CALLSIGN_LEN, team_names[0]); opt = 1; for (i = 0; i < N_players; i++) @@ -3590,7 +3590,7 @@ menu: } } opt_team_b = opt; - m[opt].type = NM_TYPE_INPUT; m[opt].text = team_names[1]; m[opt].text_len = CALLSIGN_LEN; opt++; + nm_set_item_input(&m[opt], CALLSIGN_LEN, team_names[1]); opt++; for (i = 0; i < N_players; i++) { if (team_vector & (1 << i)) diff --git a/similar/main/scores.c b/similar/main/scores.c index d1f7df961..c63d13e34 100644 --- a/similar/main/scores.c +++ b/similar/main/scores.c @@ -240,7 +240,7 @@ void scores_maybe_add_player(int abort_flag) if ( position==0 ) { strcpy( text1, "" ); nm_set_item_text(& m[0], TXT_COOL_SAYING); - m[1].type = NM_TYPE_INPUT; m[1].text = text1; m[1].text_len = COOL_MESSAGE_LEN-5; + nm_set_item_input(&m[1], COOL_MESSAGE_LEN-5, text1); newmenu_do( TXT_HIGH_SCORE, TXT_YOU_PLACED_1ST, 2, m, NULL, NULL ); strncpy( scores.cool_saying, text1, COOL_MESSAGE_LEN ); if (strlen(scores.cool_saying)<1)