Browse Source

* don't use getmem in startup (necessary for heaptrc)

peter 27 years ago
parent
commit
ee3681a9d6
1 changed files with 41 additions and 37 deletions
  1. 41 37
      rtl/linux/dos.pp

+ 41 - 37
rtl/linux/dos.pp

@@ -264,7 +264,7 @@ function WeekDay (y,m,d:longint):longint;
 var
   u,v : longint;
 begin
-  if (m<1) or (m>12) or (y<1600) or (y>4000) or 
+  if (m<1) or (m>12) or (y<1600) or (y>4000) or
      (d<1) or (d>30+((m+ord(m>7)) and 1)-ord(m=2)) or
      ((m*d=58) and (((y mod 4>0) or (y mod 100=0)) and (y mod 400>0))) then
    WeekDay:=-1
@@ -380,10 +380,10 @@ var
 {$IFDEF CRTLIB}
   Buf : Array[0..512] of Char;
   i   : Integer;
-{$ELSE}  
+{$ELSE}
   pid    : longint;
   status : integer;
-{$ENDIF}  
+{$ENDIF}
 Begin
 {$IFDEF CRTLIB}
   i:=Length(Path);
@@ -445,9 +445,16 @@ End;
   ! Use AddDisk() to Add new drives !
   They both return -1 when a failure occurs.
 }
+Const
+  FixDriveStr : array[0..3] of pchar=(
+    '.',
+    '/fd0/.',
+    '/fd1/.',
+    '/.'
+    );
 var
   Drives   : byte;
-  DriveStr : array[0..26] of pchar;
+  DriveStr : array[4..26] of pchar;
 
 Procedure AddDisk(const path:string);
 begin
@@ -469,7 +476,8 @@ var
 {$ENDIF}
 Begin
 {$IFNDEF CRTLIB}
-  if (not (drivestr[Drive]=nil)) and fsstat(StrPas(drivestr[drive]),fs) then
+  if ((Drive<4) and (not (fixdrivestr[Drive]=nil)) and fsstat(StrPas(fixdrivestr[drive]),fs)) or
+     ((not (drivestr[Drive]=nil)) and fsstat(StrPas(drivestr[drive]),fs)) then
    Diskfree:=fs.bavail*fs.bsize
   else
    Diskfree:=-1;
@@ -485,7 +493,8 @@ var
 {$ENDIF}
 Begin
 {$IFNDEF CRTLIB}
-  if (not (drivestr[Drive]=nil)) and fsstat(StrPas(drivestr[drive]),fs) then
+  if ((Drive<4) and (not (fixdrivestr[Drive]=nil)) and fsstat(StrPas(fixdrivestr[drive]),fs)) or
+     ((not (drivestr[Drive]=nil)) and fsstat(StrPas(drivestr[drive]),fs)) then
    DiskSize:=fs.blocks*fs.bsize
   else
    DiskSize:=-1;
@@ -522,21 +531,21 @@ Begin
      repeat
        if (RtlFindRecs[i].SearchNum=f.SearchNum) then
         break;
-       inc(i);  
+       inc(i);
      until (i>=RtlFindSize);
      If i<RtlFindSize Then
       Begin
         RtlFindRecs[i].SearchNum:=0;
         if f.dirptr>0 then
          begin
-         {$IFDEF CRTLIB}   
+         {$IFDEF CRTLIB}
            _rtl_closeDir(f.dirptr);
          {$ELSE}
            closedir(pdir(f.dirptr));
-         {$ENDIF}  
+         {$ENDIF}
          end;
       End;
-   end;      
+   end;
   f.dirptr:=0;
 End;
 
@@ -547,9 +556,9 @@ var
   Info : RtlInfoType;
 {$IFDEF CRTLIB}
   buf  : array[0..255] of char;
-{$ELSE}  
+{$ELSE}
   st   : stat;
-{$ENDIF}  
+{$ENDIF}
 begin
   FindGetFileInfo:=false;
 {$IFDEF CRTLIB}
