34#import "MyOpenGLView.h" 
   63@interface ResourceManager (OOPrivate)
 
   65+ (void) checkOXPMessagesInPath:(NSString *)path;
 
   66+ (void) checkPotentialPath:(NSString *)path :(NSMutableArray *)searchPaths;
 
   67+ (BOOL) validateManifest:(NSDictionary*)manifest forOXP:(NSString *)path;
 
   68+ (BOOL) areRequirementsFulfilled:(NSDictionary*)requirements forOXP:(NSString *)path andFile:(NSString *)file;
 
   69+ (void) filterSearchPathsForConflicts:(NSMutableArray *)searchPaths;
 
   70+ (BOOL) filterSearchPathsForRequirements:(NSMutableArray *)searchPaths;
 
   71+ (void) filterSearchPathsToExcludeScenarioOnlyPaths:(NSMutableArray *)searchPaths;
 
   72+ (void) filterSearchPathsByScenario:(NSMutableArray *)searchPaths;
 
   73+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest;
 
   74+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withIdentifier:(NSString *)identifier;
 
   75+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withTag:(NSString *)tag;
 
   77+ (void) addErrorWithKey:(NSString *)descriptionKey param1:(
id)param1 param2:(
id)param2;
 
   78+ (BOOL) checkCacheUpToDateForPaths:(NSArray *)searchPaths;
 
   80+ (void) mergeRoleCategories:(NSDictionary *)catData intoDictionary:(NSMutableDictionary *)category;
 
   82+ (void) preloadFileListFromOXZ:(NSString *)path forFolders:(NSArray *)folders;
 
   83+ (void) preloadFileListFromFolder:(NSString *)path forFolders:(NSArray *)folders;
 
   84+ (void) preloadFilePathFor:(NSString *)fileName inFolder:(NSString *)subFolder atPath:(NSString *)path;
 
  135    NSArray                 *error = 
nil;
 
  137    NSMutableArray          *result = 
nil;
 
  138    NSString                *errStr = 
nil;
 
  140    count = [sErrors count];
 
  145    for (i = 0; i != 
count; ++i)
 
  147        error = [sErrors objectAtIndex:i];
 
  148        errStr = [UNIVERSE descriptionForKey:[
error oo_stringAtIndex:0]];
 
  151            errStr = [
NSString stringWithFormat:errStr, [
error objectAtIndex:1], [
error objectAtIndex:2]];
 
  152            [
result addObject:errStr];
 
  159    return [
result componentsJoinedByString:@"\n"];
 
 
  165    static NSArray *sRootPaths = 
nil;
 
  166    if (sRootPaths == 
nil) {
 
 
  178    static NSArray          *sUserRootPaths = 
nil;
 
  180    if (sUserRootPaths == 
nil)
 
  184        sUserRootPaths = [[
NSArray alloc] initWithObjects:
 
  188                         stringByAppendingPathComponent:@"Application Support"]
 
  189                         stringByAppendingPathComponent:@"Oolite"]
 
  190                        stringByAppendingPathComponent:@"AddOns"],
 
  191                      [[[[
NSBundle mainBundle] bundlePath]
 
  192                         stringByDeletingLastPathComponent]
 
  193                        stringByAppendingPathComponent:@"AddOns"],
 
  203                        stringByAppendingPathComponent:@".Oolite"]
 
  204                       stringByAppendingPathComponent:@"AddOns"],
 
  209    OOLog(
@"searchPaths.debug",
@"%@",sUserRootPaths);
 
  210    return sUserRootPaths;
 
 
  222    return [[
NSBundle mainBundle] resourcePath];
 
 
  234        sUseAddOnsParts = [[sUseAddOns componentsSeparatedByString:@";"] retain];
 
  249    NSMutableArray          *existingRootPaths = 
nil;
 
  250    NSEnumerator            *pathEnum = 
nil;
 
  251    NSString                *root = 
nil;
 
  252    NSDirectoryEnumerator   *dirEnum = 
nil;
 
  253    NSString                *subPath = 
nil;
 
  254    NSString                *path = 
nil;
 
  259    existingRootPaths = [
NSMutableArray arrayWithCapacity:[rootPaths count]];
 
  262        if ([fmgr fileExistsAtPath:root isDirectory:&isDirectory] && isDirectory)
 
  271    foreach(path, existingRootPaths)
 
  277    for (pathEnum = [existingRootPaths objectEnumerator]; (root = [
pathEnum nextObject]); )
 
  280        if ([fmgr fileExistsAtPath:root isDirectory:&isDirectory] && isDirectory)
 
  282            for (dirEnum = [fmgr enumeratorAtPath:root]; (subPath = [
dirEnum nextObject]); )
 
  285                path = [
root stringByAppendingPathComponent:subPath];
 
  286                if ([fmgr fileExistsAtPath:path isDirectory:&isDirectory])
 
  291                        if ([[[path pathExtension] lowercaseString] isEqualToString:
@"oxp"])
 
  305                        if ([[[path pathExtension] lowercaseString] isEqualToString:
@"oxz"])
 
  348    while (![
self filterSearchPathsForRequirements:
sSearchPaths]) {}
 
 
  366    NSString         *path = 
nil;
 
  367    NSEnumerator *pathEnum = 
nil;
 
  370    NSArray *folders = [
NSArray arrayWithObjects:@"AIs",@"Images",@"Models",@"Music",@"Scenarios",@"Scripts",@"Shaders",@"Sounds",@"Textures",nil];
 
  374        if ([path hasSuffix:
@".oxz"])
 
 
  386+ (void) preloadFileListFromOXZ:(NSString *)path forFolders:(NSArray *)folders
 
  389    const char* zipname = [
path UTF8String];
 
  390    char componentName[512];
 
  398        OOLog(
@"resourceManager.error",
@"Could not open .oxz at %@ as zip file",path);
 
  409            NSString *zipEntry = [
NSString stringWithUTF8String:componentName];
 
  410            NSArray *pathBits = [
zipEntry pathComponents];
 
  411            if ([pathBits 
count] >= 2)
 
  413                NSString *folder = [
pathBits oo_stringAtIndex:0];
 
  414                if ([folders containsObject:folder])
 
  417                    bitRange.location = 1;
 
  418                    bitRange.length = [
pathBits count]-1;
 
  419                    NSString *file = [
NSString pathWithComponents:[
pathBits subarrayWithRange:bitRange]];
 
  420                    NSString *fullPath = [[
path stringByAppendingPathComponent:folder] stringByAppendingPathComponent:file];
 
   386+ (void) preloadFileListFromOXZ:(NSString *)path forFolders:(NSArray *)folders {
…}
  
  434+ (void) preloadFileListFromFolder:(NSString *)path forFolders:(NSArray *)folders
 
  437    NSString *subFolder         = 
nil;
 
  438    NSString *subFolderPath     = 
nil;
 
  439    NSArray *fileList           = 
nil;
 
  440    NSString *fileName          = 
