void CreateOrientationFolders(int parent_index) { int jj; int nGames = GetNumGames(); LPTREEFOLDER lpFolder = treeFolders[parent_index]; // create our two subfolders LPTREEFOLDER lpVert, lpHorz; lpVert = NewFolder("Vertical", next_folder_id++, parent_index, IDI_FOLDER, GetFolderFlags(numFolders)); AddFolder(lpVert); lpHorz = NewFolder("Horizontal", next_folder_id++, parent_index, IDI_FOLDER, GetFolderFlags(numFolders)); AddFolder(lpHorz); // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (jj = 0; jj < nGames; jj++) { if (drivers[jj]->flags & ORIENTATION_SWAP_XY) { AddGame(lpVert,jj); } else { AddGame(lpHorz,jj); } } }
void CreateSoundFolders(int parent_index) { int i,jj; int nGames = GetNumGames(); int nFolder = numFolders; LPTREEFOLDER lpFolder = treeFolders[parent_index]; LPTREEFOLDER map[SOUND_COUNT]; // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (i=1;i<SOUND_COUNT;i++) { // Defined in sndintrf.c struct snd_interface { unsigned sound_num; /* ID */ const char *name; /* description */ int (*chips_num)(const struct MachineSound *msound); /* returns number of chips if applicable */ int (*chips_clock)(const struct MachineSound *msound); /* returns chips clock if applicable */ int (*start)(const struct MachineSound *msound); /* starts sound emulation */ void (*stop)(void); /* stops sound emulation */ void (*update)(void); /* updates emulation once per frame if necessary */ void (*reset)(void); /* resets sound emulation */ }; extern struct snd_interface sndintf[]; LPTREEFOLDER lpTemp; for (jj = 1; jj < i; jj++) if (!strcmp(soundtype_name(i), soundtype_name(jj))) break; if (i != jj) { map[i] = map[jj]; continue; } lpTemp = NewFolder(sndintf[i].name, next_folder_id++, parent_index, IDI_CPU, GetFolderFlags(numFolders)); AddFolder(lpTemp); map[i] = treeFolders[nFolder++]; } for (jj = 0; jj < nGames; jj++) { int n; struct InternalMachineDriver drv; expand_machine_driver(drivers[jj]->drv,&drv); for (n = 0; n < MAX_SOUND; n++) if (drv.sound[n].sound_type != SOUND_DUMMY) { // sound type #'s are one-based AddGame(map[drv.sound[n].sound_type],jj); } } }
void CreateManufacturerFolders(int parent_index) { int i,jj; int nGames = GetNumGames(); int start_folder = numFolders; LPTREEFOLDER lpFolder = treeFolders[parent_index]; // not sure why this is added separately // should find out at some point. LPTREEFOLDER lpTemp; lpTemp = NewFolder("Romstar", next_folder_id++, parent_index, IDI_MANUFACTURER, GetFolderFlags(numFolders)); AddFolder(lpTemp); // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (jj = 0; jj < nGames; jj++) { const char *s = FixString(drivers[jj]->manufacturer); const char *s2 = LicenseManufacturer(drivers[jj]->manufacturer); if (s == NULL || s[0] == '\0') continue; // look for an extant manufacturer treefolder for this game for (i=numFolders-1;i>=start_folder;i--) { if (strncmp(treeFolders[i]->m_lpTitle,s,20) == 0 || (s2 != NULL && strncmp(treeFolders[i]->m_lpTitle,s2,20) == 0)) { AddGame(treeFolders[i],jj); break; } } if (i == start_folder-1) { // nope, it's a manufacturer we haven't seen before, make it. lpTemp = NewFolder(s, next_folder_id++, parent_index, IDI_MANUFACTURER, GetFolderFlags(numFolders)); AddFolder(lpTemp); AddGame(lpTemp,jj); } } }
void CreateCPUFolders(int parent_index) { int i,jj; int nGames = GetNumGames(); int nFolder = numFolders; LPTREEFOLDER lpFolder = treeFolders[parent_index]; LPTREEFOLDER map[CPU_COUNT]; // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (i=1;i<CPU_COUNT;i++) { LPTREEFOLDER lpTemp; for (jj = 1; jj < i; jj++) if (!strcmp(cputype_name(i), cputype_name(jj))) break; if (i != jj) { map[i] = map[jj]; continue; } lpTemp = NewFolder(cputype_name(i), next_folder_id++, parent_index, IDI_CPU, GetFolderFlags(numFolders)); AddFolder(lpTemp); map[i] = treeFolders[nFolder++]; } for (jj = 0; jj < nGames; jj++) { int n; struct InternalMachineDriver drv; expand_machine_driver(drivers[jj]->drv,&drv); for (n = 0; n < MAX_CPU; n++) if (drv.cpu[n].cpu_type != CPU_DUMMY) { // cpu type #'s are one-based AddGame(map[drv.cpu[n].cpu_type],jj); } } }
void CreateYearFolders(int parent_index) { int i,jj; int nGames = GetNumGames(); int start_folder = numFolders; LPTREEFOLDER lpFolder = treeFolders[parent_index]; // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (jj = 0; jj < nGames; jj++) { char s[100]; strcpy(s,drivers[jj]->year); if (s[0] == '\0') continue; if (s[4] == '?') s[4] = '\0'; // look for an extant year treefolder for this game // (likely to be the previous one, so start at the end) for (i=numFolders-1;i>=start_folder;i--) { if (strncmp(treeFolders[i]->m_lpTitle,s,4) == 0) { AddGame(treeFolders[i],jj); break; } } if (i == start_folder-1) { // nope, it's a year we haven't seen before, make it. LPTREEFOLDER lpTemp; lpTemp = NewFolder(s, next_folder_id++, parent_index, IDI_YEAR, GetFolderFlags(numFolders)); AddFolder(lpTemp); AddGame(lpTemp,jj); } } }
void CreateSourceFolders(int parent_index) { int i,jj; int nGames = GetNumGames(); int start_folder = numFolders; LPTREEFOLDER lpFolder = treeFolders[parent_index]; // no games in top level folder SetAllBits(lpFolder->m_lpGameBits,FALSE); for (jj = 0; jj < nGames; jj++) { const char *s = GetDriverFilename(jj); if (s == NULL || s[0] == '\0') continue; // look for an extant source treefolder for this game // (likely to be the previous one, so start at the end) for (i=numFolders-1;i>=start_folder;i--) { if (strcmp(treeFolders[i]->m_lpTitle,s) == 0) { AddGame(treeFolders[i],jj); break; } } if (i == start_folder-1) { // nope, it's a source file we haven't seen before, make it. LPTREEFOLDER lpTemp; lpTemp = NewFolder(s, next_folder_id++, parent_index, IDI_SOURCE, GetFolderFlags(numFolders)); AddFolder(lpTemp); AddGame(lpTemp,jj); } } }
/* Can be called to re-initialize the array of treeFolders */ BOOL InitFolders(void) { int i = 0; DWORD dwFolderFlags; LPFOLDERDATA fData = 0; if (treeFolders != NULL) { for (i = numFolders - 1; i >= 0; i--) { DeleteFolder(treeFolders[i]); treeFolders[i] = 0; numFolders--; } } numFolders = 0; if (folderArrayLength == 0) { folderArrayLength = 200; treeFolders = (TREEFOLDER **)malloc(sizeof(TREEFOLDER **) * folderArrayLength); if (!treeFolders) { folderArrayLength = 0; return 0; } else { memset(treeFolders,'\0', sizeof(TREEFOLDER **) * folderArrayLength); } } // built-in top level folders for (i = 0; g_lpFolderData[i].m_lpTitle; i++) { fData = &g_lpFolderData[i]; /* get the saved folder flags */ dwFolderFlags = GetFolderFlags(numFolders); /* create the folder */ AddFolder(NewFolder(fData->m_lpTitle, fData->m_nFolderId, -1, fData->m_nIconId, dwFolderFlags)); } numExtraFolders = InitExtraFolders(); for (i = 0; i < numExtraFolders; i++) { LPEXFOLDERDATA fExData = ExtraFolderData[i]; // OR in the saved folder flags dwFolderFlags = fExData->m_dwFlags | GetFolderFlags(numFolders); // create the folder //dprintf("creating top level custom folder with icon %i",fExData->m_nIconId); AddFolder(NewFolder(fExData->m_szTitle,fExData->m_nFolderId,fExData->m_nParent, fExData->m_nIconId,dwFolderFlags)); } CreateAllChildFolders(); CreateTreeIcons(); ResetWhichGamesInFolders(); ResetTreeViewFolders(); SelectTreeViewFolder(GetSavedFolderID()); return TRUE; }
// Called to add child folders of the top level extra folders already created BOOL TryAddExtraFolderAndChildren(int parent_index) { FILE* fp = NULL; char fname[MAX_PATH]; char readbuf[256]; char* p; char* name; int id, current_id; LPTREEFOLDER lpTemp = NULL; LPTREEFOLDER lpFolder = treeFolders[parent_index]; current_id = lpFolder->m_nFolderId; id = lpFolder->m_nFolderId - MAX_FOLDERS; /* "folder\title.ini" */ sprintf( fname, "%s\\%s.ini", GetFolderDir(), ExtraFolderData[id]->m_szTitle); fp = fopen(fname, "r"); if (fp == NULL) return FALSE; while ( fgets(readbuf, 256, fp) ) { /* do we have [...] ? */ if (readbuf[0] == '[') { p = strchr(readbuf, ']'); if (p == NULL) { continue; } *p = '\0'; name = &readbuf[1]; /* is it [FOLDER_SETTINGS]? */ if (strcmp(name, "FOLDER_SETTINGS") == 0) { current_id = -1; continue; } else { /* it it [ROOT_FOLDER]? */ if (!strcmp(name, "ROOT_FOLDER")) { current_id = lpFolder->m_nFolderId; lpTemp = lpFolder; } else { /* must be [folder name] */ current_id = next_folder_id++; /* create a new folder with this name, and the flags for this folder as read from the registry */ lpTemp = NewFolder(name,current_id,parent_index, ExtraFolderData[id]->m_nSubIconId, GetFolderFlags(numFolders) | F_CUSTOM); AddFolder(lpTemp); } } } else if (current_id != -1) { /* string on a line by itself -- game name */ name = strtok(readbuf, " \t\r\n"); if (name == NULL) { current_id = -1; continue; } /* IMPORTANT: This assumes that all driver names are lowercase! */ _strlwr( name ); if (lpTemp == NULL) { ErrorMsg("Error parsing %s: missing [folder name] or [ROOT_FOLDER]", fname); current_id = lpFolder->m_nFolderId; lpTemp = lpFolder; } AddGame(lpTemp,GetGameNameIndex(name)); } } if ( fp ) { fclose( fp ); } return TRUE; }
int MFolderFromProfile::GetFlags() const { return GetFolderFlags(READ_CONFIG(m_profile, MP_FOLDER_TYPE)); }