ftp.nice.ch/pub/next/unix/developer/plplot.3.0.s.tar.gz#/plplot/src/pldtik.c

This is pldtik.c in view mode; [Download] [Up]

/* If tick == 0, this works out a "nice" interval, so that there */
/* are between 3 and 7.5 major tick intervals in the input range */
/* "vmin" to "vmax". Using this value for the tick interval or   */
/* supplied value, it also computes "prec" which specifies       */
/* the number of places that should be written after the decimal */
/* point. The recommended number of subticks is returned in      */
/* "nsubt" unless the routine is entered with a non-zero value   */
/* of "nsubt". The output variable "mode" is set to 0 if         */
/* labels are to be written in floating-point format, or to 1 if */
/* they are to be written in scientific format. */

#include "plplot.h"
#include <math.h>

void pldtik(vmin, vmax, tick, nsubt, mode, prec, scale)
double vmin, vmax, *tick;
int *nsubt, *mode, *prec, *scale;
{
   double t1, t2, vmod;
   int np, ns;

   vmod = MAX(ABS(vmin),ABS(vmax));
   *mode = 0;
   *scale = 0;
   if (vmod < 1.0e-2 || vmod > 1.0e6) {
     *mode = 1;
     t1 = log10(vmod);
     *scale = (int)floor(t1);
   }

   t1 = log10(ABS(vmax-vmin));
   np = (int)floor(t1);
   t1 = t1 - np;

   if (t1 > 0.7781512503) {
     t2 = 2.0 ;
     ns = 4;
   }
   else if (t1 > 0.4771212549) {
     t2 = 1.0 ;
     ns = 5;
   }
   else if (t1 > 0.1760912591) {
     t2 = 5.0;
     ns = 5;
     np = np-1;
   }
   else  {
     t2 = 2.0;
     ns = 4;
     np = np-1;
   }

   if (*tick == 0.0) {
     *tick = t2 * pow(10.0,(double)np);
     if (vmin > vmax) *tick = -*tick;
   }
   else  {
     t1 = log10(ABS(*tick));
     np = (int)floor(t1);
   }
   if (*nsubt == 0) *nsubt = ns;
   if (*mode != 0)
     *prec = *scale-np+1;
   else
     *prec = MAX(-np,0);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.