]> Dogcows Code - chaz/thecheat/commitdiff
The Cheat 1.1 v1.1
authorCharles McGarvey <chazmcgarvey@brokenzipper.com>
Mon, 8 Mar 2004 19:00:00 +0000 (12:00 -0700)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Mon, 8 Mar 2004 19:00:00 +0000 (12:00 -0700)
New Features:
- Update Check (query a server to determine current version).
- Ability to specify how many hits you want The Cheat to show you.
Bug Fixes:
- String changing now changes the correct number of bytes.
- Other minor bugs.
Other Changes:
- String searching is now optimized.
- Default port changed from 5007 to 51835.
- New icon.

57 files changed:
AboutBoxController.h
AboutBoxController.m
AppController.h
AppController.m
CheatServer.h
CheatServer.m
English.lproj/AboutBox.nib/classes.nib
English.lproj/AboutBox.nib/keyedobjects.nib
English.lproj/AboutBox.nib/objects.nib
English.lproj/AboutBox~.nib/classes.nib
English.lproj/AboutBox~.nib/keyedobjects.nib
English.lproj/AboutBox~.nib/objects.nib
English.lproj/InfoPlist.strings
English.lproj/MainMenu.nib/classes.nib
English.lproj/MainMenu.nib/info.nib
English.lproj/MainMenu.nib/keyedobjects.nib
English.lproj/MainMenu.nib/objects.nib
English.lproj/MainMenu~.nib/classes.nib
English.lproj/MainMenu~.nib/info.nib
English.lproj/MainMenu~.nib/keyedobjects.nib
English.lproj/MainMenu~.nib/objects.nib
English.lproj/MyDocument.nib/info.nib
English.lproj/MyDocument.nib/keyedobjects.nib
English.lproj/MyDocument.nib/objects.nib
English.lproj/MyDocument~.nib/info.nib
English.lproj/MyDocument~.nib/keyedobjects.nib
English.lproj/MyDocument~.nib/objects.nib
English.lproj/NetTraffic.nib/info.nib
English.lproj/NetTraffic.nib/keyedobjects.nib
English.lproj/NetTraffic.nib/objects.nib
English.lproj/NetTraffic~.nib/info.nib
English.lproj/NetTraffic~.nib/keyedobjects.nib
English.lproj/NetTraffic~.nib/objects.nib
English.lproj/Preferences.nib/classes.nib
English.lproj/Preferences.nib/info.nib
English.lproj/Preferences.nib/keyedobjects.nib
English.lproj/Preferences.nib/objects.nib
English.lproj/Preferences~.nib/classes.nib
English.lproj/Preferences~.nib/info.nib
English.lproj/Preferences~.nib/keyedobjects.nib
English.lproj/Preferences~.nib/objects.nib
Info-The_Cheat.plist [moved from Info-The_Cheat__Upgraded_.plist with 95% similarity]
MyDocument.h
MyDocument.m
NetTrafficController.h
NetTrafficController.m
PreferenceController.h
PreferenceController.m
PreferenceControlling.h
Read Me.pdf [deleted file]
Read Me.rtf
The Cheat.pbproj/chaz.pbxuser
The Cheat.pbproj/project.pbxproj
cheat_globals.h
cheat_globals.m
cheat_shared.m
icon.icns

index 2b9901d4a354262ef39c9930df9632de6f796b56..05f4e5d775943f7c41b3975a644ac9d5eff46b64 100644 (file)
@@ -14,6 +14,7 @@
 @interface AboutBoxController : NSWindowController
 {
        IBOutlet NSWindow               *aboutWindow;
+       IBOutlet NSTextField    *nameVersionText;
 }
 
 - (IBAction)launchWebsiteButton:(id)sender;
index 68e2c6dc4a0216f26b1d2fb614e41a88150fb723..e499ef829bedddeb3d140007dc1a93ffe8f504b7 100644 (file)
@@ -12,6 +12,8 @@
 
 #include "cheat_shared.h"
 
+#import <Chaz/CMUpdateCheck.h>
+
 
 @implementation AboutBoxController
 
@@ -23,6 +25,7 @@
 
 - (void)windowDidLoad
 {
+       [nameVersionText setStringValue:[NSString stringWithFormat:@"%@ %@", [CMUpdateCheck appName], [CMUpdateCheck appVersion]]];
        [aboutWindow center];
 }
 
index efdce2ab094206dd86b01e9cfd77bff476adff39..db42eedf43939044389e7f74779735f390818bc6 100644 (file)
 - (IBAction)showNetTrafficWindow:(id)sender;
 
 - (IBAction)launchHelpFile:(id)sender;
+- (IBAction)launchEmailMenu:(id)sender;
 - (IBAction)launchWebsiteMenu:(id)sender;
 
+- (IBAction)checkForUpdate:(id)sender;
+
 - (NSArray *)serverList;
 
 @end
\ No newline at end of file
index 56e269674558577fac441df7f1d8f588641a5c0f..aacc0a79d63f0f046753a0019469f0fe49d09624 100644 (file)
@@ -21,6 +21,8 @@
 
 #import "ServerHolder.h"
 
+#import <Chaz/CMUpdateCheck.h>
+
 
 @implementation AppController
 
 
        [defaults setObject:[NSNumber numberWithBool:TCGlobalPlaySounds] forKey:TCPlaySoundsPref];
        [defaults setObject:[NSNumber numberWithBool:TCGlobalWindowsOnTop] forKey:TCWindowsOnTopPref];
+       [defaults setObject:[NSNumber numberWithBool:TCGlobalUpdateCheck] forKey:TCUpdateCheckPref];
        [defaults setObject:[NSNumber numberWithBool:TCGlobalAllowRemote] forKey:TCAllowRemotePref];
        [defaults setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
        [defaults setObject:[NSString stringWithFormat:@"%@'s Computer", NSFullUserName()] forKey:TCBroadcastNamePref];
+       [defaults setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref];
 
        [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
 
-       TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] integerForKey:TCPlaySoundsPref];
-       TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] integerForKey:TCWindowsOnTopPref];
-       TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
+       TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] boolForKey:TCPlaySoundsPref];
+       TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] boolForKey:TCWindowsOnTopPref];
+       TCGlobalUpdateCheck = [[NSUserDefaults standardUserDefaults] boolForKey:TCUpdateCheckPref];
        TCGlobalAllowRemote = [[NSUserDefaults standardUserDefaults] boolForKey:TCAllowRemotePref];
+       TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
+       TCGlobalHitsDisplayed = [[NSUserDefaults standardUserDefaults] integerForKey:TCHitsDisplayedPref];
 }
 
 - (id)init
@@ -54,8 +60,9 @@
        {
                servers = [[NSMutableArray alloc] init];
 
+               // start the server with saved settings
                [self listenOnPort:TCGlobalListenPort remote:TCGlobalAllowRemote];
-               [self broadcastWithName:TCGlobalBroadcastName];
+               if ( TCGlobalAllowRemote ) [self broadcastWithName:TCGlobalBroadcastName];
                
                // set up the network browser
                browser = [[NSNetServiceBrowser alloc] init];
 }
 
 
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+       if ( TCGlobalUpdateCheck )
+       {
+               [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist" verbose:NO];
+       }
+}
+
+
 - (void)listenOnPort:(int)port remote:(BOOL)remote
 {
        if ( connection )
 
 - (void)broadcastWithName:(NSString *)name
 {
-       if ( TCGlobalAllowRemote )
-       {
-               [self stopBroadcast];
+       [self stopBroadcast];
                
-               service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort];
-               [service setDelegate:self];
-               [service publish];
-       }
+       service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort];
+       [service setDelegate:self];
+       [service publish];
 }
 
 - (void)stopBroadcast
 - (IBAction)launchHelpFile:(id)sender
 {
        //[[NSWorkspace sharedWorkspace] openFile:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"html"] withApplication:@"Safari"];
-       [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"pdf"]]];
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"rtf"]]];
+}
+
+- (IBAction)launchEmailMenu:(id)sender
+{
+       LaunchEmail();
 }
 
 - (IBAction)launchWebsiteMenu:(id)sender
 }
 
 
