X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fgraph_functions.c;h=6bd28b8091ed26354b1d7a308934543ac0556c3f;hb=1d597550379cb00832f73bd5402918fd6ed2e9df;hp=48b66a3cd4bbb54b1945e870dbec53711dd1600d;hpb=d5b038ec901e9753a8569f33516a49361c54254c;p=lttv.git diff --git a/lttv/lttv/sync/graph_functions.c b/lttv/lttv/sync/graph_functions.c index 48b66a3c..6bd28b80 100644 --- a/lttv/lttv/sync/graph_functions.c +++ b/lttv/lttv/sync/graph_functions.c @@ -21,6 +21,9 @@ #endif #include +#include +#include +#include #include #include @@ -28,6 +31,100 @@ #include "graph_functions.h" +/* + * Create the directory used to hold graphs and the header of the gnuplot + * script. + * + * Args: + * graphsDir: name of directory + * + * Returns: + * The current working directory before the execution of the function. The + * string must be free'd by the caller. + */ +FILE* createGraphsDir(const char* const graphsDir) +{ + char* cwd; + int graphsFp; + FILE* result; + int retval; + + cwd= changeToGraphsDir(graphsDir); + + if ((graphsFp= open("graphs.gnu", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | + S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH + | S_IWOTH | S_IXOTH)) == -1) + { + g_error(strerror(errno)); + } + if ((result= fdopen(graphsFp, "w")) == NULL) + { + g_error(strerror(errno)); + } + + fprintf(result, + "#!/usr/bin/gnuplot\n\n" + "set terminal postscript eps color size 8in,6in\n"); + + retval= chdir(cwd); + if (retval == -1) + { + g_error(strerror(errno)); + } + free(cwd); + + return result; +} + + +/* + * Change to the directory used to hold graphs. Create it if necessary. + * + * Args: + * graphsDir: name of directory + * + * Returns: + * The current working directory before the execution of the function. The + * string must be free'd by the caller. + */ +char* changeToGraphsDir(const char* const graphsDir) +{ + int retval; + char* cwd; + + cwd= getcwd(NULL, 0); + if (cwd == NULL) + { + g_error(strerror(errno)); + } + while ((retval= chdir(graphsDir)) != 0) + { + if (errno == ENOENT) + { + retval= mkdir(graphsDir, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | + S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH); + if (retval != 0) + { + g_error(strerror(errno)); + } + } + else + { + g_error(strerror(errno)); + } + } + + return cwd; +} + + +/* + * Call each graph variable, option and plot line function of each module to + * produce a gnuplot script. + * + * Args: + * syncState: container for synchronization data + */ void writeGraphsScript(SyncState* const syncState) { unsigned int i, j, k, l, m;