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;
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);
+ }
}
}
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) )
{
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 );
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);
(index(choices, 'n') ? 'n' : def));
} else {
Strcpy(message, question);
+ Strcat(message, " ");
}
mswin_putstr(WIN_MESSAGE, ATR_BOLD, message);
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;
}