diff -Nur lcdproc-CVS-current-20050115_orig/acinclude.m4 lcdproc-CVS-current-20050115/acinclude.m4
--- lcdproc-CVS-current-20050115_orig/acinclude.m4	2004-10-10 09:00:16.000000000 +0200
+++ lcdproc-CVS-current-20050115/acinclude.m4	2005-01-15 17:29:28.000000000 +0100
@@ -7,14 +7,14 @@
   	[                  Possible choices are:]
  	[                    mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,]
  	[                    hd44780,joy,irman,lirc,bayrad,glk,,mtc_s16209x]
- 	[                    stv5730,sed1330,sed1520,svga,lcdm001,t6963]
+ 	[                    stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963]
 	[                    lcterm,icp_a106,ms6931,iowarrior]
 	[                  \"all\" compiles all drivers],
   	drivers="$enableval",
   	drivers=[lcdm001,mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,bayrad,glk])
 
 if test "$drivers" = "all"; then
-	drivers=[mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior]
+	drivers=[mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior]
 fi
 
   	drivers=`echo $drivers | sed 's/,/ /g'`
@@ -197,6 +197,15 @@
 				AC_MSG_WARN([The sed1520 driver needs a parallel port.])
 			fi
 			;;
+		sed1530)
+			if test "$ac_cv_port_have_lpt" = yes
+			then
+				DRIVERS="$DRIVERS sed1530${SO}"
+				actdrivers=["$actdrivers sed1530"]
+			else
+				AC_MSG_WARN([The sed1530 driver needs a parallel port.])
+			fi
+			;;
 		stv5730)
 			if test "$ac_cv_port_have_lpt" = yes
 			then
diff -Nur lcdproc-CVS-current-20050115_orig/aclocal.m4 lcdproc-CVS-current-20050115/aclocal.m4
--- lcdproc-CVS-current-20050115_orig/aclocal.m4	2005-01-15 09:00:28.000000000 +0100
+++ lcdproc-CVS-current-20050115/aclocal.m4	2005-01-15 17:30:20.000000000 +0100
@@ -20,14 +20,14 @@
   	[                  Possible choices are:]
  	[                    mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,]
  	[                    hd44780,joy,irman,lirc,bayrad,glk,,mtc_s16209x]
- 	[                    stv5730,sed1330,sed1520,svga,lcdm001,t6963]
+ 	[                    stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963]
 	[                    lcterm,icp_a106,ms6931,iowarrior]
 	[                  \"all\" compiles all drivers],
   	drivers="$enableval",
   	drivers=[lcdm001,mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,bayrad,glk])
 
 if test "$drivers" = "all"; then
-	drivers=[mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior]
+	drivers=[mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior]
 fi
 
   	drivers=`echo $drivers | sed 's/,/ /g'`
@@ -210,6 +210,15 @@
 				AC_MSG_WARN([The sed1520 driver needs a parallel port.])
 			fi
 			;;
+		sed1530)
+			if test "$ac_cv_port_have_lpt" = yes
+			then
+				DRIVERS="$DRIVERS sed1530${SO}"
+				actdrivers=["$actdrivers sed1530"]
+			else
+				AC_MSG_WARN([The sed1530 driver needs a parallel port.])
+			fi
+			;;
 		stv5730)
 			if test "$ac_cv_port_have_lpt" = yes
 			then
diff -Nur lcdproc-CVS-current-20050115_orig/configure lcdproc-CVS-current-20050115/configure
--- lcdproc-CVS-current-20050115_orig/configure	2005-01-15 09:00:36.000000000 +0100
+++ lcdproc-CVS-current-20050115/configure	2005-01-15 17:30:24.000000000 +0100
@@ -860,7 +860,7 @@
   	                  Possible choices are:
  	                    mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,
  	                    hd44780,joy,irman,lirc,bayrad,glk,,mtc_s16209x
- 	                    stv5730,sed1330,sed1520,svga,lcdm001,t6963
+ 	                    stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963
 	                    lcterm,icp_a106,ms6931,iowarrior
 	                  \"all\" compiles all drivers
   --enable-ldap           compile with LDAP support.
@@ -9054,7 +9113,7 @@
 fi;
 
 if test "$drivers" = "all"; then
-	drivers=mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior
+	drivers=mtxorb,cfontz,cfontz633,curses,cwlnx,text,lb216,mtc_s16209x,hd44780,joy,irman,lirc,bayrad,glk,stv5730,sed1330,sed1520,sed1530,svga,lcdm001,t6963,lcterm,icp_a106,ms6931,iowarrior
 fi
 
   	drivers=`echo $drivers | sed 's/,/ /g'`
@@ -10307,6 +10378,16 @@
 echo "$as_me: WARNING: The sed1520 driver needs a parallel port." >&2;}
 			fi
 			;;
+		sed1530)
+			if test "$ac_cv_port_have_lpt" = yes
+			then
+				DRIVERS="$DRIVERS sed1530${SO}"
+				actdrivers="$actdrivers sed1530"
+			else
+				{ echo "$as_me:$LINENO: WARNING: The sed1530 driver needs a parallel port." >&5
+echo "$as_me: WARNING: The sed1530 driver needs a parallel port." >&2;}
+			fi
+			;;
 		stv5730)
 			if test "$ac_cv_port_have_lpt" = yes
 			then
diff -Nur lcdproc-CVS-current-20050115_orig/LCDd.conf lcdproc-CVS-current-20050115/LCDd.conf
--- lcdproc-CVS-current-20050115_orig/LCDd.conf	2004-10-03 09:00:12.000000000 +0200
+++ lcdproc-CVS-current-20050115/LCDd.conf	2005-01-15 17:26:41.000000000 +0100
@@ -504,6 +504,16 @@
 
 
 
+[sed1530]
+# Seiko Epson 1530 driver win serial over parallel mode
+
+Arguments="-p 0x278"
+
+# -p n	--port n	Select the output device to use port n
+# -h	--help		Show this help information
+
+
+
 [stv5730]
 # stv5730 driver
 
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/Makefile.am lcdproc-CVS-current-20050115/server/drivers/Makefile.am
--- lcdproc-CVS-current-20050115_orig/server/drivers/Makefile.am	2004-10-24 09:00:43.000000000 +0200
+++ lcdproc-CVS-current-20050115/server/drivers/Makefile.am	2005-01-15 17:25:21.000000000 +0100
@@ -18,7 +18,7 @@
 LIBS =
 
 pkglib_PROGRAMS = @DRIVERS@
-EXTRA_PROGRAMS = bayrad CFontz CFontz633 curses CwLnx glk hd44780 irman icp_a106 joy lb216 mtc_s16209x lcdm001 lcterm lirc MtxOrb sed1330 sed1520 stv5730 svga t6963 text wirz_sli ms6931 IOWarrior
+EXTRA_PROGRAMS = bayrad CFontz CFontz633 curses CwLnx glk hd44780 irman icp_a106 joy lb216 mtc_s16209x lcdm001 lcterm lirc MtxOrb sed1330 sed1520 sed1530 stv5730 svga t6963 text wirz_sli ms6931 IOWarrior
 noinst_LIBRARIES = libLCD.a
 
 IOWarrior_CFLAGS =   @libusb_cflags@
@@ -61,6 +61,7 @@
 MtxOrb_SOURCES =     lcd.h MtxOrb.c MtxOrb.h report.h bigfont.h
 sed1330_SOURCES =    lcd.h sed1330.h sed1330.c port.h lpt-port.h timing.h report.h
 sed1520_SOURCES =    lcd.h sed1520.c sed1520.h sed1520fm.c sed1520fm.h port.h report.h
