diff options
-rw-r--r-- | xlogo.c | 38 |
1 files changed, 30 insertions, 8 deletions
@@ -135,12 +135,11 @@ save(Widget w, XtPointer client_data, XtPointer call_data) */ static void -Syntax(Widget toplevel, String message) +Syntax(Widget toplevel, String message, int exitval) { - Arg arg; SmcConn connection; String reasons[10]; - int i, n = 0; + int n = 0; if (message) reasons[n++] = message; @@ -157,15 +156,22 @@ Syntax(Widget toplevel, String message) reasons[n++] = " [-shape]\n\n"; assert(n <= XtNumber(reasons)); - XtSetArg(arg, XtNconnection, &connection); - XtGetValues(toplevel, &arg, (Cardinal)1); + if (toplevel != NULL) { + Arg arg; + + XtSetArg(arg, XtNconnection, &connection); + XtGetValues(toplevel, &arg, (Cardinal)1); + } + else + connection = NULL; + if (connection) SmcCloseConnection(connection, n, (char **) reasons); else { - for (i=0; i < n; i++) + for (int i = 0; i < n; i++) printf("%s", reasons[i]); } - exit(EXIT_FAILURE); + exit(exitval); } int @@ -176,6 +182,22 @@ main(int argc, char *argv[]) ProgramName = argv[0]; + /* Handle args that don't require opening a display */ + for (int n = 1; n < argc; n++) { + const char *argn = argv[n]; + /* accept single or double dash for -help & -version */ + if (argn[0] == '-' && argn[1] == '-') { + argn++; + } + if (strcmp(argn, "-help") == 0) { + Syntax(NULL, NULL, EXIT_SUCCESS); + } + if (strcmp(argn, "-version") == 0) { + puts(PACKAGE_STRING); + exit(EXIT_SUCCESS); + } + } + toplevel = XtOpenApplication(&app_con, "XLogo", options, XtNumber(options), &argc, argv, fallback_resources, @@ -196,7 +218,7 @@ main(int argc, char *argv[]) } strlcat(message, "\n\n", len); } - Syntax(toplevel, message); + Syntax(toplevel, message, EXIT_FAILURE); } XtGetApplicationResources(toplevel, (XtPointer)&userOptions, resources, |