INTEGER LMODE,CMODE,TMODE,FMODE,BMODE,FFLG,HFLG,BUFI(1) BYTE BUF(2,80,48),BUFS(7680),ICHAR(2),ZERO(2),TBUF(80) BYTE LNAME(30),RNAME(30),WNAME(30) COMMON IGO,FMODE,BMODE,IFOR,IBAC,IFORD,IBACD EQUIVALENCE (BUF(1,1,1),BUFS(1)) EQUIVALENCE (BUFS(1),BUFI(1)) DATA ZERO/0,0/,IFORD,IBACD/7,"70/ CALL KBINIT CALL WDFUIC("300,"324) IFILE=0 IHELP=1 IESC=.FALSE. IGOT=.FALSE. !DON'T KNOW LAST CHAR NUM=0 IYC=4 !CURRENT Y POS'N IXC=1 ! " X " IXS=IXC IYS=IYC IPOS=.TRUE. !WE KNOW CURRENT POS'N ISTATC="007 IFOR=7 IBAC="00 IFORD=0 IBACD=0-1 HFLG=.TRUE. !HORIZONTAL TEXT MODE FFLG=.TRUE. !FORGROUND(FG) FLAG LMODE=.TRUE. !LINE MODE CMODE=.FALSE. !COLOR MODE TMODE=.FALSE. !TEXT MODE FMODE=.TRUE. !FOREGROUND (FG) DELETE BMODE=.FALSE. !BACKGROUND (BG) DELETE 1 DO 5 I=1,7680,2 BUFS(I)="40 BUFS(I+1)="00 5 CONTINUE CALL INIT !CLEAR AND INIT ISC GOTO 3000 !BRANCH TO HELP FILE AND RETURN 7 IF(.NOT.IPOS)CALL GPOS(IXC,IYC)!GET CURSOR POS'N IF(.NOT.HFLG)CALL ANGLE(2) IPOS=.TRUE. !SHOW WE KNOW IT CALL HOME CALL SSTAT(7) CALL CLRLIN !CLEAR TOP LINE CALL APOSV(8,1) IF(TMODE)CALL KBWR(8,'***TEXT') IF(LMODE)CALL KBWR(8,'***LINE') IF(CMODE)CALL KBWR(8,'***FILL') CALL KBWR(8,' MODE***') CALL APOSV(43,1) CALL KBWR(29,'FLAG COLOR OVERLAY DELETE') CALL CLRNXT !CLR NEXT LINE CALL APOSV(32,2) CALL KBWRW(10,'BACKGROUND') IF(FFLG)GOTO 8 CALL APOSV(44,2) !FLAG POINTS TO BG CALL KBWR(1,'*') 8 CALL APOSV(51,2) !POS'N FOR BG COLOR CALL SSTAT(IBAC) CALL KBWR(1,' ') !DISPLAY BG COLOR CALL APOSV(56,2) !POS'N FOR DOMINANT STATUS CALL SSTAT(7) IF(BMODE)CALL KBWR(3,'YES') IF(.NOT.BMODE)CALL KBWR(2,'NO') CALL APOSV(65,2) !POS'N FOR DELETE STATUS OR COLOR IF(.NOT.BMODE)GOTO 9 CALL KBWR(3,'ALL') GOTO 12 9 IF(IBACD.GE.0)GOTO 10 CALL KBWR(3,'NIL') !NO DELETEABLE BG COLOR GOTO 12 10 CALL SSTAT(IBACD) !SHOW BG COLOR WHICH WILL ALWAYS CALL KBWR(1,' ') !BE OVER WRITTEN CALL SSTAT(7) 12 CALL CLRNXT !CLR NEXT LINE IF(.NOT.TMODE)GOTO 14 CALL APOSV(11,3) IF(HFLG)CALL KBWR(10,'HORIZONTAL') IF(.NOT.HFLG)CALL KBWR(8,'VERTICAL') 14 CALL APOSV(32,3) CALL KBWR(10,'FOREGROUND') IF(.NOT.FFLG)GOTO 16 CALL APOSV(44,3) !SHOW FLAG POINTING AT BG CALL KBWR(1,'*') 16 CALL APOSV(51,3) !POS'N FOR FG COLOR IF=IFOR*"10 CALL SSTAT(IF) CALL KBWRW(1,' ') !SHOW FG COLOUR CALL SSTAT(7) CALL APOSV(56,3) !POS'N FOR FG DOMINANT STATUS IF(.NOT.FMODE)CALL KBWR(2,'NO') !SHOW FG DOMINANT STATUS IF(FMODE)CALL KBWR(3,'YES') CALL APOSV(65,3) !POS'N FOR FG DELETE STATUS IF(.NOT.FMODE)GOTO 17 CALL KBWR(3,'ALL') GOTO 19 17 IF(IFORD.GE.0)GOTO 18 CALL KBWR(3,'NIL') GOTO 19 18 IF=IFORD*"10 CALL SSTAT(IF) CALL KBWRW(1,' ') !SHOW FG DELETE COLOUR 19 CALL APOSV(IXC,IYC) IF(.NOT.HFLG)CALL ANGLE(4) IGO=.TRUE. 90 CALL SPRINT(ZERO,ISTATC) C 100 IESC=.FALSE. 105 IF(IGOT)GOTO 110 !WE ALREADY KNOW CHAR. I=NCHAR IF(I.GT.0)GOTO 110 CALL KBRDW(1,ICHAR(1)) !READ ONE CHARACTER I=ICHAR(1) 110 IGOT=.FALSE. IF(I.EQ.1)GOTO 2500 !WE EXIT IF(I.EQ.3)GOTO 2500 !WE EXIT IF(I.LT.7)GOTO 100 !IGNORE THESE CHAR. IF(I.EQ.8)GOTO 125 !HOME IF(I.LT.11)GOTO 130 !GO ECHO TAB(9), LF(10) IF(I.EQ.13)GOTO 140 !ECHO CR IF(I.EQ.25)GOTO 130 !CUR RIGHT IF(I.EQ.26)GOTO 130 !CUR LEFT IF(I.EQ.28)GOTO 130 !CUR UP IF(I.LT.16)GOTO 100 !IGNORE IF(I.LE.23)GOTO 150 !COLOUR IF(I.EQ.27)GOTO 190 !ESC SPECIAL CHARACTER IF(I.LT.29)GOTO 100 IF(I.EQ.29)GOTO 160 !FG ON IF(I.EQ.30)GOTO 170 !BG ON IF(I.EQ.31)GOTO 100 !BLINK MODE IF(IESC)GOTO 120 IF(TMODE)GOTO 500 120 IF((I.GE."60).AND.(I.LE."71))GOTO 290 !NUMBER NUM=0 IF(I.GT."141)I=I.AND."137 !LOWER TO UPER IF(I.EQ."110)GOTO 3010 !H HELP IF(I.EQ."115)GOTO 2000 !M SHOW WHOLE SCREEN IF(I.EQ."104)GOTO 210 !D SET DELET COLOR IF(I.EQ."106)GOTO 230 !F FILL IF(I.EQ."124)GOTO 240 !T TEXT IF(I.EQ."114)GOTO 250 !L LINE IF(I.EQ."117)GOTO 260 !O OVERLAY STATUS IF(I.EQ."126)GOTO 280 !V HORIZONTAT/VERTICAL IF(I.EQ."122)GOTO 300 !R READ IF(I.EQ."127)GOTO 310 !W WRITE IF(I.EQ."103)GOTO 320 !C CLOSE IF(I.EQ."120)GOTO 330 !P PAGE IF(I.EQ."131)GOTO 340 !Y ANK IF(I.EQ."123)GOTO 1000 !S TART IF(I.EQ."105)GOTO 1010 !E END GOTO 3000 C 125 IF(NUM.EQ.0)GOTO 130 !HOME IF(.NOT.IPOS)CALL GPOS(IXC,IYC) IX=NUM/100 IY=NUM-(IX*100) IF(IX.GT.81)IX=80 IF(IX.EQ.0)IX=IXC IF(IY.GT.48)IY=48 IF(IY.EQ.0)IY=IYC IXC=IX IYC=IY CALL APOSV(IXC,IYC) IPOS=.TRUE. GOTO 146 130 IF(NUM.EQ.0)NUM=1 !CURSER MOVEMENTS DO 135 J=1,NUM CALL KBWR(1,I) !JUST ECHO MOVE CHAR. 135 CONTINUE GOTO 145 140 CALL CRLF 145 IPOS=.FALSE. !WE NO LONGER KNOW POS'N 146 NUM=0 !CLEAR MOVEMENT COUNTER GOTO 100 !AND GO READ NEXT CHARCTER C COLOR CHANGE 150 I=I.AND.7 !GET RID OF EXTRA BITS IF(.NOT.FFLG)I=I*"10 !SHIFT BITS FOR BG IF(.NOT.FFLG)ISTATC=ISTATC.AND."307.OR.I IF(FFLG)ISTATC=ISTATC.AND."370.OR.I IFOR=ISTATC.AND."7 IBAC=ISTATC.AND."70 GOTO 7 C 160 FFLG=.TRUE. !FLAG SET TO FG GOTO 172 170 FFLG=.FALSE. !FLAG SET TO BG 172 CALL KBRDW(1,ICHAR(1)) !READ ONE CHAR. I=ICHAR(1) IF((I.GE."120).AND.(I.LE."127))GOTO 150 !COLOR IGOT=.TRUE. GOTO 7 C 190 NUM=0 IF(IESC)GOTO 7 IESC=.TRUE. GOTO 105 C 210 CALL KBRDW(1,I) IF((I.GE."120).AND.(I.LE."127))GOTO 220 !COLOR IGOT=.TRUE. IF(.NOT.FFLG)IBACD=-IBACD-1 IF(FFLG)IFORD=-IFORD-1 GOTO 7 220 I=I.AND.7 IF(FFLG)IFORD=I IF(.NOT.FFLG)IBACD=I*"10 GOTO 7 230 IF(CMODE)GOTO 1100 !GO FILL IN SQUARE CMODE=.TRUE. !FILL MODE TMODE=.FALSE. BMODE=.TRUE. FMODE=.FALSE. FFLG=.FALSE. LMODE=.FALSE. IF(IBACD.LT.0)IBACD=-IBACD-1 GOTO 255 240 TMODE=.TRUE. !TEXT MODE CMODE=.FALSE. BMODE=.FALSE. FMODE=.TRUE. FFLG=.TRUE. LMODE=.FALSE. HFLG=.TRUE. IF(IBACD.LT.0)IBACD=-IBACD-1 GOTO 285 C 250 LMODE=.TRUE. !LINE MODE CMODE=.FALSE. TMODE=.FALSE. BMODE=.FALSE. FMODE=.TRUE. FFLG=.TRUE. IF(IBACD.GE.0)IBACD=-IBACD-1 255 HFLG=.TRUE. GOTO 285 C 260 IF(FFLG)FMODE=.NOT.FMODE !FG DOMINANT SWITCH IF(.NOT.FFLG)BMODE=.NOT.BMODE !BG DOMINENT SWITCH GOTO 7 C 280 HFLG=.NOT.HFLG !VERTICAL/HORIZONTAL 285 IF(HFLG)CALL ANGLE(2) IF(.NOT.HFLG)CALL ANGLE(4) GOTO 7 C 290 I=I.AND."17 !CREATE NUMBER IF(NUM.GT.3760)NUM=NUM-3760 NUM=NUM*10+I GOTO 105 C 300 CALL HOME IF(IFILE.AND.1)CALL CLMES(2,RNAME,NR) !READ LUN=2 GOTO 3500 C 310 CALL HOME IF(IFILE.AND.2)CALL CLMES(3,WNAME,NW) !WRITE LUN=3 GOTO 3500 C 320 CALL HOME IF(IFILE.AND.1)CALL CLMES(2,RNAME,NR) !CLOSE IF(IFILE.AND.2)CALL CLMES(3,WNAME,NW) IF(IFILE.EQ.0)CALL CLMES(0) IFILE=0 GOTO 90 C 330 CALL HOME CALL SSTAT(7) IF(IFILE)GOTO 3600 !PAGE CALL CLRLIN CALL KBWR(13,'NO FILES OPEN') GOTO 90 340 CALL HOME CALL SSTAT(7) CALL CLRLIN IF(IFILE.AND.1)GOTO 3635 CALL KBWR(15,'NO FILE TO READ') GOTO 90 C C TEXT MODE 500 IF(IPOS)GOTO 510 !DO WE KNOW CURRENT POS'N CALL GPOS(IXC,IYC) !NO, SO GET IT IPOS=.TRUE. 510 J1=I J2=BUF(2,IXC,IYC).AND."77 !GET CURRENT COLORS CALL SPRINT(J1,J2) BUF(1,IXC,IYC)=J1 BUF(2,IXC,IYC)=J2 IF(.NOT.HFLG)GOTO 530 !GO FOR VERTICAL IF(IXC.GE.80)GOTO 145 IXC=IXC+1 GOTO 100 530 IF(IYC.GE.48)GOTO 145 IYC=IYC+1 GOTO 100 C C LINE AND FILL MODE 1000 CALL GPOS(IXS,IYS) !GET START POS'N GOTO 100 1010 CALL GPOS(IXE,IYE) !GET END POS'N IYES=IYE !SAVE CURRENT POS'N IXES=IXE IXC=IXE IYC=IYE IF(IXS.LE.IXE)GOTO 1020 !SORT OUT SMALLEST X & Y IXE=IXS IXS=IXES 1020 IF(IYS.LE.IYE)GOTO 1030 IYE=IYS IYS=IYES 1030 IG0=.TRUE. CALL SPRINT(0,ISTATC) IF(.NOT.CMODE)GOTO 1500 GOTO 1200 C C FIND BOUNDRIES FOR FILL 1100 IF(.NOT.IPOS)CALL GPOS(IXC,IYC) IPOS=.TRUE. DO 1120 IXS=IXC,1,-1 IF(BUF(2,IXS,IYC).AND."200)GOTO 1125 1120 CONTINUE IXS=1 1125 DO 1130 IXE=IXC,80 IF(BUF(2,IXE,IYC).AND."200)GOTO 1135 1130 CONTINUE IXE=80 1135 DO 1140 IYS=IYC,1,-1 IF(BUF(2,IXC,IYS).AND."200)GOTO 1145 1140 CONTINUE IYS=1 1145 DO 1150 IYE=IYC,48 IF(BUF(2,IXC,IYE).AND."200)GOTO 1155 1150 CONTINUE IYE=48 1155 IF(IXE.LT.80)IXE=IXE-1 IF(IYE.LT.48)IYE=IYE-1 C C FILL MODE 1200 DO 1250 IY=IYS,IYE CALL APOSV(IXS,IY) DO 1240 IX=IXS,IXE J1=BUF(1,IX,IY) J2=BUF(2,IX,IY) CALL SPRINT(J1,J2) !SPECIAL PRINT BUF(2,IX,IY)=J2 BUF(1,IX,IY)=J1 1240 CONTINUE IGO=.TRUE. CALL SPRINT(0,ISTATC) !GET OUT OF SPECIAL PRINT MODE 1250 CONTINUE 1260 IXS=IXES IYS=IYES CALL APOSV(IXC,IYC) !RETURN TO ORIGINAL POS'N IPOS=.TRUE. !SHOW WE KNOW IT GOTO 100 C C LINE MODE 1500 IF(IXS.EQ.IXE)GOTO 1555 CALL ANGLE(2) INC=IYE-IYS IF(INC.EQ.0)INC=1 N1="21 N2=1 DO 1550 IY=IYS,IYE,INC CALL APOSV(IXS,IY) IF(IY.EQ.48)N1="210 IF(IY.EQ.48)N2="10 DO 1540 IX=IXS,IXE J1=BUF(1,IX,IY) J2=BUF(2,IX,IY) IF((J2.AND."200).NE.0)GOTO 1520 J1=0 J2=J2.OR."200 1520 J1=J1.OR.N2 IF(IX.NE.IXE)J1=J1.OR.N1 IF(IX.EQ.80)J1=J1.OR.N1 CALL SPRINT(J1,J2) BUF(1,IX,IY)=J1 BUF(2,IX,IY)=J2 1540 CONTINUE IGO=.TRUE. CALL SPRINT(0,ISTATC) 1550 CONTINUE 1555 IF(IYS.EQ.IYE)GOTO 1260 CALL ANGLE(4) INC=IXE-IXS IF(INC.EQ.0)INC=1 N1="17 N2="1 DO 1590 IX=IXS,IXE,INC IF(IX.EQ.80)N1="360 IF(IX.EQ.80)N2="20 CALL APOSV(IX,IYS) DO 1570 IY=IYS,IYE J1=BUF(1,IX,IY) J2=BUF(2,IX,IY) IF((J2.AND."200).NE.0)GOTO 1560 J1=0 J2=J2.OR."200 1560 J1=J1.OR.N2 IF(IY.NE.IYE)J1=J1.OR.N1 IF(IY.EQ.48)J1=J1.OR.N1 CALL SPRINT(J1,J2) BUF(1,IX,IY)=J1 BUF(2,IX,IY)=J2 1570 CONTINUE IGO=.TRUE. CALL SPRINT(0,ISTATC) 1590 CONTINUE CALL ANGLE(2) GOTO 1260 C 2000 IF(.NOT.IPOS)CALL GPOS(IXC,IYC) !SAVE CURRENT POS'N IPOS=.TRUE. 2005 CALL INIT CALL APOSB(1,1,7) ICHAR(1)=27 ICHAR(2)=29 CALL KBWR(2,ICHAR) !PUT ISC IN BLOCK RECEIVE MODE DO 2010 I=1,7680,160 CALL KBWRW(160,BUFS(I)) !FILL ISC MEMORY 2010 CONTINUE ICHAR(1)="377 ICHAR(2)=0 CALL KBWRW(2,ICHAR) !TERMINATE BLOCK RECEIVE MODE J1=BUF(1,1,1) J2=BUF(2,1,1) CALL HOME IGO=.TRUE. CALL SPRINT(J1,J2) CALL SPRINT(ZERO,ISTATC) !RESTORE STATUS IF(IPOS)CALL APOSV(IXC,IYC) !RETURN TO SAVED POS'N IF(.NOT.IPOS)CALL APOSV(81,48) GOTO 100 C 2500 CALL ANGLE(2) CALL KBWRW(1,27) CALL KBWRW(1,11) !SET ROLL UP CALL SSTAT("47) CALL APOSV(1,47) CALL EXIT C C HELP FUNCTION 3000 IHELP=IHELP-1 IF(IHELP)GOTO 100 3005 IHELP=6 CALL SSTAT(7) IF(.NOT.IPOS)CALL GPOS(IXC,IYC) IPOS=.TRUE. CALL HOME CALL CLRLIN CALL KBWRW(17,'DO YOU NEED HELP? ') ACCEPT 3009,N,(TBUF(I),I=1,N) 3009 FORMAT(Q,80A1) IF(N.EQ.0)GOTO 7 IF(TBUF(1).EQ."116)GOTO 7 3010 CALL ASSIGN(1,'ISC.DOC') CALL SSTAT("47) CALL HOME CALL CLRLIN 3020 READ(1,3009,END=3050)N,(TBUF(I),I=1,N) CALL KBWR(N,TBUF) CALL CLRNXT GOTO 3020 3050 CALL CLOSE(1) CALL KBRDW(1,I) IPOS=.FALSE. GOTO 7 C C READ OR WRITE 3500 CALL SSTAT(7) CALL CLRLIN CALL KBWRW(10,'FILENAME? ') IF(NS)CALL KBWR(NS,LNAME) J=LNAME(1) N=NS READ (5,3009,END=7)NS,(LNAME(I),I=1,NS) IF(NS)GOTO 3510 !GO IF WE GOT A FILE NAME IF(N.EQ.0)GOTO 3000 !WE NEVER HAD A NAME LNAME(1)=J !RESTORE LAST NAME NS=N 3510 IF(LUN.EQ.3)GOTO 3550 !GO FOR WRITE IFILE=IFILE.OR.1 DO 3520 I=1,NS !SAVE READ NAME RNAME(I)=LNAME(I) 3520 CONTINUE NR=NS !AND # OF CHARACTERS IF((IFILE.AND.2).EQ.0)GOTO 3540 !GO IF NO OUTPUT FILE OPEN IF(NR.NE.NW)GOTO 3540 !NAMES CAN'T BE THE SAME DO 3530 I=1,NR IF(RNAME(I).NE.WNAME(I))GOTO 3540 3530 CONTINUE C TRYING TO READ A FILE OPEN FOR OUTPUT CALL CLMES(3,WNAME,NW) !SO WE CLOSE IT IFILE=IFILE.AND.1 !SHOW ITS CLOSED 3540 CALL ASSIGN(2,RNAME,NR) !OPEN FILE FOR READ GOTO 3600 C 3550 CONTINUE !HERE FOR WRITE IFILE=IFILE.OR.2 DO 3560 I=1,NS !SAVE NAME WNAME(I)=LNAME(I) 3560 CONTINUE NW=NS CALL ASSIGN(3,WNAME,NW) !OPEN FOR OUTPUT GOTO 90 3600 IF((IFILE.AND.2).EQ.0)GOTO 3635 DO 3630 I=1,3840,256 CALL CRLF WRITE(3)(BUFI(J),J=I,I+255) IF(I.EQ.1)CALL KBWR(13,'I AM WRITING ') IF(I.EQ.1)CALL KBWR(NW,WNAME) 3630 CONTINUE 3635 IF((IFILE.AND.1).EQ.0)GOTO 1 DO 3650 I=1,3840,256 CALL CRLF READ(2,ERR=3670,END=3660)(BUFI(N),N=I,I+255) IF(I.EQ.1)CALL KBWR(13,'I AM READING ') IF(I.EQ.1)CALL KBWR(NR,RNAME) 3650 CONTINUE IPOS=.FALSE. GOTO 2005 3660 IFILE=IFILE.AND.2 CALL CLMES(2,RNAME,NR) GOTO 90 3670 CALL KBWRW(17,'ERROR IN READING ') CALL KBWRW(NS,NAME) GOTO 90 END C SUBROUTINE COMPARES ISTAT TO CURRENT DOMINATE FG AND BG COLORS C AND CHANGES IT ACCORDINGLY C IT THEN MAKES SURE TERMINAL SET TO CORRECT STATUS C AND OUTPUTS CHARACTER IN PLOT OR NORMAL MODE SUBROUTINE SPRINT(ICHAR,ISTAT) BYTE ENTER(2),LEAVE(2),ISTAT(2),ISTATS(2),ICHAR(2) INTEGER PLOT INTEGER FMODE,BMODE COMMON IGO,FMODE,BMODE,IFOR,IBAC,IFORD,IBACD DATA ENTER/2,254/,LEAVE/255,0/,ISTATS/"377,"377/,PLOT/0/ IF(IGO)GOTO 25 !SPECIAL CASE I=ISTAT(1).AND."7 !NEW FG COLOR IF(IFORD.LT.0)GOTO 3 !GO NO FG DELETE COLOR IF(I.EQ.IFORD)GOTO 5 !ALWAYS OVERRIDDEN 3 IF(.NOT.FMODE)GOTO 10 5 ISTAT(1)=(ISTAT(1).AND."370).OR.IFOR !CHANGE CURRENT COLOR 10 I=ISTAT(1).AND."70 IF(IBACD.LT.0)GOTO 13 ! GO NO BG DELETE COLOR IF(I.EQ.IBACD)GOTO 15 13 IF(.NOT.BMODE)GOTO 20 15 ISTAT(1)=(ISTAT(1).AND."307).OR.IBAC 20 CONTINUE IF((ISTAT(1).AND."200).EQ.0)GOTO 23 IF=ISTAT(1).AND.7 IB=(ISTAT(1).AND."70)/"10 IF(IF.NE.IB)GOTO 23 ISTAT(1)=ISTAT(1).AND."77 ICHAR(1)="40 23 IF(ISTAT(1).EQ.ISTATS(1))GOTO 40 25 IF(.NOT.PLOT)GOTO 30 CALL KBWRW(1,LEAVE) PLOT=.FALSE. 30 CALL SSTAT(ISTAT(1)) ISTATS(1)=ISTAT(1) C 40 IF((ISTAT(1).AND."200).EQ.0) GOTO 50 !GO FOR NORMAL MODE IF(PLOT)GOTO 70 CALL KBWRW(2,ENTER) !ENTER PLOT MODE PLOT=.TRUE. GOTO 70 C 50 IF(.NOT.PLOT)GOTO 70 CALL KBWRW(1,LEAVE) !LEAVE PLOT MODE PLOT=.FALSE. 70 IF(ICHAR(1).NE.0)CALL KBWR(1,ICHAR) IGO=.FALSE. RETURN C END C CLOSES FILE AND PRINTS A MESSAGE C SUBROUTINE CLMES(LUN,NAME,IS) CALL SSTAT(7) CALL CLRLIN IF(LUN)GOTO 10 CALL KBWR(17,'NO FILES TO CLOSE') GOTO 30 10 CALL CLOSE(LUN) CALL KBWR(14,'I HAVE CLOSED ') CALL KBWRW(IS,NAME) 30 CALL CRLF RETURN END C SUBROUTINE TO DISPLAY CHARACTERS TYPED C SUBROUTINE SHOW(I) BYTE SPEC(10) DATA SPEC/27,17,127,27,179,5*0/ CALL GPOS(IX,IY) CALL APOSV(75,2) CALL KBWRW(5,SPEC) CALL APOSV(79,2) CALL KBWR(1,I) CALL APOSV(IX,IY) RETURN END