2
0
Эх сурвалжийг харах

atari: cleaned up sysdir.inc. it was a combination of old code and copy-pasted code from Amiga

git-svn-id: trunk@34660 -
Károly Balogh 8 жил өмнө
parent
commit
05a35a2a16
1 өөрчлөгдсөн 29 нэмэгдсэн , 174 устгасан
  1. 29 174
      rtl/atari/sysdir.inc

+ 29 - 174
rtl/atari/sysdir.inc

@@ -1,9 +1,8 @@
 {
 {
     This file is part of the Free Pascal run time library.
     This file is part of the Free Pascal run time library.
-    Copyright (c) 1999-2000 by Florian Klaempfl and Pavel Ozerski
-    member of the Free Pascal development team.
+    Copyright (c) 2016 by Free Pascal development team
 
 
-    FPC Pascal system unit for Amiga.
+    Low level directory functions for Atari TOS
 
 
     See the file COPYING.FPC, included in this distribution,
     See the file COPYING.FPC, included in this distribution,
     for details about the copyright.
     for details about the copyright.
@@ -18,198 +17,54 @@
 {*****************************************************************************
 {*****************************************************************************
                            Directory Handling
                            Directory Handling
 *****************************************************************************}
 *****************************************************************************}
-procedure DosDir(func:byte;const s:string);
-var
-  buffer : array[0..255] of char;
-  c : word;
-begin
-  move(s[1],buffer,length(s));
-  buffer[length(s)]:=#0;
-  DoDirSeparators(pchar(@buffer));
-  c:=word(func);
-  asm
-        move.l  d2,d6      { save d2 }
-        movem.l d3/a2/a3,-(sp)
-        pea     buffer
-        move.w  c,-(sp)
-        trap    #1
-        add.l   #6,sp
-        move.l  d6,d2       { restore d2 }
-        movem.l (sp)+,d3/a2/a3
-        tst.w   d0
-        beq     @dosdirend
-        move.w  d0,errno
-     @dosdirend:
-  end;
-  if errno <> 0 then
-     Error2InOut;
-end;
-
-
-procedure mkdir(const s : string);[IOCheck];
-begin
-  If InOutRes <> 0 then exit;
-  DosDir($39,s);
-end;
-
-
-procedure rmdir(const s : string);[IOCheck];
-begin
-  If InOutRes <> 0 then exit;
-  DosDir($3a,s);
-end;
-
-
-procedure chdir(const s : string);[IOCheck];
-begin
-  If InOutRes <> 0 then exit;
-  DosDir($3b,s);
-end;
-
-
-function GetDirIO (DriveNr: byte; var Dir: ShortString): word;
-                                               [public, alias: 'FPC_GETDIRIO'];
-var
-  temp : array[0..255] of char;
-  i    : longint;
-  j: byte;
-  drv: word;
-begin
-  GetDirIO := 0;
-  drv:=word(drivenr);
-  asm
-            move.l  d2,d6      { save d2 }
-            movem.l d3/a2/a3,-(sp)
-
-            { Get dir from drivenr : 0=default, 1=A etc... }
-            move.w drv,-(sp)
-
-            { put (previously saved) offset in si }
-{            move.l temp,-(sp)}
-             pea   temp
-
-            { call attos function 47H : Get dir }
-            move.w #$47,-(sp)
-
-            { make the call }
-            trap   #1
-            add.l  #8,sp
-
-            move.l d6,d2         { restore d2 }
-            movem.l (sp)+,d3/a2/a3
-  end;
-  { conversion to pascal string }
-  i:=0;
-  while (temp[i]<>#0) do
-   begin
-     if temp[i] in AllowDirectorySeparators then
-       temp[i]:=DirectorySeparator;
-     dir[i+3]:=temp[i];
-     inc(i);
-   end;
-  dir[2]:=':';
-  dir[3]:='\';
-  dir[0]:=char(i+2);
-{ upcase the string (FPC Pascal function) }
-  dir:=upcase(dir);
-  if drivenr<>0 then   { Drive was supplied. We know it }
-   dir[1]:=chr(65+drivenr-1)
-  else
-   begin
-      asm
-        move.l  d2,d6      { save d2 }
-        movem.l d3/a2/a3,-(sp)
-        move.w #$19,-(sp)
-        trap   #1
-        add.l  #2,sp
-        move.w d0,drv
-        move.l d6,d2        { restore d2 }
-        movem.l (sp)+,d3/a2/a3
-     end;
-     dir[1]:=chr(byte(drv)+ord('A'));
-   end;
-end;
-
-procedure GetDir (DriveNr: byte; var Dir: ShortString);
-
-begin
-end;
-
 procedure do_mkdir(const s : rawbytestring);
 procedure do_mkdir(const s : rawbytestring);
 var
 var
-  tmpStr : rawbytestring;
-  tmpLock: LongInt;
+  dosResult: longint;
+  ps: rawbytestring;
 begin
 begin
-  checkCTRLC;
-  tmpStr:=PathConv(s);
-  tmpLock:=dosCreateDir(pchar(tmpStr));
-  if tmpLock=0 then begin
-    dosError2InOut(IoErr);
-    exit;
-  end;
-  UnLock(tmpLock);
+  ps:=s;
+  DoDirSeparators(ps);
+  dosResult:=gemdos_dcreate(pchar(ps));
+  if dosResult < 0 then
+    Error2InOutRes(dosResult);
 end;
 end;
 
 
+
 procedure do_rmdir(const s : rawbytestring);
 procedure do_rmdir(const s : rawbytestring);
 var
 var
-  tmpStr : rawbytestring;
+  dosResult: longint;
+  ps: rawbytestring;
 begin
 begin
-  checkCTRLC;
-  if (s='.') then
+  ps:=s;
+  DoDirSeparators(ps);
+  if s='.' then
     begin
     begin
       InOutRes:=16;
       InOutRes:=16;
       exit;
       exit;
     end;
     end;
-  tmpStr:=PathConv(s);
-  if not dosDeleteFile(pchar(tmpStr)) then
-    dosError2InOut(IoErr);
+
+  dosResult:=gemdos_ddelete(pchar(s));
+  if dosResult < 0 then
+    Error2InOutRes(dosResult);
 end;
 end;
 
 
+
 procedure do_ChDir(const s: rawbytestring);
 procedure do_ChDir(const s: rawbytestring);
 var
 var
-  tmpStr : rawbytestring;
-  tmpLock: LongInt;
-  FIB    : PFileInfoBlock;
+  ps: rawbytestring;
 begin
 begin
-  checkCTRLC;
-  tmpStr:=PathConv(s);
-  tmpLock:=0;
-
-  { Changing the directory is a pretty complicated affair }
-  {   1) Obtain a lock on the directory                   }
-  {   2) CurrentDir the lock                              }
-  tmpLock:=Lock(pchar(tmpStr),SHARED_LOCK);
-  if tmpLock=0 then begin
-    dosError2InOut(IoErr);
-    exit;
-  end;
-
-  FIB:=nil;
-  new(FIB);
-
-  if (Examine(tmpLock,FIB)=True) and (FIB^.fib_DirEntryType>0) then begin
-    tmpLock:=CurrentDir(tmpLock);
-    if AOS_OrigDir=0 then begin
-      AOS_OrigDir:=tmpLock;
-      tmpLock:=0;
-    end;
-  end;
+  ps:=s;
+  DoDirSeparators(ps);
 
 
-  if tmpLock<>0 then Unlock(tmpLock);
-  if assigned(FIB) then dispose(FIB);
+  {$WARNING Implement do_chdir}
 end;
 end;
 
 
+
 procedure do_GetDir (DriveNr: byte; var Dir: RawByteString);
 procedure do_GetDir (DriveNr: byte; var Dir: RawByteString);
-var tmpbuf: array[0..255] of char;
 begin
 begin
-  checkCTRLC;
-  Dir:='';
+  Dir := '';
 
 
-  if not GetCurrentDirName(tmpbuf,256) then
-    dosError2InOut(IoErr)
-  else
-    begin
-      Dir:=tmpbuf;
-      SetCodePage(Dir,DefaultFileSystemCodePage,false);
-    end;
+  {$WARNING Implement do_getdir}
+
+  SetCodePage(Dir,DefaultSystemCodePage,false);
 end;
 end;