Index: trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.xcodeproj/project.pbxproj
===================================================================
--- trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.xcodeproj/project.pbxproj	(revision 321)
+++ trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.xcodeproj/project.pbxproj	(revision 322)
@@ -34,4 +34,12 @@
 		E14521D90A044FB300C9B040 /* SmartCrashReportsAPI.o in Frameworks */ = {isa = PBXBuildFile; fileRef = E14521D80A044FB300C9B040 /* SmartCrashReportsAPI.o */; };
 		E14DF1DA0A6F374700346107 /* APETools.o in Frameworks */ = {isa = PBXBuildFile; fileRef = E14DF1D90A6F374700346107 /* APETools.o */; };
+		E14E2AB50C2B774800AC18D0 /* ICeCoffEEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E14E2AB30C2B774800AC18D0 /* ICeCoffEEParser.h */; };
+		E14E2AB60C2B774800AC18D0 /* ICeCoffEEParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14E2AB40C2B774800AC18D0 /* ICeCoffEEParser.m */; };
+		E14E2B270C2CBF3400AC18D0 /* ICeCoffEEParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14E2AB40C2B774800AC18D0 /* ICeCoffEEParser.m */; };
+		E14E2B340C2CBFB200AC18D0 /* TestParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E14E2B330C2CBFB200AC18D0 /* TestParser.m */; };
+		E14E2C3F0C2CCBEF00AC18D0 /* ICeCoffEEShared.m in Sources */ = {isa = PBXBuildFile; fileRef = E182C8F603DE817F00050002 /* ICeCoffEEShared.m */; };
+		E14E2C590C2CCC1900AC18D0 /* ICeCoffEETrigger.m in Sources */ = {isa = PBXBuildFile; fileRef = E170DFDE0835D6F400B484AC /* ICeCoffEETrigger.m */; };
+		E14E2C600C2CCC4C00AC18D0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E19EB50303DD36E600050002 /* Foundation.framework */; };
+		E14E2D540C2CD1A000AC18D0 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E14E2D3E0C2CD1A000AC18D0 /* ApplicationServices.framework */; };
 		E170DFDF0835D6F400B484AC /* ICeCoffEETrigger.h in Headers */ = {isa = PBXBuildFile; fileRef = E170DFDD0835D6F400B484AC /* ICeCoffEETrigger.h */; };
 		E170DFE00835D6F400B484AC /* ICeCoffEETrigger.m in Sources */ = {isa = PBXBuildFile; fileRef = E170DFDE0835D6F400B484AC /* ICeCoffEETrigger.m */; };
@@ -41,5 +49,4 @@
 		E191FCA10831B8FB003B09BC /* ICeCoffEEServices.m in Sources */ = {isa = PBXBuildFile; fileRef = E191FC9D0831B8FB003B09BC /* ICeCoffEEServices.m */; };
 		E1ABAE900812F4B2007C5427 /* ICeCoffEE.h in Headers */ = {isa = PBXBuildFile; fileRef = E14343B303DB4CF200050002 /* ICeCoffEE.h */; };
-		E1ABAE910812F4B2007C5427 /* ICeCoffEEScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = E14343B703DB4CFE00050002 /* ICeCoffEEScanner.h */; };
 		E1ABAE920812F4B2007C5427 /* ICeCoffEESuper.h in Headers */ = {isa = PBXBuildFile; fileRef = E14343CD03DB66E900050002 /* ICeCoffEESuper.h */; };
 		E1ABAE930812F4B2007C5427 /* ICeCoffEEMenuOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BB268F03DB74B700050002 /* ICeCoffEEMenuOnly.h */; };
@@ -57,5 +64,4 @@
 		E1ABAEA30812F4B2007C5427 /* APEMain.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A6986E03BE1DF000AA4DA5 /* APEMain.m */; };
 		E1ABAEA40812F4B2007C5427 /* ICeCoffEE.m in Sources */ = {isa = PBXBuildFile; fileRef = E14343B403DB4CF200050002 /* ICeCoffEE.m */; };
