#include #include #include ostream &struc2gnuplot_txt(const string sys = "sim", istream &in = cin, ostream &out = cout) { typedef struct record_ record_t; struct record_ { string vec; unsigned int num; string cmp; string mod; unsigned int rpt; }; list Lx; list Ly; record_t r; // read data from struc.txt while (in >> r.vec >> r.num >> r.cmp >> r.mod >> r.rpt) { if ("state" == r.vec) { Lx.push_back(r); } else if ("output" == r.vec) { Ly.push_back(r); } } // write header out << "set data style lines" << endl << "set xlabel \"time\"" << endl << "set grid" << endl << endl; // write states (X11) out << "set term X11" << endl << "plot\\" << endl; for (list::iterator i = Lx.begin(); i != Lx.end() ; i++) { if (Lx.begin() != i) { out << ",\\" << endl; } out << "\t\"MTT_work/" << sys << "_odes.dat2\" using 1:" << 2 + Ly.size() + i->num << " axes x1y1" << " title \"" << i->mod << "_" << i->cmp << "\""; } out << endl << endl << "pause(-1)" << endl << endl; // write states (postscript) out << "set term postscript eps color" << endl << "set output \"" << sys << "_states.eps\"" << endl << "replot" << endl << endl; // write outputs (X11) out << "set term X11" << endl << "plot\\" << endl; for (list::iterator i = Ly.begin(); i != Ly.end() ; i++) { if (Ly.begin() != i) { out << ",\\" << endl; } out << "\t\"MTT_work/" << sys << "_odes.dat2\" using 1:" << 1 + i->num << " axes x1y1" << " title \"" << i->mod << "_" << i->cmp << "\""; } out << endl << endl << "pause(-1)" << endl << endl; // write outputs (postscript) out << "set term postscript eps color" << endl << "set output \"" << sys << "_outputs.eps\"" << endl << "replot" << endl << endl; return out; } #ifdef MAIN int main(int argc, char *argv[]) { if (--argc) { struc2gnuplot_txt(argv[1]); } else { struc2gnuplot_txt(); } return 0; } #endif // MAIN