Index: /trunk/appswitch/CPS.h
===================================================================
--- /trunk/appswitch/CPS.h	(revision 90)
+++ /trunk/appswitch/CPS.h	(revision 91)
@@ -78,5 +78,5 @@
 	UInt32			ExecFileType;
 	UInt32			ExecFileCreator;
-	UInt32			UnixPID;
+	SInt32			UnixPID; // njr changed from UInt32
 };
 
Index: /trunk/appswitch/README
===================================================================
--- /trunk/appswitch/README	(revision 91)
+++ /trunk/appswitch/README	(revision 91)
@@ -0,0 +1,81 @@
+appswitch 1.0b1 [10 February 2003]
+===============
+
+A command-line interface to the Mac OS X process manager.
+
+Written by Nicholas Riley <mailto:appswitch@sabi.net>.
+Obtain updates from <http://web.sabi.net/nriley/software/>.
+
+WHAT IS IT?
+-----------
+
+If you use shell scripts to automate Mac OS X applications, you may
+need to switch between applications.  You could use AppleScript via
+osascript(1), but that would take several seconds for the script to
+compile and execute - or you could use appswitch, which works almost
+instantly.
+
+Say you're launching an X11 application from Terminal but the X server
+isn't in front when you need it.  Use appswitch to fix the problem.
+
+Or, if you'd like a version of the ps(1) utility which understands the
+concept of OS X applications, appswitch can help.
+
+INSTALLATION
+------------
+
+The commands below install the 'appswitch' tool in /usr/local/bin,
+which is in the default path.  You should subsequently be able to use
+'appswitch' by typing its name.  If you wish to install it somewhere
+else, modify the install line as appropriate.
+
+% sudo /usr/bin/install -d /usr/local/bin /usr/local/man/man1
+% sudo /usr/bin/install -c build/appswitch /usr/local/bin
+% sudo /usr/bin/install -c appswitch.1 /usr/local/man/man1
+% rehash
+
+Uninstallation:
+
+% sudo rm -f /usr/local/bin/appswitch
+
+COMPILATION
+-----------
+
+A Project Builder project, 'appswitch.pbproj', is included.  A
+precompiled binary is also provided.  'appswitch' was developed and
+tested under Mac OS 10.2.4 with the December 2002 Developer Tools,
+and does not require any additional software to build.
+
+USAGE
+-----
+
+Just type 'appswitch' by itself to receive usage information.  See the
+manual page (man appswitch) for more information.
+
+If you're curious about the speed difference between appswitch and
+other methods, this should give you some indication.
+
+appswitch -a Emacs          0.00s user 0.02s system  5% cpu 0.355 total
+appswitch -i com.gnu.Emacs  0.01s user 0.04s system 13% cpu 0.381 total
+open -a Emacs               0.30s user 0.15s system 53% cpu 0.842 total
+osascript -e 'tell application "Emacs" to activate'
+                            0.66s user 0.42s system 45% cpu 2.361 total
+
+The above tests were performed on a PowerBook G4/800; slower systems
+should show more dramatic differences.
+
+COMMENTS, SUGGESTIONS, BUG REPORTS, ETC.
+----------------------------------------
+
+Please send to the author, Nicholas Riley, at <appswitch@sabi.net>.
+
+VERSION HISTORY
+---------------
+
+1.0b1 - 10 February 2003
+ - added -S, -S, -h, -H, -k, -P, -l, -F options
+ - fixed reference to bogus -u option
+ - fixed bug where unknown match type was silently discarded
+ - added man page and this README
+1.0d1 - 4 February 2003
+ - initial release
Index: /trunk/appswitch/VERSION
===================================================================
--- /trunk/appswitch/VERSION	(revision 91)
+++ /trunk/appswitch/VERSION	(revision 91)
@@ -0,0 +1,1 @@
+1.0b1
Index: /trunk/appswitch/appswitch.1
===================================================================
--- /trunk/appswitch/appswitch.1	(revision 90)
+++ /trunk/appswitch/appswitch.1	(revision 91)
@@ -1,79 +1,128 @@
-.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples.
-.\"See Also:
-.\"man mdoc.samples for a complete listing of options
-.\"man mdoc for the short list of editing options
-.\"/usr/share/misc/mdoc.template
-.Dd Tue Feb 04 2003               \" DATE 
-.Dt appswitch 1      \" Program name and manual section number 
-.Os Darwin
-.Sh NAME                 \" Section Header - required - don't modify 
-.Nm appswitch,
-.\" The following lines are read in generating the apropos(man -k) database. Use only key
-.\" words here as the database is built based on the words here and in the .ND line. 
-.Nm Other_name_for_same_program(),
-.Nm Yet another name for the same program.
-.\" Use .Nm macro to designate other names for the documented program.
-.Nd This line parsed for whatis database.
-.Sh SYNOPSIS             \" Section Header - required - don't modify
+.Dd Mon Feb 10 2003               \" DATE 
+.Dt APPSWITCH 1 LOCAL      \" Program name and manual section number 
+.Os appswitch 1.0b1
+.Sh NAME
+.Nm appswitch
+.Nd switch, hide, show, kill or list Mac OS X applications
+.Sh SYNOPSIS
+.Nm appswitch
+.Op Fl sShHkFlP          \" [-sShHkFlP]
+.Op Fl c Ar creator      \" [-c creator]
+.Op Fl i Ar bundleID     \" [-i bundleID]
+.Op Fl a Ar name         \" [-a name]
+.Op Fl p Ar pid          \" [-p pid]
+.Op Ar path              \" [path]
+.Sh DESCRIPTION
 .Nm
-.Op Fl abcd              \" [-abcd]
-.Op Fl a Ar path         \" [-a path] 
-.Op Ar file              \" [file]
-.Op Ar                   \" [file ...]
-.Ar arg0                 \" Underlined argument - use .Ar anywhere to underline
-arg2 ...                 \" Arguments
-.Sh DESCRIPTION          \" Section Header - required - don't modify
-Use the .Nm macro to refer to your program throughout the man page like such:
+controls the ordering and visibility of Mac OS X application windows.
 .Nm
-Underlining is accomplished with the .Ar macro like this:
-.Ar underlined text .
-.Pp                      \" Inserts a space
-A list of items with descriptions:
-.Bl -tag -width -indent  \" Begins a tagged list 
-.It item a               \" Each item preceded by .It macro
-Description of item a
-.It item b
-Description of item b
-.El                      \" Ends the list
-.Pp
-A list of flags and their descriptions:
-.Bl -tag -width -indent  \" Differs from above in tag removed 
-.It Fl a                 \"-a flag as a list item
-Description of -a flag
-.It Fl b
-Description of -b flag
-.El                      \" Ends the list
-.Pp
-.\" .Sh ENVIRONMENT      \" May not be needed
-.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1
-.\" .It Ev ENV_VAR_1
-.\" Description of ENV_VAR_1
-.\" .It Ev ENV_VAR_2
-.\" Description of ENV_VAR_2
-.\" .El                      
-.Sh FILES                \" File used or created by the topic of the man page
-.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact
-.It Pa /usr/share/file_name
-FILE_1description
-.It Pa /Users/joeuser/Library/really_long_file_name
-FILE_2 description
-.\" .Sh DIAGNOSTICS       \" May not be needed
-.\" .Bl -diag
-.\" .It Diagnostic Tag
-.\" Diagnostic informtion here.
-.\" .It Diagnostic Tag
-.\" Diagnostic informtion here.
-.\" .El
+can also list or kill running applications.
+.Ss Matching options
+Matching identifies one or more applications to manipulate.
+.Bl -tag -width -indent
+.It Fl c Ar creator
+Match by creator (a four-character code, also known as a signature).
+.It Fl i Ar bundle ID
+Match by bundle identifier, usually consisting of the reversed dot
+(.)-separated components of the application developer's Internet domain
+name, followed by the application name.  For example, the Finder's
+bundle identifier is
+.Ar com.apple.Finder .
+Bundle identifiers are not case-sensitive.
+.It Fl p Ar pid
+Match by process identifier, a positive number.
+.It Ar path
+Match by bundle path.  For packaged applications, this is the package
+directory whose name typically has the .app extension, for example
+.Ar /Applications/TextEdit.app
+for the default installation location of TextEdit.  For non-packaged
+applications, this is the path to the executable itself.
+.El
+.Ss Application actions
+These actions apply to the matched application. If multiple
+applications match the supplied criteria, only the first matching
+application is acted upon.  The list option
+.Fl l
+displays all matching applications.
+.Bl -tag -width -indent
+.It Fl s
+Show the application, making the application's windows frontmost. Do
+not switch to the application.
+.It Fl h
+Hide the application's windows.
+.It Fl k
+Kill (force quit) the application.
+.It Fl l
+List applications in a format similar to that of
+.Xr ps 1 . The columns of the listing are as follows:
+.Bl -tag -width indent
+.It PSN
+The process serial number of the application.  Process serial numbers
+are unique identifiers among both native Mac OS X and Classic
+applications.
+.It PID
+The process identifier, a positive number which uniquely identifies
+native Mac OS X processes, usable with the
+.Fl p
+matching option.  Because all Classic applications run inside
+TruBlueEnvironment, a single Mac OS X process, their process
+identifiers appear as -1.
+.It TYPE
+The four-character code identifying the application's type,
+usually 'APPL' for most applications or 'FNDR' for the Finder.
+Classic applications include additional types such as 'appe'
+and 'APPC' for applications which perform the functions of extensions
+and control panels, respectively.
+.It CREA
+The four-character code identifying the application's creator, usable with the
+.Fl c
+matching option. Some Mac OS X applications have no creator, appearing
+as '????'; for these applications you must use the bundle identifier,
+name or path as match criteria.
+.It NAME
+The user-visible application name, usable with the
+.Fl a
+matching option. This field is truncated to 20 characters; the
+remainder of longer application names is not displayed.
+.It PATH
+The path to the application bundle, usable with the
+.Ar path
+matching option. This field is truncated to the window width, or to 80
+characters if the window width cannot be determined.
+.El
+.It Fl p
+Print the application's process identifier (PID), a positive number
+and unique identifier for all applications except Classic
+applications.
+.El
+.Ss Actions
+These actions affect all applications currently running.
+.Bl -tag -width -indent
+.It Fl S
+Show all applications, layering the windows of initially hidden
+applications on top.
+.It Fl H
+Hide windows of all applications other than the matched application,
+or the frontmost application if no application has been matched.
+.It Fl F
+Order the current application's windows to the front.
+.El
 .Sh SEE ALSO 
 .\" List links in ascending order by section, alphabetically within a section.
 .\" Please do not reference files that do not exist without filing a bug report