nil;
 
  443    foreach (subFolder, folders)
 
  445        subFolderPath = [
path stringByAppendingPathComponent:subFolder];
 
  446        fileList = [
fmgr oo_directoryContentsAtPath:subFolderPath];
 
  447        foreach (fileName, fileList)
 
   434+ (void) preloadFileListFromFolder:(NSString *)path forFolders:(NSArray *)folders {
…}
  
  456+ (void) preloadFilePathFor:(NSString *)fileName inFolder:(NSString *)subFolder atPath:(NSString *)path
 
  459    NSString *cacheKey = [
NSString stringWithFormat:@"%@/%@", subFolder, fileName];
 
  464        OOLog(
@"resourceManager.foundFile.preLoad", 
@"Found %@/%@ at %@", subFolder, fileName, path);
 
   456+ (void) preloadFilePathFor:(NSString *)fileName inFolder:(NSString *)subFolder atPath:(NSString *)path {
…}
  
  487+ (void)setUseAddOns:(NSString *)useAddOns
 
  496        sUseAddOnsParts = [[sUseAddOns componentsSeparatedByString:@";"] retain];
 
   487+ (void)setUseAddOns:(NSString *)useAddOns {
…}
  
  527+ (void) addExternalPath:(NSString *)path
 
  532        [sSearchPaths addObject:path];
 
  535        [sExternalPaths addObject:path];
 
   527+ (void) addExternalPath:(NSString *)path {
…}
  
  542    return [[
self paths] objectEnumerator];
 
 
  548    return [[
self paths] reverseObjectEnumerator];
 
 
  554    return [[sOXPsWithMessagesFound copy] autorelease];
 
 
  558+ (NSDictionary *)manifestForIdentifier:(NSString *)identifier
 
  560    return [sOXPManifests objectForKey:identifier];
 
   558+ (NSDictionary *)manifestForIdentifier:(NSString *)identifier {
…}
  
  564+ (void) checkOXPMessagesInPath:(NSString *)path
 
  566    NSArray *OXPMessageArray = 
OOArrayFromFile([path stringByAppendingPathComponent:
@"OXPMessages.plist"]);
 
  568    if ([OXPMessageArray 
count] > 0)
 
  576                OOLog(
@"oxp.message", 
@"%@: %@", path, oxpMessage);
 
  580        [sOXPsWithMessagesFound addObject:[
path lastPathComponent]];
 
   564+ (void) checkOXPMessagesInPath:(NSString *)path {
…}
  
  586+ (void)checkPotentialPath:(NSString *)path :(NSMutableArray *)searchPaths
 
  588    NSDictionary            *requirements = 
nil;
 
  589    NSDictionary            *manifest = 
