From 0610caa1075ab10271043edd710c7eb7eeacc244 Mon Sep 17 00:00:00 2001 From: marco Date: Wed, 19 Nov 2003 17:11:39 +0000 Subject: [PATCH] * termio unit --- ide/fpdebug.pas | 7 +- ide/fpusrscr.pas | 9 +- ide/wconsole.pas | 7 +- packages/extra/ncurses/ncrt.pp | 7 +- packages/extra/ncurses/ocrt.pp | 7 +- rtl/bsd/bunxtype.inc | 17 ++- rtl/bsd/sysctl.pp | 11 +- rtl/freebsd/Makefile | 4 +- rtl/freebsd/Makefile.fpc | 4 +- rtl/freebsd/console.pp | 2 +- rtl/freebsd/unixsysc.inc | 9 +- rtl/unix/crt.pp | 13 +- rtl/unix/keyboard.pp | 7 +- rtl/unix/serial.pp | 9 +- rtl/unix/unix.pp | 268 +-------------------------------- rtl/unix/video.pp | 17 ++- 16 files changed, 95 insertions(+), 303 deletions(-) diff --git a/ide/fpdebug.pas b/ide/fpdebug.pas index 78ac1eea1b..d96acddfb8 100644 --- a/ide/fpdebug.pas +++ b/ide/fpdebug.pas @@ -338,7 +338,7 @@ uses {$ifdef VER1_0} Linux, {$else} - Unix, + termio, {$endif} {$endif Unix} Systems,Globals, @@ -3603,7 +3603,10 @@ end. { $Log$ - Revision 1.47 2003-11-17 10:05:51 marco + Revision 1.48 2003-11-19 17:11:39 marco + * termio unit + + Revision 1.47 2003/11/17 10:05:51 marco * threads for FreeBSD. Not working tho Revision 1.46 2003/03/30 12:12:12 armin diff --git a/ide/fpusrscr.pas b/ide/fpusrscr.pas index b26718339b..0b6591736e 100644 --- a/ide/fpusrscr.pas +++ b/ide/fpusrscr.pas @@ -27,7 +27,7 @@ uses linux, {$else} baseunix, - unix, + termio, {$endif} {$endif} video,Objects; @@ -783,7 +783,7 @@ begin '0'..'9' : begin { running Linux on native console or native-emulation } FName:='/dev/vcsa' + ThisTTY[9]; - TTYFd:={$ifdef ver1_0}fdOpen{$else}fpOpen{$endif}(FName, &666, Open_RdWr); { open console } + TTYFd:={$ifdef ver1_0}fdOpen{$else}fpOpen{$endif}(FName, &666, O_RdWr); { open console } If TTYFd <>-1 Then Console:=ttyLinux; end; @@ -1441,7 +1441,10 @@ end; end. { $Log$ - Revision 1.30 2003-11-17 10:05:51 marco + Revision 1.31 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.30 2003/11/17 10:05:51 marco * threads for FreeBSD. Not working tho Revision 1.29 2003/11/14 21:52:58 marco diff --git a/ide/wconsole.pas b/ide/wconsole.pas index 3e7f6ef02f..c1b380aec6 100644 --- a/ide/wconsole.pas +++ b/ide/wconsole.pas @@ -22,7 +22,7 @@ interface {$Ifdef ver1_0} linux; {$else} - Unix; + termio; {$endif} {$endif UNIX} @@ -80,7 +80,10 @@ end. { $Log$ - Revision 1.5 2002-10-12 19:42:01 hajny + Revision 1.6 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.5 2002/10/12 19:42:01 hajny + OS/2 support Revision 1.4 2002/09/07 15:40:48 peter diff --git a/packages/extra/ncurses/ncrt.pp b/packages/extra/ncurses/ncrt.pp index 9eca066b26..5c97de80f1 100644 --- a/packages/extra/ncurses/ncrt.pp +++ b/packages/extra/ncurses/ncrt.pp @@ -30,7 +30,7 @@ Uses linux, {$else} baseunix, - unix, + termio, {$endif} {$endif} ncurses; @@ -47,7 +47,10 @@ Begin End. { of Unit nCrt } { $Log$ - Revision 1.4 2003-09-27 12:19:20 peter + Revision 1.5 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.4 2003/09/27 12:19:20 peter * fixed for unix Revision 1.3 2002/09/07 15:43:01 peter diff --git a/packages/extra/ncurses/ocrt.pp b/packages/extra/ncurses/ocrt.pp index daf92da36e..65b1ac1b99 100644 --- a/packages/extra/ncurses/ocrt.pp +++ b/packages/extra/ncurses/ocrt.pp @@ -154,7 +154,7 @@ Uses linux, {$else} baseunix, - unix, + termio, {$endif} {$endif} ncurses,panel,menu; @@ -3272,7 +3272,10 @@ End. { of Unit oCrt } { $Log$ - Revision 1.3 2003-09-27 12:19:20 peter + Revision 1.4 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.3 2003/09/27 12:19:20 peter * fixed for unix Revision 1.2 2002/09/07 15:43:01 peter diff --git a/rtl/bsd/bunxtype.inc b/rtl/bsd/bunxtype.inc index b7713aae9c..56706e9cd9 100644 --- a/rtl/bsd/bunxtype.inc +++ b/rtl/bsd/bunxtype.inc @@ -190,6 +190,18 @@ CONST WUNTRACED = 2; { report status of stopped children } + { For File control mechanism } + F_GetFd = 1; + F_SetFd = 2; + F_GetFl = 3; + F_SetFl = 4; + F_GetLk = 5; + F_SetLk = 6; + F_SetLkW = 7; + F_SetOwn = 8; + F_GetOwn = 9; + + {*************************************************************************} { SIGNALS } @@ -202,7 +214,10 @@ CONST { $Log$ - Revision 1.4 2003-09-14 20:15:01 marco + Revision 1.5 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.4 2003/09/14 20:15:01 marco * Unix reform stage two. Remove all calls from Unix that exist in Baseunix. Revision 1.3 2003/08/21 22:23:34 olle diff --git a/rtl/bsd/sysctl.pp b/rtl/bsd/sysctl.pp index 8e25eb414b..5ce663f647 100644 --- a/rtl/bsd/sysctl.pp +++ b/rtl/bsd/sysctl.pp @@ -81,13 +81,15 @@ function FPsysctlnametomib (Name: pchar; mibp:plongint;sizep:psize_t):cint; Implementation +Uses Syscall; + {temporarily} {$ifdef FreeBSD} CONST syscall_nr___sysctl = 202; {$endif} -{$I sysnr.inc} -{$I syscallh.inc} +{I sysnr.inc} +{I syscallh.inc} function FPsysctl (Name: pchar; namelen:cuint; oldp:pointer;oldlenp:psize_t; newp:pointer;newlen:size_t):cint; @@ -138,7 +140,10 @@ end. { $Log$ - Revision 1.4 2003-01-05 19:01:28 marco + Revision 1.5 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.4 2003/01/05 19:01:28 marco * FreeBSD compiles now with baseunix mods. Revision 1.3 2002/09/07 16:01:17 peter diff --git a/rtl/freebsd/Makefile b/rtl/freebsd/Makefile index 1a488e3fa6..0a45ccb892 100644 --- a/rtl/freebsd/Makefile +++ b/rtl/freebsd/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 1.1 [2003/11/18] +# Don't edit, this file is generated by FPCMake Version 1.1 [2003/11/19] # default: all MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom @@ -231,7 +231,7 @@ GRAPHDIR=$(INC)/graph ifndef USELIBGGI USELIBGGI=NO endif -override TARGET_UNITS+=$(SYSTEMUNIT) objpas strings syscall baseunix unixutil unix initc dos dl crt objects printer sysutils typinfo systhrds classes math varutils cpu mmx charset ucomplex getopts heaptrc lineinfo errors sockets gpm ipc terminfo video mouse keyboard console serial variants types sysctl +override TARGET_UNITS+=$(SYSTEMUNIT) objpas strings syscall baseunix unixutil unix initc dos dl termio objects printer sysutils typinfo systhrds classes math varutils cpu mmx charset ucomplex crt getopts heaptrc lineinfo errors sockets gpm ipc terminfo video mouse keyboard console serial variants types sysctl override TARGET_LOADERS+=prt0 cprt0 gprt0 override TARGET_RSTS+=math varutils typinfo classes variants override INSTALL_FPCPACKAGE=y y diff --git a/rtl/freebsd/Makefile.fpc b/rtl/freebsd/Makefile.fpc index 42346049fd..e669817400 100644 --- a/rtl/freebsd/Makefile.fpc +++ b/rtl/freebsd/Makefile.fpc @@ -12,9 +12,9 @@ fpcpackage=y loaders=prt0 cprt0 gprt0 units=$(SYSTEMUNIT) objpas strings syscall baseunix unixutil \ unix initc \ - dos dl crt objects printer \ + dos dl termio objects printer \ sysutils typinfo systhrds classes math varutils \ - cpu mmx charset ucomplex getopts heaptrc lineinfo \ + cpu mmx charset ucomplex crt getopts heaptrc lineinfo \ errors sockets gpm ipc terminfo \ video mouse keyboard console serial variants types sysctl rsts=math varutils typinfo classes variants diff --git a/rtl/freebsd/console.pp b/rtl/freebsd/console.pp index b222ad976a..8883da0831 100644 --- a/rtl/freebsd/console.pp +++ b/rtl/freebsd/console.pp @@ -1821,7 +1821,7 @@ function physicalconsole(fd:longint) : boolean; IMPLEMENTATION -Uses BaseUnix,Unix; +Uses BaseUnix,termio; function physicalconsole(fd:longint) : boolean; diff --git a/rtl/freebsd/unixsysc.inc b/rtl/freebsd/unixsysc.inc index 9c98ee128f..9f1115af20 100644 --- a/rtl/freebsd/unixsysc.inc +++ b/rtl/freebsd/unixsysc.inc @@ -75,10 +75,10 @@ begin do_syscall(syscall_nr_gettimeofday,longint(@tv),longint(@tz)); end; } -Function fdFlush (fd : cint) : cint; +Function fsync (fd : cint) : cint; begin - fdflush:=do_syscall(syscall_nr_fsync,fd); + fsync:=do_syscall(syscall_nr_fsync,fd); end; Function Flock (fd,mode : longint) : cint; @@ -246,7 +246,10 @@ end; { $Log$ - Revision 1.15 2003-11-19 10:12:02 marco + Revision 1.16 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.15 2003/11/19 10:12:02 marco * more cleanups Revision 1.14 2003/11/17 10:05:51 marco diff --git a/rtl/unix/crt.pp b/rtl/unix/crt.pp index 6fb3cb563c..9260fab618 100644 --- a/rtl/unix/crt.pp +++ b/rtl/unix/crt.pp @@ -111,7 +111,7 @@ procedure CursorOff; Implementation -uses BaseUnix ,unix; +uses BaseUnix ,unix, termio; { The definitions of TextRec and FileRec are in separate files. @@ -1509,10 +1509,10 @@ end; ******************************************************************************} var - OldIO : Unix.TermIos; + OldIO : termio.TermIos; inputRaw, outputRaw: boolean; -procedure saveRawSettings(const tio: Unix.termios); +procedure saveRawSettings(const tio: termio.termios); Begin with tio do begin @@ -1527,7 +1527,7 @@ Begin end; end; -procedure restoreRawSettings(tio: Unix.termios); +procedure restoreRawSettings(tio: termio.termios); begin with tio do begin @@ -1681,7 +1681,10 @@ Finalization End. { $Log$ - Revision 1.14 2003-11-17 10:05:51 marco + Revision 1.15 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.14 2003/11/17 10:05:51 marco * threads for FreeBSD. Not working tho Revision 1.13 2003/09/16 20:52:24 marco diff --git a/rtl/unix/keyboard.pp b/rtl/unix/keyboard.pp index 834b9c9c34..b65940769a 100644 --- a/rtl/unix/keyboard.pp +++ b/rtl/unix/keyboard.pp @@ -42,7 +42,7 @@ uses Strings, TermInfo, {$endif NotUseTree} - Unix,baseUnix; + termio,baseUnix; {$i keyboard.inc} @@ -1532,7 +1532,10 @@ begin end. { $Log$ - Revision 1.16 2003-11-17 10:05:51 marco + Revision 1.17 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.16 2003/11/17 10:05:51 marco * threads for FreeBSD. Not working tho Revision 1.15 2003/09/16 16:13:56 marco diff --git a/rtl/unix/serial.pp b/rtl/unix/serial.pp index 5e0f69009e..9cad19ef02 100644 --- a/rtl/unix/serial.pp +++ b/rtl/unix/serial.pp @@ -10,7 +10,7 @@ unit Serial; interface -uses BaseUnix,Unix; +uses BaseUnix,termio,unix; type @@ -70,7 +70,7 @@ implementation function SerOpen(const DeviceName: String): TSerialHandle; begin - Result := fpopen(DeviceName, OPEN_RDWR or OPEN_NOCTTY); + Result := fpopen(DeviceName, O_RDWR or O_NOCTTY); end; procedure SerClose(Handle: TSerialHandle); @@ -215,7 +215,10 @@ end. { $Log$ - Revision 1.9 2003-11-19 10:54:32 marco + Revision 1.10 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.9 2003/11/19 10:54:32 marco * some simple restructures Revision 1.8 2003/09/14 20:15:01 marco diff --git a/rtl/unix/unix.pp b/rtl/unix/unix.pp index 4b0c63f16c..41b4c0d5da 100644 --- a/rtl/unix/unix.pp +++ b/rtl/unix/unix.pp @@ -24,7 +24,7 @@ Uses UnixUtil,BaseUnix; {Get error numbers, some more signal definitions and other OS dependant types (that are not POSIX) } -{$i errno.inc} +{i errno.inc} {$I signal.inc} {$i ostypes.inc} @@ -51,13 +51,6 @@ Type next : pglob; end; -{******************** - IOCtl(TermIOS) -********************} - -{Is too freebsd/Linux specific} - -{$I termios.inc} {****************************************************************************** Procedure/Functions @@ -156,25 +149,6 @@ Function GetDomainName:String; Function GetHostName:String; {$endif} -{************************** - IOCtl/Termios Functions -***************************} - -Function TCGetAttr (fd:cint;var tios:TermIOS):cint; -Function TCSetAttr (fd:cint;OptAct:cint;const tios:TermIOS):cint; -Procedure CFSetISpeed (var tios:TermIOS;speed:Cardinal); -Procedure CFSetOSpeed (var tios:TermIOS;speed:Cardinal); -Procedure CFMakeRaw (var tios:TermIOS); -Function TCSendBreak (fd,duration:cint):cint; -Function TCSetPGrp (fd,id:cint) :cint; -Function TCGetPGrp (fd:cint;var id:cint):cint; -Function TCFlush (fd,qsel:cint):cint; -Function TCDrain (fd:cint) :cint; -Function TCFlow (fd,act:cint) :cint; -Function IsATTY (Handle:cint) :cint; -Function IsATTY (var f:text) :cint; -function TTYname (Handle:cint):string; -function TTYname (var F:Text) :string; {************************** Memory functions @@ -1230,241 +1204,6 @@ begin fpKill(fpGetPid,Sig); end; -{****************************************************************************** - IOCtl and Termios calls -******************************************************************************} - -Function TCGetAttr(fd:cint;var tios:TermIOS):cint; -begin - {$ifndef BSD} - TCGetAttr:=fpIOCtl(fd,TCGETS,@tios); - {$else} - TCGETAttr:=fpIoCtl(Fd,TIOCGETA,@tios); - {$endif} -end; - - -Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint; -var - nr:cint; -begin - {$ifndef BSD} - case OptAct of - TCSANOW : nr:=TCSETS; - TCSADRAIN : nr:=TCSETSW; - TCSAFLUSH : nr:=TCSETSF; - {$else} - case OptAct of - TCSANOW : nr:=TIOCSETA; - TCSADRAIN : nr:=TIOCSETAW; - TCSAFLUSH : nr:=TIOCSETAF; - {$endif} - else - begin - fpsetErrNo(ESysEINVAL); - TCSetAttr:=-1; - exit; - end; - end; - TCSetAttr:=fpIOCtl(fd,nr,@Tios); -end; - - -Procedure CFSetISpeed(var tios:TermIOS;speed:Cardinal); -begin - {$ifndef BSD} - tios.c_cflag:=(tios.c_cflag and (not CBAUD)) or speed; - {$else} - tios.c_ispeed:=speed; {Probably the Bxxxx speed constants} - {$endif} -end; - - -Procedure CFSetOSpeed(var tios:TermIOS;speed:Cardinal); -begin - {$ifndef BSD} - CFSetISpeed(tios,speed); - {$else} - tios.c_ospeed:=speed; - {$endif} -end; - - - -Procedure CFMakeRaw(var tios:TermIOS); -begin - {$ifndef BSD} - with tios do - begin - c_iflag:=c_iflag and (not (IGNBRK or BRKINT or PARMRK or ISTRIP or - INLCR or IGNCR or ICRNL or IXON)); - c_oflag:=c_oflag and (not OPOST); - c_lflag:=c_lflag and (not (ECHO or ECHONL or ICANON or ISIG or IEXTEN)); - c_cflag:=(c_cflag and (not (CSIZE or PARENB))) or CS8; - end; - {$else} - with tios do - begin - c_iflag:=c_iflag and (not (IMAXBEL or IXOFF or INPCK or BRKINT or - PARMRK or ISTRIP or INLCR or IGNCR or ICRNL or IXON or - IGNPAR)); - c_iflag:=c_iflag OR IGNBRK; - c_oflag:=c_oflag and (not OPOST); - c_lflag:=c_lflag and (not (ECHO or ECHOE or ECHOK or ECHONL or ICANON or - ISIG or IEXTEN or NOFLSH or TOSTOP or PENDIN)); - c_cflag:=(c_cflag and (not (CSIZE or PARENB))) or (CS8 OR cread); - c_cc[VMIN]:=1; - c_cc[VTIME]:=0; - end; - {$endif} -end; - -Function TCSendBreak(fd,duration:cint):cint; -begin - {$ifndef BSD} - TCSendBreak:=fpIOCtl(fd,TCSBRK,pointer(duration)); - {$else} - TCSendBreak:=fpIOCtl(fd,TIOCSBRK,0); - {$endif} -end; - - -Function TCSetPGrp(fd,id:cint):cint; -begin - TCSetPGrp:=fpIOCtl(fd,TIOCSPGRP,pointer(id)); -end; - - -Function TCGetPGrp(fd:cint;var id:cint):cint; -begin - TCGetPGrp:=fpIOCtl(fd,TIOCGPGRP,@id); -end; - -Function TCDrain(fd:cint):cint; -begin - {$ifndef BSD} - TCDrain:=fpIOCtl(fd,TCSBRK,pointer(1)); - {$else} - TCDrain:=fpIOCtl(fd,TIOCDRAIN,0); {Should set timeout to 1 first?} - {$endif} -end; - - -Function TCFlow(fd,act:cint):cint; -begin - {$ifndef BSD} - TCFlow:=fpIOCtl(fd,TCXONC,pointer(act)); - {$else} - case act OF - TCOOFF : TCFlow:=fpIoctl(fd,TIOCSTOP,0); - TCOOn : TCFlow:=fpIOctl(Fd,TIOCStart,0); - TCIOFF : {N/I} - end; - {$endif} -end; - -Function TCFlush(fd,qsel:cint):cint; -begin - {$ifndef BSD} - TCFlush:=fpIOCtl(fd,TCFLSH,pointer(qsel)); - {$else} - TCFlush:=fpIOCtl(fd,TIOCFLUSH,pointer(qsel)); - {$endif} -end; - -Function IsATTY (Handle:cint):cint; -{ - Check if the filehandle described by 'handle' is a TTY (Terminal) -} -var - t : Termios; -begin - IsAtty:=TCGetAttr(Handle,t); -end; - - -Function IsATTY(var f: text):cint; -{ - Idem as previous, only now for text variables. -} -begin - IsATTY:=IsaTTY(textrec(f).handle); -end; - - -function TTYName(Handle:cint):string; -{ - Return the name of the current tty described by handle f. - returns empty string in case of an error. -} -var - mydev : dev_t; - myino : ino_t; - st : stat; - - function mysearch(n:string): boolean; - {searches recursively for the device in the directory given by n, - returns true if found and sets the name of the device in ttyname} - var dirstream : pdir; - d : pdirent; - name : string; - st : stat; - begin - dirstream:=fpopendir(n); - if (dirstream=nil) then - exit(false); - d:=fpReaddir(dirstream^); - while (d<>nil) do - begin - name:=n+'/'+strpas(@(d^.d_name)); - // fpstat(name,st); - if fpstat(name,st)=0 then - begin - if (fpS_ISDIR(st.st_mode)) and { if it is a directory } - (strpas(@(d^.d_name))<>'.') and { but not ., .. and fd subdirs } - (strpas(@(d^.d_name))<>'..') and - (strpas(@(d^.d_name))<>'') and - (strpas(@(d^.d_name))<>'fd') then - begin {we found a directory, search inside it} - if mysearch(name) then - begin {the device is here} - fpclosedir(dirstream^); {then don't continue searching} - mysearch:=true; - exit; - end; - end - else if (ino_t(d^.d_fileno)=myino) and (st.st_dev=mydev) then - begin - fpclosedir(dirstream^); - ttyname:=name; - mysearch:=true; - exit; - end; - end; - d:=fpReaddir(dirstream^); - end; - fpclosedir(dirstream^); - mysearch:=false; - end; - -begin - TTYName:=''; - if (fpfstat(handle,st)=-1) and (isatty (handle)<>-1) then - exit; - mydev:=st.st_dev; - myino:=st.st_ino; - mysearch('/dev'); -end; - - -function TTYName(var F:Text):string; -{ - Idem as previous, only now for text variables; -} -begin - TTYName:=TTYName(textrec(f).handle); -end; - {****************************************************************************** Utility calls @@ -1641,7 +1380,10 @@ End. { $Log$ - Revision 1.50 2003-11-19 10:54:32 marco + Revision 1.51 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.50 2003/11/19 10:54:32 marco * some simple restructures Revision 1.49 2003/11/17 11:28:08 marco diff --git a/rtl/unix/video.pp b/rtl/unix/video.pp index 2853a33b4a..2128cbbc93 100644 --- a/rtl/unix/video.pp +++ b/rtl/unix/video.pp @@ -23,7 +23,7 @@ interface implementation uses - BaseUnix, Unix, Strings, TermInfo; + BaseUnix, Strings, TermInfo, termio; {$i video.inc} @@ -534,10 +534,10 @@ begin end; var - InitialVideoTio, preInitVideoTio, postInitVideoTio: Unix.termios; + InitialVideoTio, preInitVideoTio, postInitVideoTio: termio.termios; inputRaw, outputRaw: boolean; -procedure saveRawSettings(const tio: Unix.termios); +procedure saveRawSettings(const tio: termio.termios); Begin with tio do begin @@ -552,7 +552,7 @@ Begin end; end; -procedure restoreRawSettings(tio: Unix.termios); +procedure restoreRawSettings(tio: termio.termios); begin with tio do begin @@ -596,7 +596,7 @@ end; procedure prepareDoneVideo; var - tio: Unix.termios; + tio: termio.termios; begin TCGetAttr(1,tio); saveRawSettings(tio); @@ -641,7 +641,7 @@ begin Case ThisTTY[9] of '0'..'9' : begin { running Linux on native console or native-emulation } FName:='/dev/vcsa' + ThisTTY[9]; - TTYFd:=fpOpen(FName, &666, Open_RdWr); { open console } + TTYFd:=fpOpen(FName, &666, O_RdWr); { open console } IF TTYFd <>-1 Then Console:=ttyLinux; end; @@ -898,7 +898,10 @@ initialization end. { $Log$ - Revision 1.19 2003-11-17 10:05:51 marco + Revision 1.20 2003-11-19 17:11:40 marco + * termio unit + + Revision 1.19 2003/11/17 10:05:51 marco * threads for FreeBSD. Not working tho Revision 1.18 2003/10/26 15:32:25 marco