summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/MODE/MODECPEQ.INC
blob: b91be288caa2fdd49d1bd087c6cd7ab3b95a32a0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
; MODECPEQ.INC - INCLUDED IN MODECP.SAL 
	IF1
	    %OUT    INCLUDE MODECPEQ.INC ;MACROS,DOS EQUATES,STRUCS,OTHER EQUATES
	ENDIF

;	$SALUT	CP(4,9,17,32)
HEADER	MACRO	TEXT,EJECT
;;example:  header <new subtitle goes here>
;;the angle brackets are required
.XLIST
	SUBTTL	TEXT
IFB	<EJECT>
.LIST
ENDIF
	PAGE
	ENDM

; - - - - - - - - - - - - - - - - - - - -
;			   $SALUT      CP(2,28,40,47)

DOSCALL 		   MACRO       FUNC,SUBFUNC
;;IF SUBFUNC IS USED, THEN FUNC MUST BE USED
			   IFNB        <FUNC> ;IS THERE ANY PARMS AT ALL?
			     IFNB	 <SUBFUNC>
			       MOV	   AX,(FUNC SHL 8) + SUBFUNC
			     ELSE	      ;;SINCE THERE IS NO SUBFUNC
			       MOV	   AH,FUNC
			     ENDIF
			   ENDIF
			   INT	       21H
			   ENDM

; - - - - - - - - - - - - - - - - - - - -
;		    $SALUT CP(4,21,26,32)

;		DOS FUNCTION CALLS
PRINTSTR	    EQU  09H   ;PRINT STRING ENDING WITH "$"
			       ;DS:DX = POINTER TO STRING

SET_VECTOR	    EQU  25H   ;SET INTERRUPT VECTOR
			       ;DS:DX = VECTOR TO INT HANDLER
			       ;AL = INTERRUPT NUMBER

DOS_VERSION	    EQU  30H   ;DETERMINE VERSION OF DOS
			       ;OUTPUT: AL=MAJOR, AH=MINOR VERSION NUMBER
			       ;	BX AND CX SET TO ZERO

BREAK_CHECK	    EQU  33H   ;CNTRL-BREAK CHECK
			       ;AL=0 - REQUEST CURRENT STATE
			       ;AL=1 - SET CURRENT STATE
			       ;DL=0 - BREAK OFF
			       ;DL=1 - BREAK ON

GET_VECTOR	    EQU  35H   ;GET INTERRUPT VECTOR
			       ;AL = INTRRUPT NUMBER
			       ;OUTPUT: ES:BX = CONTENTS OF VECTOR

OPEN		    EQU  3DH   ;OPEN FILE FOR INPUT
			       ;DS:DX = POINTER TO ASCIIZ PATH NAME
			       ;AL = OPEN MODE

CLOSE		    EQU  3EH   ;CLOSE A FILE HANDLE
			       ;BX = HANDLE RETURNED BY OPEN OR CREATE

READ		    EQU  3FH   ;READ FROM A FILE OR DEVICE
			       ;BX = FILE HANDLE
			       ;DS:DX = BUFFER ADDRESS
			       ;CX NUMBER OF BYTES TO READ

WRITE		    EQU  40H   ;WRITE TO A FILE OR DEVICE
			       ;BX = FILE HANDLE
			       ;DS:DX = ADDRESS OF DATA TO WRITE
			       ;CX = NUMBER OF BYTES TO WRITE


LSEEK		    EQU  42H   ;MOVE FILE READ/WRITE POINTER
			       ;CX:DX - DISTANCE TO MOVE IN BYTES
			       ;BX = FILE HANDLE
			       ;AL = METHOD OF MOVING:
			       ;   00 - MOVE CX:DX BYTES FROM BEGINNING
			       ;   01 - MOVE TO CURRENT LOCATION + OFFSET
			       ;   02 - MOVE TO END OF FILE
			       ;OUTPUT:DX:AX NEW POINTER LOCATION

