#include <math.h>
#include <ctype.h>
#include "libmesh5.h"
-
+#ifdef WIN32
+#include <windows.h>
+#endif
/*----------------------------------------------------------*/
/* Defines */
static int GmfIniFlg=0;
static GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
+/* see MeshGems/Docs/meshgems_formats_description.pdf */
static const char *GmfKwdFmt[ GmfMaxKwd + 1 ][4] =
{ {"Reserved", "", "", ""},
{"MeshVersionFormatted", "", "", "i"},
{"Iterations", "","","i"},
{"Time", "","","r"},
{"Fault_SmallTri", "Fault_SmallTri","i","i"},
- {"CoarseHexahedra", "CoarseHexahedron", "i", "i"}
+ {"CoarseHexahedra", "CoarseHexahedron", "i", "i"},
+ {"Fault_MultipleEdge", "Fault_MultipleEdge", "i", "i"}
};
GmfMshSct *msh;
char *ptr;
int k;
-
+#if defined(WIN32) && defined(UNICODE)
+ wchar_t* encoded = 0;
+ int size_needed = 0;
+#endif
if(!GmfIniFlg)
{
for(i=0;i<=MaxMsh;i++)
va_end(VarArg);
/* Create the name string and open the file */
-
- if(!(msh->hdl = fopen(msh->FilNam, "rb")))
+#if defined(WIN32) && defined(UNICODE)
+ size_needed = MultiByteToWideChar(CP_UTF8, 0, msh->FilNam, strlen(msh->FilNam), NULL, 0);
+ encoded = malloc((size_needed + 1)*sizeof(wchar_t));
+ MultiByteToWideChar(CP_UTF8, 0, msh->FilNam, strlen(msh->FilNam), encoded, size_needed);
+ encoded[size_needed] = '\0';
+ if (!(msh->hdl = _wfopen(encoded, L"rb")))
+#else
+ if (!(msh->hdl = fopen(msh->FilNam, "rb")))
+#endif
{
free (msh);
+#if defined(WIN32) && defined(UNICODE)
+ free(encoded);
+#endif
return(0);
}
+#if defined(WIN32) && defined(UNICODE)
+ free(encoded);
+#endif
+
/* Read the endian coding tag, the mesh version and the mesh dimension (mandatory kwd) */
if(msh->typ & Bin)
}
/* Create the mesh file */
-
+#if defined(WIN32) && defined(UNICODE)
+ size_needed = MultiByteToWideChar(CP_UTF8, 0, msh->FilNam, strlen(msh->FilNam), NULL, 0);
+ encoded = malloc((size_needed + 1) * sizeof(wchar_t));
+ MultiByteToWideChar(CP_UTF8, 0, msh->FilNam, strlen(msh->FilNam), encoded, size_needed);
+ encoded[size_needed] = '\0';
+ if (!(msh->hdl = _wfopen(encoded, L"wb")))
+#else
if(!(msh->hdl = fopen(msh->FilNam, "wb")))
+#endif
{
free (msh);
+#if defined(WIN32) && defined(UNICODE)
+ free(encoded);
+#endif
return(0);
}
+#if defined(WIN32) && defined(UNICODE)
+ free(encoded);
+#endif
GmfMshTab[ MshIdx ] = msh;
{
for(i=0;i<kwd->SolSiz;i++)
if(kwd->fmt[i] == 'r')
- fprintf(msh->hdl, "%.15lg ", va_arg(VarArg, double));
+ fprintf(msh->hdl, "%.15g ", va_arg(VarArg, double)); /* was "%.15lg and warning "ISO C90 does not support the '%lg' gnu_printf format"*/
else if(kwd->fmt[i] == 'n') {
nb_repeat = va_arg(VarArg, int);
fprintf(msh->hdl, "%d ", nb_repeat);
if(msh->typ & Asc)
for(j=0;j<kwd->SolSiz;j++)
- fprintf(msh->hdl, "%.15lg ", DblSolTab[j]);
+ fprintf(msh->hdl, "%.15g ", DblSolTab[j]); /* was " %.15lg " and warning "ISO C90 does not support the '%lg' gnu_printf format" */
else
RecBlk(msh, (unsigned char *)DblSolTab, kwd->NmbWrd);
}
{
/* Search which kwd code this string is associated with,
then get its header and save the current position in file (just before the data) */
-
+ /* printf("libmesh ScaKwdTab %s\n", str); */
for(KwdCod=1; KwdCod<= GmfMaxKwd; KwdCod++)
if(!strcmp(str, GmfKwdFmt[ KwdCod ][0]))
{
i = kwd->SolSiz = kwd->NmbWrd = 0;
- while(i < strlen(InpFmt))
+ while(i < (int)strlen(InpFmt))
{
chr = InpFmt[ i++ ];