PROGRAM GRAF COMMON /IDENT/TITX,TITY,TITLE,IE COMMON /DATA/DATA(2,600),NDATA,IFLAG,NDIMAX COMMON /PLTCOM/IP1P2(2,2),DMNMX(2,2),PMNMX(2,2),IPAPER(2,2) COMMON /PLTCOM/LEGWIN(2,2) COMMON /PLTCOM/NTICK(2),KTYPE COMMON /PLTCOM/NPEN,NLINE,ISYM,NCNVER,NSTRT,IPLTOK,LEGPOS,ITYPE COMMON /ADRS/IPLTTR C C.......KBYTE IS USED FOR PROGRAM INTERNAL CONTROL C IBIT(BYTE,N) RETURNS VALUE OF NTH BIT C SETBIT(BYTE,N) SETS NTH BIT (=1) C REBIT(BYTE,N) RESETS NTH BIT (=0) C BIT1==>OPEN FILE C BIT2==>SETUP FOR PAPER AND PLOT SIZE C BIT3==>COMPUTE RANGE C BIT4==>LABEL C BIT5==>LINE TYPE OTHER THAN DEFAULT C BIT6==>PLOT CHARACTER C BIT7==>TEXT WINDOW C BIT8==>NOT USED BYTE TITLEM(25,8),BUF(20),ESC(1) BYTE CMND(2),TITX(61),TITY(61),TITLE(201),IE(16) EQUIVALENCE (TITLE(1),TITLEM(1,1)) DIMENSION SIZE(4) 1 CONTINUE DATA TITX/61*0/,TITY/61*0/,TITLE/201*0/,IE/16*0/ DATA TITLEM/200*0/ DATA ESC/"33/ C KBYTE=0 ITYPE=59 KTYPE=0 TICLEN=.5 WIDTH=.3 DO 30 I=1,4 SIZE(I)=1.0 30 CONTINUE LTYPE=ITYPE C C.......ATTATCH PLOTTER IRET=(IHPATT(3)) IF (IRET.NE.1) GOTO 850 C.......SET XON ENCODE (4,21,BUF) ESC 21 FORMAT (A1,'.(*') CALL XMT (BUF) C.......SET HANDSHAKE ENCODE (18,22,BUF) ESC,ESC 22 FORMAT (A1,'.I40;;17:',A1,'.N;19:*') CALL XMT(BUF) C.......SET CONFIGURATION ENCODE (7,24,BUF) ESC 24 FORMAT (A1,'.@;2:*') CALL XMT (BUF) C 5 WRITE (5,10) 10 FORMAT (1X,'*',$) READ (5,27) (CMND(I),I=1,2) 27 FORMAT (2A1) C KP1P2=MATCH('P1',CMND) IPLOT=MATCH('PL',CMND) IEND =MATCH('EN',CMND) IAXES=MATCH('AX',CMND) IATTA=MATCH('AT',CMND) IFILE=MATCH('FI',CMND) ISTEP=MATCH('FS',CMND) ISTAR=MATCH('ST',CMND) IREST=MATCH('RE',CMND) ITITL=MATCH('TI',CMND) ILEGN=MATCH('LE',CMND) ITYPO=MATCH('TY',CMND) ICHAR=MATCH('CH',CMND) ILNTP=MATCH('LT',CMND) ISCAL=MATCH('SC',CMND) IDATA=MATCH('DA',CMND) IPLUT=MATCH('PU',CMND) ISTWD=MATCH('SW',CMND) ITXWN=MATCH('TW',CMND) IDIGT=MATCH('DI',CMND) INDEX=MATCH('IN',CMND) C IF (KP1P2.EQ.1) GOTO 100 IF (IATTA.EQ.1) GOTO 50 IF (IFILE.EQ.1) GOTO 200 IF (ISTEP.EQ.1) GOTO 250 IF (IPLOT.EQ.1) GOTO 300 IF (IAXES.EQ.1) GOTO 400 IF (IEND.EQ.1) GOTO 900 IF (ISTAR.EQ.1) GOTO 110 IF (IREST.EQ.1) GOTO 1000 IF (ITITL.EQ.1) GOTO 500 IF (ILEGN.EQ.1) GOTO 600 IF (ITYPO.EQ.1) GOTO 700 IF (ICHAR.EQ.1) GOTO 710 IF (ILNTP.EQ.1) GOTO 720 IF (ISCAL.EQ.1) GOTO 730 IF (IDATA.EQ.1) GOTO 800 IF (IPLUT.EQ.1) GOTO 970 IF (ISTWD.EQ.1) GOTO 980 IF (ITXWN.EQ.1) GOTO 990 IF (IDIGT.EQ.1) GOTO 995 IF (INDEX.EQ.1) GOTO 950 TYPE*,'UNINTELLIGIBLE COMMAND' GOTO 5 C C C.......SETUP PLOTTER FOR PAPER SIZE C 50 IRET=IHPATT(3) IF (IRET.NE.1) TYPE*,'ATTATCH ERROR' GOTO 5 100 KTYPE=KTYPE+1 110 CALL PSTRT KTYPE=0 CALL SETBIT(KBYTE,2) GOTO 5 C C.......OPEN FILE FOR PLOTTING C 200 CALL DISCO CALL SETBIT(KBYTE,1) GOTO 5 250 CALL RDISK !STEPSCAN FORMAT CALL SETBIT(KBYTE,1) GOTO 5 C C.......PLOT DATA C 300 IF (IBIT(KBYTE,1).EQ.1) GOTO 310 TYPE*,'MUST OPEN FILE; USE "FS" OR "FI" COMMAND' GOTO 5 310 IF (IBIT(KBYTE,2).NE.1) CALL PSTRT CALL SETBIT(KBYTE,2) IF (IBIT(KBYTE,3).EQ.1) GOTO 330 DO 325 J=1,NDATA CALL RANGE(DATA(1,J)) 325 CONTINUE 330 CALL P1P2 CALL SETBIT(KBYTE,3) IF (IBIT(KBYTE,5).NE.1) GOTO 350 ENCODE (5,337,BUF) NLINE 337 FORMAT ('LT',I1,';*') CALL XMT(BUF) IF (IBIT(KBYTE,6).NE.0) GOTO 350 ENCODE (5,339,BUF) ISYM 339 FORMAT ('SM',A1,';*') CALL XMT(BUF) 350 NCNVER=0 CALL POINT(DATA(1,1),0) DO 370 J=2,NDATA CALL POINT(DATA(1,J),-1) NCNVER=0 370 CONTINUE CALL REBIT (KBYTE,5) CALL REBIT (KBYTE,6) CALL XMT('PU;LT;SM;*') CALL XMT('PA16000,11400;*') GOTO 5 C C.......DRAW AXES C 400 NSTRT=0 IF (IBIT(KBYTE,1).EQ.1) GOTO 410 TYPE*,'MUST OPEN FILE; USE "FS" OR "FI" COMMAND' GOTO 5 410 IF (IBIT(KBYTE,2).NE.1) CALL PSTRT CALL SETBIT(KBYTE,2) IF (IBIT(KBYTE,3).EQ.1) GOTO 430 415 DO 425 J=1,NDATA CALL RANGE(DATA(1,J)) 425 CONTINUE 430 CALL P1P2 CALL SETBIT(KBYTE,3) CALL AXES(TICLEN,LTYPE) CALL LABEL(TITX,TITY,SIZE(2),LTYPE) CALL SETBIT(KBYTE,4) CALL XMT('PU;*') GOTO 5 C C.......INPUT TITLES FOR AXES C 500 WRITE (5,545) 545 FORMAT (1X,'X-AXIS') READ (5,550) (TITX(I),I=1,60) 550 FORMAT (60A1) WRITE (5,555) 555 FORMAT (1X,'Y-AXIS') READ (5,550) (TITY(I),I=1,60) DO 560 I=60,1,-1 IF (TITX(I).NE."40) GOTO 462 TITX(I)=0 560 CONTINUE 462 DO 565 I=60,1,-1 IF (TITY(I).NE."40) GOTO 569 TITY(I)=0 565 CONTINUE 569 GOTO 5 C C.......INPUT LEGEND C 600 WRITE (5,637) 637 FORMAT(1X,'LEGEND: 5 LINES X 23 CHAR') DO 649 ITXT=1,5 READ (5,653) (TITLEM(IRD,ITXT),IRD=1,25) IF (TITLEM(1,ITXT).EQ."0) GOTO 660 TITLEM(24,ITXT)="15 TITLEM(25,ITXT)="12 649 CONTINUE 653 FORMAT (25A1) 660 IF (IBIT(KBYTE,2).NE.1) CALL PSTRT CALL SETBIT(KBYTE,2) IF (IBIT(KBYTE,7).EQ.1) GOTO 670 CALL LEGSTT(WIDTH,SIZE(1)) CALL LEGEND(1,TITLE,SIZE(1)) GOTO 5 670 CALL LEGEND (1,TITLE,SIZE(1)) CALL REBIT (KBYTE,7) GOTO 5 700 CALL TYPE(ITYPE) C C.......PLOT POINT CHARACTER C 710 TYPE*,'CHARACTER' READ (5,712) ISYM 712 FORMAT (A1) CALL SETBIT(KBYTE,6) GOTO 5 C C.......LINETYPE C 720 TYPE*,'LINETYPE' READ (5,722) NLINE 722 FORMAT (I1) CALL SETBIT(KBYTE,5) GO TO 5 C C.......USER DEFINED SCALING C 730 NDATA=2 WRITE (5,731) READ (5,735) DATA(1,1) WRITE (5,732) READ (5,735) DATA(2,1) WRITE (5,733) READ (5,735) DATA(1,2) WRITE (5,734) READ (5,735) DATA(2,2) 731 FORMAT(1X,'MINIMUM X:=',$) 732 FORMAT(1X,'MINIMUM Y:=',$) 733 FORMAT(1X,'MAXIMUM X:=',$) 734 FORMAT(1X,'MAXIMUM Y:=',$) 735 FORMAT(E12.3) CALL SETBIT(KBYTE,1) GOTO 5 800 IF (IBIT(KBYTE,1).EQ.1) GOTO 810 TYPE*,'MUST OPEN FILE; USE "FS" OR "FI" COMMAND' GOTO 5 810 CALL DATAX GOTO 5 850 TYPE*,'ATTATCH ERROR' GO TO 5 C C 950 WRITE (5,952) 952 FORMAT (1X,'INDEX STORED AS X OR Y CO-ORDINATE',$) READ (5,983) REPLY IF (REPLY.EQ.'X') IN=1 IF (REPLY.EQ.'Y') IN=2 IF (REPLY.NE.'X'.AND.REPLY.NE.'Y') GOTO 950 DO 960 I=1, NDATA FI=I DATA(IN,I)=FI 960 CONTINUE GOTO 5 C C 970 CALL PLTUTL GOTO 5 C C.......OUTPUT STATUS WORD KBYTE C 980 DO 985 I=1,8 WRITE (5,982) I,IBIT(KBYTE,I) 982 FORMAT (1X,'KBYTE(',I1,')=',I1) 985 CONTINUE TYPE*,'CHANGE KBYTE? Y OR N' READ (5,983) ANS 983 FORMAT (A1) IF (ANS.EQ.'N') GOTO 5 TYPE*,'KBYTE=',KBYTE TYPE*,'NEW VALUE FOR KBYTE' READ (5,987) KBYTE 987 FORMAT (I3) GOTO 5 C C.......NON STANDARD LEGEND PLACEMENT C 990 CALL SETBIT(KBYTE,7) CALL TXTWIN(WIDTH,SIZE(1)) GO TO 5 995 CALL DIGIT CALL SETBIT(KBYTE,1) GOTO 5 900 STOP 1000 IRET=IHPDET(3) GOTO 1 END