]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/MODE/MODEECHO.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / CMD / MODE / MODEECHO.ASM
1 PAGE ,132 ;\ f
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