Fixed bug in loading RGBA PNG images; Stella can only handle RGB data.

Also, fixed a potential future bug where Stella can't handle paletted
images.  Basically, the error handling is now more robust.

Minor rework of the CartF8 class; it now looks the ROM MD5 directly and
decides if it's a 'special' ROM.

Several updates to the built-in properties database, including better
support for each game in the 8-in-1 ROM image.

Fixed crash in TIA handling of the playfield mask; it could cause a 
segfault under certain circumstances.

Fixed bug in prune_snapshots script; it now properly handles directory
names containing spaces in both Linux and OSX (and probably Windows as
well, but this hasn't been tested).

Updated built-in PNG library to the latest version (1.4.3).


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2066 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-07-10 17:12:45 +00:00
parent 8bf546ce1d
commit 3e7662c478
17 changed files with 219 additions and 231 deletions

View File

@ -77,9 +77,23 @@ bool PNGLibrary::readImage(const FrameBuffer& fb, FBSurface& surface)
// byte into separate bytes (useful for paletted and grayscale images).
png_set_packing(png_ptr);
// Greyscale mode not supported
if(color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
// Only normal RBG(A) images are supported (without the alpha channel)
if(color_type == PNG_COLOR_TYPE_RGBA)
{
png_set_strip_alpha(png_ptr);
}
else if(color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
readImageERROR("Greyscale PNG images not supported");
}
else if(color_type == PNG_COLOR_TYPE_PALETTE)
{
readImageERROR("Paletted PNG images not supported");
}
else if(color_type != PNG_COLOR_TYPE_RGB)
{
readImageERROR("Unknown format in PNG image");
}
// Create space for the entire image (3 bytes per pixel in RGB format)
ipitch = iwidth * 3;

View File

@ -65,18 +65,6 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size, string& md5,
Cartridge* cartridge = 0;
string type = dtype;
// First consider the ROMs that are special and don't have a properties entry
// Hopefully this list will be very small
if(md5 == "bc24440b59092559a1ec26055fd1270e" ||
md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" ||
md5 == "9905f9f4706223dadee84f6867ede8e3")
{
// These two ROMs are normal 8K images, except they must be initialized
// from the opposite bank compared to normal ones
type = "F8 swapped";
dtype = type;
}
// Collect some info about the ROM
ostringstream buf;
@ -181,9 +169,7 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size, string& md5,
else if(type == "F6SC")
cartridge = new CartridgeF6SC(image);
else if(type == "F8")
cartridge = new CartridgeF8(image);
else if(type == "F8 swapped")
cartridge = new CartridgeF8(image, true);
cartridge = new CartridgeF8(image, md5);
else if(type == "F8SC")
cartridge = new CartridgeF8SC(image);
else if(type == "FA" || type == "FASC")

View File

@ -24,14 +24,19 @@
#include "CartF8.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF8::CartridgeF8(const uInt8* image, bool startlow)
CartridgeF8::CartridgeF8(const uInt8* image, const string& md5)
{
// Copy the ROM image into my buffer
memcpy(myImage, image, 8192);
// Normally bank 1 is the reset bank, unless we're dealing with ROMs
// that have been incorrectly created with banks in the opposite order
myStartBank = startlow ? 0 : 1;
myStartBank =
(md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a]
md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge
md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White
md5 == "9905f9f4706223dadee84f6867ede8e3") // Challenge
? 0 : 1;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -38,10 +38,10 @@ class CartridgeF8 : public Cartridge
/**
Create a new cartridge using the specified image
@param image Pointer to the ROM image
@param startlow Whether to use the lower or upper bank for startup
@param image Pointer to the ROM image
@param md5 MD5sum of the ROM image
*/
CartridgeF8(const uInt8* image, bool startlow = false);
CartridgeF8(const uInt8* image, const string& md5);
/**
Destructor

View File

@ -27,7 +27,7 @@
regenerated and the application recompiled.
*/
#define DEF_PROPS_SIZE 3249
#define DEF_PROPS_SIZE 3240
static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -609,7 +609,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "2d1cf85fbc732856bf76470cd4060f4a", "", "", "Daredevil (V1) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d2c5f0761e609e3c5228766f446f7f8", "Atari - Axlon, Nolan Bushnell, Steve DeFrisco", "CX26170, CX26170P", "Secret Quest (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d405da70af82b20a6b3ecc3d1d2c4ec", "Genus", "", "Pitfall (Genus)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d44e2d3894f49f36f7416605d72842c", "Nukey Shay", "", "ROL Out (20040908) (refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d69a5f23784f1c2230143292a073b53", "", "", "Qb (Fixed background animation) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -687,7 +686,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "32f4e47a71601ab06cfb59e1c6a0b846", "Ed Federmeyer", "", "Sound X (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3316ee2f887e9cb9b54dd23c5b98c3e2", "", "", "Texas Golf (miniature Gold Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "331938989f0f33ca39c10af4c09ff640", "Zach Matley", "", "Combat - Tank AI (19-04-2003) (Zach Matley)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "331c04841bccd3f8210dcced9602ccda", "Nukey Shay", "", "ROL Out (20040911) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "332f01fd18e99c6584f61aa45ee7791e", "", "", "X'Mission (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "YES", "" },
{ "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers, Robert Jaeger", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3349fbd01dde378b31f72bd8dc793dc5", "", "", "Greeting Cart (RSIDDALL) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -715,7 +713,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "350e0f7b562ec5e457b3f5af013648db", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (06-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "35163b56f4a692a232ae96ad3e23310f", "Retroactive", "", "Qb (2.12) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "3556e125681aea864e17b09f3f3b2a75", "", "", "Incoming (2 Player Demo) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "35689035629ce0a6c4e274123de79b55", "", "", "Breakout - Breakaway IV (1978) (Atari) [o3]", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "3576037c9281656655fa114a835be553", "Starpath Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1 of 4) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3577e19714921912685bb0e32ddf943c", "TechnoVision", "TVS1003", "Pharaoh's Curse (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "35ae903dff7389755ad4a07f2fb7400c", "", "", "Colored Wall Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -769,7 +766,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "393948436d1f4cc3192410bb918f9724", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation", "VC1012", "M.A.D. (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "30", "230", "", "" },
{ "395f46cb2bf49cecb88fdc070b8ca6bc", "", "", "Breakout - Breakaway IV (1978) (Atari) [t1][o1]", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "YES", "", "", "", "", "" },
{ "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "39a6a5a2e1f6297cceaa48bb03af02e9", "", "", "Pitfall 2 Plus (Hack)", "Hack of Pitfall 2", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -902,6 +898,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "42e8d67213227dee01e72c788712c002", "", "", "Greeting Cart Amy in thong (SnailSoft)(PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "4311a4115fb7bc68477c96cf44cebacf", "", "", "Challenge (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "14", "240", "", "" },
{ "4326edb70ff20d0ee5ba58fa5cb09d60", "Atari - GCC, Kevin Osborn", "CX2689", "Kangaroo (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "435fd469f088468c4d66be6b5204d887", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "438968a26b7cfe14a499f5bbbbf844db", "", "", "Raft Rider (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "43adf60ebdd6b5a0fae21594ecf17154", "Jone Yuan Telephonic Enterprise Co", "", "Stampede (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "43c7eb836378b1b3df6788d908940b59", "", "", "Death Derby (2LK_16) (24-03-2003) (Glenn Saunders)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1531,6 +1528,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "75e276ba12dc4504659481c31345703a", "Starpath Corporation, Kevin Norman", "AR-4103", "Killer Satellites (1983) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75e8d8b9e9c5c67c2226dbfd77dcfa7d", "", "", "2600 Digital Clock (V b1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75ea128ba96ac6db8edf54b071027c4e", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75ea60884c05ba496473c23a58edf12f", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7608abdfd9b26f4a0ecec18b232bea54", "Atari", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7623a639a6fffdb246775fe2eabc8d01", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1844,7 +1842,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "8ed73106e2f42f91447fb90b6f0ea4a4", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "8ee3f64dc0f349adc893fe93df5245d8", "", "", "Euchre (20-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f33bce5ba1053dcf4cea9c1c69981e4", "", "", "Jawbreaker (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f39cd5973b07dfdd12baca1ebd8d722", "Nukey Shay", "", "ROL Out (20040908) (old) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "8f53a3b925f0fd961d9b8c4d46ee6755", "", "", "Astrowar (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f5ac5139419c5d49bacc296e342a247", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "" },
{ "8f60551db6d1535ef0030f155018c738", "", "", "Space War (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1865,7 +1862,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "90ccf4f30a5ad8c801090b388ddd5613", "Starpath Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90d77e966793754ab4312c47b42900b1", "Imagic, Brad Stewart", "720105-2A, IA3400P, EIX-005-04I", "Fire Fighter (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90f502cbf4438a95f69f848cef36eb64", "Digitel", "", "River Raid II (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90f67b7c34f3a71159e14f69777721b5", "Nukey Shay", "", "ROL Out (20040908) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "910dd9bf98cc5bc080943e5128b15bf5", "", "", "Gunfight 2600 - Improved AI (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "91191666186117f5bf78b40623d79039", "Gray Games & AtariAge", "", "E.T. Book Cart (PAL)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "23", "280", "YES", "55" },
{ "911d385ee0805ff5b8f96c5a63da7de5", "Hozer Video Games", "", "Jammed (V0.1) (Demo) (2001) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "24", "", "", "" },
@ -2507,7 +2503,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "c7e43ad79c5e5c029d9f5ffde23e32cf", "", "", "PAL-NTSC Detector (15-11-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c7eab66576696e11e3c11ffff92e13cc", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c7f13ef38f61ee2367ada94fdcc6d206", "Parker Brothers, Joe Gaucher", "PB5370", "Popeye (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "c81f28ca03c4ed87d3deeb1967f1fdc9", "Nukey Shay", "", "ROL Out (refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "c82ec00335cbb4b74494aecf31608fa1", "CCE", "", "E.T. - The Extra-Terrestrial (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c830f6ae7ee58bcc2a6712fb33e92d55", "Atari, Carla Meninsky", "CX2687", "Tempest (01-05-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c866c995c0d2ca7d017fef0fc0c2e268", "Retroactive", "", "Qb (2.00) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -2617,7 +2612,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d05e371765929bf5d39c91c6ea189bec", "", "", "Death Derby (v0005 New Build) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d071d2ec86b9d52b585cc0382480b351", "UA Limited", "", "Cat Trax (1983) (UA Limited) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "30", "", "YES", "" },
{ "d075aed43841901ab67bd3aead549808", "Nukey Shay", "", "ROL Out (20040909) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "d078674afdf24a4547b4b32890fdc614", "Jone Yuan Telephonic Enterprise Co", "", "Laser Blast (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d078d25873c5b99f78fa267245a2af02", "Sega - Beck-Tech", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" },
{ "d08fccfbebaa531c4a4fa7359393a0a9", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2813,7 +2807,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "deb39482e77f984d4ce73be9fd8adabd", "Activision, David Lubar", "AK-048-04", "River Raid II (1988) (Activision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ded26e1cb17f875a9c17515c900f9933", "", "", "Space Treat (29-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "df2745d585238780101df812d00b49f4", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp)", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" },
{ "df27b8ea679bc748a719d5171cb5255d", "Nukey Shay", "", "ROL Out Easy (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "df3e6a9b6927cf59b7afb626f6fd7eea", "", "", "Tuby Bird (208 in 1) (Unknown) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "df40af244a8d68b492bfba9e97dea4d6", "Franklin Cruz", "", "Asteroids 2 (Franlin Cruz) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "df4aea767cdf6a3f138255092e84d713", "", "", "Image - Samantha Fox (Colour) (09-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2885,6 +2878,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "e363e467f605537f3777ad33e74e113a", "Atari, Bob Whitehead - Sears", "CX2603 - 99803, 49-75601", "Star Ship (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e377c3af4f54a51b85efe37d4b7029e6", "20th Century Fox Video Games, Steve Beck", "11035", "Save the Whales (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "25", "215", "", "" },
{ "e37c8055d70979af354251ebe9f1b7dd", "HES", "", "Mega Funpak - Gorf, P. Patrol, Pacman, Skeet Shoot (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e38dc1f81a02e325562cd285123f579b", "Atari - GCC, Mike Feinstein", "CX2681, CX2681P", "Battlezone (1983) (Atari) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e39843c56b7a4a08b18fa7949ec3ee6b", "", "", "Joshua Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e39a13b13dc82c5fdbfbbfd55ba1230e", "", "", "Analog Clock (Additional Frame Info) (V0.0) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e3c0451d29dad724231bc5818ec4bae0", "", "", "Single-Scanline Positioning Demo 1 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2973,7 +2967,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "e9cb18770a41a16de63b124c1e8bd493", "Parker Brothers, Joe Gaucher", "931519", "Popeye (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "e9e646f730b8400cd5da08c849ef3e3b", "Tron", "", "Enduro (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e9e6ad30549a6e2cd89fe93b7691d447", "Atari, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e9f953bc7bc1c20539470e70bf876a44", "Nukey Shay", "", "ROL Out (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "ea38fcfc06ad87a0aed1a3d1588744e4", "Atari, Tod Frye", "CX26122", "Sinistar (1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ea6d40db5498d6386571a76df448aa4c", "", "", "Vertical Playfield Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ea7e25ade3fe68f5b786ee0aa82b1fe5", "", "", "Galatic (208 in 1) (Unknown) (PAL)", "AKA Challenge of.... Nexar, The", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3123,7 +3116,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "f53f81fae276d72dbdba7064786a8266", "", "", "Death Derby (v0011) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f542b5d0193a3959b54f3c4c803ba242", "Atari, Tom Rudadahl - Sears", "CX2634 - 49-75121", "Golf (1980) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5445b52999e229e3789c39e7ee99947", "Atari, Jim Huether", "CX26163P", "Flag Capture (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f559afa10ba5cb5a20994e6f3ab82531", "Nukey Shay", "", "ROL Out (20040908) (refill older) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "f5a2f6efa33a3e5541bc680e9dc31d5b", "Suntek", "SS-022", "Motocross (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5a3e051730d45fea518f2e8b926565b", "Robby", "", "Keystone Kapers (Robby)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5aa6bd10f662199c42e43863a30106c", "", "", "Music Kit (V1.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -3258,7 +3250,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "" },
{ "fe67087f9c22655ce519616fc6c6ef4d", "Atari, Robert Neve", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe6abc0f63e31e2646c9c600926b5b7f", "Atari", "CX26137", "4 in 1 (02-19-1987) (Atari) (Prototype)", "Home Run, Canyon Bomber, Sky Diver, Night Driver", "Prototype", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe6e73303e108bbda284b5d2a8a849ea", "Nukey Shay", "", "ROL Out (20040908) (always refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "fe870018332a0221eb59fb18b0c6bccc", "", "", "Incoming (08-11-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe940ab8eaa07e4db801f1728e391dbd", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "24", "", "YES", "" },
{ "fe9ae625d924b54c9f8a14ac9a0f6c6d", "BG Dodson", "", "High Bid! (BG Dodson) (Hack)", "Hack of Pepsi Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },

View File

@ -205,6 +205,13 @@ void TIA::reset()
myMaximumNumberOfScanlines = 342;
}
myCurrentP0Mask = &TIATables::PxMask[0][0][0][0];
myCurrentP1Mask = &TIATables::PxMask[0][0][0][0];
myCurrentM0Mask = &TIATables::MxMask[0][0][0][0];
myCurrentM1Mask = &TIATables::MxMask[0][0][0][0];
myCurrentBLMask = &TIATables::BLMask[0][0][0];
myCurrentPFMask = TIATables::PFMask[0];
// Recalculate the size of the display
frameReset();
}

View File

@ -1588,6 +1588,12 @@
"Cartridge.Name" "Marauder (1982) (Tigervision)"
""
"Cartridge.MD5" "435fd469f088468c4d66be6b5204d887"
"Cartridge.Manufacturer" "Atari - GCC"
"Cartridge.ModelNo" "CX2680, CX2680P"
"Cartridge.Name" "RealSports Tennis (1983) (Atari) (PAL) [a]"
""
"Cartridge.MD5" "13aa1f9ac4249947e4af61319d9a08f2"
"Cartridge.Manufacturer" "Atari - GCC"
"Cartridge.ModelNo" "CX2680, CX2680P"
@ -2599,6 +2605,12 @@
"Cartridge.Name" "Battlezone (1983) (Atari) (PAL) [a]"
""
"Cartridge.MD5" "e38dc1f81a02e325562cd285123f579b"
"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein"
"Cartridge.ModelNo" "CX2681, CX2681P"
"Cartridge.Name" "Battlezone (1983) (Atari) (PAL) [a1]"
""
"Cartridge.MD5" "21d2c435bcccde7792d82844b3cf60f4"
"Cartridge.Manufacturer" "Atari - GCC, Doug Macrae"
"Cartridge.ModelNo" "CX2677, CX2677P"
@ -17583,6 +17595,13 @@
"Display.Phosphor" "YES"
""
"Cartridge.MD5" "75ea60884c05ba496473c23a58edf12f"
"Cartridge.Manufacturer" "Atari, Howard Scott Warshaw - Sears"
"Cartridge.ModelNo" "CX2655 - 49-75167"
"Cartridge.Name" "Yars' Revenge (1982) (Atari) (PAL) [a]"
"Display.Phosphor" "YES"
""
"Cartridge.MD5" "e932f44fad2a66b6d5faec9addec208e"
"Cartridge.Name" "Atari Logo Demo 1 (PD)"
""
@ -19452,16 +19471,6 @@
"Cartridge.Type" "2IN1"
""
"Cartridge.MD5" "35689035629ce0a6c4e274123de79b55"
"Cartridge.Name" "Breakout - Breakaway IV (1978) (Atari) [o3]"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "395f46cb2bf49cecb88fdc070b8ca6bc"
"Cartridge.Name" "Breakout - Breakaway IV (1978) (Atari) [t1][o1]"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "d42fc569dc779ff1c81ba232f8cf5baf"
"Cartridge.Manufacturer" "neotokeo2001"
"Cartridge.Name" "Burger King Kaboom! (Hack) [a1]"
@ -19525,86 +19534,6 @@
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "fe6e73303e108bbda284b5d2a8a849ea"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (always refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "90f67b7c34f3a71159e14f69777721b5"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "8f39cd5973b07dfdd12baca1ebd8d722"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (old) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "2d44e2d3894f49f36f7416605d72842c"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "f559afa10ba5cb5a20994e6f3ab82531"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (refill older) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "d075aed43841901ab67bd3aead549808"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040909) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "331c04841bccd3f8210dcced9602ccda"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040911) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "df27b8ea679bc748a719d5171cb5255d"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out Easy (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "e9f953bc7bc1c20539470e70bf876a44"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "c81f28ca03c4ed87d3deeb1967f1fdc9"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "81073d0377a2badef8d5e74fc44fc323"
"Cartridge.Manufacturer" "Thomas Jentzsch"
"Cartridge.Name" "Sadoom (TJ) (PAL60) (Hack)"

View File

@ -512,20 +512,17 @@ row_callback(png_structp png_ptr, png_bytep new_row,
* shown below:
*/
/* Check if row_num is in bounds. */
if ((row_num >= 0) && (row_num < height))
{
/* Get pointer to corresponding row in our
* PNG read buffer.
*/
png_bytep old_row = ((png_bytep *)our_data)[row_num];
/* Get pointer to corresponding row in our
* PNG read buffer.
*/
png_bytep old_row = ((png_bytep *)our_data)[row_num];
/* If both rows are allocated then copy the new row
* data to the corresponding row data.
*/
if ((old_row != NULL) && (new_row != NULL))
png_progressive_combine_row(png_ptr, old_row, new_row);
/* If both rows are allocated then copy the new row
* data to the corresponding row data.
*/
if ((old_row != NULL) && (new_row != NULL))
png_progressive_combine_row(png_ptr, old_row, new_row);
}
/*
* The rows and passes are called in order, so you don't really
* need the row_num and pass, but I'm supplying them because it

View File

@ -17,7 +17,7 @@
#include "pngpriv.h"
/* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_4_2 Your_png_h_is_not_version_1_4_2;
typedef version_1_4_3 Your_png_h_is_not_version_1_4_3;
/* Version information for C files. This had better match the version
* string defined in png.h.
@ -551,13 +551,13 @@ png_get_copyright(png_structp png_ptr)
#else
#ifdef __STDC__
return ((png_charp) PNG_STRING_NEWLINE \
"libpng version 1.4.2 - May 6, 2010" PNG_STRING_NEWLINE \
"libpng version 1.4.3 - June 26, 2010" PNG_STRING_NEWLINE \
"Copyright (c) 1998-2010 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
PNG_STRING_NEWLINE);
#else
return ((png_charp) "libpng version 1.4.2 - May 6, 2010\
return ((png_charp) "libpng version 1.4.3 - June 26, 2010\
Copyright (c) 1998-2010 Glenn Randers-Pehrson\
Copyright (c) 1996-1997 Andreas Dilger\
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.");

View File

@ -1,7 +1,7 @@
/* png.h - header file for PNG reference library
*
* libpng version 1.4.2 - May 6, 2010
* libpng version 1.4.3 - June 26, 2010
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -11,7 +11,7 @@
* Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.4.2 - May 6, 2010: Glenn
* libpng versions 0.97, January 1998, through 1.4.3 - June 26, 2010: Glenn
* See also "Contributing Authors", below.
*
* Note about libpng version numbers:
@ -142,6 +142,9 @@
* 1.4.2beta01 14 10402 14.so.14.2[.0]
* 1.4.2rc02-06 14 10402 14.so.14.2[.0]
* 1.4.2 14 10402 14.so.14.2[.0]
* 1.4.3beta01-05 14 10403 14.so.14.3[.0]
* 1.4.3rc01-03 14 10403 14.so.14.3[.0]
* 1.4.3 14 10403 14.so.14.3[.0]
*
* Henceforth the source version will match the shared-library major
* and minor numbers; the shared-library major version number will be
@ -173,7 +176,7 @@
*
* This code is released under the libpng license.
*
* libpng versions 1.2.6, August 15, 2004, through 1.4.2, May 6, 2010, are
* libpng versions 1.2.6, August 15, 2004, through 1.4.3, June 26, 2010, are
* Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are
* distributed according to the same disclaimer and license as libpng-1.2.5
* with the following individual added to the list of Contributing Authors:
@ -285,13 +288,13 @@
* Y2K compliance in libpng:
* =========================
*
* May 6, 2010
* June 26, 2010
*
* Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration.
*
* This is your unofficial assurance that libpng from version 0.71 and
* upward through 1.4.2 are Y2K compliant. It is my belief that earlier
* upward through 1.4.3 are Y2K compliant. It is my belief that earlier
* versions were also Y2K compliant.
*
* Libpng only has three year fields. One is a 2-byte unsigned integer
@ -347,9 +350,9 @@
*/
/* Version information for png.h - this should match the version in png.c */
#define PNG_LIBPNG_VER_STRING "1.4.2"
#define PNG_LIBPNG_VER_STRING "1.4.3"
#define PNG_HEADER_VERSION_STRING \
" libpng version 1.4.2 - May 6, 2010\n"
" libpng version 1.4.3 - June 26, 2010\n"
#define PNG_LIBPNG_VER_SONUM 14
#define PNG_LIBPNG_VER_DLLNUM 14
@ -357,7 +360,7 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 4
#define PNG_LIBPNG_VER_RELEASE 2
#define PNG_LIBPNG_VER_RELEASE 3
/* This should match the numeric part of the final component of
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
*/
@ -387,7 +390,7 @@
* version 1.0.0 was mis-numbered 100 instead of 10000). From
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
*/
#define PNG_LIBPNG_VER 10402 /* 1.4.2 */
#define PNG_LIBPNG_VER 10403 /* 1.4.3 */
#ifndef PNG_VERSION_INFO_ONLY
/* Include the compression library's header */
@ -1471,7 +1474,7 @@ struct png_struct_def
/* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number.
*/
typedef png_structp version_1_4_2;
typedef png_structp version_1_4_3;
typedef png_struct FAR * FAR * png_structpp;

View File

@ -1,7 +1,7 @@
/* pngconf.h - machine configurable file for libpng
*
* libpng version 1.4.2 - May 6, 2010
* libpng version 1.4.3 - June 26, 2010
* For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -50,15 +50,6 @@
# include "pngusr.h"
#endif
/*
* Added by stephena - 2010/06/17
*
* Disable parts of the library that we know Stella will never use.
*/
#define PNG_NO_MNG_FEATURES
#define PNG_NO_PROGRESSIVE_READ
#define PNG_PROGRESSIVE_READ_NOT_SUPPORTED
/*
* If you create a private DLL you need to define in "pngusr.h" the followings:
* #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
@ -78,6 +69,15 @@
* - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
*/
/*
* Added by stephena - 2010/06/17
*
* Disable parts of the library that we know Stella will never use.
*/
#define PNG_NO_MNG_FEATURES
#define PNG_NO_PROGRESSIVE_READ
#define PNG_PROGRESSIVE_READ_NOT_SUPPORTED
#ifdef __STDC__
# ifdef SPECIALBUILD
# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\

View File

@ -1,7 +1,7 @@
/* pngpread.c - read a png file in push mode
*
* Last changed in libpng 1.4.1 [February 25, 2010]
* Last changed in libpng 1.4.3 [June 26, 2010]
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -779,8 +779,7 @@ png_push_read_IDAT(png_structp png_ptr)
png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
png_ptr->idat_size -= save_size;
png_ptr->buffer_size -= save_size;
@ -803,8 +802,8 @@ png_push_read_IDAT(png_structp png_ptr)
save_size = png_ptr->current_buffer_size;
png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
png_ptr->idat_size -= save_size;
png_ptr->buffer_size -= save_size;
@ -829,62 +828,101 @@ void /* PRIVATE */
png_process_IDAT_data(png_structp png_ptr, png_bytep buffer,
png_size_t buffer_length)
{
int ret;
if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length)
png_benign_error(png_ptr, "Extra compression data");
/* The caller checks for a non-zero buffer length. */
if (!(buffer_length > 0) || buffer == NULL)
png_error(png_ptr, "No IDAT data (internal error)");
/* This routine must process all the data it has been given
* before returning, calling the row callback as required to
* handle the uncompressed results.
*/
png_ptr->zstream.next_in = buffer;
png_ptr->zstream.avail_in = (uInt)buffer_length;
for (;;)
/* Keep going until the decompressed data is all processed
* or the stream marked as finished.
*/
while (png_ptr->zstream.avail_in > 0 &&
!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
{
ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
if (ret != Z_OK)
int ret;
/* We have data for zlib, but we must check that zlib
* has somewhere to put the results. It doesn't matter
* if we don't expect any results -- it may be the input
* data is just the LZ end code.
*/
if (!(png_ptr->zstream.avail_out > 0))
{
if (ret == Z_STREAM_END)
{
if (png_ptr->zstream.avail_in)
png_benign_error(png_ptr, "Extra compressed data");
if (!(png_ptr->zstream.avail_out))
{
png_push_process_row(png_ptr);
}
png_ptr->mode |= PNG_AFTER_IDAT;
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
break;
}
else if (ret == Z_BUF_ERROR)
break;
else
png_error(png_ptr, "Decompression Error");
}
if (!(png_ptr->zstream.avail_out))
{
if ((
#ifdef PNG_READ_INTERLACING_SUPPORTED
png_ptr->interlaced && png_ptr->pass > 6) ||
(!png_ptr->interlaced &&
#endif
png_ptr->row_number == png_ptr->num_rows))
{
if (png_ptr->zstream.avail_in)
png_warning(png_ptr, "Too much data in IDAT chunks");
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
break;
}
png_push_process_row(png_ptr);
png_ptr->zstream.avail_out =
(uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
png_ptr->iwidth) + 1;
png_ptr->zstream.next_out = png_ptr->row_buf;
}
else
break;
/* Using Z_SYNC_FLUSH here means that an unterminated
* LZ stream can still be handled (a stream with a missing
* end code), otherwise (Z_NO_FLUSH) a future zlib
* implementation might defer output and, therefore,
* change the current behavior. (See comments in inflate.c
* for why this doesn't happen at present with zlib 1.2.5.)
*/
ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH);
/* Check for any failure before proceeding. */
if (ret != Z_OK && ret != Z_STREAM_END)
{
/* Terminate the decompression. */
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
/* This may be a truncated stream (missing or
* damaged end code). Treat that as a warning.
*/
if (png_ptr->row_number >= png_ptr->num_rows ||
png_ptr->pass > 6)
png_warning(png_ptr, "Truncated compressed data in IDAT");
else
png_error(png_ptr, "Decompression error in IDAT");
/* Skip the check on unprocessed input */
return;
}
/* Did inflate output any data? */
if (png_ptr->zstream.next_out != png_ptr->row_buf)
{
/* Is this unexpected data after the last row?
* If it is, artificially terminate the LZ output
* here.
*/
if (png_ptr->row_number >= png_ptr->num_rows ||
png_ptr->pass > 6)
{
/* Extra data. */
png_warning(png_ptr, "Extra compressed data in IDAT");
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
/* Do no more processing; skip the unprocessed
* input check below.
*/
return;
}
/* Do we have a complete row? */
if (png_ptr->zstream.avail_out == 0)
png_push_process_row(png_ptr);
}
/* And check for the end of the stream. */
if (ret == Z_STREAM_END)
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
}
/* All the data should have been processed, if anything
* is left at this point we have bytes of IDAT data
* after the zlib end code.
*/
if (png_ptr->zstream.avail_in > 0)
png_warning(png_ptr, "Extra compression data");
}
void /* PRIVATE */
@ -900,8 +938,8 @@ png_push_process_row(png_structp png_ptr)
png_ptr->row_info.width);
png_read_filter_row(png_ptr, &(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
(int)(png_ptr->row_buf[0]));
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
(int)(png_ptr->row_buf[0]));
png_memcpy(png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1);
@ -915,7 +953,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass < 6)
/* old interface (pre-1.0.9):
png_do_read_interlace(&(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
*/
png_do_read_interlace(png_ptr);
@ -950,7 +988,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass == 6 && png_ptr->height <= 4)
{
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
@ -990,7 +1028,7 @@ png_push_process_row(png_structp png_ptr)
for (i = 0; i < 4 && png_ptr->pass == 2; i++)
{
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
@ -1040,13 +1078,13 @@ png_push_process_row(png_structp png_ptr)
for (i = 0; i < 2 && png_ptr->pass == 4; i++)
{
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
if (png_ptr->pass == 6) /* Pass 5 might be empty */
{
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
@ -1065,7 +1103,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass == 6) /* Skip top generated row */
{
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
@ -1079,7 +1117,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass != 6)
break;
png_push_have_row(png_ptr, NULL);
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
}
@ -1391,7 +1429,7 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
tmp = text;
text = (png_charp)png_malloc(png_ptr, text_size +
(png_ptr->zbuf_size
(png_ptr->zbuf_size
- png_ptr->zstream.avail_out + 1));
png_memcpy(text, tmp, text_size);
@ -1613,7 +1651,7 @@ png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32
}
#endif
png_memcpy((png_charp)png_ptr->unknown_chunk.name,
(png_charp)png_ptr->chunk_name,
(png_charp)png_ptr->chunk_name,
png_sizeof(png_ptr->unknown_chunk.name));
png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name) - 1]
= '\0';

View File

@ -1,7 +1,7 @@
/* pngpriv.h - private declarations for use inside libpng
*
* libpng version 1.4.2 - May 6, 2010
* libpng version 1.4.3 - June 26, 2010
* For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngrutil.c - utilities to read a PNG file
*
* Last changed in libpng 1.4.1 [February 25, 2010]
* Last changed in libpng 1.4.3 [June 26, 2010]
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -254,7 +254,7 @@ png_inflate(png_structp png_ptr, const png_byte *data, png_size_t size,
* buffer if available.
*/
{
const char *msg;
PNG_CONST char *msg;
if (png_ptr->zstream.msg != 0)
msg = png_ptr->zstream.msg;
else
@ -326,8 +326,10 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
if (png_ptr->user_chunk_malloc_max &&
(prefix_size + expanded_size >= png_ptr->user_chunk_malloc_max - 1))
#else
# ifdef PNG_USER_CHUNK_MALLOC_MAX
if ((PNG_USER_CHUNK_MALLOC_MAX > 0) &&
prefix_size + expanded_size >= PNG_USER_CHUNK_MALLOC_MAX - 1)
# endif
#endif
png_warning(png_ptr, "Exceeded size limit while expanding chunk");
@ -363,7 +365,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
*newlength = prefix_size + expanded_size;
return; /* The success return! */
}
png_warning(png_ptr, "png_inflate logic error");
png_free(png_ptr, text);
}
@ -1811,6 +1813,7 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (png_ptr->chunkdata == NULL)
{
png_warning(png_ptr, "Out of memory while processing sCAL chunk");
png_crc_finish(png_ptr, length);
return;
}
slength = (png_size_t)length;
@ -1832,6 +1835,8 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (*vp)
{
png_warning(png_ptr, "malformed width string in sCAL chunk");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
return;
}
#else
@ -1840,6 +1845,8 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (swidth == NULL)
{
png_warning(png_ptr, "Out of memory while processing sCAL chunk width");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
return;
}
png_memcpy(swidth, ep, png_strlen(ep));
@ -1853,8 +1860,7 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (png_ptr->chunkdata + slength < ep)
{
png_warning(png_ptr, "Truncated sCAL chunk");
#if defined(PNG_FIXED_POINT_SUPPORTED) && \
!defined(PNG_FLOATING_POINT_SUPPORTED)
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth);
#endif
png_free(png_ptr, png_ptr->chunkdata);
@ -1867,6 +1873,11 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (*vp)
{
png_warning(png_ptr, "malformed height string in sCAL chunk");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth);
#endif
return;
}
#else
@ -1875,6 +1886,11 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (sheight == NULL)
{
png_warning(png_ptr, "Out of memory while processing sCAL chunk height");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth);
#endif
return;
}
png_memcpy(sheight, ep, png_strlen(ep));

View File

@ -1627,4 +1627,4 @@ main(int argc, char *argv[])
}
/* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_4_2 your_png_h_is_not_version_1_4_2;
typedef version_1_4_3 your_png_h_is_not_version_1_4_3;

View File

@ -2106,7 +2106,7 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
png_uint_32 row_bytes = row_info->rowbytes;
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
int num_p_filters = (int)png_ptr->num_prev_filters;
#endif
#endif
png_debug(1, "in png_write_find_filter");
@ -2116,7 +2116,7 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
/* These will never be selected so we need not test them. */
filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH);
}
#endif
#endif
/* Find out how many bytes offset each pixel is */
bpp = (row_info->pixel_depth + 7) >> 3;

View File

@ -28,7 +28,9 @@ close(INFILE);
# Get all snapshot files from the actual directory (second commandline arg)
# We use a hashmap to get constant lookup time
my @files = <"$ARGV[1]/*">;
opendir(SNAPDIR, $ARGV[1]) or die "Directory '$ARGV[1]' not found\n";
my @files = grep !/^\.\.?$/, readdir SNAPDIR;
close(SNAPDIR);
foreach $file (@files)
{
($base,$path,$type) = fileparse($file);