From cd705f84010afaa24ec457a90de61f2b4635ea69 Mon Sep 17 00:00:00 2001 From: volker Date: Fri, 20 Nov 2009 14:49:34 +0000 Subject: special commandline parameters for X11 git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1067 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- drv.h | 8 ++++++++ drv_X11.c | 34 ++++++++++++++++++++++++++++++++-- lcd4linux.c | 15 +++++++++++++++ svn_version.h | 2 +- 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/drv.h b/drv.h index db2d1dd..2780206 100644 --- a/drv.h +++ b/drv.h @@ -41,6 +41,14 @@ typedef struct DRIVER { */ extern char *output; +#ifdef WITH_X11 +/* function to handle special X11 command line parameters + * has to be defined here because it's referenced + * in main before dealing with normal parameters. + */ +void drv_X11_parseArgs(int *argc, char *arvg[]); +#endif + int drv_list(void); int drv_init(const char *section, const char *driver, const int quiet); int drv_quit(const int quiet); diff --git a/drv_X11.c b/drv_X11.c index 6ff17df..41e2f77 100644 --- a/drv_X11.c +++ b/drv_X11.c @@ -49,6 +49,7 @@ #include #include #include +#include #include "debug.h" #include "cfg.h" @@ -93,6 +94,14 @@ static GC gc; static Colormap cm; static Pixmap pm; +static char myDisplayName[256] = ""; +static int opTableEntries = 2; +static XrmOptionDescRec opTable[] = { + {"-display", ".display", XrmoptionSepArg, NULL}, + {"-synchronous", "*synchronous", XrmoptionNoArg, "on"}, +}; +static XrmDatabase commandlineDB; + /****************************************/ /*** hardware dependant functions ***/ @@ -413,6 +422,8 @@ static int drv_X11_start(const char *section) { int i; char *s; + XrmValue value; + char *str_type[20]; XSetWindowAttributes wa; XSizeHints sh; XEvent ev; @@ -489,11 +500,21 @@ static int drv_X11_start(const char *section) drv_X11_FB[i] = NO_COL; } - if ((dp = XOpenDisplay(NULL)) == NULL) { - error("%s: can't open display", Name); + if (XrmGetResource(commandlineDB, "lcd4linux.display", "Lcd4linux.Display", str_type, &value)) { + strncpy(myDisplayName, value.addr, value.size); + debug("%s: X11 display name from command line: %s", Name, myDisplayName); + } + + if ((dp = XOpenDisplay(strlen(myDisplayName) > 0 ? myDisplayName : NULL)) == NULL) { + error("%s: can't open display %s", Name, XDisplayName(strlen(myDisplayName) > 0 ? myDisplayName : NULL)); return -1; } + if (XrmGetResource(commandlineDB, "lcd4linux*synchronous", "Lcd4linux*Synchronous", str_type, &value)) { + debug("%s: X synchronize on", Name); + XSynchronize(dp, 1 /* true */ ); + } + sc = DefaultScreen(dp); gc = DefaultGC(dp, sc); vi = DefaultVisual(dp, sc); @@ -595,6 +616,15 @@ int drv_X11_list(void) } +/* read X11 specific command line arguments */ +/* it is defined in drv.h */ +void drv_X11_parseArgs(int *argc, char *argv[]) +{ + XrmInitialize(); + XrmParseCommand(&commandlineDB, opTable, opTableEntries, "lcd4linux", argc, argv); +} + + /* initialize driver & display */ int drv_X11_init(const char *section, const int quiet) { diff --git a/lcd4linux.c b/lcd4linux.c index bf17f5e..7a48c7c 100644 --- a/lcd4linux.c +++ b/lcd4linux.c @@ -91,6 +91,14 @@ static void usage(void) printf(" -F do not fork and detach (run in foreground)\n"); printf(" -o write picture to file (raster driver only)\n"); printf(" -q suppress startup and exit splash screen\n"); +#ifdef WITH_X11 + printf("special X11 options:\n"); + printf(" -display preceeds X connection given in $DISPLAY\n"); + printf(" -synchronous use synchronized communication with X server (for debugging)\n"); + printf("\n"); + printf("\n"); + printf("\n"); +#endif } static void interactive_mode(void) @@ -222,6 +230,13 @@ int main(int argc, char *argv[]) running_foreground = 0; running_background = 0; +#ifdef WITH_X11 + drv_X11_parseArgs(&argc, argv); + if (argc != thread_argc) { + /* info() will not work here because verbose level is not known */ + printf("recognized special X11 parameters\n"); + } +#endif while ((c = getopt(argc, argv, "c:Ff:hilo:qvp:")) != EOF) { switch (c) { diff --git a/svn_version.h b/svn_version.h index 73131b4..090b8c8 100644 --- a/svn_version.h +++ b/svn_version.h @@ -1 +1 @@ -#define SVN_VERSION "1048" +#define SVN_VERSION "1066M" -- cgit v1.2.3