123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2016 the Free Pascal development team
- Portions based on the Atari RTL for FPC 1.x
- Copyright (c) 1999-2000 by Carl Eric Codere
- member of the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit System;
- interface
- {$define FPC_IS_SYSTEM}
- {$define FPC_STDOUT_TRUE_ALIAS}
- {$define FPC_ANSI_TEXTFILEREC}
- {$define FPC_ATARI_USE_TINYHEAP}
- {$ifdef FPC_ATARI_USE_TINYHEAP}
- {$define HAS_MEMORYMANAGER}
- {$endif FPC_ATARI_USE_TINYHEAP}
- {$i systemh.inc}
- {$ifdef FPC_ATARI_USE_TINYHEAP}
- {$i tnyheaph.inc}
- {$endif FPC_ATARI_USE_TINYHEAP}
- {Platform specific information}
- const
- LineEnding = #13#10;
- LFNSupport = false;
- CtrlZMarksEOF: boolean = false; (* #26 not considered as end of file *)
- DirectorySeparator = '\';
- DriveSeparator = ':';
- ExtensionSeparator = '.';
- PathSeparator = ';';
- AllowDirectorySeparators : set of char = ['\','/'];
- AllowDriveSeparators : set of char = [':'];
- FileNameCaseSensitive = false;
- FileNameCasePreserving = false;
- maxExitCode = 255;
- MaxPathLen = 255;
- AllFilesMask = '*.*';
- sLineBreak = LineEnding;
- DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsCRLF;
- const
- UnusedHandle = $ffff;
- StdInputHandle = 0;
- StdOutputHandle = 1;
- StdErrorHandle = $ffff;
- var
- args: PChar;
- argc: LongInt;
- argv: PPChar;
- envp: PPChar;
- {$if defined(FPUSOFT)}
- {$define fpc_softfpu_interface}
- {$i softfpu.pp}
- {$undef fpc_softfpu_interface}
- {$endif defined(FPUSOFT)}
- implementation
- {$define FPC_SYSTEM_HAS_STACKTOP}
- {$define FPC_SYSTEM_HAS_BACKTRACESTR}
- {$if defined(FPUSOFT)}
- {$define fpc_softfpu_implementation}
- {$define softfpu_compiler_mul32to64}
- {$define softfpu_inline}
- {$i softfpu.pp}
- {$undef fpc_softfpu_implementation}
- { we get these functions and types from the softfpu code }
- {$define FPC_SYSTEM_HAS_float64}
- {$define FPC_SYSTEM_HAS_float32}
- {$define FPC_SYSTEM_HAS_flag}
- {$define FPC_SYSTEM_HAS_extractFloat64Frac0}
- {$define FPC_SYSTEM_HAS_extractFloat64Frac1}
- {$define FPC_SYSTEM_HAS_extractFloat64Exp}
- {$define FPC_SYSTEM_HAS_extractFloat64Sign}
- {$define FPC_SYSTEM_HAS_ExtractFloat32Frac}
- {$define FPC_SYSTEM_HAS_extractFloat32Exp}
- {$define FPC_SYSTEM_HAS_extractFloat32Sign}
- {$endif defined(FPUSOFT)}
- {$i system.inc}
- {$ifdef FPC_ATARI_USE_TINYHEAP}
- {$i tinyheap.inc}
- {$endif FPC_ATARI_USE_TINYHEAP}
- {$i syspara.inc}
- function GetProcessID:SizeUInt;
- begin
- {$WARNING To be checked by platform maintainer}
- GetProcessID := 1;
- end;
- procedure SysInitParamsAndEnv;
- begin
- // [0] index contains the args length...
- args:=@basepage^.p_cmdlin[1];
- GenerateArgs;
- end;
- procedure randomize;
- begin
- {$WARNING: randseed initial value is 24bit}
- randseed:=xbios_random;
- end;
- {*****************************************************************************
- System Dependent Exit code
- *****************************************************************************}
- Procedure system_exit;
- begin
- gemdos_pterm(ExitCode);
- end;
- {*****************************************************************************
- SystemUnit Initialization
- *****************************************************************************}
- procedure SysInitStdIO;
- begin
- OpenStdIO(Input,fmInput,StdInputHandle);
- OpenStdIO(Output,fmOutput,StdOutputHandle);
- OpenStdIO(ErrOutput,fmOutput,StdErrorHandle);
- {$ifndef FPC_STDOUT_TRUE_ALIAS}
- OpenStdIO(StdOut,fmOutput,StdOutputHandle);
- OpenStdIO(StdErr,fmOutput,StdErrorHandle);
- {$endif FPC_STDOUT_TRUE_ALIAS}
- end;
- function CheckInitialStkLen (StkLen: SizeUInt): SizeUInt;
- begin
- CheckInitialStkLen := StkLen;
- end;
- begin
- StackLength := CheckInitialStkLen (InitialStkLen);
- StackBottom := StackTop - StackLength;
- StackMargin := min(align(StackLength div 20,2),STACK_MARGIN_MAX);
- { Initialize ExitProc }
- ExitProc:=Nil;
- {$ifndef FPC_ATARI_USE_TINYHEAP}
- { Setup heap }
- InitHeap;
- {$endif FPC_ATARI_USE_TINYHEAP}
- SysInitExceptions;
- {$ifdef FPC_HAS_FEATURE_UNICODESTRINGS}
- InitUnicodeStringManager;
- {$endif FPC_HAS_FEATURE_UNICODESTRINGS}
- { Setup stdin, stdout and stderr }
- SysInitStdIO;
- { Reset IO Error }
- InOutRes:=0;
- { Setup command line arguments }
- SysInitParamsAndEnv;
- {$ifdef FPC_HAS_FEATURE_THREADING}
- InitSystemThreads;
- {$endif FPC_HAS_FEATURE_THREADING}
- end.
|