system.pp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. unit system;
  2. {$ASMMODE intel}
  3. interface
  4. {$DEFINE FPC_INCLUDE_SOFTWARE_MUL}
  5. {$DEFINE FPC_INCLUDE_SOFTWARE_MOD_DIV}
  6. {$I systemh.inc}
  7. const
  8. LineEnding = #13#10;
  9. { LFNSupport is a variable here, defined below!!! }
  10. DirectorySeparator = '\';
  11. DriveSeparator = ':';
  12. ExtensionSeparator = '.';
  13. PathSeparator = ';';
  14. AllowDirectorySeparators : set of char = ['\','/'];
  15. AllowDriveSeparators : set of char = [':'];
  16. { FileNameCaseSensitive and FileNameCasePreserving are defined separately below!!! }
  17. maxExitCode = 255;
  18. MaxPathLen = 256;
  19. const
  20. { Default filehandles }
  21. UnusedHandle = -1;
  22. StdInputHandle = 0;
  23. StdOutputHandle = 1;
  24. StdErrorHandle = 2;
  25. FileNameCaseSensitive : boolean = false;
  26. FileNameCasePreserving: boolean = false;
  27. CtrlZMarksEOF: boolean = true; (* #26 is considered as end of file *)
  28. sLineBreak = LineEnding;
  29. DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsCRLF;
  30. { Default memory segments (Tp7 compatibility) }
  31. seg0040 = $0040;
  32. segA000 = $A000;
  33. segB000 = $B000;
  34. segB800 = $B800;
  35. var
  36. { C-compatible arguments and environment }
  37. argc:longint; //!! public name 'operatingsystem_parameter_argc';
  38. argv:PPchar; //!! public name 'operatingsystem_parameter_argv';
  39. envp:PPchar; //!! public name 'operatingsystem_parameter_envp';
  40. dos_argv0 : pchar; //!! public name 'dos_argv0';
  41. AllFilesMask: string [3];
  42. {$ifndef RTLLITE}
  43. { System info }
  44. LFNSupport : boolean;
  45. {$ELSE RTLLITE}
  46. const
  47. LFNSupport = false;
  48. {$endif RTLLITE}
  49. procedure DebugWrite(const S: string);
  50. procedure DebugWriteLn(const S: string);
  51. implementation
  52. {$I registers.inc}
  53. procedure Intr(IntNo: Byte; var Regs: Registers); external name 'FPC_INTR';
  54. procedure MsDos(var Regs: Registers); external name 'FPC_MSDOS';
  55. {$I system.inc}
  56. procedure DebugWrite(const S: string);
  57. begin
  58. asm
  59. mov si, S
  60. lodsb
  61. mov cl, al
  62. xor ch, ch
  63. mov ah, 2
  64. @@1:
  65. lodsb
  66. mov dl, al
  67. int 21h
  68. loop @@1
  69. end ['ax','bx','cx','dx','si','di'];
  70. end;
  71. procedure DebugWriteLn(const S: string);
  72. begin
  73. DebugWrite(S);
  74. DebugWrite(#13#10);
  75. end;
  76. {*****************************************************************************
  77. ParamStr/Randomize
  78. *****************************************************************************}
  79. function paramcount : longint;
  80. begin
  81. paramcount := 0;
  82. end;
  83. function paramstr(l : longint) : string;
  84. begin
  85. paramstr := '';
  86. end;
  87. procedure randomize;
  88. begin
  89. end;
  90. {*****************************************************************************
  91. System Dependent Exit code
  92. *****************************************************************************}
  93. procedure system_exit;
  94. begin
  95. asm
  96. mov al, byte [exitcode]
  97. mov ah, 4Ch
  98. int 21h
  99. end;
  100. end;
  101. {*****************************************************************************
  102. SystemUnit Initialization
  103. *****************************************************************************}
  104. procedure SysInitStdIO;
  105. begin
  106. OpenStdIO(Input,fmInput,StdInputHandle);
  107. OpenStdIO(Output,fmOutput,StdOutputHandle);
  108. OpenStdIO(ErrOutput,fmOutput,StdErrorHandle);
  109. OpenStdIO(StdOut,fmOutput,StdOutputHandle);
  110. OpenStdIO(StdErr,fmOutput,StdErrorHandle);
  111. end;
  112. function GetProcessID: SizeUInt;
  113. begin
  114. GetProcessID := 1;
  115. end;
  116. function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
  117. begin
  118. result := stklen;
  119. end;
  120. begin
  121. initunicodestringmanager;
  122. { Setup stdin, stdout and stderr }
  123. SysInitStdIO;
  124. end.