-		E1ABAEA50812F4B2007C5427 /* ICeCoffEEScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = E14343B803DB4CFE00050002 /* ICeCoffEEScanner.m */; };
 		E1ABAEA60812F4B2007C5427 /* ICeCoffEEMenuOnly.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BB269003DB74B700050002 /* ICeCoffEEMenuOnly.m */; };
 		E1ABAEA70812F4B2007C5427 /* ICeCoffEEMenuSuper.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BB269403DB74C200050002 /* ICeCoffEEMenuSuper.m */; };
@@ -201,6 +207,4 @@
 		E14343B303DB4CF200050002 /* ICeCoffEE.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ICeCoffEE.h; sourceTree = "<group>"; };
 		E14343B403DB4CF200050002 /* ICeCoffEE.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = ICeCoffEE.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
-		E14343B703DB4CFE00050002 /* ICeCoffEEScanner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ICeCoffEEScanner.h; sourceTree = "<group>"; };
-		E14343B803DB4CFE00050002 /* ICeCoffEEScanner.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ICeCoffEEScanner.m; sourceTree = "<group>"; };
 		E14343CD03DB66E900050002 /* ICeCoffEESuper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ICeCoffEESuper.h; sourceTree = "<group>"; };
 		E14343CE03DB66E900050002 /* ICeCoffEESuper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ICeCoffEESuper.m; sourceTree = "<group>"; };
@@ -208,4 +212,10 @@
 		E14521D80A044FB300C9B040 /* SmartCrashReportsAPI.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SmartCrashReportsAPI.o; sourceTree = "<group>"; };
 		E14DF1D90A6F374700346107 /* APETools.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; name = APETools.o; path = /Library/Frameworks/ApplicationEnhancer.framework/Versions/A/Libraries/APETools.o; sourceTree = "<absolute>"; };
+		E14E2AB30C2B774800AC18D0 /* ICeCoffEEParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ICeCoffEEParser.h; sourceTree = "<group>"; };
+		E14E2AB40C2B774800AC18D0 /* ICeCoffEEParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ICeCoffEEParser.m; sourceTree = "<group>"; };
+		E14E2B1D0C2CBF1500AC18D0 /* TestParser */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TestParser; sourceTree = BUILT_PRODUCTS_DIR; };
+		E14E2B330C2CBFB200AC18D0 /* TestParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestParser.m; sourceTree = "<group>"; };
+		E14E2BC20C2CC28500AC18D0 /* urls.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist; path = urls.plist; sourceTree = "<group>"; };
+		E14E2D3E0C2CD1A000AC18D0 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
 		E165AB3503E7A7FC00050002 /* ICeCoffEEAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ICeCoffEEAction.h; sourceTree = "<group>"; };
 		E165AB3603E7A7FC00050002 /* ICeCoffEEAction.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ICeCoffEEAction.c; sourceTree = "<group>"; };
@@ -263,4 +273,13 @@
 
 /* Begin PBXFrameworksBuildPhase section */
+		E14E2B2D0C2CBF8100AC18D0 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				E14E2C600C2CCC4C00AC18D0 /* Foundation.framework in Frameworks */,
+				E14E2D540C2CD1A000AC18D0 /* ApplicationServices.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		E1ABAEB00812F4B2007C5427 /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
@@ -302,4 +321,5 @@
 				E1ABAED50812F4B2007C5427 /* APEManagerPrefPane.plugin */,
 				E1ABAEDF0812F4B2007C5427 /* ICFindFilesToRemove */,
+				E14E2B1D0C2CBF1500AC18D0 /* TestParser */,
 			);
 			name = Products;
@@ -316,4 +336,5 @@
 				E1BF159F03DBA81600050002 /* Installer components */,
 				E1BF15BD03DBBD3E00050002 /* package-ICeCoffEE.sh */,
