static INT_PTR CALLBACK deviceconfig_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) #endif { switch (message) { case WM_INITDIALOG: { int id = IDC_CONFIG_BASE; device_config_t *config = config_device->config; int c; while (config->type != -1) { device_config_selection_t *selection = config->selection; HWND h = GetDlgItem(hdlg, id); int val_int; char *val_string; int num; char s[80]; switch (config->type) { case CONFIG_BINARY: val_int = config_get_int(config_device->name, config->name, config->default_int); SendMessage(h, BM_SETCHECK, val_int, 0); id++; break; case CONFIG_SELECTION: val_int = config_get_int(config_device->name, config->name, config->default_int); c = 0; while (selection->description[0]) { SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)selection->description); if (val_int == selection->value) SendMessage(h, CB_SETCURSEL, c, 0); selection++; c++; } id += 2; break; case CONFIG_MIDI: val_int = config_get_int(NULL, config->name, config->default_int); num = midi_get_num_devs(); for (c = 0; c < num; c++) { midi_get_dev_name(c, s); SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s); if (val_int == c) SendMessage(h, CB_SETCURSEL, c, 0); } id += 2; break; } config++; } } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { int id = IDC_CONFIG_BASE; device_config_t *config = config_device->config; int c; int changed = 0; while (config->type != -1) { device_config_selection_t *selection = config->selection; HWND h = GetDlgItem(hdlg, id); int val_int; char *val_string; switch (config->type) { case CONFIG_BINARY: val_int = config_get_int(config_device->name, config->name, config->default_int); if (val_int != SendMessage(h, BM_GETCHECK, 0, 0)) changed = 1; id++; break; case CONFIG_SELECTION: val_int = config_get_int(config_device->name, config->name, config->default_int); c = SendMessage(h, CB_GETCURSEL, 0, 0); for (; c > 0; c--) selection++; if (val_int != selection->value) changed = 1; id += 2; break; case CONFIG_MIDI: val_int = config_get_int(NULL, config->name, config->default_int); c = SendMessage(h, CB_GETCURSEL, 0, 0); if (val_int != c) changed = 1; id += 2; break; } config++; } if (!changed) { EndDialog(hdlg, 0); return TRUE; } if (MessageBox(NULL, "This will reset PCem!\nOkay to continue?", "PCem", MB_OKCANCEL) != IDOK) { EndDialog(hdlg, 0); return TRUE; } id = IDC_CONFIG_BASE; config = config_device->config; while (config->type != -1) { device_config_selection_t *selection = config->selection; HWND h = GetDlgItem(hdlg, id); int val_int; char *val_string; switch (config->type) { case CONFIG_BINARY: config_set_int(config_device->name, config->name, SendMessage(h, BM_GETCHECK, 0, 0)); id++; break; case CONFIG_SELECTION: c = SendMessage(h, CB_GETCURSEL, 0, 0); for (; c > 0; c--) selection++; config_set_int(config_device->name, config->name, selection->value); id += 2; break; case CONFIG_MIDI: c = SendMessage(h, CB_GETCURSEL, 0, 0); config_set_int(NULL, config->name, c); id += 2; break; } config++; } saveconfig(); resetpchard(); EndDialog(hdlg, 0); return TRUE; } case IDCANCEL: EndDialog(hdlg, 0); return TRUE; } break; } return FALSE; }
int main(int argc, char *argv[]) { int frames = 0; int c, d; allegro_init(); allegro_video_init(); install_timer(); install_int_ex(timer_rout, BPS_TO_TIMER(100)); install_int_ex(onesec, BPS_TO_TIMER(1)); midi_init(); initpc(argc, argv); d = romset; for (c = 0; c < ROM_MAX; c++) { romset = c; romspresent[c] = loadbios(); pclog("romset %i - %i\n", c, romspresent[c]); } for (c = 0; c < ROM_MAX; c++) { if (romspresent[c]) break; } if (c == ROM_MAX) { printf("No ROMs present!\nYou must have at least one romset to use PCem."); return 0; } romset=d; c=loadbios(); if (!c) { if (romset != -1) printf("Configured romset not available.\nDefaulting to available romset."); for (c = 0; c < ROM_MAX; c++) { if (romspresent[c]) { romset = c; model = model_getmodel(romset); saveconfig(); resetpchard(); break; } } } for (c = 0; c < GFX_MAX; c++) gfx_present[c] = video_card_available(video_old_to_new(c)); if (!video_card_available(video_old_to_new(gfxcard))) { if (gfxcard) printf("Configured video BIOS not available.\nDefaulting to available romset."); for (c = GFX_MAX-1; c >= 0; c--) { if (gfx_present[c]) { gfxcard = c; saveconfig(); resetpchard(); break; } } } resetpchard(); ticks = 0; while (!quited) { if (ticks) { ticks--; runpc(); frames++; if (frames >= 200 && nvr_dosave) { frames = 0; nvr_dosave = 0; savenvr(); } } else rest(1); if (ticks > 10) ticks = 0; if ((mouse_b & 1) && !mousecapture) mousecapture = 1; if (((key[KEY_LCONTROL] || key[KEY_RCONTROL]) && key[KEY_END]) || (mouse_b & 4)) mousecapture = 0; if ((key[KEY_LCONTROL] || key[KEY_RCONTROL]) && key[KEY_ALT] && key[KEY_PGDN]) { int old_winsizex = winsizex, old_winsizey = winsizey; if (winsizex < 512 || winsizey < 350) updatewindowsize(512, 350); gui_enter(); if (old_winsizex < 512 || old_winsizey < 350) updatewindowsize(old_winsizex, old_winsizey); ticks = 0; } } closepc(); midi_close(); return 0; }