diff options
author | volker <volker@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2009-11-20 14:49:34 +0000 |
---|---|---|
committer | volker <volker@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2009-11-20 14:49:34 +0000 |
commit | cd705f84010afaa24ec457a90de61f2b4635ea69 (patch) | |
tree | 45e3f2bf5c912c48130c5830168b296fe56b2ebf | |
parent | 82a0af2c3007a9ebcbae4c1af4cc40765b1f5c96 (diff) | |
download | lcd4linux-cd705f84010afaa24ec457a90de61f2b4635ea69.tar.gz |
special commandline parameters for X11
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1067 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r-- | drv.h | 8 | ||||
-rw-r--r-- | drv_X11.c | 34 | ||||
-rw-r--r-- | lcd4linux.c | 15 | ||||
-rw-r--r-- | svn_version.h | 2 |
4 files changed, 56 insertions, 3 deletions
@@ -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); @@ -49,6 +49,7 @@ #include <signal.h> #include <X11/Xlib.h> #include <X11/Xutil.h> +#include <X11/Xresource.h> #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 <output-file> 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 <X11 display name> 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" |