From b79146c85ed8f85acc80fe56534f72cd777f0b02 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 1 Mar 2010 21:23:44 +0000 Subject: [PATCH] Added missing images, added some fixes to ZIP file support --- res/cart-blank.png | Bin 0 -> 48267 bytes res/label-blank.png | Bin 0 -> 24202 bytes src/file.cpp | 81 ++++++++++++++- src/file.h | 3 + src/gui/filepicker.cpp | 2 +- src/gui/filethread.cpp | 1 + src/gui/imagedelegate.cpp | 6 +- src/gui/mainwin.cpp | 3 +- src/unzip.c | 201 ++++++++------------------------------ 9 files changed, 129 insertions(+), 168 deletions(-) create mode 100644 res/cart-blank.png create mode 100644 res/label-blank.png diff --git a/res/cart-blank.png b/res/cart-blank.png new file mode 100644 index 0000000000000000000000000000000000000000..93338b8d87044ecaccd73f86402a15e0be3a9c23 GIT binary patch literal 48267 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 VM@>%tD;eo!@W}KbT-PP${{iemk(~el literal 0 HcmV?d00001 diff --git a/res/label-blank.png b/res/label-blank.png new file mode 100644 index 0000000000000000000000000000000000000000..8605f745e96608354b7217db41eb82eb23885f7c GIT binary patch literal 24202 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 NQG~0>mCBgD|39odP80wD literal 0 HcmV?d00001 diff --git a/src/file.cpp b/src/file.cpp index bf8ad54..6e895c5 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -10,6 +10,7 @@ // Who When What // --- ---------- ------------------------------------------------------------- // JLH 01/16/2010 Created this log ;-) +// JLH 02/28/2010 Added functions to look inside .ZIP files and handle contents // #include "file.h" @@ -27,6 +28,7 @@ // Private function prototypes static int gzfilelength(gzFile gd); +static bool CheckExtension(const char * filename, const char * ext); // // Generic ROM loading @@ -35,7 +37,7 @@ uint32 JaguarLoadROM(uint8 * rom, char * path) { // We really should have some kind of sanity checking for the ROM size here to prevent // a buffer overflow... !!! FIX !!! -#warning !!! FIX !!! Should have sanity checking for ROM size to prevent buffer overflow! +#warning "!!! FIX !!! Should have sanity checking for ROM size to prevent buffer overflow!" uint32 romSize = 0; WriteLog("JaguarLoadROM: Attempting to load file '%s'...", path); @@ -287,7 +289,7 @@ Start of Data Segment = 0x00803dd0 } else { - WriteLog("GUI: Couldn't find correct ABS format: %02X %02X\n", jaguarMainROM[0], jaguarMainROM[1]); + WriteLog("GUI: Couldn't find correct ABS/COF format: %02X %02X\n", jaguarMainROM[0], jaguarMainROM[1]); return false; } } @@ -345,3 +347,78 @@ static int gzfilelength(gzFile gd) gzrewind(gd); return length; } + +// +// Compare extension to passed in filename. If equal, return true; otherwise false. +// +static bool CheckExtension(const char * filename, const char * ext) +{ + const char * filenameExt = strrchr(filename, '.'); // Get the file's extension (if any) + return (strcasecmp(filenameExt, ext) == 0 ? true : false); +} + +// +// Get file from .ZIP +// Returns the size of the file inside the .ZIP file that we're looking at +// +uint32 GetFileFromZIP(const char * zipFile, FileType type, uint8 * buffer) +{ +#warning "!!! FIX !!! Should have sanity checking for ROM size to prevent buffer overflow!" + const char ftStrings[5][32] = { "Software", "EEPROM", "Label", "Box Art", "Controller Overlay" }; + ZIP * zip = openzip(0, 0, zipFile); + + if (zip == NULL) + { + WriteLog("FILE: Could not open file '%s'!\n", zipFile); + return 0; + } + + while (readzip(zip)) + { + zipent * ze = &zip->ent; + bool found = false; + + if ((type == FT_LABEL) && (CheckExtension(ze->name, ".png") || CheckExtension(ze->name, ".jpg") || CheckExtension(ze->name, ".gif"))) + { + found = true; + WriteLog("FILE: Found image file '%s'.\n", ze->name); + } + + if ((type == FT_SOFTWARE) && (CheckExtension(ze->name, ".j64") || CheckExtension(ze->name, ".rom") || CheckExtension(ze->name, ".abs") || CheckExtension(ze->name, ".cof"))) + { + found = true; + WriteLog("FILE: Found software file '%s'.\n", ze->name); + } + + if ((type == FT_EEPROM) && (CheckExtension(ze->name, ".eep") || CheckExtension(ze->name, ".eeprom"))) + { + found = true; + WriteLog("FILE: Found EEPROM file '%s'.\n", ze->name); + } + + if (found) + { + WriteLog("FILE: Uncompressing..."); + + if (readuncompresszip(zip, ze, (char *)buffer) == 0) + { + WriteLog("success! (%u bytes)\n", ze->uncompressed_size); + return ze->uncompressed_size; + } + else + { + WriteLog("FAILED!\n"); + return 0; + } + } + } + + closezip(zip); + + WriteLog("FILE: Failed to find file of type %s...\n", ftStrings[type]); + // Didn't find what we're looking for... + return 0; +} + +//ParseFileType, etc. + diff --git a/src/file.h b/src/file.h index 7fa3daf..9011244 100644 --- a/src/file.h +++ b/src/file.h @@ -13,8 +13,11 @@ extern "C" { #endif +enum FileType { FT_SOFTWARE=0, FT_EEPROM, FT_LABEL, FT_BOXART, FT_OVERLAY }; + uint32 JaguarLoadROM(uint8 * rom, char * path); bool JaguarLoadFile(char * path); +uint32 GetFileFromZIP(const char * zipFile, FileType type, uint8 * buffer); #ifdef __cplusplus } diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index 1129d17..9f85885 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -68,7 +68,7 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: void FilePickerWindow::AddFileToList(unsigned long index) { printf("FilePickerWindow: Found match [%s]...\n", romList[index].name); - // NOTE: The model *ignores* what you send it, so this is crap. !!! FIX !!! + // NOTE: The model *ignores* what you send it, so this is crap. !!! FIX !!! [DONE, somewhat] // model->AddData(QIcon(":/res/generic.png")); model->AddData(index); } diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index d4cccc2..3229c35 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -92,6 +92,7 @@ printf("FileThread: Aborting!!!\n"); uint32 index = FindCRCIndexInFileList(crc); +// Mebbe we should pass a index AND a QImage here??? if (index != 0xFFFFFFFF && !(romList[index].flags & FF_BIOS)) emit FoundAFile(index); } diff --git a/src/gui/imagedelegate.cpp b/src/gui/imagedelegate.cpp index 827bc00..d148c2c 100644 --- a/src/gui/imagedelegate.cpp +++ b/src/gui/imagedelegate.cpp @@ -80,13 +80,13 @@ The foreground of the item (the circle representing a pixel) must be rendered us if (romList[i].file[0] == 0) { // painter->drawPixmap(option.rect.x()+14, option.rect.y()+50, 433/2, 203/2, QPixmap(":/res/label-blank.png")); - painter->drawPixmap(option.rect.x()+7, option.rect.y()+25, 433/4, 203/4, QPixmap(":/res/label-blank.png")); + painter->drawPixmap(option.rect.x()+7, option.rect.y()+25, 433/4, 203/4, QPixmap(":/res/label-blank.png")); //Need to query the model for the data we're supposed to draw here... // painter->drawText(17, 73, QString(romList[i].name)); // painter->setPen(Qt::white); - painter->setPen(QColor(255, 128, 0, 255)); + painter->setPen(QColor(255, 128, 0, 255)); // painter->drawText(QRect(option.rect.x()+20, option.rect.y()+73, 196, 70), Qt::TextWordWrap | Qt::AlignHCenter, QString(romList[i].name)); - painter->drawText(QRect(option.rect.x()+10, option.rect.y()+36, 196/2, 70/2), Qt::TextWordWrap | Qt::AlignHCenter, QString(romList[i].name)); + painter->drawText(QRect(option.rect.x()+10, option.rect.y()+36, 196/2, 70/2), Qt::TextWordWrap | Qt::AlignHCenter, QString(romList[i].name)); } else { diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 3d9276f..7b7a2de 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -281,7 +281,8 @@ void MainWin::ReadSettings(void) vjs.renderType = settings.value("renderType", 0).toInt(); // Hardcoded, !!! FIX !!! - strcpy(vjs.ROMPath, "./roms"); +#warning "!!! FIX !!! ROMPath is hardcoded!" + strcpy(vjs.ROMPath, "./software"); } void MainWin::WriteSettings(void) diff --git a/src/unzip.c b/src/unzip.c index 5c3d119..509da18 100644 --- a/src/unzip.c +++ b/src/unzip.c @@ -1,5 +1,6 @@ // // ZIP file support (mostly ripped from MAME--thx MAME team!) +// Mostly this is here to simplify interfacing to zlib... // // Added by James L. Hammons // (C) 2010 Underground Software @@ -9,6 +10,7 @@ // Who When What // --- ---------- ------------------------------------------------------------- // JLH 01/16/2010 Created this log ;-) +// JLH 02/28/2010 Removed unnecessary cruft // #include @@ -40,7 +42,7 @@ void errormsg(const char * extmsg, const char * usermsg, const char * zipname) if (!gUnzipQuiet) printf("Error in zipfile %s\n%s\n", zipname, usermsg); /* Output to log file with all informations */ - WriteLog("Error in zipfile %s: %s\n", zipname, extmsg); +// WriteLog("Error in zipfile %s: %s\n", zipname, extmsg); } /* ------------------------------------------------------------------------- @@ -48,15 +50,17 @@ void errormsg(const char * extmsg, const char * usermsg, const char * zipname) ------------------------------------------------------------------------- */ /* Use these to avoid structure padding and byte-ordering problems */ -static uint16_t read_word (char *buf) { - unsigned char *ubuf = (unsigned char *) buf; +static uint16_t read_word(char * buf) +{ + unsigned char * ubuf = (unsigned char *)buf; return ((uint16_t)ubuf[1] << 8) | (uint16_t)ubuf[0]; } /* Use these to avoid structure padding and byte-ordering problems */ -static uint32_t read_dword (char *buf) { - unsigned char *ubuf = (unsigned char *) buf; +static uint32_t read_dword(char * buf) +{ + unsigned char * ubuf = (unsigned char *)buf; return ((uint32_t)ubuf[3] << 24) | ((uint32_t)ubuf[2] << 16) | ((uint32_t)ubuf[1] << 8) | (uint32_t)ubuf[0]; } @@ -68,16 +72,20 @@ static uint32_t read_dword (char *buf) { ==0 not found !=0 found, *offset valid */ -static int ecd_find_sig (char *buffer, int buflen, int *offset) +static int ecd_find_sig(char * buffer, int buflen, int * offset) { static char ecdsig[] = { 'P', 'K', 0x05, 0x06 }; int i; - for (i=buflen-22; i>=0; i--) { - if (memcmp(buffer+i, ecdsig, 4) == 0) { + + for(i=buflen-22; i>=0; i--) + { + if (memcmp(buffer+i, ecdsig, 4) == 0) + { *offset = i; return 1; } } + return 0; } @@ -106,6 +114,7 @@ static int ecd_read(ZIP * zip) /* allocate buffer */ buf = (char *)malloc(buf_length); + if (!buf) { return -1; @@ -117,32 +126,34 @@ static int ecd_read(ZIP * zip) return -1; } - if (ecd_find_sig(buf, buf_length, &offset)) { + if (ecd_find_sig(buf, buf_length, &offset)) + { zip->ecd_length = buf_length - offset; - zip->ecd = (char*)malloc( zip->ecd_length ); - if (!zip->ecd) { + zip->ecd = (char *)malloc(zip->ecd_length); + + if (!zip->ecd) + { free(buf); return -1; } memcpy(zip->ecd, buf + offset, zip->ecd_length); - free(buf); return 0; } free(buf); - if (buf_length < zip->length) { + if (buf_length < zip->length) + { /* double buffer */ - buf_length = 2*buf_length; - + buf_length = 2 * buf_length; WriteLog("Retry reading of zip ecd for %d bytes\n",buf_length); - } else { - return -1; } + else + return -1; } } @@ -204,9 +215,7 @@ ZIP * openzip(int pathtype, int pathindex, const char * zipfile) /* allocate */ ZIP * zip = (ZIP *)malloc(sizeof(ZIP)); if (!zip) - { return 0; - } /* open */ zip->fp = fopen(zipfile, "rb"); @@ -264,9 +273,9 @@ ZIP * openzip(int pathtype, int pathindex, const char * zipfile) zip->zipfile_comment = zip->ecd+ZIPECOM; /* verify that we can work with this zipfile (no disk spanning allowed) */ - if ((zip->number_of_this_disk != zip->number_of_disk_start_cent_dir) || - (zip->total_entries_cent_dir_this_disk != zip->total_entries_cent_dir) || - (zip->total_entries_cent_dir < 1)) + if ((zip->number_of_this_disk != zip->number_of_disk_start_cent_dir) + || (zip->total_entries_cent_dir_this_disk != zip->total_entries_cent_dir) + || (zip->total_entries_cent_dir < 1)) { errormsg("Cannot span disks", ERROR_UNSUPPORTED, zipfile); free(zip->ecd); @@ -334,7 +343,8 @@ ZIP * openzip(int pathtype, int pathindex, const char * zipfile) !=0 success ==0 error */ -struct zipent* readzip(ZIP* zip) { +struct zipent * readzip(ZIP * zip) +{ /* end of directory */ if (zip->cd_pos >= zip->size_of_cent_dir) @@ -388,9 +398,11 @@ void closezip(ZIP * zip) free(zip->ent.name); free(zip->cd); free(zip->ecd); + /* only if not suspended */ if (zip->fp) fclose(zip->fp); + free(zip->zip); free(zip); } @@ -665,137 +677,6 @@ int readuncompresszip(ZIP * zip, struct zipent * ent, char * data) } } -/* ------------------------------------------------------------------------- - Zip cache support - ------------------------------------------------------------------------- */ - -/* Use the zip cache */ -// No, don't -//#define ZIP_CACHE - -#ifdef ZIP_CACHE - -/* ZIP cache entries */ -#define ZIP_CACHE_MAX 5 - -/* ZIP cache buffer LRU ( Last Recently Used ) - zip_cache_map[0] is the newer - zip_cache_map[ZIP_CACHE_MAX-1] is the older -*/ -static ZIP* zip_cache_map[ZIP_CACHE_MAX]; - -static ZIP* cache_openzip(int pathtype, int pathindex, const char* zipfile) { - ZIP* zip; - unsigned i; - - /* search in the cache buffer */ - for(i=0;ipathtype == pathtype && zip_cache_map[i]->pathindex == pathindex && strcmp(zip_cache_map[i]->zip,zipfile)==0) { - /* found */ - unsigned j; - -/* - WriteLog("Zip cache HIT for %s\n", zipfile); -*/ - - /* reset the zip directory */ - rewindzip( zip_cache_map[i] ); - - /* store */ - zip = zip_cache_map[i]; - - /* shift */ - for(j=i;j>0;--j) - zip_cache_map[j] = zip_cache_map[j-1]; - - /* set the first entry */ - zip_cache_map[0] = zip; - - return zip_cache_map[0]; - } - } - /* not found */ - -/* - WriteLog("Zip cache FAIL for %s\n", zipfile); -*/ - - /* open the zip */ - zip = openzip( pathtype, pathindex, zipfile ); - if (!zip) - return 0; - - /* close the oldest entry */ - if (zip_cache_map[ZIP_CACHE_MAX-1]) { - /* close last zip */ - closezip(zip_cache_map[ZIP_CACHE_MAX-1]); - /* reset the entry */ - zip_cache_map[ZIP_CACHE_MAX-1] = 0; - } - - /* shift */ - for(i=ZIP_CACHE_MAX-1;i>0;--i) - zip_cache_map[i] = zip_cache_map[i-1]; - - /* set the first entry */ - zip_cache_map[0] = zip; - - return zip_cache_map[0]; -} - -static void cache_closezip(ZIP* zip) { - unsigned i; - - /* search in the cache buffer */ - for(i=0;ient); + struct zipent * ent = &(zip->ent); sprintf(crc, "%08x", (unsigned int)ent->crc32); if (filename == NULL || equal_filename(ent->name, filename) @@ -860,15 +739,15 @@ int load_zipped_file(int pathtype, int pathindex, const char * zipfile, const ch if (readuncompresszip(zip, ent, (char *)*buf) != 0) { - cache_closezip(zip); + closezip(zip); return -1; } - cache_suspendzip(zip); + suspendzip(zip); return 0; } } - cache_suspendzip(zip); + suspendzip(zip); return -1; } -- 2.37.2