X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=f39199771fcfd1145501c5708a6ecb1e03a373da;hb=f6e0ba4110818a2785aa480eaa05836b742e9992;hp=5eb368761cee93d46239f152a3eb846d9bc76d5e;hpb=cd09c1f0a427cdce02abb65d05dc7279a1557c99;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 5eb3687..f391997 100644 --- a/dialogs.c +++ b/dialogs.c @@ -1259,7 +1259,7 @@ NewTagsPopup (char *text, char *msg, char *ttl) if(tagsText) free(tagsText); tagsText = strdup(text); tagsOptions[0].name = msg; MarkMenu("View.Tags", TagsDlg); - GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL, appData.topLevel); + GenericPopUp(tagsOptions + (msg == NULL), title, TagsDlg, BoardWindow, NONMODAL, appData.topLevel); } void @@ -1310,10 +1310,12 @@ char *icsText; #define HISTORY_SIZE 64 static char *history[HISTORY_SIZE]; static int histIn = 0, histP = 0; +static Boolean noEcho; static void SaveInHistory (char *cmd) { + if(noEcho) return; // do not save password! if (history[histIn] != NULL) { free(history[histIn]); history[histIn] = NULL; @@ -2156,6 +2158,23 @@ ConsoleAutoPopUp (char *buf) } else PopUpMoveDialog(*buf); } +void +EchoOn () +{ + if(!noEcho) return; + system("stty echo"); + WidgetEcho(&chatOptions[CHAT_IN], 1); + noEcho = False; +} + +void +EchoOff () +{ + system("stty -echo"); + WidgetEcho(&chatOptions[CHAT_IN], 0); + noEcho = True; +} + //--------------------------------- Game-List options dialog ------------------------------------------ char *strings[LPUSERGLT_SIZE]; @@ -2426,6 +2445,69 @@ DisplayTitle (char *text) SetWindowTitle(text, title, icon); } +static char * +ReadLine (FILE *f) +{ + static char buf[MSG_SIZ]; + int i = 0, c; + while((c = fgetc(f)) != '\n') { if(c == EOF) return NULL; buf[i++] = c; } + buf[i] = NULLCHAR; + return buf; +} + +void +GetHelpText (FILE *f, char *name) +{ + char *line, buf[MSG_SIZ], title[MSG_SIZ], text[10000], *p = text, *q = text; + int len, cnt = 0; + snprintf(buf, MSG_SIZ, ".B %s", name); + len = strlen(buf); + for(len=1; buf[len] == ' ' || buf[len] == '-' || isalpha(buf[len]) || isdigit(buf[len]); len++); + buf[len] = NULLCHAR; + while(buf[--len] == ' ') buf[len] = NULLCHAR; + snprintf(title, MSG_SIZ, "Help on '%s'", buf+3); + while((line = ReadLine(f))) { + if(!strncmp(line, buf, len) || !strncmp(line, ".SS ", 4) && !strncmp(line+4, buf+3, len-3)) { + while((line = ReadLine(f)) && (cnt == 0 || strncmp(line, ".B ", 3) && strncmp(line, ".SS ", 4))) { + if(!*line) { *p++ = '\n'; *p++ = '\n'; q = p; continue; } + if(*line == '.') continue; + *p++ = ' '; cnt++; + while(*line) { + if(*line < ' ') { line++; continue;} + if(*line == ' ' && p - q > 80) *line = '\n', q = p; + *p++ = *line++; + } + if(p - text > 9900) break; + } + *p = NULLCHAR; + ErrorPopUp(title, text, FALSE); + return; + } + } + snprintf(text, MSG_SIZ, "No help on '%s'\n", buf+3); + DisplayNote(text); +} + +void +DisplayHelp (char *name) +{ + char buf[MSG_SIZ], tidy[MSG_SIZ]; + FILE *f; + if(currentCps) { + TidyProgramName(currentCps == &first ? appData.firstChessProgram : appData.secondChessProgram, "localhost", tidy); + snprintf(buf, MSG_SIZ, "/usr/local/share/man/man6/%s.6", tidy); + } else snprintf(buf, MSG_SIZ, "%s/man6/xboard.6", MANDIR); + f = fopen(buf, "r"); + if(!f && currentCps) { // engine manual could be in two places + snprintf(buf, MSG_SIZ, "/usr/share/man/man6/%s.6", tidy); + f = fopen(buf, "r"); + } + if(f) { + GetHelpText(f, name); + fclose(f); + } +} + #define PAUSE_BUTTON "P" #define PIECE_MENU_SIZE 18 static String pieceMenuStrings[2][PIECE_MENU_SIZE+1] = { @@ -2820,6 +2902,7 @@ static char *Extensions[] = { ".trn", ".bin", ".wav", +".png", ".ini", ".log", "",