From 09fd537acf3336b0dedbc443ccf2df65ea774759 Mon Sep 17 00:00:00 2001 From: Tomas Hajny Date: Sun, 22 Feb 2004 15:01:49 +0000 Subject: [PATCH] * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) --- rtl/emx/dos.pas | 21 ++- rtl/emx/sysutils.pp | 338 ++++++++++++++++++++++++++------------------ rtl/os2/dos.pas | 8 +- rtl/os2/system.pas | 57 ++++---- rtl/os2/sysutils.pp | 124 +++++++--------- 5 files changed, 305 insertions(+), 243 deletions(-) diff --git a/rtl/emx/dos.pas b/rtl/emx/dos.pas index 24c05c8c76..a000a78aed 100644 --- a/rtl/emx/dos.pas +++ b/rtl/emx/dos.pas @@ -94,9 +94,6 @@ Type {OS/2 specific functions} -function exec(path:pathstr;runflags:execrunflags;winflags:execwinflags; - const comline:comstr):longint; - function GetEnvPChar (EnvVar: string): PChar; @@ -962,8 +959,7 @@ begin end; {$ASMMODE ATT} -function GetEnv (const EnvVar: string): string; -(* The assembler version is more than three times as fast as Pascal. *) +function GetEnv (EnvVar: string): string; begin GetEnv := StrPas (GetEnvPChar (EnvVar)); end; @@ -1201,6 +1197,16 @@ procedure SetIntVec (IntNo: byte; Vector: pointer); begin end; +function GetShortName(var p : String) : boolean; +begin + GetShortName:=true; +end; + +function GetLongName(var p : String) : boolean; +begin + GetLongName:=true; +end; + begin @@ -1211,7 +1217,10 @@ begin end. { $Log$ - Revision 1.12 2004-02-17 17:37:26 daniel + Revision 1.13 2004-02-22 15:01:49 hajny + * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) + + Revision 1.12 2004/02/17 17:37:26 daniel * Enable threadvars again Revision 1.11 2004/02/16 22:16:58 hajny diff --git a/rtl/emx/sysutils.pp b/rtl/emx/sysutils.pp index 0276ca192d..c9671ebe6d 100644 --- a/rtl/emx/sysutils.pp +++ b/rtl/emx/sysutils.pp @@ -82,7 +82,7 @@ type FileAlloc:cardinal; {Amount of space the file really occupies on disk.} AttrFile:cardinal; {Attributes of file.} - Name:string; {Also possible to use as ASCIIZ. + Name:shortstring; {Also possible to use as ASCIIZ. The byte following the last string character is always zero.} end; @@ -101,7 +101,7 @@ type occupies on disk.} AttrFile:cardinal; {Attributes of file.} cbList:longint; {Size of the file's extended attributes.} - Name:string; {Also possible to use as ASCIIZ. + Name:shortstring; {Also possible to use as ASCIIZ. The byte following the last string character is always zero.} end; @@ -393,15 +393,19 @@ const function FileOpen (const FileName: string; Mode: integer): longint; assembler; asm push ebx - mov eax, Mode -(* DenyAll if sharing not specified. *) - test eax, 112 - jnz @FOpen1 - or eax, 16 -@FOpen1: - mov ecx, eax - mov eax, 7F2Bh +{$IFDEF REGCALL} + mov ecx, edx + mov edx, eax +{$ELSE REGCALL} + mov ecx, Mode mov edx, FileName +{$ENDIF REGCALL} +(* DenyAll if sharing not specified. *) + test ecx, 112 + jnz @FOpen1 + or ecx, 16 +@FOpen1: + mov eax, 7F2Bh call syscall pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -410,9 +414,13 @@ end {['eax', 'ebx', 'ecx', 'edx']}; function FileCreate (const FileName: string): longint; assembler; asm push ebx - mov eax, 7F2Bh - mov ecx, ofReadWrite or faCreate or doDenyRW (* Sharing to DenyAll *) +{$IFDEF REGCALL} + mov edx, eax +{$ELSE REGCALL} mov edx, FileName +{$ENDIF REGCALL} + mov eax, 7F2Bh + mov ecx, ofReadWrite or faCreate or doDenyRW (* Sharing to DenyAll *) call syscall pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -428,13 +436,17 @@ function FileRead (Handle: longint; var Buffer; Count: longint): longint; assembler; asm push ebx - mov eax, 3F00h - mov ebx, Handle - mov ecx, Count - mov edx, Buffer - call syscall - jnc @FReadEnd - mov eax, -1 +{$IFDEF REGCALL} + mov ebx, eax +{$ELSE REGCALL} + mov ebx, Handle + mov ecx, Count + mov edx, Buffer +{$ENDIF REGCALL} + mov eax, 3F00h + call syscall + jnc @FReadEnd + mov eax, -1 @FReadEnd: pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -444,13 +456,17 @@ function FileWrite (Handle: longint; const Buffer; Count: longint): longint; assembler; asm push ebx - mov eax, 4000h - mov ebx, Handle - mov ecx, Count - mov edx, Buffer - call syscall - jnc @FWriteEnd - mov eax, -1 +{$IFDEF REGCALL} + mov ebx, eax +{$ELSE REGCALL} + mov ebx, Handle + mov ecx, Count + mov edx, Buffer +{$ENDIF REGCALL} + mov eax, 4000h + call syscall + jnc @FWriteEnd + mov eax, -1 @FWriteEnd: pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -459,13 +475,18 @@ end {['eax', 'ebx', 'ecx', 'edx']}; function FileSeek (Handle, FOffset, Origin: longint): longint; assembler; asm push ebx - mov eax, Origin - mov ah, 42h - mov ebx, Handle - mov edx, FOffset - call syscall - jnc @FSeekEnd - mov eax, -1 +{$IFDEF REGCALL} + mov ebx, eax + mov eax, ecx +{$ELSE REGCALL} + mov ebx, Handle + mov eax, Origin + mov edx, FOffset +{$ENDIF REGCALL} + mov ah, 42h + call syscall + jnc @FSeekEnd + mov eax, -1 @FSeekEnd: pop ebx end {['eax', 'ebx', 'edx']}; @@ -492,18 +513,23 @@ end; function FileTruncate (Handle, Size: longint): boolean; assembler; asm push ebx - mov eax, 7F25h - mov ebx, Handle - mov edx, Size - call syscall - jc @FTruncEnd - mov eax, 4202h - mov ebx, Handle - mov edx, 0 - call syscall - mov eax, 0 - jnc @FTruncEnd - dec eax +{$IFDEF REGCALL} + mov ebx, eax +{$ELSE REGCALL} + mov ebx, Handle + mov edx, Size +{$ENDIF REGCALL} + mov eax, 7F25h + push ebx + call syscall + pop ebx + jc @FTruncEnd + mov eax, 4202h + mov edx, 0 + call syscall + mov eax, 0 + jnc @FTruncEnd + dec eax @FTruncEnd: pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -525,14 +551,18 @@ end; function FileExists (const FileName: string): boolean; assembler; asm - mov ax, 4300h +{$IFDEF REGCALL} + mov edx, eax +{$ELSE REGCALL} mov edx, FileName - call syscall - mov eax, 0 - jc @FExistsEnd - test cx, 18h - jnz @FExistsEnd - inc eax +{$ENDIF REGCALL} + mov ax, 4300h + call syscall + mov eax, 0 + jc @FExistsEnd + test cx, 18h + jnz @FExistsEnd + inc eax @FExistsEnd: end {['eax', 'ecx', 'edx']}; @@ -551,25 +581,25 @@ var SR: PSearchRec; begin if os_mode = osOS2 then -begin - New (FStat); - Rslt.FindHandle := $FFFFFFFF; - Count := 1; - Err := DosFindFirst (PChar (Path), Rslt.FindHandle, - Attr and FindResvdMask, FStat, SizeOf (FStat^), Count, - ilStandard); - if (Err = 0) and (Count = 0) then Err := 18; - FindFirst := -Err; - if Err = 0 then - begin - Rslt.Name := FStat^.Name; - Rslt.Size := FStat^.FileSize; - Rslt.Attr := FStat^.AttrFile; - Rslt.ExcludeAttr := 0; - TRec (Rslt.Time).T := FStat^.TimeLastWrite; - TRec (Rslt.Time).D := FStat^.DateLastWrite; - end; - Dispose (FStat); + begin + New (FStat); + Rslt.FindHandle := $FFFFFFFF; + Count := 1; + Err := DosFindFirst (PChar (Path), Rslt.FindHandle, + Attr and FindResvdMask, FStat, SizeOf (FStat^), Count, + ilStandard); + if (Err = 0) and (Count = 0) then Err := 18; + FindFirst := -Err; + if Err = 0 then + begin + Rslt.Name := FStat^.Name; + Rslt.Size := FStat^.FileSize; + Rslt.Attr := FStat^.AttrFile; + Rslt.ExcludeAttr := 0; + TRec (Rslt.Time).T := FStat^.TimeLastWrite; + TRec (Rslt.Time).D := FStat^.DateLastWrite; + end; + Dispose (FStat); end else begin @@ -600,7 +630,7 @@ var SR: PSearchRec; begin if os_mode = osOS2 then -begin + begin New (FStat); Count := 1; Err := DosFindNext (Rslt.FindHandle, FStat, SizeOf (FStat^), @@ -645,7 +675,7 @@ var SR: PSearchRec; begin if os_mode = osOS2 then begin - DosFindClose (F.FindHandle); + DosFindClose (F.FindHandle); end else begin @@ -660,13 +690,17 @@ end; function FileGetDate (Handle: longint): longint; assembler; asm push ebx - mov ax, 5700h - mov ebx, Handle - call syscall - mov eax, -1 - jc @FGetDateEnd - mov ax, dx - shld eax, ecx, 16 +{$IFDEF REGCALL} + mov ebx, eax +{$ELSE REGCALL} + mov ebx, Handle +{$ENDIF REGCALL} + mov ax, 5700h + call syscall + mov eax, -1 + jc @FGetDateEnd + mov ax, dx + shld eax, ecx, 16 @FGetDateEnd: pop ebx end {['eax', 'ebx', 'ecx', 'edx']}; @@ -717,36 +751,49 @@ end; function FileGetAttr (const FileName: string): longint; assembler; asm - mov ax, 4300h +{$IFDEF REGCALL} + mov edx, eax +{$ELSE REGCALL} mov edx, FileName - call syscall - jnc @FGetAttrEnd - mov eax, -1 +{$ENDIF REGCALL} + mov ax, 4300h + call syscall + jnc @FGetAttrEnd + mov eax, -1 @FGetAttrEnd: end {['eax', 'edx']}; function FileSetAttr (const Filename: string; Attr: longint): longint; assembler; asm - mov ax, 4301h - mov ecx, Attr +{$IFDEF REGCALL} + mov ecx, edx + mov edx, eax +{$ELSE REGCALL} + mov ecx, Attr mov edx, FileName - call syscall - mov eax, 0 - jnc @FSetAttrEnd - mov eax, -1 +{$ENDIF REGCALL} + mov ax, 4301h + call syscall + mov eax, 0 + jnc @FSetAttrEnd + mov eax, -1 @FSetAttrEnd: end {['eax', 'ecx', 'edx']}; function DeleteFile (const FileName: string): boolean; assembler; asm - mov ax, 4100h +{$IFDEF REGCALL} + mov edx, eax +{$ELSE REGCALL} mov edx, FileName - call syscall - mov eax, 0 - jc @FDeleteEnd - inc eax +{$ENDIF REGCALL} + mov ax, 4100h + call syscall + mov eax, 0 + jc @FDeleteEnd + inc eax @FDeleteEnd: end {['eax', 'edx']}; @@ -754,13 +801,18 @@ end {['eax', 'edx']}; function RenameFile (const OldName, NewName: string): boolean; assembler; asm push edi - mov ax, 5600h - mov edx, OldName - mov edi, NewName - call syscall - mov eax, 0 - jc @FRenameEnd - inc eax +{$IFDEF REGCALL} + mov edx, eax + mov edi, edx +{$ELSE REGCALL} + mov edx, OldName + mov edi, NewName +{$ENDIF REGCALL} + mov ax, 5600h + call syscall + mov eax, 0 + jc @FRenameEnd + inc eax @FRenameEnd: pop edi end {['eax', 'edx', 'edi']}; @@ -810,7 +862,7 @@ begin int64 (FI.Sectors_Per_Cluster) * int64 (FI.Bytes_Per_Sector) else DiskFree := -1; -end; + end; end; function DiskSize (Drive: byte): int64; @@ -852,7 +904,7 @@ begin int64 (FI.Sectors_Per_Cluster) * int64 (FI.Bytes_Per_Sector) else DiskSize := -1; -end; + end; end; @@ -892,14 +944,18 @@ end; {$ASMMODE INTEL} function DirectoryExists (const Directory: string): boolean; assembler; asm +{$IFDEF REGCALL} + mov edx, eax +{$ELSE REGCALL} + mov edx, Directory +{$ENDIF REGCALL} mov ax, 4300h - mov edx, Directory - call syscall - mov eax, 0 - jc @FExistsEnd - test cx, 10h - jz @FExistsEnd - inc eax + call syscall + mov eax, 0 + jc @FExistsEnd + test cx, 10h + jz @FExistsEnd + inc eax @FExistsEnd: end {['eax', 'ecx', 'edx']}; @@ -912,30 +968,37 @@ procedure GetLocalTime (var SystemTime: TSystemTime); assembler; asm (* Expects the default record alignment (word)!!! *) push edi - mov ah, 2Ah - call syscall - mov edi, SystemTime - mov ax, cx - stosw - xor eax, eax - mov al, 10 - mul dl - shl eax, 16 - mov al, dh - stosd - push edi - mov ah, 2Ch - call syscall - pop edi - xor eax, eax - mov al, cl - shl eax, 16 - mov al, ch - stosd - mov al, dl - shl eax, 16 - mov al, dh - stosd +{$IFDEF REGCALL} + push eax +{$ENDIF REGCALL} + mov ah, 2Ah + call syscall +{$IFDEF REGCALL} + pop eax +{$ELSE REGCALL} + mov edi, SystemTime +{$ENDIF REGCALL} + mov ax, cx + stosw + xor eax, eax + mov al, 10 + mul dl + shl eax, 16 + mov al, dh + stosd + push edi + mov ah, 2Ch + call syscall + pop edi + xor eax, eax + mov al, cl + shl eax, 16 + mov al, ch + stosd + mov al, dl + shl eax, 16 + mov al, dh + stosd pop edi end {['eax', 'ecx', 'edx', 'edi']}; {$asmmode default} @@ -1144,7 +1207,10 @@ end. { $Log$ - Revision 1.15 2004-02-15 21:26:37 hajny + Revision 1.16 2004-02-22 15:01:49 hajny + * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) + + Revision 1.15 2004/02/15 21:26:37 hajny * overloaded ExecuteProcess added, EnvStr param changed to longint Revision 1.14 2004/01/20 23:05:31 hajny diff --git a/rtl/os2/dos.pas b/rtl/os2/dos.pas index 00220e3912..d14dd225a2 100644 --- a/rtl/os2/dos.pas +++ b/rtl/os2/dos.pas @@ -669,12 +669,13 @@ end; function GetShortName(var p : String) : boolean; begin GetShortName:=true; +{$WARNING EA .shortname support (see FAT32 driver) should be probably added here!} end; function GetLongName(var p : String) : boolean; begin GetLongName:=true; -{$WARNING EA .longname support should be probably added here} +{$WARNING EA .longname support should be probably added here!} end; @@ -684,7 +685,10 @@ begin end. { $Log$ - Revision 1.38 2004-02-17 17:37:26 daniel + Revision 1.39 2004-02-22 15:01:49 hajny + * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) + + Revision 1.38 2004/02/17 17:37:26 daniel * Enable threadvars again Revision 1.37 2004/02/16 22:16:59 hajny diff --git a/rtl/os2/system.pas b/rtl/os2/system.pas index 96b953aa28..357c89295a 100644 --- a/rtl/os2/system.pas +++ b/rtl/os2/system.pas @@ -187,31 +187,31 @@ procedure DosExit(Action, Result: cardinal); cdecl; external 'DOSCALLS' index 234; // EAs not used in System unit -function DosOpen(FileName:PChar;var Handle:longint;var Action:cardinal; +function DosOpen(FileName:PChar;var Handle: THandle;var Action:cardinal; InitSize,Attrib,OpenFlags,FileMode:cardinal; - EA:Pointer):longint; cdecl; + EA:Pointer): cardinal; cdecl; external 'DOSCALLS' index 273; -function DosClose(Handle:longint): longint; cdecl; +function DosClose(Handle: THandle): cardinal; cdecl; external 'DOSCALLS' index 257; -function DosRead(Handle:longint; Buffer: Pointer;Count:longint; - var ActCount:longint):longint; cdecl; +function DosRead(Handle: THandle; Buffer: Pointer; Count: cardinal; + var ActCount: cardinal): cardinal; cdecl; external 'DOSCALLS' index 281; -function DosWrite(Handle:longint; Buffer: Pointer;Count:longint; - var ActCount:longint):longint; cdecl; +function DosWrite(Handle: THandle; Buffer: Pointer;Count: cardinal; + var ActCount: cardinal): cardinal; cdecl; external 'DOSCALLS' index 282; -function DosSetFilePtr(Handle:longint;Pos:longint;Method:cardinal; - var PosActual:longint):longint; cdecl; +function DosSetFilePtr(Handle: THandle; Pos:longint; Method:cardinal; + var PosActual: cardinal): cardinal; cdecl; external 'DOSCALLS' index 256; -function DosSetFileSize(Handle:longint;Size:cardinal):longint; cdecl; +function DosSetFileSize(Handle: THandle; Size: cardinal): cardinal; cdecl; external 'DOSCALLS' index 272; -function DosQueryHType(Handle:longint;var HandType:longint; - var Attr:longint):longint; cdecl; +function DosQueryHType(Handle: THandle; var HandType: cardinal; + var Attr: cardinal): cardinal; cdecl; external 'DOSCALLS' index 224; type @@ -227,7 +227,7 @@ type WeekDay: byte; end; -function DosGetDateTime(var Buf:TSysDateTime):longint; cdecl; +function DosGetDateTime(var Buf:TSysDateTime): cardinal; cdecl; external 'DOSCALLS' index 230; { converts an OS/2 error code to a TP compatible error } @@ -480,10 +480,10 @@ end; versions of OS/2. Flags = One or more of the mfXXXX constants.} -function DosAllocMem(var P:pointer;Size,Flag:cardinal):longint; cdecl; +function DosAllocMem(var P:pointer;Size,Flag:cardinal): cardinal; cdecl; external 'DOSCALLS' index 299; -function DosSetMem(P:pointer;Size,Flag:cardinal):longint; cdecl; +function DosSetMem(P:pointer;Size,Flag:cardinal): cardinal; cdecl; external 'DOSCALLS' index 305; var @@ -584,13 +584,13 @@ end; function do_read(h,addr,len:longint):longint; Var - T: Longint; + T: cardinal; begin {$ifdef IODEBUG} write('do_read: handle=', h, ', addr=', addr, ', length=', len); {$endif} InOutRes:=DosRead(H, Pointer(Addr), Len, T); - do_read:=T; + do_read:= longint (T); {$ifdef IODEBUG} writeln(', actual_len=', t, ', InOutRes=', InOutRes); {$endif} @@ -598,13 +598,13 @@ end; function do_write(h,addr,len:longint) : longint; Var - T: Longint; + T: cardinal; begin {$ifdef IODEBUG} write('do_write: handle=', h, ', addr=', addr, ', length=', len); {$endif} InOutRes:=DosWrite(H, Pointer(Addr), Len, T); - do_write:=T; + do_write:= longint (T); {$ifdef IODEBUG} writeln(', actual_len=', t, ', InOutRes=', InOutRes); {$endif} @@ -612,10 +612,10 @@ end; function do_filepos(handle:longint): longint; var - PosActual: Longint; + PosActual: cardinal; begin InOutRes:=DosSetFilePtr(Handle, 0, 1, PosActual); - do_filepos:=PosActual; + do_filepos:=longint (PosActual); {$ifdef IODEBUG} writeln('do_filepos: handle=', Handle, ', actual_pos=', PosActual, ', InOutRes=', InOutRes); {$endif} @@ -623,7 +623,7 @@ end; procedure do_seek(handle,pos:longint); var - PosActual: Longint; + PosActual: cardinal; begin InOutRes:=DosSetFilePtr(Handle, Pos, 0 {ZeroBased}, PosActual); {$ifdef IODEBUG} @@ -633,17 +633,17 @@ end; function do_seekend(handle:longint):longint; var - PosActual: Longint; + PosActual: cardinal; begin InOutRes:=DosSetFilePtr(Handle, 0, 2 {EndBased}, PosActual); - do_seekend:=PosActual; + do_seekend:=longint (PosActual); {$ifdef IODEBUG} writeln('do_seekend: handle=', Handle, ', actual_pos=', PosActual, ', InOutRes=', InOutRes); {$endif} end; function do_filesize(handle:longint):longint; -var aktfilepos:longint; +var aktfilepos: cardinal; begin aktfilepos:=do_filepos(handle); do_filesize:=do_seekend(handle); @@ -778,7 +778,7 @@ end; function do_isdevice (Handle: longint): boolean; var - HT, Attr: longint; + HT, Attr: cardinal; begin do_isdevice:=false; If DosQueryHType(Handle, HT, Attr)<>0 then exit; @@ -1471,7 +1471,10 @@ the compiler, of course, but more should get allocated dynamically on demand. end. { $Log$ - Revision 1.66 2004-02-16 22:18:44 hajny + Revision 1.67 2004-02-22 15:01:49 hajny + * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) + + Revision 1.66 2004/02/16 22:18:44 hajny * LastDosExitCode changed back from threadvar temporarily Revision 1.65 2004/02/02 03:24:09 yuri diff --git a/rtl/os2/sysutils.pp b/rtl/os2/sysutils.pp index 8c704fa7ae..3a20935330 100644 --- a/rtl/os2/sysutils.pp +++ b/rtl/os2/sysutils.pp @@ -82,7 +82,7 @@ type FileAlloc:cardinal; {Amount of space the file really occupies on disk.} AttrFile:cardinal; {Attributes of file.} - Name:string; {Also possible to use as ASCIIZ. + Name:shortstring; {Also possible to use as ASCIIZ. The byte following the last string character is always zero.} end; @@ -101,7 +101,7 @@ type occupies on disk.} AttrFile:cardinal; {Attributes of file.} cbList:longint; {Size of the file's extended attributes.} - Name:string; {Also possible to use as ASCIIZ. + Name:shortstring; {Also possible to use as ASCIIZ. The byte following the last string character is always zero.} end; @@ -316,29 +316,29 @@ const the size and placement.} -function DosSetFileInfo (Handle: longint; InfoLevel: cardinal; AFileStatus: PFileStatus; +function DosSetFileInfo (Handle: THandle; InfoLevel: cardinal; AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl; external 'DOSCALLS' index 218; function DosQueryFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo; BufLen: cardinal): cardinal; cdecl; external 'DOSCALLS' index 278; -function DosQueryFileInfo (Handle: longint; InfoLevel: cardinal; +function DosQueryFileInfo (Handle: THandle; InfoLevel: cardinal; AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl; external 'DOSCALLS' index 279; function DosScanEnv (Name: PChar; var Value: PChar): cardinal; cdecl; external 'DOSCALLS' index 227; -function DosFindFirst (FileMask: PChar; var Handle: longint; Attrib: cardinal; +function DosFindFirst (FileMask: PChar; var Handle: THandle; Attrib: cardinal; AFileStatus: PFileStatus; FileStatusLen: cardinal; var Count: cardinal; InfoLevel: cardinal): cardinal; cdecl; external 'DOSCALLS' index 264; -function DosFindNext (Handle: longint; AFileStatus: PFileStatus; +function DosFindNext (Handle: THandle; AFileStatus: PFileStatus; FileStatusLen: cardinal; var Count: cardinal): cardinal; cdecl; external 'DOSCALLS' index 265; -function DosFindClose (Handle: longint): cardinal; cdecl; +function DosFindClose (Handle: THandle): cardinal; cdecl; external 'DOSCALLS' index 263; function DosQueryCtryInfo (Size: cardinal; var Country: TCountryCode; @@ -348,42 +348,42 @@ function DosQueryCtryInfo (Size: cardinal; var Country: TCountryCode; function DosMapCase (Size: cardinal; var Country: TCountryCode; AString: PChar): cardinal; cdecl; external 'NLS' index 7; -function DosDelete(FileName:PChar): Longint; cdecl; +function DosDelete(FileName:PChar): cardinal; cdecl; external 'DOSCALLS' index 259; -function DosMove(OldFile, NewFile:PChar): Longint; cdecl; +function DosMove(OldFile, NewFile:PChar): cardinal; cdecl; external 'DOSCALLS' index 271; function DosQueryPathInfo(FileName:PChar;InfoLevel:cardinal; - AFileStatus:PFileStatus;FileStatusLen:cardinal): Longint; cdecl; + AFileStatus:PFileStatus;FileStatusLen:cardinal): cardinal; cdecl; external 'DOSCALLS' index 223; -function DosSetPathInfo(FileName:PChar;InfoLevel:longint; +function DosSetPathInfo(FileName:PChar;InfoLevel:cardinal; AFileStatus:PFileStatus;FileStatusLen, - Options:longint):longint; cdecl; + Options:cardinal):cardinal; cdecl; external 'DOSCALLS' index 219; -function DosOpen(FileName:PChar;var Handle:longint;var Action: Longint; +function DosOpen(FileName:PChar;var Handle: THandle; var Action: cardinal; InitSize,Attrib,OpenFlags,FileMode:cardinal; - EA:Pointer):longint; cdecl; + EA:Pointer):cardinal; cdecl; external 'DOSCALLS' index 273; -function DosClose(Handle:longint): longint; cdecl; +function DosClose(Handle: THandle): cardinal; cdecl; external 'DOSCALLS' index 257; -function DosRead(Handle:longint; var Buffer; Count:longint; - var ActCount:longint):longint; cdecl; +function DosRead(Handle:THandle; var Buffer; Count: cardinal; + var ActCount: cardinal): cardinal; cdecl; external 'DOSCALLS' index 281; -function DosWrite(Handle:longint; Buffer: pointer; Count:longint; - var ActCount:longint):longint; cdecl; +function DosWrite(Handle: THandle; Buffer: pointer; Count: cardinal; + var ActCount: cardinal): cardinal; cdecl; external 'DOSCALLS' index 282; -function DosSetFilePtr(Handle:longint;Pos:longint;Method:cardinal; - var PosActual:longint):longint; cdecl; +function DosSetFilePtr(Handle: THandle; Pos: longint; Method: cardinal; + var PosActual: cardinal): cardinal; cdecl; external 'DOSCALLS' index 256; -function DosSetFileSize(Handle:longint;Size:cardinal):longint; cdecl; +function DosSetFileSize (Handle: THandle; Size: cardinal): cardinal; cdecl; external 'DOSCALLS' index 272; procedure DosSleep (MSec: cardinal); cdecl; external 'DOSCALLS' index 229; @@ -421,7 +421,7 @@ type WeekDay: byte; end; -function DosGetDateTime(var Buf: TDT):longint; cdecl; +function DosGetDateTime(var Buf: TDT): cardinal; cdecl; external 'DOSCALLS' index 230; @@ -443,15 +443,12 @@ const function FileOpen (const FileName: string; Mode: integer): longint; Var - Rc, Action, Handle: Longint; - P: PChar; + Handle: THandle; + Rc, Action: cardinal; begin - P:=StrAlloc(length(FileName)+1); - StrPCopy(P, FileName); (* DenyNone if sharing not specified. *) if Mode and 112 = 0 then Mode:=Mode or 64; - Rc:=DosOpen(P, Handle, Action, 0, 0, 1, Mode, nil); - StrDispose(P); + Rc:=DosOpen(PChar (FileName), Handle, Action, 0, 0, 1, Mode, nil); If Rc=0 then FileOpen:=Handle else @@ -462,13 +459,10 @@ function FileCreate (const FileName: string): longint; Const Mode = ofReadWrite or faCreate or doDenyRW; (* Sharing to DenyAll *) Var - RC, Action, Handle: Longint; - P: PChar; + Handle: THandle; + RC, Action: cardinal; Begin - P:=StrAlloc(length(FileName)+1); - StrPCopy(P, FileName); - RC:=DosOpen(P, Handle, Action, 0, 0, $12, Mode, Nil); - StrDispose(P); + RC:=DosOpen(PChar (FileName), Handle, Action, 0, 0, $12, Mode, Nil); If RC=0 then FileCreate:=Handle else @@ -483,26 +477,26 @@ end; function FileRead (Handle: longint; var Buffer; Count: longint): longint; Var - T: Longint; + T: cardinal; begin DosRead(Handle, Buffer, Count, T); - FileRead:=T; + FileRead := longint (T); end; function FileWrite (Handle: longint; const Buffer; Count: longint): longint; Var - T: Longint; + T: cardinal; begin DosWrite (Handle, @Buffer, Count, T); - FileWrite:=T; + FileWrite := longint (T); end; function FileSeek (Handle, FOffset, Origin: longint): longint; var - npos: longint; + npos: cardinal; begin - if DosSetFilePtr(Handle, FOffset, Origin, npos)=0 Then - FileSeek:=npos + if DosSetFilePtr (Handle, FOffset, Origin, npos) = 0 Then + FileSeek:= longint (npos) else FileSeek:=-1; end; @@ -541,9 +535,10 @@ end; function FileExists (const FileName: string): boolean; var SR: TSearchRec; + RC: longint; begin FileExists:=False; - if FindFirst(FileName, faAnyFile, SR)=0 then FileExists:=True; + if FindFirst (FileName, faAnyFile, SR)=0 then FileExists:=True; FindClose(SR); end; @@ -558,14 +553,14 @@ var SR: PSearchRec; FStat: PFileFindBuf3; Count: cardinal; Err: cardinal; + I: cardinal; begin New (FStat); Rslt.FindHandle := $FFFFFFFF; Count := 1; Err := DosFindFirst (PChar (Path), Rslt.FindHandle, - Attr and FindResvdMask, FStat, SizeOf (FStat^), Count, - ilStandard); + Attr and FindResvdMask, FStat, SizeOf (FStat^), Count, ilStandard); if (Err = 0) and (Count = 0) then Err := 18; FindFirst := -Err; if Err = 0 then @@ -658,13 +653,9 @@ end; function FileGetAttr (const FileName: string): longint; var FS: PFileStatus3; - S: PChar; begin New(FS); - S:=StrAlloc(length(FileName)+1); - StrPCopy(S, FileName); - Result:=-DosQueryPathInfo(S, ilStandard, FS, SizeOf(FS^)); - StrDispose(S); + Result:=-DosQueryPathInfo(PChar (FileName), ilStandard, FS, SizeOf(FS^)); If Result=0 Then Result:=FS^.attrFile; Dispose(FS); end; @@ -672,40 +663,23 @@ end; function FileSetAttr (const Filename: string; Attr: longint): longint; Var FS: PFileStatus3; - S: PChar; Begin New(FS); FillChar(FS, SizeOf(FS^), 0); - FS^.attrFile:=Attr; - S:=StrAlloc(length(FileName)+1); - StrPCopy(S, FileName); - Result:=-DosSetPathInfo(S, ilStandard, FS, SizeOf(FS^), 0); - StrDispose(S); + FS^.AttrFile:=Attr; + Result:=-DosSetPathInfo(PChar (FileName), ilStandard, FS, SizeOf(FS^), 0); Dispose(FS); end; function DeleteFile (const FileName: string): boolean; -Var - S: PChar; Begin - S:=StrAlloc(length(FileName)+1); - StrPCopy(S, FileName); - Result:=(DosDelete(S)=0); - StrDispose(S); + Result:=(DosDelete(PChar (FileName))=0); End; function RenameFile (const OldName, NewName: string): boolean; -Var - S1, S2: PChar; Begin - S1:=StrAlloc(length(OldName)+1); - StrPCopy(S1, OldName); - S2:=StrAlloc(length(NewName)+1); - StrPCopy(S2, NewName); - Result:=(DosMove(S1, S2)=0); - StrDispose(S1); - StrDispose(S2); + Result:=(DosMove(PChar (OldName), PChar (NewName))=0); End; {**************************************************************************** @@ -752,6 +726,7 @@ end; function SetCurrentDir (const NewDir: string): boolean; begin {$I-} +{$WARNING Should be rewritten to avoid unit dos dependancy!} ChDir (NewDir); Result := (IOResult = 0); {$I+} @@ -761,6 +736,7 @@ end; function CreateDir (const NewDir: string): boolean; begin {$I-} +{$WARNING Should be rewritten to avoid unit dos dependancy!} MkDir (NewDir); Result := (IOResult = 0); {$I+} @@ -770,6 +746,7 @@ end; function RemoveDir (const Dir: string): boolean; begin {$I-} +{$WARNING Should be rewritten to avoid unit dos dependancy!} RmDir (Dir); Result := (IOResult = 0); {$I+} @@ -977,7 +954,10 @@ end. { $Log$ - Revision 1.42 2004-02-15 21:36:10 hajny + Revision 1.43 2004-02-22 15:01:49 hajny + * lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...) + + Revision 1.42 2004/02/15 21:36:10 hajny * overloaded ExecuteProcess added, EnvStr param changed to longint Revision 1.41 2004/02/15 08:02:44 yuri