-.Xr a 1 , 
-.Xr b 1 ,
-.Xr c 1 ,
-.Xr a 2 ,
-.Xr b 2 ,
-.Xr a 3 ,
-.Xr b 3 
-.\" .Sh BUGS              \" Document known, unremedied bugs 
+.Xr open 1 ,
+.Xr launch 1 ,
+.Xr ps 1 ,
+.Xr kill 1 ,
+.Xr GetFileInfo 1
+.Sh BUGS              \" Document known, unremedied bugs
+The
+.Fl F
+option may be unreliable if issued immediately after another show or
+hide command; try inserting a
+.Xr sleep 1
+command before it.
+.Sh AUTHORS
+.An "Nicholas Riley" Aq appswitch@sabi.net
 .\" .Sh HISTORY           \" Document history if command behaves in a unique manner 
 
Index: /trunk/appswitch/appswitch.pbproj/nicholas.pbxuser
===================================================================
--- /trunk/appswitch/appswitch.pbproj/nicholas.pbxuser	(revision 90)
+++ /trunk/appswitch/appswitch.pbproj/nicholas.pbxuser	(revision 91)
@@ -14,17 +14,271 @@
 		);
 		perUserDictionary = {
-			PBXPerProjectTemplateStateSaveDate = 66039068;
-			"PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = {
-				ContentSize = "{665, 594}";
+			PBXPerProjectTemplateStateSaveDate = 66554412;
+			"PBXTemplateGeometry-F5314676015831810DCA290F" = {
+				ContentSize = "{618, 257}";
 				LeftSlideOut = {
 					Collapsed = NO;
-					Frame = "{{0, 0}, {665, 594}}";
+					Frame = "{{0, 23}, {618, 234}}";
 					Split0 = {
-						ActiveTab = 3;
-						ActiveTabName = PBXProjectFindModule;
+						ActiveTab = 2;
+						ActiveTabName = PBXBuildResultsModule;
+						Collapsed = YES;
+						Frame = "{{0, 0}, {618, 234}}";
+						Split0 = {
+							Frame = "{{1e+06, 1e+06}, {618, 0}}";
+						};
+						SplitCount = 1;
+						Tab0 = {
+							Frame = "{{0, 0}, {952, 321}}";
+						};
+						Tab1 = {
+							Debugger = {
+								Collapsed = NO;
+								Frame = "{{0, 0}, {781, 452}}";
+								Split0 = {
+									Frame = "{{0, 24}, {781, 428}}";
+									Split0 = {
+										Frame = "{{0, 0}, {383, 428}}";
+									};
+									Split1 = {
+										DebugVariablesTableConfiguration = (
+											Name,
+											123,
+											Value,
+											85,
+											Summary,
+											155.123,
+										);
+										Frame = "{{392, 0}, {389, 428}}";
+									};
+									SplitCount = 2;
+								};
+								SplitCount = 1;
+								Tab0 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								Tab1 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								TabCount = 2;
+								TabsVisible = YES;
+							};
+							Frame = "{{0, 0}, {781, 452}}";
+							LauncherConfigVersion = 7;
+						};
+						Tab2 = {
+							Frame = "{{0, 0}, {618, 228}}";
+							LauncherConfigVersion = 3;
+							Runner = {
+								Frame = "{{0, 0}, {618, 228}}";
+							};
+						};
+						Tab3 = {
+							BuildMessageFrame = "{{0, 0}, {620, 195}}";
+							BuildTranscriptFrame = "{{0, 204}, {620, 2}}";
+							BuildTranscriptFrameExpanded = YES;
+							Frame = "{{0, 0}, {618, 228}}";
+						};
+						Tab4 = {
+							Frame = "{{0, 0}, {612, 295}}";
+						};
+						TabCount = 5;
+						TabsVisible = NO;
+					};
+					SplitCount = 1;
+					Tab0 = {
+						Frame = "{{0, 0}, {300, 533}}";
+						GroupTreeTableConfiguration = (
+							TargetStatusColumn,
+							18,
+							MainColumn,
+							267,
+						);
+					};
+					Tab1 = {
+						ClassesFrame = "{{0, 0}, {280, 398}}";
+						ClassesTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXClassColumnIdentifier,
+							237,
+						);
+						Frame = "{{0, 0}, {278, 659}}";
+						MembersFrame = "{{0, 407}, {280, 252}}";
+						MembersTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXMethodColumnIdentifier,
+							236,
+						);
+					};
+					Tab2 = {
+						Frame = "{{0, 0}, {200, 100}}";
+					};
+					Tab3 = {
+						Frame = "{{0, 0}, {200, 100}}";
+						TargetTableConfiguration = (
+							ActiveObject,
+							16,
+							ObjectNames,
+							202.296,
+						);
+					};
+					Tab4 = {
+						BreakpointsTreeTableConfiguration = (
+							breakpointColumn,
+							197,
+							enabledColumn,
+							31,
+						);
+						Frame = "{{0, 0}, {250, 100}}";
+					};
+					TabCount = 5;
+					TabsVisible = NO;
+				};
+				NavBarShownByDefault = YES;
+				StatusViewVisible = YES;
+				Template = F5314676015831810DCA290F;
+				ToolbarVisible = YES;
+				WindowLocation = "{819, 244}";
+			};
+			"PBXTemplateGeometry-F5534CB2020F3F8A0DCA290F" = {
+				ContentSize = "{594, 303}";
+				LeftSlideOut = {
+					Collapsed = NO;
+					Frame = "{{0, 23}, {594, 280}}";
+					Split0 = {
+						ActiveTab = 1;
+						ActiveTabName = PBXRunSessionModule;
+						Collapsed = YES;
+						Frame = "{{0, 0}, {594, 280}}";
+						Split0 = {
+							Frame = "{{1e+06, 1e+06}, {594, 0}}";
+						};
+						SplitCount = 1;
+						Tab0 = {
+							Frame = "{{0, 0}, {804, 321}}";
+						};
+						Tab1 = {
+							Debugger = {
+								Collapsed = NO;
+								Frame = "{{0, 0}, {594, 274}}";
+								Split0 = {
+									Frame = "{{0, 24}, {594, 250}}";
+									Split0 = {
+										Frame = "{{0, 0}, {290, 250}}";
+									};
+									Split1 = {
+										DebugVariablesTableConfiguration = (
+											Name,
+											123,
+											Value,
+											85,
+											Summary,
+											62.123,
+										);
+										Frame = "{{299, 0}, {295, 250}}";
+									};
+									SplitCount = 2;
+								};
+								SplitCount = 1;
+								Tab0 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								Tab1 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								TabCount = 2;
+								TabsVisible = YES;
+							};
+							Frame = "{{0, 0}, {594, 274}}";
+							LauncherConfigVersion = 7;
+						};
+						Tab2 = {
+							Frame = "{{0, 0}, {594, 274}}";
+							LauncherConfigVersion = 3;
+							Runner = {
+								Frame = "{{0, 0}, {594, 274}}";
+							};
+						};
+						Tab3 = {
+							BuildMessageFrame = "{{0, 0}, {614, 262}}";
+							BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+							BuildTranscriptFrameExpanded = YES;
+							Frame = "{{0, 0}, {612, 295}}";
+						};
+						Tab4 = {
+							Frame = "{{0, 0}, {612, 295}}";
+						};
+						TabCount = 5;
+						TabsVisible = NO;
+					};
+					SplitCount = 1;
+					Tab0 = {
+						Frame = "{{0, 0}, {300, 533}}";
+						GroupTreeTableConfiguration = (
+							TargetStatusColumn,
+							18,
+							MainColumn,
+							267,
+						);
+					};
+					Tab1 = {
+						ClassesFrame = "{{0, 0}, {280, 398}}";
+						ClassesTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXClassColumnIdentifier,
+							237,
+						);
+						Frame = "{{0, 0}, {278, 659}}";
+						MembersFrame = "{{0, 407}, {280, 252}}";
+						MembersTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXMethodColumnIdentifier,
+							236,
+						);
+					};
+					Tab2 = {
+						Frame = "{{0, 0}, {200, 100}}";
+					};
+					Tab3 = {
+						Frame = "{{0, 0}, {200, 386}}";
+						TargetTableConfiguration = (
+							ActiveObject,
+							16,
+							ObjectNames,
+							202.296,
+						);
+					};
+					Tab4 = {
+						BreakpointsTreeTableConfiguration = (
+							breakpointColumn,
+							197,
+							enabledColumn,
+							31,
+						);
+						Frame = "{{0, 0}, {250, 386}}";
+					};
+					TabCount = 5;
+					TabsVisible = NO;
+				};
+				NavBarShownByDefault = YES;
+				StatusViewVisible = YES;
+				Template = F5534CB2020F3F8A0DCA290F;
+				ToolbarVisible = YES;
+				WindowLocation = "{72, 222}";
+			};
+			"PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = {
+				ContentSize = "{796, 742}";
+				LeftSlideOut = {
+					Collapsed = NO;
+					Frame = "{{0, 0}, {796, 742}}";
+					Split0 = {
 						Collapsed = NO;
-						Frame = "{{0, 0}, {665, 594}}";
+						Frame = "{{0, 0}, {796, 742}}";
 						Split0 = {
-							Frame = "{{0, 301}, {665, 293}}";
+							Frame = "{{0, 0}, {796, 742}}";
 						};
 						SplitCount = 1;
@@ -75,11 +329,11 @@
 						};
 						Tab3 = {
-							BuildMessageFrame = "{{0, 0}, {667, 265}}";
-							BuildTranscriptFrame = "{{0, 274}, {667, 2}}";
+							BuildMessageFrame = "{{0, 0}, {614, 262}}";
+							BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
 							BuildTranscriptFrameExpanded = YES;
-							Frame = "{{0, 0}, {665, 298}}";
+							Frame = "{{0, 0}, {612, 295}}";
 						};
 						Tab4 = {
-							Frame = "{{0, 0}, {665, 295}}";
+							Frame = "{{0, 0}, {612, 295}}";
 						};
 						TabCount = 5;
@@ -139,18 +393,20 @@
 				NavBarShownByDefault = YES;
 				StatusViewVisible = NO;
-				Template = F5CA7EC9015C08ED0DCA290F;
+				Template = F5CA7ECB015C094F0DCA290F;
 				ToolbarVisible = NO;
-				WindowLocation = "{385, 127}";
+				WindowLocation = "{687, 68}";
 			};
