#include #include "minIni.h" #include "../common/IZ_common.h" // #ifdef WIN64 #include // #endif i32 IZ_ReadAsset(const char* current_dir, const char* ini_filename) { WIN32_FIND_DATA fd_file; char current_path[2048]; sprintf(current_path, "%s\\*.*", current_dir); HANDLE h_find = FindFirstFile(current_path, &fd_file); if (h_find == INVALID_HANDLE_VALUE) { return -1; } do { if (strcmp(fd_file.cFileName, ".") == 0) { continue; } if (strcmp(fd_file.cFileName, "..") == 0) { continue; } sprintf(current_path, "%s\\%s", current_dir, fd_file.cFileName); if (fd_file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { fprintf(stderr, "Invalid asset component: %s\n", current_path); continue; } char final_current_dir[2048]; memcpy(final_current_dir, current_dir, 2048); u16 i = 0; char c = current_dir[i]; while (c != '\0') { final_current_dir[i] = c == '\\' ? '/' : c; i += 1; c = current_dir[i]; } ini_putl(final_current_dir, fd_file.cFileName, fd_file.nFileSizeLow, ini_filename); } while(FindNextFile(h_find, &fd_file)); FindClose(h_find); return 0; } i32 IZ_ReadAssetPack(const char* current_dir, const char* ini_filename) { WIN32_FIND_DATA fd_file; char current_path[2048]; sprintf(current_path, "%s\\*.*", current_dir); HANDLE h_find = FindFirstFile(current_path, &fd_file); if (h_find == INVALID_HANDLE_VALUE) { return -1; } do { if (strcmp(fd_file.cFileName, ".") == 0) { continue; } if (strcmp(fd_file.cFileName, "..") == 0) { continue; } sprintf(current_path, "%s\\%s", current_dir, fd_file.cFileName); if (fd_file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { IZ_ReadAsset(current_path, ini_filename); continue; } fprintf(stderr, "Invalid asset: %s\n", current_path); } while(FindNextFile(h_find, &fd_file)); FindClose(h_find); return 0; } i32 IZ_ReadAllAssetPacks(const char* current_dir, const char* ini_filename) { ini_remove(ini_filename); WIN32_FIND_DATA fd_file; char current_path[2048]; sprintf(current_path, "%s\\*.*", current_dir); HANDLE h_find = FindFirstFile(current_path, &fd_file); if (h_find == INVALID_HANDLE_VALUE) { return -1; } do { if (strcmp(fd_file.cFileName, ".") == 0) { continue; } if (strcmp(fd_file.cFileName, "..") == 0) { continue; } sprintf(current_path, "%s\\%s", current_dir, fd_file.cFileName); if (fd_file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { IZ_ReadAssetPack(current_path, ini_filename); continue; } fprintf(stderr, "Invalid asset pack: %s\n", current_path); } while(FindNextFile(h_find, &fd_file)); FindClose(h_find); return 0; } i32 main(void) { return IZ_ReadAllAssetPacks("assets", "assets.ini"); }