system.pp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. dos_psp:Word;public name 'dos_psp';
  42. AllFilesMask: string [3];
  43. {$ifndef RTLLITE}
  44. { System info }
  45. LFNSupport : boolean;
  46. {$ELSE RTLLITE}
  47. const
  48. LFNSupport = false;
  49. {$endif RTLLITE}
  50. procedure DebugWrite(const S: string);
  51. procedure DebugWriteLn(const S: string);
  52. implementation
  53. const
  54. fCarry = 1;
  55. {$I registers.inc}
  56. procedure Intr(IntNo: Byte; var Regs: Registers); external name 'FPC_INTR';
  57. procedure MsDos(var Regs: Registers); external name 'FPC_MSDOS';
  58. {$I system.inc}
  59. procedure DebugWrite(const S: string);
  60. begin
  61. asm
  62. mov si, S
  63. lodsb
  64. mov cl, al
  65. xor ch, ch
  66. mov ah, 2
  67. @@1:
  68. lodsb
  69. mov dl, al
  70. int 21h
  71. loop @@1
  72. end ['ax','bx','cx','dx','si','di'];
  73. end;
  74. procedure DebugWriteLn(const S: string);
  75. begin
  76. DebugWrite(S);
  77. DebugWrite(#13#10);
  78. end;
  79. {*****************************************************************************
  80. ParamStr/Randomize
  81. *****************************************************************************}
  82. function paramcount : longint;
  83. begin
  84. paramcount := 0;
  85. end;
  86. function paramstr(l : longint) : string;
  87. begin
  88. paramstr := '';
  89. end;
  90. procedure randomize;
  91. begin
  92. end;
  93. {*****************************************************************************
  94. System Dependent Exit code
  95. *****************************************************************************}
  96. procedure system_exit;
  97. begin
  98. asm
  99. mov al, byte [exitcode]
  100. mov ah, 4Ch
  101. int 21h
  102. end;
  103. end;
  104. {*****************************************************************************
  105. SystemUnit Initialization
  106. *****************************************************************************}
  107. procedure SysInitStdIO;
  108. begin
  109. OpenStdIO(Input,fmInput,StdInputHandle);
  110. OpenStdIO(Output,fmOutput,StdOutputHandle);
  111. OpenStdIO(ErrOutput,fmOutput,StdErrorHandle);
  112. OpenStdIO(StdOut,fmOutput,StdOutputHandle);
  113. OpenStdIO(StdErr,fmOutput,StdErrorHandle);
  114. end;
  115. function GetProcessID: SizeUInt;
  116. begin
  117. GetProcessID := dos_psp;
  118. end;
  119. function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
  120. begin
  121. result := stklen;
  122. end;
  123. begin
  124. initunicodestringmanager;
  125. { Setup stdin, stdout and stderr }
  126. SysInitStdIO;
  127. end.