system.pp 3.4 KB

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