2 TITLE MODESCRN
.ASM
- SCREEN SUPPORT FOR THE MODE COMMAND
8 INCLUDE COMMON.STC ;definitions of message sublist blocks ;AC001;
10 ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P R O L O G ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ;AN000;
13 ; AC000 - P3200: Was displaying a message that Sam Nunn had deleted from the
14 ; USA.MSG file because it looked like a common message. Now
15 ; I use a different (better) message. It was "Invalid paramters",
16 ; is now "Function not supported - ????".
18 ; AX001 - P3976: Need to have all pieces of messages in MODE.SKL so have to
19 ; implement the SYSGETMSG method of getting addressability to
20 ; the pieces. This means that the code does a SYSGETMSG call
21 ; which returns a pointer (DS:SI) to the message piece. The
22 ; address is then put in the sublist block for the message
25 ; AX002 - P5159: Need to use get extended country call (6523) to get the yes
29 ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P R O L O G ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ;AN000;
31 ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ M A C R O S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
39 SCRN
MACRO COMMAND
,MOD
40 MOV AH,COMMAND
;REQUEST FUNCTION OF SCREEN BIOS
42 MOV AL,MOD ;SET MODE TO SCREEN
44 INT 10H
;CALL BIOS SCREEN HANDLER
56 SET_LEFT_SHIFT_LIMIT
MACRO
64 CMP DS:MACHINE_TYPE
,JUNIOR
;IF this machine is a Junior THEN
66 MOV BYTE PTR CS:LEFT_LIMIT
,JR_LEFT_LIMIT
;USE THE JUNIOR'S LEFT LIMIT
75 set_submessage_ptr
MACRO submessage
,message
;PUT pointer to "subMESSAGE" into submessage pointer field of "message".
77 MOV AX,submessage
;AX=message number ;AN001;
78 MOV DH,utility_msg_class
;DH=message class=utility class ;AN001;
79 CALL SYSGETMSG
;DS:SI=>message piece ;AN001;
80 MOV BP,OFFSET sublist_
&message
;address the sublist control block ;AN001;
81 MOV [BP].sublist_off
,SI ;the sublist now points to the desired message piece ;AN001;
85 ;---------------------------------------------------------------------------
87 ;PRINTF depends on DS containing the segment that the messages are in, so if
88 ;DS is being used to address data areas elsewhere it needs to be temporarily
89 ;set to the message file segment.
90 ;---------------------------------------------------------------------------
92 SET_UP_FOR_PRINTF
MACRO
96 POP DS ;DS NOW HAS MESSAGE SEGMENT
100 ;----------------------------------------------------------------------------
102 ;Replace the contents DS had before the PRINTF call. Assume that DS was pushed.
103 ;-----------------------------------------------------------------------------
112 ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ M A C R O S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
114 CURRENT_VIDEO_STATE EQU
15 ;REQUEST TO BIOS SCREEN TO RETURN SCREEN STATE
115 SET_SCREEN_MODE EQU
0 ;REQUEST TO BIOS SCREEN TO SET SCREEN MODE
116 COL40 EQU
1 ;FLAG BIT TO REQUEST 40 COL
117 COL80 EQU
2 ;FLAG BIT TO REQUEST 80 COL
118 CNT4 EQU
4 ;COUNT NO. TIMES TO DISPLAY "NUMBERS" FOR 40COL
119 CNT8 EQU
8 ;COUNT NO. TIMES TO DISPLAY "NUMBERS" FOR 80COL
120 FORTY EQU
40 ;SCREEN WIDTH
121 MONO_MODE EQU
7 ;MONOCHROME SCREEN MODE
122 no EQU
0 ;AC002;value to compare with when user responds with no character
123 NOEXIT EQU
0 ;EXIT SWITCH VALUE TO REPEAT LOOP
124 EXIT EQU
1 ;EXIT SWITCH VALUE TO LEAVE LOOP
125 YES EQU
1 ;AC002;value AX will be if user types yes character ("y", "s", "j" etc)
132 ; OFFSETS INTO VIDEO TABLE, AT 40:90
133 SHIFCT40 EQU
02H ;SHIFT COUNT FOR 40 COL
134 SHIFCT80 EQU
012H ;SHIFT COUNT FOR 80 COL
135 SHIFCTGR EQU
022H ;SHIFT COUNT FOR GRAPHICS
136 CR EQU
13 ;CARRIAGE RETURN
138 BEEP EQU
7 ;SOUND THE AUDIBLE ALARM
139 LOWERCASE EQU 20H
;ADD THIS TO UPPER, GET LOWER CASE
142 RIGHT_LIMIT EQU
01 ;SAME FOR ALL TYPES OF MACHINES
143 JUNIOR EQU
0FDH ;MACHINE TYPE SIGNITURE FOR PC JUNIOR
144 JR_LEFT_LIMIT EQU
031H ;LEFT LIMIT FOR SCREEN SHIFT ON PC JUNIOR
146 EGA_SIG EQU
0AA55H ;SIGNITURE FOR THE EGA CARD
148 ROM_BIOS
SEGMENT AT 0F000H
151 MACHINE_TYPE
LABEL BYTE ;MACHINE TYPE BURNED IN ROM
155 ROM_BIOS_SEG EQU
0F000H
157 SIGNITURE
SEGMENT AT 0C000H ;SEGMENT OF EGA AREA
159 SIGWORD
DW ?
;SIGNITURE OF THE EGA IS STORED HERE IF THE CARD IS PRESENT
162 PRINTF_CODE
SEGMENT PUBLIC
163 ASSUME
CS:PRINTF_CODE
,DS:PRINTF_CODE
167 ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P U B L I C S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
170 PUBLIC HANDLE_40_OR_80
;make available to "ANALYZE_AND_INVOKE"
171 PUBLIC SHIFT_SCREEN
;make available to "ANALYZE_AND_INVOKE"
175 ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P U B L I C S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
178 ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E X T R N S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
181 EXTRN CANT_SHIFT
:WORD ;CR,LF,"Unable to shift screen",BEEP,EOM
182 EXTRN PRINTF
:NEAR ;interface to message service ROUTINE
183 EXTRN SCRNTAB
:NEAR ;LOADS VIDEO INIT TABLE RETURNING POINTER TO IT
185 EXTRN PARM1
:BYTE,PARM2
:BYTE,PARM3
:BYTE,MODE
:BYTE,FLAG
:BYTE
191 EXTRN NEW_VIDEO_PARMS_SEGMENT
:WORD
192 EXTRN NOERROR
:BYTE ;INDICATE IF AN ERROR OCCURED YET
194 EXTRN ALT_SELECT
:ABS
;INT 10 FUNCTION GET MONITOR TYPE
195 EXTRN EGA_INFO
:ABS
;INT 10 FUNCTION GET INFO
196 EXTRN COLOR_ON_IT
:ABS
;INT 10 RETURN FOR COLOR MONITOR HOOKED TO EGA
198 LEFT_LIMIT
DB 02EH ;SCREEN SHIFT LEFT LIMIT, MAY BE Revised
200 SWITCH
DB 0 ;LOOP CONTROLLER
201 ;AC000;OK DB 1 ;INDICATOR OF VALID REQUEST:
204 EXTRN L_item_tag
:ABS
;see MODEpars.asm ;AN000;
205 EXTRN R_item_tag
:ABS
;see MODEpars.asm ;AN000;
206 EXTRN T_item_tag
:ABS
;see MODEpars.asm ;AN000;
208 EXTRN RIGHTMOST
:WORD ;message number for "rightmost 9",EOM ;AC001;
209 EXTRN LEFTMOST
:WORD ;message number for "leftmost 0",EOM ;AC001;
210 ;AC001;EXTRN LFTM_OR_RGHTM_PTR:WORD
211 EXTRN SHIFT_MSG
:WORD ;CR,LF,"Do you see the ...",CR,LF,EOM ;AX000;
212 ;AC000;EXTRN MSGI:WORD ;CR,LF,"Invalid parameters",BEEP,CR,LF,"$" ;AX000;
213 EXTRN NUMBERS
:WORD ;"0123456789" ;AX000;
214 EXTRN LEFT
:WORD ;message number for "left",EOM ;AC001;
215 EXTRN RIGHT
:WORD ;message number for "right",EOM ;AC001;
216 ;AC001;EXTRN LEFT_OR_RIGHT_PTR:WORD ;PART OF MESSAGE "Unable to shift screen ..."
217 EXTRN sublist_cant_shift
:BYTE ;definition of submessage ;AC001;
218 EXTRN sublist_shift_msg
:BYTE ;definition of submessage ;AC001;
219 EXTRN SYSGETMSG
:NEAR ;used to get the address of a message part ;AC001;
220 EXTRN utility_msg_class
:ABS
;input for sysgetmsg ;AC001;
224 ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E X T R N S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
228 ;----------------------------------------------------------------------------
231 HANDLE_40_OR_80 PROC
NEAR ;AN000;
235 SCRN CURRENT_VIDEO_STATE
,0 ;GET CURRENT SCREEN MODE
236 MOV DS:MODE
,AL ;STORE CURRENT MODE
237 ; IF THE REQUEST WAS FOR 40 COL,
238 CMP BL,FORTY
;COMPARE WITH BL, OUTPUT FROM 'MODELENG'
241 ;AC000; MOV OK,0 ;INDICATE A LEGAL FUNCTION DONE
242 ; CASE current mode =
251 .IF <DS:mode
EQ 0> OR
252 .IF <DS:mode
EQ 2> OR
253 .IF <DS:mode
EQ 5> OR
254 .IF <DS:mode
EQ 6> OR
255 .IF <DS:mode
EQ 7> OR
256 .IF <DS:mode
EQ 011H> THEN
257 MOV DS:MODE
,0 ;SWITCH TO 40 COL, BW
267 .IF <DS:mode
EQ 1> OR
268 .IF <DS:mode
EQ 3> OR
269 .IF <DS:mode
EQ 4> OR
270 .IF <DS:mode
EQ 012H> OR
271 .IF <DS:mode
EQ 013H> THEN
272 MOV DS:MODE
,1 ;SWITCH TO 40 COL, COLOR
280 SCRN SET_SCREEN_MODE
,DS:MODE
;SWITCH TO 40 COL
281 ; ELSE ,SINCE REQUEST NOT FOR 40 COL,
284 ; : : IF REQUEST FOR 80 COL
288 ;AC000; MOV OK,0 ;INDICATE A LEGAL FUNCTION DONE
289 ; CASE current mode =
298 .IF <DS:mode
EQ 0> OR
299 .IF <DS:mode
EQ 2> OR
300 .IF <DS:mode
EQ 5> OR
301 .IF <DS:mode
EQ 6> OR
302 .IF <DS:mode
EQ 7> OR
303 .IF <DS:mode
EQ 011H> THEN
304 MOV DS:MODE
,2 ;SWITCH TO 80 COL, BW
314 .IF <DS:mode
EQ 1> OR
315 .IF <DS:mode
EQ 3> OR
316 .IF <DS:mode
EQ 4> OR
317 .IF <DS:mode
EQ 012H> OR
318 .IF <DS:mode
EQ 013H> THEN
319 MOV DS:MODE
,3 ;SWITCH TO 80 COL, COLOR
326 SCRN SET_SCREEN_MODE
,DS:MODE
327 ; : : ENDIF ,END REQUEST FOR 80 COL
329 ; : ENDIF ,END REQUEST FOR 40 COL
335 HANDLE_40_OR_80 ENDP
;AN000;
338 ;------------------------------------------------------------------------------
341 SHIFT_SCREEN PROC
NEAR ;AN000;shift the screen
343 ; DO SHIFT UNTIL HE CAN SEE END CHAR
344 MOV SWITCH
,NOEXIT
;SET TO REPEAT NEXT LOOP
346 ; : IF second PARM (sd) IS AN "R"?
347 CMP DS:PARM2
,R_item_tag
;AC000;
348 JE SKIP03
;IT'S AN R SO TRY TO SHIFT RIGHT
349 JMP ELSE03
;NOT AN R SO CHECK FOR L
352 ;AC000; MOV CS:OK,0 ;INDICATE A LEGAL FUNCTION DONE
353 SCRN CURRENT_VIDEO_STATE
,0 ;CHECK CURRENT VIDEO MODE
354 CMP AL,MONO_MODE
;IF mode >= mono THEN must be EGA mono so ...
357 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET RIGHT ;YELL BECAUSE CAN'T SHIFT AN EGA OR MONO
358 set_submessage_ptr right
,cant_shift
;set up message sublist with pointer to "right"
359 DISPLAY CANT_SHIFT
;YELL BECAUSE CAN'T SHIFT AN EGA OR MONO
360 ; $ELSE LONG ;JUMP PAST SHIFT LOOP
364 CHECK_FOR_EGA: ;SEE IF SCREEN IS HOOKED TO EGA
365 MOV AX,SIGNITURE
;GET TO SEGMENT OF SIGNITURE WORD
366 MOV ES,AX ;ADDRESS THROUGH ES
367 CMP WORD PTR ES:SIGWORD
,EGA_SIG
;IF EGA card being used THEN
369 MOV AH,ALT_SELECT
;AH GETS INT FUNCTION SPECIFIER
370 MOV BL,EGA_INFO
;SPECIFY IN BL THE OPTION OF THE FUNCTION OF INT 10 WE
371 MOV BH, COLOR_ON_IT
;protect against RT PC problem
372 not bh ; masm 5.0 won't allow "not color_on_it"
373 INT 10H
;RETURN MONITOR TYPE HOOKED TO EGA IN BH
374 CMP BH,COLOR_ON_IT
;IF COLOR HOOKED TO EGA THEN
376 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET RIGHT ; YELL BECAUSE CAN'T SHIFT AN EGA
377 set_submessage_ptr right
,cant_shift
;set up message sublist with pointer to "right"
379 JMP ELSE05
; JUMP PAST SHIFT LOOP
382 CALL SCRNTAB
;LOAD VIDEO TABLE IN WORK AREA
383 ; DS NOW POINTS TO THE SEGMENT WHERE THE VIDEO TABLE WAS MOVED TO.
384 ; BX HAS THE NEW OFFSET OF THE VIDEO TABLE
386 CMP BYTE PTR DS:[BX][SHIFCT40
],RIGHT_LIMIT
;IF haven't shifted max right THEN
389 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET RIGHT
390 set_submessage_ptr right
,cant_shift
;set up message sublist with pointer to "right"
391 DISPLAY CANT_SHIFT
;"Unable to shift screen right"
395 MOV AL,DS:[BX][SHIFCT40
] ;GET SHIFT COUNT FOR 40COL
396 SUB AL,1 ;SHIFT IT LEFT 1
397 MOV DS:[BX][SHIFCT40
],AL ;STORE IT BACK
398 MOV AL,DS:[BX][SHIFCT80
] ;GET SHIFT COUNT FOR 80COL
399 SUB AL,2 ;SHIFT LEFT 2
400 MOV DS:[BX][SHIFCT80
],AL ;STORE IT BACK
401 MOV AL,DS:[BX][SHIFCTGR
] ;GET GRAPHICS SHIFT COUNT
402 SUB AL,1 ;SHIFT LEFT 1
403 MOV DS:[BX][SHIFCTGR
],AL ;STORE IT BACK
404 ; : ELSE ,SINCE PARM2 IS NOT AN "R"
407 ; : : IF THIS CHAR IS AN "L"?
408 CMP DS:PARM2
,L_item_tag
;AC000;
409 JE SKIP05
;L WAS SPECIFIED SO TRY TO SHIFT LEFT
410 JMP ELSE05
;WASN'T "L" OR "R" SO DONT'T TRY TO SHIFT
414 ;AC000; MOV CS:OK,0 ;INDICATE A LEGAL FUNCTION DONE
415 SCRN CURRENT_VIDEO_STATE
,0 ;CHECK CURRENT VIDEO MODE
416 CMP AL,MONO_MODE
;IF mode >= mono THEN must be EGA or mono so ...
418 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET LEFT ;YELL BECAUSE CAN'T SHIFT AN EGA
419 set_submessage_ptr left
,cant_shift
;set up message sublist with pointer to "left" ;AC001;
421 JMP ELSE05
;JUMP PAST SHIFT LOOP
423 CHK_FOR_EGA: ;SEE IF SCREEN IS HOOKED TO EGA
424 MOV AX,SIGNITURE
;GET TO SEGMENT OF SIGNITURE WORD
425 MOV ES,AX ;ADDRESS THROUGH ES
426 CMP WORD PTR ES:SIGWORD
,EGA_SIG
;IF EGA card being used THEN
427 JNE TRY_TO_SHIFT_LEFT
428 MOV AH,ALT_SELECT
;AH GETS INT FUNCTION SPECIFIER
429 MOV BL,EGA_INFO
;SPECIFY IN BL THE OPTION OF THE FUNCTION OF INT 10 WE
430 INT 10H
;RETURN MONITOR TYPE HOOKED TO EGA IN BH
431 CMP BH,COLOR_ON_IT
;IF COLOR HOOKED TO EGA THEN
432 JNE TRY_TO_SHIFT_LEFT
433 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET LEFT ; YELL BECAUSE CAN'T SHIFT AN EGA
434 set_submessage_ptr left
,cant_shift
;set up message sublist with pointer to "left" ;AC001;
436 JMP ELSE05
; JUMP PAST SHIFT LOOP
439 CALL SCRNTAB
;LOAD VIDEO TABLE IN WORK AREA
440 ; DS NOW POINTS TO THE SEGMENT OF THE RESIDENT CODE,
441 ; WHERE THE VIDEO TABLE WAS MOVED TO.
443 SET_LEFT_SHIFT_LIMIT
;SET LIMIT TO SUIT MACHINE TYPE
445 MOV AL,BYTE PTR DS:[BX][SHIFCT40
] ;AL=current horizontal sync position
446 CMP AL,CS:LEFT_LIMIT
;IF haven't shifted max left THEN
449 ;AC001; MOV LEFT_OR_RIGHT_PTR,OFFSET LEFT
450 set_submessage_ptr left
,cant_shift
;set up message sublist with pointer to "left" ;AC001;
455 MOV AL,DS:[BX][SHIFCT40
] ;GET SHIFT COUNT 40COL
456 ADD AL,1 ;SHIFT RIGHT ONE
457 MOV DS:[BX][SHIFCT40
],AL ;STORE IT BACK
458 MOV AL,DS:[BX][SHIFCT80
] ;GET SHIFT COUNT 80COL
459 ADD AL,2 ;SHIFT RIGHT 2
460 MOV DS:[BX][SHIFCT80
],AL ;STORE IT BACK
461 MOV AL,DS:[BX][SHIFCTGR
] ;GET GRAPHICS COUNT
462 ADD AL,1 ;SHIFT RIGHT 8 PIXELS
463 MOV DS:[BX][SHIFCTGR
],AL ;STORE IT BACK
464 ; : : ELSE ,SINCE CHAR IS NEITHER "R" NOR "L", QUIT
466 ; $ENDIF ;EGA or MONO
469 MOV CS:SWITCH
,EXIT
;REQUEST LOOP BE TERMINATED
470 ; : : ENDIF ,END IS THIS CHAR AN "L"? TEST
472 ; : ENDIF END, IS PARM2 AN "R"? TEST
477 MOV AX,CS ;RESTORE THIS SEG
479 ; LEAVE IF THE EXIT SWITCH IS SET
480 ;AC001; CMP SWITCH,EXIT
482 .IF <switch NE exit
> THEN
NEAR
484 SCRN CURRENT_VIDEO_STATE
,0
485 MOV DS:MODE
,AL ;SAVE CURRENT MODE
486 ; LEAVING CURRENT MODE IN AL,
487 SCRN SET_SCREEN_MODE
;RESET IN CURRENT MODE
489 CMP DS:PARM3
,T_item_tag
;AC000;
492 ; DECIDE WHICH QUESTION TO DISPLAY...
493 ; : : IF REQUESTED FUNCTION IS "R"
494 CMP DS:PARM2
,R_item_tag
;AC000;
497 ;AC001; MOV LFTM_OR_RGHTM_PTR,OFFSET LEFTMOST
498 set_submessage_ptr leftmost
,shift_msg
;set up message sublist with pointer to "leftmost" ;AC001;
499 ; : : ELSE ,SINCE WAS NOT "R"
502 ;AC001; MOV LFTM_OR_RGHTM_PTR,OFFSET RIGHTMOST
503 set_submessage_ptr rightmost
,shift_msg
;set up message sublist with pointer to "rightmost" ;AC001;
504 ; : : ENDIF END FUNCTION IS "R"? TEST
507 ; decide how many times to display "0123456789"
508 OR DS:MODE
,01H ;SET UP TO TEST FOR COLOR OR B/W
509 MOV CX,CNT8
;(GUESS IT IS 80COL) SET LOOP CTR TO 8
514 MOV CX,CNT4
;(FIX ABOVE GUESS) SET LOOP CTR TO 4
515 ; : : ENDIF ,END IS IT 40 COL? TEST
519 SCRN SET_SCREEN_MODE
,DS:MODE
;clear the screen
520 PUSH CX ;save loop counter
521 DO02: ;DO UNTIL LINE IS DISPLAYED across entire screen
522 DISPLAY NUMBERS
;DISPLAY 0123456789
523 ; ENDDO WHEN CNT IN CX = 0
525 DISPLAY SHIFT_MSG
;AN000;DISPLAY QUESTION, msg services will do the keyboard input, see modedefs.inc
526 MOV DL,AL ;AC002;DL=character user entered
527 MOV AX,6523H
;AN002;yes no check get extended error
528 INT 21H
;AN002;AX returned with indication of yes or no
529 POP CX ;restore loop counter
530 .UNTIL
<AX EQ yes
> OR
532 ; : : IF RESPONSE IS "Y"
535 MOV SWITCH
,EXIT
;TERMINATE THE LOOP
536 ; : : ENDIF ,END IS RESPONSE "N"? TEST
538 ; : ELSE ,SINCE "T" NOT SPECIFIED
541 MOV SWITCH
,EXIT
;TERMINATE THE LOOP
542 ; : ENDIF ,END IS THIS "T"? TEST
544 ; LEAVE IF EXIT SWITCH IS SET
548 ; ENDDO GO BACK AND SHIFT MORE
553 ; IF NO LEGAL FUNCTIONS DONE,
557 ;AC000; DISPLAY MSGI ;FUSS ABOUT ILLEGAL PARAMETERS
558 ; ENDIF ,END ARE NO LEGAL FUNCTIONS DONE? TEST
560 RET ;RETURN TO MODE MAIN ROUTINE
561 SHIFT_SCREEN ENDP
;AN000;