2 // filethread.cpp - File discovery thread
5 // (C) 2010 Underground Software
7 // JLH = James L. Hammons <jlhamm@acm.org>
10 // --- ---------- -------------------------------------------------------------
11 // JLH 01/28/2010 Created this file
14 #include "filethread.h"
28 RomIdentifier romList[] = {
29 { 0x0509C85E, "Raiden (World)", "" },
30 { 0x08F15576, "Iron Soldier (World) (v1.04)", "" },
31 { 0x0957A072, "Kasumi Ninja (World)", "" },
32 { 0x0AC83D77, "NBA Jam T.E. (World)", "" },
33 { 0x0EC5369D, "Evolution - Dino Dudes (World)", "" },
34 { 0x0F6A1C2C, "Ultra Vortek (World)", "" },
35 { 0x14915F20, "White Men Can't Jump (World)", "" },
36 { 0x1660F070, "Power Drive Rally (World)", "" },
37 { 0x1E451446, "Trevor McFur in the Crescent Galaxy (World)", "" },
38 { 0x27594C6A, "Defender 2000 (World)", "" },
39 { 0x2E17D5DA, "Bubsy in Fractured Furry Tales (World)", "" },
40 { 0x348E6449, "Double Dragon V - The Shadow Falls (World)", "" },
41 { 0x3615AF6A, "Fever Pitch Soccer (World) (En,Fr,De,Es,It)", "" },
42 { 0x38A130ED, "Troy Aikman NFL Football (World)", "" },
43 { 0x3C044941, "Skyhammer (World)", "" },
44 { 0x42A13EC5, "Soccer Kid (World)", "" },
45 { 0x47EBC158, "Theme Park (World)", "" },
46 { 0x4899628F, "Hover Strike (World)", "" },
47 { 0x53DF6440, "Space War 2000 (World)", "" },
48 { 0x55A0669C, "[BIOS] Atari Jaguar Developer CD (World)", "" },
49 { 0x58272540, "Syndicate (World)", "" },
50 { 0x5A101212, "Sensible Soccer - International Edition (World)", "" },
51 { 0x5B6BB205, "Ruiner Pinball (World)", "" },
52 { 0x5CFF14AB, "Pinball Fantasies (World)", "" },
53 { 0x5E2CDBC0, "Doom (World)", "" },
54 { 0x61C7EEC0, "Zero 5 (World)", "" },
55 { 0x67F9AB3A, "Battle Sphere Gold (World)", "" },
56 { 0x687068D5, "[BIOS] Atari Jaguar CD (World)", "" },
57 { 0x6B2B95AD, "Tempest 2000 (World)", "" },
58 { 0x6EB774EB, "Worms (World)", "" },
59 { 0x6F8B2547, "Super Burnout (World)", "" },
60 { 0x817A2273, "Pitfall - The Mayan Adventure (World)", "" },
61 { 0x8975F48B, "Zool 2 (World)", "" },
62 { 0x8D15DBC6, "[BIOS] Atari Jaguar Stubulator '94 (World)", "" },
63 { 0x8FEA5AB0, "Dragon - The Bruce Lee Story (World)", "" },
64 { 0x97EB4651, "I-War (World)", "" },
65 { 0xA27823D8, "Ultra Vortek (World) (v0.94) (Beta)", "" },
66 { 0xA56D0798, "Protector - Special Edition (World)", "" },
67 { 0xA9F8A00E, "Rayman (World)", "" },
68 { 0xB14C4753, "Fight for Life (World)", "" },
69 { 0xBCB1A4BF, "Brutal Sports Football (World)", "" },
70 { 0xBDA405C6, "Cannon Fodder (World)", "" },
71 { 0xBDE67498, "Cybermorph (World) (Rev 1)", "" },
72 { 0xC5562581, "Zoop! (World)", "" },
73 { 0xC654681B, "Total Carnage (World)", "" },
74 { 0xC6C7BA62, "Fight for Life (World) (Alt)", "" },
75 { 0xC9608717, "Val d'Isere Skiing and Snowboarding (World)", "" },
76 { 0xCBFD822A, "Air Cars (World)", "" },
77 { 0xCD5BF827, "Attack of the Mutant Penguins (World)", "" },
78 { 0xD6C19E34, "Iron Soldier 2 (World)", "" },
79 { 0xDA9C4162, "Missile Command 3D (World)", "" },
80 { 0xDC187F82, "Alien vs Predator (World)", "" },
81 { 0xDE55DCC7, "Flashback - The Quest for Identity (World) (En,Fr)", "" },
82 { 0xE28756DE, "Atari Karts (World)", "" },
83 { 0xE60277BB, "[BIOS] Atari Jaguar Stubulator '93 (World)", "" },
84 { 0xE91BD644, "Wolfenstein 3D (World)", "" },
85 { 0xEC22F572, "SuperCross 3D (World)", "" },
86 { 0xECF854E7, "Cybermorph (World) (Rev 2)", "" },
87 { 0xEEE8D61D, "Club Drive (World)", "" },
88 { 0xF0360DB3, "Hyper Force (World)", "" },
89 { 0xFA7775AE, "Checkered Flag (World)", "" },
90 { 0xFAE31DD0, "Flip Out! (World)", "" },
91 { 0xFB731AAA, "[BIOS] Atari Jaguar (World)", "" },
92 { 0xFFFFFFFF, "***END***", "" }
96 Our strategy here is like so:
97 Look at the files in the directory pointed to by ROMPath.
98 For each file in the directory, take the CRC32 of it and compare it to the CRC
99 in the romList[]. If there's a match, put it in a list and note it's index value
100 in romList for future reference.
102 When constructing the list, use the index to pull up an image of the cart and
103 put that in the list. User picks from a graphical image of the cart.
105 Ideally, the label will go into the archive along with the ROM image, but that's
107 Maybe box art, screenshots will go as well...
110 FileThread::FileThread(QObject * parent/*= 0*/): QThread(parent), listWidget(NULL), abort(false)
114 FileThread::~FileThread()
124 void FileThread::Go(QListWidget * lw)
126 QMutexLocker locker(&mutex);
127 this->listWidget = lw;
131 void FileThread::run(void)
133 QDir romDir(vjs.ROMPath);
134 QFileInfoList list = romDir.entryInfoList();
136 for(int i=0; i<list.size(); i++)
141 QFileInfo fileInfo = list.at(i);
142 QFile file(romDir.filePath(fileInfo.fileName()));
143 uint8 * buffer = new uint8[fileInfo.size()];
145 if (file.open(QIODevice::ReadOnly))
147 file.read((char *)buffer, fileInfo.size());
148 uint32 crc = crc32_calcCheckSum(buffer, fileInfo.size());
150 //printf("FilePickerWindow: File crc == %08X...\n", crc);
152 uint32 index = FindCRCIndexInFileList(crc);
154 if (index != 0xFFFFFFFF)
156 printf("FileThread: Found match [%s]...\n", romList[index].name);
157 new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget);
167 // Find a CRC in the ROM list. If it's there, return the index, otherwise return $FFFFFFFF
169 uint32 FileThread::FindCRCIndexInFileList(uint32 crc)
171 for(int i=0; romList[i].crc32!=0xFFFFFFFF; i++)
173 if (romList[i].crc32 == crc)