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; }
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
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 */
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
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;