+- (IBAction)checkForUpdate:(id)sender
+{
+       [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist"];
+}
+
+
 - (NSArray *)serverList
 {
        return serverList;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
+- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop
+{
+       if ( TCGlobalWindowsOnTop != windowsOnTop )
+       {
+               [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil];
+       }
+}
+
+- (void)preferenceSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name
+{
+       if ( TCGlobalAllowRemote != allow || TCGlobalListenPort != port )
+       {
+               [self listenOnPort:port remote:allow];
+       }
+       if ( allow )
+       {
+               if ( !TCGlobalAllowRemote || ![TCGlobalBroadcastName isEqualToString:name] )
+               {
+                       [self broadcastWithName:name];
+               }
+       }
+       else
+       {
+               [self stopBroadcast];
+       }
+       [netTrafficController serverSetAllowRemote:allow listenPort:port broadcastName:name];
+       //[netTrafficController allowRemoteChanged:allow];
+       //[netTrafficController listenPortChanged:port];
+       //[netTrafficController broadcastNameChanged:name];
+}
+
+/*
 - (void)preferenceAllowRemoteChanged:(BOOL)allow
 {
        [self listenOnPort:TCGlobalListenPort remote:allow];
 
        [netTrafficController broadcastNameChanged:name];
 }
+*/
 
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        if ( [[errorDict objectForKey:@"NSNetServicesErrorCode"] intValue] == NSNetServicesCollisionError )
        {
-               [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", TCGlobalBroadcastName, TCGlobalAlternateBroadcastNameCount++]];
+               [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", [sender name], TCGlobalAlternateBroadcastNameCount++]];
        }
        else
        {
index e313dbf56ee23c0de21bd7751155194a0cd943d6..ad0c12a98d5cd0524e8b8127394d59d0e41d2d3a 100644 (file)
@@ -41,6 +41,7 @@
 
        NSMutableArray          *searchResults;
        NSMutableArray          *searchResultsUndone;
+       int                                     maxSearchResultsAmount;
 }
 
 + (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock;
index 4feaa269c630b2a2ccefb9d712feea497720a435..dd1c86841bab75dcdfdc8d4d021d0232f961f1ab 100644 (file)
@@ -12,7 +12,8 @@
 
 #import "SearchResults.h"
 
-#include "chaz.h"
+// for comparing floats
+#import <Chaz/Misc.h>
 
 #include <string.h>
 #include <math.h>
@@ -20,6 +21,7 @@
 
 
 // Internal Functions
+int bmsearch( char *pat, int m, char *text, int n, void *base, void *loc[] );
 //BOOL inline compare_float( float a, float b );
 //BOOL inline compare_double( double a, double b );
 
        TCaddress                                       *results = NULL;
        int                                                     resultsAmount = 0;
        
-       NSLog( @"string search: %s", value );
-       
        for (;;)
        {
                if ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )
                        
                        if ( result == KERN_SUCCESS )
                        {
-                               int                             i, top = dataLength - vsize;
+                               //int                           i, top = dataLength - vsize;
                                
                                if ( (results = realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )
                                {
                                        exit(0);
                                }
                                
-                               for ( i = 0; i < top; i++ )
+                               resultsAmount += bmsearch( (char *)value, vsize, (char *)data, dataLength, (void *)address, (void **)((char *)results+TCAddressSize*resultsAmount) );
+                               //resultsAmount += TBM( (char *)value, vsize, data, dataLength, (void **)((char *)results+TCAddressSize*resultsAmount) );
+                               //resultsAmount += SMITH( data, dataLength, (char *)value, vsize, (void **)((char *)results+TCAddressSize*resultsAmount) );
+                               
+                               /*for ( i = 0; i < top; i++ )
                                {
                                        if ( strncmp( value, data+i, vsize ) == 0 )
                                        {
                                                results[resultsAmount++] = (TCaddress)address + i;
                                        }
-                               }
+                               }*/
                        }
                        
                        free( data );
                        data = (int32_t *)malloc( size );
                        dataLength = size;
                        
-                       NSLog( @"address: %.8X size: %i", address, size );
+                       //NSLog( @"address: %.8X size: %i", address, size );
                        
                        if ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )
                        {
                                        NSLog( @"ERROR: could not expand buffer" );
                                        exit(0);
                                }
-                               
+
                                for ( i = 0; i < top; i++ )
                                {
                                        if ( *(data+i) == value )
        NSLog( @"found %i of %i", resultsAmount, value );
 }
 
-
 - (void)firstSearchDecimalFloat:(float)value
 {
        kern_return_t                           result;
                                
                                for ( i = 0; i < top; i++ )
                                {
-                                       if ( cl_compare_float_eps( *(data+i), value, 0.1f ) == 0 )
+                                       if ( CMCompareFloatsWithEpsilon( *(data+i), value, 0.1f ) == 0 )
                                        {
                                                results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
                                        }
                                
                                for ( i = 0; i < top; i++ )
                                {
-                                       if ( cl_compare_double_eps( *(data+i), value, 0.1 ) == 0 )
+                                       if ( CMCompareDoublesWithEpsilon( *(data+i), value, 0.1 ) == 0 )
                                        {
                                                results[resultsAmount++] = (TCaddress)address + i * sizeof(value);
                                        }
 {
        kern_return_t                           result;
        
-       int8_t                                          data;
+       char                                            *data;
        vm_size_t                                       dataLength;
        
        TCaddress                                       *results;
                return;
        }
        
+       if ( (data = (char *)malloc( vsize )) == NULL )
+       {
+               NSLog( @"ERROR: could not create buffer" );
+               
+               [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               return;
+       }
+       
        if ( (results = (TCaddress *)malloc( TCAddressSize*lastResultsAmount )) == NULL )
        {
                NSLog( @"ERROR: could not create buffer" );
                
                [self sendError:@"The server cancelled the search because it ran out of memory." fatal:NO];
+               free( data );
                return;
        }
        
        {
                TCaddress               address = lastResultsData[i];
                
-               dataLength = sizeof(data);
+               //dataLength = sizeof(data);
                
-               if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
+               if ( (result = vm_read_overwrite( processTask, address, vsize, (vm_address_t)(data), &dataLength )) == KERN_SUCCESS )
                {
-                       if ( data == value[0] )
+                       if ( memcmp( data, value, dataLength ) == 0 )
                        {
                                results[resultsAmount++] = address;
                        }
        realloc( results, TCAddressSize*resultsAmount );
        [searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_8_BIT data:results amount:resultsAmount]];
        
+       free( data );
+       
        NSLog( @"found %i of %i", resultsAmount, value );
 }
 
                
                if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
                {
-                       if ( cl_compare_float_eps( data, value, 0.1f ) == 0 )
+                       if ( CMCompareFloatsWithEpsilon( data, value, 0.1f ) == 0 )
                        {
                                results[resultsAmount++] = address;
                        }
                
                if ( (result = vm_read_overwrite( processTask, address, sizeof(data), (vm_address_t)(&data), &dataLength )) == KERN_SUCCESS )
                {
-                       if ( cl_compare_double_eps( data, value, 0.1 ) == 0 )
+                       if ( CMCompareDoublesWithEpsilon( data, value, 0.1 ) == 0 )
                        {
                                results[resultsAmount++] = address;
                        }
        int                                     failCount = 0;
        int                                     i;
        
-       NSLog( @"change string: %s", value );
-       
        for ( i = 0; i < count; i++ )
        {
                if ( vm_write( processTask, (vm_address_t)addresses[i], (vm_offset_t)value, vsize ) != KERN_SUCCESS )
 
        header.checksum = RandomChecksum();
        header.function = 7;
-       header.size = sizeof(amount) + TCAddressSize*amount;
-       //            AMOUNT           DATA
+       header.size = sizeof(amount) + sizeof(maxSearchResultsAmount) + TCAddressSize*maxSearchResultsAmount;
+       //            AMOUNT           MAX AMOUNT                       DATA
 
        lengthAfter = length = header.size + sizeof(header);
 
 
        COPY_TO_BUFFER( ptr, &header, sizeof(header) );
        COPY_TO_BUFFER( ptr, &amount, sizeof(amount) );
-       COPY_TO_BUFFER( ptr, data, TCAddressSize*amount );
+       COPY_TO_BUFFER( ptr, &maxSearchResultsAmount, sizeof(maxSearchResultsAmount) );
+       COPY_TO_BUFFER( ptr, data, TCAddressSize*maxSearchResultsAmount );
 
        if ( SendBuffer( sockfd, buffer, &length ) == -1 || lengthAfter != length )
        {
 
        COPY_FROM_BUFFER( &type, ptr, sizeof(type) );
        COPY_FROM_BUFFER( &size, ptr, sizeof(size) );
+       
+       COPY_FROM_BUFFER( &maxSearchResultsAmount, ptr, sizeof(maxSearchResultsAmount) );
 
        if ( ![searchResults lastObject] )
        {
                                {
                                        case SIZE_8_BIT:
                                        {
-                                               [self firstSearchString8bit:ptr size:(dataSize - (ptr - data))];
+                                               [self firstSearchString8bit:ptr size:(dataSize - (ptr - data) - 1)];
                                        }
                                                break;
                                }
 %%%%%%%%%%%%%%%%%%%%%%   Internal Functions
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
+
+#define ASIZE 256
+int bmsearch( char *pat, int m, char *text, int n, void *base, void *loc[] )
+{
+       int count = 0;
+       int i, j, k, skip[ASIZE];
+       
+       if( m==0 ) return 0;
+       for( k=0; k<ASIZE; k++ ) skip[k] = m;
+       for( k=0; k<m-1; k++ ) skip[(int)pat[k]] = m-k-1;
+       
+       for( k=m-1; k < n; k += skip[(int)text[k] & (ASIZE-1)] ) {
+               for( j=m-1, i=k; j>=0 && text[i] == pat[j]; j-- ) i--;
+               if( j == (-1) )
+                       /* SAVE LOCATION */
+                       loc[count++] = (void *)( base+i+1 );
+                       //return( text+i+1 );
+       }
+       return count;
+}
+
 /*
 BOOL compare_float( float a, float b )
 {
index c9c6005376bdab30636669d11da7b1fc3a132100..a36e7e581576fe1279d69d4108ea04d5ff3cba92 100644 (file)
@@ -4,7 +4,7 @@
             ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; 
             CLASS = AboutBoxController; 
             LANGUAGE = ObjC; 
-            OUTLETS = {aboutWindow = NSWindow; }; 
+            OUTLETS = {aboutWindow = NSWindow; nameVersionText = NSTextField; }; 
             SUPERCLASS = NSWindowController; 
         }, 
         {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
index 732b2b1f2ca619b6179fa6d2ef55fc6f38d2a860..ebc418d81c84f9f8fc89972478e6b8233c28ca91 100644 (file)
Binary files a/English.lproj/AboutBox.nib/keyedobjects.nib and b/English.lproj/AboutBox.nib/keyedobjects.nib differ
index b7816405a11fed5ffafda864f6d12af20650c759..919dcdb9262dd6cf409af7b8931764a3f58f6f39 100644 (file)
Binary files a/English.lproj/AboutBox.nib/objects.nib and b/English.lproj/AboutBox.nib/objects.nib differ
index c9c6005376bdab30636669d11da7b1fc3a132100..a36e7e581576fe1279d69d4108ea04d5ff3cba92 100644 (file)
@@ -4,7 +4,7 @@
             ACTIONS = {launchEmailButton = id; launchWebsiteButton = id; }; 
             CLASS = AboutBoxController; 
             LANGUAGE = ObjC; 
-            OUTLETS = {aboutWindow = NSWindow; }; 
+            OUTLETS = {aboutWindow = NSWindow; nameVersionText = NSTextField; }; 
             SUPERCLASS = NSWindowController; 
         }, 
         {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
index 732b2b1f2ca619b6179fa6d2ef55fc6f38d2a860..784ed8cc3ff21d245bdbc1bde7895404f97afc91 100644 (file)
Binary files a/English.lproj/AboutBox~.nib/keyedobjects.nib and b/English.lproj/AboutBox~.nib/keyedobjects.nib differ
index b7816405a11fed5ffafda864f6d12af20650c759..a5eb031b78a03a0db09abc941fdbf389e661da37 100644 (file)
Binary files a/English.lproj/AboutBox~.nib/objects.nib and b/English.lproj/AboutBox~.nib/objects.nib differ
index a002c0d4373dc6d086a317d5da0730c0f98d60a5..744ce1ac9f71f7d331afbb90bfffd26c92247369 100644 (file)
Binary files a/English.lproj/InfoPlist.strings and b/English.lproj/InfoPlist.strings differ
index dbb10e8c33c9771fdfb8c7042e846fdfb872fc22..331fb3af29b0a12bd627f275c8079a2c26d290cd 100644 (file)
@@ -2,7 +2,8 @@
     IBClasses = (
         {
             ACTIONS = {
-                launchDebugEmailMenu = id; 
+                checkForUpdate = id; 
+                launchEmailMenu = id; 
                 launchHelpFile = id; 
                 launchWebsiteMenu = id; 
                 showAboutBoxWindow = id; 
index 51758390a3f74f2a04a06b80c55feaad2d7438fe..acd81cfb746dfef9de73030c8cc5b20b98f00dfa 100644 (file)
@@ -7,7 +7,7 @@
        <key>IBEditorPositions</key>
        <dict>
                <key>29</key>
-               <string>414 540 377 44 0 0 1280 1002 </string>
+               <string>412 623 284 44 0 0 1280 1002 </string>
        </dict>
        <key>IBFramework Version</key>
        <string>349.0</string>
index 2a9c5c36b8680a30b3e64d006c9d6b5429eb3cac..46a09cbd0427c480b4d7f06b37a5026030dc735a 100644 (file)
Binary files a/English.lproj/MainMenu.nib/keyedobjects.nib and b/English.lproj/MainMenu.nib/keyedobjects.nib differ
index ed061e92e2a3437d7d93ec0129e150a3e8321b0c..bb4317df74319fc047af1f2b3f33fe416f8e2b69 100644 (file)
Binary files a/English.lproj/MainMenu.nib/objects.nib and b/English.lproj/MainMenu.nib/objects.nib differ
index dbb10e8c33c9771fdfb8c7042e846fdfb872fc22..df3e57d9a2b19eb72330ba6dd0968b6cc543ad66 100644 (file)
@@ -2,7 +2,7 @@
     IBClasses = (
         {
             ACTIONS = {
-                launchDebugEmailMenu = id; 
+                checkForUpdate = id; 
                 launchHelpFile = id; 
                 launchWebsiteMenu = id; 
                 showAboutBoxWindow = id; 
index d0ed50af48dfcb663302dde918c21a061d054ee5..acd81cfb746dfef9de73030c8cc5b20b98f00dfa 100644 (file)
@@ -7,7 +7,7 @@
        <key>IBEditorPositions</key>
        <dict>
                <key>29</key>
-               <string>414 540 377 44 0 0 1280 1002 </string>
+               <string>412 623 284 44 0 0 1280 1002 </string>
        </dict>
        <key>IBFramework Version</key>
        <string>349.0</string>
@@ -16,6 +16,6 @@
                <integer>29</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>7C107</string>
+       <string>7D24</string>
 </dict>
 </plist>
index 87846a3c1ed76fcd858af563bd84757e22a1c755..76e0352b6120c2762a0349cfa0ac21139610891b 100644 (file)
Binary files a/English.lproj/MainMenu~.nib/keyedobjects.nib and b/English.lproj/MainMenu~.nib/keyedobjects.nib differ
index fe43dc5c135a569ed23387d24567ac972e52cf08..b3ba7f253d614ade7a57691312c20843d169bf77 100644 (file)
Binary files a/English.lproj/MainMenu~.nib/objects.nib and b/English.lproj/MainMenu~.nib/objects.nib differ
index eacac037fe973763556e5a10ae7f82cc01292e1a..6150a8285882e426ba7eadcb67dd1a2ccc20f683 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>466 67 356 406 0 0 1280 1002 </string>
+       <string>114 -132 356 406 0 0 1280 1002 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>143</key>
index d02aa593732bec2a702e0e521aba090b0885181b..0e00406ad94c7c14884d9f90a5c6db49b86c9a9f 100644 (file)
Binary files a/English.lproj/MyDocument.nib/keyedobjects.nib and b/English.lproj/MyDocument.nib/keyedobjects.nib differ
index 7e23fc60b823688f2c895b31b2fef5c67db2350a..46427e8ef3fb8bac1ecbfd3aa34a31f1ea814672 100644 (file)
Binary files a/English.lproj/MyDocument.nib/objects.nib and b/English.lproj/MyDocument.nib/objects.nib differ
index eacac037fe973763556e5a10ae7f82cc01292e1a..de4f22470a79dd7e930df07196bf0cffd830d038 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>466 67 356 406 0 0 1280 1002 </string>
+       <string>114 -132 356 406 0 0 1280 1002 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>143</key>
@@ -24,9 +24,7 @@
        <key>IBFramework Version</key>
        <string>349.0</string>
        <key>IBLockedObjects</key>
-       <array>
-               <integer>285</integer>
-       </array>
+       <array/>
        <key>IBOldestOS</key>
        <integer>2</integer>
        <key>IBOpenObjects</key>
index 6a8ea787d032ae4a34a9c7abefeaf51ecb8bc27d..0e00406ad94c7c14884d9f90a5c6db49b86c9a9f 100644 (file)
Binary files a/English.lproj/MyDocument~.nib/keyedobjects.nib and b/English.lproj/MyDocument~.nib/keyedobjects.nib differ
index d5b90635de62b6cb07a80cd0447650dac4909134..46427e8ef3fb8bac1ecbfd3aa34a31f1ea814672 100644 (file)
Binary files a/English.lproj/MyDocument~.nib/objects.nib and b/English.lproj/MyDocument~.nib/objects.nib differ
index 13785e2f5ae686ec8a6b6d9f8f5a8810913e6a59..851cbfb52e7810589dbb7e22f64a72f7ac8c0370 100644 (file)
@@ -17,6 +17,6 @@
                <integer>26</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>7C107</string>
+       <string>7D24</string>
 </dict>
 </plist>
index d48ead21f23570afbd9bf90ea035787c98fc58af..b6378b8df9edc31d07038569518d69d8f3675ca0 100644 (file)
Binary files a/English.lproj/NetTraffic.nib/keyedobjects.nib and b/English.lproj/NetTraffic.nib/keyedobjects.nib differ
index d1e182575960a40336ea598891d10e652c10ba36..2bebec56bfb31e1a67046907b3230dfec93b2fd4 100644 (file)
Binary files a/English.lproj/NetTraffic.nib/objects.nib and b/English.lproj/NetTraffic.nib/objects.nib differ
index aecdb95783eadf052f19d266fe4349ed9b8651e2..13785e2f5ae686ec8a6b6d9f8f5a8810913e6a59 100644 (file)
@@ -11,7 +11,7 @@
                <integer>26</integer>
        </array>
        <key>IBOldestOS</key>
-       <integer>1</integer>
+       <integer>2</integer>
        <key>IBOpenObjects</key>
        <array>
                <integer>26</integer>
index ba73c957f89f95ca0a72e947a5d9cbbcaad36e6c..d48ead21f23570afbd9bf90ea035787c98fc58af 100644 (file)
Binary files a/English.lproj/NetTraffic~.nib/keyedobjects.nib and b/English.lproj/NetTraffic~.nib/keyedobjects.nib differ
index 0fcaf08acb2f22cc51a21cb4038d7d5d9826cf24..d1e182575960a40336ea598891d10e652c10ba36 100644 (file)
Binary files a/English.lproj/NetTraffic~.nib/objects.nib and b/English.lproj/NetTraffic~.nib/objects.nib differ
index d0ff1c98d00cbb6444954d123d7d4b9b971c181b..ab06de0d1c76c0632a62d7b51b2461ee19be0c3b 100644 (file)
@@ -2,22 +2,18 @@
     IBClasses = (
         {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
         {
-            ACTIONS = {
-                allowRemoteButton = id; 
-                broadcastNameTextField = id; 
-                listenPortTextField = id; 
-                playSoundsButton = id; 
-                windowsOnTopButton = id; 
-            }; 
+            ACTIONS = {cancel = id; change = id; revert = id; save = id; }; 
             CLASS = PreferenceController; 
             LANGUAGE = ObjC; 
             OUTLETS = {
                 allowRemoteButton = id; 
                 broadcastNameTextField = id; 
                 delegate = id; 
+                hitsDisplayedTextField = id; 
                 listenPortTextField = id; 
                 playSoundsButton = id; 
                 prefsWindow = id; 
+                updateAutomaticallyButton = id; 
                 windowsOnTopButton = id; 
             }; 
             SUPERCLASS = NSWindowController; 
index dd873a59ec6c3574c5ed6b768a1b1ebf4a0a8ea1..efe0c6b76ccc9bf34c274fc8cf669ae4cb9a96db 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>299 131 356 240 0 0 1280 1002 </string>
+       <string>214 102 356 240 0 0 1280 1002 </string>
        <key>IBFramework Version</key>
        <string>349.0</string>
        <key>IBLockedObjects</key>
@@ -15,6 +15,6 @@
                <integer>9</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>7C107</string>
+       <string>7D24</string>
 </dict>
 </plist>
index fd038bc90a135efdec707d49ca65a817adadddac..e686680890375752b45f10e31b9be5f34337ea5f 100644 (file)
Binary files a/English.lproj/Preferences.nib/keyedobjects.nib and b/English.lproj/Preferences.nib/keyedobjects.nib differ
index 0d81752c0006d14b10aef383f7ccf335777206c1..0e8b2b76f9cadcac6981300849b07ed7683bdf13 100644 (file)
Binary files a/English.lproj/Preferences.nib/objects.nib and b/English.lproj/Preferences.nib/objects.nib differ
index d0ff1c98d00cbb6444954d123d7d4b9b971c181b..ab06de0d1c76c0632a62d7b51b2461ee19be0c3b 100644 (file)
@@ -2,22 +2,18 @@
     IBClasses = (
         {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
         {
-            ACTIONS = {
-                allowRemoteButton = id; 
-                broadcastNameTextField = id; 
-                listenPortTextField = id; 
-                playSoundsButton = id; 
-                windowsOnTopButton = id; 
-            }; 
+            ACTIONS = {cancel = id; change = id; revert = id; save = id; }; 
             CLASS = PreferenceController; 
             LANGUAGE = ObjC; 
             OUTLETS = {
                 allowRemoteButton = id; 
                 broadcastNameTextField = id; 
                 delegate = id; 
+                hitsDisplayedTextField = id; 
                 listenPortTextField = id; 
                 playSoundsButton = id; 
                 prefsWindow = id; 
+                updateAutomaticallyButton = id; 
                 windowsOnTopButton = id; 
             }; 
             SUPERCLASS = NSWindowController; 
index dd873a59ec6c3574c5ed6b768a1b1ebf4a0a8ea1..efe0c6b76ccc9bf34c274fc8cf669ae4cb9a96db 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>299 131 356 240 0 0 1280 1002 </string>
+       <string>214 102 356 240 0 0 1280 1002 </string>
        <key>IBFramework Version</key>
        <string>349.0</string>
        <key>IBLockedObjects</key>
@@ -15,6 +15,6 @@
                <integer>9</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>7C107</string>
+       <string>7D24</string>
 </dict>
 </plist>
index 111873ec0eb603035895e43ac8d0e9739eee6a91..3e8692d62bd9985df17af533bec070f8b855b8c5 100644 (file)
Binary files a/English.lproj/Preferences~.nib/keyedobjects.nib and b/English.lproj/Preferences~.nib/keyedobjects.nib differ
index 299cb1e0e955cbf2f386944b078c3531fae5dc3f..341389d959adee34cb8a9ab6e39ff807bc936821 100644 (file)
Binary files a/English.lproj/Preferences~.nib/objects.nib and b/English.lproj/Preferences~.nib/objects.nib differ
similarity index 95%
rename from Info-The_Cheat__Upgraded_.plist
rename to Info-The_Cheat.plist
index a29f41f5c553df5c3c4c65f39103f44e2c691824..d7aef025f0cf83efbfede87c6ba81102e985e6d0 100644 (file)
@@ -18,7 +18,7 @@
        <key>CFBundleExecutable</key>
        <string>The Cheat</string>
        <key>CFBundleGetInfoString</key>
-       <string>The Cheat 1.0</string>
+       <string>The Cheat 1.1</string>
        <key>CFBundleIconFile</key>
        <string>icon.icns</string>
        <key>CFBundleIdentifier</key>
@@ -30,7 +30,7 @@
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.0</string>
+       <string>1.1</string>
        <key>CFBundleSignature</key>
        <string>ThCh</string>
        <key>NSMainNibFile</key>
index fcd29ae5c239ca0a29cebb67c74a46e67a7f4212..352874ece5737f86aec581ced94b725f2602ff01 100644 (file)
@@ -43,6 +43,7 @@
 
        TCaddress                       *searchResults;
        int                                     searchResultsAmount;
+       int                                     maxSearchResultsAmount;
 
        // to allow for connecting on new document
        BOOL                            everConnected;
index 9e72f85e4edfbbb58fc84a2b1474f5a2c8a1ebad..da58b81a709fb46bf56fe8639c796e4590c23212 100644 (file)
@@ -259,6 +259,7 @@ void TCPlaySound( NSString *name );
        [searchButton setEnabled:NO];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Not Connected" duration:0];
+       [statusText setToolTip:@""];
        [statusBar stopAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Change..."];
@@ -282,6 +283,7 @@ void TCPlaySound( NSString *name );
        [self updateSearchButton];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Connected" duration:0];
+       [statusText setToolTip:@""];
        [statusBar stopAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Change..."];
@@ -304,7 +306,7 @@ void TCPlaySound( NSString *name );
        [self updateSearchBoxes];
        [self updateSearchButton];
        [clearSearchButton setEnabled:YES];
-       if ( searchResultsAmount < TCMaxSearchResults )
+       if ( searchResultsAmount < maxSearchResultsAmount )
        {
                if ( searchResultsAmount == 1 )
                {
@@ -318,10 +320,12 @@ void TCPlaySound( NSString *name );
                {
                        [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0];
                }
+               [statusText setToolTip:@""];
        }
        else
        {
-               [self setStatusText:[NSString stringWithFormat:@"Results: >%i", TCMaxSearchResults] duration:0];
+               [self setStatusText:[NSString stringWithFormat:@"Results: >%i", maxSearchResultsAmount] duration:0];
+               [statusText setToolTip:[NSString stringWithFormat:@"Results: %i", searchResultsAmount]];
        }
        [statusBar stopAnimation:self];
        [addressTable setEnabled:YES];
@@ -347,6 +351,7 @@ void TCPlaySound( NSString *name );
        [searchButton setEnabled:NO];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Searching..." duration:0];
+       [statusText setToolTip:@""];
        [statusBar startAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Change..."];
@@ -396,6 +401,7 @@ void TCPlaySound( NSString *name );
        [searchButton setEnabled:NO];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Changing Later..." duration:0];
+       [statusText setToolTip:@""];
        [statusBar startAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Cancel Change"];
@@ -420,6 +426,7 @@ void TCPlaySound( NSString *name );
        [searchButton setEnabled:NO];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Repeating Change..." duration:0];
+       [statusText setToolTip:@""];
        [statusBar startAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Stop Change"];
@@ -468,6 +475,7 @@ void TCPlaySound( NSString *name );
        [searchButton setEnabled:NO];
        [clearSearchButton setEnabled:NO];
        [self setStatusText:@"Redoing..." duration:0];
+       [statusText setToolTip:@""];
        [statusBar startAnimation:self];
        [addressTable setEnabled:NO];
        [changeButton setTitle:@"Change..."];
@@ -853,10 +861,11 @@ void TCPlaySound( NSString *name );
        [self destroyResults];
 
        COPY_FROM_BUFFER( &searchResultsAmount, ptr, sizeof(searchResultsAmount) );
+       COPY_FROM_BUFFER( &maxSearchResultsAmount, ptr, sizeof(maxSearchResultsAmount) );
 
        if ( searchResultsAmount > 0 )
        {
-               int                             memSize = TCAddressSize*searchResultsAmount;
+               int                             memSize = TCAddressSize*maxSearchResultsAmount;
                
                if ( (searchResults = (TCaddress *)malloc( memSize )) == NULL )
                {
@@ -985,7 +994,7 @@ void TCPlaySound( NSString *name );
        TCsize                  size = [[sizePopup selectedItem] tag];
        
        char                    *data, *ptr;
-       int                             dataSize = sizeof(type) + sizeof(size);
+       int                             dataSize = sizeof(type) + sizeof(size) + sizeof(TCGlobalHitsDisplayed);
        
        data = (char *)malloc( dataSize );
        ptr = data;
@@ -994,6 +1003,9 @@ void TCPlaySound( NSString *name );
        COPY_TO_BUFFER( ptr, &type, sizeof(type) );
        COPY_TO_BUFFER( ptr, &size, sizeof(size) );
        
+       // copy the number of results to return.
+       COPY_TO_BUFFER( ptr, &TCGlobalHitsDisplayed, sizeof(TCGlobalHitsDisplayed) );
+       
        NSLog( @"type: %i, size: %i", type, size );
        
        // switch to cheating mode if this is the first search.
@@ -1731,7 +1743,7 @@ void TCPlaySound( NSString *name );
 
 - (int)numberOfRowsInTableView:(NSTableView *)table
 {
-       return (searchResultsAmount <= TCMaxSearchResults) ? searchResultsAmount : TCMaxSearchResults;
+       return (searchResultsAmount <= maxSearchResultsAmount) ? searchResultsAmount : maxSearchResultsAmount;
 }
 
 - (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row
index 092ffafe76114a7485a4aa39989da6856cde81a0..fb7a1160cd6710083839f495bb4c9b0d060770d8 100644 (file)
 - (void)initialInterfaceSetup;
 - (void)interfaceUpdate;
 
+- (void)serverSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name;
+
+/*
 - (void)allowRemoteChanged:(BOOL)allow;
 - (void)listenPortChanged:(int)port;
 - (void)broadcastNameChanged:(NSString *)name;
+*/
 
 - (void)connectionListChanged;
 
index 5649110a23334e39c027fbeb7fc5e84f527c5a66..f57e02ec54e4022682bf5e3acb377cfc4bac2a22 100644 (file)
@@ -41,8 +41,9 @@
 {
        //[netTrafficWindow setResizeIncrements:NSMakeSize( 1.0, 17.0 )];
        
-       [self allowRemoteChanged:TCGlobalAllowRemote];
-       [self listenPortChanged:TCGlobalListenPort];
+       [self serverSetAllowRemote:TCGlobalAllowRemote listenPort:TCGlobalListenPort broadcastName:TCGlobalBroadcastName];
+       //[self allowRemoteChanged:TCGlobalAllowRemote];
+       //[self listenPortChanged:TCGlobalListenPort];
        [self setConnectionCount:[delegate netTrafficConnectionCount]];
        [serverListTable reloadData];
 }
 }
 
 
+- (void)serverSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name
+{
+       if ( allow )
+       {
+               [listenPortText setStringValue:[NSString stringWithFormat:@"Listening on port %i.", port]];
+               [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]];
+       }
+       else
+       {
+               [broadcastNameText setStringValue:@"Not accepting new connections from remote clients."];
+               [listenPortText setStringValue:@"Listening for local connections only."];
+       }
+}
+
+
+/*
 - (void)allowRemoteChanged:(BOOL)allow
 {
        if ( allow )
                [broadcastNameText setStringValue:[NSString stringWithFormat:@"Broadcasting service as \"%@.\"", name]];
        }
 }
+*/
 
 
 - (void)connectionListChanged
index 681c5c8504bcff90ee30e2a4da41872a9efae444..aa185ad49e89555946a477e51015b13346fb85c9 100644 (file)
        IBOutlet id             prefsWindow;
        IBOutlet id             playSoundsButton;
        IBOutlet id             windowsOnTopButton;
+       IBOutlet id             updateAutomaticallyButton;
        IBOutlet id             allowRemoteButton;
        IBOutlet id             broadcastNameTextField;
        IBOutlet id             listenPortTextField;
+       IBOutlet id             hitsDisplayedTextField;
 }
 
 - (id)initWithDelegate:(id)del;
 - (void)initialInterfaceSetup;
 - (void)interfaceUpdate;
 
+/*
 - (IBAction)playSoundsButton:(id)sender;
 - (IBAction)windowsOnTopButton:(id)sender;
+- (IBAction)updateAutomaticallyButton:(id)sender;
 - (IBAction)allowRemoteButton:(id)sender;
 - (IBAction)listenPortTextField:(id)sender;
 - (IBAction)broadcastNameTextField:(id)sender;
+- (IBAction)hitsDisplayedTextField:(id)sender;
+*/
+
+- (IBAction)change:(id)sender;
+
+- (IBAction)revert:(id)sender;
+- (IBAction)cancel:(id)sender;
+- (IBAction)save:(id)sender;
 
 @end
\ No newline at end of file
index fe178fb4b62a3f89a5ddac19585e9a9814d9bb7a..4b603622eca9dab99750b6d35a3845657485e64e 100644 (file)
@@ -29,7 +29,6 @@
 - (void)windowDidLoad
 {
        [self initialInterfaceSetup];
-       [self interfaceUpdate];
 }
 
 
 {
        [playSoundsButton setState:(TCGlobalPlaySounds)? NSOnState:NSOffState];
        [windowsOnTopButton setState:(TCGlobalWindowsOnTop)? NSOnState:NSOffState];
+       [updateAutomaticallyButton setState:(TCGlobalUpdateCheck)? NSOnState:NSOffState];
        [allowRemoteButton setState:(TCGlobalAllowRemote)? NSOnState:NSOffState];
        [listenPortTextField setIntValue:TCGlobalListenPort];
        [broadcastNameTextField setStringValue:[[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]];
+       [hitsDisplayedTextField setIntValue:TCGlobalHitsDisplayed];
+       
+       [self interfaceUpdate];
 }
 
 - (void)interfaceUpdate
 {
-       if ( TCGlobalAllowRemote )
+       if ( [allowRemoteButton state] )
        {
                [listenPortTextField setEnabled:YES];
                [broadcastNameTextField setEnabled:YES];
@@ -56,7 +59,7 @@
        }
 }
 
-
+/*
 - (IBAction)playSoundsButton:(id)sender
 {
        if ( [playSoundsButton state] == NSOnState )
        [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil];
 }
 
+- (IBAction)updateAutomaticallyButton:(id)sender
+{
+       if ( [updateAutomaticallyButton state] == NSOnState )
+       {
+               TCGlobalUpdateCheck = YES;
+               [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCUpdateCheckPref];
+       }
+       else
+       {
+               TCGlobalUpdateCheck = NO;
+               [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCUpdateCheckPref];
+       }
+}
+
 - (IBAction)allowRemoteButton:(id)sender
 {
        if ( [allowRemoteButton state] == NSOnState )
        [delegate preferenceBroadcastNameChanged:name];
 }
 
+- (IBAction)hitsDisplayedTextField:(id)sender
+{
+       TCGlobalHitsDisplayed = [hitsDisplayedTextField intValue];
+       
+       [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref];
+}
+*/
+
+
+- (IBAction)change:(id)sender
+{
+       [self interfaceUpdate];
+}
+
+
+- (IBAction)revert:(id)sender
+{
+       [self initialInterfaceSetup];
+}
+
+- (IBAction)cancel:(id)sender
+{
+       [self initialInterfaceSetup];
+       [self close];
+}
+
+- (IBAction)save:(id)sender
+{
+       TCGlobalPlaySounds = [playSoundsButton state];
+       [[NSUserDefaults standardUserDefaults] setBool:TCGlobalPlaySounds forKey:TCPlaySoundsPref];
+       
+       // send window information to the delegate so the necessary adjustments can be made
+       [delegate preferenceSetWindowsOnTop:[windowsOnTopButton state]];
+       
+       TCGlobalWindowsOnTop = [windowsOnTopButton state];
+       [[NSUserDefaults standardUserDefaults] setBool:TCGlobalWindowsOnTop forKey:TCWindowsOnTopPref];
+       
+       TCGlobalUpdateCheck = [updateAutomaticallyButton state];
+       [[NSUserDefaults standardUserDefaults] setBool:TCGlobalUpdateCheck forKey:TCUpdateCheckPref];
+       
+       // send server information to the delegate so the server can be updated accordingly
+       [delegate preferenceSetAllowRemote:[allowRemoteButton state] listenPort:[listenPortTextField intValue] broadcastName:[broadcastNameTextField stringValue]];
+       
+       TCGlobalAllowRemote = [allowRemoteButton state];
+       [[NSUserDefaults standardUserDefaults] setBool:TCGlobalAllowRemote forKey:TCAllowRemotePref];
+       
+       TCGlobalListenPort = [listenPortTextField intValue];
+       [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
+       
+       [[NSUserDefaults standardUserDefaults] setObject:[broadcastNameTextField stringValue] forKey:TCBroadcastNamePref];
+       
+       TCGlobalHitsDisplayed = [hitsDisplayedTextField intValue];
+       [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref];
+       
+       [self close];
+}
+
 
 @end
\ No newline at end of file
index 156541279dbca18a4bfaedfa701708937ad5e465..dd31d187a0344047b33c364f81f64f000bf2cf03 100644 (file)
 
 @protocol PreferenceControlling
 
+- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop;
+- (void)preferenceSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name;
+
+/*
 - (void)preferenceAllowRemoteChanged:(BOOL)allow;
 - (void)preferenceListenPortChanged:(int)port;
 - (void)preferenceBroadcastNameChanged:(NSString *)name;
+*/
 
 @end
\ No newline at end of file
diff --git a/Read Me.pdf b/Read Me.pdf
deleted file mode 100644 (file)
index 0751b65..0000000
Binary files a/Read Me.pdf and /dev/null differ
index 3c4fa613523c471a0069ea0547b72a92c8982d73..e15a74ee872d7d20a2c185f8d34130a1f75a1202 100644 (file)
 {\rtf1\mac\ansicpg10000\cocoartf102
-{\fonttbl\f0\fnil\fcharset77 MarkerFelt-Wide;\f1\fnil\fcharset77 AmericanTypewriter;\f2\fnil\fcharset77 Zapfino;
-\f3\fswiss\fcharset77 Helvetica;\f4\fswiss\fcharset77 Helvetica-Bold;}
+{\fonttbl\f0\fswiss\fcharset77 Arial-BoldMT;\f1\fswiss\fcharset77 ArialMT;\f2\fswiss\fcharset77 Arial-ItalicMT;
+\f3\fswiss\fcharset77 Helvetica;\f4\fnil\fcharset77 Monaco;}
 {\colortbl;\red255\green255\blue255;}
-\margl1440\margr1440\vieww12440\viewh17240\viewkind1\viewscale100
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
+\margl1440\margr1440\vieww11440\viewh16000\viewkind0
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
 
-\f0\fs72 \cf0 The Cheat
-\f1  
-\fs28 v1.0
-\f2\fs72 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc
+\f0\b\fs42 \cf0 The Cheat
+\fs24  v1.1.1
+\fs42 \
 
-\f0\fs28 \cf0 by Chaz McGarvey\
+\fs24 Chaz McGarvey\
 
-\f3\fs36 December 19, 2003
-\fs28 \
-\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural
+\f1\b0\fs32 March 8, 2004
+\f0\b\fs24 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
 
-\f0 \cf0 \
+\fs42 \cf0 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
+
+\fs28 \cf0 What is The Cheat?
+\f1\b0 \
+\
+The Cheat is an application referred to as a 
+\f2\i universal game trainer
+\f1\i0 .  It allows you to alter many different aspects of computer games.  For example, you can change things like the amount of lives your character has, the amount of ammo, the level you're on, the abilities you have, your location in the game, and whatever else you want to change in your games.  This all occurs in real-time while the game is running, and the process will work for almost any game.  The Cheat contains the following features:\
+\
 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj
 
-\f4\b \cf0 Introduction
-\f3\b0 \
+\f3 \cf0 - Includes support for finding strings, integers, and floats.\
+- Ability to pause the target application without switching programs.\
+- Browse and change possible variables from a list.\
+- Remote cheating lets you cheat games which won't give up full-screen.\
+- Ability to change variables continually, keeping a variable constant.\
+- Undo/redo works to revert to previous search results.
+\f1 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
+\cf0 \
+
+\f0\b How does it work?
+\f1\b0 \
 \
-Remember those programs you used to have in the OS 9 days that let you trick most games into giving you extra lives or advance your level?  Remember how Pandora's Box helped you beat Bill the Demon, or how Cheat II gave you the ammo you needed in Doom 2?  Well, it's finally time to relive the memory.\
+Although the process has been used to cheat games for many years, it is relatively new to Mac OS X.  Similar programs have been written for many platforms including Windows and many different game consoles.  To do what it does, The Cheat accesses the memory of other applications.  It first reads through the entire address space, searching for variables based on input you provide.  Search results are then narrowed down by scanning the memory again after the value of the variable you are searching for has changed.  After a few searches, there should only be one variable remaining (ideally).  The Cheat will then allow you to change this variable to whatever you want.  To learn more about using the program, refer to the tutorial which you should have received with the application.\
 \
-OK, enough of the cheesy intro.  The fact is, since the release of Mac OS X, there hasn't been a good general game cheater available.  Until now.  This is The Cheat, a general purpose cheater designed to help you get through those tough levels or just add some interesting possibilities to your games.\
+
+\f0\b Is this safe?
+\f1\b0 \
+\
+Mac OS X includes support for protected memory which disables running processes from accessing the address spaces of other processes and of the operating system.  This causes a more stable system because faulty applications won't be able to trash the memory of other applications which could cause certain applications to crash or the entire operating system to crash.  So since The Cheat is able to get around this protection, might this be bad for stability?  Well, potentially yes.  However, The Cheat only changes the memory of other programs where you tell it to.  Thus, if you follow the process correctly, your games should never crash.  Furthermore, assuming you don't run The Cheat as root (which would not be a good idea), The Cheat will not be able to alter any system-critical processes so it would actually be very difficult if not impossible to crash your system using The Cheat.\
+\
+That said, The Cheat does support a feature called remote cheating.  This allows you to cheat programs running on one computer from another computer on the same network.  This feature exists to allow programs which won't give up full-screen to be cheated.  However, if there happens to be any malicious Mac OS X users on your network who also have The Cheat, they could potentially access the memory of your applications whenever remote cheating is enabled.  This feature is off by default.  It is recommended that you leave it off whenever you don't need its functionality.\
 \
 
-\f4\b The Features
-\f3\b0 \
+\f0\b So who writes this software?
+\f1\b0 \
+\
+I do.  If you need to contact me, my hours are 12 a.m. to 11:59:59 p.m. (yes, I need at least a second off) Monday through Saturday.  Get ahold of me if you have questions about the software or if you have bugs to report.  There are also resources on my web site (including discussion forums and source code for developers).\
+\
+Web:   http://www.brokenzipper.com\
+Email: chaz@brokenzipper.com\
 \
-\'a5  Includes support for finding strings, integers, and floats.\
-\'a5  Ability to pause the target application without switching programs.\
-\'a5  Browse and change possible variables from a list.\
-\'a5  Remote cheating lets you cheat games which won't give up full-screen.\
-\'a5  Ability to change variables continually, keeping a variable constant.\
-\'a5  Undo/redo works to revert to previous search results.\
+Be sure to have a nice disposition if you decide to contact me, and keep in mind that that this software is free.\
 \
 
-\f4\b The Process
-\f3\b0 \
+\f0\b Do you keep track of version history?
+\f1\b0 \
+\
+Against my better judgment, yes.  Here it is:\
 \
-If you are new to game cheaters, knowing a little bit about how they work will help you use them properly (and safely).  A variable is a component of a game which changes.  Some examples of variables include the amount of lives, amount of ammo, current level, score, etc.  All of a game's variables are stored somewhere in memory.  Your job, as the cheater, is to find the location of a variable in memory and change its value to something more... appropriate.  ;-)\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
 
-\f4\b Safety Concerns
-\f3\b0 \
+\f4\fs24 \cf0 1.1.1    (03/08/04, public)\
+Bug Fixes:\
+- String searches can now be narrowed down (sorry about that).\
+\
+1.1            (03/08/04, public)\
+New Features:\
+- Update Check (query a server to determine current version).\
+- Ability to specify how many hits you want The Cheat to show you.\
+Bug Fixes:\
+- String changing now changes the correct number of bytes.\
+- Other minor bugs.\
+Other Changes:\
+- String searching is now optimized.\
+- Default port changed from 5007 to 51835.\
+- New icon.\
 \
-This software works by changing other applications' memory without them knowing.  If not used properly, this can be a dangerous tool.  In many instances, improper use can lead to the target application crashing (and possibly losing data), but that's not the worst case scenario.  Fortunately, The Cheat is a very easy application to learn how to use, and problems rarely occur even among novices.\
+1.0            (12/19/03, public)\
+Bug Fixes:\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj
+\cf0 - User interface glitch disallowing continuous changes to be stopped.\
+- Other minor bugs.\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
+\cf0 \
+1.0b4  (12/11/03, internal)\
+Bug Fixes:\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qj
+\cf0 - The address table selection can now be changed during a continuous change.\
+- Stability issues relating to the network browser.\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
+\cf0 - Server finder no longer displays servers on the local machine.\
+- Some crashes resolved.\
+Other Changes:\
+- Progress bar changed to the round variety.\
+- Information about searches is now provided for new users.\
+- Minor user interface improvements.\
 \
-Security is also something to consider.  There is a feature of The Cheat called remote cheating.  This allows other computers on the network to connect to another computer remotely to execute cheating functions.  While enabled, a very skilled hacker might have a chance at doing something nasty.  Please note that this is extremely rare, and this feature is off by default.  It is recommended that you always leave this feature off unless it's in use.\
+1.0b3  (11/26/03, internal)\
+New Features:\
+- Change values on a time interval to make variables seem constant.\
+- Informative about box added.\
+Bug Fixes:\
+- Searching implemented for all supported types.\
+- Changing values now works.\
+- Searching/changing decimal numbers is no longer broken.\
+- Targets can now be paused before the first search.\
+- Other minor bugs.\
 \
-Have I got you thoroughly scared yet?  Don't be!  Like I said, The Cheat is easy to learn and problems rarely occur.  Just don't do anything weird like search for zero then change all the results at once, and you'll be fine!\
+1.0b2  (11/12/03, internal)\
+New Features:\
+- Remote cheating (cheat games over a network).\
+- Pause target (pause without switching applications).\
+Bug Fixes:\
+- Some user interface glitches fixed.\
+Other Changes:\
+- New icon.\
+\
+1.0b1  (09/04/03, public)\
+Features:\
+- Searching and changing integers, strings, and floats.\
+- Changing variables from a list.
+\f1\fs28 \
+\
+Remember, different versions of The Cheat are not guaranteed to be able to communicate with each other using the remote cheating feature.  It is highly recommended that you upgrade every copy on you network if you use remote cheating.\
+\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
 
-\f4\b \
-Help/Support
-\f3\b0 \
+\f0\b \cf0 My computer died.  Can I sue you?
+\f1\b0 \
 \
-Got questions about this software?  Not sure what to do?  Or maybe you've got a bug to report?  Support for The Cheat is provided through email and the BrokenZipper website (see contact information below).\
+Uh, no...  Here are the complete terms of use:\
 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
 
-\f4\b Contact Information
-\f3\b0 \
+\f4\fs24 \cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+\f1\fs28 \
 \
-Email: chaz@brokenzipper.com\
-Web:           http://www.brokenzipper.com\
+Fortunately, The Cheat hasn't yet caused any dead computers to my knowledge.  Let's cross our fingers and hope the luck continues.\
 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj
 
-\f4\b Legal... Stuff
-\f3\b0 \
+\f0\b \cf0 So what else is there?
+\f1\b0 \
 \
-No warranty of any kind is provided with the use of The Cheat.  By using this software, you agree that you do so at your own risk.  This software is \'a9 2003, Chaz McGarvey.  Distributing this software is allowed as long as the executable is unedited and this Read Me file is included.}
\ No newline at end of file
+Well that's pretty much it.  If you are new to universal game trainers, I highly recommend that you go through the included tutorial before you try to figure it out yourself and ultimately become frustrated.  The tutorial doesn't include everything, though, so visit the forums or email me if you need additional help.  I'm really quite willing to help provided I have time.  Other than that, just have fun with The Cheat.  Or don't.  Whatever.\
+}
\ No newline at end of file
index a34ce14563c3b07fa2b8b923823529ae282a262f..bd54b8c8629af6f56f7e4326705bdf79286f64a5 100644 (file)
@@ -2,9 +2,9 @@
 {
        089C1660FE840EACC02AAC07 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 641}}";
-                       sepNavSelRange = "{155, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 641}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 834}}";
+                       sepNavSelRange = "{203, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 834}}";
                };
        };
        2A37F4A9FDCFA73011CA2CEA = {
                        };
                        PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
                                PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
-                               PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
+                               PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_MessageID;
                                PBXFileTableDataSourceColumnWidthsKey = (
                                        20,
-                                       685.8799,
-                                       365.2085,
+                                       651.8799,
+                                       348.2085,
                                );
                                PBXFileTableDataSourceColumnsKey = (
                                        PBXErrorsWarningsDataSource_TypeID,
@@ -65,9 +65,9 @@
                                PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
                                PBXFileTableDataSourceColumnWidthsKey = (
                                        20,
-                                       772,
+                                       729,
                                        20,
-                                       137,
+                                       129,
                                        43,
                                        43,
                                        20,
                                PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
                                PBXFileTableDataSourceColumnWidthsKey = (
                                        20,
-                                       653,
-                                       138,
+                                       616,
+                                       131,
                                        20,
-                                       138,
+                                       131,
                                        43,
                                        43,
                                );
                                        PBXFileDataSource_Warnings_ColumnID,
                                );
                        };
-                       PBXPerProjectTemplateStateSaveDate = 100313467;
+                       PBXPerProjectTemplateStateSaveDate = 100473363;
                        PBXPrepackagedSmartGroups_v2 = (
                                {
                                        PBXTransientLocationAtTop = bottom;
                                                        _percentageOfCollapsedView = 0;
                                                        isCollapsed = yes;
                                                        sizes = (
-                                                               "{{0, 0}, {1098, 227}}",
-                                                               "{{0, 227}, {1098, 639}}",
+                                                               "{{0, 0}, {1047, 0}}",
+                                                               "{{0, 0}, {1047, 866}}",
                                                        );
                                                };
                                                PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = {
-                                                       BoundsStr = "{{0, 0}, {1083, 210}}";
+                                                       BoundsStr = "{{0, 0}, {1032, 15}}";
                                                        Rows = (
                                                                0,
                                                        );
-                                                       VisibleRectStr = "{{0, 0}, {1083, 210}}";
+                                                       VisibleRectStr = "{{0, 0}, {0, 0}}";
                                                };
                                                PBXProjectWorkspaceModule_EditorOpen = true;
                                                PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
                                                        PBXSplitModuleInNavigatorKey = {
                                                                Split0 = {
-                                                                       bookmark = 6E90C19205FAAA0900857F22;
+                                                                       bookmark = 6E55007505FD2CAE00EE693C;
                                                                        history = (
-                                                                               6E48626A059421D8006D09F8,
-                                                                               6E48626B059421D8006D09F8,
-                                                                               6E48626C059421D8006D09F8,
-                                                                               6E48626D059421D8006D09F8,
-                                                                               6E48626E059421D8006D09F8,
                                                                                6E48626F059421D8006D09F8,
-                                                                               6E9D6CEB059429D400D9A2D7,
-                                                                               6E90C17705FAA6B400857F22,
-                                                                               6E90C17C05FAA6C400857F22,
+                                                                               6E90C09D05FA7EAA00857F22,
+                                                                               6E90C0DC05FA979F00857F22,
+                                                                               6E90C16605FAA5FB00857F22,
+                                                                               6E90C34005FB0CB300857F22,
+                                                                               6E90C39A05FC0B3600857F22,
+                                                                               6E8DD55E05FC512600D2C0EA,
+                                                                               6E8DD56405FC5BD100D2C0EA,
+                                                                               6E8DD5D705FC5F3500D2C0EA,
+                                                                               6E8DD5E305FC605F00D2C0EA,
+                                                                               6E8DD5EA05FC607A00D2C0EA,
+                                                                               6E8DD64605FC674200D2C0EA,
+                                                                               6E8DD66605FC696100D2C0EA,
+                                                                               6E8DD66A05FC696500D2C0EA,
+                                                                               6E8DD68105FC6AF400D2C0EA,
+                                                                               6E8DD69505FC6B7600D2C0EA,
+                                                                               6E8DD6CB05FC701300D2C0EA,
+                                                                               6E8DD6CF05FC709E00D2C0EA,
+                                                                               6E8DD6D305FC70A100D2C0EA,
+                                                                               6E8DD6EA05FC748B00D2C0EA,
+                                                                               6E8DD6FA05FC758F00D2C0EA,
+                                                                               6E8DD70C05FC762900D2C0EA,
+                                                                               6E8DD71105FC762C00D2C0EA,
+                                                                               6E8DD71605FC763300D2C0EA,
+                                                                               6E8DD71B05FC763C00D2C0EA,
+                                                                               6E8DD74405FC776700D2C0EA,
+                                                                               6E8DD74D05FC777D00D2C0EA,
+                                                                               6E8DD75305FC778700D2C0EA,
+                                                                               6E8DD76105FC783B00D2C0EA,
+                                                                               6E8DD76205FC783B00D2C0EA,
+                                                                               6E55007005FD2C9D00EE693C,
+                                                                               6E55007205FD2C9D00EE693C,
+                                                                               6E90C2DC05FAAF2700857F22,
                                                                        );
                                                                        prevStack = (
-                                                                               6E486273059421D8006D09F8,
-                                                                               6E486274059421D8006D09F8,
                                                                                6E486275059421D8006D09F8,
                                                                                6E486276059421D8006D09F8,
                                                                                6E486277059421D8006D09F8,
-                                                                               6E48627B059421D8006D09F8,
                                                                                6E48627C059421D8006D09F8,
                                                                                6E9D6CED059429D400D9A2D7,
-                                                                               6E90C17805FAA6B400857F22,
+                                                                               6E8EDFDA05F7DBEE00ED3F4F,
+                                                                               6E90BB0805F7EC7600857F22,
+                                                                               6E90BE2A05F86C7800857F22,
+                                                                               6E90BE4F05F86D1000857F22,
+                                                                               6E90BE5405F86D3200857F22,
+                                                                               6E90C09A05FA7EA900857F22,
+                                                                               6E90C09E05FA7EAA00857F22,
+                                                                               6E90C16705FAA5FB00857F22,
+                                                                               6E90C28705FAADF700857F22,
+                                                                               6E90C35F05FB0DAD00857F22,
+                                                                               6E90C36C05FC07B100857F22,
+                                                                               6E8DD58F05FC5D1E00D2C0EA,
+                                                                               6E8DD5F505FC642800D2C0EA,
+                                                                               6E8DD65F05FC692500D2C0EA,
+                                                                               6E8DD68A05FC6B5C00D2C0EA,
+                                                                               6E8DD6F305FC74F400D2C0EA,
+                                                                               6E8DD70505FC761C00D2C0EA,
+                                                                               6E8DD70905FC762000D2C0EA,
+                                                                               6E8DD71305FC762C00D2C0EA,
+                                                                               6E8DD71805FC763300D2C0EA,
+                                                                               6E8DD71C05FC763C00D2C0EA,
+                                                                               6E55006805FD21B800EE693C,
+                                                                               6E55007305FD2C9D00EE693C,
                                                                        );
                                                                };
                                                                SplitCount = 1;
                                                                _indexOfCollapsedView = 0;
                                                                _percentageOfCollapsedView = 0;
                                                                sizes = (
-                                                                       "{{0, 0}, {182, 866}}",
-                                                                       "{{182, 0}, {1098, 866}}",
+                                                                       "{{0, 0}, {233, 866}}",
+                                                                       "{{233, 0}, {1047, 866}}",
                                                                );
                                                        };
                                                };
-                                               PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1098, 227}}";
-                                               PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 227}, {1098, 639}}";
-                                               PBXProjectWorkspaceModule_OldSuperviewFrame = "{{182, 0}, {1098, 866}}";
+                                               PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {1047, 0}}";
+                                               PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {1047, 866}}";
+                                               PBXProjectWorkspaceModule_OldSuperviewFrame = "{{233, 0}, {1047, 866}}";
                                                PBXProjectWorkspaceModule_SGTM = {
                                                        PBXBottomSmartGroupGIDs = (
                                                                1C37FBAC04509CD000000102,
                                                        );
                                                        PBXSmartGroupTreeModuleColumnData = {
                                                                PBXSmartGroupTreeModuleColumnWidthsKey = (
-                                                                       165,
+                                                                       216,
                                                                );
                                                                PBXSmartGroupTreeModuleColumnsKey_v4 = (
                                                                        MainColumn,
                                                                        2A37F4AAFDCFA73011CA2CEA,
                                                                        6E0D40B3052243B800A80003,
                                                                        2A37F4ABFDCFA73011CA2CEA,
+                                                                       6E0D40BF05224F4B00A80003,
                                                                        2A37F4AFFDCFA73011CA2CEA,
                                                                        2A37F4B8FDCFA73011CA2CEA,
+                                                                       6E8EE12505F7EA8100ED3F4F,
                                                                        1C37FBAC04509CD000000102,
                                                                );
                                                                PBXSmartGroupTreeModuleOutlineStateSelectionKey = (
                                                                        (
-                                                                               16,
-                                                                               12,
+                                                                               45,
+                                                                               37,
                                                                                0,
                                                                        ),
                                                                );
-                                                               PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {165, 848}}";
+                                                               PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 189}, {216, 848}}";
                                                        };
                                                        PBXTopSmartGroupGIDs = (
                                                        );
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
                        };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
+                               Debugger = {
+                                       HorizontalSplitView = {
+                                               _collapsingFrameDimension = 0;
+                                               _indexOfCollapsedView = 0;
+                                               _percentageOfCollapsedView = 0;
+                                               isCollapsed = yes;
+                                               sizes = (
+                                                       "{{0, 0}, {327, 353}}",
+                                                       "{{327, 0}, {534, 353}}",
+                                               );
+                                       };
+                                       VerticalSplitView = {
+                                               _collapsingFrameDimension = 0;
+                                               _indexOfCollapsedView = 0;
+                                               _percentageOfCollapsedView = 0;
+                                               isCollapsed = yes;
+                                               sizes = (
+                                                       "{{0, 0}, {861, 353}}",
+                                                       "{{0, 353}, {861, 362}}",
+                                               );
+                                       };
+                               };
+                               LauncherConfigVersion = 8;
                        };
                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
                                Split0 = {
                                {
                                        Frame = "{{0, 0}, {1280, 866}}";
                                        PBXProjectWorkspaceModule_GeometryKey_Rev15 = {
+                                               PBXProjectWorkspaceModule_RunWindowVisible = true;
                                        };
                                        RubberWindowFrame = "0 94 1280 908 0 0 1280 1002 ";
                                },
                                DebugConsoleVisible = Drawer;
                                DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}";
                                DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}";
