]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/MODE/MODECPEQ.INC

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / CMD / MODE / MODECPEQ.INC
1 ; MODECPEQ.INC - INCLUDED IN MODECP.SAL \ f
2 IF1
3 %OUT INCLUDE MODECPEQ.INC ;MACROS,DOS EQUATES,STRUCS,OTHER EQUATES
4 ENDIF
5
6 ; $SALUT CP(4,9,17,32)
7 HEADER MACRO TEXT,EJECT
8 ;;example: header <new subtitle goes here>
9 ;;the angle brackets are required
10 .XLIST
11 SUBTTL TEXT
12 IFB <EJECT>
13 .LIST
14 ENDIF
15 PAGE
16 ENDM
17
18 ; - - - - - - - - - - - - - - - - - - - -
19 ; $SALUT CP(2,28,40,47)
20
21 DOSCALL MACRO FUNC,SUBFUNC
22 ;;IF SUBFUNC IS USED, THEN FUNC MUST BE USED
23 IFNB <FUNC> ;IS THERE ANY PARMS AT ALL?
24 IFNB <SUBFUNC>
25 MOV AX,(FUNC SHL 8) + SUBFUNC
26 ELSE ;;SINCE THERE IS NO SUBFUNC
27 MOV AH,FUNC
28 ENDIF
29 ENDIF
30 INT 21H
31 ENDM
32
33 ; - - - - - - - - - - - - - - - - - - - -
34 ; $SALUT CP(4,21,26,32)
35
36 ; DOS FUNCTION CALLS
37 PRINTSTR EQU 09H ;PRINT STRING ENDING WITH "$"
38 ;DS:DX = POINTER TO STRING
39
40 SET_VECTOR EQU 25H ;SET INTERRUPT VECTOR
41 ;DS:DX = VECTOR TO INT HANDLER
42 ;AL = INTERRUPT NUMBER
43
44 DOS_VERSION EQU 30H ;DETERMINE VERSION OF DOS
45 ;OUTPUT: AL=MAJOR, AH=MINOR VERSION NUMBER
46 ; BX AND CX SET TO ZERO
47
48 BREAK_CHECK EQU 33H ;CNTRL-BREAK CHECK
49 ;AL=0 - REQUEST CURRENT STATE
50 ;AL=1 - SET CURRENT STATE
51 ;DL=0 - BREAK OFF
52 ;DL=1 - BREAK ON
53
54 GET_VECTOR EQU 35H ;GET INTERRUPT VECTOR
55 ;AL = INTRRUPT NUMBER
56 ;OUTPUT: ES:BX = CONTENTS OF VECTOR
57
58 OPEN EQU 3DH ;OPEN FILE FOR INPUT
59 ;DS:DX = POINTER TO ASCIIZ PATH NAME
60 ;AL = OPEN MODE
61
62 CLOSE EQU 3EH ;CLOSE A FILE HANDLE
63 ;BX = HANDLE RETURNED BY OPEN OR CREATE
64
65 READ EQU 3FH ;READ FROM A FILE OR DEVICE
66 ;BX = FILE HANDLE
67 ;DS:DX = BUFFER ADDRESS
68 ;CX NUMBER OF BYTES TO READ
69
70 WRITE EQU 40H ;WRITE TO A FILE OR DEVICE
71 ;BX = FILE HANDLE
72 ;DS:DX = ADDRESS OF DATA TO WRITE
73 ;CX = NUMBER OF BYTES TO WRITE
74
75
76 LSEEK EQU 42H ;MOVE FILE READ/WRITE POINTER
77 ;CX:DX - DISTANCE TO MOVE IN BYTES
78 ;BX = FILE HANDLE
79 ;AL = METHOD OF MOVING:
80 ; 00 - MOVE CX:DX BYTES FROM BEGINNING
81 ; 01 - MOVE TO CURRENT LOCATION + OFFSET
82 ; 02 - MOVE TO END OF FILE
83 ;OUTPUT:DX:AX NEW POINTER LOCATION
84
85 IOCTL EQU 44H ;I/O CONTROL FOR DEVICES
86 ;DS:DX = DATA OR BUFFER
87 ;CX = NUMBER OF BYTES TO READ OR WRITE
88 ;BX = FILE HANDLE, OR,
89 ;BL = DRIVE NUMBER (0=DEFAULT,1=A,...)
90 ;AL = FUNCTION VALUE
91 ;OUTPUT: AX=NO. BYTES TRANSFERRED
92 ; OR ERROR CODE IS CY SET
93
94 ALLOC_MEM EQU 48H ;ALLOCATE MEMORY
95 ;BX = NUMBER OF PARAGRAPHS REQUESTED
96 ;OUTPUT: IF NO CARRY, AX:0 POINTS TO
97 ; ALLOCATED MEMORY BLOCK
98 ; IF CARRY, BX IS SIZE OF LARGEST BLOCK
99 ; AVAILABLE, IN PARAGRAPHS, AX=ERR CODE
100
101 FREE_AL_MEM EQU 49H ;FREE ALLOCATED MEM
102 ;ES=SEG OF BLOCK BEING RETURNED
103 ;OUTPUT: AX=ERROR CODE IF CY SET
104
105 EXTERROR EQU 59H ;EXTENDED ERROR
106 ;BX = 30 VERSION NUMBER (FOR 3.30)
107 ;OUTPUT:
108 ;AX=EXTENDED ERROR
109 ;BH=ERROR CLASS
110 ;BL=SUGGESTED ACTION
111 ;CH=LOCUS
112
113 ; (THESE VALUES GO TO AX FOR INT 21H)
114 SET_GLOBAL_CP EQU 6602H ;INPUTS:
115 ; BX=CODE PAGE,
116
117 GET_GLOBAL_CP EQU 6601H ;RESULTS:
118 ; BX=ACTIVE CODE PAGE,
119 ; DX=SYSTEM CODE PAGE
120
121 GENERIC_IOCTL EQU 440CH ;INPUTS:
122 ; CH AND CL SET AS DEFINED IN NEXT 2 SECTIONS
123 ; IN GENERAL, CH=CATEGORY CODE (MAJOR CODE)
124 ; CL=FUNCTION WITHIN CATEGORY (MINOR CODE)
125
126 ; MAJOR CODES:
127 ; (THESE VALUES GO TO CH REG DURING GENERIC IOCTL:
128 UNK_DEV_TYPE EQU 00H ;USED IF TYPE NOT KNOWN
129 COM_DEV_TYPE EQU 01H ;COMx DEVICE TYPE
130 CON_DEV_TYPE EQU 03H ;CONSOLE DEVICE TYPE
131 LPT_DEV_TYPE EQU 05H ;LPTx DEVICE TYPE
132 GLOBAL_CP EQU -1 ;GLOBAL CODEPAGE, INDICATED BY DEVICE="*",
133 ; NOT USED WITH GENERIC IOCTL
134
135 ; MINOR CODES:
136 ; SUBFUNCTIONS OF GENERIC_IOCTL:
137 ; (THESE VALUES GO TO CL REG)
138 PREPARE_STRT EQU 4CH ;INPUTS:
139 ;BX=HANDLE, AX="GENERIC_IOCTL"
140 ;CX=xxx_DEV_TYPE * 256 + "PREPARE_STRT"
141 ;DS:DX=DATA BUFFER "DES_STRT_PACKET"
142
143 PREPARE_END EQU 4DH ;INPUTS:
144 ;BX=HANDLE, AX="GENERIC_IOCTL"
145 ; DS:DX=DATA BUFFER "PACKET"
146
147 SELECT_CP EQU 4AH ;INPUTS:
148 ;BX=HANDLE, AX="GENERIC_IOCTL"
149 ; DS:DX=DATA BUFFER "PACKET"
150
151 QUERY_SELECTED EQU 6AH ;INPUTS:
152 ;BX=HANDLE, AX="GENERIC_IOCTL"
153 ; DS:DX=DATA BUFFER "PACKET"
154
155 QUERY_DES_LST EQU 6BH ;INPUTS:
156 ;BX=HANDLE, AX="GENERIC_IOCTL"
157 ; DS:DX=DATA BUFFER
158
159 ; OTHER EQUATES
160 IOCTL_WRITE EQU 3 ;VAL FOR AL, WHEN WRITING TO DEVICE VIA IOCTL
161 FILE_OPEN_MODE EQU 0 ;BIT FIELDS ARE ISSSRAAA WHERE:
162 ; I=0 FILE IS INHERITED BY CHILD PROCESS
163 ; (OF WHICH THERE ISN'T ANY)
164 ; SSS=SHARING MODE IS "COMPATABILITY MODE"
165 ; R=0 (RESERVED)
166 ; AAA=0 (READ ACCESS)
167 DEV_OPEN_MODE EQU 2 ;SAME BITS AS ABOVE, EXCEPT AAA=010, READ/WRITE ACCESS
168
169 FALSE EQU 0 ;INDICATES AN ERROR TO ERRORLEVEL
170 TRUE EQU 0FFH
171
172 refresh_request EQU 0 ;scaler to indicate that the current request is refresh for 'des_end'
173
174 STDERR EQU 2 ;PRE-OPENED HANDLE FOR STANDARD ERROR
175 STDOUT EQU 1 ;PRE-OPENED HANDLE FOR STANDARD OUTPUT
176
177 INT24 EQU 24H ;CRITICAL ERROR HANDLER VECTOR
178 EMPTY EQU -1 ;EMPTY SLOT IN LIST OF CODEPAGES
179
180 IOCTL_FUN_GET_INFO EQU 0 ;GET DEVICE INFORMATION (RETURNED IN DX) FROM IOCTL
181 IOCTL_FUN_SET_INFO EQU 1 ;SET DEVICE INFORMATION (PASSED IN DX) TO IOCTL
182 ISDEVICE EQU 0080H ;FLAG IN DEVICE INFO WORD, RETURNED IN DX
183 BINARY_DEV EQU 0020H ;BINARY FLAG IN DEVICE INFO WORD
184
185 MAPERR EQU 19 ;ERRORS FROM DEVICES MAPPED TO COMMON ERRORS,
186 ; AS DEVICE ERR=0 IS REPORTED AS COM ERROR=19
187 FAIL24 EQU 83 ;RET CODE, INT 24 HANDLER REQUESTED "FAIL"
188
189 ;PREPARE START ERROR CODES:
190 DS_ERR0 EQU 0 ;PREVIOUS PREPARE DELETED
191 DS_ERR1 EQU 1 ;INVALID FUNCTION NUMBER
192 DS_ERR8 EQU 8 ;CODE PAGE CONFLICT (USED FOR KEYB XX MISMATCH)
193 DS_ERRA EQU 0AH ;DEVICE ERROR
194 DS_ERR16 EQU 016H ;UNKNOWN COMMAND (22 DECIMAL)
195
196 ;PREPARE WRITE ERROR CODES:
197 DW_ERR8 EQU 8 ;DEVICE NOT FOUND IN FILE ,OR
198 ;CODE PAGE NOT FOUND IN FILE
199 DW_ERRA EQU 0AH ;DEVICE ERROR
200 DW_ERRC EQU 0CH ; FILE CONTENTS NOT A FONT FILE,
201 ; OR FILE CONTENTS STRUCTURE DAMAGED
202
203 ;PREPARE END ERROR CODES:
204 DE_ERRC EQU 0CH ;NO PREPARE START
205
206 ;SELECT ERROR CODES:
207 IN_ERR7 EQU 07H ;CODE PAGE NOT PREPARED
208 IN_ERR8 EQU 08H ;CURRENT KEYB DOES NOT SUPPORT THIS CP
209 IN_ERRA EQU 0AH ;DEVICE ERROR
210
211 ;QUERY SELECTED ERROR CODES:
212 QS_ERR7 EQU 07H ;NO CODE PAGE HAS BEEN SELECTED
213 QS_ERRA EQU 0AH ;DEVICE ERROR
214
215 ;QUERY PREPARED LIST ERROR CODES:
216 QL_ERR7 EQU 07H ; NO CODE PAGES HAVE BEEN SELECTED
217 QL_ERRA EQU 0AH ;DEVICE ERROR
218
219 ;REFRESH ERROR CODES RETURNED FROM PREPARE START FOR A REFRESH REQUEST:
220
221 RS_ERR8 EQU 8 ;KEYBOARD/CODE PAGE CONFLICT
222 RS_ERRA EQU 0AH ;DEVICE ERROR
223 RS_ERRC EQU 0CH ;DEVICE DRIVER DOES NOT HAVE COPY OF CODE PAGE
224 ; TO DOWNLOAD TO DEVICE
225
226 ;ERROR CODES PRESENTED IN THE LOWER HALF OF DI TO THE INT 24H HANDLER:
227 ;CRERR0 EQU 0 ;ATTEMPT TO WRITE ON WRITE_PROTECTED DISKETTE
228 ;CRERR1 EQU 1 ;UNKNOWN UNIT
229 ;CRERR2 EQU 2 ;DRIVE NOT READY
230 ;CRERR3 EQU 3 ;UNKNOWN COMMAND
231 ;CRERR4 EQU 4 ;DATA ERROR (crc)
232 ;CRERR5 EQU 5 ;BAD REQUEST STRUCTURE LENGTH
233 ;CRERR6 EQU 6 ;SEEK ERROR
234 ;CRERR7 EQU 7 ;UNKNOWN MEDIA TYPE
235 ;CRERR8 EQU 8 ;SECTOR NOT FOUND
236 ;CRERR9 EQU 9 ;PRINTER OUT OF PAPER
237 ;CRERRA EQU 0AH ;WRITE FAULT
238 ;CRERRB EQU 0BH ;READ FAULT
239 ;CRERRC EQU 0CH ;GENERAL FAILURE
240
241 ;EXIT CODES, IN AL, WHEN IRET FROM INT 24H ERROR HANDLER.
242 CRERR_IGNORE EQU 0 ;IGNORE THE ERROR
243 CRERR_RETRY EQU 1 ;RETRY THE OPERATION
244 CRERR_TERM EQU 2 ;TERMINATE PROGRAM VIA INT 23H
245 CRERR_FAIL EQU 3 ;FAIL THE SYSTEM CALL IN PROGRESS
246
247 ; EQUATES FOR THE BREAK CHECK FUNCTION:
248
249 ;IN AL:
250 REQUEST_BREAK_STATE EQU 0
251 SET_BREAK_STATE EQU 1
252
253 ;IN DL:
254 BREAK_OFF EQU 0
255 BREAK_ON EQU 1
256
257 DBCS_header EQU ES:[DI] ;used to address DBCS_head
258 DBCS_table EQU DS:[SI] ;used to address the DBCS vector table
259
260 ; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
261 ; DEFINITIONS OF CONTROL BLOCKS
262
263 FON STRUC ;CODEPAGE FONT FILE CONTENTS
264 FONTAG DB 0FFH,"FONT " ;FILE TAG
265 DB 8 DUP(?) ;RESERVED
266 FONPTCT DW ? ;COUNT OF POINTERS IN HEADER
267 FONPT DB ? ;START OF ARRAY OF POINTERS
268 FON ENDS
269
270 ; THIS STRUC MAPS AN AREA POINTED TO BY "CP_CB", AN EXTRN
271 ;AC001;CODEPAGE_PARMS STRUC
272 ;AC001;DEVICE DW ? ;POINTER TO ASCIIZ STRING OF DEVICE NAME
273 ;AC001;DES_PACK_PTR DW ? ;OFFSET TO "DES_STRT_PACKET"
274 ;AC001;FONT_FILESPEC DW ? ;PATH AND FILESPEC OF FONT FILE
275 ;AC001;REQUEST_TYPE DW ? ;TYPE OF FUNCTION TO BE PERFORMED
276 ;AC001;CODEPAGE_PARMS ENDS
277 ; DEFINITIONS OF VALUES FOUND IN "REQUEST_TYPE" ABOVE:
278 EXTRN SELECT:ABS
279 EXTRN PREPARE:ABS
280 EXTRN REFRESH:ABS
281
282 ; "PACKET" POINTED TO BY DS:DX
283 PACKET STRUC ;USED BY MINOR CODES: 6AH,4AH,4DH (SELECT, QUERY SELECTED, PREPARE END)
284 PACKLEN DW 2 ;LENGTH OF PACKET IN BYTES, FOR DBCS COUNTRIES, LENGTH OF DBCS TABLE (IF NON-ZERO) WILL be added
285 PACKCPID DW 0 ;CODE PAGE ID
286 PACKVECTOR1 DB 0 ;start of vector list if included ;AN000;
287 DB 0 ;AN000;
288 DB 0 ;AN000;
289 DB 0 ;AN000;
290 DB 0 ;AN000;
291 DB 0 ;AN000;
292 DB 0 ;AN000;
293 DB 0 ;AN000;
294 DB 0 ;AN000;
295 DB 0 ;AN000;
296 DB 0 ;AN000;
297 DB 0 ;AN000;
298 DB 0 ;AN000;
299 DB 0 ;AN000;
300 DB 0 ;AN000;
301 DB 0 ;AN000;
302 DB 0 ;AN000;
303 DB 0 ; holders for maximum possible number of ;AN000;
304 DB 0 ; DBCS vector pairs ;AN000;
305 DB 0 ; ;AN000;
306 DB 0 ; ;AN000;
307 DB 0 ; ;AN000;
308 PACKVECTOR12 DB 0 ; ;AN000;
309 DB 0 ; ;AN000;
310 PACKET ENDS ;AN000;
311 ;AN000;
312 DBCS_head STRUC ;return from function 6507, pointed to by ES:DI, addressed via "DBCS_header" ;AN000;
313 info_id DB 7 ;AN000;
314 table_ptr DD 0 ;used to address DBCS_tabl ;AN000;
315 DBCS_head ENDS
316 ;AN000;
317 DBCS_tabl STRUC ;map of DBCS table, addressed via DBCS_table ;AN000;
318 table_len DW 6 ;length in bytes of the list of vectors ;AN000;
319 vector1 DB 0 ;start of vector list ;AN000;
320 DB 0 ;AN000;
321 DB 0 ;AN000;
322 DB 0 ;AN000;
323 DB 0 ;AN000;
324 DB 0 ;AN000;
325 DB 0 ;AN000;
326 DB 0 ;AN000;
327 DB 0 ;AN000;
328 DB 0 ;AN000;
329 DB 0 ;each vector is two bytes, a start value and an ;AN000;
330 DB 0 ;end value ;AN000;
331 DB 0 ;AN000;
332 DB 0 ;AN000;
333 DB 0 ;AN000;
334 DB 0 ;AN000;
335 DB 0 ;AN000;
336 DB 0 ;AN000;
337 DB 0 ;AN000;
338 DB 0 ;AN000;
339 DB 0 ;AN000;
340 DB 0 ;AN000;
341 DB 0 ;AN000;
342 DB 0 ;AN000;
343 DBCS_tabl ENDS
344
345
346 ; "DES_STRT_PACKET" POINTED TO BY DS:DX
347 DES_STRT_PACKET STRUC
348 DES_STRT_PKFL DW ? ;FLAGS (DEFINED BELOW STRUC DEFINITION)
349 DES_STRT_PKLEN DW ? ;BYTE LENGTH OF REST OF THE PACKET,
350 ; NOT INCLUDING THIS LENGTH FIELD
351 DES_STRT_PKNUM DW ? ;NUMBER OF CODEPAGES IN FOLLOWING LIST
352 DES_STRT_PKCP1 DW ? ;CODE PAGE ONE
353 DES_STRT_PKCP2 DW ? ;CODE PAGE TWO
354 ; : : : :
355 DES_STRT_PKCPN DW ? ;CODE PAGE n
356 ;NOTE: THESE n CODEPAGES MAY HAVE A -1 VALUE, WHICH IS TREATED AS A PLACEHOLDER
357 ; TO ALLOW POSITION CONTROL FOR EACH CODEPAGE VALUE IN THE LIST.
358 DES_STRT_PACKET ENDS
359
360 ; DEFINITIONS OF CONTENTS OF "DES_STRT_PKFL"
361 DES_STRT_FL_SINGLE EQU 8000H ; 8000H=SINGLE CP FIFO PREPARE
362 ; (NOT SUPPORTED, ONLY LIST FORM IN DOS 3.30 RELEASE)
363 DES_STRT_FL_CART EQU 0001H ; 0001H=CARTRIDGE PREPARE
364
365 ; ED OF MODECPEQ.INC FILE