diff --git a/api/GenApi.py b/api/GenApi.py index 6d002dbfc0a9e3bc73a247cef4756792500b41d1..69605e034cdb15292fbcd1cb67a29817736a5413 100644 --- a/api/GenApi.py +++ b/api/GenApi.py @@ -420,10 +420,10 @@ class API: f.write("\n") f.write("/* gmsh"+module.name+" */\n") for rtype, name, args in module.fs: - f.write("GMSH_API int gmshc" + module.name+name+"("+", ".join( - list((a.c for a in args))) + - ((", "+rtype.rtype_c + " *result") if rtype else "") + - ");\n") + f.write("GMSH_API "+(rtype.rtype_c if rtype else "void")) + f.write(" gmshc" + module.name+name+"(" + +", ".join(list((a.c for a in args+(oint("ierr"),)))) + + ");\n") f.write(c_footer) with open(filename+".cc","w") as f: @@ -432,22 +432,21 @@ class API: f.write("\n") f.write("/* gmsh"+module.name+" */\n") for rtype, name, args in module.fs: - #rt = rtype.rtype_c if rtype else "void" - f.write("int gmshc" + module.name+name+"("+", ".join( - list((a.c for a in args)))+ - ((", "+rtype.rtype_c + " *result") if rtype else "") + - "){\n" - ) + f.write(rtype.rtype_c if rtype else "void") + f.write(" gmshc" + module.name+name+"(" + +", ".join(list((a.c for a in args+(oint("ierr"),))))+"){\n") + if rtype: + f.write(" "+ rtype.rtype_c + " result_api_;\n") + f.write("if(ierr) *ierr = 0;\n"); f.write(" try {\n"); f.write("".join((a.c_cpp_pre for a in args))) if rtype: - f.write(rtype.rtype_c + " result_api_ = ") + f.write(" result_api_ = ") f.write(" gmsh" + module.name+name+"("+", ".join( list((a.c_cpp_arg for a in args)))+ ");\n") - if rtype: - f.write("if(result) *result = result_api_;\n") f.write("".join((a.c_cpp_post for a in args))) - f.write(" } catch(int api_ierr_) {return api_ierr_;}\n"); - f.write(" return 0;\n"); + f.write(" } catch(int api_ierr_) {if (ierr) *ierr = api_ierr_;}\n"); + if rtype : + f.write(" return result_api_;\n"); f.write("}\n\n") diff --git a/api/main.c b/api/main.c index a43fba97bf82d0fc34a8872f9a9a084dc776bb0a..9d3405c10c96bcecb788131088e909640a3dd8a5 100644 --- a/api/main.c +++ b/api/main.c @@ -1,27 +1,26 @@ #include <stdio.h> #include "gmshc.h" -#define chk(ierr) if (ierr != 0) {fprintf(stderr, "ERROR on line %i in function '%s': gmsh function return non-zero error code: %i\n",__LINE__, __FUNCTION__,ierr); gmshcFinalize(); exit(ierr);} +#define chk(ierr) if (ierr != 0) {fprintf(stderr, "ERROR on line %i in function '%s': gmsh function return non-zero error code: %i\n",__LINE__, __FUNCTION__,ierr); gmshcFinalize(NULL); exit(ierr);} void genGeometry() { int ierr; - ierr = gmshcModelCreate("square"); - ierr = gmshcModelGeoAddPoint(0,0,0,0.1,1,NULL);chk(ierr); - ierr = gmshcModelGeoAddPoint(1,0,0,0.1,2,NULL);chk(ierr); - ierr = gmshcModelGeoAddPoint(1,1,0,0.1,3,NULL);chk(ierr); - ierr = gmshcModelGeoAddPoint(0,1,0,0.1,4,NULL);chk(ierr); - ierr = gmshcModelGeoAddLine(1,2,1,NULL); chk(ierr); - ierr = gmshcModelGeoAddLine(2,3,2,NULL); chk(ierr); - ierr = gmshcModelGeoAddLine(3,4,3,NULL); chk(ierr); + gmshcModelCreate("square",&ierr);chk(ierr); + gmshcModelGeoAddPoint(0,0,0,0.1,1,&ierr);chk(ierr); + gmshcModelGeoAddPoint(1,0,0,0.1,2,&ierr);chk(ierr); + gmshcModelGeoAddPoint(1,1,0,0.1,3,&ierr);chk(ierr); + gmshcModelGeoAddPoint(0,1,0,0.1,4,&ierr);chk(ierr); + gmshcModelGeoAddLine(1,2,1,&ierr); chk(ierr); + gmshcModelGeoAddLine(2,3,2,&ierr); chk(ierr); + gmshcModelGeoAddLine(3,4,3,&ierr); chk(ierr); // try automatic assignement of tag - int line4; - ierr = gmshcModelGeoAddLine(4,1,-1,&line4); chk(ierr); + int line4 = gmshcModelGeoAddLine(4,1,-1,&ierr); chk(ierr); printf("line4 received tag %i\n\n", line4); int ll[] = {1,2,3,line4}; - ierr = gmshcModelGeoAddLineLoop(ll,4,1,NULL); chk(ierr); + gmshcModelGeoAddLineLoop(ll,4,1,&ierr); chk(ierr); int s[] = {1}; - ierr = gmshcModelGeoAddPlaneSurface(ll,1,6,NULL); chk(ierr); - ierr = gmshcModelGeoSynchronize(); chk(ierr); + gmshcModelGeoAddPlaneSurface(ll,1,6,&ierr); chk(ierr); + gmshcModelGeoSynchronize(&ierr); chk(ierr); } void printMesh() { @@ -29,13 +28,13 @@ void printMesh() { int *dimTags; size_t ndimTags; - ierr = gmshcModelGetEntities(&dimTags, &ndimTags, -1); chk(ierr); + gmshcModelGetEntities(&dimTags, &ndimTags, -1,&ierr); chk(ierr); for (size_t ie = 0; ie < ndimTags/2; ++ie) { int *types, **elementTags, **vertexTags; size_t ntypes, *nelementTags, nnelementTags, *nvertexTags, nnvertexTags; - ierr = gmshcModelGetMeshElements(dimTags[ie*2+0], dimTags[ie*2+1], &types, &ntypes, &elementTags, &nelementTags, &nnelementTags, &vertexTags, &nvertexTags, &nnvertexTags); chk(ierr); + gmshcModelGetMeshElements(dimTags[ie*2+0], dimTags[ie*2+1], &types, &ntypes, &elementTags, &nelementTags, &nnelementTags, &vertexTags, &nvertexTags, &nnvertexTags,&ierr); chk(ierr); printf("entity %i of dim %i\n", dimTags[ie*2+1], dimTags[ie*2+0]); for (size_t i = 0; i < nnelementTags; ++i) { @@ -66,16 +65,16 @@ void printMesh() { void genError() { int ierr; printf("\n** generate an error **\n"); - ierr = gmshcModelGetMeshElements(999, 999, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); chk(ierr); + gmshcModelGetMeshElements(999, 999, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&ierr); chk(ierr); } int main(int argc, char **argv) { int ierr; gmshcInitialize(argc, argv); genGeometry(); - ierr = gmshcModelMesh(2); chk(ierr); - ierr = gmshcExport("square.msh"); chk(ierr); + gmshcModelMesh(2,&ierr); chk(ierr); + gmshcExport("square.msh",&ierr); chk(ierr); printMesh(); genError(); - ierr = gmshcFinalize(); chk(ierr); + gmshcFinalize(&ierr); chk(ierr); }