FTN,L C C C CC************************************************************ C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * CC************************************************************ C C C C NAME: DRAW INCREMENTAL C SOURCE: 92840 - 18040 C RELOC: 92840 - 16001 C C C CC*********************************************************** C SUBROUTINE XDRWI(IN,IGCB,X,Y), 92840-16001 REV.1819 780515 INTEGER DRPPN,READ,WRITE,PLTIN,GRIFX INTEGER PLTAB DIMENSION ICODE(4),VAR(14),IBUFR(8),CLPTS(4) EQUIVALENCE (A,VAR),(B,VAR(2)),(C,VAR(3)),(D,VAR(4)) EQUIVALENCE (V5,VAR(5)),(IBUFR,LFTPN),(IBUFR(2),PLTAB) EQUIVALENCE (IBUFR(5),DRPPN),(IBUFR(6),PLTIN),(IBUFR(7),IB7) EQUIVALENCE (IBUFR(8),IB8) EQUIVALENCE (ICODE(2),ICD2),(ICODE(3),ICD3),(ICODE(4),ICD4) EQUIVALENCE (IBUFR(3),IB3),(IBUFR(4),IB4) EQUIVALENCE (VAR(9),THETX),(VAR(10),THETY) EQUIVALENCE (VAR(11),XOLD ),(VAR(12),YOLD ) EQUIVALENCE (VAR(13),XNEW), (VAR(14),YNEW) EQUIVALENCE (CLPTS(3),CLP3),(CLPTS(4),CLP4) EQUIVALENCE (CLPTS,CLP1),(CLPTS(2),CLP2) C C C C THIS IS THE CORE MODULE FOR INCREMENTAL DRAW C DATA READ/1/ DATA WRITE/2/ DATA LFTPN/20400B/ DATA PLTAB/21402B/ DATA DRPPN/21000B/ DATA PLTIN/21402B/ C DATA ICD3,ICD4/19,18/ IFLG = 0 ISTAT = 0 CCCC C THIS CALL ESTABLISHES AN ADDRESS LINK BETWEEN THE GRAPGHICS C PACKAGE AND THE CURRENT GCB AND ALSO CHECKS FOR A SUSPENDED GCB. C ISUSP= 0 CALL GCBIM(99,1,IGCB,ISUSP) IF(ISUSP.NE.0)RETURN C C INITIALIZE CODES FOR GCBIM C C WHERE 11 = TRANSFORMATION CONSTANTS C 9 = MAPPING ENDPOINTS V1,V2 C 18 = PREVIOUS X,Y C 19 = COS(THETA),SIN(THETA) C ICODE = IADCD(D) ICD2 = IS1V1(D) C C LOOK AT STATUS WORD TO DETERMINE UNITS (UDU OR GDU), AND C EXAMINE SAME WORD TO ASCERTAIN WHETHER OR NOT CLIPPING IS ON. C CALL GCBIM(ICODE,4,VAR, 0,READ) C C C C COMPUTE NEW POINTS BY FIRST DOING TRANSLATION AND C SCALING, AND SECOND PERFORMING THE ROTATION. C THE ROTATION PROCESS INVOLVES ROTATING A VECTOR ABOUT C THE SAME ORIGIN AS THE ORIGINAL AXES, (ANGLES ARE COUNTER- C CLOCKWISE). THE CONSTANTS COS(THETA) AND SIN(THETA) RESIDE C IN THE GCB AND ARE DETERMINED FROM PDIR(THETA). C THE OTHER THING THAT HAS TO BE DONE HERE IS TO COMPUTE C THE NEW ENDPOINTS AND CLIP(IF SOFT CLIPPING IS ON). C C CALL GRSTS(1,10000B,ISUSP) XNEW = 0. YNEW = 0. IF(X.EQ.0.)GO TO 72 XNEW =(A* X) 72 IF(Y.EQ.0. )GO TO 75 YNEW = C * Y 75 XN = (XNEW * THETX) - (YNEW * THETY) YN = (XNEW * THETY) + (YNEW * THETX) C IF(ISUSP.NE.0)GO TO 77 XN = XN + B YN = YN + D 77 XNEW = XN + XOLD YNEW = YN + YOLD C C CHECK TO SEE IF UNITS = GDUS C C C NOW DO DE CLIPPING. C 20 CALL CLPNG(XOLD, CLPTS,V5,IFLG) C C DEBUGGING C C WRITE(6,5500)XOLD,YOLD,XNEW,YNEW,CLP1,CLP2,CLP3,CLP4 C500 FORMAT("DRAWI ",2X,8(X,F5.2)) C WRITE(6,7500)X,Y C500 FORMAT(2X,"POINTS X,Y ",2(X,F7.2)) C C WRITE(6,8500)IFLG C500 FORMAT(2X,"IFLG =",K6) C 22 IF(IFLG)600,25,600 C C NOW DROP-PEN AND MAKE A MARK C 25 IB3 = GRIFX(CLP1) IB4 = GRIFX(CLP2) IB7 = GRIFX(CLP3) IB8 = GRIFX(CLP4) IF(CLP1.EQ.XOLD.AND.CLP2.EQ.YOLD)GO TO 35 CALL OUTPT(4,IBUFR,2) GO TO 600 35 CALL OUTPT(2,DRPPN,2) C C SET STATUS WORD TO INDICATE PEN DOWN AND SET NEW POINTS C INTO GCB. 600 CALL GRSTS(2,67577B,10200B) CALL GCBIM(18,1,XNEW ,4,WRITE) IF(IFLG.EQ.1)CALL PLTER(20,11) C C CHECK FOR PREVIOUS CALL TO PORG (BIT 8=1) C IF NOT NEW POINTS BECOME ORIGIN FOR A RELATIVE CALL. C CALL GRSTS(1,400B,ISTAT) IF(ISTAT.NE.0)RETURN C C PORG(X,Y) C XNEW = X YNEW = Y CALL GCBIM(17, 1,XNEW,0,2) RETURN END END$