Changeset 4418

Show
Ignore:
Timestamp:
01/22/07 12:23:52 (2 years ago)
Author:
morris
Message:

Add an LHA handler, fixing #181

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Footagehead/trunk/FHFileHandler.m

    r3876 r4418  
    2828 
    2929#import "NSImage-FHAdditions.h" 
     30#import "FHArchiveHandler.h" 
    3031#import "FHFile.h" 
    3132#import "FHFileHandler.h" 
    32 #import "FHRARHandler.h" 
    33 #import "FHZipHandler.h" 
    3433 
    35 static NSMutableArray                   *FHFileHandlerFileTypes; 
     34@interface FHFileHandler(Private) 
     35 
     36+ (NSArray *)_directoryHandledFileTypes; 
     37 
     38@end 
     39 
     40 
     41@implementation FHFileHandler(Private) 
     42 
     43+ (NSArray *)_directoryHandledFileTypes { 
     44        static NSMutableArray           *types; 
     45         
     46        if(!types) { 
     47                types = [[NSMutableArray alloc] init]; 
     48                [types addObjectsFromArray:[FHArchiveHandler handledFileTypes]]; 
     49        } 
     50         
     51        return types; 
     52
     53 
     54@end 
     55 
    3656 
    3757@implementation FHFileHandler 
    38  
    39 + (void)initialize { 
    40         if([self isEqual:[FHFileHandler class]]) { 
    41                 FHFileHandlerFileTypes = [[NSMutableArray alloc] init]; 
    42                 [FHFileHandlerFileTypes addObjectsFromArray:[FHRARHandler handledFileTypes]]; 
    43                 [FHFileHandlerFileTypes addObjectsFromArray:[FHZipHandler handledFileTypes]]; 
    44         } 
    45 } 
    46  
    47  
    48  
    49 #pragma mark - 
    5058 
    5159+ (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
     
    6775                return YES; 
    6876 
    69         return [FHFileHandlerFileTypes containsObject:[url pathExtension]]; 
     77        return [[self _directoryHandledFileTypes] containsObject:[url pathExtension]]; 
    7078} 
    7179 
     
    154162                                 
    155163                                if(![types containsObject:extension]) { 
    156                                         if([FHFileHandlerFileTypes containsObject:extension]) 
     164                                        if([[[self class] _directoryHandledFileTypes] containsObject:extension]) 
    157165                                                isDirectory = YES; 
    158166                                        else 
  • Footagehead/trunk/FHHandler.h

    r4163 r4418  
    4545+ (BOOL)handlesURLAsDirectory:(WIURL *)url; 
    4646+ (Class)handlerForURL:(WIURL *)url; 
     47+ (NSArray *)handlerClasses; 
    4748 
    4849- (id)initHandlerWithURL:(WIURL *)url; 
     
    8081@interface FHPlaceholderHandler : FHHandler 
    8182 
     83+ (Class)handler; 
     84 
    8285@end 
  • Footagehead/trunk/FHHandler.m

    r4163 r4418  
    3030#import "FHFile.h" 
    3131#import "FHHandler.h" 
     32#import "FHArchiveHandler.h" 
    3233#import "FHFileHandler.h" 
    3334#import "FHImageHandler.h" 
    3435#import "FHRangeHandler.h" 
    35 #import "FHRARHandler.h" 
    3636#import "FHSpotlightHandler.h" 
    3737#import "FHURLHandler.h" 
    38 #import "FHZipHandler.h" 
    39  
    40 static NSArray                                  *FHHandlerClasses; 
    4138 
    4239@implementation FHHandler 
    4340 
    44 + (void)initialize { 
    45         if([self isEqual:[FHHandler class]]) { 
    46                 FHHandlerClasses = [[NSArray alloc] initWithObjects: 
     41+ (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
     42        [self doesNotRecognizeSelector:_cmd]; 
     43        return NO; 
     44
     45 
     46 
     47 
     48+ (BOOL)handlesURLAsDirectory:(WIURL *)url { 
     49        return NO; 
     50
     51 
     52 
     53 
     54+ (NSArray *)handlerClasses { 
     55        static NSArray          *classes; 
     56         
     57        if(!classes) { 
     58                classes = [[NSArray alloc] initWithObjects: 
    4759                        [FHFileHandler class], 
    4860                        [FHRangeHandler class], 
    4961                        [FHSpotlightHandler class], 
    5062                        [FHURLHandler class], 
    51                         [FHRARHandler class], 
    52                         [FHZipHandler class], 
     63                        [FHArchiveHandler class], 
    5364                        NULL]; 
    5465        } 
    55 
    56  
    57  
    58  
    59 + (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
    60         [self doesNotRecognizeSelector:_cmd]; 
    61         return NO; 
    62 
    63  
    64  
    65  
    66 + (BOOL)handlesURLAsDirectory:(WIURL *)url { 
    67         return NO; 
     66 
     67 
     68        return classes; 
    6869} 
    6970 
     
    7172 
    7273+ (Class)handlerForURL:(WIURL *)url { 
     74        NSArray                 *classes; 
    7375        Class                   class; 
    7476        unsigned int    i, count; 
    7577         
    76         count = [FHHandlerClasses count]; 
     78        classes = [self handlerClasses]; 
     79        count = [classes count]; 
    7780         
    7881        for(i = 0; i < count; i++) { 
    79                 class = [FHHandlerClasses objectAtIndex:i]; 
     82                class = [classes objectAtIndex:i]; 
    8083                 
    8184                if([class handlesURL:url isPrimary:YES]) 
     
    8487         
    8588        for(i = 0; i < count; i++) { 
    86                 class = [FHHandlerClasses objectAtIndex:i]; 
     89                class = [classes objectAtIndex:i]; 
    8790                 
    8891                if([class handlesURL:url isPrimary:NO]) 
     
    316319@implementation FHPlaceholderHandler 
    317320 
     321+ (Class)handler { 
     322        return [FHHandler class]; 
     323} 
     324 
     325 
     326 
    318327- (id)initHandlerWithURL:(WIURL *)url { 
    319328        NSZone          *zone; 
     
    325334        [self release]; 
    326335         
    327         return [[[class handlerForURL:url] allocWithZone:zone] initHandlerWithURL:url]; 
     336        return [[[[class handler] handlerForURL:url] allocWithZone:zone] initHandlerWithURL:url]; 
    328337} 
    329338 
  • Footagehead/trunk/FHRARHandler.h

    r3102 r4418  
    2727 */ 
    2828 
    29 #import "FHFileHandler.h" 
     29#import "FHArchiveHandler.h" 
    3030 
    31 @interface FHRARHandler : FHFileHandler { 
    32         NSString                                *_archivePath; 
    33 
     31@interface FHRARHandler : FHArchiveHandler 
    3432 
    3533@end 
  • Footagehead/trunk/FHRARHandler.m

    r3400 r4418  
    2727 */ 
    2828 
    29 #import "FHFile.h" 
    3029#import "FHRARHandler.h" 
    3130 
    3231@implementation FHRARHandler 
    33  
    34 + (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
    35         if(primary && [url isFileURL]) 
    36                 return [[self handledFileTypes] containsObject:[url pathExtension]]; 
    37                  
    38         return NO; 
    39 } 
    40  
    41  
    4232 
    4333+ (NSArray *)handledFileTypes { 
     
    6252        NSTask          *task; 
    6353         
    64         _archivePath = [[NSFileManager temporaryPathWithPrefix:[url lastPathComponent]] retain]; 
    65         [[NSFileManager defaultManager] createDirectoryAtPath:_archivePath]; 
     54        self = [super initHandlerWithURL:url]; 
    6655         
    67         if([[NSFileManager defaultManager] changeCurrentDirectoryPath:_archivePath]) { 
     56        if([[NSFileManager defaultManager] changeCurrentDirectoryPath:[self archivePath]]) { 
    6857                path = [[self bundle] pathForResource:@"unrar" ofType:NULL]; 
    6958                task = [[NSTask alloc] init]; 
     
    8574        } 
    8675 
    87         return [super initHandlerWithURL:url rootPath:_archivePath]; 
    88 
    89  
    90  
    91  
    92 - (void)dealloc { 
    93         [[NSFileManager defaultManager] removeFileAtPath:_archivePath]; 
    94  
    95         [_archivePath release]; 
    96          
    97         [super dealloc]; 
     76        return self; 
    9877} 
    9978 
  • Footagehead/trunk/FHURLHandler.h

    r2936 r4418  
    3434 
    3535 
    36 @interface FHPlaceholderURLHandler : FHURLHandler 
     36@interface FHPlaceholderURLHandler : FHPlaceholderHandler 
    3737 
    3838@end 
  • Footagehead/trunk/FHURLHandler.m

    r3400 r4418  
    6565 
    6666@implementation FHPlaceholderURLHandler 
     67 
     68+ (Class)handler { 
     69        return [FHURLHandler class]; 
     70} 
     71 
     72 
    6773 
    6874- (id)initHandlerWithURL:(WIURL *)url { 
  • Footagehead/trunk/FHZipHandler.h

    r3101 r4418  
    2727 */ 
    2828 
    29 #import "FHFileHandler.h" 
     29#import "FHArchiveHandler.h" 
    3030 
    31 @interface FHZipHandler : FHFileHandler { 
    32         NSString                                *_archivePath; 
    33 
     31@interface FHZipHandler : FHArchiveHandler 
    3432 
    3533@end 
  • Footagehead/trunk/FHZipHandler.m

    r3400 r4418  
    2727 */ 
    2828 
    29 #import "FHFile.h" 
    3029#import "FHZipHandler.h" 
    3130 
    32 static NSMutableArray                   *FHFileHandlerAsteriskTypes; 
     31@interface FHZipHandler(Private) 
     32 
     33+ (NSArray *)_globbedHandledFileTypes; 
     34 
     35@end 
     36 
     37 
     38@implementation FHZipHandler(Private) 
     39 
     40+ (NSArray *)_globbedHandledFileTypes { 
     41        static NSMutableArray   *types; 
     42        NSEnumerator                    *enumerator; 
     43        NSString                                *type; 
     44         
     45        if(!types) { 
     46                types = [[NSMutableArray alloc] init]; 
     47                         
     48                enumerator = [[FHFileHandler handledFileTypes] objectEnumerator]; 
     49                         
     50                while((type = [enumerator nextObject])) { 
     51                        if(![type hasPrefix:@"'"]) 
     52                                [types addObject:[NSSWF:@"*.%@", type]]; 
     53                } 
     54        } 
     55         
     56        return types; 
     57
     58 
     59@end 
     60 
    3361 
    3462@implementation FHZipHandler 
    35  
    36 + (void)initialize { 
    37         NSEnumerator    *enumerator; 
    38         NSString                *type; 
    39          
    40         if([self isEqual:[FHZipHandler class]]) { 
    41                 FHFileHandlerAsteriskTypes = [[NSMutableArray alloc] init]; 
    42                  
    43                 enumerator = [[FHFileHandler handledFileTypes] objectEnumerator]; 
    44                  
    45                 while((type = [enumerator nextObject])) { 
    46                         if(![type hasPrefix:@"'"]) 
    47                                 [FHFileHandlerAsteriskTypes addObject:[NSSWF:@"*.%@", type]]; 
    48                 } 
    49         } 
    50 } 
    51  
    52  
    53  
    54 #pragma mark - 
    55  
    56 + (BOOL)handlesURL:(WIURL *)url isPrimary:(BOOL)primary { 
    57         if(primary && [url isFileURL]) 
    58                 return [[self handledFileTypes] containsObject:[url pathExtension]]; 
    59                  
    60         return NO; 
    61 } 
    62  
    63  
    6463 
    6564+ (NSArray *)handledFileTypes { 
     
    8483        NSTask                  *task; 
    8584         
    86         _archivePath = [[NSFileManager temporaryPathWithPrefix:[url lastPathComponent]] retain]; 
    87         [[NSFileManager defaultManager] createDirectoryAtPath:_archivePath]; 
     85        self = [super initHandlerWithURL:url]; 
    8886         
    8987        task = [[NSTask alloc] init]; 
     
    9593                _archivePath, 
    9694                NULL]; 
    97         [arguments addObjectsFromArray:FHFileHandlerAsteriskTypes]; 
     95        [arguments addObjectsFromArray:[[self class] _globbedHandledFileTypes]]; 
    9896        [task setArguments:arguments]; 
    9997        [task setStandardOutput:[NSFileHandle fileHandleWithNullDevice]]; 
     
    103101        [task release]; 
    104102 
    105         return [super initHandlerWithURL:url rootPath:_archivePath]; 
    106 
    107  
    108  
    109  
    110 - (void)dealloc { 
    111         [[NSFileManager defaultManager] removeFileAtPath:_archivePath]; 
    112  
    113         [_archivePath release]; 
    114          
    115         [super dealloc]; 
     103        return self; 
    116104} 
    117105 
  • Footagehead/trunk/Footagehead.xcodeproj/project.pbxproj

    r4382 r4418  
    9595                77512F720862D6C2002757A8 /* jutils.c in Sources */ = {isa = PBXBuildFile; fileRef = 77CDC1C6083BA8E2003BE654 /* jutils.c */; }; 
    9696                775BA4F2075F70ED00F0941E /* NSImage-FHAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BA4F0075F70ED00F0941E /* NSImage-FHAdditions.m */; }; 
     97                778F0B160B64C27100E3CD47 /* FHArchiveHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B140B64C27100E3CD47 /* FHArchiveHandler.m */; }; 
     98                778F0B8E0B64C4BB00E3CD47 /* huf.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B730B64C4BB00E3CD47 /* huf.c */; }; 
     99                778F0B8F0B64C4BB00E3CD47 /* crcio.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B740B64C4BB00E3CD47 /* crcio.c */; }; 
     100                778F0B900B64C4BB00E3CD47 /* lhext.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B760B64C4BB00E3CD47 /* lhext.c */; }; 
     101                778F0B910B64C4BB00E3CD47 /* lharc.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B770B64C4BB00E3CD47 /* lharc.c */; }; 
     102                778F0B920B64C4BB00E3CD47 /* maketbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B780B64C4BB00E3CD47 /* maketbl.c */; }; 
     103                778F0B940B64C4BB00E3CD47 /* fnmatch.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B7A0B64C4BB00E3CD47 /* fnmatch.c */; }; 
     104                778F0B950B64C4BB00E3CD47 /* header.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B7B0B64C4BB00E3CD47 /* header.c */; }; 
     105                778F0B960B64C4BB00E3CD47 /* patmatch.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B7C0B64C4BB00E3CD47 /* patmatch.c */; }; 
     106                778F0B970B64C4BB00E3CD47 /* dhuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B7D0B64C4BB00E3CD47 /* dhuf.c */; }; 
     107                778F0B980B64C4BB00E3CD47 /* extract.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B7E0B64C4BB00E3CD47 /* extract.c */; }; 
     108                778F0B990B64C4BB00E3CD47 /* slide.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B800B64C4BB00E3CD47 /* slide.c */; }; 
     109                778F0B9A0B64C4BB00E3CD47 /* append.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B810B64C4BB00E3CD47 /* append.c */; }; 
     110                778F0B9B0B64C4BB00E3CD47 /* bitio.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B830B64C4BB00E3CD47 /* bitio.c */; }; 
     111                778F0B9C0B64C4BB00E3CD47 /* maketree.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B840B64C4BB00E3CD47 /* maketree.c */; }; 
     112                778F0B9D0B64C4BB00E3CD47 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B850B64C4BB00E3CD47 /* util.c */; }; 
     113                778F0B9E0B64C4BB00E3CD47 /* lhadd.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B880B64C4BB00E3CD47 /* lhadd.c */; }; 
     114                778F0BA00B64C4BB00E3CD47 /* indicator.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B8A0B64C4BB00E3CD47 /* indicator.c */; }; 
     115                778F0BA10B64C4BB00E3CD47 /* shuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B8B0B64C4BB00E3CD47 /* shuf.c */; }; 
     116                778F0BA20B64C4BB00E3CD47 /* larc.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B8C0B64C4BB00E3CD47 /* larc.c */; }; 
     117                778F0BA30B64C4BB00E3CD47 /* lhlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 778F0B8D0B64C4BB00E3CD47 /* lhlist.c */; }; 
     118                778F0C590B64C8B200E3CD47 /* lha in Resources */ = {isa = PBXBuildFile; fileRef = 778F0B460B64C46900E3CD47 /* lha */; }; 
     119                778F0CD40B64C96D00E3CD47 /* FHLHAHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 778F0CD20B64C96D00E3CD47 /* FHLHAHandler.m */; }; 
     120                778F0DE30B64D45500E3CD47 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 778F0DE20B64D45500E3CD47 /* CoreFoundation.framework */; }; 
    97121                77BD99520760B7380007D034 /* FHTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 77BD99500760B7380007D034 /* FHTableView.m */; }; 
    98122                77CDAE72083B3515003BE654 /* ReleaseNotes.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 77CDAE70083B3515003BE654 /* ReleaseNotes.rtf */; }; 
     
    228252                        remoteInfo = libjpeg; 
    229253                }; 
     254                778F0C5C0B64C8BA00E3CD47 /* PBXContainerItemProxy */ = { 
     255                        isa = PBXContainerItemProxy; 
     256                        containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; 
     257                        proxyType = 1; 
     258                        remoteGlobalIDString = 778F0B450B64C46900E3CD47 /* lha */; 
     259                        remoteInfo = lha; 
     260                }; 
    230261                77CDAE63083B3498003BE654 /* PBXContainerItemProxy */ = { 
    231262                        isa = PBXContainerItemProxy; 
     
    273304                775BA4EF075F70ED00F0941E /* NSImage-FHAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSImage-FHAdditions.h"; sourceTree = "<group>"; }; 
    274305                775BA4F0075F70ED00F0941E /* NSImage-FHAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSImage-FHAdditions.m"; sourceTree = "<group>"; }; 
     306                778F0B140B64C27100E3CD47 /* FHArchiveHandler.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = FHArchiveHandler.m; sourceTree = "<group>"; }; 
     307                778F0B150B64C27100E3CD47 /* FHArchiveHandler.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = FHArchiveHandler.h; sourceTree = "<group>"; }; 
     308                778F0B460B64C46900E3CD47 /* lha */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lha; sourceTree = BUILT_PRODUCTS_DIR; }; 
     309                778F0B730B64C4BB00E3CD47 /* huf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = huf.c; path = lha/huf.c; sourceTree = "<group>"; }; 
     310                778F0B740B64C4BB00E3CD47 /* crcio.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crcio.c; path = lha/crcio.c; sourceTree = "<group>"; }; 
     311                778F0B760B64C4BB00E3CD47 /* lhext.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lhext.c; path = lha/lhext.c; sourceTree = "<group>"; }; 
     312                778F0B770B64C4BB00E3CD47 /* lharc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lharc.c; path = lha/lharc.c; sourceTree = "<group>"; }; 
     313                778F0B780B64C4BB00E3CD47 /* maketbl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = maketbl.c; path = lha/maketbl.c; sourceTree = "<group>"; }; 
     314                778F0B7A0B64C4BB00E3CD47 /* fnmatch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fnmatch.c; path = lha/fnmatch.c; sourceTree = "<group>"; }; 
     315                778F0B7B0B64C4BB00E3CD47 /* header.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = header.c; path = lha/header.c; sourceTree = "<group>"; }; 
     316                778F0B7C0B64C4BB00E3CD47 /* patmatch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = patmatch.c; path = lha/patmatch.c; sourceTree = "<group>"; }; 
     317                778F0B7D0B64C4BB00E3CD47 /* dhuf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dhuf.c; path = lha/dhuf.c; sourceTree = "<group>"; }; 
     318                778F0B7E0B64C4BB00E3CD47 /* extract.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = extract.c; path = lha/extract.c; sourceTree = "<group>"; }; 
     319                778F0B7F0B64C4BB00E3CD47 /* prototypes.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = prototypes.h; path = lha/prototypes.h; sourceTree = "<group>"; }; 
     320                778F0B800B64C4BB00E3CD47 /* slide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slide.c; path = lha/slide.c; sourceTree = "<group>"; }; 
     321                778F0B810B64C4BB00E3CD47 /* append.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = append.c; path = lha/append.c; sourceTree = "<group>"; }; 
     322                778F0B820B64C4BB00E3CD47 /* fnmatch.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fnmatch.h; path = lha/fnmatch.h; sourceTree = "<group>"; }; 
     323                778F0B830B64C4BB00E3CD47 /* bitio.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bitio.c; path = lha/bitio.c; sourceTree = "<group>"; }; 
     324                778F0B840B64C4BB00E3CD47 /* maketree.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = maketree.c; path = lha/maketree.c; sourceTree = "<group>"; }; 
     325                778F0B850B64C4BB00E3CD47 /* util.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = util.c; path = lha/util.c; sourceTree = "<group>"; }; 
     326                778F0B860B64C4BB00E3CD47 /* lha_macro.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = lha_macro.h; path = lha/lha_macro.h; sourceTree = "<group>"; }; 
     327                778F0B870B64C4BB00E3CD47 /* lha.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = lha.h; path = lha/lha.h; sourceTree = "<group>"; }; 
     328                778F0B880B64C4BB00E3CD47 /* lhadd.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lhadd.c; path = lha/lhadd.c; sourceTree = "<group>"; }; 
     329                778F0B8A0B64C4BB00E3CD47 /* indicator.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = indicator.c; path = lha/indicator.c; sourceTree = "<group>"; }; 
     330                778F0B8B0B64C4BB00E3CD47 /* shuf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = shuf.c; path = lha/shuf.c; sourceTree = "<group>"; }; 
     331                778F0B8C0B64C4BB00E3CD47 /* larc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = larc.c; path = lha/larc.c; sourceTree = "<group>"; }; 
     332                778F0B8D0B64C4BB00E3CD47 /* lhlist.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lhlist.c; path = lha/lhlist.c; sourceTree = "<group>"; }; 
     333                778F0BC10B64C56700E3CD47 /* config.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = config.h; path = lha/config.h; sourceTree = "<group>"; }; 
     334                778F0CD10B64C96D00E3CD47 /* FHLHAHandler.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = FHLHAHandler.h; sourceTree = "<group>"; }; 
     335                778F0CD20B64C96D00E3CD47 /* FHLHAHandler.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = FHLHAHandler.m; sourceTree = "<group>"; }; 
     336                778F0DE20B64D45500E3CD47 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 
    275337                77BD994F0760B7380007D034 /* FHTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FHTableView.h; sourceTree = "<group>"; }; 
    276338                77BD99500760B7380007D034 /* FHTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FHTableView.m; sourceTree = "<group>"; }; 
     
    508570 
    509571/* Begin PBXFrameworksBuildPhase section */ 
     572                778F0BDD0B64C68900E3CD47 /* Frameworks */ = { 
     573                        isa = PBXFrameworksBuildPhase; 
     574                        buildActionMask = 2147483647; 
     575                        files = ( 
     576                                778F0DE30B64D45500E3CD47 /* CoreFoundation.framework in Frameworks */, 
     577                        ); 
     578                        runOnlyForDeploymentPostprocessing = 0; 
     579                }; 
    510580                8D11072E0486CEB800E47090 /* Frameworks */ = { 
    511581                        isa = PBXFrameworksBuildPhase; 
     
    544614                                A53901F30596A3E7000FBFD6 /* Carbon.framework */, 
    545615                                A50932DE083E9530006646D1 /* Cocoa.framework */, 
     616                                778F0DE20B64D45500E3CD47 /* CoreFoundation.framework */, 
    546617                        ); 
    547618                        name = "Linked Frameworks"; 
     
    561632                        children = ( 
    562633                                8D1107320486CEB800E47090 /* Footagehead.app */, 
     634                                A5643CB80A26055300ADF4F5 /* WiredAdditions.framework */, 
    563635                                77512F3D0862D69D002757A8 /* libjpeg.a */, 
     636                                778F0B460B64C46900E3CD47 /* lha */, 
    564637                                A5B450CC0880A75A003B1DA1 /* unrar */, 
    565                                 A5643CB80A26055300ADF4F5 /* WiredAdditions.framework */, 
    566638                        ); 
    567639                        name = Products; 
     
    655727                                77396B390857A18300058AF5 /* WiredAdditions.xcodeproj */, 
    656728                                77CDC04D083BA582003BE654 /* libjpeg */, 
     729                                778F0B3F0B64C44100E3CD47 /* lha */, 
    657730                                A5B450E70880AA02003B1DA1 /* unrar */, 
    658731                        ); 
    659732                        name = Subprojects; 
     733                        sourceTree = "<group>"; 
     734                }; 
     735                778F0B1A0B64C28700E3CD47 /* Archive Handlers */ = { 
     736                        isa = PBXGroup; 
     737                        children = ( 
     738                                778F0CD20B64C96D00E3CD47 /* FHLHAHandler.m */, 
     739                                778F0CD10B64C96D00E3CD47 /* FHLHAHandler.h */, 
     740                                A5B452240880B181003B1DA1 /* FHRARHandler.m */, 
     741                                A5B452230880B181003B1DA1 /* FHRARHandler.h */, 
     742                                A5B44F96087F9A2D003B1DA1 /* FHZipHandler.m */, 
     743                                A5B44F95087F9A2D003B1DA1 /* FHZipHandler.h */, 
     744                        ); 
     745                        name = "Archive Handlers"; 
     746                        sourceTree = "<group>"; 
     747                }; 
     748                778F0B3F0B64C44100E3CD47 /* lha */ = { 
     749                        isa = PBXGroup; 
     750                        children = ( 
     751                                778F0B810B64C4BB00E3CD47 /* append.c */, 
     752                                778F0B830B64C4BB00E3CD47 /* bitio.c */, 
     753                                778F0BC10B64C56700E3CD47 /* config.h */, 
     754                                778F0B740B64C4BB00E3CD47 /* crcio.c */, 
     755                                778F0B7D0B64C4BB00E3CD47 /* dhuf.c */, 
     756                                778F0B7E0B64C4BB00E3CD47 /* extract.c */, 
     757                                778F0B7A0B64C4BB00E3CD47 /* fnmatch.c */, 
     758                                778F0B820B64C4BB00E3CD47 /* fnmatch.h */, 
     759                                778F0B7B0B64C4BB00E3CD47 /* header.c */, 
     760                                778F0B730B64C4BB00E3CD47 /* huf.c */, 
     761                                778F0B8A0B64C4BB00E3CD47 /* indicator.c */, 
     762                                778F0B8C0B64C4BB00E3CD47 /* larc.c */, 
     763                                778F0B870B64C4BB00E3CD47 /* lha.h */, 
     764                                778F0B860B64C4BB00E3CD47 /* lha_macro.h */, 
     765                                778F0B880B64C4BB00E3CD47 /* lhadd.c */, 
     766                                778F0B770B64C4BB00E3CD47 /* lharc.c */, 
     767                                778F0B760B64C4BB00E3CD47 /* lhext.c */, 
     768                                778F0B8D0B64C4BB00E3CD47 /* lhlist.c */, 
     769                                778F0B780B64C4BB00E3CD47 /* maketbl.c */, 
     770                                778F0B840B64C4BB00E3CD47 /* maketree.c */, 
     771                                778F0B7C0B64C4BB00E3CD47 /* patmatch.c */, 
     772                                778F0B7F0B64C4BB00E3CD47 /* prototypes.h */, 
     773                                778F0B8B0B64C4BB00E3CD47 /* shuf.c */, 
     774                                778F0B800B64C4BB00E3CD47 /* slide.c */, 
     775                                778F0B850B64C4BB00E3CD47 /* util.c */, 
     776                        ); 
     777                        name = lha; 
    660778                        sourceTree = "<group>"; 
    661779                }; 
     
    784902                        isa = PBXGroup; 
    785903                        children = ( 
    786                                 A5B452240880B181003B1DA1 /* FHRARHandler.m */, 
    787                                 A5B452230880B181003B1DA1 /* FHRARHandler.h */, 
    788                                 A5B44F96087F9A2D003B1DA1 /* FHZipHandler.m */, 
    789                                 A5B44F95087F9A2D003B1DA1 /* FHZipHandler.h */, 
     904                                778F0B140B64C27100E3CD47 /* FHArchiveHandler.m */, 
     905                                778F0B150B64C27100E3CD47 /* FHArchiveHandler.h */, 
     906                                778F0B1A0B64C28700E3CD47 /* Archive Handlers */, 
    790907                        ); 
    791908                        name = "File Handlers"; 
     
    9451062                        productType = "com.apple.product-type.library.static"; 
    9461063                }; 
     1064                778F0B450B64C46900E3CD47 /* lha */ = { 
     1065                        isa = PBXNativeTarget; 
     1066                        buildConfigurationList = 778F0B6F0B64C49000E3CD47 /* Build configuration list for PBXNativeTarget "lha" */; 
     1067                        buildPhases = ( 
     1068                                778F0B430B64C46900E3CD47 /* Sources */, 
     1069                                778F0BDD0B64C68900E3CD47 /* Frameworks */, 
     1070                        ); 
     1071                        buildRules = ( 
     1072                        ); 
     1073                        dependencies = ( 
     1074                        ); 
     1075                        name = lha; 
     1076                        productName = lha; 
     1077                        productReference = 778F0B460B64C46900E3CD47 /* lha */; 
     1078                        productType = "com.apple.product-type.tool"; 
     1079                }; 
    9471080                8D1107260486CEB800E47090 /* Footagehead */ = { 
    9481081                        isa = PBXNativeTarget; 
     
    9601093                                77512CF30862CFB4002757A8 /* PBXTargetDependency */, 
    9611094                                77512F810862D79A002757A8 /* PBXTargetDependency */, 
     1095                                778F0C5D0B64C8BA00E3CD47 /* PBXTargetDependency */, 
    9621096                                A5B4522C0880B1EE003B1DA1 /* PBXTargetDependency */, 
    9631097                        ); 
     
    10031137                                77512CE50862CF78002757A8 /* Wired Additions */, 
    10041138                                77512F3C0862D69D002757A8 /* libjpeg */, 
     1139                                778F0B450B64C46900E3CD47 /* lha */, 
    10051140                                A5B450CB0880A75A003B1DA1 /* unrar */, 
    10061141                                775BA323075F59E000F0941E /* Localization */, 
     
    10511186                                77CDAE72083B3515003BE654 /* ReleaseNotes.rtf in Resources */, 
    10521187                                8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, 
     1188                                778F0C590B64C8B200E3CD47 /* lha in Resources */, 
    10531189                                A5B451EA0880AE56003B1DA1 /* unrar in Resources */, 
    10541190                                A51395F505771ED4007FE220 /* Footagehead.icns in Resources */, 
     
    11841320                        runOnlyForDeploymentPostprocessing = 0; 
    11851321                }; 
     1322                778F0B430B64C46900E3CD47 /* Sources */ = { 
     1323                        isa = PBXSourcesBuildPhase; 
     1324                        buildActionMask = 2147483647; 
     1325                        files = ( 
     1326                                778F0B8E0B64C4BB00E3CD47 /* huf.c in Sources */, 
     1327                                778F0B8F0B64C4BB00E3CD47 /* crcio.c in Sources */, 
     1328                                778F0B900B64C4BB00E3CD47 /* lhext.c in Sources */, 
     1329                                778F0B910B64C4BB00E3CD47 /* lharc.c in Sources */, 
     1330                                778F0B920B64C4BB00E3CD47 /* maketbl.c in Sources */, 
     1331                                778F0B940B64C4BB00E3CD47 /* fnmatch.c in Sources */, 
     1332                                778F0B950B64C4BB00E3CD47 /* header.c in Sources */, 
     1333                                778F0B960B64C4BB00E3CD47 /* patmatch.c in Sources */, 
     1334                                778F0B970B64C4BB00E3CD47 /* dhuf.c in Sources */, 
     1335                                778F0B980B64C4BB00E3CD47 /* extract.c in Sources */, 
     1336                                778F0B990B64C4BB00E3CD47 /* slide.c in Sources */, 
     1337                                778F0B9A0B64C4BB00E3CD47 /* append.c in Sources */, 
     1338                                778F0B9B0B64C4BB00E3CD47 /* bitio.c in Sources */, 
     1339                                778F0B9C0B64C4BB00E3CD47 /* maketree.c in Sources */, 
     1340                                778F0B9D0B64C4BB00E3CD47 /* util.c in Sources */, 
     1341                                778F0B9E0B64C4BB00E3CD47 /* lhadd.c in Sources */, 
     1342                                778F0BA00B64C4BB00E3CD47 /* indicator.c in Sources */, 
     1343                                778F0BA10B64C4BB00E3CD47 /* shuf.c in Sources */, 
     1344                                778F0BA20B64C4BB00E3CD47 /* larc.c in Sources */, 
     1345                                778F0BA30B64C4BB00E3CD47 /* lhlist.c in Sources */, 
     1346                        ); 
     1347                        runOnlyForDeploymentPostprocessing = 0; 
     1348                }; 
    11861349                8D11072C0486CEB800E47090 /* Sources */ = { 
    11871350                        isa = PBXSourcesBuildPhase; 
     
    11921355                                A570FD9F0863661300317D0F /* NSData-FHAdditions.m in Sources */, 
    11931356                                775BA4F2075F70ED00F0941E /* NSImage-FHAdditions.m in Sources */, 
     1357                                778F0B160B64C27100E3CD47 /* FHArchiveHandler.m in Sources */, 
    11941358                                A5B1FB9F067CB90400111D0A /* FHCache.m in Sources */, 
    11951359                                A587DF83055AA418005D2097 /* FHController.m in Sources */, 
     
    12061370                                77CDB023083B6B85003BE654 /* FHImageView.m in Sources */, 
    12071371                                A54BD5420566834700E3ACBC /* FHFullscreenWindow.m in Sources */, 
     1372                                778F0CD40B64C96D00E3CD47 /* FHLHAHandler.m in Sources */, 
    12081373                                A5B1F9C1067BDF2300111D0A /* FHRangeHandler.m in Sources */, 
    12091374                                A5B452260880B181003B1DA1 /* FHRARHandler.m in Sources */, 
     
    12781443                        targetProxy = 77512F800862D79A002757A8 /* PBXContainerItemProxy */; 
    12791444                }; 
     1445                778F0C5D0B64C8BA00E3CD47 /* PBXTargetDependency */ = { 
     1446                        isa = PBXTargetDependency; 
     1447                        target = 778F0B450B64C46900E3CD47 /* lha */; 
     1448                        targetProxy = 778F0C5C0B64C8BA00E3CD47 /* PBXContainerItemProxy */; 
     1449                }; 
    12801450                77CDAE64083B3498003BE654 /* PBXTargetDependency */ = { 
    12811451                        isa = PBXTargetDependency; 
     
    15841754                        name = Release/Universal; 
    15851755                }; 
     1756                778F0B700B64C49000E3CD47 /* Debug/Native */ = { 
     1757                        isa = XCBuildConfiguration; 
     1758                        buildSettings = { 
     1759                                GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; 
     1760                                GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; 
     1761                                GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; 
     1762                                GCC_WARN_MISSING_PARENTHESES = NO; 
     1763                                GCC_WARN_SIGN_COMPARE = NO; 
     1764                                GCC_WARN_UNINITIALIZED_AUTOS = NO; 
     1765                                PRODUCT_NAME = lha; 
     1766                                ZERO_LINK = NO; 
     1767                        }; 
     1768                        name = Debug/Native; 
     1769                }; 
     1770                778F0B710B64C49000E3CD47 /* Test/Universal */ = { 
     1771                        isa = XCBuildConfiguration; 
     1772                        buildSettings = { 
     1773                                GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; 
     1774                                GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; 
     1775                                GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; 
     1776                                GCC_WARN_MISSING_PARENTHESES = NO; 
     1777                                GCC_WARN_SIGN_COMPARE = NO; 
     1778                                GCC_WARN_UNINITIALIZED_AUTOS = NO; 
     1779                                PRODUCT_NAME = lha; 
     1780                                ZERO_LINK = NO; 
     1781                        }; 
     1782                        name = Test/Universal; 
     1783                }; 
     1784                778F0B720B64C49000E3CD47 /* Release/Universal */ = { 
     1785                        isa = XCBuildConfiguration; 
     1786                        buildSettings = { 
     1787                                GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; 
     1788                                GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; 
     1789                                GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO; 
     1790                                GCC_WARN_MISSING_PARENTHESES = NO; 
     1791                                GCC_WARN_SIGN_COMPARE = NO; 
     1792                          &nb