-                               Frame = "{{0, 0}, {861, 735}}";
-                               WindowFrame = "{{426, 189}, {861, 813}}";
+                               Frame = "{{0, 0}, {861, 715}}";
+                               RubberWindowFrame = "385 232 861 757 0 0 1280 1002 ";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
                                Frame = "{{0, 0}, {750, 480}}";
                                WindowFrame = "{{61, 397}, {750, 558}}";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectFindModule" = {
-                               Frame = "{{0, 0}, {614, 100}}";
-                               RubberWindowFrame = "333 721 614 142 0 0 1280 1002 ";
+                               Frame = "{{0, 0}, {634, 488}}";
+                               RubberWindowFrame = "333 371 634 530 0 0 1280 1002 ";
                        };
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
                                Frame = "{{0, 0}, {1280, 886}}";
                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
                                Frame = "{{0, 0}, {767, 743}}";
                                PBXModuleWindowStatusBarHidden = YES;
-                               RubberWindowFrame = "445 139 767 764 0 0 1280 1002 ";
+                               RubberWindowFrame = "504 116 767 764 0 0 1280 1002 ";
                        };
-                       PBXWorkspaceStateSaveDate = 100313467;
+                       PBXWorkspaceStateSaveDate = 100473363;
                };
                perUserProjectItems = {
-                       6E48626A059421D8006D09F8 = 6E48626A059421D8006D09F8;
-                       6E48626B059421D8006D09F8 = 6E48626B059421D8006D09F8;
-                       6E48626C059421D8006D09F8 = 6E48626C059421D8006D09F8;
-                       6E48626D059421D8006D09F8 = 6E48626D059421D8006D09F8;
-                       6E48626E059421D8006D09F8 = 6E48626E059421D8006D09F8;
                        6E48626F059421D8006D09F8 = 6E48626F059421D8006D09F8;
-                       6E486273059421D8006D09F8 = 6E486273059421D8006D09F8;
-                       6E486274059421D8006D09F8 = 6E486274059421D8006D09F8;
                        6E486275059421D8006D09F8 = 6E486275059421D8006D09F8;
                        6E486276059421D8006D09F8 = 6E486276059421D8006D09F8;
                        6E486277059421D8006D09F8 = 6E486277059421D8006D09F8;
-                       6E48627B059421D8006D09F8 = 6E48627B059421D8006D09F8;
                        6E48627C059421D8006D09F8 = 6E48627C059421D8006D09F8;
-                       6E90C17705FAA6B400857F22 = 6E90C17705FAA6B400857F22;
-                       6E90C17805FAA6B400857F22 = 6E90C17805FAA6B400857F22;
-                       6E90C17C05FAA6C400857F22 = 6E90C17C05FAA6C400857F22;
-                       6E90C19205FAAA0900857F22 = 6E90C19205FAAA0900857F22;
-                       6E9D6CEB059429D400D9A2D7 = 6E9D6CEB059429D400D9A2D7;
+                       6E55006805FD21B800EE693C = 6E55006805FD21B800EE693C;
+                       6E55007005FD2C9D00EE693C = 6E55007005FD2C9D00EE693C;
+                       6E55007205FD2C9D00EE693C = 6E55007205FD2C9D00EE693C;
+                       6E55007305FD2C9D00EE693C = 6E55007305FD2C9D00EE693C;
+                       6E55007505FD2CAE00EE693C = 6E55007505FD2CAE00EE693C;
+                       6E8DD55E05FC512600D2C0EA = 6E8DD55E05FC512600D2C0EA;
+                       6E8DD56405FC5BD100D2C0EA = 6E8DD56405FC5BD100D2C0EA;
+                       6E8DD58F05FC5D1E00D2C0EA = 6E8DD58F05FC5D1E00D2C0EA;
+                       6E8DD5D705FC5F3500D2C0EA = 6E8DD5D705FC5F3500D2C0EA;
+                       6E8DD5E305FC605F00D2C0EA = 6E8DD5E305FC605F00D2C0EA;
+                       6E8DD5EA05FC607A00D2C0EA = 6E8DD5EA05FC607A00D2C0EA;
+                       6E8DD5F505FC642800D2C0EA = 6E8DD5F505FC642800D2C0EA;
+                       6E8DD64605FC674200D2C0EA = 6E8DD64605FC674200D2C0EA;
+                       6E8DD65F05FC692500D2C0EA = 6E8DD65F05FC692500D2C0EA;
+                       6E8DD66605FC696100D2C0EA = 6E8DD66605FC696100D2C0EA;
+                       6E8DD66A05FC696500D2C0EA = 6E8DD66A05FC696500D2C0EA;
+                       6E8DD68105FC6AF400D2C0EA = 6E8DD68105FC6AF400D2C0EA;
+                       6E8DD68A05FC6B5C00D2C0EA = 6E8DD68A05FC6B5C00D2C0EA;
+                       6E8DD69505FC6B7600D2C0EA = 6E8DD69505FC6B7600D2C0EA;
+                       6E8DD6CB05FC701300D2C0EA = 6E8DD6CB05FC701300D2C0EA;
+                       6E8DD6CF05FC709E00D2C0EA = 6E8DD6CF05FC709E00D2C0EA;
+                       6E8DD6D305FC70A100D2C0EA = 6E8DD6D305FC70A100D2C0EA;
+                       6E8DD6EA05FC748B00D2C0EA = 6E8DD6EA05FC748B00D2C0EA;
+                       6E8DD6F305FC74F400D2C0EA = 6E8DD6F305FC74F400D2C0EA;
+                       6E8DD6FA05FC758F00D2C0EA = 6E8DD6FA05FC758F00D2C0EA;
+                       6E8DD70505FC761C00D2C0EA = 6E8DD70505FC761C00D2C0EA;
+                       6E8DD70905FC762000D2C0EA = 6E8DD70905FC762000D2C0EA;
+                       6E8DD70C05FC762900D2C0EA = 6E8DD70C05FC762900D2C0EA;
+                       6E8DD71105FC762C00D2C0EA = 6E8DD71105FC762C00D2C0EA;
+                       6E8DD71305FC762C00D2C0EA = 6E8DD71305FC762C00D2C0EA;
+                       6E8DD71605FC763300D2C0EA = 6E8DD71605FC763300D2C0EA;
+                       6E8DD71805FC763300D2C0EA = 6E8DD71805FC763300D2C0EA;
+                       6E8DD71B05FC763C00D2C0EA = 6E8DD71B05FC763C00D2C0EA;
+                       6E8DD71C05FC763C00D2C0EA = 6E8DD71C05FC763C00D2C0EA;
+                       6E8DD74405FC776700D2C0EA = 6E8DD74405FC776700D2C0EA;
+                       6E8DD74D05FC777D00D2C0EA = 6E8DD74D05FC777D00D2C0EA;
+                       6E8DD75305FC778700D2C0EA = 6E8DD75305FC778700D2C0EA;
+                       6E8DD76105FC783B00D2C0EA = 6E8DD76105FC783B00D2C0EA;
+                       6E8DD76205FC783B00D2C0EA = 6E8DD76205FC783B00D2C0EA;
+                       6E8EDFDA05F7DBEE00ED3F4F = 6E8EDFDA05F7DBEE00ED3F4F;
+                       6E90BB0805F7EC7600857F22 = 6E90BB0805F7EC7600857F22;
+                       6E90BE2A05F86C7800857F22 = 6E90BE2A05F86C7800857F22;
+                       6E90BE4F05F86D1000857F22 = 6E90BE4F05F86D1000857F22;
+                       6E90BE5405F86D3200857F22 = 6E90BE5405F86D3200857F22;
+                       6E90C09A05FA7EA900857F22 = 6E90C09A05FA7EA900857F22;
+                       6E90C09D05FA7EAA00857F22 = 6E90C09D05FA7EAA00857F22;
+                       6E90C09E05FA7EAA00857F22 = 6E90C09E05FA7EAA00857F22;
+                       6E90C0DC05FA979F00857F22 = 6E90C0DC05FA979F00857F22;
+                       6E90C16605FAA5FB00857F22 = 6E90C16605FAA5FB00857F22;
+                       6E90C16705FAA5FB00857F22 = 6E90C16705FAA5FB00857F22;
+                       6E90C28705FAADF700857F22 = 6E90C28705FAADF700857F22;
+                       6E90C2DC05FAAF2700857F22 = 6E90C2DC05FAAF2700857F22;
+                       6E90C34005FB0CB300857F22 = 6E90C34005FB0CB300857F22;
+                       6E90C35F05FB0DAD00857F22 = 6E90C35F05FB0DAD00857F22;
+                       6E90C36C05FC07B100857F22 = 6E90C36C05FC07B100857F22;
+                       6E90C39A05FC0B3600857F22 = 6E90C39A05FC0B3600857F22;
                        6E9D6CED059429D400D9A2D7 = 6E9D6CED059429D400D9A2D7;
                };
                sourceControlManager = 6EAD5EEA054C3932005761EE;
        };
        2A37F4ACFDCFA73011CA2CEA = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {2309, 29343}}";
