From f5e728ab229226c84af775486f78c111bd0e234a Mon Sep 17 00:00:00 2001 From: terminx Date: Fri, 14 Jul 2006 07:28:32 +0000 Subject: [PATCH] Boredom git-svn-id: https://svn.eduke32.com/eduke32@220 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/Makefile | 10 +- polymer/eduke32/source/misc/gameres.rc | 7 +- polymer/eduke32/source/startwin.game.c | 820 ++++++++++++------------- 3 files changed, 422 insertions(+), 415 deletions(-) diff --git a/polymer/eduke32/Makefile b/polymer/eduke32/Makefile index 013539acc..ac3f83924 100644 --- a/polymer/eduke32/Makefile +++ b/polymer/eduke32/Makefile @@ -42,6 +42,7 @@ OURCXXFLAGS=-fno-exceptions -fno-rtti LIBS=-lm ifneq (0,$(JFAUD)) JFAUDLIBS=../jfaud/libjfaud.a ../jfaud/mpadec/libmpadec.a + OURCFLAGS+=-DJFAUD endif NASMFLAGS=-s #-g @@ -206,10 +207,15 @@ $(OBJ)%.$o: $(SRC)jmact/%.c $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1 $(OBJ)%.$o: $(SRC)jaudiolib/%.c $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1 - + +ifeq (1,$(JFAUD)) +$(OBJ)%.$o: $(SRC)misc/%.rc + windres -i $< -o $@ --include-dir=$(EINC) --include-dir=$(SRC) -DJFAUD +else $(OBJ)%.$o: $(SRC)misc/%.rc windres -i $< -o $@ --include-dir=$(EINC) --include-dir=$(SRC) - +endif + $(OBJ)%.$o: $(SRC)util/%.c $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@ 2>&1 diff --git a/polymer/eduke32/source/misc/gameres.rc b/polymer/eduke32/source/misc/gameres.rc index a7020b4fa..dcced4033 100644 --- a/polymer/eduke32/source/misc/gameres.rc +++ b/polymer/eduke32/source/misc/gameres.rc @@ -19,7 +19,6 @@ BEGIN CONTROL "", WIN_STARTWIN_MESSAGES, "EDIT", ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VSCROLL, 0, 0, 32, 32 END - WIN_STARTWINPAGE_CONFIG DIALOGEX DISCARDABLE 20, 40, 279, 168 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD CAPTION "Dialog" @@ -29,8 +28,13 @@ BEGIN CONTROL "", IDCVMODE, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 6, 80, 56 CONTROL "&Fullscreen", IDCFULLSCREEN, "BUTTON", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 148, 8, 49, 10 +#ifdef JFAUD + CONTROL "S&ound driver:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 28, 50, 8 + CONTROL "", IDCSOUNDDRV, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 26, 110, 56 +#else CONTROL "S&ound driver:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_DISABLED | WS_VISIBLE, 5, 28, 50, 8 CONTROL "", IDCSOUNDDRV, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_DISABLED | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 26, 110, 56 +#endif CONTROL "&MIDI device:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_DISABLED | WS_VISIBLE, 5, 44, 50, 8 CONTROL "", IDCMIDIDEV, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_DISABLED | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 42, 110, 56 @@ -40,7 +44,6 @@ BEGIN CONTROL "&Always show configuration on start", IDCALWAYSSHOW, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 116, 140, 8 END - WIN_STARTWINPAGE_GAME DIALOGEX DISCARDABLE 20, 40, 279, 168 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD CAPTION "Dialog" diff --git a/polymer/eduke32/source/startwin.game.c b/polymer/eduke32/source/startwin.game.c index 7b6441e0f..e01b57117 100755 --- a/polymer/eduke32/source/startwin.game.c +++ b/polymer/eduke32/source/startwin.game.c @@ -27,11 +27,11 @@ static struct audioenumdrv *wavedevs = NULL; static struct { - int fullscreen; - int xdim, ydim, bpp; - int forcesetup; - int usemouse, usejoy; - char selectedgrp[BMAX_PATH+1]; + int fullscreen; + int xdim, ydim, bpp; + int forcesetup; + int usemouse, usejoy; + char selectedgrp[BMAX_PATH+1]; } settings; static HWND startupdlg = NULL; @@ -44,514 +44,512 @@ static int done = -1, mode = TAB_CONFIG; static void PopulateForm(int pgs) { - HWND hwnd; - char buf[256]; - int i,j; + HWND hwnd; + char buf[256]; + int i,j; - if (pgs & POPULATE_VIDEO) { - int mode; + if (pgs & POPULATE_VIDEO) { + int mode; - hwnd = GetDlgItem(pages[TAB_CONFIG], IDCVMODE); + hwnd = GetDlgItem(pages[TAB_CONFIG], IDCVMODE); - mode = checkvideomode(&settings.xdim, &settings.ydim, settings.bpp, settings.fullscreen, 1); - if (mode < 0) { - int cd[] = { 32, 24, 16, 15, 8, 0 }; - for (i=0; cd[i]; ) { if (cd[i] >= settings.bpp) i++; else break; } - for ( ; cd[i]; i++) { - mode = checkvideomode(&settings.xdim, &settings.ydim, cd[i], settings.fullscreen, 1); - if (mode < 0) continue; - settings.bpp = cd[i]; - break; - } - } + mode = checkvideomode(&settings.xdim, &settings.ydim, settings.bpp, settings.fullscreen, 1); + if (mode < 0) { + int cd[] = { 32, 24, 16, 15, 8, 0 }; + for (i=0; cd[i]; ) { if (cd[i] >= settings.bpp) i++; else break; } + for ( ; cd[i]; i++) { + mode = checkvideomode(&settings.xdim, &settings.ydim, cd[i], settings.fullscreen, 1); + if (mode < 0) continue; + settings.bpp = cd[i]; + break; + } + } - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCFULLSCREEN), (settings.fullscreen ? BST_CHECKED : BST_UNCHECKED)); - ComboBox_ResetContent(hwnd); - for (i=0; idevs; - for (i=0; wavedevs->drvs[i]; i++) { - strcpy(buf, wavedevs->drvs[i]); - if (d->devs) { - strcat(buf, ":"); - n = buf + strlen(buf); - for (j=0; d->devs[j]; j++) { - strcpy(n, d->devs[j]); - ComboBox_AddString(hwnd, buf); - } - } else { - ComboBox_AddString(hwnd, buf); - } - d = d->next; - } - } + hwnd = GetDlgItem(pages[TAB_CONFIG], IDCSOUNDDRV); + ComboBox_ResetContent(hwnd); + if (wavedevs) { + d = wavedevs->devs; + for (i=0; wavedevs->drvs[i]; i++) { + strcpy(buf, wavedevs->drvs[i]); + if (d->devs) { + strcat(buf, ":"); + n = buf + strlen(buf); + for (j=0; d->devs[j]; j++) { + strcpy(n, d->devs[j]); + ComboBox_AddString(hwnd, buf); + } + } else { + ComboBox_AddString(hwnd, buf); + } + d = d->next; + } + } - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCALWAYSSHOW), (settings.forcesetup ? BST_CHECKED : BST_UNCHECKED)); + Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCALWAYSSHOW), (settings.forcesetup ? BST_CHECKED : BST_UNCHECKED)); - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCINPUTMOUSE), (settings.usemouse ? BST_CHECKED : BST_UNCHECKED)); - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), (settings.usejoy ? BST_CHECKED : BST_UNCHECKED)); - } + Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCINPUTMOUSE), (settings.usemouse ? BST_CHECKED : BST_UNCHECKED)); + Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), (settings.usejoy ? BST_CHECKED : BST_UNCHECKED)); + } - if (pgs & POPULATE_GAME) { - struct grpfile *fg; - int i, j; - char buf[128+BMAX_PATH]; + if (pgs & POPULATE_GAME) { + struct grpfile *fg; + int i, j; + char buf[128+BMAX_PATH]; - hwnd = GetDlgItem(pages[TAB_GAME], IDGDATA); + hwnd = GetDlgItem(pages[TAB_GAME], IDGDATA); - for (fg = foundgrps; fg; fg=fg->next) { - for (i = 0; icrcval == grpfiles[i].crcval) break; - if (i == numgrpfiles) continue; // unrecognised grp file + for (fg = foundgrps; fg; fg=fg->next) { + for (i = 0; icrcval == grpfiles[i].crcval) break; + if (i == numgrpfiles) continue; // unrecognised grp file - Bsprintf(buf, "%s\t%s", grpfiles[i].name, fg->name); - j = ListBox_AddString(hwnd, buf); - ListBox_SetItemData(hwnd, j, (LPARAM)fg); - if (!Bstrcasecmp(fg->name, settings.selectedgrp)) ListBox_SetCurSel(hwnd, j); - } - } + Bsprintf(buf, "%s\t%s", grpfiles[i].name, fg->name); + j = ListBox_AddString(hwnd, buf); + ListBox_SetItemData(hwnd, j, (LPARAM)fg); + if (!Bstrcasecmp(fg->name, settings.selectedgrp)) ListBox_SetCurSel(hwnd, j); + } + } } static INT_PTR CALLBACK ConfigPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - switch (uMsg) { - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDCFULLSCREEN: - settings.fullscreen = !settings.fullscreen; - PopulateForm(POPULATE_VIDEO); - return TRUE; - case IDCVMODE: - if (HIWORD(wParam) == CBN_SELCHANGE) { - int i; - i = ComboBox_GetCurSel((HWND)lParam); - if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i); - if (i != CB_ERR) { - settings.xdim = validmode[i].xdim; - settings.ydim = validmode[i].ydim; - settings.bpp = validmode[i].bpp; - } - } - return TRUE; - case IDCALWAYSSHOW: - settings.forcesetup = IsDlgButtonChecked(hwndDlg, IDCALWAYSSHOW) == BST_CHECKED; - return TRUE; - case IDCINPUTMOUSE: - settings.usemouse = IsDlgButtonChecked(hwndDlg, IDCINPUTMOUSE) == BST_CHECKED; - return TRUE; - case IDCINPUTJOY: - settings.usejoy = IsDlgButtonChecked(hwndDlg, IDCINPUTJOY) == BST_CHECKED; - return TRUE; - default: break; - } - break; - default: break; - } - return FALSE; + switch (uMsg) { + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDCFULLSCREEN: + settings.fullscreen = !settings.fullscreen; + PopulateForm(POPULATE_VIDEO); + return TRUE; + case IDCVMODE: + if (HIWORD(wParam) == CBN_SELCHANGE) { + int i; + i = ComboBox_GetCurSel((HWND)lParam); + if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i); + if (i != CB_ERR) { + settings.xdim = validmode[i].xdim; + settings.ydim = validmode[i].ydim; + settings.bpp = validmode[i].bpp; + } + } + return TRUE; + case IDCALWAYSSHOW: + settings.forcesetup = IsDlgButtonChecked(hwndDlg, IDCALWAYSSHOW) == BST_CHECKED; + return TRUE; + case IDCINPUTMOUSE: + settings.usemouse = IsDlgButtonChecked(hwndDlg, IDCINPUTMOUSE) == BST_CHECKED; + return TRUE; + case IDCINPUTJOY: + settings.usejoy = IsDlgButtonChecked(hwndDlg, IDCINPUTJOY) == BST_CHECKED; + return TRUE; + default: break; + } + break; + default: break; + } + return FALSE; } static INT_PTR CALLBACK GamePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - switch (uMsg) { - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDGDATA: { - int i; - i = ListBox_GetCurSel((HWND)lParam); - if (i != CB_ERR) i = ListBox_GetItemData((HWND)lParam, i); - if (i != CB_ERR) strcpy(settings.selectedgrp, ((struct grpfile*)i)->name); - return TRUE; - } - default: break; - } - break; - default: break; - } - return FALSE; + switch (uMsg) { + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDGDATA: { + int i; + i = ListBox_GetCurSel((HWND)lParam); + if (i != CB_ERR) i = ListBox_GetItemData((HWND)lParam, i); + if (i != CB_ERR) strcpy(settings.selectedgrp, ((struct grpfile*)i)->name); + return TRUE; + } + default: break; + } + break; + default: break; + } + return FALSE; } static void SetPage(int n) { - HWND tab; - int cur; - tab = GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL); - cur = (int)SendMessage(tab, TCM_GETCURSEL,0,0); - ShowWindow(pages[cur],SW_HIDE); - SendMessage(tab, TCM_SETCURSEL, n, 0); - ShowWindow(pages[n],SW_SHOW); - mode = n; + HWND tab; + int cur; + tab = GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL); + cur = (int)SendMessage(tab, TCM_GETCURSEL,0,0); + ShowWindow(pages[cur],SW_HIDE); + SendMessage(tab, TCM_SETCURSEL, n, 0); + ShowWindow(pages[n],SW_SHOW); + mode = n; - SetFocus(GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL)); + SetFocus(GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL)); } static void EnableConfig(int n) { - //EnableWindow(GetDlgItem(startupdlg, WIN_STARTWIN_CANCEL), n); - EnableWindow(GetDlgItem(startupdlg, WIN_STARTWIN_START), n); - EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCFULLSCREEN), n); - EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCVMODE), n); - EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTMOUSE), n); - EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), n); + //EnableWindow(GetDlgItem(startupdlg, WIN_STARTWIN_CANCEL), n); + EnableWindow(GetDlgItem(startupdlg, WIN_STARTWIN_START), n); + EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCFULLSCREEN), n); + EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCVMODE), n); + EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTMOUSE), n); + EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), n); - EnableWindow(GetDlgItem(pages[TAB_GAME], IDGDATA), n); + EnableWindow(GetDlgItem(pages[TAB_GAME], IDGDATA), n); } static INT_PTR CALLBACK startup_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - static HBITMAP hbmp = NULL; - HDC hdc; + static HBITMAP hbmp = NULL; + HDC hdc; + + switch (uMsg) { + case WM_INITDIALOG: { + HWND hwnd; + RECT r, rdlg, chrome, rtab, rcancel, rstart; + int xoffset = 0, yoffset = 0; - switch (uMsg) { - case WM_INITDIALOG: { - HWND hwnd; - RECT r, rdlg, chrome, rtab, rcancel, rstart; - int xoffset = 0, yoffset = 0; + // Fetch the positions (in screen coordinates) of all the windows we need to tweak + ZeroMemory(&chrome, sizeof(chrome)); + AdjustWindowRect(&chrome, GetWindowLong(hwndDlg, GWL_STYLE), FALSE); + GetWindowRect(hwndDlg, &rdlg); + GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), &rtab); + GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), &rcancel); + GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_START), &rstart); - // Fetch the positions (in screen coordinates) of all the windows we need to tweak - ZeroMemory(&chrome, sizeof(chrome)); - AdjustWindowRect(&chrome, GetWindowLong(hwndDlg, GWL_STYLE), FALSE); - GetWindowRect(hwndDlg, &rdlg); - GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), &rtab); - GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), &rcancel); - GetWindowRect(GetDlgItem(hwndDlg, WIN_STARTWIN_START), &rstart); + // Knock off the non-client area of the main dialogue to give just the client area + rdlg.left -= chrome.left; rdlg.top -= chrome.top; + rdlg.right -= chrome.right; rdlg.bottom -= chrome.bottom; - // Knock off the non-client area of the main dialogue to give just the client area - rdlg.left -= chrome.left; rdlg.top -= chrome.top; - rdlg.right -= chrome.right; rdlg.bottom -= chrome.bottom; + // Translate them to client-relative coordinates wrt the main dialogue window + rtab.right -= rtab.left - 1; rtab.bottom -= rtab.top - 1; + rtab.left -= rdlg.left; rtab.top -= rdlg.top; - // Translate them to client-relative coordinates wrt the main dialogue window - rtab.right -= rtab.left - 1; rtab.bottom -= rtab.top - 1; - rtab.left -= rdlg.left; rtab.top -= rdlg.top; + rcancel.right -= rcancel.left - 1; rcancel.bottom -= rcancel.top - 1; + rcancel.left -= rdlg.left; rcancel.top -= rdlg.top; - rcancel.right -= rcancel.left - 1; rcancel.bottom -= rcancel.top - 1; - rcancel.left -= rdlg.left; rcancel.top -= rdlg.top; + rstart.right -= rstart.left - 1; rstart.bottom -= rstart.top - 1; + rstart.left -= rdlg.left; rstart.top -= rdlg.top; - rstart.right -= rstart.left - 1; rstart.bottom -= rstart.top - 1; - rstart.left -= rdlg.left; rstart.top -= rdlg.top; + // And then convert the main dialogue coordinates to just width/length + rdlg.right -= rdlg.left - 1; rdlg.bottom -= rdlg.top - 1; + rdlg.left = 0; rdlg.top = 0; - // And then convert the main dialogue coordinates to just width/length - rdlg.right -= rdlg.left - 1; rdlg.bottom -= rdlg.top - 1; - rdlg.left = 0; rdlg.top = 0; + // Load the bitmap into the bitmap control and fetch its dimensions + hbmp = LoadBitmap((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(RSRC_BMP)); + hwnd = GetDlgItem(hwndDlg,WIN_STARTWIN_BITMAP); + SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp); + GetClientRect(hwnd, &r); + xoffset = r.right; + yoffset = r.bottom - rdlg.bottom; - // Load the bitmap into the bitmap control and fetch its dimensions - hbmp = LoadBitmap((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(RSRC_BMP)); - hwnd = GetDlgItem(hwndDlg,WIN_STARTWIN_BITMAP); - SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp); - GetClientRect(hwnd, &r); - xoffset = r.right; - yoffset = r.bottom - rdlg.bottom; + // Shift and resize the controls that require it + rtab.left += xoffset; rtab.bottom += yoffset; + rcancel.left += xoffset; rcancel.top += yoffset; + rstart.left += xoffset; rstart.top += yoffset; + rdlg.right += xoffset; + rdlg.bottom += yoffset; - // Shift and resize the controls that require it - rtab.left += xoffset; rtab.bottom += yoffset; - rcancel.left += xoffset; rcancel.top += yoffset; - rstart.left += xoffset; rstart.top += yoffset; - rdlg.right += xoffset; - rdlg.bottom += yoffset; + // Move the controls to their new positions + MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), rtab.left, rtab.top, rtab.right, rtab.bottom, FALSE); + MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), rcancel.left, rcancel.top, rcancel.right, rcancel.bottom, FALSE); + MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_START), rstart.left, rstart.top, rstart.right, rstart.bottom, FALSE); - // Move the controls to their new positions - MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL), rtab.left, rtab.top, rtab.right, rtab.bottom, FALSE); - MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_CANCEL), rcancel.left, rcancel.top, rcancel.right, rcancel.bottom, FALSE); - MoveWindow(GetDlgItem(hwndDlg, WIN_STARTWIN_START), rstart.left, rstart.top, rstart.right, rstart.bottom, FALSE); + // Move the main dialogue to the centre of the screen + hdc = GetDC(NULL); + rdlg.left = (GetDeviceCaps(hdc, HORZRES) - rdlg.right) / 2; + rdlg.top = (GetDeviceCaps(hdc, VERTRES) - rdlg.bottom) / 2; + ReleaseDC(NULL, hdc); + MoveWindow(hwndDlg, rdlg.left + chrome.left, rdlg.top + chrome.left, + rdlg.right + (-chrome.left+chrome.right), rdlg.bottom + (-chrome.top+chrome.bottom), TRUE); - // Move the main dialogue to the centre of the screen - hdc = GetDC(NULL); - rdlg.left = (GetDeviceCaps(hdc, HORZRES) - rdlg.right) / 2; - rdlg.top = (GetDeviceCaps(hdc, VERTRES) - rdlg.bottom) / 2; - ReleaseDC(NULL, hdc); - MoveWindow(hwndDlg, rdlg.left + chrome.left, rdlg.top + chrome.left, - rdlg.right + (-chrome.left+chrome.right), rdlg.bottom + (-chrome.top+chrome.bottom), TRUE); + // Add tabs to the tab control + { + TCITEM tab; + + hwnd = GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL); - // Add tabs to the tab control - { - TCITEM tab; + ZeroMemory(&tab, sizeof(tab)); + tab.mask = TCIF_TEXT; + tab.pszText = TEXT("Configuration"); + SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_CONFIG, (LPARAM)&tab); + tab.mask = TCIF_TEXT; + tab.pszText = TEXT("Game"); + SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_GAME, (LPARAM)&tab); + tab.mask = TCIF_TEXT; + tab.pszText = TEXT("Messages"); + SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_MESSAGES, (LPARAM)&tab); - hwnd = GetDlgItem(hwndDlg, WIN_STARTWIN_TABCTL); + // Work out the position and size of the area inside the tab control for the pages + ZeroMemory(&r, sizeof(r)); + GetClientRect(hwnd, &r); + SendMessage(hwnd, TCM_ADJUSTRECT, FALSE, (LPARAM)&r); + r.right -= r.left-1; + r.bottom -= r.top-1; + r.top += rtab.top; + r.left += rtab.left; - ZeroMemory(&tab, sizeof(tab)); - tab.mask = TCIF_TEXT; - tab.pszText = TEXT("Configuration"); - SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_CONFIG, (LPARAM)&tab); - tab.mask = TCIF_TEXT; - tab.pszText = TEXT("Game"); - SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_GAME, (LPARAM)&tab); - tab.mask = TCIF_TEXT; - tab.pszText = TEXT("Messages"); - SendMessage(hwnd, TCM_INSERTITEM, (WPARAM)TAB_MESSAGES, (LPARAM)&tab); + // Create the pages and position them in the tab control, but hide them + pages[TAB_CONFIG] = CreateDialog((HINSTANCE)win_gethinstance(), + MAKEINTRESOURCE(WIN_STARTWINPAGE_CONFIG), hwndDlg, ConfigPageProc); + pages[TAB_GAME] = CreateDialog((HINSTANCE)win_gethinstance(), + MAKEINTRESOURCE(WIN_STARTWINPAGE_GAME), hwndDlg, GamePageProc); + pages[TAB_MESSAGES] = GetDlgItem(hwndDlg, WIN_STARTWIN_MESSAGES); + SetWindowPos(pages[TAB_CONFIG], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); + SetWindowPos(pages[TAB_GAME], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); + SetWindowPos(pages[TAB_MESSAGES], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); - // Work out the position and size of the area inside the tab control for the pages - ZeroMemory(&r, sizeof(r)); - GetClientRect(hwnd, &r); - SendMessage(hwnd, TCM_ADJUSTRECT, FALSE, (LPARAM)&r); - r.right -= r.left-1; - r.bottom -= r.top-1; - r.top += rtab.top; - r.left += rtab.left; + // Tell the editfield acting as the console to exclude the width of the scrollbar + GetClientRect(pages[TAB_MESSAGES],&r); + r.right -= GetSystemMetrics(SM_CXVSCROLL)+4; + r.left = r.top = 0; + SendMessage(pages[TAB_MESSAGES], EM_SETRECTNP,0,(LPARAM)&r); - // Create the pages and position them in the tab control, but hide them - pages[TAB_CONFIG] = CreateDialog((HINSTANCE)win_gethinstance(), - MAKEINTRESOURCE(WIN_STARTWINPAGE_CONFIG), hwndDlg, ConfigPageProc); - pages[TAB_GAME] = CreateDialog((HINSTANCE)win_gethinstance(), - MAKEINTRESOURCE(WIN_STARTWINPAGE_GAME), hwndDlg, GamePageProc); - pages[TAB_MESSAGES] = GetDlgItem(hwndDlg, WIN_STARTWIN_MESSAGES); - SetWindowPos(pages[TAB_CONFIG], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); - SetWindowPos(pages[TAB_GAME], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); - SetWindowPos(pages[TAB_MESSAGES], hwnd,r.left,r.top,r.right,r.bottom,SWP_HIDEWINDOW); + // Set a tab stop in the game data listbox + { + DWORD tabs[1] = { 150 }; + ListBox_SetTabStops(GetDlgItem(pages[TAB_GAME], IDGDATA), 1, tabs); + } - // Tell the editfield acting as the console to exclude the width of the scrollbar - GetClientRect(pages[TAB_MESSAGES],&r); - r.right -= GetSystemMetrics(SM_CXVSCROLL)+4; - r.left = r.top = 0; - SendMessage(pages[TAB_MESSAGES], EM_SETRECTNP,0,(LPARAM)&r); + SetFocus(GetDlgItem(hwndDlg, WIN_STARTWIN_START)); + SetWindowText(hwndDlg, apptitle); + } + return FALSE; + } - // Set a tab stop in the game data listbox - { - DWORD tabs[1] = { 150 }; - ListBox_SetTabStops(GetDlgItem(pages[TAB_GAME], IDGDATA), 1, tabs); - } + case WM_NOTIFY: { + LPNMHDR nmhdr = (LPNMHDR)lParam; + int cur; + if (nmhdr->idFrom != WIN_STARTWIN_TABCTL) break; + cur = (int)SendMessage(nmhdr->hwndFrom, TCM_GETCURSEL,0,0); + switch (nmhdr->code) { + case TCN_SELCHANGING: { + if (cur < 0 || !pages[cur]) break; + ShowWindow(pages[cur],SW_HIDE); + return TRUE; + } + case TCN_SELCHANGE: { + if (cur < 0 || !pages[cur]) break; + ShowWindow(pages[cur],SW_SHOW); + return TRUE; + } + } + break; + } - SetFocus(GetDlgItem(hwndDlg, WIN_STARTWIN_START)); - SetWindowText(hwndDlg, apptitle); - } - return FALSE; - } + case WM_CLOSE: + if (mode == TAB_CONFIG) done = 0; + else quitevent++; + return TRUE; - case WM_NOTIFY: { - LPNMHDR nmhdr = (LPNMHDR)lParam; - int cur; - if (nmhdr->idFrom != WIN_STARTWIN_TABCTL) break; - cur = (int)SendMessage(nmhdr->hwndFrom, TCM_GETCURSEL,0,0); - switch (nmhdr->code) { - case TCN_SELCHANGING: { - if (cur < 0 || !pages[cur]) break; - ShowWindow(pages[cur],SW_HIDE); - return TRUE; - } - case TCN_SELCHANGE: { - if (cur < 0 || !pages[cur]) break; - ShowWindow(pages[cur],SW_SHOW); - return TRUE; - } - } - break; - } + case WM_DESTROY: + if (hbmp) { + DeleteObject(hbmp); + hbmp = NULL; + } - case WM_CLOSE: - if (mode == TAB_CONFIG) done = 0; - else quitevent++; - return TRUE; + if (pages[TAB_GAME]) { + DestroyWindow(pages[TAB_GAME]); + pages[TAB_GAME] = NULL; + } - case WM_DESTROY: - if (hbmp) { - DeleteObject(hbmp); - hbmp = NULL; - } + if (pages[TAB_CONFIG]) { + DestroyWindow(pages[TAB_CONFIG]); + pages[TAB_CONFIG] = NULL; + } - if (pages[TAB_GAME]) { - DestroyWindow(pages[TAB_GAME]); - pages[TAB_GAME] = NULL; - } + startupdlg = NULL; + return TRUE; - if (pages[TAB_CONFIG]) { - DestroyWindow(pages[TAB_CONFIG]); - pages[TAB_CONFIG] = NULL; - } + case WM_COMMAND: + switch (LOWORD(wParam)) { + case WIN_STARTWIN_CANCEL: + if (mode == TAB_CONFIG) done = 0; + else quitevent++; + return TRUE; + case WIN_STARTWIN_START: done = 1; return TRUE; + } + return FALSE; - startupdlg = NULL; - return TRUE; + case WM_CTLCOLORSTATIC: + if ((HWND)lParam == pages[TAB_MESSAGES]) + return (BOOL)GetSysColorBrush(COLOR_WINDOW); + break; - case WM_COMMAND: - switch (LOWORD(wParam)) { - case WIN_STARTWIN_CANCEL: - if (mode == TAB_CONFIG) done = 0; - else quitevent++; - return TRUE; - case WIN_STARTWIN_START: done = 1; return TRUE; - } - return FALSE; + default: break; + } - case WM_CTLCOLORSTATIC: - if ((HWND)lParam == pages[TAB_MESSAGES]) - return (BOOL)GetSysColorBrush(COLOR_WINDOW); - break; - - default: break; - } - - return FALSE; + return FALSE; } int startwin_open(void) { - INITCOMMONCONTROLSEX icc; - if (startupdlg) return 1; - icc.dwSize = sizeof(icc); - icc.dwICC = ICC_TAB_CLASSES; - InitCommonControlsEx(&icc); - startupdlg = CreateDialog((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(WIN_STARTWIN), NULL, startup_dlgproc); - if (startupdlg) { - SetPage(TAB_MESSAGES); - EnableConfig(0); - return 0; - } - return -1; + INITCOMMONCONTROLSEX icc; + if (startupdlg) return 1; + icc.dwSize = sizeof(icc); + icc.dwICC = ICC_TAB_CLASSES; + InitCommonControlsEx(&icc); + startupdlg = CreateDialog((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(WIN_STARTWIN), NULL, startup_dlgproc); + if (startupdlg) { + SetPage(TAB_MESSAGES); + EnableConfig(0); + return 0; + } + return -1; } int startwin_close(void) { - if (!startupdlg) return 1; - DestroyWindow(startupdlg); - startupdlg = NULL; - return 0; + if (!startupdlg) return 1; + DestroyWindow(startupdlg); + startupdlg = NULL; + return 0; } int startwin_puts(const char *buf) { - const char *p = NULL, *q = NULL; - char workbuf[1024]; - static int newline = 0; - int curlen, linesbefore, linesafter; - HWND edctl; - int vis; + const char *p = NULL, *q = NULL; + char workbuf[1024]; + static int newline = 0; + int curlen, linesbefore, linesafter; + HWND edctl; + int vis; - if (!startupdlg) return 1; + if (!startupdlg) return 1; + + edctl = pages[TAB_MESSAGES]; + if (!edctl) return -1; - edctl = pages[TAB_MESSAGES]; - if (!edctl) return -1; + vis = ((int)SendMessage(GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL), TCM_GETCURSEL,0,0) == TAB_MESSAGES); - vis = ((int)SendMessage(GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL), TCM_GETCURSEL,0,0) == TAB_MESSAGES); - - if (vis) SendMessage(edctl, WM_SETREDRAW, FALSE,0); - curlen = SendMessage(edctl, WM_GETTEXTLENGTH, 0,0); - SendMessage(edctl, EM_SETSEL, (WPARAM)curlen, (LPARAM)curlen); - linesbefore = SendMessage(edctl, EM_GETLINECOUNT, 0,0); - p = buf; - while (*p) { - if (newline) { - SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)"\r\n"); - newline = 0; - } - q = p; - while (*q && *q != '\n') q++; - memcpy(workbuf, p, q-p); - if (*q == '\n') { - if (!q[1]) { - newline = 1; - workbuf[q-p] = 0; - } else { - workbuf[q-p] = '\r'; - workbuf[q-p+1] = '\n'; - workbuf[q-p+2] = 0; - } - p = q+1; - } else { - workbuf[q-p] = 0; - p = q; - } - SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)workbuf); - } - linesafter = SendMessage(edctl, EM_GETLINECOUNT, 0,0); - SendMessage(edctl, EM_LINESCROLL, 0, linesafter-linesbefore); - if (vis) SendMessage(edctl, WM_SETREDRAW, TRUE,0); - return 0; + if (vis) SendMessage(edctl, WM_SETREDRAW, FALSE,0); + curlen = SendMessage(edctl, WM_GETTEXTLENGTH, 0,0); + SendMessage(edctl, EM_SETSEL, (WPARAM)curlen, (LPARAM)curlen); + linesbefore = SendMessage(edctl, EM_GETLINECOUNT, 0,0); + p = buf; + while (*p) { + if (newline) { + SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)"\r\n"); + newline = 0; + } + q = p; + while (*q && *q != '\n') q++; + memcpy(workbuf, p, q-p); + if (*q == '\n') { + if (!q[1]) { + newline = 1; + workbuf[q-p] = 0; + } else { + workbuf[q-p] = '\r'; + workbuf[q-p+1] = '\n'; + workbuf[q-p+2] = 0; + } + p = q+1; + } else { + workbuf[q-p] = 0; + p = q; + } + SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)workbuf); + } + linesafter = SendMessage(edctl, EM_GETLINECOUNT, 0,0); + SendMessage(edctl, EM_LINESCROLL, 0, linesafter-linesbefore); + if (vis) SendMessage(edctl, WM_SETREDRAW, TRUE,0); + return 0; } int startwin_settitle(const char *str) { - if (!startupdlg) return 1; - SetWindowText(startupdlg, str); - return 0; + if (!startupdlg) return 1; + SetWindowText(startupdlg, str); + return 0; } int startwin_idle(void *v) { - if (!startupdlg || !IsWindow(startupdlg)) return 0; - if (IsDialogMessage(startupdlg, (MSG*)v)) return 1; - return 0; + if (!startupdlg || !IsWindow(startupdlg)) return 0; + if (IsDialogMessage(startupdlg, (MSG*)v)) return 1; + return 0; } extern char *duke3dgrp; int startwin_run(void) { - MSG msg; - if (!startupdlg) return 1; + MSG msg; + if (!startupdlg) return 1; - done = -1; + done = -1; - ScanGroups(); + ScanGroups(); #ifdef JFAUD - EnumAudioDevs(&wavedevs, NULL, NULL); + EnumAudioDevs(&wavedevs, NULL, NULL); #endif - SetPage(TAB_CONFIG); - EnableConfig(1); + SetPage(TAB_CONFIG); + EnableConfig(1); - settings.fullscreen = ScreenMode; - settings.xdim = ScreenWidth; - settings.ydim = ScreenHeight; - settings.bpp = ScreenBPP; - settings.forcesetup = ForceSetup; - settings.usemouse = UseMouse; - settings.usejoy = UseJoystick; - strncpy(settings.selectedgrp, duke3dgrp, BMAX_PATH); - PopulateForm(-1); + settings.fullscreen = ScreenMode; + settings.xdim = ScreenWidth; + settings.ydim = ScreenHeight; + settings.bpp = ScreenBPP; + settings.forcesetup = ForceSetup; + settings.usemouse = UseMouse; + settings.usejoy = UseJoystick; + strncpy(settings.selectedgrp, duke3dgrp, BMAX_PATH); + PopulateForm(-1); - while (done < 0) { - switch (GetMessage(&msg, NULL, 0,0)) { - case 0: done = 1; break; - case -1: return -1; - default: - if (IsWindow(startupdlg) && IsDialogMessage(startupdlg, &msg)) break; - TranslateMessage(&msg); - DispatchMessage(&msg); - break; - } - } + while (done < 0) { + switch (GetMessage(&msg, NULL, 0,0)) { + case 0: done = 1; break; + case -1: return -1; + default: + if (IsWindow(startupdlg) && IsDialogMessage(startupdlg, &msg)) break; + TranslateMessage(&msg); + DispatchMessage(&msg); + break; + } + } - SetPage(TAB_MESSAGES); - EnableConfig(0); - if (done) { - ScreenMode = settings.fullscreen; - ScreenWidth = settings.xdim; - ScreenHeight = settings.ydim; - ScreenBPP = settings.bpp; - ForceSetup = settings.forcesetup; - UseMouse = settings.usemouse; - UseJoystick = settings.usejoy; - duke3dgrp = settings.selectedgrp; - } + SetPage(TAB_MESSAGES); + EnableConfig(0); + if (done) { + ScreenMode = settings.fullscreen; + ScreenWidth = settings.xdim; + ScreenHeight = settings.ydim; + ScreenBPP = settings.bpp; + ForceSetup = settings.forcesetup; + UseMouse = settings.usemouse; + UseJoystick = settings.usejoy; + duke3dgrp = settings.selectedgrp; + } -#ifdef JFAUD - if (wavedevs) { - struct audioenumdev *d, *e; - free(wavedevs->drvs); - for (e=wavedevs->devs; e; e=d) { - d = e->next; - if (e->devs) free(e->devs); - free(e); - } - free(wavedevs); - } -#endif + if (wavedevs) { + struct audioenumdev *d, *e; + free(wavedevs->drvs); + for (e=wavedevs->devs; e; e=d) { + d = e->next; + if (e->devs) free(e->devs); + free(e); + } + free(wavedevs); + } - return done; + return done; }