summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/MODE/MODEECHO.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/CMD/MODE/MODEECHO.ASM')
-rw-r--r--v4.0/src/CMD/MODE/MODEECHO.ASM482
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 @@
1PAGE ,132 ;
2TITLE MODEECHO - REDIRECT PRINTER OUTPUT FROM PARALLEL TO SERIAL
3
4.XLIST
5INCLUDE STRUC.INC
6.LIST
7
8INCLUDE common.stc ;definition of parm_list_entry struc
9
10DISPLAY MACRO MSG
11 MOV DX,OFFSET MSG
12 CALL PRINTF
13ENDM
14
15SET 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
20ENDM
21
22
23;*****************************************************************
24VECT SEGMENT AT 0
25 ORG 50H
26VECT14H LABEL DWORD ;RS232 CALL, WILL POINT TO MODETO AFTER
27 ; RESIDENT CODE IS LOADED.
28 ORG 400H
29RS232_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
35PRINTR DW ? ;LPT1
36 DW ? ;LPT2
37 DW ? ;LPT3
38;
39 ORG 530H
40RESSEG DD ? ;VECTOR OF MODETO, IF RESIDENT,OR 0
41VECT ENDS
42;*****************************************************************
43ascii_to_int EQU 0FH ;ANDed with an ascii 0-9 value yeilds binary 0-9
44CR EQU 13 ;CARRIAGE RETURN
45LF EQU 10 ;LINE FEED
46parm_list EQU [BP] ;AN000; ;AN000;
47TO_SCREEN EQU 9 ;REQUEST OUTPUT TO SCREEN
48
49PUBLIC LPTNO ;used by modeprin and modepars
50PUBLIC PRINTR
51PUBLIC display_printer_reroute_status
52
53PAGE
54;***************************************************************
55PRINTF_CODE SEGMENT PUBLIC
56 ASSUME CS:PRINTF_CODE,DS:PRINTF_CODE,ES:NOTHING
57
58;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ D A T A ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
59;º º
60
61two DB 2 ;used to change byte displacement to word disp. See 'modeecho'
62LPTNO DB 0 ;holder of ASCII form of the LPT number (1 thru 3)
63
64;º º
65;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ D A T A ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
66
67EXTRN 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
73ENDPARM EQU MODE
74EXTRN CRLF:BYTE ;AN000;carriage return linefeed
75EXTRN parm_lst:BYTE ;AN000;
76EXTRN illegal_device_ptr:WORD ;AN000;pointer to bad com device name string
77EXTRN MODELOAD:NEAR
78EXTRN PRINTF:NEAR ;FORMATTED "C" LIKE SCREEN OUTPUT ROUTINE
79EXTRN REDIRMSG:WORD ;CR,LF,"LPT"
80EXTRN REDPT:BYTE ;" "
81; ": rerouted to COM"
82EXTRN REDCOM:BYTE ;" "
83; ":",CR,LF,"$"
84;
85EXTRN NOTREMSG:WORD ;CR,LF,"LPT"
86EXTRN NOTREDPT:BYTE ;" "
87; ": not redirected.",CR,LF,"$"
88;EXTRN printer_reroute_mask:BYTE ;mask for testing ptsflag1 to see if a printer is rerouted
89EXTRN ptsflag1:BYTE ;see rescode.sal
90EXTRN ERR1:WORD ;"ILLEGAL DEVICE NAME"
91EXTRN resflag2:ABS ;see rescode
92EXTRN FIXUP:ABS ;IN MODEPTS, OFFSET USED BY COND. JMP
93EXTRN OFFPTS:ABS ;WHERE MODEPTS IS RELATIVE TO BEGINNING
94 ; OF MODETO
95EXTRN NEW_PTSFLAG:ABS ;WHERE PTSFLAG1 IS IN THE RESIDENT CODE
96 ; RELATIVE TO BEGINING OF MODETO
97;
98;***************************************************************
99VERIFY 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
116ELSEIF01A:
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
124ELSEIF01B:
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
136ENDIF01:
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
146VERIFY ENDP
147;***************************************************************
148
149
150MODEECHO 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
170MOV REDCOM,AL ;PUT m OF COMm TO REDIRECT MESSAGE
171PUSH ES ;SAVE SEG REG
172SET ES,0
173
174MOV BH,AH ;save the lpt number
175AND AL,ascii_to_int ;convert to 1 based integer
176MOV DL,AL ;FLAG FOR COM1, see 'ptsflag2' in 'rescode'
177;see if the COM# ACTUALLY EXISTS
178DEC AL ;AL= 0 based com number
179MUL TWO ;AL=disp from 40:0 of com port address word
180MOV AH,BH ;restore the lpt number
181XOR BX,BX ;prepare for byte move
182MOV 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
238MODEECHO ENDP
239;***************************************************************
240MODEECNO 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
293ENDIF07:
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;
303ENDIF05:
304 DISPLAY CRLF ;AN000;carriage return linefeed
305 DISPLAY NOTREMSG
306; : ENDIF IS REDIRECTION IN EFFECT
307; ENDIF IS n OF LPTn OK?
308ENDIF06:
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
316MODEECNO ENDP
317;***************************************************************
318ECHO 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;
350CASE 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;
360P0:
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
365P1:
366; REDIRECT LPT1 ONLY
367 MOV WORD PTR ES:[BX]+2,7403H ;TEST 3 : JZ CK
368 JMP SHORT ENDC
369;
370P2:
371; REDIRECT LPT2 ONLY
372 MOV WORD PTR ES:[BX]+2,7501H ;TEST 1 : JNZ CK
373 JMP SHORT ENDC
374;
375P3:
376; REDIRECT LPT1 AND LPT2 ONLY
377 MOV WORD PTR ES:[BX]+2,7402H ; TEST 2 : JZ CK
378 JMP SHORT ENDC
379;
380P4:
381; REDIRECT LPT3 ONLY
382 MOV WORD PTR ES:[BX]+2,7502H ;TEST 2 :JNZ CK
383 JMP SHORT ENDC
384;
385P5:
386; REDIRECT LPT1 AND LPT3 ONLY
387 MOV WORD PTR ES:[BX]+2,7401H ;TEST 1 : JZ CK
388 JMP SHORT ENDC
389;
390P6:
391; REDIRECT LPT2 AND LPT3 ONLY
392 MOV WORD PTR ES:[BX]+2,7503H ;TEST 3 : JNZ CK
393 JMP SHORT ENDC
394;
395P7:
396; REDIRECT ALL THREE: LPT1, LPT2, AND LPT3
397 MOV WORD PTR ES:[BX]+2,0EB00H ;TEST 0 : JMP CK
398ENDC:
399 STI ;REENABLE INTERRUPTS
400 POP BX
401 RET
402ECHO 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
439display_printer_reroute_status PROC NEAR
440
441XOR CX,CX ;AN665;
442MOV ES,CX ;set segment to zero ;AN665;
443
444.IF <<ES:WORD PTR resseg> NE 0000H> AND ;IF the resident code is loaded AND
445MOV ES,ES:WORD PTR resseg[2] ;AN665;
446;;XOR BX,BX
447;;MOV BL,printer_reroute_mask
448TEST 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
477RET
478
479display_printer_reroute_status ENDP
480
481PRINTF_CODE ENDS
482 END