-			"PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = {
-				ContentSize = "{668, 621}";
+			"PBXTemplateGeometry-F5E465990156DFB90DCA290F" = {
+				ContentSize = "{352, 553}";
 				LeftSlideOut = {
-					Collapsed = NO;
-					Frame = "{{0, 0}, {668, 621}}";
+					ActiveTab = 0;
+					ActiveTabName = PBXGroupTreeModule;
+					Collapsed = YES;
+					Frame = "{{0, 23}, {352, 530}}";
 					Split0 = {
 						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
+						Frame = "{{1e+06, 1e+06}, {0, 530}}";
 						Split0 = {
-							Frame = "{{0, 0}, {668, 621}}";
+							Frame = "{{0, 0}, {0, 530}}";
 						};
 						SplitCount = 1;
@@ -214,39 +470,39 @@
 					SplitCount = 1;
 					Tab0 = {
-						Frame = "{{0, 0}, {313, 531}}";
+						Frame = "{{0, 0}, {328, 530}}";
 						GroupTreeTableConfiguration = (
 							TargetStatusColumn,
 							18,
 							MainColumn,
-							280,
+							295,
 						);
 					};
 					Tab1 = {
-						ClassesFrame = "{{0, 0}, {280, 398}}";
+						ClassesFrame = "{{0, 0}, {343, 348}}";
 						ClassesTreeTableConfiguration = (
 							PBXBookColumnIdentifier,
 							20,
 							PBXClassColumnIdentifier,
-							237,
-						);
-						Frame = "{{0, 0}, {278, 659}}";
-						MembersFrame = "{{0, 407}, {280, 252}}";
+							300,
+						);
+						Frame = "{{0, 0}, {341, 578}}";
+						MembersFrame = "{{0, 357}, {343, 221}}";
 						MembersTreeTableConfiguration = (
 							PBXBookColumnIdentifier,
 							20,
 							PBXMethodColumnIdentifier,
-							236,
+							299,
 						);
 					};
 					Tab2 = {
-						Frame = "{{0, 0}, {200, 100}}";
+						Frame = "{{0, 0}, {319, 576}}";
 					};
 					Tab3 = {
-						Frame = "{{0, 0}, {200, 557}}";
+						Frame = "{{0, 0}, {341, 578}}";
 						TargetTableConfiguration = (
 							ActiveObject,
 							16,
 							ObjectNames,
-							202.296,
+							308.296,
 						);
 					};
@@ -254,18 +510,18 @@
 						BreakpointsTreeTableConfiguration = (
 							breakpointColumn,
-							197,
+							266,
 							enabledColumn,
 							31,
 						);
-						Frame = "{{0, 0}, {250, 100}}";
+						Frame = "{{0, 0}, {319, 576}}";
 					};
 					TabCount = 5;
-					TabsVisible = NO;
+					TabsVisible = YES;
 				};
 				NavBarShownByDefault = YES;
