From 16f57512072e9ca683095dc88ac2348cb0f55074 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 3 May 2001 15:55:44 +0000 Subject: [PATCH] + linux support for fileio contributed by Holger Schurig --- fv/fileio.pas | 57 +++++++++++++++++++++++++++++++++++++--- fv/test/tfileio.pas | 29 ++++++++++++++++++++ fvision/fileio.pas | 57 +++++++++++++++++++++++++++++++++++++--- fvision/test/tfileio.pas | 29 ++++++++++++++++++++ 4 files changed, 164 insertions(+), 8 deletions(-) create mode 100644 fv/test/tfileio.pas create mode 100644 fvision/test/tfileio.pas diff --git a/fv/fileio.pas b/fv/fileio.pas index 2143ee5d60..5334598ae5 100644 --- a/fv/fileio.pas +++ b/fv/fileio.pas @@ -75,7 +75,9 @@ UNIT FileIO; {$X+} { Extended syntax is ok } {$R-} { Disable range checking } +{$IFNDEF OS_LINUX} {$S-} { Disable Stack Checking } +{$ENDIF} {$I-} { Disable IO Checking } {$Q-} { Disable Overflow Checking } {$V-} { Turn off strict VAR strings } @@ -225,6 +227,10 @@ FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Wor {$ENDIF} +{$IFDEF OS_LINUX} { LINUX COMPILER } + USES unix; +{$ENDIF} + {***************************************************************************} { INTERFACE ROUTINES } {***************************************************************************} @@ -279,8 +285,7 @@ END; {$IFDEF OS_LINUX} { LINUX CODE } BEGIN fdClose(Handle); { Close the file } - If (LinuxError <= 0) Then FileClosed := True { Close succesful } - Else FileClosed := False; { Close failed } + FileClose := LinuxError <= 0 END; {$ENDIF} @@ -375,6 +380,15 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + if mode = fa_Create then mode := Open_Creat or Open_RdWr else + if mode = fa_OpenRead then mode := Open_RdOnly else + if mode = fa_OpenWrite then mode := Open_WrOnly else + if mode = fa_Open then mode := Open_RdWr; + FileOpen := fdOpen(FileName, mode); +END; +{$ENDIF} {---------------------------------------------------------------------------} { SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB } @@ -446,6 +460,18 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +VAR + Actual : LongInt; +BEGIN + Actual := fdSeek(Handle, FileSize, 0); { Position file } + If (Actual = FileSize) Then Begin { No position error } + if (fdTruncate(Handle, FileSize)) { Truncate the file } + Then SetFileSize := 0 { No truncate error } + else SetFileSize := 103; { File truncate error } + End Else SetFileSize := 103; { File truncate error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB } @@ -514,6 +540,13 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdSeek(Handle, Pos, MoveType); + If (Actual <> -1) Then SetFilePos := 0 Else { No position error } + SetFilePos := 107; { File position error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB } @@ -551,7 +584,6 @@ FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word {$ENDIF} {$ENDIF} {$IFDEF OS_WINDOWS} { WIN/NT CODE } - BEGIN {$IFDEF BIT_16} { 16 BIT WINDOWS CODE } Actual := _lread(Handle, Pointer(@Buf), Count); { Read from file } @@ -572,6 +604,13 @@ BEGIN FileRead := 104; { File read error } END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdRead(Handle, Buf, Count); + if (Actual = Count) Then FileRead := 0 { No read error } + Else FileRead := 104; { File read error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB } @@ -629,11 +668,21 @@ BEGIN FileWrite := 105; { File write error } END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdWrite(Handle, Buf, Count); + If (Actual = Count) Then FileWrite := 0 Else { No write error } + FileWrite := 105; { File write error } +END; +{$ENDIF} END. { $Log$ - Revision 1.3 2001-04-10 21:29:55 pierre + Revision 1.4 2001-05-03 15:55:44 pierre + + linux support for fileio contributed by Holger Schurig + + Revision 1.3 2001/04/10 21:29:55 pierre * import of Leon de Boer's files Revision 1.2 2000/08/24 12:00:21 marco diff --git a/fv/test/tfileio.pas b/fv/test/tfileio.pas new file mode 100644 index 0000000000..ad8dce9710 --- /dev/null +++ b/fv/test/tfileio.pas @@ -0,0 +1,29 @@ +USES + Common,FileIO; + +VAR + Handle : THandle; + buf : ARRAY[0..255] OF CHAR; + n : Longint; +BEGIN + Handle := FileOpen(AsciiZ('test'), fa_Create); + writeln('FileOpen: ',Handle); + + buf := 'Test'#0; + writeln('FileWrite: ', FileWrite(handle, Buf, 5, n)); + writeln('Bytes written: ', n); + + Writeln('SetFileSize: ', SetFileSize(handle, 4)); + + Writeln('SetFilePos: ', SetFilePos(handle, 2, 0, n)); + Writeln('Actual: ', n); + + Writeln('FileRead: ', FileRead(Handle, buf, 2, n) ); + Writeln('Actual: ', n); + + Writeln('Buf[0]=', Buf[0], ' Buf[1]=', Buf[1]); + + Writeln('FileClose: ', FileClose(Handle)); +END. + + \ No newline at end of file diff --git a/fvision/fileio.pas b/fvision/fileio.pas index 2143ee5d60..5334598ae5 100644 --- a/fvision/fileio.pas +++ b/fvision/fileio.pas @@ -75,7 +75,9 @@ UNIT FileIO; {$X+} { Extended syntax is ok } {$R-} { Disable range checking } +{$IFNDEF OS_LINUX} {$S-} { Disable Stack Checking } +{$ENDIF} {$I-} { Disable IO Checking } {$Q-} { Disable Overflow Checking } {$V-} { Turn off strict VAR strings } @@ -225,6 +227,10 @@ FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Wor {$ENDIF} +{$IFDEF OS_LINUX} { LINUX COMPILER } + USES unix; +{$ENDIF} + {***************************************************************************} { INTERFACE ROUTINES } {***************************************************************************} @@ -279,8 +285,7 @@ END; {$IFDEF OS_LINUX} { LINUX CODE } BEGIN fdClose(Handle); { Close the file } - If (LinuxError <= 0) Then FileClosed := True { Close succesful } - Else FileClosed := False; { Close failed } + FileClose := LinuxError <= 0 END; {$ENDIF} @@ -375,6 +380,15 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + if mode = fa_Create then mode := Open_Creat or Open_RdWr else + if mode = fa_OpenRead then mode := Open_RdOnly else + if mode = fa_OpenWrite then mode := Open_WrOnly else + if mode = fa_Open then mode := Open_RdWr; + FileOpen := fdOpen(FileName, mode); +END; +{$ENDIF} {---------------------------------------------------------------------------} { SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB } @@ -446,6 +460,18 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +VAR + Actual : LongInt; +BEGIN + Actual := fdSeek(Handle, FileSize, 0); { Position file } + If (Actual = FileSize) Then Begin { No position error } + if (fdTruncate(Handle, FileSize)) { Truncate the file } + Then SetFileSize := 0 { No truncate error } + else SetFileSize := 103; { File truncate error } + End Else SetFileSize := 103; { File truncate error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB } @@ -514,6 +540,13 @@ BEGIN {$ENDIF} END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdSeek(Handle, Pos, MoveType); + If (Actual <> -1) Then SetFilePos := 0 Else { No position error } + SetFilePos := 107; { File position error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB } @@ -551,7 +584,6 @@ FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word {$ENDIF} {$ENDIF} {$IFDEF OS_WINDOWS} { WIN/NT CODE } - BEGIN {$IFDEF BIT_16} { 16 BIT WINDOWS CODE } Actual := _lread(Handle, Pointer(@Buf), Count); { Read from file } @@ -572,6 +604,13 @@ BEGIN FileRead := 104; { File read error } END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdRead(Handle, Buf, Count); + if (Actual = Count) Then FileRead := 0 { No read error } + Else FileRead := 104; { File read error } +END; +{$ENDIF} {---------------------------------------------------------------------------} { FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB } @@ -629,11 +668,21 @@ BEGIN FileWrite := 105; { File write error } END; {$ENDIF} +{$IFDEF OS_LINUX} +BEGIN + Actual := fdWrite(Handle, Buf, Count); + If (Actual = Count) Then FileWrite := 0 Else { No write error } + FileWrite := 105; { File write error } +END; +{$ENDIF} END. { $Log$ - Revision 1.3 2001-04-10 21:29:55 pierre + Revision 1.4 2001-05-03 15:55:44 pierre + + linux support for fileio contributed by Holger Schurig + + Revision 1.3 2001/04/10 21:29:55 pierre * import of Leon de Boer's files Revision 1.2 2000/08/24 12:00:21 marco diff --git a/fvision/test/tfileio.pas b/fvision/test/tfileio.pas new file mode 100644 index 0000000000..ad8dce9710 --- /dev/null +++ b/fvision/test/tfileio.pas @@ -0,0 +1,29 @@ +USES + Common,FileIO; + +VAR + Handle : THandle; + buf : ARRAY[0..255] OF CHAR; + n : Longint; +BEGIN + Handle := FileOpen(AsciiZ('test'), fa_Create); + writeln('FileOpen: ',Handle); + + buf := 'Test'#0; + writeln('FileWrite: ', FileWrite(handle, Buf, 5, n)); + writeln('Bytes written: ', n); + + Writeln('SetFileSize: ', SetFileSize(handle, 4)); + + Writeln('SetFilePos: ', SetFilePos(handle, 2, 0, n)); + Writeln('Actual: ', n); + + Writeln('FileRead: ', FileRead(Handle, buf, 2, n) ); + Writeln('Actual: ', n); + + Writeln('Buf[0]=', Buf[0], ' Buf[1]=', Buf[1]); + + Writeln('FileClose: ', FileClose(Handle)); +END. + + \ No newline at end of file