String literals are always const
[tinycc.git] / win32 / lib / wincrt1.c
blob0a5036eb5b8ab830a56e9cbf47a36989dc1706c4
1 //+---------------------------------------------------------------------------
3 // _UNICODE for tchar.h, UNICODE for API
4 #include <tchar.h>
6 #include <windows.h>
7 #include <stdlib.h>
9 #define __UNKNOWN_APP 0
10 #define __CONSOLE_APP 1
11 #define __GUI_APP 2
12 void __set_app_type(int);
13 void _controlfp(unsigned a, unsigned b);
15 #ifdef _UNICODE
16 #define __tgetmainargs __wgetmainargs
17 #define _twinstart _wwinstart
18 #define _runtwinmain _runwwinmain
19 int APIENTRY wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int);
20 #else
21 #define __tgetmainargs __getmainargs
22 #define _twinstart _winstart
23 #define _runtwinmain _runwinmain
24 #endif
26 typedef struct
28 int newmode;
29 } _startupinfo; // CLI Vs GUI
31 int __cdecl __tgetmainargs(int *pargc, _TCHAR ***pargv, _TCHAR ***penv, int globb, _startupinfo*);
33 int _twinstart(void)
35 __TRY__
36 _TCHAR *szCmd;
37 STARTUPINFO startinfo;
38 int fShow;
39 int ret;
41 __set_app_type(__GUI_APP);
42 _controlfp(0x10000, 0x30000);
44 szCmd = GetCommandLine();
45 if (szCmd) {
46 while (__T(' ') == *szCmd)
47 szCmd++;
48 if (__T('\"') == *szCmd) {
49 while (*++szCmd)
50 if (__T('\"') == *szCmd) {
51 szCmd++;
52 break;
54 } else {
55 while (*szCmd && __T(' ') != *szCmd)
56 szCmd++;
58 while (__T(' ') == *szCmd)
59 szCmd++;
62 GetStartupInfo(&startinfo);
63 fShow = startinfo.wShowWindow;
64 if (0 == (startinfo.dwFlags & STARTF_USESHOWWINDOW))
65 fShow = SW_SHOWDEFAULT;
67 ret = _tWinMain(GetModuleHandle(NULL), NULL, szCmd, fShow);
68 exit(ret);
71 int _runtwinmain(int argc, /* as tcc passed in */ char **argv)
73 _TCHAR *szCmd, *p;
75 #ifdef UNICODE
76 int wargc;
77 _TCHAR **wargv, **wenv;
78 _startupinfo start_info = {0};
80 __tgetmainargs(&wargc, &wargv, &wenv, 0, &start_info);
81 if (argc < wargc)
82 wargv += wargc - argc;
83 else
84 argc = wargc;
85 #define argv wargv
86 #endif
88 p = GetCommandLine();
89 szCmd = NULL;
90 if (argc > 1)
91 szCmd = _tcsstr(p, argv[1]);
92 if (NULL == szCmd)
93 szCmd = __T("");
94 else if (szCmd > p && szCmd[-1] == __T('\"'))
95 --szCmd;
96 _controlfp(0x10000, 0x30000);
97 return _tWinMain(GetModuleHandle(NULL), NULL, szCmd, SW_SHOWDEFAULT);