#include #include #include #include #include void gsegraf_C_plot ( char *fname, ... ) { /**************************************************************************** * * Function writes a plot-parameter file, opens a temporary file for * communication with the plotting program, and then uses gsegraf to create * the plot. When the plot is completed, gsegraf writes the string "complete" * to the temporary file. The function then deletes the temporary file and * plot-parameter file. * * Input * fname: plot-parameter file-name (including path) * keyword1 arg1: first keyword-argument pair * keyword2 arg2: second keyword-argument pair * etc * * All inputs must be strings (enclosed in double quotes) and separated by * commas. If all or part of an argument needs to be quoted in the plot- * parameter file, the double-quote escape sequence (\") must be used for * these additional quotes. The list of keyword-argument pairs must be * terminated by a NULL pointer. An example of how to call gsegraf_C_plot is: * * gsegraf_C_plot("./sinc_param.txt", * "file_name \"./sinc.txt\"", * "file_format \"%lf %lf\"", * "plot_type \"points\"", * "plot_style lk", * "axis_type \"linear\"", * "grid ls", * "xlabel \"x axis\"", * "ylabel \"y axis\"", * "title \"sin(x)/x\"", * NULL); * ****************************************************************************/ /* Declare variables */ int fd; unsigned int size; char *str, *command, tempfile[] = "gsegraf_XXXXXX"; va_list argp; FILE *fptr; /* Write plot-parameter file */ fptr = fopen(fname, "w"); va_start(argp, fname); while ( (str = va_arg(argp, char *)) != NULL ) fprintf(fptr, "%s\n", str); fclose(fptr); va_end(argp); /* Plot data */ fd = mkstemp(tempfile); close(fd); fptr = fopen(tempfile, "r"); size = strlen(fname) + strlen(tempfile) + 12; command = malloc(size*sizeof(char)); memset(command, 0, size*sizeof(char)); sprintf(command, "%s %s %s %c", "gsegraf", fname, tempfile, '&'); system(command); free(command); /* Wait for plot to be completed */ while ( fgetc(fptr) == EOF ) { system("sleep 0.1"); rewind(fptr); } fclose(fptr); remove(tempfile); /* Delete plot-parameter file */ remove(fname); return; }