PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 1 = 0001 __RASM__ EQU 1 ; File : $SUPPORT.A86$ ; ; Description : ; ; Original Author : DIGITAL RESEARCH ; ; Last Edited By : $CALDERA$ ; ;-----------------------------------------------------------------------; ; Copyright Work of Caldera, Inc. All Rights Reserved. ; ; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, ; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. ; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES ; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF ; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO ; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE ; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE ; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, ; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, ; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, ; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF ; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT ; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND ; CIVIL LIABILITY. ;-----------------------------------------------------------------------; ; ; *** Current Edit History *** ; *** End of Current Edit History *** ; ; $Log$ ; SUPPORT.A86 1.11 93/11/29 13:39:28 ; Don't rely on DS when return_ called ; ENDLOG ; ; The following Support routines are provided for both the ; handle and FCB functions which require critical error handler ; support. ; ; 15 Jun 88 Modify the SYSDAT and SUPERVISOR variables to enable ; the relocation of the BDOS into high memory ; 5 Jan 89 Only set PCKBD mode if we own the default console ; 9 Mar 89 Support a split PCMODE and SYSDAT Segments ; 22 Sep 89 LDT support routine added ; 29 Jan 90 Int 2A critical section support added to dpbdos_entry ; 7 Mar 90 Convert to register preserved function calls ; 4 May 90 DRDOS int3x handlers removed (they are pointed to IRET ; in PCMODE_DATA by INIT.PCM) ; 12 Dec 90 keep error server number inverted so local = 0, more compatible PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 2 ; = include pcmode.equ = ; File : $PCMODE.EQU$ = ; = ; Description : = ; = ; Original Author : DIGITAL RESEARCH = ; = ; Last Edited By : $CALDERA$ = ; = ;-----------------------------------------------------------------------; = ; Copyright Work of Caldera, Inc. All Rights Reserved. = ; = ; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, = ; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. = ; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES = ; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF = ; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO = ; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE = ; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE = ; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, = ; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, = ; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, = ; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF = ; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT = ; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND = ; CIVIL LIABILITY. = ;-----------------------------------------------------------------------; = ; = ; *** Current Edit History *** = ; *** End of Current Edit History *** = ; = ; $Log$ = ; = ; ENDLOG = ; This file contains all the general purpose definitions = ; and equates used by the PCMODE Module. = ; = = FFFF TRUE equ 0FFFFh ; value of TRUE = 0000 FALSE equ 0 ; value of FALSE = = 0006 TRUE_VERSION equ 6 = = FFFF IDLE_DETECT equ TRUE ; Check for IDLE Process's = = if IDLE_DETECT = 0001 IDLE_COMMAND equ 0001h ; Command Processor Active = 0002 IDLE_DOSFUNC equ 0002h ; DOS Function Called = 0004 IDLE_INT28 equ 0004h ; INT 28 Called = = 4000 IDLE_ON equ 4000h ; ReSet when Idle Checking Enabled PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 3 = 8000 IDLE_INIT equ 8000h ; ReSet when $IDLE$ Loaded and Active = C000 IDLE_DISABLE equ IDLE_INIT + IDLE_ON = = 0001 PROC_IDLE equ 0001 ; Process is IDLE = 0002 PROC_INT28 equ 0002 ; INT28 Polling Loop = 0003 PROC_KEYIN equ 0003 ; Keyboard Input = 0004 PROC_DEVIN equ 0004 ; Device Input Routine = endif = = = 00C0 STACK_SIZE equ 192 ; Local Stack Size (Levels) = 0050 MAX_PATHLEN equ 80 ; Maximum Path length = 000D MAX_FILELEN equ 13 = = ; = ; DOS process termination Codes = ; = 0000 TERM_NORMAL equ 0 ; Normal Termination = 0001 TERM_BREAK equ 1 ; Termination by Control Break = 0002 TERM_ERROR equ 2 ; Termination by Critical Error = 0003 TERM_RESIDENT equ 3 ; Terminate and Stay Resident = = ; = ; Critical Error responses from the default INT 24 handler and = ; the DO_INT24 routine. = ; = 0000 ERR_IGNORE equ 0 ; Ignore Error = 0001 ERR_RETRY equ 1 ; Retry the Operation = 0002 ERR_ABORT equ 2 ; Terminate the Process = 0003 ERR_FAIL equ 3 ; Fail Function = ; = 0008 OK_FAIL equ 0000$1000b ; Fail is a Valid Response = 0010 OK_RETRY equ 0001$0000b ; Retry is a Valid Response = 0020 OK_IGNORE equ 0010$0000b ; Ignore is a valid Response = 0038 OK_RIF equ 0011$1000b ; All Responsese are Valid = 0030 OK_RI equ 0011$0000b ; Retry and Ignore are Valid = 0018 OK_RF equ 0001$1000b ; Retry and Fail are Valid = ; = 0040 NO_CRIT_ERRORS equ 0100$0000b ; critical error shouldn't be generated = ; warning - must match FDOS.A86 = ; PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 4 = eject = ; The following equates define the format in which the users registers = ; are saved on the stack. This format is also seen by an application = ; when a critical error occurs. = ; = CodeMacro POP$DOS ; Pop User Registers a la MS-DOS = db 058h ! db 05Bh ; pop AX ! pop BX = db 059h ! db 05Ah ; pop BX ! pop CX = db 05Eh ! db 05Fh ; pop SI ! pop DI = db 05Dh ; pop BP = db 01Fh ! db 007h ; pop DS ! pop ES = EndM = = CodeMacro PUSH$DOS ; Push User Registers = db 006h ! db 01Eh ; push ES ! push DS = db 055h ; push BP = db 057h ! db 056h ; push DI ! push SI = db 052h ! db 051h ; push DX ! push CX = db 053h ! db 050h ; push BX ! push AX = EndM = = 0000 reg_AX equ word ptr .00 = 0000 reg_AL equ byte ptr .00 = 0001 reg_AH equ byte ptr .01 = = 0002 reg_BX equ word ptr .02 = 0002 reg_BL equ byte ptr .02 = 0003 reg_BH equ byte ptr .03 = = 0004 reg_CX equ word ptr .04 = 0004 reg_CL equ byte ptr .04 = 0005 reg_CH equ byte ptr .05 = = 0006 reg_DX equ word ptr .06 = 0006 reg_DL equ byte ptr .06 = 0007 reg_DH equ byte ptr .07 = = 0008 reg_SI equ word ptr .08 = 000A reg_DI equ word ptr .10 = 000C reg_BP equ word ptr .12 = = 000E reg_DS equ word ptr .14 = 0010 reg_ES equ word ptr .16 = = 0012 reg_IP equ word ptr .18 = 0014 reg_CS equ word ptr .20 = 0016 reg_FLAGS equ word ptr .22 = = ; Processor Flags = 0001 CARRY_FLAG equ 0001h ; Carry Flag = 0040 ZERO_FLAG equ 0040h ; Zero Flag = 0080 SIGN_FLAG equ 0080h ; Sign Flag PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 5 = 0200 INT_FLAG equ 0200h ; Interrupt Flag = 0400 DIR_FLAG equ 0400h ; Direction Flag = 0800 OFLW_FLAG equ 0800h ; OverFlow Flag = = 0000 DMD_ID equ es:byte ptr .0 ; id code ('M' or 'Z') = 0001 DMD_PSP equ es:word ptr .1 ; owner of memory block = 0003 DMD_LEN equ es:word ptr .3 ; length of memory block = 0006 DMD_IDLE_FLAGS equ es:word ptr .6 ; idle flags live here = 0008 DMD_NAME equ es:byte ptr .8 ; ASCIIZ name field = 0008 DMD_NAME_LEN equ 8 ; 8 Bytes long = 004D IDM equ 'M' ; not last id code = 005A IDZ equ 'Z' ; last id code = = PCMCODE GROUP PCM_HEADER, PCM_CODE, BDOS_CODE, PCM_RODATA = PCMCODE GROUP PCM_HISTORY, PCM_ICODE, PCM_CODEND = = PCM_HEADER CSEG PARA = PCM_CODE CSEG BYTE = PCM_RODATA CSEG WORD = BDOS_CODE CSEG WORD = PCM_HISTORY CSEG BYTE = PCM_ICODE CSEG BYTE = PCM_CODEND CSEG PARA = = = PCMDATA GROUP PCMODE_DATA, FDOS_DSEG, FIXED_DOS_DATA = PCMDATA GROUP PCMODE_CODE, GLOBAL_DATA, BDOS_DATA, PCMODE_DSIZE = = PCMODE_DATA DSEG WORD ; DOS Data = FDOS_DSEG DSEG WORD COMMON ; FDOS Parameter Block =0000 fdos_data rw 7 = FIXED_DOS_DATA CSEG WORD 'DATA' ; Fixed DOS Data Area = PCMODE_CODE CSEG WORD 'DATA' ; DATA relative CODE = GLOBAL_DATA DSEG WORD ; GLOBAL DOS DATA (Process Independant) = BDOS_DATA DSEG WORD ; BDOS Data Area = PCMODE_DSIZE DSEG PARA ; End of DOS Data Area = include fdos.def = ; File : $FDOS.DEF$ = ; = ; Description : = ; = ; Original Author : DIGITAL RESEARCH = ; = ; Last Edited By : $CALDERA$ = ; = ;-----------------------------------------------------------------------; = ; Copyright Work of Caldera, Inc. All Rights Reserved. = ; = ; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, = ; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. = ; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 6 = ; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF = ; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO = ; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE = ; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE = ; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, = ; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, = ; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, = ; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF = ; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT = ; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND = ; CIVIL LIABILITY. = ;-----------------------------------------------------------------------; = ; = ; *** Current Edit History *** = ; *** End of Current Edit History *** = ; = ; $Log$ = ; = ; ENDLOG = = 0048 FD_DISKINFO equ 48h = 0049 FD_FLUSH equ 49h = 004A FD_SELECT equ 4Ah = 004B FD_EXEC equ 4Bh = 004C FD_EXIT equ 4Ch = 004D FD_FCB equ 4Dh = 0050 FD_COMMIT equ 50H = 0051 FD_NEW equ 51h = 0052 FD_LOCK equ 52h = 0054 FD_DDIO equ 54h = 0055 FD_EXPAND equ 55h = 0058 FD_REOPEN equ 58h = = 0007 FDOS_MAXPARM equ 7 ; Maximum FDOS Parameter Length (WORDS) = = 0000 FD_FUNC equ fdos_data = = 0002 FD_DRIVE equ fdos_data + 2 = 0004 FD_DPB equ dword ptr fdos_data + 4 = 0004 FD_DPBOFF equ fdos_data + 4 = 0006 FD_DPBSEG equ fdos_data + 6 = 0008 FD_ADJUST equ fdos_data + 8 = = 0002 FD_NAME equ dword ptr fdos_data + 2 = 0002 FD_NAMEOFF equ fdos_data + 2 = 0004 FD_NAMESEG equ fdos_data + 4 = = 0006 FD_MODE equ fdos_data + 6 = = 0002 FD_HANDLE equ fdos_data + 2 = = 0004 FD_BUF equ dword ptr fdos_data + 4 PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 7 = 0004 FD_BUFOFF equ fdos_data + 4 = 0006 FD_BUFSEG equ fdos_data + 6 = = 0008 FD_COUNT equ fdos_data + 8 = = 0004 FD_OFFSET equ dword ptr fdos_data + 4 = = 0008 FD_METHOD equ fdos_data + 8 = = 0006 FD_FLAG equ fdos_data + 6 = = 0008 FD_ATTRIB equ fdos_data + 8 = = 0004 FD_PATH equ dword ptr fdos_data + 4 = 0004 FD_PATHOFF equ fdos_data + 4 = 0006 FD_PATHSEG equ fdos_data + 6 = = 0002 FD_ONAME equ dword ptr fdos_data + 2 = 0002 FD_ONAMEOFF equ fdos_data + 2 = 0004 FD_ONAMESEG equ fdos_data + 4 = = 000A FD_NNAME equ dword ptr fdos_data + 10 = 000A FD_NNAMEOFF equ fdos_data + 10 = 000C FD_NNAMESEG equ fdos_data + 12 = = 0004 FD_SFLAG equ fdos_data + 4 = 0006 FD_DATE equ fdos_data + 6 = 0008 FD_TIME equ fdos_data + 8 = = 0008 FD_LENGTH equ dword ptr fdos_data + 8 = 000C FD_LFLAG equ word ptr fdos_data + 12 = = 0004 FD_NEWHND equ fdos_data + 4 = = 0002 FD_FCBADR equ dword ptr fdos_data + 2 = 0002 FD_FCBOFF equ fdos_data + 2 = 0004 FD_FCBSEG equ fdos_data + 4 = = 0006 FD_FCBCNT equ fdos_data + 6 = 0008 FD_FCBFUNC equ fdos_data + 8 = = 0002 FD_PSPSEG equ fdos_data + 2 = = 0002 FD_BPBOFF equ fdos_data + 2 = 0004 FD_BPBSEG equ fdos_data + 4 = 0006 FD_DDSCOFF equ fdos_data + 6 = 0008 FD_DDSCSEG equ fdos_data + 8 = = 0004 FD_IOCTLFUNC equ fdos_data + 4 = 0006 FD_IOCTLSTAT equ fdos_data + 6 = = 0002 FD_NUMOPEN equ fdos_data + 2 PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 8 = = 0002 FD_DDIO_DRV_OP equ fdos_data + 2 = 0004 FD_DDIO_NSECTORS equ fdos_data + 4 = 0006 FD_DDIO_STARTLOW equ fdos_data + 6 = 0008 FD_DDIO_STARTHIGH equ fdos_data + 8 = 000A FD_DDIO_DMAOFF equ fdos_data + 10 = 000C FD_DDIO_DMASEG equ fdos_data + 12 = = include i:mserror.equ = ; File : $MSERROR.EQU$ = ; = ; Description : = ; = ; Original Author : DIGITAL RESEARCH = ; = ; Last Edited By : $CALDERA$ = ; = ;-----------------------------------------------------------------------; = ; Copyright Work of Caldera, Inc. All Rights Reserved. = ; = ; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, = ; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. = ; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES = ; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF = ; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO = ; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE = ; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE = ; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, = ; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, = ; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, = ; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF = ; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT = ; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND = ; CIVIL LIABILITY. = ;-----------------------------------------------------------------------; = ; = ; *** Current Edit History *** = ; *** End of Current Edit History *** = ; = ; $Log$ = ; = ; ENDLOG = = FFFF ED_FUNCTION equ -01 ; invalid function number = FFFE ED_FILE equ -02 ; file not found = FFFD ED_PATH equ -03 ; path not found = FFFC ED_HANDLE equ -04 ; too many open files = FFFB ED_ACCESS equ -05 ; file access denied = FFFA ED_H_MATCH equ -06 ; invalid handle number = FFF9 ED_DMD equ -07 ; memory descriptor destroyed = FFF8 ED_MEMORY equ -08 ; insufficient memory PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 9 = FFF7 ED_BLOCK equ -09 ; invalid memory block addr = FFF6 ED_ENVIRON equ -10 ; invalid environment = FFF5 ED_FORMAT equ -11 ; invalid format = FFF4 ED_ACC_CODE equ -12 ; invalid access code = FFF3 ED_DATA equ -13 ; invalid data = FFF1 ED_DRIVE equ -15 ; invalid drive specified = FFF0 ED_DIR equ -16 ; can't remove current dir = FFEF ED_DEVICE equ -17 ; not same device = FFEE ED_ROOM equ -18 ; no more files = = FFED ED_PROTECT equ -19 ; disk write protected = FFEC ED_BADUNIT equ -20 ; invalid drive specified = FFEB ED_NOTREADY equ -21 ; drive doesn't respond = FFEA ED_BADCMD equ -22 ; invalid command to driver = FFE9 ED_BADDATA equ -23 ; data CRC error = FFE8 ED_BADRHLEN equ -24 ; (shouldn't happen) = FFE7 ED_BADSEEK equ -25 ; can't seek to track = FFE6 ED_BADMEDIA equ -26 ; unrecognizable medium = FFE5 ED_RNF equ -27 ; record/sector not found = FFE4 ED_NOPAPER equ -28 ; printer error = FFE3 ED_WRFAIL equ -29 ; write failed = FFE2 ED_RDFAIL equ -30 ; read failed = FFE1 ED_GENFAIL equ -31 ; anything failed = FFE0 ED_SHAREFAIL equ -32 ; sharing conflict = FFDF ED_LOCKFAIL equ -33 ; locking conflict = FFDE ED_DISKCHG equ -34 ; invalid disk change = FFDD ED_NOFCBS equ -35 ; FCB table exhausted = FFDC ED_NOLOCKS equ -36 ; lock list items exhausted = FFCE ED_NET equ -50 ; Network Request Not Supported = = FFBF ED_NETACCESS equ -65 ; file access denied = = FFB7 ED_NETPWD equ -73 ; Server Password Error = FFB6 ED_NETVER equ -74 ; Incorrect Server version = FFB5 ED_NETREQ equ -75 ; No Local Network Resources = FFB4 ED_NETTIME equ -76 ; Network Time Out Error = FFB3 ED_NETCOMM equ -77 ; Network Communications Error = FFB2 ED_NETSRVR equ -78 ; No Server Network Resources = FFB1 ED_NETLOG equ -79 ; Server Not Logged In = = FFB0 ED_EXISTS equ -80 ; file already exists = FFAE ED_MAKE equ -82 ; Cannot Make (Files ??) = FFAD ED_FAIL equ -83 ; FAIL code returned from INT 24 = FFAC ED_STRUCT equ -84 ; Out of Structures = FFAB ED_ASSIGN equ -85 ; Already Assigned = FFAA ED_PASSWORD equ -86 ; Invalid Password = FFA9 ED_PARAM equ -87 ; Invalid Parameter = FFA8 ED_NETWRITE equ -88 ; Network write fault = FFA7 ED_NETFUNC equ -89 ; Function not supported on network = FFA6 ED_COMPONENT equ -90 ; system component not installed = FFA6 ED_LASTERROR equ -90 ; Last Error Number Used = PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 10 = = 0001 CLASS_RESOURCE equ 1 ; Out of Resource = 0002 CLASS_TEMP equ 2 ; Temporary Situation = 0003 CLASS_AUTHOR equ 3 ; Authorization Error = 0004 CLASS_INTERNAL equ 4 ; Internal System Software Error = 0005 CLASS_HARDWARE equ 5 ; Hardware Failure = 0006 CLASS_SYSTEM equ 6 ; Serious System Failure = 0007 CLASS_APPLIC equ 7 ; Application Program Error = 0008 CLASS_LOST equ 8 ; File/Item Not Found = 0009 CLASS_FORMAT equ 9 ; File/Item Illegal Format = 000A CLASS_LOCKED equ 10 ; File/Item Locked = 000B CLASS_MEDIA equ 11 ; Media Failure = 000C CLASS_EXISTS equ 12 ; Item Already Exists = 000D CLASS_UNKNOWN equ 13 ; Unknown Classification = = 0001 ACT_RETRY equ 1 ; Retry a few times then prompt user = 0002 ACT_DELAY equ 2 ; Delay then as ACT_RETRY = 0003 ACT_USER equ 3 ; Prompt user to re-enter data = 0004 ACT_ABORT equ 4 ; Clean Up then ABORT the process = 0005 ACT_TERM equ 5 ; Terminate immeadiately NO CLEAN UP = 0006 ACT_IGNORE equ 6 ; Ignore the Error = 0007 ACT_URETRY equ 7 ; Retry the error after user intervention = = 0001 LOC_UNKNOWN equ 1 ; Unknown error location = 0002 LOC_BLOCK equ 2 ; Block Device Failure = 0003 LOC_NET equ 3 ; Network Failure = 0004 LOC_CHAR equ 4 ; Related to Serial/Character devices = 0005 LOC_MEMORY equ 5 ; Failure related to Memory = include i:doshndl.def = ; File : $DOSHNDL.DEF$ = ; = ; Description : = ; = ; Original Author : DIGITAL RESEARCH = ; = ; Last Edited By : $CALDERA$ = ; = ;-----------------------------------------------------------------------; = ; Copyright Work of Caldera, Inc. All Rights Reserved. = ; = ; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL, = ; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC. = ; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES = ; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF = ; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO = ; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE = ; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE = ; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, = ; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, = ; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, = ; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 11 = ; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT = ; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND = ; CIVIL LIABILITY. = ;-----------------------------------------------------------------------; = ; = ; *** Current Edit History *** = ; *** End of Current Edit History *** = ; = ; $Log$ = ; = ; ENDLOG = = 0000 DCNTRL_DSADD equ dword ptr 0000h = 0000 DCNTRL_DSOFF equ word ptr 0000h = 0002 DCNTRL_DSSEG equ word ptr 0002h = 0004 DCNTRL_COUNT equ word ptr 0004h = 0006 DCNTRL_LEN equ 6 = = 0000 DHNDL_COUNT equ word ptr 00h ; 00 - Usage Count = 0002 DHNDL_MODE equ word ptr 02h ; 02 - File Mode = = 8000 DHM_FCB equ 8000h ; marks as FCB = 4000 DHM_COMMIT equ 4000h ; auto-commit file = 2000 DHM_NOCRIT equ 2000h ; no critical errors = 0080 DHM_LOCAL equ 10000000b ; file is not inherited = 0070 DHM_SHAREMSK equ 01110000b ; sharing bits = 0000 DHM_COMPAT equ 00000000b = 0010 DHM_DENY_ALL equ 00010000b ; exclusive - deny all = 0020 DHM_DENY_WRITE equ 00100000b = 0030 DHM_DENY_READ equ 00110000b = 0040 DHM_DENY_NONE equ 01000000b = 000F DHM_RWMSK equ 00001111b ; read write bits = 0002 DHM_RW equ 00000010b ; file opened read/write = 0001 DHM_WO equ 00000001b ; file opened write only = 0000 DHM_RO equ 00000000b ; file opened read only = = ; = ; 01h to 03h To be Determined = ; = 0004 DHNDL_DATRB equ byte ptr 04h ; Disk attribute byte = 0005 DHNDL_ATTR equ byte ptr 05h ; Attribute Byte = 0005 DHNDL_WATTR equ word ptr 05h ; Attribute Word = = 8000 DHAT_REMOTE equ 8000h ; set if file remote = 4000 DHAT_TIMEOK equ 4000h ; set if timestamp up to date = 1000 DHAT_LOCAL equ 1000h ; file is not inherited = 0800 DHAT_NETPRN equ 0800h ; device is networked printer = 0080 DHAT_DEV equ 0080h ; device/file bit = 0040 DHAT_READY equ 0040h ; ready/not ready bit = 0040 DHAT_CLEAN equ 0040h ; this bit CLEAR if dirty = 0020 DHAT_BIN equ 0020h ; raw/cooked bit = 001F DHAT_DRVMSK equ 001Fh ; drive in bottom bits PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 12 = 0008 DHAT_CLK equ 0008h ; -reserved- = 0004 DHAT_NUL equ 0004h ; handle is null device = 0002 DHAT_COT equ 0002h ; handle is console output device = 0001 DHAT_CIN equ 0001h ; handle is console input device = = 0007 DHNDL_DEVPTR equ dword ptr 07h ; 07 - pointer to device = 0007 DHNDL_DEVOFF equ word ptr 07h ; 07 - offset of device = 0009 DHNDL_DEVSEG equ word ptr 09h ; 09 - segment of device = 000B DHNDL_BLK1 equ word ptr 0Bh ; 0B - first cluster in file = 000D DHNDL_TIME equ word ptr 0Dh ; 0D - file time stamp = 000F DHNDL_DATE equ word ptr 0Fh ; 0F - file date stamp = 0011 DHNDL_SIZE equ dword ptr 11h ; 11 - file length = 0011 DHNDL_SIZELO equ word ptr 11h = 0013 DHNDL_SIZEHI equ word ptr 13h = 0015 DHNDL_POS equ dword ptr 15h ; 15 - current file position = 0015 DHNDL_POSLO equ word ptr 15h = 0017 DHNDL_POSHI equ word ptr 17h = 0019 DHNDL_IDX equ word ptr 19h ; 19 - relative cluster within file of last read = 001B DHNDL_DBLK equ word ptr 1Bh ; 1B - cluster # of dir entry = 001E DHNDL_DCNTHI equ byte ptr 1Eh ; 1E - dir offset # within cluster = 001F DHNDL_DCNTLO equ byte ptr 1Fh ; 1F - dir offset # within cluster = 0020 DHNDL_NAME equ byte ptr 20h ; 20 - File/Device Name = 0028 DHNDL_EXT equ byte ptr 28h ; 28 - File extension = 002B DHNDL_SFT equ dword ptr 2Bh ; 2B - pointer to previous SFT = 002F DHNDL_UID equ word ptr 2Fh ; 2F - Owning Machine ID = 0031 DHNDL_PSP equ word ptr 31h ; 31 - Owning PSP = 0033 DHNDL_SHARE equ word ptr 33h ; 33 - Offset of sharing record = 0035 DHNDL_BLK equ word ptr 35h ; 35 - absolute cluster of last read = ; 37 - dword reserved for IFS = 003B DHNDL_LEN equ 3Bh = = ; With DOS 3 structures _DBLK is a 16 bit = = = ; Logical Drive Table format = 0000 LDT_NAME equ byte ptr 00h ; 00 - Ascii Name field = 0043 LDT_FLAGS equ word ptr 43h ; 43 - Flag field = 0045 LDT_PDT equ dword ptr 45h ; 45 - PDT for this drive = 0049 LDT_BLK equ word ptr 49h ; 49 - directory sector = 004B LDT_ROOT equ word ptr 4bh ; 4B - virtual block root = 004D LDT_DRV equ byte ptr 4dh ; 4D - physical drive = 004F LDT_ROOTLEN equ word ptr 4fh ; 4F - Length of root portion = 0058 LDT_LEN equ 58h = = 8000 LFLG_NETWRKD equ 8000h = 4000 LFLG_PHYSICAL equ 4000h = 2000 LFLG_JOINED equ 2000h = 1000 LFLG_SUBST equ 1000h PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 13 eject PCM_CODE CSEG BYTE extrn error_exit:near ; Standard Error Exit Routine extrn fcberror_exit:near ; Special FCB function Error Exit extrn fdos_entry:near extrn get_dseg:near PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 14 eject ; ; STRLEN determines the length of the string passed in DS:SI ; and returns the byte length in CX. ; Public strlen strlen: 0000 0657 push es ! push di 0002 1E07 push ds ! pop es 0004 8BFE mov di,si 0006 B9FFFF mov cx,0FFFFh 0009 2AC0 sub al,al 000B F2AE repnz scasb 000D 5F07 pop di ! pop es 000F F7D1 not cx 0011 49 dec cx 0012 C3 ret PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 15 eject ; ; This routine sets the address to be returned to by the ; FDOS when an error has occured and the RETRY request has been ; made. The set_retry routine should be used as follows:- ; ; mov al,Valid Error Responses ; call set_retry ; Init All FDOS Parameters ; call fdos_crit ; ; NB. For register model return with AX = dos_AL extended to 16 bit Public set_retry_RF set_retry_RF: 0013 B018 mov al,OK_RF ; Valid to RETRY or FAIL ; jmp set_retry ; (the most common case) Public set_retry set_retry: 0015 A20000 E mov valid_flg,al ; Save Valid Error Reponses 0018 8F060000 E pop retry_off ; Save the Routine Address 001C 89260000 E mov retry_sp,sp ; and the Stack Pointer 0020 8AC4 mov al,ah ; get function number 0022 32E4 xor ah,ah ; make it a word 0024 A30000 R mov FD_FUNC,ax ; save it for the FDOS 0027 1E push ds 0028 53 push bx 0029 C51E0000 E lds bx,int21regs_ptr ; point to users registers 002D 816716FEFF and reg_FLAGS[bx],not CARRY_FLAG 0032 8A07 mov al,reg_AL[bx] ; clear CY assuming we will succeed 0034 5B pop bx ; and reload AL with entry value 0035 1F pop ds 0036 FF260000 E jmp retry_off ; ; The FDOS routine executes the CCP/M FDOS function using the ; static FDOS parameter block defined in the Data Segment. ; Public fdos_crit fdos_crit: 003A E84400 0081 call fdos_nocrit 003D 3DA6FF cmp ax,ED_LASTERROR ; Compare against last error code 0040 731E 0060 jnb fdos_error ; if NOT below then is ERROR CODE 0042 0BC0 or ax,ax ; Reset the Carry Flag and Return 0044 C3 ret Public fdos_ax_crit fdos_ax_crit: 0045 E83900 0081 call fdos_nocrit 0048 3DA6FF cmp ax,ED_LASTERROR ; Compare against last error code 004B 7313 0060 jnb fdos_error ; if NOT below then is ERROR CODE PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 16 004D 0BC0 or ax,ax ; Reset the Carry Flag and Return ; jmp return_AX_CLC ; Save the Return Code Public return_AX_CLC return_AX_CLC: ;------------- ; On Entry: ; AX to be returned to caller in AX ; On Exit: ; ES:DI trashed ; 004F 1E57 push ds ! push di 0051 36C53E0000 E lds di,ss:int21regs_ptr 0056 8905 mov reg_AX[di],ax ; return AX to caller 0058 816516FEFF and reg_FLAGS[di],not CARRY_FLAG 005D 5F1F pop di ! pop ds 005F C3 ret fdos_error: ; Process the Error 0060 3B260000 E cmp sp,retry_sp ; Is the user expecting use to 0064 7503 0069 jnz fdos_e10 ; return or use the default handler 0066 E90000 E jmp error_exit ; If CALLed then return with the error fdos_e10: ; to the calling routine. 0069 F9 stc 006A C3 ret Public fcbfdos_crit fcbfdos_crit: 006B E81300 0081 call fdos_nocrit 006E 3DA6FF cmp ax,ED_LASTERROR ; Compare against last error code 0071 7303 0076 jnb fcbfdos_error ; if NOT below then is ERROR CODE 0073 0BC0 or ax,ax ; Reset the Carry Flag and Return 0075 C3 ret fcbfdos_error: ; Process the Error 0076 3B260000 E cmp sp,retry_sp ; Is the user expecting use to 007A 7503 007F jnz fcbfdos_e10 ; return or use the default handler 007C E90000 E jmp fcberror_exit ; If CALLed then return with the error fcbfdos_e10: ; to the calling routine. 007F F9 stc 0080 C3 ret Public fdos_nocrit fdos_nocrit: 0081 BA0000 R mov dx,offset fdos_data ; point to fdos parameter block 0084 1E06 push ds ! push es 0086 565755 push si ! push di ! push bp 0089 E80000 E call fdos_entry ; BDOS module entry point 008C 0BC0 or ax,ax ; Set the Flags 008E 5D5F5E pop bp ! pop di ! pop si 0091 071F pop es ! pop ds PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 17 0093 C3 ret Public reload_ES reload_ES: ; On Entry: ; None ; On Exit: ; ES = callers ES ; All regs preserved ; 0094 53 push bx 0095 36C41E0000 E les bx,ss:int21regs_ptr 009A 268E4710 mov es,es:reg_ES[bx] ; reload with callers ES 009E 5B pop bx 009F C3 ret Public return_BX return_BX: ;--------- ; On Entry: ; BX to be returned to caller in BX ; On Exit: ; All regs preserved ; 00A0 1E53 push ds ! push bx 00A2 36C5360000 E lds si,ss:int21regs_ptr 00A7 895C02 mov reg_BX[si],bx ; return BX to caller 00AA 5B1F pop bx ! pop ds 00AC C3 ret Public return_CX return_CX: ;--------- ; On Entry: ; CX to be returned to caller in CX ; On Exit: ; All regs preserved ; 00AD 1E53 push ds ! push bx 00AF 36C51E0000 E lds bx,ss:int21regs_ptr 00B4 894F04 mov reg_CX[bx],cx ; return CX to caller 00B7 5B1F pop bx ! pop ds 00B9 C3 ret Public return_DX return_DX: ;--------- ; On Entry: ; DX to be returned to caller in DX ; On Exit: PC-DOS RASM-86 1.4a Source: SUPPORT.A86 Page 18 ; All regs preserved ; 00BA 1E53 push ds ! push bx 00BC 36C51E0000 E lds bx,ss:int21regs_ptr 00C1 895706 mov reg_DX[bx],dx ; return DX to caller 00C4 5B1F pop bx ! pop ds 00C6 C3 ret PCMODE_DATA DSEG WORD extrn current_psp:word extrn DBCS_tbl:word ; double byte character set table extrn int21regs_ptr:dword extrn retry_off:word extrn retry_sp:word extrn valid_flg:byte end End of assembly. Number of errors: 0. Use factor: 16% RD extrn current_psp:word