Implement auto-creation of ICS logon file
authorH.G. Muller <h.g.muller@hccnet.nl>
Thu, 29 Nov 2012 21:14:05 +0000 (22:14 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Fri, 7 Dec 2012 21:27:35 +0000 (22:27 +0100)
Under control of the new option -autoCreateLogon (which can be set from
the ICS Options dialog) the first two lines in response to the ICS "login:"
pompt will be saved on a newly created logon file (if logon from such
an existing file failed).

13 files changed:
args.h
backend.c
common.h
dialogs.c
frontend.h
gtk/xboard.c
usystem.c
winboard/resource.h
winboard/winboard.c
winboard/winboard.h
winboard/winboard.rc
winboard/woptions.c
xaw/xboard.c

diff --git a/args.h b/args.h
index acfb8f7..91270dd 100644 (file)
--- a/args.h
+++ b/args.h
@@ -354,6 +354,7 @@ ArgDescriptor argDescriptors[] = {
   { "autocomm", ArgTrue, (void *) &appData.autoComment, FALSE, INVALID },
   { "xautocomm", ArgFalse, (void *) &appData.autoComment, FALSE, INVALID },
   { "-autocomm", ArgFalse, (void *) &appData.autoComment, FALSE, INVALID },
+  { "autoCreateLogon", ArgBoolean, (void *) &appData.autoCreateLogon, TRUE, (ArgIniType) FALSE },
   { "autoObserve", ArgBoolean, (void *) &appData.autoObserve, TRUE, (ArgIniType) FALSE },
   { "autobs", ArgTrue, (void *) &appData.autoObserve, FALSE, INVALID },
   { "xautobs", ArgFalse, (void *) &appData.autoObserve, FALSE, INVALID },
index 71923d7..13afbc5 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -1845,6 +1845,7 @@ read_from_player (InputSourceRef isr, VOIDSTAR closure, char *message, int count
 {
     int outError, outCount;
     static int gotEof = 0;
+    static FILE *ini;
 
     /* Pass data read from player on to ICS */
     if (count > 0) {
@@ -1853,6 +1854,17 @@ read_from_player (InputSourceRef isr, VOIDSTAR closure, char *message, int count
        if (outCount < count) {
             DisplayFatalError(_("Error writing to ICS"), outError, 1);
        }
+       if(have_sent_ICS_logon == 2) {
+         if(ini = fopen(appData.icsLogon, "w")) { // save first two lines (presumably username & password) on init script file
+           fprintf(ini, "%s", message);
+           have_sent_ICS_logon = 3;
+         } else
+           have_sent_ICS_logon = 1;
+       } else if(have_sent_ICS_logon == 3) {
+           fprintf(ini, "%s", message);
+           fclose(ini);
+         have_sent_ICS_logon = 1;
+       }
     } else if (count < 0) {
        RemoveInputSource(isr);
        DisplayFatalError(_("Error reading from keyboard"), error, 1);
@@ -3438,9 +3450,15 @@ read_from_ics (InputSourceRef isr, VOIDSTAR closure, char *data, int count, int
                continue;
            }
 
-           if (!have_sent_ICS_logon && looking_at(buf, &i, "login:")) {
-               ICSInitScript();
-               have_sent_ICS_logon = 1;
+           if (looking_at(buf, &i, "login:")) {
+             if (!have_sent_ICS_logon) {
+               if(ICSInitScript())
+                 have_sent_ICS_logon = 1;
+               else // no init script was found
+                 have_sent_ICS_logon = (appData.autoCreateLogon ? 2 : 1); // flag that we should capture username + password
+             } else { // we have sent (or created) the InitScript, but apparently the ICS rejected it
+                 have_sent_ICS_logon = (appData.autoCreateLogon ? 2 : 1); // request creation of a new script
+             }
                continue;
            }
 
index 0a6a163..90428b4 100644 (file)
--- a/common.h
+++ b/common.h
@@ -483,6 +483,7 @@ typedef struct {
     Boolean ponderNextMove;
     Boolean periodicUpdates;
     Boolean autoObserve;
+    Boolean autoCreateLogon;
     Boolean autoComment;
     Boolean getMoveList;
     Boolean testLegality;
index d7ab360..877d88c 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -569,6 +569,7 @@ Option icsOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.autoComment, "", NULL, CheckBox, N_("Auto-Comment") },
 { 0, 0, 0, NULL, (void*) &appData.autoObserve, "", NULL, CheckBox, N_("Auto-Observe") },
 { 0, 0, 0, NULL, (void*) &appData.autoRaiseBoard, "", NULL, CheckBox, N_("Auto-Raise Board") },
+{ 0, 0, 0, NULL, (void*) &appData.autoCreateLogon, "", NULL, CheckBox, N_("Auto-Create Logon Script") },
 { 0, 0, 0, NULL, (void*) &appData.bgObserve, "",   NULL, CheckBox, N_("Background Observe while Playing") },
 { 0, 0, 0, NULL, (void*) &appData.dualBoard, "",   NULL, CheckBox, N_("Dual Board for Background-Observed Game") },
 { 0, 0, 0, NULL, (void*) &appData.getMoveList, "", NULL, CheckBox, N_("Get Move List") },
index 64cd79f..1f0bb1d 100644 (file)
@@ -185,7 +185,7 @@ void TagsPopUp P((char *tags, char *msg));
 void TagsPopDown P((void));
 
 void ParseIcsTextColors P((void));
-void ICSInitScript P((void));
+int  ICSInitScript P((void));
 void StartAnalysisClock P((void));
 void EngineOutputPopUp P((void));
 void EgineOutputPopDown P((void));
index a3add4a..c5f81e8 100644 (file)
@@ -199,7 +199,6 @@ void MoveTypeInProc P((GdkEventKey *eventkey));
 gboolean KeyPressProc P((GtkWindow *window, GdkEventKey *eventkey, gpointer data));
 Boolean TempBackwardActive = False;
 void DisplayMove P((int moveNumber));
-void ICSInitScript P((void));
 void update_ics_width P(());
 int CopyMemoProc P(());
 static gboolean EventProc P((GtkWidget *widget, GdkEvent *event, gpointer g));
index d2571df..bab1303 100644 (file)
--- a/usystem.c
+++ b/usystem.c
@@ -712,7 +712,7 @@ OutputToProcessDelayed (ProcRef pr, char *message, int count, int *outError, lon
     return outCount;
 }
 
-void
+int
 ICSInitScript ()
 {
   /* try to open the icsLogon script, either in the location given
@@ -736,12 +736,13 @@ ICSInitScript ()
        }
     }
 
-  if (f != NULL)
+  if (f != NULL) {
     ProcessICSInitScript(f);
-  else
+    return TRUE;
+  } else
     printf("Warning: Couldn't open icsLogon file (checked %s and %s).\n", appData.icsLogon, buf);
 
-  return;
+  return FALSE;
 }
 
 void
index e571c68..7b07764 100644 (file)
 #define CBO_Sounds                      1350\r
 #define OPT_DefaultSounds               1351\r
 #define OPT_AlwaysOnTop                 1352\r
+#define OPT_AutoCreate                  1352\r
 #define OPT_AutoFlag                    1353\r
 #define OPT_AlwaysQueen                 1354\r
 #define OPT_AutoComment                 1354\r
index 1651947..8420e3b 100644 (file)
@@ -9764,7 +9764,7 @@ CmailSigHandlerCallBack(InputSourceRef isr, VOIDSTAR closure,
 /* see wedittags.c for Edit Tags functions */\r
 \r
 \r
-VOID\r
+int\r
 ICSInitScript()\r
 {\r
   FILE *f;\r
@@ -9776,8 +9776,10 @@ ICSInitScript()
     if (f != NULL) {\r
       ProcessICSInitScript(f);\r
       fclose(f);\r
+      return TRUE;\r
     }\r
   }\r
+  return FALSE;\r
 }\r
 \r
 \r
index f3b1439..c1a846e 100644 (file)
@@ -106,7 +106,7 @@ VOID InitAppData(LPSTR);
 VOID InitDrawingColors(VOID);\r
 VOID InitDrawingSizes(BoardSize boardSize, int flags);\r
 VOID InitMenuChecks(VOID);\r
-VOID ICSInitScript(VOID);\r
+int  ICSInitScript(VOID);\r
 BOOL CenterWindow(HWND hwndChild, HWND hwndParent);\r
 VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);\r
 VOID PromotionPopup(HWND hwnd);\r
index 1457af1..ee32188 100644 (file)
@@ -513,7 +513,9 @@ BEGIN
     CONTROL         "&Auto Kibitz",OPT_AutoKibitz,"Button",BS_AUTOCHECKBOX | \r
                     WS_TABSTOP,94,12,73,8\r
     CONTROL         "Auto &Observe",OPT_AutoObserve,"Button",BS_AUTOCHECKBOX | \r
-                    WS_TABSTOP,10,25,150,8\r
+                    WS_TABSTOP,10,25,73,8\r
+    CONTROL         "Auto &Create Logon",OPT_AutoCreate,"Button",BS_AUTOCHECKBOX | \r
+                    WS_TABSTOP,94,25,73,8\r
     CONTROL         "&Get Move List",OPT_GetMoveList,"Button",\r
                     BS_AUTOCHECKBOX | WS_TABSTOP,10,38,150,8\r
     CONTROL         "&Local Line Editing",OPT_LocalLineEditing,"Button",\r
index e548360..cfd5cdb 100644 (file)
@@ -1188,6 +1188,7 @@ IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
     CHECK_BOX(OPT_AutoKibitz, appData.autoKibitz);\r
     CHECK_BOX(OPT_AutoComment, appData.autoComment);\r
     CHECK_BOX(OPT_AutoObserve, appData.autoObserve);\r
+    CHECK_BOX(OPT_AutoCreate, appData.autoCreateLogon);\r
     CHECK_BOX(OPT_GetMoveList, appData.getMoveList);\r
     CHECK_BOX(OPT_LocalLineEditing, appData.localLineEditing);\r
     CHECK_BOX(OPT_QuietPlay, appData.quietPlay);\r
@@ -1273,6 +1274,7 @@ IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
       appData.autoKibitz       = IS_CHECKED(OPT_AutoKibitz);\r
       appData.autoComment      = IS_CHECKED(OPT_AutoComment);\r
       appData.autoObserve      = IS_CHECKED(OPT_AutoObserve);\r
+      appData.autoCreateLogon  = IS_CHECKED(OPT_AutoCreate);\r
       appData.getMoveList      = IS_CHECKED(OPT_GetMoveList);\r
       appData.localLineEditing = IS_CHECKED(OPT_LocalLineEditing);\r
       appData.quietPlay        = IS_CHECKED(OPT_QuietPlay);\r
index 5bf3b0c..d8f3df2 100644 (file)
@@ -260,7 +260,6 @@ void TempForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms))
 Boolean TempBackwardActive = False;
 void ManInner P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void DisplayMove P((int moveNumber));
-void ICSInitScript P((void));
 void update_ics_width P(());
 int CopyMemoProc P(());