X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=191061c5a7fe1cfc587733888c1008cb6727fec4;hb=5f43600abc12449a5af5d7d8a4f12cdd88a40c99;hp=ca9f71cb871b79dd0d09c4ca6c3a4a9bd46e89f7;hpb=4247eefccb8916d045dccd2d63a4b78f8c5cdf45;p=xboard.git diff --git a/dialogs.c b/dialogs.c index ca9f71c..191061c 100644 --- a/dialogs.c +++ b/dialogs.c @@ -66,6 +66,7 @@ extern char *getenv(); int values[MAX_OPTIONS]; ChessProgramState *currentCps; +char dataDir[MSG_SIZ] = DATADIR, manDir[MSG_SIZ] = MANDIR; //----------------------------Generic dialog -------------------------------------------- @@ -1259,7 +1260,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 +1311,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,8 +2159,6 @@ ConsoleAutoPopUp (char *buf) } else PopUpMoveDialog(*buf); } -static Boolean noEcho; - void EchoOn () { @@ -2296,7 +2297,7 @@ ErrorPopDown () if (errorExitStatus != -1) ExitEvent(errorExitStatus); } -static int +int ErrorOK (int n) { dialogError = errorUp = False; @@ -2458,16 +2459,17 @@ ReadLine (FILE *f) void GetHelpText (FILE *f, char *name) { - char *line, buf[MSG_SIZ], text[10000], *p = text, *q = text; + 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] == ' ' || isalpha(buf[len]) || isdigit(buf[len]); len++); + 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))) { + 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++; @@ -2479,7 +2481,7 @@ GetHelpText (FILE *f, char *name) if(p - text > 9900) break; } *p = NULLCHAR; - DisplayNote(text); + ErrorPopUp(title, text, FALSE); return; } } @@ -2490,8 +2492,22 @@ GetHelpText (FILE *f, char *name) void DisplayHelp (char *name) { - char *manFile = DATADIR "/../../man/man6/xboard.6"; - FILE *f = fopen(manFile, "r"); + static char *xboardMan; + char buf[MSG_SIZ], tidy[MSG_SIZ]; + FILE *f; + if(!xboardMan) { + xboardMan = BufferCommandOutput("man -w xboard", MSG_SIZ); // obtain path to XBoard's man file + if(xboardMan) xboardMan[strlen(xboardMan)-1] = NULLCHAR; // strip off traling linefeed + } + 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", xboardMan); + 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); @@ -2892,6 +2908,7 @@ static char *Extensions[] = { ".trn", ".bin", ".wav", +".png", ".ini", ".log", "",