diff options
-rw-r--r-- | cfg.c | 23 | ||||
-rw-r--r-- | drv_MatrixOrbital.c | 11 | ||||
-rw-r--r-- | layout.c | 43 | ||||
-rw-r--r-- | widget.c | 9 |
4 files changed, 67 insertions, 19 deletions
@@ -1,4 +1,4 @@ -/* $Id: cfg.c,v 1.24 2004/01/10 20:22:33 reinelt Exp $^ +/* $Id: cfg.c,v 1.25 2004/01/11 09:26:15 reinelt Exp $^ * * config file stuff * @@ -23,6 +23,9 @@ * * * $Log: cfg.c,v $ + * Revision 1.25 2004/01/11 09:26:15 reinelt + * layout starts to exist... + * * Revision 1.24 2004/01/10 20:22:33 reinelt * added new function 'cfg_list()' (not finished yet) * added layout.c (will replace processor.c someday) @@ -150,6 +153,11 @@ * cfg_cmd can be called _before_ cfg_read() * returns 0 if ok, -1 if arg cannot be parsed * + * cfg_list (section) + * returns a list of all keys in the specified section + * This list was allocated be cfg_list() and must be + * freed by the caller! + * * cfg_get (section, key, defval) * return the a value for a given key in a given section * or <defval> if key does not exist @@ -323,7 +331,7 @@ int l4l_cfg_cmd (char *arg) char *l4l_cfg_list (char *section) { int i, len; - char *key; + char *key, *list; // calculate key length len=strlen(section)+1; @@ -333,14 +341,21 @@ char *l4l_cfg_list (char *section) strcpy (key, section); strcat (key, "."); + // start with empty string + list=malloc(1); + *list='\0'; + // search matching entries for (i=0; i<nConfig; i++) { if (strncasecmp(Config[i].key, key, len)==0) { - debug ("found list: %s", Config[i].key); + list=realloc(list, strlen(list)+strlen(Config[i].key)-len+2); + strcat (list, "|"); + strcat (list, Config[i].key+len); } } - return NULL; + free (key); + return list; } diff --git a/drv_MatrixOrbital.c b/drv_MatrixOrbital.c index c0e8da1..03fc5b4 100644 --- a/drv_MatrixOrbital.c +++ b/drv_MatrixOrbital.c @@ -1,4 +1,4 @@ -/* $Id: drv_MatrixOrbital.c,v 1.4 2004/01/10 20:22:33 reinelt Exp $ +/* $Id: drv_MatrixOrbital.c,v 1.5 2004/01/11 09:26:15 reinelt Exp $ * * new style driver for Matrix Orbital serial display modules * @@ -23,6 +23,9 @@ * * * $Log: drv_MatrixOrbital.c,v $ + * Revision 1.5 2004/01/11 09:26:15 reinelt + * layout starts to exist... + * * Revision 1.4 2004/01/10 20:22:33 reinelt * added new function 'cfg_list()' (not finished yet) * added layout.c (will replace processor.c someday) @@ -381,7 +384,7 @@ static int drv_MO_start (char *section) for (i=0; Models[i].type!=0xff; i++) { if (Models[i].type == (int)*buffer) break; } - info ("MatrixOrbital: Display identifies itself as a '%s' (type 0x%02x)", + info ("MatrixOrbital: display identifies itself as a '%s' (type 0x%02x)", Models[i].name, Models[i].type); // auto-dedection @@ -398,13 +401,13 @@ static int drv_MO_start (char *section) drv_MO_write ("\3765", 2); usleep(100000); drv_MO_read (buffer, 2); - info ("MatrixOrbital: Display reports Serial Number 0x%x", *(short*)buffer); + info ("MatrixOrbital: display reports serial number 0x%x", *(short*)buffer); // read version number drv_MO_write ("\3766", 2); usleep(100000); drv_MO_read (buffer, 1); - info ("MatrixOrbital: Display reports Firmware Version 0x%x", *buffer); + info ("MatrixOrbital: display reports firmware version 0x%x", *buffer); // initialize global variables @@ -1,4 +1,4 @@ -/* $Id: layout.c,v 1.1 2004/01/10 20:22:33 reinelt Exp $ +/* $Id: layout.c,v 1.2 2004/01/11 09:26:15 reinelt Exp $ * * new layouter framework * @@ -23,6 +23,9 @@ * * * $Log: layout.c,v $ + * Revision 1.2 2004/01/11 09:26:15 reinelt + * layout starts to exist... + * * Revision 1.1 2004/01/10 20:22:33 reinelt * added new function 'cfg_list()' (not finished yet) * added layout.c (will replace processor.c someday) @@ -44,31 +47,55 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <ctype.h> #include "debug.h" #include "cfg.h" #include "layout.h" -#define MAX_ROWS 32 -#define MAX_COLS 80 +void layout_addItem (char *name, int row, int col) +{ + + debug ("layout_addItem(%s, %d, %d)", name, row, col); +} + int layout_init (char *layout) { - char *section, *widget; - char buffer[15]; + char *section; + char *list; + char *key; + char *widget; int row, col; + char buffer[32]; + info ("initializing layout '%s'", layout); // prepare config section - // strlen("Layout:")=7, +1=8 + // strlen("Layout:")=7 section=malloc(strlen(layout)+8); strcpy(section, "Layout:"); strcat(section, layout); - cfg_list(section); - + list=cfg_list(section); + key=strtok(list, "|"); + while (key!=NULL) { + int i, n; + char *k; + // map to lower char for scanf() + for (k=key; *k!='\0'; k++) *k=tolower(*k); + i=sscanf (key, "row%d.col%d%n", &row, &col, &n); + if (i==2 && key[n]=='\0') { + widget=cfg_get(section, key, NULL); + if (widget!=NULL && *widget!='\0') { + layout_addItem (widget, row, col); + } + } + key=strtok(NULL, "|"); + } + free (list); return 0; } @@ -1,4 +1,4 @@ -/* $Id: widget.c,v 1.4 2004/01/10 20:22:33 reinelt Exp $ +/* $Id: widget.c,v 1.5 2004/01/11 09:26:15 reinelt Exp $ * * generic widget handling * @@ -21,6 +21,9 @@ * * * $Log: widget.c,v $ + * Revision 1.5 2004/01/11 09:26:15 reinelt + * layout starts to exist... + * * Revision 1.4 2004/01/10 20:22:33 reinelt * added new function 'cfg_list()' (not finished yet) * added layout.c (will replace processor.c someday) @@ -60,8 +63,8 @@ static WIDGET_CLASS *Classes=NULL; static int nClasses=0; -static WIDGET *Widgets=NULL; -static int nWidgets=0; +static WIDGET *Widgets=NULL; +static int nWidgets=0; int widget_register (WIDGET_CLASS *widget) |