XrmDatabase db = 0;
-static Atom XA_SCREENSAVER;
static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV;
static Atom XA_EXIT, XA_RESTART, XA_DEMO, XA_LOCK;
static XrmOptionDescRec options [] = {
{ "-timeout", ".timeout", XrmoptionSepArg, 0 },
{ "-cycle", ".cycle", XrmoptionSepArg, 0 },
- { "-idelay", ".initialDelay", XrmoptionSepArg, 0 },
- { "-nice", ".nice", XrmoptionSepArg, 0 },
- { "-visual", ".visualID", XrmoptionSepArg, 0 },
+ { "-lock-mode", ".lock", XrmoptionNoArg, "on" },
+ { "-no-lock-mode", ".lock", XrmoptionNoArg, "off" },
{ "-lock-timeout", ".lockTimeout", XrmoptionSepArg, 0 },
+ { "-visual", ".visualID", XrmoptionSepArg, 0 },
{ "-install", ".installColormap", XrmoptionNoArg, "on" },
{ "-no-install", ".installColormap", XrmoptionNoArg, "off" },
{ "-verbose", ".verbose", XrmoptionNoArg, "on" },
{ "-no-mit-extension", ".mitSaverExtension",XrmoptionNoArg, "off" },
{ "-sgi-extension", ".sgiSaverExtension",XrmoptionNoArg, "on" },
{ "-no-sgi-extension", ".sgiSaverExtension",XrmoptionNoArg, "off" },
- { "-lock", ".lock", XrmoptionNoArg, "on" },
- { "-no-lock", ".lock", XrmoptionNoArg, "off" }
+ { "-idelay", ".initialDelay", XrmoptionSepArg, 0 },
+ { "-nice", ".nice", XrmoptionSepArg, 0 }
};
static char *defaults[] = {
\n\
-timeout <minutes> When the screensaver should activate.\n\
-cycle <minutes> How long to let each hack run.\n\
- -idelay <seconds> How long to sleep before startup.\n\
+ -lock-mode Require a password before deactivating.\n\
+ -no-lock-mode Don't.\n\
+ -lock-timeout <minutes> Grace period before locking; default 0.\n\
-visual <id-or-class> Which X visual to run on.\n\
- -demo Enter interactive demo mode on startup.\n\
-install Install a private colormap.\n\
-no-install Don't.\n\
-verbose Be loud.\n\
-silent Don't.\n\
- -xidle-extension Use the R5 XIdle server extension.\n\
- -no-xidle-extension Don't.\n\
-mit-extension Use the R6 MIT_SCREEN_SAVER server extension.\n\
-no-mit-extension Don't.\n\
-sgi-extension Use the SGI SCREEN-SAVER server extension.\n\
-no-sgi-extension Don't.\n\
- -lock Require a password before deactivating.\n\
- -no-lock Don't.\n\
- -lock-timeout <minutes> Grace period before locking; default 0.\n\
+ -xidle-extension Use the R5 XIdle server extension.\n\
+ -no-xidle-extension Don't.\n\
-help This message.\n\
\n\
-Use the `xscreensaver-command' program to control a running screensaver.\n\
+The `xscreensaver' program should be left running in the background.\n\
+Use the `xscreensaver-command' program to manipulate a running xscreensaver.\n\
+\n\
+The `*programs' resource controls which graphics demos will be launched by\n\
+the screensaver. See `man xscreensaver' or the web page for more details.\n\
\n\
-The *programs resource controls which graphics demos will be launched by the\n\
-screensaver. See the man page for more details. For updates, check\n\
-http://people.netscape.com/jwz/xscreensaver/\n\n",
+For updates, check http://people.netscape.com/jwz/xscreensaver/\n\n",
si->version);
#ifdef NO_LOCKING
d = get_string_resource ("programs", "Programs");
- size = strlen (d);
+ size = d ? strlen (d) : 0;
p->screenhacks = (char **) malloc (sizeof (char *) * hacks_size);
p->screenhacks_count = 0;
si->db = XtDatabase (si->dpy);
XtGetApplicationNameAndClass (si->dpy, &progname, &progclass);
+ if(strlen(progname) > 100) progname [99] = 0; /* keep it short. */
+
db = si->db; /* resources.c needs this */
if (argc == 2 && !strcmp (argv[1], "-help"))
else if (argc > 1)
{
- fprintf (stderr, "%s: unknown option %s\n", progname, argv [1]);
+ const char *s = argv[1];
+ fprintf (stderr, "%s: unknown option \"%s\". Try \"-help\".\n",
+ progname, s);
+
+ if (s[0] == '-' && s[1] == '-') s++;
+ if (!strcmp (s, "-activate") ||
+ !strcmp (s, "-deactivate") ||
+ !strcmp (s, "-cycle") ||
+ !strcmp (s, "-next") ||
+ !strcmp (s, "-prev") ||
+ !strcmp (s, "-exit") ||
+ !strcmp (s, "-restart") ||
+ !strcmp (s, "-demo") ||
+ !strcmp (s, "-lock") ||
+ !strcmp (s, "-version") ||
+ !strcmp (s, "-time"))
+ {
+ fprintf (stderr, "\n\
+ However, %s is an option to the `xscreensaver-command' program.\n\
+ The `xscreensaver' program is a daemon that runs in the background.\n\
+ You control a running xscreensaver process by sending it messages\n\
+ with `xscreensaver-command'. See the man pages for details,\n\
+ or check the web page: http://people.netscape.com/jwz/xscreensaver/\n\n",
+ s);
+
+ /* Since version 1.21 renamed the "-lock" option to "-lock-mode",
+ suggest that explicitly. */
+ if (!strcmp (s, "-lock"))
+ fprintf (stderr, "\
+ Or perhaps you meant either the \"-lock-mode\" or the\n\
+ \"-lock-timeout <minutes>\" options to xscreensaver?\n\n");
+ }
+
exit (1);
}
get_resources (si);
si->version [4] = 0;
progname = argv[0]; /* reset later; this is for the benefit of lock_init() */
+ if(strlen(progname) > 100) progname[99] = 0; /* keep it short. */
+
#ifdef NO_LOCKING
si->locking_disabled_p = True;
si->nolock_reason = "not compiled with locking support";
progclass = "XScreenSaver";
- /* remove -demo switch before saving argv */
+ /* remove -initial-demo-mode switch before saving argv */
for (i = 1; i < argc; i++)
- while (!strcmp ("-demo", argv [i]))
+ while (!strcmp ("-initial-demo-mode", argv [i]))
{
int j;
initial_demo_mode_p = True;
for (i = 0; i < si->nscreens; i++)
- ensure_no_screensaver_running (si->dpy, si->screens[i].screen);
+ if (ensure_no_screensaver_running (si->dpy, si->screens[i].screen))
+ exit (1);
si->demo_mode_p = initial_demo_mode_p;
srandom ((int) time ((time_t *) 0));