diff options
author | reinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2000-03-18 08:07:04 +0000 |
---|---|---|
committer | reinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2000-03-18 08:07:04 +0000 |
commit | 0ec6be5c5334768655395a3f6a3c6ed38c380e8d (patch) | |
tree | bd22e3f198447c32b0c100b33bcd140ff73eec09 | |
parent | db5e3666b5a2e9d3e35ada41ebf0a1a2e0897e53 (diff) | |
download | lcd4linux-0ec6be5c5334768655395a3f6a3c6ed38c380e8d.tar.gz |
[lcd4linux @ 2000-03-18 08:07:04 by reinelt]
vertical bars implemented
bar compaction improved
memory information implemented
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@12 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r-- | MatrixOrbital.c | 110 | ||||
-rw-r--r-- | display.c | 9 | ||||
-rw-r--r-- | lcd4linux.c | 53 | ||||
-rw-r--r-- | lcd4linux.conf.sample | 18 | ||||
-rw-r--r-- | system.c | 30 |
5 files changed, 157 insertions, 63 deletions
diff --git a/MatrixOrbital.c b/MatrixOrbital.c index 8e7a0c5..0762b87 100644 --- a/MatrixOrbital.c +++ b/MatrixOrbital.c @@ -1,4 +1,4 @@ -/* $Id: MatrixOrbital.c,v 1.6 2000/03/17 09:21:42 reinelt Exp $ +/* $Id: MatrixOrbital.c,v 1.7 2000/03/18 08:07:04 reinelt Exp $ * * driver for Matrix Orbital serial display modules * @@ -20,6 +20,12 @@ * * * $Log: MatrixOrbital.c,v $ + * Revision 1.7 2000/03/18 08:07:04 reinelt + * + * vertical bars implemented + * bar compaction improved + * memory information implemented + * * Revision 1.6 2000/03/17 09:21:42 reinelt * * various memory statistics added @@ -59,8 +65,7 @@ #define XRES 5 #define YRES 8 #define CHARS 8 -#define BARS ( BAR_L | BAR_R | BAR_H2 ) -// Fixme: BAR_U, BAR_D +#define BARS ( BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 ) static DISPLAY Display; static char *Port=NULL; @@ -86,8 +91,8 @@ static char Txt[4][40]; static BAR Bar[4][40]; static int nSegment=2; -static SEGMENT Segment[256] = {{ len1: 0, len2: 0, type:255, used:0, ascii:32 }, - { len1:XRES, len2:XRES, type:255, used:0, ascii:255 }}; +static SEGMENT Segment[256] = {{ len1:0, len2:0, type:255, used:0, ascii:32 }, + { len1:255, len2:255, type:255, used:0, ascii:255 }}; static int MO_open (void) @@ -170,35 +175,49 @@ static void MO_process_bars (void) } } -#define sqr(x) ((x)*(x)) +static int MO_segment_diff (int i, int j) +{ + int RES; + int i1, i2, j1, j2; + + if (i==j) return 65535; + if (!(Segment[i].type & Segment[j].type)) return 65535; + if (Segment[i].len1==0 && Segment[j].len1!=0) return 65535; + if (Segment[i].len2==0 && Segment[j].len2!=0) return 65535; + RES=Segment[i].type & BAR_H ? XRES:YRES; + if (Segment[i].len1>=RES && Segment[j].len1<RES) return 65535; + if (Segment[i].len2>=RES && Segment[j].len2<RES) return 65535; + if (Segment[i].len1==Segment[i].len2 && Segment[j].len1!=Segment[j].len2) return 65535; + + i1=Segment[i].len1; if (i1>RES) i1=RES; + i2=Segment[i].len2; if (i2>RES) i2=RES; + j1=Segment[j].len1; if (j1>RES) i1=RES; + j2=Segment[j].len2; if (j2>RES) i2=RES; + + return (i1-i2)*(i1-i2)+(j1-j2)*(j1-j2); +} static void MO_compact_bars (void) { int i, j, r, c, min; int pack_i, pack_j; + int pass1=1; int error[nSegment][nSegment]; if (nSegment>CHARS+2) { + for (i=2; i<nSegment; i++) { for (j=0; j<nSegment; j++) { - error[i][j]=65535; - if (i==j) continue; - if (Segment[i].used) continue; - if (!(Segment[i].type & Segment[j].type)) continue; - if (Segment[i].len1==0 && Segment[j].len1!=0) continue; - if (Segment[i].len2==0 && Segment[j].len2!=0) continue; - if (Segment[i].len1==XRES && Segment[j].len1!=XRES) continue; - if (Segment[i].len2==XRES && Segment[j].len2!=XRES) continue; - if (Segment[i].len1==Segment[i].len2 && Segment[j].len1!=Segment[j].len2) continue; - error[i][j]=sqr(Segment[i].len1-Segment[j].len1)+sqr(Segment[i].len2-Segment[j].len2); + error[i][j]=MO_segment_diff(i,j); } } - + while (nSegment>CHARS+2) { min=65535; pack_i=-1; pack_j=-1; for (i=2; i<nSegment; i++) { + if (pass1 && Segment[i].used) continue; for (j=0; j<nSegment; j++) { if (error[i][j]<min) { min=error[i][j]; @@ -208,11 +227,16 @@ static void MO_compact_bars (void) } } if (pack_i==-1) { - fprintf (stderr, "MatrixOrbital: unable to compact bar characters\n"); - nSegment=CHARS; - break; + if (pass1) { + pass1=0; + continue; + } else { + fprintf (stderr, "MatrixOrbital: unable to compact bar characters\n"); + nSegment=CHARS; + break; + } } - + nSegment--; Segment[pack_i]=Segment[nSegment]; @@ -220,7 +244,7 @@ static void MO_compact_bars (void) error[pack_i][i]=error[nSegment][i]; error[i][pack_i]=error[i][nSegment]; } - + for (r=0; r<Display.rows; r++) { for (c=0; c<Display.cols; c++) { if (Bar[r][c].segment==pack_i) @@ -264,6 +288,22 @@ static void MO_define_chars (void) buffer[j+7]=Pixel[Segment[i].len2]; } break; + case BAR_U: + for (j=0; j<Segment[i].len1; j++) { + buffer[10-j]=31; + } + for (; j<YRES; j++) { + buffer[10-j]=0; + } + break; + case BAR_D: + for (j=0; j<Segment[i].len1; j++) { + buffer[j+3]=31; + } + for (; j<YRES; j++) { + buffer[j+3]=0; + } + break; } MO_write (buffer, 11); } @@ -393,9 +433,31 @@ int MO_bar (int type, int row, int col, int max, int len1, int len2) break; case BAR_U: - break; - + len1=max-len1; + len2=max-len2; + rev=1; + case BAR_D: + while (max>0 && row<=Display.rows) { + Bar[row][col].type=type; + Bar[row][col].segment=-1; + if (len1>=YRES) { + Bar[row][col].len1=rev?0:YRES; + len1-=YRES; + } else { + Bar[row][col].len1=rev?YRES-len1:len1; + len1=0; + } + if (len2>=YRES) { + Bar[row][col].len2=rev?0:YRES; + len2-=YRES; + } else { + Bar[row][col].len2=rev?YRES-len2:len2; + len2=0; + } + max-=YRES; + row++; + } break; } @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.6 2000/03/17 09:21:42 reinelt Exp $ +/* $Id: display.c,v 1.7 2000/03/18 08:07:04 reinelt Exp $ * * framework for device drivers * @@ -20,6 +20,12 @@ * * * $Log: display.c,v $ + * Revision 1.7 2000/03/18 08:07:04 reinelt + * + * vertical bars implemented + * bar compaction improved + * memory information implemented + * * Revision 1.6 2000/03/17 09:21:42 reinelt * * various memory statistics added @@ -141,4 +147,3 @@ int lcd_flush (void) { return Display->flush(); } - diff --git a/lcd4linux.c b/lcd4linux.c index 9a264dc..9797d9e 100644 --- a/lcd4linux.c +++ b/lcd4linux.c @@ -1,4 +1,4 @@ -/* $Id: lcd4linux.c,v 1.4 2000/03/17 09:21:42 reinelt Exp $ +/* $Id: lcd4linux.c,v 1.5 2000/03/18 08:07:04 reinelt Exp $ * * LCD4Linux * @@ -20,6 +20,12 @@ * * * $Log: lcd4linux.c,v $ + * Revision 1.5 2000/03/18 08:07:04 reinelt + * + * vertical bars implemented + * bar compaction improved + * memory information implemented + * * Revision 1.4 2000/03/17 09:21:42 reinelt * * various memory statistics added @@ -34,7 +40,6 @@ * * first unstable but running release * - * */ #include <stdlib.h> @@ -250,14 +255,9 @@ void print_token (int token, char **p) case T_MEM_APP: *p+=sprintf (*p, "%6.0f", query(token)); break; - case T_CPU_USER: - case T_CPU_NICE: - case T_CPU_SYSTEM: - case T_CPU_BUSY: - case T_CPU_IDLE: - *p+=sprintf (*p, "%3.0f", 100.0*query(token)); - break; - default: + case T_LOAD_1: + case T_LOAD_2: + case T_LOAD_3: val=query(token); if (val<10.0) { *p+=sprintf (*p, "%4.2f", val); @@ -266,6 +266,25 @@ void print_token (int token, char **p) } else { *p+=sprintf (*p, "%4.0f", val); } + break; + case T_CPU_USER: + case T_CPU_NICE: + case T_CPU_SYSTEM: + case T_CPU_BUSY: + case T_CPU_IDLE: + *p+=sprintf (*p, "%3.0f", 100.0*query(token)); + break; + case T_ISDN_IN: + case T_ISDN_OUT: + case T_ISDN_MAX: + case T_ISDN_TOTAL: + if (isdn.usage) + *p+=sprintf (*p, "%4.0f", query(token)); + else + *p+=sprintf (*p, "----"); + break; + default: + *p+=sprintf (*p, "%4.0f", query(token)); } } @@ -283,13 +302,14 @@ char *process_row (int r, char *s) int type=*++s; int len=*++s; double val1=query_bar(*(unsigned char*)++s); - double val2; + double val2=val1; if (type & (BAR_H2 | BAR_V2)) val2=query_bar(*(unsigned char*)++s); + if (type & BAR_H) + lcd_bar (type, r, p-buffer+1, len*xres, val1*len*xres, val2*len*xres); else - val2=val1; - lcd_bar (type, r, p-buffer+1, len*xres, val1*len*xres, val2*len*xres); - + lcd_bar (type, r, p-buffer+1, len*yres, val1*len*yres, val2*len*yres); + if (type & BAR_H) { for (i=0; i<len && p-buffer<cols; i++) *p++='\t'; @@ -313,7 +333,7 @@ void main (int argc, char *argv[]) char *display; char *row[ROWS]; int i, smooth; - + if (argc>2) { usage(); exit (2); @@ -360,7 +380,6 @@ void main (int argc, char *argv[]) } lcd_clear(); - lcd_put (1, 1, "** LCD4Linux V" VERSION " **"); lcd_put (2, 1, " (c) 2000 M.Reinelt"); lcd_flush(); @@ -379,6 +398,6 @@ void main (int argc, char *argv[]) lcd_flush(); smooth+=tick; if (smooth>tack) smooth=0; - usleep(1000*tick); + usleep(tick*1000); } } diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index 799dc35..69e6a53 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -8,21 +8,15 @@ Contrast 160 #Row3 "Busy %cu%% $r10cs+cb" #Row4 "Load %l1%L$r10l1" -Row1 "CPU %cu%% $r10cs+cb" -Row2 "%mf %ms %ma" -#Row2 "Disk %dm $R10dr+dw" +Row1 "Load %l1%L$r10cs+cb" +Row2 "Disk %dm $R10dr+dw" Row3 "Net %nm $R10nr+nw" Row4 "ISDN %im $r10ii+io" -#Row1 "CPU $l6cs+cb$R6dr+dw I/O" -#Row2 "I/O $R16dr+dw" -#Row3 "LAN $R16nr+nw" -#Row4 "WAN $r16ii+io" - -#Row1 "" -#Row2 "" -#Row3 "$u3cs $u3cb " -#Row4 "CPU I/O LAN WAN" +#Row1 "$u3l1$u3cb$u3cs $u3mu$u3ma$u3ms $u3dr$u3dw $u3nr$u3nw $u3ii$u3io" +#Row2 " " +#Row3 " " +#Row4 "CPU MEM IO IP" Tick 100 Tack 400 @@ -1,4 +1,4 @@ -/* $Id: system.c,v 1.6 2000/03/17 09:21:42 reinelt Exp $ +/* $Id: system.c,v 1.7 2000/03/18 08:07:04 reinelt Exp $ * * system status retreivement * @@ -20,6 +20,12 @@ * * * $Log: system.c,v $ + * Revision 1.7 2000/03/18 08:07:04 reinelt + * + * vertical bars implemented + * bar compaction improved + * memory information implemented + * * Revision 1.6 2000/03/17 09:21:42 reinelt * * various memory statistics added @@ -107,7 +113,7 @@ #include <linux/sys.h> #endif -static unsigned long parse_meminfo (char *tag, char *buffer) +static int parse_meminfo (char *tag, char *buffer) { char *p; unsigned long val; @@ -190,18 +196,26 @@ int Memory(void) int Ram (int *total, int *free, int *shared, int *buffered, int *cached) { + static time_t now=0; static int fd=-2; - unsigned long v1, v2, v3, v4, v5; + static int v1=0; + static int v2=0; + static int v3=0; + static int v4=0; + static int v5=0; char buffer[4096]; - *total=0; - *free=0; - *shared=0; - *buffered=0; - *cached=0; + *total=v1; + *free=v2; + *shared=v3; + *buffered=v4; + *cached=v5; if (fd==-1) return -1; + if (time(NULL)==now) return 0; + time(&now); + if (fd==-2) { fd = open("/proc/meminfo", O_RDONLY | O_NDELAY); if (fd==-1) { |