home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Amiga / Applications / Mathematiques / DataPlot.lha / DataPlot / DataPlot.c < prev    next >
C/C++ Source or Header  |  1992-01-04  |  2KB  |  81 lines

  1. /*
  2. **  DataPlot v1.00
  3. **  Written by Stefan Zeiger of ! Wizard Works ! in 10/1991
  4. **  PUBLIC DOMAIN.
  5. */
  6.  
  7.  
  8. /************************************************************áINCLUDE FILES */
  9.  
  10. #include <exec/types.h>
  11. #include <math.h>
  12. #include <stdio.h>
  13. #include <proto/tool.h>
  14.  
  15.  
  16. /**************************************************** DECLARE OUR FUNCTIONS */
  17.  
  18. void cleanup(UBYTE *,int);
  19.  
  20.  
  21. /************************************************************* LIBRARY BASE */
  22.  
  23. struct ToolBase *ToolBase=NULL;
  24.  
  25.  
  26. /********************************************************* GLOBAL VARIABLES */
  27.  
  28. APTR Konstanten=NULL;
  29. struct Block *Funktion=NULL;
  30.  
  31.  
  32. /************************************************************ MAIN FUNCTION */
  33.  
  34. void main(int argc,char **argv)
  35. {
  36.   ULONG i;
  37.   double zero=0.0,xval,yval,xmin,xmax,step;
  38.  
  39.   if(argc!=5) cleanup("Usage: DataPlot >file function xmin xmax step",10);
  40.  
  41.   ToolBase=(struct ToolBase *)OpenLibrary("tool.library",0L);
  42.   if(!ToolBase) cleanup("Can't open TOOL.LIBRARY.",10);
  43.  
  44.   Konstanten=Init_Konst();
  45.   if(!Konstanten) cleanup("Can't allocate memory for constants.",10);
  46.   for(i=0;i<26;i++) Set_Konst_P(Konstanten,i,&zero);
  47.  
  48.   Funktion=Init_Mem(argv[1]);
  49.   if(!Funktion) cleanup("Can't allocate memory for function.",10);
  50.   if(Init_Block(Funktion)) cleanup("Illegal function.",10);
  51.   if(PreCalc(Funktion,Konstanten)) cleanup("Error in function.",10);
  52.  
  53.   fprintf(stdout,"*LEGEND* y=%s\n\n",argv[1]);
  54.  
  55.   sscanf(argv[2],"%lf",&xmin);
  56.   sscanf(argv[3],"%lf",&xmax);
  57.   sscanf(argv[4],"%lf",&step);
  58.  
  59.   for(xval=xmin;xval<=xmax;xval+=step)
  60.   {
  61.     if(Calc_P(&yval,Funktion,&xval)) fprintf(stderr,"Error at x=%lf.\n",xval);
  62.     else fprintf(stdout,"%lf %lf \n",xval,yval);
  63.   }
  64.  
  65.   fprintf(stdout,"\n");
  66.  
  67.   cleanup("Finished.",0);
  68. }
  69.  
  70.  
  71. /***************************************************************** CLEAN UP */
  72.  
  73. void cleanup(UBYTE *cltext,int excode)
  74. {
  75.   if(Funktion) Free_Block(Funktion);
  76.   if(Konstanten) Free_Konst(Konstanten);
  77.   if(ToolBase) CloseLibrary((struct Library *)ToolBase);
  78.   fprintf(stderr,"%s\n",cltext);
  79.   exit(excode);
  80. }
  81.