diff options
Diffstat (limited to 'v4.0/src/CMD/GRAPHICS/GRLOAD3.ASM')
| -rw-r--r-- | v4.0/src/CMD/GRAPHICS/GRLOAD3.ASM | 729 |
1 files changed, 729 insertions, 0 deletions
diff --git a/v4.0/src/CMD/GRAPHICS/GRLOAD3.ASM b/v4.0/src/CMD/GRAPHICS/GRLOAD3.ASM new file mode 100644 index 0000000..ce9d1d4 --- /dev/null +++ b/v4.0/src/CMD/GRAPHICS/GRLOAD3.ASM | |||
| @@ -0,0 +1,729 @@ | |||
| 1 | PAGE ,132 ;AN000; | ||
| 2 | TITLE DOS - GRAPHICS Command - Profile Load Modules #2 ;AN000; | ||
| 3 | ;AN000; | ||
| 4 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 5 | ;; DOS - GRAPHICS Command | ||
| 6 | ;; (C) Copyright 1988 Microsoft | ||
| 7 | ;; ;AN000; | ||
| 8 | ;; File Name: GRLOAD.ASM ;AN000; | ||
| 9 | ;; ---------- ;AN000; | ||
| 10 | ;; ;AN000; | ||
| 11 | ;; Description: ;AN000; | ||
| 12 | ;; ------------ ;AN000; | ||
| 13 | ;; This file contains the modules used to load the ;AN000; | ||
| 14 | ;; GRAPHICS profile into resident memory. ;AN000; | ||
| 15 | ;; ;AN000; | ||
| 16 | ;; ************* The EGA Dynamic Save Area will be built (by ;AN000; | ||
| 17 | ;; ** NOTE ** CHAIN_INTERRUPTS in file GRINST.ASM) over top of these ;AN000; | ||
| 18 | ;; ************* modules to avoid having to relocate this save just before ;AN000; | ||
| 19 | ;; terminating. This is safe since the maximum memory used is ;AN000; | ||
| 20 | ;; 288 bytes and the profile loading modules are MUCH larger than ;AN000; | ||
| 21 | ;; this. So GRLOAD.ASM MUST be linked before GRINST.ASM and after ;AN000; | ||
| 22 | ;; GRPRINT.ASM. ;AN000; | ||
| 23 | ;; ;AN000; | ||
| 24 | ;; ;AN000; | ||
| 25 | ;; Documentation Reference: ;AN000; | ||
| 26 | ;; ------------------------ ;AN000; | ||
| 27 | ;; PLACID Functional Specifications ;AN000; | ||
| 28 | ;; OASIS High Level Design ;AN000; | ||
| 29 | ;; OASIS GRAPHICS I1 Overview ;AN000; | ||
| 30 | ;; ;AN000; | ||
| 31 | ;; Procedures Contained in This File: ;AN000; | ||
| 32 | ;; ---------------------------------- ;AN000; | ||
| 33 | ;; LOAD_PROFILE - Main module for profile loading ;AN000; | ||
| 34 | ;; ;AN000; | ||
| 35 | ;; Include Files Required: ;AN000; | ||
| 36 | ;; ----------------------- ;AN000; | ||
| 37 | ;; ?????????? - Externals for profile loading modules ;AN000; | ||
| 38 | ;; ;AN000; | ||
| 39 | ;; External Procedure References: ;AN000; | ||
| 40 | ;; ------------------------------ ;AN000; | ||
| 41 | ;; None ;AN000; | ||
| 42 | ;; ;AN000; | ||
| 43 | ;; Linkage Instructions: ;AN000; | ||
| 44 | ;; --------------------- ;AN000; | ||
| 45 | ;; Refer to GRAPHICS.ASM ;AN000; | ||
| 46 | ;; ;AN000; | ||
| 47 | ;; Change History: ;AN000; | ||
| 48 | ;; --------------- ;AN000; | ||
| 49 | ;; ;AN000; | ||
| 50 | ;; ;AN000; | ||
| 51 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 52 | ;; ;AN000; | ||
| 53 | ;; ;AN000; | ||
| 54 | CODE SEGMENT PUBLIC 'CODE' BYTE ;; ;AN000; | ||
| 55 | ;; ;AN000; | ||
| 56 | INCLUDE STRUC.INC ;; ;AN000; | ||
| 57 | INCLUDE GRINST.EXT ;; Bring in external declarations ;AN000; | ||
| 58 | ;; for transient command processing ;AN000; | ||
| 59 | INCLUDE GRSHAR.STR ;; ;AN000; | ||
| 60 | INCLUDE GRMSG.EQU ;; ;AN000; | ||
| 61 | INCLUDE GRINST.EXT ;; ;AN000; | ||
| 62 | INCLUDE GRLOAD.EXT ;; ;AN000; | ||
| 63 | INCLUDE GRLOAD2.EXT ;; ;AN000; | ||
| 64 | INCLUDE GRPARSE.EXT ;; ;AN000; | ||
| 65 | INCLUDE GRPATTRN.STR ;; ;AN000; | ||
| 66 | INCLUDE GRPATTRN.EXT ;; ;AN000; | ||
| 67 | ;; ;AN000; | ||
| 68 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 69 | ;; ;AN000; | ||
| 70 | ;; Public Symbols ;AN000; | ||
| 71 | ;; ;AN000; | ||
| 72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 73 | ;; ;AN000; | ||
| 74 | PUBLIC PARSE_GRAPHICS ;; ;AN000; | ||
| 75 | PUBLIC PARSE_COLORSELECT ;; ;AN000; | ||
| 76 | PUBLIC PARSE_COLORPRINT ;; ;AN000; | ||
| 77 | PUBLIC PARSE_DARKADJUST ;; ;AN000; | ||
| 78 | PUBLIC LIMIT ;; ;AN000; | ||
| 79 | ;; ;AN000; | ||
| 80 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 81 | ;; ;AN000; | ||
| 82 | ASSUME CS:CODE,DS:CODE ;; ;AN000; | ||
| 83 | ;; ;AN000; | ||
| 84 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 85 | ;; ;AN000; | ||
| 86 | ;; ;AN000; | ||
| 87 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 88 | ;; ;AN000; | ||
| 89 | ;; Profile Load Variables ;AN000; | ||
| 90 | ;; ;AN000; | ||
| 91 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 92 | ;; ;AN000; | ||
| 93 | NO EQU 0 ;; ;AN000; | ||
| 94 | YES EQU 1 ;; ;AN000; | ||
| 95 | ;; ;AN000; | ||
| 96 | RESULT_BUFFER LABEL BYTE ;; general purpose result buffer ;AN000; | ||
| 97 | DB ? ;; operand type ;AN000; | ||
| 98 | RESULT_TAG DB 0 ;; operand tag ;AN000; | ||
| 99 | DW ? ;; pointer to synonym/keyword ;AN000; | ||
| 100 | RESULT_VAL DB ?,?,?,? ;; returned numeric value ;AN000; | ||
| 101 | ;; ;AN000; | ||
| 102 | ;; ;AN000; | ||
| 103 | ;; ;AN000; | ||
| 104 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 105 | ;; ;AN000; | ||
| 106 | ;; Module Name: ;AN000; | ||
| 107 | ;; PARSE_GRAPHICS ;AN000; | ||
| 108 | ;; ;AN000; | ||
| 109 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 110 | ;; ;AN000; | ||
| 111 | GRAPHICS_PARSE_PARMS LABEL WORD ;; Parser control blocks ;AN000; | ||
| 112 | DW GRAPHICS_P ;; ;AN000; | ||
| 113 | DB 2 ;; # of lists ;AN000; | ||
| 114 | DB 0 ;; # items in delimeter list ;AN000; | ||
| 115 | DB 1 ;; # items in end-of-line list ;AN000; | ||
| 116 | DB ';' ;; ';' used for comments ;AN000; | ||
| 117 | ;; ;AN000; | ||
| 118 | GRAPHICS_P DB 0,1 ;; Required, max parms ;AN000; | ||
| 119 | DW GRAPHICS_P1 ;; ;AN000; | ||
| 120 | DB 0 ;; # Switches ;AN000; | ||
| 121 | DB 0 ;; # keywords ;AN000; | ||
| 122 | ;; ;AN000; | ||
| 123 | GRAPHICS_P1 DW 0A000H ;; Numeric OR string ;AN000; | ||
| 124 | DW 2 ;; Capitalize ;AN000; | ||
| 125 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 126 | DW GRAPHICS_P1V ;; Value list ;AN000; | ||
| 127 | DB 0 ;; Synomyms ;AN000; | ||
| 128 | ;; ;AN000; | ||
| 129 | ;; ;AN000; | ||
| 130 | GRAPHICS_P1V DB 3 ;; # of value lists ;AN000; | ||
| 131 | DB 1 ;; # of range numerics ;AN000; | ||
| 132 | DB 1 ;; tag ;AN000; | ||
| 133 | DD 0,255 ;; range 0..255 ;AN000; | ||
| 134 | DB 0 ;; 0 - no actual numerics ;AN000; | ||
| 135 | DB 2 ;; 2 STRING VALUES ;AN000; | ||
| 136 | DB 2 ;; tag ;AN000; | ||
| 137 | DW LOWCOUNT_STR ;; ptr ;AN000; | ||
| 138 | DB 3 ;; tag ;AN000; | ||
| 139 | DW HIGHCOUNT_STR ;; ptr ;AN000; | ||
| 140 | ;; ;AN000; | ||
| 141 | lowcount_str db 'LOWCOUNT',0 ;; ;AN000; | ||
| 142 | HIGHcount_str db 'HIGHCOUNT',0 ;; ;AN000; | ||
| 143 | ;; ;AN000; | ||
| 144 | ;; ;AN000; | ||
| 145 | LOWCOUNT_FOUND DB NO ;; ;AN000; | ||
| 146 | HIGHCOUNT_FOUND DB NO ;; ;AN000; | ||
| 147 | ;; ;AN000; | ||
| 148 | ;; ;AN000; | ||
| 149 | PARSE_GRAPHICS PROC ;; ;AN000; | ||
| 150 | ;; ;AN000; | ||
| 151 | MOV CUR_STMT,GR ;; ;AN000; | ||
| 152 | .IF <BIT STMTS_DONE NAND DISP> ;; ;AN000; | ||
| 153 | OR STMT_ERROR,MISSING ;; ;AN000; | ||
| 154 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 155 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 156 | .ENDIF ;; ;AN000; | ||
| 157 | ;; ;AN000; | ||
| 158 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 159 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 160 | MOV AX,BLOCK_END ;; ;AN000; | ||
| 161 | MOV [BP+DI].GRAPHICS_ESC_PTR,AX ;; Set pointer to GRAPHICS seq ;AN000; | ||
| 162 | MOV [BP+DI].NUM_GRAPHICS_ESC,0 ;; Init sequence size ;AN000; | ||
| 163 | .ENDIF ;; ;AN000; | ||
| 164 | ;; ;AN000; | ||
| 165 | MOV LOWCOUNT_FOUND,NO ;; Flags to indicate whether the LOW ;AN000; | ||
| 166 | MOV HIGHCOUNT_FOUND,NO ;; and HIGHCOUNT parms were found ;AN000; | ||
| 167 | ;; ;AN000; | ||
| 168 | OR STMTS_DONE,GR ;; Indicate GRAPHICS found ;AN000; | ||
| 169 | ;; ;AN000; | ||
| 170 | MOV AX,PREV_STMT ;; Terminate any preceeding groups ;AN000; | ||
| 171 | OR GROUPS_DONE,AX ;; ;AN000; | ||
| 172 | ;; ;AN000; | ||
| 173 | MOV DI,OFFSET GRAPHICS_PARSE_PARMS ;; parse parms ;AN000; | ||
| 174 | ;; SI => the line to parse ;AN000; | ||
| 175 | XOR DX,DX ;; ;AN000; | ||
| 176 | .REPEAT ;; ;AN000; | ||
| 177 | XOR CX,CX ;; ;AN000; | ||
| 178 | CALL SYSPARSE ;; ;AN000; | ||
| 179 | ;; ;AN000; | ||
| 180 | .IF <AX EQ 0> NEAR ;; If PARM is valid ;AN000; | ||
| 181 | MOV BL,RESULT_TAG ;; ;AN000; | ||
| 182 | .SELECT ;; ;AN000; | ||
| 183 | .WHEN <BL EQ 1> ;; Escape byte ;AN000; | ||
| 184 | PUSH AX ;; ;AN000; | ||
| 185 | MOV AX,1 ;; Add a byte to the sequence ;AN000; | ||
| 186 | CALL GROW_SHARED_DATA ;; Update block end ;AN000; | ||
| 187 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 188 | PUSH DI ;; ;AN000; | ||
| 189 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 190 | INC [BP+DI].NUM_GRAPHICS_ESC ;; Bump number of bytes in sequence ;AN000; | ||
| 191 | MOV DI,BLOCK_END ;; ;AN000; | ||
| 192 | MOV AL,RESULT_VAL ;; Get esc byte from result buffer ;AN000; | ||
| 193 | MOV [BP+DI-1],AL ;; Store at end of sequence ;AN000; | ||
| 194 | POP DI ;; ;AN000; | ||
| 195 | .ENDIF ;; ;AN000; | ||
| 196 | POP AX ;; ;AN000; | ||
| 197 | .WHEN <BL EQ 2> ;; LOWCOUNT ;AN000; | ||
| 198 | .IF <LOWCOUNT_FOUND EQ NO> ;; ;AN000; | ||
| 199 | MOV LOWCOUNT_FOUND,YES ;; ;AN000; | ||
| 200 | PUSH AX ;; ;AN000; | ||
| 201 | MOV AX,1 ;; Add a byte to the sequence ;AN000; | ||
| 202 | CALL GROW_SHARED_DATA ;; Update block end ;AN000; | ||
| 203 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 204 | PUSH DI ;; ;AN000; | ||
| 205 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 206 | INC [BP+DI].NUM_GRAPHICS_ESC ;; Bump number of bytes in seq. ;AN000; | ||
| 207 | MOV AX,BLOCK_END ;; Save pointer to low byte ;AN000; | ||
| 208 | DEC AX ;; ;AN000; | ||
| 209 | MOV [BP+DI].LOW_BYT_COUNT_PTR,AX ;AN000; | ||
| 210 | MOV DI,AX ;; ;AN000; | ||
| 211 | MOV BYTE PTR[BP+DI],0 ;; Store 0 in place of count ;AN000; | ||
| 212 | POP DI ;; ;AN000; | ||
| 213 | .ENDIF ;; ;AN000; | ||
| 214 | POP AX ;; ;AN000; | ||
| 215 | ;; ;AN000; | ||
| 216 | .ELSE ;; ;AN000; | ||
| 217 | OR STMT_ERROR,INVALID ;; Duplicate LOWCOUNT parms ;AN000; | ||
| 218 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 219 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 220 | .ENDIF ;; ;AN000; | ||
| 221 | .WHEN <BL EQ 3> ;; HIGHCOUNT ;AN000; | ||
| 222 | .IF <HIGHCOUNT_FOUND EQ NO> ;; ;AN000; | ||
| 223 | MOV HIGHCOUNT_FOUND,YES ;; ;AN000; | ||
| 224 | PUSH AX ;; ;AN000; | ||
| 225 | MOV AX,1 ;; Add a byte to the sequence ;AN000; | ||
| 226 | CALL GROW_SHARED_DATA ;; Update block end ;AN000; | ||
| 227 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 228 | PUSH DI ;; ;AN000; | ||
| 229 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 230 | INC [BP+DI].NUM_GRAPHICS_ESC ;; Bump number of bytes in sequen;AN000; | ||
| 231 | MOV AX,BLOCK_END ;; Save pointer to high byte ;AN000; | ||
| 232 | DEC AX ;; Block end always points 1 ahead ;AN000; | ||
| 233 | MOV [BP+DI].HGH_BYT_COUNT_PTR,AX ;AN000; | ||
| 234 | MOV DI,AX ;; ;AN000; | ||
| 235 | MOV BYTE PTR[BP+DI],0 ;; Store 0 in place of count ;AN000; | ||
| 236 | POP DI ;; ;AN000; | ||
| 237 | .ENDIF ;; ;AN000; | ||
| 238 | POP AX ;; ;AN000; | ||
| 239 | .ELSE ;; ;AN000; | ||
| 240 | OR STMT_ERROR,INVALID ;; Duplicate HIGHCOUNT parms ;AN000; | ||
| 241 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 242 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 243 | .ENDIF ;; ;AN000; | ||
| 244 | .ENDSELECT ;; ;AN000; | ||
| 245 | .ELSE NEAR ;; ;AN000; | ||
| 246 | .IF <AX NE -1> ;; ;AN000; | ||
| 247 | OR STMT_ERROR,INVALID ;; parm is invalid ;AN000; | ||
| 248 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 249 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 250 | .ENDIF ;; ;AN000; | ||
| 251 | .ENDIF ;; ;AN000; | ||
| 252 | .UNTIL <AX EQ -1> NEAR ;; ;AN000; | ||
| 253 | ;; ;AN000; | ||
| 254 | .IF <LOWCOUNT_FOUND EQ NO> OR ;; ;AN000; | ||
| 255 | .IF <HIGHCOUNT_FOUND EQ NO> ;; Missing LOWCOUNT/HIGHCOUNT parms ;AN000; | ||
| 256 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 257 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 258 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 259 | .ENDIF ;; ;AN000; | ||
| 260 | ;; ;AN000; | ||
| 261 | RET ;; ;AN000; | ||
| 262 | ;; ;AN000; | ||
| 263 | PARSE_GRAPHICS ENDP ;; ;AN000; | ||
| 264 | ;; ;AN000; | ||
| 265 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 266 | ;; ;AN000; | ||
| 267 | ;; Module Name: ;AN000; | ||
| 268 | ;; PARSE_COLORSELECT ;AN000; | ||
| 269 | ;; ;AN000; | ||
| 270 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 271 | ;; ;AN000; | ||
| 272 | COLORSELECT_PARSE_PARMS LABEL WORD ;; Parser control blocks ;AN000; | ||
| 273 | DW COLORSELECT_P ;; ;AN000; | ||
| 274 | DB 2 ;; # of lists ;AN000; | ||
| 275 | DB 0 ;; # items in delimeter list ;AN000; | ||
| 276 | DB 1 ;; # items in end-of-line list ;AN000; | ||
| 277 | DB ';' ;; ';' used for comments ;AN000; | ||
| 278 | ;; ;AN000; | ||
| 279 | ;; ;AN000; | ||
| 280 | COLORSELECT_P LABEL BYTE ;; ;AN000; | ||
| 281 | CS_NUM_REQ DB 1,1 ;; Required, max parms ;AN000; | ||
| 282 | COLORSELECT_PARM LABEL WORD ;; ;AN000; | ||
| 283 | CS_POSITIONAL DW ? ;; Pointer to our positional ;AN000; | ||
| 284 | DB 0 ;; # Switches ;AN000; | ||
| 285 | DB 0 ;; # keywords ;AN000; | ||
| 286 | ;; ;AN000; | ||
| 287 | COLORSELECT_P0 DW 2000H ;; sTRING - display type ;AN000; | ||
| 288 | DW 2 ;; Capitalize ;AN000; | ||
| 289 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 290 | DW COLORSELECT_P0V ;; Value list ;AN000; | ||
| 291 | DB 0 ;; Synomyms ;AN000; | ||
| 292 | ;; ;AN000; | ||
| 293 | COLORSELECT_P0V DB 0 ;; # of value lists ;AN000; | ||
| 294 | ; DB 0 ;; # of range numerics ;AN000; | ||
| 295 | ; DB 0 ;; # of discrete numerics ;AN000; | ||
| 296 | ; DB 1 ;; # of strings ;AN000; | ||
| 297 | ; DB 1 ;; tag ;AN000; | ||
| 298 | ;COLORSELECT_P0V1 DW ? ;; string ;AN000; | ||
| 299 | ;; ;AN000; | ||
| 300 | COLORSELECT_P1 DW 8001H ;; Numeric - escape sequence byte ;AN000; | ||
| 301 | DW 0 ;; No Capitalize ;AN000; | ||
| 302 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 303 | DW COLORSELECT_P1V ;; Value list ;AN000; | ||
| 304 | DB 0 ;; Synomyms ;AN000; | ||
| 305 | ;; ;AN000; | ||
| 306 | COLORSELECT_P1V DB 1 ;; # of value lists ;AN000; | ||
| 307 | DB 1 ;; # of range numerics ;AN000; | ||
| 308 | DB 1 ;; tag ;AN000; | ||
| 309 | DD 1,255 ;; range 1..255 ;AN000; | ||
| 310 | ;; ;AN000; | ||
| 311 | ;; ;AN000; | ||
| 312 | ;; ;AN000; | ||
| 313 | SEQ_LENGTH_PTR DW 0 ;; Number of colorselect statements ;AN000; | ||
| 314 | ;; ;AN000; | ||
| 315 | ;; ;AN000; | ||
| 316 | ;; ;AN000; | ||
| 317 | PARSE_COLORSELECT PROC ;; ;AN000; | ||
| 318 | ;; ;AN000; | ||
| 319 | MOV CUR_STMT,COLS ;; ;AN000; | ||
| 320 | .IF <BIT STMTS_DONE NAND PRT> ;; PRINTER statemnet must have been ;AN000; | ||
| 321 | OR STMT_ERROR,MISSING ;; processed ;AN000; | ||
| 322 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 323 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 324 | .ENDIF ;; ;AN000; | ||
| 325 | ;; ;AN000; | ||
| 326 | .IF <BIT STMTS_DONE AND DISP+COLP> ;; DISDPLAYMODE and COLORPRINT stmts ;AN000; | ||
| 327 | OR STMT_ERROR,SEQUENCE ;; should NOT have been processed ;AN000; | ||
| 328 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 329 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 330 | .ENDIF ;; ;AN000; | ||
| 331 | ;; ;AN000; | ||
| 332 | .IF <BIT GROUPS_DONE AND COLS> ;; Check for a previous group of ;AN000; | ||
| 333 | OR STMT_ERROR,SEQUENCE ;; COLORSELECTS within this PTD ;AN000; | ||
| 334 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 335 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 336 | .ENDIF ;; ;AN000; | ||
| 337 | ;; ;AN000; | ||
| 338 | .IF <BIT STMTS_DONE NAND COLS> ;; If first COLORSELECT... ;AN000; | ||
| 339 | MOV NUM_BANDS,0 ;; Init number of COLORSELECT bands ;AN000; | ||
| 340 | .IF <BUILD_STATE EQ YES> ;; Update count and pointer in the ;AN000; | ||
| 341 | MOV AX,BLOCK_END ;; Shared Data Area header ;AN000; | ||
| 342 | MOV [BP].COLORSELECT_PTR,AX ;; Set pointer to COLORSELECT info ;AN000; | ||
| 343 | MOV [BP].NUM_PRT_BANDS,0 ;; Init NUMBER OF COLORSELECTS ;AN000; | ||
| 344 | .ENDIF ;; ;AN000; | ||
| 345 | .ENDIF ;; ;AN000; | ||
| 346 | ;; ;AN000; | ||
| 347 | OR STMTS_DONE,COLS ;; Indicate found ;AN000; | ||
| 348 | .IF <PREV_STMT NE COLS> THEN ;; Terminate any preceeding groups ;AN000; | ||
| 349 | MOV AX,PREV_STMT ;; except for COLORSELECT ;AN000; | ||
| 350 | OR GROUPS_DONE,AX ;; ;AN000; | ||
| 351 | .ENDIF ;; ;AN000; | ||
| 352 | ;; ;AN000; | ||
| 353 | MOV AX,1 ;; Make room for sequence length field ;AN000; | ||
| 354 | CALL GROW_SHARED_DATA ;; ;AN000; | ||
| 355 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 356 | INC [BP].NUM_PRT_BANDS ;; Inc number of selects ;AN000; | ||
| 357 | MOV DI,BLOCK_END ;; ;AN000; | ||
| 358 | MOV BYTE PTR [BP+DI-1],0 ;; Init sequence length field ;AN000; | ||
| 359 | LEA AX,[DI-1] ;; ;AN000; | ||
| 360 | MOV SEQ_LENGTH_PTR,AX ;; Save pointer to length of sequence ;AN000; | ||
| 361 | .ENDIF ;; ;AN000; | ||
| 362 | ;; ;AN000; | ||
| 363 | MOV DI,OFFSET COLORSELECT_PARSE_PARMS ;; parse parms ;AN000; | ||
| 364 | MOV CS_NUM_REQ,1 ;; Change to 1 required parameters ;AN000; | ||
| 365 | MOV AX,OFFSET COLORSELECT_P0 ;; Point to control block for the band ;AN000; | ||
| 366 | MOV CS_POSITIONAL,AX ;; ID. (Dealing with only 1 positional ;AN000; | ||
| 367 | ;; parameter at a time was the only way ;AN000; | ||
| 368 | ;; I could get SYSPARSE to handle ;AN000; | ||
| 369 | ;; the COLORSELECT syntax!) ;AN000; | ||
| 370 | ;; SI => the line to parse ;AN000; | ||
| 371 | XOR DX,DX ;; ;AN000; | ||
| 372 | XOR CX,CX ;; ;AN000; | ||
| 373 | ;; ;AN000; | ||
| 374 | CALL SYSPARSE ;; PARSE the band ID ;AN000; | ||
| 375 | .IF <AX NE 0> ;; ;AN000; | ||
| 376 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 377 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 378 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 379 | RET ;; statement. ;AN000; | ||
| 380 | .ENDIF ;; ;AN000; | ||
| 381 | ;; ;AN000; | ||
| 382 | PUSH ES ;; We got a band id........ ;AN000; | ||
| 383 | PUSH DI ;; ;AN000; | ||
| 384 | ;; ;AN000; | ||
| 385 | LES DI,DWORD PTR RESULT_VAL ;; Get pointer to the parsed band id ;AN000; | ||
| 386 | .IF <<BYTE PTR ES:[DI+1]> NE 0> ;; Make sure the band id is only ;AN000; | ||
| 387 | OR STMT_ERROR,INVALID ;; one byte long ;AN000; | ||
| 388 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 389 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 390 | .ENDIF ;; ;AN000; | ||
| 391 | ;; ;AN000; | ||
| 392 | MOV BL,NUM_BANDS ;; ;AN000; | ||
| 393 | XOR BH,BH ;; ;AN000; | ||
| 394 | .IF <BX EQ MAX_BANDS> THEN ;; Watch out for too many COLORSELECTs ;AN000; | ||
| 395 | OR STMT_ERROR,SEQUENCE ;; ;AN000; | ||
| 396 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 397 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 398 | .ELSE ;; ;AN000; | ||
| 399 | SHL BX,1 ;; calc index to store band in value list;AN000; | ||
| 400 | MOV AL,ES:[DI] ;; get BAND ID FROM PARSEr ;AN000; | ||
| 401 | MOV BAND_VAL_LIST[BX],AL ;; ;AN000; | ||
| 402 | INC NUM_BANDS ;; bump number of bands ;AN000; | ||
| 403 | .ENDIF ;; ;AN000; | ||
| 404 | ;; ;AN000; | ||
| 405 | POP DI ;; ;AN000; | ||
| 406 | POP ES ;; ;AN000; | ||
| 407 | ;; ;AN000; | ||
| 408 | ;; ;AN000; | ||
| 409 | MOV AX,OFFSET COLORSELECT_P1 ;; Switch to numeric positional parm!!! ;AN000; | ||
| 410 | MOV CS_POSITIONAL,AX ;; ;AN000; | ||
| 411 | MOV CS_NUM_REQ,0 ;; Change to 0 required parameters ;AN000; | ||
| 412 | XOR DX,DX ;; PARSE the sequence of escape bytes ;AN000; | ||
| 413 | .REPEAT ;; ;AN000; | ||
| 414 | XOR CX,CX ;; ;AN000; | ||
| 415 | CALL SYSPARSE ;; ;AN000; | ||
| 416 | .IF <AX EQ 0> ;; If esc byte is valid ;AN000; | ||
| 417 | PUSH AX ;; ;AN000; | ||
| 418 | MOV AX,1 ;; Add a byte to the sequence ;AN000; | ||
| 419 | CALL GROW_SHARED_DATA ;; Update block end ;AN000; | ||
| 420 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 421 | PUSH DI ;; ;AN000; | ||
| 422 | MOV DI,SEQ_LENGTH_PTR ;; ;AN000; | ||
| 423 | INC byte ptr [BP+DI] ;; Bump number of bytes in sequence ;AN000; | ||
| 424 | MOV DI,BLOCK_END ;; ;AN000; | ||
| 425 | MOV AL,RESULT_VAL ;; Get esc byte from result buffer ;AN000; | ||
| 426 | MOV [BP+DI-1],AL ;; Store at end of sequence ;AN000; | ||
| 427 | POP DI ;; ;AN000; | ||
| 428 | .ENDIF ;; ;AN000; | ||
| 429 | POP AX ;; ;AN000; | ||
| 430 | .ELSE ;; ;AN000; | ||
| 431 | .IF <AX NE -1> ;; ;AN000; | ||
| 432 | OR STMT_ERROR,INVALID ;; parm is invalid ;AN000; | ||
| 433 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 434 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 435 | .ENDIF ;; ;AN000; | ||
| 436 | .ENDIF ;; ;AN000; | ||
| 437 | .UNTIL <AX EQ -1> NEAR ;; ;AN000; | ||
| 438 | ;; ;AN000; | ||
| 439 | ;; ;AN000; | ||
| 440 | RET ;; ;AN000; | ||
| 441 | ;; ;AN000; | ||
| 442 | PARSE_COLORSELECT ENDP ;; ;AN000; | ||
| 443 | ;; ;AN000; | ||
| 444 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 445 | ;; ;AN000; | ||
| 446 | ;; Module Name: ;AN000; | ||
| 447 | ;; PARSE_COLORPRINT ;AN000; | ||
| 448 | ;; ;AN000; | ||
| 449 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 450 | ;; ;AN000; | ||
| 451 | COLORPRINT_PARSE_PARMS LABEL WORD ;; Parser control blocks ;AN000; | ||
| 452 | DW COLORPRINT_P ;; ;AN000; | ||
| 453 | DB 2 ;; # of lists ;AN000; | ||
| 454 | DB 0 ;; # items in delimeter list ;AN000; | ||
| 455 | DB 1 ;; # items in end-of-line list ;AN000; | ||
| 456 | DB ';' ;; ';' used for comments ;AN000; | ||
| 457 | ;; ;AN000; | ||
| 458 | ;; ;AN000; | ||
| 459 | COLORPRINT_P LABEL BYTE ;; ;AN000; | ||
| 460 | DB 3,4 ;; Required,MAX ;AN000; | ||
| 461 | DW COLORPRINT_P0 ;; Numeric: Red value ;AN000; | ||
| 462 | DW COLORPRINT_P0 ;; Green value ;AN000; | ||
| 463 | DW COLORPRINT_P0 ;; Blue value ;AN000; | ||
| 464 | DW COLORPRINT_P1 ;; Band ID ... REPEATING ;AN000; | ||
| 465 | DB 0 ;; # Switches ;AN000; | ||
| 466 | DB 0 ;; # keywords ;AN000; | ||
| 467 | ;; ;AN000; | ||
| 468 | COLORPRINT_P0 DW 8000H ;; Numeric - RGB value ;AN000; | ||
| 469 | DW 0 ;; No Capitalize ;AN000; | ||
| 470 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 471 | DW COLORPRINT_P0V ;; Value list ;AN000; | ||
| 472 | DB 0 ;; Synomyms ;AN000; | ||
| 473 | ;; ;AN000; | ||
| 474 | COLORPRINT_P0V DB 1 ;; # of value lists ;AN000; | ||
| 475 | DB 1 ;; # of range numerics ;AN000; | ||
| 476 | DB 1 ;; tag ;AN000; | ||
| 477 | DD 0,63 ;; range 0..63 ;AN000; | ||
| 478 | ;; ;AN000; | ||
| 479 | COLORPRINT_P1 DW 2001H ;; sTRING - Band ID ;AN000; | ||
| 480 | DW 2 ;; Capitalize ;AN000; | ||
| 481 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 482 | DW COLORPRINT_P1V ;; Value list ;AN000; | ||
| 483 | DB 0 ;; Synomyms ;AN000; | ||
| 484 | ;; ;AN000; | ||
| 485 | COLORPRINT_P1V DB 3 ;; # of value lists ;AN000; | ||
| 486 | DB 0 ;; 0 - no range numerics ;AN000; | ||
| 487 | DB 0 ;; 0 - no actual numerics ;AN000; | ||
| 488 | NUM_BANDS DB 0 ;; number of band values ;AN000; | ||
| 489 | DB 01H ;; tag: TAGS ARE BAND MASKS ;AN000; | ||
| 490 | DW BAND_PTR_1 ;; ptr ;AN000; | ||
| 491 | DB 02H ;; tag ;AN000; | ||
| 492 | DW BAND_PTR_2 ;; ptr ;AN000; | ||
| 493 | DB 04H ;; tag ;AN000; | ||
| 494 | DW BAND_PTR_3 ;; ptr ;AN000; | ||
| 495 | DB 08H ;; tag ;AN000; | ||
| 496 | DW BAND_PTR_4 ;; ptr ;AN000; | ||
| 497 | DB 10H ;; tag ;AN000; | ||
| 498 | DW BAND_PTR_5 ;; ptr ;AN000; | ||
| 499 | DB 20H ;; tag ;AN000; | ||
| 500 | DW BAND_PTR_6 ;; ptr ;AN000; | ||
| 501 | DB 40H ;; tag ;AN000; | ||
| 502 | DW BAND_PTR_7 ;; ptr ;AN000; | ||
| 503 | DB 80H ;; tag ;AN000; | ||
| 504 | DW BAND_PTR_8 ;; ptr ;AN000; | ||
| 505 | ;; ;AN000; | ||
| 506 | MAX_BANDS EQU 8 ;; ;AN000; | ||
| 507 | ;; ;AN000; | ||
| 508 | BAND_VAL_LIST LABEL BYTE ;; ;AN000; | ||
| 509 | BAND_PTR_1 DB ?,0 ;; ;AN000; | ||
| 510 | BAND_PTR_2 DB ?,0 ;; ;AN000; | ||
| 511 | BAND_PTR_3 DB ?,0 ;; ;AN000; | ||
| 512 | BAND_PTR_4 DB ?,0 ;; ;AN000; | ||
| 513 | BAND_PTR_5 DB ?,0 ;; ;AN000; | ||
| 514 | BAND_PTR_6 DB ?,0 ;; ;AN000; | ||
| 515 | BAND_PTR_7 DB ?,0 ;; ;AN000; | ||
| 516 | BAND_PTR_8 DB ?,0 ;; ;AN000; | ||
| 517 | ;; ;AN000; | ||
| 518 | ;; ;AN000; | ||
| 519 | PARSE_COLORPRINT PROC ;; ;AN000; | ||
| 520 | ;; ;AN000; | ||
| 521 | MOV CUR_STMT,COLP ;; ;AN000; | ||
| 522 | .IF <BIT STMTS_DONE NAND PRT> ;; PRINTER statemnet must have been ;AN000; | ||
| 523 | OR STMT_ERROR,MISSING ;; processed ;AN000; | ||
| 524 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 525 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 526 | .ENDIF ;; ;AN000; | ||
| 527 | ;; ;AN000; | ||
| 528 | .IF <BIT STMTS_DONE AND DISP> ;; DISPLAYMODE stmts ;AN000; | ||
| 529 | OR STMT_ERROR,SEQUENCE ;; should NOT have been processed ;AN000; | ||
| 530 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 531 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 532 | .ENDIF ;; ;AN000; | ||
| 533 | ;; ;AN000; | ||
| 534 | .IF <BIT GROUPS_DONE AND COLP> ;; Check for a previous group of ;AN000; | ||
| 535 | OR STMT_ERROR,SEQUENCE ;; COLORPRINTS within this PTD ;AN000; | ||
| 536 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 537 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 538 | .ENDIF ;; ;AN000; | ||
| 539 | ;; ;AN000; | ||
| 540 | MOV CUR_PRINTER_TYPE,COLOR ;; ;AN000; | ||
| 541 | ;; ;AN000; | ||
| 542 | .IF <BIT STMTS_DONE NAND COLP> ;; If first COLORPRINT... ;AN000; | ||
| 543 | .IF <BUILD_STATE EQ YES> ;; Update count and pointer in the ;AN000; | ||
| 544 | MOV AX,BLOCK_END ;; Shared Data Area header ;AN000; | ||
| 545 | MOV [BP].COLORPRINT_PTR,AX ;; Set pointer to COLORPRINT info ;AN000; | ||
| 546 | MOV [BP].PRINTER_TYPE,COLOR ;; ;AN000; | ||
| 547 | MOV [BP].NUM_PRT_COLOR,0 ;; Init NUMBER OF COLORPRINTS ;AN000; | ||
| 548 | .ENDIF ;; ;AN000; | ||
| 549 | .ENDIF ;; ;AN000; | ||
| 550 | ;; ;AN000; | ||
| 551 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 552 | INC [BP].NUM_PRT_COLOR ;; Inc number of selects ;AN000; | ||
| 553 | .ENDIF ;; ;AN000; | ||
| 554 | ;; ;AN000; | ||
| 555 | OR STMTS_DONE,COLP ;; Indicate found ;AN000; | ||
| 556 | .IF <PREV_STMT NE COLP> THEN ;; Terminate any preceeding groups ;AN000; | ||
| 557 | MOV AX,PREV_STMT ;; except for COLORPRINT ;AN000; | ||
| 558 | OR GROUPS_DONE,AX ;; ;AN000; | ||
| 559 | .ENDIF ;; ;AN000; | ||
| 560 | ;; ;AN000; | ||
| 561 | MOV AX,BLOCK_END ;; Start a new block ;AN000; | ||
| 562 | MOV BLOCK_START,AX ;; ;AN000; | ||
| 563 | MOV AX,SIZE COLORPRINT_STR ;; Make room for COLORPRINT info ;AN000; | ||
| 564 | CALL GROW_SHARED_DATA ;; ;AN000; | ||
| 565 | ;; ;AN000; | ||
| 566 | MOV DI,OFFSET COLORPRINT_PARSE_PARMS ;; parse parms ;AN000; | ||
| 567 | ;; SI => the line to parse ;AN000; | ||
| 568 | XOR DX,DX ;; ;AN000; | ||
| 569 | XOR CX,CX ;; ;AN000; | ||
| 570 | ;; ;AN000; | ||
| 571 | CALL SYSPARSE ;; PARSE the RED value ;AN000; | ||
| 572 | .IF <AX NE 0> ;; ;AN000; | ||
| 573 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 574 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 575 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 576 | .ELSE ;; ;AN000; | ||
| 577 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 578 | PUSH DI ;; ;AN000; | ||
| 579 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 580 | MOV AL,RESULT_VAL ;; Store RED value in COLORPRINT info ;AN000; | ||
| 581 | MOV [BP+DI].RED,AL ;; ;AN000; | ||
| 582 | POP DI ;; ;AN000; | ||
| 583 | .ENDIF ;; ;AN000; | ||
| 584 | .ENDIF ;; ;AN000; | ||
| 585 | ;; ;AN000; | ||
| 586 | CALL SYSPARSE ;; PARSE the GREEN value ;AN000; | ||
| 587 | .IF <AX NE 0> ;; ;AN000; | ||
| 588 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 589 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 590 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 591 | .ELSE ;; ;AN000; | ||
| 592 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 593 | PUSH DI ;; ;AN000; | ||
| 594 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 595 | MOV AL,RESULT_VAL ;; Store GREEN value in COLORPRINT info ;AN000; | ||
| 596 | MOV [BP+DI].GREEN,AL ;; ;AN000; | ||
| 597 | POP DI ;; ;AN000; | ||
| 598 | .ENDIF ;; ;AN000; | ||
| 599 | .ENDIF ;; ;AN000; | ||
| 600 | ;; ;AN000; | ||
| 601 | CALL SYSPARSE ;; PARSE the BLUE value ;AN000; | ||
| 602 | .IF <AX NE 0> ;; ;AN000; | ||
| 603 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 604 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 605 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 606 | .ELSE ;; ;AN000; | ||
| 607 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 608 | PUSH DI ;; ;AN000; | ||
| 609 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 610 | MOV AL,RESULT_VAL ;; Store BLUE value in COLORPRINT info ;AN000; | ||
| 611 | MOV [BP+DI].BLUE,AL ;; ;AN000; | ||
| 612 | POP DI ;; ;AN000; | ||
| 613 | .ENDIF ;; ;AN000; | ||
| 614 | .ENDIF ;; ;AN000; | ||
| 615 | ;; ;AN000; | ||
| 616 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 617 | PUSH DI ;; ;AN000; | ||
| 618 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 619 | MOV [BP+DI].SELECT_MASK,0 ;; Initialize band select mask ;AN000; | ||
| 620 | POP DI ;; ;AN000; | ||
| 621 | .ENDIF ;; ;AN000; | ||
| 622 | XOR DX,DX ;; For each band found "OR" the item ;AN000; | ||
| 623 | .REPEAT ;; tag into the select mask ;AN000; | ||
| 624 | MOV CX,3 ;; Avoid getting too many parms error ;AN000; | ||
| 625 | CALL SYSPARSE ;; from parser ;AN000; | ||
| 626 | .IF <AX EQ 0> ;; ;AN000; | ||
| 627 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 628 | PUSH DI ;; ;AN000; | ||
| 629 | MOV DI,BLOCK_START ;; ;AN000; | ||
| 630 | MOV AL,RESULT_TAG ;; ;AN000; | ||
| 631 | OR [BP+DI].SELECT_MASK,AL ;; OR the mask for this band into the ;AN000; | ||
| 632 | ;; select mask for this color ;AN000; | ||
| 633 | POP DI ;; ;AN000; | ||
| 634 | .ENDIF ;; ;AN000; | ||
| 635 | .ELSE ;; ;AN000; | ||
| 636 | .IF <AX NE -1> ;; ;AN000; | ||
| 637 | OR STMT_ERROR,INVALID ;; parm is invalid ;AN000; | ||
| 638 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 639 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 640 | .ENDIF ;; ;AN000; | ||
| 641 | .ENDIF ;; ;AN000; | ||
| 642 | .UNTIL <AX EQ -1> NEAR ;; ;AN000; | ||
| 643 | ;; ;AN000; | ||
| 644 | RET ;; ;AN000; | ||
| 645 | ;; ;AN000; | ||
| 646 | PARSE_COLORPRINT ENDP ;; ;AN000; | ||
| 647 | ;; ;AN000; | ||
| 648 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 649 | ;; ;AN000; | ||
| 650 | ;; ;AN000; | ||
| 651 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 652 | ;; ;AN000; | ||
| 653 | ;; Module Name: ;AN000; | ||
| 654 | ;; PARSE_DARKADJUST ;AN000; | ||
| 655 | ;; ;AN000; | ||
| 656 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AN000; | ||
| 657 | ;AN000; | ||
| 658 | DARKADJUST_PARSE_PARMS LABEL WORD ;; Parser control blocks ;AN000; | ||
| 659 | DW DARKADJUST_P ;; ;AN000; | ||
| 660 | DB 2 ;; # of lists ;AN000; | ||
| 661 | DB 0 ;; # items in delimeter list ;AN000; | ||
| 662 | DB 1 ;; # items in end-of-line list ;AN000; | ||
| 663 | DB ';' ;; ';' used for comments ;AN000; | ||
| 664 | ;; ;AN000; | ||
| 665 | ;; ;AN000; | ||
| 666 | DARKADJUST_P LABEL BYTE ;; ;AN000; | ||
| 667 | DB 1,1 ;; Required,MAX ;AN000; | ||
| 668 | DW DARKADJUST_P0 ;; Numeric: adjust value ;AN000; | ||
| 669 | DB 0 ;; # Switches ;AN000; | ||
| 670 | DB 0 ;; # keywords ;AN000; | ||
| 671 | ;; ;AN000; | ||
| 672 | DARKADJUST_P0 DW 4000H ;; Signed Numeric - adjust value ;AN000; | ||
| 673 | DW 0 ;; No Capitalize ;AN000; | ||
| 674 | DW RESULT_BUFFER ;; Result buffer ;AN000; | ||
| 675 | DW DARKADJUST_P0V ;; Value list ;AN000; | ||
| 676 | DB 0 ;; Synomyms ;AN000; | ||
| 677 | ;; ;AN000; | ||
| 678 | DARKADJUST_P0V DB 1 ;; # of value lists ;AN000; | ||
| 679 | DB 1 ;; # of range numerics ;AN000; | ||
| 680 | DB 1 ;; tag ;AN000; | ||
| 681 | DD -63,63 ;; range -63,63 ;AN000; | ||
| 682 | ;;;;***********************************;; ;AN000; | ||
| 683 | ;; ;AN000; | ||
| 684 | ;AN000; | ||
| 685 | PARSE_DARKADJUST PROC ;; ;AN000; | ||
| 686 | ;; ;AN000; | ||
| 687 | MOV CUR_STMT,DARK ;; ;AN000; | ||
| 688 | .IF <BIT STMTS_DONE NAND PRT> ;; PRINTER statemnet must have been ;AN000; | ||
| 689 | OR STMT_ERROR,MISSING ;; processed ;AN000; | ||
| 690 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 691 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 692 | .ENDIF ;; ;AN000; | ||
| 693 | ;; ;AN000; | ||
| 694 | ;; ;AN000; | ||
| 695 | OR STMTS_DONE,DARK ;; Indicate found ;AN000; | ||
| 696 | ;; Terminate any preceeding groups ;AN000; | ||
| 697 | MOV AX,PREV_STMT ;; ;AN000; | ||
| 698 | OR GROUPS_DONE,AX ;; ;AN000; | ||
| 699 | ;; ;AN000; | ||
| 700 | MOV DI,OFFSET DARKADJUST_PARSE_PARMS ;; parse parms ;AN000; | ||
| 701 | ;; SI => the line to parse ;AN000; | ||
| 702 | XOR DX,DX ;; ;AN000; | ||
| 703 | XOR CX,CX ;; ;AN000; | ||
| 704 | ;; ;AN000; | ||
| 705 | CALL SYSPARSE ;; PARSE the ADJUST VALUE ;AN000; | ||
| 706 | .IF <AX NE 0> ;; ;AN000; | ||
| 707 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 708 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 709 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 710 | .ELSE ;; ;AN000; | ||
| 711 | .IF <BUILD_STATE EQ YES> ;; ;AN000; | ||
| 712 | MOV AL,RESULT_VAL ;; ;AN000; | ||
| 713 | MOV [BP].DARKADJUST_VALUE,AL ;; ;AN000; | ||
| 714 | .ENDIF ;; ;AN000; | ||
| 715 | CALL SYSPARSE ;; CHECK FOR EXTRA PARMS ;AN000; | ||
| 716 | .IF <AX NE -1> ;; ;AN000; | ||
| 717 | OR STMT_ERROR,INVALID ;; ;AN000; | ||
| 718 | MOV PARSE_ERROR,YES ;; ;AN000; | ||
| 719 | MOV BUILD_STATE,NO ;; ;AN000; | ||
| 720 | .ENDIF ;; ;AN000; | ||
| 721 | .ENDIF ;; ;AN000; | ||
| 722 | ;; ;AN000; | ||
| 723 | RET ;; ;AN000; | ||
| 724 | ;; ;AN000; | ||
| 725 | PARSE_DARKADJUST ENDP ;; ;AN000; | ||
| 726 | ;AN000; | ||
| 727 | LIMIT LABEL NEAR ;; ;AN000; | ||
| 728 | CODE ENDS ;; ;AN000; | ||
| 729 | END ;AN000; | ||