2
* cygapp.c -- $Id: cygapp.c,v 1.1 2003/03/08 15:26:49 travo Exp $
3
* cygwin (or uwin?) main program stub
5
* Copyright (c) 2000. See accompanying LEGAL file for details.
11
extern int cyg_app(int (*on_launch)(int, char **),
12
HINSTANCE me, LPSTR cmd_line, int show0);
14
static int (*w_on_launch)(int ,char **)= 0;
15
static void w_get_cmds(LPSTR cmd_line);
16
static int w_argc = 0;
17
static char **w_argv = 0;
18
static char *w_str_cpy(HANDLE heap, const char *text, long len);
19
static int w_result = 0;
21
static int w_loop(void);
22
static BOOL WINAPI w_ctrlc_handler(DWORD type);
24
static void cyg_quit(void);
27
cyg_app(int (*on_launch)(int, char **),
28
HINSTANCE me, LPSTR cmd_line, int show0)
31
HWND hw = CreateWindow(w_win_class, "dummy main wnd", 0,
32
CW_USEDEFAULT, 0, 1, 1, 0, 0, hm, 0);
34
w_initialize(hm, hw, cyg_quit, 0, 0);
36
/* this should not be necessary for windows subsystem */
37
SetConsoleCtrlHandler(w_ctrlc_handler, 1);
39
w_on_launch = on_launch;
42
if (w_result) return w_result;
58
int (*on_launch)(int, char **)= w_on_launch;
62
w_result = on_launch(w_argc, w_argv);
63
if (w_result) return w_result;
65
/* event loop closely matches mfc default CWinApp::Run */
67
while (!PeekMessage(&msg, 0, 0,0, PM_REMOVE))
69
GetMessage(&msg, 0, 0,0);
72
if (msg.message == WM_QUIT) break;
73
if (!w_app_msg(&msg)) {
74
TranslateMessage(&msg);
75
DispatchMessage(&msg);
82
w_get_cmds(LPSTR cmd_line)
84
HANDLE heap = GetProcessHeap();
85
char module_name[1028];
86
DWORD len = GetModuleFileName(w_app_instance, module_name, 1024);
87
module_name[len] = '\0';
89
w_argv = (char**)HeapAlloc(heap, HEAP_GENERATE_EXCEPTIONS, sizeof(char *)*9);
90
w_argv[w_argc++] = w_str_cpy(heap, w_unixpath(module_name), len);
95
while (c[0]==' ' || c[0]=='\t' || c[0]=='\r' || c[0]=='\n') c++;
99
if (delim=='"' || delim=='\'') {
101
while (c[0] && c[0]!=delim) c++;
103
while (c[0] && c[0]!=' ' && c[0]!='\t' &&
104
c[0]!='\r' && c[0]!='\n') c++;
107
if (w_argc>1 || cmd_line[0]!='-'||cmd_line[1]!='n'||cmd_line[2]!='o'||
108
cmd_line[3]!='m'||cmd_line[4]!='d'||cmd_line[5]!='i') {
110
w_argv = (char **)HeapReAlloc(heap, HEAP_GENERATE_EXCEPTIONS,
111
w_argv, sizeof(char *)*(2*w_argc+1));
112
w_argv[w_argc++] = w_str_cpy(heap, cmd_line, c - cmd_line);
116
if (c[0] == delim) c++;
124
w_str_cpy(HANDLE heap, const char *text, long len)
126
if (!len) while (text[len]) len++;
128
char *buf = (char *)HeapAlloc(heap, HEAP_GENERATE_EXCEPTIONS, len+1);
130
while (len--) *buf++= *text++;
137
w_ctrlc_handler(DWORD type)
138
{ /* this function runs in its own thread */
139
return (type==CTRL_C_EVENT)? w_sigint(1) : FALSE;