home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vp21beta.zip / ARTLSRC.RAR / VPSYSLOW.PAS < prev    next >
Pascal/Delphi Source File  |  2000-08-15  |  17KB  |  497 lines

  1. //█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  2. //█                                                       █
  3. //█      Virtual Pascal Runtime Library.  Version 2.1.    █
  4. //█      System interface layer (OS/2 and Win32)          █
  5. //█      ─────────────────────────────────────────────────█
  6. //█      Copyright (C) 1995-2000 vpascal.com              █
  7. //█                                                       █
  8. //▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  9.  
  10. {&OrgName+,Speed+,AlignCode+,AlignRec-,CDecl-,Far16-,Frame+,Delphi+}
  11. {$X+,W-,I-,J+,H-,Delphi+,R-,S-,Q-,B-,T-,Use32+}
  12.  
  13. unit VPSysLow;
  14.  
  15. interface
  16.  
  17. uses
  18. {$IFDEF OS2}    Os2Def, Os2Base; {$Undef KeyDll} {$ENDIF}
  19. {$IFDEF LINUX}  Linux;           {$UNDEF WIN32}  {$ENDIF}
  20. {$IFDEF WIN32}  Windows;                         {$ENDIF}
  21. {$IFDEF DPMI32} Dpmi32df;
  22.  
  23. var
  24.   Video_Adapter_Found : (mda_found, cga_found, ega_found, vga_found);
  25. {$ENDIF}
  26.  
  27. type
  28.   TQuad = Comp;
  29.   TSemHandle = Longint;
  30.  
  31. const
  32. {$IFDEF OS2}
  33.   SemInfinite = sem_indefinite_wait;
  34. {$ENDIF}
  35. {$IFDEF WIN32}
  36.   SemInfinite = INFINITE;
  37. {$ENDIF}
  38. {$IFDEF DPMI32}
  39.   SemInfinite = -1; // not used
  40. {$ENDIF}
  41. {$IFDEF LINUX}
  42.   SemInfinite = -1; // not used
  43.   Exception_Maximum_Parameters = 4;
  44. {$ENDIF}
  45.  
  46. {$IFDEF LINUX}
  47.   sysmem_Read    = PROT_READ;
  48.   sysmem_Write   = PROT_WRITE;
  49.   sysmem_Execute = PROT_EXEC;
  50.   sysmem_Guard   = 0; // Not supported
  51.   sysmem_Default = PROT_READ or PROT_EXEC;
  52. {$ELSE}
  53.   sysmem_Read    = $01;
  54.   sysmem_Write   = $02;
  55.   sysmem_Execute = $04;
  56.   sysmem_Guard   = $08;
  57.   sysmem_Default = $05;
  58. {$ENDIF}
  59.  
  60. const
  61.   // SysFileOpen_Create flags
  62.   // Flags: If the file already exists; set only one of these
  63.   create_FailIfExists     = $0000;
  64.   create_TruncateIfExists = $0001;
  65.  
  66.   // Flags: If the file does not exist; set only one of these
  67.   open_FailIfNew          = $0000;  // ocFileOpen fails if no file
  68.   open_CreateIfNew        = $0001;  // ocFileOpen creates file if no file
  69.   open_TruncateIfExists   = $0002;  // ocFileOpen truncates existing file
  70.  
  71. // Required by the System unit
  72. function SysFileStdIn: Longint;
  73. function SysFileStdOut: Longint;
  74. function SysFileStdErr: Longint;
  75. function SysFileOpen(FileName: PChar; Mode: Longint; var Handle: Longint): Longint;
  76. function SysFileCreate(FileName: PChar; Mode,Attr: Longint; var Handle: Longint): Longint;
  77. function SysFileOpen_Create(Open: Boolean;FileName: PChar; Mode,Attr,Action: Longint; var Handle: Longint): Longint;
  78. function SysFileCopy(_Old, _New: PChar; _Overwrite: Boolean): Boolean;
  79. function SysFileSeek(Handle,Distance,Method: Longint; var Actual: Longint): Longint;
  80. function SysFileRead(Handle: Longint; var Buffer; Count: Longint; var Actual: Longint): Longint;
  81. function SysFileWrite(Handle: Longint; const Buffer; Count: Longint; var Actual: Longint): Longint;
  82. function SysFileSetSize(Handle,NewSize: Longint): Longint;
  83. function SysFileClose(Handle: Longint): Longint;
  84. function SysFileFlushBuffers(Handle: Longint): Longint;
  85. function SysFileDelete(FileName: PChar): Longint;
  86. function SysFileMove(OldName,NewName: PChar): Longint;
  87. function SysFileIsDevice(Handle: Longint): Longint;
  88. function SysDirGetCurrent(Drive: Longint; Path: PChar): Longint;
  89. function SysDirSetCurrent(Path: PChar): Longint;
  90. function SysDirCreate(Path: PChar): Longint;
  91. function SysDirDelete(Path: PChar): Longint;
  92. function SysMemAvail: Longint;
  93. function SysMemAlloc(Size,Flags: Longint; var MemPtr: Pointer): Longint;
  94. function SysMemFree(MemPtr: Pointer): Longint;
  95. function SysSysMsCount: Longint;
  96. procedure SysSysWaitSem(var Sem: Longint);
  97. procedure SysSysSelToFlat(var P: Pointer);
  98. procedure SysSysFlatToSel(var P: Pointer);
  99. function SysCtrlSelfAppType: Longint;
  100. function SysCtrlCreateThread(Attrs: Pointer; StackSize: Longint; Func,Param: Pointer; Flags: Longint; var Tid: Longint): Longint;
  101. function SysCtrlKillThread(Handle: Longint): Longint;
  102. function SysCtrlSuspendThread(Handle: Longint): Longint;
  103. function SysCtrlResumeThread(Handle: Longint): Longint;
  104. function SysGetThreadId: Longint;
  105. procedure SysCtrlExitThread(ExitCode: Longint);
  106. procedure SysCtrlExitProcess(ExitCode: Longint);
  107. function SysCtrlGetModuleName(Handle: Longint; Buffer: PChar): Longint;
  108. procedure SysCtrlEnterCritSec;
  109. procedure SysCtrlLeaveCritSec;
  110. function SysCtrlGetTlsMapMem: Pointer;
  111. function SysCmdln: PChar;
  112. function SysCmdlnCount: Longint;
  113. procedure SysCmdlnParam(Index: Longint; var Param: ShortString);
  114. function SysGetEnvironment: PChar;
  115.  
  116. // Dos, WinDos, SysUtils
  117.  
  118. type
  119.   TOSSearchRec = packed record
  120.     Handle: Longint;
  121.     NameLStr: Pointer;
  122.     Attr: Byte;
  123.     Time: Longint;
  124.     Size: Longint;
  125.     Name: ShortString;
  126.     Filler: array[0..3] of Char;
  127. {$IFDEF WIN32}
  128.     ExcludeAttr: Longint;
  129.     FindData:    TWin32FindData;
  130. {$ENDIF}
  131. {$IFDEF DPMI32}
  132.     attr_must:byte;
  133.     dos_dta:
  134.       record
  135.         Fill: array[1..21] of Byte;
  136.         Attr: Byte;
  137.         Time: Longint;
  138.         Size: Longint;
  139.         Name: array[0..12] of Char;
  140.       end;
  141. {$ENDIF}
  142. {$IFDEF LINUX}
  143.     FindDir:  array[0..255] of Char;
  144.     FindName: ShortString;
  145.     FindAttr: LongInt;
  146. {$ENDIF}
  147.   end;
  148.  
  149.   PLongint = ^Longint;  // Define here rather than using Use32 definition
  150.   THandle = Longint;
  151.  
  152. function SysOsVersion: Longint;
  153. procedure SysGetDateTime(Year,Month,Day,DayOfWeek,Hour,Minute,Second,MSec: PLongint);
  154. procedure SysSetDateTime(Year,Month,Day,Hour,Minute,Second,MSec: PLongint);
  155. function SysVerify(SetValue: Boolean; Value: Boolean): Boolean;
  156. function SysDiskFree(Drive: Byte): Longint;
  157. function SysDiskSize(Drive: Byte): Longint;
  158. function SysDiskFreeLong(Drive: Byte): TQuad;
  159. function SysDiskSizeLong(Drive: Byte): TQuad;
  160. function SysGetFileAttr(FileName: PChar; var Attr: Longint): Longint;
  161. function SysSetFileAttr(FileName: PChar; Attr: Longint): Longint;
  162. function SysGetFileTime(Handle: Longint; var Time: Longint): Longint;
  163. function SysSetFileTime(Handle: Longint; Time: Longint): Longint;
  164. function SysFindFirst(Path: PChar; Attr: Longint; var F: TOSSearchRec; IsPChar: Boolean): Longint;
  165. function SysFindNext(var F: TOSSearchRec; IsPChar: Boolean): Longint;
  166. function SysFindClose(var F: TOSSearchRec): Longint;
  167. function SysFileSearch(Dest,Name,List: PChar): PChar;
  168. function SysFileExpand(Dest,Name: PChar): PChar;
  169. function SysFileAsOS(FileName: PChar): Boolean;
  170. function SysExecute(Path,CmdLine,Env: PChar; Async: Boolean; PID: PLongint; StdIn,StdOut,StdErr: Longint): Longint;
  171. function SysExitCode: Longint;
  172.  
  173. // Semaphores
  174.  
  175. function SemCreateEvent(_Name: pChar; _Shared, _State: Boolean): TSemHandle;
  176. function SemAccessEvent(_Name: pChar): TSemHandle;
  177. function SemPostEvent(_Handle: TSemhandle): Boolean;
  178. function SemWaitEvent(_Handle: TSemHandle; _TimeOut: Longint): Boolean;
  179. procedure SemCloseEvent(_Handle: TSemHandle);
  180.  
  181. function SemCreateMutex(_Name: PChar; _Shared, _State: Boolean): TSemHandle;
  182. function SemAccessMutex(_Name: PChar): TSemHandle;
  183. function SemRequestMutex(_Handle: TSemHandle; _TimeOut: Longint): Boolean;
  184. function SemReleaseMutex(_Handle: TSemHandle): Boolean;
  185. procedure SemCloseMutex(_Handle: TSemHandle);
  186. // Memory management
  187.  
  188. function SysMemInfo(_Base: Pointer; _Size: Longint; var _Flags: Longint): Boolean;
  189. function SysSetMemProtection(_Base: Pointer; _Size: Longint; _Flags: Longint): Boolean;
  190.  
  191. // GUI
  192.  
  193. procedure SysMessageBox(_Msg, _Title: PChar; _Error: Boolean);
  194.  
  195. // VPUtils
  196.  
  197. type
  198.   TDriveType = ( dtFloppy, dtHDFAT, dtHDHPFS, dtInvalid,
  199.                  dtNovellNet, dtCDRom, dtLAN, dtHDNTFS, dtUnknown,
  200.                  dtTVFS, dtHDExt2, dtJFS );
  201.  
  202. function SysGetVolumeLabel(Drive: Char): ShortString;
  203. function SysSetVolumeLabel(Drive: Char; _Label: ShortString): Boolean;
  204. function SysGetForegroundProcessId: Longint;
  205. function SysGetBootDrive: Char;
  206. function SysGetDriveType(Drive: Char): TDriveType;
  207. function SysGetVideoModeInfo( Var Cols, Rows, Colours : Word ): Boolean;
  208. function SysSetVideoMode(Cols, Rows: Word): Boolean;
  209. function SysGetVisibleLines( var Top, Bottom: Longint ): Boolean;
  210.  
  211. // Crt
  212.  
  213. function SysKeyPressed: boolean;
  214. function SysReadKey: Char;
  215. function SysPeekKey(Var Ch: Char): Boolean;
  216. procedure SysFlushKeyBuf;
  217. procedure SysGetCurPos(var X,Y: SmallWord);
  218. procedure SysWrtCharStrAtt(CharStr: Pointer; Len,X,Y: SmallWord; var Attr: Byte);
  219. function SysReadAttributesAt(x,y: SmallWord): Byte;
  220. function SysReadCharAt(x,y: SmallWord): Char;
  221. procedure SysScrollUp(X1,Y1,X2,Y2,Lines,Cell: SmallWord);
  222. procedure SysScrollDn(X1,Y1,X2,Y2,Lines,Cell: SmallWord);
  223. procedure SysBeepEx(Freq,Dur: LongInt);
  224. {$IFDEF DPMI32}
  225. procedure SysSound(freq:longint);
  226. procedure SysNoSound;
  227. {$ENDIF}
  228.  
  229. // TVision and Crt
  230.  
  231. type
  232.   PSysPoint = ^TSysPoint;
  233.   TSysPoint = packed record
  234.     X,Y: SmallInt;
  235.   end;
  236.  
  237.   PSysRect = ^TSysRect;
  238.   TSysRect = packed record
  239.     A,B: TSysPoint;
  240.   end;
  241.  
  242. type
  243.   TSysMouseEvent = packed record
  244.     smeTime:    Longint;
  245.     smePos:     TSysPoint;
  246.     smeButtons: Byte;
  247.   end;
  248.  
  249.   TSysKeyEvent = packed record
  250.     skeKeyCode:    SmallWord;
  251.     skeShiftState: Byte;
  252.   end;
  253.  
  254. function  SysTVDetectMouse: Longint;
  255. procedure SysTVInitMouse(var X,Y: Integer);
  256. procedure SysTVDoneMouse(Close: Boolean);
  257. procedure SysTVShowMouse;
  258. procedure SysTVHideMouse;
  259. procedure SysTVUpdateMouseWhere(var X,Y: Integer);
  260. function SysTVGetMouseEvent(var Event: TSysMouseEvent): Boolean;
  261. procedure SysTVKbdInit;
  262. function SysTVGetKeyEvent(var Event: TSysKeyEvent): Boolean;
  263. function SysTVPeekKeyEvent(var Event: TSysKeyEvent): Boolean;
  264. function SysTVGetShiftState: Byte;
  265. procedure SysTVSetCurPos(X,Y: Integer);
  266. procedure SysTVSetCurType(Y1,Y2: Integer; Show: Boolean);
  267. procedure SysTVGetCurType(var Y1,Y2: Integer; var Visible: Boolean);
  268. procedure SysTVShowBuf(Pos,Size: Integer);
  269. procedure SysTVClrScr;
  270. function SysTVGetScrMode(Size: PSysPoint): Integer;
  271. procedure SysTVSetScrMode(Mode: Integer);
  272. function SysTVGetSrcBuf: Pointer;
  273. procedure SysTVInitCursor;
  274. procedure SysCtrlSleep(Delay: Integer);
  275. function SysGetValidDrives: Longint;
  276.  
  277. // Other
  278.  
  279. type
  280.   TCtrlBreakHandler = function: Boolean;
  281.   TCharCase = (ccLower, ccUpper, ccAnsiLower, ccAnsiUpper);
  282.  
  283. const
  284.   CtrlBreakHandler: TCtrlBreakHandler = nil;
  285.   TVVioHandle: Word = 0;
  286.  
  287. function SysGetCodePage: Longint;
  288. procedure SysCtrlSetCBreakHandler;
  289. function SysFileIncHandleCount(Count: Longint): Longint;
  290. function SysGetSystemSettings: Longint;
  291. function SysCompareStrings(s1, s2: PChar; l1, l2: Longint; IgnoreCase: Boolean): Longint;
  292. procedure SysChangeCase(Source, Dest: PChar; Len: Longint; NewCase: TCharCase);
  293. function SysLowerCase(s: PChar): PChar;
  294. function SysUpperCase(s: PChar): PChar;
  295.  
  296. // IDE
  297.  
  298. procedure SysDisableHardErrors;
  299. function SysKillProcess(Process: Longint): Longint;
  300. function SysAllocSharedMem(Size: Longint; var MemPtr: Pointer): Longint;
  301. function SysGiveSharedMem(MemPtr: Pointer): Longint;
  302.  
  303. function SysPipeCreate(var ReadHandle,WriteHandle: Longint; Size: Longint): Longint;
  304. function SysPipePeek(Pipe: Longint; Buffer: Pointer; BufSize: Longint; var BytesRead: Longint; var IsClosing: Boolean): Longint;
  305. function SysPipeClose(Pipe: Longint): Longint;
  306.  
  307. // Required by SysUtils unit
  308. const
  309.   open_access_ReadOnly          = $0000; { ---- ---- ---- -000 }
  310.   open_access_WriteOnly         = $0001; { ---- ---- ---- -001 }
  311.   open_access_ReadWrite         = $0002; { ---- ---- ---- -010 }
  312.   open_share_DenyReadWrite      = $0010; { ---- ---- -001 ---- }
  313.   open_share_DenyWrite          = $0020; { ---- ---- -010 ---- }
  314.   open_share_DenyRead           = $0030; { ---- ---- -011 ---- }
  315.   open_share_DenyNone           = $0040; { ---- ---- -100 ---- }
  316.  
  317.   xcpt_Signal_Ctrl_C =
  318.     {$IFDEF OS2}   xcpt_Signal;               {$ENDIF}
  319.     {$IFDEF WIN32} xcpt_Control_C_exit;       {$ENDIF}
  320.     {$IFDEF DPMI32}xcpt_Ctrl_Break;           {$ENDIF}
  321.     {$IFDEF LINUX} xcpt_Ctrl_Break;           {$ENDIF}
  322.  
  323. type
  324.   TQuadRec = record
  325.     Lo,Hi: Longint;
  326.   end;
  327.  
  328.   POSExceptionRecord = ^TOSExceptionRecord;
  329.   TOSExceptionRecord = record
  330.     fExceptionNum: Longint;        { exception number }
  331.     fHandlerFlags: Longint;
  332.     fNestedExceptionRecord: POSExceptionRecord;
  333.     fExceptionAddress: Pointer;
  334.     fParameters: Longint;          { Size of Exception Specific Info }
  335.     fExceptionInfo: array [0..exception_Maximum_Parameters-1] of Longint;
  336.   end;
  337.  
  338. procedure SysGetCaseMap(TblLen: Longint; Tbl: PChar );
  339. procedure SysGetWeightTable(TblLen: Longint; WeightTable: PChar);
  340. function SysLoadResourceString(ID: Longint; Buffer: PChar; BufSize: Longint): PChar;
  341. function SysFileExpandS(Name: ShortString): ShortString;
  342. function SysGetSystemError(Code: Longint; Buffer: PChar; BufSize: Longint; var MsgLen: Longint): PChar;
  343. function SysGetModuleName(var Address: Pointer; Buffer: PChar; BufSize: Longint): PChar;
  344. function SysFileUNCExpand(Dest,Name: PChar): PChar;
  345. procedure SysGetCurrencyFormat(CString: PChar; var CFormat, CNegFormat, CDecimals: Byte; var CThousandSep, CDecimalSep: Char);
  346. procedure SysGetDateFormat(var DateSeparator: Char; ShortDateFormat,LongDateFormat: PChar);
  347. procedure SysGetTimeFormat(var TimeSeparator: Char; TimeAMString,TimePMString,ShortTimeFormat,LongTimeFormat: PChar);
  348. procedure SysDisplayConsoleError(PopupErrors: Boolean; Title, Msg: PChar);
  349. procedure SysDisplayGUIError(Title, Msg: PChar);
  350. function SysPlatformID: Longint;
  351. function SysPlatformName: String;
  352. procedure SysBeep;
  353.  
  354. // Clipboard interface
  355.  
  356. function SysClipCanPaste: Boolean;
  357. function SysClipCopy(P: PChar; Size: Longint): Boolean;
  358. function SysClipPaste(var Size: Integer): Pointer;
  359.  
  360. {$IFDEF DPMI32}
  361. procedure SysLowInit;
  362. {$ENDIF}
  363.  
  364. {$IFDEF LINUX}
  365. procedure SysLowInit;
  366. function SysConvertFileName(Dest, Source: PChar; DestFS, SourceFS: TFileSystem): PChar;
  367. function SysIsValidFileName(FileName: PChar; FileSystem: TFileSystem): Boolean;
  368. {$ENDIF}
  369.  
  370. {$IFDEF OS2}
  371. // Routines used to safely call 16-bit OS/2 functions
  372. function Invalid16Parm(const _p: Pointer; const _Length: Longint): Boolean;
  373. function Fix_64k(const _Memory: Pointer; const _Length: Longint): pointer;
  374. {$ENDIF}
  375.  
  376. function SysPathSep: Char;
  377.  
  378. implementation
  379.  
  380. {&OrgName-}
  381.  
  382. uses
  383.   {$Ifdef Win32} {$Ifndef KeyDll}
  384.   VpKbdW32,  // Statically linked default Win32 keyboard handler
  385.   {$Endif} {$Endif}
  386.   {$Ifdef DPMI32}
  387.   Dpmi32, Resource, // Dpmi support files
  388.   {$Endif}
  389.   {$IFDEF LINUX}
  390.   LnxRes,
  391.   {$ELSE}
  392.   ExeHdr,
  393.   {$ENDIF}
  394.   Strings;
  395.  
  396. const
  397.   SharedMemSize = 8*1024;
  398.  
  399. type
  400.   PSharedMem = ^TSharedMem;
  401.   TSharedMem = record
  402.     TlsPerThread  : Pointer;        // Actual TLS
  403.     MaxThreadCount: Longint;        // Max thread ID so far
  404.     TlsSemaphore  : Longint;        // Semaphore used by Tls Mgr
  405.     TlsMemMgr     : PMemoryManager; // Memory Manager used by Tls Mgr
  406.     TlsSemMgr     : Pointer;        // Semaphore Manager used by Tls Mgr
  407.   end;
  408.  
  409.   TDateTimeRec = record
  410.     FTime,FDate: SmallWord;
  411.   end;
  412.  
  413. procedure SysSysWaitSem(var Sem: Longint); {&USES None} {&FRAME-}
  414. asm
  415.       @@1:
  416.         mov     eax,Sem
  417.    lock bts     [eax].Longint,0
  418.         jnc     @@RET
  419.         push    31              // Wait for at least one timer slice
  420.         Call    SysCtrlSleep    // and try to check again
  421.         jmp     @@1
  422.       @@RET:
  423. end;
  424.  
  425. function SysFileExpandS(Name: ShortString): ShortString;
  426. begin
  427.   Name[Length(Name)+1] := #0;
  428.   SysFileExpand(@Result[1], @Name[1]);
  429.   SetLength(Result, strlen(@Result[1]));
  430. end;
  431.  
  432. function SysDiskFree(Drive: Byte): Longint;
  433. var
  434.   Temp: TQuad;
  435. begin
  436.   Temp := SysDiskFreeLong(Drive);
  437.   Result := TQuadRec(Temp).Lo;
  438.   if Temp > MaxLongint then
  439.     Result := MaxLongint;  // Handle overflow
  440. end;
  441.  
  442. function SysDiskSize(Drive: Byte): Longint;
  443. var
  444.   Temp: TQuad;
  445. begin
  446.   Temp := SysDiskSizeLong(Drive);
  447.   Result := TQuadRec(Temp).Lo;
  448.   if Temp > MaxLongint then
  449.     Result := MaxLongint;  // Handle overflow
  450. end;
  451.  
  452. function SysPathSep: Char;
  453. begin
  454. {$IFDEF LINUX}
  455.   if FileSystem = fsUnix then
  456.     Result := '/'
  457.   else
  458.     Result := '\';
  459. {$ELSE}
  460.   Result := '\';
  461. {$ENDIF}
  462. end;
  463.  
  464. function SysPlatformName: String;
  465. begin
  466.   case SysPlatformId of
  467.     -3: Result := 'Linux';
  468.     -2: Result := 'DPMI';
  469.     -1: Result := 'OS/2';
  470.      0: Result := 'Win32s';
  471.      1: Result := 'Win9x';
  472.      2: Result := 'WinNT';
  473.   else
  474.     Result := 'Unknown';
  475.   end;
  476. end;
  477.  
  478. // Include platform specific implementations
  479.  
  480. {$IFDEF OS2}
  481.   {$I VpSysOs2.Pas}
  482. {$ENDIF}
  483.  
  484. {$IFDEF WIN32}
  485.   {$I VpSysW32.Pas}
  486. {$ENDIF}
  487.  
  488. {$IFDEF DPMI32}
  489.   {$I VpSysD32.Pas}
  490. {$ENDIF}
  491.  
  492. {$IFDEF LINUX}
  493.   {$I VpSysLnx.Pas}
  494. {$ENDIF}
  495.  
  496. end.
  497.