From b94242ee20227cbc37e37a09d95c4812ce48f31d Mon Sep 17 00:00:00 2001 From: Tomas Hajny Date: Sun, 16 Dec 2001 19:08:20 +0000 Subject: [PATCH] * uses DosCalls replaced with direct declarations --- rtl/os2/sysutils.pp | 182 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 178 insertions(+), 4 deletions(-) diff --git a/rtl/os2/sysutils.pp b/rtl/os2/sysutils.pp index 90528fcb3f..543c32cafa 100644 --- a/rtl/os2/sysutils.pp +++ b/rtl/os2/sysutils.pp @@ -23,7 +23,7 @@ interface {$H+} uses - doscalls,dos; + Dos; { Include platform independent interface part } {$i sysutilh.inc} @@ -36,12 +36,183 @@ implementation {**************************************************************************** - File Functions + System (imported) calls ****************************************************************************} +(* "uses DosCalls" could not be used here due to type *) +(* conflicts, so needed parts had to be redefined here). *) + +type + TFileStatus = object + end; + PFileStatus = ^TFileStatus; + + TFileStatus0 = object (TFileStatus) + DateCreation, {Date of file creation.} + TimeCreation, {Time of file creation.} + DateLastAccess, {Date of last access to file.} + TimeLastAccess, {Time of last access to file.} + DateLastWrite, {Date of last modification of file.} + TimeLastWrite: word; {Time of last modification of file.} + FileSize, {Size of file.} + FileAlloc: longint; {Amount of space the file really + occupies on disk.} + end; + PFileStatus0 = ^TFileStatus0; + + TFileStatus3 = object (TFileStatus) + NextEntryOffset: longint; {Offset of next entry} + DateCreation, {Date of file creation.} + TimeCreation, {Time of file creation.} + DateLastAccess, {Date of last access to file.} + TimeLastAccess, {Time of last access to file.} + DateLastWrite, {Date of last modification of file.} + TimeLastWrite: word; {Time of last modification of file.} + FileSize, {Size of file.} + FileAlloc: longint; {Amount of space the file really + occupies on disk.} + AttrFile: longint; {Attributes of file.} + end; + PFileStatus3 = ^TFileStatus3; + + TFileFindBuf3 = object (TFileStatus3) + Name: ShortString; {Also possible to use as ASCIIZ. + The byte following the last string + character is always zero.} + end; + PFileFindBuf3 = ^TFileFindBuf3; + + TFSInfo = record + case word of + 1: + (File_Sys_ID, + Sectors_Per_Cluster, + Total_Clusters, + Free_Clusters: longint; + Bytes_Per_Sector: word); + 2: {For date/time description, + see file searching realted + routines.} + (Label_Date, {Date when volume label was created.} + Label_Time: word; {Time when volume label was created.} + VolumeLabel: ShortString); {Volume label. Can also be used + as ASCIIZ, because the byte + following the last character of + the string is always zero.} + end; + PFSInfo = ^TFSInfo; + + TCountryCode=record + Country, {Country to query info about (0=current).} + CodePage: longint; {Code page to query info about (0=current).} + end; + PCountryCode=^TCountryCode; + + TTimeFmt = (Clock12, Clock24); + + TCountryInfo=record + Country, CodePage: longint; {Country and codepage requested.} + case byte of + 0: + (DateFormat: longint; {1=ddmmyy 2=yymmdd 3=mmddyy} + CurrencyUnit: array [0..4] of char; + ThousandSeparator: char; {Thousands separator.} + Zero1: byte; {Always zero.} + DecimalSeparator: char; {Decimals separator,} + Zero2: byte; + DateSeparator: char; {Date separator.} + Zero3: byte; + TimeSeparator: char; {Time separator.} + Zero4: byte; + CurrencyFormat, {Bit field: + Bit 0: 0=indicator before value + 1=indicator after value + Bit 1: 1=insert space after + indicator. + Bit 2: 1=Ignore bit 0&1, replace + decimal separator with + indicator.} + DecimalPlace: byte; {Number of decimal places used in + currency indication.} + TimeFormat: TTimeFmt; {12/24 hour.} + Reserve1: array [0..1] of word; + DataSeparator: char; {Data list separator} + Zero5: byte; + Reserve2: array [0..4] of word); + 1: + (fsDateFmt: longint; {1=ddmmyy 2=yymmdd 3=mmddyy} + szCurrency: array [0..4] of char; + {null terminated currency symbol} + szThousandsSeparator: array [0..1] of char; + {Thousands separator + #0} + szDecimal: array [0..1] of char; + {Decimals separator + #0} + szDateSeparator: array [0..1] of char; + {Date separator + #0} + szTimeSeparator: array [0..1] of char; + {Time separator + #0} + fsCurrencyFmt, {Bit field: + Bit 0: 0=indicator before value + 1=indicator after value + Bit 1: 1=insert space after + indicator. + Bit 2: 1=Ignore bit 0&1, replace + decimal separator with + indicator} + cDecimalPlace: byte; {Number of decimal places used in + currency indication} + fsTimeFmt: byte; {0=12,1=24 hours} + abReserved1: array [0..1] of word; + szDataSeparator: array [0..1] of char; + {Data list separator + #0} + abReserved2: array [0..4] of word); + end; + PCountryInfo=^TCountryInfo; + +const + ilStandard = 1; + ilQueryEAsize = 2; + ilQueryEAs = 3; + ilQueryFullName = 5; + {This is the correct way to call external assembler procedures.} procedure syscall;external name '___SYSCALL'; +function DosSetFileInfo (Handle, InfoLevel: longint; AFileStatus: PFileStatus; + FileStatusLen: longint): longint; cdecl; external 'DOSCALLS' index 218; + +function DosQueryFSInfo (DiskNum, InfoLevel: longint; var Buffer: TFSInfo; + BufLen: longint): longint; cdecl; external 'DOSCALLS' index 278; + +function DosQueryFileInfo (Handle, InfoLevel: longint; + AFileStatus: PFileStatus; FileStatusLen: longint): longint; cdecl; + external 'DOSCALLS' index 279; + +function DosScanEnv (Name: PChar; var Value: PChar): longint; cdecl; + external 'DOSCALLS' index 227; + +function DosFindFirst (FileMask: PChar; var Handle: longint; Attrib: longint; + AFileStatus: PFileStatus; FileStatusLen: longint; + var Count: longint; InfoLevel: longint): longint; cdecl; + external 'DOSCALLS' index 264; +function DosFindNext (Handle: longint; AFileStatus: PFileStatus; + FileStatusLen: longint; var Count: longint): longint; cdecl; + external 'DOSCALLS' index 265; + +function DosFindClose (Handle: longint): longint; cdecl; + external 'DOSCALLS' index 263; + +function DosQueryCtryInfo (Size: longint; var Country: TCountryCode; + var Res: TCountryInfo; var ActualSize: longint): longint; cdecl; + external 'NLS' index 5; + +function DosMapCase (Size: longint; var Country: TCountryCode; + AString: PChar): longint; cdecl; external 'NLS' index 7; + + +{**************************************************************************** + File Functions +****************************************************************************} const ofRead = $0000; {Open for reading} @@ -245,7 +416,7 @@ begin New (FStat); Rslt.FindHandle := $FFFFFFFF; Count := 1; - Err := DosFindFirst (Path, Rslt.FindHandle, Attr, FStat, + Err := DosFindFirst (PChar (Path), Rslt.FindHandle, Attr, FStat, SizeOf (FStat^), Count, ilStandard); if (Err = 0) and (Count = 0) then Err := 18; FindFirst := -Err; @@ -779,7 +950,10 @@ end. { $Log$ - Revision 1.13 2001-10-25 21:23:49 peter + Revision 1.14 2001-12-16 19:08:20 hajny + * uses DosCalls replaced with direct declarations + + Revision 1.13 2001/10/25 21:23:49 peter * added 64bit fileseek Revision 1.12 2001/06/03 15:18:01 peter