BYTE BUF(2,80,48),BUFS(7680),ICHAR(2),ZERO(2),TBUF(80) INTEGER FMODE,BMODE,BUFI(1) COMMON IGO,FMODE,BMODE,IFOR,IBAC,IFORD,IBACD EQUIVALENCE (BUF(1,1,1),BUFS(1)) EQUIVALENCE (BUFS(1),BUFI(1)) CALL KBINIT CALL WDFUIC("300,"324) 10 IF(IOPENR('DEMO',4,2,'.PIC').LT.0)GOTO 200 !GO IF OPEN ERROR 20 IR=IREADW(BUFI,7680,2) IF(IR.EQ.-1)GOTO 50 !END OF FILE IF(IR.LT.0)GOTO 100 !READ ERROR 2000 CALL HOME C CALL INIT !CLEAR AND INIT ISC 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 CALL APOSV(81,48) 30 CALL KBRDW(1,I) I=I.AND."137 IF(I.EQ."110)GOTO 75 !HELP IF(I.EQ.27)GOTO 2000 !REDISPLAY SCREEN IF(I.EQ.3)GOTO 100 IF(I.EQ.1)GOTO 100 GOTO 20 C READ ERROR OR END OF FILE 50 I=ICLOSE(2) GOTO 10 75 CALL INIT CALL PRINTW('+TYPE CNTL C TO EXIT') CALL PRINTW(' TYPE ESC TO REDISPLAY SCREEN') CALL PRINTW(' TYPE H FOR THIS MESSAGE') CALL PRINTW(' TYPE ANYTHING ELSE TO DISPLAY NEXT PAGE') GOTO 30 100 I=ICLOSE(2) 200 CALL KBWR(1,27) CALL KBWR(1,11) CALL SSTAT("47) CALL APOSV(1,47) CALL EXIT 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