-                       sepNavSelRange = "{31411, 0}";
-                       sepNavVisRect = "{{0, 20829}, {1053, 631}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {2309, 29535}}";
+                       sepNavSelRange = "{13414, 0}";
+                       sepNavVisRect = "{{0, 7443}, {1002, 587}}";
                        sepNavWindowFrame = "{{15, 439}, {750, 558}}";
                };
        };
        2A37F4AEFDCFA73011CA2CEA = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 3200}}";
-                       sepNavSelRange = "{1349, 19}";
-                       sepNavVisRect = "{{0, 376}, {1034, 641}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 3216}}";
+                       sepNavSelRange = "{1020, 0}";
+                       sepNavVisRect = "{{0, 842}, {1002, 587}}";
                };
        };
        2A37F4B0FDCFA73011CA2CEA = {
                uiCtxt = {
                        sepNavIntBoundsRect = "{{0, 0}, {1266, 655}}";
                        sepNavSelRange = "{504, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 641}}";
+                       sepNavVisRect = "{{0, 0}, {1002, 597}}";
                };
        };
        6E0D40AC05223CCE00A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 720}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 784}}";
+                       sepNavSelRange = "{778, 9}";
+                       sepNavVisRect = "{{0, 133}, {1002, 587}}";
                };
        };
        6E0D40AD05223CCE00A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 2672}}";
