summaryrefslogtreecommitdiff
path: root/v4.0/src/INC/SYSMSG.INC
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/INC/SYSMSG.INC')
-rw-r--r--v4.0/src/INC/SYSMSG.INC443
1 files changed, 443 insertions, 0 deletions
diff --git a/v4.0/src/INC/SYSMSG.INC b/v4.0/src/INC/SYSMSG.INC
new file mode 100644
index 0000000..5462820
--- /dev/null
+++ b/v4.0/src/INC/SYSMSG.INC
@@ -0,0 +1,443 @@
1 PAGE ,132
2 SUBTTL DOS - Message Retriever - SYSTEM CONTROL file
3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4;; DOS -- Message Retriever
5;; (c) Copyright 1988 Microsoft
6;;
7;; File Name: SYSMSG.INC
8;; ----------
9;;
10;; Description: Message retriever functions are included into source code
11;; ------------ by referencing a MSG_SERVICES macro. That macro is defined
12;; here as well as the logic to include necessary .ASM and .INC
13;; files.
14;;
15;;
16;; Documentation Reference:
17;; ------------------------
18;; DOS -Message Retriever I0 Document - Feb. ?? 1987
19;; DOS -Message Retriever I1 Document - Mar. ?? 1987
20;; DOS -Message Retriever I2 Document - Mar. ?? 1987
21;; DOS -Final Functional Specification Document - Mar ?? 1987
22;;
23;; Procedures Contained in This File:
24;; ---------------------------------
25;; None
26;;
27;; Include Files Required:
28;; -----------------------
29;; MSGSERV.INC := All message services
30;; ???? := ????
31;;
32;; External Procedure References:
33;; ------------------------------
34;; None
35;;
36;; Linkage Instructions:
37;; --------------------
38;; None
39;;
40;; Change History:
41;; ---------------
42;; CREATED March, 1987 RPS
43;;
44;; Psuedocode:
45;; -----------
46;; None
47;;
48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49 ;;
50INCLUDE VERSIONA.INC ;;AN003;;
51
52FALSE = 0 ;;
53TRUE = NOT FALSE ;; List message services and flags
54 ;;
55
56; Control Characters For Message Skeleton file
57
58NULL EQU 00H ;; Null
59BELL EQU 07H ;; Bell
60TAB EQU 09H ;; Tab
61LF EQU 0AH ;; Line Feed
62HOME EQU 0BH ;; Home
63FORMFD EQU 0CH ;; Form Feed
64CR EQU 0DH ;; Carriage Return
65COLON EQU 3AH ;; Colon
66
67; SYSDISPMSG and SYSGETMSG Equates
68
69MSG_SER_CLASS EQU 00H ;; Message Service Class (reserved)
70EXT_ERR_CLASS EQU 01H ;; DOS Extended error class
71PARSE_ERR_CLASS EQU 02H ;; Parse error class
72UTILITY_MSG_CLASS EQU 0FFH ;; Utility message class
73
74NO_HANDLE EQU 0FFFFH ;; No handle specified (Use DOS functions 01H-09H only)
75
76NO_REPLACE EQU 0000H ;; No replacable parameters
77
78; SUBLIST Equates
79
80 Sublist_Length EQU 11 ;; Length of sublist structure
81 Reserved EQU 0 ;; Reserved byte field
82
83 Left_Align EQU 0 ;;00xxxxxx
84 Right_Align EQU 80h ;;10xxxxxx
85
86 Char_type EQU 0 ;;axxx0000 - Character type
87 Char_Field_Char EQU 0 ;;a0000000
88 Char_Field_ASCIIZ EQU 10h ;;a0010000
89
90 Unsgn_Bin_Type EQU 01h ;;axxx0001 - Unsigned Binary to Decimal character
91 Unsgn_Bin_Byte EQU 11h ;;a0010001
92 Unsgn_Bin_Word EQU 21h ;;a0100001
93 Unsgn_Bin_DWord EQU 31h ;;a0110001
94
95 Sgn_Bin_Type EQU 02h ;;axxx0010 - Signed Binary to Decimal character
96 Sgn_Bin_Byte EQU 12h ;;a0010010
97 Sgn_Bin_Word EQU 22h ;;a0100010
98 Sgn_Bin_DWord EQU 32h ;;a0110010
99
100 Bin_Hex_Type EQU 03h ;;axxx0011 - Unsigned Binary to Hexidecimal character
101 Bin_Hex_Byte EQU 13h ;;a0010011
102 Bin_Hex_Word EQU 23h ;;a0100011
103 Bin_Hex_DWord EQU 33h ;;a0110011
104
105 Date_Type EQU 04h ;;axxx0100 - Date to character using current country format
106 Date_MD EQU 14h ;;a0010100
107 Date_MDY_2 EQU 24h ;;a0100100
108 Date_MDY_4 EQU 34h ;;a0110100
109
110 Time_Cty_Type EQU 05h ;;axxx0101 - Time to character using current country format
111 Time_HHMM_Cty EQU 05h ;;a0000101
112 Time_HHMMSS_Cty EQU 15h ;;a0010101
113 Time_HHMMSSHH_Cty EQU 25h ;;a0100101
114
115 Time_24_Type EQU 06h ;;axxx0110 - Time to character using 24 hour format
116 Time_HHMM_24 EQU 06h ;;a0000110
117 Time_HHMMSS_24 EQU 16h ;;a0010110
118 Time_HHMMSSHH_24 EQU 26h ;;a0100110
119
120 $M_EXTPAR_Type EQU 08h ;;axxx1000 - Special case for extended parse replace format
121
122NO_INPUT EQU 00H ;; No input characters
123DOS_KEYB_INP EQU 01H ;; DOS INT 21H - AH=01H := Keyboard Input
124DOS_DIR_CON_INP EQU 07H ;; DOS INT 21H - AH=07H := Direct Console Input Without Echo
125DOS_CON_INP EQU 08H ;; DOS INT 21H - AH=08H := Console Input Without Echo (Check CTL-BK)
126DOS_BUF_KEYB_INP EQU 0AH ;; DOS INT 21H - AH=0AH := Buffered Keyboard Input
127DOS_CLR_KEYB_BUF EQU 0CH ;; DOS INT 21H - AH=0CH := Clear keyboard buffer
128DOS_WRITE_HANDLE EQU 40H ;; DOS INT 21H - AH=40H := Write to a DOS handle
129DOS_DISP_STRING EQU 09H ;; DOS INT 21H - AH=09H := Display $ terminated string
130DOS_DISP_CHAR EQU 02H ;; DOS INT 21H - AH=02H := Display Character
131LOWEST_4CH_VERSION EQU 0002H ;; First DOS version to allow AH = 4CH Exit (VERSION 2.00)
132
133DOS_GET_DBCS_INFO EQU 6300H ;; DOS INT 21H - AX=6507H := Get DBCS Vector Table
134DOS_GET_EXT_ERROR EQU 59H ;; DOS INT 21H - AH=59H := Get Extended Error
135DOS_GET_EXT_ERROR_BX EQU 00H ;; DOS INT 21H - BX=0000H := Version 0
136
137DOS_EXTENDED_OPEN EQU 6C00H ;AN003; DOS INT 21H - AX=6C00H := Extended Open
138NO_CRIT_OPEN EQU 2000H ;AN003; Extended Open Mode bit
139NOT_EX_FAIL_EX_OPEN EQU 0101H ;AN003; Extended Open Flag
140DOS_LSEEK_FILE EQU 4200H ;AN003; DOS INT 21H - AX=4200H := LSEEK file
141DOS_READ_BYTE EQU 3FH ;AN003; DOS INT 21H - AH=3FH := Read byte block
142DOS_CLOSE_FILE EQU 3EH ;AN003; DOS INT 21H - AH=3EH := Close file handle
143
144IFSFUNC_INSTALL_CHECK EQU 0500H ;AN006; IFSFUNC Installation Check
145IFS_GET_ERR_TEXT EQU 0502H ;AN006; IFSFUNC Get Extended Error Text
146IFSFUNC_INSTALLED EQU 0FFH ;AN006; Return code if IFSFUNC is installed
147
148EXT_ERR_39 EQU 39 ;; Insufficent Disk Space EXTENDED ERROR (changed from hex to decimal - eg d201)
149ERROR_CLASS_39 EQU 01H ;; Error Class = 1
150ACTION_39 EQU 04H ;; Suggested Action = 4
151LOCUS_39 EQU 01H ;; Locus = 1
152
153DOS_GET_COUNTRY EQU 38H ;; DOS INT 21H - AH=38H := Get Country Dependant Information
154DOS_GET_VERSION EQU 30H ;; DOS INT 21H - AH=30H := Get DOS Version number
155DOS_IOCTL_GET_INFO EQU 4400H ;; DOS INT 21H - AH=4400H := I/O control for devices
156DOS_IOCTL_SET_INFO EQU 4401H ;; DOS INT 21H - AH=4401H := I/O control for devices
157DOS_GET_EXT_PARSE_ADD EQU 122EH ;; DOS INT 2FH - AX=122EH := Get Extended/Parse error address
158DOS_GET_EXTENDED EQU 00 ;; DOS INT 2FH - AX=122EH - DL=00 := Get Extended address
159DOS_GET_PARSE EQU 02 ;; DOS INT 2FH - AX=122EH - DL=02 := Get Parse address
160DOS_GET_CRITICAL EQU 04 ;; DOS INT 2FH - AX=122EH - DL=04 := Get Critical address
161DOS_GET_FILE EQU 06 ;; DOS INT 2FH - AX=122EH - DL=06 := Get File system dependant
162DOS_GET_ADDR EQU 08 ;; DOS INT 2FH - AX=122EH - DL=08 := Get Address of READ_DISK_PROC
163DOS_SET_ADDR EQU 09 ;; DOS INT 2FH - AX=122EH - DL=09 := Set Address of READ_DISK_PROC
164LOW_NIB_MASK EQU 0FH ;; Mask out the high byte
165DOS_CLR_KEYB_BUF_MASK EQU 0C0H ;; Check if high nibble is C Hex
166$M_CON_INP EQU -1 ;; If DOS INT 21H Function 06H - DL := 0FFH for input
167$M_CRIT_LO EQU 19 ;; First Extended Error considered CRITICAL
168$M_CRIT_HI EQU 39 ;; Last Extended Error considered CRITICAL (EG - D191)
169$M_AM EQU "a" ;; Time format AM indicator
170$M_PM EQU "p" ;; Time format PM indicator
171$M_NEG_SIGN EQU "-" ;; Signed decimal number format negative indicator
172$M_DEF_TIME_FORM EQU 1 ;; Default Time format - 24 hour
173$M_DEF_DATE_FORM EQU 0 ;; Default Time format - 0 := USA format
174$M_DEF_TIME_SEP EQU ":" ;; Default Time separator - ":"
175$M_DEF_DATE_SEP EQU "-" ;; Default Time separator - "-"
176$M_DEF_DECI_SEP EQU "." ;; Default Time hundreds separator - "."
177$M_TIMEDATE_PAD EQU "0" ;; Time/Date PAD character - "0" (ie 12:03p)
178$M_MAX_2_YEAR EQU 99 ;; Maximum 2 digit year
179$M_SINGLE_CHAR EQU 1 ;; A single character is this long ^
180$M_SPECIAL_CASE EQU 30H ;; Special case for replacable parameters %0
181$M_UNLIM_W EQU 0 ;; Unlimited width character
182$M_COMMA EQU "," ;; Default Thousand separate
183$M_CR_LF EQU 0A0DH ;; Default CR/LF
184$M_SPACE_HYP EQU "- " ;; Default Space/Hyphan
185$M_SPACE EQU " " ;; Default Space
186$M_NULL EQU 0 ;; Null
187$M_FIRST_THOU EQU 3 ;; Location of first thousand separator
188$M_SECOND_THOU EQU 6 ;; Location of second thousand separator
189$M_THIRD_THOU EQU 9 ;; Location of third thousand separator
190$M_BASE10 EQU 10 ;; Base 10 for arthmetic
191$M_BASE16 EQU 16 ;; Base 16 for arthmetic
192$M_CLASS_NOT_EXIST EQU 0 ;; Does class exist?
193$M_TERMINATING_FLAG EQU -1 ;; Is there any more classes?
194$M_ADDR_SZ_NEAR EQU 2 ;; Size to increment if NEAR
195$M_ADDR_SZ_FAR EQU 4 ;; Size to increment if FAR
196$M_SL EQU DS:[SI] ;; Refer to SUBLIST as $M_SL
197$M_NO_HANDLE EQU -1 ;; No handle flag
198$M_TEMP_BUF_SZ EQU 64 ;; Size of temporary buffer ;AN003;
199$M_NEXT_DBCS_VECTOR EQU 2 ;; Amount to increment to get next vector
200$M_DBCS_TERM EQU 0000 ;; DBCS vector table terminating flag
201$M_SPECIAL_MSG_NUM EQU 0FFFFH ;; Special generic message number
202$M_CRLF_SIZE EQU 2 ;; Size of the CR LF message
203$M_NO_CRLF_MASK EQU 10000000B ;; Mask to supress CR LF
204$M_ONE_REPLACE EQU 1 ;; Indicate one replacement
205$M_CRIT_ERR_MASK EQU 00000001B ;; Mask to allow EOF/EOI Crit error
206 ;;
207$M_ALIGN_MASK EQU 10000000b ;; Mask for align
208$M_TYPE_MASK EQU 00001111b ;; Mask for types
209$M_SIZE_MASK EQU 00110000b ;; Mask for types
210$M_TIME_MASK EQU 00000001b ;; Mask for TIME
211$M_DATE_MASK EQU 00010000b ;; Mask for TIME
212$M_BYTE EQU 00010000b ;; BYTE indicator
213$M_WORD EQU 00100000b ;; WORD indicator
214$M_DWORD EQU 00110000b ;; DWORD indicator
215
216; Standard reserved DOS handles
217
218STDIN EQU 0000H ;; Standard Input device handle
219STDOUT EQU 0001H ;; Standard Output device handle
220STDERR EQU 0002H ;; Standard Error Output device handle
221STDAUX EQU 0003H ;; Standard Auxiliary device handle
222STDPRN EQU 0004H ;; Standard Printer device handle
223
224; Reserved Message Service equates
225
226NEARmsg = TRUE ;; \
227NOVERCHECKmsg = FALSE ;; |
228MSGDATA = FALSE ;; |
229FARmsg = FALSE ;; |
230GETmsg = FALSE ;; |
231LOADmsg = FALSE ;; |
232DISPLAYmsg = FALSE ;; } Set default cases
233SETSTDIO = FALSE ;; |
234NOCHECKSTDIN = FALSE ;; |
235NOCHECKSTDOUT = FALSE ;; |
236DISK_PROC = FALSE ;; | ;AN003;
237INPUTmsg = FALSE ;; |
238CHARmsg = FALSE ;; |
239NUMmsg = FALSE ;; |
240TIMEmsg = FALSE ;; |
241DATEmsg = FALSE ;; /
242
243IF1 ;;
244COMR = FALSE ;; COMMAND.COM Cases (resident)
245COMT = FALSE ;; (transient)
246ENDIF ;;
247
248$M_STRUC = TRUE ;; Internal message service defaults
249$M_LOAD = TRUE ;;
250$M_SUBS = TRUE ;;
251$M_REPLACE = TRUE ;;
252$M_REPL_DONE = FALSE ;;
253$M_CHAR_ONLY = TRUE ;;
254$M_PARSE_FLAG = TRUE ;;
255$M_EXT_ERR_FLAG = TRUE ;;
256$M_MSGDATA_ONLY = TRUE ;;
257$M_END = FALSE ;;
258$M_EXT_CLS = TRUE ;;
259$M_PAR_CLS = TRUE ;;
260 ;;
261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
262;; $M_POPF Macro
263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
264
265$M_POPF MACRO
266 LOCAL $M_MYRET
267 JMP $+3
268$M_MYRET LABEL NEAR
269 IRET
270 PUSH CS
271 CALL $M_MYRET
272ENDM
273
274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
275;;
276;; Message Retreiver requests
277;;
278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
279 ;
280MSG_UTILNAME Macro utilname ;
281 ;
282 INCLUDE &utilname.CTL ; Include the control file for the utility
283 $M_STRUC = TRUE ;
284 INCLUDE MSGSERV.ASM ; Get structure definitions
285 ;
286ENDM ;
287 ;
288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
289;; MSG_SERVICES Macro
290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
291 ;
292MSG_SERVICES Macro varlist ; MACRO used in source routine
293 ;
294 $M_SERVICE = FALSE ; Reset service flag
295 IRP var,<varlist> ; FOR each variable in the list
296 $M_INCLUDE = TRUE ; Reset include flag
297 ; For each service predefined
298
299IRP serv,<MSGDATA,LOADmsg,NOVERCHECKmsg,DISPLAYmsg,GETmsg,INPUTmsg,CHARmsg,NUMmsg,TIMEmsg,DATEmsg,NEARmsg,FARmsg,COMR,COMT>
300
301 IFDIF <var>,<serv> ; IF it IS a service (defined above)
302 ELSE ;
303 IFDIF <var>,<MSGDATA> ; IF it is NOT the message data space request
304 $M_MSGDATA_ONLY = FALSE ; Instruct the assembler to include all services
305 ENDIF ; ENDIF
306 IRP repl,<CHARmsg,NUMmsg,TIMEmsg,DATEmsg> ; IF it is a replace service
307 IFIDN <var>,<repl> ;
308 $M_REPLACE = TRUE ; Set replace flag
309 ENDIF ;
310 ENDM ;
311 serv = TRUE ; Let the assembler know about the service
312 $M_SERVICE = TRUE ; Let the macro know it was a service
313 $M_INCLUDE = FALSE ; Let the macro know it wasn't a class
314 ENDIF ; ENDIF
315 ENDM ; NEXT service
316
317MSG_SERVICES2 <varlist>
318 ; Continue further checks (If we add any more predefined
319 ; function to the above IRP command, it generates a
320 ; syntax error. We must continue the processing in another
321 ; MACRO called MSG_SERVICES2)
322
323 IF $M_INCLUDE ; IF message class was requested
324 $M_INC var ; Include it as a message class
325 ENDIF ; ENDIF
326 ENDM ; NEXT variable
327 ;
328 IF $M_SERVICE ; IF it any services were requested THEN
329 INCLUDE MSGSERV.ASM ; THEN include module to get service
330 ENDIF ; ENDIF
331
332ENDM
333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
334;; MSG_SERVICES2 Macro
335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
336 ;
337MSG_SERVICES2 Macro varlist2 ; MACRO used in source routine
338 ;
339 ; FOR each variable in the list
340 IRP var2,<varlist2>
341 ; For each service predefined
342 IRP serv2,<SETSTDIO,NOCHECKSTDIN,NOCHECKSTDOUT,DISK_PROC>
343 ;AN003; IF it IS a service (defined above)
344 IFDIF <var2>,<serv2>
345 ELSE ;
346 serv2 = TRUE ; Let the assembler know about the service
347 $M_SERVICE = TRUE ; Let the macro know it was a service
348 $M_INCLUDE = FALSE ; Let the macro know it wasn't a class
349 ENDIF ; ENDIF
350 ENDM ; NEXT service
351 ENDM ; NEXT variable
352ENDM ;
353 ;
354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
355;; $M_INC Macro
356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
357 ;
358$M_INC Macro ext ;
359 ;
360INCLUDE &ext ;
361 ;
362ENDM ;
363 ;
364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
365;; $M_BUILD_PTRS Macro
366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
367 ;
368$M_BUILD_PTRS Macro nummsg ;
369 ;
370 $M_INDEX = 0 ;
371IF COMR ; IF this is resident COMMAND.COM
372 $M_MAKE_COMR ;
373ELSE ; ELSE
374 IF COMT ; IF this is transient COMMAND.COM
375 $M_MAKE_COMT ;
376 ELSE ; ELSE
377 ;
378 $M_INDEX = 0 ;
379 $M_COUNT = 0 ; Build normal utilities
380 ;
381 REPT nummsg ;
382 $M_COUNT = $M_COUNT + 1 ;
383 $M_MAKE %$M_COUNT ;
384 ENDM ;
385 ENDIF ;
386ENDIF ;
387ENDM ;
388 ;
389;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
390;; $M_MAKE Macro
391;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
392 ;
393$M_MAKE Macro $m_append ;
394IF FARmsg ;
395 CALL FAR PTR $M_CLS_&$m_append ; Get addressibilty to class &$M_APPEND (ES:DI)
396 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX+2,ES ; Move into first avaliable table location
397 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
398ELSE ;
399 CALL $M_CLS_&$m_append ; Get addressibilty to class &$M_APPEND (ES:DI)
400 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
401ENDIF ;
402$M_INDEX = $M_INDEX + 4 ; Set next available table location
403 ;
404ENDM ;
405;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
406;; $M_MAKE_COMR Macro
407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
408 ;
409$M_MAKE_COMR macro ;
410 ;
411 CALL $M_CLS_3 ; Get addressibilty to class A
412 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
413$M_INDEX = $M_INDEX + 4 ; Set next available table location
414 ;
415 CALL $M_CLS_4 ; Get addressibilty to class B
416 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
417$M_INDEX = $M_INDEX + 4 ; Set next available table location
418 ;
419 CALL $M_CLS_5 ; Get addressibilty to class C
420 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
421$M_INDEX = $M_INDEX + 4 ; Set next available table location
422 ;
423 CALL $M_CLS_6 ; Get addressibilty to class D
424 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
425$M_INDEX = $M_INDEX + 4 ; Set next available table location
426 ;
427 CALL $M_CLS_7 ; Get addressibilty to class E
428 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
429$M_INDEX = $M_INDEX + 4 ; Set next available table location
430 ;
431ENDM ;
432;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
433;; $M_MAKE_COMT Macro
434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
435 ;
436$M_MAKE_COMT macro ;
437 ;
438 CALL $M_CLS_8 ; Get addressibilty to class A
439 MOV WORD PTR $M_RT.$M_CLASS_ADDRS+$M_INDEX,DI ;
440$M_INDEX = $M_INDEX + 4 ; Set next available table location
441 ;
442ENDM ;
443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;