nwsys.inc 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by the Free Pascal development team
  5. Copyright (c) 2001 Armin Diehl
  6. Interface to netware clib
  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. { 2000/08/27 armin: first version
  14. 2001/03/08 armin: additional functions
  15. 2001/04/14 armin: additional functions for crt-unit
  16. }
  17. CONST Clib = 'clib.nlm';
  18. NlmLib = 'nlmlib.nlm';
  19. Threads = 'threads.nlm';
  20. CalNlm = 'calnlm32.nlm';
  21. ClxNlm = 'clxnlm32.nlm';
  22. NitNlm = 'nit.nlm';
  23. ThreadsNlm = 'threads.nlm';
  24. TYPE
  25. dev_t = LONGINT;
  26. ino_t = LONGINT;
  27. unsignedshort = WORD;
  28. unsignedlong = LONGINT;
  29. unsignedint = LONGINT;
  30. off_t = LONGINT;
  31. size_t = LONGINT;
  32. time_t = LONGINT;
  33. NWStatBufT = PACKED RECORD
  34. st_dev : dev_t; (* volume number *)
  35. st_ino : ino_t; (* directory entry number of the st_name *)
  36. st_mode : unsignedshort; (* emulated file mode *)
  37. st_nlink : unsignedshort; (* count of hard links (always 1) *)
  38. st_uid : unsignedlong; (* object id of owner *)
  39. st_gid : unsignedshort; (* group-id (always 0) *)
  40. st_rdev : dev_t; (* device type (always 0) *)
  41. st_size : off_t; (* total file size--files only *)
  42. st_atime : time_t; (* last access date--files only *)
  43. st_mtime : time_t; (* last modify date and time *)
  44. st_ctime : time_t; (* POSIX: last status change time... *)
  45. (* ...NetWare: creation date/time *)
  46. st_btime : time_t; (* last archived date and time *)
  47. st_attr : unsignedlong; (* file attributes *)
  48. st_archivedID : unsignedlong; (* user/object ID of last archive *)
  49. st_updatedID : unsignedlong; (* user/object ID of last update *)
  50. st_inheritedRightsMask
  51. : unsignedshort; (* inherited rights mask *)
  52. st_originatingNameSpace
  53. : BYTE; (* namespace of creation *)
  54. st_name : ARRAY [0..255] OF CHAR;
  55. (* TARGET_NAMESPACE name *)
  56. st_blksize : LONGINT;
  57. st_blocks : LONGINT;
  58. st_flags : LONGINT;
  59. st_spare : ARRAY [0..3] OF LONGINT;
  60. END;
  61. FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'stat_411';
  62. FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'fstat_411';
  63. PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free';
  64. PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib;
  65. PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib;
  66. FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL Threads NAME 'BeginThread';
  67. FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL NlmLib NAME 'GetThreadDataAreaPtr';
  68. PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL NlmLib NAME 'SaveThreadDataAreaPtr';
  69. PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
  70. PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
  71. PROCEDURE ConsolePrintf3 (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
  72. PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
  73. // this gives internet compiler error 1234124 ??
  74. //PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
  75. PROCEDURE _printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib;
  76. PROCEDURE _printf (FormatStr : PCHAR); CDecl; EXTERNAL CLib;
  77. // this gives internet compiler error 1234124 ??
  78. // PROCEDURE _printf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
  79. // values for __action_code used with ExitThread()
  80. CONST
  81. TSR_THREAD = -1; //-Terminate only the current thread.
  82. EXIT_THREAD = 0; //-Terminate the current thread; if the current thread is
  83. // also the last thread, terminate the NLM.
  84. EXIT_NLM = 1; //-Terminate the entire NLM.
  85. FUNCTION _GetStdIn : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdin'; // result: **FILE
  86. FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout';
  87. FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr';
  88. // FileIO by Fileno
  89. FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'open';
  90. FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'close';
  91. FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'lseek';
  92. FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chsize';
  93. FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'tell';
  94. FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'write';
  95. FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'read';
  96. FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'filelength';
  97. TYPE
  98. NWModifyStructure =
  99. RECORD
  100. MModifyName : PCHAR;
  101. MFileAttributes : LONGINT;
  102. MFileAttributesMask : LONGINT;
  103. MCreateDate : WORD;
  104. MCreateTime : WORD;
  105. MOwnerID : LONGINT;
  106. MLastArchivedDate : WORD;
  107. MLastArchivedTime : WORD;
  108. MLastArchivedID : LONGINT;
  109. MLastUpdatedDate : WORD;
  110. MLastUpdatedTime : WORD;
  111. MLastUpdatedID : LONGINT;
  112. MLastAccessedDate : WORD;
  113. MInheritanceGrantMask : WORD;
  114. MInheritanceRevokeMask : WORD;
  115. MMaximumSpace : LONGINT;
  116. MLastUpdatedInSeconds : LONGINT
  117. END;
  118. CONST MModifyNameBit = $0001;
  119. MFileAtrributesBit = $0002;
  120. MCreateDateBit = $0004;
  121. MCreateTimeBit = $0008;
  122. MOwnerIDBit = $0010;
  123. MLastArchivedDateBit = $0020;
  124. MLastArchivedTimeBit = $0040;
  125. MLastArchivedIDBit = $0080;
  126. MLastUpdatedDateBit = $0100;
  127. MLastUpdatedTimeBit = $0200;
  128. MLastUpdatedIDBit = $0400;
  129. MLastAccessedDateBit = $0800;
  130. MInheritanceRestrictionMaskBit = $1000;
  131. MMaximumSpaceBit = $2000;
  132. MLastUpdatedInSecondsBit = $4000;
  133. // Directory
  134. FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chdir';
  135. FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getcwd';
  136. FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'mkdir';
  137. FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'rmdir';
  138. FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'ChangeDirectoryEntry';
  139. // get fileno from stream
  140. FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno';
  141. FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'isatty';
  142. (* values for 'o_flag' in open()... *)
  143. CONST O_RDONLY = $0000; (* open for read only *)
  144. O_WRONLY = $0001; (* open for write only *)
  145. O_RDWR = $0002; (* open for read and write *)
  146. O_ACCMODE = $0003; (* AND with value to extract access flags *)
  147. O_APPEND = $0010; (* writes done at end of file *)
  148. O_CREAT = $0020; (* create new file *)
  149. O_TRUNC = $0040; (* truncate existing file *)
  150. O_EXCL = $0080; (* exclusive open *)
  151. O_TEXT = $0100; (* text file--unsupported *)
  152. O_BINARY = $0200; (* binary file *)
  153. O_NDELAY = $0400; (* nonblocking flag *)
  154. O_NOCTTY = $0800; (* currently unsupported *)
  155. O_NONBLOCK = O_NDELAY;
  156. // File Utils
  157. FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'unlink';
  158. FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
  159. // Error
  160. TYPE _PLONGINT = ^LONGINT;
  161. FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib;
  162. // Memory
  163. FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'malloc';
  164. FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'realloc';
  165. PROCEDURE _free (what : POINTER); CDECL; EXTERNAL Threads NAME 'free';
  166. FUNCTION _stackavail : LONGINT; CDECL; EXTERNAL Threads NAME 'stackavail';
  167. // Debug
  168. PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger';
  169. // String
  170. FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen';
  171. // Time/Date
  172. TYPE NWTM = RECORD
  173. tm_sec, tm_min, tm_hour,
  174. tm_mday, tm_mon, tm_year,
  175. tm_wday, tm_yday, tm_isdst : LONGINT;
  176. END;
  177. PNWTM = ^NWTM;
  178. FUNCTION _localtime (VAR time : time_t) : PNWTM; CDECL; EXTERNAL Clib NAME 'localtime';
  179. FUNCTION _time (tloc : POINTER) : LONGINT; CDECL; EXTERNAL Clib NAME 'time';
  180. PROCEDURE _ConvertTimeToDOS (time : time_t; VAR DosDate, DosTime : WORD); CDECL; EXTERNAL Clib NAME '_ConvertTimeToDOS';
  181. PROCEDURE _tzset; CDECL; EXTERNAL Clib NAME 'tzset';
  182. //-----------------------------------------------------------------------
  183. CONST NWDEFCONN_HANDLE = 0;
  184. TYPE NWCONN_HANDLE = LONGINT;
  185. NWRCODE = LONGINT;
  186. NWDateAndTime = PACKED RECORD
  187. Year,Month,Day,
  188. Hour,Minute,Second,DayOfWeek : BYTE;
  189. END;
  190. PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL NitNlm NAME 'GetFileServerDateAndTime';
  191. FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD;
  192. second:WORD):longint;cdecl; EXTERNAL NitNlm Name 'SetFileServerDateAndTime';
  193. TYPE FILE_SERV_INFO = record
  194. serverName : array[0..47] of char;
  195. netwareVersion : BYTE;
  196. netwareSubVersion : BYTE;
  197. maxConnectionsSupported : WORD;
  198. connectionsInUse : WORD;
  199. maxVolumesSupported : WORD;
  200. revisionLevel : BYTE;
  201. SFTLevel : BYTE;
  202. TTSLevel : BYTE;
  203. peakConnectionsUsed : WORD;
  204. accountingVersion : BYTE;
  205. VAPversion : BYTE;
  206. queingVersion : BYTE;
  207. printServerVersion : BYTE;
  208. virtualConsoleVersion : BYTE;
  209. securityRestrictionLevel: BYTE;
  210. internetBridgeSupport : BYTE;
  211. reserved : array[0..59] of BYTE;
  212. CLibMajorVersion : BYTE;
  213. CLibMinorVersion : BYTE;
  214. CLibRevision : BYTE;
  215. end;
  216. pFILE_SERV_INFO = ^FILE_SERV_INFO;
  217. FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL NitNlm NAME 'GetServerInformation';
  218. // Directory
  219. TYPE NWDirEnt =
  220. PACKED RECORD
  221. d_attr : LONGINT;
  222. d_time : WORD; {modification time}
  223. d_date : WORD; {modification date}
  224. d_size : LONGINT; {filesize}
  225. d_ino : LONGINT; {serial number}
  226. d_dev : LONGINT; {volume number}
  227. d_cdatetime : time_t; {creation date and time}
  228. d_adatetime : time_t; {last access - files only}
  229. d_bdatetime : time_t; {last archive date and time}
  230. d_uid : LONGINT; {owner id (object id) }
  231. d_archivedID : LONGINT;
  232. d_updatedID : LONGINT;
  233. d_nameDOS : ARRAY [0..12] OF CHAR;
  234. d_inheritedRightsMask : WORD;
  235. d_originatingNameSpace: BYTE;
  236. d_ddatetime : time_t; {deleted date time}
  237. d_deletedID : LONGINT;
  238. {---- new fields starting in v4.11 ----}
  239. d_name : ARRAY [0..255] OF CHAR; { enty's namespace name }
  240. END;
  241. PNWDirEnt = ^NWDirEnt;
  242. FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'opendir_411';
  243. FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'closedir';
  244. FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'readdir';
  245. FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL NlmLib NAME 'SetReaddirAttribute';
  246. // Environment
  247. FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getenv';
  248. // Volumes
  249. FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeName';
  250. FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeNumber';
  251. FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE;
  252. VolumeName : PCHAR;
  253. VAR TotalBlocks : WORD;
  254. VAR SectorsPerBlock : WORD;
  255. VAR availableBlocks : WORD;
  256. VAR totalDirectorySlots : WORD;
  257. VAR availableDirSlots : WORD;
  258. VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeInfoWithNumber';
  259. FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetNumberOfVolumes';
  260. // Screen/Keyboad
  261. PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyToScreenMemory';
  262. PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyFromScreenMemory';
  263. FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'DisplayInputCursor';
  264. FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'HideInputCursor';
  265. FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SetPositionOfInputCursor';
  266. PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'gotoxy';
  267. FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'GetSizeOfScreen';
  268. FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'IsColorMonitor';
  269. PROCEDURE _RingTheBell; CDECL; EXTERNAL ThreadsNlm NAME 'RingTheBell';
  270. FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'SetCursorShape';
  271. FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'GetCursorShape';
  272. FUNCTION _wherex : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherex';
  273. FUNCTION _wherey : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherey';
  274. PROCEDURE _clrscr; CDECL; EXTERNAL ThreadsNlm NAME 'clrscr';
  275. FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'kbhit';
  276. FUNCTION _getch : CHAR; CDECL; EXTERNAL ThreadsNlm NAME 'getch';
  277. PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL ThreadsNlm NAME 'delay';
  278. FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetCtrlCharCheckMode';
  279. FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetAutoScreenDestructionMode';
  280. // Misc
  281. FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL ThreadsNlm NAME 'memcpy';
  282. FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'OpenLocalSemaphore';
  283. FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'WaitOnLocalSemaphore';
  284. FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SignalLocalSemaphore';
  285. FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'CloseLocalSemaphore';
  286. FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'EnterCritSec';
  287. FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'ExitCritSec';
  288. FUNCTION _SetThreadGroupID (id : longint) : longint; CDecl; EXTERNAL ThreadsNlm NAME 'SetThreadGroupID';
  289. FUNCTION _GetThreadGroupID : longint; CDecl; EXTERNAL ThreadsNlm NAME 'GetThreadGroupID';
  290. CONST _SIGTERM = 6;
  291. PROCEDURE _Signal (Sig : longint; SigFunc : pointer); CDECL; EXTERNAL Clib NAME 'signal';
  292. {
  293. $Log$
  294. Revision 1.7 2002-09-07 16:01:20 peter
  295. * old logs removed and tabs fixed
  296. Revision 1.6 2002/04/01 15:20:08 armin
  297. + unload module no longer shows: Module did not release...
  298. + check-function will no longer be removed when smartlink is on
  299. Revision 1.5 2002/03/30 09:09:47 armin
  300. + support check-function for netware
  301. Revision 1.4 2002/03/08 19:06:47 armin
  302. * Additional routines needed for MT
  303. }