-				StatusViewVisible = NO;
-				Template = F5CA7ECB015C094F0DCA290F;
-				ToolbarVisible = NO;
-				WindowLocation = "{153, -158}";
+				StatusViewVisible = YES;
+				Template = F5E465990156DFB90DCA290F;
+				ToolbarVisible = YES;
+				WindowLocation = "{19, 217}";
 			};
 			PBXWorkspaceContents = (
@@ -274,49 +530,42 @@
 						Split0 = {
 							Split0 = {
+								NavContent0 = {
+									bookmark = E16C83ED03F83AD700050002;
+									history = (
+										E16C83D103F83AD700050002,
+										E16C83D203F83AD700050002,
+										E16C83D303F83AD700050002,
+										E16C83D403F83AD700050002,
+										E16C83D503F83AD700050002,
+										E16C83D603F83AD700050002,
+										E16C83D703F83AD700050002,
+										E16C83D803F83AD700050002,
+										E16C83D903F83AD700050002,
+										E16C83DA03F83AD700050002,
+										E16C83DB03F83AD700050002,
+										E16C83DC03F83AD700050002,
+										E16C83DD03F83AD700050002,
+										E16C83DE03F83AD700050002,
+										E16C83DF03F83AD700050002,
+										E16C83E003F83AD700050002,
+									);
+									prevStack = (
+										E16C83E103F83AD700050002,
+										E16C83E203F83AD700050002,
+										E16C83E303F83AD700050002,
+										E16C83E403F83AD700050002,
+										E16C83E503F83AD700050002,
+										E16C83E603F83AD700050002,
+										E16C83E703F83AD700050002,
+										E16C83E803F83AD700050002,
+										E16C83E903F83AD700050002,
+										E16C83EA03F83AD700050002,
+										E16C83EB03F83AD700050002,
+										E16C83EC03F83AD700050002,
+									);
+								};
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {150, 530}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6B703EFD28400050001;
-									history = (
-										E1A0C6B603EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {796, 958}}";
+									Frame = "{{0, 0}, {729, 633}}";
 									NavBarVisible = YES;
 								};
@@ -384,319 +633,31 @@
 					};
 				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {594, 150}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6B903EFD28400050001;
-									history = (
-										E1A0C6B803EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6BB03EFD28400050001;
-									history = (
-										E1A0C6BA03EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6BD03EFD28400050001;
-									history = (
-										E1A0C6BC03EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6BF03EFD28400050001;
-									history = (
-										E1A0C6BE03EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6C103EFD28400050001;
-									history = (
-										E1A0C6C003EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E1A0C6C303EFD28400050001;
-									history = (
-										E1A0C6C203EFD28400050001,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {668, 621}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
 			);
 			PBXWorkspaceGeometries = (
 				{
-					ContentSize = "{352, 553}";
+					ContentSize = "{1018, 656}";
 					LeftSlideOut = {
 						ActiveTab = 0;
 						ActiveTabName = PBXGroupTreeModule;
-						Collapsed = YES;
-						Frame = "{{0, 23}, {352, 530}}";
+						Collapsed = NO;
+						Frame = "{{0, 23}, {1018, 633}}";
 						Split0 = {
 							Collapsed = NO;
-							Frame = "{{1e+06, 1e+06}, {0, 530}}";
+							Frame = "{{289, 0}, {729, 633}}";
 							Split0 = {
-								Frame = "{{0, 0}, {0, 530}}";
+								Frame = "{{0, 0}, {729, 633}}";
 							};
 							SplitCount = 1;
 							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
+								Frame = "{{0, 0}, {681, 289}}";
 							};
 							Tab1 = {
 								Debugger = {
 									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
+									Frame = "{{0, 0}, {681, 150}}";
 									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
+										Frame = "{{0, 24}, {681, 126}}";
 										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
+											Frame = "{{0, 0}, {333, 126}}";
 										};
 										Split1 = {
@@ -707,7 +668,7 @@
 												85,
 												Summary,
-												96.123,
+												105.123,
 											);
-											Frame = "{{334, 0}, {330, 184}}";
+											Frame = "{{342, 0}, {339, 126}}";
 										};
 										SplitCount = 2;
@@ -723,19 +684,19 @@
 									TabsVisible = YES;
 								};
-								Frame = "{{0, 0}, {664, 208}}";
+								Frame = "{{0, 0}, {681, 120}}";
 								LauncherConfigVersion = 7;
 							};
 							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
+								Frame = "{{0, 0}, {681, 234}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
+									Frame = "{{0, 0}, {681, 234}}";
 								};
 							};
 							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+								BuildMessageFrame = "{{0, 0}, {683, 205}}";
+								BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
 								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
+								Frame = "{{0, 0}, {681, 238}}";
 							};
 							Tab4 = {
@@ -747,165 +708,39 @@
 						SplitCount = 1;
 						Tab0 = {
-							Frame = "{{0, 0}, {328, 530}}";
+							Frame = "{{0, 0}, {265, 633}}";
 							GroupTreeTableConfiguration = (
 								TargetStatusColumn,
 								18,
 								MainColumn,
-								295,
+								232,
 							);
 						};
 						Tab1 = {
-							ClassesFrame = "{{0, 0}, {343, 348}}";
+							ClassesFrame = "{{0, 0}, {250, 333}}";
 							ClassesTreeTableConfiguration = (
 								PBXBookColumnIdentifier,
 								20,
 								PBXClassColumnIdentifier,
-								300,
+								207,
 							);
-							Frame = "{{0, 0}, {341, 578}}";
-							MembersFrame = "{{0, 357}, {343, 221}}";
+							Frame = "{{0, 0}, {248, 554}}";
+							MembersFrame = "{{0, 342}, {250, 212}}";
 							MembersTreeTableConfiguration = (
 								PBXBookColumnIdentifier,
 								20,
 								PBXMethodColumnIdentifier,
-								299,
+								206,
 							);
 						};
 						Tab2 = {
-							Frame = "{{0, 0}, {319, 576}}";
+							Frame = "{{0, 0}, {217, 554}}";
 						};
 						Tab3 = {
-							Frame = "{{0, 0}, {341, 578}}";
+							Frame = "{{0, 0}, {239, 554}}";
 							TargetTableConfiguration = (
 								ActiveObject,
 								16,
 								ObjectNames,
-								308.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								266,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {319, 576}}";
-						};
-						TabCount = 5;
-						TabsVisible = YES;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = YES;
-					Template = F5E465990156DFB90DCA290F;
-					ToolbarVisible = YES;
-					WindowLocation = "{19, 553}";
-				},
-				{
-					ContentSize = "{796, 958}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {796, 958}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {796, 958}}";
-							Split0 = {
-								Frame = "{{0, 0}, {796, 958}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
+								206.296,
 							);
 						};
@@ -917,14 +752,14 @@
 								31,
 							);
-							Frame = "{{0, 0}, {250, 100}}";
+							Frame = "{{0, 0}, {250, 554}}";
 						};
 						TabCount = 5;
-						TabsVisible = NO;
+						TabsVisible = YES;
 					};
 					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{384, 193}";
+					StatusViewVisible = YES;
+					Template = 64ABBB4501FA494900185B06;
+					ToolbarVisible = YES;
+					WindowLocation = "{21, 114}";
 				},
 				{
@@ -1056,906 +891,37 @@
 					WindowLocation = "{819, 244}";
 				},
