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
6
Interface to netware clib
8
See the file COPYING.FPC, included in this distribution,
9
for details about the copyright.
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.
15
**********************************************************************}
19
ThreadsNlm = 'threads';
25
unsignedlong = LONGINT;
26
unsignedint = 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 *)
56
st_spare : ARRAY [0..3] OF LONGINT;
59
FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL Clib NAME 'stat_411';
60
FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL CLib NAME 'fstat_411';
62
PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free';
64
PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib;
67
PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib;
68
FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL CLib NAME 'BeginThread';
69
FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL CLib NAME 'GetThreadDataAreaPtr';
70
PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL CLib NAME 'SaveThreadDataAreaPtr';
71
PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
72
function _SuspendThread(threadID:longint):longint; cdecl;external ThreadsNlm name 'SuspendThread';
73
function _GetThreadID:longint; cdecl;external ThreadsNlm name 'GetThreadID';
74
procedure _ThreadSwitchWithDelay; cdecl;external ThreadsNlm name 'ThreadSwitchWithDelay';
75
function _GetThreadName(threadID:longint; var tName):longint; cdecl;external ThreadsNlm name 'GetThreadName';
76
function GetNLMHandle:dword; cdecl;external ThreadsNlm name 'GetNLMHandle';
78
PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
79
PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : pchar); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
80
PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
81
PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
82
PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3,P4 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
83
PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
85
// this gives internal compiler error 1234124 ??
86
//PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
88
PROCEDURE _printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib;
89
PROCEDURE _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;
93
// values for __action_code used with ExitThread()
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.
100
FUNCTION _GetStdIn : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdin'; // result: **FILE
101
FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout';
102
FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr';
105
FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'open';
106
FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'close';
107
FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'lseek';
108
FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'chsize';
109
FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'tell';
110
FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'write';
111
FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'read';
112
FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'filelength';
113
FUNCTION _lock (filedes : LONGINT; Offset, Length : Cardinal) : LONGINT; CDECL; EXTERNAL Clib NAME 'lock';
114
FUNCTION _unlock (filedes : LONGINT; Offset, Length : Cardinal) : LONGINT; CDECL; EXTERNAL Clib NAME 'unlock';
120
MFileAttributes : LONGINT;
121
MFileAttributesMask : 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
138
CONST MModifyNameBit = $0001;
139
MFileAtrributesBit = $0002;
140
MCreateDateBit = $0004;
141
MCreateTimeBit = $0008;
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;
155
FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'chdir';
156
FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL CLib NAME 'getcwd';
157
FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'mkdir';
158
FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'rmdir';
159
FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'ChangeDirectoryEntry';
161
// get fileno from stream
162
FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno';
163
FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'isatty';
165
(* values for 'o_flag' in open()... *)
166
CONST 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;
182
FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'unlink';
183
FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
186
TYPE _PLONGINT = ^LONGINT;
187
FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib;
190
FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'malloc';
191
FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL CLib NAME 'realloc';
192
PROCEDURE _free (what : POINTER); CDECL; EXTERNAL CLib NAME 'free';
193
FUNCTION _stackavail : CARDINAL; CDECL; EXTERNAL CLib NAME 'stackavail';
196
PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger';
199
FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen';
203
tm_sec, tm_min, tm_hour,
204
tm_mday, tm_mon, tm_year,
205
tm_wday, tm_yday, tm_isdst : LONGINT;
208
FUNCTION _localtime (VAR time : time_t) : PNWTM; CDECL; EXTERNAL Clib NAME 'localtime';
209
FUNCTION _time (tloc : POINTER) : LONGINT; CDECL; EXTERNAL Clib NAME 'time';
210
PROCEDURE _ConvertTimeToDOS (time : time_t; VAR DosDate, DosTime : WORD); CDECL; EXTERNAL Clib NAME '_ConvertTimeToDOS';
211
PROCEDURE _tzset; CDECL; EXTERNAL Clib NAME 'tzset';
214
//-----------------------------------------------------------------------
216
CONST NWDEFCONN_HANDLE = 0;
218
TYPE NWCONN_HANDLE = LONGINT;
220
NWDateAndTime = PACKED RECORD
222
Hour,Minute,Second,DayOfWeek : BYTE;
225
PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL CLib NAME 'GetFileServerDateAndTime';
226
FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD;
227
second:WORD):longint;cdecl; EXTERNAL CLib Name 'SetFileServerDateAndTime';
229
TYPE 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;
239
peakConnectionsUsed : WORD;
240
accountingVersion : 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;
252
pFILE_SERV_INFO = ^FILE_SERV_INFO;
254
FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL CLib NAME 'GetServerInformation';
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 }
279
PNWDirEnt = ^NWDirEnt;
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';
287
FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL CLib NAME 'getenv';
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;
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';
303
PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL Clib NAME 'CopyToScreenMemory';
304
PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL CLib NAME 'CopyFromScreenMemory';
305
FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'DisplayInputCursor';
306
FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL CLib NAME 'HideInputCursor';
307
FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL Clib NAME 'SetPositionOfInputCursor';
308
PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL Clib NAME 'gotoxy';
309
FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL CLib NAME 'GetSizeOfScreen';
310
FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL CLib NAME 'IsColorMonitor';
311
PROCEDURE _RingTheBell; CDECL; EXTERNAL CLib NAME 'RingTheBell';
312
FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'SetCursorShape';
313
FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL CLib NAME 'GetCursorShape';
314
FUNCTION _wherex : WORD; CDECL; EXTERNAL CLib NAME 'wherex';
315
FUNCTION _wherey : WORD; CDECL; EXTERNAL CLib NAME 'wherey';
316
PROCEDURE _clrscr; CDECL; EXTERNAL CLib NAME 'clrscr';
317
FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL Clib NAME 'kbhit';
318
FUNCTION _getch : CHAR; CDECL; EXTERNAL CLib NAME 'getch';
319
PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL Clib NAME 'delay';
320
FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetCtrlCharCheckMode';
321
FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetAutoScreenDestructionMode';
324
FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL Clib NAME 'memcpy';
326
FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'OpenLocalSemaphore';
327
FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'WaitOnLocalSemaphore';
328
FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'SignalLocalSemaphore';
329
FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'CloseLocalSemaphore';
330
FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'EnterCritSec';
331
FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL CLib NAME 'ExitCritSec';
334
FUNCTION _SetThreadGroupID (id : longint) : longint; CDecl; EXTERNAL CLib NAME 'SetThreadGroupID';
335
FUNCTION _GetThreadGroupID : longint; CDecl; EXTERNAL CLib NAME 'GetThreadGroupID';
339
PROCEDURE _Signal (Sig : longint; SigFunc : pointer); CDECL; EXTERNAL Clib NAME 'signal';
341
FUNCTION _SetCurrentNameSpace (newNameSpace : BYTE) : BYTE; CDECL; EXTERNAL Clib NAME 'SetCurrentNameSpace';
342
FUNCTION _SetTargetNameSpace (newNameSpace : BYTE) : BYTE; CDECL; EXTERNAL Clib NAME 'SetTargetNameSpace';
351
function _NWAddSearchPathAtEnd (searchPath : pchar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd';
352
function _NWDeleteSearchPath (searchPathNumber : longint) : longint; cdecl; external Clib name 'NWDeleteSearchPath';
353
function _NWInsertSearchPath (searchPathNumber : longint; path : pchar) : longint; cdecl; external Clib name 'NWInsertSearchPath';
354
function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : pchar) : longint; cdecl; external Clib name 'NWGetSearchPathElement';
357
// values for __mode used with spawnxx()
363
P_SPAWN_IN_CURRENT_DOMAIN = 8;
366
//function spawnlp(mode:longint; path:Pchar; arg0:Pchar; args:array of const):longint;cdecl;external CLib name 'spawnlp';
367
function spawnlp(mode:longint; path:Pchar; arg0:Pchar):longint;cdecl;external Clib name 'spawnlp';
368
function spawnvp(mode:longint; path:Pchar; argv:PPchar):longint;cdecl;external Clib name 'spawnvp';