+ 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);
+ }