1{ 2 This file is part of the Free Pascal run time library. 3 Copyright (c) 1999-2004 by the Free Pascal development team 4 Copyright (c) 2001-2004 Armin Diehl 5 6 Interface to netware clib 7 8 See the file COPYING.FPC, included in this distribution, 9 for details about the copyright. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 15 **********************************************************************} 16 17 18CONST Clib = 'clib'; 19 ThreadsNlm = 'threads'; 20 21TYPE 22 dev_t = LONGINT; 23 ino_t = LONGINT; 24 unsignedshort = WORD; 25 unsignedlong = LONGINT; 26 unsignedint = LONGINT; 27 off_t = LONGINT; 28 size_t = LONGINT; 29 time_t = LONGINT; 30 NWStatBufT = PACKED RECORD 31 st_dev : dev_t; (* volume number *) 32 st_ino : ino_t; (* directory entry number of the st_name *) 33 st_mode : unsignedshort; (* emulated file mode *) 34 st_nlink : unsignedshort; (* count of hard links (always 1) *) 35 st_uid : unsignedlong; (* object id of owner *) 36 st_gid : unsignedshort; (* group-id (always 0) *) 37 st_rdev : dev_t; (* device type (always 0) *) 38 st_size : off_t; (* total file size--files only *) 39 st_atime : time_t; (* last access date--files only *) 40 st_mtime : time_t; (* last modify date and time *) 41 st_ctime : time_t; (* POSIX: last status change time... *) 42 (* ...NetWare: creation date/time *) 43 st_btime : time_t; (* last archived date and time *) 44 st_attr : unsignedlong; (* file attributes *) 45 st_archivedID : unsignedlong; (* user/object ID of last archive *) 46 st_updatedID : unsignedlong; (* user/object ID of last update *) 47 st_inheritedRightsMask 48 : unsignedshort; (* inherited rights mask *) 49 st_originatingNameSpace 50 : BYTE; (* namespace of creation *) 51 st_name : ARRAY [0..255] OF CHAR; 52 (* TARGET_NAMESPACE name *) 53 st_blksize : LONGINT; 54 st_blocks : LONGINT; 55 st_flags : LONGINT; 56 st_spare : ARRAY [0..3] OF LONGINT; 57 END; 58 59FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL Clib NAME 'stat_411'; 60FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL CLib NAME 'fstat_411'; 61 62PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free'; 63 64PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib; 65 66 67PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib; 68FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL CLib NAME 'BeginThread'; 69FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL CLib NAME 'GetThreadDataAreaPtr'; 70PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL CLib NAME 'SaveThreadDataAreaPtr'; 71PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib; 72function _SuspendThread(threadID:longint):longint; cdecl;external ThreadsNlm name 'SuspendThread'; 73function _GetThreadID:longint; cdecl;external ThreadsNlm name 'GetThreadID'; 74procedure _ThreadSwitchWithDelay; cdecl;external ThreadsNlm name 'ThreadSwitchWithDelay'; 75function _GetThreadName(threadID:longint; var tName):longint; cdecl;external ThreadsNlm name 'GetThreadName'; 76function GetNLMHandle:dword; cdecl;external ThreadsNlm name 'GetNLMHandle'; 77(* 78PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 79PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : pchar); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 80PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 81PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 82PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3,P4 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 83PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf'; 84*) 85// this gives internal compiler error 1234124 ?? 86//PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib; 87 88PROCEDURE _printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib; 89PROCEDURE _printf (FormatStr : PCHAR); CDecl; EXTERNAL CLib; 90// this gives internet compiler error 1234124 ?? 91// PROCEDURE _printf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib; 92 93// values for __action_code used with ExitThread() 94CONST 95 TSR_THREAD = -1; //-Terminate only the current thread. 96 EXIT_THREAD = 0; //-Terminate the current thread; if the current thread is 97 // also the last thread, terminate the NLM. 98 EXIT_NLM = 1; //-Terminate the entire NLM. 99 100FUNCTION _GetStdIn : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdin'; // result: **FILE 101FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout'; 102FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr'; 103 104// FileIO by Fileno 105FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'open'; 106FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'close'; 107FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'lseek'; 108FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'chsize'; 109FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'tell'; 110FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'write'; 111FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'read'; 112FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'filelength'; 113FUNCTION _lock (filedes : LONGINT; Offset, Length : Cardinal) : LONGINT; CDECL; EXTERNAL Clib NAME 'lock'; 114FUNCTION _unlock (filedes : LONGINT; Offset, Length : Cardinal) : LONGINT; CDECL; EXTERNAL Clib NAME 'unlock'; 115 116TYPE 117 NWModifyStructure = 118 RECORD 119 MModifyName : PCHAR; 120 MFileAttributes : LONGINT; 121 MFileAttributesMask : LONGINT; 122 MCreateDate : WORD; 123 MCreateTime : WORD; 124 MOwnerID : LONGINT; 125 MLastArchivedDate : WORD; 126 MLastArchivedTime : WORD; 127 MLastArchivedID : LONGINT; 128 MLastUpdatedDate : WORD; 129 MLastUpdatedTime : WORD; 130 MLastUpdatedID : LONGINT; 131 MLastAccessedDate : WORD; 132 MInheritanceGrantMask : WORD; 133 MInheritanceRevokeMask : WORD; 134 MMaximumSpace : LONGINT; 135 MLastUpdatedInSeconds : LONGINT 136 END; 137 138CONST MModifyNameBit = $0001; 139 MFileAtrributesBit = $0002; 140 MCreateDateBit = $0004; 141 MCreateTimeBit = $0008; 142 MOwnerIDBit = $0010; 143 MLastArchivedDateBit = $0020; 144 MLastArchivedTimeBit = $0040; 145 MLastArchivedIDBit = $0080; 146 MLastUpdatedDateBit = $0100; 147 MLastUpdatedTimeBit = $0200; 148 MLastUpdatedIDBit = $0400; 149 MLastAccessedDateBit = $0800; 150 MInheritanceRestrictionMaskBit = $1000; 151 MMaximumSpaceBit = $2000; 152 MLastUpdatedInSecondsBit = $4000; 153 154// Directory 155FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'chdir'; 156FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL CLib NAME 'getcwd'; 157FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'mkdir'; 158FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'rmdir'; 159FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'ChangeDirectoryEntry'; 160 161// get fileno from stream 162FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno'; 163FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'isatty'; 164 165(* values for 'o_flag' in open()... *) 166CONST O_RDONLY = $0000; (* open for read only *) 167 O_WRONLY = $0001; (* open for write only *) 168 O_RDWR = $0002; (* open for read and write *) 169 O_ACCMODE = $0003; (* AND with value to extract access flags *) 170 O_APPEND = $0010; (* writes done at end of file *) 171 O_CREAT = $0020; (* create new file *) 172 O_TRUNC = $0040; (* truncate existing file *) 173 O_EXCL = $0080; (* exclusive open *) 174 O_TEXT = $0100; (* text file--unsupported *) 175 O_BINARY = $0200; (* binary file *) 176 O_NDELAY = $0400; (* nonblocking flag *) 177 O_NOCTTY = $0800; (* currently unsupported *) 178 O_NONBLOCK = O_NDELAY; 179 180 181// File Utils 182FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'unlink'; 183FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename'; 184 185// Error 186TYPE _PLONGINT = ^LONGINT; 187FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib; 188 189// Memory 190FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'malloc'; 191FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'realloc'; 192PROCEDURE _free (what : POINTER); CDECL; EXTERNAL CLib NAME 'free'; 193FUNCTION _stackavail : CARDINAL; CDECL; EXTERNAL CLib NAME 'stackavail'; 194 195// Debug 196PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger'; 197 198// String 199FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen'; 200 201// Time/Date 202TYPE NWTM = RECORD 203 tm_sec, tm_min, tm_hour, 204 tm_mday, tm_mon, tm_year, 205 tm_wday, tm_yday, tm_isdst : LONGINT; 206 END; 207 PNWTM = ^NWTM; 208FUNCTION _localtime (VAR time : time_t) : PNWTM; CDECL; EXTERNAL Clib NAME 'localtime'; 209FUNCTION _time (tloc : POINTER) : LONGINT; CDECL; EXTERNAL Clib NAME 'time'; 210PROCEDURE _ConvertTimeToDOS (time : time_t; VAR DosDate, DosTime : WORD); CDECL; EXTERNAL Clib NAME '_ConvertTimeToDOS'; 211PROCEDURE _tzset; CDECL; EXTERNAL Clib NAME 'tzset'; 212 213 214//----------------------------------------------------------------------- 215 216CONST NWDEFCONN_HANDLE = 0; 217 218TYPE NWCONN_HANDLE = LONGINT; 219 NWRCODE = LONGINT; 220 NWDateAndTime = PACKED RECORD 221 Year,Month,Day, 222 Hour,Minute,Second,DayOfWeek : BYTE; 223 END; 224 225PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL CLib NAME 'GetFileServerDateAndTime'; 226FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD; 227 second:WORD):longint;cdecl; EXTERNAL CLib Name 'SetFileServerDateAndTime'; 228 229TYPE FILE_SERV_INFO = record 230 serverName : array[0..47] of char; 231 netwareVersion : BYTE; 232 netwareSubVersion : BYTE; 233 maxConnectionsSupported : WORD; 234 connectionsInUse : WORD; 235 maxVolumesSupported : WORD; 236 revisionLevel : BYTE; 237 SFTLevel : BYTE; 238 TTSLevel : BYTE; 239 peakConnectionsUsed : WORD; 240 accountingVersion : BYTE; 241 VAPversion : BYTE; 242 queingVersion : BYTE; 243 printServerVersion : BYTE; 244 virtualConsoleVersion : BYTE; 245 securityRestrictionLevel: BYTE; 246 internetBridgeSupport : BYTE; 247 reserved : array[0..59] of BYTE; 248 CLibMajorVersion : BYTE; 249 CLibMinorVersion : BYTE; 250 CLibRevision : BYTE; 251 end; 252 pFILE_SERV_INFO = ^FILE_SERV_INFO; 253 254FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL CLib NAME 'GetServerInformation'; 255 256// Directory 257TYPE NWDirEnt = 258 PACKED RECORD 259 d_attr : LONGINT; 260 d_time : WORD; {modification time} 261 d_date : WORD; {modification date} 262 d_size : LONGINT; {filesize} 263 d_ino : LONGINT; {serial number} 264 d_dev : LONGINT; {volume number} 265 d_cdatetime : time_t; {creation date and time} 266 d_adatetime : time_t; {last access - files only} 267 d_bdatetime : time_t; {last archive date and time} 268 d_uid : LONGINT; {owner id (object id) } 269 d_archivedID : LONGINT; 270 d_updatedID : LONGINT; 271 d_nameDOS : ARRAY [0..12] OF CHAR; 272 d_inheritedRightsMask : WORD; 273 d_originatingNameSpace: BYTE; 274 d_ddatetime : time_t; {deleted date time} 275 d_deletedID : LONGINT; 276 {---- new fields starting in v4.11 ----} 277 d_name : ARRAY [0..255] OF CHAR; { enty's namespace name } 278 END; 279 PNWDirEnt = ^NWDirEnt; 280 281 FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'opendir_411'; 282 FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL CLib NAME 'closedir'; 283 FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'readdir'; 284 FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL CLib NAME 'SetReaddirAttribute'; 285 286// Environment 287 FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL CLib NAME 'getenv'; 288 289// Volumes 290 FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeName'; 291 FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeNumber'; 292 FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE; 293 VolumeName : PCHAR; 294 VAR TotalBlocks : WORD; 295 VAR SectorsPerBlock : WORD; 296 VAR availableBlocks : WORD; 297 VAR totalDirectorySlots : WORD; 298 VAR availableDirSlots : WORD; 299 VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeInfoWithNumber'; 300 FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL CLib NAME 'GetNumberOfVolumes'; 301 302// Screen/Keyboad 303PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL Clib NAME 'CopyToScreenMemory'; 304PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL CLib NAME 'CopyFromScreenMemory'; 305FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'DisplayInputCursor'; 306FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'HideInputCursor'; 307FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL Clib NAME 'SetPositionOfInputCursor'; 308PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL Clib NAME 'gotoxy'; 309FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL CLib NAME 'GetSizeOfScreen'; 310FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL CLib NAME 'IsColorMonitor'; 311PROCEDURE _RingTheBell; CDECL; EXTERNAL CLib NAME 'RingTheBell'; 312FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'SetCursorShape'; 313FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'GetCursorShape'; 314FUNCTION _wherex : WORD; CDECL; EXTERNAL CLib NAME 'wherex'; 315FUNCTION _wherey : WORD; CDECL; EXTERNAL CLib NAME 'wherey'; 316PROCEDURE _clrscr; CDECL; EXTERNAL CLib NAME 'clrscr'; 317FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL Clib NAME 'kbhit'; 318FUNCTION _getch : CHAR; CDECL; EXTERNAL CLib NAME 'getch'; 319PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL Clib NAME 'delay'; 320FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetCtrlCharCheckMode'; 321FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetAutoScreenDestructionMode'; 322 323// Misc 324FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL Clib NAME 'memcpy'; 325 326FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'OpenLocalSemaphore'; 327FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'WaitOnLocalSemaphore'; 328FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'SignalLocalSemaphore'; 329FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'CloseLocalSemaphore'; 330FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'EnterCritSec'; 331FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'ExitCritSec'; 332 333 334FUNCTION _SetThreadGroupID (id : longint) : longint; CDecl; EXTERNAL CLib NAME 'SetThreadGroupID'; 335FUNCTION _GetThreadGroupID : longint; CDecl; EXTERNAL CLib NAME 'GetThreadGroupID'; 336 337CONST _SIGTERM = 6; 338 339PROCEDURE _Signal (Sig : longint; SigFunc : pointer); CDECL; EXTERNAL Clib NAME 'signal'; 340 341FUNCTION _SetCurrentNameSpace (newNameSpace : BYTE) : BYTE; CDECL; EXTERNAL Clib NAME 'SetCurrentNameSpace'; 342FUNCTION _SetTargetNameSpace (newNameSpace : BYTE) : BYTE; CDECL; EXTERNAL Clib NAME 'SetTargetNameSpace'; 343 344CONST 345 NW_NS_DOS = 0; 346 NW_NS_MAC = 1; 347 NW_NS_NFS = 2; 348 NW_NS_FTAM = 3; 349 NW_NS_LONG = 4; 350 351function _NWAddSearchPathAtEnd (searchPath : pchar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd'; 352function _NWDeleteSearchPath (searchPathNumber : longint) : longint; cdecl; external Clib name 'NWDeleteSearchPath'; 353function _NWInsertSearchPath (searchPathNumber : longint; path : pchar) : longint; cdecl; external Clib name 'NWInsertSearchPath'; 354function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : pchar) : longint; cdecl; external Clib name 'NWGetSearchPathElement'; 355 356 357// values for __mode used with spawnxx() 358CONST 359 P_WAIT = 0; 360 P_NOWAIT = 1; 361 P_OVERLAY = 2; 362 P_NOWAITO = 4; 363 P_SPAWN_IN_CURRENT_DOMAIN = 8; 364 365 366//function spawnlp(mode:longint; path:Pchar; arg0:Pchar; args:array of const):longint;cdecl;external CLib name 'spawnlp'; 367function spawnlp(mode:longint; path:Pchar; arg0:Pchar):longint;cdecl;external Clib name 'spawnlp'; 368function spawnvp(mode:longint; path:Pchar; argv:PPchar):longint;cdecl;external Clib name 'spawnvp'; 369 370 371 372