Listing 1 SAMPPLOT.C

/***********************************************************************
 * SAMPPLOT.C - Sample driver program for the splot plotting function.
 *
 * Developed in Borland C++. To compile: BCC SAMPPLOT.C PLOTS.C (small model)
 *
 * splot may be included in application programs which require hard copy
 * graphic output to eliminate the additional step of using a separate
 * plotting program. This code compiles in the small model with about 14K
 * core to spare. The splot function can be used without modification with
 * the compact or large model if required by the application.
 *
 *  Lowell Smith
 *  3368 Crestwood Drive
 *  Salt Lake City, UT 84109-3202
 *********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#define PI 3.14159265358979
void main()
{ /* Max of 5 curves per graph and max of 3 strings in the message box*/
  int i,j,totpoints[5],numpoints[5],nmsg[3];
  char title[81],xaxis[81],yaxis[81],*msg[5],msgspace[5][81];
  double *xplt[5],*yplt[5],dx,x,xpltspace[5][300],ypltspace[5][300];
  FILE *pstfile, *hpfile;                 /* file pointers */
  void splot(FILE* pstfil, FILE *hpfile, int xdivs, int ydivs, int xgrid,
     int ygrid, int nplots, double *x[], double *y[], int *npts_pnts, int *npts_tot,
     char *title, char *xaxis, char *yaxis,char *msg[], int *nmsg);

/* In lieu of malloc */
  for (i=0; i<5; ++i) { msg[i]=msgspace[i]; xplt[i]=xpltspace[i]; yplt[i]=ypltspace[i]; }

/* We first make a graph with a circle and an ellipse with no symbols, with
 * no message box, and with both PostScript and HP LaserJet output files
 */
  if ((pstfile=fopen("splot1.ps","w"))==NULL)
                           { printf("Couldn't open pstfile\n"); exit(0); }
/* Be sure to make the .PCL file binary */
  if ((hpfile=fopen("splot1.pcl","wb"))==NULL)
                           { printf("Couldn't open hpfile\n"); exit(0); }
  dx=2.*PI/200.; x=0.;
  for (i=0; i<201; ++i)
  { x+=dx; xplt[0][i] =sin(x)*1.75/1.33333; yplt[0][i]=cos(x)*1.75;
    xplt[1][i]=sin(x)*l.75/1.33333; yplt[1][i]=cos(x)*.75;
  }
  nmsg [0]=0; numpoints [0]=numpoints [1] =0; totpoints [0] =totpoints [1] =201;
  strcpy(xaxis,"X / Aspect Ratio (1.33333)"); strcpy(yaxis,"Y");
  strcpy(title,"A Circle and an Ellipse");
  splot(pstfile,hpfile,2,2,1,1,2,xplt,yplt,numpoints,totpoints,
title,xaxis,yaxis, msg,nmsg);

/* Two parabolas, one with connecting lines, one with symbols. PS file only. */
  if ((pstfile=fopen("splot2.ps","w"))==NULL)
                           { printf("Couldn't open pstfile\n"); exit(0); }
  hpfile=NULL;
  numpoints[0]=0; totpoints[0]=101; numpoints[1]=17; totpoints[1]=154;
  strcpy(xaxis,"X"); strcpy(yaxis,"Y"); strcpy(title,"Two Parabolas");
  for (i-0; i<101; ++i) { x=xplt[0][i]=(double)i/10.-5.; yplt[0][i]=.2*x*x; }
  for (i=0; i<17; ++i) { x=xplt[1][i]=(double)i/2.-4.; yplt[1][i]=.5*x*x; }
  for (i=0; i<137; ++i) { x=xplt[1][i+17]=(double)i/17.-4.; yplt[1][i+17]=.5*x*x;
                     }
  splot(pstfile,hpfile,10,10,0,0,2,xplt,yplt,numpoints,
       totpoints,title,xaxis,yaxis, msg,nmsg);

/* An illustration of the symbols and large numbers. Postscript file only. */
  if ((pstfile=fopen("splot3.ps","w"))==NULL)
                           { printf("Couldn't open pstfile\n"); exit(0); }
  strcpy(title,"Illustrating the Selection of Symbols");
  strcpy(xaxis,"X (Values should have been scaled)");
  strcpy(yaxis,"Y (Values should have been scaled)");
  strcpy(msg[0],"After the fourth curve"); strcpy(msg[1],"the symbols repeat");
  nmsg[0]=2; nmsg[1]=370; nmsg[2]=130;
  numpoints[0]=numpoints[1]=numpoints[2]=numpoints[3]=numpoints[4]=3;
  totpoints[0]=totpoints[1]=totpoints[2]=totpoints[3]=totpoints[4]=6;
  for(i=0; i<5; ++i) for(j=0; j<3; ++j)
       { xplt[i][j]=xplt[i][j+3]=(i *.25+j)*1e9;
         yplt[i][j]=yplt[i][j+3]=(i*.25-j)*1e5;
       }
  splot(pstfile,hpfile,3,3,1,1,5,xplt,yplt,numpoints,
       totpoints,title,xaxis,yaxis, msg,nmsg);
} /* end main driver */
/* End of File */