FTN4,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:  LOCATE,VIEWPORT,CLIP
C      SOURCE: 92840 - 18015
C      RELOC:  92840 - 16001
C 
C      MODIFIED BY: DJS 1/16/80  >> STOP GPS 15 REPORT FOR CLIP 
C 
CC*********************************************************** 
C 
      SUBROUTINE SCLNG(IND, IGCB,P1,P2,P3,
     1P4), 92840-16001 REV.2013 800116
      DIMENSION VAR(8),ICODE(3),VAR1(4),IBUFR(5)
      DIMENSION IER1(2),IER2(2),IER3(2) 
      INTEGER GICB
      INTEGER STATS,READ,WRITE,DIGTZ
      EQUIVALENCE (VAR,V1X,XMM),(VAR(2),YMM,V1Y)
      EQUIVALENCE (VAR(3),V2X),(VAR(4),V2Y) 
      EQUIVALENCE (VAR(5),S1X),(VAR(6),S1Y) 
      EQUIVALENCE (VAR(7),S2X),(VAR(8),S2Y) 
      EQUIVALENCE (VAR1,A,AP)      ,(VAR1(2),B,BP,G1X)
      EQUIVALENCE (VAR1(3),C,CP,G1Y),(VAR1(4),D,DP,G2X) 
      EQUIVALENCE (IBUFR(2),IB2),(IBUFR(4),IB4) 
      EQUIVALENCE(IBUFR(3),IB3) 
      EQUIVALENCE (IBUFR(5),IB5)
C 
C     THIS IS THE AGL MODULE FOR THE SCALING COMMANDS:
C  LOCATE AND CLIP. 
C 
C     THE VARIABLES IN THE EQUIVALENCE STATEMENTS HAVE THE FOLLOWING
C  MEANINGS:
C     G1 - G2 (X,Y) = HARD CLIP LIMITS
C     V1 - V2   "   = MAPPING ENDPOINTS 
C     S1 - S2   "   = SOFT CLIP LIMITS
C     A - D    = TRANSFORMATION CONSTANTS 
C 
      DATA STATS/5/ 
      DATA READ/1/
      DATA WRITE/2/ 
      DATA IV12/9/
      DATA IG12/8/
      DATA IS12/10/ 
      DATA IADP/11/ 
      DATA IAD/12/
      DATA DIGTZ/6003B/ 
      DATA GICB/16/ 
      DATA IER1/11,17/
      DATA IER2/12,19/
      DATA IER3/14,18/
      IBUFR = 26404B
      IFLG = 0
C 
      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     CALL GRSTS(1,2,ISTAT)                                             DS2013
C     IF(ISTAT.NE.0)CALL PLTER(15)                                      DS2013
      INDX = IND
C 
C     SELECT COMMAND PROCESSOR
C 
      IF(IND.GT.2)GO TO 70
C 
C     LOCATE - FIRST CHECK TO SEE IF P1=P2 OR P3=P4 
C 
10    IF(P1.EQ.P2.OR.P3.EQ.P4)GO TO 800 
C 
C     SEE IF S1 OR V1 IS LOWER LEFT AND S2 OR V2 IS UPPER RIGHT 
C 
C 
C 
C 
C     GET AP TO DP OR G1-G2 AND CHRH,CHRW 
C 
      GO TO(20,50),IND
20    CALL GCBIM(IADP,1,VAR1,0,READ)
      CALL GRSTS(1,2,ISTAT)                                             DS2013
      IF (ISTAT .NE. 0) CALL PLTER(15)                                  DS2013
C     GO TO (100,50),IND                                                DS2013
C 
C     COMPUTE V1,V2 AND S1,S2 
C 
100   V1X = AP * P1 + BP
      V1Y = CP * P3 + DP
      V2X = AP * P2 + BP
      V2Y = CP *P4 + DP 
110   S1X = AMIN1(V1X,V2X)
      S2X = AMAX1(V1X,V2X)
      S1Y = AMIN1(V1Y,V2Y)
      S2Y = AMAX1(V1Y,V2Y)
C 
      IF(V1X.GT.V2X.OR.V1Y.GT.V2Y)CALL PLTER(IER1(INDX))
C 
C     CLIP MAPPING ENDPOINTS TO THE HARD CLIP LIMITS H1,H2
C 
      ICODE = 8 
115   CALL GCBIM(ICODE,1,A,0,READ)
      IFLG = -1 
      CALL CLPNG(S1X,V1X,A,IFLG)
      IF(IFLG.EQ.1)GO TO 810
      IF(S1X.LT.A.OR.S1X.GT.C)S1X = A 
      IF(S1Y.LT.B.OR.S1Y.GT.D)S1Y = B 
      IF(S2X.GT.C.OR.S2X.LT.A)S2X = C 
      IF(S2Y.GT.D.OR.S2Y.LT.B)S2Y = D 
      CALL GCBIM(IS12,1,S1X,0,WRITE)
C 
C     SEE IF THIS IS A CLIP OR VIEWP CALL 
C 
      GO TO(117,55,117,55),IND
117   CALL GCBIM(IV12,1,S1X,0,WRITE)
      CALL GRSTS(2,67773B,4)
      V1X = 0.
      V1Y = 0.
      CALL GCBIM(18,1,V1X,0,2)
      RETURN
C 
C     CLIP
C 
50    ISTAT = IADCD(D)
      CALL GCBIM(ISTAT,1,VAR1,0,READ) 
      GO TO 100 
C 
55    CALL GRSTS(2,77773B,4)
      RETURN
C 
C 
C     INTERACTIVE CALLS TO        CLIP OR LOCATE. 
C 
70    INDX = IND - 2
      CALL OUTPT(1,DIGTZ,1) 
      CALL GCBIM(GICB,1,IB2,2,1)
      CALL OUTPT(1,DIGTZ,1) 
      CALL GCBIM(GICB,1,IB4,2,1)
      V1X = IB2 
      V2X = IB4 
      V1Y = IB3 
      V2Y = IB5 
      IF(IB2.EQ.IB4.OR.IB3.EQ.IB5)GO TO 800 
      GO TO 110 
C 
C     ERRORS
C 
800   CALL PLTER(IER2(INDX))
      RETURN
810   CALL PLTER(IER3(INDX))
      RETURN
C 
      END 
      END$
          