IOCTL		    EQU  44H   ;I/O CONTROL FOR DEVICES
			       ;DS:DX = DATA OR BUFFER
			       ;CX = NUMBER OF BYTES TO READ OR WRITE
			       ;BX = FILE HANDLE, OR,
			       ;BL = DRIVE NUMBER (0=DEFAULT,1=A,...)
			       ;AL = FUNCTION VALUE
			       ;OUTPUT: AX=NO. BYTES TRANSFERRED
			       ; OR ERROR CODE IS CY SET

ALLOC_MEM	    EQU  48H   ;ALLOCATE MEMORY
			       ;BX = NUMBER OF PARAGRAPHS REQUESTED
			       ;OUTPUT: IF NO CARRY, AX:0 POINTS TO
			       ; ALLOCATED MEMORY BLOCK
			       ; IF CARRY, BX IS SIZE OF LARGEST BLOCK
			       ; AVAILABLE, IN PARAGRAPHS, AX=ERR CODE

FREE_AL_MEM	    EQU  49H   ;FREE ALLOCATED MEM
			       ;ES=SEG OF BLOCK BEING RETURNED
			       ;OUTPUT: AX=ERROR CODE IF CY SET

EXTERROR	    EQU  59H   ;EXTENDED ERROR
			       ;BX = 30 VERSION NUMBER (FOR 3.30)
			       ;OUTPUT:
			       ;AX=EXTENDED ERROR
			       ;BH=ERROR CLASS
			       ;BL=SUGGESTED ACTION
			       ;CH=LOCUS

;		(THESE VALUES GO TO AX FOR INT 21H)
SET_GLOBAL_CP	    EQU  6602H ;INPUTS:
			       ; BX=CODE PAGE,

GET_GLOBAL_CP	    EQU  6601H ;RESULTS:
			       ; BX=ACTIVE CODE PAGE,
			       ; DX=SYSTEM CODE PAGE

GENERIC_IOCTL	    EQU  440CH ;INPUTS:
			       ; CH AND CL SET AS DEFINED IN NEXT 2 SECTIONS
			       ; IN GENERAL, CH=CATEGORY CODE (MAJOR CODE)
			       ; CL=FUNCTION WITHIN CATEGORY (MINOR CODE)

