Interrupt List, part 4 of 8
This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
----------2180-------------------------------
INT 21 - European MSDOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
       AH = 80h
       CX = mode
           0000h place child in zombie mode on exit to preserve exit code
           0001h discard child process and exit code on termination
       DS:DX -> ASCIZ full program name
       ES:BX -> parameter block (as for AX=4B00h)
Return: CF clear if successful
           AX = Command Subgroup ID (CSID)
       CF set on error
           AX = error code (see AH=59h)
Desc:   asynchronously execute a program, creating a new process for it
Notes:  this function is called by the DETACH command
       there is a system-wide limit of 32 processes
       the CSID is used to identify all processes that have been spawned by
         a given process, whether directly or indirectly
       programs to be run in the background must use the new executable format
         (see AH=4Bh)
       background processes may only perform asynchronous (background) EXECs,
         either this function or AX=4B04h
       background processes may execute INT 11, INT 12, INT 21, INT 2A, and
         INT 2F at any time; they may execute INT 10 and INT 16 only while
         they have opened a popup screen via INT 2F/AX=1401h; no other
         interrupts may be executed from the background
       background processes may not use drive B: or overlay their code
         segments
SeeAlso: AH=4Bh,AX=8700h,INT 2F/AX=1400h"POPUP"
----------218080-----------------------------
INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
       AX = 8080h
Return: ???
SeeAlso: AX=7070h/BX=7070h
----------2181-------------------------------
INT 21 - European MSDOS 4.0 - "FREEZE" - STOP A PROCESS
       AH = 81h
       BX = flag (00h freeze command subtree, 01h only specified process)
       CX = Process ID of head of command subtree
Return: CF clear if successful
       CF set on error
           AX = error code (no such process)
Desc:   temporarily suspend a process or a process and all of its children
Note:   if BX=0001h, this call will not return until the process is actually
         frozen, which may not be until after it unblocks from an I/O
         operation
SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
----------2182-------------------------------
INT 21 - European MSDOS 4.0 - "RESUME" - RESTART A PROCESS
       AH = 82h
       BX = flag (00h resume command subtree, 01h only specified process)
       CX = Process ID of head of command subtree
Return: CF clear if successful
       CF set on error
           AX = error code (no such process)
Desc:   restart a previously-suspended process or a process and all of its
         children
SeeAlso: AX=81h,INT 15/AX=101Eh
----------2183-------------------------------
INT 21 - European MSDOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
       AH = 83h
       AL = function
           00h get size
           01h set new size
               BX = new size in paragraphs
Return: CF clear if successful
           BX = current size (function 00h) or old size (function 01h)
       CF set on error
           AX = error code (01h,07h,0Dh)(see AH=59h)
Desc:   specify or determine how much memory may be allocated by the foreground
         process
Note:   if the partition size is set to 0000h, no partition management is done
         and all memory allocation is compatible with DOS 3.2.
       the partition size can be changed regardless of what use is being made
         of the changed memory; subsequent allocations will follow the
         partition rules (foreground processes may allocate only foreground
         memory; background processes allocate background memory first, then
         foreground memory)
SeeAlso: AH=48h,AH=4Ah
----------2183-------------------------------
INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
       AH = 83h
Return: DX = 1990h if resident
SeeAlso: AH=76h,AH=84h"VIRUS"
----------2184-------------------------------
INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
       AH = 84h
Return: DX = 1990h if resident
           BH = version number (major in high nybble, minor in low)
SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
----------218400-----------------------------
INT 21 - European MSDOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
       AX = 8400h
       BX = size in bytes (0000h = 65536)
       CX = flags
           bit 6: zero-initialize segment
       DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
Return: CF clear if successful
           AX = segment address of shared memory global object
       CF set on error
           AX = error code (06h,08h) (see AH=59h)
Desc:   create an area of memory which may be accessed by multiple processes
Notes:  shared memory objects are created as special files (thus the
         restriction on the name)
       on successful creation, the reference count is set to 1
SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
----------218401-----------------------------
INT 21 - European MSDOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
       AX = 8401h
       CX = flags
           bit 7: writable segment (ignored by MSDOS 4.0)
       DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
Return: CF clear if successful
           AX = segment address of shared memory global object
           CX = size in bytes
       CF set on error
           AX = error code (invalid name)
Desc:   get address of a previously-created area of memory which may be
         accessed by multiple processes
Note:   this call increments the reference count for the shared memory area
SeeAlso: AX=8400h,AX=8402h
----------218402-----------------------------
INT 21 - European MSDOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
       AX = 8402h
       BX = handle (segment address of shared memory object)
Return: CF clear if successful
       CF set on error
           AX = error code (no such name)
Desc:   indicate that the specified area of shared memory will no longer be
         used by the caller
Note:   the reference count is decremented and the shared memory area is
         deallocated if the new reference count is zero
SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
----------2185-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 85h
       ???
Return: ???
----------2186-------------------------------
INT 21 - European MSDOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
       AH = 86h
       BX = total number of file handles in new table
Return: CF clear if successful
       CF set on error
           AX = error code (06h,08h) (see AH=59h)
Desc:   adjust the size of the per-process open file table, thus raising or
         lowering the limit on the number of files the caller can open
         simultaneously
Notes:  any currently-open files are copied to the new table
       if the table is increased beyond the default 20 handles, only the
         first 20 will be inherited by child processes
       error 06h is returned if the requested number of handles exceeds
         system limits or would require closing currently-open files
SeeAlso: AH=26h,AH=67h
----------2187-------------------------------
INT 21 - European MSDOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
       AH = 87h
Return: AX = PID
       BX = parent process's PID
       CX = Command Subgroup ID (CSID)
Desc:   determine an identifier by which to access the calling process
Notes:  called by MS C v5.1 getpid() function
       this function apparently must return AX=0001h for INT 21/AH=80h to
         succeed
       one possible check for European MSDOS 4.0 is to issue this call with
         AL=00h and check whether AL is nonzero on return
SeeAlso: AH=30h,AH=62h,AH=80h
----------2188-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 88h
       ???
Return: ???
----------2189-------------------------------
INT 21 - European MSDOS 4.0 - SLEEP
       AH = 89h
       CX = time in milliseconds or 0000h to give up time slice
Return: CF clear if successful
           CX = 0000h
       CF set on error
           AX = error code (interrupted system call)
           CX = sleep time remaining
Desc:   suspend the calling process for the specified duration
Notes:  the sleep interval is rounded up to the next higher increment of the
         scheduler clock, and may be extended further if other processes are
         running
       this call may be interrupted by signals (see AH=8Dh)
       reportedly called by Microsoft C 4.0 startup code
       background processes have higher priority than the foreground process,
         and should thus periodically yield the CPU
SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
----------2189-------------------------------
INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
       AH = 89h
Return: AX = 0123h if resident
SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
----------218A-------------------------------
INT 21 - European MSDOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
       AH = 8Ah
       BL = range (00h command subtree, 01h any child)
       BH = suspend flag
           00h suspend if children exist but none are dead
           01h return if no dead children
       CX = Process ID of head of command subtree
Return: CF clear if successful
           AH = termination type
               00h normal termination
               01h aborted by Control-C
               02h aborted by I/O error
               03h terminate and stay resident
               04h aborted by signal
               05h aborted by program error
           AL = return code from child or aborting signal
           BX = PID of child (0000h if no dead children)
       CF set on error
           AX = error code (no child,interrupted system call)
Desc:   get return code from an asynchronously-executed child program,
         optionally waiting if no return code is available
SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
----------218B-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 8Bh
       ???
Return: ???
----------218C-------------------------------
INT 21 - European MSDOS 4.0 - SET SIGNAL HANDLER
       AH = 8Ch
       AL = signal number (see below)
       BL = action (see below)
       DS:DX -> signal handler
Return: CF clear if successful
           AL = previous action
           ES:BX -> previous signal handler
       CF set on error
           AX = error code (01h,invalid SigNumber or Action) (see AH=59h)
Desc:   set the routine which will be invoked on a number of exceptional
         conditions
Note:   all signals will be sent to the most recently installed handler
SeeAlso: AH=8Dh

Values for signal number:
01h    SIGINTR         Control-C or user defined interrupt key
08h    SIGTERM         program termination
09h    SIGPIPE         broken pipe
0Dh    SIGUSER1        reserved for user definition
0Eh    SIGUSER2        reserved for user definition

Values for signal action:
00h    SIG_DFL         terminate process on receipt
01h    SIG_IGN         ignore signal
02h    SIG_GET         signal is accepted
03h    SIG_ERR         sender gets error
04h    SIG_ACK         acknowledge received signal and clear it, but don't
                       change current setting

Signal handler is called with:
       AL = signal number
       AH = signal argument
Return: RETF, CF set: terminate process
       RETF, CF clear, ZF set: abort any interrupted system call with an error
       RETF, CF clear, ZF clear: restart any interrupted system call
       IRET: restart any interrupted system call
Note:   the signal handler may also perform a nonlocal GOTO by resetting the
         stack pointer and jumping; before doing so, it should dismiss the
         signal by calling this function with BL=04h
----------218D-------------------------------
INT 21 - European MSDOS 4.0 - SEND SIGNAL
       AH = 8Dh
       AL = signal number (see AH=8Ch)
       BH = signal argument
       BL = action
           00h send to entire command subtree
           01h send only to specified process
       DX = Process ID
Return: CF clear if successful
       CF set on error
           AX = error code (01h,06h)(see AH=59h)
Desc:   invoke the exceptional-condition handler for the specified process
Note:   error 06h may be returned if one or more of the affected processes
         have an error handler for the signal
SeeAlso: AH=8Ch
----------218E00-----------------------------
INT 21 - European MSDOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
       AX = 8E00h
       BH = 00h
       BL = action
           00h set priority for command subtree
           01h set priority for specified process only
       CX = Process ID
       DH = 00h
       DL = change in priority (00h to get priority)
Return: CF clear if successful
           DL = process priority
           DH destroyed
       CF set on error
           AX = error code (01h,no such process)(see AH=59h)
Desc:   specify or determine the execution priority of the specified process
         or the process and all of its children
SeeAlso: AH=81h
----------218F-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 8Fh
       ???
Return: ???
----------2190-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 90h
       ???
Return: ???
----------2190-------------------------------
INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
       AH = 90h
Return: AH = 01h if resident
SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
----------2191-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 91h
       ???
Return: ???
----------2192-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 92h
       ???
Return: ???
----------2193-------------------------------
INT 21 - European MSDOS 4.0 - "PIPE" - CREATE A NEW PIPE
       AH = 93h
       CX = size in bytes
Return: CF clear if successful
           AX = read handle
           BX = write handle
       CF set on error
           AX = error code (08h) (see AH=59h)
Desc:   create a communications channel which may be used for interprocess
         data and command exchanges
SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
----------2194-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 94h
       ???
Return: ???
----------2195-------------------------------
INT 21 - European MSDOS 4.0 - HARD ERROR PROCESSING
       AH = 95h
       AL = new state
          00h enabled
          01h disabled, automatically fail hard errors
Return: AX = previous setting
Desc:   specify whether hard (critical) errors should automatically fail the
         system call or invoke an INT 24
SeeAlso: INT 24
----------2196-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 96h
       ???
Return: ???
----------2197-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 97h
       ???
Return: ???
----------219753-----------------------------
INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
       AX = 9753h
Return: never (executes original program) if virus resident
SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
----------2198-------------------------------
INT 21 U - European MSDOS 4.0 - ???
       AH = 98h
       ???
Return: ???
----------2199-------------------------------
INT 21 u - European MSDOS 4.0 - "PBLOCK" - BLOCK A PROCESS
       AH = 99h
       DS:BX -> memory location to block on
       CX = timeout in milliseconds
       DH = nonzero if interruptible
Return: CF clear if awakened by event
           AX = 0000h
       CF set if unusual wakeup
           ZF set if timeout, clear if interrupted by signal
           AX = nonzero
Desc:   suspend calling process until another process sends a "restart" signal
         or a timeout occurs
SeeAlso: AH=9Ah,INT 2F/AX=0802h
----------219A-------------------------------
INT 21 u - European MSDOS 4.0 - "PRUN" - UNBLOCK A PROCESS
       AH = 9Ah
       DS:BX -> memory location processes may have blocked on
Return: AX = number of processes awakened
       ZF set if no processes awakened
Desc:   restart all processes waiting for the specified "restart" signal
SeeAlso: AH=99h,INT 2F/AX=0802h
----------21A0-------------------------------
INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
       AH = A0h
Return: AL = display status
           bit  7  : 0=windowed, 1=enlarged
           bits 6-3: current screen profile number 0-9
           bits 2-0: active window number
                       0=PC, 1-4=host B-E, 5-6=notepad F-G
       BX = host window status
           bit 15:  reserved
           bit 14:  0=host E window installed, 1=not
           bit 13:  0=host E terminal on, 1=off
           bit 12:  0=host E window displayed, 1=not
           bit 11:  reserved
           bit 10:  0=host D window installed, 1=not
           bit  9:  0=host D terminal on, 1=off
           bit  8:  0=host D window displayed, 1=not
           bit  7:  reserved
           bit  6:  0=host C window installed, 1=not
           bit  5:  0=host C terminal on, 1=off
           bit  4:  0=host C window displayed, 1=not
           bit  3:  reserved
           bit  2:  0=host B window installed, 1=not
           bit  1:  0=host B terminal on, 1=off
           bit  0:  0=host B window displayed, 1=not
Note:   Attachmate Extra is a 3270 emulator by Attachmate Corporation
SeeAlso: AH=A1h
----------21A1-------------------------------
INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
       AH = A1h
       AL = set status byte
           bit  7  : 0=windowed, 1=enlarged
           bits 6-3: current screen profile number 0-9
           bits 2-0: active window number
                       0=PC, 1-4=host B-E, 5-6=notepad F-G
SeeAlso: AH=A0h,AH=A2h
----------21A1D5-----------------------------
INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
       AX = A1D5h
Return: AX = 900Dh if resident
SeeAlso: AX=9753h,AX=A55Ah
----------21A2-------------------------------
INT 21 - Attachmate Extra - SET HOST WINDOW STATE
       AH = A2h
       AL = set status byte
           bit  7  : 0=power off, 1=power on
           bit  6  : 0=not installed, 1=installed
           bits 5-3: reserved
           bits 2-0: window number 1-4=host B-E
SeeAlso: AH=A1h
----------21A3-------------------------------
INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
       AH = A3h
       AL = window number (1-4=host B-E)
       CX = 0001h
       DS:BX -> keystroke buffer
       DL = zero if keystroke buffer contains host function code,
            non-zero if keystroke buffer contains ASCII character
Return: CX = zero if character sent, non-zero if not
       BX incremented if CX=0

Values for host function code:
       00h=reserved    10h=PF16        20h=Clear       30h=SysRq
       01h=PF1         11h=PF17        21h=Print       31h=ErInp
       02h=PF2         12h=PF18        22h=Left        32h=ErEof
       03h=PF3         13h=PF19        23h=Right       33h=Ident
       04h=PF4         14h=PF20        24h=Up          34h=Test
       05h=PF5         15h=PF21        25h=Down        35h=Reset
       06h=PF6         16h=PF22        26h=Home        36h=DevCncl
       07h=PF7         17h=PF23        27h=Fast Left   37h=Dup
       08h=PF8         18h=PF24        28h=Fast Right  38h=FldMark
       09h=PF9         19h=Alt on      29h=Bksp        39h=Enter
       0Ah=PF10        1Ah=Alt off     2Ah=Insert      3Ah=CrSel
       0Bh=PF11        1Bh=Shift on    2Bh=Delete
       0Ch=PF12        1Ch=Shift off   2Ch=Backtab
       0Dh=PF13        1Dh=PA1         2Dh=Tab
       0Eh=PF14        1Eh=PA2         2Eh=Newline
       0Fh=PF15        1Fh=PA3         2Fh=Attn
----------21A4-------------------------------
INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
       AH = A4h
       AL = window number (1-4=host B-E)
Return: DS:BX -> 3270 display buffer
SeeAlso: AH=A5h,AH=B8h
----------21A5-------------------------------
INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
       AH = A5h
       AL = window number (1-4=host B-E)
Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
Note:   if the host window is configured with the Extended Attribute (EAB)
         feature, multiply the cursor position by 2 to obtain the byte offset
         into the display buffer
SeeAlso: AH=A4h
----------21A55A-----------------------------
INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
       AX = A55Ah
Return: AX = 5AA5h if resident
SeeAlso: AX=A1D5h,AX=AA00h
----------21AA00-----------------------------
INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
       AX = AA00h
Return: AX = 00AAh if resident
SeeAlso: AX=A55Ah,AX=AA03h
----------21AA03-----------------------------
INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
       AX = AA03h
Return: AX = 03AAh if resident
SeeAlso: AX=AA00h,AH=ABh
----------21AB-------------------------------
INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
       AH = ABh
Return: AX = 5555h if resident
SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
----------21AF-------------------------------
INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
       AH = AFh
Return: DS:BX -> translate tables (see below)

Format of translate tables:
Offset  Size    Description
00h 256 BYTEs  ASCII to 3270 buffer code translate table
100h 256 BYTEs  3270 buffer code to ASCII translate table
200h 256 BYTEs  3270 buffer code to EBCDIC translate table
300h 256 BYTEs  EBCDIC to 3270 buffer code translate table
----------21B5-------------------------------
INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
       AH = B5h
       AL = subfunction
           03h get task mode
               Return: AH = 00h
                       AL = current task mode byte
           04h get task mode pointer
               Return: ES:BX -> task mode byte
Notes:  the task mode byte specifies how task cleanup should be performed, but
         is declared to be version-dependent
       allows a program to disable the automatic cleanup for programs managing
         task swapping, etc.

Values for task mode byte in version 3.01:
00h-03h reserved
04h     no task cleanup
----------21B6-------------------------------
INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
       AH = B6h
       AL = subfunction
           00h get extended file attributes
           01h set extended file attributes
               CL = extended file attributes (see below)
       DS:DX -> ASCIZ pathname (max 255 bytes)
Return: CF set on error
           AL = error code
               8Ch caller lacks privileges
               FEh not permitted to search directory
               FFh file not found
       CF clear if successful
           AL = 00h (success)
           CL = current extended file attributes (see below)
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=4300h,AH=E3h/SF=0Fh