+				E14E2B3F0C2CC01700AC18D0 /* Tests */,
 				E1BF154403DB950B00050002 /* Documentation */,
 				29B97317FDCFA39411CA2CEA /* Resources */,
@@ -328,4 +349,6 @@
 			children = (
 				F9A6986E03BE1DF000AA4DA5 /* APEMain.m */,
+				E14E2AB30C2B774800AC18D0 /* ICeCoffEEParser.h */,
+				E14E2AB40C2B774800AC18D0 /* ICeCoffEEParser.m */,
 				E11854F703F2709E00050002 /* CPS.h */,
 				E169DBA703E4F6A400050002 /* ICeCoffEEConfig.h */,
@@ -347,5 +370,4 @@
 			isa = PBXGroup;
 			children = (
-				E1C30B100C23684D00EAE48A /* VERSION.xcconfig */,
 				29B97318FDCFA39411CA2CEA /* APE Manager plugin.nib */,
 				E12FEC6104959FB800AEFBF9 /* Select services.nib */,
@@ -355,4 +377,5 @@
 				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
 				E1CBC99A03E7603400050002 /* Localizable.strings */,
+				E1C30B100C23684D00EAE48A /* VERSION.xcconfig */,
 			);
 			name = Resources;
@@ -366,4 +389,5 @@
 				F5D3F9FC0305A40D01FE0BDE /* ApplicationEnhancer.framework */,
 				E19EB50303DD36E600050002 /* Foundation.framework */,
+				E14E2D3E0C2CD1A000AC18D0 /* ApplicationServices.framework */,
 			);
 			name = Frameworks;
@@ -419,4 +443,13 @@
 			sourceTree = "<group>";
 		};
