FTN,L,C 
C 
C 
C*************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975.  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.  *
C*************************************************************
C 
C     LISTING:   A92409-80003-1 
C     SOURCE:    92409-80003
C     REV. 1622  C. HAMILTON (3-13-75)
C 
C 
C  AXIS 
C        VERSION FOR R/T SYSTEM - COMPILE WITH R/T FORTRAN
      SUBROUTINE AXIS(X,Y,IBCD,SIZE,THETA,XMIN,DX)
      DIMENSION IBCD(2) 
      DIMENSION IXX(3)
      IBCD1=IAND(IBCD(1),377B)
      IXX(1) =3 
      IXX(2) = 25061B 
      IXX(3) = 30000B 
      KN=SIZE 
      A=1.0 
C     SET FOR ANNOTATION ON CLOCKWISE OR COUNTERCLOCKWISE SIDE OF AXIS
      IF (KN) 6,7,7 
    6 A=-A
      KN=-KN
    7 EX=0.0
C     ADJUST DX INTO RANGE OF 1000.0 TO 0.001 
      ADX= ABS  (DX)
      IF (ADX) 1,5,1
    1 IF (ADX-1000.0) 4,2,2 
    2 ADX=ADX/10.0
      EX=EX+1.0 
      GO TO 1 
    3 ADX=ADX*10.0
      EX=EX-1.0 
    4 IF (ADX-0.001) 3,5,5
    5 XVAL=XMIN*10.0**(-EX) 
      ADX= DX  *10.0**(-EX) 
      STH=THETA*0.0174533 
      CTH=COS(STH)
      STH=SIN(STH)
C     CALCULATE STARTING LOCATION FOR TIC MARK ANNOTATION 
      DXB=-0.15 
      DYB=0.2*A-0.05
      XN=X+DXB*CTH-DYB*STH
      YN=Y+DYB*CTH+DXB*STH
      NTIC=KN+1.0 
      NT=NTIC/2 
C  PLOT TIC MARK ANNOTATION INCREMENT 
      DO  20  I=1,NTIC
      ADJ=0.0 
C  DECREMENT ANNOTATION START FOR CHARS. LEFT OF DECIMAL. 
      IF(XVAL) 100,110
  100 ADJ=-0.05 
C  ROUND THE ABSOLUTE VALUE OF THE NUMBER.
  110 RNDN=ABS(XVAL)+.005 
C  DETERMINE NUMBER OF DIGITS TO LEFT OF DECIMAL POINT. 
      LEFT=ALOG(RNDN)*0.43429448+1.0
C  ADJUST FOR TWO OR MORE DIGITS TO LEFT OF DECIMAL POINT.
      IF(LEFT.LE.1) GO TO 120 
C  CALCULATE STARTING POSITION ADJUSTMENT.
      ADJ=ADJ+(LEFT*(-0.05))
  120 XNPLT=XN+ADJ*CTH
      YNPLT=YN+ADJ*STH
      CALL NUMB(XNPLT,YNPLT,.10,XVAL,THETA,3) 
      XVAL=XVAL+ADX 
      XN=XN+CTH 
      YN=YN+STH 
      IF (NT) 20,11,20
   11 Z=IBCD1 
      IF (EX)  12,13,12 
   12 Z=Z+7.0 
C     CALCULATE STARTING LOCATION FOR AXIS TITLE
   13 DXB=-.07*Z+KN*0.5 
      DYB=0.4*A-0.07
      XT=X+DXB*CTH-DYB*STH
      YT=Y+DYB*CTH+DXB*STH
C     PLOT AXIS TITLE 
      CALL SYMB(XT,YT,0.14,IBCD(1),THETA,1) 
C     TEST FOR EXPONENT AND CALCULATE STARTING LOCATION FOR BASE
      IF (EX)  14,20,14 
   14 Z=IBCD1+2 
      XT=XT+Z*CTH*0.14
      YT=YT+Z*STH*0.14
C     PLOT BASE, CALCULATE STARTING LOCATION FOR EXPONENT AND PLOT IT 
      CALL SYMB(XT,YT,0.14,IXX,THETA,1) 
      XT=XT+(3.0*CTH-0.8*STH)*0.14
      YT=YT+(3.0*STH+0.8*CTH)*0.14
      CALL NUMB(XT,YT,0.10,EX,THETA,-1) 
   20 NT=NT-1 
C     MOVE TO END OF AXIS AND CALCULATE SIZE OF TIC MARKS 
      XE=X+KN*CTH 
      YE=Y+KN*STH 
      CALL PLOT(XE,YE,3)
      DXB=-0.07*A*STH 
      DYB=+0.07*A*CTH 
      A=NTIC-1
C     CALCULATE LOCATION OF LAST TIC MARK 
      XN=X+A*CTH
      YN=Y+A*STH
      DO  30  I=1,NTIC
