00001
00002 c
00003 c Copyright (c) 1986,1987,1988,1989,1990,1991,1992,1993,
00004 c by Steve McMillan, Drexel University, Philadelphia, PA.
00005 c
00006 c All rights reserved.
00007 c
00008 c Redistribution and use in source and binary forms are permitted
00009 c provided that the above copyright notice and this paragraph are
00010 c duplicated in all such forms and that any documentation,
00011 c advertising materials, and other materials related to such
00012 c distribution and use acknowledge that the software was developed
00013 c by the author named above.
00014 c
00015 c THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
00016 c IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
00017 c WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00018 c
00019
00020 subroutine fr lndiv(x1,x2,xlen,dxs,dxm,dxl)
00021 save
00022 c
00023 c Figure out "suitable" tick spacings (neither too many nor
00024 c too few numbers or major ticks).
00025 c
00026 dimension subt(4),subl(3)
00027 data subt/.1,.2,.25,.5/,subl/1.,2.,5./,ths,thl/.15,1.5/
00028 c
00029 dxinch = (x2-x1)/xlen
00030 call compoz(dxinch,dxpi,lpow)
00031 fac = 10.**(lpow)
00032 if (x2.lt.x1) fac = -fac
00033 scale = 1.
00034 c
00035 c Choose small tick spacing first, (try to make them 0.1 screen
00036 c units apart).
00037 c
00038 dipx = 1./abs(dxpi)
00039 1 do 2 i = 1,4
00040 j = i
00041 if (subt(j)*dipx .gt. ths) go to 3
00042 2 continue
00043 dipx = dipx*10.
00044 scale = scale*10.
00045 go to 1
00046 c
00047 3 xx = scale*fac
00048 dxs = subt(j)*xx
00049 c
00050 c Now set the medium tick spacing to the next factor of ten up,
00051 c except that we put medium ticks at half that interval (i.e. at
00052 c the 0.5 marks) if dxs = 0.1.
00053 c
00054 dxm = xx
00055 if (j.eq.1) dxm = .5*xx
00056 c
00057 c Finally, choose the large tick spacing (aim for thl screen
00058 c units apart).
00059 c
00060 4 do 5 i = 1,3
00061 j = i
00062 if (subl(j)*dipx .ge. thl) go to 6
00063 5 continue
00064 scale = scale*10.
00065 dipx = dipx*10.
00066 go to 4
00067 c
00068 6 dxl = subl(j)*scale*fac
00069 c
00070 c Make sure there are enough large ticks.
00071 c
00072 if (abs(dxl).gt..5*abs(x2-x1)) then
00073 if (j.gt.1) then
00074 j = j - 1
00075 dxl = subl(j)*scale*fac
00076 else
00077 dxl = .5*dxl
00078 end if
00079 end if
00080 c
00081 end