+sed1530_SOURCES =    lcd.h sed1530.c sed1530.h sed1530fm.c sed1530fm.h port.h report.h
 stv5730_SOURCES =    lcd.h stv5730.c stv5730.h report.h
 svga_SOURCES =       lcd.h svgalib_drv.c svgalib_drv.h report.h
 t6963_SOURCES =      lcd.h t6963.c t6963.h t6963_font.h report.h
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/Makefile.in lcdproc-CVS-current-20050115/server/drivers/Makefile.in
--- lcdproc-CVS-current-20050115_orig/server/drivers/Makefile.in	2005-01-15 09:00:35.000000000 +0100
+++ lcdproc-CVS-current-20050115/server/drivers/Makefile.in	2005-01-15 17:30:50.000000000 +0100
@@ -137,7 +137,7 @@
 AM_LDFLAGS = @LDSHARED@
 
 pkglib_PROGRAMS = @DRIVERS@
-EXTRA_PROGRAMS = bayrad CFontz CFontz633 curses CwLnx glk hd44780 irman icp_a106 joy lb216 mtc_s16209x lcdm001 lcterm lirc MtxOrb sed1330 sed1520 stv5730 svga t6963 text wirz_sli ms6931 IOWarrior
+EXTRA_PROGRAMS = bayrad CFontz CFontz633 curses CwLnx glk hd44780 irman icp_a106 joy lb216 mtc_s16209x lcdm001 lcterm lirc MtxOrb sed1330 sed1520 sed1530 stv5730 svga t6963 text wirz_sli ms6931 IOWarrior
 noinst_LIBRARIES = libLCD.a
 
 IOWarrior_CFLAGS = @libusb_cflags@
@@ -180,6 +180,7 @@
 MtxOrb_SOURCES = lcd.h MtxOrb.c MtxOrb.h report.h bigfont.h
 sed1330_SOURCES = lcd.h sed1330.h sed1330.c port.h lpt-port.h timing.h report.h
 sed1520_SOURCES = lcd.h sed1520.c sed1520.h sed1520fm.c sed1520fm.h port.h report.h
+sed1530_SOURCES = lcd.h sed1530.c sed1530.h sed1530fm.c sed1530fm.h port.h report.h
 stv5730_SOURCES = lcd.h stv5730.c stv5730.h report.h
 svga_SOURCES = lcd.h svgalib_drv.c svgalib_drv.h report.h
 t6963_SOURCES = lcd.h t6963.c t6963.h t6963_font.h report.h
@@ -204,8 +205,9 @@
 	irman$(EXEEXT) icp_a106$(EXEEXT) joy$(EXEEXT) lb216$(EXEEXT) \
 	mtc_s16209x$(EXEEXT) lcdm001$(EXEEXT) lcterm$(EXEEXT) \
 	lirc$(EXEEXT) MtxOrb$(EXEEXT) sed1330$(EXEEXT) sed1520$(EXEEXT) \
-	stv5730$(EXEEXT) svga$(EXEEXT) t6963$(EXEEXT) text$(EXEEXT) \
-	wirz_sli$(EXEEXT) ms6931$(EXEEXT) IOWarrior$(EXEEXT)
+	sed1530$(EXEEXT) stv5730$(EXEEXT) svga$(EXEEXT) t6963$(EXEEXT) \
+	text$(EXEEXT) wirz_sli$(EXEEXT) ms6931$(EXEEXT) \
+	IOWarrior$(EXEEXT)
 pkglib_PROGRAMS = @DRIVERS@
 PROGRAMS = $(pkglib_PROGRAMS)
 
@@ -298,6 +300,11 @@
 sed1520_LDADD = $(LDADD)
 sed1520_DEPENDENCIES =
 sed1520_LDFLAGS =
+am_sed1530_OBJECTS = sed1530.$(OBJEXT) sed1530fm.$(OBJEXT)
+sed1530_OBJECTS = $(am_sed1530_OBJECTS)
+sed1530_LDADD = $(LDADD)
+sed1530_DEPENDENCIES =
+sed1530_LDFLAGS =
 am_stv5730_OBJECTS = stv5730.$(OBJEXT)
 stv5730_OBJECTS = $(am_stv5730_OBJECTS)
 stv5730_LDADD = $(LDADD)
@@ -345,7 +352,8 @@
 @AMDEP_TRUE@	./$(DEPDIR)/lcterm.Po ./$(DEPDIR)/lircin.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/ms6931.Po ./$(DEPDIR)/mtc_s16209x.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/sed1330.Po ./$(DEPDIR)/sed1520.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/sed1520fm.Po ./$(DEPDIR)/stv5730.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/sed1520fm.Po ./$(DEPDIR)/sed1530.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/sed1530fm.Po ./$(DEPDIR)/stv5730.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/svgalib_drv.Po ./$(DEPDIR)/t6963.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/text.Po ./$(DEPDIR)/wirz-sli.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -359,11 +367,11 @@
 	$(icp_a106_SOURCES) $(irman_SOURCES) $(joy_SOURCES) \
 	$(lb216_SOURCES) $(lcdm001_SOURCES) $(lcterm_SOURCES) \
 	$(lirc_SOURCES) $(ms6931_SOURCES) $(mtc_s16209x_SOURCES) \
-	$(sed1330_SOURCES) $(sed1520_SOURCES) $(stv5730_SOURCES) \
-	$(svga_SOURCES) $(t6963_SOURCES) $(text_SOURCES) \
-	$(wirz_sli_SOURCES)
+	$(sed1330_SOURCES) $(sed1520_SOURCES) $(sed1530_SOURCES) \
+	$(stv5730_SOURCES) $(svga_SOURCES) $(t6963_SOURCES) \
+	$(text_SOURCES) $(wirz_sli_SOURCES)
 DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am
-SOURCES = $(libLCD_a_SOURCES) $(CFontz_SOURCES) $(CFontz633_SOURCES) $(CwLnx_SOURCES) $(IOWarrior_SOURCES) $(MtxOrb_SOURCES) $(bayrad_SOURCES) $(curses_SOURCES) $(glk_SOURCES) $(hd44780_SOURCES) $(EXTRA_hd44780_SOURCES) $(icp_a106_SOURCES) $(irman_SOURCES) $(joy_SOURCES) $(lb216_SOURCES) $(lcdm001_SOURCES) $(lcterm_SOURCES) $(lirc_SOURCES) $(ms6931_SOURCES) $(mtc_s16209x_SOURCES) $(sed1330_SOURCES) $(sed1520_SOURCES) $(stv5730_SOURCES) $(svga_SOURCES) $(t6963_SOURCES) $(text_SOURCES) $(wirz_sli_SOURCES)
+SOURCES = $(libLCD_a_SOURCES) $(CFontz_SOURCES) $(CFontz633_SOURCES) $(CwLnx_SOURCES) $(IOWarrior_SOURCES) $(MtxOrb_SOURCES) $(bayrad_SOURCES) $(curses_SOURCES) $(glk_SOURCES) $(hd44780_SOURCES) $(EXTRA_hd44780_SOURCES) $(icp_a106_SOURCES) $(irman_SOURCES) $(joy_SOURCES) $(lb216_SOURCES) $(lcdm001_SOURCES) $(lcterm_SOURCES) $(lirc_SOURCES) $(ms6931_SOURCES) $(mtc_s16209x_SOURCES) $(sed1330_SOURCES) $(sed1520_SOURCES) $(sed1530_SOURCES) $(stv5730_SOURCES) $(svga_SOURCES) $(t6963_SOURCES) $(text_SOURCES) $(wirz_sli_SOURCES)
 
 all: all-am
 
