This commit is contained in:
2020-11-04 23:59:28 +01:00
commit 34b50d2a29
232 changed files with 86161 additions and 0 deletions

1474
IBMDOS/BDEVIO.A86 Normal file

File diff suppressed because it is too large Load Diff

80
IBMDOS/BDOS.EQU Normal file
View File

@@ -0,0 +1,80 @@
; File : $BDOS.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
;
; Search variables
;
NEXT equ 0
EMPTY equ 1
DOT equ 2eh ; '.'
DRIVEN equ 0dh ; (0 rel)
DRIVEP equ 0fh ; (0 rel)
DSKMAP equ 16
; struct pcfcb
DRIVE equ 0 ;drive
FNAME equ 1 ;file name & type
EXTENT equ 12 ;extent (0 - 31)
CHKSUM equ 13 ;checksum
MODULE equ 14 ;module (0 - 63)
; 0x80 - file extended flag
; 0x40 - file write flag
RCDCNT equ 15 ;record count (0 - 128)
PCFCB1 equ 16 ;PCDOS fcb flag byte
; 0x1f - high byte of file's dcnt
; 0x20 - hidden
; 0x40 - sub-directory
; 0x80 - always one
PCFCB2 equ 17 ;same as pcfcb1
LOWDCNT equ 18 ;low byte of file's dcnt
CBFLAG equ 19 ;current block flag
CBLOCK equ 20 ;current block (2 bytes)
CBLKIDX equ 22 ;current block index (2 bytes)
TIME equ 22 ;time (hhhhhmmmmmmsssss)
DATE equ 24 ;date (yyyyyyymmmmddddd)
BLOCK1 equ 26 ;first block in file
CSIZE equ 28 ;current file size (2 words)
CR equ 32 ;current record
RR0 equ 33 ;random record field (byte 0)
RR1 equ 34 ;random record field (byte 1)
RR2 equ 35 ;random record field (byte 2)
;struct fcb
FCBLEN equ 32 ; size of file control block
FCBSHF equ 5 ; log2(fcblen)

BIN
IBMDOS/BIN/BDEVIO.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/BUFFERS.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/CDEVIO.OBJ Normal file

Binary file not shown.

2496
IBMDOS/BIN/CIO.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/CIO.OBJ Normal file

Binary file not shown.

219
IBMDOS/BIN/CIO.SYM Normal file
View File

@@ -0,0 +1,219 @@
0000 VARIABLES
0000 BREAK_SP 0000 CHAR_COUNT 0000 CIO_STATE 0000 CLOCK_COUNT
0000 CNTRL_C_MSG 0000 COLUMN 0000 CON_DEVICE
0000 CURRENT_PSP 0000 DMD_ID 0006 DMD_IDLE_FLAGS
0003 DMD_LEN 0008 DMD_NAME 0001 DMD_PSP 0000 EXIT_TYPE 0000 FDOS_DATA
0000 IDLE_FLAGS 0000 IDLE_VEC 0000 INDOS_FLAG 0000 INT21REGS_PTR
0000 INT28_DELAY 0000 INT28_FLAG 0000 INT28_RELOAD
0000 LAST_KEY_EXT 0000 MACHINE_ID 0010 PSP_BREAK_CS
000E PSP_BREAK_IP 0080 PSP_COMLEN 0081 PSP_COMLINE
0050 PSP_DOSCALL 0052 PSP_DOSRETF
002C PSP_ENVIRON 0014 PSP_ERROR_CS
0012 PSP_ERROR_IP 005C PSP_FCB1 006C PSP_FCB2 0000 PSP_INT20
0005 PSP_LONGCALL 0006 PSP_LONGOFF
0008 PSP_LONGSEG 0002 PSP_MEMORY 0016 PSP_PARENT 0038 PSP_RES1
003A PSP_RES2 003C PSP_RIC 000C PSP_TERM_CS
000A PSP_TERM_IP 002E PSP_USERSP 0030 PSP_USERSS
0040 PSP_VERSION 0032 PSP_XFNMAX 0018 PSP_XFT 0034 PSP_XFTOFF
0034 PSP_XFTPTR 0036 PSP_XFTSEG 0001 REG_AH 0000 REG_AL 0000 REG_AX
0003 REG_BH 0002 REG_BL 000C REG_BP 0002 REG_BX 0005 REG_CH
0004 REG_CL 0014 REG_CS 0004 REG_CX 0007 REG_DH 000A REG_DI
0006 REG_DL 000E REG_DS 0006 REG_DX 0010 REG_ES 0016 REG_FLAGS
0012 REG_IP 0008 REG_SI 0000 REMOTE_CALL 0012 RH0_BPBOFF
0014 RH0_BPBSEG 0016 RH0_DRIVE 000D RH0_NUNITS 000E RH0_RESIDENT
000D RH19_CATEGORY 0011 RH19_DI 0013 RH19_GENPB 000D RH19_MAJOR
000E RH19_MINOR 000F RH19_SI 000D RH1_MEDIA 000E RH1_RETURN 000F RH1_VOLID
000E RH24_CMD 0011 RH24_RESVD 000F RH24_STATUS 0012 RH2_BPB
0012 RH2_BPBOFF 0014 RH2_BPBSEG 000E RH2_BUFFER 000D RH2_MEDIA
001A RH4_BIGSECTOR 001C RH4_BIGSECTORHI
001A RH4_BIGSECTORLO 000E RH4_BUFFER 000E RH4_BUFOFF 0010 RH4_BUFSEG
0012 RH4_COUNT 000D RH4_MEDIA 000D RH4_RIC 0014 RH4_SECTOR 0016 RH4_VOLID
000D RH5_CHAR 000D RH5_RIC 0002 RH_CMD 0000 RH_LEN 0003 RH_STATUS
0001 RH_UNIT
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 000A BCB_COPIES 0014 BCB_DATA 000D BCB_DDSC
0004 BCB_DRV 0005 BCB_FLAGS 0000 BCB_NEXT 0002 BCB_PREV 0006 BCB_REC
0008 BCB_REC2 0011 BCB_REMOTE 000B BCB_SEPARATION 0007 BELL
0040 BF_DIRTY 0008 BF_ISDAT 0004 BF_ISDIR 0002 BF_ISFAT 0080 BF_REMOTE
0001 CARRY_FLAG 0050 CHECK_EVERY 0001 CIO_CTLP 0002 CIO_HANDLE
0004 CIO_RAW 0007 CLASS_APPLIC 0003 CLASS_AUTHOR
000C CLASS_EXISTS 0009 CLASS_FORMAT
0005 CLASS_HARDWARE 0004 CLASS_INTERNAL
000A CLASS_LOCKED 0008 CLASS_LOST 000B CLASS_MEDIA
0001 CLASS_RESOURCE 0006 CLASS_SYSTEM 0002 CLASS_TEMP
000D CLASS_UNKNOWN 0002 CMD_BUILD_BPB
000E CMD_DEVICE_CLOSE 000D CMD_DEVICE_OPEN
000F CMD_FIXED_MEDIA 0013 CMD_GENERIC_IOCTL
0017 CMD_GET_DEVICE 0000 CMD_INIT 0004 CMD_INPUT
0007 CMD_INPUT_FLUSH 0003 CMD_INPUT_IOCTL
0005 CMD_INPUT_NOWAIT 0006 CMD_INPUT_STATUS
0001 CMD_MEDIA_CHECK 0008 CMD_OUTPUT 000B CMD_OUTPUT_FLUSH
000C CMD_OUTPUT_IOCTL 000A CMD_OUTPUT_STATUS
0009 CMD_OUTPUT_VERIFY 0019 CMD_QUERY_IOCTL
0018 CMD_SET_DEVICE 000D CR 005E CTL 0001 CTLA
0002 CTLB 001C CTLBS 0003 CTLC 0004 CTLD 0005 CTLE
0006 CTLF 0007 CTLG 0008 CTLH 0009 CTLI 000A CTLJ
000B CTLK 000D CTLM 0010 CTLP 0011 CTLQ 0012 CTLR
0013 CTLS 0014 CTLT 0015 CTLU 001F CTLUB 001E CTLUP
0016 CTLV 0017 CTLW 0018 CTLX 0019 CTLY 001A CTLZ
000B DATTS 0020 DA_ARCHIVE 0002 DA_BIGDRV FF27 DA_CHANGE 8000 DA_CHARDEV
0080 DA_CLUSTER 0080 DA_DELWATCH 0010 DA_DIR 00D8 DA_FIXED
0040 DA_GETSET 0002 DA_HIDDEN 4000 DA_IOCTL 0001 DA_ISCIN 0008 DA_ISCLK
0002 DA_ISCOT 0004 DA_ISNUL 2000 DA_NONIBM 2000 DA_OTILBSY 0080 DA_QUERY
0800 DA_REMOVE 0001 DA_RO 0010 DA_SPECIAL 0004 DA_SYSTEM 0008 DA_VOLUME
001A DBLOCK1 0004 DCNTRL_COUNT 0000 DCNTRL_DSADD
0000 DCNTRL_DSOFF 0002 DCNTRL_DSSEG 0006 DCNTRL_LEN
0018 DDATE 001D DDSC_BLOCK 0004 DDSC_CLMSK 0005 DDSC_CLSHF
000B DDSC_DATADDR 0013 DDSC_DEVHEAD
0013 DDSC_DEVOFF 0015 DDSC_DEVSEG
0011 DDSC_DIRADDR 0009 DDSC_DIRENT
0006 DDSC_FATADDR 0018 DDSC_FIRST 001F DDSC_FREE 0021 DDSC_LEN
0019 DDSC_LINK 0017 DDSC_MEDIA 000D DDSC_NCLSTRS
000F DDSC_NFATRECS 0008 DDSC_NFATS 0001 DDSC_RUNIT
0002 DDSC_SECSIZE 0000 DDSC_UNIT 007F DEL
0002 DELW_DELETE 0003 DELW_FREECLU
0004 DELW_FREERD 0007 DELW_NEWDISK 000E DELW_PURGE
0000 DELW_RDMASK 0005 DELW_SPACE 000F DELW_UNDEL 0020 DHAT_BIN
0001 DHAT_CIN 0040 DHAT_CLEAN 0008 DHAT_CLK 0002 DHAT_COT 0080 DHAT_DEV
001F DHAT_DRVMSK 1000 DHAT_LOCAL 0800 DHAT_NETPRN
0004 DHAT_NUL 0040 DHAT_READY 8000 DHAT_REMOTE
4000 DHAT_TIMEOK 4000 DHM_COMMIT 0000 DHM_COMPAT
0010 DHM_DENY_ALL 0040 DHM_DENY_NONE
0030 DHM_DENY_READ 0020 DHM_DENY_WRITE 8000 DHM_FCB
0080 DHM_LOCAL 2000 DHM_NOCRIT 0000 DHM_RO 0002 DHM_RW 000F DHM_RWMSK
0070 DHM_SHAREMSK 0001 DHM_WO 0005 DHNDL_ATTR 0035 DHNDL_BLK
000B DHNDL_BLK1 0000 DHNDL_COUNT 000F DHNDL_DATE
0004 DHNDL_DATRB 001B DHNDL_DBLK 001E DHNDL_DCNTHI
001F DHNDL_DCNTLO 0007 DHNDL_DEVOFF
0007 DHNDL_DEVPTR 0009 DHNDL_DEVSEG 0028 DHNDL_EXT
0019 DHNDL_IDX 003B DHNDL_LEN 0002 DHNDL_MODE 0020 DHNDL_NAME 0015 DHNDL_POS
0017 DHNDL_POSHI 0015 DHNDL_POSLO 0031 DHNDL_PSP
002B DHNDL_SFT 0033 DHNDL_SHARE 0011 DHNDL_SIZE
0013 DHNDL_SIZEHI 0011 DHNDL_SIZELO 000D DHNDL_TIME
002F DHNDL_UID 0005 DHNDL_WATTR 0004 DH_ATTRIB
0008 DH_INTERRUPT 000A DH_NAME 0000 DH_NEXT 0000 DH_NEXTOFF
0002 DH_NEXTSEG 0006 DH_STRATEGY 0400 DIR_FLAG
0008 DMD_NAME_LEN 0012 DMODDATE 0010 DMODTIME 0000 DNAME
0021 DOS_INT 000E DPWD 0014 DPWM 001C DSIZE 0016 DTIME
000D DUNDEL FFFB ED_ACCESS FFF4 ED_ACC_CODE FFAB ED_ASSIGN
FFEA ED_BADCMD FFE9 ED_BADDATA FFE6 ED_BADMEDIA
FFE8 ED_BADRHLEN FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK
FFA6 ED_COMPONENT FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR
FFDE ED_DISKCHG FFF9 ED_DMD FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS
FFAD ED_FAIL FFFE ED_FILE FFF5 ED_FORMAT FFFF ED_FUNCTION
FFE1 ED_GENFAIL FFFC ED_HANDLE FFFA ED_H_MATCH FFA6 ED_LASTERROR
FFDF ED_LOCKFAIL FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET
FFBF ED_NETACCESS FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG
FFB7 ED_NETPWD FFB5 ED_NETREQ FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER
FFA8 ED_NETWRITE FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER
FFEB ED_NOTREADY FFA9 ED_PARAM FFAA ED_PASSWORD
FFFD ED_PATH FFED ED_PROTECT FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM
FFE0 ED_SHAREFAIL FFAC ED_STRUCT FFE3 ED_WRFAIL FFFF ENDDIR
0002 ERR_ABORT 0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY 001B ESC
0000 FALSE 0029 FASTCON_INT 0FFF FAT12 FFFF FAT16
0004 HCB_CLU 0006 HCB_CNT 0008 HCB_DATA 0002 HCB_DRV 0000 HCB_LINK
1105 I2F_CHDIR 1106 I2F_CLOSE 1107 I2F_COMMIT 1117 I2F_CREATE 1126 I2F_CTLP
1124 I2F_CTLP_ERR 1113 I2F_DEL 1120 I2F_FLUSH
110F I2F_GET_ATTR 110A I2F_LOCK 1121 I2F_LSEEK 1103 I2F_MKDIR
1116 I2F_OPEN 111D I2F_PCLOSE 1123 I2F_PPATH 1100 I2F_PRESCENCE
1122 I2F_PTERM 1108 I2F_READ 1125 I2F_REDIR_5D
111F I2F_REDIR_5E 111E I2F_REDIR_5F 1111 I2F_REN
1101 I2F_RMDIR 110E I2F_SET_ATTR 111B I2F_SFIRST 111C I2F_SNEXT
110C I2F_SPACE 110B I2F_UNLOCK 1109 I2F_WRITE 1118 I2F_XCREATE
1119 I2F_XSFIRST 0001 IDLE_COMMAND
FFFF IDLE_DETECT C000 IDLE_DISABLE
0002 IDLE_DOSFUNC 8000 IDLE_INIT 0004 IDLE_INT28 4000 IDLE_ON
004D IDM 005A IDZ 0200 INT_FLAG 0049 LDT_BLK 004D LDT_DRV
0043 LDT_FLAGS 0058 LDT_LEN 0000 LDT_NAME 0045 LDT_PDT 004B LDT_ROOT
004F LDT_ROOTLEN 000A LF 2000 LFLG_JOINED
8000 LFLG_NETWRKD 4000 LFLG_PHYSICAL 1000 LFLG_SUBST
0002 LOC_BLOCK 0004 LOC_CHAR 0005 LOC_MEMORY 0003 LOC_NET
0001 LOC_UNKNOWN 0FF6 MAX12 000D MAX_FILELEN
0050 MAX_PATHLEN 0006 MSF_ATTRIB 000C MSF_BLOCK 001A MSF_BLOCK1
0020 MSF_CR 0014 MSF_DATE 001C MSF_DBLK 001E MSF_DCNT 001C MSF_DEVPTR
0000 MSF_DRIVE 0000 MSF_EXTFLG 0018 MSF_IFN 0019 MSF_IOCTL 0001 MSF_NAME
000E MSF_RECSIZE 0021 MSF_RR 0023 MSF_RR2 0010 MSF_SIZE
0016 MSF_TIME 0003 MS_A_READ 0004 MS_A_WRITE 000C MS_C_FLUSH
0008 MS_C_NOECHO 0007 MS_C_RAWIN 0006 MS_C_RAWIO 0001 MS_C_READ
000A MS_C_READSTR 000B MS_C_STAT 0002 MS_C_WRITE
0009 MS_C_WRITESTR 001B MS_DRV_ALLOC
001C MS_DRV_ALLOCSPEC 000D MS_DRV_ALLRESET 0019 MS_DRV_GET
000E MS_DRV_SET 0036 MS_DRV_SPACE 0010 MS_F_CLOSE
0013 MS_F_DELETE 002F MS_F_DMAGET
001A MS_F_DMAOFF 0059 MS_F_ERROR 0054 MS_F_GETVERIFY
005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN 0029 MS_F_PARSE
0024 MS_F_RANDREC 0014 MS_F_READ 0027 MS_F_READBLK
0021 MS_F_READRAND 0017 MS_F_RENAME
0011 MS_F_SFIRST 0023 MS_F_SIZE 0012 MS_F_SNEXT
002E MS_F_VERIFY 0015 MS_F_WRITE 0028 MS_F_WRITEBLK
0022 MS_F_WRITERAND 0005 MS_L_WRITE 0048 MS_M_ALLOC 0049 MS_M_FREE
004A MS_M_SETBLOCK 0058 MS_M_STRATEGY
0062 MS_P_GETPSP 0026 MS_P_MKPSP 0050 MS_P_SETPSP
0000 MS_P_TERMCPM 0031 MS_P_TERMKEEP
0030 MS_S_BDOSVER 0033 MS_S_BREAK 0038 MS_S_COUNTRY
0035 MS_S_GETINT 0025 MS_S_SETINT
002A MS_T_GETDATE 002C MS_T_GETTIME
002B MS_T_SETDATE 002D MS_T_SETTIME 003B MS_X_CHDIR
0043 MS_X_CHMOD 003E MS_X_CLOSE 0068 MS_X_COMMIT 003C MS_X_CREAT
0047 MS_X_CURDIR 0057 MS_X_DATETIME 0045 MS_X_DUP
0046 MS_X_DUP2 004B MS_X_EXEC 004C MS_X_EXIT 0060 MS_X_EXPAND
004E MS_X_FIRST 6601 MS_X_GETCP 0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR
005B MS_X_MKNEW 005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN
003F MS_X_READ 0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP
0067 MS_X_SETHC 0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE
0040 NO_CRIT_ERRORS 000F NUM_SHARE_STUB_ENTRIES 0800 OFLW_FLAG
0008 OK_FAIL 0020 OK_IGNORE 0010 OK_RETRY 0018 OK_RF 0030 OK_RI
0038 OK_RIF 0022 PASSWD_CHECK 0021 PASSWD_CHMOD
0020 PASSWD_CREAT 0004 PROC_DEVIN 0001 PROC_IDLE 0002 PROC_INT28
0003 PROC_KEYIN 0060 PSPILEN 0100 PSPLEN 0DDD PWM_ANY 0111 PWM_D
0222 PWM_E 00F0 PWM_GROUP 000F PWM_OWNER 0888 PWM_R 0444 PWM_W
0F00 PWM_WORLD 0016 RH0_LEN 000D RH13_LEN 000D RH14_LEN 0017 RH19_LEN
000F RH1_LEN 0015 RH24_LEN 0018 RH2_LEN 001E RH4_LEN 000E RH5_LEN
0200 RHS_BUSY 0100 RHS_DONE 8000 RHS_ERROR 0400 RHS_IC 0800 RHS_RM
001E RH_SIZE 007F RQ19_DSP_GET 005F RQ19_DSP_SET
0042 RQ19_FORMAT 0060 RQ19_GET 004D RQ19_PRP_END
004C RQ19_PRP_START 006B RQ19_QRY_PRP
006A RQ19_QRY_SEL 0061 RQ19_READ 004A RQ19_SELECT
0040 RQ19_SET 0062 RQ19_VERIFY 0041 RQ19_WRITE 007F RUBOUT
0080 SIGN_FLAG 0010 SSTOR_SPACE 00C0 STACK_SIZE 0003 STDAUX
0002 STDERR 0000 STDIN 0001 STDOUT 0004 STDPRN 0018 S_CLOSE
002C S_CLOSE_FILES 0020 S_CLOSE_IF_OPEN
0024 S_DENY_IF_OPEN 0010 S_DISCARD 000C S_FDOSRW
0028 S_GET_LIST_ENTRY 0000 S_LOCKS 001C S_OM_COMPAT
0014 S_OPEN 0008 S_RECORD 0004 S_UPDATE 0009 TAB 0001 TERM_BREAK
0002 TERM_ERROR 0000 TERM_NORMAL 0003 TERM_RESIDENT
FFFF TRUE 0006 TRUE_VERSION 0014 XFNMAX 0040 ZERO_FLAG
0001 __RASM__
0000 LABELS
00D4 AL_NOGO 00CC AL_OK 00F0 BREAK_C10 00F1 BREAK_C15 00F2 BREAK_C20
00D7 BREAK_CHECK 0325 CHAR_CHECK 0341 CHAR_CHECK10
038E CHAR_CHECK20 0000 CHAR_ERROR 01BC CHAR_GET 01CB CHAR_GET20
01CE CHAR_GET30 019B CMDLINE_READ 0198 CMDLINE_READ_WAIT
028C COOKED_O10 02A0 COOKED_O20 02AD COOKED_O30 027E COOKED_OUT
01B4 COOKED_READ 01B1 COOKED_READ_WAIT 0174 COOKED_S10
017B COOKED_S20 017E COOKED_S30 018C COOKED_S40 0195 COOKED_S45 0197 COOKED_S50
014D COOKED_STATUS 01DA COOKED_WRITE 01FF COOK_W03
021B COOK_W04 022A COOK_W05 022E COOK_W10 0254 COOK_W20 025E COOK_W30
0262 COOK_W40 0274 COOK_W50 0278 COOK_W60 027B COOK_W70 027D COOK_W80
02EC DEVICE_COMMON 02FE DEVICE_COMMON10
031D DEVICE_COMMON20 0000 DEVICE_DRIVER
039D DEVICE_INSTAT 02E6 DEVICE_READ 03B8 DEVICE_REQ
02EA DEVICE_WRITE 013C DO23_10 0147 DO23_20 014A DO23_30
0000 DOS_ENTRY 0014 F03_10 00A6 F0B_EXIT 00B1 F0C_10 00BB F0C_20
001F F456COMMON 0000 FUNC01 0004 FUNC02 0011 FUNC03 0017 FUNC04
001C FUNC05 0046 FUNC06 0059 FUNC07 0061 FUNC08 007D FUNC09
0091 FUNC0A 009A FUNC0B 00A8 FUNC0C 007C FUNCIC10 0067 FUNCICEXIT
0000 GET_DSEG 00F8 GO_INT23 038F HNDL_INSTAT 0030 HNDL_W10
003D HNDL_W20 0044 HNDL_W30 0020 HNDL_WRITE 02B2 IDLE_DEV 02C1 IDLE_DEV10
02DE IDLE_DEV20 02E2 IDLE_DEV30 02E4 IDLE_DEV40 0000 IFN2DHNDL
0000 INT21_ENTRY 0000 INT21_FUNC 03F3 IS_DEV10 0409 IS_DEV20
040A IS_DEV30 03D5 IS_DEVICE 040D IS_DEV_BAD 0456 OC_PRN10 046D OC_PRN20
048C OC_PRN30 0413 OPEN_OR_CLOSE_PRN 01AA RAW_READ
01A7 RAW_READ_WAIT 0000 READTIMEANDDATE 0000 READ_LINE
0000 RELOAD_REGISTERS 01D7 STDOUT_COOKED_WRITE
UNCICEXIT
0000 GET_DSEG 00F8 GO_INT23 038F HNDL_INSTAT 0030 HNDL_W10
003D HNDL_W2

1921
IBMDOS/BIN/CMDLINE.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/CMDLINE.OBJ Normal file

Binary file not shown.

133
IBMDOS/BIN/CMDLINE.SYM Normal file
View File

@@ -0,0 +1,133 @@
0000 VARIABLES
0000 CLE_STATE 0000 COLUMN 0000 CON_DEVICE 0000 DMD_ID
0006 DMD_IDLE_FLAGS 0003 DMD_LEN 0008 DMD_NAME 0001 DMD_PSP
0000 EDIT_CNTRL 00B7 EDIT_END 0002 EDIT_FUNC 0001 EDIT_SIZE 0003 EDIT_TABLE
0000 ESC_CHAR 0000 FDOS_DATA 0001 REG_AH 0000 REG_AL 0000 REG_AX
0003 REG_BH 0002 REG_BL 000C REG_BP 0002 REG_BX 0005 REG_CH
0004 REG_CL 0014 REG_CS 0004 REG_CX 0007 REG_DH 000A REG_DI
0006 REG_DL 000E REG_DS 0006 REG_DX 0010 REG_ES 0016 REG_FLAGS
0012 REG_IP 0008 REG_SI 0012 RH0_BPBOFF 0014 RH0_BPBSEG 0016 RH0_DRIVE
000D RH0_NUNITS 000E RH0_RESIDENT 000D RH19_CATEGORY
0011 RH19_DI 0013 RH19_GENPB 000D RH19_MAJOR 000E RH19_MINOR 000F RH19_SI
000D RH1_MEDIA 000E RH1_RETURN 000F RH1_VOLID 000E RH24_CMD 0011 RH24_RESVD
000F RH24_STATUS 0012 RH2_BPB 0012 RH2_BPBOFF 0014 RH2_BPBSEG
000E RH2_BUFFER 000D RH2_MEDIA 001A RH4_BIGSECTOR
001C RH4_BIGSECTORHI 001A RH4_BIGSECTORLO 000E RH4_BUFFER
000E RH4_BUFOFF 0010 RH4_BUFSEG 0012 RH4_COUNT 000D RH4_MEDIA 000D RH4_RIC
0014 RH4_SECTOR 0016 RH4_VOLID 000D RH5_CHAR 000D RH5_RIC 0002 RH_CMD
0000 RH_LEN 0003 RH_STATUS 0001 RH_UNIT FFF8 RL_BUFOFF FFF8 RL_BUFPTR
FFFA RL_BUFSEG FFF4 RL_FLAGS FFEA RL_HIST_RECL
FFE8 RL_HIST_SAVE FFE4 RL_HIST_SEG
FFE6 RL_HIST_SIZE FFF6 RL_INICOL FFFE RL_INPUT FFF0 RL_KANJI
FFF2 RL_MAXLEN FFFC RL_OUTPUT FFEE RL_SAVMAX FFEC RL_SAVPOS 0000 SAVBUF
0000 NUMBERS
0007 BELL 0001 CARRY_FLAG 0010 CHAR_ALPHAN 0004 CHAR_CTL
0008 CHAR_KANJI 0031 CHAR_ONECOL 0020 CHAR_OTHER 008E CHAR_SIZE
0001 CHAR_SPACE 0080 CHAR_STD 0002 CHAR_TAB 0002 CMD_BUILD_BPB
000E CMD_DEVICE_CLOSE 000D CMD_DEVICE_OPEN
000F CMD_FIXED_MEDIA 0013 CMD_GENERIC_IOCTL
0017 CMD_GET_DEVICE 0000 CMD_INIT 0004 CMD_INPUT
0007 CMD_INPUT_FLUSH 0003 CMD_INPUT_IOCTL
0005 CMD_INPUT_NOWAIT 0006 CMD_INPUT_STATUS
0001 CMD_MEDIA_CHECK 0008 CMD_OUTPUT 000B CMD_OUTPUT_FLUSH
000C CMD_OUTPUT_IOCTL 000A CMD_OUTPUT_STATUS
0009 CMD_OUTPUT_VERIFY 0019 CMD_QUERY_IOCTL
0018 CMD_SET_DEVICE 000D CR 005E CTL 0001 CTLA
0002 CTLB 001C CTLBS 0003 CTLC 0004 CTLD 0005 CTLE
0006 CTLF 0007 CTLG 0008 CTLH 0009 CTLI 000A CTLJ
000B CTLK 000D CTLM 0010 CTLP 0011 CTLQ 0012 CTLR
0013 CTLS 0014 CTLT 0015 CTLU 001F CTLUB 001E CTLUP
0016 CTLV 0017 CTLW 0018 CTLX 0019 CTLY 001A CTLZ
0002 DA_BIGDRV 8000 DA_CHARDEV 0040 DA_GETSET 4000 DA_IOCTL 0001 DA_ISCIN
0008 DA_ISCLK 0002 DA_ISCOT 0004 DA_ISNUL 2000 DA_NONIBM 2000 DA_OTILBSY
0080 DA_QUERY 0800 DA_REMOVE 0010 DA_SPECIAL 007F DEL 0004 DH_ATTRIB
0008 DH_INTERRUPT 000A DH_NAME 0000 DH_NEXT 0000 DH_NEXTOFF
0002 DH_NEXTSEG 0006 DH_STRATEGY 0400 DIR_FLAG 0080 DISABLE
8000 DISABLE_MASK 0008 DMD_NAME_LEN 0021 DOS_INT
0004 EDIT_LEN 0002 ERR_ABORT 0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY
001B ESC 0001 ESC_CODE 0000 FALSE 0029 FASTCON_INT
0001 IDLE_COMMAND FFFF IDLE_DETECT
C000 IDLE_DISABLE 0002 IDLE_DOSFUNC 8000 IDLE_INIT
0004 IDLE_INT28 4000 IDLE_ON 004D IDM 005A IDZ 0200 INT_FLAG
000A LF 000D MAX_FILELEN 0050 MAX_PATHLEN
0003 MS_A_READ 0004 MS_A_WRITE 000C MS_C_FLUSH 0008 MS_C_NOECHO
0007 MS_C_RAWIN 0006 MS_C_RAWIO 0001 MS_C_READ 000A MS_C_READSTR
000B MS_C_STAT 0002 MS_C_WRITE 0009 MS_C_WRITESTR
001B MS_DRV_ALLOC 001C MS_DRV_ALLOCSPEC
000D MS_DRV_ALLRESET 0019 MS_DRV_GET 000E MS_DRV_SET
0036 MS_DRV_SPACE 0010 MS_F_CLOSE 0013 MS_F_DELETE
002F MS_F_DMAGET 001A MS_F_DMAOFF 0059 MS_F_ERROR
0054 MS_F_GETVERIFY 005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN
0029 MS_F_PARSE 0024 MS_F_RANDREC 0014 MS_F_READ
0027 MS_F_READBLK 0021 MS_F_READRAND
0017 MS_F_RENAME 0011 MS_F_SFIRST 0023 MS_F_SIZE
0012 MS_F_SNEXT 002E MS_F_VERIFY 0015 MS_F_WRITE
0028 MS_F_WRITEBLK 0022 MS_F_WRITERAND 0005 MS_L_WRITE
0048 MS_M_ALLOC 0049 MS_M_FREE 004A MS_M_SETBLOCK
0058 MS_M_STRATEGY 0062 MS_P_GETPSP 0026 MS_P_MKPSP
0050 MS_P_SETPSP 0000 MS_P_TERMCPM
0031 MS_P_TERMKEEP 0030 MS_S_BDOSVER 0033 MS_S_BREAK
0038 MS_S_COUNTRY 0035 MS_S_GETINT
0025 MS_S_SETINT 002A MS_T_GETDATE
002C MS_T_GETTIME 002B MS_T_SETDATE
002D MS_T_SETTIME 003B MS_X_CHDIR 0043 MS_X_CHMOD 003E MS_X_CLOSE
0068 MS_X_COMMIT 003C MS_X_CREAT 0047 MS_X_CURDIR
0057 MS_X_DATETIME 0045 MS_X_DUP 0046 MS_X_DUP2 004B MS_X_EXEC
004C MS_X_EXIT 0060 MS_X_EXPAND 004E MS_X_FIRST 6601 MS_X_GETCP
0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR 005B MS_X_MKNEW
005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN 003F MS_X_READ
0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP 0067 MS_X_SETHC
0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE 0000 NESC_CODE
0040 NO_CRIT_ERRORS 0800 OFLW_FLAG 0008 OK_FAIL 0020 OK_IGNORE
0010 OK_RETRY 0018 OK_RF 0030 OK_RI 0038 OK_RIF 0004 PROC_DEVIN
0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN 0016 RH0_LEN 000D RH13_LEN
000D RH14_LEN 0017 RH19_LEN 000F RH1_LEN 0015 RH24_LEN 0018 RH2_LEN
001E RH4_LEN 000E RH5_LEN 0200 RHS_BUSY 0100 RHS_DONE 8000 RHS_ERROR
0400 RHS_IC 0800 RHS_RM 001E RH_SIZE 0020 RLF_DIRTY
0001 RLF_ENHANCED 0080 RLF_INROOT 0002 RLF_INS 0040 RLF_KANJI
0008 RLF_MATCH 0010 RLF_RECALLED 0004 RLF_SEARCH 001C RL_LENGTH
007F RQ19_DSP_GET 005F RQ19_DSP_SET
0042 RQ19_FORMAT 0060 RQ19_GET 004D RQ19_PRP_END
004C RQ19_PRP_START 006B RQ19_QRY_PRP
006A RQ19_QRY_SEL 0061 RQ19_READ 004A RQ19_SELECT
0040 RQ19_SET 0062 RQ19_VERIFY 0041 RQ19_WRITE 007F RUBOUT
0080 SAVBUF_SIZE 0080 SIGN_FLAG 00C0 STACK_SIZE 0003 STDAUX
0002 STDERR 0000 STDIN 0001 STDOUT 0004 STDPRN 0009 TAB
0001 TERM_BREAK 0002 TERM_ERROR 0000 TERM_NORMAL
0003 TERM_RESIDENT FFFF TRUE 0006 TRUE_VERSION
0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
02FB BACK_ONE_CHAR 0157 BELL_CHAR 04AC BLOCK_O10 04B2 BLOCK_O20
04A9 BLOCK_OUT 0306 BOC_10 031A BOC_20 04A7 BS_OUT 048D CALC_C10
0492 CALC_C20 0496 CALC_C30 047E CALC_CHARS 046D CHAR_I10 047D CHAR_I20
0453 CHAR_INFO 0452 CHAR_T100 0450 CHAR_T90 040F CHAR_TYPE
0000 CMDLINE_READ 0000 COOKED_WRITE 035A COPY_A10
0367 COPY_A20 0380 COPY_A25 0389 COPY_A30 0354 COPY_ALL 0337 COPY_C10
032D COPY_C5 0323 COPY_CHAR 0338 COPY_TILL_CHAR 0407 CTLAT_CHAR
0000 DBCS_LEAD 0249 DELF_CHAR 0265 DELN_CHAR 0278 DELN_W10 02AD DELN_W20
0000 DELN_WORD 025B DELP_CHAR 0000 DEL_BOL 0000 DEL_CUR_HISTORY_BUFFER
0250 DEL_EOL 025A DEL_EOL10 0000 DEL_HISTORY_BUFFERS 02D7 DEL_L10
02B9 DEL_LINE 0000 DEVICE_DRIVER 03FF EOF_CHAR 0530 GET_C05
0547 GET_C10 04F6 GET_CHAR 0000 GET_DSEG 01F6 GOTO_B10 01E3 GOTO_BOL
0000 GOTO_EOL 03F8 IGNORE_CHAR 0000 INIT_HISTORY
010F INTSAVE_C10 00F2 INTSAVE_CHAR 0000 MATCH_CMD
0000 MATCH_WORD 03F9 MEM_LINE 034C MOVE_ALONG 0344 MOVE_TILL_CHAR
01FE NEXT_C05 020D NEXT_C10 01F7 NEXT_CHAR 0000 NEXT_CMD 0000 NEXT_WORD
0353 NO_MOVE 0225 PREV_C10 0219 PREV_CHAR 0000 PREV_CMD 0230 PREV_W20
0248 PREV_W30 0000 PREV_WORD 04C2 PUTS_S20 04C3 PUT_CHAR 04B7 PUT_S10
04B3 PUT_STRING 0000 RAW_READ 0000 READ_LINE 0035 READ_LINE10
003A READ_LINE20 006F READ_LINE30
0083 READ_LINE40 0088 READ_LINE_LOOP 00AC READ_LL10
00D6 READ_LL20 00E1 READ_LL_FOUND_CMD 0098 READ_LL_NEXT_CMD
0049 RET_STRING 006B RET_STRING10 00E9 SAVE_C10 013E SAVE_C30
015C SAVE_C50 0194 SAVE_C60 00EA SAVE_CHAR 0000 SAVE_HISTORY
01D1 SAVE_K10 01AD SAVE_KANJI 03F8 SAVE_L10 03E3 SAVE_L5 03CE SAVE_LINE
0000 SEARCH_CMD 013B SIMPLE_S10 0128 SIMPLE_SAVE
02D8 SKIP_ONE_CHAR 038A SKIP_TILL_CHAR 02F6 SOC_10
02F7 SOC_20 04A3 SPACE_OUT 0398 STC_10 03B2 STC_20 03BE STC_30
03C7 STC_40 01D2 TOGGLE_INS 01D8 TOGGLE_SEARCH 04DC WRITE_CHAR
0AC READ_LL10
00D6 READ_LL20 00E1 READ_LL_FOUND_CMD 0098 READ_LL_NEXT_CMD
0049 RET_STRING 006B RET_STRING10 00E9 SAVE_C10 0

BIN
IBMDOS/BIN/DIRS.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/DISK.OBJ Normal file

Binary file not shown.

1024
IBMDOS/BIN/DOSMEM.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/DOSMEM.OBJ Normal file

Binary file not shown.

101
IBMDOS/BIN/DOSMEM.SYM Normal file
View File

@@ -0,0 +1,101 @@
0000 VARIABLES
0000 CURRENT_PSP 0000 DMD_ADDRESS 0000 DMD_ID
0006 DMD_IDLE_FLAGS 0003 DMD_LEN 0008 DMD_NAME 0000 DMD_OWNER
0001 DMD_PSP 0000 DMD_ROOT 0000 DMD_UPPER_LINK
0000 DMD_UPPER_ROOT 00B5 F58_TBL 0000 FDOS_DATA
0000 LOCK_TABLES 0000 LOCUS 0000 MEM_STRATEGY
0001 REG_AH 0000 REG_AL 0000 REG_AX 0003 REG_BH 0002 REG_BL
000C REG_BP 0002 REG_BX 0005 REG_CH 0004 REG_CL 0014 REG_CS
0004 REG_CX 0007 REG_DH 000A REG_DI 0006 REG_DL 000E REG_DS
0006 REG_DX 0010 REG_ES 0016 REG_FLAGS 0012 REG_IP 0008 REG_SI
0000 UNLOCK_TABLES
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 0001 BEST_FIT 0001 CARRY_FLAG
0007 CLASS_APPLIC 0003 CLASS_AUTHOR
000C CLASS_EXISTS 0009 CLASS_FORMAT
0005 CLASS_HARDWARE 0004 CLASS_INTERNAL
000A CLASS_LOCKED 0008 CLASS_LOST 000B CLASS_MEDIA
0001 CLASS_RESOURCE 0006 CLASS_SYSTEM 0002 CLASS_TEMP
000D CLASS_UNKNOWN 0400 DIR_FLAG 0008 DMD_NAME_LEN
0021 DOS_INT FFFB ED_ACCESS FFF4 ED_ACC_CODE FFAB ED_ASSIGN
FFEA ED_BADCMD FFE9 ED_BADDATA FFE6 ED_BADMEDIA
FFE8 ED_BADRHLEN FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK
FFA6 ED_COMPONENT FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR
FFDE ED_DISKCHG FFF9 ED_DMD FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS
FFAD ED_FAIL FFFE ED_FILE FFF5 ED_FORMAT FFFF ED_FUNCTION
FFE1 ED_GENFAIL FFFC ED_HANDLE FFFA ED_H_MATCH FFA6 ED_LASTERROR
FFDF ED_LOCKFAIL FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET
FFBF ED_NETACCESS FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG
FFB7 ED_NETPWD FFB5 ED_NETREQ FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER
FFA8 ED_NETWRITE FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER
FFEB ED_NOTREADY FFA9 ED_PARAM FFAA ED_PASSWORD
FFFD ED_PATH FFED ED_PROTECT FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM
FFE0 ED_SHAREFAIL FFAC ED_STRUCT FFE3 ED_WRFAIL 0002 ERR_ABORT
0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY 0000 FALSE 0004 FIRST_FIT
0001 IDLE_COMMAND FFFF IDLE_DETECT
C000 IDLE_DISABLE 0002 IDLE_DOSFUNC 8000 IDLE_INIT
0004 IDLE_INT28 4000 IDLE_ON 004D IDM 005A IDZ 0200 INT_FLAG
0002 LAST_FIT 0002 LOC_BLOCK 0004 LOC_CHAR 0005 LOC_MEMORY 0003 LOC_NET
0001 LOC_UNKNOWN 000D MAX_FILELEN
0050 MAX_PATHLEN 0003 MS_A_READ 0004 MS_A_WRITE 000C MS_C_FLUSH
0008 MS_C_NOECHO 0007 MS_C_RAWIN 0006 MS_C_RAWIO 0001 MS_C_READ
000A MS_C_READSTR 000B MS_C_STAT 0002 MS_C_WRITE
0009 MS_C_WRITESTR 001B MS_DRV_ALLOC
001C MS_DRV_ALLOCSPEC 000D MS_DRV_ALLRESET 0019 MS_DRV_GET
000E MS_DRV_SET 0036 MS_DRV_SPACE 0010 MS_F_CLOSE
0013 MS_F_DELETE 002F MS_F_DMAGET
001A MS_F_DMAOFF 0059 MS_F_ERROR 0054 MS_F_GETVERIFY
005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN 0029 MS_F_PARSE
0024 MS_F_RANDREC 0014 MS_F_READ 0027 MS_F_READBLK
0021 MS_F_READRAND 0017 MS_F_RENAME
0011 MS_F_SFIRST 0023 MS_F_SIZE 0012 MS_F_SNEXT
002E MS_F_VERIFY 0015 MS_F_WRITE 0028 MS_F_WRITEBLK
0022 MS_F_WRITERAND 0005 MS_L_WRITE 0048 MS_M_ALLOC 0049 MS_M_FREE
004A MS_M_SETBLOCK 0058 MS_M_STRATEGY
0062 MS_P_GETPSP 0026 MS_P_MKPSP 0050 MS_P_SETPSP
0000 MS_P_TERMCPM 0031 MS_P_TERMKEEP
0030 MS_S_BDOSVER 0033 MS_S_BREAK 0038 MS_S_COUNTRY
0035 MS_S_GETINT 0025 MS_S_SETINT
002A MS_T_GETDATE 002C MS_T_GETTIME
002B MS_T_SETDATE 002D MS_T_SETTIME 003B MS_X_CHDIR
0043 MS_X_CHMOD 003E MS_X_CLOSE 0068 MS_X_COMMIT 003C MS_X_CREAT
0047 MS_X_CURDIR 0057 MS_X_DATETIME 0045 MS_X_DUP
0046 MS_X_DUP2 004B MS_X_EXEC 004C MS_X_EXIT 0060 MS_X_EXPAND
004E MS_X_FIRST 6601 MS_X_GETCP 0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR
005B MS_X_MKNEW 005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN
003F MS_X_READ 0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP
0067 MS_X_SETHC 0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE
0040 NO_CRIT_ERRORS 0800 OFLW_FLAG 0008 OK_FAIL 0020 OK_IGNORE
0010 OK_RETRY 0018 OK_RF 0030 OK_RI 0038 OK_RIF 0004 PROC_DEVIN
0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN 0080 SIGN_FLAG 00C0 STACK_SIZE
0003 STDAUX 0002 STDERR 0000 STDIN 0001 STDOUT 0004 STDPRN
0001 TERM_BREAK 0002 TERM_ERROR 0000 TERM_NORMAL
0003 TERM_RESIDENT FFFF TRUE 0006 TRUE_VERSION
0080 UPPER_FIT 0040 UPPER_ONLY_FIT 0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
025F CHECK_DMD_DONE 025E CHECK_DMD_ERROR
024F CHECK_DMD_ID 0000 ERROR_EXIT 001E F48_10 00B0 F58_ERROR
00C8 F58_GET_LINK 00BD F58_GET_STRATEGY
00CE F58_SET_LINK 00E9 F58_SET_LINK10
0101 F58_SET_LINK20 00C1 F58_SET_STRATEGY 0102 FREE_ALL
0135 FREE_ALL_END 0137 FREE_ALL_FAIL
0106 FREE_ALL_LOOP 011B FREE_ALL_NEXT 0000 FUNC48
002D FUNC49 004A FUNC49_10 004C FUNC49_20 0069 FUNC4A 009A FUNC58
0247 GET_DMD 021B MAKE_DMD 0246 MAKE_DMD_DONE
0058 MEMORY_AVBL_ERROR 005D MEMORY_ERROR
0051 MEMORY_EXIT 01ED MERGE_MEM 0218 MERGE_MEM_DONE
0219 MERGE_MEM_QUIT 01E2 NEXT_DMD 0000 RELOAD_ES
0000 RETURN_AX_CLC 0000 RETURN_BX 0159 SEARCH_MEM
018B SEARCH_MEM40 01A1 SEARCH_MEM50
01D6 SEARCH_MEM_BAD 01D8 SEARCH_MEM_ERROR
01C8 SEARCH_MEM_EXIT 0169 SEARCH_MEM_INIT
016E SEARCH_MEM_LOOP 01AA SEARCH_MEM_NEXT
01DA SEARCH_NEXT_DMD 0138 SET_OWNER 0153 S_O10 0157 S_O20
0000 TOUPPER
C58
0247 GET_DMD 021B MAKE_DMD 0246 MAKE_DMD_DONE
0058 MEMORY_AVBL_ERROR 005D MEMORY_ERROR
0051 MEMORY_

1475
IBMDOS/BIN/ERROR.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/ERROR.OBJ Normal file

Binary file not shown.

152
IBMDOS/BIN/ERROR.SYM Normal file
View File

@@ -0,0 +1,152 @@
0000 VARIABLES
0074 CRITICAL_ERROR 0000 CURRENT_PSP
00B0 DEFAULT_ERROR 0000 DMD_ID 0006 DMD_IDLE_FLAGS
0003 DMD_LEN 0008 DMD_NAME 0001 DMD_PSP 0000 ERROR_ACTION
0000 ERROR_CLASS 0000 ERROR_CODE 0000 ERROR_DEV
0000 ERROR_DRIVE 0000 ERROR_LOCUS 0000 ERR_DRV
0000 FDOS_DATA 0008 FD_ADJUST 0008 FD_ATTRIB 0002 FD_BPBOFF 0004 FD_BPBSEG
0004 FD_BUF 0004 FD_BUFOFF 0006 FD_BUFSEG 0008 FD_COUNT 0006 FD_DATE
000A FD_DDIO_DMAOFF 000C FD_DDIO_DMASEG
0002 FD_DDIO_DRV_OP 0004 FD_DDIO_NSECTORS
0008 FD_DDIO_STARTHIGH 0006 FD_DDIO_STARTLOW 0006 FD_DDSCOFF
0008 FD_DDSCSEG 0004 FD_DPB 0004 FD_DPBOFF 0006 FD_DPBSEG 0002 FD_DRIVE
0002 FD_FCBADR 0006 FD_FCBCNT 0008 FD_FCBFUNC 0002 FD_FCBOFF 0004 FD_FCBSEG
0006 FD_FLAG 0000 FD_FUNC 0002 FD_HANDLE 0004 FD_IOCTLFUNC
0006 FD_IOCTLSTAT 0008 FD_LENGTH 000C FD_LFLAG 0008 FD_METHOD
0006 FD_MODE 0002 FD_NAME 0002 FD_NAMEOFF 0004 FD_NAMESEG 0004 FD_NEWHND
000A FD_NNAME 000A FD_NNAMEOFF 000C FD_NNAMESEG
0002 FD_NUMOPEN 0004 FD_OFFSET 0002 FD_ONAME 0002 FD_ONAMEOFF
0004 FD_ONAMESEG 0004 FD_PATH 0004 FD_PATHOFF 0006 FD_PATHSEG
0002 FD_PSPSEG 0004 FD_SFLAG 0008 FD_TIME 0000 INDOS_FLAG
0000 INT21REGS_PTR 0000 INTERNAL_FLAG 0000 LOCUS
0000 LOGICAL_ERROR 0010 PSP_BREAK_CS
000E PSP_BREAK_IP 0080 PSP_COMLEN 0081 PSP_COMLINE
0050 PSP_DOSCALL 0052 PSP_DOSRETF
002C PSP_ENVIRON 0014 PSP_ERROR_CS
0012 PSP_ERROR_IP 005C PSP_FCB1 006C PSP_FCB2 0000 PSP_INT20
0005 PSP_LONGCALL 0006 PSP_LONGOFF
0008 PSP_LONGSEG 0002 PSP_MEMORY 0016 PSP_PARENT 0038 PSP_RES1
003A PSP_RES2 003C PSP_RIC 000C PSP_TERM_CS
000A PSP_TERM_IP 002E PSP_USERSP 0030 PSP_USERSS
0040 PSP_VERSION 0032 PSP_XFNMAX 0018 PSP_XFT 0034 PSP_XFTOFF
0034 PSP_XFTPTR 0036 PSP_XFTSEG 0001 REG_AH 0000 REG_AL 0000 REG_AX
0003 REG_BH 0002 REG_BL 000C REG_BP 0002 REG_BX 0005 REG_CH
0004 REG_CL 0014 REG_CS 0004 REG_CX 0007 REG_DH 000A REG_DI
0006 REG_DL 000E REG_DS 0006 REG_DX 0010 REG_ES 0016 REG_FLAGS
0012 REG_IP 0008 REG_SI 0000 RETRY_OFF 0000 RETRY_SP 0012 RH0_BPBOFF
0014 RH0_BPBSEG 0016 RH0_DRIVE 000D RH0_NUNITS 000E RH0_RESIDENT
000D RH19_CATEGORY 0011 RH19_DI 0013 RH19_GENPB 000D RH19_MAJOR
000E RH19_MINOR 000F RH19_SI 000D RH1_MEDIA 000E RH1_RETURN 000F RH1_VOLID
000E RH24_CMD 0011 RH24_RESVD 000F RH24_STATUS 0012 RH2_BPB
0012 RH2_BPBOFF 0014 RH2_BPBSEG 000E RH2_BUFFER 000D RH2_MEDIA
001A RH4_BIGSECTOR 001C RH4_BIGSECTORHI
001A RH4_BIGSECTORLO 000E RH4_BUFFER 000E RH4_BUFOFF 0010 RH4_BUFSEG
0012 RH4_COUNT 000D RH4_MEDIA 000D RH4_RIC 0014 RH4_SECTOR 0016 RH4_VOLID
000D RH5_CHAR 000D RH5_RIC 0002 RH_CMD 0000 RH_LEN 0003 RH_STATUS
0001 RH_UNIT 0000 RWMODE 0000 VALID_FLG
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 0007 BELL 0001 CARRY_FLAG
0007 CLASS_APPLIC 0003 CLASS_AUTHOR
000C CLASS_EXISTS 0009 CLASS_FORMAT
0005 CLASS_HARDWARE 0004 CLASS_INTERNAL
000A CLASS_LOCKED 0008 CLASS_LOST 000B CLASS_MEDIA
0001 CLASS_RESOURCE 0006 CLASS_SYSTEM 0002 CLASS_TEMP
000D CLASS_UNKNOWN 0002 CMD_BUILD_BPB
000E CMD_DEVICE_CLOSE 000D CMD_DEVICE_OPEN
000F CMD_FIXED_MEDIA 0013 CMD_GENERIC_IOCTL
0017 CMD_GET_DEVICE 0000 CMD_INIT 0004 CMD_INPUT
0007 CMD_INPUT_FLUSH 0003 CMD_INPUT_IOCTL
0005 CMD_INPUT_NOWAIT 0006 CMD_INPUT_STATUS
0001 CMD_MEDIA_CHECK 0008 CMD_OUTPUT 000B CMD_OUTPUT_FLUSH
000C CMD_OUTPUT_IOCTL 000A CMD_OUTPUT_STATUS
0009 CMD_OUTPUT_VERIFY 0019 CMD_QUERY_IOCTL
0018 CMD_SET_DEVICE 000D CR 005E CTL 0001 CTLA
0002 CTLB 001C CTLBS 0003 CTLC 0004 CTLD 0005 CTLE
0006 CTLF 0007 CTLG 0008 CTLH 0009 CTLI 000A CTLJ
000B CTLK 000D CTLM 0010 CTLP 0011 CTLQ 0012 CTLR
0013 CTLS 0014 CTLT 0015 CTLU 001F CTLUB 001E CTLUP
0016 CTLV 0017 CTLW 0018 CTLX 0019 CTLY 001A CTLZ
007F DEL 0400 DIR_FLAG 0008 DMD_NAME_LEN 0021 DOS_INT
FFFB ED_ACCESS FFF4 ED_ACC_CODE FFAB ED_ASSIGN FFEA ED_BADCMD
FFE9 ED_BADDATA FFE6 ED_BADMEDIA FFE8 ED_BADRHLEN
FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK FFA6 ED_COMPONENT
FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR FFDE ED_DISKCHG FFF9 ED_DMD
FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS FFAD ED_FAIL FFFE ED_FILE
FFF5 ED_FORMAT FFFF ED_FUNCTION FFE1 ED_GENFAIL FFFC ED_HANDLE
FFFA ED_H_MATCH FFA6 ED_LASTERROR FFDF ED_LOCKFAIL
FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET FFBF ED_NETACCESS
FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG FFB7 ED_NETPWD FFB5 ED_NETREQ
FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER FFA8 ED_NETWRITE
FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER FFEB ED_NOTREADY
FFA9 ED_PARAM FFAA ED_PASSWORD FFFD ED_PATH FFED ED_PROTECT
FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM FFE0 ED_SHAREFAIL
FFAC ED_STRUCT FFE3 ED_WRFAIL 0002 ERR_ABORT 0003 ERR_FAIL 0000 ERR_IGNORE
0001 ERR_RETRY 0002 ERR_TBL_ACTION 0001 ERR_TBL_CLASS
0000 ERR_TBL_CODE 0004 ERR_TBL_LEN
0003 ERR_TBL_LOCUS 001B ESC 0000 FALSE
0007 FDOS_MAXPARM 0050 FD_COMMIT 0054 FD_DDIO
0048 FD_DISKINFO 004B FD_EXEC 004C FD_EXIT 0055 FD_EXPAND
004D FD_FCB 0049 FD_FLUSH 0052 FD_LOCK 0051 FD_NEW 0058 FD_REOPEN
004A FD_SELECT 0001 IDLE_COMMAND FFFF IDLE_DETECT
C000 IDLE_DISABLE 0002 IDLE_DOSFUNC 8000 IDLE_INIT
0004 IDLE_INT28 4000 IDLE_ON 004D IDM 005A IDZ 0200 INT_FLAG
000A LF 0002 LOC_BLOCK 0004 LOC_CHAR 0005 LOC_MEMORY 0003 LOC_NET
0001 LOC_UNKNOWN 000D MAX_FILELEN
0050 MAX_PATHLEN 0003 MS_A_READ 0004 MS_A_WRITE 000C MS_C_FLUSH
0008 MS_C_NOECHO 0007 MS_C_RAWIN 0006 MS_C_RAWIO 0001 MS_C_READ
000A MS_C_READSTR 000B MS_C_STAT 0002 MS_C_WRITE
0009 MS_C_WRITESTR 001B MS_DRV_ALLOC
001C MS_DRV_ALLOCSPEC 000D MS_DRV_ALLRESET 0019 MS_DRV_GET
000E MS_DRV_SET 0036 MS_DRV_SPACE 0010 MS_F_CLOSE
0013 MS_F_DELETE 002F MS_F_DMAGET
001A MS_F_DMAOFF 0059 MS_F_ERROR 0054 MS_F_GETVERIFY
005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN 0029 MS_F_PARSE
0024 MS_F_RANDREC 0014 MS_F_READ 0027 MS_F_READBLK
0021 MS_F_READRAND 0017 MS_F_RENAME
0011 MS_F_SFIRST 0023 MS_F_SIZE 0012 MS_F_SNEXT
002E MS_F_VERIFY 0015 MS_F_WRITE 0028 MS_F_WRITEBLK
0022 MS_F_WRITERAND 0005 MS_L_WRITE 0048 MS_M_ALLOC 0049 MS_M_FREE
004A MS_M_SETBLOCK 0058 MS_M_STRATEGY
0062 MS_P_GETPSP 0026 MS_P_MKPSP 0050 MS_P_SETPSP
0000 MS_P_TERMCPM 0031 MS_P_TERMKEEP
0030 MS_S_BDOSVER 0033 MS_S_BREAK 0038 MS_S_COUNTRY
0035 MS_S_GETINT 0025 MS_S_SETINT
002A MS_T_GETDATE 002C MS_T_GETTIME
002B MS_T_SETDATE 002D MS_T_SETTIME 003B MS_X_CHDIR
0043 MS_X_CHMOD 003E MS_X_CLOSE 0068 MS_X_COMMIT 003C MS_X_CREAT
0047 MS_X_CURDIR 0057 MS_X_DATETIME 0045 MS_X_DUP
0046 MS_X_DUP2 004B MS_X_EXEC 004C MS_X_EXIT 0060 MS_X_EXPAND
004E MS_X_FIRST 6601 MS_X_GETCP 0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR
005B MS_X_MKNEW 005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN
003F MS_X_READ 0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP
0067 MS_X_SETHC 0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE
0040 NO_CRIT_ERRORS 0800 OFLW_FLAG 0008 OK_FAIL 0020 OK_IGNORE
0010 OK_RETRY 0018 OK_RF 0030 OK_RI 0038 OK_RIF 0004 PROC_DEVIN
0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN 0060 PSPILEN 0100 PSPLEN
0016 RH0_LEN 000D RH13_LEN 000D RH14_LEN 0017 RH19_LEN 000F RH1_LEN
0015 RH24_LEN 0018 RH2_LEN 001E RH4_LEN 000E RH5_LEN 0200 RHS_BUSY
0100 RHS_DONE 8000 RHS_ERROR 0400 RHS_IC 0800 RHS_RM 001E RH_SIZE
007F RQ19_DSP_GET 005F RQ19_DSP_SET
0042 RQ19_FORMAT 0060 RQ19_GET 004D RQ19_PRP_END
004C RQ19_PRP_START 006B RQ19_QRY_PRP
006A RQ19_QRY_SEL 0061 RQ19_READ 004A RQ19_SELECT
0040 RQ19_SET 0062 RQ19_VERIFY 0041 RQ19_WRITE 007F RUBOUT
0080 SIGN_FLAG 00C0 STACK_SIZE 0003 STDAUX 0002 STDERR 0000 STDIN
0001 STDOUT 0004 STDPRN 0009 TAB 0001 TERM_BREAK 0002 TERM_ERROR
0000 TERM_NORMAL 0003 TERM_RESIDENT FFFF TRUE
0006 TRUE_VERSION 0014 XFNMAX 0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
0058 CHAR_E10 0079 CHAR_E20 004D CHAR_ERROR 00A5 DISK_E10 00C2 DISK_E20
00FA DISK_E40 010B DISK_E50 009A DISK_ERROR 0000 DO_INT24 0028 ERROR_EXIT
0038 ERROR_R10 0035 ERROR_RET 0045 FCBERROR_EXIT 004C FE_E10
0000 FUNC59 0000 GET_DSEG 0000 RELOAD_REGISTERS
0000 RETURN_AX_CLC 019C SCAN_ERROR_TABLE 01AC SCAN_ET10
01AD SCAN_ET20 018F SET_D10 0135 SET_E10 0146 SET_E20 0150 SET_E30
010E SET_ERROR 016B SET_ERROR_DATA 0153 SET_LOGICAL_ERROR
ION 0014 XFNMAX 0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
005

1681
IBMDOS/BIN/FCBS.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/FCBS.OBJ Normal file

Binary file not shown.

142
IBMDOS/BIN/FCBS.SYM Normal file
View File

@@ -0,0 +1,142 @@
0000 VARIABLES
0000 CURRENT_DSK 0000 CURRENT_PSP 0000 DMA_OFFSET
0000 DMA_SEGMENT 0000 FCB_PATH 0000 FCB_PATH2 0000 FCB_PB
0000 FCB_SEARCH_BUF 0073 FCB_TABLE 0000 MACHINE_ID
0000 REMOTE_CALL 0000 SRCH_BUF
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 000A BCB_COPIES 0014 BCB_DATA 000D BCB_DDSC
0004 BCB_DRV 0005 BCB_FLAGS 0000 BCB_NEXT 0002 BCB_PREV 0006 BCB_REC
0008 BCB_REC2 0011 BCB_REMOTE 000B BCB_SEPARATION 0040 BF_DIRTY
0008 BF_ISDAT 0004 BF_ISDIR 0002 BF_ISFAT 0080 BF_REMOTE
0007 CLASS_APPLIC 0003 CLASS_AUTHOR
000C CLASS_EXISTS 0009 CLASS_FORMAT
0005 CLASS_HARDWARE 0004 CLASS_INTERNAL
000A CLASS_LOCKED 0008 CLASS_LOST 000B CLASS_MEDIA
0001 CLASS_RESOURCE 0006 CLASS_SYSTEM 0002 CLASS_TEMP
000D CLASS_UNKNOWN 000B DATTS 0020 DA_ARCHIVE FF27 DA_CHANGE
0080 DA_CLUSTER 0080 DA_DELWATCH 0010 DA_DIR 00D8 DA_FIXED
0002 DA_HIDDEN 0001 DA_RO 0004 DA_SYSTEM 0008 DA_VOLUME 001A DBLOCK1
0004 DCNTRL_COUNT 0000 DCNTRL_DSADD
0000 DCNTRL_DSOFF 0002 DCNTRL_DSSEG 0006 DCNTRL_LEN
0018 DDATE 001D DDSC_BLOCK 0004 DDSC_CLMSK 0005 DDSC_CLSHF
000B DDSC_DATADDR 0013 DDSC_DEVHEAD
0013 DDSC_DEVOFF 0015 DDSC_DEVSEG
0011 DDSC_DIRADDR 0009 DDSC_DIRENT
0006 DDSC_FATADDR 0018 DDSC_FIRST 001F DDSC_FREE 0021 DDSC_LEN
0019 DDSC_LINK 0017 DDSC_MEDIA 000D DDSC_NCLSTRS
000F DDSC_NFATRECS 0008 DDSC_NFATS 0001 DDSC_RUNIT
0002 DDSC_SECSIZE 0000 DDSC_UNIT 0002 DELW_DELETE
0003 DELW_FREECLU 0004 DELW_FREERD
0007 DELW_NEWDISK 000E DELW_PURGE 0000 DELW_RDMASK
0005 DELW_SPACE 000F DELW_UNDEL 0020 DHAT_BIN 0001 DHAT_CIN 0040 DHAT_CLEAN
0008 DHAT_CLK 0002 DHAT_COT 0080 DHAT_DEV 001F DHAT_DRVMSK
1000 DHAT_LOCAL 0800 DHAT_NETPRN 0004 DHAT_NUL 0040 DHAT_READY
8000 DHAT_REMOTE 4000 DHAT_TIMEOK 4000 DHM_COMMIT
0000 DHM_COMPAT 0010 DHM_DENY_ALL 0040 DHM_DENY_NONE
0030 DHM_DENY_READ 0020 DHM_DENY_WRITE 8000 DHM_FCB
0080 DHM_LOCAL 2000 DHM_NOCRIT 0000 DHM_RO 0002 DHM_RW 000F DHM_RWMSK
0070 DHM_SHAREMSK 0001 DHM_WO 0005 DHNDL_ATTR 0035 DHNDL_BLK
000B DHNDL_BLK1 0000 DHNDL_COUNT 000F DHNDL_DATE
0004 DHNDL_DATRB 001B DHNDL_DBLK 001E DHNDL_DCNTHI
001F DHNDL_DCNTLO 0007 DHNDL_DEVOFF
0007 DHNDL_DEVPTR 0009 DHNDL_DEVSEG 0028 DHNDL_EXT
0019 DHNDL_IDX 003B DHNDL_LEN 0002 DHNDL_MODE 0020 DHNDL_NAME 0015 DHNDL_POS
0017 DHNDL_POSHI 0015 DHNDL_POSLO 0031 DHNDL_PSP
002B DHNDL_SFT 0033 DHNDL_SHARE 0011 DHNDL_SIZE
0013 DHNDL_SIZEHI 0011 DHNDL_SIZELO 000D DHNDL_TIME
002F DHNDL_UID 0005 DHNDL_WATTR 0012 DMODDATE 0010 DMODTIME
0000 DNAME 0021 DOS_INT 000E DPWD 0014 DPWM 001C DSIZE
0016 DTIME 000D DUNDEL FFFB ED_ACCESS FFF4 ED_ACC_CODE
FFAB ED_ASSIGN FFEA ED_BADCMD FFE9 ED_BADDATA FFE6 ED_BADMEDIA
FFE8 ED_BADRHLEN FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK
FFA6 ED_COMPONENT FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR
FFDE ED_DISKCHG FFF9 ED_DMD FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS
FFAD ED_FAIL FFFE ED_FILE FFF5 ED_FORMAT FFFF ED_FUNCTION
FFE1 ED_GENFAIL FFFC ED_HANDLE FFFA ED_H_MATCH FFA6 ED_LASTERROR
FFDF ED_LOCKFAIL FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET
FFBF ED_NETACCESS FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG
FFB7 ED_NETPWD FFB5 ED_NETREQ FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER
FFA8 ED_NETWRITE FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER
FFEB ED_NOTREADY FFA9 ED_PARAM FFAA ED_PASSWORD
FFFD ED_PATH FFED ED_PROTECT FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM
FFE0 ED_SHAREFAIL FFAC ED_STRUCT FFE3 ED_WRFAIL FFFF ENDDIR
0FFF FAT12 FFFF FAT16 0012 FCB_MAX1 001A FCB_MAX2 001E FCB_MAX3
0004 HCB_CLU 0006 HCB_CNT 0008 HCB_DATA 0002 HCB_DRV 0000 HCB_LINK
0049 LDT_BLK 004D LDT_DRV 0043 LDT_FLAGS 0058 LDT_LEN 0000 LDT_NAME
0045 LDT_PDT 004B LDT_ROOT 004F LDT_ROOTLEN
2000 LFLG_JOINED 8000 LFLG_NETWRKD
4000 LFLG_PHYSICAL 1000 LFLG_SUBST 0002 LOC_BLOCK 0004 LOC_CHAR
0005 LOC_MEMORY 0003 LOC_NET 0001 LOC_UNKNOWN 0FF6 MAX12
0006 MSF_ATTRIB 000C MSF_BLOCK 001A MSF_BLOCK1 0020 MSF_CR 0014 MSF_DATE
001C MSF_DBLK 001E MSF_DCNT 001C MSF_DEVPTR 0000 MSF_DRIVE 0000 MSF_EXTFLG
0018 MSF_IFN 0019 MSF_IOCTL 0001 MSF_NAME 000E MSF_RECSIZE
0021 MSF_RR 0023 MSF_RR2 0010 MSF_SIZE 0016 MSF_TIME 0003 MS_A_READ
0004 MS_A_WRITE 000C MS_C_FLUSH 0008 MS_C_NOECHO 0007 MS_C_RAWIN
0006 MS_C_RAWIO 0001 MS_C_READ 000A MS_C_READSTR 000B MS_C_STAT
0002 MS_C_WRITE 0009 MS_C_WRITESTR 001B MS_DRV_ALLOC
001C MS_DRV_ALLOCSPEC 000D MS_DRV_ALLRESET 0019 MS_DRV_GET
000E MS_DRV_SET 0036 MS_DRV_SPACE 0010 MS_F_CLOSE
0013 MS_F_DELETE 002F MS_F_DMAGET
001A MS_F_DMAOFF 0059 MS_F_ERROR 0054 MS_F_GETVERIFY
005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN 0029 MS_F_PARSE
0024 MS_F_RANDREC 0014 MS_F_READ 0027 MS_F_READBLK
0021 MS_F_READRAND 0017 MS_F_RENAME
0011 MS_F_SFIRST 0023 MS_F_SIZE 0012 MS_F_SNEXT
002E MS_F_VERIFY 0015 MS_F_WRITE 0028 MS_F_WRITEBLK
0022 MS_F_WRITERAND 0005 MS_L_WRITE 0048 MS_M_ALLOC 0049 MS_M_FREE
004A MS_M_SETBLOCK 0058 MS_M_STRATEGY
0062 MS_P_GETPSP 0026 MS_P_MKPSP 0050 MS_P_SETPSP
0000 MS_P_TERMCPM 0031 MS_P_TERMKEEP
0030 MS_S_BDOSVER 0033 MS_S_BREAK 0038 MS_S_COUNTRY
0035 MS_S_GETINT 0025 MS_S_SETINT
002A MS_T_GETDATE 002C MS_T_GETTIME
002B MS_T_SETDATE 002D MS_T_SETTIME 003B MS_X_CHDIR
0043 MS_X_CHMOD 003E MS_X_CLOSE 0068 MS_X_COMMIT 003C MS_X_CREAT
0047 MS_X_CURDIR 0057 MS_X_DATETIME 0045 MS_X_DUP
0046 MS_X_DUP2 004B MS_X_EXEC 004C MS_X_EXIT 0060 MS_X_EXPAND
004E MS_X_FIRST 6601 MS_X_GETCP 0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR
005B MS_X_MKNEW 005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN
003F MS_X_READ 0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP
0067 MS_X_SETHC 0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE
000F NUM_SHARE_STUB_ENTRIES 0022 PASSWD_CHECK
0021 PASSWD_CHMOD 0020 PASSWD_CREAT 0DDD PWM_ANY
0111 PWM_D 0222 PWM_E 00F0 PWM_GROUP 000F PWM_OWNER 0888 PWM_R
0444 PWM_W 0F00 PWM_WORLD 0010 SSTOR_SPACE 0003 STDAUX
0002 STDERR 0000 STDIN 0001 STDOUT 0004 STDPRN 0018 S_CLOSE
002C S_CLOSE_FILES 0020 S_CLOSE_IF_OPEN
0024 S_DENY_IF_OPEN 0010 S_DISCARD 000C S_FDOSRW
0028 S_GET_LIST_ENTRY 0000 S_LOCKS 001C S_OM_COMPAT
0014 S_OPEN 0008 S_RECORD 0004 S_UPDATE 0001 __RASM__
0000 LABELS
0550 DIV0 0556 DIV1 052F DIV_32 0254 FCB_BLOCK_RW
0271 FCB_BLOCK_RW10 0295 FCB_BLOCK_RW20 0130 FCB_CLOSE
0158 FCB_DELETE 006F FCB_ERROR 0511 FCB_FDOS 0145 FCB_FDOS_COMMON
014A FCB_FDOS_COMMON10 014C FCB_FDOS_COMMON20 0160 FCB_FIRST
03AC FCB_GET_COUNT 0333 FCB_HANDLE_ERR
033E FCB_HANDLE_ERR10 02E0 FCB_HANDLE_VFY
02F1 FCB_HANDLE_VFY10 0308 FCB_HANDLE_VFY20
0328 FCB_HANDLE_VFY30 0091 FCB_MAKE 0168 FCB_NEXT 0099 FCB_OPEN
00AB FCB_OPEN10 00F0 FCB_OPEN20 009F FCB_OPEN_MAKE_COMMON
0341 FCB_PATH2_PREP 0357 FCB_PATH_PREP
036C FCB_PATH_PREP10 0384 FCB_PATH_PREP20
037D FCB_PATH_PREP_COMMON 039C FCB_POINT 03AB FCB_POINT10
0234 FCB_RANDOM_RW 024B FCB_RANDOM_RW10 019E FCB_READ
0251 FCB_READBLK 0231 FCB_READRAND 014D FCB_RENAME
04F7 FCB_RESTORE_SEARCH_STATE 01BB FCB_RW 01F8 FCB_RW10 01FA FCB_RW20
01FE FCB_RW30 0228 FCB_RW40 048B FCB_SAVE_SEARCH_STATE 0466 FCB_SEARCH
048A FCB_SEARCH10 016E FCB_SEARCH_COMMON
0178 FCB_SEARCH_COMMON10 0444 FCB_SEEK_COMMON
0431 FCB_SEEK_RR 0410 FCB_SEEK_SEQ 01A1 FCB_SEQ_RW
01BA FCB_SEQ_RW10 0179 FCB_SETRECORD 0296 FCB_SIZE
02B5 FCB_SIZE10 02C7 FCB_SIZE20 02DD FCB_SIZE30 02DF FCB_SIZE40 04AF FCB_SSS10
04C2 FCB_SSS20 04CC FCB_SSS30 04D0 FCB_SSS40 04E0 FCB_SSS50 0102 FCB_UPDATE
03FE FCB_UPDATE_COMMON 03E2 FCB_UPDATE_RR
03BA FCB_UPDATE_SEQ 0199 FCB_WRITE 024C FCB_WRITEBLK
022C FCB_WRITERAND 0000 FDOS_ENTRY 0000 FDOS_EXIT
0005 FDOS_EXIT10 0038 FDOS_EXIT20
003D FDOS_EXIT30 0042 FDOS_EXIT40 0044 FDOS_FCB
0065 FDOS_FCB10 0000 IFN2DHNDL 0000 PARSE_ONE
_SE

BIN
IBMDOS/BIN/FDOS.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/FIOCTL.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/HEADER.OBJ Normal file

Binary file not shown.

1064
IBMDOS/BIN/HISTORY.LST Normal file

File diff suppressed because it is too large Load Diff

BIN
IBMDOS/BIN/HISTORY.OBJ Normal file

Binary file not shown.

91
IBMDOS/BIN/HISTORY.SYM Normal file
View File

@@ -0,0 +1,91 @@
0000 VARIABLES
0000 @HIST_FLG 0000 DMD_ID 0006 DMD_IDLE_FLAGS 0003 DMD_LEN
0008 DMD_NAME 0001 DMD_PSP 0000 FDOS_DATA 0000 HISTBUF1 0000 HISTBUF2
0000 HISTSIZ1 0000 HISTSIZ2 0001 REG_AH 0000 REG_AL 0000 REG_AX
0003 REG_BH 0002 REG_BL 000C REG_BP 0002 REG_BX 0005 REG_CH
0004 REG_CL 0014 REG_CS 0004 REG_CX 0007 REG_DH 000A REG_DI
0006 REG_DL 000E REG_DS 0006 REG_DX 0010 REG_ES 0016 REG_FLAGS
0012 REG_IP 0008 REG_SI FFF8 RL_BUFOFF FFF8 RL_BUFPTR FFFA RL_BUFSEG
FFF4 RL_FLAGS FFEA RL_HIST_RECL FFE8 RL_HIST_SAVE
FFE4 RL_HIST_SEG FFE6 RL_HIST_SIZE FFF6 RL_INICOL
FFFE RL_INPUT FFF0 RL_KANJI FFF2 RL_MAXLEN FFFC RL_OUTPUT FFEE RL_SAVMAX
FFEC RL_SAVPOS
0000 NUMBERS
0007 BELL 0001 CARRY_FLAG 0010 CHAR_ALPHAN 0004 CHAR_CTL
0008 CHAR_KANJI 0031 CHAR_ONECOL 0020 CHAR_OTHER 008E CHAR_SIZE
0001 CHAR_SPACE 0080 CHAR_STD 0002 CHAR_TAB 000D CR 005E CTL
0001 CTLA 0002 CTLB 001C CTLBS 0003 CTLC 0004 CTLD
0005 CTLE 0006 CTLF 0007 CTLG 0008 CTLH 0009 CTLI
000A CTLJ 000B CTLK 000D CTLM 0010 CTLP 0011 CTLQ
0012 CTLR 0013 CTLS 0014 CTLT 0015 CTLU 001F CTLUB
001E CTLUP 0016 CTLV 0017 CTLW 0018 CTLX 0019 CTLY
001A CTLZ 007F DEL 0400 DIR_FLAG 0008 DMD_NAME_LEN
0021 DOS_INT 0002 ERR_ABORT 0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY
001B ESC 0000 FALSE 0001 IDLE_COMMAND
FFFF IDLE_DETECT C000 IDLE_DISABLE
0002 IDLE_DOSFUNC 8000 IDLE_INIT 0004 IDLE_INT28 4000 IDLE_ON
004D IDM 005A IDZ 0200 INT_FLAG 000A LF
000D MAX_FILELEN 0050 MAX_PATHLEN 0003 MS_A_READ
0004 MS_A_WRITE 000C MS_C_FLUSH 0008 MS_C_NOECHO 0007 MS_C_RAWIN
0006 MS_C_RAWIO 0001 MS_C_READ 000A MS_C_READSTR 000B MS_C_STAT
0002 MS_C_WRITE 0009 MS_C_WRITESTR 001B MS_DRV_ALLOC
001C MS_DRV_ALLOCSPEC 000D MS_DRV_ALLRESET 0019 MS_DRV_GET
000E MS_DRV_SET 0036 MS_DRV_SPACE 0010 MS_F_CLOSE
0013 MS_F_DELETE 002F MS_F_DMAGET
001A MS_F_DMAOFF 0059 MS_F_ERROR 0054 MS_F_GETVERIFY
005C MS_F_LOCK 0016 MS_F_MAKE 000F MS_F_OPEN 0029 MS_F_PARSE
0024 MS_F_RANDREC 0014 MS_F_READ 0027 MS_F_READBLK
0021 MS_F_READRAND 0017 MS_F_RENAME
0011 MS_F_SFIRST 0023 MS_F_SIZE 0012 MS_F_SNEXT
002E MS_F_VERIFY 0015 MS_F_WRITE 0028 MS_F_WRITEBLK
0022 MS_F_WRITERAND 0005 MS_L_WRITE 0048 MS_M_ALLOC 0049 MS_M_FREE
004A MS_M_SETBLOCK 0058 MS_M_STRATEGY
0062 MS_P_GETPSP 0026 MS_P_MKPSP 0050 MS_P_SETPSP
0000 MS_P_TERMCPM 0031 MS_P_TERMKEEP
0030 MS_S_BDOSVER 0033 MS_S_BREAK 0038 MS_S_COUNTRY
0035 MS_S_GETINT 0025 MS_S_SETINT
002A MS_T_GETDATE 002C MS_T_GETTIME
002B MS_T_SETDATE 002D MS_T_SETTIME 003B MS_X_CHDIR
0043 MS_X_CHMOD 003E MS_X_CLOSE 0068 MS_X_COMMIT 003C MS_X_CREAT
0047 MS_X_CURDIR 0057 MS_X_DATETIME 0045 MS_X_DUP
0046 MS_X_DUP2 004B MS_X_EXEC 004C MS_X_EXIT 0060 MS_X_EXPAND
004E MS_X_FIRST 6601 MS_X_GETCP 0044 MS_X_IOCTL 0042 MS_X_LSEEK 0039 MS_X_MKDIR
005B MS_X_MKNEW 005A MS_X_MKTEMP 004F MS_X_NEXT 003D MS_X_OPEN
003F MS_X_READ 0056 MS_X_RENAME 003A MS_X_RMDIR 6602 MS_X_SETCP
0067 MS_X_SETHC 0041 MS_X_UNLINK 004D MS_X_WAIT 0040 MS_X_WRITE
0040 NO_CRIT_ERRORS 0800 OFLW_FLAG 0008 OK_FAIL 0020 OK_IGNORE
0010 OK_RETRY 0018 OK_RF 0030 OK_RI 0038 OK_RIF 0004 PROC_DEVIN
0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN 0020 RLF_DIRTY
0001 RLF_ENHANCED 0080 RLF_INROOT 0002 RLF_INS 0040 RLF_KANJI
0008 RLF_MATCH 0010 RLF_RECALLED 0004 RLF_SEARCH 001C RL_LENGTH
007F RUBOUT 0080 SIGN_FLAG 00C0 STACK_SIZE 0003 STDAUX 0002 STDERR
0000 STDIN 0001 STDOUT 0004 STDPRN 0009 TAB 0001 TERM_BREAK
0002 TERM_ERROR 0000 TERM_NORMAL 0003 TERM_RESIDENT
FFFF TRUE 0006 TRUE_VERSION 0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
0000 BS_OUT 0000 CHAR_INFO 0149 COPY_FROM_HIST
0168 COPY_FROM_HIST1 0000 DELN_W10 0285 DELN_WORD 0274 DEL_BOL
0284 DEL_BOL10 0204 DEL_CUR_HISTORY_BUFFER 0000 DEL_EOL
01F1 DEL_HISTORY_BUFFERS 0000 DEL_LINE 01CF FIND_CURRENT_HIST
01D5 FIND_CURRENT_HIST10 01E0 FIND_CURRENT_HIST20
01EB FIND_CURRENT_HIST30 01EE FIND_CURRENT_HIST40
017E FIND_FREE_HIST 018C FIND_FREE_HIST10
0199 FIND_FREE_HIST20 01C9 FIND_NEXT_HIST
019A FIND_NEXT_NULL 01AA FIND_PREV_HIST
01AF FIND_PREV_HIST10 01C6 FIND_PREV_HIST20 0133 FOUND_CMD
0000 GOTO_BOL 0148 GOTO_E10 0138 GOTO_EOL 0000 INIT_HISTORY
0014 INIT_HISTORY10 00F3 MATCH10 00FA MATCH20 0100 MATCH30
0098 MATCH_CMD 00DD MATCH_ERROR 00BA MATCH_LOOP 0248 MATCH_W10
025A MATCH_W20 025B MATCH_W30 023D MATCH_WORD 0000 NEXT_CHAR 0125 NEXT_CMD
023C NEXT_W10 0222 NEXT_WORD 0101 PREV_CMD 0115 PREV_CMD10 0268 PREV_W10
0271 PREV_W15 0000 PREV_W20 025C PREV_WORD 0000 PUT_STRING
0061 SAVE_CURRENT 0094 SAVE_CURRENT10
0097 SAVE_CURRENT20 005A SAVE_CURRENT_IF_DIRTY
0023 SAVE_HISTORY 003B SAVE_HISTORY10
0048 SAVE_HISTORY30 0000 SAVE_LINE 00A8 SEARCH_CMD 0000 SPACE_OUT
020A ZAP_BUFFER
 0100 MATCH30
0098 MATCH_CMD 00DD MATCH_ERROR 00BA MATCH_LOOP 0248 MATCH_W10
025A MATCH_W20 025B MATCH_W30 023D MATCH_WO

BIN
IBMDOS/BIN/IBMDOS.COM Normal file

Binary file not shown.

5
IBMDOS/BIN/IBMDOS.INP Normal file
View File

@@ -0,0 +1,5 @@
ibmdos.tmp=header.obj,pcmif.obj,cio.obj,disk.obj,ioctl.obj,misc.obj,support.obj,
dosmem.obj,error.obj,process.obj,network.obj,int2f.obj,fdos.obj,cdevio.obj,fioctl.obj,
fcbs.obj,redir.obj,dirs.obj,buffers.obj,bdevio.obj,cmdline.obj,history.obj
[map, data[origin[0000]]]


154
IBMDOS/BIN/IBMDOS.MAP Normal file
View File

@@ -0,0 +1,154 @@
Map for file: IBMDOS.TMP
Segments
--------
Length Start Stop Align Comb Name Class
3830 (0000:0000-382F) PARA PUB PCM_HEADER CODE
2C03 (0000:3830-6432) BYTE PUB PCM_CODE CODE
3ADE (0000:6434-9F11) WORD PUB BDOS_CODE CODE
02CC (0000:9F12-A1DD) WORD PUB PCM_RODATA CODE
0399 (0000:A1DE-A576) BYTE PUB PCM_HISTORY CODE
01B5 (0000:A577-A72B) BYTE PUB PCM_ICODE CODE
0000 PARA PUB PCM_CODEND CODE
0000 BYTE PUB CODE CODE
03A2 (0000:0000-03A1) WORD PUB PCMODE_DATA DATA
000E (0000:03A2-03AF) WORD COM FDOS_DSEG DATA
0C50 (0000:03B0-0FFF) WORD PUB FIXED_DOS_DATA DATA
02B8 (0000:1000-12B7) WORD PUB PCMODE_CODE DATA
0014 (0000:12B8-12CB) WORD PUB GLOBAL_DATA DATA
0120 (0000:12CC-13EB) WORD PUB BDOS_DATA DATA
0000 PARA PUB PCMODE_DSIZE DATA
Groups Segments
------ --------
PCMDATA PCMODE_DATA FDOS_DSEG FIXED_DOS_DATA PCMODE_CODE
GLOBAL_DATA BDOS_DATA PCMODE_DSIZE
PCMCODE PCM_HEADER PCM_CODE BDOS_CODE PCM_RODATA
PCM_HISTORY PCM_ICODE PCM_CODEND
map for module: HEADER
382A (0000:0000-3829) PCM_HEADER
0102 (0000:A1DE-A2DF) PCM_HISTORY
01B5 (0000:A577-A72B) PCM_ICODE
03A2 (0000:0000-03A1) PCMODE_DATA
000E (0000:03A2-03AF) FDOS_DSEG
0C50 (0000:03B0-0FFF) FIXED_DOS_DATA
02B8 (0000:1000-12B7) PCMODE_CODE
0004 (0000:12CC-12CF) BDOS_DATA
map for module: PCMIF
03F6 (0000:3830-3C25) PCM_CODE
00DC (0000:9F12-9FED) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: CIO
0491 (0000:3C26-40B6) PCM_CODE
0004 (0000:9FEE-9FF1) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
0001 (0000:12B8-12B8) GLOBAL_DATA
map for module: DISK
044C (0000:40B7-4502) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
0002 (0000:12BA-12BB) GLOBAL_DATA
map for module: IOCTL
0164 (0000:4503-4666) PCM_CODE
0032 (0000:9FF2-A023) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: MISC
0687 (0000:4667-4CED) PCM_CODE
004D (0000:A024-A070) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
0002 (0000:12BC-12BD) GLOBAL_DATA
map for module: SUPPORT
00C7 (0000:4CEE-4DB4) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: DOSMEM
0260 (0000:4DB5-5014) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: ERROR
01AE (0000:5015-51C2) PCM_CODE
00B4 (0000:A072-A125) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: PROCESS
07B2 (0000:51C3-5974) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: NETWORK
0086 (0000:5975-59FA) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: INT2F
04EB (0000:59FB-5EE5) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
000E (0000:12BE-12CB) GLOBAL_DATA
map for module: FDOS
199A (0000:6434-7DCD) BDOS_CODE
0078 (0000:12D0-1347) BDOS_DATA
map for module: CDEVIO
02B7 (0000:7DCE-8084) BDOS_CODE
map for module: FIOCTL
0238 (0000:8085-82BC) BDOS_CODE
map for module: FCBS
0558 (0000:82BD-8814) BDOS_CODE
map for module: REDIR
06CB (0000:8815-8EDF) BDOS_CODE
map for module: DIRS
03EE (0000:8EE0-92CD) BDOS_CODE
0037 (0000:1348-137E) BDOS_DATA
map for module: BUFFERS
052C (0000:92CE-97F9) BDOS_CODE
0005 (0000:1380-1384) BDOS_DATA
map for module: BDEVIO
0717 (0000:97FA-9F10) BDOS_CODE
0065 (0000:1386-13EA) BDOS_DATA
map for module: CMDLINE
054D (0000:5EE6-6432) PCM_CODE
00B7 (0000:A126-A1DC) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: HISTORY
0297 (0000:A2E0-A576) PCM_HISTORY
000E (0000:03A2-03AF) FDOS_DSEG


179
IBMDOS/BIN/IBMDOS.SYM Normal file
View File

@@ -0,0 +1,179 @@
0000 VARIABLES 0000 DATA
03A2 FDOS_DSEG
0000 VARIABLES 0000 DATA
13F0 DATA_END 12CC HASHROOT
0000 LABELS 0000 CODE
3800 CODE_START 380A OS_VERSION 3822 PATCH_VERSION
3806 PCMODE_DSEG A730 CODE_END
0000 VARIABLES 0000 DATA
0FE4 ACTIVE_CNT 056D FILE_ATTRIB 0572 REMOTE_CALL
043E SEC_PATHNAME 0EFE FDOS_STUB 0EE0 HASHMAX 057E TERM_PSP
03B6 BIOSDATE 0D1C DAYS_IN_MONTH 0588 CRITICAL_SP
0AA2 RWMODE 0F02 SHARE_STUB 0AA0 INDOS_STACK 03B8 MINUTE
0AAD UCASETBL 0EBC @PRIVATE_DATA 05CE CURRENT_FILEPOS
0584 INT21REGS_PTR 05F0 PREV_INT21REGS_OFF 0AA4 INT2F_CMD
0FE4 IDLE_DATA 0AAC SWAP_INDOS 03BE PRI_PATHNAME
05F2 PREV_INT21REGS_SEG 0ECC HMAROOT 0580 INT24_ESBP 0FEA IDLE_VEC
057C EXIT_TYPE 0620 FCB_SEARCH_BUF 0CE3 DBCS_TBL 054B NAME_BUF
0AA3 IOEXERR 0920 NORMAL_STACK 07A0 ERROR_STACK
05AA CURRENT_IFN 043E LOAD_FILE 058A CURRENT_DDSC
0FEE INT28_DELAY 0FE6 IDLE_MAX 0AA8 FILE_MODE 03B0 MUSTBE03B0
05A2 CURRENT_LDT 03BA HUNDREDTH 0FE8 IDLE_FLAGS
0FF0 INT28_RELOAD 0D12 DOS_VERSION
059E CURRENT_DHNDL 04BE SRCH_BUF 0ED6 LOCALMACHINEID
0EC4 @HIST_FLG 05F0 PREV_INT21REGS_PTR 03BE RELOC_BUF
059A CURRENT_DEVICE 0BB1 FILECHARSTBL
0B2F FILEUCASETBL 0AAA CLE_STATE 0AA1 ERR_DRV
0F3E WINDOWSHANDLECHECK 0AA6 INT2F_STACK
0584 INT21REGS_OFF 04F3 TEMP_LDT 0ED8 DMD_ADDRESS
0ECA CODESEG 0FC8 EXE_BUFFER 03BB SECOND 0586 INT21REGS_SEG
03B9 HOUR 0ED2 DMD_OWNER 0BE1 COLLATINGTBL
0374 EXE_LOADHIGH 0048 DEV_ROOT 0320 ERROR_FLAG
032E DMA_SEGMENT 0324 ERROR_CODE 0303 SHARING_FLAG
0010 FCB_LRU_COUNT 03A1 CHAR_COUNT 0351 MONTH 034A LOCUS
0334 RETCODE 01FB SAVBUF 0352 YEARSSINCE1980 0328 ERROR_DEV
0392 FCB_PATH2 0335 SYSTEM_RETCODE 0026 FUNC52_DATA
0089 DMD_UPPER_LINK 0358 INT28_FLAG 0300 COLUMN
02FF VERIFY_FLAG 0301 SWITCH_CHAR 005D SETVERPTR
0046 PHYS_DRV 034C RETRY_OFF 000E NETBIOS 0359 IOCTLRH
0357 INTERNAL_FLAG 0320 INTERNAL_DATA 0383 FCB_PATH
034E RETRY_SP 0304 NET_SET_COUNT 001A NET_RETRY 0337 BREAK_FLAG
0356 DAYOFWEEK 0327 ERROR_CLASS 0069 BOOTDRV 0040 FCB_PTR
033E MACHINE_ID 0342 LOAD_IMAGE 0372 LOAD_ENVSIZE
0322 ERROR_DRIVE 008C DMD_UPPER_ROOT 033C OWNING_PSP
0336 CURRENT_DSK 0334 USER_RETCODE 0346 LOAD_MAX
033A INT21AX 0332 BREAK_SP 0326 ERROR_ACTION 0305 NET_NAME
0370 LOAD_ENV 034B VALID_FLG 027B FDOS_BUF 002E CLK_DEVICE
0036 SECTOR_SIZE 001E BCB_ROOT 0348 LOAD_HANDLE
033A SWAP_ALWAYS 0323 ERROR_LOCUS 0032 CON_DEVICE
000F NAME_NUM 0302 MEM_STRATEGY 0344 LOAD_TOP 0340 LOAD_PSP
007C DEBLOCK_SEG 0026 DDSC_PTR 0354 DAYSSINCE1980
0330 CURRENT_PSP 002A FILE_PTR 001C NET_DELAY 0321 INDOS_FLAG
032C DMA_OFFSET 0024 DMD_ROOT 0350 DAYOFMONTH 003C LDT_PTR 02FE CIO_STATE
005A JOIN_DRV 0375 FCB_PB 0048 NUL_DEVICE 0047 LAST_DRV 1010 EXEC_STUB
1008 LOCK_TABLES 113E HISTBUF1 1144 HISTBUF2
1129 CRITICALSECTIONENABLE 112A SWSTARTUPINFO
10E5 INT2FBIOSHANDLER 12A8 INTL_XLAT 1192 XLAT_XLAT 1000 MUSTBE1000
1232 COUNTRY_FILENAME 1296 DEFAULT_COUNTRY
1004 UNLOCK_BIOS 1000 ENDOFINSTANCEDATA 1294 CUR_CP
1140 HISTSIZ1 1146 HISTSIZ2 10E9 INT2FNEXT 1102 INVALID_STUB
1014 FUNC4B05_STUB 100C UNLOCK_TABLES
1292 COUNTRY_DATA 1000 LOCK_BIOS 1292 CUR_COUNTRY
11A0 NOYESCHARS
0000 NUMBERS
0D90 LAST_KEY_EXT 001C INFO1_LEN 0082 INFO2_LEN 0082 INFO4_LEN
0018 INFO5_LEN 0102 INFO6_LEN 0012 INFO7_LEN 0008 RELOC_CNT
0000 LABELS 0000 CODE
3830 CALL5_ENTRY 3B29 DO_INT24 3A65 INT25_ENTRY
3A61 INT26_ENTRY 3B18 INT27_ENTRY
3BFD INVALID_FUNCTION 3C03 RELOAD_REGISTERS 3987 INACTIVE
39B3 DOS_ENTRY 3A36 INT21_FUNC 3BE9 GET_DSEG 3936 INT21_EXIT 39A7 ACTIVE
384F INT20_ENTRY 3851 INT21_ENTRY 9F12 PCMODE_FT
0000 NUMBERS
006D PCMODE_FTL
0000 LABELS 0000 CODE
3C26 FUNC01 3C2A FUNC02 3C37 FUNC03 3C3D FUNC04 3C42 FUNC05
3C6C FUNC06 3C7F FUNC07 3C87 FUNC08 3CA3 FUNC09
3F10 DEVICE_WRITE 3CB7 FUNC0A 3CC0 FUNC0B
3E00 COOKED_WRITE 3CCE FUNC0C 3CFD BREAK_CHECK
3DD0 RAW_READ 3F0C DEVICE_READ 3DC1 CMDLINE_READ
40DF VALID_DRIVE 4104 FUNC10 4104 FUNC11 4104 FUNC21
4104 FUNC12 4236 FUNC40 4104 FUNC22 4104 FUNC13 41DA FUNC41
4167 FUNC32 4104 FUNC23 4104 FUNC14 43EA FUNC60 426B FUNC42
4104 FUNC24 4104 FUNC15 4295 FUNC43 4104 FUNC16 42FE FUNC53
4104 FUNC17 42BD FUNC45 4174 FUNC36 4104 FUNC27 42B2 FUNC46
412C FUNC19 4104 FUNC28 4317 FUNC56 42EB FUNC47 4340 FUNC57
41E4 FUNC39 4409 FUNC67 4482 FUNC68 4130 FUNC1A 4139 FUNC1B
41E4 FUNC3A 4139 FUNC1C 40B7 FUNC0D 41E4 FUNC3B 40CD FUNC0E
4373 FUNC5A 41F6 FUNC3C 4104 FUNC0F 420E FUNC3D 41F6 FUNC5B
4167 FUNC1F 42CD FUNC5C 42BD FUNC3E 41C9 FUNC2F 448E FUNC6C
4236 FUNC3F 41E4 FUNC4E 41E4 FUNC4F
451B FUNC44 4503 FUNC69
47B4 FUNC30 47C9 FUNC33 4800 FUNC25 4678 FUNC52 4667 FUNC34
4816 FUNC35 483C FUNC63 4838 FUNC54 4797 FUNC37 4B89 FUNC65
4AA8 FUNC38 4873 FUNC29 4C77 FUNC66 495A FUNC2A 4980 FUNC2B
496D FUNC2C 4999 FUNC2D 4832 FUNC2E 467D FUNC5D
466A RETURN_DSBX_AS_ESBX 49BC READTIMEANDDATE
4D59 FCBFDOS_CRIT 4D3D RETURN_AX_CLC
4D01 SET_RETRY_RF 4CEE STRLEN 4D8E RETURN_BX 4D9B RETURN_CX
4D6F FDOS_NOCRIT 4DA8 RETURN_DX 4D03 SET_RETRY 4D82 RELOAD_ES
4D33 FDOS_AX_CRIT 4D28 FDOS_CRIT
4EED SET_OWNER 4DB5 FUNC48 4E4F FUNC58 4DE2 FUNC49 4EB7 FREE_ALL
4E1E FUNC4A 5004 CHECK_DMD_ID
5062 CHAR_ERROR 504A ERROR_RET 5015 FUNC59 503D ERROR_EXIT
505A FCBERROR_EXIT
54D3 FUNC00 52B0 FUNC31 52A3 FUNC50 52A8 FUNC51 52A8 FUNC62
51EF FUNC26 51C3 FUNC55 5928 CHECK_EXE 52DE FUNC4B 54F1 FUNC4C
55A4 FUNC4D 5936 IMAGE_SIZE
59E2 FUNC5F_COMMON 5975 FUNC5E 59B1 FUNC5F
5A52 INT2F_ENTRY
0000 VARIABLES 0000 DATA
132C GLOBAL_PASSWORD 12D6 FDOS_HDS_ROOT 12E6 INFO_FCB
131C FDOS_PB 12D4 FDOS_HDS_BLK 12D8 FDOS_HDS_DRV
132A FDOS_RET 1316 FDOS_INFO
0000 LABELS 0000 CODE
7DB4 SHARE_DELAY 6E07 FDOS_MKDDSC
6B82 FDOS_GETDPB 682B FDOS_CLOSE 6FB5 FDOS_MOVE
6D61 FILE_UPDATE 6552 FDOS_MKDIR 7CD9 READTOD
7B7F LDS_SI_DMAPTR 65B4 FDOS_RMDIR 6CA6 FDOS_NEXT
6EFD FDOS_EXPAND 6BEA FDOS_SELECT
7A9F DISCARD_FILES 7A70 RELEASE_HANDLE 6DB9 FDOS_MKNEW
6BB8 FDOS_FLUSH 7108 FDOS_DATTIM 71B2 DBCS_LEAD
79EE VFY_DHNDL_PTR 6C7D FDOS_FIRST 6D53 FDOS_COMMIT
6B34 FDOS_CURDIR 7C77 MV_JOIN_ROOT 6514 FDOS_ERROR
68B5 FDOS_WRITE 6A25 FDOS_ED_FUNCTION 74F0 GET_PB2_DRIVE
68EE FDOS_UNLINK 7B8B COPY_ASCIIZ 6434 FDOS_ENTRY
7607 UNPARSE 79AB VERIFY_HANDLE 7B7A CURRENT_DSK2AL
6E18 BPB2DDSC 654D FDOS_ED_ACCESS 7B60 GET_XFTPTR 685E FDOS_READ
77B8 CHECK_DELIM 7AF0 FIND_DHNDL 6E9C FDOS_DDIO 78C6 FIND_XFN
7B92 CHECK_JOIN 720B REBUILD_LDT_ROOT 653E FDOS_ED_DRIVE
7D6B HASH_PWD 77FD TOUPPER 6C1D FDOS_EXEC 652D FDOS_RESTART
78DF ALLOC_DHNDL 6DDD FDOS_LOCK 6AEA FDOS_DUP 65FA FDOS_CHDIR
64BD LOCAL_DISK 78ED ALLOC_XFN 69BB FDOS_CHMOD 7B85 LES_DI_DMAPTR
77F5 CHECK_SLASH 75F7 HDSBLK 7AC7 IFN2DHNDL 6AF9 FDOS_FDUP
673D FDOS_CREAT 65DF UPDATE_DIR_FAT 77EC CHECK_DSLASH
7791 PARSE_ONE 7133 TIMESTAMP_DHNDL 67C2 FDOS_OPEN 6960 FDOS_LSEEK
8019 FIRST_DEV 7E81 WRITE_DEV 804C IOC6_DEV 8050 IOC7_DEV 7EB6 READ_DEV
7E67 DUP_DEV 7DCE OPEN_DEV 7E75 CLOSE_DEV
80A9 FDOS_IOCTL
82BD FDOS_EXIT 8301 FDOS_FCB
8957 ISLOCAL 8815 REDIR_DHNDL_OFFER 8D5B REDIR_BUILD_PATH
8891 REDIR_DRV_OFFER 8845 REDIR_MOVE_OFFER 8904 GET_LDT
883F REDIR_ASCIIZ_DEV_OFFER 887C REDIR_ASCIIZ_FILE_OFFER
8877 REDIR_ASCIIZ_OFFER 8919 GET_LDT_RAW
88A7 REDIR_SNEXT_OFFER
0000 VARIABLES 0000 DATA
137D CHDBLK 1379 DCNT 1377 DIRP 137B FINDDFCB_MASK
1357 DIRBUF
0000 LABELS 0000 CODE
8EE0 FILL_DIRBUF 928A ALLOCDIR 9259 HSHDSCRD
8F9B DISCARD_DIRBUF 8F3A FLUSH_DIRBUF 9005 SETENDDIR
917E FIXUP_HASHING 9022 FINDDFCB 901F FINDDFCBF 915A MKHSH
9025 GETDIR
960B UPDATE_DIR 92CE UPDATE_DDSC_FREE 946C FIXFAT
9414 ALLOCATE_CLUSTER 936C GETNBLK 9334 BUFFERS_CHECK
9595 LOCATE_BUFFER 9523 FATPTR 946A CHANGE_FAT_ENTRY
96D3 ZEROBLK 961B FLUSH_DRIVE 92FB DISCARD_DIRTY
93A7 ALLOC_CLUSTER 93AA ALLOC_CHAIN 9351 DELFAT
92FF DISCARD_ALL 9303 DISCARD_DIR 9382 GETBLK
9612 UPDATE_DAT 9616 UPDATE_FAT
0000 VARIABLES 0000 DATA
13A5 DOSFAT 1395 LASTCL 1388 LOGICAL_DRV 139F CLSIZE
13B4 FDRWFLG 139D NFATRECS 13B0 CUR_DMA_SEG 13AE CUR_DMA
138A PSECSIZ 1393 DATADD 138E FATADD 13CD REQ_HDR 13A1 SECPERCLU
1399 DIRADD 1389 PHYSICAL_DRV 13A3 DIRPERCLU 1391 DIRINROOT
1386 HDSADDR 13A8 PBLOCK 13A7 ADRIVE 13AC MULT_SEC 139B NFATS
0000 LABELS 0000 CODE
9EF3 CLUS2SEC 9CE1 SELECT_PHYSICAL_DRV 9E9E WRITE_BLOCK
9819 FDOSRW 9D06 SELECT_ADRIVE 9C59 DEVICE_DRIVER
97FA GET_DDSC 9C85 SELECT_LOGICAL_DRV 9C38 BLOCK_DEVICE_DRIVER
9EB2 READ_BLOCK 9E79 MARK_LDT_UNSURE 9BF9 DDIOIF 9BD4 BLOCKIF
6389 SPACE_OUT 6136 DEL_EOL 6116 PREV_W20 619F DEL_LINE 5EE6 READ_LINE
6339 CHAR_INFO 638D BS_OUT 6399 PUT_STRING 60C9 GOTO_BOL 62B4 SAVE_LINE
615E DELN_W10 60DD NEXT_CHAR A127 EDIT_SIZE
A303 SAVE_HISTORY A2E0 INIT_HISTORY A51D MATCH_WORD
A4E4 DEL_CUR_HISTORY_BUFFER A554 DEL_BOL A4D1 DEL_HISTORY_BUFFERS
A53C PREV_WORD A502 NEXT_WORD A378 MATCH_CMD A388 SEARCH_CMD A3E1 PREV_CMD
A405 NEXT_CMD A418 GOTO_EOL A565 DELN_WORD


BIN
IBMDOS/BIN/IBMDOS.TMP Normal file

Binary file not shown.

BIN
IBMDOS/BIN/INT2F.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/IOCTL.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/MISC.OBJ Normal file

Binary file not shown.

696
IBMDOS/BIN/NETWORK.LST Normal file
View File

@@ -0,0 +1,696 @@
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 1
= 0001 __RASM__ EQU 1
; File : $NETWORK.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$
; ENDLOG
;
; DOS Network Function Calls
= 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
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 2
= ; 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
= 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
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 3
= ;
= 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: NETWORK.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: NETWORK.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 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
PC-DOS RASM-86 1.4a Source: NETWORK.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
=
= 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
= 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
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 7
= 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
=
=
= 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
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 8
= 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:redir.equ
= ; File : $REDIR.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
= ; Int 2F AH=11 msnet redirector hook equates
=
= 1100 I2F_PRESCENCE equ 1100h
= 1101 I2F_RMDIR equ 1101h
= 1103 I2F_MKDIR equ 1103h
= 1105 I2F_CHDIR equ 1105h
= 1106 I2F_CLOSE equ 1106h
= 1107 I2F_COMMIT equ 1107h
= 1108 I2F_READ equ 1108h
= 1109 I2F_WRITE equ 1109h
= 110A I2F_LOCK equ 110Ah
= 110B I2F_UNLOCK equ 110Bh
= 110C I2F_SPACE equ 110Ch
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 9
= 110E I2F_SET_ATTR equ 110Eh
= 110F I2F_GET_ATTR equ 110Fh
= 1111 I2F_REN equ 1111h
= 1113 I2F_DEL equ 1113h
= 1116 I2F_OPEN equ 1116h
= 1117 I2F_CREATE equ 1117h
= 1118 I2F_XCREATE equ 1118h
= 1119 I2F_XSFIRST equ 1119h
= 111B I2F_SFIRST equ 111Bh
= 111C I2F_SNEXT equ 111Ch
= 111D I2F_PCLOSE equ 111Dh
= 111E I2F_REDIR_5F equ 111Eh
= 111F I2F_REDIR_5E equ 111Fh
= 1120 I2F_FLUSH equ 1120h
= 1121 I2F_LSEEK equ 1121h
= 1122 I2F_PTERM equ 1122h
= 1123 I2F_PPATH equ 1123h
= 1124 I2F_CTLP_ERR equ 1124h
= 1125 I2F_REDIR_5D equ 1125h
= 1126 I2F_CTLP equ 1126h
=
= 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
= ; 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 ***
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 10
= ;
= ; $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
= 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
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 11
= 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
PCM_CODE CSEG BYTE
extrn reload_ES:near
extrn return_AX_CLC:near
extrn return_CX:near
extrn error_exit:near
extrn get_ldt_raw:near
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 12
; *****************************
; *** DOS Function 5E ***
; *** Get Machine Name ***
; *****************************
;
Public func5E
func5E:
0000 3C017208 000C cmp al,1 ! jb f5E00 ; Get Machine Name Sub-Function
0004 741C 0022 je f5E01 ; Set Machine Name Sub-Function
0006 B81F11 mov ax,I2F_REDIR_5E ; magic int 2F number
0009 E96100 006D jmp func5F_common ; use common routine
;
; Get the current Machine Name
;
f5E00:
000C 8BFA mov di,dx ; Copy the 15 Byte Network Name
000E BE0000 E mov si,offset net_name
0011 B90800 mov cx,16/2
0014 F3A5 rep movsw
; mov ch,name_num ; 00 -> Undefined Name
; mov cl,netbios ; 00 -> Name Number
0016 8B0E0000 E mov cx,word ptr netbios
001A E80000 E call return_CX
f5E_success:
001D 33C0 xor ax,ax ; return zero
001F E90000 E jmp return_AX_CLC
;
; Set the Network Name
;
f5E01:
; mov name_num,ch ; Get the Network and NetBios Nos.
; mov netbios,cl ; and save in local variables
0022 890E0000 E mov word ptr netbios,cx
0026 FE060000 E inc net_set_count
002A 1E06 push ds ! push es
002C 1F07 pop ds ! pop es ; Copy the specified name
002E 8BF2 mov si,dx ; to internal save area
0030 BF0000 E mov di,offset net_name
0033 B90F00 mov cx,15 ; Copy 15 byte name leave
0036 F3A4 rep movsb ; Terminating 00
0038 061F push es ! pop ds
003A EBE1 001D jmps f5E_success
; *****************************
; *** DOS Function 5F ***
; *** Network Control ***
; *****************************
;
Public func5F
func5F:
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 13
003C 3C07 cmp al,07h
003E 7404 0044 je func5F_10
0040 3C08 cmp al,08h
0042 7526 006A jne func5F_40
func5F_10:
0044 50 push ax
0045 8AC2 mov al,dl
0047 E80000 E call get_ldt_raw
004A 58 pop ax
004B 7215 0062 jc func5F_30
004D 26837F4501 cmp es:word ptr LDT_PDT[bx],1
0052 720E 0062 jb func5F_30
0054 26804F4440 or es:byte ptr LDT_FLAGS+1[bx],LFLG_PHYSICAL/100h
0059 3C07 cmp al,07h
005B 7405 0062 je func5F_30
005D 26806744BF and es:byte ptr LDT_FLAGS+1[bx],(not LFLG_PHYSICAL)/100h
func5F_30:
0062 731A 007E jnc func5F_OK
0064 B8F1FF mov ax,ED_DRIVE
0067 E90000 E jmp error_exit
func5F_40:
006A B81E11 mov ax,I2F_REDIR_5F ; magic int 2F number
Public func5F_common
func5F_common:
006D 1E push ds
006E FF360000 E push int21AX ; AX passed on the stack..
0072 06 push es
0073 E80000 E call reload_ES ; get the segment registers
0076 1F pop ds ; back to entry state
0077 F9 stc ; assume it will fail
0078 CD2F int 2fh ; pass it on to MSNET
007A 1F pop ds ; throw away word on the stack
007B 1F pop ds
007C 7203 0081 jc func5F_error
func5F_OK:
007E E90000 E jmp return_AX_CLC ; return the result
func5F_error:
0081 F7D8 neg ax ; our error convention is negative..
0083 E90000 E jmp error_exit ; Error for all sub functions
PCMODE_DATA DSEG WORD
extrn net_name:byte
extrn net_set_count:byte
extrn name_num:byte
extrn netbios:byte
extrn int21AX:word
end
PC-DOS RASM-86 1.4a Source: NETWORK.A86 Page 14
End of assembly. Number of errors: 0. Use factor: 14%


BIN
IBMDOS/BIN/NETWORK.OBJ Normal file

Binary file not shown.

83
IBMDOS/BIN/NETWORK.SYM Normal file
View File

@@ -0,0 +1,83 @@
0000 VARIABLES
0000 DMD_ID 0006 DMD_IDLE_FLAGS 0003 DMD_LEN 0008 DMD_NAME
0001 DMD_PSP 0000 FDOS_DATA 0000 INT21AX 0000 NAME_NUM 0000 NETBIOS
0000 NET_NAME 0000 NET_SET_COUNT 0001 REG_AH 0000 REG_AL
0000 REG_AX 0003 REG_BH 0002 REG_BL 000C REG_BP 0002 REG_BX
0005 REG_CH 0004 REG_CL 0014 REG_CS 0004 REG_CX 0007 REG_DH
000A REG_DI 0006 REG_DL 000E REG_DS 0006 REG_DX 0010 REG_ES
0016 REG_FLAGS 0012 REG_IP 0008 REG_SI
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 0001 CARRY_FLAG 0007 CLASS_APPLIC
0003 CLASS_AUTHOR 000C CLASS_EXISTS
0009 CLASS_FORMAT 0005 CLASS_HARDWARE
0004 CLASS_INTERNAL 000A CLASS_LOCKED 0008 CLASS_LOST
000B CLASS_MEDIA 0001 CLASS_RESOURCE
0006 CLASS_SYSTEM 0002 CLASS_TEMP 000D CLASS_UNKNOWN
0004 DCNTRL_COUNT 0000 DCNTRL_DSADD
0000 DCNTRL_DSOFF 0002 DCNTRL_DSSEG 0006 DCNTRL_LEN
0020 DHAT_BIN 0001 DHAT_CIN 0040 DHAT_CLEAN 0008 DHAT_CLK 0002 DHAT_COT
0080 DHAT_DEV 001F DHAT_DRVMSK 1000 DHAT_LOCAL
0800 DHAT_NETPRN 0004 DHAT_NUL 0040 DHAT_READY
8000 DHAT_REMOTE 4000 DHAT_TIMEOK 4000 DHM_COMMIT
0000 DHM_COMPAT 0010 DHM_DENY_ALL 0040 DHM_DENY_NONE
0030 DHM_DENY_READ 0020 DHM_DENY_WRITE 8000 DHM_FCB
0080 DHM_LOCAL 2000 DHM_NOCRIT 0000 DHM_RO 0002 DHM_RW 000F DHM_RWMSK
0070 DHM_SHAREMSK 0001 DHM_WO 0005 DHNDL_ATTR 0035 DHNDL_BLK
000B DHNDL_BLK1 0000 DHNDL_COUNT 000F DHNDL_DATE
0004 DHNDL_DATRB 001B DHNDL_DBLK 001E DHNDL_DCNTHI
001F DHNDL_DCNTLO 0007 DHNDL_DEVOFF
0007 DHNDL_DEVPTR 0009 DHNDL_DEVSEG 0028 DHNDL_EXT
0019 DHNDL_IDX 003B DHNDL_LEN 0002 DHNDL_MODE 0020 DHNDL_NAME 0015 DHNDL_POS
0017 DHNDL_POSHI 0015 DHNDL_POSLO 0031 DHNDL_PSP
002B DHNDL_SFT 0033 DHNDL_SHARE 0011 DHNDL_SIZE
0013 DHNDL_SIZEHI 0011 DHNDL_SIZELO 000D DHNDL_TIME
002F DHNDL_UID 0005 DHNDL_WATTR 0400 DIR_FLAG
0008 DMD_NAME_LEN FFFB ED_ACCESS FFF4 ED_ACC_CODE
FFAB ED_ASSIGN FFEA ED_BADCMD FFE9 ED_BADDATA FFE6 ED_BADMEDIA
FFE8 ED_BADRHLEN FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK
FFA6 ED_COMPONENT FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR
FFDE ED_DISKCHG FFF9 ED_DMD FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS
FFAD ED_FAIL FFFE ED_FILE FFF5 ED_FORMAT FFFF ED_FUNCTION
FFE1 ED_GENFAIL FFFC ED_HANDLE FFFA ED_H_MATCH FFA6 ED_LASTERROR
FFDF ED_LOCKFAIL FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET
FFBF ED_NETACCESS FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG
FFB7 ED_NETPWD FFB5 ED_NETREQ FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER
FFA8 ED_NETWRITE FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER
FFEB ED_NOTREADY FFA9 ED_PARAM FFAA ED_PASSWORD
FFFD ED_PATH FFED ED_PROTECT FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM
FFE0 ED_SHAREFAIL FFAC ED_STRUCT FFE3 ED_WRFAIL 0002 ERR_ABORT
0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY 0000 FALSE 1105 I2F_CHDIR
1106 I2F_CLOSE 1107 I2F_COMMIT 1117 I2F_CREATE 1126 I2F_CTLP
1124 I2F_CTLP_ERR 1113 I2F_DEL 1120 I2F_FLUSH
110F I2F_GET_ATTR 110A I2F_LOCK 1121 I2F_LSEEK 1103 I2F_MKDIR
1116 I2F_OPEN 111D I2F_PCLOSE 1123 I2F_PPATH 1100 I2F_PRESCENCE
1122 I2F_PTERM 1108 I2F_READ 1125 I2F_REDIR_5D
111F I2F_REDIR_5E 111E I2F_REDIR_5F 1111 I2F_REN
1101 I2F_RMDIR 110E I2F_SET_ATTR 111B I2F_SFIRST 111C I2F_SNEXT
110C I2F_SPACE 110B I2F_UNLOCK 1109 I2F_WRITE 1118 I2F_XCREATE
1119 I2F_XSFIRST 0001 IDLE_COMMAND
FFFF IDLE_DETECT C000 IDLE_DISABLE
0002 IDLE_DOSFUNC 8000 IDLE_INIT 0004 IDLE_INT28 4000 IDLE_ON
004D IDM 005A IDZ 0200 INT_FLAG 0049 LDT_BLK 004D LDT_DRV
0043 LDT_FLAGS 0058 LDT_LEN 0000 LDT_NAME 0045 LDT_PDT 004B LDT_ROOT
004F LDT_ROOTLEN 2000 LFLG_JOINED
8000 LFLG_NETWRKD 4000 LFLG_PHYSICAL 1000 LFLG_SUBST
0002 LOC_BLOCK 0004 LOC_CHAR 0005 LOC_MEMORY 0003 LOC_NET
0001 LOC_UNKNOWN 000D MAX_FILELEN
0050 MAX_PATHLEN 0040 NO_CRIT_ERRORS 0800 OFLW_FLAG
0008 OK_FAIL 0020 OK_IGNORE 0010 OK_RETRY 0018 OK_RF 0030 OK_RI
0038 OK_RIF 0004 PROC_DEVIN 0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN
0080 SIGN_FLAG 00C0 STACK_SIZE 0001 TERM_BREAK 0002 TERM_ERROR
0000 TERM_NORMAL 0003 TERM_RESIDENT FFFF TRUE
0006 TRUE_VERSION 0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
0000 ERROR_EXIT 000C F5E00 0022 F5E01 001D F5E_SUCCESS
0000 FUNC5E 003C FUNC5F 0044 FUNC5F_10 0062 FUNC5F_30 006A FUNC5F_40
006D FUNC5F_COMMON 0081 FUNC5F_ERROR 007E FUNC5F_OK
0000 GET_LDT_RAW 0000 RELOAD_ES 0000 RETURN_AX_CLC
0000 RETURN_CX
_RI
0038 OK_RIF 0004 PROC_DEVIN 0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN

BIN
IBMDOS/BIN/PCMIF.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/PROCESS.OBJ Normal file

Binary file not shown.

BIN
IBMDOS/BIN/REDIR.OBJ Normal file

Binary file not shown.

875
IBMDOS/BIN/SUPPORT.LST Normal file
View File

@@ -0,0 +1,875 @@
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

BIN
IBMDOS/BIN/SUPPORT.OBJ Normal file

Binary file not shown.

93
IBMDOS/BIN/SUPPORT.SYM Normal file
View File

@@ -0,0 +1,93 @@
0000 VARIABLES
0000 CURRENT_PSP 0000 DBCS_TBL 0000 DMD_ID
0006 DMD_IDLE_FLAGS 0003 DMD_LEN 0008 DMD_NAME 0001 DMD_PSP
0000 FDOS_DATA 0008 FD_ADJUST 0008 FD_ATTRIB 0002 FD_BPBOFF 0004 FD_BPBSEG
0004 FD_BUF 0004 FD_BUFOFF 0006 FD_BUFSEG 0008 FD_COUNT 0006 FD_DATE
000A FD_DDIO_DMAOFF 000C FD_DDIO_DMASEG
0002 FD_DDIO_DRV_OP 0004 FD_DDIO_NSECTORS
0008 FD_DDIO_STARTHIGH 0006 FD_DDIO_STARTLOW 0006 FD_DDSCOFF
0008 FD_DDSCSEG 0004 FD_DPB 0004 FD_DPBOFF 0006 FD_DPBSEG 0002 FD_DRIVE
0002 FD_FCBADR 0006 FD_FCBCNT 0008 FD_FCBFUNC 0002 FD_FCBOFF 0004 FD_FCBSEG
0006 FD_FLAG 0000 FD_FUNC 0002 FD_HANDLE 0004 FD_IOCTLFUNC
0006 FD_IOCTLSTAT 0008 FD_LENGTH 000C FD_LFLAG 0008 FD_METHOD
0006 FD_MODE 0002 FD_NAME 0002 FD_NAMEOFF 0004 FD_NAMESEG 0004 FD_NEWHND
000A FD_NNAME 000A FD_NNAMEOFF 000C FD_NNAMESEG
0002 FD_NUMOPEN 0004 FD_OFFSET 0002 FD_ONAME 0002 FD_ONAMEOFF
0004 FD_ONAMESEG 0004 FD_PATH 0004 FD_PATHOFF 0006 FD_PATHSEG
0002 FD_PSPSEG 0004 FD_SFLAG 0008 FD_TIME 0000 INT21REGS_PTR
0001 REG_AH 0000 REG_AL 0000 REG_AX 0003 REG_BH 0002 REG_BL
000C REG_BP 0002 REG_BX 0005 REG_CH 0004 REG_CL 0014 REG_CS
0004 REG_CX 0007 REG_DH 000A REG_DI 0006 REG_DL 000E REG_DS
0006 REG_DX 0010 REG_ES 0016 REG_FLAGS 0012 REG_IP 0008 REG_SI
0000 RETRY_OFF 0000 RETRY_SP 0000 VALID_FLG
0000 NUMBERS
0004 ACT_ABORT 0002 ACT_DELAY 0006 ACT_IGNORE 0001 ACT_RETRY 0005 ACT_TERM
0007 ACT_URETRY 0003 ACT_USER 0001 CARRY_FLAG 0007 CLASS_APPLIC
0003 CLASS_AUTHOR 000C CLASS_EXISTS
0009 CLASS_FORMAT 0005 CLASS_HARDWARE
0004 CLASS_INTERNAL 000A CLASS_LOCKED 0008 CLASS_LOST
000B CLASS_MEDIA 0001 CLASS_RESOURCE
0006 CLASS_SYSTEM 0002 CLASS_TEMP 000D CLASS_UNKNOWN
0004 DCNTRL_COUNT 0000 DCNTRL_DSADD
0000 DCNTRL_DSOFF 0002 DCNTRL_DSSEG 0006 DCNTRL_LEN
0020 DHAT_BIN 0001 DHAT_CIN 0040 DHAT_CLEAN 0008 DHAT_CLK 0002 DHAT_COT
0080 DHAT_DEV 001F DHAT_DRVMSK 1000 DHAT_LOCAL
0800 DHAT_NETPRN 0004 DHAT_NUL 0040 DHAT_READY
8000 DHAT_REMOTE 4000 DHAT_TIMEOK 4000 DHM_COMMIT
0000 DHM_COMPAT 0010 DHM_DENY_ALL 0040 DHM_DENY_NONE
0030 DHM_DENY_READ 0020 DHM_DENY_WRITE 8000 DHM_FCB
0080 DHM_LOCAL 2000 DHM_NOCRIT 0000 DHM_RO 0002 DHM_RW 000F DHM_RWMSK
0070 DHM_SHAREMSK 0001 DHM_WO 0005 DHNDL_ATTR 0035 DHNDL_BLK
000B DHNDL_BLK1 0000 DHNDL_COUNT 000F DHNDL_DATE
0004 DHNDL_DATRB 001B DHNDL_DBLK 001E DHNDL_DCNTHI
001F DHNDL_DCNTLO 0007 DHNDL_DEVOFF
0007 DHNDL_DEVPTR 0009 DHNDL_DEVSEG 0028 DHNDL_EXT
0019 DHNDL_IDX 003B DHNDL_LEN 0002 DHNDL_MODE 0020 DHNDL_NAME 0015 DHNDL_POS
0017 DHNDL_POSHI 0015 DHNDL_POSLO 0031 DHNDL_PSP
002B DHNDL_SFT 0033 DHNDL_SHARE 0011 DHNDL_SIZE
0013 DHNDL_SIZEHI 0011 DHNDL_SIZELO 000D DHNDL_TIME
002F DHNDL_UID 0005 DHNDL_WATTR 0400 DIR_FLAG
0008 DMD_NAME_LEN FFFB ED_ACCESS FFF4 ED_ACC_CODE
FFAB ED_ASSIGN FFEA ED_BADCMD FFE9 ED_BADDATA FFE6 ED_BADMEDIA
FFE8 ED_BADRHLEN FFE7 ED_BADSEEK FFEC ED_BADUNIT FFF7 ED_BLOCK
FFA6 ED_COMPONENT FFF3 ED_DATA FFEF ED_DEVICE FFF0 ED_DIR
FFDE ED_DISKCHG FFF9 ED_DMD FFF1 ED_DRIVE FFF6 ED_ENVIRON FFB0 ED_EXISTS
FFAD ED_FAIL FFFE ED_FILE FFF5 ED_FORMAT FFFF ED_FUNCTION
FFE1 ED_GENFAIL FFFC ED_HANDLE FFFA ED_H_MATCH FFA6 ED_LASTERROR
FFDF ED_LOCKFAIL FFAE ED_MAKE FFF8 ED_MEMORY FFCE ED_NET
FFBF ED_NETACCESS FFB3 ED_NETCOMM FFA7 ED_NETFUNC FFB1 ED_NETLOG
FFB7 ED_NETPWD FFB5 ED_NETREQ FFB2 ED_NETSRVR FFB4 ED_NETTIME FFB6 ED_NETVER
FFA8 ED_NETWRITE FFDD ED_NOFCBS FFDC ED_NOLOCKS FFE4 ED_NOPAPER
FFEB ED_NOTREADY FFA9 ED_PARAM FFAA ED_PASSWORD
FFFD ED_PATH FFED ED_PROTECT FFE2 ED_RDFAIL FFE5 ED_RNF FFEE ED_ROOM
FFE0 ED_SHAREFAIL FFAC ED_STRUCT FFE3 ED_WRFAIL 0002 ERR_ABORT
0003 ERR_FAIL 0000 ERR_IGNORE 0001 ERR_RETRY 0000 FALSE
0007 FDOS_MAXPARM 0050 FD_COMMIT 0054 FD_DDIO
0048 FD_DISKINFO 004B FD_EXEC 004C FD_EXIT 0055 FD_EXPAND
004D FD_FCB 0049 FD_FLUSH 0052 FD_LOCK 0051 FD_NEW 0058 FD_REOPEN
004A FD_SELECT 0001 IDLE_COMMAND FFFF IDLE_DETECT
C000 IDLE_DISABLE 0002 IDLE_DOSFUNC 8000 IDLE_INIT
0004 IDLE_INT28 4000 IDLE_ON 004D IDM 005A IDZ 0200 INT_FLAG
0049 LDT_BLK 004D LDT_DRV 0043 LDT_FLAGS 0058 LDT_LEN 0000 LDT_NAME
0045 LDT_PDT 004B LDT_ROOT 004F LDT_ROOTLEN
2000 LFLG_JOINED 8000 LFLG_NETWRKD
4000 LFLG_PHYSICAL 1000 LFLG_SUBST 0002 LOC_BLOCK 0004 LOC_CHAR
0005 LOC_MEMORY 0003 LOC_NET 0001 LOC_UNKNOWN
000D MAX_FILELEN 0050 MAX_PATHLEN
0040 NO_CRIT_ERRORS 0800 OFLW_FLAG 0008 OK_FAIL 0020 OK_IGNORE
0010 OK_RETRY 0018 OK_RF 0030 OK_RI 0038 OK_RIF 0004 PROC_DEVIN
0001 PROC_IDLE 0002 PROC_INT28 0003 PROC_KEYIN 0080 SIGN_FLAG 00C0 STACK_SIZE
0001 TERM_BREAK 0002 TERM_ERROR 0000 TERM_NORMAL
0003 TERM_RESIDENT FFFF TRUE 0006 TRUE_VERSION
0040 ZERO_FLAG 0001 __RASM__
0000 LABELS
0000 ERROR_EXIT 0000 FCBERROR_EXIT 006B FCBFDOS_CRIT
007F FCBFDOS_E10 0076 FCBFDOS_ERROR
0045 FDOS_AX_CRIT 003A FDOS_CRIT 0069 FDOS_E10 0000 FDOS_ENTRY
0060 FDOS_ERROR 0081 FDOS_NOCRIT 0000 GET_DSEG 0094 RELOAD_ES
004F RETURN_AX_CLC 00A0 RETURN_BX 00AD RETURN_CX 00BA RETURN_DX
0015 SET_RETRY 0013 SET_RETRY_RF 0000 STRLEN
IGN_FLAG 00C0 STACK_SIZE
0001 TERM_BREAK 0002 TERM_ERROR 0000 TERM_NORMAL

1300
IBMDOS/BUFFERS.A86 Normal file

File diff suppressed because it is too large Load Diff

523
IBMDOS/CDEVIO.A86 Normal file
View File

@@ -0,0 +1,523 @@
title 'F_DOS Character device I/O'
; File : $CDEVIO.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: $
; CDEVIO.A86 1.18 94/12/21 11:16:29
; Changed dev_dup to refuse from duplicating remote devices rather
; than refuse from duplicating FCBs
; Made open_dev return IFN rather than XFN for FCB opens
; Made open_dev put the current time/date into DHNDL_TIME/DHNDL_DATE
; CDEVIO.A86 1.16 94/10/07 09:00:18
; Added patch 004 as source fix. Changed request header length for character
; device to 16h. Used RH4_CDEV_LEN instead of RH4_LEN.
; CDEVIO.A86 1.15 93/12/10 00:09:17
; Move non-inherited bit to correct place in file handle
; CDEVIO.A86 1.14 93/11/26 16:17:14
; Update char_error so ES:SI -> device driver header itself;
; ENDLOG
eject ! include i:psp.def
eject ! include i:modfunc.def
eject ! include i:fdos.equ
eject ! include i:mserror.equ
eject ! include i:doshndl.def
eject ! include i:driver.equ
eject ! include rh.equ
BDOS_DATA dseg
extrn fdos_buf:byte ; caveat: in PCMODE data segment
extrn fdos_pb:word
extrn fdos_ret:word
;
; Critical Error responses from the default INT 24 handler and
; the DO_INT24 routine.
;
ERR_IGNORE equ 0 ; Ignore Error
ERR_RETRY equ 1 ; Retry the Operation
ERR_ABORT equ 2 ; Terminate the Process
ERR_FAIL equ 3 ; Fail Function
BDOS_CODE cseg
public open_dev
public close_dev
public dup_dev
public read_dev
public write_dev
public first_dev
public ioc6_dev
public ioc7_dev
extrn cooked_write:near ; write to cooked console
extrn read_line:near ; read edited line
extrn break_check:near ; look for CTRL C
extrn char_error:near ; generate Int 24
extrn current_dsk2al:near ; get default drive in AL
extrn device_driver:near
extrn alloc_dhndl:near ; find free DHNDL_ structure
extrn alloc_xfn:near
extrn les_di_dmaptr:near
extrn release_handle:near
extrn get_xftptr:near
extrn timestamp_dhndl:near
; Character device functions
; ==========================
open_dev:
;--------
; Entry: ES:BX -> character device header
; Note: We own the MXdisk here, fdos_pb -> parameter data
push es ! push bx ; save device driver address
call alloc_xfn ; DI = XFN
push di ; save XFN
call alloc_dhndl ; ES:BX -> DHNDL, AX = IFN
pop dx ; DX = XFN
xchg ax,si ; SI = IFN
xor ax,ax
lea di,DHNDL_DATRB[bx] ; point at start of area to fill
mov cx,DHNDL_UID-DHNDL_DATRB
rep stosb
mov es:DHNDL_SHARE[bx],ax ; also zap share word
pop es:DHNDL_DEVOFF[bx]
pop es:DHNDL_DEVSEG[bx] ; save device driver address
push si ! push dx ; save IFN/XFN
mov es:DHNDL_COUNT[bx],1
push ds
mov ax,fdos_pb+6 ; AX = open mode
mov cx,DHAT_DEV+DHAT_CLEAN+DHAT_TIMEOK
lds si,es:DHNDL_DEVPTR[bx] ; DS:SI -> device driver
or cl,ds:byte ptr DH_ATTRIB[si]
; get attrib from device driver
test al,DHM_LOCAL ; is it private ?
jz open_dev10
and al,not DHM_LOCAL ; clear inherit bit
or ch,DHAT_LOCAL/256 ; rememmber it's local
open_dev10:
mov es:DHNDL_MODE[bx],ax
mov es:DHNDL_WATTR[bx],cx
lea si,DH_NAME[si] ; copy the device name
lea di,DHNDL_NAME[bx] ; from the device header
mov cx,8/WORD
rep movsw
mov al,' '
mov cl,3 ; space the file extension
rep stosb
pop ds
pop dx ! pop ax ; AX = IFN, DX = XFN
push es
call get_xftptr ; ES:DI -> PSP_XFTPTR for current_psp
jc open_dev20 ; no PSP, skip updating XFN
add di,dx ; ES:DI -> entry in PSP
stosb ; update entry in PSP
xchg ax,dx
open_dev20:
pop es
mov fdos_ret,ax ; save XFN (IFN for FCB open) to return
call timestamp_dhndl
or es:DHNDL_ATTR[bx],DHAT_READY
; jmp open_dup_dev
open_dup_dev:
;------------
; On Entry:
; ES:BX = DHNDL_
; On Exit:
; None
;
mov al,CMD_DEVICE_OPEN
; jmp open_close_dev ; call device open routine
open_close_dev:
;--------------
; entry: ES:BX = DHNDL_
; AL = cmd_type (CMD_DEVICE_OPEN/CMD_DEVICE_CLOSE)
;
push ds ! push es
push bx ! push si
lds si,es:DHNDL_DEVPTR[bx] ; DS:SI -> device driver
test ds:DH_ATTRIB[si],DA_REMOVE
jz ocdev1 ; does the device support OPEN/CLOSE/RM
sub sp,RH13_LEN-2*word ; make space on stack for RH_
push ax ; RH_CMD = AL
mov ax,RH13_LEN
push ax ; RH_LEN = RH13_LEN
push ss ! pop es
mov bx,sp ; ES:BX -> RH_
call device_driver ; call the device driver
add sp,RH13_LEN ; recover stack space
ocdev1:
pop si ! pop bx
pop es ! pop ds
ret
dup_dev:
;-------
; On Entry:
; ES:BX -> DHNDL_
; On Exit:
; None
; AX trashed
;
mov ax,es:DHNDL_WATTR[bx]
test al,DHAT_DEV
jz dup_dev10 ; skip if disk file
test ax,DHAT_REMOTE ; or remote
jz open_dup_dev
dup_dev10:
ret
close_dev: ; close character device handle
;---------
; entry: FDOS_PB+2 = user file handle
; ES:BX = file handle
; NOTE: This is called with the MXdisk owned
mov al,CMD_DEVICE_CLOSE
call open_close_dev ; call device close routine
call release_handle ; release the XFN
dec es:DHNDL_COUNT[bx] ; one less XFN refers to this IFN
ret
write_dev: ; write to character device handle
;---------
; entry: ES:BX -> DHNDL_ structure
;
mov cl,CMD_OUTPUT ; OUTPUT driver function
or es:DHNDL_ATTR[bx],DHAT_READY
mov al,es:DHNDL_ATTR[bx] ; get file info
and al,DHAT_BIN+DHAT_NUL+DHAT_CIN+DHAT_COT
cmp al,DHAT_CIN+DHAT_COT ; is it cooked console?
jne inst_io ; no, device driver i/o
mov si,2[bp] ; SI -> parameter block
mov cx,ds:8[si] ; CX = string length
jcxz write_dev20 ; exit if nothing to write
les di,ds:4[si] ; ES:DI -> string to print
mov al,'Z'-40h ; we have to stop at ^Z
repne scasb ; scan for ^Z character
jne write_dev10 ; skip if ^Z not found
inc cx ; include ^Z in count of chars to skip
sub ds:8[si],cx ; subtract from total count
write_dev10:
mov bx,ds:2[si] ; BX = handle number
mov cx,ds:8[si] ; CX = string length
mov si,ds:4[si] ; ES:SI -> string to print
call cooked_write ; write w/ tab expansion & ^C checking
write_dev20:
sub bx,bx ; no errors
ret ; return the result
read_dev: ; read to character device handle
;--------
; entry: ES:BX -> DHNDL_ structure
mov al,es:DHNDL_ATTR[bx] ; get the file info
mov ah,al ; save ioctl info
and al,DHAT_BIN+DHAT_CIN+DHAT_COT
cmp al,DHAT_CIN+DHAT_COT ; is it cooked console?
jne rddev1 ; skip if binary or not console
jmp read_con ; read from console handle
; return the result
rddev1:
test ah,DHAT_READY ; previous EOF ?
jnz rddev2 ; yes we return now
mov di,2[bp] ; DI -> parameter block
mov ds:word ptr 8[di],0 ; zero bytes xfered
ret
rddev2:
mov cl,CMD_INPUT
inst_io:
; ES:BX = DHNDL_, CL = command
sub sp,RH4_CDEV_LEN ; make RH_ on stack
mov di,bx ; save address DHNDL_ in DI
mov bx,sp ; SS:BX -> request header
mov ds:RH_CMD[bx],cl
mov ds:RH_LEN[bx],RH4_CDEV_LEN
mov ds:RH_STATUS[bx],0 ; status OK in case of zero chars
mov si,2[bp] ; DS:SI -> parameter block
lea si,4[si] ; point at buffer offset
lodsw ; get buffer offset
; Normalising the address has been unnecessary so far
; push ax
; and ax,15 ; normalise the address
; pop cx
; shr cx,1 ! shr cx,1
; shr cx,1 ! shr cx,1
mov ds:RH4_BUFOFF[bx],ax ; set buffer offset in request header
lodsw ; get buffer segment
; add ax,cx ; add in normalised offset/16
mov ds:RH4_BUFSEG[bx],ax ; get buffer segment in request header
lodsw ; get byte count
xchg ax,cx ; byte count in CX
; Parameter block created on stack at SS:BX and initialised for xfer
; ES:DI -> DHNDL_, CX = total number of bytes to xfer
inst_io20:
mov ds:RH4_COUNT[bx],cx ; try and do this many
test es:DHNDL_ATTR[di],DHAT_BIN+DHAT_NUL
; are we in binary mode ?
jcxz inst_io30 ; return on zero length xfer
jnz inst_io25 ; binary, skip calling PCMODE
mov ds:RH4_COUNT[bx],1 ; do one char at a time
call break_check ; call the break check routine
cmp ds:RH_CMD[bx],CMD_OUTPUT ; which way are we going
jne inst_io25
call inst_io_getchar ; AL = 1st char in the buffer
cmp al,1Ah ; EOF - don't send it or anything after
je inst_io30 ; and exit without xfering any
inst_io25:
push ds ! push es ! push di ! push cx
lds si,es:DHNDL_DEVPTR[di] ; DS:SI -> device driver
push ss ! pop es ; ES:BX -> RH_
call device_driver ; execute the command
pop cx ! pop di ! pop es ! pop ds
jns inst_io_continue ; if no errors carry on
push es
les si,es:DHNDL_DEVPTR[di] ; ES:SI -> device driver
call char_error ; this will handle the Int 24
pop es
cmp al,ERR_RETRY ; what should we do ?
je inst_io20 ; retry the operation
ja inst_io30 ; fail - return error
mov ds:RH_STATUS[bx],RHS_DONE
jmps inst_io_ignore ; ignore - fiddle status and
inst_io_continue: ; say we did it all
mov dx,ds:RH4_COUNT[bx] ; how many did we xfer ?
test dx,dx ; if we haven't done any
jz inst_io30 ; we are stuck so exit now
inst_io_ignore:
call inst_io_getchar ; AL = 1st char in the buffer
add ds:RH4_BUFOFF[bx],dx ; it may not enough so adjust offset
sub cx,dx ; and number still to do
cmp ds:RH_CMD[bx],CMD_INPUT ; which way are we going - if input
jne inst_io20 ; we need to check for CR/EOF
test es:DHNDL_ATTR[di],DHAT_BIN+DHAT_NUL
jnz inst_io30 ; if BIN then exit now
cmp al,13 ; is it a CR character ?
je inst_io30 ; yes, we stop now
cmp al,1Ah ; is it the EOF character ?
jne inst_io20 ; yes, we aren't ready
and es:DHNDL_ATTR[di],not DHAT_READY
inst_io30:
mov di,2[bp] ; DI -> parameter block
sub ds:8[di],cx ; subtract # not xfered from byte count
mov ax,ds:RH_STATUS[bx] ; get result for later
sub bx,bx ; assume no errors
test ax,ax ; test error bit (8000h)
jns rddev_no_err ; skip if ERROR set
mov bl,al ; AL is error code
neg bx ; make it negative code
add bx,ED_PROTECT ; normalize for extended errors
rddev_no_err:
add sp,RH4_CDEV_LEN ; free up RH_ on stack
ret ; return BX
inst_io_getchar:
push ds
lds si,ds:RH4_BUFFER[bx] ; point to the users buffer
lodsb ; get 1st char in the buffer
pop ds
ret
read_con: ; handle read from cooked console
;--------
; entry: AH = DHNDL_ATTR
; ES:BX -> DHNDL_
; 2[BP] -> F_DOS parameter block
; exit: BX = return value
xor cx,cx ; assume we've already had EOF
test ah,DHAT_READY ; now see if we have
jnz con_dev_not_eof
jmp con_dev_exit ; yes, just return zero chars read
con_dev_not_eof:
push es
push bx ; save DHNDL_
con_dev_loop:
mov bx,word ptr fdos_buf ; get # of bytes already used
xor ax,ax
xchg al,bh ; get # bytes in the buffer
inc ax ! inc ax ; also count the CR/LF
sub ax,bx ; have we any bytes left in the buffer?
ja con_dev_cont ; yes, return them
; no, we need a fresh input line
mov fdos_buf,128 ; read up to 128 characters
mov si,2[bp] ; SI -> parameter block
mov bx,ds:2[si] ; BX = input handle
push ds ! pop es
mov dx,offset fdos_buf ; ES:DX -> console buffer
mov cx,bx ; output to same handle as input
push bx
push bp
call read_line ; read edited line
pop bp
mov bl,fdos_buf+1 ; # byte we have read
mov bh,0 ; BX = # of characters read
mov word ptr fdos_buf+2[bx],0A0Dh; append carriage return/line feed
mov fdos_buf,0 ; start reading at beginning
lea si,fdos_buf+3[bx] ; Echo the LF character to the
pop bx ; Same Output handle
mov cx,1 ; Only One Character
call cooked_write
jmps con_dev_loop
con_dev_cont: ; BX = buffer offset
mov di,2[bp] ; DI -> parameter block
mov cx,ds:8[di] ; CX = # of bytes to read
cmp cx,ax ; reading more than available?
jbe con_dev_ok ; no, read as much as you want
mov cx,ax ; else take all that there is
con_dev_ok:
add fdos_buf,cl ; update buffer index for next time
les di,ds:4[di] ; ES:DI -> buffer to read into
lea si,fdos_buf+2[bx] ; DS:SI -> function 10 buffer
push cx ; save count
rep movsb ; read all the data
pop cx ; restore count
mov al,1Ah ; now we look for EOF mark...
push ds ! pop es
lea di,fdos_buf+2[bx] ; ES:DI -> function 10 buffer
mov si,cx ; keep count safe
repne scasb
xchg cx,si ; restore count
pop bx ; recover DHNDL_
pop es
jne con_dev_exit ; if no EOF, skip to exit
sub cx,si ; subtract any after EOF mark
dec cx ; and the EOF mark itself
and es:DHNDL_ATTR[bx],not DHAT_READY
con_dev_exit:
mov di,2[bp] ; DI -> parameter block
mov ds:8[di],cx ; set # of characters read
sub bx,bx ; good return code
ret
eject
first_dev: ; F_DOS FIRST call on device performed
;--------- ; Called with MXDisk
; On Entry:
; ES:BX -> device header
; On Exit:
; dma_buffer initialised with device name
;
mov dx,es ; DX:BX -> device header
call les_di_dmaptr ; ES:DI -> DMA buffer
mov al,0FFh ; invalidate search state for NEXT
mov cx,21
rep stosb
mov al,40h ; mark it as a device
stosb
sub ax,ax
mov cx,4
rep stosw ; zero time, date, file size
lea si,10[bx]
push ds
mov ds,dx ; DS:SI -> name in device header
mov cx,4
rep movsw ; copy device name across
pop ds
mov cx,8
frstdev1: ; scan off trailing spaces
cmp es:byte ptr 0-1[di],' '
jne frstdev2
dec di
loop frstdev1
frstdev2:
mov al,0
stosb ; add a trailing NUL
ret
eject
ioc6_dev: ; IOCTL(6) - input status for device
;--------
; entry: ES:BX -> DHNDL_
mov al,CMD_INPUT_NOWAIT
jmps ioc67d ; call the device driver
ioc7_dev: ; IOCTL(7) - output status for device
;--------
; entry: ES:BX -> DHNDL_
mov al,CMD_OUTPUT_STATUS ; OUTPUT STATUS
ioc67d: ; common code for I/O STATUS
push ds
sub sp,RH5_LEN-2*word ; allocate request header on stack
push ax ; RH_CMD = AL
mov ax,RH5_LEN
push ax ; RH_LEN = RH5_LEN
lds si,es:DHNDL_DEVPTR[bx] ; DS:SI -> device driver
push ss ! pop es
mov bx,sp ; ES:BX -> RH_
mov es:RH5_CHAR[bx],0 ; zero the char
call device_driver ; do the CALLF's to the device driver
xor dl,dl ; assume not ready
mov dh,es:RH5_CHAR[bx] ; possible peeked character
add sp,RH5_LEN ; recover stack space
pop ds
test ax,RHS_ERROR+RHS_BUSY ; test if BUSY bit set in status
jnz ioc67d_ret ; device not ready if error or busy
dec dl ; return ready DL = FF
ioc67d_ret:
mov si,2[bp] ; SI -> user's parameter block
mov ds:6[si],dx ; update returned status
sub bx,bx ; no error occurred
ret ; for now
end ; of CDEVIO.A86

74
IBMDOS/CHAR.DEF Normal file
View File

@@ -0,0 +1,74 @@
; File : $CHAR.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
; 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
;************************************************;
;* *;
;* Character Definitions *;
;* *;
;************************************************;
CTLA equ 'A' - '@'
CTLB equ 'B' - '@'
CTLC equ 'C' - '@'
CTLD equ 'D' - '@'
CTLE equ 'E' - '@'
CTLF equ 'F' - '@'
CTLG equ 'G' - '@'
BELL equ 'G' - '@'
CTLH equ 'H' - '@'
CTLI equ 'I' - '@'
TAB equ 'I' - '@'
CTLJ equ 'J' - '@'
LF equ 'J' - '@'
CTLK equ 'K' - '@'
CTLM equ 'M' - '@'
CR equ 'M' - '@'
CTLP equ 'P' - '@'
CTLQ equ 'Q' - '@'
CTLR equ 'R' - '@'
CTLS equ 'S' - '@'
CTLT equ 'T' - '@'
CTLU equ 'U' - '@'
CTLV equ 'V' - '@'
CTLW equ 'W' - '@'
CTLX equ 'X' - '@'
CTLY equ 'Y' - '@'
CTLZ equ 'Z' - '@'
ESC equ '[' - '@'
CTLBS equ '\' - '@'
CTLUB equ '_' - '@'
CTLUP equ '^' - '@'
DEL equ 07Fh
RUBOUT equ DEL
CTL equ '^'

1068
IBMDOS/CIO.A86 Normal file

File diff suppressed because it is too large Load Diff

1111
IBMDOS/CMDLINE.A86 Normal file

File diff suppressed because it is too large Load Diff

70
IBMDOS/CMDLINE.EQU Normal file
View File

@@ -0,0 +1,70 @@
; File : $CMDLINE.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
RL_INPUT equ word ptr -2[bp] ; READ_LINE Input Handle
RL_OUTPUT equ word ptr -4[bp] ; READ_LINE Output Handle
RL_BUFSEG equ word ptr -6[bp] ; Retained line Segment
RL_BUFOFF equ word ptr -8[bp] ; Retained line Offset
RL_BUFPTR equ dword ptr -8[bp] ; Retained line Buffer
RL_INICOL equ word ptr -10[bp] ; initial column
RL_FLAGS equ word ptr -12[bp] ; Control Flags
RL_MAXLEN equ word ptr -14[bp] ; Maximum Buffer Size
RL_KANJI equ word ptr -16[bp] ; Kanji Character Buffer
RL_SAVMAX equ word ptr -18[bp] ; Size of retained data
RL_SAVPOS equ word ptr -20[bp] ; Current Position in data
RL_HIST_RECL equ word ptr -22[bp] ; We recall from here
RL_HIST_SAVE equ word ptr -24[bp] ; We save to here
RL_HIST_SIZE equ word ptr -26[bp] ; buffer is this big
RL_HIST_SEG equ word ptr -28[bp] ; buffer is at this segment
RL_LENGTH equ 28
RLF_ENHANCED equ 0000$0001b ; Enhanced features are on
RLF_INS equ 0000$0010b ; Insert Flag
RLF_SEARCH equ 0000$0100b ; Search mode on
RLF_MATCH equ 0000$1000b ; We are matching a command
RLF_RECALLED equ 0001$0000b ; Line already recalled
RLF_DIRTY equ 0010$0000b ; Partial line needs saved
RLF_KANJI equ 0100$0000b ; RL_KANJI is valid
RLF_INROOT equ 1000$0000b ; In root
CHAR_SPACE equ 0000$0001b ; Space Character
CHAR_TAB equ 0000$0010b ; Tab Character
CHAR_CTL equ 0000$0100b ; Control Character expanded to "^X"
CHAR_KANJI equ 0000$1000b ; Japanese Kanji character
CHAR_ALPHAN equ 0001$0000b ; Alpha/Numeric
CHAR_OTHER equ 0010$0000b ; Non AlphaNumeric
CHAR_STD equ 1000$0000b ; Stored as a Byte displayed in 1 Col
CHAR_SIZE equ CHAR_STD or CHAR_KANJI or CHAR_TAB or CHAR_CTL
CHAR_ONECOL equ CHAR_SPACE or CHAR_OTHER or CHAR_ALPHAN

3662
IBMDOS/COUNTRY.A86 Normal file

File diff suppressed because it is too large Load Diff

73
IBMDOS/COUNTRY.DEF Normal file
View File

@@ -0,0 +1,73 @@
; File : $COUNTRY.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
; 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
US_DATE equ 0 ; American Date Format mm/dd/yy
EURO_DATE equ 1 ; European Date Format dd/mm/yy
JAP_DATE equ 2 ; Japanese Date Format yy/mm/dd
CLOCK_12 equ 0 ; 12 Hour Clock Time Format
CLOCK_24 equ 1 ; 24 Hour Clock Time Format
CI_CODE equ word ptr 0FFFCh ; Country Code
CI_CODEPAGE equ word ptr 0FFFEh ; Code page
CI_DATEFMT equ word ptr 0 ; Date Format
CI_CURRENCY equ byte ptr 2 ; Currency Symbols
CI_THOUSANDS equ byte ptr 7 ; Thousands Separator
CI_DECIMAL equ byte ptr 9 ; Decimal Separator
CI_DATESEP equ byte ptr 11 ; Date Separator
CI_TIMESEP equ byte ptr 13 ; Time Separator
CI_CURFMT equ byte ptr 15 ; Currency Format
CI_CURDIGITS equ byte ptr 16 ; Significant Currency Digits
CI_TIMEFMT equ byte ptr 17 ; Time Format
CI_CASEOFF equ word ptr 18 ; Case Translation Offset
CI_CASESEG equ word ptr 20 ; Case Translation Segment
CI_DATASEP equ byte ptr 22 ; Data List Separator
CI_STATICLEN equ 24 ; Static Country Data Length
CI_LENGTH equ 32 ; Total Country Data Length
EXI_ID equ byte ptr 0 ; Information ID
EXI_TBLOFF equ word ptr 1 ; Table Offset
EXI_TBLSEG equ word ptr 3 ; Table Segment
EXI_ID1 equ byte ptr 0 ; 6501 Info ID (why move it?!)
EXI_LENGTH equ word ptr 1 ; 6501 Table Length
EXI_DATA_LEN equ 3 ; 6501 Country Data
EXCI_CUR_COUNTRY equ word ptr 0 ; Current Country
EXCI_CUR_CP equ word ptr 2 ; Current Codepage
EXCI_CI_DATAOFF equ 4 ; Start of CI_ data
EXCI_STATLEN equ CI_STATICLEN+4 ; Static Ext Country Info
EXCI_MAXLEN equ EXCI_STATLEN+10+EXI_DATA_LEN ; Max Ext Country Info

827
IBMDOS/DIRS.A86 Normal file
View File

@@ -0,0 +1,827 @@
title 'DIRS - dos directory support'
; File : $DIRS.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$
; DIRS.A86 1.13 94/12/01 13:16:24
; changed error code if directory entry cannot be allocated;
; DIRS.A86 1.12 93/08/27 18:49:04
; hash code fixup on previously unused entries resets hash count
; pcformat bug where an extra (zero-length) command.com was left on disk
; ENDLOG
;
; Date Who Modification
; --------- --- ---------------------------------------
; 19 Aug 91 Initial version created for VLADIVAR
eject
include bdos.equ
include i:mserror.equ
include i:fdos.equ
eject
PCMODE_DATA dseg
if DELWATCH
extrn fdos_stub:dword ; for calling delwatch TSR
endif
BDOS_DATA dseg word
extrn adrive:byte
EXTRN clsize:WORD
extrn diradd:word
extrn dirinroot:word
EXTRN dirperclu:WORD
EXTRN dosfat:WORD
extrn hashroot:dword
extrn hashmax:word
EXTRN info_fcb:BYTE
extrn lastcl:word
extrn psecsiz:word
eject
hash rw 2 ; hash code work area
; The dirbcb says what is in the local dirbuf
dirbcb db 0ffh ; drive of dirbuf entry
dirbcb_cl dw 0 ; cluster of dirbuf entry
dirbcb_dcnt dw 0 ; directory index of dirbuf entry
dirbcb_block rw 2 ; block of dirbuf entry
dirbcb_offset dw 0 ; byte offset in block of dirbuf entry
public dirbuf
dirbuf rb 32 ; local directory buffer
public dirp
dirp dw 0 ; directory entry pointer
public dcnt
dcnt dw 0 ; directory index count
public finddfcb_mask
finddfcb_mask dw 0800h ; hi byte = reject DA_VOLUME attribs
; lo byte = accept non-0 start clusters
; 00FF = include labels, but not
; pending deletes
; 0000 = include everything
public chdblk
chdblk dw 0 ; current cluster # of directory
BDOS_CODE cseg
extrn alloc_cluster:NEAR
extrn clus2sec:near
extrn hdsblk:near ; get current directory block
extrn fdos_error:NEAR
extrn fixfat:NEAR
extrn getnblk:NEAR
extrn locate_buffer:near
extrn update_dir:NEAR
extrn update_fat:NEAR
extrn zeroblk:near
eject
public allocdir
public discard_dirbuf
public finddfcb
public finddfcbf
public fill_dirbuf
public flush_dirbuf
public getdir
public hshdscrd
public mkhsh
public setenddir
eject
;----------
fill_dirbuf: ;get 32 byte directory entry
;----------
; On Entry:
; AX = cluster to read (0=root)
; BX = dir within cluster
; On Exit:
; DI -> dirbuf entry
call discard_dirbuf ; invalidate block in case of error
mov dirbcb_cl,ax ; remember which cluster
mov dirbcb_dcnt,bx ; and dir entry we want
test ax,ax ; are we in the root ?
jz fill_dirbuf10
mov cl,FCBSHF
shl bx,cl ; BX = byte offset in cluster
call clus2sec ; DX:AX -> sector
jmps fill_dirbuf20 ; BX = offset in sector
fill_dirbuf10:
mov ax,FCBLEN
mul bx ; DX:AX = byte offset
div psecsiz ; AX = sector offset, DX = byte offset
mov bx,dx ; BX = byte offset in sector
xor dx,dx
add ax,diradd ; add in start of root dir
adc dx,dx
fill_dirbuf20:
mov dirbcb_block,ax ; we want this sector
mov dirbcb_block+WORD,dx
mov dirbcb_offset,bx
xchg ax,dx ; DX = low word of sector
mov ah,al ; AH = low byte of high word
push bx ; save byte offset in sector
mov cx,0FF00h+BF_ISDIR ; locate directory sector
call locate_buffer ; ES:SI -> BCB_
pop bx ; BX = offset within sector
push es ! pop ds ; DS:SI -> buffer control block
lea si,BCB_DATA[si+bx] ; DS:SI -> data in buffer
push ss ! pop es
mov di,offset dirbuf ; ES:DI -> dir buffer
push di
mov cx,32/WORD ; copy into local buffer
rep movsw
pop di ; DI -> dir buffer
push ss ! pop ds
mov al,adrive ; remember where we are
mov dirbcb,al ; so we can write it back
ret
;------------
flush_dirbuf:
;------------
mov al,0FFh
xchg al,dirbcb ; do we have anything to flush ?
cmp al,adrive
jne flush_dir20 ; skip if invalid contents
mov si,offset dirbcb_block
lodsw ; get low word of block
xchg ax,dx ; put it in DX where it belongs
lodsw ; get high word of block
mov ah,al ; AH:DX -> block to find
mov cx,0FF00h+BF_ISDIR ; look for directory
call locate_buffer ; locate physical sector
or es:BCB_FLAGS[si],BF_DIRTY; mark this buffer as modified
mov bx,dirbcb_offset ; BX = offset within buffer
lea di,BCB_DATA[si+bx] ; ES:DI -> offset in buffer
mov al,es:[di] ; AL = 1st character of dir entry
mov si,offset dirbuf ; get CP/M buffer address
mov cx,32/WORD
rep movsw ; copy modified entry back
push ax
xor dh,dh ; we only want HCB_ if it's there
mov cx,dirbcb_cl ; and it's this cluster
call find_hcb ; does an HCB_ exist for this entry ?
pop ax
jc flush_dir20 ; no, skip update
mov di,dirbcb_dcnt ; we want this dir entry
cmp di,es:HCB_CNT[bx] ; is this within the hashed entries ?
jae flush_dir20 ; no, skip the fixup
test al,al ; are we using a never used entry ?
jnz flush_dir10 ; if so don't trust subsequent hash
inc di ; codes as they have never been read.
mov es:HCB_CNT[bx],di ; Truncate table to force a read of the
dec di ; next dir entry (which will normally
flush_dir10: ; also be never used)
shl di,1 ; DI = offset of hashed entry
lea di,HCB_DATA[bx+di]
mov si,offset dirbuf ; this is the dir entry
call mkhsh ; AX = hash code of our entry
stosw ; update hash code for dir entry
flush_dir20:
push ds ! pop es ; ES = local data segment
ret
;--------------
discard_dirbuf:
;--------------
mov dirbcb,0FFh ; invalidate dirbuf
ret
;--------
rd_pcdir:
;--------
; Exit: AX = offset of directory entry
; = 0 if end of directory
mov bx,dcnt
inc bx
mov dcnt,bx ; dcnt=dcnt+1
call hdsblk ; AX = current directory block
jz rd_pcdir40 ; skip if we're at the root
; we we in a subdirectory - lets follow the chain
xchg ax,cx ; keep subdir cluster in CX
mov ax,FCBLEN ; AX = size of dir entry
mul bx ; DX:AX = offset of set entry we want
div clsize ; AX = # clusters to skip, DX = offset in cluster
xchg ax,dx ; DX = # to skip, AX = offset in cluster
xchg ax,cx ; AX = start of chain, CX = offset in cluster
xchg bx,cx ; BX = offset in cluster, CX = dcnt
jcxz rd_pcdir20 ; 1st subdir entry, we are already there
mov cx,chdblk ; do we already know where we are ?
jcxz rd_pcdir10 ; if not trace from start of chain
xchg ax,cx ; AX = cluster of last dir entry
test bx,bx ; have we moved onto next cluster?
jnz rd_pcdir20 ; no, trust me..
mov dx,1 ; move on to next entry in the chain
rd_pcdir10:
or dx,dx ; skip along chain until we arrive
jz rd_pcdir20 ; at the destination cluster
dec dx
push bx
push dx
call getnblk ; AX = next cluster in chain
pop dx
pop bx
cmp ax,lastcl ; have we fallen off the end of the chain ?
jbe rd_pcdir10
jmps rd_pcdir30 ; yes, set end of directory
rd_pcdir20:
mov chdblk,ax ; remember this cluster for next time
mov cl,FCBSHF ; to divide by fcb size
shr bx,cl ; BX = dir offset in cluster
jmps rd_pcdir50 ; now go and find the entry
rd_pcdir30:
call setenddir ; yes, set dcnt to end of directory
jmps rd_pcdir60
rd_pcdir40:
; we are in the root directory
cmp bx,dirinroot ; end of the root directory ?
jae rd_pcdir30
rd_pcdir50:
call fill_dirbuf ;locate directory entry
xchg ax,di ; AX -> dir entry
cmp dcnt,ENDDIR
jnz rd_pcdir70
rd_pcdir60:
xor ax,ax ; return 0 if endofdir
rd_pcdir70:
mov bx,ax
ret
;---------
setenddir: ;set dcnt to the end of directory (dcnt = 0ffffh)
;---------
mov dcnt,ENDDIR
mov chdblk,0
ret
chk_wild: ;check fcb for ? marks
;--------
; On Entry:
; bx -> FCB
; On Exit:
; ZF set if ? found
; BX preserved
push ds ! pop es ; ES -> SYSDAT
lea di,byte ptr FNAME[bx] ; ES:DI -> name to scan
mov cx,11
mov al,'?' ; scan for wild cards
repne scasb
ret
eject
eject
;---------
finddfcbf: ; Find matching directory fcb(dfcb) from beginning of directory
;---------
call setenddir ; set up for search first
;--------
finddfcb: ; Find matching directory fcb(dfcb)
;--------
mov cx,2
;------
getdir:
;------
; entry: CH = offset info_fcb (always 0 except from rename)
; CL = search length
; 0 = return next fcb
; 1 = return empty fcb
; 2 = find match (Based on info_fcb)
; 3 = find match? Based on info_fcb
;
; exit: AX,BX,DIRP = pointer to dfcb
; 0 = no match (end of directory)
; other = offset of requested directory entry
; ZF = zero flag is set based on AX
;
; Note: The most common call for this function is with CX =
; 2 (match with name, not extent) with 'dcnt' set to
; 0FFFFh (search from beginning of the directory
; (e.g. open, create, delate, rename, etc.).
; Therefore we try to optimize directory searches
; using a dynamic hash table...
;struct dirfcb *getdir(offset,srchl);
cmp dcnt,0FFFFh ;if ((dcnt == 0xffff) &&
jne gtd_next
mov hash+2,cx ; Save off calling option
xor ax,ax ; hash code 0 for free entry
cmp cx,1 ; what kind of search?
je gtdo15 ; CL=1: find free entry (AX=0)
jb gtd_next ; CL=0: find any entry (unhashed)
or ch,ch ; name in INFO_FCB+1?
jnz gtd_next ; no, unhashed search
mov bx,offset info_fcb
call chk_wild ; wildcards used in search?
jz unhshd1 ; yes, can't use hashing
mov si,offset info_fcb+1 ; else compute hash code
call mkhsh ; for name to find
gtdo15:
mov hash,ax ; save it for search
call hdsblk ; get directory block
gtdo3:
push ax ; save dir block for later
call hashsrch ; try and use hashing to find a match
jnc gtdo4 ; look closer if we get possible match
add dcnt,ax ; else skip known non-matches
pop ax ; recover current dir block
test ax,ax ; if we are in the root
jz unhashed ; we must search the hard way
xchg ax,bx
mov ax,dcnt ; should we go onto next cluster ?
inc ax ; only if next entry is the start
xor dx,dx ; of a cluster
div dirperclu
xchg ax,bx
test dx,dx ; at start of cluster ?
jnz unhashed
call getnblk ; onto next cluster until we are
cmp ax,lastcl ; at the end of the chain
jbe gtdo3
jmps unhashed ; out of luck
gtdo4:
add dcnt,ax ; we have found a match, so start
pop ax ; search here
; jmps unhashed
unhashed: ; /* locate entry */
mov chdblk,0
unhshd1:
mov cx,hash+2 ;}
gtd_next:
;--------
push cx
call rd_pcdir ; Get Next DFCB
pop cx
gtd_exit:
mov dirp,ax ; assume this is the one
mov bx,ax
or ax,ax ; should we exit with not found ?
jz gtd2
cmp cl,NEXT ; Caller wishes next dfcb?
jne gtd3 ; NO
gtd2:
mov ax,bx ; return BX (DIRP or NULLPTR)
or ax,ax ; return ZF (1 = not found)
ret
gtd3:
cmp cl,EMPTY ; Caller wishes an empty dfcb?
jne gtd4 ; NO
mov al,DNAME[bx] ; Get directory type
or al,al ; Is it free?
jz gtd2 ; YES (00 -> never used)
cmp al,0E5h ; Is the dfcb empty?
je gtd2 ; YES (E5 -> erased)
jmps gtd_next ; NO, try the next
gtd4: ; looking for particular entry
call hdsblk ; Are we at the root?
jnz gtd5 ; skip if not
mov ax,dcnt ; check for end of directory
cmp ax,dirinroot ; have we reached end of root?
mov ax,0 ; assume we have
jae gtd_exit ; exit if we have
gtd5:
mov al,DNAME[bx] ; Get dfcb type
cbw
or ax,ax ; Are we at End Of Directory(EOD)
jz gtd_exit ; YES
cmp al,0E5h ; Is this a free fcb?
je gtd_next ; Yes, try again
mov ax,finddfcb_mask ; do we want labels/pending deletes
test DATTS[bx],ah ; filter out volume labels?
jnz gtd_next ; we normally reject them
if DELWATCH
cbw ; we want labels - do we want
test word ptr DBLOCK1[bx],ax ; DELWATCH pending deletes
jnz gtd_next ; ie. labels with fat chain
endif
push cx ; we are interested - but does
mov al,ch ; the name match ?
cbw
add ax,offset info_fcb+1
xor si,si ; we want SI = entry to match and
xchg ax,si ; AL = 0 indicating assumed match
mov cx,11 ; 11 chars in filename
mov di,bx ; ES:DI -> directory entry
match3:
jcxz match4 ; stop if we have done all 11
repe cmpsb ; compare if 11 bytes the same
je match4 ; skip if all bytes the same
cmp byte ptr 0-1[si],'?' ; else was INFO_FCB byte = '?'
je match3 ; in that case it matches too
inc ax ; else we didn't match (AL<>0)
match4:
pop cx
or al,al ; did we match ?
jnz gtd_next ; no, try for another
mov bx,dirp ; Return (BX)
jmp gtd2
eject
find_hcb: ; find HCB_ for given drive
;--------
; On Entry:
; CX = cluster we are looking for
; DH = 00 if exact match required
; FF if we want to recyle oldest HCB_
; On Exit:
; CY set, AX=0 if HCB_ not found
; CY clear ES:BX = offset of HCB_ (moved to head of list)
; (AX/DX trashed, All other regs preserved)
;
les bx,hashroot ; get our hashing pointer
mov ax,es
or ax,bx ; is hashing enabled ?
jz find_hcb30
mov dl,adrive ; look for this drive
cmp cx,es:HCB_CLU[bx] ; does cluster match?
jne find_hcb10 ; goto next if not
cmp dl,es:HCB_DRV[bx] ; does drive match?
jne find_hcb10 ; goto next if not
; clc
ret ; we have a match on the 1st one
find_hcb10:
; no match, so look futher along the chain
mov ax,es:HCB_LINK[bx] ; onto the next entry
test ax,ax ; is there one ?
jz find_hcb20
xchg ax,bx ; AX = previous entry, BX = current
cmp cx,es:HCB_CLU[bx] ; does cluster match?
jne find_hcb10 ; goto next if not
cmp dl,es:HCB_DRV[bx] ; does drive match?
jne find_hcb10 ; goto next if not
; we have a match, but it's not the first so recycle it
mov dx,es:HCB_LINK[bx] ; get link to the rest of the chain
xchg ax,bx ; BX = previous entry
mov es:HCB_LINK[bx],dx ; unlink ourselves from chain
mov bx,ax ; BX = current entry
xchg ax,word ptr hashroot ; put current entry at the head
mov es:HCB_LINK[bx],ax ; and relink the rest of the chain
; clc
ret
find_hcb20:
; we have been all along the chain with no luck
xor ax,ax
test dh,dh ; no HCB_ - do we want to recyle ?
jz find_hcb30 ; if not skip
mov es:HCB_CNT[bx],ax ; we need to recycle oldest HCB_
mov es:HCB_CLU[bx],cx ; so mark as us, but with nothing
mov es:HCB_DRV[bx],dl ; in it
; clc
ret
find_hcb30:
stc ; return failure
ret
eject
;-----
mkhsh:
;-----
;
; entry: SI = 11 byte FCB to convert to hash code
; exit: AX = 1..FFFF is hash code (00/E5 == 0)
; uses: DX
; saves: BX,CX,DI,BP
;
; used for hashing the INFO_FCB &
; directory entries for DOS media
xor dx,dx ;assume hash code is 0000
lodsb
cmp al,0E5h ;if deleted file
je mkhsh2 ; or
cmp al,0 ;if virgin entry
je mkhsh2 ;then hash code = 0;
push cx ;else save CX
and al,7fh
mov dh,al ;initialize hash code MSB
mov cx,10 ;involve other 10 characters
mkhsh1:
lodsb ;get next character
rol dx,1 ;rotate hash code by one bit
and al,7fh ;strip top bit off character
xor dl,al ;XOR the character into the hash code
loop mkhsh1 ;repeat for all characters
pop cx ;restore CX
test dx,dx ;test if zero by any chance
jnz mkhsh2 ;skip if non-zero
inc dx ;else force it to 1
mkhsh2: ;return hash code in AX
xchg ax,dx
ret
eject
if DELWATCH
Public fixup_hashing
;
; update hashing for current drive if DELWATCH changes a directory entry
;
fixup_hashing:
;-------------
; On Entry:
; AX = segment of dir buffer
; CX = cluster to fixup (0 = root)
; DI = directory entry index (clipped to cluster if subdir)
; AX:SI-> dir entry (single entry for hashing)
;
; On Exit:
; None
;
push ds
push es
xor dh,dh ; we only want HCB_ if it's there
push ax ; save seg of dir entry
call find_hcb ; does an HCB_ exist for this entry ?
pop ds ; DS:SI -> entry to hash
jc fixup_ck10 ; not hashed, skip update
cmp di,es:HCB_CNT[bx] ; is this within the hashed entries ?
jae fixup_ck10 ; no, skip the fixup
call mkhsh ; AX = hash code of our entry
shl di,1 ; DI = offset of hashed entry
lea di,HCB_DATA[bx+di]
stosw ; update hash code for dir entry
fixup_ck10:
pop es
pop ds
ret ; no
endif
eject
hashsrch:
;--------
; entry: AX = starting cluster of directory
; exit: AX is possible match index
;
mov dh,0FFh ; we want HCB_ even if it's recycled
xchg ax,cx ; and this block
call find_hcb ; does an HCB_ exist for this entry ?
; mov ax,0 ; assume unhashed search required
jc hashsrch20 ; start one if no hashing
hashsrch10:
mov cx,es:HCB_CNT[bx] ; we have this many entries hashed
jcxz hashsrch30 ; skip if nothing hashed yet
mov ax,hash ; look for this hash code
lea di,HCB_DATA[bx] ; DI = offset of start of search
repne scasw ; try to find a match
jne hashsrch30 ; skip if no match found
lea ax,HCB_DATA+2[bx] ; find word offset of match
xchg ax,di ; return matching index
sub ax,di
shr ax,1 ; make dir offset
hashsrch20:
push ds ! pop es
clc ; we have found it
ret
hashsrch30:
call rehash_entry ; try and hash another entry
jnc hashsrch10 ; look again if we succeeded
mov ax,es:HCB_CNT[bx] ; failure, so return # to skip
push ds ! pop es
; stc ; for quicker search
ret
rehash_entry:
;------------
; entry: ES:BX -> HCB
; AX = hash cluster number
call hash_entries_to_do ; how many entries still to hash ?
jcxz rehash_entry40 ; if we have hashed them all exit
push dcnt ; save directory count
mov ax,dcnt ; get previous position
inc ax ; we start looking here
xor dx,dx
div dirperclu ; mask to start of cluster
mul dirperclu
add ax,es:HCB_CNT[bx] ; skip entries we already have
dec ax ; make previous entry BEFORE this
mov dcnt,ax
mov chdblk,0 ; non-sequential access
cmp cx,512/32 ; don't try reading more than 512 bytes
jb rehash_entry20 ; at a time - then with 512 byte secs
mov cx,512/32 ; we only read when we
rehash_entry20:
push es
push bx ; save hash control pointer
push cx ; save # entries to do
push ds ! pop es ; back to small model
xor cx,cx ; return any entry
call gtd_next ; unhashed search
pop cx ; restore # entries to do
pop bx ; restore hash control pointer
pop es
test ax,ax ; anything found
jz rehash_entry30 ; end of directory
xchg ax,si ; else get directory pointer
mov di,es:HCB_CNT[bx]
shl di,1 ; DI -> 1st new entry
lea di,HCB_DATA[bx+di]
push si
call mkhsh ; else calculate hash into AX
stosw ; add it to hash table
inc es:HCB_CNT[bx] ; remember we did
pop si
lodsb ; get 1st byte of hashed entry
test al,al ; is it zero (ie. never used)?
loopne rehash_entry20 ; get all hash codes
jcxz rehash_entry30 ; all done ?
call hash_entries_to_do ; how many entries still to hash ?
add es:HCB_CNT[bx],cx ; we will do them all..
rep stosw ; zap rest of cluster
rehash_entry30:
pop dcnt ; restore count
mov chdblk,0 ; non-sequential access
clc ; we have new hashing codes
ret ; HCB updated with new cluster
rehash_entry40:
stc ; cannot hash no more...
ret
hash_entries_to_do:
;------------------
; On Entry:
; ES:BX -> HCB_
; On Exit:
; CX = maximum possible entries we still need to hash for HCB_
; (All other regs preserved)
;
mov cx,dirinroot ; assume root dir
cmp es:HCB_CLU[bx],0 ; was it ?
je hash_etd10
mov cx,dirperclu ; subdir, so cluster limit
hash_etd10:
cmp cx,hashmax ; do we support this many ?
jb hash_etd20 ; yes, skip it
mov cx,hashmax ; else limit it to this many
hash_etd20:
sub cx,es:HCB_CNT[bx] ; subtract number we have already done
ret
eject
hshdscrd:
;--------
; purge hash blocks for physical drive
; On Entry:
; AL = drive to discard (FF = all drives)
; On Exit:
; None (All regs preserved)
push ds
push bx
lds bx,hashroot ; get root of hash codes
hshdsc1:
test bx,bx
jz hshdsc4 ; all blocks done
cmp al,0FFh ; FF means discard all drives
je hshdsc2
cmp al,ds:HCB_DRV[bx] ; check if matching drive
jne hshdsc3
hshdsc2:
mov ds:HCB_DRV[bx],0ffh ; h->hd = 0xff;
hshdsc3:
mov bx,ds:HCB_LINK[bx] ; get next hash code block
jmps hshdsc1
hshdsc4:
pop bx
pop ds
ret
eject
enlarge_root:
if DELWATCH
mov ah,DELW_FREERD ; lets ask DELWATCH if it can
mov al,adrive ; free a root directory entry
callf ss:fdos_stub ; for this drive
jnc allocdir ; it says it has so try again
endif
allocdir_err:
pop ax ; discard return address
mov ax,ED_MAKE
jmp fdos_error ; return "cannot make dir entry"
;--------
allocdir: ; Called by rename and MAKE
;--------
call setenddir ; search for first match
mov cx,1 ; return empty fcb
call getdir ; is there an empty fcb?
jz allocdir10 ; if so use that
ret
allocdir10:
call hdsblk ; Are we at the root?
jz enlarge_root ; YES -- Report error(no room)
; We are in a subdirectory so enlarge it
; AX has 1st block of subdirectory NOTE -- AX is never
; above 'lastcl' on entry.
allocdir20:
cmp ax,lastcl ; Are we at end of subdirectory?
ja allocdir30 ; YES
push ax
call getnblk ; NO -- get next block then
pop bx
jmps allocdir20
allocdir30:
push bx ; save last block number
xchg ax,bx ; Get a new block (start from old)
call alloc_cluster
pop bx
jc allocdir_err ; Report Error(no room on disk)
push ax ; save new block
xchg ax,bx
call fixfat ; Update fat (AX,BX) old last block
; points to new last block
pop ax ; Get new last block
push ax
mov bx,dosfat ; 12 or 16 bit fat
call fixfat ; Update fat (AX,BX) new last block
; has end of cluster marker
call update_fat ; Write out to disk
pop ax ; Get new last block
call zeroblk ; Zero it out
call setenddir ; Set up for search first
mov cx,1 ; Find empty fcb
jmp getdir ; Can not return with not found error
END

1153
IBMDOS/DISK.A86 Normal file

File diff suppressed because it is too large Load Diff

122
IBMDOS/DOSHNDL.DEF Normal file
View File

@@ -0,0 +1,122 @@
; 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
; 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
DCNTRL_DSADD equ dword ptr 0000h
DCNTRL_DSOFF equ word ptr 0000h
DCNTRL_DSSEG equ word ptr 0002h
DCNTRL_COUNT equ word ptr 0004h
DCNTRL_LEN equ 6
DHNDL_COUNT equ word ptr 00h ; 00 - Usage Count
DHNDL_MODE equ word ptr 02h ; 02 - File Mode
DHM_FCB equ 8000h ; marks as FCB
DHM_COMMIT equ 4000h ; auto-commit file
DHM_NOCRIT equ 2000h ; no critical errors
DHM_LOCAL equ 10000000b ; file is not inherited
DHM_SHAREMSK equ 01110000b ; sharing bits
DHM_COMPAT equ 00000000b
DHM_DENY_ALL equ 00010000b ; exclusive - deny all
DHM_DENY_WRITE equ 00100000b
DHM_DENY_READ equ 00110000b
DHM_DENY_NONE equ 01000000b
DHM_RWMSK equ 00001111b ; read write bits
DHM_RW equ 00000010b ; file opened read/write
DHM_WO equ 00000001b ; file opened write only
DHM_RO equ 00000000b ; file opened read only
;
; 01h to 03h To be Determined
;
DHNDL_DATRB equ byte ptr 04h ; Disk attribute byte
DHNDL_ATTR equ byte ptr 05h ; Attribute Byte
DHNDL_WATTR equ word ptr 05h ; Attribute Word
DHAT_REMOTE equ 8000h ; set if file remote
DHAT_TIMEOK equ 4000h ; set if timestamp up to date
DHAT_LOCAL equ 1000h ; file is not inherited
DHAT_NETPRN equ 0800h ; device is networked printer
DHAT_DEV equ 0080h ; device/file bit
DHAT_READY equ 0040h ; ready/not ready bit
DHAT_CLEAN equ 0040h ; this bit CLEAR if dirty
DHAT_BIN equ 0020h ; raw/cooked bit
DHAT_DRVMSK equ 001Fh ; drive in bottom bits
DHAT_CLK equ 0008h ; -reserved-
DHAT_NUL equ 0004h ; handle is null device
DHAT_COT equ 0002h ; handle is console output device
DHAT_CIN equ 0001h ; handle is console input device
DHNDL_DEVPTR equ dword ptr 07h ; 07 - pointer to device
DHNDL_DEVOFF equ word ptr 07h ; 07 - offset of device
DHNDL_DEVSEG equ word ptr 09h ; 09 - segment of device
DHNDL_BLK1 equ word ptr 0Bh ; 0B - first cluster in file
DHNDL_TIME equ word ptr 0Dh ; 0D - file time stamp
DHNDL_DATE equ word ptr 0Fh ; 0F - file date stamp
DHNDL_SIZE equ dword ptr 11h ; 11 - file length
DHNDL_SIZELO equ word ptr 11h
DHNDL_SIZEHI equ word ptr 13h
DHNDL_POS equ dword ptr 15h ; 15 - current file position
DHNDL_POSLO equ word ptr 15h
DHNDL_POSHI equ word ptr 17h
DHNDL_IDX equ word ptr 19h ; 19 - relative cluster within file of last read
DHNDL_DBLK equ word ptr 1Bh ; 1B - cluster # of dir entry
DHNDL_DCNTHI equ byte ptr 1Eh ; 1E - dir offset # within cluster
DHNDL_DCNTLO equ byte ptr 1Fh ; 1F - dir offset # within cluster
DHNDL_NAME equ byte ptr 20h ; 20 - File/Device Name
DHNDL_EXT equ byte ptr 28h ; 28 - File extension
DHNDL_SFT equ dword ptr 2Bh ; 2B - pointer to previous SFT
DHNDL_UID equ word ptr 2Fh ; 2F - Owning Machine ID
DHNDL_PSP equ word ptr 31h ; 31 - Owning PSP
DHNDL_SHARE equ word ptr 33h ; 33 - Offset of sharing record
DHNDL_BLK equ word ptr 35h ; 35 - absolute cluster of last read
; 37 - dword reserved for IFS
DHNDL_LEN equ 3Bh
; With DOS 3 structures _DBLK is a 16 bit
; Logical Drive Table format
LDT_NAME equ byte ptr 00h ; 00 - Ascii Name field
LDT_FLAGS equ word ptr 43h ; 43 - Flag field
LDT_PDT equ dword ptr 45h ; 45 - PDT for this drive
LDT_BLK equ word ptr 49h ; 49 - directory sector
LDT_ROOT equ word ptr 4bh ; 4B - virtual block root
LDT_DRV equ byte ptr 4dh ; 4D - physical drive
LDT_ROOTLEN equ word ptr 4fh ; 4F - Length of root portion
LDT_LEN equ 58h
LFLG_NETWRKD equ 8000h
LFLG_PHYSICAL equ 4000h
LFLG_JOINED equ 2000h
LFLG_SUBST equ 1000h

521
IBMDOS/DOSMEM.A86 Normal file
View File

@@ -0,0 +1,521 @@
; File : $DOSMEM.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$
; DOSMEM.A86 1.13 94/12/01 10:05:21
; now freeing UMBs also during program termination
; DOSMEM.A86 1.12 93/07/20 22:46:25
; dmd_upper_root defaults to FFFF
; DOSMEM.A86 1.10 93/06/18 21:00:11
; Remove historic CDOS comment
; ENDLOG
;
include pcmode.equ
include i:msdos.equ
include i:mserror.equ
BEST_FIT equ 01h ; allocate BEST match memory block
LAST_FIT equ 02h ; allocate LAST matching memory block
UPPER_FIT equ 80h ; preferably allocate from upper memory
UPPER_ONLY_FIT equ 40h ; only allocate from upper memory
FIRST_FIT equ 04h ; we use this internally...
PCM_CODE CSEG BYTE
extrn error_exit:near ; Standard Error Handler
extrn return_AX_CLC:near
extrn return_BX:near
extrn reload_ES:near
extrn toupper:near
; *****************************
; *** DOS Function 48 ***
; *** Allocate Memory Block ***
; *****************************
;
Public func48
func48: ; bx = request size
callf lock_tables ; lock global tables
call search_mem ; look for block bx or bigger
jc memory_avbl_error ; skip on error
test mem_strategy,LAST_FIT ; is it last fit ?
jz f48_10 ; no, use from begining
mov ax,cx ; work out how much we have
sub ax,bx ; to leave free
je f48_10
dec ax
mov bx,ax
call make_dmd ; allocate this DMD as free
mov bx,cx ; real block is the next one
f48_10:
mov ax,current_psp ; Change the Owner
mov DMD_PSP,ax ; we now own this block
push es
call make_dmd ; make new DMD for allocated mem
pop ax
inc ax ; return starting segment
jmps memory_exit ; unlock global tables
; *****************************
; *** DOS Function 49 ***
; *** Free Memory Block ***
; *****************************
;
Public func49
func49:
callf lock_tables ; lock global tables
call get_dmd ; es -> dmd
jc memory_error ; skip if block invalid
mov ax,DMD_PSP ; get owner field
cmp ax,dmd_owner
mov ax,es ; return DMD address in AX
jb func49_10
mov dx,dmd_address ; nothing below this block get's freed
cmp ax,dx ; should we free it ?
jb func49_20 ; no, give it a new owner
func49_10:
xor dx,dx ; yes, owner = 0 means free block
func49_20:
mov DMD_PSP,dx ; free/set new owner
; jmps memory_exit
; centralised exit point to unlock system tables
memory_exit:
;-----------
; On Entry:
; AX = return value
; On Exit
; None
;
callf unlock_tables ; unlock global tables
jmp return_AX_CLC ; return DMD address
memory_avbl_error:
mov bx,cx
call return_BX ; return biggest block available
memory_error:
callf unlock_tables ; unlock global tables
mov locus,LOC_MEMORY
jmp error_exit ; Jump to error handler
; *****************************
; *** DOS Function 4A ***
; *** Alter Memory Block ***
; *****************************
;
Public func4A
func4A:
callf lock_tables ; lock global tables
call get_dmd ; es -> dmd
jc memory_error ; skip if block invalid
push DMD_LEN ; save the current DMD length
call merge_mem ; pick up unallocated blocks
pop ax ; return original DMD length
jc memory_error ; if dmd's destroyed
mov ax,ED_MEMORY ; assume insufficient mem
mov cx,DMD_LEN ; cx = available size
cmp cx,bx ; if avail < req, then
jb memory_avbl_error ; return maximum possible
mov ax,current_psp ; Force this block to be owned by the
mov DMD_PSP,ax ; current PSP. MACE Utilities
call make_dmd ; new block on top
call reload_ES
mov ax,es
jmps memory_exit
; *****************************
; *** DOS Function 58 ***
; *** Get/Set Alloc Strategy***
; *****************************
;
; On Entry:- AL == 0 Get Allocation Strategy
; AL == 1 Set Allocation Strategy
; AL == 2 Get Upper Memory Link
; AL == 3 Set Upper Memory Link
Public func58
func58:
callf lock_tables ; lock global tables
cmp al,3
ja f58_error ; Range Check Sub-Function
cbw ; AH = 0
mov si,ax
add si,si ; SI = word offset of sub-function
call cs:f58_tbl[si] ; execute the sub-function
jnc memory_exit ; return the result
jmps memory_error ; or the error
f58_error:
mov ax,ED_FUNCTION
jmps memory_error
f58_tbl dw f58_get_strategy
dw f58_set_strategy
dw f58_get_link
dw f58_set_link
f58_get_strategy:
; mov ah,0 ; AX = subfunction = 0-3
mov al,mem_strategy
; clc
ret
f58_set_strategy:
mov ah,MS_M_STRATEGY
mov mem_strategy,bl
; clc
ret
f58_get_link:
mov ah,MS_M_STRATEGY
mov al,dmd_upper_link
; clc
ret
f58_set_link:
mov ax,ED_FUNCTION ; return function not implemented
mov cx,dmd_upper_root ; if no upper memory chain
inc cx ; CX = FFFF
stc
jcxz f58_set_link20
dec cx
mov dmd_upper_link,bl ; set link field
mov ax,dmd_root ; now find dmd before upper memory root
mov dl,IDM ; assume we want to link
test bl,bl ; do we want to link/unlink UMBs?
jnz f58_set_link10
mov dl,IDZ ; no, we want to unlink
f58_set_link10:
mov es,ax ; point to DMD
call check_dmd_id ; stop if id is invalid
jc f58_set_link20 ; and return an error
push es
call next_dmd ; does the next DMD match our
pop es
cmp ax,cx ; upper memory chain ?
jne f58_set_link10
mov DMD_ID,dl ; set appropriate link type
mov ax,(MS_M_STRATEGY*256)+3; return AX unchanged
; clc
f58_set_link20:
ret
eject
;****************************************
;* *
;* Memory Function Subroutines *
;* *
;****************************************
;
; FREE_ALL takes the PSP passed in the BX register and free's all
; memory associated with that PSP.
;
; entry: bx = requested PSP
;
; exit:
;
Public free_all
free_all:
mov es,dmd_root ; es -> first dmd
free_all_loop:
call check_dmd_id ; if block is invalid
jc free_all_fail ; then quit now
mov dl,al ; dl = id code
cmp DMD_PSP,bx ; if block is owned by another
jnz free_all_next ; then check next
and DMD_PSP,0 ; Free this partition
free_all_next:
push es
call next_dmd ; es -> next block up
pop ax
cmp dl,IDM ; if previous block wasn't last
jz free_all_loop ; then keep going
cmp dmd_upper_root,ax
jbe free_all_end
mov ax,dmd_upper_root ; free UMBs as well
cmp ax,-1 ; if UMB head is valid
mov es,ax
jne free_all_loop
free_all_end:
xor ax,ax ; Otherwise Stop
free_all_fail:
ret
;
; SET_OWNER allows the OWNING PSP to specify the new owner of
; the partition. An error is returned if an incorrect partition address
; is given or the partition is not owned by the current PSP.
;
; Entry:- AX == New PSP
; BX == Partition Start
;
; Exit:-
; no carry AX == Unknown
; carry AX == Error Code
;
Public set_owner
set_owner:
push es
dec bx
mov es,bx ; ES points at DMD (We Hope)
xchg ax,bx ; Save the New PSP address in BX
call check_dmd_id ; Check for a valid DMD
jc s_o20
mov ax,current_psp
cmp ax,DMD_PSP ; Check the Current PSP owns the memory
jnz s_o10
mov DMD_PSP,bx ; Set the new owner and return
jmps s_o20
s_o10:
mov ax,ED_BLOCK
stc
s_o20:
pop es
ret
;
; Search for a free memory block at least as big as bx
; entry: bx = requested size
; success exit: cf clear, es -> dmd
; cx = block size
; failure exit: cf set, ax = error code
; cx = biggest block available
search_mem:
mov ax,ED_DMD ; assume bad DMD chain
mov cx,dmd_root ; start at the bottom
jcxz search_mem_exit
mov es,cx ; lets clean up memory list
or mem_strategy,FIRST_FIT ; grab 1st block we come to
search_mem_init:
xor si,si ; si = max mem available
mov di,0FFFFh ; di = size of candiate (FFFF=none)
; dx = dmd of candidate
search_mem_loop:
call check_dmd_id ; if block is invalid
jc search_mem_exit ; then quit now
cmp DMD_PSP,0 ; if block is owned
jnz search_mem_next ; then check another
call merge_mem ; group with unallocated blocks
mov ax,es ; AX = current DMD
mov cx,DMD_LEN ; cx = block length
cmp cx,si ; is it the biggest block we
jb search_mem40 ; have found so far ?
mov si,cx ; if so then save the new size
search_mem40:
cmp cx,bx ; if it's not long enough
jb search_mem_next ; then try the next block
test mem_strategy,FIRST_FIT+LAST_FIT
jnz search_mem50 ; grab this block ?
test mem_strategy,BEST_FIT ; if BEST FIT then we only save this
jz search_mem_next ; candidate if the previous
cmp cx,di ; candidate was bigger
jae search_mem_next
search_mem50:
mov dx,es ; save this DMD candidate
mov di,cx ; along with it's length
and mem_strategy,not FIRST_FIT
search_mem_next:
call search_next_dmd ; try for another DMD
mov ax,ED_MEMORY ; assume insufficient mem
jc search_mem_exit ; stop if it's true
mov ax,es
cmp ax,dmd_upper_root ; if we reach the dmd upper root
jne search_mem_loop ; then we have a special case
or mem_strategy,FIRST_FIT ; grab 1st high memory block we find
test mem_strategy,UPPER_ONLY_FIT
jnz search_mem_init ; upper only is another special case
jmps search_mem_loop
search_mem_exit:
and mem_strategy,not FIRST_FIT
mov cx,di ; DX&DI contain our best candidate
inc di ; if DI=FFFF then we don't have one
je search_mem_bad ; else we return with CX = size
mov es,dx ; and ES = DMD
clc ; clear the error flag
ret
search_mem_bad:
mov cx,si ; no allocation made, so return
search_mem_error: ; biggest block and flag the error
stc
ret
search_next_dmd:
; On Entry:
; ES = current DMD
; On Exit:
; ES = AX = next DMD
; DX/DI preserved
;
cmp DMD_ID,IDM ; do we have any more blocks ?
jne search_mem_error ; no, return CY set
; jmp next_dmd ; else try next DMD
; Point to next DOS Memory Descriptor (dmd) in the chain
; entry: es -> current dmd
; exit: es -> next dmd
next_dmd:
mov ax,es
add ax,DMD_LEN
inc ax ; allow for dmd itself
mov es,ax
ret
; Increase the size of the current mem block
; by gobbling all adjacent unallocated blocks
; entry: es -> dmd
; exit: cf = 1, al = 7 if chain is broken
; ES,SI,DI,DX,BX preserved
merge_mem:
push es
cmp DMD_ID,IDM ; if no more dmd's
jnz merge_mem_done ; then just quit
call next_dmd
call check_dmd_id ; if id is invalid
jc merge_mem_quit ; then return an error
cmp DMD_PSP,0 ; if next dmd is owned
jnz merge_mem_done ; then done
mov cx,DMD_LEN ; if free, grab its length
pop es ; restore base dmd
mov DMD_ID,al ; use next's id (in case of last)
inc cx
add DMD_LEN,cx ; add new memory to base
jmps merge_mem ; and try again
merge_mem_done:
clc ; clear error flag
merge_mem_quit:
pop es ; restore base dmd
ret ; with cf and error flag
; If needed, create a new dmd on top of allocated memory
; entry: es -> current block
; bx = requested block size
; cx = current block size
make_dmd:
cmp bx,cx ; if request and size match
jz make_dmd_done ; then that's all we need
mov dl,DMD_ID ; get current block id
mov DMD_LEN,bx ; else shrink this block
mov DMD_ID,IDM ; not the last now
call next_dmd
mov DMD_ID,dl ; our old id for the new dmd
mov DMD_PSP,0 ; new block is free
sub cx,bx
dec cx
mov DMD_LEN,cx ; length is whatever is left
make_dmd_done:
ret
; Get passed value of memory block
; exit: es -> dmd
; al = DMD_ID, cf cleared if valid
; al = 7, cf set if invalid
get_dmd:
call reload_ES
mov ax,es
dec ax ; back up to dmd
mov es,ax
; jmps check_dmd_id ; fall through
; Check first byte in the dmd for a valid id code
; entry: es -> dmd
; exit: al = DMD_ID, cf cleared if valid
; al = 7, cf set if invalid
Public check_dmd_id
check_dmd_id:
mov al,DMD_ID
cmp al,IDM ; if not last
jz check_dmd_done ; then good
cmp al,IDZ ; if last
jz check_dmd_done ; also good
mov ax,ED_BLOCK ; Invalid DMD
check_dmd_error:
stc ; flag the error
check_dmd_done:
ret
PCMODE_DATA DSEG
extrn lock_tables:dword
extrn unlock_tables:dword
extrn dmd_address:word ; don't free DMD's with segment under this value
extrn dmd_owner:word ; don't free DMD's with owner under this value
extrn dmd_upper_root:word
extrn dmd_upper_link:byte
extrn current_psp:word
extrn locus:byte
extrn mem_strategy:byte
extrn dmd_root:word
end

60
IBMDOS/DRIVER.EQU Normal file
View File

@@ -0,0 +1,60 @@
; File : $DRIVER.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
; Device driver header offsets.
DH_NEXT equ es:dword ptr 0 ; Dword Pointer to Next DEV
DH_NEXTOFF equ es:word ptr 0 ; Offset of next device
DH_NEXTSEG equ es:word ptr 2 ; Segment of next device
DH_ATTRIB equ es:word ptr 4 ; device attribute bits
DH_STRATEGY equ es:word ptr 6 ; offset of strategy entry
DH_INTERRUPT equ es:word ptr 8 ; offset of interupt entry
DH_NAME equ es:byte ptr 10 ; 8-BYTE device name
DA_CHARDEV equ 8000h ; 1=character device, 0=block device
DA_IOCTL equ 4000h ; device supports IOCTL string I/O
DA_NONIBM equ 2000h ; dosen't require FAT for login
DA_OTILBSY equ 2000h ; supports "output until busy"
DA_REMOVE equ 0800h ; supports "removable media" check
DA_QUERY equ 0080h ; supports query ioctl
DA_GETSET equ 0040h ; supports 3.2 level functionality
DA_SPECIAL equ 0010h ; fast console ouput via INT 29h
DA_ISCLK equ 0008h ; device is current clock device
DA_ISNUL equ 0004h ; device is NUL device (reserved)
DA_BIGDRV equ 0002h ; supports > 65535 sector per drive
DA_ISCOT equ 0002h ; device is standard output device
DA_ISCIN equ 0001h ; device is standard input device
FASTCON_INT equ 29h ; fast console output interrupt

469
IBMDOS/ERROR.A86 Normal file
View File

@@ -0,0 +1,469 @@
; File : $ERROR.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$
; ERROR.A86 1.17 94/12/02 11:01:03
; added logical error entry
; ERROR.A86 1.16 93/11/26 15:51:29
; Update char_error so ES:SI -> device driver header itself
; ERROR.A86 1.14 93/09/09 22:36:26
; Int 21/59 uses error stack (for benefit of Lantastic)
; ERROR.A86 1.13 93/09/03 20:28:11
; Add "no critical errors" support (int 21/6C)
; ENDLOG
;
; This file contains the Error handling routines for PCMODE
; When a function encounters an error it jumps to the ERROR_EXIT
; function which will process the error consistantly. FCB_ERROR_EXIT
; is a special case of ERROR_EXIT where the error code is not returned
; directly to the user but is still saved for func59
;
include pcmode.equ
include fdos.def
include i:msdos.equ
include i:mserror.equ
include i:psp.def
include i:char.def
include i:reqhdr.equ
;
ERR_TBL_CODE equ byte ptr 0 ; Error Code in Table
ERR_TBL_CLASS equ byte ptr 1 ; Error Class entry in Table
ERR_TBL_ACTION equ byte ptr 2 ; Error Action entry in Table
ERR_TBL_LOCUS equ byte ptr 3 ; Locus entry in table
ERR_TBL_LEN equ 4 ; 4 bytes per entry
;
PCM_CODE CSEG BYTE
extrn get_dseg:near
extrn do_int24:near
extrn reload_registers:near
extrn return_AX_CLC:near
;
; *****************************
; *** DOS Function 59 ***
; *** Get Extended Error ***
; *****************************
;
Public func59
func59:
les di,error_dev ; Return device driver address
mov bh,error_class ; return the Error Class
mov bl,error_action ; the Action Code
mov ch,error_locus ; the Locus Code
mov ax,error_code ; the Error Code
lds si,int21regs_ptr ; point to user stack
mov reg_ES[si],es
mov reg_DI[si],di
mov reg_BX[si],bx
mov reg_CX[si],cx
push ss ! pop ds
jmp return_AX_CLC
eject
; On Entry:- AX == Internal Error Number
;
; On Exit:- None
; CY set if error should be returned
; CY clear if it should be ignored
;
Public error_exit
error_exit:
cmp internal_flag,0 ; If this is an internal
jnz error_ret ; do not generate a critical
call disk_error ; error
jnz error_r10 ; No Error Occured or Ignored
ret ; in critcal error handler
;
; Return the error code to the user and DO NOT generate any
; critical errors.
;
; On Entry:- AX == Internal Error Number
;
; On Exit:- None
;
Public error_ret
error_ret:
call set_error ; the internal error code
error_r10: ; otherwise negate
les di,int21regs_ptr
or es:reg_FLAGS[di],CARRY_FLAG ; set the "users" carry Flag
stc ; also set real one
if offset reg_AX EQ 0
stosw ; save return code
else
mov es:reg_AX[di],ax
endif
ret
;
; On Entry:- AX == Internal Error Number
;
; On Exit:- None
;
Public fcberror_exit
fcberror_exit:
call disk_error ; Process the error code generating
jz fe_e10 ; a critical error is required
mov al,0FFh ; on FCB error return AL = FF
fe_e10:
ret
eject
; WARNING - may be called from FDOS with DS = SYSDAT
;
; CHAR_ERROR is called when any character device function generates
; an error. First CHAR_ERROR sets the correct parameters for Get
; Extended Error. Then it generates a Critical Error by calling
; DO_INT24.
;
; Entry:- ES:SI -> device driver header
; SS:BX -> RH_
; AX = RH_STATUS
;
; Exit AL Error Action
;
Public char_error
char_error:
test ss:valid_flg,NO_CRIT_ERRORS
jz char_e10
mov al,ERR_FAIL ; no critical errors allowed
ret ; so just fail things
char_e10:
push ds
push es
push bx
push cx
push dx
push si
push di
push ss ! pop ds ; DS -> our data now
mov word ptr error_dev+0,si ; save the device driver address
mov word ptr error_dev+2,es ; and then initialise the FUNC59
push es ; data areas
and ax,007Fh ; Mask the Unused Bits
or ah,80h+OK_RIF ; Retry/Ignore/Abort/Fail allowable
cmp ss:RH_CMD,CMD_OUTPUT ; is this a read or write failure ?
jne char_e20
inc ah ; 01 is a Write Failure
char_e20:
mov rwmode,ah ;
push ax ; save for int 24
cbw ; zero AH again
neg ax ; convert to an internal error
add ax,ED_PROTECT ; code for set_error
mov cl,LOC_CHAR
call set_error
add ax,ED_PROTECT ; convert to hardware error
xchg ax,di ; DI == hardware error
pop ax
pop es
call do_int24 ; execute INT 24
pop di
pop si
pop dx
pop cx
pop bx
pop es
pop ds
ret
eject
;
; DISK_ERROR gains control after any DOS disk based function
; has been executed which generates an error. First ERROR set the
; correct parameters for Get Extended Error. Then it determines if
; the current error should generate a Critical Error and calls
; DO_INT24 if TRUE.
;
;
; On Entry:
; AX Internal Error Code
;
; On Exit:
; AX 0 if no error to return (Ignore)
; AX DOS Error Code
; ZF reflects AX
;
disk_error:
mov cl,LOC_CHAR ; assume character device
; determine if the error is
test rwmode,80h ; caused by a character or
jnz disk_e10 ; block device and set the
mov cl,LOC_BLOCK ; the critical error locus
disk_e10:
call set_error ; record error information
jz disk_e50 ; just return a logical error.
add ax,ED_PROTECT ; Convert to HardWare Error
mov di,ax ; DI == HardWare Error
; Now get the information
mov ah,rwmode ; about the error location
and ah,not OK_RIF ; mask the all responses
; mov al,valid_flg ; valid flag contains no crit
; and al,not NO_CRITICAL_ERRORS ; errors bit, but if that was
; or ah,al ; set we wouldn't be here
or ah,valid_flg ; or in valid responses
cmp bx,ED_GENFAIL ; if it's general failure
jne disk_e20 ; we cannot Ignore the error
and ah,not OK_IGNORE ; but must Abort/Fail/Retry
disk_e20: ; as appropriate
mov al,err_drv ; get the failing drive
mov error_drive,al ; and save locally
les si,error_dev ; get device driver header
; are we are a character device
test ah,80h ; as these have handled at a
jnz disk_e40 ; lower level and just need
; to be FAILed back to caller
call do_int24 ; Execute INT 24
mov bl,al ; Copy reponse into BL
xor ax,ax ; Assume Ignore Error
cmp bl,ERR_IGNORE ! jz disk_e50 ; Ignore the Error
cmp bl,ERR_FAIL ! jz disk_e40 ; If not FAIL then RETRY
call reload_registers ; get back entry registers
mov FD_FUNC,ax ; save AX for a moment
mov al,ah ; set up function number
xor ah,ah ; in AX
xchg ax,FD_FUNC ; save for use by FDOS
xor ah,ah ; zero AH 'cause it's handy
mov sp,retry_sp ; Must be RETRY so reset the
jmp retry_off ; STACK and IP
disk_e40:
;
; When a Critical Error is FAILED then we do the following
; if (extended error_code <= ED_SHAREFAIL) then
; ret = ED_ACCESS;
; else
; ret = ED_FAIL;
; extended error_code = ED_FAIL;
; return(ret);
;
; nb. above proto-code is at the request of ant
;
mov ax,-(ED_FAIL) ; always return ED_FAIL in the
xchg ax,error_code ; extended error_code
cmp ax,-(ED_SHAREFAIL) ; did we FAIL on sharing conflict ?
mov ax,-(ED_ACCESS) ; assume we did and prepare to return
jae disk_e50 ; ED_ACCESS
mov al,-(ED_FAIL) ; woops, return ED_FAIL after all
disk_e50:
or ax,ax ; NZ if error return required
ret
eject
;
; On Entry:- AX Internal Error Code
; CL Critical Error Locus
;
; On Exit:- AX DOS Error Code
; BX Internal Error Code
; ZF set on logical error
set_error:
mov bx,ax ; by default we return the raw error
mov di,offset critical_error; Scan for critical Errors First
call scan_error_table ; look for a matching error
jc set_logical_error
mov locus,cl ; Save the critical error LOCUS
cmp ax,ED_SHAREFAIL ; watch out for SHAREFAIL - the action
jne set_e10 ; depends on the caller
;
; ED_SHAREFAIL will return ED_ACCESS if the result of an attempt to open
; a file in shared mode, otherwise (FCB's and compatibility) it will
; generate a critical error.
;
mov bx,ED_GENFAIL ; assume we want a critical error
cmp FD_FUNC,MS_X_OPEN ; is it a shared open ?
jnz set_error_data
test FD_MODE,0$111$0$000b ; mode
jz set_error_data
jmps set_e30 ; return a logical "access denied"
set_e10:
cmp ax,ED_LOCKFAIL ; have we a lockfail error ?
jne set_e20
;
; ED_LOCKFAIL returns ED_ACCESS if a lock attempt fails, but a critical error
; on an attempt to read/write a locked region.
;
cmp FD_FUNC,FD_LOCK ; was it a result of specific lock
je set_logical_error ; call ? yes, it's a logical error
mov bx,ED_GENFAIL ; no, generate a critical error
jmps set_error_data
set_e20:
test valid_flg,NO_CRIT_ERRORS
jz set_error_data ; do we allow critical errors ?
mov ax,ED_ACCESS ; extended error code is Access Denied
set_e30:
mov bx,ED_ACCESS ; return access denied to caller
; jmps set_logical_error
set_logical_error:
xor di,di
mov word ptr error_dev+0,di ; must be a logical error so force
mov word ptr error_dev+2,di ; the ERROR_DEV to 0000:0000
mov di,offset logical_error ; scan the Logical error table
call scan_error_table
cmp ax,ED_NETACCESS ; if it's a networked access denied
jne set_error_data ; turn it into ordinary one
mov bx,ED_ACCESS ; return a logical "access denied"
; jmps set_error_data
set_error_data:
; On Entry:
; AX = Internal Error Code for extended error
; BX = Internal Error Code for returned error
; CS:DI -> error table entry
; On Exit:
; AX = DOS Error Code
; BX = Internal Error Code
; ZF set on logical error
;
neg ax
mov error_code,ax ; Save the Error Code
mov al,cs:ERR_TBL_CLASS[di]
mov error_class,al ; Save the Class
mov al,cs:ERR_TBL_ACTION[di]
mov error_action,al ; Save the Action
mov al,cs:ERR_TBL_LOCUS[di] ; Get the Locus
mov error_locus,al ; Save the Locus and then check
test al,al ; if the function overrides
jnz set_d10 ; this value
mov al,locus ; Get the Global Locus value
mov error_locus,al ; set by the calling function
set_d10: ; and save for FUNC 59
mov ax,bx ; Return to the caller with
neg ax ; the DOS error code.
mov di,word ptr error_dev ; set ZF if logical error
or di,word ptr error_dev+2 ; error_dev = 0:0
ret
scan_error_table:
cmp cs:ERR_TBL_CODE[di],0
je scan_et10 ; Check for the end of the list
cmp al,cs:ERR_TBL_CODE[di]
je scan_et20
add di,ERR_TBL_LEN
jmps scan_error_table
scan_et10:
stc
scan_et20:
ret
eject
PCM_RODATA CSEG WORD
logical_error rb 0
;
; Internal Code Error Class Error Action Error Locus
; ============= =========== ============ ===========
db ED_FUNCTION, CLASS_APPLIC, ACT_ABORT, 00
db ED_FILE, CLASS_LOST, ACT_USER, LOC_BLOCK
db ED_PATH, CLASS_LOST, ACT_USER, LOC_BLOCK
db ED_HANDLE, CLASS_RESOURCE, ACT_ABORT, LOC_UNKNOWN
db ED_ACCESS, CLASS_AUTHOR, ACT_USER, 00
db ED_NETACCESS, CLASS_AUTHOR, ACT_USER, 00
db ED_H_MATCH, CLASS_APPLIC, ACT_ABORT, LOC_UNKNOWN
db ED_DMD, CLASS_APPLIC, ACT_TERM, LOC_MEMORY
db ED_MEMORY, CLASS_RESOURCE, ACT_ABORT, LOC_MEMORY
db ED_BLOCK, CLASS_APPLIC, ACT_ABORT, LOC_MEMORY
db ED_ENVIRON, CLASS_APPLIC, ACT_ABORT, LOC_MEMORY
db ED_FORMAT, CLASS_FORMAT, ACT_USER, LOC_UNKNOWN
db ED_ACC_CODE, CLASS_APPLIC, ACT_ABORT, LOC_UNKNOWN
db ED_DATA, CLASS_FORMAT, ACT_ABORT, LOC_UNKNOWN
db ED_DRIVE, CLASS_LOST, ACT_USER, LOC_BLOCK
db ED_DIR, CLASS_AUTHOR, ACT_USER, LOC_BLOCK
db ED_DEVICE, CLASS_UNKNOWN, ACT_USER, LOC_BLOCK
db ED_ROOM, CLASS_LOST, ACT_USER, LOC_BLOCK
db ED_EXISTS, CLASS_EXISTS, ACT_USER, LOC_BLOCK
db ED_STRUCT, CLASS_RESOURCE, ACT_ABORT, 00
db ED_PASSWORD, CLASS_AUTHOR, ACT_USER, LOC_UNKNOWN
db ED_MAKE, CLASS_RESOURCE, ACT_ABORT, LOC_BLOCK
;; db ED_NET, CLASS_FORMAT, ACT_USER, LOC_NET
db ED_ASSIGN, CLASS_EXISTS, ACT_USER, LOC_NET
db ED_PARAM, CLASS_FORMAT, ACT_USER, LOC_UNKNOWN
db ED_FAIL, CLASS_UNKNOWN, ACT_ABORT, LOC_UNKNOWN
db ED_SHAREFAIL, CLASS_LOCKED, ACT_DELAY, LOC_BLOCK
db ED_LOCKFAIL, CLASS_LOCKED, ACT_DELAY, LOC_BLOCK
db ED_NOLOCKS, CLASS_RESOURCE, ACT_ABORT, LOC_MEMORY
db 00, CLASS_SYSTEM, ACT_TERM, LOC_UNKNOWN
critical_error rb 0
;
; Internal Code Error Class Error Action Error Locus
; ============= =========== ============ ===========
db ED_PROTECT, CLASS_MEDIA, ACT_URETRY, LOC_BLOCK
db ED_BADUNIT, CLASS_INTERNAL, ACT_TERM, LOC_UNKNOWN
db ED_NOTREADY, CLASS_HARDWARE, ACT_URETRY, 00
db ED_BADCMD, CLASS_INTERNAL, ACT_TERM, LOC_UNKNOWN
db ED_BADDATA, CLASS_MEDIA, ACT_ABORT, LOC_BLOCK
db ED_BADSEEK, CLASS_HARDWARE, ACT_RETRY, LOC_BLOCK
db ED_BADMEDIA, CLASS_MEDIA, ACT_URETRY, LOC_BLOCK
db ED_RNF, CLASS_MEDIA, ACT_ABORT, LOC_BLOCK
db ED_NOPAPER, CLASS_TEMP, ACT_URETRY, LOC_CHAR
db ED_WRFAIL, CLASS_HARDWARE, ACT_ABORT, 00
db ED_RDFAIL, CLASS_HARDWARE, ACT_ABORT, 00
db ED_GENFAIL, CLASS_UNKNOWN, ACT_ABORT, 00
db ED_SHAREFAIL, CLASS_LOCKED, ACT_DELAY, LOC_BLOCK
db ED_LOCKFAIL, CLASS_LOCKED, ACT_DELAY, LOC_BLOCK
db ED_NOFCBS, CLASS_APPLIC, ACT_ABORT, LOC_UNKNOWN
default_error rb 0
db 00, CLASS_SYSTEM, ACT_TERM, LOC_UNKNOWN
PCMODE_DATA DSEG WORD
extrn indos_flag:byte
extrn internal_flag:byte
extrn int21regs_ptr:dword
extrn current_psp:word
extrn retry_off:word, retry_sp:word
extrn valid_flg:byte
extrn error_locus:byte ; Error Locus
extrn error_code:word ; DOS format error Code
extrn error_action:byte ; Error Action Code
extrn error_class:byte ; Error Class
extrn error_dev:dword ; Failing Device Header
extrn error_drive:byte ; Failing Disk Drive
extrn err_drv:byte
extrn locus:byte
extrn rwmode:byte
end

52
IBMDOS/EXE.DEF Normal file
View File

@@ -0,0 +1,52 @@
; File : $EXE.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
; 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 defines the DOS .EXE file Header
EXE_SIGNATURE equ word ptr 0 ; 0000 Valid EXE contains 'MZ'
EXE_FINAL equ word ptr EXE_SIGNATURE+2; 0002 Image Length MOD 512
EXE_SIZE equ word ptr EXE_FINAL+2 ; 0004 Image Length DIV 512
EXE_RELCNT equ word ptr EXE_SIZE+2 ; 0006 No. of Relocation Items
EXE_HEADER equ word ptr EXE_RELCNT+2 ; 0008 Header Size in paragraphs
EXE_MINPARA equ word ptr EXE_HEADER+2 ; 000A Minimum No extra paragraphs
EXE_MAXPARA equ word ptr EXE_MINPARA+2 ; 000C Maximum No of extra paragraphs
EXE_SS equ word ptr EXE_MAXPARA+2 ; 000E Displacment of Stack Segment
EXE_SP equ word ptr EXE_SS+2 ; 0010 Initial SP
EXE_CHECKSUM equ word ptr EXE_SP+2 ; 0012 Negative CheckSum
EXE_IP equ word ptr EXE_CHECKSUM+2 ; 0014 Initial IP
EXE_CS equ word ptr EXE_IP+2 ; 0016 Code Segment displacement
EXE_RELOFF equ word ptr EXE_CS+2 ; 0018 Byte Offset of First REL item
EXE_OVERLAY equ word ptr EXE_RELOFF+2 ; 001A Overlay Number (0 == Resident)
EXE_LENGTH equ 001Ch

90
IBMDOS/F52DATA.DEF Normal file
View File

@@ -0,0 +1,90 @@
; File : $Workfile$
;
; Description :
;
; Original Author :
;
; Last Edited By : $Author$
;
;-----------------------------------------------------------------------;
; 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
;
; The following equates define the Data Area whose address is
; returned by function 52.
;
F52_BCBBUF equ es:dword ptr -0008h[bx] ; current buffer
F52_BCBOFF equ es:word ptr -0008h[bx] ; current buffer
F52_BCBSEG equ es:word ptr -0006h[bx] ; current buffer
F52_DMDROOT equ es:word ptr -0002h[bx] ; Memory Descriptor Root (Seg)
F52_DDSCPTR equ es:dword ptr 0000h[bx] ; DDSC Table Address
F52_FILEPTR equ es:dword ptr 0004h[bx] ; File Handle Table Address
F52_CLKDEV equ es:dword ptr 0008h[bx] ; Clock Device Header
F52_CONDEV equ es:dword ptr 000Ch[bx] ; Console Device Header
F52_SECSIZE equ es:word ptr 0010h[bx] ; Maximum Sector Size
F52_BUFINFOPTR equ es:dword ptr 0012h[bx] ; Buffer Info pointer
F52_PATHPTR equ es:dword ptr 0016h[bx] ; Path Control Table Address
F52_PATHOFF equ es:word ptr 0016h[bx]
F52_PATHSEG equ es:word ptr 0018h[bx]
F52_FCBPTR equ es:dword ptr 001Ah[bx] ; FCB Table Address
; equ es:word ptr 001Eh[bx] ; #Entries in FCB Table
F52_PHYDRV equ es:byte ptr 0020h[bx] ; Last Physical Drive
F52_LASTDRV equ es:byte ptr 0021h[bx] ; Last Logical Drive
F52_DEVROOT equ es:dword ptr 0022h[bx] ; Root Device Header
F52_JOINDRV equ es:byte ptr 0034h[bx] ; Number of JOIN'd drives
F52_SETVER equ es:dword ptr 0037h[bx] ; SETVER table pointer
F52_NUM_BUF equ es:word ptr 003Fh[bx] ; number of disk buffers
F52_READ_AHEAD equ es:word ptr 0041h[bx] ; size of read-ahead buffer
F52_BOOTDRV equ es:byte ptr 0043h[bx] ; boot drive (1-26)
F52_CPU_TYPE equ es:byte ptr 0044h[bx] ; 01 if >= 386SX
F52_EXT_MEM equ es:word ptr 0045h[bx] ; Int 15h, AH=87h
F52_BUF_INFO equ es:dword ptr 0047h[bx] ; points at Buffer Info
F52_HMAFLAG equ es:byte ptr 0053h[bx] ; 1 if buffers in HMA
F52_DEBLOCK equ es:word ptr 0056h[bx] ; deblock if buffers in HMA
F52_DMD_UPPER equ es:word ptr 0066h[bx] ; upper memory chain
F52_SHARE_STUB equ es:dword ptr 006Ah[bx] ; Share Stub Entries*15
;DRDOS Specific
DRDOS_CRITSTUBS equ es:word ptr 0000h[bx] ; Offset of end of instance data
DRDOS_HIST1CTL equ es:word ptr 0004h[bx] ; History 1 Control
DRDOS_HIST2CTL equ es:word ptr 0006h[bx] ; History 2 Control
DRDOS_HISTFLG equ es:byte ptr 0008h[bx] ; History Buffer Flag
DRDOS_DUAL_LANG equ es:byte ptr 0009h[bx] ; Utils Dual Language Support
DRDOS_CUR_LANG equ es:byte ptr 000Ah[bx] ; Current Language
DRDOS_EXT_MEM equ es:word ptr 000Bh[bx] ; Total Extended Memory
DRDOS_HIMEM_ROOT equ es:word ptr 0010h[bx] ; High memory chain
DRDOS_ENVSEG equ es:word ptr 0012h[bx] ; Seg of environment
DRDOS_DMD_BASE equ es:word ptr 0016h[bx] ; base memory freed at
DRDOS_DMD_UPPER equ es:word ptr 0018h[bx] ; upper memory chain
DRDOS_MACHINE_ID equ es:word ptr 001Ah[bx] ; local machine ID
DRDOS_COUNTRY_FILE equ es:word ptr 001Eh[bx] ; offset of filename
DRDOS_HASHOFF equ es:word ptr 0020h[bx] ; fastopen hash root
DRDOS_HASHSEG equ es:word ptr 0022h[bx] ; pointer
DRDOS_HASHMAX equ es:word ptr 0024h[bx] ; max # dir entries
DRDOS_DEBLOCK equ es:word ptr 0026h[bx] ; himem deblock buffer
DRDOS_INT2F equ es:word ptr 002Ch[bx] ; internal Int 2F hook

960
IBMDOS/FCBS.A86 Normal file
View File

@@ -0,0 +1,960 @@
title 'FCB - DOS file system FCB support'
; File : $FCBS.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$
; FCBS.A86 1.10 93/11/11 15:38:14
; Chart Master fix - fcb_readblk over > 64k is truncated to 64k and
; error 2 (Segment boundry overlap) is returned
; FCBS.A86 1.9 93/10/18 17:37:06
; fix for >255 open files (PNW Server)
; ENDLOG
eject ! include i:fdos.equ
eject ! include i:msdos.equ
eject ! include i:mserror.equ
eject ! include i:doshndl.def ; DOS Handle Structures
eject
BDOS_DATA dseg word
BDOS_CODE cseg
extrn ifn2dhndl:near
extrn parse_one:near
extrn fdos_entry:near
Public fdos_exit
eject
; TERMINATE CHILD (EXIT)
; +----+----+
; | 24 |
; +----+----+
; entry:
; ------
; -none-
; exit:
; -----
; -none-
; Close down all FCB handles associated with the current PSP
;
fdos_exit:
;---------
push ds
push ss ! pop ds ; DS -> PCM_DSEG
sub ax,ax ; start with first DHNDL_
fdos_exit10:
call ifn2dhndl ; get DHNDL_
jc fdos_exit40 ; stop if we have run out
mov fcb_pb+2,ax ; we may close this IFN
push ax
mov cx,es:DHNDL_COUNT[bx] ; get the open count
jcxz fdos_exit30 ; skip if nothing to do
mov ax,current_psp ; get current PSP
cmp ax,es:DHNDL_PSP[bx] ; does it belong to this PSP
jne fdos_exit30
mov ax,ss:machine_id ; get current process
cmp ax,es:DHNDL_UID[bx]
jne fdos_exit30
test es:DHNDL_MODE[bx],DHM_FCB
jz fdos_exit20 ; skip close if not FCB
push es
push bx ; save the DHNDL
mov ax,MS_X_CLOSE
call fcb_fdos ; make the FDOS do the work
pop bx
pop es ; recover the DHNDL
fdos_exit20:
mov es:DHNDL_COUNT[bx],0 ; always free the handle if it's ours
fdos_exit30:
pop ax
inc al ; onto next IFN
jnz fdos_exit10
fdos_exit40:
pop ds
ret
Public fdos_fcb
eject
; GENERIC FCB FUNCTION (FCB)
; +----+----+----+----+----+----+----+----+
; | 22 | fcbadr | count |
; +----+----+----+----+----+----+----+----+
; | func |
; +----+----+
; entry:
; ------
; fcbadr: FCB address
; count: multi-sector count for read/write
; func: FCB sub-function
; exit:
; -----
; AX: return code or error code ( < 0)
fdos_fcb:
;--------
mov bx,2[bp] ; BX -> parameter block
mov bx,8[bx] ; get subfunction code
shl bx,1 ; make it word index
sub bl,15*WORD ; adjust to base address
jc fcb_error ; reject if too low
cmp bl,FCB_MAX1 ; is it in 1st block
jb fdos_fcb10
sub bl,(33-24)*WORD ; adjust for gap
jc fcb_error
cmp bl,FCB_MAX2 ; is it in 2nd block
jb fdos_fcb10
sub bl,(39-37)*WORD ; adjust for gap
jc fcb_error
fdos_fcb10:
cmp bx,FCB_MAX3 ; check the range
jae fcb_error ; skip if invalid function
jmp fcb_table[bx] ; call the right function
fcb_error:
mov bx,ED_FUNCTION
ret
fcb_table dw fcb_open ; 15-open file
dw fcb_close ; 16-close file
dw fcb_first ; 17-find first
dw fcb_next ; 18-find next
dw fcb_delete ; 19-delete file
dw fcb_read ; 20-read from file
dw fcb_write ; 21-write to file
dw fcb_make ; 22-make file
dw fcb_rename ; 23-rename file
FCB_MAX1 equ (offset $ - offset fcb_table)
dw fcb_readrand ; 33-read from file
dw fcb_writerand ; 34-write to file
dw fcb_size ; 35-compute file size
dw fcb_setrecord ; 36-set relative record
FCB_MAX2 equ (offset $ - offset fcb_table)
dw fcb_readblk ; 39-read from file
dw fcb_writeblk ; 40-write to file
FCB_MAX3 equ (offset $ - offset fcb_table)
fcb_make:
;--------
call fcb_path_prep ; build pathname
mov ax,MS_X_CREAT
jmps fcb_open_make_common
fcb_open:
;--------
call fcb_path_prep ; build pathname
mov ax,MS_X_OPEN
fcb_open_make_common:
mov fcb_pb+6,DHM_RW+DHM_FCB ; open as an FCB for read/write
call fcb_fdos ; lets try and open the file
jnc fcb_open10 ; skip if we can't
ret
fcb_open10:
call ifn2dhndl ; ES:BX -> DHNDL_ we have opened
push ds
push es ! push bx ; save DHNDL_
call fcb_point ; ES:BX = FCB
pop si ! pop ds ; DS:SI -> DHNDL_
mov es:MSF_IFN[bx],al ; store IFN away
mov es:MSF_BLOCK[bx],0 ; current block number
mov es:MSF_RECSIZE[bx],128 ; current logical record size
call fcb_update ; update misc changing fields
mov ax,ds:DHNDL_DEVOFF[si]
mov es:word ptr MSF_DEVPTR[bx],ax
mov ax,ds:DHNDL_DEVSEG[si]
mov es:word ptr MSF_DEVPTR+2[bx],ax
mov ax,ds:DHNDL_BLK1[si]
mov es:MSF_BLOCK1[bx],ax
mov al,ds:DHNDL_ATTR[si]
mov es:MSF_IOCTL[bx],al
mov al,es:MSF_DRIVE[bx] ; get drive from FCB
dec al ; was absolute drive specified ?
jns fcb_open20 ; if so use it
mov al,ss:current_dsk ; else use default drive
fcb_open20:
inc al ; make drive 1 rather than 0 based
mov es:MSF_DRIVE[bx],al ; drive code
if 0
test ds:DHNDL_DATRB[si],DA_VOLUME
else
test ss:fcb_pb+8,DA_VOLUME
endif
pop ds
jnz fcb_close ; don't leave VOL label's open
xor bx,bx ; no errors !
ret
fcb_update:
;----------
; On Entry:
; DS:SI -> DHNDL_
; ES:BX -> FCB
; On Exit:
; DATE/TIME/SIZE/DBLK/DCNT fields updated
;
mov ax,ds:DHNDL_TIME[si]
mov es:MSF_TIME[bx],ax
mov ax,ds:DHNDL_DATE[si]
mov es:MSF_DATE[bx],ax
mov ax,ds:DHNDL_SIZELO[si]
mov es:MSF_SIZE[bx],ax
mov ax,ds:DHNDL_SIZEHI[si]
mov es:MSF_SIZE+2[bx],ax
mov ax,ds:DHNDL_DBLK[si]
mov es:MSF_DBLK[bx],ax
mov al,ds:DHNDL_DCNTLO[si]
mov ah,ds:DHNDL_DCNTHI[si]
mov es:MSF_DCNT[bx],ax
ret
fcb_close:
;---------
; close file (DOS function 10h)
call fcb_point ; ES:BX -> FCB
mov al,0FFh
cmp al,es:MSF_IFN[bx] ; is it a multiple close ?
je fcb_fdos_common10 ; don't re-open for this...
call fcb_handle_vfy ; verify we have a sensible handle
mov es:MSF_IFN[bx],al ; mark FCB as closed (it will be)
mov ax,MS_X_CLOSE ; now close it
; jmps fcb_fdos_common
fcb_fdos_common:
;---------------
call fcb_fdos ; make the FDOS do the work
jc fcb_fdos_common20 ; return any error codes
fcb_fdos_common10:
xor bx,bx ; else return zero
fcb_fdos_common20:
ret
fcb_rename:
;----------
call fcb_path_prep
call fcb_path2_prep
mov ax,MS_X_RENAME ; it's a rename
jmps fcb_fdos_common
fcb_delete:
;----------
call fcb_path_prep
mov ax,MS_X_UNLINK ; it's a delete
jmps fcb_fdos_common
fcb_first:
;---------
call fcb_path_prep ; prepare pathname
mov ax,MS_X_FIRST ; we want to search 1st
jmps fcb_search_common
fcb_next:
;--------
call fcb_restore_search_state
mov ax,MS_X_NEXT
fcb_search_common:
call fcb_search ; 0 of OK, otherwise ED_..
jc fcb_search_common10
call fcb_save_search_state ; save sucessful state
xor bx,bx ; return code in BX
fcb_search_common10:
ret
fcb_setrecord:
;-------------
call fcb_point ; ES:BX -> FCB
mov ax,128 ; multiply current block by 128
mul es:MSF_BLOCK[bx] ; to give current record number
xor cx,cx
mov cl,es:MSF_CR[bx] ; Add in the current record
add ax,cx ; to DX:AX to give the
adc dx,0 ; relative record
mov es:MSF_RR[bx],ax ; save the result
mov es:MSF_RR2[bx],dl
xor bx,bx ; we did OK
ret
fcb_write:
;---------
mov ax,MS_X_WRITE ; make it a write
jmps fcb_seq_rw
fcb_read:
;--------
mov ax,MS_X_READ ; make it a read
fcb_seq_rw:
call fcb_handle_vfy ; verify we have a sensible handle
push ax ; save the operation
call fcb_get_count ; AX = bytes to read
push ax ; save byte count
call fcb_seek_seq ; Seek to position in the file
pop cx ; recover byte to xfer
pop ax ; and the Operation Code
jc fcb_seq_rw10
call fcb_rw ; do the Op
jc fcb_seq_rw10
push bx ; save the error code
call fcb_update_seq ; update FCB filepos
pop bx ; recover error
fcb_seq_rw10:
ret
fcb_rw:
; On Entry:
; AX = operation code
; CX = count
; fcb_pb+2 = IFN
; On Exit:
; BX = error code
les dx,ss:dword ptr dma_offset
add cx,dx ; see if we overflow
jc fcb_rw20
sub cx,dx ; count back to normal
push cx ; save target count
mov fcb_pb+4,dx
mov fcb_pb+6,es ; setup buffer address
mov fcb_pb+8,cx ; and target count
call fcb_fdos ; ask the FDOS to do the read/write
jc fcb_rw10 ; we got a real error...
push ds
push es
mov ax,fcb_pb+2 ; get IFN
call ifn2dhndl ; ES:BX -> DHNDL_ we have open
push es ! push bx ; save DHNDL_
call fcb_point ; ES:BX = FCB
pop si ! pop ds ; DS:SI -> DHNDL_
call fcb_update ; update file size/time-stamp
pop es
pop ds
pop ax ; recover target count
mov cx,fcb_pb+8 ; we xfered this much
cmp cx,ax ; did we xfer enough
jb fcb_rw30 ; nope..
xor bx,bx ; xfer went OK
ret
fcb_rw10:
pop ax ; discard target count
ret
fcb_rw20:
; Our DTA is too small - return 2
mov bx,2 ; indicate the DTA is too small
; stc ; error - don't update FCB
ret
fcb_rw30:
; We have some form of EOF - lets look into it
call fcb_point ; ES:BX = FCB
mov bx,es:MSF_RECSIZE[bx] ; BX = record size
mov ax,cx
xor dx,dx ; DX:AX = bytes xfer'd
div bx ; did we xfer a complete
test dx,dx ; number of records ?
jz fcb_rw40 ; if so return 1
; Partial data was read - fill out with zero's and return 3
inc ax ; allow for incomplete record
push ax ; save rounded up xfer count
les di,ss:dword ptr dma_offset
add di,cx ; point to 1st byte after xfer
mov cx,bx ; this many in a record
sub cx,dx ; so this many weren't xfer'd
xor ax,ax ; fill them with zero's
rep stosb ; zap the bytes we didn't xfer to
pop ax ; recover xfer count
mul bx ; and work out # bytes xfered
xchg ax,cx ; return bytes in CX
mov bx,3 ; indicate EOF (partial read)
; clc ; update FCB
ret
fcb_rw40:
; No Data was xfered - return 1
mov bx,1 ; indicate EOF (no data read)
; clc ; update FCB
ret
fcb_writerand:
;-------------
mov ax,MS_X_WRITE ; make it a write
jmps fcb_random_rw
fcb_readrand:
;------------
mov ax,MS_X_READ ; make it a read
fcb_random_rw:
call fcb_handle_vfy ; check the handle is OK
push ax ; save the code
call fcb_get_count ; AX = bytes to read
push ax ; save byte count
xor cx,cx ; cause update of seq posn from
call fcb_update_rr ; random record position
call fcb_seek_rr ; Seek to position in the file
pop cx ; recover byte to xfer
pop ax ; and the Operation Code
jc fcb_random_rw10
call fcb_rw ; do the Op
fcb_random_rw10:
ret
fcb_writeblk:
;------------
mov ax,MS_X_WRITE ; make it a write
jmps fcb_block_rw
fcb_readblk:
;-----------
mov ax,MS_X_READ ; make it a read
fcb_block_rw:
call fcb_handle_vfy ; check the handle is OK
push ax ; save the code
call fcb_get_count ; AX = bytes per record, CX = # records
xchg ax,cx ; CX = bytes per record
mul cx ; AX = bytes to xfer
test dx,dx ; more than 64K ?
jz fcb_block_rw10 ; then we should truncate it
mov ax,15 ; AX = handy mask
cwd ; DX = 0
and ax,ss:dma_offset ; get dma offset for para
not ax ; DX/AX = maximum bytes we can xfer
div cx ; AX = maximum blocks we can xfer
mul cx ; AX = bytes to xfer (now < 64K)
fcb_block_rw10:
push ax ; save byte count
call fcb_seek_rr ; Seek to position in the file
pop cx ; recover byte to xfer
pop ax ; and the Operation Code
jc fcb_block_rw20
call fcb_rw ; do the Op
jc fcb_block_rw20
push bx ; save the error code
call fcb_update_rr ; update FCB filepos, get records xferd
mov bx,2[bp] ; BX -> parameter block
xchg cx,6[bx] ; update amount xfered
sub cx,6[bx] ; CX = # we didn't xfer (normally 0)
pop bx ; recover (possible) error
jcxz fcb_block_rw20 ; skip if we read all we wanted to
test bx,bx ; did we have a partial read for
jnz fcb_block_rw20 ; a reason like EOF ?
mov bx,2 ; no, we must have truncated it
fcb_block_rw20:
ret
fcb_size:
;--------
call fcb_path_prep
mov ax,MS_X_CHMOD ; it's a get info
mov fcb_pb+6,0
call fcb_fdos
jc fcb_size40
call fcb_point ; ES:BX = FCB
mov cx,es:MSF_RECSIZE[bx] ; get the record size
test cx,cx ; is it non-zero ?
jnz fcb_size10 ; if not
mov cx,128 ; make it 128 bytes
fcb_size10:
mov ax,fcb_pb+10
mov dx,fcb_pb+12 ; DX:AX = file length in bytes
call div_32 ; DX:AX = file length in records
jcxz fcb_size20 ; was there an overflow
add ax,1
adc dx,0 ; include an extra record
fcb_size20:
call fcb_point ; ES:BX = FCB
mov es:MSF_RR[bx],ax ; low word of size
mov es:MSF_RR2[bx],dl ; hi byte of size
cmp es:MSF_RECSIZE[bx],64 ; if record size < 64 bytes
jae fcb_size30 ; then we use a 4 byte
mov es:MSF_RR2+1[bx],dh ; random record position
fcb_size30:
xor bx,bx ; good return
fcb_size40:
ret
; Utility FCB subroutines
;========================
fcb_handle_vfy:
;--------------
; Verify FCB is valid and open, do not return if it isn't
; nb. Called with nothing on stack
;
; On Entry:
; FCB address in parameter block
; On Exit:
; AX preserved
; ES:BX -> FCB (skipping EXT bit if present)
; fcb_pb+2 = IFN of handle
; On Error - blow away caller and return error in BX
;
; DEBUG - on reopen we could do more checks to ensure we are re-opening the
; same file
push ax
call fcb_point
cmp es:MSF_RECSIZE[bx],0
jne fcb_handle_vfy10
mov es:MSF_RECSIZE[bx],128
fcb_handle_vfy10:
mov al,es:MSF_IFN[bx] ; get IFN
call ifn2dhndl ; ES:BX -> DHNDL_
jc fcb_handle_vfy20 ; it must be a valid IFN
test es:DHNDL_MODE[bx],DHM_FCB
jz fcb_handle_vfy20 ; it must be an FCB..
cmp es:DHNDL_COUNT[bx],0
jne fcb_handle_vfy30 ; it must also be open..
fcb_handle_vfy20:
call fcb_point
push es:MSF_RECSIZE[bx] ; save current record size
push es:MSF_BLOCK[bx] ; save current block number
push es ! push bx
call fcb_open ; try to re-open the file
pop bx ! pop es ; point back at FCB
pop es:MSF_BLOCK[bx] ; restore current block number
pop es:MSF_RECSIZE[bx] ; restore record size
jc fcb_handle_err
mov al,es:MSF_IFN[bx] ; get new IFN
fcb_handle_vfy30:
xor ah,ah
mov fcb_pb+2,ax ; set parameter block accordingly
call fcb_point ; ES:BX -> MSF_
pop ax
clc
ret
fcb_handle_err:
add sp,2*WORD ; discard AX and near return address
cmp ax,ED_HANDLE ; if we have run out of handles then
jne fcb_handle_err10 ; say no FCB's, else return error
mov ax,ED_NOFCBS
fcb_handle_err10:
xchg ax,bx ; error code in BX
stc
ret
fcb_path2_prep:
;--------------
; On Entry:
; FCB address in parameter block
; On Exit:
; ES:BX -> FCB (skipping EXT bit if present)
; fcb_pb+6/8 -> unparse name from FCB
;
call fcb_point ; point at the FCB
mov al,es:MSF_DRIVE[bx] ; get drive
add bx,16 ; point at 2nd name in FCB
mov di,offset fcb_path2
mov fcb_pb+6,di
mov fcb_pb+8,ds ; point at buffer we want
jmps fcb_path_prep_common
fcb_path_prep:
;-------------
; On Entry:
; FCB address in parameter block
; On Exit:
; ES:BX -> FCB (skipping EXT bit if present)
; fcb_pb+2/4 -> unparse name from FCB
;
xor ax,ax ; assume no attribute
mov bx,2[bp] ; BX -> parameter block
les bx,2[bx] ; ES:BX -> FCB
cmp es:MSF_EXTFLG[bx],0ffh ; is it an extended FCB
jne fcb_path_prep10
or al,es:MSF_ATTRIB[bx] ; we can use file mode from XFCB
add bx,7 ; skip EXT bit of FCB
fcb_path_prep10:
mov fcb_pb+8,ax ; remember the attribute
mov al,es:MSF_DRIVE[bx] ; get drive
mov di,offset fcb_path
mov fcb_pb+2,di
mov fcb_pb+4,ds ; point at buffer we want
fcb_path_prep_common:
dec al ; 0 = default drive
jns fcb_path_prep20
mov al,current_dsk ; use default drive
fcb_path_prep20:
push ds
push ds ! push es
pop ds ! pop es ; ES:DI -> name buffer
add al,'A' ; make drive ASCII
stosb
mov al,':'
stosb ; now we have 'd:'
lea si,MSF_NAME[bx] ; DS:SI -> source name
movsw ! movsw
movsw ! movsw ; copy the name leaving spaces intact
mov al,'.'
stosb
movsw ! movsb ; copy the extention
pop ds
; jmps fcb_point ; point ES:BX at FCB again
fcb_point:
;---------
; On Entry:
; FCB address in parameter block
; On Exit:
; ES:BX -> FCB (skipping EXT bit if present)
; (All other regs preserved)
;
mov bx,2[bp] ; BX -> parameter block
les bx,2[bx] ; ES:BX -> FCB
cmp es:MSF_EXTFLG[bx],0ffh ; is it an extended FCB
jne fcb_point10
add bx,7 ; skip EXT bit of FCB
fcb_point10:
ret
fcb_get_count:
;-------------
; On Entry:
; none
; On Exit:
; AX = bytes per record
; CX = callers CX count
; All regs fair game
;
call fcb_point ; ES:BX -> FCB
mov si,2[bp] ; SI -> parameter block
mov cx,6[si] ; CX = count
mov ax,es:MSF_RECSIZE[bx] ; get record size
ret
fcb_update_seq:
;--------------
; On Entry:
; CX = byte count actually transferred
; On Exit:
; CX = record count transferred
; All other regs fair game
; CR/BLOCK updated with new value
;
mov ax,cx
xor dx,dx ; DX:AX = byte count transfered
call fcb_point ; ES:BX -> FCB
div es:MSF_RECSIZE[bx] ; make records xfered
push ax ; save records xfered
xchg ax,cx ; also in CX for later
mov ax,128
mul es:MSF_BLOCK[bx] ; DX:AX = record of block
add ax,cx
adc dx,0 ; add in amount just xfered
mov cl,es:MSF_CR[bx]
xor ch,ch ; now add in CR as a word
add ax,cx
adc dx,0 ; DX:AX = record
mov dh,dl ; DH:AX = record for common code
jmps fcb_update_common
fcb_update_rr:
;-------------
; On Entry:
; CX = byte count actually transferred
; On Exit:
; CX = record count transferred
; All other regs fair game
; Random Record and CR/BLOCK updated with new value
;
xchg ax,cx
xor dx,dx ; DX:AX = byte count transfered
call fcb_point ; ES:BX -> FCB
div es:MSF_RECSIZE[bx] ; make records xfered
push ax ; save records xfered
add es:MSF_RR[bx],ax ; update the RR field
adc es:MSF_RR2[bx],0 ; and the overflow
mov ax,es:MSF_RR[bx] ; get low part of RR
mov dh,es:MSF_RR2[bx] ; and the hi part
fcb_update_common:
mov dl,ah ; DX will be block number
shl al,1 ; get top bit of CR into CY
adc dx,dx ; then into DX
shr al,1 ; AL = CR (remember mod 128)
mov es:MSF_CR[bx],al ; set the CR field
mov es:MSF_BLOCK[bx],dx ; and the block field
pop cx ; recover records xfered
ret
fcb_seek_seq:
;------------
; Seek to position in file indicated by the RR position
; On Entry:
; ES:BX -> FCB_
; On Exit:
; CY clear if no problem, fcb_pb+2=IFN
; else
; CY set, AX = BX = error code
; All other regs fair game
;
call fcb_point ; ES:BX -> FCB_
mov ax,128
mul es:MSF_BLOCK[bx] ; get record in DX:AX
mov cl,es:MSF_CR[bx]
xor ch,ch
add ax,cx ; add in CR
adc dx,0 ; so DX:AX is really the record
push ax ; save low word of record
mov ax,dx
mul es:MSF_RECSIZE[bx] ; DX:AX = byte offset in file/10000h
mov cx,ax ; save the important word
pop ax ; recover low word of record
jmps fcb_seek_common
fcb_seek_rr:
;-----------
; Seek to position in file indicated by the RR position
; On Entry:
; ES:BX -> FCB_
; On Exit:
; CY clear if no problem, fcb_pb+2=IFN
; else
; CY set, AX = BX = error code
; All other regs fair game
;
call fcb_point ; ES:BX -> FCB_
mov al,es:MSF_RR2[bx]
xor ah,ah
mul es:MSF_RECSIZE[bx] ; DX:AX = byte offset in file/10000h
mov cx,ax ; save the important word
mov ax,es:MSF_RR[bx]
fcb_seek_common:
mul es:MSF_RECSIZE[bx] ; DX:AX = byte offset in file
add dx,cx ; add the two bits together
mov fcb_pb+4,ax
mov fcb_pb+6,dx ; save position
mov fcb_pb+8,0 ; seek from start
xor ax,ax
mov al,es:MSF_IFN[bx] ; AX = IFN
mov fcb_pb+2,ax ; save IFN
mov ax,MS_X_LSEEK
jmp fcb_fdos ; try and seek to this position
fcb_search:
;----------
; On Entry:
; AX = operation to perform
; On Exit:
; AX = 0, or ED_ error code (CY set if error)
push dma_offset
push dma_segment
mov dma_offset,offset fcb_search_buf
mov dma_segment,ds
call fcb_fdos ; do the search
pop dma_segment
pop dma_offset
test ax,ax ; was there an error
stc ; assume there was
js fcb_search10 ; return the error
xor ax,ax ; no problems
fcb_search10:
ret
fcb_save_search_state:
;---------------------
; On entry DS=PCMODE
call fcb_point
lea di,MSF_NAME[bx] ; ES:DI -> FCB name
mov si,offset fcb_search_buf
lodsb ; get 1st byte = drive info
mov cx,20/WORD ; copy 20 bytes to FCB
rep movsw ; (the rest of the search template)
stosb ; drive info byte follow them
les di,dword ptr dma_offset ; ES:DI -> search state in DMA address
mov si,2[bp] ; SI -> parameter block
lds si,2[si] ; DS:SI -> FCB_
cmp ds:MSF_EXTFLG[si],0ffh ; extended FCB ?
jne fcb_sss10
mov cx,7 ; copy extended FCB portions too
rep movsb ; we have copied up to name
fcb_sss10:
stosb ; save drive byte info
push di
mov al,' ' ; space fill name
mov cx,11
rep stosb ; all blanks now
pop di
push ss ! pop ds ; DS:SI -> pathname
mov si,offset fcb_search_buf+1Eh
push di ; unparse knowing name is good
mov cx,8 ; length of name field
fcb_sss20:
lodsb ; treat '.' and '..' specially
cmp al,'.' ; is either possible ?
jne fcb_sss30 ; no, continue as normal
stosb ; copy the '.'
loop fcb_sss20 ; go around for another '.'
jmps fcb_sss40 ; this name is rubbish!!
fcb_sss30:
dec si ; forget the non '.'
call parse_one ; parse just the name
fcb_sss40:
pop di
add di,8 ; di -> fcb ext field
cmp al,'.' ; do we have an extention ?
jne fcb_sss50
mov cx,3 ; length of ext field
push di
call parse_one ; parse just extension
pop di
fcb_sss50:
add di,3 ; di -> rest of fcb
mov si,offset fcb_search_buf+15h
movsb ; copy the attribute field
xor ax,ax
mov cx,10/WORD
rep stosw ; 10 bytes of zeros
movsw ; copy time
movsw ; copy date
mov ax,word ptr srch_buf+21+DBLOCK1
stosw ; 1st block
movsw ! movsw ; copy filesize
ret
fcb_restore_search_state:
;------------------------
; On entry DS=PCMODE
push ds
call fcb_point ; ES:BX -> FCB_
push es ! push ds
pop es ! pop ds ; swap DS/ES
mov di,offset fcb_search_buf+1
; ES:DI -> internal state
lea si,1[bx] ; DS:SI -> FCB+1
mov cx,10
rep movsw ; copy info from FCB
lodsb ; get "drive" info
mov es:fcb_search_buf,al ; it's the 1st byte in the srch state
pop ds
ret
fcb_fdos:
;--------
; Make an FDOS call (NB. We don't have MX here, so it's OK)
; Set top bit of remote_call flag so we use IFN's not XFN's
; On Entry:
; AX = FDOS operation
; fcb_pb -> FDOS parameter block
; On Exit:
; As FDOS call
;
mov fcb_pb,ax ; save operation type
or remote_call,DHM_FCB ; forget about PSP during FCB call
mov dx,offset fcb_pb ; DS:DX -> parameter block
push ds
push bp
call fdos_entry ; call the FDOS
pop bp
pop ds
and remote_call,not DHM_FCB ; FCB operation over
cmp ax,ED_LASTERROR
cmc ; CY set if an error occurred
ret
div_32:
; Entry: DX,AX = long dividend
; CX = word divisor
; Exit: DX,AX = long result
; CX = remainder
jcxz div0 ; divide by 0
cmp cx,1
je div1 ; divide by 1
push di
push bx
xor bx,bx ; BX = 0
xchg ax,bx ; low word in BX, AX = 0
xchg ax,dx ; high word in DX:AX
push ax ; save high word
div cx ; divide high part
mov di,ax ; save result
mul cx ; AX = even divisor part
pop dx ; old high in DX
sub dx,ax ; eliminate even part
xchg ax,bx ; AX = low word
div cx ; low part in AX
mov cx,dx ; CX = remainder
mov dx,di ; high result in DX
pop bx
pop di
ret
div0:
mov ax,-1
mov dx,ax
ret
div1:
dec cx ; CX = remainder = 0
ret
PCMODE_DATA DSEG WORD
extrn fcb_pb:word
extrn fcb_path:byte
extrn fcb_path2:byte
extrn fcb_search_buf:byte
extrn current_dsk:byte
extrn current_psp:word
extrn dma_offset:word
extrn dma_segment:word
extrn machine_id:word
extrn remote_call:word
extrn srch_buf:byte
end

425
IBMDOS/FDOS.A86 Normal file
View File

@@ -0,0 +1,425 @@
title 'F_DOS - DOS file system'
; File : $FDOS.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 ***
; $Log$
; FDOS.A86 1.23 93/12/15 03:07:08
; New ddioif entry point so Int 25/26 bypasses address normalisation
; FDOS.A86 1.20 93/09/03 20:25:47
; Add "no critical errors" support (int 21/6C)
; ENDLOG
;
; This is the DOS support function of Concurrent DOS 6.0
; It is called via BDOS function #113, with DS:DX pointing
; to a parameter block. The first word of the parameter
; block is the subfunction number, the remainder are
; parameters or return values, depending on the function.
; Date Who Modification
; --------- --- ---------------------------------------
; ?? Feb 86 Initial version
; 7 May 86 speedup MXdisk handling
; ?? Oct 86 used separate file handle & descriptors
; 5 Nov 86 combined with 5.1 BDOS;
; 7 Nov 86 added multiple file search
; 8 Nov 86 added open file checking
; 9 Nov 86 added lock/unlock code
; 14 Nov 86 converted to use new deblocking code
; 17 Nov 86 use RWXIOSIF code, select drive for flush
; 18 Nov 86 first attempt to support character devices
; on WRITE, CLOSE, LSEEK, DATTIM
; 19 Nov 86 some WRITE bugs fixed, MOVE implemented
; RMDIR redone locally (previously BLACK)
; 24 Nov 86 made changes for linked CDOS.CON
; 27 Nov 86 added FCB function entries for BLACK.A86
; 30 Nov 86 added code to support FUNC13 (DRV_RESET)
; 3 Dec 86 added support for CHDIR ("l:=d:\path");
; 16 Dec 86 update file time stamp on any write
; 23 Jan 86 added support for passwords
; 6 Feb 87 added support for IOCTL status
; 27 Feb 87 updated FCB r/w code to latest spec
; fixed FDOS_CREAT to truncate size to 0L
; 2 Mar 87 Changed FUNC62 to BDOS62 to avoid conflict
; with the linked PCMODE
; 7 Mar 87 changed MF_READ to 0-pad partial FCB records
; 17 Mar 87 fixed ES corruption in FCB_TERM code
; 29 Apr 87 Fixed CHDIR bug which failed to return an error when
; attempting to change to a filename.
; May 87 fixed some FCB bugs
; 19 May 87 changed password mode for FlexOS compatibility
; added IOCTL functions
; 4 Jun 87 zeroed current block on DOS FCB open
; 14 Jun 87 round up writes at end if > 1 sector and rt. fringe
; 19 Jun 87 supported freeing up floating drives
; 28 Jul 87 MX moved into individual funcs for DR NET support
; 29 Jul 87 WRITE_DEV moved to outside MXdisk
; 6 Aug 87 fix some password & partial close problems
; IOCTL(0) bug fixed
; 10 Aug 87 fixed CURDIR path too long problem
; 13 Aug 87 F1',F2' compatibility modes supported
; 20 Aug 87 LOCK_REGION fixed
; 5 Sep 87 lower case DOS FCBs converted to upper case
; 6 Sep 87 free up locked drives on process terminate
; 23 Sep 87 support \path1\path2\devname in DEVICE_ASCIZ:
; 28 Sep 87 use international upper case on ASCIZ paths
; 29 Sep 87 support IOCTL(4), IOCTL(5)
; 7 Oct 87 re-init dir entry on CREAT even if existing file
; return error if CURDIR can't find parent
; 8 Oct 87 don't release handles on disk change
; check OPEN_MAX and LOCK_MAX in SYSDAT
; 13 Oct 87 allow reduced F_OPEN if W,D password not supplied
; 22 Oct 87 support pseudo-networked drives via NET_VEC
; 26 Oct 87 use CBLOCK instead of HDSBLK for CP/M FCB check
; (can now CHDIR between F_OPEN and F_READ)
; 27 Oct 87 reject ".", ".." and " " names on MKDIR, CREAT, MKNEW
; 28 Oct 87 fixed OMODE_COMPAT compatibility checks,
; call SELECT_HANDLE in VFY_DOS_FCB to support
; FCB close after CHDIR
; 29 Oct 87 create label in root only, update VLDCNT in DPH
; delete label in root only, update VLDCNT in DPH
; also update VLDCNT in CREAT and UNLINK
; find labels in root if label only search
; 2 Nov 87 return ED_PATH if level doesn't exist in PATH_PREP
; reject "/path/" as legal ASCIZ specification
; 4 Nov 87 fix release_locks -- didn't work if any locks there
; test F6' on F_LOCK for file size check
; 10 Nov 87 fix F1' compatibility -- test 80h in P_CMOD
; support CREAT on file open in compatibility mode
; by the calling process
; 11 Nov 87 attempt to support multiple compatibility opens
; by several processes in read access mode or
; deny write/read access modes and still have the
; rest of the file sharing working...
; use PCM_ROUT as BIN flag for console handles
; 12 Nov 87 fix file sharing test on MF_OPEN (HM_FCB)
; fix DOS FCB rename of open file (WS 3.x)
; 19 Nov 87 Release 6.0/2.0
; --------- ---------------
; 21 Nov 87 make NUL device first device in the list
; 1 Dec 87 various network fixes (dup, exec, exit, etc.)
; 2 Dec 87 implement DOS FCB calls across DR Net
; 3 Dec 87 fix CHECK_NOT_OPEN (CALL FILE_UPDATE) (fixes CB86)
; 4 Dec 87 pass drive on network FCB calls
; 7 Dec 87 supported FCB reads/writes across network (via handles)
; 10 Dec 87 fixed month dependant MKDIR bug.
; 11 Dec 87 fixed networked CURDIR bug (for SUBST)
; 5 Jan 88 don't delete labels via FDOS_UNLINK,
; don't access labels via FDOS_CHMOD
; 7 Jan 88 make NUL device first device in chain, in SYSDAT
; 12 Jan 88 setup MAKE_FLAG in FCB_MAKE_TEST
; 15 Jan 88 prevent SUBSTitution of networked drives
; 9 Feb 88 temporarily force door open interrupts
; add GET_FHND, FREE_FHND for dynamic handle create
; 10 Feb 88 update file size in DOS FCB for AutoCAD
; 15 Feb 88 update CUR_IFN in OPEN_HANDLE for MF_OPEN FCB setup
; 25 Feb 88 pass correct unit to driver on generic IOCTL request
; fix removable media check with DOS drivers
; 3 Mar 88 permit multiple compatibility mode opens
; 9 Mar 88 CHDIR ("d:=") always handled locally
; reject CHMOD on character devices
; use LUL_ALLOC for lock list allocation
; 10 Mar 88 Get PSP_XFNMAX before corrupting ES (RMCOBOL)
; 15 Mar 88 split file into three include files
; 28 Jul 88 Support PCMODE Private Device List
; 29 Jul 88 make PRN=LPT1, AUX=COM1
; 27-Feb-89 change PID equate for CDOS, work around RASM bug
; ("PID equ RLR" would cause external ref's to PID!)
; 29-Jun-89 Split off IOCTL into seperate module
; 11-Sep-89 Split off MSNET into seperate module
eject ! include i:psp.def
eject ! include i:modfunc.def
eject ! include i:fdos.equ
eject ! include rh.equ
eject ! include i:msdos.equ
eject ! include i:mserror.equ
eject ! include i:doshndl.def ; DOS Handle Structures
eject ! include i:driver.equ
eject ! include i:f52data.def ; DRDOS Structures
eject ! include bdos.equ
eject
FD_EXPAND equ 55h
PCMODE_DATA dseg
extrn current_ddsc:dword
extrn current_device:dword
extrn current_dhndl:dword
extrn current_dsk:byte ; default drive
extrn current_ifn:word
extrn current_ldt:dword
extrn current_psp:word ; PSP segment
extrn dev_root:dword
extrn dma_offset:word ; DTA offset
extrn dma_segment:word ; DTA segment
extrn file_ptr:dword
extrn fdos_stub:dword
extrn internal_flag:byte
extrn ioexerr:byte
extrn join_drv:byte
extrn last_drv:byte
extrn ldt_ptr:dword ; Pointer to LDT's for the drives
extrn lock_tables:dword
extrn machine_id:word ; remote process
extrn name_buf:byte ; 32 byte name buffer
extrn nul_device:dword ; NUL in PCMODE data segment
extrn owning_psp:word ; remote PSP segment
extrn phys_drv:byte
extrn remote_call:word ; remote machine flag
extrn share_stub:dword
extrn srch_buf:byte
extrn pri_pathname:byte
extrn sec_pathname:byte
extrn temp_ldt:byte
extrn unlock_tables:dword
extrn WindowsHandleCheck:byte
extrn net_delay:word
if KANJI
extrn DBCS_tbl:word ; Double Byte Character Table
endif
BDOS_DATA dseg word
extrn adrive:byte
extrn cur_dma:word
extrn cur_dma_seg:word
extrn mult_sec:word
extrn rwmode:byte
extrn valid_flg:byte
NO_CRIT_ERRORS equ 0100$0000b ; critical error shouldn't be generated
; warning - must match PCMODE.EQU
extrn fdrwflg:byte
extrn chdblk:word
extrn dcnt:word
extrn dirp:word
extrn dirperclu:word
extrn finddfcb_mask:word
extrn hdsaddr:word
extrn intl_xlat:dword
extrn lastcl:word
extrn logical_drv:byte
extrn pblock:dword
extrn physical_drv:byte
extrn req_hdr:byte
extrn yearsSince1980:word
extrn month:byte
extrn dayOfMonth:byte
extrn hour:byte
extrn minute:byte
extrn second:byte
orig_drive dw 0
path_drive dw 0
Public fdos_hds_blk, fdos_hds_root, fdos_hds_drv
fdos_hds rw 0 ; temporary HDS that we make up
fdos_hds_blk dw 0
fdos_hds_root dw 0
fdos_hds_drv db 0
HDS_LEN equ offset $ - offset fdos_hds
saved_hds rw 0 ; saved HDS on F_DOS rename
saved_hds_blk dw 0
saved_hds_root dw 0
saved_hds_drv db 0
saved_dcnt dw 0 ; saved DCNT on F_DOS rename
dta_ofl db 0 ; non-zero if read/write > DTA size
extflg dw 0 ; DOS FCB was extended FCB
blk dw 0 ; temp variable for cluster #
attributes db 0 ;fcb interface attributes hold byte
public info_fcb
info_fcb rb 1+8+3 ;local user FCB drive+name+ext
save_area rb 32 ;save area for dirbuf during rename and
;info_fcb during create(mustbe_nolbl)
;parental name during chdir
; local variables for fdos operations
sp_save dw 0
fdos_addr dw 0 ; address of F_DOS function
Public fdos_info, fdos_pb, fdos_ret
fdos_info rw 3 ; off, seg, size of parameter block
fdos_pb rw 7 ; copy of parameter block
fdos_ret dw 0 ; return value for function
if PASSWORD
; Password support uses the following data stuctures:
;
; The global_password field is set by an IOCTL call and remains constant.
;
; When a password is encountered during parsing a path the ASCII form is
; copied into the password_buffer. It is then encrypted and stored in the
; local_password field. If a password protected file is encountered then
; it's encrypted password is compared with both the global and local passwords.
;
; During a file/directory create the local_password field is examnined. If
; non-zero then this encrypted password is applied to the file, which is given
; full protection.
;
Public global_password
global_password dw 0
local_password dw 0
password_buffer rb 8
endif
eject
BDOS_CODE cseg
extrn pcmode_dseg:word ; Pointer to System Data Page
extrn get_ldt:near
extrn get_ldt_raw:near
extrn islocal:near ; redirector support
extrn redir_asciiz_offer:near
extrn redir_asciiz_dev_offer:near
extrn redir_asciiz_file_offer:near
extrn redir_drv_offer:near
extrn redir_dhndl_offer:near
extrn redir_move_offer:near
extrn redir_snext_offer:near
extrn alloc_cluster:NEAR
extrn allocdir:NEAR ; will extend subdirectory if full
extrn buffers_check:near
extrn discard_all:near
extrn close_dev:near ; close character device handle
extrn delfat:NEAR
extrn fdosrw:near ; read/write from/to disk file
extrn finddfcb:NEAR ; find next matching directory entry
extrn finddfcbf:NEAR ; find first matching directory entry
extrn first_dev:near ; find first matching character device
extrn fill_dirbuf:near
extrn flush_dirbuf:near
extrn flush_drive:near
extrn get_ddsc:near
extrn getdir:NEAR
extrn getnblk:NEAR
extrn hshdscrd:near ; discard hashing for drive AL
extrn mark_ldt_unsure:near
extrn redir_build_path:near ; build ASCII path
extrn open_dev:near ; open character device handle
extrn dup_dev:near ; call device driver on handle dup
extrn read_dev:near ; read from character device
extrn ReadTimeAndDate:near ; read date/time from CLOCK driver
extrn blockif:near
extrn ddioif:near
extrn select_logical_drv:near
extrn select_physical_drv:near
extrn setenddir:NEAR
extrn update_dat:NEAR ; flush dirty data buffers
extrn update_ddsc_free:NEAR ; count free blocks on drive
extrn update_dir:NEAR ; flush modified directory buffer
extrn update_fat:NEAR
extrn write_dev:near ; write to character device
extrn zeroblk:near ; fill cluster with 0's
eject
public bpb2ddsc ; build DDSC from a BPB
Public check_slash
public dbcs_lead
public discard_files ; discard open files (unconditional)
public fdos_ED_DRIVE ; Return ED_DRIVE error
public fdos_ED_FUNCTION ; Return ED_FUNCTION error
public find_dhndl
public find_xfn
public get_pb2_drive
public release_handle ; release file handle
public toupper ; upper case a character
Public unparse
public update_dir_fat ; flush DIR then FAT to disk
public fdos_getdpb ; 0-disk information
public fdos_mkdir ; 1-make directory
public fdos_rmdir ; 2-remove directory
public fdos_chdir ; 3-change directory
public fdos_creat ; 4-create file
public fdos_open ; 5-open file
public fdos_close ; 6-close file
public fdos_read ; 7-read from file
public fdos_write ; 8-write to file
public fdos_unlink ; 9-delete file
public fdos_lseek ; 10-set file pointer
public fdos_chmod ; 11-get/set file attributes
public fdos_curdir ; 12-get current directory
public fdos_first ; 13-find first matching file
public fdos_next ; 14-find next matching file
public fdos_move ; 15-rename file
public fdos_dattim ; 16-get/set file name
public fdos_flush ; 17-flush buffers
public fdos_mknew ; 18-make new file
public fdos_lock ; 19-lock/unlock block
public fdos_dup ; 20-duplicate handle
public fdos_fdup ; 21-force duplicate handle
extrn fdos_fcb:near ; 22-FCB emulation
public fdos_exec ; 23-create child PSP
extrn fdos_exit:near ; 24-FCB close for PSP
public fdos_ddio ; 25-direct disk access
extrn fdos_ioctl:near ; 26-IOCTL emulation
public fdos_commit ; 27-commit file
public fdos_expand ; 28-expand file name
public fdos_mkddsc ; 29-build DDSC from BPB
public fdos_select ; 30-select drive
if JOIN
Public check_join
Public mv_join_root
endif
eject
eject ! include funcs.fdo
eject ! include utils.fdo
END

126
IBMDOS/FDOS.DEF Normal file
View File

@@ -0,0 +1,126 @@
; 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
; 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
FD_DISKINFO equ 48h
FD_FLUSH equ 49h
FD_SELECT equ 4Ah
FD_EXEC equ 4Bh
FD_EXIT equ 4Ch
FD_FCB equ 4Dh
FD_COMMIT equ 50H
FD_NEW equ 51h
FD_LOCK equ 52h
FD_DDIO equ 54h
FD_EXPAND equ 55h
FD_REOPEN equ 58h
FDOS_MAXPARM equ 7 ; Maximum FDOS Parameter Length (WORDS)
FD_FUNC equ fdos_data
FD_DRIVE equ fdos_data + 2
FD_DPB equ dword ptr fdos_data + 4
FD_DPBOFF equ fdos_data + 4
FD_DPBSEG equ fdos_data + 6
FD_ADJUST equ fdos_data + 8
FD_NAME equ dword ptr fdos_data + 2
FD_NAMEOFF equ fdos_data + 2
FD_NAMESEG equ fdos_data + 4
FD_MODE equ fdos_data + 6
FD_HANDLE equ fdos_data + 2
FD_BUF equ dword ptr fdos_data + 4
FD_BUFOFF equ fdos_data + 4
FD_BUFSEG equ fdos_data + 6
FD_COUNT equ fdos_data + 8
FD_OFFSET equ dword ptr fdos_data + 4
FD_METHOD equ fdos_data + 8
FD_FLAG equ fdos_data + 6
FD_ATTRIB equ fdos_data + 8
FD_PATH equ dword ptr fdos_data + 4
FD_PATHOFF equ fdos_data + 4
FD_PATHSEG equ fdos_data + 6
FD_ONAME equ dword ptr fdos_data + 2
FD_ONAMEOFF equ fdos_data + 2
FD_ONAMESEG equ fdos_data + 4
FD_NNAME equ dword ptr fdos_data + 10
FD_NNAMEOFF equ fdos_data + 10
FD_NNAMESEG equ fdos_data + 12
FD_SFLAG equ fdos_data + 4
FD_DATE equ fdos_data + 6
FD_TIME equ fdos_data + 8
FD_LENGTH equ dword ptr fdos_data + 8
FD_LFLAG equ word ptr fdos_data + 12
FD_NEWHND equ fdos_data + 4
FD_FCBADR equ dword ptr fdos_data + 2
FD_FCBOFF equ fdos_data + 2
FD_FCBSEG equ fdos_data + 4
FD_FCBCNT equ fdos_data + 6
FD_FCBFUNC equ fdos_data + 8
FD_PSPSEG equ fdos_data + 2
FD_BPBOFF equ fdos_data + 2
FD_BPBSEG equ fdos_data + 4
FD_DDSCOFF equ fdos_data + 6
FD_DDSCSEG equ fdos_data + 8
FD_IOCTLFUNC equ fdos_data + 4
FD_IOCTLSTAT equ fdos_data + 6
FD_NUMOPEN equ fdos_data + 2
FD_DDIO_DRV_OP equ fdos_data + 2
FD_DDIO_NSECTORS equ fdos_data + 4
FD_DDIO_STARTLOW equ fdos_data + 6
FD_DDIO_STARTHIGH equ fdos_data + 8
FD_DDIO_DMAOFF equ fdos_data + 10
FD_DDIO_DMASEG equ fdos_data + 12

227
IBMDOS/FDOS.EQU Normal file
View File

@@ -0,0 +1,227 @@
; File : $FDOS.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
;
; Structure of Buffer Control Blocks
; ----------------------------------
; These BCBs immediately preceed the data buffers. BCBs are
; always shared for all drives and therefore must be big
; enough for the largest drive.
;
BCB_NEXT equ word ptr 00h ; link to next buffer
BCB_PREV equ word ptr 02h ; link to previous buffer
BCB_DRV equ byte ptr 04h ; drive of this buffer or 0FFh
BCB_FLAGS equ byte ptr 05h ; buffer flags
BCB_REC equ word ptr 06h ; low 16 bits of sector address
BCB_REC2 equ byte ptr 08h ; top 8 bits of record address
BCB_COPIES equ byte ptr 0Ah ; number of copies to write
BCB_SEPARATION equ word ptr 0Bh ; # sectors copies are apart
BCB_DDSC equ dword ptr 0Dh ; DWORD ptr to DDSC_
BCB_REMOTE equ word ptr 11h ; remote in-use count
BCB_DATA equ byte ptr 14h ; buffer data
BF_ISFAT equ 0002h ; buffer marked as FAT sector
BF_ISDIR equ 0004h ; buffer marked as Directory sector
BF_ISDAT equ 0008h ; buffer marked as Data sector
BF_DIRTY equ 0040h ; buffer marked as modified
BF_REMOTE equ 0080h ; buffer is remote
MAX12 equ 0FF6h ; max. disk size w/ 12-bit media
; Structure of Hash Control Block
; -------------------------------
; Each hash control block refers to the hash codes of one
; disrectory cluster or a root directory.
HCB_LINK equ word ptr 0 ; link to next control block
HCB_DRV equ byte ptr 2 ; drive for this entry or 0FFh
HCB_CLU equ word ptr 4 ; cluster number or 0000 if root
HCB_CNT equ word ptr 6 ; number of hashed entries
HCB_DATA equ word ptr 8 ; hash buffer data
; Structure of DOS FCB
; --------------------
; This is hopefully consistent with what DOS stores in an
; open file control block for DOS 1.x functions
MSF_EXTFLG equ byte ptr 0 ; if this is 0xFF, skip 1st 7 byte
MSF_ATTRIB equ byte ptr 6 ; file attributes if MSF_EXTFLG
MSF_DRIVE equ byte ptr 0 ; 1st byte normally drive code
MSF_NAME equ byte ptr 1 ; 8-bit ASCII file name, 11 characters
MSF_BLOCK equ word ptr 12 ; current block number
MSF_RECSIZE equ word ptr 14 ; current logical record size
MSF_SIZE equ word ptr 16 ; 32-bit file size
MSF_DATE equ word ptr 20 ; last date stamp
MSF_TIME equ word ptr 22 ; last time stamp
MSF_IFN equ byte ptr 24 ;; internal file number
MSF_IOCTL equ byte ptr 25 ;; file status
MSF_BLOCK1 equ word ptr 26 ;; 1st block of file
MSF_DBLK equ word ptr 28 ;; directory block
MSF_DEVPTR equ dword ptr 28 ;; address of device driver
MSF_DCNT equ word ptr 30 ;; directory count
MSF_CR equ byte ptr 32 ; current sequential record
MSF_RR equ word ptr 33 ; random record address (3 or 4 byte)
MSF_RR2 equ byte ptr 35 ; random record overflow
; Structure of DOS DPB
; --------------------
; The layout of this structure is a guess based on
; examples. It is returned by PC MODE on functions 1Fh and
; 32h and is required by various disk-related utilities
; like disk editors and CHKDSK.
DDSC_UNIT equ byte ptr 0 ; absolute drive number
DDSC_RUNIT equ byte ptr 1 ; relative unit number
DDSC_SECSIZE equ word ptr 2 ; sector size in bytes
DDSC_CLMSK equ byte ptr 4 ; sectors/cluster - 1
DDSC_CLSHF equ byte ptr 5 ; log2 (sectors/cluster)
DDSC_FATADDR equ word ptr 6 ; sector address of FAT
DDSC_NFATS equ byte ptr 8 ; # of FAT copies
DDSC_DIRENT equ word ptr 9 ; size of root directory
DDSC_DATADDR equ word ptr 11 ; sector address of cluster #2
DDSC_NCLSTRS equ word ptr 13 ; # of clusters on disk
DDSC_NFATRECS equ word ptr 15 ; # of sectors per FAT
DDSC_DIRADDR equ word ptr 17 ; sector address of root dir
DDSC_DEVHEAD equ dword ptr 19 ; device driver header
DDSC_DEVOFF equ word ptr 19
DDSC_DEVSEG equ word ptr 21
DDSC_MEDIA equ byte ptr 23 ; current media byte
DDSC_FIRST equ byte ptr 24 ; "drive never accessed" flag
DDSC_LINK equ dword ptr 25 ; next drive's DDSC
DDSC_BLOCK equ word ptr 29 ; next block to allocate
DDSC_FREE equ word ptr 31 ; total free clusters on drive
DDSC_LEN equ 33
; DELWATCH hooks called by OS
DELW_RDMASK equ 0 ; delete dir search mask
DELW_DELETE equ 2 ; delete this dir entry
DELW_FREECLU equ 3 ; free some clusters
DELW_FREERD equ 4 ; free root dir entry
DELW_SPACE equ 5 ; add "deletes" to free space
DELW_NEWDISK equ 7 ; new disk logged in
DELW_PURGE equ 14 ; perge pd file
DELW_UNDEL equ 15 ; undelete pd file
; SuperStore hook called by OS
SSTOR_SPACE equ 10h ; enquire # physical free space
; Password hooks called by OS
PASSWD_CREAT equ 20h ; initialise an entry
PASSWD_CHMOD equ 21h ; change an entry
PASSWD_CHECK equ 22h ; check an entry
; Share hooks in PCMODE data segment
;
; These point to a stub which does a "STC, RETF"
;
NUM_SHARE_STUB_ENTRIES equ 15
S_LOCKS equ DWORD*0 ; share lock/unlock region
S_UPDATE equ DWORD*1 ; update DHNDL from share
S_RECORD equ DWORD*2 ; update share from DHNDL
S_FDOSRW equ DWORD*3 ; validate proposed operation
S_DISCARD equ DWORD*4 ; discard all files on drive
S_OPEN equ DWORD*5 ; files is opening, remember it
S_CLOSE equ DWORD*6 ; files is closing, forget it
S_OM_COMPAT equ DWORD*7 ; check open mode compatible
S_CLOSE_IF_OPEN equ DWORD*8 ; close if compat open, else deny
S_DENY_IF_OPEN equ DWORD*9 ; deny if open shared/by others
S_GET_LIST_ENTRY equ DWORD*10 ; get open file list entry
S_CLOSE_FILES equ DWORD*11 ; close all files for given PSP/UID
; struct dirfcb
DNAME equ byte ptr 0 ;file name & type
DATTS equ byte ptr 11
DA_RO equ 01h ; 0x01 - read/only
DA_HIDDEN equ 02h ; 0x02 - hidden
DA_SYSTEM equ 04h ; 0x04 - system
DA_VOLUME equ 08h ; 0x08 - volume label
DA_DIR equ 10h ; 0x10 - sub-directory
DA_ARCHIVE equ 20h ; 0x20 - archive
DA_CLUSTER equ 80h ; 0x80 - return starting cluster from search (API extention)
DA_DELWATCH equ 80h ; 0x88 - return pending delete files
DA_FIXED equ 11011000b ; can't CHMOD label, dir, unused bits
DA_CHANGE equ not DA_FIXED ; all others are changeable
;DATTS2 equ 12 ;CP/M attributes
; ; 0x80 - f1' modify default open rules
; ; 0x40 - f2' partial close default
; ; 0x20 - f3' ignore close checksum errors
; ; 0x10 - f4' disable checksums
; ; 0x08 - (reserved)
; ; 0x04 - DELETE password
; ; 0x02 - WRITE password
; ; 0x01 - READ password
DUNDEL equ 13 ;1st letter of deleted file
DPWD equ word ptr 14 ;16-bit password hash code
DMODTIME equ word ptr 16 ;delwatch time (hhhhhmmmmmmsssss)
DMODDATE equ word ptr 18 ;delwatch date (yyyyyyymmmmddddd)
;DRECSIZE equ 16 ;FlexOS record size
;DUSER equ 18 ;FlexOS user ID of creator
;DGROUP equ 19 ;FlexOS group ID of creator
DPWM equ word ptr 20 ;FlexOS access rights
DTIME equ 22 ;time (hhhhhmmmmmmsssss)
DDATE equ 24 ;date (yyyyyyymmmmddddd)
DBLOCK1 equ 26 ;first block in file
DSIZE equ 28 ;current file size
; DOS Media Password Definitions
; ------------------------------
PWM_OWNER equ 000Fh ; PWD Owner mask
PWM_GROUP equ 00F0h ; PWD Group mask
PWM_WORLD equ 0F00h ; PWD World mask
PWM_R equ 0888h ; PWD required for reading
PWM_W equ 0444h ; PWD required for writing
PWM_E equ 0222h ; PWD req'd for executing
PWM_D equ 0111h ; PWD required for deleting
PWM_ANY equ PWM_R+PWM_W+PWM_D ; PWD required for anything
; literal constants
FAT12 equ 00fffh ; 12 bit fat
FAT16 equ 0ffffh ; 16 bit fat
ENDDIR equ 0ffffh ;end of directory

503
IBMDOS/FIOCTL.A86 Normal file
View File

@@ -0,0 +1,503 @@
title 'FDOS IOCTL - DOS file system input/output control'
; File : $FIOCTL.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$
; FIOCTL.A86 1.18 93/12/09 23:39:17
; Move non-inherited bit to correct place in file handle
; FIOCTL.A86 1.17 93/11/03 13:38:29
; Int 21 4409 return 0x0080 if drive is joined
; FIOCTL.A86 1.16 93/11/02 18:04:17
; Int21/4400 from file returns AH=0
; FIOCTL.A86 1.15 93/09/14 20:03:15
; Trust LFLG_PHYSICAL
; FIOCTL.A86 1.12 93/06/17 22:11:50
; support for ioctl 10/11 query ioctl support
; FIOCTL.A86 1.11 93/06/16 16:21:37
; Codepage preparation bug fixed
; ENDLOG
; Date Modification
; --------- ---------------------------------------
; 29 Jun 89 Initial version splits from FDOS
; 21 Nov 89 iocE/F use relative unit number
; 12 Dec 89 ioc2/3 zero the unused portions of req hdr
; save a few bytes in other ioc's while I'm here
; 4 Jun 90 default file access permissions and user group support
; 5 Jun 90 ioc0/1 tidied up
; 12 Jun 90 get_doshndl parameter in BX not AX
; 2 Oct 90 net_vec moves to per-VC basis (info held in CCB_)
; 13 feb 91 ioc1 tests FHIO_DEV, not HM_DEV, (123 MSNet printing)
; 7 may 91 ioc2,ioc3,ioc6,ioc7,iocC destabilised for Lanstatic
; by-product is ioc6 for disks returns read-ahead char
; in AH
; 28 feb 92 ioctl C checks bit 6 not bit 14 in DH_ATTRIB
; 3 aug 92 ioctl C/D pass thru' SI/DI
; 5 aug 92 substatial ioctl rework saves a few bytes - ioctl
; request header now built by PCMODE
eject ! include i:fdos.equ
eject ! include rh.equ
eject ! include i:msdos.equ
eject ! include i:mserror.equ
eject ! include i:doshndl.def ; DOS Handle Structures
eject ! include i:driver.equ
eject ! include i:f52data.def ; DRDOS Structures
eject
PCMODE_DATA dseg BYTE
extrn ioctlRH:byte ; request header is build in PCMODE
; data area
BDOS_DATA dseg word
extrn fdos_pb:word
extrn fdos_ret:word
extrn last_drv:byte
extrn req_hdr:byte
if PASSWORD
extrn global_password:word
endif
BDOS_CODE cseg
extrn local_disk:near
extrn device_driver:near
extrn block_device_driver:near
extrn fdos_error:near
extrn fdos_ED_DRIVE:near
extrn fdos_ED_FUNCTION:near
extrn fdos_read:near
extrn get_ddsc:near
extrn vfy_dhndl_ptr:near
extrn get_pb2_drive:near
extrn ioc6_dev:near ; IOCTL(6): input status for device
extrn ioc7_dev:near ; IOCTL(7): output status for device
extrn vfy_dhndl_ptr:near
extrn verify_handle:near
extrn reload_registers:near
if JOIN
extrn get_ldt:near
endif
if PASSWORD
extrn hash_pwd:near
endif
public fdos_ioctl
eject
; INPUT/OUTPUT CONTROL (IOCTL)
; +----+----+----+----+----+----+----+----+----+----+
; | 26 | param | func | request header |
; +----+----+----+----+----+----+----+----+----+----+
; entry:
; ------
; param: handle/drive on some functions
; func: sub function (0-A)
; request header: far pointer to IOCTL request header
; exit:
; -----
; AX: return code or error code ( < 0)
; param: return value from some functions
ioctl_tbl dw ioctl0 ; 0-get handle status
dw ioctl1 ; 1-set handle status
dw ioctl2 ; 2-receive control string (handle)
dw ioctl3 ; 3-send control string (handle)
dw ioctl4 ; 4-receive control string (drive)
dw ioctl5 ; 5-send control string (drive)
dw ioctl6 ; 6-input status
dw ioctl7 ; 7-output status
dw ioctl8 ; 8-removable media check
dw ioctl9 ; 9-networked drive check
dw ioctlA ; A-networked handle check
if PASSWORD
dw ioctl54 ; B-set global password
else
dw device_ED_FUNCTION
endif
dw ioctlC ; C-code page support
dw ioctlD ; D-generic IOCTL disk i/o
dw ioctlE ; E-get logical drive
dw ioctlF ; F-set logical drive
dw ioctl10 ; 10-query IOCTL for char devs
dw ioctl11 ; 11-query IOCTL for disks
NUM_IOCTL equ (offset $ - offset ioctl_tbl)/WORD
fdos_ioctl:
;----------
mov bx,2[bp] ; BX -> parameter block
mov bx,4[bx] ; get I/O control subfunction
cmp bx,NUM_IOCTL ; is it in the supported range?
jae device_ED_FUNCTION ; skip if value too large
shl bx,1 ; else make it word index
jmp ioctl_tbl[bx] ; call the right function
device_ED_FUNCTION:
mov bx,ED_FUNCTION ; "invalid function"
ret
ioctl0: ; get device status
;------
; Note: We store the binary flag for the standard console
; handles in the console mode, not in the file handle,
; as the handles are shared across all consoles...
call vfy_dhndl_ptr ; check if good handle
mov ax,es:DHNDL_WATTR[bx] ; get attrib from doshndl
test ah,DHAT_REMOTE/256
mov ah,0 ; files/networks return 0 in AH/DH
jnz device_OK ; return attrib if network device
test al,DHAT_DEV ; or a file
jz device_OK
les bx,es:DHNDL_DEVPTR[bx] ; get real device driver address
mov ah,es:byte ptr 5[bx] ; get device driver attribute
; jmp device_OK
device_OK:
;---------
mov bx,2[bp] ; get parameter block address
mov 6[bx],ax ; save returned status
xor bx,bx ; successful return code
ret
ioctl1: ; set device status
;------
call vfy_dhndl_ptr ; make sure this is an open handle
test es:DHNDL_WATTR[bx],DHAT_DEV
jz device_ED_FUNCTION ; can't set status of disk files
mov ax,word ptr ioctlRH+14
; pick up new device status
test ah,ah ; test if high byte is zero
jnz device_ED_FUNCTION ; skip if O.K.
or al,DHAT_DEV ; make sure it stays a device
mov es:DHNDL_ATTR[bx],al ; store ioctl state in doshndl
jmps device_OK ; success
ioctl2: ; receive control string (devicehandle)
;------
ioctl3: ; send control string (device handle)
;------
ioctlC: ; generic ioctl (device handle)
;------
ioctl10: ; query ioctl support (device handle)
;-------
call vfy_dhndl_ptr ; check file handle #
call local_disk ; get MXdisk
call verify_handle ; make sure the handle is good
jnc short_fdos_ED_FUNCTION ; and is for a DEVICE
xor cx,cx ; device relative unit # always zero
les si,es:DHNDL_DEVPTR[bx] ; ES:SI -> device driver
jmps ioc2345CDcommon ; now use common code
ioctl4: ; receive control string (drive)
;------
ioctl5: ; send control string (drive)
;------
ioctlD: ; generic ioctl (drive)
;------
ioctl11: ; query ioctl support (drive)
;-------
call local_disk ; get MXdisk, switch stack
call get_pb2_ddsc ; get drives DDSC_
mov cl,es:DDSC_RUNIT[bx] ; get relative unit #
les si,es:DDSC_DEVHEAD[bx] ; ES:SI -> device header
; jmps ioctl2345Common ; now use common code
ioc2345CDcommon:
;---------------
; On Entry:
; ES:SI -> device driver header
; CL = media byte (0 if character device)
; CH = relative unit (0 if character device)
; MXDisk obtained
; On Exit:
; IOCTL performed
;
mov ax,fdos_pb+6 ; device driver support required
test es:DH_ATTRIB[si],ax ; does device driver support function ?
jz short_fdos_ED_FUNCTION
push ds
push es ! pop ds ; DS:SI -> device driver
push ss ! pop es
mov bx,offset ioctlRH ; ES:BX -> request header
mov es:RH_UNIT[bx],cl ; set relative unit for block devices
call device_driver ; call the device driver
pop ds ; check for errors on return
; jmp fdos_error_check
fdos_error_check:
;-------------
; On Entry:
; AX = Req Status
; On Exit:
; SIGN set if an error, AX&BX = Internal DOS error code
;
test ax,ax ; top bit == 1 if error
jns fdos_ioc_ec10 ; skip if no errors
xor ah,ah
add ax,-ED_PROTECT
neg ax
jmp fdos_error ; return critical error
fdos_ioc_ec10:
ret
; IOCTL subfunctions:
get_pb2_ddsc:
;------------
; On Entry:
; local_disk called, pick us drive from pb2
; On Exit:
; ES:BX -> DDSC_ for the drive
;
call get_pb2_drive ; get specified drive
cmp al,last_drv ; is it a valid drive
ja bad_drive
call get_ldt ; ES:BX -> LDT for this drive
jc get_pb2_ddsc10 ; no LDT, physical=logical
mov ax,es:LDT_FLAGS[bx]
test ah,LFLG_NETWRKD/256
jnz short_fdos_ED_FUNCTION ; reject network drives
test ah,LFLG_PHYSICAL/256
jz bad_drive
test ah,LFLG_JOINED/256
jnz bad_drive ; reject JOIN'd drives
mov al,es:LDT_NAME[bx] ; get physical drive from LDT
and al,1Fh ; convert to 1 based drive
dec ax ; make that zero based
get_pb2_ddsc10:
call get_ddsc ; ES:BX -> DDSC_
jc bad_drive ; or does it?
ret
bad_drive:
jmp fdos_ED_DRIVE ; invalid drive specified
short_fdos_ED_FUNCTION:
jmp fdos_ED_FUNCTION
ioctl8: ; removable media check
;------
call local_disk ; get MXdisk, switch stack
call get_pb2_ddsc ; get drives DDSC_
push ds
lds si,es:DDSC_DEVHEAD[bx] ; DS:SI -> device driver
test ds:DH_ATTRIB[si],DA_REMOVE
pop ds ; do we support the check ?
jz short_fdos_ED_FUNCTION ; if we don't then don't ask
mov req_hdr,RH15_LEN
mov req_hdr+2,CMD_FIXED_MEDIA
call block_device_driver ; call the device driver
js short_fdos_ED_FUNCTION
and ax,RHS_BUSY ; BUSY bit set if permanent - we just
xchg ah,al ; need to get bit in the right place
shr ax,1 ; now 1 if permanent media
mov fdos_pb+6,ax ; return status removable (=0)
ioctl8_10:
ret
ioctl6: ; file input status
;------
call vfy_dhndl_ptr ; make sure this is an open handle
mov ax,es:DHNDL_WATTR[bx]
test ax,DHAT_REMOTE
jnz ioctl6_10 ; always ask networked handles
test ax,DHAT_DEV
jz ioctl6_10 ; files are always askable
jmp ioc6_dev
ioctl6_10: ; disk files/network devices
push es:DHNDL_POSLO[bx] ; save current position in file
push es:DHNDL_POSHI[bx] ; so we can read ahead
push es
push bx ; save DHNDL_ too..
push bp ; save stack frame
mov si,2[bp] ; SI -> parameter block
mov ax,1
push ax ; read 1 byte ahead
push ds ; use fdos_pb as read-ahead
lea ax,6[si] ; buffer
push ax
push ds:word ptr 2[si] ; user file number
mov ax,MS_X_READ ; READ function #, so we create
push ax ; a dummy fdos_pb
mov bx,sp ; SS:BX -> dummy fdos_pb
mov cx,offset ioctl6_20 ; CX -> return address
push cx ; Return to here
push ss ; save parameter segment
push bx ; save parameter offset
push ax ; save sub-function
mov bp,sp ; SS:BP -> working variables
call fdos_read ; make FDOS_READ do the hard word
add sp,4*WORD ; discard param's on stack
ioctl6_20:
add sp,4*WORD ; discard most of dummy fdos_pb
pop cx ; return # read
cmp bx,ED_LASTERROR ; did we succeed ?
jb ioctl6_30 ; if so we can trust # read
xor cx,cx ; else in error assume nothing
ioctl6_30:
pop bp ; recover stack frame
pop bx ; rewind DHNDL_POS to where
pop es
pop es:DHNDL_POSHI[bx] ; it was before we started
pop es:DHNDL_POSLO[bx]
mov ax,1a00h ; assume not ready
jcxz ioctl6_40
dec ax ; AL = FF, ie. ready
mov si,2[bp] ; SI -> parameter block
mov ah,ds:byte ptr 6[si] ; get character we read
ioctl6_40:
jmp device_OK
ioctl7: ; file output status
;------
call vfy_dhndl_ptr ; make sure this is an open handle
mov ax,0FFh ; assume it's networked/disk
mov dx,es:DHNDL_WATTR[bx]
test dx,DHAT_REMOTE
jnz ioctl6_40 ; networked handles are always ready
test dx,DHAT_DEV
jz ioctl6_40 ; files are always ready
jmp ioc7_dev ; devices we ask...
ioctl9: ; networked drive check
;------
call local_disk ; get disk semaphore
call get_pb2_drive ; get specified drive
call get_ldt ; ES:BX -> LDT for this drive
jc ioctl940
mov ax,es:LDT_FLAGS[bx]
test ah,LFLG_NETWRKD/256
jz ioctl910
if 1
mov ax,1000h ; return drive as remote
else
les di,es:LDT_PDT[bx] ; pick up network internal pointer
mov ax,es:4[di] ; pick up garbage
or ah,10h ; return drive as remote
endif
jmps ioctl930
ioctl910:
test ah,LFLG_PHYSICAL/256
jz ioctl940
test ah,LFLG_SUBST/256
xchg ax,dx ; save flags
mov ax,8000h ; assume it's SUBST'd
jnz ioctl920
test dh,LFLG_JOINED/256
xchg al,ah ; assume it's JOIN'd
jnz ioctl930
xor ax,ax ; clear if not
ioctl920:
push ax
call get_pb2_ddsc ; get drives DDSC_
pop ax
les si,es:DDSC_DEVHEAD[bx] ; ES:SI -> device driver
or ax,es:4[si] ; get device attributes
ioctl930:
mov fdos_pb+6,ax ; return updated status
ret
ioctl940:
jmp fdos_ED_DRIVE ; return ED_DRIVE error
ioctlA: ; networked handle check
;------
call vfy_dhndl_ptr
mov ax,es:DHNDL_WATTR[bx]
jmp device_OK ; return attributes
ioctlE:
;------
call local_disk
mov al,CMD_GET_DEVICE ; get logical device
jmps iocEFcommon ; common code for IOCTL(E)/IOCTL(F)
ioctlF:
;------
call local_disk
mov al,CMD_SET_DEVICE ; set logical device
iocEFcommon:
mov req_hdr,RH24_LEN
mov req_hdr+2,al
call get_pb2_ddsc ; get drives DDSC_
inc ax ; make drive one-relative
mov req_hdr+13,al ; set this as new drive
xor ax,ax ; assume not supported
push ds
lds si,es:DDSC_DEVHEAD[bx] ; does device driver support function ?
test ds:DH_ATTRIB[si],DA_GETSET
pop ds
jz iocF_single ; skip if not supported
call block_device_driver ; call the device driver
call fdos_error_check ; return any errors
mov al,req_hdr+1 ; get returned drive
iocF_single: ; AX = return value
mov ah,7
mov fdos_pb+6,ax ; return the drive
ret
if PASSWORD
ioctl54: ; set global password
;-------
call local_disk ; get the MX disk
push ds
lds si,dword ptr ioctlRH+14
call hash_pwd ; encrypt new default password
pop ds
mov global_password,ax
ret
endif
end

2394
IBMDOS/FUNCS.FDO Normal file

File diff suppressed because it is too large Load Diff

1574
IBMDOS/HEADER.A86 Normal file

File diff suppressed because it is too large Load Diff

541
IBMDOS/HISTORY.A86 Normal file
View File

@@ -0,0 +1,541 @@
; File : $HISTORY.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$
; ENDLOG
;
; DOSPLUS Command Line Editor Routines
;
include pcmode.equ
include i:msdos.equ
include i:char.def
include i:cmdline.equ
PCM_HISTORY CSEG
public init_history, save_history
public del_history_buffers, del_cur_history_buffer
public prev_cmd, next_cmd, match_cmd, search_cmd
public prev_word, next_word, match_word
public goto_eol
public del_bol
public deln_word
extrn next_char:near
extrn save_line:near
extrn space_out:near
extrn bs_out:near
extrn goto_bol:near
extrn del_eol:near
extrn del_line:near
extrn char_info:near
extrn put_string:near
extrn prev_w20:near
extrn deln_w10:near
init_history:
;------------
; On Entry:
; SS:BP -> history structure
; On Exit:
; SS:SP filled in with appropriate history buffer
; Preserve DX
;
push ds
push es
push ss
pop es
lea di,RL_HIST_SEG ; point at history buffer variables
mov si,offset histbuf1 ; assume root buffer
test RL_FLAGS,RLF_INROOT ; root task after all?
jnz init_history10 ; if not we need to switch
mov si,offset histbuf2 ; application buffer
init_history10:
movsw ; copy the seg
lodsw ; get overall length
sub ax,2*WORD ; last two words contain pointers
stosw ; save the working length
xchg ax,si ; SI -> saved buffer positions
mov ds,RL_HIST_SEG ; in the buffer segment
movsw ; update save and
movsw ; recall positions
pop es
pop ds
ret
save_history:
;------------
; We are exiting from READLINE - if line has been modified save the
; current line and update our pointers.
;
test dx,dx ; skip update of sav/recall pointers
jz save_history30 ; if empty line
call save_current ; save away current command line
mov di,RL_HIST_SAVE ; start with the old one
call find_current_hist ; wrap it if we need to
call find_next_null ; find end of "new" command
inc di ; onto next character
cmp di,RL_HIST_SIZE ; do we need to wrap ?
jb save_history10
xor di,di ; wrap the line
save_history10:
mov RL_HIST_SAVE,di ; update "save" pointer
test RL_FLAGS,RLF_DIRTY ; if a line has been changed we'd
jz save_history30 ; better update "recall" pointer
mov RL_HIST_RECL,di ; too
save_history30:
push ds
push es
push ss ! pop ds
lea si,RL_HIST_SAVE ; point at history buffer variables
mov es,RL_HIST_SEG
mov di,RL_HIST_SIZE
movsw ; save the "save" pointer
movsw ; and the "recall" one
pop es
pop ds
ret
save_current_if_dirty:
;---------------------
test RL_FLAGS,RLF_DIRTY ; if data is dirty (ie. user modified)
jz save_current20 ; then save it
save_current:
;------------
; Copy current buffer contents to next free location in history buffer
;
push si
push di
push dx
cmp dx,RL_HIST_SIZE ; is history buffer big enough ?
jae save_current10 ; no, skip saving this line
call find_free_hist ; Find the next bit of space
pop cx ! push cx ; CX = chars to save
jcxz save_current10 ; none, forget about it
push ds
push es
lds si,RL_BUFPTR
mov es,RL_HIST_SEG
rep movsb ; and save the data.
xor ax,ax ; Null terminate it.
stosb
pop es
pop ds
push di
call find_next_null ; Find the end of the entry we just
mov cx,di ; overwrote - if any remains zap it
pop di
cld
xor ax,ax ; Null terminate this entry
sub cx,di ; Figure out number of zeros to write
jbe save_current10
push es
mov es,RL_HIST_SEG
rep stosb ; and pad to the next entry
pop es
save_current10:
pop dx
pop di
pop si
save_current20:
ret
;
; Here is the code to deal with history buffers
;
; match_cmd Does a string search based on what the user has typed so far
; search_cmd Matches string, but doesn't change match state
; prev_cmd Retrieves the previous command from the history buffer
; next_cmd " " next " " " " "
;
match_cmd:
mov al,@hist_flg ; is matching enabled ?
and ax,RLF_MATCH
jz search_cmd ; no, always match
xor RL_FLAGS,ax ; toggle match bit
test RL_FLAGS,ax ; turning matching off ?
jz match30 ; then just exit
search_cmd:
mov RL_SAVPOS,si ; any chars to save ?
test si,si
jz prev_cmd ; blank line - just get previous
call save_current_if_dirty ; save current line if it needs saving
push si ; save current offset in line
push di
push dx ; Save index to end of current line
mov dx,si ; discard rest of line if no match
mov di,RL_HIST_RECL ; Point to the current entry
match_loop:
call find_prev_hist ; DI-> previous cmd in buffer
push di ; save this command position
mov di,RL_HIST_RECL ; get starting position
call find_current_hist ; handle any wrapping
pop si ; recover previous command
cmp di,si ; have we been all round ?
je match_error ; YES - We've looped so no match found
push ds
push si ; save this entry
mov ds,RL_HIST_SEG
mov di,RL_BUFOFF ; ES:DI -> match string
mov cx,RL_SAVPOS ; try to match CX characters
repe cmpsb
pop di ; recover this entry
pop ds
jne match_loop ; try again if we didn't match
call copy_from_hist ; if it did match copy it
match_error:
pop cx ; Get end of displayed line
pop di ; user's buffer
pop si
push si ; save current position in lines
call space_out ; Rub the displayed line out
call bs_out ; And backspace to it's start
call goto_eol ; display the line
call goto_bol ; Move cursor to begining
pop cx ; CX = end of matched portion
mov RL_SAVPOS,cx ; CX = Current position in command
jcxz match20
match10: ; Move cursor forward to current
push cx ; position
call next_char ; next_char destroys our loop count
pop cx ; so keep it
loop match10
match20:
mov cx,RL_SAVMAX ; we can't copy any more
mov RL_SAVPOS,cx
match30:
ret
prev_cmd:
; Get the previous command from the buffer
test RL_FLAGS,RLF_RECALLED ; is this the 1st recall ?
jnz prev_cmd10
push cx
push di
mov di,RL_HIST_SAVE ; get existing "save" ptr
call find_current_hist ; wrap it if we need to
mov RL_HIST_RECL,di ; and update "recall" pointer
pop di
pop cx
prev_cmd10:
call save_current_if_dirty ; save current line if it needs saving
call del_line ; then delete it
push si
push di
mov di,RL_HIST_RECL ; point to the current entry
call find_prev_hist ; DI -> previous entry
jmps found_cmd ; now go and copy it to the user buffer
next_cmd:
; Get the next command from the buffer
call save_current_if_dirty ; save current line if it needs saving
call del_line ; then delete it
push si
push di
mov di,RL_HIST_RECL ; point to the current entry
call find_next_hist ; DI -> next entry
; jmps found_cmd ; now go and copy it to the user buffer
found_cmd:
call copy_from_hist ; Copy from history to user buffer
pop di
pop si
; jmp goto_eol ; Display new line.
goto_eol: ; Move the cursor to the end of the
mov cx,dx ! sub cx,si ; displayed line
jcxz goto_e10 ; Already at the EOL
add si,RL_BUFOFF ; Get the Offset in the buffer
call put_string ; Output the sub_string
add di,cx ; Update the local variables
mov si,dx ; and return
goto_e10:
ret
; DI-> Current entry in history buffer
;
copy_from_hist:
or RL_FLAGS,RLF_RECALLED ; remember we have recalled something
and RL_FLAGS,not RLF_DIRTY ; this entry is already in buffers
mov RL_HIST_RECL,di ; update pointer for next time
call find_next_null ; how big is this entry ?
mov cx,di
mov si,RL_HIST_RECL
sub cx,si ; (CX-SI)=No of bytes to copy
cmp cx,RL_MAXLEN ; is the line bigger than our buffer ?
jb copy_from_hist1 ; if so we want to clip it
mov cx,RL_MAXLEN ; to the maximum possible value
copy_from_hist1:
mov dx,cx
push ds
mov ds,RL_HIST_SEG
mov di,RL_BUFOFF
rep movsb ; copy to line buffer
pop ds
call save_line ; save the line
mov cx,RL_SAVMAX ; we can't copy any more
mov RL_SAVPOS,cx
ret
; Some primitives for history buffer handling:
;
; find_free_hist Find the next free entry in the history buffer
; find_next_null Finds the end of the current entry
; find_prev_hist Finds the start of the previous entry
; find_next_hist Finds the start of the next entry
; find_current_hist Finds the start of current entry
;
; Make DI-> next entry of sufficient length for the current cmd buffer
; If we can't fit at the end zero the remainder of the buffer then wrap
; back to the start.
;
find_free_hist:
mov di,RL_HIST_SAVE ; Point at current last entry
push di ; Will DX bytes fit?
add di,dx
cmp di,RL_HIST_SIZE ; Did we run out of buffer?
pop di
jb find_free_hist20
xor ax,ax ; doesn't fit, so zero to end of buffer
find_free_hist10:
push es
mov es,RL_HIST_SEG
stosb ; keep on zeroing
pop es
cmp di,RL_HIST_SIZE
jb find_free_hist10
xor di,di ; wrap back to start of history buffer
find_free_hist20:
ret
; Entry DI-> entry in the history buffer
; Make DI-> next NULL in the history buffer ( end of current entry )
;
find_next_null:
mov cx,RL_HIST_SIZE
sub cx,di ; Calc no of bytes left
xor ax,ax ; Look for next terminator
push es
mov es,RL_HIST_SEG
repnz scasb
dec di ; point at the NUL
pop es
ret
; Entry DI-> entry in the history buffer
; Make DI-> previous entry in the history buffer
; Preserve CX
find_prev_hist:
call find_current_hist ; handle any wrapping
mov ax,di ; AX = entry we want previous for
find_prev_hist10:
push ax ; save current offset
push di ; save initial offset
xchg ax,di ; find next from here until
call find_next_hist ; we get back where we started
xchg ax,di ; AX = current offset
pop di ; recover initial value
pop bx ; recover previous offset
cmp ax,di ; have we wrapped yet ?
je find_prev_hist20 ; yes, BX = previous entry
ja find_prev_hist10 ; we are above target so continue
cmp bx,di ; we are below target - if previous
jae find_prev_hist10 ; was above target we are OK
cmp ax,bx ; if new below previous then we
jnb find_prev_hist10 ; have ERROR wrap, so stop
find_prev_hist20:
mov di,bx ; DI -> Previous entry
ret
find_next_hist:
call find_current_hist ; handle any wrapping
call find_next_null ; point to end of current entry
; jmp find_current_hist ; handle any wrapping
find_current_hist:
; This routine is complicated by the need to handle switchers, where
; our buffers and pointers may get out of step
push es
xor ax,ax
mov es,RL_HIST_SEG ; now work backwards to start of line
find_current_hist10:
cmp di,1 ; are we at the start of the buffer
jb find_current_hist30 ; then don't wrap
std
scasb ; is previous char a NUL ?
cld ; (it should be!)
jne find_current_hist10
inc di ; ES:DI -> 1st char of line
find_current_hist20:
mov cx,RL_HIST_SIZE
sub cx,di ; CX= Remaining no: of bytes in buffer
jbe find_current_hist30
repe scasb ; skip over zero's
jne find_current_hist40
find_current_hist30:
mov di,1 ; wrap to start of buffer
find_current_hist40:
dec di
pop es
ret
del_history_buffers:
;-------------------
; Delete contents of both history buffers
;
mov ax,histbuf1 ; Segment of 1st history buffer
mov cx,histsiz1 ; End of 1st history buffer
call zap_buffer
mov ax,histbuf2 ; Segment of 2nd history buffer
mov cx,histsiz2 ; End of 2nd history buffer
jmps zap_buffer
del_cur_history_buffer:
;----------------------
; Delete contents of the current history buffer
;
mov ax,RL_HIST_SEG ; zero the current buffer
mov cx,RL_HIST_SIZE
zap_buffer:
push es ; zero fill CX bytes at AX:0
push di
mov es,ax
xor ax,ax
mov RL_HIST_RECL,ax
mov RL_HIST_SAVE,ax
xor di,di
rep stosb ; zero fill the buffer
pop di
pop es
call del_line ; then delete current line
jmp save_line
next_word:
mov cx,dx ; Calculate the number of bytes
sub cx,si ; left to scan
jcxz next_w10 ; Skip if at the EOL
push si ; Save the current Index
mov si,di ; Scan from the current location
call match_word ; Get the next word boundary
mov cx,si
sub cx,di ; Calculate the string length
mov si,di ; to be displayed from the current
call put_string ; location and output the data
pop si
add si,cx ; Update the Index and Offset pointers
add di,cx
next_w10:
ret
;
; MATCH_WORD scans the buffer at ES:SI for word boundaries
; and returns to the calling routine whenever it detects such
; a boundary.
;
; On Entry: ES:SI Buffer Address
; CX Maximum No of bytes to Scan
;
; On Exit: ES:SI Next Word Boundary
;
match_word:
call char_info
test ah,CHAR_ALPHAN or CHAR_KANJI
loopnz match_word ; scan the rest of the current word
jcxz match_w30 ; end of word or kanji ?
push dx
match_w10:
mov dx,si
call char_info
test ah,CHAR_ALPHAN or CHAR_KANJI
loopz match_w10
jz match_w20
sub si,dx ; Correct the count in CX
add cx,si ; and return the location of the
mov si,dx ; word boundary
match_w20:
pop dx
match_w30:
ret
prev_word:
mov cx,si ! jcxz match_w30 ; Initialize the count
push dx ! push si ! push di
mov si,RL_BUFOFF ; Scan from the begining of the buffer
mov dx,si ; keeping the last match in DX
prev_w10:
call match_word ; Find the next word boundary
jcxz prev_w15 ; Stop when we get to the current offset
mov dx,si ; Save current location
jmps prev_w10 ; and repeat
prev_w15:
jmp prev_w20
del_bol: ; Delete to the begining of the line
or si,si ! jz del_bol10 ; Ignore if at the begining
or dx,dx ! jz del_bol10 ; Or the line is empty
push di ; Save the current index
call goto_bol ; Move to the start of the line
pop cx ; Restore the current offset
jmp deln_w10 ; and jump to common code
del_bol10:
ret
deln_word:
mov cx,dx ; Calculate the number of bytes
sub cx,si ; left to scan
jcxz del_bol10 ; Skip if at the EOL
push si ; Save the current Index
mov si,di ; Scan from the current location
call match_word ; Get the next word boundary
mov cx,si
pop si
jmp deln_w10
PCMODE_DATA DSEG WORD
extrn @hist_flg:byte ; To select between histbufs 1 or 2
GLOBAL_DATA dseg word
extrn histbuf1:word, histsiz1:word, histbuf2:word, histsiz2:word
end

5
IBMDOS/IBMDOS.INP Normal file
View File

@@ -0,0 +1,5 @@
ibmdos.tmp=header.obj,pcmif.obj,cio.obj,disk.obj,ioctl.obj,misc.obj,support.obj,
dosmem.obj,error.obj,process.obj,network.obj,int2f.obj,fdos.obj,cdevio.obj,fioctl.obj,
fcbs.obj,redir.obj,dirs.obj,buffers.obj,bdevio.obj,cmdline.obj,history.obj
[map, data[origin[0000]]]


154
IBMDOS/IBMDOS.MAP Normal file
View File

@@ -0,0 +1,154 @@
Map for file: IBMDOS.TMP
Segments
--------
Length Start Stop Align Comb Name Class
3830 (0000:0000-382F) PARA PUB PCM_HEADER CODE
2C03 (0000:3830-6432) BYTE PUB PCM_CODE CODE
3ADE (0000:6434-9F11) WORD PUB BDOS_CODE CODE
02CC (0000:9F12-A1DD) WORD PUB PCM_RODATA CODE
0399 (0000:A1DE-A576) BYTE PUB PCM_HISTORY CODE
01B5 (0000:A577-A72B) BYTE PUB PCM_ICODE CODE
0000 PARA PUB PCM_CODEND CODE
0000 BYTE PUB CODE CODE
03A2 (0000:0000-03A1) WORD PUB PCMODE_DATA DATA
000E (0000:03A2-03AF) WORD COM FDOS_DSEG DATA
0C50 (0000:03B0-0FFF) WORD PUB FIXED_DOS_DATA DATA
02B8 (0000:1000-12B7) WORD PUB PCMODE_CODE DATA
0014 (0000:12B8-12CB) WORD PUB GLOBAL_DATA DATA
0120 (0000:12CC-13EB) WORD PUB BDOS_DATA DATA
0000 PARA PUB PCMODE_DSIZE DATA
Groups Segments
------ --------
PCMDATA PCMODE_DATA FDOS_DSEG FIXED_DOS_DATA PCMODE_CODE
GLOBAL_DATA BDOS_DATA PCMODE_DSIZE
PCMCODE PCM_HEADER PCM_CODE BDOS_CODE PCM_RODATA
PCM_HISTORY PCM_ICODE PCM_CODEND
map for module: HEADER
382A (0000:0000-3829) PCM_HEADER
0102 (0000:A1DE-A2DF) PCM_HISTORY
01B5 (0000:A577-A72B) PCM_ICODE
03A2 (0000:0000-03A1) PCMODE_DATA
000E (0000:03A2-03AF) FDOS_DSEG
0C50 (0000:03B0-0FFF) FIXED_DOS_DATA
02B8 (0000:1000-12B7) PCMODE_CODE
0004 (0000:12CC-12CF) BDOS_DATA
map for module: PCMIF
03F6 (0000:3830-3C25) PCM_CODE
00DC (0000:9F12-9FED) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: CIO
0491 (0000:3C26-40B6) PCM_CODE
0004 (0000:9FEE-9FF1) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
0001 (0000:12B8-12B8) GLOBAL_DATA
map for module: DISK
044C (0000:40B7-4502) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
0002 (0000:12BA-12BB) GLOBAL_DATA
map for module: IOCTL
0164 (0000:4503-4666) PCM_CODE
0032 (0000:9FF2-A023) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: MISC
0687 (0000:4667-4CED) PCM_CODE
004D (0000:A024-A070) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
0002 (0000:12BC-12BD) GLOBAL_DATA
map for module: SUPPORT
00C7 (0000:4CEE-4DB4) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: DOSMEM
0260 (0000:4DB5-5014) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: ERROR
01AE (0000:5015-51C2) PCM_CODE
00B4 (0000:A072-A125) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: PROCESS
07B2 (0000:51C3-5974) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: NETWORK
0086 (0000:5975-59FA) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
map for module: INT2F
04EB (0000:59FB-5EE5) PCM_CODE
000E (0000:03A2-03AF) FDOS_DSEG
000E (0000:12BE-12CB) GLOBAL_DATA
map for module: FDOS
199A (0000:6434-7DCD) BDOS_CODE
0078 (0000:12D0-1347) BDOS_DATA
map for module: CDEVIO
02B7 (0000:7DCE-8084) BDOS_CODE
map for module: FIOCTL
0238 (0000:8085-82BC) BDOS_CODE
map for module: FCBS
0558 (0000:82BD-8814) BDOS_CODE
map for module: REDIR
06CB (0000:8815-8EDF) BDOS_CODE
map for module: DIRS
03EE (0000:8EE0-92CD) BDOS_CODE
0037 (0000:1348-137E) BDOS_DATA
map for module: BUFFERS
052C (0000:92CE-97F9) BDOS_CODE
0005 (0000:1380-1384) BDOS_DATA
map for module: BDEVIO
0717 (0000:97FA-9F10) BDOS_CODE
0065 (0000:1386-13EA) BDOS_DATA
map for module: CMDLINE
054D (0000:5EE6-6432) PCM_CODE
00B7 (0000:A126-A1DC) PCM_RODATA
000E (0000:03A2-03AF) FDOS_DSEG
map for module: HISTORY
0297 (0000:A2E0-A576) PCM_HISTORY
000E (0000:03A2-03AF) FDOS_DSEG


179
IBMDOS/IBMDOS.SYM Normal file
View File

@@ -0,0 +1,179 @@
0000 VARIABLES 0000 DATA
03A2 FDOS_DSEG
0000 VARIABLES 0000 DATA
13F0 DATA_END 12CC HASHROOT
0000 LABELS 0000 CODE
3800 CODE_START 380A OS_VERSION 3822 PATCH_VERSION
3806 PCMODE_DSEG A730 CODE_END
0000 VARIABLES 0000 DATA
0FE4 ACTIVE_CNT 056D FILE_ATTRIB 0572 REMOTE_CALL
043E SEC_PATHNAME 0EFE FDOS_STUB 0EE0 HASHMAX 057E TERM_PSP
03B6 BIOSDATE 0D1C DAYS_IN_MONTH 0588 CRITICAL_SP
0AA2 RWMODE 0F02 SHARE_STUB 0AA0 INDOS_STACK 03B8 MINUTE
0AAD UCASETBL 0EBC @PRIVATE_DATA 05CE CURRENT_FILEPOS
0584 INT21REGS_PTR 05F0 PREV_INT21REGS_OFF 0AA4 INT2F_CMD
0FE4 IDLE_DATA 0AAC SWAP_INDOS 03BE PRI_PATHNAME
05F2 PREV_INT21REGS_SEG 0ECC HMAROOT 0580 INT24_ESBP 0FEA IDLE_VEC
057C EXIT_TYPE 0620 FCB_SEARCH_BUF 0CE3 DBCS_TBL 054B NAME_BUF
0AA3 IOEXERR 0920 NORMAL_STACK 07A0 ERROR_STACK
05AA CURRENT_IFN 043E LOAD_FILE 058A CURRENT_DDSC
0FEE INT28_DELAY 0FE6 IDLE_MAX 0AA8 FILE_MODE 03B0 MUSTBE03B0
05A2 CURRENT_LDT 03BA HUNDREDTH 0FE8 IDLE_FLAGS
0FF0 INT28_RELOAD 0D12 DOS_VERSION
059E CURRENT_DHNDL 04BE SRCH_BUF 0ED6 LOCALMACHINEID
0EC4 @HIST_FLG 05F0 PREV_INT21REGS_PTR 03BE RELOC_BUF
059A CURRENT_DEVICE 0BB1 FILECHARSTBL
0B2F FILEUCASETBL 0AAA CLE_STATE 0AA1 ERR_DRV
0F3E WINDOWSHANDLECHECK 0AA6 INT2F_STACK
0584 INT21REGS_OFF 04F3 TEMP_LDT 0ED8 DMD_ADDRESS
0ECA CODESEG 0FC8 EXE_BUFFER 03BB SECOND 0586 INT21REGS_SEG
03B9 HOUR 0ED2 DMD_OWNER 0BE1 COLLATINGTBL
0374 EXE_LOADHIGH 0048 DEV_ROOT 0320 ERROR_FLAG
032E DMA_SEGMENT 0324 ERROR_CODE 0303 SHARING_FLAG
0010 FCB_LRU_COUNT 03A1 CHAR_COUNT 0351 MONTH 034A LOCUS
0334 RETCODE 01FB SAVBUF 0352 YEARSSINCE1980 0328 ERROR_DEV
0392 FCB_PATH2 0335 SYSTEM_RETCODE 0026 FUNC52_DATA
0089 DMD_UPPER_LINK 0358 INT28_FLAG 0300 COLUMN
02FF VERIFY_FLAG 0301 SWITCH_CHAR 005D SETVERPTR
0046 PHYS_DRV 034C RETRY_OFF 000E NETBIOS 0359 IOCTLRH
0357 INTERNAL_FLAG 0320 INTERNAL_DATA 0383 FCB_PATH
034E RETRY_SP 0304 NET_SET_COUNT 001A NET_RETRY 0337 BREAK_FLAG
0356 DAYOFWEEK 0327 ERROR_CLASS 0069 BOOTDRV 0040 FCB_PTR
033E MACHINE_ID 0342 LOAD_IMAGE 0372 LOAD_ENVSIZE
0322 ERROR_DRIVE 008C DMD_UPPER_ROOT 033C OWNING_PSP
0336 CURRENT_DSK 0334 USER_RETCODE 0346 LOAD_MAX
033A INT21AX 0332 BREAK_SP 0326 ERROR_ACTION 0305 NET_NAME
0370 LOAD_ENV 034B VALID_FLG 027B FDOS_BUF 002E CLK_DEVICE
0036 SECTOR_SIZE 001E BCB_ROOT 0348 LOAD_HANDLE
033A SWAP_ALWAYS 0323 ERROR_LOCUS 0032 CON_DEVICE
000F NAME_NUM 0302 MEM_STRATEGY 0344 LOAD_TOP 0340 LOAD_PSP
007C DEBLOCK_SEG 0026 DDSC_PTR 0354 DAYSSINCE1980
0330 CURRENT_PSP 002A FILE_PTR 001C NET_DELAY 0321 INDOS_FLAG
032C DMA_OFFSET 0024 DMD_ROOT 0350 DAYOFMONTH 003C LDT_PTR 02FE CIO_STATE
005A JOIN_DRV 0375 FCB_PB 0048 NUL_DEVICE 0047 LAST_DRV 1010 EXEC_STUB
1008 LOCK_TABLES 113E HISTBUF1 1144 HISTBUF2
1129 CRITICALSECTIONENABLE 112A SWSTARTUPINFO
10E5 INT2FBIOSHANDLER 12A8 INTL_XLAT 1192 XLAT_XLAT 1000 MUSTBE1000
1232 COUNTRY_FILENAME 1296 DEFAULT_COUNTRY
1004 UNLOCK_BIOS 1000 ENDOFINSTANCEDATA 1294 CUR_CP
1140 HISTSIZ1 1146 HISTSIZ2 10E9 INT2FNEXT 1102 INVALID_STUB
1014 FUNC4B05_STUB 100C UNLOCK_TABLES
1292 COUNTRY_DATA 1000 LOCK_BIOS 1292 CUR_COUNTRY
11A0 NOYESCHARS
0000 NUMBERS
0D90 LAST_KEY_EXT 001C INFO1_LEN 0082 INFO2_LEN 0082 INFO4_LEN
0018 INFO5_LEN 0102 INFO6_LEN 0012 INFO7_LEN 0008 RELOC_CNT
0000 LABELS 0000 CODE
3830 CALL5_ENTRY 3B29 DO_INT24 3A65 INT25_ENTRY
3A61 INT26_ENTRY 3B18 INT27_ENTRY
3BFD INVALID_FUNCTION 3C03 RELOAD_REGISTERS 3987 INACTIVE
39B3 DOS_ENTRY 3A36 INT21_FUNC 3BE9 GET_DSEG 3936 INT21_EXIT 39A7 ACTIVE
384F INT20_ENTRY 3851 INT21_ENTRY 9F12 PCMODE_FT
0000 NUMBERS
006D PCMODE_FTL
0000 LABELS 0000 CODE
3C26 FUNC01 3C2A FUNC02 3C37 FUNC03 3C3D FUNC04 3C42 FUNC05
3C6C FUNC06 3C7F FUNC07 3C87 FUNC08 3CA3 FUNC09
3F10 DEVICE_WRITE 3CB7 FUNC0A 3CC0 FUNC0B
3E00 COOKED_WRITE 3CCE FUNC0C 3CFD BREAK_CHECK
3DD0 RAW_READ 3F0C DEVICE_READ 3DC1 CMDLINE_READ
40DF VALID_DRIVE 4104 FUNC10 4104 FUNC11 4104 FUNC21
4104 FUNC12 4236 FUNC40 4104 FUNC22 4104 FUNC13 41DA FUNC41
4167 FUNC32 4104 FUNC23 4104 FUNC14 43EA FUNC60 426B FUNC42
4104 FUNC24 4104 FUNC15 4295 FUNC43 4104 FUNC16 42FE FUNC53
4104 FUNC17 42BD FUNC45 4174 FUNC36 4104 FUNC27 42B2 FUNC46
412C FUNC19 4104 FUNC28 4317 FUNC56 42EB FUNC47 4340 FUNC57
41E4 FUNC39 4409 FUNC67 4482 FUNC68 4130 FUNC1A 4139 FUNC1B
41E4 FUNC3A 4139 FUNC1C 40B7 FUNC0D 41E4 FUNC3B 40CD FUNC0E
4373 FUNC5A 41F6 FUNC3C 4104 FUNC0F 420E FUNC3D 41F6 FUNC5B
4167 FUNC1F 42CD FUNC5C 42BD FUNC3E 41C9 FUNC2F 448E FUNC6C
4236 FUNC3F 41E4 FUNC4E 41E4 FUNC4F
451B FUNC44 4503 FUNC69
47B4 FUNC30 47C9 FUNC33 4800 FUNC25 4678 FUNC52 4667 FUNC34
4816 FUNC35 483C FUNC63 4838 FUNC54 4797 FUNC37 4B89 FUNC65
4AA8 FUNC38 4873 FUNC29 4C77 FUNC66 495A FUNC2A 4980 FUNC2B
496D FUNC2C 4999 FUNC2D 4832 FUNC2E 467D FUNC5D
466A RETURN_DSBX_AS_ESBX 49BC READTIMEANDDATE
4D59 FCBFDOS_CRIT 4D3D RETURN_AX_CLC
4D01 SET_RETRY_RF 4CEE STRLEN 4D8E RETURN_BX 4D9B RETURN_CX
4D6F FDOS_NOCRIT 4DA8 RETURN_DX 4D03 SET_RETRY 4D82 RELOAD_ES
4D33 FDOS_AX_CRIT 4D28 FDOS_CRIT
4EED SET_OWNER 4DB5 FUNC48 4E4F FUNC58 4DE2 FUNC49 4EB7 FREE_ALL
4E1E FUNC4A 5004 CHECK_DMD_ID
5062 CHAR_ERROR 504A ERROR_RET 5015 FUNC59 503D ERROR_EXIT
505A FCBERROR_EXIT
54D3 FUNC00 52B0 FUNC31 52A3 FUNC50 52A8 FUNC51 52A8 FUNC62
51EF FUNC26 51C3 FUNC55 5928 CHECK_EXE 52DE FUNC4B 54F1 FUNC4C
55A4 FUNC4D 5936 IMAGE_SIZE
59E2 FUNC5F_COMMON 5975 FUNC5E 59B1 FUNC5F
5A52 INT2F_ENTRY
0000 VARIABLES 0000 DATA
132C GLOBAL_PASSWORD 12D6 FDOS_HDS_ROOT 12E6 INFO_FCB
131C FDOS_PB 12D4 FDOS_HDS_BLK 12D8 FDOS_HDS_DRV
132A FDOS_RET 1316 FDOS_INFO
0000 LABELS 0000 CODE
7DB4 SHARE_DELAY 6E07 FDOS_MKDDSC
6B82 FDOS_GETDPB 682B FDOS_CLOSE 6FB5 FDOS_MOVE
6D61 FILE_UPDATE 6552 FDOS_MKDIR 7CD9 READTOD
7B7F LDS_SI_DMAPTR 65B4 FDOS_RMDIR 6CA6 FDOS_NEXT
6EFD FDOS_EXPAND 6BEA FDOS_SELECT
7A9F DISCARD_FILES 7A70 RELEASE_HANDLE 6DB9 FDOS_MKNEW
6BB8 FDOS_FLUSH 7108 FDOS_DATTIM 71B2 DBCS_LEAD
79EE VFY_DHNDL_PTR 6C7D FDOS_FIRST 6D53 FDOS_COMMIT
6B34 FDOS_CURDIR 7C77 MV_JOIN_ROOT 6514 FDOS_ERROR
68B5 FDOS_WRITE 6A25 FDOS_ED_FUNCTION 74F0 GET_PB2_DRIVE
68EE FDOS_UNLINK 7B8B COPY_ASCIIZ 6434 FDOS_ENTRY
7607 UNPARSE 79AB VERIFY_HANDLE 7B7A CURRENT_DSK2AL
6E18 BPB2DDSC 654D FDOS_ED_ACCESS 7B60 GET_XFTPTR 685E FDOS_READ
77B8 CHECK_DELIM 7AF0 FIND_DHNDL 6E9C FDOS_DDIO 78C6 FIND_XFN
7B92 CHECK_JOIN 720B REBUILD_LDT_ROOT 653E FDOS_ED_DRIVE
7D6B HASH_PWD 77FD TOUPPER 6C1D FDOS_EXEC 652D FDOS_RESTART
78DF ALLOC_DHNDL 6DDD FDOS_LOCK 6AEA FDOS_DUP 65FA FDOS_CHDIR
64BD LOCAL_DISK 78ED ALLOC_XFN 69BB FDOS_CHMOD 7B85 LES_DI_DMAPTR
77F5 CHECK_SLASH 75F7 HDSBLK 7AC7 IFN2DHNDL 6AF9 FDOS_FDUP
673D FDOS_CREAT 65DF UPDATE_DIR_FAT 77EC CHECK_DSLASH
7791 PARSE_ONE 7133 TIMESTAMP_DHNDL 67C2 FDOS_OPEN 6960 FDOS_LSEEK
8019 FIRST_DEV 7E81 WRITE_DEV 804C IOC6_DEV 8050 IOC7_DEV 7EB6 READ_DEV
7E67 DUP_DEV 7DCE OPEN_DEV 7E75 CLOSE_DEV
80A9 FDOS_IOCTL
82BD FDOS_EXIT 8301 FDOS_FCB
8957 ISLOCAL 8815 REDIR_DHNDL_OFFER 8D5B REDIR_BUILD_PATH
8891 REDIR_DRV_OFFER 8845 REDIR_MOVE_OFFER 8904 GET_LDT
883F REDIR_ASCIIZ_DEV_OFFER 887C REDIR_ASCIIZ_FILE_OFFER
8877 REDIR_ASCIIZ_OFFER 8919 GET_LDT_RAW
88A7 REDIR_SNEXT_OFFER
0000 VARIABLES 0000 DATA
137D CHDBLK 1379 DCNT 1377 DIRP 137B FINDDFCB_MASK
1357 DIRBUF
0000 LABELS 0000 CODE
8EE0 FILL_DIRBUF 928A ALLOCDIR 9259 HSHDSCRD
8F9B DISCARD_DIRBUF 8F3A FLUSH_DIRBUF 9005 SETENDDIR
917E FIXUP_HASHING 9022 FINDDFCB 901F FINDDFCBF 915A MKHSH
9025 GETDIR
960B UPDATE_DIR 92CE UPDATE_DDSC_FREE 946C FIXFAT
9414 ALLOCATE_CLUSTER 936C GETNBLK 9334 BUFFERS_CHECK
9595 LOCATE_BUFFER 9523 FATPTR 946A CHANGE_FAT_ENTRY
96D3 ZEROBLK 961B FLUSH_DRIVE 92FB DISCARD_DIRTY
93A7 ALLOC_CLUSTER 93AA ALLOC_CHAIN 9351 DELFAT
92FF DISCARD_ALL 9303 DISCARD_DIR 9382 GETBLK
9612 UPDATE_DAT 9616 UPDATE_FAT
0000 VARIABLES 0000 DATA
13A5 DOSFAT 1395 LASTCL 1388 LOGICAL_DRV 139F CLSIZE
13B4 FDRWFLG 139D NFATRECS 13B0 CUR_DMA_SEG 13AE CUR_DMA
138A PSECSIZ 1393 DATADD 138E FATADD 13CD REQ_HDR 13A1 SECPERCLU
1399 DIRADD 1389 PHYSICAL_DRV 13A3 DIRPERCLU 1391 DIRINROOT
1386 HDSADDR 13A8 PBLOCK 13A7 ADRIVE 13AC MULT_SEC 139B NFATS
0000 LABELS 0000 CODE
9EF3 CLUS2SEC 9CE1 SELECT_PHYSICAL_DRV 9E9E WRITE_BLOCK
9819 FDOSRW 9D06 SELECT_ADRIVE 9C59 DEVICE_DRIVER
97FA GET_DDSC 9C85 SELECT_LOGICAL_DRV 9C38 BLOCK_DEVICE_DRIVER
9EB2 READ_BLOCK 9E79 MARK_LDT_UNSURE 9BF9 DDIOIF 9BD4 BLOCKIF
6389 SPACE_OUT 6136 DEL_EOL 6116 PREV_W20 619F DEL_LINE 5EE6 READ_LINE
6339 CHAR_INFO 638D BS_OUT 6399 PUT_STRING 60C9 GOTO_BOL 62B4 SAVE_LINE
615E DELN_W10 60DD NEXT_CHAR A127 EDIT_SIZE
A303 SAVE_HISTORY A2E0 INIT_HISTORY A51D MATCH_WORD
A4E4 DEL_CUR_HISTORY_BUFFER A554 DEL_BOL A4D1 DEL_HISTORY_BUFFERS
A53C PREV_WORD A502 NEXT_WORD A378 MATCH_CMD A388 SEARCH_CMD A3E1 PREV_CMD
A405 NEXT_CMD A418 GOTO_EOL A565 DELN_WORD


1245
IBMDOS/INT2F.A86 Normal file

File diff suppressed because it is too large Load Diff

468
IBMDOS/IOCTL.A86 Normal file
View File

@@ -0,0 +1,468 @@
; File : $IOCTL.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: $
; IOCTL.A86 1.17 94/11/28 15:42:19
; f440B now does not modify net_retry if DX=0
; IOCTL.A86 1.16 93/11/08 19:15:18
; SETVER to subversion 0xFF disabled int 21/4452
; IOCTL.A86 1.15 93/07/26 18:16:16
; add some code which disables drdos check if app is SETVER'd
; leave said code disabled unless required
; IOCTL.A86 1.14 93/07/22 19:29:54
; get/set serial number now the correct way round
; IOCTL.A86 1.11 93/06/17 22:14:34
; support for ioctl 10/11 query ioctl support
; ENDLOG
;
; 7 Nov 87 Removal of development flags
; 17 Dec 87 Return "Single device Supported" for IOCTL sub-functions
; 0Eh and 0Fh.
; 24 Feb 88 Return 1060h from IOCTL sub-function 51h under DOS PLUS
; instead of the Concurrent DOS OS version.
; 24 Feb 88 Correct Generic IOCTL function and prevent the generation
; of critical errors.
; 24 May 88 sub-function 53h returns the address of the INT24 handler
; for the command processor.
; 01 Jun 88 Add sub-function 4454 to support setting the default password
; 03 Nov 88 Add History Buffer Sub-Command f4456 for DOSPLUS
; 02 Feb 89 Add code page switching sub-function 0Ch
; 19 Feb 89 Support Sub-Command f4457 to control SHARE
; 15 Mar 89 Do not generate critical errors from 4402 and 4403.
; 18 Apr 89 Sub-function 53 only suported for Concurrect DOS
; 19 Apr 89 Don't clobber error code on 440D and 440E (pc-cache)
; 31 May 89 New function f4458 to return pointer to private data.
; 31 May 89 f440B sets up DOS internal data
; 15 Jun 89 Don't throw away inheritance bit when masking Share Mode Flags
; 11 Oct 89 f4407/07 set AX on return, not just AL
; 26 Oct 89 for a few bytes more...
; 18 Jan 90 HILOAD interface added onto f4457
; 25 Jan 90 INT21/4458 returns a pointer to IDLE_DATA in ES:AX
; 13 Jan 90 private_data exported in CDOS for DEBUG systems
; 27 Feb 90 4459 provides Int21 function that does Int224 calls
; 7 Mar 90 Convert to register preserved function calls
; 14 Mar 90 No critical error generated in IOCTL functions
; 3 May 90 stop forcing ioctl 4403/3/4/5 errors to ED_ACCESS
; 4 Jun 90 445A provides user group support on CDOS
; 3 jun 92 Add 4456/2+3 to examine history state, toggle history enable
; 30 jul 92 HILOAD now uses official memory strategy calls
;
include pcmode.equ
include fdos.def
include i:msdos.equ
include i:mserror.equ
include i:cmdline.equ
include i:driver.equ
include i:reqhdr.equ
include i:psp.def
PCM_CODE CSEG BYTE
extrn os_version:word
extrn patch_version:word
extrn invalid_function:near
extrn error_ret:near
extrn fdos_nocrit:near
extrn fdos_crit:near
extrn fdos_ax_crit:near
extrn return_AX_CLC:near
extrn return_DX:near
extrn return_DSBX_as_ESBX:near
extrn set_retry_RF:near
extrn patch_version:word
; *****************************
; *** DOS Function 69 ***
; *** set/get serial num ***
; *****************************
;
Public func69
func69:
call set_retry_RF ; Prepare for an FDOS function
mov FD_FUNC,MS_X_IOCTL
mov cx,866h ; assume a get serial num
cmp al,1 ; check for 0/1
mov al,0Dh ; ready for ioctl 0D
jb func44common ; go ahead with get serial num
mov cl,46h ; maybe it's a set
je func44common ; go ahead with set serial num
; jmp invalid_function ; ah well, it's an invalid one
jmps f44_30
; *****************************
; *** DOS Function 44 ***
; *** I/O Control ***
; *****************************
;
Public func44
func44:
call set_retry_RF ; Prepare for an FDOS function
func44common:
mov FD_IOCTLFUNC,ax ; save subfunction for FDOS
mov ioctlRH,22 ; assume RH will be wanted
mov ioctlRH+13,0 ; init len and media byte
mov word ptr ioctlRH+14,dx ; point at buffer segment
mov word ptr ioctlRH+16,es
mov word ptr ioctlRH+18,cx ; the Byte Count
cmp ax,dosf44_ftl ; Check for a valid PC-DOS
jae f44_20 ; sub-functions
f44_10:
xchg ax,si
shl si,1
mov si,func44_ft[si]
xchg ax,si
jmp ax
f44_20:
sub al,52h-dosf44_ftl ; adjust to our base of 52h
jc f44_30 ; bail out if too low
cmp ax,ourf44_ftl ; is it too high ?
jb f44_10
f44_30:
jmp invalid_function
; ***********************************************
; *** Sub Function 00 - Get Device Info ***
; ***********************************************
f4400:
call fdos_handle ; execute the function
mov dx,ax ; return in DX too
return_AX_and_DX:
call return_DX ; return to caller in DX
jmp return_AX_CLC ; return AX too
; ***********************************************
; *** Sub Function 01 - Set Device Info ***
; *** Sub Function 06 - Get Input Status ***
; *** Sub Function 07 - Get Output Status ***
; ***********************************************
f4401:
f4406:
f4407:
call fdos_handle ; Execute the Function
jmp return_AX_CLC
; ************************************************
; *** Sub Function 04 - Read Blk Device ***
; *** Sub Function 05 - Write Blk Device ***
; *** Sub Function 11 - Query ioctl Blk ***
; ************************************************
;
f4404:
f4405:
f4411:
xor bh,bh ; BX = drive number
; ************************************************
; *** Sub Function 02 - Read Character Dev ***
; *** Sub Function 03 - Write Character Dev ***
; *** Sub Function 10 - Query ioctl Char ***
; ************************************************
;
f4402:
f4403:
f4410:
mov dx,DA_QUERY ; assume we will query support
mov al,CMD_QUERY_IOCTL ; and be ready to go
mov cx,FD_IOCTLFUNC ; re-read the function number
test cl,10h ; is it function 10 of 11?
jnz f44ioctl ; yes, we are ready
mov dx,DA_IOCTL ; no, we actually want to do it
mov al,CMD_INPUT_IOCTL ; even functions are input
test cl,1 ; test for input functions
jz f44ioctl
mov al,CMD_OUTPUT_IOCTL ; odd functions are output
f44ioctl:
mov FD_IOCTLSTAT,dx ; this device driver support is required
mov ioctlRH+2,al ; this is the function
call fdos_handle ; Execute the Function
mov ax,word ptr ioctlRH+18 ; return # xfered
jmp return_AX_CLC
; *****************************
; *** Sub Function 09 ***
; *** Networked Media ***
; *****************************
;
f4409:
call fdos_drive ; Execute the Function
mov dx,ax ; Get the Return Information
mov ax,0300h
jmps return_AX_and_DX
; *****************************
; *** Sub Function 0A ***
; *** Networked Handle ***
; *****************************
;
f440A:
call fdos_handle ; Execute the Function
mov dx,ax ; Get the Return Information
jmp return_DX ; and return in DX
; *****************************
; *** Sub Function 0B ***
; *** Update Share Retry ***
; *****************************
;
; dos_CX [1] Number of times to execute the delay loop
; which consists of xor cx,cx ! loop $
;
; dos_DX [3] Number of times to retry
;
;
f440B:
mov net_delay,cx
test dx,dx
jz f440B_10
mov net_retry,dx
f440b_10:
ret
; *****************************
; *** Sub Function 0D ***
; *** Device Driver Req ***
; *****************************
;
f440D:
xor bh,bh
; jmp f440C
; *****************************
; *** Sub Function 0C ***
; *** Code Page Switching ***
; *****************************
;
f440C:
mov FD_IOCTLSTAT,DA_GETSET ; device driver support required
mov FD_HANDLE,bx ; Save the Handle Number
mov ioctlRH,23 ; different RH length
mov ioctlRH+2,CMD_GENERIC_IOCTL
xchg cl,ch ; swap minor/major functions
mov word ptr ioctlRH+13,cx ; and store in request header
mov word ptr ioctlRH+15,si
mov word ptr ioctlRH+17,di
mov word ptr ioctlRH+19,dx ; point at buffer segment
mov word ptr ioctlRH+21,es
call fdos_ax_crit ; Execute the Function and
jc fdos_error ; return all error codes
ret
; ***********************************************
; *** Sub Function 08 - Removable Media ***
; *** Sub Function 0E - Get Logical Drive ***
; *** Sub Function 0F - Set Logical Drive ***
; ***********************************************
;
f4408:
f440E:
f440F:
call fdos_drive ; Execute the Function
jmp return_AX_CLC ; return result in AX
fdos_drive:
;----------
xor bh,bh ; BX = the drive number
fdos_handle:
;----------
mov FD_HANDLE,bx
call fdos_crit ; then execute the FDOS
jnc fdos_OK ; exit on Error
add sp,WORD ; discard near return address
fdos_error:
jmp error_ret ; and return the error
fdos_OK:
mov ax,FD_IOCTLSTAT ; get the return information
ret
eject
; *****************************
; *** CCP/M Extension ***
; *** Sub Function 52 ***
; *** Return CCP/M Version ***
; *****************************
;
f4452:
if DOS5
mov es,current_psp ; version is kept in the PSP
cmp PSP_VERSION,0FF00h ; sub-version of 255 ?
jae f4452_10 ; then say we ain't DRDOS
endif
mov ax,cs:os_version ; Get OS ver number
mov dx,cs:patch_version
call return_DX ; return in DX
jmp return_AX_CLC ; return in AX
if DOS5
f4452_10:
jmp invalid_function
endif
if PASSWORD
; *****************************
; *** CCP/M Extension ***
; *** Sub Function 54 ***
; *** Set Default PASSWORD ***
; *****************************
;
f4454:
mov FD_IOCTLFUNC,0Bh ; save subfunction for FDOS
jmp fdos_nocrit ; Execute the Function
endif
; *****************************
; *** CCP/M Extension ***
; *** Sub Function 56 ***
; *** History Buffer Cntrl ***
; *****************************
;
; This function changes the default history buffer used for func0A:
;
; On Entry:
; DL = 0 -> Standard Process Buffer
; DL = 1 -> Command.com history Buffer
; DL = 2 -> Toggle history enable/disable
; DL = 3 -> Get current state of history buffers
; DL = 4 -> Toggle insert mode
;
; On Exit:
; AL = previous history state (Bit 0 set if history on)
; Bit 0 -> set if history enabled
; Bit 1 -> set if insert enabled
; Bit 7 -> set if command history buffer
;
f4456:
mov ax,cle_state ; Get the current History Status
cmp dl,2 ; are we disabling/enabling ?
jb f4456_10 ; below, switch buffers
je f4456_05 ; yes, try and do it
cmp dl,4 ; toggle insert state ?
jne f4456_20 ; no, return existing state
xor al,RLF_INS ; toggle insert state
jmps f4456_20 ; set and return prev state
f4456_05:
mov cl,RLF_ENHANCED ; we are interested in enhancements
test @hist_flg,cl ; only if history possible
jz f4456_20 ; just return existing state
xor al,cl ; invert current setting
; and fall thru' to enable/disable
; standard buffer (never called
; by COMMAND...)
f4456_10:
or al,RLF_INROOT ; assume we are in the root
if IDLE_DETECT
or idle_flags,IDLE_COMMAND
endif
test dl,1 ; Get new state and mask bit
jnz f4456_20
and al,not RLF_INROOT ; we are in application buffer
if IDLE_DETECT
and idle_flags,not IDLE_COMMAND
endif
f4456_20:
xchg ax,cle_state ; set state, returning old state
ret
; *****************************
; *** CCP/M Extension ***
; *** Sub Function 58 ***
; *** Private Data Func ***
; *****************************
;
; On Exit ES:BX points to our DRDOS private data.
; ES:AX points to the IDLE Data Area
f4458:
mov bx,offset @private_data
call return_DSBX_as_ESBX ; return ES:BX pointing to private data
mov ax,offset idle_data
jmp return_AX_CLC
PCM_RODATA CSEG WORD
;
; PCDOS Sub-Functions Only
;
func44_ft dw f4400
dw f4401
dw f4402
dw f4403
dw f4404
dw f4405
dw f4406
dw f4407
dw f4408
dw f4409
dw f440A
dw f440B
dw f440C
dw f440D
dw f440E
dw f440F
dw f4410
dw f4411
dosf44_ftl equ (offset $ - offset func44_ft)/2
;
; CCP/M Sub-Functions Only
;
dw f4452 ; 4452 OS version no
dw invalid_function ; 4453 Invalid Function
if PASSWORD
dw f4454 ; 4454 set default password
else
dw invalid_function ; 4454 was set default password
endif
dw invalid_function ; 4455 Invalid Function
dw f4456 ; 4456 history buffer support
dw invalid_function ; 4457 was share enable/disable
dw f4458 ; 4458 pointer to private data
ourf44_ftl equ (offset $ - offset func44_ft)/2
PCMODE_DATA DSEG WORD
extrn net_delay:word, net_retry:word
extrn @hist_flg:byte
extrn @private_data:byte
if IDLE_DETECT
extrn idle_data:word
extrn idle_flags:word
endif
extrn cle_state:word
extrn ioctlRH:byte
extrn dos_version:word
extrn current_psp:word
end

109
IBMDOS/MAKE.BAT Normal file
View File

@@ -0,0 +1,109 @@
@ECHO off
SET TOOLS=C:\TOOLS
REM
REM YOU SHOULD NOT HAVE TO CHANGE ANYTHING BELOW THIS LINE.
REM
REM Define local Caldera tools
SET LOCTOOLS=..\LTOOLS
IF NOT EXIST BIN\*.* MD BIN
REM ******************************************
REM Build the .A86 files next, get the obj's
REM ******************************************
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\buffers.a86 .\bin\buffers.obj $szpz /DDELWATCH /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\dirs.a86 .\bin\dirs.obj $szpz /DDELWATCH
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\fdos.a86 .\bin\fdos.obj $szpz /DDELWATCH /DKANJI /DDOS5 /DPASSWORD /DJOIN /DUNDELETE
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\fcbs.a86 .\bin\fcbs.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\bdevio.a86 .\bin\bdevio.obj $szpz /DDELWATCH /DDOS5 /DJOIN
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\cdevio.a86 .\bin\cdevio.obj $szpz /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\fioctl.a86 .\bin\fioctl.obj $szpz /DPASSWORD /DJOIN /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\redir.a86 .\bin\redir.obj $szpz /DKANJI /DDOS5 /DJOIN
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\header.a86 .\bin\header.obj $szpz /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\pcmif.a86 .\bin\pcmif.obj $szpz /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\cio.a86 .\bin\cio.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\disk.a86 .\bin\disk.obj $szpz /DDELWATCH
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\ioctl.a86 .\bin\ioctl.obj $szpz /DPASSWORD /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\misc.a86 .\bin\misc.obj $szpz /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\support.a86 .\bin\support.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\dosmem.a86 .\bin\dosmem.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\error.a86 .\bin\error.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\process.a86 .\bin\process.obj $szpz /DDOS5
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\network.a86 .\bin\network.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\int2f.a86 .\bin\int2f.obj $szpz /DDOS5 /DDELWATCH
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\history.a86 .\bin\history.obj
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\rasm_sh %LOCTOOLS%\rasm86.exe . .\cmdline.a86 .\bin\cmdline.obj
IF ERRORLEVEL 1 GOTO FAILED
copy ibmdos.inp .\BIN
CD .\BIN
..\%LOCTOOLS%\linkcmd.exe ibmdos[i]
IF ERRORLEVEL 1 GOTO FAILED
CD ..
%LOCTOOLS%\bin2asc -ob -s128 .\BIN\ibmdos.tmp .\BIN\ibmdos.com
IF ERRORLEVEL 1 GOTO FAILED
%LOCTOOLS%\compbdos .\BIN\ibmdos.com
IF ERRORLEVEL 1 GOTO FAILED
goto exit
:failed
ECHO Error in Build!
goto exit
:badtool
ECHO Can't find that tool!
:exit
REM *********
REM CLEANUP
REM *********
SET TOOLS=
SET LTOOLS=


1829
IBMDOS/MISC.A86 Normal file

File diff suppressed because it is too large Load Diff

328
IBMDOS/MODFUNC.DEF Normal file
View File

@@ -0,0 +1,328 @@
; File : $MODFUNC.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
; 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
;
;****************************************************************;
;* *;
;* OS386 Inter-Module Function Definitions *;
;* *;
;****************************************************************;
OS386_FUNC equ 2780h ; AX value
OS386_INT equ 02Fh ; interrupt number
; Module definitions
USER equ 0
SUP equ 1
RTM equ 2
MEM equ 3
DOM equ 4
VM equ 5
DPMI equ 6
DPMS equ 7
MIN_MODULE equ 5
MAX_MODULE equ 15
; Internal SUP functions
F_NotImp equ SUP + 0100h * 00 ; Function Not Implemented
F_Illegal equ SUP + 0100h * 01 ; Illegal Function
F_ModuleReg equ SUP + 0100h * 02 ; Register Module
F_SysDatAlloc equ SUP + 0100h * 03 ; allocate SYSDAT memory
F_SysDat equ SUP + 0100h * 04 ; return SYSDAT selector
F_MoveReal equ SUP + 0100h * 05 ; move real mode memory to protected mode
F_Reboot equ SUP + 0100h * 06
F_Debug equ SUP + 0100h * 07
F_ForeCheck equ SUP + 0100h * 08 ; Check for foreground
F_RegisterVxD equ SUP + 0100h * 09 ; Register VxD with system
F_UnloadVxD equ SUP + 0100h * 10 ; Unload VxD hook
F_PostInit equ SUP + 0100h * 11 ; end of initialisation phase
F_AllocWindow equ SUP + 0100h * 12 ; allocate a 4K mapping window
F_RegisterBoot equ SUP + 0100h * 13 ; register reboot addresses
F_EnquireBoot equ SUP + 0100h * 14 ; enquire if reboot active
F_GetDebugLevel equ SUP + 0100h * 15 ; get debug level
F_SetDebugLevel equ SUP + 0100h * 16 ; set debug level
F_Version equ SUP + 0100h * 17 ; version check
F_V86BPInstall equ SUP + 0100h * 18 ; install v86 break point
F_V86BPRemove equ SUP + 0100h * 19 ; remove v86 break point
F_V86BPOffer equ SUP + 0100h * 20 ; offer int 3 as v86 break point
F_LoaderCleanup equ SUP + 0100h * 21 ; offer the chance to cleanup
F_RegisterVxDWindow equ SUP + 0100h * 22 ; Register VxD mapping window
F_RegisterPNW equ SUP + 0100h * 23 ; Register PNW info
; Internal RTM functions
F_PDCount equ RTM + 0100h * 01
F_FlgWait equ RTM + 0100h * 02
F_FlgSet equ RTM + 0100h * 03
F_QMake equ RTM + 0100h * 04
F_QOpen equ RTM + 0100h * 05
F_QDelete equ RTM + 0100h * 06
F_QRead equ RTM + 0100h * 07
F_CQread equ RTM + 0100h * 08
F_QWrite equ RTM + 0100h * 09
F_CQWrite equ RTM + 0100h * 10
F_Delay equ RTM + 0100h * 11
F_Dispatch equ RTM + 0100h * 12
F_PTerm equ RTM + 0100h * 13
F_PCreat equ RTM + 0100h * 14
F_SetPrior equ RTM + 0100h * 15
F_PDAddr equ RTM + 0100h * 16
F_PAbort equ RTM + 0100h * 17
F_Sleep equ RTM + 0100h * 18
F_Wakeup equ RTM + 0100h * 19
F_FindPDName equ RTM + 0100h * 20
F_SetFlags equ RTM + 0100h * 21
F_EndOfInterrupt equ RTM + 0100h * 22 ; Register PIC end of interrupt
F_NoAbort equ RTM + 0100h * 23
F_OkAbort equ RTM + 0100h * 24
F_FlagStatus equ RTM + 0100h * 25
F_QRdMX equ RTM + 0100h * 26
F_QWrMX equ RTM + 0100h * 27
F_FlgAlloc equ RTM + 0100h * 28
F_FlgFree equ RTM + 0100h * 29
F_NumFlags equ RTM + 0100h * 30
F_NDQRead equ RTM + 0100h * 31
F_FlgWWTO equ RTM + 0100h * 32
F_UdaAlloc equ RTM + 0100h * 33
F_UdaFree equ RTM + 0100h * 34
F_PFreeze equ RTM + 0100h * 35
F_PThaw equ RTM + 0100h * 36
F_CritEnter equ RTM + 0100h * 37
F_CritExit equ RTM + 0100h * 38
F_PCreate equ RTM + 0100h * 39
F_PDList equ RTM + 0100h * 40
F_PDToName equ RTM + 0100h * 41
F_PDToStatus equ RTM + 0100h * 42
F_PDToDomain equ RTM + 0100h * 43
F_GetPrior equ RTM + 0100h * 44
F_QDList equ RTM + 0100h * 45
F_QDToName equ RTM + 0100h * 46
F_QDToMsgLen equ RTM + 0100h * 47
F_QDToMaxMsgs equ RTM + 0100h * 48
F_QDToNqPD equ RTM + 0100h * 49
F_QDToDqPD equ RTM + 0100h * 50
F_QDToNumMsgs equ RTM + 0100h * 51
F_QDToFlags equ RTM + 0100h * 52
F_NameToQD equ RTM + 0100h * 53
F_NameToPD equ RTM + 0100h * 54
F_MutexAlloc equ RTM + 0100h * 55
F_MutexFree equ RTM + 0100h * 56
F_MutexEnter equ RTM + 0100h * 57
F_MutexCEnter equ RTM + 0100h * 58
F_MutexExit equ RTM + 0100h * 59
F_Slice equ RTM + 0100h * 60
F_TickLength equ RTM + 0100h * 61
F_ProcessID equ RTM + 0100h * 62
F_QClose equ RTM + 0100h * 63
F_QDispose equ RTM + 0100h * 64
F_PDToFlags equ RTM + 0100h * 65
F_PDToDParam equ RTM + 0100h * 66
F_ReleaseMX equ RTM + 0100h * 67
F_SimulateInt equ RTM + 0100h * 68
F_SetQFlags equ RTM + 0100h * 69
F_TickRate equ RTM + 0100h * 70
; Internal MEMORY functions
F_PdirGet equ MEM + 0100h * 01
F_PdirSet equ MEM + 0100h * 02
F_PageAlloc equ MEM + 0100h * 03
F_RealAllocG equ MEM + 0100h * 04
F_RealAllocI equ MEM + 0100h * 05
F_PtblRead equ MEM + 0100h * 06
F_PtblWrite equ MEM + 0100h * 07
F_PageGet equ MEM + 0100h * 08
F_PageSet equ MEM + 0100h * 09
F_PagesAlloc equ MEM + 0100h * 10
F_PageFree equ MEM + 0100h * 11
F_MemAlloc equ MEM + 0100h * 12
F_MemFree equ MEM + 0100h * 13
F_MemSize equ MEM + 0100h * 14
F_MemResize equ MEM + 0100h * 15
F_DescAlloc equ MEM + 0100h * 16
F_DescFree equ MEM + 0100h * 17
F_DescGet equ MEM + 0100h * 18
F_DescSet equ MEM + 0100h * 19
F_DescMemAlloc equ MEM + 0100h * 20
F_DescMemFree equ MEM + 0100h * 21
F_DescMemSize equ MEM + 0100h * 22
F_DescMemResize equ MEM + 0100h * 23
F_PageLock equ MEM + 0100h * 24
F_PageUnlock equ MEM + 0100h * 25
F_PageLockAny equ MEM + 0100h * 26
F_PageUnlockReuse equ MEM + 0100h * 27
F_PageLockNone equ MEM + 0100h * 28
F_PageUnlockNone equ MEM + 0100h * 29
F_CallRealRaw equ MEM + 0100h * 30 ; Call real mode (SS:ESP supplied)
F_IntRealRaw equ MEM + 0100h * 31 ; Do real mode interrupt (SS:ESP supplied)
F_CallReal equ MEM + 0100h * 32 ; Call real mode with RETF frame
F_IntReal equ MEM + 0100h * 33 ; Do real mode interrupt
F_PagedCallReal equ MEM + 0100h * 34 ; Paged real mode call
F_PagedIntReal equ MEM + 0100h * 35 ; Paged real mode interrupt
F_CallIretReal equ MEM + 0100h * 36 ; Call real mode with IRET frame
F_CallIretRealRaw equ MEM + 0100h * 37 ; Call real mode with IRET frame (SS:ESP supplied)
F_CallProt16 equ MEM + 0100h * 38 ; Call protected mode 16 bit code
F_CallProt32 equ MEM + 0100h * 39 ; Call protected mode 32 bit code
F_IAddPage equ MEM + 0100h * 40 ; add kernel instance data
F_BankPageLock equ MEM + 0100h * 41
F_BankPageUnlock equ MEM + 0100h * 42
F_BankPageLockAny equ MEM + 0100h * 43
F_BankPageUnlockReuse equ MEM+0100h * 44
F_BankPageLockNone equ MEM + 0100h * 45
F_BankPageUnlockNone equ MEM+ 0100h * 46
F_GateAlloc equ MEM + 0100h * 47
F_GateFree equ MEM + 0100h * 48
F_MemTotalFree equ MEM + 0100h * 49
F_AddressSpace equ MEM + 0100h * 50
F_MemTotal equ MEM + 0100h * 51
F_DescRead equ MEM + 0100h * 52
F_DescWrite equ MEM + 0100h * 53
F_GetStack equ MEM + 0100h * 54
F_SetStack equ MEM + 0100h * 55
; Internal DOMain functions
F_DAlloc equ DOM + 0100h * 00 ; create a new domain
F_DFree equ DOM + 0100h * 01 ; free up a domain
F_DGet equ DOM + 0100h * 02 ; get current domain
F_DSet equ DOM + 0100h * 03 ; switch to another domain
F_SWIntHandler equ DOM + 0100h * 04 ; Install Software Interrupt handler
F_PFaultHandler equ DOM + 0100h * 05 ; Install Page Fault handler
F_IOExHandler equ DOM + 0100h * 06 ; Install I/O Exception handler
F_GenExHandler equ DOM + 0100h * 07 ; Install General Exception handler
F_HWIntHandler equ DOM + 0100h * 08 ; Install HW int handler
F_IOBitGet equ DOM + 0100h * 09 ; Get domain IO bitmap
F_IOBitSet equ DOM + 0100h * 10 ; Set domain IO bitmap
F_BankIOBitGet equ DOM + 0100h * 11 ; Get domain banked IO bitmap
F_BankIOBitSet equ DOM + 0100h * 12 ; Set domain banked IO bitmap
F_BankMemGet equ DOM + 0100h * 13 ; Read domain banked memory
F_BankMemSet equ DOM + 0100h * 14 ; Write domain banked memory
F_BankPageGet equ DOM + 0100h * 15 ; Get domain banked page table entry
F_BankPageSet equ DOM + 0100h * 16 ; Set domain banked page table entry
F_RegInstData equ DOM + 0100h * 17 ; register DOS instance data
F_NProcesses equ DOM + 0100h * 18 ; Get number of processes in domain
F_DFreeze equ DOM + 0100h * 19 ; Suspend domain
F_DThaw equ DOM + 0100h * 20 ; Unsuspend domain
F_DFork equ DOM + 0100h * 21 ; Fork domain
F_DAbort equ DOM + 0100h * 22 ; Abort all processes in domain
F_UnlinkHandler equ DOM + 0100h * 23 ; Uninstall a handler
F_HWIntDfltHandler equ DOM + 0100h * 24 ; Install HW int default handler
F_VHWIntHandler equ DOM + 0100h * 25 ; Install Virtual HW int handler
F_VHWIntDfltHandler equ DOM + 0100h * 26 ; Install Virtual HW int default handler
F_SwapInHandler equ DOM + 0100h * 27 ; Install process swap in handler
F_SwapOutHandler equ DOM + 0100h * 28 ; Install process swap out handler
F_DosStartup equ DOM + 0100h * 29 ; Statup a DOS session
F_DosShutdown equ DOM + 0100h * 30 ; Terminate a DOS session
F_PCreateHandler equ DOM + 0100h * 31 ; Install process create handler
F_PDeleteHandler equ DOM + 0100h * 32 ; Install process terminate handler
F_RootPD equ DOM + 0100h * 33 ; Get Domain Root Process
F_DForeground equ DOM + 0100h * 34 ; Domain has just switched to foreground
F_DBackground equ DOM + 0100h * 35 ; Domain will be switching to background
F_MapHMA equ DOM + 0100h * 36 ; Map Domains HMA
F_AddInstData equ DOM + 0100h * 37 ; add DOS instance data
F_DMemFree equ DOM + 0100h * 38 ; get memory available to this domain
F_DMemTotal equ DOM + 0100h * 39 ; get memory allocated to this domain
F_DGetMemLimit equ DOM + 0100h * 40 ; get limit on local memory allocations
F_DSetMemLimit equ DOM + 0100h * 41 ; set limit on local memory allocations
F_ReflectInt21 equ DOM + 0100h * 42 ; support for protected mode Int 21's
F_DTestRegion equ DOM + 0100h * 43 ; test region for global/local memory
F_Switcher equ DOM + 0100h * 44 ; make task switcher call
F_HandlerCleanup equ DOM + 0100h * 45 ; debugger hook - remove all handlers for a selector
F_DFlagGet equ DOM + 0100h * 46 ; get Domain Flags
F_DFlagSet equ DOM + 0100h * 47 ; set Domain Flags
F_DSwitchHandler equ DOM + 0100h * 48 ; Install domain switch handler
F_GIOExHandler equ DOM + 0100h * 49 ; Install Global I/O Exception handler
;------------
; VM Functions
F_VMProtInit equ VM + 0100h * 00 ; Protected Mode initialisation internal)
F_LoadMT equ VM + 0100h * 01 ; Load MultiTasking
F_UnloadMT equ VM + 0100h * 02 ; Unload MultiTasking
F_ConsoleFree equ VM + 0100h * 03 ; Save Console if enabled, then free it
F_ConsoleGet equ VM + 0100h * 04 ; Get Console, then restore if enabled
F_ConsoleSaveEnable equ VM +0100h * 05 ; Enable Console save/restore
F_ConsoleSaveDisable equ VM +0100h * 06 ; Disable Console save/restore
F_TMInit equ VM + 0100h * 07 ; Task Manager Init
F_GetKey equ VM + 0100h * 08 ; Domain Manager to Keyboard Handler
F_KeyScanEnable equ VM + 0100h * 09 ; Enable hotkey scanning
F_KeyScanDisable equ VM + 0100h * 10 ; Disable hotkey scanning
F_ConsoleOwner equ VM + 0100h * 11 ; Get console owner domain id
F_DMAHandlerEnable equ VM + 0100h * 12 ; Re-enable DMA address translation
F_DMAHandlerDisable equ VM + 0100h * 13 ; Disable DMA address translation
F_SetSerialTimeout equ VM + 0100h * 14 ; Set Serial Port Timeout
F_SetParallelTimeout equ VM+ 0100h * 15 ; Set Parallel Port Timeout
F_VCPIEntry equ VM + 0100h * 16 ; Domain is going into VCPI mode
F_VCPIExit equ VM + 0100h * 17 ; Domain has probably come out of VCPI mode
F_SetGlobalMsgMode equ VM + 0100h * 18 ; Enter global message display mode
F_DisplayGlobalMsg equ VM + 0100h * 19 ; Ditto, plus display message
F_ExitGlobalMsgMode equ VM + 0100h * 20 ; Exit global message display mode
F_SetDomainMsgMode equ VM + 0100h * 21 ; Enter domain message display mode
F_DisplayDomainMsg equ VM + 0100h * 22 ; Ditto, plus display message
F_ExitDomainMsgMode equ VM + 0100h * 23 ; Exit domain message display mode
F_DisplayFatalMsg equ VM + 0100h * 24 ; Display fatal message
F_SetSerialBase equ VM + 0100h * 25 ; Set Serial port base address
F_SetParallelBase equ VM + 0100h * 26 ; Set Parallel port base address
F_SetSerialIRQ equ VM + 0100h * 27 ; Set Serial port IRQ number
F_SetParallelIRQ equ VM + 0100h * 28 ; Set Parallel port IRQ number
F_ResetVideo equ VM + 0100h * 29 ; EMERGENCY reset of the video system
F_SetMouseIRQ equ VM + 0100h * 30 ; Set mouse IRQ
F_CheckNotIdle equ VM + 0100h * 31 ; Check if we are idle or not
F_GetMouseInfo equ VM + 0100h * 32
F_GetSerialOwner equ VM + 0100h * 33
F_GetSerialTimeout equ VM + 0100h * 34
F_GetParallelOwner equ VM + 0100h * 35
F_GetParallelTimeout equ VM+ 0100h * 36
LAST_VM_FUNC equ 36
;------------
; DPMI Functions
; These "DPMI" functions are those that are provided by the DPMI module via the
; Vladivar interface. True DPMI functions should be accessed via int 31h as per
; the DPMI spec.
F_InitDPMI equ DPMI + 0100h * 0 ; used internally by DPMI. Do not call.
F_DescAllocLDT equ DPMI + 0100H * 1 ; allocate an LDT descriptor
F_DescFreeLDT equ DPMI + 0100H * 2 ; free an LDT descriptor
F_DescGetLDT equ DPMI + 0100H * 3 ; same as F_DescGet, but for LDT
F_DescSetLDT equ DPMI + 0100H * 4 ; same as F_DescSet, but for LDT
F_DescAllocInt21 equ DPMI + 0100H * 5 ; allocate an LDT descriptor for pmode
; int 21 memory allocation.
F_WhereIsDPMI equ DPMI + 0100H * 6 ; return address of DPMI global data
LAST_DPMI_FUNC equ 6

130
IBMDOS/MSDOS.EQU Normal file
View File

@@ -0,0 +1,130 @@
; File : $MSDOS.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
MS_P_TERMCPM equ 00H
MS_C_READ equ 01H
MS_C_WRITE equ 02H
MS_A_READ equ 03H
MS_A_WRITE equ 04H
MS_L_WRITE equ 05H
MS_C_RAWIO equ 06H
MS_C_RAWIN equ 07H
MS_C_NOECHO equ 08H
MS_C_WRITESTR equ 09H
MS_C_READSTR equ 0aH
MS_C_STAT equ 0bH
MS_C_FLUSH equ 0cH
MS_DRV_ALLRESET equ 0dH
MS_DRV_SET equ 0eH
MS_F_OPEN equ 0fH
MS_F_CLOSE equ 10H
MS_F_SFIRST equ 11H
MS_F_SNEXT equ 12H
MS_F_DELETE equ 13H
MS_F_READ equ 14H
MS_F_WRITE equ 15H
MS_F_MAKE equ 16H
MS_F_RENAME equ 17H
MS_DRV_GET equ 19H
MS_F_DMAOFF equ 1aH
MS_DRV_ALLOC equ 1bH
MS_DRV_ALLOCSPEC equ 1cH
MS_F_READRAND equ 21H
MS_F_WRITERAND equ 22H
MS_F_SIZE equ 23H
MS_F_RANDREC equ 24H
MS_S_SETINT equ 25H
MS_P_MKPSP equ 26H
MS_F_READBLK equ 27H
MS_F_WRITEBLK equ 28H
MS_F_PARSE equ 29H
MS_T_GETDATE equ 2aH
MS_T_SETDATE equ 2bH
MS_T_GETTIME equ 2cH
MS_T_SETTIME equ 2dH
MS_F_VERIFY equ 2eH
MS_F_DMAGET equ 2fH
MS_S_BDOSVER equ 30H
MS_P_TERMKEEP equ 31H
MS_S_BREAK equ 33H
MS_S_GETINT equ 35H
MS_DRV_SPACE equ 36H
MS_S_COUNTRY equ 38H
MS_X_MKDIR equ 39H
MS_X_RMDIR equ 3aH
MS_X_CHDIR equ 3bH
MS_X_CREAT equ 3cH
MS_X_OPEN equ 3dH
MS_X_CLOSE equ 3eH
MS_X_READ equ 3fH
MS_X_WRITE equ 40H
MS_X_UNLINK equ 41H
MS_X_LSEEK equ 42H
MS_X_CHMOD equ 43H
MS_X_IOCTL equ 44H
MS_X_DUP equ 45H
MS_X_DUP2 equ 46H
MS_X_CURDIR equ 47H
MS_M_ALLOC equ 48H
MS_M_FREE equ 49H
MS_M_SETBLOCK equ 4aH
MS_X_EXEC equ 4bH
MS_X_EXIT equ 4cH
MS_X_WAIT equ 4dH
MS_X_FIRST equ 4eH
MS_X_NEXT equ 4fH
MS_P_SETPSP equ 50H
MS_F_GETVERIFY equ 54H
MS_X_RENAME equ 56H
MS_X_DATETIME equ 57H
MS_M_STRATEGY equ 58h
MS_F_ERROR equ 59H
MS_X_MKTEMP equ 5aH
MS_X_MKNEW equ 5bH
MS_F_LOCK equ 5cH
MS_X_EXPAND equ 60H
MS_P_GETPSP equ 62H
MS_X_GETCP equ 6601h
MS_X_SETCP equ 6602h
MS_X_SETHC equ 67h
MS_X_COMMIT equ 68h
DOS_INT equ 21h ; DOS Entry Point
;
STDIN equ 0 ; Standard Console Input Handle
STDOUT equ 1 ; Standard Console Output Handle
STDERR equ 2 ; Standard Error Output
STDAUX equ 3 ; Auxilary Device Handle
STDPRN equ 4 ; Printer Device Handle

122
IBMDOS/MSERROR.EQU Normal file
View File

@@ -0,0 +1,122 @@
; 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
ED_FUNCTION equ -01 ; invalid function number
ED_FILE equ -02 ; file not found
ED_PATH equ -03 ; path not found
ED_HANDLE equ -04 ; too many open files
ED_ACCESS equ -05 ; file access denied
ED_H_MATCH equ -06 ; invalid handle number
ED_DMD equ -07 ; memory descriptor destroyed
ED_MEMORY equ -08 ; insufficient memory
ED_BLOCK equ -09 ; invalid memory block addr
ED_ENVIRON equ -10 ; invalid environment
ED_FORMAT equ -11 ; invalid format
ED_ACC_CODE equ -12 ; invalid access code
ED_DATA equ -13 ; invalid data
ED_DRIVE equ -15 ; invalid drive specified
ED_DIR equ -16 ; can't remove current dir
ED_DEVICE equ -17 ; not same device
ED_ROOM equ -18 ; no more files
ED_PROTECT equ -19 ; disk write protected
ED_BADUNIT equ -20 ; invalid drive specified
ED_NOTREADY equ -21 ; drive doesn't respond
ED_BADCMD equ -22 ; invalid command to driver
ED_BADDATA equ -23 ; data CRC error
ED_BADRHLEN equ -24 ; (shouldn't happen)
ED_BADSEEK equ -25 ; can't seek to track
ED_BADMEDIA equ -26 ; unrecognizable medium
ED_RNF equ -27 ; record/sector not found
ED_NOPAPER equ -28 ; printer error
ED_WRFAIL equ -29 ; write failed
ED_RDFAIL equ -30 ; read failed
ED_GENFAIL equ -31 ; anything failed
ED_SHAREFAIL equ -32 ; sharing conflict
ED_LOCKFAIL equ -33 ; locking conflict
ED_DISKCHG equ -34 ; invalid disk change
ED_NOFCBS equ -35 ; FCB table exhausted
ED_NOLOCKS equ -36 ; lock list items exhausted
ED_NET equ -50 ; Network Request Not Supported
ED_NETACCESS equ -65 ; file access denied
ED_NETPWD equ -73 ; Server Password Error
ED_NETVER equ -74 ; Incorrect Server version
ED_NETREQ equ -75 ; No Local Network Resources
ED_NETTIME equ -76 ; Network Time Out Error
ED_NETCOMM equ -77 ; Network Communications Error
ED_NETSRVR equ -78 ; No Server Network Resources
ED_NETLOG equ -79 ; Server Not Logged In
ED_EXISTS equ -80 ; file already exists
ED_MAKE equ -82 ; Cannot Make (Files ??)
ED_FAIL equ -83 ; FAIL code returned from INT 24
ED_STRUCT equ -84 ; Out of Structures
ED_ASSIGN equ -85 ; Already Assigned
ED_PASSWORD equ -86 ; Invalid Password
ED_PARAM equ -87 ; Invalid Parameter
ED_NETWRITE equ -88 ; Network write fault
ED_NETFUNC equ -89 ; Function not supported on network
ED_COMPONENT equ -90 ; system component not installed
ED_LASTERROR equ -90 ; Last Error Number Used
CLASS_RESOURCE equ 1 ; Out of Resource
CLASS_TEMP equ 2 ; Temporary Situation
CLASS_AUTHOR equ 3 ; Authorization Error
CLASS_INTERNAL equ 4 ; Internal System Software Error
CLASS_HARDWARE equ 5 ; Hardware Failure
CLASS_SYSTEM equ 6 ; Serious System Failure
CLASS_APPLIC equ 7 ; Application Program Error
CLASS_LOST equ 8 ; File/Item Not Found
CLASS_FORMAT equ 9 ; File/Item Illegal Format
CLASS_LOCKED equ 10 ; File/Item Locked
CLASS_MEDIA equ 11 ; Media Failure
CLASS_EXISTS equ 12 ; Item Already Exists
CLASS_UNKNOWN equ 13 ; Unknown Classification
ACT_RETRY equ 1 ; Retry a few times then prompt user
ACT_DELAY equ 2 ; Delay then as ACT_RETRY
ACT_USER equ 3 ; Prompt user to re-enter data
ACT_ABORT equ 4 ; Clean Up then ABORT the process
ACT_TERM equ 5 ; Terminate immeadiately NO CLEAN UP
ACT_IGNORE equ 6 ; Ignore the Error
ACT_URETRY equ 7 ; Retry the error after user intervention
LOC_UNKNOWN equ 1 ; Unknown error location
LOC_BLOCK equ 2 ; Block Device Failure
LOC_NET equ 3 ; Network Failure
LOC_CHAR equ 4 ; Related to Serial/Character devices
LOC_MEMORY equ 5 ; Failure related to Memory

151
IBMDOS/NETWORK.A86 Normal file
View File

@@ -0,0 +1,151 @@
; File : $NETWORK.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$
; ENDLOG
;
; DOS Network Function Calls
include pcmode.equ
include i:mserror.equ
include i:redir.equ
include i:doshndl.def
PCM_CODE CSEG BYTE
extrn reload_ES:near
extrn return_AX_CLC:near
extrn return_CX:near
extrn error_exit:near
extrn get_ldt_raw:near
; *****************************
; *** DOS Function 5E ***
; *** Get Machine Name ***
; *****************************
;
Public func5E
func5E:
cmp al,1 ! jb f5E00 ; Get Machine Name Sub-Function
je f5E01 ; Set Machine Name Sub-Function
mov ax,I2F_REDIR_5E ; magic int 2F number
jmp func5F_common ; use common routine
;
; Get the current Machine Name
;
f5E00:
mov di,dx ; Copy the 15 Byte Network Name
mov si,offset net_name
mov cx,16/2
rep movsw
; mov ch,name_num ; 00 -> Undefined Name
; mov cl,netbios ; 00 -> Name Number
mov cx,word ptr netbios
call return_CX
f5E_success:
xor ax,ax ; return zero
jmp return_AX_CLC
;
; Set the Network Name
;
f5E01:
; mov name_num,ch ; Get the Network and NetBios Nos.
; mov netbios,cl ; and save in local variables
mov word ptr netbios,cx
inc net_set_count
push ds ! push es
pop ds ! pop es ; Copy the specified name
mov si,dx ; to internal save area
mov di,offset net_name
mov cx,15 ; Copy 15 byte name leave
rep movsb ; Terminating 00
push es ! pop ds
jmps f5E_success
; *****************************
; *** DOS Function 5F ***
; *** Network Control ***
; *****************************
;
Public func5F
func5F:
cmp al,07h
je func5F_10
cmp al,08h
jne func5F_40
func5F_10:
push ax
mov al,dl
call get_ldt_raw
pop ax
jc func5F_30
cmp es:word ptr LDT_PDT[bx],1
jb func5F_30
or es:byte ptr LDT_FLAGS+1[bx],LFLG_PHYSICAL/100h
cmp al,07h
je func5F_30
and es:byte ptr LDT_FLAGS+1[bx],(not LFLG_PHYSICAL)/100h
func5F_30:
jnc func5F_OK
mov ax,ED_DRIVE
jmp error_exit
func5F_40:
mov ax,I2F_REDIR_5F ; magic int 2F number
Public func5F_common
func5F_common:
push ds
push int21AX ; AX passed on the stack..
push es
call reload_ES ; get the segment registers
pop ds ; back to entry state
stc ; assume it will fail
int 2fh ; pass it on to MSNET
pop ds ; throw away word on the stack
pop ds
jc func5F_error
func5F_OK:
jmp return_AX_CLC ; return the result
func5F_error:
neg ax ; our error convention is negative..
jmp error_exit ; Error for all sub functions
PCMODE_DATA DSEG WORD
extrn net_name:byte
extrn net_set_count:byte
extrn name_num:byte
extrn netbios:byte
extrn int21AX:word
end

104
IBMDOS/PATCH.COD Normal file
View File

@@ -0,0 +1,104 @@
; File : $PATCH.COD$
;
; 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
;*****************************************************
;*
;* PATCH AREA -- 256 bytes long
;*
;*****************************************************
patch:
nop ! nop ! nop ! nop ! nop ! nop ;00-0f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;10-1f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;20-2f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;30-3f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;40-4f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;50-5f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;60-6f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;70-7f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;80-8f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;90-9f
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;a0-af
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;b0-bf
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;c0-cf
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;d0-df
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;e0-ef
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop
nop ! nop ! nop ! nop ! nop ! nop ;f0-ff
nop ! nop ! nop ! nop ! nop ! nop
nop ! nop ! nop ! nop

1028
IBMDOS/PCMIF.A86 Normal file

File diff suppressed because it is too large Load Diff

179
IBMDOS/PCMODE.EQU Normal file
View File

@@ -0,0 +1,179 @@
; 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.
;
TRUE equ 0FFFFh ; value of TRUE
FALSE equ 0 ; value of FALSE
TRUE_VERSION equ 6
IDLE_DETECT equ TRUE ; Check for IDLE Process's
if IDLE_DETECT
IDLE_COMMAND equ 0001h ; Command Processor Active
IDLE_DOSFUNC equ 0002h ; DOS Function Called
IDLE_INT28 equ 0004h ; INT 28 Called
IDLE_ON equ 4000h ; ReSet when Idle Checking Enabled
IDLE_INIT equ 8000h ; ReSet when $IDLE$ Loaded and Active
IDLE_DISABLE equ IDLE_INIT + IDLE_ON
PROC_IDLE equ 0001 ; Process is IDLE
PROC_INT28 equ 0002 ; INT28 Polling Loop
PROC_KEYIN equ 0003 ; Keyboard Input
PROC_DEVIN equ 0004 ; Device Input Routine
endif
STACK_SIZE equ 192 ; Local Stack Size (Levels)
MAX_PATHLEN equ 80 ; Maximum Path length
MAX_FILELEN equ 13
;
; DOS process termination Codes
;
TERM_NORMAL equ 0 ; Normal Termination
TERM_BREAK equ 1 ; Termination by Control Break
TERM_ERROR equ 2 ; Termination by Critical Error
TERM_RESIDENT equ 3 ; Terminate and Stay Resident
;
; Critical Error responses from the default INT 24 handler and
; the DO_INT24 routine.
;
ERR_IGNORE equ 0 ; Ignore Error
ERR_RETRY equ 1 ; Retry the Operation
ERR_ABORT equ 2 ; Terminate the Process
ERR_FAIL equ 3 ; Fail Function
;
OK_FAIL equ 0000$1000b ; Fail is a Valid Response
OK_RETRY equ 0001$0000b ; Retry is a Valid Response
OK_IGNORE equ 0010$0000b ; Ignore is a valid Response
OK_RIF equ 0011$1000b ; All Responsese are Valid
OK_RI equ 0011$0000b ; Retry and Ignore are Valid
OK_RF equ 0001$1000b ; Retry and Fail are Valid
;
NO_CRIT_ERRORS equ 0100$0000b ; critical error shouldn't be generated
; warning - must match FDOS.A86
;
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
reg_AX equ word ptr .00
reg_AL equ byte ptr .00
reg_AH equ byte ptr .01
reg_BX equ word ptr .02
reg_BL equ byte ptr .02
reg_BH equ byte ptr .03
reg_CX equ word ptr .04
reg_CL equ byte ptr .04
reg_CH equ byte ptr .05
reg_DX equ word ptr .06
reg_DL equ byte ptr .06
reg_DH equ byte ptr .07
reg_SI equ word ptr .08
reg_DI equ word ptr .10
reg_BP equ word ptr .12
reg_DS equ word ptr .14
reg_ES equ word ptr .16
reg_IP equ word ptr .18
reg_CS equ word ptr .20
reg_FLAGS equ word ptr .22
; Processor Flags
CARRY_FLAG equ 0001h ; Carry Flag
ZERO_FLAG equ 0040h ; Zero Flag
SIGN_FLAG equ 0080h ; Sign Flag
INT_FLAG equ 0200h ; Interrupt Flag
DIR_FLAG equ 0400h ; Direction Flag
OFLW_FLAG equ 0800h ; OverFlow Flag
DMD_ID equ es:byte ptr .0 ; id code ('M' or 'Z')
DMD_PSP equ es:word ptr .1 ; owner of memory block
DMD_LEN equ es:word ptr .3 ; length of memory block
DMD_IDLE_FLAGS equ es:word ptr .6 ; idle flags live here
DMD_NAME equ es:byte ptr .8 ; ASCIIZ name field
DMD_NAME_LEN equ 8 ; 8 Bytes long
IDM equ 'M' ; not last id code
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
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

1493
IBMDOS/PROCESS.A86 Normal file

File diff suppressed because it is too large Load Diff

108
IBMDOS/PSP.DEF Normal file
View File

@@ -0,0 +1,108 @@
; File : $PSP.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
; 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
;
; Program Segment Prefix
; ----------------------
; This structure holds vital information for DOS programs
;
;*******************************************************************************
;*
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 00 | int 20 | memory | *** | jmpf|longjmp off|
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 08 |longjmp seg| int22 Off | int22 Seg | int22 Off |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 10 | int22 Seg | int24 Off | int24 Seg | Parent |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 18 | Default Handle Table |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 20 | XFT (20 entries) |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 28 | XFT contd. | Environ | User SP |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 30 | User SS | xfnmax | xftoff | xftseg |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 38 | res1 | res2 | ric | *** | ********* |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 40 | version | ********* | ********* | ********* |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 48 | ********* | ********* | ********* | ********* |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 50 | int 21 | retf| *** | ********* | ********* |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
;* 58 | ********* | ********* | PSP fcb 1 |
;* +-----+-----+-----+-----+-----+-----+-----+-----+
PSP_INT20 equ es:word ptr .0000h
PSP_MEMORY equ es:word ptr .0002h
;PSP_??? equ es:byte ptr .0004h
PSP_LONGCALL equ es:byte ptr .0005h
PSP_LONGOFF equ es:word ptr .0006h
PSP_LONGSEG equ es:word ptr .0008h
PSP_TERM_IP equ es:word ptr .000Ah
PSP_TERM_CS equ es:word ptr .000Ch
PSP_BREAK_IP equ es:word ptr .000Eh
PSP_BREAK_CS equ es:word ptr .0010h
PSP_ERROR_IP equ es:word ptr .0012h
PSP_ERROR_CS equ es:word ptr .0014h
PSP_PARENT equ es:word ptr .0016h
PSP_XFT equ es:byte ptr .0018h
;
; The Default Handle Table is HERE !!
;
PSP_ENVIRON equ es:word ptr .002ch
PSP_USERSP equ es:word ptr .002eh
PSP_USERSS equ es:word ptr .0030h
PSP_XFNMAX equ es:word ptr .0032h
PSP_XFTPTR equ es:dword ptr .0034h
PSP_XFTOFF equ es:word ptr .0034h
PSP_XFTSEG equ es:word ptr .0036h
PSP_RES1 equ es:word ptr .0038h ; DOS Reserved 0FFFFh
PSP_RES2 equ es:word ptr .003Ah ; DOS Reserved 0FFFFh
PSP_RIC equ es:byte ptr .003Ch ; Return Interim Character flag
PSP_VERSION equ es:word ptr .0040h ; DOS version number
PSP_DOSCALL equ es:word ptr .0050h
PSP_DOSRETF equ es:byte ptr .0052h
PSP_FCB1 equ es:byte ptr .005Ch
PSP_FCB2 equ es:byte ptr .006Ch
PSP_COMLEN equ es:byte ptr .0080h
PSP_COMLINE equ es:byte ptr .0081h
XFNMAX equ 20
PSPLEN equ 100h
PSPILEN equ 60h

1722
IBMDOS/REDIR.A86 Normal file

File diff suppressed because it is too large Load Diff

67
IBMDOS/REDIR.EQU Normal file
View File

@@ -0,0 +1,67 @@
; File : $REDIR.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
; Int 2F AH=11 msnet redirector hook equates
I2F_PRESCENCE equ 1100h
I2F_RMDIR equ 1101h
I2F_MKDIR equ 1103h
I2F_CHDIR equ 1105h
I2F_CLOSE equ 1106h
I2F_COMMIT equ 1107h
I2F_READ equ 1108h
I2F_WRITE equ 1109h
I2F_LOCK equ 110Ah
I2F_UNLOCK equ 110Bh
I2F_SPACE equ 110Ch
I2F_SET_ATTR equ 110Eh
I2F_GET_ATTR equ 110Fh
I2F_REN equ 1111h
I2F_DEL equ 1113h
I2F_OPEN equ 1116h
I2F_CREATE equ 1117h
I2F_XCREATE equ 1118h
I2F_XSFIRST equ 1119h
I2F_SFIRST equ 111Bh
I2F_SNEXT equ 111Ch
I2F_PCLOSE equ 111Dh
I2F_REDIR_5F equ 111Eh
I2F_REDIR_5E equ 111Fh
I2F_FLUSH equ 1120h
I2F_LSEEK equ 1121h
I2F_PTERM equ 1122h
I2F_PPATH equ 1123h
I2F_CTLP_ERR equ 1124h
I2F_REDIR_5D equ 1125h
I2F_CTLP equ 1126h

166
IBMDOS/REQHDR.EQU Normal file
View File

@@ -0,0 +1,166 @@
; File : $REQHDR.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
CMD_INIT equ 0 ; Initialize the Device Driver
CMD_MEDIA_CHECK equ 1 ; Request Media Check
CMD_BUILD_BPB equ 2 ; Build Drive BPB
CMD_INPUT_IOCTL equ 3 ; IOCTL input
CMD_INPUT equ 4 ; Input
CMD_INPUT_NOWAIT equ 5 ; Non destructive input no wait
CMD_INPUT_STATUS equ 6 ; Input status
CMD_INPUT_FLUSH equ 7 ; Input flush
CMD_OUTPUT equ 8 ; Output
CMD_OUTPUT_VERIFY equ 9 ; Output with verify
CMD_OUTPUT_STATUS equ 10 ; Output status
CMD_OUTPUT_FLUSH equ 11 ; Output flush
CMD_OUTPUT_IOCTL equ 12 ; IOCTL output
CMD_DEVICE_OPEN equ 13 ; Device OPEN
CMD_DEVICE_CLOSE equ 14 ; Device CLOSE
CMD_FIXED_MEDIA equ 15 ; Removeable Media Check
CMD_GENERIC_IOCTL equ 19 ; Generic IOCTL
CMD_GET_DEVICE equ 23 ; Get the Logical Device
CMD_SET_DEVICE equ 24 ; Set the Logical Device
CMD_QUERY_IOCTL equ 25 ; query ioctl support
; Generic Request Header Format
RH_LEN equ es:byte ptr 0[bx]
RH_UNIT equ es:byte ptr 1[bx]
RH_CMD equ es:byte ptr 2[bx]
RH_STATUS equ es:word ptr 3[bx]
RHS_DONE equ 0100h
RHS_BUSY equ 0200h
RHS_IC equ 0400h ; Interim Character
RHS_RM equ 0800h
RHS_ERROR equ 8000h
;******
;* No longer safe to use - some device drivers trample on them....
;*
;* RH_STRATEGY equ es:dword ptr 5[bx] ; Device Strategy Routine
;* RH_STRATOFF equ es:word ptr 5[bx] ; Strategy Offset
;* RH_STRATSEG equ es:word ptr 7[bx] ; Strategy Segment
;* RH_INTERRUPT equ es:dword ptr 9[bx] ; Device Interrupt Routine
;* RH_INTOFF equ es:word ptr 9[bx] ; Intterupt Offset
;* RH_INTSEG equ es:word ptr 11[bx] ; Interrupt Segment
;*****
; Request header for initialization
RH0_NUNITS equ es:byte ptr 13[bx]
RH0_RESIDENT equ es:word ptr 14[bx]
RH0_BPBOFF equ es:word ptr 18[bx]
RH0_BPBSEG equ es:word ptr 20[bx]
RH0_DRIVE equ es:byte ptr 22[bx]
RH0_LEN equ 22
; Request header for media check
RH1_MEDIA equ es:byte ptr 13[bx] ; BDOS: current media byte
RH1_RETURN equ es:byte ptr 14[bx] ; driver: return code (00, 01, FF)
RH1_VOLID equ es:dword ptr 15[bx] ; driver: volume label address
RH1_LEN equ 15
; Request header for "build BPB"
RH2_MEDIA equ es:byte ptr 13[bx] ; BDOS or driver?
RH2_BUFFER equ es:dword ptr 14[bx] ; BDOS: scratch buffer for driver use
RH2_BPB equ es:dword ptr 18[bx] ; same as the following:
RH2_BPBOFF equ es:word ptr 18[bx] ; driver: address of new BPB
RH2_BPBSEG equ es:word ptr 20[bx]
RH2_LEN equ 24
; Request header for input/output
RH4_MEDIA equ es:byte ptr 13[bx] ; BDOS: current media byte
RH4_RIC equ es:byte ptr 13[bx] ; BDOS: Return Interim Char flg
RH4_BUFFER equ es:dword ptr 14[bx] ; BDOS: disk transfer address
RH4_BUFOFF equ es:word ptr 14[bx] ; BDOS: Buffer Offset
RH4_BUFSEG equ es:word ptr 16[bx] ; BDOS: Buffer Segment
RH4_COUNT equ es:word ptr 18[bx] ; BDOS: sector count
RH4_SECTOR equ es:word ptr 20[bx] ; BDOS: starting sector
RH4_VOLID equ es:dword ptr 22[bx] ; driver: volume if illegal disk change
RH4_BIGSECTOR equ es:dword ptr 26[bx]
RH4_BIGSECTORLO equ es:word ptr 26[bx]
RH4_BIGSECTORHI equ es:word ptr 28[bx]
RH4_LEN equ 30
; Request Header for Non-Destructive Input
RH5_CHAR equ es:byte ptr 13[bx] ; Character Read from Device
RH5_RIC equ es:byte ptr 13[bx] ; BDOS: Return Interim Char flg
RH5_LEN equ 14
; Request Header for Device Open
RH13_LEN equ 13
; Request Header for Device Close
RH14_LEN equ 13
; Request header for generic IOCTL
RH19_CATEGORY equ es:word ptr 13[bx] ; BDOS: major/minor function number
RH19_MAJOR equ es:byte ptr 13[bx] ; BDOS: Major Function Number
RH19_MINOR equ es:byte ptr 14[bx] ; BDOS: Minor Function Number
RH19_SI equ es:word ptr 15[bx] ; BDOS: User SI
RH19_DI equ es:word ptr 17[bx] ; BDOS: User DI
RH19_GENPB equ es:dword ptr 19[bx] ; BDOS: extra parameters
RH19_LEN equ 23
RQ19_SET equ 40h ; set device parameters
RQ19_GET equ 60h ; get device parameters
RQ19_WRITE equ 41h ; write tracks
RQ19_READ equ 61h ; read tracks
RQ19_FORMAT equ 42h ; format tracks
RQ19_VERIFY equ 62h ; verify tracks
RQ19_PRP_START equ 4Ch ; start of codepage prepare
RQ19_PRP_END equ 4Dh ; end of codepage prepare
RQ19_SELECT equ 4Ah ; select code page
RQ19_QRY_SEL equ 6Ah ; query selected code page
RQ19_QRY_PRP equ 6Bh ; query prepared code page(s)
RQ19_DSP_SET equ 5Fh ; set display information
RQ19_DSP_GET equ 7Fh ; get display information
; Request header for get/set drive
RH24_CMD equ es:byte ptr 14[bx] ; BDOS: Command Code
RH24_STATUS equ es:word ptr 15[bx] ; BDOS: Status
RH24_RESVD equ es:dword ptr 17[bx] ; BDOS: Reserved
RH24_LEN equ 21
RH_SIZE equ 30 ; maximum size of request header

134
IBMDOS/RH.EQU Normal file
View File

@@ -0,0 +1,134 @@
; File : $RH.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
;
; Request command equates
CMD_INIT equ 0 ; Initialize the Device Driver
CMD_MEDIA_CHECK equ 1 ; Request Media Check
CMD_BUILD_BPB equ 2 ; Build Drive BPB
CMD_INPUT_IOCTL equ 3 ; IOCTL input
CMD_INPUT equ 4 ; Input
CMD_INPUT_NOWAIT equ 5 ; Non destructive input no wait
CMD_INPUT_STATUS equ 6 ; Input status
CMD_INPUT_FLUSH equ 7 ; Input flush
CMD_OUTPUT equ 8 ; Output
CMD_OUTPUT_VERIFY equ 9 ; Output with verify
CMD_OUTPUT_STATUS equ 10 ; Output status
CMD_OUTPUT_FLUSH equ 11 ; Output flush
CMD_OUTPUT_IOCTL equ 12 ; IOCTL output
CMD_DEVICE_OPEN equ 13 ; Device OPEN
CMD_DEVICE_CLOSE equ 14 ; Device CLOSE
CMD_FIXED_MEDIA equ 15 ; Removeable Media Check
CMD_GENERIC_IOCTL equ 19 ; Generic IOCTL
CMD_GET_DEVICE equ 23 ; Get the Logical Device
CMD_SET_DEVICE equ 24 ; Set the Logical Device
; Request header definition
RH_LEN equ byte ptr 0
RH_UNIT equ byte ptr 1
RH_CMD equ byte ptr 2
RH_STATUS equ word ptr 3
RHS_DONE equ 0100h
RHS_BUSY equ 0200h
RHS_RM equ 0800h
RHS_ERROR equ 8000h
;******
;* No longer safe to use - some device drivers trample on them....
;*
;* RH_STRATEGY equ dword ptr 5[bx] ; Device Strategy Routine
;* RH_STRATOFF equ word ptr 5[bx] ; Strategy Offset
;* RH_STRATSEG equ word ptr 7[bx] ; Strategy Segment
;* RH_INTERRUPT equ dword ptr 9[bx] ; Device Interrupt Routine
;* RH_INTOFF equ word ptr 9[bx] ; Intterupt Offset
;* RH_INTSEG equ word ptr 11[bx] ; Interrupt Segment
;*****
; Request header for media check
RH1_MEDIA equ byte ptr 13 ; BDOS: current media byte
RH1_RETURN equ byte ptr 14 ; driver: return code (00, 01, FF)
RH1_VOLID equ dword ptr 15 ; driver: volume label address
; Request header for "build BPB"
RH2_MEDIA equ byte ptr 13 ; BDOS or driver?
RH2_BUFFER equ dword ptr 14 ; BDOS: scratch buffer for driver use
RH2_BPB equ dword ptr 18 ; driver: address of new BPB
; Request header for input/output
RH4_MEDIA equ byte ptr 13 ; BDOS: current media byte
RH4_BUFFER equ dword ptr 14 ; BDOS: disk transfer address
RH4_BUFOFF equ word ptr 14
RH4_BUFSEG equ word ptr 16
RH4_COUNT equ word ptr 18 ; BDOS: sector count
RH4_SECTOR equ word ptr 22 ; BDOS: starting sector
RH4_VOLID equ dword ptr 24 ; driver: volume if illegal disk change
; Request Header for Non-Destructive Input
RH5_CHAR equ byte ptr 13 ; Character Read from Device
; Request header for generic IOCTL
RH19_CATEGORY equ word ptr 13 ; BDOS: major/minor function number
RH19_GENPB equ word ptr 19 ; BDOS: extra parameters
; Request header for get/set logical drive
RH24_DRIVE equ byte ptr 13 ; Set logical drive
; Request header lengths
RH0_LEN equ 22
RH1_LEN equ 15
RH2_LEN equ 24
if DOS5
RH4_LEN equ 30
else
RH4_LEN equ 22 ; or 24 for big sectors
endif
RH4_CDEV_LEN equ 22
RH5_LEN equ 14
RH12_LEN equ 22
RH13_LEN equ 13
RH14_LEN equ 13
RH15_LEN equ 13
RH19_LEN equ 23
RH24_LEN equ 21

258
IBMDOS/SUPPORT.A86 Normal file
View File

@@ -0,0 +1,258 @@
; 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
;
include pcmode.equ
include fdos.def
include i:mserror.equ
include i:doshndl.def
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
eject
;
; STRLEN determines the length of the string passed in DS:SI
; and returns the byte length in CX.
;
Public strlen
strlen:
push es ! push di
push ds ! pop es
mov di,si
mov cx,0FFFFh
sub al,al
repnz scasb
pop di ! pop es
not cx
dec cx
ret
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:
mov al,OK_RF ; Valid to RETRY or FAIL
; jmp set_retry ; (the most common case)
Public set_retry
set_retry:
mov valid_flg,al ; Save Valid Error Reponses
pop retry_off ; Save the Routine Address
mov retry_sp,sp ; and the Stack Pointer
mov al,ah ; get function number
xor ah,ah ; make it a word
mov FD_FUNC,ax ; save it for the FDOS
push ds
push bx
lds bx,int21regs_ptr ; point to users registers
and reg_FLAGS[bx],not CARRY_FLAG
mov al,reg_AL[bx] ; clear CY assuming we will succeed
pop bx ; and reload AL with entry value
pop ds
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:
call fdos_nocrit
cmp ax,ED_LASTERROR ; Compare against last error code
jnb fdos_error ; if NOT below then is ERROR CODE
or ax,ax ; Reset the Carry Flag and Return
ret
Public fdos_ax_crit
fdos_ax_crit:
call fdos_nocrit
cmp ax,ED_LASTERROR ; Compare against last error code
jnb fdos_error ; if NOT below then is ERROR CODE
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
;
push ds ! push di
lds di,ss:int21regs_ptr
mov reg_AX[di],ax ; return AX to caller
and reg_FLAGS[di],not CARRY_FLAG
pop di ! pop ds
ret
fdos_error: ; Process the Error
cmp sp,retry_sp ; Is the user expecting use to
jnz fdos_e10 ; return or use the default handler
jmp error_exit ; If CALLed then return with the error
fdos_e10: ; to the calling routine.
stc
ret
Public fcbfdos_crit
fcbfdos_crit:
call fdos_nocrit
cmp ax,ED_LASTERROR ; Compare against last error code
jnb fcbfdos_error ; if NOT below then is ERROR CODE
or ax,ax ; Reset the Carry Flag and Return
ret
fcbfdos_error: ; Process the Error
cmp sp,retry_sp ; Is the user expecting use to
jnz fcbfdos_e10 ; return or use the default handler
jmp fcberror_exit ; If CALLed then return with the error
fcbfdos_e10: ; to the calling routine.
stc
ret
Public fdos_nocrit
fdos_nocrit:
mov dx,offset fdos_data ; point to fdos parameter block
push ds ! push es
push si ! push di ! push bp
call fdos_entry ; BDOS module entry point
or ax,ax ; Set the Flags
pop bp ! pop di ! pop si
pop es ! pop ds
ret
Public reload_ES
reload_ES:
; On Entry:
; None
; On Exit:
; ES = callers ES
; All regs preserved
;
push bx
les bx,ss:int21regs_ptr
mov es,es:reg_ES[bx] ; reload with callers ES
pop bx
ret
Public return_BX
return_BX:
;---------
; On Entry:
; BX to be returned to caller in BX
; On Exit:
; All regs preserved
;
push ds ! push bx
lds si,ss:int21regs_ptr
mov reg_BX[si],bx ; return BX to caller
pop bx ! pop ds
ret
Public return_CX
return_CX:
;---------
; On Entry:
; CX to be returned to caller in CX
; On Exit:
; All regs preserved
;
push ds ! push bx
lds bx,ss:int21regs_ptr
mov reg_CX[bx],cx ; return CX to caller
pop bx ! pop ds
ret
Public return_DX
return_DX:
;---------
; On Entry:
; DX to be returned to caller in DX
; On Exit:
; All regs preserved
;
push ds ! push bx
lds bx,ss:int21regs_ptr
mov reg_DX[bx],dx ; return DX to caller
pop bx ! pop ds
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

2528
IBMDOS/UTILS.FDO Normal file

File diff suppressed because it is too large Load Diff

213
IBMDOS/VECTORS.DEF Normal file
View File

@@ -0,0 +1,213 @@
; File : $VECTORS.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
; 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
INT08_OFFSET equ 0020h
INT08_SEGMENT equ INT08_OFFSET + 2
INT09_OFFSET equ 0024h
INT09_SEGMENT equ INT09_OFFSET + 2
INT10_OFFSET equ 0040h
INT10_SEGMENT equ INT10_OFFSET + 2
INT11_OFFSET equ 0044h
INT11_SEGMENT equ INT11_OFFSET + 2
INT12_OFFSET equ 0048h
INT12_SEGMENT equ INT12_OFFSET + 2
INT13_OFFSET equ 004Ch
INT13_SEGMENT equ INT13_OFFSET + 2
INT14_OFFSET equ 0050h
INT14_SEGMENT equ INT14_OFFSET + 2
INT15_OFFSET equ 0054h
INT15_SEGMENT equ INT15_OFFSET + 2
INT16_OFFSET equ 0058h
INT16_SEGMENT equ INT16_OFFSET + 2
INT17_OFFSET equ 005Ch
INT17_SEGMENT equ INT17_OFFSET + 2
INT18_OFFSET equ 0060h
INT18_SEGMENT equ INT18_OFFSET + 2
INT19_OFFSET equ 0064h
INT19_SEGMENT equ INT19_OFFSET + 2
INT1A_OFFSET equ 0068h
INT1A_SEGMENT equ INT1A_OFFSET + 2
INT1B_OFFSET equ 006Ch
INT1B_SEGMENT equ INT1B_OFFSET + 2
INT1C_OFFSET equ 0070h
INT1C_SEGMENT equ INT1C_OFFSET + 2
INT1D_OFFSET equ 0074h
INT1D_SEGMENT equ INT1D_OFFSET + 2
INT1E_OFFSET equ 0078h
INT1E_SEGMENT equ INT1E_OFFSET + 2
INT1F_OFFSET equ 007Ch
INT1F_SEGMENT equ INT1F_OFFSET + 2
INT20_OFFSET equ 0080h
INT20_SEGMENT equ INT20_OFFSET + 2
INT21_OFFSET equ 0084h
INT21_SEGMENT equ INT21_OFFSET + 2
INT22_OFFSET equ 0088h
INT22_SEGMENT equ INT22_OFFSET + 2
INT23_OFFSET equ 008Ch
INT23_SEGMENT equ INT23_OFFSET + 2
INT24_OFFSET equ 0090h
INT24_SEGMENT equ INT24_OFFSET + 2
INT25_OFFSET equ 0094h
INT25_SEGMENT equ INT25_OFFSET + 2
INT26_OFFSET equ 0098h
INT26_SEGMENT equ INT26_OFFSET + 2
INT27_OFFSET equ 009Ch
INT27_SEGMENT equ INT27_OFFSET + 2
INT28_OFFSET equ 00A0h
INT28_SEGMENT equ INT28_OFFSET + 2
INT29_OFFSET equ 00A4h
INT29_SEGMENT equ INT29_OFFSET + 2
INT2A_OFFSET equ 00A8h
INT2A_SEGMENT equ INT2A_OFFSET + 2
INT2B_OFFSET equ 00ACh
INT2B_SEGMENT equ INT2B_OFFSET + 2
INT2C_OFFSET equ 00B0h
INT2C_SEGMENT equ INT2C_OFFSET + 2
INT2D_OFFSET equ 00B4h
INT2D_SEGMENT equ INT2D_OFFSET + 2
INT2E_OFFSET equ 00B8h
INT2E_SEGMENT equ INT2E_OFFSET + 2
INT2F_OFFSET equ 00BCh
INT2F_SEGMENT equ INT2F_OFFSET + 2
INT30_OFFSET equ 00C0h
INT30_SEGMENT equ INT30_OFFSET + 2
INT31_OFFSET equ 00C4h
INT31_SEGMENT equ INT31_OFFSET + 2
INT32_OFFSET equ 00C8h
INT32_SEGMENT equ INT32_OFFSET + 2
INT33_OFFSET equ 00CCh
INT33_SEGMENT equ INT33_OFFSET + 2
INT34_OFFSET equ 00D0h
INT34_SEGMENT equ INT34_OFFSET + 2
INT35_OFFSET equ 00D4h
INT35_SEGMENT equ INT35_OFFSET + 2
INT36_OFFSET equ 00D8h
INT36_SEGMENT equ INT36_OFFSET + 2
INT37_OFFSET equ 00DCh
INT37_SEGMENT equ INT37_OFFSET + 2
INT38_OFFSET equ 00E0h
INT38_SEGMENT equ INT38_OFFSET + 2
INT39_OFFSET equ 00E4h
INT39_SEGMENT equ INT39_OFFSET + 2
INT3A_OFFSET equ 00E8h
INT3A_SEGMENT equ INT3A_OFFSET + 2
INT3B_OFFSET equ 00ECh
INT3B_SEGMENT equ INT3B_OFFSET + 2
INT3C_OFFSET equ 00F0h
INT3C_SEGMENT equ INT3C_OFFSET + 2
INT3D_OFFSET equ 00F4h
INT3D_SEGMENT equ INT3D_OFFSET + 2
INT3E_OFFSET equ 00F8h
INT3E_SEGMENT equ INT3E_OFFSET + 2
INT3F_OFFSET equ 00FCh
INT3F_SEGMENT equ INT3F_OFFSET + 2
INT5B_OFFSET equ 016Ch
INT5B_SEGMENT equ INT5B_OFFSET + 2
INT5C_OFFSET equ 0170h
INT5C_SEGMENT equ INT5C_OFFSET + 2
INTE0_OFFSET equ 0380h ; Concurrent DOS Vector
INTE0_SEGMENT equ INTE0_OFFSET + 2
INTEF_OFFSET equ 03BCh ; GEM Interrupt Vector
INTEF_SEGMENT equ INTEF_OFFSET + 2
;
; The following equates determine the vectors that will be saved
; during a DISPATCH. A core of vectors is always saved these are
; specified by the VEC_LOWCORE and VEC_HIGHCORE equates. Then the
; absolute FIRST and LAST vectors that will ever be preserved are
; specified by VEC_MINSAVE and VEC_MAXSAVE.
;
; The VEC_DEFAULT equate specifies the default range of equates
; that will be saved if this value is not over-ridden.
;
VEC_MINSAVE equ 05h ; Concurrent Saves 0 to 4
VEC_MAXSAVE equ 0FFh ; Brief 2.01 Uses vectors > F0h
VEC_LOWCORE equ 05h
VEC_HIGHCORE equ 32h
VEC_LOWSPECIAL equ 70h ; 70h-77h are hardware vectors on PC
VEC_HIGHSPECIAL equ 77h ; and so are specially saved/restored
VEC_DEFAULT equ (VEC_HIGHCORE * 0100h) + VEC_LOWCORE