---------------------------------------------
INT 21 - Nowell	NetWare	- CONVERT HANDLE
	AH = B4h
	AL = 00h
	DS:SI -> sendBuffer:
		 (byte)connectionID;
		 (byte)accessMode;
		 [6](bytes)netwareHandle;
		 (long)forkLength
Return:	If Flag	Carry then ax=errorCode, else al=handle
---------------------------------------------
INT 21 - Nowell	NetWare	- GET TASK MODE(Get Extended File Attributes)
	AH = B5h
	AL = subfunction
	    03h get task mode
	    04h get task mode pointer
Return:	If subfunction = 03h al=current	task mode byte
	If subfunction = 04h ES:BX=addr(task mode byte)
---------------------------------------------
INT 21 - Novell	NetWare	SFT Level II - EXTENDED	FILE ATTRIBUTES
	AH = B6h
	AL = subfunction
	    00h	get extended file attributes
	    01h	set extended file attributes
		    CL = attributes
		    bit	0,1,2: search mode
			3: reserved
			4: transaction tracking	file
			5: indexing file (to be	implemented)
			6: read	audit (to be implemented)
			7: write audit (to be implemented)
	DS:DX -> ASCIZ pathname
Return:	CF set on error
	    AL = error code
		FFh file not found
		8Ch caller lacks privileges
	CL = current extended file attributes
---------------------------------------------
INT 21 - Novell	Advanced NetWare 2.0+ -	PRINT JOBS
	AH = B8h
	AL = subfunction
	  00h get default print	job flags
		CX=len(ReplyBuffer);
		ES:BX ->(ReplayBuffer);
		DH=0;
		ReplyBuffer=CAPTURE_FLAGS;
	      Return: AL=error code;
	  01h set default capture flags
		CX=len(SendBuffer);
		ES:BX ->(SendBuffer);
		DH=0;
		SendBuffer=CAPTURE_FLAGS;
	      Return: AL=error code;
	  02h get specific capture flags
		CX=len(ReplyBuffer);
		ES:BX ->(ReplayBuffer);
		DH=prnDevice;
		ReplyBuffer=CAPTURE_FLAGS;
	      Return: AL=error code;
	  03h set specific print job flags
		CX=len(SendBuffer);
		ES:BX ->SendBuffer;
		DH=prnDevice;
		SendBuffer=CAPTURE_FLAGS;
	      Return: AL=error code;
	  04h get default local	printer
	      Return: DH=prnDevice;
	  05h set default local	printer
		DH=prnDevice;
		(?)CX=0;
		(?)ES:BX=addr(0)
	      Return: AL=error code;
	  06h set capture print	queue
		DL=serverNum;
		DH=prnDevice;
		bx,cx=queueID
	      Return: AL=error code;
	  07h set capture print	job
		SI:DI:CX=captureFileHandle;
		DH=lptDevice;
		BX=jobNumber;
	      Return: AL=error code;
	  08h get banner user name
		CX=len(ReplyBuffer);
		ES:BX->ReplyBuffer;
		DH=0;
		ReplyBuffer=name of user - array [1..13]
	      Return: AL=error code;
	  09h set banner user name
		CX=len(SendBuffer);
		ES:BX->SendBuffer;
		DH=0;
		SendBuffer=name	of user	- array	[1..13]
	      Return: AL=error code;
	CX = buffer size
	ES:BX -> buffer
CAPTURE_FLAGS Record:
	      status:byte;
	      flags:byte;
	      tabSize:byte;
	      serverPrinter:byte;
	      numberOfCopies:byte;
	      formType:byte;
	      reserved:byte;
	      bannerText:array[1..13] of char;
	      reserved:byte;
	      localLPTDevice:byte;
	      flushCaptureTimeoutCount:integer;
	      flushCaptureOnDeviceClose:byte;
	      maxLines:integer;
	      maxChars:integer;
	      formName:array[1..13] of char;
	      LPTCaptureFlag:byte;
	      fileCaptureFlag:byte;
	      timingOutFlag:byte;
	      printerSetupBuffer:^CharBuffer;
	      printerResetBuffer:^CharBuffer;
	      connectionIDQueuePrintJob:byte;
	      captureInProgress:byte;
	      printQueueFlag:byte;
	      printJobValid:byte;
	      printQueueID:longint;
	      printJobNumber:word;
Return:	none
---------------------------------------------
INT 21 - Nowell	NetWare	- GET ENVIRONMENT SEGMENT
	AH = BAh
Return:	DX = segment
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - SET END OF JOB STATUS
	AH = BBh
	AL = new EOJ flag
	    00h	disable	EOJs
	    otherwise enable EOJs
