-//
-// Very very crude GUI file selector
-//
-uint32 DoROMFind(uint8 * mem, char * path)
-{
- char cartName[2048]; // Really, should be MAX_PATH or something like it
- uint32 numFiles = 0;
- DIR * dp = opendir(path);
-
- if (dp == NULL)
- {
- WriteLog("VJ: Could not open directory \"%s\"!\nAborting!\n", path);
- log_done();
- exit(0);
- }
- else
- {
- dirent * de;
- while ((de = readdir(dp)) != NULL)
- {
- char * ext = strrchr(de->d_name, '.');
- if (ext != NULL)
- if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
- numFiles++;
- }
- closedir(dp);
- }
-
- if (numFiles == 0)
- {
- WriteLog("Found no ROM files!\nAborting!\n");
- log_done();
- exit(0);
- }
-
- char * names = (char *)malloc(numFiles * 2048);
- if (names == NULL)
- {
- WriteLog("Could not allocate memory for %u files!\nAborting!\n", numFiles);
- log_done();
- exit(0);
- }
-
- int i = 0;
- dp = opendir(path);
- dirent * de;
- while ((de = readdir(dp)) != NULL)
- {
- char * ext = strrchr(de->d_name, '.');
- if (ext != NULL)
- if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
- strcpy(&names[i++ * 2048], de->d_name);
- }
- closedir(dp);
-
- // Main GUI selection loop
-
- uint32 cursor = 0;
-
- if (numFiles > 1) // Only go GUI if more than one possibility!
- {
- bool done = false;
- uint32 limit = (numFiles > 24 ? 24 : numFiles);
- SDL_Event event;
- while (!done)
-
- while (SDL_PollEvent(&event))
- {
- // Draw the GUI...
- memset(backbuffer, 0x11, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2);
- uint32 startFile = (cursor >= limit ? cursor - limit + 1 : 0);
- for(uint32 i=0; i<limit; i++)
- {
- bool invert = (cursor == startFile + i ? true : false);
- char buf[41];
- // Guarantee that we clip our strings to fit in the screen...
- memcpy(buf, &names[(startFile + i) * 2048], 38);
- buf[38] = 0;
- DrawText(backbuffer, 0, i*8, invert, " %s ", buf);
- }
-
-
- if (SDL_MUSTLOCK(surface))
- while (SDL_LockSurface(surface) < 0)
- SDL_Delay(10);
-
-// memcpy(surface->pixels, backbuffer, tom_width * tom_height * 2);
- memcpy(surface->pixels, backbuffer, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2);
-
- if (SDL_MUSTLOCK(surface))
- SDL_UnlockSurface(surface);
-
- SDL_Rect srcrect, dstrect;
- srcrect.x = srcrect.y = 0, srcrect.w = surface->w, srcrect.h = surface->h;
- dstrect.x = dstrect.y = 0, dstrect.w = surface->w, dstrect.h = surface->h;
- SDL_BlitSurface(surface, &srcrect, mainSurface, &dstrect);
- SDL_Flip(mainSurface);
-
-
- if (event.type == SDL_KEYDOWN)
- {
- switch (event.key.keysym.sym)
- {
- case SDLK_UP:
- if (cursor != 0)
- cursor--;
- break;
- case SDLK_DOWN:
- if (cursor != numFiles - 1)
- cursor++;
- break;
- case SDLK_RETURN:
- done = true;
- break;
- }
- }
- }
- }
-
- strcpy(cartName, path);
- if (path[strlen(path) - 1] != '/')
- strcat(cartName, "/");
- strcat(cartName, &names[cursor * 2048]);
- free(names);
-
- uint32 romSize = JaguarLoadROM(mem, cartName);
- if (romSize == 0)
- {
- log_done();
- exit(0);
- }
- return romSize;
-}
-