Bitmask of extended file attributes:
bits 2-0: search mode (executables only)
       000 none (use shell's default search)
       001 search on all opens without path
       010 do not search
       011 search on read-only opens without path
       100 reserved
       101 search on all opens
       110 reserved
       111 search on all read-only opens
bit 3: reserved
bit 4: transactions on file tracked
bit 5: file's FAT indexed
bit 6: read audit (to be implemented)
bit 7: write audit (to be implemented)
----------21B8-------------------------------
INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
       AH = B8h
       AL = window number (1-4=host B-E)
       DL = 01h
Notes:  only valid in CUT mode
       next AID keystroke (eg Enter) enables host buffer updates
SeeAlso: AH=A4h
----------21B800-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
       AX = B800h
       CX = size of reply buffer (01h-3Fh)
       ES:BX -> reply buffer for capture flags table (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.0+
SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h

Format of capture flags table:
Offset  Size    Description
00h    BYTE    status (used internally, should be set to 00h)
01h    BYTE    print flags
               bit 2: print capture file if interrupted by loss of connection
                   3: no automatic form feed after print job
                   6: printing control sequences interpreted by print service
                   7: print banner page before capture file
02h    BYTE    tab size (01h-12h, default 08h)
03h    BYTE    printer number on server (00h-04h, default 00h)
04h    BYTE    number of copies to print (00h-FFh, default 01h)
05h    BYTE    form type required in printer (default 00h)
06h    BYTE    reserved
07h 13 BYTEs   text to be placed on banner page
14h    BYTE    reserved
15h    BYTE    default local printer (00h = LPT1)
16h    WORD    timeout in clock ticks for flushing capture file on inactivity
               (big-endian)
               0000h = never timeout
18h    BYTE    flush capture file on LPT close if nonzero
19h    WORD    maximum lines per page (big-endian)
1Bh    WORD    maximum characters per line (big-endian)
1Dh 13 BYTEs   name of form required in printer
2Ah    BYTE    LPT capture flag
               00h inactive, FFh LPT device is being captured
2Bh    BYTE    file capture flag
               00h if no file specified, FFh if capturing to file
2Ch    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
               running)
2Dh    DWORD   address of printer setup string (big-endian)
31h    DWORD   address of printer reset string (big-endian)
35h    BYTE    target connection ID
36h    BYTE    capture in progress if FFh
37h    BYTE    job queued for printing if FFh
38h    BYTE    print job valid if FFh
39h    DWORD   bindery object ID of print queue if previous byte FFh
3Dh    WORD    print job number (1-999) `````(big-endian)
----------21B801-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
       AX = B801h
       CX = size of buffer (01h-3Fh)
       ES:BX -> buffer containing capture flags table (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.0+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
----------21B802-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
       AX = B802h
       CX = size of reply buffer (01h-3Fh)
       DH = LPT port (00h-02h)
       ES:BX -> reply buffer for capture flags table (see AX=B800h)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
----------21B803-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
       AX = B803h
       CX = size of buffer (01h-3Fh)
       DH = LPT port (00h-02h)
       ES:BX -> buffer containing capture flags table (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
----------21B804-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
       AX = B804h
Return: DH = default LPT port (00h-02h)
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
----------21B805-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
       AX = B805h
       DH = new default LPT port (00h-02h)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
----------21B806-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
       AX = B806h
       DH = LPT port (00h-02h)
       BX:CX = print queue's object ID
Return: AL = status
           00h successful
           FFh job already set
Desc:   specify the print queue on which a print job is to be placed the next
         time a capture is started on the given printer port
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B801h,AX=B807h,AX=E009h
----------21B807-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
       AX = B807h
       DH = LPT port (00h-02h)
       BX = job number (see AH=E3h/SF=68h)
       SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
Return: AL = status
           00h successful
           FFh job already queued
Desc:   specify the capture file and print job to be used for subsequent
         output to the given printer port
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AX=B801h,AX=B806h,AX=E009h,AH=E3h/SF=68h
----------21B808-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
       AX = B808h
       ES:BX -> 12-byte buffer for user name
Return: AL = status
           00h successful
Desc:   get the user name which is printed on the banner page
Notes:  this function is supported by Advanced NetWare 2.1+
       the default name is the login name of the user
SeeAlso: AX=B809h
----------21B809-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
       AX = B809h
       ES:BX -> 12-byte buffer containing user name
Return: AL = status
           00h successful
Desc:   specify the user name which is printed on the banner page
Notes:  this function is supported by Advanced NetWare 2.1+
       the default name is the login name of the user
SeeAlso: AX=B808h
----------21BB-------------------------------
INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
       AH = BBh
       AL = new EOJ flag
           00h disable EOJs
           01h enable EOJs
Return: AL = old EOJ flag
Desc:   specify whether the network shell should automatically generate an
         End of Job call when the root command processor regains control
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=D6h
----------21BBBB-----------------------------
INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
       AX = BBBBh
Return: AX = 6969h
SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
----------21BC-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
       AH = BCh
       AL = flags
           bit 0: lock as well as log record
               1: non-exclusive lock
       BX = file handle
       CX:DX = starting offset in file
       SI:DI = length of region to lock
       BP = timeout in timer ticks (1/18 sec)
               0000h = don't wait if already locked
Return: AL = status
           00h successful
           96h no dynamic memory for file
           FEh timed out
           FFh failed
Desc:   add the specified physical record to the log table, optionally locking
         it
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
----------21BD-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
       AH = BDh
       BX = file handle
       CX:DX = starting offset in file
       SI:DI = length of record
Return: AL = status
           00h successful
           FFh record not locked
Desc:   unlock the specified physical record but do not remove it from log
         table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
----------21BE-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
       AH = BEh
       BX = file handle
       CX:DX = starting offset within file
       SI:DI = record length in bytes
Return: AL = status
           00h successful
           FFh specified record not locked
Desc:   unlock the physical record and remove it from the log table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
----------21BE-------------------------------
INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
       AH = BEh
Return: AX = 1234h if resident
SeeAlso: AX=BBBBh,AX=BE00h
----------21BE00-----------------------------
INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
       AX = BE00h
       CF set
Return: CF clear if resident
SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
----------21BF-------------------------------
INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
       AH = BFh
       AL = flags
           bit 0: lock as well as log record
               1: non-exclusive lock
       DS:DX -> opened FCB (see AH=0Fh)
       BX:CX = offset
       BP = lock timeout in timer ticks (1/18 sec)
       SI:DI = length
Return: AL = error code (see AH=BCh)
SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
----------21C0-------------------------------
INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
       AH = C0h
       DS:DX -> FCB (see AH=0Fh)
       BX:CX = offset
Return: AL = error code (see AH=BCh)
Note:   unlocks record but does not remove it from log table
SeeAlso: AH=BDh,AH=BFh,AH=C1h"NetWare",AH=C3h
----------21C0-------------------------------
INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
       AH = C0h
Return: AX = 0300h if "Slow"/"Zerotime" resident
       AX = 1234h if "Solano" resident
SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS"
----------21C1-------------------------------
INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
       AH = C1h
       DS:DX -> opened FCB (see AH=0Fh)
       BX:CX = offset
Return: AL = error code (see AH=BCh)
Note:   unlocks record and removes it from log table
SeeAlso: AH=BEh,AH=C0h"NetWare",AH=C4h
----------21C1-------------------------------
INT 21 - VIRUS - "Solano" - ???
       AH = C1h
       ???
Return: ???
SeeAlso: AH=C0h"VIRUS"
----------21C2-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK PHYSICAL RECORD SET
       AH = C2h
       AL = flags
           bit 1: non-exclusive lock
       BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
Return: AL = status
           00h successful
           FEh timed out
           FFh failed
Desc:   attempt to lock all physical records listed in the log table
Notes:  this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
       status FFh will be retuend if one or more physical records have been
         exclusively locked by another process
SeeAlso: AH=BFh,AH=C3h,AH=D1h
----------21C2-------------------------------
INT 21 - VIRUS - "Scott's Valley" - ???
       AH = C2h
       ???
Return: ???
SeeAlso: AH=C0h"VIRUS"
----------21C3-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECRD SET
       AH = C3h
Desc:   unlock all currently-locked physical records in the log table, but do
         not remove them from the table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=BDh,AH=C0h,AH=C2h"NetWare",AH=C4h,AH=D3h
----------21C301DXF1F1-----------------------
INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
       AX = C301h
       DX = F1F1h
Return: DX = 0E0Eh if resident
SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
----------21C4-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD SET
       AH = C4h
Desc:   unlock all physical records in the log table and remove them from the
         log table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=BEh,AH=C1h,AH=D5h
----------21C500-----------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - OPEN SEMAPHORE
       AX = C500h
       DS:DX -> semaphore name (counted string, max 127 bytes)
       CL = initial value for semaphore
Return: AL = status
           00h successful
               BL = number of processes having semaphore open
               CX:DX = semaphore handle
           FEh invalid name length
           FFh invalid semaphore value
Notes:  this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
       the semaphore's value is incremented by AX=C503h and decremented by
         AX=C502h
SeeAlso: AX=C501h,AX=C502h,AX=C503h,AX=C504h
----------21C500-----------------------------
INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
       AX = C500h
Return: AX = 6731h if resident
SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
----------21C501-----------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - EXAMINE SEMAPHORE
       AX = C501h
       CX:DX = semaphore handle
Return: AL = status
           00h successful
               CX = semaphore value (-127 to 127)
               DL = count of processes which have the semaphore open
           FFh invalid handle
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AX=C500h"NetWare",AX=C502h,AX=C504h
----------21C502-----------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - WAIT ON SEMAPHORE
       AX = C502h
       CX:DX = semaphore handle
       BP = timeout limit in timer ticks (1/18 sec)
               0000h return immediately if semaphore already zero or negative
Return: AL = status
           00h successful
           FEh timeout
           FFh invalid handle
Desc:   decrement the semaphore's value, optionally waiting until its value
         becomes positive before decrementing
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AX=C500h"NetWare",AX=C501h,AX=C503h
----------21C503-----------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - SIGNAL SEMAPHORE
       AX = C503h
       CX:DX = semaphore handle
Return: AL = status
           00h successful
           01h semaphore value overflowed
           FFh invalid handle
Desc:   increment the semaphore's value and signal the first process (if any)
         in the queue waiting on the semaphore
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AX=C500h"NetWare",AX=C502h
----------21C504-----------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLOSE SEMAPHORE
       AX = C504h
       CX:DX = semaphore handle
Return: AL = status
           00h successful
           FFh invalid handle
Desc:   decrement the semaphore's open count, and delete the semaphore if the
         count reaches zero
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AX=C500h"NetWare",AX=C501h
----------21C6-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - GET OR SET LOCK MODE
       AH = C6h
       AL = subfunction
           00h set old "compatibility" mode (default)
           01h set new extended locks mode
           02h get lock mode
Return: AL = current lock mode
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
       the locking mode should be 01h for NetWare 4.61+ and Advanced
         NetWare 1.0+ locking calls, and 00h for all older calls
SeeAlso: AH=BCh,AH=C4h,AH=D0h
----------21C6-------------------------------
INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
       AH = C6h
Return: AL = 55h if resident
SeeAlso: AX=C500h"VIRUS",AX=C603h
----------21C603-----------------------------
INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK
       AX = C603h
       CF set
Return: CF clear if resident
SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
----------21C700-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - BEGIN TRANSACTION
       AX = C700h
Return: CF clear if successful
           AL = 00h
       CF set on error
           AL = error code
               96h out of memory
               FEh implicit transaction already active, converted to explicit
               FFh explicit transaction already active
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AX=C701h,AX=C702h,AX=C703h
----------21C700-----------------------------
INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
       AX = C700h
Return: AL = 07h if resident
SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
----------21C701-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - END TRANSACTION
       AX = C701h
Return: AL = status
           00h successful
               CX:DX = transaction number
           FDh transaction tracking disabled
           FEh transaction ended records locked
           FFh no explicit transaction active
       CF clear except when AL=FFh
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AX=C700h"NetWare",AX=C703h
----------21C702-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - INSTALLATION CHECK
       AX = C702h
Return: AL = status
           00h not available
           01h available
           FDh available but disabled
Desc:   determine whether the default file server supports TTS
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
----------21C703-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - ABORT TRANSACTION
       AX = C703h
Return: CF clear if successful
           AL = 00h
       CF set on error
           AL = error code
               FDh transaction tracking disabled, no backout
               FEh transaction ended records locked
               FFh no explicit transaction active
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C704h
----------21C704-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - TRANSACTION STATUS
       AX = C704h
       CX:DX = transaction number (see AX=C701h)
Return: AL = status
           00h successful
           FFh not yet written to disk
Desc:   verify that a transaction has actually been written to disk
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       transactions are written to disk in the order in which they are ended,
         but it may take as much as five seconds for the data to be written
SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C703h
----------21C705-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET APPLICTN THRESHOLDS
       AX = C705h
Return: AL = status
           00h successful
       CL = maximum logical record locks (default 0)
       CH = maximum physical record locks (default 0)
Desc:   get the per-application limits on record locks allowed before an
         implicit transaction is begun
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       if either limit is FFh, implicit transactions are disabled for the
         corresponding lock type
SeeAlso: AX=C706h,AX=C707h
----------21C706-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET APPLICTN THRESHOLDS
       AX = C706h
       CL = maximum logical record locks (default 0)
       CH = maximum physical record locks (default 0)
Return: AL = status
           00h successful
Desc:   specify the per-application limits on record locks allowed before an
         implicit transaction is begun
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       if either limit is set to FFh, implicit transactions are disabled for
         the corresponding lock type
SeeAlso: AX=C705h,AX=C708h
----------21C707-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET WORKSTN THRESHOLDS
       AX = C707h
Return: AL = status
           00h successful
       CL = maximum logical record locks (default 0)
       CH = maximum physical record locks (default 0)
Desc:   get the per-workstation limits on record locks allowed before an
         implicit transaction is begun
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       if either limit is FFh, implicit transactions are disabled for the
         corresponding lock type
SeeAlso: AX=C705h,AX=C708h
----------21C708-----------------------------
INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET WORKSTN THRESHOLDS
       AX = C708h
       CL = maximum logical record locks (default 0)
       CH = maximum physical record locks (default 0)
Return: AL = status
           00h successful
Desc:   specify the per-workstation limits on record locks allowed before an
         implicit transaction is begun
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       if either limit is set to FFh, implicit transactions are disabled for
         the corresponding lock type
SeeAlso: AX=C706h,AX=C707h
----------21C8-------------------------------
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
SeeAlso: AH=C9h
----------21C9-------------------------------
INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
       AH = C9h
Return: AL = error code
SeeAlso: AH=C8h
----------21CA-------------------------------
INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
       AH = CAh
       DS:DX -> FCB (see AH=0Fh)
       if function C6h lock mode 01h:
           AL = log and lock flag
               00h log file only
               01h lock as well as log file
           BP = lock timeout in timer ticks (1/18 sec)
Return: AL = error code
           00h successful
           96h no dynamic memory for file
           FEh timeout
           FFh failed
SeeAlso: AH=CBh
----------21CA15-----------------------------
INT 21 - VIRUS - "Piter" - ???
       AX = CA15h
       ???
Return: ???
SeeAlso: AH=CCh"VIRUS"
----------21CB-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - 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 = lock timeout in timer ticks (1/18 sec) 0000h = no wait
Return: AL = status
           00h successful
           FEh timed out
           FFh failed
Desc:   attempt to lock all files listed in the log table
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       status FFh will be returned if one or more of the files have already
         been exclusively locked by another process
SeeAlso: AH=CAh,AH=CDh,AH=D1h,AH=EBh
----------21CB-------------------------------
INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
       AH = CBh
Return: AL = 07h if resident
SeeAlso: AX=C700h"VIRUS",AX=CB02h
----------21CB02-----------------------------
INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
       AX = CB02h
Return: AX = 02CBh if resident
SeeAlso: AH=CBh"VIRUS",AH=CCh"VIRUS"
----------21CC-------------------------------
INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
       AH = CCh
       DS:DX -> FCB (see AH=0Fh)
Return: none
Note:   unlocks file, but does not remove it from the log table or close it
SeeAlso: AH=CAh,AH=CDh
----------21CC-------------------------------
INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
       AH = CCh
Return: AX = 0700h if resident
SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
----------21CD-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE SET
       AH = CDh
Return: none
Desc:   unlock all files listed in the log table, but don't remove them from
         the table
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=CBh,AH=CCh,AH=CFh,AH=D3h
----------21CD-------------------------------
INT 21 - VIRUS - "Westwood" - ???
       AH = CDh
       ???
Return: ???
SeeAlso: AH=CCh"VIRUS"
----------21CE-------------------------------
INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
       AH = CEh
       DS:DX -> FCB (see AH=0Fh)
Return: AL = error code
Note:   unlocks file and removes it from log table, then closes all opened and
         logged occurrences
SeeAlso: AH=CAh,AH=CFh,AH=EDh"NetWare"
----------21CF-------------------------------
INT 21 - LANstep - ???
       AH = CFh
       ???
Return: ???
Note:   LANstep is a redesign of the Waterloo Microsystems PORT network
----------21CF-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE SET
       AH = CFh
Return: AL = 00h
Desc:   unlock and remove all files from log table
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=CAh,AH=CEh,AH=EBh"NetWare"
----------21D0-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG LOGICAL RECORD
       AH = D0h
       DS:DX -> record string (counted string, max 99 data bytes)
       if function C6h lock mode 01h: (Novell, NTNX only)
           AL = flags
               bit 0: lock as well as log the record
               bit 1: non-exclusive lock
           BP = lock timeout in timer ticks (1/18 sec)
Return: AL = status
           00h successful
           96h no dynamic memory for file
           FEh timed out
           FFh unsuccessful
Desc:   add the specified logical record name to the log table, and optionally
         lock the record
Notes:  this function is supported by NetWare 4.6+, Advanced NetWare 1.0+,
         Banyan VINES, and Alloy NTNX
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=BCh,AH=D1h,AH=D2h,AH=D4h,AH=EBh
----------21D000-----------------------------
INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
       AX = D000h
Return: BX = 1234h if resident
SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh
----------21D1-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK LOGICAL RECORD SET
       AH = D1h
       AL = lock type (00h exclusive, 01h shareable)
       if function C6h lock mode 00h:
           DL = mode
               00h no wait
               01h wait
       if function C6h lock mode 01h: (Novell only)
          BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
               0000h no wait
Return: AL = status (see AH=CBh)
Desc:   attempt to lock all logical record names listed in the log table
Notes:  this function is supported by NetWare 4.6+, Advanced Netware 1.0+,
         Banyan VINES, and Alloy NTNX
       status FFh will be returned if one or more logical records have been
         exclusively locked by another process
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=C2h,AH=CBh,AH=D0h,AH=D3h,AH=D5h
----------21D2-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD
       AH = D2h
       DS:DX -> semaphore identifier (counted string up to 99 chars long)
Return: AL = status
           00h successful
           FFh no such record
Desc:   unlock the logical record name but do not remove it from the log table
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
         Banyan VINES, and Alloy NTNX
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=BDh,AH=D0h,AH=D3h,AH=D4h
----------21D3-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD SET
       AH = D3h
Desc:   unlock all currently-locked logical record names in the log table, but
         do not remove them from the table
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
         Banyan VINES, and Alloy NTNX
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=C3h,AH=CDh,AH=D1h,AH=D2h,AH=D5h
----------21D4-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD
       AH = D4h
       DS:DX -> logical record name (counted string up to 99 chars long)
Return: AL = status
           00h successful
           FFh no such record name
Desc:   unlock and remove the logical record name from the log table
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
         Banyan VINES, and Alloy NTNX
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=BEh,AH=D0h,AH=D2h,AH=D5h
----------21D5-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD SET
       AH = D5h
Return: AL = error code (see AH=D4h)
Desc:   unlock and remove all logical record name from the log table
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
         Banyan VINES, and Alloy NTNX
       locks on logical record names are advisory and may be ignored by other
         applications
SeeAlso: AH=D1h,AH=D3h,AH=D4h
----------21D5-------------------------------
INT 21 - VIRUS - "Carfield" - ???
       AH = D5h
       ???
Return: ???
SeeAlso: AX=D5AAh,AH=F3h"Carfield"
----------21D5AA-----------------------------
INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
       AX = D5AAh
Return: AX = 2A55h if "Diamond-A" resident
       AX = 2A03h if "Diamond-B"-family virus resident
SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
----------21D5AABPDEAA-----------------------
INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
       AX = D5AAh
       BP = DEAAh
Return: SI = 4321h if resident
SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
----------21D6-------------------------------
INT 21 - Novell NetWare - WORKSTATION - END OF JOB
       AH = D6h
       BX = job flag (0000h current job, FFFFh all processes on workstation)
Return: AL = error code
Desc:   unlocks and clears all locked or logged files and records held by the
         process(es), closes all files, resets error and lock modes, and
         releases all network resources
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=BBh,AH=D7h
----------21D7-------------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - SYSTEM LOGOUT
       AH = D7h
Return: AL = error code
Desc:   this function closes the caller's open files, logs it out from all
         file servers, detaches the workstation from all non-default file
         servers, and maps a drive to the default server's SYS:LOGIN directory
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=D6h,AH=E3h/SF=14h,AH=F1h
----------21D8-------------------------------
INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
       AH = D8h
       DL = resource number
Return: AL = status
           00h successful
           FFh unsucessful
SeeAlso: AH=D9h
----------21D9-------------------------------
INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
       AH = D9h
       DL = resource number
Return: AL = status (see AH=D8h)
SeeAlso: AH=D8h
----------21DA-------------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH NUMBER
       AH = DAh
       DL = volume number
       ES:DI -> reply buffer (see below)
Return: AL = 00h
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=36h,AH=E2h/SF=15h,AH=E3h/SF=E9h

Format of reply buffer:
Offset  Size    Description
00h    WORD    sectors/block
02h    WORD    total blocks on volume
04h    WORD    unused blocks
06h    WORD    total directory entries
08h    WORD    unused directory entries
0Ah 16 BYTEs   volume name, null padded
1Ah    WORD    removable flag, 0000h = not removable
Note:   all words are big-endian
----------21DADA-----------------------------
INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
       AX = DADAh
Return: AH = A5h
SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS"
----------21DAFE-----------------------------
INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
       AX = DAFEh
Return: AX = 1234h if resident
SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
----------21DB-------------------------------
INT 21 - Novell NetWare - WORKSTATION - GET NUMBER OF LOCAL DRIVES
       AH = DBh
Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=0Eh
----------21DC-------------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION NUMBER
       AH = DCh
Return: AL = logical connection number
           00h if NetWare not loaded or this machine is a non-dedicated server
       CX = station number in ASCII (CL = first digit)
Notes:  this function is supported by NetWare 4.0+, Banyan VINES, and Alloy
         NTNX
       station number only unique for those PCs connected to same semaphore
         service
----------21DC-------------------------------
INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
       AH = DCh
       DX = state
           0000h turn on
           0001h turn off
SeeAlso: AX=FEDCh
----------21DD-------------------------------
INT 21 - Novell NetWare - WORKSTATION - SET NetWare ERROR MODE
       AH = DDh
       DL = error mode
           00h invoke INT 24 on critical I/O errors (default)
           01h return NetWare extended error code in AL
           02h return error code in AL, mapped to standard DOS error codes
Return: AL = previous error mode
Note:   this function is supported by Advanced NetWare 2.0+
SeeAlso: INT 24
----------21DD-------------------------------
INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS???
       AH = DDh
       CX = number of bytes to copy
       DS:SI -> source of copy
       ES:DI -> destination of copy
Return: does not return normally; return address is caller's CS:0100h with
         AX = ???
SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS"
----------21DE-------------------------------
INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
       AH = DEh
Return: AH = DFh if resident
SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS"
----------21DE-------------------------------
INT 21 - VIRUS - "April 1st EXE" - ???
       AH = DEh
       ???
Return: ???
----------21DE-------------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - SET BROADCAST MODE
       AH = DEh
       DL = broadcast mode
           00h receive server and workstation broadcasts (default)
           01h receive server broadcasts, discard user messages
           02h store server broadcasts for retrieval
           03h store all broadcasts for retrieval
Return: AL = new broadcast mode
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
----------21DE--DL04-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MODE
       AH = DEh
       DL = 04h
Return: AL = current broadcast mode
           00h receive server and workstation broadcasts (default)
           01h receive server broadcasts, discard user message
           02h store server broadcasts for retrieval
           03h store all broadcasts for retrieval
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
----------21DE-------------------------------
INT 21 - Novell NetWare 4.0 - SHELL TIMER INTERRUPT CHECKS
       AH = DEh
       DL = function
           05h disable shell timer interrupt checks
           06h enable shell timer interrupt checks
Return: ???
----------21DEDE-----------------------------
INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
       AX = DEDEh
Return: AH = 41h if resident
SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS"
----------21DF--DL00-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - START LPT CAPTURE
       AH = DFh
       DL = 00h
Return: AL = status
           00h successful
Desc:   this function redirects the default LPT to a capture file on the file
         server
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
       a print job is queued when the first character of output is captured
SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=03h
SeeAlso: AH=DFh/DL=04h,AX=F003h
----------21DF--DL01-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - END LPT CAPTURE
       AH = DFh
       DL = 01h
Return: AL = status
           00h successful
Desc:   stop redirecting the default LPT, close the capture file, and release
         the job in the print queue for printing
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
       after this call, the default LPT defaults to local printing
SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=02h,AH=DFh/DL=03h,AH=DFh/DL=05h
----------21DF--DL02-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - CANCEL LPT CAPTURE
       AH = DFh
       DL = 02h
Return: AL = status
           00h successful
Desc:   this function ends the capture of the default LPT, removes the job from
         the print queue, and deletes the capture file unless it is a
         permanent capture file
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
       after this call, the default LPT defaults to local printing
SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=06h
----------21DF--DL02-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - FLUSH LPT CAPTURE
       AH = DFh
       DL = 03h
Return: AL = status
           00h successful
Desc:   this function closes the current capture file for the default LPT
         and starts printing it if it is not a permanent capture file
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
       if more data is sent to the LPT port after this call, a new capture
         file will be opeend
SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=07h
----------21DF--DL04-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - START SPECIFIC LPT CAPTURE
       AH = DFh
       DL = 04h
       DH = LPT port (00h-02h)
Return: AL = status
           00h successful
Desc:   this function redirects the specified LPT to a capture file on the file
         server
Notes:  this function is supported by Advanced NetWare 2.1+
       a print job is queued when the first character of output is captured
SeeAlso: AX=B800h,AH=DFh/DL=00h,AH=DFh/DL=05h,AH=DFh/DL=06h,AH=DFh/DL=07h
SeeAlso: AX=F003h
----------21DF--DL05-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - END SPECIFIC LPT CAPTURE
       AH = DFh
       DL = 05h
       DH = LPT port (00h-02h)
Return: AL = status
           00h successful
Desc:   stop redirecting the specified LPT, close the capture file, and release
         the job in the print queue for printing
Notes:  this function is supported by Advanced NetWare 2.1+
       after this call, the specified LPT defaults to local printing
SeeAlso: AH=DFh/DL=01h,AH=DFh/DL=04h,AH=DFh/DL=06h,AH=DFh/DL=07h
----------21DF--DL06-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - CANCEL SPECIFIC LPT CAPTURE
       AH = DFh
       DL = 06h
       DH = LPT port (00h-02h)
Return: AL = status
           00h successful
Desc:   this function ends the capture of the specified LPT, removes the job
         from the print queue, and deletes the capture file unless it is a
         permanent capture file
Notes:  this function is supported by Advanced NetWare 2.1+
       after this call, the specified LPT defaults to local printing
SeeAlso: AH=DFh/DL=02h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=07h
----------21DF--DL07-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - FLUSH SPECIFIC LPT CAPTURE
       AH = DFh
       DL = 07h
       DH = LPT port (00h-02h)
Return: AL = status
           00h successful
Desc:   this function closes the current capture file for the specified LPT
         and starts printing it if it is not a permanent capture file
Notes:  this function is supported by Advanced NetWare 2.1+
       if more data is sent to the LPT port after this call, a new capture
         file will be opeend
SeeAlso: AH=DFh/DL=03h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=06h
----------21E0-------------------------------
INT 21 - Digital Research DOS Plus - CALL BDOS
       AH = E0h
       CL = BDOS function number (see INT E0"CP/M")
       other registers as appropriate for function
Return: as appropriate for function
SeeAlso: AX=4459h,INT E0"CP/M"
----------21E0-------------------------------
INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
       AH = E0h
       ???
Return: ???
SeeAlso: AH=E1h"OS/286"
----------21E0-------------------------------
INT 21 - DoubleDOS - MENU CONTROL
       AH = E0h
       AL = subfunction
           01h exchange tasks
           73h resume invisible job if suspended
           74h kill other job
           75h suspend invisible job
Note:   identical to AH=F0h
SeeAlso: AH=F0h"DoubleDOS"
----------21E0-------------------------------
INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
       AH = E0h
Return: AX = 0300h if "Jerusalem" resident
       AX = DADAh if "Armagedon" resident
SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
----------21E0-------------------------------
INT 21 - Novell NetWare 4.0, Alloy NTNX - 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
           01h close and queue capture file
           02h set spool flags
           03h spool existing file
           04h get spool queue entry
           05h remove entry from spool queue
Return: AL = status
----------21E0--SF06-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET PRINTER STATUS
       AH = E0h subfn 06h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FFh no such printer
Desc:   get current state of specified printer attached to the server
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    06h (subfunction "Get Printer Status")
03h    BYTE    printer number (00h-04h)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0004h (size of following results buffer)
02h    BYTE    flag: 00h printer active, FFh printer halted
03h    BYTE    flag: 00h printer online, 01h printer offline
04h    BYTE    current form type
05h    BYTE    target printer number (00h-04h)
               same as number in request buffer unless rerouted by server
               console
----------21E0--SF09-------------------------
INT 21 - Novell NetWare - PRINT SERVICES - SPECIFY CAPTURE FILE
       AH = E0h subfn 09h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           9Ch invalid path
Desc:   create a permanent capture file for the next print capture to be
         started
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       the caller must have read, write, and create rights for the directory
         containing the capture file

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 102h)
02h    BYTE    09h (subfunction "Specify Capture File")
03h    BYTE    directory handle or 00h
04h    BYTE    length of filename
05h  N BYTEs   name of capture file

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E00F-----------------------------
INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
       AX = E00Fh
Return: AX = 4C31h if resident
SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
----------21E1-------------------------------
INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
       AH = E1h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
----------21E1-------------------------------
INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
       AH = E1h
SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
SeeAlso: AH=F1h"DoubleDOS"
----------21E1-------------------------------
INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
       AH = E1h
Return: AX = 0300h if "Mendoza" resident
       AX = 0400h if "Fu Manchu" resident
SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
----------21E1--SF00-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - SEND BROADCAST MESSAGE
       AH = E1h subfn 00h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FEh I/O error or out of dynamic workspace
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=DEh"NetWare",AH=DEh/DL=04h,AH=E1h/SF=01h,AH=E1h/SF=04h
SeeAlso: AH=E1h/SF=09h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 9Eh)
02h    BYTE    00h (subfunction "Send Broadcast Message")
03h    BYTE    number of connections (01h-64h)
04h  N BYTEs   list of connections to receive broadcast message
       BYTE    length of message (01h-37h)
     N BYTEs   broadcast message (no control characters or characters > 7Eh)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   list of per-connection results
               00h successful
               FCh message rejected due to lack of buffer space
               FDh invalid connection number
               FFh blocked (see also AH=E1h/SF=02h)
----------21E1--SF01-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MESSAGE
       AH = E1h subfn 01h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FCh full message queue
           FEh out of dynamic workspace
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=09h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    01h (subfunction "Get Broadcast Message")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 38h)
02h    BYTE    length of message (00h-37h)
               00h if no broadcast messages pending
03h  N BYTEs   message (no control characters or characters > 7Eh)
----------21E1-------------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - ENABLE/DISABLE BROADCAST MESSAGES
       AH = E1h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer
Return: AL = error code
Note:   these functions are supported by NetWare 4.0+ but are not listed in
         _NetWare_System_Calls--DOS_; they may be obsolete
SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=04h,AH=E1h/SF=09h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 9Eh)
02h    BYTE    subfunction
               02h disable station broadcasts
               03h enable station broadcasts
03h    ???

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer
02h    ???
----------21E1--SF04-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - SEND PERSONAL MESSAGE
       AH = E1h subfn 04h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FEh I/O error or out of dynamic workspace
Notes:  this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
       message pipes use CPU time on the file server; IPX, SPX, or NetBIOS
         connections should be used for peer-to-peer communications as these
         protocols do not use file server time
SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max E5h)
02h    BYTE    04h (subfunction "Send Personal Message")
03h    BYTE    number of connections (01h-64h)
04h  N BYTEs   list of connections to receive broadcast message
       BYTE    length of message (01h-7Eh)
     N BYTEs   message (no control characters or characters > 7Eh)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   list of per-connection results
               00h successful
               FCh message rejected because queue is full (contains 6 msgs)
               FDh incomplete pipe
               FFh failed
----------21E1--SF05-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - GET PERSONAL MESSAGE
       AH = E1h subfn 05h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FEh out of dynamic workspace
Desc:   return the oldest message in the default file server's message queue
         for the calling workstation
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=E1h/SF=01h,AH=E1h/SF=04h,AH=E1h/SF=06h,AH=E1h/SF=08h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    05h (subfunction "Get Personal Message")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 80h)
02h    BYTE    connection number of sending station
03h    BYTE    length of message (00h-7Eh)
               00h if no personal messages pending
04h  N BYTEs   message (no control characters or characters > 7Eh)
----------21E1--SF06-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - OPEN MESSAGE PIPE
       AH = E1h subfn 06h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FEh out of dynamic workspace
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=E1h/SF=04h,AH=E1h/SF=07h,AH=E1h/SF=08h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 66h)
02h    BYTE    06h (subfunction "Open Message Pipe")
03h    BYTE    number of pipes to open (01h-64h)
04h  N BYTEs   list of connection numbers

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   list of results
               00h successful
               FEh incomplete (target half not yet created)
               FFh failed
----------21E1--SF07-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - CLOSE MESSAGE PIPE
       AH = E1h subfn 07h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FCh full message queue
           FEh out of dynamic workspace
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 66h)
02h    BYTE    07h (subfunction "Close Message Pipe")
03h    BYTE    number of pipes to close (01h-64h)
04h  N BYTEs   list of connection numbers

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   list of results
               00h successful
               FDh failed
               FFh no such pipe
----------21E1--SF08-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - CHECK PIPE STATUS
       AH = E1h subfn 08h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FCh full message queue
           FEh out of dynamic workspace
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=07h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 66h)
02h    BYTE    08h (subfunction "Check Pipe Status")
03h    BYTE    number of pipes to monitor (01h-64h)
04h  N BYTEs   list of connection numbers

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   list of pipe statuses
               00h open
               FEh incomplete
               FFh closed
----------21E1--SF09-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - BROADCAST TO CONSOLE
       AH = E1h subfn 09h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           FCh full message queue
           FEh out of dynamic workspace
Desc:   send a one-line message to the system console on the default file
         server
Note:   this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=01h,AH=E3h/SF=D1h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 3Eh)
02h    BYTE    09h (subfunction "Broadcast to Console")
03h    BYTE    length of message (01h-3Ch)
04h  N BYTEs   message (no control characters or characters > 7Eh)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E2-------------------------------
INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
       AH = E2h
       ???
Return: ???
SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286"
----------21E2-------------------------------
INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
       AH = E2h
       AL = character
Return: AL = 00h successful
            01h buffer full (128 characters)
SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
SeeAlso: AH=F2h"DoubleDOS"
----------21E2--SF00-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SET DIRECTORY HANDLE
       AH = E2h subfn 00h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h,9Bh,9Ch) (see below)
Desc:   set the target handle to reference the directory specified by the
         source handle and the source path; both handles must refer to the
         same file server
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       the target handle is not changed if this function fails
SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=12h,AH=E2h/SF=13h

Values for status:
00h    successful
84h    not permitted to create
8Ah    not permitted to delete
8Bh    not permitted to rename
8Ch    not permitted to modify
98h    nonexistent volume
9Bh    invalid directory handle
9Ch    invalid path
9Eh    invalid filename
9Fh    directory currently in use
A0h    directory not empty
FCh    no such bindery object

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    00h (subfunction "Set Directory Handle")
03h    BYTE    directory handle of target
04h    BYTE    directory handle of source
05h    BYTE    length of source directory path (01h-FFh)
06h  N BYTEs   source directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E2--SF01-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET DIRECTORY PATH
       AH = E2h subfn 01h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,9Bh) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=02h,AH=E2h/SF=03h,AH=E2h/SF=1Ah,AH=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    01h (subfunction "Get Directory Path")
03h    BYTE    directory handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following data buffer
02h    BYTE    length of directory path (01h-FFh)
03h  N BYTEs   full directory path including volume
----------21E2--SF02-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN DIRECTORY INFORMATION
       AH = E2h subfn 02h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h,9Bh,9Ch) (see AH=E2h/SF=00h)
Desc:   get information about the first or next subdirectory of the specified
         directory
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=03h,AH=E2h/SF=19h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 104h)
02h    BYTE    02h (subfunction "Scan Directory Information")
03h    BYTE    directory handle
04h    WORD    subdirectory number (big-endian)
               0000h for first call, returned subdir number + 1 on next call
06h    BYTE    length of directory path
07h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 001Ch (length of following data buffer)
02h 16 BYTEs   subdirectory name
12h    DWORD   date and time of creation (big-endian) (see below)
16h    DWORD   object ID of owner (bid-endian)
1Ah    BYTE    maximum directory rights (see AH=E2h/SF=03h)
1Bh    BYTE    unused
1Ch    WORD    subdirectory number (big-endian)

Bitmask of date and time:
bits 31-25: year-1980
bits 24-21: month
bits 20-16: day
bits 15-11: hour
bits 10-5: minute
bits 4-0: second
----------21E2--SF03-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET EFFECTIVE DIRECTORY RIGHTS
       AH = E2h subfn 03h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h,9Bh) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=02h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 102h)
02h    BYTE    03h (subfunction "Get Effective Directory Rights")
03h    BYTE    directory handle
04h    BYTE    length of directory path (00h-FFh)
05h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0001h (length of following data buffer)
02h    BYTE    effective directory rights (see below)

Bitmask of directory rights:
bit 0: reading allowed
bit 1: writing allowed
bit 2: opens allowed
bit 3: file creation allowed
bit 4: deletion allowed
bit 5: "parental" may create/delete subdirectories and
       grant/revoke trustee rights
bit 6: directory search allowed
bit 7: file attributes may be changed
----------21E2--SF04-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - MODIFY MAXIMUM RIGHTS MASK
       AH = E2h subfn 04h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,8Ch,98h,9Ch) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=03h,AH=E2h/SF=0Ah,AH=E2h/SF=0Dh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 104h)
02h    BYTE    04h (subfunction "Modify Maximum Rights Mask")
03h    BYTE    directory handle
04h    BYTE    rights to grant (see AH=E2h/SF=03h)
05h    BYTE    rights to revoke (see AH=E2h/SF=03h)
06h    BYTE    length of directory path (00h-FFh)
07h  N BYTEs   directory path
Note:   the rights specified at offset 05h are revoked first, and then the
         rights specified at offset 04h are added to the resulting rights
         mask

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E2--SF05-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME NUMBER
       AH = E2h subfn 05h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=05h,AH=E2h/SF=15h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 12h)
02h    BYTE    05h (subfunction "Get Volume Number")
03h    BYTE    length of volume name (01h-10h)
04h  N BYTEs   volume name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0001h (length of following results buffer)
02h    BYTE    volume number
----------21E2--SF06-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME NAME
       AH = E2h subfn 06h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=05h,AH=E2h/SF=15h,AH=E2h/SF=1Ah
SeeAlso: AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    06h (subfunction "Get Volume Name")
03h    BYTE    volume number

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0011h (length of following results buffer)
02h    BYTE    length of volume name
03h 16 BYTEs   NUL-padded volume name
----------21E2--SF0A-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - CREATE DIRECTORY
       AH = E2h subfn 0Ah
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,84h,98h,FCh) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=39h,AH=E2h/SF=0Bh,AH=E2h/SF=0Fh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    0Ah (subfunction "Create Directory")
03h    BYTE    directory handle
04h    BYTE    maximum directory rights (see AH=E2h/SF=01h)
05h    BYTE    length of directory path (00h-FFh)
06h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E2--SF0B-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - DELETE DIRECTORY
       AH = E2h subfn 0Bh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,8Ah,98h,9Bh,9Ch,9Fh,A0h) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=3Ah,AH=E2h/SF=0Ah,AH=E2h/SF=0Fh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    0Bh (subfunction "Delete Directory")
03h    BYTE    directory handle
04h    BYTE    unused
05h    BYTE    length of directory path (00h-FFh)
06h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E2--SF0C-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN DIRECTORY FOR TRUSTEES
       AH = E2h subfn 0Ch
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           9Ch no more trustees
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E2h/SF=0Dh,AH=E2h/SF=0Eh,AH=E3h/SF=47h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    0Ch (subfunction "Scan Directory For Trustees")
03h    BYTE    directory handle
04h    BYTE    sequence number
               00h on first call, increment for each subsequent call
05h    BYTE    length of directory path (00h-FFh)
06h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0031h (length of following results buffer)
02h 16 BYTEs   directory name
12h  4 BYTEs   date and time of creation
16h    DWORD   object ID of owner (big-endian)
1Ah  5 DWORDs  object IDs of Trustees 0 through 4 (big-endian)
               00000000h = end of group
2Eh  5 BYTEs   directory rights for Trustees 0 through 4 (see AH=E2h/SF=03h)
----------21E2--SF0D-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - ADD TRUSTEE TO DIRECTORY
       AH = E2h subfn 0Dh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,8Ch,FCh) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Eh,AH=E3h/SF=47h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 107h)
02h    BYTE    0Dh (subfunction "Add Trustee To Directory")
03h    BYTE    directory handle
04h    DWORD   object ID of trustee (big-endian)
08h    BYTE    trustee directory rights (see AH=E2h/SF=01h)
09h    BYTE    length of directory path (00h-FFh)
0Ah  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E2--SF0E-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - DELETE TRUSTEE FROM DIRECTORY
       AH = E2h subfn 0Eh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h,9Bh,9Ch) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Dh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 107h)
02h    BYTE    0Eh (subfunction "Delete Trustee From Directory")
03h    BYTE    directory handle
04h    DWORD   object ID of trustee (big-endian)
08h    BYTE    unused
09h    BYTE    length of directory path (00h-FFh)
0Ah  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E2--SF0F-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - RENAME DIRECTORY
       AH = E2h subfn 0Fh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,8Bh,9Bh,9Ch,9Eh) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       directories SYS:LOGIN, SYS:MAIL, and SYS:PUBLIC must not be renamed
SeeAlso: AH=56h,AH=E2h/SF=0Ah,AH=E2h/SF=0Bh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 111h)
02h    BYTE    0Fh (subfunction "Rename Directory")
03h    BYTE    directory handle
04h    BYTE    length of directory path (00h-FFh)
05h  N BYTEs   directory path
       BYTE    length of new directory name (01h-0Eh)
     N BYTEs   new directory name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E2--SF10-------------------------
INT 21 - Novell NetWare - FILE SERVICES - PURGE ERASED FILES
       AH = E2h subfn 10h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       purges files marked for deletion on the file server by the calling
         workstation
SeeAlso: AH=13h,AH=41h,AH=E2h/SF=11h,AH=E3h/SF=CEh,AX=F244h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    10h (subfunction "Purge Erased Files")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E2--SF11-------------------------
INT 21 - Novell NetWare - FILE SERVICES - RESTORE ERASED FILE
       AH = E2h subfn 11h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           98h nonexistent volume
           FFh no more erased files
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       restores one file marked for deletion which has not yet been purged
SeeAlso: AH=13h,AH=41h,AH=E2h/SF=10h,AH=E3h/SF=CEh,AX=F244h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 13h)
02h    BYTE    11h (subfunction "Restore Erased File")
03h    BYTE    directory handle or 00h
04h    BYTE    length of volume name
05h  N BYTEs   volume name (including colon)
Note:   if both a directory handle and a volume name are specified, the volume
         name overrides the handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 001Eh (size of following results buffer)
02h 15 BYTEs   ASCIZ name of erased file
11h 15 BYTEs   ASCIZ name under which file was restored
----------21E2--SF12-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - ALLOC PERMANENT DIRECTORY HANDLE
       AH = E2h subfn 12h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,98h,9Ch) (see AH=E2h/SF=00h)
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=00h,AH=E2h/SF=13h,AH=E2h/SF=14h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    12h (subfunction "Alloc Permanent Directory Handle")
03h    BYTE    directory handle
04h    BYTE    drive ('A'-'Z')
05h    BYTE    length of directory path
06h  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0002h (size of following results buffer)
02h    BYTE    new directory handle
03h    BYTE    effective directory rights (see AH=E2h/SF=01h)
----------21E2--SF13-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - ALLOC TEMPORARY DIRECTORY HANDLE
       AH = E2h subfn 13h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see AH=E2h/SF=12h)
Return: AL = status (00h,98h,9Ch) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       this call is the same as AH=E2h/SF=12h except that the directory handle
         will be automatically deallocated when the calling application
         executes an End of Job call (AH=D6h) or terminates
SeeAlso: AH=D6h,AH=E2h/SF=00h,AH=E2h/SF=12h,AH=E2h/SF=14h,AH=E2h/SF=16h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 103h)
02h    BYTE    13h (subfunction "Alloc Temporary Directory Handle")
03h    BYTE    directory handle
04h    BYTE    drive ('A'-'Z')
05h    BYTE    length of directory path
06h  N BYTEs   directory path
----------21E2--SF14-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - DEALLOCATE DIRECTORY HANDLE
       AH = E2h subfn 14h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,9Bh) (see AH=E2h/SF=00h)
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=13h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    14h (subfunction "Deallocate Directory Handle")
03h    BYTE    directory handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no returned data)
----------21E2--SF15-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH HANDLE
       AH = E2h subfn 15h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=DAh,AH=E2h/SF=02h,AH=E2h/SF=06h,AH=E2h/SF=19h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    15h (subfunction "Get Volume Info With Handle")
03h    BYTE    directory handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 001Ch (length of following results buffer)
02h    WORD    sectors per block (big-endian)
04h    WORD    total blocks on volume (big-endian)
06h    WORD    blocks available on volume (big-endian)
08h    WORD    total directory slots  (big-endian)
0Ah    WORD    directory slots available (big-endian)
0Ch 16 BYTEs   NUL-padded volume name
1Ch    WORD    flag: volume removable if nonzero (big-endian)
----------21E2--SF16-------------------------
INT 21 u - Novell NetWare - DIRECTORY SERVICES - ALLOC SPECIAL TEMP DIR HANDLE
       AH = E2h subfn 16h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer
Return: AL = status
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX,
         but is not described in _NetWare_System_Calls--DOS_
SeeAlso: AH=E2h/SF=13h,AH=E2h/SF=14h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data
02h    BYTE    16h (subfunction "Allocate Special Temporary Directory Handle")
       ???
----------21E2--SF17-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SAVE DIRECTORY HANDLE
       AH = E2h subfn 17h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           else network error code
Note:   this function is supported by Advanced NetWare 2.0+ and Alloy NTNX
SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=17h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    18h (subfunction "Restore Directory Handle")
03h    BYTE    directory handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0010h (length of following results buffer)
02h 16 BYTEs   save buffer
----------21E2--SF18-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - RESTORE DIRECTORY HANDLE
       AH = E2h subfn 18h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           else network error code
Desc:   restore a previously saved directory handle to reproduce an executing
         environment, possibly on a different execution site
Note:   this function is supported by Advanced NetWare 2.0+ and Alloy NTNX
SeeAlso: AH=E2h/SF=12h,AH=E2h/SF=17h

Format of request buffer:
Offset  Size    Description
00h    WORD    0011h (length of following data)
02h    BYTE    18h (subfunction "Restore Directory Handle")
03h 16 BYTEs   save buffer

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0002h (length of following results buffer)
02h    BYTE    new directory handle
03h    BYTE    effective rights (see AH=E2h/SF=03h)
----------21E2--SF19-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SET DIRECTORY INFORMATION
       AH = E2h subfn 19h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,9Bh,9Ch) (see AH=E2h/SF=00h)
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E2h/SF=02h,AH=E2h/SF=0Fh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 10Bh)
02h    BYTE    19h (subfunction "Set Directory Information")
03h    BYTE    directory handle
04h    DWORD   date and time of creation (big-endian)
08h    DWORD   object ID of owner (big-endian)
0Ch    BYTE    maximum directory rightes (see AH=E2h/SF=03h)
0Dh    BYTE    length of directory path
0Eh  N BYTEs   directory path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E2--SF1A-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET PATH FROM DIRECTORY ENTRY
       AH = E2h subfn 1Ah
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=01h,AH=E2h/SF=06h,AH=E3h/SF=D7h

Format of request buffer:
Offset  Size    Description
00h    WORD    0004h (length of following data)
02h    BYTE    1Ah (subfunction "Get Path From Directory Entry")
03h    BYTE    volume number (00h-1Fh)
04h    WORD    directory entry number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 200h)
02h 256 BYTEs  path
----------21E3-------------------------------
INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
       AH = E3h
       AL = interrupt number
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AH=E1h"OS/286",INT 31/AX=0300h
----------21E3-------------------------------
INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
       AH = E3h
       AL = character
Return: AL = 00h successful
            01h buffer full (128 characters)
SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E8h"DoubleDOS"
SeeAlso: AH=F3h"DoubleDOS"
----------21E3-------------------------------
INT 21 - Novell NetWare - CONNECTION CONTROL
       AH = E3h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           else error code
Note:   supported by NetWare 4.0+, Advanced NetWare 1.0+, and Alloy NTNX
SeeAlso: AH=E3h/SF=0Ah,AH=E3h/SF=32h,AH=E3h/SF=64h,AH=E3h/SF=C8h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data
02h    BYTE    subfunction number
               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
       var     depends on subfunction
Notes:  the above subfunctions are not described in _NetWare_System_Calls--DOS_
       see separate entries below for other subfunctions

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following buffer space for results
       var     depends on subfunction

Format of object property:
Offset  Size    Description
00h 1-16 BYTEs property name
 N     BYTE    flags
               bit 0: property is dynamic
               bit 1: property is a set rather than an item
N+1    BYTE    security levels (see below)
       ???

Names of well-known properties:
ACCOUNT_BALANCE
ACCOUNT_SERVERS
GROUP_MEMBERS
GROUPS_I'M_IN
IDENTIFICATION         user's name
LOGIN_CONTROL
NET_ADDRESS
OPERATORS
PASSWORD
SECURITY_EQUALS

Values for security levels:
00h    "anyone" everyone may access
01h    "logged" only logged-in clients may access
02h    "object" only clients logged-in with object's name, type, and password
03h    "supervisor" only clients logged-in with supervisor privileges
04h    "NetWare" only NetWare may access
Note:   the above values are stored in a nybble; the high half-byte is write
         access and the low half-byte is read access

Values for object type:
0000h  unknown
0001h  user
0002h  user group
0003h  print queue
0004h  file server
0005h  job server
0006h  gateway
0007h  print server
0008h  archive queue
0009h  archive server
000Ah  job queue
000Bh  administration
0026h  remote bridge server
0047h  advertising print server
0048h-8000h reserved
FFFFh  wild (used only for finding objects)
----------21E3--SF0A-------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - ENTER LOGIN AREA
       AH = E3h subfn 0Ah
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Desc:   change the login directory for the calling workstation
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=D7h,AH=E3h/SF=14h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 102h)
02h    BYTE    0Ah (subfunction "Enter Login Area")
03h    BYTE    number of local drives
04h    BYTE    length of subdirectory name (00h-FFh)
05h  N BYTEs   name of subdirectory under SYS:LOGIN where to find the login
               utility

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF0D-------------------------
INT 21 - Novell NetWare - MESSAGE SERVICES - LOG NETWORK MESSAGE
       AH = E3h subfn 0Dh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Desc:   append a line to the default file server's NET$LOG.MSG file
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E1h/SF=09h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 52h)
02h    BYTE    0Dh (subfunction "Log Network Message")
03h    BYTE    length of message (01h-50h)
04h  N BYTEs   message (no control characters or characters > 7Eh)
----------21E3--SF0E-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET DISK UTILIZATION
       AH = E3h subfn 0Eh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           98h nonexistent volume
           F2h not permitted to read object
Notes:  this function is supported by Advanced NetWare 2.1+
       the caller must have bindery object read privileges
SeeAlso: AH=E3h/SF=11h,AH=E3h/SF=D6h,AH=E3h/SF=D9h,AH=E3h/SF=E6h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    0Eh (subfunction "Get Disk Utilization")
03h    BYTE    volume number (00h-1Fh)
04h    DWORD   object ID (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 000Bh (size of following results buffer)
02h    BYTE    volume number (00h-1Fh)
03h    DWORD   object ID (big-endian)
07h    WORD    directories used by object (big-endian)
09h    WORD    files created by object (big-endian)
0Bh    WORD    disk blocks used by object-created files (big-endian)
----------21E3--SF0F-------------------------
INT 21 - Novell NetWare - FILE SERVICES - SCAN FILE INFORMATION
       AH = E3h subfn 0Fh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           89h not permitted to search directory
           FFh no more matching files
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=B6h,AH=E3h/SF=10h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 105h)
02h    BYTE    0Fh (subfunction "Scan File Information")
03h    WORD    sequence number (big-endian)
               FFFFh on first call
05h    BYTE    directory handle or 00h
06h    BYTE    search attributes (see AX=4301h)
07h    BYTE    length of filespec
08h  N BYTEs   ASCIZ uppercase filespec

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 005Eh (size of following results buffer)
02h    WORD    next sequence number (place in request buffer for next call)
04h 15 BYTEs   ASCIZ filename
13h    BYTE    file attributes (see AX=4301h for format)
14h    BYTE    extended file attributes (see AH=B6h for format)
15h    DWORD   file size in bytes (big-endian)
19h    WORD    file's creation date (big-endian) (see AX=5700h for format)
1Bh    WORD    date of last access (big-endian) (see AX=5700h for format)
1Dh    DWORD   date and time of last update (big-endian) (see AH=E2h/SF=02h)
21h    DWORD   object ID of owner (big-endian)
25h    DWORD   date and time last archived (big-endian) (see AH=E2h/SF=02h)
29h 55 BYTEs   reserved
----------21E3--SF10-------------------------
INT 21 - Novell NetWare - FILE SERVICES - SET FILE INFORMATION
       AH = E3h subfn 10h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the caller must have modify privileges on the directory containing the
         file
SeeAlso: AH=B6h,AH=E3h/SF=0Fh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 151h)
02h    BYTE    10h (subfunction "Set File Information")
03h    BYTE    file attributes (see AX=4301h for format)
04h    BYTE    extended file attributes (see AH=B6h for format)
05h  4 BYTEs   reserved
09h    WORD    file's creation date (big-endian) (see AX=5700h for format)
0Bh    WORD    date of last access (big-endian) (see AX=5700h for format)
0Dh    DWORD   date and time of last update (big-endian) (see AH=E2h/SF=02h)
11h    DWORD   object ID of owner (big-endian)
15h    DWORD   date and time last archived (big-endian) (see AH=E2h/SF=02h)
19h 56 BYTEs   reserved
51h    BYTE    directory handle or 00h
52h    BYTE    search attributes (see AX=4301h for format)
53h    BYTE    length of filename
54h  N BYTEs   filename
Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF11-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER INFORMATION
       AH = E3h subfn 11h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=CDh,AH=E3h/SF=D3h,AH=E3h/SF=E7h,AH=E7h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    11h (subfunction "Get File Server Information")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0080h (size of following results buffer)
02h 48 BYTEs   server's name
32h    BYTE    NetWare version
33h    BYTE    NetWare subversion (0-99)
34h    WORD    number of connections supported (big-endian)
36h    WORD    number of connections in use (big-endian)
38h    WORD    maximum connected volumes (big-endian)
---Advanced NetWare 2.1+ ---
3Ah    BYTE    operating system revision number
3Bh    BYTE    fault tolerance (SFT) level
3Ch    BYTE    TTS level
3Dh    WORD    maximum simultaneously-used connections (big-endian)
3Fh    BYTE    accounting version
40h    BYTE    VAP version
41h    BYTE    queueing version
42h    BYTE    print server version
43h    BYTE    virtual console version
44h    BYTE    security restrictions level
45h    BYTE    internetwork bridge version
46h 60 BYTEs   reserved
----------21E3--SF13-------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - GET INTERNET ADDRESS
       AH = E3h subfn 13h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=DCh"NetWare",AH=E3h/SF=16h,AH=EEh"NetWare"

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    13h (subfunction "Get Internet Address")
03h    BYTE    logical connection number (01h-64h)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 000Ch (length of following results buffer)
02h  4 BYTEs   network number
06h  6 BYTEs   physical node address
0Ch  2 BYTEs   socket number
----------21E3--SF14-------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - LOGIN TO FILE SERVER
       AH = E3h subfn 14h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Desc:   this function retrieves a list indicating the connection numbers under
         which a bindery object is logged into the default file server
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=D7h"NetWare",AH=F1h"NetWare"

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max B3h)
02h    BYTE    14h (subfunction "Login To File Server")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name
       BYTE    length of password
     N BYTEs   password

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF15-------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - GET OBJECT CONNECTION NUMBERS
       AH = E3h subfn 15h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Desc:   this function retrieves a list indicating the connection numbers under
         which a bindery object is logged into the default file server
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=DCh"NetWare",AH=E3h/SF=16h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 33h)
02h    BYTE    15h (subfunction "Get Object Connection Numbers")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following results buffer (max 65h)
02h    BYTE    number of connections
03h  N BYTEs   connection list
----------21E3--SF16-------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION INFORMATION
       AH = E3h subfn 16h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=D7h,AH=DCh"NetWare",AH=E3h/SF=14h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    16h (subfunction "Get Connection Information")
03h    BYTE    logical connection number (01h-64h)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 003Dh (length of following results buffer)
02h    DWORD   object ID for object logged in on the connection (big-endian)
               00000000h if no object logged in
06h    WORD    type of object (big-endian)
08h 48 BYTEs   name of object
38h  7 BYTEs   login time (see below)

Format of login time:
Offset  Size    Description
00h    BYTE    year (80-99 = 1980-1999, 00-79 = 2000-2079)
01h    BYTE    month (1-12)
02h    BYTE    day (1-31)
03h    BYTE    hour (0-23)
04h    BYTE    minute (0-59)
05h    BYTE    second (0-59)
06h    BYTE    day of week (0 = Sunday)
----------21E3--SF32-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CREATE BINDERY OBJECT
       AH = E3h subfn 32h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EEh object already exists
           EFh invalid name
           F1h invalid bindery security level
           F5h not permitted to create objects
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=33h,AH=E3h/SF=34h,AH=E3h/SF=38h,AH=E3h/SF=39h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 35h)
02h    BYTE    32h (subfunction "Create Bindery Object")
03h    BYTE    object flag
               00h static
               01h dynamic
04h    BYTE    object security levels
05h    WORD    type of object (big-endian)
07h    BYTE    length of object's name
08h  N BYTEs   object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    0000h (no data returned)
----------21E3--SF33-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - DELETE BINDERY OBJECT
       AH = E3h subfn 33h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EFh invalid name
           F0h wildcard not allowed
           F4h not permitted to delete objects
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=34h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 33h)
02h    BYTE    33h (subfunction "Delete Bindery Object")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF34-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - RENAME BINDERY OBJECT
       AH = E3h subfn 34h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EFh invalid name
           F0h wildcard not allowed
           F3h not permitted to rename object
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=33h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 63h)
02h    BYTE    34h (subfunction "Rename Bindery Object")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name
       BYTE    length of new name (01h-2Fh)
     N BYTEs   new name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF35-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY OBJECT ID
       AH = E3h subfn 35h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Notes:  this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the requesting workstation must be logged into the file server with
         read access to the bindery object
SeeAlso: AH=E3h/SF=36h,AH=E3h/SF=44h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 33h)
02h    BYTE    35h (subfunction "Get Bindery Object ID")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name
06h  N BYTEs   object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0036h (length of following buffer space)
02h    DWORD   object ID (big-endian)
06h    WORD    type of object (big-endian)
08h 48 BYTEs   object name
----------21E3--SF36-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY OBJECT NAME
       AH = E3h subfn 36h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EFh invalid name
           F0h wildcard not allowed
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Notes:  this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the requesting workstation must be logged into the file server with
         read access to the bindery object
SeeAlso: AH=E3h/SF=35h,AH=E3h/SF=44h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    36h (subfunction "Get Bindery Object Name")
03h    DWORD   object ID (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0036h (length of following buffer space)
02h    DWORD   object ID (big-endian)
06h    WORD    type of object (big-endian)
08h 48 BYTEs   object name
----------21E3--SF37-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - SCAN BINDERY OBJECT
       AH = E3h subfn 37h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EFh invalid name
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Notes:  this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the requesting workstation must be logged into the file server with
         read access to the bindery object
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=33h,AH=E3h/SF=38h,AH=E3h/SF=3Ch

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 37h)
02h    BYTE    37h (subfunction "Scan Bindery Object")
03h    DWORD   last object ID (big-endian)
07h    WORD    type of object (big-endian)
09h    BYTE    length of object's name
0Ah  N BYTEs   object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0039h (length of following buffer space)
02h    DWORD   object ID (big-endian)
               FFFFFFFFh for first call
06h    WORD    type of object (big-endian)
08h    BYTE    length of object's name (01h-2Fh)
09h  N BYTEs   object name
       BYTE    object flag (00h static, 01h dynamic)
       BYTE    object's security levels
       BYTE    object properties flag (00h no, FFh yes)
----------21E3--SF38-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE BINDERY OBJECT SECURITY
       AH = E3h subfn 38h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           F1h invalid bindery security level
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=3Bh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 34h)
02h    BYTE    38h (subfunction "Change Bindery Object Security")
03h    BYTE    new security levels
04h    WORD    type of object (big-endian)
06h    BYTE    length of object's name (01h-2Fh)
07h  N BYTEs   object name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF39-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CREATE PROPERTY
       AH = E3h subfn 39h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EDh property already exists
           EFh invalid name
           F0h wildcard not allowed
           F1h invalid bindery security level
           F7h not permitted to create properties
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=3Bh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 45h)
02h    BYTE    39h (subfunction "Create Property")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name
       BYTE    property flags
       BYTE    property security levels
       BYTE    length of property's name (01h-0Fh)
     N BYTEs   property's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF3A-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - DELETE PROPERTY
       AH = E3h subfn 3Ah
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           F1h invalid bindery security level
           F6h not permitted to delete properties
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=32h,AH=E3h/SF=39h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 43h)
02h    BYTE    3Ah (subfunction "Delete Property")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object's name
       BYTE    length of property's name (01h-0Fh)
     N BYTEs   property's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF3B-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE PROPERTY SECURITY
       AH = E3h subfn 3Bh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           F1h invalid bindery security level
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=38h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 44h)
02h    BYTE    3Bh (subfunction "Change Property Security")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       BYTE    new property security levels
       BYTE    length of property's name
     N BYTEs   property name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF3C-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - SCAN PROPERTY
       AH = E3h subfn 3Ch
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           F1h invalid bindery security level
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=37h,AH=E3h/SF=3Bh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 47h)
02h    BYTE    3Ch (subfunction "Scan Property")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       DWORD   sequence number (big-endian)
               FFFFFFFFh for first call
       BYTE    length of property's name (01h-0Fh)
     N BYTEs   property's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0018h (length of following results buffer)
02h 16 BYTEs   property name
12h    BYTE    property flags
13h    BYTE    property security levels
14h    DWORD   sequence number (big-endian)
18h    BYTE    property value flag (00h no, FFh yes)
19h    BYTE    more properties (00h no, FFh yes)
----------21E3--SF3D-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - READ PROPERTY VALUE
       AH = E3h subfn 3Dh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           ECh no such segment
           F0h wildcard not allowed
           F1h invalid bindery security level
           F9h not permitted to read property
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Desc:   retrieve one 128-byte segment of the specified property's value
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=39h,AH=E3h/SF=3Ch,AH=E3h/SF=3Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 44h)
02h    BYTE    3Dh (subfunction "Read Property Value")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       BYTE    segment number (01h on first call, increment until done)
       BYTE    length of property's name (01h-0Fh)
     N BYTEs   property name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0082h (length of following results buffer)
02h 128 BYTEs  property's value
82h    BYTE    more segments (00h no, FFh yes)
83h    BYTE    property's flags
----------21E3--SF3E-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - WRITE PROPERTY VALUE
       AH = E3h subfn 3Eh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           E8h not item property
           ECh no such segment
           F0h wildcard not allowed
           F1h invalid bindery security level
           F8h not permitted to write property
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=39h,AH=E3h/SF=3Ch,AH=E3h/SF=3Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max C5h)
02h    BYTE    3Eh (subfunction "Write Property Value")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       BYTE    segment number (01h on first call, increment until done)
       BYTE    erase remaining segments (00h no, FFh yes)
       BYTE    length of property's name (01h-0Fh)
     N BYTEs   property name
   128 BYTEs   property value segment

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF3F-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - VERIFY BINDERY OBJECT PASSWORD
       AH = E3h subfn 3Fh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure: no such object, bad password
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=40h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 133h)
02h    BYTE    3Fh (subfunction "Verify Bindery Object Password")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       BYTE    length of password (00h-7Fh)
     N BYTEs   password

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF40-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CHANGE BINDERY OBJECT PASSWORD
       AH = E3h subfn 40h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure: no such object, no password for object, or
                       invalid old password
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=3Fh,AH=E3h/SF=41h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 133h)
02h    BYTE    40h (subfunction "Change Bindery Object Password")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name (01h-2Fh)
06h  N BYTEs   object name
       BYTE    length of old password (00h-7Fh)
     N BYTEs   old password
       BYTE    length of new password (00h-7Fh)
     N BYTEs   new password

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF41-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - ADD BINDERY OBJECT TO SET
       AH = E3h subfn 41h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           E9h member already exists
           EBh not a group property
           F0h wildcard not allowed
           F8h can't write property
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Desc:   add the specified object to a set property
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=40h,AH=E3h/SF=42h,AH=E3h/SF=43h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 75h)
02h    BYTE    41h (subfunction "Add Bindery Object to Set")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name
06h  N BYTEs   object name
       BYTE    length of property name (01h-0Fh)
     N BYTEs   property name
       WORD    type of member object (big-endian)
       BYTE    length of member object's name
     N BYTEs   member object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF42-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - DELETE BINDERY OBJECT FROM SET
       AH = E3h subfn 42h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EAh member does not exist
           EBh not a group property
           F0h wildcard not allowed
           F8h can't write property
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Desc:   delete the specified object from a set property
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=40h,AH=E3h/SF=42h,AH=E3h/SF=43h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 75h)
02h    BYTE    42h (subfunction "Delete Bindery Object from Set")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name
06h  N BYTEs   object name
       BYTE    length of property name (01h-0Fh)
     N BYTEs   property name
       WORD    type of member object (big-endian)
       BYTE    length of member object's name
     N BYTEs   member object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF43-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - IS BINDERY OBJECT IN SET
       AH = E3h subfn 43h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           EAh member does not exist
           EBh not a group property
           F0h wildcard not allowed
           F9h not permitted to read property
           FBh no such property
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Notes:  this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the caller must have read access to the property
SeeAlso: AH=E3h/SF=41h,AH=E3h/SF=42h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 75h)
02h    BYTE    43h (subfunction "Is Bindery Object In Set")
03h    WORD    type of object (big-endian)
05h    BYTE    length of object's name
06h  N BYTEs   object's name
       BYTE    length of property's name
     N BYTEs   property's name
       WORD    type of member object (big-endian)
       BYTE    length of member object's name
     N BYTEs   member object's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF44-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - CLOSE BINDERY
       AH = E3h subfn 44h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E3h/SF=45h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    44h (subfunction "Close Bindery")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF45-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - OPEN BINDERY
       AH = E3h subfn 45h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Notes:  this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
       the bindery may only be opened by the supervisor or an object with
         equivalent privileges
SeeAlso: AH=E3h/SF=44h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    45h (subfunction "Open Bindery")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no data returned)
----------21E3--SF46-------------------------
INT 21 - Novell NetWare - BINDERY SERVICES - GET BINDERY ACCESS LEVEL
       AH = E3h subfn 46h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    46h (subfunction "Get Bindery Access Level")

Format of reply buffer:
Offset  Size    Description
00h    WORD    0005h (length of following buffer)
02h    BYTE    security levels
03h    DWORD   object ID (big-endian)
----------21E3--SF47-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - SCAN BINDERY OBJ TRUSTEE PATHS
       AH = E3h subfn 47h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           96h server out of memory
           F0h wildcard not allowed
           F1h invalid bindery security level
           FCh no such object
           FEh server bindery locked
           FFh bindery failure
Desc:   iterate through the directories to which an object is a trustee
Note:   this function is supported by Advanced NetWare 1.0+ and Alloy NTNX
SeeAlso: AH=E2h/SF=0Ch,AH=E2h/SF=0Dh,AH=E2h/SF=0Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0008h (length of following data)
02h    BYTE    47h (subfunction "Scan Bindery Object Trustee Paths")
03h    BYTE    volume number (00h-1Fh)
04h    WORD    last sequence number (big-endian)
               00h on first call
06h    DWORD   object ID (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following results buffer (max 107h)
02h    WORD    next sequence number (big-endian)
04h    DWORD   object ID (big-endian)
08h    BYTE    trustee directory rights (see AH=E2h/SF=03h)
09h    BYTE    length fo trustee path
0Ah  N BYTEs   trustee path
----------21E3--SF64-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CREATE QUEUE
       AH = E3h subfn 64h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,99h,9Bh,9Ch,EDh-F1h,F5h,F7h,FCh,FEh,FFh)
               (see below)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation with supervisor privileges
SeeAlso: AH=E3h/SF=65h,AH=E3h/SF=66h,AH=E3h/SF=68h,AH=E3h/SF=6Bh

Values for status:
00h    successful
96h    server out of memory
99h    directory full
9Bh    invalid directory handle
9Ch    invalid path
D0h    queue error
D1h    no such queue
D2h    no server for queue
D3h    no queue rights
D4h    queue full
D5h    no queue job
D6h    no job rights
D7h    queue servicing error
D9h    station is not a server
DAh    queue halted
DBh    too many queue servers
EDh    property already exists
EEh    object already exists
EFh    invalid name
F0h    wildcard not allowed
F1h    invalid bindery security level
F5h    not permitted to create object
F7h    not permitted to create property
FCh    no such object
FEh    server bindery locked
FFh    bindery failure

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max ABh)
02h    BYTE    64h (subfunction "Create Queue")
03h    WORD    queue type (big-endian)
05h    BYTE    length of queue's name (01h-2Fh)
06h  N BYTEs   queue's name
       BYTE    directory handle or 00h
       BYTE    length of path name (01h-76h)
     N BYTEs   path name of directory in which to create queue subdirectory

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0004h (size of following results buffer)
02h    DWORD   object ID of queue (big-endian)
----------21E3--SF65-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - DESTROY QUEUE
       AH = E3h subfn 65h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,FFh) (see also AH=E3h/SF=64h)
           FFh hardware failure
Desc:   abort all active jobs, detach all job servers, remove all job entries,
         delete all job files, remove the queue object and its properties
         from the bindery, and delete the queue's subdirectory
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must have SUPERVISOR privileges
SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=66h,AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=70h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    65h (subfunction "Destroy Queue")
03h    DWORD   object ID of queue (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF66-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE CURRENT STATUS
       AH = E3h subfn 66h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D1h-D3h,F1h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the queue's Q_USERS or Q_OPERATORS properties
SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=67h,AH=E3h/SF=6Fh,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    66h (subfunction "Read Queue Current Status")
03h    DWORD   object ID of queue (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0085h (size of following results)
02h    DWORD   object ID of queue (big-endian)
06h    BYTE    status of queue
               bit 0: operator disabled addition of new jobs
               bit 1: operator refuses additional job servers attaching
               bit 2: operator disabled job servicing
07h    BYTE    number of jobs in queue (00h-FAh)
08h    BYTE    number of servers attached to queue (00h-19h)
09h 25 DWORDs  list of object IDs of attached servers
6Dh 25 BYTEs   list of attached servers' stations
86h    BYTE    (call) maximum number of servers to return
----------21E3--SF67-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - SET QUEUE CURRENT STATUS
       AH = E3h subfn 67h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must have operator privileges
SeeAlso: AH=E3h/SF=64h,AH=E3h/SF=66h,AH=E3h/SF=6Fh,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0006h (length of following data)
02h    BYTE    67h (subfunction "Set Queue Current Status")
03h    DWORD   object ID of queue (big-endian)
07h    BYTE    queue status
               bit 0: operator disabled addition of new jobs
               bit 1: operator refuses additional job servers attaching
               bit 2: operator disabled job servicing

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF68-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CREATE QUEUE JOB AND FILE
       AH = E3h subfn 68h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,99h,9Ch,D0h-D4h,DAh,EDh,EFh-F1h,F7h,FCh,FEh,FFh)
               (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the queue's Q_USER property
SeeAlso: AH=E3h/SF=69h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0107h (length of following data)
02h    BYTE    68h (subfunction "Close File and Start Queue Job")
03h    DWORD   object ID of queue (big-endian)
07h    BYTE    client station
08h    BYTE    client task number
09h    DWORD   object ID of client (big-endian)
0Dh    DWORD   object ID of target server (big-endian)
               FFFFFFFh if any server acceptable
11h  6 BYTEs   target execution time (year,month,day,hour,minute,second)
               FFFFFFFFFFFFh to execute as soon as possible
17h  6 BYTEs   job entry time (year,month,day,hour,minute,second)
1Dh    WORD    job number (big-endian)
1Fh    WORD    job type (big-endian)
21h    BYTE    job position
22h    BYTE    job control flags
23h 14 BYTEs   ASCIZ job file name
31h  6 BYTEs   job file handle
37h    BYTE    server station
38h    BYTE    server task number
39h    DWORD   object ID of server (big-endian)
3Dh 50 BYTEs   ASCIZ job description string
6Fh 152 BYTEs  client record area

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0036h (size of following results buffer)
02h    BYTE    client station
03h    BYTE    client task number
04h    DWORD   object ID of client (big-endian)
08h    DWORD   object ID of target server (big-endian)
0Ch  6 BYTEs   target execution time (year,month,day,hour,minute,second)
12h  6 BYTEs   job entry time (year,month,day,hour,minute,second)
18h    WORD    job number (big-endian)
1Ah    WORD    job type (big-endian)
1Ch    BYTE    job position
1Dh    BYTE    job control flags
1Eh 14 BYTEs   ASCIZ job file name
2Ch  6 BYTEs   job file handle
32h    BYTE    server station
33h    BYTE    server task number
34h    DWORD   object ID of server or 00000000h (big-endian)
----------21E3--SF69-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CLOSE FILE AND START QUEUE JOB
       AH = E3h subfn 69h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D3h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on the workstation which created the job
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    69h (subfunction "Close File and Start Queue Job")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF6A-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - REMOVE JOB FROM QUEUE
       AH = E3h subfn 6Ah
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must have created the job or be an operator
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    6Ah (subfunction "Remove Job From Queue")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF6B-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - GET QUEUE JOB LIST
       AH = E3h subfn 6Bh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h-D3h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the Q_USERS or Q_OPERATORS properties
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    6Bh (subfunction "Get Queue Job List")
03h    DWORD   object ID of queue (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 1F6h)
02h    WORD    job count (big-endian)
04h  N WORDs   list of job numbers by position in queue (big-endian)
       WORD    maximum job numbers
----------21E3--SF6C-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE JOB ENTRY
       AH = E3h subfn 6Ch
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h-D3h,D5h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the Q_USERS, Q_OPERATORS, or Q_SERVERS properties
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    6Ch (subfunction "Read Queue Job Entry")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0100h (size of following results)
02h    BYTE    client station number
03h    BYTE    client task number
04h    DWORD   object ID of client
08h    DWORD   object ID of target server (big-endian)
               FFFFFFFFh if any server acceptable
0Ch  6 BYTEs   target execution time (year,month,day,hour,minute,second)
               FFFFFFFFFFFFh if serviced as soon as possible
12h  6 BYTEs   job entry time (year,month,day,hour,minute,second)
18h    WORD    job number (big-endian)
1Ah    WORD    job type (big-endian)
1Ch    BYTE    job position
1Dh    BYTE    job control flags
               bit 3: job will be serviced automatically if connection broken
               bit 4: job remains in queue after server aborts job
               bit 5: client has not filled associated job file
               bit 6: User Hold--job advances, but cannot be serviced until
                       this bit is cleared by user or operator
               bit 7: Operator Hold--job advances, but cannot be serviced
                       until this bit is cleared by an operator
1Eh 14 BYTEs   ASCIZ job filename
2Ch  6 BYTEs   job file handle
32h    BYTE    server station
33h    BYTE    server task number
34h    DWORD   object ID of server
38h 50 BYTEs   ASCIZ job description string
6Ah 152 BYTEs  client record area
----------21E3--SF6D-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE QUEUE JOB ENTRY
       AH = E3h subfn 6Dh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D5h,D7h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be an operator or the user who created the job
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Ch,AH=E3h/SF=6Eh

Format of request buffer:
Offset  Size    Description
00h    WORD    0105h (length of following data)
02h    BYTE    6Dh (subfunction "Change Queue Job Entry")
03h    DWORD   object ID of queue (big-endian)
07h    BYTE    client station number
08h    BYTE    client task number
09h    DWORD   object ID of client
0Dh    DWORD   object ID of target server (big-endian)
11h  6 BYTEs   target execution time (year,month,day,hour,minute,second)
17h  6 BYTEs   job entry time (year,month,day,hour,minute,second)
1Dh    WORD    job number (big-endian)
1Fh    WORD    job type (big-endian)
21h    BYTE    job position
22h    BYTE    job control flags
               bit 3: job will be serviced automatically if connection broken
               bit 4: job remains in queue after server aborts job
               bit 5: client has not filled associated job file
               bit 6: User Hold--job advances, but cannot be serviced until
                       this bit is cleared by user or operator
               bit 7: Operator Hold--job advances, but cannot be serviced
                       until this bit is cleared by an operator
23h 14 BYTEs   ASCIZ job filename
31h  6 BYTEs   job file handle
37h    BYTE    server station
38h    BYTE    server task number
39h    DWORD   object ID of server
3Dh 50 BYTEs   ASCIZ job description string
6Fh 152 BYTEs  client record area

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF6E-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE QUEUE JOB POSITION
       AH = E3h subfn 6Eh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D5h,D6h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be an operator
       if the specified position is greater than the number of jobs in the
         queue, the job is placed at the end of the queue
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ah,AH=E3h/SF=6Ch,AH=E3h/SF=6Dh

Format of request buffer:
Offset  Size    Description
00h    WORD    0008h (length of following data)
02h    BYTE    6Eh (subfunction "Change Queue Job Position")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)
09h    BYTE    new position in queue (01h-FAh)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF6F-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - ATTACH QUEUE SERVER TO QUEUE
       AH = E3h subfn 6Fh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,DAh,DBh,FEh,FFh)
               (see also AH=E3h/SF=64h)
           FFh bindery failure, or no such property, or no such member
Desc:   attach the calling job server to the specified queue
Notes:  this function is supported by Advanced NetWare 2.1+
       a queue may have up to 25 job servers attached
       the calling workstation must be security-equivalent to a member of the
         queue's Q_SERVERS property
SeeAlso: AH=E3h/SF=70h,AH=E3h/SF=71h,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    6Fh (subfunction "Attach Queue Server To Queue")
03h    DWORD   object ID of queue (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF70-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - DETACH QUEUE SERVER FROM QUEUE
       AH = E3h subfn 70h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,D2h,FEh,FFh) (see AH=E3h/SF=64h)
Desc:   remove the calling job server from the specified queue's list of
         servers
Notes:  this function is supported by Advanced NetWare 2.1+
       the caller must have previously attached itself to the queue
SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    70h (subfunction "Detach Queue Server From Queue")
03h    DWORD   object ID of queue (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF71-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - SERVICE QUEUE JOB AND OPEN FILE
       AH = E3h subfn 71h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see AH=E3h/SF=68h)
Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,D5h,D9h,DAh,FEh,FFh)
               (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       the caller must be on a workstation which is security-equivalent to a
         member of the queue's Q_USERS, Q_OPERATORS, or Q_SERVERS properties
SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=72h,AH=E3h/SF=73h,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    71h (subfunction "Service Queue Job and Open File")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    target job type (big-endian)
               FFFFh any
----------21E3--SF72-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - FINISH SERVICING QUEUE JOB AND FILE
       AH = E3h subfn 72h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D6h) (see AH=E3h/SF=64h)
Desc:   inform the Queue Management System (QMS) that the queue server has
         completed a job
Notes:  this function is supported by Advanced NetWare 2.1+
       the caller must be a job server which has previously obtained a job
         for servicing
SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=71h,AH=E3h/SF=73h,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    000Bh (length of following data)
02h    BYTE    72h (subfunction "Finish Servicing Queue Job and File")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)
09h    DWORD   charge (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF73-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - ABORT SERVICING QUEUE JOB AND FILE
       AH = E3h subfn 73h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D6h,D9h) (see AH=E3h/SF=64h)
Desc:   inform the Queue Management System (QMS) that the queue server is
         unable to service a previously-accepted job
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=6Fh,AH=E3h/SF=71h,AH=E3h/SF=72h,AH=E3h/SF=76h

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    73h (subfunction "Abort Servicing Queue Job and File")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF74-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - CHANGE TO CLIENT RIGHTS
       AH = E3h subfn 74h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,D0h,D1h,D5h,D9h) (see AH=E3h/SF=64h)
Desc:   temporarily assume the login identity of the client submitting the
         job being serviced
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be a job server which has obtained a job for servicing
SeeAlso: AH=E3h/SF=75h

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    74h (subfunction "Change To Client Rights")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF75-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - RESTORE QUEUE SERVER RIGHTS
       AH = E3h subfn 75h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,D3h,D5h,D9h,DAh,FEh,FFh)
               (see AH=E3h/SF=64h)
Desc:   restore server's own identity after assuming the login identity of the
         client submitting the job being serviced
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be a job server which has previously changed its identity
SeeAlso: AH=E3h/SF=74h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    75h (subfunction "Change To Client Rights")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF76-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE SERVER CURRENT STATUS
       AH = E3h subfn 76h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D1h-D3h,F1h,FCh,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the Q_USERS or Q_OPERATORS properties
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=6Fh,AH=E3h/SF=77h,AH=E3h/SF=78h

Format of request buffer:
Offset  Size    Description
00h    WORD    000Ah (length of following data)
02h    BYTE    76h (subfunction "Read Queue Server Current Status")
03h    DWORD   object ID of queue (big-endian)
07h    DWORD   object ID of server (big-endian)
0Bh    BYTE    server station

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0040h (size of following results)
02h 64 BYTEs   server status record (format depends on server)
               first four bytes should contain estimated "price" for an
               average job
----------21E3--SF76-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - READ QUEUE SERVER CURRENT STATUS
       AH = E3h subfn 76h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (00h,96h,9Ch,D0h,D1h,FEh,FFh) (see AH=E3h/SF=64h)
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be a job server which has attached itself to the queue
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=6Fh,AH=E3h/SF=76h,AH=E3h/SF=78h

Format of request buffer:
Offset  Size    Description
00h    WORD    0045h (length of following data)
02h    BYTE    77h (subfunction "Set Queue Server Current Status")
03h    DWORD   object ID of queue (big-endian)
02h 64 BYTEs   server status record (format depends on server)
               first four bytes should contain estimated "price" for an
               average job

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SF78-------------------------
INT 21 - Novell NetWare - QUEUE SERVICES - GET QUEUE JOB'S FILE SIZE
       AH = E3h subfn 78h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status (see also AH=E3h/SF=64h)
           00h successful
Notes:  this function is supported by Advanced NetWare 2.1+
       caller must be on a workstation which is security-equivalent to a
         member of the queue's Q_USERS, Q_OPERATORS, or Q_SERVERS properties
SeeAlso: AH=E3h/SF=68h,AH=E3h/SF=6Ch,AH=E3h/SF=71h

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    78h (subfunction "Get Queue Job's File Size")
03h    DWORD   object ID of queue (big-endian)
07h    WORD    job number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 000Ah (size of following results)
02h    DWORD   object ID of queue (big-endian)
06h    WORD    job number (big-endian)
08h    DWORD   size of job file in bytes (big-endian)
----------21E3--SF96-------------------------
INT 21 - Novell NetWare - ACCOUNTING SERVICES - GET ACCOUNT STATUS
       AH = E3h subfn 96h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C0h no account privileges
           C1h no account balance
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=97h,AH=E3h/SF=98h,AH=E3h/SF=99h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 33h)
02h    BYTE    96h (subfunction "Get Account Status")
03h    WORD    type of bindery object (big-endian)
05h    BYTE    length of object name (01h to 2Fh)
06h  N BYTEs   object name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following buffer space
02h    DWORD   account balance (big-endian)
06h    DWORD   credit limit (big-endian)
               signed number indicating lowest allowable account balance
0Ah 120 BYTEs  reserved
82h    DWORD   object ID, server 1 (big-endian)
86h    DWORD   hold amount, server 1 (big-endian)
       ...
F8h    DWORD   object ID, server 16 (big-endian)
FCh    DWORD   hold amount, server 16 (big-endian)
Note:   the reply buffer lists the servers which have placed holds on a portion
         of the account balance, and the amount reserved by each
----------21E3--SF97-------------------------
INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT CHARGE
       AH = E3h subfn 97h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C0h no account privileges
           C1h no account balance
           C2h credit limit exceeded
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=96h,AH=E3h/SF=98h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 13Fh)
02h    BYTE    97h (subfunction "Submit Account Charge")
03h    WORD    service type (big-endian)
05h    DWORD   amount to be charged to account (big-endian)
09h    DWORD   amount of prior hold to be cancelled (big-endian)
0Dh    WORD    type of bindery object (big-endian)
0Fh    WORD    type of comment (big-endian)
               8000h-FFFFh reserved for experimental use
11h    BYTE    length of object's name
12h  N BYTEs   object name
       BYTE    length of comment
     N BYTEs   comment

Format of reply buffer:
Offset  Size    Description
00h    WORD    0000h (no data returned)
----------21E3--SF98-------------------------
INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT HOLD
       AH = E3h subfn 98h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C0h no account privileges
           C1h no account balance
           C2h credit limit exceeded
           C3h too many holds on account
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=96h,AH=E3h/SF=97h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 37h)
02h    BYTE    98h (subfunction "Submit Account Hold")
03h    DWORD   amount of account balance to reserve (big-endian)
07h    WORD    type of bindery object
09h    BYTE    length of object's name
0Ah  N BYTEs   object name

Format of reply buffer:
Offset  Size    Description
00h    WORD    0000h (no data returned)
----------21E3--SF99-------------------------
INT 21 - Novell NetWare - ACCOUNTING SERVICES - SUBMIT ACCOUNT NOTE
       AH = E3h subfn 99h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C0h no account privileges
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=96h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 137h)
02h    BYTE    99h (subfunction "Submit Account Note")
03h    WORD    type of service (big-endian)
05h    WORD    type of bindery object (big-endian)
07h    WORD    type of comment (big-endian)
               8000h-FFFFh reserved for experimental use
09h    BYTE    length of object's name
0Ah  N BYTEs   object name
       BYTE    length of comment
     N BYTEs   comment

Format of reply buffer:
Offset  Size    Description
00h    WORD    0000h (no data returned)
----------21E3--SFC8-------------------------
INT 21 - Novell NetWare - FILE SERVER - CHECK CONSOLE PRIVILEGES
       AH = E3h subfn C8h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Desc:   determine whether the caller is a console operator
Notes:  this function is supported by Advanced NetWare 2.1+
       NetWare determines console privileges by checking the file server's
         OPERATOR property for the caller's object ID
SeeAlso: AH=E3h/SF=C9h,AH=E3h/SF=D1h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    C8h (subfunction "Check Console Privileges")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFC9-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER DESCRIPTION STRINGS
       AH = E3h subfn C9h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must be attached to the file server
SeeAlso: AH=E3h/SF=11h,AH=E3h/SF=CDh,AH=E3h/SF=E8h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    C9h (subfunction "Get File Server Description Strings")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0200h (size of following results buffer)
02h    var     ASCIZ name of company distributing this copy of NetWare
       var     ASCIZ version and revision
     9 BYTEs   ASCIZ revision date (mm/dd/yy)
       var     ASCIZ copyright notice
----------21E3--SFCA-------------------------
INT 21 - Novell NetWare - FILE SERVER - SET FILE SERVER DATE AND TIME
       AH = E3h subfn CAh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=2Bh,AH=2Dh,AH=E3h/SF=C8h,AH=E7h

Format of request buffer:
Offset  Size    Description
00h    WORD    0007h (length of following data)
02h    BYTE    CAh (subfunction "Set File Server Date And Time")
03h    BYTE    year (00-79 = 2000-2079, 80-99 = 1980-1999)
04h    BYTE    month (1-12)
05h    BYTE    day (1-31)
06h    BYTE    hour (0-23)
07h    BYTE    minute
08h    BYTR    second

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFCB-------------------------
INT 21 - Novell NetWare - FILE SERVER - DISABLE FILE SERVER LOGIN
       AH = E3h subfn CBh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CCh,AH=E3h/SF=D3h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    CBh (subfunction "Disable File Server Login")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFCC-------------------------
INT 21 - Novell NetWare - FILE SERVER - ENABLE FILE SERVER LOGIN
       AH = E3h subfn CCh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    CCh (subfunction "Enable File Server Login")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFCD-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER LOGIN STATUS
       AH = E3h subfn CDh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh,AH=E3h/SF=CCh

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    CDh (subfunction "Get File Server Login Status")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0001h (size of following results buffer)
02h    BYTE    login state (00h disabled, 01h enabled)
----------21E3--SFCE-------------------------
INT 21 - Novell NetWare - FILE SERVICES - PURGE ALL ERASED FILES
       AH = E3h subfn CEh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
       all files marked for deletion on the file server are purged, regardless
         of which workstation actually erased them
       the calling workstation must have console operator privileges
SeeAlso: AH=13h,AH=E2h/SF=10h,AH=E3h/SF=C8h,AX=F244h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    CEh (subfunction "Purge All Erased Files")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFCF-------------------------
INT 21 - Novell NetWare - FILE SERVER - DISABLE TRANSACTION TRACKING
       AH = E3h subfn CFh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D0h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    CFh (subfunction "Disable Transaction Tracking")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFD0-------------------------
INT 21 - Novell NetWare - FILE SERVER - ENABLE TRANSACTION TRACKING
       AH = E3h subfn D0h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Desc:   restart transaction tracking after being stopped either explicitly by
         AH=E3h/SF=CFh or automatically due to a full transaction volume
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CFh

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    D0h (subfunction "Enable Transaction Tracking")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFD1-------------------------
INT 21 - Novell NetWare - FILE SERVER - SEND CONSOLE BROADCAST
       AH = E3h subfn D1h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
       the broadcast message will not be received by workstations which have
         disabled broadcasts with AH=E1h/SF=02h
SeeAlso: AH=E1h/SF=02h,AH=E1h/SF=09h,AH=E3h/SF=C8h,AH=E3h/SF=D3h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max A2h)
02h    BYTE    D1h (subfunction "Send Console Broadcast")
03h    BYTE    number of connections to receive message
               00h = all, else specific list below
04h  N BYTEs   connection list
       BYTE    length of message (max 3Ch)
     N BYTEs   message

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFD2-------------------------
INT 21 - Novell NetWare - FILE SERVER - CLEAR CONNECTION NUMBER
       AH = E3h subfn D2h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Desc:   close the open files and release all file locks for a connection,
         abort transactions if a TTS file server, and detach from the file
         server
Notes:  this function is supported by Advanced NetWare 2.1+
       the caller must have SUPERVISOR privileges
SeeAlso: AH=E3h/SF=C9h,AH=E3h/SF=D1h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    D2h (subfunction "Clear Connection Number")
03h    BYTE    connection number

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFD3-------------------------
INT 21 - Novell NetWare - FILE SERVER - DOWN FILE SERVER
       AH = E3h subfn D3h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
           FFh files open
Desc:   take down the file server
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have SUPERVISOR privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CBh,AH=E3h/SF=CFh,AH=E3h/SF=D1h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    D3h (subfunction "Down File Server")
03h    BYTE    flag: force down even if files open if nonzero

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0000h (no results returned)
----------21E3--SFD4-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SYSTEM STATISTICS
       AH = E3h subfn D4h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=C8h,AH=E3h/SF=D9h,AH=E3h/SF=E7h,AH=E3h/SF=E8h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    D4h (subfunction "Get File System Statistics")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0028h (size of following results buffer)
02h    DWORD   clock ticks since system started
06h    WORD    maximum open files set by configuration
08h    WORD    maximum files open concurrently
0Ah    WORD    current number of open files
0Ch    DWORD   total files opened
10h    DWORD   total file read requests
14h    DWORD   total file write requests
18h    WORD    current changed FATs
1Ah    WORD    total changed FATs
1Ch    WORD    number of FAT write errors
1Eh    WORD    number of fatal FAT write errors
20h    WORD    number of FAT scan errors
22h    WORD    maximum concurrently-indexed files
24h    WORD    current number of indexed files
26h    WORD    number of attached indexed files
28h    WORD    number of indexed files available
Note:   all fields except the first are big-endian
----------21E3--SFD5-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET TRANSACTION TRACKING STATISTICS
       AH = E3h subfn D5h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=CFh,AH=E3h/SF=D0h,AH=E3h/SF=E8h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    D5h (subfunction "TTS Get Statistics")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) length of following results buffer (max 1BCh)
02h    DWORD   clock ticks since system started (big-endian)
06h    BYTE    transaction tracking supported if nonzero
               (all following fields are invalid if zero)
07h    BYTE    transaction tracking enabled
08h    WORD    transaction volume number (big-endian)
0Ah    WORD    maximum simultaneous transactions configured (big-endian)
0Ch    WORD    maximum simultaneous transactions since startup (big-endian)
0Eh    WORD    current transactions in progress (big-endian)
10h    DWORD   total transactions performed (big-endian)
14h    DWORD   total write transactions (big-endian)
18h    DWORD   total transactions backed out (big-endian)
1Ch    WORD    number of unfilled backout requests (big-endian)
1Eh    WORD    disk blocks used for transaction tracking (big-endian)
20h    DWORD   blocks allocated for tracked-file FATs (big-endian)
24h    DWORD   number of file size changes during a transaction (big-endian)
28h    DWORD   number of file truncations during a transaction (big-endian)
2Ch    BYTE    number of records following
2Dh    Active Transaction Records [array]
       Offset  Size    Description
        00h    BYTE    logical connection number
        01h    BYTE    task number
----------21E3--SFD6-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET DISK CACHE STATISTICS
       AH = E3h subfn D6h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D5h,AH=E3h/SF=D8h,AH=E3h/SF=D9h,AH=E3h/SF=E6h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    D6h (subfunction "Get Disk Cache Statistics")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 004Eh (length of following results buffer)
02h    DWORD   clock ticks since system started (big-endian)
06h    WORD    number of cache buffers (big-endian)
08h    WORD    size of cache buffer in bytes (big-endian)
0Ah    WORD    number of dirty cache buffers (big-endian)
0Ch    DWORD   number of cache read requests (big-endian)
10h    DWORD   number of cache write requests (big-endian)
14h    DWORD   number of cache hits (big-endian)
18h    DWORD   number of cache misses (big-endian)
1Ch    DWORD   number of physical read requests (big-endian)
20h    DWORD   number of physical write requests (big-endian)
24h    WORD    number of physical read errors (big-endian)
26h    WORD    number of physical write errors (big-endian)
28h    DWORD   cache get requests (big-endian)
2Ch    DWORD   cache full write requests (big-endian)
30h    DWORD   cache partial write requests (big-endian)
34h    DWORD   background dirty writes (big-endian)
38h    DWORD   background aged writes (big-endian)
3Ch    DWORD   total cache writes (big-endian)
40h    DWORD   number of cache allocations (big-endian)
44h    WORD    thrashing count (big-endian)
46h    WORD    number of times LRU block was dirty (big-endian)
48h    WORD    number of reads on cache blocks not yet filled by writes
               (big-endian)
4Ah    WORD    number of times a fragmented write occurred (big-endian)
4Ch    WORD    number of cache hits on unavailable block (big-endian)
4Eh    WORD    number of times a cache block was scrapped (big-endian)
----------21E3--SFD7-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET DRIVE MAPPING TABLE
       AH = E3h subfn D7h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D6h,AH=E3h/SF=D9h,AH=E3h/SF=E6h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    D7h (subfunction "Get Drive Mapping Table")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 00ECh (length of following results buffer)
02h    DWORD   clock tick elapsed since system started (big-endian)
06h    BYTE    fault tolerance (SFT) level
07h    BYTE    number of logical drives attached to server
08h    BYTE    number of physical drives attached to server
09h  5 BYTEs   disk channel types (00h none, 01h XT, 02h AT, 03h SCSI,
               04h disk coprocessor drive, 32h-FFh value-added drive types)
0Eh    WORD    number of outstanding controller commands (big-endian)
10h 32 BYTEs   drive mapping table (FFh = no such drive)
30h 32 BYTEs   drive mirror table (secondary physical drive, FFh = none)
50h 32 BYTEs   dead mirror table (last drive mapped to, FFh if never mirrored)
70h    BYTE    physical drive being remirrored (FFh = none)
71h    BYTE    reserved
72h    DWORD   remirrored block (big-endian)
76h 60 BYTEs   SFT error table (internal error counters)
----------21E3--SFD8-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL DISK STATISTICS
       AH = E3h subfn D8h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D9h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    D8h (subfunction "Get Physical Disk Statistics")
03h    BYTE    physical disk number

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 005Dh (size of following results record)
02h    DWORD   clock ticks since system started (big-endian)
06h    BYTE    physical disk channel
07h    BYTE    flag: drive removable if nonzero
08h    BYTE    physical drive type
09h    BYTE    drive number within controller
0Ah    BYTE    controller number
0Bh    BYTE    controller type
0Ch    DWORD   size of drive in 4K disk blocks (big-endian)
10h    WORD    number of cylinders on drive (big-endian)
12h    BYTE    number of heads
13h    BYTE    number of sectors per track
14h 64 BYTEs   ASCIZ drive make and model
54h    WORD    number of I/O errors (big-endian)
56h    DWORD   start of Hot Fix table (big-endian)
5Ah    WORD    size of Hot Fix table (big-endian)
5Ch    WORD    number of Hot Fix blocks available (big-endian)
5Eh    BYTE    flag: Hot Fix disabled if nonzero
----------21E3--SFD9-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET DISK CHANNEL STATISTICS
       AH = E3h subfn D9h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=D8h,AH=E3h/SF=E6h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    D9h (subfunction "Get Disk Channel Statistics")
03h    BYTE    channel number

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 00A8h (size of following results record)
02h    DWORD   clock ticks since system started (big-endian)
06h    WORD    channel run state (big-endian)
               00h running
               01h being stopped
               02h stopped
               03h nonfunctional
08h    WORD    channel synchronization state (big-endian)
               00h not in use
               02h used by NetWare, no other requests
               04h used by NetWare, other requests
               06h in use, not needed by NetWare
               08h in use, needed by NetWare
               0Ah channel released, NetWare should use it
0Ah    BYTE    driver type
0Bh    BYTE    major version of driver
0Ch    BYTE    minor version of driver
0Dh 65 BYTEs   ASCIZ driver description
4Eh    WORD    first I/O address used (big-endian)
50h    WORD    length of first I/O address (big-endian)
52h    WORD    second I/O address used (big-endian)
54h    WORD    length of second I/O address (big-endian)
56h  3 BYTEs   first shared memory address
59h  2 BYTEs   length of first shared memory address
5Bh  3 BYTEs   second shared memory address
5Eh  2 BYTEs   length of second shared memory address
60h    BYTE    first interrupt number in-use flag
61h    BYTE    first interrupt number used
62h    BYTE    second interrupt number in-use flag
63h    BYTE    second interrupt number used
64h    BYTE    first DMA channel in-use flag
65h    BYTE    first DMA channel used
66h    BYTE    second DMA channel in-use flag
67h    BYTE    second DMA channel used
68h    BYTE    flags
69h    BYTE    reserved
6Ah 80 BYTEs   ASCIZ configuration description
----------21E3--SFDA-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S TASK INFORMATION
       AH = E3h subfn DAh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E1h,AH=E3h/SF=E5h

Format of request buffer:
Offset  Size    Description
00h    WORD    0003h (length of following data)
02h    BYTE    DAh (subfunction "Get Connection's Task Information")
03h    WORD    logical connection number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    BYTE    lock status of connection
               00h no locks
               01h waiting on physical record lock
               02h waiting on file lock
               03h waiting on logical record lock
               04h waiting on semaphore
03h    var     Lock Status Information (see below)
N      BYTE    number of records following
N+1    Active Task Information Records [array]
       Offset  Size    Description
        00h    BYTE    task number (01h-FFh)
        01h    BYTE    task state
                       01h in TTS explicit transaction
                       02h in TTS implicit transaction
                       04h shared fileset lock active

Format of Lock Status Information:
Offset  Size    Description
---lock status 00h---
no fields
---lock status 01h---
00h    BYTE    number of waiting task
01h    DWORD   start address
05h    DWORD   end address
09h    BYTE    volume number
0Ah    WORD    directory entry number
0Ch 14 BYTEs   ASCIZ filename
---lock status 02h---
00h    BYTE    number of waiting task
01h    BYTE    volume number
02h    WORD    directory entry number
04h 14 BYTEs   ASCIZ filename
---lock status 03h---
00h    BYTE    number of waiting task
01h    BYTE    length of record name
02h  N BYTEs   ASCIZ record name
---lock status 04h---
00h    BYTE    number of waiting task
01h    BYTE    length of semaphore's name
02h  N BYTEs   ASCIZ semaphore name
----------21E3--SFDB-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S OPEN FILES
       AH = E3h subfn DBh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E2h/SF=1Ah,AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DCh,AH=E3h/SF=DFh
SeeAlso: AH=E3h/SF=E1h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    DBh (subfunction "Get Connection's Open Files")
03h    WORD    logical connection number (big-endian)
05h    WORD    last record seen (big-endian)
               0000h on first call

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    next request record (place in "last record" field on next call)
               0000h if no more records
04h    BYTE    number of records following
05h    File Information Records [array]
       Offset  Size    Description
        00h    BYTE    task number
        01h    BYTE    lock flags (see below)
        02h    BYTE    access flags (see below)
        03h    BYTE    lock type
                       00h no lock
                       FEh file lock
                       FFh locked by Begin Share File Set
        04h    BYTE    volume number (00h-1Fh)
        05h    WORD    directory entry (big-endian)
        07h 14 BYTEs   ASCIZ filename

Bitmask of lock flags:
bit 0: file is locked
bit 1: file opened Shareable
bit 2: logged
bit 3: file opened Normal
bit 6: TTS holding lock
bit 7: Transaction Flag set on file

Bitmask of access flags:
bit 0: file open for reading by calling station
bit 1: file open for writing by calling station
bit 2: deny reads by other stations
bit 3: deny writes by other stations
bit 4: file detached
bit 5: TTS Holding Detach
bit 6: TTS Holding Open
----------21E3--SFDC-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET CONNECTIONS USING A FILE
       AH = E3h subfn DCh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E1h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 104h)
02h    BYTE    DCh (subfunction "Get Connections Using a File")
03h    WORD    last record (big-endian)
               0000h on first call
05h    BYTE    directory handle
06h    BYTE    length of file path
07h  N BYTEs   ASCIZ file path

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    count of tasks which have opened or logged file (big-endian)
04h    WORD    count of tasks which have opened file (big-endian)
06h    WORD    count of opens for reading (big-endian)
08h    WORD    count of opens for writing (big-endian)
0Ah    WORD    deny read count (big-endian)
0Ch    WORD    deny write count (big-endian)
0Eh    WORD    next request record (place in "last record" field on next call)
               0000h if no more records
10h    BYTE    locked flag
               00h not locked exclusively
               else locked exclusively
11h    BYTE    number of records following
12h    File Usage Information Records [array]
       Offset  Size    Description
        00h    WORD    logical connection number (big-endian)
        02h    BYTE    task number
        03h    BYTE    lock flags (see AH=E3h/SF=DBh)
        04h    BYTE    access flags (see AH=E3h/SF=DBh)
        05h    BYTE    lock type
                       00h no lock
                       FEh file lock
                       FFh locked by Begin Share File Set
----------21E3--SFDD-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL RECORD LOCKS BY CONN&FILE
       AH = E3h subfn DDh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
           FFh file not open
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DEh,AH=E3h/SF=DFh

Format of request buffer:
Offset  Size    Description
00h    WORD    0016h (length of following data)
02h    BYTE    DDh (subfunction "Get Physical Record Locks by Connection and
                       File")
03h    WORD    logical connection number (big-endian)
05h    WORD    last record seen (big-endian)
               0000h on first call
07h    BYTE    volume number (00h-1Fh)
08h    WORD    directory handle (big-endian)
0Ah 14 BYTEs   ASCIZ filename

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    next request record (place in "last record" on next call)
               0000h if no more records
04h    BYTE    number of physical record locks
05h    BYTE    number of records following
06h    Physical Record Lock Info [array]
       Offset  Size    Description
        00h    BYTE    task number
        01h    BYTE    lock status (see below)
        02h    DWORD   starting offset of record in file (big-endian)
        06h    DWORD   ending offset of record in file (big-endian)

Bitmask of lock status:
bit 0: exclusive lock
bit 1: shareable lock
bit 2: logged
bit 6: lock held by TTS
----------21E3--SFDE-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET PHYSICAL RECORD LOCKS BY FILE
       AH = E3h subfn DEh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
           FFh file not open
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=DFh

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 104h)
02h    BYTE    DEh (subfunction "Get Physical Record Locks by File")
03h    WORD    last record seen (big-endian)
               0000h on first call
05h    BYTE    directory handle
06h    BYTE    length of filename
07h  N BYTEs   ASCIZ filename

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    next request record (place in "last record" on next call)
               0000h if no more records
04h    BYTE    number of physical record locks
05h    BYTE    number of records following
06h    Physical Record Lock Info [array]
       Offset  Size    Description
        00h    WORD    number of tasks logging record (big-endian)
        02h    WORD    number of tasks with shareable lock (big-endian)
        04h    DWORD   starting offset of record in file (big-endian)
        08h    DWORD   ending offset of record in file (big-endian)
        0Ch    WORD    logical connection number (big-endian)
        0Eh    BYTE    task number
        0Fh    BYTE    lock type
                       00h none
                       FEh file lock
                       FFh Begin Share File Set lock
----------21E3--SFDF-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET LOGICAL RECORDS BY CONNECTION
       AH = E3h subfn DFh
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=E0h,AH=E3h/SF=E2h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    DFh (subfunction "Get Logical Records By Connection")
03h    WORD    logical connection number (big-endian)
05h    WORD    last record seen (big-endian)
               0000h on first call

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    next request record (place in "last record" field on next call)
               0000h if no more locked records
09h    BYTE    number of records following
0Ah    Logical Lock Information Records [list]
       Offset  Size    Description
        00h    BYTE    task number
        01h    BYTE    lock status (see AH=E3h/SF=DDh)
        02h    BYTE    length of logical lock's name
        03h  N BYTEs   logical lock's name
----------21E3--SFE0-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET LOGICAL RECORD INFORMATION
       AH = E3h subfn E0h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DDh,AH=E3h/SF=DFh,AH=E3h/SF=E2h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 67h)
02h    BYTE    E0h (subfunction "Get Logical Record Information")
03h    WORD    last record seen (big-endian)
               0000h on first call
05h    BYTE    length of logical record's name
06h  N BYTEs   logical record's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 200h)
02h    WORD    number of logical connections logging the record (big-endian)
04h    WORD    number of logical connections with shareable lock (big-endian)
06h    WORD    next request record (place in "last record" field on next call)
08h    BYTE    locked exclusively if nonzero
09h    BYTE    number of records following
0Ah    Task Information Records [array]
       Offset  Size    Description
        00h    WORD    logical connection number (big-endian)
        02h    BYTE    task number
        03h    BYTE    lock status (see AH=E3h/SF=DFh)
----------21E3--SFE1-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S SEMAPHORES
       AH = E3h subfn E1h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DBh,AH=E3h/SF=DFh,AH=E3h/SF=E2h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    E1h (subfunction "Get Connection's Semaphores")
03h    WORD    logical connection number (big-endian)
05h    WORD    last record seen (big-endian)
               0000h on first call

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results record (max 1FEh)
02h    WORD    next request record (place in "last record" field on next call)
04h    BYTE    number of records following
05h    Semaphore Information Records [array]
       Offset  Size    Description
        00h    WORD    open count (big-endian)
        02h    BYTE    semaphore value (-128 to 127)
        03h    BYTE    task number
        04h    BYTE    lock type
        05h    BYTE    length of semaphore's name
        06h  N BYTEs   semaphore's name
            14 BYTEs   filename
----------21E3--SFE2-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET SEMAPHORE INFORMATION
       AH = E3h subfn E2h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E1h

Format of request buffer:
Offset  Size    Description
00h    WORD    length of following data (max 83h)
02h    BYTE    E2h (subfunction "Get LAN Driver's Configuration Information")
03h    WORD    last record seen (big-endian)
               0000h on first call
05h    BYTE    length of semaphore's name (01h-7Fh)
06h  N BYTEs   semaphore's name

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 1FEh)
02h    WORD    next request record (place in "last record" on next call)
               0000h if no more
04h    WORD    number of logical connections opening semaphore (big-endian)
06h    BYTE    semaphore value (-127 to 128)
07h    BYTE    number of records following
08h    Semaphore Information [array]
       Offset  Size    Description
        00h    WORD    logical connection number (big-endian)
        02h    BYTE    task number
----------21E3--SFE3-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET LAN DRIVER'S CONFIGURATION INFO
       AH = E3h subfn E3h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       the calling workstation must have console operator privileges
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E7h,AH=E3h/SF=E8h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    E3h (subfunction "Get LAN Driver's Configuration Information")
03h    BYTE    LAN board (00h-03h)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 00ACh (size of following results buffer)
02h  4 BYTEs   network number
06h  6 BYTEs   node number
0Ch    BYTE    LAN driver installed (00h no--remaining fields invalid)
0Dh    BYTE    option number selected at configuration time
0Eh 160 BYTEs  configuration text
               ASCIZ hardware type
               ASCIZ hardware settings
----------21E3--SFE5-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET CONNECTION'S USAGE STATISTICS
       AH = E3h subfn E5h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       one must have console operator privileges to get statistics for logical
         connections other than one's own
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=DAh,AH=E3h/SF=DBh,AH=E3h/SF=E1h

Format of request buffer:
Offset  Size    Description
00h    WORD    0003h (length of following data)
02h    BYTE    E5h (subfunction "Get Connection's Usage Statistics")
03h    WORD    logical connection number (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0014h (size of following results record)
02h    DWORD   clock ticks since server started (big-endian)
06h  6 BYTEs   bytes read
0Ch  6 BYTEs   bytes written
12h    DWORD   total request packets (big-endian)
----------21E3--SFE6-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET BINDERY OBJECT DISK SPACE LEFT
       AH = E3h subfn E6h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Notes:  this function is supported by Advanced NetWare 2.1+
       one must have console operator privileges to get the free space for
         other bindery objects
SeeAlso: AH=E3h/SF=C8h,AH=E3h/SF=E8h,AH=E3h/SF=E9h

Format of request buffer:
Offset  Size    Description
00h    WORD    0005h (length of following data)
02h    BYTE    E6h (subfunction "Get Bindery Object Disk Space Left")
03h    DWORD   object ID (big-endian)

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 000Fh (size of following results buffer)
02h    DWORD   clock ticks elapsed since server started (big-endian)
06h    DWORD   object ID (big-endian)
0Ah    DWORD   4K disk blocks available to user (big-endian)
0Eh    BYTE    restrictions
               00h enforced
               FFh not enforced
----------21E3--SFE7-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER LAN I/O STATISTICS
       AH = E3h subfn E7h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=11h,AH=E3h/SF=D3h,AH=E3h/SF=E8h,AH=E7h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    E7h (subfunction "Get File Server LAN I/O Statistics")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0042h (size of following results buffer)
02h    DWORD   clock ticks since system started
06h    WORD    total routing buffers
08h    WORD    maximum routing buffers used
0Ah    WORD    current routing buffers used
0Ch    DWORD   total file service packets
10h    WORD    number of file service packets buffered
12h    WORD    number of invalid connection packets
14h    WORD    packets with bad logical connection numbers
16h    WORD    number of packets received during processing
18h    WORD    number of requests reprocessed
1Ah    WORD    packets with bad sequence numbers
1Ch    WORD    number of duplicate replies sent
1Eh    WORD    number of acknowledgements sent
20h    WORD    number of packets with bad request types
22h    WORD    requests to attach to ws for which a request is being processed
24h    WORD    requests to attach from ws which is already attaching
26h    WORD    number of forged detach requests
28h    WORD    detach requests with bad connection number
2Ah    WORD    requests to detach from ws for which requests pending
2Ch    WORD    number of cancelled replies
2Eh    WORD    packets discarded due to excessive hop count
30h    WORD    packets discarded due to unknown net
32h    WORD    incoming packets discarded for lack of DGroup buffer
34h    WORD    outgoing packets discarded due to lack of buffer
36h    WORD    received packets destined for B,C, or D side drivers
38h    DWORD   number of NetBIOS packets propagated through net
3Ch    DWORD   total number of non-file-service packets
40h    DWORD   total number of routed packets
Note:   all fields except the first are big-endian
----------21E3--SFE8-------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER MISC INFORMATION
       AH = E3h subfn E8h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
           C6h no console rights
Note:   this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=E3h/SF=0Eh,AH=E3h/SF=11h,AH=E3h/SF=CDh,AH=E3h/SF=E7h

Format of request buffer:
Offset  Size    Description
00h    WORD    0001h (length of following data)
02h    BYTE    E8h (subfunction "Get File Server Misc Information")

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) size of following results buffer (max 0048h)
02h    DWORD   clock ticks since system started
06h    BYTE    CPU type
               00h Motorola 68000
               01h Intel 8086, 8088, or V20
               02h Intel 80286+
07h    BYTE    reserved
08h    BYTE    number of service processes in server
09h    BYTE    server utilization in percent
0Ah    WORD    maximum bindery objects set by configuration (big-endian)
               0000h = unlimited
0Ch    WORD    maximum number of bindery objects used (big-endian)
0Eh    WORD    current number of bindery objects in use (big-endian)
10h    WORD    total server memory in K (big-endian)
12h    WORD    wasted server memory in K (big-endian)
               normally 0000h
14h    WORD    number of records following (01h-03h)
16h    Dynamic Memory Information [array]
       Offset  Size    Description
        00h    DWORD   total dynamic space (big-endian)
        04h    DWORD   maximum dynamic space used (big-endian)
        08h    DWORD   current dynamic space usage (big-endian)
----------21E3--SFE9-------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFORMATION
       AH = E3h subfn E9h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (see below)
Return: AL = status
           00h successful
Notes:  this function is supported by Advanced NetWare 2.1+
SeeAlso: AH=DAh,AH=E2h/SF=15h

Format of request buffer:
Offset  Size    Description
00h    WORD    0002h (length of following data)
02h    BYTE    E9h (subfunction "Get Volume Information")
03h    BYTE    directory handle

Format of reply buffer:
Offset  Size    Description
00h    WORD    (call) 0028h (length of following results buffer)
02h    DWORD   elapsed system time (big-endian)
06h    BYTE    volume number
07h    BYTE    logical drive number
08h    WORD    sectors per block (big-endian)
0Ah    WORD    starting block (big-endian)
0Ch    WORD    total blocks on volume (big-endian)
0Eh    WORD    blocks available on volume (big-endian)
10h    WORD    total directory slots (big-endian)
12h    WORD    directory slots available (big-endian)
14h    WORD    maximum directory entries actually used (big-endian)
16h    BYTE    flag: volume hashed if nonzero
17h    BYTE    flag: volume cached if nonzero
18h    BYTE    flag: volume removable if nonzero
19h    BYTE    flag: volume mounted if nonzero
1Ah 16 BYTEs   NUL-padded volume name
----------21E4-------------------------------
INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
       AH = E4h
       CL = file attributes
           bit 0: read only
               1: hidden
               2: system
               7: shareable
       DX:DX -> FCB (see AH=0Fh)
Return: AL = error code
SeeAlso: AX=4301h
----------21E4-------------------------------
INT 21 - VIRUS - "Anarkia" - INSTALLATION CHECK
       AH = E4h
Return: AH = 04h if resident
SeeAlso: AH=E1h"VIRUS",AH=E7h"VIRUS"
----------21E400-----------------------------
INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
       AX = E400h
Return: AL = 00h if DoubleDOS not present
          = 01h if running in visible DoubleDOS partition
          = 02h if running in the invisible DoubleDOS partition
SeeAlso: AH=E5h"DoubleDOS",AX=F400h
----------21E400-----------------------------
INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
       AX = E400h
       ???
Return: ???
Note:   protected mode only???
----------21E402-----------------------------
INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
       AX = E402h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=E403h
----------21E403-----------------------------
INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
       AX = E403h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=E402h
----------21E5-------------------------------
INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
       AH = E5h
       DS:DX -> FCB (see AH=0Fh)
Return: AL = error code
----------21E5-------------------------------
INT 21 - DoubleDOS - OTHER PROGRAM STATUS
       AH = E5h
Return: AL = 00h no program in other partition
          = 01h program in other partition is running
          = 02h program in other partition is suspended
SeeAlso: AX=E400h"DoubleDOS",AH=F5h"DoubleDOS"
----------21E500-----------------------------
INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
       AX = E500h
       ???
Return: ???
SeeAlso: AX=E501h
----------21E501-----------------------------
INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
       AX = E501h
       ???
Return: ???
SeeAlso: AX=E500h
----------21E6-------------------------------
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
----------21E6-------------------------------
INT 21 P - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
       AH = E6h
       ???
Return: ???
SeeAlso: AH=E2h"OS/286"
----------21E7-------------------------------
INT 21 - Novell NetWare - FILE SERVER - GET FILE SERVER DATE AND TIME
       AH = E7h
       DS:DX -> date/time buffer (see below)
Return: AL = error code
           00h successful
           FFh unsuccessful
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
         Alloy NTNX, and Banyan VINES
SeeAlso: AH=2Ah,AH=2Ch,AH=E3h/SF=CAh

Format of date/time buffer:
Offset  Size    Description
00h    BYTE    year (80-99 = 1980-1999, 0-79 = 2000-2079)
01h    BYTE    month (1=Jan)
02h    BYTE    day
03h    BYTE    hours
04h    BYTE    minutes
05h    BYTE    seconds
06h    BYTE    day of week (0 = Sunday) (Novell and NTNX only)
----------21E7-------------------------------
INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
       AH = E7h
       ???
Return: ???
SeeAlso: AH=E8h"OS/286",AH=E9h"OS/286",AH=EAh"OS/286"
----------21E7-------------------------------
INT 21 - VIRUS - "Spyer"/"Kiev" - INSTALLATION CHECK
       AH = E7h
Return: AH = 78h if resident
SeeAlso: AH=E4h"VIRUS",AX=EC59h
----------21E8-------------------------------
INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE
       AH = E8h
       DL = mode
           00h no automatic re-open
           01h auto re-open
Return: AL = error code
----------21E8-------------------------------
INT 21 - OS/286, OS/386 - SEGMENT CREATION
       AH = E8h
       AL = type
           00h data segment
           01h data window/alias
           02h real segment
           03h real window/alias
           06h shareable segment
       ???
Return: ???
SeeAlso: AH=E7h"OS/286",AH=E9h"OS/286"
----------21E8-------------------------------
INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
       AH = E8h
       AL = 00h set flags for this program
          = 01h set flags for other program
       DX = keyboard control flags (bit set enables, cleared disables
           bit 0: menu
           bit 1: exchange
           bit 2: entire keyboard enable/disable
           bit 3: Ctrl-C
           bit 4: Ctrl-PrtSc
           bit 5: Alt/Erase
           bit 6: Ctrl-Break
           bit 7: Ctrl-NumLock
           bit 8: shift-PrtSc
           bit 9-13: undefined
           bit 14: cancel key (clear keyboard buffer)
           bit 15: suspend key
Return: DX = previous flags
Notes:  disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
         disabling any of the other keystrokes disables them completely
       identical to AH=F8h
SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E3h"DoubleDOS"
SeeAlso: AH=F8h"DoubleDOS"
----------21E9-------------------------------
INT 21 P - OS/286, OS/386 - CHANGE SEGMENTS
       AH = E9h
       AL = function
           01h change code segment parameters
           02h change data segment parameters
           05h adjust segment limit
           06h change segment base address
       ???
Return: ???
SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=EAh"OS/286",AH=EDh"OS/286"
SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h
----------21E9-------------------------------
INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
       AH = E9h
       AL = 00h visible program gets 70%, invisible gets 30% (default)
          = 01h visible program gets 50%, invisible gets 50%
          = 02h visible program gets 30%, invisible gets 70%
          = 03h Top program gets 70%, bottom program gets 30%
          = 04h Top program gets 30%, bottom program gets 70%
          = 05h get current priority
               Return: AL = priority setting
Note:   identical to AH=F9h
SeeAlso: AH=EAh"DoubleDOS",AH=EBh"DoubleDOS",AH=F9h"DoubleDOS"
----------21E900-----------------------------
INT 21 - Novell NetWare - DIRECTORY SERVICES - GET DIRECTORY HANDLE
       AX = E900h
       DX = drive number to check (0 = A:, ..., 25 = Z:, 26 ... 31)
Return: AL = directory handle
       AH = flags (drive not mapped if none set)
           bit 0: permanent handle
           bit 1: temporary handle
           bit 7: mapped to local drive
Note:   this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E2h/SF=00h,AH=E2h/SF=01h,AH=E2h/SF=0Ah
----------21E905-----------------------------
INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
       AX = E905h
       BL = drive number (0=default, 1=A:, ...)
       DS:DX -> ASCIZ path for fake root (may include server name or be empty)
Return: CF set on error
           AL = error code (03h,0Fh,11h) (see AH=59h)
       CF clear if successful
Note:   if drive is not currently mapped, a drive mapping will be created
SeeAlso: AX=E906h
----------21E906-----------------------------
INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
       AX = E906h
       BL = drive number (0=default, 1=A:, ...)
Note:   drive remains mapped
SeeAlso: AX=E905h
----------21E907-----------------------------
INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
       AX = E907h
       BL = drive number (0=default, 1=A:, ...)
Return: AL = number of directories below the fake root
           FFh if no fake root assigned
SeeAlso: AX=E905h
----------21E908BL00-------------------------
INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
       AX = E908h
       BL = 00h        don't return '.' or '..' during directory scans
          = nonzero    directory scans will return '.' or '..' entries
Return: BL = previous show-dots setting
----------21EA-------------------------------
INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION
       AH = EAh
       AL = return version environment string
           00h         don't return string
           nonzero     return string in 40-byte buffer pointed to by ES:DI
               Return: buffer filled with three null-terminated entries:
                       major operating system
                       version
                       hardware type
Return: AH = operating system (00h = MSDOS)
       AL = hardware type
           00h IBM PC
           01h Victor 9000
       BH = major shell version
       BL = minor shell version
       CH = (v3.01+) shell type
           00h conventional memory
           01h expanded memory
           02h extended memory
       CL = shell revision number
----------21EA-------------------------------
INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
       AH = EAh
Return: task switching turned off
SeeAlso: AH=E9h"DoubleDOS",AH=EBh"DoubleDOS",AH=FAh"DoubleDOS"
SeeAlso: INT FA"DoubleDOS"
----------21EA-------------------------------
INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
       AH = EAh
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=E9h"OS/286"
----------21EB-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - 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 = lock timeout in timer ticks (1/18 second)
                       0000h = don't wait if file already locked
Return: AL = error code
           00h successful
           96h no dynamic memory for file
           FEh timed out
           FFh failed
Desc:   add the location and size of the specified file to the log table and
         optionally lock the file
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=BCh"NetWare",AH=CAh,AH=D0h,AH=ECh"NetWare",AH=EDh"NetWare"
----------21EB-------------------------------
INT 21 - DoubleDOS - TURN ON TASK SWITCHING
       AH = EBh
Return: task switching turned on
SeeAlso: AH=E9h"DoubleDOS",AH=EAh"DoubleDOS",AH=FBh"DoubleDOS"
SeeAlso: INT FB"DoubleDOS"
----------21EB00-----------------------------
INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
       AX = EB00h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h
----------21EB02-----------------------------
INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
       AX = EB02h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB00h,AX=EB04h
----------21EB03-----------------------------
INT 21 - OS/386 VMM - FREE MAPPED PAGES
       AX = EB03h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB05h,INT 31/AX=0801h
----------21EB04-----------------------------
INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
       AX = EB04h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB00h,AX=EB02h
----------21EB05-----------------------------
INT 21 - OS/386 VMM - MAP PAGES
       AX = EB05h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB03h,INT 31/AX=0800h
----------21EB06-----------------------------
INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
       AX = EB06h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB07h,INT 31/AX=0600h
----------21EB07-----------------------------
INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
       AX = EB07h
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AX=EB06h,INT 31/AX=0601h
----------21EC-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE
       AH = ECh
       DS:DX -> ASCIZ filename
Return: AL = status
           00h successful
           FFh file not found
Desc:   unlock the specified file but retain it in the log table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=CDh,AH=EBh"NetWare",AH=EDh"NetWare"
----------21EC-------------------------------
INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
       AH = ECh
Return: ES = segment of virtual screen
Notes:  screen address can change if task-switching is on!!
       identical to AH=FCh
SeeAlso: INT 10/AH=FEh,AH=FCh"DoubleDOS",INT FC"DoubleDOS"
----------21EC-------------------------------
INT 21 - OS/286, OS/386 - BLOCK TRANSFER
       AH = ECh
       ???
Return: ???
----------21EC59-----------------------------
INT 21 - VIRUS - "Terror" - INSTALLATION CHECK
       AX = EC59h
Return: BP = EC59h if resident
SeeAlso: AH=E7h"VIRUS",AH=EEh"VIRUS"
----------21ED-------------------------------
INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE
       AH = EDh
       DS:DX -> ASCIZ filename
Return: AL = status
           00h successful
           FFh no files found
Desc:   unlock the file and remove it from the log table
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=CBh"NetWare",AH=CEh,AH=CFh,AH=EBh"NetWare",AH=ECh"NetWare"
----------21ED-------------------------------
INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
       AH = EDh
       ???
Return: ???
Note:   protected mode only???
SeeAlso: AH=E9h"OS/286"
----------21EE-------------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - GET PHYSICAL STATION ADDRESS
       AH = EEh
Return: CX:BX:AX = six-byte physical address
Note:   this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
         Alloy NTNX
SeeAlso: AH=E3h/SF=13h
----------21EE-------------------------------
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
SeeAlso: AH=FEh"DoubleDOS",INT FE"DoubleDOS"
----------21EE-------------------------------
INT 21 - VIRUS - "Jerusalem-G", "Pregnant" - INSTALLATION CHECK
       AH = EEh
Return: AX = 0300h if "Jerusalem-G" resident
       AL = 05h if "Pregnant" resident
SeeAlso: AH=DDh"VIRUS",AX=EC59h,AH=F0h"VIRUS"
----------21EF00-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET DRIVE HANDLE TABLE
       AX = EF00h
Return: ES:SI -> network shell's 32-byte drive handle table
Notes:  this function is supported by Advanced NetWare 1.0+
       each byte in the drive handle table contains the directory handle for
         the corresponding drive, or 00h if not mapped to a directory
SeeAlso: AX=EF01h,AX=EF02h,AX=EF03h,AX=EF04h
----------21EF01-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET DRIVE FLAG TABLE
       AX = EF01h
Return: ES:SI -> network shell's 32-byte drive flag table (see below)
Notes:  this function is supported by Advanced NetWare 1.0+
       each byte in the drive flag table corresponds to a drive
SeeAlso: AX=EF00h,AX=EF02h,AX=EF03h

Values in drive flag table:
00h    drive is not mapped
01h    permanent network drive
02h    temporary network drive
80h    mapped to local drive
81h    local drive used as permanent network drive
82h    local drive used as temporary network drive
----------21EF02-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET DRIVE CONNECTION ID
       AX = EF02h
Return: ES:SI -> network shell's 32-byte drive conection ID table
Notes:  this function is supported by Advanced NetWare 1.0+
       each byte in the connection ID table corresponds to a drive and
         contains either the connection ID (1-8) of the server for that drive
         or 00h if the drive is not mapped to a file server
SeeAlso: AX=EF01h,AX=EF03h,AX=F002h
----------21EF03-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET CONNECTION ID
       AX = EF03h
Return: ES:SI -> network shell's connection ID table (see below)
Note:   this function is supported by Advanced NetWare 1.0+
SeeAlso: AX=EF00h,AX=EF02h,AX=EF04h,AX=F002h

Format of connection ID table [one entry of eight-element array]:
Offset  Size    Description
00h    BYTE    in use flag
               E0h AES temporary
               F8h IPX in critical section
               FAh processing
               FBh holding
               FCh AES waiting
               FDh waiting
               FEh receiving
               FFh sending
01h    BYTE    order number assigned to server (1-8)
02h    DWORD   file server's network address (big-endian)
06h  6 BYTEs   file server's node address (big-endian)
0Ch    WORD    socket number (big-endian)
0Eh    WORD    base receive timeout in clock ticks (big-endian)
10h  6 BYTEs   preferred routing node (big-endian)
16h    BYTE    packet sequence number
17h    BYTE    connection number (FFh = no connection)
18h    BYTE    connection status (00h if active)
19h    WORD    maximum receive timeout in clock ticks (big-endian)
1Bh  5 BYTEs   reserved
----------21EF04-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET FILE SERVER NAME
       AX = EF04h
Return: ES:SI -> network shell's file server name table (see below)
Notes:  this function is supported by Advanced NetWare 1.0+
       the name table consists of eight 48-byte entries, each consisting of
         an ASCIZ server name for the corresponding entry in the connection
         ID table
SeeAlso: AX=EF03h
----------21F0-------------------------------
INT 21 - DoubleDOS - MENU CONTROL
       AH = F0h
       AL = subfunction
           01h exchange tasks
           73h resume invisible job if suspended
           74h kill other job
           75h suspend invisible job
Note:   identical to AH=E0h
SeeAlso: AH=E0h"DoubleDOS"
----------21F0-------------------------------
INT 21 - VIRUS - "Frere Jacques" - INSTALLATION CHECK
       AH = F0h
Return: AX = 0300h if resident
SeeAlso: AH=EEh"VIRUS",AH=F1h"VIRUS"
----------21F000-----------------------------
INT 21 - Novell NetWare - WORKSTATION - SET PREFERRED CONNECTION ID
       AX = F000h
       DL = connection ID of prefered file server (1-8) or 00h for none
Notes:  this function is supported by Advanced NetWare 1.0+
       the preferred connection ID is set to 00h by the shell on EOJ
SeeAlso: AH=D6h,AX=EF03h,AX=F001h,AX=F002h,AX=F005h
----------21F001-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET PREFERRED CONNECTION ID
       AX = F001h
Return: AL = connection ID of preferred file server (1-8), 00h if not set
Notes:  this function is supported by Advanced NetWare 1.0+
       the preferred connection ID is set to 00h by the shell on EOJ
SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F005h
----------21F002-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET DEFAULT CONNECTION ID
       AX = F002h
Return: AL = connection ID of current default file server (1-8) (see AX=EF03h)
Note:   this function is supported by Advanced NetWare 1.0+
SeeAlso: AX=EF03h,AX=F000h,AX=F004h
----------21F003-----------------------------
INT 21 - Novell NetWare - PRINT SERVICES - GET LPT CAPTURE STATUS
       AX = F003h
Return: AH = status
           00h not active
           FFh active
               AL = connection ID (01h-08h)
Note:   this function is supported by Advanced NetWare 1.0+
SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h,AH=DFh/DL=04h
----------21F004-----------------------------
INT 21 - Novell NetWare - WORKSTATION - SET PRIMARY CONNECTION ID
       AX = F004h
       DL = connection ID of primary file server (1-8) or 00h for none
Note:   this function is supported by Advanced NetWare 2.0+
SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F005h
----------21F005-----------------------------
INT 21 - Novell NetWare - WORKSTATION - GET PRIMARY CONNECTION ID
       AX = F005h
Return: AL = connection ID of primary file server (1-8), 00h if not set
Notes:  this function is supported by Advanced NetWare 2.0+
       by default, the primary file server is the one from which the login
         script executed; it is set to 00h if the workstation is not logged in
         and when it detaches from its primary file server
SeeAlso: AH=D6h,AX=EF03h,AX=F000h,AX=F002h,AX=F004h
----------21F1-------------------------------
INT 21 - Novell NetWare - CONNECTION SERVICES - FILE SERVER CONNECTION
       AH = F1h
       AL = subfunction
           00h attach to file server
               DL = preferred file server (01h-08h)
           01h detach from file server
               DL = connection ID
           02h logout from file server
               DL = connection ID
Return: AL = status
           00h successful
           F8h already attached to server
           F9h connection table full
           FAh no more server slots
           FCh unknown file server
           FEh server bindery locked
           FFh no response from server, or connection does not exist
Note:   these functions are supported by Advanced NetWare 1.0+
SeeAlso: AH=D7h"NetWare",AH=E3h/SF=14h
----------21F1-------------------------------
INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
       AH = F1h
SeeAlso: AH=E1h"DoubleDOS",AH=F2h"DoubleDOS",AH=F3h"DoubleDOS"
SeeAlso: AH=F8h"DoubleDOS"
----------21F1-------------------------------
INT 21 - VIRUS - "F1-337" - ???
       AH = F1h
       ???
Return: ???
SeeAlso: AH=F0h"VIRUS",AX=F2AAh
----------21F2-------------------------------
INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR
       AH = F2h
       AL = function
           15h broadcast services (see AH=E1h"NetWare")
           17h connection control (see AH=E3h"NetWare")
       DS:SI -> request buffer
       ES:DI -> reply buffer
Return: AL = status
Notes:  this is a multiplexor to access other net interface functions which
         were accessed via a separate AH function in older versions
       the function number in AL is added to CCh to get the old function
         number which is desired
SeeAlso: AX=F244h
----------21F2-------------------------------
INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
       AH = F2h
       AL = character
Return: AL = 00h successful
            01h buffer full (128 characters)
SeeAlso: AH=E2h"DoubleDOS",AH=F1h"DoubleDOS",AH=F3h"DoubleDOS"
SeeAlso: AH=F8h"DoubleDOS"
----------21F244-----------------------------
INT 21 - Novell NetWare - FILE SERVICES - ERASE FILES
       AX = F244h
       DS:SI -> request buffer (see below)
       ES:DI -> reply buffer (ignored???)
Return: AL = status
           00h successful
           98h nonexistent volume
           9Bh invaid directory handle
           9Ch invalid path
           FFh no files found
Note:   this function only marks the file for deletion; use AH=E2h/SF=CEh to
         actually delete all marked files
SeeAlso: AH=13h,AH=41h,AH=E2h/SF=0Bh,AH=E3h/SF=CEh

Format of request buffer:
Offset  Size    Description
00h    BYTE    directory handle
01h    BYTE    search attributes (see AX=4301h)
02h    BYTE    length of filespec
03h  N BYTEs   ASCIZ filespec (may include wildcards)
----------21F2AA-----------------------------
INT 21 - VIRUS - "PcVrsDs" - INSTALLATION CHECK
       AX = F2AAh
Return: AH = AAh if resident
SeeAlso: AH=F1h"VIRUS",AH=F3h"VIRUS"
----------21F3-------------------------------
INT 21 - Novell NetWare - FILE SERVICES - FILE SERVER FILE COPY
       AH = F3h
       ES:DI -> request buffer (see below)
Return: AL = status/error code
       CX:DX = number of bytes copied
Notes:  this function is supported by Advanced NetWare 2.0+
       both source and destination must be on the same file server
SeeAlso: AH=3Ch,AH=3Fh

Format of request buffer:
Offset  Size    Description
00h    WORD    source file handle (as returned by AH=3Ch or AH=3Dh)
02h    WORD    destination file handle
04h    DWORD   starting offset in source
08h    DWORD   starting offset in destination
0Ch    DWORD   number of bytes to copy
----------21F3-------------------------------
INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
       AH = F3h
       AL = character
Return: AL = 00h successful
            01h buffer full (128 characters)
SeeAlso: AH=E3h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
SeeAlso: AH=F8h"DoubleDOS"
----------21F3-------------------------------
INT 21 - VIRUS - "Carfield" - INSTALLATION CHECK
       AH = F3h
Return: AX = 0400h if resident
SeeAlso: AH=D5h"Carfield",AX=F2AAh,AH=F7h"VIRUS"
----------21F400-----------------------------
INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
       AX = F400h
Return: AL = 00h if DoubleDOS not present
          = 01h if running in visible DoubleDOS partition
          = 02h if running in the invisible DoubleDOS partition
SeeAlso: AX=E400h,AH=F5h"DoubleDOS"
----------21F5-------------------------------
INT 21 - DoubleDOS - OTHER PROGRAM STATUS
       AH = F5h
Return: AL = 00h no program in other partition
          = 01h program in other partition is running
          = 02h program in other partition is suspended
SeeAlso: AH=E5h"DoubleDOS",AX=F400h"DoubleDOS"
----------21F7-------------------------------
INT 21 - VIRUS - "GP1" - INSTALLATION CHECK
       AH = F7h
Return: AX = 0300h if resident
SeeAlso: AH=F0h"VIRUS",AH=FBh"VIRUS"
----------21F8-------------------------------
INT 21 - DOS v2.11 - SET OEM INT 21 HANDLER
       AH = F8h
       DS:DX -> OEM INT 21 handler for functions F9h to FFh
                FFFFh:FFFFh disables OEM handler

Notes:  this function is supported by Toshiba T1000 ROM MSDOS 2.11
       calls to AH=F9h through AH=FFH will return AL=00h if no handler set
       handler is called with all registers exactly as set by caller, and
         should exit with IRET
SeeAlso: AH=F9h"OEM"
----------21F8-------------------------------
INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
       AH = F8h
       AL = 00h set flags for this program
          = 01h set flags for other program
       DX = keyboard control flags (bit set enables, cleared disables)
           bit 0: menu
           bit 1: exchange
           bit 2: entire keyboard enable/disable
           bit 3: Ctrl-C
           bit 4: Ctrl-PrtSc
           bit 5: Alt/Erase
           bit 6: Ctrl-Break
           bit 7: Ctrl-NumLock
           bit 8: shift-PrtSc
           bit 9-13: undefined
           bit 14: cancel key (clear keyboard buffer)
           bit 15: suspend key
Return: DX = previous flags
Notes:  disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
         disabling any of the other keystrokes disables them completely
       identical to AH=E8h
SeeAlso: AH=E8h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
SeeAlso: AH=F3h"DoubleDOS"
----------21F9-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = F9h
SeeAlso: AH=F8h"OEM",AH=FAh"OEM"
----------21F9-------------------------------
INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
       AH = F9h
       AL = 00h visible program gets 70%, invisible gets 30% (default)
          = 01h visible program gets 50%, invisible gets 50%
          = 02h visible program gets 30%, invisible gets 70%
          = 03h Top program gets 70%, bottom program gets 30%
          = 04h Top program gets 30%, bottom program gets 70%
          = 05h get current priority
               Return: AL = priority setting
Note:   identical to AH=E9h
SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS"
----------21FA-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FAh
SeeAlso: AH=F8h"OEM",AH=F9h"OEM",AH=FBh"OEM"
----------21FA-------------------------------
INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
       AH = FAh
Return: task switching turned off
SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS"
SeeAlso: INT FA"DoubleDOS"
----------21FA--DX5945-----------------------
INT 21 - PC Tools 7 VDEFEND - API
       AH = FAh
       DX = 5945h
       AL = function
           00h NOP
           01h uninstall
               Return: CF clear if successful
                       DI = 4559h
           02h ???
               BL = ???
               Return: CF clear
                       CL = old value of ???
SeeAlso: INT 2F/AX=6282h
----------21FB-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FBh
SeeAlso: AH=F8h"OEM",AH=FAh"OEM",AH=FCh"OEM"
----------21FB-------------------------------
INT 21 - DoubleDOS - TURN ON TASK SWITCHING
       AH = FBh
Return: task switching turned on
SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS"
SeeAlso: INT FB"DoubleDOS"
----------21FB-------------------------------
INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK
       AH = FBh
Return: AH = 00h if resident
SeeAlso: AH=F7h"VIRUS",AX=FB0Ah
----------21FB0A-----------------------------
INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK
       AX = FB0Ah
Return: AX = 0AFBh if resident
SeeAlso: AH=FBh"VIRUS",AH=FCh"VIRUS"
----------21FC-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FCh
SeeAlso: AH=F8h"OEM",AH=FBh"OEM",AH=FDh"OEM"
----------21FC-------------------------------
INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
       AH = FCh
Return: ES = segment of virtual screen
Notes:  screen address can change if task-switching is on!!
       identical to AH=ECh
SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS"
----------21FC-------------------------------
INT 21 - VIRUS - "Troi" - INSTALLATION CHECK
       AH = FCh
Return: AL = A5h if resident
SeeAlso: AH=FB0Ah"VIRUS",AH=FDh"VIRUS"
----------21FD-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FDh
SeeAlso: AH=F8h"OEM",AH=FCh"OEM",AH=FEh"DOS"
----------21FD-------------------------------
INT 21 - VIRUS - "Border" - INSTALLATION CHECK
       AH = FDh
Return: AH = 13h if resident
SeeAlso: AH=FCh"VIRUS",AH=FEh"VIRUS"
----------21FE-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FEh
SeeAlso: AH=F8h"OEM",AH=FDh"OEM",AH=FFh"OEM"
----------21FE-------------------------------
INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
       AH = FEh
       AL = number of 55ms time slices to give away
Return: returns after giving away time slices
SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS"
----------21FE-------------------------------
INT 21 - VIRUS - "483" - INSTALLATION CHECK
       AH = FEh
Return: AH = 00h if resident
SeeAlso: AH=FDh"VIRUS",AX=FE01h
----------21FE01-----------------------------
INT 21 - VIRUS - "Flip" - INSTALLATION CHECK
       AX = FE01h
Return: AX = 01FEh if resident
SeeAlso: AH=FEh"VIRUS",AX=FE02h
----------21FE02-----------------------------
INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK
       AX = FE02h
Return: AX = 01FDh if resident
SeeAlso: AX=FE01h,AX=FEDCh"VIRUS"
----------21FEDC-----------------------------
INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
       AX = FEDCh
Return: AX = CDEFh if installed
SeeAlso: AH=DCh
----------21FEDC-----------------------------
INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK
       AX = FEDCh
Return: AL = DCh if resident
SeeAlso: AX=FE02h,AH=FFh"VIRUS"
----------21FF-------------------------------
INT 21 - DOS v2.11 - OEM FUNCTION
       AH = FFh
SeeAlso: AH=F8h"OEM",AH=FEh"OEM"
----------21FF-------------------------------
INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
       AH = FFH
       AL = subfunction
           00h add installable command
              BL = mode - bit 0 = 1 callable from DOS prompt
                          bit 1 = 1 callable from application
              DS:SI -> CR-terminated command name
              ES:DI -> FAR routine entry point
           01h remove installable command
              DS:SI -> CR-terminated command name
           02h reserved, may be used to test for CED installation
Return: CF clear if successful
       CF set on error
           AX = 01h invalid function
                02h command not found (subfunction 01h only)
                08h insufficient memory (subfunction 00h only)
                0Eh bad data (subfunction 00h only)
       AH = FFh if CED not installed
Note:   CED is a shareware DOS command-line enhancer by Christopher J. Dunford
SeeAlso: AX=0A00h
----------21FF-------------------------------
INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
       AH = FFh
       AL = function
           01h create file
           02h open file
           03h get file statistics
           04h get time of day
           05h set time of day
           06h stat
           07h system
SeeAlso: INT 10/AH=FFh"GO32"
----------21FF-------------------------------
INT 21 - DOSED.COM - INSTALLATION CHECK
       AH = FFh
       DS:SI -> "DOSED"
       ES = 0000h
Return: ES:DI -> "DOSED" if installed
Note:   DOSED is a free DOS commandline editor/history buffer by Sverre H.
         Huseby
----------21FF-------------------------------
INT 21 - Topware Network Operating System - ???
       AH = FFh
       ???
Return: ???
SeeAlso: INT 2F/AX=FF00h
----------21FF-------------------------------
INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
       AH = FFh
Return: AH = 00h if "Tumen 0.5" or "Hero" resident
       AX = 0400h if "Sunday" resident
SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh
----------21FF-------------------------------
INT 21 UP - Rational Systems DOS/4GW - API
       AH = FFh
       DH = function (00h-17h) (see also separate entries below)
       DL = subfunction or argument
Return: CF clear if valid function number
           AX = status???
       CF set if invalid function
SeeAlso: INT 15/AX=BFDCh
----------21FF--DH02-------------------------
INT 21 UP - Rational Systems DOS/4GW - SET ???
       AH = FFh
       DH = 02h
       DL = ???
Return: CF clear
----------21FF--DH05-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 05h
       BX = ???
Return: ???
----------21FF--DH06-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 06h
       BX = ???
Return: ???
----------21FF--DH07-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 07h
       BX = ???
Return: ???
----------21FF--DH08-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 08h
       BX = ???
       CX = ???
       ES = ???
Return: ???
----------21FF--DH09-------------------------
INT 21 UP - Rational Systems DOS/4GW - GET ???
       AH = FFh
       DH = 09h
Return: ES:BX -> ???
----------21FF--DH0A-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 0Ah
       AL = ???
       BX = ???
       CX = ???
Return: ES = ??? or 0000h
----------21FF--DH0B-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 0Bh
       AL = ???
       BX = ???
       CX = ???
Return: ???
----------21FF--DH0C-------------------------
INT 21 UP - Rational Systems DOS/4GW - GET/SET ???
       AH = FFh
       DH = 0Ch
       DL = ??? (00h or 01h)
Return: CF clear if successful
           AL = previous value of ???
       CF set on error (DL out of range)
           AX = FFFFh
----------21FF--DH0D-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 0Dh
       ???
Return: ???
----------21FF--DH0E-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 0Eh
Return: DX:AX -> XBRK structure (see INT 15/AX=BF02h)
       BX = ???
       CX = ???
SeeAlso: INT 15/AX=BF02h
----------21FF--DH0F-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 0Fh
       ???
Return: ???
----------21FF--DH10-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 10h
       AL = ???
       BX = ???
       CX = ???
       DI = ???
       SI = ???
Return: ???
Note:   among other things, frees two memory blocks via INT 21/AH=49h
----------21FF--DH11-------------------------
INT 21 UP - Rational Systems DOS/4GW - NOP
       AH = FFh
       DH = 11h
----------21FF--DH12-------------------------
INT 21 UP - Rational Systems DOS/4GW - EXCHANGE ??? POINTERS
       AH = FFh
       DH = 12h
       DS:SI -> new ???
       ES:DI -> new ???
Return: DS:SI -> previous ???
       ES:DI -> previous ???
----------21FF--DH13-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 13h
       AL = ???
       ES = ???
Return: ???
----------21FF--DH14-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFh
       DH = 14h
       BX = ???
       CX = ???
Return: CF clear
           AX = ???
           DX = ???
----------21FF--DH15-------------------------
INT 21 UP - Rational Systems DOS/4GW - GET ??? FUNCTIONS
       AH = FFh
       DH = 15h
Return: CF clear
           DX:AX -> FAR function for ???
           CX:BX -> FAR function for ???
           SI:DI -> FAR function for ???
----------21FF--DH16-------------------------
INT 21 UP - Rational Systems DOS/4GW - GET ???
       AH = FFh
       DH = 16h
Return: AX = ???
----------21FF--DH17-------------------------
INT 21 UP - Rational Systems DOS/4GW - ???
       AH = FFH
       DH = 17h
       AL = ???
       DL = ???
Return: ???
----------21FF00DX0078-----------------------
INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
       AX = FF00h
       DX = 0078h
Return: AL <> 00h if installed
           GS = segment of kernel if nonzero
SeeAlso: INT 15/AX=BF02h
----------21FF0F-----------------------------
INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
       AX = FF0Fh
Return: AX = 0101h if resident
Notes:  FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
         Software Concepts Design
       the "PSQR/1720" virus calls this function to determine whether
         FLU_SHOT+ is present
SeeAlso: AH=FFh"VIRUS",AX=FF10h
----------21FF10-----------------------------
INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
       AX = FF10h
Return: AL = 07h if resident
SeeAlso: AX=FF0Fh,AX=FFFEh
----------21FFFE-----------------------------
INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
       AX = FFFEh
Return: AX = 0815h if resident
SeeAlso: AX=FF10h,AX=FFFFh
----------21FFFF-----------------------------
INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK
       AX = FFFFh
Return: AX = 0000h if "Ontario" resident
       AX = 07C2h (1992) if "Year 1992"/"B1M92" resident
SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
----------21FFFFCX0000-----------------------
INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
       AX = FFFFh
       CX = 0000h
Return: CX = 0006h if resident
SeeAlso: AX=FFFFh,INT 6B"VIRUS"
----------22---------------------------------
INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  specifies the address of the routine which is to be given control after
  a program is terminated; should never be called directly, since it does not
  point at an interrupt handler
Notes:  this vector is restored from the DWORD at offset 0Ah in the PSP during
         termination, and then a FAR JMP is performed to the address in INT 22
       normally points at the instruction immediately following INT 21/AH=4Bh
         call which loaded the current program
SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
----------23---------------------------------
INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
---DOS 1.x---
Return: AH = 00h abort program
       if all registers preserved, restart DOS call
---DOS 2+---
       CF clear
Return: all registers preserved
       return via RETF or RETF 2 with CF set
           DOS will abort program with errorlevel 0
       else (RETF/RETF 2 with CF clear or IRET)
           interrupted DOS call is restarted
Notes:  this interrupt is invoked whenever DOS detects a ^C or ^Break; it
         should never be called directly
       MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
       DOS remembers the stack pointer before calling INT 23, and if it is
         not the same on return, pops and discards the top word; this is what
         permits a return with RETF as well as IRET or RETF 2
       any DOS call may safely be made within the INT 23 handler, although
         the handler must to check for a recursive invocation if it does
         call DOS
SeeAlso: INT 1B
----------24---------------------------------
INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
Note:   invoked when a critical (usually hardware) error is encountered; should
         never be called directly
SeeAlso: INT 21/AH=95h

Critical error handler is invoked with:
       AH = type and processing flags
           bit 7 clear = disk I/O error
                 set   = -- if block device, bad FAT image in memory
                         -- if char device, error code in DI
           bit 6  unused
           bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
           bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
           bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
           bit 2 \ disk area of error  00 = DOS area  01 = FAT
           bit 1 /                     10 = root dir  11 = data area
           bit 0 = 1 if write, 0 if read
       AL = drive number if AH bit 7 clear
       BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
       DI low byte contains error code if AH bit 7 set
          00h write-protection violation attempted
          01h unknown unit for driver
          02h drive not ready
          03h unknown command given to driver
          04h data error (bad CRC)
          05h bad device driver request structure length
          06h seek error
          07h unknown media type
          08h sector not found
          09h printer out of paper
          0Ah write fault
          0Bh read fault
          0Ch general failure
          0Dh (DOS 3+) sharing violation
          0Eh (DOS 3+) lock violation
          0Fh invalid disk change
          10h (DOS 3+) FCB unavailable
          11h (DOS 3+) sharing buffer overflow
          12h (DOS 4+) code page mismatch
          13h (DOS 4+) out of input
          14h (DOS 4+) insufficient disk space
       STACK:  DWORD   return address for INT 24 call
               WORD    flags pushed by INT 24
               WORD    original AX on entry to INT 21
               WORD    BX
               WORD    CX
               WORD    DX
               WORD    SI
               WORD    DI
               WORD    BP
               WORD    DS
               WORD    ES
               DWORD   return address for INT 21 call
               WORD    flags pushed by INT 21
Handler must return:
       AL = action code
           00h ignore error and continue processing request
           01h retry operation
           02h terminate program through the equivalent of INT 21/AH=4Ch
                       (INT 20h for DOS 1.x)
           03h fail system call in progress
       SS,SP,DS,ES,BX,CX,DX preserved
Notes:  the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
       if the handler returns to the application by popping the stack, DOS
         will be in an unstable state until the first call with AH > 0Ch
       for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
         critical errors
       if IGNORE specified but not allowed, it is turned into FAIL
       if RETRY specified but not allowed, it is turned into FAIL
       if FAIL specified but not allowed, it is turned into ABORT
       (DOS 3+) if a critical error occurs inside the critical error handler,
         the DOS call is automatically failed
----------25---------------------------------
INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
       AL = drive number (00h = A:, 01h = B:, etc)
       CX = number of sectors to read
       DX = starting logical sector number (0000h - highest sector on drive)
       DS:BX -> buffer for data
Return: CF clear if successful
       CF set on error
           AH = status
                80h device failed to respond (timeout)
                40h seek operation failed
                20h controller failed
                10h data error (bad CRC)
                08h DMA failure
                04h requested sector not found
                03h write-protected disk (INT 26 only)
                02h bad address mark
                01h bad command
           AL = error code (same as passed to INT 24 in DI)
       may destroy all other registers except segment registers
Notes:  original flags are left on stack, and must be popped by caller
       this call bypasses the DOS filesystem
BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
       invalid drive number
SeeAlso: INT 13/AH=02h,INT 26
----------25---------------------------------
INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
       AL = drive number (0=A, 1=B, etc)
       CX = FFFFh
       DS:BX -> disk read packet (see below)
Return: same as above
Notes:  partition is potentially >32M (and requires this form of the call) if
         bit 1 of device attribute word in device driver is set
       original flags are left on stack, and must be removed by caller
       this call bypasses the DOS filesystem
SeeAlso: INT 13/AH=02h,INT 26

Format of disk read packet:
Offset  Size    Description
00h    DWORD   sector number
04h    WORD    number of sectors to read
06h    DWORD   transfer address
----------25CDCD-----------------------------
INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
       AX = CDCDh
       DS:BX -> buffer for address (see below)
       CX = 0001h
       DX = 0000h
Return: AX = CDCDh if Stacker installed
           DS:BX buffer filled

Format of driver address buffer:
Offset  Size    Description
00h    WORD    signature CDCDh
02h    WORD    ??? 0001h
04h    DWORD   pointer to start of Stacker device driver

Format of device driver:
Offset  Size    Description
00h    WORD    signature A55Ah
02h    WORD    Stacker version * 64h
04h    WORD    offset of volume-specific information offset table
               (list of WORDs, one per drive, containing offsets to various
               information)
06h 56 BYTEs   n/a
3Eh    BYTE    volume number, set after INT 21/AX=4404h
               (use to index into volume-specific info offset table)
3Fh 19 BYTEs   n/a
52h  4 BYTEs   ASCII string "SWAP"
56h 26 BYTEs   drive mapping table (one byte for each drive A: through Z:)

Format of Stacker boot record:
Offset  Size    Description
1F0h  8 BYTEs   Stacker signature (first byte is CDh)
1F8h    DWORD   pointer to start of Stacker device driver
1FCh    WORD    Stacker volume number
1FEh    WORD    ???
----------25--FFSI4358-----------------------
INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
       AL = FFh
       SI = 4358h
Return: SI = 6378h if installed
           CX = segment of device driver PC-CACHE.SYS
           DX = version (major in DH, minor in DL)
Note:   PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
         access to certain disk drivers for devices such as Bernoulli drives
SeeAlso: INT 13/AH=A0h
----------26---------------------------------
INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
       AL = drive number (00h = A:, 01h = B:, etc)
       CX = number of sectors to write
       DX = starting logical sector number (0000h - highest sector on drive)
       DS:BX -> data to write
Return: CF clear if successful
       CF set on error
           AH = status
                80h device failed to respond (timeout)
                40h seek operation failed
                20h controller failed
                10h data error (bad CRC)
                08h DMA failure
                04h requested sector not found
                03h write-protected disk (INT 26 only)
                02h bad address mark
                01h bad command
           AL = error code (same as passed to INT 24 in DI)
       may destroy all other registers except segment registers
Notes:  original flags are left on stack, and must be popped by caller
       this call bypasses the DOS filesystem
BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
       invalid drive number
SeeAlso: INT 13/AH=03h,INT 25
----------26---------------------------------
INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
       AL = drive number (0=A, 1=B, etc)
       CX = FFFFh
       DS:BX -> disk write packet (see below)
Return: same as above
Notes:  partition is potentially >32M (and requires this form of the call) if
         bit 1 of device attribute word in device driver is set
       original flags are left on stack, and must be removed by caller
       this call bypasses the DOS filesystem
SeeAlso: INT 13/AH=03h,INT 25

Format of disk write packet:
Offset  Size    Description
00h    DWORD   sector number
04h    WORD    number of sectors to read
06h    DWORD   transfer address
----------27---------------------------------
INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
       DX = number of bytes to keep resident (max FFF0h)
       CS = segment of PSP
Return: never
Notes:  this is an obsolete call
       INT 22, INT 23, and INT 24 are restored from the PSP
       does not close any open files
       the minimum number of bytes which will remain resident is 110h for
         DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
         implements this service in COMMAND.COM rather than the DOS kernel
SeeAlso: INT 21/AH=31h
----------28---------------------------------
INT 28 - DOS 2+ - DOS IDLE INTERRUPT
  Invoked each time one of the DOS character input functions loops while
  waiting for input.  Since a DOS call is in progress even though DOS is
  actually idle during such input waits, hooking this function is necessary
  to allow a TSR to perform DOS calls while the foreground program is
  waiting for user input.  The INT 28h handler may invoke any INT 21 function
  except functions 00h through 0Ch.  Under DOS 2.x, the critical error flag
  (the byte immediately after the InDOS flag) must be set in order to call
  DOS functions 50h/51h without destroying the DOS stacks.

Notes:  calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON
       at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
         set to 01h; if larger, DOS is truly busy and should not be reentered
       the default handler is an IRET instruction
       supported in OS/2 compatibility box
SeeAlso: INT 21/AH=34h,INT 2A/AH=84h
----------29---------------------------------
INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
       AL = character to display
Return: nothing
Notes:  automatically called when writing to a device with bit 4 of its device
         driver header set (see also INT 21/AH=52h)
       COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
         vector and assume that ANSI.SYS is installed if the segment is larger
       the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
       the default handler under DESQview 2.2 understands the <Esc>[2J
         screen-clearing sequence, calls INT 10/AH=0Eh for all others
SeeAlso: INT 79
----------2A00-------------------------------
INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
       AH = 00h
Return: AH <> 00h if installed
SeeAlso: INT 5C
----------2A0000-----------------------------
INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
       AX = 0000h
Return: AH = DDh
SeeAlso: INT 5B
----------2A01-------------------------------
INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
       AH = 01h
       ES:BX -> NCB (see INT 5C)
Return: AL = NetBIOS error code
       AH = 00h if no error
          = 01h on error
SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
----------2A02-------------------------------
INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
       AH = 02h
       ???
Return: ???
----------2A0300-----------------------------
INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
       AX = 0300h
       DS:SI -> ASCIZ device name (may be full path or only drive specifier--
               must include the colon)
Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
       CF set if access via files only
Notes:  do not use direct disk accesses if this function returns CF set or the
         device is redirected (INT 21/AX=5F02h)
       may take some time to execute
       called by DOS kernel on INT 25 and INT 26
SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
----------2A04-------------------------------
INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
       AH = 04h
       AL = error retry
           00h automatically retry request on errors 09h, 12h, and 21h
           01h no retry
       ES:BX -> Network Control Block (see INT 5C"NetBIOS")
Return: AX = 0000h if successful
       AH = 01h on error
           AL = error code
Note:   invokes either INT 5B or INT 5C as appropriate
SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
----------2A0500-----------------------------
INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
       AX = 0500h
Return: AX reserved
       BX = number of network names available
       CX = number of network control blocks available
       DX = number of network sessions available
SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
----------2A06-------------------------------
INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
       AH = 06h
       AL = 01h set concatenation mode (all printer output put in one job)
            02h set truncation mode (default)
                printer open/close starts new print job
            03h flush printer output and start new print job
Return: CF set on error
           AX = error code
       CF clear if successful
Notes:  subfunction 03h is equivalent to Ctrl/Alt/keypad-*
       LANtastic v4.x no longer supports this call
SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
----------2A2001-----------------------------
INT 2A - MS Networks or NETBIOS - ???
       AX = 2001h
       ???
Return: ???
Note:   intercepted by DESQview 2.x
----------2A2002-----------------------------
INT 2A - NETWORK - ???
       AX = 2002h
       ???
Return: ???
Note:   called by MSDOS 3.30-5.00 APPEND
----------2A2003-----------------------------
INT 2A - NETWORK - ???
       AX = 2003h
       ???
Return: ???
Note:   called by MSDOS 3.30-5.00 APPEND
----------2A7802-----------------------------
INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
       AX = 7802h
       ES:DI -> 8-byte buffer to be filled
Return: AL = 00h if no user logged on to Extended Services
       AL <> 00h if user logged on to Extended Services
           buffer at ES:DI filled with name, padded to 8 chars with blanks.
----------2A80-------------------------------
INT 2A - NETWORK - BEGIN DOS CRITICAL SECTION
       AH = 80h
       AL = critical section number (00h-0Fh)
           01h DOS kernel, SHARE.EXE
               apparently for maintaining the integrity of DOS/SHARE/NET
                 data structures
           02h DOS kernel
               ensures that no multitasking occurs while DOS is calling an
                 installable device driver
           05h DOS 4.x only IFSFUNC
           06h DOS 4.x only IFSFUNC
           08h ASSIGN.COM
           0Ah MSCDEX
Notes:  normally hooked to avoid interrupting a critical section, rather than
         called
       the handler should ensure that none of the critical sections are
         reentered, usually by suspending a task which attempts to reenter
         an active critical section
       the DOS kernel does not invoke critical sections 01h and 02h unless it
         is patched.  DOS 3.1 through 3.31 contain a zero-terminated list of
         words beginning at offset 02C3h in the IBMDOS segment; each word
         contains the offset within the IBMDOS segment of a byte which must
         be changed from C3h to 50h to enable use of critical sections.
SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
----------2A81-------------------------------
INT 2A - NETWORK - END DOS CRITICAL SECTION
       AH = 81h
       AL = critical section number (00h-0Fh) (see AH=80h)
Notes:  normally hooked rather than called
       the handler should reawaken any tasks which were suspended due to an
         attempt to enter the specified critical section
SeeAlso: AH=80h,AH=82h,AH=87h
----------2A82-------------------------------
INT 2A - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
       AH = 82h
Notes:  called by the INT 21h function dispatcher for function 0 and functions
         greater than 0Ch except 59h, and on process termination
       the handler should reawaken any tasks which were suspended due to an
         attempt to enter one of the critical sections 0 through 7
SeeAlso: AH=81h
----------2A84-------------------------------
INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
       AH = 84h
Note:   similar to DOS's INT 28h, called from inside the DOS keyboard input
         loop to allow network to process requests
SeeAlso: INT 28
----------2A87-------------------------------
INT 2A - PRINT??? - CRITICAL SECTION
       AH = 87h
       AL = start/end
           00h start
           01h end
Note:   called by PRINT.COM
SeeAlso: AH=80h,AH=81h
----------2A89-------------------------------
INT 2A - Network - ???
       AH = 89h
       AL = ???  (ASSIGN uses 08h)
       ???
Return: ???
----------2A90-------------------------------
INT 2A - IBM PC 3270 EMULATION PROGRAM - ???
       AH = 90h
       ???
Return: ???
Note:   the LANtastic redirector and SERVER.EXE use this function with AL=01h,
         03h-07h,0Ch-11h
----------2AC2-------------------------------
INT 2A - Network - ???
       AH = C2h
       AL = subfunction
           07h ???
           08h ???
       BX = 0001h
       ???
Return: ???
Note:   called by DOS 3.30-5.00 APPEND
----------2AFF90-----------------------------
INT 2A - PC/TCP PREDIR.EXE - ???
       AX = FF90h
Return: AX = ???
Note:   PREDIR.EXE is the network printer redirector included as part of the
         PC/TCP system by FTP Software, Inc.
----------2AFF91-----------------------------
INT 2A - PC/TCP PREDIR.EXE - ???
       AX = FF91h
       BX = ???
Return: AX = status???
----------2AFF92-----------------------------
INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
       AX = FF92h
Return: AX = 0000h if installed
          BX = redirected printer port (FFFFh if no printers redirected)
          CX = version (CH = major, CL = minor)
Note:   PREDIR.EXE is the network printer redirector included as part of the
         PC/TCP system by FTP Software, Inc.
----------2AFF93-----------------------------
INT 2A - PC/TCP PREDIR.EXE - ???
       AX = FF93h
Return: AX = ???
----------2AFF94-----------------------------
INT 2A - PC/TCP PREDIR.EXE - ???
       AX = FF94h
       BX = ???
       CX = ???
       DX = ???
Return: AX = ???
Note:   PREDIR.EXE is the network printer redirector included as part of the
         PC/TCP system by FTP Software, Inc.
----------2AFF95-----------------------------
INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
       AX = FF95h
       CX = what to get
           0000h ??? (returned pointer to "C:\COMMAND.COM")
           0001h spooling program
           0002h ???
           0003h spool file name
           0004h swap file name
Return: AX = status
           0000h successful
       BX:DX -> ASCIZ configuration string
----------2AFF96-----------------------------
INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
       AX = FF96h
       CX = what to set
           0000h ???
           0001h print-on-hotkey state
           0002h print-on-exit state
           0003h print job timeout in clock ticks
           0004h print-on-EOF state
       BX = new value (0000h disabled, 0001h enabled except for timeout)
Return: AX = ???
SeeAlso: AX=FF97h
Note:   PREDIR.EXE is the network printer redirector included as part of the
         PC/TCP system by FTP Software, Inc.
----------2AFF97-----------------------------
INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
       AX = FF97h
       CX = what to get
           0000h ???
           0001h print-on-hotkey state
           0002h print-on-exit state
           0003h print job timeout in clock ticks
           0004h print-on-EOF state
Return: AX = status
           0000h successful
       BX = old value (0000h disabled, 0001 enabled except for timeout)
SeeAlso: AX=FF96h
----------2B---------------------------------
INT 2B - DOS 2+ - RESERVED
Note:   this vector is not used in DOS versions <= 5.00, and points at an IRET
----------2C---------------------------------
INT 2C - DOS 2+ - RESERVED
Note:   this vector is not used in DOS versions <= 5.00, and points at an IRET
----------2C---------------------------------
INT 2C - STARLITE architecture - KERNEL API
Note:   STARLITE is an architecture by General Software for a series of MS-DOS
         compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
         be released in 1991.  The interrupt number is subject to change
         before the actual release.
----------2D---------------------------------
INT 2D - DOS 2+ - RESERVED
Note:   this vector is not used in DOS versions <= 5.00, and points at an IRET
----------2D---------------------------------
INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5]
       AH = multiplex number
       AL = function
           00h installation check
               Return: AL = 00h if free
                       AL = FFh if multiplex number in use
                           CX = binary version number (CH = major, CL = minor)
                           DX:DI -> signature string (see below) identifying
                                   the program using the multiplex number
           01h get entry point
               Return: AL = 00h if all API calls via INT 2D
                       AL = FFh if entry point supported
                           DX:BX -> entry point for bypassing interrupt chain
           02h uninstall
               DX:BX = return address for successful uninstall (may be
                       ignored by TSR)
               Return: AL = status
                           00h not implemented
                           01h unsuccessful
                           02h can not uninstall yet, will do so when able
                           03h safe to remove, but no resident uninstaller
                               (TSR still enabled)
                               BX = segment of memory block with resident code
                           04h safe to remove, but no resident uninstaller
                               (TSR now disabled)
                               BX = segment of memory block with resident code
                           05h not safe to remove now, try again later
                           FFh successful
                       return at DX:BX with AX destroyed if successful and
                         TSR honors specific return address
           03h request pop-up
               Return: AL = status
                           00h not implemented or TSR is not a pop-up
                           01h can not pop up at this time, try again later
                           02h can not pop up yet, will do so when able
                           03h already popped up
                           04h unable to pop up, user intervention required
                               BX = standard reason code
                                   0000h unknown failure
                                   0001h interrupt chain passes through memory
                                         which must be swapped out to pop up
                                   0002h swap-in failed
                               CX = application's reason code if nonzero
                           FFh TSR popped up and was exited by user
                               BX = return value
                                   0000h no return value
                                   0001h TSR unloaded
                                   0002h-00FFh reserved
                                   0100h-FFFFh application-dependent
           04h determine chained interrupts
               BL = interrupt number (except 2Dh)
               Return: AL = status
                           00h not implemented
                           01h (obsolete) unable to determine
                           02h (obsolete) interrupt hooked
                           03h (obsolete) interrupt hooked, address returned
                               DX:BX -> TSR's interrupt BL handler
                           04h list of hooked interrupts returned
                               DX:BX -> interrupt hook list (see below)
                           FFh interrupt not hooked
               Notes:  since INT 2D is known to be hooked, the resident code
                         need not test for BL=2Dh (to minimize its size), and
                         the return value is therefore undefined in that case.
                       BL is ignored if the TSR returns AL=04h; in that case,
                         the caller needs to scan the return list rather than
                         making additional calls to this function.  If the
                         return is not 00h or 04h, then the caller must cycle
                         through the remaining interrupt numbers it wishes to
                         check.
                       return values 01h thru 03h are disparaged and will be
                         removed from the next version of this specification;
                         they are included for compatibility with version 3.3,
                         though they were probably never used in any
                         implementation
           05h get hotkeys
               Return: AL = status
                           00h not implemented
                           FFh supported
                               DX:BX -> hotkey list (see below)
           06h-0Fh reserved for future enhancements
               Return: AL = 00h (not implemented)
           other  application-dependent
Notes:  programs should not use fixed multiplex numbers; rather, a program
         should scan all multiplex numbers from 00h to FFh, remembering the
         first unused multiplex in case the program is not yet installed.
         For multiplex numbers which are in use, the program should compare
         the first 16 bytes of the signature string to determine whether it
         is already installed on that multiplex number.  If not previously
         installed, it should use the first free multiplex number.
       functions other than 00h are not valid unless a program is installed
         on the selected multiplex number
       to be considered fully compliant with version 3.5 of the specification,
         programs must implement at least functions 00h, 02h (no resident
         uninstall code required), and 04h (return value 04h).  TSRs that
         provide hotkeys with which the user can activate them must also
         implement function 05h.  The absolute minimum fully-compliant
         implementation has an overhead of 64 bytes (80 bytes with function
         05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
         protocol header and hook list entry).
       the signature string and description may be used by memory mappers
         to display the installed programs
       users of this proposal should adhere to the IBM interrupt sharing
         protocol (see below), which will permit removal of TSRs in
         arbitrary order and interrupt handler reordering.  All TSRs
         following this proposal should be removable, though they need not
         keep the code for removing themselves resident; it is acceptable
         for a separate program to perform the removal.
       A sample implementation including example TSRs and utility programs
         may be found in a separate package distributed as AMISLnnn.ZIP
         (AMISL090.ZIP as of this writing).
       Please let me know if you choose to follow this proposal.  The
         signature and a list of the private API calls you use would be
         appreciated, as well.
SeeAlso: INT 2F

Format of signature string:
Offset  Size    Description
00h  8 BYTEs   blank-padded manufacturer's name (possibly abbreviated)
08h  8 BYTEs   blank-padded product name
10h 64 BYTEs   ASCIZ product description (optional, may be a single 00h)
Note:   it is not necessary to reserve a full 64 bytes for the description,
         just enough to store the actual ASCIZ string

Format of interrupt hook list [array]:
Offset  Size    Description
00h    BYTE    interrupt number (last entry in array is 2Dh)
01h    WORD    offset within hook list's segment of the interrupt handler
               this will point at the initial short jump of the interrupt
               sharing protocol header (see below)

Format of hotkey list:
Offset  Size    Description
00h    BYTE    type of hotkey checking
               bit 0: checks before chaining INT 09
               bit 1: checks after chaining INT 09
               bit 2: checks before chaining INT 15/AH=4Fh
               bit 3: checks after chaining INT 15/AH=4Fh
               bit 4: checks on INT 16/AH=00h,01h,02h
               bit 5: checks on INT 16/AH=10h,11h,12h
               bits 6,7: reserved (0)
01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
02h 6N BYTEs   array of hotkey definitions
               (one per hotkey, first should be primary hotkey)
               Offset  Size    Description
                00h    BYTE    hotkey scan code (00h/80h if shift states only)
                               hotkey triggers on release if bit 7 set
                01h    WORD    required shift states (see below)
                03h    WORD    disallowed shift states (see below)
                05h    BYTE    flags
                               bit 0: hotkey chained before processing
                               bit 1: hotkey chained after processing
                               bit 2: others should pass through this hotkey
                                       so that it can be monitored
                               bit 3: hotkey will not activate if other keys
                                       pressed/released before hotkey press is
                                       completed
                               bit 4: this key is remapped into some other key
                               bit 5-7: reserved (0)
Notes:  except for bit 7, the shift states correspond exactly to the return
         values from INT 16/AH=12h.  A set bit in the required states word
         indicates that the corresponding shift state must be active when the
         hotkey's scan code is received for the hotkey to be recognized; a
         clear bit means that the corresponding state may be ignored.  A set
         bit in the disallowed shift states word indicates that the
         corresponding shift state must be inactive.
       if bit 2 is set, either control key may be pressed for the hotkey; if
         bits 8 and 10 are both set, then both control keys must be pressed.
         Similarly for bits 3 and 9/11, as well as 7 and 0/1.
       for the disallowed-states word, if one of the "either" bits is set,
         then both the corresponding left bit and right bit must be set
       examples:
               Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
               Alt-key tap (DESQview):  B8h 0000h 0007h 08h
               Shf-Shf-N (NOTE.COM):    31h 0003h 000Ch 00h

Bitmask of shift states:
bit 0: right shift pressed
bit 1: left shift pressed
bit 2: either control key pressed
bit 3: either Alt key pressed
bit 4: ScrollLock active
bit 5: NumLock active
bit 6: CapsLock active
bit 7: either shift key pressed
bit 8: left control key pressed
bit 9: left Alt key pressed
bit 10: right control key pressed
bit 11: right Alt key pressed
bit 12: ScrollLock pressed
bit 13: NumLock pressed
bit 14: CapsLock pressed
bit 15: SysRq key pressed

Format of interrupt sharing protocol interrupt handler entry point:
Offset  Size    Description
00h  2 BYTEs   short jump to actual start of interrupt handler, immediately
               following this data block (EBh 10h)
02h    DWORD   address of next handler in chain
06h    WORD    signature 424Bh
08h    BYTE    EOI flag
               00h software interrupt or secondary hardware interrupt handler
               80h primary hardware interrupt handler (will issue EOI)
09h  2 BYTEs   short jump to hardware reset routine
               must point at a valid FAR procedure (may be just RETF)
0Bh  7 BYTEs   reserved (0)

Signatures known to be in use:
'Crynwr  ' 'SPELLER '  TSR spelling-checker
'heathh  ' 'Monitor '
'Ralf B  ' 'FASTMOUS'  example TSR included with sample AMIS library code
'Ralf B  ' 'NOLPT n '  example TSR -- turn LPTn into bit-bucket
'Ralf B  ' 'NOTE    '  example TSR -- popup note-taker
'Ralf B  ' 'RBkeyswp'  RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
'Ralf B  ' 'SWITCHAR'  example TSR -- add switchar() support removed from DOS5
'Ralf B  ' 'VGABLANK'  example TSR -- VGA-only screen blanker
'TifaWARE' 'EATMEM  '  George A. Theall's public domain memory restrictor for
                       testing programs (v1.1+)
           'RECALL  '  public domain commandline editor and history (v1.2+)
'Todd    ' 'XPTR2   '  PC-to-Transputer interface by Todd Radel
----------2E---------------------------------
INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
       DS:SI -> commandline to execute (see below)
Return: all registers except CS:IP destroyed
       AX = status (4DOS v4.0)
          0000h successful
          FFFFh error before processing command (not enough memory, etc)
          other error number returned by command
Notes:  this call allows execution of arbitrary commands (including COMMAND.COM
         internal commands) without loading another copy of COMMAND.COM
       if COMMAND.COM is the user's command interpreter, the primary copy
         executes the command; this allows the master environment to be
         modified by issuing a "SET" command, but changes in the master
         environment will not become effective until all programs descended
         from the primary COMMAND.COM terminate
       since COMMAND.COM processes the string as if typed from the keyboard,
         the transient portion needs to be present, and the calling program
         must ensure that sufficient memory to load the transient portion can
         be allocated by DOS if necessary
       results are unpredictable if invoked by a program run from a batch file
         because this call is not reentrant and COMMAND.COM uses the same
         internal variables when processing a batch file
       hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
         has been loaded
       the MSDOS 5 Programmer's Reference calls this "Reload Transient"

Format of commandline:
Offset  Size    Description
00h    BYTE    length of command string, not counting trailing CR
01h    var     command string
 N     BYTE    0Dh (CR)
----------2E----BXE22E-----------------------
INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
       BX = E22Eh
       DS:SI -> zero byte
Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
---------------------------------------------

Downloaded From P-80 International Information Systems 304-744-2253