-                       sepNavSelRange = "{375, 0}";
-                       sepNavVisRect = "{{0, 40}, {1034, 641}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 2960}}";
+                       sepNavSelRange = "{1743, 0}";
+                       sepNavVisRect = "{{0, 963}, {1002, 587}}";
                };
        };
        6E0D40B4052243D500A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
-                       sepNavSelRange = "{440, 18}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 848}}";
+                       sepNavSelRange = "{1172, 29}";
+                       sepNavVisRect = "{{0, 229}, {1002, 587}}";
                };
        };
        6E0D40B5052243D500A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 2032}}";
-                       sepNavSelRange = "{2002, 96}";
-                       sepNavVisRect = "{{0, 853}, {1034, 641}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1133, 3216}}";
+                       sepNavSelRange = "{5501, 0}";
+                       sepNavVisRect = "{{0, 520}, {1002, 587}}";
                };
        };
        6E0D40B80522449500A80003 = {
                        sepNavVisRect = "{{0, 2372}, {822, 329}}";
                };
        };
+       6E0D40C005224FD000A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
+               };
+       };
+       6E0D40C405225DA100A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{377, 53}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
+               };
+       };
+       6E0D40CA0522815100A80003 = {
+               uiCtxt = {
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
+               };
+       };
        6E0D40CE0522820D00A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
                        sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
        6E146B11051FA42C00A80003 = {
                        sepNavVisRect = "{{0, 952}, {1059, 536}}";
                };
        };