-				{
-					ContentSize = "{594, 303}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 23}, {594, 280}}";
-						Split0 = {
-							ActiveTab = 1;
-							ActiveTabName = PBXRunSessionModule;
-							Collapsed = YES;
-							Frame = "{{0, 0}, {594, 280}}";
-							Split0 = {
-								Frame = "{{1e+06, 1e+06}, {594, 27}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {804, 321}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {594, 274}}";
-									Split0 = {
-										Frame = "{{0, 24}, {594, 250}}";
-										Split0 = {
-											Frame = "{{0, 0}, {290, 250}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												62.123,
-											);
-											Frame = "{{299, 0}, {295, 250}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {594, 274}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {594, 274}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {594, 274}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {300, 533}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								267,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 386}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 386}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = YES;
-					Template = F5534CB2020F3F8A0DCA290F;
-					ToolbarVisible = YES;
-					WindowLocation = "{72, 222}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{545, 231}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{856, -60}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{772, 101}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{592, -173}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{861, 493}";
-				},
-				{
-					ContentSize = "{668, 621}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{0, 0}, {668, 621}}";
-							Split0 = {
-								Frame = "{{0, 0}, {668, 621}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {484, 208}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {664, 208}}";
-									Split0 = {
-										Frame = "{{0, 24}, {664, 184}}";
-										Split0 = {
-											Frame = "{{0, 0}, {325, 184}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												96.123,
-											);
-											Frame = "{{334, 0}, {330, 184}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {664, 208}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {664, 50}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {664, 50}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {313, 531}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								280,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 557}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 100}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = NO;
-					Template = F5CA7ECB015C094F0DCA290F;
-					ToolbarVisible = NO;
-					WindowLocation = "{914, 13}";
-				},
 			);
-			PBXWorkspaceStateSaveDate = 66039068;
+			PBXWorkspaceStateSaveDate = 66554412;
 		};
 		perUserProjectItems = {
-			E1A0C6B603EFD28400050001 = E1A0C6B603EFD28400050001;
-			E1A0C6B703EFD28400050001 = E1A0C6B703EFD28400050001;
-			E1A0C6B803EFD28400050001 = E1A0C6B803EFD28400050001;
-			E1A0C6B903EFD28400050001 = E1A0C6B903EFD28400050001;
-			E1A0C6BA03EFD28400050001 = E1A0C6BA03EFD28400050001;
-			E1A0C6BB03EFD28400050001 = E1A0C6BB03EFD28400050001;
-			E1A0C6BC03EFD28400050001 = E1A0C6BC03EFD28400050001;
-			E1A0C6BD03EFD28400050001 = E1A0C6BD03EFD28400050001;
-			E1A0C6BE03EFD28400050001 = E1A0C6BE03EFD28400050001;
-			E1A0C6BF03EFD28400050001 = E1A0C6BF03EFD28400050001;
-			E1A0C6C003EFD28400050001 = E1A0C6C003EFD28400050001;
-			E1A0C6C103EFD28400050001 = E1A0C6C103EFD28400050001;
-			E1A0C6C203EFD28400050001 = E1A0C6C203EFD28400050001;
-			E1A0C6C303EFD28400050001 = E1A0C6C303EFD28400050001;
+			E16C83D103F83AD700050002 = E16C83D103F83AD700050002;
+			E16C83D203F83AD700050002 = E16C83D203F83AD700050002;
+			E16C83D303F83AD700050002 = E16C83D303F83AD700050002;
+			E16C83D403F83AD700050002 = E16C83D403F83AD700050002;
+			E16C83D503F83AD700050002 = E16C83D503F83AD700050002;
+			E16C83D603F83AD700050002 = E16C83D603F83AD700050002;
+			E16C83D703F83AD700050002 = E16C83D703F83AD700050002;
+			E16C83D803F83AD700050002 = E16C83D803F83AD700050002;
+			E16C83D903F83AD700050002 = E16C83D903F83AD700050002;
+			E16C83DA03F83AD700050002 = E16C83DA03F83AD700050002;
+			E16C83DB03F83AD700050002 = E16C83DB03F83AD700050002;
+			E16C83DC03F83AD700050002 = E16C83DC03F83AD700050002;
+			E16C83DD03F83AD700050002 = E16C83DD03F83AD700050002;
+			E16C83DE03F83AD700050002 = E16C83DE03F83AD700050002;
+			E16C83DF03F83AD700050002 = E16C83DF03F83AD700050002;
+			E16C83E003F83AD700050002 = E16C83E003F83AD700050002;
+			E16C83E103F83AD700050002 = E16C83E103F83AD700050002;
+			E16C83E203F83AD700050002 = E16C83E203F83AD700050002;
+			E16C83E303F83AD700050002 = E16C83E303F83AD700050002;
+			E16C83E403F83AD700050002 = E16C83E403F83AD700050002;
+			E16C83E503F83AD700050002 = E16C83E503F83AD700050002;
+			E16C83E603F83AD700050002 = E16C83E603F83AD700050002;
+			E16C83E703F83AD700050002 = E16C83E703F83AD700050002;
+			E16C83E803F83AD700050002 = E16C83E803F83AD700050002;
+			E16C83E903F83AD700050002 = E16C83E903F83AD700050002;
+			E16C83EA03F83AD700050002 = E16C83EA03F83AD700050002;
+			E16C83EB03F83AD700050002 = E16C83EB03F83AD700050002;
+			E16C83EC03F83AD700050002 = E16C83EC03F83AD700050002;
+			E16C83ED03F83AD700050002 = E16C83ED03F83AD700050002;
 		};
 		projectwideBuildSettings = {
@@ -1969,4 +935,366 @@
 			E1A0BD2C03EFAD1C00050001,
 		);
+	};
+	E16C83D103F83AD700050002 = {
+		fRef = E16C83EF03F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "CoreGraphics.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1102;
+		vrLoc = 0;
+	};
+	E16C83D203F83AD700050002 = {
+		fRef = E16C83F003F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "CGBase.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 712;
+		vrLoc = 0;
+	};
+	E16C83D303F83AD700050002 = {
+		fRef = E16C83F203F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "CGError.h: 21";
+		rLen = 23;
+		rLoc = 382;
+		rType = 0;
+		vrLen = 1002;
+		vrLoc = 0;
+	};
+	E16C83D403F83AD700050002 = {
+		fRef = E16C83F303F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "Processes.h: 48";
+		rLen = 15;
+		rLoc = 1115;
+		rType = 0;
+		vrLen = 1032;
+		vrLoc = 546;
+	};
+	E16C83D503F83AD700050002 = {
+		fRef = E16C83F403F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "MacErrors.h: 1476";
+		rLen = 3;
+		rLoc = 82842;
+		rType = 0;
+		vrLen = 1637;
+		vrLoc = 82130;
+	};
+	E16C83D603F83AD700050002 = {
+		fRef = E16C83F103F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "Quickdraw.h: 1974";
+		rLen = 105;
+		rLoc = 71385;
+		rType = 0;
+		vrLen = 1086;
+		vrLoc = 70825;
+	};
+	E16C83D703F83AD700050002 = {
+		fRef = E16C83F503F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "types.h: 102";
+		rLen = 42;
+		rLoc = 4351;
+		rType = 0;
+		vrLen = 1301;
+		vrLoc = 3647;
+	};
+	E16C83D803F83AD700050002 = {
+		fRef = E16C83F603F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "OpenTransportProtocol.h: 799";
+		rLen = 50;
+		rLoc = 35039;
+		rType = 0;
+		vrLen = 1534;
+		vrLoc = 34260;
+	};
+	E16C83D903F83AD700050002 = {
+		fRef = E16C83F703F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "stdio.h: 279";
+		rLen = 47;
+		rLoc = 10453;
+		rType = 0;
+		vrLen = 1370;
+		vrLoc = 9757;
+	};
+	E16C83DA03F83AD700050002 = {
+		fRef = E16C83F803F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "NSURL.h: 1";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 1617;
+		vrLoc = 856;
+	};
+	E16C83DB03F83AD700050002 = {
+		fRef = E16C83F903F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "NSFileManager.h: 7";
+		rLen = 0;
+		rLoc = 165;
+		rType = 0;
+		vrLen = 1400;
+		vrLoc = 0;
+	};
+	E16C83DC03F83AD700050002 = {
+		fRef = E1A0BD3203EFAD9E00050001;
+		isa = PBXTextBookmark;
+		name = "CPS.h: 281";
+		rLen = 0;
+		rLoc = 4865;
+		rType = 0;
+		vrLen = 1136;
+		vrLoc = 4090;
+	};
+	E16C83DD03F83AD700050002 = {
+		fRef = E16C83EE03F83AD700050002;
+		isa = PBXTextBookmark;
+		name = "unistd.h: 132";
+		rLen = 41;
+		rLoc = 5271;
+		rType = 0;
+		vrLen = 1423;
+		vrLoc = 4595;
+	};
+	E16C83DE03F83AD700050002 = {
+		fRef = E16C83CC03F7AF7B00050002;
+		isa = PBXTextBookmark;
+		name = "README: 34";
+		rLen = 56;
+		rLoc = 1201;
+		rType = 0;
+		vrLen = 1412;
+		vrLoc = 0;
+	};
+	E16C83DF03F83AD700050002 = {
+		fRef = C6859E970290921104C91782;
+		isa = PBXTextBookmark;
+		name = "appswitch.1: 110";
+		rLen = 0;
+		rLoc = 4118;
+		rType = 0;
+		vrLen = 1732;
+		vrLoc = 2592;
+	};
+	E16C83E003F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: 117";
+		rLen = 0;
+		rLoc = 4782;
+		rType = 0;
+		vrLen = 1813;
+		vrLoc = 0;
+	};
+	E16C83E103F83AD700050002 = {
+		fRef = E1A0BD3203EFAD9E00050001;
+		isa = PBXTextBookmark;
+		name = "CPS.h: 273";
+		rLen = 0;
+		rLoc = 4618;
+		rType = 0;
+		vrLen = 1089;
+		vrLoc = 4030;
+	};
+	E16C83E203F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: __VERSION__";
+		rLen = 0;
+		rLoc = 0;
+		rType = 0;
+		vrLen = 861;
+		vrLoc = 1740;
+	};
+	E16C83E303F83AD700050002 = {
+		fRef = E1A0BD3203EFAD9E00050001;
+		isa = PBXTextBookmark;
+		name = "CPS.h: CPSPostShowAllReq";
+		rLen = 17;
+		rLoc = 4768;
+		rType = 0;
+		vrLen = 1057;
+		vrLoc = 3979;
+	};
+	E16C83E403F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: main";
+		rLen = 0;
+		rLoc = 12674;
+		rType = 0;
+		vrLen = 1650;
+		vrLoc = 10700;
+	};
+	E16C83E503F83AD700050002 = {
+		fRef = E1A0BD3203EFAD9E00050001;
+		isa = PBXTextBookmark;
+		name = "CPS.h: 80";
+		rLen = 0;
+		rLoc = 1183;
+		rType = 0;
+		vrLen = 810;
+		vrLoc = 825;
+	};
+	E16C83E603F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: matchApplication";
+		rLen = 0;
+		rLoc = 10201;
+		rType = 0;
+		vrLen = 1426;
+		vrLoc = 8916;
+	};
+	E16C83E703F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: 51";
+		rLen = 0;
+		rLoc = 2325;
+		rType = 0;
+		vrLen = 801;
+		vrLoc = 1590;
+	};
+	E16C83E803F83AD700050002 = {
+		fRef = E16C83CC03F7AF7B00050002;
+		isa = PBXTextBookmark;
+		name = "README: 35";
+		rLen = 0;
+		rLoc = 1258;
+		rType = 0;
+		vrLen = 1285;
+		vrLoc = 0;
+	};
+	E16C83E903F83AD700050002 = {
+		fRef = E1A0BD3203EFAD9E00050001;
+		isa = PBXTextBookmark;
+		name = "CPS.h: 80";
+		rLen = 0;
+		rLoc = 1183;
+		rType = 0;
+		vrLen = 832;
+		vrLoc = 741;
+	};
+	E16C83EA03F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: 117";
+		rLen = 0;
+		rLoc = 4782;
+		rType = 0;
+		vrLen = 1813;
+		vrLoc = 0;
+	};
+	E16C83EB03F83AD700050002 = {
+		fRef = E16C83CC03F7AF7B00050002;
+		isa = PBXTextBookmark;
+		name = "README: 34";
+		rLen = 56;
+		rLoc = 1201;
+		rType = 0;
+		vrLen = 1412;
+		vrLoc = 0;
+	};
+	E16C83EC03F83AD700050002 = {
+		fRef = C6859E970290921104C91782;
+		isa = PBXTextBookmark;
+		name = "appswitch.1: 110";
+		rLen = 0;
+		rLoc = 4118;
+		rType = 0;
+		vrLen = 1732;
+		vrLoc = 2592;
+	};
+	E16C83ED03F83AD700050002 = {
+		fRef = 08FB7796FE84155DC02AAC07;
+		isa = PBXTextBookmark;
+		name = "main.c: 18";
+		rLen = 0;
+		rLoc = 1589;
+		rType = 0;
+		vrLen = 1813;
+		vrLoc = 0;
+	};
+	E16C83EE03F83AD700050002 = {
+		isa = PBXFileReference;
+		name = unistd.h;
+		path = /usr/include/unistd.h;
+		refType = 0;
+	};
+	E16C83EF03F83AD700050002 = {
+		isa = PBXFileReference;
+		name = CoreGraphics.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Headers/CoreGraphics.h;
+		refType = 0;
+	};
+	E16C83F003F83AD700050002 = {
+		isa = PBXFileReference;
+		name = CGBase.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Headers/CGBase.h;
+		refType = 0;
+	};
+	E16C83F103F83AD700050002 = {
+		isa = PBXFileReference;
+		name = Quickdraw.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/Headers/Quickdraw.h;
+		refType = 0;
+	};
+	E16C83F203F83AD700050002 = {
+		isa = PBXFileReference;
+		name = CGError.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Headers/CGError.h;
+		refType = 0;
+	};
+	E16C83F303F83AD700050002 = {
+		isa = PBXFileReference;
+		name = Processes.h;
+		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Headers/Processes.h;
+		refType = 0;
+	};
+	E16C83F403F83AD700050002 = {
+		isa = PBXFileReference;
+		name = MacErrors.h;
+		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h;
+		refType = 0;
+	};
+	E16C83F503F83AD700050002 = {
+		isa = PBXFileReference;
+		name = types.h;
+		path = /usr/include/sys/types.h;
+		refType = 0;
+	};
+	E16C83F603F83AD700050002 = {
+		isa = PBXFileReference;
+		name = OpenTransportProtocol.h;
+		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/OpenTransportProtocol.h;
+		refType = 0;
+	};
+	E16C83F703F83AD700050002 = {
+		isa = PBXFileReference;
+		name = stdio.h;
+		path = /usr/include/stdio.h;
+		refType = 0;
+	};
+	E16C83F803F83AD700050002 = {
+		isa = PBXFileReference;
+		name = NSURL.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSURL.h;
+		refType = 0;
+	};
+	E16C83F903F83AD700050002 = {
+		isa = PBXFileReference;
+		name = NSFileManager.h;
+		path = /System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSFileManager.h;
+		refType = 0;
 	};
 	E1A0BD2C03EFAD1C00050001 = {
@@ -1990,185 +1318,3 @@
 		);
 	};
