int GetPatchFilename(WCHAR *patch_name, const WCHAR *game_name, const int patch_index) { WIN32_FIND_DATAW ffd; HANDLE hFile; WCHAR szFilename[MAX_PATH]; swprintf(szFilename, TEXT("%s\\%s\\*.dat"), GetIPSDir(), game_name); hFile = FindFirstFileW(szFilename, &ffd); if (hFile != INVALID_HANDLE_VALUE) { int Done = 0; int Count = 0; while (!Done ) { if (Count == patch_index) { wcscpy(patch_name, ffd.cFileName); patch_name[wcslen(patch_name) - 4] = '\0'; // To trim the ext ".dat" break; } Count++; Done = !FindNextFileW(hFile, &ffd); } FindClose(hFile); return -1; } return 0; }
int GetPatchCount(const WCHAR *game_name, const WCHAR *patch_name) { int Count = 0; if (game_name && patch_name) { WCHAR szFilename[MAX_PATH]; WIN32_FIND_DATAW ffd; HANDLE hFile; swprintf(szFilename, TEXT("%s\\%s\\%s.dat"), GetIPSDir(), game_name, patch_name); hFile = FindFirstFileW(szFilename, &ffd); if (hFile != INVALID_HANDLE_VALUE) { int Done = 0; while (!Done) { Count++; Done = !FindNextFileW(hFile, &ffd); } FindClose(hFile); } } return Count; }
LPWSTR GetPatchDesc(const WCHAR *game_name, const WCHAR *patch_name) { FILE *fp; LPWSTR desc = NULL; WCHAR szFilename[MAX_PATH]; swprintf(szFilename, TEXT("%s\\%s\\%s.dat"), GetIPSDir(), game_name, patch_name); if ((fp = wfopen(szFilename, TEXT("r"))) != NULL) { /* Get localized desc */ desc = GetPatchDescByLangcode(fp, GetLangcode()); /* Get English desc if localized version is not found */ if (desc == NULL) desc = GetPatchDescByLangcode(fp, UI_LANG_EN_US); fclose(fp); } return desc; }
BOOL LoadDIB(const WCHAR *filename, HGLOBAL *phDIB, HPALETTE *pPal, int pic_type) { file_error filerr; core_file *file = NULL; BOOL success = FALSE; const WCHAR *zip_name; const WCHAR *dir_name; void *buffer = NULL; char *utf8filename; char *utf8zip_name; char *utf8dir_name; if (pPal != NULL ) { DeletePalette(pPal); } switch (pic_type) { case TAB_SCREENSHOT : dir_name = GetImgDir(); zip_name = TEXT("snap"); break; case TAB_FLYER : dir_name = GetFlyerDir(); zip_name = TEXT("flyers"); break; case TAB_CABINET : dir_name = GetCabinetDir(); zip_name = TEXT("cabinets"); break; case TAB_MARQUEE : dir_name = GetMarqueeDir(); zip_name = TEXT( "marquees"); break; case TAB_TITLE : dir_name = GetTitlesDir(); zip_name = TEXT("titles"); break; case TAB_CONTROL_PANEL : dir_name = GetControlPanelDir(); zip_name = TEXT("cpanel"); break; case TAB_PCB : dir_name = GetPcbDir(); zip_name = TEXT("pcb"); break; case BACKGROUND : dir_name = GetBgDir(); zip_name = TEXT("bkground"); break; #ifdef USE_IPS case TAB_IPS : dir_name = GetIPSDir(); zip_name = TEXT("ips"); break; #endif /* USE_IPS */ default : // in case a non-image tab gets here, which can happen return FALSE; } utf8filename = utf8_from_wstring(filename); utf8zip_name = utf8_from_wstring(zip_name); utf8dir_name = utf8_from_wstring(dir_name); //Add handling for the displaying of all the different supported snapshot patterntypes //%g astring fname(utf8filename, ".png"); filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer); if (filerr != FILERR_NONE) { //%g/%i astring fname(utf8filename, PATH_SEPARATOR, "0000.png"); filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer); } if (filerr != FILERR_NONE) { //%g%i astring fname(utf8filename, "0000.png"); filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer); } if (filerr != FILERR_NONE) { //%g/%g astring fname(utf8filename, PATH_SEPARATOR, utf8filename, ".png"); filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer); } if (filerr != FILERR_NONE) { //%g/%g%i astring fname(utf8filename, PATH_SEPARATOR, utf8filename, ".png"); filerr = OpenDIBFile(utf8dir_name, utf8zip_name, fname, &file, &buffer); } if (filerr == FILERR_NONE) { success = png_read_bitmap_gui(file, phDIB, pPal); core_fclose(file); } // free the buffer if we have to if (buffer != NULL) { free(buffer); } osd_free(utf8filename); osd_free(utf8zip_name); osd_free(utf8dir_name); return success; }