-       6E48626A059421D8006D09F8 = {
-               fRef = 6E4E098C050BB21400A80003;
-               isa = PBXTextBookmark;
-               name = "AppController.h: launchWebsiteMenu:";
-               rLen = 0;
-               rLoc = 1470;
-               rType = 0;
-               vrLen = 986;
-               vrLoc = 516;
-       };
-       6E48626B059421D8006D09F8 = {
-               fRef = 6E51A986057330B900506538;
-               isa = PBXTextBookmark;
-               name = "cheat_shared.h: 17";
-               rLen = 0;
-               rLoc = 401;
-               rType = 0;
-               vrLen = 409;
-               vrLoc = 0;
-       };
-       6E48626C059421D8006D09F8 = {
-               fRef = 6E51A987057330B900506538;
-               isa = PBXTextBookmark;
-               name = "cheat_shared.m: LaunchEmail";
-               rLen = 0;
-               rLoc = 607;
-               rType = 0;
-               vrLen = 607;
-               vrLoc = 0;
-       };
-       6E48626D059421D8006D09F8 = {
-               fRef = 6E4E098D050BB21400A80003;
-               isa = PBXTextBookmark;
-               name = "AppController.m: 152";
-               rLen = 0;
-               rLoc = 3791;
-               rType = 0;
-               vrLen = 824;
-               vrLoc = 3500;
-       };
-       6E48626E059421D8006D09F8 = {
-               fRef = 2A37F4ACFDCFA73011CA2CEA;
-               isa = PBXTextBookmark;
-               name = "MyDocument.m: 1322";
-               rLen = 0;
-               rLoc = 31411;
-               rType = 0;
-               vrLen = 808;
-               vrLoc = 31067;
-       };
        6E48626F059421D8006D09F8 = {
                fRef = 6E146B12051FA42C00A80003;
                isa = PBXTextBookmark;
                vrLen = 894;
                vrLoc = 3020;
        };
-       6E486273059421D8006D09F8 = {
-               fRef = 2A37F4ACFDCFA73011CA2CEA;
-               isa = PBXTextBookmark;
-               name = "MyDocument.m: 230";
-               rLen = 0;
-               rLoc = 6178;
-               rType = 0;
-               vrLen = 1217;
-               vrLoc = 3415;
-       };
-       6E486274059421D8006D09F8 = {
-               fRef = 6E4E098D050BB21400A80003;
-               isa = PBXTextBookmark;
-               name = "AppController.m: 160";
-               rLen = 0;
-               rLoc = 4125;
-               rType = 0;
-               vrLen = 824;
-               vrLoc = 3500;
-       };
        6E486275059421D8006D09F8 = {
                fRef = 6E4E098C050BB21400A80003;
                isa = PBXTextBookmark;
                name = "AppController.h: launchWebsiteMenu:";
                rLen = 0;
-               rLoc = 1470;
+               rLoc = 1550;
                rType = 0;
                vrLen = 986;
                vrLoc = 516;
                isa = PBXTextBookmark;
                name = "cheat_shared.m: 21";
                rLen = 0;
-               rLoc = 605;
+               rLoc = 609;
                rType = 0;
                vrLen = 607;
                vrLoc = 0;
                vrLen = 409;
                vrLoc = 0;
        };
-       6E48627B059421D8006D09F8 = {
-               fRef = 6E4E098E050BB21400A80003;
-               isa = PBXTextBookmark;
-               name = "CheatServer.m: 193";
-               rLen = 0;
-               rLoc = 4274;
-               rType = 0;
-               vrLen = 883;
-               vrLoc = 3582;
-       };
        6E48627C059421D8006D09F8 = {
                fRef = 6E146B12051FA42C00A80003;
                isa = PBXTextBookmark;
        };
        6E4E098C050BB21400A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1053, 976}}";
-                       sepNavSelRange = "{1470, 0}";
-                       sepNavVisRect = "{{0, 345}, {1053, 631}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 1024}}";
+                       sepNavSelRange = "{1429, 39}";
+                       sepNavVisRect = "{{0, 437}, {1002, 587}}";
                };
        };
        6E4E098D050BB21400A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1063, 7232}}";
-                       sepNavSelRange = "{3791, 0}";
-                       sepNavVisRect = "{{0, 2173}, {1053, 631}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1063, 8144}}";
+                       sepNavSelRange = "{6031, 0}";
+                       sepNavVisRect = "{{0, 3348}, {1002, 587}}";
                };
        };
        6E4E098E050BB21400A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1287, 33104}}";
-                       sepNavSelRange = "{36909, 64}";
-                       sepNavVisRect = "{{0, 24923}, {1053, 607}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1287, 33680}}";
+                       sepNavSelRange = "{18387, 0}";
+                       sepNavVisRect = "{{0, 11684}, {1002, 834}}";
                        sepNavWindowFrame = "{{0, 51}, {1280, 951}}";
                };
        };
        6E4E098F050BB21400A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1053, 1679}}";
-                       sepNavSelRange = "{2334, 0}";
-                       sepNavVisRect = "{{0, 568}, {1053, 622}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 1695}}";
+                       sepNavSelRange = "{834, 22}";
+                       sepNavVisRect = "{{0, 309}, {1002, 587}}";
                };
        };
        6E51A97C0573304C00506538 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
-                       sepNavSelRange = "{414, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{459, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
        6E51A97D0573304C00506538 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
-                       sepNavSelRange = "{424, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 703}}";
+                       sepNavSelRange = "{655, 0}";
+                       sepNavVisRect = "{{0, 101}, {1002, 592}}";
                };
        };
        6E51A986057330B900506538 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1053, 631}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
                        sepNavSelRange = "{401, 0}";
-                       sepNavVisRect = "{{0, 0}, {1053, 631}}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
        6E51A987057330B900506538 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1053, 631}}";
-                       sepNavSelRange = "{607, 0}";
-                       sepNavVisRect = "{{0, 0}, {1053, 631}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{456, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
+       6E55006805FD21B800EE693C = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = vm_read_overwrite;
+               rLen = 17;
+               rLoc = 18241;
+               rType = 0;
+               vrLen = 1417;
+               vrLoc = 17209;
+       };
+       6E55007005FD2C9D00EE693C = {
+               fRef = 6E55007605FD2CAE00EE693C;
+               isa = PBXTextBookmark;
+               name = "kern_return_t vm_read_overwrite\n";
+               rLen = 32;
+               rLoc = 3105;
+               rType = 0;
+               vrLen = 843;
+               vrLoc = 2681;
+       };
+       6E55007205FD2C9D00EE693C = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 759";
+               rLen = 0;
+               rLoc = 18387;
+               rType = 0;
+               vrLen = 1273;
+               vrLoc = 17613;
+       };
+       6E55007305FD2C9D00EE693C = {
+               fRef = 6E4E098E050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "CheatServer.m: 759";
+               rLen = 0;
+               rLoc = 18387;
+               rType = 0;
+               vrLen = 1273;
+               vrLoc = 17613;
+       };
+       6E55007505FD2CAE00EE693C = {
+               fRef = 089C1660FE840EACC02AAC07;
+               isa = PBXTextBookmark;
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 203;
+               rType = 0;
+               vrLen = 203;
+               vrLoc = 0;
+       };
+       6E55007605FD2CAE00EE693C = {
+               isa = PBXFileReference;
+               name = vm_map.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/usr/include/mach/vm_map.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
        6E71F41B051BCCC600A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 655}}";
-                       sepNavSelRange = "{384, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 641}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 719}}";
+                       sepNavSelRange = "{424, 0}";
+                       sepNavVisRect = "{{0, 96}, {1002, 587}}";
                };
        };
        6E71F41C051BCCC600A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
