.TITLE SCREEN - DO SCREEN FORMATTING .IDENT /01.11/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided ; or otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: SCREEN ; Author: Robin Miller ; Date: October 28, 1981 ; ; Description: ; ; These routines do the screen formatting for the VT52, VT100, ; and Tektronix scopes. ; ; ; Modification History: ; ;- .ENABL AMA .NLIST BEX .MCALL DIR$, GTSK$, QIOW$, QIOW$S, QIO$, WTSE$ ; ; Local/Global equates. ; NULL = 0 ; ASCII FOR NULL FF = 14 ; ASCII FOR FORM FEED LF = 12 ; ASCII FOR LINE FEED CR = 15 ; ASCII FOR CARRIAGE RETURN ESC = 33 ; ASCII FOR ESCAPE TICKS = 1 ; TIME UNITS FOR MARKTIME SECNDS = 2 ; MINUTE = 3 ; HOURS = 4 ; ; ; Terminal type offsets. ; O.HARD == 0 ; HARDCOPY TERMINAL O.VT52 == 2 ; VT52 TERMINAL O.VAVO == 4 ; VT100 W/ADVANCED VIDEO OPTION O.V100 == 6 ; VT100 WITHOUT AVO O.TEK == 10 ; TEKTRONIX SCOPE ; ; Local storage. ; TTYST: .BYTE TC.TTP ; GET TERMINAL TYPE TTYPE:: .BYTE T.V100 ; INITIALIZE TO VT100 .BYTE TC.SCP ; GET SCOPE/HEADCOPY SCOPE: .BYTE 1 ; INITIALIZE TO TRUE TTYSIZ = .-TTYST ; SIZE OF STATUS TABLE SETBF:: .BYTE TC.ESQ,1 ; ENABLE ESCAPE SEQUENCES SETBL = .-SETBF TSKBUF: .BLKW 16. ; STORAGE FOR TASK PARAMETERS TEMP: .BLKW 10. ; TEMPORARY BUFFER SPACE TERM:: .WORD 0 ; TERMINAL TYPE VAXFLG:: .WORD 0 ; VAX/VMS INDICATOR SVT100: .ASCIZ %<% ; SET VT100 TO ANSI MODE ; .ASCIZ %[c% ; VT100 GET OPTIONS PRESENT .EVEN .SBTTL DIRECTIVE PARAMETER BLOCKS GETCHA: QIOW$ SF.GMC,OUTLUN,OUTEFN,,TIOSB,, ; GET TERM. CHAR. SETCHA::QIOW$ SF.SMC,OUTLUN,OUTEFN,,TIOSB,, ; SET TTY CHAR GETTSK: GTSK$ TSKBUF ; GET TASK PARAMETERS .SBTTL GTTYPE - GET TERMINAL TYPE ;+ ; ; GTTYPE - Get terminal type. ; ;- GTTYPE:: CALL $SAVAL ; SAVE R0 - R5 DIR$ #GETTSK ; GET TASK PARAMETERS CLR TERM ; PRESUME HARDCOPY TERMINAL CLRB VAXFLG ; PRESUME NOT ON VAX/VMS CMPB #5,TSKBUF+G.TSSY ; ARE WE ON VAX/VMS ? BNE 10$ ; IF NE, NO INCB VAXFLG ; YES, SHOW THAT WE ARE 10$: DIR$ #GETCHA ; GET TERMINAL TYPE ; Insure the terminal is of the VT100 family. CMPB TTYPE,#T.V100 ; ARE WE ON A VT100 ? BEQ 15$ ; IF EQ, YES ; Range of VT100 terminals is T.V101 (24) through T.V132 (31). CMPB TTYPE,#T.V101 ; Is this possible VT100 family ? BLO 20$ ; If LO, no CMPB TTYPE,#T.V132 ; Really a VT100 family terminal ? BHI 20$ ; If HI, no MOVB #T.V100,TTYPE ; Make us look like a VT100. 15$: MOV #O.VAVO,TERM ; PRESUME VT100 WITH AVO MOV #SVT100,R4 ; SET VT100 TO ANSI MODE CALL WRITE ; AND GO DO IT ; ; Since the VT102 is using a different format for the options present, ; the code to automatically determine a VT100 without AVO, was removed. ; Instead, a switch will be added to specify a VT100 without the AVO ; option. All PSDI VT100's are now shipped with the AVO option. ; DIR$ #SETCHA ; SETUP VT100 CHARACTERISTICS BR 100$ ; AND CONTINUE 20$: CMPB #T.VT52,TTYPE ; IS THIS A VT52 ? BNE 30$ ; IF NE, NO MOV #O.VT52,TERM ; SHOW VT52 TERMINAL BR 100$ ; AND CONTINUE 30$: CMPB #T.L180,TTYPE ; IS THIS AN LA180 ? BEQ 50$ ; IF EQ, YES CMPB #T.L120,TTYPE ; IS THIS AN LA120 ? BEQ 50$ ; IF EQ, YES ; VAX/VMS can set /UNKNOWN for Tektronix, RSX-11M can not. ; For RSX-11M the Tektronix should be set to an LA36. ; On VAX/VMS, when the terminal type is set to /LA120, the AME is ; passing back /UNKNOWN. For this reason, if the terminal is set ; to /UNKNOWN, the SCOPE attribute is checked. If it is false, ; meaning HARDCOPY, then the terminal is treated as an LA120. CMPB #T.UNK0,TTYPE ; UNKNOWN TERMINAL ? BEQ 40$ ; YES, PRESUME TEKTRONIX CMPB #T.LA36,TTYPE ; IS THIS AN LA36 ? BNE 50$ ; IF NE, NO (MUST BE HARDCOPY) MOVB #T.UNK0,TTYPE ; USE T.UNK0 FOR TEKTRONIX BR 45$ ; AND SETUP AS A TEKTRONIX 40$: TSTB SCOPE ; IS TTY SET TO SCOPE ? BEQ 50$ ; IF EQ, NO (HARDCOPY) 45$: MOV #O.TEK,TERM ; SHOW TEKTRONIX SCOPE BR 100$ ; AND CONTINUE ... 50$: MOV #O.HARD,TERM ; SHOW HARDCOPY TERMINAL MOV #-1,MAXLIN ; SET UP FOR HARDCOPY 100$: RETURN .SBTTL CLRSCR - CLEAR TERMINAL SCREEN ;+ ; ; CLRSCR - Clear terminal screen. ; ;- CLRSCR:: CALL $SAVAL ; SAVE ALL REGISTERS MOV #100$,R0 ; GET START OF TABLE CALL DOTYPE ; GO TYPE IT OUT CMPB TERM,#O.TEK ; IS THIS A TEKTRONIX ? BNE 10$ ; IF NE, NO MOV #2,R0 ; NUMBER OF UNITS MOV #SECNDS,R1 ; TYPE OF UNITS = SECONDS CALL DELAY ; NOW DELAY FOR AWHILE 10$: RETURN 100$: .WORD 110$,120$,130$,130$,140$ 110$: .BYTE ,<0> ; FOR HARDCOPY TERMINAL 120$: .BYTE ,'H,,'J,<0> ; VT52 HOME, CLEAR SCREEN 130$: .ASCII %[H%%[J% ; VT100 HOME, CLEAR SCREEN .ASCIZ %=% ; VT100 ENABLE KEYPAD 140$: .BYTE ,,<0> ; TEKTRONIX CLEAR SCREEN .EVEN .SBTTL CLRPAG - CLEAR CURRENT PAGE ;+ ; ; CLRPAG - Clears the current page on the terminal. ; ; On the VT52 and VT100 terminals, the file name is not erased ; from the screen. On the Tektronix, the entire screen is ; erased since partial erases are not possible. ; ;- CLRPAG:: CALL $SAVAL ; SAVE R0 - R5 CMPB TERM,#O.TEK ; IS THIS A TEKTRONIX ? BNE 10$ ; IF NE, NO CALL WRTHDR ; WRITE THE FILE NAME BR 20$ ; BR TO CONTINUE ... 10$: MOV #100$,R0 ; GET START OF TABLE CALL DOTYPE ; GO TYPE IT OUT 20$: RETURN 100$: .WORD 110$,120$,130$,130$,NULL 110$: .BYTE ,<0> ; FOR HARDCOPY TERMINAL 120$: .BYTE ,'Y,42,40 ; VT52 LINE 3, COLUMN 1 .BYTE ,'J ; VT52 CLEAR SCREEN .BYTE ,'Y,41,40,<0> ; VT52 LINE 2, COLUMN 1 130$: .ASCII %[3;1H% ; VT100 LINE 3, COLUMN 1 .ASCII %[J% ; VT100 CLEAR SCREEN .ASCIZ %[2;1H% ; VT100 LINE 2, COLUMN 1 .EVEN .SBTTL SETTOP - Position to top of screen. ;+ ; ; SETTOP - Position at top of screen under the file name. ; ;- SETTOP:: CALL $SAVAL ; SAVE R0 - R5 CMPB TERM,#O.TEK ; IS THIS A TEKTRONIX ? BNE 10$ ; IF NE, NO CALL WRTHDR ; WRITE THE FILE NAME BR 20$ ; BR TO CONTINUE ... 10$: MOV #100$,R0 ; GET START OF TABLE CALL DOTYPE ; GO TYPE IT OUT 20$: RETURN 100$: .WORD 110$,120$,130$,130$,NULL 110$: .BYTE ,<0> ; FOR HARDCOPY TERMINAL 120$: .BYTE ,'Y,41,40 ; VT52 LINE 2, COLUMN 1 .ASCIZ %K% ; VT52 ERASE TO END OF LINE 130$: .ASCII %[2;1H% ; VT100 LINE 2, COLUMN 1 .ASCIZ %[K% ; VT100 ERASE TO END OF LINE .EVEN .SBTTL NXTPAG - NEXT PAGE PROCESSING ;+ ; ; NXTPAG - Next page processing. ; ;- NXTPAG:: CALL $SAVAL ; SAVE R0 - R5 CMPB TERM,#O.TEK ; IS THIS A TEKTRONIX ? BNE 10$ ; IF NE, NO CALL WRTHDR ; WRITE THE FILE NAME BR 30$ ; BR TO CONTINUE ... 10$: MOV #100$,R0 ; GET START OF TABLE TSTB SETVT1 ; VT100 SET WIDE ? BEQ 20$ ; IF EQ, NO MOV #200$,R0 ; YES, USE THIS TABLE 20$: CALL DOTYPE ; GO TYPE IT OUT 30$: RETURN 100$: .WORD 110$,120$,130$,130$,NULL 110$: .BYTE ,<0> ; FOR HARDCOPY TERMINAL 120$: .BYTE ,'Y,41,40 ; VT52 LINE 2, COLUMN 1 .BYTE ,'J,<0> ; VT52 CLEAR SCREEN ; VT100 with AVO. 130$: .ASCII %[24;1H% ; VT100 LINE 24, COLUMN 1 .ASCII %[J% ; VT100 CLEAR SCREEN .ASCIZ %[23;1H% ; VT100 LINE 23, COLUMN 1 .EVEN ; VT100 without AVO and wide listing. 200$: .WORD 110$,120$,130$,210$,NULL 210$: .ASCII %[14;1H% ; VT100 LINE 14, COLUMN 1 .ASCII %[J% ; VT100 CLEAR SCREEN .ASCIZ %[13;1H% ; VT100 LINE 13, COLUMN 1 .EVEN .SBTTL ADDATR - ADD ATTRIBUTES TO VT100 ;+ ; ; ADDATR - Add attributes to VT100. ; ;- ADDATR:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET THE TABLE ADDR CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,NULL,110$,120$,NULL 110$: .ASCIZ %[1;7m% ; VT100 BOLD, REVERSE VIDEO 120$: .ASCIZ %[7m% ; VT100 REVERSE VIDEO .EVEN .SBTTL ADDREV - ADD REVERSE VIDEO TO VT100 ;+ ; ; ADDREV - Add reverse video to VT100 (with AVO only). ; ;- ADDREV:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET THE TABLE ADDR CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,NULL,110$,NULL,NULL 110$: .ASCIZ %[7m% ; VT100 REVERSE VIDEO .EVEN .SBTTL ADDBLI - ADD BLINK ATTRIBUTE TO VT100 ;+ ; ; ADDBLI - Add blink attribute to VT100. ; ;- ADDBLI:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET THE TABLE ADDR CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,NULL,110$,120$,NULL 110$: .ASCIZ %[1;5m% ; VT100 BOLD/BLINK 120$: .ASCIZ %[7m% ; VT100 REVERSE VIDEO .EVEN .SBTTL REMATR - REMOVE VT100 ATTRIBUTES ;+ ; ; REMATR - Remove VT100 attributes. ; ;- REMATR:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET THE TABLE ADDR CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,NULL,110$,110$,NULL 110$: .ASCIZ %[m% ; VT100 TURN OFF ATTRIBUTES .EVEN .SBTTL SCRDWN - SCROLL VT100 SCREEN DOWN ;+ ; ; SCRDWN - Scroll the VT100 screen down. ; ; Inputs: ; R2 = number of line to scroll down. ; ;- SCRDWN:: CALL $SAVAL ; SAVE R0 - R5 CALL SETTOP ; POSITION TO TOP OF SCREEN MOV #CRLF,R4 ; SET TO WRITE A BLANK LINE CALL WRITE ; POSITIONS TO 3RD LINE 10$: MOV #100$,R0 ; SET THE TABLE ADDRESS CALL DOTYPE ; AND DO IT SOB R2,10$ ; LOOP TILL DONE CALL SETTOP ; BACK TO THE TOP RETURN 100$: .WORD NULL,NULL,110$,110$,NULL 110$: .ASCIZ %M% ; VT100 REVERSE INDEX .EVEN .SBTTL SETNAR - SET VT100 NARROW ;+ ; ; SETNAR - Reset VT100 with no scroll region and 80 column. ; ;- SETNAR:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET THE TABLE ADDRESS CALL DOTYPE ; AND GO DO IT RETURN 100$: .WORD NULL,NULL,110$,110$,120$ 110$: .ASCII %[r% ; VT100 CLEAR SCROLL REGION .ASCIZ %[?3l% ; VT100 SET TO 80 COLUMNS 120$: .BYTE ,':,<0> ; TEKTRONIX MEDIUM SIZE .EVEN .SBTTL POSEOS - POSITION TO END OF SCREEN ;+ ; ; POSEOS - Position to end of screen. ; ;- POSEOS:: CALL $SAVAL ; SAVE R0 - R5 TSTB VAXFLG ; ARE WE ON VAX/VMS ? BEQ 10$ ; IF EQ, NO MOVB #66,110$+2 ; VT52 LINE # TO 23. 10$: MOV #100$,R0 ; SET TABLE ADDRESS TSTB SETVT1 ; VT100 SET WIDE ? BEQ 20$ ; IF EQ, NO MOV #200$,R0 ; ELSE, USE THIS TABLE 20$: CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,110$,120$,120$,130$ 110$: .BYTE ,'Y,67,40,<0> ; VT52 LINE 24, COLUMN 1 120$: .ASCIZ %[24;1H% ; VT100 LINE 24, COLUMN 1 130$: .BYTE ,,<0> ; TEKTRONIX, SINGLE SPACE .EVEN 200$: .WORD NULL,110$,120$,220$,130$ 220$: .ASCII %[14;1H% ; VT100 LINE 14, COLUMN 1 .ASCIZ %[7m% ; VT100 REVERSE VIDEO .EVEN .SBTTL CLREOL - CLEAR TO END OF LINE ;+ ; ; CLREOL - Clear to end of line. ; ;- CLREOL:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; SET TABLE ADDRESS CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,110$,120$,120$,NULL 110$: .ASCIZ %K% ; VT52 ERASE TO END OF LINE 120$: .ASCIZ %[K% ; VT100 ERASE TO END OF LINE .EVEN .SBTTL WRTEOF - WRITE END OF FILE SEQUENCE ;+ ; ; WRTEOF - Write end of file sequence. ; ;- WRTEOF:: CALL $SAVAL ; SAVE R0 - R5 MOV #100$,R0 ; PRESUME VT100 NARROW TSTB SETVT1 ; VT100 SET TO WIDE ? BEQ 10$ ; IF EQ, NO MOV #200$,R0 ; YES, RESET TO NARROW 10$: CALL DOTYPE ; AND DO IT CALL BLANK ; STUPID VAX SPACING RETURN ; VT100 in 80. columns. 100$: .WORD NULL,110$,120$,120$,130$ 110$: .BYTE ,'Y,67,40 ; VT52 LINE 24, COLUMN 1 .BYTE ,'J ; VT52 CLEAR SCREEN .BYTE ,'Y,66,40,<0> ; VT52 LINE 23, COLUMN 1 120$: .ASCII %[r% ; VT100 NO SCROLL REGION .ASCII %>% ; VT100 DISABLE KEYPAD .ASCII %[24;1H% ; VT100 LINE 24, COLUMN 1 .ASCII %[J% ; VT100 CLEAR SCREEN .ASCIZ %[23;1H% ; VT100 LINE 23, COLUMN 1 130$: .BYTE ,';,<0> ; TEKTRONIX SMALL SIZE .EVEN ; VT100 set to 132. columns. 200$: .WORD NULL,110$,210$,210$,130$ 210$: .ASCII %[r% ; VT100 NO SCROLL REGION .ASCII %>% ; VT100 DISABLE KEYPAD .ASCIZ %[?3l% ; VT100 SET TO 80 COLUMNS .EVEN .SBTTL WRTHDR - WRITE HEADER ON TOP OF SCREEN ;+ ; ; WRTHDR - Writes the file name header on the top of the page. ; ;- WRTHDR:: CALL $SAVAL ; SAVE R0 - R5 CALL CLRSCR ; CLEAR THE SCREEN MOV #100$,R0 ; PRESUME 80 COLUMNS TSTB SETVT1 ; SET VT100 WIDE ? BEQ 10$ ; IF EQ, NO MOV #200$,R0 ; SET FOR 132 COLUMNS 10$: CALL DOTYPE ; AND DO IT ; The next delay is to allow the VT100 to settle down. MOV #30,R0 ; SET UP NUMBER OF UNITS MOV #TICKS,R1 ; TYPE OF UNITS = TICKS CALL DELAY ; DELAY FOR A LITTLE WHILE CALL WRTNAM ; WRITE THE FILE NAME MOV #300$,R0 ; DO OTHER SPECIAL STUFF TSTB SETTEK ; TEKTRONIX SET WIDE ? BEQ 20$ ; IF EQ, NO MOV #400$,R0 ; SET FOR SMALL SIZE 20$: CALL DOTYPE ; AND GO DO IT CALL SETSCR ; SETUP THE VT100 SCROLL REGION RETURN ; VT100 in 80. column mode. 100$: .WORD NULL,NULL,110$,110$,120$ 110$: .ASCII %[?3l% ; VT100 SET TO 80 COLUMNS .ASCIZ %[1;7m% ; VT100 BOLD, REVERSE VIDEO 120$: .BYTE ,'8,<0> ; TEKTRONIX LARGE SIZE .EVEN ; VT100 in 132. column mode. 200$: .WORD NULL,NULL,210$,220$,120$ 210$: .ASCII %[?3h% ; VT100 SET TO 132 COLUMNS .ASCII %#6% ; VT100 DOUBLE WIDTH LINE .ASCIZ %[1;7m% ; VT100 BOLD, REVERSE VIDEO 220$: .ASCII %[?3h% ; VT100 SET TO 132 COLUMNS .ASCII %#6% ; VT100 DOUBLE WIDTH LINE .ASCIZ %[7m% ; VT100 REVERSE VIDEO .EVEN 300$: .WORD NULL,NULL,310$,310$,320$ 310$: .ASCIZ %[m% ; VT100 TURN OFF ATTRIBUTES 320$: .BYTE ,':,<0> ; TEKTRONIX MEDIUM SIZE .EVEN 400$: .WORD NULL,NULL,310$,310$,410$ 410$: .BYTE ,,,';,<0> ; TEKTRONIX SMALL SIZE .EVEN .SBTTL SETSCR - SETUP THE VT100 SCROLL REGION ;+ ; ; ; SETSCR - Setup the VT100 scroll region. ; ; The setting of the VT100 scroll region was moved away from the code ; which set the 80/132 column code because I believe this sequence was ; intermittantly causing a problem with the VT100. ; ;- SETSCR::CMPB #T.V100,TTYPE ; IS THIS A VT100 ? BNE 20$ ; IF NE, NO MOV #100$,R0 ; PRESUME 80 COLUMN MODE TSTB SETVT1 ; DID WE GUESS RIGHT ? BEQ 10$ ; IF EQ, YES MOV #200$,R0 ; NO, 132 COLUMN MODE 10$: CALL DOTYPE ; GO SET THE SCROLL REGION ; Remember, setting scroll region puts us at home position. CALL SETTOP ; POSITION UNDER THE FILENAME 20$: RETURN ; Setup the VT100 scroll region (80 column mode). 100$: .WORD NULL,NULL,210$,210$,NULL ; Setup the VT100 scroll region (132 column mode). 200$: .WORD NULL,NULL,210$,220$,NULL 210$: .ASCIZ %[3;23r% ; SET SCROLL REGION 3:23 (AVO) 220$: .ASCIZ %[3;13r% ; SET SCROLL REGION 3:13 (NOAVO) .EVEN .SBTTL WRTMSG - PREPARE TO WRITE MESSAGE ;+ ; ; WRTMSG - Prepare to write message on the screen. ; ;- WRTMSG:: CALL $SAVAL ; SAVE R0 - R5 TSTB VAXFLG ; ARE WE ON VAX/VMS ? BEQ 10$ ; IF EQ, NO MOVB #66,110$+2 ; VT52 LINE # TO 23. MOVB #13,130$ ; TEKTRONIX REVERSE LINE FEED 10$: CALL ADDATR ; ADD ATTRIBUTES TO VT100 MOV #100$,R0 ; PRESUME VT100 NARROW TSTB SETVT1 ; VT100 SET WIDE ? BEQ 20$ ; IF EQ, NO MOV #200$,R0 ; YES, USE THIS TABLE 20$: CALL DOTYPE ; AND DO IT RETURN 100$: .WORD NULL,110$,120$,120$,130$ 110$: .BYTE ,'Y,67,<32.+30.> ; VT52 LINE 24, COLUMN 30 .BYTE ,'K,<0> ; VT52 ERASE TO END OF LINE 120$: .ASCII %[24;30H% ; VT100 LINE 24, COLUMN 30 .ASCIZ %[K% ; VT100 ERASE TO END OF LINE 130$: .REPT 30. ; TEKTRONIX SPACE 30 TIMES .BYTE 32. .ENDR .EVEN 200$: .WORD NULL,110$,120$,210$,130$ 210$: .ASCII %[14;30H% ; VT100 LINE 14, COLUMN 30 .ASCIZ %[K% ; VT100 ERASE TO END OF LINE .EVEN .SBTTL DOTYPE - DO SCREEN TYPEOUT ;+ ; ; DOTYPE - Do screen typeout. ; ; Inputs: ; R0 = Start of control characters table. ; TERM = Terminal type offset. ; ; Outputs: ; (R0) = the message address (zero if none). ; ;- DOTYPE:: ADD TERM,R0 ; OFFSET INTO TABLE MOV (R0),R4 ; COPY THE MESSAGE ADDRESS BEQ 10$ ; IF EQ, NO MESSAGE CALL WRITE ; ELSE, WRITE THE MESSAGE 10$: RETURN .END