Subversion Repositories Tewi

Rev

Rev 253 | Rev 289 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 253 Rev 255
Line 1... Line 1...
1
/* $Id: gui.c 253 2024-10-04 03:13:36Z nishi $ */
1
/* $Id: gui.c 255 2024-10-04 04:08:58Z nishi $ */
2
 
2
 
3
#include "../config.h"
3
#include "../config.h"
4
 
4
 
5
#include "gui.h"
5
#include "gui.h"
6
#include "tw_server.h"
6
#include "tw_server.h"
Line 16... Line 16...
16
HBRUSH pbtewi_brush;
16
HBRUSH pbtewi_brush;
17
HWND logarea;
17
HWND logarea;
18
HWND button_start;
18
HWND button_start;
19
HWND button_stop;
19
HWND button_stop;
20
HWND button_about;
20
HWND button_about;
-
 
21
HWND button_reset;
-
 
22
HWND button_exit;
21
HWND status;
23
HWND status;
22
HFONT monospace;
24
HFONT monospace;
23
BOOL tewi_alive;
25
BOOL tewi_alive;
24
BOOL was_starting;
26
BOOL was_starting;
25
BOOL exiting;
27
BOOL exiting;
Line 30... Line 32...
30
#define WINWIDTH(rc) (rc.right - rc.left)
32
#define WINWIDTH(rc) (rc.right - rc.left)
31
#define WINHEIGHT(rc) (rc.bottom - rc.top)
33
#define WINHEIGHT(rc) (rc.bottom - rc.top)
32
 
34
 
33
int startup(int argc, char** argv);
35
int startup(int argc, char** argv);
34
 
36
 
