Browse Source

+ added switch MAC_SYS_RUNABLE
+ added include of system.h etc
+ added standard globals
+ added dummy hook procedures

olle 23 years ago
parent
commit
c12d6337ef
1 changed files with 282 additions and 19 deletions
  1. 282 19
      rtl/macos/system.pp

+ 282 - 19
rtl/macos/system.pp

@@ -3,6 +3,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) 2002 by Olle Raab
     Copyright (c) 2002 by Olle Raab
 
 
+    FreePascal system unit for MacOS.
+
     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.
 
 
@@ -15,7 +17,16 @@ unit System;
 
 
 interface
 interface
 
 
+{If MAC_SYS_RUNABLE is defined, this file can be included in a
+ runnable program, but it then lacks lot of features. If not defined
+ it tries to be faithful to a real system.pp, but it may not be
+ able to assemble and link. The switch is only temporary, and only for
+ use when system.pp is developed.}
+
 {$Y-}
 {$Y-}
+
+{$ifdef MAC_SYS_RUNABLE}
+
 type
 type
    integer = -32768 .. 32767;
    integer = -32768 .. 32767;
    byte =0..255;
    byte =0..255;
@@ -24,8 +35,42 @@ type
    longint=+(-$7FFFFFFF-1)..$7FFFFFFF;
    longint=+(-$7FFFFFFF-1)..$7FFFFFFF;
    pchar=^char;
    pchar=^char;
 
 
+{$else}
+
+{$I systemh.inc}
+
+{$I heaph.inc}
+
+
+{Platform specific information}
+const
+ LineEnding = #13;
+ LFNSupport = true;
+ DirectorySeparator = ':';
+ DriveSeparator = ':';
+ PathSeparator = ';';
+ FileNameCaseSensitive = false;
+
+const
+  UnusedHandle    = -1;
+  StdInputHandle  = 0;
+  StdOutputHandle = 0;
+  StdErrorHandle  = 0;
+
+  sLineBreak : string[1] = LineEnding;
+  DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsCR;
+
+var
+  argc : longint;
+  argv : ppchar;
+  envp : ppchar;
+
+{$endif}
+
 implementation
 implementation
 
 
+{$ifdef MAC_SYS_RUNABLE}
+
 procedure do_exit;[public,alias:'FPC_DO_EXIT'];
 procedure do_exit;[public,alias:'FPC_DO_EXIT'];
 
 
 begin
 begin
@@ -36,29 +81,247 @@ procedure fpc_initializeunits;[public,alias:'FPC_INITIALIZEUNITS'];
 begin
 begin
 end;
 end;
 
 
-{ This is a hack to make it work until powerpc.inc is fixed.
+{$else}
+
+{$I system.inc}
+
+{*********************** ??????? *************}
+
+procedure SysInitStdIO;
+begin
+end;
+
+{*****************************************************************************}
+
+procedure setup_arguments;
+begin
+end;
+
+procedure setup_environment;
+begin
+end;
+
+{*****************************************************************************
+                         System Dependent Exit code
+*****************************************************************************}
+Procedure system_exit;
+begin
+end;
+
+
+{*****************************************************************************
+                              ParamStr/Randomize
+*****************************************************************************}
+
+{ number of args }
+function paramcount : longint;
+begin
+  {paramcount := argc - 1;}
+  paramcount:=0;
+end;
+
+{ argument number l }
+function paramstr(l : longint) : string;
+begin
+  {if (l>=0) and (l+1<=argc) then
+   paramstr:=strpas(argv[l])
+  else}
+   paramstr:='';
+end;
+
+{ set randseed to a new pseudo random value }
+procedure randomize;
+begin
+  {regs.realeax:=$2c00;
+  sysrealintr($21,regs);
+  hl:=regs.realedx and $ffff;
+  randseed:=hl*$10000+ (regs.realecx and $ffff);}
+  randseed:=0;
+end;
+
+{*****************************************************************************
+                              Heap Management
+*****************************************************************************}
+
+{ first address of heap }
+function getheapstart:pointer;
+begin
+   getheapstart:=0;
+end;
+
+{ current length of heap }
+function getheapsize:longint;
+begin
+   getheapsize:=0;
+end;
+
+{ function to allocate size bytes more for the program }
+{ must return the first address of new data space or -1 if fail }
+function Sbrk(size : longint):longint;
+begin
+  Sbrk:=-1;
+end;
+
+{$I heap.inc}
+
+{****************************************************************************
+                        Low level File Routines
+       All these functions can set InOutRes on errors
+ ****************************************************************************}
+
+{ close a file from the handle value }
+procedure do_close(handle : longint);
+begin
+  InOutRes:=1;
+end;
+
+procedure do_erase(p : pchar);
+begin
+  InOutRes:=1;
+end;
+
+procedure do_rename(p1,p2 : pchar);
+begin
+  InOutRes:=1;
+end;
+
+function do_write(h,addr,len : longint) : longint;
+begin
+  InOutRes:=1;
+end;
+
+function do_read(h,addr,len : longint) : longint;
+begin
+  InOutRes:=1;
+end;
+
+function do_filepos(handle : longint) : longint;
+begin
+  InOutRes:=1;
+end;
+
+procedure do_seek(handle,pos : longint);
+begin
+  InOutRes:=1;
+end;
 
 
-  This function is never called directly, it's a dummy to hold the register save/
-  load subroutines
+function do_seekend(handle:longint):longint;
+begin
+  InOutRes:=1;
+end;
+
+function do_filesize(handle : longint) : longint;
+begin
+  InOutRes:=1;
+end;
+
+{ truncate at a given position }
+procedure do_truncate (handle,pos:longint);
+begin
+  InOutRes:=1;
+end;
+
+procedure do_open(var f;p:pchar;flags:longint);
+{
+  filerec and textrec have both handle and mode as the first items so
+  they could use the same routine for opening/creating.
+  when (flags and $10)   the file will be append
+  when (flags and $100)  the file will be truncate/rewritten
+  when (flags and $1000) there is no check for close (needed for textfiles)
 }
 }