@@ -467,6 +475,9 @@
 sed1520$(EXEEXT): $(sed1520_OBJECTS) $(sed1520_DEPENDENCIES) 
 	@rm -f sed1520$(EXEEXT)
 	$(LINK) $(sed1520_LDFLAGS) $(sed1520_OBJECTS) $(sed1520_LDADD) $(LIBS)
+sed1530$(EXEEXT): $(sed1530_OBJECTS) $(sed1530_DEPENDENCIES) 
+	@rm -f sed1530$(EXEEXT)
+	$(LINK) $(sed1530_LDFLAGS) $(sed1530_OBJECTS) $(sed1530_LDADD) $(LIBS)
 stv5730$(EXEEXT): $(stv5730_OBJECTS) $(stv5730_DEPENDENCIES) 
 	@rm -f stv5730$(EXEEXT)
 	$(LINK) $(stv5730_LDFLAGS) $(stv5730_OBJECTS) $(stv5730_LDADD) $(LIBS)
@@ -520,6 +531,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sed1330.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sed1520.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sed1520fm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sed1530.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sed1530fm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stv5730.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svgalib_drv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t6963.Po@am__quote@
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/sed1520.c lcdproc-CVS-current-20050115/server/drivers/sed1520.c
--- lcdproc-CVS-current-20050115_orig/server/drivers/sed1520.c	2002-05-23 20:03:39.000000000 +0200
+++ lcdproc-CVS-current-20050115/server/drivers/sed1520.c	2005-01-15 21:12:06.159894143 +0100
@@ -268,6 +268,24 @@
 }
 
 /////////////////////////////////////////////////////////////////