35
void ShowBitmapSize(HWND hWnd, HDC hdc, const char* name, int x, int y, int w, int h){
37
void ShowBitmapSize(HWND hWnd, HDC hdc, const char* name, int x, int y, int w, int h) {
36
	HBITMAP hBitmap = LoadBitmap(hInst, name);
38
	HBITMAP hBitmap = LoadBitmap(hInst, name);
37
	BITMAP bmp;
39
	BITMAP bmp;
38
	HDC hmdc;
40
	HDC hmdc;
39
	GetObject(hBitmap, sizeof(bmp), &bmp);
41
	GetObject(hBitmap, sizeof(bmp), &bmp);
40
	hmdc = CreateCompatibleDC(hdc);
42
	hmdc = CreateCompatibleDC(hdc);
41
	SelectObject(hmdc, hBitmap);
43
	SelectObject(hmdc, hBitmap);
42
	if(w == 0 && h == 0){
44
	if(w == 0 && h == 0) {
43
		StretchBlt(hdc, x, y, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
45
		StretchBlt(hdc, x, y, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
44
	}else{
46
	} else {
45
		StretchBlt(hdc, x, y, w, h, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
47
		StretchBlt(hdc, x, y, w, h, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
46
	}
48
	}
47
	DeleteDC(hmdc);
49
	DeleteDC(hmdc);
48
	DeleteObject(hBitmap);
50
	DeleteObject(hBitmap);
49
}
51
}
50
 
52
 
51
void ShowBitmap(HWND hWnd, HDC hdc, const char* name, int x, int y){
53
void ShowBitmap(HWND hWnd, HDC hdc, const char* name, int x, int y) { ShowBitmapSize(hWnd, hdc, name, x, y, 0, 0); }
52
	ShowBitmapSize(hWnd, hdc, name, x, y, 0, 0);
-
 
53
}
-
 
54
 
54
 
55
int max = 0;
55
int max = 0;
56
void AddLog(const char* str){
56
void AddLog(const char* str) {
57
	HDC hdc;
57
	HDC hdc;
58
	PAINTSTRUCT ps;
58
	PAINTSTRUCT ps;
59
	SIZE sz;
59
	SIZE sz;
60
 
60
 
61
	SendMessage(logarea, LB_ADDSTRING, 0, (LPARAM)str);
61
	SendMessage(logarea, LB_ADDSTRING, 0, (LPARAM)str);
62
 
62
 
63
	hdc = CreateCompatibleDC(NULL);
63
	hdc = CreateCompatibleDC(NULL);
64
	SelectObject(hdc, monospace);
64
	SelectObject(hdc, monospace);
65
	GetTextExtentPoint32(hdc, str, strlen(str), &sz);
65
	GetTextExtentPoint32(hdc, str, strlen(str), &sz);
66
	DeleteDC(hdc);
66
	DeleteDC(hdc);
67
	
67
 
68
	if(max < sz.cx){
68
	if(max < sz.cx) {
69
		max = sz.cx;
69
		max = sz.cx;
70
		SendMessage(logarea, LB_SETHORIZONTALEXTENT, max, 0);
70
		SendMessage(logarea, LB_SETHORIZONTALEXTENT, max, 0);
71
	}
71
	}
72
}
72
}
73
 
73
 
74
LRESULT CALLBACK VersionDialog(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
74
LRESULT CALLBACK VersionDialog(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
75
	if(msg == WM_COMMAND){
75
	if(msg == WM_COMMAND) {
76
		if(LOWORD(wp) == IDOK) EndDialog(hWnd, IDOK);
76
		if(LOWORD(wp) == IDOK) EndDialog(hWnd, IDOK);
77
	}else if(msg == WM_PAINT){
77
	} else if(msg == WM_PAINT) {
78
		HDC hdc;
78
		HDC hdc;
79
		PAINTSTRUCT ps;
79
		PAINTSTRUCT ps;
80
		RECT size;
80
		RECT size;
81
 
81
 
82
		size.left = size.top = 5;
82
		size.left = size.top = 5;
Line 84... Line 84...
84
		MapDialogRect(hWnd, &size);
84
		MapDialogRect(hWnd, &size);
85
 
85
 
86
		hdc = BeginPaint(hWnd, &ps);
86
		hdc = BeginPaint(hWnd, &ps);
87
		ShowBitmapSize(hWnd, hdc, "TEWILOGO", size.left, size.top, WINWIDTH(size), WINWIDTH(size));
87
		ShowBitmapSize(hWnd, hdc, "TEWILOGO", size.left, size.top, WINWIDTH(size), WINWIDTH(size));
88
		EndPaint(hWnd, &ps);
88
		EndPaint(hWnd, &ps);
89
	}else if(msg == WM_CTLCOLORDLG || msg == WM_CTLCOLORSTATIC){
89
	} else if(msg == WM_CTLCOLORDLG || msg == WM_CTLCOLORSTATIC) {
90
		HDC dc = (HDC)wp;
90
		HDC dc = (HDC)wp;
91
		SetBkMode(dc, TRANSPARENT);
91
		SetBkMode(dc, TRANSPARENT);
92
		return (LRESULT)GetSysColorBrush(COLOR_MENU);
92
		return (LRESULT)GetSysColorBrush(COLOR_MENU);
93
	}else{
93
	} else {
94
		return FALSE;
94
		return FALSE;
95
	}
95
	}
96
	return TRUE;
96
	return TRUE;
97
}
97
}
98
 
98
 
99
void tewi_thread(void* ptr){
99
void tewi_thread(void* ptr) {
100
	int st = startup(0, NULL);
100
	int st = startup(0, NULL);
101
	was_starting = TRUE;
101
	was_starting = TRUE;
102
	if(st == -1){
102
	if(st == -1) {
103
		tewi_alive = TRUE;
103
		tewi_alive = TRUE;
104
		idle = FALSE;
104
		idle = FALSE;
105
	}else{
105
	} else {
106
		cm_force_log("Config error");
106
		cm_force_log("Config error");
107
		idle = FALSE;
107
		idle = FALSE;
108
		_endthread();
108
		_endthread();
109
	}
109
	}
110
	running = 1;
110
	running = 1;
Line 113... Line 113...
113
	was_starting = TRUE;
113
	was_starting = TRUE;
114
	idle = FALSE;
114
	idle = FALSE;
115
	_endthread();
115
	_endthread();
116
}
116
}
117
 
117
 
118
void StartTewi(void){
118
void StartTewi(void) {
119
	EnableWindow(button_start, FALSE);
119
	EnableWindow(button_start, FALSE);
120
	EnableWindow(button_stop, FALSE);
120
	EnableWindow(button_stop, FALSE);
121
	_beginthread(tewi_thread, 0, NULL);
121
	_beginthread(tewi_thread, 0, NULL);
122
}
122
}
123
 
123
 
124
void StopTewi(void){
124
void StopTewi(void) {
125
	EnableWindow(button_start, FALSE);
125
	EnableWindow(button_start, FALSE);
126
	EnableWindow(button_stop, FALSE);
126
	EnableWindow(button_stop, FALSE);
127
	running = 0;
127
	running = 0;
128
}
128
}
129
 
129
 
130
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
130
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
131
	if(msg == WM_COMMAND){
131
	if(msg == WM_COMMAND) {
132
		int trig = LOWORD(wp);
132
		int trig = LOWORD(wp);
133
		int ev = HIWORD(wp);
133
		int ev = HIWORD(wp);
134
		if(trig == GUI_BUTTON_ABOUT){
134
		if(trig == GUI_BUTTON_ABOUT) {
135
			if(ev == BN_CLICKED){
135
			if(ev == BN_CLICKED) {
136
				DialogBox(hInst, "VERSIONDLG", hWnd, (DLGPROC)VersionDialog);
136
				DialogBox(hInst, "VERSIONDLG", hWnd, (DLGPROC)VersionDialog);
137
			}
137
			}
138
		}else if(trig == GUI_BUTTON_START){
138
		} else if(trig == GUI_BUTTON_START) {
139
			if(ev == BN_CLICKED){
139
			if(ev == BN_CLICKED) {
140
				SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Starting Tewi HTTPd");
140
				SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Starting Tewi HTTPd");
141
				StartTewi();
141
				StartTewi();
142
			}
142
			}
143
		}else if(trig == GUI_BUTTON_STOP){
143
		} else if(trig == GUI_BUTTON_STOP) {
144
			if(ev == BN_CLICKED){
144
			if(ev == BN_CLICKED) {
145
				SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopping Tewi HTTPd");
145
				SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Stopping Tewi HTTPd");
146
				StopTewi();
146
				StopTewi();
147
			}
147
			}
-
 
148
		} else if(trig == GUI_BUTTON_RESET) {
-
 
149
			if(ev == BN_CLICKED) {
-
 
150
				SendMessage(logarea, LB_RESETCONTENT, 0, 0);
-
 
151
				max = 0;
-
 
152
				SendMessage(logarea, LB_SETHORIZONTALEXTENT, max, 0);
-
 
153
			}
148
		}else if(trig == GUI_BUTTON_EXIT){
154
		} else if(trig == GUI_BUTTON_EXIT) {
149
			if(ev == BN_CLICKED){
155
			if(ev == BN_CLICKED) {
150
				if(tewi_alive){
156
				if(tewi_alive) {
151
					SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopping Tewi HTTPd");
157
					SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Stopping Tewi HTTPd");
152
					StopTewi();
158
					StopTewi();
153
					exiting = TRUE;
159
					exiting = TRUE;
154
				}else{
160
				} else {
155
					SendMessage(hWnd, WM_CLOSE, 0, 0);
161
					SendMessage(hWnd, WM_CLOSE, 0, 0);
156
				}
162
				}
157
			}
163
			}
158
		}else if(trig == GUI_LOG){
164
		} else if(trig == GUI_LOG) {
159
		}
165
		}
160
	}else if(msg == WM_CLOSE){
166
	} else if(msg == WM_CLOSE) {
161
		DestroyWindow(hWnd);
167
		DestroyWindow(hWnd);
162
	}else if(msg == WM_DESTROY){
168
	} else if(msg == WM_DESTROY) {
163
		DeleteObject(pbtewi_brush);
169
		DeleteObject(pbtewi_brush);
164
		PostQuitMessage(0);
170
		PostQuitMessage(0);
165
	}else if(msg == WM_CREATE){
171
	} else if(msg == WM_CREATE) {
166
		RECT rc, src;
172
		RECT rc, src;
167
		GetClientRect(hWnd, &rc);
173
		GetClientRect(hWnd, &rc);
168
 
174
 
169
		InitCommonControls();
175
		InitCommonControls();
170
 
176
 
171
		monospace = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
177
		monospace = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
172
 
178
 
173
		status = CreateStatusWindow(WS_CHILD | WS_VISIBLE | CCS_BOTTOM, NULL, hWnd, GUI_STATUS);
179
		status = CreateStatusWindow(WS_CHILD | WS_VISIBLE | CCS_BOTTOM, NULL, hWnd, GUI_STATUS);
174
		SendMessage(status, SB_SIMPLE, 0, 0);
180
		SendMessage(status, SB_SIMPLE, 0, 0);
175
		SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Welcome to Tewi HTTPd");
181
		SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Welcome to Tewi HTTPd");
176
		SendMessage(status, SB_GETRECT, 0, (LPARAM)&src);
182
		SendMessage(status, SB_GETRECT, 0, (LPARAM)&src);
177
 
183
 
178
		pbtewi_brush = CreateSolidBrush(RGB(0xf7, 0xc9, 0xf3));
184
		pbtewi_brush = CreateSolidBrush(RGB(0xf7, 0xc9, 0xf3));
179
		button_start = CreateWindow("BUTTON", "&Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 0, 100, 20, hWnd, (HMENU)GUI_BUTTON_START, hInst, NULL);
185
		button_start = CreateWindow("BUTTON", "&Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 0, 100, 20, hWnd, (HMENU)GUI_BUTTON_START, hInst, NULL);
180
		button_stop = CreateWindow("BUTTON", "S&top", WS_CHILD | WS_VISIBLE | WS_DISABLED | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 1, 100, 20, hWnd, (HMENU)GUI_BUTTON_STOP, hInst, NULL);
186
		button_stop = CreateWindow("BUTTON", "S&top", WS_CHILD | WS_VISIBLE | WS_DISABLED | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 1, 100, 20, hWnd, (HMENU)GUI_BUTTON_STOP, hInst, NULL);
181
		button_about = CreateWindow("BUTTON", "&About", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 2, 100, 20, hWnd, (HMENU)GUI_BUTTON_ABOUT, hInst, NULL);
187
		button_about = CreateWindow("BUTTON", "&About", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, 20 * 2, 100, 20, hWnd, (HMENU)GUI_BUTTON_ABOUT, hInst, NULL);
-
 
188
		button_reset = CreateWindow("BUTTON", "&Reset", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, WINHEIGHT(rc) - WINHEIGHT(src) - 20 - 20, 100, 20, hWnd, (HMENU)GUI_BUTTON_RESET, hInst, NULL);
182
		button_about = CreateWindow("BUTTON", "E&xit", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, WINHEIGHT(rc) - WINHEIGHT(src) - 20, 100, 20, hWnd, (HMENU)GUI_BUTTON_EXIT, hInst, NULL);
189
		button_exit = CreateWindow("BUTTON", "E&xit", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, WINWIDTH(rc) - 100, WINHEIGHT(rc) - WINHEIGHT(src) - 20, 100, 20, hWnd, (HMENU)GUI_BUTTON_EXIT, hInst, NULL);
183
		logarea = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LBS_NOINTEGRALHEIGHT | LBS_NOSEL, 0, 40, WINWIDTH(rc) - 100, WINHEIGHT(rc) - 40 - WINHEIGHT(src), hWnd, (HMENU)GUI_LOG, hInst, NULL);
190
		logarea = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LBS_NOINTEGRALHEIGHT | LBS_NOSEL, 0, 40, WINWIDTH(rc) - 100, WINHEIGHT(rc) - 40 - WINHEIGHT(src), hWnd, (HMENU)GUI_LOG, hInst, NULL);
184
 
191
 
185
		SendMessage(logarea, WM_SETFONT, (WPARAM)monospace, TRUE);
192
		SendMessage(logarea, WM_SETFONT, (WPARAM)monospace, TRUE);
186
 
193
 
187
		SetTimer(hWnd, TIMER_WATCH_TEWI, 100, NULL);
194
		SetTimer(hWnd, TIMER_WATCH_TEWI, 100, NULL);
188
	}else if(msg == WM_TIMER){
195
	} else if(msg == WM_TIMER) {
189
		if(wp == TIMER_WATCH_TEWI){
196
		if(wp == TIMER_WATCH_TEWI) {
190
			if(idle){
197
			if(idle) {
191
			}else if(tewi_alive){
198
			} else if(tewi_alive) {
192
				if(was_starting){
199
				if(was_starting) {
193
					was_starting = FALSE;
200
					was_starting = FALSE;
194
					SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Started Tewi HTTPd");
201
					SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Started Tewi HTTPd");
195
				}
202
				}
196
				EnableWindow(button_start, FALSE);
203
				EnableWindow(button_start, FALSE);
197
				EnableWindow(button_stop, TRUE);
204
				EnableWindow(button_stop, TRUE);
198
				idle = TRUE;
205
				idle = TRUE;
199
			}else{
206
			} else {
200
				if(was_starting){
207
				if(was_starting) {
201
					was_starting = FALSE;
208
					was_starting = FALSE;
202
					SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopped Tewi HTTPd");
209
					SendMessage(status, SB_SETTEXT, 0, (LPARAM) "Stopped Tewi HTTPd");
203
				}
210
				}
204
				EnableWindow(button_start, TRUE);
211
				EnableWindow(button_start, TRUE);
205
				EnableWindow(button_stop, FALSE);
212
				EnableWindow(button_stop, FALSE);
206
				if(exiting){
213
				if(exiting) {
207
					KillTimer(hWnd, TIMER_WATCH_TEWI);
214
					KillTimer(hWnd, TIMER_WATCH_TEWI);
208
					SendMessage(hWnd, WM_CLOSE, 0, 0);
215
					SendMessage(hWnd, WM_CLOSE, 0, 0);
209
				}
216
				}
210
				idle = TRUE;
217
				idle = TRUE;
211
			}
218
			}
212
		}
219
		}
213
	}else if(msg == WM_PAINT){
220
	} else if(msg == WM_PAINT) {
214
		HDC hdc;
221
		HDC hdc;
215
		PAINTSTRUCT ps;
222
		PAINTSTRUCT ps;
216
		RECT rc;
223
		RECT rc;
217
		RECT fill;
224
		RECT fill;
218
 
225
 
Line 220... Line 227...
220
		hdc = BeginPaint(hWnd, &ps);
227
		hdc = BeginPaint(hWnd, &ps);
221
		SetRect(&fill, 0, 0, WINWIDTH(rc), 40);
228
		SetRect(&fill, 0, 0, WINWIDTH(rc), 40);
222
		FillRect(hdc, &fill, pbtewi_brush);
229
		FillRect(hdc, &fill, pbtewi_brush);
223
		ShowBitmap(hWnd, hdc, "PBTEWI", 0, 0);
230
		ShowBitmap(hWnd, hdc, "PBTEWI", 0, 0);
224
		EndPaint(hWnd, &ps);
231
		EndPaint(hWnd, &ps);
225
	}else{
232
	} else {
226
		return DefWindowProc(hWnd, msg, wp, lp);
233
		return DefWindowProc(hWnd, msg, wp, lp);
227
	}
234
	}
228
	return 0;
235
	return 0;
229
}
236
}
230
 
237
 
231
BOOL InitApp(void){
238
BOOL InitApp(void) {
232
	WNDCLASSEX wc;
239
	WNDCLASSEX wc;
233
	wc.cbSize = sizeof(WNDCLASSEX);
240
	wc.cbSize = sizeof(WNDCLASSEX);
234
	wc.style = CS_HREDRAW | CS_VREDRAW;
241
	wc.style = CS_HREDRAW | CS_VREDRAW;
235
	wc.lpfnWndProc = WndProc;
242
	wc.lpfnWndProc = WndProc;
236
	wc.cbClsExtra = 0;
243
	wc.cbClsExtra = 0;
Line 243... Line 250...
243
	wc.lpszClassName = "tewihttpd";
250
	wc.lpszClassName = "tewihttpd";
244
	wc.hIconSm = LoadIcon(hInst, "TEWI");
251
	wc.hIconSm = LoadIcon(hInst, "TEWI");
245
	return RegisterClassEx(&wc);
252
	return RegisterClassEx(&wc);
246
}
253
}
247
 
254
 
248
BOOL InitWindow(int nCmdShow){
255
BOOL InitWindow(int nCmdShow) {
249
	HWND hWnd;
256
	HWND hWnd;
250
	RECT deskrc, rc;
257
	RECT deskrc, rc;
251
	HWND hDeskWnd = GetDesktopWindow();
258
	HWND hDeskWnd = GetDesktopWindow();
252
	GetWindowRect(hDeskWnd, &deskrc);
259
	GetWindowRect(hDeskWnd, &deskrc);
253
	hWnd = CreateWindow("tewihttpd", "Tewi HTTPd", (WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME) ^ WS_MAXIMIZEBOX, 0, 0, 600, 400, NULL, 0, hInst, NULL);
260
	hWnd = CreateWindow("tewihttpd", "Tewi HTTPd", (WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME) ^ WS_MAXIMIZEBOX, 0, 0, 600, 400, NULL, 0, hInst, NULL);
254
 
261
 
255
	if(!hWnd){
262
	if(!hWnd) {
256
		return FALSE;
263
		return FALSE;
257
	}
264
	}
258
	GetWindowRect(hWnd, &rc);
265
	GetWindowRect(hWnd, &rc);
259
	SetWindowPos(hWnd, HWND_TOP, (deskrc.right - (rc.right - rc.left)) / 2, (deskrc.bottom - (rc.bottom - rc.top)) / 2, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW);
266
	SetWindowPos(hWnd, HWND_TOP, (deskrc.right - (rc.right - rc.left)) / 2, (deskrc.bottom - (rc.bottom - rc.top)) / 2, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW);
260
	ShowWindow(hWnd, nCmdShow);
267
	ShowWindow(hWnd, nCmdShow);
261
	UpdateWindow(hWnd);
268
	UpdateWindow(hWnd);
262
	return TRUE;
269
	return TRUE;
263
}
270
}
264
 
271
 
265
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){
272
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) {
266
	MSG msg;
273
	MSG msg;
267
	BOOL bret;
274
	BOOL bret;
268
	hInst = hCurInst;
275
	hInst = hCurInst;
269
	tewi_alive = FALSE;
276
	tewi_alive = FALSE;
270
	was_starting = FALSE;
277
	was_starting = FALSE;
271
	exiting = FALSE;
278
	exiting = FALSE;
272
	idle = TRUE;
279
	idle = TRUE;
273
	logfile = stderr;
280
	logfile = stderr;
274
	if(!InitApp()){
281
	if(!InitApp()) {
275
		return FALSE;
282
		return FALSE;
276
	}
283
	}
277
	if(!InitWindow(nCmdShow)){
284
	if(!InitWindow(nCmdShow)) {
278
		return FALSE;
285
		return FALSE;
279
	}
286
	}
280
 
287
 
281
	while((bret = GetMessage(&msg, NULL, 0, 0)) != 0){
288
	while((bret = GetMessage(&msg, NULL, 0, 0)) != 0) {
282
		if(bret == -1) {
289
		if(bret == -1) {
283
			break;
290
			break;
284
		} else {
291
		} else {
285
			TranslateMessage(&msg);
292
			TranslateMessage(&msg);
286
			DispatchMessage(&msg);
293
			DispatchMessage(&msg);