aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-05-25 14:26:29 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-05-25 14:26:29 +0000
commitbdf3e629a1d65b4a451b335674048962b5cfec2c (patch)
treeb5c9c44407101b4a881a78cf5a163b3b554b38d4
parent7a9143eb1bb07879b7cb77559bb96f1dcfbdb03d (diff)
downloadlcd4linux-bdf3e629a1d65b4a451b335674048962b5cfec2c.tar.gz
[lcd4linux @ 2004-05-25 14:26:28 by reinelt]
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
-rw-r--r--Makefile.am2
-rw-r--r--Makefile.in8
-rw-r--r--Raster.c509
-rwxr-xr-xconfigure17
-rw-r--r--drivers.m418
-rw-r--r--drv.c17
-rw-r--r--drv_Crystalfontz.c9
-rw-r--r--drv_X11.c201
-rw-r--r--lcd4linux.conf.sample16
9 files changed, 81 insertions, 716 deletions
diff --git a/Makefile.am b/Makefile.am
index badf184..6c10ccd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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 \
diff --git a/Makefile.in b/Makefile.in
index 2a7bbfb..7f23768 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -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
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 }
-};
diff --git a/configure b/configure
index ebf9082..35b07fa 100755
--- 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
diff --git a/drivers.m4 b/drivers.m4
index e058e5a..47e1600 100644
--- a/drivers.m4
+++ b/drivers.m4
@@ -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 75605f5..4904551 100644
--- 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
*
@@ -23,6 +23,11 @@
*
*
* $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,
diff --git a/drv_Crystalfontz.c b/drv_Crystalfontz.c
index 164141e..26b897c 100644
--- a/drv_Crystalfontz.c
+++ b/drv_Crystalfontz.c
@@ -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
*
@@ -23,6 +23,11 @@
*
*
* $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) {
diff --git a/drv_X11.c b/drv_X11.c
index e146df4..a5c9176 100644
--- 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
*
@@ -26,6 +26,11 @@
*
*
* $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 ***
diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample
index eb1c4a0..3b67884 100644
--- a/lcd4linux.conf.sample
+++ b/lcd4linux.conf.sample
@@ -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'