-	E1A0C6B603EFD28400050001 = {
-		fRef = 08FB7796FE84155DC02AAC07;
-		isa = PBXTextBookmark;
-		rLen = 0;
-		rLoc = 3;
-		rType = 1;
-	};
-	E1A0C6B703EFD28400050001 = {
-		fRef = 08FB7796FE84155DC02AAC07;
-		isa = PBXTextBookmark;
-		name = "main.c: 18";
-		rLen = 0;
-		rLoc = 1589;
-		rType = 0;
-		vrLen = 2506;
-		vrLoc = 0;
-	};
-	E1A0C6B803EFD28400050001 = {
-		fRef = E1A0C6CC03EFD28400050001;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 279;
-		rType = 1;
-	};
-	E1A0C6B903EFD28400050001 = {
-		fRef = E1A0C6CD03EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "stdio.h: 280";
-		rLen = 52;
-		rLoc = 10500;
-		rType = 0;
-		vrLen = 1492;
-		vrLoc = 9730;
-	};
-	E1A0C6BA03EFD28400050001 = {
-		fRef = E1A0BD3203EFAD9E00050001;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 82;
-		rType = 1;
-	};
-	E1A0C6BB03EFD28400050001 = {
-		fRef = E1A0BD3203EFAD9E00050001;
-		isa = PBXTextBookmark;
-		name = "CPS.h: CPSProcessInfoRec";
-		rLen = 24;
-		rLoc = 1169;
-		rType = 0;
-		vrLen = 868;
-		vrLoc = 709;
-	};
-	E1A0C6BC03EFD28400050001 = {
-		fRef = E1A0C6C403EFD28400050001;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 475;
-		rType = 1;
-	};
-	E1A0C6BD03EFD28400050001 = {
-		fRef = E1A0C6C503EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "MacErrors.h: 476";
-		rLen = 90;
-		rLoc = 27406;
-		rType = 0;
-		vrLen = 2270;
-		vrLoc = 26629;
-	};
-	E1A0C6BE03EFD28400050001 = {
-		fRef = E1A0C6C603EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "CFBundle.h: 69";
-		rLen = 14;
-		rLoc = 2476;
-		rType = 0;
-		vrLen = 1603;
-		vrLoc = 1784;
-	};
-	E1A0C6BF03EFD28400050001 = {
-		fRef = E1A0C6C703EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "CFBundle.h: 99";
-		rLen = 21;
-		rLoc = 3643;
-		rType = 0;
-		vrLen = 1781;
-		vrLoc = 464;
-	};
-	E1A0C6C003EFD28400050001 = {
-		fRef = E1A0C6C803EFD28400050001;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 19;
-		rType = 1;
-	};
-	E1A0C6C103EFD28400050001 = {
-		fRef = E1A0C6C903EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "CFURL.h: 67";
-		rLen = 39;
-		rLoc = 2911;
-		rType = 0;
-		vrLen = 2117;
-		vrLoc = 1928;
-	};
-	E1A0C6C203EFD28400050001 = {
-		fRef = E1A0C6CA03EFD28400050001;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 108;
-		rType = 1;
-	};
-	E1A0C6C303EFD28400050001 = {
-		fRef = E1A0C6CB03EFD28400050001;
-		isa = PBXTextBookmark;
-		name = "CFBase.h: 129";
-		rLen = 17;
-		rLoc = 3403;
-		rType = 0;
-		vrLen = 1107;
-		vrLoc = 2900;
-	};
-	E1A0C6C403EFD28400050001 = {
-		isa = PBXFileReference;
-		name = MacErrors.h;
-		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h;
-		refType = 0;
-	};
-	E1A0C6C503EFD28400050001 = {
-		isa = PBXFileReference;
-		name = MacErrors.h;
-		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h;
-		refType = 0;
-	};
-	E1A0C6C603EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFBundle.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBundle.h;
-		refType = 0;
-	};
-	E1A0C6C703EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFBundle.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBundle.h;
-		refType = 0;
-	};
-	E1A0C6C803EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFURL.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFURL.h;
-		refType = 0;
-	};
-	E1A0C6C903EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFURL.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFURL.h;
-		refType = 0;
-	};
-	E1A0C6CA03EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFBase.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBase.h;
-		refType = 0;
-	};
-	E1A0C6CB03EFD28400050001 = {
-		isa = PBXFileReference;
-		name = CFBase.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBase.h;
-		refType = 0;
-	};
-	E1A0C6CC03EFD28400050001 = {
-		isa = PBXFileReference;
-		name = stdio.h;
-		path = /usr/include/stdio.h;
-		refType = 0;
-	};
-	E1A0C6CD03EFD28400050001 = {
-		isa = PBXFileReference;
-		name = stdio.h;
-		path = /usr/include/stdio.h;
-		refType = 0;
-	};
 }
Index: /trunk/appswitch/appswitch.pbproj/project.pbxproj
===================================================================
--- /trunk/appswitch/appswitch.pbproj/project.pbxproj	(revision 90)
+++ /trunk/appswitch/appswitch.pbproj/project.pbxproj	(revision 91)
@@ -196,4 +196,5 @@
 			children = (
 				C6859E970290921104C91782,
+				E16C83CC03F7AF7B00050002,
 			);
 			isa = PBXGroup;
@@ -212,4 +213,5 @@
 			files = (
 				C6859E990290922B04C91782,
+				E16C83CD03F7AF7B00050002,
 			);
 			isa = PBXCopyFilesBuildPhase;
@@ -232,4 +234,16 @@
 //E13
 //E14
