OSX ready, encara no compila. Implementació del lector de GIFs quasi acabada
This commit is contained in:
34
Info.plist
Normal file
34
Info.plist
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.arcade-games</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2016 Raimon Zamora. All rights reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
370
aee.xcodeproj/project.pbxproj
Normal file
370
aee.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,370 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
02252FB81C764D2E002D1DA1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02252FB71C764D2E002D1DA1 /* main.cpp */; };
|
||||
02B01D591C767C1700CD186D /* SDL2_image.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02B01D581C767C1700CD186D /* SDL2_image.framework */; };
|
||||
02B01D5B1C767C2C00CD186D /* SDL2_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02B01D5A1C767C2C00CD186D /* SDL2_mixer.framework */; };
|
||||
02EA2BEF1C764B3800E5A247 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02EA2BEE1C764B3800E5A247 /* SDL2.framework */; };
|
||||
02F8247B1C767CE2007AAE83 /* bola.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F8245D1C767CE2007AAE83 /* bola.cpp */; };
|
||||
02F8247C1C767CE2007AAE83 /* data.jrf in Resources */ = {isa = PBXBuildFile; fileRef = 02F8245F1C767CE2007AAE83 /* data.jrf */; };
|
||||
02F8247D1C767CE2007AAE83 /* engendro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824601C767CE2007AAE83 /* engendro.cpp */; };
|
||||
02F8247E1C767CE2007AAE83 /* jdraw8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824631C767CE2007AAE83 /* jdraw8.cpp */; };
|
||||
02F8247F1C767CE2007AAE83 /* jfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824651C767CE2007AAE83 /* jfile.cpp */; };
|
||||
02F824801C767CE2007AAE83 /* jgame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824671C767CE2007AAE83 /* jgame.cpp */; };
|
||||
02F824811C767CE2007AAE83 /* jinput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824691C767CE2007AAE83 /* jinput.cpp */; };
|
||||
02F824821C767CE2007AAE83 /* jsound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F8246B1C767CE2007AAE83 /* jsound.cpp */; };
|
||||
02F824831C767CE2007AAE83 /* mapa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F8246D1C767CE2007AAE83 /* mapa.cpp */; };
|
||||
02F824841C767CE2007AAE83 /* marcador.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F8246F1C767CE2007AAE83 /* marcador.cpp */; };
|
||||
02F824851C767CE2007AAE83 /* modulegame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824711C767CE2007AAE83 /* modulegame.cpp */; };
|
||||
02F824861C767CE2007AAE83 /* modulesequence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824731C767CE2007AAE83 /* modulesequence.cpp */; };
|
||||
02F824871C767CE2007AAE83 /* momia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824751C767CE2007AAE83 /* momia.cpp */; };
|
||||
02F824881C767CE2007AAE83 /* prota.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824771C767CE2007AAE83 /* prota.cpp */; };
|
||||
02F824891C767CE2007AAE83 /* sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F824791C767CE2007AAE83 /* sprite.cpp */; };
|
||||
02F8248B1C772310007AAE83 /* gif.c in Sources */ = {isa = PBXBuildFile; fileRef = 02F8248A1C772310007AAE83 /* gif.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
02252FB71C764D2E002D1DA1 /* main.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = main.cpp; sourceTree = "<group>"; };
|
||||
02B01D581C767C1700CD186D /* SDL2_image.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2_image.framework; path = ../../../../../Library/Frameworks/SDL2_image.framework; sourceTree = "<group>"; };
|
||||
02B01D5A1C767C2C00CD186D /* SDL2_mixer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2_mixer.framework; path = ../../../../../Library/Frameworks/SDL2_mixer.framework; sourceTree = "<group>"; };
|
||||
02CF35B91C7649C300180C9F /* aee.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = aee.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
02CF35C71C7649C300180C9F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
02EA2BEE1C764B3800E5A247 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../../../../../Library/Frameworks/SDL2.framework; sourceTree = "<group>"; };
|
||||
02F8245D1C767CE2007AAE83 /* bola.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bola.cpp; sourceTree = "<group>"; };
|
||||
02F8245E1C767CE2007AAE83 /* bola.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bola.h; sourceTree = "<group>"; };
|
||||
02F8245F1C767CE2007AAE83 /* data.jrf */ = {isa = PBXFileReference; lastKnownFileType = file; path = data.jrf; sourceTree = "<group>"; };
|
||||
02F824601C767CE2007AAE83 /* engendro.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = engendro.cpp; sourceTree = "<group>"; };
|
||||
02F824611C767CE2007AAE83 /* engendro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engendro.h; sourceTree = "<group>"; };
|
||||
02F824621C767CE2007AAE83 /* info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = info.h; sourceTree = "<group>"; };
|
||||
02F824631C767CE2007AAE83 /* jdraw8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jdraw8.cpp; sourceTree = "<group>"; };
|
||||
02F824641C767CE2007AAE83 /* jdraw8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jdraw8.h; sourceTree = "<group>"; };
|
||||
02F824651C767CE2007AAE83 /* jfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jfile.cpp; sourceTree = "<group>"; };
|
||||
02F824661C767CE2007AAE83 /* jfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jfile.h; sourceTree = "<group>"; };
|
||||
02F824671C767CE2007AAE83 /* jgame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jgame.cpp; sourceTree = "<group>"; };
|
||||
02F824681C767CE2007AAE83 /* jgame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jgame.h; sourceTree = "<group>"; };
|
||||
02F824691C767CE2007AAE83 /* jinput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jinput.cpp; sourceTree = "<group>"; };
|
||||
02F8246A1C767CE2007AAE83 /* jinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jinput.h; sourceTree = "<group>"; };
|
||||
02F8246B1C767CE2007AAE83 /* jsound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsound.cpp; sourceTree = "<group>"; };
|
||||
02F8246C1C767CE2007AAE83 /* jsound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsound.h; sourceTree = "<group>"; };
|
||||
02F8246D1C767CE2007AAE83 /* mapa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mapa.cpp; sourceTree = "<group>"; };
|
||||
02F8246E1C767CE2007AAE83 /* mapa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mapa.h; sourceTree = "<group>"; };
|
||||
02F8246F1C767CE2007AAE83 /* marcador.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = marcador.cpp; sourceTree = "<group>"; };
|
||||
02F824701C767CE2007AAE83 /* marcador.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = marcador.h; sourceTree = "<group>"; };
|
||||
02F824711C767CE2007AAE83 /* modulegame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = modulegame.cpp; sourceTree = "<group>"; };
|
||||
02F824721C767CE2007AAE83 /* modulegame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modulegame.h; sourceTree = "<group>"; };
|
||||
02F824731C767CE2007AAE83 /* modulesequence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = modulesequence.cpp; sourceTree = "<group>"; };
|
||||
02F824741C767CE2007AAE83 /* modulesequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modulesequence.h; sourceTree = "<group>"; };
|
||||
02F824751C767CE2007AAE83 /* momia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = momia.cpp; sourceTree = "<group>"; };
|
||||
02F824761C767CE2007AAE83 /* momia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = momia.h; sourceTree = "<group>"; };
|
||||
02F824771C767CE2007AAE83 /* prota.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = prota.cpp; sourceTree = "<group>"; };
|
||||
02F824781C767CE2007AAE83 /* prota.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prota.h; sourceTree = "<group>"; };
|
||||
02F824791C767CE2007AAE83 /* sprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sprite.cpp; sourceTree = "<group>"; };
|
||||
02F8247A1C767CE2007AAE83 /* sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sprite.h; sourceTree = "<group>"; };
|
||||
02F8248A1C772310007AAE83 /* gif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gif.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
02CF35B61C7649C300180C9F /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
02B01D5B1C767C2C00CD186D /* SDL2_mixer.framework in Frameworks */,
|
||||
02B01D591C767C1700CD186D /* SDL2_image.framework in Frameworks */,
|
||||
02EA2BEF1C764B3800E5A247 /* SDL2.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
02CF35B01C7649C300180C9F = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
02F8248A1C772310007AAE83 /* gif.c */,
|
||||
02F8245D1C767CE2007AAE83 /* bola.cpp */,
|
||||
02F8245E1C767CE2007AAE83 /* bola.h */,
|
||||
02F8245F1C767CE2007AAE83 /* data.jrf */,
|
||||
02F824601C767CE2007AAE83 /* engendro.cpp */,
|
||||
02F824611C767CE2007AAE83 /* engendro.h */,
|
||||
02F824621C767CE2007AAE83 /* info.h */,
|
||||
02F824631C767CE2007AAE83 /* jdraw8.cpp */,
|
||||
02F824641C767CE2007AAE83 /* jdraw8.h */,
|
||||
02F824651C767CE2007AAE83 /* jfile.cpp */,
|
||||
02F824661C767CE2007AAE83 /* jfile.h */,
|
||||
02F824671C767CE2007AAE83 /* jgame.cpp */,
|
||||
02F824681C767CE2007AAE83 /* jgame.h */,
|
||||
02F824691C767CE2007AAE83 /* jinput.cpp */,
|
||||
02F8246A1C767CE2007AAE83 /* jinput.h */,
|
||||
02F8246B1C767CE2007AAE83 /* jsound.cpp */,
|
||||
02F8246C1C767CE2007AAE83 /* jsound.h */,
|
||||
02252FB71C764D2E002D1DA1 /* main.cpp */,
|
||||
02F8246D1C767CE2007AAE83 /* mapa.cpp */,
|
||||
02F8246E1C767CE2007AAE83 /* mapa.h */,
|
||||
02F8246F1C767CE2007AAE83 /* marcador.cpp */,
|
||||
02F824701C767CE2007AAE83 /* marcador.h */,
|
||||
02F824711C767CE2007AAE83 /* modulegame.cpp */,
|
||||
02F824721C767CE2007AAE83 /* modulegame.h */,
|
||||
02F824731C767CE2007AAE83 /* modulesequence.cpp */,
|
||||
02F824741C767CE2007AAE83 /* modulesequence.h */,
|
||||
02F824751C767CE2007AAE83 /* momia.cpp */,
|
||||
02F824761C767CE2007AAE83 /* momia.h */,
|
||||
02F824771C767CE2007AAE83 /* prota.cpp */,
|
||||
02F824781C767CE2007AAE83 /* prota.h */,
|
||||
02F824791C767CE2007AAE83 /* sprite.cpp */,
|
||||
02F8247A1C767CE2007AAE83 /* sprite.h */,
|
||||
02CF35C71C7649C300180C9F /* Info.plist */,
|
||||
02EA2BEE1C764B3800E5A247 /* SDL2.framework */,
|
||||
02B01D581C767C1700CD186D /* SDL2_image.framework */,
|
||||
02B01D5A1C767C2C00CD186D /* SDL2_mixer.framework */,
|
||||
02CF35BA1C7649C300180C9F /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
02CF35BA1C7649C300180C9F /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
02CF35B91C7649C300180C9F /* aee.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
02CF35B81C7649C300180C9F /* aee */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 02CF35CA1C7649C300180C9F /* Build configuration list for PBXNativeTarget "aee" */;
|
||||
buildPhases = (
|
||||
02CF35B51C7649C300180C9F /* Sources */,
|
||||
02CF35B61C7649C300180C9F /* Frameworks */,
|
||||
02CF35B71C7649C300180C9F /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = aee;
|
||||
productName = aee;
|
||||
productReference = 02CF35B91C7649C300180C9F /* aee.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
02CF35B11C7649C300180C9F /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0720;
|
||||
ORGANIZATIONNAME = "Raimon Zamora";
|
||||
TargetAttributes = {
|
||||
02CF35B81C7649C300180C9F = {
|
||||
CreatedOnToolsVersion = 7.2;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 02CF35B41C7649C300180C9F /* Build configuration list for PBXProject "aee" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 02CF35B01C7649C300180C9F;
|
||||
productRefGroup = 02CF35BA1C7649C300180C9F /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
02CF35B81C7649C300180C9F /* aee */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
02CF35B71C7649C300180C9F /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
02F8247C1C767CE2007AAE83 /* data.jrf in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
02CF35B51C7649C300180C9F /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
02F824841C767CE2007AAE83 /* marcador.cpp in Sources */,
|
||||
02F824801C767CE2007AAE83 /* jgame.cpp in Sources */,
|
||||
02F824881C767CE2007AAE83 /* prota.cpp in Sources */,
|
||||
02F824851C767CE2007AAE83 /* modulegame.cpp in Sources */,
|
||||
02252FB81C764D2E002D1DA1 /* main.cpp in Sources */,
|
||||
02F824831C767CE2007AAE83 /* mapa.cpp in Sources */,
|
||||
02F8247D1C767CE2007AAE83 /* engendro.cpp in Sources */,
|
||||
02F824871C767CE2007AAE83 /* momia.cpp in Sources */,
|
||||
02F824861C767CE2007AAE83 /* modulesequence.cpp in Sources */,
|
||||
02F8247B1C767CE2007AAE83 /* bola.cpp in Sources */,
|
||||
02F824811C767CE2007AAE83 /* jinput.cpp in Sources */,
|
||||
02F8247E1C767CE2007AAE83 /* jdraw8.cpp in Sources */,
|
||||
02F8248B1C772310007AAE83 /* gif.c in Sources */,
|
||||
02F824821C767CE2007AAE83 /* jsound.cpp in Sources */,
|
||||
02F8247F1C767CE2007AAE83 /* jfile.cpp in Sources */,
|
||||
02F824891C767CE2007AAE83 /* sprite.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
02CF35C81C7649C300180C9F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
02CF35C91C7649C300180C9F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
02CF35CB1C7649C300180C9F /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2.framework/headers",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2_image.framework/headers",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2_mixer.framework/headers",
|
||||
);
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.jailers.aee;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
02CF35CC1C7649C300180C9F /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2.framework/headers",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2_image.framework/headers",
|
||||
"$(LOCAL_LIBRARY_DIR)/Frameworks/SDL2_mixer.framework/headers",
|
||||
);
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = net.jailers.aee;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
02CF35B41C7649C300180C9F /* Build configuration list for PBXProject "aee" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
02CF35C81C7649C300180C9F /* Debug */,
|
||||
02CF35C91C7649C300180C9F /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
02CF35CA1C7649C300180C9F /* Build configuration list for PBXNativeTarget "aee" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
02CF35CB1C7649C300180C9F /* Debug */,
|
||||
02CF35CC1C7649C300180C9F /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 02CF35B11C7649C300180C9F /* Project object */;
|
||||
}
|
||||
7
aee.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
aee.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:aee.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
BIN
aee.xcodeproj/project.xcworkspace/xcuserdata/raimonzamora.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
BIN
aee.xcodeproj/project.xcworkspace/xcuserdata/raimonzamora.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Bucket
|
||||
type = "1"
|
||||
version = "2.0">
|
||||
<Breakpoints>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "jfile.cpp"
|
||||
timestampString = "477527894.254081"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "34"
|
||||
endingLineNumber = "34"
|
||||
landmarkName = "JF_SetResourceFile(const char *p_resourceFileName)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
</Breakpoints>
|
||||
</Bucket>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0720"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "02CF35B81C7649C300180C9F"
|
||||
BuildableName = "aee.app"
|
||||
BlueprintName = "aee"
|
||||
ReferencedContainer = "container:aee.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "02CF35B81C7649C300180C9F"
|
||||
BuildableName = "aee.app"
|
||||
BlueprintName = "aee"
|
||||
ReferencedContainer = "container:aee.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "02CF35B81C7649C300180C9F"
|
||||
BuildableName = "aee.app"
|
||||
BlueprintName = "aee"
|
||||
ReferencedContainer = "container:aee.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "02CF35B81C7649C300180C9F"
|
||||
BuildableName = "aee.app"
|
||||
BlueprintName = "aee"
|
||||
ReferencedContainer = "container:aee.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>aee.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>02CF35B81C7649C300180C9F</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
533
gif.c
Normal file
533
gif.c
Normal file
@@ -0,0 +1,533 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#define EXTENSION_INTRODUCER 0x21
|
||||
#define IMAGE_DESCRIPTOR 0x2C
|
||||
#define TRAILER 0x3B
|
||||
|
||||
#define GRAPHIC_CONTROL 0xF9
|
||||
#define APPLICATION_EXTENSION 0xFF
|
||||
#define COMMENT_EXTENSION 0xFE
|
||||
#define PLAINTEXT_EXTENSION 0x01
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short width;
|
||||
unsigned short height;
|
||||
unsigned char fields;
|
||||
unsigned char background_color_index;
|
||||
unsigned char pixel_aspect_ratio;
|
||||
}
|
||||
screen_descriptor_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char r;
|
||||
unsigned char g;
|
||||
unsigned char b;
|
||||
}
|
||||
rgb;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short image_left_position;
|
||||
unsigned short image_top_position;
|
||||
unsigned short image_width;
|
||||
unsigned short image_height;
|
||||
unsigned char fields;
|
||||
}
|
||||
image_descriptor_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char byte;
|
||||
int prev;
|
||||
int len;
|
||||
}
|
||||
dictionary_entry_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char extension_code;
|
||||
unsigned char block_size;
|
||||
}
|
||||
extension_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char fields;
|
||||
unsigned short delay_time;
|
||||
unsigned char transparent_color_index;
|
||||
}
|
||||
graphic_control_extension_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char application_id[ 8 ];
|
||||
unsigned char version[ 3 ];
|
||||
}
|
||||
application_extension_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned short left;
|
||||
unsigned short top;
|
||||
unsigned short width;
|
||||
unsigned short height;
|
||||
unsigned char cell_width;
|
||||
unsigned char cell_height;
|
||||
unsigned char foreground_color;
|
||||
unsigned char background_color;
|
||||
}
|
||||
plaintext_extension_t;
|
||||
|
||||
static unsigned short width = 0;
|
||||
static unsigned short height = 0;
|
||||
static unsigned char* uncompressed_data = NULL;
|
||||
|
||||
void uncompress( int code_length,
|
||||
const unsigned char *input,
|
||||
int input_length,
|
||||
unsigned char *out )
|
||||
{
|
||||
//int maxbits;
|
||||
int i, bit;
|
||||
int code, prev = -1;
|
||||
dictionary_entry_t *dictionary;
|
||||
int dictionary_ind;
|
||||
unsigned int mask = 0x01;
|
||||
int reset_code_length;
|
||||
int clear_code; // This varies depending on code_length
|
||||
int stop_code; // one more than clear code
|
||||
int match_len;
|
||||
|
||||
clear_code = 1 << ( code_length );
|
||||
stop_code = clear_code + 1;
|
||||
// To handle clear codes
|
||||
reset_code_length = code_length;
|
||||
|
||||
// Create a dictionary large enough to hold "code_length" entries.
|
||||
// Once the dictionary overflows, code_length increases
|
||||
dictionary = ( dictionary_entry_t * )
|
||||
malloc( sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
|
||||
|
||||
// Initialize the first 2^code_len entries of the dictionary with their
|
||||
// indices. The rest of the entries will be built up dynamically.
|
||||
|
||||
// Technically, it shouldn't be necessary to initialize the
|
||||
// dictionary. The spec says that the encoder "should output a
|
||||
// clear code as the first code in the image data stream". It doesn't
|
||||
// say must, though...
|
||||
for ( dictionary_ind = 0;
|
||||
dictionary_ind < ( 1 << code_length );
|
||||
dictionary_ind++ )
|
||||
{
|
||||
dictionary[ dictionary_ind ].byte = dictionary_ind;
|
||||
// XXX this only works because prev is a 32-bit int (> 12 bits)
|
||||
dictionary[ dictionary_ind ].prev = -1;
|
||||
dictionary[ dictionary_ind ].len = 1;
|
||||
}
|
||||
|
||||
// 2^code_len + 1 is the special "end" code; don't give it an entry here
|
||||
dictionary_ind++;
|
||||
dictionary_ind++;
|
||||
|
||||
// TODO verify that the very last byte is clear_code + 1
|
||||
while ( input_length )
|
||||
{
|
||||
code = 0x0;
|
||||
// Always read one more bit than the code length
|
||||
for ( i = 0; i < ( code_length + 1 ); i++ )
|
||||
{
|
||||
// This is different than in the file read example; that
|
||||
// was a call to "next_bit"
|
||||
bit = ( *input & mask ) ? 1 : 0;
|
||||
mask <<= 1;
|
||||
|
||||
if ( mask == 0x100 )
|
||||
{
|
||||
mask = 0x01;
|
||||
input++;
|
||||
input_length--;
|
||||
}
|
||||
|
||||
code = code | ( bit << i );
|
||||
}
|
||||
|
||||
if ( code == clear_code )
|
||||
{
|
||||
code_length = reset_code_length;
|
||||
dictionary = ( dictionary_entry_t * ) realloc( dictionary,
|
||||
sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
|
||||
|
||||
for ( dictionary_ind = 0;
|
||||
dictionary_ind < ( 1 << code_length );
|
||||
dictionary_ind++ )
|
||||
{
|
||||
dictionary[ dictionary_ind ].byte = dictionary_ind;
|
||||
// XXX this only works because prev is a 32-bit int (> 12 bits)
|
||||
dictionary[ dictionary_ind ].prev = -1;
|
||||
dictionary[ dictionary_ind ].len = 1;
|
||||
}
|
||||
dictionary_ind++;
|
||||
dictionary_ind++;
|
||||
prev = -1;
|
||||
continue;
|
||||
}
|
||||
else if ( code == stop_code )
|
||||
{
|
||||
if ( input_length > 1 )
|
||||
{
|
||||
fprintf( stderr, "Malformed GIF (early stop code)\n" );
|
||||
exit( 0 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Update the dictionary with this character plus the _entry_
|
||||
// (character or string) that came before it
|
||||
if ( ( prev > -1 ) && ( code_length < 12 ) )
|
||||
{
|
||||
if ( code > dictionary_ind )
|
||||
{
|
||||
fprintf( stderr, "code = %.02x, but dictionary_ind = %.02x\n",
|
||||
code, dictionary_ind );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
// Special handling for KwKwK
|
||||
if ( code == dictionary_ind )
|
||||
{
|
||||
int ptr = prev;
|
||||
|
||||
while ( dictionary[ ptr ].prev != -1 )
|
||||
{
|
||||
ptr = dictionary[ ptr ].prev;
|
||||
}
|
||||
dictionary[ dictionary_ind ].byte = dictionary[ ptr ].byte;
|
||||
}
|
||||
else
|
||||
{
|
||||
int ptr = code;
|
||||
while ( dictionary[ ptr ].prev != -1 )
|
||||
{
|
||||
ptr = dictionary[ ptr ].prev;
|
||||
}
|
||||
dictionary[ dictionary_ind ].byte = dictionary[ ptr ].byte;
|
||||
}
|
||||
|
||||
dictionary[ dictionary_ind ].prev = prev;
|
||||
|
||||
dictionary[ dictionary_ind ].len = dictionary[ prev ].len + 1;
|
||||
|
||||
dictionary_ind++;
|
||||
|
||||
// GIF89a mandates that this stops at 12 bits
|
||||
if ( ( dictionary_ind == ( 1 << ( code_length + 1 ) ) ) &&
|
||||
( code_length < 11 ) )
|
||||
{
|
||||
code_length++;
|
||||
|
||||
dictionary = ( dictionary_entry_t * ) realloc( dictionary,
|
||||
sizeof( dictionary_entry_t ) * ( 1 << ( code_length + 1 ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
prev = code;
|
||||
|
||||
// Now copy the dictionary entry backwards into "out"
|
||||
match_len = dictionary[ code ].len;
|
||||
while ( code != -1 )
|
||||
{
|
||||
out[ dictionary[ code ].len - 1 ] = dictionary[ code ].byte;
|
||||
if ( dictionary[ code ].prev == code )
|
||||
{
|
||||
fprintf( stderr, "Internal error; self-reference." );
|
||||
exit( 0 );
|
||||
}
|
||||
code = dictionary[ code ].prev;
|
||||
}
|
||||
|
||||
out += match_len;
|
||||
}
|
||||
}
|
||||
|
||||
static int read_sub_blocks( FILE* gif_file, unsigned char **data )
|
||||
{
|
||||
int data_length;
|
||||
int index;
|
||||
unsigned char block_size;
|
||||
|
||||
// Everything following are data sub-blocks, until a 0-sized block is
|
||||
// encountered.
|
||||
data_length = 0;
|
||||
*data = NULL;
|
||||
index = 0;
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
if ( fread( &block_size, 1, 1, gif_file ) < 1 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( block_size == 0 ) // end of sub-blocks
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
data_length += block_size;
|
||||
*data = realloc( *data, data_length );
|
||||
|
||||
// TODO this could be split across block size boundaries
|
||||
if ( fread( *data + index, 1, block_size, gif_file ) <
|
||||
block_size )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return -1;
|
||||
}
|
||||
|
||||
index += block_size;
|
||||
}
|
||||
|
||||
return data_length;
|
||||
}
|
||||
|
||||
static int process_image_descriptor( FILE* gif_file,
|
||||
rgb *gct,
|
||||
int gct_size,
|
||||
int resolution_bits )
|
||||
{
|
||||
image_descriptor_t image_descriptor;
|
||||
int disposition;
|
||||
int compressed_data_length;
|
||||
unsigned char *compressed_data = NULL;
|
||||
unsigned char lzw_code_size;
|
||||
int uncompressed_data_length = 0;
|
||||
//unsigned char *uncompressed_data = NULL;
|
||||
|
||||
// TODO there could actually be lots of these
|
||||
if ( fread( &image_descriptor, 1, 9, gif_file ) < 9 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short)" );
|
||||
disposition = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
// TODO if LCT = true, read the LCT
|
||||
|
||||
disposition = 1;
|
||||
|
||||
if ( fread( &lzw_code_size, 1, 1, gif_file ) < 1 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
disposition = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
compressed_data_length = read_sub_blocks( gif_file, &compressed_data );
|
||||
|
||||
width = image_descriptor.image_width;
|
||||
height = image_descriptor.image_height;
|
||||
uncompressed_data_length = image_descriptor.image_width *
|
||||
image_descriptor.image_height;
|
||||
uncompressed_data = malloc( uncompressed_data_length );
|
||||
|
||||
uncompress( lzw_code_size, compressed_data, compressed_data_length,
|
||||
uncompressed_data );
|
||||
|
||||
done:
|
||||
if ( compressed_data )
|
||||
free( compressed_data );
|
||||
|
||||
//if ( uncompressed_data )
|
||||
// free( uncompressed_data );
|
||||
|
||||
return disposition;
|
||||
}
|
||||
|
||||
static int process_extension( FILE* gif_file )
|
||||
{
|
||||
extension_t extension;
|
||||
graphic_control_extension_t gce;
|
||||
application_extension_t application;
|
||||
plaintext_extension_t plaintext;
|
||||
unsigned char *extension_data = NULL;
|
||||
int extension_data_length;
|
||||
|
||||
if ( fread( &extension, 1, 2, gif_file ) < 2 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch ( extension.extension_code )
|
||||
{
|
||||
case GRAPHIC_CONTROL:
|
||||
if ( fread( &gce, 1, 4, gif_file ) < 4 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return 0;
|
||||
}
|
||||
|
||||
break;
|
||||
case APPLICATION_EXTENSION:
|
||||
if ( fread( &application, 1, 11, gif_file ) < 11 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case 0xFE:
|
||||
// comment extension; do nothing - all the data is in the
|
||||
// sub-blocks that follow.
|
||||
break;
|
||||
case 0x01:
|
||||
if ( fread( &plaintext, 1, 12, gif_file ) < 12 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short): " );
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fprintf( stderr, "Unrecognized extension code.\n" );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
// All extensions are followed by data sub-blocks; even if it's
|
||||
// just a single data sub-block of length 0
|
||||
extension_data_length = read_sub_blocks( gif_file, &extension_data );
|
||||
|
||||
if ( extension_data != NULL )
|
||||
free( extension_data );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param gif_file the file descriptor of a file containing a
|
||||
* GIF-encoded file. This should point to the first byte in
|
||||
* the file when invoked.
|
||||
*/
|
||||
static void process_gif_stream( FILE* gif_file )
|
||||
{
|
||||
unsigned char header[ 7 ];
|
||||
screen_descriptor_t screen_descriptor;
|
||||
int color_resolution_bits;
|
||||
|
||||
int global_color_table_size =0; // number of entries in global_color_table
|
||||
rgb *global_color_table = NULL;
|
||||
|
||||
unsigned char block_type = 0x0;
|
||||
|
||||
// A GIF file starts with a Header (section 17)
|
||||
if ( fread( header, 1, 6, gif_file ) != 6 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short)" );
|
||||
return;
|
||||
}
|
||||
header[ 6 ] = 0x0;
|
||||
|
||||
// XXX there's another format, GIF87a, that you may still find
|
||||
// floating around.
|
||||
if ( strcmp( "GIF89a", (char*)header ) )
|
||||
{
|
||||
fprintf( stderr,
|
||||
"Invalid GIF file (header is '%s', should be 'GIF89a')\n",
|
||||
header );
|
||||
return;
|
||||
}
|
||||
|
||||
// Followed by a logical screen descriptor
|
||||
// Note that this works because GIFs specify little-endian order; on a
|
||||
// big-endian machine, the height & width would need to be reversed.
|
||||
|
||||
// Can't use sizeof here since GCC does byte alignment;
|
||||
// sizeof( screen_descriptor_t ) = 8!
|
||||
if ( fread( &screen_descriptor, 1, 7, gif_file ) < 7 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short)" );
|
||||
return;
|
||||
}
|
||||
|
||||
color_resolution_bits = ( ( screen_descriptor.fields & 0x70 ) >> 4 ) + 1;
|
||||
|
||||
if ( screen_descriptor.fields & 0x80 )
|
||||
{
|
||||
//int i;
|
||||
// If bit 7 is set, the next block is a global color table; read it
|
||||
global_color_table_size = 1 <<
|
||||
( ( ( screen_descriptor.fields & 0x07 ) + 1 ) );
|
||||
|
||||
global_color_table = ( rgb * ) malloc( 3 * global_color_table_size );
|
||||
|
||||
// XXX this could conceivably return a short count...
|
||||
if ( fread( global_color_table, 1, 3 * global_color_table_size, gif_file ) <
|
||||
3 * global_color_table_size )
|
||||
{
|
||||
perror( "Unable to read global color table" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while ( block_type != TRAILER )
|
||||
{
|
||||
if ( fread( &block_type, 1, 1, gif_file ) < 1 )
|
||||
{
|
||||
perror( "Invalid GIF file (too short)" );
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( block_type )
|
||||
{
|
||||
case IMAGE_DESCRIPTOR:
|
||||
if ( !process_image_descriptor( gif_file,
|
||||
global_color_table,
|
||||
global_color_table_size,
|
||||
color_resolution_bits ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case EXTENSION_INTRODUCER:
|
||||
if ( !process_extension( gif_file ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case TRAILER:
|
||||
break;
|
||||
default:
|
||||
fprintf( stderr, "Bailing on unrecognized block type %.02x\n",
|
||||
block_type );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
FILE* gif_file;
|
||||
|
||||
if ( argc < 2 )
|
||||
{
|
||||
fprintf( stderr, "Usage: %s <path-to-gif-file>\n", argv[ 0 ] );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
gif_file = fopen( argv[ 1 ], "rb" );
|
||||
|
||||
if ( gif_file == NULL )
|
||||
{
|
||||
fprintf( stderr, "Unable to open file '%s'", argv[ 1 ] );
|
||||
perror( ": " );
|
||||
}
|
||||
|
||||
process_gif_stream( gif_file );
|
||||
|
||||
fclose( gif_file );
|
||||
}
|
||||
@@ -19,7 +19,7 @@ SDL_Window* sdlWindow = NULL;
|
||||
SDL_Renderer* sdlRenderer = NULL;
|
||||
SDL_Texture* sdlTexture = NULL;
|
||||
|
||||
void JD8_Init(char *title) {
|
||||
void JD8_Init(const char *title) {
|
||||
screen = (JD8_Surface)calloc( 1, 64000 );
|
||||
main_palette = (JD8_Palette)calloc( 1, 768 );
|
||||
pixel_data = (Uint32*)calloc(1, 320 * 200 * 4); // 1048576 );
|
||||
@@ -50,7 +50,7 @@ JD8_Surface JD8_NewSurface() {
|
||||
return surface;
|
||||
}
|
||||
|
||||
JD8_Surface JD8_LoadSurface(char *file) {
|
||||
JD8_Surface JD8_LoadSurface(const char *file) {
|
||||
int filesize = 0;
|
||||
char *buffer = JF_GetBufferFromResource(file, filesize);
|
||||
|
||||
@@ -71,7 +71,7 @@ JD8_Surface JD8_LoadSurface(char *file) {
|
||||
return image;
|
||||
}
|
||||
|
||||
JD8_Palette JD8_LoadPalette(char *file) {
|
||||
JD8_Palette JD8_LoadPalette(const char *file) {
|
||||
int filesize = 0;
|
||||
char *buffer = NULL;
|
||||
buffer = JF_GetBufferFromResource(file, filesize);
|
||||
|
||||
6
jdraw8.h
6
jdraw8.h
@@ -10,7 +10,7 @@ struct Color {
|
||||
typedef Uint8* JD8_Surface;
|
||||
typedef Color* JD8_Palette;
|
||||
|
||||
void JD8_Init(char *title);
|
||||
void JD8_Init(const char *title);
|
||||
|
||||
void JD8_Quit();
|
||||
|
||||
@@ -18,9 +18,9 @@ void JD8_ClearScreen(Uint8 color);
|
||||
|
||||
JD8_Surface JD8_NewSurface();
|
||||
|
||||
JD8_Surface JD8_LoadSurface(char *file);
|
||||
JD8_Surface JD8_LoadSurface(const char *file);
|
||||
|
||||
JD8_Palette JD8_LoadPalette(char *file);
|
||||
JD8_Palette JD8_LoadPalette(const char *file);
|
||||
|
||||
void JD8_SetScreenPalette(JD8_Palette palette);
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ struct DATA_File {
|
||||
const char *resourceFileName = "data.jrf";
|
||||
DATA_File *data_file = NULL;
|
||||
|
||||
void JF_SetResourceFile(char *p_resourceFileName) {
|
||||
void JF_SetResourceFile(const char *p_resourceFileName) {
|
||||
resourceFileName = p_resourceFileName;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ void JF_GetDataFile() {
|
||||
fd.close();
|
||||
}
|
||||
|
||||
char *JF_GetBufferFromResource(char *resourcename, int& filesize) {
|
||||
char *JF_GetBufferFromResource(const char *resourcename, int& filesize) {
|
||||
|
||||
if( data_file == NULL ) {
|
||||
JF_GetDataFile();
|
||||
|
||||
4
jfile.h
4
jfile.h
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
void JF_SetResourceFile(char *p_resourceFileName);
|
||||
void JF_SetResourceFile(const char *p_resourceFileName);
|
||||
|
||||
char *JF_GetBufferFromResource(char *resourcename, int& filesize);
|
||||
char *JF_GetBufferFromResource(const char *resourcename, int& filesize);
|
||||
|
||||
void JF_Quit();
|
||||
11
jgame.h
11
jgame.h
@@ -1,17 +1,6 @@
|
||||
#pragma once
|
||||
#include "SDL.h"
|
||||
|
||||
#ifndef NDEBUG
|
||||
#ifndef DPRINT(text, ...)
|
||||
#define DPRINT(text, ...) dprintf(__FILE__, __LINE__, text, __VA_ARGS__)
|
||||
void dprintf(const char* szFile, long lLine, const char* fmt, ...);
|
||||
#endif
|
||||
#else // #ifdef NDEBUG
|
||||
#ifndef DPRINT(text, ...)
|
||||
#define DPRINT(text, ...) ((void)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void JG_Init();
|
||||
|
||||
void JG_Finalize();
|
||||
|
||||
8
main.cpp
8
main.cpp
@@ -18,12 +18,16 @@ int main( int argc, char* args[] ) {
|
||||
#else
|
||||
char res_file[255] = "";
|
||||
strcpy(res_file, dirname(args[0]));
|
||||
strcat(res_file, "/data.jrf");
|
||||
#ifdef __APPLE__
|
||||
strcat(res_file, "/../Resources/data.jrf");
|
||||
#else
|
||||
strcat(res_file, "/data.jrf");
|
||||
#endif
|
||||
printf("ARXIU DE RECURSOS: %s\n", res_file);
|
||||
JF_SetResourceFile(res_file);
|
||||
#endif
|
||||
|
||||
srand( time(NULL) );
|
||||
srand( unsigned(time(NULL)) );
|
||||
|
||||
JG_Init();
|
||||
JD8_Init("Aventures En Egipte");
|
||||
|
||||
@@ -63,6 +63,7 @@ int ModuleSequence::Go() {
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const int minim( const int a, const int b ) {
|
||||
@@ -619,7 +620,7 @@ void ModuleSequence::doMenu() {
|
||||
void ModuleSequence::doSlides() {
|
||||
JG_SetUpdateTicks(20);
|
||||
|
||||
char* arxiu;
|
||||
const char* arxiu;
|
||||
if( this->info->num_piramide == 7 ) {
|
||||
if( this->info->diners < 200 ) {
|
||||
arxiu = "intro2.gif";
|
||||
|
||||
Reference in New Issue
Block a user