-                       sepNavSelRange = "{347, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{1093, 19}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
-       6E90C17705FAA6B400857F22 = {
-               fRef = 6E3309E10575BA9D0093550E;
+       6E8DD55E05FC512600D2C0EA = {
+               fRef = 6E51A986057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.h: 17";
+               rLen = 0;
+               rLoc = 401;
+               rType = 0;
+               vrLen = 409;
+               vrLoc = 0;
+       };
+       6E8DD56405FC5BD100D2C0EA = {
+               fRef = 6E51A987057330B900506538;
+               isa = PBXTextBookmark;
+               name = "cheat_shared.m: LaunchWebsite";
+               rLen = 0;
+               rLoc = 456;
+               rType = 0;
+               vrLen = 611;
+               vrLoc = 0;
+       };
+       6E8DD58F05FC5D1E00D2C0EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: maxSearchResultsAmount";
+               rLen = 0;
+               rLoc = 1020;
+               rType = 0;
+               vrLen = 850;
+               vrLoc = 576;
+       };
+       6E8DD5D705FC5F3500D2C0EA = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = maxSearchResultsAmount;
+               rLen = 22;
+               rLoc = 834;
+               rType = 0;
+               vrLen = 685;
+               vrLoc = 444;
+       };
+       6E8DD5E305FC605F00D2C0EA = {
+               fRef = 2A37F4AEFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.h: maxSearchResultsAmount";
+               rLen = 0;
+               rLoc = 1020;
+               rType = 0;
+               vrLen = 1195;
+               vrLoc = 1147;
+       };
+       6E8DD5EA05FC607A00D2C0EA = {
+               fRef = 6E8DD5EF05FC609800D2C0EA;
+               isa = PBXTextBookmark;
+               name = "- (void)setToolTip:(NSString *)string;\n";
+               rLen = 39;
+               rLoc = 7558;
+               rType = 0;
+               vrLen = 1345;
+               vrLoc = 6975;
+       };
+       6E8DD5EF05FC609800D2C0EA = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = NSView.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSView.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E8DD5F505FC642800D2C0EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 478";
+               rLen = 0;
+               rLoc = 13414;
+               rType = 0;
+               vrLen = 848;
+               vrLoc = 13024;
+       };
+       6E8DD64605FC674200D2C0EA = {
+               fRef = 6E8DD64F05FC674900D2C0EA;
+               isa = PBXTextBookmark;
+               name = "- (void)orderOut:(id)sender;\n";
+               rLen = 29;
+               rLoc = 9802;
+               rType = 0;
+               vrLen = 1051;
+               vrLoc = 9293;
+       };
+       6E8DD64F05FC674900D2C0EA = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = NSWindow.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSWindow.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E8DD65F05FC692500D2C0EA = {
+               fRef = 6E0D40C005224FD000A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficControlling.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 501;
+               vrLoc = 0;
+       };
+       6E8DD66605FC696100D2C0EA = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: nameVersionText";
+               rLen = 0;
+               rLoc = 459;
+               rType = 0;
+               vrLen = 573;
+               vrLoc = 0;
+       };
+       6E8DD66A05FC696500D2C0EA = {
+               fRef = 6E4E098C050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "- (IBAction)launchEmailMenu:(id)sender;";
+               rLen = 39;
+               rLoc = 1429;
+               rType = 0;
+               vrLen = 880;
+               vrLoc = 702;
+       };
+       6E8DD68105FC6AF400D2C0EA = {
+               fRef = 6E8DD68505FC6B1200D2C0EA;
+               isa = PBXTextBookmark;
+               name = "    NSOnState    =  1    \n";
+               rLen = 26;
+               rLoc = 1481;
+               rType = 0;
+               vrLen = 837;
+               vrLoc = 1061;
+       };
+       6E8DD68505FC6B1200D2C0EA = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = NSCell.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSCell.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E8DD68A05FC6B5C00D2C0EA = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 172";
+               rLen = 0;
+               rLoc = 4523;
+               rType = 0;
+               vrLen = 1597;
+               vrLoc = 3780;
+       };
+       6E8DD69505FC6B7600D2C0EA = {
+               fRef = 6E0D40C405225DA100A80003;
+               isa = PBXTextBookmark;
+               name = "- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop;";
+               rLen = 53;
+               rLoc = 377;
+               rType = 0;
+               vrLen = 695;
+               vrLoc = 0;
+       };
+       6E8DD6CB05FC701300D2C0EA = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = TCHitsDisplayedPref;
+               rLen = 19;
+               rLoc = 1093;
+               rType = 0;
+               vrLen = 1138;
+               vrLoc = 0;
+       };
+       6E8DD6CF05FC709E00D2C0EA = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: TCDefaultListenPort";
+               rLen = 0;
+               rLoc = 424;
+               rType = 0;
+               vrLen = 1210;
+               vrLoc = 169;
+       };
+       6E8DD6D305FC70A100D2C0EA = {
+               fRef = 2A37F4ACFDCFA73011CA2CEA;
+               isa = PBXTextBookmark;
+               name = "MyDocument.m: 478";
+               rLen = 0;
+               rLoc = 13414;
+               rType = 0;
+               vrLen = 848;
+               vrLoc = 13024;
+       };
+       6E8DD6EA05FC748B00D2C0EA = {
+               fRef = 6E8DD6ED05FC74A900D2C0EA;
+               isa = PBXTextBookmark;
+               name = "@interface NSNetService : NSObject {\n";
+               rLen = 37;
+               rLoc = 678;
+               rType = 0;
+               vrLen = 2029;
+               vrLoc = 529;
+       };
+       6E8DD6ED05FC74A900D2C0EA = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = NSNetServices.h;
+               path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSNetServices.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E8DD6F305FC74F400D2C0EA = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = broadcastWithName;
+               rLen = 17;
+               rLoc = 2520;
+               rType = 0;
+               vrLen = 1300;
+               vrLoc = 1648;
+       };
+       6E8DD6FA05FC758F00D2C0EA = {
+               fRef = 6E0D40B5052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.m: 197";
+               rLen = 0;
+               rLoc = 5501;
+               rType = 0;
+               vrLen = 1058;
+               vrLoc = 652;
+       };
+       6E8DD70505FC761C00D2C0EA = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "- (void)allowRemoteChanged:(BOOL)allow\n";
+               rLen = 39;
+               rLoc = 2038;
+               rType = 0;
+               vrLen = 728;
+               vrLoc = 1206;
+       };
+       6E8DD70905FC762000D2C0EA = {
+               fRef = 6E0D40AC05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 894;
+               vrLoc = 0;
+       };
+       6E8DD70C05FC762900D2C0EA = {
+               fRef = 6E0D40C005224FD000A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficControlling.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 501;
+               vrLoc = 0;
+       };
+       6E8DD71105FC762C00D2C0EA = {
+               fRef = 6E0D40CA0522815100A80003;
+               isa = PBXTextBookmark;
+               name = "ListenerDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 568;
+               vrLoc = 0;
+       };
+       6E8DD71305FC762C00D2C0EA = {
+               fRef = 6E0D40CA0522815100A80003;
+               isa = PBXTextBookmark;
+               name = "ListenerDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 568;
+               vrLoc = 0;
+       };
+       6E8DD71605FC763300D2C0EA = {
+               fRef = 6EBCEEE60523E23700A80003;
+               isa = PBXTextBookmark;
+               name = "ServerDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6E8DD71805FC763300D2C0EA = {
+               fRef = 6EBCEEE60523E23700A80003;
+               isa = PBXTextBookmark;
+               name = "ServerDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 738;
+               vrLoc = 0;
+       };
+       6E8DD71B05FC763C00D2C0EA = {
+               fRef = 6E0D40CE0522820D00A80003;
+               isa = PBXTextBookmark;
+               name = "ClientDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 530;
+               vrLoc = 0;
+       };
+       6E8DD71C05FC763C00D2C0EA = {
+               fRef = 6E0D40CE0522820D00A80003;
+               isa = PBXTextBookmark;
+               name = "ClientDelegate.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 530;
+               vrLoc = 0;
+       };
+       6E8DD74405FC776700D2C0EA = {
+               fRef = 6E0D40AD05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = "NetTrafficController.m: 79";
+               rLen = 0;
+               rLoc = 1743;
+               rType = 0;
+               vrLen = 876;
+               vrLoc = 1329;
+       };
+       6E8DD74D05FC777D00D2C0EA = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "- (IBAction)change:(id)sender";
+               rLen = 29;
+               rLoc = 1172;
+               rType = 0;
+               vrLen = 918;
+               vrLoc = 377;
+       };
+       6E8DD75305FC778700D2C0EA = {
+               fRef = 6E0D40AC05223CCE00A80003;
+               isa = PBXTextBookmark;
+               name = serverSet;
+               rLen = 9;
+               rLoc = 778;
+               rType = 0;
+               vrLen = 832;
+               vrLoc = 235;
+       };
+       6E8DD76105FC783B00D2C0EA = {
+               fRef = 6E4E098D050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "AppController.m: 232";
+               rLen = 0;
+               rLoc = 6031;
+               rType = 0;
+               vrLen = 1067;
+               vrLoc = 5336;
+       };
+       6E8DD76205FC783B00D2C0EA = {
+               fRef = 2A37F4B5FDCFA73011CA2CEA;
                isa = PBXBookmark;
+               name = "MyDocument.nib (English)";
+       };
+       6E8EDFDA05F7DBEE00ED3F4F = {
+               fRef = 6E71F41B051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.h: 21";
+               rLen = 0;
+               rLoc = 648;
+               rType = 0;
+               vrLen = 1218;
+               vrLoc = 0;
+       };
+       6E90BB0805F7EC7600857F22 = {
+               fRef = 6E4E098F050BB21400A80003;
+               isa = PBXTextBookmark;
+               name = "
+";
+               rLen = 1;
+               rLoc = 1090;
+               rType = 0;
+               vrLen = 727;
+               vrLoc = 0;
        };
-       6E90C17805FAA6B400857F22 = {
-               fRef = 6E3309E10575BA9D0093550E;
+       6E90BE2A05F86C7800857F22 = {
+               fRef = 6E71F41C051BCCC600A80003;
+               isa = PBXTextBookmark;
+               name = "cheat_globals.m: TCGlobalUpdateAutomatically";
+               rLen = 0;
+               rLoc = 620;
+               rType = 0;
+               vrLen = 994;
+               vrLoc = 0;
+       };
+       6E90BE4F05F86D1000857F22 = {
+               fRef = 6E0D40C405225DA100A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceControlling.h: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 536;
+               vrLoc = 0;
+       };
+       6E90BE5405F86D3200857F22 = {
+               fRef = 6E0D40B4052243D500A80003;
+               isa = PBXTextBookmark;
+               name = "PreferenceController.h: updateAutomaticallyButton";
+               rLen = 0;
+               rLoc = 613;
+               rType = 0;
+               vrLen = 974;
+               vrLoc = 106;
+       };
+       6E90C09A05FA7EA900857F22 = {
+               fRef = 6E1E43700588275100526509;
                isa = PBXBookmark;
        };
-       6E90C17C05FAA6C400857F22 = {
-               fRef = 6E4E098E050BB21400A80003;
+       6E90C09D05FA7EAA00857F22 = {
+               fRef = 6E0BDF7D0511568D00A80003;
                isa = PBXTextBookmark;
-               name = "- (void)firstSearchIntegerLong:(int32_t)value\n{\n\tkern_return_t\t\t\t\tresult;\n\t\n\tvm_address_t\t\t\t\taddress = 0x0;\n\tvm_size_t\t\t\t\t\tsize = 0;\n\tvm_region_basic_info_data_t\tinfo;\n\tmach_msg_type_number_t\t\tinfoCnt = 8;\n\tmach_port_t\t\t\t\t\tobject_name = 0;\n\t\n\tint32_t\t\t\t\t\t\t*data;\n\tvm_size_t\t\t\t\t\tdataLength;\n\t\n\tTCaddress\t\t\t\t\t*results = NULL;\n\tint\t\t\t\t\t\t\tresultsAmount = 0;\n\t\n\t/*unsigned\t\t\t\t\tzone_count = 10;\n\tvm_address_t\t\t\t\t*zones = (vm_address_t *)malloc( zone_count * sizeof(vm_address_t) );\n\t//memory_reader_t\t\t\t\treader;\n\t\n\tif ( (result = malloc_get_all_zones( processTask, NULL, &zones, &zone_count )) != KERN_SUCCESS )\n\t{\n\t\tNSLog( @\"malloc_get_all_zones error: %i\", result );\n\t}\n\telse\n\t{\n\t\t//address = zones[0];\n\t\t\n\t\tint\t\t\ti;\n\t\t\n\t\tfor ( i = 0; i < 10; i++ )\n\t\t{\n\t\t\tNSLog( @\"malloc_get_all_zones[%i] = %X\", i, (vm_address_t)zones[i] );\n\t\t}\n\t}*/\n\t\n\tfor (;;)\n\t{\n\t\tif ( (result = vm_region( processTask, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)(&info), &infoCnt, &object_name )) != KERN_SUCCESS )\n\t\t{\n\t\t\tif ( result != KERN_INVALID_ADDRESS )\n\t\t\t{\n\t\t\t\tNSLog( @\"vm_region returned error: %i\", result );\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( (info.protection & VM_PROT_READ) && (info.protection & VM_PROT_WRITE) )\n\t\t{\n\t\t\tdata = (int32_t *)malloc( size );\n\t\t\tdataLength = size;\n\t\t\t\n\t\t\tNSLog( @\"address: %.8X size: %i\", address, size );\n\t\t\t\n\t\t\tif ( (result = vm_read_overwrite( processTask, address, size, (vm_address_t)data, &dataLength )) != KERN_SUCCESS && result != KERN_PROTECTION_FAILURE )\n\t\t\t{\n\t\t\t\tNSLog( @\"vm_read_overwrite returned error: %i\", result );\n\t\t\t\tfree( data );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif ( result == KERN_SUCCESS )\n\t\t\t{\n\t\t\t\tint\t\t\t\ti, top = dataLength / sizeof(value);\n\t\t\t\t\n\t\t\t\tif ( (results = (TCaddress *)realloc( results, TCAddressSize*resultsAmount + dataLength )) == NULL )\n\t\t\t\t{\n\t\t\t\t\tNSLog( @\"ERROR: could not expand buffer\" );\n\t\t\t\t\texit(0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor ( i = 0; i < top; i++ )\n\t\t\t\t{\n\t\t\t\t\tif ( *(data+i) == value )\n\t\t\t\t\t{\n\t\t\t\t\t\tresults[resultsAmount++] = (TCaddress)address + i * sizeof(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfree( data );\n\t\t}\n\t\t\n\t\taddress += size;\n\t}\n\t\n\trealloc( results, TCAddressSize*resultsAmount );\n\t[searchResults addObject:[SearchResults resultsWithType:TYPE_INTEGER size:SIZE_32_BIT data:results amount:resultsAmount]];\n\t\n\tNSLog( @\"found %i of %i\", resultsAmount, value );\n}";
-               rLen = 2310;
-               rLoc = 10655;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 504;
                rType = 0;
-               vrLen = 839;
-               vrLoc = 12204;
+               vrLen = 939;
+               vrLoc = 0;
        };
-       6E90C19205FAAA0900857F22 = {
-               fRef = 6E4E098E050BB21400A80003;
+       6E90C09E05FA7EAA00857F22 = {
+               fRef = 6E0BDF7D0511568D00A80003;
                isa = PBXTextBookmark;
-               name = "[self firstSearchString8bit:ptr size:(dataSize - (ptr - data))];";
-               rLen = 64;
-               rLoc = 36909;
+               name = "cheat_types.h: 23";
+               rLen = 0;
+               rLoc = 504;
                rType = 0;
-               vrLen = 647;
-               vrLoc = 36445;
+               vrLen = 939;
+               vrLoc = 0;
+       };
+       6E90C0DC05FA979F00857F22 = {
+               fRef = 6E1E43700588275100526509;
+               isa = PBXBookmark;
        };
-       6E9D6CEB059429D400D9A2D7 = {
+       6E90C16605FAA5FB00857F22 = {
+               fRef = 6E90C16A05FAA60C00857F22;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1316;
+               vrLoc = 3041;
+       };
+       6E90C16705FAA5FB00857F22 = {
+               fRef = 6E90C16905FAA60C00857F22;
+               isa = PBXTextBookmark;
+               name = "(null): 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1316;
+               vrLoc = 3041;
+       };
+       6E90C16905FAA60C00857F22 = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = string.h;
+               path = /usr/include/string.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E90C16A05FAA60C00857F22 = {
+               isa = PBXFileReference;
+               lastKnownFileType = sourcecode.c.h;
+               name = string.h;
+               path = /usr/include/string.h;
+               refType = 0;
+               sourceTree = "<absolute>";
+       };
+       6E90C28705FAADF700857F22 = {
+               fRef = 6EF8EC08055A1730008BBE46;
+               isa = PBXTextBookmark;
+               name = "Info-The_Cheat.plist: 1";
+               rLen = 0;
+               rLoc = 0;
+               rType = 0;
+               vrLen = 1004;
+               vrLoc = 218;
+       };
+       6E90C2DC05FAAF2700857F22 = {
                fRef = 089C1660FE840EACC02AAC07;
                isa = PBXTextBookmark;
-               name = "English: 5";
+               name = "English: 7";
+               rLen = 0;
+               rLoc = 203;
+               rType = 0;
+               vrLen = 203;
+               vrLoc = 0;
+       };
+       6E90C34005FB0CB300857F22 = {
+               fRef = 6EF8EC08055A1730008BBE46;
+               isa = PBXTextBookmark;
+               name = "Info-The_Cheat.plist: 27";
                rLen = 0;
-               rLoc = 155;
+               rLoc = 816;
                rType = 0;
-               vrLen = 218;
+               vrLen = 990;
+               vrLoc = 180;
+       };
+       6E90C35F05FB0DAD00857F22 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 20";
+               rLen = 0;
+               rLoc = 456;
+               rType = 0;
+               vrLen = 656;
                vrLoc = 0;
        };
+       6E90C36C05FC07B100857F22 = {
+               fRef = 6E51A97C0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.h: aboutWindow";
+               rLen = 0;
+               rLoc = 414;
+               rType = 0;
+               vrLen = 533;
+               vrLoc = 0;
+       };
+       6E90C39A05FC0B3600857F22 = {
+               fRef = 6E51A97D0573304C00506538;
+               isa = PBXTextBookmark;
+               name = "AboutBoxController.m: 28";
+               rLen = 0;
+               rLoc = 655;
+               rType = 0;
+               vrLen = 646;
+               vrLoc = 174;
+       };
        6E9D6CED059429D400D9A2D7 = {
                fRef = 089C1660FE840EACC02AAC07;
                isa = PBXTextBookmark;
                name = "English: 5";
                rLen = 0;
-               rLoc = 155;
+               rLoc = 141;
                rType = 0;
-               vrLen = 218;
+               vrLen = 199;
                vrLoc = 0;
        };
        6EAD5EEA054C3932005761EE = {
                wantsCodeCompletionTabCompletes = 1;
                wantsIndex = 1;
        };
-       6ECC8EE60579AE4A00AA179F = {
+       6EBCEEE60523E23700A80003 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 670}}";
-                       sepNavSelRange = "{1339, 0}";
-                       sepNavVisRect = "{{0, 216}, {1034, 408}}";
-                       sepNavWindowFrame = "{{61, 397}, {750, 558}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 587}}";
+                       sepNavSelRange = "{0, 0}";
+                       sepNavVisRect = "{{0, 0}, {1002, 587}}";
                };
        };
        6ED3E46305192E2B00A80003 = {
        6EF0870C0575382B00B81D60 = {
                fileReference = 6E4E098E050BB21400A80003;
                isa = PBXFileBreakpoint;
-               lineNumber = 351;
+               lineNumber = 355;
                state = 1;
        };
        6EF8EBD9055A1730008BBE46 = {
        };
        6EF8EC08055A1730008BBE46 = {
                uiCtxt = {
-                       sepNavIntBoundsRect = "{{0, 0}, {1034, 710}}";
-                       sepNavSelRange = "{0, 0}";
-                       sepNavVisRect = "{{0, 0}, {1034, 710}}";
+                       sepNavIntBoundsRect = "{{0, 0}, {1002, 671}}";
+                       sepNavSelRange = "{816, 0}";
+                       sepNavVisRect = "{{0, 79}, {1002, 592}}";
                };
        };
        6EF8EC0A055A1730008BBE46 = {
index 323eb4fe8bbd976985421911ef8e1d8d988e8b93..70235de1f222fe4698f04e0b9b0155a88f202538 100644 (file)
 //104
                1058C7A6FEA54F5311CA2CBB = {
                        children = (
+                               6E90BC2805F7FB9000857F22,
                                1058C7A7FEA54F5311CA2CBB,
                        );
                        isa = PBXGroup;
                        name = "Linked Frameworks";
+                       path = "";
                        refType = 4;
                        sourceTree = "<group>";
                };
@@ -58,6 +60,7 @@
                        );
                        isa = PBXGroup;
                        name = "Other Frameworks";
+                       path = "";
                        refType = 4;
                        sourceTree = "<group>";
                };
                                6ED3E46705192F0C00A80003,
                                2A37F4AFFDCFA73011CA2CEA,
                                2A37F4B8FDCFA73011CA2CEA,
