+static void show_def (void)
+{
+ fprintf (reply_fd, "format %s\n", gw_res_get
+ (info.kernel_res, "gw.display.format", ""));
+ fprintf (reply_fd, "autoshow %s\n", gw_res_get
+ (info.kernel_res, "gw.auto.show", ""));
+ fprintf (reply_fd, "defaultshow %s\n", gw_res_get
+ (info.kernel_res, "gw.default.show", ""));
+ fprintf (reply_fd, "language %s\n", gw_res_get
+ (info.kernel_res, "gw.language", ""));
+}
+
+static int exec_def (struct ccl_token *list)
+{
+ const char *name = NULL;
+ char value[128];
+ char fname[256];
+ static struct command_word def_tab [] =
+ {
+ { "reset", "reset" },
+ { "show", "show" },
+ { "f", "format"},
+ { "autoshow", "autoshow" },
+ { "defaultshow", "defaultshow" },
+ { "lang", "language" },
+ { NULL, NULL }
+ };
+
+ if (info.userid < 0)
+ return -1;
+ sprintf (fname, "user.%d.r", info.userid);
+
+ if (list->kind == CCL_TOK_EOL)
+ show_def ();
+ else
+ {
+ int setting_no = command_search (def_tab, list, "ccl.token.");
+
+ if (!setting_no)
+ {
+ fprintf (reply_fd, "Unknown setting in def\n");
+ return -1;
+ }
+ if (setting_no == 1)
+ {
+ unlink (fname);
+ read_kernel_res ();
+ return 0;
+ }
+ else if (setting_no == 2)
+ {
+ show_def ();
+ return 0;
+ }
+ list = list->next;
+ if (list->kind == CCL_TOK_EOL)
+ return 0;
+ strncpy (value, list->name, 127);
+ value[(size_t) list->len] = '\0';
+ switch (setting_no)
+ {
+ case 3:
+ name = "gw.display.format";
+ break;
+ case 4:
+ name = "gw.auto.show";
+ break;
+ case 5:
+ name = "gw.default.show";
+ break;
+ case 6:
+ name = "gw.language";
+ break;
+ default:
+ return 0;
+ }
+ gw_log (GW_LOG_DEBUG, KERNEL_LOG, "update file %s with %s=%s",
+ fname, name, value);
+ gw_res_put (info.kernel_res, "gw.username", info.from_str, fname);
+ gw_res_put (info.kernel_res, name, value, fname);
+ gw_res_commit (info.kernel_res, fname);
+ if (setting_no == 6)
+ read_kernel_res ();
+ }
+ return 0;
+}
+
+