From 90836295a030190d71da2f7720ccfc651173dd47 Mon Sep 17 00:00:00 2001 From: Nishi Date: Thu, 3 Oct 2024 20:04:15 +0000 Subject: [PATCH] adding gui manager git-svn-id: file:///raid/svn-personal/tewi/trunk@244 8739d7e6-ffea-ec47-b151-bdff447c6205 --- Binary/pbtewi.bmp | Bin 0 -> 6592 bytes Binary/tewi.bmp | Bin 0 -> 16522 bytes Makefile | 3 +- Platform/bcc.mk | 2 +- Platform/vc6.mk | 2 +- Platform/watcom.mk | 2 +- Platform/win32.mk | 2 +- Platform/win64.mk | 2 +- Server/Makefile | 9 ++ Server/gui.c | 224 +++++++++++++++++++++++++++++++++++++++++++++ Server/gui.h | 20 ++++ Server/gui.rc | 18 ++++ Server/main.c | 5 +- Server/tewi.rc | 2 +- Tool/option.c | 27 +++++- config.h.tmpl | 2 + 16 files changed, 311 insertions(+), 9 deletions(-) create mode 100644 Binary/pbtewi.bmp create mode 100644 Binary/tewi.bmp create mode 100644 Server/gui.c create mode 100644 Server/gui.h create mode 100644 Server/gui.rc diff --git a/Binary/pbtewi.bmp b/Binary/pbtewi.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3b709bcfee92db2bb4fd02909405d102ab900723 GIT binary patch literal 6592 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 C8#Flp literal 0 HcmV?d00001 diff --git a/Binary/tewi.bmp b/Binary/tewi.bmp new file mode 100644 index 0000000000000000000000000000000000000000..21b77a166fcd3489c79014dc130ad979584ea977 GIT binary patch literal 16522 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 literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile index 7344a0a..88cc56a 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ PLATFORM = generic PLATFORM_IDENT = NOT_WINDOWS PREFIX = /usr/local MODULE = ./Module +OBJ = o include Platform/$(PLATFORM).mk @@ -24,7 +25,7 @@ all: ./Server $(MODULE) cc -o $@ ./Tool/itworks.c ./Server:: ./Common ./Tool/option ./Tool/genconf ./Tool/itworks - $(MAKE) -C $@ $(FLAGS) EXTOBJS="`./Tool/option objs ../`" EXTLIBS="`./Tool/option libs ../ $(PLATFORM_IDENT)`" EXTCFLAGS="`./Tool/option cflags ../`" EXTLDFLAGS="`./Tool/option ldflags ../`" + $(MAKE) -C $@ $(FLAGS) EXTOBJS="`./Tool/option objs ../ $(PLATFORM_IDENT) $(OBJ)`" EXTLIBS="`./Tool/option libs ../ $(PLATFORM_IDENT) $(OBJ)`" EXTCFLAGS="`./Tool/option cflags ../ $(PLATFORM_IDENT) $(OBJ)`" EXTLDFLAGS="`./Tool/option ldflags ../ $(PLATFORM_IDENT) $(OBJ)`" ./Module:: ./Common $(MAKE) -C $@ $(FLAGS) diff --git a/Platform/bcc.mk b/Platform/bcc.mk index 42e6f64..ed96a23 100644 --- a/Platform/bcc.mk +++ b/Platform/bcc.mk @@ -14,4 +14,4 @@ EXEC = STATIC = lib LIBSUF = .dll OBJ = obj -REQOBJS = tewi_bcc.res +REQOBJS = tewi_bcc.res gui_bcc.res diff --git a/Platform/vc6.mk b/Platform/vc6.mk index bcf8baa..d080ed4 100644 --- a/Platform/vc6.mk +++ b/Platform/vc6.mk @@ -13,4 +13,4 @@ EXEC = STATIC = lib LIBSUF = .dll OBJ = obj -PREOBJS = tewi_vc6.res +PREOBJS = tewi_vc6.res gui_vc6.res diff --git a/Platform/watcom.mk b/Platform/watcom.mk index ee4393e..bf91582 100644 --- a/Platform/watcom.mk +++ b/Platform/watcom.mk @@ -13,4 +13,4 @@ EXEC = .exe STATIC = lib LIBSUF = .dll OBJ = obj -SERVADD = wrc -bt=nt -i=$(WATCOM)/h/nt -fe=tewi.exe tewi.rc +SERVADD = wrc -bt=nt -i=$(WATCOM)/h/nt tewi.rc tewi.exe && wrc -bt=nt -i=$(WATCOM)/h/nt gui.rc tewi.exe diff --git a/Platform/win32.mk b/Platform/win32.mk index 33682c3..7293021 100644 --- a/Platform/win32.mk +++ b/Platform/win32.mk @@ -11,4 +11,4 @@ LDFLAGS = LIBS = EXEC = .exe LIBSUF = .dll -PREOBJS = tewi.res +PREOBJS = tewi.res gui.res diff --git a/Platform/win64.mk b/Platform/win64.mk index f2e5842..4976bb9 100644 --- a/Platform/win64.mk +++ b/Platform/win64.mk @@ -11,4 +11,4 @@ LDFLAGS = LIBS = EXEC = .exe LIBSUF = .dll -PREOBJS = tewi.res +PREOBJS = tewi.res gui.res diff --git a/Server/Makefile b/Server/Makefile index 18aa72e..3f250f0 100644 --- a/Server/Makefile +++ b/Server/Makefile @@ -54,5 +54,14 @@ tewi_vc6.res: tewi.rc ../Binary/tewi.ico tewi_bcc.res: tewi.rc ../Binary/tewi.ico brc32 -r -fo$@ tewi.rc +gui.res: gui.rc gui.h + $(WINDRES) gui.rc -O coff -o $@ + +gui_vc6.res: gui.rc gui.h + rc /fo$@ gui.rc + +gui_bcc.res: gui.rc gui.h + brc32 -r -fo$@ gui.rc + clean: rm -f *.o tewi *.exe *.res *.elf *.sfo *.pbp *.self *.pkg *.obj diff --git a/Server/gui.c b/Server/gui.c new file mode 100644 index 0000000..2f7a8e6 --- /dev/null +++ b/Server/gui.c @@ -0,0 +1,224 @@ +/* $Id$ */ + +#include "../config.h" + +#include "gui.h" + +#include +#include + +HINSTANCE hInst; +HBRUSH pbtewi_brush; +HWND logarea; +HWND button_start; +HWND button_stop; +HWND button_about; +HWND status; +BOOL tewi_alive; +BOOL was_starting; +BOOL exiting; + +#define WINWIDTH(rc) (rc.right - rc.left) +#define WINHEIGHT(rc) (rc.bottom - rc.top) + +#define DIALOG_X(n) (HIWORD(GetDialogBaseUnits()) * n) +#define DIALOG_Y(n) (LOWORD(GetDialogBaseUnits()) * n) + +void ShowBitmapSize(HWND hWnd, HDC hdc, const char* name, int x, int y, int w, int h){ + HBITMAP hBitmap = LoadBitmap(hInst, name); + BITMAP bmp; + HDC hmdc; + GetObject(hBitmap, sizeof(bmp), &bmp); + hmdc = CreateCompatibleDC(hdc); + SelectObject(hmdc, hBitmap); + if(w == 0 && h == 0){ + StretchBlt(hdc, x, y, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); + }else{ + StretchBlt(hdc, x, y, w, h, hmdc, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); + } + DeleteDC(hmdc); + DeleteObject(hBitmap); +} + +void ShowBitmap(HWND hWnd, HDC hdc, const char* name, int x, int y){ + ShowBitmapSize(hWnd, hdc, name, x, y, 0, 0); +} + +LRESULT CALLBACK VersionDialog(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ + if(msg == WM_COMMAND){ + if(LOWORD(wp) == IDOK) EndDialog(hWnd, IDOK); + }else if(msg == WM_PAINT){ + HDC hdc; + PAINTSTRUCT ps; + RECT size; + + size.left = size.top = 5; + size.right = size.bottom = 32 + 5; + MapDialogRect(hWnd, &size); + + hdc = BeginPaint(hWnd, &ps); + ShowBitmapSize(hWnd, hdc, "TEWILOGO", size.left, size.top, WINWIDTH(size), WINWIDTH(size)); + EndPaint(hWnd, &ps); + }else{ + return FALSE; + } + return TRUE; +} + +void StartTewi(void){ + was_starting = TRUE; +} + +void StopTewi(void){ + was_starting = TRUE; +} + +LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ + if(msg == WM_COMMAND){ + int trig = LOWORD(wp); + int ev = HIWORD(wp); + if(trig == GUI_BUTTON_ABOUT){ + if(ev == BN_CLICKED){ + DialogBox(hInst, "VERSIONDLG", hWnd, VersionDialog); + } + }else if(trig == GUI_BUTTON_START){ + if(ev == BN_CLICKED){ + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Starting Tewi HTTPd"); + StartTewi(); + } + }else if(trig == GUI_BUTTON_STOP){ + if(ev == BN_CLICKED){ + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopping Tewi HTTPd"); + StopTewi(); + } + }else if(trig == GUI_BUTTON_EXIT){ + if(ev == BN_CLICKED){ + if(tewi_alive){ + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopping Tewi HTTPd"); + StopTewi(); + exiting = TRUE; + }else{ + SendMessage(hWnd, WM_CLOSE, 0, 0); + } + } + }else if(trig == GUI_LOG){ + } + }else if(msg == WM_CLOSE){ + DestroyWindow(hWnd); + }else if(msg == WM_DESTROY){ + DeleteObject(pbtewi_brush); + PostQuitMessage(0); + }else if(msg == WM_CREATE){ + RECT rc, src; + GetClientRect(hWnd, &rc); + + InitCommonControls(); + + status = CreateStatusWindow(WS_CHILD | WS_VISIBLE | CCS_BOTTOM, NULL, hWnd, GUI_STATUS); + SendMessage(status, SB_SIMPLE, 0, 0); + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Welcome to Tewi HTTPd"); + SendMessage(status, SB_GETRECT, 0, (LPARAM)&src); + + pbtewi_brush = CreateSolidBrush(RGB(0xf7, 0xc9, 0xf3)); + 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); + 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); + 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); + 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); + logarea = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL, 0, 40, WINWIDTH(rc) - 100, WINHEIGHT(rc) - 40 - WINHEIGHT(src), hWnd, (HMENU)GUI_LOG, hInst, NULL); + SetTimer(hWnd, TIMER_WATCH_TEWI, 100, NULL); + }else if(msg == WM_TIMER){ + if(wp == TIMER_WATCH_TEWI){ + if(tewi_alive){ + if(was_starting){ + was_starting = FALSE; + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Started Tewi HTTPd"); + } + EnableWindow(button_start, FALSE); + EnableWindow(button_stop, TRUE); + }else{ + if(was_starting){ + was_starting = FALSE; + SendMessage(status, SB_SETTEXT, 0, (LPARAM)"Stopped Tewi HTTPd"); + } + EnableWindow(button_start, TRUE); + EnableWindow(button_stop, FALSE); + if(exiting){ + KillTimer(hWnd, TIMER_WATCH_TEWI); + SendMessage(hWnd, WM_CLOSE, 0, 0); + } + } + } + }else if(msg == WM_PAINT){ + HDC hdc; + PAINTSTRUCT ps; + RECT rc; + RECT fill; + + GetClientRect(hWnd, &rc); + hdc = BeginPaint(hWnd, &ps); + SetRect(&fill, 0, 0, WINWIDTH(rc), 40); + FillRect(hdc, &fill, pbtewi_brush); + ShowBitmap(hWnd, hdc, "PBTEWI", 0, 0); + EndPaint(hWnd, &ps); + }else{ + return DefWindowProc(hWnd, msg, wp, lp); + } + return 0; +} + +BOOL InitApp(void){ + WNDCLASS wc; + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInst; + wc.hIcon = LoadIcon(hInst, "TEWI"); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = GetSysColorBrush(COLOR_MENU); + wc.lpszMenuName = NULL; + wc.lpszClassName = "tewihttpd"; + return RegisterClass(&wc); +} + +BOOL InitWindow(int nCmdShow){ + HWND hWnd; + RECT deskrc, rc; + HWND hDeskWnd = GetDesktopWindow(); + GetWindowRect(hDeskWnd, &deskrc); + hWnd = CreateWindow("tewihttpd", "Tewi HTTPd", (WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME) ^ WS_MAXIMIZEBOX, 0, 0, 600, 200, NULL, 0, hInst, NULL); + + if(!hWnd){ + return FALSE; + } + GetWindowRect(hWnd, &rc); + 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); + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + return TRUE; +} + +int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){ + MSG msg; + BOOL bret; + hInst = hCurInst; + tewi_alive = FALSE; + was_starting = FALSE; + exiting = FALSE; + if(!InitApp()){ + return FALSE; + } + if(!InitWindow(nCmdShow)){ + return FALSE; + } + + while((bret = GetMessage(&msg, NULL, 0, 0)) != 0){ + if(bret == -1) { + break; + } else { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + return (int)msg.wParam; +} diff --git a/Server/gui.h b/Server/gui.h new file mode 100644 index 0000000..faf1607 --- /dev/null +++ b/Server/gui.h @@ -0,0 +1,20 @@ +/* $Id$ */ + +#ifndef __GUI_H__ +#define __GUI_H__ + +#define GUI_HELP_ABOUT 100 +#define GUI_BUTTON_START 101 +#define GUI_BUTTON_STOP 102 +#define GUI_BUTTON_ABOUT 103 +#define GUI_STATUS 104 +#define GUI_TEWI_ICON 105 +#define GUI_TEWI_NAME 106 +#define GUI_TEWI_ORIGINAL 107 +#define GUI_TEWI_DATE 108 +#define GUI_LOG 109 +#define GUI_BUTTON_EXIT 104 + +#define TIMER_WATCH_TEWI 1000 + +#endif diff --git a/Server/gui.rc b/Server/gui.rc new file mode 100644 index 0000000..11383d1 --- /dev/null +++ b/Server/gui.rc @@ -0,0 +1,18 @@ +/* $Id$ */ + +#include +#include "gui.h" +#include "tw_version.h" + +PBTEWI BITMAP "../Binary/pbtewi.bmp" +TEWILOGO BITMAP "../Binary/tewi.bmp" + +VERSIONDLG DIALOG 0, 0, 200, 50 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Version Information" +{ + LTEXT "Tewi HTTPd version " TW_VERSION, GUI_TEWI_NAME, 42, 5, 192, 50 + LTEXT "Original by Nishi ", GUI_TEWI_ORIGINAL, 42, 5 + 8, 192, 50 + LTEXT "Compilation date: " __DATE__ " " __TIME__, GUI_TEWI_DATE, 42, 5 + 8 + 8, 192, 50 + DEFPUSHBUTTON "&OK", IDOK, 75, 35, 50, 10 +} diff --git a/Server/main.c b/Server/main.c index b84a5e6..fcbd0da 100644 --- a/Server/main.c +++ b/Server/main.c @@ -7,6 +7,7 @@ #ifdef __BORLANDC__ #pragma resource "tewi_bcc.res" +#pragma resource "gui_bcc.res" #endif @@ -30,7 +31,7 @@ #include "tw_server.h" #include "tw_version.h" -#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) +#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) #include #endif @@ -524,6 +525,7 @@ void show_png(void) { #endif +#if !defined(BUILD_GUI) || !(defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) int main(int argc, char** argv) { int st; logfile = stderr; @@ -704,6 +706,7 @@ int main(int argc, char** argv) { #endif return 0; } +#endif int startup(int argc, char** argv) { int i; diff --git a/Server/tewi.rc b/Server/tewi.rc index 4bb3108..7766e8a 100644 --- a/Server/tewi.rc +++ b/Server/tewi.rc @@ -2,7 +2,7 @@ #include "tw_version.h" #include "../config.h" -id ICON "../Binary/tewi.ico" +TEWI ICON "../Binary/tewi.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 diff --git a/Tool/option.c b/Tool/option.c index c3b556a..1dc0650 100644 --- a/Tool/option.c +++ b/Tool/option.c @@ -13,14 +13,33 @@ int main(int argc, char** argv) { if(strcmp(argv[1], "cflags") == 0) { #ifndef NO_SSL printf("-I %s/openssl/include", argv[2]); +#endif +#ifdef BUILD_GUI + if(strcmp(argv[3], "WINDOWS_WATCOM") == 0){ + printf(" -b nt_win"); + }else if(strcmp(argv[3], "WINDOWS") == 0){ + printf(" -mwindows"); + } #endif } else if(strcmp(argv[1], "ldflags") == 0) { #ifndef NO_SSL printf("-L %s/openssl/lib", argv[2]); +#endif +#ifdef BUILD_GUI + if(strcmp(argv[3], "WINDOWS_WATCOM") == 0){ + printf(" -b nt_win"); + }else if(strcmp(argv[3], "WINDOWS") == 0){ + printf(" -mwindows"); + } #endif } else if(strcmp(argv[1], "objs") == 0) { #ifndef NO_SSL - printf("ssl.o"); + printf("ssl.%s", argv[4]); +#endif +#ifdef BUILD_GUI + if(strcmp(argv[3], "WINDOWS") == 0 || strcmp(argv[3], "WINDOWS_WATCOM") == 0){ + printf(" gui.%s", argv[4]); + } #endif } else if(strcmp(argv[1], "libs") == 0) { #ifndef NO_SSL @@ -31,12 +50,18 @@ int main(int argc, char** argv) { printf(" -lwsock32"); #else printf(" -lws2_32"); +#endif +#ifdef BUILD_GUI + printf(" -lcomctl32"); #endif }else if(strcmp(argv[3], "WINDOWS_WATCOM") == 0){ #ifdef USE_WINSOCK1 printf(" wsock32.lib"); #else printf(" ws2_32.lib"); +#endif +#ifdef BUILD_GUI + printf(" comctl32.lib"); #endif } } diff --git a/config.h.tmpl b/config.h.tmpl index 45fabd2..a5e8b09 100644 --- a/config.h.tmpl +++ b/config.h.tmpl @@ -11,6 +11,7 @@ #define HAS_CHROOT #undef NO_GETADDRINFO #undef USE_WINSOCK1 +#undef BUILD_GUI /* DO NOT EDIT BELOW THIS LINE */ @@ -22,6 +23,7 @@ #undef USE_POLL /* Force select(2) for Windows */ #endif + #if (defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) && defined(USE_WINSOCK1) && !defined(NO_GETADDRINFO) #define NO_GETADDRINFO /* getaddrinfo is not on winsock 1 */ -- 2.45.2