History

Win: crt, initialize global __argc, __targv and _tenviron of msvcrt

_tenviron: as far as possible, not in ASC '-run' mode. __argc and __targv are shortcuts for _tWinMain, when you want to use program parameters.

YX Hao committed 9 years ago

Commit faa97441 parent 6f1860e2 files · +34 −41Browse files

Unified · Split

2 files
  1. win32/lib/crt1.c +12 −14
  2. win32/lib/wincrt1.c +22 −27
win32/lib/crt1.c+12−14
@@ -44,9 +44,7 @@ int _dowildcard; · 43 unmodified lines
44void _tstart(void)44void _tstart(void)
45{45{
46 __TRY__46 __TRY__
47 int argc, ret;47 int ret;
48 _TCHAR **argv;
49 _TCHAR **env;
50 _startupinfo start_info;48 _startupinfo start_info;
51 49
52 // Sets the current application type50 // Sets the current application type
@@ -60,31 +58,31 @@ void _tstart(void) · 7 unmodified lines
60#endif58#endif
61 59
62 start_info.newmode = 0;60 start_info.newmode = 0;
63 __tgetmainargs( &argc, &argv, &env, _dowildcard, &start_info);61 __tgetmainargs( &__argc, &__targv, &_tenviron, _dowildcard, &start_info);
64 ret = _tmain(argc, argv, env);62 ret = _tmain(__argc, __targv, _tenviron);
65 exit(ret);63 exit(ret);
66}64}
67 65
68int _runtmain(int argc, /* as tcc passed in */ char **argv)66int _runtmain(int argc, /* as tcc passed in */ char **argv)
69{67{
70#ifdef UNICODE68#ifdef UNICODE
71 int wargc;
72 _TCHAR **wargv, **wenv;
73 _startupinfo start_info = {0};69 _startupinfo start_info = {0};
74 70
75 __tgetmainargs(&wargc, &wargv, &wenv, _dowildcard, &start_info);71 __tgetmainargs(&__argc, &__targv, &_tenviron, _dowildcard, &start_info);
76 /* may be wrong when tcc has received wildcards (*.c) */72 /* may be wrong when tcc has received wildcards (*.c) */
77 if (argc < wargc)73 if (argc < __argc) {
78 wargv += wargc - argc;74 __targv += __argc - argc;
79 else75 __argc = argc;
80 argc = wargc;76 }
81#define argv wargv77#else
78 __argc = argc;
79 __targv = argv;
82#endif80#endif
83 81
84#ifdef __i38682#ifdef __i386
85 _controlfp(_PC_53, _MCW_PC);83 _controlfp(_PC_53, _MCW_PC);
86#endif84#endif
87 return _tmain(argc, argv, _tenviron);85 return _tmain(__argc, __targv, _tenviron);
88}86}
89 87
90// =============================================88// =============================================
win32/lib/wincrt1.c+22−27
@@ -33,31 +33,25 @@ int __cdecl __tgetmainargs(int *pargc, _TCHAR ***pargv, _TCHAR ***penv, int glob · 32 unmodified lines
33int _twinstart(void)33int _twinstart(void)
34{34{
35 __TRY__35 __TRY__
36 _TCHAR *szCmd;36 _TCHAR *szCmd, *p;
37 STARTUPINFO startinfo;37 STARTUPINFO startinfo;
38 _startupinfo start_info_con = {0};
38 int fShow;39 int fShow;
39 int ret;40 int ret;
40 41
41 __set_app_type(__GUI_APP);42 __set_app_type(__GUI_APP);
42 _controlfp(0x10000, 0x30000);43 _controlfp(0x10000, 0x30000);
43 44
44 szCmd = GetCommandLine();45 start_info_con.newmode = 0;
45 if (szCmd) {46 __tgetmainargs(&__argc, &__targv, &_tenviron, 0, &start_info_con);
46 while (__T(' ') == *szCmd)47
47 szCmd++;48 p = GetCommandLine();
48 if (__T('\"') == *szCmd) {49 if (__argc > 1)
49 while (*++szCmd)50 szCmd = _tcsstr(p, __targv[1]);
50 if (__T('\"') == *szCmd) {51 if (NULL == szCmd)
51 szCmd++;52 szCmd = __T("");
52 break;53 else if (szCmd > p && szCmd[-1] == __T('\"'))
53 }54 --szCmd;
54 } else {
55 while (*szCmd && __T(' ') != *szCmd)
56 szCmd++;
57 }
58 while (__T(' ') == *szCmd)
59 szCmd++;
60 }
61 55
62 GetStartupInfo(&startinfo);56 GetStartupInfo(&startinfo);
63 fShow = startinfo.wShowWindow;57 fShow = startinfo.wShowWindow;
@@ -73,22 +67,23 @@ int _runtwinmain(int argc, /* as tcc passed in */ char **argv) · 9 unmodified lines
73 _TCHAR *szCmd, *p;67 _TCHAR *szCmd, *p;
74 68
75#ifdef UNICODE69#ifdef UNICODE
76 int wargc;
77 _TCHAR **wargv, **wenv;
78 _startupinfo start_info = {0};70 _startupinfo start_info = {0};
79 71
80 __tgetmainargs(&wargc, &wargv, &wenv, 0, &start_info);72 __tgetmainargs(&__argc, &__targv, &_tenviron, 0, &start_info);
81 if (argc < wargc)73 /* may be wrong when tcc has received wildcards (*.c) */
82 wargv += wargc - argc;74 if (argc < __argc) {
83 else75 __targv += __argc - argc;
84 argc = wargc;76 __argc = argc;
85#define argv wargv77 }
78#else
79 __argc = argc;
80 __targv = argv;
86#endif81#endif
87 82
88 p = GetCommandLine();83 p = GetCommandLine();
89 szCmd = NULL;84 szCmd = NULL;
90 if (argc > 1)85 if (argc > 1)
91 szCmd = _tcsstr(p, argv[1]);86 szCmd = _tcsstr(p, __targv[1]);
92 if (NULL == szCmd)87 if (NULL == szCmd)
93 szCmd = __T("");88 szCmd = __T("");
94 else if (szCmd > p && szCmd[-1] == __T('\"'))89 else if (szCmd > p && szCmd[-1] == __T('\"'))

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t