diff options
Diffstat (limited to 'v4.0/src/CMD/MODE/MODEECHO.ASM')
| -rw-r--r-- | v4.0/src/CMD/MODE/MODEECHO.ASM | 482 |
1 files changed, 482 insertions, 0 deletions
diff --git a/v4.0/src/CMD/MODE/MODEECHO.ASM b/v4.0/src/CMD/MODE/MODEECHO.ASM new file mode 100644 index 0000000..a17c2d5 --- /dev/null +++ b/v4.0/src/CMD/MODE/MODEECHO.ASM | |||
| @@ -0,0 +1,482 @@ | |||
| 1 | PAGE ,132 ; | ||
| 2 | TITLE MODEECHO - REDIRECT PRINTER OUTPUT FROM PARALLEL TO SERIAL | ||
| 3 | |||
| 4 | .XLIST | ||
| 5 | INCLUDE STRUC.INC | ||
| 6 | .LIST | ||
| 7 | |||
| 8 | INCLUDE common.stc ;definition of parm_list_entry struc | ||
| 9 | |||
| 10 | DISPLAY MACRO MSG | ||
| 11 | MOV DX,OFFSET MSG | ||
| 12 | CALL PRINTF | ||
| 13 | ENDM | ||
| 14 | |||
| 15 | SET MACRO REG,VALUE ;SET REG TO VALUE. DON'T SPECIFY AX FOR REG | ||
| 16 | PUSH AX | ||
| 17 | MOV AX,VALUE | ||
| 18 | MOV REG,AX | ||
| 19 | POP AX | ||
| 20 | ENDM | ||
| 21 | |||
| 22 | |||
| 23 | ;***************************************************************** | ||
| 24 | VECT SEGMENT AT 0 | ||
| 25 | ORG 50H | ||
| 26 | VECT14H LABEL DWORD ;RS232 CALL, WILL POINT TO MODETO AFTER | ||
| 27 | ; RESIDENT CODE IS LOADED. | ||
| 28 | ORG 400H | ||
| 29 | RS232_BASE DW ? ;ADDR OF RS232 ADAPTER FOR COM1 | ||
| 30 | DW ? ;ADDR OF RS232 ADAPTER FOR COM2 | ||
| 31 | DW ? ;ADDR OF RS232 ADAPTER FOR COM3 | ||
| 32 | DW ? ;ADDR OF RS232 ADAPTER FOR COM4 | ||
| 33 | ; | ||
| 34 | ORG 408H | ||
| 35 | PRINTR DW ? ;LPT1 | ||
| 36 | DW ? ;LPT2 | ||
| 37 | DW ? ;LPT3 | ||
| 38 | ; | ||
| 39 | ORG 530H | ||
| 40 | RESSEG DD ? ;VECTOR OF MODETO, IF RESIDENT,OR 0 | ||
| 41 | VECT ENDS | ||
| 42 | ;***************************************************************** | ||
| 43 | ascii_to_int EQU 0FH ;ANDed with an ascii 0-9 value yeilds binary 0-9 | ||
| 44 | CR EQU 13 ;CARRIAGE RETURN | ||
| 45 | LF EQU 10 ;LINE FEED | ||
| 46 | parm_list EQU [BP] ;AN000; ;AN000; | ||
| 47 | TO_SCREEN EQU 9 ;REQUEST OUTPUT TO SCREEN | ||
| 48 | |||
| 49 | PUBLIC LPTNO ;used by modeprin and modepars | ||
| 50 | PUBLIC PRINTR | ||
| 51 | PUBLIC display_printer_reroute_status | ||
| 52 | |||
| 53 | PAGE | ||
| 54 | ;*************************************************************** | ||
| 55 | PRINTF_CODE SEGMENT PUBLIC | ||
| 56 | ASSUME CS:PRINTF_CODE,DS:PRINTF_CODE,ES:NOTHING | ||
| 57 | |||
| 58 | ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ D A T A ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» | ||
| 59 | ;º º | ||
| 60 | |||
| 61 | two DB 2 ;used to change byte displacement to word disp. See 'modeecho' | ||
| 62 | LPTNO DB 0 ;holder of ASCII form of the LPT number (1 thru 3) | ||
| 63 | |||
| 64 | ;º º | ||
| 65 | ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ D A T A ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ | ||
| 66 | |||
| 67 | EXTRN PARM1:BYTE,PARM2:BYTE,PARM3:BYTE,MODE:BYTE,FLAG:BYTE | ||
| 68 | ;PARM1 DB 10 DUP(0) | ||
| 69 | ;PARM2 DB 0 | ||
| 70 | ;PARM3 DB 0 | ||
| 71 | ;MODE DB 0 | ||
| 72 | ;FLAG DB 0 | ||
| 73 | ENDPARM EQU MODE | ||
| 74 | EXTRN CRLF:BYTE ;AN000;carriage return linefeed | ||
| 75 | EXTRN parm_lst:BYTE ;AN000; | ||
| 76 | EXTRN illegal_device_ptr:WORD ;AN000;pointer to bad com device name string | ||
| 77 | EXTRN MODELOAD:NEAR | ||
| 78 | EXTRN PRINTF:NEAR ;FORMATTED "C" LIKE SCREEN OUTPUT ROUTINE | ||
| 79 | EXTRN REDIRMSG:WORD ;CR,LF,"LPT" | ||
| 80 | EXTRN REDPT:BYTE ;" " | ||
| 81 | ; ": rerouted to COM" | ||
| 82 | EXTRN REDCOM:BYTE ;" " | ||
| 83 | ; ":",CR,LF,"$" | ||
| 84 | ; | ||
| 85 | EXTRN NOTREMSG:WORD ;CR,LF,"LPT" | ||
| 86 | EXTRN NOTREDPT:BYTE ;" " | ||
| 87 | ; ": not redirected.",CR,LF,"$" | ||
| 88 | ;EXTRN printer_reroute_mask:BYTE ;mask for testing ptsflag1 to see if a printer is rerouted | ||
| 89 | EXTRN ptsflag1:BYTE ;see rescode.sal | ||
| 90 | EXTRN ERR1:WORD ;"ILLEGAL DEVICE NAME" | ||
| 91 | EXTRN resflag2:ABS ;see rescode | ||
| 92 | EXTRN FIXUP:ABS ;IN MODEPTS, OFFSET USED BY COND. JMP | ||
| 93 | EXTRN OFFPTS:ABS ;WHERE MODEPTS IS RELATIVE TO BEGINNING | ||
| 94 | ; OF MODETO | ||
| 95 | EXTRN NEW_PTSFLAG:ABS ;WHERE PTSFLAG1 IS IN THE RESIDENT CODE | ||
| 96 | ; RELATIVE TO BEGINING OF MODETO | ||
| 97 | ; | ||
| 98 | ;*************************************************************** | ||
| 99 | VERIFY PROC NEAR | ||
| 100 | PUBLIC VERIFY | ||
| 101 | ; | ||
| 102 | SUB AX,AX ;CLEAR A REG | ||
| 103 | MOV ES,AX ;SET ES TO LOW MEMORY | ||
| 104 | ;DETERMINE WHAT PRINTER IS INVOLVED (LOOK AT n OF LPTn:) | ||
| 105 | MOV AL,BYTE PTR DS:LPTNO | ||
| 106 | MOV REDPT,AL ;PUT n OF LPTn IN REDIRECT MESSAGE | ||
| 107 | MOV NOTREDPT,AL ;AND INTO NOT REDIRECTED MSG | ||
| 108 | ; IF PRINTER DEVICE IS LPT1 | ||
| 109 | CMP AL,"1" | ||
| 110 | JNE ELSEIF01A | ||
| 111 | ; | ||
| 112 | MOV AH,01H ;SET FLAG FOR LPT1 | ||
| 113 | MOV SI,1 ;SAVE LPT NUMBER AS OFFSET TO FLAG BYTE ARRAY | ||
| 114 | ; ELSEIF PRINTER DEVICE IS LPT2 | ||
| 115 | JMP SHORT ENDIF01 | ||
| 116 | ELSEIF01A: | ||
| 117 | CMP AL,"2" | ||
| 118 | JNE ELSEIF01B | ||
| 119 | ; | ||
| 120 | MOV AH,02H ;SET FLAG FOR LPT2 | ||
| 121 | MOV SI,2 ;SAVE LPT NUMBER AS OFFSET TO FLAG BYTE ARRAY | ||
| 122 | ; ELSEIF PRINTER DEVICE IS LPT3 | ||
| 123 | JMP SHORT ENDIF01 | ||
| 124 | ELSEIF01B: | ||
| 125 | ; CMP AL,"3" | ||
| 126 | ; JNE ELSE01 | ||
| 127 | ; | ||
| 128 | MOV AH,04H ;SET FLAG FOR LPT3 | ||
| 129 | MOV SI,03 ;SAVE LPT NUMBER AS OFFSET TO FLAG BYTE ARRAY | ||
| 130 | ; ELSE ,SINCE NONE OF THE ABOVE, MUST BE INVALID | ||
| 131 | ; JMP SHORT ENDIF01 | ||
| 132 | ;ELSE01: | ||
| 133 | ; DISPLAY ERR1 ;FUSS ABOUT INVALID n OF LPTn | ||
| 134 | ; MOV AH,0 ;SET FLAG TO INVALID | ||
| 135 | ; ENDIF ,END OF CHECK FOR DEVICE NO. IN LPTn | ||
| 136 | ENDIF01: | ||
| 137 | ;AT EXIT: AH=MASK FOR NEW_PTSFLAG REPRESENTING WHICH LPTn, (OR 0 IF n INVALID) | ||
| 138 | ; AH HAS 0000 0XXX , WHERE BIT ON REPRESENTS: | ||
| 139 | ; || --LPT1 | ||
| 140 | ; | ---LPT2 | ||
| 141 | ; ----LPT3 | ||
| 142 | ; SI=SET TO HEX 1,2, OR 3 TO BE USED AS OFFSET BEYOND NEW_PTSFLAG | ||
| 143 | ; TO ADDRESS THE BYTES PTSFLAG2, PTSFLAG3, AND PTSFLAG4 | ||
| 144 | ; (SEE MODECODE FOR BYTE DEFINITIONS) | ||
| 145 | RET | ||
| 146 | VERIFY ENDP | ||
| 147 | ;*************************************************************** | ||
| 148 | |||
| 149 | |||
| 150 | MODEECHO PROC NEAR | ||
| 151 | PUBLIC MODEECHO | ||
| 152 | |||
| 153 | |||
| 154 | ;INPUT: | ||
| 155 | |||
| 156 | ; SI=printer number value (one based) | ||
| 157 | ; AH=printer number mask: lpt1=1, lpt2=2, lpt3=4 | ||
| 158 | ; AL=com number character | ||
| 159 | ; all values are known to be valid, but the existence of the com port has | ||
| 160 | ; not been checked. | ||
| 161 | |||
| 162 | |||
| 163 | ;REGISTER | ||
| 164 | ; USAGE : DL - hold the binary COM number | ||
| 165 | ; BX - general use | ||
| 166 | |||
| 167 | |||
| 168 | |||
| 169 | |||
| 170 | MOV REDCOM,AL ;PUT m OF COMm TO REDIRECT MESSAGE | ||
| 171 | PUSH ES ;SAVE SEG REG | ||
| 172 | SET ES,0 | ||
| 173 | |||
| 174 | MOV BH,AH ;save the lpt number | ||
| 175 | AND AL,ascii_to_int ;convert to 1 based integer | ||
| 176 | MOV DL,AL ;FLAG FOR COM1, see 'ptsflag2' in 'rescode' | ||
| 177 | ;see if the COM# ACTUALLY EXISTS | ||
| 178 | DEC AL ;AL= 0 based com number | ||
| 179 | MUL TWO ;AL=disp from 40:0 of com port address word | ||
| 180 | MOV AH,BH ;restore the lpt number | ||
| 181 | XOR BX,BX ;prepare for byte move | ||
| 182 | MOV BL,AL ;BX=disp from 40:0 of com port address word | ||
| 183 | .IF <ES:RS232_BASE[BX] NE 0> THEN ;IF the com adapter does exist THEN | ||
| 184 | |||
| 185 | ;AT THIS POINT WE KNOW THAT LPTn AND COMm ARE BOTH LEGAL | ||
| 186 | |||
| 187 | ;THE FOLLOWING IS WHERE THE APPROPRIATE ADDRESS WORD FOR THE PRINTER | ||
| 188 | ;INVOLVED IS SET TO 0001H TO INDICATE TO BASIC THAT IT CAN OPEN THE | ||
| 189 | ;DEVICE BECAUSE IT HAS BEEN REDIRECTED. SEE TECH REF PAGE A-2 | ||
| 190 | ;RS232 AND PRINTER BASE. | ||
| 191 | |||
| 192 | SAL SI,1 ;2*SI TO GET TO THE APPROPRIATE WORD | ||
| 193 | ; : : IF THE PRINTER ACTUALLY EXISTS | ||
| 194 | CMP ES:PRINTR-2+[SI],0000H ;IF THE WORD IS NONZERO THE | ||
| 195 | JNE ENDIF10 ;DEVICE EXISTS SO DON'T PUT A 1 THERE. | ||
| 196 | MOV ES:PRINTR-2+[SI],0001H ;PUT 0001H IN PRINTER WORD n | ||
| 197 | ; : : ENDIF PRINTER EXISTS | ||
| 198 | ENDIF10: | ||
| 199 | SAR SI,1 ;RESTORE SI TO n OF LPTn | ||
| 200 | ; | ||
| 201 | CALL MODELOAD ;WITHIN 'MODECODE' MODULE | ||
| 202 | ; | ||
| 203 | ;AH HAS A MASK SET BY THE 'VERIFY' PROC TO CORRESPOND TO THE LPTn | ||
| 204 | PUSH ES ;I'M ABOUT TO USE ES, SO I'LL SAVE IT | ||
| 205 | PUSH DI | ||
| 206 | LES DI,ES:RESSEG ;FETCH POINTER TO MODETO IN RESIDENT CODE | ||
| 207 | MOV BX,NEW_PTSFLAG ; FROM MODETO INTO BX | ||
| 208 | ADD BX,DI ;ES:BX IS ADDRESS OF PTSFLAG1 IN RESIDENT | ||
| 209 | ; CODE (PROC MODEPTS) | ||
| 210 | OR AH,BYTE PTR ES:[BX] ;TURN ON THIS PRINTER'S BIT | ||
| 211 | MOV BYTE PTR ES:[BX],AH ;RECORD WHICH LPT IS TO BE | ||
| 212 | ; REDIRECTED | ||
| 213 | ; SI=LPTn, DL=COMm | ||
| 214 | DEC DL ;NOW DL=0 FOR COM1, DL=1 FOR COM2 | ||
| 215 | ; SINCE SI=1, 2, OR 3, THIS PUTS A 0 OR 1 INTO | ||
| 216 | ; PTSFLAG2, PTSFLAG3, OR PTSFLAG4 | ||
| 217 | MOV BYTE PTR ES:[BX][SI],DL ;RECORD FOR THIS LPTn | ||
| 218 | ; WHICH COMm THE LPTn IS REDIRECTED TO | ||
| 219 | POP DI | ||
| 220 | POP ES ;RESTORE SEG REG USED FOR CHECKING/SETTING ADDRESS | ||
| 221 | ; WORDS AND NEW_PTSFLAG | ||
| 222 | CALL ECHO ;CHANGE JMP IN MODEPTS COPY IN LOW MEMORY | ||
| 223 | ; SO PROPER LPTn GETS REDIRECTED | ||
| 224 | DISPLAY CRLF ;AN000; | ||
| 225 | DISPLAY REDIRMSG | ||
| 226 | |||
| 227 | .ELSE ;valid com name, adapter not there | ||
| 228 | MOV DI,0 ;COM device name is always the first parm, the value of "LPTX[:]=value" ;AN000; | ||
| 229 | MOV BP,OFFSET parm_lst ;address the parm list via parm_list which is [BP] | ||
| 230 | MOV CX,parm_list[DI].value1 ;AN000; ;AN000; | ||
| 231 | MOV illegal_device_ptr,CX ;AN000;set up message with bad com device name string | ||
| 232 | DISPLAY ERR1 ;"Illegal device name - COMX" | ||
| 233 | .ENDIF | ||
| 234 | |||
| 235 | |||
| 236 | POP ES ;RESTORE SEG REG | ||
| 237 | RET | ||
| 238 | MODEECHO ENDP | ||
| 239 | ;*************************************************************** | ||
| 240 | MODEECNO PROC NEAR | ||
| 241 | PUBLIC MODEECNO | ||
| 242 | ;INPUT: PARM1 AREA HAS: | ||
| 243 | ; LPTN: | ||
| 244 | ; OF WHICH VERIFICATION HAS BEEN MADE OF ONLY: | ||
| 245 | ; L???: | ||
| 246 | PUSH ES ;SAVE SEG REG | ||
| 247 | CALL VERIFY ;VERIFY THE n OF LPTn | ||
| 248 | ; SET AH ACCORDINGLY | ||
| 249 | ; ON EXIT FROM VERIFY, ES=0 | ||
| 250 | ; | ||
| 251 | ; IF n OF LPTn IS OK | ||
| 252 | CMP AH,0 | ||
| 253 | JE ENDIF06 | ||
| 254 | ; : IF IT IS POSSIBLE THAT REDIRECTION IS IN EFFECT | ||
| 255 | CMP WORD PTR ES:530H,0000H ;HAS THE POINTER BEEN SET? | ||
| 256 | JE ENDIF05 ;SINCE THE POINTER HASN'T BEEN SET, THE | ||
| 257 | ; CODE HASN'T BEEN LOADED, THEREFORE | ||
| 258 | ; THE LPT CAN'T BE REDIRECTED, SO THERE | ||
| 259 | ; IS NO NEED TO UNREDIRECT IT | ||
| 260 | ; SINCE n OF LPTn IS OK, | ||
| 261 | ; AND SI HAS 1,2,OR 3 TO CORRESPOND TO n | ||
| 262 | ; AND AH HAS: | ||
| 263 | ; 0000 0001 - LPT1 | ||
| 264 | ; 0000 0010 - LPT2 | ||
| 265 | ; 0000 0100 - LPT3 | ||
| 266 | XOR AH,0FFH ;NOW AL HAS | ||
| 267 | ; 1111 1110 - LPT1 | ||
| 268 | ; 1111 1101 - LPT2 | ||
| 269 | ; 1111 1011 - LPT3 | ||
| 270 | PUSH ES ;SAVE ES=0, SET BY VERIFY | ||
| 271 | PUSH DI ;WILL BE USED AS OFFSET IN SEGMENT 0 | ||
| 272 | ;ES:=O | ||
| 273 | LES DI,ES:RESSEG ;FETCH POINTER TO MODETO IN RESIDENT CODE | ||
| 274 | PUSH BX ;TO AVOID 'TYPE MISMATCH' I PUT OFFSET | ||
| 275 | MOV BX,NEW_PTSFLAG ;FROM MODETO INTO BX | ||
| 276 | AND AH,BYTE PTR ES:[DI]+[BX] ;CLEAR THIS PRINTER'S BIT | ||
| 277 | MOV BYTE PTR ES:[DI]+[BX],AH ;RESTORE Revised FLAG BYTE | ||
| 278 | POP BX | ||
| 279 | POP DI | ||
| 280 | POP ES ;RESTORE ES=0 | ||
| 281 | ; | ||
| 282 | ;LPTn IS BEING UNREDIRECTED. IF THE PRINTER EXISTS, THE ADDRESS WORD FOR | ||
| 283 | ;THAT DEVICE WILL NOT CONTAIN 0001H. IF IT DOES CONTAIN 0001H, IT MUST BE SET | ||
| 284 | ;TO 0000H SO BASIC WILL NOT ALLOW IT TO BE OPENED. SEE PROCEDURE MODEECHO | ||
| 285 | ;IN THIS MODULE, AND TECH REF PAGE A-2 (RS232 AND PRINTER BASE). | ||
| 286 | ; | ||
| 287 | SAL SI,1 ;SI=WORD n FOR LPTn | ||
| 288 | ; : : IF THE DUMMY PRINTER EXISTS | ||
| 289 | CMP ES:PRINTR-2+[SI],0001H ;DOES THE PRINTER EXIST? | ||
| 290 | JNE ENDIF07 ; IF SO, DON'T MESS WITH THE ADDRESS WORD | ||
| 291 | MOV ES:PRINTR-2+[SI],0000H ;IF NOT, ZERO THE ADDRESS WORD | ||
| 292 | ; : : ENDIF PRINTER EXISTS | ||
| 293 | ENDIF07: | ||
| 294 | SAR SI,1 ;RESTORE SI TO n OF LPTn | ||
| 295 | ; SO PROPER LPTn GETS REDIRECTED | ||
| 296 | ; | ||
| 297 | ;IF THE PRINTER EXISTS THE ADDRESS WORD IS NOW WHAT IT STARTED OUT AS | ||
| 298 | ;AT POWER UP INITIALIZATION TIME. IF THE PRINTER DOESN'T EXIST, THE ADDRESS | ||
| 299 | ;WORD IS NOW EQUAL TO 0000H. | ||
| 300 | ; | ||
| 301 | CALL ECHO ;GO INFORM THE RESIDENT CODE | ||
| 302 | ; | ||
| 303 | ENDIF05: | ||
| 304 | DISPLAY CRLF ;AN000;carriage return linefeed | ||
| 305 | DISPLAY NOTREMSG | ||
| 306 | ; : ENDIF IS REDIRECTION IN EFFECT | ||
| 307 | ; ENDIF IS n OF LPTn OK? | ||
| 308 | ENDIF06: | ||
| 309 | POP ES ;RESTORE SEG REG | ||
| 310 | ; | ||
| 311 | ;A RETURN CODE IS PASSED BACK TO THE CALLER, MODEPRIN. | ||
| 312 | ;AH=0 MEANS INVALID LPTn | ||
| 313 | ;AH not= 0 MEANS LPTn IS OK | ||
| 314 | ; | ||
| 315 | RET ;RETURN TO CALLER | ||
| 316 | MODEECNO ENDP | ||
| 317 | ;*************************************************************** | ||
| 318 | ECHO PROC NEAR | ||
| 319 | ;'MODEPTS' STARTS WITH THREE INSTRUCTIONS: | ||
| 320 | ; F6 C2 01 TEST DL,1 | ||
| 321 | ; 75 05 JNZ CK | ||
| 322 | ; EA ---- ---- JMP PRINTER_IO | ||
| 323 | ; CK: (REDIRECT TO COMm) | ||
| 324 | ;'PTSFLAG' HAS A FLAG BYTE SHOWING WHICH LPTn GETS REDIRECTED. | ||
| 325 | ;THIS CODE HERE IS TO MODIFY THE FIRST TWO INSTRUCTIONS AT 'MODEPTS' | ||
| 326 | ;SO REDIRECTED LPTn GOES TO 'CK:' AND OTHER LPTn GOES TO PRINTER_IO. | ||
| 327 | ; | ||
| 328 | PUSH DI | ||
| 329 | ;ES:=0 | ||
| 330 | LES DI,ES:RESSEG ;FETCH POINTER TO MODETO IN RESIDENT CODE | ||
| 331 | PUSH BX ;TO AVOID 'TYPE MISMATCH' I PUT THE OFFSET | ||
| 332 | PUSH CX ;NEED A HOLDER FOR FIXUP | ||
| 333 | MOV BX,NEW_PTSFLAG ; FROM MODETO INTO BX | ||
| 334 | MOV AL,BYTE PTR ES:[DI]+[BX] ;FIND WHICH LPTn GET REDIRECTED | ||
| 335 | MOV BX,DI ;PUT OFFSET OF MODETO INTO BX | ||
| 336 | POP DI | ||
| 337 | ADD BX,OFFPTS ;ADD OFFSET OF MODEPTS FROM MODETO, NOW | ||
| 338 | ; ES:BX POINTS TO MODEPTS | ||
| 339 | MOV CX,FIXUP ;HOLD FIXUP IN WORD FORM SO LINKER CAN FILL IN | ||
| 340 | CLI ;IF AN INTERRUPT OCCURS HERE THE JUMP WOULD | ||
| 341 | ; BE INCORRECT | ||
| 342 | MOV BYTE PTR ES:[BX]+4,CL ;SET JUMP TARGET (CK) TO +3BH | ||
| 343 | POP CX ;RETURN FIXUP'S WORD FORM HOLDER | ||
| 344 | MOV AH,0 ;CLEAR HIGH BYTE | ||
| 345 | SHL AL,1 ;COUNT WAS 0,1,2,3,...7 | ||
| 346 | ; COUNT IS NOW 0,2,4,6...14 | ||
| 347 | MOV SI,AX ;GET INDEX OF BR TABLE ENTRY | ||
| 348 | JMP CASE[SI] | ||
| 349 | ; | ||
| 350 | CASE EQU THIS WORD | ||
| 351 | DW P0 | ||
| 352 | DW P1 | ||
| 353 | DW P2 | ||
| 354 | DW P3 | ||
| 355 | DW P4 | ||
| 356 | DW P5 | ||
| 357 | DW P6 | ||
| 358 | DW P7 | ||
| 359 | ; | ||
| 360 | P0: | ||
| 361 | ; SINCE NO PRINTER IS TO BE REDIRECTED | ||
| 362 | MOV WORD PTR ES:[BX]+3,00EBH ;MAKE JUMP INTO NO-OP | ||
| 363 | ; TO CAUSE 'FALL THRU' TO JMP PRINTER_IO INSTR | ||
| 364 | JMP SHORT ENDC | ||
| 365 | P1: | ||
| 366 | ; REDIRECT LPT1 ONLY | ||
| 367 | MOV WORD PTR ES:[BX]+2,7403H ;TEST 3 : JZ CK | ||
| 368 | JMP SHORT ENDC | ||
| 369 | ; | ||
| 370 | P2: | ||
| 371 | ; REDIRECT LPT2 ONLY | ||
| 372 | MOV WORD PTR ES:[BX]+2,7501H ;TEST 1 : JNZ CK | ||
| 373 | JMP SHORT ENDC | ||
| 374 | ; | ||
| 375 | P3: | ||
| 376 | ; REDIRECT LPT1 AND LPT2 ONLY | ||
| 377 | MOV WORD PTR ES:[BX]+2,7402H ; TEST 2 : JZ CK | ||
| 378 | JMP SHORT ENDC | ||
| 379 | ; | ||
| 380 | P4: | ||
| 381 | ; REDIRECT LPT3 ONLY | ||
| 382 | MOV WORD PTR ES:[BX]+2,7502H ;TEST 2 :JNZ CK | ||
| 383 | JMP SHORT ENDC | ||
| 384 | ; | ||
| 385 | P5: | ||
| 386 | ; REDIRECT LPT1 AND LPT3 ONLY | ||
| 387 | MOV WORD PTR ES:[BX]+2,7401H ;TEST 1 : JZ CK | ||
| 388 | JMP SHORT ENDC | ||
| 389 | ; | ||
| 390 | P6: | ||
| 391 | ; REDIRECT LPT2 AND LPT3 ONLY | ||
| 392 | MOV WORD PTR ES:[BX]+2,7503H ;TEST 3 : JNZ CK | ||
| 393 | JMP SHORT ENDC | ||
| 394 | ; | ||
| 395 | P7: | ||
| 396 | ; REDIRECT ALL THREE: LPT1, LPT2, AND LPT3 | ||
| 397 | MOV WORD PTR ES:[BX]+2,0EB00H ;TEST 0 : JMP CK | ||
| 398 | ENDC: | ||
| 399 | STI ;REENABLE INTERRUPTS | ||
| 400 | POP BX | ||
| 401 | RET | ||
| 402 | ECHO ENDP | ||
| 403 | |||
| 404 | |||
| 405 | ;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ;AN000; | ||
| 406 | ;³ | ||
| 407 | ;³ DISPLAY_PRINTER_REROUTE_STATUS | ||
| 408 | ;³ ------------------------------ | ||
| 409 | ;³ | ||
| 410 | ;³ Setup message for the reroute status of the specified printer. | ||
| 411 | ;³ | ||
| 412 | ;³ INPUT: BL - mask for ptsflag1 (1, 2 or 4) | ||
| 413 | ;³ REDPT - contains ASCII form of n OF LPTn in redirmsg "LPTn rerouted to COMm" | ||
| 414 | ;³ NOTREDPT - contains ASCII form of n of LPTn in message "LPTn not rerouted" | ||
| 415 | ;³ | ||
| 416 | ;³ | ||
| 417 | ;³ | ||
| 418 | ;³ RETURN: REDCOM - filled with ASCII form of m OF COMm in MESSAGE "LPTn rerouted to COMn"none | ||
| 419 | ;³ | ||
| 420 | ;³ | ||
| 421 | ;³ | ||
| 422 | ;³ MESSAGES: REDIRMSG if the printer is rerouted | ||
| 423 | ;³ NOTREMSG if the printer is not rerouted | ||
| 424 | ;³ | ||
| 425 | ;³ | ||
| 426 | ;³ REGISTER | ||
| 427 | ;³ USAGE: | ||
| 428 | ;³ | ||
| 429 | ;³ | ||
| 430 | ;³ | ||
| 431 | ;³ ASSUMPTIONS: input is valid | ||
| 432 | ;³ | ||
| 433 | ;³ | ||
| 434 | ;³ SIDE EFFECT: ES - lost | ||
| 435 | ;³ SI - lost | ||
| 436 | ;³ ;AN000; | ||
| 437 | ;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ;AN000; | ||
| 438 | |||
| 439 | display_printer_reroute_status PROC NEAR | ||
| 440 | |||
| 441 | XOR CX,CX ;AN665; | ||
| 442 | MOV ES,CX ;set segment to zero ;AN665; | ||
| 443 | |||
| 444 | .IF <<ES:WORD PTR resseg> NE 0000H> AND ;IF the resident code is loaded AND | ||
| 445 | MOV ES,ES:WORD PTR resseg[2] ;AN665; | ||
| 446 | ;;XOR BX,BX | ||
| 447 | ;;MOV BL,printer_reroute_mask | ||
| 448 | TEST BL,ES:PTSFLAG1 ;see if the printer is rerouted | ||
| 449 | .IF NZ THEN ;the printer is rerouted | ||
| 450 | SHR BL,1 ;was 1, 2, or 4, now is 0, 1, or 2 | ||
| 451 | ;;;INC BL ;now is 1, 2, or 3 | ||
| 452 | ;;;ADD BL,resflag2 ;ES:BX=>the com byte for the desired printer | ||
| 453 | ADD BX,resflag2 ;ES:BX=>the com byte for the desired printer | ||
| 454 | .SELECT | ||
| 455 | |||
| 456 | .WHEN <<BYTE PTR ES:[BX]> EQ 0> | ||
| 457 | MOV redcom,"1" ;printer rerouted to COM1 | ||
| 458 | |||
| 459 | .WHEN <<BYTE PTR ES:[BX]> EQ 1> | ||
| 460 | MOV redcom,"2" ;printer rerouted to COM2 | ||
| 461 | |||
| 462 | .WHEN <<BYTE PTR ES:[BX]> EQ 2> | ||
| 463 | MOV redcom,"3" ;printer rerouted to COM3 | ||
| 464 | |||
| 465 | .WHEN <<BYTE PTR ES:[BX]> EQ 3> | ||
| 466 | MOV redcom,"4" ;printer rerouted to COM4 | ||
| 467 | |||
| 468 | .ENDSELECT | ||
| 469 | display redirmsg ;"LPTn rerouted to COMm" | ||
| 470 | .ELSE | ||
| 471 | display notremsg ;"LPTn not rerouted" | ||
| 472 | .ENDIF | ||
| 473 | |||
| 474 | |||
| 475 | |||
| 476 | |||
| 477 | RET | ||
| 478 | |||
| 479 | display_printer_reroute_status ENDP | ||
| 480 | |||
| 481 | PRINTF_CODE ENDS | ||
| 482 | END | ||