ftp.nice.ch/pub/next/science/mathematics/hippoplotamus.2.0.s.tar.gz#/hippo2.0/hprint.c

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

/*
 * hippoprint.c - line printer display for hippo package.
 *
 * Copyright (C)  1991  The Board of Trustees of The Leland Stanford
 * Junior University.  All Rights Reserved.
 *
 * $Id: hprint.c,v 5.0 1993/08/17 21:56:28 rensing Exp $
 *
 * by jonas karlsson, at SLAC, August 1990
 *  split up by Paul Rensing, Feb 28,1991
 */


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifndef THINK_C
#include <string.h>
#endif
#include "hippo.h"
#include "hutil.h"

GLOB_QUAL const char hippoprint_c_rcsid[] = 
     "$Id: hprint.c,v 5.0 1993/08/17 21:56:28 rensing Exp $";

#define SCREENWIDTH 50
#define BININDEX(x, y, z, xs, ys) ((xs) * (ys) * (z) + (x) * (ys) + y)

static void print1D(display disp, FILE *file);
static void print2D(display disp, FILE *file);
static void print3D(display disp, FILE *file);

void h_fprint(display disp, FILE *file)
{
     if (h_bin(disp) != 0) return;
     
     switch (disp->dim) {
     case 1:
	  print1D(disp, file);
	  break;
     case 2:
	  print2D(disp, file);
	  break;
     case 3:
	  print3D(disp, file);
	  break;
     default:
	  break;
     }
     

}

static void print1D(display disp, FILE *file)
{
     int dim, i, j, nchar=0, bi;
     float binedge, bw=0.0;
     float ylow=0.0, range=0.0;
     float csize;
     int zeropt;
     char string[80];
     double d1,d2;
     
     dim = disp->binding.x;
     
     if (disp->title != NULL)
	  fprintf(file,"%s\n\n",
		  h_expandLabel( string, disp->title, 80, disp));
     if (disp->xAxis.label != NULL) 
	  fprintf(file,"X Axis label \"%s\"\n",
		  h_expandLabel( string, disp->xAxis.label, 80, disp));
     fprintf(file,"%d bins, from %f to %f\n\n", disp->bins.xAxis.nBins,
	    disp->xAxis.low, disp->xAxis.high);
     
     fprintf(file," bin        xlow    content\n");

     range = disp->bins.binMax - disp->bins.binMin;
     if (range <= 0.0) range = 1.0;
     ylow = disp->bins.binMin - 0.1*range;
     csize = (float)SCREENWIDTH / (1.2*range);

     zeropt = -ylow*csize;
     if (zeropt < 0) zeropt = 0;
     
     binedge = disp->xAxis.low;
     bw = ((float) (disp->xAxis.high - disp->xAxis.low)) /
	  (float) disp->bins.xAxis.nBins;

     for (i = 0; i < disp->bins.xAxis.nBins; i++) {
	  bi = BININDEX(i, 0, 0, disp->bins.xAxis.nBins, 1);
	  
	  fprintf(file,"\n%4d:%11.4g%11.4g ", 
		  i, binedge, disp->bins.data[bi]);
	  binedge += bw;

	  if (disp->bins.data[bi] >= 0) 
	  {
	       for (j = 0; j < zeropt; j++) {
		    putc(' ', file);	
	       }
	       nchar =  (disp->bins.data[bi] - ylow) * csize - zeropt;
	       for (j = 0; j < nchar; j++) {
		    putc('X', file);	
	       }
	       if (nchar <= 0) putc('|', file);
	  }
	  else 
	  {
	       nchar =  (disp->bins.data[bi] - ylow) * csize;
	       for (j = 0; j < nchar; j++) {
		    putc(' ', file);	
	       }
	       for (j = 0; j < zeropt - nchar; j++) {
		    putc('X', file);
	       }
	       if ((zeropt - nchar) <= 0) putc('|', file);
	  }
     }
     d1 = disp->bins.totals[0][0];
     d2 = disp->bins.totals[2][0];
     
     fprintf(file,"\nunderflow:%g  overflow:%g\n",d1,d2);
/*     
	     disp->bins.totals[0][0],
	     disp->bins.totals[2][0]);
  */   
     return;
}



static void print2D(display disp, FILE *file)
{
     fprintf(file, "2D printer output is not yet implemented\n");
     
     return;
}

static void print3D(display disp, FILE *file)
{
     fprintf(file, "3D printer output is not yet implemented\n");
     
     return;
}

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