+		E16C83CC03F7AF7B00050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = README;
+			refType = 4;
+		};
+		E16C83CD03F7AF7B00050002 = {
+			fileRef = E16C83CC03F7AF7B00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
 		E1A0BD3203EFAD9E00050001 = {
 			fileEncoding = 30;
Index: /trunk/appswitch/main.c
===================================================================
--- /trunk/appswitch/main.c	(revision 90)
+++ /trunk/appswitch/main.c	(revision 91)
@@ -19,9 +19,10 @@
 
 #include <unistd.h>
+#include <sys/ioctl.h>
 #include "CPS.h"
 
 const char *APP_NAME;
 
-#define VERSION "1.0d1"
+#define VERSION "1.0b1"
 
 struct {
@@ -32,9 +33,18 @@
     char *path;
     enum {
-        MATCH_UNKNOWN, MATCH_CREATOR, MATCH_BUNDLE_ID, MATCH_NAME, MATCH_PID, MATCH_PATH
+        MATCH_UNKNOWN, MATCH_FRONT, MATCH_CREATOR, MATCH_BUNDLE_ID, MATCH_NAME, MATCH_PID, MATCH_PATH, MATCH_ALL
     } matchType;
+    enum {
+        APP_NONE, APP_SWITCH, APP_SHOW, APP_HIDE, APP_KILL, APP_LIST, APP_PRINT_PID
+    } appAction;
+    enum {
+        ACTION_NONE, ACTION_SHOW_ALL, ACTION_HIDE_OTHERS
+    } action;
+    enum {
+        FINAL_NONE, FINAL_SWITCH
+    } finalAction;
 } OPTS =
 {
-    kLSUnknownCreator, NULL, NULL, -1, NULL, MATCH_UNKNOWN
+    kLSUnknownCreator, NULL, NULL, -1, NULL, MATCH_UNKNOWN, APP_NONE, ACTION_NONE, FINAL_NONE
 };
 
@@ -55,9 +65,18 @@
 
 void usage() {
-    fprintf(stderr, "usage: %s [-c creator] [-i bundleID] [-a name] [-p pid] [path]\n"
+    fprintf(stderr, "usage: %s [-sShHkFlP] [-c creator] [-i bundleID] [-a name] [-p pid] [path]\n"
+            "  -s            show application, bring windows to front (do not switch)\n"
+            "  -S            show all applications\n"
+            "  -h            hide application\n"
+            "  -H            hide other applications\n"
+            "  -k            kill application\n"
+            "  -l            list applications\n"
+            "  -P            print application process ID\n"
+            "  -F            bring current application's windows to front\n"
             "  -c creator    match application by four-character creator code ('ToyS')\n"
             "  -i bundle ID  match application by bundle identifier (com.apple.scripteditor)\n"
             "  -p pid        match application by process identifier [slower]\n"
-            "  -a name       match application by name\n", APP_NAME);
+            "  -a name       match application by name\n"
+            , APP_NAME);
     fprintf(stderr, "appswitch "VERSION" (c) 2003 Nicholas Riley <http://web.sabi.net/nriley/software/>.\n"
             "Please send bugs, suggestions, etc. to <appswitch@sabi.net>.\n");
@@ -113,34 +132,65 @@
     if (argc == 1) usage();
 
-    const char *opts = "c:i:p:a:";
-    
-    ch = getopt(argc, argv, opts);
-
-    switch (ch) {
-        case 'p':
-            if (sscanf(optarg, "%d", &OPTS.pid) != 1 || OPTS.pid < 0)
-                errexit("invalid process identifier (argument of -p)");
-            OPTS.matchType = MATCH_PID;
-            break;
-        case 'c':
-            if (strlen(optarg) != 4) errexit("creator (argument of -c) must be four characters long");
-            OPTS.creator = *(OSTypePtr)optarg;
-            OPTS.matchType = MATCH_CREATOR;
-            break;
-        case 'i':
-            OPTS.bundleID = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding());
-            OPTS.matchType = MATCH_BUNDLE_ID;
-            break;
-        case 'a':
-            OPTS.name = strdup(optarg);
-            OPTS.matchType = MATCH_NAME;
-            break;
-        case -1:
-            break;
-        default: usage();
-    }
-
-    if (getopt(argc, argv, opts) != -1)
-        errexit("choose only one of -c, -i, -u, -p, -a options");
+    const char *opts = "c:i:p:a:sShHklPF";
+
+    while ( (ch = getopt(argc, argv, opts)) != -1) {
+        switch (ch) {
+            case 'p':
+                if (OPTS.matchType != MATCH_UNKNOWN) errexit("choose only one of -c, -i, -p, -a options");
+                if (sscanf(optarg, "%d", &OPTS.pid) != 1 || OPTS.pid < 0)
+                    errexit("invalid process identifier (argument of -p)");
+                OPTS.matchType = MATCH_PID;
+                break;
+            case 'c':
+                if (OPTS.matchType != MATCH_UNKNOWN) errexit("choose only one of -c, -i, -p, -a options");
+                if (strlen(optarg) != 4) errexit("creator (argument of -c) must be four characters long");
+                OPTS.creator = *(OSTypePtr)optarg;
+                OPTS.matchType = MATCH_CREATOR;
+                break;
+            case 'i':
+                if (OPTS.matchType != MATCH_UNKNOWN) errexit("choose only one of -c, -i, -p, -a options");
+                OPTS.bundleID = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding());
+                OPTS.matchType = MATCH_BUNDLE_ID;
+                break;
+            case 'a':
+                if (OPTS.matchType != MATCH_UNKNOWN) errexit("choose only one of -c, -i, -p, -a options");
+                OPTS.name = strdup(optarg);
+                OPTS.matchType = MATCH_NAME;
+                break;
+            case 's':
+                if (OPTS.appAction != APP_NONE) errexit("choose only one of -s, -h, -k, -l, -P options");
+                OPTS.appAction = APP_SHOW;
+                break;
+            case 'h':
+                if (OPTS.appAction != APP_NONE) errexit("choose only one of -s, -h, -k, -l, -P options");
+                OPTS.appAction = APP_HIDE;
+                break;
+            case 'k':
+                if (OPTS.appAction != APP_NONE) errexit("choose only one of -s, -h, -k, -l, -P options");
+                OPTS.appAction = APP_KILL;
+                break;
+            case 'l':
+                if (OPTS.appAction != APP_NONE) errexit("choose only one of -s, -h, -k, -l, -P options");
+                OPTS.appAction = APP_LIST;
+                break;
+            case 'P':
+                if (OPTS.appAction != APP_NONE) errexit("choose only one of -s, -h, -k, -l, -P options");
+                OPTS.appAction = APP_PRINT_PID;
+                break;
+            case 'S':
+                if (OPTS.action != ACTION_NONE) errexit("choose -S, -H or neither option");
+                OPTS.action = ACTION_SHOW_ALL;
+                break;
+            case 'H':
+                if (OPTS.action != ACTION_NONE) errexit("choose -S, -H or neither option");
+                OPTS.action = ACTION_HIDE_OTHERS;
+                break;
+            case 'F':
+                if (OPTS.finalAction != FINAL_NONE) errexit("choose only one -F option");
+                OPTS.finalAction = FINAL_SWITCH;
+                break;
+            default: usage();
+        }
+    }
 
     argc -= optind;
@@ -150,16 +200,32 @@
 
     if (OPTS.matchType == MATCH_UNKNOWN) {
-        if (argc != 1) usage();
-        OPTS.path = argv[0];
-        OPTS.matchType = MATCH_PATH;
-    }
-}
-
-int main (int argc, char * const argv[]) {
-    OSStatus err;
-
-    APP_NAME = argv[0];
-    getargs(argc, argv);
-    
+        if (argc == 0) {
+            if (OPTS.appAction == APP_LIST) {
+                OPTS.matchType = MATCH_ALL;
+            } else if (OPTS.action != ACTION_NONE || OPTS.finalAction != FINAL_NONE) {
+                OPTS.matchType = MATCH_FRONT;
+            } else usage();
+        } else if (argc == 1) {
+            OPTS.path = argv[0];
+            OPTS.matchType = MATCH_PATH;
+        } else usage();
+    }
+
+    if (OPTS.matchType != MATCH_FRONT && OPTS.appAction == APP_NONE)
+        OPTS.appAction = APP_SWITCH;
+
+}
+
+CPSProcessSerNum frontApplication() {
+    CPSProcessSerNum psn;
+    OSStatus err = CPSGetFrontProcess(&psn);
+    if (err != noErr) osstatusexit(err, "can't get frontmost process");
+#if DEBUG
+    fprintf(stderr, "front application PSN %ld.%ld\n", psn.hi, psn.lo);
+#endif
+    return psn;
+}
+
+CPSProcessSerNum matchApplication(CPSProcessInfoRec *info) {
     long pathMaxLength = pathconf("/", _PC_PATH_MAX);
     long nameMaxLength = pathconf("/", _PC_NAME_MAX);
@@ -170,14 +236,28 @@
     if (path == NULL || name == NULL) errexit("can't allocate memory for path or filename buffer");
 
-    // need to establish connection with window server
-    InitCursor();
-    
+    if (OPTS.matchType == MATCH_FRONT) return frontApplication();
+
+    OSStatus err;
     CPSProcessSerNum psn = {
         kNoProcess, kNoProcess
     };
-    CPSProcessInfoRec info;
     int len;
+    char *format = NULL;
+    if (OPTS.appAction == APP_LIST) {
+        int termwidth = 80;
+        struct winsize ws;
+        char *banner = "       PSN   PID TYPE CREA NAME                ";
+                     // 12345678.0 12345 1234 1234 12345678901234567890
+        printf("%s PATH\n", banner);
+        if ((ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&ws) != -1 ||
+             ioctl(STDERR_FILENO, TIOCGWINSZ, (char *)&ws) != -1 ||
+             ioctl(STDIN_FILENO,  TIOCGWINSZ, (char *)&ws) != -1) ||
+            ws.ws_col != 0) termwidth = ws.ws_col;
+        int pathlen = termwidth - strlen(banner) - 1;
+        asprintf(&format, "%%8ld.%%ld %%5ld %%c%%c%%c%%c %%c%%c%%c%%c %%-20.20s %%-%d.%ds\n", pathlen, pathlen);
+    }
+    
     while ( (err = CPSGetNextProcess(&psn)) == noErr) {
-        err = CPSGetProcessInfo(&psn, &info, path, pathMaxLength, &len, name, nameMaxLength);
+        err = CPSGetProcessInfo(&psn, info, path, pathMaxLength, &len, name, nameMaxLength);
         if (err != noErr) osstatusexit(err, "can't get information for process PSN %ld.%ld", psn.hi, psn.lo);
 
@@ -185,42 +265,107 @@
         fprintf(stderr, "%ld.%ld: %s : %s\n", psn.hi, psn.lo, name, path);
 #endif
-        
+
         switch (OPTS.matchType) {
-            case MATCH_UNKNOWN:
-                break;
-            case MATCH_CREATOR: if (OPTS.creator != info.ExecFileCreator) continue;
+            case MATCH_ALL:
+                break;
+            case MATCH_CREATOR: if (OPTS.creator != info->ExecFileCreator) continue;
                 break;
             case MATCH_NAME: if (strcmp(name, OPTS.name) != 0) continue;
                 break;
-            case MATCH_PID: if (OPTS.pid != info.UnixPID) continue;
+            case MATCH_PID: if (OPTS.pid != info->UnixPID) continue;
                 break;
             case MATCH_PATH: if (strcmp(path, OPTS.path) != 0) continue;
                 break;
             case MATCH_BUNDLE_ID:
-            {
-                CFURLRef url = CFURLCreateFromFileSystemRepresentation(NULL, path, strlen(path), false);
-                if (url == NULL) errexit("can't get bundle location for process '%s' (PSN %ld.%ld, pid %d)", name, psn.hi, psn.lo, info.UnixPID);
-                CFBundleRef bundle = CFBundleCreate(NULL, url);
-                if (bundle != NULL) {
-                    CFStringRef bundleID = CFBundleGetIdentifier(bundle);
+               {
+                   CFURLRef url = CFURLCreateFromFileSystemRepresentation(NULL, path, strlen(path), false);
+                   if (url == NULL) errexit("can't get bundle location for process '%s' (PSN %ld.%ld, pid %ld)", name, psn.hi, psn.lo, info->UnixPID);
+                   CFBundleRef bundle = CFBundleCreate(NULL, url);
+                   if (bundle != NULL) {
+                       CFStringRef bundleID = CFBundleGetIdentifier(bundle);
 #if DEBUG
-                    CFShow(bundleID);
+                       CFShow(bundleID);
 #endif
-                    if (bundleID != NULL && CFStringCompare(OPTS.bundleID, bundleID, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
-                        break;
-                }
-                CFRelease(url);
-                continue;
-            }
+                       if (bundleID != NULL && CFStringCompare(OPTS.bundleID, bundleID, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
+                           break;
+                   }
+                   CFRelease(url);
+                   continue;
+               }
             default:
-                errexit("unknown match type");
+                errexit("internal error: invalid match type");
         }
-        err = CPSSetFrontProcess(&psn);
-        if (err != noErr) osstatusexit(err, "can't set front process");
-        exit(0);
+        if (OPTS.appAction == APP_LIST) {
+            char *type = (char *)&(info->ExecFileType), *crea = (char *)&(info->ExecFileCreator);
+            printf(format, psn.hi, psn.lo, info->UnixPID,
+                   type[0], type[1], type[2], type[3],
+                   crea[0], crea[1], crea[2], crea[3],
+                   name, path);
+            continue;
+        }
+        return psn;
     }
     if (err != procNotFound) osstatusexit(err, "can't get next process");
 
+    if (OPTS.appAction == APP_LIST) return frontApplication();
+
     errexit("can't find matching process");
-    return 0;
-}
+    return psn;
+}
+
+int main (int argc, char * const argv[]) {
+    OSStatus err = noErr;
+
+    APP_NAME = argv[0];
+    getargs(argc, argv);
+
+    // need to establish connection with window server
+    InitCursor();
+
+    CPSProcessInfoRec info;
+    CPSProcessSerNum psn = matchApplication(&info);
+
+    const char *verb;
+    switch (OPTS.appAction) {
+        case APP_NONE: break;
+        case APP_LIST: break; // already handled in matchApplication
+        case APP_SWITCH: err = CPSSetFrontProcess(&psn); verb = "set front"; break;
+        case APP_SHOW: err = CPSPostShowReq(&psn); verb = "show"; break;
+        case APP_HIDE: err = CPSPostHideReq(&psn); verb = "hide"; break;
+        case APP_KILL: err = CPSPostKillRequest(&psn, kNilOptions); verb = "kill"; break;
+        case APP_PRINT_PID:
+            if (info.UnixPID <= 0) errexit("can't get process ID");
+            printf("%lu\n", info.UnixPID); // pid_t is signed, but this field isn't
+            break;
+        default:
+            errexit("internal error: invalid application action");
+    }
+    if (err != noErr) osstatusexit(err, "can't %s process", verb);
+
+    switch (OPTS.action) {
+        case ACTION_NONE: break;
+        case ACTION_SHOW_ALL: err = CPSPostShowAllReq(&psn); verb = "show all"; break;
+        case ACTION_HIDE_OTHERS: err = CPSPostHideMostReq(&psn); verb = "hide other"; break;
+        default:
+            errexit("internal error: invalid action");
+    }
+    if (err != noErr) osstatusexit(err, "can't %s processes", verb);
+
+    switch (OPTS.finalAction) {
+        case FINAL_NONE: break;
+        case FINAL_SWITCH:
+            psn = frontApplication();
+#if DEBUG
+            fprintf(stderr, "posting show request for %ld.%ld\n", psn.hi, psn.lo);
+#endif
+            if (OPTS.action != ACTION_NONE) usleep(750000); // XXX
+            err = CPSPostShowReq(&psn) || CPSSetFrontProcess(&psn);
+            verb = "bring current application's windows to the front";
+            break;
+        default:
+            errexit("internal error: invalid final action");    
+    }
+    if (err != noErr) osstatusexit(err, "can't %s", verb);
+
+    exit(0);
+}
Index: /trunk/appswitch/package-appswitch.sh
===================================================================
--- /trunk/appswitch/package-appswitch.sh	(revision 91)
+++ /trunk/appswitch/package-appswitch.sh	(revision 91)
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+set -x -v
+
+cd appswitch && \
+find . -name \*~ -exec rm '{}' \; && \
+pbxbuild && \ 
+SetFile -c 'R*ch' -t 'TEXT' README VERSION && \
+strip build/appswitch && \
+sudo /usr/bin/install -c build/appswitch /usr/local/bin && \
+sudo /usr/bin/install -c appswitch.1 /usr/local/man/man1 && \
+rm -rf build/appswitch.build build/intermediates build/.gdb_history && \
+VERSION=`cat VERSION` TARBALL="appswitch-$VERSION.tar.gz" && \
+DMG="appswitch-$VERSION.dmg" VOL="appswitch $VERSION" MOUNTPOINT="/Volumes/$VOL" && \
+cd .. && \
+rm -f appswitch-$VERSION $TARBALL $DMG && \
+ln -s appswitch appswitch-$VERSION && \
+tar --exclude=.DS_Store -zchf appswitch-$VERSION.tar.gz appswitch-$VERSION && \
+#hdiutil create $DMG -megabytes 5 -ov -type UDIF && \
+#DISK=`hdid $DMG | sed -ne ' /Apple_partition_scheme/ s|^/dev/\([^ ]*\).*$|\1|p'` && \
+#newfs_hfs -v "$VOL" /dev/r${DISK}s2 && \
+#hdiutil eject $DISK && \
+#hdid $DMG && \
+#ditto -rsrc launch "$MOUNTPOINT" && \
+#ditto -rsrc "InstallAnywhere/launch_Web_Installers/InstData/MacOSX/Install launch $VERSION.sit" "/Volumes/launch $VERSION" && \
+#launch "$MOUNTPOINT/Install launch $VERSION.sit" && \
+#./openUp "$MOUNTPOINT" && \
+#sleep 2 && \
+## hdiutil eject $DISK && \ # this doesn't work
+#osascript -e "tell application \"Finder\" to eject disk \"$VOL\"" && \
+#hdiutil convert $DMG -format UDZO -o z$DMG && \
+#mv z$DMG $DMG && \
+# scp $TARBALL ainaz:web/nriley/software/ #$DMG 
+:
