SUBROUTINE LAXES1(ANGLE,VMIN,VMAX,LENGTH,NFORM,NCHRS) C C This subroutine figures how to round the end values, C VMIN and VMAX, calculates the length per decade and C draws the axis. C COMMON /PLTR/ ILun, IDev, IsTerm, IMode, IXMax, IYMax, 1 Cnvrsn, CMag, CnvMag, IX0, IY0, KSetNo, IFancy, IBfDv3, 1 CSize, DeltaH, DeltaV, Upsiln, CosUp, SinUp, WidAdj COMMON /AXESC/ CS, SN, SGN, TX, TY, DX, DY, 1 MIN, MIDL, MAX, MIDU, UMAX, WMAX, IFORM, JUSTFY DIMENSION RATIO(9), DXM(9), DYM(9), VLOT(3), VHIT(3) REAL LENGTH DATA RATIO/.30103,.17609,.12494,.09691,.079181, 1 .0669468,.057992,.0511525,.0457575/ DATA VLOT/ 1.E-3, 1.E-6, 3.E-38 / DATA VHIT/ 9.E14, 1.E7, 1.E38 / C A = 0.0174533*ANGLE CS = COS(A) SN = SIN(A) SGN = ISIGN(1,NCHRS) C C - CALCULATE THE SIZES OF THE MAJOR AND MINOR TICK MARKS. TX = DeltaV*SN*SGN TY = -DeltaV*CS*SGN TXM = 0.5*TX TYM = 0.5*TY C C - BOUND THE END VALUES. IFORM = MAX0( 1, MIN0( NFORM, 3 ) ) VLOT(1) = 1.E-3 IF( KSetNo .EQ. 0 ) GO TO 100 VLOT(1) = 1.E-18 100 VLO = AMAX1( VMIN, VLOT( IFORM ) ) VHI = AMIN1( VMAX, VHIT( IFORM ) ) C C - CALCULATE LOWER DECADE. MIN = ALOG10( VLO ) IF( VLO .LT. 1. ) MIN = MIN-1 C C - FIND IF VLO NEEDS ROUNDING. FRAC = VLO/(10.**MIN) MIDL = FRAC IF( ABS(FRAC-MIDL) .LE. 0.99 ) GO TO 200 C C - ROUND UP TO NEXT HIGHER MINOR DIVISON. MIDL = MIDL+1 C - CHECK TO SEE IF ROUNDED UP TO AN EVEN DECADE. 200 IF( MIDL .NE. 10 ) GO TO 300 MIN = MIN+1 MIDL = 1 C C - CALCULATE UPPER DECADE. 300 MAX = ALOG10( VHI ) IF( VHI .LT. 1 ) MAX = MAX-1 C C - FIND IF VHI NEEDS ROUNDING. FRAC = VHI/(10.**MAX) MIDU = FRAC IF( ABS(FRAC-MIDU) .LE. 0.01 ) GO TO 400 C C - ROUND UP TO NEXT HIGHER MINOR DIVISION. MIDU = MIDU+1 C - CALCULATE DECADE LENGTH AND BOUND END POINTS. 400 IF( MIDU .NE. 10 ) GO TO 500 MAX = MAX+1 MIDU = 1 C C - CALCULATE DISTANCES BETWEEN MINOR TICK MARKS. 500 DL = ABS(LENGTH)/( MAX-MIN+ALOG10( FLOAT(MIDU)/MIDL ) ) DX = DL*CS DY = DL*SN DO 1000 I=1,9 DXM(I) = RATIO(I)*DX 1000 DYM(I) = RATIO(I)*DY XP = 0. YP = 0. C C - DRAW ANY PRECEEDING MINOR TICK MARKS. MINDO = MIN IF( MIDL .EQ. 1 ) GO TO 2100 MINDO = MIN+1 NINE = 9 IF( MIN .EQ. MAX ) NINE = MIDU DO 2000 I=MIDL,NINE-1 CALL CALPLT(XP+TXM,YP+TYM,2) CALL CALPLT(XP,YP,2) XP = XP+DXM(I) YP = YP+DYM(I) 2000 CALL CALPLT(XP,YP,2) CALL CALPLT(XP+TXM,YP+TYM,2) IF( MIN .EQ. MAX ) RETURN CALL CALPLT(XP,YP,2) XP = XP + DXM(9) YP = YP + DYM(9) CALL CALPLT(XP,YP,2) C C - DRAW FULL DECADES. 2100 CALL CALPLT(XP+TX,YP+TY,2) CALL CALPLT(XP,YP,2) IF( ( MIN .EQ. MAX ) .OR. ( MINDO .EQ. MAX ) ) GO TO 4100 DO 4000 I=MINDO,MAX-1 DO 3000 J=1,8 XP = XP+DXM(J) YP = YP+DYM(J) CALL CALPLT(XP,YP,2) CALL CALPLT(XP+TXM,YP+TYM,2) 3000 CALL CALPLT(XP,YP,2) C C - DRAW TO MAJOR TICK MARK. XP = XP+DXM(9) YP = YP+DYM(9) CALL CALPLT(XP,YP,2) CALL CALPLT(XP+TX,YP+TY,2) 4000 CALL CALPLT(XP,YP,2) CALL CALPLT(XP,YP,3) C C - DRAW ANY TRAILING MINOR TICK MARKS. 4100 IF( MIDU .EQ. 1 ) RETURN DO 5000 I=1,MIDU-1 XP = XP+DXM(I) YP = YP+DYM(I) CALL CALPLT(XP,YP,2) CALL CALPLT(XP+TXM,YP+TYM,2) 5000 CALL CALPLT(XP,YP,2) C RETURN END