nil;
 
  590    BOOL                    requirementsMet = YES;
 
  592    if (![[[path pathExtension] lowercaseString] isEqualToString:
@"oxz"])
 
  598    if (!requirementsMet)
 
  600        NSString *version = [[[
NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
 
  601        OOLog(
@"oxp.versionMismatch", 
@"OXP %@ is incompatible with version %@ of Oolite.", path, version);
 
  609        if ([[[path pathExtension] lowercaseString] isEqualToString:
@"oxz"])
 
  611            OOLog(
@"oxp.noManifest", 
@"OXZ %@ has no manifest.plist", path);
 
  617            if ([[[path pathExtension] lowercaseString] isEqualToString:
@"oxp"])
 
  619                OOStandardsError([NSString stringWithFormat:
@"OXP %@ has no manifest.plist", path]);
 
  627            manifest = [
NSDictionary dictionaryWithObjectsAndKeys:[
NSString stringWithFormat:@"__oolite.tmp.%@",path],kOOManifestIdentifier,@"1",kOOManifestVersion,@"OXP without manifest",kOOManifestTitle,@"1",kOOManifestRequiredOoliteVersion,nil];
 
   586+ (void)checkPotentialPath:(NSString *)path :(NSMutableArray *)searchPaths {
…}
  
  641+ (BOOL) validateManifest:(NSDictionary*)manifest forOXP:(NSString *)path
 
  649    NSString    *identifier = [
manifest oo_stringForKey:kOOManifestIdentifier defaultValue:nil];
 
  650    NSString    *version = [
manifest oo_stringForKey:kOOManifestVersion defaultValue:nil];
 
  651    NSString    *required = [
manifest oo_stringForKey:kOOManifestRequiredOoliteVersion defaultValue:nil];
 
  652    NSString    *title = [
manifest oo_stringForKey:kOOManifestTitle defaultValue:nil];
 
  654    if (identifier == 
nil)
 
  686        NSString *version = [[[
NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
 
  687        OOLog(
@"oxp.versionMismatch", 
@"OXP %@ is incompatible with version %@ of Oolite.", path, version);
 
  692    NSDictionary *duplicate = [sOXPManifests objectForKey:identifier];
 
  693    if (duplicate != 
nil)
 
  695        OOLog(
@"oxp.duplicate", 
@"OXP %@ has the same identifier (%@) as %@ which has already been loaded.",path,identifier,[duplicate oo_stringForKey:
kOOManifestFilePath]);
 
  700    [
mData setObject:path forKey:kOOManifestFilePath];
 
  702    [sOXPManifests setObject:mData forKey:identifier];
 
   641+ (BOOL) validateManifest:(NSDictionary*)manifest forOXP:(NSString *)path {
…}
  
  707+ (BOOL) checkVersionCompatibility:(NSDictionary *)manifest forOXP:(NSString *)title
 
  709    NSString    *required = [
manifest oo_stringForKey:kOOManifestRequiredOoliteVersion defaultValue:nil];
 
  710    NSString *maxRequired = [
manifest oo_stringForKey:kOOManifestMaximumOoliteVersion defaultValue:nil];
 
  712    if (maxRequired == 
nil || [maxRequired length] == 0)
 
   707+ (BOOL) checkVersionCompatibility:(NSDictionary *)manifest forOXP:(NSString *)title {
…}
  
  723+ (BOOL) areRequirementsFulfilled:(NSDictionary*)requirements forOXP:(NSString *)path andFile:(NSString *)file
 
  726    NSString            *requiredVersion = 
nil;
 
  727    NSString            *maxVersion = 
nil;
 
  728    unsigned            conditionsHandled = 0;
 
  729    static NSArray      *ooVersionComponents = 
nil;
 
  730    NSArray             *oxpVersionComponents = 
nil;
 
  732    if (requirements == 
nil)  
return YES;
 
  734    if (ooVersionComponents == 
nil)
 
  744        requiredVersion = [
requirements objectForKey:@"version"];
 
  745        if (requiredVersion != 
nil)
 
  748            if ([requiredVersion isKindOfClass:[NSString 
class]])
 
  751                if (NSOrderedAscending == 
CompareVersions(ooVersionComponents, oxpVersionComponents))  OK = NO;
 
  755                OOLog(
@"requirements.wrongType", 
@"Expected %@ entry \"%@\
" to be string, but got %@ in OXP %@.", file, 
@"version", [requirements 
class], [path lastPathComponent]);
 
  765        maxVersion = [
requirements objectForKey:@"max_version"];
 
  766        if (maxVersion != 
nil)
 
  769            if ([maxVersion isKindOfClass:[NSString 
class]])
 
  772                if (NSOrderedDescending == 
CompareVersions(ooVersionComponents, oxpVersionComponents))  OK = NO;
 
  776                OOLog(
@"requirements.wrongType", 
@"Expected %@ entry \"%@\
" to be string, but got %@ in OXP %@.", file, 
@"max_version", [requirements 
class], [path lastPathComponent]);
 
  782    if (OK && conditionsHandled < [requirements 
count])
 
  785        OOLog(
@"requirements.unknown", 
@"requires.plist for OXP %@ contains unknown keys, rejecting.", [path lastPathComponent]);
 
   723+ (BOOL) areRequirementsFulfilled:(NSDictionary*)requirements forOXP:(NSString *)path andFile:(NSString *)file {
…}
  
  793+ (BOOL) manifestHasConflicts:(NSDictionary *)manifest logErrors:(BOOL)logErrors
 
  795    NSDictionary    *conflicting = 
nil;
 
  796    NSDictionary    *conflictManifest = 
nil;
 
  797    NSString        *conflictID = 
nil;
 
  798    NSArray         *conflicts = 
nil;
 
  800    conflicts = [
manifest oo_arrayForKey:kOOManifestConflictOXPs defaultValue:nil];
 
  802    if (conflicts != 
nil && [conflicts 
count] > 0)
 
  805        foreach (conflicting, conflicts)
 
  807            conflictID = [
conflicting oo_stringForKey:kOOManifestRelationIdentifier];
 
  808            conflictManifest = [sOXPManifests objectForKey:conflictID];
 
  810            if (conflictManifest != 
nil)
 
  813                if ([
self matchVersions:conflicting withVersion:[conflictManifest oo_stringForKey:
kOOManifestVersion]])
 
  818                        OOLog(
@"oxp.conflict",
@"OXP %@ conflicts with %@ and was removed from the loading list",[[manifest oo_stringForKey:
kOOManifestFilePath] lastPathComponent],[[conflictManifest oo_stringForKey:
kOOManifestFilePath] lastPathComponent]);
 
   793+ (BOOL) manifestHasConflicts:(NSDictionary *)manifest logErrors:(BOOL)logErrors {
…}
  
  829+ (void) filterSearchPathsForConflicts:(NSMutableArray *)searchPaths
 
  831    NSDictionary    *manifest = 
nil;
 
  832    NSString        *identifier = 
nil;
 
  833    NSArray         *identifiers = [sOXPManifests allKeys];
 
  837    foreach (identifier, identifiers)
 
  839        manifest = [sOXPManifests objectForKey:identifier];
 
  842            if ([
self manifestHasConflicts:manifest logErrors:YES])
 
  846                [sOXPManifests removeObjectForKey:identifier];
 
   829+ (void) filterSearchPathsForConflicts:(NSMutableArray *)searchPaths {
…}
  
  853+ (BOOL) manifestHasMissingDependencies:(NSDictionary *)manifest logErrors:(BOOL)logErrors
 
  855    NSDictionary    *required = 
nil;
 
  856    NSArray         *requireds = 
nil;
 
  858    requireds = [
manifest oo_arrayForKey:kOOManifestRequiresOXPs defaultValue:nil];
 
  860    if (requireds != 
nil && [requireds 
count] > 0)
 
  863        foreach (required, requireds)
 
  865            if ([
ResourceManager manifest:manifest HasUnmetDependency:required logErrors:logErrors])
 
   853+ (BOOL) manifestHasMissingDependencies:(NSDictionary *)manifest logErrors:(BOOL)logErrors {
…}
  
  875+ (BOOL) manifest:(NSDictionary *)manifest HasUnmetDependency:(NSDictionary *)required logErrors:(BOOL)logErrors
 
  877    NSString        *requiredID = [
required oo_stringForKey:kOOManifestRelationIdentifier];
 
  878    NSMutableDictionary *requiredManifest = [sOXPManifests objectForKey:requiredID];
 
  880    BOOL requirementsMet = NO;
 
  881    if (requiredManifest != 
nil)
 
  884        if ([
self matchVersions:required withVersion:[requiredManifest oo_stringForKey:
kOOManifestVersion]])
 
  886            requirementsMet = YES;
 
  890            NSUInteger reqbycount = [
reqby count];
 
  894            reqby = [
reqby setByAddingObject:[
manifest oo_stringForKey:kOOManifestIdentifier]];
 
  896            reqby = [
reqby setByAddingObjectsFromSet:[
manifest oo_setForKey:kOOManifestRequiredBy]];
 
  897            if (reqbycount < [reqby 
count])
 
  909    if (!requirementsMet)
 
  914            OOLog(
@"oxp.requirementMissing",
@"OXP %@ had unmet requirements and was removed from the loading list",[[manifest oo_stringForKey:
kOOManifestFilePath] lastPathComponent]);
 
   875+ (BOOL) manifest:(NSDictionary *)manifest HasUnmetDependency:(NSDictionary *)required logErrors:(BOOL)logErrors {
…}
  
  922+ (BOOL) filterSearchPathsForRequirements:(NSMutableArray *)searchPaths
 
  924    NSDictionary    *manifest = 
nil;
 
  925    NSString        *identifier = 
nil;
 
  926    NSArray         *identifiers = [sOXPManifests allKeys];
 
  932    foreach (identifier, identifiers)
 
  934        manifest = [sOXPManifests objectForKey:identifier];
 
  937            if ([
self manifestHasMissingDependencies:manifest logErrors:YES])
 
  941                [sOXPManifests removeObjectForKey:identifier];
 
   922+ (BOOL) filterSearchPathsForRequirements:(NSMutableArray *)searchPaths {
…}
  
  951+ (BOOL) matchVersions:(NSDictionary *)rangeDict withVersion:(NSString *)version
 
  953    NSString    *minimum = [
rangeDict oo_stringForKey:kOOManifestRelationVersion defaultValue:nil];
 
  954    NSString    *maximum = [
rangeDict oo_stringForKey:kOOManifestRelationMaxVersion defaultValue:nil];
 
  956    NSArray     *reqVersionComponents = 
nil;
 
  960        if (NSOrderedAscending == 
CompareVersions(isVersionComponents, reqVersionComponents))
 
  969        if (NSOrderedDescending == 
CompareVersions(isVersionComponents, reqVersionComponents))
 
   951+ (BOOL) matchVersions:(NSDictionary *)rangeDict withVersion:(NSString *)version {
…}
  
  980+ (void) filterSearchPathsToExcludeScenarioOnlyPaths:(NSMutableArray *)searchPaths
 
  982    NSDictionary    *manifest = 
nil;
 
  983    NSString        *identifier = 
nil;
 
  984    NSArray         *identifiers = [sOXPManifests allKeys];
 
  988    foreach (identifier, identifiers)
 
  990        manifest = [sOXPManifests objectForKey:identifier];
 
  996                [sOXPManifests removeObjectForKey:identifier];
 
   980+ (void) filterSearchPathsToExcludeScenarioOnlyPaths:(NSMutableArray *)searchPaths {
…}
  
 1004+ (void) filterSearchPathsByScenario:(NSMutableArray *)searchPaths
 
 1006    NSDictionary    *manifest = 
nil;
 
 1007    NSString        *identifier = 
nil;
 
 1008    NSArray         *identifiers = [sOXPManifests allKeys];
 
 1012    foreach (identifier, identifiers)
 
 1014        manifest = [sOXPManifests objectForKey:identifier];
 
 1015        if (manifest != 
nil)
 
 1021                [sOXPManifests removeObjectForKey:identifier];
 
  1004+ (void) filterSearchPathsByScenario:(NSMutableArray *)searchPaths {
…}
  
 1028+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest
 
 1035        OOLog(
@"scenario.check", 
@"%@", 
@"Checked scenario allowances in all state - this is an internal error; please report this");
 
 1040        OOLog(
@"scenario.check", 
@"%@", 
@"Checked scenario allowances in none state - this is an internal error; please report this");
 
 1050    NSString *uaoBit = 
nil;
 
  1028+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest {
…}
  
 1067+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withIdentifier:(NSString *)identifier
 
  1067+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withIdentifier:(NSString *)identifier {
…}
  
 1085+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withTag:(NSString *)tag
 
 1094    NSSet *reqby = [
manifest oo_setForKey:kOOManifestRequiredBy];
 
 1097        NSString *identifier = 
nil;
 
 1098        foreach (identifier, reqby)
 
 1100            NSDictionary *reqManifest = [sOXPManifests oo_dictionaryForKey:identifier defaultValue:nil];
 
 1102            if (reqManifest != 
nil && [[reqManifest oo_arrayForKey:
kOOManifestTags] containsObject:tag])
 
  1085+ (BOOL) manifestAllowedByScenario:(NSDictionary *)manifest withTag:(NSString *)tag {
…}
  
 1114+ (void) addErrorWithKey:(NSString *)descriptionKey param1:(
id)param1 param2:(
id)param2
 
 1116    if (descriptionKey != 
nil)
 
 1119        [sErrors addObject:[
NSArray arrayWithObjects:descriptionKey, param1 ?: (id)@"", param2 ?: (id)@"", nil]];
 
  1114+ (void) addErrorWithKey:(NSString *)descriptionKey param1:(
id)param1 param2:(
id)param2 {
…}
  
 1124+ (BOOL)checkCacheUpToDateForPaths:(NSArray *)searchPaths
 
 1134    BOOL                upToDate = YES;
 
 1136    NSMutableArray      *modDates = 
nil;
 
 1137    NSEnumerator        *pathEnum = 
nil;
 
 1138    NSString            *path = 
nil;
 
 1141    if (
EXPECT_NOT([[NSUserDefaults standardUserDefaults] boolForKey:
@"always-flush-cache"]))
 
 1153    if (upToDate && ![oldPaths isEqual:searchPaths])
 
 1163    for (pathEnum = [searchPaths objectEnumerator]; (path = [
pathEnum nextObject]); )
 
 1165        modDate = [[
fmgr oo_fileAttributesAtPath:path traverseLink:YES] objectForKey:NSFileModificationDate];
 
 1169            modDate = [
NSNumber numberWithDouble:[
modDate timeIntervalSince1970]];
 
  1124+ (BOOL)checkCacheUpToDateForPaths:(NSArray *)searchPaths {
…}
  
 1200+ (BOOL) corePlist:(NSString *)fileName excludedAt:(NSString *)path
 
 1207    NSString *uaoBit = 
nil;
 
 1212            NSString *plist = [
uaoBit substringFromIndex:[SCENARIO_OXP_DEFINITION_NOPLIST length]];
 
 1213            if ([plist isEqualToString:fileName])
 
  1200+ (BOOL) corePlist:(NSString *)fileName excludedAt:(NSString *)path {
…}
  
 1225+ (NSDictionary *)dictionaryFromFilesNamed:(NSString *)fileName
 
 1226                                  inFolder:(NSString *)folderName
 
 1227                                  andMerge:(BOOL) mergeFiles
 
 1229    return [
ResourceManager dictionaryFromFilesNamed:fileName inFolder:folderName mergeMode:mergeFiles ? MERGE_BASIC : MERGE_NONE cache:YES];
 
  1225+ (NSDictionary *)dictionaryFromFilesNamed:(NSString *)fileName {
…}
  
 1233+ (NSDictionary *)dictionaryFromFilesNamed:(NSString *)fileName
 
 1234                                  inFolder:(NSString *)folderName
 
 1239    NSMutableArray  *results = 
nil;
 
 1240    NSString        *cacheKey = 
nil;
 
 1241    NSString        *mergeType = 
nil;
 
 1243    NSEnumerator    *enumerator = 
nil;
 
 1244    NSString        *path = 
nil;
 
 1245    NSString        *dictPath = 
nil;
 
 1246    NSDictionary    *dict = 
nil;
 
 1248    if (fileName == 
nil)  
return nil;
 
 1253            mergeType = 
@"none";
 
 1257            mergeType = 
@"basic";
 
 1261            mergeType = 
@"smart";
 
 1264    if (mergeType == 
nil)
 
 1266        OOLog(
kOOLogParameterError, 
@"Unknown dictionary merge mode %u for %@. (This is an internal programming error, please report it.)", mergeMode, fileName);
 
 1273        if (folderName != 
nil)
 
 1275            cacheKey = [
NSString stringWithFormat:@"%@/%@ merge:%@", folderName, fileName, mergeType];
 
 1279            cacheKey = [
NSString stringWithFormat:@"%@ merge:%@", fileName, mergeType];
 
 1282        if (result != 
nil)  
return result;
 
 1290            if (folderName != 
nil)
 
 1292                dictPath = [[
path stringByAppendingPathComponent:folderName] stringByAppendingPathComponent:fileName];
 
 1294                if (dict != 
nil)  
break;
 
 1296            dictPath = [
path stringByAppendingPathComponent:fileName];
 
 1298            if (dict != 
nil)  
break;
 
 1312            dictPath = [
path stringByAppendingPathComponent:fileName];
 
 1315            if (folderName != 
nil)
 
 1317                dictPath = [[
path stringByAppendingPathComponent:folderName] stringByAppendingPathComponent:fileName];
 
 1323        if ([results 
count] == 0)  
return nil;
 
 1328        for (enumerator = [results objectEnumerator]; (dict = [
enumerator nextObject]); )
 
 1331            else  [
result addEntriesFromDictionary:dict];
 
 1333        result = [[
result copy] autorelease]; 
 
  1233+ (NSDictionary *)dictionaryFromFilesNamed:(NSString *)fileName {
…}
  
 1342+ (NSArray *) arrayFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName andMerge:(BOOL) mergeFiles
 
  1342+ (NSArray *) arrayFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName andMerge:(BOOL) mergeFiles {
…}
  
 1348+ (NSArray *) arrayFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName andMerge:(BOOL) mergeFiles cache:(BOOL)useCache
 
 1351    NSMutableArray  *results = 
nil;
 
 1352    NSString        *cacheKey = 
nil;
 
 1354    NSEnumerator    *enumerator = 
nil;
 
 1355    NSString        *path = 
nil;
 
 1356    NSString        *arrayPath = 
nil;
 
 1357    NSMutableArray  *array = 
nil;
 
 1358    NSArray         *arrayNonEditable = 
nil;
 
 1360    if (fileName == 
nil)  
return nil;
 
 1364        cacheKey = [
NSString stringWithFormat:@"%@%@ merge:%@", (folderName != nil) ? [
folderName stringByAppendingString:@"/"] : (NSString *)@"", fileName, mergeFiles ? @"yes" : @"no"];
 
 1366        if (result != 
nil)  
return result;
 
 1374            if (folderName != 
nil)
 
 1376                arrayPath = [[
path stringByAppendingPathComponent:folderName] stringByAppendingPathComponent:fileName];
 
 1378                if (arrayNonEditable != 
nil)  
break;
 
 1380            arrayPath = [
path stringByAppendingPathComponent:fileName];
 
 1382            if (arrayNonEditable != 
nil)  
break;
 
 1384        result = arrayNonEditable;
 
 1397            arrayPath = [
path stringByAppendingPathComponent:fileName];
 
 1398            array = [[OOArrayFromFile(arrayPath) mutableCopy] autorelease];
 
 1407            if ([array 
count] != 0 && ([[fileName lowercaseString] isEqualToString:
@"nebulatextures.plist"] || 
 
 1408                [[fileName lowercaseString] isEqualToString:
@"startextures.plist"]))
 
 1411            if ([array 
count] != 0 && [[array objectAtIndex:0] isKindOfClass:[NSArray 
class]])
 
 1413                if ([[fileName lowercaseString] isEqualToString:
@"equipment.plist"])
 
 1416            if (folderName != 
nil)
 
 1418                arrayPath = [[
path stringByAppendingPathComponent:folderName] stringByAppendingPathComponent:fileName];
 
 1419                array = [[OOArrayFromFile(arrayPath) mutableCopy] autorelease];
 
 1422                if ([array 
count] != 0 && ([[fileName lowercaseString] isEqualToString:
@"nebulatextures.plist"] || 
 
 1423                    [[fileName lowercaseString] isEqualToString:
@"startextures.plist"]))
 
 1426                if ([array 
count] != 0 && [[array objectAtIndex:0] isKindOfClass:[NSArray 
class]])
 
 1428                    if ([[fileName lowercaseString] isEqualToString:
@"equipment.plist"])
 
 1434        if ([results 
count] == 0)  
return nil;
 
 1439        for (enumerator = [results objectEnumerator]; (array = [
enumerator nextObject]); )
 
 1441            [
result addObjectsFromArray:array];
 
 1444        if ([[fileName lowercaseString] isEqualToString:
@"equipment.plist"]) 
 
 1448        result = [[
result copy] autorelease]; 
 
 1453    return [
NSArray arrayWithArray:result];
 
  1348+ (NSArray *) arrayFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName andMerge:(BOOL) mergeFiles cache:(BOOL)useCache {
…}
  
 1460+ (void) handleEquipmentListMerging: (NSMutableArray *)arrayToProcess forLookupIndex:(
unsigned)lookupIndex
 
 1467    for (i = 0; i < [
refArray count]; i++)
 
 1472            if (
count == 0)  
continue;
 
 1474            for (k=0; k < 
count; k++)
 
 1476                id processValue = [[[
arrayToProcess oo_arrayAtIndex:j] oo_arrayAtIndex:k] oo_objectAtIndex:lookupIndex defaultValue:nil];
 
 1477                id refValue = [[
refArray oo_arrayAtIndex:i] oo_objectAtIndex:lookupIndex defaultValue:nil];
 
 1479                if ([processValue isEqual:refValue])
 
  1460+ (void) handleEquipmentListMerging: (NSMutableArray *)arrayToProcess forLookupIndex:(
unsigned)lookupIndex {
…}
  
 1495+ (void) handleEquipmentOverrides: (NSMutableArray *)arrayToProcess
 
 1497    NSEnumerator            *equipKeyEnum = 
nil;
 
 1498    NSString                *equipKey = 
nil;
 
 1499    NSDictionary            *overrides = 
nil;
 
 1500    NSDictionary            *overridesEntry = 
nil;
 
 1509    for (equipKeyEnum = [overrides keyEnumerator]; (equipKey = [
equipKeyEnum nextObject]); )
 
 1511        overridesEntry = [
overrides objectForKey:equipKey];
 
 1515            NSMutableArray  *equipArray = [[[
arrayToProcess objectAtIndex:i] mutableCopy] autorelease];
 
 1516            id refValue = [
equipArray oo_objectAtIndex:EQUIPMENT_KEY_INDEX defaultValue:nil];
 
 1518            if ([equipKey isEqual:refValue])
 
 1520                NSEnumerator            *infoKeyEnum = 
nil;
 
 1523                for (infoKeyEnum = [overridesEntry keyEnumerator]; (infoKey = [
infoKeyEnum nextObject]); )
 
 1526                    if ([infoKey isEqualToString:
@"techlevel"]) 
 
 1528                    else if ([infoKey isEqualToString:
@"price"]) 
 
 1530                    else if ([infoKey isEqualToString:
@"short_description"]) 
 
 1532                    else if ([infoKey isEqualToString:
@"name"]) 
 
 1534                    else if ([infoKey isEqualToString:
@"long_description"]) 
 
 1536                    else if ([infoKey isEqualToString:
@"description"]) 
 
 1540                        NSMutableDictionary     *extra = 
nil;
 
 1550                            extra = [[
equipArray oo_dictionaryAtIndex:EQUIPMENT_EXTRA_INFO_INDEX] mutableCopy];
 
 1553                        if ([infoKey isEqualToString:
@"weapon_info"] || [infoKey isEqualToString:
@"script_info"])
 
 1555                            NSEnumerator            *subEnum = 
nil;
 
 1557                            NSMutableDictionary     *subInfo = 
nil;
 
 1558                            NSDictionary            *subOverrides = 
nil;
 
 1560                            if (![extra oo_dictionaryForKey:infoKey]) 
 
 1567                                subInfo = [[
extra oo_dictionaryForKey:infoKey] mutableCopy];
 
 1571                            for (subEnum = [subOverrides keyEnumerator]; (subKey = [
subEnum nextObject]); )
 
 1575                            [
extra setObject:[[
subInfo copy] autorelease] forKey:infoKey];
 
 1582                        [
equipArray replaceObjectAtIndex:EQUIPMENT_EXTRA_INFO_INDEX withObject:[[
extra copy] autorelease]];
 
  1495+ (void) handleEquipmentOverrides: (NSMutableArray *)arrayToProcess {
…}
  
 1594+ (void) handleStarNebulaListMerging: (NSMutableArray *)arrayToProcess
 
 1600    for (i = 0; i < [
refArray count]; i++)
 
 1605            if (
count == 0)  
continue;
 
 1607            for (k = 0; k < 
count; k++) 
 
 1609                id processValue = [[
arrayToProcess oo_arrayAtIndex:j] oo_objectAtIndex:k defaultValue:nil];
 
 1610                id refValue = [
refArray oo_objectAtIndex:i defaultValue:nil];
 
 1611                NSString *key1 = 
nil;
 
 1612                NSString *key2 = 
nil;
 
 1614                if ([processValue isKindOfClass:[NSString 
class]]) 
 
 1616                    key1 = processValue;
 
 1618                else if ([processValue isKindOfClass:[NSDictionary 
class]])
 
 1620                    if (![processValue objectForKey:
@"key"]) 
 
 1629                if (!key1) 
continue;
 
 1631                if ([refValue isKindOfClass:[NSString 
class]]) 
 
 1635                else if ([refValue isKindOfClass:[NSDictionary 
class]])
 
 1637                    if (![refValue objectForKey:
@"key"])
 
 1639                        key2 = [
refValue objectForKey:@"texture"];
 
 1643                        key2 = [
refValue objectForKey:@"key"];
 
 1646                if (!key2) 
continue;
 
 1648                if ([key1 isEqual:key2])
 
  1594+ (void) handleStarNebulaListMerging: (NSMutableArray *)arrayToProcess {
…}
  
 1667        NSString *path = [[[
ResourceManager builtInPath] stringByAppendingPathComponent:@"Config"] stringByAppendingPathComponent:@"whitelist.plist"];
 
 1671        [whitelistDictionary retain];
 
 
 1681    NSRange dot = [
key rangeOfString:@"."];
 
 1682    if (dot.location != NSNotFound)
 
 1684        return [
key substringToIndex:dot.location];
 
 
 1697                      stringByAppendingPathComponent:@"logcontrol.plist"];
 
 1698    NSMutableDictionary *logControl = [
NSMutableDictionary dictionaryWithDictionary:OODictionaryFromFile(path)];
 
 1703    NSString *key = 
nil;
 
 1706        [
coreRoots addObject:LogClassKeyRoot(key)];
 
 1710    NSString *configPath = 
nil;
 
 1711    NSDictionary *dict = 
nil;
 
 1715    while ((path = [pathEnum nextObject]))
 
 1717        if ([
rootPaths containsObject:path])  
continue;
 
 1719        configPath = [[
path stringByAppendingPathComponent:@"Config"]
 
 1720                      stringByAppendingPathComponent:@"logcontrol.plist"];
 
 1724            configPath = [
path stringByAppendingPathComponent:@"logcontrol.plist"];
 
 1737    pathEnum = [rootPaths objectEnumerator];
 
 1738    while ((path = [pathEnum nextObject]))
 
 1740        configPath = [[
path stringByAppendingPathComponent:@"Config"]
 
 1741                      stringByAppendingPathComponent:@"logcontrol.plist"];
 
 1745            configPath = [
path stringByAppendingPathComponent:@"logcontrol.plist"];
 
 1755    dict = [[
NSUserDefaults standardUserDefaults] dictionaryForKey:@"logging-enable"];
 
 1756    if (dict != 
nil)  [
logControl addEntriesFromDictionary:dict];
 
 
 1766    NSString *path = 
nil;
 
 1767    NSString *configPath = 
nil;
 
 1768    NSDictionary *categories = 
nil;
 
 1771    while ((path = [pathEnum nextObject]))
 
 1773        if ([
ResourceManager corePlist:
@"role-categories.plist" excludedAt:path])
 
 1778        configPath = [[
path stringByAppendingPathComponent:@"Config"]
 
 1779                      stringByAppendingPathComponent:@"role-categories.plist"];
 
 1781        if (categories != 
nil)
 
 
 1799+ (void) mergeRoleCategories:(NSDictionary *)catData intoDictionary:(NSMutableDictionary *)categories
 
 1801    NSMutableSet *contents = 
nil;
 
 1802    NSArray *catDataEntry = 
nil;
 
 1807        if (contents == 
nil)
 
 1812        catDataEntry = [
catData oo_arrayForKey:key];
 
 1813        OOLog(
@"shipData.load.roleCategories", 
@"Adding %ld entries for category %@", (
unsigned long)[catDataEntry 
count], key);
 
 1814        [
contents addObjectsFromArray:catDataEntry];
 
  1799+ (void) mergeRoleCategories:(NSDictionary *)catData intoDictionary:(NSMutableDictionary *)categories {
…}
  
 1821    OOLog(
@"resourceManager.planetinfo.load", 
@"%@", 
@"Initialising manager");
 
 1824    NSString *path = 
nil;
 
 1825    NSString *configPath = 
nil;
 
 1826    NSDictionary *categories = 
nil;
 
 1827    NSString *systemKey = 
nil;
 
 1830    while ((path = [pathEnum nextObject]))
 
 1836        configPath = [[
path stringByAppendingPathComponent:@"Config"]
 
 1837                      stringByAppendingPathComponent:@"planetinfo.plist"];
 
 1839        if (categories != 
nil)
 
 1843                NSDictionary *values = [
categories oo_dictionaryForKey:systemKey defaultValue:nil];
 
 1862    OOLog(
@"resourceManager.planetinfo.load", 
@"%@", 
@"Caching routes");
 
 1864    OOLog(
@"resourceManager.planetinfo.load", 
@"%@", 
@"Initialised manager");
 
 
 1878        NSString *path = [[[
ResourceManager builtInPath] stringByAppendingPathComponent:@"Config"] stringByAppendingPathComponent:@"shader-uniform-bindings.plist"];
 
 1880        NSArray *keys = [
dict allKeys];
 
 1883        unsigned changeCount = 0;
 
 1886            NSString *key = 
nil;
 
 1889                NSDictionary *value = [
dict oo_dictionaryForKey:key];
 
 1890                NSString *inheritKey = [
value oo_stringForKey:@"$w299"];
 
 1891                if (inheritKey != 
nil)
 
 1894                    NSMutableDictionary *mutableValue = [[
value mutableCopy] autorelease];
 
 1896                    NSDictionary *inherited = [
dict oo_dictionaryForKey:inheritKey];
 
 1897                    if (inherited != 
nil)
 
 1905        } 
while (changeCount != 0);
 
 
 1916+ (NSString *) pathForFileNamed:(NSString *)fileName inFolder:(NSString *)folderName
 
  1916+ (NSString *) pathForFileNamed:(NSString *)fileName inFolder:(NSString *)folderName {
…}
  
 1923+ (NSString *) pathForFileNamed:(NSString *)fileName inFolder:(NSString *)folderName cache:(BOOL)useCache
 
 1925    NSString        *result = 
nil;
 
 1926    NSString        *cacheKey = 
nil;
 
 1928    NSEnumerator    *pathEnum = 
nil;
 
 1929    NSString        *path = 
nil;
 
 1930    NSString        *filePath = 
nil;
 
 1931    NSFileManager   *fmgr = 
nil;
 
 1933    if (fileName == 
nil)  
return nil;
 
 1937        if (folderName != 
nil)  cacheKey = [
NSString stringWithFormat:@"%@/%@", folderName, fileName];
 
 1938        else  cacheKey = fileName;
 
 1940        if (result != 
nil)  
return result;
 
 1948        filePath = [[
path stringByAppendingPathComponent:folderName] stringByAppendingPathComponent:fileName];
 
 1949        if ([fmgr oo_oxzFileExistsAtPath:filePath])
 
 1955        filePath = [
path stringByAppendingPathComponent:fileName];
 
 1956        if ([fmgr oo_oxzFileExistsAtPath:filePath])
 
 1965        OOLog(
@"resourceManager.foundFile", 
@"Found %@/%@ at %@", folderName, fileName, filePath);
 
  1923+ (NSString *) pathForFileNamed:(NSString *)fileName inFolder:(NSString *)folderName cache:(BOOL)useCache {
…}
  
 1977+ (id) retrieveFileNamed:(NSString *)fileName
 
 1978                inFolder:(NSString *)folderName
 
 1979                   cache:(NSMutableDictionary **)ioCache
 
 1982            usePathCache:(BOOL)useCache
 
 1985    NSString        *path = 
nil;
 
 1989        if (key == 
nil)  key = [
NSString stringWithFormat:@"%@:%@", folderName, fileName];
 
 1990        if (*ioCache != 
nil)
 
 1993            result = [*
ioCache objectForKey:key];
 
 1994            if (result)  
return result;
 
 1999    if (path != 
nil)  result = [[[
class alloc] initWithContentsOfFile:path] autorelease];
 
 2001    if (result != 
nil && ioCache != NULL)
 
 2004        [*
ioCache setObject:result forKey:key];
 
  1977+ (id) retrieveFileNamed:(NSString *)fileName {
…}
  
 2011+ (
OOMusic *) ooMusicNamed:(NSString *)fileName inFolder:(NSString *)folderName
 
 2016                               key:[
NSString stringWithFormat:@"OOMusic:%@:%@", folderName, fileName]
 
  2011+ (
OOMusic *) ooMusicNamed:(NSString *)fileName inFolder:(NSString *)folderName {
…}
  
 2022+ (
OOSound *) ooSoundNamed:(NSString *)fileName inFolder:(NSString *)folderName
 
 2027                               key:[
NSString stringWithFormat:@"OOSound:%@:%@", folderName, fileName]
 
  2022+ (
OOSound *) ooSoundNamed:(NSString *)fileName inFolder:(NSString *)folderName {
…}
  
 2033+ (NSString *) stringFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName
 
  2033+ (NSString *) stringFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName {
…}
  
 2039+ (NSString *) stringFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName cache:(BOOL)useCache
 
 2042    NSString        *path = 
nil;
 
 2043    NSString        *key = 
nil;
 
 2047        key = [
NSString stringWithFormat:@"%@:%@", folderName, fileName];
 
 2051            result = [sStringCache objectForKey:key];
 
 2052            if (result)  
return result;
 
 2057    if (path != 
nil)  result = [
NSString stringWithContentsOfUnicodeFile:path];
 
 2059    if (result != 
nil && useCache)
 
 2062        [sStringCache setObject:result forKey:key];
 
  2039+ (NSString *) stringFromFilesNamed:(NSString *)fileName inFolder:(NSString *)folderName cache:(BOOL)useCache {
…}
  
 2071    NSMutableDictionary         *loadedScripts = 
nil;
 
 2072    NSArray                     *results = 
nil;
 
 2074    NSEnumerator                *pathEnum = 
nil;
 
 2075    NSString                    *path = 
nil;
 
 2076    NSEnumerator                *scriptEnum = 
nil;
 
 2078    NSString                    *name = 
nil;
 
 2079    NSAutoreleasePool           *pool = 
nil;
 
 2081    OOLog(
@"script.load.world.begin", 
@"%@", 
@"Loading world scripts...");
 
 2085    for (pathEnum = [
paths objectEnumerator]; (path = [
pathEnum nextObject]); )
 
 2090        if (![
ResourceManager corePlist:
@"world-scripts.plist" excludedAt:path])
 
 2100                    for (scriptEnum = [results objectEnumerator]; (script = [
scriptEnum nextObject]); )
 
 2104                        else  OOLog(
@"script.load.unnamed", 
@"Discarding anonymous script %@", script);
 
 2108            @catch (NSException *exception)
 
 2110                OOLog(
@"script.load.exception", 
@"***** %s encountered exception %@ (%@) while trying to load script from %@ -- ignoring this location.", __PRETTY_FUNCTION__, [exception name], [exception reason], path);
 
 2123            NSMutableArray      *displayNames = 
nil;
 
 2124            NSEnumerator        *scriptEnum = 
nil;
 
 2126            NSString            *displayString = 
nil;
 
 2130            for (scriptEnum = [loadedScripts objectEnumerator]; (script = [
scriptEnum nextObject]); )
 
 2135            displayString = [[
displayNames sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] componentsJoinedByString:@"\n    "];
 
 2136            OOLog(
@"script.load.world.listAll", 
@"Loaded %lu world scripts:\n    %@", 
count, displayString);
 
 2140            OOLog(
@"script.load.world.listAll", 
@"%@", 
@"*** No world scripts loaded.");
 
 2144    return loadedScripts;
 
 
 2148+ (BOOL) writeDiagnosticData:(NSData *)data toFileNamed:(NSString *)name
 
 2150    if (data == 
nil || name == 
nil)  
return NO;
 
 2153    if (directory == 
nil)  
return NO;
 
 2155    NSArray *nameComponents = [
name componentsSeparatedByString:@"/"];
 
 2161        for (NSUInteger i = 0; i < 
count - 1; i++)
 
 2164            if ([component hasPrefix:
@"."])
 
 2168            directory = [
directory stringByAppendingPathComponent:component];
 
 2169            [[
NSFileManager defaultManager] oo_createDirectoryAtPath:directory attributes:nil];
 
 2173    return [
data writeToFile:[
directory stringByAppendingPathComponent:name] atomically:YES];
 
  2148+ (BOOL) writeDiagnosticData:(NSData *)data toFileNamed:(NSString *)name {
…}
  
 2177+ (BOOL) writeDiagnosticString:(NSString *)string toFileNamed:(NSString *)name
 
  2177+ (BOOL) writeDiagnosticString:(NSString *)string toFileNamed:(NSString *)name {
…}
  
 2183+ (BOOL) writeDiagnosticPList:(
id)plist toFileNamed:(NSString *)name
 
 2185    NSData *data = [
plist oldSchoolPListFormatWithErrorDescription:NULL];
 
 2187    if (data == 
nil)  
return NO;
 
  2183+ (BOOL) writeDiagnosticPList:(
id)plist toFileNamed:(NSString *)name {
…}
  
 2199+ (BOOL)directoryExists:(NSString *)inPath create:(BOOL)inCreate
 
 2201    BOOL                exists, directory;
 
 2204    exists = [
fmgr fileExistsAtPath:inPath isDirectory:&directory];
 
 2206    if (exists && !directory)
 
 2208        OOLog(
@"resourceManager.write.buildPath.failed", 
@"Expected %@ to be a folder, but it is a file.", inPath);
 
 2213        if (!inCreate) 
return NO;
 
 2214        if (![fmgr oo_createDirectoryAtPath:inPath attributes:
nil])
 
 2216            OOLog(
@"resourceManager.write.buildPath.failed", 
@"Could not create folder %@.", inPath);
 
  2199+ (BOOL)directoryExists:(NSString *)inPath create:(BOOL)inCreate {
…}
  
 2233    NSMutableArray          *displayPaths = 
nil;
 
 2234    NSEnumerator            *pathEnum = 
nil;
 
 2235    NSString                *path = 
nil;
 
 2238    displayPaths = [
NSMutableArray arrayWithCapacity:[sSearchPaths count]];
 
 2241        [
displayPaths addObject:[[
path stringByStandardizingPath] stringByAbbreviatingWithTildeInPath]];
 
 2244    OOLog(
@"searchPaths.dumpAll", 
@"Resource paths: %@\n    %@", 
sUseAddOns, [displayPaths componentsJoinedByString:
@"\n    "]);
 
 
 2251    [sSoundCache release];
 
 2253    [sStringCache release];
 
 
void OOHUDResetTextEngine(void)
 
#define foreachkey(VAR, DICT)
 
void OOStandardsDeprecated(NSString *message)
 
BOOL OOEnforceStandards(void)
 
void OOStandardsError(NSString *message)
 
NSString * OOLogHandlerGetLogBasePath(void)
 
BOOL OOLogWillDisplayMessagesInClass(NSString *inMessageClass)
 
#define OOLog(class, format,...)
 
NSString *const kOOLogParameterError
 
static NSString *const kOOManifestTags
 
static NSString *const kOOManifestRequiredOoliteVersion
 
static NSString *const kOOManifestTitle
 
static NSString *const kOOManifestTagScenarioOnly
 
static NSString *const kOOManifestIdentifier
 
static NSString *const kOOManifestVersion
 
static NSString *const kOOManifestRequiredBy
 
static NSString *const kOOManifestFilePath
 
NSDictionary * OODictionaryFromFile(NSString *path)
 
NSArray * OOArrayFromFile(NSString *path)
 
NSArray * ComponentsFromVersionString(NSString *string)
 
NSComparisonResult CompareVersions(NSArray *version1, NSArray *version2)
 
#define SCENARIO_OXP_DEFINITION_BYID
 
#define SCENARIO_OXP_DEFINITION_NONE
 
#define SCENARIO_OXP_DEFINITION_NOPLIST
 
#define SCENARIO_OXP_DEFINITION_ALL
 
#define SCENARIO_OXP_DEFINITION_BYTAG
 
static NSMutableArray * sErrors
 
static NSString *const kOOLogCacheUpToDate
 
static NSArray * sUseAddOnsParts
 
static NSString *const kOOLogCacheStalePaths
 
static NSMutableArray * sSearchPaths
 
static NSString *const kOOCacheSearchPathModDates
 
static NSString *const kOOLogCacheStaleDates
 
static NSString *const kOOCacheKeySearchPaths
 
static NSMutableDictionary * sOXPManifests
 
static NSMutableDictionary * sSoundCache
 
static NSMutableArray * sOXPsWithMessagesFound
 
static NSString * sUseAddOns
 
static NSMutableDictionary * sStringCache
 
static NSString *const kOOLogCacheExplicitFlush
 
static NSString *const kOOCacheKeyModificationDates
 
NSDictionary * ParseOOSScripts(NSString *script)
 
static NSMutableArray * sExternalPaths
 
#define PLANETINFO_UNIVERSAL_KEY
 
@ EQUIPMENT_EXTRA_INFO_INDEX
 
#define PLANETINFO_INTERSTELLAR_KEY
 
void setObject:forKey:inCache:(id inElement,[forKey] NSString *inKey,[inCache] NSString *inCacheKey)
 
void setAllowCacheWrites:(BOOL flag)
 
id objectForKey:inCache:(NSString *inKey,[inCache] NSString *inCacheKey)
 
OOCacheManager * sharedCache()
 
OOOXZManager * sharedManager()
 
NSArray * worldScriptsAtPath:(NSString *path)
 
void setUniversalProperties:(NSDictionary *properties)
 
void setProperties:forSystemKey:(NSDictionary *properties,[forSystemKey] NSString *key)
 
void setInterstellarProperties:(NSDictionary *properties)
 
NSString * pathForFileNamed:inFolder:cache:(NSString *fileName,[inFolder] NSString *folderName,[cache] BOOL useCache)
 
void filterSearchPathsForConflicts:(NSMutableArray *searchPaths)
 
NSDictionary * materialDefaults()
 
NSArray * pathsWithAddOns()
 
void resetManifestKnowledgeForOXZManager()
 
id retrieveFileNamed:inFolder:cache:key:class:usePathCache:(NSString *fileName, [inFolder] NSString *folderName, [cache] NSMutableDictionary **ioCache, [key] NSString *key, [class] Class class, [usePathCache] BOOL useCache)
 
BOOL areRequirementsFulfilled:forOXP:andFile:(NSDictionary *requirements, [forOXP] NSString *path, [andFile] NSString *file)
 
BOOL manifestAllowedByScenario:withTag:(NSDictionary *manifest, [withTag] NSString *tag)
 
NSDictionary * loadScripts()
 
NSString * stringFromFilesNamed:inFolder:cache:(NSString *fileName,[inFolder] NSString *folderName,[cache] BOOL useCache)
 
void preloadFilePathFor:inFolder:atPath:(NSString *fileName, [inFolder] NSString *subFolder, [atPath] NSString *path)
 
void preloadFileListFromFolder:forFolders:(NSString *path, [forFolders] NSArray *folders)
 
NSDictionary * whitelistDictionary()
 
void handleEquipmentOverrides:(NSMutableArray *arrayToProcess)
 
NSEnumerator * reversePathEnumerator()
 
void handleEquipmentListMerging:forLookupIndex:(NSMutableArray *arrayToProcess,[forLookupIndex] unsigned lookupIndex)
 
NSArray * OXPsWithMessagesFound()
 
void filterSearchPathsByScenario:(NSMutableArray *searchPaths)
 
void checkOXPMessagesInPath:(NSString *path)
 
NSDictionary * dictionaryFromFilesNamed:inFolder:andMerge:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles)
 
NSDictionary * logControlDictionary()
 
void preloadFileListFromOXZ:forFolders:(NSString *path, [forFolders] NSArray *folders)
 
NSArray * arrayFromFilesNamed:inFolder:andMerge:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles)
 
NSEnumerator * pathEnumerator()
 
NSString * diagnosticFileLocation()
 
void mergeRoleCategories:intoDictionary:(NSDictionary *catData, [intoDictionary] NSMutableDictionary *categories)
 
void filterSearchPathsToExcludeScenarioOnlyPaths:(NSMutableArray *searchPaths)
 
BOOL checkCacheUpToDateForPaths:(NSArray *searchPaths)
 
BOOL manifestAllowedByScenario:withIdentifier:(NSDictionary *manifest, [withIdentifier] NSString *identifier)
 
void addErrorWithKey:param1:param2:(NSString *descriptionKey, [param1] id param1, [param2] id param2)
 
BOOL checkVersionCompatibility:forOXP:(NSDictionary *manifest,[forOXP] NSString *title)
 
NSArray * userRootPaths()
 
static NSString * LogClassKeyRoot(NSString *key)
 
NSDictionary * shaderBindingTypesDictionary()
 
BOOL writeDiagnosticData:toFileNamed:(NSData *data,[toFileNamed] NSString *name)
 
BOOL validateManifest:forOXP:(NSDictionary *manifest, [forOXP] NSString *path)
 
OOSystemDescriptionManager * systemDescriptionManager()
 
void handleStarNebulaListMerging:(NSMutableArray *arrayToProcess)
 
void checkPotentialPath:path:(NSString *, [path] NSMutableArray *searchPaths)
 
NSArray * arrayFromFilesNamed:inFolder:andMerge:cache:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles,[cache] BOOL useCache)
 
NSDictionary * roleCategoriesDictionary()
 
NSDictionary * dictionaryFromFilesNamed:inFolder:mergeMode:cache:(NSString *fileName,[inFolder] NSString *folderName,[mergeMode] OOResourceMergeMode mergeMode,[cache] BOOL useCache)
 
int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
 
int ZEXPORT unzGoToFirstFile(unzFile file)
 
unzFile ZEXPORT unzOpen64(const void *path)
 
int ZEXPORT unzGoToNextFile(unzFile file)
 
int ZEXPORT unzClose(unzFile file)