char *icsNick;
char *theme;
char *replace;
+char *engineListFile;
void EnsureOnScreen(int *x, int *y, int minX, int minY);
char StringGet(void *getClosure);
{ "secondChessProgramNames", ArgString, (void *) &secondChessProgramNames,
!XBOARD, (ArgIniType) SCP_NAMES },
{ "themeNames", ArgString, (void *) &appData.themeNames, TRUE, (ArgIniType) "native -upf false -ub false -ubt false -pid \"\"\n" },
+ { "engineList", ArgFilename, (void *) &engineListFile, TRUE, (ArgIniType) "" },
{ "addMasterOption", ArgMaster, NULL, FALSE, INVALID },
{ "installEngine", ArgInstall, (void *) &firstChessProgramNames, FALSE, (ArgIniType) "" },
{ "installTheme", ArgInstall, (void *) &appData.themeNames, FALSE, (ArgIniType) "" },
/* Parse command line */
ParseArgs(StringGet, &lpCmdLine);
+ /* if separate engine list is used, parse that too */
+ if(*engineListFile) ParseSettingsFile(engineListFile, &engineListFile);
+
if(appData.viewer && appData.viewerOptions[0]) ParseArgsFromString(appData.viewerOptions);
if(appData.tourney && appData.tourneyOptions[0]) ParseArgsFromString(appData.tourneyOptions);
chessProgram |= GetEngineLine(firstEngineLine, 0) || GetEngineLine(secondEngineLine, 1);
}
void
+SaveEngineList ()
+{
+ FILE *f;
+ if(*engineListFile && (f = fopen(engineListFile, "w"))) {
+ fprintf(f, "-firstChessProgramNames {%s}\n", firstChessProgramNames);
+ fclose(f);
+ }
+}
+
+void
AddToEngineList (int i)
{
int len;
if(insert != q) insert[-1] = NULLCHAR;
snprintf(firstChessProgramNames, len, "%s\n%s\n%s", q, buf, insert);
if(q) free(q);
+ SaveEngineList();
FloatToFront(&appData.recentEngineList, buf);
ASSIGN(currentEngine[i], buf);
}
extern Boolean partnerUp, twoBoards;
extern char engineVariant[];
void SaveEngineSettings P((int n));
+void SaveEngineList P((void));
char *EngineDefinedVariant P((ChessProgramState *cps, int n));
void SettingsPopUp P((ChessProgramState *cps)); // [HGM] really in front-end, but CPS not known in frontend.h
int WaitForEngine P((ChessProgramState *cps, DelayedEventCallback x));
NewTagsCallback (int n)
{
if(bookUp) SaveToBook(tagsText), DisplayBook(currentMove); else
- if(resPtr) { ASSIGN(*resPtr, tagsText); } else
+ if(resPtr) { ASSIGN(*resPtr, tagsText); if(resPtr == &firstChessProgramNames) SaveEngineList(); } else
ReplaceTags(tagsText, &gameInfo);
return 1;
}
static void
LoadEngineProc (int engineNr, char *title)
{
+ if(*engineListFile) ParseSettingsFile(engineListFile, &engineListFile); // contains engine list
isUCI = isUSI = storeVariant = v1 = useNick = False; addToList = hasBook = True; // defaults
secondEng = engineNr;
if(engineLine) free(engineLine); engineLine = strdup("");
int StopLoadGameTimer P((void));
void StartLoadGameTimer P((long millisec));
void AutoSaveGame P((void));
+Boolean ParseSettingsFile P((char *name, char **addr));
void ScheduleDelayedEvent P((DelayedEventCallback cb, long millisec));
DelayedEventCallback GetDelayedEvent P((void));
void CopyFENToClipboard P((void));
extern char *programName;
extern int commentUp;
+extern char *engineListFile;
extern char *firstChessProgramNames;
extern char *icsTextMenuString;
extern int mute;
void
EditEngineProc ()
{
+ if(*engineListFile) ParseSettingsFile(engineListFile, &engineListFile);
EditAnyPopUp(firstChessProgramNames, &firstChessProgramNames, _("Registered Engines"));
}