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: LIMIT
C      SOURCE: 92840 - 18002
C      RELOC:  92840 - 16001
C 
C 
C 
CC*********************************************************** 
C 
      SUBROUTINE XLMIT(IND,IGCB,P1,P2,P3, 
     1P4), 92840-16001 REV. 1819 780515 
      INTEGER GICB,DIGTZ,GRIFX
      DIMENSION VAR(8),IBUFR(5),VAR1(4),CLPTS(4)
      EQUIVALENCE (VAR,XMM),(VAR(2),YMM),(VAR(3),V3),(VAR(4),V4)
      EQUIVALENCE (VAR(5),V5),(VAR(6),V6),(VAR(7),V7),(VAR(8),V8) 
      EQUIVALENCE (VAR1,G1X),(VAR1(2),G1Y),(VAR1(3),G2X),(VAR1(4),G2Y)
      EQUIVALENCE (IBUFR(2),IB2),(IBUFR(4),IB4) 
      EQUIVALENCE (IBUFR(3),IB3),(IBUFR(5),IB5) 
C 
C     THIS IS THE MODULE FOR PROCESSING THE LIMIT COMMAND 
C 
      DATA MMSIZ/25010B/
      DATA MMU/6/ 
      DATA GICB/16/ 
      DATA IBUFR/26404B/
      DATA DIGTZ/6003B/ 
      DATA IG12/8/
      DATA IHCLP/32001B/
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
      IFLG = 0
      GO TO(60,70),IND
C 
60    IF(P1.GE.P2.OR.P3.GE.P4)GO TO 800 
C     COMPUTE NEW HARD CLIP LIMITS H1,H2
C 
65    CALL GCBIM(MMU,1,XMM,0,1) 
      G1X = P1
      G1Y = P3
      G2X = P2
      G2Y = P4
C 
C     GET DISPLAY SURFACE SIZE
C 
      CALL OUTPT(1,MMSIZ,1) 
      CALL GCBIM(16,1,V3,8,1) 
C 
C 
C     SEE IF POINTS ARE OUTSIDE MECHANICAL LIMITS 
C 
      IFLG = -1 
      CALL CLPNG(G1X,CLPTS,V3,IFLG) 
      IF(IFLG.EQ.1)GO TO 820
C 
C 
C 
C     NOW MAKE SURE ENDPOINTS ARE INSIDE MECHANICAL LIMITS
C 
      IF(G1X.LT.V3)G1X = V3 
      IF(G1Y.LT.V4)G1Y = V4 
      IF(G2X.GT.V5)G2X = V5 
      IF(G2Y.GT.V6)G2Y = V6 
C 
C     CONVERT FROM MM TO MUS
C 
      G1X = G1X * XMM 
      G1Y = G1Y * YMM 
      G2X = G2X * XMM 
      G2Y = G2Y * YMM 
      CALL GCBIM(IG12,1,G1X,0,2)
      GO TO 66
C 
C     INTERACTIVE CALL  TO LIMIT
C 
70    CALL OUTPT(1,DIGTZ,1) 
      CALL GCBIM(GICB,1,IB2,2,1)
      CALL OUTPT(1,DIGTZ,1) 
      CALL GCBIM(GICB,1,IB4,2,1)
      IF(IB2.GE.IB4.OR.IB3.GE.IB5)GO TO 800 
      DO 75 K = 1,4 
75    VAR(K) = IBUFR(K+1)         
C 
C 
C     SET H1 AND H2 INTO DEVICE 
C 
130   CALL GCBIM(IG12,1,VAR,0,WRITE)
66    CALL GPON(IGCB,3) 
C 
C     SEE IF USER REALLY BLEW IT
C 
      IF(G1X.EQ.V3.AND.G1Y.EQ.V4.AND.V5.EQ.G2X.AND.V6.EQ.G2Y)RETURN 
C 
C     NOW CHECK ON HARD CLIPPING CAPABILITY OF DEVICE 
C     IF IT CANNOT CLIP REDEFINED HARD CLIP LIMITS SET BIT 3 FOR CLIPPING 
C     ALGORITHM.
C 
C 
      CALL OUTPT(1,IHCLP,1) 
      CALL GCBIM(16,1,IBUFR,1,1)
      IF(IBUFR.EQ.0)CALL GRSTS(2,77767B,10B)
      RETURN
800   CALL PLTER(10)
810   RETURN
820   CALL PLTER(34)
      RETURN
      END 
      END$
                                                                        