/* plot.c - example of unix pipe. Calls gnuplot graph drawing package to draw graphs from within a C program. Info is piped to gnuplot */ /* Creates 2 pipes one will draw graphs of y=0.5 and y = random 0-1.0 */ /* the other graphs of y = sin (1/x) and y = sin x */ /* c89 -o plot plot.c plotter.c - ON DECS */ /* acc -o plot plot.c plotter.c - ON SUNS */ #include "externals.h" #include <signal.h> #define DEG_TO_RAD(x) (x*180/M_PI) double drand48(); void quit(); FILE *fp1, *fp2, *fp3, *fp4, *fopen(); main() { float i; float y1,y2,y3,y4; /* open files which will store plot data */ if ( ((fp1 = fopen("plot11.dat","w")) == NULL) || ((fp2 = fopen("plot12.dat","w")) == NULL) || ((fp3 = fopen("plot21.dat","w")) == NULL) || ((fp4 = fopen("plot22.dat","w")) == NULL) ) { printf("Error can't open one or more data files\n"); exit(1); } signal(SIGINT,quit); /* trap ctrl-c call quit fn */ StartPlot(); y1 = 0.5; srand48(1); /* set seed */ for (i=0;;i+=0.01) /* increment i forever use ctrl-c to quit prog */ { y2 = (float) drand48(); if (i == 0.0) y3 = 0.0; else y3 = sin(DEG_TO_RAD(1.0/i)); y4 = sin(DEG_TO_RAD(i)); /* load files */ fprintf(fp1,"%f %f\n",i,y1); fprintf(fp2,"%f %f\n",i,y2); fprintf(fp3,"%f %f\n",i,y3); fprintf(fp4,"%f %f\n",i,y4); /* make sure buffers flushed so that gnuplot reads up to data file */ fflush(fp1); fflush(fp2); fflush(fp3); fflush(fp4); /* plot graph */ PlotOne(); usleep(250); /* sleep for short time */ } } void quit() { printf("\nctrl-c caught:\n Shutting down pipes\n"); StopPlot(); printf("closing data files\n"); fclose(fp1); fclose(fp2); fclose(fp3); fclose(fp4); printf("deleting data files\n"); RemoveDat(); }