Browse Source

* lots of fixes (regcall, THandle, string operations in sysutils, longint2cardinal according to OS/2 docs, dosh.inc, ...)

Tomas Hajny 21 years ago
parent
commit
09fd537acf
5 changed files with 304 additions and 242 deletions
  1. 15 6
      rtl/emx/dos.pas
  2. 201 135
      rtl/emx/sysutils.pp
  3. 6 2
      rtl/os2/dos.pas
  4. 30 27
      rtl/os2/system.pas
  5. 52 72
      rtl/os2/sysutils.pp

+ 15 - 6
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

+ 201 - 135
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
+{$IFDEF REGCALL}
+ mov ecx, edx
+ mov edx, eax
+{$ELSE REGCALL}
+ mov ecx, Mode
+ mov edx, FileName
+{$ENDIF REGCALL}
 (* DenyAll if sharing not specified. *)
-        test eax, 112
-        jnz @FOpen1
-        or eax, 16
+ test ecx, 112
+ jnz @FOpen1
+ or ecx, 16
 @FOpen1:
-        mov ecx, eax
-        mov eax, 7F2Bh
- mov edx, FileName
+ 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

+ 6 - 2
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

+ 30 - 27
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

+ 52 - 72
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