From: nethack.allison Date: Wed, 6 Mar 2002 02:56:46 +0000 (+0000) Subject: (from ) X-Git-Tag: MOVE2GIT~3054 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3e582e40da4fecbaa57d3c6c4454367f166487c3;p=nethack (from ) - added support for iflags.randomall (-@) - echo yn_function selection to the message window (as From a bug report --- diff --git a/win/win32/mhmsg.h b/win/win32/mhmsg.h index e626b14da..1d08b89de 100644 --- a/win/win32/mhmsg.h +++ b/win/win32/mhmsg.h @@ -25,6 +25,7 @@ typedef struct mswin_nhmsg_add_wnd { typedef struct mswin_nhmsg_putstr { int attr; const char* text; + boolean append; } MSNHMsgPutstr, *PMSNHMsgPutstr; typedef struct mswin_nhmsg_print_glyph { diff --git a/win/win32/mhmsgwnd.c b/win/win32/mhmsgwnd.c index 5696c790d..b09c4aa80 100644 --- a/win/win32/mhmsgwnd.c +++ b/win/win32/mhmsgwnd.c @@ -199,19 +199,24 @@ void onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) SCROLLINFO si; char* p; - /* check if the string is empty */ - for(p = data->window_text[MSG_LINES-1].text; *p && isspace(*p); p++); - - if( *p ) { - /* last string is not empty - scroll up */ - memmove(&data->window_text[0], - &data->window_text[1], - (MSG_LINES-1)*sizeof(data->window_text[0])); - } + if( msg_data->append ) { + strncat(data->window_text[MSG_LINES-1].text, msg_data->text, + MAXWINDOWTEXT - strlen(data->window_text[MSG_LINES-1].text)); + } else { + /* check if the string is empty */ + for(p = data->window_text[MSG_LINES-1].text; *p && isspace(*p); p++); + + if( *p ) { + /* last string is not empty - scroll up */ + memmove(&data->window_text[0], + &data->window_text[1], + (MSG_LINES-1)*sizeof(data->window_text[0])); + } - /* append new text to the end of the array */ - data->window_text[MSG_LINES-1].attr = msg_data->attr; - strncpy(data->window_text[MSG_LINES-1].text, msg_data->text, MAXWINDOWTEXT); + /* append new text to the end of the array */ + data->window_text[MSG_LINES-1].attr = msg_data->attr; + strncpy(data->window_text[MSG_LINES-1].text, msg_data->text, MAXWINDOWTEXT); + } /* reset V-scroll position to display new text */ data->yPos = data->yMax; diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index f1f230e29..1b58e3248 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -193,9 +193,50 @@ void mswin_player_selection(void) logDebug("mswin_player_selection()\n"); - /* select a role */ - if( mswin_player_selection_window( &nRole ) == IDCANCEL ) { - bail(0); + /* pick player type randomly (use pre-selected role/race/gender/alignment) */ + if( flags.randomall ) { + if (flags.initrole < 0) { + flags.initrole = pick_role(flags.initrace, flags.initgend, + flags.initalign, PICK_RANDOM); + if (flags.initrole < 0) { + raw_print("Incompatible role!"); + flags.initrole = randrole(); + } + } + + if (flags.initrace < 0 || !validrace(flags.initrole, flags.initrace)) { + flags.initrace = pick_race(flags.initrole, flags.initgend, + flags.initalign, PICK_RANDOM); + if (flags.initrace < 0) { + raw_print("Incompatible race!"); + flags.initrace = randrace(flags.initrole); + } + } + + if (flags.initgend < 0 || !validgend(flags.initrole, flags.initrace, + flags.initgend)) { + flags.initgend = pick_gend(flags.initrole, flags.initrace, + flags.initalign, PICK_RANDOM); + if (flags.initgend < 0) { + raw_print("Incompatible gender!"); + flags.initgend = randgend(flags.initrole, flags.initrace); + } + } + + if (flags.initalign < 0 || !validalign(flags.initrole, flags.initrace, + flags.initalign)) { + flags.initalign = pick_align(flags.initrole, flags.initrace, + flags.initgend, PICK_RANDOM); + if (flags.initalign < 0) { + raw_print("Incompatible alignment!"); + flags.initalign = randalign(flags.initrole, flags.initrace); + } + } + } else { + /* select a role */ + if( mswin_player_selection_window( &nRole ) == IDCANCEL ) { + bail(0); + } } } @@ -485,7 +526,12 @@ Attributes void mswin_putstr(winid wid, int attr, const char *text) { logDebug("mswin_putstr(%d, %d, %s)\n", wid, attr, text); + + mswin_putstr_ex(wid, attr, text, 0); +} +void mswin_putstr_ex(winid wid, int attr, const char *text, boolean app) +{ if( (wid >= 0) && (wid < MAXWINDOWS) ) { @@ -498,8 +544,10 @@ void mswin_putstr(winid wid, int attr, const char *text) if (GetNHApp()->windowlist[wid].win != NULL) { MSNHMsgPutstr data; + ZeroMemory(&data, sizeof(data)); data.attr = attr; data.text = text; + data.append = app; SendMessage( GetNHApp()->windowlist[wid].win, WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_PUTSTR, (LPARAM)&data ); @@ -918,6 +966,7 @@ char mswin_yn_function(const char *question, const char *choices, char ch; char yn_esc_map='\033'; char message[BUFSZ]; + char res_ch[2]; logDebug("mswin_yn_function(%s, %s, %d)\n", question, choices, def); @@ -951,6 +1000,7 @@ char mswin_yn_function(const char *question, const char *choices, (index(choices, 'n') ? 'n' : def)); } else { Strcpy(message, question); + Strcat(message, " "); } mswin_putstr(WIN_MESSAGE, ATR_BOLD, message); @@ -972,6 +1022,14 @@ char mswin_yn_function(const char *question, const char *choices, result=ch; } } + + /* display selection in the message window */ + if( isprint(ch) ) { + res_ch[0] = ch; + res_ch[1] = '\x0'; + mswin_putstr_ex(WIN_MESSAGE, ATR_BOLD, res_ch, 1); + } + return result; } diff --git a/win/win32/winMS.h b/win/win32/winMS.h index 48366dae3..abbde807a 100644 --- a/win/win32/winMS.h +++ b/win/win32/winMS.h @@ -85,6 +85,7 @@ void mswin_display_nhwindow(winid wid, BOOLEAN_P block); void mswin_destroy_nhwindow(winid wid); void mswin_curs(winid wid, int x, int y); void mswin_putstr(winid wid, int attr, const char *text); +void mswin_putstr_ex(winid wid, int attr, const char *text, boolean append); void mswin_display_file(const char *filename,BOOLEAN_P must_exist); void mswin_start_menu(winid wid); void mswin_add_menu(winid wid, int glyph, const ANY_P * identifier,