summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/MODE/MODECPEQ.INC
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/CMD/MODE/MODECPEQ.INC
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/CMD/MODE/MODECPEQ.INC')
-rw-r--r--v4.0/src/CMD/MODE/MODECPEQ.INC365
1 files changed, 365 insertions, 0 deletions
diff --git a/v4.0/src/CMD/MODE/MODECPEQ.INC b/v4.0/src/CMD/MODE/MODECPEQ.INC
new file mode 100644
index 0000000..b91be28
--- /dev/null
+++ b/v4.0/src/CMD/MODE/MODECPEQ.INC
@@ -0,0 +1,365 @@
1; MODECPEQ.INC - INCLUDED IN MODECP.SAL 
2 IF1
3 %OUT INCLUDE MODECPEQ.INC ;MACROS,DOS EQUATES,STRUCS,OTHER EQUATES
4 ENDIF
5
6; $SALUT CP(4,9,17,32)
7HEADER MACRO TEXT,EJECT
8;;example: header <new subtitle goes here>
9;;the angle brackets are required
10.XLIST
11 SUBTTL TEXT
12IFB <EJECT>
13.LIST
14ENDIF
15 PAGE
16 ENDM
17
18; - - - - - - - - - - - - - - - - - - - -
19; $SALUT CP(2,28,40,47)
20
21DOSCALL 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
37PRINTSTR EQU 09H ;PRINT STRING ENDING WITH "$"
38 ;DS:DX = POINTER TO STRING
39
40SET_VECTOR EQU 25H ;SET INTERRUPT VECTOR
41 ;DS:DX = VECTOR TO INT HANDLER
42 ;AL = INTERRUPT NUMBER
43
44DOS_VERSION EQU 30H ;DETERMINE VERSION OF DOS
45 ;OUTPUT: AL=MAJOR, AH=MINOR VERSION NUMBER
46 ; BX AND CX SET TO ZERO
47
48BREAK_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
54GET_VECTOR EQU 35H ;GET INTERRUPT VECTOR
55 ;AL = INTRRUPT NUMBER
56 ;OUTPUT: ES:BX = CONTENTS OF VECTOR
57
58OPEN EQU 3DH ;OPEN FILE FOR INPUT
59 ;DS:DX = POINTER TO ASCIIZ PATH NAME
60 ;AL = OPEN MODE
61
62CLOSE EQU 3EH ;CLOSE A FILE HANDLE
63 ;BX = HANDLE RETURNED BY OPEN OR CREATE
64
65READ 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
70WRITE 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
76LSEEK 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
85IOCTL 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
94ALLOC_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
101FREE_AL_MEM EQU 49H ;FREE ALLOCATED MEM
102 ;ES=SEG OF BLOCK BEING RETURNED
103 ;OUTPUT: AX=ERROR CODE IF CY SET
104
105EXTERROR 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)
114SET_GLOBAL_CP EQU 6602H ;INPUTS:
115 ; BX=CODE PAGE,
116
117GET_GLOBAL_CP EQU 6601H ;RESULTS:
118 ; BX=ACTIVE CODE PAGE,
119 ; DX=SYSTEM CODE PAGE
120
121GENERIC_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:
128UNK_DEV_TYPE EQU 00H ;USED IF TYPE NOT KNOWN
129COM_DEV_TYPE EQU 01H ;COMx DEVICE TYPE
130CON_DEV_TYPE EQU 03H ;CONSOLE DEVICE TYPE
131LPT_DEV_TYPE EQU 05H ;LPTx DEVICE TYPE
132GLOBAL_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)
138PREPARE_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
143PREPARE_END EQU 4DH ;INPUTS:
144 ;BX=HANDLE, AX="GENERIC_IOCTL"
145 ; DS:DX=DATA BUFFER "PACKET"
146
147SELECT_CP EQU 4AH ;INPUTS:
148 ;BX=HANDLE, AX="GENERIC_IOCTL"
149 ; DS:DX=DATA BUFFER "PACKET"
150
151QUERY_SELECTED EQU 6AH ;INPUTS:
152 ;BX=HANDLE, AX="GENERIC_IOCTL"
153 ; DS:DX=DATA BUFFER "PACKET"
154
155QUERY_DES_LST EQU 6BH ;INPUTS:
156 ;BX=HANDLE, AX="GENERIC_IOCTL"
157 ; DS:DX=DATA BUFFER
158
159; OTHER EQUATES
160IOCTL_WRITE EQU 3 ;VAL FOR AL, WHEN WRITING TO DEVICE VIA IOCTL
161FILE_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)
167DEV_OPEN_MODE EQU 2 ;SAME BITS AS ABOVE, EXCEPT AAA=010, READ/WRITE ACCESS
168
169FALSE EQU 0 ;INDICATES AN ERROR TO ERRORLEVEL
170TRUE EQU 0FFH
171
172refresh_request EQU 0 ;scaler to indicate that the current request is refresh for 'des_end'
173
174STDERR EQU 2 ;PRE-OPENED HANDLE FOR STANDARD ERROR
175STDOUT EQU 1 ;PRE-OPENED HANDLE FOR STANDARD OUTPUT
176
177INT24 EQU 24H ;CRITICAL ERROR HANDLER VECTOR
178EMPTY EQU -1 ;EMPTY SLOT IN LIST OF CODEPAGES
179
180IOCTL_FUN_GET_INFO EQU 0 ;GET DEVICE INFORMATION (RETURNED IN DX) FROM IOCTL
181IOCTL_FUN_SET_INFO EQU 1 ;SET DEVICE INFORMATION (PASSED IN DX) TO IOCTL
182ISDEVICE EQU 0080H ;FLAG IN DEVICE INFO WORD, RETURNED IN DX
183BINARY_DEV EQU 0020H ;BINARY FLAG IN DEVICE INFO WORD
184
185MAPERR EQU 19 ;ERRORS FROM DEVICES MAPPED TO COMMON ERRORS,
186 ; AS DEVICE ERR=0 IS REPORTED AS COM ERROR=19
187FAIL24 EQU 83 ;RET CODE, INT 24 HANDLER REQUESTED "FAIL"
188
189;PREPARE START ERROR CODES:
190DS_ERR0 EQU 0 ;PREVIOUS PREPARE DELETED
191DS_ERR1 EQU 1 ;INVALID FUNCTION NUMBER
192DS_ERR8 EQU 8 ;CODE PAGE CONFLICT (USED FOR KEYB XX MISMATCH)
193DS_ERRA EQU 0AH ;DEVICE ERROR
194DS_ERR16 EQU 016H ;UNKNOWN COMMAND (22 DECIMAL)
195
196;PREPARE WRITE ERROR CODES:
197DW_ERR8 EQU 8 ;DEVICE NOT FOUND IN FILE ,OR
198 ;CODE PAGE NOT FOUND IN FILE
199DW_ERRA EQU 0AH ;DEVICE ERROR
200DW_ERRC EQU 0CH ; FILE CONTENTS NOT A FONT FILE,
201 ; OR FILE CONTENTS STRUCTURE DAMAGED
202
203;PREPARE END ERROR CODES:
204DE_ERRC EQU 0CH ;NO PREPARE START
205
206;SELECT ERROR CODES:
207IN_ERR7 EQU 07H ;CODE PAGE NOT PREPARED
208IN_ERR8 EQU 08H ;CURRENT KEYB DOES NOT SUPPORT THIS CP
209IN_ERRA EQU 0AH ;DEVICE ERROR
210
211;QUERY SELECTED ERROR CODES:
212QS_ERR7 EQU 07H ;NO CODE PAGE HAS BEEN SELECTED
213QS_ERRA EQU 0AH ;DEVICE ERROR
214
215;QUERY PREPARED LIST ERROR CODES:
216QL_ERR7 EQU 07H ; NO CODE PAGES HAVE BEEN SELECTED
217QL_ERRA EQU 0AH ;DEVICE ERROR
218
219;REFRESH ERROR CODES RETURNED FROM PREPARE START FOR A REFRESH REQUEST:
220
221RS_ERR8 EQU 8 ;KEYBOARD/CODE PAGE CONFLICT
222RS_ERRA EQU 0AH ;DEVICE ERROR
223RS_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.
242CRERR_IGNORE EQU 0 ;IGNORE THE ERROR
243CRERR_RETRY EQU 1 ;RETRY THE OPERATION
244CRERR_TERM EQU 2 ;TERMINATE PROGRAM VIA INT 23H
245CRERR_FAIL EQU 3 ;FAIL THE SYSTEM CALL IN PROGRESS
246
247; EQUATES FOR THE BREAK CHECK FUNCTION:
248
249;IN AL:
250REQUEST_BREAK_STATE EQU 0
251SET_BREAK_STATE EQU 1
252
253;IN DL:
254BREAK_OFF EQU 0
255BREAK_ON EQU 1
256
257DBCS_header EQU ES:[DI] ;used to address DBCS_head
258DBCS_table EQU DS:[SI] ;used to address the DBCS vector table
259
260; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
261; DEFINITIONS OF CONTROL BLOCKS
262
263FON STRUC ;CODEPAGE FONT FILE CONTENTS
264FONTAG DB 0FFH,"FONT " ;FILE TAG
265 DB 8 DUP(?) ;RESERVED
266FONPTCT DW ? ;COUNT OF POINTERS IN HEADER
267FONPT DB ? ;START OF ARRAY OF POINTERS
268FON 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
283PACKET STRUC ;USED BY MINOR CODES: 6AH,4AH,4DH (SELECT, QUERY SELECTED, PREPARE END)
284PACKLEN DW 2 ;LENGTH OF PACKET IN BYTES, FOR DBCS COUNTRIES, LENGTH OF DBCS TABLE (IF NON-ZERO) WILL be added
285PACKCPID DW 0 ;CODE PAGE ID
286PACKVECTOR1 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;
308PACKVECTOR12 DB 0 ; ;AN000;
309 DB 0 ; ;AN000;
310PACKET ENDS ;AN000;
311 ;AN000;
312DBCS_head STRUC ;return from function 6507, pointed to by ES:DI, addressed via "DBCS_header" ;AN000;
313info_id DB 7 ;AN000;
314table_ptr DD 0 ;used to address DBCS_tabl ;AN000;
315DBCS_head ENDS
316 ;AN000;
317DBCS_tabl STRUC ;map of DBCS table, addressed via DBCS_table ;AN000;
318table_len DW 6 ;length in bytes of the list of vectors ;AN000;
319vector1 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;
343DBCS_tabl ENDS
344
345
346; "DES_STRT_PACKET" POINTED TO BY DS:DX
347DES_STRT_PACKET STRUC
348DES_STRT_PKFL DW ? ;FLAGS (DEFINED BELOW STRUC DEFINITION)
349DES_STRT_PKLEN DW ? ;BYTE LENGTH OF REST OF THE PACKET,
350 ; NOT INCLUDING THIS LENGTH FIELD
351DES_STRT_PKNUM DW ? ;NUMBER OF CODEPAGES IN FOLLOWING LIST
352DES_STRT_PKCP1 DW ? ;CODE PAGE ONE
353DES_STRT_PKCP2 DW ? ;CODE PAGE TWO
354; : : : :
355DES_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.
358DES_STRT_PACKET ENDS
359
360; DEFINITIONS OF CONTENTS OF "DES_STRT_PKFL"
361DES_STRT_FL_SINGLE EQU 8000H ; 8000H=SINGLE CP FIFO PREPARE
362; (NOT SUPPORTED, ONLY LIST FORM IN DOS 3.30 RELEASE)
363DES_STRT_FL_CART EQU 0001H ; 0001H=CARTRIDGE PREPARE
364
365; ED OF MODECPEQ.INC FILE