aboutsummaryrefslogtreecommitdiff
path: root/win32/lib/crt1.c
diff options
context:
space:
mode:
Diffstat (limited to 'win32/lib/crt1.c')
-rw-r--r--win32/lib/crt1.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/win32/lib/crt1.c b/win32/lib/crt1.c
index 7a2d765..1e2bd17 100644
--- a/win32/lib/crt1.c
+++ b/win32/lib/crt1.c
@@ -1,6 +1,9 @@
// =============================================
// crt1.c
+// _UNICODE for tchar.h, UNICODE for API
+#include <tchar.h>
+
#include <stdio.h>
#include <stdlib.h>
@@ -18,20 +21,32 @@ typedef struct
int newmode;
} _startupinfo;
-int __cdecl __getmainargs(int *pargc, char ***pargv, char ***penv, int globb, _startupinfo*);
+#ifdef _UNICODE
+#define __tgetmainargs __wgetmainargs
+#define _tstart _wstart
+#define _tmain wmain
+#define _runtmain _runwmain
+#else
+#define __tgetmainargs __getmainargs
+#define _tstart _start
+#define _tmain main
+#define _runtmain _runmain
+#endif
+
+int __cdecl __tgetmainargs(int *pargc, _TCHAR ***pargv, _TCHAR ***penv, int globb, _startupinfo*);
void __cdecl __set_app_type(int apptype);
unsigned int __cdecl _controlfp(unsigned int new_value, unsigned int mask);
-int main(int argc, char * argv[], char * env[]);
+extern int _tmain(int argc, _TCHAR * argv[], _TCHAR * env[]);
/* Allow command-line globbing with "int _dowildcard = 1;" in the user source */
int _dowildcard;
-void _start(void)
+void _tstart(void)
{
__TRY__
int argc, ret;
- char **argv;
- char **env;
+ _TCHAR **argv;
+ _TCHAR **env;
_startupinfo start_info;
// Sets the current application type
@@ -45,8 +60,28 @@ void _start(void)
#endif
start_info.newmode = 0;
- __getmainargs( &argc, &argv, &env, _dowildcard, &start_info);
- ret = main(argc, argv, env);
+ __tgetmainargs( &argc, &argv, &env, _dowildcard, &start_info);
+ ret = _tmain(argc, argv, env);
+ exit(ret);
+}
+
+void _runtmain(int argc0, /* as tcc passed in */ char **argv0)
+{
+ __TRY__
+ int argc, ret;
+ _TCHAR **argv;
+ _TCHAR **env;
+ _startupinfo start_info;
+
+ __set_app_type(_CONSOLE_APP);
+
+#ifdef __i386
+ _controlfp(_PC_53, _MCW_PC);
+#endif
+
+ start_info.newmode = 0;
+ __tgetmainargs( &argc, &argv, &env, _dowildcard, &start_info);
+ ret = _tmain(argc0, argv + argc - argc0, env);
exit(ret);
}