Bläddra i källkod

* exiting threads at nlm unload

armin 21 år sedan
förälder
incheckning
0f1fec0de1

+ 3 - 3
rtl/netware/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 1.1 [2004/09/16]
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/09/22]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=netware
 MAKEFILETARGETS=netware
@@ -225,8 +225,8 @@ else
 SYSTEMUNIT=sysnetwa
 SYSTEMUNIT=sysnetwa
 endif
 endif
 override FPCOPT+=-Ur
 override FPCOPT+=-Ur
-override FPCOPT+=-dMT -dDEBUG_MT
-CREATESMART=0
+override FPCOPT+=-dMT
+CREATESMART=1
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas macpas strings lineinfo winsock heaptrc matrix initc dos crt objects sysutils classes typinfo math varutils cpu mmx getopts   sockets video mouse keyboard types dateutils rtlconst sysconst strutils convutils aio nwsnut nwserv nwnit nwprot
 override TARGET_UNITS+=$(SYSTEMUNIT) systhrds objpas macpas strings lineinfo winsock heaptrc matrix initc dos crt objects sysutils classes typinfo math varutils cpu mmx getopts   sockets video mouse keyboard types dateutils rtlconst sysconst strutils convutils aio nwsnut nwserv nwnit nwprot
 override TARGET_LOADERS+=nwpre prelude
 override TARGET_LOADERS+=nwpre prelude

+ 2 - 3
rtl/netware/Makefile.fpc

@@ -60,11 +60,10 @@ override FPCOPT+=-Ur
 
 
 
 
 # for netware always use multithread
 # for netware always use multithread
-override FPCOPT+=-dMT -dDEBUG_MT
+override FPCOPT+=-dMT
 
 
 # and alway use smartlinking
 # and alway use smartlinking
-#CREATESMART=1
-CREATESMART=0
+CREATESMART=1
 
 
 # Paths
 # Paths
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas

+ 11 - 1
rtl/netware/classes.pp

@@ -38,10 +38,20 @@ implementation
 { OS - independent class implementations are in /inc directory. }
 { OS - independent class implementations are in /inc directory. }
 {$i classes.inc}
 {$i classes.inc}
 
 
+initialization
+  CommonInit;
+
+finalization
+  DoneThreads;
+  CommonCleanup;
+
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.4  2004-08-01 20:02:48  armin
+  Revision 1.5  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.4  2004/08/01 20:02:48  armin
   * changed dir separator from \ to /
   * changed dir separator from \ to /
   * long namespace by default
   * long namespace by default
   * dos.exec implemented
   * dos.exec implemented

+ 4 - 1
rtl/netware/clib.imp

@@ -1929,5 +1929,8 @@
  y1,
  y1,
  YearsSince1970,
  YearsSince1970,
  yn,
  yn,
- __ZBuf2F
+ __ZBuf2F,
+# GetKey,UnGetKey from server.nlm (or syscalls)
+ GetKey,
+ UngetKey
 
 

+ 4894 - 4821
rtl/netware/nwserv.pp

@@ -1,4829 +1,4902 @@
-{ $Id$
-
-  Netware Server Imports for FreePascal, contains definition from the
-  following header files:
-
-  string.h dirent.h errno.h fcntl.h limits.h locale.h nwaudnlm.h
-  nwbitops.h nwcntask.h nwconio.h nwconn.h nwdebug.h nwdfs.h nwdos.h
-  nwerrno.h nwfattr.h nwfileio.h nwfileng.h nwfinfo.h nwfshook.h
-  nwipx.h nwlib.h nwlocale.h nwmalloc.h nwncpx.h nwnspace.h nwproc.h
-  nwsemaph.h nwserv.h nwsignal.h nwstring.h nwtoolib.h stdio.h stdlib.h
-  unistd.h time.h utime.h nwthread.h nwmediam.h ioctl.h
-  sys/socket.h sys/time.h sys/filio.h syys/ioctl.h sys/stat.h
-  sys/time.h sys/timeval.h sys/uio.h sys/utsname.h
-
-  Initial Version 2002/02/22 Armin ([email protected])
-
-  The C-NDK and Documentation can be found here:
-    http://developer.novell.com
-
-  This program is distributed in the hope that it will be useful,but WITHOUT 
-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
-  FITNESS FOR A PARTICULAR PURPOSE.
-
-  Do not blame Novell if there are errors in this file, instead
-  contact me and i will se what i can do.
-
-}
-
-unit nwserv;
-
-interface
-
-{$mode objfpc}
-
-const NULL = 0;
-      ThreadsNlm = 'threads';
-      Lib0Nlm    = 'lib0';
-      NlmLibNlm  = 'nlmlib';
-      FIONREAD   = 1;  // get count of bytes to read (readable)
-      FIONBIO    = 2;  // set/clear nonblocking I/O
-      FIOGETNBIO = 3;  // get nonblocking I/O status
-
-type
-   Psize_t = ^Tsize_t;
-   Tsize_t = dword;
-   PPChar = ^PChar;
-   PPPChar= ^PPChar;
-   Tsigset_t = longint;
-
-{-time.h-----------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-const
-   CLOCKS_PER_SEC = 100;
-
-type
-   Pclock_t = ^Tclock_t;
-   Tclock_t = dword;
-
-   Ptime_t = ^Ttime_t;
-   Ttime_t = dword;
-{ seconds after the minute--range [0, 59]      }
-{ minutes after the hour--range [0, 59]        }
-{ hours since midnight--range [0, 23]          }
-{ days of the month--range [1, 31]             }
-{ months since January--range [0, 11]          }
-{ years since 1900--range [0, 99]              }
-{ days since Sunday--range [0, 6]              }
-{ days since first of January--range [0, 365]  }
-{ Daylight Savings Time flag--set [-, 0, +]:   }
-   Ptm = ^Ttm;
-   Ttm = record
-        tm_sec : longint;
-        tm_min : longint;
-        tm_hour : longint;
-        tm_mday : longint;
-        tm_mon : longint;
-        tm_year : longint;
-        tm_wday : longint;
-        tm_yday : longint;
-        tm_isdst : longint;
-     end;
-     
-{ ISO/ANSI C functions...  }
-function asctime(para1:Ptm):Pchar;cdecl;external 'clib' name 'asctime';
-function clock:Tclock_t;cdecl;external 'clib' name 'clock';
-function ctime(para1:Ptime_t):Pchar;cdecl;external 'clib' name 'ctime';
-function difftime(para1:Ttime_t; para2:Ttime_t):double;cdecl;external 'clib' name 'difftime';
-function gmtime(para1:Ptime_t):Ptm;cdecl;external 'clib' name 'gmtime';
-function localtime(para1:Ptime_t):Ptm;cdecl;external 'clib' name 'localtime';
-function mktime(para1:Ptm):Ttime_t;cdecl;external 'clib' name 'mktime';
-function strftime(para1:Pchar; para2:Tsize_t; para3:Pchar; para4:Ptm):Tsize_t;cdecl;external 'clib' name 'strftime';
-function time(para1:Ptime_t):Ttime_t;cdecl;external 'clib' name 'time';
-{ POSIX data and functions...  }
-{ For extern char tzname[2], see macro below  }
-procedure tzset;cdecl;external 'clib' name 'tzset';
-function __get_CLK_TCK:Tclock_t;cdecl;external 'clib' name '__get_CLK_TCK';
-function __get_tzname:pPchar;cdecl;external 'clib' name '__get_tzname';
-{ POSIX-defined additions ...  }
-function asctime_r(para1:Ptm; para2:Pchar):Pchar;cdecl;external 'clib' name 'asctime_r';
-function ctime_r(para1:Ptime_t; para2:Pchar):Pchar;cdecl;external 'clib' name 'ctime_r';
-function gmtime_r(para1:Ptime_t; para2:Ptm):Ptm;cdecl;external 'clib' name 'gmtime_r';
-function localtime_r(para1:Ptime_t; para2:Ptm):Ptm;cdecl;external 'clib' name 'localtime_r';
-function CLK_TCK : longint;
-function tzname : pchar;
-
-{-utime.h----------------------------------------------------------------------}
-type
-   Putimbuf = ^Tutimbuf;
-   Tutimbuf = record
-      actime  : Ttime_t;   // access time
-      modtime : Ttime_t;   // modification time
-   end;
-
-
-function utime(path:Pchar; times:Putimbuf):longint;cdecl;external 'clib' name 'utime';
-function utime(path:Pchar; var times:Tutimbuf):longint;cdecl;external 'clib' name 'utime';
-
-{-string.h---------------------------------------------------------------------}
-function memchr(para1:pointer; para2:longint; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memchr';
-function memcmp(para1:pointer; para2:pointer; para3:Tsize_t):longint;cdecl;external 'clib' name 'memcmp';
-function memcpy(para1:pointer; para2:pointer; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memcpy';
-function memmove(para1:pointer; para2:pointer; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memmove';
-function memset(para1:pointer; para2:longint; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memset';
-function strcpy(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strcpy';
-function strcat(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strcat';
-function strchr(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strchr';
-function strcmp(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcmp';
-function strcoll(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcoll';
-function strcspn(para1:Pchar; para2:Pchar):Tsize_t;cdecl;external 'clib' name 'strcspn';
-function strerror(para1:longint):Pchar;cdecl;external 'clib' name 'strerror';
-function strlen(para1:Pchar):Tsize_t;cdecl;external 'clib' name 'strlen';
-function strncat(para1:Pchar; para2:Pchar; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strncat';
-function strncmp(para1:Pchar; para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'strncmp';
-function strncpy(para1:Pchar; para2:Pchar; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strncpy';
-function strpbrk(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strpbrk';
-function strrchr(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strrchr';
-function strspn(para1:Pchar; para2:Pchar):Tsize_t;cdecl;external 'clib' name 'strspn';
-function strstr(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strstr';
-function strtok(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strtok';
-function strxfrm(para1:Pchar; para2:Pchar; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'strxfrm';
-function strtok_r(para1:Pchar; para2:Pchar; para3:PPchar):Pchar;cdecl;external 'clib' name 'strtok_r';
-function memicmp(para1:pointer; para2:pointer; para3:Tsize_t):longint;cdecl;external 'clib' name 'memicmp';
-function strcmpi(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcmpi';
-function stricmp(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'stricmp';
-function strdup(para1:Pchar):Pchar;cdecl;external 'clib' name 'strdup';
-function strlist(para1,para2:Pchar; args:array of const):Pchar;cdecl;external 'clib' name 'strlist';
-function strlist(para1,para2:Pchar):Pchar;cdecl;external 'clib' name 'strlist';
-function strlwr(para1:Pchar):Pchar;cdecl;external 'clib' name 'strlwr';
-function strnicmp(para1,para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'strnicmp';
-function strnset(para1:Pchar; para2:longint; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strnset';
-function strrev(para1:Pchar):Pchar;cdecl;external 'clib' name 'strrev';
-function strset(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strset';
-function strupr(para1:Pchar):Pchar;cdecl;external 'clib' name 'strupr';
-procedure swab(para1:pointer; para2:pointer; para3:Tsize_t);cdecl;external 'clib' name 'swab';
-procedure swaw(para1:pointer; para2:pointer; para3:Tsize_t);cdecl;external 'clib' name 'swaw';
-{-dirent.h---------------------------------------------------------------------}
-{$I npackon.inc}
-type
-   Pino_t = ^Tino_t;
-   Tino_t = longint;
-   Pdev_t = ^Tdev_t;
-   Tdev_t = longint;
-   Pdirent = ^Tdirent;
-   Tdirent =
-   record
-     d_attr                 : dword;
-     d_time                 : word;
-     d_date                 : word;
-     d_size                 : longint;
-     d_ino                  : Tino_t;
-     d_dev                  : Tdev_t;
-     d_cdatetime            : dword;
-     d_adatetime            : dword;
-     d_bdatetime            : dword;
-     d_uid                  : longint;
-     d_archivedID           : dword;
-     d_updatedID            : dword;
-     d_nameDOS              : array[0..12] of char;
-     d_inheritedRightsMask  : word;
-     d_originatingNameSpace : byte;
-     d_ddatetime            : dword;
-     d_deletedID            : dword;
-     d_name                 : array[0..255] of char;
-   end;
-   TDIR = Tdirent;
-   PDIR = ^TDIR;
-{$I npackoff.inc}
-
-function closedir_old (dirp:PDIR):longint;                            cdecl; external 'clib' name 'closedir';
-function closedir     (dirp:PDIR):longint;                            cdecl; external 'clib' name 'closedir_510';
-function opendir_old  (pathName:Pchar):PDIR;                          cdecl; external 'clib' name 'opendir';
-function opendir      (pathName:Pchar):PDIR;                          cdecl; external 'clib' name 'opendir_411';
-function readdir_old  (dirp:PDIR):PDIR;                               cdecl; external 'clib' name 'readdir';
-function readdir      (dirp:PDIR):PDIR;                               cdecl; external 'clib' name 'readdir_411';
-procedure rewinddir   (dirp:PDIR);                                    cdecl; external 'clib' name 'rewinddir';
-function SetReaddirAttribute(dirp:PDIR; newAttribute:dword):longint;  cdecl; external 'clib' name 'SetReaddirAttribute';
-{-errno.h----------------------------------------------------------------------}
-const
-   ENOENT   = 1;
-   E2BIG    = 2;
-   ENOEXEC  = 3;
-   EBADF    = 4;
-   ENOMEM   = 5;
-   EACCES   = 6;
-   EEXIST   = 7;
-   EXDEV    = 8;
-   EINVAL   = 9;
-   ENFILE   = 10;
-   EMFILE   = 11;
-   ENOSPC   = 12;
-   EDOM     = 13;
-   ERANGE   = 14;
-   EDEADLK  = 15;
-   EINUSE   = 16;
-   ESERVER  = 17;
-   ENOSERVR = 18;
-   EWRNGKND = 19;
-   ETRNREST = 20;
-   ERESOURCE= 21;
-   EBADHNDL = 22;
-   ENO_SCRNS= 23;
-   EAGAIN   = 24;
-   ENXIO    = 25;
-   EBADMSG  = 26;
-   EFAULT   = 27;
-   EIO      = 28;
-   ENODATA  = 29;
-   ENOSTRMS = 30;
-   EPROTO   = 31;
-   EPIPE    = 32;
-   ESPIPE   = 33;
-   ETIME    = 34;
-   EWOULDBLOCK = 35;
-   EINPROGRESS = 36;
-   EALREADY = 37;
-   ENOTSOCK = 38;
-   EDESTADDRREQ = 39;
-   EMSGSIZE        = 40;
-   EPROTOTYPE      = 41;
-   ENOPROTOOPT     = 42;
-   EPROTONOSUPPORT = 43;
-   ESOCKTNOSUPPORT = 44;
-   EOPNOTSUPP = 45;
-   EPFNOSUPPORT = 46;
-   EAFNOSUPPORT = 47;
-   EADDRINUSE = 48;
-   EADDRNOTAVAIL = 49;
-   ENETDOWN = 50;
-   ENETUNREACH = 51;
-   ENETRESET = 52;
-   ECONNABORTED = 53;
-   ECONNRESET = 54;
-   ENOBUFS = 55;
-   EISCONN = 56;
-   ENOTCONN = 57;
-   ESHUTDOWN = 58;
-   ETOOMANYREFS = 59;
-   ETIMEDOUT = 60;
-   ECONNREFUSED = 61;
-
-   EBUSY = 62;
-   EINTR = 63;
-   EISDIR = 64;
-   ENAMETOOLONG = 65;
-   ENOSYS = 66;
-   ENOTDIR = 67;
-   ENOTEMPTY = 68;
-   EPERM = 69;
-   ECHILD = 70;
-   EFBIG = 71;
-   EMLINK = 72;
-   ENODEV = 73;
-   ENOLCK = 74;
-   ENOTTY = 75;
-   EFTYPE = ENOTTY;
-   EROFS = 76;
-   ESRCH = 77;
-   ECANCELED = 78;
-   ENOTSUP = 79;
-
-   // CLib-implementation-specific constants
-   ECANCELLED = ECANCELED;
-   ENLMDATA = 100;
-   EILSEQ = 101;
-   EINCONSIS = 102;
-   EDOSTEXTEOL = 103;
-   ENONEXTANT = 104;
-   ENOCONTEXT = 105;
-   ELASTERR = ENOCONTEXT;
-{-nwerrno.h--------------------------------------------------------------------}
-{ Multi purpose return values.}
-const
-   ESUCCESS = 0;
-   EFAILURE = -(1);
-   ERR_TTS_NOT_AVAILABLE = $00;
-   ERR_RECORD_NOT_LOCKED = $01;
-   ERR_INSUFFICIENT_SPACE = $01;
-   ERR_STRING_EXCEEDS_LENGTH = $01;
-   ERR_TTS_AVAILABLE = $01;
-   ERR_NOT_AVAILABLE_PROTECTED = $64;
-   ERR_NOT_AVAILABLE_ON_3X = $65;
-   ERR_BAD_THREAD_ID = $66;
-   ERR_BAD_PRTY_CLASS = $67;
-   ERR_BAD_PRTY_SCOPE = $68;
-   ERR_NOT_A_POPUP_SCREEN = $69;
-   ERR_OPEN_SCREEN = $6A;
-   ERR_BAD_SHFLAG = $6B;
-   ERR_BAD_ACCESS = $6C;
-   ERR_BAD_ORIGIN = $6D;
-   ERR_BAD_ACTION_CODE = $6E;
-   ERR_OUT_OF_TASKS = $6F;
-   ERR_BAD_QUERY_TYPE = $70;
-   ERR_BAD_LIBRARY_HANDLE = $71;
-   ERR_STREAMS = $72;
-   ERR_BAD_FILE_SERVER_ID = $73;
-   ERR_BAD_CONNECTION_ID = $73;
-   ERR_BAD_FLAGS = $74;
-   ERR_STRUCT_NOT_FOUND = $C8;
-   ERR_NO_ITEMS_FOUND = $79;
-   ERR_NCPEXT_TRANSPORT_PROTOCOL_VIOLATION = $7E;
-   ERR_FILE_IN_USE = $80;
-   ERR_LOCK_FAIL = $80;
-   ERR_MAPPED_TO_A_LOCAL_DRIVE = $80;
-   ERR_NO_MORE_FILE_HANDLES = $81;
-   ERR_NO_OPEN_PRIVILEGE = $82;
-   ERR_NETWORK_DISK_IO = $83;
-   ERR_NO_CREATE_PRIVILEGE = $84;
-   ERR_NO_CREATE_DELETE_PRIVILEGE = $85;
-   ERR_R_O_CREATE_FILE = $86;
-   ERR_CREATE_FILE_INVALID_NAME = $87;
-   ERR_INVALID_FILE_HANDLE = $88;
-   ERR_NO_SEARCH_PRIVILEGE = $89;
-   ERR_NO_DELETE_PRIVILEGE = $8A;
-   ERR_NO_RENAME_PRIVILEGE = $8B;
-   ERR_NO_MODIFY_PRIVILEGE = $8C;
-   ERR_NO_SET_PRIVILEGE = $8C;
-   ERR_SOME_FILES_IN_USE = $8D;
-   ERR_ALL_FILES_IN_USE = $8E;
-   ERR_SOME_READ_ONLY = $8F;
-   ERR_ALL_READ_ONLY = $90;
-   ERR_SOME_NAMES_EXIST = $91;
-   ERR_ALL_NAMES_EXIST = $92;
-   ERR_NO_READ_PRIVILEGE = $93;
-   ERR_NO_WRITE_PRIVILEGE_OR_READONLY = $94;
-   ERR_FILE_DETACHED = $95;
-   ERR_NO_ALLOC_SPACE = $96;
-   ERR_SERVER_OUT_OF_MEMORY = $96;
-   ERR_TARGET_NOT_A_SUBDIRECTORY = $96;
-   ERR_NO_SPOOL_SPACE = $97;
-   ERR_INVALID_VOLUME = $98;
-   ERR_VOLUME_DOES_NOT_EXIST = $98;
-   ERR_DIRECTORY_FULL = $99;
-   ERR_RENAME_ACROSS_VOLUME = $9A;
-   ERR_BAD_DIR_HANDLE = $9B;
-   ERR_HOLE_FOUND = $9C;
-   ERR_INVALID_PATH = $9C;
-   ERR_NO_SUCH_EXTENSION = $9C;
-   ERR_NO_DIR_HANDLES = $9D;
-   ERR_BAD_FILE_NAME = $9E;
-   ERR_DIRECTORY_ACTIVE = $9F;
-   ERR_DIRECTORY_IN_USE = $9F;
-   ERR_DIRECTORY_NOT_EMPTY = $A0;
-   ERR_DIRECTORY_IO_ERROR = $A1;
-   ERR_IO_LOCKED = $A2;
-   ERR_TRANSACTION_RESTARTED = $A3;
-   ERR_RENAME_DIR_INVALID = $A4;
-   ERR_INVALID_OPENCREATE_MODE = $A5;
-   ERR_ALREADY_IN_USE = $A6;
-   ERR_SEARCH_DRIVE_VECTOR_FULL = $B0;
-   ERR_DRIVE_DOES_NOT_EXIST = $B1;
-   ERR_DRIVE_IS_NOT_MAPPED = $B1;
-   ERR_CANT_MAP_LOCAL_DRIVE = $B2;
-   ERR_INVALID_MAP_TYPE = $B3;
-   ERR_INVALID_DRIVE_LETTER = $B4;
-   ERR_NO_DRIVE_AVAILABLE = $B5;
-   ERR_WORKSTATION_OUT_OF_MEMORY = $B6;
-   ERR_NO_SUCH_SEARCH_DRIVE = $B7;
-   ERR_INVALID_ENVIRON_VARIABLE = $B8;
-   ERR_DOES_NOT_RUN_ON_IOENGINE = $B9;
-   ERR_PACKET_SIGNATURES_REQURIED = $BC;
-   ERR_PACKET_SIGNATURES_REQUIRED = $BC;
-   ERR_INVALID_DATA_STREAM = $BE;
-   ERR_INVALID_NAME_SPACE = $BF;
-   ERR_NO_ACCOUNT_PRIVILEGES = $C0;
-   ERR_NO_ACCOUNTING_PRIVILEGES = $C0;
-   ERR_NO_ACCOUNT_BALANCE = $C1;
-   ERR_CREDIT_LIMIT_EXCEEDED = $C2;
-   ERR_LOGIN_DENIED_NO_CREDIT = $C2;
-   ERR_TOO_MANY_HOLDS = $C3;
-   ERR_ACCOUNTING_DISABLED = $C4;
-   ERR_LOGIN_LOCKOUT = $C5;
-   ERR_NO_CONSOLE_OPERATOR_RIGHTS = $C6;
-   ERR_MISSING_EA_KEY = $C8;
-   ERR_EA_NOT_FOUND = $C9;
-   ERR_INVALID_EA_HANDLE_TYPE = $CA;
-   ERR_EA_NO_KEY_NO_DATA = $CB;
-   ERR_EA_NUMBER_MISMATCH = $CC;
-   ERR_EXTENT_NUMBER_OUT_OF_RANGE = $CD;
-   ERR_EA_BAD_DIR_NUM = $CE;
-   ERR_INVALID_EA_HANDLE = $CF;
-   ERR_EA_POSITION_OUT_OF_RANGE = $D0;
-   ERR_Q_IO_FAILURE = $D0;
-   ERR_EA_ACCESS_DENIED = $D1;
-   ERR_NO_QUEUE = $D1;
-   ERR_DATA_PAGE_ODD_SIZE = $D2;
-   ERR_NO_Q_SERVER = $D2;
-   ERR_EA_VOLUME_NOT_MOUNTED = $D3;
-   ERR_NO_Q_RIGHTS = $D3;
-   ERR_BAD_PAGE_BOUNDARY = $D4;
-   ERR_Q_FULL = $D4;
-   ERR_INSPECT_FAILURE = $D5;
-   ERR_NO_Q_JOB = $D5;
-   ERR_EA_ALREADY_CLAIMED = $D6;
-   ERR_NO_Q_JOB_RIGHTS = $D6;
-   ERR_UNENCRYPTED_NOT_ALLOWED = $D6;
-   ERR_ODD_BUFFER_SIZE = $D7;
-   ERR_DUPLICATE_PASSWORD = $D7;
-   ERR_Q_IN_SERVICE = $D7;
-   ERR_NO_SCORECARDS = $D8;
-   ERR_PASSWORD_TOO_SHORT = $D8;
-   ERR_Q_NOT_ACTIVE = $D8;
-   ERR_BAD_EDS_SIGNATURE = $D9;
-   ERR_MAXIMUM_LOGINS_EXCEEDED = $D9;
-   ERR_LOGIN_DENIED_NO_CONNECTION = $D9;
-   ERR_Q_STN_NOT_SERVER = $D9;
-   ERR_EA_SPACE_LIMIT = $DA;
-   ERR_BAD_LOGIN_TIME = $DA;
-   ERR_Q_HALTED = $DA;
-   ERR_EA_KEY_CORRUPT = $DB;
-   ERR_NODE_ADDRESS_VIOLATION = $DB;
-   ERR_Q_MAX_SERVERS = $DB;
-   ERR_EA_KEY_LIMIT = $DC;
-   ERR_LOG_ACCOUNT_EXPIRED = $DC;
-   ERR_TALLY_CORRUPT = $DD;
-   ERR_BAD_PASSWORD = $DE;
-   ERR_PASSWORD_EXPIRED_NO_GRACE = $DE;
-   ERR_PASSWORD_EXPIRED = $DF;
-   ERR_NOT_ITEM_PROPERTY = $E8;
-   ERR_WRITE_TO_GROUP_PROPERTY = $E8;
-   ERR_MEMBER_ALREADY_EXISTS = $E9;
-   ERR_NO_SUCH_MEMBER = $EA;
-   ERR_PROPERTY_NOT_GROUP = $EB;
-   ERR_NOT_GROUP_PROPERTY = $EB;
-   ERR_NO_SUCH_SEGMENT = $EC;
-   ERR_NO_SUCH_VALUE_SET = $EC;
-   ERR_SPX_CONNECTION_TERMINATED = $EC;
-   ERR_TERMINATED_BY_REMOTE_PARTNER = $EC;
-   ERR_PROPERTY_ALREADY_EXISTS = $ED;
-   ERR_SPX_CONNECTION_FAILED = $ED;
-   ERR_SPX_TERMINATED_POORLY = $ED;
-   ERR_SPX_NO_ANSWER_FROM_TARGET = $ED;
-   ERR_OBJECT_ALREADY_EXISTS = $EE;
-   ERR_SPX_INVALID_CONNECTION = $EE;
-   ERR_INVALID_NAME = $EF;
-   ERR_SPX_CONNECTION_TABLE_FULL = $EF;
-   ERR_IPX_NOT_INSTALLED = $F0;
-   ERR_ILLEGAL_WILDCARD = $F0;
-   ERR_WILDCARD_NOT_ALLOWED = $F0;
-   ERR_SOCKET_NOT_OPEN = $F0;
-   ERR_BINDERY_SECURITY = $F1;
-   ERR_INVALID_BINDERY_SECURITY = $F1;
-   ERR_SOCKET_ALREADY_OPEN = $F1;
-   ERR_NO_OBJECT_READ_PRIVILEGE = $F2;
-   ERR_NO_OBJECT_READ_RIGHTS = $F2;
-   ERR_NO_OBJECT_RENAME_PRIVILEGE = $F3;
-   ERR_NO_OBJECT_RENAME_RIGHTS = $F3;
-   ERR_NO_OBJECT_DELETE_PRIVILEGE = $F4;
-   ERR_NO_OBJECT_DELETE_RIGHTS = $F4;
-   ERR_NO_OBJECT_CREATE_PRIVILEGE = $F5;
-   ERR_NO_OBJECT_CREATE_RIGHTS = $F5;
-   ERR_NO_PROPERTY_DELETE_PRIVILEGE = $F6;
-   ERR_NO_PROPERTY_DELETE_RIGHTS = $F6;
-   ERR_NO_PROPERTY_CREATE_PRIVILEGE = $F7;
-   ERR_NO_PROPERTY_CREATE_RIGHTS = $F7;
-   ERR_ALREADY_ATTACHED_TO_SERVER = $F8;
-   ERR_NO_PROPERTY_WRITE_PRIVILEGE = $F8;
-   ERR_NO_PROPERTY_WRITE_RIGHTS = $F8;
-   ERR_NOT_ATTACHED_TO_SERVER = $F8;
-   ERR_ECB_CANNOT_BE_CANCELLED = $F9;
-   ERR_NO_FREE_CONNECTION_SLOTS = $F9;
-   ERR_NO_PROPERTY_READ_PRIVILEGE = $F9;
-   ERR_NO_PROPERTY_READ_RIGHTS = $F9;
-   ERR_NO_LOCAL_TARGET_IDENTIFIED = $FA;
-   ERR_NO_MORE_SERVER_SLOTS = $FA;
-   ERR_TEMP_REMAP = $FA;
-   ERR_NO_KNOWN_ROUTE_TO_DESTINATION = $FA;
-   ERR_INVALID_PARAMETERS = $FB;
-   ERR_NO_SUCH_PROPERTY = $FB;
-   ERR_UNKNOWN_REQUEST = $FB;
-   ERR_EVENT_CANCELLED = $FC;
-   ERR_INTERNET_PACKET_REQT_CANCELED = $FC;
-   ERR_MESSAGE_QUEUE_FULL = $FC;
-   ERR_NO_SUCH_BINDERY_OBJECT = $FC;
-   ERR_NO_SUCH_OBJECT = $FC;
-   ERR_REQUEST_CANCELLED = $FC;
-   ERR_SPX_COMMAND_CANCELLED = $FC;
-   ERR_SPX_SOCKET_CLOSED = $FC;
-   ERR_UNKNOWN_FILE_SERVER = $FC;
-   ERR_TARGET_ALREADY_HAS_MESSAGE = $FC;
-   ERR_NCPEXT_SERVICE_PROTOCOL_VIOLATION = $FC;
-   ERR_BAD_SERIAL_NUMBER = $FD;
-   ERR_INVALID_PACKET_LENGTH = $FD;
-   ERR_PACKET_OVERFLOW = $FD;
-   ERR_TTS_DISABLED = $FD;
-   ERR_FIELD_ALREADY_LOCKED = $FD;
-   ERR_FSCOPY_DIFFERENT_NETWORKS = $FD;
-   ERR_BAD_STATION_NUMBER = $FD;
-   ERR_BAD_PACKET = $FE;
-   ERR_SPX_MALFORMED_PACKET = $FE;
-   ERR_BINDERY_LOCKED = $FE;
-   ERR_DOS_ACCESS_DENIED = $FE;
-   ERR_DOS_NO_SEARCH_RIGHTS = $FE;
-   ERR_IMPLICIT_TRANSACTION_ACTIVE = $FE;
-   ERR_INCORRECT_ACCESS_PRIVILEGES = $FE;
-   ERR_INVALID_NAME_LENGTH = $FE;
-   ERR_INVALID_SEMAPHORE_NAME_LENGTH = $FE;
-   ERR_IO_FAILURE = $FE;
-   ERR_PACKET_NOT_DELIVERABLE = $FE;
-   ERR_SPOOL_DIRECTORY_ERROR = $FE;
-   ERR_SUPERVISOR_HAS_DISABLED_LOGIN = $FE;
-   ERR_TRANSACTION_ENDS_RECORDS_LOCKED = $FE;
-   ERR_SERVER_BINDERY_LOCKED = $FE;
-   ERR_TIMEOUT_FAILURE = $FE;
-   ERR_TRUSTEE_NOT_FOUND = $FE;
-   ERR_SOCKET_TABLE_FULL = $FE;
-   ERR_NCPEXT_NO_HANDLER = $FE;
-   ERR_BAD_PARAMETER = $FF;
-   ERR_BAD_SPOOL_PRINTER = $FF;
-   ERR_RECORD_ALREADY_LOCKED = $FF;
-   ERR_BAD_RECORD_OFFSET = $FF;
-   ERR_BINDERY_FAILURE = $FF;
-   ERR_ECB_NOT_IN_USE = $FF;
-   ERR_FAILURE = $FF;
-   ERR_FILE_EXTENSION_ERROR = $FF;
-   ERR_HARD_FAILURE = $FF;
-   ERR_INVALID_INITIAL_SEMAPHORE_VALUE = $FF;
-   ERR_INVALID_SEMAPHORE_HANDLE = $FF;
-   ERR_DOS_FILE_NOT_FOUND = $FF;
-   ERR_EXPLICIT_TRANSACTION_ACTIVE = $FF;
-   ERR_FILE_NOT_OPEN = $FF;
-   ERR_NO_EXPLICIT_TRANSACTION_ACTIVE = $FF;
-   ERR_NO_FILES_FOUND = $FF;
-   ERR_NO_RECORD_FOUND = $FF;
-   ERR_NO_RESPONSE_FROM_SERVER = $FF;
-   ERR_NO_SPOOL_FILE = $FF;
-   ERR_NO_SUCH_OBJECT_OR_BAD_PASSWORD = $FF;
-   ERR_OPEN_FILES = $FF;
-   ERR_PATH_ALREADY_EXISTS = $FF;
-   ERR_PATH_NOT_LOCATABLE = $FF;
-   ERR_QUEUE_FULL = $FF;
-   ERR_REQUEST_NOT_OUTSTANDING = $FF;
-   ERR_SOCKET_CLOSED = $FF;
-   ERR_SPX_IS_INSTALLED = $FF;
-   ERR_SPX_SOCKET_NOT_OPENED = $FF;
-   ERR_TARGET_NOT_LOGGED_IN = $FF;
-   ERR_TARGET_NOT_ACCEPTING_MESSAGES = $FF;
-   ERR_TRANSACTION_NOT_YET_WRITTEN = $FF;
-   ERR_NO_TRUSTEE_CHANGE_PRIVILEGE = $FF;
-   ERR_CHECKSUMS_REQUIRED = $FF;
-   ERR_SERVICE_NOT_LOADED = $101;
-   ERR_NO_LIBRARY_CONTEXT = $400;
-{-----------------------------------------------------------------------------
-   Important Note:
-   Additional NetWareErrno values that don't employ a ERR_ prefix have been
-   moved from this position into obsolete header niterror.h. Many of these had
-   been included for compatibility with the now-obsolete NIT API for DOS
-   clients and many conflict with current cross-platform headers.
-  -----------------------------------------------------------------------------}
-{ NetWare Core Protocol (NCP) error codes. }
-   DISKFULL = 1;
-   BADNET = 2;
-   LISTENERROR = 2;
-   BADLADDRESS = 3;
-   INVALIDSESSION = 3;
-   NOSLOTS = 4;
-   SLOTALLOCERR = 4;
-   BROADCASTERROR = 5;
-   BADSERVERNAME = 6;
-   BADUSERNAME = 7;
-   BADPASSWORD = 8;
-   MEMERROR = 9;
-   INVALIDCONNECTION = 10;
-   INVALIDHANDLE = 11;
-   INVALIDREQUEST = 12;
-   SOCKETERROR = 13;
-   ALLOCTAGERR = 14;
-   CONNECTIONABORTED = 15;
-   TIMEOUTERR = 16;
-{ frame type: Ethernet 802.3  }
-   CHECKSUMS_NOT_SUPPORTED = 17;
-   CHECKSUM_FAILURE = 18;
-   NO_FRAGMENT_LIST = 19;
-{ Values for 'NetWareErrno' as set by spawnlp() and spawnvp().}
-   LOAD_COULD_NOT_FIND_FILE = 1;
-   LOAD_ERROR_READING_FILE = 2;
-   LOAD_NOT_NLM_FILE_FORMAT = 3;
-   LOAD_WRONG_NLM_FILE_VERSION = 4;
-   LOAD_REENTRANT_INITIALIZE_FAILURE = 5;
-   LOAD_CAN_NOT_LOAD_MULTIPLE_COPIES = 6;
-   LOAD_ALREADY_IN_PROGRESS = 7;
-   LOAD_NOT_ENOUGH_MEMORY = 8;
-   LOAD_INITIALIZE_FAILURE = 9;
-   LOAD_INCONSISTENT_FILE_FORMAT = 10;
-   LOAD_CAN_NOT_LOAD_AT_STARTUP = 11;
-   LOAD_AUTO_LOAD_MODULES_NOT_LOADED = 12;
-   LOAD_UNRESOLVED_EXTERNAL = 13;
-   LOAD_PUBLIC_ALREADY_DEFINED = 14;
- { Values for _msize() error return and NWMemorySizeAddressable(). }
-   ERR_HEAP_BAD_PTR = $FFFFFFFF;
-   ERR_HEAP_BLOCK_ALREADY_FREE = $FFFFFFFE;
-   ERR_INVALID_ADDRESS = $FFFFFFFD;
- { Values for NetWare Virtual Memory (NVM) APIs as returned by GetVMErrno().
-   These values should be examined after calling a Win32 VM API without a
-   satisfactorily-lucid error in 'errno' or from (Win32) GetLastError(). }
-   ERROR_INSUFFICIENT_CONTIGUOUS_MEMORY = $1000;
-   ERROR_INSUFFICIENT_DISK_SWAP_SPACE = $1001;
-   ERROR_INSUFFICIENT_MEMORY = $1002;
-   ERROR_INSUFFICIENT_RESOURCES_TO_COMMIT_MEMORY = $1003;
-   ERROR_INVALID_ATTRIBUTE_FLAGS = $1004;
-   ERROR_INVALID_ADDRESS = $1005;
-   ERROR_INVALID_LOCK_FLAGS = $1006;
-   ERROR_INVALID_PAGE_COUNT = $1007;
-   ERROR_INVALID_PROTECTION_FLAGS = $1008;
-   ERROR_NON_SHARED_MEMORY_ADDRESS = $1009;
-   ERROR_SHARED_MEMORY_ADDRESS = $100A;
-
-function GetVMErrno:longint;cdecl;external 'clib' name 'GetVMErrno';
-procedure SetVMErrno(para1:longint);cdecl;external 'clib' name 'SetVMErrno';
-function __get_NWErrno:longint;cdecl;external 'clib' name '__get_NWErrno';
-function __get_NWErrno_ptr:Plongint;cdecl;external 'clib' name '__get_NWErrno_ptr';
-function NetWareErrno : longint;
-{-fcntl.h----------------------------------------------------------------------}
-const
-   F_GETFL    = 1;
-   F_SETFL    = 2;
-   F_DUPFD    = 3;
-   F_GETFD    = 4;
-   F_SETFD    = 5;
-   F_SETLK    = 6;
-   F_GETLK    = 7;
-   F_SETLKW   = 8;
-   F_RDLCK    = 9;
-   F_UNLCK    = 10;
-   F_WRLCK    = 11;
-   F_CLOEXEC  = 12;
-   O_RDONLY   = $0000;
-   O_WRONLY   = $0001;
-   O_RDWR     = $0002;
-   O_ACCMODE  = $0003;
-   O_APPEND   = $0010;
-   O_CREAT    = $0020;
-   O_TRUNC    = $0040;
-   O_EXCL     = $0080;
-   O_TEXT     = $0100;
-   O_BINARY   = $0200;
-   O_NDELAY   = $0400;
-   O_NOCTTY   = $0800;
-   O_NONBLOCK = O_NDELAY;
-   FNDELAY    = $0004;
-type
-   Poff_t = ^Toff_t;
-   Toff_t = longint;
-   Ppid_t = ^Tpid_t;
-   Tpid_t = longint;
-   Pssize_t = ^Tssize_t;
-   Tssize_t = longint;
-   Pmode_t = ^Tmode_t;
-   Tmode_t = dword;
-
-   Pflock = ^Tflock;
-   Tflock = record
-        l_type   : smallint;
-        l_whence : smallint;
-        l_start  : Toff_t;
-        l_len    : Toff_t;
-        l_pid    : Tpid_t;
-     end;
-
-
-function creat (path:Pchar; mode:Tmode_t):longint;                  cdecl;external 'clib' name 'creat';
-function _fcntl (fildes:longint; cmd:longint;
-                args:array of const):longint;                       cdecl;external 'clib' name 'fcntl';
-function _fcntl (fildes:longint; cmd:longint):longint;               cdecl;external 'clib' name 'fcntl';
-function open  (path:Pchar; oflag:longint;
-                args:array of const):longint;                       cdecl;external 'clib' name 'open';
-function open  (path:Pchar; oflag:longint):longint;                 cdecl;external 'clib' name 'open';
-function sopen (path:Pchar; oflag, shflag:longint;
-                args:array of const):longint;                       cdecl;external 'clib' name 'sopen';
-function sopen (path:Pchar; oflag,shflag:longint):longint;          cdecl;external 'clib' name 'sopen';
-
-{-limits.h---------------------------------------------------------------------}
-const
-   PAGESIZE  = 4096;
-   CHAR_BIT  = 8;
-   SCHAR_MIN = -(128);
-   SCHAR_MAX = 127;
-   UCHAR_MAX = 255;
-   CHAR_MIN  = SCHAR_MIN;
-   CHAR_MAX  = SCHAR_MAX;
-
-   MB_LEN_MAX = 5;
-   SHRT_MIN   = -(32768);
-   SHRT_MAX   = 32767;
-   USHRT_MAX  = 65535;
-   LONG_MIN   = (-(2147483647)) - 1;
-   LONG_MAX   = 2147483647;
-   ULONG_MAX  = 4294967295;
-   INT_MIN    = LONG_MIN;
-   INT_MAX    = LONG_MAX;
-   UINT_MAX   = ULONG_MAX;
-   SSIZE_MAX  = INT_MAX;
-   TZNAME_MAX = 8;
-   PIPE_BUF   = 512;
-{-locale.h---------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-const
-   LC_CTYPE = 0;
-   LC_NUMERIC = 1;
-   LC_TIME = 2;
-   LC_COLLATE = 3;
-   LC_MONETARY = 4;
-   LC_MESSAGES = 5;
-   LC_ALL = 6;
-
-type
-   Plconv = ^Tlconv;
-   Tlconv =
-   record
-     decimal_point       : array [0..3] of char;
-     thousands_sep       : array [0..3] of char;
-     grouping            : array [0..3] of char;
-     int_curr_symbol     : array [0..7] of char;
-     currency_symbol     : array [0..3] of char;
-     mon_decimal_point   : array [0..3] of char;
-     mon_thousands_sep   : array [0..3] of char;
-     mon_grouping        : array [0..7] of char;
-     positive_sign       : array [0..3] of char;
-     negative_sign       : array [0..3] of char;
-     int_frac_digits     : char;
-     frac_digits         : char;
-     p_cs_precedes       : char;
-     p_sep_by_space      : char;
-     n_cs_precedes       : char;
-     n_sep_by_space      : char;
-     p_sign_posn         : char;
-     n_sign_posn         : char;
-     code_page           : word;
-     country_id          : word;
-     data_list_separator : array[0..1] of char;
-     date_separator      : array[0..1] of char;
-     time_separator      : array[0..1] of char;
-     time_format         : char;
-     date_format         : word;
-     reserved            : array[0..49] of char;
-   end;
-
-// ???? struct lconv  *localeconv( void );
-
-function setlocale_old (p1:longint; p2:Pchar):Pchar;  cdecl; external 'clib' name 'setlocale';
-function setlocale     (p1:longint; p2:Pchar):Pchar;  cdecl; external 'clib' name 'setlocale_411';
-{-nwlocale.h-------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-type
-  TNUMBER_TYPE = double;
-  TUCHAR = byte;
-
-
-const
-   MERIDLEN = 5;
-   L_MB_LEN_MAX = 2;    // multibyte character length maximum is 2
-   NWSINGLE_BYTE = 1;	// returned from NWCharType()...
-   NWDOUBLE_BYTE = 2;
-{ country/language ID definitions (field 'country_id' in struct Llconv)...   }
-   ARABIC = 785;
-   AUSTRALIA = 61;
-   BELGIUM = 32;
-   CANADA_ENG = 1;
-   CANADA_FR = 2;
-   DENMARK = 45;
-   FINLAND = 358;
-   FRANCE = 33;
-   GERMANY = 49;
-   HEBREW = 972;
-   ITALY = 39;
-   LATIN_AMERICA = 003;
-   NETHERLANDS = 31;
-   NORWAY = 47;
-   PORTUGAL = 351;
-   SPAIN = 34;
-   SWEDEN = 46;
-   SWITZERLAND = 41;
-   UK = 44;
-   USA = 1;
-   JAPAN = 81;
-   KOREA = 82;
-   PRC = 86;
-   TAIWAN = 88;
-   ASIAN_ENGLISH = 99;
-
-
-type
-   PVECTOR = ^TVECTOR;
-   TVECTOR = record
-        lowValue : char;
-        highValue : char;
-     end;
-{ extern double-byte table data...  }
-//??  var _DBCSVector : array[0..4] of TVECTOR;cvar;external;
-{ prototypes...  }
-
-function NWCharType(ch:dword):longint;cdecl;external 'locnlm32' name 'NWCharType';
-function NWCharVal(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWCharVal';
-function NWCharUpr(chr:longint):longint;cdecl;external 'locnlm32' name 'NWCharUpr';
-function NWcprintf(format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWcprintf';
-function NWcprintf(format:Pchar):longint;cdecl;external 'locnlm32' name 'NWcprintf';
-function NWIncrement(_string:Pchar; numChars:Tsize_t):Pchar;cdecl;external 'locnlm32' name 'NWIncrement';
-{
-   NWatoi, NWisalnum, NWisalpha, and NWisdigit are preferred over NWLatoi,
-   NWisalnum, NWLisalpha, and NWLisdigit respectively.
- }
-function NWatoi(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWatoi';
-function NWisalnum(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisalnum';
-function NWisalpha(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisalpha';
-function NWisdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisdigit';
-function NWisxdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisxdigit';
-function NWitoa(value:longint; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWitoa';
-function NWutoa(value:dword; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWutoa';
-function NWltoa(value:longint; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWltoa';
-function NWultoa(value:dword; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWultoa';
-(* Const before type ignored *)
-function NWLatoi(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWLatoi';
-function NWLisalnum(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisalnum';
-function NWLisalpha(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisalpha';
-function NWLisdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisdigit';
-function NWLlocaleconv(lconvPtr:PLCONV):PLCONV;cdecl;external 'locnlm32' name 'NWLlocaleconv';
-function NWLmblen(_string:Pchar; maxBytes:Tsize_t):longint;cdecl;external 'locnlm32' name 'NWLmblen';
-function NWLmbslen(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWLmbslen';
-function NWLsetlocale(category:longint; locale:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLsetlocale';
-function NWLsetlocale_411(category:longint; locale:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLsetlocale_411';
-function NWLstrbcpy(dest:Pchar; src:Pchar; maxlen:Tsize_t):Pchar;cdecl;external 'locnlm32' name 'NWLstrbcpy';
-function NWLstrchr(_string:Pchar; find:longint):Pchar;cdecl;external 'locnlm32' name 'NWLstrchr';
-function NWLstrcoll(string1:Pchar; string2:Pchar):longint;cdecl;external 'locnlm32' name 'NWLstrcoll';
-function NWLstrcspn(string1:Pchar; string2:Pchar):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrcspn';
-function NWLstrftime(_string:Pchar; maxSize:Tsize_t; format:Pchar; timePtr:Ptm):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrftime';
-function NWLstricmp(str1:Pchar; str2:Pchar):longint;cdecl;external 'locnlm32' name 'NWLstricmp';
-function NWLstrlwr(_string:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrlwr';
-function NWLstrpbrk(string1:Pchar; string2:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrpbrk';
-function NWLstrrchr(_string:Pchar; find:longint):Pchar;cdecl;external 'locnlm32' name 'NWLstrrchr';
-function NWLstrrev(string1:Pchar; string2:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrrev';
-function NWLstrspn(string1:Pchar; string2:Pchar):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrspn';
-function NWLstrstr(_string:Pchar; searchString:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrstr';
-function NWLstrupr(_string:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrupr';
-function NWLstrxfrm(string1:Pchar; string2:Pchar; numChars:Tsize_t):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrxfrm';
-function NWPrevChar(_string:Pchar; position:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWPrevChar';
-function NWprintf(format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWprintf';
-function NWprintf(format:Pchar):longint;cdecl;external 'locnlm32' name 'NWprintf';
-function NWsprintf(s:Pchar; format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWsprintf';
-function NWsprintf(s:Pchar; format:Pchar):longint;cdecl;external 'locnlm32' name 'NWsprintf';
-function NWstrImoney(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrImoney';
-function NWstrmoney(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrmoney';
-function NWstrncoll(string1:Pchar; string2:Pchar; maxChars:Tsize_t):longint;cdecl;external 'locnlm32' name 'NWstrncoll';
-function NWstrncpy(target_string:Pchar; source_string:Pchar; numChars:longint):Pchar;cdecl;external 'locnlm32' name 'NWstrncpy';
-function NWstrnum(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrnum';
-//function NWvcprintf(format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvcprintf';
-//function NWvprintf(format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvprintf';
-//function NWvsprintf(s:Pchar; format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvsprintf';
-{-nwaudnlm.h-------------------------------------------------------------------}
-{ defined network address types:  }
-
-const
-   ASCIIZ_STRING_NET_ADDRESS_TYPE = 0;
-   IPX_NET_ADDRESS_TYPE           = 1;
-
-   // special value network address type:
-   NO_IDENTITY_HAS_BEEN_SET       = $FF;
-
-function NWAddRecordToAuditingFile
-    (volumeNumber,
-     recordType,
-     stationNumber,
-     statusCode        : longint;
-     data              : pointer;
-     dataSize          : longint):longint;cdecl;external 'clib' name 'NWAddRecordToAuditingFile';
-function NWAddRecordToAuditingFile
-    (volumeNumber,
-     recordType,
-     stationNumber,
-     statusCode        : longint;
- var data;
-     dataSize          : longint):longint;cdecl;external 'clib' name 'NWAddRecordToAuditingFile';
-
-
-function NWGetAuditingIdentity
-    (addressType       : Plongint;
-     networkAddress    : pointer;
-     identityName      : Pchar):longint;cdecl;external 'clib' name 'NWGetAuditingIdentity';
-function NWGetAuditingIdentity
-    (var addressType   : longint;
-     var networkAddress;
-     identityName      : Pchar):longint;cdecl;external 'clib' name 'NWGetAuditingIdentity';
-function NWSetAuditingIdentity
-    (addressType:longint;
-     networkAddress:pointer;
-     identityName:Pchar):longint;cdecl;external 'clib' name 'NWSetAuditingIdentity';
-function NWSetAuditingIdentity
-    (addressType:longint;
- var networkAddress;
-     identityName:Pchar):longint;cdecl;external 'clib' name 'NWSetAuditingIdentity';
-{-nwbitops.h-------------------------------------------------------------------}
-procedure BitClear        (bitArray:pointer; bitNumber:longint);cdecl;external 'clib' name 'BitClear';
-procedure BitSet          (bitArray:pointer; bitNumber:longint);cdecl;external 'clib' name 'BitSet';
-function  BitTest         (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTest';
-function  BitTestAndClear (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndClear';
-function  BitTestAndSet   (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndSet';
-function  ScanBits        (bitArray:pointer; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanBits';
-function  ScanClearedBits (bitArray:pointer; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanClearedBits';
-
-procedure BitClear        (var bitArray; bitNumber:longint);cdecl;external 'clib' name 'BitClear';
-procedure BitSet          (var bitArray; bitNumber:longint);cdecl;external 'clib' name 'BitSet';
-function  BitTest         (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTest';
-function  BitTestAndClear (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndClear';
-function  BitTestAndSet   (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndSet';
-function  ScanBits        (var bitArray; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanBits';
-function  ScanClearedBits (var bitArray; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanClearedBits';
-{-nwcntask.h-------------------------------------------------------------------}
-{#define LOGIN_WITHOUT_PASSWORD ((char *) N_TRUE) }
-
-function AllocateBlockOfTasks(numberWanted:longint):longint;cdecl;external 'clib' name 'AllocateBlockOfTasks';
-function CheckIfConnectionActive(connection:longint):byte;cdecl;external 'clib' name 'CheckIfConnectionActive';
-function DisableConnection(connection:longint):longint;cdecl;external 'clib' name 'DisableConnection';
-function EnableConnection(connection:longint):longint;cdecl;external 'clib' name 'EnableConnection';
-function GetCurrentConnection:longint;cdecl;external 'clib' name 'GetCurrentConnection';
-function GetCurrentFileServerID:word;cdecl;external 'clib' name 'GetCurrentFileServerID';
-function GetCurrentTask:longint;cdecl;external 'clib' name 'GetCurrentTask';
-function LoginObject(connection:longint; objectName:Pchar; objectType:word; password:Pchar):longint;cdecl;external 'clib' name 'LoginObject';
-function LogoutObject(connection:longint):longint;cdecl;external 'clib' name 'LogoutObject';
-function ReturnBlockOfTasks(startingTask,numberOfTasks:longint):longint;cdecl;external 'clib' name 'ReturnBlockOfTasks';
-function ReturnConnection(connection:longint):longint;cdecl;external 'clib' name 'ReturnConnection';
-function ReturnLocalConnection(connection:longint):longint;cdecl;external 'clib' name 'ReturnLocalConnection';
-function SetCurrentConnection(connectionNumber:longint):longint;cdecl;external 'clib' name 'SetCurrentConnection';
-function SetCurrentFileServerID(connectionID:word):word;cdecl;external 'clib' name 'SetCurrentFileServerID';
-function SetCurrentTask(taskNumber:longint):longint;cdecl;external 'clib' name 'SetCurrentTask';
-{-nwconio.h--------------------------------------------------------------------}
-const
-   DONT_AUTO_ACTIVATE     = $01;  // avoids autoactivation when screens are
-                                  // created, but no other screens exist
-   DONT_SWITCH_SCREEN     = $02;  // avoids screen being switched
-   DONT_CHECK_CTRL_CHARS  = $10;  // turns off ^C and ^S processing
-   AUTO_DESTROY_SCREEN    = $20;  // avoids "Press any key to close screen
-   POP_UP_SCREEN          = $40;
-   UNCOUPLED_CURSORS      = $80;  // for distinct input & output cursors
-{ more screen attribute values returned by GetScreenInfo()  }
-   HAS_A_CLIB_HANDLE            = $00000100;
-   _KEYBOARD_INPUT_ACTIVE       = $00010000;
-   _PROCESS_BLOCKED_ON_KEYBOARD = $00020000;
-   _PROCESS_BLOCKED_ON_SCREEN   = $00040000;
-   _INPUT_CURSOR_DISABLED       = $00080000;
-   _SCREEN_HAS_TITLE_BAR        = $00400000;
-   _NON_SWITCHABLE_SCREEN       = $01000000;
-
-function getch:longint; cdecl; external 'clib' name 'getch';
-function getche:longint; cdecl; external 'clib' name 'getche';
-function kbhit:longint; cdecl; external 'clib' name 'kbhit';
-function putch(c:longint):longint; cdecl; external 'clib' name 'putch';
-function ungetch(c:longint):longint; cdecl; external 'clib' name 'ungetch';
-function cgets(buf:Pchar):Pchar; cdecl; external 'clib' name 'cgets';
-function CheckIfScreenDisplayed(screenHandle,waitFlag:longint):longint; cdecl; external 'clib' name 'CheckIfScreenDisplayed';
-procedure clrscr; cdecl; external 'clib' name 'clrscr';
-procedure ConsolePrintf(format:Pchar; args:array of const); cdecl; external 'clib' name 'ConsolePrintf';
-procedure ConsolePrintf(format:Pchar); cdecl; external 'clib' name 'ConsolePrintf';
-procedure CopyToScreenMemory(height,width:word; Rect:PBYTE; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyToScreenMemory';
-procedure CopyToScreenMemory(height,width:word; var Data; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyToScreenMemory';
-procedure CopyFromScreenMemory(height,width:word; Rect:PBYTE; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyFromScreenMemory';
-procedure CopyFromScreenMemory(height,width:word; var Data; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyFromScreenMemory';
-function CoupleInputOutputCursors:longint; cdecl; external 'clib' name 'CoupleInputOutputCursors';
-function cputs(buf:Pchar):longint; cdecl; external 'clib' name 'cputs';
-function cprintf(fmt:Pchar; args:array of const):longint; cdecl; external 'clib' name 'cprintf';
-function cprintf(fmt:Pchar):longint; cdecl; external 'clib' name 'cprintf';
-function CreateScreen(screenName:Pchar; attr:byte):longint; cdecl; external 'clib' name 'CreateScreen';
-function cscanf(fmt:Pchar; args:array of const):longint; cdecl; external 'clib' name 'cscanf';
-function cscanf(fmt:Pchar):longint; cdecl; external 'clib' name 'cscanf';
-function DecoupleInputOutputCursors:longint; cdecl; external 'clib' name 'DecoupleInputOutputCursors';
-function DestroyScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DestroyScreen';
-function DisplayInputCursor:longint; cdecl; external 'clib' name 'DisplayInputCursor';
-function DisplayScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DisplayScreen';
-function DropPopUpScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DropPopUpScreen';
-function GetCurrentScreen:longint; cdecl; external 'clib' name 'GetCurrentScreen';
-function GetCursorCouplingMode:byte; cdecl; external 'clib' name 'GetCursorCouplingMode';
-function GetCursorShape(startline,endline:PBYTE):word; cdecl; external 'clib' name 'GetCursorShape';
-function GetCursorShape(var startline,endline:byte):word; cdecl; external 'clib' name 'GetCursorShape';
-function GetCursorSize(firstline,lastline:PBYTE):word; cdecl; external 'clib' name 'GetCursorSize';
-function GetCursorSize(var firstline,lastline:byte):word; cdecl; external 'clib' name 'GetCursorSize';
-function GetPositionOfOutputCursor(rowP,columnP:PWORD):longint; cdecl; external 'clib' name 'GetPositionOfOutputCursor';
-function GetPositionOfOutputCursor(var row,col:word):longint; cdecl; external 'clib' name 'GetPositionOfOutputCursor';
-function __GetScreenID(screenHandle:longint):longint; cdecl; external 'clib' name '__GetScreenID';
-function GetScreenInfo(handle:longint; name:Pchar; attr:plongint):longint; cdecl; external 'clib' name 'GetScreenInfo';
-function GetScreenInfo(handle:longint; name:Pchar; var attr:longint):longint; cdecl; external 'clib' name 'GetScreenInfo';
-function GetSizeOfScreen(heightP,widthP:PWORD):longint; cdecl; external 'clib' name 'GetSizeOfScreen';
-function GetSizeOfScreen(var heightP,widthP:word):longint; cdecl; external 'clib' name 'GetSizeOfScreen';
-procedure gotoxy(col,row:word); cdecl; external 'clib' name 'gotoxy';
-function HideInputCursor:longint; cdecl; external 'clib' name 'HideInputCursor';
-function IsColorMonitor:longint; cdecl; external 'clib' name 'IsColorMonitor';
-function PressAnyKeyToContinue:longint; cdecl; external 'clib' name 'PressAnyKeyToContinue';
-function PressEscapeToQuit:longint; cdecl; external 'clib' name 'PressEscapeToQuit';
-procedure RingTheBell; cdecl; external 'clib' name 'RingTheBell';
-function ScanScreens(LastScreenID:longint; name:Pchar; attr:plongint):longint; cdecl; external 'clib' name 'ScanScreens';
-function ScanScreens(LastScreenID:longint; name:Pchar; var attr:longint):longint; cdecl; external 'clib' name 'ScanScreens';
-function ScrollScreenRegionDown(firstLine,numLines:longint):longint; cdecl; external 'clib' name 'ScrollScreenRegionDown';
-function ScrollScreenRegionUp(firstLine,numLines:longint):longint; cdecl; external 'clib' name 'ScrollScreenRegionUp';
-function SetAutoScreenDestructionMode(newMode:byte):byte; cdecl; external 'clib' name 'SetAutoScreenDestructionMode';
-function SetCtrlCharCheckMode(newMode:byte):byte; cdecl; external 'clib' name 'SetCtrlCharCheckMode';
-function SetCursorCouplingMode(newMode:byte):byte; cdecl; external 'clib' name 'SetCursorCouplingMode';
-function SetCursorShape(startline,endline:byte):word; cdecl; external 'clib' name 'SetCursorShape';
-function SetCurrentScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'SetCurrentScreen';
-function SetInputAtOutputCursorPosition:longint; cdecl; external 'clib' name 'SetInputAtOutputCursorPosition';
-function SetOutputAtInputCursorPosition:longint; cdecl; external 'clib' name 'SetOutputAtInputCursorPosition';
-function SetPositionOfInputCursor(row,col:word):longint; cdecl; external 'clib' name 'SetPositionOfInputCursor';
-function SetScreenAreaAttribute(line,col:longint; numLines:longint; numColumns:longint; attr:longint):longint; cdecl; external 'clib' name 'SetScreenAreaAttribute';
-function SetScreenAttributes(mask,attr:longint):longint; cdecl; external 'clib' name 'SetScreenAttributes';
-function SetScreenCharacterAttribute(line,column,attr:longint):longint; cdecl; external 'clib' name 'SetScreenCharacterAttribute';
-function SetScreenRegionAttribute(firstLine,numLines:longint; attr:byte):longint; cdecl; external 'clib' name 'SetScreenRegionAttribute';
-function wherex:word; cdecl; external 'clib' name 'wherex';
-function wherey:word; cdecl; external 'clib' name 'wherey';
-{-nwconn.h---------------------------------------------------------------------}
-{ Structures and typedefs for connection services  }
-
-const
-   IPX_TRANSPORT_ADDRESS =  1;
-   IPX_TRANSPORT_LENGTH  = 12;
-   UDP_TRANSPORT_ADDRESS =  8;
-   UDP_TRANSPORT_LENGTH  =  4;
-   TCP_TRANSPORT_ADDRESS =  9;
-   TCP_TRANSPORT_LENGTH  =  4;
-{$include npackon.inc}
-type
-   PUserNameStruct = ^TUserNameStruct;
-   TUserNameStruct = record
-        UserName : array[0..47] of char;
-        ObjectID : longint;
-     end;
-   TConnectionCriticalErrorHandler =
-      function (fileServerID,connection,err:longint):longint; cdecl;
-
-{$include npackoff.inc}
-
-function AttachByAddress(transType:byte; transLen:longint; transBuf:pointer; fileServerID:PWORD):longint;cdecl;external 'clib' name 'AttachByAddress';
-function AttachByAddress(transType:byte; transLen:longint; var transBuf; var fileServerID:word):longint;cdecl;external 'clib' name 'AttachByAddress';
-
-function AttachToFileServer(fileServerName:Pchar; fileServerID:PWORD):longint;cdecl;external 'clib' name 'AttachToFileServer';
-function AttachToFileServer(fileServerName:Pchar; var fileServerID:word):longint;cdecl;external 'clib' name 'AttachToFileServer';
-
-function GetConnectionFromID(fileServerID:PWORD):longint;cdecl;external 'clib' name 'GetConnectionFromID';
-function GetConnectionFromID(var fileServerID:word):longint;cdecl;external 'clib' name 'GetConnectionFromID';
-
-function GetConnectionInformation (connectionNumber:word;
-                                   objectName      :Pchar;
-                                   objectType      :PWORD;
-                                   objectID        :Plongint;
-                                   loginTime       :PBYTE):longint;cdecl;external 'clib' name 'GetConnectionInformation';
-function GetConnectionInformation (connectionNumber:word;
-                                   objectName      :Pchar;
-                               var objectType      :word;
-                               var objectID        :longint;
-                               var loginTime       :byte):longint;cdecl;external 'clib' name 'GetConnectionInformation';
-
-function GetConnectionList(objectID,lastConnection:longint;
-                           numberOfConnections:Plongint;
-                           connectionList:pointer;
-                           connectionSize:longint):longint;cdecl;external 'clib' name 'GetConnectionList';
-function GetConnectionList(objectID,lastConnection:longint;
-                       var numberOfConnections:longint;
-                       var connectionList;  {array of longint}
-                           connectionSize:longint):longint;cdecl;external 'clib' name 'GetConnectionList';
-function GetConnectionNumber:word;cdecl;external 'clib' name 'GetConnectionNumber';
-function GetDefaultConnectionID:longint;cdecl;external 'clib' name 'GetDefaultConnectionID';
-function GetDefaultFileServerID:longint;cdecl;external 'clib' name 'GetDefaultFileServerID';
-function GetFileServerID(fileServerName:Pchar; fileServerID:PWORD):longint;cdecl;external 'clib' name 'GetFileServerID';
-function GetFileServerID(fileServerName:Pchar; var fileServerID:word):longint;cdecl;external 'clib' name 'GetFileServerID';
-
-function GetInternetAddress(connectionNumber:word;
-                            networkNumber:pointer;
-                            physicalNodeAddress:pointer):longint;cdecl;external 'clib' name 'GetInternetAddress';
-function GetInternetAddress(connectionNumber:word;
-                            var networkNumber;  {4 bytes}
-                            var physicalNodeAddress {6 bytes}):longint;cdecl;external 'clib' name 'GetInternetAddress';
-function GetLANAddress (boardNumber:longint;
-                        nodeAddress:pointer):longint;cdecl;external 'clib' name 'GetLANAddress';
-function GetLANAddress (boardNumber:longint;
-                    var nodeAddress{6 bytes}):longint;cdecl;external 'clib' name 'GetLANAddress';
-
-function GetMaximumNumberOfStations:longint;cdecl;external 'clib' name 'GetMaximumNumberOfStations';
-function GetNetNumber(boardNumber:longint):longint;cdecl;external 'clib' name 'GetNetNumber';
-
-function GetObjectConnectionNumbers (objectName:Pchar;
-                                     objectType:word;
-                                     numberOfConnections:PWORD;
-                                     connectionList:PWORD;
-                                     maxConnections:word):longint;cdecl;external 'clib' name 'GetObjectConnectionNumbers';
-function GetObjectConnectionNumbers (objectName:Pchar;
-                                     objectType:word;
-                                 var numberOfConnections:word;
-                                 var connectionList;  {array of WORD}
-                                     maxConnections:word):longint;cdecl;external 'clib' name 'GetObjectConnectionNumbers';
-
-procedure GetStationAddress(physicalNodeAddress:pointer);cdecl;external 'clib' name 'GetStationAddress';
-procedure GetStationAddress(var physicalNodeAddress {6 bytes});cdecl;external 'clib' name 'GetStationAddress';
-
-function GetUserNameFromNetAddress (internetAddress:PBYTE;
-                                    sequenceNumber:longint;
-                                    userNameP:PUserNameStruct):longint;cdecl;external 'clib' name 'GetUserNameFromNetAddress';
-function GetUserNameFromNetAddress (var internetAddress;  {10 bytes}
-                                    sequenceNumber:longint;
-                                    var userName:TUserNameStruct):longint;cdecl;external 'clib' name 'GetUserNameFromNetAddress';
-
-function LoginToFileServer (objectName:Pchar;
-                            objectType:word;
-                            objectPassword:Pchar):longint;cdecl;external 'clib' name 'LoginToFileServer';
-procedure Logout;cdecl;external 'clib' name 'Logout';
-procedure LogoutFromFileServer(fileServerID:word);cdecl;external 'clib' name 'LogoutFromFileServer';
-function NWDSGetCurrentUser:longint;cdecl;external 'clib' name 'NWDSGetCurrentUser';
-function NWDSSetCurrentUser(userHandle:longint):longint;cdecl;external 'clib' name 'NWDSSetCurrentUser';
-
-function NWDSSetPreferredDSTree (len:longint; treeName:Pchar):longint;cdecl;external 'clib' name 'NWDSSetPreferredDSTree';
-function NWGetPacketBurstBufferCount:longint;cdecl;external 'clib' name 'NWGetPacketBurstBufferCount';
-function NWGetSecurityLevel:longint;cdecl;external 'clib' name 'NWGetSecurityLevel';
-
-function NWNCPSend (functionCode:byte;
-                    sendPacket:pointer; sendLen :word;
-                    replyBuf  :pointer; replyLen:word):longint;cdecl;external 'clib' name 'NWNCPSend';
-function NWNCPSend (functionCode:byte;
-                    var sendPacket; sendLen :word;
-                    var replyBuf;   replyLen:word):longint;cdecl;external 'clib' name 'NWNCPSend';
-
-function NWSetPacketBurstBufferCount(numberOfBuffers:longint):longint;cdecl;external 'clib' name 'NWSetPacketBurstBufferCount';
-function NWSetSecurityLevel(SecurityLevel:longint):longint;cdecl;external 'clib' name 'NWSetSecurityLevel';
-
-function SetConnectionCriticalErrorHandler(func:TConnectionCriticalErrorHandler):longint;cdecl;external 'clib' name 'SetConnectionCriticalErrorHandler';
-{-nwdebug.h--------------------------------------------------------------------}
-{ library-debug flags  }
-
-const
-   CLIB_CONTEXT_CHECK = $002;   { CLib Context  }
-   CLIB_MEMCHECK      = $004;   { Memory Overwrites  }
-   CLIB_RESOURCECHECK = $020;   { Resource Check  }
-   CLIB_THREAD_CHECK  = $200;   { Thread Check  }
-   CLIB_SEMCHECK      = $080;   { Semaphore Checking  }
-   CLIB_RING_BELL     = $040;
-{ dynamic setting and clearing of breakpoints  }
-   EXECUTION_BREAKPOINT  = 0;
-   WRITE_BREAKPOINT      = 1;
-   READ_WRITE_BREAKPOINT = 3;
-
-// most of the functions are in the kernel (system), we define clib here to
-// avoid linker errors
-procedure NWClearBreakpoint(breakpoint:longint);cdecl;external 'clib' name 'NWClearBreakpoint';
-function NWSetBreakpoint(address,breakType:longint):longint;cdecl;external 'clib' name 'NWSetBreakpoint';
-function NWDebugPrintf(format:Pchar; args:array of const):longint;cdecl;external 'clib' name 'NWDebugPrintf';
-function NWDebugPrintf(format:Pchar):longint;cdecl;external 'clib' name 'NWDebugPrintf';
-function NWValidateDebugProfile:longint;cdecl;external 'clib' name 'NWValidateDebugProfile';
-procedure NWBumpFunctionCount(name:Pchar);cdecl;external 'clib' name 'NWBumpFunctionCount';
-procedure NWDisplayBinaryAtAddr(addr:pointer);cdecl;external 'clib' name 'NWDisplayBinaryAtAddr';
-procedure NWDisplayDoubleAtAddr(addr:pointer);cdecl;external 'clib' name 'NWDisplayDoubleAtAddr';
-procedure NWDisplayLConvAtAddr(lc:pointer);cdecl;external 'clib' name 'NWDisplayLConvAtAddr';
-procedure NWDisplayStringAtAddr(s:Pchar; len:longint);cdecl;external 'clib' name 'NWDisplayStringAtAddr';
-procedure NWDisplayTMAtAddr(t:pointer);cdecl;external 'clib' name 'NWDisplayTMAtAddr';
-procedure NWDisplayUnicodeAtAddr(s:pointer; len:longint);cdecl;external 'clib' name 'NWDisplayUnicodeAtAddr';
-procedure NWEnableDebugProfile(flag:longint);cdecl;external 'clib' name 'NWEnableDebugProfile';
-procedure EnterDebugger;cdecl;external 'clib' name 'EnterDebugger';
-function GetDebugSettings:longint;cdecl;external 'clib' name 'GetDebugSettings';
-procedure SetDebugSettings(Settings:longint);cdecl;external 'clib' name 'SetDebugSettings';
-function GetNLMIDFromNLMName(NLMName:PChar):longint;cdecl;external 'clib' name 'GetNLMIDFromNLMName';
-function GetDebugErrorMessage:PChar;cdecl;external 'clib' name 'GetDebugErrorMessage';
-function GetMemoryUsage(NLMID:longint):longint;cdecl;external 'clib' name 'GetMemoryUsage';
-{-nwdfs.h----------------------------------------------------------------------}
-// completion codes
-const
-   DFSFailedCompletion           = -1;
-   DFSNormalCompletion           = 0;
-   DFSInsufficientSpace          = 1;
-   DFSVolumeSegmentDeactivated   = 4;
-   DFSTruncationFailure          = 16;
-   DFSHoleInFileError            = 17;
-   DFSParameterError             = 18;
-   DFSOverlapError               = 19;
-   DFSSegmentError               = 20;
-   DFSBoundryError               = 21;
-   DFSInsufficientLimboFileSpace = 22;
-   DFSNotInDirectFileMode        = 23;
-   DFSOperationBeyondEndOfFile   = 24;
-   DFSOutOfHandles               = 129;
-   DFSHardIOError                = 131;
-   DFSInvalidFileHandle          = 136;
-   DFSNoReadPrivilege            = 147;
-   DFSNoWritePrivilege           = 148;
-   DFSFileDetached               = 149;
-   DFSInsufficientMemory         = 150;
-   DFSInvalidVolume              = 152;
-   DFSIOLockError                = 162;
-
-{$PACKRECORDS C}
-type
-   PFileMapStructure = ^TFileMapStructure;
-   TFileMapStructure = record
-     fileBlock      : longint;
-     volumeBlock    : longint;
-     numberOfBlocks : longint;
-   end;
-
-   PVolumeInformationStructure = ^TVolumeInformationStructure;
-   TVolumeInformationStructure = record
-     VolumeAllocationUnitSizeInBytes           : longint;
-     VolumeSizeInAllocationUnits               : longint;
-     VolumeSectorSize                          : longint;
-     AllocationUnitsUsed                       : longint;
-     AllocationUnitsFreelyAvailable            : longint;
-     AllocationUnitsInDeletedFilesNotAvailable : longint;
-     AllocationUnitsInAvailableDeletedFiles    : longint;
-     NumberOfPhysicalSegmentsInVolume          : longint;
-     PhysicalSegmentSizeInAllocationUnits      : array[0..63] of longint;
-   end;
-
-   PDFSCallBackParameters = ^TDFSCallBackParameters;
-   TDFSCallBackParameters = record
-     localSemaphoreHandle : longint;
-     completionCode       : longint;
-   end;
-
-{-------------------------------------------------------------------------
-  	Definition of setSizeFlags
- ------------------------------------------------------------------------- }
-
-const
-   SETSIZE_NON_SPARSE_FILE = $00000001;    // Alloc blocks to extend the file
-   SETSIZE_NO_ZERO_FILL    = $00000002;    // Do not zero fill the newly allocated blocks
-   SETSIZE_UNDO_ON_ERR     = $00000004;    // In non sparse cases truncate back to original eof if an error occurs
-   SETSIZE_PHYSICAL_ONLY   = $00000008;    // Change the physical EOF only, dont change logical EOF. This means non sparse for the expand case
-   SETSIZE_LOGICAL_ONLY    = $00000010;    // Change only the logical EOF expand will always be sparse and truncate won't free physical blocks
-
-function DFSclose(fileHandle:longint):longint;cdecl;external 'clib' name 'DFSclose';
-function DFScreat(fileName:Pchar; permission,flagBits:longint):longint;cdecl;external 'clib' name 'DFScreat';
-function DFSExpandFile(fileHandle,fileBlockNumber,
-                       numberOfBlocks,volumeBlockNumber,segmentNumber:longint):longint;cdecl;external 'clib' name 'DFSExpandFile';
-function DFSFreeLimboVolumeSpace(volumeNumber,numberOfBlocks:longint):longint;cdecl;external 'clib' name 'DFSFreeLimboVolumeSpace';
-function DFSsopen(fileName:PChar; access,share,permission,flagBits,dataStream:longint):longint;cdecl;external 'clib' name 'DFSsopen';
-function DFSRead(fileHandle,startingSector,sectorCount:longint; buffer:pointer):longint;cdecl;external 'clib' name 'DFSRead';
-function DFSRead(fileHandle,startingSector,sectorCount:longint; var buffer):longint;cdecl;external 'clib' name 'DFSRead';
-function DFSReadNoWait(fileHandle,startingSector,sectorCount:longint; buffer:pointer; callBackNode:PDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSReadNoWait';
-function DFSReadNoWait(fileHandle,startingSector,sectorCount:longint; var buffer; var callBackNode:TDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSReadNoWait';
-function DFSReturnFileMappingInformation(fileHandle,startingBlockNumber:longint; numberOfEntries:Plongint; tableSize:longint; table:PFileMapStructure):longint;cdecl;external 'clib' name 'DFSReturnFileMappingInformation';
-function DFSReturnFileMappingInformation(fileHandle,startingBlockNumber:longint; var numberOfEntries:longint; tableSize:longint; var table:TFileMapStructure):longint;cdecl;external 'clib' name 'DFSReturnFileMappingInformation';
-function DFSReturnVolumeBlockInformation(volumeNumber,startingBlockNumber,numberOfBlocks:longint; buffer:Pointer):longint;cdecl;external 'clib' name 'DFSReturnVolumeBlockInformation';
-function DFSReturnVolumeBlockInformation(volumeNumber,startingBlockNumber,numberOfBlocks:longint; var buffer):longint;cdecl;external 'clib' name 'DFSReturnVolumeBlockInformation';
-function DFSReturnVolumeMappingInformation(volumeNumber:longint; volumeInformation:PVolumeInformationStructure):longint;cdecl;external 'clib' name 'DFSReturnVolumeMappingInformation';
-function DFSSetDataSize (handle:longint; newFileSize:int64; setSizeFlags:longint):longint; cdecl;external 'clib' name 'DFSSetDataSize';
-function DFSSetEndOfFile(handle,newFileSize,returnTruncatedBlocksFlag:longint):longint;cdecl;external 'clib' name 'DFSSetEndOfFile';
-function DFSWrite(fileHandle,startingSector,sectorCount:longint; buffer:pointer):longint;cdecl;external 'clib' name 'DFSWrite';
-function DFSWrite(fileHandle,startingSector,sectorCount:longint; var buffer):longint;cdecl;external 'clib' name 'DFSWrite';
-function DFSWriteNoWait(fileHandle,startingSector,sectorCount:longint; buffer:pointer; callBackNode:PDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSWriteNoWait';
-function DFSWriteNoWait(fileHandle,startingSector,sectorCount:longint; var buffer; var callBackNode:TDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSWriteNoWait';
-{-nwdos.h----------------------------------------------------------------------}
-{$include npackon.inc}
-type
-   Pfind_t = ^Tfind_t;
-   Tfind_t = record
-        reserved : array[0..20] of char;
-        attrib : char;
-        wr_time : word;
-        wr_date : word;
-        size : longint;
-        name : array[0..12] of char;
-     end;
-
-{$include npackoff.inc}
-
-function DOSChangeFileMode(name:Pchar; attributes:Plongint; _function:longint; newAttributes:longint):longint;cdecl;external 'clib' name 'DOSChangeFileMode';
-function DOSClose(handle:longint):longint;cdecl;external 'clib' name 'DOSClose';
-function DOSCopy(NetWareFileName,DOSFileName:Pchar):longint;cdecl;external 'clib' name 'DOSCopy';
-function DOSCreate(fileName:Pchar; handle:Plongint):longint;cdecl;external 'clib' name 'DOSCreate';
-function DOSCreate(fileName:Pchar; var handle:longint):longint;cdecl;external 'clib' name 'DOSCreate';
-function DOSsopen(filename:Pchar; access,share,permission:longint):longint;cdecl;external 'clib' name 'DOSsopen';
-function DOSFindFirstFile(fileName:Pchar; searchAttributes:word; diskTransferAddress:Pfind_t):longint;cdecl;external 'clib' name 'DOSFindFirstFile';
-function DOSFindNextFile(diskTransferAddress:Pfind_t):longint;cdecl;external 'clib' name 'DOSFindNextFile';
-function DOSMkdir(__dirName:Pchar):longint;cdecl;external 'clib' name 'DOSMkdir';
-function DOSOpen(fileName:Pchar; handle:Plongint):longint;cdecl;external 'clib' name 'DOSOpen';
-function DOSOpen(fileName:Pchar; var handle:longint):longint;cdecl;external 'clib' name 'DOSOpen';
-function DOSPresent:longint;cdecl;external 'clib' name 'DOSPresent';
-function DOSRead(handle,fileOffset:longint; buffer:pointer; numberOfBytesToRead:longint; numberOfBytesRead:Plongint):longint;cdecl;external 'clib' name 'DOSRead';
-function DOSRead(handle,fileOffset:longint; var buffer; numberOfBytesToRead:longint; var numberOfBytesRead:longint):longint;cdecl;external 'clib' name 'DOSRead';
-function DOSRemove(name:Pchar):longint;cdecl;external 'clib' name 'DOSRemove';
-function DOSRename(srcName,dstName:Pchar):longint;cdecl;external 'clib' name 'DOSRename';
-function DOSRmdir(Name:Pchar):longint;cdecl;external 'clib' name 'DOSRmdir';
-function DOSSetDateAndTime(handle,date,time:longint):longint;cdecl;external 'clib' name 'DOSSetDateAndTime';
-procedure DOSShutOffFloppyDrive;cdecl;external 'clib' name 'DOSShutOffFloppyDrive';
-function DOSUnlink(Name:Pchar):longint;cdecl;external 'clib' name 'DOSUnlink';
-function DOSWrite(handle,fileOffset:longint; buffer:pointer; numberOfBytesToWrite:longint; numberOfBytesWritten:Plongint):longint;cdecl;external 'clib' name 'DOSWrite';
-function DOSWrite(handle,fileOffset:longint; var buffer; numberOfBytesToWrite:longint; var numberOfBytesWritten:longint):longint;cdecl;external 'clib' name 'DOSWrite';
-{-nwfattr.h--------------------------------------------------------------------}
-const
-   NWSH_PRE_401D_COMPAT = $80000000;  // for multiple thread use, see documentation for sopen()...
-{ Attribute values for use with existing files                              }
-{ Normal (read/write) file         }
-   _A_NORMAL             = $00000000;
-   _A_RDONLY             = $00000001;
-   _A_HIDDEN             = $00000002;
-   _A_SYSTEM             = $00000004;
-   _A_EXECUTE            = $00000008;
-   _A_VOLID              = $00000008;  // Volume ID entry
-   _A_SUBDIR             = $00000010;
-   _A_ARCH               = $00000020;
-   _A_SHARE              = $00000080;
-   _A_NO_SUBALLOC        = $00000800;  // Don't sub alloc. this file
-   _A_TRANS              = $00001000;  // Transactional file (TTS usable)
-   _A_READAUD            = $00004000;  // Read audit
-   _A_WRITAUD            = $00008000;  // Write audit
-   _A_IMMPURG            = $00010000;  // Immediate purge
-   _A_NORENAM            = $00020000;  // Rename inhibit
-   _A_NODELET            = $00040000;  // Delete inhibit
-   _A_NOCOPY             = $00080000;  // Copy inhibit
-   _A_FILE_MIGRATED      = $00400000;  // File has been migrated
-   _A_DONT_MIGRATE       = $00800000;  // Don't migrate this file
-   _A_IMMEDIATE_COMPRESS = $02000000;  // Compress this file immediately
-   _A_FILE_COMPRESSED    = $04000000;  // File is compressed
-   _A_DONT_COMPRESS      = $08000000;  // Don't compress this file
-   _A_CANT_COMPRESS      = $20000000;  // Can't compress this file
-   _A_ATTR_ARCHIVE       = $40000000;  // Entry has had an EA modified
-                                       // an ownerID changed, or trustee
-                                       // info changed, etc.
-
-// Attribute values usable during file creation
-// Use: OR value with the file mode value to initialize the mode parameter
-   FA_NORMAL  = _A_NORMAL shl 16;
-   FA_RDONLY  = _A_RDONLY shl 16;
-   FA_HIDDEN  = _A_HIDDEN shl 16;
-   FA_SYSTEM  = _A_SYSTEM shl 16;
-   FA_EXECUTE = _A_EXECUTE shl 16;
-   FA_SUBDIR  = _A_SUBDIR shl 16;
-   FA_ARCHIVE = _A_ARCH shl 16;
-   FA_SHARE   = _A_SHARE shl 16;
-{ Extended file attributes values  }
-   FA_TRANSAC = _A_TRANS shl 12;
-   FA_READAUD = _A_READAUD shl 12;
-   FA_WRITEAUD= _A_WRITAUD shl 12;
-   FA_IMMPURG = _A_IMMPURG shl 12;
-   FA_NORENAM = _A_NORENAM shl 12;
-   FA_NODELET = _A_NODELET shl 12;
-   FA_NOCOPY  = _A_NOCOPY shl 12;
-{ Sharing values for sharable open functions  }
-{ compatibility mode    }
-   SH_COMPAT = $00;
-{ deny read/write mode  }
-   SH_DENYRW = $10;
-{ deny write mode       }
-   SH_DENYWR = $20;
-{ deny read mode        }
-   SH_DENYRD = $30;
-{ deny none mode        }
-   SH_DENYNO = $40;
-{ FEcreat/FEsopen flagBits parameter values used when creating a file  }
-   DELETE_FILE_ON_CREATE_BIT        = $0001;
-   NO_RIGHTS_CHECK_ON_CREATE_BIT    = $0002;
-{ FEsopen flagBits parameter values used when opening a file  }
-   FILE_WRITE_THROUGH_BIT           = $00000040;
-   ENABLE_IO_ON_COMPRESSED_DATA_BIT = $00000100;
-   LEAVE_FILE_COMPRESSED_DATA_BIT   = $00000200;
-   DELETE_FILE_ON_CLOSE_BIT         = $00000400;
-   NO_RIGHTS_CHECK_ON_OPEN_BIT      = $00010000;
-   OK_TO_OPEN_DOS_FILE              = $80000000;
-{ Volume Flags used with NWGetVolumeFlags and NWSetVolumeFlags  }
-   SUB_ALLOCATION_FLAG         = $02;  // if set sub allocation units valid on this volume
-   FILE_COMPRESSION_FLAG       = $04;  // if set file compression enabled on this volume
-   DATA_MIGRATION_FLAG         = $08;  // if set data migration is allowed on this volume
-   VOLUME_IMMEDIATE_PURGE_FLAG = $40;  // if set volume is marked as immediate purge
-{ Name space values  }
-   DOSNameSpace      = 0;
-   MACNameSpace      = 1;
-   NFSNameSpace      = 2;
-   FTAMNameSpace     = 3;
-   OS2NameSpace      = 4;
-   LONGNameSpace     = 4;
-   NTNameSpace       = 5;
-   MAX_NAMESPACES    = 6;
-   NWDOS_NAME_SPACE  = DOSNameSpace;
-   NWMAC_NAME_SPACE  = MACNameSpace;
-   NWNFS_NAME_SPACE  = NFSNameSpace;
-   NWFTAM_NAME_SPACE = FTAMNameSpace;
-   NWOS2_NAME_SPACE  = OS2NameSpace;
-   NWLONG_NAME_SPACE = LONGNameSpace;
-   NWNT_NAME_SPACE   = NTNameSpace;
-{ Data stream values  }
-   PrimaryDataStream = 0;
-   MACResourceForkDataStream = 1;
-   FTAMStructuringDataStream = 2;
-{ File path length values  }
-   _MAX_PATH = 255;           // maximum length of full pathname
-   _MAX_SERVER = 48;          // maximum length of server name
-   _MAX_VOLUME = 16;          // maximum length of volume component
-   _MAX_DRIVE  = 3;           // maximum length of drive component
-   _MAX_DIR    = 255;         // maximum length of path component
-   _MAX_FNAME  = 9;           // maximum length of file name component
-   _MAX_EXT    = 5;           // maximum length of extension component
-   _MAX_NAME   = 13;          // maximum length of file name
-   NAME_MAX    = 12;          // maximum length of file name (alternate view)
-   
-{ Modify structure mask values  }
-   MModifyNameBit = $0001;
-   MFileAttributesBit = $0002;
-   MCreateDateBit = $0004;
-   MCreateTimeBit = $0008;
-   MOwnerIDBit = $0010;
-   MLastArchivedDateBit = $0020;
-   MLastArchivedTimeBit = $0040;
-   MLastArchivedIDBit = $0080;
-   MLastUpdatedDateBit = $0100;
-   MLastUpdatedTimeBit = $0200;
-   MLastUpdatedIDBit = $0400;
-   MLastAccessedDateBit = $0800;
-   MInheritanceRestrictionMaskBit = $1000;
-   MMaximumSpaceBit = $2000;
-   MLastUpdatedInSecondsBit = $4000;
-{$include npackon.inc}
-type
-   PModifyStructure = ^TModifyStructure;
-   TModifyStructure = record
-        MModifyName : PBYTE;
-        MFileAttributes : longint;
-        MFileAttributesMask : longint;
-        MCreateDate : word;
-        MCreateTime : word;
-        MOwnerID : longint;
-        MLastArchivedDate : word;
-        MLastArchivedTime : word;
-        MLastArchivedID : longint;
-        MLastUpdatedDate : word;
-        MLastUpdatedTime : word;
-        MLastUpdatedID : longint;
-        MLastAccessedDate : word;
-        MInheritanceGrantMask : word;
-        MInheritanceRevokeMask : word;
-        MMaximumSpace : longint;
-        MLastUpdatedInSeconds : longint;
-     end;
-
-{$include npackoff.inc}
-
-{-nwadv.h----------------------------------------------------------------------}
-{$include npackon.inc}
-{ Resource tag signatures for AllocateResourceTag  }
-
-const
-   AllocSignature = $54524C41;
-   AESProcessSignature = $50534541;
-   CacheNonMovableMemorySignature = $544D4E43;
-   ConsoleCommandSignature = $4D4F4343;
-   HardwareInterruptSignature = $50544E49;
-   InterruptTimeCallBackSignature = $524D4954;
-   SemiPermMemorySignature = $454D5053;
-   DebuggerSignature = $47554244;
-   BreakpointSignature = $54504B42;
-{ Data structure for RegisterConsoleCommand  }
-{ set by RegisterConsoleCommand  }
-{ parsing routing (user defined)  }
-{ set to resource tag  }
-type
-   PcommandParserStructure = ^TcommandParserStructure;
-   TcommandParserStructure = record
-        Link : PcommandParserStructure;
-        parseRoutine : function (screenID:longint; commandLine:PBYTE):longint;cdecl;
-        RTag : longint;
-     end;
-
-{
-   Structures and constants for RegisterForEvent function. Unless otherwise
-   noted an event does NOT call a Warn routine.
- }
-
-const
-   EVENT_VOL_SYS_MOUNT = 0;
-{ parameter is undefined. Report Routine will be called immediately 
-      after vol SYS has been mounted.
-     }
-   EVENT_VOL_SYS_DISMOUNT = 1;
-{ parameter is undefined. Warn Routine and Report Routine will be
-      called before vol SYS is dismounted.
-     }
-   EVENT_ANY_VOL_MOUNT = 2;
-{ parameter is volume number. Report Routine will be called immediately
-      after any volume is mounted.
-     }
-   EVENT_ANY_VOL_DISMOUNT = 3;
-{ parameter is volume number. Warn Routine and Report Routine will be
-      called before any volume is dismounted.
-     }
-   EVENT_DOWN_SERVER = 4;
-{ parameter is undefined. Warn Routine and Report Routine will be
-      called before the server is shut down.
-     }
-   EVENT_EXIT_TO_DOS = 7;
-{ parameter is undefined. The Report Routine will be called before the
-      server exits to DOS.
-     }
-   EVENT_MODULE_UNLOAD = 8;
-{ parameter is module handle. Warn Routine and Report Routine will be
-      called when a module is unloaded from the console command line. Only
-      the Report Routine will be called when a module unloads itself.
-     }
-   EVENT_CLEAR_CONNECTION = 9;
-{ parameter is connection number. Report Routine is called before the
-      connection is cleared.
-     }
-   EVENT_LOGIN_USER = 10;
-{ parameter is connection number. Report Routine is called after the
-      connection has been allocated.
-     }
-   EVENT_CREATE_BINDERY_OBJ = 11;
-{ parameter is object ID. Report Routine is called after the object is
-      created and entered in the bindery.
-     }
-   EVENT_DELETE_BINDERY_OBJ = 12;
-{ parameter is object ID. Report Routine is called before the object is
-      removed from the bindery.
-     }
-   EVENT_CHANGE_SECURITY = 13;
-{ parameter is a pointer a structure of type EventSecurityChangeStruct.
-      Report Routine is called after a security
-      equivalence change has occurred.
-     }
-   EVENT_ACTIVATE_SCREEN = 14;
-{ Parameter is screen ID. Report routine is called after the
-      screen becomes the active screen.
-     }
-   EVENT_UPDATE_SCREEN = 15;
-{ Parameter is screen ID. Report routine is called after a change is
-      made to the screen image.
-     }
-   EVENT_UPDATE_CURSOR = 16;
-{ Parameter is screen ID. Report routine is called after a change to
-      the cursor position or state occurs.
-     }
-   EVENT_KEY_WAS_PRESSED = 17;
-{ Parameter is undefined. Report routine is called whenever a
-      key on the keyboard is pressed (including shift/alt/control).
-      This routine is called at interrupt time.
-     }
-   EVENT_DEACTIVATE_SCREEN = 18;
-{ Parameter is screen ID. Report routine is called when the
-      screen becomes inactive.
-     }
-   EVENT_TRUSTEE_CHANGE = 19;
-{ Parameter is a pointer to type struct EventTrusteeChangeStruct. The
-      report routine is called everytime there is a change to a trustee in
-      the file system. Shouldn't sleep.
-     }
-   EVENT_OPEN_SCREEN = 20;
-{ Parameter is the screen ID for the newly created screen. The report
-      routine will be called after the screen is created.
-     }
-   EVENT_CLOSE_SCREEN = 21;
-{ Parameter is the screen ID for the screen that will be closed. The
-      report routine will be called before the screen is closed.
-     }
-   EVENT_MODIFY_DIR_ENTRY = 22;
-{ Parameter is a pointer to a structure of type EventModifyDirEntryStruct
-      which contains the modify information. The report routine will be 
-      called right after the entry is changed but before the directory
-      entry is unlocked. The report routine must not go to sleep. 
-     }
-   EVENT_NO_RELINQUISH_CONTROL = 23;
-{ Parameter is the running process. This will be called when the
-      timer detects that a process is hogging the processor. The report
-      routine must not sleep.
-     }
-   EVENT_THREAD_SWITCH = 25;
-{ Parameter is the threadID of the thread that was executing when the
-      thread switch occurred. The report routine will be called when the
-      new thread begins executing. The report routine must not go to sleep.
-     }
-   EVENT_MODULE_LOAD = 27;
-{ parameter is module handle. The report routine will be called
-      after a module has loaded.
-     }
-   EVENT_CREATE_PROCESS = 28;
-{ parameter is the PID of the process being created. It is called
-      after the process is created. The report routine may not sleep.
-     }
-   EVENT_DESTROY_PROCESS = 29;
-{ parameter is the PID of the process being destroyed. It is called
-      before the process is actually destroyed. The report routine may not
-      sleep.
-     }
-   EVENT_NEW_PUBLIC = 32;
-{ Parameter is a pointer to a length preceded string which is the name
-      of the new public entry point. This event may not sleep.
-     }
-   EVENT_PROTOCOL_BIND = 33;
-{ Parameter is a pointer to a structure of type EventProtocolBindStruct.
-      This event is generated every time a board is bound to a protocol.
-      This event may sleep.
-     }
-   EVENT_PROTOCOL_UNBIND = 34;
-{ Parameter is a pointer to a structure of type EventProtocolBindStruct.
-      This event is generated every time a board is unbound from a protocol.
-      This event may sleep.
-     }
-   EVENT_ALLOCATE_CONNECTION = 37;
-{ parameter is connection number. Report Routine is called after the
-      connection is allocated.
-     }
-   EVENT_LOGOUT_CONNECTION = 38;
-{ parameter is connection number. Report Routine is called before the
-      connection is logged out. The event handler may sleep.
-     }
-   EVENT_MLID_REGISTER = 39;
-{ parameter is board number. Report Routine is called after the MLID
-      is registered.
-     }
-   EVENT_MLID_DEREGISTER = 40;
-{ parameter is board number. Report Routine is called before the MLID
-      is deregistered.
-     }
-   EVENT_DATA_MIGRATION = 41;
-{ Parameter is a pointer to a structure of type EventDateMigrationInfo.
-      This event is generated when a file's data has been migrated.
-    }
-   EVENT_DATA_DEMIGRATION = 42;
-{ Parameter is a pointer to a structure of type EventDateMigrationInfo.
-      This event is generated when a file's data has been de-migrated.
-    }
-   EVENT_QUEUE_ACTION = 43;
-{   Parameter is a pointer to a structure of type EventQueueNote.
-      This event is generated when a queue is activated, deactivated,
-      created, or deleted.
-    }
-   EVENT_NETWARE_ALERT = 44;
-{ Parameter is a pointer to a structure of type EventNetwareAlertStruct.
-      This event is generated anytime the following alert calls are
-      made:
-              NetWareAlert        NW 4.X
-     
-        The report routine may sleep.
-     }
-   EVENT_CREATE_OBJECT = 46;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_DELETE_OBJECT = 47;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_RENAME_OBJECT = 48;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_VALUE_CHANGE = 49;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_CLOSE_FILE = 50;
-{ Parameter is a pointer to a structure of type EventCloseFileInfo.  }
-   EVENT_CHANGE_TIME = 51;
-{ This event is given when the time is changed or when Time
-      Synchronization schedules a nonuniform adjustment. The parameter is
-      the UTC time (in seconds) before the time change. The current time
-      is available from the OS. Since you have no way of knowing the
-      magnitudue of the time change, nor whether it has taken place or is
-      scheduled for the next clock interrupt, you must detect the time
-      change on your own. In general, if current time is less than old
-      time, or at least two seconds ahead of old time, then the time change
-      has been applied. You must wait for one of those conditions to be
-      sure that the time change has "settled down" before you can assume
-      that the event has "happened."
-     }
-   EVENT_MOVE_OBJECT = 52;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_VALUE_ADD = 53;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_VALUE_DEL = 54;
-{ Parameter is a pointer to a structure of type EventBinderyObject
-      or EventDSObject
-     }
-   EVENT_DM_KEY_MODIFIED = 55;
-{ Parameter is a pointer to a structure of type EventDMKeyModified
-     }
-   EVENT_MODULE_UNLOADED = 56;
-{ Parameter is module handle. Report Routine will be called after the
-      NLM's exit routine has been called, after his resources have been
-      returned to the OS, and after he has been unlinked from the OS's lists.
-      The only thing left of this NLM is the memory for his load definition
-      structure, data image, and code image.
-     }
-   EVENT_REMOVE_PUBLIC = 57;
-{ Parameter is the address of the public entry point. This only happens
-      on module unload.
-     }
-   EVENT_DS_EVENT = 58;
-{ Parameter is the address of a DS defined event structure   }
-   EVENT_UNICODE = 59;
-{ Parameter is the address of a UNICODE defined event structure  }
-   EVENT_SFT3_SERVER_STATE = 60;
-{ Parameter is the ServerState Number
-      (Refer to messtype.h, server state codes)
-      IOEngineState                          0
-      PrimaryNoSecondaryState                1
-      PrimarySyncingWithSecondaryState       2
-      PrimaryTransferingMemoryImageState     3
-      PrimaryWithSecondaryState              4
-      SecondaryTransferingMemoryImageState   5
-      SecondaryMirroredState                 6
-    }
-   EVENT_SFT3_IMAGE_STATE = 61;
-{ Parameter is memory mirror state  }
-{ 0 = Not mirrored  }
-{ 1 = Mirrored  }
-   EVENT_SFT3_PRESYNC_STATE = 62;
-{ called when the primary is about ready to synchronize  }
-{ with the secondary   }
-{ Parameter is unsed for now.  }
-{ This event report is allowed to sleep  }
-   EVENT_ALTERNATE_MOUNT_VOLUME = 63;
-{ called when NetWare is not aware of the volume name to be mounted,  }
-{ Parameter is used to pass a event structure EventAlternateMountVolume. }
-{ This event report is allowed to sleep, also the return code is in the  }
-{ structre, after it has been processed.  }
-   EVENT_CONSOLE_CONFIG_COMMAND = 64;
-{ called when the console command CONFIG is typed on the server command  }
-{ line. The event report is allowed to sleep.  The console screen handle  }
-{ pointer is passed as the only parameter  }
-   EVENT_CONSOLE_VERSION_COMMAND = 65;
-{ called when the console command VERSION is typed on the server command  }
-{ line. The event report is allowed to sleep.  A pointer to the structure  }
-{ struct EventConfigVersionCmdInfo to help in the displaying to the screen  }
-   EVENT_PRE_LOAD_NLM = 66;
-{ called while an NLM is being loaded but before most of the work is
-      done. The data and code segments have not been allocated yet. The
-      event report is allowed to sleep. The parameter is a pointer to an
-      NLM Load File Header structure.
-     }
-   EVENT_LOW_MEMORY = 67;
-{ called when the cache memory allocator tries to allocate a cache block
-      and fails; only one event per minute will be generated. It happens
-      in conjunction with the netware alert. The event report can block.
-      The parameter is a zero. This event is mainly for OS2 based NetWare
-      so it can try to borrow memory back from OS2.
-     }
-{----------------------------------------------------------- 
-     Flags for the trustee change event (EVENT_TRUSTEE_CHANGE)   
-     ----------------------------------------------------------- }
-   EVENT_NEW_TRUSTEE = 1;
-   EVENT_REMOVE_TRUSTEE = 2;
-{------------------------------------------------------------- 
-     Flags for the change security event (EVENT_CHANGE_SECURITY)   
-     ------------------------------------------------------------- }
-   EVENT_ADD_EQUIVALENCE = 1;
-   EVENT_REMOVE_EQUIVALENCE = 2;
-{---------------------------------------------- 
-     Structure returned for EVENT_TRUSTEE_CHANGE    
-     ---------------------------------------------- }
-{ flags are EVENT_NEW_TRUSTEE and EVENT_REMOVE_TRUSTEE  }
-type
-   PEventTrusteeChangeStruct = ^TEventTrusteeChangeStruct;
-   TEventTrusteeChangeStruct = record
-        objectID : longint;
-        entryID : longint;
-        volumeNumber : longint;
-        changeFlags : longint;
-        newRights : longint;
-     end;
-
-{----------------------------------------------- 
-     Structure returned for EVENT_CHANGE_SECURITY    
-     ----------------------------------------------- }
-{ EVENT_ADD_EQUIVALENCE and EVENT_REMOVE_EQUIVALENCE  }
-   PEventSecurityChangeStruct = ^TEventSecurityChangeStruct;
-   TEventSecurityChangeStruct = record
-        objectID : longint;
-        equivalentID : longint;
-        changeFlags : longint;
-     end;
-
-{------------------------------------------------ 
-     Structure returned for EVENT_MODIFY_DIR_ENTRY    
-     ------------------------------------------------ }
-   PEventModifyDirEntryStruct = ^TEventModifyDirEntryStruct;
-   TEventModifyDirEntryStruct = record
-        primaryDirectoryEntry : longint;
-        nameSpace : longint;
-        modifyBits : longint;
-        modifyVector : PModifyStructure;
-        volumeNumber : longint;
-        directoryEntry : longint;
-     end;
-
-{---------------------------------------------------- 
-     Structure returned for EVENT_PROTOCOL_BIND & UNBIND  
-     ---------------------------------------------------- }
-   PEventProtocolBindStruct = ^TEventProtocolBindStruct;
-   TEventProtocolBindStruct = record
-        boardNumber : longint;
-        protocolNumber : longint;
-     end;
-
-{---------------------------------------------------------- 
-     Structure returned for EVENT_DATA_MIGRATION & DEMIGRATION  
-     ---------------------------------------------------------- }
-{ 255 + 1 len byte  }
-   PEventDateMigrationInfo = ^TEventDateMigrationInfo;
-   TEventDateMigrationInfo = record
-        FileSystemTypeID : longint;
-        Volume : longint;
-        DOSDirEntry : longint;
-        OwnerDirEntry : longint;
-        OwnerNameSpace : longint;
-        OwnerFileName : array[0..255] of byte;
-     end;
-
-{------------------------------------------------ 
-     Structure returned for EVENT_QUEUE_ACTION        
-     ------------------------------------------------ }
-{ 0=created, 1=deleted, 2 = activated, 3 = deactivated  }
-   PEventQueueNote = ^TEventQueueNote;
-   TEventQueueNote = record
-        QAction : longint;
-        QID : longint;
-        QName : array[0..49] of byte;
-     end;
-
-{------------------------------------------------ 
-     Structure returned for EVENT_NETWARE_ALERT       
-     ------------------------------------------------ }
-   PEventNetwareAlertStruct = ^TEventNetwareAlertStruct;
-   TEventNetwareAlertStruct = record
-        alertFlags : longint;
-        alertId : longint;
-        alertLocus : longint;
-        alertClass : longint;
-        alertSeverity : longint;
-        targetStationCount : longint;
-        targetStationList : array[0..31] of longint;
-        targetNotificationBits : longint;
-        alertParmCount : longint;
-        alertDataPtr : pointer;
-        NetWorkManagementAttributePointer : pointer;
-        alertUnused : array[0..1] of longint;
-        alertControlStringMessageNumber : longint;
-        alertControlString : array[0..255] of byte;
-        alertParameters : array[0..(256 + 256)-1] of byte;
-        alertModuleName : array[0..35] of byte;
-        alertModuleMajorVersion : longint;
-        alertModuleMinorVersion : longint;
-        alertModuleRevision : longint;
-     end;
-
-{ set to 'BIND' for bindery  }
-   PEventBinderyObject = ^TEventBinderyObject;
-   TEventBinderyObject = record
-        EventObjectType : longint;
-        ObjectID : longint;
-        ObjectType : longint;
-     end;
-
-{ 'DNIB'  }
-
-const
-   EventBinderySignature = $444e4942;
-{ 'CVSD'  }
-   EventDSSignature = $43565344;
-{ set to 'DSVC' for directory services  }
-{ add, delete, etc.  }
-{ DS defined entry structure  }
-type
-   PEventDSObject = ^TEventDSObject;
-   TEventDSObject = record
-        EventObjectType : longint;
-        EventType : longint;
-        entry : pointer;
-     end;
-
-   PEventCloseFileInfo = ^TEventCloseFileInfo;
-   TEventCloseFileInfo = record
-        fileHandle : longint;
-        station : longint;
-        task : longint;
-        fileHandleFlags : longint;
-        completionCode : longint;
-     end;
-
-   TreportProcedure = procedure (parameter:longint; userParameter:longint); cdecl;
-   TOutputRoutine   = procedure (controlString:pointer; args:array of const); cdecl;
-   TWarnProcedure   = function  (OutputRoutine:TOutputRoutine; parameter,userParameter:longint):longint; cdecl;
-
-{ struct EventCloseFileInfo's fileHandleFlags  }
-
-const
-   ECNotReadableBit = $00000001;
-   ECNotWriteableBit = $00000002;
-   ECWrittenBit = $00000004;
-   ECDetachedBit = $00000008;
-   ECDirectFileSystemBit = $00000020;
-   ECFileWriteThroughBit = $00000040;
-{$include npackoff.inc}
-
-function AllocateResourceTag (NLMHandle:longint;
-                              descriptionString:PChar;
-                              resourceType:longint):longint;cdecl;external 'clib' name 'AllocateResourceTag';
-function DSAllocateEventTag (DSEventSignature:longint):pointer;cdecl;external 'clib' name 'DSAllocateEventTag';
-function GetCurrentOSLanguageID:longint;cdecl;external 'clib' name 'GetCurrentOSLanguageID';
-function GetFileHoleMap (handle:longint;
-                         startingPosition:longint;
-                         numberOfBlocks:longint;
-                         replyBitMapP:PBYTE;
-                         allocationUnitSizeP:Plongint):longint;cdecl;external 'clib' name 'GetFileHoleMap';
-function GetFileHoleMap (handle:longint;
-                         startingPosition:longint;
-                         numberOfBlocks:longint;
-                         var replyBitMapP;
-                         var allocationUnitSizeP:longint):longint;cdecl;external 'clib' name 'GetFileHoleMap';
-function GetSetableParameterValue (connectionNumber:longint;
-                                   setableParameterString:PChar;
-                                   returnValue:pointer):longint;cdecl;external 'clib' name 'GetSetableParameterValue';
-function GetSettableParameterValue (connectionNumber:longint;
-                                    setableParameterString:PBYTE;
-                                    returnValue:pointer):longint;cdecl;external 'clib' name 'GetSetableParameterValue';  // use this define if the misspelling is too annoying
-function GetThreadDataAreaPtr:pointer;cdecl;external 'clib' name 'GetThreadDataAreaPtr';
-function ImportSymbol(NLMHandle:longint; symbolName:Pchar):pointer;cdecl;external 'clib' name 'ImportSymbol';
-function LoadLanguageMessageTable(messageTable:PPPchar; messageCount:Plongint; languageID:Plongint):longint;cdecl;external 'clib' name 'LoadLanguageMessageTable';
-function LoadLanguageMessageTable(var messageTable; var messageCount:longint; languageID:Plongint):longint;cdecl;external 'clib' name 'LoadLanguageMessageTable';
-function NWAddSearchPathAtEnd(searchPath:PChar; number:Plongint):longint;cdecl;external 'clib' name 'NWAddSearchPathAtEnd';
-function NWAddSearchPathAtEnd(searchPath:PChar; var number:longint):longint;cdecl;external 'clib' name 'NWAddSearchPathAtEnd';
-function NWDeleteSearchPath(searchPathNumber:longint):longint;cdecl;external 'clib' name 'NWDeleteSearchPath';
-function NWGetSearchPathElement (searchPathNumber:longint;
-                                 isDOSSearchPath:Plongint;
-                                 searchPath:PChar):longint;cdecl;external 'clib' name 'NWGetSearchPathElement';
-function NWGetSearchPathElement (searchPathNumber:longint;
-                                 var isDOSSearchPath:boolean;
-                                 searchPath:PChar):longint;cdecl;external 'clib' name 'NWGetSearchPathElement';
-function NWInsertSearchPath(searchPathNumber:longint; path:PChar):longint;cdecl;external 'clib' name 'NWInsertSearchPath';
-function RegisterConsoleCommand(newCommandParser:PcommandParserStructure):longint;cdecl;external 'clib' name 'RegisterConsoleCommand';
-function RegisterForEvent (eventType:longint;
-                           reportProcedure:TreportProcedure;
-                           warnProcedure:TwarnProcedure):longint;cdecl;external 'clib' name 'RegisterForEvent';
-function RenameLanguage (languageID:longint;
-                         newLanguageName:PChar;
-                         showErrorsToConsole:longint):longint;cdecl;external 'clib' name 'RenameLanguage';
-function ReturnLanguageName(languageID:longint; languageName:PChar):longint;cdecl;external 'clib' name 'ReturnLanguageName';
-procedure SaveThreadDataAreaPtr(threadDataAreaPtr:pointer);cdecl;external 'clib' name 'SaveThreadDataAreaPtr';
-    { -1 for all, COMMUNICATIONS, MEMORY, etc  }
-    { 0 for first time  }
-    { 0 = number, 1 = boolean, 2 = time ticks., etc  }
-    { STARTUP, HIDE, etc  }
-    { COMMUNICATIONS, MEMORY, etc  }
-    { description string  }
-function ScanSetableParameters (scanCategory:longint;
-                                scanSequence:Plongint;
-                                rParameterName:PBYTE;
-                                rType:Plongint;
-                                rFlags:Plongint;
-                                rCategory:Plongint;
-                                rParameterDescription:pointer;
-                                rCurrentValue:pointer;
-                                rLowerLimit:Plongint;
-                                rUpperLimit:Plongint):longint;cdecl;external 'clib' name 'ScanSetableParameters';
-function SetCurrentOSLanguageID(newLanguageID:longint):longint;cdecl;external 'clib' name 'SetCurrentOSLanguageID';
-function SetSetableParameterValue (connectionNumber:longint;
-                                   setableParameterString:PBYTE;
-                                   newValue:pointer):longint;cdecl;external 'clib' name 'SetSetableParameterValue';
-procedure SynchronizeStart;cdecl;external 'clib' name 'SynchronizeStart';
-function UnimportSymbol (NLMHandle:longint;
-                         symbolName:Pchar):longint;cdecl;external 'clib' name 'UnimportSymbol';
-function UnRegisterConsoleCommand (commandParserToDelete:PcommandParserStructure):longint;cdecl;external 'clib' name 'UnRegisterConsoleCommand';
-function UnregisterForEvent (eventHandle:longint):longint;cdecl;external 'clib' name 'UnregisterForEvent';
-{-nwfileio.h-------------------------------------------------------------------}
-type
-   PcacheBufferStructure = ^TcacheBufferStructure;
-   TcacheBufferStructure = record
-        cacheBufferPointer : Pchar;
-        cacheBufferLength  : longint;
-        completionCode     : longint;
-     end;
-   TT_cacheBufferStructure = TcacheBufferStructure;
-   PT_cacheBufferStructure = ^TT_cacheBufferStructure;
-
-   PmwriteBufferStructure = ^TmwriteBufferStructure;
-   TmwriteBufferStructure = record
-        mwriteBufferPointer : Pchar;
-        mwriteBufferLength  : longint;
-        reserved            : longint;
-     end;
-   TT_mwriteBufferStructure = TmwriteBufferStructure;
-   PT_mwriteBufferStructure = ^TT_mwriteBufferStructure;
-
-{ NetWare additions to POSIX...  }
-
-function filelength(fildes:longint):longint;cdecl;external 'clib' name 'filelength';
-function gwrite(fildes:longint; bufferP:PT_mwriteBufferStructure; numberBufs:longint; numberBufsWritten:plongint):longint;cdecl;external 'clib' name 'gwrite';
-function gwrite(fildes:longint; var buffer:TT_mwriteBufferStructure; numberBufs:longint; var numberBufsWritten:longint):longint;cdecl;external 'clib' name 'gwrite';
-function lock(fildes,offset,nbytes:longint):longint;cdecl;external 'clib' name 'lock';
-function qread(fildes:longint; buffer:pointer; len,position:longint):longint;cdecl;external 'clib' name 'qread';
-function qread(fildes:longint; var buffer; len,position:longint):longint;cdecl;external 'clib' name 'qread';
-function qwrite(fildes:longint; buffer:pointer; len,position:longint):longint;cdecl;external 'clib' name 'qwrite';
-function qwrite(fildes:longint; var buffer; len,position:longint):longint;cdecl;external 'clib' name 'qwrite';
-function setmode(fildes,mode:longint):longint;cdecl;external 'clib' name 'setmode';
-// sopen already in fcntl
-//function sopen(path:Pchar; oflag,shflag:longint; args:array of const):longint;cdecl;external 'clib' name 'sopen';
-//function sopen(path:Pchar; oflag,shflag:longint):longint;cdecl;external 'clib' name 'sopen';
-function tell(fildes:longint):longint;cdecl;external 'clib' name 'tell';
-function unlock(fildes,offset,nbytes:longint):longint;cdecl;external 'clib' name 'unlock';
-{ other NetWare file I/O utilities...  }
-function AsyncRead(handle:longint;
-                   startingOffset:longint;
-                   numberBytesToRead:longint;
-                   numberBytesRead:plongint;
-                   localSemaHandle:longint;
-                   cacheBufferInfo:PT_cacheBufferStructure;
-                   numOfCacheBufs:plongint):longint;cdecl;external 'clib' name 'AsyncRead';
-function AsyncRead(handle:longint;
-                   startingOffset:longint;
-                   numberBytesToRead:longint;
-                   var numberBytesRead:longint;
-                   localSemaHandle:longint;
-                   var cacheBufferInfo:TT_cacheBufferStructure;
-                   var numOfCacheBufs:longint):longint;cdecl;external 'clib' name 'AsyncRead';
-
-procedure AsyncRelease(cacheBufferInfo:PT_cacheBufferStructure);cdecl;external 'clib' name 'AsyncRelease';
-procedure AsyncRelease(var cacheBufferInfo:TT_cacheBufferStructure);cdecl;external 'clib' name 'AsyncRelease';
-function CountComponents(pathString:PChar; len:longint):longint;cdecl;external 'clib' name 'CountComponents';
-function GetExtendedFileAttributes(pathName:Pchar; extFileAttrs:PBYTE):longint;cdecl;external 'clib' name 'GetExtendedFileAttributes';
-function GetExtendedFileAttributes(pathName:Pchar; var extFileAttrs):longint;cdecl;external 'clib' name 'GetExtendedFileAttributes';
-procedure _makepath(path,drive,dir,fname,ext:Pchar);cdecl;external 'clib' name '_makepath';
-function NWGetVolumeFlags(volume:longint; flags:plongint):longint;cdecl;external 'clib' name 'NWGetVolumeFlags';
-function NWGetVolumeFlags(volume:longint; var flags:longint):longint;cdecl;external 'clib' name 'NWGetVolumeFlags';
-function NWSetVolumeFlags(volume,flags:longint):longint;cdecl;external 'clib' name 'NWSetVolumeFlags';
-function ParsePath(path,server,volume,directories:Pchar):longint;cdecl;external 'clib' name 'ParsePath';
-// SetReaddirAttribute already defined in dirent
-//function SetReaddirAttribute(dirP:PDIR; newAttribute:dword):longint;cdecl;external 'clib' name 'SetReaddirAttribute';
-procedure _splitpath(path,drive,dir,fname,ext:Pchar);cdecl;external 'clib' name '_splitpath';
-procedure UseAccurateCaseForPaths(yesno:longint);cdecl;external 'clib' name 'UseAccurateCaseForPaths';
-procedure UnAugmentAsterisk(yesno:longint);cdecl;external 'clib' name 'UnAugmentAsterisk';
-{-nwfileeng.h------------------------------------------------------------------}
-{ values for flags parameter in FEGetOpenFileInfo()...  }
-const
-   _NotReadableBit                     = $00000001;
-   _NotWriteableBit                    = $00000002;
-   _WrittenBit                         = $00000004;
-   _DetachedBit                        = $00000008;
-   _SwitchingToDirectFileSystemModeBit = $00000010;
-   _DirectFileSystemModeBit            = $00000020;
-   _FileWriteThroughBit                = $00000040;
-{ extra flags  }
-   _DiskBlockReturnedBit               = $00010000;
-   _IAmOnTheOpenFileListBit            = $00020000;
-   _FileReadAuditBit                   = $00040000;
-   _FileWriteAuditBit                  = $00080000;
-   _FileCloseAuditBit                  = $00100000;
-   _DontFileWriteSystemAlertBit        = $00200000;
-   _ReadAheadHintBit                   = $00400000;
-   _NotifyCompressionOnCloseBit        = $00800000;
-{ extra extra flags  }
-   _IsWritingCompressedBit             = $01000000;
-   _HasTimeDateBit                     = $02000000;
-   _DoingDeCompressionBit              = $04000000;
-   _NoSubAllocBit                      = $08000000;
-   _IsATransactionFileBit              = $10000000;
-   _HasFileWritePrivilegeBit           = $20000000;
-   _TTSReadAuditBit                    = $40000000;
-   _TTSWriteAuditBit                   = $80000000;
-
-type
-  TT_PathParseFunc = function (inputPath:Pchar;
-                           var connectionIDp:word;
-                           var volumeNumber:longint;
-                           var directoryNumber:longint;
-                               outPathStringP:PChar;
-                           var outPathCount:longint):longint;cdecl;
-
-function FEConvertDirectoryNumber(sourceNameSpace:longint;
-                                  volumeNumber:longint;
-                                  sourceDirectoryNumber:longint;
-                                  destinationNameSpace:longint;
-                                  destinationDirectoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEConvertDirectoryNumber';
-function FEConvertDirectoryNumber(sourceNameSpace:longint;
-                                  volumeNumber:longint;
-                                  sourceDirectoryNumber:longint;
-                                  destinationNameSpace:longint;
-                              var destinationDirectoryNumber:longint):longint;cdecl;external 'clib' name 'FEConvertDirectoryNumber';
-function FEcreat(name:Pchar; permission,flagBits:longint):longint;cdecl;external 'clib' name 'FEcreat';
-function FEFlushWrite(handle:longint):longint;cdecl;external 'clib' name 'FEFlushWrite';
-function FEGetCWDnum:longint;cdecl;external 'clib' name 'FEGetCWDnum';
-function FEGetCWVnum:longint;cdecl;external 'clib' name 'FEGetCWVnum';
-function FEGetDirectoryEntry(volumeNumber,directoryNumber:longint; pathString:PChar;
-                             pathCount,desiredNameSpace:longint;
-                             namespaceDirectoryStructPp:Ppointer;
-                             DOSdirectoryStructPp:Ppointer):longint;cdecl;external 'clib' name 'FEGetDirectoryEntry';
-function FEGetDirectoryEntry(volumeNumber,directoryNumber:longint; pathString:PChar;
-                             pathCount,desiredNameSpace:longint;
-                             var namespaceDirectoryStructP:Pointer;
-                             var DOSdirectoryStructP:Pointer):longint;cdecl;external 'clib' name 'FEGetDirectoryEntry';
-function FEGetEntryVersion(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:longint; version:PWORD):longint;cdecl;external 'clib' name 'FEGetEntryVersion';
-function FEGetEntryVersion(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:longint; var version:word):longint;cdecl;external 'clib' name 'FEGetEntryVersion';
-function FEGetOpenFileInfo (connection:longint;
-                            handle:longint;
-                            volume:Plongint;
-                            directoryNumber:Plongint;
-                            dataStream:Plongint;
-                            flags:Plongint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfo';
-function FEGetOpenFileInfo (connection:longint;
-                            handle:longint;
-                        var volume,directoryNumber,dataStream,flags:longint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfo';
-function FEGetOpenFileInfoForNS (connection, handle:longint;
-                                 volume,DOSdirectoryNumber,directoryNumber:Plongint;
-                                 nameSpace,dataStream,flags:Plongint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfoForNS';
-function FEGetOpenFileInfoForNS (connection, handle:longint;
-                                 var volume,DOSdirectoryNumber,directoryNumber:longint;
-                                 var nameSpace,dataStream,flags:longint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfoForNS';
-function FEGetOriginatingNameSpace(volumeNumber,directoryNumber:longint):longint;cdecl;external 'clib' name 'FEGetOriginatingNameSpace';
-function FEMapConnsHandleToVolAndDir(connection,handle:longint; volumeNumberP,directoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEMapConnsHandleToVolAndDir';
-function FEMapConnsHandleToVolAndDir(connection,handle:longint; var volumeNumber,directoryNumber:longint):longint;cdecl;external 'clib' name 'FEMapConnsHandleToVolAndDir';
-function FEMapHandleToVolumeAndDirectory(handle:longint; volumeNumberP,directoryNumberP:PLongint):longint;cdecl;external 'clib' name 'FEMapHandleToVolumeAndDirectory';
-function FEMapHandleToVolumeAndDirectory(handle:longint; var volumeNumberP,directoryNumberP:Longint):longint;cdecl;external 'clib' name 'FEMapHandleToVolumeAndDirectory';
-function FEMapPathVolumeDirToVolumeDir(pathName:Pchar; volumeNumber,directoryNumber:longint; newVolumeNumberP,newDirectoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEMapPathVolumeDirToVolumeDir';
-function FEMapPathVolumeDirToVolumeDir(pathName:Pchar; volumeNumber,directoryNumber:longint; var newVolumeNumberP,newDirectoryNumberP:longint):longint;cdecl;external 'clib' name 'FEMapPathVolumeDirToVolumeDir';
-
-function FEMapVolumeAndDirectoryToPath(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:Plongint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPath';
-function FEMapVolumeAndDirectoryToPath(volumeNumber,directoryNumber:longint; pathString:PChar; var pathCount:longint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPath';
-
-function FEMapVolumeAndDirectoryToPathForNS(volumeNumber,directoryNumber:longint; nameSpace:longint; pathString:PBYTE; pathCount:Plongint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPathForNS';
-function FEMapVolumeNumberToName(volumeNumber:longint; volumeName:PChar):longint;cdecl;external 'clib' name 'FEMapVolumeNumberToName';
-function FEQuickClose(connection,task,fileHandle:longint):longint;cdecl;external 'clib' name 'FEQuickClose';
-function FEQuickFileLength(connection,handle:longint; fileSize:Plongint):longint;cdecl;external 'clib' name 'FEQuickFileLength';
-function FEQuickFileLength(connection,handle:longint; var fileSize:longint):longint;cdecl;external 'clib' name 'FEQuickFileLength';
-function FEQuickOpen (connection,task,volumeNumber,directoryNumber:longint;
-                      pathString:PChar;
-                      pathCount,nameSpace,attributeMatchBits,requestedAccessRights,dataStreamNumber:longint;
-                      fileHandle:Plongint):longint;cdecl;external 'clib' name 'FEQuickOpen';
-function FEQuickOpen (connection,task,volumeNumber,directoryNumber:longint;
-                      pathString:PChar;
-                      pathCount,nameSpace,attributeMatchBits,requestedAccessRights,dataStreamNumber:longint;
-                      var fileHandle:longint):longint;cdecl;external 'clib' name 'FEQuickOpen';
-
-function FEQuickRead (connection,handle,postition,bytesToRead:longint;
-                      bytesRead:Plongint;
-                      buffer:pointer):longint;cdecl;external 'clib' name 'FEQuickRead';
-function FEQuickRead (connection,handle,postition,bytesToRead:longint;
-                      var bytesRead:longint;
-                      var buffer):longint;cdecl;external 'clib' name 'FEQuickRead';
-
-function FEQuickWrite(connection,handle,position,bytesToWrite:longint; buffer:pointer):longint;cdecl;external 'clib' name 'FEQuickWrite';
-function FEQuickWrite(connection,handle,position,bytesToWrite:longint; var buffer):longint;cdecl;external 'clib' name 'FEQuickWrite';
-
-function FERegisterNSPathParser(normalFunc:TT_PathParseFunc):longint;cdecl;external 'clib' name 'FERegisterNSPathParser';
-function FESetCWDnum(CWDnum:longint):longint;cdecl;external 'clib' name 'FESetCWDnum';
-function FESetCWVandCWDnums(CWVnum:longint; CWDnum:longint):longint;cdecl;external 'clib' name 'FESetCWVandCWDnums';
-function FESetCWVnum(CWVnum:longint):longint;cdecl;external 'clib' name 'FESetCWVnum';
-function FESetOriginatingNameSpace(volumeNumber,directoryNumber,currentNameSpace,newNameSpace:longint):longint;cdecl;external 'clib' name 'FESetOriginatingNameSpace';
-function FEsopen(name:Pchar; access,share,permission,flagBits:longint;
-           dataStream:byte):longint;cdecl;external 'clib' name 'FEsopen';
-function NWGetDirBaseFromPath(path:Pchar; nameSpace:byte; volNum,NSDirBase,DOSDirBase:Plongint):longint;cdecl;external 'clib' name 'NWGetDirBaseFromPath';
-function NWGetDirBaseFromPath(path:Pchar; nameSpace:byte; var volNum,NSDirBase,DOSDirBase:longint):longint;cdecl;external 'clib' name 'NWGetDirBaseFromPath';
-{-nwfinfo.h--------------------------------------------------------------------}
-function FileServerFileCopy (sourceFileHandle,destinationFileHandle:longint;
-                             sourceFileOffset,destinationFileOffset,numberOfBytesToCopy:longint;
-                             numberOfBytesCopied:Plongint):longint;cdecl;external 'clib' name 'FileServerFileCopy';
-function FileServerFileCopy (sourceFileHandle,destinationFileHandle:longint;
-                             sourceFileOffset,destinationFileOffset,numberOfBytesToCopy:longint;
-                             var numberOfBytesCopied:longint):longint;cdecl;external 'clib' name 'FileServerFileCopy';
-
-function NWGetCompressedFileLengths (handle:longint;
-                                     uncompressedLength,
-                                     compressedLength:Plongint):longint;cdecl;external 'clib' name 'NWGetCompressedFileLengths';
-function NWGetCompressedFileLengths (handle:longint;
-                                     var uncompressedLength,
-                                         compressedLength:longint):longint;cdecl;external 'clib' name 'NWGetCompressedFileLengths';
-
-function NWGetDiskIOsPending:longint;cdecl;external 'clib' name 'NWGetDiskIOsPending';
-function NWSetCompressedFileLengths (handle,
-                                     uncompressedLength,
-                                     compressedLengt:longint):longint;cdecl;external 'clib' name 'NWSetCompressedFileLengths';
-
-function PurgeErasedFile(pathName:Pchar; sequenceNumber:longint):longint;cdecl;external 'clib' name 'PurgeErasedFile';
-function SalvageErasedFile(pathName:Pchar; sequenceNumber:longint; newFileName:Pchar):longint;cdecl;external 'clib' name 'SalvageErasedFile';
-
-function ScanErasedFiles_411 (path           : PChar;
-                              nextEntryNumber: Plongint;
-                              deletedFileInfo: PDIR):longint; cdecl;external 'clib' name 'ScanErasedFiles_411';
-function ScanErasedFiles_411 (path               : PChar;
-                              var nextEntryNumber: longint;
-                              var deletedFileInfo: TDIR):longint; cdecl;external 'clib' name 'ScanErasedFiles_411';
-
-function SetExtendedFileAttributes(pathName:Pchar; extendedFileAttributes:byte):longint;cdecl;external 'clib' name 'SetExtendedFileAttributes';
-function SetFileInfo(pathName:Pchar; searchAttributes:byte; fileAttributes:longint; creationDate:Pchar; lastAccessDate:Pchar;
-               lastUpdateDateAndTime:Pchar; lastArchiveDateAndTime:Pchar; fileOwnerID:longint):longint;cdecl;external 'clib' name 'SetFileInfo';
-{-nwfshook.h-------------------------------------------------------------------}
-{ ------------  File System Monitor Hook Call Back Numbers ------------
-   The defined constants below that have _GEN_ in the name represent call back
-   numbers that will hook Generic versions of the respective OS routines.
-   Namely, routines that support Name Spaces other than DOS.
-   --------------------------------------------------------------------- }
-
-const
-   FSHOOK_PRE_ERASEFILE            = 0;
-   FSHOOK_PRE_OPENFILE             = 1;
-   FSHOOK_PRE_CREATEFILE           = 2;
-   FSHOOK_PRE_CREATE_OPENFILE      = 3;
-   FSHOOK_PRE_RENAME_OR_MOVE       = 4;
-   FSHOOK_PRE_CLOSEFILE            = 5;
-   FSHOOK_PRE_CREATEDIR            = 6;
-   FSHOOK_PRE_DELETEDIR            = 7;
-   FSHOOK_PRE_MODIFY_DIRENTRY      = 8;
-   FSHOOK_PRE_SALVAGE_DELETED      = 9;
-   FSHOOK_PRE_PURGE_DELETED        = 10;
-   FSHOOK_PRE_RENAME_NS_ENTRY      = 11;
-   FSHOOK_PRE_GEN_SALVAGE_DELETED  = 12;
-   FSHOOK_PRE_GEN_PURGE_DELETED    = 13;
-   FSHOOK_PRE_GEN_OPEN_CREATE      = 14;
-   FSHOOK_PRE_GEN_RENAME           = 15;
-   FSHOOK_PRE_GEN_ERASEFILE        = 16;
-   FSHOOK_PRE_GEN_MODIFY_DOS_INFO  = 17;
-   FSHOOK_PRE_GEN_MODIFY_NS_INFO   = 18;
-   FSHOOK_POST_ERASEFILE           = $80000000;
-   FSHOOK_POST_OPENFILE            = $80000001;
-   FSHOOK_POST_CREATEFILE          = $80000002;
-   FSHOOK_POST_CREATE_OPENFILE     = $80000003;
-   FSHOOK_POST_RENAME_OR_MOVE      = $80000004;
-   FSHOOK_POST_CLOSEFILE           = $80000005;
-   FSHOOK_POST_CREATEDIR           = $80000006;
-   FSHOOK_POST_DELETEDIR           = $80000007;
-   FSHOOK_POST_MODIFY_DIRENTRY     = $80000008;
-   FSHOOK_POST_SALVAGE_DELETED     = $80000009;
-   FSHOOK_POST_PURGE_DELETED       = $8000000A;
-   FSHOOK_POST_RENAME_NS_ENTRY     = $8000000B;
-   FSHOOK_POST_GEN_SALVAGE_DELETED = $8000000C;
-   FSHOOK_POST_GEN_PURGE_DELETED   = $8000000D;
-   FSHOOK_POST_GEN_OPEN_CREATE     = $8000000E;
-   FSHOOK_POST_GEN_RENAME          = $8000000F;
-   FSHOOK_POST_GEN_ERASEFILE       = $80000010;
-   FSHOOK_POST_GEN_MODIFY_DOS_INFO = $80000011;
-   FSHOOK_POST_GEN_MODIFY_NS_INFO  = $80000012;
-
-    {--------------------------------------------------------------------
-      Structure returned for
-      FSHOOK_PRE_ERASEFILE and FSHOOK_POST_ERASEFILE
-     -------------------------------------------------------------------- }
-type
-
-   PEraseFileCallBackStruct = ^TEraseFileCallBackStruct;
-   TEraseFileCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase : Longint;
-     pathString : Pchar;
-     pathComponentCount,
-     nameSpace,
-     attributeMatchBits : Longint;
-   end;
-{--------------------------------------------------------------------
-      Structure returned for
-      FSHOOK_PRE_OPENFILE and FSHOOK_POST_OPENFILE
-     -------------------------------------------------------------------- }
-
-   POpenFileCallBackStruct = ^TOpenFileCallBackStruct;
-   TOpenFileCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase : Longint;
-     pathString : Pchar;
-     pathComponentCount,
-     nameSpace,
-     attributeMatchBits,
-     requestedAccessRights,
-     dataStreamNumber : Longint;
-     fileHandle : PLongint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_CREATEFILE and FSHOOK_POST_CREATEFILE
- -------------------------------------------------------------------- }
-
-   PCreateFileCallBackStruct = ^TCreateFileCallBackStruct;
-   TCreateFileCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase : Longint;
-     pathString : Pchar;
-     pathComponentCount,
-     nameSpace,
-     createAttributeBits,
-     createFlagBits,
-     dataStreamNumber : Longint;
-     fileHandle : PLongint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_CREATE_OPENFILE and FSHOOK_POST_CREATE_OPENFILE
- -------------------------------------------------------------------- }
-
-   PCreateAndOpenCallBackStruct = ^TCreateAndOpenCallBackStruct;
-   TCreateAndOpenCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase : Longint;
-     pathString : Pchar;
-     pathComponentCount,
-     nameSpace,
-     createAttributeBits,
-     requestedAccessRights,
-     createFlagBits,
-     dataStreamNumber : Longint;
-     fileHandle       : PLongint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_RENAME_OR_MOVE and FSHOOK_POST_RENAME_OR_MOVE
- -------------------------------------------------------------------- }
-
-   PRenameMoveEntryCallBackStruct = ^TRenameMoveEntryCallBackStruct;
-   TRenameMoveEntryCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase                 : Longint;
-     pathString              : Pchar;
-     pathComponentCount,
-     nameSpace,
-     attributeMatchBits,
-     subDirsOnlyFlag,
-     newDirBase              : Longint;
-     newPathString           : Pchar;
-     originalNewCount,
-     compatibilityFlag,
-     allowRenamesToMyselfFlag: Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_CLOSEFILE and FSHOOK_POST_CLOSEFILE
- -------------------------------------------------------------------- }
-
-   PCloseFileCallBackStruct = ^TCloseFileCallBackStruct;
-   TCloseFileCallBackStruct = record
-     connection,
-     task,
-     fileHandle : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_CREATEDIR and FSHOOK_POST_CREATEDIR
--------------------------------------------------------------------- }
-
-   PCreateDirCallBackStruct = ^TCreateDirCallBackStruct;
-   TCreateDirCallBackStruct = record
-     connection,
-     volume,
-     dirBase    : Longint;
-     pathString : Pchar;
-     pathComponentCount,
-     nameSpace,
-     directoryAccessMask : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_DELETEDIR and FSHOOK_POST_DELETEDIR
- -------------------------------------------------------------------- }
-
-   PDeleteDirCallBackStruct = ^TDeleteDirCallBackStruct;
-   TDeleteDirCallBackStruct = record
-     connection,
-     volume,
-     dirBase : Longint;
-     pathString : PChar;
-     pathComponentCount,
-     nameSpace : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_MODIFYDIRENTRY and FSHOOK_POST_MODIFYDIRENTRY
- -------------------------------------------------------------------- }
-
-   PModifyDirEntryCallBackStruct = ^TModifyDirEntryCallBackStruct;
-   TModifyDirEntryCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase            : Longint;
-     pathString         : PChar;
-     pathComponentCount,
-     nameSpace,
-     attributeMatchBits,
-     targetNameSpace    : Longint;
-     modifyVector       : PModifyStructure;
-     modifyBits,
-     allowWildCardsFlag : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_SALVAGE_DELETED and FSHOOK_POST_SALVAGE_DELETED
- -------------------------------------------------------------------- }
-
-   PSalvageDeletedCallBackStruct = ^TSalvageDeletedCallBackStruct;
-   TSalvageDeletedCallBackStruct = record
-     connection,
-     volume,
-     dirBase,
-     toBeSalvagedDirBase,
-     nameSpace            : Longint;
-     newName              : PChar;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_PURGE_DELETED and FSHOOK_POST_PURGE_DELETED
- -------------------------------------------------------------------- }
-
-   PPurgeDeletedCallBackStruct = ^TPurgeDeletedCallBackStruct;
-   TPurgeDeletedCallBackStruct = record
-     connection,
-     volume,
-     dirBase,
-     toBePurgedDirBase,
-     nameSpace          : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_RENAME_NS_ENTRY and FSHOOK_POST_RENAME_NS_ENTRY
- -------------------------------------------------------------------- }
-
-   PRenameNSEntryCallBackStruct = ^TRenameNSEntryCallBackStruct;
-   TRenameNSEntryCallBackStruct = record
-     connection,
-     task,
-     volume,
-     dirBase       : Longint;
-     pathString    : PChar;
-     pathComponentCount,
-     nameSpace,
-     matchBits     : Longint;
-     newName       : PChar;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_GEN_SALVAGE_DELETED and FSHOOK_POST_GEN_SALVAGE_DELETED
- -------------------------------------------------------------------- }
-
-   PGenericSalvageDeletedCBStruct = ^TGenericSalvageDeletedCBStruct;
-   TGenericSalvageDeletedCBStruct = record
-     connection,
-     nameSpace,
-     sequence,
-     volume,
-     dirBase : Longint;
-     newName : PChar;
-  end;
-{--------------------------------------------------------------------
-      Structure returned for
-      FSHOOK_PRE_GEN_PURGE_DELETED and FSHOOK_POST_GEN_PURGE_DELETED
-     -------------------------------------------------------------------- }
-
-   PGenericPurgeDeletedCBStruct = ^TGenericPurgeDeletedCBStruct;
-   TGenericPurgeDeletedCBStruct = record
-     connection,
-     nameSpace,
-     sequence,
-     volume,
-     dirBase  : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_GEN_OPEN_CREATE and FSHOOK_POST_GEN_OPEN_CREATE
- -------------------------------------------------------------------- }
-
-   PGenericOpenCreateCBStruct = ^TGenericOpenCreateCBStruct;
-   TGenericOpenCreateCBStruct = record
-     connection,
-     task,
-     volume,
-     pathComponentCount,
-     dirBase               : Longint;
-     pathString            : Pchar;
-     nameSpace,
-     dataStreamNumber,
-     openCreateFlags,
-     searchAttributes,
-     createAttributes,
-     requestedAccessRights,
-     returnInfoMask        : Longint;
-     fileHandle            : PLongint;
-     openCreateAction      : Pointer;
-   end;
-{--------------------------------------------------------------------
- Structure returned for
- FSHOOK_PRE_GEN_RENAME and FSHOOK_POST_GEN_RENAME
- -------------------------------------------------------------------- }
-
-   PGenericRenameCBStruct = ^TGenericRenameCBStruct;
-   TGenericRenameCBStruct = record
-     connection,
-     task,
-     nameSpace,
-     renameFlag,
-     searchAttributes,
-     srcVolume,
-     srcPathComponentCount,
-     srcDirBase            : Longint;
-     srcPathString         : Pchar;
-     dstVolume,
-     dstPathComponentCount,
-     dstDirBase            : Longint;
-     dstPathString         : Pchar;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_GEN_ERASEFILE and FSHOOK_POST_GEN_ERASEFILE
- -------------------------------------------------------------------- }
-
-   PGenericEraseFileCBStruct = ^TGenericEraseFileCBStruct;
-   TGenericEraseFileCBStruct = record
-     connection,
-     task,
-     volume,
-     pathComponentCount,
-     dirBase          : Longint;
-     pathString       : Pchar;
-     nameSpace,
-     searchAttributes : Longint;
-   end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_GEN_MODIFY_DOS_INFO and FSHOOK_POST_GEN_MODIFY_DOS_INFO
- -------------------------------------------------------------------- }
-
-   PGenericModifyDOSInfoCBStruct = ^TGenericModifyDOSInfoCBStruct;
-   TGenericModifyDOSInfoCBStruct = record
-        connection,
-        task,
-        volume,
-        pathComponentCount,
-        dirBase              : Longint;
-        pathString           : Pchar;
-        nameSpace            : Longint;
-        searchAttributes     : Longint;
-        modifyMask           : Longint;
-        modifyInfo           : pointer;
-     end;
-{--------------------------------------------------------------------
-  Structure returned for
-  FSHOOK_PRE_GEN_MODIFY_NS_INFO and FSHOOK_POST_GEN_MODIFY_NS_INFO
--------------------------------------------------------------------- }
-
-   PGenericModifyNSInfoCBStruct = ^TGenericModifyNSInfoCBStruct;
-   TGenericModifyNSInfoCBStruct = record
-     connection,
-     task,
-     dataLength,
-     srcNameSpace,
-     dstNameSpace,
-     volume,
-     dirBase,
-     modifyMask   : Longint;
-     modifyInfo   : pointer;
-   end;
-
-function NWAddFSMonitorHook (callBackNumber:Longint;
-                             callBackFunc:pointer;
-                             callBackHandle:PLongint):Longint;cdecl;external 'clib' name 'NWAddFSMonitorHook';
-function NWAddFSMonitorHook (callBackNumber:Longint;
-                             callBackFunc:pointer;
-                         var callBackHandle:Longint):Longint;cdecl;external 'clib' name 'NWAddFSMonitorHook';
-function NWRemoveFSMonitorHook (callBackNumber,callBackHandle:Longint):Longint;cdecl;external 'clib' name 'NWRemoveFSMonitorHook';
-{-nwipx.h----------------------------------------------------------------------}
-{$include npackon.inc}
-{ ECB status field completion codes  }
-
-const
-   STS_SPX_CONNECTION_TERMINATED = $FFEC;
-   STS_SPX_TERMINATED_POORLY = $FFED;
-   STS_SPX_INVALID_CONNECTION = $FFEE;
-   STS_SPX_CONNECTION_TABLE_FULL = $FFEF;
-   STS_SPX_SOCKET_NOT_OPEN = $FFF0;
-   STS_SPX_SOCKET_ALREADY_OPEN = $FFF1;
-   STS_SPX_ECB_CANNOT_BE_CANCELLED = $FFF9;
-   STS_SPX_NO_KNOWN_ROUTE_TO_DESTINATION = $FFFA;
-   STS_SPX_EVENT_CANCELLED = $FFFC;
-   STS_SPX_PACKET_OVERFLOW = $FFFD;
-   STS_SPX_MALFORMED_PACKET = $FFFE;
-   STS_SPX_TRANSMIT_FAILURE = $FFFF;
-
-   SPX_SSTATUS_ABORTED = $00;
-   SPX_SSTATUS_WAITING = $01;
-   SPX_SSTATUS_STARTING = $02;
-   SPX_SSTATUS_ESTABLISHED = $03;
-   SPX_SSTATUS_TERMINATING = $04;
-
-
-{
-   This define is for the Queued IPX/SPX Calls. The return code passed in will
-   be set to this value until the packet is actually sent to IPX/SPX.
- }
-   PACKET_IN_QUEUE = $0001;
-{--------------------------------------------------------------------------- 
-                                                                              
-     IPX_ECB status field busy (in-process) codes:                            
-
-     0x11 - AES (asynchronous event service) waiting                          
-     0x12 - Holding
-     0x13 - Session listen                                                    
-     0x14 - Processing                                                        
-     0x15 - Receiving                                                         
-     0x16 - Sending                                                           
-     0x17 - Waiting                                                           
-                                                                              
-  -------------------------------------------------------------------------- }
-{--------------------------------------------------------------------------- 
-     The comment characters in the IPX_ECB structure have the                 
-     following meanings                                                       
-     s - this field must be filled in prior to a send                         
-     r - this field must be filled in prior to a receive                      
-     R - this field is reserved                                               
-     A - this field may be used when the ECB is not in use by IPX/SPX         
-     q - the application may read this field                                  
-  -------------------------------------------------------------------------- }
-{ Packet type codes  }
-   UNKNOWN_PACKET_TYPE = 0;
-   ROUTING_INFORMATION_PACKET = 1;
-   ECHO_PACKET = 2;
-   ERROR_PACKET = 3;
-   PACKET_EXCHANGE_PACKET = 4;
-   SEQUENCED_PACKET_PROTOCOL_PACKET = 5;
-
-   SPX_END_OF_MESSAGE = $10;
-   ENABLE_WATCHDOG    = $ff;
-
-{ various SAP definitions  }
-
-   SAP_SOCKET = $0452;
-   GENERAL_SERVICE_QUERY = 1;
-   GENERAL_SERVICE_RESPONSE = 2;
-   NEAREST_SERVICE_QUERY = 3;
-   NEAREST_SERVICE_RESPONSE = 4;
-   PERIODIC_ID_PACKET = 2;
-   NOT_SUPPORTED = 1;
-   INVALID_QUERY_TYPE = 2;
-   SAP_RESPONSES_PER_PACKET = 8;
-{ 'ELRS'  }
-   QUERY_LIST_SIGNATURE = $454C5253;
-{ type definitions  }
-type
-   TMisalignedLONG = longint;
-   TMisalignedWORD = word;
-
-   PtagECBFrag = ^TtagECBFrag;
-   TtagECBFrag = record
-        fragAddress : pointer;
-        fragSize    : longint;
-     end;
-   TECBFrag = TtagECBFrag;
-   PECBFrag = ^TECBFrag;
-
-   PIPX_ECBStruct = ^TIPX_ECBStruct;
-   TIPX_ECBStruct = record
-        semHandleSave : longint;
-        queueHead : ^PIPX_ECBStruct;
-        next : PIPX_ECBStruct;
-        prev : PIPX_ECBStruct;
-        status : word;
-        semHandle : longint;
-        lProtID : word;
-        protID : array[0..5] of byte;
-        boardNumber : longint;
-        immediateAddress : array[0..5] of byte;
-        driverWS : array[0..3] of byte;
-        ESREBXValue : longint;
-        socket : word;
-        protocolWorkspace : word;
-        dataLen : longint;
-        fragCount : longint;
-        fragList : array[0..1] of TECBFrag;
-     end;
-   TIPX_ECB  = TIPX_ECBStruct;
-   PIPX_ECB  = ^TIPX_ECB;
-   PPIPX_ECB = ^PIPX_ECB;
-
-   TSPX_ECB  = TIPX_ECBStruct;
-   PSPX_ECB  = PIPX_ECBStruct;
-
-
-   PtagInternetAddress = ^TtagInternetAddress;
-   TtagInternetAddress = record
-        network : TMisalignedLONG;
-        node    : array[0..5] of byte;
-        socket  : TMisalignedWORD;
-     end;
-   TInternetAddress = TtagInternetAddress;
-   PInternetAddress = ^TInternetAddress;
-
-   PtagIPX_HEADER = ^TtagIPX_HEADER;
-   TtagIPX_HEADER = record
-        checksum    : word;
-        packetLen   : word;
-        transportCtl: byte;
-        packetType  : byte;
-        destNet     : TMisalignedLONG;
-        destNode    : array[0..5] of byte;
-        destSocket  : word;
-        sourceNet   : TMisalignedLONG;
-        sourceNode  : array[0..5] of byte;
-        sourceSocket: word;
-     end;
-   TIPX_HEADER = TtagIPX_HEADER;
-   PIPX_HEADER = ^TIPX_HEADER;
-{ included only for compatibility  }
-
-   PtagIPX_STATS = ^TtagIPX_STATS;
-   TtagIPX_STATS = record
-        dummy : char;
-     end;
-   TIPX_STATS = TtagIPX_STATS;
-   PIPX_STATS = ^TIPX_STATS;
-
-   PtagSPX_HEADER = ^TtagSPX_HEADER;
-   TtagSPX_HEADER = record
-        checksum : word;
-        packetLen : word;
-        transportCtl : byte;
-        packetType : byte;
-        destNet : TMisalignedLONG;
-        destNode : array[0..5] of byte;
-        destSocket : word;
-        sourceNet : TMisalignedLONG;
-        sourceNode : array[0..5] of byte;
-        sourceSocket : word;
-        connectionCtl : byte;
-        dataStreamType : byte;
-        sourceConnectID : word;
-        destConnectID : word;
-        sequenceNumber : word;
-        ackNumber : word;
-        allocNumber : word;
-     end;
-   TSPX_HEADER = TtagSPX_HEADER;
-   PSPX_HEADER = ^TSPX_HEADER;
-
-   PSPX_ConnStruct = ^TSPX_ConnStruct;
-   TSPX_ConnStruct = record
-        sStatus : byte;
-        sFlags : byte;
-        sSourceConnectID : word;
-        sDestConnectID : word;
-        sSequenceNumber : word;
-        sAckNumber : word;
-        sAllocNumber : word;
-        sRemoteAckNumber : word;
-        sRemoteAllocNumber : word;
-        sLocalSocket : word;
-        sImmediateAddress : array[0..5] of byte;
-        sRemoteNet : longint;
-        sRemoteNode : array[0..5] of byte;
-        sRemoteSocket : word;
-        sRetransmitCount : byte;
-        sRetransmitMax : byte;
-        sRoundTripTimer : word;
-        sRetransmittedPackets : word;
-        sSuppressedPackets : word;
-        sLastReceiveTime : word;
-        sLastSendTime : word;
-        sRoundTripMax : word;
-        sWatchdogTimeout : word;
-        sSessionXmitQHead : array[0..3] of byte;
-        sSessionXmitECBp : array[0..3] of byte;
-     end;
-   TSPX_SESSION = TSPX_ConnStruct;
-   PSPX_SESSION = ^TSPX_SESSION;
-
-
-type
-
-   PT_SAP_ID_PACKET = ^TT_SAP_ID_PACKET;
-   TT_SAP_ID_PACKET = record
-     SAPPacketType       : word;                    // 2 or 4
-     serverType          : word;                    // assigned by novell
-     serverName          : array[0..47] of byte;    // Service name
-     serverAddress       : TInternetAddress;
-     interveningNetworks : word;                    // # of networks packets must pass
-   end;
-
-   PSERVICE_QUERY_PACKET = ^TSERVICE_QUERY_PACKET;
-   TSERVICE_QUERY_PACKET = record
-     queryType,                                     // 1 or 3
-     serverType : word;                             // assigned by novell
-   end;
-
-   PSAPResponse = ^TSAPResponse;
-   TSAPResponse = record
-        SAPPacketType : word;                       // 2 or 4
-        responses     : array[0..(SAP_RESPONSES_PER_PACKET)-1] of record
-             serverType          : word;
-             serverName          : array[0..47] of byte;
-             serverAddress       : TInternetAddress;
-             interveningNetworks : word;
-          end;
-        next          : PSAPResponse;
-        signature     : longint;
-        count         : longint;
-     end;
-   TSAP_RESPONSE_LIST_ENTRY = TSAPResponse;
-   PSAP_RESPONSE_LIST_ENTRY = ^TSAP_RESPONSE_LIST_ENTRY;
-{$include npackoff.inc}
-
-
-{ IPX function prototypes...  }
-
-function IpxCheckSocket(socket:word):longint;cdecl;external 'clib' name 'IpxCheckSocket';
-function IpxCancelEvent(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxCancelEvent';
-function IpxCloseSocket(socket:word):longint;cdecl;external 'clib' name 'IpxCloseSocket';
-function IpxConnect(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxConnect';
-function IpxDisconnect(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxDisconnect';
-function IpxGetAndClearQ(replyQptr:PPIPX_ECB):PIPX_ECB;cdecl;external 'clib' name 'IpxGetAndClearQ';
-function IpxGetInternetworkAddress(address:PBYTE):longint;cdecl;external 'clib' name 'IpxGetInternetworkAddress';
-function IpxGetLocalTarget(address:PBYTE; ECBp:PIPX_ECB; timeToNet:Plongint):longint;cdecl;external 'clib' name 'IpxGetLocalTarget';
-function IpxGetStatistics(ipxStats:PIPX_STATS):longint;cdecl;external 'clib' name 'IpxGetStatistics';
-function IpxGetVersion(majorVersion:PBYTE; minorVersion:PBYTE; revision:PWORD):longint;cdecl;external 'clib' name 'IpxGetVersion';
-function IpxGetVersion(var majorVersion,minorVersion:byte; var revision:word):longint;cdecl;external 'clib' name 'IpxGetVersion';
-function IpxOpenSocket(socketP:PWORD):longint;cdecl;external 'clib' name 'IpxOpenSocket';
-function IpxOpenSocket(var socket:word):longint;cdecl;external 'clib' name 'IpxOpenSocket';
-function IpxQueuedSend(socket:word; ECBp:PIPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'IpxQueuedSend';
-function IpxQueuedSend(socket:word; ECBp:PIPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'IpxQueuedSend';
-function IpxQueuedReceive(socket:word; ECBp:PIPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'IpxQueuedReceive';
-function IpxQueuedReceive(socket:word; ECBp:PIPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'IpxQueuedReceive';
-function IpxReceive(socket:word; ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxReceive';
-function IpxResetStatistics:longint;cdecl;external 'clib' name 'IpxResetStatistics';
-function IpxSend(socket:word; ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxSend';
-{ SPX function prototypes...  }
-function SpxAbortConnection(connection:word):longint;cdecl;external 'clib' name 'SpxAbortConnection';
-function SpxCancelEvent(ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxCancelEvent';
-function SpxCheckSocket(socket:word):longint;cdecl;external 'clib' name 'SpxCheckSocket';
-function SpxCloseSocket(socket:word):longint;cdecl;external 'clib' name 'SpxCloseSocket';
-function SpxEstablishConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; connection:PWORD):longint;cdecl;external 'clib' name 'SpxEstablishConnection';
-function SpxEstablishConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; var connection:word):longint;cdecl;external 'clib' name 'SpxEstablishConnection';
-function SpxGetConfiguration(maxConn,availConn:Plongint):longint;cdecl;external 'clib' name 'SpxGetConfiguration';
-function SpxGetConfiguration(var maxConn,availConn:longint):longint;cdecl;external 'clib' name 'SpxGetConfiguration';
-function SpxGetConnectionStatus(connection:word; buffer:PSPX_SESSION):longint;cdecl;external 'clib' name 'SpxGetConnectionStatus';
-{ (56 bytes)  }
-function SpxGetTime(marker:Plongint):longint;cdecl;external 'clib' name 'SpxGetTime';
-function SpxGetTime(var marker:longint):longint;cdecl;external 'clib' name 'SpxGetTime';
-function SpxGetVersion(major,minor:PBYTE; revision:PWORD; revDate:Plongint):longint;cdecl;external 'clib' name 'SpxGetVersion';
-function SpxGetVersion(var major,minor:byte; var revision:word; var revDate:longint):longint;cdecl;external 'clib' name 'SpxGetVersion';
-function SpxListenForConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; connection:PWORD):longint;cdecl;external 'clib' name 'SpxListenForConnection';
-function SpxListenForConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; var connection:word):longint;cdecl;external 'clib' name 'SpxListenForConnection';
-function SpxListenForConnectedPacket(socket:word; ecb:PSPX_ECB; connection:word):longint;cdecl;external 'clib' name 'SpxListenForConnectedPacket';
-function SpxListenForSequencedPacket(socket:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxListenForSequencedPacket';
-function SpxOpenSocket(socket:PWORD):longint;cdecl;external 'clib' name 'SpxOpenSocket';
-function SpxOpenSocket(var socket:word):longint;cdecl;external 'clib' name 'SpxOpenSocket';
-function SpxQueuedListenForSequencedPacket(socket:word; ecb:PSPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'SpxQueuedListenForSequencedPacket';
-function SpxQueuedListenForSequencedPacket(socket:word; ecb:PSPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'SpxQueuedListenForSequencedPacket';
-function SpxQueuedSendSequencedPacket(connection:word; ecb:PSPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'SpxQueuedSendSequencedPacket';
-function SpxQueuedSendSequencedPacket(connection:word; ecb:PSPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'SpxQueuedSendSequencedPacket';
-function SpxSendSequencedPacket(connection:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxSendSequencedPacket';
-function SpxTerminateConnection(connection:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxTerminateConnection';
-{ SAP function prototypes...  }
-function AdvertiseService(serviceType:word; serviceName:Pchar; serviceSocket:word):longint;cdecl;external 'clib' name 'AdvertiseService';
-function FreeQueryServicesList(listP:PSAP_RESPONSE_LIST_ENTRY):longint;cdecl;external 'clib' name 'FreeQueryServicesList';
-function QueryServices(queryType,serviceType:word):PSAP_RESPONSE_LIST_ENTRY;cdecl;external 'clib' name 'QueryServices';
-function ShutdownAdvertising(advertisingHandle:longint):longint;cdecl;external 'clib' name 'ShutdownAdvertising';
-{-nwlib.h----------------------------------------------------------------------}
-type
-  TLibraryCleanupFunc = function (dataAreaPtr:pointer):longint; cdecl;
-
-function __get_thread_data_area_ptr:Plongint;cdecl;external 'clib' name '__get_thread_data_area_ptr';
-function GetDataAreaPtr(libraryHandle:longint):pointer;cdecl;external 'clib' name 'GetDataAreaPtr';
-function DeregisterLibrary(libraryHandle:longint):longint;cdecl;external 'clib' name 'DeregisterLibrary';
-function RegisterLibrary(cleanupFunc:TLibraryCleanupFunc):longint;cdecl;external 'clib' name 'RegisterLibrary';
-function SaveDataAreaPtr(libraryHandle:longint; dataAreaPtr:pointer):longint;cdecl;external 'clib' name 'SaveDataAreaPtr';
-// function Thread_Data_Area : pointer;  Thread_Data_Area (*__get_thread_data_area_ptr())
-{-nwmalloc.h-------------------------------------------------------------------}
-procedure NWGarbageCollect (NLMHandle:longint);  cdecl; external 'clib' name 'NWGarbageCollect';
-function  NWGetAllocPageOverhead (pageCount:longint):longint;cdecl; external 'clib' name 'NWGetAllocPageOverhead';
-function  NWGetAvailableMemory : longint;        cdecl; external 'clib' name 'NWGetAvailableMemory';
-function  NWGetPageSize : longint;               cdecl; external 'clib' name 'NWGetPageSize';
-function  NWMemorySizeAddressable (addr:pointer; size:longint):longint;cdecl; external 'clib' name 'NWMemorySizeAddressable';
-function  alloca (size:longint):pointer;         cdecl; external 'clib' name 'alloca';
-function  _msize (buffer:pointer):longint;       cdecl; external 'clib' name '_msize';
-function  __qcalloc (num,siz:longint):pointer;   cdecl; external 'clib' name '__qcalloc';
-function  __qmalloc (siz:longint):pointer;       cdecl; external 'clib' name '__qmalloc';
-function  __qrealloc (old:pointer; siz:longint):pointer;cdecl; external 'clib' name '__qrealloc';
-function  stackavail:longint;                    cdecl; external 'clib' name 'stackavail';
-
-function  calloc  (num,siz:longint):pointer;     cdecl; external 'clib' name 'calloc';
-procedure free    (p:pointer);                   cdecl; external 'clib' name 'free';
-function  malloc  (siz:longint):pointer;         cdecl; external 'clib' name 'malloc';
-function  realloc (oldMemP:pointer;
-                   newsize:longint):pointer;     cdecl; external 'clib' name 'realloc';
-{-nwncpx.h---------------------------------------------------------------------}
-const
-   MAX_NCP_EXTENSION_NAME_BYTES = 33;
-   BEGIN_SCAN_NCP_EXTENSIONS = $FFFFFFFF;
-   REPLY_BUFFER_IS_FRAGGED = $FFFFFFFF;
-   CONNECTION_BEING_RESTARTED = $01101001;
-   CONNECTION_BEING_KILLED = $02202002;
-   CONNECTION_BEING_LOGGED_OUT = $03303003;
-   CONNECTION_BEING_FREED = $04404004;
-type
-   PNCPExtensionClient = ^TNCPExtensionClient;
-   TNCPExtensionClient = record
-        connection : longint;
-        task : longint;
-     end;
-
-   PFragElement = ^TFragElement;
-   TFragElement = record
-        ptr : pointer;
-        size : longint;
-     end;
-
-   PNCPExtensionMessageFrag = ^TNCPExtensionMessageFrag;
-   TNCPExtensionMessageFrag = record
-        totalMessageSize : longint;
-        fragCount : longint;
-        fragList : array[0..3] of TFragElement;
-     end;
-
-   TNCPExtensionHandlerFunc =
-     function (NCPExtensionClient:PNCPExtensionClient;
-               requestData:pointer;
-               requestDataLen:longint;
-               replyData:pointer;
-               replyDataLen:Plongint):byte; cdecl;
-   TConnectionEventHandlerProc =
-     procedure (connection:longint; eventType:longint); cdecl;
-     
-   TReplyBufferManagerProc =
-     procedure (NCPExtensionClient:PNCPExtensionClient; replyBuffer:pointer); cdecl;
-
-function NWDeRegisterNCPExtension(queryData:pointer):longint;cdecl;external name 'NWDeRegisterNCPExtension';
-function NWGetNCPExtensionInfo(NCPExtensionName:Pchar; NCPExtensionID:Plongint; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
-           queryData:pointer):longint;cdecl;external  name 'NWGetNCPExtensionInfo';
-function NWGetNCPExtensionInfoByID(NCPExtensionID:longint; NCPExtensionName:Pchar; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
-           queryData:pointer):longint;cdecl;external  name 'NWGetNCPExtensionInfoByID';
-function NWRegisterNCPExtension(NCPExtensionName:Pchar;
-                                NCPExtensionHandler:TNCPExtensionHandlerFunc;
-                                ConnectionEventHandler:TConnectionEventHandlerProc;
-                                ReplyBufferManager:TReplyBufferManagerProc;
-                                majorVersion,minorVersion,revision:byte;
-                                queryData:Ppointer):longint;cdecl;external  name 'NWRegisterNCPExtension';
-
-function NWRegisterNCPExtensionByID(NCPExtensionID:longint;
-                                    NCPExtensionName:Pchar;
-                                    NCPExtensionHandler:TNCPExtensionHandlerFunc;
-                                    ConnectionEventHandler:TConnectionEventHandlerProc;
-                                    ReplyBufferManager:TReplyBufferManagerProc;
-                                    majorVersion,minorVersion,revision:byte; queryData:Ppointer):longint;cdecl;external  name 'NWRegisterNCPExtensionByID';
-
-function NWScanNCPExtensions(NCPExtensionID:Plongint; NCPExtensionName:Pchar; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
-           queryData:pointer):longint;cdecl;external  name 'NWScanNCPExtensions';
-function NWSendNCPExtensionFraggedRequest(NCPExtensionID:longint; requestFrag:PNCPExtensionMessageFrag; replyFrag:PNCPExtensionMessageFrag):longint;cdecl;external  name 'NWSendNCPExtensionFraggedRequest';
-function NWSendNCPExtensionRequest(NCPExtensionID:longint; requestData:pointer; requestDataLen:longint; replyData:pointer; replyDataLen:Plongint):longint;cdecl;external  name 'NWSendNCPExtensionRequest';
-{-nwnspace.h-------------------------------------------------------------------}
-{$include npackon.inc}
-type
-
-   PNWNSINFO = ^TNWNSINFO;
-   TNWNSINFO = record
-     nsInfoBitMask,
-     fixedBitMask,
-     reservedBitMask,
-     extendedBitMask     : longint;
-     fixedBitsDefined,
-     reservedBitsDefined,
-     extendedBitsDefined : word;
-     fieldsLenTable      : array[0..31] of longint;
-     hugeStateInfo       : array[0..15] of byte;
-     hugeDataLength      : longint;
-   end;
-   TNW_NS_INFO = TNWNSINFO;
-   PNW_NS_INFO = ^TNW_NS_INFO;
-
-{$include npackoff.inc}
-
-function GetDataStreamName(volume:longint; dataStream:byte; name:Pchar; numberOfDataStreams:Plongint):longint;cdecl;external 'clib' name 'GetDataStreamName';
-function GetDataStreamName(volume:longint; dataStream:byte; name:Pchar; var numberOfDataStreams:longint):longint;cdecl;external 'clib' name 'GetDataStreamName';
-function GetNameSpaceName(volume:longint; nameSpace:longint; name:Pchar; numberOfNameSpaces:Plongint):longint;cdecl;external 'clib' name 'GetNameSpaceName';
-function GetNameSpaceName(volume:longint; nameSpace:longint; name:Pchar; var numberOfNameSpaces:longint):longint;cdecl;external 'clib' name 'GetNameSpaceName';
-function NWGetHugeNSInfo(volNum,nameSpace:byte; dirBase,hugeInfoMask:longint;
-                         hugeStateInfo:PBYTE;
-                         hugeData:PBYTE;
-                         hugeDataLen:PLongint;
-                         nextHugeStateInfo:PBYTE):longint;cdecl;external 'clib' name 'NWGetHugeNSInfo';
-function NWGetHugeNSInfo(volNum,nameSpace:byte; dirBase,hugeInfoMask:longint;
-                         var hugeStateInfo;
-                         var hugeData;
-                         var hugeDataLen:longint;
-                         var nextHugeStateInfo):longint;cdecl;external 'clib' name 'NWGetHugeNSInfo';
-function NWGetNameSpaceEntryName(path:PBYTE; nameSpace:longint; maxNameBufferLength:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWGetNameSpaceEntryName';
-function NWGetNameSpaceEntryName(var path:byte; nameSpace:longint; maxNameBufferLength:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWGetNameSpaceEntryName';
-function NWGetNSInfo(volNum:byte; srcNameSpace:byte; dstNameSpace:byte; dirBase:longint; nsInfoMask:longint;
-           nsSpecificInfo:PBYTE):longint;cdecl;external 'clib' name 'NWGetNSInfo';
-function NWGetNSLoadedList(volNum:byte; loadListSize:word; NSLoadedList:PBYTE; returnListSize:PWORD):longint;cdecl;external 'clib' name 'NWGetNSLoadedList';
-function NWQueryNSInfoFormat(nameSpace,volNum:byte; nsInfo:PNW_NS_INFO):longint;cdecl;external 'clib' name 'NWQueryNSInfoFormat';
-function NWQueryNSInfoFormat(nameSpace,volNum:byte; var nsInfo:TNW_NS_INFO):longint;cdecl;external 'clib' name 'NWQueryNSInfoFormat';
-function NWSetHugeNSInfo(volNum,nameSpace:byte; dirBase:longint;
-                         hugeInfoMask:longint; hugeStateInfo:PBYTE;
-                         hugeDataLen:longint;
-                         hugeData:PBYTE;
-                         nextHugeStateInfo:PBYTE;
-                         hugeDataUsed:PLongint):longint;cdecl;external 'clib' name 'NWSetHugeNSInfo';
-function NWSetHugeNSInfo(volNum,nameSpace:byte; dirBase:longint;
-                         hugeInfoMask:longint; var hugeStateInfo;
-                         hugeDataLen:longint;
-                         var hugeData;
-                         var nextHugeStateInfo;
-                         var hugeDataUsed:longint):longint;cdecl;external 'clib' name 'NWSetHugeNSInfo';
-
-function NWSetNameSpaceEntryName(path:PChar; nameSpace:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWSetNameSpaceEntryName';
-function NWSetNSInfo(volNum,srcNameSpace,dstNameSpace:byte; dirBase:longint;
-                     nsInfoMask:longint;
-                     nsSpecificInfoLen:longint;
-                     nsSpecificInfo:Pointer):longint;cdecl;external 'clib' name 'NWSetNSInfo';
-function NWSetNSInfo(volNum,srcNameSpace,dstNameSpace:byte; dirBase:longint;
-                     nsInfoMask:longint;
-                     nsSpecificInfoLen:longint;
-                     var nsSpecificInfo):longint;cdecl;external 'clib' name 'NWSetNSInfo';
-function SetCurrentNameSpace(newNameSpace:byte):byte;cdecl;external 'clib' name 'SetCurrentNameSpace';
-function SetTargetNameSpace(newNameSpace:byte):byte;cdecl;external 'clib' name 'SetTargetNameSpace';
-{-nwproc.h---------------------------------------------------------------------}
-type TStdfds = array[0..2] of longint;
-
-function CreateChildProcess (func:pointer;
-                             threadName:PChar;
-                             cmdLine:PChar;
-                             arg:PChar;
-                             stack:pointer;
-                             stackSize:longint;
-                             stdfds:TStdfds;
-                             clearenv:longint;
-                             procName:PChar;
-                             enableApp:longint):Tpid_t;cdecl;external 'clib' name 'CreateChildProcess';
-function KillChildProcess(pid:Tpid_t):longint;cdecl;external 'clib' name 'KillChildProcess';
-function WaitOnChildProcess(pid:Tpid_t; statloc:Plongint; options:longint):longint;cdecl;external 'clib' name 'WaitOnChildProcess';
-function WaitOnChildProcess(pid:Tpid_t; var statloc:longint; options:longint):longint;cdecl;external 'clib' name 'WaitOnChildProcess';
-{-nwsemaph.h-------------------------------------------------------------------}
-function CloseLocalSemaphore       (semaHandle : longint)       : longint; cdecl; external 'clib' name 'CloseLocalSemaphore';
-function ExamineLocalSemaphore     (semaHandle : longint)       : longint; cdecl; external 'clib' name 'ExamineLocalSemaphore';
-function OpenLocalSemaphore        (initValue  : longint)       : longint; cdecl; external 'clib' name 'OpenLocalSemaphore';
-function SignalLocalSemaphore      (semaHandle : longint)       : longint; cdecl; external 'clib' name 'SignalLocalSemaphore';
-function TimedWaitOnLocalSemaphore (semaHandle,Timeout:longint) : longint; cdecl; external 'clib' name 'TimedWaitOnLocalSemaphore';
-function WaitOnLocalSemaphore      (semaHandle : longint)       : longint; cdecl; external 'clib' name 'WaitOnLocalSemaphore';
-{-signal.h---------------------------------------------------------------------}
-{ #define SIG_IGN            (void (*)(int)) 1 }
-{ #define SIG_DFL            (void (*)(int)) 2 }
-{ #define SIG_ERR            (void (*)(int)) 3 }
-const
-    SIGABRT = 1;
-    SIGFPE = 2;
-    SIGILL = 3;
-    SIGINT = 4;
-    SIGSEGV = 5;
-    SIGTERM = 6;
-    SIGPOLL = 7;
- { currently unimplemented POSIX-mandated signals  }
-    SIGKILL = 101;
-    SA_NOCLDSTOP = 102;
-    SIGALRM = 103;
-    SIGCHILD = 104;
-    SIGCONT = 105;
-    SIGHUP = 106;
-    SIGPIPE = 107;
-    SIGQUIT = 108;
-    SIGSTOP = 109;
-    SIGTSTP = 110;
-    SIGTTIN = 111;
-    SIGTTOU = 112;
-    SIGUSR1 = 113;
-    SIGUSR2 = 114;
-    SIG_BLOCK = 115;
-    SIG_SETMASK = 116;
-    SIG_UNBLOCK = 117;
- { Novell-defined signals  }
-    SIG_FINI = 500;
-    SIG_IPBIND = 501;
-    SIG_IPUNBIND = 502;
-    SIG_IPXBIND = 503;
-    SIG_IPXUNBIND = 504;
-    SIG_IPREGISTER = 505;
-    SIG_IPUNREGISTER = 506;
-    SIG_IPXREGISTER = 507;
-    SIG_IPXUNREGISTER = 508;
-    SIG_LOCALECHANGE = 510;
-
-type
-   Psig_atomic_t = ^Tsig_atomic_t;
-   Tsig_atomic_t = longint;
-   TSigHandlerProc = procedure (Sig:longint); cdecl;
-
-function _raise(para1:longint):longint;cdecl;external 'clib' name 'raise';
-function signal(sig:longint; func:TSigHandlerProc):longint;cdecl;external 'clib' name 'signal';
-
-function nw_raise(para1:longint):longint;cdecl;external 'clib' name 'raise';
-function nw_signal(sig:longint; func:TSigHandlerProc):longint;cdecl;external 'clib' name 'signal';
-{-nwstring.h-------------------------------------------------------------------}
-function ASCIIZToLenStr (lenString,ASCIIZstring:Pchar) : longint; cdecl;external 'clib' name 'ASCIIZToLenStr';
-function ASCIIZToMaxLenStr (lenString,ASCIIZstring:Pchar; maximumLength:longint):longint; cdecl;external 'clib' name 'ASCIIZToMaxLenStr';
-function IntSwap (w:word):word; cdecl;external 'clib' name 'IntSwap';
-function LenStrCat (destStr,srcStr:Pchar):Pchar; cdecl;external 'clib' name 'LenStrCat';
-function LenStrCmp (s1,s2:Pchar):longint; cdecl;external 'clib' name 'LenStrCmp';
-function LenStrCpy (dest,src:Pchar):Pchar; cdecl;external 'clib' name 'LenStrCpy';
-function LenToASCIIZStr (ASCIIZstring,lenString:Pchar) : longint; cdecl;external 'clib' name 'LenToASCIIZStr';
-function LongSwap (l:longint) : longint; cdecl;external 'clib' name 'LongSwap';
-{-nwtoolib.h-------------------------------------------------------------------}
-type
-  TreadFunc           = function :longint; cdecl;
-  TNLMBeginFunc       = procedure (NLMID:longint; commandLine:Pchar); cdecl;
-  TNLMPreEndFunc      = procedure (NLMID:longint); cdecl;
-  TNLMPostEndFunc     = procedure (NLMID:longint); cdecl;
-  TNLMEndNoContextFunc= procedure (NLMID:longint); cdecl;
-  TthreadGroupBeginFunc=function (threadGroupID:longint; argc:longint; const argv:array of Pchar):longint; cdecl;
-  TthreadGroupEndFunc = procedure (threadGroupID:longint); cdecl;
-  TthreadBeginFunc    = function (threadID:longint):longint;  cdecl;
-  TthreadEndFunc      = procedure (threadID:longint); cdecl;
-  TthreadReleaseFileResourcesFunc = procedure (threadID:longint); cdecl;
-
-function _NWGetErrno:longint;cdecl;external 'clib' name '_NWGetErrno';
-function _NWGetNWErrno:longint;cdecl;external 'clib' name '_NWGetNWErrno';
-function _NWGetNLMLevelLibDataPtr(NLMID:longint):pointer;cdecl;external 'clib' name '_NWGetNLMLevelLibDataPtr';
-function _NWGetThreadGroupLevelLibDataPtr(threadGroupID:longint):pointer;cdecl;external 'clib' name '_NWGetThreadGroupLevelLibDataPtr';
-function _NWGetThreadLevelLibDataPtr(threadID:longint):pointer;cdecl;external 'clib' name '_NWGetThreadLevelLibDataPtr';
-function _NWLoadNLMMessageTable(NLMHandle:longint; messageTable:PPPchar; messageCount:Plongint; languageID:Plongint):longint;cdecl;external 'clib' name '_NWLoadNLMMessageTable';
-function _NWRegisterNLMLibrary (NLMHandle:longint;
-                                NLMFileHandle:longint;
-                                readFunc:TReadFunc;
-                                NLMBegin:TNLMBeginFunc;
-                                NLMPreEnd:TNLMPreEndFunc;
-                                NLMPostEnd:TNLMPostEndFunc;
-                                NLMEndNoContext:TNLMEndNoContextFunc;
-                                threadGroupBegin:TthreadGroupBeginFunc;
-                                threadGroupEnd:TthreadGroupEndFunc;
-                                threadBegin:TthreadBeginFunc;
-                                threadEnd:TthreadEndFunc;
-                                threadReleaseFileResources:TthreadReleaseFileResourcesFunc ):longint;cdecl;external 'clib' name '_NWRegisterNLMLibrary';
-procedure _NWSetErrno   (errnoValue : longint);cdecl;external 'clib' name '_NWSetErrno';
-procedure _NWSetNWErrno (NWErrnoValue : longint);cdecl;external 'clib' name '_NWSetNWErrno';
-procedure _NWSetNLMLevelLibDataPtr (NLMID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetNLMLevelLibDataPtr';
-procedure _NWSetThreadGroupLevelLibDataPtr (threadGroupID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetThreadGroupLevelLibDataPtr';
-procedure _NWSetThreadLevelLibDataPtr (threadID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetThreadLevelLibDataPtr';
-{-stdio.h----------------------------------------------------------------------}
-type
-   Tva_list = pointer;  // dont know what this is
-
-   Pfpos_t = ^Tfpos_t;
-   Tfpos_t = longint;
-
-   Pwchar_t = ^Twchar_t;
-   Twchar_t = word;
-
-   Pwint_t = ^Twint_t;
-   Twint_t = longint;
-{ values for fseek()' whence argument  }
-{ add 'offset' to beginning of file         }
-
-const
-   SEEK_SET = 0;
-{ add 'offset' to current position in file  }
-   SEEK_CUR = 1;
-{ add 'offset' to end of file               }
-   SEEK_END = 2;
-{ miscellaneous definitions  }
-{ at least this many FILEs available        }
-   FOPEN_MAX = 20;
-{ (extreme) default buffer size             }
-   BUFSIZ = 1024;
-{ max number of characters in a path name   }
-   FILENAME_MAX = 1024;
-{ definitions for tmpnam() and tmpfil()  }
-{ "_T-00000.TMP" to "_T-99999.TMP"          }
-   TMP_MAX = 100000;
-{ 8 + 1 + 3 + 1 (always DOS namespace)      }
-   L_tmpnam = 13;
-{ values for field '_flag' in FILE below  }
-{ currently reading                         }
-   _IOREAD = $0001;
-{ currently writing                         }
-   _IOWRT = $0002;
-{ opened for reading and writing            }
-   _IORW = $0004;
-{ binary file (O_BINARY)                    }
-   _IOBIN = $0008;
-{ unbuffered (e.g.: stdout and stderr)      }
-   _IONBF = $0010;
-{ line buffered (e.g.: stdin)               }
-   _IOLBF = $0020;
-{ fully buffered (most files)               }
-   _IOFBF = $0040;
-{ EOF reached on read                       }
-   _IOEOF = $0080;
-{ I/O error from system                     }
-   _IOERR = $0100;
-{ stdio code malloc()'d this buffer         }
-   _IOBUF = $0200;
-{ was a temporary file by tmpfile()         }
-   _IOTMP = $0400;
-{ file stream structure                     }
-type
-   Piobuf = ^Tiobuf;
-   Tiobuf = record
-        _signature : dword;    { identifies this structure                 }
-        _avail : longint;      { available (unused/unread) room in buffer  }
-        _ptr : Pbyte;          { next character from/to here in buffer     }
-        _base : Pbyte;         { the buffer (not really)                   }
-        _oflag : dword;        { pre-CLib.NLM v4.11 compatibility          }
-        _file : dword;         { file descriptor                           }
-        _flag : dword;         { state of stream                           }
-        _buf : array[0..3] of
-                  byte;        { fake, micro buffer as a fall-back         }
-        _env : dword;          { Macintosh or UNIX text file signature     }
-     end;
-   TFILE = Tiobuf;
-   PFILE = ^TFILE;
-   PPFILE = ^PFILE;
-
-
-{ ISO/ANSI C defined functions...  }
-procedure clearerr(para1:PFILE);cdecl;external 'clib' name 'clearerr';
-procedure clearerr(var para1:TFILE);cdecl;external 'clib' name 'clearerr';
-function fclose(para1:PFILE):longint;cdecl;external 'clib' name 'fclose';
-function fclose(var para1:TFILE):longint;cdecl;external 'clib' name 'fclose';
-function feof(para1:PFILE):longint;cdecl;external 'clib' name 'feof';
-function feof(var para1:TFILE):longint;cdecl;external 'clib' name 'feof';
-function ferror(para1:PFILE):longint;cdecl;external 'clib' name 'ferror';
-function ferror(var para1:TFILE):longint;cdecl;external 'clib' name 'ferror';
-function fflush(para1:PFILE):longint;cdecl;external 'clib' name 'fflush';
-function fflush(var para1:TFILE):longint;cdecl;external 'clib' name 'fflush';
-function fgetc(para1:PFILE):char;cdecl;external 'clib' name 'fgetc';
-function fgetc(var para1:TFILE):char;cdecl;external 'clib' name 'fgetc';
-function fgetpos(para1:PFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fgetpos';
-function fgetpos(var para1:TFILE; var para2:Tfpos_t):longint;cdecl;external 'clib' name 'fgetpos';
-function fgets(para1:Pchar; para2:longint; para3:PFILE):Pchar;cdecl;external 'clib' name 'fgets';
-function fgets(para1:Pchar; para2:longint; var para3:TFILE):Pchar;cdecl;external 'clib' name 'fgets';
-function fopen(para1,para2:Pchar):PFILE;cdecl;external 'clib' name 'fopen';
-function fprintf(para1:PFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fprintf';
-function fprintf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fprintf';
-function fprintf(para1:PFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fprintf';
-function fprintf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fprintf';
-function fputc(para1:longint; para2:PFILE):longint;cdecl;external 'clib' name 'fputc';
-function fputs(para1:Pchar; para2:PFILE):longint;cdecl;external 'clib' name 'fputs';
-function fread(para1:pointer; para2:Tsize_t; para3:Tsize_t; para4:PFILE):Tsize_t;cdecl;external 'clib' name 'fread';
-function freopen(para1:Pchar; para2:Pchar; para3:PFILE):PFILE;cdecl;external 'clib' name 'freopen';
-function fscanf(para1:PFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fscanf';
-function fscanf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fscanf';
-function fscanf(para1:PFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fscanf';
-function fscanf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fscanf';
-function fseek(fp:PFILE; offset:longint; whence:longint):longint;cdecl;external 'clib' name 'fseek';
-function fseek(var fp:TFILE; offset:longint; whence:longint):longint;cdecl;external 'clib' name 'fseek';
-(* Const before type ignored *)
-function fsetpos(para1:PFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fsetpos';
-function fsetpos(var para1:TFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fsetpos';
-function ftell(para1:PFILE):longint;cdecl;external 'clib' name 'ftell';
-function ftell(var para1:TFILE):longint;cdecl;external 'clib' name 'ftell';
-
-function fwrite(para1:pointer; para2:Tsize_t; para3:Tsize_t; para4:PFILE):Tsize_t;cdecl;external 'clib' name 'fwrite';
-
-function getc(para1:PFILE):char;cdecl;external 'clib' name 'getc';
-function getc(var para1:TFILE):char;cdecl;external 'clib' name 'getc';
-
-function getchar:char;cdecl;external 'clib' name 'getchar';
-function gets(para1:Pchar):Pchar;cdecl;external 'clib' name 'gets';
-procedure perror(para1:Pchar);cdecl;external 'clib' name 'perror';
-function printf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'printf';
-function printf(para1:Pchar):longint;cdecl;external 'clib' name 'printf';
-function putc(para1:char; para2:PFILE):longint;cdecl;external 'clib' name 'putc';
-function putc(para1:char; var para2:TFILE):longint;cdecl;external 'clib' name 'putc';
-
-function putchar(para1:char):longint;cdecl;external 'clib' name 'putchar';
-
-function puts(para1:Pchar):longint;cdecl;external 'clib' name 'puts';
-function remove(para1:Pchar):longint;cdecl;external 'clib' name 'remove';
-function rename(para1, para2:Pchar):longint;cdecl;external 'clib' name 'rename';
-procedure rewind(para1:PFILE);cdecl;external 'clib' name 'rewind';
-procedure rewind(var para1:TFILE);cdecl;external 'clib' name 'rewind';
-
-function scanf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'scanf';
-function scanf(para1:Pchar):longint;cdecl;external 'clib' name 'scanf';
-procedure setbuf(para1:PFILE; para2:Pchar);cdecl;external 'clib' name 'setbuf';
-procedure setbuf(var para1:TFILE; para2:Pchar);cdecl;external 'clib' name 'setbuf';
-function setvbuf(para1:PFILE; para2:Pchar; para3:longint; para4:Tsize_t):longint;cdecl;external 'clib' name 'setvbuf';
-function setvbuf(para1:TFILE; para2:Pchar; para3:longint; para4:Tsize_t):longint;cdecl;external 'clib' name 'setvbuf';
-
-function sprintf(para1,para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'sprintf';
-function sprintf(para1,para2:Pchar):longint;cdecl;external 'clib' name 'sprintf';
-function sscanf(para1, para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'sscanf';
-function sscanf(para1, para2:Pchar):longint;cdecl;external 'clib' name 'sscanf';
-function tmpfile:PFILE;cdecl;external 'clib' name 'tmpfile';
-function tmpnam(para1:Pchar):Pchar;cdecl;external 'clib' name 'tmpnam';
-function ungetc(para1:longint; para2:PFILE):longint;cdecl;external 'clib' name 'ungetc';
-function ungetc(para1:longint; var para2:TFILE):longint;cdecl;external 'clib' name 'ungetc';
-
-function vfprintf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfprintf';
-function vfprintf(var para1:TFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfprintf';
-
-function vfscanf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfscanf';
-function vfscanf(var para1:TFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfscanf';
-
-function vprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vprintf';
-function vscanf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vscanf';
-function vsprintf(para1,para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vsprintf';
-function vsscanf(para1, para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vsscanf';
-{ POSIX-defined additions...  }
-function fdopen(para1:longint; para2:Pchar):PFILE;cdecl;external 'clib' name 'fdopen';
-function fileno(fp:PFILE):longint;cdecl;external 'clib' name 'fileno';
-function fileno(var f:TFILE):longint;cdecl;external 'clib' name 'fileno';
-//function cgets(para1:Pchar):Pchar;cdecl;external 'clib' name 'cgets';
-//function cprintf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'cprintf';
-//function cprintf(para1:Pchar):longint;cdecl;external 'clib' name 'cprintf';
-//function cputs(para1:Pchar):longint;cdecl;external 'clib' name 'cputs';
-//function cscanf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'cscanf';
-//function cscanf(para1:Pchar):longint;cdecl;external 'clib' name 'cscanf';
-function fcloseall:longint;cdecl;external 'clib' name 'fcloseall';
-function fgetchar:longint;cdecl;external 'clib' name 'fgetchar';
-function flushall:longint;cdecl;external 'clib' name 'flushall';
-function fputchar(para1:longint):longint;cdecl;external 'clib' name 'fputchar';
-function vcprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vcprintf';
-function vcscanf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vcscanf';
-function NWfprintf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'NWfprintf';
-function NWfprintf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'NWfprintf';
-function NWvcprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'NWvcprintf';
-function NWvfprintf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'NWvfprintf';
-function NWvprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'NWvprintf';
-function NWvsprintf(para1:Pchar; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'NWvsprintf';
-{
-   For the following support, open the file without 'b' in the mode. Additions
-   for transparent Macintosh text file support ('\r' on lines) and additions
-   for transparent UNIX text file support ('\n' on lines).
- }
-function IsMacintoshTextFile(para1:PFILE):longint;cdecl;external 'clib' name 'IsMacintoshTextFile';
-function SetMacintoshTextMode(para1:PFILE):longint;cdecl;external 'clib' name 'SetMacintoshTextMode';
-function UnsetMacintoshTextMode(para1:PFILE):longint;cdecl;external 'clib' name 'UnsetMacintoshTextMode';
-
-function IsMacintoshTextFile(var para1:TFILE):longint;cdecl;external 'clib' name 'IsMacintoshTextFile';
-function SetMacintoshTextMode(var para1:TFILE):longint;cdecl;external 'clib' name 'SetMacintoshTextMode';
-function UnsetMacintoshTextMode(var para1:TFILE):longint;cdecl;external 'clib' name 'UnsetMacintoshTextMode';
-
-{ back to '\r\n'  }
-function is_unix_text_file(para1:PFILE):longint;cdecl;external 'clib' name 'is_unix_text_file';
-function set_unix_text_mode(para1:PFILE):longint;cdecl;external 'clib' name 'set_unix_text_mode';
-function unset_unix_text_mode(para1:PFILE):longint;cdecl;external 'clib' name 'unset_unix_text_mode';
-
-function is_unix_text_file(var para1:TFILE):longint;cdecl;external 'clib' name 'is_unix_text_file';
-function set_unix_text_mode(var para1:TFILE):longint;cdecl;external 'clib' name 'set_unix_text_mode';
-function unset_unix_text_mode(var para1:TFILE):longint;cdecl;external 'clib' name 'unset_unix_text_mode';
-
-{ back to '\r\n'  }
-{ functions underlying macro support...  }
-function __get_stdin:PPFILE;cdecl;external 'clib' name '__get_stdin';
-function __get_stdout:PPFILE;cdecl;external 'clib' name '__get_stdout';
-function __get_stderr:PPFILE;cdecl;external 'clib' name '__get_stderr';
-
-function stdin : PFILE;
-function stdout : PFILE;
-function stderr : PFILE;
-{-stdlib.h---------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-
-const
-   EXIT_FAILURE = -(1);
-   EXIT_SUCCESS = 0;
-   RAND_MAX = 32767;
-type
-   Pdiv_t = ^Tdiv_t;
-   Tdiv_t = record
-        quot : longint;
-        rem : longint;
-     end;
-
-   Pldiv_t = ^Tldiv_t;
-   Tldiv_t = record
-        quot : longint;
-        rem : longint;
-     end;
-
-   TCdeclProcedure = procedure; cdecl;
-   TBSearchFunc = function (para1:pointer; para2:pointer):longint; cdecl;
-   TQSortFunc = function (para1:pointer; para2:pointer):longint; cdecl;
-
-//??  var __ctype : array of byte;cvar;external;
-
-procedure abort;cdecl;external 'clib' name 'abort';
-function abs(para1:longint):longint;cdecl;external 'clib' name 'abs';
-function atexit(proc:TCdeclProcedure):longint;cdecl;external 'clib' name 'atexit';
-function atof(para1:Pchar):double;cdecl;external 'clib' name 'atof';
-function atoi(para1:Pchar):longint;cdecl;external 'clib' name 'atoi';
-function atol(para1:Pchar):longint;cdecl;external 'clib' name 'atol';
-function bsearch(para1,para2:pointer; para3,para4:Tsize_t; para5:TBsearchFunc):pointer;cdecl;external 'clib' name 'bsearch';
-function calloc(para1:Tsize_t; para2:Tsize_t):pointer;cdecl;external 'clib' name 'calloc';
-function _div(para1,para2:longint):Tdiv_t;cdecl;external 'clib' name 'div';
-procedure exit(para1:longint);cdecl;external 'clib' name 'exit';
-procedure _exit(para1:longint);cdecl;external 'clib' name '_exit';
-function getenv(para1:Pchar):Pchar;cdecl;external 'clib' name 'getenv';
-function labs(para1:longint):longint;cdecl;external 'clib' name 'labs';
-function ldiv(para1:longint; para2:longint):Tldiv_t;cdecl;external 'clib' name 'ldiv';
-function malloc(para1:Tsize_t):pointer;cdecl;external 'clib' name 'malloc';
-function mblen(para1:Pchar; para2:Tsize_t):longint;cdecl;external 'clib' name 'mblen';
-function mbstowcs(para1:Pwchar_t; para2:Pchar; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'mbstowcs';
-function mbtowc(para1:Pwchar_t; para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'mbtowc';
-procedure qsort(para1:pointer; para2,para3:Tsize_t; para4:TQSortFunc);cdecl;external 'clib' name 'qsort';
-function rand:longint;cdecl;external 'clib' name 'rand';
-function realloc(para1:pointer; para2:Tsize_t):pointer;cdecl;external 'clib' name 'realloc';
-procedure srand(para1:dword);cdecl;external 'clib' name 'srand';
-function strtod(para1:Pchar; para2:PPchar):double;cdecl;external 'clib' name 'strtod';
-function strtol(para1:Pchar; para2:PPchar; para3:longint):longint;cdecl;external 'clib' name 'strtol';
-function strtoul(para1:Pchar; para2:PPchar; para3:longint):dword;cdecl;external 'clib' name 'strtoul';
-function _system(para1:Pchar):longint;cdecl;external 'clib' name 'system';
-function wcstombs(para1:Pchar; para2:Pwchar_t; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'wcstombs';
-function wctomb(para1:Pchar; para2:Twchar_t):longint;cdecl;external 'clib' name 'wctomb';
-function clearenv:longint;cdecl;external 'clib' name 'clearenv';
-function ecvt(para1:double; para2:longint; para3:Plongint; para4:Plongint):Pchar;cdecl;external 'clib' name 'ecvt';
-function fcvt(para1:double; para2:longint; para3:Plongint; para4:Plongint):Pchar;cdecl;external 'clib' name 'fcvt';
-function gcvt(para1:double; para2:longint; para3:Pchar):Pchar;cdecl;external 'clib' name 'gcvt';
-function htol(para1:Pchar):dword;cdecl;external 'clib' name 'htol';
-function itoa(para1:longint; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'itoa';
-function itoab(para1:dword; para2:Pchar):Pchar;cdecl;external 'clib' name 'itoab';
-function ltoa(para1:longint; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'ltoa';
-function max(para1:longint; para2:longint):longint;cdecl;external 'clib' name 'max';
-function min(para1:longint; para2:longint):longint;cdecl;external 'clib' name 'min';
-function putenv(name:Pchar):longint;cdecl;external 'clib' name 'putenv';
-function rand_r(seed:Pdword; result:Plongint):longint;cdecl;external 'clib' name 'rand_r';
-function _rotl(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_rotl';
-function _rotr(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_rotr';
-function scanenv(sequence:Plongint; variable:Pchar; length:Psize_t; value:Pchar):longint;cdecl;external 'clib' name 'scanenv';
-function setenv(name:Pchar; value:Pchar; overwrite:longint):longint;cdecl;external 'clib' name 'setenv';
-// double   strtod_ld( const char *, char **, long double *);
-function strtoi(para1:Pchar; para2:longint):longint;cdecl;external 'clib' name 'strtoi';
-function ultoa(para1:dword; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'ultoa';
-function unsetenv(name:Pchar):longint;cdecl;external 'clib' name 'unsetenv';
-function utoa(para1:dword; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'utoa';
-function _lrotl(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_lrotl';
-function _lrotr(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_lrotr';
-{-unistd.h---------------------------------------------------------------------}
-const
-   F_OK = 0;
-   R_OK = 4;
-   W_OK = 2;
-   X_OK = 1;
-{ test using effective ids  }
-   EFF_ONLY_OK = 8;
-   STDIN_FILENO = 0;
-   STDOUT_FILENO = 1;
-   STDERR_FILENO = 2;
-
-type TPipeFiledes = array [0..1] of longint;
-
-function access(path:Pchar; mode:longint):longint;cdecl;external 'clib' name 'access';
-function chdir(path:Pchar):longint;cdecl;external 'clib' name 'chdir';
-function chsize(fildes:longint; size:dword):longint;cdecl;external 'clib' name 'chsize';
-function close(fildes:longint):longint;cdecl;external 'clib' name 'close';
-function dup(fildes:longint):longint;cdecl;external 'clib' name 'dup';
-function dup2(fildes1:longint; fildes2:longint):longint;cdecl;external 'clib' name 'dup2';
-function eof(fildes:longint):longint;cdecl;external 'clib' name 'eof';
-function getcwd(path:Pchar; len:Tsize_t):Pchar;cdecl;external 'clib' name 'getcwd';
-function isatty(fildes:longint):longint;cdecl;external 'clib' name 'isatty';
-function lseek(fildes:longint; offset:Toff_t; whence:longint):Toff_t;cdecl;external 'clib' name 'lseek';
-function pipe(fildes:TPipeFiledes):longint;cdecl;external 'clib' name 'pipe';
-function read(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'read';
-function rmdir(path:Pchar):longint;cdecl;external 'clib' name 'rmdir';
-function unlink(path:Pchar):longint;cdecl;external 'clib' name 'unlink';
-function write(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
-function pread(fildes:longint; buf:pointer; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pread';
-function pwrite(fildes:longint; buf:pointer; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pwrite';
-
-function write(fildes:longint; var buf; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
-function pread(fildes:longint; var buf; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pread';
-function pwrite(fildes:longint; var buf; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pwrite';
-{-libcclib.h-------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-type
-   Tstart_routineProc = procedure (arg:pointer); cdecl;
-   Pclibctx_t = ^Tclibctx_t;
-   Tclibctx_t = record
-     ThreadGroupGetID   : function :longint;cdecl;
-     ThreadGroupCreate  : function (name:Pchar; threadGroupID:Plongint):longint; cdecl;
-     ThreadGroupDispose : function (threadGroupID:longint):longint; cdecl;
-     ThreadGroupUnwrap  : function (threadGroupID:longint; restoredThreadGroupID:longint):longint; cdecl;
-     ThreadGroupWrap    : function (threadGroupID:longint):longint; cdecl;
-     ThreadCreate       : function (threadGroupID:longint;
-                              start_routine:Tstart_routineProc;
-                              arg:pointer;
-                              stackSize:Tsize_t;
-                              flags:dword;
-                              threadID:Plongint):longint; cdecl;
-     __UnloadBroker     : procedure ; cdecl;
-     reserved1          : pointer;
-     reserved           : array[0..7] of pointer;
-   end;
-
-function CLibLoadContextBroker(module:pointer; callback:Pchar):longint;cdecl;external 'clib' name 'CLibLoadContextBroker';
-function CLibUnloadContextBroker(broker:Pclibctx_t):longint;cdecl;external 'clib' name 'CLibUnloadContextBroker';
-function MyCallBack(broker:Pclibctx_t):longint;cdecl;external 'clib' name 'MyCallBack';
-{-nwtime.h---------------------------------------------------------------------}
-const
-   CLOCK_IS_SYNCHRONIZED = $01;
-type
-
-   PclockAndStatus = ^TclockAndStatus;
-   TclockAndStatus = longint;
-
-const
-   CLOCK_IS_NETWORK_SYNCHRONIZED = $02;
-   CLOCK_SYNCHRONIZATION_IS_ACTIVE = $04;
-
-{$include npackon.inc}
-type
-   PDOSTime = ^TDOSTime;
-   TDOSTime = record
-        flag0 : word;
-     end;
-
-const
-   bm_TDOSTime_bisecond = $1F;
-   bp_TDOSTime_bisecond = 0;
-   bm_TDOSTime_minute = $7E0;
-   bp_TDOSTime_minute = 5;
-   bm_TDOSTime_hour = $F800;
-   bp_TDOSTime_hour = 11;
-function bisecond(var a : TDOSTime) : word;
-procedure set_bisecond(var a : TDOSTime; __bisecond : word);
-function minute(var a : TDOSTime) : word;
-procedure set_minute(var a : TDOSTime; __minute : word);
-function hour(var a : TDOSTime) : word;
-procedure set_hour(var a : TDOSTime; __hour : word);
-type
-   PDOSDate = ^TDOSDate;
-   TDOSDate = record
-        flag0 : word;
-     end;
-   T_DOSDate = TDOSDate;
-
-const
-   bm_TDOSDate_day = $1F;
-   bp_TDOSDate_day = 0;
-   bm_TDOSDate_month = $1E0;
-   bp_TDOSDate_month = 5;
-   bm_TDOSDate_yearsSince80 = $FE00;
-   bp_TDOSDate_yearsSince80 = 9;
-function day(var a : TDOSDate) : word;
-procedure set_day(var a : TDOSDate; __day : word);
-function month(var a : TDOSDate) : word;
-procedure set_month(var a : TDOSDate; __month : word);
-function yearsSince80(var a : TDOSDate) : word;
-procedure set_yearsSince80(var a : TDOSDate; __yearsSince80 : word);
-type
-   P_DOSTime = ^T_DOSTime;
-   T_DOSTime = record
-        flag0 : word;
-     end;
-
-const
-   bm_T_DOSTime_bisecond = $1F;
-   bp_T_DOSTime_bisecond = 0;
-   bm_T_DOSTime_minute = $7E0;
-   bp_T_DOSTime_minute = 5;
-   bm_T_DOSTime_hour = $F800;
-   bp_T_DOSTime_hour = 11;
-function bisecond(var a : T_DOSTime) : word;
-procedure set_bisecond(var a : T_DOSTime; __bisecond : word);
-function minute(var a : T_DOSTime) : word;
-procedure set_minute(var a : T_DOSTime; __minute : word);
-function hour(var a : T_DOSTime) : word;
-procedure set_hour(var a : T_DOSTime; __hour : word);
-
-const
-   bm_T_DOSDate_day = $1F;
-   bp_T_DOSDate_day = 0;
-   bm_T_DOSDate_month = $1E0;
-   bp_T_DOSDate_month = 5;
-   bm_T_DOSDate_yearsSince80 = $FE00;
-   bp_T_DOSDate_yearsSince80 = 9;
-
-
-{$include npackoff.inc}
-
-function _ConvertDOSTimeToCalendar(dateTime:longint):Ttime_t;cdecl;external 'clib' name '_ConvertDOSTimeToCalendar';
-procedure _ConvertTimeToDOS(calendarTime:Ttime_t; filDatP:PDOSDate; filTimP:PDOSTime);cdecl;external 'clib' name '_ConvertTimeToDOS';
-procedure GetClockStatus(_dataPtr:TclockAndStatus);cdecl;external 'clib' name 'GetClockStatus';
-function GetCurrentTicks:longint;cdecl;external 'clib' name 'GetCurrentTicks';
-function GetHighResolutionTimer:longint;cdecl;external 'clib' name 'GetHighResolutionTimer';
-function GetSuperHighResolutionTimer:longint;cdecl;external 'clib' name 'GetSuperHighResolutionTimer';
-function NWGetHighResolutionTimer:longint;cdecl;external 'clib' name 'NWGetHighResolutionTimer';
-function NWGetSuperHighResolutionTimer:longint;cdecl;external 'clib' name 'NWGetSuperHighResolutionTimer';
-function __get_altzone:Ptime_t;cdecl;external 'clib' name '__get_altzone';
-function altzone:Ptime_t;cdecl;external 'clib' name '__get_altzone';
-function __get_daylight:Plongint;cdecl;external 'clib' name '__get_daylight';
-function daylight:Plongint;cdecl;external 'clib' name '__get_daylight';
-function __get_daylightOffset:Ptime_t;cdecl;external 'clib' name '__get_daylightOffset';
-function daylightOffset:Ptime_t;cdecl;external 'clib' name '__get_daylightOffset';
-function __get_daylightOnOff:Plongint;cdecl;external 'clib' name '__get_daylightOnOff';
-function daylightOnOff:Plongint;cdecl;external 'clib' name '__get_daylightOnOff';
-function __get_timezone:Ptime_t;cdecl;external 'clib' name '__get_timezone';
-function timezone:Ptime_t;cdecl;external 'clib' name '__get_timezone';
-procedure SecondsToTicks(Seconds:longint; TenthsOfSeconds:longint; Ticks:Plongint);cdecl;external 'clib' name 'SecondsToTicks';
-procedure TicksToSeconds(Ticks:longint; Seconds:Plongint; TenthsOfSeconds:Plongint);cdecl;external 'clib' name 'TicksToSeconds';
-{-nwthread.h-------------------------------------------------------------------}
-  { values for __action_code used with ExitThread()  }
-
-  const
-     TSR_THREAD = -1;
-     EXIT_THREAD = 0;
-     EXIT_NLM = 1;
-  { values for __mode used with spawnxx()  }
-     P_WAIT = 0;
-     P_NOWAIT = 1;
-     P_OVERLAY = 2;
-     P_NOWAITO = 4;
-     P_SPAWN_IN_CURRENT_DOMAIN = 8;
-     NO_CONTEXT = 0;
-     USE_CURRENT_CONTEXT = 1;
-  { stack defines  }
-     MIN_STACKSIZE = 16384;
-     DEFAULT_STACKSIZE = 16384;
-
-  type
-  
-     PWorkToDo = ^TWorkToDo;
-    
-     TProcedure    = procedure; cdecl;
-     TThreadFunc   = procedure (param1:pointer); cdecl;
-     TWorkToDoProc = procedure (data:pointer; workToDo:PWorkToDo); cdecl;
-     TCleanup      = procedure (para1:longint); cdecl;
-
-  
-     PAESProcessStructure = ^TAESProcessStructure;
-     TAESProcessStructure = record
-          ALink              : PAESProcessStructure;
-          AWakeUpDelayAmount : longint;
-          AWakeUpTime        : longint;
-          AProcessToCall     : procedure (para1:pointer);cdecl;
-          ARTag              : longint;
-          AOldLink           : longint;
-       end;
-
-
-     PWorkToDoStructure = ^TWorkToDoStructure;
-     TWorkToDoStructure = record
-          Link            : PWorkToDoStructure;
-          workProcedure   : TProcedure;
-          WorkResourceTag : longint;
-          PollCountAmount : longint;
-          PollCountWhen   : longint;
-          userProcedure   : TProcedure;
-          dataPtr         : pointer;
-          destThreadGroup : longint;
-       end;
-     TWorkToDo = TWorkToDoStructure;
-     
-
-     
-  { custom data area variables...  }
+{ $Id$
+
+  Netware Server Imports for FreePascal, contains definition from the
+  following header files:
+
+  string.h dirent.h errno.h fcntl.h limits.h locale.h nwaudnlm.h
+  nwbitops.h nwcntask.h nwconio.h nwconn.h nwdebug.h nwdfs.h nwdos.h
+  nwerrno.h nwfattr.h nwfileio.h nwfileng.h nwfinfo.h nwfshook.h
+  nwipx.h nwlib.h nwlocale.h nwmalloc.h nwncpx.h nwnspace.h nwproc.h
+  nwsemaph.h nwserv.h nwsignal.h nwstring.h nwtoolib.h stdio.h stdlib.h
+  unistd.h time.h utime.h nwthread.h nwmediam.h ioctl.h
+  sys/socket.h sys/time.h sys/filio.h syys/ioctl.h sys/stat.h
+  sys/time.h sys/timeval.h sys/uio.h sys/utsname.h
+
+  Initial Version 2002/02/22 Armin ([email protected])
+
+  The C-NDK and Documentation can be found here:
+    http://developer.novell.com
+
+  This program is distributed in the hope that it will be useful,but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.
+
+  Do not blame Novell if there are errors in this file, instead
+  contact me and i will se what i can do.
+
+}
+
+unit nwserv;
+
+interface
+
+{$mode objfpc}
+
+const NULL = 0;
+      ThreadsNlm = 'threads';
+      Lib0Nlm    = 'lib0';
+      NlmLibNlm  = 'nlmlib';
+      FIONREAD   = 1;  // get count of bytes to read (readable)
+      FIONBIO    = 2;  // set/clear nonblocking I/O
+      FIOGETNBIO = 3;  // get nonblocking I/O status
+
+type
+   Psize_t = ^Tsize_t;
+   Tsize_t = dword;
+   PPChar = ^PChar;
+   PPPChar= ^PPChar;
+   Tsigset_t = longint;
+
+{-time.h-----------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+const
+   CLOCKS_PER_SEC = 100;
+
+type
+   Pclock_t = ^Tclock_t;
+   Tclock_t = dword;
+
+   Ptime_t = ^Ttime_t;
+   Ttime_t = dword;
+{ seconds after the minute--range [0, 59]      }
+{ minutes after the hour--range [0, 59]        }
+{ hours since midnight--range [0, 23]          }
+{ days of the month--range [1, 31]             }
+{ months since January--range [0, 11]          }
+{ years since 1900--range [0, 99]              }
+{ days since Sunday--range [0, 6]              }
+{ days since first of January--range [0, 365]  }
+{ Daylight Savings Time flag--set [-, 0, +]:   }
+   Ptm = ^Ttm;
+   Ttm = record
+        tm_sec : longint;
+        tm_min : longint;
+        tm_hour : longint;
+        tm_mday : longint;
+        tm_mon : longint;
+        tm_year : longint;
+        tm_wday : longint;
+        tm_yday : longint;
+        tm_isdst : longint;
+     end;
+
+{ ISO/ANSI C functions...  }
+function asctime(para1:Ptm):Pchar;cdecl;external 'clib' name 'asctime';
+function clock:Tclock_t;cdecl;external 'clib' name 'clock';
+function ctime(para1:Ptime_t):Pchar;cdecl;external 'clib' name 'ctime';
+function difftime(para1:Ttime_t; para2:Ttime_t):double;cdecl;external 'clib' name 'difftime';
+function gmtime(para1:Ptime_t):Ptm;cdecl;external 'clib' name 'gmtime';
+function localtime(para1:Ptime_t):Ptm;cdecl;external 'clib' name 'localtime';
+function mktime(para1:Ptm):Ttime_t;cdecl;external 'clib' name 'mktime';
+function strftime(para1:Pchar; para2:Tsize_t; para3:Pchar; para4:Ptm):Tsize_t;cdecl;external 'clib' name 'strftime';
+function time(para1:Ptime_t):Ttime_t;cdecl;external 'clib' name 'time';
+{ POSIX data and functions...  }
+{ For extern char tzname[2], see macro below  }
+procedure tzset;cdecl;external 'clib' name 'tzset';
+function __get_CLK_TCK:Tclock_t;cdecl;external 'clib' name '__get_CLK_TCK';
+function __get_tzname:pPchar;cdecl;external 'clib' name '__get_tzname';
+{ POSIX-defined additions ...  }
+function asctime_r(para1:Ptm; para2:Pchar):Pchar;cdecl;external 'clib' name 'asctime_r';
+function ctime_r(para1:Ptime_t; para2:Pchar):Pchar;cdecl;external 'clib' name 'ctime_r';
+function gmtime_r(para1:Ptime_t; para2:Ptm):Ptm;cdecl;external 'clib' name 'gmtime_r';
+function localtime_r(para1:Ptime_t; para2:Ptm):Ptm;cdecl;external 'clib' name 'localtime_r';
+function CLK_TCK : longint;
+function tzname : pchar;
+
+{-utime.h----------------------------------------------------------------------}
+type
+   Putimbuf = ^Tutimbuf;
+   Tutimbuf = record
+      actime  : Ttime_t;   // access time
+      modtime : Ttime_t;   // modification time
+   end;
+
+
+function utime(path:Pchar; times:Putimbuf):longint;cdecl;external 'clib' name 'utime';
+function utime(path:Pchar; var times:Tutimbuf):longint;cdecl;external 'clib' name 'utime';
+
+{-string.h---------------------------------------------------------------------}
+function memchr(para1:pointer; para2:longint; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memchr';
+function memcmp(para1:pointer; para2:pointer; para3:Tsize_t):longint;cdecl;external 'clib' name 'memcmp';
+function memcpy(para1:pointer; para2:pointer; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memcpy';
+function memmove(para1:pointer; para2:pointer; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memmove';
+function memset(para1:pointer; para2:longint; para3:Tsize_t):pointer;cdecl;external 'clib' name 'memset';
+function strcpy(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strcpy';
+function strcat(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strcat';
+function strchr(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strchr';
+function strcmp(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcmp';
+function strcoll(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcoll';
+function strcspn(para1:Pchar; para2:Pchar):Tsize_t;cdecl;external 'clib' name 'strcspn';
+function strerror(para1:longint):Pchar;cdecl;external 'clib' name 'strerror';
+function strlen(para1:Pchar):Tsize_t;cdecl;external 'clib' name 'strlen';
+function strncat(para1:Pchar; para2:Pchar; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strncat';
+function strncmp(para1:Pchar; para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'strncmp';
+function strncpy(para1:Pchar; para2:Pchar; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strncpy';
+function strpbrk(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strpbrk';
+function strrchr(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strrchr';
+function strspn(para1:Pchar; para2:Pchar):Tsize_t;cdecl;external 'clib' name 'strspn';
+function strstr(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strstr';
+function strtok(para1:Pchar; para2:Pchar):Pchar;cdecl;external 'clib' name 'strtok';
+function strxfrm(para1:Pchar; para2:Pchar; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'strxfrm';
+function strtok_r(para1:Pchar; para2:Pchar; para3:PPchar):Pchar;cdecl;external 'clib' name 'strtok_r';
+function memicmp(para1:pointer; para2:pointer; para3:Tsize_t):longint;cdecl;external 'clib' name 'memicmp';
+function strcmpi(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'strcmpi';
+function stricmp(para1:Pchar; para2:Pchar):longint;cdecl;external 'clib' name 'stricmp';
+function strdup(para1:Pchar):Pchar;cdecl;external 'clib' name 'strdup';
+function strlist(para1,para2:Pchar; args:array of const):Pchar;cdecl;external 'clib' name 'strlist';
+function strlist(para1,para2:Pchar):Pchar;cdecl;external 'clib' name 'strlist';
+function strlwr(para1:Pchar):Pchar;cdecl;external 'clib' name 'strlwr';
+function strnicmp(para1,para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'strnicmp';
+function strnset(para1:Pchar; para2:longint; para3:Tsize_t):Pchar;cdecl;external 'clib' name 'strnset';
+function strrev(para1:Pchar):Pchar;cdecl;external 'clib' name 'strrev';
+function strset(para1:Pchar; para2:longint):Pchar;cdecl;external 'clib' name 'strset';
+function strupr(para1:Pchar):Pchar;cdecl;external 'clib' name 'strupr';
+procedure swab(para1:pointer; para2:pointer; para3:Tsize_t);cdecl;external 'clib' name 'swab';
+procedure swaw(para1:pointer; para2:pointer; para3:Tsize_t);cdecl;external 'clib' name 'swaw';
+{-dirent.h---------------------------------------------------------------------}
+{$I npackon.inc}
+type
+   Pino_t = ^Tino_t;
+   Tino_t = longint;
+   Pdev_t = ^Tdev_t;
+   Tdev_t = longint;
+   Pdirent = ^Tdirent;
+   Tdirent =
+   record
+     d_attr                 : dword;
+     d_time                 : word;
+     d_date                 : word;
+     d_size                 : longint;
+     d_ino                  : Tino_t;
+     d_dev                  : Tdev_t;
+     d_cdatetime            : dword;
+     d_adatetime            : dword;
+     d_bdatetime            : dword;
+     d_uid                  : longint;
+     d_archivedID           : dword;
+     d_updatedID            : dword;
+     d_nameDOS              : array[0..12] of char;
+     d_inheritedRightsMask  : word;
+     d_originatingNameSpace : byte;
+     d_ddatetime            : dword;
+     d_deletedID            : dword;
+     d_name                 : array[0..255] of char;
+   end;
+   TDIR = Tdirent;
+   PDIR = ^TDIR;
+{$I npackoff.inc}
+
+function closedir_old (dirp:PDIR):longint;                            cdecl; external 'clib' name 'closedir';
+function closedir     (dirp:PDIR):longint;                            cdecl; external 'clib' name 'closedir_510';
+function opendir_old  (pathName:Pchar):PDIR;                          cdecl; external 'clib' name 'opendir';
+function opendir      (pathName:Pchar):PDIR;                          cdecl; external 'clib' name 'opendir_411';
+function readdir_old  (dirp:PDIR):PDIR;                               cdecl; external 'clib' name 'readdir';
+function readdir      (dirp:PDIR):PDIR;                               cdecl; external 'clib' name 'readdir_411';
+procedure rewinddir   (dirp:PDIR);                                    cdecl; external 'clib' name 'rewinddir';
+function SetReaddirAttribute(dirp:PDIR; newAttribute:dword):longint;  cdecl; external 'clib' name 'SetReaddirAttribute';
+{-errno.h----------------------------------------------------------------------}
+const
+   ENOENT   = 1;
+   E2BIG    = 2;
+   ENOEXEC  = 3;
+   EBADF    = 4;
+   ENOMEM   = 5;
+   EACCES   = 6;
+   EEXIST   = 7;
+   EXDEV    = 8;
+   EINVAL   = 9;
+   ENFILE   = 10;
+   EMFILE   = 11;
+   ENOSPC   = 12;
+   EDOM     = 13;
+   ERANGE   = 14;
+   EDEADLK  = 15;
+   EINUSE   = 16;
+   ESERVER  = 17;
+   ENOSERVR = 18;
+   EWRNGKND = 19;
+   ETRNREST = 20;
+   ERESOURCE= 21;
+   EBADHNDL = 22;
+   ENO_SCRNS= 23;
+   EAGAIN   = 24;
+   ENXIO    = 25;
+   EBADMSG  = 26;
+   EFAULT   = 27;
+   EIO      = 28;
+   ENODATA  = 29;
+   ENOSTRMS = 30;
+   EPROTO   = 31;
+   EPIPE    = 32;
+   ESPIPE   = 33;
+   ETIME    = 34;
+   EWOULDBLOCK = 35;
+   EINPROGRESS = 36;
+   EALREADY = 37;
+   ENOTSOCK = 38;
+   EDESTADDRREQ = 39;
+   EMSGSIZE        = 40;
+   EPROTOTYPE      = 41;
+   ENOPROTOOPT     = 42;
+   EPROTONOSUPPORT = 43;
+   ESOCKTNOSUPPORT = 44;
+   EOPNOTSUPP = 45;
+   EPFNOSUPPORT = 46;
+   EAFNOSUPPORT = 47;
+   EADDRINUSE = 48;
+   EADDRNOTAVAIL = 49;
+   ENETDOWN = 50;
+   ENETUNREACH = 51;
+   ENETRESET = 52;
+   ECONNABORTED = 53;
+   ECONNRESET = 54;
+   ENOBUFS = 55;
+   EISCONN = 56;
+   ENOTCONN = 57;
+   ESHUTDOWN = 58;
+   ETOOMANYREFS = 59;
+   ETIMEDOUT = 60;
+   ECONNREFUSED = 61;
+
+   EBUSY = 62;
+   EINTR = 63;
+   EISDIR = 64;
+   ENAMETOOLONG = 65;
+   ENOSYS = 66;
+   ENOTDIR = 67;
+   ENOTEMPTY = 68;
+   EPERM = 69;
+   ECHILD = 70;
+   EFBIG = 71;
+   EMLINK = 72;
+   ENODEV = 73;
+   ENOLCK = 74;
+   ENOTTY = 75;
+   EFTYPE = ENOTTY;
+   EROFS = 76;
+   ESRCH = 77;
+   ECANCELED = 78;
+   ENOTSUP = 79;
+
+   // CLib-implementation-specific constants
+   ECANCELLED = ECANCELED;
+   ENLMDATA = 100;
+   EILSEQ = 101;
+   EINCONSIS = 102;
+   EDOSTEXTEOL = 103;
+   ENONEXTANT = 104;
+   ENOCONTEXT = 105;
+   ELASTERR = ENOCONTEXT;
+{-nwerrno.h--------------------------------------------------------------------}
+{ Multi purpose return values.}
+const
+   ESUCCESS = 0;
+   EFAILURE = -(1);
+   ERR_TTS_NOT_AVAILABLE = $00;
+   ERR_RECORD_NOT_LOCKED = $01;
+   ERR_INSUFFICIENT_SPACE = $01;
+   ERR_STRING_EXCEEDS_LENGTH = $01;
+   ERR_TTS_AVAILABLE = $01;
+   ERR_NOT_AVAILABLE_PROTECTED = $64;
+   ERR_NOT_AVAILABLE_ON_3X = $65;
+   ERR_BAD_THREAD_ID = $66;
+   ERR_BAD_PRTY_CLASS = $67;
+   ERR_BAD_PRTY_SCOPE = $68;
+   ERR_NOT_A_POPUP_SCREEN = $69;
+   ERR_OPEN_SCREEN = $6A;
+   ERR_BAD_SHFLAG = $6B;
+   ERR_BAD_ACCESS = $6C;
+   ERR_BAD_ORIGIN = $6D;
+   ERR_BAD_ACTION_CODE = $6E;
+   ERR_OUT_OF_TASKS = $6F;
+   ERR_BAD_QUERY_TYPE = $70;
+   ERR_BAD_LIBRARY_HANDLE = $71;
+   ERR_STREAMS = $72;
+   ERR_BAD_FILE_SERVER_ID = $73;
+   ERR_BAD_CONNECTION_ID = $73;
+   ERR_BAD_FLAGS = $74;
+   ERR_STRUCT_NOT_FOUND = $C8;
+   ERR_NO_ITEMS_FOUND = $79;
+   ERR_NCPEXT_TRANSPORT_PROTOCOL_VIOLATION = $7E;
+   ERR_FILE_IN_USE = $80;
+   ERR_LOCK_FAIL = $80;
+   ERR_MAPPED_TO_A_LOCAL_DRIVE = $80;
+   ERR_NO_MORE_FILE_HANDLES = $81;
+   ERR_NO_OPEN_PRIVILEGE = $82;
+   ERR_NETWORK_DISK_IO = $83;
+   ERR_NO_CREATE_PRIVILEGE = $84;
+   ERR_NO_CREATE_DELETE_PRIVILEGE = $85;
+   ERR_R_O_CREATE_FILE = $86;
+   ERR_CREATE_FILE_INVALID_NAME = $87;
+   ERR_INVALID_FILE_HANDLE = $88;
+   ERR_NO_SEARCH_PRIVILEGE = $89;
+   ERR_NO_DELETE_PRIVILEGE = $8A;
+   ERR_NO_RENAME_PRIVILEGE = $8B;
+   ERR_NO_MODIFY_PRIVILEGE = $8C;
+   ERR_NO_SET_PRIVILEGE = $8C;
+   ERR_SOME_FILES_IN_USE = $8D;
+   ERR_ALL_FILES_IN_USE = $8E;
+   ERR_SOME_READ_ONLY = $8F;
+   ERR_ALL_READ_ONLY = $90;
+   ERR_SOME_NAMES_EXIST = $91;
+   ERR_ALL_NAMES_EXIST = $92;
+   ERR_NO_READ_PRIVILEGE = $93;
+   ERR_NO_WRITE_PRIVILEGE_OR_READONLY = $94;
+   ERR_FILE_DETACHED = $95;
+   ERR_NO_ALLOC_SPACE = $96;
+   ERR_SERVER_OUT_OF_MEMORY = $96;
+   ERR_TARGET_NOT_A_SUBDIRECTORY = $96;
+   ERR_NO_SPOOL_SPACE = $97;
+   ERR_INVALID_VOLUME = $98;
+   ERR_VOLUME_DOES_NOT_EXIST = $98;
+   ERR_DIRECTORY_FULL = $99;
+   ERR_RENAME_ACROSS_VOLUME = $9A;
+   ERR_BAD_DIR_HANDLE = $9B;
+   ERR_HOLE_FOUND = $9C;
+   ERR_INVALID_PATH = $9C;
+   ERR_NO_SUCH_EXTENSION = $9C;
+   ERR_NO_DIR_HANDLES = $9D;
+   ERR_BAD_FILE_NAME = $9E;
+   ERR_DIRECTORY_ACTIVE = $9F;
+   ERR_DIRECTORY_IN_USE = $9F;
+   ERR_DIRECTORY_NOT_EMPTY = $A0;
+   ERR_DIRECTORY_IO_ERROR = $A1;
+   ERR_IO_LOCKED = $A2;
+   ERR_TRANSACTION_RESTARTED = $A3;
+   ERR_RENAME_DIR_INVALID = $A4;
+   ERR_INVALID_OPENCREATE_MODE = $A5;
+   ERR_ALREADY_IN_USE = $A6;
+   ERR_SEARCH_DRIVE_VECTOR_FULL = $B0;
+   ERR_DRIVE_DOES_NOT_EXIST = $B1;
+   ERR_DRIVE_IS_NOT_MAPPED = $B1;
+   ERR_CANT_MAP_LOCAL_DRIVE = $B2;
+   ERR_INVALID_MAP_TYPE = $B3;
+   ERR_INVALID_DRIVE_LETTER = $B4;
+   ERR_NO_DRIVE_AVAILABLE = $B5;
+   ERR_WORKSTATION_OUT_OF_MEMORY = $B6;
+   ERR_NO_SUCH_SEARCH_DRIVE = $B7;
+   ERR_INVALID_ENVIRON_VARIABLE = $B8;
+   ERR_DOES_NOT_RUN_ON_IOENGINE = $B9;
+   ERR_PACKET_SIGNATURES_REQURIED = $BC;
+   ERR_PACKET_SIGNATURES_REQUIRED = $BC;
+   ERR_INVALID_DATA_STREAM = $BE;
+   ERR_INVALID_NAME_SPACE = $BF;
+   ERR_NO_ACCOUNT_PRIVILEGES = $C0;
+   ERR_NO_ACCOUNTING_PRIVILEGES = $C0;
+   ERR_NO_ACCOUNT_BALANCE = $C1;
+   ERR_CREDIT_LIMIT_EXCEEDED = $C2;
+   ERR_LOGIN_DENIED_NO_CREDIT = $C2;
+   ERR_TOO_MANY_HOLDS = $C3;
+   ERR_ACCOUNTING_DISABLED = $C4;
+   ERR_LOGIN_LOCKOUT = $C5;
+   ERR_NO_CONSOLE_OPERATOR_RIGHTS = $C6;
+   ERR_MISSING_EA_KEY = $C8;
+   ERR_EA_NOT_FOUND = $C9;
+   ERR_INVALID_EA_HANDLE_TYPE = $CA;
+   ERR_EA_NO_KEY_NO_DATA = $CB;
+   ERR_EA_NUMBER_MISMATCH = $CC;
+   ERR_EXTENT_NUMBER_OUT_OF_RANGE = $CD;
+   ERR_EA_BAD_DIR_NUM = $CE;
+   ERR_INVALID_EA_HANDLE = $CF;
+   ERR_EA_POSITION_OUT_OF_RANGE = $D0;
+   ERR_Q_IO_FAILURE = $D0;
+   ERR_EA_ACCESS_DENIED = $D1;
+   ERR_NO_QUEUE = $D1;
+   ERR_DATA_PAGE_ODD_SIZE = $D2;
+   ERR_NO_Q_SERVER = $D2;
+   ERR_EA_VOLUME_NOT_MOUNTED = $D3;
+   ERR_NO_Q_RIGHTS = $D3;
+   ERR_BAD_PAGE_BOUNDARY = $D4;
+   ERR_Q_FULL = $D4;
+   ERR_INSPECT_FAILURE = $D5;
+   ERR_NO_Q_JOB = $D5;
+   ERR_EA_ALREADY_CLAIMED = $D6;
+   ERR_NO_Q_JOB_RIGHTS = $D6;
+   ERR_UNENCRYPTED_NOT_ALLOWED = $D6;
+   ERR_ODD_BUFFER_SIZE = $D7;
+   ERR_DUPLICATE_PASSWORD = $D7;
+   ERR_Q_IN_SERVICE = $D7;
+   ERR_NO_SCORECARDS = $D8;
+   ERR_PASSWORD_TOO_SHORT = $D8;
+   ERR_Q_NOT_ACTIVE = $D8;
+   ERR_BAD_EDS_SIGNATURE = $D9;
+   ERR_MAXIMUM_LOGINS_EXCEEDED = $D9;
+   ERR_LOGIN_DENIED_NO_CONNECTION = $D9;
+   ERR_Q_STN_NOT_SERVER = $D9;
+   ERR_EA_SPACE_LIMIT = $DA;
+   ERR_BAD_LOGIN_TIME = $DA;
+   ERR_Q_HALTED = $DA;
+   ERR_EA_KEY_CORRUPT = $DB;
+   ERR_NODE_ADDRESS_VIOLATION = $DB;
+   ERR_Q_MAX_SERVERS = $DB;
+   ERR_EA_KEY_LIMIT = $DC;
+   ERR_LOG_ACCOUNT_EXPIRED = $DC;
+   ERR_TALLY_CORRUPT = $DD;
+   ERR_BAD_PASSWORD = $DE;
+   ERR_PASSWORD_EXPIRED_NO_GRACE = $DE;
+   ERR_PASSWORD_EXPIRED = $DF;
+   ERR_NOT_ITEM_PROPERTY = $E8;
+   ERR_WRITE_TO_GROUP_PROPERTY = $E8;
+   ERR_MEMBER_ALREADY_EXISTS = $E9;
+   ERR_NO_SUCH_MEMBER = $EA;
+   ERR_PROPERTY_NOT_GROUP = $EB;
+   ERR_NOT_GROUP_PROPERTY = $EB;
+   ERR_NO_SUCH_SEGMENT = $EC;
+   ERR_NO_SUCH_VALUE_SET = $EC;
+   ERR_SPX_CONNECTION_TERMINATED = $EC;
+   ERR_TERMINATED_BY_REMOTE_PARTNER = $EC;
+   ERR_PROPERTY_ALREADY_EXISTS = $ED;
+   ERR_SPX_CONNECTION_FAILED = $ED;
+   ERR_SPX_TERMINATED_POORLY = $ED;
+   ERR_SPX_NO_ANSWER_FROM_TARGET = $ED;
+   ERR_OBJECT_ALREADY_EXISTS = $EE;
+   ERR_SPX_INVALID_CONNECTION = $EE;
+   ERR_INVALID_NAME = $EF;
+   ERR_SPX_CONNECTION_TABLE_FULL = $EF;
+   ERR_IPX_NOT_INSTALLED = $F0;
+   ERR_ILLEGAL_WILDCARD = $F0;
+   ERR_WILDCARD_NOT_ALLOWED = $F0;
+   ERR_SOCKET_NOT_OPEN = $F0;
+   ERR_BINDERY_SECURITY = $F1;
+   ERR_INVALID_BINDERY_SECURITY = $F1;
+   ERR_SOCKET_ALREADY_OPEN = $F1;
+   ERR_NO_OBJECT_READ_PRIVILEGE = $F2;
+   ERR_NO_OBJECT_READ_RIGHTS = $F2;
+   ERR_NO_OBJECT_RENAME_PRIVILEGE = $F3;
+   ERR_NO_OBJECT_RENAME_RIGHTS = $F3;
+   ERR_NO_OBJECT_DELETE_PRIVILEGE = $F4;
+   ERR_NO_OBJECT_DELETE_RIGHTS = $F4;
+   ERR_NO_OBJECT_CREATE_PRIVILEGE = $F5;
+   ERR_NO_OBJECT_CREATE_RIGHTS = $F5;
+   ERR_NO_PROPERTY_DELETE_PRIVILEGE = $F6;
+   ERR_NO_PROPERTY_DELETE_RIGHTS = $F6;
+   ERR_NO_PROPERTY_CREATE_PRIVILEGE = $F7;
+   ERR_NO_PROPERTY_CREATE_RIGHTS = $F7;
+   ERR_ALREADY_ATTACHED_TO_SERVER = $F8;
+   ERR_NO_PROPERTY_WRITE_PRIVILEGE = $F8;
+   ERR_NO_PROPERTY_WRITE_RIGHTS = $F8;
+   ERR_NOT_ATTACHED_TO_SERVER = $F8;
+   ERR_ECB_CANNOT_BE_CANCELLED = $F9;
+   ERR_NO_FREE_CONNECTION_SLOTS = $F9;
+   ERR_NO_PROPERTY_READ_PRIVILEGE = $F9;
+   ERR_NO_PROPERTY_READ_RIGHTS = $F9;
+   ERR_NO_LOCAL_TARGET_IDENTIFIED = $FA;
+   ERR_NO_MORE_SERVER_SLOTS = $FA;
+   ERR_TEMP_REMAP = $FA;
+   ERR_NO_KNOWN_ROUTE_TO_DESTINATION = $FA;
+   ERR_INVALID_PARAMETERS = $FB;
+   ERR_NO_SUCH_PROPERTY = $FB;
+   ERR_UNKNOWN_REQUEST = $FB;
+   ERR_EVENT_CANCELLED = $FC;
+   ERR_INTERNET_PACKET_REQT_CANCELED = $FC;
+   ERR_MESSAGE_QUEUE_FULL = $FC;
+   ERR_NO_SUCH_BINDERY_OBJECT = $FC;
+   ERR_NO_SUCH_OBJECT = $FC;
+   ERR_REQUEST_CANCELLED = $FC;
+   ERR_SPX_COMMAND_CANCELLED = $FC;
+   ERR_SPX_SOCKET_CLOSED = $FC;
+   ERR_UNKNOWN_FILE_SERVER = $FC;
+   ERR_TARGET_ALREADY_HAS_MESSAGE = $FC;
+   ERR_NCPEXT_SERVICE_PROTOCOL_VIOLATION = $FC;
+   ERR_BAD_SERIAL_NUMBER = $FD;
+   ERR_INVALID_PACKET_LENGTH = $FD;
+   ERR_PACKET_OVERFLOW = $FD;
+   ERR_TTS_DISABLED = $FD;
+   ERR_FIELD_ALREADY_LOCKED = $FD;
+   ERR_FSCOPY_DIFFERENT_NETWORKS = $FD;
+   ERR_BAD_STATION_NUMBER = $FD;
+   ERR_BAD_PACKET = $FE;
+   ERR_SPX_MALFORMED_PACKET = $FE;
+   ERR_BINDERY_LOCKED = $FE;
+   ERR_DOS_ACCESS_DENIED = $FE;
+   ERR_DOS_NO_SEARCH_RIGHTS = $FE;
+   ERR_IMPLICIT_TRANSACTION_ACTIVE = $FE;
+   ERR_INCORRECT_ACCESS_PRIVILEGES = $FE;
+   ERR_INVALID_NAME_LENGTH = $FE;
+   ERR_INVALID_SEMAPHORE_NAME_LENGTH = $FE;
+   ERR_IO_FAILURE = $FE;
+   ERR_PACKET_NOT_DELIVERABLE = $FE;
+   ERR_SPOOL_DIRECTORY_ERROR = $FE;
+   ERR_SUPERVISOR_HAS_DISABLED_LOGIN = $FE;
+   ERR_TRANSACTION_ENDS_RECORDS_LOCKED = $FE;
+   ERR_SERVER_BINDERY_LOCKED = $FE;
+   ERR_TIMEOUT_FAILURE = $FE;
+   ERR_TRUSTEE_NOT_FOUND = $FE;
+   ERR_SOCKET_TABLE_FULL = $FE;
+   ERR_NCPEXT_NO_HANDLER = $FE;
+   ERR_BAD_PARAMETER = $FF;
+   ERR_BAD_SPOOL_PRINTER = $FF;
+   ERR_RECORD_ALREADY_LOCKED = $FF;
+   ERR_BAD_RECORD_OFFSET = $FF;
+   ERR_BINDERY_FAILURE = $FF;
+   ERR_ECB_NOT_IN_USE = $FF;
+   ERR_FAILURE = $FF;
+   ERR_FILE_EXTENSION_ERROR = $FF;
+   ERR_HARD_FAILURE = $FF;
+   ERR_INVALID_INITIAL_SEMAPHORE_VALUE = $FF;
+   ERR_INVALID_SEMAPHORE_HANDLE = $FF;
+   ERR_DOS_FILE_NOT_FOUND = $FF;
+   ERR_EXPLICIT_TRANSACTION_ACTIVE = $FF;
+   ERR_FILE_NOT_OPEN = $FF;
+   ERR_NO_EXPLICIT_TRANSACTION_ACTIVE = $FF;
+   ERR_NO_FILES_FOUND = $FF;
+   ERR_NO_RECORD_FOUND = $FF;
+   ERR_NO_RESPONSE_FROM_SERVER = $FF;
+   ERR_NO_SPOOL_FILE = $FF;
+   ERR_NO_SUCH_OBJECT_OR_BAD_PASSWORD = $FF;
+   ERR_OPEN_FILES = $FF;
+   ERR_PATH_ALREADY_EXISTS = $FF;
+   ERR_PATH_NOT_LOCATABLE = $FF;
+   ERR_QUEUE_FULL = $FF;
+   ERR_REQUEST_NOT_OUTSTANDING = $FF;
+   ERR_SOCKET_CLOSED = $FF;
+   ERR_SPX_IS_INSTALLED = $FF;
+   ERR_SPX_SOCKET_NOT_OPENED = $FF;
+   ERR_TARGET_NOT_LOGGED_IN = $FF;
+   ERR_TARGET_NOT_ACCEPTING_MESSAGES = $FF;
+   ERR_TRANSACTION_NOT_YET_WRITTEN = $FF;
+   ERR_NO_TRUSTEE_CHANGE_PRIVILEGE = $FF;
+   ERR_CHECKSUMS_REQUIRED = $FF;
+   ERR_SERVICE_NOT_LOADED = $101;
+   ERR_NO_LIBRARY_CONTEXT = $400;
+{-----------------------------------------------------------------------------
+   Important Note:
+   Additional NetWareErrno values that don't employ a ERR_ prefix have been
+   moved from this position into obsolete header niterror.h. Many of these had
+   been included for compatibility with the now-obsolete NIT API for DOS
+   clients and many conflict with current cross-platform headers.
+  -----------------------------------------------------------------------------}
+{ NetWare Core Protocol (NCP) error codes. }
+   DISKFULL = 1;
+   BADNET = 2;
+   LISTENERROR = 2;
+   BADLADDRESS = 3;
+   INVALIDSESSION = 3;
+   NOSLOTS = 4;
+   SLOTALLOCERR = 4;
+   BROADCASTERROR = 5;
+   BADSERVERNAME = 6;
+   BADUSERNAME = 7;
+   BADPASSWORD = 8;
+   MEMERROR = 9;
+   INVALIDCONNECTION = 10;
+   INVALIDHANDLE = 11;
+   INVALIDREQUEST = 12;
+   SOCKETERROR = 13;
+   ALLOCTAGERR = 14;
+   CONNECTIONABORTED = 15;
+   TIMEOUTERR = 16;
+{ frame type: Ethernet 802.3  }
+   CHECKSUMS_NOT_SUPPORTED = 17;
+   CHECKSUM_FAILURE = 18;
+   NO_FRAGMENT_LIST = 19;
+{ Values for 'NetWareErrno' as set by spawnlp() and spawnvp().}
+   LOAD_COULD_NOT_FIND_FILE = 1;
+   LOAD_ERROR_READING_FILE = 2;
+   LOAD_NOT_NLM_FILE_FORMAT = 3;
+   LOAD_WRONG_NLM_FILE_VERSION = 4;
+   LOAD_REENTRANT_INITIALIZE_FAILURE = 5;
+   LOAD_CAN_NOT_LOAD_MULTIPLE_COPIES = 6;
+   LOAD_ALREADY_IN_PROGRESS = 7;
+   LOAD_NOT_ENOUGH_MEMORY = 8;
+   LOAD_INITIALIZE_FAILURE = 9;
+   LOAD_INCONSISTENT_FILE_FORMAT = 10;
+   LOAD_CAN_NOT_LOAD_AT_STARTUP = 11;
+   LOAD_AUTO_LOAD_MODULES_NOT_LOADED = 12;
+   LOAD_UNRESOLVED_EXTERNAL = 13;
+   LOAD_PUBLIC_ALREADY_DEFINED = 14;
+ { Values for _msize() error return and NWMemorySizeAddressable(). }
+   ERR_HEAP_BAD_PTR = $FFFFFFFF;
+   ERR_HEAP_BLOCK_ALREADY_FREE = $FFFFFFFE;
+   ERR_INVALID_ADDRESS = $FFFFFFFD;
+ { Values for NetWare Virtual Memory (NVM) APIs as returned by GetVMErrno().
+   These values should be examined after calling a Win32 VM API without a
+   satisfactorily-lucid error in 'errno' or from (Win32) GetLastError(). }
+   ERROR_INSUFFICIENT_CONTIGUOUS_MEMORY = $1000;
+   ERROR_INSUFFICIENT_DISK_SWAP_SPACE = $1001;
+   ERROR_INSUFFICIENT_MEMORY = $1002;
+   ERROR_INSUFFICIENT_RESOURCES_TO_COMMIT_MEMORY = $1003;
+   ERROR_INVALID_ATTRIBUTE_FLAGS = $1004;
+   ERROR_INVALID_ADDRESS = $1005;
+   ERROR_INVALID_LOCK_FLAGS = $1006;
+   ERROR_INVALID_PAGE_COUNT = $1007;
+   ERROR_INVALID_PROTECTION_FLAGS = $1008;
+   ERROR_NON_SHARED_MEMORY_ADDRESS = $1009;
+   ERROR_SHARED_MEMORY_ADDRESS = $100A;
+
+function GetVMErrno:longint;cdecl;external 'clib' name 'GetVMErrno';
+procedure SetVMErrno(para1:longint);cdecl;external 'clib' name 'SetVMErrno';
+function __get_NWErrno:longint;cdecl;external 'clib' name '__get_NWErrno';
+function __get_NWErrno_ptr:Plongint;cdecl;external 'clib' name '__get_NWErrno_ptr';
+function NetWareErrno : longint;
+{-fcntl.h----------------------------------------------------------------------}
+const
+   F_GETFL    = 1;
+   F_SETFL    = 2;
+   F_DUPFD    = 3;
+   F_GETFD    = 4;
+   F_SETFD    = 5;
+   F_SETLK    = 6;
+   F_GETLK    = 7;
+   F_SETLKW   = 8;
+   F_RDLCK    = 9;
+   F_UNLCK    = 10;
+   F_WRLCK    = 11;
+   F_CLOEXEC  = 12;
+   O_RDONLY   = $0000;
+   O_WRONLY   = $0001;
+   O_RDWR     = $0002;
+   O_ACCMODE  = $0003;
+   O_APPEND   = $0010;
+   O_CREAT    = $0020;
+   O_TRUNC    = $0040;
+   O_EXCL     = $0080;
+   O_TEXT     = $0100;
+   O_BINARY   = $0200;
+   O_NDELAY   = $0400;
+   O_NOCTTY   = $0800;
+   O_NONBLOCK = O_NDELAY;
+   FNDELAY    = $0004;
+type
+   Poff_t = ^Toff_t;
+   Toff_t = longint;
+   Ppid_t = ^Tpid_t;
+   Tpid_t = longint;
+   Pssize_t = ^Tssize_t;
+   Tssize_t = longint;
+   Pmode_t = ^Tmode_t;
+   Tmode_t = dword;
+
+   Pflock = ^Tflock;
+   Tflock = record
+        l_type   : smallint;
+        l_whence : smallint;
+        l_start  : Toff_t;
+        l_len    : Toff_t;
+        l_pid    : Tpid_t;
+     end;
+
+
+function creat (path:Pchar; mode:Tmode_t):longint;                  cdecl;external 'clib' name 'creat';
+function _fcntl (fildes:longint; cmd:longint;
+                args:array of const):longint;                       cdecl;external 'clib' name 'fcntl';
+function _fcntl (fildes:longint; cmd:longint):longint;               cdecl;external 'clib' name 'fcntl';
+function open  (path:Pchar; oflag:longint;
+                args:array of const):longint;                       cdecl;external 'clib' name 'open';
+function open  (path:Pchar; oflag:longint):longint;                 cdecl;external 'clib' name 'open';
+function sopen (path:Pchar; oflag, shflag:longint;
+                args:array of const):longint;                       cdecl;external 'clib' name 'sopen';
+function sopen (path:Pchar; oflag,shflag:longint):longint;          cdecl;external 'clib' name 'sopen';
+
+{-limits.h---------------------------------------------------------------------}
+const
+   PAGESIZE  = 4096;
+   CHAR_BIT  = 8;
+   SCHAR_MIN = -(128);
+   SCHAR_MAX = 127;
+   UCHAR_MAX = 255;
+   CHAR_MIN  = SCHAR_MIN;
+   CHAR_MAX  = SCHAR_MAX;
+
+   MB_LEN_MAX = 5;
+   SHRT_MIN   = -(32768);
+   SHRT_MAX   = 32767;
+   USHRT_MAX  = 65535;
+   LONG_MIN   = (-(2147483647)) - 1;
+   LONG_MAX   = 2147483647;
+   ULONG_MAX  = 4294967295;
+   INT_MIN    = LONG_MIN;
+   INT_MAX    = LONG_MAX;
+   UINT_MAX   = ULONG_MAX;
+   SSIZE_MAX  = INT_MAX;
+   TZNAME_MAX = 8;
+   PIPE_BUF   = 512;
+{-locale.h---------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+const
+   LC_CTYPE = 0;
+   LC_NUMERIC = 1;
+   LC_TIME = 2;
+   LC_COLLATE = 3;
+   LC_MONETARY = 4;
+   LC_MESSAGES = 5;
+   LC_ALL = 6;
+
+type
+   Plconv = ^Tlconv;
+   Tlconv =
+   record
+     decimal_point       : array [0..3] of char;
+     thousands_sep       : array [0..3] of char;
+     grouping            : array [0..3] of char;
+     int_curr_symbol     : array [0..7] of char;
+     currency_symbol     : array [0..3] of char;
+     mon_decimal_point   : array [0..3] of char;
+     mon_thousands_sep   : array [0..3] of char;
+     mon_grouping        : array [0..7] of char;
+     positive_sign       : array [0..3] of char;
+     negative_sign       : array [0..3] of char;
+     int_frac_digits     : char;
+     frac_digits         : char;
+     p_cs_precedes       : char;
+     p_sep_by_space      : char;
+     n_cs_precedes       : char;
+     n_sep_by_space      : char;
+     p_sign_posn         : char;
+     n_sign_posn         : char;
+     code_page           : word;
+     country_id          : word;
+     data_list_separator : array[0..1] of char;
+     date_separator      : array[0..1] of char;
+     time_separator      : array[0..1] of char;
+     time_format         : char;
+     date_format         : word;
+     reserved            : array[0..49] of char;
+   end;
+
+// ???? struct lconv  *localeconv( void );
+
+function setlocale_old (p1:longint; p2:Pchar):Pchar;  cdecl; external 'clib' name 'setlocale';
+function setlocale     (p1:longint; p2:Pchar):Pchar;  cdecl; external 'clib' name 'setlocale_411';
+{-nwlocale.h-------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+type
+  TNUMBER_TYPE = double;
+  TUCHAR = byte;
+
+
+const
+   MERIDLEN = 5;
+   L_MB_LEN_MAX = 2;    // multibyte character length maximum is 2
+   NWSINGLE_BYTE = 1;	// returned from NWCharType()...
+   NWDOUBLE_BYTE = 2;
+{ country/language ID definitions (field 'country_id' in struct Llconv)...   }
+   ARABIC = 785;
+   AUSTRALIA = 61;
+   BELGIUM = 32;
+   CANADA_ENG = 1;
+   CANADA_FR = 2;
+   DENMARK = 45;
+   FINLAND = 358;
+   FRANCE = 33;
+   GERMANY = 49;
+   HEBREW = 972;
+   ITALY = 39;
+   LATIN_AMERICA = 003;
+   NETHERLANDS = 31;
+   NORWAY = 47;
+   PORTUGAL = 351;
+   SPAIN = 34;
+   SWEDEN = 46;
+   SWITZERLAND = 41;
+   UK = 44;
+   USA = 1;
+   JAPAN = 81;
+   KOREA = 82;
+   PRC = 86;
+   TAIWAN = 88;
+   ASIAN_ENGLISH = 99;
+
+
+type
+   PVECTOR = ^TVECTOR;
+   TVECTOR = record
+        lowValue : char;
+        highValue : char;
+     end;
+{ extern double-byte table data...  }
+//??  var _DBCSVector : array[0..4] of TVECTOR;cvar;external;
+{ prototypes...  }
+
+function NWCharType(ch:dword):longint;cdecl;external 'locnlm32' name 'NWCharType';
+function NWCharVal(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWCharVal';
+function NWCharUpr(chr:longint):longint;cdecl;external 'locnlm32' name 'NWCharUpr';
+function NWcprintf(format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWcprintf';
+function NWcprintf(format:Pchar):longint;cdecl;external 'locnlm32' name 'NWcprintf';
+function NWIncrement(_string:Pchar; numChars:Tsize_t):Pchar;cdecl;external 'locnlm32' name 'NWIncrement';
+{
+   NWatoi, NWisalnum, NWisalpha, and NWisdigit are preferred over NWLatoi,
+   NWisalnum, NWLisalpha, and NWLisdigit respectively.
+ }
+function NWatoi(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWatoi';
+function NWisalnum(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisalnum';
+function NWisalpha(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisalpha';
+function NWisdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisdigit';
+function NWisxdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWisxdigit';
+function NWitoa(value:longint; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWitoa';
+function NWutoa(value:dword; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWutoa';
+function NWltoa(value:longint; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWltoa';
+function NWultoa(value:dword; _string:Pchar; radix:longint):longint;cdecl;external 'locnlm32' name 'NWultoa';
+(* Const before type ignored *)
+function NWLatoi(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWLatoi';
+function NWLisalnum(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisalnum';
+function NWLisalpha(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisalpha';
+function NWLisdigit(ch:dword):longint;cdecl;external 'locnlm32' name 'NWLisdigit';
+function NWLlocaleconv(lconvPtr:PLCONV):PLCONV;cdecl;external 'locnlm32' name 'NWLlocaleconv';
+function NWLmblen(_string:Pchar; maxBytes:Tsize_t):longint;cdecl;external 'locnlm32' name 'NWLmblen';
+function NWLmbslen(_string:Pchar):longint;cdecl;external 'locnlm32' name 'NWLmbslen';
+function NWLsetlocale(category:longint; locale:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLsetlocale';
+function NWLsetlocale_411(category:longint; locale:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLsetlocale_411';
+function NWLstrbcpy(dest:Pchar; src:Pchar; maxlen:Tsize_t):Pchar;cdecl;external 'locnlm32' name 'NWLstrbcpy';
+function NWLstrchr(_string:Pchar; find:longint):Pchar;cdecl;external 'locnlm32' name 'NWLstrchr';
+function NWLstrcoll(string1:Pchar; string2:Pchar):longint;cdecl;external 'locnlm32' name 'NWLstrcoll';
+function NWLstrcspn(string1:Pchar; string2:Pchar):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrcspn';
+function NWLstrftime(_string:Pchar; maxSize:Tsize_t; format:Pchar; timePtr:Ptm):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrftime';
+function NWLstricmp(str1:Pchar; str2:Pchar):longint;cdecl;external 'locnlm32' name 'NWLstricmp';
+function NWLstrlwr(_string:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrlwr';
+function NWLstrpbrk(string1:Pchar; string2:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrpbrk';
+function NWLstrrchr(_string:Pchar; find:longint):Pchar;cdecl;external 'locnlm32' name 'NWLstrrchr';
+function NWLstrrev(string1:Pchar; string2:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrrev';
+function NWLstrspn(string1:Pchar; string2:Pchar):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrspn';
+function NWLstrstr(_string:Pchar; searchString:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrstr';
+function NWLstrupr(_string:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWLstrupr';
+function NWLstrxfrm(string1:Pchar; string2:Pchar; numChars:Tsize_t):Tsize_t;cdecl;external 'locnlm32' name 'NWLstrxfrm';
+function NWPrevChar(_string:Pchar; position:Pchar):Pchar;cdecl;external 'locnlm32' name 'NWPrevChar';
+function NWprintf(format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWprintf';
+function NWprintf(format:Pchar):longint;cdecl;external 'locnlm32' name 'NWprintf';
+function NWsprintf(s:Pchar; format:Pchar; args:array of const):longint;cdecl;external 'locnlm32' name 'NWsprintf';
+function NWsprintf(s:Pchar; format:Pchar):longint;cdecl;external 'locnlm32' name 'NWsprintf';
+function NWstrImoney(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrImoney';
+function NWstrmoney(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrmoney';
+function NWstrncoll(string1:Pchar; string2:Pchar; maxChars:Tsize_t):longint;cdecl;external 'locnlm32' name 'NWstrncoll';
+function NWstrncpy(target_string:Pchar; source_string:Pchar; numChars:longint):Pchar;cdecl;external 'locnlm32' name 'NWstrncpy';
+function NWstrnum(buffer:Pchar; Value:TNUMBER_TYPE):Pchar;cdecl;external 'locnlm32' name 'NWstrnum';
+//function NWvcprintf(format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvcprintf';
+//function NWvprintf(format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvprintf';
+//function NWvsprintf(s:Pchar; format:Pchar; arg:Tva_list):longint;cdecl;external 'locnlm32' name 'NWvsprintf';
+{-nwaudnlm.h-------------------------------------------------------------------}
+{ defined network address types:  }
+
+const
+   ASCIIZ_STRING_NET_ADDRESS_TYPE = 0;
+   IPX_NET_ADDRESS_TYPE           = 1;
+
+   // special value network address type:
+   NO_IDENTITY_HAS_BEEN_SET       = $FF;
+
+function NWAddRecordToAuditingFile
+    (volumeNumber,
+     recordType,
+     stationNumber,
+     statusCode        : longint;
+     data              : pointer;
+     dataSize          : longint):longint;cdecl;external 'clib' name 'NWAddRecordToAuditingFile';
+function NWAddRecordToAuditingFile
+    (volumeNumber,
+     recordType,
+     stationNumber,
+     statusCode        : longint;
+ var data;
+     dataSize          : longint):longint;cdecl;external 'clib' name 'NWAddRecordToAuditingFile';
+
+
+function NWGetAuditingIdentity
+    (addressType       : Plongint;
+     networkAddress    : pointer;
+     identityName      : Pchar):longint;cdecl;external 'clib' name 'NWGetAuditingIdentity';
+function NWGetAuditingIdentity
+    (var addressType   : longint;
+     var networkAddress;
+     identityName      : Pchar):longint;cdecl;external 'clib' name 'NWGetAuditingIdentity';
+function NWSetAuditingIdentity
+    (addressType:longint;
+     networkAddress:pointer;
+     identityName:Pchar):longint;cdecl;external 'clib' name 'NWSetAuditingIdentity';
+function NWSetAuditingIdentity
+    (addressType:longint;
+ var networkAddress;
+     identityName:Pchar):longint;cdecl;external 'clib' name 'NWSetAuditingIdentity';
+{-nwbitops.h-------------------------------------------------------------------}
+procedure BitClear        (bitArray:pointer; bitNumber:longint);cdecl;external 'clib' name 'BitClear';
+procedure BitSet          (bitArray:pointer; bitNumber:longint);cdecl;external 'clib' name 'BitSet';
+function  BitTest         (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTest';
+function  BitTestAndClear (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndClear';
+function  BitTestAndSet   (bitArray:pointer; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndSet';
+function  ScanBits        (bitArray:pointer; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanBits';
+function  ScanClearedBits (bitArray:pointer; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanClearedBits';
+
+procedure BitClear        (var bitArray; bitNumber:longint);cdecl;external 'clib' name 'BitClear';
+procedure BitSet          (var bitArray; bitNumber:longint);cdecl;external 'clib' name 'BitSet';
+function  BitTest         (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTest';
+function  BitTestAndClear (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndClear';
+function  BitTestAndSet   (var bitArray; bitNumber:longint):longint;cdecl;external 'clib' name 'BitTestAndSet';
+function  ScanBits        (var bitArray; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanBits';
+function  ScanClearedBits (var bitArray; startingBitNumber,totalBitCount:longint):longint;cdecl;external 'clib' name 'ScanClearedBits';
+{-nwcntask.h-------------------------------------------------------------------}
+{#define LOGIN_WITHOUT_PASSWORD ((char *) N_TRUE) }
+
+function AllocateBlockOfTasks(numberWanted:longint):longint;cdecl;external 'clib' name 'AllocateBlockOfTasks';
+function CheckIfConnectionActive(connection:longint):byte;cdecl;external 'clib' name 'CheckIfConnectionActive';
+function DisableConnection(connection:longint):longint;cdecl;external 'clib' name 'DisableConnection';
+function EnableConnection(connection:longint):longint;cdecl;external 'clib' name 'EnableConnection';
+function GetCurrentConnection:longint;cdecl;external 'clib' name 'GetCurrentConnection';
+function GetCurrentFileServerID:word;cdecl;external 'clib' name 'GetCurrentFileServerID';
+function GetCurrentTask:longint;cdecl;external 'clib' name 'GetCurrentTask';
+function LoginObject(connection:longint; objectName:Pchar; objectType:word; password:Pchar):longint;cdecl;external 'clib' name 'LoginObject';
+function LogoutObject(connection:longint):longint;cdecl;external 'clib' name 'LogoutObject';
+function ReturnBlockOfTasks(startingTask,numberOfTasks:longint):longint;cdecl;external 'clib' name 'ReturnBlockOfTasks';
+function ReturnConnection(connection:longint):longint;cdecl;external 'clib' name 'ReturnConnection';
+function ReturnLocalConnection(connection:longint):longint;cdecl;external 'clib' name 'ReturnLocalConnection';
+function SetCurrentConnection(connectionNumber:longint):longint;cdecl;external 'clib' name 'SetCurrentConnection';
+function SetCurrentFileServerID(connectionID:word):word;cdecl;external 'clib' name 'SetCurrentFileServerID';
+function SetCurrentTask(taskNumber:longint):longint;cdecl;external 'clib' name 'SetCurrentTask';
+{-nwconio.h--------------------------------------------------------------------}
+const
+   DONT_AUTO_ACTIVATE     = $01;  // avoids autoactivation when screens are
+                                  // created, but no other screens exist
+   DONT_SWITCH_SCREEN     = $02;  // avoids screen being switched
+   DONT_CHECK_CTRL_CHARS  = $10;  // turns off ^C and ^S processing
+   AUTO_DESTROY_SCREEN    = $20;  // avoids "Press any key to close screen
+   POP_UP_SCREEN          = $40;
+   UNCOUPLED_CURSORS      = $80;  // for distinct input & output cursors
+{ more screen attribute values returned by GetScreenInfo()  }
+   HAS_A_CLIB_HANDLE            = $00000100;
+   _KEYBOARD_INPUT_ACTIVE       = $00010000;
+   _PROCESS_BLOCKED_ON_KEYBOARD = $00020000;
+   _PROCESS_BLOCKED_ON_SCREEN   = $00040000;
+   _INPUT_CURSOR_DISABLED       = $00080000;
+   _SCREEN_HAS_TITLE_BAR        = $00400000;
+   _NON_SWITCHABLE_SCREEN       = $01000000;
+
+   { key types...  }
+     NORMAL_KEY       = $00;
+     FUNCTION_KEY     = $01;
+     ENTER_KEY        = $02;
+     ESCAPE_KEY       = $03;
+     BACKSPACE_KEY    = $04;
+     DELETE_KEY       = $05;
+     INSERT_KEY       = $06;
+     CURSOR_UP_KEY    = $07;
+     CURSOR_DOWN_KEY  = $08;
+     CURSOR_RIGHT_KEY = $09;
+     CURSOR_LEFT_KEY  = $0A;
+     CURSOR_HOME_KEY  = $0B;
+     CURSOR_END_KEY   = $0C;
+     CURSOR_PUP_KEY   = $0D;
+     CURSOR_PDOWN_KEY = $0E;
+  { some name equivalents...  }
+     ENTER     = $0D;
+     ESCAPE    = $1B;
+     BACKSPACE = $08;
+  { modifier code constituents...  }
+     SHIFT_KEY_HELD    = $01;
+     CTRL_KEY_HELD     = $04;
+     ALT_KEY_HELD      = $08;
+     CAPS_LOCK_IS_ON   = $40;
+     NUM_LOCK_IS_ON    = $20;
+     SCROLL_LOCK_IS_ON = $10;
+
+  { cursor types...  }
+     CURSOR_NORMAL = $0C0B;
+     CURSOR_THICK  = $0C09;
+     CURSOR_BLOCK  = $0C00;
+     CURSOR_TOP    = $0400;
+
+type  // libc compatible
+   Pscr_t = ^scr_t;
+   scr_t = pointer;
+   TScr = scr_t;
+   PScr = Pscr_t;
+
+function getch:longint; cdecl; external 'clib' name 'getch';
+function getche:longint; cdecl; external 'clib' name 'getche';
+function kbhit:longint; cdecl; external 'clib' name 'kbhit';
+function putch(c:longint):longint; cdecl; external 'clib' name 'putch';
+function ungetch(c:longint):longint; cdecl; external 'clib' name 'ungetch';
+function cgets(buf:Pchar):Pchar; cdecl; external 'clib' name 'cgets';
+function CheckIfScreenDisplayed(screenHandle,waitFlag:longint):longint; cdecl; external 'clib' name 'CheckIfScreenDisplayed';
+function CheckIfScreenDisplayed(screenHandle:TScr;waitFlag:longint):longint; cdecl; external 'clib' name 'CheckIfScreenDisplayed';
+procedure clrscr; cdecl; external 'clib' name 'clrscr';
+procedure ConsolePrintf(format:Pchar; args:array of const); cdecl; external 'clib' name 'ConsolePrintf';
+procedure ConsolePrintf(format:Pchar); cdecl; external 'clib' name 'ConsolePrintf';
+procedure CopyToScreenMemory(height,width:word; Rect:PBYTE; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyToScreenMemory';
+procedure CopyToScreenMemory(height,width:word; var Data; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyToScreenMemory';
+procedure CopyFromScreenMemory(height,width:word; Rect:PBYTE; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyFromScreenMemory';
+procedure CopyFromScreenMemory(height,width:word; var Data; beg_x,beg_y:word); cdecl; external 'clib' name 'CopyFromScreenMemory';
+function CoupleInputOutputCursors:longint; cdecl; external 'clib' name 'CoupleInputOutputCursors';
+function cputs(buf:Pchar):longint; cdecl; external 'clib' name 'cputs';
+function cprintf(fmt:Pchar; args:array of const):longint; cdecl; external 'clib' name 'cprintf';
+function cprintf(fmt:Pchar):longint; cdecl; external 'clib' name 'cprintf';
+//function CreateScreen(screenName:Pchar; attr:byte):longint; cdecl; external 'clib' name 'CreateScreen';
+function CreateScreen(screenName:Pchar; attr:byte):TScr; cdecl; external 'clib' name 'CreateScreen';
+function cscanf(fmt:Pchar; args:array of const):longint; cdecl; external 'clib' name 'cscanf';
+function cscanf(fmt:Pchar):longint; cdecl; external 'clib' name 'cscanf';
+function DecoupleInputOutputCursors:longint; cdecl; external 'clib' name 'DecoupleInputOutputCursors';
+function DestroyScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DestroyScreen';
+function DestroyScreen(screenHandle:TScr):longint; cdecl; external 'clib' name 'DestroyScreen';
+function DisplayInputCursor:longint; cdecl; external 'clib' name 'DisplayInputCursor';
+function DisplayScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DisplayScreen';
+function DisplayScreen(screenHandle:TScr):longint; cdecl; external 'clib' name 'DisplayScreen';
+function DropPopUpScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'DropPopUpScreen';
+function DropPopUpScreen(screenHandle:TScr):longint; cdecl; external 'clib' name 'DropPopUpScreen';
+//function GetCurrentScreen:longint; cdecl; external 'clib' name 'GetCurrentScreen';
+function GetCurrentScreen:TScr; cdecl; external 'clib' name 'GetCurrentScreen';
+function GetCursorCouplingMode:byte; cdecl; external 'clib' name 'GetCursorCouplingMode';
+function GetCursorShape(startline,endline:PBYTE):word; cdecl; external 'clib' name 'GetCursorShape';
+function GetCursorShape(var startline,endline:byte):word; cdecl; external 'clib' name 'GetCursorShape';
+function GetCursorSize(firstline,lastline:PBYTE):word; cdecl; external 'clib' name 'GetCursorSize';
+function GetCursorSize(var firstline,lastline:byte):word; cdecl; external 'clib' name 'GetCursorSize';
+function GetPositionOfOutputCursor(rowP,columnP:PWORD):longint; cdecl; external 'clib' name 'GetPositionOfOutputCursor';
+function GetPositionOfOutputCursor(var row,col:word):longint; cdecl; external 'clib' name 'GetPositionOfOutputCursor';
+function __GetScreenID(screenHandle:longint):longint; cdecl; external 'clib' name '__GetScreenID';
+function __GetScreenID(screenHandle:TScr):longint; cdecl; external 'clib' name '__GetScreenID';
+function GetScreenInfo(handle:longint; name:Pchar; attr:plongint):longint; cdecl; external 'clib' name 'GetScreenInfo';
+function GetScreenInfo(handle:longint; name:Pchar; var attr:longint):longint; cdecl; external 'clib' name 'GetScreenInfo';
+function GetSizeOfScreen(heightP,widthP:PWORD):longint; cdecl; external 'clib' name 'GetSizeOfScreen';
+function GetSizeOfScreen(var heightP,widthP:word):longint; cdecl; external 'clib' name 'GetSizeOfScreen';
+procedure gotoxy(col,row:word); cdecl; external 'clib' name 'gotoxy';
+function HideInputCursor:longint; cdecl; external 'clib' name 'HideInputCursor';
+function IsColorMonitor:longint; cdecl; external 'clib' name 'IsColorMonitor';
+function PressAnyKeyToContinue:longint; cdecl; external 'clib' name 'PressAnyKeyToContinue';
+function PressAnyKey:longint; cdecl; external 'clib' name 'PressAnyKeyToContinue';
+function PressEscapeToQuit:longint; cdecl; external 'clib' name 'PressEscapeToQuit';
+function PressEscape:longint; cdecl; external 'clib' name 'PressEscapeToQuit';
+procedure RingTheBell; cdecl; external 'clib' name 'RingTheBell';
+procedure RingBell; cdecl; external 'clib' name 'RingTheBell';
+
+function ScanScreens(LastScreenID:longint; name:Pchar; attr:plongint):longint; cdecl; external 'clib' name 'ScanScreens';
+function ScanScreens(LastScreenID:longint; name:Pchar; var attr:longint):longint; cdecl; external 'clib' name 'ScanScreens';
+function ScanScreens(LastScreenID:TScr; name:Pchar; attr:plongint):TScr; cdecl; external 'clib' name 'ScanScreens';
+function ScanScreens(LastScreenID:TScr; name:Pchar; var attr:longint):TScr; cdecl; external 'clib' name 'ScanScreens';
+
+function ScrollScreenRegionDown(firstLine,numLines:longint):longint; cdecl; external 'clib' name 'ScrollScreenRegionDown';
+function ScrollScreenRegionUp(firstLine,numLines:longint):longint; cdecl; external 'clib' name 'ScrollScreenRegionUp';
+function SetAutoScreenDestructionMode(newMode:byte):byte; cdecl; external 'clib' name 'SetAutoScreenDestructionMode';
+function SetCtrlCharCheckMode(newMode:byte):byte; cdecl; external 'clib' name 'SetCtrlCharCheckMode';
+function SetCursorCouplingMode(newMode:byte):byte; cdecl; external 'clib' name 'SetCursorCouplingMode';
+function SetCursorShape(startline,endline:byte):word; cdecl; external 'clib' name 'SetCursorShape';
+function SetCurrentScreen(screenHandle:longint):longint; cdecl; external 'clib' name 'SetCurrentScreen';
+function SetCurrentScreen(screenHandle:TScr):longint; cdecl; external 'clib' name 'SetCurrentScreen';
+function SetInputAtOutputCursorPosition:longint; cdecl; external 'clib' name 'SetInputAtOutputCursorPosition';
+function SetOutputAtInputCursorPosition:longint; cdecl; external 'clib' name 'SetOutputAtInputCursorPosition';
+function SetPositionOfInputCursor(row,col:word):longint; cdecl; external 'clib' name 'SetPositionOfInputCursor';
+function SetScreenAreaAttribute(line,col:longint; numLines:longint; numColumns:longint; attr:longint):longint; cdecl; external 'clib' name 'SetScreenAreaAttribute';
+function SetScreenAttributes(mask,attr:longint):longint; cdecl; external 'clib' name 'SetScreenAttributes';
+function SetScreenCharacterAttribute(line,column,attr:longint):longint; cdecl; external 'clib' name 'SetScreenCharacterAttribute';
+function SetScreenRegionAttribute(firstLine,numLines:longint; attr:byte):longint; cdecl; external 'clib' name 'SetScreenRegionAttribute';
+function wherex:word; cdecl; external 'clib' name 'wherex';
+function wherey:word; cdecl; external 'clib' name 'wherey';
+
+procedure GetKey(scrID:TScr; _type,value,status,scancode:Pbyte;linesToProtect:Longint);cdecl;external 'clib' name 'GetKey';
+procedure GetKey(scrID:TScr; var _type,value,status,scancode:byte;linesToProtect:Longint);cdecl;external 'clib' name 'GetKey';
+procedure GetKey(scrID:Longint; _type,value,status,scancode:Pbyte;linesToProtect:Longint);cdecl;external 'clib' name 'GetKey';
+procedure GetKey(scrID:Longint; var _type,value,status,scancode:byte;linesToProtect:Longint);cdecl;external 'clib' name 'GetKey';
+
+function UngetKey(scrID:TScr; _type,value,status,scancode:byte):longint;cdecl;external 'clib' name 'UngetKey';
+function UngetKey(scrID:Longint; _type,value,status,scancode:byte):longint;cdecl;external 'clib' name 'UngetKey';
+{-nwconn.h---------------------------------------------------------------------}
+{ Structures and typedefs for connection services  }
+
+const
+   IPX_TRANSPORT_ADDRESS =  1;
+   IPX_TRANSPORT_LENGTH  = 12;
+   UDP_TRANSPORT_ADDRESS =  8;
+   UDP_TRANSPORT_LENGTH  =  4;
+   TCP_TRANSPORT_ADDRESS =  9;
+   TCP_TRANSPORT_LENGTH  =  4;
+{$include npackon.inc}
+type
+   PUserNameStruct = ^TUserNameStruct;
+   TUserNameStruct = record
+        UserName : array[0..47] of char;
+        ObjectID : longint;
+     end;
+   TConnectionCriticalErrorHandler =
+      function (fileServerID,connection,err:longint):longint; cdecl;
+
+{$include npackoff.inc}
+
+function AttachByAddress(transType:byte; transLen:longint; transBuf:pointer; fileServerID:PWORD):longint;cdecl;external 'clib' name 'AttachByAddress';
+function AttachByAddress(transType:byte; transLen:longint; var transBuf; var fileServerID:word):longint;cdecl;external 'clib' name 'AttachByAddress';
+
+function AttachToFileServer(fileServerName:Pchar; fileServerID:PWORD):longint;cdecl;external 'clib' name 'AttachToFileServer';
+function AttachToFileServer(fileServerName:Pchar; var fileServerID:word):longint;cdecl;external 'clib' name 'AttachToFileServer';
+
+function GetConnectionFromID(fileServerID:PWORD):longint;cdecl;external 'clib' name 'GetConnectionFromID';
+function GetConnectionFromID(var fileServerID:word):longint;cdecl;external 'clib' name 'GetConnectionFromID';
+
+function GetConnectionInformation (connectionNumber:word;
+                                   objectName      :Pchar;
+                                   objectType      :PWORD;
+                                   objectID        :Plongint;
+                                   loginTime       :PBYTE):longint;cdecl;external 'clib' name 'GetConnectionInformation';
+function GetConnectionInformation (connectionNumber:word;
+                                   objectName      :Pchar;
+                               var objectType      :word;
+                               var objectID        :longint;
+                               var loginTime       :byte):longint;cdecl;external 'clib' name 'GetConnectionInformation';
+
+function GetConnectionList(objectID,lastConnection:longint;
+                           numberOfConnections:Plongint;
+                           connectionList:pointer;
+                           connectionSize:longint):longint;cdecl;external 'clib' name 'GetConnectionList';
+function GetConnectionList(objectID,lastConnection:longint;
+                       var numberOfConnections:longint;
+                       var connectionList;  {array of longint}
+                           connectionSize:longint):longint;cdecl;external 'clib' name 'GetConnectionList';
+function GetConnectionNumber:word;cdecl;external 'clib' name 'GetConnectionNumber';
+function GetDefaultConnectionID:longint;cdecl;external 'clib' name 'GetDefaultConnectionID';
+function GetDefaultFileServerID:longint;cdecl;external 'clib' name 'GetDefaultFileServerID';
+function GetFileServerID(fileServerName:Pchar; fileServerID:PWORD):longint;cdecl;external 'clib' name 'GetFileServerID';
+function GetFileServerID(fileServerName:Pchar; var fileServerID:word):longint;cdecl;external 'clib' name 'GetFileServerID';
+
+function GetInternetAddress(connectionNumber:word;
+                            networkNumber:pointer;
+                            physicalNodeAddress:pointer):longint;cdecl;external 'clib' name 'GetInternetAddress';
+function GetInternetAddress(connectionNumber:word;
+                            var networkNumber;  {4 bytes}
+                            var physicalNodeAddress {6 bytes}):longint;cdecl;external 'clib' name 'GetInternetAddress';
+function GetLANAddress (boardNumber:longint;
+                        nodeAddress:pointer):longint;cdecl;external 'clib' name 'GetLANAddress';
+function GetLANAddress (boardNumber:longint;
+                    var nodeAddress{6 bytes}):longint;cdecl;external 'clib' name 'GetLANAddress';
+
+function GetMaximumNumberOfStations:longint;cdecl;external 'clib' name 'GetMaximumNumberOfStations';
+function GetNetNumber(boardNumber:longint):longint;cdecl;external 'clib' name 'GetNetNumber';
+
+function GetObjectConnectionNumbers (objectName:Pchar;
+                                     objectType:word;
+                                     numberOfConnections:PWORD;
+                                     connectionList:PWORD;
+                                     maxConnections:word):longint;cdecl;external 'clib' name 'GetObjectConnectionNumbers';
+function GetObjectConnectionNumbers (objectName:Pchar;
+                                     objectType:word;
+                                 var numberOfConnections:word;
+                                 var connectionList;  {array of WORD}
+                                     maxConnections:word):longint;cdecl;external 'clib' name 'GetObjectConnectionNumbers';
+
+procedure GetStationAddress(physicalNodeAddress:pointer);cdecl;external 'clib' name 'GetStationAddress';
+procedure GetStationAddress(var physicalNodeAddress {6 bytes});cdecl;external 'clib' name 'GetStationAddress';
+
+function GetUserNameFromNetAddress (internetAddress:PBYTE;
+                                    sequenceNumber:longint;
+                                    userNameP:PUserNameStruct):longint;cdecl;external 'clib' name 'GetUserNameFromNetAddress';
+function GetUserNameFromNetAddress (var internetAddress;  {10 bytes}
+                                    sequenceNumber:longint;
+                                    var userName:TUserNameStruct):longint;cdecl;external 'clib' name 'GetUserNameFromNetAddress';
+
+function LoginToFileServer (objectName:Pchar;
+                            objectType:word;
+                            objectPassword:Pchar):longint;cdecl;external 'clib' name 'LoginToFileServer';
+procedure Logout;cdecl;external 'clib' name 'Logout';
+procedure LogoutFromFileServer(fileServerID:word);cdecl;external 'clib' name 'LogoutFromFileServer';
+function NWDSGetCurrentUser:longint;cdecl;external 'clib' name 'NWDSGetCurrentUser';
+function NWDSSetCurrentUser(userHandle:longint):longint;cdecl;external 'clib' name 'NWDSSetCurrentUser';
+
+function NWDSSetPreferredDSTree (len:longint; treeName:Pchar):longint;cdecl;external 'clib' name 'NWDSSetPreferredDSTree';
+function NWGetPacketBurstBufferCount:longint;cdecl;external 'clib' name 'NWGetPacketBurstBufferCount';
+function NWGetSecurityLevel:longint;cdecl;external 'clib' name 'NWGetSecurityLevel';
+
+function NWNCPSend (functionCode:byte;
+                    sendPacket:pointer; sendLen :word;
+                    replyBuf  :pointer; replyLen:word):longint;cdecl;external 'clib' name 'NWNCPSend';
+function NWNCPSend (functionCode:byte;
+                    var sendPacket; sendLen :word;
+                    var replyBuf;   replyLen:word):longint;cdecl;external 'clib' name 'NWNCPSend';
+
+function NWSetPacketBurstBufferCount(numberOfBuffers:longint):longint;cdecl;external 'clib' name 'NWSetPacketBurstBufferCount';
+function NWSetSecurityLevel(SecurityLevel:longint):longint;cdecl;external 'clib' name 'NWSetSecurityLevel';
+
+function SetConnectionCriticalErrorHandler(func:TConnectionCriticalErrorHandler):longint;cdecl;external 'clib' name 'SetConnectionCriticalErrorHandler';
+{-nwdebug.h--------------------------------------------------------------------}
+{ library-debug flags  }
+
+const
+   CLIB_CONTEXT_CHECK = $002;   { CLib Context  }
+   CLIB_MEMCHECK      = $004;   { Memory Overwrites  }
+   CLIB_RESOURCECHECK = $020;   { Resource Check  }
+   CLIB_THREAD_CHECK  = $200;   { Thread Check  }
+   CLIB_SEMCHECK      = $080;   { Semaphore Checking  }
+   CLIB_RING_BELL     = $040;
+{ dynamic setting and clearing of breakpoints  }
+   EXECUTION_BREAKPOINT  = 0;
+   WRITE_BREAKPOINT      = 1;
+   READ_WRITE_BREAKPOINT = 3;
+
+// most of the functions are in the kernel (system), we define clib here to
+// avoid linker errors
+procedure NWClearBreakpoint(breakpoint:longint);cdecl;external 'clib' name 'NWClearBreakpoint';
+function NWSetBreakpoint(address,breakType:longint):longint;cdecl;external 'clib' name 'NWSetBreakpoint';
+function NWDebugPrintf(format:Pchar; args:array of const):longint;cdecl;external 'clib' name 'NWDebugPrintf';
+function NWDebugPrintf(format:Pchar):longint;cdecl;external 'clib' name 'NWDebugPrintf';
+function NWValidateDebugProfile:longint;cdecl;external 'clib' name 'NWValidateDebugProfile';
+procedure NWBumpFunctionCount(name:Pchar);cdecl;external 'clib' name 'NWBumpFunctionCount';
+procedure NWDisplayBinaryAtAddr(addr:pointer);cdecl;external 'clib' name 'NWDisplayBinaryAtAddr';
+procedure NWDisplayDoubleAtAddr(addr:pointer);cdecl;external 'clib' name 'NWDisplayDoubleAtAddr';
+procedure NWDisplayLConvAtAddr(lc:pointer);cdecl;external 'clib' name 'NWDisplayLConvAtAddr';
+procedure NWDisplayStringAtAddr(s:Pchar; len:longint);cdecl;external 'clib' name 'NWDisplayStringAtAddr';
+procedure NWDisplayTMAtAddr(t:pointer);cdecl;external 'clib' name 'NWDisplayTMAtAddr';
+procedure NWDisplayUnicodeAtAddr(s:pointer; len:longint);cdecl;external 'clib' name 'NWDisplayUnicodeAtAddr';
+procedure NWEnableDebugProfile(flag:longint);cdecl;external 'clib' name 'NWEnableDebugProfile';
+procedure EnterDebugger;cdecl;external 'clib' name 'EnterDebugger';
+function GetDebugSettings:longint;cdecl;external 'clib' name 'GetDebugSettings';
+procedure SetDebugSettings(Settings:longint);cdecl;external 'clib' name 'SetDebugSettings';
+function GetNLMIDFromNLMName(NLMName:PChar):longint;cdecl;external 'clib' name 'GetNLMIDFromNLMName';
+function GetDebugErrorMessage:PChar;cdecl;external 'clib' name 'GetDebugErrorMessage';
+function GetMemoryUsage(NLMID:longint):longint;cdecl;external 'clib' name 'GetMemoryUsage';
+{-nwdfs.h----------------------------------------------------------------------}
+// completion codes
+const
+   DFSFailedCompletion           = -1;
+   DFSNormalCompletion           = 0;
+   DFSInsufficientSpace          = 1;
+   DFSVolumeSegmentDeactivated   = 4;
+   DFSTruncationFailure          = 16;
+   DFSHoleInFileError            = 17;
+   DFSParameterError             = 18;
+   DFSOverlapError               = 19;
+   DFSSegmentError               = 20;
+   DFSBoundryError               = 21;
+   DFSInsufficientLimboFileSpace = 22;
+   DFSNotInDirectFileMode        = 23;
+   DFSOperationBeyondEndOfFile   = 24;
+   DFSOutOfHandles               = 129;
+   DFSHardIOError                = 131;
+   DFSInvalidFileHandle          = 136;
+   DFSNoReadPrivilege            = 147;
+   DFSNoWritePrivilege           = 148;
+   DFSFileDetached               = 149;
+   DFSInsufficientMemory         = 150;
+   DFSInvalidVolume              = 152;
+   DFSIOLockError                = 162;
+
+{$PACKRECORDS C}
+type
+   PFileMapStructure = ^TFileMapStructure;
+   TFileMapStructure = record
+     fileBlock      : longint;
+     volumeBlock    : longint;
+     numberOfBlocks : longint;
+   end;
+
+   PVolumeInformationStructure = ^TVolumeInformationStructure;
+   TVolumeInformationStructure = record
+     VolumeAllocationUnitSizeInBytes           : longint;
+     VolumeSizeInAllocationUnits               : longint;
+     VolumeSectorSize                          : longint;
+     AllocationUnitsUsed                       : longint;
+     AllocationUnitsFreelyAvailable            : longint;
+     AllocationUnitsInDeletedFilesNotAvailable : longint;
+     AllocationUnitsInAvailableDeletedFiles    : longint;
+     NumberOfPhysicalSegmentsInVolume          : longint;
+     PhysicalSegmentSizeInAllocationUnits      : array[0..63] of longint;
+   end;
+
+   PDFSCallBackParameters = ^TDFSCallBackParameters;
+   TDFSCallBackParameters = record
+     localSemaphoreHandle : longint;
+     completionCode       : longint;
+   end;
+
+{-------------------------------------------------------------------------
+  	Definition of setSizeFlags
+ ------------------------------------------------------------------------- }
+
+const
+   SETSIZE_NON_SPARSE_FILE = $00000001;    // Alloc blocks to extend the file
+   SETSIZE_NO_ZERO_FILL    = $00000002;    // Do not zero fill the newly allocated blocks
+   SETSIZE_UNDO_ON_ERR     = $00000004;    // In non sparse cases truncate back to original eof if an error occurs
+   SETSIZE_PHYSICAL_ONLY   = $00000008;    // Change the physical EOF only, dont change logical EOF. This means non sparse for the expand case
+   SETSIZE_LOGICAL_ONLY    = $00000010;    // Change only the logical EOF expand will always be sparse and truncate won't free physical blocks
+
+function DFSclose(fileHandle:longint):longint;cdecl;external 'clib' name 'DFSclose';
+function DFScreat(fileName:Pchar; permission,flagBits:longint):longint;cdecl;external 'clib' name 'DFScreat';
+function DFSExpandFile(fileHandle,fileBlockNumber,
+                       numberOfBlocks,volumeBlockNumber,segmentNumber:longint):longint;cdecl;external 'clib' name 'DFSExpandFile';
+function DFSFreeLimboVolumeSpace(volumeNumber,numberOfBlocks:longint):longint;cdecl;external 'clib' name 'DFSFreeLimboVolumeSpace';
+function DFSsopen(fileName:PChar; access,share,permission,flagBits,dataStream:longint):longint;cdecl;external 'clib' name 'DFSsopen';
+function DFSRead(fileHandle,startingSector,sectorCount:longint; buffer:pointer):longint;cdecl;external 'clib' name 'DFSRead';
+function DFSRead(fileHandle,startingSector,sectorCount:longint; var buffer):longint;cdecl;external 'clib' name 'DFSRead';
+function DFSReadNoWait(fileHandle,startingSector,sectorCount:longint; buffer:pointer; callBackNode:PDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSReadNoWait';
+function DFSReadNoWait(fileHandle,startingSector,sectorCount:longint; var buffer; var callBackNode:TDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSReadNoWait';
+function DFSReturnFileMappingInformation(fileHandle,startingBlockNumber:longint; numberOfEntries:Plongint; tableSize:longint; table:PFileMapStructure):longint;cdecl;external 'clib' name 'DFSReturnFileMappingInformation';
+function DFSReturnFileMappingInformation(fileHandle,startingBlockNumber:longint; var numberOfEntries:longint; tableSize:longint; var table:TFileMapStructure):longint;cdecl;external 'clib' name 'DFSReturnFileMappingInformation';
+function DFSReturnVolumeBlockInformation(volumeNumber,startingBlockNumber,numberOfBlocks:longint; buffer:Pointer):longint;cdecl;external 'clib' name 'DFSReturnVolumeBlockInformation';
+function DFSReturnVolumeBlockInformation(volumeNumber,startingBlockNumber,numberOfBlocks:longint; var buffer):longint;cdecl;external 'clib' name 'DFSReturnVolumeBlockInformation';
+function DFSReturnVolumeMappingInformation(volumeNumber:longint; volumeInformation:PVolumeInformationStructure):longint;cdecl;external 'clib' name 'DFSReturnVolumeMappingInformation';
+function DFSSetDataSize (handle:longint; newFileSize:int64; setSizeFlags:longint):longint; cdecl;external 'clib' name 'DFSSetDataSize';
+function DFSSetEndOfFile(handle,newFileSize,returnTruncatedBlocksFlag:longint):longint;cdecl;external 'clib' name 'DFSSetEndOfFile';
+function DFSWrite(fileHandle,startingSector,sectorCount:longint; buffer:pointer):longint;cdecl;external 'clib' name 'DFSWrite';
+function DFSWrite(fileHandle,startingSector,sectorCount:longint; var buffer):longint;cdecl;external 'clib' name 'DFSWrite';
+function DFSWriteNoWait(fileHandle,startingSector,sectorCount:longint; buffer:pointer; callBackNode:PDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSWriteNoWait';
+function DFSWriteNoWait(fileHandle,startingSector,sectorCount:longint; var buffer; var callBackNode:TDFSCallBackParameters):longint;cdecl;external 'clib' name 'DFSWriteNoWait';
+{-nwdos.h----------------------------------------------------------------------}
+{$include npackon.inc}
+type
+   Pfind_t = ^Tfind_t;
+   Tfind_t = record
+        reserved : array[0..20] of char;
+        attrib : char;
+        wr_time : word;
+        wr_date : word;
+        size : longint;
+        name : array[0..12] of char;
+     end;
+
+{$include npackoff.inc}
+
+function DOSChangeFileMode(name:Pchar; attributes:Plongint; _function:longint; newAttributes:longint):longint;cdecl;external 'clib' name 'DOSChangeFileMode';
+function DOSClose(handle:longint):longint;cdecl;external 'clib' name 'DOSClose';
+function DOSCopy(NetWareFileName,DOSFileName:Pchar):longint;cdecl;external 'clib' name 'DOSCopy';
+function DOSCreate(fileName:Pchar; handle:Plongint):longint;cdecl;external 'clib' name 'DOSCreate';
+function DOSCreate(fileName:Pchar; var handle:longint):longint;cdecl;external 'clib' name 'DOSCreate';
+function DOSsopen(filename:Pchar; access,share,permission:longint):longint;cdecl;external 'clib' name 'DOSsopen';
+function DOSFindFirstFile(fileName:Pchar; searchAttributes:word; diskTransferAddress:Pfind_t):longint;cdecl;external 'clib' name 'DOSFindFirstFile';
+function DOSFindNextFile(diskTransferAddress:Pfind_t):longint;cdecl;external 'clib' name 'DOSFindNextFile';
+function DOSMkdir(__dirName:Pchar):longint;cdecl;external 'clib' name 'DOSMkdir';
+function DOSOpen(fileName:Pchar; handle:Plongint):longint;cdecl;external 'clib' name 'DOSOpen';
+function DOSOpen(fileName:Pchar; var handle:longint):longint;cdecl;external 'clib' name 'DOSOpen';
+function DOSPresent:longint;cdecl;external 'clib' name 'DOSPresent';
+function DOSRead(handle,fileOffset:longint; buffer:pointer; numberOfBytesToRead:longint; numberOfBytesRead:Plongint):longint;cdecl;external 'clib' name 'DOSRead';
+function DOSRead(handle,fileOffset:longint; var buffer; numberOfBytesToRead:longint; var numberOfBytesRead:longint):longint;cdecl;external 'clib' name 'DOSRead';
+function DOSRemove(name:Pchar):longint;cdecl;external 'clib' name 'DOSRemove';
+function DOSRename(srcName,dstName:Pchar):longint;cdecl;external 'clib' name 'DOSRename';
+function DOSRmdir(Name:Pchar):longint;cdecl;external 'clib' name 'DOSRmdir';
+function DOSSetDateAndTime(handle,date,time:longint):longint;cdecl;external 'clib' name 'DOSSetDateAndTime';
+procedure DOSShutOffFloppyDrive;cdecl;external 'clib' name 'DOSShutOffFloppyDrive';
+function DOSUnlink(Name:Pchar):longint;cdecl;external 'clib' name 'DOSUnlink';
+function DOSWrite(handle,fileOffset:longint; buffer:pointer; numberOfBytesToWrite:longint; numberOfBytesWritten:Plongint):longint;cdecl;external 'clib' name 'DOSWrite';
+function DOSWrite(handle,fileOffset:longint; var buffer; numberOfBytesToWrite:longint; var numberOfBytesWritten:longint):longint;cdecl;external 'clib' name 'DOSWrite';
+{-nwfattr.h--------------------------------------------------------------------}
+const
+   NWSH_PRE_401D_COMPAT = $80000000;  // for multiple thread use, see documentation for sopen()...
+{ Attribute values for use with existing files                              }
+{ Normal (read/write) file         }
+   _A_NORMAL             = $00000000;
+   _A_RDONLY             = $00000001;
+   _A_HIDDEN             = $00000002;
+   _A_SYSTEM             = $00000004;
+   _A_EXECUTE            = $00000008;
+   _A_VOLID              = $00000008;  // Volume ID entry
+   _A_SUBDIR             = $00000010;
+   _A_ARCH               = $00000020;
+   _A_SHARE              = $00000080;
+   _A_NO_SUBALLOC        = $00000800;  // Don't sub alloc. this file
+   _A_TRANS              = $00001000;  // Transactional file (TTS usable)
+   _A_READAUD            = $00004000;  // Read audit
+   _A_WRITAUD            = $00008000;  // Write audit
+   _A_IMMPURG            = $00010000;  // Immediate purge
+   _A_NORENAM            = $00020000;  // Rename inhibit
+   _A_NODELET            = $00040000;  // Delete inhibit
+   _A_NOCOPY             = $00080000;  // Copy inhibit
+   _A_FILE_MIGRATED      = $00400000;  // File has been migrated
+   _A_DONT_MIGRATE       = $00800000;  // Don't migrate this file
+   _A_IMMEDIATE_COMPRESS = $02000000;  // Compress this file immediately
+   _A_FILE_COMPRESSED    = $04000000;  // File is compressed
+   _A_DONT_COMPRESS      = $08000000;  // Don't compress this file
+   _A_CANT_COMPRESS      = $20000000;  // Can't compress this file
+   _A_ATTR_ARCHIVE       = $40000000;  // Entry has had an EA modified
+                                       // an ownerID changed, or trustee
+                                       // info changed, etc.
+
+// Attribute values usable during file creation
+// Use: OR value with the file mode value to initialize the mode parameter
+   FA_NORMAL  = _A_NORMAL shl 16;
+   FA_RDONLY  = _A_RDONLY shl 16;
+   FA_HIDDEN  = _A_HIDDEN shl 16;
+   FA_SYSTEM  = _A_SYSTEM shl 16;
+   FA_EXECUTE = _A_EXECUTE shl 16;
+   FA_SUBDIR  = _A_SUBDIR shl 16;
+   FA_ARCHIVE = _A_ARCH shl 16;
+   FA_SHARE   = _A_SHARE shl 16;
+{ Extended file attributes values  }
+   FA_TRANSAC = _A_TRANS shl 12;
+   FA_READAUD = _A_READAUD shl 12;
+   FA_WRITEAUD= _A_WRITAUD shl 12;
+   FA_IMMPURG = _A_IMMPURG shl 12;
+   FA_NORENAM = _A_NORENAM shl 12;
+   FA_NODELET = _A_NODELET shl 12;
+   FA_NOCOPY  = _A_NOCOPY shl 12;
+{ Sharing values for sharable open functions  }
+{ compatibility mode    }
+   SH_COMPAT = $00;
+{ deny read/write mode  }
+   SH_DENYRW = $10;
+{ deny write mode       }
+   SH_DENYWR = $20;
+{ deny read mode        }
+   SH_DENYRD = $30;
+{ deny none mode        }
+   SH_DENYNO = $40;
+{ FEcreat/FEsopen flagBits parameter values used when creating a file  }
+   DELETE_FILE_ON_CREATE_BIT        = $0001;
+   NO_RIGHTS_CHECK_ON_CREATE_BIT    = $0002;
+{ FEsopen flagBits parameter values used when opening a file  }
+   FILE_WRITE_THROUGH_BIT           = $00000040;
+   ENABLE_IO_ON_COMPRESSED_DATA_BIT = $00000100;
+   LEAVE_FILE_COMPRESSED_DATA_BIT   = $00000200;
+   DELETE_FILE_ON_CLOSE_BIT         = $00000400;
+   NO_RIGHTS_CHECK_ON_OPEN_BIT      = $00010000;
+   OK_TO_OPEN_DOS_FILE              = $80000000;
+{ Volume Flags used with NWGetVolumeFlags and NWSetVolumeFlags  }
+   SUB_ALLOCATION_FLAG         = $02;  // if set sub allocation units valid on this volume
+   FILE_COMPRESSION_FLAG       = $04;  // if set file compression enabled on this volume
+   DATA_MIGRATION_FLAG         = $08;  // if set data migration is allowed on this volume
+   VOLUME_IMMEDIATE_PURGE_FLAG = $40;  // if set volume is marked as immediate purge
+{ Name space values  }
+   DOSNameSpace      = 0;
+   MACNameSpace      = 1;
+   NFSNameSpace      = 2;
+   FTAMNameSpace     = 3;
+   OS2NameSpace      = 4;
+   LONGNameSpace     = 4;
+   NTNameSpace       = 5;
+   MAX_NAMESPACES    = 6;
+   NWDOS_NAME_SPACE  = DOSNameSpace;
+   NWMAC_NAME_SPACE  = MACNameSpace;
+   NWNFS_NAME_SPACE  = NFSNameSpace;
+   NWFTAM_NAME_SPACE = FTAMNameSpace;
+   NWOS2_NAME_SPACE  = OS2NameSpace;
+   NWLONG_NAME_SPACE = LONGNameSpace;
+   NWNT_NAME_SPACE   = NTNameSpace;
+{ Data stream values  }
+   PrimaryDataStream = 0;
+   MACResourceForkDataStream = 1;
+   FTAMStructuringDataStream = 2;
+{ File path length values  }
+   _MAX_PATH = 255;           // maximum length of full pathname
+   _MAX_SERVER = 48;          // maximum length of server name
+   _MAX_VOLUME = 16;          // maximum length of volume component
+   _MAX_DRIVE  = 3;           // maximum length of drive component
+   _MAX_DIR    = 255;         // maximum length of path component
+   _MAX_FNAME  = 9;           // maximum length of file name component
+   _MAX_EXT    = 5;           // maximum length of extension component
+   _MAX_NAME   = 13;          // maximum length of file name
+   NAME_MAX    = 12;          // maximum length of file name (alternate view)
+
+{ Modify structure mask values  }
+   MModifyNameBit = $0001;
+   MFileAttributesBit = $0002;
+   MCreateDateBit = $0004;
+   MCreateTimeBit = $0008;
+   MOwnerIDBit = $0010;
+   MLastArchivedDateBit = $0020;
+   MLastArchivedTimeBit = $0040;
+   MLastArchivedIDBit = $0080;
+   MLastUpdatedDateBit = $0100;
+   MLastUpdatedTimeBit = $0200;
+   MLastUpdatedIDBit = $0400;
+   MLastAccessedDateBit = $0800;
+   MInheritanceRestrictionMaskBit = $1000;
+   MMaximumSpaceBit = $2000;
+   MLastUpdatedInSecondsBit = $4000;
+{$include npackon.inc}
+type
+   PModifyStructure = ^TModifyStructure;
+   TModifyStructure = record
+        MModifyName : PBYTE;
+        MFileAttributes : longint;
+        MFileAttributesMask : longint;
+        MCreateDate : word;
+        MCreateTime : word;
+        MOwnerID : longint;
+        MLastArchivedDate : word;
+        MLastArchivedTime : word;
+        MLastArchivedID : longint;
+        MLastUpdatedDate : word;
+        MLastUpdatedTime : word;
+        MLastUpdatedID : longint;
+        MLastAccessedDate : word;
+        MInheritanceGrantMask : word;
+        MInheritanceRevokeMask : word;
+        MMaximumSpace : longint;
+        MLastUpdatedInSeconds : longint;
+     end;
+
+{$include npackoff.inc}
+
+{-nwadv.h----------------------------------------------------------------------}
+{$include npackon.inc}
+{ Resource tag signatures for AllocateResourceTag  }
+
+const
+   AllocSignature = $54524C41;
+   AESProcessSignature = $50534541;
+   CacheNonMovableMemorySignature = $544D4E43;
+   ConsoleCommandSignature = $4D4F4343;
+   HardwareInterruptSignature = $50544E49;
+   InterruptTimeCallBackSignature = $524D4954;
+   SemiPermMemorySignature = $454D5053;
+   DebuggerSignature = $47554244;
+   BreakpointSignature = $54504B42;
+{ Data structure for RegisterConsoleCommand  }
+{ set by RegisterConsoleCommand  }
+{ parsing routing (user defined)  }
+{ set to resource tag  }
+type
+   PcommandParserStructure = ^TcommandParserStructure;
+   TcommandParserStructure = record
+        Link : PcommandParserStructure;
+        parseRoutine : function (screenID:longint; commandLine:PBYTE):longint;cdecl;
+        RTag : longint;
+     end;
+
+{
+   Structures and constants for RegisterForEvent function. Unless otherwise
+   noted an event does NOT call a Warn routine.
+ }
+
+const
+   EVENT_VOL_SYS_MOUNT = 0;
+{ parameter is undefined. Report Routine will be called immediately
+      after vol SYS has been mounted.
+     }
+   EVENT_VOL_SYS_DISMOUNT = 1;
+{ parameter is undefined. Warn Routine and Report Routine will be
+      called before vol SYS is dismounted.
+     }
+   EVENT_ANY_VOL_MOUNT = 2;
+{ parameter is volume number. Report Routine will be called immediately
+      after any volume is mounted.
+     }
+   EVENT_ANY_VOL_DISMOUNT = 3;
+{ parameter is volume number. Warn Routine and Report Routine will be
+      called before any volume is dismounted.
+     }
+   EVENT_DOWN_SERVER = 4;
+{ parameter is undefined. Warn Routine and Report Routine will be
+      called before the server is shut down.
+     }
+   EVENT_EXIT_TO_DOS = 7;
+{ parameter is undefined. The Report Routine will be called before the
+      server exits to DOS.
+     }
+   EVENT_MODULE_UNLOAD = 8;
+{ parameter is module handle. Warn Routine and Report Routine will be
+      called when a module is unloaded from the console command line. Only
+      the Report Routine will be called when a module unloads itself.
+     }
+   EVENT_CLEAR_CONNECTION = 9;
+{ parameter is connection number. Report Routine is called before the
+      connection is cleared.
+     }
+   EVENT_LOGIN_USER = 10;
+{ parameter is connection number. Report Routine is called after the
+      connection has been allocated.
+     }
+   EVENT_CREATE_BINDERY_OBJ = 11;
+{ parameter is object ID. Report Routine is called after the object is
+      created and entered in the bindery.
+     }
+   EVENT_DELETE_BINDERY_OBJ = 12;
+{ parameter is object ID. Report Routine is called before the object is
+      removed from the bindery.
+     }
+   EVENT_CHANGE_SECURITY = 13;
+{ parameter is a pointer a structure of type EventSecurityChangeStruct.
+      Report Routine is called after a security
+      equivalence change has occurred.
+     }
+   EVENT_ACTIVATE_SCREEN = 14;
+{ Parameter is screen ID. Report routine is called after the
+      screen becomes the active screen.
+     }
+   EVENT_UPDATE_SCREEN = 15;
+{ Parameter is screen ID. Report routine is called after a change is
+      made to the screen image.
+     }
+   EVENT_UPDATE_CURSOR = 16;
+{ Parameter is screen ID. Report routine is called after a change to
+      the cursor position or state occurs.
+     }
+   EVENT_KEY_WAS_PRESSED = 17;
+{ Parameter is undefined. Report routine is called whenever a
+      key on the keyboard is pressed (including shift/alt/control).
+      This routine is called at interrupt time.
+     }
+   EVENT_DEACTIVATE_SCREEN = 18;
+{ Parameter is screen ID. Report routine is called when the
+      screen becomes inactive.
+     }
+   EVENT_TRUSTEE_CHANGE = 19;
+{ Parameter is a pointer to type struct EventTrusteeChangeStruct. The
+      report routine is called everytime there is a change to a trustee in
+      the file system. Shouldn't sleep.
+     }
+   EVENT_OPEN_SCREEN = 20;
+{ Parameter is the screen ID for the newly created screen. The report
+      routine will be called after the screen is created.
+     }
+   EVENT_CLOSE_SCREEN = 21;
+{ Parameter is the screen ID for the screen that will be closed. The
+      report routine will be called before the screen is closed.
+     }
+   EVENT_MODIFY_DIR_ENTRY = 22;
+{ Parameter is a pointer to a structure of type EventModifyDirEntryStruct
+      which contains the modify information. The report routine will be
+      called right after the entry is changed but before the directory
+      entry is unlocked. The report routine must not go to sleep.
+     }
+   EVENT_NO_RELINQUISH_CONTROL = 23;
+{ Parameter is the running process. This will be called when the
+      timer detects that a process is hogging the processor. The report
+      routine must not sleep.
+     }
+   EVENT_THREAD_SWITCH = 25;
+{ Parameter is the threadID of the thread that was executing when the
+      thread switch occurred. The report routine will be called when the
+      new thread begins executing. The report routine must not go to sleep.
+     }
+   EVENT_MODULE_LOAD = 27;
+{ parameter is module handle. The report routine will be called
+      after a module has loaded.
+     }
+   EVENT_CREATE_PROCESS = 28;
+{ parameter is the PID of the process being created. It is called
+      after the process is created. The report routine may not sleep.
+     }
+   EVENT_DESTROY_PROCESS = 29;
+{ parameter is the PID of the process being destroyed. It is called
+      before the process is actually destroyed. The report routine may not
+      sleep.
+     }
+   EVENT_NEW_PUBLIC = 32;
+{ Parameter is a pointer to a length preceded string which is the name
+      of the new public entry point. This event may not sleep.
+     }
+   EVENT_PROTOCOL_BIND = 33;
+{ Parameter is a pointer to a structure of type EventProtocolBindStruct.
+      This event is generated every time a board is bound to a protocol.
+      This event may sleep.
+     }
+   EVENT_PROTOCOL_UNBIND = 34;
+{ Parameter is a pointer to a structure of type EventProtocolBindStruct.
+      This event is generated every time a board is unbound from a protocol.
+      This event may sleep.
+     }
+   EVENT_ALLOCATE_CONNECTION = 37;
+{ parameter is connection number. Report Routine is called after the
+      connection is allocated.
+     }
+   EVENT_LOGOUT_CONNECTION = 38;
+{ parameter is connection number. Report Routine is called before the
+      connection is logged out. The event handler may sleep.
+     }
+   EVENT_MLID_REGISTER = 39;
+{ parameter is board number. Report Routine is called after the MLID
+      is registered.
+     }
+   EVENT_MLID_DEREGISTER = 40;
+{ parameter is board number. Report Routine is called before the MLID
+      is deregistered.
+     }
+   EVENT_DATA_MIGRATION = 41;
+{ Parameter is a pointer to a structure of type EventDateMigrationInfo.
+      This event is generated when a file's data has been migrated.
+    }
+   EVENT_DATA_DEMIGRATION = 42;
+{ Parameter is a pointer to a structure of type EventDateMigrationInfo.
+      This event is generated when a file's data has been de-migrated.
+    }
+   EVENT_QUEUE_ACTION = 43;
+{   Parameter is a pointer to a structure of type EventQueueNote.
+      This event is generated when a queue is activated, deactivated,
+      created, or deleted.
+    }
+   EVENT_NETWARE_ALERT = 44;
+{ Parameter is a pointer to a structure of type EventNetwareAlertStruct.
+      This event is generated anytime the following alert calls are
+      made:
+              NetWareAlert        NW 4.X
+
+        The report routine may sleep.
+     }
+   EVENT_CREATE_OBJECT = 46;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_DELETE_OBJECT = 47;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_RENAME_OBJECT = 48;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_VALUE_CHANGE = 49;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_CLOSE_FILE = 50;
+{ Parameter is a pointer to a structure of type EventCloseFileInfo.  }
+   EVENT_CHANGE_TIME = 51;
+{ This event is given when the time is changed or when Time
+      Synchronization schedules a nonuniform adjustment. The parameter is
+      the UTC time (in seconds) before the time change. The current time
+      is available from the OS. Since you have no way of knowing the
+      magnitudue of the time change, nor whether it has taken place or is
+      scheduled for the next clock interrupt, you must detect the time
+      change on your own. In general, if current time is less than old
+      time, or at least two seconds ahead of old time, then the time change
+      has been applied. You must wait for one of those conditions to be
+      sure that the time change has "settled down" before you can assume
+      that the event has "happened."
+     }
+   EVENT_MOVE_OBJECT = 52;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_VALUE_ADD = 53;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_VALUE_DEL = 54;
+{ Parameter is a pointer to a structure of type EventBinderyObject
+      or EventDSObject
+     }
+   EVENT_DM_KEY_MODIFIED = 55;
+{ Parameter is a pointer to a structure of type EventDMKeyModified
+     }
+   EVENT_MODULE_UNLOADED = 56;
+{ Parameter is module handle. Report Routine will be called after the
+      NLM's exit routine has been called, after his resources have been
+      returned to the OS, and after he has been unlinked from the OS's lists.
+      The only thing left of this NLM is the memory for his load definition
+      structure, data image, and code image.
+     }
+   EVENT_REMOVE_PUBLIC = 57;
+{ Parameter is the address of the public entry point. This only happens
+      on module unload.
+     }
+   EVENT_DS_EVENT = 58;
+{ Parameter is the address of a DS defined event structure   }
+   EVENT_UNICODE = 59;
+{ Parameter is the address of a UNICODE defined event structure  }
+   EVENT_SFT3_SERVER_STATE = 60;
+{ Parameter is the ServerState Number
+      (Refer to messtype.h, server state codes)
+      IOEngineState                          0
+      PrimaryNoSecondaryState                1
+      PrimarySyncingWithSecondaryState       2
+      PrimaryTransferingMemoryImageState     3
+      PrimaryWithSecondaryState              4
+      SecondaryTransferingMemoryImageState   5
+      SecondaryMirroredState                 6
+    }
+   EVENT_SFT3_IMAGE_STATE = 61;
+{ Parameter is memory mirror state  }
+{ 0 = Not mirrored  }
+{ 1 = Mirrored  }
+   EVENT_SFT3_PRESYNC_STATE = 62;
+{ called when the primary is about ready to synchronize  }
+{ with the secondary   }
+{ Parameter is unsed for now.  }
+{ This event report is allowed to sleep  }
+   EVENT_ALTERNATE_MOUNT_VOLUME = 63;
+{ called when NetWare is not aware of the volume name to be mounted,  }
+{ Parameter is used to pass a event structure EventAlternateMountVolume. }
+{ This event report is allowed to sleep, also the return code is in the  }
+{ structre, after it has been processed.  }
+   EVENT_CONSOLE_CONFIG_COMMAND = 64;
+{ called when the console command CONFIG is typed on the server command  }
+{ line. The event report is allowed to sleep.  The console screen handle  }
+{ pointer is passed as the only parameter  }
+   EVENT_CONSOLE_VERSION_COMMAND = 65;
+{ called when the console command VERSION is typed on the server command  }
+{ line. The event report is allowed to sleep.  A pointer to the structure  }
+{ struct EventConfigVersionCmdInfo to help in the displaying to the screen  }
+   EVENT_PRE_LOAD_NLM = 66;
+{ called while an NLM is being loaded but before most of the work is
+      done. The data and code segments have not been allocated yet. The
+      event report is allowed to sleep. The parameter is a pointer to an
+      NLM Load File Header structure.
+     }
+   EVENT_LOW_MEMORY = 67;
+{ called when the cache memory allocator tries to allocate a cache block
+      and fails; only one event per minute will be generated. It happens
+      in conjunction with the netware alert. The event report can block.
+      The parameter is a zero. This event is mainly for OS2 based NetWare
+      so it can try to borrow memory back from OS2.
+     }
+{-----------------------------------------------------------
+     Flags for the trustee change event (EVENT_TRUSTEE_CHANGE)
+     ----------------------------------------------------------- }
+   EVENT_NEW_TRUSTEE = 1;
+   EVENT_REMOVE_TRUSTEE = 2;
+{-------------------------------------------------------------
+     Flags for the change security event (EVENT_CHANGE_SECURITY)
+     ------------------------------------------------------------- }
+   EVENT_ADD_EQUIVALENCE = 1;
+   EVENT_REMOVE_EQUIVALENCE = 2;
+{----------------------------------------------
+     Structure returned for EVENT_TRUSTEE_CHANGE
+     ---------------------------------------------- }
+{ flags are EVENT_NEW_TRUSTEE and EVENT_REMOVE_TRUSTEE  }
+type
+   PEventTrusteeChangeStruct = ^TEventTrusteeChangeStruct;
+   TEventTrusteeChangeStruct = record
+        objectID : longint;
+        entryID : longint;
+        volumeNumber : longint;
+        changeFlags : longint;
+        newRights : longint;
+     end;
+
+{-----------------------------------------------
+     Structure returned for EVENT_CHANGE_SECURITY
+     ----------------------------------------------- }
+{ EVENT_ADD_EQUIVALENCE and EVENT_REMOVE_EQUIVALENCE  }
+   PEventSecurityChangeStruct = ^TEventSecurityChangeStruct;
+   TEventSecurityChangeStruct = record
+        objectID : longint;
+        equivalentID : longint;
+        changeFlags : longint;
+     end;
+
+{------------------------------------------------
+     Structure returned for EVENT_MODIFY_DIR_ENTRY
+     ------------------------------------------------ }
+   PEventModifyDirEntryStruct = ^TEventModifyDirEntryStruct;
+   TEventModifyDirEntryStruct = record
+        primaryDirectoryEntry : longint;
+        nameSpace : longint;
+        modifyBits : longint;
+        modifyVector : PModifyStructure;
+        volumeNumber : longint;
+        directoryEntry : longint;
+     end;
+
+{----------------------------------------------------
+     Structure returned for EVENT_PROTOCOL_BIND & UNBIND
+     ---------------------------------------------------- }
+   PEventProtocolBindStruct = ^TEventProtocolBindStruct;
+   TEventProtocolBindStruct = record
+        boardNumber : longint;
+        protocolNumber : longint;
+     end;
+
+{----------------------------------------------------------
+     Structure returned for EVENT_DATA_MIGRATION & DEMIGRATION
+     ---------------------------------------------------------- }
+{ 255 + 1 len byte  }
+   PEventDateMigrationInfo = ^TEventDateMigrationInfo;
+   TEventDateMigrationInfo = record
+        FileSystemTypeID : longint;
+        Volume : longint;
+        DOSDirEntry : longint;
+        OwnerDirEntry : longint;
+        OwnerNameSpace : longint;
+        OwnerFileName : array[0..255] of byte;
+     end;
+
+{------------------------------------------------
+     Structure returned for EVENT_QUEUE_ACTION
+     ------------------------------------------------ }
+{ 0=created, 1=deleted, 2 = activated, 3 = deactivated  }
+   PEventQueueNote = ^TEventQueueNote;
+   TEventQueueNote = record
+        QAction : longint;
+        QID : longint;
+        QName : array[0..49] of byte;
+     end;
+
+{------------------------------------------------
+     Structure returned for EVENT_NETWARE_ALERT
+     ------------------------------------------------ }
+   PEventNetwareAlertStruct = ^TEventNetwareAlertStruct;
+   TEventNetwareAlertStruct = record
+        alertFlags : longint;
+        alertId : longint;
+        alertLocus : longint;
+        alertClass : longint;
+        alertSeverity : longint;
+        targetStationCount : longint;
+        targetStationList : array[0..31] of longint;
+        targetNotificationBits : longint;
+        alertParmCount : longint;
+        alertDataPtr : pointer;
+        NetWorkManagementAttributePointer : pointer;
+        alertUnused : array[0..1] of longint;
+        alertControlStringMessageNumber : longint;
+        alertControlString : array[0..255] of byte;
+        alertParameters : array[0..(256 + 256)-1] of byte;
+        alertModuleName : array[0..35] of byte;
+        alertModuleMajorVersion : longint;
+        alertModuleMinorVersion : longint;
+        alertModuleRevision : longint;
+     end;
+
+{ set to 'BIND' for bindery  }
+   PEventBinderyObject = ^TEventBinderyObject;
+   TEventBinderyObject = record
+        EventObjectType : longint;
+        ObjectID : longint;
+        ObjectType : longint;
+     end;
+
+{ 'DNIB'  }
+
+const
+   EventBinderySignature = $444e4942;
+{ 'CVSD'  }
+   EventDSSignature = $43565344;
+{ set to 'DSVC' for directory services  }
+{ add, delete, etc.  }
+{ DS defined entry structure  }
+type
+   PEventDSObject = ^TEventDSObject;
+   TEventDSObject = record
+        EventObjectType : longint;
+        EventType : longint;
+        entry : pointer;
+     end;
+
+   PEventCloseFileInfo = ^TEventCloseFileInfo;
+   TEventCloseFileInfo = record
+        fileHandle : longint;
+        station : longint;
+        task : longint;
+        fileHandleFlags : longint;
+        completionCode : longint;
+     end;
+
+   TreportProcedure = procedure (parameter:longint; userParameter:longint); cdecl;
+   TOutputRoutine   = procedure (controlString:pointer; args:array of const); cdecl;
+   TWarnProcedure   = function  (OutputRoutine:TOutputRoutine; parameter,userParameter:longint):longint; cdecl;
+
+{ struct EventCloseFileInfo's fileHandleFlags  }
+
+const
+   ECNotReadableBit = $00000001;
+   ECNotWriteableBit = $00000002;
+   ECWrittenBit = $00000004;
+   ECDetachedBit = $00000008;
+   ECDirectFileSystemBit = $00000020;
+   ECFileWriteThroughBit = $00000040;
+{$include npackoff.inc}
+
+function AllocateResourceTag (NLMHandle:longint;
+                              descriptionString:PChar;
+                              resourceType:longint):longint;cdecl;external 'clib' name 'AllocateResourceTag';
+function DSAllocateEventTag (DSEventSignature:longint):pointer;cdecl;external 'clib' name 'DSAllocateEventTag';
+function GetCurrentOSLanguageID:longint;cdecl;external 'clib' name 'GetCurrentOSLanguageID';
+function GetFileHoleMap (handle:longint;
+                         startingPosition:longint;
+                         numberOfBlocks:longint;
+                         replyBitMapP:PBYTE;
+                         allocationUnitSizeP:Plongint):longint;cdecl;external 'clib' name 'GetFileHoleMap';
+function GetFileHoleMap (handle:longint;
+                         startingPosition:longint;
+                         numberOfBlocks:longint;
+                         var replyBitMapP;
+                         var allocationUnitSizeP:longint):longint;cdecl;external 'clib' name 'GetFileHoleMap';
+function GetSetableParameterValue (connectionNumber:longint;
+                                   setableParameterString:PChar;
+                                   returnValue:pointer):longint;cdecl;external 'clib' name 'GetSetableParameterValue';
+function GetSettableParameterValue (connectionNumber:longint;
+                                    setableParameterString:PBYTE;
+                                    returnValue:pointer):longint;cdecl;external 'clib' name 'GetSetableParameterValue';  // use this define if the misspelling is too annoying
+function GetThreadDataAreaPtr:pointer;cdecl;external 'clib' name 'GetThreadDataAreaPtr';
+function ImportSymbol(NLMHandle:longint; symbolName:Pchar):pointer;cdecl;external 'clib' name 'ImportSymbol';
+function LoadLanguageMessageTable(messageTable:PPPchar; messageCount:Plongint; languageID:Plongint):longint;cdecl;external 'clib' name 'LoadLanguageMessageTable';
+function LoadLanguageMessageTable(var messageTable; var messageCount:longint; languageID:Plongint):longint;cdecl;external 'clib' name 'LoadLanguageMessageTable';
+function NWAddSearchPathAtEnd(searchPath:PChar; number:Plongint):longint;cdecl;external 'clib' name 'NWAddSearchPathAtEnd';
+function NWAddSearchPathAtEnd(searchPath:PChar; var number:longint):longint;cdecl;external 'clib' name 'NWAddSearchPathAtEnd';
+function NWDeleteSearchPath(searchPathNumber:longint):longint;cdecl;external 'clib' name 'NWDeleteSearchPath';
+function NWGetSearchPathElement (searchPathNumber:longint;
+                                 isDOSSearchPath:Plongint;
+                                 searchPath:PChar):longint;cdecl;external 'clib' name 'NWGetSearchPathElement';
+function NWGetSearchPathElement (searchPathNumber:longint;
+                                 var isDOSSearchPath:boolean;
+                                 searchPath:PChar):longint;cdecl;external 'clib' name 'NWGetSearchPathElement';
+function NWInsertSearchPath(searchPathNumber:longint; path:PChar):longint;cdecl;external 'clib' name 'NWInsertSearchPath';
+function RegisterConsoleCommand(newCommandParser:PcommandParserStructure):longint;cdecl;external 'clib' name 'RegisterConsoleCommand';
+function RegisterForEvent (eventType:longint;
+                           reportProcedure:TreportProcedure;
+                           warnProcedure:TwarnProcedure):longint;cdecl;external 'clib' name 'RegisterForEvent';
+function RenameLanguage (languageID:longint;
+                         newLanguageName:PChar;
+                         showErrorsToConsole:longint):longint;cdecl;external 'clib' name 'RenameLanguage';
+function ReturnLanguageName(languageID:longint; languageName:PChar):longint;cdecl;external 'clib' name 'ReturnLanguageName';
+procedure SaveThreadDataAreaPtr(threadDataAreaPtr:pointer);cdecl;external 'clib' name 'SaveThreadDataAreaPtr';
+    { -1 for all, COMMUNICATIONS, MEMORY, etc  }
+    { 0 for first time  }
+    { 0 = number, 1 = boolean, 2 = time ticks., etc  }
+    { STARTUP, HIDE, etc  }
+    { COMMUNICATIONS, MEMORY, etc  }
+    { description string  }
+function ScanSetableParameters (scanCategory:longint;
+                                scanSequence:Plongint;
+                                rParameterName:PBYTE;
+                                rType:Plongint;
+                                rFlags:Plongint;
+                                rCategory:Plongint;
+                                rParameterDescription:pointer;
+                                rCurrentValue:pointer;
+                                rLowerLimit:Plongint;
+                                rUpperLimit:Plongint):longint;cdecl;external 'clib' name 'ScanSetableParameters';
+function SetCurrentOSLanguageID(newLanguageID:longint):longint;cdecl;external 'clib' name 'SetCurrentOSLanguageID';
+function SetSetableParameterValue (connectionNumber:longint;
+                                   setableParameterString:PBYTE;
+                                   newValue:pointer):longint;cdecl;external 'clib' name 'SetSetableParameterValue';
+procedure SynchronizeStart;cdecl;external 'clib' name 'SynchronizeStart';
+function UnimportSymbol (NLMHandle:longint;
+                         symbolName:Pchar):longint;cdecl;external 'clib' name 'UnimportSymbol';
+function UnRegisterConsoleCommand (commandParserToDelete:PcommandParserStructure):longint;cdecl;external 'clib' name 'UnRegisterConsoleCommand';
+function UnregisterForEvent (eventHandle:longint):longint;cdecl;external 'clib' name 'UnregisterForEvent';
+{-nwfileio.h-------------------------------------------------------------------}
+type
+   PcacheBufferStructure = ^TcacheBufferStructure;
+   TcacheBufferStructure = record
+        cacheBufferPointer : Pchar;
+        cacheBufferLength  : longint;
+        completionCode     : longint;
+     end;
+   TT_cacheBufferStructure = TcacheBufferStructure;
+   PT_cacheBufferStructure = ^TT_cacheBufferStructure;
+
+   PmwriteBufferStructure = ^TmwriteBufferStructure;
+   TmwriteBufferStructure = record
+        mwriteBufferPointer : Pchar;
+        mwriteBufferLength  : longint;
+        reserved            : longint;
+     end;
+   TT_mwriteBufferStructure = TmwriteBufferStructure;
+   PT_mwriteBufferStructure = ^TT_mwriteBufferStructure;
+
+{ NetWare additions to POSIX...  }
+
+function filelength(fildes:longint):longint;cdecl;external 'clib' name 'filelength';
+function gwrite(fildes:longint; bufferP:PT_mwriteBufferStructure; numberBufs:longint; numberBufsWritten:plongint):longint;cdecl;external 'clib' name 'gwrite';
+function gwrite(fildes:longint; var buffer:TT_mwriteBufferStructure; numberBufs:longint; var numberBufsWritten:longint):longint;cdecl;external 'clib' name 'gwrite';
+function lock(fildes,offset,nbytes:longint):longint;cdecl;external 'clib' name 'lock';
+function qread(fildes:longint; buffer:pointer; len,position:longint):longint;cdecl;external 'clib' name 'qread';
+function qread(fildes:longint; var buffer; len,position:longint):longint;cdecl;external 'clib' name 'qread';
+function qwrite(fildes:longint; buffer:pointer; len,position:longint):longint;cdecl;external 'clib' name 'qwrite';
+function qwrite(fildes:longint; var buffer; len,position:longint):longint;cdecl;external 'clib' name 'qwrite';
+function setmode(fildes,mode:longint):longint;cdecl;external 'clib' name 'setmode';
+// sopen already in fcntl
+//function sopen(path:Pchar; oflag,shflag:longint; args:array of const):longint;cdecl;external 'clib' name 'sopen';
+//function sopen(path:Pchar; oflag,shflag:longint):longint;cdecl;external 'clib' name 'sopen';
+function tell(fildes:longint):longint;cdecl;external 'clib' name 'tell';
+function unlock(fildes,offset,nbytes:longint):longint;cdecl;external 'clib' name 'unlock';
+{ other NetWare file I/O utilities...  }
+function AsyncRead(handle:longint;
+                   startingOffset:longint;
+                   numberBytesToRead:longint;
+                   numberBytesRead:plongint;
+                   localSemaHandle:longint;
+                   cacheBufferInfo:PT_cacheBufferStructure;
+                   numOfCacheBufs:plongint):longint;cdecl;external 'clib' name 'AsyncRead';
+function AsyncRead(handle:longint;
+                   startingOffset:longint;
+                   numberBytesToRead:longint;
+                   var numberBytesRead:longint;
+                   localSemaHandle:longint;
+                   var cacheBufferInfo:TT_cacheBufferStructure;
+                   var numOfCacheBufs:longint):longint;cdecl;external 'clib' name 'AsyncRead';
+
+procedure AsyncRelease(cacheBufferInfo:PT_cacheBufferStructure);cdecl;external 'clib' name 'AsyncRelease';
+procedure AsyncRelease(var cacheBufferInfo:TT_cacheBufferStructure);cdecl;external 'clib' name 'AsyncRelease';
+function CountComponents(pathString:PChar; len:longint):longint;cdecl;external 'clib' name 'CountComponents';
+function GetExtendedFileAttributes(pathName:Pchar; extFileAttrs:PBYTE):longint;cdecl;external 'clib' name 'GetExtendedFileAttributes';
+function GetExtendedFileAttributes(pathName:Pchar; var extFileAttrs):longint;cdecl;external 'clib' name 'GetExtendedFileAttributes';
+procedure _makepath(path,drive,dir,fname,ext:Pchar);cdecl;external 'clib' name '_makepath';
+function NWGetVolumeFlags(volume:longint; flags:plongint):longint;cdecl;external 'clib' name 'NWGetVolumeFlags';
+function NWGetVolumeFlags(volume:longint; var flags:longint):longint;cdecl;external 'clib' name 'NWGetVolumeFlags';
+function NWSetVolumeFlags(volume,flags:longint):longint;cdecl;external 'clib' name 'NWSetVolumeFlags';
+function ParsePath(path,server,volume,directories:Pchar):longint;cdecl;external 'clib' name 'ParsePath';
+// SetReaddirAttribute already defined in dirent
+//function SetReaddirAttribute(dirP:PDIR; newAttribute:dword):longint;cdecl;external 'clib' name 'SetReaddirAttribute';
+procedure _splitpath(path,drive,dir,fname,ext:Pchar);cdecl;external 'clib' name '_splitpath';
+procedure UseAccurateCaseForPaths(yesno:longint);cdecl;external 'clib' name 'UseAccurateCaseForPaths';
+procedure UnAugmentAsterisk(yesno:longint);cdecl;external 'clib' name 'UnAugmentAsterisk';
+{-nwfileeng.h------------------------------------------------------------------}
+{ values for flags parameter in FEGetOpenFileInfo()...  }
+const
+   _NotReadableBit                     = $00000001;
+   _NotWriteableBit                    = $00000002;
+   _WrittenBit                         = $00000004;
+   _DetachedBit                        = $00000008;
+   _SwitchingToDirectFileSystemModeBit = $00000010;
+   _DirectFileSystemModeBit            = $00000020;
+   _FileWriteThroughBit                = $00000040;
+{ extra flags  }
+   _DiskBlockReturnedBit               = $00010000;
+   _IAmOnTheOpenFileListBit            = $00020000;
+   _FileReadAuditBit                   = $00040000;
+   _FileWriteAuditBit                  = $00080000;
+   _FileCloseAuditBit                  = $00100000;
+   _DontFileWriteSystemAlertBit        = $00200000;
+   _ReadAheadHintBit                   = $00400000;
+   _NotifyCompressionOnCloseBit        = $00800000;
+{ extra extra flags  }
+   _IsWritingCompressedBit             = $01000000;
+   _HasTimeDateBit                     = $02000000;
+   _DoingDeCompressionBit              = $04000000;
+   _NoSubAllocBit                      = $08000000;
+   _IsATransactionFileBit              = $10000000;
+   _HasFileWritePrivilegeBit           = $20000000;
+   _TTSReadAuditBit                    = $40000000;
+   _TTSWriteAuditBit                   = $80000000;
+
+type
+  TT_PathParseFunc = function (inputPath:Pchar;
+                           var connectionIDp:word;
+                           var volumeNumber:longint;
+                           var directoryNumber:longint;
+                               outPathStringP:PChar;
+                           var outPathCount:longint):longint;cdecl;
+
+function FEConvertDirectoryNumber(sourceNameSpace:longint;
+                                  volumeNumber:longint;
+                                  sourceDirectoryNumber:longint;
+                                  destinationNameSpace:longint;
+                                  destinationDirectoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEConvertDirectoryNumber';
+function FEConvertDirectoryNumber(sourceNameSpace:longint;
+                                  volumeNumber:longint;
+                                  sourceDirectoryNumber:longint;
+                                  destinationNameSpace:longint;
+                              var destinationDirectoryNumber:longint):longint;cdecl;external 'clib' name 'FEConvertDirectoryNumber';
+function FEcreat(name:Pchar; permission,flagBits:longint):longint;cdecl;external 'clib' name 'FEcreat';
+function FEFlushWrite(handle:longint):longint;cdecl;external 'clib' name 'FEFlushWrite';
+function FEGetCWDnum:longint;cdecl;external 'clib' name 'FEGetCWDnum';
+function FEGetCWVnum:longint;cdecl;external 'clib' name 'FEGetCWVnum';
+function FEGetDirectoryEntry(volumeNumber,directoryNumber:longint; pathString:PChar;
+                             pathCount,desiredNameSpace:longint;
+                             namespaceDirectoryStructPp:Ppointer;
+                             DOSdirectoryStructPp:Ppointer):longint;cdecl;external 'clib' name 'FEGetDirectoryEntry';
+function FEGetDirectoryEntry(volumeNumber,directoryNumber:longint; pathString:PChar;
+                             pathCount,desiredNameSpace:longint;
+                             var namespaceDirectoryStructP:Pointer;
+                             var DOSdirectoryStructP:Pointer):longint;cdecl;external 'clib' name 'FEGetDirectoryEntry';
+function FEGetEntryVersion(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:longint; version:PWORD):longint;cdecl;external 'clib' name 'FEGetEntryVersion';
+function FEGetEntryVersion(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:longint; var version:word):longint;cdecl;external 'clib' name 'FEGetEntryVersion';
+function FEGetOpenFileInfo (connection:longint;
+                            handle:longint;
+                            volume:Plongint;
+                            directoryNumber:Plongint;
+                            dataStream:Plongint;
+                            flags:Plongint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfo';
+function FEGetOpenFileInfo (connection:longint;
+                            handle:longint;
+                        var volume,directoryNumber,dataStream,flags:longint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfo';
+function FEGetOpenFileInfoForNS (connection, handle:longint;
+                                 volume,DOSdirectoryNumber,directoryNumber:Plongint;
+                                 nameSpace,dataStream,flags:Plongint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfoForNS';
+function FEGetOpenFileInfoForNS (connection, handle:longint;
+                                 var volume,DOSdirectoryNumber,directoryNumber:longint;
+                                 var nameSpace,dataStream,flags:longint):longint;cdecl;external 'clib' name 'FEGetOpenFileInfoForNS';
+function FEGetOriginatingNameSpace(volumeNumber,directoryNumber:longint):longint;cdecl;external 'clib' name 'FEGetOriginatingNameSpace';
+function FEMapConnsHandleToVolAndDir(connection,handle:longint; volumeNumberP,directoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEMapConnsHandleToVolAndDir';
+function FEMapConnsHandleToVolAndDir(connection,handle:longint; var volumeNumber,directoryNumber:longint):longint;cdecl;external 'clib' name 'FEMapConnsHandleToVolAndDir';
+function FEMapHandleToVolumeAndDirectory(handle:longint; volumeNumberP,directoryNumberP:PLongint):longint;cdecl;external 'clib' name 'FEMapHandleToVolumeAndDirectory';
+function FEMapHandleToVolumeAndDirectory(handle:longint; var volumeNumberP,directoryNumberP:Longint):longint;cdecl;external 'clib' name 'FEMapHandleToVolumeAndDirectory';
+function FEMapPathVolumeDirToVolumeDir(pathName:Pchar; volumeNumber,directoryNumber:longint; newVolumeNumberP,newDirectoryNumberP:Plongint):longint;cdecl;external 'clib' name 'FEMapPathVolumeDirToVolumeDir';
+function FEMapPathVolumeDirToVolumeDir(pathName:Pchar; volumeNumber,directoryNumber:longint; var newVolumeNumberP,newDirectoryNumberP:longint):longint;cdecl;external 'clib' name 'FEMapPathVolumeDirToVolumeDir';
+
+function FEMapVolumeAndDirectoryToPath(volumeNumber,directoryNumber:longint; pathString:PChar; pathCount:Plongint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPath';
+function FEMapVolumeAndDirectoryToPath(volumeNumber,directoryNumber:longint; pathString:PChar; var pathCount:longint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPath';
+
+function FEMapVolumeAndDirectoryToPathForNS(volumeNumber,directoryNumber:longint; nameSpace:longint; pathString:PBYTE; pathCount:Plongint):longint;cdecl;external 'clib' name 'FEMapVolumeAndDirectoryToPathForNS';
+function FEMapVolumeNumberToName(volumeNumber:longint; volumeName:PChar):longint;cdecl;external 'clib' name 'FEMapVolumeNumberToName';
+function FEQuickClose(connection,task,fileHandle:longint):longint;cdecl;external 'clib' name 'FEQuickClose';
+function FEQuickFileLength(connection,handle:longint; fileSize:Plongint):longint;cdecl;external 'clib' name 'FEQuickFileLength';
+function FEQuickFileLength(connection,handle:longint; var fileSize:longint):longint;cdecl;external 'clib' name 'FEQuickFileLength';
+function FEQuickOpen (connection,task,volumeNumber,directoryNumber:longint;
+                      pathString:PChar;
+                      pathCount,nameSpace,attributeMatchBits,requestedAccessRights,dataStreamNumber:longint;
+                      fileHandle:Plongint):longint;cdecl;external 'clib' name 'FEQuickOpen';
+function FEQuickOpen (connection,task,volumeNumber,directoryNumber:longint;
+                      pathString:PChar;
+                      pathCount,nameSpace,attributeMatchBits,requestedAccessRights,dataStreamNumber:longint;
+                      var fileHandle:longint):longint;cdecl;external 'clib' name 'FEQuickOpen';
+
+function FEQuickRead (connection,handle,postition,bytesToRead:longint;
+                      bytesRead:Plongint;
+                      buffer:pointer):longint;cdecl;external 'clib' name 'FEQuickRead';
+function FEQuickRead (connection,handle,postition,bytesToRead:longint;
+                      var bytesRead:longint;
+                      var buffer):longint;cdecl;external 'clib' name 'FEQuickRead';
+
+function FEQuickWrite(connection,handle,position,bytesToWrite:longint; buffer:pointer):longint;cdecl;external 'clib' name 'FEQuickWrite';
+function FEQuickWrite(connection,handle,position,bytesToWrite:longint; var buffer):longint;cdecl;external 'clib' name 'FEQuickWrite';
+
+function FERegisterNSPathParser(normalFunc:TT_PathParseFunc):longint;cdecl;external 'clib' name 'FERegisterNSPathParser';
+function FESetCWDnum(CWDnum:longint):longint;cdecl;external 'clib' name 'FESetCWDnum';
+function FESetCWVandCWDnums(CWVnum:longint; CWDnum:longint):longint;cdecl;external 'clib' name 'FESetCWVandCWDnums';
+function FESetCWVnum(CWVnum:longint):longint;cdecl;external 'clib' name 'FESetCWVnum';
+function FESetOriginatingNameSpace(volumeNumber,directoryNumber,currentNameSpace,newNameSpace:longint):longint;cdecl;external 'clib' name 'FESetOriginatingNameSpace';
+function FEsopen(name:Pchar; access,share,permission,flagBits:longint;
+           dataStream:byte):longint;cdecl;external 'clib' name 'FEsopen';
+function NWGetDirBaseFromPath(path:Pchar; nameSpace:byte; volNum,NSDirBase,DOSDirBase:Plongint):longint;cdecl;external 'clib' name 'NWGetDirBaseFromPath';
+function NWGetDirBaseFromPath(path:Pchar; nameSpace:byte; var volNum,NSDirBase,DOSDirBase:longint):longint;cdecl;external 'clib' name 'NWGetDirBaseFromPath';
+{-nwfinfo.h--------------------------------------------------------------------}
+function FileServerFileCopy (sourceFileHandle,destinationFileHandle:longint;
+                             sourceFileOffset,destinationFileOffset,numberOfBytesToCopy:longint;
+                             numberOfBytesCopied:Plongint):longint;cdecl;external 'clib' name 'FileServerFileCopy';
+function FileServerFileCopy (sourceFileHandle,destinationFileHandle:longint;
+                             sourceFileOffset,destinationFileOffset,numberOfBytesToCopy:longint;
+                             var numberOfBytesCopied:longint):longint;cdecl;external 'clib' name 'FileServerFileCopy';
+
+function NWGetCompressedFileLengths (handle:longint;
+                                     uncompressedLength,
+                                     compressedLength:Plongint):longint;cdecl;external 'clib' name 'NWGetCompressedFileLengths';
+function NWGetCompressedFileLengths (handle:longint;
+                                     var uncompressedLength,
+                                         compressedLength:longint):longint;cdecl;external 'clib' name 'NWGetCompressedFileLengths';
+
+function NWGetDiskIOsPending:longint;cdecl;external 'clib' name 'NWGetDiskIOsPending';
+function NWSetCompressedFileLengths (handle,
+                                     uncompressedLength,
+                                     compressedLengt:longint):longint;cdecl;external 'clib' name 'NWSetCompressedFileLengths';
+
+function PurgeErasedFile(pathName:Pchar; sequenceNumber:longint):longint;cdecl;external 'clib' name 'PurgeErasedFile';
+function SalvageErasedFile(pathName:Pchar; sequenceNumber:longint; newFileName:Pchar):longint;cdecl;external 'clib' name 'SalvageErasedFile';
+
+function ScanErasedFiles_411 (path           : PChar;
+                              nextEntryNumber: Plongint;
+                              deletedFileInfo: PDIR):longint; cdecl;external 'clib' name 'ScanErasedFiles_411';
+function ScanErasedFiles_411 (path               : PChar;
+                              var nextEntryNumber: longint;
+                              var deletedFileInfo: TDIR):longint; cdecl;external 'clib' name 'ScanErasedFiles_411';
+
+function SetExtendedFileAttributes(pathName:Pchar; extendedFileAttributes:byte):longint;cdecl;external 'clib' name 'SetExtendedFileAttributes';
+function SetFileInfo(pathName:Pchar; searchAttributes:byte; fileAttributes:longint; creationDate:Pchar; lastAccessDate:Pchar;
+               lastUpdateDateAndTime:Pchar; lastArchiveDateAndTime:Pchar; fileOwnerID:longint):longint;cdecl;external 'clib' name 'SetFileInfo';
+{-nwfshook.h-------------------------------------------------------------------}
+{ ------------  File System Monitor Hook Call Back Numbers ------------
+   The defined constants below that have _GEN_ in the name represent call back
+   numbers that will hook Generic versions of the respective OS routines.
+   Namely, routines that support Name Spaces other than DOS.
+   --------------------------------------------------------------------- }
+
+const
+   FSHOOK_PRE_ERASEFILE            = 0;
+   FSHOOK_PRE_OPENFILE             = 1;
+   FSHOOK_PRE_CREATEFILE           = 2;
+   FSHOOK_PRE_CREATE_OPENFILE      = 3;
+   FSHOOK_PRE_RENAME_OR_MOVE       = 4;
+   FSHOOK_PRE_CLOSEFILE            = 5;
+   FSHOOK_PRE_CREATEDIR            = 6;
+   FSHOOK_PRE_DELETEDIR            = 7;
+   FSHOOK_PRE_MODIFY_DIRENTRY      = 8;
+   FSHOOK_PRE_SALVAGE_DELETED      = 9;
+   FSHOOK_PRE_PURGE_DELETED        = 10;
+   FSHOOK_PRE_RENAME_NS_ENTRY      = 11;
+   FSHOOK_PRE_GEN_SALVAGE_DELETED  = 12;
+   FSHOOK_PRE_GEN_PURGE_DELETED    = 13;
+   FSHOOK_PRE_GEN_OPEN_CREATE      = 14;
+   FSHOOK_PRE_GEN_RENAME           = 15;
+   FSHOOK_PRE_GEN_ERASEFILE        = 16;
+   FSHOOK_PRE_GEN_MODIFY_DOS_INFO  = 17;
+   FSHOOK_PRE_GEN_MODIFY_NS_INFO   = 18;
+   FSHOOK_POST_ERASEFILE           = $80000000;
+   FSHOOK_POST_OPENFILE            = $80000001;
+   FSHOOK_POST_CREATEFILE          = $80000002;
+   FSHOOK_POST_CREATE_OPENFILE     = $80000003;
+   FSHOOK_POST_RENAME_OR_MOVE      = $80000004;
+   FSHOOK_POST_CLOSEFILE           = $80000005;
+   FSHOOK_POST_CREATEDIR           = $80000006;
+   FSHOOK_POST_DELETEDIR           = $80000007;
+   FSHOOK_POST_MODIFY_DIRENTRY     = $80000008;
+   FSHOOK_POST_SALVAGE_DELETED     = $80000009;
+   FSHOOK_POST_PURGE_DELETED       = $8000000A;
+   FSHOOK_POST_RENAME_NS_ENTRY     = $8000000B;
+   FSHOOK_POST_GEN_SALVAGE_DELETED = $8000000C;
+   FSHOOK_POST_GEN_PURGE_DELETED   = $8000000D;
+   FSHOOK_POST_GEN_OPEN_CREATE     = $8000000E;
+   FSHOOK_POST_GEN_RENAME          = $8000000F;
+   FSHOOK_POST_GEN_ERASEFILE       = $80000010;
+   FSHOOK_POST_GEN_MODIFY_DOS_INFO = $80000011;
+   FSHOOK_POST_GEN_MODIFY_NS_INFO  = $80000012;
+
+    {--------------------------------------------------------------------
+      Structure returned for
+      FSHOOK_PRE_ERASEFILE and FSHOOK_POST_ERASEFILE
+     -------------------------------------------------------------------- }
+type
+
+   PEraseFileCallBackStruct = ^TEraseFileCallBackStruct;
+   TEraseFileCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase : Longint;
+     pathString : Pchar;
+     pathComponentCount,
+     nameSpace,
+     attributeMatchBits : Longint;
+   end;
+{--------------------------------------------------------------------
+      Structure returned for
+      FSHOOK_PRE_OPENFILE and FSHOOK_POST_OPENFILE
+     -------------------------------------------------------------------- }
+
+   POpenFileCallBackStruct = ^TOpenFileCallBackStruct;
+   TOpenFileCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase : Longint;
+     pathString : Pchar;
+     pathComponentCount,
+     nameSpace,
+     attributeMatchBits,
+     requestedAccessRights,
+     dataStreamNumber : Longint;
+     fileHandle : PLongint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_CREATEFILE and FSHOOK_POST_CREATEFILE
+ -------------------------------------------------------------------- }
+
+   PCreateFileCallBackStruct = ^TCreateFileCallBackStruct;
+   TCreateFileCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase : Longint;
+     pathString : Pchar;
+     pathComponentCount,
+     nameSpace,
+     createAttributeBits,
+     createFlagBits,
+     dataStreamNumber : Longint;
+     fileHandle : PLongint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_CREATE_OPENFILE and FSHOOK_POST_CREATE_OPENFILE
+ -------------------------------------------------------------------- }
+
+   PCreateAndOpenCallBackStruct = ^TCreateAndOpenCallBackStruct;
+   TCreateAndOpenCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase : Longint;
+     pathString : Pchar;
+     pathComponentCount,
+     nameSpace,
+     createAttributeBits,
+     requestedAccessRights,
+     createFlagBits,
+     dataStreamNumber : Longint;
+     fileHandle       : PLongint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_RENAME_OR_MOVE and FSHOOK_POST_RENAME_OR_MOVE
+ -------------------------------------------------------------------- }
+
+   PRenameMoveEntryCallBackStruct = ^TRenameMoveEntryCallBackStruct;
+   TRenameMoveEntryCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase                 : Longint;
+     pathString              : Pchar;
+     pathComponentCount,
+     nameSpace,
+     attributeMatchBits,
+     subDirsOnlyFlag,
+     newDirBase              : Longint;
+     newPathString           : Pchar;
+     originalNewCount,
+     compatibilityFlag,
+     allowRenamesToMyselfFlag: Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_CLOSEFILE and FSHOOK_POST_CLOSEFILE
+ -------------------------------------------------------------------- }
+
+   PCloseFileCallBackStruct = ^TCloseFileCallBackStruct;
+   TCloseFileCallBackStruct = record
+     connection,
+     task,
+     fileHandle : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_CREATEDIR and FSHOOK_POST_CREATEDIR
+-------------------------------------------------------------------- }
+
+   PCreateDirCallBackStruct = ^TCreateDirCallBackStruct;
+   TCreateDirCallBackStruct = record
+     connection,
+     volume,
+     dirBase    : Longint;
+     pathString : Pchar;
+     pathComponentCount,
+     nameSpace,
+     directoryAccessMask : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_DELETEDIR and FSHOOK_POST_DELETEDIR
+ -------------------------------------------------------------------- }
+
+   PDeleteDirCallBackStruct = ^TDeleteDirCallBackStruct;
+   TDeleteDirCallBackStruct = record
+     connection,
+     volume,
+     dirBase : Longint;
+     pathString : PChar;
+     pathComponentCount,
+     nameSpace : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_MODIFYDIRENTRY and FSHOOK_POST_MODIFYDIRENTRY
+ -------------------------------------------------------------------- }
+
+   PModifyDirEntryCallBackStruct = ^TModifyDirEntryCallBackStruct;
+   TModifyDirEntryCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase            : Longint;
+     pathString         : PChar;
+     pathComponentCount,
+     nameSpace,
+     attributeMatchBits,
+     targetNameSpace    : Longint;
+     modifyVector       : PModifyStructure;
+     modifyBits,
+     allowWildCardsFlag : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_SALVAGE_DELETED and FSHOOK_POST_SALVAGE_DELETED
+ -------------------------------------------------------------------- }
+
+   PSalvageDeletedCallBackStruct = ^TSalvageDeletedCallBackStruct;
+   TSalvageDeletedCallBackStruct = record
+     connection,
+     volume,
+     dirBase,
+     toBeSalvagedDirBase,
+     nameSpace            : Longint;
+     newName              : PChar;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_PURGE_DELETED and FSHOOK_POST_PURGE_DELETED
+ -------------------------------------------------------------------- }
+
+   PPurgeDeletedCallBackStruct = ^TPurgeDeletedCallBackStruct;
+   TPurgeDeletedCallBackStruct = record
+     connection,
+     volume,
+     dirBase,
+     toBePurgedDirBase,
+     nameSpace          : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_RENAME_NS_ENTRY and FSHOOK_POST_RENAME_NS_ENTRY
+ -------------------------------------------------------------------- }
+
+   PRenameNSEntryCallBackStruct = ^TRenameNSEntryCallBackStruct;
+   TRenameNSEntryCallBackStruct = record
+     connection,
+     task,
+     volume,
+     dirBase       : Longint;
+     pathString    : PChar;
+     pathComponentCount,
+     nameSpace,
+     matchBits     : Longint;
+     newName       : PChar;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_GEN_SALVAGE_DELETED and FSHOOK_POST_GEN_SALVAGE_DELETED
+ -------------------------------------------------------------------- }
+
+   PGenericSalvageDeletedCBStruct = ^TGenericSalvageDeletedCBStruct;
+   TGenericSalvageDeletedCBStruct = record
+     connection,
+     nameSpace,
+     sequence,
+     volume,
+     dirBase : Longint;
+     newName : PChar;
+  end;
+{--------------------------------------------------------------------
+      Structure returned for
+      FSHOOK_PRE_GEN_PURGE_DELETED and FSHOOK_POST_GEN_PURGE_DELETED
+     -------------------------------------------------------------------- }
+
+   PGenericPurgeDeletedCBStruct = ^TGenericPurgeDeletedCBStruct;
+   TGenericPurgeDeletedCBStruct = record
+     connection,
+     nameSpace,
+     sequence,
+     volume,
+     dirBase  : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_GEN_OPEN_CREATE and FSHOOK_POST_GEN_OPEN_CREATE
+ -------------------------------------------------------------------- }
+
+   PGenericOpenCreateCBStruct = ^TGenericOpenCreateCBStruct;
+   TGenericOpenCreateCBStruct = record
+     connection,
+     task,
+     volume,
+     pathComponentCount,
+     dirBase               : Longint;
+     pathString            : Pchar;
+     nameSpace,
+     dataStreamNumber,
+     openCreateFlags,
+     searchAttributes,
+     createAttributes,
+     requestedAccessRights,
+     returnInfoMask        : Longint;
+     fileHandle            : PLongint;
+     openCreateAction      : Pointer;
+   end;
+{--------------------------------------------------------------------
+ Structure returned for
+ FSHOOK_PRE_GEN_RENAME and FSHOOK_POST_GEN_RENAME
+ -------------------------------------------------------------------- }
+
+   PGenericRenameCBStruct = ^TGenericRenameCBStruct;
+   TGenericRenameCBStruct = record
+     connection,
+     task,
+     nameSpace,
+     renameFlag,
+     searchAttributes,
+     srcVolume,
+     srcPathComponentCount,
+     srcDirBase            : Longint;
+     srcPathString         : Pchar;
+     dstVolume,
+     dstPathComponentCount,
+     dstDirBase            : Longint;
+     dstPathString         : Pchar;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_GEN_ERASEFILE and FSHOOK_POST_GEN_ERASEFILE
+ -------------------------------------------------------------------- }
+
+   PGenericEraseFileCBStruct = ^TGenericEraseFileCBStruct;
+   TGenericEraseFileCBStruct = record
+     connection,
+     task,
+     volume,
+     pathComponentCount,
+     dirBase          : Longint;
+     pathString       : Pchar;
+     nameSpace,
+     searchAttributes : Longint;
+   end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_GEN_MODIFY_DOS_INFO and FSHOOK_POST_GEN_MODIFY_DOS_INFO
+ -------------------------------------------------------------------- }
+
+   PGenericModifyDOSInfoCBStruct = ^TGenericModifyDOSInfoCBStruct;
+   TGenericModifyDOSInfoCBStruct = record
+        connection,
+        task,
+        volume,
+        pathComponentCount,
+        dirBase              : Longint;
+        pathString           : Pchar;
+        nameSpace            : Longint;
+        searchAttributes     : Longint;
+        modifyMask           : Longint;
+        modifyInfo           : pointer;
+     end;
+{--------------------------------------------------------------------
+  Structure returned for
+  FSHOOK_PRE_GEN_MODIFY_NS_INFO and FSHOOK_POST_GEN_MODIFY_NS_INFO
+-------------------------------------------------------------------- }
+
+   PGenericModifyNSInfoCBStruct = ^TGenericModifyNSInfoCBStruct;
+   TGenericModifyNSInfoCBStruct = record
+     connection,
+     task,
+     dataLength,
+     srcNameSpace,
+     dstNameSpace,
+     volume,
+     dirBase,
+     modifyMask   : Longint;
+     modifyInfo   : pointer;
+   end;
+
+function NWAddFSMonitorHook (callBackNumber:Longint;
+                             callBackFunc:pointer;
+                             callBackHandle:PLongint):Longint;cdecl;external 'clib' name 'NWAddFSMonitorHook';
+function NWAddFSMonitorHook (callBackNumber:Longint;
+                             callBackFunc:pointer;
+                         var callBackHandle:Longint):Longint;cdecl;external 'clib' name 'NWAddFSMonitorHook';
+function NWRemoveFSMonitorHook (callBackNumber,callBackHandle:Longint):Longint;cdecl;external 'clib' name 'NWRemoveFSMonitorHook';
+{-nwipx.h----------------------------------------------------------------------}
+{$include npackon.inc}
+{ ECB status field completion codes  }
+
+const
+   STS_SPX_CONNECTION_TERMINATED = $FFEC;
+   STS_SPX_TERMINATED_POORLY = $FFED;
+   STS_SPX_INVALID_CONNECTION = $FFEE;
+   STS_SPX_CONNECTION_TABLE_FULL = $FFEF;
+   STS_SPX_SOCKET_NOT_OPEN = $FFF0;
+   STS_SPX_SOCKET_ALREADY_OPEN = $FFF1;
+   STS_SPX_ECB_CANNOT_BE_CANCELLED = $FFF9;
+   STS_SPX_NO_KNOWN_ROUTE_TO_DESTINATION = $FFFA;
+   STS_SPX_EVENT_CANCELLED = $FFFC;
+   STS_SPX_PACKET_OVERFLOW = $FFFD;
+   STS_SPX_MALFORMED_PACKET = $FFFE;
+   STS_SPX_TRANSMIT_FAILURE = $FFFF;
+
+   SPX_SSTATUS_ABORTED = $00;
+   SPX_SSTATUS_WAITING = $01;
+   SPX_SSTATUS_STARTING = $02;
+   SPX_SSTATUS_ESTABLISHED = $03;
+   SPX_SSTATUS_TERMINATING = $04;
+
+
 {
 {
-    var
-       threadCustomDataPtr : pointer;cvar;external;
-       threadCustomDataSize : longint;cvar;external;
-       threadGroupCustomDataPtr : pointer;cvar;external;
+   This define is for the Queued IPX/SPX Calls. The return code passed in will
+   be set to this value until the packet is actually sent to IPX/SPX.
+ }
+   PACKET_IN_QUEUE = $0001;
+{---------------------------------------------------------------------------
+
+     IPX_ECB status field busy (in-process) codes:
+
+     0x11 - AES (asynchronous event service) waiting
+     0x12 - Holding
+     0x13 - Session listen
+     0x14 - Processing
+     0x15 - Receiving
+     0x16 - Sending
+     0x17 - Waiting
+
+  -------------------------------------------------------------------------- }
+{---------------------------------------------------------------------------
+     The comment characters in the IPX_ECB structure have the
+     following meanings
+     s - this field must be filled in prior to a send
+     r - this field must be filled in prior to a receive
+     R - this field is reserved
+     A - this field may be used when the ECB is not in use by IPX/SPX
+     q - the application may read this field
+  -------------------------------------------------------------------------- }
+{ Packet type codes  }
+   UNKNOWN_PACKET_TYPE = 0;
+   ROUTING_INFORMATION_PACKET = 1;
+   ECHO_PACKET = 2;
+   ERROR_PACKET = 3;
+   PACKET_EXCHANGE_PACKET = 4;
+   SEQUENCED_PACKET_PROTOCOL_PACKET = 5;
+
+   SPX_END_OF_MESSAGE = $10;
+   ENABLE_WATCHDOG    = $ff;
+
+{ various SAP definitions  }
+
+   SAP_SOCKET = $0452;
+   GENERAL_SERVICE_QUERY = 1;
+   GENERAL_SERVICE_RESPONSE = 2;
+   NEAREST_SERVICE_QUERY = 3;
+   NEAREST_SERVICE_RESPONSE = 4;
+   PERIODIC_ID_PACKET = 2;
+   NOT_SUPPORTED = 1;
+   INVALID_QUERY_TYPE = 2;
+   SAP_RESPONSES_PER_PACKET = 8;
+{ 'ELRS'  }
+   QUERY_LIST_SIGNATURE = $454C5253;
+{ type definitions  }
+type
+   TMisalignedLONG = longint;
+   TMisalignedWORD = word;
+
+   PtagECBFrag = ^TtagECBFrag;
+   TtagECBFrag = record
+        fragAddress : pointer;
+        fragSize    : longint;
+     end;
+   TECBFrag = TtagECBFrag;
+   PECBFrag = ^TECBFrag;
+
+   PIPX_ECBStruct = ^TIPX_ECBStruct;
+   TIPX_ECBStruct = record
+        semHandleSave : longint;
+        queueHead : ^PIPX_ECBStruct;
+        next : PIPX_ECBStruct;
+        prev : PIPX_ECBStruct;
+        status : word;
+        semHandle : longint;
+        lProtID : word;
+        protID : array[0..5] of byte;
+        boardNumber : longint;
+        immediateAddress : array[0..5] of byte;
+        driverWS : array[0..3] of byte;
+        ESREBXValue : longint;
+        socket : word;
+        protocolWorkspace : word;
+        dataLen : longint;
+        fragCount : longint;
+        fragList : array[0..1] of TECBFrag;
+     end;
+   TIPX_ECB  = TIPX_ECBStruct;
+   PIPX_ECB  = ^TIPX_ECB;
+   PPIPX_ECB = ^PIPX_ECB;
+
+   TSPX_ECB  = TIPX_ECBStruct;
+   PSPX_ECB  = PIPX_ECBStruct;
+
+
+   PtagInternetAddress = ^TtagInternetAddress;
+   TtagInternetAddress = record
+        network : TMisalignedLONG;
+        node    : array[0..5] of byte;
+        socket  : TMisalignedWORD;
+     end;
+   TInternetAddress = TtagInternetAddress;
+   PInternetAddress = ^TInternetAddress;
+
+   PtagIPX_HEADER = ^TtagIPX_HEADER;
+   TtagIPX_HEADER = record
+        checksum    : word;
+        packetLen   : word;
+        transportCtl: byte;
+        packetType  : byte;
+        destNet     : TMisalignedLONG;
+        destNode    : array[0..5] of byte;
+        destSocket  : word;
+        sourceNet   : TMisalignedLONG;
+        sourceNode  : array[0..5] of byte;
+        sourceSocket: word;
+     end;
+   TIPX_HEADER = TtagIPX_HEADER;
+   PIPX_HEADER = ^TIPX_HEADER;
+{ included only for compatibility  }
+
+   PtagIPX_STATS = ^TtagIPX_STATS;
+   TtagIPX_STATS = record
+        dummy : char;
+     end;
+   TIPX_STATS = TtagIPX_STATS;
+   PIPX_STATS = ^TIPX_STATS;
+
+   PtagSPX_HEADER = ^TtagSPX_HEADER;
+   TtagSPX_HEADER = record
+        checksum : word;
+        packetLen : word;
+        transportCtl : byte;
+        packetType : byte;
+        destNet : TMisalignedLONG;
+        destNode : array[0..5] of byte;
+        destSocket : word;
+        sourceNet : TMisalignedLONG;
+        sourceNode : array[0..5] of byte;
+        sourceSocket : word;
+        connectionCtl : byte;
+        dataStreamType : byte;
+        sourceConnectID : word;
+        destConnectID : word;
+        sequenceNumber : word;
+        ackNumber : word;
+        allocNumber : word;
+     end;
+   TSPX_HEADER = TtagSPX_HEADER;
+   PSPX_HEADER = ^TSPX_HEADER;
+
+   PSPX_ConnStruct = ^TSPX_ConnStruct;
+   TSPX_ConnStruct = record
+        sStatus : byte;
+        sFlags : byte;
+        sSourceConnectID : word;
+        sDestConnectID : word;
+        sSequenceNumber : word;
+        sAckNumber : word;
+        sAllocNumber : word;
+        sRemoteAckNumber : word;
+        sRemoteAllocNumber : word;
+        sLocalSocket : word;
+        sImmediateAddress : array[0..5] of byte;
+        sRemoteNet : longint;
+        sRemoteNode : array[0..5] of byte;
+        sRemoteSocket : word;
+        sRetransmitCount : byte;
+        sRetransmitMax : byte;
+        sRoundTripTimer : word;
+        sRetransmittedPackets : word;
+        sSuppressedPackets : word;
+        sLastReceiveTime : word;
+        sLastSendTime : word;
+        sRoundTripMax : word;
+        sWatchdogTimeout : word;
+        sSessionXmitQHead : array[0..3] of byte;
+        sSessionXmitECBp : array[0..3] of byte;
+     end;
+   TSPX_SESSION = TSPX_ConnStruct;
+   PSPX_SESSION = ^TSPX_SESSION;
+
+
+type
+
+   PT_SAP_ID_PACKET = ^TT_SAP_ID_PACKET;
+   TT_SAP_ID_PACKET = record
+     SAPPacketType       : word;                    // 2 or 4
+     serverType          : word;                    // assigned by novell
+     serverName          : array[0..47] of byte;    // Service name
+     serverAddress       : TInternetAddress;
+     interveningNetworks : word;                    // # of networks packets must pass
+   end;
+
+   PSERVICE_QUERY_PACKET = ^TSERVICE_QUERY_PACKET;
+   TSERVICE_QUERY_PACKET = record
+     queryType,                                     // 1 or 3
+     serverType : word;                             // assigned by novell
+   end;
+
+   PSAPResponse = ^TSAPResponse;
+   TSAPResponse = record
+        SAPPacketType : word;                       // 2 or 4
+        responses     : array[0..(SAP_RESPONSES_PER_PACKET)-1] of record
+             serverType          : word;
+             serverName          : array[0..47] of byte;
+             serverAddress       : TInternetAddress;
+             interveningNetworks : word;
+          end;
+        next          : PSAPResponse;
+        signature     : longint;
+        count         : longint;
+     end;
+   TSAP_RESPONSE_LIST_ENTRY = TSAPResponse;
+   PSAP_RESPONSE_LIST_ENTRY = ^TSAP_RESPONSE_LIST_ENTRY;
+{$include npackoff.inc}
+
+
+{ IPX function prototypes...  }
+
+function IpxCheckSocket(socket:word):longint;cdecl;external 'clib' name 'IpxCheckSocket';
+function IpxCancelEvent(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxCancelEvent';
+function IpxCloseSocket(socket:word):longint;cdecl;external 'clib' name 'IpxCloseSocket';
+function IpxConnect(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxConnect';
+function IpxDisconnect(ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxDisconnect';
+function IpxGetAndClearQ(replyQptr:PPIPX_ECB):PIPX_ECB;cdecl;external 'clib' name 'IpxGetAndClearQ';
+function IpxGetInternetworkAddress(address:PBYTE):longint;cdecl;external 'clib' name 'IpxGetInternetworkAddress';
+function IpxGetLocalTarget(address:PBYTE; ECBp:PIPX_ECB; timeToNet:Plongint):longint;cdecl;external 'clib' name 'IpxGetLocalTarget';
+function IpxGetStatistics(ipxStats:PIPX_STATS):longint;cdecl;external 'clib' name 'IpxGetStatistics';
+function IpxGetVersion(majorVersion:PBYTE; minorVersion:PBYTE; revision:PWORD):longint;cdecl;external 'clib' name 'IpxGetVersion';
+function IpxGetVersion(var majorVersion,minorVersion:byte; var revision:word):longint;cdecl;external 'clib' name 'IpxGetVersion';
+function IpxOpenSocket(socketP:PWORD):longint;cdecl;external 'clib' name 'IpxOpenSocket';
+function IpxOpenSocket(var socket:word):longint;cdecl;external 'clib' name 'IpxOpenSocket';
+function IpxQueuedSend(socket:word; ECBp:PIPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'IpxQueuedSend';
+function IpxQueuedSend(socket:word; ECBp:PIPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'IpxQueuedSend';
+function IpxQueuedReceive(socket:word; ECBp:PIPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'IpxQueuedReceive';
+function IpxQueuedReceive(socket:word; ECBp:PIPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'IpxQueuedReceive';
+function IpxReceive(socket:word; ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxReceive';
+function IpxResetStatistics:longint;cdecl;external 'clib' name 'IpxResetStatistics';
+function IpxSend(socket:word; ECBp:PIPX_ECB):longint;cdecl;external 'clib' name 'IpxSend';
+{ SPX function prototypes...  }
+function SpxAbortConnection(connection:word):longint;cdecl;external 'clib' name 'SpxAbortConnection';
+function SpxCancelEvent(ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxCancelEvent';
+function SpxCheckSocket(socket:word):longint;cdecl;external 'clib' name 'SpxCheckSocket';
+function SpxCloseSocket(socket:word):longint;cdecl;external 'clib' name 'SpxCloseSocket';
+function SpxEstablishConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; connection:PWORD):longint;cdecl;external 'clib' name 'SpxEstablishConnection';
+function SpxEstablishConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; var connection:word):longint;cdecl;external 'clib' name 'SpxEstablishConnection';
+function SpxGetConfiguration(maxConn,availConn:Plongint):longint;cdecl;external 'clib' name 'SpxGetConfiguration';
+function SpxGetConfiguration(var maxConn,availConn:longint):longint;cdecl;external 'clib' name 'SpxGetConfiguration';
+function SpxGetConnectionStatus(connection:word; buffer:PSPX_SESSION):longint;cdecl;external 'clib' name 'SpxGetConnectionStatus';
+{ (56 bytes)  }
+function SpxGetTime(marker:Plongint):longint;cdecl;external 'clib' name 'SpxGetTime';
+function SpxGetTime(var marker:longint):longint;cdecl;external 'clib' name 'SpxGetTime';
+function SpxGetVersion(major,minor:PBYTE; revision:PWORD; revDate:Plongint):longint;cdecl;external 'clib' name 'SpxGetVersion';
+function SpxGetVersion(var major,minor:byte; var revision:word; var revDate:longint):longint;cdecl;external 'clib' name 'SpxGetVersion';
+function SpxListenForConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; connection:PWORD):longint;cdecl;external 'clib' name 'SpxListenForConnection';
+function SpxListenForConnection(socket:word; ecb:PSPX_ECB; retryCount:byte; watchDogFlag:byte; var connection:word):longint;cdecl;external 'clib' name 'SpxListenForConnection';
+function SpxListenForConnectedPacket(socket:word; ecb:PSPX_ECB; connection:word):longint;cdecl;external 'clib' name 'SpxListenForConnectedPacket';
+function SpxListenForSequencedPacket(socket:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxListenForSequencedPacket';
+function SpxOpenSocket(socket:PWORD):longint;cdecl;external 'clib' name 'SpxOpenSocket';
+function SpxOpenSocket(var socket:word):longint;cdecl;external 'clib' name 'SpxOpenSocket';
+function SpxQueuedListenForSequencedPacket(socket:word; ecb:PSPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'SpxQueuedListenForSequencedPacket';
+function SpxQueuedListenForSequencedPacket(socket:word; ecb:PSPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'SpxQueuedListenForSequencedPacket';
+function SpxQueuedSendSequencedPacket(connection:word; ecb:PSPX_ECB; rcode:Plongint):longint;cdecl;external 'clib' name 'SpxQueuedSendSequencedPacket';
+function SpxQueuedSendSequencedPacket(connection:word; ecb:PSPX_ECB; var rcode:longint):longint;cdecl;external 'clib' name 'SpxQueuedSendSequencedPacket';
+function SpxSendSequencedPacket(connection:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxSendSequencedPacket';
+function SpxTerminateConnection(connection:word; ecb:PSPX_ECB):longint;cdecl;external 'clib' name 'SpxTerminateConnection';
+{ SAP function prototypes...  }
+function AdvertiseService(serviceType:word; serviceName:Pchar; serviceSocket:word):longint;cdecl;external 'clib' name 'AdvertiseService';
+function FreeQueryServicesList(listP:PSAP_RESPONSE_LIST_ENTRY):longint;cdecl;external 'clib' name 'FreeQueryServicesList';
+function QueryServices(queryType,serviceType:word):PSAP_RESPONSE_LIST_ENTRY;cdecl;external 'clib' name 'QueryServices';
+function ShutdownAdvertising(advertisingHandle:longint):longint;cdecl;external 'clib' name 'ShutdownAdvertising';
+{-nwlib.h----------------------------------------------------------------------}
+type
+  TLibraryCleanupFunc = function (dataAreaPtr:pointer):longint; cdecl;
+
+function __get_thread_data_area_ptr:Plongint;cdecl;external 'clib' name '__get_thread_data_area_ptr';
+function GetDataAreaPtr(libraryHandle:longint):pointer;cdecl;external 'clib' name 'GetDataAreaPtr';
+function DeregisterLibrary(libraryHandle:longint):longint;cdecl;external 'clib' name 'DeregisterLibrary';
+function RegisterLibrary(cleanupFunc:TLibraryCleanupFunc):longint;cdecl;external 'clib' name 'RegisterLibrary';
+function SaveDataAreaPtr(libraryHandle:longint; dataAreaPtr:pointer):longint;cdecl;external 'clib' name 'SaveDataAreaPtr';
+// function Thread_Data_Area : pointer;  Thread_Data_Area (*__get_thread_data_area_ptr())
+{-nwmalloc.h-------------------------------------------------------------------}
+procedure NWGarbageCollect (NLMHandle:longint);  cdecl; external 'clib' name 'NWGarbageCollect';
+function  NWGetAllocPageOverhead (pageCount:longint):longint;cdecl; external 'clib' name 'NWGetAllocPageOverhead';
+function  NWGetAvailableMemory : longint;        cdecl; external 'clib' name 'NWGetAvailableMemory';
+function  NWGetPageSize : longint;               cdecl; external 'clib' name 'NWGetPageSize';
+function  NWMemorySizeAddressable (addr:pointer; size:longint):longint;cdecl; external 'clib' name 'NWMemorySizeAddressable';
+function  alloca (size:longint):pointer;         cdecl; external 'clib' name 'alloca';
+function  _msize (buffer:pointer):longint;       cdecl; external 'clib' name '_msize';
+function  __qcalloc (num,siz:longint):pointer;   cdecl; external 'clib' name '__qcalloc';
+function  __qmalloc (siz:longint):pointer;       cdecl; external 'clib' name '__qmalloc';
+function  __qrealloc (old:pointer; siz:longint):pointer;cdecl; external 'clib' name '__qrealloc';
+function  stackavail:longint;                    cdecl; external 'clib' name 'stackavail';
+
+function  calloc  (num,siz:longint):pointer;     cdecl; external 'clib' name 'calloc';
+procedure free    (p:pointer);                   cdecl; external 'clib' name 'free';
+function  malloc  (siz:longint):pointer;         cdecl; external 'clib' name 'malloc';
+function  realloc (oldMemP:pointer;
+                   newsize:longint):pointer;     cdecl; external 'clib' name 'realloc';
+{-nwncpx.h---------------------------------------------------------------------}
+const
+   MAX_NCP_EXTENSION_NAME_BYTES = 33;
+   BEGIN_SCAN_NCP_EXTENSIONS = $FFFFFFFF;
+   REPLY_BUFFER_IS_FRAGGED = $FFFFFFFF;
+   CONNECTION_BEING_RESTARTED = $01101001;
+   CONNECTION_BEING_KILLED = $02202002;
+   CONNECTION_BEING_LOGGED_OUT = $03303003;
+   CONNECTION_BEING_FREED = $04404004;
+type
+   PNCPExtensionClient = ^TNCPExtensionClient;
+   TNCPExtensionClient = record
+        connection : longint;
+        task : longint;
+     end;
+
+   PFragElement = ^TFragElement;
+   TFragElement = record
+        ptr : pointer;
+        size : longint;
+     end;
+
+   PNCPExtensionMessageFrag = ^TNCPExtensionMessageFrag;
+   TNCPExtensionMessageFrag = record
+        totalMessageSize : longint;
+        fragCount : longint;
+        fragList : array[0..3] of TFragElement;
+     end;
+
+   TNCPExtensionHandlerFunc =
+     function (NCPExtensionClient:PNCPExtensionClient;
+               requestData:pointer;
+               requestDataLen:longint;
+               replyData:pointer;
+               replyDataLen:Plongint):byte; cdecl;
+   TConnectionEventHandlerProc =
+     procedure (connection:longint; eventType:longint); cdecl;
+
+   TReplyBufferManagerProc =
+     procedure (NCPExtensionClient:PNCPExtensionClient; replyBuffer:pointer); cdecl;
+
+function NWDeRegisterNCPExtension(queryData:pointer):longint;cdecl;external name 'NWDeRegisterNCPExtension';
+function NWGetNCPExtensionInfo(NCPExtensionName:Pchar; NCPExtensionID:Plongint; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
+           queryData:pointer):longint;cdecl;external  name 'NWGetNCPExtensionInfo';
+function NWGetNCPExtensionInfoByID(NCPExtensionID:longint; NCPExtensionName:Pchar; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
+           queryData:pointer):longint;cdecl;external  name 'NWGetNCPExtensionInfoByID';
+function NWRegisterNCPExtension(NCPExtensionName:Pchar;
+                                NCPExtensionHandler:TNCPExtensionHandlerFunc;
+                                ConnectionEventHandler:TConnectionEventHandlerProc;
+                                ReplyBufferManager:TReplyBufferManagerProc;
+                                majorVersion,minorVersion,revision:byte;
+                                queryData:Ppointer):longint;cdecl;external  name 'NWRegisterNCPExtension';
+
+function NWRegisterNCPExtensionByID(NCPExtensionID:longint;
+                                    NCPExtensionName:Pchar;
+                                    NCPExtensionHandler:TNCPExtensionHandlerFunc;
+                                    ConnectionEventHandler:TConnectionEventHandlerProc;
+                                    ReplyBufferManager:TReplyBufferManagerProc;
+                                    majorVersion,minorVersion,revision:byte; queryData:Ppointer):longint;cdecl;external  name 'NWRegisterNCPExtensionByID';
+
+function NWScanNCPExtensions(NCPExtensionID:Plongint; NCPExtensionName:Pchar; majorVersion:PBYTE; minorVersion:PBYTE; revision:PBYTE;
+           queryData:pointer):longint;cdecl;external  name 'NWScanNCPExtensions';
+function NWSendNCPExtensionFraggedRequest(NCPExtensionID:longint; requestFrag:PNCPExtensionMessageFrag; replyFrag:PNCPExtensionMessageFrag):longint;cdecl;external  name 'NWSendNCPExtensionFraggedRequest';
+function NWSendNCPExtensionRequest(NCPExtensionID:longint; requestData:pointer; requestDataLen:longint; replyData:pointer; replyDataLen:Plongint):longint;cdecl;external  name 'NWSendNCPExtensionRequest';
+{-nwnspace.h-------------------------------------------------------------------}
+{$include npackon.inc}
+type
+
+   PNWNSINFO = ^TNWNSINFO;
+   TNWNSINFO = record
+     nsInfoBitMask,
+     fixedBitMask,
+     reservedBitMask,
+     extendedBitMask     : longint;
+     fixedBitsDefined,
+     reservedBitsDefined,
+     extendedBitsDefined : word;
+     fieldsLenTable      : array[0..31] of longint;
+     hugeStateInfo       : array[0..15] of byte;
+     hugeDataLength      : longint;
+   end;
+   TNW_NS_INFO = TNWNSINFO;
+   PNW_NS_INFO = ^TNW_NS_INFO;
+
+{$include npackoff.inc}
+
+function GetDataStreamName(volume:longint; dataStream:byte; name:Pchar; numberOfDataStreams:Plongint):longint;cdecl;external 'clib' name 'GetDataStreamName';
+function GetDataStreamName(volume:longint; dataStream:byte; name:Pchar; var numberOfDataStreams:longint):longint;cdecl;external 'clib' name 'GetDataStreamName';
+function GetNameSpaceName(volume:longint; nameSpace:longint; name:Pchar; numberOfNameSpaces:Plongint):longint;cdecl;external 'clib' name 'GetNameSpaceName';
+function GetNameSpaceName(volume:longint; nameSpace:longint; name:Pchar; var numberOfNameSpaces:longint):longint;cdecl;external 'clib' name 'GetNameSpaceName';
+function NWGetHugeNSInfo(volNum,nameSpace:byte; dirBase,hugeInfoMask:longint;
+                         hugeStateInfo:PBYTE;
+                         hugeData:PBYTE;
+                         hugeDataLen:PLongint;
+                         nextHugeStateInfo:PBYTE):longint;cdecl;external 'clib' name 'NWGetHugeNSInfo';
+function NWGetHugeNSInfo(volNum,nameSpace:byte; dirBase,hugeInfoMask:longint;
+                         var hugeStateInfo;
+                         var hugeData;
+                         var hugeDataLen:longint;
+                         var nextHugeStateInfo):longint;cdecl;external 'clib' name 'NWGetHugeNSInfo';
+function NWGetNameSpaceEntryName(path:PBYTE; nameSpace:longint; maxNameBufferLength:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWGetNameSpaceEntryName';
+function NWGetNameSpaceEntryName(var path:byte; nameSpace:longint; maxNameBufferLength:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWGetNameSpaceEntryName';
+function NWGetNSInfo(volNum:byte; srcNameSpace:byte; dstNameSpace:byte; dirBase:longint; nsInfoMask:longint;
+           nsSpecificInfo:PBYTE):longint;cdecl;external 'clib' name 'NWGetNSInfo';
+function NWGetNSLoadedList(volNum:byte; loadListSize:word; NSLoadedList:PBYTE; returnListSize:PWORD):longint;cdecl;external 'clib' name 'NWGetNSLoadedList';
+function NWQueryNSInfoFormat(nameSpace,volNum:byte; nsInfo:PNW_NS_INFO):longint;cdecl;external 'clib' name 'NWQueryNSInfoFormat';
+function NWQueryNSInfoFormat(nameSpace,volNum:byte; var nsInfo:TNW_NS_INFO):longint;cdecl;external 'clib' name 'NWQueryNSInfoFormat';
+function NWSetHugeNSInfo(volNum,nameSpace:byte; dirBase:longint;
+                         hugeInfoMask:longint; hugeStateInfo:PBYTE;
+                         hugeDataLen:longint;
+                         hugeData:PBYTE;
+                         nextHugeStateInfo:PBYTE;
+                         hugeDataUsed:PLongint):longint;cdecl;external 'clib' name 'NWSetHugeNSInfo';
+function NWSetHugeNSInfo(volNum,nameSpace:byte; dirBase:longint;
+                         hugeInfoMask:longint; var hugeStateInfo;
+                         hugeDataLen:longint;
+                         var hugeData;
+                         var nextHugeStateInfo;
+                         var hugeDataUsed:longint):longint;cdecl;external 'clib' name 'NWSetHugeNSInfo';
+
+function NWSetNameSpaceEntryName(path:PChar; nameSpace:longint; nameSpaceEntryName:PChar):longint;cdecl;external 'clib' name 'NWSetNameSpaceEntryName';
+function NWSetNSInfo(volNum,srcNameSpace,dstNameSpace:byte; dirBase:longint;
+                     nsInfoMask:longint;
+                     nsSpecificInfoLen:longint;
+                     nsSpecificInfo:Pointer):longint;cdecl;external 'clib' name 'NWSetNSInfo';
+function NWSetNSInfo(volNum,srcNameSpace,dstNameSpace:byte; dirBase:longint;
+                     nsInfoMask:longint;
+                     nsSpecificInfoLen:longint;
+                     var nsSpecificInfo):longint;cdecl;external 'clib' name 'NWSetNSInfo';
+function SetCurrentNameSpace(newNameSpace:byte):byte;cdecl;external 'clib' name 'SetCurrentNameSpace';
+function SetTargetNameSpace(newNameSpace:byte):byte;cdecl;external 'clib' name 'SetTargetNameSpace';
+{-nwproc.h---------------------------------------------------------------------}
+type TStdfds = array[0..2] of longint;
+
+function CreateChildProcess (func:pointer;
+                             threadName:PChar;
+                             cmdLine:PChar;
+                             arg:PChar;
+                             stack:pointer;
+                             stackSize:longint;
+                             stdfds:TStdfds;
+                             clearenv:longint;
+                             procName:PChar;
+                             enableApp:longint):Tpid_t;cdecl;external 'clib' name 'CreateChildProcess';
+function KillChildProcess(pid:Tpid_t):longint;cdecl;external 'clib' name 'KillChildProcess';
+function WaitOnChildProcess(pid:Tpid_t; statloc:Plongint; options:longint):longint;cdecl;external 'clib' name 'WaitOnChildProcess';
+function WaitOnChildProcess(pid:Tpid_t; var statloc:longint; options:longint):longint;cdecl;external 'clib' name 'WaitOnChildProcess';
+{-nwsemaph.h-------------------------------------------------------------------}
+function CloseLocalSemaphore       (semaHandle : longint)       : longint; cdecl; external 'clib' name 'CloseLocalSemaphore';
+function ExamineLocalSemaphore     (semaHandle : longint)       : longint; cdecl; external 'clib' name 'ExamineLocalSemaphore';
+function OpenLocalSemaphore        (initValue  : longint)       : longint; cdecl; external 'clib' name 'OpenLocalSemaphore';
+function SignalLocalSemaphore      (semaHandle : longint)       : longint; cdecl; external 'clib' name 'SignalLocalSemaphore';
+function TimedWaitOnLocalSemaphore (semaHandle,Timeout:longint) : longint; cdecl; external 'clib' name 'TimedWaitOnLocalSemaphore';
+function WaitOnLocalSemaphore      (semaHandle : longint)       : longint; cdecl; external 'clib' name 'WaitOnLocalSemaphore';
+{-signal.h---------------------------------------------------------------------}
+{ #define SIG_IGN            (void (*)(int)) 1 }
+{ #define SIG_DFL            (void (*)(int)) 2 }
+{ #define SIG_ERR            (void (*)(int)) 3 }
+const
+    SIGABRT = 1;
+    SIGFPE = 2;
+    SIGILL = 3;
+    SIGINT = 4;
+    SIGSEGV = 5;
+    SIGTERM = 6;
+    SIGPOLL = 7;
+ { currently unimplemented POSIX-mandated signals  }
+    SIGKILL = 101;
+    SA_NOCLDSTOP = 102;
+    SIGALRM = 103;
+    SIGCHILD = 104;
+    SIGCONT = 105;
+    SIGHUP = 106;
+    SIGPIPE = 107;
+    SIGQUIT = 108;
+    SIGSTOP = 109;
+    SIGTSTP = 110;
+    SIGTTIN = 111;
+    SIGTTOU = 112;
+    SIGUSR1 = 113;
+    SIGUSR2 = 114;
+    SIG_BLOCK = 115;
+    SIG_SETMASK = 116;
+    SIG_UNBLOCK = 117;
+ { Novell-defined signals  }
+    SIG_FINI = 500;
+    SIG_IPBIND = 501;
+    SIG_IPUNBIND = 502;
+    SIG_IPXBIND = 503;
+    SIG_IPXUNBIND = 504;
+    SIG_IPREGISTER = 505;
+    SIG_IPUNREGISTER = 506;
+    SIG_IPXREGISTER = 507;
+    SIG_IPXUNREGISTER = 508;
+    SIG_LOCALECHANGE = 510;
+
+type
+   Psig_atomic_t = ^Tsig_atomic_t;
+   Tsig_atomic_t = longint;
+   TSigHandlerProc = procedure (Sig:longint); cdecl;
+
+function _raise(para1:longint):longint;cdecl;external 'clib' name 'raise';
+function signal(sig:longint; func:TSigHandlerProc):longint;cdecl;external 'clib' name 'signal';
+
+function nw_raise(para1:longint):longint;cdecl;external 'clib' name 'raise';
+function nw_signal(sig:longint; func:TSigHandlerProc):longint;cdecl;external 'clib' name 'signal';
+{-nwstring.h-------------------------------------------------------------------}
+function ASCIIZToLenStr (lenString,ASCIIZstring:Pchar) : longint; cdecl;external 'clib' name 'ASCIIZToLenStr';
+function ASCIIZToMaxLenStr (lenString,ASCIIZstring:Pchar; maximumLength:longint):longint; cdecl;external 'clib' name 'ASCIIZToMaxLenStr';
+function IntSwap (w:word):word; cdecl;external 'clib' name 'IntSwap';
+function LenStrCat (destStr,srcStr:Pchar):Pchar; cdecl;external 'clib' name 'LenStrCat';
+function LenStrCmp (s1,s2:Pchar):longint; cdecl;external 'clib' name 'LenStrCmp';
+function LenStrCpy (dest,src:Pchar):Pchar; cdecl;external 'clib' name 'LenStrCpy';
+function LenToASCIIZStr (ASCIIZstring,lenString:Pchar) : longint; cdecl;external 'clib' name 'LenToASCIIZStr';
+function LongSwap (l:longint) : longint; cdecl;external 'clib' name 'LongSwap';
+{-nwtoolib.h-------------------------------------------------------------------}
+type
+  TreadFunc           = function :longint; cdecl;
+  TNLMBeginFunc       = procedure (NLMID:longint; commandLine:Pchar); cdecl;
+  TNLMPreEndFunc      = procedure (NLMID:longint); cdecl;
+  TNLMPostEndFunc     = procedure (NLMID:longint); cdecl;
+  TNLMEndNoContextFunc= procedure (NLMID:longint); cdecl;
+  TthreadGroupBeginFunc=function (threadGroupID:longint; argc:longint; const argv:array of Pchar):longint; cdecl;
+  TthreadGroupEndFunc = procedure (threadGroupID:longint); cdecl;
+  TthreadBeginFunc    = function (threadID:longint):longint;  cdecl;
+  TthreadEndFunc      = procedure (threadID:longint); cdecl;
+  TthreadReleaseFileResourcesFunc = procedure (threadID:longint); cdecl;
+
+function _NWGetErrno:longint;cdecl;external 'clib' name '_NWGetErrno';
+function _NWGetNWErrno:longint;cdecl;external 'clib' name '_NWGetNWErrno';
+function _NWGetNLMLevelLibDataPtr(NLMID:longint):pointer;cdecl;external 'clib' name '_NWGetNLMLevelLibDataPtr';
+function _NWGetThreadGroupLevelLibDataPtr(threadGroupID:longint):pointer;cdecl;external 'clib' name '_NWGetThreadGroupLevelLibDataPtr';
+function _NWGetThreadLevelLibDataPtr(threadID:longint):pointer;cdecl;external 'clib' name '_NWGetThreadLevelLibDataPtr';
+function _NWLoadNLMMessageTable(NLMHandle:longint; messageTable:PPPchar; messageCount:Plongint; languageID:Plongint):longint;cdecl;external 'clib' name '_NWLoadNLMMessageTable';
+function _NWRegisterNLMLibrary (NLMHandle:longint;
+                                NLMFileHandle:longint;
+                                readFunc:TReadFunc;
+                                NLMBegin:TNLMBeginFunc;
+                                NLMPreEnd:TNLMPreEndFunc;
+                                NLMPostEnd:TNLMPostEndFunc;
+                                NLMEndNoContext:TNLMEndNoContextFunc;
+                                threadGroupBegin:TthreadGroupBeginFunc;
+                                threadGroupEnd:TthreadGroupEndFunc;
+                                threadBegin:TthreadBeginFunc;
+                                threadEnd:TthreadEndFunc;
+                                threadReleaseFileResources:TthreadReleaseFileResourcesFunc ):longint;cdecl;external 'clib' name '_NWRegisterNLMLibrary';
+procedure _NWSetErrno   (errnoValue : longint);cdecl;external 'clib' name '_NWSetErrno';
+procedure _NWSetNWErrno (NWErrnoValue : longint);cdecl;external 'clib' name '_NWSetNWErrno';
+procedure _NWSetNLMLevelLibDataPtr (NLMID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetNLMLevelLibDataPtr';
+procedure _NWSetThreadGroupLevelLibDataPtr (threadGroupID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetThreadGroupLevelLibDataPtr';
+procedure _NWSetThreadLevelLibDataPtr (threadID : longint; dataPtr : pointer);cdecl;external 'clib' name '_NWSetThreadLevelLibDataPtr';
+{-stdio.h----------------------------------------------------------------------}
+type
+   Tva_list = pointer;  // dont know what this is
+
+   Pfpos_t = ^Tfpos_t;
+   Tfpos_t = longint;
+
+   Pwchar_t = ^Twchar_t;
+   Twchar_t = word;
+
+   Pwint_t = ^Twint_t;
+   Twint_t = longint;
+{ values for fseek()' whence argument  }
+{ add 'offset' to beginning of file         }
+
+const
+   SEEK_SET = 0;
+{ add 'offset' to current position in file  }
+   SEEK_CUR = 1;
+{ add 'offset' to end of file               }
+   SEEK_END = 2;
+{ miscellaneous definitions  }
+{ at least this many FILEs available        }
+   FOPEN_MAX = 20;
+{ (extreme) default buffer size             }
+   BUFSIZ = 1024;
+{ max number of characters in a path name   }
+   FILENAME_MAX = 1024;
+{ definitions for tmpnam() and tmpfil()  }
+{ "_T-00000.TMP" to "_T-99999.TMP"          }
+   TMP_MAX = 100000;
+{ 8 + 1 + 3 + 1 (always DOS namespace)      }
+   L_tmpnam = 13;
+{ values for field '_flag' in FILE below  }
+{ currently reading                         }
+   _IOREAD = $0001;
+{ currently writing                         }
+   _IOWRT = $0002;
+{ opened for reading and writing            }
+   _IORW = $0004;
+{ binary file (O_BINARY)                    }
+   _IOBIN = $0008;
+{ unbuffered (e.g.: stdout and stderr)      }
+   _IONBF = $0010;
+{ line buffered (e.g.: stdin)               }
+   _IOLBF = $0020;
+{ fully buffered (most files)               }
+   _IOFBF = $0040;
+{ EOF reached on read                       }
+   _IOEOF = $0080;
+{ I/O error from system                     }
+   _IOERR = $0100;
+{ stdio code malloc()'d this buffer         }
+   _IOBUF = $0200;
+{ was a temporary file by tmpfile()         }
+   _IOTMP = $0400;
+{ file stream structure                     }
+type
+   Piobuf = ^Tiobuf;
+   Tiobuf = record
+        _signature : dword;    { identifies this structure                 }
+        _avail : longint;      { available (unused/unread) room in buffer  }
+        _ptr : Pbyte;          { next character from/to here in buffer     }
+        _base : Pbyte;         { the buffer (not really)                   }
+        _oflag : dword;        { pre-CLib.NLM v4.11 compatibility          }
+        _file : dword;         { file descriptor                           }
+        _flag : dword;         { state of stream                           }
+        _buf : array[0..3] of
+                  byte;        { fake, micro buffer as a fall-back         }
+        _env : dword;          { Macintosh or UNIX text file signature     }
+     end;
+   TFILE = Tiobuf;
+   PFILE = ^TFILE;
+   PPFILE = ^PFILE;
+
+
+{ ISO/ANSI C defined functions...  }
+procedure clearerr(para1:PFILE);cdecl;external 'clib' name 'clearerr';
+procedure clearerr(var para1:TFILE);cdecl;external 'clib' name 'clearerr';
+function fclose(para1:PFILE):longint;cdecl;external 'clib' name 'fclose';
+function fclose(var para1:TFILE):longint;cdecl;external 'clib' name 'fclose';
+function feof(para1:PFILE):longint;cdecl;external 'clib' name 'feof';
+function feof(var para1:TFILE):longint;cdecl;external 'clib' name 'feof';
+function ferror(para1:PFILE):longint;cdecl;external 'clib' name 'ferror';
+function ferror(var para1:TFILE):longint;cdecl;external 'clib' name 'ferror';
+function fflush(para1:PFILE):longint;cdecl;external 'clib' name 'fflush';
+function fflush(var para1:TFILE):longint;cdecl;external 'clib' name 'fflush';
+function fgetc(para1:PFILE):char;cdecl;external 'clib' name 'fgetc';
+function fgetc(var para1:TFILE):char;cdecl;external 'clib' name 'fgetc';
+function fgetpos(para1:PFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fgetpos';
+function fgetpos(var para1:TFILE; var para2:Tfpos_t):longint;cdecl;external 'clib' name 'fgetpos';
+function fgets(para1:Pchar; para2:longint; para3:PFILE):Pchar;cdecl;external 'clib' name 'fgets';
+function fgets(para1:Pchar; para2:longint; var para3:TFILE):Pchar;cdecl;external 'clib' name 'fgets';
+function fopen(para1,para2:Pchar):PFILE;cdecl;external 'clib' name 'fopen';
+function fprintf(para1:PFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fprintf';
+function fprintf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fprintf';
+function fprintf(para1:PFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fprintf';
+function fprintf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fprintf';
+function fputc(para1:longint; para2:PFILE):longint;cdecl;external 'clib' name 'fputc';
+function fputs(para1:Pchar; para2:PFILE):longint;cdecl;external 'clib' name 'fputs';
+function fread(para1:pointer; para2:Tsize_t; para3:Tsize_t; para4:PFILE):Tsize_t;cdecl;external 'clib' name 'fread';
+function freopen(para1:Pchar; para2:Pchar; para3:PFILE):PFILE;cdecl;external 'clib' name 'freopen';
+function fscanf(para1:PFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fscanf';
+function fscanf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'fscanf';
+function fscanf(para1:PFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fscanf';
+function fscanf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'fscanf';
+function fseek(fp:PFILE; offset:longint; whence:longint):longint;cdecl;external 'clib' name 'fseek';
+function fseek(var fp:TFILE; offset:longint; whence:longint):longint;cdecl;external 'clib' name 'fseek';
+(* Const before type ignored *)
+function fsetpos(para1:PFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fsetpos';
+function fsetpos(var para1:TFILE; para2:Pfpos_t):longint;cdecl;external 'clib' name 'fsetpos';
+function ftell(para1:PFILE):longint;cdecl;external 'clib' name 'ftell';
+function ftell(var para1:TFILE):longint;cdecl;external 'clib' name 'ftell';
+
+function fwrite(para1:pointer; para2:Tsize_t; para3:Tsize_t; para4:PFILE):Tsize_t;cdecl;external 'clib' name 'fwrite';
+
+function getc(para1:PFILE):char;cdecl;external 'clib' name 'getc';
+function getc(var para1:TFILE):char;cdecl;external 'clib' name 'getc';
+
+function getchar:char;cdecl;external 'clib' name 'getchar';
+function gets(para1:Pchar):Pchar;cdecl;external 'clib' name 'gets';
+procedure perror(para1:Pchar);cdecl;external 'clib' name 'perror';
+function printf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'printf';
+function printf(para1:Pchar):longint;cdecl;external 'clib' name 'printf';
+function putc(para1:char; para2:PFILE):longint;cdecl;external 'clib' name 'putc';
+function putc(para1:char; var para2:TFILE):longint;cdecl;external 'clib' name 'putc';
+
+function putchar(para1:char):longint;cdecl;external 'clib' name 'putchar';
+
+function puts(para1:Pchar):longint;cdecl;external 'clib' name 'puts';
+function remove(para1:Pchar):longint;cdecl;external 'clib' name 'remove';
+function rename(para1, para2:Pchar):longint;cdecl;external 'clib' name 'rename';
+procedure rewind(para1:PFILE);cdecl;external 'clib' name 'rewind';
+procedure rewind(var para1:TFILE);cdecl;external 'clib' name 'rewind';
+
+function scanf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'scanf';
+function scanf(para1:Pchar):longint;cdecl;external 'clib' name 'scanf';
+procedure setbuf(para1:PFILE; para2:Pchar);cdecl;external 'clib' name 'setbuf';
+procedure setbuf(var para1:TFILE; para2:Pchar);cdecl;external 'clib' name 'setbuf';
+function setvbuf(para1:PFILE; para2:Pchar; para3:longint; para4:Tsize_t):longint;cdecl;external 'clib' name 'setvbuf';
+function setvbuf(para1:TFILE; para2:Pchar; para3:longint; para4:Tsize_t):longint;cdecl;external 'clib' name 'setvbuf';
+
+function sprintf(para1,para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'sprintf';
+function sprintf(para1,para2:Pchar):longint;cdecl;external 'clib' name 'sprintf';
+function sscanf(para1, para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'sscanf';
+function sscanf(para1, para2:Pchar):longint;cdecl;external 'clib' name 'sscanf';
+function tmpfile:PFILE;cdecl;external 'clib' name 'tmpfile';
+function tmpnam(para1:Pchar):Pchar;cdecl;external 'clib' name 'tmpnam';
+function ungetc(para1:longint; para2:PFILE):longint;cdecl;external 'clib' name 'ungetc';
+function ungetc(para1:longint; var para2:TFILE):longint;cdecl;external 'clib' name 'ungetc';
+
+function vfprintf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfprintf';
+function vfprintf(var para1:TFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfprintf';
+
+function vfscanf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfscanf';
+function vfscanf(var para1:TFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vfscanf';
+
+function vprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vprintf';
+function vscanf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vscanf';
+function vsprintf(para1,para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vsprintf';
+function vsscanf(para1, para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'vsscanf';
+{ POSIX-defined additions...  }
+function fdopen(para1:longint; para2:Pchar):PFILE;cdecl;external 'clib' name 'fdopen';
+function fileno(fp:PFILE):longint;cdecl;external 'clib' name 'fileno';
+function fileno(var f:TFILE):longint;cdecl;external 'clib' name 'fileno';
+//function cgets(para1:Pchar):Pchar;cdecl;external 'clib' name 'cgets';
+//function cprintf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'cprintf';
+//function cprintf(para1:Pchar):longint;cdecl;external 'clib' name 'cprintf';
+//function cputs(para1:Pchar):longint;cdecl;external 'clib' name 'cputs';
+//function cscanf(para1:Pchar; args:array of const):longint;cdecl;external 'clib' name 'cscanf';
+//function cscanf(para1:Pchar):longint;cdecl;external 'clib' name 'cscanf';
+function fcloseall:longint;cdecl;external 'clib' name 'fcloseall';
+function fgetchar:longint;cdecl;external 'clib' name 'fgetchar';
+function flushall:longint;cdecl;external 'clib' name 'flushall';
+function fputchar(para1:longint):longint;cdecl;external 'clib' name 'fputchar';
+function vcprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vcprintf';
+function vcscanf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'vcscanf';
+function NWfprintf(var para1:TFILE; para2:Pchar; args:array of const):longint;cdecl;external 'clib' name 'NWfprintf';
+function NWfprintf(var para1:TFILE; para2:Pchar):longint;cdecl;external 'clib' name 'NWfprintf';
+function NWvcprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'NWvcprintf';
+function NWvfprintf(para1:PFILE; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'NWvfprintf';
+function NWvprintf(para1:Pchar; para2:Tva_list):longint;cdecl;external 'clib' name 'NWvprintf';
+function NWvsprintf(para1:Pchar; para2:Pchar; para3:Tva_list):longint;cdecl;external 'clib' name 'NWvsprintf';
+{
+   For the following support, open the file without 'b' in the mode. Additions
+   for transparent Macintosh text file support ('\r' on lines) and additions
+   for transparent UNIX text file support ('\n' on lines).
+ }
+function IsMacintoshTextFile(para1:PFILE):longint;cdecl;external 'clib' name 'IsMacintoshTextFile';
+function SetMacintoshTextMode(para1:PFILE):longint;cdecl;external 'clib' name 'SetMacintoshTextMode';
+function UnsetMacintoshTextMode(para1:PFILE):longint;cdecl;external 'clib' name 'UnsetMacintoshTextMode';
+
+function IsMacintoshTextFile(var para1:TFILE):longint;cdecl;external 'clib' name 'IsMacintoshTextFile';
+function SetMacintoshTextMode(var para1:TFILE):longint;cdecl;external 'clib' name 'SetMacintoshTextMode';
+function UnsetMacintoshTextMode(var para1:TFILE):longint;cdecl;external 'clib' name 'UnsetMacintoshTextMode';
+
+{ back to '\r\n'  }
+function is_unix_text_file(para1:PFILE):longint;cdecl;external 'clib' name 'is_unix_text_file';
+function set_unix_text_mode(para1:PFILE):longint;cdecl;external 'clib' name 'set_unix_text_mode';
+function unset_unix_text_mode(para1:PFILE):longint;cdecl;external 'clib' name 'unset_unix_text_mode';
+
+function is_unix_text_file(var para1:TFILE):longint;cdecl;external 'clib' name 'is_unix_text_file';
+function set_unix_text_mode(var para1:TFILE):longint;cdecl;external 'clib' name 'set_unix_text_mode';
+function unset_unix_text_mode(var para1:TFILE):longint;cdecl;external 'clib' name 'unset_unix_text_mode';
+
+{ back to '\r\n'  }
+{ functions underlying macro support...  }
+function __get_stdin:PPFILE;cdecl;external 'clib' name '__get_stdin';
+function __get_stdout:PPFILE;cdecl;external 'clib' name '__get_stdout';
+function __get_stderr:PPFILE;cdecl;external 'clib' name '__get_stderr';
+
+function __stdin : PFILE;
+function __stdout : PFILE;
+function __stderr : PFILE;
+{-stdlib.h---------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+
+const
+   EXIT_FAILURE = -(1);
+   EXIT_SUCCESS = 0;
+   RAND_MAX = 32767;
+type
+   Pdiv_t = ^Tdiv_t;
+   Tdiv_t = record
+        quot : longint;
+        rem : longint;
+     end;
+
+   Pldiv_t = ^Tldiv_t;
+   Tldiv_t = record
+        quot : longint;
+        rem : longint;
+     end;
+
+   TCdeclProcedure = procedure; cdecl;
+   TBSearchFunc = function (para1:pointer; para2:pointer):longint; cdecl;
+   TQSortFunc = function (para1:pointer; para2:pointer):longint; cdecl;
+
+//??  var __ctype : array of byte;cvar;external;
+
+procedure abort;cdecl;external 'clib' name 'abort';
+function abs(para1:longint):longint;cdecl;external 'clib' name 'abs';
+function atexit(proc:TCdeclProcedure):longint;cdecl;external 'clib' name 'atexit';
+function atof(para1:Pchar):double;cdecl;external 'clib' name 'atof';
+function atoi(para1:Pchar):longint;cdecl;external 'clib' name 'atoi';
+function atol(para1:Pchar):longint;cdecl;external 'clib' name 'atol';
+function bsearch(para1,para2:pointer; para3,para4:Tsize_t; para5:TBsearchFunc):pointer;cdecl;external 'clib' name 'bsearch';
+function calloc(para1:Tsize_t; para2:Tsize_t):pointer;cdecl;external 'clib' name 'calloc';
+function _div(para1,para2:longint):Tdiv_t;cdecl;external 'clib' name 'div';
+//procedure exit(para1:longint);cdecl;external 'clib' name 'exit';
+procedure _exit(para1:longint);cdecl;external 'clib' name '_exit';
+function getenv(para1:Pchar):Pchar;cdecl;external 'clib' name 'getenv';
+function labs(para1:longint):longint;cdecl;external 'clib' name 'labs';
+function ldiv(para1:longint; para2:longint):Tldiv_t;cdecl;external 'clib' name 'ldiv';
+function malloc(para1:Tsize_t):pointer;cdecl;external 'clib' name 'malloc';
+function mblen(para1:Pchar; para2:Tsize_t):longint;cdecl;external 'clib' name 'mblen';
+function mbstowcs(para1:Pwchar_t; para2:Pchar; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'mbstowcs';
+function mbtowc(para1:Pwchar_t; para2:Pchar; para3:Tsize_t):longint;cdecl;external 'clib' name 'mbtowc';
+procedure qsort(para1:pointer; para2,para3:Tsize_t; para4:TQSortFunc);cdecl;external 'clib' name 'qsort';
+function rand:longint;cdecl;external 'clib' name 'rand';
+function realloc(para1:pointer; para2:Tsize_t):pointer;cdecl;external 'clib' name 'realloc';
+procedure srand(para1:dword);cdecl;external 'clib' name 'srand';
+function strtod(para1:Pchar; para2:PPchar):double;cdecl;external 'clib' name 'strtod';
+function strtol(para1:Pchar; para2:PPchar; para3:longint):longint;cdecl;external 'clib' name 'strtol';
+function strtoul(para1:Pchar; para2:PPchar; para3:longint):dword;cdecl;external 'clib' name 'strtoul';
+function _system(para1:Pchar):longint;cdecl;external 'clib' name 'system';
+function wcstombs(para1:Pchar; para2:Pwchar_t; para3:Tsize_t):Tsize_t;cdecl;external 'clib' name 'wcstombs';
+function wctomb(para1:Pchar; para2:Twchar_t):longint;cdecl;external 'clib' name 'wctomb';
+function clearenv:longint;cdecl;external 'clib' name 'clearenv';
+function ecvt(para1:double; para2:longint; para3:Plongint; para4:Plongint):Pchar;cdecl;external 'clib' name 'ecvt';
+function fcvt(para1:double; para2:longint; para3:Plongint; para4:Plongint):Pchar;cdecl;external 'clib' name 'fcvt';
+function gcvt(para1:double; para2:longint; para3:Pchar):Pchar;cdecl;external 'clib' name 'gcvt';
+function htol(para1:Pchar):dword;cdecl;external 'clib' name 'htol';
+function itoa(para1:longint; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'itoa';
+function itoab(para1:dword; para2:Pchar):Pchar;cdecl;external 'clib' name 'itoab';
+function ltoa(para1:longint; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'ltoa';
+function max(para1:longint; para2:longint):longint;cdecl;external 'clib' name 'max';
+function min(para1:longint; para2:longint):longint;cdecl;external 'clib' name 'min';
+function putenv(name:Pchar):longint;cdecl;external 'clib' name 'putenv';
+function rand_r(seed:Pdword; result:Plongint):longint;cdecl;external 'clib' name 'rand_r';
+function _rotl(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_rotl';
+function _rotr(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_rotr';
+function scanenv(sequence:Plongint; variable:Pchar; length:Psize_t; value:Pchar):longint;cdecl;external 'clib' name 'scanenv';
+function setenv(name:Pchar; value:Pchar; overwrite:longint):longint;cdecl;external 'clib' name 'setenv';
+// double   strtod_ld( const char *, char **, long double *);
+function strtoi(para1:Pchar; para2:longint):longint;cdecl;external 'clib' name 'strtoi';
+function ultoa(para1:dword; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'ultoa';
+function unsetenv(name:Pchar):longint;cdecl;external 'clib' name 'unsetenv';
+function utoa(para1:dword; para2:Pchar; para3:longint):Pchar;cdecl;external 'clib' name 'utoa';
+function _lrotl(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_lrotl';
+function _lrotr(para1:dword; para2:dword):dword;cdecl;external 'clib' name '_lrotr';
+{-unistd.h---------------------------------------------------------------------}
+const
+   F_OK = 0;
+   R_OK = 4;
+   W_OK = 2;
+   X_OK = 1;
+{ test using effective ids  }
+   EFF_ONLY_OK = 8;
+   STDIN_FILENO = 0;
+   STDOUT_FILENO = 1;
+   STDERR_FILENO = 2;
+
+type TPipeFiledes = array [0..1] of longint;
+
+function access(path:Pchar; mode:longint):longint;cdecl;external 'clib' name 'access';
+function _chdir(path:Pchar):longint;cdecl;external 'clib' name 'chdir';
+function Fpchdir(path:Pchar):longint;cdecl;external 'clib' name 'chdir';
+function chsize(fildes:longint; size:dword):longint;cdecl;external 'clib' name 'chsize';
+function _close(fildes:longint):longint;cdecl;external 'clib' name 'close';
+function Fpclose(fildes:longint):longint;cdecl;external 'clib' name 'close';
+function dup(fildes:longint):longint;cdecl;external 'clib' name 'dup';
+function dup2(fildes1:longint; fildes2:longint):longint;cdecl;external 'clib' name 'dup2';
+function _eof(fildes:longint):longint;cdecl;external 'clib' name 'eof';
+function Fpeof(fildes:longint):longint;cdecl;external 'clib' name 'eof';
+function getcwd(path:Pchar; len:Tsize_t):Pchar;cdecl;external 'clib' name 'getcwd';
+function isatty(fildes:longint):longint;cdecl;external 'clib' name 'isatty';
+function lseek(fildes:longint; offset:Toff_t; whence:longint):Toff_t;cdecl;external 'clib' name 'lseek';
+function pipe(fildes:TPipeFiledes):longint;cdecl;external 'clib' name 'pipe';
+function _read(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'read';
+function Fpread(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'read';
+function rmdir(path:Pchar):longint;cdecl;external 'clib' name 'rmdir';
+function unlink(path:Pchar):longint;cdecl;external 'clib' name 'unlink';
+function _write(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
+function Fpwrite(fildes:longint; buf:pointer; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
+function pread(fildes:longint; buf:pointer; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pread';
+function pwrite(fildes:longint; buf:pointer; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pwrite';
+
+function _write(fildes:longint; var buf; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
+function Fpwrite(fildes:longint; var buf; nbytes:Tsize_t):Tssize_t;cdecl;external 'clib' name 'write';
+function pread(fildes:longint; var buf; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pread';
+function pwrite(fildes:longint; var buf; nbytes:Tsize_t; offset:Toff_t):Tssize_t;cdecl;external 'clib' name 'pwrite';
+{-libcclib.h-------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+type
+   Tstart_routineProc = procedure (arg:pointer); cdecl;
+   Pclibctx_t = ^Tclibctx_t;
+   Tclibctx_t = record
+     ThreadGroupGetID   : function :longint;cdecl;
+     ThreadGroupCreate  : function (name:Pchar; threadGroupID:Plongint):longint; cdecl;
+     ThreadGroupDispose : function (threadGroupID:longint):longint; cdecl;
+     ThreadGroupUnwrap  : function (threadGroupID:longint; restoredThreadGroupID:longint):longint; cdecl;
+     ThreadGroupWrap    : function (threadGroupID:longint):longint; cdecl;
+     ThreadCreate       : function (threadGroupID:longint;
+                              start_routine:Tstart_routineProc;
+                              arg:pointer;
+                              stackSize:Tsize_t;
+                              flags:dword;
+                              threadID:Plongint):longint; cdecl;
+     __UnloadBroker     : procedure ; cdecl;
+     reserved1          : pointer;
+     reserved           : array[0..7] of pointer;
+   end;
+
+function CLibLoadContextBroker(module:pointer; callback:Pchar):longint;cdecl;external 'clib' name 'CLibLoadContextBroker';
+function CLibUnloadContextBroker(broker:Pclibctx_t):longint;cdecl;external 'clib' name 'CLibUnloadContextBroker';
+function MyCallBack(broker:Pclibctx_t):longint;cdecl;external 'clib' name 'MyCallBack';
+{-nwtime.h---------------------------------------------------------------------}
+const
+   CLOCK_IS_SYNCHRONIZED = $01;
+type
+
+   PclockAndStatus = ^TclockAndStatus;
+   TclockAndStatus = longint;
+
+const
+   CLOCK_IS_NETWORK_SYNCHRONIZED = $02;
+   CLOCK_SYNCHRONIZATION_IS_ACTIVE = $04;
+
+{$include npackon.inc}
+type
+   PDOSTime = ^TDOSTime;
+   TDOSTime = record
+        flag0 : word;
+     end;
+
+const
+   bm_TDOSTime_bisecond = $1F;
+   bp_TDOSTime_bisecond = 0;
+   bm_TDOSTime_minute = $7E0;
+   bp_TDOSTime_minute = 5;
+   bm_TDOSTime_hour = $F800;
+   bp_TDOSTime_hour = 11;
+function bisecond(var a : TDOSTime) : word;
+procedure set_bisecond(var a : TDOSTime; __bisecond : word);
+function minute(var a : TDOSTime) : word;
+procedure set_minute(var a : TDOSTime; __minute : word);
+function hour(var a : TDOSTime) : word;
+procedure set_hour(var a : TDOSTime; __hour : word);
+type
+   PDOSDate = ^TDOSDate;
+   TDOSDate = record
+        flag0 : word;
+     end;
+   T_DOSDate = TDOSDate;
+
+const
+   bm_TDOSDate_day = $1F;
+   bp_TDOSDate_day = 0;
+   bm_TDOSDate_month = $1E0;
+   bp_TDOSDate_month = 5;
+   bm_TDOSDate_yearsSince80 = $FE00;
+   bp_TDOSDate_yearsSince80 = 9;
+function day(var a : TDOSDate) : word;
+procedure set_day(var a : TDOSDate; __day : word);
+function month(var a : TDOSDate) : word;
+procedure set_month(var a : TDOSDate; __month : word);
+function yearsSince80(var a : TDOSDate) : word;
+procedure set_yearsSince80(var a : TDOSDate; __yearsSince80 : word);
+type
+   P_DOSTime = ^T_DOSTime;
+   T_DOSTime = record
+        flag0 : word;
+     end;
+
+const
+   bm_T_DOSTime_bisecond = $1F;
+   bp_T_DOSTime_bisecond = 0;
+   bm_T_DOSTime_minute = $7E0;
+   bp_T_DOSTime_minute = 5;
+   bm_T_DOSTime_hour = $F800;
+   bp_T_DOSTime_hour = 11;
+function bisecond(var a : T_DOSTime) : word;
+procedure set_bisecond(var a : T_DOSTime; __bisecond : word);
+function minute(var a : T_DOSTime) : word;
+procedure set_minute(var a : T_DOSTime; __minute : word);
+function hour(var a : T_DOSTime) : word;
+procedure set_hour(var a : T_DOSTime; __hour : word);
+
+const
+   bm_T_DOSDate_day = $1F;
+   bp_T_DOSDate_day = 0;
+   bm_T_DOSDate_month = $1E0;
+   bp_T_DOSDate_month = 5;
+   bm_T_DOSDate_yearsSince80 = $FE00;
+   bp_T_DOSDate_yearsSince80 = 9;
+
+
+{$include npackoff.inc}
+
+function _ConvertDOSTimeToCalendar(dateTime:longint):Ttime_t;cdecl;external 'clib' name '_ConvertDOSTimeToCalendar';
+procedure _ConvertTimeToDOS(calendarTime:Ttime_t; filDatP:PDOSDate; filTimP:PDOSTime);cdecl;external 'clib' name '_ConvertTimeToDOS';
+procedure GetClockStatus(_dataPtr:TclockAndStatus);cdecl;external 'clib' name 'GetClockStatus';
+function GetCurrentTicks:longint;cdecl;external 'clib' name 'GetCurrentTicks';
+function GetHighResolutionTimer:longint;cdecl;external 'clib' name 'GetHighResolutionTimer';
+function GetSuperHighResolutionTimer:longint;cdecl;external 'clib' name 'GetSuperHighResolutionTimer';
+function NWGetHighResolutionTimer:longint;cdecl;external 'clib' name 'NWGetHighResolutionTimer';
+function NWGetSuperHighResolutionTimer:longint;cdecl;external 'clib' name 'NWGetSuperHighResolutionTimer';
+function __get_altzone:Ptime_t;cdecl;external 'clib' name '__get_altzone';
+function altzone:Ptime_t;cdecl;external 'clib' name '__get_altzone';
+function __get_daylight:Plongint;cdecl;external 'clib' name '__get_daylight';
+function daylight:Plongint;cdecl;external 'clib' name '__get_daylight';
+function __get_daylightOffset:Ptime_t;cdecl;external 'clib' name '__get_daylightOffset';
+function daylightOffset:Ptime_t;cdecl;external 'clib' name '__get_daylightOffset';
+function __get_daylightOnOff:Plongint;cdecl;external 'clib' name '__get_daylightOnOff';
+function daylightOnOff:Plongint;cdecl;external 'clib' name '__get_daylightOnOff';
+function __get_timezone:Ptime_t;cdecl;external 'clib' name '__get_timezone';
+function timezone:Ptime_t;cdecl;external 'clib' name '__get_timezone';
+procedure SecondsToTicks(Seconds:longint; TenthsOfSeconds:longint; Ticks:Plongint);cdecl;external 'clib' name 'SecondsToTicks';
+procedure TicksToSeconds(Ticks:longint; Seconds:Plongint; TenthsOfSeconds:Plongint);cdecl;external 'clib' name 'TicksToSeconds';
+{-nwthread.h-------------------------------------------------------------------}
+  { values for __action_code used with ExitThread()  }
+
+  const
+     TSR_THREAD = -1;
+     EXIT_THREAD = 0;
+     EXIT_NLM = 1;
+  { values for __mode used with spawnxx()  }
+     P_WAIT = 0;
+     P_NOWAIT = 1;
+     P_OVERLAY = 2;
+     P_NOWAITO = 4;
+     P_SPAWN_IN_CURRENT_DOMAIN = 8;
+     NO_CONTEXT = 0;
+     USE_CURRENT_CONTEXT = 1;
+  { stack defines  }
+     MIN_STACKSIZE = 16384;
+     DEFAULT_STACKSIZE = 16384;
+
+  type
+
+     PWorkToDo = ^TWorkToDo;
+
+     TProcedure    = procedure; cdecl;
+     TThreadFunc   = procedure (param1:pointer); cdecl;
+     TWorkToDoProc = procedure (data:pointer; workToDo:PWorkToDo); cdecl;
+     TCleanup      = procedure (para1:longint); cdecl;
+
+
+     PAESProcessStructure = ^TAESProcessStructure;
+     TAESProcessStructure = record
+          ALink              : PAESProcessStructure;
+          AWakeUpDelayAmount : longint;
+          AWakeUpTime        : longint;
+          AProcessToCall     : procedure (para1:pointer);cdecl;
+          ARTag              : longint;
+          AOldLink           : longint;
+       end;
+
+
+     PWorkToDoStructure = ^TWorkToDoStructure;
+     TWorkToDoStructure = record
+          Link            : PWorkToDoStructure;
+          workProcedure   : TProcedure;
+          WorkResourceTag : longint;
+          PollCountAmount : longint;
+          PollCountWhen   : longint;
+          userProcedure   : TProcedure;
+          dataPtr         : pointer;
+          destThreadGroup : longint;
+       end;
+     TWorkToDo = TWorkToDoStructure;
+
+
+
+  { custom data area variables...  }
+{
+    var
+       threadCustomDataPtr : pointer;cvar;external;
+       threadCustomDataSize : longint;cvar;external;
+       threadGroupCustomDataPtr : pointer;cvar;external;
        threadGroupCustomDataSize : longint;cvar;external;
 }
        threadGroupCustomDataSize : longint;cvar;external;
 }
-    
-    
-  function AtUnload(func:Tprocedure):longint;                       cdecl;external ThreadsNlm name 'AtUnload';
-  function BeginThread(func:TThreadFunc; 
-                       stackP:pointer; 
-		       stackSize:dword; 
-		       arg:pointer):longint;                        cdecl;external ThreadsNlm name 'BeginThread';
-  function BeginThreadGroup(func:TThreadFunc; 
-                            stackP:pointer; 
-			    stackSize:dword; 
-			    arg:pointer):longint;                   cdecl;external ThreadsNlm name 'BeginThreadGroup';
-  function Breakpoint(arg:longint):longint;                         cdecl;external Lib0Nlm name 'Breakpoint';
-  procedure CancelNoSleepAESProcessEvent(EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'CancelNoSleepAESProcessEvent';
-  procedure CancelSleepAESProcessEvent  (EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'CancelSleepAESProcessEvent';
-  function ClearNLMDontUnloadFlag(NLMID:longint):longint;                cdecl;external ThreadsNlm name 'ClearNLMDontUnloadFlag';
-  procedure delay(milliseconds:dword);                                   cdecl;external ThreadsNlm name 'delay';
-  function EnterCritSec:longint;                                         cdecl;external ThreadsNlm name 'EnterCritSec';
-  function ExitCritSec:longint;                                          cdecl;external ThreadsNlm name 'ExitCritSec';
-  procedure ExitThread(action_code     :longint; 
-                       termination_code:longint);                        cdecl;external ThreadsNlm name 'ExitThread';
-
-  function FindNLMHandle(NLMFileName:Pchar):dword;                       cdecl;external ThreadsNlm name 'FindNLMHandle';
-  function getcmd(cmdLine:Pchar):Pchar;                                  cdecl;external ThreadsNlm name 'getcmd';
-  function GetNLMHandle:dword;                                           cdecl;external ThreadsNlm name 'GetNLMHandle';
-  function GetNLMID:longint;                                             cdecl;external ThreadsNlm name 'GetNLMID';
-  function GetNLMIDFromNLMHandle(NLMHandle:longint):longint;             cdecl;external ThreadsNlm name 'GetNLMIDFromNLMHandle';
-  function GetNLMIDFromThreadID(threadID:longint;fileName:Pchar):longint;cdecl;external ThreadsNlm name 'GetNLMIDFromThreadID';
-  function GetNLMNameFromNLMID(NLMID:longint; 
-                               fileName:Pchar; 
-			       description:Pchar):longint;               cdecl;external ThreadsNlm name 'GetNLMNameFromNLMID';
-  function GetNLMNameFromNLMHandle(NLMHandle:longint; 
-                                   LDFileName:Pchar; 
-				   LDName:Pchar):longint;                cdecl;external ThreadsNlm name 'GetNLMNameFromNLMHandle';
-  function GetThreadContextSpecifier(threadID:longint):longint;          cdecl;external ThreadsNlm name 'GetThreadContextSpecifier';
-  function GetThreadGroupID:longint;                                     cdecl;external ThreadsNlm name 'GetThreadGroupID';
-  function __GetThreadIDFromPCB(PCB:longint):longint;                    cdecl;external Lib0Nlm name '__GetThreadIDFromPCB';
-  function GetThreadHandicap(threadID:longint):longint;                  cdecl;external ThreadsNlm name 'GetThreadHandicap';
-  function GetThreadID:longint;                                          cdecl;external ThreadsNlm name 'GetThreadID';
-  function GetThreadName(threadID:longint; tName:Pchar):longint;         cdecl;external ThreadsNlm name 'GetThreadName';
-  function MapNLMIDToHandle(NLMID:longint):longint;                      cdecl;external ThreadsNlm name 'MapNLMIDToHandle';
-  function PopThreadCleanup(execute:longint):TCLEANUP;                   cdecl;external ThreadsNlm name 'PopThreadCleanup';
-  function PopThreadGroupCleanup(execute:longint):TCLEANUP;              cdecl;external ThreadsNlm name 'PopThreadGroupCleanup';
-  function PushThreadCleanup(func:TCLEANUP):longint;                     cdecl;external ThreadsNlm name 'PushThreadCleanup';
-  function PushThreadGroupCleanup(func:TCLEANUP):longint;                cdecl;external ThreadsNlm name 'PushThreadGroupCleanup';
-  function RenameThread(threadID:longint; newName:Pchar):longint;        cdecl;external ThreadsNlm name 'RenameThread';
-  function ResumeThread(threadID:longint):longint;                       cdecl;external ThreadsNlm name 'ResumeThread';
-  function ReturnNLMVersionInfoFromFile(pathName:pchar; 
-                                        majorVersion:Plongint; 
-					minorVersion:Plongint; 
-					revision:Plongint; 
-					year:Plongint; 
-                                        month:Plongint; 
-					day:Plongint; 
-					copyrightString:pchar; 
-					description:pchar):longint;      cdecl;external NlmLibNlm name 'ReturnNLMVersionInfoFromFile';
-  function ReturnNLMVersionInfoFromFile(pathName:pchar; 
-                                        var majorVersion,minorVersion,revision:longint;
-					var year,month,day:longint; 
-					copyrightString:pchar; 
-					description:pchar):longint;      cdecl;external NlmLibNlm name 'ReturnNLMVersionInfoFromFile';
-
-  function ReturnNLMVersionInformation(NLMHandle:longint; 
-                                       majorVersion,minorVersion,revision,year,month,day:Plongint; 
-                                       copyrightString:pchar; description:pchar):longint;cdecl;external NlmLibNlm name 'ReturnNLMVersionInformation';
-  function ReturnNLMVersionInformation(NLMHandle:longint; 
-                                       var majorVersion,minorVersion,revision,year,month,day:longint;
-                                       copyrightString:pchar; description:pchar):longint;cdecl;external NlmLibNlm name 'ReturnNLMVersionInformation';
-
-  procedure ScheduleNoSleepAESProcessEvent(EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'ScheduleNoSleepAESProcessEvent';
-  procedure ScheduleSleepAESProcessEvent(EventNode:PAESProcessStructure);  cdecl;external ThreadsNlm name 'ScheduleSleepAESProcessEvent';
-
-
-  function ScheduleWorkToDo(ProcedureToCall:TWorkToDoProc; 
-                            workData       :pointer; 
-			    workToDo       :PWorkToDo):longint;            cdecl;external ThreadsNlm name 'ScheduleWorkToDo';
-  function SetNLMDontUnloadFlag(NLMID:longint):longint;                    cdecl;external ThreadsNlm name 'SetNLMDontUnloadFlag';
-  function SetNLMID(newNLMID:longint):longint;                             cdecl;external ThreadsNlm name 'SetNLMID';
-  function SetThreadContextSpecifier(threadID,
-                                     contextSpecifier:longint):longint;    cdecl;external ThreadsNlm name 'SetThreadContextSpecifier';
-  function SetThreadGroupID(newThreadGroupID:longint):longint;             cdecl;external ThreadsNlm name 'SetThreadGroupID';
-  procedure SetThreadHandicap(threadID, handicap:longint);                 cdecl;external ThreadsNlm name 'SetThreadHandicap';
-  function spawnlp(mode:longint; 
-                   path,arg0:Pchar; 
-		   args:array of const):longint;                           cdecl;external ThreadsNlm name 'spawnlp';
-  function spawnlp(mode:longint; 
-                   path,arg0:Pchar):longint;                               cdecl;external ThreadsNlm name 'spawnlp';
-  function spawnvp(mode:longint; 
-                   path,argv:PPchar):longint;                              cdecl;external ThreadsNlm name 'spawnvp';
-  function SuspendThread(threadID:longint):longint;                        cdecl;external ThreadsNlm name 'SuspendThread';
-  procedure ThreadSwitch;                                                  cdecl;external ThreadsNlm name 'ThreadSwitch';
-  procedure ThreadSwitchLowPriority;                                       cdecl;external ThreadsNlm name 'ThreadSwitchLowPriority';
-  procedure ThreadSwitchWithDelay;                                         cdecl;external ThreadsNlm name 'ThreadSwitchWithDelay';
-{-nwmediam.h-------------------------------------------------------------------}
-{$include npackon.inc}
-
-const
-   FORMAT_MEDIA = $0000;
-   TAPE_CONTROL = $0001;
-   ACTIVATE_FUNCTIONS = $0003;
-   MOUNT_FUNCTIONS = $0004;
-   SELECT_FUNCTIONS = $0005;
-   INSERTION_FUNCTIONS = $0006;
-   LOCK_FUNCTIONS = $0007;
-   MOVE_FUNCTIONS = $0008;
-   STAMP_FUNCTIONS = $0009;
-   SCAN_FUNCTIONS = $000A;
-   MAGAZINE_FUNCTIONS = $000D;
-{ IO Functions  }
-   RANDOM_READ = $0020;
-   RANDOM_WRITE = $0021;
-   RANDOM_WRITE_ONCE = $0022;
-   SEQUENTIAL_READ = $0023;
-   SEQUENTIAL_WRITE = $0024;
-   RESET_END_OF_TAPE = $0025;
-   SINGLE_FILE_MARK = $0026;
-   MULTIPLE_FILE_MARK = $0027;
-   SINGLE_SET_MARK = $0028;
-   MULTIPLE_SET_MARK = $0029;
-   SPACE_DATA_BLOCKS = $002A;
-   LOCATE_DATA_BLOCKS = $002B;
-   POSITION_PARTITION = $002C;
-   POSITION_MEDIA = $002D;
-   DEVICE_GENERIC_IOCTL = $003E;
-{ Object Types  }
-   UNKNOWN_OBJECT = $FFFF;
-   ADAPTER_OBJECT = 0;
-   CHANGER_OBJECT = 1;
-   DEVICE_OBJECT = 2;
-   MEDIA_OBJECT = 4;
-   PARTITION_OBJECT = 5;
-   SLOT_OBJECT = 6;
-   HOTFIX_OBJECT = 7;
-   MIRROR_OBJECT = 8;
-   PARITY_OBJECT = 9;
-   VOLUME_SEG_OBJECT = 10;
-   VOLUME_OBJECT = 11;
-   CLONE_OBJECT = 12;
-   MAGAZINE_OBJECT = 14;
-   UNIDENTIFIABLE_MEDIA = $00000001;
-   HIGH_SIERRA_CDROM_MEDIA = $00000002;
-   ISO_CDROM_MEDIA = $00000003;
-   MAC_CDROM_MEDIA = $00000004;
-   NETWARE_FILE_SYSTEM_MEDIA = $00000005;
-   INTERNAL_IDENTIFY_TYPE = $00000007;
-   SMS_MEDIA_TYPE = $00000008;
-{ Notify Event Bits  }
-   NOTIFY_OBJECT_CREATION = $0001;
-   NOTIFY_OBJECT_DELETION = $0002;
-   NOTIFY_OBJECT_ACTIVATED = $0004;
-   NOTIFY_OBJECT_DEACTIVATED = $0008;
-   NOTIFY_OBJECT_RESERVATION = $0010;
-   NOTIFY_OBJECT_UNRESERVATION = $0020;
-{ Object Status Bits  }
-   OBJECT_ACTIVATED = $00000001;
-   OBJECT_PHANTOM = $00000002;
-   OBJECT_ASSIGNABLE = $00000004;
-   OBJECT_ASSIGNED = $00000008;
-   OBJECT_RESERVED = $00000010;
-   OBJECT_BEING_IDENTIFIED = $00000020;
-   OBJECT_MAGAZINE_LOADED = $00000040;
-   OBJECT_FAILURE = $00000080;
-   OBJECT_REMOVABLE = $00000100;
-   OBJECT_READ_ONLY = $00000200;
-   OBJECT_IN_DEVICE = $00010000;
-   OBJECT_ACCEPTS_MAGAZINES = $00020000;
-   OBJECT_IS_IN_A_CHANGER = $00040000;
-   OBJECT_LOADABLE = $00080000;
-   OBJECT_BEING_LOADED = $00080000;
-   OBJECT_DEVICE_LOCK = $01000000;
-   OBJECT_CHANGER_LOCK = $02000000;
-   OBJECT_REMIRRORING = $04000000;
-   OBJECT_SELECTED = $08000000;
-{ Resource Tag Allocation Signatures  }
-{ 'PAMM'  }
-   MMApplicationSignature = $50424D4D;
-{ 'ONMM'  }
-   MMNotifySignature = $4F4E4D4D;
-{ 'DIMM'  }
-   MMIdentifySignature = $44494D4D;
-{ AlertTypes  }
-   ALERT_MESSAGE = $00000001;
-   ALERT_ACTIVATE = $00000002;
-   ALERT_DEACTIVATE = $00000003;
-   ALERT_DELETE = $00000004;
-{ AlertReasons  }
-   ALERT_HOTFIX_ERROR = $00000000;
-   ALERT_DRIVER_UNLOAD = $00000001;
-   ALERT_DEVICE_FAILURE = $00000002;
-   ALERT_PROGRAM_CONTROL = $00000003;
-   ALERT_MEDIA_DISMOUNT = $00000004;
-   ALERT_MEDIA_EJECT = $00000005;
-   ALERT_SERVER_DOWN = $00000006;
-   ALERT_SERVER_FAILURE = $00000007;
-   ALERT_MEDIA_LOAD = $00000008;
-   ALERT_MEDIA_MOUNT = $00000009;
-   ALERT_DRIVER_LOAD = $0000000A;
-   ALERT_LOST_SOFTWARE_FAULT_TOLERANCE = $0000000B;
-   ALERT_INTERNAL_OBJECT_DELETE = $0000000C;
-   ALERT_MAGAZINE_LOAD = $0000000D;
-   ALERT_MAGAZINE_UNLOAD = $0000000E;
-   ALERT_DEVICE_GOING_TO_BE_REMOVED = $0000000F;
-   ALERT_CHECK_DEVICE = $00000010;
-   ALERT_CONFIGURATION_CHANGE = $00000011;
-   ALERT_APPLICATION_UNREGISTER = $00000012;
-   ALERT_DAI_EMMULATION = $00000013;
-   ALERT_LOST_HARDWARE_FAULT_TOLERANCE = $00000014;
-   ALERT_INTERNAL_OBJECT_CREATE = $00000015;
-   ALERT_INTERNAL_MANAGER_REMOVE = $00000016;
-   ALERT_DEVICE_GOING_TO_BE_DEACTIVATED = $00000017;
-   ALERT_DEVICE_END_OF_MEDIA = $00000018;
-   ALERT_MEDIA_INSERTED = $00000019;
-   ALERT_UNKNOWN_DEVICE_ALERT = $0000001A;
-   ALERT_UNKNOWN_ADAPTER_ALERT = $0000001B;
-{ Function Control (Priority) Bits  }
-   PRIORITY_1 = $0001;
-   PRIORITY_2 = $0002;
-   ACCELERATED_BIT = $0004;
-   ELEVATOR_OFF_BIT = $0008;
-   RETURN_RAW_COMPLETION = $0010;
-   SCRAMBLE_BIT = $0020;
-{ Application Alert Codes  }
-   GOING_TO_BE_DEACTIVATED = $0001;
-   OBJECT_BEING_DEACTIVATED = $0002;
-   OBJECT_SIZE_CHANGED = $0003;
-   OBJECT_BEING_ACTIVATED = $0004;
-   OBJECT_BEING_DELETED = $0005;
-   OBJECT_LOST_FAULT_TOLERANCE = $0006;
-{ Initial Completion Codes  }
-   MESSAGE_PROCESSED = $00;
-   MESSAGE_DATA_MISSING = $01;
-   MESSAGE_POSTPONE = $02;
-   MESSAGE_ABORTED = $03;
-   MESSAGE_INVALID_PARAMETERS = $04;
-   MESSAGE_OBJECT_NOT_ACTIVE = $05;
-   MESSAGE_INVALID_OJECT = $06;
-   MESSAGE_FUNCTION_NOT_SUPPORTED = $07;
-   MESSAGE_INVALID_MODE = $08;
-   MESSAGE_INTERNAL_ERROR = $09;
-{ FinalCompletion Codes  }
-   FUNCTION_OK = $00;
-   FUNCTION_CORRECTED_MEDIA_ERROR = $10;
-   FUNCTION_MEDIA_ERROR = $11;
-   FUNCTION_DEVICE_ERROR = $12;
-   FUNCTION_ADAPTER_ERROR = $13;
-   FUNCTION_NOT_SUPPORTED_BY_DEVICE = $14;
-   FUNCTION_NOT_SUPPORTED_BY_DRIVER = $15;
-   FUNCTION_PARAMETER_ERROR = $16;
-   FUNCTION_MEDIA_NOT_PRESENT = $17;
-   FUNCTION_MEDIA_CHANGED = $18;
-   FUNCTION_PREVIOUSLY_WRITTEN = $19;
-   FUNCTION_MEDIA_NOT_FORMATED = $1A;
-   FUNCTION_BLANK_MEDIA = $1B;
-{end of partition }
-   FUNCTION_END_OF_MEDIA = $1C;
-   FUNCTION_FILE_MARK_DETECTED = $1D;
-   FUNCTION_SET_MARK_DETECTED = $1E;
-   FUNCTION_WRITE_PROTECTED = $1F;
-   FUNCTION_OK_EARLY_WARNING = $20;
-   FUNCTION_BEGINNING_OF_MEDIA = $21;
-   FUNCTION_MEDIA_NOT_FOUND = $22;
-   FUNCTION_MEDIA_NOT_REMOVED = $23;
-   FUNCTION_UNKNOWN_COMPLETION = $24;
-   FUNCTION_DATA_MISSING = $25;
-   FUNCTION_HOTFIX_ERROR = $26;
-   FUNCTION_HOTFIX_UPDATE_ERROR = $27;
-   FUNCTION_IO_ERROR = $28;
-   FUNCTION_CHANGER_SOURCE_EMPTY = $29;
-   FUNCTION_CHANGER_DEST_FULL = $2A;
-   FUNCTION_CHANGER_JAMMED = $2B;
-   FUNCTION_MAGAZINE_NOT_PRESENT = $2D;
-   FUNCTION_MAGAZINE_SOURCE_EMPTY = $2E;
-   FUNCTION_MAGAZINE_DEST_FULL = $2F;
-   FUNCTION_MAGAZINE_JAMMED = $30;
-   FUNCTION_ABORT_CAUSED_BY_PRIOR_ERROR = $31;
-   FUNCTION_CHANGER_ERROR = $32;
-   FUNCTION_MAGAZINE_ERROR = $33;
-{ ErrorCodes  }
-   MM_OK = $00;
-   MM_INVALID_OBJECT = $01;
-   MM_INVALID_APPLICATION = $02;
-   MM_INVALID_RESOURCETAG = $03;
-   MM_MEMORY_ALLOCATION_ERROR = $04;
-   MM_INVALID_MODE = $05;
-   MM_RESERVATION_CONFLICT = $06;
-   MM_PARAMETER_ERROR = $07;
-   MM_OBJECT_NOT_FOUND = $08;
-   MM_ATTRIBUTE_NOT_SETABLE = $09;
-   MM_FAILURE = $0A;
-{ Console Human Jukebox Definitions  }
-   HJ_INSERT_MESSAGE = 0;
-   HJ_EJECT_MESSAGE = 1;
-   HJ_ACK_MESSAGE = 2;
-   HJ_NACK_MESSAGE = 3;
-   HJ_ERROR = 4;
-{ Media Manager Structures  }
-type
-   PMM_F1_Structure = ^TMM_F1_Structure;
-   TMM_F1_Structure = record
-        code : word;
-        control : word;
-     end;
-
-   PPrivateIOConfigurationStucture = ^TPrivateIOConfigurationStucture;
-   TPrivateIOConfigurationStucture = record
-        f1 : longint;
-        f2 : word;
-        f3 : word;
-        f4 : array[0..3] of word;
-        f5 : longint;
-        f6 : word;
-        f7 : longint;
-        f8 : word;
-        f9 : array[0..1] of byte;
-        f10 : array[0..1] of byte;
-        f11 : longint;
-        f12 : longint;
-        f13 : longint;
-        f14 : array[0..17] of byte;
-        f15 : array[0..1] of longint;
-        f16 : word;
-        f17 : array[0..5] of byte;
-     end;
-
-   PAdapterInfoDef = ^TAdapterInfoDef;
-   TAdapterInfoDef = record
-        systemtype : byte;
-        processornumber : byte;
-        uniquetag : word;
-        systemnumber : longint;
-        devices : array[0..31] of longint;
-        configinfo : TPrivateIOConfigurationStucture;
-        drivername : array[0..35] of byte;
-        systemname : array[0..63] of byte;
-        numberofdevices : longint;
-        reserved : array[0..6] of longint;
-     end;
-
-   PAttributeInfoDef = ^TAttributeInfoDef;
-   TAttributeInfoDef = record
-        name : array[0..63] of byte;
-        attributetype : longint;
-        nextattributeid : longint;
-        attributesize : longint;
-     end;
-
-   PChangerInfoDef = ^TChangerInfoDef;
-   TChangerInfoDef = record
-        numberofdevices : longint;
-        numberofslots : longint;
-        numberofmailslots : longint;
-        reserved : array[0..7] of longint;
-        slotmappingtable : array[0..0] of longint;
-     end;
-
-   PDeviceInfoDef = ^TDeviceInfoDef;
-   TDeviceInfoDef = record
-        status : longint;
-        controllernumber : byte;
-        drivenumber : byte;
-        cardnumber : byte;
-        systemtype : byte;
-        accessflags : byte;
-        _type : byte;
-        blocksize : byte;
-        sectorsize : byte;
-        heads : byte;
-        sectors : byte;
-        cylinders : word;
-        capacity : longint;
-        mmadapternumber : longint;
-        mmmedianumber : longint;
-        rawname : array[0..39] of byte;
-        reserved : array[0..7] of longint;
-     end;
-
-   PPrivateMediaInfoDef = ^TPrivateMediaInfoDef;
-   TPrivateMediaInfoDef = record
-        f1 : array[0..63] of byte;
-        f2 : longint;
-        f3 : longint;
-     end;
-
-   PGenericInfoDef = ^TGenericInfoDef;
-   TGenericInfoDef = record
-        mediainfo : TPrivateMediaInfoDef;
-        mediatype : longint;
-        cartridgetype : longint;
-        unitsize : longint;
-        blocksize : longint;
-        capacity : longint;
-        preferredunitsize : longint;
-        name : array[0..63] of byte;
-        _type : longint;
-        status : longint;
-        functionmask : longint;
-        controlmask : longint;
-        parentcount : longint;
-        siblingcount : longint;
-        childcount : longint;
-        specificinfosize : longint;
-        objectuniqueid : longint;
-        mediaslot : longint;
-     end;
-
-   PHotfixInfoDef = ^THotfixInfoDef;
-   THotfixInfoDef = record
-        hotfixoffset : longint;
-        hotfixidentifier : longint;
-        numberoftotalblocks : longint;
-        numberofusedblocks : longint;
-        numberofavailableblocks : longint;
-        numberofsystemblocks : longint;
-        reserved : array[0..7] of longint;
-     end;
-
-   PIdentifierInfoDef = ^TIdentifierInfoDef;
-   TIdentifierInfoDef = record
-        applicationtype : longint;
-        mediatype : longint;
-        cartridgetype : longint;
-        name : array[0..63] of byte;
-        stampflag : longint;
-     end;
-
-   PInsertRequestDef = ^TInsertRequestDef;
-   TInsertRequestDef = record
-        devicenumber : longint;
-        mailslot : longint;
-        medianumber : longint;
-        mediacount : longint;
-     end;
-
-   PMagazineInfoDef = ^TMagazineInfoDef;
-   TMagazineInfoDef = record
-        numberofslots : longint;
-        reserved : array[0..7] of longint;
-        slotmappingtable : array[0..0] of longint;
-     end;
-
-   PMappintInfoHeaderDef = ^TMappintInfoHeaderDef;
-   TMappintInfoHeaderDef = record
-        parentcount : longint;
-        siblingcount : longint;
-        childcount : longint;
-     end;
-
-   PMediaInfoDef = ^TMediaInfoDef;
-   TMediaInfoDef = record
-        _label : array[0..63] of byte;
-        identificationtype : longint;
-        identificationtimestamp : longint;
-     end;
-
-   PMediaRequestDef = ^TMediaRequestDef;
-   TMediaRequestDef = record
-        devicenumber : longint;
-        mailslot : longint;
-        medianumber : longint;
-        mediacount : longint;
-     end;
-
-   PMirrorInfoDef = ^TMirrorInfoDef;
-   TMirrorInfoDef = record
-        mirrorcount : longint;
-        mirroridentifier : longint;
-        mirrormembers : array[0..7] of longint;
-        mirrorsynchflags : array[0..7] of byte;
-        reserved : array[0..7] of longint;
-     end;
-
-   PPartitionInfoDef = ^TPartitionInfoDef;
-   TPartitionInfoDef = record
-        partitionertype : longint;
-        partitiontype : longint;
-        partitionoffset : longint;
-        partitionsize : longint;
-        reserved : array[0..7] of longint;
-     end;
-
-{ these also correspond to offsets in struct  ObjectDef  }
-   PResourceTagDef = ^TResourceTagDef;
-   TResourceTagDef = record
-        reserved : array[0..1] of longint;
-        resourcetagtype : longint;
-        resourcetagcount : longint;
-        resourcenext : PResourceTagDef;
-        resourcelast : PResourceTagDef;
-     end;
-
-{$include npackoff.inc}
-
-function HJ_Media_Request_Ack(minfo:PInsertRequestDef; ackcode:longint; uniqueid:longint):longint;cdecl;external 'clib' name 'HJ_Media_Request_Ack';
-function MM_Abort_Function(messagehandle:longint):longint;cdecl;external 'clib' name 'MM_Abort_Function';
-function MM_Check_For_Pending_Aborts(OSRequestHandle:longint):longint;cdecl;external 'clib' name 'MM_Check_For_Pending_Aborts';
-function MM_Create_Media_Object(objectnumber:longint; mediainfo:PMediaInfoDef):longint;cdecl;external 'clib' name 'MM_Create_Media_Object';
-procedure MM_ExecuteMessages;cdecl;external 'clib' name 'MM_ExecuteMessages';
-function MM_Find_Identifier(lastidentifiernumber:Plongint):longint;cdecl;external 'clib' name 'MM_Find_Identifier';
-function MM_Find_Identifier(var lastidentifiernumber:longint):longint;cdecl;external 'clib' name 'MM_Find_Identifier';
-function MM_Find_Object_Type(typ:longint; nextindicator:Plongint):longint;cdecl;external 'clib' name 'MM_Find_Object_Type';
-function MM_Find_Object_Type(typ:longint; var nextindicator:longint):longint;cdecl;external 'clib' name 'MM_Find_Object_Type';
-function MM_Object_Blocking_IO (returnparameter:Plongint;
-                                objecthandle:longint;
-                                _function:TMM_F1_Structure;
-                                parameter0:longint;
-                                parameter1:longint;
-                                parameter2:longint;
-                                bufferlength:longint;
-                                buffer:pointer):longint;cdecl;external 'clib' name 'MM_Object_Blocking_IO';
-function MM_Object_Blocking_IO (var returnparameter:longint;
-                                objecthandle:longint;
-                                _function:TMM_F1_Structure;
-                                parameter0:longint;
-                                parameter1:longint;
-                                parameter2:longint;
-                                bufferlength:longint;
-                                var buffer):longint;cdecl;external 'clib' name 'MM_Object_Blocking_IO';
-// This call is not handled by the server libraries
-//function MM_Object_IO(messagehandle:Plongint; applicationrequesthandle:longint; objecthandle:longint; _function:TMM_F1_Structure; parameter0:longint;
-//               parameter1:longint; parameter2:longint; bufferlength:longint; buffer:pointer; callbackroutine:procedure ):longint;cdecl;external 'clib' name 'MM_Object_IO';
-
-type TLongintCDeclFunc = function :longint; cdecl;
-     TCdeclProc        = procedure; cdecl;
-
-function MM_Register_Application (applicationhandle:Plongint;
-                                  applicationid:longint;
-                                  name:PChar;
-                                  reserved:longint;
-                                  mediaconsoleroutine:TLongintCDeclFunc;
-                                  resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Application';
-
-function MM_Register_Identification_Routines (oshandle:Plongint;
-                                              applicationhandle:longint;
-                                              identifyroutine:TLongintCDeclFunc;
-                                              unstamproutine:TLongintCDeclFunc;
-                                              stamproutine:TLongintCDeclFunc;
-                                              identifiertype:longint;
-                                              identifiername:PBYTE;
-                                              resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Identification_Routines';
-function MM_Register_Notify_Routine (oshandle:Plongint;
-                                     applicationhandle:longint;
-                                     notifyroutine:TCdeclProc;
-                                     objectclass:longint;
-                                     eventmask:longint;
-                                     resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Notify_Routine';
-// This call is not handled by the server libraries
-//function MM_Release_Object(objecthandle:longint; applicationhandle:longint):longint;cdecl;external 'clib' name 'MM_Release_Object';
-
-function MM_Release_Unload_Semaphore(currentinstance:longint):longint;cdecl;external 'clib' name 'MM_Release_Unload_Semaphore';
-function MM_Rename_Object(objectID:longint; para2:PBYTE):longint;cdecl;external 'clib' name 'MM_Rename_Object';
-// This call is not handled by the server libraries
-//function MM_Reserve_Object(objecthandle:Plongint; applicationidentifier:longint; objectid:longint; iomode:longint; applicationhandle:longint;
-//               notifyroutine:function :longint):longint;cdecl;external 'clib' name 'MM_Reserve_Object';
-
-function MM_Return_Identifier_Info(identifiernumber:longint; info:PIdentifierInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Identifier_Info';
-function MM_Return_Object_Attribute(objectid:longint; attributeid:longint; length:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Return_Object_Attribute';
-function MM_Return_Object_Generic_Info(objectid:longint; info:PGenericInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Object_Generic_Info';
-function MM_Return_Object_Mapping_Info(objectid:longint; mappinginfolength:longint; mappinginfo:Plongint):longint;cdecl;external 'clib' name 'MM_Return_Object_Mapping_Info';
-function MM_Return_Object_Specific_Info(objectid:longint; infolength:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Return_Object_Specific_Info';
-function MM_Return_Object_Table_Size:longint;cdecl;external 'clib' name 'MM_Return_Object_Table_Size';
-function MM_Return_Objects_Attributes(objectid:longint; attributeid:longint; info:PAttributeInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Objects_Attributes';
-function MM_Set_Object_Attribute(objecthandle:longint; attributeid:longint; length:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Set_Object_Attribute';
-function MM_Set_Unload_Semaphore(currentinstance:Plongint):longint;cdecl;external 'clib' name 'MM_Set_Unload_Semaphore';
-function MM_Special_Object_Blocking_IO(returnparameter:Plongint; objectnumber:longint; _function:TMM_F1_Structure; parameter0:longint; parameter1:longint;
-               parameter2:longint; bufferlength:longint; buffer:pointer):longint;cdecl;external 'clib' name 'MM_Special_Object_Blocking_IO';
-function MM_Unregister_Application(applicationhandle,applicationid:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Application';
-function MM_Unregister_Identification_Routines(handle,applicationtype:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Identification_Routines';
-function MM_Unregister_Notify_Routine(oshandle, applicationhandle:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Notify_Routine';
-{-ioctl.h----------------------------------------------------------------------}
-const
-   I_NWRITE = 101;
-   I_SETBUF = 102;
-
-function ioctl(fd:longint; command:longint; args:array of const):longint;cdecl;external 'clib' name 'ioctl';
-function ioctl(fd:longint; command:longint):longint;cdecl;external 'clib' name 'ioctl';
-{-sys/socket.h-----------------------------------------------------------------}
-{$PACKRECORDS C}
-
-type
-   Piovec = ^Tiovec;
-   Tiovec = record
-        iov_base : Pchar;
-        iov_len : longint;
-     end;
-
-{ Berkeley Sockets definitions and types  }
-
-const
-   FD_SETSIZE = 16;
-type
-
-   Pfd_array = ^Tfd_array;
-   Tfd_array = longint;
-
-   Pfd_set = ^Tfd_set;
-   Tfd_set = record
-        fds : Tfd_array;
-     end;
-
-   Ptimeval = ^Ttimeval;
-   Ttimeval = record
-     tv_sec  : longint;
-     tv_usec : longint;
-   end;
-
-{ definitions related to sockets: types, address families, options  }
-{ types  }
-{ just NW OFSD, no socket  }
-
-const
-   SOCK_NULL = 0;
-{ stream socket  }
-   SOCK_STREAM = 1;
-{ datagram socket  }
-   SOCK_DGRAM = 2;
-{ raw-protocol interface  }
-   SOCK_RAW = 3;
-{ reliably-delivered message  }
-   SOCK_RDM = 4;
-{ sequenced packet stream  }
-   SOCK_SEQPACKET = 5;
-{ option flags per-socket  }
-{ turn on debugging info recording  }
-   SO_DEBUG = $0001;
-{ socket has had listen()  }
-   SO_ACCEPTCONN = $0002;
-{ allow local address reuse  }
-   SO_REUSEADDR = $0004;
-{ keep connections alive  }
-   SO_KEEPALIVE = $0008;
-{ just use interface addresses  }
-   SO_DONTROUTE = $0010;
-{ permit sending of broadcast msgs  }
-   SO_BROADCAST = $0020;
-{ bypass hardware when possible  }
-   SO_USELOOPBACK = $0040;
-{ linger on close if data present  }
-   SO_LINGER = $0080;
-{ leave received OOB data in line  }
-   SO_OOBINLINE = $0100;
-{
-   N.B.: The following definition is present only for compatibility with
-   release 3.0. It will disappear in later releases.
- }
-{ ~SO_LINGER  }
-   SO_DONTLINGER =  not (SO_LINGER);
-{ additional options, not kept in so_options  }
-{ send buffer size  }
-   SO_SNDBUF = $1001;
-{ receive buffer size  }
-   SO_RCVBUF = $1002;
-{ send low-water mark  }
-   SO_SNDLOWAT = $1003;
-{ receive low-water mark  }
-   SO_RCVLOWAT = $1004;
-{ send timeout  }
-   SO_SNDTIMEO = $1005;
-{ receive timeout  }
-   SO_RCVTIMEO = $1006;
-{ get error status and clear  }
-   SO_ERROR = $1007;
-{ get socket type  }
-   SO_TYPE = $1008;
-{ additional option to be used with level IPPROTO_TCP  }
-{ turn off the Nagle delay algorithm  }
-   TCP_NODELAY = 1;
-
-   SIOCATMARK      = 8;              // at oob mark?
-   SIOCDGRAMSIZE   = 500;
-   IP_INBOUND_IF   = 501;
-   IP_OUTBOUND_IF  = 502;
-
-
-{ structure used for manipulating linger option  }
-{ option on/off  }
-{ linger time  }
-
-type
-   Plinger = ^Tlinger;
-   Tlinger = record
-        l_onoff : longint;
-        l_linger : longint;
-     end;
-
-{ level number for get/setsockopt() to apply to socket itself  }
-{ options for socket level  }
-
-const
-   SOL_SOCKET = $ffff;
-{ address families  }
-{ unspecified  }
-   AF_UNSPEC = 0;
-{ local to host (pipes, portals)  }
-   AF_UNIX = 1;
-{ internetwork: UDP, TCP, etc.  }
-   AF_INET = 2;
-{ Xerox NS protocols  }
-   AF_NS = 6;
-{ AppleTalk  }
-   AF_APPLETALK = 16;
-{ umbrella for all (e.g. protosw lookup)  }
-   AF_OSI = 19;
-{ U.S. Government OSI  }
-   AF_GOSIP = 22;
-   AF_MAX = 21;
-{ structure used by kernel to store most addresses  }
-{ address family  }
-{ up to 14 bytes of direct address  }
-type
-   Psockaddr = ^Tsockaddr;
-   Tsockaddr = record
-        sa_family : word;
-        sa_data : array[0..13] of char;
-     end;
-
-{ structure used by kernel to pass protocol information in raw sockets  }
-{ address family  }
-{ protocol  }
-   Psockproto = ^Tsockproto;
-   Tsockproto = record
-        sp_family : word;
-        sp_protocol : word;
-     end;
-
-{ protocol families, same as address families for now  }
-
-const
-   PF_UNSPEC = AF_UNSPEC;
-   PF_UNIX = AF_UNIX;
-   PF_INET = AF_INET;
-   PF_NS = AF_NS;
-   PF_APPLETALK = AF_APPLETALK;
-   PF_OSI = AF_OSI;
-   PF_GOSIP = AF_GOSIP;
-   PF_MAX = AF_MAX;
-{ test protocol "numbered pipe"  }
-   TSTPROTO_NPIPE = 0;
-{ maximum queue length specifiable by listen  }
-   SOMAXCONN = 5;
-{
-   Message header for recvmsg and sendmsg calls.
-  }
-{ optional address  }
-{ size of address  }
-{ scatter/gather array  }
-{ number of elements in msg_iov  }
-{ access rights sent/received  }
-type
-   Pmsghdr = ^Tmsghdr;
-   Tmsghdr = record
-        msg_name : Pchar;
-        msg_namelen : longint;
-        msg_iov : Piovec;
-        msg_iovlen : longint;
-        msg_accrights : Pchar;
-        msg_accrightslen : longint;
-     end;
-
-{ process out-of-band data  }
-
-const
-   MSG_OOB = $1;
-{ peek at incoming message  }
-   MSG_PEEK = $2;
-{ send without using routing tables  }
-   MSG_DONTROUTE = $4;
-   MSG_MAXIOVLEN = 16;
-{ for NLM clients  }
-type TSKT = longint;
-
-function accept(s:TSKT; addr:Psockaddr; addrlen:Plongint):longint;cdecl;external 'clib' name 'accept';
-function accept(s:TSKT; var addr:Tsockaddr; var addrlen:longint):longint;cdecl;external 'clib' name 'accept';
-function bind(s:TSKT; name:Psockaddr; namelen:longint):longint;cdecl;external 'clib' name 'bind';
-function connect(s:TSKT; name:Psockaddr; namelen:longint):longint;cdecl;external 'clib' name 'connect';
-function getpeername(s:TSKT; name:Psockaddr; namelen:Plongint):longint;cdecl;external 'clib' name 'getpeername';
-function getsockname(s:TSKT; name:Psockaddr; namelen:Plongint):longint;cdecl;external 'clib' name 'getsockname';
-function getsockopt(s:TSKT; level:longint; name:longint; val:Pchar; len:Plongint):longint;cdecl;external 'clib' name 'getsockopt';
-function getsockopt(s:TSKT; level:longint; name:longint; val:Pchar; var len:longint):longint;cdecl;external 'clib' name 'getsockopt';
-
-function listen(s:TSKT; backlog:longint):longint;cdecl;external 'clib' name 'listen';
-function readv(s:TSKT; iov:Piovec; iovcnt:longint):longint;cdecl;external 'clib' name 'readv';
-function recv(s:TSKT; msg:Pchar; len:longint; flags:longint):longint;cdecl;external 'clib' name 'recv';
-function recv(s:TSKT; var data; len:longint; flags:longint):longint;cdecl;external 'clib' name 'recv';
-
-function recvfrom(s:TSKT; msg:Pchar; len:longint; flags:longint; from:Psockaddr;
-           fromlen:Plongint):longint;cdecl;external 'clib' name 'recvfrom';
-function recvfrom(s:TSKT; var data; len:longint; flags:longint; from:Psockaddr;
-           var fromlen:longint):longint;cdecl;external 'clib' name 'recvfrom';
-
-function recvmsg(s:TSKT; msg:Pmsghdr; flags:longint):longint;cdecl;external 'clib' name 'recvmsg';
-function send(s:TSKT; msg:Pchar; len:longint; flags:longint):longint;cdecl;external 'clib' name 'send';
-function send(s:TSKT; var data; len:longint; flags:longint):longint;cdecl;external 'clib' name 'send';
-function sendto(s:TSKT; msg:Pchar; len:longint; flags:longint; _to:Psockaddr;
-           tolen:longint):longint;cdecl;external 'clib' name 'sendto';
-function sendto(s:TSKT; var data; len:longint; flags:longint; _to:Psockaddr;
-           tolen:longint):longint;cdecl;external 'clib' name 'sendto';
-
-function sendmsg(s:TSKT; msg:Pmsghdr; flags:longint):longint;cdecl;external 'clib' name 'sendmsg';
-function setsockopt(s:TSKT; level:longint; name:longint; val:Pchar; len:longint):longint;cdecl;external 'clib' name 'setsockopt';
-function setsockopt(s:TSKT; level:longint; name:longint; var value; len:longint):longint;cdecl;external 'clib' name 'setsockopt';
-function shutdown(s:TSKT; how:longint):longint;cdecl;external 'clib' name 'shutdown';
-function socket(domain:longint; _type:longint; protocol:longint):longint;cdecl;external 'clib' name 'socket';
-function writev(s:TSKT; iov:Piovec; iovcnt:longint):longint;cdecl;external 'clib' name 'writev';
-function select(width:longint; readfds:Pfd_set; writefds:Pfd_set; exceptfds:Pfd_set; timeout:Ptimeval):longint;cdecl;external 'clib' name 'select';
-
-{-sys/time.h-------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-{ commonly-used definitions...  }
-
-const
-   SEC = 1;
-   MILLISEC = 1000;
-   MICROSEC = 1000000;
-   NANOSEC = 1000000000;
-{ wall clock, bound to LWP  }
-   __CLOCK_REALTIME0 = 0;
-{ user CPU usage clock  }
-   CLOCK_VIRTUAL = 1;
-{ user and system CPU usage clock  }
-   CLOCK_PROF = 2;
-{ wall clock, not bound  }
-   __CLOCK_REALTIME3 = 3;
-   CLOCK_REALTIME = __CLOCK_REALTIME3;
-{ set timer relative  }
-   TIMER_RELTIME = $0;
-{ set timer absolute  }
-   TIMER_ABSTIME = $1;
-{ time expressed in seconds and nanoseconds  }
-{ seconds  }
-{ and nanoseconds  }
-type
-
-   Ptimespec = ^Ttimespec;
-   Ttimespec = record
-        tv_sec : Ttime_t;
-        tv_nsec : longint;
-     end;
-   Ttimespec_t = Ttimespec;
-   Ptimespec_t = ^Ttimespec_t;
-   Ttimestrc_t = Ttimespec;
-   Ptimestrc_t = ^Ttimestrc_t;
-
-{-sys/utsname.h----------------------------------------------------------------}
-const
-   _SYS_NMLN = 260;
-
-type
-   Putsname = ^Tutsname;
-   Tutsname = record
-     sysname  : array[0..(_SYS_NMLN)-1] of char;  // name of operating system implementation
-     release  : array[0..(_SYS_NMLN)-1] of char;
-     version  : array[0..(_SYS_NMLN)-1] of char;
-     nodename : array[0..(_SYS_NMLN)-1] of char;
-     machine  : array[0..(_SYS_NMLN)-1] of char;
-     _library : array[0..(_SYS_NMLN)-1] of char;
-   end;
-
-function uname(name:Putsname):longint;cdecl;external 'clib' name 'uname';
-function uname(var name:Tutsname):longint;cdecl;external 'clib' name 'uname';
-
-{-sys/stat.h-------------------------------------------------------------------}
-{$PACKRECORDS C}
-
-{ POSIX file types  }
-{ type of file (mask for following)  }
-
-const
-   S_IFMT = 0170000;
-{ first-in/first-out (pipe)  }
-   S_IFIFO = 0010000;
-{ character-special file  }
-   S_IFCHR = 0020000;
-{ directory  }
-   S_IFDIR = 0040000;
-{ blocking device (not used on NetWare)  }
-   S_IFBLK = 0060000;
-{ regular  }
-   S_IFREG = 0100000;
-{ symbolic link (not used on NetWare)  }
-   S_IFLNK = 0120000;
-{ Berkeley socket  }
-   S_IFSOCK = 0140000;
-
-{ POSIX file modes: owner (user) permission  }
-
-const
-   S_IRWXU = 0000700;
-   S_IRUSR = 0000400;
-   S_IWUSR = 0000200;
-   S_IXUSR = 0000100;
-   S_IREAD = S_IRUSR;
-   S_IWRITE = S_IWUSR;
-   S_IEXEC = S_IXUSR;
-{ POSIX file modes: group permission  }
-   S_IRWXG = 0000070;
-   S_IRGRP = 0000040;
-   S_IWGRP = 0000020;
-   S_IXGRP = 0000010;
-{ POSIX file modes: other permission  }
-   S_IRWXO = 0000007;
-   S_IROTH = 0000004;
-   S_IWOTH = 0000002;
-   S_IXOTH = 0000001;
-{ Novell-defined additional directory modes for mkdir()  }
-{ system directory  }
-   S_DSYSTEM = $00100000;
-{ hidden directory  }
-   S_DHIDE = $00200000;
-{ delete-inhibit  }
-   S_DDEL_INH = $00400000;
-{ rename-inhibit  }
-   S_DREN_INH = $00800000;
-{ purge-immediate  }
-   S_DPURGE_IMM = $01000000;
-{ compress-immediate  }
-   S_DCOMP_IMM = $02000000;
-{ no compression  }
-   S_DCOMP_NO = $04000000;
-{ equivalent to mode = 0  }
-   S_DALL = $01FB;
-{ POSIX setuid, setgid, and sticky  }
-   S_ISUID = 0004000;
-   S_ISGID = 0002000;
-   S_ISVTX = 0001000;
-   
-type
-   Pstat = ^Tstat;
-   Tstat = record
-        st_dev : Tdev_t;
-        st_ino : Tino_t;
-        st_mode : word;
-        st_pad1 : word;
-        st_nlink : dword;
-        st_uid : dword;
-        st_gid : dword;
-        st_rdev : Tdev_t;
-        st_size : Toff_t;
-        st_atime : Ttime_t;
-        st_mtime : Ttime_t;
-        st_ctime : Ttime_t;
-        st_btime : Ttime_t;
-        st_attr : dword;
-        st_archivedID : dword;
-        st_updatedID : dword;
-        st_inheritedRightsMask : word;
-        st_pad2 : word;
-        st_originatingNameSpace : dword;
-        st_blksize : Tsize_t;
-        st_blocks : Tsize_t;
-        st_flags : dword;
-        st_spare : array[0..3] of dword;
-        st_name : array[0..(255 + 1)-1] of byte;
-     end;
-
-{ definitions of older structure technology are mostly for reference  }
-{ v4.11  }
-{----------------- new fields starting in v4.11 -------------------------  }
-   Pstat411 = ^Tstat411;
-   Tstat411 = record
-        st_dev : Tdev_t;
-        st_ino : Tino_t;
-        st_mode : word;
-        st_nlink : smallint;
-        st_uid : dword;
-        st_gid : smallint;
-        st_rdev : Tdev_t;
-        st_size : Toff_t;
-        st_atime : Ttime_t;
-        st_mtime : Ttime_t;
-        st_ctime : Ttime_t;
-        st_btime : Ttime_t;
-        st_attr : dword;
-        st_archivedID : dword;
-        st_updatedID : dword;
-        st_inheritedRightsMask : word;
-        st_originatingNameSpace : byte;
-        st_name : array[0..(255 + 1)-1] of byte;
-        st_blksize : Tsize_t;
-        st_blocks : Tsize_t;
-        st_flags : dword;
-        st_spare : array[0..3] of dword;
-     end;
-
-{ v3.12, v4.0, v4.01, v4.02 and v4.10  }
-   Pstat410 = ^Tstat410;
-   Tstat410 = record
-        st_dev : Tdev_t;
-        st_ino : Tino_t;
-        st_mode : word;
-        st_nlink : smallint;
-        st_uid : dword;
-        st_gid : smallint;
-        st_rdev : Tdev_t;
-        st_size : Toff_t;
-        st_atime : Ttime_t;
-        st_mtime : Ttime_t;
-        st_ctime : Ttime_t;
-        st_btime : Ttime_t;
-        st_attr : dword;
-        st_archivedID : dword;
-        st_updatedID : dword;
-        st_inheritedRightsMask : word;
-        st_originatingNameSpace : byte;
-        st_name : array[0..12] of byte;
-     end;
-
-function chmod(path:Pchar; mode:Tmode_t):longint;cdecl;external 'clib' name 'chmod';
-function mkdir(path:Pchar):longint;cdecl;external 'clib' name 'mkdir';
-function mkdir_510(pathname:Pchar; mode:Tmode_t):longint;cdecl;external 'clib' name 'mkdir_510';
-function umask(cmask:Tmode_t):Tmode_t;cdecl;external 'clib' name 'umask';
-function fstat_410(fildes:longint; buf:Pstat410):longint;cdecl;external 'clib' name 'fstat_410';
-function fstat_410(fildes:longint; var buf:Tstat410):longint;cdecl;external 'clib' name 'fstat_410';
-function fstat_411(fildes:longint; buf:Pstat411):longint;cdecl;external 'clib' name 'fstat_411';
-function fstat_411(fildes:longint; var buf:Tstat411):longint;cdecl;external 'clib' name 'fstat_411';
-function fstat_500(fildes:longint; buf:Pstat):longint;cdecl;external 'clib' name 'fstat_500';
-function fstat_500(fildes:longint; var buf:Tstat):longint;cdecl;external 'clib' name 'fstat_500';
-function fstat (fildes:longint; buf:Pstat):longint;cdecl;external 'clib' name 'fstat_500';
-function fstat (fildes:longint; var buf:Tstat):longint;cdecl;external 'clib' name 'fstat_500';
-
-function stat_410(path:Pchar; buf:Pstat410):longint;cdecl;external 'clib' name 'stat_410';
-function stat_410(path:Pchar; var buf:Tstat410):longint;cdecl;external 'clib' name 'stat_410';
-function stat_411(path:Pchar; buf:Pstat411):longint;cdecl;external 'clib' name 'stat_411';
-function stat_411(path:Pchar; var buf:Tstat411):longint;cdecl;external 'clib' name 'stat_411';
-function stat_500(path:Pchar; buf:Pstat):longint;cdecl;external 'clib' name 'stat_500';
-function stat_500(path:Pchar; var buf:Tstat):longint;cdecl;external 'clib' name 'stat_500';
-function stat (path:Pchar; buf:Pstat):longint;cdecl;external 'clib' name 'stat_500';
-function stat (path:Pchar; var buf:Tstat):longint;cdecl;external 'clib' name 'stat_500';
-{------------------------------------------------------------------------------}
-
-implementation
-
-function CLK_TCK : longint;
-begin
-   CLK_TCK:=__get_CLK_TCK;
-end;
-
-function tzname : pchar;
-begin
-   tzname:=__get_tzname^;
-end;
-
-function NetWareErrno : longint;
-begin
-  NetWareErrno := __get_NWErrno_ptr()^;
-end;
-
-function stdin : PFILE;
-begin
-  stdin := __get_stdin^;
-end;
-
-function stdout : PFILE;
-begin
-  stdout := __get_stdout^;
-end;
-
-function stderr : PFILE;
-begin
-  stderr := __get_stderr^;
-end;
-
-function bisecond(var a : TDOSTime) : word;
-begin
-   bisecond:=(a.flag0 and bm_TDOSTime_bisecond) shr bp_TDOSTime_bisecond;
-end;
-
-procedure set_bisecond(var a : TDOSTime; __bisecond : word);
-begin
-   a.flag0:=a.flag0 or ((__bisecond shl bp_TDOSTime_bisecond) and bm_TDOSTime_bisecond);
-end;
-
-function minute(var a : TDOSTime) : word;
-begin
-   minute:=(a.flag0 and bm_TDOSTime_minute) shr bp_TDOSTime_minute;
-end;
-
-procedure set_minute(var a : TDOSTime; __minute : word);
-begin
-   a.flag0:=a.flag0 or ((__minute shl bp_TDOSTime_minute) and bm_TDOSTime_minute);
-end;
-
-function hour(var a : TDOSTime) : word;
-begin
-   hour:=(a.flag0 and bm_TDOSTime_hour) shr bp_TDOSTime_hour;
-end;
-
-procedure set_hour(var a : TDOSTime; __hour : word);
-begin
-   a.flag0:=a.flag0 or ((__hour shl bp_TDOSTime_hour) and bm_TDOSTime_hour);
-end;
-
-function day(var a : TDOSDate) : word;
-begin
-   day:=(a.flag0 and bm_TDOSDate_day) shr bp_TDOSDate_day;
-end;
-
-procedure set_day(var a : TDOSDate; __day : word);
-begin
-   a.flag0:=a.flag0 or ((__day shl bp_TDOSDate_day) and bm_TDOSDate_day);
-end;
-
-function month(var a : TDOSDate) : word;
-begin
-   month:=(a.flag0 and bm_TDOSDate_month) shr bp_TDOSDate_month;
-end;
-
-procedure set_month(var a : TDOSDate; __month : word);
-begin
-   a.flag0:=a.flag0 or ((__month shl bp_TDOSDate_month) and bm_TDOSDate_month);
-end;
-
-function yearsSince80(var a : TDOSDate) : word;
-begin
-   yearsSince80:=(a.flag0 and bm_TDOSDate_yearsSince80) shr bp_TDOSDate_yearsSince80;
-end;
-
-procedure set_yearsSince80(var a : TDOSDate; __yearsSince80 : word);
-begin
-   a.flag0:=a.flag0 or ((__yearsSince80 shl bp_TDOSDate_yearsSince80) and bm_TDOSDate_yearsSince80);
-end;
-
-function bisecond(var a : T_DOSTime) : word;
-begin
-   bisecond:=(a.flag0 and bm_T_DOSTime_bisecond) shr bp_T_DOSTime_bisecond;
-end;
-
-procedure set_bisecond(var a : T_DOSTime; __bisecond : word);
-begin
-   a.flag0:=a.flag0 or ((__bisecond shl bp_T_DOSTime_bisecond) and bm_T_DOSTime_bisecond);
-end;
-
-function minute(var a : T_DOSTime) : word;
-begin
-   minute:=(a.flag0 and bm_T_DOSTime_minute) shr bp_T_DOSTime_minute;
-end;
-
-procedure set_minute(var a : T_DOSTime; __minute : word);
-begin
-   a.flag0:=a.flag0 or ((__minute shl bp_T_DOSTime_minute) and bm_T_DOSTime_minute);
-end;
-
-function hour(var a : T_DOSTime) : word;
-begin
-   hour:=(a.flag0 and bm_T_DOSTime_hour) shr bp_T_DOSTime_hour;
-end;
-
-procedure set_hour(var a : T_DOSTime; __hour : word);
-begin
-   a.flag0:=a.flag0 or ((__hour shl bp_T_DOSTime_hour) and bm_T_DOSTime_hour);
-end;
-
-end.
-
-
-{
+
+
+  function AtUnload(func:Tprocedure):longint;                       cdecl;external ThreadsNlm name 'AtUnload';
+  function BeginThread(func:TThreadFunc;
+                       stackP:pointer;
+		       stackSize:dword;
+		       arg:pointer):longint;                        cdecl;external ThreadsNlm name 'BeginThread';
+  function BeginThreadGroup(func:TThreadFunc;
+                            stackP:pointer;
+			    stackSize:dword;
+			    arg:pointer):longint;                   cdecl;external ThreadsNlm name 'BeginThreadGroup';
+  function Breakpoint(arg:longint):longint;                         cdecl;external Lib0Nlm name 'Breakpoint';
+  procedure CancelNoSleepAESProcessEvent(EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'CancelNoSleepAESProcessEvent';
+  procedure CancelSleepAESProcessEvent  (EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'CancelSleepAESProcessEvent';
+  function ClearNLMDontUnloadFlag(NLMID:longint):longint;                cdecl;external ThreadsNlm name 'ClearNLMDontUnloadFlag';
+  procedure delay(milliseconds:dword);                                   cdecl;external ThreadsNlm name 'delay';
+  function EnterCritSec:longint;                                         cdecl;external ThreadsNlm name 'EnterCritSec';
+  function ExitCritSec:longint;                                          cdecl;external ThreadsNlm name 'ExitCritSec';
+  procedure ExitThread(action_code     :longint;
+                       termination_code:longint);                        cdecl;external ThreadsNlm name 'ExitThread';
+
+  function FindNLMHandle(NLMFileName:Pchar):dword;                       cdecl;external ThreadsNlm name 'FindNLMHandle';
+  function getcmd(cmdLine:Pchar):Pchar;                                  cdecl;external ThreadsNlm name 'getcmd';
+  function GetNLMHandle:dword;                                           cdecl;external ThreadsNlm name 'GetNLMHandle';
+  function GetNLMID:longint;                                             cdecl;external ThreadsNlm name 'GetNLMID';
+  function GetNLMIDFromNLMHandle(NLMHandle:longint):longint;             cdecl;external ThreadsNlm name 'GetNLMIDFromNLMHandle';
+  function GetNLMIDFromThreadID(threadID:longint;fileName:Pchar):longint;cdecl;external ThreadsNlm name 'GetNLMIDFromThreadID';
+  function GetNLMNameFromNLMID(NLMID:longint;
+                               fileName:Pchar;
+			       description:Pchar):longint;               cdecl;external ThreadsNlm name 'GetNLMNameFromNLMID';
+  function GetNLMNameFromNLMHandle(NLMHandle:longint;
+                                   LDFileName:Pchar;
+				   LDName:Pchar):longint;                cdecl;external ThreadsNlm name 'GetNLMNameFromNLMHandle';
+  function GetThreadContextSpecifier(threadID:longint):longint;          cdecl;external ThreadsNlm name 'GetThreadContextSpecifier';
+  function GetThreadGroupID:longint;                                     cdecl;external ThreadsNlm name 'GetThreadGroupID';
+  function __GetThreadIDFromPCB(PCB:longint):longint;                    cdecl;external Lib0Nlm name '__GetThreadIDFromPCB';
+  function GetThreadHandicap(threadID:longint):longint;                  cdecl;external ThreadsNlm name 'GetThreadHandicap';
+  function GetThreadID:longint;                                          cdecl;external ThreadsNlm name 'GetThreadID';
+  function GetThreadName(threadID:longint; tName:Pchar):longint;         cdecl;external ThreadsNlm name 'GetThreadName';
+  function GetThreadName(threadID:longint; var tName):longint;           cdecl;external ThreadsNlm name 'GetThreadName';
+  function MapNLMIDToHandle(NLMID:longint):longint;                      cdecl;external ThreadsNlm name 'MapNLMIDToHandle';
+  function PopThreadCleanup(execute:longint):TCLEANUP;                   cdecl;external ThreadsNlm name 'PopThreadCleanup';
+  function PopThreadGroupCleanup(execute:longint):TCLEANUP;              cdecl;external ThreadsNlm name 'PopThreadGroupCleanup';
+  function PushThreadCleanup(func:TCLEANUP):longint;                     cdecl;external ThreadsNlm name 'PushThreadCleanup';
+  function PushThreadGroupCleanup(func:TCLEANUP):longint;                cdecl;external ThreadsNlm name 'PushThreadGroupCleanup';
+  function RenameThread(threadID:longint; newName:Pchar):longint;        cdecl;external ThreadsNlm name 'RenameThread';
+  function ResumeThread(threadID:longint):longint;                       cdecl;external ThreadsNlm name 'ResumeThread';
+  function ReturnNLMVersionInfoFromFile(pathName:pchar;
+                                        majorVersion:Plongint;
+					minorVersion:Plongint;
+					revision:Plongint;
+					year:Plongint;
+                                        month:Plongint;
+					day:Plongint;
+					copyrightString:pchar;
+					description:pchar):longint;      cdecl;external NlmLibNlm name 'ReturnNLMVersionInfoFromFile';
+  function ReturnNLMVersionInfoFromFile(pathName:pchar;
+                                        var majorVersion,minorVersion,revision:longint;
+					var year,month,day:longint;
+					copyrightString:pchar;
+					description:pchar):longint;      cdecl;external NlmLibNlm name 'ReturnNLMVersionInfoFromFile';
+
+  function ReturnNLMVersionInformation(NLMHandle:longint;
+                                       majorVersion,minorVersion,revision,year,month,day:Plongint;
+                                       copyrightString:pchar; description:pchar):longint;cdecl;external NlmLibNlm name 'ReturnNLMVersionInformation';
+  function ReturnNLMVersionInformation(NLMHandle:longint;
+                                       var majorVersion,minorVersion,revision,year,month,day:longint;
+                                       copyrightString:pchar; description:pchar):longint;cdecl;external NlmLibNlm name 'ReturnNLMVersionInformation';
+
+  procedure ScheduleNoSleepAESProcessEvent(EventNode:PAESProcessStructure);cdecl;external ThreadsNlm name 'ScheduleNoSleepAESProcessEvent';
+  procedure ScheduleSleepAESProcessEvent(EventNode:PAESProcessStructure);  cdecl;external ThreadsNlm name 'ScheduleSleepAESProcessEvent';
+
+
+  function ScheduleWorkToDo(ProcedureToCall:TWorkToDoProc;
+                            workData       :pointer;
+			    workToDo       :PWorkToDo):longint;            cdecl;external ThreadsNlm name 'ScheduleWorkToDo';
+  function SetNLMDontUnloadFlag(NLMID:longint):longint;                    cdecl;external ThreadsNlm name 'SetNLMDontUnloadFlag';
+  function SetNLMID(newNLMID:longint):longint;                             cdecl;external ThreadsNlm name 'SetNLMID';
+  function SetThreadContextSpecifier(threadID,
+                                     contextSpecifier:longint):longint;    cdecl;external ThreadsNlm name 'SetThreadContextSpecifier';
+  function SetThreadGroupID(newThreadGroupID:longint):longint;             cdecl;external ThreadsNlm name 'SetThreadGroupID';
+  procedure SetThreadHandicap(threadID, handicap:longint);                 cdecl;external ThreadsNlm name 'SetThreadHandicap';
+  function spawnlp(mode:longint;
+                   path,arg0:Pchar;
+		   args:array of const):longint;                           cdecl;external ThreadsNlm name 'spawnlp';
+  function spawnlp(mode:longint;
+                   path,arg0:Pchar):longint;                               cdecl;external ThreadsNlm name 'spawnlp';
+  function spawnvp(mode:longint;
+                   path,argv:PPchar):longint;                              cdecl;external ThreadsNlm name 'spawnvp';
+  function SuspendThread(threadID:longint):longint;                        cdecl;external ThreadsNlm name 'SuspendThread';
+  procedure ThreadSwitch;                                                  cdecl;external ThreadsNlm name 'ThreadSwitch';
+  procedure ThreadSwitchLowPriority;                                       cdecl;external ThreadsNlm name 'ThreadSwitchLowPriority';
+  procedure ThreadSwitchWithDelay;                                         cdecl;external ThreadsNlm name 'ThreadSwitchWithDelay';
+{-nwmediam.h-------------------------------------------------------------------}
+{$include npackon.inc}
+
+const
+   FORMAT_MEDIA = $0000;
+   TAPE_CONTROL = $0001;
+   ACTIVATE_FUNCTIONS = $0003;
+   MOUNT_FUNCTIONS = $0004;
+   SELECT_FUNCTIONS = $0005;
+   INSERTION_FUNCTIONS = $0006;
+   LOCK_FUNCTIONS = $0007;
+   MOVE_FUNCTIONS = $0008;
+   STAMP_FUNCTIONS = $0009;
+   SCAN_FUNCTIONS = $000A;
+   MAGAZINE_FUNCTIONS = $000D;
+{ IO Functions  }
+   RANDOM_READ = $0020;
+   RANDOM_WRITE = $0021;
+   RANDOM_WRITE_ONCE = $0022;
+   SEQUENTIAL_READ = $0023;
+   SEQUENTIAL_WRITE = $0024;
+   RESET_END_OF_TAPE = $0025;
+   SINGLE_FILE_MARK = $0026;
+   MULTIPLE_FILE_MARK = $0027;
+   SINGLE_SET_MARK = $0028;
+   MULTIPLE_SET_MARK = $0029;
+   SPACE_DATA_BLOCKS = $002A;
+   LOCATE_DATA_BLOCKS = $002B;
+   POSITION_PARTITION = $002C;
+   POSITION_MEDIA = $002D;
+   DEVICE_GENERIC_IOCTL = $003E;
+{ Object Types  }
+   UNKNOWN_OBJECT = $FFFF;
+   ADAPTER_OBJECT = 0;
+   CHANGER_OBJECT = 1;
+   DEVICE_OBJECT = 2;
+   MEDIA_OBJECT = 4;
+   PARTITION_OBJECT = 5;
+   SLOT_OBJECT = 6;
+   HOTFIX_OBJECT = 7;
+   MIRROR_OBJECT = 8;
+   PARITY_OBJECT = 9;
+   VOLUME_SEG_OBJECT = 10;
+   VOLUME_OBJECT = 11;
+   CLONE_OBJECT = 12;
+   MAGAZINE_OBJECT = 14;
+   UNIDENTIFIABLE_MEDIA = $00000001;
+   HIGH_SIERRA_CDROM_MEDIA = $00000002;
+   ISO_CDROM_MEDIA = $00000003;
+   MAC_CDROM_MEDIA = $00000004;
+   NETWARE_FILE_SYSTEM_MEDIA = $00000005;
+   INTERNAL_IDENTIFY_TYPE = $00000007;
+   SMS_MEDIA_TYPE = $00000008;
+{ Notify Event Bits  }
+   NOTIFY_OBJECT_CREATION = $0001;
+   NOTIFY_OBJECT_DELETION = $0002;
+   NOTIFY_OBJECT_ACTIVATED = $0004;
+   NOTIFY_OBJECT_DEACTIVATED = $0008;
+   NOTIFY_OBJECT_RESERVATION = $0010;
+   NOTIFY_OBJECT_UNRESERVATION = $0020;
+{ Object Status Bits  }
+   OBJECT_ACTIVATED = $00000001;
+   OBJECT_PHANTOM = $00000002;
+   OBJECT_ASSIGNABLE = $00000004;
+   OBJECT_ASSIGNED = $00000008;
+   OBJECT_RESERVED = $00000010;
+   OBJECT_BEING_IDENTIFIED = $00000020;
+   OBJECT_MAGAZINE_LOADED = $00000040;
+   OBJECT_FAILURE = $00000080;
+   OBJECT_REMOVABLE = $00000100;
+   OBJECT_READ_ONLY = $00000200;
+   OBJECT_IN_DEVICE = $00010000;
+   OBJECT_ACCEPTS_MAGAZINES = $00020000;
+   OBJECT_IS_IN_A_CHANGER = $00040000;
+   OBJECT_LOADABLE = $00080000;
+   OBJECT_BEING_LOADED = $00080000;
+   OBJECT_DEVICE_LOCK = $01000000;
+   OBJECT_CHANGER_LOCK = $02000000;
+   OBJECT_REMIRRORING = $04000000;
+   OBJECT_SELECTED = $08000000;
+{ Resource Tag Allocation Signatures  }
+{ 'PAMM'  }
+   MMApplicationSignature = $50424D4D;
+{ 'ONMM'  }
+   MMNotifySignature = $4F4E4D4D;
+{ 'DIMM'  }
+   MMIdentifySignature = $44494D4D;
+{ AlertTypes  }
+   ALERT_MESSAGE = $00000001;
+   ALERT_ACTIVATE = $00000002;
+   ALERT_DEACTIVATE = $00000003;
+   ALERT_DELETE = $00000004;
+{ AlertReasons  }
+   ALERT_HOTFIX_ERROR = $00000000;
+   ALERT_DRIVER_UNLOAD = $00000001;
+   ALERT_DEVICE_FAILURE = $00000002;
+   ALERT_PROGRAM_CONTROL = $00000003;
+   ALERT_MEDIA_DISMOUNT = $00000004;
+   ALERT_MEDIA_EJECT = $00000005;
+   ALERT_SERVER_DOWN = $00000006;
+   ALERT_SERVER_FAILURE = $00000007;
+   ALERT_MEDIA_LOAD = $00000008;
+   ALERT_MEDIA_MOUNT = $00000009;
+   ALERT_DRIVER_LOAD = $0000000A;
+   ALERT_LOST_SOFTWARE_FAULT_TOLERANCE = $0000000B;
+   ALERT_INTERNAL_OBJECT_DELETE = $0000000C;
+   ALERT_MAGAZINE_LOAD = $0000000D;
+   ALERT_MAGAZINE_UNLOAD = $0000000E;
+   ALERT_DEVICE_GOING_TO_BE_REMOVED = $0000000F;
+   ALERT_CHECK_DEVICE = $00000010;
+   ALERT_CONFIGURATION_CHANGE = $00000011;
+   ALERT_APPLICATION_UNREGISTER = $00000012;
+   ALERT_DAI_EMMULATION = $00000013;
+   ALERT_LOST_HARDWARE_FAULT_TOLERANCE = $00000014;
+   ALERT_INTERNAL_OBJECT_CREATE = $00000015;
+   ALERT_INTERNAL_MANAGER_REMOVE = $00000016;
+   ALERT_DEVICE_GOING_TO_BE_DEACTIVATED = $00000017;
+   ALERT_DEVICE_END_OF_MEDIA = $00000018;
+   ALERT_MEDIA_INSERTED = $00000019;
+   ALERT_UNKNOWN_DEVICE_ALERT = $0000001A;
+   ALERT_UNKNOWN_ADAPTER_ALERT = $0000001B;
+{ Function Control (Priority) Bits  }
+   PRIORITY_1 = $0001;
+   PRIORITY_2 = $0002;
+   ACCELERATED_BIT = $0004;
+   ELEVATOR_OFF_BIT = $0008;
+   RETURN_RAW_COMPLETION = $0010;
+   SCRAMBLE_BIT = $0020;
+{ Application Alert Codes  }
+   GOING_TO_BE_DEACTIVATED = $0001;
+   OBJECT_BEING_DEACTIVATED = $0002;
+   OBJECT_SIZE_CHANGED = $0003;
+   OBJECT_BEING_ACTIVATED = $0004;
+   OBJECT_BEING_DELETED = $0005;
+   OBJECT_LOST_FAULT_TOLERANCE = $0006;
+{ Initial Completion Codes  }
+   MESSAGE_PROCESSED = $00;
+   MESSAGE_DATA_MISSING = $01;
+   MESSAGE_POSTPONE = $02;
+   MESSAGE_ABORTED = $03;
+   MESSAGE_INVALID_PARAMETERS = $04;
+   MESSAGE_OBJECT_NOT_ACTIVE = $05;
+   MESSAGE_INVALID_OJECT = $06;
+   MESSAGE_FUNCTION_NOT_SUPPORTED = $07;
+   MESSAGE_INVALID_MODE = $08;
+   MESSAGE_INTERNAL_ERROR = $09;
+{ FinalCompletion Codes  }
+   FUNCTION_OK = $00;
+   FUNCTION_CORRECTED_MEDIA_ERROR = $10;
+   FUNCTION_MEDIA_ERROR = $11;
+   FUNCTION_DEVICE_ERROR = $12;
+   FUNCTION_ADAPTER_ERROR = $13;
+   FUNCTION_NOT_SUPPORTED_BY_DEVICE = $14;
+   FUNCTION_NOT_SUPPORTED_BY_DRIVER = $15;
+   FUNCTION_PARAMETER_ERROR = $16;
+   FUNCTION_MEDIA_NOT_PRESENT = $17;
+   FUNCTION_MEDIA_CHANGED = $18;
+   FUNCTION_PREVIOUSLY_WRITTEN = $19;
+   FUNCTION_MEDIA_NOT_FORMATED = $1A;
+   FUNCTION_BLANK_MEDIA = $1B;
+{end of partition }
+   FUNCTION_END_OF_MEDIA = $1C;
+   FUNCTION_FILE_MARK_DETECTED = $1D;
+   FUNCTION_SET_MARK_DETECTED = $1E;
+   FUNCTION_WRITE_PROTECTED = $1F;
+   FUNCTION_OK_EARLY_WARNING = $20;
+   FUNCTION_BEGINNING_OF_MEDIA = $21;
+   FUNCTION_MEDIA_NOT_FOUND = $22;
+   FUNCTION_MEDIA_NOT_REMOVED = $23;
+   FUNCTION_UNKNOWN_COMPLETION = $24;
+   FUNCTION_DATA_MISSING = $25;
+   FUNCTION_HOTFIX_ERROR = $26;
+   FUNCTION_HOTFIX_UPDATE_ERROR = $27;
+   FUNCTION_IO_ERROR = $28;
+   FUNCTION_CHANGER_SOURCE_EMPTY = $29;
+   FUNCTION_CHANGER_DEST_FULL = $2A;
+   FUNCTION_CHANGER_JAMMED = $2B;
+   FUNCTION_MAGAZINE_NOT_PRESENT = $2D;
+   FUNCTION_MAGAZINE_SOURCE_EMPTY = $2E;
+   FUNCTION_MAGAZINE_DEST_FULL = $2F;
+   FUNCTION_MAGAZINE_JAMMED = $30;
+   FUNCTION_ABORT_CAUSED_BY_PRIOR_ERROR = $31;
+   FUNCTION_CHANGER_ERROR = $32;
+   FUNCTION_MAGAZINE_ERROR = $33;
+{ ErrorCodes  }
+   MM_OK = $00;
+   MM_INVALID_OBJECT = $01;
+   MM_INVALID_APPLICATION = $02;
+   MM_INVALID_RESOURCETAG = $03;
+   MM_MEMORY_ALLOCATION_ERROR = $04;
+   MM_INVALID_MODE = $05;
+   MM_RESERVATION_CONFLICT = $06;
+   MM_PARAMETER_ERROR = $07;
+   MM_OBJECT_NOT_FOUND = $08;
+   MM_ATTRIBUTE_NOT_SETABLE = $09;
+   MM_FAILURE = $0A;
+{ Console Human Jukebox Definitions  }
+   HJ_INSERT_MESSAGE = 0;
+   HJ_EJECT_MESSAGE = 1;
+   HJ_ACK_MESSAGE = 2;
+   HJ_NACK_MESSAGE = 3;
+   HJ_ERROR = 4;
+{ Media Manager Structures  }
+type
+   PMM_F1_Structure = ^TMM_F1_Structure;
+   TMM_F1_Structure = record
+        code : word;
+        control : word;
+     end;
+
+   PPrivateIOConfigurationStucture = ^TPrivateIOConfigurationStucture;
+   TPrivateIOConfigurationStucture = record
+        f1 : longint;
+        f2 : word;
+        f3 : word;
+        f4 : array[0..3] of word;
+        f5 : longint;
+        f6 : word;
+        f7 : longint;
+        f8 : word;
+        f9 : array[0..1] of byte;
+        f10 : array[0..1] of byte;
+        f11 : longint;
+        f12 : longint;
+        f13 : longint;
+        f14 : array[0..17] of byte;
+        f15 : array[0..1] of longint;
+        f16 : word;
+        f17 : array[0..5] of byte;
+     end;
+
+   PAdapterInfoDef = ^TAdapterInfoDef;
+   TAdapterInfoDef = record
+        systemtype : byte;
+        processornumber : byte;
+        uniquetag : word;
+        systemnumber : longint;
+        devices : array[0..31] of longint;
+        configinfo : TPrivateIOConfigurationStucture;
+        drivername : array[0..35] of byte;
+        systemname : array[0..63] of byte;
+        numberofdevices : longint;
+        reserved : array[0..6] of longint;
+     end;
+
+   PAttributeInfoDef = ^TAttributeInfoDef;
+   TAttributeInfoDef = record
+        name : array[0..63] of byte;
+        attributetype : longint;
+        nextattributeid : longint;
+        attributesize : longint;
+     end;
+
+   PChangerInfoDef = ^TChangerInfoDef;
+   TChangerInfoDef = record
+        numberofdevices : longint;
+        numberofslots : longint;
+        numberofmailslots : longint;
+        reserved : array[0..7] of longint;
+        slotmappingtable : array[0..0] of longint;
+     end;
+
+   PDeviceInfoDef = ^TDeviceInfoDef;
+   TDeviceInfoDef = record
+        status : longint;
+        controllernumber : byte;
+        drivenumber : byte;
+        cardnumber : byte;
+        systemtype : byte;
+        accessflags : byte;
+        _type : byte;
+        blocksize : byte;
+        sectorsize : byte;
+        heads : byte;
+        sectors : byte;
+        cylinders : word;
+        capacity : longint;
+        mmadapternumber : longint;
+        mmmedianumber : longint;
+        rawname : array[0..39] of byte;
+        reserved : array[0..7] of longint;
+     end;
+
+   PPrivateMediaInfoDef = ^TPrivateMediaInfoDef;
+   TPrivateMediaInfoDef = record
+        f1 : array[0..63] of byte;
+        f2 : longint;
+        f3 : longint;
+     end;
+
+   PGenericInfoDef = ^TGenericInfoDef;
+   TGenericInfoDef = record
+        mediainfo : TPrivateMediaInfoDef;
+        mediatype : longint;
+        cartridgetype : longint;
+        unitsize : longint;
+        blocksize : longint;
+        capacity : longint;
+        preferredunitsize : longint;
+        name : array[0..63] of byte;
+        _type : longint;
+        status : longint;
+        functionmask : longint;
+        controlmask : longint;
+        parentcount : longint;
+        siblingcount : longint;
+        childcount : longint;
+        specificinfosize : longint;
+        objectuniqueid : longint;
+        mediaslot : longint;
+     end;
+
+   PHotfixInfoDef = ^THotfixInfoDef;
+   THotfixInfoDef = record
+        hotfixoffset : longint;
+        hotfixidentifier : longint;
+        numberoftotalblocks : longint;
+        numberofusedblocks : longint;
+        numberofavailableblocks : longint;
+        numberofsystemblocks : longint;
+        reserved : array[0..7] of longint;
+     end;
+
+   PIdentifierInfoDef = ^TIdentifierInfoDef;
+   TIdentifierInfoDef = record
+        applicationtype : longint;
+        mediatype : longint;
+        cartridgetype : longint;
+        name : array[0..63] of byte;
+        stampflag : longint;
+     end;
+
+   PInsertRequestDef = ^TInsertRequestDef;
+   TInsertRequestDef = record
+        devicenumber : longint;
+        mailslot : longint;
+        medianumber : longint;
+        mediacount : longint;
+     end;
+
+   PMagazineInfoDef = ^TMagazineInfoDef;
+   TMagazineInfoDef = record
+        numberofslots : longint;
+        reserved : array[0..7] of longint;
+        slotmappingtable : array[0..0] of longint;
+     end;
+
+   PMappintInfoHeaderDef = ^TMappintInfoHeaderDef;
+   TMappintInfoHeaderDef = record
+        parentcount : longint;
+        siblingcount : longint;
+        childcount : longint;
+     end;
+
+   PMediaInfoDef = ^TMediaInfoDef;
+   TMediaInfoDef = record
+        _label : array[0..63] of byte;
+        identificationtype : longint;
+        identificationtimestamp : longint;
+     end;
+
+   PMediaRequestDef = ^TMediaRequestDef;
+   TMediaRequestDef = record
+        devicenumber : longint;
+        mailslot : longint;
+        medianumber : longint;
+        mediacount : longint;
+     end;
+
+   PMirrorInfoDef = ^TMirrorInfoDef;
+   TMirrorInfoDef = record
+        mirrorcount : longint;
+        mirroridentifier : longint;
+        mirrormembers : array[0..7] of longint;
+        mirrorsynchflags : array[0..7] of byte;
+        reserved : array[0..7] of longint;
+     end;
+
+   PPartitionInfoDef = ^TPartitionInfoDef;
+   TPartitionInfoDef = record
+        partitionertype : longint;
+        partitiontype : longint;
+        partitionoffset : longint;
+        partitionsize : longint;
+        reserved : array[0..7] of longint;
+     end;
+
+{ these also correspond to offsets in struct  ObjectDef  }
+   PResourceTagDef = ^TResourceTagDef;
+   TResourceTagDef = record
+        reserved : array[0..1] of longint;
+        resourcetagtype : longint;
+        resourcetagcount : longint;
+        resourcenext : PResourceTagDef;
+        resourcelast : PResourceTagDef;
+     end;
+
+{$include npackoff.inc}
+
+function HJ_Media_Request_Ack(minfo:PInsertRequestDef; ackcode:longint; uniqueid:longint):longint;cdecl;external 'clib' name 'HJ_Media_Request_Ack';
+function MM_Abort_Function(messagehandle:longint):longint;cdecl;external 'clib' name 'MM_Abort_Function';
+function MM_Check_For_Pending_Aborts(OSRequestHandle:longint):longint;cdecl;external 'clib' name 'MM_Check_For_Pending_Aborts';
+function MM_Create_Media_Object(objectnumber:longint; mediainfo:PMediaInfoDef):longint;cdecl;external 'clib' name 'MM_Create_Media_Object';
+procedure MM_ExecuteMessages;cdecl;external 'clib' name 'MM_ExecuteMessages';
+function MM_Find_Identifier(lastidentifiernumber:Plongint):longint;cdecl;external 'clib' name 'MM_Find_Identifier';
+function MM_Find_Identifier(var lastidentifiernumber:longint):longint;cdecl;external 'clib' name 'MM_Find_Identifier';
+function MM_Find_Object_Type(typ:longint; nextindicator:Plongint):longint;cdecl;external 'clib' name 'MM_Find_Object_Type';
+function MM_Find_Object_Type(typ:longint; var nextindicator:longint):longint;cdecl;external 'clib' name 'MM_Find_Object_Type';
+function MM_Object_Blocking_IO (returnparameter:Plongint;
+                                objecthandle:longint;
+                                _function:TMM_F1_Structure;
+                                parameter0:longint;
+                                parameter1:longint;
+                                parameter2:longint;
+                                bufferlength:longint;
+                                buffer:pointer):longint;cdecl;external 'clib' name 'MM_Object_Blocking_IO';
+function MM_Object_Blocking_IO (var returnparameter:longint;
+                                objecthandle:longint;
+                                _function:TMM_F1_Structure;
+                                parameter0:longint;
+                                parameter1:longint;
+                                parameter2:longint;
+                                bufferlength:longint;
+                                var buffer):longint;cdecl;external 'clib' name 'MM_Object_Blocking_IO';
+// This call is not handled by the server libraries
+//function MM_Object_IO(messagehandle:Plongint; applicationrequesthandle:longint; objecthandle:longint; _function:TMM_F1_Structure; parameter0:longint;
+//               parameter1:longint; parameter2:longint; bufferlength:longint; buffer:pointer; callbackroutine:procedure ):longint;cdecl;external 'clib' name 'MM_Object_IO';
+
+type TLongintCDeclFunc = function :longint; cdecl;
+     TCdeclProc        = procedure; cdecl;
+
+function MM_Register_Application (applicationhandle:Plongint;
+                                  applicationid:longint;
+                                  name:PChar;
+                                  reserved:longint;
+                                  mediaconsoleroutine:TLongintCDeclFunc;
+                                  resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Application';
+
+function MM_Register_Identification_Routines (oshandle:Plongint;
+                                              applicationhandle:longint;
+                                              identifyroutine:TLongintCDeclFunc;
+                                              unstamproutine:TLongintCDeclFunc;
+                                              stamproutine:TLongintCDeclFunc;
+                                              identifiertype:longint;
+                                              identifiername:PBYTE;
+                                              resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Identification_Routines';
+function MM_Register_Notify_Routine (oshandle:Plongint;
+                                     applicationhandle:longint;
+                                     notifyroutine:TCdeclProc;
+                                     objectclass:longint;
+                                     eventmask:longint;
+                                     resourcetag:PResourceTagDef):longint;cdecl;external 'clib' name 'MM_Register_Notify_Routine';
+// This call is not handled by the server libraries
+//function MM_Release_Object(objecthandle:longint; applicationhandle:longint):longint;cdecl;external 'clib' name 'MM_Release_Object';
+
+function MM_Release_Unload_Semaphore(currentinstance:longint):longint;cdecl;external 'clib' name 'MM_Release_Unload_Semaphore';
+function MM_Rename_Object(objectID:longint; para2:PBYTE):longint;cdecl;external 'clib' name 'MM_Rename_Object';
+// This call is not handled by the server libraries
+//function MM_Reserve_Object(objecthandle:Plongint; applicationidentifier:longint; objectid:longint; iomode:longint; applicationhandle:longint;
+//               notifyroutine:function :longint):longint;cdecl;external 'clib' name 'MM_Reserve_Object';
+
+function MM_Return_Identifier_Info(identifiernumber:longint; info:PIdentifierInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Identifier_Info';
+function MM_Return_Object_Attribute(objectid:longint; attributeid:longint; length:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Return_Object_Attribute';
+function MM_Return_Object_Generic_Info(objectid:longint; info:PGenericInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Object_Generic_Info';
+function MM_Return_Object_Mapping_Info(objectid:longint; mappinginfolength:longint; mappinginfo:Plongint):longint;cdecl;external 'clib' name 'MM_Return_Object_Mapping_Info';
+function MM_Return_Object_Specific_Info(objectid:longint; infolength:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Return_Object_Specific_Info';
+function MM_Return_Object_Table_Size:longint;cdecl;external 'clib' name 'MM_Return_Object_Table_Size';
+function MM_Return_Objects_Attributes(objectid:longint; attributeid:longint; info:PAttributeInfoDef):longint;cdecl;external 'clib' name 'MM_Return_Objects_Attributes';
+function MM_Set_Object_Attribute(objecthandle:longint; attributeid:longint; length:longint; info:pointer):longint;cdecl;external 'clib' name 'MM_Set_Object_Attribute';
+function MM_Set_Unload_Semaphore(currentinstance:Plongint):longint;cdecl;external 'clib' name 'MM_Set_Unload_Semaphore';
+function MM_Special_Object_Blocking_IO(returnparameter:Plongint; objectnumber:longint; _function:TMM_F1_Structure; parameter0:longint; parameter1:longint;
+               parameter2:longint; bufferlength:longint; buffer:pointer):longint;cdecl;external 'clib' name 'MM_Special_Object_Blocking_IO';
+function MM_Unregister_Application(applicationhandle,applicationid:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Application';
+function MM_Unregister_Identification_Routines(handle,applicationtype:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Identification_Routines';
+function MM_Unregister_Notify_Routine(oshandle, applicationhandle:longint):longint;cdecl;external 'clib' name 'MM_Unregister_Notify_Routine';
+{-ioctl.h----------------------------------------------------------------------}
+const
+   I_NWRITE = 101;
+   I_SETBUF = 102;
+
+function ioctl(fd:longint; command:longint; args:array of const):longint;cdecl;external 'clib' name 'ioctl';
+function ioctl(fd:longint; command:longint):longint;cdecl;external 'clib' name 'ioctl';
+{-sys/socket.h-----------------------------------------------------------------}
+{$PACKRECORDS C}
+
+type
+   Piovec = ^Tiovec;
+   Tiovec = record
+        iov_base : Pchar;
+        iov_len : longint;
+     end;
+
+{ Berkeley Sockets definitions and types  }
+
+const
+   FD_SETSIZE = 16;
+type
+
+   Pfd_array = ^Tfd_array;
+   Tfd_array = longint;
+
+   Pfd_set = ^Tfd_set;
+   Tfd_set = record
+        fds : Tfd_array;
+     end;
+
+   Ptimeval = ^Ttimeval;
+   Ttimeval = record
+     tv_sec  : longint;
+     tv_usec : longint;
+   end;
+
+{ definitions related to sockets: types, address families, options  }
+{ types  }
+{ just NW OFSD, no socket  }
+
+const
+   SOCK_NULL = 0;
+{ stream socket  }
+   SOCK_STREAM = 1;
+{ datagram socket  }
+   SOCK_DGRAM = 2;
+{ raw-protocol interface  }
+   SOCK_RAW = 3;
+{ reliably-delivered message  }
+   SOCK_RDM = 4;
+{ sequenced packet stream  }
+   SOCK_SEQPACKET = 5;
+{ option flags per-socket  }
+{ turn on debugging info recording  }
+   SO_DEBUG = $0001;
+{ socket has had listen()  }
+   SO_ACCEPTCONN = $0002;
+{ allow local address reuse  }
+   SO_REUSEADDR = $0004;
+{ keep connections alive  }
+   SO_KEEPALIVE = $0008;
+{ just use interface addresses  }
+   SO_DONTROUTE = $0010;
+{ permit sending of broadcast msgs  }
+   SO_BROADCAST = $0020;
+{ bypass hardware when possible  }
+   SO_USELOOPBACK = $0040;
+{ linger on close if data present  }
+   SO_LINGER = $0080;
+{ leave received OOB data in line  }
+   SO_OOBINLINE = $0100;
+{
+   N.B.: The following definition is present only for compatibility with
+   release 3.0. It will disappear in later releases.
+ }
+{ ~SO_LINGER  }
+   SO_DONTLINGER =  not (SO_LINGER);
+{ additional options, not kept in so_options  }
+{ send buffer size  }
+   SO_SNDBUF = $1001;
+{ receive buffer size  }
+   SO_RCVBUF = $1002;
+{ send low-water mark  }
+   SO_SNDLOWAT = $1003;
+{ receive low-water mark  }
+   SO_RCVLOWAT = $1004;
+{ send timeout  }
+   SO_SNDTIMEO = $1005;
+{ receive timeout  }
+   SO_RCVTIMEO = $1006;
+{ get error status and clear  }
+   SO_ERROR = $1007;
+{ get socket type  }
+   SO_TYPE = $1008;
+{ additional option to be used with level IPPROTO_TCP  }
+{ turn off the Nagle delay algorithm  }
+   TCP_NODELAY = 1;
+
+   SIOCATMARK      = 8;              // at oob mark?
+   SIOCDGRAMSIZE   = 500;
+   IP_INBOUND_IF   = 501;
+   IP_OUTBOUND_IF  = 502;
+
+
+{ structure used for manipulating linger option  }
+{ option on/off  }
+{ linger time  }
+
+type
+   Plinger = ^Tlinger;
+   Tlinger = record
+        l_onoff : longint;
+        l_linger : longint;
+     end;
+
+{ level number for get/setsockopt() to apply to socket itself  }
+{ options for socket level  }
+
+const
+   SOL_SOCKET = $ffff;
+{ address families  }
+{ unspecified  }
+   AF_UNSPEC = 0;
+{ local to host (pipes, portals)  }
+   AF_UNIX = 1;
+{ internetwork: UDP, TCP, etc.  }
+   AF_INET = 2;
+{ Xerox NS protocols  }
+   AF_NS = 6;
+{ AppleTalk  }
+   AF_APPLETALK = 16;
+{ umbrella for all (e.g. protosw lookup)  }
+   AF_OSI = 19;
+{ U.S. Government OSI  }
+   AF_GOSIP = 22;
+   AF_MAX = 21;
+{ structure used by kernel to store most addresses  }
+{ address family  }
+{ up to 14 bytes of direct address  }
+type
+   Psockaddr = ^Tsockaddr;
+   Tsockaddr = record
+        sa_family : word;
+        sa_data : array[0..13] of char;
+     end;
+
+{ structure used by kernel to pass protocol information in raw sockets  }
+{ address family  }
+{ protocol  }
+   Psockproto = ^Tsockproto;
+   Tsockproto = record
+        sp_family : word;
+        sp_protocol : word;
+     end;
+
+{ protocol families, same as address families for now  }
+
+const
+   PF_UNSPEC = AF_UNSPEC;
+   PF_UNIX = AF_UNIX;
+   PF_INET = AF_INET;
+   PF_NS = AF_NS;
+   PF_APPLETALK = AF_APPLETALK;
+   PF_OSI = AF_OSI;
+   PF_GOSIP = AF_GOSIP;
+   PF_MAX = AF_MAX;
+{ test protocol "numbered pipe"  }
+   TSTPROTO_NPIPE = 0;
+{ maximum queue length specifiable by listen  }
+   SOMAXCONN = 5;
+{
+   Message header for recvmsg and sendmsg calls.
+  }
+{ optional address  }
+{ size of address  }
+{ scatter/gather array  }
+{ number of elements in msg_iov  }
+{ access rights sent/received  }
+type
+   Pmsghdr = ^Tmsghdr;
+   Tmsghdr = record
+        msg_name : Pchar;
+        msg_namelen : longint;
+        msg_iov : Piovec;
+        msg_iovlen : longint;
+        msg_accrights : Pchar;
+        msg_accrightslen : longint;
+     end;
+
+{ process out-of-band data  }
+
+const
+   MSG_OOB = $1;
+{ peek at incoming message  }
+   MSG_PEEK = $2;
+{ send without using routing tables  }
+   MSG_DONTROUTE = $4;
+   MSG_MAXIOVLEN = 16;
+{ for NLM clients  }
+type TSKT = longint;
+
+function accept(s:TSKT; addr:Psockaddr; addrlen:Plongint):longint;cdecl;external 'clib' name 'accept';
+function accept(s:TSKT; var addr:Tsockaddr; var addrlen:longint):longint;cdecl;external 'clib' name 'accept';
+function bind(s:TSKT; name:Psockaddr; namelen:longint):longint;cdecl;external 'clib' name 'bind';
+function connect(s:TSKT; name:Psockaddr; namelen:longint):longint;cdecl;external 'clib' name 'connect';
+function getpeername(s:TSKT; name:Psockaddr; namelen:Plongint):longint;cdecl;external 'clib' name 'getpeername';
+function getsockname(s:TSKT; name:Psockaddr; namelen:Plongint):longint;cdecl;external 'clib' name 'getsockname';
+function getsockopt(s:TSKT; level:longint; name:longint; val:Pchar; len:Plongint):longint;cdecl;external 'clib' name 'getsockopt';
+function getsockopt(s:TSKT; level:longint; name:longint; val:Pchar; var len:longint):longint;cdecl;external 'clib' name 'getsockopt';
+
+function listen(s:TSKT; backlog:longint):longint;cdecl;external 'clib' name 'listen';
+function readv(s:TSKT; iov:Piovec; iovcnt:longint):longint;cdecl;external 'clib' name 'readv';
+function recv(s:TSKT; msg:Pchar; len:longint; flags:longint):longint;cdecl;external 'clib' name 'recv';
+function recv(s:TSKT; var data; len:longint; flags:longint):longint;cdecl;external 'clib' name 'recv';
+
+function recvfrom(s:TSKT; msg:Pchar; len:longint; flags:longint; from:Psockaddr;
+           fromlen:Plongint):longint;cdecl;external 'clib' name 'recvfrom';
+function recvfrom(s:TSKT; var data; len:longint; flags:longint; from:Psockaddr;
+           var fromlen:longint):longint;cdecl;external 'clib' name 'recvfrom';
+
+function recvmsg(s:TSKT; msg:Pmsghdr; flags:longint):longint;cdecl;external 'clib' name 'recvmsg';
+function send(s:TSKT; msg:Pchar; len:longint; flags:longint):longint;cdecl;external 'clib' name 'send';
+function send(s:TSKT; var data; len:longint; flags:longint):longint;cdecl;external 'clib' name 'send';
+function sendto(s:TSKT; msg:Pchar; len:longint; flags:longint; _to:Psockaddr;
+           tolen:longint):longint;cdecl;external 'clib' name 'sendto';
+function sendto(s:TSKT; var data; len:longint; flags:longint; _to:Psockaddr;
+           tolen:longint):longint;cdecl;external 'clib' name 'sendto';
+
+function sendmsg(s:TSKT; msg:Pmsghdr; flags:longint):longint;cdecl;external 'clib' name 'sendmsg';
+function setsockopt(s:TSKT; level:longint; name:longint; val:Pchar; len:longint):longint;cdecl;external 'clib' name 'setsockopt';
+function setsockopt(s:TSKT; level:longint; name:longint; var value; len:longint):longint;cdecl;external 'clib' name 'setsockopt';
+function shutdown(s:TSKT; how:longint):longint;cdecl;external 'clib' name 'shutdown';
+function socket(domain:longint; _type:longint; protocol:longint):longint;cdecl;external 'clib' name 'socket';
+function writev(s:TSKT; iov:Piovec; iovcnt:longint):longint;cdecl;external 'clib' name 'writev';
+function select(width:longint; readfds:Pfd_set; writefds:Pfd_set; exceptfds:Pfd_set; timeout:Ptimeval):longint;cdecl;external 'clib' name 'select';
+
+{-sys/time.h-------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+{ commonly-used definitions...  }
+
+const
+   SEC = 1;
+   MILLISEC = 1000;
+   MICROSEC = 1000000;
+   NANOSEC = 1000000000;
+{ wall clock, bound to LWP  }
+   __CLOCK_REALTIME0 = 0;
+{ user CPU usage clock  }
+   CLOCK_VIRTUAL = 1;
+{ user and system CPU usage clock  }
+   CLOCK_PROF = 2;
+{ wall clock, not bound  }
+   __CLOCK_REALTIME3 = 3;
+   CLOCK_REALTIME = __CLOCK_REALTIME3;
+{ set timer relative  }
+   TIMER_RELTIME = $0;
+{ set timer absolute  }
+   TIMER_ABSTIME = $1;
+{ time expressed in seconds and nanoseconds  }
+{ seconds  }
+{ and nanoseconds  }
+type
+
+   Ptimespec = ^Ttimespec;
+   Ttimespec = record
+        tv_sec : Ttime_t;
+        tv_nsec : longint;
+     end;
+   Ttimespec_t = Ttimespec;
+   Ptimespec_t = ^Ttimespec_t;
+   Ttimestrc_t = Ttimespec;
+   Ptimestrc_t = ^Ttimestrc_t;
+
+{-sys/utsname.h----------------------------------------------------------------}
+const
+   _SYS_NMLN = 260;
+
+type
+   Putsname = ^Tutsname;
+   Tutsname = record
+     sysname  : array[0..(_SYS_NMLN)-1] of char;  // name of operating system implementation
+     release  : array[0..(_SYS_NMLN)-1] of char;
+     version  : array[0..(_SYS_NMLN)-1] of char;
+     nodename : array[0..(_SYS_NMLN)-1] of char;
+     machine  : array[0..(_SYS_NMLN)-1] of char;
+     _library : array[0..(_SYS_NMLN)-1] of char;
+   end;
+
+function uname(name:Putsname):longint;cdecl;external 'clib' name 'uname';
+function uname(var name:Tutsname):longint;cdecl;external 'clib' name 'uname';
+
+{-sys/stat.h-------------------------------------------------------------------}
+{$PACKRECORDS C}
+
+{ POSIX file types  }
+{ type of file (mask for following)  }
+
+const
+   S_IFMT = 0170000;
+{ first-in/first-out (pipe)  }
+   S_IFIFO = 0010000;
+{ character-special file  }
+   S_IFCHR = 0020000;
+{ directory  }
+   S_IFDIR = 0040000;
+{ blocking device (not used on NetWare)  }
+   S_IFBLK = 0060000;
+{ regular  }
+   S_IFREG = 0100000;
+{ symbolic link (not used on NetWare)  }
+   S_IFLNK = 0120000;
+{ Berkeley socket  }
+   S_IFSOCK = 0140000;
+
+{ POSIX file modes: owner (user) permission  }
+
+const
+   S_IRWXU = 0000700;
+   S_IRUSR = 0000400;
+   S_IWUSR = 0000200;
+   S_IXUSR = 0000100;
+   S_IREAD = S_IRUSR;
+   S_IWRITE = S_IWUSR;
+   S_IEXEC = S_IXUSR;
+{ POSIX file modes: group permission  }
+   S_IRWXG = 0000070;
+   S_IRGRP = 0000040;
+   S_IWGRP = 0000020;
+   S_IXGRP = 0000010;
+{ POSIX file modes: other permission  }
+   S_IRWXO = 0000007;
+   S_IROTH = 0000004;
+   S_IWOTH = 0000002;
+   S_IXOTH = 0000001;
+{ Novell-defined additional directory modes for mkdir()  }
+{ system directory  }
+   S_DSYSTEM = $00100000;
+{ hidden directory  }
+   S_DHIDE = $00200000;
+{ delete-inhibit  }
+   S_DDEL_INH = $00400000;
+{ rename-inhibit  }
+   S_DREN_INH = $00800000;
+{ purge-immediate  }
+   S_DPURGE_IMM = $01000000;
+{ compress-immediate  }
+   S_DCOMP_IMM = $02000000;
+{ no compression  }
+   S_DCOMP_NO = $04000000;
+{ equivalent to mode = 0  }
+   S_DALL = $01FB;
+{ POSIX setuid, setgid, and sticky  }
+   S_ISUID = 0004000;
+   S_ISGID = 0002000;
+   S_ISVTX = 0001000;
+
+type
+   Pstat = ^Tstat;
+   Tstat = record
+        st_dev : Tdev_t;
+        st_ino : Tino_t;
+        st_mode : word;
+        st_pad1 : word;
+        st_nlink : dword;
+        st_uid : dword;
+        st_gid : dword;
+        st_rdev : Tdev_t;
+        st_size : Toff_t;
+        st_atime : Ttime_t;
+        st_mtime : Ttime_t;
+        st_ctime : Ttime_t;
+        st_btime : Ttime_t;
+        st_attr : dword;
+        st_archivedID : dword;
+        st_updatedID : dword;
+        st_inheritedRightsMask : word;
+        st_pad2 : word;
+        st_originatingNameSpace : dword;
+        st_blksize : Tsize_t;
+        st_blocks : Tsize_t;
+        st_flags : dword;
+        st_spare : array[0..3] of dword;
+        st_name : array[0..(255 + 1)-1] of byte;
+     end;
+
+{ definitions of older structure technology are mostly for reference  }
+{ v4.11  }
+{----------------- new fields starting in v4.11 -------------------------  }
+   Pstat411 = ^Tstat411;
+   Tstat411 = record
+        st_dev : Tdev_t;
+        st_ino : Tino_t;
+        st_mode : word;
+        st_nlink : smallint;
+        st_uid : dword;
+        st_gid : smallint;
+        st_rdev : Tdev_t;
+        st_size : Toff_t;
+        st_atime : Ttime_t;
+        st_mtime : Ttime_t;
+        st_ctime : Ttime_t;
+        st_btime : Ttime_t;
+        st_attr : dword;
+        st_archivedID : dword;
+        st_updatedID : dword;
+        st_inheritedRightsMask : word;
+        st_originatingNameSpace : byte;
+        st_name : array[0..(255 + 1)-1] of byte;
+        st_blksize : Tsize_t;
+        st_blocks : Tsize_t;
+        st_flags : dword;
+        st_spare : array[0..3] of dword;
+     end;
+
+{ v3.12, v4.0, v4.01, v4.02 and v4.10  }
+   Pstat410 = ^Tstat410;
+   Tstat410 = record
+        st_dev : Tdev_t;
+        st_ino : Tino_t;
+        st_mode : word;
+        st_nlink : smallint;
+        st_uid : dword;
+        st_gid : smallint;
+        st_rdev : Tdev_t;
+        st_size : Toff_t;
+        st_atime : Ttime_t;
+        st_mtime : Ttime_t;
+        st_ctime : Ttime_t;
+        st_btime : Ttime_t;
+        st_attr : dword;
+        st_archivedID : dword;
+        st_updatedID : dword;
+        st_inheritedRightsMask : word;
+        st_originatingNameSpace : byte;
+        st_name : array[0..12] of byte;
+     end;
+
+function chmod(path:Pchar; mode:Tmode_t):longint;cdecl;external 'clib' name 'chmod';
+function mkdir(path:Pchar):longint;cdecl;external 'clib' name 'mkdir';
+function mkdir_510(pathname:Pchar; mode:Tmode_t):longint;cdecl;external 'clib' name 'mkdir_510';
+function umask(cmask:Tmode_t):Tmode_t;cdecl;external 'clib' name 'umask';
+function fstat_410(fildes:longint; buf:Pstat410):longint;cdecl;external 'clib' name 'fstat_410';
+function fstat_410(fildes:longint; var buf:Tstat410):longint;cdecl;external 'clib' name 'fstat_410';
+function fstat_411(fildes:longint; buf:Pstat411):longint;cdecl;external 'clib' name 'fstat_411';
+function fstat_411(fildes:longint; var buf:Tstat411):longint;cdecl;external 'clib' name 'fstat_411';
+function fstat_500(fildes:longint; buf:Pstat):longint;cdecl;external 'clib' name 'fstat_500';
+function fstat_500(fildes:longint; var buf:Tstat):longint;cdecl;external 'clib' name 'fstat_500';
+function fstat (fildes:longint; buf:Pstat):longint;cdecl;external 'clib' name 'fstat_500';
+function fstat (fildes:longint; var buf:Tstat):longint;cdecl;external 'clib' name 'fstat_500';
+
+function stat_410(path:Pchar; buf:Pstat410):longint;cdecl;external 'clib' name 'stat_410';
+function stat_410(path:Pchar; var buf:Tstat410):longint;cdecl;external 'clib' name 'stat_410';
+function stat_411(path:Pchar; buf:Pstat411):longint;cdecl;external 'clib' name 'stat_411';
+function stat_411(path:Pchar; var buf:Tstat411):longint;cdecl;external 'clib' name 'stat_411';
+function stat_500(path:Pchar; buf:Pstat):longint;cdecl;external 'clib' name 'stat_500';
+function stat_500(path:Pchar; var buf:Tstat):longint;cdecl;external 'clib' name 'stat_500';
+function stat (path:Pchar; buf:Pstat):longint;cdecl;external 'clib' name 'stat_500';
+function stat (path:Pchar; var buf:Tstat):longint;cdecl;external 'clib' name 'stat_500';
+{------------------------------------------------------------------------------}
+
+implementation
+
+function CLK_TCK : longint;
+begin
+   CLK_TCK:=__get_CLK_TCK;
+end;
+
+function tzname : pchar;
+begin
+   tzname:=__get_tzname^;
+end;
+
+function NetWareErrno : longint;
+begin
+  NetWareErrno := __get_NWErrno_ptr()^;
+end;
+
+function __stdin : PFILE;
+begin
+  __stdin := __get_stdin^;
+end;
+
+function __stdout : PFILE;
+begin
+  __stdout := __get_stdout^;
+end;
+
+function __stderr : PFILE;
+begin
+  __stderr := __get_stderr^;
+end;
+
+function bisecond(var a : TDOSTime) : word;
+begin
+   bisecond:=(a.flag0 and bm_TDOSTime_bisecond) shr bp_TDOSTime_bisecond;
+end;
+
+procedure set_bisecond(var a : TDOSTime; __bisecond : word);
+begin
+   a.flag0:=a.flag0 or ((__bisecond shl bp_TDOSTime_bisecond) and bm_TDOSTime_bisecond);
+end;
+
+function minute(var a : TDOSTime) : word;
+begin
+   minute:=(a.flag0 and bm_TDOSTime_minute) shr bp_TDOSTime_minute;
+end;
+
+procedure set_minute(var a : TDOSTime; __minute : word);
+begin
+   a.flag0:=a.flag0 or ((__minute shl bp_TDOSTime_minute) and bm_TDOSTime_minute);
+end;
+
+function hour(var a : TDOSTime) : word;
+begin
+   hour:=(a.flag0 and bm_TDOSTime_hour) shr bp_TDOSTime_hour;
+end;
+
+procedure set_hour(var a : TDOSTime; __hour : word);
+begin
+   a.flag0:=a.flag0 or ((__hour shl bp_TDOSTime_hour) and bm_TDOSTime_hour);
+end;
+
+function day(var a : TDOSDate) : word;
+begin
+   day:=(a.flag0 and bm_TDOSDate_day) shr bp_TDOSDate_day;
+end;
+
+procedure set_day(var a : TDOSDate; __day : word);
+begin
+   a.flag0:=a.flag0 or ((__day shl bp_TDOSDate_day) and bm_TDOSDate_day);
+end;
+
+function month(var a : TDOSDate) : word;
+begin
+   month:=(a.flag0 and bm_TDOSDate_month) shr bp_TDOSDate_month;
+end;
+
+procedure set_month(var a : TDOSDate; __month : word);
+begin
+   a.flag0:=a.flag0 or ((__month shl bp_TDOSDate_month) and bm_TDOSDate_month);
+end;
+
+function yearsSince80(var a : TDOSDate) : word;
+begin
+   yearsSince80:=(a.flag0 and bm_TDOSDate_yearsSince80) shr bp_TDOSDate_yearsSince80;
+end;
+
+procedure set_yearsSince80(var a : TDOSDate; __yearsSince80 : word);
+begin
+   a.flag0:=a.flag0 or ((__yearsSince80 shl bp_TDOSDate_yearsSince80) and bm_TDOSDate_yearsSince80);
+end;
+
+function bisecond(var a : T_DOSTime) : word;
+begin
+   bisecond:=(a.flag0 and bm_T_DOSTime_bisecond) shr bp_T_DOSTime_bisecond;
+end;
+
+procedure set_bisecond(var a : T_DOSTime; __bisecond : word);
+begin
+   a.flag0:=a.flag0 or ((__bisecond shl bp_T_DOSTime_bisecond) and bm_T_DOSTime_bisecond);
+end;
+
+function minute(var a : T_DOSTime) : word;
+begin
+   minute:=(a.flag0 and bm_T_DOSTime_minute) shr bp_T_DOSTime_minute;
+end;
+
+procedure set_minute(var a : T_DOSTime; __minute : word);
+begin
+   a.flag0:=a.flag0 or ((__minute shl bp_T_DOSTime_minute) and bm_T_DOSTime_minute);
+end;
+
+function hour(var a : T_DOSTime) : word;
+begin
+   hour:=(a.flag0 and bm_T_DOSTime_hour) shr bp_T_DOSTime_hour;
+end;
+
+procedure set_hour(var a : T_DOSTime; __hour : word);
+begin
+   a.flag0:=a.flag0 or ((__hour shl bp_T_DOSTime_hour) and bm_T_DOSTime_hour);
+end;
+
+end.
+
+
+{
   $Log$
   $Log$
-  Revision 1.2  2003-03-25 18:09:25  armin
+  Revision 1.3  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.2  2003/03/25 18:09:25  armin
   * removed cvars because of problems with nlmconv
   * removed cvars because of problems with nlmconv
 
 
   Revision 1.1  2003/02/22 18:23:26  armin
   Revision 1.1  2003/02/22 18:23:26  armin
   * removed nwstdio and nwthread
   * removed nwstdio and nwthread
   * added nwnit.pp and nwserv.pp containing nearly all netware server structures/function definitions available in the c sdk
   * added nwnit.pp and nwserv.pp containing nearly all netware server structures/function definitions available in the c sdk
-
-}
+
+}

+ 30 - 19
rtl/netware/nwsys.inc

@@ -1,8 +1,8 @@
 {
 {
     $Id$
     $Id$
     This file is part of the Free Pascal run time library.
     This file is part of the Free Pascal run time library.
-    Copyright (c) 1999-2000 by the Free Pascal development team
-    Copyright (c) 2001 Armin Diehl
+    Copyright (c) 1999-2004 by the Free Pascal development team
+    Copyright (c) 2001-2004 Armin Diehl
 
 
     Interface to netware clib
     Interface to netware clib
 
 
@@ -17,6 +17,7 @@
 
 
 
 
 CONST Clib       = 'clib';
 CONST Clib       = 'clib';
+      ThreadsNlm = 'threads';
 
 
 TYPE
 TYPE
   dev_t         = LONGINT;
   dev_t         = LONGINT;
@@ -69,9 +70,16 @@ FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer
 FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL CLib NAME 'GetThreadDataAreaPtr';
 FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL CLib NAME 'GetThreadDataAreaPtr';
 PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL CLib NAME 'SaveThreadDataAreaPtr';
 PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL CLib NAME 'SaveThreadDataAreaPtr';
 PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
 PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
+function _SuspendThread(threadID:longint):longint; cdecl;external ThreadsNlm name 'SuspendThread';
+function _GetThreadID:longint; cdecl;external ThreadsNlm name 'GetThreadID';
+procedure _ThreadSwitchWithDelay; cdecl;external ThreadsNlm name 'ThreadSwitchWithDelay';
+function _GetThreadName(threadID:longint; var tName):longint; cdecl;external ThreadsNlm name 'GetThreadName';
 
 
 PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
 PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf3 (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : pchar); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3,P4 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
 PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
 PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
 // this gives internal compiler error 1234124 ??
 // this gives internal compiler error 1234124 ??
 //PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
 //PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
@@ -340,28 +348,31 @@ CONST
   NW_NS_LONG    = 4;
   NW_NS_LONG    = 4;
 
 
 function _NWAddSearchPathAtEnd (searchPath : pchar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd';
 function _NWAddSearchPathAtEnd (searchPath : pchar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd';
-function _NWDeleteSearchPath (searchPathNumber : longint) : longint; cdecl; external Clib name 'NWDeleteSearchPath';
-function _NWInsertSearchPath (searchPathNumber : longint; path : pchar) : longint; cdecl; external Clib name 'NWInsertSearchPath';
-function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : pchar) : longint; cdecl; external Clib name 'NWGetSearchPathElement';
-
-
-// values for __mode used with spawnxx()
-CONST
-   P_WAIT                    = 0;
-   P_NOWAIT                  = 1;
-   P_OVERLAY                 = 2;
-   P_NOWAITO                 = 4;
-   P_SPAWN_IN_CURRENT_DOMAIN = 8;
-
-
-//function spawnlp(mode:longint; path:Pchar; arg0:Pchar; args:array of const):longint;cdecl;external CLib name 'spawnlp';
+function _NWDeleteSearchPath (searchPathNumber : longint) : longint; cdecl; external Clib name 'NWDeleteSearchPath';
+function _NWInsertSearchPath (searchPathNumber : longint; path : pchar) : longint; cdecl; external Clib name 'NWInsertSearchPath';
+function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : pchar) : longint; cdecl; external Clib name 'NWGetSearchPathElement';
+
+
+// values for __mode used with spawnxx()
+CONST
+   P_WAIT                    = 0;
+   P_NOWAIT                  = 1;
+   P_OVERLAY                 = 2;
+   P_NOWAITO                 = 4;
+   P_SPAWN_IN_CURRENT_DOMAIN = 8;
+
+
+//function spawnlp(mode:longint; path:Pchar; arg0:Pchar; args:array of const):longint;cdecl;external CLib name 'spawnlp';
 function spawnlp(mode:longint; path:Pchar; arg0:Pchar):longint;cdecl;external Clib name 'spawnlp';
 function spawnlp(mode:longint; path:Pchar; arg0:Pchar):longint;cdecl;external Clib name 'spawnlp';
 function spawnvp(mode:longint; path:Pchar; argv:PPchar):longint;cdecl;external Clib name 'spawnvp';
 function spawnvp(mode:longint; path:Pchar; argv:PPchar):longint;cdecl;external Clib name 'spawnvp';
 
 
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.10  2004-08-01 20:02:48  armin
+  Revision 1.11  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.10  2004/08/01 20:02:48  armin
   * changed dir separator from \ to /
   * changed dir separator from \ to /
   * long namespace by default
   * long namespace by default
   * dos.exec implemented
   * dos.exec implemented

+ 30 - 18
rtl/netware/sockets.pp

@@ -11,8 +11,8 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 
  **********************************************************************}
  **********************************************************************}
+
 {$mode objfpc}
 {$mode objfpc}
-{$R-}
 unit Sockets;
 unit Sockets;
 
 
 Interface
 Interface
@@ -20,9 +20,10 @@ Interface
 {$macro on}
 {$macro on}
 {$define maybelibc:=}
 {$define maybelibc:=}
 
 
+{$R-}
 
 
-  Uses
-     winsock;
+Uses
+  winsock;
 
 
 Type
 Type
   cushort=word;
   cushort=word;
@@ -52,6 +53,14 @@ Implementation
                           Basic Socket Functions
                           Basic Socket Functions
 ******************************************************************************}
 ******************************************************************************}
 
 
+
+
+//function fprecvmsg     (s:cint; msg: pmsghdr; flags:cint):ssize_t;
+//function fpsendmsg 	(s:cint; hdr: pmsghdr; flags:cint):ssize;
+
+//function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
+
+
 function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
 function fpsocket 	(domain:cint; xtype:cint; protocol: cint):cint;
 begin
 begin
   fpSocket:=WinSock.Socket(Domain,xtype,ProtoCol);
   fpSocket:=WinSock.Socket(Domain,xtype,ProtoCol);
@@ -80,7 +89,7 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fprecv 	(s:cint; buf: pointer; len: size_t; flags: cint):ssize_t; 
+function fprecv 	(s:cint; buf: pointer; len: size_t; flags: cint):ssize_t;
 begin
 begin
   fpRecv:=WinSock.Recv(S,Buf,Len,Flags);
   fpRecv:=WinSock.Recv(S,Buf,Len,Flags);
   if fpRecv<0 then
   if fpRecv<0 then
@@ -89,10 +98,10 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t; 
+function fprecvfrom    (s:cint; buf: pointer; len: size_t; flags: cint; from : psockaddr; fromlen : psocklen):ssize_t;
 
 
 begin
 begin
-  fpRecvFrom:=WinSock.RecvFrom(S,Buf,Len,Flags,Winsock.TSockAddr(from^),FromLen^);
+fpRecvFrom:=WinSock.RecvFrom(S,Buf,Len,Flags,Winsock.TSockAddr(from^),FromLen^);
   if fpRecvFrom<0 then
   if fpRecvFrom<0 then
     SocketError:=WSAGetLastError
     SocketError:=WSAGetLastError
   else
   else
@@ -109,7 +118,7 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpshutdown 	(s:cint; how:cint):cint; 
+function fpshutdown 	(s:cint; how:cint):cint;
 begin
 begin
   fpShutDown:=WinSock.ShutDown(S,How);
   fpShutDown:=WinSock.ShutDown(S,How);
   if fpShutDown<0 then
   if fpShutDown<0 then
@@ -165,16 +174,16 @@ begin
        SocketError:=0;
        SocketError:=0;
 end;
 end;
 
 
-function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint; 
+function fpaccept      (s:cint; addrx : psockaddr; addrlen : psocklen):cint;
 begin
 begin
-  fpAccept:=WinSock.Accept(S,WinSock.PSockAddr(Addrx),plongint(@AddrLen));
+  fpAccept:=WinSock.Accept(S,WinSock.PSockAddr(Addrx),plongint(AddrLen));
   if fpAccept<0 then
   if fpAccept<0 then
     SocketError:=WSAGetLastError
     SocketError:=WSAGetLastError
   else
   else
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint; 
+function fpgetsockname (s:cint; name  : psockaddr; namelen : psocklen):cint;
 
 
 begin
 begin
   fpGetSockName:=WinSock.GetSockName(S,WinSock.TSockAddr(name^),nameLen^);
   fpGetSockName:=WinSock.GetSockName(S,WinSock.TSockAddr(name^),nameLen^);
@@ -184,7 +193,7 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint; 
+function fpgetpeername (s:cint; name  : psockaddr; namelen : psocklen):cint;
 begin
 begin
   fpGetPeerName:=WinSock.GetPeerName(S,WinSock.TSockAddr(name^),NameLen^);
   fpGetPeerName:=WinSock.GetPeerName(S,WinSock.TSockAddr(name^),NameLen^);
   if fpGetPeerName<0 then
   if fpGetPeerName<0 then
@@ -193,7 +202,7 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint; 
+function fpgetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen : psocklen):cint;
 begin
 begin
   fpGetSockOpt:=WinSock.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
   fpGetSockOpt:=WinSock.GetSockOpt(S,Level,OptName,OptVal,OptLen^);
   if fpGetSockOpt<0 then
   if fpGetSockOpt<0 then
@@ -202,7 +211,7 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint; 
+function fpsetsockopt  (s:cint; level:cint; optname:cint; optval:pointer; optlen :tsocklen):cint;
 
 
 begin
 begin
   fpSetSockOpt:=WinSock.SetSockOpt(S,Level,OptName,OptVal,OptLen);
   fpSetSockOpt:=WinSock.SetSockOpt(S,Level,OptName,OptVal,OptLen);
@@ -212,9 +221,9 @@ begin
     SocketError:=0;
     SocketError:=0;
 end;
 end;
 
 
-function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint; 
+function fpsocketpair  (d:cint; xtype:cint; protocol:cint; sv:pcint):cint;
 begin
 begin
-  fpsocketpair := -1;
+  fpSocketPair := -1;
 end;
 end;
 
 
 Function CloseSocket(Sock:Longint):Longint;
 Function CloseSocket(Sock:Longint):Longint;
@@ -228,7 +237,7 @@ begin
   end else
   end else
   begin
   begin
     CloseSocket := 0;
     CloseSocket := 0;
-    SocketError := 0;
+    SocketError := 0;	
   end;
   end;
 end;
 end;
 
 
@@ -285,7 +294,7 @@ end;
 
 
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint;
 begin
 begin
-  // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);a
+  // SocketPair:=SocketCall(Socket_Sys_SocketPair,Domain,SocketType,Protocol,longint(@Pair),0,0);
   SocketPair := -1;
   SocketPair := -1;
 end;
 end;
 
 
@@ -385,7 +394,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.6  2004-09-18 23:45:43  armin
+  Revision 1.7  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.6  2004/09/18 23:45:43  armin
   * make winsock more compatible to win32 version
   * make winsock more compatible to win32 version
 
 
   Revision 1.5  2004/07/30 15:05:25  armin
   Revision 1.5  2004/07/30 15:05:25  armin

+ 112 - 20
rtl/netware/system.pp

@@ -69,20 +69,24 @@ VAR
    NetwareCheckFunction    : TNWCheckFunction;
    NetwareCheckFunction    : TNWCheckFunction;
    NetwareMainThreadGroupID: longint;
    NetwareMainThreadGroupID: longint;
    NetwareCodeStartAddress : dword;
    NetwareCodeStartAddress : dword;
+   NetwareUnloadProc       : pointer = nil;  {like exitProc but for nlm unload only}
 
 
 CONST
 CONST
    envp   : ppchar = nil;   {dummy to make heaptrc happy}
    envp   : ppchar = nil;   {dummy to make heaptrc happy}
 
 
 
 
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl;
-PROCEDURE ConsolePrintf3 (FormatStr : PCHAR; P1,P2,P3 : LONGINT);  CDecl;
-PROCEDURE ConsolePrintf (FormatStr : PCHAR);  CDecl;
+procedure ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl;
+procedure ConsolePrintf (FormatStr : PCHAR; Param : pchar); CDecl;
+procedure ConsolePrintf (FormatStr : PCHAR; P1,P2 : LONGINT);  CDecl;
+procedure ConsolePrintf (FormatStr : PCHAR; P1,P2,P3 : LONGINT);  CDecl;
+procedure ConsolePrintf (FormatStr : PCHAR);  CDecl;
+procedure __EnterDebugger; cdecl;
 
 
-type 
+type
   TSysCloseAllRemainingSemaphores = procedure;
   TSysCloseAllRemainingSemaphores = procedure;
   TSysReleaseThreadVars = procedure;
   TSysReleaseThreadVars = procedure;
   TSysSetThreadDataAreaPtr = function (newPtr:pointer):pointer;
   TSysSetThreadDataAreaPtr = function (newPtr:pointer):pointer;
-  
+
 procedure NWSysSetThreadFunctions (crs:TSysCloseAllRemainingSemaphores;
 procedure NWSysSetThreadFunctions (crs:TSysCloseAllRemainingSemaphores;
                                    rtv:TSysReleaseThreadVars;
                                    rtv:TSysReleaseThreadVars;
 				   stdata:TSysSetThreadDataAreaPtr);
 				   stdata:TSysSetThreadDataAreaPtr);
@@ -101,10 +105,13 @@ implementation
 {$I errno.inc}
 {$I errno.inc}
 
 
 
 
-var 
+var
   CloseAllRemainingSemaphores : TSysCloseAllRemainingSemaphores = nil;
   CloseAllRemainingSemaphores : TSysCloseAllRemainingSemaphores = nil;
   ReleaseThreadVars : TSysReleaseThreadVars = nil;
   ReleaseThreadVars : TSysReleaseThreadVars = nil;
   SetThreadDataAreaPtr : TSysSetThreadDataAreaPtr = nil;
   SetThreadDataAreaPtr : TSysSetThreadDataAreaPtr = nil;
+  TerminatingThreadID : longint = 0;  {used for unload, the signal handler will}
+                                      {be called from the console thread. avoid}
+                                      {calling _exit in another thread}
 
 
 procedure NWSysSetThreadFunctions (crs:TSysCloseAllRemainingSemaphores;
 procedure NWSysSetThreadFunctions (crs:TSysCloseAllRemainingSemaphores;
                                    rtv:TSysReleaseThreadVars;
                                    rtv:TSysReleaseThreadVars;
@@ -113,9 +120,9 @@ begin
   CloseAllRemainingSemaphores := crs;
   CloseAllRemainingSemaphores := crs;
   ReleaseThreadVars := rtv;
   ReleaseThreadVars := rtv;
   SetThreadDataAreaPtr := stdata;
   SetThreadDataAreaPtr := stdata;
-end;  
-
+end;
 
 
+procedure __EnterDebugger; cdecl; external 'clib' name 'EnterDebugger';
 
 
 
 
 procedure PASCALMAIN;external name 'PASCALMAIN';
 procedure PASCALMAIN;external name 'PASCALMAIN';
@@ -161,6 +168,18 @@ var SigTermHandlerActive : boolean;
 
 
 Procedure system_exit;
 Procedure system_exit;
 begin
 begin
+  if TerminatingThreadID <> 0 then
+    if TerminatingThreadID <> ThreadId then
+      if TerminatingThreadID <> _GetThreadID then
+      begin
+        {$ifdef DEBUG_MT}
+        ConsolePrintf ('Terminating Thread %x because halt was called while Thread %x terminates nlm'#13#10,_GetThreadId,TerminatingThreadId);
+        {$endif}
+        ExitThread (EXIT_THREAD,0);
+        // only for the case ExitThread fails
+        while true do
+          _ThreadSwitchWithDelay;
+      end;
   if assigned (CloseAllRemainingSemaphores) then CloseAllRemainingSemaphores;
   if assigned (CloseAllRemainingSemaphores) then CloseAllRemainingSemaphores;
   if assigned (ReleaseThreadVars) then ReleaseThreadVars;
   if assigned (ReleaseThreadVars) then ReleaseThreadVars;
 
 
@@ -746,13 +765,13 @@ begin
     oldTG := _SetThreadGroupID (NetwareMainThreadGroupID);
     oldTG := _SetThreadGroupID (NetwareMainThreadGroupID);
     { to allow use of threadvars, we simply set the threadvar-memory
     { to allow use of threadvars, we simply set the threadvar-memory
       from the main thread }
       from the main thread }
-    if assigned (SetThreadDataAreaPtr) then 
+    if assigned (SetThreadDataAreaPtr) then
       oldPtr := SetThreadDataAreaPtr (NIL);  { nil means main threadvars }
       oldPtr := SetThreadDataAreaPtr (NIL);  { nil means main threadvars }
     result := 0;
     result := 0;
     NetwareCheckFunction (result);
     NetwareCheckFunction (result);
     if assigned (SetThreadDataAreaPtr) then
     if assigned (SetThreadDataAreaPtr) then
       SetThreadDataAreaPtr (oldPtr);
       SetThreadDataAreaPtr (oldPtr);
-      
+
     _SetThreadGroupID (oldTG);
     _SetThreadGroupID (oldTG);
   end else
   end else
     result := 0;
     result := 0;
@@ -812,7 +831,13 @@ end;
 procedure TermSigHandler (Sig:longint); CDecl;
 procedure TermSigHandler (Sig:longint); CDecl;
 var oldTG : longint;
 var oldTG : longint;
     oldPtr: pointer;
     oldPtr: pointer;
+    err   : longint;
+    current_exit : procedure;
+    ThreadName   : array [0..20] of char;
+    HadExitProc  : boolean;
+    Count        : longint;
 begin
 begin
+
   oldTG := _SetThreadGroupID (NetwareMainThreadGroupID); { this is only needed for nw 3.11 }
   oldTG := _SetThreadGroupID (NetwareMainThreadGroupID); { this is only needed for nw 3.11 }
 
 
   { _GetThreadDataAreaPtr will not be valid because the signal
   { _GetThreadDataAreaPtr will not be valid because the signal
@@ -821,25 +846,88 @@ begin
     here }
     here }
   if assigned (SetThreadDataAreaPtr) then
   if assigned (SetThreadDataAreaPtr) then
     oldPtr := SetThreadDataAreaPtr (NIL);  { nil means main thread }
     oldPtr := SetThreadDataAreaPtr (NIL);  { nil means main thread }
+
+  {this signal handler is called within the console command
+   thread, the main thread is still running. Via NetwareUnloadProc
+   running threads may terminate itself}
+  TerminatingThreadID := _GetThreadID;
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'TermSigHandler Called, MainThread:%x, OurThread: %x'#13#10,ThreadId,TerminatingThreadId);
+  if NetwareUnloadProc <> nil then
+    ConsolePrintf (#13'Calling NetwareUnloadProcs'#13#10);
+  {$endif}
+  HadExitProc := false;
+  {we need to finalize winock to release threads
+   waiting on a blocking socket call. If that thread
+   calls halt, we have to avoid that unit finalization
+   is called by that thread because we are doing it
+   here
+
+   like the old exitProc, mainly to allow winsock to release threads
+   blocking in a winsock calls }
+  while NetwareUnloadProc<>nil Do
+  Begin
+    InOutRes:=0;
+    current_exit:=tProcedure(NetwareUnloadProc);
+    NetwareUnloadProc:=nil;
+    current_exit();
+    _ThreadSwitchWithDelay;
+    hadExitProc := true;
+  End;
+
+  err := 0;
+  if hadExitProc then
+  begin  {give the main thread a little bit of time to terminate}
+    count := 0;
+    repeat
+      err := _GetThreadName(ThreadID,ThreadName);
+      if err = 0 then _Delay (200);
+      inc(count);
+    until (err <> 0) or (count > 100);  {about 20 seconds}
+    {$ifdef DEBUG_MT}
+    if err = 0 then
+      ConsolePrintf (#13,'Main Thread not terminated'#13#10)
+    else
+      ConsolePrintf (#13'Main Thread has ended'#13#10);
+    {$endif}
+  end;
+
+  if err = 0 then
+  {$ifdef DEBUG_MT}
+  begin
+    err := _SuspendThread(ThreadId);
+    ConsolePrintf (#13'SuspendThread(%x) returned %d'#13#10,ThreadId,err);
+  end;
+  {$else}
+  _SuspendThread(ThreadId);
+  {$endif}
+  _ThreadSwitchWithDelay;
+
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'Calling do_exit'#13#10);
+  {$endif}
   SigTermHandlerActive := true;  { to avoid that system_exit calls _exit }
   SigTermHandlerActive := true;  { to avoid that system_exit calls _exit }
   do_exit;                       { calls finalize units }
   do_exit;                       { calls finalize units }
   if assigned (SetThreadDataAreaPtr) then
   if assigned (SetThreadDataAreaPtr) then
-    SetThreadDataAreaPtr (oldPtr);  
+    SetThreadDataAreaPtr (oldPtr);
   _SetThreadGroupID (oldTG);
   _SetThreadGroupID (oldTG);
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'TermSigHandler: all done'#13#10);
+  {$endif}
 end;
 end;
 
 
 
 
 procedure SysInitStdIO;
 procedure SysInitStdIO;
 begin
 begin
 { Setup stdin, stdout and stderr }
 { Setup stdin, stdout and stderr }
-  StdInputHandle := _fileno (LONGINT (_GetStdIn^));    // GetStd** returns **FILE !
+  StdInputHandle := _fileno (LONGINT (_GetStdIn^));    // GetStd** returns **FILE
   StdOutputHandle:= _fileno (LONGINT (_GetStdOut^));
   StdOutputHandle:= _fileno (LONGINT (_GetStdOut^));
   StdErrorHandle := _fileno (LONGINT (_GetStdErr^));
   StdErrorHandle := _fileno (LONGINT (_GetStdErr^));
 
 
   OpenStdIO(Input,fmInput,StdInputHandle);
   OpenStdIO(Input,fmInput,StdInputHandle);
   OpenStdIO(Output,fmOutput,StdOutputHandle);
   OpenStdIO(Output,fmOutput,StdOutputHandle);
   OpenStdIO(StdOut,fmOutput,StdOutputHandle);
   OpenStdIO(StdOut,fmOutput,StdOutputHandle);
-  
+
   {$ifdef StdErrToConsole}
   {$ifdef StdErrToConsole}
   AssignStdErrConsole(StdErr);
   AssignStdErrConsole(StdErr);
   {$else}
   {$else}
@@ -870,7 +958,7 @@ Begin
       else
       else
         _SetCurrentNameSpace (NW_NS_DOS);
         _SetCurrentNameSpace (NW_NS_DOS);
     end;
     end;
-  end;  
+  end;
   {$endif useLongNamespaceByDefault}
   {$endif useLongNamespaceByDefault}
 
 
 { Setup heap }
 { Setup heap }
@@ -880,11 +968,12 @@ Begin
 { Reset IO Error }
 { Reset IO Error }
   InOutRes:=0;
   InOutRes:=0;
 
 
-(* This should be changed to a real value during *)
-(* thread driver initialization if appropriate.  *)
-  ThreadID := 1;
-  
-  SysInitStdIO;  
+  ThreadID := _GetThreadID;
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'Start system, ThreadID: %x'#13#10,ThreadID);
+  {$endif}
+
+  SysInitStdIO;
 
 
 {Delphi Compatible}
 {Delphi Compatible}
   IsLibrary := FALSE;
   IsLibrary := FALSE;
@@ -896,7 +985,10 @@ Begin
 End.
 End.
 {
 {
   $Log$
   $Log$
-  Revision 1.26  2004-09-17 18:29:07  armin
+  Revision 1.27  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.26  2004/09/17 18:29:07  armin
   * added NWGetCodeStart, needed for lineinfo
   * added NWGetCodeStart, needed for lineinfo
 
 
   Revision 1.25  2004/09/03 19:26:27  olle
   Revision 1.25  2004/09/03 19:26:27  olle

+ 16 - 6
rtl/netware/systhrds.pp

@@ -81,7 +81,7 @@ begin
   offset:=threadvarblocksize;
   offset:=threadvarblocksize;
   inc(threadvarblocksize,size);
   inc(threadvarblocksize,size);
   {$ifdef DEBUG_MT}
   {$ifdef DEBUG_MT}
-  ConsolePrintf3(#13'init_threadvar, new offset: (%d), Size:%d'#13#10,offset,size,0);
+  ConsolePrintf(#13'init_threadvar, new offset: (%d), Size:%d'#13#10,offset,size,0);
   {$endif DEBUG_MT}
   {$endif DEBUG_MT}
 end;
 end;
 
 
@@ -120,7 +120,7 @@ procedure SysAllocateThreadVars;
      fillchar (threadvars^, threadvarblocksize, 0);
      fillchar (threadvars^, threadvarblocksize, 0);
      _SaveThreadDataAreaPtr (threadvars);
      _SaveThreadDataAreaPtr (threadvars);
      {$ifdef DEBUG_MT}
      {$ifdef DEBUG_MT}
-       ConsolePrintf3(#13'threadvars allocated at (%x), size: %d'#13#10,longint(threadvars),threadvarblocksize,0);
+       ConsolePrintf(#13'threadvars allocated at (%x), size: %d'#13#10,longint(threadvars),threadvarblocksize,0);
      {$endif DEBUG_MT}
      {$endif DEBUG_MT}
      if thredvarsmainthread = nil then
      if thredvarsmainthread = nil then
        thredvarsmainthread := threadvars;
        thredvarsmainthread := threadvars;
@@ -187,7 +187,7 @@ function ThreadMain(param : pointer) : dword; cdecl;
      SysAllocateThreadVars;
      SysAllocateThreadVars;
 {$endif HASTHREADVAR}
 {$endif HASTHREADVAR}
 {$ifdef DEBUG_MT}
 {$ifdef DEBUG_MT}
-     ConsolePrintf(#13'New thread started, initialising ...'#13#10);
+     ConsolePrintf(#13'New thread %x started, initialising ...'#13#10,_GetThreadID);
 {$endif DEBUG_MT}
 {$endif DEBUG_MT}
      ti:=pthreadinfo(param)^;
      ti:=pthreadinfo(param)^;
      InitThread(ti.stklen);
      InitThread(ti.stklen);
@@ -215,7 +215,7 @@ function SysBeginThread(sa : Pointer;stacksize : dword;
        InitThreadVars(@SysRelocateThreadvar);
        InitThreadVars(@SysRelocateThreadvar);
        IsMultithread:=true;
        IsMultithread:=true;
      end;
      end;
-{$endif}     
+{$endif}
      { the only way to pass data to the newly created thread }
      { the only way to pass data to the newly created thread }
      { in a MT safe way, is to use the heap                  }
      { in a MT safe way, is to use the heap                  }
      new(ti);
      new(ti);
@@ -232,6 +232,9 @@ function SysBeginThread(sa : Pointer;stacksize : dword;
 
 
 procedure SysEndThread(ExitCode : DWord);
 procedure SysEndThread(ExitCode : DWord);
 begin
 begin
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'SysEndThread %x'#13#10,_GetThreadID);
+  {$endif}
   DoneThread;
   DoneThread;
   ExitThread(ExitCode , TSR_THREAD);
   ExitThread(ExitCode , TSR_THREAD);
 end;
 end;
@@ -270,6 +273,7 @@ begin
 end;
 end;
 
 
 function GetThreadName  (threadId : longint; var threadName) : longint; cdecl; external 'clib' name 'GetThreadName';
 function GetThreadName  (threadId : longint; var threadName) : longint; cdecl; external 'clib' name 'GetThreadName';
+function GetThreadID : dword; cdecl; external 'clib' name 'GetThreadID';
 //function __RenameThread (threadId : longint; threadName:pchar) : longint; cdecl; external 'clib' name 'RenameThread';
 //function __RenameThread (threadId : longint; threadName:pchar) : longint; cdecl; external 'clib' name 'RenameThread';
 
 
 function  SysWaitForThreadTerminate (threadHandle : dword; TimeoutMs : longint) : dword;
 function  SysWaitForThreadTerminate (threadHandle : dword; TimeoutMs : longint) : dword;
@@ -278,6 +282,9 @@ var
   buf : array [0..50] of char;
   buf : array [0..50] of char;
 begin
 begin
   {$warning timeout needs to be implemented}
   {$warning timeout needs to be implemented}
+  {$ifdef DEBUG_MT}
+  ConsolePrintf (#13'SysWaitForThreadTerminate ThreadID:%x Handle:%x'#13#10,GetThreadID,threadHandle);
+  {$endif}
   repeat
   repeat
     status := GetThreadName (ThreadHandle,Buf); {should return EBADHNDL if thread is terminated}
     status := GetThreadName (ThreadHandle,Buf); {should return EBADHNDL if thread is terminated}
     ThreadSwitch;
     ThreadSwitch;
@@ -295,7 +302,7 @@ begin
   SysThreadGetPriority := 0;
   SysThreadGetPriority := 0;
 end;
 end;
 
 
-function GetThreadID : dword; cdecl; external 'clib' name 'GetThreadID';
+
 
 
 function  SysGetCurrentThreadId : dword;
 function  SysGetCurrentThreadId : dword;
 begin
 begin
@@ -535,7 +542,10 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.4  2004-07-30 15:05:25  armin
+  Revision 1.5  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.4  2004/07/30 15:05:25  armin
   make netware rtl compilable under 1.9.5
   make netware rtl compilable under 1.9.5
 
 
   Revision 1.3  2003/10/01 21:00:09  peter
   Revision 1.3  2003/10/01 21:00:09  peter

+ 44 - 30
rtl/netware/tthread.inc

@@ -1,9 +1,10 @@
 {
 {
     $Id$
     $Id$
     This file is part of the Free Component Library (FCL)
     This file is part of the Free Component Library (FCL)
-    Copyright (c) 1999-2003 by the Free Pascal development team
+    Copyright (c) 2003-2004 Armin Diehl, member of the Free Pascal
+    development team
 
 
-    Netware TThread implementation
+    Netware clib TThread implementation
 
 
     See the file COPYING.FPC, included in this distribution,
     See the file COPYING.FPC, included in this distribution,
     for details about the copyright.
     for details about the copyright.
@@ -25,7 +26,7 @@ type
 var
 var
   ThreadRoot : PThreadRec;
   ThreadRoot : PThreadRec;
   ThreadsInited : boolean;
   ThreadsInited : boolean;
-//  MainThreadID: longint;
+  DisableRemoveThread : boolean;
 
 
 Const
 Const
   ThreadCount: longint = 0;
   ThreadCount: longint = 0;
@@ -55,19 +56,24 @@ procedure InitThreads;
 begin
 begin
   ThreadRoot:=nil;
   ThreadRoot:=nil;
   ThreadsInited:=true;
   ThreadsInited:=true;
+  DisableRemoveThread:=false;
 end;
 end;
 
 
-
+{DoneThreads will terminate all remaining threads}
 procedure DoneThreads;
 procedure DoneThreads;
 var
 var
-  hp : PThreadRec;
+  hp,next : PThreadRec;
 begin
 begin
+  DisableRemoveThread := true;    {to avoid that Destroy calling RemoveThread modifies Thread List}
   while assigned(ThreadRoot) do
   while assigned(ThreadRoot) do
    begin
    begin
      ThreadRoot^.Thread.Destroy;
      ThreadRoot^.Thread.Destroy;
      hp:=ThreadRoot;
      hp:=ThreadRoot;
      ThreadRoot:=ThreadRoot^.Next;
      ThreadRoot:=ThreadRoot^.Next;
      dispose(hp);
      dispose(hp);
+     {$ifdef DEBUG_MT}
+     ConsolePrintf(#13'DoneThreads: called destroy, remaining threads: %d ThreadRoot: %x'#13#10,ThreadCount,longint(ThreadRoot));
+     {$endif}
    end;
    end;
   ThreadsInited:=false;
   ThreadsInited:=false;
 end;
 end;
@@ -87,7 +93,7 @@ begin
   hp^.next:=ThreadRoot;
   hp^.next:=ThreadRoot;
   ThreadRoot:=hp;
   ThreadRoot:=hp;
 
 
-  inc(ThreadCount, 1);
+  inc(ThreadCount);
 end;
 end;
 
 
 
 
@@ -95,25 +101,28 @@ procedure RemoveThread(t:TThread);
 var
 var
   lasthp,hp : PThreadRec;
   lasthp,hp : PThreadRec;
 begin
 begin
-  hp:=ThreadRoot;
-  lasthp:=nil;
-  while assigned(hp) do
-   begin
-     if hp^.Thread=t then
+  if not DisableRemoveThread then  {disabled while in DoneThreads}
+  begin
+    hp:=ThreadRoot;
+    lasthp:=nil;
+    while assigned(hp) do
+    begin
+      if hp^.Thread=t then
       begin
       begin
         if assigned(lasthp) then
         if assigned(lasthp) then
          lasthp^.next:=hp^.next
          lasthp^.next:=hp^.next
         else
         else
          ThreadRoot:=hp^.next;
          ThreadRoot:=hp^.next;
         dispose(hp);
         dispose(hp);
+        Dec(ThreadCount);
+        if ThreadCount = 0 then ThreadsInited := false;
         exit;
         exit;
       end;
       end;
-     lasthp:=hp;
-     hp:=hp^.next;
-   end;
-
-  Dec(ThreadCount, 1);
-  if ThreadCount = 0 then DoneThreads;
+      lasthp:=hp;
+      hp:=hp^.next;
+    end;
+  end else
+    dec(ThreadCount);
 end;
 end;
 
 
 
 
@@ -133,7 +142,10 @@ begin
   Thread.FFinished := True;
   Thread.FFinished := True;
   Thread.DoTerminate;
   Thread.DoTerminate;
   if FreeThread then
   if FreeThread then
+  begin
+    Thread.Destroy;
     Thread.Free;
     Thread.Free;
+  end;
   EndThread(Result);
   EndThread(Result);
 end;
 end;
 
 
@@ -149,25 +161,24 @@ begin
   FHandle := BeginThread (@ThreadProc,pointer(self));
   FHandle := BeginThread (@ThreadProc,pointer(self));
   if FSuspended then Suspend;
   if FSuspended then Suspend;
   FThreadID := FHandle;
   FThreadID := FHandle;
-  //IsMultiThread := TRUE;  {already set by systhrds}
   FFatalException := nil;
   FFatalException := nil;
 end;
 end;
 
 
 
 
 destructor TThread.Destroy;
 destructor TThread.Destroy;
 begin
 begin
-  if not FFinished {and not Suspended} then
-   begin
-     if Suspended then ResumeThread (FHandle);  {netware can not kill a thread}
-     Terminate;
-     WaitFor;
-   end;
-  {if FHandle <> -1 then
-    KillThread (FHandle);}  {something went wrong, kill the thread (not possible on netware)}
+  if not FFinished then
+  begin
+    Terminate;
+    if Suspended then
+      ResumeThread (FHandle);  {netware can not kill a thread, the thread has to}
+                               {leave it's execute routine if terminated is true}
+    WaitFor;                   {wait for the thread to terminate}
+  end;
   FFatalException.Free;
   FFatalException.Free;
   FFatalException := nil;
   FFatalException := nil;
   inherited Destroy;
   inherited Destroy;
-  RemoveThread(self);
+  RemoveThread(self);          {remove it from the list of active threads}
 end;
 end;
 
 
 
 
@@ -209,14 +220,14 @@ end;
 {does not make sense for netware}
 {does not make sense for netware}
 procedure TThread.Synchronize(Method: TThreadMethod);
 procedure TThread.Synchronize(Method: TThreadMethod);
 begin
 begin
-  {$ifndef netware}
+(*
   FSynchronizeException := nil;
   FSynchronizeException := nil;
   FMethod := Method;
   FMethod := Method;
 {  SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self)); }
 {  SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self)); }
   {$warning Synchronize needs implementation}
   {$warning Synchronize needs implementation}
   if Assigned(FSynchronizeException) then
   if Assigned(FSynchronizeException) then
     raise FSynchronizeException;
     raise FSynchronizeException;
-  {$endif}
+*)
 end;
 end;
 
 
 
 
@@ -260,7 +271,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.2  2004-07-30 15:05:25  armin
+  Revision 1.3  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.2  2004/07/30 15:05:25  armin
   make netware rtl compilable under 1.9.5
   make netware rtl compilable under 1.9.5
 
 
   Revision 1.1  2003/10/06 21:01:06  peter
   Revision 1.1  2003/10/06 21:01:06  peter

+ 19 - 1
rtl/netware/winsock.pp

@@ -2417,15 +2417,33 @@ IOW, there _must_ be 3 versions then: var/const, pchar and pointer}
       end;
       end;
     end;
     end;
 
 
+var
+  oldUnloadProc : pointer;
+
+    procedure exitProc;
+    begin
+      {$ifdef DEBUG_MT}
+      ConsolePrintf (#13'winsock.exitProc called'#13#10);
+      {$endif}
+      NetwareUnloadProc := oldUnloadProc;
+      WSACleanup;
+    end;
+
+
 
 
 initialization
 initialization
   WSAstartupData.wVersion := $ffff;
   WSAstartupData.wVersion := $ffff;
+  oldUnloadProc := NetwareUnloadProc;
+  NetwareUnloadProc := @exitProc;
 finalization
 finalization
   WSACleanUp;
   WSACleanUp;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.4  2004-09-18 23:45:43  armin
+  Revision 1.5  2004-09-26 19:25:49  armin
+  * exiting threads at nlm unload
+
+  Revision 1.4  2004/09/18 23:45:43  armin
   * make winsock more compatible to win32 version
   * make winsock more compatible to win32 version
 
 
   Revision 1.3  2003/10/25 23:42:35  hajny
   Revision 1.3  2003/10/25 23:42:35  hajny