]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2004-01-09 17:03:06 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 9 Jan 2004 17:03:07 +0000 (17:03 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Fri, 9 Jan 2004 17:03:07 +0000 (17:03 +0000)
initiated transfer to new driver architecture
new file 'drv.c' will someday replace 'display.c'
new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
due to this 'soft' transfer lcd4linux should stay usable during the switch
(at least I hope so)

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@299 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

Makefile.am
Makefile.in
configure
configure.in
display.c
display.h
drv.c [new file with mode: 0644]
drv.h [new file with mode: 0644]
drv_MatrixOrbital.c [new file with mode: 0644]
lcd4linux.c

index d6885c9e9dd5075f14ad93c07f232c6fea572fcc..b93c7100a1d431f67571f0e90f2055aec8b0b52e 100644 (file)
@@ -43,6 +43,7 @@ liblcd4linux_la_LIBADD = @DRIVERS@
 
 liblcd4linux_la_SOURCES = \
 display.c display.h \
+drv.c drv.h \
 debug.c debug.h \
 cfg.c cfg.h \
 lock.c lock.h \
@@ -61,7 +62,7 @@ HD44780.c \
 M50530.c \
 T6963.c \
 USBLCD.c \
-MatrixOrbital.c \
+drv_MatrixOrbital.c MatrixOrbital.c \
 MilfordInstruments.c \
 PalmPilot.c \
 Raster.c \
index d63b63617a6db52daa08c38f4090ef3c9514c232..d899b1c2eb1fd7a45b9b35c937b3e873cacee87c 100644 (file)
@@ -108,10 +108,10 @@ liblcd4linux_la_DEPENDENCIES = @DRIVERS@
 liblcd4linux_la_LDFLAGS = -version-info 9:12:9
 liblcd4linux_la_LIBADD = @DRIVERS@
 
-liblcd4linux_la_SOURCES =  display.c display.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h
+liblcd4linux_la_SOURCES =  display.c display.h drv.c drv.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h
 
 
-EXTRA_lcd4linux_SOURCES =  parport.c parport.h BeckmannEgle.c Crystalfontz.c Cwlinux.c HD44780.c M50530.c T6963.c USBLCD.c MatrixOrbital.c MilfordInstruments.c PalmPilot.c Raster.c SIN.c XWindow.c Text.c
+EXTRA_lcd4linux_SOURCES =  parport.c parport.h BeckmannEgle.c Crystalfontz.c Cwlinux.c HD44780.c M50530.c T6963.c USBLCD.c drv_MatrixOrbital.c MatrixOrbital.c MilfordInstruments.c PalmPilot.c Raster.c SIN.c XWindow.c Text.c
 
 
 EXTRA_DIST =  lcd4linux.conf.sample lcd4kde.conf lcd4linux.kdelnk lcd4linux.xpm lcd4linux.lsm curses.m4 AUTHORS CREDITS FAQ NEWS TODO README README.Rows README.Tokens README.Drivers README.Plugins README.KDE Skeleton.c plugin_sample.c
@@ -131,8 +131,8 @@ X_CFLAGS = @X_CFLAGS@
 X_LIBS = @X_LIBS@
 X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_PRE_LIBS = @X_PRE_LIBS@
-liblcd4linux_la_OBJECTS =  display.lo debug.lo cfg.lo lock.lo pixmap.lo \
-bar.lo icon.lo fontmap.lo udelay.lo
+liblcd4linux_la_OBJECTS =  display.lo drv.lo debug.lo cfg.lo lock.lo \
+pixmap.lo bar.lo icon.lo fontmap.lo udelay.lo
 bin_PROGRAMS =  lcd4linux$(EXEEXT)
 PROGRAMS =  $(bin_PROGRAMS)
 
@@ -163,10 +163,10 @@ DEP_FILES =  .deps/BeckmannEgle.P .deps/Crystalfontz.P .deps/Cwlinux.P \
 .deps/HD44780.P .deps/M50530.P .deps/MatrixOrbital.P \
 .deps/MilfordInstruments.P .deps/PalmPilot.P .deps/Raster.P .deps/SIN.P \
 .deps/T6963.P .deps/Text.P .deps/USBLCD.P .deps/XWindow.P .deps/bar.P \
-.deps/battery.P .deps/cfg.P .deps/debug.P .deps/display.P .deps/dvb.P \
-.deps/evaluator.P .deps/exec.P .deps/expr.P .deps/filter.P \
-.deps/fontmap.P .deps/icon.P .deps/imon.P .deps/isdn.P \
-.deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \
+.deps/battery.P .deps/cfg.P .deps/debug.P .deps/display.P .deps/drv.P \
+.deps/drv_MatrixOrbital.P .deps/dvb.P .deps/evaluator.P .deps/exec.P \
+.deps/expr.P .deps/filter.P .deps/fontmap.P .deps/icon.P .deps/imon.P \
+.deps/isdn.P .deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \
 .deps/parport.P .deps/parser.P .deps/pid.P .deps/pixmap.P \
 .deps/plugin.P .deps/plugin_math.P .deps/plugin_string.P \
 .deps/plugin_xmms.P .deps/processor.P .deps/seti.P .deps/socket.P \
index ecd57724397355b2c153f30abbe79a2f4a4aef29..4265cf53f9c5876f2d6b3727695df57c34b7f9bc 100755 (executable)
--- a/configure
+++ b/configure
@@ -21013,7 +21013,7 @@ _ACEOF
 fi
 
 if test "$MATRIXORBITAL" = "yes"; then
-   DRIVERS="$DRIVERS MatrixOrbital.lo"
+   DRIVERS="$DRIVERS MatrixOrbital.lo drv_MatrixOrbital.lo"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_MATRIXORBITAL 1
index 9930a4af1c9b86c5deae61390bd57ed01a8a17bc..bb7302b9b0fb8194a0a8b99ad3243f955144d1e5 100644 (file)
@@ -178,7 +178,7 @@ if test "$USBLCD" = "yes"; then
 fi
 
 if test "$MATRIXORBITAL" = "yes"; then
-   DRIVERS="$DRIVERS MatrixOrbital.lo"
+   DRIVERS="$DRIVERS MatrixOrbital.lo drv_MatrixOrbital.lo"
    AC_DEFINE(WITH_MATRIXORBITAL,1,[junk])
 fi
 
index 9d45f29a8adbe5f135e3f91ee9653f6929d9158d..1ba0941b4f43d21d78bcc8da9531aea5eeabee15 100644 (file)
--- a/display.c
+++ b/display.c
@@ -1,4 +1,4 @@
-/* $Id: display.c,v 1.44 2003/10/05 17:58:50 reinelt Exp $
+/* $Id: display.c,v 1.45 2004/01/09 17:03:07 reinelt Exp $
  *
  * framework for device drivers
  *
  *
  *
  * $Log: display.c,v $
+ * Revision 1.45  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
  * Revision 1.44  2003/10/05 17:58:50  reinelt
  * libtool junk; copyright messages cleaned up
  *
@@ -250,18 +257,18 @@ extern LCD MilfordInstruments[];
 extern LCD PalmPilot[];
 extern LCD Raster[];
 extern LCD SIN[];
-extern LCD Skeleton[];
 extern LCD XWindow[];
 extern LCD Text[];
 
 // output file for Raster driver
 // has to be defined here because it's referenced
 // even if the raster driver is not included!
-char *output=NULL;
+// Fixme: has gone to new drv.c
+// char *output=NULL;
 
-FAMILY Driver[] = {
+FAMILY oldDriver[] = {
 #ifdef WITH_BECKMANNEGLE
-  { "Beckmann+Egle", BeckmannEgle },
+  { "BeckmannEgle", BeckmannEgle },
 #endif
 #ifdef WITH_CRYSTALFONTZ
   { "Crystalfontz", Crystalfontz },
@@ -270,40 +277,34 @@ FAMILY Driver[] = {
   { "Cwlinux", Cwlinux },
 #endif
 #ifdef WITH_HD44780
-  { "HD 44780 based", HD44780 },
+  { "HD44780", HD44780 },
 #endif
 #ifdef WITH_M50530
-  { "M50530 based", M50530 },
+  { "M50530", M50530 },
 #endif
 #ifdef WITH_T6963
-  { "T6963 based", T6963 },
+  { "T6963", T6963 },
 #endif
 #ifdef WITH_USBLCD
   { "USBLCD", USBLCD },
 #endif
 #ifdef WITH_MATRIXORBITAL
-  { "Matrix Orbital", MatrixOrbital },
+  { "MatrixOrbital", MatrixOrbital },
 #endif
 #ifdef WITH_MILINST
-  { "Milford Instruments", MilfordInstruments },
+  { "MilfordInstruments", MilfordInstruments },
 #endif
 #ifdef WITH_PALMPILOT
-  { "3Com Palm Pilot", PalmPilot },
+  { "PalmPilot", PalmPilot },
 #endif
 #if defined (WITH_PNG) || defined(WITH_PPM)
   { "Raster", Raster },
 #endif
-#ifdef WITH_SIN
-  { "SIN Router", SIN },
-#endif
-#ifdef WITH_SKELETON
-  { "Skeleton", Skeleton },
-#endif
 #ifdef WITH_X11
-  { "X Window System", XWindow },
+  { "X11", XWindow },
 #endif
 #ifdef WITH_TEXT
-  { "ncurses Text", Text },
+  { "Text", Text },
 #endif
   { NULL }
 };
@@ -316,12 +317,12 @@ int lcd_list (void)
 {
   int i, j;
 
-  printf ("available display drivers:");
+  printf ("available *old* display drivers and models:");
   
-  for (i=0; Driver[i].name; i++) {
-    printf ("\n   %-20s:", Driver[i].name);
-    for (j=0; Driver[i].Model[j].name; j++) {
-      printf (" %s", Driver[i].Model[j].name);
+  for (i=0; oldDriver[i].driver; i++) {
+    printf ("\n   %-20s:", oldDriver[i].driver);
+    for (j=0; oldDriver[i].Model[j].name; j++) {
+      printf (" %s", oldDriver[i].Model[j].name);
     }
   }
   printf ("\n");
@@ -332,10 +333,10 @@ int lcd_list (void)
 int lcd_init (char *driver)
 {
   int i, j;
-  for (i=0; Driver[i].name; i++) {
-    for (j=0; Driver[i].Model[j].name; j++) {
-      if (strcmp (Driver[i].Model[j].name, driver)==0) {
-       Lcd=&Driver[i].Model[j];
+  for (i=0; oldDriver[i].driver; i++) {
+    for (j=0; oldDriver[i].Model[j].name; j++) {
+      if (strcmp (oldDriver[i].Model[j].name, driver)==0) {
+       Lcd=&oldDriver[i].Model[j];
        if (Lcd->init==NULL) return 0;
        return Lcd->init(Lcd);
       }
index 98c078ed1e27896c2a44dfbabedb6b05965129e9..9a0b8abaf0f99d484f3fdbce850c463b205811e9 100644 (file)
--- a/display.h
+++ b/display.h
@@ -1,4 +1,4 @@
-/* $Id: display.h,v 1.22 2003/10/05 17:58:50 reinelt Exp $
+/* $Id: display.h,v 1.23 2004/01/09 17:03:07 reinelt Exp $
  *
  * framework for device drivers
  *
  *
  *
  * $Log: display.h,v $
+ * Revision 1.23  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
  * Revision 1.22  2003/10/05 17:58:50  reinelt
  * libtool junk; copyright messages cleaned up
  *
@@ -130,8 +137,8 @@ typedef struct LCD {
 } LCD;
 
 typedef struct {
-  char *name;
-  LCD *Model;
+  char *driver;
+  LCD  *Model;
 } FAMILY;
 
 
diff --git a/drv.c b/drv.c
new file mode 100644 (file)
index 0000000..1356421
--- /dev/null
+++ b/drv.c
@@ -0,0 +1,184 @@
+/* $Id: drv.c,v 1.1 2004/01/09 17:03:07 reinelt Exp $
+ *
+ * new framework for display drivers
+ *
+ * Copyright 1999-2003 Michael Reinelt <reinelt@eunet.at>
+ * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Log: drv.c,v $
+ * Revision 1.1  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
+ */
+
+/* 
+ * exported functions:
+ *
+ * drv_list (void)
+ *   lists all available drivers to stdout
+ *
+ * drv_init (char *driver)
+ *    initializes the named driver
+ *
+ * drv_query (int *rows, int *cols, int *xres, int *yres, int *bars, int *gpos)
+ *    queries the attributes of the selected driver
+ *
+ * drv_clear ()
+ *    clears the display
+ *
+ * int drv_put (int row, int col, char *text)
+ *    writes text at row, col
+ *
+ * int drv_bar (int type, int row, int col, int max, int len1, int len2)
+ *    draws a specified bar at row, col with len
+ *
+ * int drv_icon (int num, int seq, int row, int col)
+ *    draws icon #num sequence #seq at row, col
+ *
+ * int drv_gpo (int num, int val)
+ *    sets GPO #num to val
+ *
+ * int drv_flush (void)
+ *    flushes the framebuffer to the display
+ *
+ * int drv_quit (void)
+ *    de-initializes the driver
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "drv.h"
+
+extern DRIVER drv_BeckmannEgle;
+extern DRIVER drv_Crystalfontz;
+extern DRIVER drv_Cwlinux;
+extern DRIVER drv_HD44780;
+extern DRIVER drv_M50530;
+extern DRIVER drv_T6963;
+extern DRIVER drv_USBDRIVER;
+extern DRIVER drv_MatrixOrbital;
+extern DRIVER drv_MilfordInstruments;
+extern DRIVER drv_PalmPilot;
+extern DRIVER drv_Raster;
+extern DRIVER drv_XWindow;
+extern DRIVER drv_Text;
+
+// output file for Raster driver
+// has to be defined here because it's referenced
+// even if the raster driver is not included!
+char *output=NULL;
+
+DRIVER *Driver[] = {
+#ifdef WITH_MATRIXORBITAL
+  &drv_MatrixOrbital,
+#endif
+  /* Fixme
+     #ifdef WITH_BECKMANNEGLE
+     &BeckmannEgle,
+     #endif
+     #ifdef WITH_CRYSTALFONTZ
+     &Crystalfontz,
+     #endif
+     #ifdef WITH_CWLINUX
+     &Cwlinux,
+     #endif
+     #ifdef WITH_HD44780
+     &HD44780,
+     #endif
+     #ifdef WITH_M50530
+     &M50530,
+     #endif
+     #ifdef WITH_T6963
+     &T6963,
+     #endif
+     #ifdef WITH_USBLCD
+     &USBLCD,
+     #endif
+     #ifdef WITH_MATRIXORBITAL
+     &MatrixOrbital,
+     #endif
+     #ifdef WITH_MILINST
+     &MilfordInstruments,
+     #endif
+     #ifdef WITH_PALMPILOT
+     &PalmPilot,
+     #endif
+     #if defined (WITH_PNG) || defined(WITH_PPM)
+     &Raster,
+     #endif
+     #ifdef WITH_X11
+     &XWindow,
+     #endif
+     #ifdef WITH_TEXT
+     &Text,
+     #endif
+  */
+  NULL,
+};
+
+
+static DRIVER *Lcd = NULL;
+
+
+int drv_list (void)
+{
+  int i;
+
+  printf ("available display drivers:");
+  
+  for (i=0; Driver[i]; i++) {
+    printf ("\n   %-20s: ", Driver[i]->name);
+    if (Driver[i]->list) Driver[i]->list();
+  }
+  printf ("\n");
+  return 0;
+}
+
+
+int drv_init (char *section, char *driver)
+{
+  int i;
+  for (i=0; Driver[i]; i++) {
+    if (strcmp (Driver[i]->name, driver)==0) {
+      Lcd=Driver[i];
+      if (Lcd->init==NULL) return 0;
+      return Lcd->init(Lcd);
+    }
+  }
+  error ("drv_init(%s) failed: no such driver", driver);
+  return -1;
+}
+
+
+int drv_quit (void)
+{
+  if (Lcd->quit==NULL) return 0;
+  return Lcd->quit();
+}
diff --git a/drv.h b/drv.h
new file mode 100644 (file)
index 0000000..59cf376
--- /dev/null
+++ b/drv.h
@@ -0,0 +1,65 @@
+/* $Id: drv.h,v 1.1 2004/01/09 17:03:07 reinelt Exp $
+ *
+ * new framework for display drivers
+ *
+ * Copyright 1999-2003 Michael Reinelt <reinelt@eunet.at>
+ * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Log: drv.h,v $
+ * Revision 1.1  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
+ */
+
+#ifndef _DRV_H_
+#define _DRV_H_
+
+typedef struct DRIVER {
+  char *name;
+  int (*list)  (void);
+  int (*init)  (struct DRIVER *Self);
+  int (*quit)  (void);
+} DRIVER;
+
+
+// output file for Raster driver
+// has to be defined here because it's referenced
+// even if the raster driver is not included!
+extern char *output;
+
+int drv_list  (void);
+int drv_init  (char *section, char *driver);
+int drv_quit  (void);
+
+/*
+  int drv_query (int *rows, int *cols, int *xres, int *yres, int *bars, int *icons, int *gpos);
+  int drv_clear (int full);
+  int drv_put   (int row, int col, char *text);
+  int drv_bar   (int type, int row, int col, int max, int len1, int le2);
+  int drv_icon  (int num, int seq, int row, int col);
+  int drv_gpo   (int num, int val);
+  int drv_flush (void);
+*/
+
+#endif
diff --git a/drv_MatrixOrbital.c b/drv_MatrixOrbital.c
new file mode 100644 (file)
index 0000000..1bb55e7
--- /dev/null
@@ -0,0 +1,82 @@
+/* $Id: drv_MatrixOrbital.c,v 1.1 2004/01/09 17:03:07 reinelt Exp $
+ *
+ * new style driver for Matrix Orbital serial display modules
+ *
+ * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at>
+ * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Log: drv_MatrixOrbital.c,v $
+ * Revision 1.1  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
+ */
+
+/* 
+ *
+ * exported fuctions:
+ *
+ * struct DRIVER drv_MatrixOrbital
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "plugin.h"
+#include "lock.h"
+#include "drv.h"
+#include "bar.h"
+#include "icon.h"
+
+int drv_MO_list (void)
+{
+  printf ("this and that");
+  return 0;
+}
+
+int drv_MO_init (struct DRIVER *Self)
+{
+  debug ("consider me initialized");
+  return 0;
+}
+
+int drv_MO_quit (void) {
+  debug ("consider me gone");
+  return 0;
+}
+
+
+DRIVER drv_MatrixOrbital = {
+  name: "MatrixOrbital",
+  list:  drv_MO_list,
+  init:  drv_MO_init,
+  quit:  drv_MO_quit 
+};
index 4e51b5036beb136e3822fc3faa7b4655a8855f8d..28e39ff152575a5b051ae7ad5ab33e48f26f6418 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: lcd4linux.c,v 1.55 2004/01/09 04:16:06 reinelt Exp $
+/* $Id: lcd4linux.c,v 1.56 2004/01/09 17:03:07 reinelt Exp $
  *
  * LCD4Linux
  *
  *
  *
  * $Log: lcd4linux.c,v $
+ * Revision 1.56  2004/01/09 17:03:07  reinelt
+ * initiated transfer to new driver architecture
+ * new file 'drv.c' will someday replace 'display.c'
+ * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c'
+ * due to this 'soft' transfer lcd4linux should stay usable during the switch
+ * (at least I hope so)
+ *
  * Revision 1.55  2004/01/09 04:16:06  reinelt
  * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
  *
 #include "debug.h"
 #include "pid.h"
 #include "udelay.h"
-#include "display.h"
+#include "display.h"  // Fixme: remove me...
+#include "drv.h"
 #include "processor.h"
 #include "plugin.h"
 
@@ -368,7 +376,8 @@ void handler (int signal)
 int main (int argc, char *argv[])
 {
   char *cfg="/etc/lcd4linux.conf";
-  char *driver;
+  char *display, *driver;
+  char  section[32];
   int c;
   int quiet=0;
   int interactive=0;
@@ -414,6 +423,8 @@ int main (int argc, char *argv[])
       break;
     case 'l':
       printf ("%s\n", release);
+      drv_list();
+      printf ("\n");
       lcd_list();
       exit(0);
     case 'o':
@@ -451,10 +462,19 @@ int main (int argc, char *argv[])
   if (cfg_init(cfg)==-1)
     exit (1);
   
-  driver=cfg_get(NULL, "display", NULL);
+  display=cfg_get(NULL, "Display", NULL);
+  if (display==NULL || *display=='\0') {
+    error ("missing 'Display' entry in %s!", cfg_source());
+    exit (1);
+  }
+  
+  snprintf (section, sizeof(section), "Display:%s", display);
+  driver=cfg_get(section, "Driver", NULL);
   if (driver==NULL || *driver=='\0') {
-    error ("missing 'display' entry in %s!", cfg_source());
+#if 0
+    error ("missing '%s.Driver' entry in %s!", section, cfg_source());
     exit (1);
+#endif
   }
   
   if (!running_foreground) {
@@ -509,10 +529,19 @@ int main (int argc, char *argv[])
     running_background=1;
   }
   
-  debug ("initializing driver %s", driver);
-  if (lcd_init(driver)==-1) {
-    pid_exit(PIDFILE);
-    exit (1);
+  // Fixme: Compatibility only...
+  if (driver!=NULL) {
+    debug ("initializing driver %s", driver);
+    if (drv_init(section, driver)==-1) {
+      pid_exit(PIDFILE);
+      exit (1);
+    }
+  } else {
+    debug ("initializing old-style driver %s", display);
+    if (lcd_init(display)==-1) {
+      pid_exit(PIDFILE);
+      exit (1);
+    }
   }
 
   // process_init sets global vars tick, tack