diff --git a/src/epanet.c b/src/epanet.c index d8e3cc4..cc1aa44 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -144,6 +144,43 @@ void errorLookup(int errcode, char *errmsg, int len); *****************************************************************/ +int runconcurrent(EN_ProjectHandle ph, const char *inputfile, const char *reportfile, + const char *outputfile, void(*pviewprog)(char *)) +{ + long t, tstep_h, tstep_q; + int errcode = 0; + + EN_Project *p = NULL; + + + ERRCODE(EN_open(ph, inputfile, reportfile, outputfile)); + p = (EN_Project*)(ph); + p->viewprog = pviewprog; + + ERRCODE(EN_openH(ph)); + ERRCODE(EN_initH(ph, EN_SAVE)); + + ERRCODE(EN_openQ(ph)); + ERRCODE(EN_initQ(ph, EN_SAVE)); + + do { + ERRCODE(EN_runH(ph, &t)); + ERRCODE(EN_runQ(ph, &t)); + + ERRCODE(EN_nextH(ph, &tstep_h)); + ERRCODE(EN_nextQ(ph, &tstep_q)); + + } while (tstep_h > 0); + + ERRCODE(EN_closeH(ph)); + ERRCODE(EN_closeQ(ph)); + + ERRCODE(EN_report(ph)); + ERRCODE(EN_close(ph)); + + return errcode; +} + /*------------------------------------------------------------------------ ** Input: f1 = pointer to name of input file ** f2 = pointer to name of report file @@ -167,20 +204,10 @@ int DLLEXPORT ENepanet(const char *f1, const char *f2, const char *f3, void (*pv EN_Project *p = NULL; ERRCODE(EN_createproject(&_defaultModel)); - ERRCODE(EN_open(_defaultModel, f1, f2, f3)); - p = (EN_Project*)(_defaultModel); - p->viewprog = pviewprog; - - if (p->out_files.Hydflag != USE) { - ERRCODE(EN_solveH(_defaultModel)); - } - - ERRCODE(EN_solveQ(_defaultModel)); - ERRCODE(EN_report(_defaultModel)); - - EN_close(_defaultModel); - EN_deleteproject(&_defaultModel); + ERRCODE(EN_runproject(_defaultModel, f1, f2, f3, pviewprog)); + + ERRCODE(EN_deleteproject(&_defaultModel)); return (errcode); } @@ -3716,6 +3743,7 @@ int DLLEXPORT EN_setstatusreport(EN_ProjectHandle ph, int code) { p->report.Statflag = (char)code; else errcode = 202; + return set_error(p->error_handle, errcode); } @@ -3800,6 +3828,7 @@ int DLLEXPORT EN_getheadcurveindex(EN_ProjectHandle ph, int index, int *curveind if (index < 1 || index > Nlinks || EN_PUMP != Link[index].Type) return set_error(p->error_handle, 204); *curveindex = Pump[findpump(net, index)].Hcurve; + return set_error(p->error_handle, 0); } @@ -3842,6 +3871,7 @@ int DLLEXPORT EN_setheadcurveindex(EN_ProjectHandle ph, int index, int curveinde pump->Hmax /= Ucf[HEAD]; p->network.Curve[curveindex].Type = P_CURVE; + return set_error(p->error_handle, 0); } @@ -3875,6 +3905,7 @@ int DLLEXPORT EN_getcurvetype(EN_ProjectHandle ph, int curveindex, int *type) { if (curveindex < 1 || curveindex > net->Ncurves) return set_error(p->error_handle, 206); *type = net->Curve[curveindex].Type; + return set_error(p->error_handle, 0); } @@ -3919,23 +3950,23 @@ int openfiles(EN_Project *p, const char *f1, const char *f2, const char *f3) if (strcomp(f1, f2) || strcomp(f1, f3) || (strcomp(f2, f3) && (strlen(f2) > 0 || strlen(f3) > 0))) { writecon(FMT04); - return set_error(p->error_handle, 301); + return 301; } /* Attempt to open input and report files */ if ((par->InFile = fopen(f1, "rt")) == NULL) { writecon(FMT05); writecon(f1); - return set_error(p->error_handle, 302); + return 302; } if (strlen(f2) == 0) rep->RptFile = stdout; else if ((rep->RptFile = fopen(f2, "wt")) == NULL) { writecon(FMT06); - return set_error(p->error_handle, 303); + return 303; } - return set_error(p->error_handle, 0); + return 0; } /* End of openfiles */ int openhydfile(EN_Project *p) @@ -4025,7 +4056,8 @@ int openhydfile(EN_Project *p) /* Save current position in hydraulics file */ /* where storage of hydraulic results begins */ out->HydOffset = ftell(out->HydFile); - return set_error(p->error_handle, errcode); + + return errcode; } int openoutfile(EN_Project *p) @@ -4093,7 +4125,8 @@ int openoutfile(EN_Project *p) } else out->TmpOutFile = out->OutFile; } - return set_error(p->error_handle, errcode); + + return errcode; } /* @@ -4267,7 +4300,8 @@ int allocdata(EN_Project *p) /* Allocate memory for rule base (see RULES.C) */ if (!errcode) errcode = allocrules(p); - return set_error(p->error_handle, errcode); + + return errcode; } /* End of allocdata */ void freeTmplist(STmplist *t) @@ -4566,11 +4600,11 @@ char *geterrmsg(int errcode, char *msg) */ { switch (errcode) { /* Warnings */ -#define DAT(code,enumer,string) case code: msg = string; break; +#define DAT(code,enumer,string) case code: strcpy(msg, string); break; #include "errors.dat" #undef DAT default: - msg = ""; + strcpy(msg, ""); } return (msg); }