+		E14E2B3F0C2CC01700AC18D0 /* Tests */ = {
+			isa = PBXGroup;
+			children = (
+				E14E2B330C2CBFB200AC18D0 /* TestParser.m */,
+				E14E2BC20C2CC28500AC18D0 /* urls.plist */,
+			);
+			name = Tests;
+			sourceTree = "<group>";
+		};
 		E19EB4F503DD359100050002 /* ICFindFilesToRemove */ = {
 			isa = PBXGroup;
@@ -437,6 +470,4 @@
 				E170DFDD0835D6F400B484AC /* ICeCoffEETrigger.h */,
 				E170DFDE0835D6F400B484AC /* ICeCoffEETrigger.m */,
-				E14343B703DB4CFE00050002 /* ICeCoffEEScanner.h */,
-				E14343B803DB4CFE00050002 /* ICeCoffEEScanner.m */,
 				E1317B2E03DFC4DE00050002 /* ICeCoffEETerminal.h */,
 				E1317B2F03DFC4DE00050002 /* ICeCoffEETerminal.m */,
@@ -500,5 +531,4 @@
 			files = (
 				E1ABAE900812F4B2007C5427 /* ICeCoffEE.h in Headers */,
-				E1ABAE910812F4B2007C5427 /* ICeCoffEEScanner.h in Headers */,
 				E1ABAE920812F4B2007C5427 /* ICeCoffEESuper.h in Headers */,
 				E1ABAE930812F4B2007C5427 /* ICeCoffEEMenuOnly.h in Headers */,
@@ -515,4 +545,5 @@
 				E170DFDF0835D6F400B484AC /* ICeCoffEETrigger.h in Headers */,
 				E14521D70A044FAA00C9B040 /* SmartCrashReportsAPI.h in Headers */,
+				E14E2AB50C2B774800AC18D0 /* ICeCoffEEParser.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -546,4 +577,20 @@
 
 /* Begin PBXNativeTarget section */
+		E14E2B1C0C2CBF1500AC18D0 /* TestParser */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = E14E2B280C2CBF5200AC18D0 /* Build configuration list for PBXNativeTarget "TestParser" */;
+			buildPhases = (
+				E14E2B1A0C2CBF1500AC18D0 /* Sources */,
+				E14E2B2D0C2CBF8100AC18D0 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = TestParser;
+			productName = TestParser;
+			productReference = E14E2B1D0C2CBF1500AC18D0 /* TestParser */;
+			productType = "com.apple.product-type.tool";
+		};
 		E1ABAE8D0812F4B2007C5427 /* APE Module */ = {
 			isa = PBXNativeTarget;
@@ -636,4 +683,5 @@
 				E1ABAED60812F4B2007C5427 /* ICFindFilesToRemove */,
 				E120DB7308141CCB00BF8DDC /* ICeCoffEE Installer */,
+				E14E2B1C0C2CBF1500AC18D0 /* TestParser */,
 			);
 		};
@@ -698,4 +746,15 @@
 
 /* Begin PBXSourcesBuildPhase section */
+		E14E2B1A0C2CBF1500AC18D0 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				E14E2B270C2CBF3400AC18D0 /* ICeCoffEEParser.m in Sources */,
+				E14E2B340C2CBFB200AC18D0 /* TestParser.m in Sources */,
+				E14E2C3F0C2CCBEF00AC18D0 /* ICeCoffEEShared.m in Sources */,
+				E14E2C590C2CCC1900AC18D0 /* ICeCoffEETrigger.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		E1ABAEA10812F4B2007C5427 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
@@ -704,5 +763,4 @@
 				E1ABAEA30812F4B2007C5427 /* APEMain.m in Sources */,
 				E1ABAEA40812F4B2007C5427 /* ICeCoffEE.m in Sources */,
-				E1ABAEA50812F4B2007C5427 /* ICeCoffEEScanner.m in Sources */,
 				E1ABAEA60812F4B2007C5427 /* ICeCoffEEMenuOnly.m in Sources */,
 				E1ABAEA70812F4B2007C5427 /* ICeCoffEEMenuSuper.m in Sources */,
@@ -716,4 +774,5 @@
 				E191FC9F0831B8FB003B09BC /* ICeCoffEEServices.m in Sources */,
 				E170DFE00835D6F400B484AC /* ICeCoffEETrigger.m in Sources */,
+				E14E2AB60C2B774800AC18D0 /* ICeCoffEEParser.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -819,4 +878,50 @@
 
 /* Begin XCBuildConfiguration section */
+		E14E2B290C2CBF5200AC18D0 /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+				INSTALL_PATH = "$(HOME)/bin";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = TestParser;
+				ZERO_LINK = YES;
+			};
+			name = Development;
+		};
+		E14E2B2A0C2CBF5200AC18D0 /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+				GCC_MODEL_TUNING = G5;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+				INSTALL_PATH = "$(HOME)/bin";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = TestParser;
+				ZERO_LINK = NO;
+			};
+			name = Deployment;
+		};
 		E1E685AD0A044B330072E0C9 /* Development */ = {
 			isa = XCBuildConfiguration;
@@ -997,4 +1102,5 @@
 				MACOSX_DEPLOYMENT_TARGET = 10.3;
 				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				ZERO_LINK = NO;
 			};
 			name = Development;
@@ -1012,4 +1118,5 @@
 				MACOSX_DEPLOYMENT_TARGET = 10.3;
 				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+				ZERO_LINK = NO;
 			};
 			name = Deployment;
@@ -1018,4 +1125,13 @@
 
 /* Begin XCConfigurationList section */
+		E14E2B280C2CBF5200AC18D0 /* Build configuration list for PBXNativeTarget "TestParser" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				E14E2B290C2CBF5200AC18D0 /* Development */,
+				E14E2B2A0C2CBF5200AC18D0 /* Deployment */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Development;
+		};
 		E1E685AC0A044B330072E0C9 /* Build configuration list for PBXNativeTarget "APEManagerPrefPane" */ = {
 			isa = XCConfigurationList;
