Re: [Gambas-user] Parallel Port - Illegal Seek -
mike ha scritto: On 04/07/2010 02:47 PM, nando wrote: Seek will not change the address. -- Original Message --- From: Doriano Blenginodoriano.bleng...@fastwebnet.it To: nand...@nothingsimple.com, mailing list for gambas users gambas-user@lists.sourceforge.net Sent: Wed, 07 Apr 2010 11:06:42 +0200 Subject: Re: [Gambas-user] Parallel Port - Illegal Seek - nando ha scritto: Using SEEK is not correct. If you think of the parallel port as a file, you cannot seek. It doesn't make sense. You can only read and write. What are you trying to accomplish ? -Fernando He is trying to do low level access to the parallel port, which has 3 hardware addresses. In that respect, seek() would make sense to select which IO address to read from/write to. Whether this works or not, depends on how the kernel driver interprets the seeks, but the following listing makes it clear that somewhere (other OSes?) this behavior works. The error could also arise from other problems: permissions, missing modules, wrong major/minor numbers and so on... Regards, Doriano How already stated in a previous email, it is possible to access I/O ports in different manners. After a research, I discovered two viable ways - direct access (I don't know if gambas has I/O instructions), and /dev/port, which is a device. In this last case seek() is used to address a port. From http://tldp.org/HOWTO/IO-Port-Programming-2.html : Another way to access I/O ports is to |open()| |/dev/port| (a character device, major number 1, minor 4) for reading and/or writing (the stdio |f*()| functions have internal buffering, so avoid them). Then |lseek()| to the appropriate byte in the file (file position 0 = port 0x00, file position 1 = port 0x01, and so on), and |read()| or |write()| a byte or word from or to it. Naturally, for this to work your program needs read/write access to |/dev/port|. This method is probably slower than the normal method above, but does not need compiler optimisation nor |ioperm()|. It doesn't need root access either, if you give a non-root user or group access to |/dev/port| --- but this is a very bad thing... [about security]... Using /dev/port can be problematic: can gambas do unbuffered I/O? Other methods would be to use some external program or library (shared object). If gambas does not have I/O (peek poke), then an external library is the most performant way, though not the simpler. Gambas can interface with external libraries using EXTERNAL declaration. Googling about this issue, I found some interesting page: http://tldp.org/HOWTO/IO-Port-Programming-2.html http://www.epanorama.net/circuits/parallel_output.html http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html http://cyberelk.net/tim/parport/parport.html http://people.redhat.com/twaugh/parport/html/ppdev.html The best way would be to write a gambas component, having either internal I/O instructions (a C component) or relying to an external library (a gambas component calling an external library; may be there is something already done somewhere). Hey, gambas gurus out there... someone has the time? I do not. Regards, Doriano -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ___ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user
Re: [Gambas-user] Parallel Port - Illegal Seek -
Hi All, I am writing a parallel port interface, however I am struggling with how to write to the parallel port. Below I have included the code that I have used. Following that I have included the BASIC code that I am bastardizing. My Gambas version is Gambas2.13 I am running Linux Mint 8 I do have a parallel port on my PC. It is '0378' - '037a' and '0778' - '077a' The error code I am getting is System error. illegal seek Thanks in advance for any help anyone can give. -GAMBAS 2 CODE FOLLOWS-- ' Gambas module file PUBLIC SUB Main() DIM N AS Integer DIM pin AS Integer DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0] DIM pump AS Integer DIM Ptime AS Integer DIM Clock AS Integer DIM UClock AS Integer DIM DClock AS Integer DIM commit AS Integer DIM poweron AS Integer DIM switch AS Integer DIM gate AS File DIM base0, base1, base2 AS Integer base0 = 0 base1 = 1 base2 = 2 poweron = 64 commit = 144 switch = 17 UClock = 130 DClock = 128 gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, base0 WRITE #gate, poweron FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base2 WRITE #gate, switch GOTO START CommitChanges: FOR N = 0 TO 7 STEP 1 pump = CInt(100 pinout[Fix(N)]) Clock = CInt(101 pinout[Fix(N)]) SEEK #gate, base0 WRITE #gate, pump FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, Clock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, pump NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT FOR N = 1 TO 16 STEP 1 SEEK #gate, base0 WRITE #gate, UClock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, DClock NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, commit FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, poweron GOTO PrintPinout PrintPinout: FOR N = 0 TO 7 STEP 1 PRINT pinout[Fix(N)] NEXT GOTO START PinSelectFail: PRINT You have selected a pin that does not exist, careful as this may cause a divide by 0 and end the universe, Select between pin 0 and pin 7 GOTO START START: PRINT What input do you want to toggle? (pins 0 - 7 are outputs, Pin 8 is the activation sequence) INPUT pin IF pin 0 OR pin 8 THEN GOTO PinSelectFail ELSE IF pin = 8 THEN GOTO CommitChanges ELSE IF pinout[Fix(pin)] = 0 THEN pinout[Fix(pin)] = 1 ELSE IF pinout[Fix(pin)] = 1 THEN pinout[Fix(pin)] = 0 ENDIF GOTO PrintPinout END -Gambas 2 END--- - -BASIC CODE FOLLOWS-- BASE0=H378 'SWITCH POWER AND OUTPUTS ON OUT BASE0, H80 OUT BASE0 + 2, 11 'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0) FOR N = 0 TO 7 DOUT(N) = 0 NEXT N DOUT=0 START: INPUT WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7); N IF N 0 OR N 7 THEN GOTO START N = FIX(N) DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT 'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT FOR N = 0 TO 7 IF DOUT(N) = 0 THEN DOUT = DOUT AND NOT (2^N) ELSE DOUT = DOUT OR 2^N ENDIF NEXT N 'SEND 8 CLOCK PULSES AND DIGITAL OUT DATA (ALL ZERO'S) FOR BIT = 1 TO 8 B = 8 - BIT BYTE = ((DOUT AND 2^B) / 2^B) OR H80 OUT BASE0, BYTE OUT BASE0, BYTE OR 2 OUT BASE0 BYTE NEXT BIT 'SEND ANOTHER 16 CLOCK PULSES TO SHIFT THE DATA INTO IC3 FOR BIT = 9 TO 24 OUT BASE0, H82 OUT BASE0, H80 NEXT BIT 'LOAD IC3 OUT BASE0, H90 OUT BASE0, h80] -BASIC END Bjorn Macintosh Have you read http://gambasdoc.org/help/howto/parport? Your program should work as expected if you open /dev/port, not /dev/parport0, if you seek at the true port address, and if you write bytes. DIM poweron AS Byte ' -- note that gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, H378 poweron = 1 WRITE #gate, poweron And if you need to wait a little, use the SLEEP or WAIT instruction. See the documentation for details on these instructions. I imagine that if you write Integer instead of Byte, then you will actually write the four bytes of the integer to four successive ports. Regards, -- Benoît Minisini -- Download Intel#174; Parallel Studio Eval Try the new software
Re: [Gambas-user] Parallel Port - Illegal Seek -
nando ha scritto: Using SEEK is not correct. If you think of the parallel port as a file, you cannot seek. It doesn't make sense. You can only read and write. What are you trying to accomplish ? -Fernando He is trying to do low level access to the parallel port, which has 3 hardware addresses. In that respect, seek() would make sense to select which IO address to read from/write to. Whether this works or not, depends on how the kernel driver interprets the seeks, but the following listing makes it clear that somewhere (other OSes?) this behavior works. The error could also arise from other problems: permissions, missing modules, wrong major/minor numbers and so on... Regards, Doriano -- Original Message --- From: Bjorn Macintosh bjorn.macint...@gmail.com To: gambas-user@lists.sourceforge.net Sent: Fri, 2 Apr 2010 21:09:58 +1300 Subject: [Gambas-user] Parallel Port - Illegal Seek - Hi All, I am writing a parallel port interface, however I am struggling with how to write to the parallel port. Below I have included the code that I have used. Following that I have included the BASIC code that I am bastardizing. My Gambas version is Gambas2.13 I am running Linux Mint 8 I do have a parallel port on my PC. It is '0378' - '037a' and '0778' - '077a' The error code I am getting is System error. illegal seek Thanks in advance for any help anyone can give. -GAMBAS2 CODE FOLLOWS-- ' Gambas module file PUBLIC SUB Main() DIM N AS Integer DIM pin AS Integer DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0] DIM pump AS Integer DIM Ptime AS Integer DIM Clock AS Integer DIM UClock AS Integer DIM DClock AS Integer DIM commit AS Integer DIM poweron AS Integer DIM switch AS Integer DIM gate AS File DIM base0, base1, base2 AS Integer base0 = 0 base1 = 1 base2 = 2 poweron = 64 commit = 144 switch = 17 UClock = 130 DClock = 128 gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, base0 WRITE #gate, poweron FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base2 WRITE #gate, switch GOTO START CommitChanges: FOR N = 0 TO 7 STEP 1 pump = CInt(100 pinout[Fix(N)]) Clock = CInt(101 pinout[Fix(N)]) SEEK #gate, base0 WRITE #gate, pump FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, Clock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, pump NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT FOR N = 1 TO 16 STEP 1 SEEK #gate, base0 WRITE #gate, UClock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, DClock NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, commit FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, poweron GOTO PrintPinout PrintPinout: FOR N = 0 TO 7 STEP 1 PRINT pinout[Fix(N)] NEXT GOTO START PinSelectFail: PRINT You have selected a pin that does not exist, careful as this may cause a divide by 0 and end the universe, Select between pin 0 and pin 7 GOTO START START: PRINT What input do you want to toggle? (pins 0 - 7 are outputs, Pin 8 is the activation sequence) INPUT pin IF pin 0 OR pin 8 THEN GOTO PinSelectFail ELSE IF pin = 8 THEN GOTO CommitChanges ELSE IF pinout[Fix(pin)] = 0 THEN pinout[Fix(pin)] = 1 ELSE IF pinout[Fix(pin)] = 1 THEN pinout[Fix(pin)] = 0 ENDIF GOTO PrintPinout END -Gambas2 END -BASIC CODE FOLLOWS-- BASE0=H378 'SWITCH POWER AND OUTPUTS ON OUT BASE0, H80 OUT BASE0 + 2, 11 'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0) FOR N = 0 TO 7 DOUT(N) = 0 NEXT N DOUT=0 START: INPUT WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7); N IF N 0 OR N 7 THEN GOTO START N = FIX(N) DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT 'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT FOR N = 0 TO 7 IF DOUT(N) = 0 THEN DOUT = DOUT AND NOT (2^N) ELSE DOUT = DOUT OR 2^N ENDIF NEXT N 'SEND 8 CLOCK PULSES AND DIGITAL OUT DATA (ALL ZERO'S) FOR BIT = 1 TO 8 B = 8 - BIT BYTE = ((DOUT AND 2^B) / 2^B) OR H80 OUT BASE0, BYTE OUT BASE0, BYTE OR 2 OUT BASE0 BYTE NEXT BIT 'SEND ANOTHER 16 CLOCK PULSES TO SHIFT THE DATA INTO IC3 FOR BIT = 9 TO 24 OUT BASE0, H82 OUT BASE0, H80 NEXT BIT 'LOAD IC3 OUT BASE0, H90 OUT BASE0, h80]
Re: [Gambas-user] Parallel Port - Illegal Seek -
Seek will not change the address. -- Original Message --- From: Doriano Blengino doriano.bleng...@fastwebnet.it To: nand...@nothingsimple.com, mailing list for gambas users gambas-user@lists.sourceforge.net Sent: Wed, 07 Apr 2010 11:06:42 +0200 Subject: Re: [Gambas-user] Parallel Port - Illegal Seek - nando ha scritto: Using SEEK is not correct. If you think of the parallel port as a file, you cannot seek. It doesn't make sense. You can only read and write. What are you trying to accomplish ? -Fernando He is trying to do low level access to the parallel port, which has 3 hardware addresses. In that respect, seek() would make sense to select which IO address to read from/write to. Whether this works or not, depends on how the kernel driver interprets the seeks, but the following listing makes it clear that somewhere (other OSes?) this behavior works. The error could also arise from other problems: permissions, missing modules, wrong major/minor numbers and so on... Regards, Doriano -- Original Message --- From: Bjorn Macintosh bjorn.macint...@gmail.com To: gambas-user@lists.sourceforge.net Sent: Fri, 2 Apr 2010 21:09:58 +1300 Subject: [Gambas-user] Parallel Port - Illegal Seek - Hi All, I am writing a parallel port interface, however I am struggling with how to write to the parallel port. Below I have included the code that I have used. Following that I have included the BASIC code that I am bastardizing. My Gambas version is Gambas2.13 I am running Linux Mint 8 I do have a parallel port on my PC. It is '0378' - '037a' and '0778' - '077a' The error code I am getting is System error. illegal seek Thanks in advance for any help anyone can give. -GAMBAS2 CODE FOLLOWS-- ' Gambas module file PUBLIC SUB Main() DIM N AS Integer DIM pin AS Integer DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0] DIM pump AS Integer DIM Ptime AS Integer DIM Clock AS Integer DIM UClock AS Integer DIM DClock AS Integer DIM commit AS Integer DIM poweron AS Integer DIM switch AS Integer DIM gate AS File DIM base0, base1, base2 AS Integer base0 = 0 base1 = 1 base2 = 2 poweron = 64 commit = 144 switch = 17 UClock = 130 DClock = 128 gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, base0 WRITE #gate, poweron FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base2 WRITE #gate, switch GOTO START CommitChanges: FOR N = 0 TO 7 STEP 1 pump = CInt(100 pinout[Fix(N)]) Clock = CInt(101 pinout[Fix(N)]) SEEK #gate, base0 WRITE #gate, pump FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, Clock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, pump NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT FOR N = 1 TO 16 STEP 1 SEEK #gate, base0 WRITE #gate, UClock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, DClock NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, commit FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, poweron GOTO PrintPinout PrintPinout: FOR N = 0 TO 7 STEP 1 PRINT pinout[Fix(N)] NEXT GOTO START PinSelectFail: PRINT You have selected a pin that does not exist, careful as this may cause a divide by 0 and end the universe, Select between pin 0 and pin 7 GOTO START START: PRINT What input do you want to toggle? (pins 0 - 7 are outputs, Pin 8 is the activation sequence) INPUT pin IF pin 0 OR pin 8 THEN GOTO PinSelectFail ELSE IF pin = 8 THEN GOTO CommitChanges ELSE IF pinout[Fix(pin)] = 0 THEN pinout[Fix(pin)] = 1 ELSE IF pinout[Fix(pin)] = 1 THEN pinout[Fix(pin)] = 0 ENDIF GOTO PrintPinout END -Gambas2 END -BASIC CODE FOLLOWS-- BASE0=H378 'SWITCH POWER AND OUTPUTS ON OUT BASE0, H80 OUT BASE0 + 2, 11 'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0) FOR N = 0 TO 7 DOUT(N) = 0 NEXT N DOUT=0 START: INPUT WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7); N IF N 0 OR N 7 THEN GOTO START N = FIX(N) DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT 'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT FOR N = 0 TO 7 IF DOUT(N) = 0 THEN DOUT = DOUT AND NOT (2^N) ELSE
Re: [Gambas-user] Parallel Port - Illegal Seek -
On 04/07/2010 02:47 PM, nando wrote: Seek will not change the address. -- Original Message --- From: Doriano Blenginodoriano.bleng...@fastwebnet.it To: nand...@nothingsimple.com, mailing list for gambas users gambas-user@lists.sourceforge.net Sent: Wed, 07 Apr 2010 11:06:42 +0200 Subject: Re: [Gambas-user] Parallel Port - Illegal Seek - nando ha scritto: Using SEEK is not correct. If you think of the parallel port as a file, you cannot seek. It doesn't make sense. You can only read and write. What are you trying to accomplish ? -Fernando He is trying to do low level access to the parallel port, which has 3 hardware addresses. In that respect, seek() would make sense to select which IO address to read from/write to. Whether this works or not, depends on how the kernel driver interprets the seeks, but the following listing makes it clear that somewhere (other OSes?) this behavior works. The error could also arise from other problems: permissions, missing modules, wrong major/minor numbers and so on... Regards, Doriano -- Original Message --- From: Bjorn Macintoshbjorn.macint...@gmail.com To: gambas-user@lists.sourceforge.net Sent: Fri, 2 Apr 2010 21:09:58 +1300 Subject: [Gambas-user] Parallel Port - Illegal Seek - Hi All, I am writing a parallel port interface, however I am struggling with how to write to the parallel port. Below I have included the code that I have used. Following that I have included the BASIC code that I am bastardizing. My Gambas version is Gambas2.13 I am running Linux Mint 8 I do have a parallel port on my PC. It is '0378' - '037a' and '0778' - '077a' The error code I am getting is System error. illegal seek Thanks in advance for any help anyone can give. -GAMBAS2 CODE FOLLOWS-- ' Gambas module file PUBLIC SUB Main() DIM N AS Integer DIM pin AS Integer DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0] DIM pump AS Integer DIM Ptime AS Integer DIM Clock AS Integer DIM UClock AS Integer DIM DClock AS Integer DIM commit AS Integer DIM poweron AS Integer DIM switch AS Integer DIM gate AS File DIM base0, base1, base2 AS Integer base0 = 0 base1 = 1 base2 = 2 poweron = 64 commit = 144 switch = 17 UClock = 130 DClock = 128 gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, base0 WRITE #gate, poweron FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base2 WRITE #gate, switch GOTO START CommitChanges: FOR N = 0 TO 7 STEP 1 pump = CInt(100 pinout[Fix(N)]) Clock = CInt(101 pinout[Fix(N)]) SEEK #gate, base0 WRITE #gate, pump FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, Clock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, pump NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT FOR N = 1 TO 16 STEP 1 SEEK #gate, base0 WRITE #gate, UClock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, DClock NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, commit FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, poweron GOTO PrintPinout PrintPinout: FOR N = 0 TO 7 STEP 1 PRINT pinout[Fix(N)] NEXT GOTO START PinSelectFail: PRINT You have selected a pin that does not exist, careful as this may cause a divide by 0 and end the universe, Select between pin 0 and pin 7 GOTO START START: PRINT What input do you want to toggle? (pins 0 - 7 are outputs, Pin 8 is the activation sequence) INPUT pin IF pin 0 OR pin 8 THEN GOTO PinSelectFail ELSE IF pin = 8 THEN GOTO CommitChanges ELSE IF pinout[Fix(pin)] = 0 THEN pinout[Fix(pin)] = 1 ELSE IF pinout[Fix(pin)] = 1 THEN pinout[Fix(pin)] = 0 ENDIF GOTO PrintPinout END -Gambas2 END -BASIC CODE FOLLOWS-- BASE0=H378 'SWITCH POWER AND OUTPUTS ON OUT BASE0,H80 OUT BASE0 + 2, 11 'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0) FOR N = 0 TO 7 DOUT(N) = 0 NEXT N DOUT=0 START: INPUT WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7); N IF N 0 OR N 7 THEN GOTO START N = FIX(N) DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT 'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT FOR N = 0 TO 7 IF DOUT(N) = 0 THEN DOUT = DOUT AND NOT (2^N) ELSE DOUT = DOUT OR 2^N
Re: [Gambas-user] Parallel Port - Illegal Seek -
Using SEEK is not correct. If you think of the parallel port as a file, you cannot seek. It doesn't make sense. You can only read and write. What are you trying to accomplish ? -Fernando -- Original Message --- From: Bjorn Macintosh bjorn.macint...@gmail.com To: gambas-user@lists.sourceforge.net Sent: Fri, 2 Apr 2010 21:09:58 +1300 Subject: [Gambas-user] Parallel Port - Illegal Seek - Hi All, I am writing a parallel port interface, however I am struggling with how to write to the parallel port. Below I have included the code that I have used. Following that I have included the BASIC code that I am bastardizing. My Gambas version is Gambas2.13 I am running Linux Mint 8 I do have a parallel port on my PC. It is '0378' - '037a' and '0778' - '077a' The error code I am getting is System error. illegal seek Thanks in advance for any help anyone can give. -GAMBAS2 CODE FOLLOWS-- ' Gambas module file PUBLIC SUB Main() DIM N AS Integer DIM pin AS Integer DIM pinout AS Integer[] = [0, 0, 0, 0, 0, 0, 0, 0] DIM pump AS Integer DIM Ptime AS Integer DIM Clock AS Integer DIM UClock AS Integer DIM DClock AS Integer DIM commit AS Integer DIM poweron AS Integer DIM switch AS Integer DIM gate AS File DIM base0, base1, base2 AS Integer base0 = 0 base1 = 1 base2 = 2 poweron = 64 commit = 144 switch = 17 UClock = 130 DClock = 128 gate = OPEN /dev/parport0 FOR READ WRITE SEEK #gate, base0 WRITE #gate, poweron FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base2 WRITE #gate, switch GOTO START CommitChanges: FOR N = 0 TO 7 STEP 1 pump = CInt(100 pinout[Fix(N)]) Clock = CInt(101 pinout[Fix(N)]) SEEK #gate, base0 WRITE #gate, pump FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, Clock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, pump NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT FOR N = 1 TO 16 STEP 1 SEEK #gate, base0 WRITE #gate, UClock FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, DClock NEXT FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, commit FOR Ptime = 1 TO 2000 STEP 1 NEXT SEEK #gate, base0 WRITE #gate, poweron GOTO PrintPinout PrintPinout: FOR N = 0 TO 7 STEP 1 PRINT pinout[Fix(N)] NEXT GOTO START PinSelectFail: PRINT You have selected a pin that does not exist, careful as this may cause a divide by 0 and end the universe, Select between pin 0 and pin 7 GOTO START START: PRINT What input do you want to toggle? (pins 0 - 7 are outputs, Pin 8 is the activation sequence) INPUT pin IF pin 0 OR pin 8 THEN GOTO PinSelectFail ELSE IF pin = 8 THEN GOTO CommitChanges ELSE IF pinout[Fix(pin)] = 0 THEN pinout[Fix(pin)] = 1 ELSE IF pinout[Fix(pin)] = 1 THEN pinout[Fix(pin)] = 0 ENDIF GOTO PrintPinout END -Gambas2 END -BASIC CODE FOLLOWS-- BASE0=H378 'SWITCH POWER AND OUTPUTS ON OUT BASE0, H80 OUT BASE0 + 2, 11 'DEFINE ALL DIGITAL OUTPUTS [OUT(N)] AS BEING OFF (0) FOR N = 0 TO 7 DOUT(N) = 0 NEXT N DOUT=0 START: INPUT WHICH DIGITAL OUTPUT DO YOU WANT TO TOGGLE (0 TO 7); N IF N 0 OR N 7 THEN GOTO START N = FIX(N) DOUT9N0=ABS(NOT (-DOUT(N))) ' THIS LINE TOGGLES THE OUTPUT 'CREATE COMPLETE BYTE FOR IC3 CALLED DOUT FOR N = 0 TO 7 IF DOUT(N) = 0 THEN DOUT = DOUT AND NOT (2^N) ELSE DOUT = DOUT OR 2^N ENDIF NEXT N 'SEND 8 CLOCK PULSES AND DIGITAL OUT DATA (ALL ZERO'S) FOR BIT = 1 TO 8 B = 8 - BIT BYTE = ((DOUT AND 2^B) / 2^B) OR H80 OUT BASE0, BYTE OUT BASE0, BYTE OR 2 OUT BASE0 BYTE NEXT BIT 'SEND ANOTHER 16 CLOCK PULSES TO SHIFT THE DATA INTO IC3 FOR BIT = 9 TO 24 OUT BASE0, H82 OUT BASE0, H80 NEXT BIT 'LOAD IC3 OUT BASE0, H90 OUT BASE0, h80] -BASIC END Bjorn Macintosh -- Download Intel#174; Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev