2 %OUT COMPONENT=TREE, MODULE=TREEQU.INC...;AN000;
4 ; $SALUT (4,19,24,36) ; ;AN000;
5 ; DOS FUNCTION CALLS, USING INT 21H
7 SELECT_DISK EQU 0EH ;AN000;SETS DEFAULT DRIVE
8 ; DL=DRIVE NUMBER (0=A,1=B)
9 ;OUTPUT: AL=NUMBER OF DRIVES (MIN 5) ???
11 CHDIR EQU 3BH ;AN000;CHANGE CURRENT DIRECTORY
12 ;DS:DX = POINTER TO ASCIIZ STRING
14 CURRDISK EQU 19H ;AN000;GET CURRENT DEFAULT DRIVE
15 ;OUTPUT: AL = CURRENT DRIVE
18 SET_DTA EQU 1AH ;AN000;SET DISK TRANSFER ADDRESS
19 ; DS:DX = DISK TRANSFER ADDRESS
21 SET_VECTOR EQU 25H ;AN000;SET INTERRUPT VECTOR
22 ;DS:DX = VECTOR TO INT HANDLER
23 ;AL = INTERRUPT NUMBER
25 DOS_VERSION EQU 30H ;AN000;DETERMINE VERSION OF DOS
26 ;OUTPUT: AL=MAJOR, AH=MINOR VERSION NUMBER
27 ; BX AND CX SET TO ZER
29 GET_VECTOR EQU 35H ;AN000;GET INTERRUPT VECTOR
31 ;OUTPUT: ES:BX = CONTENTS OF VECTOR
33 WRITE EQU 40H ;AN000;WRITE TO A FILE OR DEVICE
35 ;DS:DX = ADDRESS OF DATA TO WRITE
36 ;CX = NUMBER OF BYTES TO WRITE
38 IOCTL EQU 44H ;AN001;I/O CONTROL FOR DEVICES
39 ;DS:DX = DATA OR BUFFER
40 ;CX = NUMBER OF BYTES TO READ OR WRITE
41 ;BX = FILE HANDLE, OR,
42 ;BL = DRIVE NUMBER (0=DEFAULT,1=A,...)
44 ;OUTPUT: AX=NO. BYTES TRANSFERRED
45 ; OR ERROR CODE IS CY SET
47 BLOCK_GENERIC EQU 0DH ;AN001;AL=SUBFUNCTION, FOR "IOCTL" ABOVE
50 ;CX=0843h=SET MEDIA ID
51 ;CX=0863h GET MEDIA ID ;AN001;
52 ;DS:DX=BUFFER (see A_MEDIA_ID_INFO STRUC)
53 ;CARRY SET ON ERROR (OLD STYLE BOOT RECORD)
55 GET_CUR_DIR EQU 47H ;AN000;GET CURRENT DIRECTORY
56 ;DS:SI = POINTER TO 64 BYTE USER AREA
57 ;DL = DRIVE NUM (0=DEF, 1=A, ETC)
58 ;OUTPUT: DS:SI POINTS TO FULL PATH NAME
60 RET_CD_EXIT EQU 4CH ;AN000;EXIT TO DOS, PASSING RETURN CODE
63 FINDFIRST EQU 4EH ;AN000;FIND FIRST MATCHING FILE
64 ;DS:DX = POINT TO ASCIIZ OF FILENAME
65 ;CX = ATTRIBUTE USED IN SEARCH
66 ;OUTPUT: CURRENT DTA WILL HAVE:
69 ; 2 BYTES - FILE'S TIME
70 ; 2 BYTES - FILE'S DATE
71 ; 2 BYTES - LOW WORD OF FILE SIZE
72 ; 2 BYTES - HIGH WORD OF FILE SIZE
73 ; 13 BYTES - NAME.EXT +0 OF FOUND FILE
74 ATTR_NORMAL EQU 00H ;AN000;NON-SYS, NON-HIDDEN, NON-LABEL FILES
75 ATTR_DIR EQU 10H ;AN000;DIRECTORY FILES ATTRIBUTE
76 ATTR_VOLID EQU 08H ;AN000;VOLUME LABEL
78 FINDNEXT EQU 4FH ;AN000;FIND NEXT MATCHING FILE
79 ;DTA = INFO LEFT FROM FIND FIRST/NEXT
81 EXTERROR EQU 59H ;AN000;EXTENDED ERROR
82 ;BX = 0 (LEVEL NUMBER)
83 ;OUTPUT: AX=EXTENDED ERROR, BH=ERROR CLASS
84 ;BL=SUGGESTED ACTION, CH=LOCUS
85 ;DX,SI,DI,ES,CL,DS DESTROYED
87 DBCS_ENV EQU 63H ;AN012;GET DBCS SUPPORT
88 GET_DBCS_ENV EQU 0 ;AN012;SUBFUNCTION, GET POINTER TO DBCS VECTOR
90 GSET_MEDIA_ID EQU 69H ;AN010;GET or SET MEDIA ID
91 ;BL=DRIVE NUMBER (0=DEFAULT, 1=A,...)
93 GET_ID EQU 0 ;AN010;AL=0 GET MEDIA ID
94 SET_ID EQU 1 ;AN010;AL=1 SET MEDIA ID
95 ;DS:DX=@BUFFER (SEE A_MEDIA_ID_INFO STRUC)
96 ; END OF INT 21H DOS FUNCTIONS
98 ; MULTIPLEXOR (INT 2FH) FUNCTIONS: ;AN000;
99 APPEND_CHECK EQU 0B700H ;AN006;SEE IF APPEND IS INSTALLED
100 ;OUTPUT-AL=0FFH IF INSTALLED
101 APPEND_VERSION EQU 0B702H ;AN006;ASK IF DOS VERSION OF APPEND
102 DOS_APPEND_VER EQU -1 ;AN006;OUTPUT-AX=-1 IF DOS VERSION OF APPEND
104 GET_APPEND EQU 0B706H ;AN000;READ /X STATUS OF APPEND WITH INT 2FH
105 ;OUTPUT-BX= (SEE "APPEND_FLAGS" FOR DEFINITION)
107 SET_APPEND EQU 0B707H ;AN000;SET /X TO APPEND WITH INT 2FH
108 ;INPUT-BX= (SEE "APPEND_FLAGS" FOR DEFINITION)
110 HEADER <LOCAL EQUATES> ;AN000;
113 BACK_SLASH EQU "\" ;AN000;PATH DELIMITER
114 SLASH EQU "/" ;AN000;SWITCH INDICATOR
115 NOPATH EQU 1 ;AN000;LENGTH OF EMPTY PATH, INCL NUL DELIMITER
116 ZERO EQU 0 ;AN000;CLEARS REG, COMPARAND FOR ZERO VALUE
117 DEFDRIVE EQU 0 ;AN000;IN GET_CUR_DIR, DL=0 MEANS DOS DEFAULT DR
118 DRIVEA EQU "A" ;AN000;CORRESPONDS TO DRIVE 00H NUMERICALLY
119 PERIOD EQU "." ;AN000;FILENAME EXTENSION DELIMITER
120 BLANK EQU " " ;AN000;SPACE CHAR
121 FULL_SEG_SIZE EQU -1 ;AN000;SCAN COUNT TO LOOK THRU ENTIRE SEG
122 VEC_CTLBREAK EQU 23H ;AN000;NUMBER OF THE VECTOR POINTING TO CTL-BREAK
123 VEC_CRITERR EQU 24H ;AN000;NUM. OF VECTOR OF CRITICAL ERROR HANDLER
124 MIN_STACK EQU 512 ;AN000;MINIMUM REQUIRED STACK SIZE
125 MAX_PATH EQU 64 ;AN000;MAX LENGTH PERMITTED FOR ANY PATH
126 PUBLIC MAX_PATH ;AN000;LET THE OTHERS IN ON THIS
127 LEVEL_LIMIT EQU MAX_PATH/2 ;AN000;MAX PATH IS 64 CHAR;
128 ; REQUIRES MIN OF 2 CHAR PER PATH
129 DASH_NUM EQU 3 ;AN000;NUMBER OF DASHES BETWEEN ELBO AND
131 FN_SIZE EQU 12 ;AN000;NUMBER CHARS IN FILENAME,PERIOD,EXTENSION
132 FLN_INDENT EQU 0 ;AN000;NUMBER OF BLANKS TO INDENT FILENAME
133 ; UNDER SUBDIRECTORY AFTER THE "DASH_NUM"
134 NIBBLE EQU 4 ;AN000;NUMBER BITS IN HALF A BYTE
135 LEVEL_0 EQU 0 ;AN000;FOR EXTENDED ERROR
136 ABORT EQU 2 ;AN000;"ABORT" FROM CRITICAL ERROR HANDLER
138 ; EXTENDED ERROR NUMBERS
139 NO_MORE_FILES EQU 18 ;AN000;"NO MORE FILES"
140 INSUF_MEM EQU 8 ;AN000;"INSUFFICIENT MEMORY"
141 INVDRSPEC EQU 15 ;AN000;"INVALID DRIVE SPECIFICATION"
142 ; = = = = = = = = = = = =
143 ; SYSTEM MESSAGE HANDLER
144 GRAPHIC_MSGNUM EQU 7 ;AN002;NUMBER OF MESSAGE DEFINING GRAPHIC CHARS
146 ; SUBSET OF "SYSMSG.INC":
147 MSG_SER_CLASS EQU 0 ;AN000;MSG CLASS FOR MESSAGE HANDLER MSGS
148 EXT_ERR_CLASS EQU 1 ;AN000;MSG CLASS FOR EXTENDED ERROR MSGS
149 PARSE_ERR_CLASS EQU 2 ;AN000;MSG CLASS FOR PARSE ERROR MSGS
150 UTILITY_MSG_CLASS EQU 0FFH ;AN000;MSG CLASS FOR UTILTITY DEFINED MSGS
152 ; PRE-ASSIGNED FILE HANDLES:
153 STDIN EQU 0 ;AN000;STANDARD INPUT
154 STDOUT EQU 1 ;AN000;STANDARD OUTPUT
155 STDERR EQU 2 ;AN000;STANDART ERROR
157 NUL EQU 0 ;AN000;DELIMITER TO ANY ASCIIZ STRING
158 CR EQU 0DH ;AN000;CARRIAGE RETURN
159 LF EQU 0AH ;AN000;LINE FEED
160 ; = = = = = = = = = = = =
161 ; ERRORLEVEL RETURN CODES, PASSED BACK TO DOS ON EXIT
162 EXOK EQU 0 ;AN000;NORMAL COMPLETION
163 EXERR EQU 1 ;AN000;I/O ERROR,
164 ; LOAD MESSAGE FAILURE
168 EXABORT EQU 1 ;AN000;CRITICAL ERROR HANDLER ABORTED
169 EXVER EQU 2 ;AN000;BAD DOS VERSION
170 EXCTL EQU 3 ;AN000;CONTROL BREAK
172 ; = = = = = = = = = = = =
173 HEADER <STRUC OF CONTROL BLOCKS> ;AN000;
176 FRAME STRUC ;AN000;DYNAMIC VARIABLES ALLOCATED TO THE STACK
177 FRAM_DTA_RES DB 21 DUP(?) ;AN000;RESERVED FOR FIND NEXT CALLS
179 FRAM_CHAR DB ? ;AN000;CONTAINS ONE OF THESE:
180 ; "GRAF_ELBO" - THIS IS THE LAST SUBDIRECTORY
181 ; "GRAF_TEE" - THERE IS ANOTHER SUBDIRECTORY AFTER THIS ONE
182 ; "GRAF_BLANK" - NO MORE SUBDIRECTORIES
184 FRAM_CURR_PATH DB MAX_PATH+2 DUP(?) ;AN000;CURRENT PATH TO THIS LEVEL OF SUBDIR
186 FRAM_BP DW ? ;AN000;SAVES CALLER'S BP REG
187 FRAM_RET DW ? ;AN000;RETURN ADDRESS
190 WA_SIZE EQU FRAM_BP - FRAM_DTA_RES ;AN000;SIZE OF STACK WORKAREA
191 ; = = = = = = = = = = = =
192 ;THIS MESSAGE DESCRIPTOR CONTROL BLOCK IS GENERATED, ONE PER MESSAGE,
193 ;TO DEFINE THE SEVERAL PARAMETERS THAT ARE EXPECTED TO BE PASSED IN
194 ;CERTAIN REGISTERS WHEN THE SYSDISPMSG FUNCTION IS TO BE INVOKED.
196 MSG_DESC STRUC ;AN000;
197 MSG_NUM DW ? ;AN000;MESSAGE NUMBER (TO AX)
198 MSG_HANDLE DW ? ;AN000;HANDLE OF OUTPUT DEVICE (TO BX)
199 MSG_SUBLIST DW ? ;AN000;POINTER TO SUBLIST (TO SI)
200 MSG_COUNT DW ? ;AN000;SUBSTITUTION COUNT (TO CX)
201 MSG_CLASS DW ? ;AN000;MESSAGE CLASS (IN HIGH BYTE, TO DH)
202 ; LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL)
203 MSG_DESC ENDS ;AN000;
204 ; = = = = = = = = = = = =
205 SUBLIST STRUC ;AN000;
206 SUB_SIZE DB ? ;AN000;SUBLIST SIZE (POINTER TO NEXT SUBLIST)
207 SUB_RES DB ? ;AN000;RESERVED
208 ;NEXT FIELD IS TO BE USED AS A DOUBLE WORD
209 SUB_VALUE DW ? ;AN000;TIME, DATE, OR PTR TO DATA ITEM
210 SUB_VALUE_SEG DW ? ;AN000;SEG ID OF PTR
211 ;(ABOVE FIELD MUST BE FILLED AT EXECUTION TIME
212 ; IF THIS IS A .COM FILE)
213 SUB_ID DB ? ;AN000;N OF %N
214 SUB_FLAGS DB ? ;AN000;DATA TYPE FLAGS
215 SUB_MAX_WIDTH DB ? ;AN000;MAXIMUM FIELD WIDTH (0=UNLIMITED)
216 SUB_MIN_WIDTH DB ? ;AN000;MINIMUM FIELD WIDTH
217 SUB_PAD_CHAR DB ? ;AN000;CHARACTER FOR PAD FIELD
219 ; = = = = = = = = = = = =
220 A_MEDIA_ID_INFO STRUC ;AN001;USED IN GET_MEDIA_ID IN BLOCK GENERIC IOCTL
221 MI_LEVEL DW 0 ;AN001;INFO LEVEL
222 MI_SERIAL DD 0 ;AN001;SERIAL #
223 MI_LABEL DB 11 DUP (' ') ;AN001;VOLUME LABEL
224 MI_SYSTEM DB 8 DUP (' ') ;AN001;FILE SYSTEM TYPE
225 A_MEDIA_ID_INFO ENDS ;AN001;
226 ; = = = = = = = = = = = =