* Additional routines needed for MT

This commit is contained in:
armin 2002-03-08 19:06:47 +00:00
parent 20213ef769
commit 4a03070bcb

View File

@ -1,319 +1,338 @@
{ {
$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) 1999-2000 by the Free Pascal development team
Copyright (c) 2001 Armin Diehl Copyright (c) 2001 Armin Diehl
Interface to netware clib Interface to netware clib
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.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************} **********************************************************************}
{ 2000/08/27 armin: first version { 2000/08/27 armin: first version
2001/03/08 armin: additional functions 2001/03/08 armin: additional functions
2001/04/14 armin: additional functions for crt-unit 2001/04/14 armin: additional functions for crt-unit
} }
CONST Clib = 'clib.nlm'; CONST Clib = 'clib.nlm';
NlmLib = 'nlmlib.nlm'; NlmLib = 'nlmlib.nlm';
Threads = 'threads.nlm'; Threads = 'threads.nlm';
CalNlm = 'calnlm32.nlm'; CalNlm = 'calnlm32.nlm';
ClxNlm = 'clxnlm32.nlm'; ClxNlm = 'clxnlm32.nlm';
NitNlm = 'nit.nlm'; NitNlm = 'nit.nlm';
ThreadsNlm = 'threads.nlm'; ThreadsNlm = 'threads.nlm';
TYPE TYPE
dev_t = LONGINT; dev_t = LONGINT;
ino_t = LONGINT; ino_t = LONGINT;
unsignedshort = WORD; unsignedshort = WORD;
unsignedlong = LONGINT; unsignedlong = LONGINT;
unsignedint = LONGINT; unsignedint = LONGINT;
off_t = LONGINT; off_t = LONGINT;
size_t = LONGINT; size_t = LONGINT;
time_t = LONGINT; time_t = LONGINT;
NWStatBufT = PACKED RECORD NWStatBufT = PACKED RECORD
st_dev : dev_t; (* volume number *) st_dev : dev_t; (* volume number *)
st_ino : ino_t; (* directory entry number of the st_name *) st_ino : ino_t; (* directory entry number of the st_name *)
st_mode : unsignedshort; (* emulated file mode *) st_mode : unsignedshort; (* emulated file mode *)
st_nlink : unsignedshort; (* count of hard links (always 1) *) st_nlink : unsignedshort; (* count of hard links (always 1) *)
st_uid : unsignedlong; (* object id of owner *) st_uid : unsignedlong; (* object id of owner *)
st_gid : unsignedshort; (* group-id (always 0) *) st_gid : unsignedshort; (* group-id (always 0) *)
st_rdev : dev_t; (* device type (always 0) *) st_rdev : dev_t; (* device type (always 0) *)
st_size : off_t; (* total file size--files only *) st_size : off_t; (* total file size--files only *)
st_atime : time_t; (* last access date--files only *) st_atime : time_t; (* last access date--files only *)
st_mtime : time_t; (* last modify date and time *) st_mtime : time_t; (* last modify date and time *)
st_ctime : time_t; (* POSIX: last status change time... *) st_ctime : time_t; (* POSIX: last status change time... *)
(* ...NetWare: creation date/time *) (* ...NetWare: creation date/time *)
st_btime : time_t; (* last archived date and time *) st_btime : time_t; (* last archived date and time *)
st_attr : unsignedlong; (* file attributes *) st_attr : unsignedlong; (* file attributes *)
st_archivedID : unsignedlong; (* user/object ID of last archive *) st_archivedID : unsignedlong; (* user/object ID of last archive *)
st_updatedID : unsignedlong; (* user/object ID of last update *) st_updatedID : unsignedlong; (* user/object ID of last update *)
st_inheritedRightsMask st_inheritedRightsMask
: unsignedshort; (* inherited rights mask *) : unsignedshort; (* inherited rights mask *)
st_originatingNameSpace st_originatingNameSpace
: BYTE; (* namespace of creation *) : BYTE; (* namespace of creation *)
st_name : ARRAY [0..255] OF CHAR; st_name : ARRAY [0..255] OF CHAR;
(* TARGET_NAMESPACE name *) (* TARGET_NAMESPACE name *)
st_blksize : LONGINT; st_blksize : LONGINT;
st_blocks : LONGINT; st_blocks : LONGINT;
st_flags : LONGINT; st_flags : LONGINT;
st_spare : ARRAY [0..3] OF LONGINT; st_spare : ARRAY [0..3] OF LONGINT;
END; END;
FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'stat_411'; FUNCTION _stat (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'stat_411';
FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'fstat_411'; FUNCTION _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'fstat_411';
PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free'; PROCEDURE NWFree (P : POINTER); CDECL; EXTERNAL Clib NAME 'free';
PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib; PROCEDURE PressAnyKeyToContinue; CDecl; EXTERNAL; // Clib;
PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib;
PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib; PROCEDURE ExitThread (action_code, termination_code : LONGINT); CDecl; EXTERNAL CLib;
PROCEDURE printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib; FUNCTION _BeginThread (func, stack : pointer; Stacksize : LONGINT; arg : pointer) : LONGINT; Cdecl; EXTERNAL Threads NAME 'BeginThread';
PROCEDURE ConsolePrintf3 (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib NAME 'ConsolePrintf'; FUNCTION _GetThreadDataAreaPtr : POINTER; CDecl; EXTERNAL NlmLib NAME 'GetThreadDataAreaPtr';
PROCEDURE _SaveThreadDataAreaPtr (P : POINTER); CDecl; EXTERNAL NlmLib NAME 'SaveThreadDataAreaPtr';
// values for __action_code used with ExitThread() PROCEDURE _exit (ExitCode : LONGINT); CDecl; EXTERNAL CLib;
CONST PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib;
TSR_THREAD = -1; PROCEDURE printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib;
EXIT_THREAD = 0; PROCEDURE ConsolePrintf3 (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib NAME 'ConsolePrintf';
EXIT_NLM = 1;
// values for __action_code used with ExitThread()
FUNCTION _GetStdIn : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdin'; // result: **FILE CONST
FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout'; TSR_THREAD = -1; //-Terminate only the current thread.
FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr'; EXIT_THREAD = 0; //-Terminate the current thread; if the current thread is
// also the last thread, terminate the NLM.
// FileIO by Fileno EXIT_NLM = 1; //-Terminate the entire NLM.
FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'open';
FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'close'; FUNCTION _GetStdIn : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdin'; // result: **FILE
FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'lseek'; FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout';
FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chsize'; FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr';
FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'tell';
FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'write'; // FileIO by Fileno
FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'read'; FUNCTION _open (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'open';
FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'filelength'; FUNCTION _close (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'close';
FUNCTION _lseek (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'lseek';
TYPE FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chsize';
NWModifyStructure = FUNCTION _tell (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'tell';
RECORD FUNCTION _write (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'write';
MModifyName : PCHAR; FUNCTION _read (FileNo : LONGINT; BufP : POINTER; Len : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'read';
MFileAttributes : LONGINT; FUNCTION _filelength (filedes : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'filelength';
MFileAttributesMask : LONGINT;
MCreateDate : WORD; TYPE
MCreateTime : WORD; NWModifyStructure =
MOwnerID : LONGINT; RECORD
MLastArchivedDate : WORD; MModifyName : PCHAR;
MLastArchivedTime : WORD; MFileAttributes : LONGINT;
MLastArchivedID : LONGINT; MFileAttributesMask : LONGINT;
MLastUpdatedDate : WORD; MCreateDate : WORD;
MLastUpdatedTime : WORD; MCreateTime : WORD;
MLastUpdatedID : LONGINT; MOwnerID : LONGINT;
MLastAccessedDate : WORD; MLastArchivedDate : WORD;
MInheritanceGrantMask : WORD; MLastArchivedTime : WORD;
MInheritanceRevokeMask : WORD; MLastArchivedID : LONGINT;
MMaximumSpace : LONGINT; MLastUpdatedDate : WORD;
MLastUpdatedInSeconds : LONGINT MLastUpdatedTime : WORD;
END; MLastUpdatedID : LONGINT;
MLastAccessedDate : WORD;
CONST MModifyNameBit = $0001; MInheritanceGrantMask : WORD;
MFileAtrributesBit = $0002; MInheritanceRevokeMask : WORD;
MCreateDateBit = $0004; MMaximumSpace : LONGINT;
MCreateTimeBit = $0008; MLastUpdatedInSeconds : LONGINT
MOwnerIDBit = $0010; END;
MLastArchivedDateBit = $0020;
MLastArchivedTimeBit = $0040; CONST MModifyNameBit = $0001;
MLastArchivedIDBit = $0080; MFileAtrributesBit = $0002;
MLastUpdatedDateBit = $0100; MCreateDateBit = $0004;
MLastUpdatedTimeBit = $0200; MCreateTimeBit = $0008;
MLastUpdatedIDBit = $0400; MOwnerIDBit = $0010;
MLastAccessedDateBit = $0800; MLastArchivedDateBit = $0020;
MInheritanceRestrictionMaskBit = $1000; MLastArchivedTimeBit = $0040;
MMaximumSpaceBit = $2000; MLastArchivedIDBit = $0080;
MLastUpdatedInSecondsBit = $4000; MLastUpdatedDateBit = $0100;
MLastUpdatedTimeBit = $0200;
// Directory MLastUpdatedIDBit = $0400;
FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chdir'; MLastAccessedDateBit = $0800;
FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getcwd'; MInheritanceRestrictionMaskBit = $1000;
FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'mkdir'; MMaximumSpaceBit = $2000;
FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'rmdir'; MLastUpdatedInSecondsBit = $4000;
FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'ChangeDirectoryEntry';
// Directory
// get fileno from stream FUNCTION _chdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'chdir';
FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno'; FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getcwd';
FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'isatty'; FUNCTION _mkdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'mkdir';
FUNCTION _rmdir (path : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'rmdir';
(* values for 'o_flag' in open()... *) FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'ChangeDirectoryEntry';
CONST O_RDONLY = $0000; (* open for read only *)
O_WRONLY = $0001; (* open for write only *) // get fileno from stream
O_RDWR = $0002; (* open for read and write *) FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno';
O_ACCMODE = $0003; (* AND with value to extract access flags *) FUNCTION _isatty (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'isatty';
O_APPEND = $0010; (* writes done at end of file *)
O_CREAT = $0020; (* create new file *) (* values for 'o_flag' in open()... *)
O_TRUNC = $0040; (* truncate existing file *) CONST O_RDONLY = $0000; (* open for read only *)
O_EXCL = $0080; (* exclusive open *) O_WRONLY = $0001; (* open for write only *)
O_TEXT = $0100; (* text file--unsupported *) O_RDWR = $0002; (* open for read and write *)
O_BINARY = $0200; (* binary file *) O_ACCMODE = $0003; (* AND with value to extract access flags *)
O_NDELAY = $0400; (* nonblocking flag *) O_APPEND = $0010; (* writes done at end of file *)
O_NOCTTY = $0800; (* currently unsupported *) O_CREAT = $0020; (* create new file *)
O_NONBLOCK = O_NDELAY; O_TRUNC = $0040; (* truncate existing file *)
O_EXCL = $0080; (* exclusive open *)
O_TEXT = $0100; (* text file--unsupported *)
// File Utils O_BINARY = $0200; (* binary file *)
FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'unlink'; O_NDELAY = $0400; (* nonblocking flag *)
FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename'; O_NOCTTY = $0800; (* currently unsupported *)
O_NONBLOCK = O_NDELAY;
// Error
TYPE _PLONGINT = ^LONGINT;
FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib; // File Utils
FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'unlink';
// Memory FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'malloc';
PROCEDURE _free (what : POINTER); CDECL; EXTERNAL Threads NAME 'free'; // Error
FUNCTION _stackavail : LONGINT; CDECL; EXTERNAL Threads NAME 'stackavail'; TYPE _PLONGINT = ^LONGINT;
FUNCTION __get_errno_ptr : _PLONGINT; CDECL; EXTERNAL Clib;
// Debug
PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger'; // Memory
FUNCTION _malloc (size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'malloc';
// String FUNCTION _realloc (p : POINTER; size : LONGINT) : POINTER; CDECL; EXTERNAL Threads NAME 'realloc';
FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen'; PROCEDURE _free (what : POINTER); CDECL; EXTERNAL Threads NAME 'free';
FUNCTION _stackavail : LONGINT; CDECL; EXTERNAL Threads NAME 'stackavail';
// Time/Date
TYPE NWTM = RECORD // Debug
tm_sec, tm_min, tm_hour, PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger';
tm_mday, tm_mon, tm_year,
tm_wday, tm_yday, tm_isdst : LONGINT; // String
END; FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen';
PNWTM = ^NWTM;
FUNCTION _localtime (VAR time : time_t) : PNWTM; CDECL; EXTERNAL Clib NAME 'localtime'; // Time/Date
FUNCTION _time (tloc : POINTER) : LONGINT; CDECL; EXTERNAL Clib NAME 'time'; TYPE NWTM = RECORD
PROCEDURE _ConvertTimeToDOS (time : time_t; VAR DosDate, DosTime : WORD); CDECL; EXTERNAL Clib NAME '_ConvertTimeToDOS'; tm_sec, tm_min, tm_hour,
PROCEDURE _tzset; CDECL; EXTERNAL Clib NAME 'tzset'; tm_mday, tm_mon, tm_year,
tm_wday, tm_yday, tm_isdst : LONGINT;
END;
//----------------------------------------------------------------------- PNWTM = ^NWTM;
FUNCTION _localtime (VAR time : time_t) : PNWTM; CDECL; EXTERNAL Clib NAME 'localtime';
CONST NWDEFCONN_HANDLE = 0; FUNCTION _time (tloc : POINTER) : LONGINT; CDECL; EXTERNAL Clib NAME 'time';
PROCEDURE _ConvertTimeToDOS (time : time_t; VAR DosDate, DosTime : WORD); CDECL; EXTERNAL Clib NAME '_ConvertTimeToDOS';
TYPE NWCONN_HANDLE = LONGINT; PROCEDURE _tzset; CDECL; EXTERNAL Clib NAME 'tzset';
NWRCODE = LONGINT;
NWDateAndTime = PACKED RECORD
Year,Month,Day, //-----------------------------------------------------------------------
Hour,Minute,Second,DayOfWeek : BYTE;
END; CONST NWDEFCONN_HANDLE = 0;
PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL NitNlm NAME 'GetFileServerDateAndTime'; TYPE NWCONN_HANDLE = LONGINT;
FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD; NWRCODE = LONGINT;
second:WORD):longint;cdecl; EXTERNAL NitNlm Name 'SetFileServerDateAndTime'; NWDateAndTime = PACKED RECORD
Year,Month,Day,
TYPE FILE_SERV_INFO = record Hour,Minute,Second,DayOfWeek : BYTE;
serverName : array[0..47] of char; END;
netwareVersion : BYTE;
netwareSubVersion : BYTE; PROCEDURE GetFileServerDateAndTime (VAR TimeBuf : NWDateAndTime); CDECL; EXTERNAL NitNlm NAME 'GetFileServerDateAndTime';
maxConnectionsSupported : WORD; FUNCTION SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; minute:WORD;
connectionsInUse : WORD; second:WORD):longint;cdecl; EXTERNAL NitNlm Name 'SetFileServerDateAndTime';
maxVolumesSupported : WORD;
revisionLevel : BYTE; TYPE FILE_SERV_INFO = record
SFTLevel : BYTE; serverName : array[0..47] of char;
TTSLevel : BYTE; netwareVersion : BYTE;
peakConnectionsUsed : WORD; netwareSubVersion : BYTE;
accountingVersion : BYTE; maxConnectionsSupported : WORD;
VAPversion : BYTE; connectionsInUse : WORD;
queingVersion : BYTE; maxVolumesSupported : WORD;
printServerVersion : BYTE; revisionLevel : BYTE;
virtualConsoleVersion : BYTE; SFTLevel : BYTE;
securityRestrictionLevel: BYTE; TTSLevel : BYTE;
internetBridgeSupport : BYTE; peakConnectionsUsed : WORD;
reserved : array[0..59] of BYTE; accountingVersion : BYTE;
CLibMajorVersion : BYTE; VAPversion : BYTE;
CLibMinorVersion : BYTE; queingVersion : BYTE;
CLibRevision : BYTE; printServerVersion : BYTE;
end; virtualConsoleVersion : BYTE;
pFILE_SERV_INFO = ^FILE_SERV_INFO; securityRestrictionLevel: BYTE;
internetBridgeSupport : BYTE;
FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL NitNlm NAME 'GetServerInformation'; reserved : array[0..59] of BYTE;
CLibMajorVersion : BYTE;
// Directory CLibMinorVersion : BYTE;
TYPE NWDirEnt = CLibRevision : BYTE;
PACKED RECORD end;
d_attr : LONGINT; pFILE_SERV_INFO = ^FILE_SERV_INFO;
d_time : WORD; {modification time}
d_date : WORD; {modification date} FUNCTION GetServerInformation(returnSize:longint; serverInfo:pFILE_SERV_INFO):longint;cdecl; EXTERNAL NitNlm NAME 'GetServerInformation';
d_size : LONGINT; {filesize}
d_ino : LONGINT; {serial number} // Directory
d_dev : LONGINT; {volume number} TYPE NWDirEnt =
d_cdatetime : time_t; {creation date and time} PACKED RECORD
d_adatetime : time_t; {last access - files only} d_attr : LONGINT;
d_bdatetime : time_t; {last archive date and time} d_time : WORD; {modification time}
d_uid : LONGINT; {owner id (object id) } d_date : WORD; {modification date}
d_archivedID : LONGINT; d_size : LONGINT; {filesize}
d_updatedID : LONGINT; d_ino : LONGINT; {serial number}
d_nameDOS : ARRAY [0..12] OF CHAR; d_dev : LONGINT; {volume number}
d_inheritedRightsMask : WORD; d_cdatetime : time_t; {creation date and time}
d_originatingNameSpace: BYTE; d_adatetime : time_t; {last access - files only}
d_ddatetime : time_t; {deleted date time} d_bdatetime : time_t; {last archive date and time}
d_deletedID : LONGINT; d_uid : LONGINT; {owner id (object id) }
{---- new fields starting in v4.11 ----} d_archivedID : LONGINT;
d_name : ARRAY [0..255] OF CHAR; { enty's namespace name } d_updatedID : LONGINT;
END; d_nameDOS : ARRAY [0..12] OF CHAR;
PNWDirEnt = ^NWDirEnt; d_inheritedRightsMask : WORD;
d_originatingNameSpace: BYTE;
FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'opendir_411'; d_ddatetime : time_t; {deleted date time}
FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'closedir'; d_deletedID : LONGINT;
FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'readdir'; {---- new fields starting in v4.11 ----}
FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL NlmLib NAME 'SetReaddirAttribute'; d_name : ARRAY [0..255] OF CHAR; { enty's namespace name }
END;
// Environment PNWDirEnt = ^NWDirEnt;
FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getenv';
FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'opendir_411';
// Volumes FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL NlmLib NAME 'closedir';
FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeName'; FUNCTION _readdir (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL NlmLib NAME 'readdir';
FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeNumber'; FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL NlmLib NAME 'SetReaddirAttribute';
FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE;
VolumeName : PCHAR; // Environment
VAR TotalBlocks : WORD; FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL NlmLib NAME 'getenv';
VAR SectorsPerBlock : WORD;
VAR availableBlocks : WORD; // Volumes
VAR totalDirectorySlots : WORD; FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeName';
VAR availableDirSlots : WORD; FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeNumber';
VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeInfoWithNumber'; FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE;
FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetNumberOfVolumes'; VolumeName : PCHAR;
VAR TotalBlocks : WORD;
// Screen/Keyboad VAR SectorsPerBlock : WORD;
PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyToScreenMemory'; VAR availableBlocks : WORD;
PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyFromScreenMemory'; VAR totalDirectorySlots : WORD;
FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'DisplayInputCursor'; VAR availableDirSlots : WORD;
FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'HideInputCursor'; VAR volumeisRemovable : WORD) : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetVolumeInfoWithNumber';
FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SetPositionOfInputCursor'; FUNCTION _GetNumberOfVolumes : LONGINT; CDECL; EXTERNAL NitNlm NAME 'GetNumberOfVolumes';
PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'gotoxy';
FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'GetSizeOfScreen'; // Screen/Keyboad
FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'IsColorMonitor'; PROCEDURE _CopyToScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyToScreenMemory';
PROCEDURE _RingTheBell; CDECL; EXTERNAL ThreadsNlm NAME 'RingTheBell'; PROCEDURE _CopyFromScreenMemory (Height, Width : WORD; Data : POINTER; x, y : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'CopyFromScreenMemory';
FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'SetCursorShape'; FUNCTION _DisplayInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'DisplayInputCursor';
FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'GetCursorShape'; FUNCTION _HideInputCursor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'HideInputCursor';
FUNCTION _wherex : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherex'; FUNCTION _SetPositionOfInputCursor (row,col : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SetPositionOfInputCursor';
FUNCTION _wherey : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherey'; PROCEDURE _GotoXY (col, row : WORD); CDECL; EXTERNAL ThreadsNlm NAME 'gotoxy';
PROCEDURE _clrscr; CDECL; EXTERNAL ThreadsNlm NAME 'clrscr'; FUNCTION _GetSizeOfScreen (VAR height,width : WORD): LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'GetSizeOfScreen';
FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'kbhit'; FUNCTION _IsColorMonitor : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'IsColorMonitor';
FUNCTION _getch : CHAR; CDECL; EXTERNAL ThreadsNlm NAME 'getch'; PROCEDURE _RingTheBell; CDECL; EXTERNAL ThreadsNlm NAME 'RingTheBell';
PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL ThreadsNlm NAME 'delay'; FUNCTION _SetCursorShape (startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'SetCursorShape';
FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetCtrlCharCheckMode'; FUNCTION _GetCursorShape (VAR startline,endline : BYTE) : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'GetCursorShape';
FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetAutoScreenDestructionMode'; FUNCTION _wherex : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherex';
FUNCTION _wherey : WORD; CDECL; EXTERNAL ThreadsNlm NAME 'wherey';
// Misc PROCEDURE _clrscr; CDECL; EXTERNAL ThreadsNlm NAME 'clrscr';
FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL ThreadsNlm NAME 'memcpy'; FUNCTION _kbhit : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'kbhit';
FUNCTION _getch : CHAR; CDECL; EXTERNAL ThreadsNlm NAME 'getch';
{ PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL ThreadsNlm NAME 'delay';
FUNCTION _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetCtrlCharCheckMode';
FUNCTION _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL ThreadsNlm NAME 'SetAutoScreenDestructionMode';
// Misc
FUNCTION _memcpy (Dest, Src : POINTER; Len : LONGINT) : POINTER; CDECL; EXTERNAL ThreadsNlm NAME 'memcpy';
FUNCTION _OpenLocalSemaphore (InitialValue : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'OpenLocalSemaphore';
FUNCTION _WaitOnLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'WaitOnLocalSemaphore';
FUNCTION _SignalLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'SignalLocalSemaphore';
FUNCTION _CloseLocalSemaphore (semaphoreHandle : LONGINT) : LONGINT; CDECL; EXTERNAL ThreadsNlm NAME 'CloseLocalSemaphore';
FUNCTION _EnterCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'EnterCritSec';
FUNCTION _ExitCritSec : LONGINT; CDecl; EXTERNAL ThreadsNlm NAME 'ExitCritSec';
{
$Log$ $Log$
Revision 1.3 2001-04-16 18:39:50 florian Revision 1.4 2002-03-08 19:06:47 armin
* updates from Armin commited * Additional routines needed for MT
Revision 1.2 2001/04/11 14:17:00 florian Revision 1.3 2001/04/16 18:39:50 florian
* added logs, fixed email address of Armin, it is * updates from Armin commited
diehl@nordrhein.de
Revision 1.2 2001/04/11 14:17:00 florian
} * added logs, fixed email address of Armin, it is
diehl@nordrhein.de
}