C C============================================================================ C C Graphics driver for HP 7470A plotter C C 10.22" x 7.5" (10300 x 7650) C C============================================================================ C JDEV = JDEV - 1 IF (JDEV .NE. 0) GOTO 4999 C IF ((IMODE .LT. -5) .OR. (IMODE .GT. 7)) RETURN GOTO (4000,4005,4010,90,90,4020,4030,4040,4030,4080,4090, 1 4200,4110), IMODE+6 C C mode -5: we exist C 4000 X = 1.0 GOTO 90 C C mode -4: initialize C 4005 CALL GTATT(LUNGRP) ! attach the device CALL GT('IN;SP1;PA;') ! initialize, select pen 1 CALL GT(ESCAPE) ! CALL GT('.H40;0;17:;') ! establish DEC style handshake CALL GT(ESCAPE) CALL GT('.N;19:;VS;') ! and make the fastest drawing speed CALL GTF ! flush the buffer LINPAT = -1 ! init sets the line pattern NIBS = 1 ! and the nibs GOTO 90 C C mode -3: return paper size (active area on 8.5" x 11" paper) C 4010 X = 10.22 Y = 7.5 GOTO 90 C C mode 0: clear the 'screen' C 4020 GOTO 90 C C modes 1,3: unwritten vector, point plot C 4030 CALL GT('PU') ! pen up GOTO 4050 C C mode 2: written vector C 4040 CALL GT('PD') ! pen down C C modes 1,2,3: ship out the coordinates C 4050 IX = MIN1(10300.,AMAX1(0.,1007.8*XT+0.5)) IY = MIN1( 7650.,AMAX1(0.,1020.0*YT+0.5)) ENCODE (11,4060,BUFFER) IX,IY 4060 FORMAT (I5,',',I5) C compress the spaces out J = 1 DO 4070 I=1,11 IF (BUFFER(I) .EQ. "40) GOTO 4070 BUFFER(J) = BUFFER(I) J = J + 1 4070 CONTINUE CALL GT(BUFFER,J-1) CALL GT(';') IF (IMODE .EQ. 3) CALL GT('PDPU;') ! plot a point IF (IMODE .EQ. 1) CALL GTF ! on each unwritten vector, we C ! must make sure the pen is up - C ! else we might get a splotch of ink. C ! ie. flush the buffer. Slow, C ! but it does assure a clean plot. GOTO 90 C C mode 4: complete the plot C 4080 CALL GT('PU;SP0;') ! put the pen away CALL GTF ! flush the buffer CALL GTATT(-LUNGRP) ! and deattach the plotter CALL CLOSE(LUNGRP) GOTO 90 C C mode 5: nibs (X; right or left pen) and line pattern (Y) C 4090 IX = X IF (IX .GT. 1) IX = 2 IF (IX .EQ. NIBS) GOTO 4102 ! nibs already set - just leave NIBS = IX IF (NIBS .EQ. 1) GOTO 4100 CALL GT('SP2;') ! nibs > 1, use right pen GOTO 4102 4100 CALL GT('SP1;') ! nibs = 1, use left pen C C now do the line pattern C 4102 IY = Y IF (IY .EQ. LINPAT) GOTO 90 ! line pattern set - just leave LINPAT = IY IY = 0 C kludge - if octal constant was in the expression, it doesn't work! IX = "100000 IF (LINPAT .EQ. IX) IY = 1 ! set up the HP line types IX = "176000 IF (LINPAT .EQ. IX) IY = 2 IX = "177700 IF (LINPAT .EQ. IX) IY = 3 IX = "177772 IF (LINPAT .EQ. IX) IY = 4 IX = "177714 IF (LINPAT .EQ. IX) IY = 5 IX = "176310 IF (LINPAT .EQ. IX) IY = 6 IF ((IY .GE. 1) .AND. (IY .LE. 6)) GOTO 4103 CALL GT(';LT-1;') ! solid line LINPAT = -1 GOTO 90 4103 ENCODE (5,4104,BUFFER) IY 4104 FORMAT(';LT',I1,';') CALL GT(BUFFER,5) GOTO 90 C C mode 7: select the pen velocity (X) C 4110 IF ((X .GT. 0.0) .AND. (X .LT. 38.1)) GOTO 4118 CALL GT(';VS;') ! full speed ahead GOTO 90 4118 ENCODE (8,4120,BUFFER) X 4120 FORMAT (';VS',F4.1,';') CALL GT(BUFFER,8) GOTO 90 C C mode 6: identify ourself C 4200 WRITE (LUN,4210) 4210 FORMAT('+ HP 7470 two pen plotter') GOTO 90 C C all done - get next device C 4999 CONTINUE