system.pp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time librar~y.
  4. Copyright (c) 2000 by Marco van de Voort
  5. member of the Free Pascal development team.
  6. System unit for the *BSD's.
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. { These things are set in the makefile, }
  14. { But you can override them here.}
  15. { If you use an aout system, set the conditional AOUT}
  16. { $Define AOUT}
  17. Unit {$ifdef VER1_0}SysBSD{$else}System{$endif};
  18. Interface
  19. {$define FPC_USE_SIGPROCMASK}
  20. {$define FPC_USE_SIGALTSTACK}
  21. {$ifndef FPC_USE_LIBC}
  22. {$define FPC_USE_SYSCALL}
  23. {$endif}
  24. {$define FPC_IS_SYSTEM}
  25. {$I sysunixh.inc}
  26. CONST SIGSTKSZ = 40960;
  27. Implementation
  28. {$ifdef FPC_USE_LIBC}
  29. const clib = 'c';
  30. type libcint=longint;
  31. plibcint=^libcint;
  32. {$ifdef FreeBSD} // tested on x86
  33. function geterrnolocation: Plibcint; cdecl;external clib name '__error';
  34. {$else}
  35. {$ifdef NetBSD} // from a sparc dump.
  36. function geterrnolocation: Plibcint; cdecl;external clib name '__errno';
  37. {$else}
  38. {$ifdef Darwin}
  39. function geterrnolocation: Plibcint; cdecl;external clib name '__error';
  40. {$else}
  41. {$ifdef OpenBSD}
  42. var libcerrno : libcint; cvar;
  43. function geterrnolocation: Plibcint; cdecl;
  44. begin
  45. geterrnolocation:=@libcerrno;
  46. end;
  47. {$else}
  48. {$endif}
  49. {$endif}
  50. {$endif}
  51. {$endif}
  52. function geterrno:libcint; [public, alias: 'FPC_SYS_GETERRNO'];
  53. begin
  54. geterrno:=geterrnolocation^;
  55. end;
  56. procedure seterrno(err:libcint); [public, alias: 'FPC_SYS_SETERRNO'];
  57. begin
  58. geterrnolocation^:=err;
  59. end;
  60. {$else}
  61. {$ifdef ver1_0}
  62. Var
  63. {$else}
  64. threadvar
  65. {$endif}
  66. Errno : longint;
  67. function geterrno:longint; [public, alias: 'FPC_SYS_GETERRNO'];
  68. begin
  69. GetErrno:=Errno;
  70. end;
  71. procedure seterrno(err:longint); [public, alias: 'FPC_SYS_SETERRNO'];
  72. begin
  73. Errno:=err;
  74. end;
  75. {$endif}
  76. { OS independant parts}
  77. {$I system.inc}
  78. { OS dependant parts }
  79. {$I errno.inc}
  80. {$I bunxtype.inc}
  81. {$I ossysc.inc}
  82. {$I osmain.inc}
  83. {$I text.inc}
  84. {$I heap.inc}
  85. {*****************************************************************************
  86. UnTyped File Handling
  87. *****************************************************************************}
  88. {$i file.inc}
  89. {*****************************************************************************
  90. Typed File Handling
  91. *****************************************************************************}
  92. {$i typefile.inc}
  93. procedure SysInitStdIO;
  94. begin
  95. OpenStdIO(Input,fmInput,StdInputHandle);
  96. OpenStdIO(Output,fmOutput,StdOutputHandle);
  97. OpenStdIO(StdOut,fmOutput,StdOutputHandle);
  98. OpenStdIO(StdErr,fmOutput,StdErrorHandle);
  99. end;
  100. {$ifdef FPC_USE_LIBC}
  101. { can also be used with other BSD's if they use the system's crtX instead of prtX }
  102. {$ifdef Darwin}
  103. procedure pascalmain; external name 'PASCALMAIN';
  104. { Main entry point in C style, needed to capture program parameters. }
  105. procedure main(argcparam: Longint; argvparam: ppchar; envpparam: ppchar); cdecl; [public];
  106. begin
  107. argc:= argcparam;
  108. argv:= argvparam;
  109. envp:= envpparam;
  110. pascalmain; {run the pascal main program}
  111. end;
  112. {$endif Darwin}
  113. {$endif FPC_USE_LIBC}
  114. Begin
  115. IsConsole := TRUE;
  116. IsLibrary := FALSE;
  117. StackBottom := Sptr - StackLength;
  118. { Set up signals handlers }
  119. InstallSignals;
  120. { Setup heap }
  121. InitHeap;
  122. SysInitExceptions;
  123. { Arguments }
  124. SetupCmdLine;
  125. { Setup stdin, stdout and stderr }
  126. SysInitStdIO;
  127. { Reset IO Error }
  128. InOutRes:=0;
  129. (* This should be changed to a real value during *)
  130. (* thread driver initialization if appropriate. *)
  131. ThreadID := 1;
  132. {$ifdef HASVARIANT}
  133. initvariantmanager;
  134. {$endif HASVARIANT}
  135. End.
  136. {
  137. $Log$
  138. Revision 1.14 2004-01-22 13:46:14 marco
  139. bsd
  140. Revision 1.13 2004/01/20 23:09:14 hajny
  141. * ExecuteProcess fixes, ProcessID and ThreadID added
  142. Revision 1.12 2004/01/04 20:32:05 jonas
  143. + geterrnolocation for Darwin
  144. + C-style main for Darwin (generic, can be used for anything)
  145. Revision 1.11 2003/12/30 12:26:21 marco
  146. * FPC_USE_LIBC
  147. Revision 1.10 2003/10/26 17:01:04 marco
  148. * moved sigprocmask to system
  149. Revision 1.9 2003/10/26 16:42:22 marco
  150. * texception4 fix merge
  151. Revision 1.8 2003/01/05 19:01:28 marco
  152. * FreeBSD compiles now with baseunix mods.
  153. Revision 1.7 2002/11/12 14:57:48 marco
  154. * Ugly hack to temporarily be able to use system.pp for Linux too
  155. Revision 1.6 2002/10/27 11:58:30 marco
  156. * Modifications from Saturday.
  157. Revision 1.5 2002/10/26 18:27:51 marco
  158. * First series POSIX calls commits. Including getcwd.
  159. Revision 1.4 2002/10/18 12:19:58 marco
  160. * Fixes to get the generic *BSD RTL compiling again + fixes for thread
  161. support. Still problems left in fexpand. (inoutres?) Therefore fixed
  162. sysposix not yet commited
  163. Revision 1.3 2002/10/13 09:25:39 florian
  164. + call to initvariantmanager inserted
  165. Revision 1.2 2002/09/07 16:01:17 peter
  166. * old logs removed and tabs fixed
  167. Revision 1.1 2002/08/19 12:29:11 marco
  168. * First working POSIX *BSD system unit.
  169. }