include DOSMAC.ASMIF2 %OUT DOSSYM in Pass 2ENDIFIFNDEF ALTVECTALTVECT EQU 0 ;FALSEENDIFBREAK c_DEL EQU 7Fh ; ASCII rubout or delete previous charc_BS EQU 08h ; ^H ASCII backspacec_CR EQU 0Dh ; ^M ASCII carriage returnc_LF EQU 0Ah ; ^J ASCII linefeedc_ETB EQU 17h ; ^W ASCII end of transmissionc_NAK EQU 15h ; ^U ASCII negative acknowledgec_ETX EQU 03h ; ^C ASCII end of textc_HT EQU 09h ; ^I ASCII tabBREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; ;; C A V E A T P R O G R A M M E R ;; ;; Certain structures, constants and system calls below are private to ;; the DOS and are extremely version-dependent. They may change at any ;; time at the implementors' whim. As a result, they must not be ;; documented to the general public. If an extreme case arises, they ;; must be documented with this warning. ;; ;; Those structures and constants that are subject to the above will be ;; marked and bracketed with the flag: ;; ;; C A V E A T P R O G R A M M E R ;; ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;; Bios Parameter Block definition; This structure is used to build a full DPBBPBLOCK STRUCBPSECSZ DW ? ; Size in bytes of physical sectorBPCLUS DB ? ; Sectors/Alloc unitBPRES DW ? ; Number of reserved sectorsBPFTCNT DB ? ; Number of FATsBPDRCNT DW ? ; Number of directory entriesBPSCCNT DW ? ; Total number of sectorsBPMEDIA DB ? ; Media descriptor byteBPFTSEC DW ? ; Number of sectors taken up by one FATBPBLOCK ENDS; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;; Field definition for I/O buffer informationBUFFINFO STRUCNEXTBUF DD ? ; Pointer to next buffer in list; The next two items are often refed as a wordBUFDRV DB ? ; Logical drive # assoc with buffer FF = freeBUFDIRTY DB ? ; Dirty flagBUFPRI DB ? ; Buffer selection priority (see EQUs below)VISIT DB ? ; Visit flag for buffer pool scansBUFSECNO DW ? ; Sector number of buffer; The next two items are often refed as a wordBUFWRTCNT DB ? ; For FAT sectors, # times sector written outBUFWRTINC DB ? ; " " " , # sectors between each writeBUFDRVDP DD ? ; Pointer to drive parametersBUFFINFO ENDSBUFINSIZ EQU SIZE BUFFINFO ; Size of structure in bytesFREEPRI EQU 0LBRPRI EQU 2 ; Last byte of buffer readLBWPRI EQU 4 ; Last byte writtenRPRI EQU 6 ; Read but not last byteWPRI EQU 8 ; Written but not last byteDIRPRI EQU 15 ; Directory SectorFATPRI EQU 30 ; FAT sector; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ; Location of user registers relative user stack pointeruser_environ STRUCuser_AX DW ?user_BX DW ?user_CX DW ?user_DX DW ?user_SI DW ?user_DI DW ?user_BP DW ?user_DS DW ?user_ES DW ?user_IP DW ?user_CS DW ?user_F DW ?user_environ ENDSBREAK INTTAB EQU 20HINTBASE EQU 4 * inttabENTRYPOINT EQU INTBASE+40H IF ALTVECTALTTAB EQU 0F0HALTBASE EQU 4 * ALTTAB ENDIF;; interrupt assignments; IF NOT ALTVECTint_abort EQU INTTAB ; abort processint_command EQU int_abort+1 ; call MSDOSint_terminate EQU int_abort+2 ; int to terminate addressint_ctrl_c EQU int_abort+3 ; ^c trapperint_fatal_abort EQU int_abort+4 ; hard disk errorint_disk_read EQU int_abort+5 ; logical sector disk readint_disk_write EQU int_abort+6 ; logical sector disk writeint_keep_process EQU int_abort+7 ; terminate program and stay resident;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;int_spooler EQU int_abort+8 ; spooler callint_fastcon EQU int_abort+9 ; fast CON interrupt; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----; ELSEint_abort EQU INTTAB ; abort processint_command EQU int_abort+1 ; call MSDOSint_terminate EQU ALTTAB ; int to terminate addressint_ctrl_c EQU int_terminate+1 ; ^c trapperint_fatal_abort EQU int_terminate+2 ; hard disk errorint_disk_read EQU int_abort+5 ; logical sector disk readint_disk_write EQU int_abort+6 ; logical sector disk writeint_keep_process EQU int_abort+7 ; terminate program and stay resident;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;int_spooler EQU int_terminate+3 ; spooler callint_fastcon EQU int_abort+9 ; fast CON interrupt; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----; ENDIFaddr_int_abort EQU 4 * int_abortaddr_int_command EQU 4 * int_commandaddr_int_terminate EQU 4 * int_terminateaddr_int_ctrl_c EQU 4 * int_ctrl_caddr_int_fatal_abort EQU 4 * int_fatal_abortaddr_int_disk_read EQU 4 * int_disk_readaddr_int_disk_write EQU 4 * int_disk_writeaddr_int_keep_process EQU 4 * int_keep_process;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;addr_int_spooler EQU 4 * int_spooleraddr_int_fastcon EQU 4 * int_fastcon; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ; MSDOS partitions the disk into 4 sections:;; phys sector 0: +-------------------+; | | boot/reserved |; | +-------------------+; | | File allocation |; v | table(s) |; | (multiple copies |; | are kept) |; +-------------------+; | Directory |; +-------------------+; | File space |; +-------------------+; | Unaddressable |; | (to end of disk) |; +-------------------+;; All partition boundaries are sector boundaries. The size of the FAT is; adjusted to maximize the file space addressable.BREAK ;; +---------------------------+; | (12 BYTE) filename/ext | 0 0; +---------------------------+; | (BYTE) attributes | 11 B; +---------------------------+; | (10 BYTE) reserved | 12 C; +---------------------------+; | (WORD) time of last write | 22 16; +---------------------------+; | (WORD) date of last write | 24 18; +---------------------------+; | (WORD) First cluster | 26 1A; +---------------------------+; | (DWORD) file size | 28 1C; +---------------------------+;; First byte of filename = E5 -> free directory entry; = 00 -> end of allocated directory; Time: Bits 0-4=seconds/2, bits 5-10=minute, 11-15=hour; Date: Bits 0-4=day, bits 5-8=month, bits 9-15=year-1980;dir_entry STRUCdir_name DB 11 DUP (?) ; file namedir_attr DB ? ; attribute bitsdir_pad DB 10 DUP (?) ; reserved for expansiondir_time DW ? ; time of last writedir_date DW ? ; date of last writedir_first DW ? ; first allocation unit of filedir_size_l DW ? ; low 16 bits of file sizedir_size_h DW ? ; high 16 bits of file sizedir_entry ENDSattr_read_only EQU 1hattr_hidden EQU 2hattr_system EQU 4hattr_volume_id EQU 8hattr_directory EQU 10hattr_archive EQU 20hattr_all EQU attr_hidden+attr_system+attr_directory ; OR of hard attributes for FINDENTRYattr_ignore EQU attr_read_only+attr_archive ; ignore this(ese) attribute(s) ; during search first/nextattr_changeable EQU attr_read_only+attr_hidden+attr_system+attr_archive ; changeable via CHMODBREAK ;; The File Allocation Table uses a 12-bit entry for each allocation unit on the; disk. These entries are packed, two for every three bytes. The contents of; entry number N is found by 1) multiplying N by 1.5; 2) adding the result to; the base address of the Allocation Table; 3) fetching the 16-bit word at this; address; 4) If N was odd (so that N*1.5 was not an integer), shift the word; right four bits; 5) mask to 12 bits (AND with 0FFF hex). Entry number zero; is used as an end-of-file trap in the OS and is passed to the BIOS to help; determine disk format. Entry 1 is reserved for future use. The first; available allocation unit is assigned entry number two, and even though it is; the first, is called cluster 2. Entries greater than 0FF8H are end of file; marks; entries of zero are unallocated. Otherwise, the contents of a FAT; entry is the number of the next cluster in the file.;; Clusters with bad sectors are tagged with FF7H. Any non-zero number would do; because these clusters show as allocated, but are not part of any allocation; chain and thus will never be allocated to a file. A particular number is; selected so that disk checking programs know what to do (ie. a cluster with; entry FF7H which is not in a chain is not an error).BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;DIRSTRLEN EQU 64 ; Max length in bytes of directory stringsdpb STRUCdpb_drive DB ? ; Logical drive # assoc with DPB (A=0,B=1,...)dpb_UNIT DB ? ; Driver unit number of DPBdpb_sector_size DW ? ; Size of physical sector in bytesdpb_cluster_mask DB ? ; Sectors/cluster - 1dpb_cluster_shift DB ? ; Log2 of sectors/clusterdpb_first_FAT DW ? ; Starting record of FATsdpb_FAT_count DB ? ; Number of FATs for this drivedpb_root_entries DW ? ; Number of directory entriesdpb_first_sector DW ? ; First sector of first clusterdpb_max_cluster DW ? ; Number of clusters on drive + 1dpb_FAT_size DB ? ; Number of records occupied by FATdpb_dir_sector DW ? ; Starting record of directorydpb_driver_addr DD ? ; Pointer to driverdpb_media DB ? ; Media bytedpb_first_access DB ? ; This is initialized to -1 to force a media ; check the first time this DPB is useddpb_next_dpb DD ? ; Pointer to next Drive parameter blockdpb_current_dir DW ? ; Cluster number of start of current directory ; 0 indicates root, -1 indicates invalid ; (disk ? changed)dpb_dir_text DB DIRSTRLEN DUP(?) ; ASCIZ string of current directorydpb ENDSDPBSIZ EQU SIZE dpb ; Size of the structure in bytesDSKSIZ = dpb_max_cluster ; Size of disk (temp used during init only); ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;; Field definition for FCBs; The FCB has the following structure:;; +---------------------------+; | Drive indicator(byte) |; +---------------------------+; | Filename (8 chars) |; +---------------------------+; | Extension (3 chars) |; +---------------------------+; | Current Extent(word) |; +---------------------------+; | Record size (word) |; +---------------------------+; | File Size (2 words) |; +---------------------------+; | Date of write |; +---------------------------+; | Time of write |; +---------------------------+;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;; | Flags: |; | bit 7=0 file/1 device |; | bit 6=0 if dirty |; | bits 0-5 deviceid |; +---------------------------+; | first cluster in file |; +---------------------------+; | position of last cluster |; +---------------------------+; | last cluster accessed | 12 bit-+--- packed in 3 bytes; +---------------------------+ |; | parent directory | <------+; +---------------------------+; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; | next record number |; +---------------------------+; | random record number |; +---------------------------+;sys_fcb STRUCfcb_drive DB ?fcb_name DB 8 DUP (?)fcb_ext DB 3 DUP (?)fcb_EXTENT DW ?fcb_RECSIZ DW ? ; Size of record (user settable)fcb_FILSIZ DW ? ; Size of file in bytes; used with the following ; wordfcb_DRVBP DW ? ; BP for SEARCH FIRST and SEARCH NEXTfcb_FDATE DW ? ; Date of last writingfcb_FTIME DW ? ; Time of last writing;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;fcb_DEVID DB ? ; Device ID number, bits 0-5 if file. ; bit 7=0 for file, bit 7=1 for I/O device ; If file, bit 6=0 if dirty ; If I/O device, bit 6=0 if EOF (input) ; Bit 5=1 if Raw mode ; Bit 0=1 if console input device ; Bit 1=1 if console output device ; Bit 2=1 if null device ; Bit 3=1 if clock devicefcb_FIRCLUS DW ? ; First cluster of filefcb_CLUSPOS DW ? ; Position of last cluster accessedfcb_LSTCLUS DW ? ; Last cluster accessed and directory DB ? ; pack 2 12 bit numbers into 24 bits...; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;fcb_NR DB ? ; Next recordfcb_RR DB 4 DUP (?) ; Random recordsys_fcb ENDSFILDIRENT = fcb_FILSIZ ; Used only by SEARCH FIRST and ; SEARCH NEXT;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;devid_file_clean EQU 40h ; true if file and not writtendevid_file_mask_drive EQU 3Fh ; mask for drive numberdevid_device EQU 80h ; true if a devicedevid_device_EOF EQU 40h ; true if end of file reacheddevid_device_raw EQU 20h ; true if in raw modedevid_device_special EQU 10h ; true if special devicedevid_device_clock EQU 08h ; true if clock devicedevid_device_null EQU 04h ; true if null devicedevid_device_con_out EQU 02h ; true if console outputdevid_device_con_in EQU 01h ; true if consle input;; structure of devid field as returned by IOCTL is:;; BIT 7 6 5 4 3 2 1 0; |---|---|---|---|---|---|---|---|; | I | E | R | S | I | I | I | I |; | S | O | A | P | S | S | S | S |; | D | F | W | E | C | N | C | C |; | E | | | C | L | U | O | I |; | V | | | L | K | L | T | N |; |---|---|---|---|---|---|---|---|; ISDEV = 1 if this channel is a device; = 0 if this channel is a disk file;; If ISDEV = 1;; EOF = 0 if End Of File on input; RAW = 1 if this device is in Raw mode; = 0 if this device is cooked; ISCLK = 1 if this device is the clock device; ISNUL = 1 if this device is the null device; ISCOT = 1 if this device is the console output; ISCIN = 1 if this device is the console input;; If ISDEV = 0; EOF = 0 if channel has been written; Bits 0-5 are the block device number for; the channel (0 = A, 1 = B, ...);devid_ISDEV EQU 80hdevid_EOF EQU 40hdevid_RAW EQU 20hdevid_SPECIAL EQU 10Hdevid_ISCLK EQU 08hdevid_ISNUL EQU 04hdevid_ISCOT EQU 02hdevid_ISCIN EQU 01hdevid_block_dev EQU 1Fh ; mask for block device number;; find first/next buffer;find_buf STRUCfind_buf_sattr DB ? ; attribute of searchfind_buf_drive DB ? ; drive of searchfind_buf_name DB 11 DUP (?) ; formatted namefind_buf_LastEnt DW ? ; LastEntfind_buf_ThisDPB DD ? ; This DPBfind_buf_DirStart DW ? ; DirStart; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;find_buf_attr DB ? ; attribute foundfind_buf_time DW ? ; timefind_buf_date DW ? ; datefind_buf_size_l DW ? ; low(size)find_buf_size_h DW ? ; high(size)find_buf_pname DB 13 DUP (?) ; packed namefind_buf ENDSBREAK ;; Process data block (otherwise known as program header);FilPerProc EQU 20Process_data_block STRUCPDB_Exit_Call DW ? ; INT int_abort system terminatePDB_block_len DW ? ; size of execution block DB ?PDB_CPM_Call DB 5 DUP (?) ; ancient call to systemPDB_Exit DD ? ; pointer to exit routinePDB_Ctrl_C DD ? ; pointer to ^C routinePDB_Fatal_abort DD ? ; pointer to fatal error;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;PDB_Parent_PID DW ? ; PID of parent (terminate PID)PDB_JFN_Table DB FilPerProc DUP (?) ; indices into system table; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;PDB_environ DW ? ; seg addr of environment;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;PDB_User_stack DD ? ; stack of self during system callsPDB_PAD1 DB 1Eh DUP (?); ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;PDB_Call_system DB 5 DUP (?) ; portable method of system call;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;PDB_PAD2 DB 6h DUP (?) ;; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;Process_data_block ENDSBREAK ;; EXEC arg block - load/go program;;; The following get used as arguments to the EXEC system call. They indicate; whether or not the program is executed or whether or not a program header; gets created.;exec_func_no_execute EQU 1 ; no execute bitexec_func_overlay EQU 2 ; overlay bitExec0 STRUCExec0_environ DW ? ; seg addr of environmentExec0_com_line DD ? ; pointer to asciz command lineExec0_5C_FCB DD ? ; default fcb at 5CExec0_6C_FCB DD ? ; default fcb at 6CExec0 ENDSExec1 STRUCExec1_environ DW ? ; seg addr of environmentExec1_com_line DD ? ; pointer to asciz command lineExec1_5C_FCB DD ? ; default fcb at 5CExec1_6C_FCB DD ? ; default fcb at 6CExec1_SP DW ? ; stack pointer of programExec1_SS DW ? ; stack seg register of programExec1_IP DW ? ; entry point IPExec1_CS DW ? ; entry point CSExec1 ENDSExec3 STRUCExec3_load_addr DW ? ; seg address of load pointExec3_reloc_fac DW ? ; relocation factorExec3 ENDS;; Exit codes in upper byte;Exit_terminate EQU 0Exit_abort EQU 0Exit_Ctrl_C EQU 1Exit_Hard_Error EQU 2Exit_Keep_process EQU 3;; EXE file header;EXE_file STRUCexe_signature DW ? ; must contain 4D5A (yay zibo!)exe_len_mod_512 DW ? ; low 9 bits of lengthexe_pages DW ? ; number of 512b pages in fileexe_rle_count DW ? ; count of reloc entriesexe_par_dir DW ? ; number of paragraphs before imageexe_min_BSS DW ? ; minimum number of para of BSSexe_max_BSS DW ? ; max number of para of BSSexe_SS DW ? ; stack of imageexe_SP DW ? ; SP of imageexe_chksum DW ? ; checksum of file (ignored)exe_IP DW ? ; IP of entryexe_CS DW ? ; CS of entryexe_rle_table DW ? ; byte offset of reloc tableexe_iov DW ? ; overlay number (0 for root)exe_sym_tab DD ? ; offset of symbol table in fileEXE_file ENDSexe_valid_signature EQU 5A4Dhexe_valid_old_signature EQU 4D5Ahsymbol_entry STRUCsym_value DD ?sym_type DW ?sym_len DB ?sym_name DB 255 dup (?)symbol_entry ENDSBREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;;; system file table;sft STRUCsft_link DD ?sft_count DW ? ; number of entriessft_table DW ? ; beginning of array of the followingsft ENDS;; system file table entry;sf_entry STRUCsf_ref_count DB ? ; number of processes sharing fcbsf_mode DB ? ; mode of accesssf_attr DB ? ; attribute of filesf_fcb DB (SIZE sys_fcb) DUP (?) ; actual FCBsf_entry ENDSsf_default_number EQU 5h; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;;; arena item;arena STRUCarena_signature DB ? ; 4D for valid item, 5A for last itemarena_owner DW ? ; owner of arena itemarena_size DW ? ; size in paragraphs of itemarena ENDSarena_owner_system EQU 0 ; free block indicationarena_signature_normal EQU 4Dh ; valid signature, not end of arenaarena_signature_end EQU 5Ah ; valid signature, last block in arena; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK mi_INT EQU 0CDhmi_Long_JMP EQU 0EAhmi_Long_CALL EQU 09Ahmi_Long_RET EQU 0CBhBREAK stdin EQU 0stdout EQU 1stderr EQU 2stdaux EQU 3stdprn EQU 4BREAK open_for_read EQU 0open_for_write EQU 1open_for_both EQU 2BREAK ;; XENIX calls all return error codes through AX. If an error occurred then the; carry bit will be set and the error code is in AX. If no error occurred then; the carry bit is reset and AX contains returned info.;no_error_occurred EQU 0 ?error_invalid_function EQU 1error_file_not_found EQU 2error_path_not_found EQU 3error_too_many_open_files EQU 4error_access_denied EQU 5error_invalid_handle EQU 6error_arena_trashed EQU 7error_not_enough_memory EQU 8error_invalid_block EQU 9error_bad_environment EQU 10error_bad_format EQU 11error_invalid_access EQU 12error_invalid_data EQU 13;**** unused EQU 14error_invalid_drive EQU 15error_current_directory EQU 16error_not_same_device EQU 17error_no_more_files EQU 18alloc_not_enough_memory EQU error_not_enough_memoryalloc_arena_trashed EQU error_arena_trashedclose_invalid_handle EQU error_invalid_handleclose_invalid_function EQU error_invalid_functionchdir_path_not_found EQU error_path_not_foundchmod_path_not_found EQU error_path_not_foundchmod_access_denied EQU error_access_deniedchmod_invalid_function EQU error_invalid_functioncreat_access_denied EQU error_access_deniedcreat_path_not_found EQU error_path_not_foundcreat_too_many_open_files EQU error_too_many_open_filescurdir_invalid_drive EQU error_invalid_drivedealloc_invalid_block EQU error_invalid_blockdealloc_arena_trashed EQU error_arena_trasheddup_invalid_handle EQU error_invalid_handledup_too_many_open_files EQU error_too_many_open_filesdup2_invalid_handle EQU error_invalid_handleexec_invalid_function EQU error_invalid_functionexec_bad_environment EQU error_bad_environmentexec_bad_format EQU error_bad_formatexec_not_enough_memory EQU error_not_enough_memoryexec_file_not_found EQU error_file_not_foundfiletimes_invalid_function EQU error_invalid_functionfiletimes_invalid_handle EQU error_invalid_handlefindfirst_file_not_found EQU error_file_not_foundfindfirst_no_more_files EQU error_no_more_filesfindnext_no_more_files EQU error_no_more_filesinternational_invalid_function EQU error_invalid_functionioctl_invalid_handle EQU error_invalid_handleioctl_invalid_function EQU error_invalid_functionioctl_invalid_data EQU error_invalid_datalseek_invalid_handle EQU error_invalid_handlelseek_invalid_function EQU error_invalid_functionmkdir_path_not_found EQU error_path_not_foundmkdir_access_denied EQU error_access_deniedopen_invalid_access EQU error_invalid_accessopen_file_not_found EQU error_file_not_foundopen_access_denied EQU error_access_deniedopen_too_many_open_files EQU error_too_many_open_filesread_invalid_handle EQU error_invalid_handleread_access_denied EQU error_access_deniedrename_file_not_found EQU error_file_not_foundrename_not_same_device EQU error_not_same_devicerename_access_denied EQU error_access_deniedrmdir_path_not_found EQU error_path_not_foundrmdir_access_denied EQU error_access_deniedrmdir_current_directory EQU error_current_directorysetblock_invalid_block EQU error_invalid_blocksetblock_arena_trashed EQU error_arena_trashedsetblock_not_enough_memory EQU error_not_enough_memorysetblock_invalid_function EQU error_invalid_functionunlink_file_not_found EQU error_file_not_foundunlink_access_denied EQU error_access_deniedwrite_invalid_handle EQU error_invalid_handlewrite_access_denied EQU error_access_deniedBREAK ABORT EQU 0 ; 0 0STD_CON_INPUT EQU 1 ; 1 1STD_CON_OUTPUT EQU 2 ; 2 2STD_AUX_INPUT EQU 3 ; 3 3STD_AUX_OUTPUT EQU 4 ; 4 4STD_PRINTER_OUTPUT EQU 5 ; 5 5RAW_CON_IO EQU 6 ; 6 6RAW_CON_INPUT EQU 7 ; 7 7STD_CON_INPUT_NO_ECHO EQU 8 ; 8 8STD_CON_STRING_OUTPUT EQU 9 ; 9 9STD_CON_STRING_INPUT EQU 10 ; 10 ASTD_CON_INPUT_STATUS EQU 11 ; 11 BSTD_CON_INPUT_FLUSH EQU 12 ; 12 CDISK_RESET EQU 13 ; 13 DSET_DEFAULT_DRIVE EQU 14 ; 14 EFCB_OPEN EQU 15 ; 15 FFCB_CLOSE EQU 16 ; 16 10DIR_SEARCH_FIRST EQU 17 ; 17 11DIR_SEARCH_NEXT EQU 18 ; 18 12FCB_DELETE EQU 19 ; 19 13FCB_SEQ_READ EQU 20 ; 20 14FCB_SEQ_WRITE EQU 21 ; 21 15FCB_CREATE EQU 22 ; 22 16FCB_RENAME EQU 23 ; 23 17GET_DEFAULT_DRIVE EQU 25 ; 25 19SET_DMA EQU 26 ; 26 1A;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;GET_DEFAULT_DPB EQU 31 ; 31 1F; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;FCB_RANDOM_READ EQU 33 ; 33 21FCB_RANDOM_WRITE EQU 34 ; 34 22GET_FCB_FILE_LENGTH EQU 35 ; 35 23GET_FCB_POSITION EQU 36 ; 36 24SET_INTERRUPT_VECTOR EQU 37 ; 37 25CREATE_PROCESS_DATA_BLOCK EQU 38 ; 38 26FCB_RANDOM_READ_BLOCK EQU 39 ; 39 27FCB_RANDOM_WRITE_BLOCK EQU 40 ; 40 28PARSE_FILE_DESCRIPTOR EQU 41 ; 41 29GET_DATE EQU 42 ; 42 2ASET_DATE EQU 43 ; 43 2BGET_TIME EQU 44 ; 44 2CSET_TIME EQU 45 ; 45 2DSET_VERIFY_ON_WRITE EQU 46 ; 46 2E; Extended functionality groupGET_DMA EQU 47 ; 47 2FGET_VERSION EQU 48 ; 48 30KEEP_PROCESS EQU 49 ; 49 31;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;GET_DPB EQU 50 ; 50 32; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;SET_CTRL_C_TRAPPING EQU 51 ; 51 33GET_INDOS_FLAG EQU 52 ; 52 34GET_INTERRUPT_VECTOR EQU 53 ; 53 35GET_DRIVE_FREESPACE EQU 54 ; 54 36CHAR_OPER EQU 55 ; 55 37INTERNATIONAL EQU 56 ; 56 38; XENIX CALLS; Directory GroupMKDIR EQU 57 ; 57 39RMDIR EQU 58 ; 58 3ACHDIR EQU 59 ; 59 3B; File GroupCREAT EQU 60 ; 60 3COPEN EQU 61 ; 61 3DCLOSE EQU 62 ; 62 3EREAD EQU 63 ; 63 3FWRITE EQU 64 ; 64 40UNLINK EQU 65 ; 65 41LSEEK EQU 66 ; 66 42CHMOD EQU 67 ; 67 43IOCTL EQU 68 ; 68 44XDUP EQU 69 ; 69 45XDUP2 EQU 70 ; 70 46CURRENT_DIR EQU 71 ; 71 47; Memory GroupALLOC EQU 72 ; 72 48DEALLOC EQU 73 ; 73 49SETBLOCK EQU 74 ; 74 4A; Process GroupEXEC EQU 75 ; 75 4BEXIT EQU 76 ; 76 4CWAIT EQU 77 ; 77 4DFIND_FIRST EQU 78 ; 78 4E; Special GroupFIND_NEXT EQU 79 ; 79 4F; SPECIAL SYSTEM GROUP;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;SET_CURRENT_PDB EQU 80 ; 80 50GET_CURRENT_PDB EQU 81 ; 81 51GET_IN_VARS EQU 82 ; 82 52SETDPB EQU 83 ; 83 53; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;GET_VERIFY_ON_WRITE EQU 84 ; 84 54;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;; C A V E A T P R O G R A M M E R ;; ;DUP_PDB EQU 85 ; 85 55; ;; C A V E A T P R O G R A M M E R ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;RENAME EQU 86 ; 86 56FILE_TIMES EQU 87 ; 87 57SET_OEM_HANDLER EQU 248 ; 248 F8OEM_C1 EQU 249 ; 249 F9OEM_C2 EQU 250 ; 250 FAOEM_C3 EQU 251 ; 251 FBOEM_C4 EQU 252 ; 252 FCOEM_C5 EQU 253 ; 253 FDOEM_C6 EQU 254 ; 254 FEOEM_C7 EQU 255 ; 255 FFSUBTTL  
|