-                               2A37F4C3FDCFA73011CA2CEA,
-                               6ECC8E600579A3DC00AA179F,
+                               6E8EE12505F7EA8100ED3F4F,
                                19C28FB0FE9D524F11CA2CBB,
-                               6EF8EC08055A1730008BBE46,
                        );
                        isa = PBXGroup;
                        name = "The Cheat";
                };
                2A37F4AFFDCFA73011CA2CEA = {
                        children = (
-                               6ECC8EE60579AE4A00AA179F,
                                32DBCF750370BD2300C91783,
                                2A37F4B0FDCFA73011CA2CEA,
                                6E51A986057330B900506538,
                };
                2A37F4B8FDCFA73011CA2CEA = {
                        children = (
+                               6E8DD52805FC4EB600D2C0EA,
                                6E1E43700588275100526509,
                                2A37F4B6FDCFA73011CA2CEA,
                                6E51A97605732B9000506538,
                                6E0D40B005223D4E00A80003,
                                2A37F4B4FDCFA73011CA2CEA,
                                089C165FFE840EACC02AAC07,
-                               6E3309E10575BA9D0093550E,
+                               6EF8EC08055A1730008BBE46,
                        );
                        isa = PBXGroup;
                        name = Resources;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               2A37F4C3FDCFA73011CA2CEA = {
-                       children = (
-                               1058C7A6FEA54F5311CA2CBB,
-                               1058C7A8FEA54F5311CA2CBB,
-                       );
-                       isa = PBXGroup;
-                       name = Frameworks;
-                       path = "";
-                       refType = 4;
-                       sourceTree = "<group>";
-               };
                2A37F4C4FDCFA73011CA2CEA = {
                        fallbackIsa = PBXFileReference;
                        isa = PBXFrameworkReference;
                        settings = {
                        };
                };
-               6E3309E10575BA9D0093550E = {
-                       isa = PBXFileReference;
-                       lastKnownFileType = image.pdf;
-                       path = "Read Me.pdf";
-                       refType = 4;
-                       sourceTree = "<group>";
-               };
-               6E3309E30575BA9D0093550E = {
-                       fileRef = 6E3309E10575BA9D0093550E;
-                       isa = PBXBuildFile;
-                       settings = {
-                       };
-               };
                6E3F0D01050D4ACC00A80003 = {
                        fileEncoding = 4;
                        isa = PBXFileReference;
                        refType = 4;
                        sourceTree = "<group>";
                };
+               6E8DD52305FC4EA100D2C0EA = {
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 7;
+                       files = (
+                               6E8DD52D05FC4EC100D2C0EA,
+                       );
+                       isa = PBXCopyFilesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6E8DD52805FC4EB600D2C0EA = {
+                       isa = PBXFileReference;
+                       lastKnownFileType = text.rtf;
+                       path = "Read Me.rtf";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E8DD52905FC4EB600D2C0EA = {
+                       fileRef = 6E8DD52805FC4EB600D2C0EA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E8DD52D05FC4EC100D2C0EA = {
+                       fileRef = 6E8DD52805FC4EB600D2C0EA;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E8EE12505F7EA8100ED3F4F = {
+                       children = (
+                               1058C7A6FEA54F5311CA2CBB,
+                               1058C7A8FEA54F5311CA2CBB,
+                       );
+                       isa = PBXGroup;
+                       name = "Frameworks & Libraries";
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               6E90BC2805F7FB9000857F22 = {
+                       isa = PBXFileReference;
+                       lastKnownFileType = wrapper.framework;
+                       name = Chaz.framework;
+                       path = /Users/chaz/Projects/Chaz/build/Chaz.framework;
+                       refType = 0;
+                       sourceTree = "<absolute>";
+               };
+               6E90BC2905F7FB9000857F22 = {
+                       fileRef = 6E90BC2805F7FB9000857F22;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               6E90BC3305F7FB9F00857F22 = {
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                               6E90BC3A05F7FBFC00857F22,
+                       );
+                       isa = PBXCopyFilesBuildPhase;
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               6E90BC3A05F7FBFC00857F22 = {
+                       fileRef = 6E90BC2805F7FB9000857F22;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
                6EAF23070527D7DB00A80003 = {
                        children = (
                                6EAF23080527D7FE00A80003,
                        refType = 4;
                        sourceTree = "<group>";
                };
-               6ECC8E600579A3DC00AA179F = {
-                       children = (
-                               6ECC8EE40579AE4400AA179F,
-                       );
-                       isa = PBXGroup;
-                       name = Libraries;
-                       refType = 4;
-                       sourceTree = "<group>";
-               };
-               6ECC8EE40579AE4400AA179F = {
-                       isa = PBXFileReference;
-                       lastKnownFileType = archive.ar;
-                       name = libchaz.a;
-                       path = /Users/chaz/Projects/LibChaz/build/libchaz.a;
-                       refType = 0;
-                       sourceTree = "<absolute>";
-               };
-               6ECC8EE50579AE4400AA179F = {
-                       fileRef = 6ECC8EE40579AE4400AA179F;
-                       isa = PBXBuildFile;
-                       settings = {
-                       };
-               };
-               6ECC8EE60579AE4A00AA179F = {
-                       fileEncoding = 30;
-                       isa = PBXFileReference;
-                       lastKnownFileType = sourcecode.c.h;
-                       name = chaz.h;
-                       path = /Users/chaz/Projects/LibChaz/build/chaz.h;
-                       refType = 0;
-                       sourceTree = "<absolute>";
-               };
-               6ECC8EE70579AE4A00AA179F = {
-                       fileRef = 6ECC8EE60579AE4A00AA179F;
-                       isa = PBXBuildFile;
-                       settings = {
-                       };
-               };
                6ED3E46305192E2B00A80003 = {
                        fileEncoding = 4;
                        isa = PBXFileReference;
                                6EF8EBEE055A1730008BBE46,
                                6EF8EBF7055A1730008BBE46,
                                6EF8EC05055A1730008BBE46,
+                               6E90BC3305F7FB9F00857F22,
+                               6E8DD52305FC4EA100D2C0EA,
                        );
                        buildRules = (
                        );
                        buildSettings = {
-                               FRAMEWORK_SEARCH_PATHS = "";
+                               FRAMEWORK_SEARCH_PATHS = /Users/chaz/Projects/Chaz/build;
                                GCC_C_LANGUAGE_STANDARD = "compiler-default";
                                GCC_ENABLE_ASM_KEYWORD = YES;
                                GCC_ENABLE_CPP_EXCEPTIONS = NO;
                                GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
                                GCC_WARN_UNKNOWN_PRAGMAS = NO;
                                HEADER_SEARCH_PATHS = "";
-                               INFOPLIST_FILE = "Info-The_Cheat__Upgraded_.plist";
+                               INFOPLIST_FILE = "Info-The_Cheat.plist";
                                INSTALL_PATH = "$(HOME)/Applications";
-                               LIBRARY_SEARCH_PATHS = "\"/Users/chaz/Projects/The Cheat\" /Users/chaz/Projects/LibChaz/build";
+                               LIBRARY_SEARCH_PATHS = "\"/Users/chaz/Projects/The Cheat\"";
                                MACOSX_DEPLOYMENT_TARGET = 10.2;
                                OTHER_CFLAGS = "";
                                OTHER_LDFLAGS = "";
                                6EF8EBED055A1730008BBE46,
                                6E51A9800573304C00506538,
                                6E51A98A057330B900506538,
-                               6ECC8EE70579AE4A00AA179F,
                        );
                        isa = PBXHeadersBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                                6EF8EBF3055A1730008BBE46,
                                6EF8EBF4055A1730008BBE46,
                                6E51A97905732B9000506538,
-                               6E3309E30575BA9D0093550E,
                                6E1E43710588275100526509,
+                               6E8DD52905FC4EB600D2C0EA,
                        );
                        isa = PBXResourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                        buildActionMask = 2147483647;
                        files = (
                                6EF8EC06055A1730008BBE46,
-                               6ECC8EE50579AE4400AA179F,
+                               6E90BC2905F7FB9000857F22,
                        );
                        isa = PBXFrameworksBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                };
                6EF8EC08055A1730008BBE46 = {
                        isa = PBXFileReference;
-                       lastKnownFileType = text.plist;
-                       path = "Info-The_Cheat__Upgraded_.plist";
+                       lastKnownFileType = text.plist.xml;
+                       path = "Info-The_Cheat.plist";
                        refType = 4;
                        sourceTree = "<group>";
                };
index 03bad61731249a933e9129c9221a35022fff97b6..f50a0e995d83e39b10f16f6cf63917231ae955b5 100644 (file)
 
 #import <Cocoa/Cocoa.h>
 
-#define                                        TCDefaultListenPort (5007)
+#define                                        TCDefaultListenPort (51835)
 //#define                                      TCDefaultListenPath "/tmp/com.brokenzipper.TheCheat"
 // this path alone would work, but it *should* go in the user's home directory
 char extern                            TCDefaultListenPath[104];
 
-#define                                        TCMaxSearchResults (100000)
+//#define                                      TCMaxSearchResults (100)
 
 int extern                             TCGlobalDocumentCount;
 int extern                             TCGlobalAlternateBroadcastNameCount;
@@ -26,15 +26,19 @@ char extern                         TCGlobalListening;
 
 char extern                            TCGlobalPlaySounds;
 char extern                            TCGlobalWindowsOnTop;
+char extern                            TCGlobalUpdateCheck;
 char extern                            TCGlobalAllowRemote;
 int extern                             TCGlobalListenPort;
 #define                                        TCGlobalBroadcastName ([[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref])
+int extern                             TCGlobalHitsDisplayed;
 
 NSString extern                        *TCPlaySoundsPref;
 NSString extern                        *TCWindowsOnTopPref;
+NSString extern                        *TCUpdateCheckPref;
 NSString extern                        *TCAllowRemotePref;
 NSString extern                        *TCListenPortPref;
 NSString extern                        *TCBroadcastNamePref;
+NSString extern                        *TCHitsDisplayedPref;
 
 #endif
 
index 7c04b96382c7482f4f170d5f05ec292787b33584..dab3acb116f7a7e2a4fef5ae22e7b9b83c3b1f64 100644 (file)
@@ -18,11 +18,15 @@ char                                        TCGlobalListening = NO;
 
 char                                   TCGlobalPlaySounds = YES;
 char                                   TCGlobalWindowsOnTop = NO;
+char                                   TCGlobalUpdateCheck = NO;
 char                                   TCGlobalAllowRemote = NO;
 int                                            TCGlobalListenPort = TCDefaultListenPort;
+int                                            TCGlobalHitsDisplayed = 1000;
 
 NSString                               *TCPlaySoundsPref = @"TCPlaySoundsPref";
 NSString                               *TCWindowsOnTopPref = @"TCWindowsOnTopPref";
+NSString                               *TCUpdateCheckPref = @"TCUpdateCheckPref";
 NSString                               *TCAllowRemotePref = @"TCAllowRemotePref";
 NSString                               *TCListenPortPref = @"TCListenPortPref";
-NSString                               *TCBroadcastNamePref = @"TCBroadcastNamePref";
\ No newline at end of file
+NSString                               *TCBroadcastNamePref = @"TCBroadcastNamePref";
+NSString                               *TCHitsDisplayedPref = @"TCHitsDisplayedPref";
\ No newline at end of file
index 1a7b7a515c5f66839e624c285caeccebc242c185..48062c24a42eddf29a9feba4878c3d9800e35a3b 100644 (file)
@@ -18,5 +18,5 @@ void LaunchWebsite()
 
 void LaunchEmail()
 {
-       [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:chaz@brokenzipper.com?subject=The%20Cheat%20Feedback"]];
+       [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:thecheat@brokenzipper.com?subject=The%20Cheat%20Feedback"]];
 }
\ No newline at end of file
index f94116801985de453063fff86ab43ee32abc429f..fa0c1d0cc52db7e0cde1f5388ff35075f6c5eab4 100644 (file)
Binary files a/icon.icns and b/icon.icns differ
This page took 0.152345 seconds and 4 git commands to generate.