]> skyeroc.xyz Git - dgamelaunch/commitdiff
userprefs - askpref (prompt user for a string value - be careful with this)
authorTangles <andyrthomson@gmail.com>
Mon, 10 Feb 2020 13:21:47 +0000 (00:21 +1100)
committerTangles <andyrthomson@gmail.com>
Mon, 10 Feb 2020 13:21:47 +0000 (00:21 +1100)
config.l
dgamelaunch.c
dgamelaunch.h
dgl-common.c

index 52a29d0fdbef011ed2c3847f334925ffc900490e..01e71f21d79d6a83b8fb52598d35d2a0526d9f1e 100644 (file)
--- a/config.l
+++ b/config.l
@@ -128,6 +128,7 @@ chpasswd    { yylval.i = DGLCMD_CHPASSWD;   return TYPE_DGLCMD0; }
 chmail         { yylval.i = DGLCMD_CHMAIL;     return TYPE_DGLCMD0; }
 setprefpath    { yylval.i = DGLCMD_SETPREFPATH; return TYPE_DGLCMD1; }
 setpref        { yylval.i = DGLCMD_SETPREF;    return TYPE_DGLCMD2; }
+askpref        { yylval.i = DGLCMD_ASKPREF;    return TYPE_DGLCMD2; }
 readprefs      { yylval.i = DGLCMD_READPREFS;  return TYPE_DGLCMD0; }
 writeprefs     { yylval.i = DGLCMD_WRITEPREFS; return TYPE_DGLCMD0; }
 watch_menu     { yylval.i = DGLCMD_WATCH_MENU; return TYPE_DGLCMD0; }
index 7cfa4ea5f70a556cb07d5b2d64fbdd0eab4096b6..a5b36af326b85e161d1b338ad2cee2559fa7ab14 100644 (file)
@@ -2272,6 +2272,52 @@ setpref(char *key, char *val)
     return TRUE;
 }
 
+void
+delpref(char *key)
+{
+    struct userpref *cpref = userprefs;
+    /* ugly special case #1 (list empty) */
+    if (!userprefs) return;
+    /* ugly special case #2 (delete first item) */
+    if (!strcmp (userprefs->name, key)) {
+        free(userprefs->name);
+        free(userprefs->value);
+        userprefs = userprefs->npref;
+        free(cpref);
+        return;
+    }
+    /* ugly general case (delete another item) */
+    while (cpref->npref) {
+        if (!strcmp (cpref->npref->name, key)) {
+            struct userpref *dpref = cpref->npref;
+            cpref->npref = dpref->npref;
+            free(dpref->name);
+            free(dpref->value);
+            free(dpref);
+            return;
+        }
+        cpref = cpref->npref;
+    }
+}
+
+int
+askpref (char *prompt, char *key)
+{
+    /* blank entry removes any previously stored value */
+    char value[80];
+    clear();
+    drawbanner(&banner);
+    mvaddstr(13, 1, prompt);
+    mvaddstr(14, 1, "=> ");
+    mygetnstr(value, 80, 1);
+    if (strlen(value) == 0) {
+        delpref(key);
+        return TRUE;
+    }
+    return setpref(key, value);
+}
+
+
 /* ************************************************************* */
 
 int
index f561f6a999fa357df9c8fd22a24539a726f9e7e5..b746074e9bc3a03d2c57596b94887c9d508b7e97 100644 (file)
@@ -69,6 +69,7 @@ typedef enum
     DGLCMD_SETENV,     /* setenv foo bar */
     DGLCMD_SETPREFPATH,        /* setprefpath foo */
     DGLCMD_SETPREF,    /* setpref foo bar */
+    DGLCMD_ASKPREF,    /* askpref "prompt" foo */
     DGLCMD_READPREFS,  /* readprefs */
     DGLCMD_WRITEPREFS, /* writeprefs */
     DGLCMD_WATCH_MENU,  /* watch_menu */
@@ -362,6 +363,7 @@ extern int readprefs(void);
 extern int writeprefs(void);
 extern const char *getpref(char *key, char *fallback);
 extern int setpref(char *key, char *val);
+extern int askpref(char *prompt, char *key);
 /*extern int menuloop(void);*/
 extern void ttyrec_getpty(void);
 #ifndef HAVE_SETENV
index 514b361e4ee30ee0893a6bc6d88917fe9a79029a..53f76a91bba74128d54997858e6fa2813022052e 100644 (file)
@@ -388,6 +388,9 @@ dgl_exec_cmdqueue_w(struct dg_cmdpart *queue, int game, struct dg_user *me, char
         case DGLCMD_SETPREF:
             if (p1 && p2) setpref(p1, p2);
             break;
+        case DGLCMD_ASKPREF:
+            if (p1 && p2) askpref(p1, p2);
+            break;
         case DGLCMD_READPREFS:
             if (loggedin && userpref_path) readprefs();
            break;