From f5a5e9653b44273ebeeedf043d30352fd2d6003e Mon Sep 17 00:00:00 2001 From: William Ferrell Date: Thu, 30 Mar 2000 20:20:41 +0000 Subject: [PATCH] Removed lcddriver.c (doesn't do anything, isn't in any makefiles, etc.). Passed *every* piece of source in this project through indent. I'm setting things up with ctags soon and am actually going to *gasp* use a nice programming environment to continue development in. :) --- acconfig.h | 2 +- clients/lcdproc/batt.c | 246 ++--- clients/lcdproc/batt.h | 6 +- clients/lcdproc/chrono.c | 661 +++++++------- clients/lcdproc/chrono.h | 12 +- clients/lcdproc/cpu.c | 473 +++++----- clients/lcdproc/cpu.h | 8 +- clients/lcdproc/cpu_smp.c | 239 +++-- clients/lcdproc/cpu_smp.h | 6 +- clients/lcdproc/disk.c | 293 +++--- clients/lcdproc/disk.h | 6 +- clients/lcdproc/load.c | 164 ++-- clients/lcdproc/load.h | 6 +- clients/lcdproc/main.c | 373 ++++---- clients/lcdproc/main.h | 16 +- clients/lcdproc/mem.c | 609 ++++++------- clients/lcdproc/mem.h | 8 +- clients/lcdproc/mode.c | 387 ++++---- clients/lcdproc/mode.h | 12 +- server/client_data.c | 64 +- server/client_data.h | 21 +- server/client_functions.c | 1102 ++++++++++------------ server/client_functions.h | 45 +- server/client_menu.h | 20 +- server/clients.c | 221 +++-- server/clients.h | 29 +- server/drivers/CFontz.c | 943 ++++++++++--------- server/drivers/CFontz.h | 32 +- server/drivers/MtxOrb.c | 1359 +++++++++++++++------------- server/drivers/MtxOrb.h | 44 +- server/drivers/curses_drv.c | 276 +++--- server/drivers/curses_drv.h | 30 +- server/drivers/debug.c | 307 ++++--- server/drivers/debug.h | 38 +- server/drivers/drv_base.c | 214 +++-- server/drivers/drv_base.h | 40 +- server/drivers/hd44780-4bit.c | 207 ++--- server/drivers/hd44780-4bit.h | 5 +- server/drivers/hd44780-drivers.h | 48 +- server/drivers/hd44780-ext8bit.c | 65 +- server/drivers/hd44780-ext8bit.h | 5 +- server/drivers/hd44780-low.h | 81 +- server/drivers/hd44780-serialLpt.c | 181 ++-- server/drivers/hd44780-serialLpt.h | 9 +- server/drivers/hd44780-winamp.c | 81 +- server/drivers/hd44780-winamp.h | 5 +- server/drivers/hd44780.c | 1069 +++++++++++----------- server/drivers/hd44780.h | 2 +- server/drivers/irmanin.c | 206 ++--- server/drivers/irmanin.h | 6 +- server/drivers/joy.c | 187 ++-- server/drivers/joy.h | 6 +- server/drivers/lcd.c | 702 +++++++------- server/drivers/lcd.h | 125 ++- server/drivers/lcd_sem.c | 155 ++-- server/drivers/lcd_sem.h | 8 +- server/drivers/lcddriver.c | 124 --- server/drivers/lircin.c | 81 +- server/drivers/lircin.h | 6 +- server/drivers/port.h | 30 +- server/drivers/svgalib_drv.c | 646 +++++++------ server/drivers/svgalib_drv.h | 30 +- server/drivers/text.c | 223 ++--- server/drivers/text.h | 34 +- server/drivers/wirz-sli.c | 736 +++++++-------- server/drivers/wirz-sli.h | 34 +- server/input.c | 98 +- server/input.h | 2 +- server/main.c | 310 +++---- server/main.h | 16 +- server/menu.c | 508 +++++------ server/menu.h | 15 +- server/menus.c | 390 ++++---- server/menus.h | 2 +- server/parse.c | 107 +-- server/parse.h | 2 +- server/render.c | 745 +++++++-------- server/render.h | 2 +- server/screen.c | 153 ++-- server/screen.h | 29 +- server/screenlist.c | 233 ++--- server/screenlist.h | 18 +- server/serverscreens.c | 233 +++-- server/serverscreens.h | 8 +- server/sock.c | 241 +++-- server/sock.h | 8 +- server/widget.c | 368 ++++---- server/widget.h | 33 +- 88 files changed, 8207 insertions(+), 8723 deletions(-) delete mode 100644 server/drivers/lcddriver.c diff --git a/acconfig.h b/acconfig.h index 89d0270..dfa8a3e 100644 --- a/acconfig.h +++ b/acconfig.h @@ -73,8 +73,8 @@ /* Define the package version */ #undef VERSION - + /* Leave that blank line there!! Autoheader needs it. If you're adding to this file, keep in mind: The entries are in sort -df order: alphabetical, case insensitive, diff --git a/clients/lcdproc/batt.c b/clients/lcdproc/batt.c index 7d58322..5103fad 100644 --- a/clients/lcdproc/batt.c +++ b/clients/lcdproc/batt.c @@ -14,48 +14,51 @@ int batt_fd = 0; -static int get_batt_stat(int *acstat, int *battstat, - int *battflag, int *percent); +static int get_batt_stat (int *acstat, int *battstat, int *battflag, int *percent); -static int get_batt_stat(int *acstat, int *battstat, - int *battflag, int *percent) +static int +get_batt_stat (int *acstat, int *battstat, int *battflag, int *percent) { - char str[64]; - - if(!batt_fd) - batt_fd = open("/proc/apm", O_RDONLY); - if(batt_fd <= 0) return -1; + char str[64]; - if(lseek(batt_fd, 0, 0) != 0) return -1; + if (!batt_fd) + batt_fd = open ("/proc/apm", O_RDONLY); + if (batt_fd <= 0) + return -1; - if(read(batt_fd, str, sizeof(str)-1) < 0) return -1; - - if(3 > sscanf(str+13, "0x%x 0x%x 0x%x %d", - acstat, battstat, battflag, percent)) - return -1; + if (lseek (batt_fd, 0, 0) != 0) + return -1; + + if (read (batt_fd, str, sizeof (str) - 1) < 0) + return -1; + + if (3 > sscanf (str + 13, "0x%x 0x%x 0x%x %d", acstat, battstat, battflag, percent)) + return -1; + + return 0; - return 0; - } -int batt_init() +int +batt_init () { static int first = 1; - if(first) - { + if (first) { first = 0; - sock_send_string(sock, "screen_add B\n"); + sock_send_string (sock, "screen_add B\n"); } return 0; } -int batt_close() +int +batt_close () { - if(batt_fd) close(batt_fd); + if (batt_fd) + close (batt_fd); batt_fd = 0; return 0; @@ -72,122 +75,125 @@ int batt_close() //Batt: Low (Charging) //E------------------F -int battery_screen(int rep, int display) +int +battery_screen (int rep, int display) { - static int first=1; + static int first = 1; - int acstat=0, battstat=0, battflag=0, percent=0; - + int acstat = 0, battstat = 0, battflag = 0, percent = 0; - if(first) - { + + if (first) { first = 0; - sprintf(buffer, "screen_set B -name {APM stats: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add B title title\n"); - sprintf(tmp, "widget_set B title {LCDPROC %s}\n", version); - sock_send_string(sock, tmp); - sock_send_string(sock, "widget_add B one string\n"); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_add B two string\n"); - sock_send_string(sock, "widget_add B three string\n"); - sock_send_string(sock, "widget_add B gauge hbar\n"); - sock_send_string(sock, - "widget_set B one 1 2 {AC: Unknown}\n"); - sock_send_string(sock, - "widget_set B two 1 3 {Batt: Unknown}\n"); - sock_send_string(sock, - "widget_set B three 1 4 {E F}\n"); - sock_send_string(sock, "widget_set B gauge 2 4 0\n"); + sprintf (buffer, "screen_set B -name {APM stats: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add B title title\n"); + sprintf (tmp, "widget_set B title {LCDPROC %s}\n", version); + sock_send_string (sock, tmp); + sock_send_string (sock, "widget_add B one string\n"); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add B two string\n"); + sock_send_string (sock, "widget_add B three string\n"); + sock_send_string (sock, "widget_add B gauge hbar\n"); + sock_send_string (sock, "widget_set B one 1 2 {AC: Unknown}\n"); + sock_send_string (sock, "widget_set B two 1 3 {Batt: Unknown}\n"); + sock_send_string (sock, "widget_set B three 1 4 {E F}\n"); + sock_send_string (sock, "widget_set B gauge 2 4 0\n"); } } - // Only run once every 16 frames... //if(rep&0x0f) return 0; - - get_batt_stat(&acstat, &battstat, &battflag, &percent); + + get_batt_stat (&acstat, &battstat, &battflag, &percent); - if(percent >= 0) sprintf(buffer, "%i%%", percent); - else sprintf(buffer, "??%%"); - sprintf(tmp, "widget_set B title {Batt: %s: %s}\n", buffer, host); - - if(display) sock_send_string(sock, tmp); - + if (percent >= 0) + sprintf (buffer, "%i%%", percent); + else + sprintf (buffer, "??%%"); + sprintf (tmp, "widget_set B title {Batt: %s: %s}\n", buffer, host); - if(lcd_hgt >= 4) // 4-line version of the screen + if (display) + sock_send_string (sock, tmp); + + + if (lcd_hgt >= 4) // 4-line version of the screen { - sprintf(tmp, "widget_set B one 1 2 {"); - switch(acstat) - { - case 0: sprintf(tmp+strlen(tmp), "AC: Off}\n"); - break; - case 1: sprintf(tmp+strlen(tmp), "AC: On}\n"); - break; - case 2: sprintf(tmp+strlen(tmp), "AC: Backup}\n"); - break; - default: sprintf(tmp+strlen(tmp), "AC: Unknown}\n"); - break; + sprintf (tmp, "widget_set B one 1 2 {"); + switch (acstat) { + case 0: + sprintf (tmp + strlen (tmp), "AC: Off}\n"); + break; + case 1: + sprintf (tmp + strlen (tmp), "AC: On}\n"); + break; + case 2: + sprintf (tmp + strlen (tmp), "AC: Backup}\n"); + break; + default: + sprintf (tmp + strlen (tmp), "AC: Unknown}\n"); + break; } - - if(display) sock_send_string(sock, tmp); + + if (display) + sock_send_string (sock, tmp); - - sprintf(tmp, "widget_set B two 1 3 {"); - if(battflag == 0xff) - { - sprintf(tmp+strlen(tmp), "Battery Stat Unknown"); - } - else - { - sprintf(tmp+strlen(tmp), "Batt:"); - if(battflag & 1) sprintf(tmp+strlen(tmp), " High"); - if(battflag & 2) sprintf(tmp+strlen(tmp), " Low"); - if(battflag & 4) sprintf(tmp+strlen(tmp), " Critical"); - if(battflag & 8 - ||battstat == 3) sprintf(tmp+strlen(tmp), " Charging"); - if(battflag & 128) sprintf(tmp+strlen(tmp), " (NONE)"); - } - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); - - if(percent > 0) - { - sprintf(tmp, "widget_set B gauge 2 4 %i\n", - (percent * ((lcd_wid-2)*lcd_cellwid)/100)); - if(display) sock_send_string(sock, tmp); + sprintf (tmp, "widget_set B two 1 3 {"); + if (battflag == 0xff) { + sprintf (tmp + strlen (tmp), "Battery Stat Unknown"); + } else { + sprintf (tmp + strlen (tmp), "Batt:"); + if (battflag & 1) + sprintf (tmp + strlen (tmp), " High"); + if (battflag & 2) + sprintf (tmp + strlen (tmp), " Low"); + if (battflag & 4) + sprintf (tmp + strlen (tmp), " Critical"); + if (battflag & 8 || battstat == 3) + sprintf (tmp + strlen (tmp), " Charging"); + if (battflag & 128) + sprintf (tmp + strlen (tmp), " (NONE)"); } - } // end if(lcd_hgt >= 4) - else // two-line version of the screen + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); + + + if (percent > 0) { + sprintf (tmp, "widget_set B gauge 2 4 %i\n", (percent * ((lcd_wid - 2) * lcd_cellwid) / 100)); + if (display) + sock_send_string (sock, tmp); + } + } // end if(lcd_hgt >= 4) + else // two-line version of the screen { - sprintf(tmp, "widget_set B one 1 2 {"); - if(acstat == 1) - sprintf(tmp+strlen(tmp), "AC, "); - - if(battflag == 0xff) - { - sprintf(tmp+strlen(tmp), "No battery???"); + sprintf (tmp, "widget_set B one 1 2 {"); + if (acstat == 1) + sprintf (tmp + strlen (tmp), "AC, "); + + if (battflag == 0xff) { + sprintf (tmp + strlen (tmp), "No battery???"); + } else { + sprintf (tmp + strlen (tmp), "Batt:"); + if (battflag & 1) + sprintf (tmp + strlen (tmp), " High"); + if (battflag & 2) + sprintf (tmp + strlen (tmp), " Low"); + if (battflag & 4) + sprintf (tmp + strlen (tmp), " Critical"); + if (battflag & 8 || battstat == 3) + sprintf (tmp + strlen (tmp), " Charging"); + if (battflag & 128) + sprintf (tmp + strlen (tmp), " (NONE)"); } - else - { - sprintf(tmp+strlen(tmp), "Batt:"); - if(battflag & 1) sprintf(tmp+strlen(tmp), " High"); - if(battflag & 2) sprintf(tmp+strlen(tmp), " Low"); - if(battflag & 4) sprintf(tmp+strlen(tmp), " Critical"); - if(battflag & 8 - ||battstat == 3) sprintf(tmp+strlen(tmp), " Charging"); - if(battflag & 128) sprintf(tmp+strlen(tmp), " (NONE)"); - } - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); - + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); + } - - return 0; + + return 0; } - - diff --git a/clients/lcdproc/batt.h b/clients/lcdproc/batt.h index b079806..6d313c8 100644 --- a/clients/lcdproc/batt.h +++ b/clients/lcdproc/batt.h @@ -1,10 +1,10 @@ #ifndef BATT_H #define BATT_H -int batt_init(); -int batt_close(); +int batt_init (); +int batt_close (); -int battery_screen(int rep, int display); +int battery_screen (int rep, int display); #endif diff --git a/clients/lcdproc/chrono.c b/clients/lcdproc/chrono.c index b82d8c6..b49bb05 100644 --- a/clients/lcdproc/chrono.c +++ b/clients/lcdproc/chrono.c @@ -12,118 +12,120 @@ #include "mode.h" #include "chrono.h" -int TwentyFourHour=1; +int TwentyFourHour = 1; int uptime_fd = 0; static char kver[SYS_NMLN]; static char sysname[SYS_NMLN]; -static double get_uptime(double *up, double *idle); +static double get_uptime (double *up, double *idle); -static double get_uptime(double *up, double *idle) +static double +get_uptime (double *up, double *idle) { - double uptime; + double uptime; - reread(uptime_fd, "get_uptime:"); - sscanf(buffer, "%lf %lf", &uptime, idle); + reread (uptime_fd, "get_uptime:"); + sscanf (buffer, "%lf %lf", &uptime, idle); - *up = uptime; - - return uptime; + *up = uptime; + + return uptime; } // A couple of tables for later use... static char *days[] = { - "Sunday, ", - "Monday, ", - "Tuesday, ", - "Wednesday,", - "Thursday, ", - "Friday, ", - "Saturday, ", + "Sunday, ", + "Monday, ", + "Tuesday, ", + "Wednesday,", + "Thursday, ", + "Friday, ", + "Saturday, ", }; static char *shortdays[] = { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", }; static char *months[] = { - " January", - " February", - " March", - " April", - " May", - " June", - " July", - " August", - "September", - " October", - " November", - " December", + " January", + " February", + " March", + " April", + " May", + " June", + " July", + " August", + "September", + " October", + " November", + " December", }; static char *shortmonths[] = { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", }; -int chrono_init() +int +chrono_init () { struct utsname *unamebuf; - - if(!uptime_fd) - { - unamebuf = (struct utsname *) malloc( sizeof(struct utsname) ); - uptime_fd = open("/proc/uptime",O_RDONLY); - + + if (!uptime_fd) { + unamebuf = (struct utsname *) malloc (sizeof (struct utsname)); + uptime_fd = open ("/proc/uptime", O_RDONLY); + #if 0 - kversion_fd = open("/proc/sys/kernel/osrelease",O_RDONLY); - - reread(kversion_fd, "main:"); - sscanf(buffer, "%s", kver); - - close(kversion_fd); + kversion_fd = open ("/proc/sys/kernel/osrelease", O_RDONLY); + + reread (kversion_fd, "main:"); + sscanf (buffer, "%s", kver); + + close (kversion_fd); # endif - + /* Get OS name and version from uname() */ - if( uname( unamebuf ) != 0 ) { - perror( "Error calling uname:" ); + if (uname (unamebuf) != 0) { + perror ("Error calling uname:"); } - strcpy( kver, unamebuf->release ); - strcpy( sysname, unamebuf->sysname ); - - free(unamebuf); + strcpy (kver, unamebuf->release); + strcpy (sysname, unamebuf->sysname); + + free (unamebuf); + - } - + return 0; } -int chrono_close() +int +chrono_close () { - if(uptime_fd) - close(uptime_fd); + if (uptime_fd) + close (uptime_fd); uptime_fd = 0; @@ -143,7 +145,8 @@ int chrono_close() //+--------------------+ // -int time_screen(int rep, int display) +int +time_screen (int rep, int display) { char hr[8], min[8], sec[8], ampm[8]; char day[16], month[16]; @@ -156,157 +159,146 @@ int time_screen(int rep, int display) char colon; - - if(first) - { + + if (first) { first = 0; - sock_send_string(sock, "screen_add T\n"); - sprintf(buffer, "screen_set T -name {Time Screen: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add T title title\n"); - sock_send_string(sock, "widget_set T title {Time Screen}\n"); - sock_send_string(sock, "widget_add T one string\n"); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_add T two string\n"); - sock_send_string(sock, "widget_add T three string\n"); - } - else - { - sprintf(buffer, "widget_set T title {TIME: %s}\n", host); - sock_send_string(sock, buffer); + sock_send_string (sock, "screen_add T\n"); + sprintf (buffer, "screen_set T -name {Time Screen: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add T title title\n"); + sock_send_string (sock, "widget_set T title {Time Screen}\n"); + sock_send_string (sock, "widget_add T one string\n"); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add T two string\n"); + sock_send_string (sock, "widget_add T three string\n"); + } else { + sprintf (buffer, "widget_set T title {TIME: %s}\n", host); + sock_send_string (sock, buffer); } } - if(colons) + if (colons) colon = ':'; else colon = ' '; - time(&thetime); - rtime = localtime(&thetime); + time (&thetime); + rtime = localtime (&thetime); - if(TwentyFourHour) - { - sprintf(hr, "%02d", rtime->tm_hour); + if (TwentyFourHour) { + sprintf (hr, "%02d", rtime->tm_hour); + } else { + if (rtime->tm_hour > 12) { + i = 1; + sprintf (hr, "%02d", (rtime->tm_hour - 12)); + } else if (rtime->tm_hour == 0) { + i = 0; + sprintf (hr, "12"); + } else { + i = 0; + sprintf (hr, "%02d", rtime->tm_hour); + } } + if (rtime->tm_hour >= 12) + sprintf (ampm, "%s", "P"); else - { - if (rtime->tm_hour > 12) - { - i = 1; sprintf(hr, "%02d", (rtime->tm_hour - 12)); - } - else if(rtime->tm_hour == 0) - { - i = 0; sprintf(hr, "12"); - } - else - { - i = 0; sprintf(hr, "%02d", rtime->tm_hour); - } - } - if(rtime->tm_hour >= 12) sprintf(ampm, "%s", "P"); - else sprintf(ampm, "%s", "A"); - - sprintf(min, "%02d", rtime->tm_min); - sprintf(sec, "%02d", rtime->tm_sec); + sprintf (ampm, "%s", "A"); + + sprintf (min, "%02d", rtime->tm_min); + sprintf (sec, "%02d", rtime->tm_sec); + + + strcpy (day, shortdays[rtime->tm_wday]); + strcpy (month, shortmonths[rtime->tm_mon]); - strcpy(day, shortdays[rtime->tm_wday]); - strcpy(month, shortmonths[rtime->tm_mon]); - - ///////////////////// Write the title bar (os name and version) - if(lcd_hgt >= 4) - { - sprintf(tmp, "widget_set T title {"); - sprintf(tmp+strlen(tmp), "%s %s: %s}\n", - sysname, kver, host); - if(display) sock_send_string(sock, tmp); + if (lcd_hgt >= 4) { + sprintf (tmp, "widget_set T title {"); + sprintf (tmp + strlen (tmp), "%s %s: %s}\n", sysname, kver, host); + if (display) + sock_send_string (sock, tmp); } - /////////////////////// Display the time... - if(lcd_hgt >= 4) - { - get_uptime(&uptime, &idle); + if (lcd_hgt >= 4) { + get_uptime (&uptime, &idle); idle = (idle * 100) / uptime; - - if(TwentyFourHour) - sprintf(tmp, "%s%c%s%c%s %2i%% idle", - hr, colon, min, colon, sec, (int)idle); + + if (TwentyFourHour) + sprintf (tmp, "%s%c%s%c%s %2i%% idle", hr, colon, min, colon, sec, (int) idle); else - sprintf(tmp, "%s%c%s%c%s%s %2i%% idle", - hr, colon, min, colon, sec, ampm, (int)idle); + sprintf (tmp, "%s%c%s%c%s%s %2i%% idle", hr, colon, min, colon, sec, ampm, (int) idle); // Center the output line... - i = ((lcd_wid - strlen(tmp)) / 2) + 1; - sprintf(buffer, "widget_set T three %i 4 {%s}\n", i, tmp); - if(display) sock_send_string(sock, buffer); + i = ((lcd_wid - strlen (tmp)) / 2) + 1; + sprintf (buffer, "widget_set T three %i 4 {%s}\n", i, tmp); + if (display) + sock_send_string (sock, buffer); - sprintf(tmp, "%s %s %d, %d", day, month, - rtime->tm_mday, (rtime->tm_year + 1900)); - sprintf(buffer, "widget_set T two 3 3 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); + sprintf (tmp, "%s %s %d, %d", day, month, rtime->tm_mday, (rtime->tm_year + 1900)); + sprintf (buffer, "widget_set T two 3 3 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); /////////////////////// Display the uptime... - i = (int)uptime / 86400; - sprintf(day, "Up %d day%s,", i, (i != 1 ? "s" : "")); - i = ((int)uptime % 86400) / 60 / 60; - sprintf(hr, "%02i",i); - i = (((int)uptime % 86400) % 3600) / 60; - sprintf(min, "%02i",i); - i = ((int)uptime % 60); - sprintf(sec, "%02i",i); + i = (int) uptime / 86400; + sprintf (day, "Up %d day%s,", i, (i != 1 ? "s" : "")); + i = ((int) uptime % 86400) / 60 / 60; + sprintf (hr, "%02i", i); + i = (((int) uptime % 86400) % 3600) / 60; + sprintf (min, "%02i", i); + i = ((int) uptime % 60); + sprintf (sec, "%02i", i); if (colons) - sprintf(tmp, "%s %s:%s:%s", day, hr, min, sec); + sprintf (tmp, "%s %s:%s:%s", day, hr, min, sec); else - sprintf(tmp, "%s %s %s %s", day, hr, min, sec); + sprintf (tmp, "%s %s %s %s", day, hr, min, sec); //// Center this line automatically... //i = ((lcd_wid - strlen(tmp)) / 2) + 1; - sprintf(buffer, "widget_set T one 1 2 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); + sprintf (buffer, "widget_set T one 1 2 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); - - } - else // 20x2 version of the screen + + } else // 20x2 version of the screen { - sprintf(tmp, "widget_set T one 1 2 {"); - if(lcd_wid >= 20) - sprintf(tmp+strlen(tmp), "%d-%02d-%02d ", - rtime->tm_year+1900, rtime->tm_mon+1, rtime->tm_mday); - else // 16x2 version... - sprintf(tmp+strlen(tmp), "%02d/%02d ", - rtime->tm_mon+1, rtime->tm_mday); - sprintf(tmp+strlen(tmp), "%s%c%s%c%s", hr, colon, min, colon, sec); - if(! TwentyFourHour) - sprintf(tmp+strlen(tmp), "%s", ampm); - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); + sprintf (tmp, "widget_set T one 1 2 {"); + if (lcd_wid >= 20) + sprintf (tmp + strlen (tmp), "%d-%02d-%02d ", rtime->tm_year + 1900, rtime->tm_mon + 1, rtime->tm_mday); + else // 16x2 version... + sprintf (tmp + strlen (tmp), "%02d/%02d ", rtime->tm_mon + 1, rtime->tm_mday); + sprintf (tmp + strlen (tmp), "%s%c%s%c%s", hr, colon, min, colon, sec); + if (!TwentyFourHour) + sprintf (tmp + strlen (tmp), "%s", ampm); + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); } - + colons = colons ^ 1; - + return 0; -} // End time_screen() +} // End time_screen() ////////////////////////////////////////////////////////////////////// // Clock Screen displays current time and date... // -int clock_screen(int rep, int display) +int +clock_screen (int rep, int display) { char hr[8], min[8], sec[8], ampm[8]; char day[16], month[16]; @@ -314,114 +306,108 @@ int clock_screen(int rep, int display) static int colons = 0; time_t thetime; struct tm *rtime; - int i=0; + int i = 0; char colon; - if(lcd_hgt < 4) return 0; - - if(first) - { + if (lcd_hgt < 4) + return 0; + + if (first) { first = 0; - - sock_send_string(sock, "screen_add O\n"); - sprintf(buffer, "screen_set O -name {Clock Screen: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add O title title\n"); - sock_send_string(sock, "widget_add O one string\n"); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_set O title {DATE & TIME}\n"); - sock_send_string(sock, "widget_add O two string\n"); - sock_send_string(sock, "widget_add O three string\n"); - sprintf(buffer, "widget_set O one 3 2 {%s}\n", host); - sock_send_string(sock, buffer); - } - else - { - sprintf(buffer, "widget_set O title {TIME: %s}\n", host); - sock_send_string(sock, buffer); + + sock_send_string (sock, "screen_add O\n"); + sprintf (buffer, "screen_set O -name {Clock Screen: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add O title title\n"); + sock_send_string (sock, "widget_add O one string\n"); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_set O title {DATE & TIME}\n"); + sock_send_string (sock, "widget_add O two string\n"); + sock_send_string (sock, "widget_add O three string\n"); + sprintf (buffer, "widget_set O one 3 2 {%s}\n", host); + sock_send_string (sock, buffer); + } else { + sprintf (buffer, "widget_set O title {TIME: %s}\n", host); + sock_send_string (sock, buffer); } } - - if(colons) + + if (colons) colon = ':'; else colon = ' '; - - time(&thetime); - rtime = localtime(&thetime); - strcpy(day, days[rtime->tm_wday]); + time (&thetime); + rtime = localtime (&thetime); - if(TwentyFourHour) - { - sprintf(hr, "%02d", rtime->tm_hour); + strcpy (day, days[rtime->tm_wday]); + + if (TwentyFourHour) { + sprintf (hr, "%02d", rtime->tm_hour); + } else { + if (rtime->tm_hour > 12) { + i = 1; + sprintf (hr, "%02d", (rtime->tm_hour - 12)); + } else { + i = 0; + sprintf (hr, "%02d", rtime->tm_hour); + } } - else - { - if (rtime->tm_hour > 12) - { - i = 1; sprintf(hr, "%02d", (rtime->tm_hour - 12)); - } - else - { - i = 0; sprintf(hr, "%02d", rtime->tm_hour); - } + if (rtime->tm_hour == 12) + i = 1; + sprintf (min, "%02d", rtime->tm_min); + sprintf (sec, "%02d", rtime->tm_sec); + if (i == 1) { + sprintf (ampm, "%s", "P"); + } else { + sprintf (ampm, "%s", "A"); } - if(rtime->tm_hour == 12) i=1; - sprintf(min, "%02d", rtime->tm_min); - sprintf(sec, "%02d", rtime->tm_sec); - if (i == 1) { sprintf(ampm, "%s", "P"); } - else { sprintf(ampm, "%s", "A"); } - strcpy(month, months[rtime->tm_mon]); + strcpy (month, months[rtime->tm_mon]); - if(lcd_hgt >= 4) // 4-line version of the screen + if (lcd_hgt >= 4) // 4-line version of the screen { - sprintf(tmp, "widget_set O two 1 3 {"); - if(TwentyFourHour) - sprintf(tmp+strlen(tmp), "%s%c%s%c%s %s", - hr, colon, min, colon, sec, day); + sprintf (tmp, "widget_set O two 1 3 {"); + if (TwentyFourHour) + sprintf (tmp + strlen (tmp), "%s%c%s%c%s %s", hr, colon, min, colon, sec, day); else - sprintf(tmp+strlen(tmp), "%s%c%s%c%s%s %s", - hr, colon, min, colon, sec, ampm, day); - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); - - - sprintf(tmp, "widget_set O three 2 4 {"); - sprintf(tmp+strlen(tmp), - "%s %d, %d", - month, - rtime->tm_mday, - (rtime->tm_year + 1900)); - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); - } // end if(lcd_hgt >= 4) - else // 20x2 version of the screen + sprintf (tmp + strlen (tmp), "%s%c%s%c%s%s %s", hr, colon, min, colon, sec, ampm, day); + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); + + + sprintf (tmp, "widget_set O three 2 4 {"); + sprintf (tmp + strlen (tmp), "%s %d, %d", month, rtime->tm_mday, (rtime->tm_year + 1900)); + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); + } // end if(lcd_hgt >= 4) + else // 20x2 version of the screen { - sprintf(tmp, "widget_set O one 1 2 {"); - sprintf(tmp+strlen(tmp), "%d-%02d-%02d ", - rtime->tm_year+1900, rtime->tm_mon+1, rtime->tm_mday); - sprintf(tmp+strlen(tmp), "%s%c%s%c%s", hr, colon, min, colon, sec); - if(! TwentyFourHour) - sprintf(tmp+strlen(tmp), "%s", ampm); - sprintf(tmp+strlen(tmp), "}\n"); - if(display) sock_send_string(sock, tmp); + sprintf (tmp, "widget_set O one 1 2 {"); + sprintf (tmp + strlen (tmp), "%d-%02d-%02d ", rtime->tm_year + 1900, rtime->tm_mon + 1, rtime->tm_mday); + sprintf (tmp + strlen (tmp), "%s%c%s%c%s", hr, colon, min, colon, sec); + if (!TwentyFourHour) + sprintf (tmp + strlen (tmp), "%s", ampm); + sprintf (tmp + strlen (tmp), "}\n"); + if (display) + sock_send_string (sock, tmp); } - + colons = colons ^ 1; - + return 0; -} // End clock_screen() +} // End clock_screen() //////////////////////////////////////////////////////////////////// // Uptime Screen shows info about system uptime and OS version // -int uptime_screen(int rep, int display) +int +uptime_screen (int rep, int display) { int i; char date[16], hour[8], min[8], sec[8]; @@ -430,62 +416,58 @@ int uptime_screen(int rep, int display) static int colons = 0; char colon; - if(first) - { + if (first) { first = 0; - sock_send_string(sock, "screen_add U\n"); - sprintf(buffer, "screen_set U -name {Uptime Screen: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add U title title\n"); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_set U title {SYSTEM UPTIME}\n"); - sock_send_string(sock, "widget_add U one string\n"); - sock_send_string(sock, "widget_add U two string\n"); - sock_send_string(sock, "widget_add U three string\n"); + sock_send_string (sock, "screen_add U\n"); + sprintf (buffer, "screen_set U -name {Uptime Screen: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add U title title\n"); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_set U title {SYSTEM UPTIME}\n"); + sock_send_string (sock, "widget_add U one string\n"); + sock_send_string (sock, "widget_add U two string\n"); + sock_send_string (sock, "widget_add U three string\n"); - sprintf(buffer, "widget_set U one 3 2 {%s}\n", host); - sock_send_string(sock, buffer); - sprintf(tmp, "widget_set U three 5 4 {%s %s}\n", sysname, kver); - sock_send_string(sock, tmp); - } - else - { - sprintf(tmp, "widget_set U title {%s %s: %s}\n", - sysname, kver, host); - sock_send_string(sock, tmp); - sock_send_string(sock, "widget_add U one string\n"); + sprintf (buffer, "widget_set U one 3 2 {%s}\n", host); + sock_send_string (sock, buffer); + sprintf (tmp, "widget_set U three 5 4 {%s %s}\n", sysname, kver); + sock_send_string (sock, tmp); + } else { + sprintf (tmp, "widget_set U title {%s %s: %s}\n", sysname, kver, host); + sock_send_string (sock, tmp); + sock_send_string (sock, "widget_add U one string\n"); } } - if(colons) + if (colons) colon = ':'; else colon = ' '; - - get_uptime(&uptime, &idle); - i = (int)uptime / 86400; - sprintf(date, "%d day%s,", i, (i != 1 ? "s" : "")); - i = ((int)uptime % 86400) / 60 / 60; - sprintf(hour, "%02i",i); - i = (((int)uptime % 86400) % 3600) / 60; - sprintf(min, "%02i",i); - i = ((int)uptime % 60); - sprintf(sec, "%02i",i); - sprintf(tmp, "%s %s%c%s%c%s", date, hour, colon, min, colon, sec); - i = ((20 - strlen(tmp)) / 2) + 1; - if(lcd_hgt >= 4) - sprintf(buffer, "widget_set U two %i 3 {%s}\n", i, tmp); + get_uptime (&uptime, &idle); + i = (int) uptime / 86400; + sprintf (date, "%d day%s,", i, (i != 1 ? "s" : "")); + i = ((int) uptime % 86400) / 60 / 60; + sprintf (hour, "%02i", i); + i = (((int) uptime % 86400) % 3600) / 60; + sprintf (min, "%02i", i); + i = ((int) uptime % 60); + sprintf (sec, "%02i", i); + sprintf (tmp, "%s %s%c%s%c%s", date, hour, colon, min, colon, sec); + i = ((20 - strlen (tmp)) / 2) + 1; + + if (lcd_hgt >= 4) + sprintf (buffer, "widget_set U two %i 3 {%s}\n", i, tmp); else - sprintf(buffer, "widget_set U one %i 2 {%s}\n", i, tmp); - if(display) sock_send_string(sock, buffer); + sprintf (buffer, "widget_set U one %i 2 {%s}\n", i, tmp); + if (display) + sock_send_string (sock, buffer); colons = colons ^ 1; - + return 0; -} // End uptime_screen() +} // End uptime_screen() ////////////////////////////////////////////////////////////////////// @@ -500,67 +482,64 @@ int uptime_screen(int rep, int display) //|111555 444222 111333| //+--------------------+ // -int big_clock_screen(int rep, int display) +int +big_clock_screen (int rep, int display) { static int first = 1; static int colons = 0; time_t thetime; struct tm *rtime; - int pos[]={1,4,8,11,15,18}; - // int i=0; + int pos[] = { 1, 4, 8, 11, 15, 18 }; + // int i=0; char fulltxt[16], old_fulltxt[16]; - int j=0; + int j = 0; - if(lcd_hgt < 4) return 0; - - if(first) - { + if (lcd_hgt < 4) + return 0; + + if (first) { first = 0; - sock_send_string(sock, "screen_add K\n"); - sock_send_string(sock, "screen_set K -name {Big Clock Screen}\n"); - sock_send_string(sock, "widget_del K heartbeat\n"); - sock_send_string(sock, "widget_add K d0 num\n"); - sock_send_string(sock, "widget_add K d1 num\n"); - sock_send_string(sock, "widget_add K d2 num\n"); - sock_send_string(sock, "widget_add K d3 num\n"); - sock_send_string(sock, "widget_add K d4 num\n"); - sock_send_string(sock, "widget_add K d5 num\n"); + sock_send_string (sock, "screen_add K\n"); + sock_send_string (sock, "screen_set K -name {Big Clock Screen}\n"); + sock_send_string (sock, "widget_del K heartbeat\n"); + sock_send_string (sock, "widget_add K d0 num\n"); + sock_send_string (sock, "widget_add K d1 num\n"); + sock_send_string (sock, "widget_add K d2 num\n"); + sock_send_string (sock, "widget_add K d3 num\n"); + sock_send_string (sock, "widget_add K d4 num\n"); + sock_send_string (sock, "widget_add K d5 num\n"); // sock_send_string(sock, "widget_add K one string\n"); - sock_send_string(sock, "widget_set K d0 1 0\n"); - sock_send_string(sock, "widget_set K d1 4 0\n"); - sock_send_string(sock, "widget_set K d2 8 0\n"); - sock_send_string(sock, "widget_set K d3 11 0\n"); - sock_send_string(sock, "widget_set K d4 15 0\n"); - sock_send_string(sock, "widget_set K d5 18 0\n"); - old_fulltxt[0]='0'; - old_fulltxt[1]='0'; - old_fulltxt[2]='0'; - old_fulltxt[3]='0'; - old_fulltxt[4]='0'; - old_fulltxt[5]='0'; - old_fulltxt[6]=0; + sock_send_string (sock, "widget_set K d0 1 0\n"); + sock_send_string (sock, "widget_set K d1 4 0\n"); + sock_send_string (sock, "widget_set K d2 8 0\n"); + sock_send_string (sock, "widget_set K d3 11 0\n"); + sock_send_string (sock, "widget_set K d4 15 0\n"); + sock_send_string (sock, "widget_set K d5 18 0\n"); + old_fulltxt[0] = '0'; + old_fulltxt[1] = '0'; + old_fulltxt[2] = '0'; + old_fulltxt[3] = '0'; + old_fulltxt[4] = '0'; + old_fulltxt[5] = '0'; + old_fulltxt[6] = 0; // sock_send_string(sock, "widget_set K one 1 4 {000000}\n"); } - time(&thetime); - rtime = localtime(&thetime); + time (&thetime); + rtime = localtime (&thetime); - sprintf(fulltxt, "%02d%02d%02d", - rtime->tm_hour, rtime->tm_min, rtime->tm_sec); - for(j=0;j<6;j++){ - if (fulltxt[j]!=old_fulltxt[j]){ - sprintf(tmp+strlen(tmp), "widget_set K d%d %d %c\n", - j, pos[j], fulltxt[j]); - old_fulltxt[j]=fulltxt[j]; + sprintf (fulltxt, "%02d%02d%02d", rtime->tm_hour, rtime->tm_min, rtime->tm_sec); + for (j = 0; j < 6; j++) { + if (fulltxt[j] != old_fulltxt[j]) { + sprintf (tmp + strlen (tmp), "widget_set K d%d %d %c\n", j, pos[j], fulltxt[j]); + old_fulltxt[j] = fulltxt[j]; } } - if(display) - sock_send_string(sock, tmp); + if (display) + sock_send_string (sock, tmp); return 0; -} // End big_clock_screen() - - +} // End big_clock_screen() diff --git a/clients/lcdproc/chrono.h b/clients/lcdproc/chrono.h index 9c83c27..64de994 100644 --- a/clients/lcdproc/chrono.h +++ b/clients/lcdproc/chrono.h @@ -1,12 +1,12 @@ #ifndef CHRONO_H #define CHRONO_H -int chrono_init(); -int chrono_close(); +int chrono_init (); +int chrono_close (); -int clock_screen(int rep, int display); -int uptime_screen(int rep, int display); -int time_screen(int rep, int display); -int big_clock_screen(int rep, int display); +int clock_screen (int rep, int display); +int uptime_screen (int rep, int display); +int time_screen (int rep, int display); +int big_clock_screen (int rep, int display); #endif diff --git a/clients/lcdproc/cpu.c b/clients/lcdproc/cpu.c index a5cf194..1e172ef 100644 --- a/clients/lcdproc/cpu.c +++ b/clients/lcdproc/cpu.c @@ -11,57 +11,55 @@ #include "mode.h" #include "cpu.h" -struct load { unsigned long total, user, system, nice, idle; }; +struct load { + unsigned long total, user, system, nice, idle; +}; int load_fd = 0; -static void get_load(struct load * result); +static void get_load (struct load *result); -static void get_load(struct load * result) +static void +get_load (struct load *result) { - static struct load last_load = { 0, 0, 0, 0, 0 }; struct load curr_load; + static struct load last_load = { 0, 0, 0, 0, 0 }; + struct load curr_load; - reread(load_fd, "get_load:"); - sscanf(buffer, "%*s %lu %lu %lu %lu\n", - &curr_load.user, - &curr_load.nice, - &curr_load.system, - &curr_load.idle); - curr_load.total = curr_load.user - + curr_load.nice - + curr_load.system - + curr_load.idle; - result->total = curr_load.total - last_load.total; - result->user = curr_load.user - last_load.user; - result->nice = curr_load.nice - last_load.nice; - result->system = curr_load.system - last_load.system; - result->idle = curr_load.idle - last_load.idle; - last_load.total = curr_load.total; - last_load.user = curr_load.user; - last_load.nice = curr_load.nice; - last_load.system = curr_load.system; - last_load.idle = curr_load.idle; + reread (load_fd, "get_load:"); + sscanf (buffer, "%*s %lu %lu %lu %lu\n", &curr_load.user, &curr_load.nice, &curr_load.system, &curr_load.idle); + curr_load.total = curr_load.user + curr_load.nice + curr_load.system + curr_load.idle; + result->total = curr_load.total - last_load.total; + result->user = curr_load.user - last_load.user; + result->nice = curr_load.nice - last_load.nice; + result->system = curr_load.system - last_load.system; + result->idle = curr_load.idle - last_load.idle; + last_load.total = curr_load.total; + last_load.user = curr_load.user; + last_load.nice = curr_load.nice; + last_load.system = curr_load.system; + last_load.idle = curr_load.idle; } -int cpu_init() +int +cpu_init () { - if(!load_fd) - { - load_fd = open("/proc/stat",O_RDONLY); + if (!load_fd) { + load_fd = open ("/proc/stat", O_RDONLY); } return 0; } -int cpu_close() +int +cpu_close () { - if(load_fd) - close(load_fd); + if (load_fd) + close (load_fd); load_fd = 0; - + return 0; } @@ -69,105 +67,92 @@ int cpu_close() ////////////////////////////////////////////////////////////////////////// // CPU screen shows info about percentage of the CPU being used // -int cpu_screen(int rep, int display) +int +cpu_screen (int rep, int display) { #undef CPU_BUF_SIZE #define CPU_BUF_SIZE 4 int i, j, n; static int first = 1; float value; - static float cpu[CPU_BUF_SIZE + 1][5];// last buffer is scratch + static float cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch struct load load; - if(first) - { + if (first) { first = 0; - sock_send_string(sock, "screen_add C\n"); - sprintf(buffer, "screen_set C -name {CPU Use: %s}\n", host); - sock_send_string(sock, buffer); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_add C title title\n"); - sock_send_string(sock, "widget_set C title {CPU LOAD}\n"); - sock_send_string(sock, "widget_add C one string\n"); - sock_send_string(sock, - "widget_set C one 1 2 {0 1 Sys 0.0%}\n"); - sock_send_string(sock, "widget_add C two string\n"); - sock_send_string(sock, "widget_add C three string\n"); - sock_send_string(sock, - "widget_set C one 1 2 {Usr 0.0% Nice 0.0%}\n"); - sock_send_string(sock, - "widget_set C two 1 3 {Sys 0.0% Idle 0.0%}\n"); - sock_send_string(sock, - "widget_set C three 1 4 {0% 100%}\n"); - sock_send_string(sock, "widget_add C usr string\n"); - sock_send_string(sock, "widget_add C nice string\n"); - sock_send_string(sock, "widget_add C idle string\n"); - sock_send_string(sock, "widget_add C sys string\n"); - sock_send_string(sock, "widget_add C bar hbar\n"); - sock_send_string(sock, "widget_set C bar 3 4 0\n"); - } - else - { - sock_send_string(sock, "widget_add C cpu0 string\n"); - if(lcd_wid >= 20) - sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); + sock_send_string (sock, "screen_add C\n"); + sprintf (buffer, "screen_set C -name {CPU Use: %s}\n", host); + sock_send_string (sock, buffer); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add C title title\n"); + sock_send_string (sock, "widget_set C title {CPU LOAD}\n"); + sock_send_string (sock, "widget_add C one string\n"); + sock_send_string (sock, "widget_set C one 1 2 {0 1 Sys 0.0%}\n"); + sock_send_string (sock, "widget_add C two string\n"); + sock_send_string (sock, "widget_add C three string\n"); + sock_send_string (sock, "widget_set C one 1 2 {Usr 0.0% Nice 0.0%}\n"); + sock_send_string (sock, "widget_set C two 1 3 {Sys 0.0% Idle 0.0%}\n"); + sock_send_string (sock, "widget_set C three 1 4 {0% 100%}\n"); + sock_send_string (sock, "widget_add C usr string\n"); + sock_send_string (sock, "widget_add C nice string\n"); + sock_send_string (sock, "widget_add C idle string\n"); + sock_send_string (sock, "widget_add C sys string\n"); + sock_send_string (sock, "widget_add C bar hbar\n"); + sock_send_string (sock, "widget_set C bar 3 4 0\n"); + } else { + sock_send_string (sock, "widget_add C cpu0 string\n"); + if (lcd_wid >= 20) + sock_send_string (sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); else - sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); - sock_send_string(sock, "widget_add C cpu0% string\n"); - sprintf(buffer, "widget_set C cpu0%% 1 %i { 0.0%%}\n", lcd_wid-4); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add C usni string\n"); - sock_send_string(sock, - "widget_set C usni 1 2 { U S N I}\n"); - sock_send_string(sock, "widget_add C usr hbar\n"); - sock_send_string(sock, "widget_add C sys hbar\n"); - sock_send_string(sock, "widget_add C nice hbar\n"); - sock_send_string(sock, "widget_add C idle hbar\n"); - sock_send_string(sock, "widget_add C total hbar\n"); - sock_send_string(sock, "widget_set C total 6 1 0\n"); + sock_send_string (sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); + sock_send_string (sock, "widget_add C cpu0% string\n"); + sprintf (buffer, "widget_set C cpu0%% 1 %i { 0.0%%}\n", lcd_wid - 4); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add C usni string\n"); + sock_send_string (sock, "widget_set C usni 1 2 { U S N I}\n"); + sock_send_string (sock, "widget_add C usr hbar\n"); + sock_send_string (sock, "widget_add C sys hbar\n"); + sock_send_string (sock, "widget_add C nice hbar\n"); + sock_send_string (sock, "widget_add C idle hbar\n"); + sock_send_string (sock, "widget_add C total hbar\n"); + sock_send_string (sock, "widget_set C total 6 1 0\n"); } return 0; } //else return 0; - - get_load(&load); + + get_load (&load); // Shift values over by one - for(i=0; i<(CPU_BUF_SIZE-1); i++) - for(j=0; j<5; j++) - cpu[i][j] = cpu[i+1][j]; - + for (i = 0; i < (CPU_BUF_SIZE - 1); i++) + for (j = 0; j < 5; j++) + cpu[i][j] = cpu[i + 1][j]; + // Read new data - cpu[CPU_BUF_SIZE-1][0] = ((float)load.user / (float)load.total) * 100.0; - cpu[CPU_BUF_SIZE-1][1] = ((float)load.system / (float)load.total) * 100.0; - cpu[CPU_BUF_SIZE-1][2] = ((float)load.nice / (float)load.total) * 100.0; - cpu[CPU_BUF_SIZE-1][3] = ((float)load.idle / (float)load.total) * 100.0; - cpu[CPU_BUF_SIZE-1][4] = (((float)load.user + (float)load.system + - (float)load.nice) / (float)load.total) * 100.0; + cpu[CPU_BUF_SIZE - 1][0] = ((float) load.user / (float) load.total) * 100.0; + cpu[CPU_BUF_SIZE - 1][1] = ((float) load.system / (float) load.total) * 100.0; + cpu[CPU_BUF_SIZE - 1][2] = ((float) load.nice / (float) load.total) * 100.0; + cpu[CPU_BUF_SIZE - 1][3] = ((float) load.idle / (float) load.total) * 100.0; + cpu[CPU_BUF_SIZE - 1][4] = (((float) load.user + (float) load.system + (float) load.nice) / (float) load.total) * 100.0; // Only clear on first display... - if(!rep) - { + if (!rep) { /* - // Make all the same, if this is the first time... - for(i=0; i= 4) - { + if (lcd_hgt >= 4) { value = cpu[CPU_BUF_SIZE][4]; - n = (int)(value * 70.0); - if (value >= 99.9) { sprintf(tmp, "100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C title {CPU %s: %s}\n", tmp, host); - if(display) sock_send_string(sock, buffer); - - value = cpu[CPU_BUF_SIZE][0]; - if (value >= 99.9) { sprintf(tmp, " 100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C usr 5 2 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); - - value = cpu[CPU_BUF_SIZE][1]; - if (value >= 99.9) { sprintf(tmp, " 100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C sys 5 3 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); - - value = cpu[CPU_BUF_SIZE][2]; - if (value >= 99.9) { sprintf(tmp, " 100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C nice 16 2 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); - - value = cpu[CPU_BUF_SIZE][3]; - if (value >= 99.9) { sprintf(tmp, " 100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C idle 16 3 {%s}\n", tmp); - if(display) sock_send_string(sock, buffer); - - value = cpu[CPU_BUF_SIZE][4]; - n = (int)(value * (lcd_cellwid * 14) / 100.0); - sprintf(buffer, "widget_set C bar 3 4 %i\n", n); - if(display) sock_send_string(sock, buffer); - } // end if(lcd_hgt >= 4) - else // 20x2 version - { - value = cpu[CPU_BUF_SIZE][4]; - if (value >= 99.9) { sprintf(tmp, "100%%"); } - else { sprintf(tmp, "%4.1f%%", value); } - sprintf(buffer, "widget_set C cpu0%% %i 1 {%s}\n", lcd_wid-4, tmp); - if(display) sock_send_string(sock, buffer); + n = (int) (value * 70.0); + if (value >= 99.9) { + sprintf (tmp, "100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C title {CPU %s: %s}\n", tmp, host); + if (display) + sock_send_string (sock, buffer); - n = (float)(value * lcd_cellwid * (float)(lcd_wid-11)) / 100.0; - sprintf(buffer, "widget_set C total 6 1 %i\n", n); - if(display) sock_send_string(sock, buffer); - value = cpu[CPU_BUF_SIZE][0]; - n = (float)(value * lcd_cellwid * 4.0) / 100.0; - sprintf(buffer, "widget_set C usr 1 2 %i\n", n); - if(display) sock_send_string(sock, buffer); - + if (value >= 99.9) { + sprintf (tmp, " 100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C usr 5 2 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); + value = cpu[CPU_BUF_SIZE][1]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C sys 7 2 %i\n", n); - if(display) sock_send_string(sock, buffer); - + if (value >= 99.9) { + sprintf (tmp, " 100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C sys 5 3 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); + value = cpu[CPU_BUF_SIZE][2]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C nice 12 2 %i\n", n); - if(display) sock_send_string(sock, buffer); - + if (value >= 99.9) { + sprintf (tmp, " 100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C nice 16 2 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); + value = cpu[CPU_BUF_SIZE][3]; - n = (float)(value * lcd_cellwid * 3.0) / 100.0; - sprintf(buffer, "widget_set C idle 17 2 %i\n", n); - if(display) sock_send_string(sock, buffer); - + if (value >= 99.9) { + sprintf (tmp, " 100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C idle 16 3 {%s}\n", tmp); + if (display) + sock_send_string (sock, buffer); + + value = cpu[CPU_BUF_SIZE][4]; + n = (int) (value * (lcd_cellwid * 14) / 100.0); + sprintf (buffer, "widget_set C bar 3 4 %i\n", n); + if (display) + sock_send_string (sock, buffer); + } // end if(lcd_hgt >= 4) + else // 20x2 version + { + value = cpu[CPU_BUF_SIZE][4]; + if (value >= 99.9) { + sprintf (tmp, "100%%"); + } else { + sprintf (tmp, "%4.1f%%", value); + } + sprintf (buffer, "widget_set C cpu0%% %i 1 {%s}\n", lcd_wid - 4, tmp); + if (display) + sock_send_string (sock, buffer); + + n = (float) (value * lcd_cellwid * (float) (lcd_wid - 11)) / 100.0; + sprintf (buffer, "widget_set C total 6 1 %i\n", n); + if (display) + sock_send_string (sock, buffer); + + value = cpu[CPU_BUF_SIZE][0]; + n = (float) (value * lcd_cellwid * 4.0) / 100.0; + sprintf (buffer, "widget_set C usr 1 2 %i\n", n); + if (display) + sock_send_string (sock, buffer); + + value = cpu[CPU_BUF_SIZE][1]; + n = (float) (value * lcd_cellwid * 3.0) / 100.0; + sprintf (buffer, "widget_set C sys 7 2 %i\n", n); + if (display) + sock_send_string (sock, buffer); + + value = cpu[CPU_BUF_SIZE][2]; + n = (float) (value * lcd_cellwid * 3.0) / 100.0; + sprintf (buffer, "widget_set C nice 12 2 %i\n", n); + if (display) + sock_send_string (sock, buffer); + + value = cpu[CPU_BUF_SIZE][3]; + n = (float) (value * lcd_cellwid * 3.0) / 100.0; + sprintf (buffer, "widget_set C idle 17 2 %i\n", n); + if (display) + sock_send_string (sock, buffer); + } return 0; -} // End cpu_screen() +} // End cpu_screen() ////////////////////////////////////////////////////////////////////////// // Cpu Graph Screen shows a quick-moving histogram of CPU use. // -int cpu_graph_screen(int rep, int display) +int +cpu_graph_screen (int rep, int display) { - int i, j, n=0; - static int first=1; + int i, j, n = 0; + static int first = 1; float value, maxload; #undef CPU_BUF_SIZE #define CPU_BUF_SIZE 2 - static float cpu[CPU_BUF_SIZE + 1];// last buffer is scratch + static float cpu[CPU_BUF_SIZE + 1]; // last buffer is scratch static int cpu_past[LCD_MAX_WIDTH]; struct load load; - int status=0; - + int status = 0; - if(first) - { + + if (first) { first = 0; - sock_send_string(sock, "screen_add G\n"); - sprintf(buffer, "screen_set G -name {CPU Graph: %s}\n", host); - sock_send_string(sock, buffer); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_add G title title\n"); - sprintf(buffer, "widget_set G title {CPU: %s}\n", host); + sock_send_string (sock, "screen_add G\n"); + sprintf (buffer, "screen_set G -name {CPU Graph: %s}\n", host); + sock_send_string (sock, buffer); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add G title title\n"); + sprintf (buffer, "widget_set G title {CPU: %s}\n", host); + } else { + sock_send_string (sock, "widget_add G title string\n"); + sprintf (buffer, "widget_set G title 1 1 {CPU: %s}\n", host); } - else - { - sock_send_string(sock, "widget_add G title string\n"); - sprintf(buffer, "widget_set G title 1 1 {CPU: %s}\n", host); - } - sock_send_string(sock, buffer); + sock_send_string (sock, buffer); - for(i=1; i<=lcd_wid; i++) - { - sprintf(tmp, "widget_add G %i vbar\n", i); - sock_send_string(sock, tmp); - sprintf(tmp, "widget_set G %i %i %i 0\n", i, i, lcd_hgt); - sock_send_string(sock, tmp); + for (i = 1; i <= lcd_wid; i++) { + sprintf (tmp, "widget_add G %i vbar\n", i); + sock_send_string (sock, tmp); + sprintf (tmp, "widget_set G %i %i %i 0\n", i, i, lcd_hgt); + sock_send_string (sock, tmp); } } - - get_load(&load); + + get_load (&load); // Shift values over by one - for(i=0; i<(CPU_BUF_SIZE-1); i++) - cpu[i] = cpu[i+1]; - + for (i = 0; i < (CPU_BUF_SIZE - 1); i++) + cpu[i] = cpu[i + 1]; + // Read new data - cpu[CPU_BUF_SIZE-1] = ((float)load.user + (float)load.system - + (float)load.nice) / (float)load.total; + cpu[CPU_BUF_SIZE - 1] = ((float) load.user + (float) load.system + (float) load.nice) / (float) load.total; // Only clear on first display... - if(!rep) - { + if (!rep) { /* - // Make all the same, if this is the first time... - for(i=0; i maxload) maxload = cpu_past[i]; + if (cpu_past[i] > maxload) + maxload = cpu_past[i]; } value = cpu[CPU_BUF_SIZE]; - if(lcd_hgt > 2) - n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt-1)); + if (lcd_hgt > 2) + n = (int) (value * (float) (lcd_cellhgt) * (float) (lcd_hgt - 1)); else - n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt)); + n = (int) (value * (float) (lcd_cellhgt) * (float) (lcd_hgt)); - cpu_past[lcd_wid-1] = n; - sprintf(tmp, "widget_set G %i %i %i %i\n", - lcd_wid, lcd_wid, lcd_hgt, n); - if(display) sock_send_string(sock, tmp); + cpu_past[lcd_wid - 1] = n; + sprintf (tmp, "widget_set G %i %i %i %i\n", lcd_wid, lcd_wid, lcd_hgt, n); + if (display) + sock_send_string (sock, tmp); - if(n > maxload) maxload = n; - - if(cpu_past[lcd_wid-1] > 0 ) status = BACKLIGHT_ON; - if(maxload < 1) status = BACKLIGHT_OFF; + if (n > maxload) + maxload = n; + + if (cpu_past[lcd_wid - 1] > 0) + status = BACKLIGHT_ON; + if (maxload < 1) + status = BACKLIGHT_OFF; // return status; return 0; -} // End cpu_graph_screen() - - +} // End cpu_graph_screen() diff --git a/clients/lcdproc/cpu.h b/clients/lcdproc/cpu.h index a0b3681..459cc6e 100644 --- a/clients/lcdproc/cpu.h +++ b/clients/lcdproc/cpu.h @@ -2,11 +2,11 @@ #define CPU_H -int cpu_init(); -int cpu_close(); +int cpu_init (); +int cpu_close (); -int cpu_screen(int rep, int display); -int cpu_graph_screen(int rep, int display); +int cpu_screen (int rep, int display); +int cpu_graph_screen (int rep, int display); #endif diff --git a/clients/lcdproc/cpu_smp.c b/clients/lcdproc/cpu_smp.c index fd89664..f8a60a6 100644 --- a/clients/lcdproc/cpu_smp.c +++ b/clients/lcdproc/cpu_smp.c @@ -58,79 +58,74 @@ #define MAX_CPUS 8 -struct load { unsigned long total, user, system, nice, idle; }; +struct load { + unsigned long total, user, system, nice, idle; +}; static int load_fd = 0; -static char *numnames[MAX_CPUS] = {"one", "two", "three", "four", "five", "six", "seven", "eight"}; +static char *numnames[MAX_CPUS] = { "one", "two", "three", "four", "five", "six", "seven", "eight" }; static void -get_load(struct load *result, int *numcpus) +get_load (struct load *result, int *numcpus) { - char *token; - static struct load last_load[MAX_CPUS]; - struct load curr_load[MAX_CPUS]; + char *token; + static struct load last_load[MAX_CPUS]; + struct load curr_load[MAX_CPUS]; - *numcpus = 0; + *numcpus = 0; - reread (load_fd, "get_load"); + reread (load_fd, "get_load"); - // Look for lines starting with "cpu0", "cpu1", etc. + // Look for lines starting with "cpu0", "cpu1", etc. - token = strtok (buffer, "\n"); - while (token) { - if (token[0] == 'c') { - if (isdigit (token[3])) { - sscanf(token, "%*s %lu %lu %lu %lu", - &curr_load[*numcpus].user, - &curr_load[*numcpus].nice, - &curr_load[*numcpus].system, - &curr_load[*numcpus].idle); - - curr_load[*numcpus].total = curr_load[*numcpus].user - + curr_load[*numcpus].nice - + curr_load[*numcpus].system - + curr_load[*numcpus].idle; - result[*numcpus].total = curr_load[*numcpus].total - last_load[*numcpus].total; - result[*numcpus].user = curr_load[*numcpus].user - last_load[*numcpus].user; - result[*numcpus].nice = curr_load[*numcpus].nice - last_load[*numcpus].nice; - result[*numcpus].system = curr_load[*numcpus].system - last_load[*numcpus].system; - result[*numcpus].idle = curr_load[*numcpus].idle - last_load[*numcpus].idle; - last_load[*numcpus].total = curr_load[*numcpus].total; - last_load[*numcpus].user = curr_load[*numcpus].user; - last_load[*numcpus].nice = curr_load[*numcpus].nice; - last_load[*numcpus].system = curr_load[*numcpus].system; - last_load[*numcpus].idle = curr_load[*numcpus].idle; - - (*numcpus)++; - } - } else { - break; - } - token = strtok (NULL, "\n"); - } + token = strtok (buffer, "\n"); + while (token) { + if (token[0] == 'c') { + if (isdigit (token[3])) { + sscanf (token, "%*s %lu %lu %lu %lu", &curr_load[*numcpus].user, &curr_load[*numcpus].nice, &curr_load[*numcpus].system, &curr_load[*numcpus].idle); + + curr_load[*numcpus].total = curr_load[*numcpus].user + curr_load[*numcpus].nice + curr_load[*numcpus].system + curr_load[*numcpus].idle; + result[*numcpus].total = curr_load[*numcpus].total - last_load[*numcpus].total; + result[*numcpus].user = curr_load[*numcpus].user - last_load[*numcpus].user; + result[*numcpus].nice = curr_load[*numcpus].nice - last_load[*numcpus].nice; + result[*numcpus].system = curr_load[*numcpus].system - last_load[*numcpus].system; + result[*numcpus].idle = curr_load[*numcpus].idle - last_load[*numcpus].idle; + last_load[*numcpus].total = curr_load[*numcpus].total; + last_load[*numcpus].user = curr_load[*numcpus].user; + last_load[*numcpus].nice = curr_load[*numcpus].nice; + last_load[*numcpus].system = curr_load[*numcpus].system; + last_load[*numcpus].idle = curr_load[*numcpus].idle; + + (*numcpus)++; + } + } else { + break; + } + token = strtok (NULL, "\n"); + } } int -cpu_smp_init() +cpu_smp_init () { - if(!load_fd) { - load_fd = open ("/proc/stat", O_RDONLY); - } - - return 0; + if (!load_fd) { + load_fd = open ("/proc/stat", O_RDONLY); + } + + return 0; } int -cpu_smp_close() +cpu_smp_close () { - if (load_fd) - close (load_fd); - - load_fd = 0; - - return 0; + if (load_fd) + close (load_fd); + + load_fd = 0; + + return 0; } @@ -138,112 +133,110 @@ cpu_smp_close() // CPU screen shows info about percentage of the CPU being used // int -cpu_smp_screen(int rep, int display) +cpu_smp_screen (int rep, int display) { #undef CPU_BUF_SIZE #define CPU_BUF_SIZE 4 int i, j, n, z; static int first = 1; float value; - static float cpu[MAX_CPUS][CPU_BUF_SIZE + 1][5];// last buffer is scratch + static float cpu[MAX_CPUS][CPU_BUF_SIZE + 1][5]; // last buffer is scratch struct load load[MAX_CPUS]; int numprocs; char buf[256]; - char* graphsize; + char *graphsize; - if(first) - { + if (first) { first = 0; - get_load(load, &numprocs); + get_load (load, &numprocs); - sock_send_string(sock, "screen_add P\n"); - sock_send_string(sock, "widget_del P heartbeat\n"); + sock_send_string (sock, "screen_add P\n"); + sock_send_string (sock, "widget_del P heartbeat\n"); - sprintf(buffer, "screen_set P -name {CPU Use: %s}\n", host); - sock_send_string(sock, buffer); + sprintf (buffer, "screen_set P -name {CPU Use: %s}\n", host); + sock_send_string (sock, buffer); graphsize = calloc (sizeof (char), lcd_wid); if (numprocs > lcd_hgt) { - for (i=0; i lcd_hgt*2) break; + for (i = 0; i < numprocs; i++) { + if (i + 1 > lcd_hgt * 2) + break; - sprintf (buf, "widget_add P %s_title string\n", numnames[i]); - sock_send_string (sock, buf); + sprintf (buf, "widget_add P %s_title string\n", numnames[i]); + sock_send_string (sock, buf); - if (numprocs > lcd_hgt) { - sprintf (buf, "widget_set P %s_title %d %d \"CPU%d[%s]\"\n", numnames[i], i%2 * lcd_wid/2 + 1, i/2+1, i, graphsize); - } else { - sprintf (buf, "widget_set P %s_title 1 %d \"CPU%d[%s]\"\n", numnames[i], i+1, i, graphsize); - } - sock_send_string (sock, buf); + if (numprocs > lcd_hgt) { + sprintf (buf, "widget_set P %s_title %d %d \"CPU%d[%s]\"\n", numnames[i], i % 2 * lcd_wid / 2 + 1, i / 2 + 1, i, graphsize); + } else { + sprintf (buf, "widget_set P %s_title 1 %d \"CPU%d[%s]\"\n", numnames[i], i + 1, i, graphsize); + } + sock_send_string (sock, buf); - sprintf (buf, "widget_add P %s_bar hbar\n", numnames[i]); - sock_send_string (sock, buf); + sprintf (buf, "widget_add P %s_bar hbar\n", numnames[i]); + sock_send_string (sock, buf); } free (graphsize); return 0; } - - get_load(load, &numprocs); - for (z=0; z lcd_hgt) { - n = (float)(value * lcd_cellwid * ((float)lcd_wid/2.f-6.f)) / 100.f + .5f; - sprintf (buf, "widget_set P %s_bar %d %d %d\n", numnames[z], z%2 * lcd_wid/2 + 6, z/2+1, n); - } else { - n = (float)(value * lcd_cellwid * ((float)lcd_wid-6.f)) / 100.f + .5f; - sprintf (buf, "widget_set P %s_bar 6 %d %d\n", numnames[z], z+1, n); - } - sock_send_string (sock, buf); - - if (z+1 > lcd_hgt*2) break; + if (numprocs > lcd_hgt) { + n = (float) (value * lcd_cellwid * ((float) lcd_wid / 2.f - 6.f)) / 100.f + .5f; + sprintf (buf, "widget_set P %s_bar %d %d %d\n", numnames[z], z % 2 * lcd_wid / 2 + 6, z / 2 + 1, n); + } else { + n = (float) (value * lcd_cellwid * ((float) lcd_wid - 6.f)) / 100.f + .5f; + sprintf (buf, "widget_set P %s_bar 6 %d %d\n", numnames[z], z + 1, n); + } + sock_send_string (sock, buf); + + if (z + 1 > lcd_hgt * 2) + break; } return 0; -} // End cpu_screen() +} // End cpu_screen() diff --git a/clients/lcdproc/cpu_smp.h b/clients/lcdproc/cpu_smp.h index ac2c1fa..c279464 100644 --- a/clients/lcdproc/cpu_smp.h +++ b/clients/lcdproc/cpu_smp.h @@ -2,10 +2,10 @@ #define CPU_SMP_H -int cpu_smp_init(); -int cpu_smp_close(); +int cpu_smp_init (); +int cpu_smp_close (); -int cpu_smp_screen(int rep, int display); +int cpu_smp_screen (int rep, int display); #endif diff --git a/clients/lcdproc/disk.c b/clients/lcdproc/disk.c index 8e5c4ea..26e71eb 100644 --- a/clients/lcdproc/disk.c +++ b/clients/lcdproc/disk.c @@ -17,7 +17,7 @@ #ifdef HAVE_SYS_MOUNT_H #include #endif -#ifdef HAVE_SYS_VFS_H +#ifdef HAVE_SYS_VFS_H #include #endif #ifdef HAVE_SYS_STATVFS_H @@ -37,81 +37,79 @@ FILE *mtab_fd; -typedef struct mounts -{ - char dev[256], type[64], mpoint[256]; - long bsize, blocks, bfree, files, ffree; +typedef struct mounts { + char dev[256], type[64], mpoint[256]; + long bsize, blocks, bfree, files, ffree; } mounts; -static int get_fs(mounts fs[]) +static int +get_fs (mounts fs[]) { #ifdef STAT_STATVFS - struct statvfs fsinfo; + struct statvfs fsinfo; #else - struct statfs fsinfo; + struct statfs fsinfo; #endif - char line[256]; - int x = 0, y; - - mtab_fd = fopen("/etc/mtab", "r"); + char line[256]; + int x = 0, y; - // Get rid of old, unmounted filesystems... - memset(fs, 0, sizeof(mounts)*256); + mtab_fd = fopen ("/etc/mtab", "r"); - while (x < 256) - { - if(fgets(line, 256, mtab_fd) == NULL) - { - fclose(mtab_fd); - return x; - } - - sscanf(line, "%s %s %s", fs[x].dev, fs[x].mpoint, fs[x].type); - - if(strcmp(fs[x].type, "proc") + // Get rid of old, unmounted filesystems... + memset (fs, 0, sizeof (mounts) * 256); + + while (x < 256) { + if (fgets (line, 256, mtab_fd) == NULL) { + fclose (mtab_fd); + return x; + } + + sscanf (line, "%s %s %s", fs[x].dev, fs[x].mpoint, fs[x].type); + + if (strcmp (fs[x].type, "proc") #ifndef STAT_NFS - && strcmp(fs[x].type, "nfs") + && strcmp (fs[x].type, "nfs") #endif #ifndef STAT_SMBFS - && strcmp(fs[x].type, "smbfs") + && strcmp (fs[x].type, "smbfs") #endif - ) - { + ) { #ifdef STAT_STATVFS - y = statvfs(fs[x].mpoint, &fsinfo); -#elif STAT_STATFS2_BSIZE - y = statfs(fs[x].mpoint, &fsinfo); + y = statvfs (fs[x].mpoint, &fsinfo); +#elif STAT_STATFS2_BSIZE + y = statfs (fs[x].mpoint, &fsinfo); #elif STAT_STATFS4 - y = statfs(fs[x].mpoint, &fsinfo, sizeof(fsinfo), 0); + y = statfs (fs[x].mpoint, &fsinfo, sizeof (fsinfo), 0); #else #error "statfs for this system noy yet supported" #endif - - fs[x].blocks = fsinfo.f_blocks; - if(fs[x].blocks > 0) - { - fs[x].bsize = fsinfo.f_bsize; - fs[x].bfree = fsinfo.f_bfree; - fs[x].files = fsinfo.f_files; - fs[x].ffree = fsinfo.f_ffree; - x++; - } - } - } - fclose(mtab_fd); - return x; + fs[x].blocks = fsinfo.f_blocks; + if (fs[x].blocks > 0) { + fs[x].bsize = fsinfo.f_bsize; + fs[x].bfree = fsinfo.f_bfree; + fs[x].files = fsinfo.f_files; + fs[x].ffree = fsinfo.f_ffree; + x++; + } + } + } + + fclose (mtab_fd); + return x; } -int disk_init() +int +disk_init () { return 0; } -int disk_close() +int +disk_close () { return 0; @@ -126,159 +124,135 @@ int disk_close() // TODO: Disk screen! Requires virtual pages in the server, though... -int disk_screen(int rep, int display) +int +disk_screen (int rep, int display) { - static mounts mnt[256]; - static int count=0; + static mounts mnt[256]; + static int count = 0; // Holds info to display (avoid recalculating it) - struct disp - { - char dev[8]; - char cap[8]; - int full; + struct disp { + char dev[8]; + char cap[8]; + int full; } table[256]; int i; - static int num_disks=0; - static int first=1; // First line to display, sort of. + static int num_disks = 0; + static int first = 1; // First line to display, sort of. #define huge long long int huge size; - if(first) - { + if (first) { first = 0; - sock_send_string(sock, "screen_add D\n"); - sprintf(buffer, "screen_set D -name {Disk Use: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add D title title\n"); - sprintf(buffer, "widget_set D title {DISKS: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add D f frame\n"); + sock_send_string (sock, "screen_add D\n"); + sprintf (buffer, "screen_set D -name {Disk Use: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add D title title\n"); + sprintf (buffer, "widget_set D title {DISKS: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add D f frame\n"); //sock_send_string(sock, "widget_set D f 1 2 20 4 20 3 v 8\n"); - sprintf(buffer, "widget_set D f 1 2 %i %i %i %i v 12\n", - lcd_wid, lcd_hgt, lcd_wid, lcd_hgt-1); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add D err1 string\n"); - sock_send_string(sock, "widget_add D err2 string\n"); - sock_send_string(sock, "widget_set D err1 5 2 { Reading }\n"); - sock_send_string(sock, "widget_set D err2 5 3 {Filesystems}\n"); + sprintf (buffer, "widget_set D f 1 2 %i %i %i %i v 12\n", lcd_wid, lcd_hgt, lcd_wid, lcd_hgt - 1); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add D err1 string\n"); + sock_send_string (sock, "widget_add D err2 string\n"); + sock_send_string (sock, "widget_set D err1 5 2 { Reading }\n"); + sock_send_string (sock, "widget_set D err2 5 3 {Filesystems}\n"); } - // Grab disk stats on first display, and fill "table". // Get rid of old, unmounted filesystems... - memset(table, 0, sizeof(struct disp)*256); - - count = get_fs(mnt); - first = 0; - - // Fill the display structure... - if(count) - { - sock_send_string(sock, "widget_set D err1 30 5 .\n"); - sock_send_string(sock, "widget_set D err2 30 5 .\n"); - for(i=0; i 6) - { - sprintf(table[i].dev, "%c%s", ELLIPSIS, - (mnt[i].mpoint)+(strlen(mnt[i].mpoint)-5)); - } - else - { - sprintf(table[i].dev, "%s", mnt[i].mpoint); - } - - //table[i].full = (lcd.cellwid * 4) - table[i].full = (huge)(lcd_cellwid * 4) - * (huge)(mnt[i].blocks - mnt[i].bfree) - / (huge)mnt[i].blocks; + memset (table, 0, sizeof (struct disp) * 256); - size = (huge)mnt[i].bsize * (huge)mnt[i].blocks; - memset(table[i].cap, 0, 8); + count = get_fs (mnt); + first = 0; + + // Fill the display structure... + if (count) { + sock_send_string (sock, "widget_set D err1 30 5 .\n"); + sock_send_string (sock, "widget_set D err2 30 5 .\n"); + for (i = 0; i < count; i++) { + if (strlen (mnt[i].mpoint) > 6) { + sprintf (table[i].dev, "%c%s", ELLIPSIS, (mnt[i].mpoint) + (strlen (mnt[i].mpoint) - 5)); + } else { + sprintf (table[i].dev, "%s", mnt[i].mpoint); + } + + //table[i].full = (lcd.cellwid * 4) + table[i].full = (huge) (lcd_cellwid * 4) + * (huge) (mnt[i].blocks - mnt[i].bfree) + / (huge) mnt[i].blocks; + + size = (huge) mnt[i].bsize * (huge) mnt[i].blocks; + memset (table[i].cap, 0, 8); // Kilobytes - if(size > 0 && size < (huge)1000*(huge)1000) - sprintf(table[i].cap, "%3.1fk", - (double)(size)/1024.0); + if (size > 0 && size < (huge) 1000 * (huge) 1000) + sprintf (table[i].cap, "%3.1fk", (double) (size) / 1024.0); // Megabytes - else if(size >= (huge)1000*(huge)1000 - && size < (huge)1000*(huge)1000*(huge)1000) - sprintf(table[i].cap, "%3.1fM", - (float)(size/(huge)1024)/1024.0); + else if (size >= (huge) 1000 * (huge) 1000 && size < (huge) 1000 * (huge) 1000 * (huge) 1000) + sprintf (table[i].cap, "%3.1fM", (float) (size / (huge) 1024) / 1024.0); // Gigabytes - else if(size >= (huge)1000*(huge)1000*(huge)1000 - && size < (huge)1000*(huge)1000*(huge)1000*(huge)1000) - sprintf(table[i].cap, "%3.1fG", - (float)(size/((huge)1024*(huge)1024))/1024.0); + else if (size >= (huge) 1000 * (huge) 1000 * (huge) 1000 && size < (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000) + sprintf (table[i].cap, "%3.1fG", (float) (size / ((huge) 1024 * (huge) 1024)) / 1024.0); // Terabytes - else if(size >= (huge)1000*(huge)1000*(huge)1000*(huge)1000 - && size < (huge)1000*(huge)1000*(huge)1000*(huge)1000*(huge)1000) - sprintf(table[i].cap, "%3.1fT", - (float)(size/((huge)1024*(huge)1024*(huge)1024))/1024.0); - + else if (size >= (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 && size < (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000) + sprintf (table[i].cap, "%3.1fT", (float) (size / ((huge) 1024 * (huge) 1024 * (huge) 1024)) / 1024.0); + // PectaBytes -- Yeah! I want some! - else if(size >= (huge)1000*(huge)1000*(huge)1000*(huge)1000*(huge)1000 - && size < (huge)1000*(huge)1000*(huge)1000*(huge)1000*(huge)1000*(huge)1000) - sprintf(table[i].cap, "%3.1fP", - (float)(size/((huge)1024*(huge)1024*(huge)1024*(huge)1024))/1024.0); - + else if (size >= (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 && size < (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000 * (huge) 1000) + sprintf (table[i].cap, "%3.1fP", (float) (size / ((huge) 1024 * (huge) 1024 * (huge) 1024 * (huge) 1024)) / 1024.0); + } } - - - if (!count) - { - sock_send_string(sock, "widget_set D err1 1 2 {Error Retrieving}\n"); - sock_send_string(sock, "widget_set D err2 1 3 {Filesystem Stats}\n"); + + + if (!count) { + sock_send_string (sock, "widget_set D err1 1 2 {Error Retrieving}\n"); + sock_send_string (sock, "widget_set D err2 1 3 {Filesystem Stats}\n"); return 0; } - // Display stuff... (show for two seconds, then scroll once per // second, then hold at the end for two seconds) - sprintf(buffer, "widget_set D f 1 2 %i %i %i %i v 12\n", - lcd_wid, lcd_hgt, lcd_wid, count); - sock_send_string(sock, buffer); + sprintf (buffer, "widget_set D f 1 2 %i %i %i %i v 12\n", lcd_wid, lcd_hgt, lcd_wid, count); + sock_send_string (sock, buffer); //sprintf(tmp, "widget_set D f 1 2 20 4 20 %i v 8\n", count); //sock_send_string(sock, tmp); - for(i=0; i= num_disks) // Make sure we have enough lines... + for (i = 0; i < count; i++) { + if (table[i].dev[0] == 0) + continue; + if (i >= num_disks) // Make sure we have enough lines... { - sprintf(tmp, "widget_add D s%i string -in f\n", i); - sock_send_string(sock, tmp); - sprintf(tmp, "widget_add D h%i hbar -in f\n", i); - sock_send_string(sock, tmp); - + sprintf (tmp, "widget_add D s%i string -in f\n", i); + sock_send_string (sock, tmp); + sprintf (tmp, "widget_add D h%i hbar -in f\n", i); + sock_send_string (sock, tmp); + } - sprintf(tmp, "widget_set D s%i 1 %i {%-6s %6s E F}\n", - i, i+1, table[i].dev, table[i].cap); - sock_send_string(sock, tmp); - sprintf(tmp, "widget_set D h%i 16 %i %i\n", - i, i+1, table[i].full); - sock_send_string(sock, tmp); + sprintf (tmp, "widget_set D s%i 1 %i {%-6s %6s E F}\n", i, i + 1, table[i].dev, table[i].cap); + sock_send_string (sock, tmp); + sprintf (tmp, "widget_set D h%i 16 %i %i\n", i, i + 1, table[i].full); + sock_send_string (sock, tmp); } // Now remove extra widgets... - for(; i < num_disks; i++) - { - sprintf(tmp, "widget_del D s%i\n", i); - sock_send_string(sock, tmp); - sprintf(tmp, "widget_del D h%i\n", i); - sock_send_string(sock, tmp); + for (; i < num_disks; i++) { + sprintf (tmp, "widget_del D s%i\n", i); + sock_send_string (sock, tmp); + sprintf (tmp, "widget_del D h%i\n", i); + sock_send_string (sock, tmp); } - + num_disks = count; - #undef huge +#undef huge /* // ** FILESYSTEMS ***** @@ -286,6 +260,5 @@ int disk_screen(int rep, int display) // /dos/c 2.1G E----F // /stuff 4.3G E----F */ - return 0; + return 0; } - diff --git a/clients/lcdproc/disk.h b/clients/lcdproc/disk.h index 097d426..fd83ada 100644 --- a/clients/lcdproc/disk.h +++ b/clients/lcdproc/disk.h @@ -1,9 +1,9 @@ #ifndef DISK_H #define DISK_H -int disk_init(); -int disk_close(); +int disk_init (); +int disk_close (); -int disk_screen(int rep, int display); +int disk_screen (int rep, int display); #endif diff --git a/clients/lcdproc/load.c b/clients/lcdproc/load.c index d1cf1ba..fd01cdc 100644 --- a/clients/lcdproc/load.c +++ b/clients/lcdproc/load.c @@ -12,33 +12,36 @@ int loadavg_fd = 0; -static double get_loadavg(void); +static double get_loadavg (void); -static double get_loadavg(void) +static double +get_loadavg (void) { - double load; + double load; - reread(loadavg_fd, "get_load:"); - sscanf(buffer, "%lf", &load); - return load; + reread (loadavg_fd, "get_load:"); + sscanf (buffer, "%lf", &load); + return load; } -int load_init() +int +load_init () { - if(!loadavg_fd) - loadavg_fd = open("/proc/loadavg",O_RDONLY); - + if (!loadavg_fd) + loadavg_fd = open ("/proc/loadavg", O_RDONLY); + return 0; } -int load_close() +int +load_close () { - if(loadavg_fd) - close(loadavg_fd); + if (loadavg_fd) + close (loadavg_fd); loadavg_fd = 0; - + return 0; } @@ -47,106 +50,97 @@ int load_close() // Shows a display very similar to "xload"'s histogram. // -int xload_screen(int rep, int display) +int +xload_screen (int rep, int display) { static int first = 1; static float loads[LCD_MAX_WIDTH]; int n, i; - float loadmax=0, factor, x; + float loadmax = 0, factor, x; int status = 0; - - if(first) // Only the first time this is ever called... + + if (first) // Only the first time this is ever called... { first = 0; - memset(loads, 0, sizeof(float)*LCD_MAX_WIDTH); - - sock_send_string(sock, "screen_add X\n"); - sprintf(buffer, "screen_set X -name {X-Load: %s}\n", host); - sock_send_string(sock, buffer); + memset (loads, 0, sizeof (float) * LCD_MAX_WIDTH); + + sock_send_string (sock, "screen_add X\n"); + sprintf (buffer, "screen_set X -name {X-Load: %s}\n", host); + sock_send_string (sock, buffer); // Add the vbars... - for(i=1; i= 4) - { - sock_send_string(sock, "widget_add X title title\n"); - sock_send_string(sock, "widget_set X title {LOAD }\n"); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add X title title\n"); + sock_send_string (sock, "widget_set X title {LOAD }\n"); + } else { + sock_send_string (sock, "widget_add X title string\n"); + sock_send_string (sock, "widget_set X title 1 1 {LOAD}\n"); + sock_send_string (sock, "widget_del X heartbeat\n"); } - else - { - sock_send_string(sock, "widget_add X title string\n"); - sock_send_string(sock, "widget_set X title 1 1 {LOAD}\n"); - sock_send_string(sock, "widget_del X heartbeat\n"); - } - sock_send_string(sock, "widget_add X zero string\n"); - sock_send_string(sock, "widget_add X top string\n"); - sprintf(tmp, "widget_set X zero %i %i 0\n", lcd_wid, lcd_hgt); - sock_send_string(sock, tmp); - sprintf(tmp, "widget_set X top %i %i 1\n", - lcd_wid, (lcd_hgt==2)?1:2); - sock_send_string(sock, tmp); + sock_send_string (sock, "widget_add X zero string\n"); + sock_send_string (sock, "widget_add X top string\n"); + sprintf (tmp, "widget_set X zero %i %i 0\n", lcd_wid, lcd_hgt); + sock_send_string (sock, tmp); + sprintf (tmp, "widget_set X top %i %i 1\n", lcd_wid, (lcd_hgt == 2) ? 1 : 2); + sock_send_string (sock, tmp); } - for(n=0; n<(lcd_wid-2); n++) loads[n] = loads[n+1]; - loads[lcd_wid-2] = get_loadavg(); + for (n = 0; n < (lcd_wid - 2); n++) + loads[n] = loads[n + 1]; + loads[lcd_wid - 2] = get_loadavg (); - for(n=0; n loadmax) loadmax = loads[n]; + for (n = 0; n < lcd_wid - 1; n++) + if (loads[n] > loadmax) + loadmax = loads[n]; - n = (int)loadmax; - if ((float)n < loadmax) { n++; } - sprintf(tmp, "widget_set X top %i %i %i\n", - lcd_wid, (lcd_hgt==2)?1:2, n); + n = (int) loadmax; + if ((float) n < loadmax) { + n++; + } + sprintf (tmp, "widget_set X top %i %i %i\n", lcd_wid, (lcd_hgt == 2) ? 1 : 2, n); //if(display) sock_send_string(sock, tmp); - sock_send_string(sock, tmp); + sock_send_string (sock, tmp); - - if (loadmax < 1.0) factor = (float)(lcd_cellhgt) * ((lcd_hgt==2)?2.0:3.0); - else factor = (float)(lcd_cellhgt) * ((lcd_hgt==2)?2.0:3.0) / (float)n; - for(n=0; n LOAD_MIN) - { - status = BACKLIGHT_ON; - } - if(loads[lcd_wid-2] > LOAD_MAX) - { - status = BLINK_ON; + sock_send_string (sock, tmp); } + if (loadmax < LOAD_MIN) { + status = BACKLIGHT_OFF; + } + if (loadmax > LOAD_MIN) { + status = BACKLIGHT_ON; + } + if (loads[lcd_wid - 2] > LOAD_MAX) { + status = BLINK_ON; + } // And now the title... - if(lcd_hgt >= 4) - sprintf(tmp, "widget_set X title {LOAD %2.2f: %s}\n", - loads[lcd_wid-2], host); + if (lcd_hgt >= 4) + sprintf (tmp, "widget_set X title {LOAD %2.2f: %s}\n", loads[lcd_wid - 2], host); else - sprintf(tmp, "widget_set X title 1 1 {%s %2.2f}\n", - host, loads[lcd_wid-2]); + sprintf (tmp, "widget_set X title 1 1 {%s %2.2f}\n", host, loads[lcd_wid - 2]); //if(display) sock_send_string(sock, tmp); - sock_send_string(sock, tmp); + sock_send_string (sock, tmp); return status; -} // End xload_screen() - - - +} // End xload_screen() diff --git a/clients/lcdproc/load.h b/clients/lcdproc/load.h index 61e6fec..a716f1c 100644 --- a/clients/lcdproc/load.h +++ b/clients/lcdproc/load.h @@ -10,10 +10,10 @@ -int load_init(); -int load_close(); +int load_init (); +int load_close (); -int xload_screen(int rep, int display); +int xload_screen (int rep, int display); #endif diff --git a/clients/lcdproc/main.c b/clients/lcdproc/main.c index ff31296..7c2e024 100644 --- a/clients/lcdproc/main.c +++ b/clients/lcdproc/main.c @@ -39,9 +39,9 @@ int lcd_cellhgt; See below... (default_sequence[]) */ -void HelpScreen(); -void exit_program(int val); -void main_loop(mode *sequence); +void HelpScreen (); +void exit_program (int val); +void main_loop (mode * sequence); #define MAX_SEQUENCE 256 // 1/8th second is a single time unit... @@ -49,27 +49,26 @@ void main_loop(mode *sequence); // Contains a list of modes to run -mode default_sequence[] = -{ +mode default_sequence[] = { // which on off inv timer/visible - { 'C', 1, 2, 0, 0xffff,0,},// [C]PU - { 'M', 4, 16, 0, 0xffff,0,},// [M]emory - { 'X', 64, 128, 1, 0xffff,0,},// [X]-load (load histogram) - { 'T', 4, 64, 0, 0xffff,0,},// [T]ime/Date - { 'A', 999,9999, 0, 0xffff,0,},// [A]bout (credits) + {'C', 1, 2, 0, 0xffff, 0,}, // [C]PU + {'M', 4, 16, 0, 0xffff, 0,}, // [M]emory + {'X', 64, 128, 1, 0xffff, 0,}, // [X]-load (load histogram) + {'T', 4, 64, 0, 0xffff, 0,}, // [T]ime/Date + {'A', 999, 9999, 0, 0xffff, 0,}, // [A]bout (credits) - { 1 , 0, 0, 0, 0,0,},// Modes after this line will not be run by default... - // ... all non-default modes must be in here! - // ... they will not show up otherwise. - { 'P', 1, 2, 0, 0xffff,0,},// [O]ld Timescreen - { 'O', 4, 64, 0, 0xffff,0,},// [O]ld Timescreen - { 'K', 4, 64, 0, 0xffff,0,},// big cloc[K] - { 'U', 4, 128, 0, 0xffff,0,},// Old [U]ptime Screen - { 'B', 32, 256, 1, 0xffff,0,},// [B]attery Status - { 'G', 1, 2, 0, 0xffff,0,},// Cpu histogram [G]raph - { 'S', 16, 256, 1, 0xffff,0,},// [S]ize of biggest programs - { 'D', 256, 256, 1, 0xffff,0,},// [D]isk stats - { 0, 0, 0, 0,0,},// No more.. all done. + {1, 0, 0, 0, 0, 0,}, // Modes after this line will not be run by default... + // ... all non-default modes must be in here! + // ... they will not show up otherwise. + {'P', 1, 2, 0, 0xffff, 0,}, // [O]ld Timescreen + {'O', 4, 64, 0, 0xffff, 0,}, // [O]ld Timescreen + {'K', 4, 64, 0, 0xffff, 0,}, // big cloc[K] + {'U', 4, 128, 0, 0xffff, 0,}, // Old [U]ptime Screen + {'B', 32, 256, 1, 0xffff, 0,}, // [B]attery Status + {'G', 1, 2, 0, 0xffff, 0,}, // Cpu histogram [G]raph + {'S', 16, 256, 1, 0xffff, 0,}, // [S]ize of biggest programs + {'D', 256, 256, 1, 0xffff, 0,}, // [D]isk stats + {0, 0, 0, 0, 0,}, // No more.. all done. }; // TODO: Clean up main()... It is still way too big. @@ -77,7 +76,8 @@ mode default_sequence[] = // TODO: Config file; not just command line -int main(int argc, char **argv) +int +main (int argc, char **argv) { mode sequence[MAX_SEQUENCE]; char cfgfile[256] = "/etc/lcdproc.cf"; @@ -86,294 +86,265 @@ int main(int argc, char **argv) int i, j, k; int tmp; - memset(sequence, 0, sizeof(mode) * MAX_SEQUENCE); + memset (sequence, 0, sizeof (mode) * MAX_SEQUENCE); // Ctrl-C will cause a clean exit... - signal(SIGINT, exit_program); + signal (SIGINT, exit_program); // and "kill"... - signal(SIGTERM, exit_program); + signal (SIGTERM, exit_program); // and "kill -HUP" (hangup)... - signal(SIGHUP, exit_program); + signal (SIGHUP, exit_program); // and just in case, "kill -KILL" (which cannot be trapped; but oh well) - signal(SIGKILL, exit_program); - + signal (SIGKILL, exit_program); + + - // Command line - memcpy(sequence, default_sequence, sizeof(default_sequence)); - for(i=1, j=0; i 0xffff) - fprintf(stderr, "Warning: Port %i outside of standard range\n", - port); + case 'p': + if (argc < i + 1) + HelpScreen (); + port = atoi (argv[++i]); + if (port < 1 && port > 0xffff) + fprintf (stderr, "Warning: Port %i outside of standard range\n", port); break; - + // otherwise... Get help! - default: HelpScreen(); break; - } + default: + HelpScreen (); + break; + } // Parse command line here... read the man page. - else if(strlen(argv[i]) == 1) - { + else if (strlen (argv[i]) == 1) { // Grab the mode letter... sequence[j].which = argv[i][0]; // If we have just a letter with no numbers... // Set the defaults... - for(tmp=0, k=0; default_sequence[k].which; k++) - { - if(toupper(sequence[j].which) == default_sequence[k].which) - { - memcpy(&sequence[j], &default_sequence[k], sizeof(mode)); - tmp=1; + for (tmp = 0, k = 0; default_sequence[k].which; k++) { + if (toupper (sequence[j].which) == default_sequence[k].which) { + memcpy (&sequence[j], &default_sequence[k], sizeof (mode)); + tmp = 1; break; } } - if(!tmp) { printf("Invalid Mode: %c\n", argv[i][0]); exit(0); } + if (!tmp) { + printf ("Invalid Mode: %c\n", argv[i][0]); + exit (0); + } j++; // Set the last element to 0... - memset(sequence + j, 0, sizeof(mode)); - } // End if(strlen(argv == 1)) - else - { + memset (sequence + j, 0, sizeof (mode)); + } // End if(strlen(argv == 1)) + else { // A multicharacter parameter by itself // is assumed to be a config file.. - strcpy(cfgfile, argv[i]); - printf("Ignoring config file: %s\n", cfgfile); + strcpy (cfgfile, argv[i]); + printf ("Ignoring config file: %s\n", cfgfile); } } // Connect to the server... - usleep(500000); // wait for the server to start up - sock = sock_connect(server, port); - if (sock <= 0) - { - printf("Error connecting to server %s on port %i.\n", - server, port); + usleep (500000); // wait for the server to start up + sock = sock_connect (server, port); + if (sock <= 0) { + printf ("Error connecting to server %s on port %i.\n", server, port); return 0; } - sock_send_string(sock, "hello\n"); - usleep(500000); // wait for the server to say hi. - - + 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; - + // Init the status gatherers... - mode_init(sequence); + mode_init (sequence); // And spew stuff! - main_loop(sequence); - + main_loop (sequence); + // Clean up - exit_program(0); + exit_program (0); return 0; } -void HelpScreen() +void +HelpScreen () { - printf("LCDproc, %s\n", version); - printf("Usage: lcdproc [-s server] [-p port] [modelist]\n"); - printf("\tOptions in []'s are optional.\n"); - printf("\tmodelist is \"mode [mode mode ...]\"\n"); - printf("\tMode letters: \t[C]pu [G]raph [T]ime [M]emory [X]load [D]isk [B]attery\n\t\t\tproc_[S]izes [O]ld_time big_cloc[K] [U]ptime CPU_SM[P]\n\t\t\t[A]bout\n"); - printf("\n"); - printf("\tUse \"man lcdproc\" for more info.\n"); - printf("Example:\n"); - printf("\tlcdproc -s my.lcdproc.server.com C M X -p 13666\n"); - printf("\n"); - exit(0); + printf ("LCDproc, %s\n", version); + printf ("Usage: lcdproc [-s server] [-p port] [modelist]\n"); + printf ("\tOptions in []'s are optional.\n"); + printf ("\tmodelist is \"mode [mode mode ...]\"\n"); + printf ("\tMode letters: \t[C]pu [G]raph [T]ime [M]emory [X]load [D]isk [B]attery\n\t\t\tproc_[S]izes [O]ld_time big_cloc[K] [U]ptime CPU_SM[P]\n\t\t\t[A]bout\n"); + printf ("\n"); + printf ("\tUse \"man lcdproc\" for more info.\n"); + printf ("Example:\n"); + printf ("\tlcdproc -s my.lcdproc.server.com C M X -p 13666\n"); + printf ("\n"); + exit (0); } /////////////////////////////////////////////////////////////////// // Called upon TERM and INTR signals... // -void exit_program(int val) +void +exit_program (int val) { - Quit = 1; - sock_close(sock); - mode_close(); - exit(0); + Quit = 1; + sock_close (sock); + mode_close (); + exit (0); } /////////////////////////////////////////////////////////////////// // Main program loop... // -void main_loop(mode *sequence) +void +main_loop (mode * sequence) { - int i=0, j; + int i = 0, j; //int status=0; char buf[8192]; char *argv[256]; int argc, newtoken; int len; - - + + // Main loop // Run whatever screen we want, then wait. Woo-hoo! - while(!Quit) - { + while (!Quit) { // Check for server input... - len = sock_recv(sock, buf, 8000); - + len = sock_recv (sock, buf, 8000); + // Handle server input... - while(len > 0) - { + while (len > 0) { // Now split the string into tokens... //for(i=0; i 0) - { + if (argc > 0) { //printf("%s %s\n", argv[0], argv[1]); - if(0 == strcmp(argv[0], "listen")) - { - for(j=0; sequence[j].which; j++) - { - if(sequence[j].which == argv[1][0]) - { + if (0 == strcmp (argv[0], "listen")) { + for (j = 0; sequence[j].which; j++) { + if (sequence[j].which == argv[1][0]) { sequence[j].visible = 1; //debug("Listen %s\n", argv[1]); } } - } - else if(0 == strcmp(argv[0], "ignore")) - { - for(j=0; sequence[j].which; j++) - { - if(sequence[j].which == argv[1][0]) - { + } else if (0 == strcmp (argv[0], "ignore")) { + for (j = 0; sequence[j].which; j++) { + if (sequence[j].which == argv[1][0]) { sequence[j].visible = 0; //debug("Ignore %s\n", argv[1]); } } - } - else if(0 == strcmp(argv[0], "key")) - { - debug("Key %s\n", argv[1]); - } - else if(0 == strcmp(argv[0], "menu")) - { - } - else if(0 == strcmp(argv[0], "connect")) - { + } else if (0 == strcmp (argv[0], "key")) { + debug ("Key %s\n", argv[1]); + } else if (0 == strcmp (argv[0], "menu")) { + } else if (0 == strcmp (argv[0], "connect")) { int a; - for(a=1; a 1; i++) - { + for (i = 0; sequence[i].which > 1; i++) { sequence[i].timer++; - if(sequence[i].visible) - { - if(sequence[i].timer >= sequence[i].on_time) - { + if (sequence[i].visible) { + if (sequence[i].timer >= sequence[i].on_time) { sequence[i].timer = 0; // Now, update the screen... - update_screen(sequence+i, 1); + update_screen (sequence + i, 1); } - } - else - { - if(sequence[i].show_invisible) - { - if(sequence[i].timer >= sequence[i].off_time) - { + } else { + if (sequence[i].show_invisible) { + if (sequence[i].timer >= sequence[i].off_time) { sequence[i].timer = 0; // Now, update the screen... - update_screen(sequence+i, 1); + update_screen (sequence + i, 1); } - } - else - { - if(sequence[i].timer >= sequence[i].off_time) - { + } else { + if (sequence[i].timer >= sequence[i].off_time) { sequence[i].timer = 0; // Now, update the screen... - update_screen(sequence+i, 0); + update_screen (sequence + i, 0); } } } } // Now sleep... - usleep(TIME_UNIT); - + usleep (TIME_UNIT); + /* Old stuff timer=0; for(j=0; hold || (j= 4) - { - sock_send_string(sock, "widget_add M title title\n"); - sock_send_string(sock, "widget_set M title { MEM -==- SWAP}\n"); - sock_send_string(sock, "widget_add M totl string\n"); - sock_send_string(sock, "widget_add M used string\n"); - sock_send_string(sock, "widget_set M totl 9 2 Totl\n"); - sock_send_string(sock, "widget_set M used 9 3 Free\n"); - sock_send_string(sock, "widget_add M EF string\n"); - sock_send_string(sock, "widget_set M EF 1 4 {E F E F}\n"); - sock_send_string(sock, "widget_add M memused string\n"); - sock_send_string(sock, "widget_add M swapused string\n"); - //sock_send_string(sock, "widget_set M memgauge 2 4 0\n"); - //sock_send_string(sock, "widget_set M swapgauge 13 4 0\n"); - } - else - { - sock_send_string(sock, "widget_add M m string\n"); - sock_send_string(sock, "widget_add M s string\n"); - if(lcd_wid >= 20) - { - sock_send_string(sock, "widget_set M m 1 1 {M [ ]}\n"); - sock_send_string(sock, "widget_set M s 1 2 {S [ ]}\n"); - } - else - { - sock_send_string(sock, "widget_set M m 1 1 {M [ ]}\n"); - sock_send_string(sock, "widget_set M s 1 2 {S [ ]}\n"); - } - sock_send_string(sock, "widget_add M mem% string\n"); - sock_send_string(sock, "widget_add M swap% string\n"); - sock_send_string(sock, "widget_set M mem% 16 1 { 0.0%}\n"); - sock_send_string(sock, "widget_set M swap% 16 2 { 0.0%}\n"); - - //sock_send_string(sock, "widget_set M memgauge 8 1 0\n"); - //sock_send_string(sock, "widget_set M swapgauge 8 2 0\n"); - } + sock_send_string (sock, "screen_add M\n"); + sprintf (buffer, "screen_set M -name {Memory & Swap: %s}\n", host); + sock_send_string (sock, buffer); - sock_send_string(sock, "widget_add M memtotl string\n"); - sock_send_string(sock, "widget_add M swaptotl string\n"); - - sock_send_string(sock, "widget_add M memgauge hbar\n"); - sock_send_string(sock, "widget_add M swapgauge hbar\n"); - - //sock_send_string(sock, "\n"); - } + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add M title title\n"); + sock_send_string (sock, "widget_set M title { MEM -==- SWAP}\n"); + sock_send_string (sock, "widget_add M totl string\n"); + sock_send_string (sock, "widget_add M used string\n"); + sock_send_string (sock, "widget_set M totl 9 2 Totl\n"); + sock_send_string (sock, "widget_set M used 9 3 Free\n"); + sock_send_string (sock, "widget_add M EF string\n"); + sock_send_string (sock, "widget_set M EF 1 4 {E F E F}\n"); + sock_send_string (sock, "widget_add M memused string\n"); + sock_send_string (sock, "widget_add M swapused string\n"); + //sock_send_string(sock, "widget_set M memgauge 2 4 0\n"); + //sock_send_string(sock, "widget_set M swapgauge 13 4 0\n"); + } else { + sock_send_string (sock, "widget_add M m string\n"); + sock_send_string (sock, "widget_add M s string\n"); + if (lcd_wid >= 20) { + sock_send_string (sock, "widget_set M m 1 1 {M [ ]}\n"); + sock_send_string (sock, "widget_set M s 1 2 {S [ ]}\n"); + } else { + sock_send_string (sock, "widget_set M m 1 1 {M [ ]}\n"); + sock_send_string (sock, "widget_set M s 1 2 {S [ ]}\n"); + } + sock_send_string (sock, "widget_add M mem% string\n"); + sock_send_string (sock, "widget_add M swap% string\n"); + sock_send_string (sock, "widget_set M mem% 16 1 { 0.0%}\n"); + sock_send_string (sock, "widget_set M swap% 16 2 { 0.0%}\n"); + + //sock_send_string(sock, "widget_set M memgauge 8 1 0\n"); + //sock_send_string(sock, "widget_set M swapgauge 8 2 0\n"); + } + + sock_send_string (sock, "widget_add M memtotl string\n"); + sock_send_string (sock, "widget_add M swaptotl string\n"); + + sock_send_string (sock, "widget_add M memgauge hbar\n"); + sock_send_string (sock, "widget_add M swapgauge hbar\n"); + + //sock_send_string(sock, "\n"); + } - get_mem_info(mem); - - - // flip the title back and forth... - if(lcd_hgt >= 4) - { - if(which_title & 4) - { - sprintf(buffer, "widget_set M title {%s}\n", host); - sock_send_string(sock, buffer); - } - else sock_send_string(sock, "widget_set M title { MEM -==- SWAP}\n"); - which_title = (which_title + 1)&7; + get_mem_info (mem); - // Total memory - sprintf(tmp, "widget_set M memtotl 1 2 {%6dk}\n", mem[0].total); - if(display) sock_send_string(sock, tmp); - - // Free memory (plus buffers and cache) - sprintf(tmp, "widget_set M memused 1 3 {%6dk}\n", - mem[0].free + mem[0].buffers + mem[0].cache); - if(display) sock_send_string(sock, tmp); - - // Total swap - sprintf(tmp, "widget_set M swaptotl 14 2 {%6dk}\n", mem[1].total); - if(display) sock_send_string(sock, tmp); - - // Free swap - sprintf(tmp, "widget_set M swapused 14 3 {%6dk}\n", mem[1].free); - if(display) sock_send_string(sock, tmp); + // flip the title back and forth... + if (lcd_hgt >= 4) { + if (which_title & 4) { + sprintf (buffer, "widget_set M title {%s}\n", host); + sock_send_string (sock, buffer); + } else + sock_send_string (sock, "widget_set M title { MEM -==- SWAP}\n"); + which_title = (which_title + 1) & 7; - // Free memory graph - n = (int)(35.0 - - ((float)mem[0].free + (float)mem[0].buffers + (float)mem[0].cache) - / (float)mem[0].total - * 35.0); - sprintf(tmp, "widget_set M memgauge 2 4 %i\n", n); - if(display) sock_send_string(sock, tmp); - - // Free swap graph - n = (int)(35.0 - - (float)mem[1].free / (float)mem[1].total - * 35.0); - sprintf(tmp, "widget_set M swapgauge 13 4 %i\n", n); - if(display) sock_send_string(sock, tmp); - } - else - { - // Total memory - sprintf(tmp, "widget_set M memtotl 2 1 {%4dM}\n", - (int)(mem[0].total / 1024.0)); - if(display) sock_send_string(sock, tmp); + // Total memory + sprintf (tmp, "widget_set M memtotl 1 2 {%6dk}\n", mem[0].total); + if (display) + sock_send_string (sock, tmp); - // Total swap - sprintf(tmp, "widget_set M swaptotl 2 2 {%4dM}\n", - (int)(mem[1].total / 1024.0)); - if(display) sock_send_string(sock, tmp); + // Free memory (plus buffers and cache) + sprintf (tmp, "widget_set M memused 1 3 {%6dk}\n", mem[0].free + mem[0].buffers + mem[0].cache); + if (display) + sock_send_string (sock, tmp); + + // Total swap + sprintf (tmp, "widget_set M swaptotl 14 2 {%6dk}\n", mem[1].total); + if (display) + sock_send_string (sock, tmp); + + // Free swap + sprintf (tmp, "widget_set M swapused 14 3 {%6dk}\n", mem[1].free); + if (display) + sock_send_string (sock, tmp); - // Free memory graph - value = ((float)mem[0].free + (float)mem[0].buffers + (float)mem[0].cache) - / (float)mem[0].total; - value = 1.0 - value; - n = (int)((lcd_cellwid * (float)(lcd_wid-13))*(value)); - sprintf(tmp, "widget_set M memgauge 8 1 %i\n", n); - if(display) sock_send_string(sock, tmp); + // Free memory graph + n = (int) (35.0 - ((float) mem[0].free + (float) mem[0].buffers + (float) mem[0].cache) + / (float) mem[0].total * 35.0); + sprintf (tmp, "widget_set M memgauge 2 4 %i\n", n); + if (display) + sock_send_string (sock, tmp); - value *= 100.0; - if (value >= 99.9) { sprintf(buffer, "100%%"); } - else { sprintf(buffer, "%4.1f%%", value); } - sprintf(tmp, "widget_set M mem%% %i 1 {%s}\n", lcd_wid-4, buffer); - if(display) sock_send_string(sock, tmp); + // Free swap graph + n = (int) (35.0 - (float) mem[1].free / (float) mem[1].total * 35.0); + sprintf (tmp, "widget_set M swapgauge 13 4 %i\n", n); + if (display) + sock_send_string (sock, tmp); + } else { + // Total memory + sprintf (tmp, "widget_set M memtotl 2 1 {%4dM}\n", (int) (mem[0].total / 1024.0)); + if (display) + sock_send_string (sock, tmp); - // Free swap graph - value = ((float)mem[1].free / (float)mem[1].total); - value = 1.0 - value; - n = (int)((lcd_cellwid * (float)(lcd_wid-13))*(value)); - sprintf(tmp, "widget_set M swapgauge 8 2 %i\n", n); - if(display) sock_send_string(sock, tmp); - - value *= 100.0; - if (value >= 99.9) { sprintf(buffer, "100%%"); } - else { sprintf(buffer, "%4.1f%%", value); } - sprintf(tmp, "widget_set M swap%% %i 2 {%s}\n", lcd_wid-4, buffer); - if(display) sock_send_string(sock, tmp); + // Total swap + sprintf (tmp, "widget_set M swaptotl 2 2 {%4dM}\n", (int) (mem[1].total / 1024.0)); + if (display) + sock_send_string (sock, tmp); - } - + // Free memory graph + value = ((float) mem[0].free + (float) mem[0].buffers + (float) mem[0].cache) + / (float) mem[0].total; + value = 1.0 - value; + n = (int) ((lcd_cellwid * (float) (lcd_wid - 13)) * (value)); + sprintf (tmp, "widget_set M memgauge 8 1 %i\n", n); + if (display) + sock_send_string (sock, tmp); + + value *= 100.0; + if (value >= 99.9) { + sprintf (buffer, "100%%"); + } else { + sprintf (buffer, "%4.1f%%", value); + } + sprintf (tmp, "widget_set M mem%% %i 1 {%s}\n", lcd_wid - 4, buffer); + if (display) + sock_send_string (sock, tmp); + + // Free swap graph + value = ((float) mem[1].free / (float) mem[1].total); + value = 1.0 - value; + n = (int) ((lcd_cellwid * (float) (lcd_wid - 13)) * (value)); + sprintf (tmp, "widget_set M swapgauge 8 2 %i\n", n); + if (display) + sock_send_string (sock, tmp); + + value *= 100.0; + if (value >= 99.9) { + sprintf (buffer, "100%%"); + } else { + sprintf (buffer, "%4.1f%%", value); + } + sprintf (tmp, "widget_set M swap%% %i 2 {%s}\n", lcd_wid - 4, buffer); + if (display) + sock_send_string (sock, tmp); - return 0; -} // End mem_screen() + } -typedef struct proc_mem_info -{ - char name[16]; // Is this really long enough? - // Size isn't used any more... - // Totl stores the "size" of the program now... - int size, totl; - int number; + return 0; +} // End mem_screen() + + + +typedef struct proc_mem_info { + char name[16]; // Is this really long enough? + // Size isn't used any more... + // Totl stores the "size" of the program now... + int size, totl; + int number; } proc_mem_info; -static int sort_procs(void *a, void *b) +static int +sort_procs (void *a, void *b) { proc_mem_info *one, *two; - - if(!a) return 0; - if(!b) return 0; - one = (proc_mem_info *)a; - two = (proc_mem_info *)b; + if (!a) + return 0; + if (!b) + return 0; + + one = (proc_mem_info *) a; + two = (proc_mem_info *) b; return (two->totl > one->totl); } - -int mem_top_screen(int rep, int display) + +int +mem_top_screen (int rep, int display) { // Much of this code was ripped from "gmemusage" - char buf[128]; + char buf[128]; DIR *proc; FILE *StatusFile; - struct dirent * procdir; - + struct dirent *procdir; + char procName[16]; int - procSize , - procRSS , - procData , - procStk , - procExe ; + procSize, procRSS, procData, procStk, procExe; const char - *NameLine = "Name:" , - *VmSizeLine = "VmSize:" , - *VmRSSLine = "VmRSS" , - *VmDataLine = "VmData" , - *VmStkLine = "VmStk" , - *VmExeLine = "VmExe" ; + *NameLine = "Name:", *VmSizeLine = "VmSize:", *VmRSSLine = "VmRSS", *VmDataLine = "VmData", *VmStkLine = "VmStk", *VmExeLine = "VmExe"; const int - NameLineLen = strlen ( NameLine ) , - VmSizeLineLen = strlen ( VmSizeLine ) , - VmDataLineLen = strlen ( VmDataLine ) , - VmStkLineLen = strlen ( VmStkLine ) , - VmExeLineLen = strlen ( VmExeLine ) , - VmRSSLineLen = strlen ( VmRSSLine ) ; + NameLineLen = strlen (NameLine), VmSizeLineLen = strlen (VmSizeLine), VmDataLineLen = strlen (VmDataLine), VmStkLineLen = strlen (VmStkLine), VmExeLineLen = strlen (VmExeLine), VmRSSLineLen = strlen (VmRSSLine); + - int threshold = 400, unique; int i; proc_mem_info *p; - LL * procs; + LL *procs; static int first = 1; - if(first) - { + if (first) { first = 0; - sock_send_string(sock, "screen_add S\n"); - sprintf(buffer, "screen_set S -name {Top Memory Use: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add S title title\n"); - sprintf(buffer, "widget_set S title {TOP MEM: %s}\n", host); - sock_send_string(sock, buffer); - sock_send_string(sock, "widget_add S f frame\n"); - if(lcd_hgt >= 4) - sock_send_string(sock, "widget_set S f 1 2 20 4 20 5 v 8\n"); + sock_send_string (sock, "screen_add S\n"); + sprintf (buffer, "screen_set S -name {Top Memory Use: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add S title title\n"); + sprintf (buffer, "widget_set S title {TOP MEM: %s}\n", host); + sock_send_string (sock, buffer); + sock_send_string (sock, "widget_add S f frame\n"); + if (lcd_hgt >= 4) + sock_send_string (sock, "widget_set S f 1 2 20 4 20 5 v 8\n"); else - sock_send_string(sock, "widget_set S f 1 2 20 2 20 5 v 16\n"); - for(i=1; i<=5; i++) - { - sprintf(buffer, "widget_add S %i string -in f\n", i); - sock_send_string(sock, buffer); + sock_send_string (sock, "widget_set S f 1 2 20 2 20 5 v 16\n"); + for (i = 1; i <= 5; i++) { + sprintf (buffer, "widget_add S %i string -in f\n", i); + sock_send_string (sock, buffer); } - sock_send_string(sock, "widget_set S 1 1 1 Checking...\n"); + sock_send_string (sock, "widget_set S 1 1 1 Checking...\n"); } - - procs = LL_new(); - if(!procs) - { - fprintf(stderr, "mem_top_screen: Error allocating list\n"); + + procs = LL_new (); + if (!procs) { + fprintf (stderr, "mem_top_screen: Error allocating list\n"); return -1; } - - if ( ( proc = opendir ( "/proc" ) ) == NULL ) - { - fprintf ( stderr , "mem_top_screen: unable to open /proc" ) ; - perror ( "" ) ; + + if ((proc = opendir ("/proc")) == NULL) { + fprintf (stderr, "mem_top_screen: unable to open /proc"); + perror (""); return -1; } - while ( (procdir = readdir ( proc )) ) - { - if ( !index ( "1234567890" , procdir -> d_name [0] ) ) - { - continue ; + while ((procdir = readdir (proc))) { + if (!index ("1234567890", procdir->d_name[0])) { + continue; } - sprintf ( buf , "/proc/%s/status" , procdir -> d_name ) ; - if ( ( StatusFile = fopen ( buf , "r" ) ) == NULL ) - { + sprintf (buf, "/proc/%s/status", procdir->d_name); + if ((StatusFile = fopen (buf, "r")) == NULL) { // Not a serious error; process has finished before we could // examine it: - //fprintf ( stderr , "mem_top_screen: cannot open %s for reading" , - // buf ) ; - //perror ( "" ) ; - continue ; + //fprintf ( stderr , "mem_top_screen: cannot open %s for reading" , + // buf ) ; + //perror ( "" ) ; + continue; } - procRSS = procSize = procData = procStk = procExe = 0 ; - while ( fgets ( buf , sizeof ( buf ) , StatusFile ) ) - { - if ( !strncmp ( buf , NameLine , NameLineLen ) ) - { - /* Name: procName */ - sscanf ( buf , "%*s %s" , procName ) ; - } - else if ( !strncmp ( buf , VmSizeLine , VmSizeLineLen ) ) - { - /* VmSize: procSize kB */ - sscanf ( buf , "%*s %d" , &procSize ) ; - } - else if ( !strncmp ( buf , VmRSSLine , VmRSSLineLen ) ) - { - /* VmRSS: procRSS kB */ - sscanf ( buf , "%*s %d" , &procRSS ) ; - } - else if ( !strncmp ( buf , VmDataLine , VmDataLineLen ) ) - { - /* VmData: procData kB */ - sscanf ( buf , "%*s %d" , &procData ) ; - } - else if ( !strncmp ( buf , VmStkLine , VmStkLineLen ) ) - { - /* VmStk: procStk kB */ - sscanf ( buf , "%*s %d" , &procStk ) ; - } - else if ( !strncmp ( buf , VmExeLine , VmExeLineLen ) ) - { - /* VmExe: procExe kB */ - sscanf ( buf , "%*s %d" , &procExe ) ; - } + procRSS = procSize = procData = procStk = procExe = 0; + while (fgets (buf, sizeof (buf), StatusFile)) { + if (!strncmp (buf, NameLine, NameLineLen)) { + /* Name: procName */ + sscanf (buf, "%*s %s", procName); + } else if (!strncmp (buf, VmSizeLine, VmSizeLineLen)) { + /* VmSize: procSize kB */ + sscanf (buf, "%*s %d", &procSize); + } else if (!strncmp (buf, VmRSSLine, VmRSSLineLen)) { + /* VmRSS: procRSS kB */ + sscanf (buf, "%*s %d", &procRSS); + } else if (!strncmp (buf, VmDataLine, VmDataLineLen)) { + /* VmData: procData kB */ + sscanf (buf, "%*s %d", &procData); + } else if (!strncmp (buf, VmStkLine, VmStkLineLen)) { + /* VmStk: procStk kB */ + sscanf (buf, "%*s %d", &procStk); + } else if (!strncmp (buf, VmExeLine, VmExeLineLen)) { + /* VmExe: procExe kB */ + sscanf (buf, "%*s %d", &procExe); + } } - fclose ( StatusFile ) ; - if(procSize > threshold) - { + fclose (StatusFile); + if (procSize > threshold) { // Figure out if it's sharing any memory... unique = 1; - LL_Rewind(procs); + LL_Rewind (procs); do { - p = LL_Get(procs); - if(p) - { - if(0 == strcmp(p->name, procName)) - { + p = LL_Get (procs); + if (p) { + if (0 == strcmp (p->name, procName)) { unique = 0; - p->number ++; + p->number++; p->totl += procData + procStk + procExe; } } - } while(LL_Next(procs) == 0); + } while (LL_Next (procs) == 0); // If this is the first one by this name... - if(unique) - { - p = malloc(sizeof(proc_mem_info)); - if(!p) - { - fprintf(stderr, - "mem_top_screen: Error allocating process entry\n"); - goto end; // Ack! I hate goto's! + if (unique) { + p = malloc (sizeof (proc_mem_info)); + if (!p) { + fprintf (stderr, "mem_top_screen: Error allocating process entry\n"); + goto end; // Ack! I hate goto's! } - strcpy(p->name, procName); + strcpy (p->name, procName); p->size = procSize; p->totl = procData + procStk + procExe; p->number = 1; // TODO: Check for errors here? - LL_Push(procs, (void *)p); + LL_Push (procs, (void *) p); } } - + } - closedir ( proc ) ; + closedir (proc); // Now, print some info... - LL_Rewind(procs); - LL_Sort(procs, sort_procs); - LL_Rewind(procs); - for(i=1; i<=5; i++) - { - p = LL_Get(procs); - if(p) - { + LL_Rewind (procs); + LL_Sort (procs, sort_procs); + LL_Rewind (procs); + for (i = 1; i <= 5; i++) { + p = LL_Get (procs); + if (p) { //printf("Mem hog: %s: %ik\n", p->name, p->size); - if(p->number > 1) - sprintf(buffer, "widget_set S %i 1 %i {%i%6ik %s(%i)}\n", i, i, i, - p->totl, p->name, p->number); + if (p->number > 1) + sprintf (buffer, "widget_set S %i 1 %i {%i%6ik %s(%i)}\n", i, i, i, p->totl, p->name, p->number); else - sprintf(buffer, "widget_set S %i 1 %i {%i%6ik %s}\n", i, i, i, - p->totl, p->name); - if(display) sock_send_string(sock, buffer); - } - else - { + sprintf (buffer, "widget_set S %i 1 %i {%i%6ik %s}\n", i, i, i, p->totl, p->name); + if (display) + sock_send_string (sock, buffer); + } else { //printf("Mem hog: none?\n"); - sprintf(buffer, "widget_set S %i 1 %i {}\n", i, i); - if(display) sock_send_string(sock, buffer); + sprintf (buffer, "widget_set S %i 1 %i {}\n", i, i); + if (display) + sock_send_string (sock, buffer); } - LL_Next(procs); + LL_Next (procs); } - - - end: // Ack! I hate using labels! + + + end: // Ack! I hate using labels! // Now clean it all up... - LL_Rewind(procs); + LL_Rewind (procs); do { - p = (proc_mem_info *)LL_Get(procs); - if(p) - { + p = (proc_mem_info *) LL_Get (procs); + if (p) { //printf("Proc: %6ik %s\n", p->size, p->name); - free(p); + free (p); } - } while(LL_Next(procs) == 0); - LL_Destroy(procs); + } while (LL_Next (procs) == 0); + LL_Destroy (procs); return 0; - -} // End mem_top_screen() +} // End mem_top_screen() diff --git a/clients/lcdproc/mem.h b/clients/lcdproc/mem.h index 3bc1e43..ffa5fc5 100644 --- a/clients/lcdproc/mem.h +++ b/clients/lcdproc/mem.h @@ -1,11 +1,11 @@ #ifndef MEM_H #define MEM_H -int mem_init(); -int mem_close(); +int mem_init (); +int mem_close (); -int mem_screen(int rep, int display); -int mem_top_screen(int rep, int display); +int mem_screen (int rep, int display); +int mem_top_screen (int rep, int display); #endif diff --git a/clients/lcdproc/mode.c b/clients/lcdproc/mode.c index 1553056..2ca7b4a 100644 --- a/clients/lcdproc/mode.c +++ b/clients/lcdproc/mode.c @@ -30,205 +30,229 @@ #include "mem.h" -int ELLIPSIS='-'; +int ELLIPSIS = '-'; // TODO: Clean this up... Support multiple display sizes.. char buffer[1024]; char host[16]; -void reread(int f, char *errmsg); -int getentry(const char *tag, const char *bufptr); +void reread (int f, char *errmsg); +int getentry (const char *tag, const char *bufptr); -int mode_init(mode *sequence) +int +mode_init (mode * sequence) { int i; struct utsname Uname; // Grab the host name - if(0 > uname(&Uname)) - { - perror("Can't get hostname"); - strcpy(host, "host"); - } - else - { - strncpy(host, Uname.nodename, 15); - host[16]=0; - if(index(host,'.')) // truncate at the first dot - *(index(host, '.'))='\0'; - for(i=0; i<16; i++) - if(host[i] == '\n') host[i]=0; + if (0 > uname (&Uname)) { + perror ("Can't get hostname"); + strcpy (host, "host"); + } else { + strncpy (host, Uname.nodename, 15); + host[16] = 0; + if (index (host, '.')) // truncate at the first dot + *(index (host, '.')) = '\0'; + for (i = 0; i < 16; i++) + if (host[i] == '\n') + host[i] = 0; } // Init all the modescreens we need - for(i=0; sequence[i].which > 1; i++) - { - switch(sequence[i].which) - { - case 'g': - case 'G': // cpu_graph_screen - cpu_init(); - break; - case 'c': - case 'C': // cpu_screen - cpu_init(); - break; - case 'o': - case 'O': // clock_screen - chrono_init(); - break; - case 'k': - case 'K': // big_clock_screen - chrono_init(); - break; - case 'm': - case 'M': // mem_screen - mem_init(); - break; - case 's': - case 'S': // mem_info_screen - mem_init(); - break; - case 'u': - case 'U': // uptime_screen - chrono_init(); - break; - case 't': - case 'T': // time_screen - chrono_init(); - break; - case 'd': - case 'D': // disk_screen - disk_init(); - break; - case 'x': - case 'X': // xload_screen - load_init(); - break; - case 'b': - case 'B': // battery_screen - batt_init(); - break; - case 'a': - case 'A': // credit_screen - break; - case 'p': - case 'P': // cpu_smp_screen - cpu_smp_init (); - break; - default: break; + for (i = 0; sequence[i].which > 1; i++) { + switch (sequence[i].which) { + case 'g': + case 'G': // cpu_graph_screen + cpu_init (); + break; + case 'c': + case 'C': // cpu_screen + cpu_init (); + break; + case 'o': + case 'O': // clock_screen + chrono_init (); + break; + case 'k': + case 'K': // big_clock_screen + chrono_init (); + break; + case 'm': + case 'M': // mem_screen + mem_init (); + break; + case 's': + case 'S': // mem_info_screen + mem_init (); + break; + case 'u': + case 'U': // uptime_screen + chrono_init (); + break; + case 't': + case 'T': // time_screen + chrono_init (); + break; + case 'd': + case 'D': // disk_screen + disk_init (); + break; + case 'x': + case 'X': // xload_screen + load_init (); + break; + case 'b': + case 'B': // battery_screen + batt_init (); + break; + case 'a': + case 'A': // credit_screen + break; + case 'p': + case 'P': // cpu_smp_screen + cpu_smp_init (); + break; + default: + break; } } - - - return 0; + + + return 0; } -void mode_close() +void +mode_close () { - batt_close(); - chrono_close(); - cpu_close(); - disk_close(); - load_close(); - mem_close(); + batt_close (); + chrono_close (); + cpu_close (); + disk_close (); + load_close (); + mem_close (); cpu_smp_close (); } -int update_screen(mode *m, int display) +int +update_screen (mode * m, int display) { static int status = -1; int old_status = status; - - if(m) - { - switch(m->which) - { - case 'g': - case 'G': status = cpu_graph_screen(m->timer, display); break; - case 'c': - case 'C': status = cpu_screen(m->timer, display); break; - case 'o': - case 'O': status = clock_screen(m->timer, display); break; - case 'k': - case 'K': status = big_clock_screen(m->timer, display); break; - case 'm': - case 'M': status = mem_screen(m->timer, display); break; - case 's': - case 'S': status = mem_top_screen(m->timer, display); break; - case 'u': - case 'U': status = uptime_screen(m->timer, display); break; - case 't': - case 'T': status = time_screen(m->timer, display); break; - case 'd': - case 'D': status = disk_screen(m->timer, display); break; - case 'x': - case 'X': status = xload_screen(m->timer, display); break; - case 'b': - case 'B': status = battery_screen(m->timer, display); break; - case 'a': - case 'A': status = credit_screen(m->timer, display); break; - case 'p': - case 'P': status = cpu_smp_screen (m->timer, display); break; - default: break; + + if (m) { + switch (m->which) { + case 'g': + case 'G': + status = cpu_graph_screen (m->timer, display); + break; + case 'c': + case 'C': + status = cpu_screen (m->timer, display); + break; + case 'o': + case 'O': + status = clock_screen (m->timer, display); + break; + case 'k': + case 'K': + status = big_clock_screen (m->timer, display); + break; + case 'm': + case 'M': + status = mem_screen (m->timer, display); + break; + case 's': + case 'S': + status = mem_top_screen (m->timer, display); + break; + case 'u': + case 'U': + status = uptime_screen (m->timer, display); + break; + case 't': + case 'T': + status = time_screen (m->timer, display); + break; + case 'd': + case 'D': + status = disk_screen (m->timer, display); + break; + case 'x': + case 'X': + status = xload_screen (m->timer, display); + break; + case 'b': + case 'B': + status = battery_screen (m->timer, display); + break; + case 'a': + case 'A': + status = credit_screen (m->timer, display); + break; + case 'p': + case 'P': + status = cpu_smp_screen (m->timer, display); + break; + default: + break; } /* Debugging tool... - if(display) - { - printf("Displayed Mode %c\n", m->which); - } - */ + if(display) + { + printf("Displayed Mode %c\n", m->which); + } + */ } - - if(status != old_status) - { - if(status == BACKLIGHT_OFF) - { - sock_send_string(sock, "backlight off\n"); + + if (status != old_status) { + if (status == BACKLIGHT_OFF) { + sock_send_string (sock, "backlight off\n"); } - if(status == BACKLIGHT_ON) - { - sock_send_string(sock, "backlight on\n"); + if (status == BACKLIGHT_ON) { + sock_send_string (sock, "backlight on\n"); } - if(status == BLINK_ON) - { - sock_send_string(sock, "backlight blink\n"); + if (status == BLINK_ON) { + sock_send_string (sock, "backlight blink\n"); } - } + } return status; } -void reread(int f, char *errmsg) +void +reread (int f, char *errmsg) { - if (lseek(f, 0L, 0) == 0 && read(f, buffer, sizeof(buffer) - 1 ) > 0 ) - return; - perror(errmsg); - exit(1); + if (lseek (f, 0L, 0) == 0 && read (f, buffer, sizeof (buffer) - 1) > 0) + return; + perror (errmsg); + exit (1); } -int getentry(const char *tag, const char *bufptr) +int +getentry (const char *tag, const char *bufptr) { - char *tail; - int retval, len = strlen(tag); + char *tail; + int retval, len = strlen (tag); - while (bufptr) - { - if (*bufptr == '\n') bufptr++; - if (!strncmp(tag, bufptr, len)) - { - retval = strtol(bufptr + len, &tail, 10); - if (tail == bufptr + len) return -1; - else return retval; - } - bufptr = strchr( bufptr, '\n'); - } - return -1; + while (bufptr) { + if (*bufptr == '\n') + bufptr++; + if (!strncmp (tag, bufptr, len)) { + retval = strtol (bufptr + len, &tail, 10); + if (tail == bufptr + len) + return -1; + else + return retval; + } + bufptr = strchr (bufptr, '\n'); + } + return -1; } @@ -246,44 +270,31 @@ char tmp[1024]; //////////////////////////////////////////////////////////////////////// // Credit Screen shows who wrote this... // -int credit_screen(int rep, int display) +int +credit_screen (int rep, int display) { static int first = 1; - - if(first) - { + + if (first) { first = 0; - - sock_send_string(sock, "screen_add A\n"); - sock_send_string(sock, - "screen_set A -name {Credits for LCDproc}\n"); - sock_send_string(sock, "widget_add A title title\n"); - sprintf(tmp, "widget_set A title {LCDPROC %s}\n", version); - sock_send_string(sock, tmp); - if(lcd_hgt >= 4) - { - sock_send_string(sock, "widget_add A one string\n"); - sock_send_string(sock, "widget_add A two string\n"); - sock_send_string(sock, "widget_add A three string\n"); - sock_send_string(sock, - "widget_set A one 1 2 { for Linux }\n"); - sock_send_string(sock, - "widget_set A two 1 3 { by William Ferrell}\n"); - sock_send_string(sock, - "widget_set A three 1 4 { and Scott Scriven}\n"); - } - else - { - sock_send_string(sock, "widget_add A text scroller\n"); - sock_send_string(sock, - "widget_set A text 1 2 20 2 v 8 { for Linux by William Ferrell and Scott Scriven}\n"); + + sock_send_string (sock, "screen_add A\n"); + sock_send_string (sock, "screen_set A -name {Credits for LCDproc}\n"); + sock_send_string (sock, "widget_add A title title\n"); + sprintf (tmp, "widget_set A title {LCDPROC %s}\n", version); + sock_send_string (sock, tmp); + if (lcd_hgt >= 4) { + sock_send_string (sock, "widget_add A one string\n"); + sock_send_string (sock, "widget_add A two string\n"); + sock_send_string (sock, "widget_add A three string\n"); + sock_send_string (sock, "widget_set A one 1 2 { for Linux }\n"); + sock_send_string (sock, "widget_set A two 1 3 { by William Ferrell}\n"); + sock_send_string (sock, "widget_set A three 1 4 { and Scott Scriven}\n"); + } else { + sock_send_string (sock, "widget_add A text scroller\n"); + sock_send_string (sock, "widget_set A text 1 2 20 2 v 8 { for Linux by William Ferrell and Scott Scriven}\n"); } } return 0; -} // End credit_screen() - - - - - +} // End credit_screen() diff --git a/clients/lcdproc/mode.h b/clients/lcdproc/mode.h index 24fd72c..ce44108 100644 --- a/clients/lcdproc/mode.h +++ b/clients/lcdproc/mode.h @@ -16,16 +16,16 @@ extern int PAD; // Character for the "..." symbol. extern int ELLIPSIS; -int mode_init(mode *sequence); -void mode_close(); +int mode_init (mode * sequence); +void mode_close (); -int update_screen(mode *m, int display); +int update_screen (mode * m, int display); -int credit_screen(int rep, int display); +int credit_screen (int rep, int display); // These are for the modescreens' use only.. -void reread(int f, char *errmsg); -int getentry(const char *tag, const char *bufptr); +void reread (int f, char *errmsg); +int getentry (const char *tag, const char *bufptr); #endif diff --git a/server/client_data.c b/server/client_data.c index af6a3a3..c83cf9e 100644 --- a/server/client_data.c +++ b/server/client_data.c @@ -19,71 +19,69 @@ -int client_data_init(client_data *d) +int +client_data_init (client_data * d) { - if(!d) return -1; + if (!d) + return -1; d->ack = 0; d->name = NULL; - d->screenlist = LL_new(); - if(!d->screenlist) - { - fprintf(stderr, "client_data_init: Error allocating screenlist\n"); + d->screenlist = LL_new (); + if (!d->screenlist) { + fprintf (stderr, "client_data_init: Error allocating screenlist\n"); return -1; } /* TODO: this section... (client menus) - d->menulist = LL_new(); - if(!d->menulist) - { + d->menulist = LL_new(); + if(!d->menulist) + { fprintf(stderr, "client_data_init: Error allocating menulist\n"); return -1; - } - */ + } + */ return 0; } -int client_data_destroy(client_data *d) +int +client_data_destroy (client_data * d) { screen *s; - debug("client_data_destroy\n"); - - if(!d) return -1; + debug ("client_data_destroy\n"); + + if (!d) + return -1; d->ack = 0; // Clean up the name... - if(d->name) - free(d->name); + if (d->name) + free (d->name); // Clean up the screenlist... - debug("client_data_destroy: Cleaning screenlist\n"); - LL_Rewind(d->screenlist); + debug ("client_data_destroy: Cleaning screenlist\n"); + LL_Rewind (d->screenlist); do { - s = (screen *)LL_Get(d->screenlist); - if(s) - { - debug("client_data_destroy: removing screen %s\n", s->id); + s = (screen *) LL_Get (d->screenlist); + if (s) { + debug ("client_data_destroy: removing screen %s\n", s->id); // FIXME? This shouldn't be handled here... // Now, remove it from the screenlist... - if(screenlist_remove_all(s) < 0) - { + if (screenlist_remove_all (s) < 0) { // Not a serious error.. - fprintf(stderr, "client_data_destroy: Error dequeueing screen\n"); + fprintf (stderr, "client_data_destroy: Error dequeueing screen\n"); return 0; } - // Free its memory... - screen_destroy(s); + screen_destroy (s); } - } while(LL_Next(d->screenlist) == 0); - LL_Destroy(d->screenlist); - + } while (LL_Next (d->screenlist) == 0); + LL_Destroy (d->screenlist); + // TODO: clean up the rest of the data... return 0; } - - diff --git a/server/client_data.h b/server/client_data.h index 90d607f..cb8f069 100644 --- a/server/client_data.h +++ b/server/client_data.h @@ -6,21 +6,20 @@ #define CLIENT_NAME_SIZE 256 -typedef struct client_data -{ - int ack; - char *name; - // and other stuff... doesn't matter yet - LL * screenlist; - // list of accepted keys... (?) - LL * menulist; - +typedef struct client_data { + int ack; + char *name; + // and other stuff... doesn't matter yet + LL *screenlist; + // list of accepted keys... (?) + LL *menulist; + } client_data; // sets up an existing (empty) client_data struct -int client_data_init(client_data *d); +int client_data_init (client_data * d); // destroys members of a client's data -int client_data_destroy(client_data *d); +int client_data_destroy (client_data * d); #endif diff --git a/server/client_functions.c b/server/client_functions.c index 083f1b2..ab37871 100644 --- a/server/client_functions.c +++ b/server/client_functions.c @@ -30,7 +30,7 @@ client_function commands[] = { - {"test_func", test_func_func }, + {"test_func", test_func_func}, {"hello", hello_func}, {"client_set", client_set_func}, {"client_add_key", client_add_key_func}, @@ -51,7 +51,7 @@ client_function commands[] = { // Misc stuff... {"backlight", backlight_func}, {"output", output_func}, - {NULL, NULL }, + {NULL, NULL}, }; @@ -61,16 +61,16 @@ client_function commands[] = { /////////////////////////////////////////////////////////////////////////// // Debugging only.. prints out a list of arguments it receives // -int test_func_func(client *c, int argc, char **argv) +int +test_func_func (client * c, int argc, char **argv) { int i; char str[256]; - - for(i=0; i %s\n", i, argv[i]); - printf(str); - sock_send_string(c->sock, str); + + for (i = 0; i < argc; i++) { + sprintf (str, "test_func_func: %i -> %s\n", i, argv[i]); + printf (str); + sock_send_string (c->sock, str); } return 0; } @@ -81,65 +81,58 @@ int test_func_func(client *c, int argc, char **argv) // // It returns a string of info about the server to the client // -int hello_func(client *c, int argc, char **argv) +int +hello_func (client * c, int argc, char **argv) { char str[256]; // TODO: Give *real* info about the server/lcd... - - debug("Hello!\n"); - sprintf(str, - "connect LCDproc %s protocol %s lcd wid %i hgt %i cellwid %i cellhgt %i\n", - version, protocol_version, - lcd.wid, lcd.hgt, lcd.cellwid, lcd.cellhgt); - sock_send_string(c->sock, str); + debug ("Hello!\n"); - if(c->data) + sprintf (str, "connect LCDproc %s protocol %s lcd wid %i hgt %i cellwid %i cellhgt %i\n", version, protocol_version, lcd.wid, lcd.hgt, lcd.cellwid, lcd.cellhgt); + sock_send_string (c->sock, str); + + if (c->data) c->data->ack = 1; - + return 0; } /////////////////////////////////////////////////////////////////////////// // sets info about the client, such as its name // -int client_set_func(client *c, int argc, char **argv) +int +client_set_func (client * c, int argc, char **argv) { int i; - if(!c->data->ack) return 1; - - for(i=1; idata->ack) + return 1; + + for (i = 1; i < argc; i++) { // Handle the "name" parameter - if(0 == strcmp(argv[i], "-name")) - { - if(argc > i+1) - { + if (0 == strcmp (argv[i], "-name")) { + if (argc > i + 1) { i++; - debug("client_set: name=\"%s\"\n", argv[i]); + debug ("client_set: name=\"%s\"\n", argv[i]); // set the name... - if(c->data->name) - free(c->data->name); - c->data->name = strdup(argv[i]); + if (c->data->name) + free (c->data->name); + c->data->name = strdup (argv[i]); + } else { + sock_send_string (c->sock, "huh? name requires a parameter\n"); } - else - { - sock_send_string(c->sock, "huh? name requires a parameter\n"); - } - } - else - { - sock_send_string(c->sock, "huh? invalid parameter\n"); + } else { + sock_send_string (c->sock, "huh? invalid parameter\n"); } } // If there were no parameters... - if(argc == 1) - sock_send_string(c->sock, "huh? What do you want to set?\n"); - + if (argc == 1) + sock_send_string (c->sock, "huh? What do you want to set?\n"); + return 0; } @@ -147,14 +140,16 @@ int client_set_func(client *c, int argc, char **argv) // Tells the server the client would like to accept keypresses // of a particular type // -int client_add_key_func(client *c, int argc, char **argv) +int +client_add_key_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } @@ -162,78 +157,78 @@ int client_add_key_func(client *c, int argc, char **argv) // Tells the server the client would NOT like to accept keypresses // of a particular type // -int client_del_key_func(client *c, int argc, char **argv) +int +client_del_key_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Tells the server the client has another screen to offer // -int screen_add_func(client *c, int argc, char **argv) +int +screen_add_func (client * c, int argc, char **argv) { - int err=0; - - if(!c->data->ack) return 1; - - if(argc < 2) - { - sock_send_string(c->sock, "huh? Specify a screen #id\n"); + int err = 0; + + if (!c->data->ack) + return 1; + + if (argc < 2) { + sock_send_string (c->sock, "huh? Specify a screen #id\n"); return 0; } - if(argc > 2) - { - sock_send_string(c->sock, "huh? Too many parameters...\n"); + if (argc > 2) { + sock_send_string (c->sock, "huh? Too many parameters...\n"); return 0; } - debug("screen_add: Adding screen %s\n", argv[1]); - err = screen_add(c, argv[1]); - if(err < 0) - fprintf(stderr, "screen_add_func: Error adding screen\n"); - if(err > 0) - sock_send_string(c->sock, - "huh? You already have a screen with that id#\n"); - + debug ("screen_add: Adding screen %s\n", argv[1]); + err = screen_add (c, argv[1]); + if (err < 0) + fprintf (stderr, "screen_add_func: Error adding screen\n"); + if (err > 0) + sock_send_string (c->sock, "huh? You already have a screen with that id#\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Client requests that the server forget about a screen // -int screen_del_func(client *c, int argc, char **argv) +int +screen_del_func (client * c, int argc, char **argv) { - int err=0; - - if(!c->data->ack) return 1; - - if(argc < 2) - { - sock_send_string(c->sock, "huh? Specify a screen #id\n"); + int err = 0; + + if (!c->data->ack) + return 1; + + if (argc < 2) { + sock_send_string (c->sock, "huh? Specify a screen #id\n"); return 0; } - if(argc > 2) - { - sock_send_string(c->sock, "huh? Too many parameters...\n"); + if (argc > 2) { + sock_send_string (c->sock, "huh? Too many parameters...\n"); return 0; } - debug("screen_del: Deleting screen %s\n", argv[1]); - err = screen_remove(c, argv[1]); - if(err < 0) - fprintf(stderr, "screen_del_func: Error removing screen\n"); - if(err > 0) - sock_send_string(c->sock, - "huh? You don't have a screen with that id#\n"); - + debug ("screen_del: Deleting screen %s\n", argv[1]); + err = screen_remove (c, argv[1]); + if (err < 0) + fprintf (stderr, "screen_del_func: Error removing screen\n"); + if (err > 0) + sock_send_string (c->sock, "huh? You don't have a screen with that id#\n"); + return 0; } @@ -241,166 +236,137 @@ int screen_del_func(client *c, int argc, char **argv) // Configures info about a particular screen, such as its // name, priority, or duration // -int screen_set_func(client *c, int argc, char **argv) +int +screen_set_func (client * c, int argc, char **argv) { int i; int number; char *id; screen *s; - - if(!c->data->ack) return 1; - + if (!c->data->ack) + return 1; + + // If there weren't enough parameters... - if(argc < 2) - { - sock_send_string(c->sock, "huh? You must specify a screen id\n"); + if (argc < 2) { + sock_send_string (c->sock, "huh? You must specify a screen id\n"); return 0; } - - if(argc == 2) - { - sock_send_string(c->sock, "huh? What do you want to set?\n"); + + if (argc == 2) { + sock_send_string (c->sock, "huh? What do you want to set?\n"); return 0; } - + id = argv[1]; - s = screen_find(c, id); - if(!s) - { - sock_send_string(c->sock, "huh? Invalid screen id\n"); + s = screen_find (c, id); + if (!s) { + sock_send_string (c->sock, "huh? Invalid screen id\n"); return 0; } - // Handle the rest of the parameters - for(i=2; i i+1) - { + if (0 == strcmp (argv[i], "-name")) { + if (argc > i + 1) { i++; - debug("screen_set: name=\"%s\"\n", argv[i]); + debug ("screen_set: name=\"%s\"\n", argv[i]); // set the name... - if(s->name) - free(s->name); - s->name = strdup(argv[i]); - } - else - { - sock_send_string(c->sock, "huh? -name requires a parameter\n"); + if (s->name) + free (s->name); + s->name = strdup (argv[i]); + } else { + sock_send_string (c->sock, "huh? -name requires a parameter\n"); } } // Handle the "priority" parameter - else if(0 == strcmp(argv[i], "-priority")) - { - if(argc > i+1) - { + else if (0 == strcmp (argv[i], "-priority")) { + if (argc > i + 1) { i++; - debug("screen_set: priority=\"%s\"\n", argv[i]); + debug ("screen_set: priority=\"%s\"\n", argv[i]); // set the priority... - number = atoi(argv[i]); - if(number > 0) + number = atoi (argv[i]); + if (number > 0) s->priority = number; - } - else - { - sock_send_string(c->sock, "huh? -priority requires a parameter\n"); + } else { + sock_send_string (c->sock, "huh? -priority requires a parameter\n"); } } // Handle the "duration" parameter - else if(0 == strcmp(argv[i], "-duration")) - { - if(argc > i+1) - { + else if (0 == strcmp (argv[i], "-duration")) { + if (argc > i + 1) { i++; - debug("screen_set: duration=\"%s\"\n", argv[i]); + debug ("screen_set: duration=\"%s\"\n", argv[i]); // set the duration... - number = atoi(argv[i]); - if(number > 0) + number = atoi (argv[i]); + if (number > 0) s->duration = number; - } - else - { - sock_send_string(c->sock, "huh? -duration requires a parameter\n"); + } else { + sock_send_string (c->sock, "huh? -duration requires a parameter\n"); } } // Handle the "heartbeat" parameter - else if(0 == strcmp(argv[i], "-heartbeat")) - { - if(argc > i+1) - { + else if (0 == strcmp (argv[i], "-heartbeat")) { + if (argc > i + 1) { i++; - debug("screen_set: heartbeat=\"%s\"\n", argv[i]); + debug ("screen_set: heartbeat=\"%s\"\n", argv[i]); // set the heartbeat type... - if(0 == strcmp(argv[i], "on")) + if (0 == strcmp (argv[i], "on")) s->heartbeat = 1; - if(0 == strcmp(argv[i], "heart")) + if (0 == strcmp (argv[i], "heart")) s->heartbeat = 1; - if(0 == strcmp(argv[i], "normal")) + if (0 == strcmp (argv[i], "normal")) s->heartbeat = 1; - if(0 == strcmp(argv[i], "default")) + if (0 == strcmp (argv[i], "default")) s->heartbeat = 1; - if(0 == strcmp(argv[i], "off")) + if (0 == strcmp (argv[i], "off")) s->heartbeat = 0; - if(0 == strcmp(argv[i], "none")) + if (0 == strcmp (argv[i], "none")) s->heartbeat = 0; - if(0 == strcmp(argv[i], "slash")) + if (0 == strcmp (argv[i], "slash")) s->heartbeat = 2; - } - else - { - sock_send_string(c->sock, "huh? -heartbeat requires a parameter\n"); + } else { + sock_send_string (c->sock, "huh? -heartbeat requires a parameter\n"); } } // Handle the "wid" parameter - else if(0 == strcmp(argv[i], "-wid")) - { - if(argc > i+1) - { + else if (0 == strcmp (argv[i], "-wid")) { + if (argc > i + 1) { i++; - debug("screen_set: wid=\"%s\"\n", argv[i]); + debug ("screen_set: wid=\"%s\"\n", argv[i]); // set the duration... - number = atoi(argv[i]); - if(number > 0) + number = atoi (argv[i]); + if (number > 0) s->wid = number; - } - else - { - sock_send_string(c->sock, "huh? -wid requires a parameter\n"); + } else { + sock_send_string (c->sock, "huh? -wid requires a parameter\n"); } } // Handle the "hgt" parameter - else if(0 == strcmp(argv[i], "-hgt")) - { - if(argc > i+1) - { + else if (0 == strcmp (argv[i], "-hgt")) { + if (argc > i + 1) { i++; - debug("screen_set: hgt=\"%s\"\n", argv[i]); + debug ("screen_set: hgt=\"%s\"\n", argv[i]); // set the duration... - number = atoi(argv[i]); - if(number > 0) + number = atoi (argv[i]); + if (number > 0) s->hgt = number; + } else { + sock_send_string (c->sock, "huh? -hgt requires a parameter\n"); } - else - { - sock_send_string(c->sock, "huh? -hgt requires a parameter\n"); - } + } else { + sock_send_string (c->sock, "huh? invalid parameter\n"); } - else - { - sock_send_string(c->sock, "huh? invalid parameter\n"); - } - } // done checking argv + } // done checking argv return 0; } @@ -408,7 +374,8 @@ int screen_set_func(client *c, int argc, char **argv) /////////////////////////////////////////////////////////////////////////// // Adds a widget to a screen, but doesn't give it a value // -int widget_add_func(client *c, int argc, char **argv) +int +widget_add_func (client * c, int argc, char **argv) { int err; @@ -418,116 +385,105 @@ int widget_add_func(client *c, int argc, char **argv) char *in = NULL; screen *s; - - if(!c->data->ack) return 1; - + if (!c->data->ack) + return 1; + + // If there weren't enough parameters... - if(argc < 2) - { - sock_send_string(c->sock, "huh? You must specify a screen id\n"); + if (argc < 2) { + sock_send_string (c->sock, "huh? You must specify a screen id\n"); return 0; } - if(argc < 3) - { - sock_send_string(c->sock, "huh? You must specify a widget id\n"); + if (argc < 3) { + sock_send_string (c->sock, "huh? You must specify a widget id\n"); return 0; } - if(argc < 4) - { - sock_send_string(c->sock, "huh? You must specify a widget type\n"); + if (argc < 4) { + sock_send_string (c->sock, "huh? You must specify a widget type\n"); return 0; } - if(argc > 6) - { - sock_send_string(c->sock, "huh? Too many parameters\n"); + if (argc > 6) { + sock_send_string (c->sock, "huh? Too many parameters\n"); return 0; } - + sid = argv[1]; wid = argv[2]; - s = screen_find(c, sid); - if(!s) - { - sock_send_string(c->sock, "huh? Invalid screen id\n"); + s = screen_find (c, sid); + if (!s) { + sock_send_string (c->sock, "huh? Invalid screen id\n"); return 0; } - + type = argv[3]; // Check for additional flags... - if(argc > 4) - { + if (argc > 4) { // Handle the "-in" flag to place widgets in a container... - if(0 == strcmp(argv[4], "-in")) - { - if(argc < 6) - { - sock_send_string(c->sock, - "huh? Specify a frame to place widget in\n"); + if (0 == strcmp (argv[4], "-in")) { + if (argc < 6) { + sock_send_string (c->sock, "huh? Specify a frame to place widget in\n"); return 0; } in = argv[5]; } } - // Add the widget and set its type... - err = widget_add(s, wid, type, in, c->sock); - if(err<0) - fprintf(stderr, "widget_add_func: Error adding widget\n"); - + err = widget_add (s, wid, type, in, c->sock); + if (err < 0) + fprintf (stderr, "widget_add_func: Error adding widget\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Removes a widget from a screen, and forgets about it // -int widget_del_func(client *c, int argc, char **argv) +int +widget_del_func (client * c, int argc, char **argv) { - int err=0; + int err = 0; char *sid; char *wid; screen *s; - - if(!c->data->ack) return 1; - + + if (!c->data->ack) + return 1; + // Check the number of parameters... - if(argc < 2) - { - sock_send_string(c->sock, "huh? Specify a screen #id\n"); + if (argc < 2) { + sock_send_string (c->sock, "huh? Specify a screen #id\n"); return 0; } - if(argc < 3) - { - sock_send_string(c->sock, "huh? Specify a widget #id\n"); + if (argc < 3) { + sock_send_string (c->sock, "huh? Specify a widget #id\n"); return 0; } - if(argc > 3) - { - sock_send_string(c->sock, "huh? Too many parameters...\n"); + if (argc > 3) { + sock_send_string (c->sock, "huh? Too many parameters...\n"); return 0; } sid = argv[1]; wid = argv[2]; - - debug("screen_del: Deleting widget %s.%s\n", sid, wid); - s = screen_find(c, sid); - if(!s) - { - sock_send_string(c->sock, "huh? Invalid screen id\n"); + debug ("screen_del: Deleting widget %s.%s\n", sid, wid); + + s = screen_find (c, sid); + if (!s) { + sock_send_string (c->sock, "huh? Invalid screen id\n"); } - - err = widget_remove(s, wid, c->sock); - if(err < 0) - fprintf(stderr, "widget_del_func: Error removing widget\n"); - + + err = widget_remove (s, wid, c->sock); + if (err < 0) + fprintf (stderr, "widget_del_func: Error removing widget\n"); + return 0; } @@ -536,7 +492,8 @@ int widget_del_func(client *c, int argc, char **argv) // contents, position, speed, etc... // // Ack! This is long! -int widget_set_func(client *c, int argc, char **argv) +int +widget_set_func (client * c, int argc, char **argv) { int i; @@ -548,325 +505,273 @@ int widget_set_func(client *c, int argc, char **argv) char *sid, *wid; screen *s; widget *w; - - if(!c->data->ack) return 1; - + if (!c->data->ack) + return 1; + + // If there weren't enough parameters... - if(argc < 2) - { - sock_send_string(c->sock, "huh? You must specify a screen id\n"); + if (argc < 2) { + sock_send_string (c->sock, "huh? You must specify a screen id\n"); return 0; } - if(argc < 3) - { - sock_send_string(c->sock, "huh? You must specify a widget id\n"); + if (argc < 3) { + sock_send_string (c->sock, "huh? You must specify a widget id\n"); return 0; } - if(argc < 4) - { - sock_send_string(c->sock, "huh? You must send some widget data\n"); + if (argc < 4) { + sock_send_string (c->sock, "huh? You must send some widget data\n"); return 0; } - - + + sid = argv[1]; wid = argv[2]; - s = screen_find(c, sid); - if(!s) - { - sock_send_string(c->sock, "huh? Invalid screen id\n"); + s = screen_find (c, sid); + if (!s) { + sock_send_string (c->sock, "huh? Invalid screen id\n"); return 0; } - w = widget_find(s, wid); - if(!w) - { - sock_send_string(c->sock, "huh? Invalid widget id\n"); + w = widget_find (s, wid); + if (!w) { + sock_send_string (c->sock, "huh? Invalid widget id\n"); // Client Debugging... { int i; - fprintf(stderr, "huh? Invalid widget id (%s)\n", wid); - for(i=0; itype) - { - case WID_STRING: // String takes "x y text" - if(argc != i+3) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else + switch (w->type) { + case WID_STRING: // String takes "x y text" + if (argc != i + 3) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else // Set all the data... { - if((!isdigit(argv[i][0])) || (!isdigit(argv[i+1][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else // Set all the data... - { - x = atoi(argv[i]); - y = atoi(argv[i+1]); - w->x = x; - w->y = y; - if(w->text) - free(w->text); - w->text = strdup(argv[i+2]); - if(!w->text) - { - fprintf(stderr, - "widget_set_func: Error allocating string\n"); - return -1; - } - debug("Widget %s set to %s\n", wid, w->text); - } - } - break; - case WID_HBAR: // Hbar takes "x y length" - if(argc != i+3) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else - { - if((!isdigit(argv[i][0])) || (!isdigit(argv[i+1][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else - { - x = atoi(argv[i]); - y = atoi(argv[i+1]); - length = atoi(argv[i+2]); - w->x = x; - w->y = y; - w->length = length; - } - debug("Widget %s set to %i\n", wid, w->length); - } - break; - case WID_VBAR: // Vbar takes "x y length" - if(argc != i+3) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else - { - if((!isdigit(argv[i][0])) || (!isdigit(argv[i+1][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else - { - x = atoi(argv[i]); - y = atoi(argv[i+1]); - length = atoi(argv[i+2]); - w->x = x; - w->y = y; - w->length = length; - } - debug("Widget %s set to %i\n", wid, w->length); - } - break; - case WID_ICON: // Icon takes "x y binary_data" - if(argc != i+3) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else - { - if((!isdigit(argv[i][0])) || (!isdigit(argv[i+1][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else - { - x = atoi(argv[i]); - y = atoi(argv[i+1]); - w->x = x; - w->y = y; - // TODO: Parse binary data and copy it to widget's data... - } - } - sock_send_string(c->sock, "huh? Widget type not yet implemented\n"); - break; - case WID_TITLE: // title takes "text" - if(argc != i+1) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else - { - if(w->text) - free(w->text); - w->text = strdup(argv[i]); - if(!w->text) - { - fprintf(stderr, - "widget_set_func: Error allocating string\n"); + x = atoi (argv[i]); + y = atoi (argv[i + 1]); + w->x = x; + w->y = y; + if (w->text) + free (w->text); + w->text = strdup (argv[i + 2]); + if (!w->text) { + fprintf (stderr, "widget_set_func: Error allocating string\n"); return -1; } - debug("Widget %s set to %s\n", wid, w->text); + debug ("Widget %s set to %s\n", wid, w->text); } - break; - case WID_SCROLLER: // Scroller takes "left top right bottom direction speed text" - if(argc != i+7) { - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); + } + break; + case WID_HBAR: // Hbar takes "x y length" + if (argc != i + 3) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else { + x = atoi (argv[i]); + y = atoi (argv[i + 1]); + length = atoi (argv[i + 2]); + w->x = x; + w->y = y; + w->length = length; } - else - { - if((!isdigit(argv[i][0])) || - (!isdigit(argv[i+1][0])) || - (!isdigit(argv[i+2][0])) || - (!isdigit(argv[i+3][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else - { - left = atoi(argv[i]); - //debug("left: %d\n",left); - top = atoi(argv[i+1]); - //debug("top: %d\n",top); - right = atoi(argv[i+2]); - //debug("right: %d\n",right); - bottom = atoi(argv[i+3]); - //debug("bottom: %d\n",bottom); - direction = (int)(argv[i+4][0]); - //debug("dir: %c\n",(char)direction); - speed = atoi(argv[i+5]); - //debug("speed: %d\n",speed); - // Direction must be v or h - if(((char)direction != 'h') && ((char)direction != 'v')) - { - sock_send_string(c->sock, "huh? Invalid direction\n"); - } - else - { - w->left = left; - w->top = top; - w->right = right; - w->bottom = bottom; - w->length = direction; - w->speed = speed; - if(w->text) - free(w->text); - w->text = strdup(argv[i+6]); - if(!w->text) - { - fprintf(stderr, "widget_set_func: Error allocating string\n"); - return -1; - } - debug("Widget %s set to %s\n", wid, w->text); + debug ("Widget %s set to %i\n", wid, w->length); + } + break; + case WID_VBAR: // Vbar takes "x y length" + if (argc != i + 3) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else { + x = atoi (argv[i]); + y = atoi (argv[i + 1]); + length = atoi (argv[i + 2]); + w->x = x; + w->y = y; + w->length = length; + } + debug ("Widget %s set to %i\n", wid, w->length); + } + break; + case WID_ICON: // Icon takes "x y binary_data" + if (argc != i + 3) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else { + x = atoi (argv[i]); + y = atoi (argv[i + 1]); + w->x = x; + w->y = y; + // TODO: Parse binary data and copy it to widget's data... + } + } + sock_send_string (c->sock, "huh? Widget type not yet implemented\n"); + break; + case WID_TITLE: // title takes "text" + if (argc != i + 1) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if (w->text) + free (w->text); + w->text = strdup (argv[i]); + if (!w->text) { + fprintf (stderr, "widget_set_func: Error allocating string\n"); + return -1; + } + debug ("Widget %s set to %s\n", wid, w->text); + } + break; + case WID_SCROLLER: // Scroller takes "left top right bottom direction speed text" + if (argc != i + 7) { + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + } else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0])) || (!isdigit (argv[i + 2][0])) || (!isdigit (argv[i + 3][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else { + left = atoi (argv[i]); + //debug("left: %d\n",left); + top = atoi (argv[i + 1]); + //debug("top: %d\n",top); + right = atoi (argv[i + 2]); + //debug("right: %d\n",right); + bottom = atoi (argv[i + 3]); + //debug("bottom: %d\n",bottom); + direction = (int) (argv[i + 4][0]); + //debug("dir: %c\n",(char)direction); + speed = atoi (argv[i + 5]); + //debug("speed: %d\n",speed); + // Direction must be v or h + if (((char) direction != 'h') && ((char) direction != 'v')) { + sock_send_string (c->sock, "huh? Invalid direction\n"); + } else { + w->left = left; + w->top = top; + w->right = right; + w->bottom = bottom; + w->length = direction; + w->speed = speed; + if (w->text) + free (w->text); + w->text = strdup (argv[i + 6]); + if (!w->text) { + fprintf (stderr, "widget_set_func: Error allocating string\n"); + return -1; } + debug ("Widget %s set to %s\n", wid, w->text); } } - break; - case WID_FRAME: // Frame takes "left top right bottom wid hgt direction speed" - if(argc != i+8) { - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - } - else - { - if((!isdigit(argv[i][0])) || - (!isdigit(argv[i+1][0])) || - (!isdigit(argv[i+2][0])) || - (!isdigit(argv[i+3][0])) || - (!isdigit(argv[i+4][0])) || - (!isdigit(argv[i+5][0]))) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } - else - { - left = atoi(argv[i]); - //debug("left: %d\n",left); - top = atoi(argv[i+1]); - //debug("top: %d\n",top); - right = atoi(argv[i+2]); - //debug("right: %d\n",right); - bottom = atoi(argv[i+3]); - //debug("bottom: %d\n",bottom); - width = atoi(argv[i+4]); - //debug("right: %d\n",right); - height = atoi(argv[i+5]); - //debug("bottom: %d\n",bottom); - direction = (int)(argv[i+6][0]); - //debug("dir: %c\n",(char)direction); - speed = atoi(argv[i+7]); - //debug("speed: %d\n",speed); - // Direction must be v or h - if(((char)direction != 'h') && ((char)direction != 'v')) - { - sock_send_string(c->sock, "huh? Invalid direction\n"); - } - else - { - w->left = left; - w->top = top; - w->right = right; - w->bottom = bottom; - w->wid = width; - w->hgt = height; - w->length = direction; - w->speed = speed; - debug("Widget %s set to (%i,%i)-(%i,%i) %ix%i\n", - wid, left, top, right, bottom, width, height); - } + } + break; + case WID_FRAME: // Frame takes "left top right bottom wid hgt direction speed" + if (argc != i + 8) { + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + } else { + if ((!isdigit (argv[i][0])) || (!isdigit (argv[i + 1][0])) || (!isdigit (argv[i + 2][0])) || (!isdigit (argv[i + 3][0])) || (!isdigit (argv[i + 4][0])) || (!isdigit (argv[i + 5][0]))) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else { + left = atoi (argv[i]); + //debug("left: %d\n",left); + top = atoi (argv[i + 1]); + //debug("top: %d\n",top); + right = atoi (argv[i + 2]); + //debug("right: %d\n",right); + bottom = atoi (argv[i + 3]); + //debug("bottom: %d\n",bottom); + width = atoi (argv[i + 4]); + //debug("right: %d\n",right); + height = atoi (argv[i + 5]); + //debug("bottom: %d\n",bottom); + direction = (int) (argv[i + 6][0]); + //debug("dir: %c\n",(char)direction); + speed = atoi (argv[i + 7]); + //debug("speed: %d\n",speed); + // Direction must be v or h + if (((char) direction != 'h') && ((char) direction != 'v')) { + sock_send_string (c->sock, "huh? Invalid direction\n"); + } else { + w->left = left; + w->top = top; + w->right = right; + w->bottom = bottom; + w->wid = width; + w->hgt = height; + w->length = direction; + w->speed = speed; + debug ("Widget %s set to (%i,%i)-(%i,%i) %ix%i\n", wid, left, top, right, bottom, width, height); } } - break; - case WID_NUM: // Num takes "x num" - if(argc != i+2) - sock_send_string(c->sock, "huh? Wrong number of arguments\n"); - else - { - if(!isdigit(argv[i][0])) - { - sock_send_string(c->sock, "huh? Invalid coordinates\n"); - } else if(!isdigit(argv[i+1][0])) - { - sock_send_string(c->sock, "huh? Invalid number\n"); - } else - { - x = atoi(argv[i]); - y = atoi(argv[i+1]); - w->x = x; - w->y = y; - } - debug("Widget %s set to %i\n", wid, w->y); + } + break; + case WID_NUM: // Num takes "x num" + if (argc != i + 2) + sock_send_string (c->sock, "huh? Wrong number of arguments\n"); + else { + if (!isdigit (argv[i][0])) { + sock_send_string (c->sock, "huh? Invalid coordinates\n"); + } else if (!isdigit (argv[i + 1][0])) { + sock_send_string (c->sock, "huh? Invalid number\n"); + } else { + x = atoi (argv[i]); + y = atoi (argv[i + 1]); + w->x = x; + w->y = y; } - break; - case WID_NONE: - default: - sock_send_string(c->sock, "huh? Widget has no type\n"); - break; + debug ("Widget %s set to %i\n", wid, w->y); + } + break; + case WID_NONE: + default: + sock_send_string (c->sock, "huh? Widget has no type\n"); + break; } - + return 0; } /////////////////////////////////////////////////////////////////////////// // Adds a menu to the client; handled by the server... // -int menu_add_func(client *c, int argc, char **argv) +int +menu_add_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Removes a client's menu and all contents from the server // -int menu_del_func(client *c, int argc, char **argv) +int +menu_del_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } @@ -875,42 +780,48 @@ int menu_del_func(client *c, int argc, char **argv) // // For example, should the menu be top-level, or buried somewhere? // -int menu_set_func(client *c, int argc, char **argv) +int +menu_set_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Adds an item to a menu // -int menu_item_add_func(client *c, int argc, char **argv) +int +menu_item_add_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Deletes an item from a menu // -int menu_item_del_func(client *c, int argc, char **argv) +int +menu_item_del_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } @@ -919,87 +830,81 @@ int menu_item_del_func(client *c, int argc, char **argv) // // For example, text displayed, widget type, value, etc... // -int menu_item_set_func(client *c, int argc, char **argv) +int +menu_item_set_func (client * c, int argc, char **argv) { - - - if(!c->data->ack) return 1; - - sock_send_string(c->sock, "huh? Not implemented yet.\n"); - + + + if (!c->data->ack) + return 1; + + sock_send_string (c->sock, "huh? Not implemented yet.\n"); + return 0; } /////////////////////////////////////////////////////////////////////////// // Toggles the backlight, if enabled. // -int backlight_func(client *c, int argc, char **argv) +int +backlight_func (client * c, int argc, char **argv) { - if(!c->data->ack) return 1; - + if (!c->data->ack) + return 1; + // Check the number of parameters... - if(argc < 2) - { - sock_send_string(c->sock, "huh? Specify a screen #id\n"); + if (argc < 2) { + sock_send_string (c->sock, "huh? Specify a screen #id\n"); return 0; } - if(argc > 2) - { - sock_send_string(c->sock, "huh? Too many parameters...\n"); + if (argc > 2) { + sock_send_string (c->sock, "huh? Too many parameters...\n"); return 0; } - debug("backlight(%s)\n", argv[1]); + debug ("backlight(%s)\n", argv[1]); - switch(backlight) - { - case BACKLIGHT_OPEN: - if(0 == strcmp("on", argv[1])) - { - backlight_state = BACKLIGHT_ON; - } - if(0 == strcmp("off", argv[1])) - { + switch (backlight) { + case BACKLIGHT_OPEN: + if (0 == strcmp ("on", argv[1])) { + backlight_state = BACKLIGHT_ON; + } + if (0 == strcmp ("off", argv[1])) { + backlight_state = BACKLIGHT_OFF; + } + if (0 == strcmp ("toggle", argv[1])) { + if (backlight_state == BACKLIGHT_ON) backlight_state = BACKLIGHT_OFF; - } - if(0 == strcmp("toggle", argv[1])) - { - if(backlight_state == BACKLIGHT_ON) - backlight_state = BACKLIGHT_OFF; - else if(backlight_state == BACKLIGHT_OFF) - backlight_state = BACKLIGHT_ON; - } - if(0 == strcmp("blink", argv[1])) - { - backlight_state |= BACKLIGHT_BLINK; - } - if(0 == strcmp("flash", argv[1])) - { - backlight_state |= BACKLIGHT_FLASH; - } - break; - case BACKLIGHT_VIS: - break; + else if (backlight_state == BACKLIGHT_OFF) + backlight_state = BACKLIGHT_ON; + } + if (0 == strcmp ("blink", argv[1])) { + backlight_state |= BACKLIGHT_BLINK; + } + if (0 == strcmp ("flash", argv[1])) { + backlight_state |= BACKLIGHT_FLASH; + } + break; + case BACKLIGHT_VIS: + break; } - + return 0; } //////////////////////////////////////////////////////////////////////////// // Sets the output port on MtxOrb LCDs -int output_func(client *c, int argc, char **argv) +int +output_func (client * c, int argc, char **argv) { - if(argc != 2) - { - sock_send_string(c->sock, "huh? Too many parameters...\n"); - } - else - { - if(0 == strcmp(argv[1], "on")) + if (argc != 2) { + sock_send_string (c->sock, "huh? Too many parameters...\n"); + } else { + if (0 == strcmp (argv[1], "on")) output_state = 1; else output_state = 0; @@ -1013,4 +918,3 @@ int output_func(client *c, int argc, char **argv) /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// - diff --git a/server/client_functions.h b/server/client_functions.h index ba73584..b7db102 100644 --- a/server/client_functions.h +++ b/server/client_functions.h @@ -7,32 +7,31 @@ point to a function to call, defined below. */ -typedef struct client_function -{ - char *keyword; - int (*function)(client *c, int argc, char **argv); +typedef struct client_function { + char *keyword; + int (*function) (client * c, int argc, char **argv); } client_function; // FIXME? Do these really need to be visible from other sources? -int test_func_func(client *c, int argc, char **argv); -int hello_func(client *c, int argc, char **argv); -int client_set_func(client *c, int argc, char **argv); -int client_add_key_func(client *c, int argc, char **argv); -int client_del_key_func(client *c, int argc, char **argv); -int screen_add_func(client *c, int argc, char **argv); -int screen_del_func(client *c, int argc, char **argv); -int screen_set_func(client *c, int argc, char **argv); -int widget_add_func(client *c, int argc, char **argv); -int widget_del_func(client *c, int argc, char **argv); -int widget_set_func(client *c, int argc, char **argv); -int menu_add_func(client *c, int argc, char **argv); -int menu_del_func(client *c, int argc, char **argv); -int menu_set_func(client *c, int argc, char **argv); -int menu_item_add_func(client *c, int argc, char **argv); -int menu_item_del_func(client *c, int argc, char **argv); -int menu_item_set_func(client *c, int argc, char **argv); -int backlight_func(client *c, int argc, char **argv); -int output_func(client *c, int argc, char **argv); +int test_func_func (client * c, int argc, char **argv); +int hello_func (client * c, int argc, char **argv); +int client_set_func (client * c, int argc, char **argv); +int client_add_key_func (client * c, int argc, char **argv); +int client_del_key_func (client * c, int argc, char **argv); +int screen_add_func (client * c, int argc, char **argv); +int screen_del_func (client * c, int argc, char **argv); +int screen_set_func (client * c, int argc, char **argv); +int widget_add_func (client * c, int argc, char **argv); +int widget_del_func (client * c, int argc, char **argv); +int widget_set_func (client * c, int argc, char **argv); +int menu_add_func (client * c, int argc, char **argv); +int menu_del_func (client * c, int argc, char **argv); +int menu_set_func (client * c, int argc, char **argv); +int menu_item_add_func (client * c, int argc, char **argv); +int menu_item_del_func (client * c, int argc, char **argv); +int menu_item_set_func (client * c, int argc, char **argv); +int backlight_func (client * c, int argc, char **argv); +int output_func (client * c, int argc, char **argv); extern client_function commands[]; diff --git a/server/client_menu.h b/server/client_menu.h index d97dbde..bf0223a 100644 --- a/server/client_menu.h +++ b/server/client_menu.h @@ -8,19 +8,17 @@ what the user does. */ -typedef struct client_menu -{ - char id[]; - LL * items; +typedef struct client_menu { + char id[]; + LL *items; } client_menu; -typedef struct client_menu_item -{ - char id[]; - int type; // Title, function, submenu, slider, checkbox, etc... - int value; // Holds stuff like "true", 43, etc... - char text[]; // Text to display here... - char child[]; // For the "submenu" type +typedef struct client_menu_item { + char id[]; + int type; // Title, function, submenu, slider, checkbox, etc... + int value; // Holds stuff like "true", 43, etc... + char text[]; // Text to display here... + char child[]; // For the "submenu" type } client_menu; diff --git a/server/clients.c b/server/clients.c index a93f9f0..ff91225 100644 --- a/server/clients.c +++ b/server/clients.c @@ -22,81 +22,72 @@ -LL * clients; +LL *clients; // Initialize and kill client list... -int client_init() +int +client_init () { - debug("client_init()\n"); - - clients = LL_new(); - if(!clients) - { - fprintf(stderr, "client_init: Unable to create client list\n"); + debug ("client_init()\n"); + + clients = LL_new (); + if (!clients) { + fprintf (stderr, "client_init: Unable to create client list\n"); return -1; } return 0; } -int client_shutdown() +int +client_shutdown () { // TODO: Close all connections first... client *c; - debug("client_shutdown()\n"); - - + debug ("client_shutdown()\n"); + + // Free all client structures... // Note that the regular list loop doesn't work here, because // client_destroy() calls LL_Remove() - for(c = LL_Pop(clients); - c; - c = LL_Pop(clients)) - { - debug("client_shutdown: ...\n"); - if(c) - { - debug("client_shutdown: ... %i ...\n", c->sock); - if(0 != client_destroy(c)) - { - fprintf(stderr, "client_shutdown: Error freeing client\n"); + for (c = LL_Pop (clients); c; c = LL_Pop (clients)) { + debug ("client_shutdown: ...\n"); + if (c) { + debug ("client_shutdown: ... %i ...\n", c->sock); + if (0 != client_destroy (c)) { + fprintf (stderr, "client_shutdown: Error freeing client\n"); + } else { + debug ("client_shutdown: Freed client...\n"); } - else - { - debug("client_shutdown: Freed client...\n"); - } - } - else - { - debug("client_shutdown: No client!\n"); + } else { + debug ("client_shutdown: No client!\n"); } } // Then, free the list... - LL_Destroy(clients); - - debug("client_shutdown: done\n"); + LL_Destroy (clients); + + debug ("client_shutdown: done\n"); return 0; } // Create and destroy clients.... -client * client_create(int sock) +client * +client_create (int sock) { client *c; - debug("client_create(%i)\n", sock); + debug ("client_create(%i)\n", sock); // Allocate new client... - c = malloc(sizeof(client)); - if(!c) - { - fprintf(stderr, "client_create: error allocating new client\n"); + c = malloc (sizeof (client)); + if (!c) { + fprintf (stderr, "client_create: error allocating new client\n"); return NULL; } - // Init struct members c->sock = 0; c->data = NULL; @@ -106,75 +97,72 @@ client * client_create(int sock) c->sock = sock; // Set up message list... - c->messages = LL_new(); - if(!c->messages) - { - fprintf(stderr, "client_create: error allocating message list\n"); - free(c); + c->messages = LL_new (); + if (!c->messages) { + fprintf (stderr, "client_create: error allocating message list\n"); + free (c); return NULL; } - // TODO: allocate and init client data... - c->data = malloc(sizeof(client_data)); - if(!c->data) - { - fprintf(stderr, "client_create: error allocating client data\n"); - free(c->messages); - free(c); + c->data = malloc (sizeof (client_data)); + if (!c->data) { + fprintf (stderr, "client_create: error allocating client data\n"); + free (c->messages); + free (c); + return NULL; + } else if (client_data_init (c->data) < 0) { return NULL; } - else if(client_data_init(c->data) < 0) - { - return NULL; - } - // TODO: Check for errors while adding the client to the list? - LL_Push(clients, (void *)c); - + LL_Push (clients, (void *) c); + return c; } -int client_destroy(client *c) + +int +client_destroy (client * c) { // TODO: Close the socket connection here? int err; - + char *str; - debug("client_destroy()\n"); - - if(!c) return -1; + debug ("client_destroy()\n"); + + if (!c) + return -1; // Eat the rest of the incoming requests... - debug("client_destroy: get_messages\n"); - while((str = client_get_message(c))) - { - if(str) { - debug("client_destroy: kill message %s\n", str); - free(str); + debug ("client_destroy: get_messages\n"); + while ((str = client_get_message (c))) { + if (str) { + debug ("client_destroy: kill message %s\n", str); + free (str); } } - err = LL_Destroy(c->messages); + err = LL_Destroy (c->messages); // Free client's other data - client_data_destroy(c->data); - + client_data_destroy (c->data); + /* // FIXME? Should the connection get closed here or elsewhere? if(c->sock) close(c->sock); c->sock = 0; */ - + // Remove the client from the clients list... - LL_Remove(clients, c); - - free(c); + LL_Remove (clients, c); + + free (c); return 0; } // Add and remove messages from the client's queue... -int client_add_message(client *c, char *message) +int +client_add_message (client * c, char *message) { int err = 0; char *dup; @@ -183,59 +171,64 @@ int client_add_message(client *c, char *message) // int len; //debug("client_add_message(%s)\n", message); - - if(!c) return -1; - if(!message) return -1; + + if (!c) + return -1; + if (!message) + return -1; // len = strlen(message); // if(len < 1) return 0; - + // Copy the string to avoid overwriting the original... - dup = strdup(message); - if(!dup) - { - fprintf(stderr, "client_add_message: Error allocating new string\n"); + dup = strdup (message); + if (!dup) { + fprintf (stderr, "client_add_message: Error allocating new string\n"); return -1; } - // Now split the string into lines and enqueue each one... - for(str = strtok(dup, delimiters); str; str=strtok(NULL, delimiters)) - { - cp = strdup(str); - debug("client_add_message: %s\n", cp); - err += LL_Enqueue(c->messages, (void *)cp); + for (str = strtok (dup, delimiters); str; str = strtok (NULL, delimiters)) { + cp = strdup (str); + debug ("client_add_message: %s\n", cp); + err += LL_Enqueue (c->messages, (void *) cp); } //debug("client_add_message(%s): %i errors\n", message, err); - free(dup); // Fixed memory leak... - + free (dup); // Fixed memory leak... + // Err is the number of errors encountered... return err; - + } + // Woo-hoo! A simple function. :) -char * client_get_message(client *c) +char * +client_get_message (client * c) { char *str; //debug("client_get_message()\n"); - if(!c) return NULL; - - str = (char *)LL_Dequeue(c->messages); + if (!c) + return NULL; + + str = (char *) LL_Dequeue (c->messages); //debug("client_get_message: \"%s\"\n", str); - + return str; } // Get and set the client's data... -int client_set(client *c, void *data) +int +client_set (client * c, void *data) { // You know, I really doubt this function will be useful... return 0; } -void * client_get(client *c) + +void * +client_get (client * c) { // But this one might be handy... @@ -243,24 +236,24 @@ void * client_get(client *c) } -client * client_find_sock(int sock) +client * +client_find_sock (int sock) { - client * c; + client *c; // debug("client_find_sock(%i)\n", sock); - LL_Rewind(clients); - do{ - c = (client *)LL_Get(clients); + LL_Rewind (clients); + do { + c = (client *) LL_Get (clients); // debug("client_find_sock: ... %i ...\n", c->sock); - if(c->sock == sock) - { -// debug("client_find_sock: ..! %i !..\n", c->sock); + if (c->sock == sock) { +// debug("client_find_sock: ..! %i !..\n", c->sock); return c; } - } while(LL_Next(clients) == 0); + } while (LL_Next (clients) == 0); + + debug ("client_find_sock: failed\n"); - debug("client_find_sock: failed\n"); - return NULL; } diff --git a/server/clients.h b/server/clients.h index 0700a31..f418542 100644 --- a/server/clients.h +++ b/server/clients.h @@ -4,37 +4,36 @@ #include "client_data.h" #include "../shared/LL.h" -typedef struct client -{ - int sock; - LL *messages; - client_data *data; - +typedef struct client { + int sock; + LL *messages; + client_data *data; + } client; extern LL *clients; // Initialize and kill client list... -int client_init(); -int client_shutdown(); +int client_init (); +int client_shutdown (); // Create and destroy clients.... -client * client_create(int sock); -int client_destroy(client *c); +client *client_create (int sock); +int client_destroy (client * c); // Add and remove messages from the client's queue... -int client_add_message(client *c, char *message); -char * client_get_message(client *c); +int client_add_message (client * c, char *message); +char *client_get_message (client * c); // Get and set the client's data... // Not used at all yet, and may never be. Oh, well. -int client_set(client *c, void *data); -void * client_get(client *c); +int client_set (client * c, void *data); +void *client_get (client * c); // Search for a client with a particular filedescriptor... -client * client_find_sock(int sock); +client *client_find_sock (int sock); #endif diff --git a/server/drivers/CFontz.c b/server/drivers/CFontz.c index 9f0b20e..0a62ea1 100644 --- a/server/drivers/CFontz.c +++ b/server/drivers/CFontz.c @@ -14,21 +14,22 @@ #include "../../shared/debug.h" #include "../../shared/str.h" -static int custom=0; +static int custom = 0; typedef enum { - hbar = 1, - vbar = 2, - bign = 4, - beat = 8 } custom_type; + hbar = 1, + vbar = 2, + bign = 4, + beat = 8 +} custom_type; static int fd; -static void CFontz_linewrap(int on); -static void CFontz_autoscroll(int on); -static void CFontz_hidecursor(); -static void CFontz_reboot(); +static void CFontz_linewrap (int on); +static void CFontz_autoscroll (int on); +static void CFontz_hidecursor (); +static void CFontz_reboot (); // TODO: Get rid of this variable? lcd_logical_driver *CFontz; @@ -37,202 +38,166 @@ lcd_logical_driver *CFontz; ///////////////////////////////////////////////////////////////// // Opens com port and sets baud correctly... // -int CFontz_init(lcd_logical_driver *driver, char *args) +int +CFontz_init (lcd_logical_driver * driver, char *args) { char *argv[64]; int argc; struct termios portset; int i; int tmp; - int reboot=0; - - int contrast=140; + int reboot = 0; + + int contrast = 140; char device[256] = "/dev/lcd"; - int speed=B9600; - + int speed = B9600; + CFontz = driver; //debug("CFontz_init: Args(all): %s\n", args); - - argc = get_args(argv, args, 64); + + argc = get_args (argv, args, 64); /* - for(i=0; i argc) { - fprintf(stderr, "CFontz_init: %s requires an argument\n", - argv[i]); + if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { + if (i + 1 > argc) { + fprintf (stderr, "CFontz_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-c") || - 0 == strcmp(argv[i], "--contrast")) - { - if(i + 1 > argc) { - fprintf(stderr, "CFontz_init: %s requires an argument\n", - argv[i]); + strcpy (device, argv[++i]); + } else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--contrast")) { + if (i + 1 > argc) { + fprintf (stderr, "CFontz_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if((tmp < 0) || (tmp > 255)){ - fprintf(stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", - argv[i]); - } else contrast = tmp; - } - else if(0 == strcmp(argv[i], "-b") || - 0 == strcmp(argv[i], "--brightness")) - { - if(i + 1 > argc) { - fprintf(stderr, "CFontz_init: %s requires an argument\n", - argv[i]); + tmp = atoi (argv[++i]); + if ((tmp < 0) || (tmp > 255)) { + fprintf (stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", argv[i]); + } else + contrast = tmp; + } else if (0 == strcmp (argv[i], "-b") || 0 == strcmp (argv[i], "--brightness")) { + if (i + 1 > argc) { + fprintf (stderr, "CFontz_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if((tmp < 0) || (tmp > 255)){ - fprintf(stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", - argv[i]); - } else backlight_brightness = tmp; - } - else if(0 == strcmp(argv[i], "-o") || - 0 == strcmp(argv[i], "--off-bright")) - { - if(i + 1 > argc) { - fprintf(stderr, "CFontz_init: %s requires an argument\n", - argv[i]); + tmp = atoi (argv[++i]); + if ((tmp < 0) || (tmp > 255)) { + fprintf (stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", argv[i]); + } else + backlight_brightness = tmp; + } else if (0 == strcmp (argv[i], "-o") || 0 == strcmp (argv[i], "--off-bright")) { + if (i + 1 > argc) { + fprintf (stderr, "CFontz_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if((tmp < 0) || (tmp > 255)){ - fprintf(stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", - argv[i]); - } else backlight_off_brightness = tmp; - } - else if(0 == strcmp(argv[i], "-s") || - 0 == strcmp(argv[i], "--speed")) - { - if(i + 1 > argc) { - fprintf(stderr, "CFontz_init: %s requires an argument\n", - argv[i]); + tmp = atoi (argv[++i]); + if ((tmp < 0) || (tmp > 255)) { + fprintf (stderr, "CFontz_init: %s argument must between 0 and 255. Using default value.\n", argv[i]); + } else + backlight_off_brightness = tmp; + } else if (0 == strcmp (argv[i], "-s") || 0 == strcmp (argv[i], "--speed")) { + if (i + 1 > argc) { + fprintf (stderr, "CFontz_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if(tmp==1200) speed=B1200; - else if(tmp==2400) speed=B2400; - else if(tmp==9600) speed=B9600; - else if(tmp==19200) speed=B19200; - else { - fprintf(stderr, "CFontz_init: %s argument must be 1200, 2400, or 9600. Using default value.\n", - argv[i]); - } - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc CrystalFontz LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" - "\t-t\t--type\t\tSelect the LCD type (size) [20x4]\n" - "\t-c\t--contrast\tSet the initial contrast [140]\n" - "\t-b\t--brightness\tSet the initial brightness [255]\n" - "\t-o\t--off-bright\tSet the initial brightness [0]\n" - "\t-s\t--speed\t\tSet the communication speed [9600]\n" - "\t-r\t--reboot\tReinitialize the LCD's BIOS\n" - "\t-h\t--help\t\tShow this help information\n"); + tmp = atoi (argv[++i]); + if (tmp == 1200) + speed = B1200; + else if (tmp == 2400) + speed = B2400; + else if (tmp == 9600) + speed = B9600; + else if (tmp == 19200) + speed = B19200; + else { + fprintf (stderr, "CFontz_init: %s argument must be 1200, 2400, or 9600. Using default value.\n", argv[i]); + } + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc CrystalFontz LCD driver\n" "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" "\t-t\t--type\t\tSelect the LCD type (size) [20x4]\n" "\t-c\t--contrast\tSet the initial contrast [140]\n" "\t-b\t--brightness\tSet the initial brightness [255]\n" "\t-o\t--off-bright\tSet the initial brightness [0]\n" "\t-s\t--speed\t\tSet the communication speed [9600]\n" "\t-r\t--reboot\tReinitialize the LCD's BIOS\n" "\t-h\t--help\t\tShow this help information\n"); return -1; + } else if (0 == strcmp (argv[i], "-r") || 0 == strcmp (argv[i], "--reboot")) { + printf ("LCDd: rebooting CrystalFontz LCD...\n"); + reboot = 1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else if(0 == strcmp(argv[i], "-r") || - 0 == strcmp(argv[i], "--reboot")) - { - printf("LCDd: rebooting CrystalFontz LCD...\n"); - reboot=1; - } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - + } - + // Set up io port correctly, and open it... - fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - fprintf(stderr, "CFontz_init: failed (%s)\n", strerror(errno)); + fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) { + fprintf (stderr, "CFontz_init: failed (%s)\n", strerror (errno)); return -1; } //else fprintf(stderr, "CFontz_init: opened device %s\n", device); - tcgetattr(fd, &portset); + tcgetattr (fd, &portset); // This is necessary in Linux, but does not exist in irix. #ifndef IRIX - cfmakeraw(&portset); + cfmakeraw (&portset); #endif - cfsetospeed(&portset, speed); - cfsetispeed(&portset, speed); - tcsetattr(fd, TCSANOW, &portset); - + cfsetospeed (&portset, speed); + cfsetispeed (&portset, speed); + tcsetattr (fd, TCSANOW, &portset); + // Set display-specific stuff.. - if(reboot) - { - CFontz_reboot(); - sleep(4); - reboot=0; + if (reboot) { + CFontz_reboot (); + sleep (4); + reboot = 0; } - sleep(1); - CFontz_hidecursor(); - CFontz_linewrap(1); - CFontz_autoscroll(0); - CFontz_backlight(backlight_brightness); + sleep (1); + CFontz_hidecursor (); + CFontz_linewrap (1); + CFontz_autoscroll (0); + CFontz_backlight (backlight_brightness); - - if(!driver->framebuf) - { - fprintf(stderr, "CFontz_init: No frame buffer.\n"); - driver->close(); + + if (!driver->framebuf) { + fprintf (stderr, "CFontz_init: No frame buffer.\n"); + driver->close (); return -1; } - // Set the functions the driver supports... - driver->clear = (void *)-1; - driver->string = (void *)-1; + driver->clear = (void *) -1; + driver->string = (void *) -1; // driver->chr = CFontz_chr; - driver->chr = CFontz_chr; - driver->vbar = CFontz_vbar; - driver->init_vbar = CFontz_init_vbar; - driver->hbar = CFontz_hbar; - driver->init_hbar = CFontz_init_hbar; - driver->num = CFontz_num; - driver->init_num = CFontz_init_num; + driver->chr = CFontz_chr; + driver->vbar = CFontz_vbar; + driver->init_vbar = CFontz_init_vbar; + driver->hbar = CFontz_hbar; + driver->init_hbar = CFontz_init_hbar; + driver->num = CFontz_num; + driver->init_num = CFontz_init_num; - driver->init = CFontz_init; - driver->close = CFontz_close; - driver->flush = CFontz_flush; - driver->flush_box = CFontz_flush_box; - driver->contrast = CFontz_contrast; - driver->backlight = CFontz_backlight; - driver->set_char = CFontz_set_char; - driver->icon = CFontz_icon; + driver->init = CFontz_init; + driver->close = CFontz_close; + driver->flush = CFontz_flush; + driver->flush_box = CFontz_flush_box; + driver->contrast = CFontz_contrast; + driver->backlight = CFontz_backlight; + driver->set_char = CFontz_set_char; + driver->icon = CFontz_icon; driver->draw_frame = CFontz_draw_frame; - CFontz_contrast(contrast); + CFontz_contrast (contrast); lcd.cellwid = 6; lcd.cellhgt = 8; - debug("CFontz: foo!\n"); - + debug ("CFontz: foo!\n"); + return fd; } @@ -241,40 +206,43 @@ int CFontz_init(lcd_logical_driver *driver, char *args) ///////////////////////////////////////////////////////////////// // Clean-up // -void CFontz_close() +void +CFontz_close () { - close (fd); + close (fd); - if(CFontz->framebuf) free(CFontz->framebuf); + if (CFontz->framebuf) + free (CFontz->framebuf); - CFontz->framebuf = NULL; + CFontz->framebuf = NULL; } -void CFontz_flush() +void +CFontz_flush () { - CFontz_draw_frame(lcd.framebuf); + CFontz_draw_frame (lcd.framebuf); } -void CFontz_flush_box(int lft, int top, int rgt, int bot) +void +CFontz_flush_box (int lft, int top, int rgt, int bot) { - int y; - char out[LCD_MAX_WIDTH]; - - + int y; + char out[LCD_MAX_WIDTH]; + + // printf("Flush (%i,%i)-(%i,%i)\n", lft, top, rgt, bot); - for(y=top; y<=bot; y++) - { - sprintf(out, "%c%c%c", 17, lft, y); - write(fd, out, 4); - write(fd, lcd.framebuf+(y*lcd.wid)+lft, rgt-lft+1); - - } - - + for (y = top; y <= bot; y++) { + sprintf (out, "%c%c%c", 17, lft, y); + write (fd, out, 4); + write (fd, lcd.framebuf + (y * lcd.wid) + lft, rgt - lft + 1); + + } + + } @@ -282,31 +250,33 @@ void CFontz_flush_box(int lft, int top, int rgt, int bot) // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void CFontz_chr(int x, int y, char c) +void +CFontz_chr (int x, int y, char c) { - y--; - x--; - - if(c < 32 && c >= 0) c += 128; - lcd.framebuf[(y*lcd.wid) + x] = c; + y--; + x--; + + if (c < 32 && c >= 0) + c += 128; + lcd.framebuf[(y * lcd.wid) + x] = c; } ///////////////////////////////////////////////////////////////// // Changes screen contrast (0-255; 140 seems good) // -int CFontz_contrast(int contrast) +int +CFontz_contrast (int contrast) { int realcontrast; char out[4]; - static int status=140; + static int status = 140; - if(contrast > 0) - { - status=contrast; - realcontrast = (((int)(status)) * 100) / 255; - sprintf(out, "%c%c", 15, realcontrast); - write(fd, out, 3); + if (contrast > 0) { + status = contrast; + realcontrast = (((int) (status)) * 100) / 255; + sprintf (out, "%c%c", 15, realcontrast); + write (fd, out, 3); } return status; @@ -317,270 +287,278 @@ int CFontz_contrast(int contrast) // Sets the backlight on or off -- can be done quickly for // an intermediate brightness... // -void CFontz_backlight(int on) +void +CFontz_backlight (int on) { - char out[4]; - if(on) - { - sprintf(out, "%c%c", 14, (unsigned char)(on * 100 / 255)); - //sprintf(out, "%c%c", 14, 100); - } - else - { - sprintf(out, "%c%c", 14, 0); - } - write(fd, out, 3); + char out[4]; + if (on) { + sprintf (out, "%c%c", 14, (unsigned char) (on * 100 / 255)); + //sprintf(out, "%c%c", 14, 100); + } else { + sprintf (out, "%c%c", 14, 0); + } + write (fd, out, 3); } ///////////////////////////////////////////////////////////////// // Toggle the built-in linewrapping feature // -static void CFontz_linewrap(int on) +static void +CFontz_linewrap (int on) { - char out[4]; - if(on) - sprintf(out, "%c", 23); - else - sprintf(out, "%c", 24); - write(fd, out, 1); + char out[4]; + if (on) + sprintf (out, "%c", 23); + else + sprintf (out, "%c", 24); + write (fd, out, 1); } ///////////////////////////////////////////////////////////////// // Toggle the built-in automatic scrolling feature // -static void CFontz_autoscroll(int on) +static void +CFontz_autoscroll (int on) { - char out[4]; - if(on) - sprintf(out, "%c", 19); - else - sprintf(out, "%c", 20); - write(fd, out, 1); + char out[4]; + if (on) + sprintf (out, "%c", 19); + else + sprintf (out, "%c", 20); + write (fd, out, 1); } ///////////////////////////////////////////////////////////////// // Get rid of the blinking curson // -static void CFontz_hidecursor() +static void +CFontz_hidecursor () { - char out[4]; - sprintf(out, "%c", 4); - write(fd, out, 1); + char out[4]; + sprintf (out, "%c", 4); + write (fd, out, 1); } ///////////////////////////////////////////////////////////////// // Reset the display bios // -static void CFontz_reboot() +static void +CFontz_reboot () { - char out[4]; - sprintf(out, "%c", 26); - write(fd, out, 1); + char out[4]; + sprintf (out, "%c", 26); + write (fd, out, 1); } ///////////////////////////////////////////////////////////////// // Sets up for vertical bars. Call before lcd.vbar() // -void CFontz_init_vbar() +void +CFontz_init_vbar () { - char a[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - }; - char b[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; - char c[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; - char d[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; - char e[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; - char f[] = { - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; - char g[] = { - 0,0,0,0,0,0, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - 0,1,1,1,1,1, - }; + char a[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + }; + char b[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; + char c[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; + char d[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; + char e[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; + char f[] = { + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; + char g[] = { + 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, + }; - if(custom!=vbar) { - CFontz_set_char(1,a); - CFontz_set_char(2,b); - CFontz_set_char(3,c); - CFontz_set_char(4,d); - CFontz_set_char(5,e); - CFontz_set_char(6,f); - CFontz_set_char(7,g); - custom=vbar; - } + if (custom != vbar) { + CFontz_set_char (1, a); + CFontz_set_char (2, b); + CFontz_set_char (3, c); + CFontz_set_char (4, d); + CFontz_set_char (5, e); + CFontz_set_char (6, f); + CFontz_set_char (7, g); + custom = vbar; + } } ///////////////////////////////////////////////////////////////// // Inits horizontal bars... // -void CFontz_init_hbar() +void +CFontz_init_hbar () { - char a[] = { - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - 1,0,0,0,0,0, - }; - char b[] = { - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - 1,1,0,0,0,0, - }; - char c[] = { - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - 1,1,1,0,0,0, - }; - char d[] = { - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - 1,1,1,1,0,0, - }; - char e[] = { - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - 1,1,1,1,1,0, - }; - char f[] = { - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - 1,1,1,1,1,1, - }; + char a[] = { + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + }; + char b[] = { + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, + }; + char c[] = { + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + }; + char d[] = { + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 0, 0, + }; + char e[] = { + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 0, + }; + char f[] = { + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + }; - if(custom!=hbar) { - CFontz_set_char(1,a); - CFontz_set_char(2,b); - CFontz_set_char(3,c); - CFontz_set_char(4,d); - CFontz_set_char(5,e); - CFontz_set_char(6,f); - custom=hbar; - } + if (custom != hbar) { + CFontz_set_char (1, a); + CFontz_set_char (2, b); + CFontz_set_char (3, c); + CFontz_set_char (4, d); + CFontz_set_char (5, e); + CFontz_set_char (6, f); + custom = hbar; + } } ///////////////////////////////////////////////////////////////// // Draws a vertical bar... // -void CFontz_vbar(int x, int len) +void +CFontz_vbar (int x, int len) { - char map[9] = {32, 1, 2, 3, 4, 5, 6, 7, 255 }; - + char map[9] = { 32, 1, 2, 3, 4, 5, 6, 7, 255 }; - int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - if(len >= lcd.cellhgt) CFontz_chr(x, y, 255); - else CFontz_chr(x, y, map[len]); + + int y; + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + CFontz_chr (x, y, 255); + else + CFontz_chr (x, y, map[len]); len -= lcd.cellhgt; - } - + } + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void CFontz_hbar(int x, int y, int len) +void +CFontz_hbar (int x, int y, int len) { - char map[7] = { 32, 1, 2, 3, 4, 5, 6 }; + char map[7] = { 32, 1, 2, 3, 4, 5, 6 }; + + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + CFontz_chr (x, y, map[6]); + else + CFontz_chr (x, y, map[len]); - for(; x<=lcd.wid && len>0; x++) - { - if(len >= lcd.cellwid) CFontz_chr(x,y,map[6]); - else CFontz_chr(x, y, map[len]); - len -= lcd.cellwid; - - } + + } } @@ -588,7 +566,8 @@ void CFontz_hbar(int x, int y, int len) ///////////////////////////////////////////////////////////////// // Sets up for big numbers. // -void CFontz_init_num() +void +CFontz_init_num () { } @@ -596,11 +575,12 @@ void CFontz_init_num() ///////////////////////////////////////////////////////////////// // Writes a big number. // -void CFontz_num(int x, int num) +void +CFontz_num (int x, int num) { - char out[5]; - sprintf(out, "%c%c%c", 28, x, num); - write(fd, out, 3); + char out[5]; + sprintf (out, "%c%c%c", 28, x, num); + write (fd, out, 3); } @@ -611,72 +591,75 @@ void CFontz_num(int x, int num) // // The input is just an array of characters... // -void CFontz_set_char(int n, char *dat) +void +CFontz_set_char (int n, char *dat) { - char out[4]; - int row, col; - int letter; + char out[4]; + int row, col; + int letter; - if(n < 0 || n > 7) return; - if(!dat) return; + if (n < 0 || n > 7) + return; + if (!dat) + return; - sprintf(out, "%c%c", 25, n); - write(fd, out, 2); + sprintf (out, "%c%c", 25, n); + write (fd, out, 2); - - for(row=0; row 0); - } - write(fd, &letter, 1); - } + + for (row = 0; row < lcd.cellhgt; row++) { + letter = 0; + for (col = 0; col < lcd.cellwid; col++) { + letter <<= 1; + letter |= (dat[(row * lcd.cellwid) + col] > 0); + } + write (fd, &letter, 1); + } } -void CFontz_icon(int which, char dest) +void +CFontz_icon (int which, char dest) { - char icons[3][6*8] = { - { - 1,1,1,1,1,1, // Empty Heart - 1,0,1,0,1,1, - 0,0,0,0,0,1, - 0,0,0,0,0,1, - 0,0,0,0,0,1, - 1,0,0,0,1,1, - 1,1,0,1,1,1, - 1,1,1,1,1,1, - }, + char icons[3][6 * 8] = { + { + 1, 1, 1, 1, 1, 1, // Empty Heart + 1, 0, 1, 0, 1, 1, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, + 1, 0, 0, 0, 1, 1, + 1, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + }, - { - 1,1,1,1,1,1, // Filled Heart - 1,0,1,0,1,1, - 0,1,0,1,0,1, - 0,1,1,1,0,1, - 0,1,1,1,0,1, - 1,0,1,0,1,1, - 1,1,0,1,1,1, - 1,1,1,1,1,1, - }, - - { - 0,0,0,0,0,0, // Ellipsis - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 0,0,0,0,0,0, - 1,0,1,0,1,0, - }, - - }; - - if(custom==bign) custom=beat; - CFontz_set_char(dest, &icons[which][0]); + { + 1, 1, 1, 1, 1, 1, // Filled Heart + 1, 0, 1, 0, 1, 1, + 0, 1, 0, 1, 0, 1, + 0, 1, 1, 1, 0, 1, + 0, 1, 1, 1, 0, 1, + 1, 0, 1, 0, 1, 1, + 1, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, + }, + + { + 0, 0, 0, 0, 0, 0, // Ellipsis + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, + }, + + }; + + if (custom == bign) + custom = beat; + CFontz_set_char (dest, &icons[which][0]); } @@ -685,34 +668,32 @@ void CFontz_icon(int which, char dest) // // Input is a character array, sized lcd.wid*lcd.hgt // -void CFontz_draw_frame(char *dat) +void +CFontz_draw_frame (char *dat) { - char out[LCD_MAX_WIDTH * LCD_MAX_HEIGHT]; - int i; - - if(!dat) return; + char out[LCD_MAX_WIDTH * LCD_MAX_HEIGHT]; + int i; - // Custom characters start at 128, not at 0. - /* - for(i=0; i= 0) dat[i] += 128; - } - */ - - for(i=0; i= 0) dat[i] += 128; + } + */ + + for (i = 0; i < lcd.hgt; i++) { + sprintf (out, "%c%c%c", 17, 0, i); + write (fd, out, 3); + write (fd, dat + (lcd.wid * i), lcd.wid); + } + /* + sprintf(out, "%c", 1); + write(fd, out, 1); + write(fd, dat, lcd.wid*lcd.hgt); + */ } - - - diff --git a/server/drivers/CFontz.h b/server/drivers/CFontz.h index efb4ade..59b7683 100644 --- a/server/drivers/CFontz.h +++ b/server/drivers/CFontz.h @@ -4,22 +4,22 @@ extern lcd_logical_driver *CFontz; -int CFontz_init(lcd_logical_driver *driver, char *device); -void CFontz_close(); -void CFontz_flush(); -void CFontz_flush_box(int lft, int top, int rgt, int bot); -void CFontz_chr(int x, int y, char c) ; -int CFontz_contrast(int contrast); -void CFontz_backlight(int on); -void CFontz_init_vbar(); -void CFontz_init_hbar(); -void CFontz_vbar(int x, int len); -void CFontz_hbar(int x, int y, int len); -void CFontz_init_num(); -void CFontz_num(int x, int num); -void CFontz_set_char(int n, char *dat); -void CFontz_icon(int which, char dest); -void CFontz_draw_frame(char *dat); +int CFontz_init (lcd_logical_driver * driver, char *device); +void CFontz_close (); +void CFontz_flush (); +void CFontz_flush_box (int lft, int top, int rgt, int bot); +void CFontz_chr (int x, int y, char c); +int CFontz_contrast (int contrast); +void CFontz_backlight (int on); +void CFontz_init_vbar (); +void CFontz_init_hbar (); +void CFontz_vbar (int x, int len); +void CFontz_hbar (int x, int y, int len); +void CFontz_init_num (); +void CFontz_num (int x, int num); +void CFontz_set_char (int n, char *dat); +void CFontz_icon (int which, char dest); +void CFontz_draw_frame (char *dat); diff --git a/server/drivers/MtxOrb.c b/server/drivers/MtxOrb.c index 44b0da4..9286537 100644 --- a/server/drivers/MtxOrb.c +++ b/server/drivers/MtxOrb.c @@ -12,53 +12,55 @@ #include "../../shared/debug.h" #include "../../shared/str.h" -static int custom=0; +static int custom = 0; // TODO: Remove this custom_type if not in use anymore. typedef enum { - hbar = 1, - vbar = 2, - bign = 4, - beat = 8 } custom_type; + hbar = 1, + vbar = 2, + bign = 4, + beat = 8 +} custom_type; // TODO: This is my ugglyest piece of code. typedef enum { - baru1 = 0, - baru2 = 1, - baru3 = 2, - baru4 = 3, - baru5 = 4, - baru6 = 5, - baru7 = 6, - bard1 = 7, - bard2 = 8, - bard3 = 9, - bard4 = 10, - bard5 = 11, - bard6 = 12, - bard7 = 13, - barr1 = 14, - barr2 = 15, - barr3 = 16, - barr4 = 17, - barl1 = 18, - barl2 = 19, - barl3 = 20, - barl4 = 21, - barw = 32, - barb = 255} bar_type; + baru1 = 0, + baru2 = 1, + baru3 = 2, + baru4 = 3, + baru5 = 4, + baru6 = 5, + baru7 = 6, + bard1 = 7, + bard2 = 8, + bard3 = 9, + bard4 = 10, + bard5 = 11, + bard6 = 12, + bard7 = 13, + barr1 = 14, + barr2 = 15, + barr3 = 16, + barr4 = 17, + barl1 = 18, + barl2 = 19, + barl3 = 20, + barl4 = 21, + barw = 32, + barb = 255 +} bar_type; static int fd; -static int clear=1; +static int clear = 1; -static int def[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1}; -static int use[9]={1,0,0,0,0,0,0,0,0}; +static int def[9] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 }; +static int use[9] = { 1, 0, 0, 0, 0, 0, 0, 0, 0 }; -static void MtxOrb_linewrap(int on); -static void MtxOrb_autoscroll(int on); -static void MtxOrb_cursorblink(int on); +static void MtxOrb_linewrap (int on); +static void MtxOrb_autoscroll (int on); +static void MtxOrb_cursorblink (int on); // TODO: Get rid of this variable? lcd_logical_driver *MtxOrb; @@ -67,159 +69,140 @@ lcd_logical_driver *MtxOrb; ///////////////////////////////////////////////////////////////// // Opens com port and sets baud correctly... // -int MtxOrb_init(lcd_logical_driver *driver, char *args) +int +MtxOrb_init (lcd_logical_driver * driver, char *args) { char *argv[64]; int argc; struct termios portset; int i; int tmp; - - int contrast=140; + + int contrast = 140; char device[256] = "/dev/lcd"; - int speed=B19200; + int speed = B19200; MtxOrb = driver; //debug("MtxOrb_init: Args(all): %s\n", args); - - argc = get_args(argv, args, 64); + + argc = get_args (argv, args, 64); /* - for(i=0; i argc) { - fprintf(stderr, "MtxOrb_init: %s requires an argument\n", - argv[i]); + if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { + if (i + 1 > argc) { + fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-c") || - 0 == strcmp(argv[i], "--contrast")) - { - if(i + 1 > argc) { - fprintf(stderr, "MtxOrb_init: %s requires an argument\n", - argv[i]); + strcpy (device, argv[++i]); + } else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--contrast")) { + if (i + 1 > argc) { + fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if((tmp < 0) || (tmp > 255)){ - fprintf(stderr, "MtxOrb_init: %s argument must between 0 and 255. Ussing default value.\n", - argv[i]); - } else contrast = tmp; - } - else if(0 == strcmp(argv[i], "-s") || - 0 == strcmp(argv[i], "--speed")) - { - if(i + 1 > argc) { - fprintf(stderr, "MtxOrb_init: %s requires an argument\n", - argv[i]); + tmp = atoi (argv[++i]); + if ((tmp < 0) || (tmp > 255)) { + fprintf (stderr, "MtxOrb_init: %s argument must between 0 and 255. Ussing default value.\n", argv[i]); + } else + contrast = tmp; + } else if (0 == strcmp (argv[i], "-s") || 0 == strcmp (argv[i], "--speed")) { + if (i + 1 > argc) { + fprintf (stderr, "MtxOrb_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if(tmp==1200) speed=B1200; - else if(tmp==2400) speed=B2400; - else if(tmp==9600) speed=B9600; - else if(tmp==19200) speed=B19200; - else { - fprintf(stderr, "MtxOrb_init: %s argument must be 1200, 2400, 9600 or 19200. Ussing default value.\n", - argv[i]); - } - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc Matrix-Orbital LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" -// "\t-t\t--type\t\tSelect the LCD type (size) [20x4]\n" - "\t-c\t--contrast\tSet the initial contrast [140]\n" - "\t-s\t--speed\t\tSet the communication speed [19200]\n" - "\t-h\t--help\t\tShow this help information\n"); + tmp = atoi (argv[++i]); + if (tmp == 1200) + speed = B1200; + else if (tmp == 2400) + speed = B2400; + else if (tmp == 9600) + speed = B9600; + else if (tmp == 19200) + speed = B19200; + else { + fprintf (stderr, "MtxOrb_init: %s argument must be 1200, 2400, 9600 or 19200. Ussing default value.\n", argv[i]); + } + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc Matrix-Orbital LCD driver\n" "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" +// "\t-t\t--type\t\tSelect the LCD type (size) [20x4]\n" + "\t-c\t--contrast\tSet the initial contrast [140]\n" "\t-s\t--speed\t\tSet the communication speed [19200]\n" "\t-h\t--help\t\tShow this help information\n"); return -1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - + } - + // Set up io port correctly, and open it... - fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - fprintf(stderr, "MtxOrb_init: failed (%s)\n", strerror(errno)); + fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) { + fprintf (stderr, "MtxOrb_init: failed (%s)\n", strerror (errno)); return -1; } //else fprintf(stderr, "MtxOrb_init: opened device %s\n", device); - tcgetattr(fd, &portset); + tcgetattr (fd, &portset); // This is necessary in Linux, but does not exist in irix. #ifndef IRIX - cfmakeraw(&portset); + cfmakeraw (&portset); #endif - cfsetospeed(&portset, speed); - cfsetispeed(&portset, speed); - tcsetattr(fd, TCSANOW, &portset); - - - // Set display-specific stuff.. - MtxOrb_linewrap(1); - MtxOrb_autoscroll(1); - MtxOrb_cursorblink(0); + cfsetospeed (&portset, speed); + cfsetispeed (&portset, speed); + tcsetattr (fd, TCSANOW, &portset); - - if(!driver->framebuf) - { - fprintf(stderr, "MtxOrb_init: No frame buffer.\n"); - driver->close(); + + // Set display-specific stuff.. + MtxOrb_linewrap (1); + MtxOrb_autoscroll (1); + MtxOrb_cursorblink (0); + + + if (!driver->framebuf) { + fprintf (stderr, "MtxOrb_init: No frame buffer.\n"); + driver->close (); return -1; } - // Set the functions the driver supports... // driver->clear = (void *)-1; - driver->clear = MtxOrb_clear; - driver->string = (void *)-1; + driver->clear = MtxOrb_clear; + driver->string = (void *) -1; // driver->chr = MtxOrb_chr; - driver->chr = (void *)-1; - driver->vbar = MtxOrb_vbar; - driver->init_vbar = MtxOrb_init_vbar; + driver->chr = (void *) -1; + driver->vbar = MtxOrb_vbar; + driver->init_vbar = MtxOrb_init_vbar; // driver->init_vbar = (void *)-1; - driver->hbar = MtxOrb_hbar; - driver->init_hbar = MtxOrb_init_hbar; + driver->hbar = MtxOrb_hbar; + driver->init_hbar = MtxOrb_init_hbar; // driver->init_hbar = (void *)-1; - driver->num = MtxOrb_num; - driver->init_num = MtxOrb_init_num; + driver->num = MtxOrb_num; + driver->init_num = MtxOrb_init_num; - driver->init = MtxOrb_init; - driver->close = MtxOrb_close; - driver->flush = MtxOrb_flush; - driver->flush_box = MtxOrb_flush_box; - driver->contrast = MtxOrb_contrast; - driver->backlight = MtxOrb_backlight; - driver->output = MtxOrb_output; - driver->set_char = MtxOrb_set_char; - driver->icon = MtxOrb_icon; + driver->init = MtxOrb_init; + driver->close = MtxOrb_close; + driver->flush = MtxOrb_flush; + driver->flush_box = MtxOrb_flush_box; + driver->contrast = MtxOrb_contrast; + driver->backlight = MtxOrb_backlight; + driver->output = MtxOrb_output; + driver->set_char = MtxOrb_set_char; + driver->icon = MtxOrb_icon; driver->draw_frame = MtxOrb_draw_frame; - driver->getkey = MtxOrb_getkey; + driver->getkey = MtxOrb_getkey; + + MtxOrb_contrast (contrast); - MtxOrb_contrast(contrast); - return fd; } @@ -230,50 +213,54 @@ int MtxOrb_init(lcd_logical_driver *driver, char *args) // forget bar caracter not in use anymore and reuse the // slot for another bar caracter. // -void MtxOrb_clear() +void +MtxOrb_clear () { // REMOVE: fprintf(stderr, "GLU: MtxOrb_clear.\n"); - drv_base_clear(); - clear=1; + drv_base_clear (); + clear = 1; } ///////////////////////////////////////////////////////////////// // Clean-up // -void MtxOrb_close() +void +MtxOrb_close () { - close (fd); + close (fd); - if(MtxOrb->framebuf) free(MtxOrb->framebuf); + if (MtxOrb->framebuf) + free (MtxOrb->framebuf); - MtxOrb->framebuf = NULL; + MtxOrb->framebuf = NULL; } -void MtxOrb_flush() +void +MtxOrb_flush () { - MtxOrb_draw_frame(lcd.framebuf); + MtxOrb_draw_frame (lcd.framebuf); } -void MtxOrb_flush_box(int lft, int top, int rgt, int bot) +void +MtxOrb_flush_box (int lft, int top, int rgt, int bot) { - int y; - char out[LCD_MAX_WIDTH]; - - + int y; + char out[LCD_MAX_WIDTH]; + + // printf("Flush (%i,%i)-(%i,%i)\n", lft, top, rgt, bot); - for(y=top; y<=bot; y++) - { - sprintf(out, "%cG%c%c", 254, lft, y); - write(fd, out, 4); - write(fd, lcd.framebuf+(y*lcd.wid)+lft, rgt-lft+1); - - } - - + for (y = top; y <= bot; y++) { + sprintf (out, "%cG%c%c", 254, lft, y); + write (fd, out, 4); + write (fd, lcd.framebuf + (y * lcd.wid) + lft, rgt - lft + 1); + + } + + } @@ -281,31 +268,32 @@ void MtxOrb_flush_box(int lft, int top, int rgt, int bot) // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void MtxOrb_chr(int x, int y, char c) +void +MtxOrb_chr (int x, int y, char c) { - y--; - x--; - - lcd.framebuf[(y*lcd.wid) + x] = c; + y--; + x--; + + lcd.framebuf[(y * lcd.wid) + x] = c; } ///////////////////////////////////////////////////////////////// // Changes screen contrast (0-255; 140 seems good) // -int MtxOrb_contrast(int contrast) +int +MtxOrb_contrast (int contrast) { - char out[4]; - static int status=140; + char out[4]; + static int status = 140; - if(contrast > 0) - { - status=contrast; - sprintf(out, "%cP%c", 254, status); - write(fd, out, 3); - } + if (contrast > 0) { + status = contrast; + sprintf (out, "%cP%c", 254, status); + write (fd, out, 3); + } - return status; + return status; } @@ -313,36 +301,32 @@ int MtxOrb_contrast(int contrast) // Sets the backlight on or off -- can be done quickly for // an intermediate brightness... // -void MtxOrb_backlight(int on) +void +MtxOrb_backlight (int on) { - char out[4]; - if(on) - { - sprintf(out, "%cB%c", 254, 0); - write(fd, out, 3); - } - else - { - sprintf(out, "%cF", 254); - write(fd, out, 2); - } + char out[4]; + if (on) { + sprintf (out, "%cB%c", 254, 0); + write (fd, out, 3); + } else { + sprintf (out, "%cF", 254); + write (fd, out, 2); + } } ///////////////////////////////////////////////////////////////// // Sets output port on or off -void MtxOrb_output(int on) +void +MtxOrb_output (int on) { char out[4]; - if(on) - { - sprintf(out, "%cW", 254); - write(fd, out, 2); - } - else - { - sprintf(out, "%cV", 254); - write(fd, out, 2); + if (on) { + sprintf (out, "%cW", 254); + write (fd, out, 2); + } else { + sprintf (out, "%cV", 254); + write (fd, out, 2); } } @@ -350,28 +334,30 @@ void MtxOrb_output(int on) ///////////////////////////////////////////////////////////////// // Toggle the built-in linewrapping feature // -static void MtxOrb_linewrap(int on) +static void +MtxOrb_linewrap (int on) { - char out[4]; - if(on) - sprintf(out, "%cC", 254); - else - sprintf(out, "%cD", 254); - write(fd, out, 2); + char out[4]; + if (on) + sprintf (out, "%cC", 254); + else + sprintf (out, "%cD", 254); + write (fd, out, 2); } ///////////////////////////////////////////////////////////////// // Toggle the built-in automatic scrolling feature // -static void MtxOrb_autoscroll(int on) +static void +MtxOrb_autoscroll (int on) { char out[4]; - if(on) - sprintf(out, "%cQ", 254); + if (on) + sprintf (out, "%cQ", 254); else - sprintf(out, "%cR", 254); - write(fd, out, 2); + sprintf (out, "%cR", 254); + write (fd, out, 2); } @@ -379,14 +365,15 @@ static void MtxOrb_autoscroll(int on) ///////////////////////////////////////////////////////////////// // Toggle cursor blink on/off // -static void MtxOrb_cursorblink(int on) +static void +MtxOrb_cursorblink (int on) { char out[4]; if (on) - sprintf(out, "%cS", 254); + sprintf (out, "%cS", 254); else - sprintf(out, "%cT", 254); - write(fd, out, 2); + sprintf (out, "%cT", 254); + write (fd, out, 2); } @@ -394,18 +381,20 @@ static void MtxOrb_cursorblink(int on) ///////////////////////////////////////////////////////////////// // Sets up for vertical bars. Call before lcd.vbar() // -void MtxOrb_init_vbar() +void +MtxOrb_init_vbar () { - MtxOrb_init_all(vbar); + MtxOrb_init_all (vbar); } // TODO: Might not be needed anymore... ///////////////////////////////////////////////////////////////// // Inits horizontal bars... // -void MtxOrb_init_hbar() +void +MtxOrb_init_hbar () { - MtxOrb_init_all(hbar); + MtxOrb_init_all (hbar); } // TODO: Finish the support for bar growing reverse way. @@ -414,36 +403,39 @@ void MtxOrb_init_hbar() // Draws a vertical bar... // This is the new version ussing dynamic icon alocation // -void MtxOrb_vbar(int x, int len) +void +MtxOrb_vbar (int x, int len) { - unsigned char mapu[9]={barw,baru1,baru2,baru3,baru4,baru5,baru6,baru7,barb}; - unsigned char mapd[9]={barw,bard1,bard2,bard3,bard4,bard5,bard6,bard7,barb}; - - int y; + unsigned char mapu[9] = { barw, baru1, baru2, baru3, baru4, baru5, baru6, baru7, barb }; + unsigned char mapd[9] = { barw, bard1, bard2, bard3, bard4, bard5, bard6, bard7, barb }; + + int y; // TODO: REMOVE THE NEXT LINE FOR TESTING ONLY... // len=-len; // TODO: REMOVE THE PREVIOUS LINE FOR TESTING ONLY... - if(len>0){ - for(y=lcd.hgt; y > 0 && len>0; y--) - { - if(len >= lcd.cellhgt) MtxOrb_chr(x, y, 255); - else MtxOrb_chr(x, y, MtxOrb_ask_bar(mapu[len])); + if (len > 0) { + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + MtxOrb_chr (x, y, 255); + else + MtxOrb_chr (x, y, MtxOrb_ask_bar (mapu[len])); - len -= lcd.cellhgt; + len -= lcd.cellhgt; } - }else{ - len=-len; - for(y=2; y <= lcd.hgt && len>0; y++) - { - if(len >= lcd.cellhgt) MtxOrb_chr(x, y, 255); - else MtxOrb_chr(x, y, MtxOrb_ask_bar(mapd[len])); + } else { + len = -len; + for (y = 2; y <= lcd.hgt && len > 0; y++) { + if (len >= lcd.cellhgt) + MtxOrb_chr (x, y, 255); + else + MtxOrb_chr (x, y, MtxOrb_ask_bar (mapd[len])); + + len -= lcd.cellhgt; + } + } - len -= lcd.cellhgt; - } - } - } // TODO: Finish the support for bar growing reverse way. @@ -451,34 +443,34 @@ void MtxOrb_vbar(int x, int len) // Draws a horizontal bar to the right. // This is the new version ussing dynamic icon alocation // -void MtxOrb_hbar(int x, int y, int len) +void +MtxOrb_hbar (int x, int y, int len) { - unsigned char mapr[6]={barw,barr1,barr2,barr3,barr4,barb}; - unsigned char mapl[6]={barw,barl1,barl2,barl3,barl4,barb}; + unsigned char mapr[6] = { barw, barr1, barr2, barr3, barr4, barb }; + unsigned char mapl[6] = { barw, barl1, barl2, barl3, barl4, barb }; - if(len>0) - { - for(; x<=lcd.wid && len>0; x++) - { - if(len >= lcd.cellwid) MtxOrb_chr(x,y,255); - else MtxOrb_chr(x, y, MtxOrb_ask_bar(mapr[len])); - - len -= lcd.cellwid; - - } - } - else - { - len=-len; - for(; x>0 && len>0; x--) - { - if(len >= lcd.cellwid) MtxOrb_chr(x,y,255); - else MtxOrb_chr(x, y, MtxOrb_ask_bar(mapl[len])); - - len -= lcd.cellwid; - - } - } + if (len > 0) { + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + MtxOrb_chr (x, y, 255); + else + MtxOrb_chr (x, y, MtxOrb_ask_bar (mapr[len])); + + len -= lcd.cellwid; + + } + } else { + len = -len; + for (; x > 0 && len > 0; x--) { + if (len >= lcd.cellwid) + MtxOrb_chr (x, y, 255); + else + MtxOrb_chr (x, y, MtxOrb_ask_bar (mapl[len])); + + len -= lcd.cellwid; + + } + } } @@ -487,14 +479,15 @@ void MtxOrb_hbar(int x, int y, int len) ///////////////////////////////////////////////////////////////// // Sets up for big numbers. // -void MtxOrb_init_num() +void +MtxOrb_init_num () { - char out[3]; - if(custom!=bign) { - sprintf(out, "%cn", 254); - write(fd, out, 2); - custom=bign; - } + char out[3]; + if (custom != bign) { + sprintf (out, "%cn", 254); + write (fd, out, 2); + custom = bign; + } } // TODO: Might not work, bignum is untested... an untested with dynamic bar. @@ -502,11 +495,12 @@ void MtxOrb_init_num() ///////////////////////////////////////////////////////////////// // Writes a big number. // -void MtxOrb_num(int x, int num) +void +MtxOrb_num (int x, int num) { - char out[5]; - sprintf(out, "%c#%c%c", 254, x, num); - write(fd, out, 4); + char out[5]; + sprintf (out, "%c#%c%c", 254, x, num); + write (fd, out, 4); } @@ -519,71 +513,74 @@ void MtxOrb_num(int x, int num) // // The input is just an array of characters... // -void MtxOrb_set_char(int n, char *dat) +void +MtxOrb_set_char (int n, char *dat) { - char out[4]; - int row, col; - int letter; + char out[4]; + int row, col; + int letter; - if(n < 0 || n > 7) return; - if(!dat) return; + if (n < 0 || n > 7) + return; + if (!dat) + return; - sprintf(out, "%cN%c", 254, n); - write(fd, out, 3); - - for(row=0; row 0); - } - write(fd, &letter, 1); - } + sprintf (out, "%cN%c", 254, n); + write (fd, out, 3); + + for (row = 0; row < lcd.cellhgt; row++) { + letter = 0; + for (col = 0; col < lcd.cellwid; col++) { + letter <<= 1; + letter |= (dat[(row * lcd.cellwid) + col] > 0); + } + write (fd, &letter, 1); + } } -void MtxOrb_icon(int which, char dest) +void +MtxOrb_icon (int which, char dest) { - char icons[3][5*8] = { - { - 1,1,1,1,1, // Empty Heart - 1,0,1,0,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,0,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, + char icons[3][5 * 8] = { + { + 1, 1, 1, 1, 1, // Empty Heart + 1, 0, 1, 0, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, - { - 1,1,1,1,1, // Filled Heart - 1,0,1,0,1, - 0,1,0,1,0, - 0,1,1,1,0, - 0,1,1,1,0, - 1,0,1,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, - - { - 0,0,0,0,0, // Ellipsis - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,1,0,1, - }, - - }; - - if(custom==bign) custom=beat; - MtxOrb_set_char(dest, &icons[which][0]); + { + 1, 1, 1, 1, 1, // Filled Heart + 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, + 0, 1, 1, 1, 0, + 0, 1, 1, 1, 0, + 1, 0, 1, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, + + { + 0, 0, 0, 0, 0, // Ellipsis + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, + }, + + }; + + if (custom == bign) + custom = beat; + MtxOrb_set_char (dest, &icons[which][0]); } ///////////////////////////////////////////////////////////// @@ -591,19 +588,20 @@ void MtxOrb_icon(int which, char dest) // // Input is a character array, sized lcd.wid*lcd.hgt // -void MtxOrb_draw_frame(char *dat) +void +MtxOrb_draw_frame (char *dat) { - char out[LCD_MAX_WIDTH * LCD_MAX_HEIGHT]; - int i; - - if(!dat) return; + char out[LCD_MAX_WIDTH * LCD_MAX_HEIGHT]; + int i; - for(i=0; i 7) return; + if (which < 0 || which > 7) + return; - if(!which){ - if(on) - sprintf(out, "%cV", 254); - else - sprintf(out, "%cW", 254); - write(fd, out, 2); - } - else{ - if(on) - sprintf(out, "%cV%c", 254, which); - else - sprintf(out, "%cW%c", 254, which); - write(fd, out, 3); - } + if (!which) { + if (on) + sprintf (out, "%cV", 254); + else + sprintf (out, "%cW", 254); + write (fd, out, 2); + } else { + if (on) + sprintf (out, "%cV%c", 254, which); + else + sprintf (out, "%cW%c", 254, which); + write (fd, out, 3); + } } @@ -652,329 +652,382 @@ void MtxOrb_led(int which, int on) // I really hope it is working and bug-less because it is not // completely tested, just a quick hack. // -int MtxOrb_ask_bar(int type) +int +MtxOrb_ask_bar (int type) { int i; int last_not_in_use; - int pos; // 0 is icon, 1 to 7 are free, 8 is not found. + int pos; // 0 is icon, 1 to 7 are free, 8 is not found. // TODO: Reuse graphic caracter 0 if heartbeat is not in use. // REMOVE: fprintf(stderr, "GLU: MtxOrb_ask_bar(%d).\n", type); // Check if the screen was clear. - if (clear){ // If the screen was clear then graphic caracter are not in use. + if (clear) { // If the screen was clear then graphic caracter are not in use. //REMOVE: fprintf(stderr, "GLU: MtxOrb_ask_bar| clear was set.\n"); - use[0]=1; // Heartbeat is always in use (not true but it help). - for(pos=1; pos<8; pos++){ - use[pos]=0; // Other are not in use. + use[0] = 1; // Heartbeat is always in use (not true but it help). + for (pos = 1; pos < 8; pos++) { + use[pos] = 0; // Other are not in use. } - clear=0; // We made the special treatement. - }else{ + clear = 0; // We made the special treatement. + } else { // Nothing special if some caracter a curently in use (...) ? } // Search for a match with caracter already defined. - pos=8; // Not found. - last_not_in_use=8; // No empty slot to reuse. - for(i=1; i<8; i++){ // For all but first (heartbeat). - if(!use[i]) last_not_in_use=i; // New empty slot. - if(def[i]==type) pos=i; // Founded (should break now). + pos = 8; // Not found. + last_not_in_use = 8; // No empty slot to reuse. + for (i = 1; i < 8; i++) { // For all but first (heartbeat). + if (!use[i]) + last_not_in_use = i; // New empty slot. + if (def[i] == type) + pos = i; // Founded (should break now). } - - if (pos==8){ + + if (pos == 8) { // REMOVE: fprintf(stderr, "GLU: MtxOrb_ask_bar| not found.\n"); - pos=last_not_in_use; + pos = last_not_in_use; // TODO: Best match/deep search is no more graphic caracter are available. } - - if (pos!=8){ // A caracter is found (Best match could solve our problem). + + if (pos != 8) { // A caracter is found (Best match could solve our problem). // REMOVE: fprintf(stderr, "GLU: MtxOrb_ask_bar| found at %d.\n", pos); - if(def[pos]!=type){ - MtxOrb_set_known_char(pos, type); // Define a new graphic caracter. - def[pos]=type; // Remember that now the caracter is available. + if (def[pos] != type) { + MtxOrb_set_known_char (pos, type); // Define a new graphic caracter. + def[pos] = type; // Remember that now the caracter is available. } - if (!use[pos]){ // If the caracter is no yet in use (but defined). - use[pos]=1; // Remember it is in use (so protect it from re-use). + if (!use[pos]) { // If the caracter is no yet in use (but defined). + use[pos] = 1; // Remember it is in use (so protect it from re-use). } } - - if (pos==8) // TODO: Choose a character to approximate the graph + + if (pos == 8) // TODO: Choose a character to approximate the graph { //pos=65; // ("A")? - switch(type) - { - case baru1: pos='_'; break; - case baru2: pos='.'; break; - case baru3: pos=','; break; - case baru4: pos='o'; break; - case baru5: pos='o'; break; - case baru6: pos='O'; break; - case baru7: pos='8'; break; + switch (type) { + case baru1: + pos = '_'; + break; + case baru2: + pos = '.'; + break; + case baru3: + pos = ','; + break; + case baru4: + pos = 'o'; + break; + case baru5: + pos = 'o'; + break; + case baru6: + pos = 'O'; + break; + case baru7: + pos = '8'; + break; - case bard1: pos='\''; break; - case bard2: pos='"'; break; - case bard3: pos='^'; break; - case bard4: pos='^'; break; - case bard5: pos='*'; break; - case bard6: pos='O'; break; - case bard7: pos='8'; break; + case bard1: + pos = '\''; + break; + case bard2: + pos = '"'; + break; + case bard3: + pos = '^'; + break; + case bard4: + pos = '^'; + break; + case bard5: + pos = '*'; + break; + case bard6: + pos = 'O'; + break; + case bard7: + pos = '8'; + break; - case barr1: pos='-'; break; - case barr2: pos='-'; break; - case barr3: pos='='; break; - case barr4: pos='='; break; + case barr1: + pos = '-'; + break; + case barr2: + pos = '-'; + break; + case barr3: + pos = '='; + break; + case barr4: + pos = '='; + break; - case barl1: pos='-'; break; - case barl2: pos='-'; break; - case barl3: pos='='; break; - case barl4: pos='='; break; + case barl1: + pos = '-'; + break; + case barl2: + pos = '-'; + break; + case barl3: + pos = '='; + break; + case barl4: + pos = '='; + break; - case barw: pos=' '; break; + case barw: + pos = ' '; + break; - case barb: pos=255; break; + case barb: + pos = 255; + break; - default: pos='?'; break; + default: + pos = '?'; + break; } } - - return(pos); + + return (pos); } ///////////////////////////////////////////////////////////////// // Sets up a well known character for use. // -void MtxOrb_set_known_char(int car, int type) +void +MtxOrb_set_known_char (int car, int type) { - char all_bar[25][5*8] = { + char all_bar[25][5 * 8] = { { - 0,0,0,0,0, // char u1[] = - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u2[] = - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u3[] = - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u4[] = - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u5[] = - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u6[] = - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // char u7[] = - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - },{ - 1,1,1,1,1, // char d1[] = - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d2[] = - 1,1,1,1,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d3[] = - 1,1,1,1,1, - 1,1,1,1,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d4[] = - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d5[] = - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d6[] = - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 0,0,0,0,0, - 0,0,0,0,0, - },{ - 1,1,1,1,1, // char d7[] = - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 0,0,0,0,0, - },{ - 1,0,0,0,0, // char r1[] = - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - },{ - 1,1,0,0,0, // char r2[] = - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - },{ - 1,1,1,0,0, // char r3[] = - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - },{ - 1,1,1,1,0, // char r4[] = - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - },{ - 0,0,0,0,1, // char l1[] = - 0,0,0,0,1, - 0,0,0,0,1, - 0,0,0,0,1, - 0,0,0,0,1, - 0,0,0,0,1, - 0,0,0,0,1, - 0,0,0,0,1, - },{ - 0,0,0,1,1, // char l2[] = - 0,0,0,1,1, - 0,0,0,1,1, - 0,0,0,1,1, - 0,0,0,1,1, - 0,0,0,1,1, - 0,0,0,1,1, - 0,0,0,1,1, - },{ - 0,0,1,1,1, // char l3[] = - 0,0,1,1,1, - 0,0,1,1,1, - 0,0,1,1,1, - 0,0,1,1,1, - 0,0,1,1,1, - 0,0,1,1,1, - 0,0,1,1,1, - },{ - 0,1,1,1,1, // char l4[] = - 0,1,1,1,1, - 0,1,1,1,1, - 0,1,1,1,1, - 0,1,1,1,1, - 0,1,1,1,1, - 0,1,1,1,1, - 0,1,1,1,1, - },{ - 1,1,1,1,1, // Empty Heart - 1,0,1,0,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,0,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - },{ - 1,1,1,1,1, // Filled Heart - 1,0,1,0,1, - 0,1,0,1,0, - 0,1,1,1,0, - 0,1,1,1,0, - 1,0,1,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - },{ - 0,0,0,0,0, // Ellipsis - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,1,0,1, - } -}; + 0, 0, 0, 0, 0, // char u1[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u2[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u3[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u4[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u5[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u6[] = + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // char u7[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }, { + 1, 1, 1, 1, 1, // char d1[] = + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d2[] = + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d3[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d4[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d5[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d6[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + }, { + 1, 1, 1, 1, 1, // char d7[] = + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, + }, { + 1, 0, 0, 0, 0, // char r1[] = + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + }, { + 1, 1, 0, 0, 0, // char r2[] = + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + }, { + 1, 1, 1, 0, 0, // char r3[] = + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + }, { + 1, 1, 1, 1, 0, // char r4[] = + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + }, { + 0, 0, 0, 0, 1, // char l1[] = + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, + }, { + 0, 0, 0, 1, 1, // char l2[] = + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + 0, 0, 0, 1, 1, + }, { + 0, 0, 1, 1, 1, // char l3[] = + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 1, 1, 1, + }, { + 0, 1, 1, 1, 1, // char l4[] = + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, + }, { + 1, 1, 1, 1, 1, // Empty Heart + 1, 0, 1, 0, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, { + 1, 1, 1, 1, 1, // Filled Heart + 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, + 0, 1, 1, 1, 0, + 0, 1, 1, 1, 0, + 1, 0, 1, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, { + 0, 0, 0, 0, 0, // Ellipsis + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, + } + }; -MtxOrb_set_char(car, &all_bar[type][0]); + MtxOrb_set_char (car, &all_bar[type][0]); } @@ -985,7 +1038,7 @@ MtxOrb_set_char(car, &all_bar[type][0]); // TODO: Remove this code wich was use for developpement. // PS: There might be reference to this code left, so keep it for some time. -void MtxOrb_init_all(int type) +void +MtxOrb_init_all (int type) { } - diff --git a/server/drivers/MtxOrb.h b/server/drivers/MtxOrb.h index d0a92e5..0d0ea74 100644 --- a/server/drivers/MtxOrb.h +++ b/server/drivers/MtxOrb.h @@ -4,28 +4,28 @@ extern lcd_logical_driver *MtxOrb; -int MtxOrb_init(lcd_logical_driver *driver, char *device); -void MtxOrb_clear(); -void MtxOrb_close(); -void MtxOrb_flush(); -void MtxOrb_flush_box(int lft, int top, int rgt, int bot); -void MtxOrb_chr(int x, int y, char c) ; -int MtxOrb_contrast(int contrast); -void MtxOrb_backlight(int on); -void MtxOrb_output(int on); -void MtxOrb_init_vbar(); -void MtxOrb_init_hbar(); -void MtxOrb_vbar(int x, int len); -void MtxOrb_hbar(int x, int y, int len); -void MtxOrb_init_num(); -void MtxOrb_num(int x, int num); -void MtxOrb_set_char(int n, char *dat); -void MtxOrb_icon(int which, char dest); -void MtxOrb_draw_frame(char *dat); -char MtxOrb_getkey(); +int MtxOrb_init (lcd_logical_driver * driver, char *device); +void MtxOrb_clear (); +void MtxOrb_close (); +void MtxOrb_flush (); +void MtxOrb_flush_box (int lft, int top, int rgt, int bot); +void MtxOrb_chr (int x, int y, char c); +int MtxOrb_contrast (int contrast); +void MtxOrb_backlight (int on); +void MtxOrb_output (int on); +void MtxOrb_init_vbar (); +void MtxOrb_init_hbar (); +void MtxOrb_vbar (int x, int len); +void MtxOrb_hbar (int x, int y, int len); +void MtxOrb_init_num (); +void MtxOrb_num (int x, int num); +void MtxOrb_set_char (int n, char *dat); +void MtxOrb_icon (int which, char dest); +void MtxOrb_draw_frame (char *dat); +char MtxOrb_getkey (); -void MtxOrb_init_all(int type); -int MtxOrb_ask_bar(int type); -void MtxOrb_set_known_char(int car, int type); +void MtxOrb_init_all (int type); +int MtxOrb_ask_bar (int type); +void MtxOrb_set_known_char (int car, int type); #endif diff --git a/server/drivers/curses_drv.c b/server/drivers/curses_drv.c index 4685469..ea2551e 100644 --- a/server/drivers/curses_drv.c +++ b/server/drivers/curses_drv.c @@ -24,8 +24,8 @@ lcd_logical_driver *curses_drv; -int PAD=255; -int ELLIPSIS=7; +int PAD = 255; +int ELLIPSIS = 7; ////////////////////////////////////////////////////////////////////////// ////////////////////// For Curses Terminal Output //////////////////////// @@ -34,85 +34,65 @@ int ELLIPSIS=7; static char icon_char = '@'; -int curses_drv_init(struct lcd_logical_driver *driver, char *args) +int +curses_drv_init (struct lcd_logical_driver *driver, char *args) { char *argv[64]; int argc; - int i,j; - - - argc = get_args(argv, args, 64); + int i, j; - for(i=0; i argc) { - fprintf(stderr, "curses_init: %s requires an argument\n", - argv[i]); + + argc = get_args (argv, args, 64); + + for (i = 0; i < argc; i++) { + if (0 == strcmp (argv[i], "-f") || 0 == strcmp (argv[i], "--forecolor")) { + if (i + 1 > argc) { + fprintf (stderr, "curses_init: %s requires an argument\n", argv[i]); return -1; } // TODO: color display in curses driver! - printf("Sorry, colors not yet implemented...\n"); + printf ("Sorry, colors not yet implemented...\n"); //strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-b") || - 0 == strcmp(argv[i], "--backcolor")) - { - if(i + 1 > argc) { - fprintf(stderr, "curses_init: %s requires an argument\n", - argv[i]); + } else if (0 == strcmp (argv[i], "-b") || 0 == strcmp (argv[i], "--backcolor")) { + if (i + 1 > argc) { + fprintf (stderr, "curses_init: %s requires an argument\n", argv[i]); return -1; } // TODO: color display in curses driver! - printf("Sorry, colors not yet implemented...\n"); + printf ("Sorry, colors not yet implemented...\n"); //strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-B") || - 0 == strcmp(argv[i], "--backlight")) - { - if(i + 1 > argc) { - fprintf(stderr, "curses_init: %s requires an argument\n", - argv[i]); + } else if (0 == strcmp (argv[i], "-B") || 0 == strcmp (argv[i], "--backlight")) { + if (i + 1 > argc) { + fprintf (stderr, "curses_init: %s requires an argument\n", argv[i]); return -1; } // TODO: color display in curses driver! - printf("Sorry, colors not yet implemented...\n"); + printf ("Sorry, colors not yet implemented...\n"); //strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc [n]curses driver\n" - "\t-f\t--forecolor\tChange the foreground color\n" - "\t-b\t--backcolor\tChange the backlight's \"off\" color\n" - "\t-B\t--backlight\tChange the backlight's \"on\" color\n" - "\t-h\t--help\t\tShow this help information\n"); + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc [n]curses driver\n" "\t-f\t--forecolor\tChange the foreground color\n" "\t-b\t--backcolor\tChange the backlight's \"off\" color\n" "\t-B\t--backlight\tChange the backlight's \"on\" color\n" "\t-h\t--help\t\tShow this help information\n"); return -1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - + } - + curses_drv = driver; // Init curses... - initscr(); - cbreak(); - noecho(); - nodelay(stdscr, TRUE); - nonl(); - intrflush(stdscr, FALSE); - keypad(stdscr, TRUE); + initscr (); + cbreak (); + noecho (); + nodelay (stdscr, TRUE); + nonl (); + intrflush (stdscr, FALSE); + keypad (stdscr, TRUE); - curses_drv_clear(); + curses_drv_clear (); - // Override output functions... + // Override output functions... driver->clear = curses_drv_clear; driver->string = curses_drv_string; driver->chr = curses_drv_chr; @@ -122,7 +102,7 @@ int curses_drv_init(struct lcd_logical_driver *driver, char *args) driver->init_hbar = NULL; driver->num = curses_drv_num; driver->init_num = curses_drv_init_num; - + driver->init = curses_drv_init; driver->close = curses_drv_close; driver->flush = curses_drv_flush; @@ -139,29 +119,31 @@ int curses_drv_init(struct lcd_logical_driver *driver, char *args) PAD = '#'; // Change the character used for "..." ELLIPSIS = '~'; - - return 200; // 200 is arbitrary. (must be 1 or more) + + return 200; // 200 is arbitrary. (must be 1 or more) } -void curses_drv_close() +void +curses_drv_close () { // Close curses - clear(); - move(0,0); - refresh(); - endwin(); + clear (); + move (0, 0); + refresh (); + endwin (); + + drv_base_close (); - drv_base_close(); - } ///////////////////////////////////////////////////////////////// // Clears the LCD screen // -void curses_drv_clear() +void +curses_drv_clear () { - clear(); - + clear (); + } @@ -169,100 +151,111 @@ void curses_drv_clear() // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void curses_drv_string(int x, int y, char string[]) +void +curses_drv_string (int x, int y, char string[]) { int i; unsigned char *c; - for(i=0; string[i]; i++) - { + for (i = 0; string[i]; i++) { c = &string[i]; - switch(*c) - { - case 0: *c = icon_char; break; - case 255: *c = '#'; break; + switch (*c) { + case 0: + *c = icon_char; + break; + case 255: + *c = '#'; + break; } } - mvaddstr(y-1, x-1, string); + mvaddstr (y - 1, x - 1, string); } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void curses_drv_chr(int x, int y, char c) +void +curses_drv_chr (int x, int y, char c) { - switch(c) - { - case 0: c = icon_char; break; - case -1: c = '#'; break; + switch (c) { + case 0: + c = icon_char; + break; + case -1: + c = '#'; + break; } - mvaddch(y-1, x-1, c); + mvaddch (y - 1, x - 1, c); } ///////////////////////////////////////////////////////////////// // Sets up for big numbers. // -void curses_drv_init_num() +void +curses_drv_init_num () { } ///////////////////////////////////////////////////////////////// // Writes a big number. // -void curses_drv_num(int x, int num) +void +curses_drv_num (int x, int num) { char c; int y, dx; - c='0'+num; + c = '0' + num; // printf(&c,"%1d",num); - for(y=1; y<5; y++) - for(dx=0; dx<3; dx++) - curses_drv_chr(x+dx, y, c); + for (y = 1; y < 5; y++) + for (dx = 0; dx < 3; dx++) + curses_drv_chr (x + dx, y, c); } ///////////////////////////////////////////////////////////////// // Draws a vertical bar; erases entire column onscreen. // -void curses_drv_vbar(int x, int len) +void +curses_drv_vbar (int x, int len) { - char map[]="_.,,ooO8"; - + char map[] = "_.,,ooO8"; + int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - if(len >= lcd.cellhgt) curses_drv_chr(x, y, '8'); - else curses_drv_chr(x, y, map[len-1]); - + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + curses_drv_chr (x, y, '8'); + else + curses_drv_chr (x, y, map[len - 1]); + len -= lcd.cellhgt; } // move(4-len/lcd.cellhgt, x-1); // vline(0, len/lcd.cellhgt); - + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void curses_drv_hbar(int x, int y, int len) +void +curses_drv_hbar (int x, int y, int len) { - for(; x<=lcd.wid && len>0; x++) - { - if(len>=lcd.cellwid) - curses_drv_chr(x, y, '='); + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + curses_drv_chr (x, y, '='); else - curses_drv_chr(x, y, '-'); - + curses_drv_chr (x, y, '-'); + len -= lcd.cellwid; } - - + + // move(y-1, x-1); // hline(0, len/lcd.cellwid); } @@ -271,56 +264,71 @@ void curses_drv_hbar(int x, int y, int len) ///////////////////////////////////////////////////////////////// // Sets character 0 to an icon... // -void curses_drv_icon(int which, char dest) +void +curses_drv_icon (int which, char dest) { - if(dest == 0) - switch(which) - { - case 0: icon_char = '+'; break; - case 1: icon_char = '*'; break; - default: icon_char = '#'; break; + if (dest == 0) + switch (which) { + case 0: + icon_char = '+'; + break; + case 1: + icon_char = '*'; + break; + default: + icon_char = '#'; + break; } - + } ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // -void curses_drv_flush() +void +curses_drv_flush () { - curses_drv_draw_frame(curses_drv->framebuf); + curses_drv_draw_frame (curses_drv->framebuf); } -void curses_drv_flush_box(int lft, int top, int rgt, int bot) +void +curses_drv_flush_box (int lft, int top, int rgt, int bot) { - curses_drv_flush(); + curses_drv_flush (); } -void curses_drv_draw_frame(char *dat) +void +curses_drv_draw_frame (char *dat) { // border(0, 0, 0, 0, 0, 0, lcd.wid+1, lcd.hgt+1); - - refresh(); + + refresh (); } -char curses_drv_getkey() +char +curses_drv_getkey () { int i; - - i = getch(); - - if(i == KEY_LEFT) return 'D'; - if(i == KEY_UP) return 'B'; - if(i == KEY_DOWN) return 'C'; - if(i == KEY_RIGHT) return 'A'; - if(i != ERR) return i; - else return 0; - + i = getch (); + + if (i == KEY_LEFT) + return 'D'; + if (i == KEY_UP) + return 'B'; + if (i == KEY_DOWN) + return 'C'; + if (i == KEY_RIGHT) + return 'A'; + + if (i != ERR) + return i; + else + return 0; + } - diff --git a/server/drivers/curses_drv.h b/server/drivers/curses_drv.h index 3738144..0cc3034 100644 --- a/server/drivers/curses_drv.h +++ b/server/drivers/curses_drv.h @@ -4,21 +4,21 @@ extern lcd_logical_driver *curses_drv; -int curses_drv_init(struct lcd_logical_driver *driver, char *args); -void curses_drv_close(); -void curses_drv_clear(); -void curses_drv_flush(); -void curses_drv_string(int x, int y, char string[]); -void curses_drv_chr(int x, int y, char c); -void curses_drv_vbar(int x, int len); -void curses_drv_hbar(int x, int y, int len); -void curses_drv_icon(int which, char dest); -void curses_drv_flush(); -void curses_drv_flush_box(int lft, int top, int rgt, int bot); -void curses_drv_draw_frame(char *dat); -char curses_drv_getkey(); -void curses_drv_init_num(); -void curses_drv_num(int x, int num); +int curses_drv_init (struct lcd_logical_driver *driver, char *args); +void curses_drv_close (); +void curses_drv_clear (); +void curses_drv_flush (); +void curses_drv_string (int x, int y, char string[]); +void curses_drv_chr (int x, int y, char c); +void curses_drv_vbar (int x, int len); +void curses_drv_hbar (int x, int y, int len); +void curses_drv_icon (int which, char dest); +void curses_drv_flush (); +void curses_drv_flush_box (int lft, int top, int rgt, int bot); +void curses_drv_draw_frame (char *dat); +char curses_drv_getkey (); +void curses_drv_init_num (); +void curses_drv_num (int x, int num); #endif diff --git a/server/drivers/debug.c b/server/drivers/debug.c index 5266b32..e8a3b8e 100644 --- a/server/drivers/debug.c +++ b/server/drivers/debug.c @@ -18,88 +18,93 @@ // function... -int debug_init(struct lcd_logical_driver *driver, char *args) +int +debug_init (struct lcd_logical_driver *driver, char *args) { - printf("debug_init(%s)\n", device); - - if(!driver->framebuf) - { - printf("Allocating frame buffer (%ix%i)\n", lcd.wid, lcd.hgt); - driver->framebuf = malloc(lcd.wid * lcd.hgt); - } - + printf ("debug_init(%s)\n", device); - if(!driver->framebuf) - { - debug_close(); + if (!driver->framebuf) { + printf ("Allocating frame buffer (%ix%i)\n", lcd.wid, lcd.hgt); + driver->framebuf = malloc (lcd.wid * lcd.hgt); + } + + + if (!driver->framebuf) { + debug_close (); return -1; - } + } - if(driver->framebuf) printf("Frame buffer: %i\n", (int)driver->framebuf); + if (driver->framebuf) + printf ("Frame buffer: %i\n", (int) driver->framebuf); - debug_clear(); + debug_clear (); - driver->clear = debug_clear; - driver->string = debug_string; - driver->chr = debug_chr; - driver->vbar = debug_vbar; - driver->hbar = debug_hbar; - driver->init_num = debug_init_num; - driver->num = debug_num; - - driver->init = debug_init; - driver->close = debug_close; - driver->flush = debug_flush; - driver->flush_box = debug_flush_box; - driver->contrast = debug_contrast; - driver->backlight = debug_backlight; - driver->set_char = debug_set_char; - driver->icon = debug_icon; - driver->init_vbar = debug_init_vbar; - driver->init_hbar = debug_init_hbar; - driver->draw_frame = debug_draw_frame; + driver->clear = debug_clear; + driver->string = debug_string; + driver->chr = debug_chr; + driver->vbar = debug_vbar; + driver->hbar = debug_hbar; + driver->init_num = debug_init_num; + driver->num = debug_num; - driver->getkey = debug_getkey; - - - return 200; // 200 is arbitrary. (must be 1 or more) + driver->init = debug_init; + driver->close = debug_close; + driver->flush = debug_flush; + driver->flush_box = debug_flush_box; + driver->contrast = debug_contrast; + driver->backlight = debug_backlight; + driver->set_char = debug_set_char; + driver->icon = debug_icon; + driver->init_vbar = debug_init_vbar; + driver->init_hbar = debug_init_hbar; + driver->draw_frame = debug_draw_frame; + + driver->getkey = debug_getkey; + + + return 200; // 200 is arbitrary. (must be 1 or more) } -void debug_close() +void +debug_close () { // Ack! This shouldn't crash the program, but does.. Why?? - printf("debug_close()\n"); + printf ("debug_close()\n"); // This is the line which crashes. - if(driver->framebuf) free(driver->framebuf); + if (driver->framebuf) + free (driver->framebuf); - if(driver->framebuf) printf("Frame buffer: %i\n", (int)driver->framebuf); - driver->framebuf = NULL; + if (driver->framebuf) + printf ("Frame buffer: %i\n", (int) driver->framebuf); + driver->framebuf = NULL; // printf("debug_close() finished\n"); } ///////////////////////////////////////////////////////////////// // Clears the LCD screen // -void debug_clear() +void +debug_clear () { - printf("clear()\n"); - - memset(driver->framebuf, ' ', lcd.wid*lcd.hgt); - + printf ("clear()\n"); + + memset (driver->framebuf, ' ', lcd.wid * lcd.hgt); + } ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // -void debug_flush() +void +debug_flush () { - printf("flush()\n"); - - lcd.draw_frame(); + printf ("flush()\n"); + + lcd.draw_frame (); } @@ -107,182 +112,188 @@ void debug_flush() // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void debug_string(int x, int y, char string[]) +void +debug_string (int x, int y, char string[]) { - int i; + int i; - printf("string(%i, %i):%s \n", x, y, string); - + printf ("string(%i, %i):%s \n", x, y, string); - x -= 1; // Convert 1-based coords to 0-based... - y -= 1; - - for(i=0; string[i]; i++) - { - driver->framebuf[(y*lcd.wid) + x + i] = string[i]; - } + + x -= 1; // Convert 1-based coords to 0-based... + y -= 1; + + for (i = 0; string[i]; i++) { + driver->framebuf[(y * lcd.wid) + x + i] = string[i]; + } } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void debug_chr(int x, int y, char c) +void +debug_chr (int x, int y, char c) { - printf("character(%i, %i):%c\n", x, y, c); - + printf ("character(%i, %i):%c\n", x, y, c); - y--; - x--; - - lcd.framebuf[(y*lcd.wid) + x] = c; + + y--; + x--; + + lcd.framebuf[(y * lcd.wid) + x] = c; } -void debug_contrast(int contrast) +void +debug_contrast (int contrast) { - printf("Contrast: %i\n", contrast); + printf ("Contrast: %i\n", contrast); } -void debug_backlight(int on) +void +debug_backlight (int on) { - if(on) - { - printf("Backlight ON\n"); - } - else - { - printf("Backlight OFF\n"); - } + if (on) { + printf ("Backlight ON\n"); + } else { + printf ("Backlight OFF\n"); + } } -void debug_init_vbar() +void +debug_init_vbar () { - printf("Vertical bars.\n"); + printf ("Vertical bars.\n"); } -void debug_init_hbar() +void +debug_init_hbar () { - printf("Horizontal bars.\n"); + printf ("Horizontal bars.\n"); } -void debug_init_num() +void +debug_init_num () { - printf("Big Numbers.\n"); + printf ("Big Numbers.\n"); } -void debug_num(int x, int num) +void +debug_num (int x, int num) { - printf("BigNum(%i, %i)\n", x, num); + printf ("BigNum(%i, %i)\n", x, num); } -void debug_set_char(int n, char *dat) +void +debug_set_char (int n, char *dat) { - printf("Set Character %i\n", n); + printf ("Set Character %i\n", n); } ///////////////////////////////////////////////////////////////// // Draws a vertical bar; erases entire column onscreen. // -void debug_vbar(int x, int len) +void +debug_vbar (int x, int len) { - int y; + int y; - printf("Vbar(%i, %i)\n", x, len); - + printf ("Vbar(%i, %i)\n", x, len); - for(y=lcd.hgt; y > 0 && len>0; y--) - { - debug_chr(x, y, '|'); + + for (y = lcd.hgt; y > 0 && len > 0; y--) { + debug_chr (x, y, '|'); len -= lcd.cellhgt; - } - + } + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void debug_hbar(int x, int y, int len) +void +debug_hbar (int x, int y, int len) { - printf("Hbar(%i, %i, %i)\n", x, y, len); - - - for(; x0; x++) - { - debug_chr(x,y,'-'); - + printf ("Hbar(%i, %i, %i)\n", x, y, len); + + + for (; x < lcd.wid && len > 0; x++) { + debug_chr (x, y, '-'); + len -= lcd.cellwid; - } - + } + } ///////////////////////////////////////////////////////////////// // Sets character 0 to an icon... // -void debug_icon(int which, char dest) +void +debug_icon (int which, char dest) { - printf("Char %i is icon %i\n", dest, which); + printf ("Char %i is icon %i\n", dest, which); } -void debug_flush_box(int lft, int top, int rgt, int bot) +void +debug_flush_box (int lft, int top, int rgt, int bot) { - printf("Flush Box(%i, %i)-(%i, %i)\n", lft, top, rgt, bot); - + printf ("Flush Box(%i, %i)-(%i, %i)\n", lft, top, rgt, bot); + + + debug_flush (); - debug_flush(); - } -void debug_draw_frame(char *dat) +void +debug_draw_frame (char *dat) { - int i, j; + int i, j; - char out[LCD_MAX_WIDTH]; + char out[LCD_MAX_WIDTH]; - printf("draw_frame()\n"); - + printf ("draw_frame()\n"); - if(!dat) return; + + if (!dat) + return; // printf("Frame (%ix%i): \n%s\n", lcd.wid, lcd.hgt, dat); - for(i=0; iwid = 20; - driver->hgt = 4; - // You must use driver->framebuf here, but may use lcd.framebuf later. - if(!driver->framebuf) - driver->framebuf = malloc(driver->wid * driver->hgt); + driver->wid = 20; + driver->hgt = 4; - if(!driver->framebuf) - { - drv_base_close(); + // You must use driver->framebuf here, but may use lcd.framebuf later. + if (!driver->framebuf) + driver->framebuf = malloc (driver->wid * driver->hgt); + + if (!driver->framebuf) { + drv_base_close (); return -1; - } + } // Debugging... // if(lcd.framebuf) printf("Frame buffer: %i\n", (int)lcd.framebuf); - memset(driver->framebuf, ' ', driver->wid*driver->hgt); + memset (driver->framebuf, ' ', driver->wid * driver->hgt); // drv_base_clear(); - driver->cellwid = 5; - driver->cellhgt = 8; - - driver->clear = drv_base_clear; - driver->string = drv_base_string; - driver->chr = drv_base_chr; - driver->vbar = drv_base_vbar; - driver->init_vbar = drv_base_init_vbar; - driver->hbar = drv_base_hbar; - driver->init_hbar = drv_base_init_hbar; - driver->num = drv_base_num; - driver->init_num = drv_base_init_num; - - driver->init = drv_base_init; - driver->close = drv_base_close; - driver->flush = drv_base_flush; - driver->flush_box = drv_base_flush_box; - driver->contrast = drv_base_contrast; - driver->backlight = drv_base_backlight; - driver->set_char = drv_base_set_char; - driver->icon = drv_base_icon; - driver->draw_frame = drv_base_draw_frame; + driver->cellwid = 5; + driver->cellhgt = 8; - driver->getkey = drv_base_getkey; - - - return 200; // 200 is arbitrary. (must be 1 or more) + driver->clear = drv_base_clear; + driver->string = drv_base_string; + driver->chr = drv_base_chr; + driver->vbar = drv_base_vbar; + driver->init_vbar = drv_base_init_vbar; + driver->hbar = drv_base_hbar; + driver->init_hbar = drv_base_init_hbar; + driver->num = drv_base_num; + driver->init_num = drv_base_init_num; + + driver->init = drv_base_init; + driver->close = drv_base_close; + driver->flush = drv_base_flush; + driver->flush_box = drv_base_flush_box; + driver->contrast = drv_base_contrast; + driver->backlight = drv_base_backlight; + driver->set_char = drv_base_set_char; + driver->icon = drv_base_icon; + driver->draw_frame = drv_base_draw_frame; + + driver->getkey = drv_base_getkey; + + + return 200; // 200 is arbitrary. (must be 1 or more) } @@ -80,27 +80,31 @@ int drv_base_init(struct lcd_logical_driver *driver, char *args) // lcd.framebuf will be set to the appropriate buffer before calling // your driver. -void drv_base_close() +void +drv_base_close () { - if(lcd.framebuf != NULL) free(lcd.framebuf); + if (lcd.framebuf != NULL) + free (lcd.framebuf); - lcd.framebuf = NULL; + lcd.framebuf = NULL; } ///////////////////////////////////////////////////////////////// // Clears the LCD screen // -void drv_base_clear() +void +drv_base_clear () { - memset(lcd.framebuf, ' ', lcd.wid*lcd.hgt); - + memset (lcd.framebuf, ' ', lcd.wid * lcd.hgt); + } ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // -void drv_base_flush() +void +drv_base_flush () { //lcd.draw_frame(lcd.framebuf); } @@ -110,31 +114,33 @@ void drv_base_flush() // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void drv_base_string(int x, int y, char string[]) +void +drv_base_string (int x, int y, char string[]) { - int i; + int i; - x -= 1; // Convert 1-based coords to 0-based... - y -= 1; - - for(i=0; string[i]; i++) - { - // Check for buffer overflows... - if((y*lcd.wid) + x + i > (lcd.wid*lcd.hgt)) break; - lcd.framebuf[(y*lcd.wid) + x + i] = string[i]; - } + x -= 1; // Convert 1-based coords to 0-based... + y -= 1; + + for (i = 0; string[i]; i++) { + // Check for buffer overflows... + if ((y * lcd.wid) + x + i > (lcd.wid * lcd.hgt)) + break; + lcd.framebuf[(y * lcd.wid) + x + i] = string[i]; + } } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void drv_base_chr(int x, int y, char c) +void +drv_base_chr (int x, int y, char c) { - y--; - x--; + y--; + x--; - lcd.framebuf[(y*lcd.wid) + x] = c; + lcd.framebuf[(y * lcd.wid) + x] = c; } @@ -142,33 +148,36 @@ void drv_base_chr(int x, int y, char c) // Sets the contrast of the display. Value is 0-255, where 140 is // what I consider "just right". // -int drv_base_contrast(int contrast) +int +drv_base_contrast (int contrast) { // printf("Contrast: %i\n", contrast); - return -1; + return -1; } ////////////////////////////////////////////////////////////////////// // Turns the lcd backlight on or off... // -void drv_base_backlight(int on) +void +drv_base_backlight (int on) { - /* - if(on) - { - printf("Backlight ON\n"); - } - else - { - printf("Backlight OFF\n"); - } - */ + /* + if(on) + { + printf("Backlight ON\n"); + } + else + { + printf("Backlight OFF\n"); + } + */ } ////////////////////////////////////////////////////////////////////// // Tells the driver to get ready for vertical bargraphs. // -void drv_base_init_vbar() +void +drv_base_init_vbar () { // printf("Vertical bars.\n"); } @@ -176,7 +185,8 @@ void drv_base_init_vbar() ////////////////////////////////////////////////////////////////////// // Tells the driver to get ready for horizontal bargraphs. // -void drv_base_init_hbar() +void +drv_base_init_hbar () { // printf("Horizontal bars.\n"); } @@ -184,7 +194,8 @@ void drv_base_init_hbar() ////////////////////////////////////////////////////////////////////// // Tells the driver to get ready for big numbers, if possible. // -void drv_base_init_num() +void +drv_base_init_num () { // printf("Big Numbers.\n"); } @@ -192,7 +203,8 @@ void drv_base_init_num() ////////////////////////////////////////////////////////////////////// // Draws a big (4-row) number. // -void drv_base_num(int x, int num) +void +drv_base_num (int x, int num) { // printf("BigNum(%i, %i)\n", x, num); } @@ -200,7 +212,8 @@ void drv_base_num(int x, int num) ////////////////////////////////////////////////////////////////////// // Changes the font data of character n. // -void drv_base_set_char(int n, char *dat) +void +drv_base_set_char (int n, char *dat) { // printf("Set Character %i\n", n); } @@ -208,37 +221,38 @@ void drv_base_set_char(int n, char *dat) ///////////////////////////////////////////////////////////////// // Draws a vertical bar, from the bottom of the screen up. // -void drv_base_vbar(int x, int len) +void +drv_base_vbar (int x, int len) { - int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - drv_base_chr(x, y, '|'); + int y; + for (y = lcd.hgt; y > 0 && len > 0; y--) { + drv_base_chr (x, y, '|'); len -= lcd.cellhgt; - } - + } + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void drv_base_hbar(int x, int y, int len) +void +drv_base_hbar (int x, int y, int len) { - for(; x<=lcd.wid && len>0; x++) - { - drv_base_chr(x,y,'-'); - + for (; x <= lcd.wid && len > 0; x++) { + drv_base_chr (x, y, '-'); + len -= lcd.cellwid; - } - + } + } ///////////////////////////////////////////////////////////////// // Sets character 0 to an icon... // -void drv_base_icon(int which, char dest) +void +drv_base_icon (int which, char dest) { // printf("Char %i set to icon %i\n", dest, which); } @@ -250,10 +264,11 @@ void drv_base_icon(int which, char dest) // I've just called drv_base_flush() because there's not much point yet // in flushing less than the entire framebuffer. // -void drv_base_flush_box(int lft, int top, int rgt, int bot) +void +drv_base_flush_box (int lft, int top, int rgt, int bot) { //drv_base_flush(); - + } ////////////////////////////////////////////////////////////////////// @@ -261,7 +276,8 @@ void drv_base_flush_box(int lft, int top, int rgt, int bot) // // The commented-out code is from the text driver. // -void drv_base_draw_frame(char *dat) +void +drv_base_draw_frame (char *dat) { /* int i, j; @@ -304,8 +320,8 @@ void drv_base_draw_frame(char *dat) // // Return 0 for "nothing available". // -char drv_base_getkey() +char +drv_base_getkey () { - return 0; + return 0; } - diff --git a/server/drivers/drv_base.h b/server/drivers/drv_base.h index 6ff2063..7bf3fb0 100644 --- a/server/drivers/drv_base.h +++ b/server/drivers/drv_base.h @@ -94,26 +94,26 @@ extern lcd_logical_driver *drv_base; -int drv_base_init(struct lcd_logical_driver *driver, char *args); -void drv_base_close(); -void drv_base_clear(); -void drv_base_flush(); -void drv_base_string(int x, int y, char string[]); -void drv_base_chr(int x, int y, char c); -int drv_base_contrast(int contrast); -void drv_base_backlight(int on); -void drv_base_output(int on); -void drv_base_vbar(int x, int len); -void drv_base_init_vbar(); -void drv_base_hbar(int x, int y, int len); -void drv_base_init_hbar(); -void drv_base_num(int x, int num); -void drv_base_init_num(); -void drv_base_set_char(int n, char *dat); -void drv_base_icon(int which, char dest); -void drv_base_flush_box(int lft, int top, int rgt, int bot); -void drv_base_draw_frame(char *dat); -char drv_base_getkey(); +int drv_base_init (struct lcd_logical_driver *driver, char *args); +void drv_base_close (); +void drv_base_clear (); +void drv_base_flush (); +void drv_base_string (int x, int y, char string[]); +void drv_base_chr (int x, int y, char c); +int drv_base_contrast (int contrast); +void drv_base_backlight (int on); +void drv_base_output (int on); +void drv_base_vbar (int x, int len); +void drv_base_init_vbar (); +void drv_base_hbar (int x, int y, int len); +void drv_base_init_hbar (); +void drv_base_num (int x, int num); +void drv_base_init_num (); +void drv_base_set_char (int n, char *dat); +void drv_base_icon (int which, char dest); +void drv_base_flush_box (int lft, int top, int rgt, int bot); +void drv_base_draw_frame (char *dat); +char drv_base_getkey (); #endif diff --git a/server/drivers/hd44780-4bit.c b/server/drivers/hd44780-4bit.c index 1a8d6ce..4761cba 100644 --- a/server/drivers/hd44780-4bit.c +++ b/server/drivers/hd44780-4bit.c @@ -49,9 +49,7 @@ // implemented separately for each HW design. This is typically just // HD44780_senddata -void lcdstat_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch); +void lcdstat_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch); #define RS 0x10 @@ -61,136 +59,131 @@ void lcdstat_HD44780_senddata(unsigned char displayID, #define EN3 0x20 static unsigned char EnMask[] = { EN1, EN2, EN3, STRB, LF, INIT, SEL }; -static int EnMaskSize = sizeof(EnMask) / sizeof(unsigned char); +static int EnMaskSize = sizeof (EnMask) / sizeof (unsigned char); static unsigned int lptPort; static int extIF = 0; // non-zero if extended interface // initialisation function -int hd_init_4bit(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port) +int +hd_init_4bit (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port) { - // TODO: remove magic numbers below - char *argv[64]; - int argc; - int i; - int displayID = EN1 | EN2; + // TODO: remove magic numbers below + char *argv[64]; + int argc; + int i; + int displayID = EN1 | EN2; - lptPort = port; + lptPort = port; - hd44780_functions->senddata = lcdstat_HD44780_senddata; + hd44780_functions->senddata = lcdstat_HD44780_senddata; - // parse command-line arguments - argc = get_args(argv, args, 64); + // parse command-line arguments + argc = get_args (argv, args, 64); - for (i = 0; i < argc; ++i) - { - if (strcmp(argv[i], "-e") == 0 || - strcmp(argv[i], "--extended") == 0) - { - extIF = 1; - if ((ioperm(port + 2, 1, 255)) == -1) { - fprintf(stderr, "HD44780_init: failed (%s)\n", strerror(errno)); - return -1; + for (i = 0; i < argc; ++i) { + if (strcmp (argv[i], "-e") == 0 || strcmp (argv[i], "--extended") == 0) { + extIF = 1; + if ((ioperm (port + 2, 1, 255)) == -1) { + fprintf (stderr, "HD44780_init: failed (%s)\n", strerror (errno)); + return -1; + } } - } - } - - // powerup the lcd now - if (extIF) - { - displayID |= EN3; - port_out(lptPort + 2, 0 ^ OUTMASK); - } + } - port_out(lptPort, displayID | 0x03); - if (extIF) port_out(lptPort + 2, - (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); - hd44780_functions->uPause(1); - port_out(lptPort, 0x03); - if (extIF) port_out(lptPort + 2, 0 ^ OUTMASK); - hd44780_functions->uPause(4100); + // powerup the lcd now + if (extIF) { + displayID |= EN3; + port_out (lptPort + 2, 0 ^ OUTMASK); + } - port_out(lptPort, displayID | 0x03); - if (extIF) port_out(lptPort + 2, - (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); - hd44780_functions->uPause(1); - port_out(lptPort, 0x03); - if (extIF) port_out(lptPort + 2, 0 ^ OUTMASK); - hd44780_functions->uPause(100); + port_out (lptPort, displayID | 0x03); + if (extIF) + port_out (lptPort + 2, (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); + hd44780_functions->uPause (1); + port_out (lptPort, 0x03); + if (extIF) + port_out (lptPort + 2, 0 ^ OUTMASK); + hd44780_functions->uPause (4100); - port_out(lptPort, displayID | 0x03); - if (extIF) port_out(lptPort + 2, - (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); - hd44780_functions->uPause(1); - port_out(lptPort, 0x03); - if (extIF) port_out(lptPort + 2, 0 ^ OUTMASK); - hd44780_functions->uPause(40); + port_out (lptPort, displayID | 0x03); + if (extIF) + port_out (lptPort + 2, (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); + hd44780_functions->uPause (1); + port_out (lptPort, 0x03); + if (extIF) + port_out (lptPort + 2, 0 ^ OUTMASK); + hd44780_functions->uPause (100); - // now in 8-bit mode... set 4-bit mode - port_out(lptPort,displayID | 0x02); - if (extIF) port_out(lptPort + 2, - (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); - hd44780_functions->uPause(1); - port_out(lptPort, 0x02); - if (extIF) port_out(lptPort + 2, 0 ^ OUTMASK); - hd44780_functions->uPause(40); + port_out (lptPort, displayID | 0x03); + if (extIF) + port_out (lptPort + 2, (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); + hd44780_functions->uPause (1); + port_out (lptPort, 0x03); + if (extIF) + port_out (lptPort + 2, 0 ^ OUTMASK); + hd44780_functions->uPause (40); - common_init(IF_4bit); - return 0; + // now in 8-bit mode... set 4-bit mode + port_out (lptPort, displayID | 0x02); + if (extIF) + port_out (lptPort + 2, (EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]) ^ OUTMASK); + hd44780_functions->uPause (1); + port_out (lptPort, 0x02); + if (extIF) + port_out (lptPort + 2, 0 ^ OUTMASK); + hd44780_functions->uPause (40); + + common_init (IF_4bit); + return 0; } // lcdstat_HD44780_senddata -void lcdstat_HD44780_senddata(unsigned char displayID, - unsigned char iflags, - unsigned char ch) +void +lcdstat_HD44780_senddata (unsigned char displayID, unsigned char iflags, unsigned char ch) { - unsigned char dispID = 0, flags = 0; - unsigned char h = (ch >> 4) & 0x0f; // high and low nibbles - unsigned char l = ch & 0x0f; + unsigned char dispID = 0, flags = 0; + unsigned char h = (ch >> 4) & 0x0f; // high and low nibbles + unsigned char l = ch & 0x0f; - if (iflags == RS_INSTR) - flags = 0; - else //if (iflags == RS_DATA) - flags = RS; + if (iflags == RS_INSTR) + flags = 0; + else //if (iflags == RS_DATA) + flags = RS; - if (displayID <= 3) - { - if (displayID == 0) - dispID = EnMask[0] | EnMask[1] | EnMask[2]; - else - dispID = EnMask[displayID - 1]; + if (displayID <= 3) { + if (displayID == 0) + dispID = EnMask[0] | EnMask[1] | EnMask[2]; + else + dispID = EnMask[displayID - 1]; - port_out(lptPort, flags | h); - hd44780_functions->uPause(2); - port_out(lptPort, dispID | flags | h); - hd44780_functions->uPause(4); - port_out(lptPort, flags | h); + port_out (lptPort, flags | h); + hd44780_functions->uPause (2); + port_out (lptPort, dispID | flags | h); + hd44780_functions->uPause (4); + port_out (lptPort, flags | h); - port_out(lptPort, dispID | flags | l); - hd44780_functions->uPause(4); - port_out(lptPort, flags | l); - } + port_out (lptPort, dispID | flags | l); + hd44780_functions->uPause (4); + port_out (lptPort, flags | l); + } - if (extIF && (displayID == 0 || displayID >= 4)) - { - if (displayID == 0) - dispID = EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]; - else - dispID = EnMask[(displayID - 1) % EnMaskSize]; + if (extIF && (displayID == 0 || displayID >= 4)) { + if (displayID == 0) + dispID = EnMask[3] | EnMask[4] | EnMask[5] | EnMask[6]; + else + dispID = EnMask[(displayID - 1) % EnMaskSize]; - port_out(lptPort, flags | h); - hd44780_functions->uPause(2); - port_out(lptPort + 2, dispID ^ OUTMASK); - hd44780_functions->uPause(4); - port_out(lptPort + 2, 0 ^ OUTMASK); + port_out (lptPort, flags | h); + hd44780_functions->uPause (2); + port_out (lptPort + 2, dispID ^ OUTMASK); + hd44780_functions->uPause (4); + port_out (lptPort + 2, 0 ^ OUTMASK); - port_out(lptPort, flags | l); - port_out(lptPort + 2, dispID ^ OUTMASK); - hd44780_functions->uPause(4); - port_out(lptPort + 2, 0 ^ OUTMASK); - } + port_out (lptPort, flags | l); + port_out (lptPort + 2, dispID ^ OUTMASK); + hd44780_functions->uPause (4); + port_out (lptPort + 2, 0 ^ OUTMASK); + } } diff --git a/server/drivers/hd44780-4bit.h b/server/drivers/hd44780-4bit.h index 458a927..18feb2e 100644 --- a/server/drivers/hd44780-4bit.h +++ b/server/drivers/hd44780-4bit.h @@ -5,9 +5,6 @@ #include "hd44780-low.h" /* for HD44780_functions */ // initialise this particular driver -int hd_init_4bit(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port); +int hd_init_4bit (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port); #endif diff --git a/server/drivers/hd44780-drivers.h b/server/drivers/hd44780-drivers.h index 90a7c68..65b57de 100644 --- a/server/drivers/hd44780-drivers.h +++ b/server/drivers/hd44780-drivers.h @@ -18,36 +18,30 @@ // add new connection type header files here enum connectionType { HD_4bit, HD_8bit, HD_serialLpt, HD_winamp, - // add new connection types here + // add new connection types here - HD_unknown }; + HD_unknown +}; -static struct ConnectionMapping -{ - enum connectionType type; - char *connectionTypeStr; - int (*init_fn)(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port); - const char *helpMsg; +static struct ConnectionMapping { + enum connectionType type; + char *connectionTypeStr; + int (*init_fn) (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port); + const char *helpMsg; } connectionMapping[] = { - // connectionType enumerator - // string to identify connection on command line - // your initialisation function - // help string for your particular connection - { HD_4bit, "4bit", hd_init_4bit, - "\t-e\t--extended\tEnable three or more displays\n" }, - { HD_8bit, "8bit", hd_init_ext8bit, - "\tnone\n" }, - { HD_serialLpt, "serialLpt", hd_init_serialLpt, - "\tnone\n" }, - { HD_winamp, "winamp", hd_init_winamp, - "\t-e\t--extended\tEnable three or more displays\n" }, - // add new connection types and their string specifier here - - // default, end of structure element (do not delete) - { HD_unknown, "", NULL, "" } + // connectionType enumerator + // string to identify connection on command line + // your initialisation function + // help string for your particular connection + { + HD_4bit, "4bit", hd_init_4bit, "\t-e\t--extended\tEnable three or more displays\n"}, { + HD_8bit, "8bit", hd_init_ext8bit, "\tnone\n"}, { + HD_serialLpt, "serialLpt", hd_init_serialLpt, "\tnone\n"}, { + HD_winamp, "winamp", hd_init_winamp, "\t-e\t--extended\tEnable three or more displays\n"}, + // add new connection types and their string specifier here + // default, end of structure element (do not delete) + { + HD_unknown, "", NULL, ""} }; #endif diff --git a/server/drivers/hd44780-ext8bit.c b/server/drivers/hd44780-ext8bit.c index 3f04411..86801a0 100644 --- a/server/drivers/hd44780-ext8bit.c +++ b/server/drivers/hd44780-ext8bit.c @@ -43,9 +43,7 @@ // restricted to): // HD44780_senddata -void lcdtime_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch); +void lcdtime_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch); #define nRS nSTRB @@ -62,48 +60,45 @@ static int semid; // initialise the driver -int hd_init_ext8bit(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port) +int +hd_init_ext8bit (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port) { - lptPort = port; - semid = sem_get(); + lptPort = port; + semid = sem_get (); - hd44780_functions->senddata = lcdtime_HD44780_senddata; + hd44780_functions->senddata = lcdtime_HD44780_senddata; - if ((ioperm(port + 2, 1, 255)) == -1) { - fprintf(stderr, "HD44780_init: failed (%s)\n", strerror(errno)); - return -1; - } + if ((ioperm (port + 2, 1, 255)) == -1) { + fprintf (stderr, "HD44780_init: failed (%s)\n", strerror (errno)); + return -1; + } - common_init(IF_8bit); - return 0; + common_init (IF_8bit); + return 0; } // lcdtime_HD44780_senddata -void lcdtime_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch) +void +lcdtime_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch) { - unsigned char dispID = 0, portControl; + unsigned char dispID = 0, portControl; - if (displayID == 1) - dispID |= EN1; - else //if (displayID == 0) - dispID |= EN1; + if (displayID == 1) + dispID |= EN1; + else //if (displayID == 0) + dispID |= EN1; - if (flags == RS_DATA) - portControl = CHAR; - else - portControl = CTRL; + if (flags == RS_DATA) + portControl = CHAR; + else + portControl = CTRL; - sem_wait(semid); - port_out(lptPort + 2, SETUPLCD); - port_out(lptPort, ch); - port_out(lptPort + 2, dispID | portControl); - hd44780_functions->uPause(1); - port_out(lptPort + 2, portControl); - sem_signal(semid); + sem_wait (semid); + port_out (lptPort + 2, SETUPLCD); + port_out (lptPort, ch); + port_out (lptPort + 2, dispID | portControl); + hd44780_functions->uPause (1); + port_out (lptPort + 2, portControl); + sem_signal (semid); } diff --git a/server/drivers/hd44780-ext8bit.h b/server/drivers/hd44780-ext8bit.h index 674f233..e078b26 100644 --- a/server/drivers/hd44780-ext8bit.h +++ b/server/drivers/hd44780-ext8bit.h @@ -5,9 +5,6 @@ #include "hd44780-low.h" /* for HD44780_functions */ // initialise this particular driver -int hd_init_ext8bit(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port); +int hd_init_ext8bit (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port); #endif diff --git a/server/drivers/hd44780-low.h b/server/drivers/hd44780-low.h index 0b9903c..37f1425 100644 --- a/server/drivers/hd44780-low.h +++ b/server/drivers/hd44780-low.h @@ -6,29 +6,28 @@ enum ifWidth { IF_4bit, IF_8bit }; -void common_init(enum ifWidth ifwidth); +void common_init (enum ifWidth ifwidth); // Structures holding pointers to HD44780 specific functions -typedef struct hwDependentFns -{ - // microsec pauses - void (*uPause)(int microSecondsTenths); +typedef struct hwDependentFns { + // microsec pauses + void (*uPause) (int microSecondsTenths); - // senddata to the LCD - // dispID - display to send data to (0 = all displays) - // flags - data or instruction command (RS_DATA | RS_INSTR) - // ch - character to display or instruction value - void (*senddata)(unsigned char dispID, unsigned char flags, unsigned char ch); + // senddata to the LCD + // dispID - display to send data to (0 = all displays) + // flags - data or instruction command (RS_DATA | RS_INSTR) + // ch - character to display or instruction value + void (*senddata) (unsigned char dispID, unsigned char flags, unsigned char ch); - // position the cursor - // dispID - display to send data to (0 = all displays) - // DDaddr - display data address (see sect 2.5.2 of the LCD module FAQ) - void (*position)(int dispID, int DDaddr); + // position the cursor + // dispID - display to send data to (0 = all displays) + // DDaddr - display data address (see sect 2.5.2 of the LCD module FAQ) + void (*position) (int dispID, int DDaddr); - // toggle vertical autoscroll on all displays - // on - non-zero turns autoscroll on, zero value turns it off - void (*autoscroll)(int on); -} HD44780_functions; /* for want of a better name :-) */ + // toggle vertical autoscroll on all displays + // on - non-zero turns autoscroll on, zero value turns it off + void (*autoscroll) (int on); +} HD44780_functions; /* for want of a better name :-) */ extern HD44780_functions *hd44780_functions; @@ -42,32 +41,32 @@ extern HD44780_functions *hd44780_functions; #define HOMECURSOR 0x02 #define ENTRYMODE 0x04 - #define E_MOVERIGHT 0x02 - #define E_MOVELEFT 0x00 - #define EDGESCROLL 0x01 - #define NOSCROLL 0x00 +#define E_MOVERIGHT 0x02 +#define E_MOVELEFT 0x00 +#define EDGESCROLL 0x01 +#define NOSCROLL 0x00 #define ONOFFCTRL 0x08 - #define DISPON 0x04 - #define DISPOFF 0x00 - #define CURSORON 0x02 - #define CURSOROFF 0x00 - #define CURSORBLINK 0x01 - #define CURSORNOBLINK 0x00 +#define DISPON 0x04 +#define DISPOFF 0x00 +#define CURSORON 0x02 +#define CURSOROFF 0x00 +#define CURSORBLINK 0x01 +#define CURSORNOBLINK 0x00 #define CURSORSHIFT 0x10 - #define SCROLLDISP 0x08 - #define MOVECURSOR 0x00 - #define MOVERIGHT 0x04 - #define MOVELEFT 0x00 +#define SCROLLDISP 0x08 +#define MOVECURSOR 0x00 +#define MOVERIGHT 0x04 +#define MOVELEFT 0x00 #define FUNCSET 0x20 - #define IF_8BIT 0x10 - #define IF_4BIT 0x00 - #define TWOLINE 0x08 - #define ONELINE 0x00 - #define LARGECHAR 0x04 /* 5x11 characters */ - #define SMALLCHAR 0x00 /* 5x8 characters */ +#define IF_8BIT 0x10 +#define IF_4BIT 0x00 +#define TWOLINE 0x08 +#define ONELINE 0x00 +#define LARGECHAR 0x04 /* 5x11 characters */ +#define SMALLCHAR 0x00 /* 5x8 characters */ #define SETCHAR 0x40 @@ -76,11 +75,11 @@ extern HD44780_functions *hd44780_functions; // Parallel port pin definitions // Output lines -#define nSTRB 0x01 /* negative logic */ +#define nSTRB 0x01 /* negative logic */ #define STRB 0x01 #define nLF 0x02 #define LF 0x02 -#define INIT 0x04 /* the only positive logic output line */ +#define INIT 0x04 /* the only positive logic output line */ #define nSEL 0x08 #define SEL 0x08 @@ -98,5 +97,3 @@ extern HD44780_functions *hd44780_functions; #define INMASK 0x48 #endif - - diff --git a/server/drivers/hd44780-serialLpt.c b/server/drivers/hd44780-serialLpt.c index dd2efa5..7a5b263 100644 --- a/server/drivers/hd44780-serialLpt.c +++ b/server/drivers/hd44780-serialLpt.c @@ -31,13 +31,11 @@ #include "port.h" // Hardware specific functions -void lcdserLpt_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch); +void lcdserLpt_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch); -static char lcdserLpt_HD44780_getkey(void); -void rawshift(unsigned char r); -void shiftreg(unsigned char displayID, unsigned char r); +static char lcdserLpt_HD44780_getkey (void); +void rawshift (unsigned char r); +void shiftreg (unsigned char displayID, unsigned char r); #define RS 16 #define LCDDATA 8 @@ -47,127 +45,118 @@ void shiftreg(unsigned char displayID, unsigned char r); static unsigned int lp; -static char lastkey=0; +static char lastkey = 0; // Initialisation -int hd_init_serialLpt(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port) +int +hd_init_serialLpt (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port) { - int displayID = EN1 | EN2; + int displayID = EN1 | EN2; - lp = port; + lp = port; - hd44780_functions->senddata = lcdserLpt_HD44780_senddata; + hd44780_functions->senddata = lcdserLpt_HD44780_senddata; - // TODO: enable keypad only if specified on command line - driver->getkey = lcdserLpt_HD44780_getkey; + // TODO: enable keypad only if specified on command line + driver->getkey = lcdserLpt_HD44780_getkey; - // setup the lcd in 4 bit mode - shiftreg(displayID,3); - hd44780_functions->uPause(4100); + // setup the lcd in 4 bit mode + shiftreg (displayID, 3); + hd44780_functions->uPause (4100); - shiftreg(displayID,3); - hd44780_functions->uPause(100); + shiftreg (displayID, 3); + hd44780_functions->uPause (100); - shiftreg(displayID,3); - hd44780_functions->uPause(40); + shiftreg (displayID, 3); + hd44780_functions->uPause (40); - shiftreg(displayID,2); - hd44780_functions->uPause(40); + shiftreg (displayID, 2); + hd44780_functions->uPause (40); - // set display type functions - lcdserLpt_HD44780_senddata(0, - RS_INSTR, - FUNCSET | IF_4BIT | TWOLINE | SMALLCHAR); - // clear - lcdserLpt_HD44780_senddata(0, RS_INSTR, CLEAR); - hd44780_functions->uPause(1600); - // Now turn on the display - lcdserLpt_HD44780_senddata(displayID, - RS_INSTR, - ONOFFCTRL | DISPON | CURSOROFF | CURSORNOBLINK); - hd44780_functions->uPause(1600); + // set display type functions + lcdserLpt_HD44780_senddata (0, RS_INSTR, FUNCSET | IF_4BIT | TWOLINE | SMALLCHAR); + // clear + lcdserLpt_HD44780_senddata (0, RS_INSTR, CLEAR); + hd44780_functions->uPause (1600); + // Now turn on the display + lcdserLpt_HD44780_senddata (displayID, RS_INSTR, ONOFFCTRL | DISPON | CURSOROFF | CURSORNOBLINK); + hd44780_functions->uPause (1600); - return 0; + return 0; } -void lcdserLpt_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch) +void +lcdserLpt_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch) { - unsigned char dispID = 0, - portControl = 0, - h = ch >> 4, - l = ch & 15; + unsigned char dispID = 0, portControl = 0, h = ch >> 4, l = ch & 15; - if (displayID == 1) - dispID |= EN1; - else if (displayID == 2) - dispID |= EN2; - else - dispID |= EN1 | EN2; + if (displayID == 1) + dispID |= EN1; + else if (displayID == 2) + dispID |= EN2; + else + dispID |= EN1 | EN2; - if (flags == RS_DATA) - portControl = RS; - else - portControl = 0; + if (flags == RS_DATA) + portControl = RS; + else + portControl = 0; - shiftreg(displayID,flags | portControl | h); - shiftreg(displayID,flags | portControl | l); + shiftreg (displayID, flags | portControl | h); + shiftreg (displayID, flags | portControl | l); - /* TODO: instead of delay read keys here */ + /* TODO: instead of delay read keys here */ } -char lcdserLpt_HD44780_getkey() +char +lcdserLpt_HD44780_getkey () { - // TODO: a keypad scan that does not use shift register - // define a key table - char keytr[]="ABCDEFGH"; - int n; + // TODO: a keypad scan that does not use shift register + // define a key table + char keytr[] = "ABCDEFGH"; + int n; - rawshift(0); //send all line on shift register low - hd44780_functions->uPause(1); - if ((port_in(lp+1)&32)==0) //test if line back is low - if not return(0) - { //else - //start walking a single zero across the eight lines - for(n=7;n>=0;n--) - { - rawshift(255 - (1<uPause(1); - - if ((port_in(lp+1)&32)==0) // check if line back is low if yes debounce - { - if (lastkey==keytr[n]) - return(0); - // printf("key is %c %d\n",keytr[n],n); - lastkey=keytr[n]; - return(keytr[n]); //return correct key code. + rawshift (0); //send all line on shift register low + hd44780_functions->uPause (1); + if ((port_in (lp + 1) & 32) == 0) //test if line back is low - if not return(0) + { //else + //start walking a single zero across the eight lines + for (n = 7; n >= 0; n--) { + rawshift (255 - (1 << n)); + hd44780_functions->uPause (1); + + if ((port_in (lp + 1) & 32) == 0) // check if line back is low if yes debounce + { + if (lastkey == keytr[n]) + return (0); + // printf("key is %c %d\n",keytr[n],n); + lastkey = keytr[n]; + return (keytr[n]); //return correct key code. + } } - } - } //else fall out and return(0) [too transient a keypress] - lastkey=0; - return(0); + } //else fall out and return(0) [too transient a keypress] + lastkey = 0; + return (0); } /* this function sends r out onto the shift register */ -void rawshift (unsigned char r) +void +rawshift (unsigned char r) { - int i; - for (i=7;i>=0;i--) /* MSB first */ - { - port_out(lp,((r>>i)&1)*LCDDATA); /*set up data */ - port_out(lp,(((r>>i)&1)*LCDDATA)|LCDCLOCK);/*rising edge of clock */ - } + int i; + for (i = 7; i >= 0; i--) { /* MSB first */ + port_out (lp, ((r >> i) & 1) * LCDDATA); /*set up data */ + port_out (lp, (((r >> i) & 1) * LCDDATA) | LCDCLOCK); /*rising edge of clock */ + } } // displayID = value on parallel port to toggle the correct display -void shiftreg (unsigned char displayID, unsigned char r) -{ - rawshift(r); - port_out(lp,displayID); //latch it, to correct display - port_out(lp,0); +void +shiftreg (unsigned char displayID, unsigned char r) +{ + rawshift (r); + port_out (lp, displayID); //latch it, to correct display + port_out (lp, 0); } diff --git a/server/drivers/hd44780-serialLpt.h b/server/drivers/hd44780-serialLpt.h index 90a6233..3b4f768 100644 --- a/server/drivers/hd44780-serialLpt.h +++ b/server/drivers/hd44780-serialLpt.h @@ -1,13 +1,10 @@ #ifndef HD_SERIALLPT_H #define HD_SERIALLPT_H -#include "lcd.h" /* for lcd_logical_driver */ -#include "hd44780-low.h" /* for HD44780_functions */ +#include "lcd.h" /* for lcd_logical_driver */ +#include "hd44780-low.h" /* for HD44780_functions */ // initialise this particular driver -int hd_init_serialLpt(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port); +int hd_init_serialLpt (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port); #endif diff --git a/server/drivers/hd44780-winamp.c b/server/drivers/hd44780-winamp.c index 0bfb353..fbf65c3 100644 --- a/server/drivers/hd44780-winamp.c +++ b/server/drivers/hd44780-winamp.c @@ -36,9 +36,7 @@ #include #include -void lcdwinamp_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch); +void lcdwinamp_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch); #define EN1 STRB #define EN2 SEL @@ -46,64 +44,59 @@ void lcdwinamp_HD44780_senddata(unsigned char displayID, #define RS INIT static unsigned char EnMask[] = { EN1, EN2, EN3 }; -static int EnMaskSize = sizeof(EnMask) / sizeof(unsigned char); +static int EnMaskSize = sizeof (EnMask) / sizeof (unsigned char); static unsigned int lptPort; static int extIF = 0; // non-zero if extended interface // initialise the driver -int hd_init_winamp(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port) +int +hd_init_winamp (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port) { // TODO: remove magic numbers below - char *argv[64]; - int argc; - int i; - - hd44780_functions->senddata = lcdwinamp_HD44780_senddata; - lptPort = port; + char *argv[64]; + int argc; + int i; - // parse command-line arguments - argc = get_args(argv, args, 64); + hd44780_functions->senddata = lcdwinamp_HD44780_senddata; + lptPort = port; - for (i = 0; i < argc; ++i) - if (strcmp(argv[i], "-e") == 0 || - strcmp(argv[i], "--extended") == 0) - extIF = 1; + // parse command-line arguments + argc = get_args (argv, args, 64); - if ((ioperm(lptPort + 2, 1, 255)) == -1) { - fprintf(stderr, "HD44780_init: failed (%s)\n", strerror(errno)); - return -1; - } + for (i = 0; i < argc; ++i) + if (strcmp (argv[i], "-e") == 0 || strcmp (argv[i], "--extended") == 0) + extIF = 1; - common_init(IF_8bit); - return 0; + if ((ioperm (lptPort + 2, 1, 255)) == -1) { + fprintf (stderr, "HD44780_init: failed (%s)\n", strerror (errno)); + return -1; + } + + common_init (IF_8bit); + return 0; } // lcdwinamp_HD44780_senddata -void lcdwinamp_HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch) +void +lcdwinamp_HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch) { - unsigned char dispID = 0, portControl; + unsigned char dispID = 0, portControl; - if (flags == RS_DATA) - portControl = RS; - else - portControl = 0; + if (flags == RS_DATA) + portControl = RS; + else + portControl = 0; - if (displayID == 0) - dispID = EnMask[0] | EnMask [1] | ((extIF) ? EnMask[2] : 0); - else - dispID = EnMask[displayID - 1]; - - port_out(lptPort, ch); - port_out(lptPort + 2, (dispID | portControl) ^ OUTMASK); - hd44780_functions->uPause(1); - port_out(lptPort + 2, portControl ^ OUTMASK); + if (displayID == 0) + dispID = EnMask[0] | EnMask[1] | ((extIF) ? EnMask[2] : 0); + else + dispID = EnMask[displayID - 1]; + + port_out (lptPort, ch); + port_out (lptPort + 2, (dispID | portControl) ^ OUTMASK); + hd44780_functions->uPause (1); + port_out (lptPort + 2, portControl ^ OUTMASK); } - diff --git a/server/drivers/hd44780-winamp.h b/server/drivers/hd44780-winamp.h index 647fc46..8e081db 100644 --- a/server/drivers/hd44780-winamp.h +++ b/server/drivers/hd44780-winamp.h @@ -6,9 +6,6 @@ // initialise this particular driver, args is probably not used but keep // for consistency -int hd_init_winamp(HD44780_functions *hd44780_functions, - lcd_logical_driver *driver, - char *args, - unsigned int port); +int hd_init_winamp (HD44780_functions * hd44780_functions, lcd_logical_driver * driver, char *args, unsigned int port); #endif diff --git a/server/drivers/hd44780.c b/server/drivers/hd44780.c index 340cf34..8e66fbd 100644 --- a/server/drivers/hd44780.c +++ b/server/drivers/hd44780.c @@ -73,299 +73,243 @@ static int *dispSizes = NULL; // function declarations -void HD44780_flush(); -void HD44780_flush_box(int lft, int top, int rgt, int bot); -int HD44780_contrast(int contrast); -void HD44780_backlight(int on); -void HD44780_init_vbar(); -void HD44780_init_hbar(); -void HD44780_vbar(int x, int len); -void HD44780_hbar(int x, int y, int len); -void HD44780_init_num(); -void HD44780_num(int x, int num); -void HD44780_set_char(int n, char *dat); -void HD44780_icon(int which, char dest); -void HD44780_draw_frame(char *dat); -void HD44780_close(); +void HD44780_flush (); +void HD44780_flush_box (int lft, int top, int rgt, int bot); +int HD44780_contrast (int contrast); +void HD44780_backlight (int on); +void HD44780_init_vbar (); +void HD44780_init_hbar (); +void HD44780_vbar (int x, int len); +void HD44780_hbar (int x, int y, int len); +void HD44780_init_num (); +void HD44780_num (int x, int num); +void HD44780_set_char (int n, char *dat); +void HD44780_icon (int which, char dest); +void HD44780_draw_frame (char *dat); +void HD44780_close (); -static void HD44780_linewrap(int on); -static void HD44780_autoscroll(int on); -static void HD44780_position(int x, int y); +static void HD44780_linewrap (int on); +static void HD44780_autoscroll (int on); +static void HD44780_position (int x, int y); -static void common_position(int display, int DDaddr); -static void common_autoscroll(int on); -static void uPause(int delayCalls); -static void HD44780_senddata(unsigned char displayID, - unsigned char flags, - unsigned char ch); +static void common_position (int display, int DDaddr); +static void common_autoscroll (int on); +static void uPause (int delayCalls); +static void HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch); -static int parse_span_list(int *spanListArray[], int *spLsize, - int *dispOffsets[], int *dOffsize, - int *dispSizeArray[], char *spanlist); +static int parse_span_list (int *spanListArray[], int *spLsize, int *dispOffsets[], int *dOffsize, int *dispSizeArray[], char *spanlist); ///////////////////////////////////////////////////////////////// // Opens com port and sets baud correctly... // -int HD44780_init(lcd_logical_driver *driver, char *args) +int +HD44780_init (lcd_logical_driver * driver, char *args) { - // TODO: remove the two magic numbers below - // TODO: single point of return - char *argv[64], *str; - int argc, i; - - HD44780 = driver; + // TODO: remove the two magic numbers below + // TODO: single point of return + char *argv[64], *str; + int argc, i; - // get_args inserts \0 into args - nasty ! - if (args) - if ((str = (char *) malloc(strlen(args) + 1))) - strcpy(str, args); - else - { - fprintf(stderr, "Error mallocing\n"); - return -1; - } - else - str = NULL; + HD44780 = driver; - argc = get_args(argv, args, 64); + // get_args inserts \0 into args - nasty ! + if (args) + if ((str = (char *) malloc (strlen (args) + 1))) + strcpy (str, args); + else { + fprintf (stderr, "Error mallocing\n"); + return -1; + } else + str = NULL; + + argc = get_args (argv, args, 64); // arguments are passed in with -d HD44780 "-p 0x278" // getopt will work well here - for(i=0; i= argc) { - fprintf(stderr, "HD44780_init: %s requires an argument\n", - argv[i]); - return -1; - } else { - int myport; - if (sscanf(argv[i + 1], "%i", &myport) != 1) { - fprintf(stderr, "HD44780_init: Couldn't read port address -" - " using default value 0x%x\n", port); - return -1; - } else { - port = myport; - ++i; - } - } - } - else if(0 == strcmp(argv[i], "-c") || - 0 == strcmp(argv[i], "--connect")) - { - int j = 0; - if(i + 1 >= argc) { - fprintf(stderr, "HD44780_init: %s requires an argument\n", - argv[i]); - return -1; - } - // search the next argument for the connection type - for (j = 0; - strcmp(argv[i + 1], connectionMapping[j].connectionTypeStr) != 0 - && connectionMapping[j].type != HD_unknown; - ++j) - ; + for (i = 0; i < argc; i++) { + if (0 == strcmp (argv[i], "-p") || 0 == strcmp (argv[i], "--port")) { + if (i + 1 >= argc) { + fprintf (stderr, "HD44780_init: %s requires an argument\n", argv[i]); + return -1; + } else { + int myport; + if (sscanf (argv[i + 1], "%i", &myport) != 1) { + fprintf (stderr, "HD44780_init: Couldn't read port address -" " using default value 0x%x\n", port); + return -1; + } else { + port = myport; + ++i; + } + } + } else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--connect")) { + int j = 0; + if (i + 1 >= argc) { + fprintf (stderr, "HD44780_init: %s requires an argument\n", argv[i]); + return -1; + } + // search the next argument for the connection type + for (j = 0; strcmp (argv[i + 1], connectionMapping[j].connectionTypeStr) != 0 && connectionMapping[j].type != HD_unknown; ++j); - if (connectionMapping[j].type == HD_unknown) - { - fprintf(stderr, - "HD44780_init: Unknown connection type - using default %s driver\n", - connectionMapping[0].connectionTypeStr); - connection = connectionMapping[0].type; - j = 0; - } - else - connection = connectionMapping[j].type; + if (connectionMapping[j].type == HD_unknown) { + fprintf (stderr, "HD44780_init: Unknown connection type - using default %s driver\n", connectionMapping[0].connectionTypeStr); + connection = connectionMapping[0].type; + j = 0; + } else + connection = connectionMapping[j].type; - connIdx = j; - ++i; - } - else if(0 == strcmp(argv[i], "-v") || - 0 == strcmp(argv[i], "--vspan")) - { - int j = 0; - if(i + 1 >= argc) { - fprintf(stderr, "HD44780_init: %s requires an argument\n", - argv[i]); - return -1; - } - if (parse_span_list(&spanList, &numLines, - &dispVOffset, &numDisplays, - &dispSizes, argv[i + 1]) == -1) - { - fprintf(stderr, "HD44780_init: invalid vspan argument\n"); - return -1; - } - ++i; - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - int i; - printf("LCDproc HD44780 driver\n" - "\t-p n\t--port n\tSelect the output device to use port n\n" - "\t-c type\t--connect type\tSet the connection type (default 4 bit)\n" - "\t\t\t\ttype = %s", connectionMapping[0].connectionTypeStr); - for (i = 1; connectionMapping[i].type != HD_unknown; ++i) - printf(" | %s", connectionMapping[i].connectionTypeStr); - printf("\n\t-v spanlist\t--vspan spanlist\tvertical span n{,m}\n" - "\t-h\t--help\t\tShow this help information\n" - "\n\tNote that the '-t' option should precede the '-d' option\n"); + connIdx = j; + ++i; + } else if (0 == strcmp (argv[i], "-v") || 0 == strcmp (argv[i], "--vspan")) { + int j = 0; + if (i + 1 >= argc) { + fprintf (stderr, "HD44780_init: %s requires an argument\n", argv[i]); + return -1; + } + if (parse_span_list (&spanList, &numLines, &dispVOffset, &numDisplays, &dispSizes, argv[i + 1]) == -1) { + fprintf (stderr, "HD44780_init: invalid vspan argument\n"); + return -1; + } + ++i; + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + int i; + printf ("LCDproc HD44780 driver\n" "\t-p n\t--port n\tSelect the output device to use port n\n" "\t-c type\t--connect type\tSet the connection type (default 4 bit)\n" "\t\t\t\ttype = %s", connectionMapping[0].connectionTypeStr); + for (i = 1; connectionMapping[i].type != HD_unknown; ++i) + printf (" | %s", connectionMapping[i].connectionTypeStr); + printf ("\n\t-v spanlist\t--vspan spanlist\tvertical span n{,m}\n" "\t-h\t--help\t\tShow this help information\n" "\n\tNote that the '-t' option should precede the '-d' option\n"); - if (connectionMapping[connIdx].type != HD_unknown) - { - printf("\n Parameters for %s driver\n", - connectionMapping[connIdx].connectionTypeStr); - printf("%s", connectionMapping[connIdx].helpMsg); + if (connectionMapping[connIdx].type != HD_unknown) { + printf ("\n Parameters for %s driver\n", connectionMapping[connIdx].connectionTypeStr); + printf ("%s", connectionMapping[connIdx].helpMsg); + } + return -1; } + /* ignore invalid arguments as they might be valid to the lower-level init + else + { + printf("Invalid parameter: %s\n", argv[i]); + } + */ + } + + // default case for when spans aren't indicated + // - add a sanity check against lcd.hgt ?? + // - this only works if the -t option is specified before -d + if (numLines == 0) { + if ((spanList = (int *) malloc (sizeof (int) * lcd.hgt))) { + int i; + for (i = 0; i < lcd.hgt; ++i) { + spanList[i] = 1; + numLines = lcd.hgt; + } + } else + fprintf (stderr, "Error mallocing for span list\n"); + } + if (numDisplays == 0) { + if ((dispVOffset = (int *) malloc (sizeof (int))) && (dispSizes = (int *) malloc (sizeof (int)))) { + dispVOffset[0] = 0; + dispSizes[0] = lcd.hgt; + numDisplays = 1; + } else + fprintf (stderr, "Error mallocing for display sizes list\n"); + } + // Set up io port correctly, and open it... + if ((ioperm (port, 1, 255)) == -1) { + fprintf (stderr, "HD44780_init: failed (%s)\n", strerror (errno)); return -1; - } - /* ignore invalid arguments as they might be valid to the lower-level init - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - */ - } + } + // Make sure the frame buffer is there... + if (!HD44780->framebuf) + HD44780->framebuf = (unsigned char *) malloc (lcd.wid * lcd.hgt); - // default case for when spans aren't indicated - // - add a sanity check against lcd.hgt ?? - // - this only works if the -t option is specified before -d - if (numLines == 0) - { - if ((spanList = (int *) malloc(sizeof(int) * lcd.hgt))) - { - int i; - for (i = 0; i < lcd.hgt; ++i) - { - spanList[i] = 1; - numLines = lcd.hgt; - } - } - else - fprintf(stderr, "Error mallocing for span list\n"); - } - if (numDisplays == 0) - { - if ((dispVOffset = (int *) malloc(sizeof(int))) && - (dispSizes = (int *) malloc(sizeof(int)))) - { - dispVOffset[0] = 0; - dispSizes[0] = lcd.hgt; - numDisplays = 1; - } - else - fprintf(stderr, "Error mallocing for display sizes list\n"); - } - - // Set up io port correctly, and open it... - if ((ioperm(port, 1, 255)) == -1) { - fprintf(stderr, "HD44780_init: failed (%s)\n", strerror(errno)); - return -1; - } + if (!HD44780->framebuf) { + //HD44780_close(); + return -1; + } - // Make sure the frame buffer is there... - if (!HD44780->framebuf) - HD44780->framebuf = (unsigned char *) malloc(lcd.wid * lcd.hgt); + // Set the functions the driver supports... + // These are the default HD44780 functions + driver->clear = (void *) -1; + driver->string = (void *) -1; + driver->chr = (void *) -1; + driver->vbar = HD44780_vbar; + driver->init_vbar = HD44780_init_vbar; + driver->hbar = HD44780_hbar; + driver->init_hbar = HD44780_init_hbar; + driver->num = HD44780_num; + driver->init_num = HD44780_init_num; - if (!HD44780->framebuf) { - //HD44780_close(); - return -1; - } + driver->init = HD44780_init; + driver->close = (void *) -1; + driver->flush = HD44780_flush; + driver->flush_box = HD44780_flush_box; + driver->contrast = HD44780_contrast; + driver->backlight = HD44780_backlight; + driver->set_char = HD44780_set_char; + driver->icon = HD44780_icon; + driver->draw_frame = HD44780_draw_frame; + driver->getkey = NULL; + if ((hd44780_functions = (HD44780_functions *) malloc (sizeof (HD44780_functions))) == NULL) { + return -1; + } + hd44780_functions->uPause = uPause; + hd44780_functions->position = common_position; + hd44780_functions->autoscroll = common_autoscroll; - // Set the functions the driver supports... - // These are the default HD44780 functions - driver->clear = (void *)-1; - driver->string = (void *)-1; - driver->chr = (void *)-1; - driver->vbar = HD44780_vbar; - driver->init_vbar = HD44780_init_vbar; - driver->hbar = HD44780_hbar; - driver->init_hbar = HD44780_init_hbar; - driver->num = HD44780_num; - driver->init_num = HD44780_init_num; - - driver->init = HD44780_init; - driver->close = (void *)-1; - driver->flush = HD44780_flush; - driver->flush_box = HD44780_flush_box; - driver->contrast = HD44780_contrast; - driver->backlight = HD44780_backlight; - driver->set_char = HD44780_set_char; - driver->icon = HD44780_icon; - driver->draw_frame = HD44780_draw_frame; - driver->getkey = NULL; + connectionMapping[connIdx].init_fn (hd44780_functions, driver, str, port); - if ((hd44780_functions = - (HD44780_functions *) malloc(sizeof(HD44780_functions))) == NULL) - { - return -1; - } - hd44780_functions->uPause = uPause; - hd44780_functions->position = common_position; - hd44780_functions->autoscroll = common_autoscroll; + HD44780_autoscroll (0); - connectionMapping[connIdx].init_fn(hd44780_functions, driver, str, port); - - HD44780_autoscroll(0); - - return port; + return port; } // common initialisation sequence - sets twoline, small characters (5x8), // cursor off and not blinking, clear display and homecursor -void common_init(enum ifWidth ifwidth) +void +common_init (enum ifWidth ifwidth) { - if (ifwidth == IF_8bit) - { - // setup the lcd in 8 bit mode - hd44780_functions->senddata(0, RS_INSTR, FUNCSET | IF_8BIT); - hd44780_functions->uPause(4100); - hd44780_functions->senddata(0, RS_INSTR, FUNCSET | IF_8BIT); - hd44780_functions->uPause(100); - hd44780_functions->senddata(0, RS_INSTR, FUNCSET | IF_8BIT); - hd44780_functions->uPause(40); - } - // else 4bit - // senddata can't generate the timings to initialise a four bit device - // properly but it might just work properly anyway .... + if (ifwidth == IF_8bit) { + // setup the lcd in 8 bit mode + hd44780_functions->senddata (0, RS_INSTR, FUNCSET | IF_8BIT); + hd44780_functions->uPause (4100); + hd44780_functions->senddata (0, RS_INSTR, FUNCSET | IF_8BIT); + hd44780_functions->uPause (100); + hd44780_functions->senddata (0, RS_INSTR, FUNCSET | IF_8BIT); + hd44780_functions->uPause (40); + } + // else 4bit + // senddata can't generate the timings to initialise a four bit device + // properly but it might just work properly anyway .... - // set display type functions - hd44780_functions->senddata(0, - RS_INSTR, - FUNCSET | - ((ifwidth == IF_4BIT) ? IF_4BIT : IF_8BIT) | - TWOLINE | SMALLCHAR); - hd44780_functions->uPause(40); + // set display type functions + hd44780_functions->senddata (0, RS_INSTR, FUNCSET | ((ifwidth == IF_4BIT) ? IF_4BIT : IF_8BIT) | TWOLINE | SMALLCHAR); + hd44780_functions->uPause (40); - hd44780_functions->senddata(0, - RS_INSTR, - ONOFFCTRL | DISPON | CURSOROFF | CURSORNOBLINK); - hd44780_functions->uPause(40); - hd44780_functions->senddata(0, RS_INSTR, CLEAR); - hd44780_functions->uPause(1600); - hd44780_functions->senddata(0, RS_INSTR, HOMECURSOR); - hd44780_functions->uPause(1600); + hd44780_functions->senddata (0, RS_INSTR, ONOFFCTRL | DISPON | CURSOROFF | CURSORNOBLINK); + hd44780_functions->uPause (40); + hd44780_functions->senddata (0, RS_INSTR, CLEAR); + hd44780_functions->uPause (1600); + hd44780_functions->senddata (0, RS_INSTR, HOMECURSOR); + hd44780_functions->uPause (1600); } // IO delay to avoid a task switch -void uPause(int delayCalls) +void +uPause (int delayCalls) { - int i; - for (i = 0; i < delayCalls; ++i) - port_in(port); - //TODO: put in option for nanosleep rather than dummy I/O call + int i; + for (i = 0; i < delayCalls; ++i) + port_in (port); + //TODO: put in option for nanosleep rather than dummy I/O call } // displayID - ID of display to use (0 = all displays) -static void HD44780_senddata(unsigned char displayID, unsigned char flags, unsigned char ch) +static void +HD44780_senddata (unsigned char displayID, unsigned char flags, unsigned char ch) { - hd44780_functions->senddata(displayID, flags, ch); - hd44780_functions->uPause(40); + hd44780_functions->senddata (displayID, flags, ch); + hd44780_functions->uPause (40); } @@ -380,53 +324,56 @@ static void HD44780_senddata(unsigned char displayID, unsigned char flags, unsig */ // x and y here are for the virtual lcd.hgt x lcd.wid display -static void HD44780_position(int x, int y) +static void +HD44780_position (int x, int y) { - int dispID = spanList[y]; - int relY = y - dispVOffset[dispID - 1]; - int DDaddr; + int dispID = spanList[y]; + int relY = y - dispVOffset[dispID - 1]; + int DDaddr; - // 16x1 is a special case - if (dispSizes[dispID - 1] == 1 && lcd.wid == 16) - if (x >= 8) - { - x -= 8; relY = 1; - } + // 16x1 is a special case + if (dispSizes[dispID - 1] == 1 && lcd.wid == 16) + if (x >= 8) { + x -= 8; + relY = 1; + } - DDaddr = x + (relY % 2) * 0x40; - if ((relY % 4) >= 2) - DDaddr += lcd.wid; + DDaddr = x + (relY % 2) * 0x40; + if ((relY % 4) >= 2) + DDaddr += lcd.wid; - hd44780_functions->position(dispID, DDaddr); + hd44780_functions->position (dispID, DDaddr); } -void common_position(int display, int DDaddr) +void +common_position (int display, int DDaddr) { - hd44780_functions->senddata(display, RS_INSTR, POSITION | DDaddr); - hd44780_functions->uPause(40); + hd44780_functions->senddata (display, RS_INSTR, POSITION | DDaddr); + hd44780_functions->uPause (40); } -void HD44780_flush() +void +HD44780_flush () { - HD44780_draw_frame(lcd.framebuf); + HD44780_draw_frame (lcd.framebuf); } -void HD44780_flush_box(int lft, int top, int rgt, int bot) +void +HD44780_flush_box (int lft, int top, int rgt, int bot) { - int x,y; - - // printf("Flush (%i,%i)-(%i,%i)\n", lft, top, rgt, bot); + int x, y; - for (y=top; y<=bot; y++) { - HD44780_position(lft,y); - //printf("\n%d,%d :",lft,y); - for (x=lft ; x<=rgt ; x++) { - HD44780_senddata(spanList[y], RS_DATA, - lcd.framebuf[(y*lcd.wid)+x]); - } - //write(fd, lcd.framebuf[(y*lcd.wid)+lft, rgt-lft+1]); - } + // printf("Flush (%i,%i)-(%i,%i)\n", lft, top, rgt, bot); + + for (y = top; y <= bot; y++) { + HD44780_position (lft, y); + //printf("\n%d,%d :",lft,y); + for (x = lft; x <= rgt; x++) { + HD44780_senddata (spanList[y], RS_DATA, lcd.framebuf[(y * lcd.wid) + x]); + } + //write(fd, lcd.framebuf[(y*lcd.wid)+lft, rgt-lft+1]); + } } @@ -434,16 +381,18 @@ void HD44780_flush_box(int lft, int top, int rgt, int bot) ///////////////////////////////////////////////////////////////// // Changes screen contrast (0-255; 140 seems good) // -int HD44780_contrast(int contrast) +int +HD44780_contrast (int contrast) { - return 0; + return 0; } ///////////////////////////////////////////////////////////////// // Sets the backlight on or off -- can be done quickly for // an intermediate brightness... // -void HD44780_backlight(int on) +void +HD44780_backlight (int on) { } @@ -451,223 +400,230 @@ void HD44780_backlight(int on) ///////////////////////////////////////////////////////////////// // Toggle the built-in linewrapping feature // -static void HD44780_linewrap(int on) +static void +HD44780_linewrap (int on) { } ///////////////////////////////////////////////////////////////// // Toggle the built-in automatic scrolling feature // -static void HD44780_autoscroll(int on) +static void +HD44780_autoscroll (int on) { - hd44780_functions->autoscroll(on); + hd44780_functions->autoscroll (on); } -void common_autoscroll(int on) +void +common_autoscroll (int on) { - hd44780_functions->senddata(0, RS_INSTR, - ENTRYMODE | E_MOVERIGHT | - ((on) ? EDGESCROLL : NOSCROLL)); - hd44780_functions->uPause(1600); + hd44780_functions->senddata (0, RS_INSTR, ENTRYMODE | E_MOVERIGHT | ((on) ? EDGESCROLL : NOSCROLL)); + hd44780_functions->uPause (1600); } ///////////////////////////////////////////////////////////////// // Sets up for vertical bars. Call before lcd.vbar() // -void HD44780_init_vbar() +void +HD44780_init_vbar () { - char a[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - }; - char b[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char c[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char d[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char e[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char f[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char g[] = { - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; + char a[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + }; + char b[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char c[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char d[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char e[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char f[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char g[] = { + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; - HD44780_set_char(1,a); - HD44780_set_char(2,b); - HD44780_set_char(3,c); - HD44780_set_char(4,d); - HD44780_set_char(5,e); - HD44780_set_char(6,f); - HD44780_set_char(7,g); + HD44780_set_char (1, a); + HD44780_set_char (2, b); + HD44780_set_char (3, c); + HD44780_set_char (4, d); + HD44780_set_char (5, e); + HD44780_set_char (6, f); + HD44780_set_char (7, g); } ///////////////////////////////////////////////////////////////// // Inits horizontal bars... // -void HD44780_init_hbar() +void +HD44780_init_hbar () { - char a[] = { - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - }; - char b[] = { - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - }; - char c[] = { - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - }; - char d[] = { - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - }; + char a[] = { + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + }; + char b[] = { + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + }; + char c[] = { + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + }; + char d[] = { + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + }; - HD44780_set_char(1,a); - HD44780_set_char(2,b); - HD44780_set_char(3,c); - HD44780_set_char(4,d); + HD44780_set_char (1, a); + HD44780_set_char (2, b); + HD44780_set_char (3, c); + HD44780_set_char (4, d); } ///////////////////////////////////////////////////////////////// // Draws a vertical bar... // -void HD44780_vbar(int x, int len) +void +HD44780_vbar (int x, int len) { - char map[9] = {32, 1, 2, 3, 4, 5, 6, 7, 255 }; + char map[9] = { 32, 1, 2, 3, 4, 5, 6, 7, 255 }; - int y; - for(y=lcd.hgt; y > 0 && len>0; y--) { - if (len >= lcd.cellhgt) - drv_base_chr(x, y, 255); - else - drv_base_chr(x, y, map[len]); + int y; + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + drv_base_chr (x, y, 255); + else + drv_base_chr (x, y, map[len]); + + len -= lcd.cellhgt; + } - len -= lcd.cellhgt; - } - } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void HD44780_hbar(int x, int y, int len) +void +HD44780_hbar (int x, int y, int len) { - char map[6] = { 32, 1, 2, 3, 4, 255 }; + char map[6] = { 32, 1, 2, 3, 4, 255 }; - for (; x<=lcd.wid && len>0; x++) { - if (len >= lcd.cellwid) - drv_base_chr(x,y,255); - else - drv_base_chr(x, y, map[len]); + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + drv_base_chr (x, y, 255); + else + drv_base_chr (x, y, map[len]); - len -= lcd.cellwid; + len -= lcd.cellwid; - } + } } ///////////////////////////////////////////////////////////////// // Sets up for big numbers. // -void HD44780_init_num() +void +HD44780_init_num () { - char out[3]; - sprintf(out, "%cn", 254); - //write(fd, out, 2); + char out[3]; + sprintf (out, "%cn", 254); + //write(fd, out, 2); } ///////////////////////////////////////////////////////////////// // Writes a big number. // -void HD44780_num(int x, int num) +void +HD44780_num (int x, int num) { - char out[5]; - sprintf(out, "%c#%c%c", 254, x, num); - //write(fd, out, 4); + char out[5]; + sprintf (out, "%c#%c%c", 254, x, num); + //write(fd, out, 4); } @@ -678,69 +634,71 @@ void HD44780_num(int x, int num) // // The input is just an array of characters... // -void HD44780_set_char(int n, char *dat) +void +HD44780_set_char (int n, char *dat) { - int row, col; - int letter; + int row, col; + int letter; - if (n < 0 || n > 7) return; - if (!dat) return; + if (n < 0 || n > 7) + return; + if (!dat) + return; - HD44780_senddata(0, RS_INSTR, SETCHAR | n*8); + HD44780_senddata (0, RS_INSTR, SETCHAR | n * 8); - for(row=0; row < lcd.cellhgt; row++) - { - letter = 0; - for(col=0; col < lcd.cellwid; col++) - { - letter <<= 1; - letter |= (dat[(row * lcd.cellwid) + col] > 0); - } - HD44780_senddata(0, RS_DATA, letter); - } + for (row = 0; row < lcd.cellhgt; row++) { + letter = 0; + for (col = 0; col < lcd.cellwid; col++) { + letter <<= 1; + letter |= (dat[(row * lcd.cellwid) + col] > 0); + } + HD44780_senddata (0, RS_DATA, letter); + } } -void HD44780_icon(int which, char dest) +void +HD44780_icon (int which, char dest) { - char icons[3][5*8] = { - { - 1,1,1,1,1, // Empty Heart - 1,0,1,0,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,0,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, + char icons[3][5 * 8] = { + { + 1, 1, 1, 1, 1, // Empty Heart + 1, 0, 1, 0, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, - { - 1,1,1,1,1, // Filled Heart - 1,0,1,0,1, - 0,1,0,1,0, - 0,1,1,1,0, - 0,1,1,1,0, - 1,0,1,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, - - { - 0,0,0,0,0, // Ellipsis - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,1,0,1, - }, - - }; + { + 1, 1, 1, 1, 1, // Filled Heart + 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, + 0, 1, 1, 1, 0, + 0, 1, 1, 1, 0, + 1, 0, 1, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, - - HD44780_set_char(dest, &icons[which][0]); + { + 0, 0, 0, 0, 0, // Ellipsis + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, + }, + + }; + + + HD44780_set_char (dest, &icons[which][0]); } @@ -749,82 +707,71 @@ void HD44780_icon(int which, char dest) // // Input is a character array, sized lcd.wid*lcd.hgt // -void HD44780_draw_frame(char *dat) +void +HD44780_draw_frame (char *dat) { - int x,y; + int x, y; - if (!dat) return; + if (!dat) + return; + + for (y = 0; y < lcd.hgt; y++) { + HD44780_position (0, y); + //printf("\n%d :",y); + for (x = 0; x < lcd.wid; x++) { + HD44780_senddata (spanList[y], RS_DATA, dat[(y * lcd.wid) + x]); + } + } - for (y=0; y= '1' && spanlist[j] <= '9') - { - int spansize = spanlist[j] - '0'; + while (j < strlen (spanlist)) { + if (spanlist[j] >= '1' && spanlist[j] <= '9') { + int spansize = spanlist[j] - '0'; - // add spansize lines to the span list, note the offset to - // the previous display and the size of the display - if ((*spanListArray = (int *) realloc(*spanListArray, - sizeof(int) * (*spLsize + spansize))) - && (*dispOffsets = (int *) realloc(*dispOffsets, - sizeof(int) * (*dOffsize + 1))) - && (*dispSizeArray = (int *) realloc(*dispSizeArray, - sizeof(int) * (*dOffsize + 1)))) - { - int k; - for (k = 0; k < spansize; ++k) - (*spanListArray)[*spLsize + k] = *dOffsize + 1; + // add spansize lines to the span list, note the offset to + // the previous display and the size of the display + if ((*spanListArray = (int *) realloc (*spanListArray, sizeof (int) * (*spLsize + spansize))) + && (*dispOffsets = (int *) realloc (*dispOffsets, sizeof (int) * (*dOffsize + 1))) + && (*dispSizeArray = (int *) realloc (*dispSizeArray, sizeof (int) * (*dOffsize + 1)))) { + int k; + for (k = 0; k < spansize; ++k) + (*spanListArray)[*spLsize + k] = *dOffsize + 1; - (*dispOffsets)[*dOffsize] = *spLsize; - (*dispSizeArray)[*dOffsize] = spansize; - *spLsize += spansize; - ++(*dOffsize); - retVal = *dOffsize; + (*dispOffsets)[*dOffsize] = *spLsize; + (*dispSizeArray)[*dOffsize] = spansize; + *spLsize += spansize; + ++(*dOffsize); + retVal = *dOffsize; - // find the next number (\0 is also outside this range) - for ( ++j; spanlist[j] < '1' || spanlist[j] > '9'; ++j) - ; + // find the next number (\0 is also outside this range) + for (++j; spanlist[j] < '1' || spanlist[j] > '9'; ++j); + } else { + fprintf (stderr, "Error reallocing for span list\n"); + retVal - 1; + } + } else { + fprintf (stderr, "Error reading spansize\n"); + retVal = -1; } - else - { - fprintf(stderr, "Error reallocing for span list\n"); - retVal -1; - } - } - else - { - fprintf(stderr, "Error reading spansize\n"); - retVal = -1; - } - } - return retVal; + } + return retVal; } diff --git a/server/drivers/hd44780.h b/server/drivers/hd44780.h index 9e0f393..bc53bc4 100644 --- a/server/drivers/hd44780.h +++ b/server/drivers/hd44780.h @@ -17,7 +17,7 @@ #include "port.h" -int HD44780_init(struct lcd_logical_driver *driver, char *args); +int HD44780_init (struct lcd_logical_driver *driver, char *args); /* The following methods can all be hidden. They are used through function ptrs void HD44780_close(); void HD44780_flush(); diff --git a/server/drivers/irmanin.c b/server/drivers/irmanin.c index 97bc033..ba4159e 100644 --- a/server/drivers/irmanin.c +++ b/server/drivers/irmanin.c @@ -32,34 +32,34 @@ char *progname = "irmanin"; char *codes[] = { - /* dummy */ NULL, - /* KeyToLcd */ "lcdproc-A", - /* KeyToLcd */ "lcdproc-B", - /* KeyToLcd */ "lcdproc-C", - /* KeyToLcd */ "lcdproc-D", - /* KeyToLcd */ "lcdproc-E", - /* KeyToLcd */ "lcdproc-F", - /* KeyToLcd */ "lcdproc-G", - /* KeyToLcd */ "lcdproc-H", - /* KeyToLcd */ "lcdproc-I", - /* KeyToLcd */ "lcdproc-J", - /* KeyToLcd */ "lcdproc-K", - /* KeyToLcd */ "lcdproc-L", - /* KeyToLcd */ "lcdproc-M", - /* KeyToLcd */ "lcdproc-N", - /* KeyToLcd */ "lcdproc-O", - /* KeyToLcd */ "lcdproc-P", - /* KeyToLcd */ "lcdproc-Q", - /* KeyToLcd */ "lcdproc-R", - /* KeyToLcd */ "lcdproc-S", - /* KeyToLcd */ "lcdproc-T", - /* KeyToLcd */ "lcdproc-U", - /* KeyToLcd */ "lcdproc-V", - /* KeyToLcd */ "lcdproc-W", - /* KeyToLcd */ "lcdproc-X", - /* KeyToLcd */ "lcdproc-Y", - /* KeyToLcd */ "lcdproc-Z", - /* end */ NULL + /* dummy */ NULL, + /* KeyToLcd */ "lcdproc-A", + /* KeyToLcd */ "lcdproc-B", + /* KeyToLcd */ "lcdproc-C", + /* KeyToLcd */ "lcdproc-D", + /* KeyToLcd */ "lcdproc-E", + /* KeyToLcd */ "lcdproc-F", + /* KeyToLcd */ "lcdproc-G", + /* KeyToLcd */ "lcdproc-H", + /* KeyToLcd */ "lcdproc-I", + /* KeyToLcd */ "lcdproc-J", + /* KeyToLcd */ "lcdproc-K", + /* KeyToLcd */ "lcdproc-L", + /* KeyToLcd */ "lcdproc-M", + /* KeyToLcd */ "lcdproc-N", + /* KeyToLcd */ "lcdproc-O", + /* KeyToLcd */ "lcdproc-P", + /* KeyToLcd */ "lcdproc-Q", + /* KeyToLcd */ "lcdproc-R", + /* KeyToLcd */ "lcdproc-S", + /* KeyToLcd */ "lcdproc-T", + /* KeyToLcd */ "lcdproc-U", + /* KeyToLcd */ "lcdproc-V", + /* KeyToLcd */ "lcdproc-W", + /* KeyToLcd */ "lcdproc-X", + /* KeyToLcd */ "lcdproc-Y", + /* KeyToLcd */ "lcdproc-Z", + /* end */ NULL }; @@ -80,7 +80,8 @@ lcd_logical_driver *irmanin; //////////////////////////////////////////////////////////// // init() should set up any device-specific stuff, and // point all the function pointers. -int irmanin_init(struct lcd_logical_driver *driver, char *args) +int +irmanin_init (struct lcd_logical_driver *driver, char *args) { char device[256]; char *ptrdevice; @@ -93,99 +94,85 @@ int irmanin_init(struct lcd_logical_driver *driver, char *args) int argc, i, j; char *filename; - ptrconfig=NULL; - ptrdevice=NULL; - + ptrconfig = NULL; + ptrdevice = NULL; + irmanin = driver; - argc = get_args(argv, args, 64); + argc = get_args (argv, args, 64); - for(i=0; i argc) { - fprintf(stderr, "irmanin_init: %s requires an argument\n", - argv[i]); + if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { + if (i + 1 > argc) { + fprintf (stderr, "irmanin_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(device, argv[++i]); - ptrdevice=device; - } - else if(0 == strcmp(argv[i], "-c") || - 0 == strcmp(argv[i], "--config")) - { - if(i + 1 > argc) { - fprintf(stderr, "irmanin_init: %s requires an argument\n", - argv[i]); + strcpy (device, argv[++i]); + ptrdevice = device; + } else if (0 == strcmp (argv[i], "-c") || 0 == strcmp (argv[i], "--config")) { + if (i + 1 > argc) { + fprintf (stderr, "irmanin_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(config, argv[++i]); - ptrconfig=config; - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc IrMan input driver\n" - "\t-d\t--device\tSelect the input device to use\n" - "\t-d\t--config\tSelect the configuration file to use\n" - "\t-h\t--help\t\tShow this help information\n"); + strcpy (config, argv[++i]); + ptrconfig = config; + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc IrMan input driver\n" "\t-d\t--device\tSelect the input device to use\n" "\t-d\t--config\tSelect the configuration file to use\n" "\t-h\t--help\t\tShow this help information\n"); return -1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - } - - if (ir_init_commands(ptrconfig, 1) < 0) { - fprintf(stderr, "error initialising commands: %s\n", strerror(errno)); - exit(1); } - portname = ir_default_portname(); - if(portname==NULL){ - if(ptrdevice==NULL){ - portname=ptrdevice; - }else{ - fprintf(stderr, "error no device defined\n"); - exit(1); - } + if (ir_init_commands (ptrconfig, 1) < 0) { + fprintf (stderr, "error initialising commands: %s\n", strerror (errno)); + exit (1); + } + + portname = ir_default_portname (); + if (portname == NULL) { + if (ptrdevice == NULL) { + portname = ptrdevice; + } else { + fprintf (stderr, "error no device defined\n"); + exit (1); + } } driver->getkey = irmanin_getkey; driver->close = irmanin_close; - for (i=1; codes[i] != NULL; i++) { - if (ir_register_command(codes[i], i) < 0) { - if (errno == ENOENT) { - fprintf(stderr, "%s: no code set for `%s'\n", progname, codes[i]); - } else { - fprintf(stderr, "error registering `%s': `%s'\n", codes[i], strerror(errno)); - } - } + for (i = 1; codes[i] != NULL; i++) { + if (ir_register_command (codes[i], i) < 0) { + if (errno == ENOENT) { + fprintf (stderr, "%s: no code set for `%s'\n", progname, codes[i]); + } else { + fprintf (stderr, "error registering `%s': `%s'\n", codes[i], strerror (errno)); + } + } } - errno = 0; - if (ir_init(portname) < 0) { - fprintf(stderr, "%s: error initialising Irman: `%s'\n", strerror(errno), portname); - exit(1); + errno = 0; + if (ir_init (portname) < 0) { + fprintf (stderr, "%s: error initialising Irman: `%s'\n", strerror (errno), portname); + exit (1); } - return 1; // 200 is arbitrary. (must be 1 or more) + return 1; // 200 is arbitrary. (must be 1 or more) } -void irmanin_close() +void +irmanin_close () { - if(irmanin->framebuf != NULL) free(irmanin->framebuf); - - irmanin->framebuf = NULL; + if (irmanin->framebuf != NULL) + free (irmanin->framebuf); - ir_free_commands(); - ir_finish(); + irmanin->framebuf = NULL; + + ir_free_commands (); + ir_finish (); } @@ -194,25 +181,26 @@ void irmanin_close() // // Return 0 for "nothing available". // -char irmanin_getkey() +char +irmanin_getkey () { - int i; - int cmd; - char key; + int i; + int cmd; + char key; - key=(char)0; - switch (cmd=ir_poll_command()) { - case IR_CMD_ERROR: - fprintf(stderr, "%s: error reading command: %s\n", progname, strerror(errno)); + key = (char) 0; + switch (cmd = ir_poll_command ()) { + case IR_CMD_ERROR: + fprintf (stderr, "%s: error reading command: %s\n", progname, strerror (errno)); break; - case IR_CMD_UNKNOWN: + case IR_CMD_UNKNOWN: break; - default: - key=(char)('A'-1+cmd); + default: + key = (char) ('A' - 1 + cmd); break; - } + } - return key; + return key; } /* end of irmanin.c */ diff --git a/server/drivers/irmanin.h b/server/drivers/irmanin.h index 8af1895..6afe28e 100644 --- a/server/drivers/irmanin.h +++ b/server/drivers/irmanin.h @@ -4,9 +4,9 @@ extern lcd_logical_driver *joy; -int irmanin_init(struct lcd_logical_driver *driver, char *args); -void irmanin_close(); -char irmanin_getkey(); +int irmanin_init (struct lcd_logical_driver *driver, char *args); +void irmanin_close (); +char irmanin_getkey (); #endif diff --git a/server/drivers/joy.c b/server/drivers/joy.c index 2d53fae..8839940 100644 --- a/server/drivers/joy.c +++ b/server/drivers/joy.c @@ -46,125 +46,105 @@ int *button; // Configured for a Gravis Gamepad (2 axis, 4 button) -char *axismap = "EFGHIJKLMNOPQRST"; +char *axismap = "EFGHIJKLMNOPQRST"; char *buttonmap = "BDACEFGHIJKLMNOP"; //////////////////////////////////////////////////////////// // init() should set up any device-specific stuff, and // point all the function pointers. -int joy_init(struct lcd_logical_driver *driver, char *args) +int +joy_init (struct lcd_logical_driver *driver, char *args) { char device[256]; char *argv[64]; int argc, i, j; - + joy = driver; - - strcpy(device, "/dev/js0"); - argc = get_args(argv, args, 64); + strcpy (device, "/dev/js0"); - for(i=0; i argc) { - fprintf(stderr, "joy_init: %s requires an argument\n", - argv[i]); + if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { + if (i + 1 > argc) { + fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-a") || - 0 == strcmp(argv[i], "--axes")) - { - if(i + 1 > argc) { - fprintf(stderr, "joy_init: %s requires an argument\n", - argv[i]); + strcpy (device, argv[++i]); + } else if (0 == strcmp (argv[i], "-a") || 0 == strcmp (argv[i], "--axes")) { + if (i + 1 > argc) { + fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); return -1; } - strncpy(axismap, argv[++i], 16); - } - else if(0 == strcmp(argv[i], "-b") || - 0 == strcmp(argv[i], "--buttons")) - { - if(i + 1 > argc) { - fprintf(stderr, "joy_init: %s requires an argument\n", - argv[i]); + strncpy (axismap, argv[++i], 16); + } else if (0 == strcmp (argv[i], "-b") || 0 == strcmp (argv[i], "--buttons")) { + if (i + 1 > argc) { + fprintf (stderr, "joy_init: %s requires an argument\n", argv[i]); return -1; } - strncpy(buttonmap, argv[++i], 16); - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc Joystick input driver\n" - "\t-d\t--device\tSelect the input device to use [/dev/js0]\n" - "\t-a\t--axes\t\tModify the axis map [%s]\n" - "\t-b\t--buttons\tModify the button map [%s]\n" - "\t-h\t--help\t\tShow this help information\n", - axismap, buttonmap); + strncpy (buttonmap, argv[++i], 16); + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc Joystick input driver\n" "\t-d\t--device\tSelect the input device to use [/dev/js0]\n" "\t-a\t--axes\t\tModify the axis map [%s]\n" "\t-b\t--buttons\tModify the button map [%s]\n" "\t-h\t--help\t\tShow this help information\n", axismap, buttonmap); return -1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - + } - - - - - + + + + + driver->getkey = joy_getkey; driver->close = joy_close; /* FIXME: This crashes! - if(args) - { + if(args) + { if(strlen(args) > 0) - strcpy(device, args); - } - */ - + strcpy(device, args); + } + */ + fd = open (device, O_RDONLY); - fcntl(fd, F_SETFL, O_NONBLOCK); + fcntl (fd, F_SETFL, O_NONBLOCK); - if(fd < 0) return -1; - - ioctl(fd, JSIOCGVERSION, &jsversion); - ioctl(fd, JSIOCGAXES, &axes); - ioctl(fd, JSIOCGBUTTONS, &buttons); - ioctl(fd, JSIOCGNAME(NAME_LENGTH), jsname); - - debug("Joystick (%s) has %d axes and %d buttons. Driver version is %d.%d.%d.\n", - jsname, axes, buttons, - jsversion >> 16, (jsversion >> 8) & 0xff, jsversion & 0xff); - - axis = calloc(axes, sizeof(int)); - button = calloc(buttons, sizeof(char)); + if (fd < 0) + return -1; - return fd; // 200 is arbitrary. (must be 1 or more) + ioctl (fd, JSIOCGVERSION, &jsversion); + ioctl (fd, JSIOCGAXES, &axes); + ioctl (fd, JSIOCGBUTTONS, &buttons); + ioctl (fd, JSIOCGNAME (NAME_LENGTH), jsname); + + debug ("Joystick (%s) has %d axes and %d buttons. Driver version is %d.%d.%d.\n", jsname, axes, buttons, jsversion >> 16, (jsversion >> 8) & 0xff, jsversion & 0xff); + + axis = calloc (axes, sizeof (int)); + button = calloc (buttons, sizeof (char)); + + return fd; // 200 is arbitrary. (must be 1 or more) } -void joy_close() +void +joy_close () { - if(joy->framebuf != NULL) free(joy->framebuf); - close(fd); - - joy->framebuf = NULL; + if (joy->framebuf != NULL) + free (joy->framebuf); + close (fd); + + joy->framebuf = NULL; + + // Why do I have so much trouble getting memory freed without segfaults?? + //if(axis) free(axis); + //if(button) free(button); - // Why do I have so much trouble getting memory freed without segfaults?? - //if(axis) free(axis); - //if(button) free(button); - } @@ -173,46 +153,49 @@ void joy_close() // // Return 0 for "nothing available". // -char joy_getkey() +char +joy_getkey () { int i; int err; - - err = read(fd, &js, sizeof(struct js_event)); - if (err <= 0) return 0; - if (err != sizeof(struct js_event)) { - fprintf(stderr, "\nerror reading joystick\n"); + + err = read (fd, &js, sizeof (struct js_event)); + if (err <= 0) + return 0; + if (err != sizeof (struct js_event)) { + fprintf (stderr, "\nerror reading joystick\n"); return 0; } - // if(js.type & JS_EVENT_INIT) return 0; - - switch(js.type & ~JS_EVENT_INIT) { - case JS_EVENT_BUTTON: - button[js.number] = js.value; - break; - case JS_EVENT_AXIS: - axis[js.number] = js.value; - break; + + switch (js.type & ~JS_EVENT_INIT) { + case JS_EVENT_BUTTON: + button[js.number] = js.value; + break; + case JS_EVENT_AXIS: + axis[js.number] = js.value; + break; } if (buttons) { //printf("Buttons: "); for (i = 0; i < buttons; i++) //printf("%2d:%s ", i, button[i] ? "on " : "off"); - if(button[i]) return buttonmap[i]; + if (button[i]) + return buttonmap[i]; } if (axes) { //printf("Axes: "); - for (i = 0; i < axes; i++) - { + for (i = 0; i < axes; i++) { //printf("%2d:%6d ", i, axis[i]); // Eliminate noise... - if(axis[i] > 20000) return axismap[(2*i) + 1]; - if(axis[i] < -20000) return axismap[(2*i)]; + if (axis[i] > 20000) + return axismap[(2 * i) + 1]; + if (axis[i] < -20000) + return axismap[(2 * i)]; } } - + return 0; } diff --git a/server/drivers/joy.h b/server/drivers/joy.h index d5a0d88..bb1a0f5 100644 --- a/server/drivers/joy.h +++ b/server/drivers/joy.h @@ -4,9 +4,9 @@ extern lcd_logical_driver *joy; -int joy_init(struct lcd_logical_driver *driver, char *args); -void joy_close(); -char joy_getkey(); +int joy_init (struct lcd_logical_driver *driver, char *args); +void joy_close (); +char joy_getkey (); #endif diff --git a/server/drivers/lcd.c b/server/drivers/lcd.c index cd9e0d3..788f5df 100644 --- a/server/drivers/lcd.c +++ b/server/drivers/lcd.c @@ -61,41 +61,40 @@ lcd_logical_driver lcd; -lcd_physical_driver drivers[] = -{ - { "base", drv_base_init, }, +lcd_physical_driver drivers[] = { + {"base", drv_base_init,}, #ifdef MTXORB_DRV - { "MtxOrb", MtxOrb_init, }, + {"MtxOrb", MtxOrb_init,}, #endif #ifdef CFONTZ_DRV - { "CFontz", CFontz_init, }, + {"CFontz", CFontz_init,}, #endif #ifdef HD44780_DRV - { "HD44780", HD44780_init, }, + {"HD44780", HD44780_init,}, #endif #ifdef SLI_DRV - { "sli", sli_init, }, + {"sli", sli_init,}, #endif #ifdef TEXT_DRV - { "text", text_init, }, + {"text", text_init,}, #endif #ifdef DEBUG_DRV - { "debug", debug_init, }, + {"debug", debug_init,}, #endif #ifdef CURSES_DRV - { "curses", curses_drv_init, }, + {"curses", curses_drv_init,}, #endif #ifdef JOY_DRV - { "joy", joy_init, }, + {"joy", joy_init,}, #endif #ifdef IRMANIN_DRV - { "irmanin", irmanin_init, }, + {"irmanin", irmanin_init,}, #endif #ifdef LIRCIN_DRV - { "lircin", lircin_init, }, + {"lircin", lircin_init,}, #endif - { NULL, NULL, }, - + {NULL, NULL,}, + }; LL *list; @@ -103,92 +102,90 @@ LL *list; //////////////////////////////////////////////////////////// // This sets up which driver to use and initializes stuff. // -int lcd_init(char *args) +int +lcd_init (char *args) { // int i; int err; - - list = LL_new(); - if(!list) - { - printf("Error allocating driver list.\n"); - return -1; - } - - lcd_drv_init(NULL, NULL); - err = lcd_add_driver("base", args); + list = LL_new (); + if (!list) { + printf ("Error allocating driver list.\n"); + return -1; + } - lcd.wid = 20; - lcd.hgt = 4; + lcd_drv_init (NULL, NULL); - return err; - - /* - drv_base_init(args); + err = lcd_add_driver ("base", args); - for(i=0; drivers[i].name; i++) - { - if(!strcmp(driver, drivers[i].name)) - { + lcd.wid = 20; + lcd.hgt = 4; + + return err; + + /* + drv_base_init(args); + + for(i=0; drivers[i].name; i++) + { + if(!strcmp(driver, drivers[i].name)) + { return drivers[i].init(args); - } - } + } + } + + printf("Invalid driver: %s\n", driver); + return -1; + */ - printf("Invalid driver: %s\n", driver); - return -1; - */ - } // TODO: lcd_remove_driver() -int lcd_add_driver(char *driver, char *args) +int +lcd_add_driver (char *driver, char *args) { int i; - + lcd_logical_driver *add; - - for(i=0; drivers[i].name; i++) - { + + for (i = 0; drivers[i].name; i++) { //printf("Checking driver: %s\n", drivers[i].name); - if(0 == strcmp(driver, drivers[i].name)) - { + if (0 == strcmp (driver, drivers[i].name)) { //printf("Found driver: %s (%s)\n", drivers[i].name, driver); - add = malloc(sizeof(lcd_logical_driver)); - if(!add) - { - printf("Couldn't allocate driver \"%s\".\n", driver); + add = malloc (sizeof (lcd_logical_driver)); + if (!add) { + printf ("Couldn't allocate driver \"%s\".\n", driver); return -1; } //printf("Allocated driver\n"); - memset(add, 0, sizeof(lcd_logical_driver)); + memset (add, 0, sizeof (lcd_logical_driver)); - add->wid = lcd.wid; add->hgt = lcd.hgt; - add->cellwid = lcd.cellwid; add->cellhgt = lcd.cellhgt; + add->wid = lcd.wid; + add->hgt = lcd.hgt; + add->cellwid = lcd.cellwid; + add->cellhgt = lcd.cellhgt; -// printf("LCD driver info:\n\twid: %i\thgt: %i\n", -// add->wid, add->hgt); - - add->framebuf = malloc(add->wid * add->hgt); +// printf("LCD driver info:\n\twid: %i\thgt: %i\n", +// add->wid, add->hgt); - if(!add->framebuf) - { - printf("Couldn't allocate framebuffer for driver \"%s\".\n", - driver); - free(add); + add->framebuf = malloc (add->wid * add->hgt); + + if (!add->framebuf) { + printf ("Couldn't allocate framebuffer for driver \"%s\".\n", driver); + free (add); return -1; } //printf("Allocated frame buffer\n"); - - LL_Push(list, (void *)add); - - return drivers[i].init(add, args); + + LL_Push (list, (void *) add); + + return drivers[i].init (add, args); } } @@ -196,49 +193,47 @@ int lcd_add_driver(char *driver, char *args) } // TODO: Put lcd_shutdown in the shutdown function... -int lcd_shutdown() +int +lcd_shutdown () { lcd_logical_driver *driver; - - LL_Rewind(list); + + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { //printf("driver...\n"); lcd.framebuf = driver->framebuf; - - if((int)driver->close > 0) - { - driver->close(); - } - else if((int)driver->close == -1) - { - drv_base->close(); + + if ((int) driver->close > 0) { + driver->close (); + } else if ((int) driver->close == -1) { + drv_base->close (); } - LL_Shift(list); + LL_Shift (list); // FIXME: This crashes! //if(driver) free(driver); //printf("...freed\n"); } - } while(LL_Length(list) > 0); - + } while (LL_Length (list) > 0); + return 0; } -int lcd_drv_init(struct lcd_logical_driver *driver, char *args) +int +lcd_drv_init (struct lcd_logical_driver *driver, char *args) { // printf("lcd_drv_init()\n"); - - lcd.wid = LCD_MAX_WID; - lcd.hgt = LCD_MAX_HGT; - lcd.framebuf = NULL; + lcd.wid = LCD_MAX_WID; + lcd.hgt = LCD_MAX_HGT; + + lcd.framebuf = NULL; /* if(!lcd.framebuf) lcd.framebuf = malloc(lcd.wid * lcd.hgt); @@ -253,35 +248,35 @@ int lcd_drv_init(struct lcd_logical_driver *driver, char *args) // Debugging... // if(lcd.framebuf) printf("Frame buffer: %i\n", (int)lcd.framebuf); - lcd.cellwid = 5; - lcd.cellhgt = 8; - - // Set up these wrapper functions... - lcd.clear = lcd_drv_clear; - lcd.string = lcd_drv_string; - lcd.chr = lcd_drv_chr; - lcd.vbar = lcd_drv_vbar; - lcd.hbar = lcd_drv_hbar; - lcd.init_num = lcd_drv_init_num; - lcd.num = lcd_drv_num; - - lcd.init = lcd_drv_init; - lcd.close = lcd_drv_close; - lcd.flush = lcd_drv_flush; - lcd.flush_box = lcd_drv_flush_box; - lcd.contrast = lcd_drv_contrast; - lcd.backlight = lcd_drv_backlight; - lcd.output = lcd_drv_output; - lcd.set_char = lcd_drv_set_char; - lcd.icon = lcd_drv_icon; - lcd.init_vbar = lcd_drv_init_vbar; - lcd.init_hbar = lcd_drv_init_hbar; - lcd.draw_frame = lcd_drv_draw_frame; + lcd.cellwid = 5; + lcd.cellhgt = 8; - lcd.getkey = lcd_drv_getkey; - - - return 1; // 1 is arbitrary. (must be 1 or more) + // Set up these wrapper functions... + lcd.clear = lcd_drv_clear; + lcd.string = lcd_drv_string; + lcd.chr = lcd_drv_chr; + lcd.vbar = lcd_drv_vbar; + lcd.hbar = lcd_drv_hbar; + lcd.init_num = lcd_drv_init_num; + lcd.num = lcd_drv_num; + + lcd.init = lcd_drv_init; + lcd.close = lcd_drv_close; + lcd.flush = lcd_drv_flush; + lcd.flush_box = lcd_drv_flush_box; + lcd.contrast = lcd_drv_contrast; + lcd.backlight = lcd_drv_backlight; + lcd.output = lcd_drv_output; + lcd.set_char = lcd_drv_set_char; + lcd.icon = lcd_drv_icon; + lcd.init_vbar = lcd_drv_init_vbar; + lcd.init_hbar = lcd_drv_init_hbar; + lcd.draw_frame = lcd_drv_draw_frame; + + lcd.getkey = lcd_drv_getkey; + + + return 1; // 1 is arbitrary. (must be 1 or more) } @@ -302,437 +297,416 @@ int lcd_drv_init(struct lcd_logical_driver *driver, char *args) ////////////////////////////////////////////////////////////////////// -void lcd_drv_close() +void +lcd_drv_close () { lcd_logical_driver *driver; // printf("lcd_drv_close()\n"); - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->close > 0) - { - printf("Calling close()\n"); - driver->close(); - } - else if((int)driver->close == -1) - { - drv_base->close(); + + if ((int) driver->close > 0) { + printf ("Calling close()\n"); + driver->close (); + } else if ((int) driver->close == -1) { + drv_base->close (); } } - } while(LL_Next(list) == 0); - + } while (LL_Next (list) == 0); + } -void lcd_drv_clear() +void +lcd_drv_clear () { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->clear > 0) - driver->clear(); - else if((int)driver->clear == -1) - { - drv_base->clear(); + + if ((int) driver->clear > 0) + driver->clear (); + else if ((int) driver->clear == -1) { + drv_base->clear (); } } - } while(LL_Next(list) == 0); - + } while (LL_Next (list) == 0); + } -void lcd_drv_flush() +void +lcd_drv_flush () { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->flush > 0) - driver->flush(); - else if((int)driver->flush == -1) - { - drv_base->flush(); + + if ((int) driver->flush > 0) + driver->flush (); + else if ((int) driver->flush == -1) { + drv_base->flush (); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_string(int x, int y, char string[]) +void +lcd_drv_string (int x, int y, char string[]) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->string > 0) - driver->string(x,y,string); - else if((int)driver->string == -1) - { - drv_base->string(x,y,string); + + if ((int) driver->string > 0) + driver->string (x, y, string); + else if ((int) driver->string == -1) { + drv_base->string (x, y, string); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_chr(int x, int y, char c) +void +lcd_drv_chr (int x, int y, char c) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->chr > 0) - driver->chr(x,y,c); - else if((int)driver->chr == -1) - { - drv_base->chr(x,y,c); + + if ((int) driver->chr > 0) + driver->chr (x, y, c); + else if ((int) driver->chr == -1) { + drv_base->chr (x, y, c); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -int lcd_drv_contrast(int contrast) +int +lcd_drv_contrast (int contrast) { - int res=0; + int res = 0; lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->contrast > 0) - { - res=driver->contrast(contrast); - if(res >= 0) return res; + + if ((int) driver->contrast > 0) { + res = driver->contrast (contrast); + if (res >= 0) + return res; } /* - else if((int)driver->contrast == -1) - { - res=drv_base->contrast(contrast); - } - */ + else if((int)driver->contrast == -1) + { + res=drv_base->contrast(contrast); + } + */ } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); return res; } -void lcd_drv_backlight(int on) +void +lcd_drv_backlight (int on) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->backlight > 0) - driver->backlight(on); - else if((int)driver->backlight == -1) - { - drv_base->backlight(on); + + if ((int) driver->backlight > 0) + driver->backlight (on); + else if ((int) driver->backlight == -1) { + drv_base->backlight (on); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_output(int on) +void +lcd_drv_output (int on) { lcd_logical_driver *driver; - LL_Rewind(list); - do - { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + LL_Rewind (list); + do { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - if((int)driver->output > 0) - driver->output(on); - else if((int)driver->output == -1) - { - drv_base->output(on); + if ((int) driver->output > 0) + driver->output (on); + else if ((int) driver->output == -1) { + drv_base->output (on); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_init_vbar() +void +lcd_drv_init_vbar () { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->init_vbar > 0) - driver->init_vbar(); - else if((int)driver->init_vbar == -1) - { - drv_base->init_vbar(); + + if ((int) driver->init_vbar > 0) + driver->init_vbar (); + else if ((int) driver->init_vbar == -1) { + drv_base->init_vbar (); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_init_hbar() +void +lcd_drv_init_hbar () { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->init_hbar > 0) - driver->init_hbar(); - else if((int)driver->init_hbar == -1) - { - drv_base->init_hbar(); + + if ((int) driver->init_hbar > 0) + driver->init_hbar (); + else if ((int) driver->init_hbar == -1) { + drv_base->init_hbar (); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_init_num() +void +lcd_drv_init_num () { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->init_num > 0) - driver->init_num(); - else if((int)driver->init_num == -1) - { - drv_base->init_num(); + + if ((int) driver->init_num > 0) + driver->init_num (); + else if ((int) driver->init_num == -1) { + drv_base->init_num (); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_num(int x, int num) +void +lcd_drv_num (int x, int num) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->num > 0) - driver->num(x,num); - else if((int)driver->num == -1) - { - drv_base->num(x,num); + + if ((int) driver->num > 0) + driver->num (x, num); + else if ((int) driver->num == -1) { + drv_base->num (x, num); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_set_char(int n, char *dat) +void +lcd_drv_set_char (int n, char *dat) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->set_char > 0) - driver->set_char(n,dat); - else if((int)driver->set_char == -1) - { - drv_base->set_char(n,dat); + + if ((int) driver->set_char > 0) + driver->set_char (n, dat); + else if ((int) driver->set_char == -1) { + drv_base->set_char (n, dat); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_vbar(int x, int len) +void +lcd_drv_vbar (int x, int len) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->vbar > 0) - driver->vbar(x,len); - else if((int)driver->vbar == -1) - { - drv_base->vbar(x,len); + + if ((int) driver->vbar > 0) + driver->vbar (x, len); + else if ((int) driver->vbar == -1) { + drv_base->vbar (x, len); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_hbar(int x, int y, int len) +void +lcd_drv_hbar (int x, int y, int len) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->hbar > 0) - driver->hbar(x,y,len); - else if((int)driver->hbar == -1) - { - drv_base->hbar(x,y,len); + + if ((int) driver->hbar > 0) + driver->hbar (x, y, len); + else if ((int) driver->hbar == -1) { + drv_base->hbar (x, y, len); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_icon(int which, char dest) +void +lcd_drv_icon (int which, char dest) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->icon > 0) - driver->icon(which,dest); - else if((int)driver->icon == -1) - { - drv_base->icon(which,dest); + + if ((int) driver->icon > 0) + driver->icon (which, dest); + else if ((int) driver->icon == -1) { + drv_base->icon (which, dest); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -void lcd_drv_flush_box(int lft, int top, int rgt, int bot) +void +lcd_drv_flush_box (int lft, int top, int rgt, int bot) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->flush_box > 0) - driver->flush_box(lft,top,rgt,bot); - else if((int)driver->flush_box == -1) - { - drv_base->flush_box(lft,top,rgt,bot); + + if ((int) driver->flush_box > 0) + driver->flush_box (lft, top, rgt, bot); + else if ((int) driver->flush_box == -1) { + drv_base->flush_box (lft, top, rgt, bot); } } - } while(LL_Next(list) == 0); - + } while (LL_Next (list) == 0); + } // TODO: Check whether lcd.draw_frame() should really take a framebuffer // TODO: as an argument, or if it should always use lcd.framebuf -void lcd_drv_draw_frame(char *dat) +void +lcd_drv_draw_frame (char *dat) { lcd_logical_driver *driver; - LL_Rewind(list); + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->draw_frame > 0) - driver->draw_frame(dat); - else if((int)driver->draw_frame == -1) - { - drv_base->draw_frame(dat); + + if ((int) driver->draw_frame > 0) + driver->draw_frame (dat); + else if ((int) driver->draw_frame == -1) { + drv_base->draw_frame (dat); } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); } -char lcd_drv_getkey() +char +lcd_drv_getkey () { lcd_logical_driver *driver; char key; - - LL_Rewind(list); + + LL_Rewind (list); do { - driver = (lcd_logical_driver *)LL_Get(list); - if(driver) - { + driver = (lcd_logical_driver *) LL_Get (list); + if (driver) { lcd.framebuf = driver->framebuf; - - if((int)driver->getkey > 0) - { - key = driver->getkey(); - if(key) return key; - } - else if((int)driver->getkey == -1) - { - key = drv_base->getkey(); - if(key) return key; + + if ((int) driver->getkey > 0) { + key = driver->getkey (); + if (key) + return key; + } else if ((int) driver->getkey == -1) { + key = drv_base->getkey (); + if (key) + return key; } } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); return 0; } diff --git a/server/drivers/lcd.h b/server/drivers/lcd.h index fa1d79d..6824abf 100644 --- a/server/drivers/lcd.h +++ b/server/drivers/lcd.h @@ -8,9 +8,9 @@ #define LCD_MAX_HEIGHT 256 -int lcd_init(char *args); -int lcd_add_driver(char *driver, char *args); -int lcd_shutdown(); +int lcd_init (char *args); +int lcd_add_driver (char *driver, char *args); +int lcd_shutdown (); @@ -20,76 +20,73 @@ int lcd_shutdown(); // Feel free to override any/all functions here with real driver // functions... // -typedef struct lcd_logical_driver -{ - // Size in cells of the LCD - int wid, hgt; - // Size of each LCD cell, in pixels - int cellwid, cellhgt; - // Frame buffer... - char *framebuf; +typedef struct lcd_logical_driver { + // Size in cells of the LCD + int wid, hgt; + // Size of each LCD cell, in pixels + int cellwid, cellhgt; + // Frame buffer... + char *framebuf; - // Functions which might be the same for all drivers... - void (*clear)(); - void (*string)(int x, int y, char lcd[]); - - void (*chr)(int x, int y, char c); - void (*vbar)(int x, int len); - void (*hbar)(int x, int y, int len); - void (*init_num)(); - void (*num)(int x, int num); - - // Functions which should probably be implemented in each driver... - int (*init)(struct lcd_logical_driver *driver, char *args); - void (*close)(); - void (*flush)(); - void (*flush_box)(int lft, int top, int rgt, int bot); - int (*contrast)(int contrast); - void (*backlight)(int on); - void (*output)(int on); - void (*set_char)(int n, char *dat); - void (*icon)(int which, char dest); - void (*init_vbar)(); - void (*init_hbar)(); - void (*draw_frame)(); + // Functions which might be the same for all drivers... + void (*clear) (); + void (*string) (int x, int y, char lcd[]); + + void (*chr) (int x, int y, char c); + void (*vbar) (int x, int len); + void (*hbar) (int x, int y, int len); + void (*init_num) (); + void (*num) (int x, int num); + + // Functions which should probably be implemented in each driver... + int (*init) (struct lcd_logical_driver * driver, char *args); + void (*close) (); + void (*flush) (); + void (*flush_box) (int lft, int top, int rgt, int bot); + int (*contrast) (int contrast); + void (*backlight) (int on); + void (*output) (int on); + void (*set_char) (int n, char *dat); + void (*icon) (int which, char dest); + void (*init_vbar) (); + void (*init_hbar) (); + void (*draw_frame) (); + + // Returns 0 for "no key pressed", or (A-Z). + char (*getkey) (); + + // more? - // Returns 0 for "no key pressed", or (A-Z). - char (*getkey)(); - - // more? - } lcd_logical_driver; -typedef struct lcd_physical_driver -{ - char *name; - int (*init)(struct lcd_logical_driver *driver, char *device); +typedef struct lcd_physical_driver { + char *name; + int (*init) (struct lcd_logical_driver * driver, char *device); } lcd_physical_driver; extern lcd_logical_driver lcd; -int lcd_drv_init(lcd_logical_driver *driver, char *args); -void lcd_drv_close(); -void lcd_drv_clear(); -void lcd_drv_flush(); -void lcd_drv_string(int x, int y, char string[]); -void lcd_drv_chr(int x, int y, char c); -int lcd_drv_contrast(int contrast); -void lcd_drv_backlight(int on); -void lcd_drv_output(int on); -void lcd_drv_init_vbar(); -void lcd_drv_init_hbar(); -void lcd_drv_init_num(); -void lcd_drv_num(int x, int num); -void lcd_drv_set_char(int n, char *dat); -void lcd_drv_vbar(int x, int len); -void lcd_drv_hbar(int x, int y, int len); -void lcd_drv_icon(int which, char dest); -void lcd_drv_flush_box(int lft, int top, int rgt, int bot); -void lcd_drv_draw_frame(); -char lcd_drv_getkey(); +int lcd_drv_init (lcd_logical_driver * driver, char *args); +void lcd_drv_close (); +void lcd_drv_clear (); +void lcd_drv_flush (); +void lcd_drv_string (int x, int y, char string[]); +void lcd_drv_chr (int x, int y, char c); +int lcd_drv_contrast (int contrast); +void lcd_drv_backlight (int on); +void lcd_drv_output (int on); +void lcd_drv_init_vbar (); +void lcd_drv_init_hbar (); +void lcd_drv_init_num (); +void lcd_drv_num (int x, int num); +void lcd_drv_set_char (int n, char *dat); +void lcd_drv_vbar (int x, int len); +void lcd_drv_hbar (int x, int y, int len); +void lcd_drv_icon (int which, char dest); +void lcd_drv_flush_box (int lft, int top, int rgt, int bot); +void lcd_drv_draw_frame (); +char lcd_drv_getkey (); #endif - diff --git a/server/drivers/lcd_sem.c b/server/drivers/lcd_sem.c index c12699a..e22cfaf 100644 --- a/server/drivers/lcd_sem.c +++ b/server/drivers/lcd_sem.c @@ -23,7 +23,7 @@ #include #include -#include /* for semaphore functions */ +#include /* for semaphore functions */ #include #include #include @@ -31,19 +31,19 @@ #include "lcd_sem.h" #define SEMAPHORE "portctrl" -#define SEMKEY 0x706f7274 /* semaphore key */ -#define SEMCOUNT 1 /* number of semaphores to create */ -#define WMODE 0660 /* access permissions */ +#define SEMKEY 0x706f7274 /* semaphore key */ +#define SEMCOUNT 1 /* number of semaphores to create */ +#define WMODE 0660 /* access permissions */ #define SEM_SIGNAL 0,1,SEM_UNDO #define SEM_WAIT 0,-1,SEM_UNDO /* functions local to this file */ -static key_t getkey(register char *p); - +static key_t getkey (register char *p); + /* global variables */ -static struct sembuf semaphore_wait = {SEM_WAIT}; -static struct sembuf semaphore_signal = {SEM_SIGNAL}; +static struct sembuf semaphore_wait = { SEM_WAIT }; +static struct sembuf semaphore_signal = { SEM_SIGNAL }; static char rcsId[] = "$Id$"; @@ -52,9 +52,9 @@ static char rcsId[] = "$Id$"; */ static key_t -getkey(register char *p) +getkey (register char *p) { - return((key_t) SEMKEY); + return ((key_t) SEMKEY); } /* @@ -63,50 +63,42 @@ getkey(register char *p) */ int -sem_get(void) +sem_get (void) { - int semid; - union semun semval; + int semid; + union semun semval; - if ((semid = semget(getkey(SEMAPHORE), SEMCOUNT, - IPC_CREAT | IPC_EXCL | WMODE)) < 0) - { - switch (errno) - { - case EEXIST: - /* semaphore set exists, get id and return it */ - if ((semid = semget(getkey(SEMAPHORE), SEMCOUNT, - IPC_EXCL | WMODE)) < 0) - { - perror("semget"); - exit(1); - } - return semid; - break; - case EACCES: - /* don't have permissions for semaphore, need to change key */ - perror("semget, can't get permissions for semaphore"); - exit(1); - break; - default: - perror("semget"); - exit(1); - break; - } - } - else - { - /* initialise semaphore to 1 */ - semval.val = 1; + if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_CREAT | IPC_EXCL | WMODE)) < 0) { + switch (errno) { + case EEXIST: + /* semaphore set exists, get id and return it */ + if ((semid = semget (getkey (SEMAPHORE), SEMCOUNT, IPC_EXCL | WMODE)) < 0) { + perror ("semget"); + exit (1); + } + return semid; + break; + case EACCES: + /* don't have permissions for semaphore, need to change key */ + perror ("semget, can't get permissions for semaphore"); + exit (1); + break; + default: + perror ("semget"); + exit (1); + break; + } + } else { + /* initialise semaphore to 1 */ + semval.val = 1; - if (semctl(semid, 0, SETVAL, semval) < 0) - { - perror("setval, can't initialise semaphore"); - exit(1); - } - } - - return semid; + if (semctl (semid, 0, SETVAL, semval) < 0) { + perror ("setval, can't initialise semaphore"); + exit (1); + } + } + + return semid; } /* @@ -114,15 +106,14 @@ sem_get(void) */ int -sem_wait(int sid) +sem_wait (int sid) { - if (semop(sid, &semaphore_wait, 1) < -1) - { - perror(SEMAPHORE); - exit(1); - } + if (semop (sid, &semaphore_wait, 1) < -1) { + perror (SEMAPHORE); + exit (1); + } - return 0; + return 0; } /* @@ -130,15 +121,14 @@ sem_wait(int sid) */ int -sem_signal(int sid) +sem_signal (int sid) { - if (semop(sid, &semaphore_signal, 1) < -1) - { - perror(SEMAPHORE); - exit(1); - } + if (semop (sid, &semaphore_signal, 1) < -1) { + perror (SEMAPHORE); + exit (1); + } - return 0; + return 0; } /* @@ -146,25 +136,22 @@ sem_signal(int sid) */ int -sem_remove(int sid) +sem_remove (int sid) { - int i; - union semun dummy; - - if ((i = semctl(sid, 0, IPC_RMID, dummy)) < 0) - { - switch(i) - { - case EIDRM: - /* semaphore removed */ - return 0; - break; - default: - perror("semctl, removing semaphore"); - exit(1); - } - } + int i; + union semun dummy; - return 0; + if ((i = semctl (sid, 0, IPC_RMID, dummy)) < 0) { + switch (i) { + case EIDRM: + /* semaphore removed */ + return 0; + break; + default: + perror ("semctl, removing semaphore"); + exit (1); + } + } + + return 0; } - diff --git a/server/drivers/lcd_sem.h b/server/drivers/lcd_sem.h index 46b7423..b05dea5 100644 --- a/server/drivers/lcd_sem.h +++ b/server/drivers/lcd_sem.h @@ -5,9 +5,9 @@ #ifndef LCD_SEM_H #define LCD_SEM_H -int sem_get(void); -int sem_wait(int sid); -int sem_signal(int sid); -int sem_remove(int sid); +int sem_get (void); +int sem_wait (int sid); +int sem_signal (int sid); +int sem_remove (int sid); #endif diff --git a/server/drivers/lcddriver.c b/server/drivers/lcddriver.c deleted file mode 100644 index 8e2a821..0000000 --- a/server/drivers/lcddriver.c +++ /dev/null @@ -1,124 +0,0 @@ -/* lcddriver.cd - test/demo of LIBIR's to interface with lcdproc (LCDd) */ -/* Copyright (C) 1999 David Glaude loosely based on workmanir.c */ -/* workmanir.c - test/demo of LIBIR's high level command functions */ -/* Copyright (C) 1998 Tom Wheeley, see file COPYING for details */ - -#include - -#include -#include -#include -#include -#include - -#include "irman.h" - -char *progname = "lcddriver"; - -char *codes[] = { - /* dummy */ NULL, - /* KeyToLcd */ "lcdproc-A", - /* KeyToLcd */ "lcdproc-B", - /* KeyToLcd */ "lcdproc-C", - /* KeyToLcd */ "lcdproc-D", - /* KeyToLcd */ "lcdproc-E", - /* KeyToLcd */ "lcdproc-F", - /* KeyToLcd */ "lcdproc-G", - /* KeyToLcd */ "lcdproc-H", - /* KeyToLcd */ "lcdproc-I", - /* KeyToLcd */ "lcdproc-J", - /* KeyToLcd */ "lcdproc-K", - /* KeyToLcd */ "lcdproc-L", - /* KeyToLcd */ "lcdproc-M", - /* KeyToLcd */ "lcdproc-N", - /* KeyToLcd */ "lcdproc-O", - /* KeyToLcd */ "lcdproc-P", - /* KeyToLcd */ "lcdproc-Q", - /* KeyToLcd */ "lcdproc-R", - /* KeyToLcd */ "lcdproc-S", - /* KeyToLcd */ "lcdproc-T", - /* KeyToLcd */ "lcdproc-U", - /* KeyToLcd */ "lcdproc-V", - /* KeyToLcd */ "lcdproc-W", - /* KeyToLcd */ "lcdproc-X", - /* KeyToLcd */ "lcdproc-Y", - /* KeyToLcd */ "lcdproc-Z", - /* end */ NULL -}; - - -//void sigterm(int sig) -//{ -// ir_free_commands(); -// ir_finish(); -// raise(sig); -//} - - -// INIT $$$ -int INIT() -{ - int i; - char *filename; - - if (ir_init_commands(NULL, 1) < 0) { - fprintf(stderr, "error initialising commands: %s\n", strerror(errno)); - exit(1); - } - - filename = ir_default_portname(); - filename = "option"; - } - - for (i=1; codes[i] != NULL; i++) { - if (ir_register_command(codes[i], i) < 0) { - if (errno == ENOENT) { - fprintf(stderr, "%s: no code set for `%s'\n", progname, codes[i]); - } else { - fprintf(stderr, "error registering `%s': `%s'\n", codes[i], strerror(errno)); - } - } - } - - errno = 0; - if (ir_init(filename) < 0) { - fprintf(stderr, "%s: error initialising Irman: `%s'\n", strerror(errno)); - exit(1); - } - - return 0; -} - -// KEY $$$ -int KEY(void) -{ - int i; - int cmd; - char key; - - key=(char)0; - for(i=1;i;) { - switch (cmd=ir_get_command()) { - case IR_CMD_ERROR: - fprintf(stderr, "%s: error reading command: %s\n", progname, strerror(errno)); -// No exit in LCDd !!! -// exit(1); - - case IR_CMD_UNKNOWN: - fprintf(stderr,"IR unknown command\n"); - default: key='A'-1+cmd; break; - } - } -} - - -// CLOSE $$$ -int CLOSE() -{ - ir_free_commands(); - ir_finish(); - - return 0; -} - -/* end of lcddriver.c */ diff --git a/server/drivers/lircin.c b/server/drivers/lircin.c index ba74c6f..140c9e3 100644 --- a/server/drivers/lircin.c +++ b/server/drivers/lircin.c @@ -49,10 +49,11 @@ lcd_logical_driver *lircin; // raise(sig); //} -void lircin_close() +void +lircin_close () { - lirc_freeconfig(config); - lirc_deinit(); + lirc_freeconfig (config); + lirc_deinit (); } @@ -61,33 +62,34 @@ void lircin_close() // // Return 0 for "nothing available". // -char lircin_getkey() +char +lircin_getkey () { - char key; - char *ir,*cmd; - - if (!(ir = lirc_nextir())) - { - return 0; - } else - { - if (!(cmd = lirc_ir2char(config,ir))) return 0; - - printf("lirc: \"%s\"\n", cmd); - sscanf(cmd,"%c",&key); - printf("\n%c\n",key); - free(ir); - return key; - } + char key; + char *ir, *cmd; - return 0; + if (!(ir = lirc_nextir ())) { + return 0; + } else { + if (!(cmd = lirc_ir2char (config, ir))) + return 0; + + printf ("lirc: \"%s\"\n", cmd); + sscanf (cmd, "%c", &key); + printf ("\n%c\n", key); + free (ir); + return key; + } + + return 0; } //////////////////////////////////////////////////////////// // init() should set up any device-specific stuff, and // point all the function pointers. -int lircin_init(struct lcd_logical_driver *driver, char *args) +int +lircin_init (struct lcd_logical_driver *driver, char *args) { /* assign funktions */ @@ -99,24 +101,23 @@ int lircin_init(struct lcd_logical_driver *driver, char *args) /* open socket to lirc */ - - if (-1 == (fd = lirc_init("lcdd",1))) { - fprintf(stderr,"no infrared remote support available\n"); - return -1; - } - - if (0 != lirc_readconfig(NULL,&config,NULL)) { - lirc_deinit(); - return -1; - } - fcntl(fd,F_SETFL,O_NONBLOCK); - fcntl(fd,F_SETFD,FD_CLOEXEC); - + + if (-1 == (fd = lirc_init ("lcdd", 1))) { + fprintf (stderr, "no infrared remote support available\n"); + return -1; + } + + if (0 != lirc_readconfig (NULL, &config, NULL)) { + lirc_deinit (); + return -1; + } + fcntl (fd, F_SETFL, O_NONBLOCK); + fcntl (fd, F_SETFD, FD_CLOEXEC); + /* socket shouldn block lcdd */ - fcntl(fd,F_SETFL,O_NONBLOCK); - fcntl(fd,F_SETFD,FD_CLOEXEC); - - return 1; // 200 is arbitrary. (must be 1 or more) -} + fcntl (fd, F_SETFL, O_NONBLOCK); + fcntl (fd, F_SETFD, FD_CLOEXEC); + return 1; // 200 is arbitrary. (must be 1 or more) +} diff --git a/server/drivers/lircin.h b/server/drivers/lircin.h index 5f68c41..2bc4428 100644 --- a/server/drivers/lircin.h +++ b/server/drivers/lircin.h @@ -4,9 +4,9 @@ extern lcd_logical_driver *lircin; -int lircin_init(struct lcd_logical_driver *driver, char *args); -void lircin_close(); -char lircin_getkey(); +int lircin_init (struct lcd_logical_driver *driver, char *args); +void lircin_close (); +char lircin_getkey (); #endif diff --git a/server/drivers/port.h b/server/drivers/port.h index 7553743..63ba86f 100644 --- a/server/drivers/port.h +++ b/server/drivers/port.h @@ -15,36 +15,36 @@ #endif #ifndef DOS -static inline int port_in( int port ) +static inline int +port_in (int port) { unsigned char value; - __asm__ volatile ("inb %1,%0" - : "=a" (value) - : "d" ((unsigned short)port)); + __asm__ volatile ("inb %1,%0":"=a" (value) + :"d" ((unsigned short) port)); return value; } -static inline void port_out( unsigned short int port, unsigned char val ) +static inline void +port_out (unsigned short int port, unsigned char val) { - __asm__ volatile ( - "outb %0,%1\n" - : - : "a" (val), "d" (port) - ); + __asm__ volatile ("outb %0,%1\n"::"a" (val), "d" (port) + ); } #else #include -static inline int port_in( int port ) +static inline int +port_in (int port) { unsigned char value; - value = inportb((unsigned short) port); - return (int)value; + value = inportb ((unsigned short) port); + return (int) value; } -static inline void port_out( unsigned int port, unsigned char val ) +static inline void +port_out (unsigned int port, unsigned char val) { - outportb((unsigned short) port, val); + outportb ((unsigned short) port, val); } #endif diff --git a/server/drivers/svgalib_drv.c b/server/drivers/svgalib_drv.c index 1231054..932c128 100644 --- a/server/drivers/svgalib_drv.c +++ b/server/drivers/svgalib_drv.c @@ -38,141 +38,141 @@ /* Small font */ const unsigned char simple_font5x7[] = { -/* ascii '0' ( ) */ 31,31,31,31,31,31,31, -/* ascii '1' ( ) */ 31,31,31,31,31,31,31, -/* ascii '2' ( ) */ 31,31,31,31,31,31,31, -/* ascii '3' ( ) */ 31,31,31,31,31,31,31, -/* ascii '4' ( ) */ 31,31,31,31,31,31,31, -/* ascii '5' ( ) */ 31,31,31,31,31,31,31, -/* ascii '6' ( ) */ 31,31,31,31,31,31,31, -/* ascii '7' ( ) */ 31,31,31,31,31,31,31, -/* ascii '8' ( ) */ 31,31,31,31,31,31,31, -/* ascii '9' ( ) */ 31,31,31,31,31,31,31, -/* ascii '10' ( ) */ 31,31,31,31,31,31,31, -/* ascii '11' ( ) */ 31,31,31,31,31,31,31, -/* ascii '12' ( ) */ 31,31,31,31,31,31,31, -/* ascii '13' ( ) */ 31,31,31,31,31,31,31, -/* ascii '14' ( ) */ 31,31,31,31,31,31,31, -/* ascii '15' ( ) */ 31,31,31,31,31,31,31, -/* ascii '16' ( ) */ 31,31,31,31,31,31,31, -/* ascii '17' ( ) */ 31,31,31,31,31,31,31, -/* ascii '18' ( ) */ 31,31,31,31,31,31,31, -/* ascii '19' ( ) */ 31,31,31,31,31,31,31, -/* ascii '20' ( ) */ 31,31,31,31,31,31,31, -/* ascii '21' ( ) */ 31,31,31,31,31,31,31, -/* ascii '22' ( ) */ 31,31,31,31,31,31,31, -/* ascii '23' ( ) */ 31,31,31,31,31,31,31, -/* ascii '24' ( ) */ 31,31,31,31,31,31,31, -/* ascii '25' ( ) */ 31,31,31,31,31,31,31, -/* ascii '26' ( ) */ 31,31,31,31,31,31,31, -/* ascii '27' ( ) */ 31,31,31,31,31,31,31, -/* ascii '28' ( ) */ 31,31,31,31,31,31,31, -/* ascii '29' ( ) */ 31,31,31,31,31,31,31, -/* ascii '30' ( ) */ 31,31,31,31,31,31,31, -/* ascii '31' ( ) */ 31,31,31,31,31,31,31, +/* ascii '0' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '1' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '2' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '3' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '4' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '5' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '6' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '7' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '8' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '9' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '10' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '11' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '12' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '13' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '14' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '15' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '16' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '17' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '18' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '19' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '20' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '21' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '22' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '23' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '24' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '25' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '26' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '27' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '28' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '29' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '30' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '31' ( ) */ 31, 31, 31, 31, 31, 31, 31, -/* ascii '32' ( ) */ 31,31,31,31,31,31,31, -/* ascii '33' (!) */ 27,27,27,27,31,31,27, -/* ascii '34' (") */ 21,21,21,31,31,31,31, -/* ascii '35' (#) */ 21,21,0,21,0,21,21, -/* ascii '36' ($) */ 27,1,26,17,11,16,27, -/* ascii '37' (%) */ 28,12,23,27,29,6,7, -/* ascii '38' (&) */ 25,22,26,29,10,22,9, -/* ascii '39' (') */ 25,27,29,31,31,31,31, -/* ascii '40' (() */ 23,27,29,29,29,27,23, -/* ascii '41' ()) */ 29,27,23,23,23,27,29, -/* ascii '42' (*) */ 31,27,10,17,10,27,31, -/* ascii '43' (+) */ 31,27,27,0,27,27,31, -/* ascii '44' (,) */ 31,31,31,31,25,27,29, -/* ascii '45' (-) */ 31,31,31,0,31,31,31, -/* ascii '46' (.) */ 31,31,31,31,31,25,25, -/* ascii '47' (/) */ 31,15,23,27,29,30,31, -/* ascii '48' (0) */ 17,14,6,10,12,14,17, -/* ascii '49' (1) */ 27,25,27,27,27,27,17, -/* ascii '50' (2) */ 17,14,15,23,27,29,0, -/* ascii '51' (3) */ 0,23,27,23,15,14,17, -/* ascii '52' (4) */ 23,19,21,22,0,23,23, -/* ascii '53' (5) */ 0,30,16,15,15,14,17, -/* ascii '54' (6) */ 19,29,30,16,14,14,17, -/* ascii '55' (7) */ 0,15,23,27,29,29,29, -/* ascii '56' (8) */ 17,14,14,17,14,14,17, -/* ascii '57' (9) */ 17,14,14,1,15,23,25, -/* ascii '58' (:) */ 31,25,25,31,25,25,31, -/* ascii '59' (;) */ 31,25,25,31,25,27,29, -/* ascii '60' (<) */ 23,27,29,30,29,27,23, -/* ascii '61' (=) */ 31,31,0,31,0,31,31, -/* ascii '62' (>) */ 29,27,23,15,23,27,29, -/* ascii '63' (?) */ 17,14,15,23,27,31,27, -/* ascii '64' (@) */ 17,14,15,9,10,10,17, -/* ascii '65' (A) */ 17,14,14,14,0,14,14, -/* ascii '66' (B) */ 16,14,14,16,14,14,16, -/* ascii '67' (C) */ 16,14,30,30,30,14,16, -/* ascii '68' (D) */ 24,22,14,14,14,22,24, -/* ascii '69' (E) */ 0,30,30,16,30,30,0, -/* ascii '70' (F) */ 0,30,30,16,30,30,30, -/* ascii '71' (G) */ 17,14,30,2,14,14,1, -/* ascii '72' (H) */ 14,14,14,0,14,14,14, -/* ascii '73' (I) */ 17,27,27,27,27,27,17, -/* ascii '74' (J) */ 3,23,23,23,23,22,25, -/* ascii '75' (K) */ 14,22,26,28,26,22,14, -/* ascii '76' (L) */ 30,30,30,30,30,30,0, -/* ascii '77' (M) */ 14,4,10,10,14,14,14, -/* ascii '78' (N) */ 14,14,12,10,6,14,14, -/* ascii '79' (O) */ 17,14,14,14,14,14,17, -/* ascii '80' (P) */ 16,14,14,16,30,30,30, -/* ascii '81' (Q) */ 17,14,14,14,10,22,9, -/* ascii '82' (R) */ 16,14,14,16,26,22,14, -/* ascii '83' (S) */ 1,30,30,17,15,15,16, -/* ascii '84' (T) */ 0,27,27,27,27,27,27, -/* ascii '85' (U) */ 14,14,14,14,14,14,17, -/* ascii '86' (V) */ 14,14,14,14,14,21,27, -/* ascii '87' (W) */ 14,14,14,14,10,10,21, -/* ascii '88' (X) */ 14,14,21,27,21,14,14, -/* ascii '89' (Y) */ 14,14,14,21,27,27,27, -/* ascii '90' (Z) */ 0,15,23,27,29,30,0, -/* ascii '91' ([) */ 17,29,29,29,29,29,17, -/* ascii '92' (\) */ 31,30,29,27,23,15,31, -/* ascii '93' (]) */ 17,23,23,23,23,23,17, -/* ascii '94' (^) */ 27,21,14,31,31,31,31, -/* ascii '95' (_) */ 31,31,31,31,31,31,0, -/* ascii '96' (`) */ 29,27,23,31,31,31,31, -/* ascii '97' (a) */ 31,31,17,15,1,14,1, -/* ascii '98' (b) */ 30,30,18,12,14,14,16, -/* ascii '99' (c) */ 31,31,17,30,30,14,17, -/* ascii '100' (d) */ 15,15,9,6,14,14,1, -/* ascii '101' (e) */ 31,31,17,14,0,30,17, -/* ascii '102' (f) */ 19,13,29,24,29,29,29, -/* ascii '103' (g) */ 31,1,14,14,1,15,17, -/* ascii '104' (h) */ 30,30,18,12,14,14,14, -/* ascii '105' (i) */ 27,31,25,27,27,27,17, -/* ascii '106' (j) */ 23,31,19,23,23,22,25, -/* ascii '107' (k) */ 30,30,22,26,28,26,22, -/* ascii '108' (l) */ 25,27,27,27,27,27,17, -/* ascii '109' (m) */ 31,31,20,10,10,14,14, -/* ascii '110' (n) */ 31,31,18,12,14,14,14, -/* ascii '111' (o) */ 31,31,17,14,14,14,17, -/* ascii '112' (p) */ 31,31,16,14,16,30,30, -/* ascii '113' (q) */ 31,31,9,6,1,15,15, -/* ascii '114' (r) */ 31,31,18,12,30,30,30, -/* ascii '115' (s) */ 31,31,17,30,17,15,16, -/* ascii '116' (t) */ 29,29,24,29,29,13,19, -/* ascii '117' (u) */ 31,31,14,14,14,6,9, -/* ascii '118' (v) */ 31,31,14,14,14,21,27, -/* ascii '119' (w) */ 31,31,14,14,10,10,21, -/* ascii '120' (x) */ 31,31,14,21,27,21,14, -/* ascii '121' (y) */ 31,31,14,14,1,15,17, -/* ascii '122' (z) */ 31,31,0,23,27,29,0, -/* ascii '123' ({) */ 23,27,27,29,27,27,23, -/* ascii '124' (|) */ 27,27,27,27,27,27,27, -/* ascii '125' (}) */ 29,27,27,23,27,27,29, -/* ascii '126' (~) */ 31,27,23,0,23,27,31 +/* ascii '32' ( ) */ 31, 31, 31, 31, 31, 31, 31, +/* ascii '33' (!) */ 27, 27, 27, 27, 31, 31, 27, +/* ascii '34' (") */ 21, 21, 21, 31, 31, 31, 31, +/* ascii '35' (#) */ 21, 21, 0, 21, 0, 21, 21, +/* ascii '36' ($) */ 27, 1, 26, 17, 11, 16, 27, +/* ascii '37' (%) */ 28, 12, 23, 27, 29, 6, 7, +/* ascii '38' (&) */ 25, 22, 26, 29, 10, 22, 9, +/* ascii '39' (') */ 25, 27, 29, 31, 31, 31, 31, +/* ascii '40' (() */ 23, 27, 29, 29, 29, 27, 23, +/* ascii '41' ()) */ 29, 27, 23, 23, 23, 27, 29, +/* ascii '42' (*) */ 31, 27, 10, 17, 10, 27, 31, +/* ascii '43' (+) */ 31, 27, 27, 0, 27, 27, 31, +/* ascii '44' (,) */ 31, 31, 31, 31, 25, 27, 29, +/* ascii '45' (-) */ 31, 31, 31, 0, 31, 31, 31, +/* ascii '46' (.) */ 31, 31, 31, 31, 31, 25, 25, +/* ascii '47' (/) */ 31, 15, 23, 27, 29, 30, 31, +/* ascii '48' (0) */ 17, 14, 6, 10, 12, 14, 17, +/* ascii '49' (1) */ 27, 25, 27, 27, 27, 27, 17, +/* ascii '50' (2) */ 17, 14, 15, 23, 27, 29, 0, +/* ascii '51' (3) */ 0, 23, 27, 23, 15, 14, 17, +/* ascii '52' (4) */ 23, 19, 21, 22, 0, 23, 23, +/* ascii '53' (5) */ 0, 30, 16, 15, 15, 14, 17, +/* ascii '54' (6) */ 19, 29, 30, 16, 14, 14, 17, +/* ascii '55' (7) */ 0, 15, 23, 27, 29, 29, 29, +/* ascii '56' (8) */ 17, 14, 14, 17, 14, 14, 17, +/* ascii '57' (9) */ 17, 14, 14, 1, 15, 23, 25, +/* ascii '58' (:) */ 31, 25, 25, 31, 25, 25, 31, +/* ascii '59' (;) */ 31, 25, 25, 31, 25, 27, 29, +/* ascii '60' (<) */ 23, 27, 29, 30, 29, 27, 23, +/* ascii '61' (=) */ 31, 31, 0, 31, 0, 31, 31, +/* ascii '62' (>) */ 29, 27, 23, 15, 23, 27, 29, +/* ascii '63' (?) */ 17, 14, 15, 23, 27, 31, 27, +/* ascii '64' (@) */ 17, 14, 15, 9, 10, 10, 17, +/* ascii '65' (A) */ 17, 14, 14, 14, 0, 14, 14, +/* ascii '66' (B) */ 16, 14, 14, 16, 14, 14, 16, +/* ascii '67' (C) */ 16, 14, 30, 30, 30, 14, 16, +/* ascii '68' (D) */ 24, 22, 14, 14, 14, 22, 24, +/* ascii '69' (E) */ 0, 30, 30, 16, 30, 30, 0, +/* ascii '70' (F) */ 0, 30, 30, 16, 30, 30, 30, +/* ascii '71' (G) */ 17, 14, 30, 2, 14, 14, 1, +/* ascii '72' (H) */ 14, 14, 14, 0, 14, 14, 14, +/* ascii '73' (I) */ 17, 27, 27, 27, 27, 27, 17, +/* ascii '74' (J) */ 3, 23, 23, 23, 23, 22, 25, +/* ascii '75' (K) */ 14, 22, 26, 28, 26, 22, 14, +/* ascii '76' (L) */ 30, 30, 30, 30, 30, 30, 0, +/* ascii '77' (M) */ 14, 4, 10, 10, 14, 14, 14, +/* ascii '78' (N) */ 14, 14, 12, 10, 6, 14, 14, +/* ascii '79' (O) */ 17, 14, 14, 14, 14, 14, 17, +/* ascii '80' (P) */ 16, 14, 14, 16, 30, 30, 30, +/* ascii '81' (Q) */ 17, 14, 14, 14, 10, 22, 9, +/* ascii '82' (R) */ 16, 14, 14, 16, 26, 22, 14, +/* ascii '83' (S) */ 1, 30, 30, 17, 15, 15, 16, +/* ascii '84' (T) */ 0, 27, 27, 27, 27, 27, 27, +/* ascii '85' (U) */ 14, 14, 14, 14, 14, 14, 17, +/* ascii '86' (V) */ 14, 14, 14, 14, 14, 21, 27, +/* ascii '87' (W) */ 14, 14, 14, 14, 10, 10, 21, +/* ascii '88' (X) */ 14, 14, 21, 27, 21, 14, 14, +/* ascii '89' (Y) */ 14, 14, 14, 21, 27, 27, 27, +/* ascii '90' (Z) */ 0, 15, 23, 27, 29, 30, 0, +/* ascii '91' ([) */ 17, 29, 29, 29, 29, 29, 17, +/* ascii '92' (\) */ 31, 30, 29, 27, 23, 15, 31, +/* ascii '93' (]) */ 17, 23, 23, 23, 23, 23, 17, +/* ascii '94' (^) */ 27, 21, 14, 31, 31, 31, 31, +/* ascii '95' (_) */ 31, 31, 31, 31, 31, 31, 0, +/* ascii '96' (`) */ 29, 27, 23, 31, 31, 31, 31, +/* ascii '97' (a) */ 31, 31, 17, 15, 1, 14, 1, +/* ascii '98' (b) */ 30, 30, 18, 12, 14, 14, 16, +/* ascii '99' (c) */ 31, 31, 17, 30, 30, 14, 17, +/* ascii '100' (d) */ 15, 15, 9, 6, 14, 14, 1, +/* ascii '101' (e) */ 31, 31, 17, 14, 0, 30, 17, +/* ascii '102' (f) */ 19, 13, 29, 24, 29, 29, 29, +/* ascii '103' (g) */ 31, 1, 14, 14, 1, 15, 17, +/* ascii '104' (h) */ 30, 30, 18, 12, 14, 14, 14, +/* ascii '105' (i) */ 27, 31, 25, 27, 27, 27, 17, +/* ascii '106' (j) */ 23, 31, 19, 23, 23, 22, 25, +/* ascii '107' (k) */ 30, 30, 22, 26, 28, 26, 22, +/* ascii '108' (l) */ 25, 27, 27, 27, 27, 27, 17, +/* ascii '109' (m) */ 31, 31, 20, 10, 10, 14, 14, +/* ascii '110' (n) */ 31, 31, 18, 12, 14, 14, 14, +/* ascii '111' (o) */ 31, 31, 17, 14, 14, 14, 17, +/* ascii '112' (p) */ 31, 31, 16, 14, 16, 30, 30, +/* ascii '113' (q) */ 31, 31, 9, 6, 1, 15, 15, +/* ascii '114' (r) */ 31, 31, 18, 12, 30, 30, 30, +/* ascii '115' (s) */ 31, 31, 17, 30, 17, 15, 16, +/* ascii '116' (t) */ 29, 29, 24, 29, 29, 13, 19, +/* ascii '117' (u) */ 31, 31, 14, 14, 14, 6, 9, +/* ascii '118' (v) */ 31, 31, 14, 14, 14, 21, 27, +/* ascii '119' (w) */ 31, 31, 14, 14, 10, 10, 21, +/* ascii '120' (x) */ 31, 31, 14, 21, 27, 21, 14, +/* ascii '121' (y) */ 31, 31, 14, 14, 1, 15, 17, +/* ascii '122' (z) */ 31, 31, 0, 23, 27, 29, 0, +/* ascii '123' ({) */ 23, 27, 27, 29, 27, 27, 23, +/* ascii '124' (|) */ 27, 27, 27, 27, 27, 27, 27, +/* ascii '125' (}) */ 29, 27, 27, 23, 27, 27, 29, +/* ascii '126' (~) */ 31, 27, 23, 0, 23, 27, 31 }; // -#define SVGALIB_FONT_VER 10 /* vertical spacing between lines (pixels) */ -#define SVGALIB_Y_OFFSET 40 /* distance from the top of the screen (pixels) */ +#define SVGALIB_FONT_VER 10 /* vertical spacing between lines (pixels) */ +#define SVGALIB_Y_OFFSET 40 /* distance from the top of the screen (pixels) */ // @@ -186,12 +186,12 @@ const unsigned char simple_font5x7[] = { lcd_logical_driver *svgalib_drv; -int SVGALIB_PAD=255; -int SVGALIB_ELLIPSIS=7; +int SVGALIB_PAD = 255; +int SVGALIB_ELLIPSIS = 7; -void* SVGALIB_font; /* normal font */ -void* SVGALIB_highfont; /* highlighted font (not used yet) */ -void* SVGALIB_warnfont; /* warning font (not used yet) */ +void *SVGALIB_font; /* normal font */ +void *SVGALIB_highfont; /* highlighted font (not used yet) */ +void *SVGALIB_warnfont; /* warning font (not used yet) */ /* @@ -202,7 +202,7 @@ void* SVGALIB_warnfont; /* warning font (not used yet) */ Ahem... don't do this unless you can get to another console to kill the process after. */ - int SVGALIB_figure_mappings=0; +int SVGALIB_figure_mappings = 0; ////////////////////////////////////////////////////////////////////////// ////////////////////// For Output on SVGALIB screen ////////////////////// @@ -212,42 +212,43 @@ void* SVGALIB_warnfont; /* warning font (not used yet) */ -void ExpandGroovyFont( int w, int ht, unsigned char col, - const unsigned char* fnt, unsigned char* ptr ) +void +ExpandGroovyFont (int w, int ht, unsigned char col, const unsigned char *fnt, unsigned char *ptr) // Expand groovy 5x7 font into an area of memory { -int x,n,y; -unsigned char mask; -unsigned char base; -unsigned char *p; - p = ptr; - for (n=0;n<127;n++) { - for (y=0;yclear = svgalib_drv_clear; driver->string = svgalib_drv_string; driver->chr = svgalib_drv_chr; @@ -300,7 +302,7 @@ int svgalib_drv_init(struct lcd_logical_driver *driver, char *args) driver->init_hbar = NULL; driver->num = svgalib_drv_num; driver->init_num = svgalib_drv_init_num; - + driver->init = svgalib_drv_init; driver->close = svgalib_drv_close; driver->flush = svgalib_drv_flush; @@ -317,20 +319,22 @@ int svgalib_drv_init(struct lcd_logical_driver *driver, char *args) SVGALIB_PAD = '#'; // Change the character used for "..." SVGALIB_ELLIPSIS = '~'; - - return 1; + + return 1; } -void svgalib_drv_close() +void +svgalib_drv_close () { - vga_setmode(TEXT); - drv_base_close(); + vga_setmode (TEXT); + drv_base_close (); } -void svgalib_drv_clear() +void +svgalib_drv_clear () { - vga_waitretrace(); - gl_clearscreen(gl_rgbcolor(0,0,0)); + vga_waitretrace (); + gl_clearscreen (gl_rgbcolor (0, 0, 0)); } @@ -338,75 +342,88 @@ void svgalib_drv_clear() // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void svgalib_drv_string(int x, int y, char string[]) +void +svgalib_drv_string (int x, int y, char string[]) { int i; unsigned char *c; - for(i=0; string[i]; i++) - { + for (i = 0; string[i]; i++) { c = &string[i]; - switch(*c) { - case 0: *c = icon_char; break; - case 255: *c = '#'; break; + switch (*c) { + case 0: + *c = icon_char; + break; + case 255: + *c = '#'; + break; } } - gl_setfont( 5,7,SVGALIB_font ); - spaced_gl_writen( x*8,y*SVGALIB_FONT_VER+SVGALIB_Y_OFFSET, i, string ); + gl_setfont (5, 7, SVGALIB_font); + spaced_gl_writen (x * 8, y * SVGALIB_FONT_VER + SVGALIB_Y_OFFSET, i, string); } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void svgalib_drv_chr(int x, int y, char c) +void +svgalib_drv_chr (int x, int y, char c) { -char buffer[2]; - switch(c) { - case 0: c=icon_char; break; - case -1: c = '#'; break; + char buffer[2]; + switch (c) { + case 0: + c = icon_char; + break; + case -1: + c = '#'; + break; } buffer[0] = c; buffer[1] = 0; - gl_setfont( 5,7,SVGALIB_font ); - spaced_gl_writen( x*8,y*SVGALIB_FONT_VER+SVGALIB_Y_OFFSET, 1, buffer ); + gl_setfont (5, 7, SVGALIB_font); + spaced_gl_writen (x * 8, y * SVGALIB_FONT_VER + SVGALIB_Y_OFFSET, 1, buffer); } ///////////////////////////////////////////////////////////////// // Sets up for big numbers. // -void svgalib_drv_init_num() +void +svgalib_drv_init_num () { } ///////////////////////////////////////////////////////////////// // Writes a big number, but not. A bit like the curses driver. // -void svgalib_drv_num(int x, int num) +void +svgalib_drv_num (int x, int num) { char c; int y, dx; - c='0'+num; + c = '0' + num; - for(y=1; y<5; y++) - for(dx=0; dx<3; dx++) - svgalib_drv_chr(x+dx, y, c); + for (y = 1; y < 5; y++) + for (dx = 0; dx < 3; dx++) + svgalib_drv_chr (x + dx, y, c); } ///////////////////////////////////////////////////////////////// // Draws a vertical bar; erases entire column onscreen. // -void svgalib_drv_vbar(int x, int len) +void +svgalib_drv_vbar (int x, int len) { - char map[]="_.,,ooO8"; - + char map[] = "_.,,ooO8"; + int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - if(len >= lcd.cellhgt) svgalib_drv_chr(x, y, '8'); - else svgalib_drv_chr(x, y, map[len-1]); - + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + svgalib_drv_chr (x, y, '8'); + else + svgalib_drv_chr (x, y, map[len - 1]); + len -= lcd.cellhgt; } } @@ -414,15 +431,15 @@ void svgalib_drv_vbar(int x, int len) ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void svgalib_drv_hbar(int x, int y, int len) +void +svgalib_drv_hbar (int x, int y, int len) { - for(; x<=lcd.wid && len>0; x++) - { - if(len>=lcd.cellwid) - svgalib_drv_chr(x, y, '='); + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + svgalib_drv_chr (x, y, '='); else - svgalib_drv_chr(x, y, '-'); - + svgalib_drv_chr (x, y, '-'); + len -= lcd.cellwid; } } @@ -431,89 +448,136 @@ void svgalib_drv_hbar(int x, int y, int len) ///////////////////////////////////////////////////////////////// // Sets character 0 to an icon... // -void svgalib_drv_icon(int which, char dest) +void +svgalib_drv_icon (int which, char dest) { - if(dest == 0) - switch(which) - { - case 0: icon_char = '+'; break; - case 1: icon_char = '*'; break; - default: icon_char = '#'; break; - } + if (dest == 0) + switch (which) { + case 0: + icon_char = '+'; + break; + case 1: + icon_char = '*'; + break; + default: + icon_char = '#'; + break; + } } -void svgalib_drv_flush() +void +svgalib_drv_flush () { } -void svgalib_drv_flush_box(int lft, int top, int rgt, int bot) +void +svgalib_drv_flush_box (int lft, int top, int rgt, int bot) { } -void svgalib_drv_draw_frame(char *dat) +void +svgalib_drv_draw_frame (char *dat) { } -char svgalib_drv_getkey() +char +svgalib_drv_getkey () { -int i; -int loop; -FILE* fd; - i = vga_getkey(); + int i; + int loop; + FILE *fd; + i = vga_getkey (); if (i) { - switch (i) { - /* map the cursor keys to something sensible. */ - case 27 : - i = vga_getkey(); - if (i==91) { - i = vga_getkey(); - switch (i) { - case VGAKEY_LEFT: i= 'D';break; - case VGAKEY_UP: i= 'B';break; - case VGAKEY_DOWN: i= 'C';break; - case VGAKEY_RIGHT: i= 'A';break; - default: - i=0; /* key not recognised */ - } - } else { - i=0; - } - break; + switch (i) { + /* map the cursor keys to something sensible. */ + case 27: + i = vga_getkey (); + if (i == 91) { + i = vga_getkey (); + switch (i) { + case VGAKEY_LEFT: + i = 'D'; + break; + case VGAKEY_UP: + i = 'B'; + break; + case VGAKEY_DOWN: + i = 'C'; + break; + case VGAKEY_RIGHT: + i = 'A'; + break; + default: + i = 0; /* key not recognised */ + } + } else { + i = 0; + } + break; - /* - Change this bit to your liking. I only set these values because - they tie in with my keypads use of the keyboard controller chip - see http://www.gofree.co.uk/home/smh/mp3 for details. - Having said that try to make sure four keys map to D,B,C,A so you'll - be able to quit LCDproc from the emulation. - - */ - case 'j' : i= 'D';break; /* left */ - case 'm' : i= 'B';break; /* up */ - case '7' : i= 'C';break; /* down */ - case 'u' : i= 'A';break; /* right */ - - case 'v':i='Q';break; /* one */ - case 'c':i='W';break; /* two */ - case 'z':i='E';break; /* three */ - case '4':i='R';break; /* four */ - case '3':i='T';break; /* five */ - case '1':i='Y';break; /* six */ - case 'f':i='U';break; /* seven */ - case 'd':i='I';break; /* eight */ - case 'a':i='O';break; /* nine */ - case 'e':i='P';break; /* zero */ - case 'r':i='L';break; /* 'C' key */ - default : - i = 0; - } - } /* if (i) */ + /* + Change this bit to your liking. I only set these values because + they tie in with my keypads use of the keyboard controller chip + see http://www.gofree.co.uk/home/smh/mp3 for details. + Having said that try to make sure four keys map to D,B,C,A so you'll + be able to quit LCDproc from the emulation. + */ + case 'j': + i = 'D'; + break; /* left */ + case 'm': + i = 'B'; + break; /* up */ + case '7': + i = 'C'; + break; /* down */ + case 'u': + i = 'A'; + break; /* right */ + + case 'v': + i = 'Q'; + break; /* one */ + case 'c': + i = 'W'; + break; /* two */ + case 'z': + i = 'E'; + break; /* three */ + case '4': + i = 'R'; + break; /* four */ + case '3': + i = 'T'; + break; /* five */ + case '1': + i = 'Y'; + break; /* six */ + case 'f': + i = 'U'; + break; /* seven */ + case 'd': + i = 'I'; + break; /* eight */ + case 'a': + i = 'O'; + break; /* nine */ + case 'e': + i = 'P'; + break; /* zero */ + case 'r': + i = 'L'; + break; /* 'C' key */ + default: + i = 0; + } + } + /* if (i) */ return i; } - diff --git a/server/drivers/svgalib_drv.h b/server/drivers/svgalib_drv.h index 7ccfea9..0a6db08 100644 --- a/server/drivers/svgalib_drv.h +++ b/server/drivers/svgalib_drv.h @@ -4,21 +4,21 @@ extern lcd_logical_driver *vgalib_drv; -int svgalib_drv_init(struct lcd_logical_driver *driver, char *args); -void svgalib_drv_close(); -void svgalib_drv_clear(); -void svgalib_drv_flush(); -void svgalib_drv_string(int x, int y, char string[]); -void svgalib_drv_chr(int x, int y, char c); -void svgalib_drv_vbar(int x, int len); -void svgalib_drv_hbar(int x, int y, int len); -void svgalib_drv_icon(int which, char dest); -void svgalib_drv_flush(); -void svgalib_drv_flush_box(int lft, int top, int rgt, int bot); -void svgalib_drv_draw_frame(char *dat); -char svgalib_drv_getkey(); -void svgalib_drv_init_num(); -void svgalib_drv_num(int x, int num); +int svgalib_drv_init (struct lcd_logical_driver *driver, char *args); +void svgalib_drv_close (); +void svgalib_drv_clear (); +void svgalib_drv_flush (); +void svgalib_drv_string (int x, int y, char string[]); +void svgalib_drv_chr (int x, int y, char c); +void svgalib_drv_vbar (int x, int len); +void svgalib_drv_hbar (int x, int y, int len); +void svgalib_drv_icon (int which, char dest); +void svgalib_drv_flush (); +void svgalib_drv_flush_box (int lft, int top, int rgt, int bot); +void svgalib_drv_draw_frame (char *dat); +char svgalib_drv_getkey (); +void svgalib_drv_init_num (); +void svgalib_drv_num (int x, int num); #endif diff --git a/server/drivers/text.c b/server/drivers/text.c index 90f40e0..d530a9b 100644 --- a/server/drivers/text.c +++ b/server/drivers/text.c @@ -17,69 +17,72 @@ lcd_logical_driver *text; ////////////////////// For Text-Mode Output ////////////////////////////// ////////////////////////////////////////////////////////////////////////// -int text_init(lcd_logical_driver *driver, char *args) +int +text_init (lcd_logical_driver * driver, char *args) { text = driver; - - if(!driver->framebuf) - { - driver->close(); + + if (!driver->framebuf) { + driver->close (); return -1; - } - - - driver->wid = 20; - driver->hgt = 4; - driver->cellwid = 5; - driver->cellhgt = 8; - - driver->clear = (void *)-1; - driver->string = (void *)-1; - driver->chr = (void *)-1; - driver->vbar = text_vbar; - driver->init_vbar = NULL; - driver->hbar = text_hbar; - driver->init_hbar = NULL; - driver->num = (void *)-1; - driver->init_num = NULL; - - driver->init = text_init; - driver->close = text_close; - driver->flush = text_flush; - driver->flush_box = NULL; - driver->contrast = NULL; - driver->backlight = NULL; - driver->set_char = NULL; - driver->icon = NULL; - driver->draw_frame = text_draw_frame; - - driver->getkey = NULL; + } - return 200; // 200 is arbitrary. (must be 1 or more) + driver->wid = 20; + driver->hgt = 4; + driver->cellwid = 5; + driver->cellhgt = 8; + + driver->clear = (void *) -1; + driver->string = (void *) -1; + driver->chr = (void *) -1; + driver->vbar = text_vbar; + driver->init_vbar = NULL; + driver->hbar = text_hbar; + driver->init_hbar = NULL; + driver->num = (void *) -1; + driver->init_num = NULL; + + driver->init = text_init; + driver->close = text_close; + driver->flush = text_flush; + driver->flush_box = NULL; + driver->contrast = NULL; + driver->backlight = NULL; + driver->set_char = NULL; + driver->icon = NULL; + driver->draw_frame = text_draw_frame; + + driver->getkey = NULL; + + + return 200; // 200 is arbitrary. (must be 1 or more) } -void text_close() +void +text_close () { - drv_base_close(); + drv_base_close (); } ///////////////////////////////////////////////////////////////// // Clears the LCD screen // -void text_clear() +void +text_clear () { - memset(lcd.framebuf, ' ', lcd.wid*lcd.hgt); - + memset (lcd.framebuf, ' ', lcd.wid * lcd.hgt); + } ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // -void text_flush() +void +text_flush () { - text_draw_frame(lcd.framebuf); + text_draw_frame (lcd.framebuf); } @@ -87,40 +90,43 @@ void text_flush() // Prints a string on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void text_string(int x, int y, char string[]) +void +text_string (int x, int y, char string[]) { - int i; + int i; - x -= 1; // Convert 1-based coords to 0-based... - y -= 1; - - for(i=0; string[i]; i++) - { - lcd.framebuf[(y*lcd.wid) + x + i] = string[i]; - } + x -= 1; // Convert 1-based coords to 0-based... + y -= 1; + + for (i = 0; string[i]; i++) { + lcd.framebuf[(y * lcd.wid) + x + i] = string[i]; + } } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void text_chr(int x, int y, char c) +void +text_chr (int x, int y, char c) { - y--; - x--; - - lcd.framebuf[(y*lcd.wid) + x] = c; + y--; + x--; + + lcd.framebuf[(y * lcd.wid) + x] = c; } -int text_contrast(int contrast) +int +text_contrast (int contrast) { // printf("Contrast: %i\n", contrast); return 0; } -void text_backlight(int on) +void +text_backlight (int on) { /* if(on) @@ -134,27 +140,32 @@ void text_backlight(int on) */ } -void text_init_vbar() +void +text_init_vbar () { // printf("Vertical bars.\n"); } -void text_init_hbar() +void +text_init_hbar () { // printf("Horizontal bars.\n"); } -void text_init_num() +void +text_init_num () { // printf("Big Numbers.\n"); } -void text_num(int x, int num) +void +text_num (int x, int num) { // printf("BigNum(%i, %i)\n", x, num); } -void text_set_char(int n, char *dat) +void +text_set_char (int n, char *dat) { // printf("Set Character %i\n", n); } @@ -162,75 +173,73 @@ void text_set_char(int n, char *dat) ///////////////////////////////////////////////////////////////// // Draws a vertical bar; erases entire column onscreen. // -void text_vbar(int x, int len) +void +text_vbar (int x, int len) { - int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - text_chr(x, y, '|'); + int y; + for (y = lcd.hgt; y > 0 && len > 0; y--) { + text_chr (x, y, '|'); len -= lcd.cellhgt; - } - + } + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void text_hbar(int x, int y, int len) +void +text_hbar (int x, int y, int len) { - for(; x<=lcd.wid && len>0; x++) - { - text_chr(x,y,'-'); - + for (; x <= lcd.wid && len > 0; x++) { + text_chr (x, y, '-'); + len -= lcd.cellwid; - } - + } + } -void text_flush_box(int lft, int top, int rgt, int bot) +void +text_flush_box (int lft, int top, int rgt, int bot) { - text_flush(); - + text_flush (); + } -void text_draw_frame(char *dat) +void +text_draw_frame (char *dat) { - int i, j; + int i, j; - char out[LCD_MAX_WIDTH]; + char out[LCD_MAX_WIDTH]; - if(!dat) return; + if (!dat) + return; // printf("Frame (%ix%i): \n%s\n", lcd.wid, lcd.hgt, dat); - for(i=0; i argc) { - fprintf(stderr, "sli_init: %s requires an argument\n", - argv[i]); + if (0 == strcmp (argv[i], "-d") || 0 == strcmp (argv[i], "--device")) { + if (i + 1 > argc) { + fprintf (stderr, "sli_init: %s requires an argument\n", argv[i]); return -1; } - strcpy(device, argv[++i]); - } - else if(0 == strcmp(argv[i], "-s") || - 0 == strcmp(argv[i], "--speed")) - { - if(i + 1 > argc) { - fprintf(stderr, "sli_init: %s requires an argument\n", - argv[i]); + strcpy (device, argv[++i]); + } else if (0 == strcmp (argv[i], "-s") || 0 == strcmp (argv[i], "--speed")) { + if (i + 1 > argc) { + fprintf (stderr, "sli_init: %s requires an argument\n", argv[i]); return -1; } - tmp = atoi(argv[++i]); - if(tmp==1200) speed=B1200; - else if(tmp==2400) speed=B2400; - else if(tmp==9600) speed=B9600; - else if(tmp==19200) speed=B19200; - else if(tmp==38400) speed=B38400; - else if(tmp==57600) speed=B57600; - else if(tmp==115200) speed=B115200; - else { - fprintf(stderr, "sli_init: %s argument must be 1200, 2400, 9600, 19200, 38400, 57600, or 115200. Using default value (19200).\n", - argv[i]); - } - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - printf("LCDproc Wirz SLI LCD driver\n" - "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" - "\t-s\t--speed\t\tSet the communication speed [19200]\n" - "\t-h\t--help\t\tShow this help information\n"); + tmp = atoi (argv[++i]); + if (tmp == 1200) + speed = B1200; + else if (tmp == 2400) + speed = B2400; + else if (tmp == 9600) + speed = B9600; + else if (tmp == 19200) + speed = B19200; + else if (tmp == 38400) + speed = B38400; + else if (tmp == 57600) + speed = B57600; + else if (tmp == 115200) + speed = B115200; + else { + fprintf (stderr, "sli_init: %s argument must be 1200, 2400, 9600, 19200, 38400, 57600, or 115200. Using default value (19200).\n", argv[i]); + } + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + printf ("LCDproc Wirz SLI LCD driver\n" "\t-d\t--device\tSelect the output device to use [/dev/lcd]\n" "\t-s\t--speed\t\tSet the communication speed [19200]\n" "\t-h\t--help\t\tShow this help information\n"); return -1; + } else { + printf ("Invalid parameter: %s\n", argv[i]); } - else - { - printf("Invalid parameter: %s\n", argv[i]); - } - + } - + // Set up io port correctly, and open it... - fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - fprintf(stderr, "sli_init: failed (%s)\n", strerror(errno)); + fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) { + fprintf (stderr, "sli_init: failed (%s)\n", strerror (errno)); return -1; } //else fprintf(stderr, "sli_init: opened device %s\n", device); - tcgetattr(fd, &portset); + tcgetattr (fd, &portset); // This is necessary in Linux, but does not exist in irix. #ifndef IRIX - cfmakeraw(&portset); + cfmakeraw (&portset); #endif - cfsetospeed(&portset, speed); - tcsetattr(fd, TCSANOW, &portset); + cfsetospeed (&portset, speed); + tcsetattr (fd, TCSANOW, &portset); /* Initialize SLI using autobaud detection, and then turn off cursor and clear screen */ - usleep(150000); /* 150ms delay to allow SLI to power on */ - out[0]=13; /* CR for SLI autobaud */ - write(fd, out, 1); - usleep(3000); /* 3ms delay.. wait for it to autobaud */ - out[0]=0x0FE; - out[1]=0x00C; /* No cursor */ - write(fd, out, 2); - out[0]=0x0FE; - out[1]=0x001; /* Clear LCD, not sure if this belongs here */ - write(fd, out, 2); + usleep (150000); /* 150ms delay to allow SLI to power on */ + out[0] = 13; /* CR for SLI autobaud */ + write (fd, out, 1); + usleep (3000); /* 3ms delay.. wait for it to autobaud */ + out[0] = 0x0FE; + out[1] = 0x00C; /* No cursor */ + write (fd, out, 2); + out[0] = 0x0FE; + out[1] = 0x001; /* Clear LCD, not sure if this belongs here */ + write (fd, out, 2); - - if(!driver->framebuf) - { - fprintf(stderr, "sli_init: No frame buffer.\n"); - driver->close(); + + if (!driver->framebuf) { + fprintf (stderr, "sli_init: No frame buffer.\n"); + driver->close (); return -1; } - // Set LCD parameters (I use a 16x2 LCD) -- small but still useful // Its also much cheaper than the higher quality Matrix Orbital modules // Currently, $30 for interface kit and 16x2 non-backlit LCD... @@ -154,46 +143,49 @@ int sli_init(lcd_logical_driver *driver, char *args) // Set the functions the driver supports... - driver->clear = (void *)-1; - driver->string = (void *)-1; - driver->chr = (void *)-1; - driver->vbar = sli_vbar; - driver->init_vbar = sli_init_vbar; - driver->hbar = sli_hbar; - driver->init_hbar = sli_init_hbar; - driver->num = (void *)-1; - driver->init_num = (void *)-1; + driver->clear = (void *) -1; + driver->string = (void *) -1; + driver->chr = (void *) -1; + driver->vbar = sli_vbar; + driver->init_vbar = sli_init_vbar; + driver->hbar = sli_hbar; + driver->init_hbar = sli_init_hbar; + driver->num = (void *) -1; + driver->init_num = (void *) -1; - driver->init = sli_init; - driver->close = sli_close; - driver->flush = sli_flush; - driver->flush_box = sli_flush_box; - driver->contrast = (void *)-1; - driver->backlight = (void *)-1; - driver->set_char = sli_set_char; - driver->icon = sli_icon; + driver->init = sli_init; + driver->close = sli_close; + driver->flush = sli_flush; + driver->flush_box = sli_flush_box; + driver->contrast = (void *) -1; + driver->backlight = (void *) -1; + driver->set_char = sli_set_char; + driver->icon = sli_icon; driver->draw_frame = sli_draw_frame; - driver->getkey = (void *)-1; - + driver->getkey = (void *) -1; + return fd; } /* Clean-up */ -void sli_close() +void +sli_close () { - close(fd); + close (fd); - if(sli->framebuf) free(sli->framebuf); + if (sli->framebuf) + free (sli->framebuf); - sli->framebuf = NULL; + sli->framebuf = NULL; } -void sli_flush() +void +sli_flush () { - sli_draw_frame(lcd.framebuf); + sli_draw_frame (lcd.framebuf); } @@ -201,44 +193,45 @@ void sli_flush() this is bad imho, so I added it.. may remove later speed is not a huge issue though, this isnt a device driver or anything ;) */ -void sli_flush_box(int lft, int top, int rgt, int bot) +void +sli_flush_box (int lft, int top, int rgt, int bot) { - int y; - char out[2]; /* Why does the matrix driver allocate so much here? */ + int y; + char out[2]; /* Why does the matrix driver allocate so much here? */ - /* simple bounds checking */ - if((top>lcd.hgt)|(bot>lcd.hgt)) - return; + /* simple bounds checking */ + if ((top > lcd.hgt) | (bot > lcd.hgt)) + return; + + if ((lft > lcd.wid) | (rgt > lcd.wid)) + return; - if((lft>lcd.wid)|(rgt>lcd.wid)) - return; - // printf("Flush (%i,%i)-(%i,%i)\n", lft, top, rgt, bot); /* I like having hex, everywhere and all the time */ - for(y=top; y<=bot; y++) - { - if(y==1) - sprintf(out, "%c%c", 0x0FE, 0x080+lft); - if(y==2) - sprintf(out, "%c%c", 0x0FE, 0x0C0+lft); - write(fd, out, 0x002); - write(fd, lcd.framebuf+(y*lcd.wid)+lft, rgt-lft+1); - } - - + for (y = top; y <= bot; y++) { + if (y == 1) + sprintf (out, "%c%c", 0x0FE, 0x080 + lft); + if (y == 2) + sprintf (out, "%c%c", 0x0FE, 0x0C0 + lft); + write (fd, out, 0x002); + write (fd, lcd.framebuf + (y * lcd.wid) + lft, rgt - lft + 1); + } + + } ///////////////////////////////////////////////////////////////// // Prints a character on the lcd display, at position (x,y). The // upper-left is (1,1), and the lower right should be (20,4). // -void sli_chr(int x, int y, char c) +void +sli_chr (int x, int y, char c) { - y--; - x--; - - lcd.framebuf[(y*lcd.wid) + x] = c; + y--; + x--; + + lcd.framebuf[(y * lcd.wid) + x] = c; } @@ -255,145 +248,147 @@ void sli_chr(int x, int y, char c) characters, so that you can do both bar types at once.. maybe I will release a new version of the SLI driver that attempts this */ -void sli_init_vbar() +void +sli_init_vbar () { - char a[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - }; - char b[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char c[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char d[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char e[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char f[] = { - 0,0,0,0,0, - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; - char g[] = { - 0,0,0,0,0, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - 1,1,1,1,1, - }; + char a[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + }; + char b[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char c[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char d[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char e[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char f[] = { + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; + char g[] = { + 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + }; - if(custom!=vbar) { - sli_set_char(1,a); - sli_set_char(2,b); - sli_set_char(3,c); - sli_set_char(4,d); - sli_set_char(5,e); - sli_set_char(6,f); - sli_set_char(7,g); - custom=vbar; - } + if (custom != vbar) { + sli_set_char (1, a); + sli_set_char (2, b); + sli_set_char (3, c); + sli_set_char (4, d); + sli_set_char (5, e); + sli_set_char (6, f); + sli_set_char (7, g); + custom = vbar; + } } ///////////////////////////////////////////////////////////////// // Inits horizontal bars... // -void sli_init_hbar() +void +sli_init_hbar () { - char a[] = { - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - 1,0,0,0,0, - }; - char b[] = { - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - 1,1,0,0,0, - }; - char c[] = { - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - 1,1,1,0,0, - }; - char d[] = { - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - 1,1,1,1,0, - }; + char a[] = { + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + }; + char b[] = { + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, + }; + char c[] = { + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, + }; + char d[] = { + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, + }; - if(custom!=hbar) { - sli_set_char(1,a); - sli_set_char(2,b); - sli_set_char(3,c); - sli_set_char(4,d); - custom=hbar; - } + if (custom != hbar) { + sli_set_char (1, a); + sli_set_char (2, b); + sli_set_char (3, c); + sli_set_char (4, d); + custom = hbar; + } } ///////////////////////////////////////////////////////////////// @@ -405,37 +400,41 @@ void sli_init_hbar() since we only have 2 lines anyway this is rather pointless for me to add */ -void sli_vbar(int x, int len) +void +sli_vbar (int x, int len) { - char map[9] = {32, 1, 2, 3, 4, 5, 6, 7, 255 }; - + char map[9] = { 32, 1, 2, 3, 4, 5, 6, 7, 255 }; - int y; - for(y=lcd.hgt; y > 0 && len>0; y--) - { - if(len >= lcd.cellhgt) sli_chr(x, y, 255); - else sli_chr(x, y, map[len]); + + int y; + for (y = lcd.hgt; y > 0 && len > 0; y--) { + if (len >= lcd.cellhgt) + sli_chr (x, y, 255); + else + sli_chr (x, y, map[len]); len -= lcd.cellhgt; - } - + } + } ///////////////////////////////////////////////////////////////// // Draws a horizontal bar to the right. // -void sli_hbar(int x, int y, int len) +void +sli_hbar (int x, int y, int len) { - char map[6] = { 32, 1, 2, 3, 4, 255 }; + char map[6] = { 32, 1, 2, 3, 4, 255 }; + + for (; x <= lcd.wid && len > 0; x++) { + if (len >= lcd.cellwid) + sli_chr (x, y, 255); + else + sli_chr (x, y, map[len]); - for(; x<=lcd.wid && len>0; x++) - { - if(len >= lcd.cellwid) sli_chr(x,y,255); - else sli_chr(x, y, map[len]); - len -= lcd.cellwid; - - } + + } } @@ -447,80 +446,83 @@ void sli_hbar(int x, int y, int len) // // The input is just an array of characters... // -void sli_set_char(int n, char *dat) +void +sli_set_char (int n, char *dat) { - char out[2]; - int row, col; - int letter; + char out[2]; + int row, col; + int letter; - /* SLI also has 8 user definable characters */ - if(n < 0 || n > 7) return; - if(!dat) return; + /* SLI also has 8 user definable characters */ + if (n < 0 || n > 7) + return; + if (!dat) + return; - /* Move cursor to CGRAM */ - out[0]=0x0FE; - out[1]=0x040+8*n; - write(fd, out, 2); + /* Move cursor to CGRAM */ + out[0] = 0x0FE; + out[1] = 0x040 + 8 * n; + write (fd, out, 2); - for(row=0; row 0); - } - letter|=0x020; /* SLI can't accept CR, LF, etc in this character! */ - write(fd, &letter, 1); - } + for (row = 0; row < lcd.cellhgt; row++) { + letter = 0; + for (col = 0; col < lcd.cellwid; col++) { + letter <<= 1; + letter |= (dat[(row * lcd.cellwid) + col] > 0); + } + letter |= 0x020; /* SLI can't accept CR, LF, etc in this character! */ + write (fd, &letter, 1); + } - /* Move cursor back to DDRAM */ - out[0]=0x0FE; - out[1]=0x080; - write(fd, out, 2); + /* Move cursor back to DDRAM */ + out[0] = 0x0FE; + out[1] = 0x080; + write (fd, out, 2); } -void sli_icon(int which, char dest) +void +sli_icon (int which, char dest) { - char icons[3][5*8] = { - { - 1,1,1,1,1, // Empty Heart - 1,0,1,0,1, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,0,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, + char icons[3][5 * 8] = { + { + 1, 1, 1, 1, 1, // Empty Heart + 1, 0, 1, 0, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, - { - 1,1,1,1,1, // Filled Heart - 1,0,1,0,1, - 0,1,0,1,0, - 0,1,1,1,0, - 0,1,1,1,0, - 1,0,1,0,1, - 1,1,0,1,1, - 1,1,1,1,1, - }, - - { - 0,0,0,0,0, // Ellipsis - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 0,0,0,0,0, - 1,0,1,0,1, - }, - - }; - - if(custom==bign) custom=beat; - sli_set_char(dest, &icons[which][0]); + { + 1, 1, 1, 1, 1, // Filled Heart + 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, + 0, 1, 1, 1, 0, + 0, 1, 1, 1, 0, + 1, 0, 1, 0, 1, + 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, + }, + + { + 0, 0, 0, 0, 0, // Ellipsis + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, + }, + + }; + + if (custom == bign) + custom = beat; + sli_set_char (dest, &icons[which][0]); } @@ -529,34 +531,36 @@ void sli_icon(int which, char dest) // // Input is a character array, sized lcd.wid*lcd.hgt // -void sli_draw_frame(char *dat) +void +sli_draw_frame (char *dat) { - char out[2]; /* Again, why does the Matrix driver allocate so much here? */ - int y; - - if(!dat) return; + char out[2]; /* Again, why does the Matrix driver allocate so much here? */ + int y; - /* - out[0]=0x0FE; - out[1]=0x001; - write(fd, out, 2); - */ + if (!dat) + return; - /* Don't update if we have no new data - this keeps me from getting a migraine - (just like those copyleft penguin mints... mmmmmm) */ + /* + out[0]=0x0FE; + out[1]=0x001; + write(fd, out, 2); + */ - // if (!strncmp(dat,lastframe,32)) /* Nothing has changed */ - // return; + /* Don't update if we have no new data + this keeps me from getting a migraine + (just like those copyleft penguin mints... mmmmmm) */ - /* Do the actual refresh */ - out[0]=0x0FE; - out[1]=0x080; - write(fd, out, 2); - write(fd, &dat[0], 16); - usleep(10); - write(fd, &dat[16],15); + // if (!strncmp(dat,lastframe,32)) /* Nothing has changed */ + // return; - // strncpy(lastframe,dat,32); // Update lastframe... + /* Do the actual refresh */ + out[0] = 0x0FE; + out[1] = 0x080; + write (fd, out, 2); + write (fd, &dat[0], 16); + usleep (10); + write (fd, &dat[16], 15); + + // strncpy(lastframe,dat,32); // Update lastframe... } diff --git a/server/drivers/wirz-sli.h b/server/drivers/wirz-sli.h index 5469f50..c647b63 100644 --- a/server/drivers/wirz-sli.h +++ b/server/drivers/wirz-sli.h @@ -10,23 +10,23 @@ extern lcd_logical_driver *sli; -int sli_init(lcd_logical_driver *driver, char *device); -void sli_close(); -void sli_flush(); -void sli_flush_box(int lft, int top, int rgt, int bot); -void sli_chr(int x, int y, char c) ; -int sli_contrast(int contrast); -void sli_backlight(int on); -void sli_init_vbar(); -void sli_init_hbar(); -void sli_vbar(int x, int len); -void sli_hbar(int x, int y, int len); -void sli_init_num(); -void sli_num(int x, int num); -void sli_set_char(int n, char *dat); -void sli_icon(int which, char dest); -void sli_draw_frame(char *dat); -char sli_getkey(); +int sli_init (lcd_logical_driver * driver, char *device); +void sli_close (); +void sli_flush (); +void sli_flush_box (int lft, int top, int rgt, int bot); +void sli_chr (int x, int y, char c); +int sli_contrast (int contrast); +void sli_backlight (int on); +void sli_init_vbar (); +void sli_init_hbar (); +void sli_vbar (int x, int len); +void sli_hbar (int x, int y, int len); +void sli_init_num (); +void sli_num (int x, int num); +void sli_set_char (int n, char *dat); +void sli_icon (int which, char dest); +void sli_draw_frame (char *dat); +char sli_getkey (); diff --git a/server/input.c b/server/input.c index 720a683..a2bd763 100644 --- a/server/input.c +++ b/server/input.c @@ -41,53 +41,48 @@ #include "input.h" -int server_input(int key); +int server_input (int key); // FIXME! The server tends to crash when "E" is pressed.. (?!) // (but only when the joystick driver is the last one on the list...) // Checks for keypad input, and dispatches it -int handle_input() +int +handle_input () { char str[256]; int key; screen *s; client *c; - - key = lcd.getkey(); - if (!key) return 0; + key = lcd.getkey (); - debug("handle_input(%c)\n", (char)key); - - if(key) - { - s = screenlist_current(); - if(s) - { + if (!key) + return 0; + + debug ("handle_input(%c)\n", (char) key); + + if (key) { + s = screenlist_current (); + if (s) { c = s->parent; - if(c) - { + if (c) { // TODO: Interpret and translate keys! // If the client should have this keypress... // Send keypress to client - if(key >= 'E' && key <= 'Z') - { + if (key >= 'E' && key <= 'Z') { // TODO: Implement client "acceptable key" lists - sprintf(str, "key %c\n", key); - sock_send_string(c->sock, str); + sprintf (str, "key %c\n", key); + sock_send_string (c->sock, str); } // Otherwise, tell the server about it. - else - { - server_input(key); + else { + server_input (key); } - } - else - { + } else { // If no parent, it means we're on the server screen. // so, the server gets all keypresses there. - server_input(key); + server_input (key); } } } @@ -97,34 +92,33 @@ int handle_input() -int server_input(int key) +int +server_input (int key) { - debug("server_input(%c)\n", (char)key); - - switch(key) - { - case 'A': - if(screenlist_action == SCR_HOLD) - screenlist_action = 0; - else - screenlist_action = SCR_HOLD; - break; - case 'B': - screenlist_action = SCR_BACK; - screenlist_prev(); - break; - case 'C': - screenlist_action = SCR_SKIP; - screenlist_next(); - break; - case 'D': - debug("got the menu key!\n"); - server_menu(); - break; - default: - debug("server_input: Invalid key \"%c\" (%i)\n", - (char)key, key); - break; + debug ("server_input(%c)\n", (char) key); + + switch (key) { + case 'A': + if (screenlist_action == SCR_HOLD) + screenlist_action = 0; + else + screenlist_action = SCR_HOLD; + break; + case 'B': + screenlist_action = SCR_BACK; + screenlist_prev (); + break; + case 'C': + screenlist_action = SCR_SKIP; + screenlist_next (); + break; + case 'D': + debug ("got the menu key!\n"); + server_menu (); + break; + default: + debug ("server_input: Invalid key \"%c\" (%i)\n", (char) key, key); + break; } return 0; diff --git a/server/input.h b/server/input.h index 95caa03..ee802e4 100644 --- a/server/input.h +++ b/server/input.h @@ -3,7 +3,7 @@ // Accepts and uses keypad input while displaying screens... -int handle_input(); +int handle_input (); #endif diff --git a/server/main.c b/server/main.c index 0e3224b..57f5334 100644 --- a/server/main.c +++ b/server/main.c @@ -54,8 +54,7 @@ static screen_size sizes[] = // This is currently only a list of available arguments, but doesn't // really *do* anything. It just helps to figure out which parameters // go to the server, and which ones go to individual drivers... -static parameter args[] = -{ +static parameter args[] = { {"-h", "--help"}, {"-d", "--driver"}, {"-t", "--type"}, @@ -65,150 +64,127 @@ static parameter args[] = }; -void exit_program(int val); -void HelpScreen(); +void exit_program (int val); +void HelpScreen (); -int main(int argc, char **argv) +int +main (int argc, char **argv) { // TODO: Use a config file! //char cfgfile[256] = "/etc/LCDd.cf"; int i, err, tmp; - int daemon_mode=1; - int disable_server_screen=1; + int daemon_mode = 1; + int disable_server_screen = 1; int child; screen *s = NULL; - char *str, *ing; // strings for commandline handling + char *str, *ing; // strings for commandline handling // screen_size *size = &sizes[0]; // No longer needed - - + + // Ctrl-C will cause a clean exit... - signal(SIGINT, exit_program); + signal (SIGINT, exit_program); // and "kill"... - signal(SIGTERM, exit_program); + signal (SIGTERM, exit_program); // and "kill -HUP" (hangup)... - signal(SIGHUP, exit_program); + signal (SIGHUP, exit_program); // and just in case, "kill -KILL" (which cannot be trapped; but oh well) - signal(SIGKILL, exit_program); + signal (SIGKILL, exit_program); // If no paramaters given, give the help screen. - if(argc == 1) HelpScreen(); + if (argc == 1) + HelpScreen (); // Don't spawn a child if we're using the curses driver - for(i=1; i i+1) - { - int j, skip=0; - for(j=1; args[j].lg; j++) // check each option except "help" - if(! strcmp(argv[i+1], args[j].sh) || - ! strcmp(argv[i+1], args[j].lg)) skip=1; + if (argc > i + 1) { + int j, skip = 0; + for (j = 1; args[j].lg; j++) // check each option except "help" + if (!strcmp (argv[i + 1], args[j].sh) || !strcmp (argv[i + 1], args[j].lg)) + skip = 1; - if(! skip) - { + if (!skip) { ing = argv[++i]; } //else i++; } - err = lcd_add_driver(str, ing); - if(err <= 0) - { - printf("Error loading driver %s. Continuing anyway...\n", - str); + err = lcd_add_driver (str, ing); + if (err <= 0) { + printf ("Error loading driver %s. Continuing anyway...\n", str); } - if((err > 0) && (0 == strcmp(str, "curses"))) daemon_mode=0; - } - else if(0 == strcmp(argv[i], "-h") || - 0 == strcmp(argv[i], "--help")) - { - HelpScreen(); + if ((err > 0) && (0 == strcmp (str, "curses"))) + daemon_mode = 0; + } else if (0 == strcmp (argv[i], "-h") || 0 == strcmp (argv[i], "--help")) { + HelpScreen (); } // Redundant, but it prevents errors... - else if(0 == strcmp(argv[i], "-f") || - 0 == strcmp(argv[i], "--foreground")) - { - daemon_mode = 0; - } - else if(0 == strcmp(argv[i], "-b") || - 0 == strcmp(argv[i], "--backlight")) - { - if(argc <= i+1) HelpScreen(); + else if (0 == strcmp (argv[i], "-f") || 0 == strcmp (argv[i], "--foreground")) { + daemon_mode = 0; + } else if (0 == strcmp (argv[i], "-b") || 0 == strcmp (argv[i], "--backlight")) { + if (argc <= i + 1) + HelpScreen (); str = argv[++i]; - if(0 == strcmp(str, "off")) + if (0 == strcmp (str, "off")) backlight_state = backlight = BACKLIGHT_OFF; - else if(0 == strcmp(str, "on")) + else if (0 == strcmp (str, "on")) backlight_state = backlight = BACKLIGHT_ON; - else if(0 == strcmp(str, "open")) + else if (0 == strcmp (str, "open")) backlight = BACKLIGHT_OPEN; - else HelpScreen(); - } - else if(0 == strcmp(argv[i], "-t") || - 0 == strcmp(argv[i], "--type")) - { - if(i + 1 > argc) - HelpScreen(); else - { + HelpScreen (); + } else if (0 == strcmp (argv[i], "-t") || 0 == strcmp (argv[i], "--type")) { + if (i + 1 > argc) + HelpScreen (); + else { int wid, hgt; i++; - sscanf(argv[i], "%ix%i", &wid, &hgt); - if(wid>80 || wid<16 || hgt>25 || hgt<2) - { - fprintf(stderr, - "LCDd: Invalid lcd size \"%s\". Using 20x4.\n", - argv[i]); + sscanf (argv[i], "%ix%i", &wid, &hgt); + if (wid > 80 || wid < 16 || hgt > 25 || hgt < 2) { + fprintf (stderr, "LCDd: Invalid lcd size \"%s\". Using 20x4.\n", argv[i]); lcd.wid = 20; lcd.hgt = 4; - } - else - { + } else { lcd.wid = wid; lcd.hgt = hgt; } - + /* no longer needed int j=0, valid=0; i++; @@ -228,70 +204,57 @@ int main(int argc, char **argv) } */ } - } - else if(0 == strcmp(argv[i], "-i") || - 0 == strcmp(argv[i], "--serverinfo")) - { - if(i + 1 > argc) - HelpScreen(); - else - { + } else if (0 == strcmp (argv[i], "-i") || 0 == strcmp (argv[i], "--serverinfo")) { + if (i + 1 > argc) + HelpScreen (); + else { i++; - if(0 == strcmp(argv[i], "off")) disable_server_screen = 1; - if(0 == strcmp(argv[i], "on")) disable_server_screen = 0; + if (0 == strcmp (argv[i], "off")) + disable_server_screen = 1; + if (0 == strcmp (argv[i], "on")) + disable_server_screen = 0; } - } - else - { + } else { // otherwise... Get help! - printf("Invalid parameter: %s\n", argv[i]); - HelpScreen(); + printf ("Invalid parameter: %s\n", argv[i]); + HelpScreen (); } } - + // Now init a bunch of required stuff... - if(sock_create_server() <= 0) - { - printf("Error opening socket.\n"); + if (sock_create_server () <= 0) { + printf ("Error opening socket.\n"); return 1; } - if(client_init() < 0) - { - printf("Error initializing client list\n"); - return 1; - } - - if(screenlist_init() < 0) - { - printf("Error initializing screen list\n"); + if (client_init () < 0) { + printf ("Error initializing client list\n"); return 1; } + if (screenlist_init () < 0) { + printf ("Error initializing screen list\n"); + return 1; + } // Make sure the server screen shows up every once in a while.. - if(server_screen_init() < 0) - { - printf("Error initializing server screens\n"); + if (server_screen_init () < 0) { + printf ("Error initializing server screens\n"); return 1; - } - else if(disable_server_screen) - { + } else if (disable_server_screen) { server_screen->priority = 256; } - - + // Main loop... - while(1) - { - sock_poll_clients(); - parse_all_client_messages(); - handle_input(); + while (1) { + sock_poll_clients (); + parse_all_client_messages (); + handle_input (); // TODO: Move this code to screenlist.c... // ... it should just say "handle_screens();" @@ -299,73 +262,76 @@ int main(int argc, char **argv) timer++; // this line's here because s was getting overwritten at one time... //s = screenlist_current(); - if(s && (timer >= s->duration)) - { - screenlist_next(); + if (s && (timer >= s->duration)) { + screenlist_next (); } // Just in case it gets out of hand... - if(timer >= 0x10000) timer = 0; - update_server_screen(timer); - s = screenlist_current(); - + if (timer >= 0x10000) + timer = 0; + update_server_screen (timer); + s = screenlist_current (); + // render something here... - if(s) draw_screen(s, timer); - else no_screen_screen(timer); - - usleep(TIME_UNIT); + if (s) + draw_screen (s, timer); + else + no_screen_screen (timer); + + usleep (TIME_UNIT); } // Quit! - exit_program(0); - + exit_program (0); + return 0; } -void exit_program(int val) +void +exit_program (int val) { // TODO: These things shouldn't be so interdependent. The order // things are shut down in shouldn't matter... - + // Say goodbye! - goodbye_screen(); + goodbye_screen (); // Can go anywhere... - lcd_shutdown(); + lcd_shutdown (); // Must come before screenlist_shutdown - client_shutdown(); + client_shutdown (); // Must come after client_shutdown - screenlist_shutdown(); + screenlist_shutdown (); // Should come after client_shutdown - sock_close_all(); - - exit(0); + sock_close_all (); + + exit (0); } -void HelpScreen() +void +HelpScreen () { - printf("LCDproc server daemon, %s\n", version); - printf("Copyright (c) 1999 Scott Scriven, William Ferrell, and misc contributors\n"); - printf("This program is freely redistributable under the terms of the GNU Public License\n\n"); - printf("Usage: LCDd [options]\n"); - printf("\tOptions in []'s are optional. Available options are:\n"); - printf("\t-h\t--help\n\t\t\tDisplay this help screen\n"); - printf("\t-t\t--type \n\t\t\tSelect an LCD size (20x4, 16x2, etc...)\n"); - printf("\t-d\t--driver [args]\n\t\t\tAdd a driver to use:\n"); - printf("\t\t\tCFontz, curses, HD44780, irmanin, joy,\n\t\t\tMtxOrb, text\n"); - printf("\t\t\t(args will be passed to the driver for init)\n"); - printf("\t-f\t--foreground\n\t\t\tRun in the foreground (no daemon)\n"); - printf("\t-b\t--backlight \n\t\t\tSet backlight mode (on, off, open)\n"); - printf("\t-i\t--serverinfo off\n\t\t\tSet the server screen to low priority\n"); - printf("\n"); - printf("\tUse \"man LCDd\" for more info.\n"); - printf("\tHelp on each driver's parameters are obtained upon request:\n\t\t\"LCDd -d driver --help\"\n"); - printf("Example:\n"); - printf("\tLCDd -d MtxOrb \"--device /dev/lcd --contrast 200\" -d joy\n"); - printf("\n"); - exit(0); + printf ("LCDproc server daemon, %s\n", version); + printf ("Copyright (c) 1999 Scott Scriven, William Ferrell, and misc contributors\n"); + printf ("This program is freely redistributable under the terms of the GNU Public License\n\n"); + printf ("Usage: LCDd [options]\n"); + printf ("\tOptions in []'s are optional. Available options are:\n"); + printf ("\t-h\t--help\n\t\t\tDisplay this help screen\n"); + printf ("\t-t\t--type \n\t\t\tSelect an LCD size (20x4, 16x2, etc...)\n"); + printf ("\t-d\t--driver [args]\n\t\t\tAdd a driver to use:\n"); + printf ("\t\t\tCFontz, curses, HD44780, irmanin, joy,\n\t\t\tMtxOrb, text\n"); + printf ("\t\t\t(args will be passed to the driver for init)\n"); + printf ("\t-f\t--foreground\n\t\t\tRun in the foreground (no daemon)\n"); + printf ("\t-b\t--backlight \n\t\t\tSet backlight mode (on, off, open)\n"); + printf ("\t-i\t--serverinfo off\n\t\t\tSet the server screen to low priority\n"); + printf ("\n"); + printf ("\tUse \"man LCDd\" for more info.\n"); + printf ("\tHelp on each driver's parameters are obtained upon request:\n\t\t\"LCDd -d driver --help\"\n"); + printf ("Example:\n"); + printf ("\tLCDd -d MtxOrb \"--device /dev/lcd --contrast 200\" -d joy\n"); + printf ("\n"); + exit (0); } - diff --git a/server/main.h b/server/main.h index 0e80ab7..472205d 100644 --- a/server/main.h +++ b/server/main.h @@ -3,7 +3,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" -#endif +#endif /* contains a few things that other parts of the program might want @@ -14,22 +14,20 @@ extern char *version; extern char *protocol_version; extern char *build_date; -void exit_program(int val); +void exit_program (int val); // 1/8th second is a single time unit... #define TIME_UNIT 125000 // But I plan to double the framerate soon, or make it variable... //#define TIME_UNIT (125000/2) -typedef struct screen_size -{ - char * size; - int wid, hgt; +typedef struct screen_size { + char *size; + int wid, hgt; } screen_size; -typedef struct parameter -{ - char * sh, * lg; // short and long versions +typedef struct parameter { + char *sh, *lg; // short and long versions } parameter; diff --git a/server/menu.c b/server/menu.c index 8567ffa..de041d4 100644 --- a/server/menu.c +++ b/server/menu.c @@ -29,26 +29,27 @@ // FIXME: Implement this where it is supposed to be... #include -void framedelay() +void +framedelay () { - sock_poll_clients(); - parse_all_client_messages(); + sock_poll_clients (); + parse_all_client_messages (); - usleep(TIME_UNIT); + usleep (TIME_UNIT); } -static void draw_heartbeat() +static void +draw_heartbeat () { static int timer = 0; - - if(heartbeat) - { - // Set this to pulsate like a real heart beat... - // (binary is fun... :) - lcd.icon(!((timer+4)&5), 0); - lcd.chr(lcd.wid, 1, 0); + + if (heartbeat) { + // Set this to pulsate like a real heart beat... + // (binary is fun... :) + lcd.icon (!((timer + 4) & 5), 0); + lcd.chr (lcd.wid, 1, 0); } - lcd.flush(); + lcd.flush (); timer++; timer &= 0x0f; @@ -58,298 +59,299 @@ static int PAD = 255; -typedef struct menu_info -{ - int selected; - int length; +typedef struct menu_info { + int selected; + int length; } menu_info; -static int draw_menu(Menu menu, menu_info *info); -static int fill_menu_info(Menu menu, menu_info *info); -static int menu_handle_action(menu_item *item); +static int draw_menu (Menu menu, menu_info * info); +static int fill_menu_info (Menu menu, menu_info * info); +static int menu_handle_action (menu_item * item); -static int slid_func(menu_item *item); +static int slid_func (menu_item * item); -int do_menu(Menu menu) +int +do_menu (Menu menu) { - menu_info info; - int key=0; - int status=MENU_OK; - int done=0; + menu_info info; + int key = 0; + int status = MENU_OK; + int done = 0; - int (*func)(); - int (*readfunc)(int); - - - if(!menu) return MENU_ERROR; - - fill_menu_info(menu, &info); + int (*func) (); + int (*readfunc) (int); - while(!done) - { - // Keep the cursor off titles... (?) - while(menu[info.selected].type == TYPE_TITL) - { - info.selected++; - // If the title is the last thing in the menu... - if(!menu[info.selected].text) info.selected -= 2; - } - - - draw_menu(menu, &info); + if (!menu) + return MENU_ERROR; - // FIXME: This should use a better keypress interface, which - // FIXME: handles things according to keybindings... + fill_menu_info (menu, &info); - for(key = lcd.getkey(); key==0; key = lcd.getkey()) - { - // sleep for 1/8th second... - framedelay(); - // do the heartbeat... - draw_heartbeat(); - // Check for client input... - } - - - // Handle the key according to the keybindings... - switch(key) - { - case 'D': done=1; break; - case 'B': if(info.selected > 0) info.selected--; - while(menu[info.selected].type == TYPE_TITL) - { - if(info.selected > 0) - info.selected--; - else break; - } - break; - case 'C': if(menu[info.selected+1].text) info.selected++; break; - case 'A': - switch(menu[info.selected].type) - { - case TYPE_MENU: status = do_menu(menu[info.selected].data); - break; - case TYPE_FUNC: - func = menu[info.selected].data; - if(func) - status = func(); - break; - case TYPE_CHEK: - readfunc = menu[info.selected].data; - if(readfunc) - status = readfunc(MENU_CHECK); - status &= 0xffff0000; - break; - case TYPE_SLID: - func = menu[info.selected].data; - if(func) - status = slid_func(&menu[info.selected]); - break; - default: - break; - } - - switch(status) - { - case MENU_OK: - break; - case MENU_CLOSE: - return MENU_OK; - case MENU_QUIT: - return MENU_QUIT; -// case MENU_KILL: -// return MENU_KILL; - case MENU_ERROR: - return MENU_ERROR; - } - - // status = menu_handle_action(&menu[info.selected]); - // TODO: It should now do special stuff for "mover" widgets, - // TODO: and handle the return code appropriately. - break; - default: break; - } - - } - - return status; - -} -static int draw_menu(Menu menu, menu_info *info) -{ - int i; - int x=1, y=1; - int top=0, bottom=0; + while (!done) { + // Keep the cursor off titles... (?) + while (menu[info.selected].type == TYPE_TITL) { + info.selected++; + // If the title is the last thing in the menu... + if (!menu[info.selected].text) + info.selected -= 2; + } - int (*readfunc)(int); - - // these should maybe be removed: - int wid=lcd.wid, hgt=lcd.hgt; - - if(!menu) return MENU_ERROR; + draw_menu (menu, &info); - lcd.clear(); + // FIXME: This should use a better keypress interface, which + // FIXME: handles things according to keybindings... - - // Scroll down until the selected item is centered, if possible... - top = info->selected - (hgt/2); - if(top<0) top=0; - bottom = top+hgt; - if(bottom > info->length) bottom=info->length; - top = bottom-hgt; - if(top<0) top=0; - - + for (key = lcd.getkey (); key == 0; key = lcd.getkey ()) { + // sleep for 1/8th second... + framedelay (); + // do the heartbeat... + draw_heartbeat (); + // Check for client input... + } - // Draw all visible items... - for(i=top; iselected) lcd.chr(2,y,'>'); - - switch(menu[i].type) - { - case TYPE_TITL: - lcd.chr(1,y,PAD); - lcd.chr(2,y,PAD); - lcd.string(4,y,menu[i].text); - for(x=strlen(menu[i].text)+5; x <= wid; x++) - lcd.chr(x,y,PAD); - break; - case TYPE_MENU: - lcd.string(3,y,menu[i].text); - lcd.chr(wid,y,'>'); - break; - case TYPE_FUNC: - lcd.string(3,y,menu[i].text); - break; - case TYPE_CHEK: - if(menu[i].data) - { - readfunc = menu[i].data; - if(readfunc(MENU_READ)) - lcd.chr(wid,y,'Y'); - else - lcd.chr(wid,y,'N'); - } - lcd.string(3,y,menu[i].text); - break; - case TYPE_SLID: - lcd.string(3,y,menu[i].text); - break; - case TYPE_MOVE: - break; + + // Handle the key according to the keybindings... + switch (key) { + case 'D': + done = 1; + break; + case 'B': + if (info.selected > 0) + info.selected--; + while (menu[info.selected].type == TYPE_TITL) { + if (info.selected > 0) + info.selected--; + else + break; + } + break; + case 'C': + if (menu[info.selected + 1].text) + info.selected++; + break; + case 'A': + switch (menu[info.selected].type) { + case TYPE_MENU: + status = do_menu (menu[info.selected].data); + break; + case TYPE_FUNC: + func = menu[info.selected].data; + if (func) + status = func (); + break; + case TYPE_CHEK: + readfunc = menu[info.selected].data; + if (readfunc) + status = readfunc (MENU_CHECK); + status &= 0xffff0000; + break; + case TYPE_SLID: + func = menu[info.selected].data; + if (func) + status = slid_func (&menu[info.selected]); + break; + default: + break; + } + + switch (status) { + case MENU_OK: + break; + case MENU_CLOSE: + return MENU_OK; + case MENU_QUIT: + return MENU_QUIT; +// case MENU_KILL: +// return MENU_KILL; + case MENU_ERROR: + return MENU_ERROR; + } + + // status = menu_handle_action(&menu[info.selected]); + // TODO: It should now do special stuff for "mover" widgets, + // TODO: and handle the return code appropriately. + break; default: - break; - } - } + break; + } - if(top != 0) - lcd.chr(1,1,'^'); - if(bottom < info->length) - lcd.chr(1,hgt,'v'); - - - draw_heartbeat(); - //lcd.flush(); + } + + return status; - return 0; } - -static int fill_menu_info(Menu menu, menu_info *info) +static int +draw_menu (Menu menu, menu_info * info) { - int i; + int i; + int x = 1, y = 1; + int top = 0, bottom = 0; - info->selected = 0; - - // count the entries in the menu - for(i=0; menu[i].text; i++); - - info->length = i; - - return 0; - + int (*readfunc) (int); + + // these should maybe be removed: + int wid = lcd.wid, hgt = lcd.hgt; + + + if (!menu) + return MENU_ERROR; + + lcd.clear (); + + + // Scroll down until the selected item is centered, if possible... + top = info->selected - (hgt / 2); + if (top < 0) + top = 0; + bottom = top + hgt; + if (bottom > info->length) + bottom = info->length; + top = bottom - hgt; + if (top < 0) + top = 0; + + + + // Draw all visible items... + for (i = top; i < bottom; i++, y++) { + if (i == info->selected) + lcd.chr (2, y, '>'); + + switch (menu[i].type) { + case TYPE_TITL: + lcd.chr (1, y, PAD); + lcd.chr (2, y, PAD); + lcd.string (4, y, menu[i].text); + for (x = strlen (menu[i].text) + 5; x <= wid; x++) + lcd.chr (x, y, PAD); + break; + case TYPE_MENU: + lcd.string (3, y, menu[i].text); + lcd.chr (wid, y, '>'); + break; + case TYPE_FUNC: + lcd.string (3, y, menu[i].text); + break; + case TYPE_CHEK: + if (menu[i].data) { + readfunc = menu[i].data; + if (readfunc (MENU_READ)) + lcd.chr (wid, y, 'Y'); + else + lcd.chr (wid, y, 'N'); + } + lcd.string (3, y, menu[i].text); + break; + case TYPE_SLID: + lcd.string (3, y, menu[i].text); + break; + case TYPE_MOVE: + break; + default: + break; + } + } + + if (top != 0) + lcd.chr (1, 1, '^'); + if (bottom < info->length) + lcd.chr (1, hgt, 'v'); + + + draw_heartbeat (); + //lcd.flush(); + + return 0; } -static int menu_handle_action(menu_item *item) + +static int +fill_menu_info (Menu menu, menu_info * info) { - return MENU_OK; + int i; + + info->selected = 0; + + // count the entries in the menu + for (i = 0; menu[i].text; i++); + + info->length = i; + + return 0; + +} + +static int +menu_handle_action (menu_item * item) +{ + return MENU_OK; } -static int slid_func(menu_item *item) +static int +slid_func (menu_item * item) { char str[16]; int key = 0; int value = 0; - int x, y=1; - int (*readfunc)(int); - + int x, y = 1; + int (*readfunc) (int); + readfunc = item->data; - lcd.init_hbar(); - - while(key != 'A' && key != 'D') - { + lcd.init_hbar (); + + while (key != 'A' && key != 'D') { // Draw the title... - lcd.clear(); - lcd.chr(1,y,PAD); - lcd.chr(2,y,PAD); - lcd.string(4,y,item->text); - for(x=strlen(item->text)+5; x <= lcd.wid; x++) - lcd.chr(x,y,PAD); + lcd.clear (); + lcd.chr (1, y, PAD); + lcd.chr (2, y, PAD); + lcd.string (4, y, item->text); + for (x = strlen (item->text) + 5; x <= lcd.wid; x++) + lcd.chr (x, y, PAD); // Draw the slider now... - value = readfunc(MENU_READ); - if(value < 0 || value >= MENU_CLOSE) + value = readfunc (MENU_READ); + if (value < 0 || value >= MENU_CLOSE) return value; - sprintf(str, "%i", value); - if(lcd.hgt >= 4) - { - lcd.string(8, 4, str); + sprintf (str, "%i", value); + if (lcd.hgt >= 4) { + lcd.string (8, 4, str); value = (lcd.wid * lcd.cellwid * value / 256); - lcd.hbar(1, 3, value); - } - else - { - lcd.string(17, 2, str); - value = ((lcd.wid-4) * lcd.cellwid * value / 256); - lcd.hbar(1, 2, value); + lcd.hbar (1, 3, value); + } else { + lcd.string (17, 2, str); + value = ((lcd.wid - 4) * lcd.cellwid * value / 256); + lcd.hbar (1, 2, value); } //lcd.flush(); - - for(key = lcd.getkey(); key==0; key = lcd.getkey()) - { + + for (key = lcd.getkey (); key == 0; key = lcd.getkey ()) { // do the heartbeat... - draw_heartbeat(); + draw_heartbeat (); // sleep for 1/8th second... - framedelay(); + framedelay (); // Check for client input... } - - switch(key) - { - case 'B': - value = readfunc(MENU_MINUS); - break; - case 'C': - value = readfunc(MENU_PLUS); - break; + + switch (key) { + case 'B': + value = readfunc (MENU_MINUS); + break; + case 'C': + value = readfunc (MENU_PLUS); + break; } - if(value >= MENU_CLOSE - || value < 0 - || key == 'A' - || key == 'D') + if (value >= MENU_CLOSE || value < 0 || key == 'A' || key == 'D') return value; } - + return MENU_OK; } - diff --git a/server/menu.h b/server/menu.h index 31f2a21..2ee7c04 100644 --- a/server/menu.h +++ b/server/menu.h @@ -121,23 +121,22 @@ and sliders should return 0-255. // User actions, sent to item-handling functions as input. #define MENU_SELECT 1 #define MENU_CHECK 2 -#define MENU_PLUS 3 -#define MENU_MINUS 4 +#define MENU_PLUS 3 +#define MENU_MINUS 4 #define MENU_READ 5 -typedef struct menu_item -{ - char *text; - int type; - void *data; +typedef struct menu_item { + char *text; + int type; + void *data; } menu_item; #define Menu menu_item * -int do_menu(Menu menu); +int do_menu (Menu menu); #endif diff --git a/server/menus.c b/server/menus.c index e99beae..ba245bb 100644 --- a/server/menus.c +++ b/server/menus.c @@ -25,71 +25,71 @@ #include "serverscreens.h" -int Shutdown_func(); -int System_halt_func(); -int Reboot_func(); -int Close_func(); -int OK_func(); -int Time24_func(int input); -int Heartbeat_func(int input); -int Backlight_func(int input); -int Server_screen_func(int input); -int Contrast_func(int input); -int Backlight_Brightness_func(int input); -int Backlight_Off_Brightness_func(int input); -int Backlight_Off_func(); -int Backlight_On_func(); -int Backlight_Open_func(); +int Shutdown_func (); +int System_halt_func (); +int Reboot_func (); +int Close_func (); +int OK_func (); +int Time24_func (int input); +int Heartbeat_func (int input); +int Backlight_func (int input); +int Server_screen_func (int input); +int Contrast_func (int input); +int Backlight_Brightness_func (int input); +int Backlight_Off_Brightness_func (int input); +int Backlight_Off_func (); +int Backlight_On_func (); +int Backlight_Open_func (); menu_item main_menu[] = { - { "LCDproc", 0, 0 },// Title - { "Options", TYPE_MENU, (void *)options_menu}, - { "Screens", TYPE_MENU, (void *)screens_menu}, - { "Shutdown", TYPE_MENU, (void *)shutdown_menu }, - { 0, 0, 0 }, - + {"LCDproc", 0, 0}, // Title + {"Options", TYPE_MENU, (void *) options_menu}, + {"Screens", TYPE_MENU, (void *) screens_menu}, + {"Shutdown", TYPE_MENU, (void *) shutdown_menu}, + {0, 0, 0}, + }; menu_item options_menu[] = { - { "OPTIONS", TYPE_TITL, 0}, // Title -// "24-hour Time", TYPE_CHEK, (void *)Time24_func, - { "Contrast...", TYPE_SLID, (void *)Contrast_func}, - { "Backlight", TYPE_MENU, (void *)Backlight_menu}, - { "Heartbeat", TYPE_CHEK, (void *)Heartbeat_func}, + {"OPTIONS", TYPE_TITL, 0}, // Title +// "24-hour Time", TYPE_CHEK, (void *)Time24_func, + {"Contrast...", TYPE_SLID, (void *) Contrast_func}, + {"Backlight", TYPE_MENU, (void *) Backlight_menu}, + {"Heartbeat", TYPE_CHEK, (void *) Heartbeat_func}, // { "Backlight...", TYPE_SLID, (void *)Backlight_func}, -// "OK", TYPE_FUNC, (void *)OK_func, -// "Close Menu", TYPE_FUNC, (void *)Close_func, -// "Exit Program", TYPE_FUNC, (void *)Shutdown_func, -// "Another Title",TYPE_TITL, 0, +// "OK", TYPE_FUNC, (void *)OK_func, +// "Close Menu", TYPE_FUNC, (void *)Close_func, +// "Exit Program", TYPE_FUNC, (void *)Shutdown_func, +// "Another Title",TYPE_TITL, 0, // "Main menu?", TYPE_MENU, (void *)main_menu, // "Nothing!", TYPE_FUNC, 0, - { 0, 0, 0}, + {0, 0, 0}, }; menu_item screens_menu[] = { - { "SCREENS", TYPE_TITL, 0}, // Title - { "Server Scr",TYPE_CHEK, (void *)Server_screen_func}, - { 0, 0, 0}, + {"SCREENS", TYPE_TITL, 0}, // Title + {"Server Scr", TYPE_CHEK, (void *) Server_screen_func}, + {0, 0, 0}, }; menu_item shutdown_menu[] = { - { "Shut Down...", TYPE_TITL, 0}, // Title - { "Kill LCDproc", TYPE_FUNC, (void *)Shutdown_func}, - { "System halt", TYPE_FUNC, (void *)System_halt_func}, - { "Reboot", TYPE_FUNC, (void *)Reboot_func}, - { 0, 0, 0}, + {"Shut Down...", TYPE_TITL, 0}, // Title + {"Kill LCDproc", TYPE_FUNC, (void *) Shutdown_func}, + {"System halt", TYPE_FUNC, (void *) System_halt_func}, + {"Reboot", TYPE_FUNC, (void *) Reboot_func}, + {0, 0, 0}, }; menu_item Backlight_menu[] = { - { "BACKLIGHT MENU", TYPE_TITL, 0}, // Title - { "Brightness...", TYPE_SLID, (void *)Backlight_Brightness_func}, - { "\"Off\" Brightness", TYPE_SLID, (void *)Backlight_Off_Brightness_func}, - { "Backlight Mode:", TYPE_FUNC, 0}, // Label - { " - Off", TYPE_FUNC, Backlight_Off_func}, - { " - On", TYPE_FUNC, Backlight_On_func}, - { " - Open", TYPE_FUNC, Backlight_Open_func}, - { 0, 0, 0}, + {"BACKLIGHT MENU", TYPE_TITL, 0}, // Title + {"Brightness...", TYPE_SLID, (void *) Backlight_Brightness_func}, + {"\"Off\" Brightness", TYPE_SLID, (void *) Backlight_Off_Brightness_func}, + {"Backlight Mode:", TYPE_FUNC, 0}, // Label + {" - Off", TYPE_FUNC, Backlight_Off_func}, + {" - On", TYPE_FUNC, Backlight_On_func}, + {" - Open", TYPE_FUNC, Backlight_Open_func}, + {0, 0, 0}, }; @@ -99,241 +99,279 @@ menu_item Backlight_menu[] = { // // Exits the program. -int Shutdown_func() +int +Shutdown_func () { - exit_program(0); - + exit_program (0); + return MENU_KILL; } // Shuts down the system, if possible -int System_halt_func() +int +System_halt_func () { int err; uid_t id; - id = geteuid(); - - err = system("init 0"); + id = geteuid (); - if(err < 0) return MENU_KILL; - if(err == 127) return MENU_KILL; + err = system ("init 0"); + + if (err < 0) + return MENU_KILL; + if (err == 127) + return MENU_KILL; // If we're root, exit - if(id == 0) exit_program(0); + if (id == 0) + exit_program (0); // Otherwise, assume shutdown will fail; and show more stats. return MENU_KILL; } // Shuts down the system and restarts it -int Reboot_func() +int +Reboot_func () { int err; uid_t id; - id = geteuid(); - - err = system("init 6"); + id = geteuid (); - if(err < 0) return MENU_KILL; - if(err == 127) return MENU_KILL; + err = system ("init 6"); + + if (err < 0) + return MENU_KILL; + if (err == 127) + return MENU_KILL; // If we're root, exit - if(id == 0) exit_program(0); + if (id == 0) + exit_program (0); // Otherwise, assume shutdown will fail; and show more stats. return MENU_KILL; } -int Close_func() +int +Close_func () { return MENU_CLOSE; } -int OK_func() +int +OK_func () { return MENU_OK; } -int Time24_func(int input) +int +Time24_func (int input) { - static int status=0; - - if(input == MENU_READ) return status; - if(input == MENU_CHECK) status ^= 1; // does something. + static int status = 0; + + if (input == MENU_READ) + return status; + if (input == MENU_CHECK) + status ^= 1; // does something. return (status | MENU_OK); // The status is "or"-ed with the MENU value to let do_menu() - // know what to do after selecting the item. (two return + // know what to do after selecting the item. (two return // values in one. :) // Also, "MENU_OK" happens to be zero, so it does not matter // unless you want something else (like MENU_CLOSE) } -int Heartbeat_func(int input) +int +Heartbeat_func (int input) { - if(input == MENU_READ) return (heartbeat != HEART_OFF); - if(input == MENU_CHECK) - { - if(heartbeat) heartbeat = HEART_OFF; - else heartbeat = HEART_OPEN; + if (input == MENU_READ) + return (heartbeat != HEART_OFF); + if (input == MENU_CHECK) { + if (heartbeat) + heartbeat = HEART_OFF; + else + heartbeat = HEART_OPEN; } return ((heartbeat != HEART_OFF) | MENU_OK); } -int Backlight_func(int input) +int +Backlight_func (int input) { int status = 128; - - switch(backlight) - { - case BACKLIGHT_OFF: - if(input == MENU_READ) status = 0; - if(input == MENU_PLUS) - { - backlight = BACKLIGHT_OPEN; - status = 128; - } - if(input == MENU_MINUS) - { - status = 0; - } - break; - case BACKLIGHT_ON: - if(input == MENU_READ) status = 255; - if(input == MENU_PLUS) - { - status = 255; - } - if(input == MENU_MINUS) - { - backlight = BACKLIGHT_OPEN; - status = 128; - } - break; - case BACKLIGHT_OPEN: - if(input == MENU_READ) status = 128; - if(input == MENU_PLUS) - { - backlight = BACKLIGHT_ON; - backlight_state = BACKLIGHT_ON; - status = 255; - } - if(input == MENU_MINUS) - { - backlight = BACKLIGHT_OFF; - backlight_state = BACKLIGHT_OFF; - status = 0; - } - break; + + switch (backlight) { + case BACKLIGHT_OFF: + if (input == MENU_READ) + status = 0; + if (input == MENU_PLUS) { + backlight = BACKLIGHT_OPEN; + status = 128; + } + if (input == MENU_MINUS) { + status = 0; + } + break; + case BACKLIGHT_ON: + if (input == MENU_READ) + status = 255; + if (input == MENU_PLUS) { + status = 255; + } + if (input == MENU_MINUS) { + backlight = BACKLIGHT_OPEN; + status = 128; + } + break; + case BACKLIGHT_OPEN: + if (input == MENU_READ) + status = 128; + if (input == MENU_PLUS) { + backlight = BACKLIGHT_ON; + backlight_state = BACKLIGHT_ON; + status = 255; + } + if (input == MENU_MINUS) { + backlight = BACKLIGHT_OFF; + backlight_state = BACKLIGHT_OFF; + status = 0; + } + break; } - + /* - if(input == MENU_READ) return (backlight != BACKLIGHT_OFF); - if(input == MENU_CHECK) - { + if(input == MENU_READ) return (backlight != BACKLIGHT_OFF); + if(input == MENU_CHECK) + { if(backlight) backlight = BACKLIGHT_OFF; else backlight = BACKLIGHT_OPEN; - } - */ - lcd.backlight(backlight_state & BACKLIGHT_ON); - + } + */ + lcd.backlight (backlight_state & BACKLIGHT_ON); + return (status | MENU_OK); } -int Server_screen_func(int input) +int +Server_screen_func (int input) { - if(input == MENU_READ) return (server_screen->priority < 256); - if(input == MENU_CHECK) - { - if(server_screen->priority < 256) server_screen->priority = 256; - else server_screen->priority = 128; + if (input == MENU_READ) + return (server_screen->priority < 256); + if (input == MENU_CHECK) { + if (server_screen->priority < 256) + server_screen->priority = 256; + else + server_screen->priority = 128; } return (MENU_OK | (server_screen->priority < 256)); } -int Contrast_func(int input) +int +Contrast_func (int input) { int status; - status=lcd.contrast(-1); + status = lcd.contrast (-1); - if(input == MENU_READ) return status; - if(input == MENU_PLUS) status+=5; // does something. - if(input == MENU_MINUS) status-=5; // does something. + if (input == MENU_READ) + return status; + if (input == MENU_PLUS) + status += 5; // does something. + if (input == MENU_MINUS) + status -= 5; // does something. - if(status<0) status=0; - if(status>255) status=255; - lcd.contrast(status); - - return (status | MENU_OK); + if (status < 0) + status = 0; + if (status > 255) + status = 255; + lcd.contrast (status); + + return (status | MENU_OK); } -void server_menu() +void +server_menu () { - debug("server_menu()\n"); - - do_menu(main_menu); - + debug ("server_menu()\n"); + + do_menu (main_menu); + } -int Backlight_Brightness_func(int input) +int +Backlight_Brightness_func (int input) { int status = backlight_brightness; - if(input == MENU_READ) return status; - if(input == MENU_PLUS) status+=5; // does something. - if(input == MENU_MINUS) status-=5; // does something. + if (input == MENU_READ) + return status; + if (input == MENU_PLUS) + status += 5; // does something. + if (input == MENU_MINUS) + status -= 5; // does something. + + if (status < 0) + status = 0; + if (status > 255) + status = 255; + lcd.backlight (status); - if(status<0) status=0; - if(status>255) status=255; - lcd.backlight(status); - backlight_brightness = status; - - return (status | MENU_OK); + + return (status | MENU_OK); } -int Backlight_Off_Brightness_func(int input) +int +Backlight_Off_Brightness_func (int input) { int status = backlight_off_brightness; - if(input == MENU_READ) return status; - if(input == MENU_PLUS) status+=5; // does something. - if(input == MENU_MINUS) status-=5; // does something. + if (input == MENU_READ) + return status; + if (input == MENU_PLUS) + status += 5; // does something. + if (input == MENU_MINUS) + status -= 5; // does something. + + if (status < 0) + status = 0; + if (status > 255) + status = 255; + lcd.backlight (status); - if(status<0) status=0; - if(status>255) status=255; - lcd.backlight(status); - backlight_off_brightness = status; - - return (status | MENU_OK); + + return (status | MENU_OK); } -int Backlight_Off_func() +int +Backlight_Off_func () { backlight_state = BACKLIGHT_OFF; backlight = BACKLIGHT_OFF; - lcd.backlight(backlight_off_brightness); + lcd.backlight (backlight_off_brightness); return MENU_OK; } -int Backlight_On_func() +int +Backlight_On_func () { backlight_state = BACKLIGHT_ON; backlight = BACKLIGHT_ON; - lcd.backlight(backlight_brightness * (backlight_state & BACKLIGHT_ON)); + lcd.backlight (backlight_brightness * (backlight_state & BACKLIGHT_ON)); return MENU_OK; } -int Backlight_Open_func() +int +Backlight_Open_func () { backlight = BACKLIGHT_OPEN; return MENU_OK; } - diff --git a/server/menus.h b/server/menus.h index 1d70c27..820e17e 100644 --- a/server/menus.h +++ b/server/menus.h @@ -11,6 +11,6 @@ extern menu_item shutdown_menu[]; extern menu_item Backlight_menu[]; // Brings up the main menu... -void server_menu(); +void server_menu (); #endif diff --git a/server/parse.c b/server/parse.c index 4f2c0e5..a4f890d 100644 --- a/server/parse.c +++ b/server/parse.c @@ -23,7 +23,8 @@ -int parse_all_client_messages() +int +parse_all_client_messages () { int i, j; int newtoken, inquote; @@ -33,78 +34,64 @@ int parse_all_client_messages() int argc; char *argv[256]; char delimiters[] = " \0"; - char leftquote[] = "\0\"'`([{\0"; + char leftquote[] = "\0\"'`([{\0"; char rightquote[] = "\0\"'`)]}\0"; char errmsg[256]; - int invalid=0; - + int invalid = 0; + //debug("parse: Rewinding list...\n"); - LL_Rewind(clients); + LL_Rewind (clients); do { // Get the next client... //debug("parse: Getting client...\n"); - c = LL_Get(clients); - if(c) - { + c = LL_Get (clients); + if (c) { // And parse all its messages... //debug("parse: Getting messages...\n"); - for(str = client_get_message(c); str; str = client_get_message(c)) - { - debug("parse: ...%s\n", str); + for (str = client_get_message (c); str; str = client_get_message (c)) { + debug ("parse: ...%s\n", str); // Now, split up the string... //len = strlen(str); - argc=0; - newtoken=1; - inquote=0; - for(i=0; str[i]; i++) - { - if(inquote) // Scan for the end of the quote + argc = 0; + newtoken = 1; + inquote = 0; + for (i = 0; str[i]; i++) { + if (inquote) // Scan for the end of the quote { - if(str[i] == rightquote[inquote]) - { // Found the end of the quote - inquote=0; + if (str[i] == rightquote[inquote]) { // Found the end of the quote + inquote = 0; str[i] = 0; - newtoken=1; + newtoken = 1; } - } - else // Normal operation; split at delimiters + } else // Normal operation; split at delimiters { - for(j=1; leftquote[j]; j++) - { + for (j = 1; leftquote[j]; j++) { // Found the beginning of a new quote... - if(str[i] == leftquote[j]) - { + if (str[i] == leftquote[j]) { inquote = j; str[i] = 0; continue; } } - for(j=0; delimiters[j]; j++) - { + for (j = 0; delimiters[j]; j++) { // Break into a new string... - if(str[i] == delimiters[j]) - { + if (str[i] == delimiters[j]) { str[i] = 0; newtoken = 1; continue; } } } - if(newtoken && str[i]) - { - newtoken=0; + if (newtoken && str[i]) { + newtoken = 0; argv[argc] = str + i; argc++; - } - else - { + } else { } } - if(inquote) - { - sprintf(errmsg, "huh? Unterminated string: missing %c\n", - rightquote[inquote]); - sock_send_string(c->sock, errmsg); + if (inquote) { + sprintf (errmsg, "huh? Unterminated string: missing %c\n", rightquote[inquote]); + sock_send_string (c->sock, errmsg); continue; } /* @@ -117,32 +104,30 @@ int parse_all_client_messages() } */ argv[argc] = NULL; - if(argc < 1) continue; - + if (argc < 1) + continue; + // Now find and call the appropriate function... -// debug("parse: Finding function...\n"); +// debug("parse: Finding function...\n"); invalid = 1; - for(i=0; commands[i].keyword; i++) - { -// debug("(checking %s)\n", commands[i].keyword); - if(0 == strcmp(argv[0], commands[i].keyword)) - { -// debug("(FOUND %s)\n", commands[i].keyword); - invalid = commands[i].function(c, argc, argv); -// debug("parse: Returned %i...\n", err); + for (i = 0; commands[i].keyword; i++) { +// debug("(checking %s)\n", commands[i].keyword); + if (0 == strcmp (argv[0], commands[i].keyword)) { +// debug("(FOUND %s)\n", commands[i].keyword); + invalid = commands[i].function (c, argc, argv); +// debug("parse: Returned %i...\n", err); } } - if(invalid) - { + if (invalid) { // FIXME: Check for buffer overflows here... - sprintf(errmsg, "huh? Invalid command \"%s\"\n", argv[0]); - sock_send_string(c->sock, errmsg); + sprintf (errmsg, "huh? Invalid command \"%s\"\n", argv[0]); + sock_send_string (c->sock, errmsg); } - free(str); // fixed memory leak? - } // end for(str...) - } // end if (c) - } while (LL_Next(clients) == 0); + free (str); // fixed memory leak? + } // end for(str...) + } // end if (c) + } while (LL_Next (clients) == 0); return 0; } diff --git a/server/parse.h b/server/parse.h index 97bab26..df50bf6 100644 --- a/server/parse.h +++ b/server/parse.h @@ -2,6 +2,6 @@ #define PARSE_H // This should be pretty self-explanatory... -int parse_all_client_messages(); +int parse_all_client_messages (); #endif diff --git a/server/render.c b/server/render.c index 9ab8887..9caec3a 100644 --- a/server/render.c +++ b/server/render.c @@ -30,461 +30,390 @@ -int heartbeat=HEART_OPEN; -int backlight=BACKLIGHT_OPEN; +int heartbeat = HEART_OPEN; +int backlight = BACKLIGHT_OPEN; int backlight_state = BACKLIGHT_OPEN; -int backlight_brightness=255; -int backlight_off_brightness=0; +int backlight_brightness = 255; +int backlight_off_brightness = 0; int output_state = 0; static int reset; #define BUFSIZE 1024 -static int draw_frame(LL *list, char fscroll, - int left, int top, int right, int bottom, - int fwid, int fhgt, - int fspeed, int timer); +static int draw_frame (LL * list, char fscroll, int left, int top, int right, int bottom, int fwid, int fhgt, int fspeed, int timer); -int draw_screen(screen *s, int timer) +int +draw_screen (screen * s, int timer) { - static screen *old_s=NULL; - int tmp=0; - + static screen *old_s = NULL; + int tmp = 0; + //debug("Render...\n"); //return 0; reset = 1; //debug("draw_screen: %8x, %i\n", (int)s, timer); - - if(!s) return -1; - if(s == old_s) reset = 0; + if (!s) + return -1; + + if (s == old_s) + reset = 0; old_s = s; - lcd.clear(); + lcd.clear (); - switch(backlight_state) - { - case BACKLIGHT_OFF: - lcd.backlight(backlight_off_brightness); - break; - case BACKLIGHT_ON: - lcd.backlight(backlight_brightness); - break; - default: - if(backlight_state & BACKLIGHT_FLASH) - { - tmp = (!((timer&7) == 7)); - if(backlight_state & 1) - lcd.backlight(tmp?backlight_brightness:backlight_off_brightness); - //lcd.backlight(backlight_brightness * (!((timer&7) == 7))); - else - lcd.backlight(!tmp?backlight_brightness:backlight_off_brightness); - //lcd.backlight(backlight_brightness * ((timer&7) == 7)); - } - else if(backlight_state & BACKLIGHT_BLINK) - { - tmp = (!((timer&14) == 14)); - if(backlight_state & 1) - lcd.backlight(tmp?backlight_brightness:backlight_off_brightness); - //lcd.backlight(backlight_brightness * (!((timer&14) == 14))); - else - lcd.backlight(!tmp?backlight_brightness:backlight_off_brightness); - //lcd.backlight(backlight_brightness * ((timer&14) == 14)); - } - break; + switch (backlight_state) { + case BACKLIGHT_OFF: + lcd.backlight (backlight_off_brightness); + break; + case BACKLIGHT_ON: + lcd.backlight (backlight_brightness); + break; + default: + if (backlight_state & BACKLIGHT_FLASH) { + tmp = (!((timer & 7) == 7)); + if (backlight_state & 1) + lcd.backlight (tmp ? backlight_brightness : backlight_off_brightness); + //lcd.backlight(backlight_brightness * (!((timer&7) == 7))); + else + lcd.backlight (!tmp ? backlight_brightness : backlight_off_brightness); + //lcd.backlight(backlight_brightness * ((timer&7) == 7)); + } else if (backlight_state & BACKLIGHT_BLINK) { + tmp = (!((timer & 14) == 14)); + if (backlight_state & 1) + lcd.backlight (tmp ? backlight_brightness : backlight_off_brightness); + //lcd.backlight(backlight_brightness * (!((timer&14) == 14))); + else + lcd.backlight (!tmp ? backlight_brightness : backlight_off_brightness); + //lcd.backlight(backlight_brightness * ((timer&14) == 14)); + } + break; } - lcd.output(output_state); + lcd.output (output_state); + + draw_frame (s->widgets, 'v', 0, 0, lcd.wid, lcd.hgt, s->wid, s->hgt, s->duration / s->hgt, timer); + - draw_frame(s->widgets, 'v', - 0, 0, lcd.wid, lcd.hgt, - s->wid, s->hgt, - s->duration/s->hgt, timer); - - //debug("draw_screen done\n"); - - if(heartbeat) - { - if((s->heartbeat==1) || heartbeat == HEART_ON) - { + + if (heartbeat) { + if ((s->heartbeat == 1) || heartbeat == HEART_ON) { // Set this to pulsate like a real heart beat... // (binary is fun... :) - lcd.icon(!((timer+4)&5), 0); - lcd.chr(lcd.wid, 1, 0); + lcd.icon (!((timer + 4) & 5), 0); + lcd.chr (lcd.wid, 1, 0); } - if((s->heartbeat==2) && heartbeat != HEART_OFF) - { + if ((s->heartbeat == 2) && heartbeat != HEART_OFF) { char *phases = "-\\|/"; - lcd.chr(lcd.wid, 1, phases[timer&3]); + lcd.chr (lcd.wid, 1, phases[timer & 3]); } } - - lcd.flush(); - + + lcd.flush (); + //debug("draw_screen: %8x, %i\n", s, timer); return 0; - + } -static int draw_frame(LL *list, char fscroll, - int left, int top, int right, int bottom, - int fwid, int fhgt, - int fspeed, int timer) +static int +draw_frame (LL * list, char fscroll, int left, int top, int right, int bottom, int fwid, int fhgt, int fspeed, int timer) { - char str[BUFSIZE]; // scratch buffer + char str[BUFSIZE]; // scratch buffer widget *w; - - int wid, hgt; // Width and height of visible frame area + + int wid, hgt; // Width and height of visible frame area int x, y; - int fx, fy; // Scrolling offset for the frame... + int fx, fy; // Scrolling offset for the frame... int length, speed; //int lines; - + int reset = 1; - wid = right - left; // This is the size of the visible frame area + wid = right - left; // This is the size of the visible frame area hgt = bottom - top; fx = 0; fy = 0; - if(fscroll == 'v') - { - - if(fspeed > 0) - fy = (timer-fspeed) / fspeed; - if(fspeed < 0) + if (fscroll == 'v') { + + if (fspeed > 0) + fy = (timer - fspeed) / fspeed; + if (fspeed < 0) fy = (-fspeed) * timer; - if(fy < 0) fy = 0; + if (fy < 0) + fy = 0; // Make sure the whole frame gets displayed, at least... - if(!screenlist_action) screenlist_action = RENDER_HOLD; - if((fy) > fhgt - 1) - { + if (!screenlist_action) + screenlist_action = RENDER_HOLD; + if ((fy) > fhgt - 1) { // Release hold after it has been displayed - if(!screenlist_action || screenlist_action == RENDER_HOLD) + if (!screenlist_action || screenlist_action == RENDER_HOLD) screenlist_action = 0; } fy %= fhgt; - if(fy > fhgt - hgt) fy = fhgt - hgt; + if (fy > fhgt - hgt) + fy = fhgt - hgt; + } else if (fscroll == 'h') { // TODO: Frames don't scroll horizontally yet! + } - else if (fscroll == 'h') - { // TODO: Frames don't scroll horizontally yet! - - } - //debug("draw_screen: %8x, %i\n", s, timer); - - if(!list) return -1; - + + if (!list) + return -1; + //debug("draw_frame: %8x, %i\n", frame, timer); - - - LL_Rewind(list); + + + LL_Rewind (list); do { - w = (widget *)LL_Get(list); - if(!w) return -1; + w = (widget *) LL_Get (list); + if (!w) + return -1; // TODO: Make this cleaner and more flexible! - switch(w->type) - { - case WID_STRING: - if((w->x > 0) && (w->y > 0) && (w->text)) - { - if((w->y <= hgt + fy) && - (w->y > fy)) - { - strncpy(str, w->text, wid - w->x + 1); - str[wid - w->x + 1] = 0; - lcd.string(w->x + left, - w->y + top - fy, - str); - } + switch (w->type) { + case WID_STRING: + if ((w->x > 0) && (w->y > 0) && (w->text)) { + if ((w->y <= hgt + fy) && (w->y > fy)) { + strncpy (str, w->text, wid - w->x + 1); + str[wid - w->x + 1] = 0; + lcd.string (w->x + left, w->y + top - fy, str); } - break; - case WID_HBAR: - if(reset) - { - lcd.init_hbar(); - reset = 0; - } - if((w->x > 0) && (w->y > 0)) - { - if((w->y <= hgt + fy) && - (w->y > fy)) - { - if(w->length > 0) - { - if((w->length / lcd.cellwid) < wid - w->x + 1) - lcd.hbar(w->x + left, - w->y + top - fy, - w->length); - else - lcd.hbar(w->x + left, - w->y + top - fy, - wid * lcd.cellwid); - } - else if(w->length < 0) - { - // TODO: Rearrange stuff to get left-extending - // hbars to draw correctly... - // .. er, this'll require driver modifications, - // so I'll leave it out for now. - } - } - } - break; - case WID_VBAR: // FIXME: Vbars don't work in frames! - if(reset) - { - lcd.init_vbar(); - reset = 0; - } - if((w->x > 0) && (w->y > 0)) - { - if(w->length > 0) - { - lcd.vbar(w->x, w->length); - } - else if(w->length < 0) - { - // TODO: Rearrange stuff to get down-extending - // vbars to draw correctly... + } + break; + case WID_HBAR: + if (reset) { + lcd.init_hbar (); + reset = 0; + } + if ((w->x > 0) && (w->y > 0)) { + if ((w->y <= hgt + fy) && (w->y > fy)) { + if (w->length > 0) { + if ((w->length / lcd.cellwid) < wid - w->x + 1) + lcd.hbar (w->x + left, w->y + top - fy, w->length); + else + lcd.hbar (w->x + left, w->y + top - fy, wid * lcd.cellwid); + } else if (w->length < 0) { + // TODO: Rearrange stuff to get left-extending + // hbars to draw correctly... // .. er, this'll require driver modifications, // so I'll leave it out for now. } } - break; - case WID_ICON: // FIXME: Not implemented - break; - case WID_TITLE: // FIXME: Doesn't work quite right in frames... - if(!w->text) break; - if(wid < 8) break; - - memset(str, 255, wid); - str[2] = ' '; - length = strlen(w->text); - if(length <= wid-6) - { - memcpy(str+3, w->text, length); - str[length+3] = ' '; - } - else // Scroll the title, if it doesn't fit... - { - speed = 1; - x = timer / speed; - y = x / length; - - // Make sure the whole title gets displayed, at least... - if(!screenlist_action) screenlist_action = RENDER_HOLD; - if(x > length - 6) - { - // Release hold after it has been displayed - if(!screenlist_action || screenlist_action == RENDER_HOLD) - screenlist_action = 0; - } - x %= (length); - x -= 3; - if(x < 0) x = 0; - if(x > length - (wid-6)) x = length - (wid-6); - - if(y&1) // Scrolling backwards... - { - x = (length-(wid-6)) - x; - } - strncpy(str+3, w->text+x, (wid-6)); - str[wid-3] = ' '; - } - str[wid] = 0; - - lcd.string(1 + left, 1 + top, str); - break; - case WID_SCROLLER: // FIXME: doesn't work in frames... - { - int offset; - int screen_width; - if (!w->text) break; - if (w->right < w->left) break; - //printf("rendering: %s %d\n",w->text,timer); - screen_width = w->right - w->left + 1; - switch (w->length) - { // actually, direction... - // FIXED: Horz scrollers don't show the - // last letter in the string... (1-off error?) - case 'h': - length = strlen(w->text) + 1; - if (length <= screen_width) - { - /* it fits within the box, just render it */ - lcd.string(w->left,w->top,w->text); - } - else - { - int effLength = length - screen_width; - int necessaryTimeUnits = 0; - if (!screenlist_action) screenlist_action = RENDER_HOLD; - if (w->speed > 0) { - necessaryTimeUnits = effLength * w->speed; - if (((timer / (effLength*w->speed)) % 2) == 0) { - //wiggle one way - offset = (timer % (effLength*w->speed)) - / w->speed; - } - else - { - //wiggle the other - offset = (((timer % (effLength*w->speed)) - - (effLength*w->speed) + 1) - / w->speed) * -1; - } - } - else if (w->speed < 0) - { - necessaryTimeUnits = effLength / (w->speed * -1); - if (((timer / (effLength/(w->speed*-1))) % 2) == 0) - { - offset = (timer % (effLength/(w->speed*-1))) - * w->speed * -1; - } - else - { - offset = (((timer % (effLength/(w->speed*-1))) - * w->speed * -1) - effLength + 1) * -1; - } - } - else - { - offset = 0; - if(screenlist_action == RENDER_HOLD) - screenlist_action = 0; - } - if (timer > necessaryTimeUnits) - { - if(screenlist_action == RENDER_HOLD) - screenlist_action = 0; - } - if (offset <= length) - { - strncpy(str,&((w->text)[offset]),screen_width); - str[screen_width] = '\0'; - //printf("%s : %d\n",str,length-offset); - } - else - { - str[0] = '\0'; - } - lcd.string(w->left,w->top,str); - } - break; - // FIXME: Vert scrollers don't always seem to scroll - // back up after hitting the bottom. They jump back to - // the top instead... (nevermind?) - case 'v': - { - int i=0; - length = strlen(w->text); - if (length <= screen_width) - { - /* no scrolling required...*/ - lcd.string(w->left,w->top,w->text); - } - else - { - int lines_required = - (length / screen_width) - + (length % screen_width ? 1 : 0); - int available_lines = (w->bottom - w->top + 1); - if (lines_required <= available_lines) - { - // easy... - for(i=0;itext)[i*screen_width]), - screen_width); - str[screen_width] = '\0'; - lcd.string(w->left,w->top + i,str); - } - } - else - { - int necessaryTimeUnits = 0; - int effLines = lines_required - available_lines + 1; - int begin = 0; - if (!screenlist_action) - screenlist_action = RENDER_HOLD; - //printf("length: %d sw: %d lines req: %d avail lines: %d effLines: %d \n",length,screen_width,lines_required,available_lines,effLines); - if (w->speed > 0) - { - necessaryTimeUnits = effLines * w->speed; - if (((timer / (effLines*w->speed)) % 2) == 0) - { - //printf("up "); - begin = (timer % (effLines*w->speed)) - / w->speed; - } - else - { - //printf("down "); - begin = (((timer % (effLines*w->speed)) - - (effLines*w->speed) + 1)/w->speed) - * -1; - } - } - else if (w->speed < 0) - { - necessaryTimeUnits = effLines / (w->speed * -1); - if (((timer / (effLines/(w->speed*-1))) % 2) == 0) - { - begin = (timer % (effLines/(w->speed*-1))) - * w->speed * -1; - } - else - { - begin = (((timer % (effLines/(w->speed*-1))) - * w->speed * -1) - effLines + 1) - * -1; - } - } - else - { - begin = 0; - } - //printf("rendering begin: %d timer: %d effLines: %d\n",begin,timer,effLines); - for(i=begin;itext)[i*(screen_width)]), - screen_width); - str[screen_width] = '\0'; - //printf("rendering: '%s' of %s\n", - //str,w->text); - lcd.string(w->left,w->top + (i-begin),str); - } - if (timer > necessaryTimeUnits) - { - if(screenlist_action == RENDER_HOLD) - screenlist_action = 0; - } - } - } - break; - } - } - break; } - case WID_FRAME: + break; + case WID_VBAR: // FIXME: Vbars don't work in frames! + if (reset) { + lcd.init_vbar (); + reset = 0; + } + if ((w->x > 0) && (w->y > 0)) { + if (w->length > 0) { + lcd.vbar (w->x, w->length); + } else if (w->length < 0) { + // TODO: Rearrange stuff to get down-extending + // vbars to draw correctly... + // .. er, this'll require driver modifications, + // so I'll leave it out for now. + } + } + break; + case WID_ICON: // FIXME: Not implemented + break; + case WID_TITLE: // FIXME: Doesn't work quite right in frames... + if (!w->text) + break; + if (wid < 8) + break; + + memset (str, 255, wid); + str[2] = ' '; + length = strlen (w->text); + if (length <= wid - 6) { + memcpy (str + 3, w->text, length); + str[length + 3] = ' '; + } else // Scroll the title, if it doesn't fit... + { + speed = 1; + x = timer / speed; + y = x / length; + + // Make sure the whole title gets displayed, at least... + if (!screenlist_action) + screenlist_action = RENDER_HOLD; + if (x > length - 6) { + // Release hold after it has been displayed + if (!screenlist_action || screenlist_action == RENDER_HOLD) + screenlist_action = 0; + } + x %= (length); + x -= 3; + if (x < 0) + x = 0; + if (x > length - (wid - 6)) + x = length - (wid - 6); + + if (y & 1) // Scrolling backwards... + { + x = (length - (wid - 6)) - x; + } + strncpy (str + 3, w->text + x, (wid - 6)); + str[wid - 3] = ' '; + } + str[wid] = 0; + + lcd.string (1 + left, 1 + top, str); + break; + case WID_SCROLLER: // FIXME: doesn't work in frames... + { + int offset; + int screen_width; + if (!w->text) + break; + if (w->right < w->left) + break; + //printf("rendering: %s %d\n",w->text,timer); + screen_width = w->right - w->left + 1; + switch (w->length) { // actually, direction... + // FIXED: Horz scrollers don't show the + // last letter in the string... (1-off error?) + case 'h': + length = strlen (w->text) + 1; + if (length <= screen_width) { + /* it fits within the box, just render it */ + lcd.string (w->left, w->top, w->text); + } else { + int effLength = length - screen_width; + int necessaryTimeUnits = 0; + if (!screenlist_action) + screenlist_action = RENDER_HOLD; + if (w->speed > 0) { + necessaryTimeUnits = effLength * w->speed; + if (((timer / (effLength * w->speed)) % 2) == 0) { + //wiggle one way + offset = (timer % (effLength * w->speed)) + / w->speed; + } else { + //wiggle the other + offset = (((timer % (effLength * w->speed)) + - (effLength * w->speed) + 1) + / w->speed) * -1; + } + } else if (w->speed < 0) { + necessaryTimeUnits = effLength / (w->speed * -1); + if (((timer / (effLength / (w->speed * -1))) % 2) == 0) { + offset = (timer % (effLength / (w->speed * -1))) + * w->speed * -1; + } else { + offset = (((timer % (effLength / (w->speed * -1))) + * w->speed * -1) - effLength + 1) * -1; + } + } else { + offset = 0; + if (screenlist_action == RENDER_HOLD) + screenlist_action = 0; + } + if (timer > necessaryTimeUnits) { + if (screenlist_action == RENDER_HOLD) + screenlist_action = 0; + } + if (offset <= length) { + strncpy (str, &((w->text)[offset]), screen_width); + str[screen_width] = '\0'; + //printf("%s : %d\n",str,length-offset); + } else { + str[0] = '\0'; + } + lcd.string (w->left, w->top, str); + } + break; + // FIXME: Vert scrollers don't always seem to scroll + // back up after hitting the bottom. They jump back to + // the top instead... (nevermind?) + case 'v': + { + int i = 0; + length = strlen (w->text); + if (length <= screen_width) { + /* no scrolling required... */ + lcd.string (w->left, w->top, w->text); + } else { + int lines_required = (length / screen_width) + + (length % screen_width ? 1 : 0); + int available_lines = (w->bottom - w->top + 1); + if (lines_required <= available_lines) { + // easy... + for (i = 0; i < lines_required; i++) { + strncpy (str, &((w->text)[i * screen_width]), screen_width); + str[screen_width] = '\0'; + lcd.string (w->left, w->top + i, str); + } + } else { + int necessaryTimeUnits = 0; + int effLines = lines_required - available_lines + 1; + int begin = 0; + if (!screenlist_action) + screenlist_action = RENDER_HOLD; + //printf("length: %d sw: %d lines req: %d avail lines: %d effLines: %d \n",length,screen_width,lines_required,available_lines,effLines); + if (w->speed > 0) { + necessaryTimeUnits = effLines * w->speed; + if (((timer / (effLines * w->speed)) % 2) == 0) { + //printf("up "); + begin = (timer % (effLines * w->speed)) + / w->speed; + } else { + //printf("down "); + begin = (((timer % (effLines * w->speed)) + - (effLines * w->speed) + 1) / w->speed) + * -1; + } + } else if (w->speed < 0) { + necessaryTimeUnits = effLines / (w->speed * -1); + if (((timer / (effLines / (w->speed * -1))) % 2) == 0) { + begin = (timer % (effLines / (w->speed * -1))) + * w->speed * -1; + } else { + begin = (((timer % (effLines / (w->speed * -1))) + * w->speed * -1) - effLines + 1) + * -1; + } + } else { + begin = 0; + } + //printf("rendering begin: %d timer: %d effLines: %d\n",begin,timer,effLines); + for (i = begin; i < begin + available_lines; i++) { + strncpy (str, &((w->text)[i * (screen_width)]), screen_width); + str[screen_width] = '\0'; + //printf("rendering: '%s' of %s\n", + //str,w->text); + lcd.string (w->left, w->top + (i - begin), str); + } + if (timer > necessaryTimeUnits) { + if (screenlist_action == RENDER_HOLD) + screenlist_action = 0; + } + } + } + break; + } + } + break; + } + case WID_FRAME: { // FIXME: doesn't handle nested frames quite right! // doesn't handle scrolling in nested frames at all... @@ -493,39 +422,31 @@ static int draw_frame(LL *list, char fscroll, new_top = top + w->top - 1; new_right = left + w->right; new_bottom = top + w->bottom; - if(new_right > right) new_right = right; - if(new_bottom > bottom) new_bottom = bottom; - if(new_left >= right || - new_top >= bottom) - { // Do nothing if it's invisible... - } - else - { - draw_frame(w->kids, w->length, - new_left, new_top, new_right, new_bottom, - w->wid, w->hgt, - w->speed, timer); + if (new_right > right) + new_right = right; + if (new_bottom > bottom) + new_bottom = bottom; + if (new_left >= right || new_top >= bottom) { // Do nothing if it's invisible... + } else { + draw_frame (w->kids, w->length, new_left, new_top, new_right, new_bottom, w->wid, w->hgt, w->speed, timer); } } break; - case WID_NUM: // FIXME: doesn't work in frames... - if((w->x > 0) && (w->y >= 0) && (w->y <= 9)) - { - if(reset) - { - lcd.init_num(); - reset = 0; - } - lcd.num(w->x + left, w->y); + case WID_NUM: // FIXME: doesn't work in frames... + if ((w->x > 0) && (w->y >= 0) && (w->y <= 9)) { + if (reset) { + lcd.init_num (); + reset = 0; } - break; - case WID_NONE: - default: - break; + lcd.num (w->x + left, w->y); + } + break; + case WID_NONE: + default: + break; } - } while(LL_Next(list) == 0); + } while (LL_Next (list) == 0); + - return 0; } - diff --git a/server/render.h b/server/render.h index 36e8d2d..389cc02 100644 --- a/server/render.h +++ b/server/render.h @@ -23,7 +23,7 @@ extern int backlight_state; extern int backlight_brightness; extern int backlight_off_brightness; extern int output_state; -int draw_screen(screen *s, int timer); +int draw_screen (screen * s, int timer); #endif diff --git a/server/screen.c b/server/screen.c index 15ba5c5..7415647 100644 --- a/server/screen.c +++ b/server/screen.c @@ -13,159 +13,160 @@ #include "screen.h" -screen * screen_create() +screen * +screen_create () { screen *s; - s = malloc(sizeof(screen)); - if(!s) - { - fprintf(stderr, "screen_create: Error allocating new screen\n"); + s = malloc (sizeof (screen)); + if (!s) { + fprintf (stderr, "screen_create: Error allocating new screen\n"); return NULL; } - s->id=NULL; - s->name=NULL; - s->priority=128; + s->id = NULL; + s->name = NULL; + s->priority = 128; // TODO: Make the screen duration configurable! s->duration = 32; s->heartbeat = 1; s->wid = lcd.wid; s->hgt = lcd.hgt; s->parent = NULL; - s->widgets=NULL; + s->widgets = NULL; - s->widgets = LL_new(); - if(!s->widgets) - { - fprintf(stderr, "screen_create: Error allocating widget list\n"); + s->widgets = LL_new (); + if (!s->widgets) { + fprintf (stderr, "screen_create: Error allocating widget list\n"); return NULL; } return s; } -int screen_destroy(screen *s) +int +screen_destroy (screen * s) { widget *w; - if(!s) return -1; - - LL_Rewind(s->widgets); + if (!s) + return -1; + + LL_Rewind (s->widgets); do { // Free a widget... - w = LL_Get(s->widgets); - widget_destroy(w); - } while (LL_Next(s->widgets) == 0); - LL_Destroy(s->widgets); + w = LL_Get (s->widgets); + widget_destroy (w); + } while (LL_Next (s->widgets) == 0); + LL_Destroy (s->widgets); - if(s->id) - free(s->id); - if(s->name) - free(s->name); - - free(s); - + if (s->id) + free (s->id); + if (s->name) + free (s->name); + + free (s); + return 0; } -screen *screen_find(client *c, char *id) +screen * +screen_find (client * c, char *id) { screen *s; - if(!c) return NULL; - if(!id) return NULL; + if (!c) + return NULL; + if (!id) + return NULL; - debug("client_find_screen(%s)\n", id); - - LL_Rewind(c->data->screenlist); + debug ("client_find_screen(%s)\n", id); + + LL_Rewind (c->data->screenlist); do { - s = LL_Get(c->data->screenlist); - if( (s) && (0 == strcmp(s->id, id))) - { - debug("client_find_screen: Found %s\n", id); + s = LL_Get (c->data->screenlist); + if ((s) && (0 == strcmp (s->id, id))) { + debug ("client_find_screen: Found %s\n", id); return s; } - } while(LL_Next(c->data->screenlist) == 0); + } while (LL_Next (c->data->screenlist) == 0); return NULL; } -int screen_add(client *c, char *id) +int +screen_add (client * c, char *id) { screen *s; - if(!c) return -1; - if(!id) return -1; + if (!c) + return -1; + if (!id) + return -1; // Make sure this screen doesn't already exist... - s = screen_find(c, id); - if(s) - { + s = screen_find (c, id); + if (s) { return 1; } - - s = screen_create(); - if(!s) - { - fprintf(stderr, "screen_add: Error creating screen\n"); + + s = screen_create (); + if (!s) { + fprintf (stderr, "screen_add: Error creating screen\n"); return -1; } s->parent = c; - s->id = strdup(id); - if(!s->id) - { - fprintf(stderr, "screen_add: Error allocating name\n"); + s->id = strdup (id); + if (!s->id) { + fprintf (stderr, "screen_add: Error allocating name\n"); return -1; } - // TODO: Check for errors here? - LL_Push(c->data->screenlist, (void *)s); - + LL_Push (c->data->screenlist, (void *) s); + // Now, add it to the screenlist... - if(screenlist_add(s) < 0) - { - fprintf(stderr, "screen_add: Error queueing new screen\n"); + if (screenlist_add (s) < 0) { + fprintf (stderr, "screen_add: Error queueing new screen\n"); return -1; } - + return 0; } -int screen_remove(client *c, char *id) +int +screen_remove (client * c, char *id) { screen *s; - if(!c) return -1; - if(!id) return -1; - + if (!c) + return -1; + if (!id) + return -1; + // Make sure this screen *does* exist... - s = screen_find(c, id); - if(!s) - { - fprintf(stderr, "screen_remove: Error finding screen %s\n", id); + s = screen_find (c, id); + if (!s) { + fprintf (stderr, "screen_remove: Error finding screen %s\n", id); return 1; } - // TODO: Check for errors here? - LL_Remove(c->data->screenlist, (void *)s); + LL_Remove (c->data->screenlist, (void *) s); // ... and here? - screen_destroy(s); + screen_destroy (s); // Now, remove it from the screenlist... - if(screenlist_remove_all(s) < 0) - { + if (screenlist_remove_all (s) < 0) { // Not a serious error.. - fprintf(stderr, "screen_remove: Error dequeueing screen\n"); + fprintf (stderr, "screen_remove: Error dequeueing screen\n"); return 0; } - + return 0; } diff --git a/server/screen.h b/server/screen.h index 1d64060..379dbc0 100644 --- a/server/screen.h +++ b/server/screen.h @@ -4,26 +4,25 @@ #include "../shared/LL.h" #include "clients.h" -typedef struct screen -{ - char *id; - char *name; - int wid, hgt; - int priority; - int duration; - int heartbeat; - LL * widgets; - client *parent; +typedef struct screen { + char *id; + char *name; + int wid, hgt; + int priority; + int duration; + int heartbeat; + LL *widgets; + client *parent; } screen; -screen * screen_create(); -int screen_destroy(screen *s); +screen *screen_create (); +int screen_destroy (screen * s); -screen * screen_find(client *c, char *id); +screen *screen_find (client * c, char *id); -int screen_add(client *c, char *id); -int screen_remove(client *c, char *id); +int screen_add (client * c, char *id); +int screen_remove (client * c, char *id); #endif diff --git a/server/screenlist.c b/server/screenlist.c index 1df65b7..eb17721 100644 --- a/server/screenlist.c +++ b/server/screenlist.c @@ -10,79 +10,85 @@ -int screenlist_action=0; +int screenlist_action = 0; -int timer=0; +int timer = 0; -LL * screenlist; +LL *screenlist; -int screenlist_add_end(screen *screen); -screen * screenlist_next_roll(); -screen * screenlist_prev_roll(); -screen * screenlist_next_priority(); +int screenlist_add_end (screen * screen); +screen *screenlist_next_roll (); +screen *screenlist_prev_roll (); +screen *screenlist_next_priority (); -int compare_priority(void *one, void *two); -int compare_addresses(void *one, void *two); +int compare_priority (void *one, void *two); +int compare_addresses (void *one, void *two); -int screenlist_init() +int +screenlist_init () { - debug("screenlist_init()\n"); - - screenlist = LL_new(); - if(!screenlist) - { - fprintf(stderr, "screenlist_init: Error allocating list\n"); + debug ("screenlist_init()\n"); + + screenlist = LL_new (); + if (!screenlist) { + fprintf (stderr, "screenlist_init: Error allocating list\n"); return -1; } screenlist_action = 0; timer = 0; - + return 0; } -int screenlist_shutdown() +int +screenlist_shutdown () { - debug("screenlist_shutdown()\n"); - - LL_Destroy(screenlist); - + debug ("screenlist_shutdown()\n"); + + LL_Destroy (screenlist); + return 0; } -int screenlist_remove(screen *s) +int +screenlist_remove (screen * s) { - debug("screenlist_remove()\n"); - - if(!LL_Remove(screenlist, s)) + debug ("screenlist_remove()\n"); + + if (!LL_Remove (screenlist, s)) return -1; - else return 0; + else + return 0; } -int screenlist_remove_all(screen *s) +int +screenlist_remove_all (screen * s) { - int i=0; - - debug("screenlist_remove_all()\n"); - - while(LL_Remove(screenlist, s)) + int i = 0; + + debug ("screenlist_remove_all()\n"); + + while (LL_Remove (screenlist, s)) i++; - debug("screenlist_remove_all()... got %i\n", i); + debug ("screenlist_remove_all()... got %i\n", i); return i; } -LL * screenlist_getlist() +LL * +screenlist_getlist () { - debug("screenlist_getlist()\n"); - + debug ("screenlist_getlist()\n"); + return screenlist; } -screen * screenlist_current() +screen * +screenlist_current () { char str[256]; screen *s; @@ -92,55 +98,48 @@ screen * screenlist_current() //debug("screenlist_current:\n"); //LL_dprint(screenlist); - - s = (screen *)LL_GetFirst(screenlist); + + s = (screen *) LL_GetFirst (screenlist); // FIXME: Make sure the screen/client exists! - if(s != old_s) - { - debug("screenlist_current: new screen\n"); + if (s != old_s) { + debug ("screenlist_current: new screen\n"); timer = 0; - + // Tell the client we're done with the current screen - if(old_s) - { + if (old_s) { //debug("screenlist_current: ignoring old screen\n"); - LL_Rewind(screenlist); - if(old_s != LL_Find(screenlist, compare_addresses, old_s)) - { - debug("screenlist: Didn't find screen 0x%8x!\n", (int)old_s); - } - else { + LL_Rewind (screenlist); + if (old_s != LL_Find (screenlist, compare_addresses, old_s)) { + debug ("screenlist: Didn't find screen 0x%8x!\n", (int) old_s); + } else { //debug("screenlist_current: ... sending ignore\n"); c = old_s->parent; - if(c) // Tell the client we're not listening any more... + if (c) // Tell the client we're not listening any more... { - sprintf(str, "ignore %s\n", old_s->id); - sock_send_string(c->sock, str); - } - else // The server has the display, so do nothing + sprintf (str, "ignore %s\n", old_s->id); + sock_send_string (c->sock, str); + } else // The server has the display, so do nothing { } //debug("screenlist_current: ... sent ignore\n"); } } - if(s) - { + if (s) { //debug("screenlist_current: listening to new screen\n"); c = s->parent; - if(c) // Tell the client we're paying attention... + if (c) // Tell the client we're paying attention... { - sprintf(str, "listen %s\n", s->id); - sock_send_string(c->sock, str); - } - else // The server has the display, so do nothing + sprintf (str, "listen %s\n", s->id); + sock_send_string (c->sock, str); + } else // The server has the display, so do nothing { } } } - - + + old_s = s; @@ -149,33 +148,37 @@ screen * screenlist_current() return s; } -int screenlist_add(screen *s) +int +screenlist_add (screen * s) { // TODO: Different queueing modes... - return screenlist_add_end(s); + return screenlist_add_end (s); } -screen * screenlist_next() +screen * +screenlist_next () { screen *s; - + //debug("Screenlist_next()\n"); - - s = screenlist_current(); + + s = screenlist_current (); // If we're on hold, don't advance! - if(screenlist_action == SCR_HOLD) return s; - if(screenlist_action == RENDER_HOLD) return s; + if (screenlist_action == SCR_HOLD) + return s; + if (screenlist_action == RENDER_HOLD) + return s; // Otherwise, reset it to regular operation screenlist_action = 0; - + //debug("Screenlist_next: calling handler...\n"); // Call the selected queuing function... // TODO: Different queueing modes... - s = screenlist_next_priority(); + s = screenlist_next_priority (); //s = screenlist_next_roll(); //debug("Screenlist_next() done\n"); @@ -183,88 +186,102 @@ screen * screenlist_next() return s; } -screen * screenlist_prev() +screen * +screenlist_prev () { screen *s; - s = screenlist_current(); + s = screenlist_current (); // If we're on hold, don't advance! - if(screenlist_action == SCR_HOLD) return s; - if(screenlist_action == RENDER_HOLD) return s; - + if (screenlist_action == SCR_HOLD) + return s; + if (screenlist_action == RENDER_HOLD) + return s; + // Otherwise, reset it no regular operation screenlist_action = 0; - + // Call the selected queuing function... // TODO: Different queueing modes... - s = screenlist_prev_roll(); + s = screenlist_prev_roll (); return s; } // Adds new screens to the end of the screenlist... -int screenlist_add_end(screen *screen) +int +screenlist_add_end (screen * screen) { - debug("screenlist_add_end()\n"); - - return LL_Push(screenlist, (void *)screen); + debug ("screenlist_add_end()\n"); + + return LL_Push (screenlist, (void *) screen); } // Simple round-robin approach to screen cycling... -screen * screenlist_next_roll() +screen * +screenlist_next_roll () { //debug("screenlist_next_roll()\n"); - - if(LL_UnRoll(screenlist) != 0) return NULL; - return screenlist_current(); + if (LL_UnRoll (screenlist) != 0) + return NULL; + + return screenlist_current (); } // Strict priority queue approach... -screen * screenlist_next_priority() +screen * +screenlist_next_priority () { //screen *s, *t; //debug("screenlist_next_priority\n"); - if(LL_UnRoll(screenlist) != 0) return NULL; + if (LL_UnRoll (screenlist) != 0) + return NULL; - LL_Sort(screenlist, compare_priority); - - return screenlist_current(); + LL_Sort (screenlist, compare_priority); + + return screenlist_current (); } // Simple round-robin approach to screen cycling... -screen * screenlist_prev_roll() +screen * +screenlist_prev_roll () { //debug("screenlist_prev_roll()\n"); - - if(LL_Roll(screenlist) != 0) return NULL; - return screenlist_current(); + if (LL_Roll (screenlist) != 0) + return NULL; + + return screenlist_current (); } -int compare_priority(void *one, void *two) +int +compare_priority (void *one, void *two) { screen *a, *b; //debug("compare_priority: %8x %8x\n", one, two); - - if(!one) return 0; - if(!two) return 0; - - a = (screen *)one; - b = (screen *)two; + + if (!one) + return 0; + if (!two) + return 0; + + a = (screen *) one; + b = (screen *) two; //debug("compare_priority: done?\n"); return (a->priority - b->priority); } -int compare_addresses(void *one, void *two) +int +compare_addresses (void *one, void *two) { //printf("compare_addresses: 0x%x == 0x%x ???\n", one, two); //if(one == two) printf("Yes!\n"); diff --git a/server/screenlist.h b/server/screenlist.h index 4a2407b..96abcd3 100644 --- a/server/screenlist.h +++ b/server/screenlist.h @@ -14,18 +14,18 @@ extern int screenlist_action; extern int timer; -int screenlist_init(); -int screenlist_shutdown(); +int screenlist_init (); +int screenlist_shutdown (); -LL * screenlist_getlist(); -screen * screenlist_current(); +LL *screenlist_getlist (); +screen *screenlist_current (); -int screenlist_add(screen *s); -screen * screenlist_next(); -screen * screenlist_prev(); +int screenlist_add (screen * s); +screen *screenlist_next (); +screen *screenlist_prev (); -int screenlist_remove(screen *s); -int screenlist_remove_all(screen *s); +int screenlist_remove (screen * s); +int screenlist_remove_all (screen * s); #endif diff --git a/server/serverscreens.c b/server/serverscreens.c index 9e63e2b..2fa3979 100644 --- a/server/serverscreens.c +++ b/server/serverscreens.c @@ -23,210 +23,181 @@ char *id = "ClientList"; char *name = "Client List"; char title[256] = "LCDproc Server"; -char one[256] = ""; -char two[256] = ""; +char one[256] = ""; +char two[256] = ""; char three[256] = ""; -int server_screen_init() +int +server_screen_init () { widget *w; - debug("server_screen_init\n"); - - server_screen = screen_create(); + debug ("server_screen_init\n"); - if(!server_screen) - { - fprintf(stderr, "server_screen_init: Error allocating screen\n"); + server_screen = screen_create (); + + if (!server_screen) { + fprintf (stderr, "server_screen_init: Error allocating screen\n"); return -1; } server_screen->id = id; server_screen->name = name; - server_screen->duration = 8; // 1 second, instead of 4... - + server_screen->duration = 8; // 1 second, instead of 4... + // TODO: Error-checking? - widget_add(server_screen, "title", "title", NULL, 1); - widget_add(server_screen, "one" , "string", NULL, 1); - widget_add(server_screen, "two" , "string", NULL, 1); - widget_add(server_screen, "three", "string", NULL, 1); + widget_add (server_screen, "title", "title", NULL, 1); + widget_add (server_screen, "one", "string", NULL, 1); + widget_add (server_screen, "two", "string", NULL, 1); + widget_add (server_screen, "three", "string", NULL, 1); // Now, initialize all the widgets... - w = widget_find(server_screen, "title"); - if(w) - { + w = widget_find (server_screen, "title"); + if (w) { w->text = title; + } else { + fprintf (stderr, "server_screen_init: Can't find title\n"); } - else - { - fprintf(stderr, "server_screen_init: Can't find title\n"); - } - - w = widget_find(server_screen, "one"); - if(w) - { + + w = widget_find (server_screen, "one"); + if (w) { w->x = 1; w->y = 2; w->text = one; + } else { + fprintf (stderr, "server_screen_init: Can't find widget one\n"); } - else - { - fprintf(stderr, "server_screen_init: Can't find widget one\n"); - } - - w = widget_find(server_screen, "two"); - if(w) - { + + w = widget_find (server_screen, "two"); + if (w) { w->x = 1; w->y = 3; w->text = two; + } else { + fprintf (stderr, "server_screen_init: Can't find widget two\n"); } - else - { - fprintf(stderr, "server_screen_init: Can't find widget two\n"); - } - - w = widget_find(server_screen, "three"); - if(w) - { + + w = widget_find (server_screen, "three"); + if (w) { w->x = 1; w->y = 4; w->text = three; + } else { + fprintf (stderr, "server_screen_init: Can't find widget three\n"); } - else - { - fprintf(stderr, "server_screen_init: Can't find widget three\n"); - } - - + + // And enqueue the screen - screenlist_add(server_screen); + screenlist_add (server_screen); + + debug ("server_screen_init done\n"); - debug("server_screen_init done\n"); - return 0; } -int update_server_screen(int timer) +int +update_server_screen (int timer) { client *c; int num_clients; screen *s; int num_screens; - - + + // Draw a title... //strcpy(title, "LCDproc Server"); // Now get info on the number of connected clients... - num_clients=0; num_screens=0; - LL_Rewind(clients); + num_clients = 0; + num_screens = 0; + LL_Rewind (clients); do { - c = LL_Get(clients); - if(c) - { + c = LL_Get (clients); + if (c) { num_clients++; - LL_Rewind(c->data->screenlist); + LL_Rewind (c->data->screenlist); do { - s = LL_Get(c->data->screenlist); - if(s) - { + s = LL_Get (c->data->screenlist); + if (s) { num_screens++; } - } while(LL_Next(c->data->screenlist) == 0); + } while (LL_Next (c->data->screenlist) == 0); } - } while(LL_Next(clients) == 0); + } while (LL_Next (clients) == 0); - if(lcd.hgt >= 3) - { - sprintf(one, "Clients: %i", num_clients); - sprintf(two, "Screens: %i", num_screens); + if (lcd.hgt >= 3) { + sprintf (one, "Clients: %i", num_clients); + sprintf (two, "Screens: %i", num_screens); + } else { + if (lcd.wid >= 20) + sprintf (one, "%i Client%s, %i Screen%s", num_clients, (num_clients == 1) ? "" : "s", num_screens, (num_screens == 1) ? "" : "s"); + else // 16x2 size + sprintf (one, "%i Cli%s, %i Scr%s", num_clients, (num_clients == 1) ? "" : "s", num_screens, (num_screens == 1) ? "" : "s"); } - else - { - if(lcd.wid >= 20) - sprintf(one, "%i Client%s, %i Screen%s", - num_clients, (num_clients==1)?"":"s", - num_screens, (num_screens==1)?"":"s"); - else // 16x2 size - sprintf(one, "%i Cli%s, %i Scr%s", - num_clients, (num_clients==1)?"":"s", - num_screens, (num_screens==1)?"":"s"); - } - + return 0; } -int no_screen_screen(int timer) +int +no_screen_screen (int timer) { - - lcd.clear(); - lcd.string(1, 1, "Error: No screen!"); - - lcd.flush(); - + lcd.clear (); + + lcd.string (1, 1, "Error: No screen!"); + + lcd.flush (); + return 0; } -int goodbye_screen() +int +goodbye_screen () { char - *b20 = " ", - *t20 = " Thanks for using ", + *b20 = " ", *t20 = " Thanks for using ", #ifdef LINUX - *l20 = " LCDproc and Linux! ", + *l20 = " LCDproc and Linux! ", #else - *l20 = " LCDproc! ", + *l20 = " LCDproc! ", #endif - *b16 = " ", - *t16 = "Thanks for using", + *b16 = " ", *t16 = "Thanks for using", #ifdef LINUX - *l16 = " LCDproc+Linux! ", + *l16 = " LCDproc+Linux! ", #else - *l16 = " LCDproc! ", + *l16 = " LCDproc! ", #endif - *nil = ""; - - lcd.clear(); + *nil = ""; - if(lcd.hgt >= 4) - { - if(lcd.wid >= 20) - { - lcd.string(1, 1, b20); - lcd.string(1, 2, t20); - lcd.string(1, 3, l20); - lcd.string(1, 4, b20); + lcd.clear (); + + if (lcd.hgt >= 4) { + if (lcd.wid >= 20) { + lcd.string (1, 1, b20); + lcd.string (1, 2, t20); + lcd.string (1, 3, l20); + lcd.string (1, 4, b20); + } else { + lcd.string (1, 1, b16); + lcd.string (1, 2, t16); + lcd.string (1, 3, l16); + lcd.string (1, 4, b16); } - else - { - lcd.string(1, 1, b16); - lcd.string(1, 2, t16); - lcd.string(1, 3, l16); - lcd.string(1, 4, b16); + } else { + if (lcd.wid >= 20) { + lcd.string (1, 1, t20); + lcd.string (1, 2, l20); + } else { + lcd.string (1, 1, t16); + lcd.string (1, 2, l16); } } - else - { - if(lcd.wid >= 20) - { - lcd.string(1, 1, t20); - lcd.string(1, 2, l20); - } - else - { - lcd.string(1, 1, t16); - lcd.string(1, 2, l16); - } - } - - lcd.flush(); - + + lcd.flush (); + return 0; } - diff --git a/server/serverscreens.h b/server/serverscreens.h index 0382490..078072e 100644 --- a/server/serverscreens.h +++ b/server/serverscreens.h @@ -6,9 +6,9 @@ extern screen *server_screen; -int server_screen_init(); -int update_server_screen(int timer); -int no_screen_screen(int timer); -int goodbye_screen(); +int server_screen_init (); +int update_server_screen (int timer); +int no_screen_screen (int timer); +int goodbye_screen (); #endif diff --git a/server/sock.c b/server/sock.c index eb69b39..6f65995 100644 --- a/server/sock.c +++ b/server/sock.c @@ -36,65 +36,63 @@ int read_from_client (int filedes); // Creates a socket in internet space -int sock_create_inet_socket(unsigned short int port) +int +sock_create_inet_socket (unsigned short int port) { - struct sockaddr_in name; - int sock; + struct sockaddr_in name; + int sock; + + debug ("sock_create_inet_socket(%i)\n", port); + + /* Create the socket. */ + //debug("Creating Inet Socket\n"); + sock = socket (PF_INET, SOCK_STREAM, 0); + if (sock < 0) { + perror ("Error creating socket"); + return -1; + } + + /* Give the socket a name. */ + //debug("Binding Inet Socket\n"); + name.sin_family = AF_INET; + name.sin_port = htons (port); + name.sin_addr.s_addr = htonl (INADDR_ANY); + if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) { + perror ("Error binding socket"); + return -1; + } + + return sock; - debug("sock_create_inet_socket(%i)\n", port); - - /* Create the socket. */ - //debug("Creating Inet Socket\n"); - sock = socket (PF_INET, SOCK_STREAM, 0); - if (sock < 0) - { - perror("Error creating socket"); - return -1; - } - - /* Give the socket a name. */ - //debug("Binding Inet Socket\n"); - name.sin_family = AF_INET; - name.sin_port = htons (port); - name.sin_addr.s_addr = htonl (INADDR_ANY); - if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) - { - perror("Error binding socket"); - return -1; - } - - return sock; - } //int StartSocketServer() -int sock_create_server() +int +sock_create_server () { int sock; - - debug("sock_create_server()\n"); - - /* Create the socket and set it up to accept connections. */ - sock = sock_create_inet_socket(LCDPORT); - if(sock < 0) - { - perror("sock_create_server: Error creating socket"); - return -1; - } - - - if (listen (sock, 1) < 0) - { - perror("sock_create_server: Listen error"); - return -1; - } - - /* Initialize the set of active sockets. */ - FD_ZERO (&active_fd_set); - FD_SET (sock, &active_fd_set); - orig_sock = sock; - + debug ("sock_create_server()\n"); + + /* Create the socket and set it up to accept connections. */ + sock = sock_create_inet_socket (LCDPORT); + if (sock < 0) { + perror ("sock_create_server: Error creating socket"); + return -1; + } + + + if (listen (sock, 1) < 0) { + perror ("sock_create_server: Listen error"); + return -1; + } + + /* Initialize the set of active sockets. */ + FD_ZERO (&active_fd_set); + FD_SET (sock, &active_fd_set); + + orig_sock = sock; + /* { int val, len, sock; @@ -110,11 +108,12 @@ int sock_create_server() } */ - return sock; + return sock; } -int sock_poll_clients() +int +sock_poll_clients () { int i; int err; @@ -122,82 +121,64 @@ int sock_poll_clients() size_t size; struct timeval t; client *c; - + //debug("sock_poll_clients()\n"); - + t.tv_sec = 0; t.tv_usec = 0; /* Block until input arrives on one or more active sockets. */ read_fd_set = active_fd_set; - - if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, &t) < 0) - { - perror("sock_poll_clients: Select error"); + + if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, &t) < 0) { + perror ("sock_poll_clients: Select error"); return -1; } /* Service all the sockets with input pending. */ - for (i = 0; i < FD_SETSIZE; ++i) - { - if (FD_ISSET (i, &read_fd_set)) - { - if (i == orig_sock) - { + for (i = 0; i < FD_SETSIZE; ++i) { + if (FD_ISSET (i, &read_fd_set)) { + if (i == orig_sock) { /* Connection request on original socket. */ int new; size = sizeof (clientname); - new = accept (orig_sock, - (struct sockaddr *) &clientname, - &size); - if (new < 0) - { - perror("sock_poll_clients: Accept error"); + new = accept (orig_sock, (struct sockaddr *) &clientname, &size); + if (new < 0) { + perror ("sock_poll_clients: Accept error"); return -1; } - debug("sock_poll_clients: connect from host %s, port %hd.\n", - inet_ntoa (clientname.sin_addr), - ntohs (clientname.sin_port)); + debug ("sock_poll_clients: connect from host %s, port %hd.\n", inet_ntoa (clientname.sin_addr), ntohs (clientname.sin_port)); FD_SET (new, &active_fd_set); - fcntl(new, F_SETFL, O_NONBLOCK); - + fcntl (new, F_SETFL, O_NONBLOCK); - // TODO: Create new "client" here... (done?) - if ( client_create(new) == NULL) - { - fprintf(stderr, - "sock_poll_clients: error creating client %i\n", - i); + + // TODO: Create new "client" here... (done?) + if (client_create (new) == NULL) { + fprintf (stderr, "sock_poll_clients: error creating client %i\n", i); return -1; } - } - else - { + } else { /* Data arriving on an already-connected socket. */ err = 0; do { - debug("sock_poll_clients: reading...\n"); - err = read_from_client(i); - debug("sock_poll_clients: ...done\n"); - if (err < 0) - { + debug ("sock_poll_clients: reading...\n"); + err = read_from_client (i); + debug ("sock_poll_clients: ...done\n"); + if (err < 0) { // TODO: Destroy a "client" here... (done?) - c = client_find_sock(i); - if(c) - { + c = client_find_sock (i); + if (c) { //sock_send_string(i, "bye\n"); - client_destroy(c); + client_destroy (c); close (i); FD_CLR (i, &active_fd_set); - debug("sock_poll_clients: Closed connection %i\n", i); - } - else fprintf(stderr, - "sock_poll_clients: Can't find client %i\n", - i); + debug ("sock_poll_clients: Closed connection %i\n", i); + } else + fprintf (stderr, "sock_poll_clients: Can't find client %i\n", i); } } while (err > 0); - + } } } @@ -205,48 +186,46 @@ int sock_poll_clients() } -int read_from_client (int filedes) +int +read_from_client (int filedes) { char buffer[MAXMSG]; int nbytes, i; client *c; - + // nbytes = read (filedes, buffer, MAXMSG); //debug("read_from_client(%i): reading...\n", filedes); nbytes = sock_recv (filedes, buffer, MAXMSG); //debug("read_from_client(%i): ...done\n", filedes); - debug("read_from_client(%i): %i bytes\n", filedes, nbytes); - - - if (nbytes < 0) // Read error? No data available? + debug ("read_from_client(%i): %i bytes\n", filedes, nbytes); + + + if (nbytes < 0) // Read error? No data available? { // TODO: check errno here! //fprintf (stderr,"read_from_client: Read error\n"); return 0; - } - else if (nbytes == 0) // EOF + } else if (nbytes == 0) // EOF return -1; - else if (nbytes > (MAXMSG - (MAXMSG / 8))) // Very noisy client... + else if (nbytes > (MAXMSG - (MAXMSG / 8))) // Very noisy client... { - sock_send_string(filedes, "huh? Shut up!\n"); + sock_send_string (filedes, "huh? Shut up!\n"); return -1; - } - else // Data Read + } else // Data Read { buffer[nbytes] = 0; // Now, replace zeros with linefeeds... - for(i=0; ispeed = 1; w->text = NULL; w->kids = NULL; - + return w; } -int widget_destroy(widget *w) +int +widget_destroy (widget * w) { - LL * list; + LL *list; widget *foo; - - if(!w) return -1; - debug("widget_destroy(%s)\n", w->id); - - if(w->id) free(w->id); + if (!w) + return -1; + + debug ("widget_destroy(%s)\n", w->id); + + if (w->id) + free (w->id); //debug("widget_destroy: id...\n"); - if(w->text) free(w->text); + if (w->text) + free (w->text); //debug("widget_destroy: text...\n"); // TODO: Free kids! - if(w->kids) - { + if (w->kids) { list = w->kids; - LL_Rewind(list); + LL_Rewind (list); do { - foo = LL_Get(list); - if(foo) - widget_destroy(foo); - } while( 0 == LL_Next(list) ); + foo = LL_Get (list); + if (foo) + widget_destroy (foo); + } while (0 == LL_Next (list)); - LL_Destroy(list); + LL_Destroy (list); w->kids = NULL; } - - free(w); + + free (w); //debug("widget_destroy: widget...\n"); return 0; } -widget * widget_find(screen *s, char *id) +widget * +widget_find (screen * s, char *id) { //widget *w, *err; - if(!s) return NULL; - if(!id) return NULL; + if (!s) + return NULL; + if (!id) + return NULL; - debug("widget_find(%s)\n", id); - - return widget_finder(s->widgets, id); + debug ("widget_find(%s)\n", id); + + return widget_finder (s->widgets, id); /* LL_Rewind(s->widgets); do { @@ -125,186 +131,168 @@ widget * widget_find(screen *s, char *id) */ } -widget * widget_finder(LL *list, char *id) +widget * +widget_finder (LL * list, char *id) { widget *w, *err; - if(!list) return NULL; - if(!id) return NULL; + if (!list) + return NULL; + if (!id) + return NULL; - debug("widget_finder(%s)\n", id); - - LL_Rewind(list); + debug ("widget_finder(%s)\n", id); + + LL_Rewind (list); do { //debug("widget_finder: Iteration\n"); - w = LL_Get(list); - if(w) - { + w = LL_Get (list); + if (w) { //debug("widget_finder: ...\n"); - if(0 == strcmp(w->id, id)) - { - debug("widget_finder: Found %s\n", id); + if (0 == strcmp (w->id, id)) { + debug ("widget_finder: Found %s\n", id); return w; } // Search kids recursively //debug("widget_finder: ...\n"); - if( w->type == WID_FRAME ) - { - err = widget_finder(w->kids, id); - if(err) return err; + if (w->type == WID_FRAME) { + err = widget_finder (w->kids, id); + if (err) + return err; } //debug("widget_finder: ...\n"); } - - } while(LL_Next(list) == 0); + + } while (LL_Next (list) == 0); return NULL; } -int widget_add(screen *s, char *id, char *type, char *in, int sock) +int +widget_add (screen * s, char *id, char *type, char *in, int sock) { int i; - int valid=0; - int wid_type=0; + int valid = 0; + int wid_type = 0; widget *w, *parent; LL *list; - - debug("widget_add(%s, %s, %s)\n", id, type, in); - - if(!s) return -1; - if(!id) return -1; + debug ("widget_add(%s, %s, %s)\n", id, type, in); + + + if (!s) + return -1; + if (!id) + return -1; list = s->widgets; - - if(0 == strcmp(id, "heartbeat")) - { + + if (0 == strcmp (id, "heartbeat")) { s->heartbeat = 1; return 0; } - // Make sure this screen doesn't already exist... - w = widget_find(s, id); - if(w) - { + w = widget_find (s, id); + if (w) { // already exists - sock_send_string(sock, - "huh? You already have a widget with that id#\n"); + sock_send_string (sock, "huh? You already have a widget with that id#\n"); return 1; } - // Make sure the container, if any, is real - if(in) - { - parent = widget_find(s, in); - if(!parent) - { + if (in) { + parent = widget_find (s, in); + if (!parent) { // no frame to use as parent - sock_send_string(sock, "huh? Frame doesn't exist\n"); + sock_send_string (sock, "huh? Frame doesn't exist\n"); return 3; - } - else - { - if(parent->type == WID_FRAME) - { + } else { + if (parent->type == WID_FRAME) { list = parent->kids; - if(!list) fprintf(stderr, "widget_add: Parent has no kids\n"); - } - else - { + if (!list) + fprintf (stderr, "widget_add: Parent has no kids\n"); + } else { // no frame to use as parent - sock_send_string(sock, "huh? Not a frame\n"); + sock_send_string (sock, "huh? Not a frame\n"); return 4; } } } - // Make sure it's a valid widget type - for(i=1; types[i]; i++) - { - if(0 == strcmp(types[i], type)) - { - valid=1; - wid_type=i; + for (i = 1; types[i]; i++) { + if (0 == strcmp (types[i], type)) { + valid = 1; + wid_type = i; } } - if(!valid) - { + if (!valid) { // invalid widget type - sock_send_string(sock, "huh? Invalid widget type\n"); + sock_send_string (sock, "huh? Invalid widget type\n"); return 2; } - debug("widget_add: making widget\n"); - + debug ("widget_add: making widget\n"); + // Now, make it... - w = widget_create(); - if(!w) - { - fprintf(stderr, "widget_add: Error creating widget\n"); + w = widget_create (); + if (!w) { + fprintf (stderr, "widget_add: Error creating widget\n"); return -1; } - w->id = strdup(id); - if(!w->id) - { - fprintf(stderr, "widget_add: Error allocating id\n"); + w->id = strdup (id); + if (!w->id) { + fprintf (stderr, "widget_add: Error allocating id\n"); return -1; } w->type = wid_type; - + // Set up the container's widget list... - if(w->type == WID_FRAME) - { - if(!w->kids) - { - w->kids = LL_new(); - if(!w->kids) - { - fprintf(stderr, "widget_add: error allocating kids for frame\n"); + if (w->type == WID_FRAME) { + if (!w->kids) { + w->kids = LL_new (); + if (!w->kids) { + fprintf (stderr, "widget_add: error allocating kids for frame\n"); return -1; } } } - // TODO: Check for errors here? - LL_Push(list, (void *)w); - + LL_Push (list, (void *) w); + return 0; } -int widget_remove(screen *s, char *id, int sock) +int +widget_remove (screen * s, char *id, int sock) { widget *w; LL *list; - - debug("widget_remove(%s)\n", id); - - if(!s) return -1; - if(!id) return -1; - + + debug ("widget_remove(%s)\n", id); + + if (!s) + return -1; + if (!id) + return -1; + list = s->widgets; - - - if(0 == strcmp(id, "heartbeat")) - { + + + if (0 == strcmp (id, "heartbeat")) { s->heartbeat = 0; return 0; } - // Make sure this screen *does* exist... - w = widget_find(s, id); - if(!w) - { - sock_send_string(sock, - "huh? You don't have a widget with that id#\n"); - debug("widget_remove: Error finding widget %s\n", id); + w = widget_find (s, id); + if (!w) { + sock_send_string (sock, "huh? You don't have a widget with that id#\n"); + debug ("widget_remove: Error finding widget %s\n", id); return 1; } @@ -318,74 +306,68 @@ int widget_remove(screen *s, char *id, int sock) // widget_destroy(w); */ - return widget_remover(list, w); - + return widget_remover (list, w); + // return 0; } -int widget_remover(LL *list, widget *w) +int +widget_remover (LL * list, widget * w) { widget *foo, *bar; int err; - debug("widget_remover\n"); - - if(!list) return 0; - if(!w) return 0; + debug ("widget_remover\n"); + + if (!list) + return 0; + if (!w) + return 0; + - // Search through the list... - LL_Rewind(list); + LL_Rewind (list); do { // Test each item - foo = LL_Get(list); - if(foo) - { + foo = LL_Get (list); + if (foo) { // Frames require recursion to search and/or destroy - if(foo->type == WID_FRAME) - { + if (foo->type == WID_FRAME) { // If removing a frame, kill all its kids, too... - if(foo == w) - { - if(!foo->kids) + if (foo == w) { + if (!foo->kids) { + fprintf (stderr, "widget_remover: frame has no kids\n"); + } else // Kill the kids... { - fprintf(stderr, "widget_remover: frame has no kids\n"); - } - else // Kill the kids... - { - LL_Rewind(foo->kids); + LL_Rewind (foo->kids); do { - bar = LL_Get(foo->kids); - err = widget_remover(foo->kids, bar); - } while(0 == LL_Next(foo->kids)); + bar = LL_Get (foo->kids); + err = widget_remover (foo->kids, bar); + } while (0 == LL_Next (foo->kids)); // Then kill the parent... - LL_Remove(list, (void *)w); - widget_destroy(w); + LL_Remove (list, (void *) w); + widget_destroy (w); } - - } - else // Otherwise, search the frame recursively... + + } else // Otherwise, search the frame recursively... { - if(!foo->kids) - { - fprintf(stderr, "widget_remover: frame has no kids\n"); - } - else err = widget_remover(foo->kids, w); - + if (!foo->kids) { + fprintf (stderr, "widget_remover: frame has no kids\n"); + } else + err = widget_remover (foo->kids, w); + } - } - else // If not a frame, remove it if it matches... + } else // If not a frame, remove it if it matches... { - if(foo == w) - { - LL_Remove(list, (void *)w); - widget_destroy(w); + if (foo == w) { + LL_Remove (list, (void *) w); + widget_destroy (w); } } } - } while(0 == LL_Next(list)); + } while (0 == LL_Next (list)); return 0; } diff --git a/server/widget.h b/server/widget.h index cc6e757..f357b59 100644 --- a/server/widget.h +++ b/server/widget.h @@ -3,18 +3,17 @@ #include "screen.h" -typedef struct widget -{ - char *id; - int type; - // some sort of data here... - int x, y; // Position - int wid, hgt; // Size - int left, top, right, bottom; // bounding rectangle - int length; // size or direction - int speed; // For scroller... - char *text; // text or binary data - LL *kids; // Frames can contain more widgets... +typedef struct widget { + char *id; + int type; + // some sort of data here... + int x, y; // Position + int wid, hgt; // Size + int left, top, right, bottom; // bounding rectangle + int length; // size or direction + int speed; // For scroller... + char *text; // text or binary data + LL *kids; // Frames can contain more widgets... } widget; // These correspond to the index into the "types" array... @@ -33,13 +32,13 @@ typedef struct widget extern char *types[]; -widget * widget_create(); -int widget_destroy(widget *w); +widget *widget_create (); +int widget_destroy (widget * w); -widget * widget_find(screen *s, char *id); +widget *widget_find (screen * s, char *id); -int widget_add(screen *s, char *id, char *type, char *in, int sock); -int widget_remove(screen *s, char *id, int sock); +int widget_add (screen * s, char *id, char *type, char *in, int sock); +int widget_remove (screen * s, char *id, int sock); #endif