diff --git a/Carbon/Classes/Application.cpp b/Carbon/Classes/Application.cpp
index 78587da..9f976f7 100644
--- a/Carbon/Classes/Application.cpp
+++ b/Carbon/Classes/Application.cpp
@@ -70,7 +70,6 @@ int main( int argc, char* argv[] )
ParseDialogEvents( null, &theEvent, null );
else ParseEvents( &theEvent );
}
- QuitResKnife();
#endif
#if __profile__
@@ -78,6 +77,10 @@ int main( int argc, char* argv[] )
ProfilerTerm();
#endif
+#if !TARGET_API_MAC_CARBON
+ QuitResKnife();
+#endif
+
return error;
}
diff --git a/Carbon/Classes/FileWindow.cpp b/Carbon/Classes/FileWindow.cpp
index 4db5a65..7c480a7 100644
--- a/Carbon/Classes/FileWindow.cpp
+++ b/Carbon/Classes/FileWindow.cpp
@@ -30,6 +30,7 @@ FileWindow::FileWindow( FSSpecPtr spec )
error = CreateWindowFromNib( nibRef, CFSTR("File Window"), &window );
if( error != noErr || window == null )
{
+ DisposeNibReference( nibRef );
DisplayError( "\pA file window could not be obtained from the nib file." );
return;
}
diff --git a/Carbon/Generic.h b/Carbon/Generic.h
index 5682f9c..bc46fdc 100644
--- a/Carbon/Generic.h
+++ b/Carbon/Generic.h
@@ -1,6 +1,17 @@
// abbreviations
-#define null NULL
-#define qdb qd.screenBits.bounds
+#define null NULL
+
+#if TARGET_API_MAC_CARBON
+ #define qdb ScreenBounds()
+ inline Rect ScreenBounds()
+ {
+ Rect rect;
+ GetAvailableWindowPositioningBounds( GetMainDevice(), &rect );
+ return rect;
+ }
+#else
+ #define qdb qd.screenBits.bounds
+#endif
// Easier API call names
#define GetWindowRefCon( window ) (long) GetWRefCon( window )
diff --git a/Carbon/ResKnife.h b/Carbon/ResKnife.h
index f651f7e..7defef7 100644
--- a/Carbon/ResKnife.h
+++ b/Carbon/ResKnife.h
@@ -112,12 +112,14 @@ struct prefs
Boolean quitIfNoWindowsAreOpen; // silly name! - perhaps grandmaMode ?
Boolean autoSave;
UInt32 autoSaveInterval; // should be in units of time
- Boolean warnOnDelete; // "Are you sure?" dialog, © Microsoft 1992-2000
+ Boolean warnOnDelete; // "Are you sure?" dialog, © Microsoft 1986-2003
};
/*** CONSTANTS ***/
// Mac OS versions
+const SInt32 kMacOS607 = 0x00000607;
+const SInt32 kMacOS7 = 0x00000710;
const SInt32 kMacOS71 = 0x00000710;
const SInt32 kMacOS755 = 0x00000755;
const SInt32 kMacOS8 = 0x00000800;
@@ -129,6 +131,7 @@ const SInt32 kMacOS91 = 0x00000910;
const SInt32 kMacOS921 = 0x00000921;
const SInt32 kMacOS10 = 0x00001000;
const SInt32 kMacOS101 = 0x00001010;
+const SInt32 kMacOS102 = 0x00001020;
const SInt32 kMacOSX = kMacOS10;
// CarbonLib versions
@@ -139,6 +142,8 @@ const SInt32 kCarbonLib125 = 0x00000125;
const SInt32 kCarbonLib131 = 0x00000131;
const SInt32 kCarbonLib14 = 0x00000140;
const SInt32 kCarbonLib145 = 0x00000145;
+const SInt32 kCarbonLib15 = 0x00000150;
+const SInt32 kCarbonLib16 = 0x00000160;
// ResKnife version & file types
const UInt32 kCurrentVersion = 0x00040001;
diff --git a/Cocoa/Classes/ApplicationDelegate.h b/Cocoa/Classes/ApplicationDelegate.h
index e091fea..ef9bd40 100644
--- a/Cocoa/Classes/ApplicationDelegate.h
+++ b/Cocoa/Classes/ApplicationDelegate.h
@@ -10,7 +10,11 @@
@interface ApplicationDelegate : NSObject
{
-/*! @var icons A dictionary within which to cache icons. Keys are four-character NSStrings representing ResTypes. */
+/*! @var openAuxView Accessory view for NSOpenPanels. */
+ IBOutlet NSView *openAuxView;
+/*! @var forkTableView Table view inside openAuxView. */
+ IBOutlet NSTableView *forkTableView;
+/*! @var icons A dictionary within which to cache icons. Keys are four-character NSStrings representing ResTypes. */
NSMutableDictionary *icons;
}
@@ -39,6 +43,11 @@
*/
- (IBAction)showInfo:(id)sender;
+/*! @function showPasteboard:
+ * @discussion Displays the pasteboard document, a singleton instance of class PasteboardDocument
+ */
+- (IBAction)showPasteboard:(id)sender;
+
/*! @function showPrefs:
* @discussion Displays the preferences panel stored in PrefsWindow.nib
*/
@@ -49,6 +58,11 @@
*/
- (void)initUserDefaults;
+/*! @function openAuxView
+ * @discussion Accessor method for the openAuxView instance variable.
+ */
+- (NSView *)openAuxView;
+
/*! @function icons
* @discussion Accessor method for the icons instance variable.
*/
diff --git a/Cocoa/Classes/ApplicationDelegate.m b/Cocoa/Classes/ApplicationDelegate.m
index 1fb3293..edef246 100644
--- a/Cocoa/Classes/ApplicationDelegate.m
+++ b/Cocoa/Classes/ApplicationDelegate.m
@@ -1,5 +1,7 @@
#import "ApplicationDelegate.h"
+#import "RKDocumentController.h"
#import "InfoWindowController.h"
+#import "PasteboardWindowController.h"
#import "PrefsWindowController.h"
#import "CreateResourceSheetController.h"
#import "ResourceDocument.h"
@@ -16,6 +18,13 @@
return self;
}
+- (void)applicationWillFinishLaunching:(NSNotification *)notification
+{
+ // instanciate my own subclass of NSDocumentController so I can override the open dialog
+ RKDocumentController *docController = [[RKDocumentController alloc] init];
+ #pragma unused( docController )
+}
+
- (void)awakeFromNib
{
// Part of my EvilPlanª to find out how many people use ResKnife and how often!
@@ -28,6 +37,13 @@
[icons setObject:[[NSWorkspace sharedWorkspace] iconForFileType:@"PICT"] forKey:@"PICT"];
[icons setObject:[[NSWorkspace sharedWorkspace] iconForFileType:@"icns"] forKey:@"icns"];
+ // set up open dialog's aux table view
+ NSTableColumn *tableColumn = [forkTableView tableColumnWithIdentifier:@"parse"];
+ NSButtonCell *buttonCell = [[[NSButtonCell alloc] initTextCell:@""] autorelease];
+ [buttonCell setEditable:YES];
+ [buttonCell setButtonType:NSSwitchButton];
+ [tableColumn setDataCell:buttonCell];
+
[self initUserDefaults];
}
@@ -41,7 +57,7 @@
{
#pragma unused( sender )
NSString *launchAction = [[NSUserDefaults standardUserDefaults] stringForKey:@"LaunchAction"];
- if( [launchAction isEqualToString:@"OpenUntitledFile"] )
+ if( [launchAction isEqualToString:@"OpenUntitledFile"] )
return YES;
else if( [launchAction isEqualToString:@"DisplayOpenPanel"] )
{
@@ -91,6 +107,11 @@
[[InfoWindowController sharedInfoWindowController] showWindow:sender];
}
+- (IBAction)showPasteboard:(id)sender
+{
+ [[PasteboardWindowController sharedPasteboardWindowController] showWindow:sender];
+}
+
- (IBAction)showPrefs:(id)sender
{
[[PrefsWindowController sharedPrefsWindowController] showWindow:sender];
@@ -133,6 +154,11 @@
[defaults synchronize];
}
+- (NSView *)openAuxView
+{
+ return openAuxView;
+}
+
- (NSDictionary *)icons
{
return icons;
diff --git a/Cocoa/Classes/InfoWindowController.m b/Cocoa/Classes/InfoWindowController.m
index dca700f..d33cb76 100644
--- a/Cocoa/Classes/InfoWindowController.m
+++ b/Cocoa/Classes/InfoWindowController.m
@@ -28,10 +28,8 @@
[(NSPanel *)[self window] setBecomesKeyOnlyIfNeeded:YES];
// retain views for swapping in and out
- [documentView retain];
- [documentView removeFromSuperview];
- [resourceView retain];
- [resourceView removeFromSuperview];
+ [[documentView retain] removeFromSuperview];
+ [[resourceView retain] removeFromSuperview];
[self setMainWindow:[NSApp mainWindow]];
[self updateInfoWindow];
diff --git a/Cocoa/Classes/OpenFileDataSource.h b/Cocoa/Classes/OpenFileDataSource.h
new file mode 100644
index 0000000..2b91bef
--- /dev/null
+++ b/Cocoa/Classes/OpenFileDataSource.h
@@ -0,0 +1,19 @@
+/* OpenFileDataSource */
+
+#import
+
+@interface OpenFileDataSource : NSObject
+{
+ IBOutlet NSTableView *forkTableView;
+}
+@end
+
+@interface OpenPanelDelegate : NSObject
+{
+ id originalDelegate;
+}
+@end
+
+@interface NSSavePanel (ResKnife)
+- (NSBrowser *)browser;
+@end
\ No newline at end of file
diff --git a/Cocoa/Classes/OpenFileDataSource.m b/Cocoa/Classes/OpenFileDataSource.m
new file mode 100644
index 0000000..20008c2
--- /dev/null
+++ b/Cocoa/Classes/OpenFileDataSource.m
@@ -0,0 +1,113 @@
+#import "OpenFileDataSource.h"
+#import
+#import
+
+struct directoryinfo {
+ÊÊ unsigned long length;
+ÊÊ u_int32_t dirid;
+};
+
+struct dunnowhat
+{
+ unsigned long length;
+ u_int32_t data1;
+ u_int32_t data2;
+ u_int32_t data3;
+ u_int32_t data4;
+ u_int32_t data5;
+ u_int32_t data6;
+};
+
+@implementation OpenFileDataSource
+
+//get action method and target of browser, intercept (or re-route and call it myself)
+
+/* NSTableView data source protocol implementation */
+- (int)numberOfRowsInTableView:(NSTableView *)tableView
+{
+ NSBrowser *browser = [(NSOpenPanel *)[tableView window] browser];
+ if( [[browser selectedCells] count] == 1 )
+ {
+ // only one file is selected, parse it for forks
+/* const char *path = [[browser path] cString];
+ struct attrlist attributes;
+ struct directoryinfo fileinfo;
+
+ NSLog( @"%s", path );
+// memset( &attributes, 0, sizeof(struct attrlist) );
+ bzero( &attributes, sizeof(struct attrlist) );
+ attributes.bitmapcount = ATTR_BIT_MAP_COUNT;
+// attributes.fileattr = ATTR_FILE_FORKCOUNT;
+ attributes.commonattr = ATTR_CMN_OBJID;
+ int result = getattrlist( path, &attributes, &fileinfo, sizeof(struct directoryinfo), 0 );
+ NSLog( @"%d", result );
+ if( result != 0 ) return 0;
+ NSLog( @"%d", fileinfo.length );
+ NSLog( @"%d", fileinfo.dirid );
+*/
+ struct attrlist alist;
+ struct directoryinfo dirinfo;
+ char *path = [[browser path] cString];
+ bzero(&alist, sizeof(alist));
+ alist.bitmapcount = 5;
+ alist.commonattr = ATTR_CMN_OBJID;
+ int result = getattrlist(path, &alist, &dirinfo, sizeof(dirinfo), 0);
+ printf("result: %d; directory id: %lu; %s\n", result, dirinfo.dirid, path);
+
+ return 3;
+ }
+
+ // multiple/no selected files, return nothing
+ else return 0;
+}
+
+- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
+{
+ return nil;
+}
+
+- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(int)row
+{
+ ;
+}
+
+/*
+ NSLog( [browser path] );
+ CatPositionRec forkIterator;
+ forkIterator.initialize = 0;
+ FSIterateForks( FSRef *ref, &forkIterator, NULL, NULL, NULL );
+*/
+
+@end
+
+@implementation OpenPanelDelegate
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
+{
+/* NSMethodSignature *sig;
+ NS_DURING
+ sig = [super methodSignatureForSelector:selector];
+ NS_HANDLER
+ sig = [originalDelegate methodSignatureForSelector:selector];
+ NS_ENDHANDLER
+ return sig; */
+ return [originalDelegate methodSignatureForSelector:selector];
+}
+
+- (void)forwardInvocation:(NSInvocation *)invocation
+{
+ if( [originalDelegate respondsToSelector:[invocation selector]] )
+ [invocation invokeWithTarget:originalDelegate];
+ else [self doesNotRecognizeSelector:[invocation selector]];
+}
+
+@end
+
+@implementation NSSavePanel (ResKnife)
+
+- (NSBrowser *)browser
+{
+ return _browser;
+}
+
+@end
\ No newline at end of file
diff --git a/Cocoa/Classes/PasteboardDocument.h b/Cocoa/Classes/PasteboardDocument.h
new file mode 100644
index 0000000..c3c5714
--- /dev/null
+++ b/Cocoa/Classes/PasteboardDocument.h
@@ -0,0 +1,11 @@
+#import
+#import "ResourceDocument.h"
+
+@interface PasteboardDocument : ResourceDocument
+{
+ unsigned long generalChangeCount; // change count for the general pasteboard
+}
+
+- (void)readPasteboard:(NSString *)pbName;
+
+@end
diff --git a/Cocoa/Classes/PasteboardDocument.m b/Cocoa/Classes/PasteboardDocument.m
new file mode 100644
index 0000000..dcabc6d
--- /dev/null
+++ b/Cocoa/Classes/PasteboardDocument.m
@@ -0,0 +1,43 @@
+#import "PasteboardDocument.h"
+#import "Resource.h"
+
+@implementation PasteboardDocument
+
+- (id)init
+{
+ self = [super init];
+ if( self )
+ {
+ [self readPasteboard:NSGeneralPboard];
+ }
+ return self;
+}
+
+- (void)readPasteboard:(NSString *)pbName
+{
+ NSPasteboard *pb = [NSPasteboard pasteboardWithName:pbName];
+ NSArray *types = [pb types];
+ NSEnumerator *enumerator = [types objectEnumerator];
+ NSString *currentType;
+
+ [[self undoManager] disableUndoRegistration];
+ while( currentType = [enumerator nextObject] )
+ {
+ // create the resource & add it to the array
+ NSString *name = pbName;
+ NSString *type;
+ NS_DURING
+ type = [currentType substringToIndex:3];
+ NS_HANDLER
+ type = currentType;
+ NS_ENDHANDLER
+ NSNumber *resID = [NSNumber numberWithShort:0];
+ NSNumber *attributes = [NSNumber numberWithShort:0];
+ NSData *data = [pb dataForType:type];
+ Resource *resource = [Resource resourceOfType:type andID:resID withName:name andAttributes:attributes data:data];
+ [resources addObject:resource]; // array retains resource
+ }
+ [[self undoManager] enableUndoRegistration];
+}
+
+@end
diff --git a/Cocoa/Classes/PasteboardWindowController.h b/Cocoa/Classes/PasteboardWindowController.h
new file mode 100644
index 0000000..9dfa4d9
--- /dev/null
+++ b/Cocoa/Classes/PasteboardWindowController.h
@@ -0,0 +1,9 @@
+#import
+
+@interface PasteboardWindowController : NSWindowController
+{
+}
+
++ (id)sharedPasteboardWindowController;
+
+@end
\ No newline at end of file
diff --git a/Cocoa/Classes/PasteboardWindowController.m b/Cocoa/Classes/PasteboardWindowController.m
new file mode 100644
index 0000000..01ff53c
--- /dev/null
+++ b/Cocoa/Classes/PasteboardWindowController.m
@@ -0,0 +1,20 @@
+#import "PasteboardWindowController.h"
+
+@implementation PasteboardWindowController
+
+- (id)init
+{
+ self = [self initWithWindowNibName:@"ResourceDocument"];
+ if( self ) [self setWindowFrameAutosaveName:@"PasteboardWindow"];
+ return self;
+}
+
++ (id)sharedPasteboardWindowController
+{
+ static PasteboardWindowController *sharedPasteboardWindowController = nil;
+ if( !sharedPasteboardWindowController )
+ sharedPasteboardWindowController = [[PasteboardWindowController allocWithZone:[self zone]] init];
+ return sharedPasteboardWindowController;
+}
+
+@end
\ No newline at end of file
diff --git a/Cocoa/Classes/RKDocumentController.h b/Cocoa/Classes/RKDocumentController.h
new file mode 100644
index 0000000..d5123f7
--- /dev/null
+++ b/Cocoa/Classes/RKDocumentController.h
@@ -0,0 +1,6 @@
+#import
+
+@interface RKDocumentController : NSDocumentController
+{
+}
+@end
diff --git a/Cocoa/Classes/RKDocumentController.m b/Cocoa/Classes/RKDocumentController.m
new file mode 100644
index 0000000..96bcb17
--- /dev/null
+++ b/Cocoa/Classes/RKDocumentController.m
@@ -0,0 +1,29 @@
+#import "RKDocumentController.h"
+#import "ApplicationDelegate.h"
+#import "OpenFileDataSource.h"
+
+@implementation RKDocumentController
+
+// because I swap the isa pointer I can't add instance variables, so use statics instead (there will only ever be one RKDocumentController)
+static id oldDelegate = nil;
+
+- (id)init
+{
+ self = [super init];
+ if( self )
+ {
+ // for some reason calling -[super init] causes a new instance of self to be returned (which is not of my subclass) so to get my overridden methods called again, I have to do this...
+ isa = [RKDocumentController class];
+ oldDelegate = [[NSOpenPanel openPanel] delegate];
+ [[NSOpenPanel openPanel] setDelegate:[[[OpenPanelDelegate alloc] init] autorelease]];
+ }
+ return self;
+}
+
+- (int)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)extensions
+{
+ [openPanel setAccessoryView:[(ApplicationDelegate *)[NSApp delegate] openAuxView]];
+ return [super runModalOpenPanel:openPanel forTypes:extensions];
+}
+
+@end
diff --git a/Cocoa/Classes/Resource.h b/Cocoa/Classes/Resource.h
index bf24153..bf0909a 100644
--- a/Cocoa/Classes/Resource.h
+++ b/Cocoa/Classes/Resource.h
@@ -6,6 +6,7 @@
@private
// flags
BOOL dirty;
+ NSString *representedFork;
// resource information
NSString *name;
@@ -17,12 +18,17 @@
NSData *data;
}
+// accessor methods not part of the protocol
- (void)setDirty:(BOOL)newValue;
+- (NSString *)representedFork;
+- (void)setRepresentedFork:(NSString *)forkName;
+// init methods
- (id)initWithType:(NSString *)typeValue andID:(NSNumber *)resIDValue;
- (id)initWithType:(NSString *)typeValue andID:(NSNumber *)resIDValue withName:(NSString *)nameValue andAttributes:(NSNumber *)attributesValue;
- (id)initWithType:(NSString *)typeValue andID:(NSNumber *)resIDValue withName:(NSString *)nameValue andAttributes:(NSNumber *)attributesValue data:(NSData *)dataValue;
+// autoreleased resource methods
+ (id)resourceOfType:(NSString *)typeValue andID:(NSNumber *)resIDValue;
+ (id)resourceOfType:(NSString *)typeValue andID:(NSNumber *)resIDValue withName:(NSString *)nameValue andAttributes:(NSNumber *)attributesValue;
+ (id)resourceOfType:(NSString *)typeValue andID:(NSNumber *)resIDValue withName:(NSString *)nameValue andAttributes:(NSNumber *)attributesValue data:(NSData *)dataValue;
diff --git a/Cocoa/Classes/Resource.m b/Cocoa/Classes/Resource.m
index 1acd289..6c0645a 100644
--- a/Cocoa/Classes/Resource.m
+++ b/Cocoa/Classes/Resource.m
@@ -30,6 +30,7 @@ NSString *RKResourcePboardType = @"RKResourcePboardType";
// sets values directly for speed reasons (less messaging overhead)
self = [super init];
dirty = NO;
+ representedFork = nil;
name = [nameValue copy];
type = [typeValue copy];
resID = [resIDValue copy];
@@ -122,6 +123,7 @@ NSString *RKResourcePboardType = @"RKResourcePboardType";
- (void)dealloc
{
+ [representedFork release];
[name release];
[type release];
[resID release];
@@ -154,6 +156,16 @@ NSString *RKResourcePboardType = @"RKResourcePboardType";
[[NSNotificationCenter defaultCenter] postNotificationName:ResourceDidChangeNotification object:self];
}
+- (NSString *)representedFork
+{
+ return representedFork;
+}
+
+- (void)setRepresentedFork:(NSString *)forkName
+{
+ representedFork = [forkName copy];
+}
+
- (NSString *)name
{
return name;
diff --git a/Cocoa/Classes/ResourceDocument.h b/Cocoa/Classes/ResourceDocument.h
index 75e4610..283a077 100644
--- a/Cocoa/Classes/ResourceDocument.h
+++ b/Cocoa/Classes/ResourceDocument.h
@@ -42,6 +42,7 @@
- (void)resourceTypeWillChange:(NSNotification *)notification;
- (void)resourceAttributesWillChange:(NSNotification *)notification;
+- (BOOL)readFork:(NSString *)forkName asStreamFromFile:(NSString *)fileName;
- (BOOL)readResourceMap:(SInt16)fileRefNum;
- (BOOL)writeResourceMap:(SInt16)fileRefNum;
diff --git a/Cocoa/Classes/ResourceDocument.m b/Cocoa/Classes/ResourceDocument.m
index c276569..4142e61 100644
--- a/Cocoa/Classes/ResourceDocument.m
+++ b/Cocoa/Classes/ResourceDocument.m
@@ -288,9 +288,10 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
- (void)openResourceUsingEditor:(Resource *)resource
{
-#warning openResourceUsingEditor: shortcuts to NovaTools !!
+// #warning openResourceUsingEditor: shortcuts to NovaTools !!
// opens resource in template using TMPL resource with name templateName
- NSBundle *editor = [NSBundle bundleWithPath:[[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"NovaTools.plugin"]];
+// NSBundle *editor = [NSBundle bundleWithPath:[[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"NovaTools.plugin"]];
+ NSBundle *editor = [NSBundle bundleWithPath:[[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@ Editor.plugin", [resource type]]]];
// open the resources, passing in the template to use
if( editor /*&& [[editor principalClass] respondsToSelector:@selector(initWithResource:)]*/ )
@@ -339,6 +340,7 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
NSData *data = [(Resource *)[outlineView itemAtRow:[outlineView selectedRow]] data];
if( data && [data length] != 0 )
{
+ // bug: plays sound synchronously in main thread!
SndListPtr sndPtr = (SndListPtr) [data bytes];
SndPlay( nil, &sndPtr, false );
}
@@ -529,7 +531,11 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
NSLog( @"Opening Resource fork failed, trying data fork..." );
error = FSOpenResourceFile( fileRef, 0, nil, fsRdPerm, &fileRefNum);
}
- else fork = resourceForkName;
+ else
+ {
+ fork = resourceForkName;
+ [self readFork:@"" asStreamFromFile:fileName]; // bug: only reads data fork for now, need to scan file for other forks too
+ }
SetResLoad( true ); // restore resource loading as soon as is possible
// read the resources (without spawning thousands of undos for resource creation)
@@ -551,19 +557,38 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
return succeeded;
}
+- (BOOL)readFork:(NSString *)forkName asStreamFromFile:(NSString *)fileName
+{
+ NSData *data = [NSData dataWithContentsOfFile:fileName];
+ Resource *resource = [Resource resourceOfType:@"" andID:0 withName:NSLocalizedString(@"Data Fork", nil) andAttributes:0 data:data];
+ if( data && resource )
+ {
+ /* NTFS Note: When running SFM (Services for Macintosh) a Windows NT-based system (including 2000 & XP) serving NTFS-formatted drives stores Mac resource forks in a stream named "AFP_Resource". The finder info/attributes are stored in a stream called "Afp_AfpInfo". The default data fork stream is called "$DATA" and any of these can be accessed thus: "c:\filename.txt:forkname".
+ As a result, ResKnife prohibits creation of forks with the following names: "" (empty string, Mac data fork name),
+ "$DATA" (NTFS data fork name),
+ "AFP_Resource" and "Afp_AfpInfo".
+ It is perfectly legal in ResKnife to read in forks of these names when accessing a shared NTFS drive from a server running SFM. */
+
+ [resource setRepresentedFork:forkName];
+ [resources insertObject:resource atIndex:0];
+ return YES;
+ }
+ else return NO;
+}
+
- (BOOL)readResourceMap:(SInt16)fileRefNum
{
OSStatus error = noErr;
- unsigned short i, j, n;
+ unsigned short n;
SInt16 oldResFile = CurResFile();
UseResFile( fileRefNum );
- for( i = 1; i <= Count1Types(); i++ )
+ for( unsigned short i = 1; i <= Count1Types(); i++ )
{
ResType resType;
Get1IndType( &resType, i );
n = Count1Resources( resType );
- for( j = 1; j <= n; j++ )
+ for( unsigned short j = 1; j <= n; j++ )
{
Str255 nameStr;
long sizeLong;
@@ -586,15 +611,13 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
HLockHi( resourceHandle );
// create the resource & add it to the array
- {
- NSString *name = [NSString stringWithCString:&nameStr[1] length:nameStr[0]];
- NSString *type = [NSString stringWithCString:(char *) &resType length:4];
- NSNumber *resID = [NSNumber numberWithShort:resIDShort];
- NSNumber *attributes = [NSNumber numberWithShort:attrsShort];
- NSData *data = [NSData dataWithBytes:*resourceHandle length:sizeLong];
- Resource *resource = [Resource resourceOfType:type andID:resID withName:name andAttributes:attributes data:data];
- [resources addObject:resource]; // array retains resource
- }
+ NSString *name = [NSString stringWithCString:&nameStr[1] length:nameStr[0]];
+ NSString *type = [NSString stringWithCString:(char *) &resType length:4];
+ NSNumber *resID = [NSNumber numberWithShort:resIDShort];
+ NSNumber *attributes = [NSNumber numberWithShort:attrsShort];
+ NSData *data = [NSData dataWithBytes:*resourceHandle length:sizeLong];
+ Resource *resource = [Resource resourceOfType:type andID:resID withName:name andAttributes:attributes data:data];
+ [resources addObject:resource]; // array retains resource
HUnlock( resourceHandle );
ReleaseResource( resourceHandle );
@@ -624,6 +647,17 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
error = FSCreateResourceFile( parentRef, [[fileName lastPathComponent] length], (UniChar *) uniname, kFSCatInfoNone, nil, fork->length, (UniChar *) &fork->unicode, fileRef, fileSpec );
if( !error )
error = FSOpenResourceFile( fileRef, fork->length, (UniChar *) &fork->unicode, fsWrPerm, &fileRefNum);
+
+ /* at some point make use of:
+
+ FSCreateResourceFork( const FSRef * ref,
+ UniCharCount forkNameLength,
+ const UniChar * forkName, // can be NULL
+ UInt32 flags);
+
+ Creates the named fork and initalises as a resource fork
+
+ Mac OS 10.2 or later */
}
else
{
@@ -654,12 +688,13 @@ static NSString *RKShowInfoItemIdentifier = @"com.nickshanks.resknife.toolbar.sh
for( i = 0; i < [resources count]; i++ )
{
Resource *resource = [resources objectAtIndex:i];
+ if( [resource representedFork] != nil ) continue;
Str255 nameStr;
ResType resType;
short resIDShort = [[resource resID] shortValue];
short attrsShort = [[resource attributes] shortValue];
- Handle resourceHandle = NewHandleClear( [[resource data] length] );
+ Handle resourceHandle = NewHandleClear( [[resource data] length] );
nameStr[0] = [[resource name] cStringLength];
BlockMoveData( [[resource name] cString], &nameStr[1], nameStr[0] );
diff --git a/Cocoa/Classes/ResourceNameCell.m b/Cocoa/Classes/ResourceNameCell.m
index 2d3528e..375fd3a 100644
--- a/Cocoa/Classes/ResourceNameCell.m
+++ b/Cocoa/Classes/ResourceNameCell.m
@@ -42,12 +42,15 @@
- (void)setImage:(NSImage *)newImage
{
- // save image and set to 16x16 pixels
- id old = image;
- image = [newImage retain];
- [image setScalesWhenResized:YES];
- [image setSize:NSMakeSize(16,16)];
- [old autorelease];
+ if( image != newImage )
+ {
+ // save image and set to 16x16 pixels
+ id old = image;
+ image = [newImage retain];
+ [image setScalesWhenResized:YES];
+ [image setSize:NSMakeSize(16,16)];
+ [old release];
+ }
}
- (NSRect)imageFrameForCellFrame:(NSRect)cellFrame
@@ -104,7 +107,8 @@
// get image frame
NSDivideRect( cellFrame, &imageFrame, &cellFrame, 3 + imageSize.width, NSMinXEdge );
- if( [self drawsBackground] )
+// NSLog( "drawing name cell with bg: %@ colour: %@", [self drawsBackground]? @"YES":@"NO", [self backgroundColor] );
+ if( [self drawsBackground] && ![self isHighlighted] /* ![self cellAttribute:NSCellHighlighted] */ )
{
[[self backgroundColor] set];
NSRectFill(imageFrame);
diff --git a/Cocoa/English.lproj/Application.nib/classes.nib b/Cocoa/English.lproj/Application.nib/classes.nib
index de7a0f3..1de604f 100644
--- a/Cocoa/English.lproj/Application.nib/classes.nib
+++ b/Cocoa/English.lproj/Application.nib/classes.nib
@@ -1,9 +1,10 @@
{
IBClasses = (
{
- ACTIONS = {showInfo = id; showPrefs = id; };
+ ACTIONS = {showInfo = id; showPasteboard = id; showPrefs = id; };
CLASS = ApplicationDelegate;
LANGUAGE = ObjC;
+ OUTLETS = {forkTableView = NSTableView; openAuxView = NSView; };
SUPERCLASS = NSObject;
},
{
@@ -29,6 +30,12 @@
CLASS = FirstResponder;
LANGUAGE = ObjC;
SUPERCLASS = NSObject;
+ },
+ {
+ CLASS = OpenFileDataSource;
+ LANGUAGE = ObjC;
+ OUTLETS = {forkTableView = NSTableView; };
+ SUPERCLASS = NSObject;
}
);
IBVersion = 1;
diff --git a/Cocoa/English.lproj/Application.nib/info.nib b/Cocoa/English.lproj/Application.nib/info.nib
index 0dbb5f7..d569ca4 100644
--- a/Cocoa/English.lproj/Application.nib/info.nib
+++ b/Cocoa/English.lproj/Application.nib/info.nib
@@ -1,17 +1,24 @@
-
-
+
+
IBDocumentLocation
- 159 91 432 426 0 0 1152 848
+ 535 90 432 426 0 0 1600 1002
IBEditorPositions
+ 246
+ 630 582 340 222 0 0 1600 1002
29
- 59 443 347 44 0 0 1152 848
+ 92 528 347 44 0 0 1600 1002
IBFramework Version
- 263.2
+ 286.0
+ IBOpenObjects
+
+ 29
+ 246
+
IBSystem Version
- 5Q125
+ 6G30
diff --git a/Cocoa/English.lproj/Application.nib/objects.nib b/Cocoa/English.lproj/Application.nib/objects.nib
index 27ae403..8f05725 100644
Binary files a/Cocoa/English.lproj/Application.nib/objects.nib and b/Cocoa/English.lproj/Application.nib/objects.nib differ
diff --git a/Cocoa/English.lproj/Localizable.strings b/Cocoa/English.lproj/Localizable.strings
index 6891127..dd8f764 100644
Binary files a/Cocoa/English.lproj/Localizable.strings and b/Cocoa/English.lproj/Localizable.strings differ
diff --git a/Cocoa/English.lproj/ResourceDocument.nib/info.nib b/Cocoa/English.lproj/ResourceDocument.nib/info.nib
index 56fe40c..bccdc20 100644
--- a/Cocoa/English.lproj/ResourceDocument.nib/info.nib
+++ b/Cocoa/English.lproj/ResourceDocument.nib/info.nib
@@ -3,11 +3,11 @@
IBDocumentLocation
- 75 336 486 325 0 0 1024 746
+ 71 141 530 549 0 0 1600 1002
IBFramework Version
286.0
IBSystem Version
- 6C115
+ 6F21
IBUserGuides
CreateResourceSheet
diff --git a/Cocoa/English.lproj/ResourceDocument.nib/objects.nib b/Cocoa/English.lproj/ResourceDocument.nib/objects.nib
index 361a601..b543e90 100644
Binary files a/Cocoa/English.lproj/ResourceDocument.nib/objects.nib and b/Cocoa/English.lproj/ResourceDocument.nib/objects.nib differ
diff --git a/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/info.nib b/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/info.nib
index 2380e24..b13ed8d 100644
--- a/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/info.nib
+++ b/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/info.nib
@@ -11,6 +11,6 @@
6
IBSystem Version
- 6C115
+ 6F21
diff --git a/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/objects.nib b/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/objects.nib
index 826e49a..ef83cd0 100644
Binary files a/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/objects.nib and b/Cocoa/Plug-Ins/Hex Editor/English.lproj/HexWindow.nib/objects.nib differ
diff --git a/Cocoa/Plug-Ins/Hex Editor/HexTextView.m b/Cocoa/Plug-Ins/Hex Editor/HexTextView.m
index 6f9e74e..d554a08 100644
--- a/Cocoa/Plug-Ins/Hex Editor/HexTextView.m
+++ b/Cocoa/Plug-Ins/Hex Editor/HexTextView.m
@@ -220,9 +220,11 @@
return charIndex;
}
-- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal
+- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
{
- return NSDragOperationCopy | NSDragOperationMove | NSDragOperationGeneric;
+/* if( isLocal ) return NSDragOperationEvery;
+ else return NSDragOperationCopy;
+*/ return NSDragOperationCopy | NSDragOperationMove | NSDragOperationGeneric;
}
static NSRange draggedRange;
@@ -234,16 +236,18 @@ static NSRange draggedRange;
- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)point operation:(NSDragOperation)operation
{
- if( operation == NSDragOperationMove )
+/* if( operation == NSDragOperationMove )
{
NSRange selection = [self rangeForUserTextChange];
[self editData:[[[self window] windowController] data] replaceBytesInRange:draggedRange withData:[NSData data]];
// set the new selection/insertion point
+ selection.location -= draggedRange.length;
+ selection.length = draggedRange.length;
if( selection.location > draggedRange.location )
selection.location -= draggedRange.length;
[self setSelectedRange:selection];
- }
+ }*/
}
- (NSDragOperation)draggingUpdated:(id )sender
@@ -256,13 +260,44 @@ static NSRange draggedRange;
- (BOOL)performDragOperation:(id )sender
{
+ // get the insertion point location
NSPasteboard *pb = [sender draggingPasteboard];
NSData *pastedData = [pb dataForType:NSStringPboardType];
int charIndex = [self _insertionGlyphIndexForDrag:sender];
- if( self == [[self delegate] hex] ) charIndex /= 3;
+
+ // convert hex string to data
if( [sender draggingSource] == [[self delegate] hex] )
pastedData = [[[self delegate] hexToAscii:pastedData] dataUsingEncoding:NSASCIIStringEncoding];
+
+ if( [sender draggingSource] == [[self delegate] hex] || [sender draggingSource] == [[self delegate] ascii] )
+// if( operation == NSDragOperationMove )
+ {
+ NSRange deleteRange = draggedRange;
+ if( self == [[self delegate] hex] )
+ {
+ deleteRange.location /= 3;
+ deleteRange.length += 1;
+ deleteRange.length /= 3;
+ }
+
+ // if moving the data, remove the selection from the data
+ [self editData:[[[self window] windowController] data] replaceBytesInRange:deleteRange withData:[NSData data]];
+
+ // compensate for already removing the dragged data
+ if( charIndex > draggedRange.location )
+ charIndex -= draggedRange.length;
+ }
+
+ // insert data at insertion point
+ if( self == [[self delegate] hex] ) charIndex /= 3;
[self editData:[[[self window] windowController] data] replaceBytesInRange:NSMakeRange(charIndex,0) withData:pastedData];
+
+ // set the new selection/insertion point
+ NSRange selection = [self rangeForUserTextChange];
+ selection.location -= draggedRange.length;
+ selection.length = draggedRange.length;
+ [self setSelectedRange:selection];
+
return YES;
}
diff --git a/Cocoa/Plug-Ins/Hex Editor/HexWindowController.m b/Cocoa/Plug-Ins/Hex Editor/HexWindowController.m
index 46636b0..d2e11e9 100644
--- a/Cocoa/Plug-Ins/Hex Editor/HexWindowController.m
+++ b/Cocoa/Plug-Ins/Hex Editor/HexWindowController.m
@@ -2,6 +2,22 @@
#import "HexTextView.h"
#import "FindSheetController.h"
+/*
+OSStatus Plug_InitInstance( Plug_PlugInRef plug, Plug_ResourceRef resource )
+{
+ // init function called by carbon apps
+ if( NSApplicationLoad() )
+ {
+ id newResource = [NSClassFromString(@"Resource") resourceOfType:[NSString stringWithCString:length:4] andID:[NSNumber numberWithInt:] withName:[NSString stringWithCString:length:] andAttributes:[NSNumber numberWithUnsignedShort:] data:[NSData dataWithBytes:length:]];
+ if( !newResource ) return paramErr;
+ id windowController = [[HexWindowController alloc] initWithResource:newResource];
+ if( !windowController ) return paramErr;
+ else return noErr;
+ }
+ else return paramErr;
+}
+*/
+
@implementation HexWindowController
- (id)initWithResource:(id)newResource
@@ -33,14 +49,14 @@
- (id)initWithResources:(id)newResource, ...
{
- [undoManager release];
return nil;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
- [(id)resource release];
+ [(id)resource autorelease];
+ [undoManager release];
[super dealloc];
}
diff --git a/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/classes.nib b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/classes.nib
new file mode 100644
index 0000000..e3749e8
--- /dev/null
+++ b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/classes.nib
@@ -0,0 +1,12 @@
+{
+ IBClasses = (
+ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ CLASS = PictWindowController;
+ LANGUAGE = ObjC;
+ OUTLETS = {imageView = NSImageView; resource = id; };
+ SUPERCLASS = NSWindowController;
+ }
+ );
+ IBVersion = 1;
+}
\ No newline at end of file
diff --git a/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/info.nib b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/info.nib
new file mode 100644
index 0000000..4e93136
--- /dev/null
+++ b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/info.nib
@@ -0,0 +1,16 @@
+
+
+
+
+ IBDocumentLocation
+ 445 178 356 240 0 0 1600 1002
+ IBFramework Version
+ 286.0
+ IBLockedObjects
+
+ 8
+
+ IBSystem Version
+ 6F21
+
+
diff --git a/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/objects.nib b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/objects.nib
new file mode 100644
index 0000000..42e2757
Binary files /dev/null and b/Cocoa/Plug-Ins/PICT Editor/English.lproj/PictWindow.nib/objects.nib differ
diff --git a/Cocoa/Plug-Ins/PICT Editor/PictWindowController.h b/Cocoa/Plug-Ins/PICT Editor/PictWindowController.h
new file mode 100644
index 0000000..6118af9
--- /dev/null
+++ b/Cocoa/Plug-Ins/PICT Editor/PictWindowController.h
@@ -0,0 +1,13 @@
+#import
+
+#import "ResKnifePluginProtocol.h"
+#import "ResKnifeResourceProtocol.h"
+
+@interface PictWindowController : NSWindowController
+{
+ IBOutlet NSImageView *imageView;
+
+ id resource;
+}
+
+@end
diff --git a/Cocoa/Plug-Ins/PICT Editor/PictWindowController.m b/Cocoa/Plug-Ins/PICT Editor/PictWindowController.m
new file mode 100644
index 0000000..a6f19aa
--- /dev/null
+++ b/Cocoa/Plug-Ins/PICT Editor/PictWindowController.m
@@ -0,0 +1,77 @@
+#import "PictWindowController.h"
+#import "Element.h"
+#import
+
+@implementation PictWindowController
+
+- (id)initWithResource:(id)newResource
+{
+ self = [self initWithWindowNibName:@"PictWindow"];
+ if( !self ) return nil;
+
+ resource = [newResource retain];
+
+ // load the window from the nib
+ [self window];
+ return self;
+}
+
+- (id)initWithResources:(id)newResource, ...
+{
+ return nil;
+}
+
+- (void)dealloc
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [(id)resource autorelease];
+ [super dealloc];
+}
+
+- (void)windowDidLoad
+{
+ [super windowDidLoad];
+
+ // set the window's title
+ if( ![[resource name] isEqualToString:@""] )
+ {
+ [[self window] setTitle:[resource name]];
+ SetWindowAlternateTitle( (WindowRef) [[self window] windowRef], (CFStringRef) [NSString stringWithFormat:@"%@ %@: Ò%@Ó", [resource type], [resource resID], [resource name]] );
+ }
+
+ NSImage *image = [[[NSImage alloc] initWithData:[resource data]] autorelease];
+ if( image )
+ {
+ // resize the window to the size of the image
+ [[self window] setContentSize:[image size]];
+
+ // update image view with PICT
+ [imageView setImage:image];
+ }
+
+ // we don't want this notification until we have a window! (Only register for notifications on the resource we're editing)
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resourceDataDidChange:) name:ResourceDataDidChangeNotification object:resource];
+
+ // finally, show the window
+ [self showWindow:self];
+}
+
+- (void)resourceDataDidChange:(NSNotification *)notification
+{
+ // ensure it's our resource which got changed (should always be true, we don't register for notifications on other resource objects)
+ if( [notification object] == (id)resource )
+ {
+ // refresh image
+ NSImage *image = [[[NSImage alloc] initWithData:[resource data]] autorelease];
+ if( image )
+ {
+ // resize the window to the size of the image
+ [[self window] setContentSize:[image size]];
+
+ // update image view with PICT
+ [imageView setImage:image];
+ }
+ }
+}
+
+@end
diff --git a/Cocoa/Plug-Ins/PICT Editor/SupportedTypes.plist b/Cocoa/Plug-Ins/PICT Editor/SupportedTypes.plist
new file mode 100644
index 0000000..3858e0b
--- /dev/null
+++ b/Cocoa/Plug-Ins/PICT Editor/SupportedTypes.plist
@@ -0,0 +1,10 @@
+
+
+
+
+ SupportedTypes
+
+ PICT
+
+
+
diff --git a/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/info.nib b/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/info.nib
index 5693dad..e6318a9 100644
--- a/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/info.nib
+++ b/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/info.nib
@@ -23,6 +23,10 @@
5
IBSystem Version
+<<<<<<< info.nib
+ 6F21
+=======
6G30
+>>>>>>> 1.2
diff --git a/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/objects.nib b/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/objects.nib
index 90568e5..c330634 100644
Binary files a/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/objects.nib and b/Cocoa/Plug-Ins/Template Editor/English.lproj/TemplateWindow.nib/objects.nib differ
diff --git a/Hex Editor/Classes/HexUtility.cpp b/Hex Editor/Classes/HexUtility.cpp
new file mode 100644
index 0000000..145a3f7
--- /dev/null
+++ b/Hex Editor/Classes/HexUtility.cpp
@@ -0,0 +1,233 @@
+#include "HexUtility.h"
+
+ /**********************/
+ /* QUICKDRAW ROUTINES */
+/**********************/
+
+/*** SET COLOUR ***/
+void SetColour( RGBColor *colour, UInt16 red, UInt16 green, UInt16 blue )
+{
+ colour->red = red;
+ colour->green = green;
+ colour->blue = blue;
+}
+
+/*** MAKE LOCAL ***/
+void MakeLocal( WindowRef window, Point globalPoint, Point *localPoint )
+{
+ GrafPtr oldPort;
+ GetPort( &oldPort );
+ SetPortWindowPort( window );
+
+ localPoint->h = globalPoint.h;
+ localPoint->v = globalPoint.v;
+ GlobalToLocal( localPoint );
+
+ SetPort( oldPort );
+}
+
+/*** MAKE GLOBAL ***/
+void MakeGlobal( WindowRef window, Point localPoint, Point *globalPoint )
+{
+ GrafPtr oldPort;
+ GetPort( &oldPort );
+ SetPortWindowPort( window );
+
+ globalPoint->h = localPoint.h;
+ globalPoint->v = localPoint.v;
+ LocalToGlobal( globalPoint );
+
+ SetPort( oldPort );
+}
+
+ /*****************************/
+ /* HEX <==> ASCII CONVERSION */
+/*****************************/
+
+/*** ASCII TO TEXT ***/
+void AsciiToText( char *source, char *dest, unsigned long size )
+{
+ char ascii = 0x00, text = 0x00;
+ unsigned long sourceOffset = 0, destOffset = 0;
+ while( sourceOffset < size )
+ {
+ ascii = *(source + sourceOffset);
+ if( ascii < 0x20 || ascii >= 0x7F ) text = (char) 0x2E; // full stop
+ else if( ascii == 0x20 ) text = (char) 0xCA; // nbsp
+ else text = ascii;
+ *(dest + destOffset++) = text;
+ sourceOffset++;
+ }
+}
+
+/*** ASCII TO HEX ***/
+void AsciiToHex( char *source, char *dest, unsigned long size )
+{
+ char hex1 = 0x00, hex2 = 0x00;
+ unsigned long sourceOffset = 0, destOffset = 0;
+ while( sourceOffset < size )
+ {
+ hex1 = *(source + sourceOffset);
+ hex2 = *(source + sourceOffset);
+ hex1 >>= 4;
+ hex1 &= 0x0F;
+ hex2 &= 0x0F;
+ hex1 += (hex1 < 10)? 0x30 : 0x37;
+ hex2 += (hex2 < 10)? 0x30 : 0x37;
+
+ *(dest + destOffset++) = hex1;
+ *(dest + destOffset++) = hex2;
+ *(dest + destOffset++) = 0x20;
+ sourceOffset++;
+ }
+}
+
+/*** HEX TO ASCII ***/
+void HexToAscii( char *source, char *dest, unsigned long size )
+{
+ char currentByte = 0x00, newByte = 0x00, tempByte = 0x00;
+ unsigned long sourceOffset = 0, destOffset = 0;
+ while( sourceOffset < size )
+ {
+ currentByte = *(source + sourceOffset);
+ if( currentByte >= 0x30 && currentByte <= 0x39 ) newByte = currentByte - 0x30; // 0 to 9
+ else if( currentByte >= 0x41 && currentByte <= 0x46 ) newByte = currentByte - 0x37; // A to F
+ else if( currentByte >= 0x61 && currentByte <= 0x66 ) newByte = currentByte - 0x57; // a to f
+ else newByte = 0x00;
+ newByte <<= 4;
+ currentByte = *(source + sourceOffset +1);
+ if( currentByte >= 0x30 && currentByte <= 0x39 ) tempByte = currentByte - 0x30; // 0 to 9
+ else if( currentByte >= 0x41 && currentByte <= 0x46 ) tempByte = currentByte - 0x37; // A to F
+ else if( currentByte >= 0x61 && currentByte <= 0x66 ) tempByte = currentByte - 0x57; // a to f
+ else tempByte = 0x00;
+ newByte += tempByte & 0x0F;
+ *(dest + destOffset++) = newByte;
+ sourceOffset += 3;
+ }
+}
+
+/*** LONG TO HEX ***/
+void LongToHex( char *source, char *dest )
+{
+ // copy of AsciiToHex but with changes as noted
+ char hex1 = 0x00, hex2 = 0x00;
+ unsigned long sourceOffset = 0, destOffset = 0;
+ while( sourceOffset < sizeof(unsigned long) ) // size is always four
+ {
+ hex1 = *(source + sourceOffset);
+ hex2 = *(source + sourceOffset);
+ hex1 >>= 4;
+ hex1 &= 0x0F;
+ hex2 &= 0x0F;
+ hex1 += (hex1 < 10)? 0x30 : 0x37;
+ hex2 += (hex2 < 10)? 0x30 : 0x37;
+
+ *(dest + destOffset++) = hex1;
+ *(dest + destOffset++) = hex2; // no space inserted
+ sourceOffset++;
+ }
+}
+
+ /*******************/
+ /* STRING ROUTINES */
+/*******************/
+
+/*** C STRING LENGTH ***/
+unsigned long CStringLength( char *string )
+{
+ unsigned long length;
+ Boolean end = false;
+ for( length = 0; end == false; length++ )
+ if( *(string + length) == 0x00 ) end = true;
+ return length;
+}
+
+/*** PASCAL STRING LENGTH ***/
+unsigned char PStringLength( unsigned char *string )
+{
+ return *string;
+}
+
+/*** TYPE TO C STRING ***/
+void TypeToCString( const OSType type, char *string )
+{
+ BlockMoveData( &type, &string[0], sizeof(OSType) );
+ string[sizeof(OSType)] = 0x00;
+}
+
+/*** TYPE TO PASCAL STRING ***/
+void TypeToPString( const OSType type, Str255 string )
+{
+ string[0] = sizeof(OSType);
+ BlockMoveData( &type, &string[1], sizeof(OSType) );
+}
+
+/*** TYPE TO CORE FOUNDATION STRING ***/
+void TypeToCFString( const OSType type, CFStringRef *string )
+{
+ char cString[5];
+ TypeToCString( type, (char *) &cString );
+ *string = CFStringCreateWithCString( CFAllocatorGetDefault(), (char *) &cString, kCFStringEncodingMacRoman );
+}
+
+/*** COPY C STRING ***/
+void CopyCString( UInt8 *source, UInt8 *dest )
+{
+// #pragma warning off
+ while( *dest++ = *source++ );
+// #pragma warning reset
+}
+
+/*** COPY PASCAL STRING ***/
+void CopyPString( UInt8 *source, UInt8 *dest )
+{
+ UInt8 length = *source, count;
+ for( count = 0; count <= length; count++ )
+ *dest++ = *source++;
+}
+
+/*** EQUAL C STRINGS ***/
+Boolean EqualCStrings( UInt8 *source, UInt8 *dest )
+{
+ while( *source != 0x00 )
+ if( *source++ != *dest++ ) return false;
+ return true;
+}
+
+/*** EQUAL PASCAL STRINGS ***/
+Boolean EqualPStrings( UInt8 *source, UInt8 *dest )
+{
+ UInt8 length = *source, count;
+ for( count = 0; count <= length; count++ )
+ if( *source++ != *dest++ ) return false;
+ return true;
+}
+
+/*** APPEND ONE PASCAL STRING ONTO ANOTHER ***/
+void AppendPString( Str255 original, ConstStr255Param added )
+{
+ short numberBytes = added[0]; // length of string to be added
+ short totalLength = added[0] + original[0];
+
+ if( totalLength > 255 ) // too long, adjust number of bytes to add
+ {
+ totalLength = 255;
+ numberBytes = totalLength - original[0];
+ }
+
+ BlockMoveData( &added[1], &original[totalLength-numberBytes + 1], numberBytes );
+ original[0] = totalLength; // new length of original string
+ while( ++totalLength <= 255 )
+ original[totalLength] = 0x00; // set rest of string to zero
+}
+
+ /*****************/
+ /* MENU ROUTINES */
+/*****************/
+
+/*** ENABLE MENU COMMAND ***/
+void EnableCommand( MenuRef menu, MenuCommand command, Boolean enable )
+{
+ if( enable ) EnableMenuCommand( menu, command );
+ else DisableMenuCommand( menu, command );
+}
diff --git a/Hex Editor/Classes/HexUtility.h b/Hex Editor/Classes/HexUtility.h
new file mode 100644
index 0000000..18dbaa1
--- /dev/null
+++ b/Hex Editor/Classes/HexUtility.h
@@ -0,0 +1,31 @@
+#include "Hex Editor.h"
+
+#ifndef _ResKnife_HexEditor_Utility_
+#define _ResKnife_HexEditor_Utility_
+
+/* QuickDraw Routines */
+void SetColour( RGBColor *colour, UInt16 red, UInt16 green, UInt16 blue );
+void MakeLocal( WindowRef window, Point globalPoint, Point *localPoint );
+void MakeGlobal( WindowRef window, Point localPoint, Point *globalPoint );
+
+/* ASCII <=> hex */
+void AsciiToText( char *source, char *dest, unsigned long size );
+void AsciiToHex( char *source, char *dest, unsigned long size );
+void HexToAscii( char *source, char *dest, unsigned long size );
+void LongToHex( char *source, char *dest );
+
+/* strings */
+unsigned long CStringLength( char *string );
+unsigned char PStringLength( unsigned char *string );
+void TypeToCString( const OSType type, char *string );
+void TypeToPString( const OSType type, Str255 string );
+void TypeToCFString( const OSType type, CFStringRef *string );
+void CopyCString( UInt8 *source, UInt8 *dest );
+void CopyPString( UInt8 *source, UInt8 *dest );
+Boolean EqualCStrings( UInt8 *source, UInt8 *dest );
+Boolean EqualPStrings( UInt8 *source, UInt8 *dest );
+void AppendPString( Str255 original, ConstStr255Param added );
+
+void EnableCommand( MenuRef menu, MenuCommand command, Boolean enable );
+
+#endif
\ No newline at end of file
diff --git a/HexEditor.graffle b/HexEditor.graffle
new file mode 100644
index 0000000..7b59199
--- /dev/null
+++ b/HexEditor.graffle
@@ -0,0 +1,1065 @@
+
+
+
+
+ CanvasColor
+
+ w
+ 1.000000e+00
+
+ ColumnAlign
+ 0
+ ColumnSpacing
+ 3.600000e+01
+ GraphDocumentVersion
+ 2
+ GraphicsList
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 31
+
+ ID
+ 33
+ Points
+
+ {319.5, 504}
+ {279, 558}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 26
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 31
+
+ ID
+ 32
+ Points
+
+ {276.3, 504}
+ {279, 558}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 25
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 22
+
+ ID
+ 31
+ Points
+
+ {279, 558}
+ {432, 540}
+ {428.227, 373.977}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ Arrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 31
+
+ ID
+ 30
+ Points
+
+ {233.1, 504}
+ {279, 558}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 24
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 11
+
+ ID
+ 29
+ Points
+
+ {321.577, 432}
+ {284.192, 378}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 26
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 11
+
+ ID
+ 28
+ Points
+
+ {271.731, 432}
+ {267.577, 378}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 25
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 24
+
+ ID
+ 27
+ Points
+
+ {250.962, 378}
+ {221.885, 432}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ LineType
+ 1
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 11
+
+
+
+ Bounds
+ {{315, 432}, {63, 72}}
+ Class
+ ShapedGraphic
+ ID
+ 26
+ Shape
+ HorizontalBrackets
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Hex Text View (ASCII)}
+
+
+
+ Bounds
+ {{243, 432}, {63, 72}}
+ Class
+ ShapedGraphic
+ ID
+ 25
+ Shape
+ HorizontalBrackets
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Hex Text View (Hex)}
+
+
+
+ Bounds
+ {{171, 432}, {63, 72}}
+ Class
+ ShapedGraphic
+ ID
+ 24
+ Shape
+ HorizontalBrackets
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Hex Text View (Offset)}
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 22
+
+ ID
+ 23
+ Points
+
+ {297.807, 236.054}
+ {394.189, 314.789}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ Arrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 9
+
+
+
+ Bounds
+ {{369, 306}, {117, 72}}
+ Class
+ ShapedGraphic
+ ID
+ 22
+ Shape
+ Cloud
+ Style
+
+ fill
+
+ Color
+
+ b
+ 1.000000e+00
+ g
+ 8.490366e-01
+ r
+ 9.965038e-01
+
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 HexEditor Delegate}
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 11
+
+ ID
+ 21
+ Points
+
+ {144, 348.527}
+ {207, 349.809}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 17
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 17
+
+ ID
+ 20
+ Points
+
+ {100.788, 239.348}
+ {99.8262, 297}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ Arrow
+
+
+ Tail
+
+ ID
+ 18
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 18
+
+ ID
+ 19
+ Points
+
+ {218.607, 211.5}
+ {146.807, 211.5}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ LineType
+ 1
+ TailArrow
+ Arrow
+
+
+ Tail
+
+ ID
+ 9
+
+
+
+ Bounds
+ {{40.5, 180}, {121.5, 63}}
+ Class
+ ShapedGraphic
+ ID
+ 18
+ Shape
+ Cloud
+ Style
+
+ fill
+
+ Color
+
+ b
+ 1.000000e+00
+ g
+ 9.653430e-01
+ r
+ 7.682484e-01
+
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Find Sheet Controller}
+
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{99, 378}, {37, 12}}
+ Class
+ ShapedGraphic
+ ID
+ 16
+ Shape
+ RoundRect
+ Style
+
+ fill
+
+ Color
+
+ b
+ 1.000000e+00
+ g
+ 7.482798e-01
+ r
+ 4.663317e-01
+
+
+ shadow
+
+ Color
+
+ a
+ 5.000000e-01
+ b
+ 7.500000e-01
+ g
+ 7.500000e-01
+ r
+ 7.500000e-01
+
+
+ stroke
+
+ Draws
+ NO
+
+
+
+
+ Bounds
+ {{54, 297}, {90, 99}}
+ Class
+ ShapedGraphic
+ ID
+ 17
+ Shape
+ Rectangle
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Find\
+Sheet}
+
+
+
+ ID
+ 15
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 12
+
+ ID
+ 14
+ Points
+
+ {267.14, 239.328}
+ {265.695, 306}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ Arrow
+
+
+ Tail
+
+ ID
+ 9
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 9
+
+ ID
+ 13
+ Points
+
+ {266.062, 117}
+ {267.252, 183.589}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 7
+
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{207, 324}, {117, 54}}
+ Class
+ ShapedGraphic
+ ID
+ 11
+ Shape
+ Rectangle
+
+
+ Bounds
+ {{207, 306}, {117, 18}}
+ Class
+ ShapedGraphic
+ ID
+ 12
+ Shape
+ Rectangle
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 HexWindow}
+
+
+
+ ID
+ 10
+
+
+ Bounds
+ {{207, 180}, {121.5, 63}}
+ Class
+ ShapedGraphic
+ ID
+ 9
+ Shape
+ Cloud
+ Style
+
+ fill
+
+ Color
+
+ b
+ 1.000000e+00
+ g
+ 9.653430e-01
+ r
+ 7.682484e-01
+
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Hex Window Controller}
+
+
+
+ Class
+ Group
+ Graphics
+
+
+ Bounds
+ {{225, 63}, {81, 45}}
+ Class
+ ShapedGraphic
+ ID
+ 6
+ Magnets
+
+ {0, 1}
+ {0, -1}
+ {1, 0}
+ {-1, 0}
+
+ Shape
+ DocumentShape
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs20 \cf0 Document}
+
+
+
+ Bounds
+ {{198, 54}, {135, 63}}
+ Class
+ ShapedGraphic
+ ID
+ 7
+ Shape
+ Rectangle
+ Style
+
+ stroke
+
+ Color
+
+ b
+ 0.000000e+00
+ g
+ 0.000000e+00
+ r
+ 0.000000e+00
+
+ Width
+ 2.000000e+00
+
+
+
+
+ Bounds
+ {{198, 36}, {135, 18}}
+ Class
+ ShapedGraphic
+ ID
+ 8
+ Shape
+ Rectangle
+ Style
+
+ shadow
+
+ Color
+
+ a
+ 5.000000e-01
+ w
+ 3.333334e-01
+
+
+ stroke
+
+ Color
+
+ b
+ 0.000000e+00
+ g
+ 0.000000e+00
+ r
+ 0.000000e+00
+
+ Width
+ 2.000000e+00
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 ResourceDocument}
+
+
+
+ ID
+ 5
+
+
+ GridInfo
+
+ ShowsGrid
+ NO
+
+ HPages
+ 1
+ ImageCounter
+ 1
+ IsPalette
+ NO
+ Layers
+
+
+ Lock
+ NO
+ Name
+ Layer 1
+ Print
+ YES
+ View
+ YES
+
+
+ LayoutInfo
+
+ AutoAdjust
+ YES
+ MagneticFieldCenter
+ {0, 0}
+
+ MagnetsEnabled
+ YES
+ PageBreakColor
+
+ w
+ 6.666667e-01
+
+ PageBreaks
+ YES
+ PageSetup
+
+ BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE
+ hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpF5KEhIQITlNT
+ dHJpbmcBlIQBKw9OU1BhZ2VzUGVyU2hlZXSGkoSEhAhOU051bWJlcgCEhAdOU1ZhbHVl
+ AJSEASqEhAFznQGGkoSZmQ5OU0JvdHRvbU1hcmdpboaShJuchIQBZp4khpKEmZkPTlNQ
+ cmludEFsbFBhZ2VzhpKEm5ydnQCGkoSZmQ1OU0pvYkZlYXR1cmVzhpKElpcAhpKEmZkV
+ TlNIb3Jpem9uYWxQYWdpbmF0aW9uhpKEm5ydnQCGkoSZmRROU1ZlcnRpY2FsbHlDZW50
+ ZXJlZIaShJucnZ0BhpKEmZkJTlNQcmludGVyhpKEhIQJTlNQcmludGVyAJSShJmZASCG
+ hpKEmZkPTlNTY2FsaW5nRmFjdG9yhpKEm5ygngGGkoSZmRJOU1JldmVyc2VQYWdlT3Jk
+ ZXKGkqKShJmZDE5TTGVmdE1hcmdpboaShJucoJ4khpKEmZkOTlNQTVBhZ2VGb3JtYXSG
+ koSEhAZOU0RhdGEAlJeBHyCEB1s3OTY4Y108P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
+ aW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21w
+ dXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERz
+ L1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0
+ PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8
+ L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9y
+ PC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+
+ CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxh
+ cnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0
+ LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+Ny4yMDAwMDAwMDAwMDAwMDBl
+ KzAxPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwv
+ a2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+
+ CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJ
+ PGRhdGU+MjAwMi0xMS0xN1QwMDoxNjowOVo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRl
+ Z2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtl
+ eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNv
+ bS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5w
+ cmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJ
+ CTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5
+ PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+ LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5n
+ bWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1v
+ ZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDItMTEtMTdUMDA6MTY6MDlaPC9kYXRlPgoJ
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJ
+ PGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+
+ Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJ
+ PGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4K
+ CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5
+ PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJ
+ CQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2Fs
+ aW5nPC9rZXk+CgkJCQk8cmVhbD4xLjAwMDAwMDAwMDAwMDAwMGUrMDA8L3JlYWw+CgkJ
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3Ry
+ aW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29t
+ LmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAyLTEx
+ LTE3VDAwOjE2OjA5WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+ dC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGlj
+ dD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv
+ cm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w
+ cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50
+ aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5p
+ dGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBw
+ bGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43
+ LjIwMDAwMDAwMDAwMDAwMGUrMDE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu
+ dC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGlu
+ Z21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5t
+ b2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjE2OjA5WjwvZGF0ZT4K
+ CQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJ
+ CTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0
+ PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGlu
+ Zzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0
+ b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmlu
+ Zz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJ
+ PGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3Jt
+ YXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjEuMDAwMDAwMDAwMDAw
+ MDAwZSswMDwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGll
+ bnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3Ry
+ aW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4K
+ CQkJCTxkYXRlPjIwMDItMTEtMTdUMDA6MTY6MDlaPC9kYXRlPgoJCQkJPGtleT5jb20u
+ YXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwv
+ aW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5h
+ cHBsZS5wcmludC5zdWJUaWNrZXQucGFwZXJfaW5mb190aWNrZXQ8L2tleT4KCTxkaWN0
+ PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VS
+ ZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j
+ cmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv
+ c3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9r
+ ZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+ LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJ
+ CQkJCQk8cmVhbD4wLjAwMDAwMDAwMDAwMDAwMGUrMDA8L3JlYWw+CgkJCQkJCTxyZWFs
+ PjAuMDAwMDAwMDAwMDAwMDAwZSswMDwvcmVhbD4KCQkJCQkJPHJlYWw+Ny44MzAwMDAw
+ MDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJCQk8cmVhbD41LjU5MDAwMDAwMDAwMDAwMGUr
+ MDI8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50
+ aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdt
+ YW5hZ2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1v
+ ZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjE2OjA5WjwvZGF0ZT4K
+ CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJ
+ CQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8
+ L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVk
+ UGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu
+ YWdlcjwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFy
+ cmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxh
+ cnJheT4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwvcmVhbD4KCQkJ
+ CQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwvcmVhbD4KCQkJCQkJPHJlYWw+
+ OC4yNDAwMDAwMDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJCQk8cmVhbD41Ljc3MDAwMDAw
+ MDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUu
+ cHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu
+ dGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjE2OjA5
+ WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFn
+ PC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9h
+ cnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBN
+ UGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBv
+ c3RTY3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0
+ ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5h
+ cHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5n
+ Pmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j
+ bGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2Ny
+ aXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERh
+ dGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAwLTA3LTI4VDIyOjU3OjA0WjwvZGF0ZT4KCQkJ
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJ
+ PGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2Rp
+ Y3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBh
+ Z2VSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+ dC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RT
+ Y3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1B
+ cnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8
+ YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDAwMDAwMDAwMDAwMDAwZSswMDwvcmVhbD4KCQkJ
+ CQkJPHJlYWw+MC4wMDAwMDAwMDAwMDAwMDBlKzAwPC9yZWFsPgoJCQkJCQk8cmVhbD43
+ LjgzMDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJCTxyZWFsPjUuNTkwMDAwMDAw
+ MDAwMDAwZSswMjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5w
+ cmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp
+ bnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAwLTA3LTI4VDIyOjU3
+ OjA0WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVG
+ bGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJ
+ PC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZv
+ LlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5h
+ cHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBs
+ ZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnBy
+ aW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJ
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVy
+ UmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAw
+ MDAwZSswMTwvcmVhbD4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwv
+ cmVhbD4KCQkJCQkJPHJlYWw+OC4yNDAwMDAwMDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJ
+ CQk8cmVhbD41Ljc3MDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJPC9hcnJheT4K
+ CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJ
+ PHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQkJ
+ CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh
+ dGU+MjAwMC0wNy0yOFQyMjo1NzowNFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUu
+ cHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVn
+ ZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFw
+ cGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4K
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0
+ cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5
+ PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4K
+ CQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQu
+ UE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtl
+ eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+
+ Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNv
+ bS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDAt
+ MDctMjhUMjI6NTc6MDRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJ
+ PC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmlu
+ dC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4K
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQucHJpdmF0ZUxvY2s8L2tleT4KCQk8
+ ZmFsc2UvPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJ
+ PHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8
+ L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5
+ PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlj
+ a2V0LnByaXZhdGVMb2NrPC9rZXk+Cgk8ZmFsc2UvPgoJPGtleT5jb20uYXBwbGUucHJp
+ bnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VG
+ b3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgqGkoSZmRZOU0hvcml6
+ b250YWxseUNlbnRlcmVkhpKokoSZmQ1OU1JpZ2h0TWFyZ2luhpKEm5ygniSGkoSZmRBO
+ U0pvYkRpc3Bvc2l0aW9uhpKEmZkPTlNQcmludFNwb29sSm9ihpKEmZkITlNDb3BpZXOG
+ koSbnISEAVOiAYaShJmZC05TUGFwZXJOYW1lhpKEmZkGaXNvLWE0hpKEmZkLTlNGaXJz
+ dFBhZ2WGkoSbnLyiAYaShJmZFE5TVmVydGljYWxQYWdpbmF0aW9uhpKEm5ydnQCGkoSZ
+ mQ1OU09yaWVudGF0aW9uhpKEm5ydnQCGkoSZmRlOU1ByaW50UmV2ZXJzZU9yaWVudGF0
+ aW9uhpKikoSZmQpOU0xhc3RQYWdlhpKEm5yEl5eCf////4aShJmZC05TVG9wTWFyZ2lu
+ hpKEm5ygniSGkoSZmQtOU1BhcGVyU2l6ZYaShJychIQMe19OU1NpemU9ZmZ9o4ECU4ED
+ SoaGhg==
+
+ RowAlign
+ 0
+ RowSpacing
+ 3.600000e+01
+ VPages
+ 1
+ WindowInfo
+
+ Frame
+ {{1998, 271}, {559, 717}}
+ VisibleRegion
+ {{-10, 0}, {544, 640}}
+ Zoom
+ 1
+
+
+
diff --git a/ResKnife Cocoa.graffle b/ResKnife Cocoa.graffle
index b254b1f..10c98aa 100644
--- a/ResKnife Cocoa.graffle
+++ b/ResKnife Cocoa.graffle
@@ -1,6 +1,6 @@
-
-
+
+
CanvasColor
@@ -28,6 +28,119 @@
FitText
Vertical
ID
+ 55
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Draws
+ NO
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 Is dependent on}
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 57
+
+ ID
+ 56
+ Points
+
+ {47, 620.832}
+ {72, 620.952}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ Ball
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 58
+
+
+
+ Bounds
+ {{72, 612}, {20, 18}}
+ Class
+ ShapedGraphic
+ FitText
+ YES
+ ID
+ 57
+ Shape
+ Rectangle
+ Style
+
+ fill
+
+ Draws
+ NO
+
+ shadow
+
+ Draws
+ NO
+
+ stroke
+
+ Draws
+ NO
+
+
+ Text
+
+ Text
+ {\rtf1\mac\ansicpg10000\cocoartf102
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
+
+\f0\fs24 \cf0 B}
+
+
+
+ Bounds
+ {{27, 612}, {20, 18}}
+ Class
+ ShapedGraphic
+ FitText
+ YES
+ ID
58
Shape
Rectangle
@@ -52,56 +165,23 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 Is dependent on}
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 60
-
- ID
- 59
- Points
-
- {47, 621}
- {72, 621}
-
- Style
-
- stroke
-
- HeadArrow
- Ball
- LineType
- 1
- TailArrow
- 0
-
-
- Tail
-
- ID
- 61
+\f0\fs24 \cf0 A}
Bounds
- {{72, 612}, {20, 18}}
+ {{99, 594}, {99, 18}}
Class
ShapedGraphic
FitText
- YES
+ Vertical
ID
- 60
+ 59
Shape
Rectangle
Style
@@ -125,17 +205,50 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 B}
+\f0\fs24 \cf0 Reads data from}
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 61
+
+ ID
+ 60
+ Points
+
+ {47, 602.832}
+ {72, 602.952}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ Arrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 62
Bounds
- {{27, 612}, {20, 18}}
+ {{72, 594}, {20, 18}}
Class
ShapedGraphic
FitText
@@ -165,21 +278,21 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 A}
+\f0\fs24 \cf0 B}
Bounds
- {{99, 594}, {99, 18}}
+ {{27, 594}, {20, 18}}
Class
ShapedGraphic
FitText
- Vertical
+ YES
ID
62
Shape
@@ -205,56 +318,23 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 Reads data from}
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 64
-
- ID
- 63
- Points
-
- {47, 603}
- {72, 603}
-
- Style
-
- stroke
-
- HeadArrow
- Arrow
- LineType
- 1
- TailArrow
- 0
-
-
- Tail
-
- ID
- 65
+\f0\fs24 \cf0 A}
Bounds
- {{72, 594}, {20, 18}}
+ {{99, 576}, {99, 18}}
Class
ShapedGraphic
FitText
- YES
+ Vertical
ID
- 64
+ 63
Shape
Rectangle
Style
@@ -278,17 +358,50 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 B}
+\f0\fs24 \cf0 Sends data to}
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 65
+
+ ID
+ 64
+ Points
+
+ {47, 584.832}
+ {72, 584.952}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 66
Bounds
- {{27, 594}, {20, 18}}
+ {{72, 576}, {20, 18}}
Class
ShapedGraphic
FitText
@@ -318,21 +431,21 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-\f0\fs24 \cf0 A}
+\f0\fs24 \cf0 B}
Bounds
- {{99, 576}, {99, 18}}
+ {{27, 576}, {20, 18}}
Class
ShapedGraphic
FitText
- Vertical
+ YES
ID
66
Shape
@@ -358,120 +471,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
-{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-
-\f0\fs24 \cf0 Sends data to}
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 68
-
- ID
- 67
- Points
-
- {47, 585}
- {72, 585}
-
- Style
-
- stroke
-
- HeadArrow
- FilledArrow
- LineType
- 1
- TailArrow
- 0
-
-
- Tail
-
- ID
- 69
-
-
-
- Bounds
- {{72, 576}, {20, 18}}
- Class
- ShapedGraphic
- FitText
- YES
- ID
- 68
- Shape
- Rectangle
- Style
-
- fill
-
- Draws
- NO
-
- shadow
-
- Draws
- NO
-
- stroke
-
- Draws
- NO
-
-
- Text
-
- Text
- {\rtf1\mac\ansicpg10000\cocoartf100
-{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
-
-\f0\fs24 \cf0 B}
-
-
-
- Bounds
- {{27, 576}, {20, 18}}
- Class
- ShapedGraphic
- FitText
- YES
- ID
- 69
- Shape
- Rectangle
- Style
-
- fill
-
- Draws
- NO
-
- shadow
-
- Draws
- NO
-
- stroke
-
- Draws
- NO
-
-
- Text
-
- Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -485,7 +485,7 @@
Class
ShapedGraphic
ID
- 70
+ 67
Shape
Rectangle
@@ -495,13 +495,13 @@
Class
ShapedGraphic
ID
- 71
+ 68
Shape
Rectangle
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -511,88 +511,22 @@
ID
- 57
-
-
- Class
- LineGraphic
- Head
-
- ID
- 53
-
- ID
- 56
- Points
-
- {263.375, 333}
- {300.004, 434.435}
-
- Style
-
- stroke
-
- HeadArrow
- FilledArrow
- LineType
- 1
- TailArrow
- Arrow
-
-
- Tail
-
- ID
- 46
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 51
-
- ID
- 55
- Points
-
- {251.284, 333}
- {248.216, 468}
-
- Style
-
- stroke
-
- HeadArrow
- FilledArrow
- LineType
- 1
- TailArrow
- Arrow
-
-
- Tail
-
- ID
- 46
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 52
-
- ID
54
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 50
+
+ ID
+ 53
Points
- {238.875, 333}
- {194.996, 438.31}
+ {263.372, 333}
+ {300.004, 434.436}
Style
@@ -603,13 +537,79 @@
LineType
1
TailArrow
- Arrow
+ FilledArrow
Tail
ID
- 46
+ 43
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 48
+
+ ID
+ 52
+ Points
+
+ {251.282, 333}
+ {248.215, 468}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 43
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 49
+
+ ID
+ 51
+ Points
+
+ {238.864, 333}
+ {194.996, 438.305}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ FilledArrow
+ LineType
+ 1
+ TailArrow
+ FilledArrow
+
+
+ Tail
+
+ ID
+ 43
@@ -618,7 +618,7 @@
Class
ShapedGraphic
ID
- 53
+ 50
Shape
Cross
Style
@@ -639,7 +639,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -653,7 +653,7 @@
Class
ShapedGraphic
ID
- 52
+ 49
Shape
Cross
Style
@@ -674,7 +674,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -688,7 +688,7 @@
Class
ShapedGraphic
ID
- 51
+ 48
Shape
Cross
Style
@@ -709,7 +709,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -723,13 +723,13 @@
Head
ID
- 49
+ 46
ID
- 50
+ 47
Points
- {85.6875, 279}
+ {85.7143, 279}
{86, 243}
Style
@@ -747,7 +747,7 @@
Tail
ID
- 27
+ 24
@@ -756,7 +756,7 @@
Class
ShapedGraphic
ID
- 49
+ 46
Magnets
{0, 1}
@@ -769,7 +769,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -783,14 +783,14 @@
Head
ID
- 27
+ 24
ID
- 48
+ 45
Points
- {82.8333, 378}
- {84.5, 333}
+ {82.2739, 378}
+ {84.2902, 333}
Style
@@ -807,7 +807,7 @@
Tail
ID
- 39
+ 36
@@ -821,7 +821,7 @@
Class
ShapedGraphic
ID
- 45
+ 42
Magnets
{0, 1}
@@ -834,7 +834,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -848,21 +848,11 @@
Class
ShapedGraphic
ID
- 46
+ 43
Shape
Rectangle
Style
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
stroke
Color
@@ -885,21 +875,11 @@
Class
ShapedGraphic
ID
- 47
+ 44
Shape
Rectangle
Style
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
shadow
Color
@@ -928,7 +908,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -938,7 +918,7 @@
ID
- 44
+ 41
Class
@@ -946,14 +926,14 @@
Head
ID
- 41
+ 38
ID
- 43
+ 40
Points
- {241.5, 270}
- {212.281, 182.344}
+ {241.337, 270}
+ {212.259, 182.351}
Style
@@ -970,7 +950,7 @@
Tail
ID
- 46
+ 43
@@ -979,10 +959,10 @@
Head
ID
- 41
+ 38
ID
- 42
+ 39
Points
{125.988, 81.2361}
@@ -1004,7 +984,7 @@
Tail
ID
- 29
+ 26
@@ -1013,13 +993,13 @@
Class
ShapedGraphic
ID
- 41
+ 38
Shape
DocumentShape
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1033,14 +1013,14 @@
Head
ID
- 39
+ 36
ID
- 40
+ 37
Points
- {209.25, 333}
- {126, 394.342}
+ {204.56, 333}
+ {126, 393.084}
Style
@@ -1057,7 +1037,7 @@
Tail
ID
- 46
+ 43
@@ -1071,7 +1051,7 @@
Class
ShapedGraphic
ID
- 38
+ 35
Shape
RoundRect
Style
@@ -1115,26 +1095,13 @@
Class
ShapedGraphic
ID
- 39
+ 36
Shape
Rectangle
- Style
-
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
-
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1144,7 +1111,7 @@
ID
- 37
+ 34
Class
@@ -1152,21 +1119,21 @@
Head
ID
- 46
+ 32
ID
- 36
+ 33
Points
- {393.275, 413.796}
- {291.629, 333}
+ {291.635, 333}
+ {393.277, 413.796}
Style
stroke
HeadArrow
- FilledArrow
+ Arrow
LineType
1
TailArrow
@@ -1176,7 +1143,7 @@
Tail
ID
- 35
+ 43
@@ -1185,7 +1152,7 @@
Class
ShapedGraphic
ID
- 35
+ 32
Shape
Cloud
Style
@@ -1206,7 +1173,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1220,14 +1187,14 @@
Head
ID
- 32
+ 29
ID
- 34
+ 31
Points
- {88.5731, 86.4848}
- {89.7353, 126}
+ {88.3928, 86.4688}
+ {89.702, 126}
Style
@@ -1244,7 +1211,7 @@
Tail
ID
- 29
+ 26
@@ -1253,14 +1220,14 @@
Head
ID
- 29
+ 26
ID
- 33
+ 30
Points
- {211.126, 61.8005}
- {134.194, 59.7424}
+ {210.757, 61.0796}
+ {134.014, 59.4702}
Style
@@ -1277,7 +1244,7 @@
Tail
ID
- 12
+ 9
@@ -1291,22 +1258,9 @@
Class
ShapedGraphic
ID
- 31
+ 28
Shape
Rectangle
- Style
-
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
-
Bounds
@@ -1314,26 +1268,13 @@
Class
ShapedGraphic
ID
- 32
+ 29
Shape
Rectangle
- Style
-
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
-
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1343,7 +1284,7 @@
ID
- 30
+ 27
Bounds
@@ -1351,7 +1292,7 @@
Class
ShapedGraphic
ID
- 29
+ 26
Shape
Cloud
Style
@@ -1372,7 +1313,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1386,14 +1327,14 @@
Head
ID
- 27
+ 24
ID
- 28
+ 25
Points
- {184.5, 303.324}
- {130.5, 304.784}
+ {184.5, 300.66}
+ {130.5, 303.573}
Style
@@ -1410,7 +1351,7 @@
Tail
ID
- 46
+ 43
@@ -1419,13 +1360,13 @@
Class
ShapedGraphic
ID
- 27
+ 24
Shape
RoundedRectangle
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1439,10 +1380,10 @@
Head
ID
- 47
+ 44
ID
- 26
+ 23
Points
{387.675, 84.2599}
@@ -1464,7 +1405,7 @@
Tail
ID
- 20
+ 17
@@ -1473,14 +1414,14 @@
Head
ID
- 23
+ 20
ID
- 25
+ 22
Points
- {430.573, 86.485}
- {431.735, 126}
+ {429.824, 86.4116}
+ {431.597, 126}
Style
@@ -1497,7 +1438,7 @@
Tail
ID
- 20
+ 17
@@ -1506,14 +1447,14 @@
Head
ID
- 20
+ 17
ID
- 24
+ 21
Points
- {296.323, 61.955}
- {382.181, 59.7318}
+ {296.151, 61.6421}
+ {382.017, 59.6226}
Style
@@ -1530,7 +1471,7 @@
Tail
ID
- 12
+ 9
@@ -1544,22 +1485,9 @@
Class
ShapedGraphic
ID
- 22
+ 19
Shape
Rectangle
- Style
-
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
-
Bounds
@@ -1567,26 +1495,13 @@
Class
ShapedGraphic
ID
- 23
+ 20
Shape
Rectangle
- Style
-
- fill
-
- Color
-
- catalog
- System
- name
- windowBackgroundColor
-
-
-
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1596,7 +1511,7 @@
ID
- 21
+ 18
Bounds
@@ -1604,7 +1519,7 @@
Class
ShapedGraphic
ID
- 20
+ 17
Shape
Cloud
Style
@@ -1625,7 +1540,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1639,14 +1554,14 @@
Head
ID
- 16
+ 13
ID
- 19
+ 16
Points
- {319.5, 284.625}
- {411.394, 261.651}
+ {319.5, 283.301}
+ {411.245, 261.295}
Style
@@ -1663,7 +1578,7 @@
Tail
ID
- 46
+ 43
@@ -1672,14 +1587,14 @@
Head
ID
- 15
+ 12
ID
- 18
+ 15
Points
- {319.5, 303.034}
- {409.516, 305.08}
+ {319.5, 302.128}
+ {409.527, 304.799}
Style
@@ -1696,7 +1611,7 @@
Tail
ID
- 46
+ 43
@@ -1705,14 +1620,14 @@
Head
ID
- 14
+ 11
ID
- 17
+ 14
Points
- {319.5, 321.443}
- {412.134, 348.812}
+ {319.5, 320.92}
+ {412.204, 348.682}
Style
@@ -1729,7 +1644,7 @@
Tail
ID
- 46
+ 43
@@ -1738,7 +1653,7 @@
Class
ShapedGraphic
ID
- 16
+ 13
Shape
RoundRect
Style
@@ -1759,7 +1674,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1773,7 +1688,7 @@
Class
ShapedGraphic
ID
- 15
+ 12
Shape
RoundRect
Style
@@ -1794,7 +1709,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1808,7 +1723,7 @@
Class
ShapedGraphic
ID
- 14
+ 11
Shape
RoundRect
Style
@@ -1829,7 +1744,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1843,14 +1758,14 @@
Head
ID
- 47
+ 44
ID
- 13
+ 10
Points
- {255.171, 102.703}
- {252.18, 252}
+ {255.149, 102.698}
+ {252.179, 252}
Style
@@ -1867,7 +1782,7 @@
Tail
ID
- 12
+ 9
@@ -1876,7 +1791,7 @@
Class
ShapedGraphic
ID
- 12
+ 9
Shape
Cloud
Style
@@ -1897,7 +1812,7 @@
Text
Text
- {\rtf1\mac\ansicpg10000\cocoartf100
+ {\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
@@ -1964,21 +1879,179 @@
PageSetup
BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE
- hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpFZKEhIQITlNT
+ hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpF5KEhIQITlNT
dHJpbmcBlIQBKw9OU1BhZ2VzUGVyU2hlZXSGkoSEhAhOU051bWJlcgCEhAdOU1ZhbHVl
- AJSEASqEhAFznQGGkoSZmRBOU0pvYkRpc3Bvc2l0aW9uhpKEmZkPTlNQcmludFNwb29s
- Sm9ihpKEmZkOTlNCb3R0b21NYXJnaW6GkoSbnISEAWaeJIaShJmZC05TUGFwZXJOYW1l
- hpKEmZkCQTSGkoSZmQ9OU1ByaW50QWxsUGFnZXOGkoSbnJ2dAIaShJmZDU5TSm9iRmVh
- dHVyZXOGkoSWlwCGkoSZmRVOU0hvcml6b25hbFBhZ2luYXRpb26GkoSbnJ2dAIaShJmZ
- CE5TQ29waWVzhpKEm5yEhAFTnwGGkoSZmQ9OU1NjYWxpbmdGYWN0b3KGkoSbnISEAWSg
- AYaShJmZC05TRmlyc3RQYWdlhpKEm5ytnwGGkoSZmRROU1ZlcnRpY2FsUGFnaW5hdGlv
- boaShJucnZ0AhpKEmZkSTlNSZXZlcnNlUGFnZU9yZGVyhpKmkoSZmQ1OU1JpZ2h0TWFy
- Z2luhpKEm5yiniSGkoSZmRZOU0hvcml6b250YWxseUNlbnRlcmVkhpKEm5ydnQGGkoSZ
- mQxOU0xlZnRNYXJnaW6GkoSbnKKeJIaShJmZDU5TT3JpZW50YXRpb26GkoSbnJ2dAIaS
- hJmZGU5TUHJpbnRSZXZlcnNlT3JpZW50YXRpb26GkqaShJmZCk5TTGFzdFBhZ2WGkoSb
- nISXl4J/////hpKEmZkLTlNUb3BNYXJnaW6GkoSbnKKeJIaShJmZFE5TVmVydGljYWxs
- eUNlbnRlcmVkhpK5koSZmQtOU1BhcGVyU2l6ZYaShJychIQGez89ZmZ9oYECU4EDSoaG
- hg==
+ AJSEASqEhAFznQGGkoSZmQ5OU0JvdHRvbU1hcmdpboaShJuchIQBZp4khpKEmZkPTlNQ
+ cmludEFsbFBhZ2VzhpKEm5ydnQCGkoSZmQ1OU0pvYkZlYXR1cmVzhpKElpcAhpKEmZkV
+ TlNIb3Jpem9uYWxQYWdpbmF0aW9uhpKEm5ydnQCGkoSZmRROU1ZlcnRpY2FsbHlDZW50
+ ZXJlZIaShJucnZ0BhpKEmZkJTlNQcmludGVyhpKEhIQJTlNQcmludGVyAJSShJmZASCG
+ hpKEmZkPTlNTY2FsaW5nRmFjdG9yhpKEm5ygngGGkoSZmRJOU1JldmVyc2VQYWdlT3Jk
+ ZXKGkqKShJmZDE5TTGVmdE1hcmdpboaShJucoJ4khpKEmZkOTlNQTVBhZ2VGb3JtYXSG
+ koSEhAZOU0RhdGEAlJeBHyCEB1s3OTY4Y108P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
+ aW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21w
+ dXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERz
+ L1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0
+ PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8
+ L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9y
+ PC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+
+ CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxh
+ cnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0
+ LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+Ny4yMDAwMDAwMDAwMDAwMDBl
+ KzAxPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwv
+ a2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+
+ CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJ
+ PGRhdGU+MjAwMi0xMS0xN1QwMDoyMDo0Nlo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRl
+ Z2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtl
+ eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNv
+ bS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5w
+ cmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJ
+ CTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5
+ PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+ LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5n
+ bWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1v
+ ZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDItMTEtMTdUMDA6MjA6NDZaPC9kYXRlPgoJ
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJ
+ PGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+
+ Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJ
+ PGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4K
+ CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5
+ PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJ
+ CQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2Fs
+ aW5nPC9rZXk+CgkJCQk8cmVhbD4xLjAwMDAwMDAwMDAwMDAwMGUrMDA8L3JlYWw+CgkJ
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3Ry
+ aW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29t
+ LmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAyLTEx
+ LTE3VDAwOjIwOjQ2WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+ dC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGlj
+ dD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv
+ cm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5w
+ cmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50
+ aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5p
+ dGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBw
+ bGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43
+ LjIwMDAwMDAwMDAwMDAwMGUrMDE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmlu
+ dC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGlu
+ Z21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5t
+ b2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjIwOjQ2WjwvZGF0ZT4K
+ CQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJ
+ CTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0
+ PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGlu
+ Zzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0
+ b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmlu
+ Zz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJ
+ PGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3Jt
+ YXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjEuMDAwMDAwMDAwMDAw
+ MDAwZSswMDwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGll
+ bnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3Ry
+ aW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4K
+ CQkJCTxkYXRlPjIwMDItMTEtMTdUMDA6MjA6NDZaPC9kYXRlPgoJCQkJPGtleT5jb20u
+ YXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwv
+ aW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5h
+ cHBsZS5wcmludC5zdWJUaWNrZXQucGFwZXJfaW5mb190aWNrZXQ8L2tleT4KCTxkaWN0
+ PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VS
+ ZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j
+ cmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv
+ c3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9r
+ ZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
+ LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJ
+ CQkJCQk8cmVhbD4wLjAwMDAwMDAwMDAwMDAwMGUrMDA8L3JlYWw+CgkJCQkJCTxyZWFs
+ PjAuMDAwMDAwMDAwMDAwMDAwZSswMDwvcmVhbD4KCQkJCQkJPHJlYWw+Ny44MzAwMDAw
+ MDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJCQk8cmVhbD41LjU5MDAwMDAwMDAwMDAwMGUr
+ MDI8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50
+ aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdt
+ YW5hZ2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1v
+ ZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjIyOjEyWjwvZGF0ZT4K
+ CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJ
+ CQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8
+ L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVk
+ UGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu
+ YWdlcjwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFy
+ cmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxh
+ cnJheT4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwvcmVhbD4KCQkJ
+ CQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwvcmVhbD4KCQkJCQkJPHJlYWw+
+ OC4yNDAwMDAwMDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJCQk8cmVhbD41Ljc3MDAwMDAw
+ MDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUu
+ cHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu
+ dGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAyLTExLTE3VDAwOjIyOjEy
+ WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFn
+ PC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9h
+ cnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBN
+ UGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBv
+ c3RTY3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0
+ ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5h
+ cHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5n
+ Pmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j
+ bGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2Ny
+ aXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERh
+ dGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAwLTA3LTI4VDIyOjU3OjA0WjwvZGF0ZT4KCQkJ
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJ
+ PGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2Rp
+ Y3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBh
+ Z2VSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
+ dC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RT
+ Y3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1B
+ cnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBs
+ ZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8
+ YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDAwMDAwMDAwMDAwMDAwZSswMDwvcmVhbD4KCQkJ
+ CQkJPHJlYWw+MC4wMDAwMDAwMDAwMDAwMDBlKzAwPC9yZWFsPgoJCQkJCQk8cmVhbD43
+ LjgzMDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJCTxyZWFsPjUuNTkwMDAwMDAw
+ MDAwMDAwZSswMjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxl
+ LnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5w
+ cmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp
+ bnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAwLTA3LTI4VDIyOjU3
+ OjA0WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVG
+ bGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJ
+ PC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZv
+ LlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5h
+ cHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBs
+ ZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnBy
+ aW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJ
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVy
+ UmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAw
+ MDAwZSswMTwvcmVhbD4KCQkJCQkJPHJlYWw+LTEuODAwMDAwMDAwMDAwMDAwZSswMTwv
+ cmVhbD4KCQkJCQkJPHJlYWw+OC4yNDAwMDAwMDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJ
+ CQk8cmVhbD41Ljc3MDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJPC9hcnJheT4K
+ CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJ
+ PHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQkJ
+ CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh
+ dGU+MjAwMC0wNy0yOFQyMjo1NzowNFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUu
+ cHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVn
+ ZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFw
+ cGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4K
+ CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0
+ cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5
+ PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4K
+ CQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQu
+ UE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtl
+ eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+
+ Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNv
+ bS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDAt
+ MDctMjhUMjI6NTc6MDRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
+ Y2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJ
+ PC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmlu
+ dC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4K
+ CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQucHJpdmF0ZUxvY2s8L2tleT4KCQk8
+ ZmFsc2UvPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJ
+ PHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8
+ L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5
+ PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlj
+ a2V0LnByaXZhdGVMb2NrPC9rZXk+Cgk8ZmFsc2UvPgoJPGtleT5jb20uYXBwbGUucHJp
+ bnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VG
+ b3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgqGkoSZmRZOU0hvcml6
+ b250YWxseUNlbnRlcmVkhpKokoSZmQ1OU1JpZ2h0TWFyZ2luhpKEm5ygniSGkoSZmRBO
+ U0pvYkRpc3Bvc2l0aW9uhpKEmZkPTlNQcmludFNwb29sSm9ihpKEmZkITlNDb3BpZXOG
+ koSbnISEAVOiAYaShJmZC05TUGFwZXJOYW1lhpKEmZkGaXNvLWE0hpKEmZkLTlNGaXJz
+ dFBhZ2WGkoSbnLyiAYaShJmZFE5TVmVydGljYWxQYWdpbmF0aW9uhpKEm5ydnQCGkoSZ
+ mQ1OU09yaWVudGF0aW9uhpKEm5ydnQCGkoSZmRlOU1ByaW50UmV2ZXJzZU9yaWVudGF0
+ aW9uhpKikoSZmQpOU0xhc3RQYWdlhpKEm5yEl5eCf////4aShJmZC05TVG9wTWFyZ2lu
+ hpKEm5ygniSGkoSZmQtOU1BhcGVyU2l6ZYaShJychIQMe19OU1NpemU9ZmZ9o4ECU4ED
+ SoaGhg==
RowAlign
1
@@ -1989,7 +2062,7 @@
WindowInfo
Frame
- {{42, 146}, {580, 614}}
+ {{640, 205}, {580, 614}}
VisibleRegion
{{-21, 0}, {565, 537}}
Zoom
diff --git a/ResKnife.mcp b/ResKnife.mcp
index 044db80..deed8cb 100644
Binary files a/ResKnife.mcp and b/ResKnife.mcp differ
diff --git a/ResKnife.pbproj/project.pbxproj b/ResKnife.pbproj/project.pbxproj
index e98dcc4..042e85e 100644
--- a/ResKnife.pbproj/project.pbxproj
+++ b/ResKnife.pbproj/project.pbxproj
@@ -145,7 +145,6 @@
";
- shouldUseHeadermap = 0;
};
F50DFE1F036C255E01A8010A = {
isa = PBXBundleReference;
@@ -188,21 +187,25 @@
refType = 4;
};
F50DFE22036C258201A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = BoolTemplateField.cpp;
refType = 4;
};
F50DFE23036C258201A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = BoolTemplateField.h;
refType = 4;
};
F50DFE56036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DividerTemplateField.cpp;
refType = 4;
};
F50DFE57036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DividerTemplateField.h;
refType = 4;
@@ -217,77 +220,92 @@
refType = 4;
};
F50DFE59036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
refType = 4;
};
F50DFE5A036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = IntegerTemplateField.cpp;
refType = 4;
};
F50DFE5B036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = IntegerTemplateField.h;
refType = 4;
};
F50DFE5C036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = KHandleStream.cpp;
refType = 4;
};
F50DFE5D036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = KHandleStream.h;
refType = 4;
};
F50DFE5E036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ListTemplateField.cpp;
refType = 4;
};
F50DFE5F036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ListTemplateField.h;
refType = 4;
};
F50DFE60036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = LSTCTemplateField.cpp;
refType = 4;
};
F50DFE61036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = LSTCTemplateField.h;
refType = 4;
};
F50DFE62036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = main.cpp;
refType = 4;
};
F50DFE63036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = main.h;
refType = 4;
};
F50DFE64036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = main.r;
refType = 4;
};
F50DFE65036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = StringTemplateField.cpp;
refType = 4;
};
F50DFE66036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = StringTemplateField.h;
refType = 4;
};
F50DFE67036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Templar.cpp;
refType = 4;
@@ -298,11 +316,13 @@
refType = 4;
};
F50DFE6D036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindow.cpp;
refType = 4;
};
F50DFE6E036C258301A8010A = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindow.h;
refType = 4;
@@ -535,7 +555,6 @@
";
- shouldUseHeadermap = 0;
};
F5354438022674B401A80001 = {
buildActionMask = 2147483647;
@@ -581,16 +600,19 @@
runOnlyForDeploymentPostprocessing = 0;
};
F535443D0226752901A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = SupportedTypes.plist;
refType = 4;
};
F535443E0226752901A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindowController.h;
refType = 4;
};
F535443F0226752901A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindowController.m;
refType = 4;
@@ -636,11 +658,13 @@
};
};
F535444D0226B5F501A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Element.h;
refType = 4;
};
F535444E0226B5F501A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Element.m;
refType = 4;
@@ -676,11 +700,13 @@
};
};
F543AFDB027B2A5001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DataSource.h;
refType = 4;
};
F543AFDC027B2A5001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DataSource.m;
refType = 4;
@@ -825,7 +851,6 @@
productInstallPath = /usr/local/lib;
productName = libResKnife;
productReference = F546271002917D1501A8010C;
- shouldUseHeadermap = 0;
};
F546271002917D1501A8010C = {
isa = PBXLibraryReference;
@@ -1043,11 +1068,13 @@
};
};
F54E6220021B6A0801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FindSheetController.h;
refType = 4;
};
F54E6221021B6A0801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FindSheetController.m;
refType = 4;
@@ -1107,6 +1134,7 @@
};
};
F5502C4001C579FF01C57124 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResKnifePluginProtocol.h;
refType = 4;
@@ -1152,6 +1180,7 @@
};
};
F5730B930159528A01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = defaults.plist;
refType = 4;
@@ -1218,11 +1247,13 @@
};
};
F577A900021215C801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceNameCell.h;
refType = 4;
};
F577A901021215C801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceNameCell.m;
refType = 4;
@@ -1342,7 +1373,6 @@
";
- shouldUseHeadermap = 0;
};
F57CEE0F0189C95101A8010B = {
buildActionMask = 2147483647;
@@ -1408,12 +1438,14 @@
refType = 4;
};
F58A18400278355D01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = DescSplitViewDelegate.m;
path = desc/DescSplitViewDelegate.m;
refType = 4;
};
F58A18410278355D01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = DescSplitViewDelegate.h;
path = desc/DescSplitViewDelegate.h;
@@ -1432,12 +1464,14 @@
};
};
F58F6B7E025BC3A501A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = BoomWindowController.h;
path = boom/BoomWindowController.h;
refType = 4;
};
F58F6B7F025BC3A501A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = BoomWindowController.m;
path = boom/BoomWindowController.m;
@@ -1456,11 +1490,13 @@
};
};
F58F6B82025BC73001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = NovaWindowController.h;
refType = 4;
};
F58F6B83025BC73001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = NovaWindowController.m;
refType = 4;
@@ -1478,12 +1514,14 @@
};
};
F58F6B86025BC76D01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = CharWindowController.h;
path = char/CharWindowController.h;
refType = 4;
};
F58F6B87025BC76D01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = CharWindowController.m;
path = char/CharWindowController.m;
@@ -1502,12 +1540,14 @@
};
};
F58F6B8A025BC7C001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = ColrWindowController.h;
path = colr/ColrWindowController.h;
refType = 4;
};
F58F6B8B025BC7C001A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = ColrWindowController.m;
path = colr/ColrWindowController.m;
@@ -1526,12 +1566,14 @@
};
};
F58F6B8E025BCF5901A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = CronWindowController.h;
path = cron/CronWindowController.h;
refType = 4;
};
F58F6B8F025BCF5901A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = CronWindowController.m;
path = cron/CronWindowController.m;
@@ -1550,12 +1592,14 @@
};
};
F58F6B92025BD97701A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = DescWindowController.m;
path = desc/DescWindowController.m;
refType = 4;
};
F58F6B93025BD97701A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = DescWindowController.h;
path = desc/DescWindowController.h;
@@ -1628,12 +1672,62 @@
settings = {
};
};
+ F59481AD03D0776C01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = RKDocumentController.h;
+ refType = 4;
+ };
+ F59481AE03D0776C01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = RKDocumentController.m;
+ refType = 4;
+ };
+ F59481AF03D0776C01A8010A = {
+ fileRef = F59481AD03D0776C01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F59481B003D0776C01A8010A = {
+ fileRef = F59481AE03D0776C01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F59481B103D077DC01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = OpenFileDataSource.h;
+ refType = 4;
+ };
+ F59481B203D077DC01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = OpenFileDataSource.m;
+ refType = 4;
+ };
+ F59481B303D077DC01A8010A = {
+ fileRef = F59481B103D077DC01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F59481B403D077DC01A8010A = {
+ fileRef = F59481B203D077DC01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
F59D5DE40320DFF601A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSString-FSSpec.h";
refType = 4;
};
F59D5DE50320DFF601A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSString-FSSpec.m";
refType = 4;
@@ -1651,11 +1745,13 @@
};
};
F59D5DE8032106D201A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSNumber-Range.h";
refType = 4;
};
F59D5DE9032106D201A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSNumber-Range.m";
refType = 4;
@@ -1677,6 +1773,7 @@
F5EBF6B801573EC201000001,
F5EBF6B901573EC201000001,
);
+ hasScannedForEncodings = 1;
isa = PBXProject;
mainGroup = F5B588100156D2A601000001;
productRefGroup = F5B588110156D30301000001;
@@ -1850,7 +1947,6 @@
";
- shouldUseHeadermap = 0;
};
F5B588140156D30301000001 = {
buildActionMask = 2147483647;
@@ -1872,6 +1968,10 @@
F5D0CBD1022744C701A80001,
F5DF1BFD0254AD8801A80001,
F59D5DE60320DFF601A8010C,
+ F5F1071803CCC61E01A8010A,
+ F5F1071C03CCFAAC01A8010A,
+ F59481AF03D0776C01A8010A,
+ F59481B303D077DC01A8010A,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -1923,6 +2023,10 @@
F5DF1C070254AD8801A80001,
F5C9ECD0027F474A01A8010C,
F59D5DE70320DFF601A8010C,
+ F5F1071903CCC61E01A8010A,
+ F5F1071D03CCFAAC01A8010A,
+ F59481B003D0776C01A8010A,
+ F59481B403D077DC01A8010A,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -1956,6 +2060,7 @@
refType = 4;
};
F5B5881B0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = main.c;
refType = 4;
@@ -1972,18 +2077,26 @@
F5B588260156D40B01000001,
F5B588270156D40B01000001,
F5B588280156D40B01000001,
+ F59481B103D077DC01A8010A,
+ F59481B203D077DC01A8010A,
F5B588290156D40B01000001,
F5B5882A0156D40B01000001,
+ F5F1071603CCC61E01A8010A,
+ F5F1071703CCC61E01A8010A,
+ F5F1071A03CCFAAC01A8010A,
+ F5F1071B03CCFAAC01A8010A,
F5B5882B0156D40B01000001,
F5B5882C0156D40B01000001,
F5B5882D0156D40B01000001,
F5B5882E0156D40B01000001,
- F577A900021215C801A80001,
- F577A901021215C801A80001,
F5B5882F0156D40B01000001,
F5B588300156D40B01000001,
F5B588310156D40B01000001,
F5B588320156D40B01000001,
+ F577A900021215C801A80001,
+ F577A901021215C801A80001,
+ F59481AD03D0776C01A8010A,
+ F59481AE03D0776C01A8010A,
F5B588330156D40B01000001,
F5B588340156D40B01000001,
);
@@ -1992,111 +2105,133 @@
refType = 4;
};
F5B5881D0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ApplicationDelegate.h;
refType = 4;
};
F5B5881E0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ApplicationDelegate.m;
refType = 4;
};
F5B5881F0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = AttributesFormatter.h;
refType = 4;
};
F5B588200156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = AttributesFormatter.m;
refType = 4;
};
F5B588210156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = CreateResourceSheetController.h;
refType = 4;
};
F5B588220156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = CreateResourceSheetController.m;
refType = 4;
};
F5B588250156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = InfoWindowController.h;
refType = 4;
};
F5B588260156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = InfoWindowController.m;
refType = 4;
};
F5B588270156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = NameFormatter.h;
refType = 4;
};
F5B588280156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = NameFormatter.m;
refType = 4;
};
F5B588290156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = OutlineViewDelegate.h;
refType = 4;
};
F5B5882A0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = OutlineViewDelegate.m;
refType = 4;
};
F5B5882B0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PrefsWindowController.h;
refType = 4;
};
F5B5882C0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PrefsWindowController.m;
refType = 4;
};
F5B5882D0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Resource.h;
refType = 4;
};
F5B5882E0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Resource.m;
refType = 4;
};
F5B5882F0156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceDataSource.h;
refType = 4;
};
F5B588300156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceDataSource.m;
refType = 4;
};
F5B588310156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceDocument.h;
refType = 4;
};
F5B588320156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceDocument.m;
refType = 4;
};
F5B588330156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = SizeFormatter.h;
refType = 4;
};
F5B588340156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = SizeFormatter.m;
refType = 4;
@@ -2213,6 +2348,7 @@
refType = 2;
};
F5B588430156D40B01000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = English;
path = English.lproj/InfoPlist.strings;
@@ -2581,7 +2717,6 @@
";
- shouldUseHeadermap = 0;
};
F5B588760156D5CB01000001 = {
buildActionMask = 2147483647;
@@ -2666,11 +2801,13 @@
refType = 4;
};
F5B5887D0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "Carbon Prefix.h";
refType = 4;
};
F5B5887E0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "Classic Prefix.h";
refType = 4;
@@ -2691,16 +2828,19 @@
refType = 4;
};
F5B588800156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Transfer.h;
refType = 4;
};
F5B588810156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResKnife.h;
refType = 4;
};
F5B588820156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Generic.h;
refType = 4;
@@ -2743,151 +2883,181 @@
refType = 4;
};
F5B588840156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Application.h;
refType = 4;
};
F5B588850156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Application.cpp;
refType = 4;
};
F5B588860156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Asynchronous.h;
refType = 4;
};
F5B588870156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Asynchronous.cpp;
refType = 4;
};
F5B588880156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DataBrowser.h;
refType = 4;
};
F5B588890156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DataBrowser.cpp;
refType = 4;
};
F5B5888A0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = EditorWindow.h;
refType = 4;
};
F5B5888B0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = EditorWindow.cpp;
refType = 4;
};
F5B5888C0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Errors.h;
refType = 4;
};
F5B5888D0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Errors.cpp;
refType = 4;
};
F5B5888E0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Files.h;
refType = 4;
};
F5B5888F0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Files.cpp;
refType = 4;
};
F5B588900156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FileWindow.h;
refType = 4;
};
F5B588910156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FileWindow.cpp;
refType = 4;
};
F5B588920156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HostCallbacks.h;
refType = 4;
};
F5B588930156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HostCallbacks.cpp;
refType = 4;
};
F5B588940156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = InspectorWindow.h;
refType = 4;
};
F5B588950156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = InspectorWindow.cpp;
refType = 4;
};
F5B588960156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PickerWindow.h;
refType = 4;
};
F5B588970156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PickerWindow.cpp;
refType = 4;
};
F5B588980156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PlugObject.h;
refType = 4;
};
F5B588990156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PlugObject.cpp;
refType = 4;
};
F5B5889A0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PlugWindow.h;
refType = 4;
};
F5B5889B0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PlugWindow.cpp;
refType = 4;
};
F5B5889C0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceObject.h;
refType = 4;
};
F5B5889D0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResourceObject.cpp;
refType = 4;
};
F5B5889E0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Utility.h;
refType = 4;
};
F5B5889F0156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Utility.cpp;
refType = 4;
};
F5B588A00156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = WindowObject.h;
refType = 4;
};
F5B588A10156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = WindowObject.cpp;
refType = 4;
@@ -2905,11 +3075,13 @@
refType = 4;
};
F5B588A30156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Carbon.r;
refType = 4;
};
F5B588A40156D6D901000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResKnife.r;
refType = 4;
@@ -3191,7 +3363,6 @@
";
- shouldUseHeadermap = 0;
};
F5B588D30156D78201000001 = {
buildActionMask = 2147483647;
@@ -3250,6 +3421,7 @@
refType = 2;
};
F5B588D90156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "Hex Editor.h";
refType = 4;
@@ -3270,42 +3442,50 @@
refType = 4;
};
F5B588DB0156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Events.h;
refType = 4;
};
F5B588DC0156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Events.cpp;
refType = 4;
};
F5B588DD0156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexWindow.h;
refType = 4;
};
F5B588DE0156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexWindow.cpp;
refType = 4;
};
F5B588DF0156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Initalisation.h;
refType = 4;
};
F5B588E00156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Initalisation.cpp;
refType = 4;
};
F5B588E10156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = Utility.h;
path = HexUtility.h;
refType = 4;
};
F5B588E20156D9D401000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
name = Utility.cpp;
path = HexUtility.cpp;
@@ -3429,7 +3609,6 @@
";
- shouldUseHeadermap = 0;
};
F5B588EF0156DAF301000001 = {
buildActionMask = 2147483647;
@@ -3483,6 +3662,7 @@
refType = 2;
};
F5B588F50156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "Template Editor.h";
refType = 4;
@@ -3499,16 +3679,19 @@
refType = 4;
};
F5B588F90156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindow.h;
refType = 4;
};
F5B588FA0156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateWindow.cpp;
refType = 4;
};
F5B588FB0156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "Template Editor.r";
refType = 4;
@@ -3523,6 +3706,7 @@
refType = 2;
};
F5B588FD0156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "PICT Editor.h";
refType = 4;
@@ -3539,21 +3723,25 @@
refType = 4;
};
F5B588FF0156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Initalisation.h;
refType = 4;
};
F5B589000156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Initalisation.cpp;
refType = 4;
};
F5B589010156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Parser.h;
refType = 4;
};
F5B589020156DC2201000001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = PictWindow.cpp;
refType = 4;
@@ -3646,7 +3834,6 @@
";
- shouldUseHeadermap = 0;
};
F5B5890C0156DC2201000001 = {
buildActionMask = 2147483647;
@@ -3726,6 +3913,7 @@
runOnlyForDeploymentPostprocessing = 0;
};
F5C9ECCE027F474A01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Notifications.m;
refType = 4;
@@ -3755,6 +3943,7 @@
};
};
F5C9ECD8027F562201A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Structs.h;
refType = 4;
@@ -3766,6 +3955,7 @@
};
};
F5CDEBAB01FC893201A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = ResKnifeResourceProtocol.h;
refType = 4;
@@ -3793,11 +3983,13 @@
target = F57CEE0E0189C95101A8010B;
};
F5D0CBCF022744C701A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSOutlineView-SelectedItems.h";
refType = 4;
};
F5D0CBD0022744C701A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "NSOutlineView-SelectedItems.m";
refType = 4;
@@ -3856,101 +4048,121 @@
refType = 4;
};
F5DF1BDB0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DirectoryCopy.c;
refType = 4;
};
F5DF1BDC0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = DirectoryCopy.h;
refType = 4;
};
F5DF1BDD0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FileCopy.c;
refType = 4;
};
F5DF1BDE0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FileCopy.h;
refType = 4;
};
F5DF1BDF0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FSpCompat.c;
refType = 4;
};
F5DF1BE00254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FSpCompat.h;
refType = 4;
};
F5DF1BE10254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FullPath.c;
refType = 4;
};
F5DF1BE20254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = FullPath.h;
refType = 4;
};
F5DF1BE30254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = IterateDirectory.c;
refType = 4;
};
F5DF1BE40254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = IterateDirectory.h;
refType = 4;
};
F5DF1BE50254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreDesktopMgr.c;
refType = 4;
};
F5DF1BE60254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreDesktopMgr.h;
refType = 4;
};
F5DF1BE70254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFiles.c;
refType = 4;
};
F5DF1BE80254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFiles.h;
refType = 4;
};
F5DF1BE90254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFilesExtras.c;
refType = 4;
};
F5DF1BEA0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFilesExtras.h;
refType = 4;
};
F5DF1BEB0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Optimization.h;
refType = 4;
};
F5DF1BEC0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = OptimizationEnd.h;
refType = 4;
};
F5DF1BED0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Search.c;
refType = 4;
};
F5DF1BEE0254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = Search.h;
refType = 4;
@@ -3965,11 +4177,13 @@
refType = 4;
};
F5DF1BF00254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFilesX.c;
refType = 4;
};
F5DF1BF10254AD8801A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = MoreFilesX.h;
refType = 4;
@@ -4049,7 +4263,6 @@
";
- shouldUseHeadermap = 0;
};
F5DF1C0A0254C6BA01A80001 = {
buildActionMask = 2147483647;
@@ -4081,7 +4294,6 @@
F5EDC61D025BFB8E01A8010C,
F5EDC620025BFBB501A8010C,
F543AFF1027C716E01A8010C,
- F7C028FE03BBB39D017A2919,
);
isa = PBXResourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -4301,36 +4513,43 @@
refType = 4;
};
F5EF83A0020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexEditorDelegate.h;
refType = 4;
};
F5EF83A1020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexEditorDelegate.m;
refType = 4;
};
F5EF83A2020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexTextView.h;
refType = 4;
};
F5EF83A3020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexTextView.m;
refType = 4;
};
F5EF83A7020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexWindowController.h;
refType = 4;
};
F5EF83A8020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = HexWindowController.m;
refType = 4;
};
F5EF83A9020C08E601A80001 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = SupportedTypes.plist;
refType = 4;
@@ -4398,12 +4617,62 @@
settings = {
};
};
+ F5F1071603CCC61E01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = PasteboardDocument.h;
+ refType = 4;
+ };
+ F5F1071703CCC61E01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = PasteboardDocument.m;
+ refType = 4;
+ };
+ F5F1071803CCC61E01A8010A = {
+ fileRef = F5F1071603CCC61E01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5F1071903CCC61E01A8010A = {
+ fileRef = F5F1071703CCC61E01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5F1071A03CCFAAC01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = PasteboardWindowController.h;
+ refType = 4;
+ };
+ F5F1071B03CCFAAC01A8010A = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = PasteboardWindowController.m;
+ refType = 4;
+ };
+ F5F1071C03CCFAAC01A8010A = {
+ fileRef = F5F1071A03CCFAAC01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F5F1071D03CCFAAC01A8010A = {
+ fileRef = F5F1071B03CCFAAC01A8010A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
F5F98D4502F0B06E01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateInitalisation.h;
refType = 4;
};
F5F98D4602F0B06E01A8010C = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = TemplateInitalisation.cpp;
refType = 4;
@@ -4425,16 +4694,11 @@
};
};
F7C028FD03BBB39D017A2919 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = novabible.html;
refType = 4;
};
- F7C028FE03BBB39D017A2919 = {
- fileRef = F7C028FD03BBB39D017A2919;
- isa = PBXBuildFile;
- settings = {
- };
- };
//F70
//F71
//F72
@@ -4446,6 +4710,7 @@
//FD3
//FD4
FDBB1C8E038062C0015E48C3 = {
+ fileEncoding = 30;
isa = PBXFileReference;
path = "C99 Prefix.h";
refType = 4;
diff --git a/Template Editor/Classes/TemplateInitalisation.cpp b/Template Editor/Classes/TemplateInitalisation.cpp
new file mode 100644
index 0000000..89582d9
--- /dev/null
+++ b/Template Editor/Classes/TemplateInitalisation.cpp
@@ -0,0 +1,113 @@
+#include "TemplateInitalisation.h"
+#include "TemplateWindow.h"
+globals g;
+
+/*** INITALISE NEW EDITOR INSTANCE ***/
+OSStatus Plug_InitInstance( Plug_PlugInRef plug, Plug_ResourceRef resource )
+{
+ // get system version
+ OSStatus error = Gestalt( gestaltSystemVersion, &g.systemVersion );
+ if( error ) return error;
+
+ // check appearance availablilty
+#if TARGET_API_MAC_CARBON
+ g.useAppearance = true;
+#else
+ ProcessSerialNumber psn;
+ error = GetCurrentProcess( &psn );
+ if( error ) g.useAppearance = false;
+ else g.useAppearance = IsAppearanceClient( &psn );
+#endif
+
+ // get template for resource
+ ResType type = Host_GetResourceType( resource );
+ Handle tmpl = Host_GetDefaultTemplate( type );
+ SInt32 size = GetHandleSize( tmpl ); // cannot be less than 5 (string length of zero, four char code)
+ if( tmpl == null || size < 5 ) return paramErr; // not the best error to return for this situation
+
+ // create window
+ Rect creationBounds;
+ WindowRef window;
+ SetRect( &creationBounds, 0, 0, kDefaultWindowWidth, kDefaultWindowHeight );
+ OffsetRect( &creationBounds, 8, 48 );
+ WindowAttributes attributes = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute | kWindowInWindowMenuAttribute;
+ if( g.systemVersion >= kMacOSX ) attributes |= kWindowLiveResizeAttribute;
+ error = CreateNewWindow( kDocumentWindowClass, attributes, &creationBounds, &window );
+ Plug_WindowRef plugWindow = Host_RegisterWindow( plug, resource, window );
+
+#if TARGET_API_MAC_CARBON
+ // install window event handler
+ EventHandlerRef ref = null;
+ EventHandlerUPP handler = NewEventHandlerUPP( CarbonWindowEventHandler );
+ EventTypeSpec events[] = { { kEventClassWindow, kEventWindowClose } };
+ InstallWindowEventHandler( window, handler, GetEventTypeCount(events), events, plug, &ref );
+#else
+ ClassicEventHandlerUPP handler = NewClassicEventHandlerUPP( ClassicWindowEventHandler );
+ Host_InstallClassicWindowEventHandler( plugWindow, handler );
+#endif
+
+ // set window's background to default for theme
+ if( g.useAppearance )
+ SetThemeWindowBackground( window, kThemeBrushModelessDialogBackgroundActive, false );
+
+ // cerate new template window class
+ TemplateWindowPtr templateWindow = new TemplateWindow( window );
+ Host_SetWindowRefCon( plugWindow, (UInt32) templateWindow );
+
+ // parse the resource data
+ Handle data = Host_GetResourceData( resource );
+ error = templateWindow->UseTemplate( tmpl ); // pass responsibility for disposing to the window
+ error = templateWindow->ParseData( data ); // parses the resource into an array of Elements
+
+ // show window
+ ShowWindow( window );
+ SelectWindow( window );
+ return error;
+}
+
+/*** ELEMENT CONSTRUCTOR ***/
+Element::Element( void )
+{
+ BlockZero( this, sizeof(Element) );
+}
+
+/*** CARBON WINDOW EVENT HANDLER ***/
+pascal OSStatus CarbonWindowEventHandler( EventHandlerCallRef handler, EventRef event, void *userData )
+{
+ #pragma unused( handler )
+ OSStatus error = eventNotHandledErr;
+ Plug_PlugInRef plugRef = (Plug_PlugInRef) userData;
+ WindowRef window = GetUserFocusWindow(); // overridden below for window class events
+
+ // get event type
+ UInt32 eventClass = GetEventClass( event );
+ UInt32 eventKind = GetEventKind( event );
+
+ // get event parameters
+ if( eventClass == kEventClassWindow )
+ GetEventParameter( event, kEventParamDirectObject, typeWindowRef, null, sizeof(WindowRef), null, &window );
+ if( !window ) return error;
+ Plug_WindowRef plugWindow = Host_GetPlugWindowFromWindowRef( window );
+ if( !plugWindow ) return error;
+ TemplateWindowPtr templateWindow = (TemplateWindowPtr) Host_GetWindowRefCon( plugWindow );
+ if( !templateWindow ) return error;
+
+ // get window rect
+ Rect windowBounds;
+ GetWindowPortBounds( window, &windowBounds );
+
+ // handle event
+ static EventHandlerRef resizeEventHandlerRef = null;
+ switch( eventClass )
+ {
+ case kEventClassWindow:
+ switch( eventKind )
+ {
+ case kEventWindowClose:
+ delete templateWindow;
+ break;
+ }
+ break;
+ }
+ return error;
+}
\ No newline at end of file
diff --git a/Template Editor/Classes/TemplateInitalisation.h b/Template Editor/Classes/TemplateInitalisation.h
new file mode 100644
index 0000000..5342c7c
--- /dev/null
+++ b/Template Editor/Classes/TemplateInitalisation.h
@@ -0,0 +1 @@
+#include "Template Editor.h"
pascal OSStatus CarbonWindowEventHandler( EventHandlerCallRef handler, EventRef event, void *userData );
\ No newline at end of file