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: LDIR,PDIR
C      SOURCE: 92840 - 18029
C      RELOC:  92840 - 16001
C 
C 
C 
CC*********************************************************** 
C 
      SUBROUTINE LPDIR(IND,IGCB,P1,P2), 92840-16001 REV.2013 790904 
      DIMENSION IBUFR(5),VAR(4) 
      EQUIVALENCE (IBUFR(2),IB2,X),(IBUFR(4),Y) 
      EQUIVALENCE(VAR,A),(VAR(2),B),(VAR(3),C),(VAR(4),D) 
      DATA LDIR/7002B/
      DATA LDIRT/22/
      DATA IPDIR/19/
      XTEST =2.**14 
C 
C 4-24-79 NOTE FROM STEVE YOUNG: AS OF NOW, THE ONLY WAY THIS CALL
C IS USED IS TO PROCESS A CALL TO LDIR, WITH THE PARAMETER BEING AN 
C ANGLE. THEREFORE, IND = 3, P1 = AN ANGLE, AND P2 DOESN'T MATTER.
C 
C     THIS ROUTINE IS RESPONSIBLE FOR PROCESSING THE AGL COMMANDS 
C  LDIR (LABEL DIRECTION) AND PDIR (PLOT DIRECTION).
C  THE IND INDICATES WHETHER THE PARAMETER IS AN ANGLE(RADIANS) 
C  OR X AND Y COMPONENTS. 
C 
C       IND              P1       P2
C        1               THETA    -     PDIR
C        2               X COMP   Y COMP "
C        3               THETA    -        LDIR 
C       4                 X       Y        "
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     CONVERT P1 P2 TO CURRENT UNITS
C 
      IBUFR = IADCD(D)
      CALL GCBIM(IBUFR,1,VAR,0,1) 
      GO TO(5,50,5,50),IND
50     X = P1 * A 
      Y = P2 * C
5     GO TO(10,20,30,40),IND
C 
C     CHECK FOR OVERFLOW
C 
10    XSC = P1/3.1414 
      XSIN = .5 * ABS(XSC + .5) 
      XCOS = .5 * ABS(XSC)
      IF(XSIN.GT.XTEST.OR.XCOS.GT.XTEST)GO TO 800 
      IF(P1.GT.6.28)CALL PLTER(30)
      X = COS(P1) 
      Y = SIN(P1) 
      GO TO 25
C 
C     USE GOOD OLD PYTHAGOREAN THEOREM TO COMPUTE SIN AND COSINE
C 
20    DENOM = SQRT(X**2 + Y**2) 
      IF(DENOM.EQ.0.)GO TO 25 
      X = X/DENOM 
      Y = Y/DENOM 
25    CALL GCBIM(IPDIR,1,X,0,2) 
      RETURN
C 
C     PROCESSING FOR LDIR 
C 
C     FIRST SEE IF X OR Y = 0 AND IF SO MUST DETERMINE
C  ANGLE BY SUREPTITIOUS MEANS. 
C 
C                   + Y=+ 
C                   + X=0 
C                   + 
C                   + 
C                   + 
C                   + 
C  X= -             + 
C  Y = 0            + 
C   +++++++++++++++++++++++++++++++++++++++ Y=0,X=+ 
C                   + 
C                   + 
C                   + 
C                   + 
C                   + 
C                   + 
C                   + 
C                   + Y = - 
C                   + X = 0 
C 
C 
40    IF(X.EQ.0.0.OR.Y.EQ.0.)GO TO 45 
      X = ATAN(Y/X) 
      GO TO 35
45    IF(X)60,75,70 
60    X = 3.14
      GO TO 35
70    X = 0.
      GO TO 35
75    X= 1.57 
      IF(Y.LT.0.)X = 4.71 
      GO TO 35
C 
C     AT THIS POINT THEANGLE HAS BEEN DETERMINED
C 
30    X = P1
35    IF(ABS(X).LE.6.28)GO TO 36
      CALL PLTER(30)
      X = AMOD(X,6.28)
36    IF(X.LT.0.)X= 6.28 - ABS(X) 
      IF(X.EQ.6.28)X = 0.0
C ***************************************************************** 
C OUTPUT A MESSAGE TO THE DEVICE TO SET THE PROPER LDIR, AND STORE
C THE HARDWARE AND THE SOFTWARE LDIR INTO THE GCB.
C 
      IBUFR = LDIR
      CALL OUTPT(1,IBUFR,2) 
      CALL GCBIM(LDIRT,1,X,0,2) 
      CALL GCBIM(35,1,X,0,2)
      RETURN
C 
800   CALL PLTER(36)
      RETURN
C 
      END 
      END$
                                                                                                                                                                                        