C     PLOT TIC MARKS STARTING WITH THE LAST ONE 
      CALL PLOT(XN,YN,2)
      CALL PLOT(XN+DXB,YN+DYB,2)
      CALL PLOT(XN,YN,2)
      XN=XN-CTH 
      YN=YN-STH 
C     USE THE FOLLOWING IF -0.0 CAN CAUSE PROBLEMS
C     IF (NTIC-1-I) 30,28,20
C  28 XN=X
C     YN=Y
   30 CONTINUE
      RETURN
      END 
C  LINES
C        VERSION FOR R/T SYSTEM - COMPILE WITH R/T FORTRAN
      SUBROUTINE LINES(X,Y,N,K,J,C) 
      DIMENSION X(1),Y(1) 
      LMIN = N*K+1
      LDX  = LMIN+K 
      NL   = LMIN-K 
      XMIN = X(LMIN)
      DX   = X(LDX) 
      YMIN = Y(LMIN)
      DY   = Y(LDX) 
C     FIND END OF LINE CLOSEST TO CURRENT PEN POSITION
      CALL WHERE (XN,YN)
      DF = ABS ((X(1)-XMIN)/DX-XN)
      DF2 = ABS ((Y(1)-YMIN)/DY-YN) 
      DL = ABS ((X(NL)-XMIN)/DX-XN) 
      DL2 = ABS ((Y(NL)-YMIN)/DY-YN)
      IF ( DF - DF2 ) 100,101 
C 
  100 DF = DF2
  101 IF (DL - DL2) 102,103 
  102 DL = DL2
  103 IC = 3
      IS = -1 
      NT =IABS(J) 
      IF (J) 2,1,2
    1 NT = 1
    2 IF (DF-DL) 4,4,3
    3 NF = NL 
      NA = ((N-1)/NT)*NT+NT-(N-1) 
      KK = -K 
      GO TO 5 
    4 NF = 1
      NA = NT 
      KK = K
    5 IF (J) 6,7,8
    6 ICA = 3 
      ISA = -1
      LSW = 1 
      GO TO 10
    7 NA = LDX
    8 ICA = 2 
      ISA = -2
      LSW = 0 
   10 DO 30 I = 1,N 
      XN = (X(NF)-XMIN)/DX
      YN = (Y(NF)-YMIN)/DY
C     TEST FOR -0 VALUES OF X AND Y 
C     IF (XN) 14,12,14
C  12 XN = 0.0
C  14 IF (YN) 18,16,18
C  16 YN = 0.0
   18 IF (NA-NT) 20,21,22 
   20 IF (LSW) 23,22,23 
   21 CALL SYMB(XN,YN,0.07,C,0.0,IS)
      NA = 1
      GO TO 25
   22 CALL PLOT (XN,YN,IC)
   23 NA = NA + 1 
   25 NF = NF+KK
      IS = ISA
   30 IC = ICA
      RETURN
      END 
C  SCALE
C        VERSION FOR R/T SYSTEM - COMPILE WITH R/T FORTRAN
      SUBROUTINE  SCALE   (Y,YL,NP,L) 
      DIMENSION  Y(1),SAVE(7) 
      SAVE(1)=1.0 
      SAVE(2)=2.0 
      SAVE(3)=4.0 
      SAVE(4)=5.0 
      SAVE(5)=8.0 
      SAVE(6)=10.0
      SAVE(7)=20. 
      FAD=0.001 
      K=IABS(L) 
C     GET MAX AND MIN OF ARAY 
      N=NP*K
      Y0=Y(1) 
      YN=Y0 
      DO  25  I=1,N,K 
      YS=Y(I) 
      IF  (Y0-YS)  22,22,21 
   21 Y0=YS 
      GO TO 25
   22 IF  (YS-YN)  25,25,24 
   24 YN=YS 
   25 CONTINUE
C     YS IS EXPERIMENTAL STARTING VALUE, D IS EXPERIMENTAL DELTA
      YS=Y0 
      IF  (Y0)  34,35,35
   34 FAD=FAD-1.0 
   35 D=(YN-YS)/YL
      IF  (D )  70,70,36
C     P IS POWER OF DELTA 
   36 I=ALOG(D)*0.43429448
      P=10.0**I 
      D=D/P-0.001 
      DO  45  I=1,6 
      IS=I
      IF  (SAVE(I)-D)  45,50,50 
   45 CONTINUE
   50 D=SAVE(IS)*P
C     GET NICE STARTING VALUE 
      YS=IFIX(Y0/D+FAD) 
      YS=D*YS 
      T=YS+(YL+0.001)*D 
      IF  (T-YN)  55,57,57
   55 IS=IS+1 
      GO TO 50