@@ -624,7 +633,7 @@ Var
   Finished : boolean;
 {$IFNDEF CRTLIB}
   p        : PDirEnt;
-{$ENDIF}    
+{$ENDIF}
 Begin
   If f.SearchType=0 Then
    Begin
@@ -660,9 +669,9 @@ Begin
             Begin
             {$IFDEF CRTLIB}
               _rtl_closeDir(rtlfindrecs[arraypos].dirptr);
-            {$ELSE}        
+            {$ELSE}
               CloseDir(pdir(rtlfindrecs[arraypos].dirptr));
-            {$ENDIF}       
+            {$ENDIF}
             End;
            RtlFindRecs[ArrayPos].SearchNum := f.SearchNum;
            RtlFindRecs[ArrayPos].DirPtr := f.DirPtr;
@@ -670,15 +679,15 @@ Begin
             begin
             {$IFDEF CRTLIB}
               _rtl_seekdir(f.dirptr, f.searchpos);
-            {$ELSE}   
+            {$ELSE}
               seekdir(pdir(f.dirptr), f.searchpos);
-            {$ENDIF}  
+            {$ENDIF}
             end;
          end;
       End;
      RtlFindRecs[ArrayPos].LastUsed:=0;
    end;
-{Main loop}   
+{Main loop}
   SName:=Copy(f.SearchSpec,f.NamePos+1,255);
   Found:=False;
   Finished:=(f.dirptr=0);
@@ -706,7 +715,7 @@ Begin
          End;
       End;
    End;
-{Shutdown}   
+{Shutdown}
   If Found Then
    Begin
    {$IFDEF CRTLIB}
@@ -733,15 +742,15 @@ Begin
    begin
      DosError:=3;
      exit;
-   end;     
-{Create Info}   
+   end;
+{Create Info}
   f.SearchSpec := Path;
   f.SearchAttr := Attr;
   f.SearchPos:=0;
   f.NamePos := Length(f.SearchSpec);
   while (f.NamePos>0) and (f.SearchSpec[f.NamePos]<>'/') do
    dec(f.NamePos);
-{Wildcards?}   
+{Wildcards?}
   if (Pos('?',Path)=0)  and (Pos('*',Path)=0) then
    begin
      if FindGetFileInfo(Path,f) then
@@ -750,21 +759,21 @@ Begin
       begin
         if ErrNo=Sys_ENOENT then
          DosError:=3
-        else 
-         DosError:=18; 
-      end;       
+        else
+         DosError:=18;
+      end;
      f.DirPtr:=0;
      f.SearchType:=1;
      f.searchnum:=-1;
    end
   else
 {Find Entry}
-   begin 
+   begin
      Inc(CurrSearchNum);
      f.SearchNum:=CurrSearchNum;
      f.SearchType:=0;
      FindNext(f);
-   end;     
+   end;
 End;
 
 
@@ -816,7 +825,7 @@ Begin
    LinAttr:=Info.Mode;
   if S_ISDIR(LinAttr) then
    Attr:=$10
-  else 
+  else
    Attr:=$20;
   if not Access(strpas(@textrec(f).name),W_OK) then
    Attr:=Attr or $1;
@@ -1028,19 +1037,14 @@ End;
                             --- Initialization ---
 ******************************************************************************}
 
-Begin
-{$IFNDEF CRTLIB}
-{drivestr needs initialisation}
-  AddDisk('.');
-  AddDisk('/fd0/.');
-  AddDisk('/fd1/.');
-  AddDisk('/.');
-{$ENDIF}
 End.
 
 {
   $Log$
-  Revision 1.3  1998-05-06 12:35:26  michael
+  Revision 1.4  1998-11-04 10:15:54  peter
+    * don't use getmem in startup (necessary for heaptrc)
+
+  Revision 1.3  1998/05/06 12:35:26  michael
   + Removed log from before restored version.
 
   Revision 1.2  1998/05/04 17:40:43  peter