From dc005e58de0185a891397f963d25ea449f0455b3 Mon Sep 17 00:00:00 2001 From: Nishi Date: Fri, 4 Oct 2024 03:13:36 +0000 Subject: [PATCH] fix stuff git-svn-id: file:///raid/svn-personal/tewi/trunk@253 8739d7e6-ffea-ec47-b151-bdff447c6205 --- Common/log.c | 14 +++++++- Platform/watcom.mk | 3 +- Server/Makefile | 22 +++++++------ Server/config.c | 8 ++++- Server/gui.c | 82 ++++++++++++++++++++++++++++++++++++++++------ Server/main.c | 4 +-- Server/server.c | 4 +++ config.h.tmpl | 4 +++ make-installer.sh | 2 +- 9 files changed, 117 insertions(+), 26 deletions(-) diff --git a/Common/log.c b/Common/log.c index a7b7963..738fc13 100644 --- a/Common/log.c +++ b/Common/log.c @@ -2,6 +2,7 @@ #include "cm_log.h" +#include "../config.h" #include "cm_string.h" #include @@ -25,19 +26,30 @@ bool cm_do_log = false; #define LOGNAME_LENGTH 12 +#ifdef BUILD_GUI_VALID +void AddLog(const char* str); +#endif + void cm_force_log(const char* log) { time_t t = time(NULL); struct tm* tm = localtime(&t); char date[513]; + char* str; strftime(date, 512, "%a %b %d %H:%M:%S %Z %Y", tm); #ifdef _PSP pspDebugScreenPrintf("[%s] %s\n", date, log); #elif defined(__PPU__) tt_printf("[%s] %s\n", date, log); +#elif defined(BUILD_GUI_VALID) + str = malloc(strlen(date) + strlen(log) + 3 + 1); + str[strlen(date) + strlen(log) + 3] = 0; + sprintf(str, "[%s] %s", date, log); + AddLog(str); + free(str); #else fprintf(logfile, "[%s] %s\n", date, log); -#endif fflush(logfile); +#endif } void cm_log(const char* name, const char* log, ...) { diff --git a/Platform/watcom.mk b/Platform/watcom.mk index bf91582..f5bf848 100644 --- a/Platform/watcom.mk +++ b/Platform/watcom.mk @@ -13,4 +13,5 @@ EXEC = .exe STATIC = lib LIBSUF = .dll OBJ = obj -SERVADD = wrc -bt=nt -i=$(WATCOM)/h/nt tewi.rc tewi.exe && wrc -bt=nt -i=$(WATCOM)/h/nt gui.rc tewi.exe +REQOBJS = concat.rc +SERVADD = wrc -bt=nt -i=$(WATCOM)/h/nt concat.rc tewi.exe diff --git a/Server/Makefile b/Server/Makefile index 7ed2409..d408c01 100644 --- a/Server/Makefile +++ b/Server/Makefile @@ -45,22 +45,24 @@ tewi.pkg: tewi.self .c.$(OBJ): $(CC) $(CFLAGS) $(EXTCFLAGS) -c -o $@ $< -tewi.res: tewi.rc ../Binary/tewi.ico - $(WINDRES) tewi.rc -O coff -o $@ +tewi.res: concat.rc ../Binary/tewi.ico + $(WINDRES) concat.rc -O coff -o $@ -tewi_bcc.res: tewi.rc ../Binary/tewi.ico - brc32 -r -fo$@ tewi.rc +tewi_bcc.res: concat.rc ../Binary/tewi.ico + brc32 -r -fo$@ concat.rc -gui.res: gui.rc gui.h - $(WINDRES) gui.rc -O coff -o $@ +gui.res: concat.rc gui.h + $(WINDRES) concat.rc -O coff -o $@ -gui_bcc.res: gui.rc gui.h - brc32 -r -fo$@ gui.rc +gui_bcc.res: concat.rc gui.h + brc32 -r -fo$@ concat.rc -vc6.res: tewi.rc gui.rc - cat tewi.rc gui.rc > concat.rc +vc6.res: concat.rc rc /fo$@ concat.rc rm -f concat.rc +concat.rc: tewi.rc gui.rc + cat tewi.rc gui.rc > concat.rc + clean: rm -f *.o tewi *.exe *.res *.elf *.sfo *.pbp *.self *.pkg *.obj concat.rc diff --git a/Server/config.c b/Server/config.c index f2bf958..bedda4e 100644 --- a/Server/config.c +++ b/Server/config.c @@ -131,6 +131,7 @@ int tw_config_read(const char* path) { int ln = 0; int ifbr = 0; int ignore = -1; + int portcount; FILE* f; cm_log("Config", "Reading %s", path); f = fopen(path, "r"); @@ -487,7 +488,12 @@ int tw_config_read(const char* path) { } free(line); fclose(f); - return stop; + for(portcount = 0; config.ports[portcount] != -1; portcount++); + if(portcount == 0){ + return 1; + }else{ + return stop; + } } else { cm_log("Config", "Could not open the file"); return 1; diff --git a/Server/gui.c b/Server/gui.c index 84f81a5..ba7d575 100644 --- a/Server/gui.c +++ b/Server/gui.c @@ -3,8 +3,13 @@ #include "../config.h" #include "gui.h" +#include "tw_server.h" +#include + +#include #include +#include #include HINSTANCE hInst; @@ -14,15 +19,18 @@ HWND button_start; HWND button_stop; HWND button_about; HWND status; +HFONT monospace; BOOL tewi_alive; BOOL was_starting; BOOL exiting; +BOOL idle; +extern FILE* logfile; +extern int running; #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) +int startup(int argc, char** argv); void ShowBitmapSize(HWND hWnd, HDC hdc, const char* name, int x, int y, int w, int h){ HBITMAP hBitmap = LoadBitmap(hInst, name); @@ -44,6 +52,25 @@ void ShowBitmap(HWND hWnd, HDC hdc, const char* name, int x, int y){ ShowBitmapSize(hWnd, hdc, name, x, y, 0, 0); } +int max = 0; +void AddLog(const char* str){ + HDC hdc; + PAINTSTRUCT ps; + SIZE sz; + + SendMessage(logarea, LB_ADDSTRING, 0, (LPARAM)str); + + hdc = CreateCompatibleDC(NULL); + SelectObject(hdc, monospace); + GetTextExtentPoint32(hdc, str, strlen(str), &sz); + DeleteDC(hdc); + + if(max < sz.cx){ + max = sz.cx; + SendMessage(logarea, LB_SETHORIZONTALEXTENT, max, 0); + } +} + LRESULT CALLBACK VersionDialog(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ if(msg == WM_COMMAND){ if(LOWORD(wp) == IDOK) EndDialog(hWnd, IDOK); @@ -62,19 +89,42 @@ LRESULT CALLBACK VersionDialog(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ }else if(msg == WM_CTLCOLORDLG || msg == WM_CTLCOLORSTATIC){ HDC dc = (HDC)wp; SetBkMode(dc, TRANSPARENT); - return GetSysColorBrush(COLOR_MENU); + return (LRESULT)GetSysColorBrush(COLOR_MENU); }else{ return FALSE; } return TRUE; } -void StartTewi(void){ +void tewi_thread(void* ptr){ + int st = startup(0, NULL); + was_starting = TRUE; + if(st == -1){ + tewi_alive = TRUE; + idle = FALSE; + }else{ + cm_force_log("Config error"); + idle = FALSE; + _endthread(); + } + running = 1; + tw_server_loop(); + tewi_alive = FALSE; was_starting = TRUE; + idle = FALSE; + _endthread(); +} + +void StartTewi(void){ + EnableWindow(button_start, FALSE); + EnableWindow(button_stop, FALSE); + _beginthread(tewi_thread, 0, NULL); } void StopTewi(void){ - was_starting = TRUE; + EnableWindow(button_start, FALSE); + EnableWindow(button_stop, FALSE); + running = 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ @@ -118,6 +168,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ InitCommonControls(); + monospace = (HFONT)GetStockObject(SYSTEM_FIXED_FONT); + 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"); @@ -128,17 +180,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ 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); + 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); + + SendMessage(logarea, WM_SETFONT, (WPARAM)monospace, TRUE); + SetTimer(hWnd, TIMER_WATCH_TEWI, 100, NULL); }else if(msg == WM_TIMER){ if(wp == TIMER_WATCH_TEWI){ - if(tewi_alive){ + if(idle){ + }else 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); + idle = TRUE; }else{ if(was_starting){ was_starting = FALSE; @@ -150,6 +207,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ KillTimer(hWnd, TIMER_WATCH_TEWI); SendMessage(hWnd, WM_CLOSE, 0, 0); } + idle = TRUE; } } }else if(msg == WM_PAINT){ @@ -171,7 +229,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ } BOOL InitApp(void){ - WNDCLASS wc; + WNDCLASSEX wc; + wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; @@ -182,7 +241,8 @@ BOOL InitApp(void){ wc.hbrBackground = GetSysColorBrush(COLOR_MENU); wc.lpszMenuName = NULL; wc.lpszClassName = "tewihttpd"; - return RegisterClass(&wc); + wc.hIconSm = LoadIcon(hInst, "TEWI"); + return RegisterClassEx(&wc); } BOOL InitWindow(int nCmdShow){ @@ -190,7 +250,7 @@ BOOL InitWindow(int nCmdShow){ 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); + hWnd = CreateWindow("tewihttpd", "Tewi HTTPd", (WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME) ^ WS_MAXIMIZEBOX, 0, 0, 600, 400, NULL, 0, hInst, NULL); if(!hWnd){ return FALSE; @@ -209,6 +269,8 @@ int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, in tewi_alive = FALSE; was_starting = FALSE; exiting = FALSE; + idle = TRUE; + logfile = stderr; if(!InitApp()){ return FALSE; } diff --git a/Server/main.c b/Server/main.c index 9d2965d..6ccd60f 100644 --- a/Server/main.c +++ b/Server/main.c @@ -526,7 +526,7 @@ void show_png(void) { #endif -#if !defined(BUILD_GUI) || !(defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) +#if !defined(BUILD_GUI_VALID) int main(int argc, char** argv) { int st; logfile = stderr; @@ -796,7 +796,7 @@ int startup(int argc, char** argv) { #if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(__BORLANDC__) && !defined(__WATCOMC__) signal(SIGCHLD, SIG_IGN); signal(SIGPIPE, SIG_IGN); -#else +#elif !defined(BUILD_GUI) SetConsoleTitle(tw_server); #endif return -1; diff --git a/Server/server.c b/Server/server.c index 190339e..ef24441 100644 --- a/Server/server.c +++ b/Server/server.c @@ -1049,4 +1049,8 @@ void tw_server_loop(void) { } } } + for(i = 0; i < sockcount; i++){ + close_socket(sockets[i]); + } + cm_force_log("Server is down"); } diff --git a/config.h.tmpl b/config.h.tmpl index a5e8b09..4863f9e 100644 --- a/config.h.tmpl +++ b/config.h.tmpl @@ -19,6 +19,10 @@ #define SSL void #endif +#if (defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) && defined(USE_POLL) +#define BUILD_GUI_VALID +#endif + #if (defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__)) && defined(USE_POLL) #undef USE_POLL /* Force select(2) for Windows */ diff --git a/make-installer.sh b/make-installer.sh index ed61e38..c611712 100755 --- a/make-installer.sh +++ b/make-installer.sh @@ -23,7 +23,7 @@ cp Server/tewi.exe tewi.exe cd Server ../Tool/genconf "C:/Tewi" modules dll > ../generated.conf ../Tool/itworks > ../itworks.html -makensis /inputcharset utf8 -DVERSION=$VERSION -DONLY_EXEC install.nsi +makensis -DVERSION=$VERSION -DONLY_EXEC install.nsi cp install.exe ../install.exe cd .. rm tewi.exe -- 2.45.2