]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2004-05-25 14:26:28 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 25 May 2004 14:26:29 +0000 (14:26 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 25 May 2004 14:26:29 +0000 (14:26 +0000)
added "Image" driver (was: Raster.c) for PPM and PNG creation
fixed some glitches in the X11 driver

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

Makefile.am
Makefile.in
Raster.c [deleted file]
configure
drivers.m4
drv.c
drv_Crystalfontz.c
drv_X11.c
lcd4linux.conf.sample

index badf1842f2ed6aa8e42902759295e18cb65b5d24..6c10ccd464d654b70f547d65fe5087e631876585 100644 (file)
@@ -61,13 +61,13 @@ BeckmannEgle.c              \
 drv_Crystalfontz.c          \
 drv_Cwlinux.c               \
 drv_HD44780.c               \
+drv_Image.c                 \
 drv_M50530.c                \
 drv_T6963.c                 \
 drv_USBLCD.c                \
 drv_MatrixOrbital.c         \
 MilfordInstruments.c        \
 PalmPilot.c                 \
-Raster.c                    \
 drv_X11.c                   \
 Text.c                      \
 font_6x8.h                  \
index 2a7bbfba3a5967008aa297b8c4a6ae679e5dff26..7f23768a2b551359fd9326089a1ec4454f0fc7d9 100644 (file)
@@ -101,7 +101,7 @@ lcd4linux_SOURCES =  lcd4linux.c                 cfg.c         cfg.h         deb
 
 #liblcd4linux_la_SOURCES =
 
-EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       BeckmannEgle.c              drv_Crystalfontz.c          drv_Cwlinux.c               drv_HD44780.c               drv_M50530.c                drv_T6963.c                 drv_USBLCD.c                drv_MatrixOrbital.c         MilfordInstruments.c        PalmPilot.c                 Raster.c                    drv_X11.c                   Text.c                      font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.c
+EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       BeckmannEgle.c              drv_Crystalfontz.c          drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_M50530.c                drv_T6963.c                 drv_USBLCD.c                drv_MatrixOrbital.c         MilfordInstruments.c        PalmPilot.c                 drv_X11.c                   Text.c                      font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.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                  plugin_sample.c
@@ -140,9 +140,9 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 TAR = tar
 GZIP_ENV = --best
 DEP_FILES =  .deps/BeckmannEgle.P .deps/MilfordInstruments.P \
-.deps/PalmPilot.P .deps/Raster.P .deps/Text.P .deps/cfg.P .deps/debug.P \
-.deps/drv.P .deps/drv_Crystalfontz.P .deps/drv_Cwlinux.P \
-.deps/drv_HD44780.P .deps/drv_M50530.P .deps/drv_MatrixOrbital.P \
+.deps/PalmPilot.P .deps/Text.P .deps/cfg.P .deps/debug.P .deps/drv.P \
+.deps/drv_Crystalfontz.P .deps/drv_Cwlinux.P .deps/drv_HD44780.P \
+.deps/drv_Image.P .deps/drv_M50530.P .deps/drv_MatrixOrbital.P \
 .deps/drv_T6963.P .deps/drv_USBLCD.P .deps/drv_X11.P \
 .deps/drv_generic_graphic.P .deps/drv_generic_parport.P \
 .deps/drv_generic_serial.P .deps/drv_generic_text.P .deps/evaluator.P \
diff --git a/Raster.c b/Raster.c
deleted file mode 100644 (file)
index 0bf1b91..0000000
--- a/Raster.c
+++ /dev/null
@@ -1,509 +0,0 @@
-/* $Id: Raster.c,v 1.31 2004/03/03 03:47:04 reinelt Exp $
- *
- * driver for raster formats
- *
- * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at>
- *
- * 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: Raster.c,v $
- * Revision 1.31  2004/03/03 03:47:04  reinelt
- * big patch from Martin Hejl:
- * - use qprintf() where appropriate
- * - save CPU cycles on gettimeofday()
- * - add quit() functions to free allocated memory
- * - fixed lots of memory leaks
- *
- * Revision 1.30  2004/01/30 20:57:55  reinelt
- * HD44780 patch from Martin Hejl
- * dmalloc integrated
- *
- * Revision 1.29  2004/01/09 04:16:06  reinelt
- * added 'section' argument to cfg_get(), but NULLed it on all calls by now.
- *
- * Revision 1.28  2003/10/05 17:58:50  reinelt
- * libtool junk; copyright messages cleaned up
- *
- * Revision 1.27  2003/09/10 14:01:52  reinelt
- * icons nearly finished\!
- *
- * Revision 1.26  2003/09/09 06:54:43  reinelt
- * new function 'cfg_number()'
- *
- * Revision 1.25  2003/08/24 05:17:58  reinelt
- * liblcd4linux patch from Patrick Schemitz
- *
- * Revision 1.24  2003/08/17 12:11:58  reinelt
- * framework for icons prepared
- *
- * Revision 1.23  2003/07/29 04:56:13  reinelt
- * disable Raster driver automagically if gd.h not found
- *
- * Revision 1.22  2003/07/24 04:48:09  reinelt
- * 'soft clear' needed for virtual rows
- *
- * Revision 1.21  2003/02/22 07:53:10  reinelt
- * cfg_get(key,defval)
- *
- * Revision 1.20  2002/08/19 04:41:20  reinelt
- * introduced bar.c, moved bar stuff from display.h to bar.h
- *
- * Revision 1.19  2001/09/10 13:55:53  reinelt
- * M50530 driver
- *
- * Revision 1.18  2001/03/16 16:40:17  ltoetsch
- * implemented time bar
- *
- * Revision 1.17  2001/03/12 12:39:36  reinelt
- *
- * reworked autoconf a lot: drivers may be excluded, #define's went to config.h
- *
- * Revision 1.16  2001/03/02 17:18:52  reinelt
- *
- * let configure find gd.h
- *
- * Revision 1.15  2001/03/02 10:18:03  ltoetsch
- * added /proc/apm battery stat
- *
- * Revision 1.14  2001/03/01 22:33:50  reinelt
- *
- * renamed Raster_flush() to PPM_flush()
- *
- * Revision 1.13  2001/03/01 15:11:30  ltoetsch
- * added PNG,Webinterface
- *
- * Revision 1.12  2001/03/01 11:08:16  reinelt
- *
- * reworked configure to allow selection of drivers
- *
- * Revision 1.11  2001/02/13 09:00:13  reinelt
- *
- * prepared framework for GPO's (general purpose outputs)
- *
- * Revision 1.10  2000/08/10 09:44:09  reinelt
- *
- * new debugging scheme: error(), info(), debug()
- * uses syslog if in daemon mode
- *
- * Revision 1.9  2000/04/03 04:01:31  reinelt
- *
- * if 'gap' is specified as -1, a gap of (pixelsize+pixelgap) is selected automatically
- *
- * Revision 1.8  2000/03/28 07:22:15  reinelt
- *
- * version 0.95 released
- * X11 driver up and running
- * minor bugs fixed
- *
- * Revision 1.7  2000/03/26 20:00:44  reinelt
- *
- * README.Raster added
- *
- * Revision 1.6  2000/03/26 19:03:52  reinelt
- *
- * more Pixmap renaming
- * quoting of '#' in config file
- *
- * Revision 1.5  2000/03/26 18:46:28  reinelt
- *
- * bug in pixmap.c that leaded to empty bars fixed
- * name conflicts with X11 resolved
- *
- * Revision 1.4  2000/03/26 12:55:03  reinelt
- *
- * enhancements to the PPM driver
- *
- * Revision 1.3  2000/03/25 05:50:43  reinelt
- *
- * memory leak in Raster_flush closed
- * driver family logic changed
- *
- * Revision 1.2  2000/03/24 11:36:56  reinelt
- *
- * new syntax for raster configuration
- * changed XRES and YRES to be configurable
- * PPM driver works nice
- *
- * Revision 1.1  2000/03/23 07:24:48  reinelt
- *
- * PPM driver up and running (but slow!)
- *
- */
-
-/* 
- *
- * exported fuctions:
- *
- * struct LCD Raster[]
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef WITH_PNG
-#ifdef HAVE_GD_GD_H
-#include <gd/gd.h>
-#else
-#ifdef HAVE_GD_H
-#include <gd.h>
-#else
-#error "gd.h not found!"
-#error "cannot compile PNG driver"
-#endif
-#endif
-#endif
-
-#include "debug.h"
-#include "cfg.h"
-#include "display.h"
-#include "bar.h"
-#include "icon.h"
-#include "pixmap.h"
-
-#ifdef WITH_DMALLOC
-#include <dmalloc.h>
-#endif
-
-static LCD Lcd;
-
-static int pixel=-1;
-static int pgap=0;
-static int rgap=0;
-static int cgap=0;
-static int border=0;
-static int icons;
-
-static unsigned int foreground=0;
-static unsigned int halfground=0;
-static unsigned int background=0;
-
-
-#ifdef WITH_PPM
-int PPM_flush (void)
-{
-  static int seq=0;
-  static unsigned char *bitbuf=NULL;
-  static unsigned char *rowbuf=NULL;
-  int xsize, ysize, row, col;
-  unsigned char R[3], G[3], B[3];
-  char path[256], tmp[256], buffer[256];
-  int fd;
-
-  xsize=2*border+(Lcd.cols-1)*cgap+Lcd.cols*Lcd.xres*pixel+(Lcd.cols*Lcd.xres-1)*pgap;
-  ysize=2*border+(Lcd.rows-1)*rgap+Lcd.rows*Lcd.yres*pixel+(Lcd.rows*Lcd.yres-1)*pgap;
-  
-  if (bitbuf==NULL) {
-    if ((bitbuf=malloc(xsize*ysize*sizeof(*bitbuf)))==NULL) {
-      error ("Raster: malloc(%d) failed: %s", xsize*ysize*sizeof(*bitbuf), strerror(errno));
-      return -1;
-    }
-  }
-  
-  if (rowbuf==NULL) {
-    if ((rowbuf=malloc(3*xsize*sizeof(*rowbuf)))==NULL) {
-      error ("Raster: malloc(%d) failed: %s", 3*xsize*sizeof(*rowbuf), strerror(errno));
-      return -1;
-    }
-  }
-  
-  memset (bitbuf, 0, xsize*ysize*sizeof(*bitbuf));
-  
-  for (row=0; row<Lcd.rows*Lcd.yres; row++) {
-    int y=border+(row/Lcd.yres)*rgap+row*(pixel+pgap);
-    for (col=0; col<Lcd.cols*Lcd.xres; col++) {
-      int x=border+(col/Lcd.xres)*cgap+col*(pixel+pgap);
-      int a, b;
-      for (a=0; a<pixel; a++)
-       for (b=0; b<pixel; b++)
-         bitbuf[y*xsize+x+a*xsize+b]=LCDpixmap[row*Lcd.cols*Lcd.xres+col]+1;
-    }
-  }
-  
-  snprintf (path, sizeof(path), output, seq++);
-  qprintf(tmp, sizeof(tmp), "%s.tmp", path);
-  
-  if ((fd=open(tmp, O_WRONLY | O_CREAT | O_TRUNC, 0644))<0) {
-    error ("Raster: open(%s) failed: %s", tmp, strerror(errno));
-    return -1;
-  }
-  
-  qprintf(buffer, sizeof(buffer), "P6\n%d %d\n255\n", xsize, ysize);
-  if (write (fd, buffer, strlen(buffer))<0) {
-    error ("Raster: write(%s) failed: %s", tmp, strerror(errno));
-    return -1;
-  }
-  
-  R[0]=0xff&background>>16;
-  G[0]=0xff&background>>8;
-  B[0]=0xff&background;
-  
-  R[1]=0xff&halfground>>16;
-  G[1]=0xff&halfground>>8;
-  B[1]=0xff&halfground;
-  
-  R[2]=0xff&foreground>>16;
-  G[2]=0xff&foreground>>8;
-  B[2]=0xff&foreground;
-
-  for (row=0; row<ysize; row++) {
-    int c=0;
-    for (col=0; col<xsize; col++) {
-      int i=bitbuf[row*xsize+col];
-      rowbuf[c++]=R[i];
-      rowbuf[c++]=G[i];
-      rowbuf[c++]=B[i];
-    }
-    if (write (fd, rowbuf, c)<0) {
-      error ("Raster: write(%s) failed: %s", tmp, strerror(errno));
-      return -1;
-    }
-  }
-  
-  if (close (fd)<0) {
-    error ("Raster: close(%s) failed: %s", tmp, strerror(errno));
-    return -1;
-  }
-  if (rename (tmp, path)<0) {
-    error ("Raster: rename(%s) failed: %s", tmp, strerror(errno));
-    return -1;
-  }
-  
-  return 0;
-}
-#endif
-
-#ifdef WITH_PNG
-int PNG_flush (void)
-{
-  static int seq=0;
-  int xsize, ysize, row, col;
-  char path[256], tmp[256];
-  FILE *fp;
-  gdImagePtr im;
-  int bg, hg, fg;
-  
-  xsize=2*border+(Lcd.cols-1)*cgap+Lcd.cols*Lcd.xres*pixel+(Lcd.cols*Lcd.xres-1)*pgap;
-  ysize=2*border+(Lcd.rows-1)*rgap+Lcd.rows*Lcd.yres*pixel+(Lcd.rows*Lcd.yres-1)*pgap;
-
-  im = gdImageCreate(xsize, ysize);
-  /* first color = background */
-  bg = gdImageColorAllocate(im, 
-                           0xff&background>>16,
-                           0xff&background>>8,
-                            0xff&background);
-  hg = gdImageColorAllocate(im, 
-                           0xff&halfground>>16,
-                           0xff&halfground>>8,
-                            0xff&halfground);
-  
-  fg = gdImageColorAllocate(im, 
-                           0xff&foreground>>16,
-                           0xff&foreground>>8,
-                            0xff&foreground);
-  
-  
-  for (row=0; row<Lcd.rows*Lcd.yres; row++) {
-    int y=border+(row/Lcd.yres)*rgap+row*(pixel+pgap);
-    for (col=0; col<Lcd.cols*Lcd.xres; col++) {
-      int x=border+(col/Lcd.xres)*cgap+col*(pixel+pgap);
-      gdImageFilledRectangle(im, x, y, x + pixel - 1 , y + pixel - 1,
-                            LCDpixmap[row*Lcd.cols*Lcd.xres+col]? fg : hg);
-    }
-  }
-  
-  snprintf (path, sizeof(path), output, seq++);
-  qprintf(tmp, sizeof(tmp), "%s.tmp", path);
-  
-  if ((fp=fopen(tmp, "w")) == NULL) {
-    error("Png: fopen(%s) failed: %s\n", tmp, strerror(errno));
-    return -1;
-  }
-  gdImagePng(im, fp);
-  gdImageDestroy(im);
-  
-  
-  if (fclose (fp) != 0) {
-    error("Png: fclose(%s) failed: %s\n", tmp, strerror(errno));
-    return -1;
-  }
-  if (rename (tmp, path)<0) {
-    error("Png: rename(%s) failed: %s\n", tmp, strerror(errno));
-    return -1;
-  }
-  
-  return 0;
-}
-#endif
-
-
-int Raster_clear (int full)
-{
-  if (pix_clear()!=0) 
-    return -1;
-
-  return 0;
-}
-
-int Raster_init (LCD *Self)
-{
-  char *s;
-  int rows=-1, cols=-1;
-  int xres=1, yres=-1;
-  
-  if (output==NULL || *output=='\0') {
-    error ("Raster: no output file specified (use -o switch)");
-    return -1;
-  }
-    
-  if (sscanf(s=cfg_get(NULL, "size", "20x4"), "%dx%d", &cols, &rows)!=2 || rows<1 || cols<1) {
-    error ("Raster: bad size '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-
-  if (sscanf(s=cfg_get(NULL, "font", "5x8"), "%dx%d", &xres, &yres)!=2 || xres<5 || yres<7) {
-    error ("Raster: bad font '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-
-  if (sscanf(s=cfg_get(NULL, "pixel", "4+1"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) {
-    error ("Raster: bad pixel '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-
-  if (sscanf(s=cfg_get(NULL, "gap", "3x3"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) {
-    error ("Raster: bad gap '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-  
-  if (rgap<0) rgap=pixel+pgap;
-  if (cgap<0) cgap=pixel+pgap;
-
-  if (cfg_number(NULL, "border", 0, 0, 1000000, &border)<0) return -1;
-
-  if (sscanf(s=cfg_get(NULL, "foreground", "#102000"), "#%x", &foreground)!=1) {
-    error ("Raster: bad foreground color '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-  
-  if (sscanf(s=cfg_get(NULL, "halfground", "#70c000"), "#%x", &halfground)!=1) {
-    error ("Raster: bad halfground color '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-  
-  if (sscanf(s=cfg_get(NULL, "background", "#80d000"), "#%x", &background)!=1) {
-    error ("Raster: bad background color '%s'", s);
-    return -1;
-    free(s);
-  }
-  free(s);
-
-  if (pix_init (rows, cols, xres, yres)!=0) {
-    error ("Raster: pix_init(%d, %d, %d, %d) failed", rows, cols, xres, yres);
-    return -1;
-  }
-
-  if (cfg_number(NULL, "Icons", 0, 0, 8, &icons) < 0) return -1;
-  if (icons>0) {
-    info ("allocating %d icons", icons);
-    icon_init(rows, cols, xres, yres, 8, icons, pix_icon);
-  }
-
-  Self->rows=rows;
-  Self->cols=cols;
-  Self->xres=xres;
-  Self->yres=yres;
-  Self->icons=icons;
-  Lcd=*Self;
-
-  pix_clear();
-  return 0;
-}
-
-int Raster_put (int row, int col, char *text)
-{
-  return pix_put (row, col, text);
-}
-
-int Raster_bar (int type, int row, int col, int max, int len1, int len2)
-{
-  return pix_bar (type, row, col, max, len1, len2);
-}
-
-int Raster_icon (int num, int seq, int row, int col)
-{
-  return icon_draw (num, seq, row, col);
-}
-
-
-LCD Raster[] = {
-#ifdef WITH_PPM  
-  { name: "PPM",
-    rows:  0,
-    cols:  0,
-    xres:  0,
-    yres:  0,
-    bars:  BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 | BAR_V2 | BAR_T,
-    icons: 0,
-    gpos:  0,
-    init:  Raster_init,
-    clear: Raster_clear,
-    put:   Raster_put,
-    bar:   Raster_bar,
-    icon:  Raster_icon,
-    gpo:   NULL,
-    flush: PPM_flush },
-#endif
-#ifdef WITH_PNG
-  { name: "PNG",
-    rows:  0,
-    cols:  0,
-    xres:  0,
-    yres:  0,
-    bars:  BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 | BAR_V2 | BAR_T,
-    icons: 0,
-    gpos:  0,
-    init:  Raster_init,
-    clear: Raster_clear,
-    put:   Raster_put,
-    bar:   Raster_bar,
-    icon:  Raster_icon,
-    gpo:   NULL,
-    flush: PNG_flush },
-#endif
-  { NULL }
-};
index ebf90826ac7a19cd20511f050d917b3a2460b019..35b07fac44dcfc7ddcb793b690c97b4a78466b85 100755 (executable)
--- a/configure
+++ b/configure
@@ -5482,6 +5482,7 @@ PARPORT="no"
 SERIAL="no"
 TEXT="no"
 GRAPHIC="no"
+IMAGE="no"
 
 if test "$BECKMANNEGLE" = "yes"; then
 #  DRIVERS="$DRIVERS BeckmannEgle.lo"
@@ -5616,6 +5617,7 @@ fi
 if test "$PNG" = "yes"; then
    if test "$has_gd" = "true"; then
       GRAPHIC="yes"
+      IMAGE="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_PNG 1
@@ -5629,17 +5631,18 @@ echo "$as_me: WARNING: gd.h not found: PNG driver disabled" >&2;}
 fi
 
 if test "$PPM" = "yes"; then
-   if test "$has_gd" = "true"; then
-      GRAPHIC="yes"
+   GRAPHIC="yes"
+   IMAGE="yes"
 
 cat >>confdefs.h <<\_ACEOF
 #define WITH_PPM 1
 _ACEOF
 
-   else
-      { echo "$as_me:$LINENO: WARNING: gd.h not found: PNG driver disabled" >&5
-echo "$as_me: WARNING: gd.h not found: PNG driver disabled" >&2;}
-   fi
+fi
+
+if test "$IMAGE" = "yes"; then
+#  DRIVERS="$DRIVERS drv_Image.lo"
+   DRIVERS="$DRIVERS drv_Image.o"
 fi
 
 if test "$X11" = "yes"; then
@@ -5674,7 +5677,7 @@ fi
 # generic graphic driver
 if test "$GRAPHIC" = "yes"; then
 :
-#  DRIVERS="$DRIVERS
+#  DRIVERS="$DRIVERS drv_generic_graphic.lo"
    DRIVERS="$DRIVERS drv_generic_graphic.o"
 fi
 
index e058e5a7c36e4862491fd9b3573dddbdcfc3c67d..47e1600ce7dba29011ad2f625c64d8ba3e856442 100644 (file)
@@ -101,6 +101,7 @@ PARPORT="no"
 SERIAL="no"
 TEXT="no"
 GRAPHIC="no"
+IMAGE="no"
 
 if test "$BECKMANNEGLE" = "yes"; then
 #  DRIVERS="$DRIVERS BeckmannEgle.lo"
@@ -190,6 +191,7 @@ fi
 if test "$PNG" = "yes"; then
    if test "$has_gd" = "true"; then
       GRAPHIC="yes"
+      IMAGE="yes"
       AC_DEFINE(WITH_PNG,1,[ driver])
       DRVLIBS="$DRVLIBS -lgd"
    else
@@ -198,12 +200,14 @@ if test "$PNG" = "yes"; then
 fi
 
 if test "$PPM" = "yes"; then
-   if test "$has_gd" = "true"; then
-      GRAPHIC="yes"
-      AC_DEFINE(WITH_PPM,1,[ driver])
-   else
-      AC_MSG_WARN(gd.h not found: PNG driver disabled)
-   fi
+   GRAPHIC="yes"
+   IMAGE="yes"
+   AC_DEFINE(WITH_PPM,1,[ driver])
+fi
+
+if test "$IMAGE" = "yes"; then
+#  DRIVERS="$DRIVERS drv_Image.lo"
+   DRIVERS="$DRIVERS drv_Image.o"
 fi
 
 if test "$X11" = "yes"; then
@@ -231,7 +235,7 @@ fi
 # generic graphic driver
 if test "$GRAPHIC" = "yes"; then
 :
-#  DRIVERS="$DRIVERS 
+#  DRIVERS="$DRIVERS drv_generic_graphic.lo"
    DRIVERS="$DRIVERS drv_generic_graphic.o"
 fi
 
diff --git a/drv.c b/drv.c
index 75605f54f047220a589dc27bb5825e59ee3baa00..4904551ff320b7b95f6538e8168bd493c9d0cd6d 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -1,4 +1,4 @@
-/* $Id: drv.c,v 1.9 2004/02/24 05:55:04 reinelt Exp $
+/* $Id: drv.c,v 1.10 2004/05/25 14:26:29 reinelt Exp $
  *
  * new framework for display drivers
  *
  *
  *
  * $Log: drv.c,v $
+ * Revision 1.10  2004/05/25 14:26:29  reinelt
+ *
+ * added "Image" driver (was: Raster.c) for PPM and PNG creation
+ * fixed some glitches in the X11 driver
+ *
  * Revision 1.9  2004/02/24 05:55:04  reinelt
  *
  * X11 driver ported
@@ -112,17 +117,17 @@ extern DRIVER drv_BeckmannEgle;
 extern DRIVER drv_Crystalfontz;
 extern DRIVER drv_Cwlinux;
 extern DRIVER drv_HD44780;
+extern DRIVER drv_Image;
 extern DRIVER drv_M50530;
 extern DRIVER drv_T6963;
 extern DRIVER drv_USBLCD;
 extern DRIVER drv_MatrixOrbital;
 extern DRIVER drv_MilfordInstruments;
 extern DRIVER drv_PalmPilot;
-extern DRIVER drv_Raster;
 extern DRIVER drv_X11;
 extern DRIVER drv_Text;
 
-// output file for Raster driver
+// output file for Image driver
 // has to be defined here because it's referenced
 // even if the raster driver is not included!
 char *output=NULL;
@@ -145,6 +150,9 @@ DRIVER *Driver[] = {
 #ifdef WITH_HD44780
   &drv_HD44780,
 #endif
+#if defined (WITH_PNG) || defined(WITH_PPM)
+  &drv_Image,
+#endif
 #ifdef WITH_M50530
   &drv_M50530,
 #endif
@@ -164,9 +172,6 @@ DRIVER *Driver[] = {
      #ifdef WITH_PALMPILOT
      &PalmPilot,
      #endif
-     #if defined (WITH_PNG) || defined(WITH_PPM)
-     &Raster,
-     #endif
   */
 #ifdef WITH_X11
   &drv_X11,
index 164141e75dd9e0bfda4cca488d5c84875bffd3a5..26b897cae2229d5b18e5fc01c652bae584c01656 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_Crystalfontz.c,v 1.14 2004/03/19 09:17:46 reinelt Exp $
+/* $Id: drv_Crystalfontz.c,v 1.15 2004/05/25 14:26:29 reinelt Exp $
  *
  * new style driver for Crystalfontz display modules
  *
  *
  *
  * $Log: drv_Crystalfontz.c,v $
+ * Revision 1.15  2004/05/25 14:26:29  reinelt
+ *
+ * added "Image" driver (was: Raster.c) for PPM and PNG creation
+ * fixed some glitches in the X11 driver
+ *
  * Revision 1.14  2004/03/19 09:17:46  reinelt
  *
  * removed the extra 'goto' function, row and col are additional parameters
@@ -695,7 +700,7 @@ static int drv_CF_start (char *section)
   Protocol = Models[Model].protocol;
 
   // regularly process display answers
-  // Fixme: make 20msec configurable
+  // Fixme: make 100msec configurable
   timer_add (drv_CF_timer, NULL, 100, 0);
 
   switch (Protocol) {
index e146df479d73585b58ad663999dd07136535ee86..a5c9176bf2daca73921ac6e78d73691f6a011323 100644 (file)
--- a/drv_X11.c
+++ b/drv_X11.c
@@ -1,4 +1,4 @@
-/* $Id: drv_X11.c,v 1.1 2004/02/24 05:55:04 reinelt Exp $
+/* $Id: drv_X11.c,v 1.2 2004/05/25 14:26:29 reinelt Exp $
  *
  * new style X11 Driver for LCD4Linux 
  *
  *
  *
  * $Log: drv_X11.c,v $
+ * Revision 1.2  2004/05/25 14:26:29  reinelt
+ *
+ * added "Image" driver (was: Raster.c) for PPM and PNG creation
+ * fixed some glitches in the X11 driver
+ *
  * Revision 1.1  2004/02/24 05:55:04  reinelt
  *
  * X11 driver ported
@@ -57,7 +62,6 @@
 #include "debug.h"
 #include "cfg.h"
 #include "timer.h"
-#include "udelay.h"
 #include "plugin.h"
 #include "widget.h"
 #include "widget_text.h"
@@ -94,21 +98,6 @@ static XColor fg_xc, bg_xc, hg_xc;
 static Pixmap pm;
 
 
-#if 0
-static LCD Lcd;
-
-static unsigned char *LCDpixmap2;
-static int DROWS=-1,DCOLS=-1;          /*DROWS+DCOLS without background*/
-static int XRES=-1,YRES=-1;            /*XRES+YRES (same as self->...)*/
-static int icons;                       /* number of user-defined icons */
-static int async_update();             /*PROTO*/
-static pid_t async_updater_pid=1;
-static int semid=-1;
-static int shmid=-1;
-static int ppid;                       /*parent pid*/
-
-#endif
-
 // ****************************************
 // ***  hardware dependant functions    ***
 // ****************************************
@@ -190,32 +179,41 @@ static int drv_X11_start (char *section)
 
   // read display size from config
   if (sscanf(s=cfg_get(section, "Size", "120x32"), "%dx%d", &DCOLS, &DROWS)!=2 || DCOLS<1 || DROWS<1) {
-    error ("%s: bad Size '%s' from %s", Name, s, cfg_source());
+    error ("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
+    free(s);
     return -1;
   }
+  free(s);
   
   if (sscanf(s=cfg_get(section, "font", "5x8"), "%dx%d", &XRES, &YRES)!=2 || XRES<1|| YRES<1) {
-    error ("%s: bad font '%s' from %s", Name, s, cfg_source());
+    error ("%s: bad %s.font '%s' from %s", Name, section, s, cfg_source());
+    free(s);
     return -1;
   }
+  free(s);
   
   if (sscanf(s=cfg_get(section, "pixel", "4+1"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) {
-    error ("%s: bad pixel '%s' from %s", Name, s, cfg_source());
+    error ("%s: bad %s.pixel '%s' from %s", Name, section, s, cfg_source());
+    free(s);
     return -1;
   }
+  free(s);
   
   if (sscanf(s=cfg_get(section, "gap", "-1x-1"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) {
-    error ("%s: bad gap '%s' from %s", Name, s, cfg_source());
+    error ("%s: bad %s.gap '%s' from %s", Name, section, s, cfg_source());
+    free(s);
     return -1;
   }
+  free(s);
+
   if (rgap<0) rgap=pixel+pgap;
   if (cgap<0) cgap=pixel+pgap;
   
   if (cfg_number(section, "border", 0, 0, 1000000, &border)<0) return -1;
 
-  fg_col=cfg_get(section, "foreground", "#000000");
-  bg_col=cfg_get(section, "background", "#80d000");
-  hg_col=cfg_get(section, "halfground", "#70c000");
+  fg_col = cfg_get(section, "foreground", "#000000");
+  bg_col = cfg_get(section, "background", "#80d000");
+  hg_col = cfg_get(section, "halfground", "#70c000");
   if (*fg_col=='\\') fg_col++;
   if (*bg_col=='\\') bg_col++;
   if (*hg_col=='\\') hg_col++;
@@ -307,161 +305,6 @@ static int drv_X11_start (char *section)
 }
 
 
-#if 0
-static int init_x(int rows,int cols,int XRES,int YRES) 
-{
-  return 0;
-}
-
-
-int xlcdinit(LCD *Self) 
-{
-  char *s;
-
-  if (sscanf(s=cfg_get(NULL, "size", "20x4"),"%dx%d",&DCOLS,&DROWS)!=2
-      || DROWS<1 || DCOLS<1) {
-    error ("X11: bad size '%s'",s);
-    return -1;
-  }
-  if (sscanf(s=cfg_get(NULL, "font", "5x8"),"%dx%d",&XRES,&YRES)!=2
-      || XRES<5 || YRES>10) {
-    error ("X11: bad font '%s'",s);
-    return -1;
-  }
-  if (sscanf(s=cfg_get(NULL, "pixel", "4+1"),"%d+%d",&pixel,&pgap)!=2
-      || pixel<1 || pgap<0) {
-    error ("X11: bad pixel '%s'",s);
-    return -1;
-  }
-  if (sscanf(s=cfg_get(NULL, "gap", "-1x-1"),"%dx%d",&cgap,&rgap)!=2
-      || cgap<-1 || rgap<-1) {
-    error ("X11: bad gap '%s'",s);
-    return -1;
-  }
-  if (rgap<0) rgap=pixel+pgap;
-  if (cgap<0) cgap=pixel+pgap;
-
-  if (cfg_number(NULL, "border", 0, 0, 1000000, &border)<0) return -1;
-
-  fg_col=cfg_get(NULL, "foreground", "#000000");
-  bg_col=cfg_get(NULL, "background", "#80d000");
-  hg_col=cfg_get(NULL, "halfground", "#70c000");
-  if (*fg_col=='\\') fg_col++;
-  if (*bg_col=='\\') bg_col++;
-  if (*hg_col=='\\') hg_col++;
-
-  if (pix_init(DROWS,DCOLS,XRES,YRES)==-1) return -1;
-
-  if (cfg_number(NULL, "Icons", 0, 0, 8, &icons) < 0) return -1;
-  if (icons>0) {
-    info ("allocating %d icons", icons);
-    icon_init(DROWS, DCOLS, XRES, YRES, 8, icons, pix_icon);
-  }
-  
-  if (init_x(DROWS,DCOLS,XRES,YRES)==-1) return -1;
-  init_signals();
-  if (init_shm(DROWS*DCOLS*XRES*YRES,&LCDpixmap2)==-1) return -1;
-  memset(LCDpixmap2,0xff,DROWS*YRES*DCOLS*XRES);
-  if (init_thread(DROWS*DCOLS*XRES*YRES)==-1) return -1;
-  Self->DROWS=DROWS;
-  Self->DCOLS=DCOLS;
-  Self->XRES=XRES;
-  Self->YRES=YRES;
-  Self->icons=icons;
-  Lcd=*Self;
-
-  pix_clear();
-  return 0;
-}
-
-
-int xlcdflush() {
-  int dirty;
-  int row,col;
-  
-  acquire_lock();
-  dirty=0;
-  for(row=0;row<DROWS*YRES;row++) {
-    int y=border+(row/YRES)*rgap+row*(pixel+pgap);
-    for(col=0;col<DCOLS*XRES;col++) {
-      int x=border+(col/XRES)*cgap+col*(pixel+pgap);
-      int p=row*DCOLS*XRES+col;
-      if (LCDpixmap[p]^LCDpixmap2[p]) {
-       XFillRectangle(dp,w,LCDpixmap[p]?fg_gc:hg_gc,x,y,pixel,pixel);
-       LCDpixmap2[p]=LCDpixmap[p];
-       dirty=1;
-      }
-    }
-  }
-  if (dirty) XSync(dp,False);
-  release_lock();
-  return 0;
-}
-
-
-/*
- * this one should only be called from the updater-thread
- * no user serviceable parts inside
- */
-
-static void update(int x,int y,int width,int height)
-{
-  /*
-   * theory of operation:
-   * instead of the old, fully-featured but complicated update
-   * region calculation, we do an update of the whole display,
-   * but check before every pixel if the pixel region is inside
-   * the update region.
-   */
-
-  int x0, y0;
-  int x1, y1;
-  int row, col;
-  int dirty;
-  
-  x0=x-pixel;
-  y0=y-pixel;
-  x1=x+pixel+width;
-  y1=y+pixel+height;
-  
-  dirty=0;
-  for(row=0; row<DROWS; row++) {
-    int y = border + (row/YRES)*rgap + row*(pixel+pgap);
-    if (y<y0 || y>y1) continue;
-    for(col=0; col<DCOLS; col++) {
-      int x = border + (col/XRES)*cgap + col*(pixel+pgap);
-      int p;
-      if (x<x0 || x>x1) continue;
-      p=row*DCOLS*XRES+col;
-      XFillRectangle(dp,w,LCDpixmap2[p]?fg_gc:hg_gc,x,y,pixel,pixel);
-      dirty=1;
-    }
-  }
-  if (dirty) XSync(dp,False);
-}
-
-
-static int async_update() 
-{
-  XSetWindowAttributes wa;
-  XEvent ev;
-
-  if ((dp=XOpenDisplay(NULL))==NULL)
-    return -1;
-  wa.event_mask=ExposureMask;
-  XChangeWindowAttributes(dp,w,CWEventMask,&wa);
-  for(;;) {
-    XWindowEvent(dp,w,ExposureMask,&ev);
-    if (ev.type==Expose) {
-      acquire_lock();
-      update(ev.xexpose.x,ev.xexpose.y,
-            ev.xexpose.width,ev.xexpose.height);
-      release_lock();
-    }
-  }
-}
-#endif
-
 
 // ****************************************
 // ***            plugins               ***
index eb1c4a003f85fdba839fa9f050de315ef64aeb7d..3b678848da7244921393ef71ebc340aff4299c34 100644 (file)
@@ -97,6 +97,19 @@ Display XWindow {
     Halfground '#70c000'
 }
 
+Display Image {
+    Driver 'Image'
+#   Format 'PPM'
+    Format 'PNG'
+    Size   '120x32'
+    Font   '6x8'
+    Pixel  '4+1'
+    Gap    '-1x-1'
+    Border 20
+    Foreground '#000000'
+    Background '#80d000'
+    Halfground '#70c000'
+}
 
 Plugin Seti {
     Directory '/root/setiathome-3.08.i686-pc-linux-gnu'
@@ -474,9 +487,10 @@ Layout testMySQL {
 #Display 'CF631'
 #Display 'CF632'
 #Display 'CF633'
-Display 'USBLCD'
+#Display 'USBLCD'
 #Display 'T6963-240x64'
 #Display 'XWindow'
+Display 'Image'
 
 Layout  'Default'
 #ayout  'L16x2'