1 ; MODECPEQ.INC - INCLUDED IN MODECP.SAL
\ f
3 %OUT INCLUDE MODECPEQ.INC ;MACROS,DOS EQUATES,STRUCS,OTHER EQUATES
7 HEADER MACRO TEXT,EJECT
8 ;;example: header <new subtitle goes here>
9 ;;the angle brackets are required
18 ; - - - - - - - - - - - - - - - - - - - -
19 ; $SALUT CP(2,28,40,47)
21 DOSCALL MACRO FUNC,SUBFUNC
22 ;;IF SUBFUNC IS USED, THEN FUNC MUST BE USED
23 IFNB <FUNC> ;IS THERE ANY PARMS AT ALL?
25 MOV AX,(FUNC SHL 8) + SUBFUNC
26 ELSE ;;SINCE THERE IS NO SUBFUNC
33 ; - - - - - - - - - - - - - - - - - - - -
34 ; $SALUT CP(4,21,26,32)
37 PRINTSTR EQU 09H ;PRINT STRING ENDING WITH "$"
38 ;DS:DX = POINTER TO STRING
40 SET_VECTOR EQU 25H ;SET INTERRUPT VECTOR
41 ;DS:DX = VECTOR TO INT HANDLER
42 ;AL = INTERRUPT NUMBER
44 DOS_VERSION EQU 30H ;DETERMINE VERSION OF DOS
45 ;OUTPUT: AL=MAJOR, AH=MINOR VERSION NUMBER
46 ; BX AND CX SET TO ZERO
48 BREAK_CHECK EQU 33H ;CNTRL-BREAK CHECK
49 ;AL=0 - REQUEST CURRENT STATE
50 ;AL=1 - SET CURRENT STATE
54 GET_VECTOR EQU 35H ;GET INTERRUPT VECTOR
56 ;OUTPUT: ES:BX = CONTENTS OF VECTOR
58 OPEN EQU 3DH ;OPEN FILE FOR INPUT
59 ;DS:DX = POINTER TO ASCIIZ PATH NAME
62 CLOSE EQU 3EH ;CLOSE A FILE HANDLE
63 ;BX = HANDLE RETURNED BY OPEN OR CREATE
65 READ EQU 3FH ;READ FROM A FILE OR DEVICE
67 ;DS:DX = BUFFER ADDRESS
68 ;CX NUMBER OF BYTES TO READ
70 WRITE EQU 40H ;WRITE TO A FILE OR DEVICE
72 ;DS:DX = ADDRESS OF DATA TO WRITE
73 ;CX = NUMBER OF BYTES TO WRITE
76 LSEEK EQU 42H ;MOVE FILE READ/WRITE POINTER
77 ;CX:DX - DISTANCE TO MOVE IN BYTES
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
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,...)
91 ;OUTPUT: AX=NO. BYTES TRANSFERRED
92 ; OR ERROR CODE IS CY SET
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
101 FREE_AL_MEM EQU 49H ;FREE ALLOCATED MEM
102 ;ES=SEG OF BLOCK BEING RETURNED
103 ;OUTPUT: AX=ERROR CODE IF CY SET
105 EXTERROR EQU 59H ;EXTENDED ERROR
106 ;BX = 30 VERSION NUMBER (FOR 3.30)
113 ; (THESE VALUES GO TO AX FOR INT 21H)
114 SET_GLOBAL_CP EQU 6602H ;INPUTS:
117 GET_GLOBAL_CP EQU 6601H ;RESULTS:
118 ; BX=ACTIVE CODE PAGE,
119 ; DX=SYSTEM CODE PAGE
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)
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
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"
143 PREPARE_END EQU 4DH ;INPUTS:
144 ;BX=HANDLE, AX="GENERIC_IOCTL"
145 ; DS:DX=DATA BUFFER "PACKET"
147 SELECT_CP EQU 4AH ;INPUTS:
148 ;BX=HANDLE, AX="GENERIC_IOCTL"
149 ; DS:DX=DATA BUFFER "PACKET"
151 QUERY_SELECTED EQU 6AH ;INPUTS:
152 ;BX=HANDLE, AX="GENERIC_IOCTL"
153 ; DS:DX=DATA BUFFER "PACKET"
155 QUERY_DES_LST EQU 6BH ;INPUTS:
156 ;BX=HANDLE, AX="GENERIC_IOCTL"
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"
166 ; AAA=0 (READ ACCESS)
167 DEV_OPEN_MODE EQU 2 ;SAME BITS AS ABOVE, EXCEPT AAA=010, READ/WRITE ACCESS
169 FALSE EQU 0 ;INDICATES AN ERROR TO ERRORLEVEL
172 refresh_request EQU 0 ;scaler to indicate that the current request is refresh for 'des_end'
174 STDERR EQU 2 ;PRE-OPENED HANDLE FOR STANDARD ERROR
175 STDOUT EQU 1 ;PRE-OPENED HANDLE FOR STANDARD OUTPUT
177 INT24 EQU 24H ;CRITICAL ERROR HANDLER VECTOR
178 EMPTY EQU -1 ;EMPTY SLOT IN LIST OF CODEPAGES
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
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"
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)
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
203 ;PREPARE END ERROR CODES:
204 DE_ERRC EQU 0CH ;NO PREPARE START
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
211 ;QUERY SELECTED ERROR CODES:
212 QS_ERR7 EQU 07H ;NO CODE PAGE HAS BEEN SELECTED
213 QS_ERRA EQU 0AH ;DEVICE ERROR
215 ;QUERY PREPARED LIST ERROR CODES:
216 QL_ERR7 EQU 07H ; NO CODE PAGES HAVE BEEN SELECTED
217 QL_ERRA EQU 0AH ;DEVICE ERROR
219 ;REFRESH ERROR CODES RETURNED FROM PREPARE START FOR A REFRESH REQUEST:
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
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
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
247 ; EQUATES FOR THE BREAK CHECK FUNCTION:
250 REQUEST_BREAK_STATE EQU 0
251 SET_BREAK_STATE EQU 1
257 DBCS_header EQU ES:[DI] ;used to address DBCS_head
258 DBCS_table EQU DS:[SI] ;used to address the DBCS vector table
260 ; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
261 ; DEFINITIONS OF CONTROL BLOCKS
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
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:
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;
303 DB 0 ; holders for maximum possible number of ;AN000;
304 DB 0 ; DBCS vector pairs ;AN000;
308 PACKVECTOR12 DB 0 ; ;AN000;
312 DBCS_head STRUC ;return from function 6507, pointed to by ES:DI, addressed via "DBCS_header" ;AN000;
314 table_ptr DD 0 ;used to address DBCS_tabl ;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;
329 DB 0 ;each vector is two bytes, a start value and an ;AN000;
330 DB 0 ;end value ;AN000;
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
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.
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
365 ; ED OF MODECPEQ.INC FILE