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: MOVE RELOCATABLE C SOURCE: 92840 - 18036 C RELOC: 92840 - 16001 C C C CC*********************************************************** C SUBROUTINE XMOVR(IN,IGCB,X,Y), 92840-16001 REV.1819 780515 INTEGER LFTPN,READ,WRITE,PLTRL,PLTAB,GRIFX DIMENSION ICODE(5),VAR(16),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(3),IB3) EQUIVALENCE (IBUFR(4),IB4),(IBUFR(5),LIFT), (IBUFR(6),PLTRL) EQUIVALENCE (IBUFR(7),IB7),(IBUFR(8),IB8) EQUIVALENCE (ICODE(2),ICD2),(ICODE(3),ICD3),(ICODE(4),ICD4) EQUIVALENCE (ICODE(5),ICD5) EQUIVALENCE (VAR(15),XNEW),(VAR(16),YNEW) EQUIVALENCE (VAR( 9),THETX),(VAR(10),THETY) EQUIVALENCE (VAR(11),PORGX),(VAR(12),PORGY) EQUIVALENCE(CLPTS,CLP1),(CLPTS(2),CLP2) EQUIVALENCE (CLPTS(3),CLP3),(CLPTS(4),CLP4) EQUIVALENCE(VAR(13),XOLD),(VAR(14),YOLD) C C C C THIS IS THE CORE MODULE FOR RELATIVE MOVE C DATA READ/1/ DATA WRITE/2/ DATA LFTPN/20400B/ DATA LIFT/20400B/ DATA PLTAB/21402B/ DATA PLTRL/21402B/ C DATA ICD3,ICD4/19,17/ IFLG = 0 IST1 = 0 XNEW = 0. YNEW = 0. ISTAT = 0 ICD5 = 18 C 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 C INITIALIZE CODES FOR GCBIM C C WHERE 11 = TRANSFORMATION CONSTANTS C 9 = MAPPING ENDPOINTS V1,V2 C 17 = PLOT ORIGINS (PORGX AND PORGY) 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,5,VAR, 0,READ) 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 C RE-ESTABLISH ORIGIN C PORGX = PORGX * A + B PORGY = PORGY * C + D IF(X.NE.0.)XNEW = A * X IF(Y.NE.0.)YNEW = C * Y XN = (XNEW * THETX) - (YNEW * THETY) YN = (XNEW * THETY) + (YNEW * THETX) XNEW = XN + PORGX YNEW = YN + PORGY C C C C WRITE(6,2500)X,Y C500 FORMAT(2X,2(X,F5.2)) C NOW DO DE CLIPPING. C 20 CALL CLPNG(XOLD ,CLPTS,V5,IFLG) C WRITE(6,5500)XOLD,YOLD,XNEW,YNEW,CLP1,CLP2,CLP3,CLP4 C500 FORMAT("DRAW",2X,8(X,F5.2)) C WRITE(6,7500)PORGX,PORGY C500 FORMAT(2X,"PORGS",2X,2(X,F7.2)) 22 IF(IFLG)600,25,600 C C NOW LIFT-PEN AND MOVE TO X,Y C 25 IB7 = GRIFX(CLP3) IB8 = GRIFX(CLP4) CALL OUTPT(2,LIFT,2) C C SET STATUS WORD TO INDICATE PEN UP AND SET NEW POINTS C INTO GCB. C 600 CALL GRSTS(2,67577B,10000B) CALL GCBIM(18,1,XNEW ,4,WRITE) IF(IFLG.EQ.1)CALL PLTER(20) RETURN END END$