C     CENTER DATA 
   57 YK=IFIX((YL+(YS-YN)/D)/2.0) 
      YS=YS-YK*D
      IF  (Y0*YS)  58,58,59 
   58 YS=0.0
   59 IF  (L)  61,61,65 
C     BACKWARD
   61 YS=YS+YL*D
      D=-D
   65 N=N+1 
      Y(N)=YS 
      N=N+K 
      Y(N)=D
      RETURN
C     IF D IS ZERO
   70 D=1.0 
      YS=YS-0.5 
      GO TO 65
      END 
C  NUMBER 
C        VERSION FOR R/T SYSTEM - COMPILE WITH R/T FORTRAN
      SUBROUTINE NUMB (XP, YP, HGT, FPN, THETA, ND) 
C     THIS VERSION OF NUMBER REQUIRES THE SYMBOL VERSION WITH 999.0 
C     X, Y FEATURE, AND NC = 0 FEATURE
      DIMENSION IC (2)
      DIMENSION K1(2) 
      DIMENSION ID (2)
      DIMENSION IE(2) 
      IC(1)=1 
      IC(2)=26400B
      ID(1)=1 
      ID(2)=30000B
      IE(1)=1 
      IE(2)=27000B
      K1(1)=1 
      X = XP
      Y = YP
      H = HGT 
      FPV = FPN 
      TH = THETA
      N = ND
      MAXN=7
      SAMEV = 9999.0
C     SET N VALUE TO + OR - MAXN, IF OUT OF RANGE 
      IF (N - MAXN) 11, 11, 10
   10 N = MAXN
   11 IF (N + MAXN) 12, 20, 20
   12 N = -MAXN 
C     INSERT MINUS SIGN IN FRONT OF NUMBER, IF NEGATIVE 
   20 IF (FPV) 21, 30, 30 
   21 CALL SYMB (X,Y,H,IC(1),TH,1)
C     WHEN SYMBOL IS CALLED WITH SAMEV FOR X AND Y, THE CHARACTER STRING
C     CONTINUES FROM THE LAST CHARACTER PLOTTED BY SYMBOL 
      X = SAMEV 
      Y = SAMEV 
C     MN LOCATES EXPONENT VALUE FOR PROPER ROUNDING OF NUMBER 
   30 MN = -N 
C     IF SCALING IS DONE, MN MUST BE ADJUSTED 
      IF (N) 31, 32, 32 
   31 MN = MN - 1 
C     ROUND INPUT NUMBER AND SET TO POSITIVE VALUE
   32 FPV = ABS(FPV) + (0.5 * 10. ** MN)
C     DETERMINE CHARACTERISTIC OF FPV AND INCREMENT IT BY 1 
      I = ALOG (FPV) * 0.43429448 + 1.0 
      ILP = I 
C     IF SCALING IS DONE, ILP MUST BE REDUCED ACCORDING TO SCALING
      IF (N + 1)  40, 41, 41
   40 ILP = ILP + N + 1 
C     IF NUMBER IS LESS THAN 1 PLOT A ZERO BEFORE DECIMAL (IF ANY)
   41 IF (ILP) 50, 50, 51 
   50 CALL SYMB (X,Y,H,ID(1),TH,1)
      X = SAMEV 
      Y = SAMEV 
      GO TO 61
C     ILP IS NUMBER OF DIGITS TO LEFT OF DECIMAL POINT
   51 DO 60 J = 1, ILP
C     LOCATE SINGLE LEFTMOST DIGIT OF NUMBER
      K = FPV * 10. ** (J - I)
      K1(2)=(K+48)*256
      CALL SYMB(X,Y,H,K1(1),TH,0) 
C     SUBTRACT VALUE OF PREVIOUS DIGIT FROM NUMBER TO LOCATE NEXT DIGIT 
      FPV = FPV - (FLOAT(K) * 10. ** (I - J)) 
      X = SAMEV 
   60 Y = SAMEV 
C     NO DECIMAL POINT IS PLOTTED IF N IS NEGATIVE, EXIT FROM ROUTINE 
   61 IF (N) 99, 70, 70 
   70 CALL SYMB (X,Y,H,IE(1),TH,1)
C     PLOT DIGITS TO RIGHT OF DECIMAL IF N GT 0, OTHERWISE EXIT 
      IF (N)  99, 99, 80
   80 DO 90 J = 1, N
C     SCALE FRACTIONAL REMAINDER TO GIVE INTEGER DIGIT
      K = FPV * 10. 
      K1(2)=(K+48)*256
      CALL SYMB(X,Y,H,K1(1),TH,0) 
C     SUBTRACT INTEGER VALUE TO LOCATE NEXT DIGIT 
   90 FPV = FPV * 10. - FLOAT(K)
   99 RETURN
      END 
      END$
                                                                                                                                                                                                                                    