home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff267.lzh / Diglib / diglib.zoo / diglib / SYAXIS.FOR < prev    next >
Text File  |  1989-06-20  |  4KB  |  152 lines

  1.         SUBROUTINE SYAXIS(YLOW,YHIGH,YLAB,IAXES)
  2.         INCLUDE PLTCOM.PRM
  3.         INCLUDE PLTSIZ.PRM
  4.         INCLUDE PLTCLP.PRM
  5.         INCLUDE PLTPRM.PRM
  6. C
  7.         EXTERNAL LEN
  8.         CHARACTER*1 YLAB(2)
  9.         CHARACTER*1 NUMBR(14)
  10.         LOGICAL LOGYY, LOGT, LRMTEX, LSHORT, LRAGGD
  11.         DIMENSION ZLOG(8)
  12. C
  13.         DATA ZLOG /0.3010, 0.4771, 0.6021, 0.6990, 0.7782, 0.8451,
  14.      1   0.9031, 0.9542 /
  15. C       MINIMUM DISTANCE BETWEEN SHORT TICKS (1 MM)
  16.         DATA TMINLD /0.1/
  17. C       SHORT TICKS = TICKLN/SHORTF
  18.         DATA SHORTF /2.0/
  19. C
  20. C
  21. C
  22. C       SET LOGY TO FALSE FOR OUR USAGE OF SCALE
  23. C
  24.         LOGY = .FALSE.
  25. C
  26. C       SEE WHAT TYPE OF AXIS IS DESIRED
  27. C
  28.         LOGYY = IAND(IAXES,2) .NE. 0
  29.         LRAGGD = IAND(IAXES,256) .NE. 0
  30. C
  31. C       DO THE AXES SCALING
  32. C
  33.         NUMTK = MIN0(10,INT(YVLEN/(3.0*CYSIZE)))
  34.         IF (LOGYY) GO TO 60
  35.         LSHORT = IAND(IAXES,32) .NE. 0
  36.         CALL AXIS(YLOW,YHIGH,NUMTK,LSHORT,LRAGGD,YMIN,YMAX,YTMIN,YTMAX,
  37.      1   YTICK,IYPWR)
  38.         GO TO 80
  39. 60      CALL LAXIS(YLOW,YHIGH,NUMTK,YMIN,YMAX,YTICK)
  40.         YTMIN = YMIN
  41.         YTMAX = YMAX
  42.         IYPWR = 0
  43. 80      CONTINUE
  44. C
  45. C       SET UP TEMPORARY SCALING FACTORS
  46. C
  47.         UY0 = YMIN
  48.         UDY = YMAX - YMIN
  49. C
  50. C       ********** DRAW Y AXES **********
  51. C
  52.         CALL GSSETC(CYSIZE,0.0)
  53.         LOGT = .FALSE.
  54.         IF (.NOT. LOGYY .OR. YTICK .NE. 1.0) GO TO 90
  55.         CALL SCALE(XMIN,YMIN,VX,TEMP)
  56.         CALL SCALE(XMIN,YMIN+1.0-ZLOG(8),VX,VY)
  57.         IF ((VY-TEMP) .GE. TMINLD) LOGT = .TRUE.
  58. 90      CONTINUE
  59. C
  60. C       DRAW Y AXIS LINE
  61. C
  62.         MXLAB = 3
  63.         TENEXP = 10.0**IYPWR
  64.         X = XMAX
  65. C       TICK SPACING
  66.         TICKSP = AMAX1(0.0,TICKLN)
  67.         IF (IAND(IAXES,64) .NE. 0) YVLEN = YVLEN - TICKSP
  68.         TCKSGN = -TICKLN
  69. 100     CONTINUE
  70.         CALL SCALE(X,YMAX,VX,VY)
  71.         CALL GSMOVE(VX,VY)
  72.         CALL SCALE(X,YMIN,VX,VY)
  73.         CALL GSDRAW(VX,VY)
  74. C
  75. C       DRAW AND LABEL Y AXIS TICKS
  76. C
  77.         DELMX = 0.0
  78.         Y = YTMIN
  79.         N = (YTMAX-YTMIN)/YTICK + 1.1
  80. 110     CONTINUE
  81.         CALL SCALE(X,Y*TENEXP,VX,VY)
  82.         CALL GSMOVE(VX,VY)
  83.         CALL GSDRAW(VX+TICKLN,VY)
  84. C
  85. C       PLACE THE APPROPIATE LABEL
  86. C
  87.         IF (IAND(IAXES,1024) .NE. 0) GO TO 183
  88.         IF (LOGYY) GO TO 160
  89.         CALL LINLAB(INT(Y),IYPWR,NUMBR,LRMTEX)
  90.         GO TO 180
  91. 160     CALL LOGLAB(INT(Y),NUMBR)
  92. 180     DEL = GSLENS(NUMBR)
  93.         DELMX = AMAX1(DEL,DELMX)
  94.         CALL GSMOVE(VX+TICKSP+0.5*CXSIZE,VY-CYSIZE/2.0)
  95.         CALL GSPSTR(NUMBR)
  96. 183     CONTINUE
  97. C
  98. C       ADD GRID LINE AT TICK IF DESIRED
  99. C
  100.         IF (IAND(IAXES,8) .EQ. 0) GO TO 185
  101.         CALL GSLTYP(3)
  102.         CALL GSMOVE(VX,VY)
  103.         CALL SCALE(XMIN,Y*TENEXP,VX,VY)
  104.         CALL GSDRAW(VX,VY)
  105.         CALL GSLTYP(1)
  106. 185     CONTINUE
  107. C
  108. C       DO EXTRA TICKING IF EXTRA TICKS WILL BE FAR ENOUGH APART
  109. C
  110.         IF ((.NOT. LOGT) .OR. (Y .EQ. YTMAX)) GO TO 200
  111.         DO 190 J = 1, 8
  112.         CALL SCALE(X,Y+ZLOG(J),VX,VY)
  113.         CALL GSMOVE(VX,VY)
  114. 190     CALL GSDRAW(VX+TICKLN/SHORTF,VY)
  115. 200     CONTINUE
  116.         Y = Y + YTICK
  117.         N = N-1
  118.         IF (N .GT. 0) GO TO 110
  119. C
  120. C       IF LINEAR AXIS, PLACE REMOTE EXPONENT IF NEEDED
  121. C
  122.         IF (LOGYY .OR. (.NOT. LRMTEX)) GO TO 260
  123.         IF (IAND(IAXES,1024) .NE. 0) GO TO 260
  124.         CALL SCALE(XMAX,(YTMIN+YTICK/2.0)*TENEXP,VX,VY)
  125.         CALL SCOPY('E',NUMBR)
  126.         CALL NUMSTR(IYPWR,NUMBR(2))
  127.         CALL GSMOVE(VX+0.5*CXSIZE,VY-CYSIZE/2.0)
  128.         CALL GSPSTR(NUMBR)
  129. C
  130. C       NOW PLACE Y LABLE
  131. C
  132. 260     CALL SCALE(X,(YMIN+YMAX)/2.0,VX,VY)
  133.         CALL GSMOVE(VX+0.5*CXSIZE+DELMX+TICKSP+1.5*CYSIZE,
  134.      1   VY-GSLENS(YLAB)/2.0)
  135.         CALL GSSETC(CYSIZE,90.0)
  136.         CALL GSPSTR(YLAB)
  137.         CALL GSSETC(CYSIZE,0.0)
  138. 300     CONTINUE
  139. C
  140. C       TELL USER THE SCALING LIMITS
  141. C
  142.         IF (.NOT. LOGYY) GO TO 320
  143.                 YMIN = 10.0**YMIN
  144.                 YMAX = 10.0**YMAX
  145. 320     CONTINUE
  146. C
  147. C       TELL SCALE ABOUT LOG AXIS SCALING NOW
  148. C
  149.         LOGY = LOGYY
  150.         RETURN
  151.         END
  152.