;			MAJOR CODES:
;		(THESE VALUES GO TO CH REG DURING GENERIC IOCTL:
UNK_DEV_TYPE	    EQU  00H   ;USED IF TYPE NOT KNOWN
COM_DEV_TYPE	    EQU  01H   ;COMx DEVICE TYPE
CON_DEV_TYPE	    EQU  03H   ;CONSOLE DEVICE TYPE
LPT_DEV_TYPE	    EQU  05H   ;LPTx DEVICE TYPE
GLOBAL_CP	    EQU  -1    ;GLOBAL CODEPAGE, INDICATED BY DEVICE="*",
			       ; NOT USED WITH GENERIC IOCTL

;			MINOR CODES:
;		SUBFUNCTIONS OF GENERIC_IOCTL:
;		(THESE VALUES GO TO CL REG)
PREPARE_STRT	    EQU  4CH   ;INPUTS:
			       ;BX=HANDLE, AX="GENERIC_IOCTL"
			       ;CX=xxx_DEV_TYPE * 256 + "PREPARE_STRT"
			       ;DS:DX=DATA BUFFER "DES_STRT_PACKET"

PREPARE_END	    EQU  4DH   ;INPUTS:
			       ;BX=HANDLE, AX="GENERIC_IOCTL"
			       ; DS:DX=DATA BUFFER "PACKET"

SELECT_CP	    EQU  4AH   ;INPUTS:
			       ;BX=HANDLE, AX="GENERIC_IOCTL"
			       ; DS:DX=DATA BUFFER "PACKET"

QUERY_SELECTED	    EQU  6AH   ;INPUTS:
			       ;BX=HANDLE, AX="GENERIC_IOCTL"
			       ; DS:DX=DATA BUFFER "PACKET"

QUERY_DES_LST	    EQU  6BH   ;INPUTS:
			       ;BX=HANDLE, AX="GENERIC_IOCTL"
			       ; DS:DX=DATA BUFFER

;		      OTHER EQUATES
IOCTL_WRITE	    EQU  3     ;VAL FOR AL, WHEN WRITING TO DEVICE VIA IOCTL
FILE_OPEN_MODE	    EQU  0     ;BIT FIELDS ARE ISSSRAAA WHERE:
			       ; I=0 FILE IS INHERITED BY CHILD PROCESS
			       ;   (OF WHICH THERE ISN'T ANY)
			       ; SSS=SHARING MODE IS "COMPATABILITY MODE"
			       ; R=0 (RESERVED)
			       ; AAA=0 (READ ACCESS)
DEV_OPEN_MODE	    EQU  2     ;SAME BITS AS ABOVE, EXCEPT AAA=010, READ/WRITE ACCESS

FALSE		    EQU  0     ;INDICATES AN ERROR TO ERRORLEVEL
TRUE		    EQU  0FFH

refresh_request     EQU  0     ;scaler to indicate that the current request is refresh for 'des_end'

STDERR		    EQU  2     ;PRE-OPENED HANDLE FOR STANDARD ERROR
STDOUT		    EQU  1     ;PRE-OPENED HANDLE FOR STANDARD OUTPUT

INT24		    EQU  24H   ;CRITICAL ERROR HANDLER VECTOR
EMPTY		    EQU  -1    ;EMPTY SLOT IN LIST OF CODEPAGES

IOCTL_FUN_GET_INFO  EQU  0     ;GET DEVICE INFORMATION (RETURNED IN DX) FROM IOCTL
IOCTL_FUN_SET_INFO  EQU  1     ;SET DEVICE INFORMATION (PASSED IN DX) TO IOCTL
ISDEVICE	    EQU  0080H ;FLAG IN DEVICE INFO WORD, RETURNED IN DX
BINARY_DEV	    EQU  0020H ;BINARY FLAG IN DEVICE INFO WORD

MAPERR		    EQU  19    ;ERRORS FROM DEVICES MAPPED TO COMMON ERRORS,
			       ; AS DEVICE ERR=0 IS REPORTED AS COM ERROR=19
FAIL24		    EQU  83    ;RET CODE, INT 24 HANDLER REQUESTED "FAIL"

;PREPARE START ERROR CODES:
DS_ERR0 	    EQU  0     ;PREVIOUS PREPARE DELETED
DS_ERR1 	    EQU  1     ;INVALID FUNCTION NUMBER
DS_ERR8 	    EQU  8     ;CODE PAGE CONFLICT (USED FOR KEYB XX MISMATCH)
DS_ERRA 	    EQU  0AH   ;DEVICE ERROR
DS_ERR16	    EQU  016H  ;UNKNOWN COMMAND (22 DECIMAL)

;PREPARE WRITE ERROR CODES:
DW_ERR8 	    EQU  8     ;DEVICE NOT FOUND IN FILE ,OR
			       ;CODE PAGE NOT FOUND IN FILE
DW_ERRA 	    EQU  0AH   ;DEVICE ERROR
DW_ERRC 	    EQU  0CH   ; FILE CONTENTS NOT A FONT FILE,
			       ; OR FILE CONTENTS STRUCTURE DAMAGED

;PREPARE END ERROR CODES:
DE_ERRC 	    EQU  0CH   ;NO PREPARE START

;SELECT ERROR CODES:
IN_ERR7 	    EQU  07H   ;CODE PAGE NOT PREPARED
IN_ERR8 	    EQU  08H   ;CURRENT KEYB DOES NOT SUPPORT THIS CP
IN_ERRA 	    EQU  0AH   ;DEVICE ERROR

;QUERY SELECTED ERROR CODES:
QS_ERR7 	    EQU  07H   ;NO CODE PAGE HAS BEEN SELECTED
QS_ERRA 	    EQU  0AH   ;DEVICE ERROR

;QUERY PREPARED LIST ERROR CODES:
QL_ERR7 	    EQU  07H   ; NO CODE PAGES HAVE BEEN SELECTED
QL_ERRA 	    EQU  0AH   ;DEVICE ERROR

;REFRESH ERROR CODES RETURNED FROM PREPARE START FOR A REFRESH REQUEST:

RS_ERR8 	    EQU  8     ;KEYBOARD/CODE PAGE CONFLICT
RS_ERRA 	    EQU  0AH   ;DEVICE ERROR
RS_ERRC 	    EQU  0CH   ;DEVICE DRIVER DOES NOT HAVE COPY OF CODE PAGE
			       ; TO DOWNLOAD TO DEVICE

;ERROR CODES PRESENTED IN THE LOWER HALF OF DI TO THE INT 24H HANDLER:
;CRERR0 	     EQU  0	;ATTEMPT TO WRITE ON WRITE_PROTECTED DISKETTE
;CRERR1 	     EQU  1	;UNKNOWN UNIT
;CRERR2 	     EQU  2	;DRIVE NOT READY
;CRERR3 	     EQU  3	;UNKNOWN COMMAND
;CRERR4 	     EQU  4	;DATA ERROR (crc)
;CRERR5 	     EQU  5	;BAD REQUEST STRUCTURE LENGTH
;CRERR6 	     EQU  6	;SEEK ERROR
;CRERR7 	     EQU  7	;UNKNOWN MEDIA TYPE
;CRERR8 	     EQU  8	;SECTOR NOT FOUND
;CRERR9 	     EQU  9	;PRINTER OUT OF PAPER
;CRERRA 	     EQU  0AH	;WRITE FAULT
;CRERRB 	     EQU  0BH	;READ FAULT
;CRERRC 	     EQU  0CH	;GENERAL FAILURE

;EXIT CODES, IN AL, WHEN IRET FROM INT 24H ERROR HANDLER.
CRERR_IGNORE	    EQU  0     ;IGNORE THE ERROR
CRERR_RETRY	    EQU  1     ;RETRY THE OPERATION
CRERR_TERM	    EQU  2     ;TERMINATE PROGRAM VIA INT 23H
CRERR_FAIL	    EQU  3     ;FAIL THE SYSTEM CALL IN PROGRESS

;		EQUATES FOR THE BREAK CHECK FUNCTION:

;IN AL:
REQUEST_BREAK_STATE EQU  0
SET_BREAK_STATE     EQU  1

;IN DL:
BREAK_OFF	    EQU  0
BREAK_ON	    EQU  1

DBCS_header	    EQU  ES:[DI]    ;used to address DBCS_head
DBCS_table	    EQU  DS:[SI]    ;used to address the DBCS vector table

; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
;	       DEFINITIONS OF CONTROL BLOCKS

FON		    STRUC      ;CODEPAGE FONT FILE CONTENTS
FONTAG		    DB	 0FFH,"FONT   " ;FILE TAG
		    DB	 8 DUP(?) ;RESERVED
FONPTCT 	    DW	 ?     ;COUNT OF POINTERS IN HEADER
FONPT		    DB	 ?     ;START OF ARRAY OF POINTERS
FON		    ENDS

;		THIS STRUC MAPS AN AREA POINTED TO BY "CP_CB", AN EXTRN
;AC001;CODEPAGE_PARMS	   STRUC
;AC001;DEVICE		   DW	?     ;POINTER TO ASCIIZ STRING OF DEVICE NAME
;AC001;DES_PACK_PTR	   DW	?     ;OFFSET TO "DES_STRT_PACKET"
;AC001;FONT_FILESPEC	   DW	?     ;PATH AND FILESPEC OF FONT FILE
;AC001;REQUEST_TYPE	   DW	?     ;TYPE OF FUNCTION TO BE PERFORMED
;AC001;CODEPAGE_PARMS	   ENDS
;		DEFINITIONS OF VALUES FOUND IN "REQUEST_TYPE" ABOVE:
		    EXTRN SELECT:ABS
		    EXTRN PREPARE:ABS
		    EXTRN REFRESH:ABS

;		"PACKET" POINTED TO BY DS:DX
PACKET		    STRUC      ;USED BY MINOR CODES: 6AH,4AH,4DH (SELECT, QUERY SELECTED, PREPARE END)
PACKLEN 	    DW	 2     ;LENGTH OF PACKET IN BYTES, FOR DBCS COUNTRIES, LENGTH OF DBCS TABLE (IF NON-ZERO) WILL be added
PACKCPID	    DW	 0     ;CODE PAGE ID
PACKVECTOR1	    DB	 0     ;start of vector list if included							    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0     ; holders for maximum possible number of 						    ;AN000;
		    DB	 0     ; DBCS vector pairs									    ;AN000;
		    DB	 0     ;											    ;AN000;
		    DB	 0     ;											    ;AN000;
		    DB	 0     ;											    ;AN000;
PACKVECTOR12	    DB	 0     ;											    ;AN000;
		    DB	 0     ;											    ;AN000;
PACKET		    ENDS												    ;AN000;
															    ;AN000;
DBCS_head	    STRUC      ;return from function 6507, pointed to by ES:DI, addressed via "DBCS_header"                 ;AN000;
info_id 	    DB	 7												    ;AN000;
table_ptr	    DD	 0     ;used to address DBCS_tabl								    ;AN000;
DBCS_head	    ENDS
															    ;AN000;
DBCS_tabl	    STRUC      ;map of DBCS table, addressed via DBCS_table						    ;AN000;
table_len	    DW	 6     ;length in bytes of the list of vectors							    ;AN000;
vector1 	    DB	 0     ;start of vector list									    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0     ;each vector is two bytes, a start value and an						    ;AN000;
		    DB	 0     ;end value										    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
		    DB	 0												    ;AN000;
DBCS_tabl	    ENDS


;		"DES_STRT_PACKET" POINTED TO BY DS:DX
DES_STRT_PACKET     STRUC
DES_STRT_PKFL	    DW	 ?     ;FLAGS (DEFINED BELOW STRUC DEFINITION)
DES_STRT_PKLEN	    DW	 ?     ;BYTE LENGTH OF REST OF THE PACKET,
			       ; NOT INCLUDING THIS LENGTH FIELD
DES_STRT_PKNUM	    DW	 ?     ;NUMBER OF CODEPAGES IN FOLLOWING LIST
DES_STRT_PKCP1	    DW	 ?     ;CODE PAGE ONE
DES_STRT_PKCP2	    DW	 ?     ;CODE PAGE TWO
;   :		    :	 :	  :
DES_STRT_PKCPN	    DW	 ?     ;CODE PAGE n
;NOTE: THESE n CODEPAGES MAY HAVE A -1 VALUE, WHICH IS TREATED AS A PLACEHOLDER
; TO ALLOW POSITION CONTROL FOR EACH CODEPAGE VALUE IN THE LIST.
DES_STRT_PACKET     ENDS

;			DEFINITIONS OF CONTENTS OF "DES_STRT_PKFL"
DES_STRT_FL_SINGLE  EQU  8000H ; 8000H=SINGLE CP FIFO PREPARE
;   (NOT SUPPORTED, ONLY LIST FORM IN DOS 3.30 RELEASE)
DES_STRT_FL_CART    EQU  0001H ; 0001H=CARTRIDGE PREPARE

; ED OF MODECPEQ.INC FILE