diff --git a/contrib/patches/README.lcdproc-cfgfile.diff b/contrib/patches/README.lcdproc-cfgfile.diff deleted file mode 100644 index 83365e4..0000000 --- a/contrib/patches/README.lcdproc-cfgfile.diff +++ /dev/null @@ -1,33 +0,0 @@ -Here's a patch for lcdproc to add a config file, as promised, it applies -to the 20060R307 version from CVS. - -It covers the basics and get's the infrastructure to add more, like on -the process size screen, we may want an option not to add up the sizes -of each of the procs, since in a shared mem app, the answer is -incorrectly largoe. - -This patch just makes lcdproc client like the LCDd server for processing -config options; - -moves command line argument processing to process_command_line() - -add process_config_file() - -creates a default lcdproc.conf file, w/ default location -/usr/local/etc/, same general format as LCDd.conf. - -[LCDPROC] -#general lcdproc client settings port, server, etc. - -[CPU] -#subsections for each screen for specific options -[BATT] - -I realize in doing it that I'm not entirely clear on the purpose of "on -time" "off time" and "show invisible" in the sequence structure, so -they're now settable, but I could use some help putting more descriptive -helpful text in the lcdproc.conf file to describe them for folks. - -thanks, -andrew - diff --git a/contrib/patches/lcdproc-cfgfile.diff b/contrib/patches/lcdproc-cfgfile.diff deleted file mode 100644 index a3daa30..0000000 --- a/contrib/patches/lcdproc-cfgfile.diff +++ /dev/null @@ -1,372 +0,0 @@ -diff --exclude='.??*' --exclude=config.h --exclude='*.orig' --exclude=Makefile --exclude='*.o' --exclude=Doxyfile --exclude='*.a' --exclude=config.log --exclude=config.status --exclude='init-*' --exclude lcdproc -Nuarp lcdproc/lcdproc.conf lcdproc-cfgfile/lcdproc.conf ---- lcdproc/lcdproc.conf 1969-12-31 16:00:00.000000000 -0800 -+++ lcdproc-cfgfile/lcdproc.conf 2006-03-07 07:30:30.000000000 -0800 -@@ -0,0 +1,69 @@ -+# LCDproc client configuration file -+ -+## Options for lcdproc ## -+[lcdproc] -+# address of the LCDd server to connect to -+Server=localhost -+ -+# Port of the server to connect to -+Port=13666 -+ -+# set reporting level -+ReportLevel=2 -+ -+# report to to syslog ? -+ReportToSyslog=false -+ -+# stay in foreground ? -+Foreground=false -+ -+# slow down initial announcement of modes (in 1/100s) -+#delay=2 -+ -+# screen specific configuration options -+[CPU] -+# Show screen -+Active = True -+OnTime = 1 -+OffTime = 2 -+ShowInvisible = false -+[Memory] -+# Show screen -+Active = True -+[Load] -+# Show screen -+Active = True -+[TimeDate] -+# Show screen -+Active = True -+[About] -+# Show screen -+Active = false -+[SMP-CPU] -+# Show screen -+Active = false -+[OldTime] -+# Show screen -+Active = false -+[BigClock] -+# Show screen -+Active = false -+[Uptime] -+# Show screen -+Active = false -+[Battery] -+# Show screen -+Active = false -+[CPUGraph] -+# Show screen -+Active = false -+[ProcSize] -+# Show screen -+Active = false -+[Disk] -+# Show screen -+Active = false -+[MiniClock] -+# Show screen -+Active = True -+# EOF -diff --exclude='.??*' --exclude=config.h --exclude='*.orig' --exclude=Makefile --exclude='*.o' --exclude=Doxyfile --exclude='*.a' --exclude=config.log --exclude=config.status --exclude='init-*' --exclude lcdproc -Nuarp lcdproc/main.c lcdproc-cfgfile/main.c ---- lcdproc/main.c 2006-03-02 14:16:11.000000000 -0800 -+++ lcdproc-cfgfile/main.c 2006-03-07 07:40:56.000000000 -0800 -@@ -22,6 +22,7 @@ - #include "shared/sockets.h" - #include "shared/debug.h" - #include "shared/report.h" -+#include "shared/configfile.h" - - #include "batt.h" - #include "chrono.h" -@@ -54,6 +55,10 @@ static struct utsname unamebuf; - static void HelpScreen(int exit_state); - static void exit_program(int val); - static void main_loop(); -+static int process_command_line(int argc, char **argv); -+static int process_configfile(char *cfgfile); -+#define CHAIN(e,f) { if( e>=0 ) { e=(f); }} -+#define CHAIN_END(e,msg) { if( e<0 ) { report( RPT_CRIT,(msg)); exit(e); }} - - static int islow = -1; - -@@ -65,26 +70,39 @@ mode sequence[] = - { - // flags default ACTIVE will run by default - // longname which on off inv timer flags -- { "CPU", 'C', 1, 2, 0, 0xffff, ACTIVE, cpu_screen }, // [C]PU -- { "Memory", 'M', 4, 16, 0, 0xffff, ACTIVE, mem_screen }, // [M]emory -- { "Load", 'L', 64, 128, 1, 0xffff, ACTIVE, xload_screen }, // [L]oad (load histogram) -- { "TimeDate", 'T', 4, 64, 0, 0xffff, ACTIVE, time_screen }, // [T]ime/Date -- { "About", 'A', 999, 9999, 0, 0xffff, ACTIVE, credit_screen }, // [A]bout (credits) -- { "SMP-CPU", 'P', 1, 2, 0, 0xffff, 0, cpu_smp_screen }, // CPU_SM[P] -- { "OldTime", 'O', 4, 64, 0, 0xffff, 0, clock_screen }, // [O]ld Timescreen -- { "BigClock", 'K', 4, 64, 0, 0xffff, 0, big_clock_screen }, // big cloc[K] -- { "Uptime", 'U', 4, 128, 0, 0xffff, 0, uptime_screen }, // Old [U]ptime Screen -- { "Battery", 'B', 32, 256, 1, 0xffff, 0, battery_screen }, // [B]attery Status -- { "CPUGraph", 'G', 1, 2, 0, 0xffff, 0, cpu_graph_screen }, // CPU histogram [G]raph -- { "ProcSize", 'S', 16, 256, 1, 0xffff, 0, mem_top_screen }, // [S]ize of biggest processes -- { "Disk", 'D', 256, 256, 1, 0xffff, 0, disk_screen }, // [D]isk stats -- { "MiniClock", 'N', 4, 64, 0, 0xffff, 0, mini_clock_screen }, // Mi[n]i clock -- { NULL, 0, 0, 0, 0, 0,}, // No more.. all done. -+ { "CPU", 'C', 1, 2, 0, 0xffff, ACTIVE, cpu_screen }, // [C]PU -+ { "Memory", 'M', 4, 16, 0, 0xffff, ACTIVE, mem_screen }, // [M]emory -+ { "Load", 'L', 64, 128, 1, 0xffff, ACTIVE, xload_screen }, // [L]oad (load histogram) -+ { "TimeDate", 'T', 4, 64, 0, 0xffff, ACTIVE, time_screen }, // [T]ime/Date -+ { "About", 'A', 999, 9999, 0, 0xffff, ACTIVE, credit_screen }, // [A]bout (credits) -+ { "SMP-CPU", 'P', 1, 2, 0, 0xffff, 0, cpu_smp_screen }, // CPU_SM[P] -+ { "OldTime", 'O', 4, 64, 0, 0xffff, 0, clock_screen }, // [O]ld Timescreen -+ { "BigClock", 'K', 4, 64, 0, 0xffff, 0, big_clock_screen }, // big cloc[K] -+ { "Uptime", 'U', 4, 128, 0, 0xffff, 0, uptime_screen }, // Old [U]ptime Screen -+ { "Battery", 'B', 32, 256, 1, 0xffff, 0, battery_screen }, // [B]attery Status -+ { "CPUGraph", 'G', 1, 2, 0, 0xffff, 0, cpu_graph_screen }, // CPU histogram [G]raph -+ { "ProcSize", 'S', 16, 256, 1, 0xffff, 0, mem_top_screen }, // [S]ize of biggest processes -+ { "Disk", 'D', 256, 256, 1, 0xffff, 0, disk_screen }, // [D]isk stats -+ { "MiniClock", 'N', 4, 64, 0, 0xffff, 0, mini_clock_screen },// Mi[n]i clock -+ { NULL, 0, 0, 0, 0, 0, 0, 0}, // No more.. all done. - }; - - - - // TODO: Config file; not just command line -+/* All variables are set to 'unset' values*/ -+#define UNSET_INT -1 -+#define UNSET_STR "\01" -+#define DEFAULT_SERVER "127.0.0.1" -+#define DEFAULT_CONFIGFILE "/usr/local/etc/lcdproc.conf" -+char * progname = "lcdproc"; -+char * server = NULL; -+int port = LCDPORT; -+int daemonize = FALSE; -+static int report_level = UNSET_INT; -+static int report_dest = UNSET_INT; -+char configfile[256]; /* a lot of space in the executable. */ -+ - - const char *get_hostname() - { -@@ -135,11 +153,10 @@ void clear_modes() - int - main(int argc, char **argv) - { -- int i; -- int c; - char *server = NULL; - int port = LCDPORT; - int daemonize = FALSE; -+ int error=0; - - /* get uname information */ - if (uname(&unamebuf) == -1) { -@@ -153,12 +170,77 @@ main(int argc, char **argv) - signal(SIGHUP, exit_program); // kill -HUP - signal(SIGKILL, exit_program); // kill -9 [cannot be trapped; but ...] - -+ /* Set default config file, command line may overwrite */ -+ strncpy(configfile, DEFAULT_CONFIGFILE, sizeof(configfile)); -+ -+ /* Read command line*/ -+ CHAIN( error, process_command_line(argc, argv) ); -+ -+ /* Read config file*/ -+ if (strcmp(configfile, UNSET_STR)!=0) -+ CHAIN( error, process_configfile(configfile) ); -+ -+ CHAIN_END( error, "Error in config file or command line\n" ); -+ -+ if (server == NULL) -+ server = DEFAULT_SERVER; -+ -+ // Connect to the server... -+ usleep(500000); // wait for the server to start up -+ sock = sock_connect(server, port); -+ if (sock <= 0) { -+ fprintf(stderr, "Error connecting to LCD server %s on port %d.\n" -+ "Check to see that the server is running and operating normally.\n", -+ server, port); -+ return(EXIT_FAILURE); -+ } -+ -+ sock_send_string(sock, "hello\n"); -+ usleep(500000); // wait for the server to say hi. -+ -+ // We grab the real values below, from the "connect" line. -+ lcd_wid = 20; -+ lcd_hgt = 4; -+ lcd_cellwid = 5; -+ lcd_cellhgt = 8; -+ -+ if (daemonize) { -+ if (daemon(1,0) != 0) { -+ fprintf(stderr, "Error: daemonize failed"); -+ return(EXIT_FAILURE); -+ } -+ } -+ -+ // Init the status gatherers... -+ mode_init(); -+ -+ // And spew stuff! -+ main_loop(); -+ -+ // Clean up -+ exit_program(EXIT_SUCCESS); -+ -+ return(0); -+} -+ -+/* parses arguments given on command line */ -+static int -+process_command_line(int argc, char **argv) -+{ -+ int i; -+ int c; -+ - /* No error output from getopt */ - opterr = 0; - - /* get options */ -- while ((c = getopt( argc, argv, "s:p:e:dhv")) > 0) { -+ while ((c = getopt( argc, argv, "s:p:e:c:dhv")) > 0) { - switch (c) { -+ // c is for config file -+ case 'c': -+ strncpy(configfile, optarg, sizeof(configfile)); -+ configfile[sizeof(configfile)-1] = 0; /* Terminate string */ -+ break; - // s is for server - case 's': - if (server == NULL) -@@ -204,50 +286,71 @@ main(int argc, char **argv) - int found = set_mode(shortname, argv[i], 1); - - if (!found) { -- fprintf(stderr, "Invalid Mode: %c, ignoring\n", argv[i][0]); -+ fprintf(stderr, "Invalid Mode: %c\n", argv[i][0]); - return(EXIT_FAILURE); - } - } -+ return 0; -+} - -- if (server == NULL) -- server = "localhost"; -+/* reads and parses configuration file */ -+static int -+process_configfile(char *configfile) -+{ -+ int k; - -- // Connect to the server... -- usleep(500000); // wait for the server to start up -- sock = sock_connect(server, port); -- if (sock <= 0) { -- fprintf(stderr, "Error connecting to LCD server %s on port %d.\n" -- "Check to see that the server is running and operating normally.\n", -- server, port); -- return(EXIT_FAILURE); -- } -+ debug( RPT_DEBUG, "%s()", __FUNCTION__ ); - -- sock_send_string(sock, "hello\n"); -- usleep(500000); // wait for the server to say hi. -+ /* Read server settings*/ - -- // We grab the real values below, from the "connect" line. -- lcd_wid = 20; -- lcd_hgt = 4; -- lcd_cellwid = 5; -- lcd_cellhgt = 8; -+ if( strcmp( configfile, UNSET_STR ) == 0 ) { -+ configfile = DEFAULT_CONFIGFILE; -+ } -+ if( config_read_file( configfile ) != 0 ) { -+ report( RPT_CRIT, "Could not read config file: %s", configfile ); -+ return -1; -+ //report( RPT_WARNING, "Could not read config file: %s", configfile ); -+ } - -- if (daemonize) { -- if (daemon(1,0) != 0) { -- fprintf(stderr, "Error: daemonize failed"); -- return(EXIT_FAILURE); -+ if( server == NULL ) { -+ server = strdup( config_get_string( progname, "Server", 0, DEFAULT_SERVER )); -+ } -+ if( port == UNSET_INT ) { -+ port = config_get_int( progname, "Port", 0, LCDPORT ); -+ } -+ if( report_level == UNSET_INT ) { -+ report_level = config_get_int( progname, "ReportLevel", 0, RPT_WARNING ); -+ } -+ if( report_dest == UNSET_INT ) { -+ if( config_get_bool( progname, "ReportToSyslog", 0, 0 )) { -+ report_dest = RPT_DEST_SYSLOG; -+ } else { -+ report_dest = RPT_DEST_STDERR; - } -- } -- -- // Init the status gatherers... -- mode_init(); -- -- // And spew stuff! -- main_loop(); -+ } -+ if( daemonize == UNSET_INT ) { -+ daemonize = config_get_bool( progname, "Foreground", 0, 1 ); -+ } -+ if( islow < 0 ) { -+ islow = config_get_int( progname, "delay", 0, -1 ); -+ } - -- // Clean up -- exit_program(EXIT_SUCCESS); -+ /* -+ * check for config file variables to override all the sequence defaults -+ */ -+ for ( k = 0; sequence[k].which ; k++) { -+ if (sequence[k].longname) { -+ sequence[k].on_time = config_get_int( sequence[k].longname, "OnTime", 0, sequence[k].on_time ); -+ sequence[k].off_time = config_get_int( sequence[k].longname, "OffTime", 0, sequence[k].off_time ); -+ sequence[k].show_invisible = config_get_bool( sequence[k].longname, "ShowInvisible", 0, sequence[k].show_invisible ); -+ if ( config_get_bool( sequence[k].longname, "Active", 0, sequence[k].flags & ACTIVE ) ) -+ sequence[k].flags |= ACTIVE; -+ else -+ sequence[k].flags &= (~ACTIVE); -+ } -+ } - -- return(0); -+ return 0; - } - - void -@@ -260,6 +363,7 @@ HelpScreen (int exit_state) - " -p connect to LCDd daemon using \n" - " -d daemonize\n" - " -e slow down initial announcement of modes (in 1/100s)\n" -+ " -c Use a configuration file other than %s\n" - " -h show this help screen\n" - " -v display program version\n" - " and are\n" -@@ -273,14 +377,14 @@ HelpScreen (int exit_state) - " B Battery battery status\n" - " T TimeDate time & date information\n" - " O OldTime old time screen\n" -- " U Uptime old uptime screen\n" -+ " U Uptime uptime screen\n" - " K BigClock big clock\n" - " N MiniClock minimal clock\n" - " A About credits page\n" - "\n" - "Example:\n" - " lcdproc -s my.lcdproc.server.com p 13666 C M X\n" -- ); -+ , DEFAULT_CONFIGFILE); - - exit(exit_state); - }