diff options
Diffstat (limited to 'src/fl_call_main.c')
| -rw-r--r-- | src/fl_call_main.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/fl_call_main.c b/src/fl_call_main.c index 2b61b62e9..c1ed058dd 100644 --- a/src/fl_call_main.c +++ b/src/fl_call_main.c @@ -51,6 +51,7 @@ # include <windows.h> # include <stdio.h> # include <stdlib.h> +#include <FL/fl_utf8.H> # ifdef __MWERKS__ # include <crtl.h> @@ -63,9 +64,26 @@ extern int main(int, char *[]); # define __argv _argv # endif /* BORLAND5 */ +//static int mbcs2utf(const char *s, int l, char *dst, unsigned dstlen) +static int mbcs2utf(const char *s, int l, char *dst) +{ + static xchar *mbwbuf; + unsigned dstlen = 0; + if (!s) return 0; + dstlen = (l * 6) + 6; + mbwbuf = (xchar*)malloc(dstlen * sizeof(xchar)); + l = mbstowcs(mbwbuf, s, l); +//l = fl_unicode2utf(mbwbuf, l, dst); + l = fl_utf8fromwc(dst, dstlen, mbwbuf, l); + dst[l] = 0; + free(mbwbuf); + return l; +} + int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { - int rc; + int rc, i; + char **ar; # ifdef _DEBUG /* @@ -84,8 +102,30 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, freopen("conout$", "w", stderr); # endif /* _DEBUG */ + ar = (char**) malloc(sizeof(char*) * (__argc + 1)); + i = 0; + while (i < __argc) { + int l; + unsigned dstlen; + if (__wargv ) { + for (l = 0; __wargv[i] && __wargv[i][l]; l++) {}; // is this just wstrlen??? + dstlen = (l * 5) + 1; + ar[i] = (char*) malloc(dstlen); +// ar[i][fl_unicode2utf(__wargv[i], l, ar[i])] = 0; + dstlen = fl_utf8fromwc(ar[i], dstlen, __wargv[i], l); + ar[i][dstlen] = 0; + } else { + for (l = 0; __argv[i] && __argv[i][l]; l++) {}; + dstlen = (l * 5) + 1; + ar[i] = (char*) malloc(dstlen); +// ar[i][mbcs2utf(__argv[i], l, ar[i], dstlen)] = 0; + ar[i][mbcs2utf(__argv[i], l, ar[i])] = 0; + } + i++; + } + ar[__argc] = 0; /* Run the standard main entry point function... */ - rc = main(__argc, __argv); + rc = main(__argc, ar); # ifdef _DEBUG fclose(stdin); |