+// Returns the display width
+//
+MODULE_EXPORT int
+sed1520_cellwidth (Driver *drvthis)
+{
+	return cellwidth;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display height
+//
+MODULE_EXPORT int
+sed1520_cellheight (Driver *drvthis)
+{
+	return cellheight;
+}
+
+/////////////////////////////////////////////////////////////////
 // Clears the LCD screen
 //
 MODULE_EXPORT void
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/sed1530.c lcdproc-CVS-current-20050115/server/drivers/sed1530.c
--- lcdproc-CVS-current-20050115_orig/server/drivers/sed1530.c	1970-01-01 01:00:00.000000000 +0100
+++ lcdproc-CVS-current-20050115/server/drivers/sed1530.c	2005-01-15 19:45:23.000000000 +0100
@@ -0,0 +1,615 @@
+//////////////////////////////////////////////////////////////////////////
+// This is a driver for 96x32 pixel graphic displays based on the       //
+// SED1530 Controller connected to the parallel port. Check             //
+//                    www.absorb.it/hacked/sed1530                      //
+// for more information                                                 //
+// This Controller has no built in character generator. Therefore all   //
+// fonts and pixels are generated by this driver.                       //
+//                                                                      //
+// This driver is based on sed1530.c  Thanks to Robin Adams for his     //
+// work. My part was mainly to copy and paste the right codes and       //
+// changed the data transfer to serial over parallel.                   //
+// The HD44780 font in sed1530fm.c is copyd from sed1530fm.c and was    //
+// originated by Michael Reinelt / lcd4linux and is (C) 2000 by him.    //
+//                                                                      //
+// [sed1530.c 2001,2002 Robin Adams ( robin@adams-online.de )]          //
+// sed1530.c 2005 Rene Ejury (just at absorb.it)                        //
+// This driver is released under the GPL. See file COPYING in this      //
+// package for further details.                                         //
+//////////////////////////////////////////////////////////////////////////
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/errno.h>
+#include <time.h>
+#include "port.h"
+#include "timing.h"
+#define uPause timing_uPause
+
+#include "sed1530fm.h"
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifndef LPTPORT
+#define LPTPORT 0x378
+#endif
+
+/////////////////////////////////////////////////////////////////
+// serial mode:
+// the board made by pollin electronic uses serial transfer
+// over parallel port
+//	lpt	lcd
+//	DATA0	SI	serial data input
+//	DATA1	SCL	serial clock input
+//	DATA2	A0	0 - control data / 1 - display data
+//	DATA3	CS	chipselect / enable input/output with 1 == CS2
+//	DATA4	/CS	chipselect / enable input/output with 0 == CS1
+//	DATA5	/RES	0 - reset
+//
+//	serial data is read when SCl goes high; chipUNselect resets shift register
+
+#define SI 0x01
+#define SCL 0x02
+#define A0 0x04
+#define CS2 0x08
+#define CS1 0x10
+#define RES 0x20
+
+#include "shared/str.h"
+#include "lcd.h"
+#include "sed1530.h"
+
+
+unsigned int sed1530_lptport = LPTPORT;
+char *framebuf = NULL;
+int width = LCD_DEFAULT_WIDTH;
+int height = LCD_DEFAULT_HEIGHT;
+int cellwidth = LCD_DEFAULT_CELLWIDTH;
+int cellheight = LCD_DEFAULT_CELLHEIGHT;
+
+
+// Vars for the server core
+MODULE_EXPORT char *api_version = API_VERSION;
+MODULE_EXPORT int stay_in_foreground = 0;
+MODULE_EXPORT int supports_multiple = 0;
+MODULE_EXPORT char *symbol_prefix = "sed1530_";
+
+void
+sed1530_write_byte (int value)
+{
+	port_out ( sed1530_lptport, (value));
+	port_out ( sed1530_lptport, (value + SCL));
+}
+
+
+/////////////////////////////////////////////////////////////////
+// writes command value to the sed1530
+//
+void
+sed1530_writecommand (int value)
+{
+	int i;
+	for (i = 7; i >= 0; i--)
+		sed1530_write_byte(((value >>i)&0x01)  + CS2 + RES);
+}
+
+/////////////////////////////////////////////////////////////////
+// writes data values (for the lower two lines) to the sed1530
+//
+void
+sed1530_writedata (int value)
+{
+	int i;
+	for (i = 7; i >= 0; i--)
+		sed1530_write_byte(((value >>i)&0x01)  + A0 + CS2 + RES);
+}
+
+/////////////////////////////////////////////////////////////////
+// writes data value (for the upper two lines) to the sed1530
+//
+void
+sed1530_writedata_rev (int value)
+{
+	int i;
+	for (i = 0; i <= 7; i++)
+		sed1530_write_byte(((value >>i)&0x01)  + A0 + CS2 + RES);
+}
+
+/////////////////////////////////////////////////////////////////
+// selects a page (=row) on sed1530
+//
+void
+sed1530_selectpage (int page)
+{
+	int value = 0xB0 + (page & 3);
+	sed1530_writecommand (value);
+}
+
+/////////////////////////////////////////////////////////////////
+// selects a column on the sed1530
+//
+void
+sed1530_selectcolumn (int column)
+{
+	 sed1530_writecommand (column & 0x0F);
+	 sed1530_writecommand (0x10 + ((column & 0xF0)>>4));
+}
+
+/////////////////////////////////////////////////////////////////
+// draws  char z from fontmap_1530 to the framebuffer at position
+// x,y. These are zero-based textmode positions.
+// The fontmap_1530 is stored in rows while the framebuffer is stored
+// in columns, so we need a little conversion.
+//
+void
+sed1530_drawchar2fb (int x, int y, unsigned char z)
+{
+    int i, j, k;
+
+    if (x < 0 || x > 19 || y < 0 || y > 3)
+	return;
+
+    for (i = 6; i > 0; i--)
+      {
+	  k = 0;
+	  for (j = 0; j < 7; j++)
+	    {
+		k = k +
+		    (((fontmap_1530[(int) z][j] * 2) & (1 << i)) / (1 << i)) *
+		    (1 << j);
+	    }
+	  framebuf[(y * 96) + (x * 6) + (6 - i)] = k;
+      }
+
+}
+
+/////////////////////////////////////////////////////////////////
+// This initialises the stuff. We support supplying port as
+// a command line argument.
+//
+MODULE_EXPORT int
+sed1530_init (Driver *drvthis, char *args)
+{
+    char *argv[64], *str;
+    int argc, i;
+
+    if (args)
+	if ((str = (char *) malloc (strlen (args) + 1)))
+	    strcpy (str, args);
+	else
+	  {
+	      fprintf (stderr, "Error mallocing\n");
+	      return -1;
+	  }
+    else
+	str = NULL;
+
+    argc = get_args (argv, args, 64);
+    for (i = 0; i < argc; i++)
+      {
+	  if (0 == strcmp (argv[i], "-p")
+	      || 0 == strcmp (argv[i], "--port\0"))
+	    {
+		if (i + 1 >= argc)
+		  {
+		      fprintf (stderr,
+			       "sed1530_init: %s requires an argument\n",
+			       argv[i]);
+		      return -1;
+		  }
+		else
+		  {
+		      int myport;
+		      if (sscanf (argv[i + 1], "%i", &myport) != 1)
+			{
+			    fprintf (stderr,
+				     "sed1530_init: Couldn't read port address -"
+				     " using default value 0x%x\n", sed1530_lptport);
+			    return -1;
+			}
+		      else
+			{
+			    sed1530_lptport = myport;
+			    ++i;
+			}
+		  }
+	    }
+	  else if (0 == strcmp (argv[i], "-h")
+		   || 0 == strcmp (argv[i], "--help"))
+	    {
+		//int i;
+		printf
+		    ("LCDproc sed1530 driver\n\t-p n\t--port n\tSelect the output device to use port n\n");
+		printf ("put the options in quotes like this:  '-p 0x278'\n");
+		printf ("\t-h\t--help\t\tShow this help information\n");
+		return -1;
+	    }
+      }
+
+	if (timing_init() == -1)
+		return -1;
+
+    // Allocate our framebuffer
+    framebuf = malloc (96 * 4 * 2);
+    if (!framebuf)
+      {
+	  //sed1530_close ();
+	  return -1;
+      }
+
+    // clear screen
+    memset (framebuf, 0, 96 * 4);
+
+    // Initialize the Port and the sed1530
+    if(port_access(sed1530_lptport)) return -1;
+    if(port_access(sed1530_lptport+2)) return -1;
+
+    sed1530_write_byte(0x00); 		// RESET
+
+    // Initialisation sequence
+    sed1530_writecommand (0x40);	// start display line = 0
+    sed1530_writecommand (0xa1);	// adc = invers
+    sed1530_writecommand (0xa3);	// lcd-bias = 1/6
+    sed1530_writecommand (0xc0);	// OutputStatus = 0
+    sed1530_writecommand (0x2f);	// lcd-power-control on
+    
+    sed1530_writecommand (0x8a);
+    
+    sed1530_writecommand (0xa4);	// test off
+    sed1530_writecommand (0xaf);	// display on
+    
+    // set reverse mode
+    //~ sed1530_writecommand (0xa6|reverse);
+    sed1530_writecommand (0xa6);
+    
+    sed1530_selectpage (3);
+
+    width = 96;
+    height = 32;
+    cellwidth = 6;
+    cellheight = 8;
+
+    return 0;
+}
+
+MODULE_EXPORT void
+sed1530_set_contrast (Driver *drvthis, int promille)
+{
+    sed1530_writecommand (0x80|((32/promille)&0x1F));
+	
+}
+
+
+
+
+/////////////////////////////////////////////////////////////////
+// Frees the frambuffer and exits the driver.
+//
+MODULE_EXPORT void
+sed1530_close (Driver *drvthis)
+{
+    if (framebuf != NULL)
+	free (framebuf);
+    framebuf = NULL;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display width
+//
+MODULE_EXPORT int
+sed1530_width (Driver *drvthis)
+{
+	return width;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display height
+//
+MODULE_EXPORT int
+sed1530_height (Driver *drvthis)
+{
+	return height;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display width
+//
+MODULE_EXPORT int
+sed1530_cellwidth (Driver *drvthis)
+{
+	return cellwidth;
+}
+
+/////////////////////////////////////////////////////////////////
+// Returns the display height
+//
+MODULE_EXPORT int
+sed1530_cellheight (Driver *drvthis)
+{
+	return cellheight;
+}
+
+/////////////////////////////////////////////////////////////////
+// Clears the LCD screen
+//
+MODULE_EXPORT void
+sed1530_clear (Driver *drvthis)
+{
+    memset (framebuf, 0, 384);
+}
+
+/////////////////////////////////////////////////////////////////
+//
+// Flushes all output to the lcd...
+//
+MODULE_EXPORT void
+sed1530_flush (Driver *drvthis)
+{
+    int i, j;
+    for (i = 0; i < 2; i++)	// for unknown reasons the first row of my panel is flipped
+      {
+	  sed1530_selectpage (i);
+	  sed1530_selectcolumn (18) ;
+	  for (j = 0; j < 97; j++)
+	      sed1530_writedata_rev (framebuf[j + 96 - (i * 96)]);
+      }
+    for (i = 2; i < 4; i++)
+      {
+	  sed1530_selectpage (i);
+	  sed1530_selectcolumn (18) ;
+	  for (j = 0; j < 97; j++)
+	      sed1530_writedata (framebuf[j + (i * 96)]);
+      }
+}
+
+/////////////////////////////////////////////////////////////////
+// Prints a string on the lc display, at position (x,y).  The
+// upper-left is (1,1), and the lower right should be (20,4).
+//
+MODULE_EXPORT void
+sed1530_string (Driver *drvthis, int x, int y, char string[])
+{
+    int i;
+    x--;			// Convert 1-based coords to 0-based...
+    y--;
+
+    for (i = 0; string[i]; i++)
+      {
+	  sed1530_drawchar2fb (x + i, y, string[i]);
+      }
+}
+
+/////////////////////////////////////////////////////////////////
+// Writes  char c at position x,y into the framebuffer.
+// x and y are 1-based textmode coordinates.
+//
+MODULE_EXPORT void
+sed1530_chr (Driver *drvthis, int x, int y, char c)
+{
+    y--;
+    x--;
+    sed1530_drawchar2fb (x, y, c);
+}
+
+/////////////////////////////////////////////////////////////////
+// This function draws a number num into the last 3 rows of the
+// framebuffer at 1-based position x. It should draw a 4-row font,
+// but methinks this would look a little stretched. When
+// num=10 a colon is drawn.
+// FIXME: make big numbers use less memory
+//
+MODULE_EXPORT void
+sed1530_num (Driver *drvthis, int x, int num)
+{
+    int z, c, i, s;
+    x--;
+
+    if (x < 0 || x > 19 || num < 0 || num > 10)
+	return;
+    if (num != 10 && (x < 0 || x > 17))
+	return;
+    if (num == 10 && (x < 0 || x > 19))
+	return;
+
+    if (num == 10)
+      {				// Doppelpunkt
+	  for (z = 0; z < 3; z++)
+	    {			// Zeilen a 8 Punkte
+		for (c = 0; c < 6; c++)
+		  {		// 6 Spalten
+		      s = 0;
+		      for (i = 0; i < 8; i++)
+			{	// 8 bits aus zeilen
+			    s >>= 1;
+			    if (*(fontbigdp_1530[(z * 8) + i] + c) == '.')
+				s += 128;
+			}
+		      framebuf[(z * 96) + 96 + (x * 6) + c] = s;
+		      //~ framebuf[(z * 122) + 122 + (x * 6) + c] = s;
+		  }
+	    }
+      }
+    else
+      {
+
+	  for (z = 0; z < 3; z++)
+	    {			// Zeilen a 8 Punkte
+		for (c = 0; c < 18; c++)
+		  {		// 18 Spalten
+		      s = 0;
+		      for (i = 0; i < 8; i++)
+			{	// 8 bits aus zeilen
+			    s >>= 1;
+			    if (*(fontbignum_1530[num][z * 8 + i] + c) == '.')
+				s += 128;
+			}
+		      framebuf[(z * 96) + 96 + (x * 6) + c] = s;
+		      //~ framebuf[(z * 122) + 122 + (x * 6) + c] = s;
+		  }
+	    }
+      }
+}
+
+
+/////////////////////////////////////////////////////////////////
+// Changes the font of character n to a pattern given by *dat.
+// HD44780 Controllers only posses 8 programmable chars. But
+// we store the fontmap completely in RAM, so every character
+// can be altered. !Important: Characters have to be redraw
+// by drawchar2fb() to show their new shape. Because we use
+// a non-standard 6x8 font a *dat not calculated from
+// widthth and sed1530->height will fail.
+//
+MODULE_EXPORT void
+sed1530_set_char (Driver *drvthis, int n, char *dat)
+{
+
+    int row, col, i;
+    if (n < 0 || n > 255)
+	return;
+    if (!dat)
+	return;
+    for (row = 0; row < 8; row++)
+      {
+	  i = 0;
+	  for (col = 0; col < 6; col++)
+	    {
+		i <<= 1;
+		i |= (dat[(row * 6) + col] > 0);
+	    }
+	  fontmap_1530[n][row] = i;
+      }
+}
+
+
+/////////////////////////////////////////////////////////////////
+// Draws a vertical from the bottom up to the last 3 rows of the
+// framebuffer at 1-based position x. len is given in pixels.
+//
+MODULE_EXPORT void
+sed1530_vbar (Driver *drvthis, int x, int len)
+{
+    int i, j, k;
+    x--;
+
+
+    for (j = 0; j < 3; j++)
+      {
+	  i = 0;
+	  k = 0;
+	  for (i = 0; i < 8; i++)
+	    {
+		if (len > i)
+		    k += 1 << (7 - i);
+	    }
+
+	  framebuf[((3 - j) * 96) + (x * 6)] = 0;
+	  framebuf[((3 - j) * 96) + (x * 6) + 1] = 0;
+	  framebuf[((3 - j) * 96) + (x * 6) + 2] = k;
+	  framebuf[((3 - j) * 96) + (x * 6) + 3] = k;
+	  framebuf[((3 - j) * 96) + (x * 6) + 4] = k;
+	  framebuf[((3 - j) * 96) + (x * 6) + 5] = 0;
+	  len -= 8;
+      }
+
+}
+
+
+/////////////////////////////////////////////////////////////////
+// Draws a horizontal bar from left to right at 1-based position
+// x,y into the framebuffer. len is given in pixels.
+//
+MODULE_EXPORT void
+sed1530_hbar (Driver *drvthis, int x, int y, int len)
+{
+    int i;
+    x--;
+    y--;
+
+    if (y < 0 || y > 3 || x < 0 || len < 0 || (x + (len / 6)) > 19)
+	return;
+
+    for (i = 0; i < len; i++)
+	framebuf[(y * 96) + (x * 6) + i] = 0x3C;
+}
+
+/////////////////////////////////////////////////////////////////
+// Reprogrammes character dest to contain an icon given by
+// which. Calls set_char() to do this.
+//
+MODULE_EXPORT int
+sed1530_icon (Driver *drvthis, int x, int y, int icon)
+{
+  static char heart_open[] = {
+    1, 1, 1, 1, 1,
+    1, 0, 1, 0, 1,
+    0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0,
+    1, 0, 0, 0, 1,
+    1, 1, 0, 1, 1,
+    1, 1, 1, 1, 1 };
+
+  static char heart_filled[] = {
+    1, 1, 1, 1, 1,
+    1, 0, 1, 0, 1,
+    0, 1, 0, 1, 0,
+    0, 1, 1, 1, 0,
+    0, 1, 1, 1, 0,
+    1, 0, 1, 0, 1,
+    1, 1, 0, 1, 1,
+    1, 1, 1, 1, 1 };
+
+  switch( icon )
+  {
+    case ICON_BLOCK_FILLED:
+      sed1530_chr( drvthis, x, y, 255 );
+      break;
+    case ICON_HEART_FILLED:
+      sed1530_set_char( drvthis, 0, heart_filled );
+      sed1530_chr( drvthis, x, y, 0 );
+      break;
+    case ICON_HEART_OPEN:
+      sed1530_set_char( drvthis, 0, heart_open );
+      sed1530_chr( drvthis, x, y, 0 );
+      break;
+    default:
+      return -1;
+  }
+  return 0;
+}
+
+/////////////////////////////////////////////////////////////
+// Does the heartbeat...
+//
+void
+sed1530_heartbeat(Driver *drvthis,  int type )
+{
+	static int timer = 0;
+	int whichIcon;
+	int j;
+
+	char heartdata[2][6] = {
+		{ 0x63, 0x41, 0x03, 0x41, 0x63, 0x7F },
+		{ 0x63, 0x5D, 0x3B, 0x5D, 0x63, 0x7F },
+	};
+
+	whichIcon = (! ((timer + 4) & 5));
+
+         sed1530_selectpage (0);
+	  sed1530_selectcolumn (114) ;
+	  for (j = 0; j < 6; j++) {
+
+	      sed1530_writedata_rev (heartdata[whichIcon][j]);
+              framebuf[90+j]=heartdata[whichIcon][j];
+              framebuf[90+384+j]=heartdata[whichIcon][j];
+
+           }
+	timer++;
+}
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/sed1530fm.c lcdproc-CVS-current-20050115/server/drivers/sed1530fm.c
--- lcdproc-CVS-current-20050115_orig/server/drivers/sed1530fm.c	1970-01-01 01:00:00.000000000 +0100
+++ lcdproc-CVS-current-20050115/server/drivers/sed1530fm.c	2005-01-15 17:33:24.000000000 +0100
@@ -0,0 +1,1117 @@
+//////////////////////////////////////////////////////////////////////////
+// This file contains a HD44780 font and a font for big numbers.        //
+// The HD44780 font in this file was shamelessly stolen from            //
+// Michael Reinelt / lcd4linux and is                                   //
+//  Copyright 1999, 2000 by Michael Reinelt (reinelt@eunet.at)          //
+// The rest of this file is                                             //
+//                                                                      //
+// (C) 2001 Robin Adams ( robin@adams-online.de )                       //
+//                                                                      //
+// This file is released under the GPL. See file COPYING in this        //
+// package for further details.                                         //
+//////////////////////////////////////////////////////////////////////////
+
+#define b______ 0x00
+#define b_____O 0x01
+#define b____O_ 0x02
+#define b____OO 0x03
+#define b___O__ 0x04
+#define b___O_O 0x05
+#define b___OO_ 0x06
+#define b___OOO 0x07
+#define b__O___ 0x08
+#define b__O__O 0x09
+#define b__O_O_ 0x0a
+#define b__O_OO 0x0b
+#define b__OO__ 0x0c
+#define b__OO_O 0x0d
+#define b__OOO_ 0x0e
+#define b__OOOO 0x0f
+#define b_O____ 0x10
+#define b_O___O 0x11
+#define b_O__O_ 0x12
+#define b_O__OO 0x13
+#define b_O_O__ 0x14
+#define b_O_O_O 0x15
+#define b_O_OO_ 0x16
+#define b_O_OOO 0x17
+#define b_OO___ 0x18
+#define b_OO__O 0x19
+#define b_OO_O_ 0x1a
+#define b_OO_OO 0x1b
+#define b_OOO__ 0x1c
+#define b_OOO_O 0x1d
+#define b_OOOO_ 0x1e
+#define b_OOOOO 0x1f
+#define b_OOOOO 0x1f
+#define bOOOOOO 0x3f
+
+unsigned char fontmap_1530[256][8] = {
+    [0x20] {b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x21] {b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b______,
+	    b______,
+	    b___O__,
+	    b______},
+    [0x22] {b__O_O_,
+	    b__O_O_,
+	    b__O_O_,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x23] {b__O_O_,
+	    b__O_O_,
+	    b_OOOOO,
+	    b__O_O_,
+	    b_OOOOO,
+	    b__O_O_,
+	    b__O_O_,
+	    b______},
+    [0x24] {b___O__,
+	    b__OOOO,
+	    b_O_O__,
+	    b__OOO_,
+	    b___O_O,
+	    b_OOOO_,
+	    b___O__,
+	    b______},
+    [0x25] {b_OO___,
+	    b_OO__O,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_O__OO,
+	    b____OO,
+	    b______},
+    [0x26] {b__OO__,
+	    b_O__O_,
+	    b_O_O__,
+	    b__O___,
+	    b_O_O_O,
+	    b_O__O_,
+	    b__OO_O,
+	    b______},
+    [0x27] {b__OO__,
+	    b___O__,
+	    b__O___,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x28] {b____O_,
+	    b___O__,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b___O__,
+	    b____O_,
+	    b______},
+    [0x29] {b__O___,
+	    b___O__,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b______},
+    [0x2a] {b______,
+	    b___O__,
+	    b_O_O_O,
+	    b__OOO_,
+	    b_O_O_O,
+	    b___O__,
+	    b______,
+	    b______},
+    [0x2b] {b______,
+	    b___O__,
+	    b___O__,
+	    b_OOOOO,
+	    b___O__,
+	    b___O__,
+	    b______,
+	    b______},
+    [0x2c] {b______,
+	    b______,
+	    b______,
+	    b______,
+	    b__OO__,
+	    b___O__,
+	    b__O___,
+	    b______},
+    [0x2d] {b______,
+	    b______,
+	    b______,
+	    b_OOOOO,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x2e] {b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b__OO__,
+	    b__OO__,
+	    b______},
+    [0x2f] {b______,
+	    b_____O,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_O____,
+	    b______,
+	    b______},
+    [0x30] {b__OOO_,
+	    b_O___O,
+	    b_O__OO,
+	    b_O_O_O,
+	    b_OO__O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x31] {b___O__,
+	    b__OO__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b__OOO_,
+	    b______},
+    [0x32] {b__OOO_,
+	    b_O___O,
+	    b_____O,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_OOOOO,
+	    b______},
+    [0x33] {b_OOOOO,
+	    b____O_,
+	    b___O__,
+	    b____O_,
+	    b_____O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x34] {b____O_,
+	    b___OO_,
+	    b__O_O_,
+	    b_O__O_,
+	    b_OOOOO,
+	    b____O_,
+	    b____O_,
+	    b______},
+    [0x35] {b_OOOOO,
+	    b_O____,
+	    b_O____,
+	    b_OOOO_,
+	    b_____O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x36] {b___OO_,
+	    b__O___,
+	    b_O____,
+	    b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x37] {b_OOOOO,
+	    b_____O,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b______},
+    [0x38] {b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x39] {b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b__OOOO,
+	    b_____O,
+	    b____O_,
+	    b__OO__,
+	    b______},
+    [0x3a] {b______,
+	    b__OO__,
+	    b__OO__,
+	    b______,
+	    b__OO__,
+	    b__OO__,
+	    b______,
+	    b______},
+    [0x3b] {b______,
+	    b__OO__,
+	    b__OO__,
+	    b______,
+	    b__OO__,
+	    b___O__,
+	    b__O___,
+	    b______},
+    [0x3c] {b____O_,
+	    b___O__,
+	    b__O___,
+	    b_O____,
+	    b__O___,
+	    b___O__,
+	    b____O_,
+	    b______},
+    [0x3d] {b______,
+	    b______,
+	    b_OOOOO,
+	    b______,
+	    b_OOOOO,
+	    b______,
+	    b______,
+	    b______},
+    [0x3e] {b_O____,
+	    b__O___,
+	    b___O__,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_O____,
+	    b______},
+    [0x3f] {b__OOO_,
+	    b_O___O,
+	    b_____O,
+	    b____O_,
+	    b___O__,
+	    b______,
+	    b___O__,
+	    b______},
+    [0x40] {b__OOO_,
+	    b_O___O,
+	    b_____O,
+	    b__OO_O,
+	    b_O_O_O,
+	    b_O_O_O,
+	    b__OOO_,
+	    b______},
+    [0x41] {b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOOO,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x42] {b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOO_,
+	    b______},
+    [0x43] {b__OOO_,
+	    b_O___O,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x44] {b_OOO__,
+	    b_O__O_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O__O_,
+	    b_OOO__,
+	    b______},
+    [0x45] {b_OOOOO,
+	    b_O____,
+	    b_O____,
+	    b_OOOO_,
+	    b_O____,
+	    b_O____,
+	    b_OOOOO,
+	    b______},
+    [0x46] {b_OOOOO,
+	    b_O____,
+	    b_O____,
+	    b_OOOO_,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b______},
+    [0x47] {b__OOO_,
+	    b_O___O,
+	    b_O____,
+	    b_O_OOO,
+	    b_O___O,
+	    b_O___O,
+	    b__OOOO,
+	    b______},
+    [0x48] {b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOOO,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x49] {b__OOO_,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b__OOO_,
+	    b______},
+    [0x4a] {b___OOO,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b_O__O_,
+	    b__OO__,
+	    b______},
+    [0x4b] {b_O___O,
+	    b_O__O_,
+	    b_O_O__,
+	    b_OO___,
+	    b_O_O__,
+	    b_O__O_,
+	    b_O___O,
+	    b______},
+    [0x4c] {b_O____,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b_OOOOO,
+	    b______},
+    [0x4d] {b_O___O,
+	    b_OO_OO,
+	    b_O_O_O,
+	    b_O_O_O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x4e] {b_O___O,
+	    b_O___O,
+	    b_OO__O,
+	    b_O_O_O,
+	    b_O__OO,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x4f] {b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x50] {b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOO_,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b______},
+    [0x51] {b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O_O_O,
+	    b_O__O_,
+	    b__OO_O,
+	    b______},
+    [0x52] {b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_OOOO_,
+	    b_O_O__,
+	    b_O__O_,
+	    b_O___O,
+	    b______},
+    [0x53] {b__OOOO,
+	    b_O____,
+	    b_O____,
+	    b__OOO_,
+	    b_____O,
+	    b_____O,
+	    b_OOOO_,
+	    b______},
+    [0x54] {b_OOOOO,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b______},
+    [0x55] {b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x56] {b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__O_O_,
+	    b___O__,
+	    b______},
+    [0x57] {b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O_O_O,
+	    b_O_O_O,
+	    b_O_O_O,
+	    b__O_O_,
+	    b______},
+    [0x58] {b_O___O,
+	    b_O___O,
+	    b__O_O_,
+	    b___O__,
+	    b__O_O_,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x59] {b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__O_O_,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b______},
+    [0x5a] {b_OOOOO,
+	    b_____O,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_O____,
+	    b_OOOOO,
+	    b______},
+    [0x5b] {b__OOO_,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b__OOO_,
+	    b______},
+    [0x5c] {b_O___O,
+	    b__O_O_,
+	    b_OOOOO,
+	    b___O__,
+	    b_OOOOO,
+	    b___O__,
+	    b___O__,
+	    b______},
+    [0x5d] {b__OOO_,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b____O_,
+	    b__OOO_,
+	    b______},
+    [0x5e] {b___O__,
+	    b__O_O_,
+	    b_O___O,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x5f] {b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b_OOOOO,
+	    b______},
+    [0x60] {b__O___,
+	    b___O__,
+	    b____O_,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0x61] {b______,
+	    b______,
+	    b__OOO_,
+	    b_____O,
+	    b__OOOO,
+	    b_O___O,
+	    b__OOOO,
+	    b______},
+    [0x62] {b_O____,
+	    b_O____,
+	    b_O____,
+	    b_O_OO_,
+	    b_OO__O,
+	    b_O___O,
+	    b_OOOO_,
+	    b______},
+    [0x63] {b______,
+	    b______,
+	    b__OOO_,
+	    b_O____,
+	    b_O____,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x64] {b_____O,
+	    b_____O,
+	    b_____O,
+	    b__OO_O,
+	    b_O__OO,
+	    b_O___O,
+	    b__OOOO,
+	    b______},
+    [0x65] {b______,
+	    b______,
+	    b__OOO_,
+	    b_O___O,
+	    b_OOOOO,
+	    b_O____,
+	    b__OOO_,
+	    b______},
+    [0x66] {b___OO_,
+	    b__O__O,
+	    b__O___,
+	    b_OOO__,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b______},
+    [0x67] {b______,
+	    b__OOOO,
+	    b_O___O,
+	    b_O___O,
+	    b__OOOO,
+	    b_____O,
+	    b__OOO_,
+	    b______},
+    [0x68] {b_O____,
+	    b_O____,
+	    b_O_OO_,
+	    b_OO__O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x69] {b___O__,
+	    b______,
+	    b__OO__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b__OOO_,
+	    b______},
+    [0x6a] {b____O_,
+	    b______,
+	    b___OO_,
+	    b____O_,
+	    b____O_,
+	    b_O__O_,
+	    b__OO__,
+	    b______},
+    [0x6b] {b__O___,
+	    b__O___,
+	    b__O__O,
+	    b__O_O_,
+	    b__OO__,
+	    b__O_O_,
+	    b__O__O,
+	    b______},
+    [0x6c] {b__OO__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b__OOO_,
+	    b______},
+    [0x6d] {b______,
+	    b______,
+	    b_OO_O_,
+	    b_O_O_O,
+	    b_O_O_O,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x6e] {b______,
+	    b______,
+	    b_OOOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b______},
+    [0x6f] {b______,
+	    b______,
+	    b__OOO_,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__OOO_,
+	    b______},
+    [0x70] {b______,
+	    b______,
+	    b_OOOO_,
+	    b_O___O,
+	    b_OOOO_,
+	    b_O____,
+	    b_O____,
+	    b______},
+    [0x71] {b______,
+	    b______,
+	    b__OO_O,
+	    b_O__OO,
+	    b__OOOO,
+	    b_____O,
+	    b_____O,
+	    b______},
+    [0x72] {b______,
+	    b______,
+	    b_O_OO_,
+	    b_OO__O,
+	    b_O____,
+	    b_O____,
+	    b_O____,
+	    b______},
+    [0x73] {b______,
+	    b______,
+	    b__OOO_,
+	    b_O____,
+	    b__OOO_,
+	    b_____O,
+	    b_OOOO_,
+	    b______},
+    [0x74] {b__O___,
+	    b_OOO__,
+	    b__O___,
+	    b__O___,
+	    b__O___,
+	    b__O__O,
+	    b___OO_,
+	    b______},
+    [0x75] {b______,
+	    b______,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O__OO,
+	    b__OO_O,
+	    b______},
+    [0x76] {b______,
+	    b______,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b__O_O_,
+	    b___O__,
+	    b______},
+    [0x77] {b______,
+	    b______,
+	    b_O___O,
+	    b_O___O,
+	    b_O___O,
+	    b_O_O_O,
+	    b__O_O_,
+	    b______},
+    [0x78] {b______,
+	    b______,
+	    b_O___O,
+	    b__O_O_,
+	    b___O__,
+	    b__O_O_,
+	    b_O___O,
+	    b______},
+    [0x79] {b______,
+	    b______,
+	    b_O___O,
+	    b_O___O,
+	    b__OOOO,
+	    b_____O,
+	    b__OOO_,
+	    b______},
+    [0x7a] {b______,
+	    b______,
+	    b_OOOOO,
+	    b____O_,
+	    b___O__,
+	    b__O___,
+	    b_OOOOO,
+	    b______},
+    [0x7b] {b____O_,
+	    b___O__,
+	    b___O__,
+	    b__O___,
+	    b___O__,
+	    b___O__,
+	    b____O_,
+	    b______},
+    [0x7c] {b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b___O__,
+	    b______},
+    [0x7d] {b__O___,
+	    b___O__,
+	    b___O__,
+	    b____O_,
+	    b___O__,
+	    b___O__,
+	    b__O___,
+	    b______},
+    [0x7e] {b______,
+	    b___O__,
+	    b____O_,
+	    b_OOOOO,
+	    b____O_,
+	    b___O__,
+	    b______,
+	    b______},
+
+    [0x7f] {b______,
+	    b___O__,
+	    b__O___,
+	    b_OOOOO,
+	    b__O___,
+	    b___O__,
+	    b______,
+	    b______},
+    [0xb0] {b__OOO_,
+	    b__O_O_,
+	    b__OOO_,
+	    b______,
+	    b______,
+	    b______,
+	    b______,
+	    b______},
+    [0xff] {bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO,
+	    bOOOOOO},
+};
+
+//FIXME: make big chars use less memory
+
+unsigned char *fontbignum_1530[10][24] = {
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++....++++++",
+     "++++++........++++",
+     "+++++..........+++",
+     "+++++....++....+++",
+     "+++++...++++...+++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++...++++...+++",
+     "+++++....++....+++",
+     "+++++..........+++",
+     "++++++........++++",
+     "++++++++....++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "+++++++++++++...++",
+     "++++++++++++....++",
+     "+++++++++++.....++",
+     "++++++++++......++",
+     "++++++++........++",
+     "+++++++.........++",
+     "+++++++....+....++",
+     "+++++++...++....++",
+     "+++++++.++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++.....+++++",
+     "++++++.........+++",
+     "+++++..........+++",
+     "+++++....+++....++",
+     "+++++...++++....++",
+     "++++++..++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "+++++++++++....+++",
+     "++++++++++....++++",
+     "+++++++++.....++++",
+     "++++++++.....+++++",
+     "+++++++....+++++++",
+     "++++++....++++++++",
+     "++++++....++++++++",
+     "+++++...........++",
+     "+++++...........++",
+     "+++++...........++",
+     "+++++...........++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "+++++++.....++++++",
+     "+++++.........++++",
+     "+++++.........++++",
+     "++++....+++....+++",
+     "++++....+++....+++",
+     "+++++++++++....+++",
+     "++++++++++....++++",
+     "+++++++++.....++++",
+     "+++++++++...++++++",
+     "+++++++++.....++++",
+     "+++++++++++....+++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++....++....+++",
+     "+++++..........+++",
+     "++++++........++++",
+     "+++++++.....++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++....++++",
+     "++++++++++....++++",
+     "+++++++++.....++++",
+     "++++++++......++++",
+     "++++++++......++++",
+     "+++++++.......++++",
+     "++++++........++++",
+     "++++++...+....++++",
+     "+++++...++....++++",
+     "+++++...++....++++",
+     "++++...+++....++++",
+     "+++...++++....++++",
+     "+++.............++",
+     "+++.............++",
+     "+++.............++",
+     "++++++++++....++++",
+     "++++++++++....++++",
+     "++++++++++....++++",
+     "++++++++++....++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++.........+++",
+     "++++++.........+++",
+     "+++++..........+++",
+     "+++++....+++++++++",
+     "+++++....+++++++++",
+     "+++++...++++++++++",
+     "+++++...+....+++++",
+     "++++..........++++",
+     "++++...........+++",
+     "++++....+++.....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++....++....+++",
+     "+++++..........+++",
+     "++++++........++++",
+     "+++++++.....++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++.....+++++",
+     "+++++++........+++",
+     "++++++.........+++",
+     "+++++....++.....++",
+     "+++++...++++....++",
+     "++++....++++++++++",
+     "++++....++++++++++",
+     "++++....+....+++++",
+     "++++..........++++",
+     "++++...........+++",
+     "++++.....++.....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++...++++....++",
+     "+++++....++.....++",
+     "++++++.........+++",
+     "++++++........++++",
+     "++++++++.....+++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++............++",
+     "++++............++",
+     "++++............++",
+     "++++++++++++....++",
+     "+++++++++++....+++",
+     "++++++++++....++++",
+     "++++++++++....++++",
+     "+++++++++....+++++",
+     "+++++++++...++++++",
+     "++++++++....++++++",
+     "++++++++....++++++",
+     "+++++++....+++++++",
+     "+++++++....+++++++",
+     "+++++++....+++++++",
+     "+++++++...++++++++",
+     "++++++....++++++++",
+     "++++++....++++++++",
+     "++++++....++++++++",
+     "++++++....++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "+++++++......+++++",
+     "+++++..........+++",
+     "+++++....++....+++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++....++....+++",
+     "++++++........++++",
+     "++++++........++++",
+     "+++++....++....+++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "+++++....++....+++",
+     "+++++..........+++",
+     "+++++++......+++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"},
+    {
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++",
+     "+++++++.....++++++",
+     "++++++........++++",
+     "+++++.........++++",
+     "++++.....++....+++",
+     "++++....++++...+++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++....++++....++",
+     "++++.....++.....++",
+     "+++++...........++",
+     "++++++..........++",
+     "+++++++....+....++",
+     "++++++++++++....++",
+     "++++++++++++....++",
+     "++++....++++...+++",
+     "++++.....++....+++",
+     "+++++.........++++",
+     "+++++........+++++",
+     "+++++++.....++++++",
+     "++++++++++++++++++",
+     "++++++++++++++++++"}
+};
+
+unsigned char *fontbigdp_1530[] = {
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "+....+",
+    "+....+",
+    "+....+",
+    "+....+",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "+....+",
+    "+....+",
+    "+....+",
+    "+....+",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++",
+    "++++++"
+};
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/sed1530fm.h lcdproc-CVS-current-20050115/server/drivers/sed1530fm.h
--- lcdproc-CVS-current-20050115_orig/server/drivers/sed1530fm.h	1970-01-01 01:00:00.000000000 +0100
+++ lcdproc-CVS-current-20050115/server/drivers/sed1530fm.h	2005-01-15 17:33:03.000000000 +0100
@@ -0,0 +1,8 @@
+#ifndef SED1530FM_H
+#define SED1530FM_H
+
+unsigned char fontmap_1530[256][8];
+unsigned char *fontbignum_1530[10][24];
+unsigned char *fontbigdp_1530[24];
+
+#endif
diff -Nur lcdproc-CVS-current-20050115_orig/server/drivers/sed1530.h lcdproc-CVS-current-20050115/server/drivers/sed1530.h
--- lcdproc-CVS-current-20050115_orig/server/drivers/sed1530.h	1970-01-01 01:00:00.000000000 +0100
+++ lcdproc-CVS-current-20050115/server/drivers/sed1530.h	2005-01-15 19:43:19.000000000 +0100
@@ -0,0 +1,23 @@
+#ifndef SED1530_H
+#define SED1530_H
+
+#include "lcd.h"
+
+MODULE_EXPORT int sed1530_init (Driver *drvthis, char *args);
+MODULE_EXPORT void sed1530_close (Driver *drvthis);
+MODULE_EXPORT int sed1530_width (Driver *drvthis);
+MODULE_EXPORT int sed1530_height (Driver *drvthis);
+MODULE_EXPORT void sed1530_clear (Driver *drvthis);
+MODULE_EXPORT void sed1530_flush (Driver *drvthis);
+MODULE_EXPORT void sed1530_string (Driver *drvthis, int x, int y, char string[]);
+MODULE_EXPORT void sed1530_chr (Driver *drvthis, int x, int y, char c);
+
+MODULE_EXPORT void sed1530_vbar (Driver *drvthis, int x, int len);
+MODULE_EXPORT void sed1530_hbar (Driver *drvthis, int x, int y, int len);
+MODULE_EXPORT void sed1530_num (Driver *drvthis, int x, int num);
+MODULE_EXPORT void sed1530_heartbeat (Driver *drvthis, int type);
+MODULE_EXPORT int  sed1530_icon (Driver *drvthis, int x, int y, int icon);
+
+MODULE_EXPORT void sed1530_set_contrast (struct lcd_logical_driver *drvthis, int promille);
+
+#endif
diff -Nur lcdproc-CVS-current-20050115_orig/server/sock.c lcdproc-CVS-current-20050115/server/sock.c
--- lcdproc-CVS-current-20050115_orig/server/sock.c	2003-08-10 09:00:37.000000000 +0200
+++ lcdproc-CVS-current-20050115/server/sock.c	2005-01-15 21:10:33.378919614 +0100
@@ -66,7 +66,7 @@
 struct ClientSocketMap* freeClientSocketPool;
 
 /* Length of longest transmission allowed at once...*/
-#define MAXMSG 8192
+#define MAXMSG 16384
 
 /**** Internal function declarations ****************************************/
 int sock_read_from_client(struct ClientSocketMap* clientSocketMap);
