diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 8b7633e57d72d1c4cd866460006a7a386e015bb4..1b28f880816b6df883287ce688f6b5ca24ecc990 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.385 2005-12-16 17:35:32 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.386 2005-12-16 20:20:17 geuzaine Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // @@ -594,12 +594,6 @@ void file_merge_cb(CALLBACK_ARGS) WID->set_context(menu_post, 0); } -int _save_auto(char *name) -{ - CreateOutputFile(name, FORMAT_AUTO); - return 1; -} - int _save_options(char *name) { return options_dialog(name); @@ -722,6 +716,25 @@ int _save_yuv(char *name) return 1; } +int _save_auto(char *name) +{ + switch(GuessFileFormatFromFileName(name)){ + case FORMAT_OPT : return _save_options(name); + case FORMAT_MSH : return _save_msh(name); + case FORMAT_PS : return _save_ps(name); + case FORMAT_EPS : return _save_eps(name); + case FORMAT_EPSTEX : return _save_epstex(name); + case FORMAT_PDF : return _save_pdf(name); + case FORMAT_PDFTEX : return _save_pdftex(name); + case FORMAT_JPEGTEX : return _save_jpegtex(name); + case FORMAT_JPEG : return _save_jpeg(name); + case FORMAT_GIF : return _save_gif(name); + default : + CreateOutputFile(name, FORMAT_AUTO); + return 1; + } +} + typedef struct{ char *pat; int (*func) (char *name); diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp index d0d28fa240ea6ae14c9801bdb4a6faeed3c6c66e..d1bc155bf847d7760f744b251125b51cc53b8330 100644 --- a/Graphics/CreateFile.cpp +++ b/Graphics/CreateFile.cpp @@ -1,4 +1,4 @@ -// $Id: CreateFile.cpp,v 1.71 2005-12-16 19:17:33 geuzaine Exp $ +// $Id: CreateFile.cpp,v 1.72 2005-12-16 20:20:17 geuzaine Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // @@ -45,12 +45,55 @@ void FillBuffer(void) Draw2d(); } +int GuessFileFormatFromFileName(char *name) +{ + int len; + char ext[256]; + + for(len = strlen(name) - 1; len >= 0; len--) { + if(name[len] == '.') { + strcpy(ext, &name[len]); + break; + } + } + if(len <= 0) + strcpy(ext, ""); + + if(!strcmp(ext, ".geo")) return FORMAT_GEO; + else if(!strcmp(ext, ".opt")) return FORMAT_OPT; + else if(!strcmp(ext, ".msh")) return FORMAT_MSH; + else if(!strcmp(ext, ".unv")) return FORMAT_UNV; + else if(!strcmp(ext, ".p3d")) return FORMAT_P3D; + else if(!strcmp(ext, ".dmg")) return FORMAT_DMG; + else if(!strcmp(ext, ".stl")) return FORMAT_STL; + else if(!strcmp(ext, ".pos")) return FORMAT_LC; + else if(!strcmp(ext, ".gif")) return FORMAT_GIF; + else if(!strcmp(ext, ".jpg")) return FORMAT_JPEG; + else if(!strcmp(ext, ".jpeg")) return FORMAT_JPEG; + else if(!strcmp(ext, ".png")) return FORMAT_PNG; + else if(!strcmp(ext, ".ps")) return FORMAT_PS; + else if(!strcmp(ext, ".eps")) return FORMAT_EPS; + else if(!strcmp(ext, ".pdf")) return FORMAT_PDF; + else if(!strcmp(ext, ".tex")) return FORMAT_TEX; + else if(!strcmp(ext, ".epstex")) return FORMAT_EPSTEX; + else if(!strcmp(ext, ".pdftex")) return FORMAT_PDFTEX; + else if(!strcmp(ext, ".jpegtex")) return FORMAT_JPEGTEX; + else if(!strcmp(ext, ".ppm")) return FORMAT_PPM; + else if(!strcmp(ext, ".yuv")) return FORMAT_YUV; + else if(!strcmp(ext, ".gref")) return FORMAT_GREF; + else if(!strcmp(ext, ".Gref")) return FORMAT_GREF; + else if(!strcmp(ext, ".wrl")) return FORMAT_VRML; + else{ + Msg(GERROR, "Unknown extension '%s' for automatic format detection", ext); + return -1; + } +} + void CreateOutputFile(char *name, int format) { FILE *fp; GLint size3d, viewport[4], width, height; - char ext[256]; - int len, res, oldformat, psformat, pssort, psoptions; + int res, oldformat, psformat, pssort, psoptions, guess; if(!name || !strlen(name)) return; @@ -65,41 +108,8 @@ void CreateOutputFile(char *name, int format) switch (format) { case FORMAT_AUTO: - for(len = strlen(name) - 1; len >= 0; len--) { - if(name[len] == '.') { - strcpy(ext, &name[len]); - break; - } - } - if(len <= 0) - strcpy(ext, ""); - - if(!strcmp(ext, ".geo")) CreateOutputFile(name, FORMAT_GEO); - else if(!strcmp(ext, ".opt")) CreateOutputFile(name, FORMAT_OPT); - else if(!strcmp(ext, ".msh")) CreateOutputFile(name, FORMAT_MSH); - else if(!strcmp(ext, ".unv")) CreateOutputFile(name, FORMAT_UNV); - else if(!strcmp(ext, ".p3d")) CreateOutputFile(name, FORMAT_P3D); - else if(!strcmp(ext, ".dmg")) CreateOutputFile(name, FORMAT_DMG); - else if(!strcmp(ext, ".stl")) CreateOutputFile(name, FORMAT_STL); - else if(!strcmp(ext, ".pos")) CreateOutputFile(name, FORMAT_LC); - else if(!strcmp(ext, ".gif")) CreateOutputFile(name, FORMAT_GIF); - else if(!strcmp(ext, ".jpg")) CreateOutputFile(name, FORMAT_JPEG); - else if(!strcmp(ext, ".jpeg")) CreateOutputFile(name, FORMAT_JPEG); - else if(!strcmp(ext, ".png")) CreateOutputFile(name, FORMAT_PNG); - else if(!strcmp(ext, ".ps")) CreateOutputFile(name, FORMAT_PS); - else if(!strcmp(ext, ".eps")) CreateOutputFile(name, FORMAT_EPS); - else if(!strcmp(ext, ".pdf")) CreateOutputFile(name, FORMAT_PDF); - else if(!strcmp(ext, ".tex")) CreateOutputFile(name, FORMAT_TEX); - else if(!strcmp(ext, ".epstex")) CreateOutputFile(name, FORMAT_EPSTEX); - else if(!strcmp(ext, ".pdftex")) CreateOutputFile(name, FORMAT_PDFTEX); - else if(!strcmp(ext, ".jpegtex")) CreateOutputFile(name, FORMAT_JPEGTEX); - else if(!strcmp(ext, ".ppm")) CreateOutputFile(name, FORMAT_PPM); - else if(!strcmp(ext, ".yuv")) CreateOutputFile(name, FORMAT_YUV); - else if(!strcmp(ext, ".gref")) CreateOutputFile(name, FORMAT_GREF); - else if(!strcmp(ext, ".Gref")) CreateOutputFile(name, FORMAT_GREF); - else if(!strcmp(ext, ".wrl")) CreateOutputFile(name, FORMAT_VRML); - else - Msg(GERROR, "Unknown extension '%s' for automatic format detection", ext); + guess = GuessFileFormatFromFileName(name); + if(guess >= 0) CreateOutputFile(name, guess); break; case FORMAT_GEO: diff --git a/Graphics/CreateFile.h b/Graphics/CreateFile.h index addbfaa69b788aca97ae78357deacb72bca175fa..c7117d5e53bd407da39022d070b24b114e3d675a 100644 --- a/Graphics/CreateFile.h +++ b/Graphics/CreateFile.h @@ -20,6 +20,7 @@ // // Please report all bugs and problems to <gmsh@geuz.org>. -void CreateOutputFile (char *name, int format) ; +int GuessFileFormatFromFileName(char *name); +void CreateOutputFile (char *name, int format); #endif