- enhance example
- some fixes
diff --git a/pyparallel/examples/lcd.py b/pyparallel/examples/lcd.py
index b56c2a5..8e1c66b 100644
--- a/pyparallel/examples/lcd.py
+++ b/pyparallel/examples/lcd.py
@@ -5,7 +5,7 @@
 # this is distributed under a free software license, see license.txt
 
 import sys, time
-sys.path.append('..')
+sys.path.insert(0, '..')
 import parallel
 
 LCDON           = 0x01 #0x00000001 Switch on  display
@@ -31,9 +31,8 @@
 LCD_D7          = 1<<7
 
 
-class LCD:
+class FourBitIO(object):
     def __init__(self):
-        self.p = parallel.Parallel()
         self.data = 0
         
         self.out(0)                 #reset pins
@@ -97,6 +96,69 @@
         self.toggleE()              #toggle LCD_E, the enable pin
         time.sleep(0.001)           #wait until instr is finished
 
+
+class EightBitIO(object):
+    def __init__(self):
+        self.data = 0
+        
+        self.setRS(0)
+        self.setRW(0)
+        self.out(0)                 #reset pins
+        time.sleep(0.050)           #wait more than 30ms
+        #send the reset sequece (3 times the same pattern)
+        self.out(LCD8BITS)          #set 8 bit interface
+        self.toggleE()              #toggle LCD_E, the enable pin
+        time.sleep(0.005)           #wait a bit
+        self.toggleE()              #toggle LCD_E, the enable pin
+        time.sleep(0.005)           #wait a bit
+        self.toggleE()              #toggle LCD_E, the enable pin
+        time.sleep(0.005)           #wait a bit
+        
+        #~ self.instr(LCD2LINES)       #set 2 lines display
+        self.instr(LCDCURSOROFF)    #hide cursor
+        self.instr(LCDCLEAR)        #clear display
+
+    def setRW(self, state):
+        self.p.setAutoFeed(state)
+    
+    def setRS(self, state):
+        self.p.setInitOut(state)
+        
+    def toggleE(self):
+        """toggle enable pin"""
+        self.p.setDataStrobe(1)     #toggle LCD_E, the enable pin
+        #~ time.sleep(0.001)
+        self.p.setDataStrobe(0)     #back to inactive position
+        #~ time.sleep(0.001)
+
+    def out(self, data):
+        """set data to LCD port"""
+        self.data = data
+        self.p.setData(self.data)
+
+    def instr(self, cmd):
+        """send instruction byte to LCD"""
+        self.setRS(0)
+        self.setRW(0)
+        self.out(cmd)
+        self.toggleE()              #toggle LCD_E, the enable pin
+        time.sleep(0.005)           #wait until instr is finished
+
+    def putc(self, c):
+        """send a data byte to the LCD"""
+        self.setRS(1)
+        self.setRW(0)
+        self.out(ord(c))
+        self.toggleE()              #toggle LCD_E, the enable pin
+        time.sleep(0.001)           #wait until instr is finished
+
+
+#~ class HD44780(FourBitIO):
+class HD44780(EightBitIO):
+    def __init__(self):
+        self.p = parallel.Parallel()
+        super(HD44780, self).__init__()
+        
     def write(self, str):
         """write a string to the LCD"""
         for c in str:
@@ -109,7 +171,7 @@
         self.instr(LCDLINE1)        #just in case, set cursor to a visible pos
 
 if __name__ == '__main__':
-    lcd = LCD()
+    lcd = HD44780()
     lcd.write("Hello World")
     lcd.instr(LCDLINE2)
     lcd.write("from Python")
diff --git a/pyparallel/parallel/parallelppdev.py b/pyparallel/parallel/parallelppdev.py
index 18cc54c..98e1e84 100644
--- a/pyparallel/parallel/parallelppdev.py
+++ b/pyparallel/parallel/parallelppdev.py
@@ -184,7 +184,7 @@
         else:
             self.device = "/dev/parport%d" % port
         self._fd = os.open(self.device, os.O_RDWR)
-        self.PPEXCL()
+        #~ self.PPEXCL()
         self.PPCLAIM()
         self.setDataDir(1)
         self.setData(0)
diff --git a/pyparallel/setup.py b/pyparallel/setup.py
index 749470c..c537965 100644
--- a/pyparallel/setup.py
+++ b/pyparallel/setup.py
@@ -5,7 +5,7 @@
 if os.name == 'nt':
     data_files = {'parallel': ['simpleio.dll']}
 else:
-    data_files = None
+    data_files = {}
 
 setup (name = "pyparallel",
     description="Python Parallel Port Extension",