Return:	AL = old EOJ flag
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOG PHYSICAL RECORD
	AH = BCh
	AL = flags
	    bit	0: lock	as well	as log record
		1: non-exclusive lock
	BX = file handle
	CX:DX =	recordStartOffset
	BP = timeout in	timer ticks (1/18 sec)
	SI:DI or SI ? =	recordLength
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - RELEASE PHYSICAL RECORD
	AH = BDh
	BX = file handle
	CX:DX =	recordStartOffset
	SI:DI =	recordLength;
	AL = 0;
	BP = 0;
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - CLEAR PHYSICAL RECORD
	AH = BEh
	BX = file handle
	CX:DX =	offset
	SI:DI =	recordLength;
	AL = 0;
	BP = 0;
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOG RECORD (FCB)
	AH = BFh
	AL = flags
	    bit	0: lock	as well	as log record
		1: non-exclusive lock
	DS:DX -> FCB
	BX:CX =	offset
	BP = timeout in	timer ticks (1/18 sec)
	SI:DI =	length
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - RELEASE RECORD (FCB)
	AH = C0h
	DS:DX -> FCB
	BX:CX =	offset
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - CLEAR RECORD (FCB)
	AH = C1h
	DS:DX -> FCB
	BX:CX =	offset
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOCK PHYSICAL RECORD SET
	AH = C2h
	AL = flags
	    bit	1: non-exclusive lock
	BP = timeout in	timer ticks (1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - RELEASE PHYSICAL RECORD SET
	AH = C3h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - CLEAR PHYSICAL RECORD SET
	AH = C4h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - SEMAPHORES
	AH = C5h
	AL = subfunction
	    00h	open semaphore
		DS:DX -> semaphore name{string}
		CL = initial value
	    01h	examine	semaphore
		Return:	CX = semaphore value (sign extended)
			DL = open count
	    02h	wait on	semaphore
		BP = timeout in	timer ticks (1/18 sec)
	    03h	signal semaphore
	    04h	close semaphore
	CX:DX =	semaphore handle (except function 00h)
Return:	AL = error code
	if function 00h
	   CX:DX = semaphore handle
	   BL =	open count
	if function 01h
	   CX =	value;
	   DL =	count;
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - GET OR SET LOCK MODE
	AH = C6h
	AL = subfunction
	    00h	set old	"compatibility"	mode
	    01h	set new	extended locks mode
	    02h	get lock mode
Return:	AL = current lock mode
	     0 lock is old version
	     1 extended	lock
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - TTS
	AH = C7h
	AL = subfunction
	    00h	begin transaction (NetWare SFT level II)
		Return:	AL = error code
	    01h	end transaction	(NetWare SFT level II)
		Return:	AL = error code
			CX:DX =	transaction reference number
	    02h	TTS available (NetWare SFT level II)
		Return:	AL = completion	code
			    00h	TTS not	available
			    01h	TTS available
			    FDh	TTS available but disabled
	    03h	abort transaction (NetWare SFT level II)
		Return:	AL = error code
	    04h	transaction status
		CX:DX =	transNumber
		Return:	AL = error code;
	    05h	get application	thresholds
		Return:	AL = error code;
			CL = logical level;
			CH = physical level;
	    06h	set application	thresholds
		CL = logical level;
		CH = physical level;
		Return:	AL = error code;
	    07h	get workstation	thresholds
		Return:	AL = error code;
			CL = logical level;
			CH = physical level;
	    08h	set workstation	thresholds+
		CL = logical level;
		CH = physical level;
		Return:	AL = error code;
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - BEGIN LOGICAL FILE LOCKING
	AH = C8h
	if function C6h	lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	if function C6h	lock mode 01h:
	    BP = timeout in timer ticks	(1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - END LOGICAL FILE LOCKING
	AH = C9h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - LOG PERSONAL FILE	(FCB)
	AH = CAh
	DS:DX -> FCB
	if function C6h	lock mode 01h:
	    AL = log and lock flag
		00h log	file only
		01h lock as well as log	file
		02h lock as well as log	file{sovmestnoi	blokirovkoi}
	    BP = timeout in timer ticks	(1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - LOCK FILE	SET
	AH = CBh
	if function C6h	lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	if function C6h	lock mode 01h:
	    BP = timeout in timer ticks	(1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - RELEASE FILE (FCB)
	AH = CCh
	DS:DX -> FCB
Return:	error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - RELEASE FILE SET
	AH = CDh
Return:	none
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CLEAR FILE (FCB)
	AH = CEh
	DS:DX -> FCB
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CLEAR FILE SET
	AH = CFh
Return:	AL = 00h
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOG LOGICAL RECORD
	AH = D0h
	DS:DX -> record	string
	if function C6h	lock mode 01h:
	    AL = flags
		bit 0: lock as well as log the record
		bit 1: non-exclusive lock
	    BP = timeout in timer ticks	(1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOCK LOGICAL RECORD SET
	AH = D1h
	if function C6h	lock mode 00h:
	    DL = mode
		00h no wait
		01h wait
	    AL = 0
	if function C6h	lock mode 01h:
	   BP =	timeout	in timer ticks (1/18 sec)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - RELEASE LOGICAL RECORD
	AH = D2h
	DS:DX -> record	string
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - RELEASE LOGICAL RECORD SET
	AH = D3h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CLEAR LOGICAL RECORD
	AH = D4h
	DS:DX -> record	string
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CLEAR LOGICAL RECORD SET
	AH = D5h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - END OF JOB
	AH = D6h
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - SYSTEM LOGOUT
	AH = D7h
	{DS:SI = [2]send packet;
	ES:DI =	[2]reply packet;}
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - ALLOCATE RESOURCHE(?)
	AH = D8h
	DL = resourcheNumber
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - DEALLOCATE RESOURCHE(?)
	AH = D9h
	DL = resourcheNumber
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - GET VOLUME STATISTICS
	AH = DAh
	DL = volume number
	ES:DI -> reply buffer
Return:	AL = 00h
	    reply buffer
		WORD  sectors/block
		WORD  total blocks
		WORD  unused blocks(available)
		WORD  total directory entries(slots)
		WORD  unused directory entries(slots)
	     16	BYTEs volume name, null	padded
		WORD  removable	flag, 0	= not removable
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - GET NUMBER OF LOCAL DRIVES
	AH = DBh
Return:	AL = number of local disks
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - GET STATION (CONNECTION) NUMBER
	AH = DCh
Return:	AL = station number
	    0 if NetWare not loaded or this machine is a non-dedicated server
	CX = station number in ASCII
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - SET ERROR	MODE
	AH = DDh
	DL = error mode
	    00h	display	critical I/O errors
	    01h	extended errors	for all	I/O in AL
	    02h	extended errors	for critical I/O in AL
Return:	AL = previous error mode
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - SET BROADCAST MODE
	AH = DEh
	AL or DL ? = broadcast mode:
	    00h	receive	console	and workstation	broadcasts
	    01h	receive	console	broadcasts only
	    02h	receive	no broadcasts
	    03h	store all broadcasts for retrieval
	    04h	get broadcast mode
	    05h	disable	shell tiemr interrupt checks
	    06h	enable shell timer interrupt checks
Return:	AL = old broadcast mode
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CAPTURE
	AH = DFh
	AL = subfunction
	    00h	start LPT capture
	    01h	end LPT	capture
	    02h	cancel LPT capture
	    03h	flush LPT capture
	    04h	start specific capture
	    05h	end specific capture
	    06h	cancel specific	capture
	    07h	flush specific capture
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - PRINT SPOOLING
	AH = E0h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h	spool data to a	capture	file
		RB: [515] (str)[512]buffer
		Replay:none
	    01h	close and queue	capture	file
		RB: [4]	(byte)endMode
		endMode=$ff-cansel,=0-spool(=queue?)
		Replay:none
	    02h	set spool flags
		SP:[22]	(byte)printFlags;
		   (byte)tabSize,(byte)printerNumber
		   (byte)numberOfCopies
		   (byte)formType
		RP:none
	    03h	spool existing file
		SP:[261](byte)driveHandle
		(len,str)[256]Path
	    04h	get spool queue	entry
		SP:[5](byte) printerNumber
		   (byte)jobPrinter
		RP:[84](byte)jobNumber,(word)?,[14](str)fileName,(byte)?,
		   (byte)printFlags,(byte)tabSize,(Byte)?,
		   (byte)numberOfCopies,(byte)formType,(byte)connectionNumber,
		   (bytes)[6]spoolTime,[15](bytes)?,[14](str)bannerName,
		   [18](bytes)?,(long)userObjectID
	    05h	remove entry from spool	queue
		SP:[3+n](byte)printerNumber,{(byte)jobNumber}
		RP:none
	    06h	get printer status
		SP:[4](byte)printerNumber
		RP:[6](byte)printerHalted,(byte)printerOffLine,
		(byte)formType,(byte)targetPrinter
	    09h	create a disk capture file
		SP:[261](byte)driveHandle,(le,str)[256]filePath
		Rp:none
	    0Ah	getprinter queue
		SP:[4](char)LPTDevice
		RP:[6](long)printQueueID
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - BROADCAST	MESSAGES
	AH = E1h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h	send broadcast message
		SP:[160](byte)connectionCount,
		   {(byte)connectioList[ConCoun]}
		   (len,str)[56]message
		RP:[103](byte)connectionCount(!)(Before	executed func.)
		   {(byte)connectioList}
	    01h	get broadcase message
		SP:none
		RP:[58](len,str)[56]message
	    02h	disable	station	broadcasts
		SP:none
		RP:[4](word)?
	    03h	enable station broadcasts
		SP:none
		RP:[4](word)?
	    04h	send personal message
		SP:[231](byte)connectionCount,{(byte)connectioList}
		   (len,str)[127]message
		RP:[103](!)(byte)connectionCount,{(byte)connectioList}
	    05h	get personal message
		SP:none
		RP:[132](len,str)[127]message
	    06h	open message pipe
		SP:[104](byte)connectionCount,{(byte)connectioList}
		RP:[103](!)(byte)connectionCount,{(byte)connectioList}
	    07h	close message pipe
		SP:[104](byte)connectionCount,{(byte)connectioList}
		RP:[103](!)(byte)connectionCount,{(byte)connectioList}
	    08h	check pipe status
		SP:[104](byte)connectionCount,{(byte)connectioList}
		RP:[103](!)(byte)connectionCount,{(byte)connectioList}
	    09h	broadcast to console
		SP:[64](len,str)[61]message
		RP:none
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - DIRECTORY	FUNCTIONS
	AH = E2h
	DS:SI -> request buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h	set directory handle
		SP:[261](byte)targetDirectoryHandle,
		   (byte)sourceDirectoryHandle,
		   (len,str)[256sourceDirectoryPath
		RP:none
	    01h	get directory path
		SP:[4](byte)directoryHandle
		RP:[258](len,str)directoryPath
	    02h	scan directory information
		SP:[262](byte)directoryHandle,
		   (word)sequenceNumber,
		   (len,str)[256]sourceDirectoryPath
		RP:[30](str0)[16]directoryPath
		   [2](bytes)creationDate,
		   [2](bytes)creationTime,
		   (long)ownerObjectID,
		   (byte)maximumRightsMask,
		   (byte)reserved(?),
		   (word)sequenceNumber
	    03h	get effective directory	rights
		SP:[260](byte)directoryHandle,
		   (len,str)[256]sourceDirectoryPath
		RP:[3](byte)effectiveRightsMask
	    04h	modify maximum rights mask
		SP:[262]directoryHandle,
		(byte)grantRightMask,  <Ŀ
					  (?)
		(byte)revokeRightsMask,<
		(len,str)[256]directoryPath
	    05h	get volume number
		SP:[19](len,str)[16]volumeName
		RP:(byte)volumeNumber
	    06h	get volume name
		SP:[4](byte)volumeNamber
		RP:[18](len,str)[16]volumeName
	    0Ah	create directory
		SP:[261](byte)directoryHandle,
		   (byte)maximumRightsMask,
		   (len,str)[256]directoryPath
		RP:none
	    0Bh	delete directory
		SP:[261](byte)directoryHandle,
		   (byte)reserved(?),
		   (len,str)[256]directoryPath
		RP:none
	    0Ch	scan directory for trustees
		SP:[261](byte)directoryHandle,
		   (word)sequenceNumber,
		   (len,str)[256]directoryPath
		RP:[51](str0)[16]directoryName,
		   [4](bytes)creationDateAndTime,
		   (long)ownerID,
		   (longs)[20]trusreeIDs,
		   (bytes[5]trusteeRights
	    0Dh	add trustee to directory
		SP:[265](byte)directoryHandle,
		   (long)trusteeObjectID,
		   (byte)trusteeRightsMask,
		   (len,str)[256]directoryPath
		RP:none
	    0Eh	delete trustee from directory
		SP:[265](byte)directoryHandle,
		   (long)trusteeObjectID,
		   (len,str)[256]directoryPath
		RP:none
	    0Fh	rename directory
		SP:[275](byte)directoryHandle,
		   (len,str)[256]directoryPath,
		   (len,str)[16]newDirectoryName
		RP:none
	    10h	purge erased files
		SP:none
		RP:none
	    11h	restore	erased file
		SP:[21](byte)driveHandle;
		   (len,str)[16]volumeName
		RP:[32](str0)[15]erasedFileName,
		   (str0)[15]restoredFileName
	    12h	allocate permanent directory handle
		SP:[261](byte)directoryHandle,
		   (char)driveLetter,
		   (len,str)[256]directoryPath
		RP:[4](byte)newDirectoryHandle,
		   (byte)effectiveRightsMask
	    13h	allocate temporary directory handle
		SP:[261](byte)sourceDirectoryHandle,
		   (char)driveLetter,
		   (len,str)[256]directoryPath
		RP:[4](byte)newDirectoryHandle,
		   (byte)effectiveRightsMask
	    14h	deallocate directory handle
		SP:[4](byte)directoryHandle
		RP:none
	    15h	get volume info	with handle
		SP:[4](byte)directoryHandle
		RP:[30](word)sectorsPerBlock,
		   (word)totalBlock,
		   (word)availableBlocks,
		   (word)totalDirectorySlots,
		   (word)availableDirectorySlots,
		   (str0)[16]volumeName,
		   (byte)volumeIsRemovable
	    16h	allocate special temporary directory handle(?)
	    17h	retrieve a short base handle (Advanced NetWare 2.0)
		(save directory	handle)
		SP:[4](byte)directoryHandle
		RP:[18]	[16](bytes)saveArea
	    18h	restore	a short	base handle (Advanced NetWare 2.0)
		SP:[19]	[16](bytes)saveArea
		RP:[4](byte)newDirectoryHandle
		   (byte)effectiveRighsMask
	    19h	set directory information
		SP:[270](byte)directoryHandle,
		   [4](bytes)newCreationDateAndTime,
		   (long)newOwnerObjectID,
		   (byte)newMaximumRightsMask,
		   (len,str)[256]directoryPath
		RP:none
	    1Ah	get path from directory	entry
		SP:[6](byte)volumeNumber,
		   (word)directoryEntry
		RP:[258](len,str)path
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - CONNECTION CONTROL
	AH = E3h
	DS:SI -> requst	buffer
	ES:DI -> reply buffer
	subfunction in third byte of request buffer
	    00h	login(?)
	    01h	change password(?)
	    02h	map user to station set(?)
	    03h	map object to number(?)
	    04h	map number to object(?)
	    05h	get station's logged information(?)
	    06h	get station's root mask (obsolete)(?)
	    07h	map group name to number(?)
	    08h	map number to group name(?)
	    09h	get memberset M	of group G(?)
	    0Ah	enter login area
		SP:[260] (char)	numberOfLocalDrivers,
		   (!)(len,str)loginSubdirectoryName;
		   if str='' then str:='sys:\login'
		RP:none
	    0Bh
	    0Ch	verify network serial number
		SP:[7] (long)networkSerialNumber
		RP:[4] (word)applicationNumber
	    0Dh	log network message
		SP:[84](len,str)[81]message
		RP:none
	    0Eh	get disk utilization (Advanced NetWare 1.0)
		SP:[8] (byte)volumeNumber,
		   (long)objectID
		RP:[13]	[5](bytes?),(word)usedDirectories,
		   (word)usedFiles,(word)usedBlocks
	    0Fh	scan file information (Advanced	NetWare	1.0)
		SP:[263] (word)sequenceNumber,
		   (byte)driveHandle,(bbyte)serchAttributes,
		   (len,str)[256]filePath
		RP:[96]	(wordsequenceNumber,
		   (str0)[15]fileName,(byte)fileAttributes,
		   (byte)extendedFileAttributes,
		   (long)fileSize,(word)creationDate,
		   (word)lastAccessDate,
		   [4](bytes)lastUpdateDateAndTime,
		   (long)fileOwnerID,
		   [4](bytes)lastArchiveDateAndTime
	    10h	set file information (Advanced NetWare 1.0)
		SP:[339] (byte)fileAttributes,(byte)extendedFileAttributes,
		   (long)0,(word)creationDate,(word)lastAccessDate,
		   [4](bytes)lastUpdateDateAndTime,(long)fileOwnerID,
		   [4](bytes)lastArchiveDateAndTime,[56](bytes)0,
		   (byte)driveHandle,(byte)searchAttributes,(len,str)filePath
		RP:none
	    11h	get file server	information (Advanced NetWare 1.0)
		SP:none
		RP:[130] (str0)[48]serverName,(byte)netwareVersion,
		   (byte)netwareSubVersion,(word)maximumConnectonSupported,
		   (word)connectionInUse,(word)maximumVolumeSupported,
		   (byte)revisionLevel,(byte)SFTLevel,(byte)TTSLevel,
		   (word)peakConnectionUsed,(byte)accountingVersion,
		   (byte)VAPVersion,(byte)queingVersion,
		   (byte)printSeverVersion,(word)virtualConsoleVersion,
		   (byte)securityRestrictionLevel,
		   (byte)internetBridgeSupport,[60](bytes)?
	    12h	get network serial number (Advanced NetWare 1.0)
		SP:none
		RP:[8](long)networkSerialNumber,
		   (word)applicatonNumber
	    13h	get internet address (Advanced NetWare 1.02)
		SP:[4](byte)connectionNumber
		RP:[14]	(long)networkNumber,
		   (bytes)[6]physicalNodeAddress,
		   (word)socketNumber
	    14h	login to file server (Advanced NetWare 2.0)(?)
	    15h	get object connection numbers (Advanced	NetWare	2.0)
		SP:[54](word)objectType,
		   (len,str)[48]objectName
		RP:[103] (byte)numberOfConnections,
		   {(byte)connectionList}
	    16h	get connection information (Advanced NetWare 1.0)
		SP:[4] (byte)connectonNumber
		RP:[64](long)objectID,(word)objectType,
		   (str0)[48]objectName,(bytes)[7]loginName


	    32h	create object (Advanced	NetWare	1.0)
		SP:[55](byte)objectFlag,(byte)objectSecurity,
		   (word)objectType,(len,str)[48]objectName
		RP:none
	    33h	delete object (Advanced	NetWare	1.0)
		SP:[53](word)objectType,(len,str)[48]objectName
		RP:none
	    34h	rename object (Advanced	NetWare	1.0)
		SP:[101](word)objectType,
		   (len,str)[48]objectName,(len,str)[48]newObjectName
		RP:none
	    35h	get object ID (Advanced	NetWare	1.0)
		SP:[53](word)objectType,(len,str)objectName
		RP:[56](long)objectID,[50](bytes)?
	    36h	get object name	(Advanced NetWare 1.0)
		SP:[7](long)objectID
		RP:[56](long)?,(word)objectType,(str0)[48]objectName
	    37h	scan object (Advanced NetWare 1.0)
		SP:[57](long)objectID,
		   (word)searchObjectType,
		   (len,str)[48]searchObjectName
		RP:[59](long)objectID,(word)objectType,
		   (str0)[48]objectName,(byte)objectFlag,
		   (byte)objectSecurity,(byte)objectHasProperties
	    38h	change object security (Advanced NetWare 1.0)
		SP:[54](byte)newObjectSecurity,
		   (word)objectType,(len,str)[48]objectName
		RP:none
	    39h	create propery (Advanced NetWare 1.0)
		SP:[71](word)objectType,(len,str)[48]objectName,
		   (byte)propertyFlags,(byte)propertySecurity,
		   (len,str)[16]propertyName
		RP:none
	    3Ah	delete property	(Advanced NetWare 1.0)
		SP:[69](word)objectType,
		   (len,str)[48]objectName,
		   (len,str)[16]propertyName
		RP:none
	    3Bh	change property	security (Advanced NetWare 1.0)
		SP:[70](word)objectType,
		   (len,str)[48]objectName,
		   (byte)newAccessFlags,
		   (len,str)[16]propertyName
		RP:none
	    3Ch	scan property (Advanced	NetWare	1.0)
		SP:[73](word)objectType,
		   (len,str)[48]objectName,
		   (long)longSequenceNumber,
		   (len,str)[16]searchPropertyName.
		RP:[28](str0)[16]propertyName,
		   (byte)propertyFlags,
		   (byte)propertySecurity,
		   (long)longSequenceNumber,
		   (byte)propertyHasValue,
		   (byte)moreProperties,(word)?
	    3Dh	read property value (Advanced NetWare 1.0)
		SP:[70](word)objectType,
		   (len,str)[48]objectName,
		   (byte)segmentNumber,
		   (len,str)[16]propertyName
		RP:[132](str)[128]propertyValue,
		   (byte)moreSegments,
		   (byte)propertyFlags
	    3Eh	write property value (Advanced NetWare 1.0)
		SP:[199](word)objectType,
		   (len,str)[48]objectName,
		   (byte)segmentNumber,
		   (byte)moreSegments,
		   (len,str)[16]propertyName,
		   (len,str)[128]propertyValue
		RP:none
	    3Fh	verify object password (Advanced NetWare 1.0)(?)
	    40h	change object password (Advanced NetWare 1.0)(?)
	    41h	add object to set (Advanced NetWare 1.0)
		SP:[119](word)objectType,
		   (len,str)[48]objectName,
		   (len,str)[16]propertyName,
		   (int)memberType,
		   (len,str)[48]memberName
		RP:none
	    42h	delete object from set (Advanced NetWare 1.0)
		SP:[119](word)objectType,
		   (len,str)[48]objectName,
		   (len,str)[16]propertyName,
		   (int)memberType,
		   (len,str)[48]memberName
		RP:none
	    43h	is object in set? (Advanced NetWare 1.0)
		SP:[119](word)objectType,
		   (len,str)[48]objectName,
		   (len,str)[16]propertyName,
		   (int)memberType,
		   (len,str)[48]memberName
		RP:none
	    44h	close bindery (Advanced	NetWare	1.0)
		SP:none
		RP:none
	    45h	open bindery (Advanced NetWare 1.0)
		SP:none
		RP:none
	    46h	get bindery access level (Advanced NetWare 1.0)
		SP:none
		RP:[7](byte)accessLevel,
		   (long)myObjectID
	    47h	scan object trustee paths (Advanced NetWare 1.0)
		SP:[10](byte)volumeNumber,
		   (word)sequenceNumber,
		   (long)objectID
		RP:[265](word)sequenceNumber,
		   (long)(?),(byte)trusteeAccessMask,
		   (len,str)256]trusteePathName
	    4Ch	scan for equivalence(?)
		SP:[512](long)startInstance,
		   (word)objectType,
		   (lenstr)[48]objectName,
		   (byte)15,<<SECURITY_EQUALS>>
		RP:[134](word)returnedCount(*),
		   {(long)securityArray}
	    64h	create queue
		SP:[173](int)queueType,
		   (len,str)queueName,
		   (byte)directoryName,
		   (len,str)[256]pathName
		RP:[7](long)queueID
	    65h	destroy	queue
		SP:[7](long)queueID
		RP:none
	    66h	read queue current status
		SP:[7](long)queueID
		RP:[134](long)?,(byte)queueStatus,
		   (byte)currentEntiries,
		   (byte)currentServers(*),
		   {(long)serverIDList},
		   {(byte)serverStationList}
	    67h	set queue current status
		SP:[8](long)queueID,
		   (byte)queueStatus
		RP:none
	    68h	create queue job
		SP:[263](long)queueID,
		   jobStructure,
		RP:[54]jobStructure
	    69h	start queue job
		SP:[9](long)queueID
		   (word)jobNumber
		RP:none
	    6Ah	remove job from	queue
		SP:[9](long)queueID
		   (word)jobNumber
		RP:none
	    6Bh	get queue job list
		SP:[7](long)queueID
		RP:[504](word)jobCount(*),
		   {(word)jobNumber}
	    6Ch	read queue job entry
		SP:[9](long)queueID
		   (word)jobNumber
		RP:[258](jobStructure)
	    6Dh	change queue job entry
		SP:[263](long)queueID
		   [256]jobStructure
		RP:none
	    6Eh	change queue job position
		SP:[10](long)queueID
		   (word)jobNumber
		   (byte)newPositions
		RP:none
	    6Fh	attach queue server to queue
		SP:[7](long)queueID
		RP:none
	    70h	detach queue server from queue
		SP:[7](long)queueID
		RP:none
	    71h	service	queue job
		SP:[9](long)queueID,
		   (word)targetJobType
		RP:[56][22](bytes)?,
		   (word)jobNumber,
		   [30](bytes)?
	    72h	finish servising queue job and file
		SP:[13](long)queueID,
		   (word)jobNumber,
		   (long)charge
		RP:none
	    73h	abort servising	queue job and file
		SP:[9](long)queueID
		   (word)jobNumber
		RP:none
	    74h	change to client rights
		SP:[9](long)queueID
		   (word)jobNumber
		RP:none
	    75h	restore	queue server rights
		SP:none
		RP:none
	    76h	read queue server current status
		SP:[12](long)queueID,
		   (long)serverID,
		   (byte)serverStation
		RP:[66](str)[64]serverStatusRecord
	    77h	set queeu server current status
		SP:[71](long)queueID,
		   [64](str)serverStatusRecord
		RP:none
	    78h	get queue jobs file size
		SP:[9](long)queueID,
		   (word)jobNumber
		RP:[12][6](bytes)?,(long)fileSize

	    96h	get account status
		SP:[54](word)binderyObjectType,
		   (len,str)[48]binderyObjectName
		RP:[258](long)balance,
		   (long)limit,
		   [128](longs)holds
	    97h	submit account charge
		SP:[321](word)serviceType,
		   (long)chargeAmount,
		   (long)cancelHoldAmount,
		   (word)binderyObjectType,
		   (word)commentType,
		   (len,str)[48]binderyObjectName,
		   (len,str)comment
		RP:none
	    98h	submit account hold
		SP:[57](long)reserveAmount,
		   (word)binderyObjectType,
		   (len,str)[48]binderyObjectName
		RP:none
	    99h	submit account note
		SP:[256](word)serviceType,
		   (word)binderyObjectType,
		   (word)commentType,
		   (len,str)[48]binderyObjectName,
		   (len,str)comment

	    C8h	check console priviledges
		SP:none
		RP:none
	    C9h	get file server	description strings
		SP:none
		RP:[514](str0)companyName,
		   (str0)revision,
		   (str0)revisionDate,
		   (str0)cpyrightNotice
	    CAh	set file server	date and time
		SP:[9](byte)year,(byte)month,
		   (byte)day,(byte)hour,
		   (byte)minute,(byte)second
		RP:none
	    CBh	disable	file server login
		SP:none
		RP:none
	    CCh	enable file server login
		SP:none
		RP:none
	    CDh	get file server	login status
		SP:none
		RP:[3](byte)loginEnableFlag
	    CEh	purge all erased files
		SP:none
		RP:none
	    CFh	disable	transaction tracking
		SP:none
		RP:none
	    D0h	enable transaction tracking
		SP:none
		RP:none
	    D1h	send console broadcast
		SP:[164](byte)connectionCount,
		   {(byte)connectionList}
		   (len,str)[60]message
		RP:none
	    D2h	clear connection number
		SP:[4](byte)connectionNumber
		RP:none
	    D3h	down file server
		SP:(byte)(!)forceFlag
		   FFh - everytime
		   00h - if server have not opend file
		RP:none
	    D4h	get file system	statistics
		SP:none
		RP:[30](long)systemElapsedTime,
		   (int)maxOpenFiles,
		   (int)maxFileOpened,
		   (int)currOpenFiles,
		   (long)totalFilesOpened,
		   (long)totalReadRequest,
		   (long)totalWriteRequest,
		   (int)currChangedFATSectors,
		   (int)FATWriteErrors,
		   (int)fatalFATWriteErrors,
		   (int)FATScanErrors,
		   (int)maxIndexFilesOpened,
		   (int)currOpenIndexedFiles,
		   (int)attachedIndexedFiles,
		   (int)availableIndexFiles
	    D5h	get transaction	tracking statistics
		SP:none
		RP:[514](long)systemElapsedTime,
		   (byte)TTS_Supported,
		   (byte)TTS_Enabled,
		   (int)TTS_VolumeNumber,
		   (int)TTS_MaxOpenTransactions,
		   (int)TTS_MaxTransactionsOpened,
		   (int)TTS_CurrTransactionsOpen,
		   (long)TTS_TotalTransactions,
		   (long)TTS_TotalWrites,
		   (long)TTS_TotalBackouts,
		   (int)TTS_UnfilledBackouts,
		   (int)TTS_DiskBlockInUse,
		   (long)TTS_FATAllocatons,
		   (long)TTS_FileSizeChanges,
		   (long)TTS_FilesTruncated,
		   (byte)numberOfTransactions,
		   {(byte)connectionNumber,
		   (byte)taskNumbered}
	    D6h	read disk cache	statistics
		SP:none
		RP:[80](long)systemElapsedTime,
		   (int)cacheBufferCount,
		   (int)cacheBufferSize,
		   (int)dirtyCacheBuffers,
		   (long)cacheReadRequests,
		   (long)cacheWriteRequests,
		   (long)cacheHits,
		   (long)cacheMisses,
		   (long)physicalReadRequests,
		   (long)physicalWriteRequests,
		   (word)physicalReadErrors,
		   (word)physicalWriteErrors,
		   (long)cacheGetRequests,
		   (long)cacheFullWriteRequests,
		   (long)cachePartialWriteRequests,
		   (long)backgroundDirtyWrites,
		   (long)backgroundAgedWrites,
		   (long)totalCacheWrites,
		   (long)cacheAllocations,
		   (word)thrashingCount,
		   (word)LRUBlockWasDirtyCount,
		   (word)readBeyondWriteCount,
		   (word)fragmentedWriteCount,
		   (word)cacheHitOnUnavailCount,
		   (word)cacheBlockScrappedCount
	    D7h	get drive mapping table
		SP:none
		RP:[238](long)systemElapsedTime,
		   (byte)SFTLevel,
		   (byte)logicalDriveCount,
		   (byte)physicalDriveCount,
		   (bytes)[5]diskChannelTable,
		   (int)pendingIOCommands,
		   (bytes)[32]mappingTable,
		   (bytes)[32]driveMirrorTable,
		   (bytes)[32]deadMirrorTable,
		   (byte)remirroredDrive,
		   (byte)?,(long)remirroredBlock,
		   (ints)[120]SFTErroeTable
	    D8h	read physical disk statistics
		SP:[4](byte)physicalDiskNumber
		RP:[96](long)systemElapsedTime,
		   (byte)diskChannel,
		   (byte)diskRemovable,
		   (byte)driveType,
		   (byte)controllerDriveNumber,
		   (byte)controllerNumber,
		   (byte)controllerType,
		   (long)driveSize,  (size returned in block @FN=4096 byte )
		   (int)driveCylinders,
		   (byte)driveHeads,
		   (byte)sectorsPerTrack,
		   (str)[63]driveDefinition,
		   (int)IOErrorCount,
		   (long)hotFixStart,(!!! for SFT I and	above)
		   (int)hotFixSize(!!!)
		   (int)hotFixBlockAvailable(!!!)
		   (byte)hotFixDisabled(!!!)
	    D9h	get disk channel statistics
		SP:[4](byte)channelNumber
		RP:[186](long)systemElapsedTime,
		   (int)channelState,(channelState=RUNNING,BEINGSTOPPED,
			STOPPED,NONFUNCTIONAL)
		   (int)channekSyncState,
		   (byte)driverType,
		   (byte)driverMajorVersion,
		   (byte)driverMinorVersion,
		   (str)[65]driverDescription,
		   (word)IOAddr1,
		   (word)IOAddr1Size,
		   (word)IOAddr2,
		   (word)IOAddr2Size,
		   (bytes)[3]sharedMem1Seg,
		   (word)sharedMem1Ofs,
		   (bytes)[3]sharedMem2Seg,
		   (word)sharedMem2Ofs,
		   (byte)interrupt1Used,
		   (byte)interrupt1,
		   (byte)interrupt2Used,
		   (byte)interrupt2,
		   (byte)DMAChannel1Used,
		   (byte)DMAChannel1,
		   (byte)DMAChannel2Used,
		   (byte)DMAChannel2,
		   (int)reserved2,
		   (str)[80]configDescription
	    DAh	get connection's task information
		SP:[5](byte)connectionNumber
		RP:[514](byte)lockStatus,
		   (byte)numberOfRecords,
		   (!!!){...},
		   {(byte)taskNumber,(byte)taskState}
		 (!!!)-
		   section {...} defined with fill volume LOCKSTATUS:
		    0:none,
		    1:(byte)waitingTaskNumber,
		      (long)beginAddress,
		      (long)endAddress,
		      (byte)volumeNumber,
		      (word)directoryEntry,
		      [14](str)lockedName
		    2:(byte)waitingTaskNumber,
		      (byte)volumeNumber,
		      (word)directoryEntry,
		      [14](str)lockedName
		    3:(byte)waitingTaskNumber,
		      (len,str)lockedName
		    4:(byte)waitingTaskNumber,
		      (len,str)lockedName
	    DBh	get list of connection's open files
		SP:[7](byte)connectionNumber,
		   (word)lastRecord
		RP:[514](word)lastRecord,
		   (byte)numberOfRecords(*),
		   {(byte)taskNumber,
		    (byte)lockStatus,
		    (byte)accessFlag,
		    (byte)volumeNumber,
		    (word)directoryEntry,
		    (str)[14]charFileName}
	    DCh	get list of connections	using a	file
		SP:[136](word)lastRecord,
		   (byte)directoryHandle,
		   (len,str)[256]filePath
		RP:[514](word)useCount,
		   (word)openCount,
		   (word)openForReadCount,
		   (word)openForWriteCount,
		   (word)denyReadCount,
		   (word)denyWriteCount,
		   (word)lastRecord,
		   (byte)locked,
		   (byte)numberOfRecords(*),
		   {(word)logicalConnNumber,
		    (byte)taskNumber,
		    (byte)lockType,
		    (byte)accessFlags,
		    (byte)lockStatus}
	    DDh	get physical record locks by connection	and file
		SP:[266](byte)connectionNumber,
		   (word)lastRecord,
		   (byte)volumeNumber,
		   (byte)directoryHandle,
		   (str0)[256]fileName
		RP:[514](word)lastRecord,
		   (byte)(?),
		   (byte)numberOfRecords(*),
		   {(byte)taskNumber,
		    (byte)lockFlag,
		    (long)recordStart,
		    (long)recordEnd}
	    DEh	get physical record locks by file
		SP:[262](word)lastRecord,
		   (byte)directoryHandle,
		   (len,str)[256]filePath
		RP:[514](word)lastRecord,
		   (byte)physicalRecordLockCount,
		   (byte)numberOfRecords(*)
		   {(word)loggedCount,
		    (word)shareLockCount,
		    (long)recordStart,
		    (long)recordEnd,
		    (byte)taskNumber,
		    (byte)lockType}
	    DFh	get logical records by connection
		SP:[7](byte)connectionNumber,
		   (word)lastRecord
		RP:[514](word)lastRecord,
		   (byte)numberOfRecords(*),
		   {(byte)taskNumber,
		    (byte)lockStatus,
		    (len,str)logicalLockName}
	    E0h	get logical record information
		SP:[55](word)lastRecord,
		   (len,str)logicalRecordName
		RP:[514](word)currentUseCount,
		   (word)shareableLockCount,
		   (word)lastRecord,
		   (byte)locked,
		   (byte)numberOfRecords(*),
		   {(word)logicalConnectionNumber,
		    (byte)taskNumber,
		    (byte)lockStatus}
	    E1h	get connection's semaphores
		SP:[7](byte)connectionNumber,
		   (word)lastRecord
		RP:[514](word)lastRecord,
		   (byte)numberOfRecords(*),
		   {(word)openCount,
		    (byte)SemaphoreValue,
		    (byte)taskNumber,
		    (len,str)[129]semaphoreName}
	    E2h	get semaphore information
		SP:[133](word)lastRecord,
		   (len,str)[129]semaphoreName
		RP:[514](word)lastRecord,
		   (word)openCount,
		   (byte)semaphoreValue,
		   (byte)numberOfRecords(*),
		   {(byte)connectionNumber,
		    (byte)taskNumber}
	    E3h	get LAN	driver's configuration information
		SP:[4](byte)LANBoardNumber,
		RP:[174](bytes)[4]networkAddress,
		   (bytes)[6]hostAddress,
		   (byte)LANDriverInstalled,
		   (byte)optionNumber,
		   [80](len,str)configurationText,
		   [80](len,str)configuratonText2
	    E5h	get connection's usage statistics
		SP:[5](byte)connectionNumber
		RP:[22](long)systemElapsedTime,
		   (bytes)[6]bytesRead,
		   (bytes)[6]bytesWrite,
		   (long)totalRequestPackets
	    E6h	get object's remaining disk space
		SP:[7](long)binderyObjectID,
		RP:[16](long)systemElapsedTime,
		   (long)?,(long)unusedDiskBlocks,
		   (long)restrictionEnforsed
	    E7h	get server LAN I/O statistics
		SP:none
		RP:[68](long)systemElapsedTime,
		   (int)maxRoutingBuffersAvail,
		   (int)maxRoutingBuffersUsed,
		   (int)routingBuffersInUse,
		   (long)totalFileServisPackets,
		   (int)fileServicePacketBuffered,
		   (int)ivalidConnPacketCount,
		   (int)badLogicalConnCount,
		   (int)packetsRcvdDuringProcCount,
		   (int)reprocessedRequestCount,
		   (int)badSequenceNumberPacketCount,
		   (int)dublicateReplyCount,
		   (int)acknowledgementSend,
		   (int)badRequesTypeCount,
		   (int)attachDuringProcCount,
		   (int)attachWhileAttacingCount,
		   (int)forgetDetachRequestCount,
		   (int)badConnNumberOnDetachCount,
		   (int)detachDurinProcCount,
		   (int)repliesCanceledCount,
		   (int)hopCountDiscardCount,
		   (int)unknownNetDiscardCount,
		   (int)noDGroupBufferDiscardCount,
		   (int)outPacketNoBufferDiscardCount,
		   (int)IPXNotMyNetworkCount,
		   (long)NetBIOSPropagationCount,
		   (long)totalOtherPackets,
		   (long)totalRoutedPackets
	    E8h	get server miscellaneous information
		SP:none
		RP:[58](long)systemElapsedTime,
		   (byte)processorType,
		   (byte)?,(byte)serviceProcessCount,
		   (byte)serverUtilizationProcent,
		   (word)maxBinderyObjectAvail,
		   (word)maxBinderyObjectUxed,
		   (word)binderyObjectInUse,
		   (int)serverMemoryInK,
		   (int)serverWastedMemoryInK,
		   (int)dynamicAreaCount,
		   (long)dynamicSpace1,
		   (long)maxUsedDynamicSpace1,
		   (long)dynamicSpaceInUse1,
		   (long)dynamicSpace2,
		   (long)maxUsedDynamicSpace2,
		   (long)dynamicSpaceInUse2,
		   (long)dynamicSpace3,
		   (long)maxUsedDynamicSpace3,
		   (long)dynamicSpaceInUse3,
	    E9h	get volume information
		SP:[3](byte)volumeNumber,
		RP:[44](long)systemElapsedTime,
		   (byte)volumeNumber,
		   (byte)logicalDriveNumber,
		   (word)sectorsPerBlock,
		   (word)startingBlock,
		   (word)totalBlocks
		   (word)availableBlocks,
		   (word)totalDirectorySlots,
		   (word)avaliableDirectorySlots,
		   (word)maxDirectorySlotsUsed,
		   (byte)isHashing,
		   (byte)isCaching,
		   (byte)isRemovable,
		   (byte)isMounted,
		   (str0)[16]volumeName
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - SET FILE ATTRIBUTES (FCB)
	AH = E4h
	CL = file attributes
	    bit	0: read	only
		1: hidden
		2: system
		3: execute only
		4: subdirectory
		5: archive
		6: reserved
		7: shareable
	DX:DX -> FCB
Return:	AL = error code
---------------------------------------------
INT 21 - DoubleDos - INSTALLATION CHECK
	AX = E400h
Return:	AL <> 0	if DoubleDos is	active
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - UPDATE FILE SIZE (FCB)
	AH = E5h
	DS:DX -> FCB
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - COPY FILE	TO FILE	(FCB)
	AH = E6h
	CX:DX =	number of bytes	to copy
	DS:SI -> source	FCB
	ES:DI -> destination FCB
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.0 - GET FILE SERVER DATE AND TIME
	AH = E7h
	DS:DX -> reply buffer
		BYTE  year - 1900
		BYTE  month
		BYTE  day
		BYTE  hours
		BYTE  minutes
		BYTE  seconds
		BYTE  day of week (0 = Sunday)
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - SET FCB RE-OPEN MODE
	AH = E8h
	DL = mode
	    00h	no automatic re-open
	    01h	auto re-open
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - SHELL'S "GET BASE STATUS"
	AH = E9h
	AL = subfunction
	    00h	get directory handle
		DX = drive number to check (0 =	A:)
	      Return: AL = network pathbase
		AH = base flags
		    00h	drive not currently mapped to a	base
		    01h	drive is mapped	to a permanent base
		    02h	drive is mapped	to a temporary base
		    03h	drive exists locally
	    01h	get search drive vector
		DS:DX =	replyBuffer
	      Return: RepBuf[16]vectors
	    02h	set search drive vector
		DS:DX =	sendBuffer
		sendBuffer = [16]vectors
	    05h	map fake root directory(?)
		BL = drive number(0-def,1-a:)
		DS:DX =	(str0)directory	path
	      Return: AL = error code
	    06h	delete fake root directory(?)
		BL = drive number(0-def,1-a:)
	      Return: AL = error code
	    07h	get relative drive depth(?)
		BL = drive number(0-def,1-a:)
	      Return: AL = number of directory below fake root
	    08h	set show dots(?)
		BL = mode(0-not	show)
	      Return: BL = old mode
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - RETURN SHELL VERSION
	AH = EAh
	AL = subfunction
	    00h	Get workstation	OS
	    01h	get workstation	OS String
Return:
		AH = workstation OS
		     0 if DOS;
		AL = hardvare type
		BH = shell major version
		BL = shell minor version
		CH = shell type
		CL = shell revision
		if al =	01h ES:DI -> 40-byte buffer
		Buffer:	buffer filled with three null-terminated entries:
			-major operating system (name)
			-version
			-hardware type (model of computer)
			-firm ,what made this computer
---------------------------------------------
INT 21 - DoubleDos - TURN OFF TASK SWITCHING
	AH = EAh
Return:	task switching turned off
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - LOG FILE
	AH = EBh
	DS:DX -> ASCIZ filename
	{if function C6h lock mode 01h:}
	    AL = flags
		00h log	file only
		01h lock as well as log	file
	    BP = timeout in timer ticks	(1/18 second)
Return:	AL = error code
---------------------------------------------
INT 21 - DoubleDos - TURN ON TASK SWITCHING
	AH = EBh
Return:	task switching turned on
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - RELEASE FILE
	AH = ECh
	DS:DX -> ASCIZ filename
Return:	none
---------------------------------------------
INT 21 - DoubleDos - GET VIRTUAL SCREEN	ADDRESS
	AH = ECh
Return:	ES = segment of	virtual	screen
Note: Screen address can change	if task-switching is on!!
---------------------------------------------
INT 21 - Novell	NetWare	- CLEAR	FILE
	AH = EDh
	DS:DX -> ASCIZ filename
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	NetWare	4.6 - GET PHYSICAL STATION NUMBER
	AH = EEh
Return:	CX:BX:AX = six-byte address (node)
---------------------------------------------
INT 21 - DoubleDos - GIVE AWAY TIME TO OTHER TASKS
	AH = EEh
	AL = number of 55ms time slices	to give	away
Return:	returns	after giving away time slices
---------------------------------------------
INT 21 - Novell	Advanced NetWare 1.0+ -	GET DRIVE INFO
	AH = EFh
	AL = subfunction
	    00h	get drive handle table
	    01h	get drive flag table
	    02h	get drive connection ID	table
	    03h	get connection ID table
	    04h	get file server	name table
Return:	ES:DI -> shell status table
---------------------------------------------
INT 21 - Novell	Advanced NetWare 1.0+ -	CONNECTION ID
	AH = F0h
	AL = subfunction
	    00h	set preferred connection ID\
	                                     > (।⥫ 䠩-ࢥ)
	    01h	get preferred connection ID/
	        
	    02h	get default connection ID - > (騩 䠩-ࢥ)
	    03h	LPT capture active
	    04h	set primary connection ID\
	    				   > (ࢨ 䠩-ࢥ)
	    05h	get primary connection ID/
	DL = preferred file server(set)
Return:	AL = selected file server(get)
	if al =	03h
	al = server number
	ah = selected file server
---------------------------------------------
INT 21 - Novell	Advanced NetWare 1.0+ -	FILE SERVER CONNECTION
	AH = F1h
	DL = preferred file server
	AL = subfunction
	    00h	attach to file server
	    01h	detach from file server
	    02h	logout from file server
Return:	AL = completion	code
---------------------------------------------
INT 21 - Novell	NetWare	- AFP
	AH = F2h
	DS:SI ->Send Packet(SP)
	ES:DI ->Replay Packet(RP)
	CX = length of send packet
	DX = length of replay packet
	AL = subfunction
	   23h = APF
	       Fn = subfunctions in third byte of request buffer
		  01h =	AFP Create Directory
		     SP: [298](byte)volumeNumber
			 (long)AFPEntryID
			 (byte)?
			 (bytes)[32]finderInfo
			 (len,str)[256]AFPPathString
		     RP: [4](long)newAFPEntryID
		  02h =	AFP Create File
		     SP: [298](byte)volumeNumber
			 (long)AFPEntryID
			 (byte)deleteExistingFile
			 (bytes)[32]finderInfo
			 (len,str)[256]AFPPathSring
		     RP: [4](long)newAFPEntryID
		  03h =	AFP Delete
		     SP: [265](byte)volumeNumber
			 (long)AFPEntryID
			 (len,str)[256]AFPPathSring
		     RP: none
		  04h =	AFP Get	EntryID	From Name
		     SP: [320](byte)volumeNumber
			 (long)AFPEntryID
			 (len,str)[256]AFPPathSring
		     RP: [4](long)newAFPEntryID
		  05h =	AFP GetFile Information
		     SP: [269](byte)volumeNumber
			 (long)AFPEntryID
			 (word)requestBitMap
			 (len,str)[256]AFPPathSring
		     RP: AFPFILEINFO
		  06h =	AFP Get	EntryID	From NetWare Handle
		     SP: [9](bytes)[6]NetWareHandle
		     RP: [6](byte)volumeID
			 (long)AFPEntryID
			 (byte)forkIndikator
		  07h =	AFP Rename
		     SP: [526](byte)volumeNumber
			 (long)AFPSourceEntryID
			 (len,str)[256]AFPSourcePath
			 (len,str)[256]AFPDestPath
		     RP: [2]?
		  08h =	AFP Open File Fork
		     SP: [267](byte)volumeNumber
			 (long)AFPEntryID
			 (byte)forkIndikator
			 (byte)accessMode
			 (len,str)[256]AFPPathString
		     RP: [14](long)fileID
			 (long)forkLength
			 (bytes)[6]NetWareHandle
		  09 = AFP Set File Information
		     SP: [313] (byte)volumeNumber
			 (long)AFPBaseID;(word)requestBitMap
			 (word)attributes;(word)creationDate
			 (word)accessDate
			 (word)modifyDate;(word)modifyTime
			 (word)backupDate;(word)backupTime
			 (bytes)[32]finderInfo
			 (len,str)[256]AFPPathString
		     RP: none
		  0Ah =	AFP Scan File Information
		     SP: [320](byte)volumeNumber
			 (long)AFPEntryID
			 (long)AFPLastSeenID
			 (word)0x0100
			 (word)searchBitMap
			 (word)requestBitMap
			 (len,str)[256]AFPPathString
		     RP: AFPFILEINFO
		  0Bh =	AFP Alloc Temporary Dir	Handle
		     SP: [320](byte)volumeNumber
			 (long)AFPEntryID
			 (len,str)[256]AFPPathString
		     RP: (byte)NetWareDirectoryHandle
			 (byte)NetWareAccessRights
			 (word)?
		  0Ch =	AFP Get	EntryID	From Path Name
		     SP: [258](byte)directoryHandle
			 (len,str)[256]pathName
		     RP: [4](long)AFPEntryID
		  AFPFILEINFO:
		     (word)?
		     (long)entryID;(long)parentID
		     (word)attributes;(long)dataForkLengh
		     (long)resourceForkLengh;(word)numOffspring
		     (word)creationDate;(word)modifyTime
		     (word)backupDate;(word)backupTime
		     (byte)[32]finderInfo;(str)[32]longName
		     (long)OwnerID;(str)[12]shortName
		     (word)accessPrivileges;?
	   44h = Erase Files
	      SP: [258](byte)directoryHandle
		  (bytes)Attributes
		  (len,str)[256]filePath
	      RP: none
	   45h = Rename	Files
	      SP: [518](byte)oldFileDirectoryHandle
		  (byte)searchFileAttributes
		  (len,str)[256]oldFilePath
		  (byte)newFileDirectoryHandle
		  (len,str)newFilePath
	      RP: none
Return:	AL = error code
---------------------------------------------
INT 21 - Novell	Advanced NetWare 2.0+ -	FILE SERVER FILE COPY
	AH = F3h
	ES:DI -> request string
		WORD  source file handle
		WORD  destination file handle
		DWORD starting offset in source
		DWORD starting offset in destination
		DWORD number of	bytes to copy
Return:	AL = status/error code
	DX,CX =	number of bytes	copied
---------------------------------------------
