diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp index cb36bdbefeb5c139151e89637fcb60acb3527022..0820013b7c2ae3d914e4de099d41fb12f8140e04 100644 --- a/Common/OpenFile.cpp +++ b/Common/OpenFile.cpp @@ -404,10 +404,10 @@ void OpenProject(const char *name) delete PView::list[i]; #endif #if !defined(HAVE_NO_PARSER) - // reinitialize the parser symbol tree (only if the current model is - // not empty: if it's empty it probably mean we just launched gmsh, - // and we don't want to delete variables set e.g. using the -string - // command line option) + // reinitialize the variables defined in the parser (only if the + // current model is not empty: if it's empty it probably mean we + // just launched gmsh, and we don't want to delete variables set + // e.g. using the -string command line option) if(GModel::current()->getNumVertices()) gmsh_yysymbols.clear(); #endif GModel::current()->destroy(); diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index c4c424fb1a27c379d201ec38c660aa250ef5ea80..eac616bf456f31e163212f7f2dbbc9110c71b6da 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -2698,7 +2698,7 @@ static void _add_new_point() Msg::StatusBar(3, false, ""); } -static void _add_new_multiline(int type) +static void _add_new_multiline(std::string type) { std::vector<GVertex*> vertices; std::vector<GEdge*> edges; @@ -2730,22 +2730,8 @@ static void _add_new_multiline(int type) Msg::Warning("Entity de-selection not supported yet during multi-line creation"); } if(ib == 'e') { - if(p.size() >= 2) { - switch (type) { - case 0: - add_multline(p.size(), &p[0], CTX.filename); - break; - case 1: - add_spline(p.size(), &p[0], CTX.filename); - break; - case 2: - add_bspline(p.size(), &p[0], CTX.filename); - break; - case 3: - add_bezier(p.size(), &p[0], CTX.filename); - break; - } - } + if(p.size() >= 2) + add_multline(type, p.size(), &p[0], CTX.filename); WID->reset_visibility(); ZeroHighlight(); Draw(); @@ -2810,7 +2796,7 @@ static void _add_new_line() break; } if(p.size() == 2) { - add_multline(2, &p[0], CTX.filename); + add_multline("Line", p.size(), &p[0], CTX.filename); WID->reset_visibility(); ZeroHighlight(); Draw(); @@ -3058,8 +3044,8 @@ static void _add_new_surface_volume(int mode) } if(List_Nbr(List2)) { switch (mode) { - case 0: add_surf(List2, CTX.filename, 0, 2); break; - case 1: add_surf(List2, CTX.filename, 0, 1); break; + case 0: add_surf("Plane Surface", List2, CTX.filename); break; + case 1: add_surf("Ruled Surface", List2, CTX.filename); break; case 2: add_vol(List2, CTX.filename); break; } WID->reset_visibility(); @@ -3094,9 +3080,9 @@ void geometry_elementary_add_new_cb(CALLBACK_ARGS) else if(str == "Line") _add_new_line(); else if(str == "Spline") - _add_new_multiline(1); + _add_new_multiline(str); else if(str == "BSpline") - _add_new_multiline(2); + _add_new_multiline(str); else if(str == "Circle") _add_new_circle(); else if(str == "Ellipse") @@ -3312,7 +3298,7 @@ static void _action_point_line_surface_volume(int action, int mode, const char * delet(List1, CTX.filename, what); break; case 7: - add_physical(List1, CTX.filename, type); + add_physical(what, List1, CTX.filename); break; case 8: add_charlength(List1, CTX.filename, WID->context_mesh_input[0]->value()); diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp index 249666820679b9d869db4549f92c947010da91cc..6ba5f396647c120427c1ab2a46d1f78da5d11650 100644 --- a/Geo/GModelIO_Geo.cpp +++ b/Geo/GModelIO_Geo.cpp @@ -174,11 +174,11 @@ class writeGVertexGEO { if(gv->getNativeType() == GEntity::GmshModel){ Vertex *v = (Vertex*)gv->getNativePtr(); if(!v) return; - fprintf(geo, "Point (%d) = {%.16g, %.16g, %.16g, %.16g};\n", + fprintf(geo, "Point(%d) = {%.16g, %.16g, %.16g, %.16g};\n", v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc); } else{ - fprintf(geo, "Point (%d) = {%.16g, %.16g, %.16g, %.16g};\n", + fprintf(geo, "Point(%d) = {%.16g, %.16g, %.16g, %.16g};\n", gv->tag(), gv->x(), gv->y(), gv->z(), gv->prescribedMeshSizeAtVertex()); } @@ -199,18 +199,18 @@ class writeGEdgeGEO { if(!c || c->Num < 0) return; switch (c->Typ) { case MSH_SEGM_LINE: - fprintf(geo, "Line (%d) = ", c->Num); + fprintf(geo, "Line(%d) = ", c->Num); break; case MSH_SEGM_CIRC: case MSH_SEGM_CIRC_INV: - fprintf(geo, "Circle (%d) = ", c->Num); + fprintf(geo, "Circle(%d) = ", c->Num); break; case MSH_SEGM_ELLI: case MSH_SEGM_ELLI_INV: - fprintf(geo, "Ellipse (%d) = ", c->Num); + fprintf(geo, "Ellipse(%d) = ", c->Num); break; case MSH_SEGM_NURBS: - fprintf(geo, "Nurbs (%d) = {", c->Num); + fprintf(geo, "Nurbs(%d) = {", c->Num); for(int i = 0; i < List_Nbr(c->Control_Points); i++) { Vertex *v; List_Read(c->Control_Points, i, &v); @@ -235,13 +235,13 @@ class writeGEdgeGEO { fprintf(geo, " Order %d;\n", c->degre); return; case MSH_SEGM_SPLN: - fprintf(geo, "CatmullRom (%d) = ", c->Num); + fprintf(geo, "CatmullRom(%d) = ", c->Num); break; case MSH_SEGM_BSPLN: - fprintf(geo, "BSpline (%d) = ", c->Num); + fprintf(geo, "BSpline(%d) = ", c->Num); break; case MSH_SEGM_BEZIER: - fprintf(geo, "Bezier (%d) = ", c->Num); + fprintf(geo, "Bezier(%d) = ", c->Num); break; default: Msg::Error("Unknown curve type %d", c->Typ); @@ -262,7 +262,7 @@ class writeGEdgeGEO { else{ if(ge->getBeginVertex() && ge->getEndVertex()){ if(ge->geomType() == GEntity::Line){ - fprintf(geo, "Line (%d) = {%d, %d};\n", + fprintf(geo, "Line(%d) = {%d, %d};\n", ge->tag(), ge->getBeginVertex()->tag(), ge->getEndVertex()->tag()); } else{ @@ -274,10 +274,10 @@ class writeGEdgeGEO { for(int i = 1; i < ge->minimumDrawSegments(); i++){ double u = umin + (double)i / ge->minimumDrawSegments() * (umax - umin); GPoint p = ge->point(u); - fprintf(geo, "Point (p%d + %d) = {%.16g, %.16g, %.16g, 1.e+22};\n", + fprintf(geo, "Point(p%d + %d) = {%.16g, %.16g, %.16g, 1.e+22};\n", ge->tag(), i, p.x(), p.y(), p.z()); } - fprintf(geo, "CatmullRom (%d) = {%d", ge->tag(), ge->getBeginVertex()->tag()); + fprintf(geo, "CatmullRom(%d) = {%d", ge->tag(), ge->getBeginVertex()->tag()); for(int i = 1; i < ge->minimumDrawSegments(); i++) fprintf(geo, ", p%d + %d", ge->tag(), i); fprintf(geo, ", %d};\n", ge->getEndVertex()->tag()); @@ -304,7 +304,7 @@ class writeGFaceGEO { num.push_back((*it)->tag()); for(std::list<int>::iterator it = orientations.begin(); it != orientations.end(); it++) ori.push_back((*it) > 0 ? 1 : -1); - fprintf(geo, "Line Loop (%d) = ", gf->tag()); + fprintf(geo, "Line Loop(%d) = ", gf->tag()); for(unsigned int i = 0; i < num.size(); i++){ if(i) fprintf(geo, ", %d", num[i] * ori[i]); @@ -313,10 +313,10 @@ class writeGFaceGEO { } fprintf(geo, "};\n"); if(gf->geomType() == GEntity::Plane){ - fprintf(geo, "Plane Surface (%d) = {%d};\n", gf->tag(), gf->tag()); + fprintf(geo, "Plane Surface(%d) = {%d};\n", gf->tag(), gf->tag()); } else if(edges.size() == 3 || edges.size() == 4){ - fprintf(geo, "Ruled Surface (%d) = {%d};\n", gf->tag(), gf->tag()); + fprintf(geo, "Ruled Surface(%d) = {%d};\n", gf->tag(), gf->tag()); } else{ Msg::Error("Skipping surface %d in export", gf->tag()); @@ -336,7 +336,7 @@ class writeGRegionGEO { std::list<GFace*> faces = gr->faces(); if(faces.size()){ - fprintf(geo, "Surface Loop (%d) = ", gr->tag()); + fprintf(geo, "Surface Loop(%d) = ", gr->tag()); for(std::list<GFace*>::iterator it = faces.begin(); it != faces.end(); it++) { if(it != faces.begin()) fprintf(geo, ", %d", (*it)->tag()); @@ -344,7 +344,7 @@ class writeGRegionGEO { fprintf(geo, "{%d", (*it)->tag()); } fprintf(geo, "};\n"); - fprintf(geo, "Volume (%d) = {%d};\n", gr->tag(), gr->tag()); + fprintf(geo, "Volume(%d) = {%d};\n", gr->tag(), gr->tag()); } } }; @@ -384,11 +384,11 @@ class writePhysicalGroupGEO { } if(oldName.size()) - fprintf(geo, " (%s) = {", oldName.c_str()); + fprintf(geo, "(%s) = {", oldName.c_str()); else if(newName.size()) - fprintf(geo, " (\"%s\") = {", newName.c_str()); + fprintf(geo, "(\"%s\") = {", newName.c_str()); else - fprintf(geo, " (%d) = {", g.first); + fprintf(geo, "(%d) = {", g.first); for(unsigned int i = 0; i < g.second.size(); i++) { if(i) fprintf(geo, ", "); fprintf(geo, "%d", g.second[i]->tag()); diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp index 471a7ac5fcaef5f9ca9deb5cd3a1f6bb1fc6135d..3f4dc2b31293843602308d5d1de5adad35bd1c54 100644 --- a/Geo/GeoStringInterface.cpp +++ b/Geo/GeoStringInterface.cpp @@ -21,38 +21,20 @@ extern Context_T CTX; -#define BUFFSIZE 128000 - -// Some old systems don't have snprintf... Just call sprintf instead. - -#if defined(HAVE_NO_SNPRINTF) -static int snprintf(char *str, size_t size, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - int ret = vsprintf(str, fmt, args); - va_end(args); - return ret; -} -#endif - -double evaluate_scalarfunction(const char *var, double val, const char *funct) +double evaluate_scalarfunction(std::string var, double val, std::string funct) { #if defined(HAVE_NO_PARSER) Msg::Error("Scalar function evaluation not available without Gmsh parser"); return 0.; #else - FILE *tempf; - tempf = gmsh_yyin; - + FILE *tempf = gmsh_yyin; if(!(gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "w"))) { Msg::Error("Unable to open temporary file '%s'", CTX.tmp_filename_fullpath); return 0.; } - // pose "variable = function" and evaluate function - fprintf(gmsh_yyin, "%s = %.16g ;\n", var, val); - fprintf(gmsh_yyin, "ValeurTemporaire__ = %s ;\n", funct); + fprintf(gmsh_yyin, "%s = %.16g ;\n", var.c_str(), val); + fprintf(gmsh_yyin, "ValeurTemporaire__ = %s ;\n", funct.c_str()); fclose(gmsh_yyin); gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "r"); while(!feof(gmsh_yyin)) { @@ -60,7 +42,6 @@ double evaluate_scalarfunction(const char *var, double val, const char *funct) } fclose(gmsh_yyin); gmsh_yyin = tempf; - // retreive value if(gmsh_yysymbols.count("ValeurTemporaire__")) return gmsh_yysymbols["ValeurTemporaire__"][0]; @@ -68,7 +49,7 @@ double evaluate_scalarfunction(const char *var, double val, const char *funct) #endif } -void add_infile(const char *text, const char *fich, bool deleted_something) +void add_infile(std::string text, std::string filename, bool deleted_something) { #if defined(HAVE_NO_PARSER) Msg::Error("GEO file creation not available without Gmsh parser"); @@ -78,8 +59,8 @@ void add_infile(const char *text, const char *fich, bool deleted_something) return; } - fprintf(gmsh_yyin, "%s\n", text); - Msg::StatusBar(2, true, "%s", text); + fprintf(gmsh_yyin, "%s\n", text.c_str()); + Msg::StatusBar(2, true, "%s", text.c_str()); fclose(gmsh_yyin); gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "r"); while(!feof(gmsh_yyin)) { @@ -96,14 +77,14 @@ void add_infile(const char *text, const char *fich, bool deleted_something) CTX.mesh.changed = ENT_ALL; FILE *file; - if(!(file = fopen(fich, "a"))) { - Msg::Error("Unable to open file '%s'", fich); + if(!(file = fopen(filename.c_str(), "a"))) { + Msg::Error("Unable to open file '%s'", filename.c_str()); return; } if(!CTX.expert_mode) { char no_ext[256], ext[256], base[256]; - SplitFileName(fich, no_ext, ext, base); + SplitFileName(filename.c_str(), no_ext, ext, base); if(strlen(ext) && strcmp(ext, ".geo") && strcmp(ext, ".GEO")){ char question[1024]; sprintf(question, @@ -112,7 +93,7 @@ void add_infile(const char *text, const char *fich, bool deleted_something) "(You might want to create a new `.geo' file containing the command\n\n" "Merge \"%s\";\n\n" "and use that file instead. To disable this warning in the future, select\n" - "`Enable expert mode' in the option dialog.)", fich); + "`Enable expert mode' in the option dialog.)", filename.c_str()); if(!Msg::GetBinaryAnswer(question, "Proceed", "Cancel", false)){ fclose(file); return; @@ -120,458 +101,272 @@ void add_infile(const char *text, const char *fich, bool deleted_something) } } - fprintf(file, "%s\n", text); + fprintf(file, "%s\n", text.c_str()); fclose(file); #endif } -void coherence(const char *fich) +void coherence(std::string filename) { - add_infile("Coherence;", fich, true); + add_infile("Coherence;", filename, true); } -static void strncat_list(char *text, List_T *list) +static std::string list2string(List_T *list) { - char text2[BUFFSIZE]; + std::ostringstream sstream; for(int i = 0; i < List_Nbr(list); i++){ int num; List_Read(list, i, &num); - if(!i) - snprintf(text2, BUFFSIZE, "%d", num); - else - snprintf(text2, BUFFSIZE, ",%d", num); - strncat(text, text2, BUFFSIZE-strlen(text)); + if(i) sstream << ", "; + sstream << num; } + return sstream.str(); } -void delet(List_T *list, const char *fich, const char *what) +void delet(List_T *list, std::string filename, std::string what) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Delete {\n %s{", what); - strncat_list(text, list); - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - add_infile(text, fich, true); + std::ostringstream sstream; + sstream << "Delete {\n " << what << "{" << list2string(list) << "};\n}"; + add_infile(sstream.str(), filename, true); } -void add_trsfsurf(int N, int *l, const char *fich, const char *dir) +void add_trsfsurf(int N, int *l, std::string filename, std::string dir) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Transfinite Surface {%d} = {", l[0]); + std::ostringstream sstream; + sstream << "Transfinite Surface {" << l[0] << "} = {"; for(int i = 1; i < N; i++) { - if(i == 1) - snprintf(text2, BUFFSIZE, "%d", l[i]); - else - snprintf(text2, BUFFSIZE, ",%d", l[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); + if(i > 1) sstream << ", "; + sstream << l[i]; } - if (!strcmp(dir,"Left")) - snprintf(text2, BUFFSIZE, "};"); + if(dir == "Left") + sstream << "};"; else - snprintf(text2, BUFFSIZE, "} %s;",dir); - - strncat(text, text2, BUFFSIZE-strlen(text)); - add_infile(text, fich); + sstream << "} " << dir << ";"; + add_infile(sstream.str(), filename); } -void add_charlength(List_T *list, const char *fich, const char *lc) +void add_charlength(List_T *list, std::string filename, std::string lc) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Characteristic Length {"); - strncat_list(text, list); - strncat(text, "} = ", BUFFSIZE-strlen(text)); - strncat(text, lc, BUFFSIZE-strlen(text)); - strncat(text, ";", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Characteristic Length {" << list2string(list) << "} = " << lc << ";"; + add_infile(sstream.str().c_str(), filename); } -void add_recosurf(List_T *list, const char *fich) +void add_recosurf(List_T *list, std::string filename) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Recombine Surface {"); - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Recombine Surface {" << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void add_trsfline(int N, int *l, const char *fich, const char *type, - const char *typearg, const char *pts) +void add_trsfline(int N, int *l, std::string filename, std::string type, + std::string typearg, std::string pts) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Transfinite Line {"); + std::ostringstream sstream; + sstream << "Transfinite Line {"; for(int i = 0; i < N; i++) { - if(!i) - snprintf(text2, BUFFSIZE, "%d", l[i]); - else - snprintf(text2, BUFFSIZE, ",%d", l[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); + if(i) sstream << ", "; + sstream << l[i]; } - if(strlen(typearg)) - snprintf(text2, BUFFSIZE, "} = %s Using %s %s;", pts, type, typearg); + if(typearg.empty()) + sstream << "} = " << pts << ";"; else - snprintf(text2, BUFFSIZE, "} = %s;", pts); - strncat(text, text2, BUFFSIZE-strlen(text)); - add_infile(text, fich); + sstream << "} = " << pts << "Using " << type << " " << typearg << ";"; + add_infile(sstream.str(), filename); } -void add_param(const char *par, const char *value, const char *fich) -{ - char text[BUFFSIZE]; - snprintf(text, BUFFSIZE, "%s = %s;", par, value); - add_infile(text, fich); -} - -void add_point(const char *fich, const char *x, const char *y, const char *z, - const char *lc) -{ - char text[BUFFSIZE]; - int ip = NEWPOINT(); - snprintf(text, BUFFSIZE, "Point(%d) = {%s,%s,%s,%s};", ip, x, y, z, lc); - add_infile(text, fich); -} - -void add_field_option(int field_id, const char *option_name, const char *option_value, - const char *fich) +void add_param(std::string par, std::string value, std::string filename) { std::ostringstream sstream; - sstream<<"Field["<<field_id<<"]."<<std::string(option_name)<<" = " - <<std::string(option_value)<<";"; - add_infile(sstream.str().c_str(),fich); + sstream << par << " = " << value << ";"; + add_infile(sstream.str(), filename); } -void add_field(int field_id, const char *type_name, const char *fich) +void add_point(std::string filename, std::string x, std::string y, + std::string z, std::string lc) { std::ostringstream sstream; - sstream<<"Field["<<field_id<<"] = "<<std::string(type_name)<<";"; - add_infile(sstream.str().c_str(),fich); + sstream << "Point(" << NEWPOINT() << ") = {" << x << ", " << y << ", " + << z << ", " << lc << "};"; + add_infile(sstream.str(), filename); } -void delete_field(int field_id, const char *fich) +void add_field_option(int field_id, std::string option_name, + std::string option_value, std::string filename) { std::ostringstream sstream; - sstream<<"Delete Field ["<<field_id<<"];"; - add_infile(sstream.str().c_str(),fich); + sstream << "Field[" << field_id << "]." << option_name << " = " + << option_value << ";"; + add_infile(sstream.str(), filename); } -void set_background_field(int field_id,const char *fich) +void add_field(int field_id, std::string type_name, std::string filename) { std::ostringstream sstream; - sstream<<"Background Field = "<<field_id<<";"; - add_infile(sstream.str().c_str(),fich); + sstream << "Field[" << field_id << "] = " << type_name << ";"; + add_infile(sstream.str(), filename); } -void add_line(int p1, int p2, const char *fich) +void delete_field(int field_id, std::string filename) { - char text[BUFFSIZE]; - int iseg; - List_T *list = List_Create(2, 2, sizeof(int)); - List_Add(list, &p1); - List_Add(list, &p2); - if((recognize_seg(MSH_SEGM_LINE, list, &iseg))) { - List_Delete(list); - return; - } - List_Delete(list); - - snprintf(text, BUFFSIZE, "Line(%d) = {%d,%d};", NEWLINE(), p1, p2); - add_infile(text, fich); -} - -void add_circ(int p1, int p2, int p3, const char *fich) -{ - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Circle(%d) = {%d,%d,%d};", NEWLINE(), p1, p2, p3); - add_infile(text, fich); -} - -void add_ell(int p1, int p2, int p3, int p4, const char *fich) -{ - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Ellipse(%d) = {%d,%d,%d,%d};", NEWLINE(), p1, p2, - p3, p4); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Delete Field [" << field_id << "];"; + add_infile(sstream.str(), filename); } -void add_spline(int N, int *p, const char *fich) +void set_background_field(int field_id,std::string filename) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Spline(%d) = {", NEWLINE()); - for(int i = 0; i < N; i++) { - if(i != N - 1) - snprintf(text2, BUFFSIZE, "%d,", p[i]); - else - snprintf(text2, BUFFSIZE, "%d};", p[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); - } - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Background Field = " << field_id << ";"; + add_infile(sstream.str(), filename); } -void add_bezier(int N, int *p, const char *fich) +void add_multline(std::string type, int N, int *p, std::string filename) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Bezier(%d) = {", NEWLINE()); + std::ostringstream sstream; + sstream << type << "(" << NEWLINE() << ") = {"; for(int i = 0; i < N; i++) { - if(i != N - 1) - snprintf(text2, BUFFSIZE, "%d,", p[i]); - else - snprintf(text2, BUFFSIZE, "%d};", p[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); + if(i) sstream << ", "; + sstream << p[i]; } - add_infile(text, fich); + sstream << "};"; + add_infile(sstream.str(), filename); } -void add_bspline(int N, int *p, const char *fich) +void add_circ(int p1, int p2, int p3, std::string filename) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "BSpline(%d) = {", NEWLINE()); - for(int i = 0; i < N; i++) { - if(i != N - 1) - snprintf(text2, BUFFSIZE, "%d,", p[i]); - else - snprintf(text2, BUFFSIZE, "%d};", p[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); - } - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Circle(" << NEWLINE() << ") = {" << p1 << ", " << p2 << ", " + << p3 << "};"; + add_infile(sstream.str(), filename); } -void add_multline(int N, int *p, const char *fich) +void add_ell(int p1, int p2, int p3, int p4, std::string filename) { - char text[BUFFSIZE], text2[BUFFSIZE]; - int iseg; - - List_T *list = List_Create(N, 2, sizeof(int)); - for(int i = 0; i < N; i++) - List_Add(list, &p[i]); - if((recognize_seg(MSH_SEGM_LINE, list, &iseg))) { - List_Delete(list); - return; - } - List_Delete(list); - - snprintf(text, BUFFSIZE, "Line(%d) = {", NEWLINE()); - for(int i = 0; i < N; i++) { - if(i != N - 1) - snprintf(text2, BUFFSIZE, "%d,", p[i]); - else - snprintf(text2, BUFFSIZE, "%d};", p[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); - } - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Ellipse(" << NEWLINE() << ") = {" << p1 << ", " << p2 << ", " + << p3 << ", " << p4 << "};"; + add_infile(sstream.str(), filename); } -void add_lineloop(List_T *list, const char *fich, int *numloop) +void add_lineloop(List_T *list, std::string filename, int *numloop) { - char text[BUFFSIZE]; - - if((recognize_loop(list, numloop))) - return; - + if(recognize_loop(list, numloop)) return; *numloop = NEWLINELOOP(); - snprintf(text, BUFFSIZE, "Line Loop(%d) = {", *numloop); - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Line Loop(" << *numloop << ") = {" << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void add_surf(List_T *list, const char *fich, int support, int typ) +void add_surf(std::string type, List_T *list, std::string filename) { - char text[BUFFSIZE]; - - if(typ == 1) { - snprintf(text, BUFFSIZE, "Ruled Surface(%d) = {", NEWSURFACE()); - } - else { - snprintf(text, BUFFSIZE, "Plane Surface(%d) = {", NEWSURFACE()); - } - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << type << "(" << NEWSURFACE() << ") = {" << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void add_surfloop(List_T *list, const char *fich, int *numvol) +void add_surfloop(List_T *list, std::string filename, int *numloop) { - char text[BUFFSIZE]; - - if((recognize_surfloop(list, numvol))) - return; - - *numvol = NEWSURFACELOOP(); - snprintf(text, BUFFSIZE, "Surface Loop(%d) = {", *numvol); - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); + if(recognize_surfloop(list, numloop)) return; + *numloop = NEWSURFACELOOP(); + std::ostringstream sstream; + sstream << "Surface Loop(" << *numloop << ") = {" << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void add_vol(List_T *list, const char *fich) +void add_vol(List_T *list, std::string filename) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Volume(%d) = {", NEWVOLUME()); - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Volume(" << NEWVOLUME() << ") = {" << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void add_trsfvol(int N, int *l, const char *fich) +void add_trsfvol(int N, int *l, std::string filename) { - char text[BUFFSIZE], text2[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Transfinite Volume{%d} = {", l[0]); + std::ostringstream sstream; + sstream << "Transfinite Volume{" << l[0] << "} = {"; for(int i = 1; i < N; i++) { - if(i == 1) - snprintf(text2, BUFFSIZE, "%d", l[i]); - else - snprintf(text2, BUFFSIZE, ",%d", l[i]); - strncat(text, text2, BUFFSIZE-strlen(text)); + if(i > 1) sstream << ", "; + sstream << l[i]; } - snprintf(text2, BUFFSIZE, "};"); - strncat(text, text2, BUFFSIZE-strlen(text)); - add_infile(text, fich); + sstream << "};"; + add_infile(sstream.str(), filename); } -int add_physical(List_T *list, const char *fich, int type) +void add_physical(std::string type, List_T *list, std::string filename) { - char text[BUFFSIZE]; - int num = NEWPHYSICAL(); - - switch (type) { - case ENT_POINT: - snprintf(text, BUFFSIZE, "Physical Point(%d) = {", num); - break; - case ENT_LINE: - snprintf(text, BUFFSIZE, "Physical Line(%d) = {", num); - break; - case ENT_SURFACE: - snprintf(text, BUFFSIZE, "Physical Surface(%d) = {", num); - break; - case ENT_VOLUME: - snprintf(text, BUFFSIZE, "Physical Volume(%d) = {", num); - break; - } - - strncat_list(text, list); - strncat(text, "};", BUFFSIZE-strlen(text)); - add_infile(text, fich); - - return num; + std::ostringstream sstream; + sstream << "Physical " << type << "(" << NEWPHYSICAL() << ") = {" + << list2string(list) << "};"; + add_infile(sstream.str(), filename); } -void translate(int add, List_T *list, const char *fich, const char *what, - const char *tx, const char *ty, const char *tz) +void translate(int add, List_T *list, std::string filename, std::string what, + std::string tx, std::string ty, std::string tz) { - char text[BUFFSIZE]; - - if(add) - snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n Duplicata { %s{", tx, ty, tz, what); - else - snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n %s{", tx, ty, tz, what); - - strncat_list(text, list); - - if(add) - strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); - else - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Translate {" << tx << ", " << ty << ", " << tz << "} {\n "; + if(add) sstream << "Duplicata { "; + sstream << what << "{" << list2string(list) << "};"; + if(add) sstream << " }"; + sstream << "\n}"; + add_infile(sstream.str(), filename); } -void rotate(int add, List_T *list, const char *fich, const char *what, - const char *ax, const char *ay, const char *az, - const char *px, const char *py, const char *pz, const char *angle) +void rotate(int add, List_T *list, std::string filename, std::string what, + std::string ax, std::string ay, std::string az, + std::string px, std::string py, std::string pz, std::string angle) { - char text[BUFFSIZE]; - - if(add) - snprintf(text, BUFFSIZE, "Rotate {{%s,%s,%s}, {%s,%s,%s}, %s} {\n Duplicata { %s{", - ax, ay, az, px, py, pz, angle, what); - else - snprintf(text, BUFFSIZE, "Rotate {{%s,%s,%s}, {%s,%s,%s}, %s} {\n %s{", - ax, ay, az, px, py, pz, angle, what); - - strncat_list(text, list); - - if(add) - strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); - else - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Rotate {{" << ax << ", " << ay << ", " << az << "}, {" + << px << ", " << py << ", " << pz << "}, " << angle << "} {\n "; + if(add) sstream << "Duplicata { "; + sstream << what << "{" << list2string(list) << "};"; + if(add) sstream << " }"; + sstream << "\n}"; + add_infile(sstream.str(), filename); } -void dilate(int add, List_T *list, const char *fich, const char *what, - const char *dx, const char *dy, const char *dz, const char *df) +void dilate(int add, List_T *list, std::string filename, std::string what, + std::string dx, std::string dy, std::string dz, std::string df) { - char text[BUFFSIZE]; - - if(add) - snprintf(text, BUFFSIZE, "Dilate {{%s,%s,%s}, %s} {\n Duplicata { %s{", - dx, dy, dz, df, what); - else - snprintf(text, BUFFSIZE, "Dilate {{%s,%s,%s}, %s} {\n %s{", - dx, dy, dz, df, what); - - strncat_list(text, list); - - if(add) - strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); - else - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Dilate {{" << dx << ", " << dy << ", " << dz << "}, " << df << "} {\n "; + if(add) sstream << "Duplicata { "; + sstream << what << "{" << list2string(list) << "};"; + if(add) sstream << " }"; + sstream << "\n}"; + add_infile(sstream.str(), filename); } -void symmetry(int add, List_T *list, const char *fich, const char *what, - const char *sa, const char *sb, const char *sc, const char *sd) +void symmetry(int add, List_T *list, std::string filename, std::string what, + std::string sa, std::string sb, std::string sc, std::string sd) { - char text[BUFFSIZE]; - - if(add) - snprintf(text, BUFFSIZE, "Symmetry {%s,%s,%s,%s} {\n Duplicata { %s{", - sa, sb, sc, sd, what); - else - snprintf(text, BUFFSIZE, "Symmetry {%s,%s,%s,%s} {\n %s{", - sa, sb, sc, sd, what); - - strncat_list(text, list); - - if(add) - strncat(text, "}; }\n}", BUFFSIZE-strlen(text)); - else - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Symmetry {" << sa << ", " << sb << ", " << sc << ", " << sd << "} {\n "; + if(add) sstream << "Duplicata { "; + sstream << what << "{" << list2string(list) << "};"; + if(add) sstream << " }"; + sstream << "\n}"; + add_infile(sstream.str(), filename); } -void extrude(List_T *list, const char *fich, const char *what, - const char *tx, const char *ty, const char *tz) +void extrude(List_T *list, std::string filename, std::string what, + std::string tx, std::string ty, std::string tz) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Extrude {%s,%s,%s} {\n %s{", tx, ty, tz, what); - strncat_list(text, list); - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Extrude {" << tx << ", " << ty << ", " << tz << "} {\n " << what + << "{" << list2string(list) << "};\n}"; + add_infile(sstream.str(), filename); } -void protude(List_T *list, const char *fich, const char *what, - const char *ax, const char *ay, const char *az, - const char *px, const char *py, const char *pz, const char *angle) +void protude(List_T *list, std::string filename, std::string what, + std::string ax, std::string ay, std::string az, + std::string px, std::string py, std::string pz, std::string angle) { - char text[BUFFSIZE]; - - snprintf(text, BUFFSIZE, "Extrude {{%s,%s,%s}, {%s,%s,%s}, %s} {\n %s{", - ax, ay, az, px, py, pz, angle, what); - strncat_list(text, list); - strncat(text, "};\n}", BUFFSIZE-strlen(text)); - add_infile(text, fich); + std::ostringstream sstream; + sstream << "Extrude {{" << ax << ", " << ay << ", " << az << "}, {" + << px << ", " << py << ", " << pz << "}, " << angle << "} {\n " + << what << "{" << list2string(list) << "};\n}"; + add_infile(sstream.str(), filename); } diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h index d5523dcd731b104913e4e5f076b9fa788a5fbeea..f3408363dd1bd625e93183bc37b9f18f6d0790d8 100644 --- a/Geo/GeoStringInterface.h +++ b/Geo/GeoStringInterface.h @@ -6,51 +6,49 @@ #ifndef _GEO_STRING_INTERFACE_H_ #define _GEO_STRING_INTERFACE_H_ +#include <string> #include "ListUtils.h" -double evaluate_scalarfunction(const char *var, double val, const char *funct); +double evaluate_scalarfunction(std::string var, double val, std::string funct); -void coherence(const char *fich); -void delet(List_T *list, const char *fich, const char *what); -void add_infile(const char *text, const char *fich, bool deleted_something=false); -void add_trsfline(int N, int *l, const char *fich, const char *type, - const char *typearg, const char *pts); -void add_trsfsurf(int N, int *l, const char *fich, const char *dir); -void add_trsfvol(int N, int *l, const char *fich); -void add_charlength(List_T *list, const char *fich, const char *lc); -void add_recosurf(List_T *list, const char *fich); -void add_param(const char *par, const char *value, const char *fich); -void add_point(const char *fich, const char *x, const char *y, const char *z, - const char *lc); -void add_line(int p1, int p2, const char *fich); -void add_circ(int p1, int p2, int p3, const char *fich); -void add_ell(int p1, int p2, int p3, int p4, const char *fich); -void add_spline(int N, int *p, const char *fich); -void add_bezier(int N, int *p, const char *fich); -void add_bspline(int N, int *p, const char *fich); -void add_field_option(int field_id, const char *option_name, const char *option_value, const char *fich); -void add_field(int field_id, const char *type_name, const char *fich); -void delete_field(int field_id, const char *fich); -void set_background_field(int field_id,const char *fich); -void add_multline(int N, int *p, const char *fich); -void add_lineloop(List_T *list, const char *fich, int *numloop); -void add_surf(List_T *list, const char *fich, int support, int typ); -void add_surfloop(List_T *list, const char *fich, int *numvol); -void add_vol(List_T *list, const char *fich); -int add_physical(List_T *list, const char *fich, int type); -void translate(int add, List_T *list, const char *fich, const char *what, - const char *tx, const char *ty, const char *tz); -void rotate(int add, List_T *list, const char *fich, const char *what, - const char *ax, const char *ay, const char *az, - const char *px, const char *py, const char *pz, const char *angle); -void dilate(int add, List_T *list, const char *fich, const char *what, - const char *dx, const char *dy, const char *dz, const char *df); -void symmetry(int add, List_T *list, const char *fich, const char *what, - const char *sa, const char *sb, const char *sc, const char *sd); -void extrude(List_T *list, const char *fich, const char *what, const char *tx, - const char *ty, const char *tz); -void protude(List_T *list, const char *fich, const char *what, - const char *ax, const char *ay, const char *az, - const char *px, const char *py, const char *pz, const char *angle); +void coherence(std::string filename); +void delet(List_T *list, std::string filename, std::string what); +void add_infile(std::string text, std::string filename, bool deleted_something=false); +void add_trsfline(int N, int *l, std::string filename, std::string type, + std::string typearg, std::string pts); +void add_trsfsurf(int N, int *l, std::string filename, std::string dir); +void add_trsfvol(int N, int *l, std::string filename); +void add_charlength(List_T *list, std::string filename, std::string lc); +void add_recosurf(List_T *list, std::string filename); +void add_param(std::string par, std::string value, std::string filename); +void add_point(std::string filename, std::string x, std::string y, std::string z, + std::string lc); +void add_multline(std::string type, int N, int *p, std::string filename); +void add_circ(int p1, int p2, int p3, std::string filename); +void add_ell(int p1, int p2, int p3, int p4, std::string filename); +void add_field_option(int field_id, std::string option_name, std::string option_value, + std::string filename); +void add_field(int field_id, std::string type_name, std::string filename); +void delete_field(int field_id, std::string filename); +void set_background_field(int field_id,std::string filename); +void add_lineloop(List_T *list, std::string filename, int *numloop); +void add_surf(std::string type, List_T *list, std::string filename); +void add_surfloop(List_T *list, std::string filename, int *numvol); +void add_vol(List_T *list, std::string filename); +void add_physical(std::string type, List_T *list, std::string filename); +void translate(int add, List_T *list, std::string filename, std::string what, + std::string tx, std::string ty, std::string tz); +void rotate(int add, List_T *list, std::string filename, std::string what, + std::string ax, std::string ay, std::string az, + std::string px, std::string py, std::string pz, std::string angle); +void dilate(int add, List_T *list, std::string filename, std::string what, + std::string dx, std::string dy, std::string dz, std::string df); +void symmetry(int add, List_T *list, std::string filename, std::string what, + std::string sa, std::string sb, std::string sc, std::string sd); +void extrude(List_T *list, std::string filename, std::string what, std::string tx, + std::string ty, std::string tz); +void protude(List_T *list, std::string filename, std::string what, + std::string ax, std::string ay, std::string az, + std::string px, std::string py, std::string pz, std::string angle); #endif diff --git a/configure b/configure index 7411648e18d7dfffa9b0a43268819fc21e942d5d..c129aad5a20da4b9216d681f2a445e153a6726a9 100755 --- a/configure +++ b/configure @@ -4369,93 +4369,6 @@ else FLAGS="-DHAVE_NO_VSNPRINTF ${FLAGS}" fi -{ echo "$as_me:$LINENO: checking for snprintf" >&5 -echo $ECHO_N "checking for snprintf... $ECHO_C" >&6; } -if test "${ac_cv_func_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define snprintf to an innocuous variant, in case <limits.h> declares snprintf. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define snprintf innocuous_snprintf - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char snprintf (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef snprintf - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char snprintf (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_snprintf || defined __stub___snprintf -choke me -#endif - -int -main () -{ -return snprintf (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_snprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_snprintf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_snprintf" >&5 -echo "${ECHO_T}$ac_cv_func_snprintf" >&6; } -if test $ac_cv_func_snprintf = yes; then - : -else - FLAGS="-DHAVE_NO_SNPRINTF ${FLAGS}" -fi - cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ diff --git a/configure.in b/configure.in index ca1392819ab22b48d25a0da5fab998f1b3d4f414..d65a12f6fb9506de0760f2e75727bd3c8263305f 100644 --- a/configure.in +++ b/configure.in @@ -378,7 +378,6 @@ AC_CHECK_LIB(m,main) dnl Check for various functions AC_CHECK_FUNC(vsnprintf,,FLAGS="-DHAVE_NO_VSNPRINTF ${FLAGS}") -AC_CHECK_FUNC(snprintf,,FLAGS="-DHAVE_NO_SNPRINTF ${FLAGS}") dnl Check if Unix98 socklen_t type is available AC_TRY_COMPILE( diff --git a/utils/misc/variables.msvc b/utils/misc/variables.msvc index 83b89f0174da9deadb7c66bc117a07b0a38bef82..133aa07e156e2f886d7b6140e91562be51e4c9cb 100644 --- a/utils/misc/variables.msvc +++ b/utils/misc/variables.msvc @@ -45,7 +45,7 @@ endif LINKER=cl /F16777216 # All compiler flags except optimization flags -FLAGS=/DWIN32 /D_USE_MATH_DEFINES /DHAVE_NO_DLL /DHAVE_NO_VSNPRINTF /DHAVE_NO_SNPRINTF /DHAVE_NO_SOCKLEN_T /DHAVE_ANN /DHAVE_MATH_EVAL +FLAGS=/DWIN32 /D_USE_MATH_DEFINES /DHAVE_NO_DLL /DHAVE_NO_VSNPRINTF /DHAVE_NO_SOCKLEN_T /DHAVE_ANN /DHAVE_MATH_EVAL # Additional system includes ($INCLUDE is automatically defined by MSVC when # you launch the MSVC command prompt)