#include "MagickCore/studio.h"
#if defined(MAGICKCORE_WINDOWS_SUPPORT)
#include "MagickCore/client.h"
+#include "MagickCore/exception-private.h"
#include "MagickCore/locale_.h"
#include "MagickCore/log.h"
#include "MagickCore/magick.h"
% %
% %
% %
+% N T A r g v T o U T F 8 %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NTArgvToUTF8() converts the wide command line arguments to UTF-8 to ensure
+% compatibility with Linux.
+%
+% The format of the NTArgvToUTF8 method is:
+%
+% char **NTArgvToUTF8(const int argc,wchar_t **argv)
+%
+% A description of each parameter follows:
+%
+% o argc: the number of command line arguments.
+%
+% o argv: the wide-character command line arguments.
+%
+*/
+MagickExport char **NTArgvToUTF8(const int argc,wchar_t **argv)
+{
+ char
+ **utf8;
+
+ ssize_t
+ i;
+
+ utf8=(char **) AcquireQuantumMemory(argc,sizeof(*utf8));
+ if (utf8 == (char **) NULL)
+ ThrowFatalException(ResourceLimitFatalError,"UnableToConvertStringToARGV");
+ for (i=0; i < (ssize_t) argc; i++)
+ {
+ ssize_t
+ count;
+
+ count=WideCharToMultiByte(CP_UTF8,0,argv[i],-1,NULL,0,NULL,NULL);
+ if (count < 0)
+ count=0;
+ utf8[i]=(char *) AcquireQuantumMemory(count+1,sizeof(**utf8));
+ if (utf8[i] == (char *) NULL)
+ {
+ for (i--; i >= 0; i--)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ ThrowFatalException(ResourceLimitFatalError,
+ "UnableToConvertStringToARGV");
+ }
+ count=WideCharToMultiByte(CP_UTF8,0,argv[i],-1,utf8[i],count,NULL,NULL);
+ utf8[i][count]=0;
+ }
+ return(utf8);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
% N T C l o s e D i r e c t o r y %
% %
% %
#endif
#if !defined(access)
+#if defined(_VISUALC_) && (_MSC_VER >= 1400)
# define access(path,mode) _access_s(path,mode)
#endif
+#endif
#if !defined(chdir)
# define chdir _chdir
#endif
#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
!(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
# define fseek _fseeki64
-#else
-# define fseek _fseek
#endif
#endif
#if !defined(fstat) && !defined(__BORLANDC__)
#if defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(Windows95) && \
!(defined(_MSC_VER) && (_MSC_VER < 1400)) && (__MSVCRT_VERSION__ < 0x800)
# define ftell _ftelli64
-#else
-# define ftell _ftell
#endif
#endif
#if !defined(ftruncate)
#endif
extern MagickExport char
- *NTGetLastError(void);
+ *NTGetLastError(void),
+ **NTArgvToUTF8(const int argc,wchar_t **);
extern MagickExport const GhostInfo
*NTGhostscriptDLLVectors(void);
%
*/
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
-int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state)
-{
- char
- **argv;
-
- int
- argc,
- main(int,char **);
-
- (void) instance;
- (void) last;
- (void) state;
- argv=StringToArgv(command,&argc);
- return(main(argc,argv));
-}
-#endif
-
-int main(int argc,char **argv)
+int AnimateMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(AnimateMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=AnimateMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+int CompareMain(int argc,char **argv)
{
char
*metadata;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(CompareMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=CompareMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int CompositeMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(CompositeMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=CompositeMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int ConjureMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(ConjureMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=ConjureMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int ConvertMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(ConvertMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=ConvertMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
*/
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
-int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state)
-{
- char
- **argv;
-
- int
- argc,
- main(int,char **);
-
- (void) instance;
- (void) last;
- (void) state;
- argv=StringToArgv(command,&argc);
- return(main(argc,argv));
-}
-#endif
-
-int main(int argc,char **argv)
+int DisplayMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(DisplayMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=DisplayMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int IdentifyMain(int argc,char **argv)
{
char
*metadata;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(IdentifyMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=IdentifyMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
*/
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
-int WINAPI WinMain(HINSTANCE instance,HINSTANCE last,LPSTR command,int state)
-{
- char
- **argv;
-
- int
- argc,
- main(int,char **);
-
- (void) instance;
- (void) last;
- (void) state;
- argv=StringToArgv(command,&argc);
- return(main(argc,argv));
-}
-#endif
-
-int main(int argc,char **argv)
+int ImportMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(ImportMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=ImportMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int MogrifyMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(MogrifyMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=MogrifyMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int MontageMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(MontageMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=MontageMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif
%
%
*/
-int main(int argc,char **argv)
+
+int StreamMain(int argc,char **argv)
{
ExceptionInfo
*exception;
MagickCoreTerminus();
return(status);
}
+
+#if !defined(MAGICKCORE_WINDOWS_SUPPORT) || defined(__CYGWIN__) || defined(__MINGW32__)
+int main(int argc,char **argv)
+{
+ return(StreamMain(argc,argv));
+}
+#else
+int wmain(int argc,wchar_t *argv[])
+{
+ char
+ **utf8;
+
+ int
+ status;
+
+ register int
+ i;
+
+ utf8=NTArgvToUTF8(argc,argv);
+ status=StreamMain(argc,utf8);
+ for (i=0; i < argc; i++)
+ utf8[i]=DestroyString(utf8[i]);
+ utf8=(char **) RelinquishMagickMemory(utf8);
+ return(status);
+}
+#endif