char *InpDIPSWGetCurrentValue(int dip_index,int *dip_current_value) { BurnDIPInfo bdi; unsigned int i = 0, j = 0, k = 0, dip_ofs=0; char* pDIPGroup = NULL; while (BurnDrvGetDIPInfo(&bdi, i) == 0) { if ((bdi.nFlags & 0xF0) == 0xF0) { if (bdi.nFlags == 0xFE || bdi.nFlags == 0xFD) { pDIPGroup = bdi.szText; k++; dip_ofs=i; } i++; } else { if (CheckSetting(i)) { if (k==(dip_index+1)) { if (dip_current_value) *dip_current_value=i-dip_ofs-1; return bdi.szText; } j++; } i += (bdi.nFlags & 0x0F); } } return NULL; }
void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "VertexDepthRounding", &flags_.VertexDepthRounding); CheckSetting(iniFile, gameID, "PixelDepthRounding", &flags_.PixelDepthRounding); CheckSetting(iniFile, gameID, "DepthRangeHack", &flags_.DepthRangeHack); CheckSetting(iniFile, gameID, "ClearToRAM", &flags_.ClearToRAM); CheckSetting(iniFile, gameID, "Force04154000Download", &flags_.Force04154000Download); CheckSetting(iniFile, gameID, "DrawSyncEatCycles", &flags_.DrawSyncEatCycles); CheckSetting(iniFile, gameID, "FakeMipmapChange", &flags_.FakeMipmapChange); }
int InpDIPSWGetNb() { BurnDIPInfo bdi; unsigned int i = 0, j = 0, k = 0; char* pDIPGroup = NULL; while (BurnDrvGetDIPInfo(&bdi, i) == 0) { if ((bdi.nFlags & 0xF0) == 0xF0) { if (bdi.nFlags == 0xFE || bdi.nFlags == 0xFD) { pDIPGroup = bdi.szText; k = i; } i++; } else { if (CheckSetting(i)) { j++; } i += (bdi.nFlags & 0x0F); } } return j; }
char *InpDIPSWGetDIPName(int dip_index) { BurnDIPInfo bdi; unsigned int i = 0, j = 0, k = 0; while (BurnDrvGetDIPInfo(&bdi, i) == 0) { if ((bdi.nFlags & 0xF0) == 0xF0) { if (bdi.nFlags == 0xFE || bdi.nFlags == 0xFD) { if (k==dip_index) return bdi.szText; k++; } i++; } else { if (CheckSetting(i)) { j++; } i += (bdi.nFlags & 0x0F); } } return NULL; }
// Create the list of possible values for a DIPswitch static void InpDIPSWSelect() { SendMessage(GetDlgItem(hInpDIPSWDlg, IDC_INPCX1_VALUE), CB_RESETCONTENT, 0, 0); int nSel = SendMessage(hInpDIPSWList, LVM_GETNEXTITEM, (WPARAM)-1, LVNI_SELECTED); if (nSel >= 0) { LVITEM LvItem; memset(&LvItem, 0, sizeof(LvItem)); LvItem.mask = LVIF_PARAM; LvItem.iItem = nSel; SendMessage(hInpDIPSWList, LVM_GETITEM, 0, (LPARAM)&LvItem); nDIPGroup = LvItem.lParam; BurnDIPInfo bdiGroup; BurnDrvGetDIPInfo(&bdiGroup, nDIPGroup); int nCurrentSetting = 0; for (int i = 0, j = 0; i < bdiGroup.nSetting; i++) { TCHAR szText[256]; BurnDIPInfo bdi; do { BurnDrvGetDIPInfo(&bdi, nDIPGroup + 1 + j++); } while (bdi.nFlags == 0); if (bdiGroup.szText) { _stprintf(szText, _T("%hs: %hs"), bdiGroup.szText, bdi.szText); } else { _stprintf(szText, _T("%hs"), bdi.szText); } SendMessage(GetDlgItem(hInpDIPSWDlg, IDC_INPCX1_VALUE), CB_ADDSTRING, 0, (LPARAM)szText); if (CheckSetting(nDIPGroup + j)) { nCurrentSetting = i; } } SendMessage(GetDlgItem(hInpDIPSWDlg, IDC_INPCX1_VALUE), CB_SETCURSEL, (WPARAM)nCurrentSetting, 0); } }
// Make a list view of the DIPswitches static int InpDIPSWListMake() { if (hInpDIPSWList == NULL) { return 1; } SendMessage(hInpDIPSWList, LVM_DELETEALLITEMS, 0, 0); BurnDIPInfo bdi; unsigned int i = 0, j = 0, k = 0; char* pDIPGroup = NULL; while (BurnDrvGetDIPInfo(&bdi, i) == 0) { if ((bdi.nFlags & 0xF0) == 0xF0) { if (bdi.nFlags == 0xFE || bdi.nFlags == 0xFD) { pDIPGroup = bdi.szText; k = i; } i++; } else { if (CheckSetting(i)) { LVITEM LvItem; memset(&LvItem, 0, sizeof(LvItem)); LvItem.mask = LVIF_TEXT | LVIF_PARAM; LvItem.iItem = j; LvItem.iSubItem = 0; LvItem.pszText = ANSIToTCHAR(pDIPGroup, NULL, 0); LvItem.lParam = (LPARAM)k; SendMessage(hInpDIPSWList, LVM_INSERTITEM, 0, (LPARAM)&LvItem); LvItem.mask = LVIF_TEXT; LvItem.iSubItem = 1; LvItem.pszText = ANSIToTCHAR(bdi.szText, NULL, 0); SendMessage(hInpDIPSWList, LVM_SETITEM, 0, (LPARAM)&LvItem); j++; } i += (bdi.nFlags & 0x0F); } } return 0; }