-procedure saverestorereg;
-assembler;
-asm
-	export ._restf14[PR]
-	csect  ._restf14[PR]
-._restf14:
-                mtlr    r0
-                blr
-	export ._savef14[PR]
-	csect  ._savef14[PR]
-._savef14:
-                blr
-end;
-
-end.
+begin
+  InOutRes:=1;
+end;
+
+function do_isdevice(handle:longint):boolean;
+begin
+  do_isdevice:=false;
+end;
+
+
+{*****************************************************************************
+                           UnTyped File Handling
+*****************************************************************************}
+
+{$i file.inc}
+
+{*****************************************************************************
+                           Typed File Handling
+*****************************************************************************}
+
+{$i typefile.inc}
+
+{*****************************************************************************
+                           Text File Handling
+*****************************************************************************}
+
+{ should we consider #26 as the  end of a file ? }
+{?? $DEFINE EOF_CTRLZ}
+
+{$i text.inc}
+
+{*****************************************************************************
+                           Directory Handling
+*****************************************************************************}
+procedure mkdir(const s : string);[IOCheck];
+begin
+  InOutRes:=1;
+end;
+
+procedure rmdir(const s : string);[IOCheck];
+begin
+  InOutRes:=1;
+end;
+
+procedure chdir(const s : string);[IOCheck];
+begin
+  InOutRes:=1;
+end;
+
+procedure GetDir (DriveNr: byte; var Dir: ShortString);
+
+begin
+  InOutRes := 1;
+end;
+
+{*****************************************************************************
+                         SystemUnit Initialization
+*****************************************************************************}
+
+Begin
+  { To be set if this is a GUI or console application }
+  IsConsole := TRUE;
+  { To be set if this is a library and not a program  }
+  IsLibrary := FALSE;
+  StackBottom := SPtr - StackLength;
+  ExitCode := 0;
+{ Setup heap }
+  InitHeap;
+{ Setup stdin, stdout and stderr }
+  OpenStdIO(Input,fmInput,StdInputHandle);
+  OpenStdIO(Output,fmOutput,StdOutputHandle);
+  OpenStdIO(StdOut,fmOutput,StdOutputHandle);
+  OpenStdIO(StdErr,fmOutput,StdErrorHandle);
+{ Setup environment and arguments }
+  Setup_Environment;
+  Setup_Arguments;
+{ Reset IO Error }
+  InOutRes:=0;
+
+{$endif}
+
+End.
+
+
 {
 {
   $Log$
   $Log$
-  Revision 1.2  2002-10-10 19:44:05  florian
+  Revision 1.3  2002-10-23 15:29:09  olle
+    + added switch MAC_SYS_RUNABLE
+    + added include of system.h etc
+    + added standard globals
+    + added dummy hook procedures
+
+  Revision 1.2  2002/10/10 19:44:05  florian
     * changes from Olle to compile/link a simple program
     * changes from Olle to compile/link a simple program
 
 
   Revision 1.1  2002/10/02 21:34:31  florian
   Revision 1.1  2002/10/02 21:34:31  florian