Index: /trunk/launch/launch/README
===================================================================
--- /trunk/launch/launch/README	(revision 165)
+++ /trunk/launch/launch/README	(revision 166)
@@ -1,4 +1,4 @@
-launch 1.0 [23 October 2003]
-==========
+launch 1.0.1 [3 April 2005]
+============
 
 A command-line launcher for Mac OS X in the spirit of open(1).
@@ -56,5 +56,5 @@
 Uninstallation:
 
-% sudo rm -f /usr/local/bin/launch /usr/local/man/man1/appswitch.1
+% sudo rm -f /usr/local/bin/launch /usr/local/man/man1/launch.1
 
 COMPILATION
@@ -63,6 +63,6 @@
 An Xcode/Project Builder project, 'launch.pbproj', is included.  A
 precompiled binary is also provided.  'launch' was developed and
-tested under Mac OS 10.3 with the October 2003 Developer Tools, and
-does not require any additional software to build.
+tested under Mac OS 10.3.8 with Xcode 1.5, and does not require any
+additional software to build.
 
 USAGE
@@ -202,6 +202,6 @@
 various system services owned by the currently logged-on user.  If you
 aren't using 'launch' from a terminal currently logged into the Mac OS
-X GUI, certain operations may not work.  Try opening Terminal.app,
-creating a new terminal, and trying again.
+X GUI, certain operations may not work.  Try opening Terminal, creating
+a new terminal window, and trying again.
 
 Another possibility is to create your own interprocess messaging.
@@ -237,4 +237,18 @@
 ---------------
 
+1.0.1 - 3 April 2005
+ - prefer files to URLs; added -U for old behavior
+ - don't display extraneous leading './' on file paths
+ - display 'zero items', not '0 items', for consistency
+ - display versions of non-applications
+ - read Info.plists embedded in unbundled Mach-O applications
+ - non-ASCII arguments are now handled with the filesystem, rather
+   than the system encoding [Derrick Bass]
+ - explicitly use UTF-8 everywhere else to properly interpret and
+   display non-ASCII filenames and URLs
+ - reading OSTypes and 'vers' resources, and opening URLs with
+   Internet Config still uses the system encoding, converting as
+   necessary for display
+ - should be buildable on 10.2 again
 1.0 - 23 October 2003
  - work around CFBundle bug to report bundle identifiers and versions
Index: /trunk/launch/launch/VERSION
===================================================================
--- /trunk/launch/launch/VERSION	(revision 165)
+++ /trunk/launch/launch/VERSION	(revision 166)
@@ -1,1 +1,1 @@
-1.0
+1.0.1
Index: /trunk/launch/launch/launch.1
===================================================================
--- /trunk/launch/launch/launch.1	(revision 165)
+++ /trunk/launch/launch/launch.1	(revision 166)
@@ -1,5 +1,5 @@
-.Dd Wed Oct 22 2003      \" DATE 
+.Dd Sun Apr 3 2005       \" DATE 
 .Dt LAUNCH 1 LOCAL	 \" Program name and manual section number 
-.Os launch 1.0
+.Os launch 1.0.1
 .Sh NAME
 .Nm launch
@@ -7,5 +7,5 @@
 .Sh SYNOPSIS
 .Nm launch
-.Op Fl npswbmhCX         \" [-npswbmhCX]
+.Op Fl npswbmhCXU        \" [-npswbmhCXU]
 .Op Fl c Ar creator      \" [-c creator]
 .Op Fl i Ar bundleID     \" [-i bundleID]
@@ -15,5 +15,5 @@
 .Op Ar -                 \" [-]
 .Nm 
-.Op Fl npflswbmhCX
+.Op Fl npflswbmhCXU
 .Ar item ...
 .Sh DESCRIPTION
@@ -99,4 +99,9 @@
 Don't start the Classic environment for this Classic application if
 Classic isn't running.
+.It Fl U
+Interpret items as URLs, even if files with the same names as the URLs
+exist.  (This was the default behavior in
+.Nm
+1.0.)
 .El
 .Sh SEE ALSO 
Index: /trunk/launch/launch/launch.pbproj/nicholas.mode1
===================================================================
--- /trunk/launch/launch/launch.pbproj/nicholas.mode1	(revision 166)
+++ /trunk/launch/launch/launch.pbproj/nicholas.mode1	(revision 166)
@@ -0,0 +1,1171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActivePerspectiveName</key>
+	<string>Project</string>
+	<key>AllowedModules</key>
+	<array>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXSmartGroupTreeModule</string>
+			<key>Name</key>
+			<string>Groups and Files Outline View</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXNavigatorGroup</string>
+			<key>Name</key>
+			<string>Editor</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCTaskListModule</string>
+			<key>Name</key>
+			<string>Task List</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDetailModule</string>
+			<key>Name</key>
+			<string>File and Smart Group Detail Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXBuildResultsModule</string>
+			<key>Name</key>
+			<string>Detailed Build Results Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXProjectFindModule</string>
+			<key>Name</key>
+			<string>Project Batch Find Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXRunSessionModule</string>
+			<key>Name</key>
+			<string>Run Log</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXBookmarksModule</string>
+			<key>Name</key>
+			<string>Bookmarks Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXClassBrowserModule</string>
+			<key>Name</key>
+			<string>Class Browser</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXCVSModule</string>
+			<key>Name</key>
+			<string>Source Code Control Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXDebugBreakpointsModule</string>
+			<key>Name</key>
+			<string>Debug Breakpoints Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDockableInspector</string>
+			<key>Name</key>
+			<string>Inspector</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXOpenQuicklyModule</string>
+			<key>Name</key>
+			<string>Open Quickly Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugSessionModule</string>
+			<key>Name</key>
+			<string>Debugger</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugCLIModule</string>
+			<key>Name</key>
+			<string>Debug Console</string>
+		</dict>
+	</array>
+	<key>Description</key>
+	<string>This workspace mimics that found in Xcode 1.2, with various minor improvements such as including attached editors to the build results window and the project find window.</string>
+	<key>DockingSystemVisible</key>
+	<false/>
+	<key>Extension</key>
+	<string>mode1</string>
+	<key>FirstTimeWindowDisplayed</key>
+	<false/>
+	<key>Identifier</key>
+	<string>com.apple.perspectives.project.mode1</string>
+	<key>MajorVersion</key>
+	<integer>31</integer>
+	<key>MinorVersion</key>
+	<integer>0</integer>
+	<key>Name</key>
+	<string>Default Workspace</string>
+	<key>Notifications</key>
+	<array>
+		<dict>
+			<key>XCObserverAutoDisconnectKey</key>
+			<true/>
+			<key>XCObserverDefintionKey</key>
+			<dict>
+				<key>PBXStatusErrorsKey</key>
+				<integer>0</integer>
+			</dict>
+			<key>XCObserverFactoryKey</key>
+			<string>XCPerspectivesSpecificationIdentifier</string>
+			<key>XCObserverGUIDKey</key>
+			<string>XCObserverProjectIdentifier</string>
+			<key>XCObserverNotificationKey</key>
+			<string>PBXStatusBuildStateMessageNotification</string>
+			<key>XCObserverTargetKey</key>
+			<string>XCMainBuildResultsModuleGUID</string>
+			<key>XCObserverTriggerKey</key>
+			<string>awakenModuleWithObserver:</string>
+			<key>XCObserverValidationKey</key>
+			<dict>
+				<key>PBXStatusErrorsKey</key>
+				<integer>2</integer>
+			</dict>
+		</dict>
+	</array>
+	<key>OpenEditors</key>
+	<array/>
+	<key>Perspectives</key>
+	<array>
+		<dict>
+			<key>ChosenToolbarItems</key>
+			<array>
+				<string>active-target-popup</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>buildOrClean</string>
+				<string>build-and-runOrDebug</string>
+				<string>com.apple.ide.PBXToolbarStopButton</string>
+				<string>get-info</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>com.apple.pbx.toolbar.searchfield</string>
+			</array>
+			<key>ControllerClassBaseName</key>
+			<string></string>
+			<key>IconName</key>
+			<string>WindowOfProject</string>
+			<key>Identifier</key>
+			<string>perspective.project</string>
+			<key>IsVertical</key>
+			<false/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>BecomeActive</key>
+					<true/>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXBottomSmartGroupGIDs</key>
+						<array>
+							<string>1C37FBAC04509CD000000102</string>
+							<string>1C37FAAC04509CD000000102</string>
+							<string>1C08E77C0454961000C914BD</string>
+							<string>1C37FABC05509CD000000102</string>
+							<string>1C37FABC05539CD112110102</string>
+							<string>E2644B35053B69B200211256</string>
+							<string>1C37FABC04509CD000100104</string>
+							<string>1CC0EA4004350EF90044410B</string>
+							<string>1CC0EA4004350EF90041110B</string>
+						</array>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CE0B1FE06471DED0097A5F4</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Files</string>
+						<key>PBXProjectStructureProvided</key>
+						<string>yes</string>
+						<key>PBXSmartGroupTreeModuleColumnData</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+							<array>
+								<real>22</real>
+								<real>178</real>
+							</array>
+							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+							<array>
+								<string>SCMStatusColumn</string>
+								<string>MainColumn</string>
+							</array>
+						</dict>
+						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+							<array>
+								<string>08FB7794FE84155DC02AAC07</string>
+								<string>08FB7795FE84155DC02AAC07</string>
+								<string>1C37FABC05509CD000000102</string>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+							<array>
+								<array>
+									<integer>2</integer>
+									<integer>1</integer>
+									<integer>0</integer>
+								</array>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+							<string>{{0, 0}, {200, 469}}</string>
+						</dict>
+						<key>PBXTopSmartGroupGIDs</key>
+						<array/>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {217, 487}}</string>
+						<key>GroupTreeTableConfiguration</key>
+						<array>
+							<string>SCMStatusColumn</string>
+							<real>22</real>
+							<string>MainColumn</string>
+							<real>178</real>
+						</array>
+						<key>RubberWindowFrame</key>
+						<string>8 232 697 508 0 0 1152 746 </string>
+					</dict>
+					<key>Module</key>
+					<string>PBXSmartGroupTreeModule</string>
+					<key>Proportion</key>
+					<string>217pt</string>
+				</dict>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CE0B20306471E060097A5F4</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>MyNewFile14.java</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CE0B20406471E060097A5F4</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>MyNewFile14.java</string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<false/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {474, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>8 232 697 508 0 0 1152 746 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CE0B20506471E060097A5F4</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Detail</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 7}, {474, 480}}</string>
+								<key>RubberWindowFrame</key>
+								<string>8 232 697 508 0 0 1152 746 </string>
+							</dict>
+							<key>Module</key>
+							<string>XCDetailModule</string>
+							<key>Proportion</key>
+							<string>480pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>474pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXSmartGroupTreeModule</string>
+				<string>XCModuleDock</string>
+				<string>PBXNavigatorGroup</string>
+				<string>XCDetailModule</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>E106FE530800B979005E16D3</string>
+				<string>1CE0B1FE06471DED0097A5F4</string>
+				<string>E106FE540800B979005E16D3</string>
+				<string>1CE0B20306471E060097A5F4</string>
+				<string>1CE0B20506471E060097A5F4</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.default</string>
+		</dict>
+	</array>
+	<key>PerspectivesBarVisible</key>
+	<false/>
+	<key>StatusbarIsVisible</key>
+	<false/>
+	<key>TimeStamp</key>
+	<real>134264568.95548201</real>
+	<key>ToolbarDisplayMode</key>
+	<integer>2</integer>
+	<key>ToolbarIsVisible</key>
+	<true/>
+	<key>ToolbarSizeMode</key>
+	<integer>2</integer>
+	<key>Type</key>
+	<string>Perspectives</string>
+	<key>UpdateMessage</key>
+	<string></string>
+	<key>WindowJustification</key>
+	<integer>5</integer>
+	<key>WindowOrderList</key>
+	<array>
+		<string>1C0AD2B3069F1EA900FABCE6</string>
+		<string>/Users/nicholas/Documents/Development/launch/launch/launch.pbproj</string>
+	</array>
+	<key>WindowString</key>
+	<string>8 232 697 508 0 0 1152 746 </string>
+	<key>WindowTools</key>
+	<array>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.build</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528F0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>main.c</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CD052900623707200166675</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>main.c</string>
+										<key>bookmark</key>
+										<string>E1F40A520800A6C9003CDFFA</string>
+										<key>history</key>
+										<array>
+											<string>E1F40A3208009E1D003CDFFA</string>
+										</array>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<true/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {638, 172}}</string>
+								<key>RubberWindowFrame</key>
+								<string>313 94 638 457 0 0 1152 746 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>172pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>XCMainBuildResultsModuleGUID</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Build</string>
+								<key>XCBuildResultsTrigger_Collapse</key>
+								<integer>1021</integer>
+								<key>XCBuildResultsTrigger_Open</key>
+								<integer>1012</integer>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 179}, {638, 236}}</string>
+								<key>RubberWindowFrame</key>
+								<string>313 94 638 457 0 0 1152 746 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXBuildResultsModule</string>
+							<key>Proportion</key>
+							<string>236pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>415pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Build Results</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXBuildResultsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>E14F8BF007066085000B9FBF</string>
+				<string>E1F4095E08006585003CDFFA</string>
+				<string>1CD0528F0623707200166675</string>
+				<string>XCMainBuildResultsModuleGUID</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.build</string>
+			<key>WindowString</key>
+			<string>313 94 638 457 0 0 1152 746 </string>
+			<key>WindowToolGUID</key>
+			<string>E14F8BF007066085000B9FBF</string>
+			<key>WindowToolIsVisible</key>
+			<true/>
+		</dict>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.debugger</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>Debugger</key>
+								<dict>
+									<key>HorizontalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {312, 164}}</string>
+											<string>{{312, 0}, {382, 164}}</string>
+										</array>
+									</dict>
+									<key>VerticalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {694, 164}}</string>
+											<string>{{0, 164}, {694, 216}}</string>
+										</array>
+									</dict>
+								</dict>
+								<key>LauncherConfigVersion</key>
+								<string>8</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C162984064C10D400B95A72</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Debug - GLUTExamples (Underwater)</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>DebugConsoleDrawerSize</key>
+								<string>{100, 120}</string>
+								<key>DebugConsoleVisible</key>
+								<string>None</string>
+								<key>DebugConsoleWindowFrame</key>
+								<string>{{200, 200}, {500, 300}}</string>
+								<key>DebugSTDIOWindowFrame</key>
+								<string>{{200, 200}, {500, 300}}</string>
+								<key>Frame</key>
+								<string>{{0, 0}, {694, 380}}</string>
+								<key>RubberWindowFrame</key>
+								<string>427 183 694 422 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugSessionModule</string>
+							<key>Proportion</key>
+							<string>380pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>380pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debugger</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugSessionModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1CD10A99069EF8BA00B06720</string>
+				<string>E14F91C707067F7A000B9FBF</string>
+				<string>1C162984064C10D400B95A72</string>
+				<string>E14F91C807067F7A000B9FBF</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.debug</string>
+			<key>WindowString</key>
+			<string>427 183 694 422 0 0 1280 832 </string>
+			<key>WindowToolGUID</key>
+			<string>1CD10A99069EF8BA00B06720</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.find</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Dock</key>
+							<array>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CDD528C0622207200134675</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>JVAppearancePreferences.m</string>
+										<key>PBXSplitModuleInNavigatorKey</key>
+										<dict>
+											<key>Split0</key>
+											<dict>
+												<key>PBXProjectModuleGUID</key>
+												<string>1CD0528D0623707200166675</string>
+												<key>PBXProjectModuleLabel</key>
+												<string>JVAppearancePreferences.m</string>
+												<key>bookmark</key>
+												<string>E14F91F107068327000B9FBF</string>
+												<key>history</key>
+												<array>
+													<string>E14F91EE07068327000B9FBF</string>
+													<string>E14F91EF07068327000B9FBF</string>
+												</array>
+												<key>prevStack</key>
+												<array>
+													<string>E14F91F007068327000B9FBF</string>
+												</array>
+											</dict>
+											<key>SplitCount</key>
+											<string>1</string>
+										</dict>
+										<key>StatusBarVisibility</key>
+										<false/>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{0, 0}, {781, 116}}</string>
+										<key>RubberWindowFrame</key>
+										<string>226 291 781 470 0 0 1280 832 </string>
+									</dict>
+									<key>Module</key>
+									<string>PBXNavigatorGroup</string>
+									<key>Proportion</key>
+									<string>781pt</string>
+								</dict>
+							</array>
+							<key>Proportion</key>
+							<string>116pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528E0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Project Find</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 123}, {781, 326}}</string>
+								<key>RubberWindowFrame</key>
+								<string>226 291 781 470 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXProjectFindModule</string>
+							<key>Proportion</key>
+							<string>326pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>449pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project Find</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXProjectFindModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<false/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C530D57069F1CE1000CFCEE</string>
+				<string>E14F91A5070668E8000B9FBF</string>
+				<string>E14F91A6070668E8000B9FBF</string>
+				<string>1CDD528C0622207200134675</string>
+				<string>1CD0528E0623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>226 291 781 470 0 0 1280 832 </string>
+			<key>WindowToolGUID</key>
+			<string>1C530D57069F1CE1000CFCEE</string>
+			<key>WindowToolIsVisible</key>
+			<true/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>MENUSEPARATOR</string>
+		</dict>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.debuggerConsole</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C78EAAC065D492600B07095</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Debugger Console</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {440, 358}}</string>
+								<key>RubberWindowFrame</key>
+								<string>448 182 440 400 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugCLIModule</string>
+							<key>Proportion</key>
+							<string>358pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>358pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debugger Console</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugCLIModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>E14F91CA07067F7A000B9FBF</string>
+				<string>E14F91CB07067F7A000B9FBF</string>
+				<string>1C78EAAC065D492600B07095</string>
+			</array>
+			<key>WindowString</key>
+			<string>448 182 440 400 0 0 1280 832 </string>
+			<key>WindowToolGUID</key>
+			<string>E14F91CA07067F7A000B9FBF</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.run</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>LauncherConfigVersion</key>
+								<string>3</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528B0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Run</string>
+								<key>Runner</key>
+								<dict>
+									<key>HorizontalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {491, 167}}</string>
+											<string>{{0, 176}, {491, 267}}</string>
+										</array>
+									</dict>
+									<key>VerticalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {405, 443}}</string>
+											<string>{{414, 0}, {514, 443}}</string>
+										</array>
+									</dict>
+								</dict>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {458, 143}}</string>
+								<key>RubberWindowFrame</key>
+								<string>285 301 458 185 0 0 1152 746 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXRunSessionModule</string>
+							<key>Proportion</key>
+							<string>143pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>143pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Run Log</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXRunSessionModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2B3069F1EA900FABCE6</string>
+				<string>E106FE550800B979005E16D3</string>
+				<string>1CD0528B0623707200166675</string>
+				<string>E106FE560800B979005E16D3</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.run</string>
+			<key>WindowString</key>
+			<string>285 301 458 185 0 0 1152 746 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2B3069F1EA900FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.scm</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C78EAB2065D492600B07095</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>&lt;No Editor&gt;</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1C78EAB3065D492600B07095</string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<true/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {452, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD052920623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>SCM</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ConsoleFrame</key>
+								<string>{{0, 259}, {452, 0}}</string>
+								<key>Frame</key>
+								<string>{{0, 7}, {452, 259}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+								<key>TableConfiguration</key>
+								<array>
+									<string>Status</string>
+									<real>30</real>
+									<string>FileName</string>
+									<real>199</real>
+									<string>Path</string>
+									<real>197.09500122070312</real>
+								</array>
+								<key>TableFrame</key>
+								<string>{{0, 0}, {452, 250}}</string>
+							</dict>
+							<key>Module</key>
+							<string>PBXCVSModule</string>
+							<key>Proportion</key>
+							<string>259pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>266pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>SCM</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXCVSModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EAB4065D492600B07095</string>
+				<string>1C78EAB5065D492600B07095</string>
+				<string>1C78EAB2065D492600B07095</string>
+				<string>1CD052920623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>743 379 452 308 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.breakpoints</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD052930623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Breakpoints</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>BreakpointsTreeTableConfiguration</key>
+								<array>
+									<string>enabledColumn</string>
+									<real>16</real>
+									<string>breakpointColumn</string>
+									<real>201.5830078125</real>
+								</array>
+								<key>Frame</key>
+								<string>{{0, 0}, {240, 195}}</string>
+								<key>RubberWindowFrame</key>
+								<string>342 421 240 216 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugBreakpointsModule</string>
+							<key>Proportion</key>
+							<string>195pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>195pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Breakpoints</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugBreakpointsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<false/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2AD069F1E9B00FABCE6</string>
+				<string>1C0AD2AE069F1E9B00FABCE6</string>
+				<string>1CD052930623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>342 421 240 216 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2AD069F1E9B00FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.bookmarks</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>PBXBookmarksModule</string>
+							<key>Proportion</key>
+							<string>166pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>166pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Bookmarks</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXBookmarksModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<false/>
+			<key>WindowString</key>
+			<string>538 42 401 187 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.classBrowser</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>OptionsSetName</key>
+								<string>Hierarchy, all classes</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CA6456E063B45B4001379D8</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Class Browser - NSObject</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ClassesFrame</key>
+								<string>{{0, 0}, {374, 96}}</string>
+								<key>ClassesTreeTableConfiguration</key>
+								<array>
+									<string>PBXClassNameColumnIdentifier</string>
+									<real>208</real>
+									<string>PBXClassBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>Frame</key>
+								<string>{{0, 0}, {630, 331}}</string>
+								<key>MembersFrame</key>
+								<string>{{0, 105}, {374, 395}}</string>
+								<key>MembersTreeTableConfiguration</key>
+								<array>
+									<string>PBXMemberTypeIconColumnIdentifier</string>
+									<real>22</real>
+									<string>PBXMemberNameColumnIdentifier</string>
+									<real>216</real>
+									<string>PBXMemberTypeColumnIdentifier</string>
+									<real>97</real>
+									<string>PBXMemberBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>PBXModuleWindowStatusBarHidden2</key>
+								<true/>
+								<key>RubberWindowFrame</key>
+								<string>385 179 630 352 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXClassBrowserModule</string>
+							<key>Proportion</key>
+							<string>331pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>331pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Class Browser</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXClassBrowserModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<false/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2AF069F1E9B00FABCE6</string>
+				<string>1C0AD2B0069F1E9B00FABCE6</string>
+				<string>1CA6456E063B45B4001379D8</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.classbrowser</string>
+			<key>WindowString</key>
+			<string>385 179 630 352 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2AF069F1E9B00FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+	</array>
+</dict>
+</plist>
Index: /trunk/launch/launch/launch.pbproj/nicholas.pbxuser
===================================================================
--- /trunk/launch/launch/launch.pbproj/nicholas.pbxuser	(revision 165)
+++ /trunk/launch/launch/launch.pbproj/nicholas.pbxuser	(revision 166)
@@ -47,7 +47,7 @@
 				PBXFileTableDataSourceColumnWidthsKey = (
 					20,
-					341,
+					236,
 					20,
-					65,
+					47,
 					43,
 					43,
@@ -76,5 +76,181 @@
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 88649579;
+			PBXPerProjectTemplateStateSaveDate = 134264568;
+			PBXPrepackagedSmartGroups_v2 = (
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					activationKey = OldTargetSmartGroup;
+					clz = PBXTargetSmartGroup;
+					description = "Displays all targets of the project.";
+					globalID = 1C37FABC04509CD000000102;
+					name = Targets;
+					preferences = {
+						image = Targets;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXTargetSmartGroup2;
+					description = "Displays all targets of the project as well as nested build phases.";
+					globalID = 1C37FBAC04509CD000000102;
+					name = Targets;
+					preferences = {
+						image = Targets;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXExecutablesSmartGroup;
+					description = "Displays all executables of the project.";
+					globalID = 1C37FAAC04509CD000000102;
+					name = Executables;
+					preferences = {
+						image = Executable;
+					};
+				},
+				{
+					" PBXTransientLocationAtTop " = bottom;
+					absolutePathToBundle = "";
+					clz = PBXErrorsWarningsSmartGroup;
+					description = "Displays files with errors or warnings.";
+					globalID = 1C08E77C0454961000C914BD;
+					name = "Errors and Warnings";
+					preferences = {
+						fnmatch = "";
+						image = WarningsErrors;
+						recursive = 1;
+						regex = "";
+						root = "<PROJECT>";
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXFilenameSmartGroup;
+					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
+					globalID = 1CC0EA4004350EF90044410B;
+					name = "Implementation Files";
+					preferences = {
+						canSave = 1;
+						fnmatch = "";
+						image = SmartFolder;
+						isLeaf = 0;
+						recursive = 1;
+						regex = "?*\\.[mcMC]";
+						root = "<PROJECT>";
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXFilenameSmartGroup;
+					description = "This group displays Interface Builder NIB Files.";
+					globalID = 1CC0EA4004350EF90041110B;
+					name = "NIB Files";
+					preferences = {
+						canSave = 1;
+						fnmatch = "*.nib";
+						image = SmartFolder;
+						isLeaf = 0;
+						recursive = 1;
+						regex = "";
+						root = "<PROJECT>";
+					};
+				},
+				{
+					PBXTransientLocationAtTop = no;
+					absolutePathToBundle = "";
+					clz = PBXFindSmartGroup;
+					description = "Displays Find Results.";
+					globalID = 1C37FABC05509CD000000102;
+					name = "Find Results";
+					preferences = {
+						image = spyglass;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = no;
+					absolutePathToBundle = "";
+					clz = PBXBookmarksSmartGroup;
+					description = "Displays Project Bookmarks.";
+					globalID = 1C37FABC05539CD112110102;
+					name = Bookmarks;
+					preferences = {
+						image = Bookmarks;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = XCSCMSmartGroup;
+					description = "Displays files with interesting SCM status.";
+					globalID = E2644B35053B69B200211256;
+					name = SCM;
+					preferences = {
+						image = PBXRepository;
+						isLeaf = 0;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXSymbolsSmartGroup;
+					description = "Displays all symbols for the project.";
+					globalID = 1C37FABC04509CD000100104;
+					name = "Project Symbols";
+					preferences = {
+						image = ProjectSymbols;
+						isLeaf = 1;
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXFilenameSmartGroup;
+					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
+					globalID = PBXTemplateMarker;
+					name = "Simple Filter SmartGroup";
+					preferences = {
+						canSave = 1;
+						fnmatch = "*.nib";
+						image = SmartFolder;
+						isLeaf = 0;
+						recursive = 1;
+						regex = "";
+						root = "<PROJECT>";
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					absolutePathToBundle = "";
+					clz = PBXFilenameSmartGroup;
+					description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
+					globalID = PBXTemplateMarker;
+					name = "Simple Regular Expression SmartGroup";
+					preferences = {
+						canSave = 1;
+						fnmatch = "";
+						image = SmartFolder;
+						isLeaf = 0;
+						recursive = 1;
+						regex = "?*\\.[mcMC]";
+						root = "<PROJECT>";
+					};
+				},
+				{
+					PBXTransientLocationAtTop = bottom;
+					clz = XDDesignSmartGroup;
+					description = "Displays Xdesign models";
+					globalID = 2E4A936305E6979E00701470;
+					name = Design;
+					preferences = {
+						image = Design;
+						isLeaf = 0;
+					};
+				},
+			);
 			PBXWorkspaceContents = (
 				{
@@ -83,8 +259,7 @@
 						PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
 							Split0 = {
-								bookmark = E1A087D20548746200594651;
+								bookmark = E12B212E0548BF6E00CFF4E9;
 								history = (
 									E1375C530530898300FE8BF8,
-									E103506B05355596002A18D1,
 									E11E9B8E0544EE7900045D4F,
 									E11E9B8F0544EE7900045D4F,
@@ -92,12 +267,8 @@
 									E1A087CE0548746200594651,
 									E1A087CF0548746200594651,
-									E1A087D00548746200594651,
-								);
-								nextStack = (
-									E1A087D10548746200594651,
+									E103506C05355596002A18D1,
 								);
 								prevStack = (
 									E1375C560530898300FE8BF8,
-									E103506C05355596002A18D1,
 								);
 							};
@@ -124,27 +295,4 @@
 					};
 				},
-				{
-					PBXProjectWorkspaceModule_StateKey_Rev36 = {
-						PBXProjectWorkspaceModule_EditorOpen = true;
-						PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
-							Split0 = {
-								bookmark = E1A087D40548746200594651;
-								history = (
-									E1A087D30548746200594651,
-								);
-							};
-							SplitCount = 1;
-						};
-						PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {600, 115}}";
-						PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 115}, {600, 186}}";
-						PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {600, 301}}";
-						PBXProjectWorkspaceModule_SGTM = {
-							PBXBottomSmartGroupGIDs = (
-							);
-							PBXTopSmartGroupGIDs = (
-							);
-						};
-					};
-				},
 			);
 			"PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
@@ -208,19 +356,4 @@
 					WindowFrame = "{{8, 70}, {775, 753}}";
 				},
-				{
-					Frame = "{{0, 0}, {600, 321}}";
-					PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
-						GroupTreeCollapsed = yes;
-						PBXProjectWorkspaceModule_SGTM_Geometry = {
-							_collapsingFrameDimension = 182;
-							_indexOfCollapsedView = 0;
-							_percentageOfCollapsedView = 0.3033333;
-							sizes = (
-								"{{0, 0}, {600, 301}}",
-							);
-						};
-					};
-					WindowFrame = "{{523, 63}, {600, 383}}";
-				},
 			);
 			"PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
@@ -277,21 +410,5 @@
 				WindowFrame = "{{723, 149}, {517, 249}}";
 			};
-			PBXWorkspaceStateSaveDate = 88649579;
-		};
-		perUserProjectItems = {
-			E103506B05355596002A18D1 = E103506B05355596002A18D1;
-			E103506C05355596002A18D1 = E103506C05355596002A18D1;
-			E11E9B8E0544EE7900045D4F = E11E9B8E0544EE7900045D4F;
-			E11E9B8F0544EE7900045D4F = E11E9B8F0544EE7900045D4F;
-			E1375C530530898300FE8BF8 = E1375C530530898300FE8BF8;
-			E1375C560530898300FE8BF8 = E1375C560530898300FE8BF8;
-			E1A087BB0548731500594651 = E1A087BB0548731500594651;
-			E1A087CE0548746200594651 = E1A087CE0548746200594651;
-			E1A087CF0548746200594651 = E1A087CF0548746200594651;
-			E1A087D00548746200594651 = E1A087D00548746200594651;
-			E1A087D10548746200594651 = E1A087D10548746200594651;
-			E1A087D20548746200594651 = E1A087D20548746200594651;
-			E1A087D30548746200594651 = E1A087D30548746200594651;
-			E1A087D40548746200594651 = E1A087D40548746200594651;
+			PBXWorkspaceStateSaveDate = 134264568;
 		};
 		sourceControlManager = E14C945E052A896100142529;
@@ -302,8 +419,8 @@
 	08FB7796FE84155DC02AAC07 = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {578, 13369}}";
-			sepNavSelRange = "{3507, 26}";
-			sepNavVisRect = "{{0, 996}, {578, 654}}";
-			sepNavWindowFrame = "{{265, 76}, {725, 703}}";
+			sepNavIntBoundsRect = "{{0, 0}, {740, 11507}}";
+			sepNavSelRange = "{29214, 0}";
+			sepNavVisRect = "{{0, 8530}, {740, 660}}";
+			sepNavWindowFrame = "{{15, 43}, {755, 698}}";
 		};
 	};
@@ -314,129 +431,20 @@
 		);
 	};
-	E103506B05355596002A18D1 = {
-		fRef = E1375C5D0530898300FE8BF8;
-		isa = PBXTextBookmark;
-		name = "LSOpen.h: 241";
-		rLen = 0;
-		rLoc = 8490;
-		rType = 0;
-		vrLen = 1029;
-		vrLoc = 7546;
-	};
-	E103506C05355596002A18D1 = {
-		fRef = E1375C5D0530898300FE8BF8;
-		isa = PBXTextBookmark;
-		name = "LSOpen.h: 241";
-		rLen = 0;
-		rLoc = 8490;
-		rType = 0;
-		vrLen = 1029;
-		vrLoc = 7546;
-	};
-	E103508E0535B52C002A18D1 = {
-		isa = PBXFileReference;
-		name = CFString.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFString.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E11E9B8E0544EE7900045D4F = {
-		fRef = E11E9B950544EE9700045D4F;
-		isa = PBXTextBookmark;
-		name = "(null): 158";
-		rLen = 0;
-		rLoc = 8234;
-		rType = 0;
-		vrLen = 1977;
-		vrLoc = 6660;
-	};
-	E11E9B8F0544EE7900045D4F = {
-		fRef = E103508E0535B52C002A18D1;
-		isa = PBXTextBookmark;
-		name = "CFString.h: CFStringCreateWithCString";
-		rLen = 16;
-		rLoc = 6861;
-		rType = 0;
-		vrLen = 2215;
-		vrLoc = 5649;
-	};
-	E11E9B940544EE9700045D4F = {
-		expectedFileType = sourcecode.c.h;
-		isa = PBXFileReference;
-		name = CFURL.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFURL.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E11E9B950544EE9700045D4F = {
-		isa = PBXFileReference;
-		name = CFStringEncodingExt.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFStringEncodingExt.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E11E9B960544EE9700045D4F = {
-		expectedFileType = sourcecode.c.h;
-		isa = PBXFileReference;
-		name = LSOpen.h;
-		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LSOpen.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E1375C530530898300FE8BF8 = {
-		fRef = E1375C5C0530898300FE8BF8;
-		isa = PBXTextBookmark;
-		name = "(null): 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 688;
-		vrLoc = 0;
-	};
-	E1375C560530898300FE8BF8 = {
-		fRef = E1375C5B0530898300FE8BF8;
-		isa = PBXTextBookmark;
-		name = "(null): 1";
-		rLen = 0;
-		rLoc = 0;
-		rType = 0;
-		vrLen = 688;
-		vrLoc = 0;
-	};
-	E1375C5B0530898300FE8BF8 = {
-		isa = PBXFileReference;
-		name = LaunchServices.h;
-		path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LaunchServices.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E1375C5C0530898300FE8BF8 = {
-		isa = PBXFileReference;
-		name = LaunchServices.h;
-		path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LaunchServices.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E1375C5D0530898300FE8BF8 = {
-		isa = PBXFileReference;
-		name = LSOpen.h;
-		path = /Developer/SDKs/MacOSX10.3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LSOpen.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
 	E14C945E052A896100142529 = {
+		fallbackIsa = XCSourceControlManager;
+		isSCMEnabled = 1;
 		isa = PBXSourceControlManager;
 		scmConfiguration = {
 		};
-		scmType = scm.cvs;
+		scmType = scm.subversion;
 	};
 	E14C945F052A896100142529 = {
 		indexTemplatePath = "";
 		isa = PBXCodeSenseManager;
-		usesDefaults = 1;
+		usesDefaults = 0;
 		wantsCodeCompletion = 1;
-		wantsCodeCompletionAutoPopup = 0;
 		wantsCodeCompletionAutoSuggestions = 0;
 		wantsCodeCompletionCaseSensitivity = 1;
+		wantsCodeCompletionListAlways = 1;
 		wantsCodeCompletionOnlyMatchingItems = 1;
 		wantsCodeCompletionParametersIncluded = 1;
@@ -448,5 +456,5 @@
 		fileReference = 08FB7796FE84155DC02AAC07;
 		isa = PBXFileBreakpoint;
-		lineNumber = 674;
+		lineNumber = 708;
 		state = 1;
 	};
@@ -463,107 +471,8 @@
 		name = "handle URL/file arguments";
 		rLen = 0;
-		rLoc = 17962;
+		rLoc = 18094;
 		rType = 0;
 		vrLen = 1773;
 		vrLoc = 14523;
-	};
-	E1A087BB0548731500594651 = {
-		fRef = E11E9B960544EE9700045D4F;
-		isa = PBXTextBookmark;
-		name = "LSOpen.h: LSLaunchFSRefSpec";
-		rLen = 27;
-		rLoc = 2548;
-		rType = 0;
-		vrLen = 2176;
-		vrLoc = 1426;
-	};
-	E1A087C80548731D00594651 = {
-		expectedFileType = sourcecode.c.c;
-		isa = PBXFileReference;
-		name = main.c;
-		path = /Volumes/Ti/Users/nicholas/Documents/Development/launch/launch/main.c;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E1A087CE0548746200594651 = {
-		fRef = E11E9B940544EE9700045D4F;
-		isa = PBXTextBookmark;
-		name = "CFURL.h: CFURLGetFSRef";
-		rLen = 58;
-		rLoc = 18538;
-		rType = 0;
-		vrLen = 1812;
-		vrLoc = 16881;
-	};
-	E1A087CF0548746200594651 = {
-		fRef = E1A087D50548746200594651;
-		isa = PBXTextBookmark;
-		name = "(null): 5155";
-		rLen = 0;
-		rLoc = 175675;
-		rType = 0;
-		vrLen = 2070;
-		vrLoc = 174398;
-	};
-	E1A087D00548746200594651 = {
-		fRef = 08FB7796FE84155DC02AAC07;
-		isa = PBXTextBookmark;
-		name = "main.c: 805";
-		rLen = 5;
-		rLoc = 33144;
-		rType = 0;
-		vrLen = 1438;
-		vrLoc = 31911;
-	};
-	E1A087D10548746200594651 = {
-		fRef = E1A087D60548746200594651;
-		isa = PBXTextBookmark;
-		name = "(null): 5155";
-		rLen = 0;
-		rLoc = 175675;
-		rType = 0;
-		vrLen = 2070;
-		vrLoc = 174398;
-	};
-	E1A087D20548746200594651 = {
-		fRef = 08FB7796FE84155DC02AAC07;
-		isa = PBXTextBookmark;
-		name = "main.c: 805";
-		rLen = 0;
-		rLoc = 33157;
-		rType = 0;
-		vrLen = 1436;
-		vrLoc = 31909;
-	};
-	E1A087D30548746200594651 = {
-		fRef = E1A087C80548731D00594651;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 808;
-		rType = 1;
-	};
-	E1A087D40548746200594651 = {
-		fRef = 08FB7796FE84155DC02AAC07;
-		isa = PBXTextBookmark;
-		name = "main.c: 809";
-		rLen = 0;
-		rLoc = 33280;
-		rType = 0;
-		vrLen = 325;
-		vrLoc = 33020;
-	};
-	E1A087D50548746200594651 = {
-		isa = PBXFileReference;
-		name = Files.h;
-		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Files.h;
-		refType = 0;
-		sourceTree = "<absolute>";
-	};
-	E1A087D60548746200594651 = {
-		isa = PBXFileReference;
-		name = Files.h;
-		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Files.h;
-		refType = 0;
-		sourceTree = "<absolute>";
 	};
 	F561F49E0139D79101AEEDB1 = {
@@ -581,5 +490,9 @@
 		configStateDict = {
 		};
+		cppStopOnCatchEnabled = 0;
+		cppStopOnThrowEnabled = 0;
+		customDataFormattersEnabled = 1;
 		debuggerPlugin = GDBDebugging;
+		disassemblyDisplayState = 0;
 		dylibVariantSuffix = "";
 		enableDebugStr = 1;
@@ -587,4 +500,5 @@
 		);
 		isa = PBXExecutable;
+		libgmallocEnabled = 0;
 		name = launch;
 		shlibInfoDictList = (
@@ -595,8 +509,8 @@
 	F5C0CA9501B5740C01AEEDB1 = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {709, 3779}}";
-			sepNavSelRange = "{7907, 0}";
-			sepNavVisRect = "{{0, 3118}, {709, 443}}";
-			sepNavWindowFrame = "{{38, 304}, {750, 502}}";
+			sepNavIntBoundsRect = "{{0, 0}, {735, 3479}}";
+			sepNavSelRange = "{8123, 0}";
+			sepNavVisRect = "{{0, 2798}, {735, 464}}";
+			sepNavWindowFrame = "{{130, 134}, {750, 502}}";
 		};
 	};
Index: /trunk/launch/launch/launch.pbproj/project.pbxproj
===================================================================
--- /trunk/launch/launch/launch.pbproj/project.pbxproj	(revision 165)
+++ /trunk/launch/launch/launch.pbproj/project.pbxproj	(revision 166)
@@ -7,6 +7,4 @@
 	objects = {
 		014CEA490018CE3211CA2923 = {
-			buildRules = (
-			);
 			buildSettings = {
 				COPY_PHASE_STRIP = NO;
@@ -22,6 +20,4 @@
 		};
 		014CEA4A0018CE3211CA2923 = {
-			buildRules = (
-			);
 			buildSettings = {
 				COPY_PHASE_STRIP = YES;
@@ -43,7 +39,6 @@
 //034
 		034768E2FF38A6DC11DB9C8B = {
-			expectedFileType = "compiled.mach-o.executable";
-			fallbackIsa = PBXFileReference;
-			isa = PBXExecutableFileReference;
+			explicitFileType = "compiled.mach-o.executable";
+			isa = PBXFileReference;
 			path = launch;
 			refType = 3;
@@ -62,4 +57,6 @@
 		08FB7793FE84155DC02AAC07 = {
 			buildSettings = {
+				MACOSX_DEPLOYMENT_TARGET = 10.2;
+				SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk;
 			};
 			buildStyles = (
@@ -98,10 +95,11 @@
 		};
 		08FB7796FE84155DC02AAC07 = {
-			expectedFileType = sourcecode.c.c;
 			fileEncoding = 30;
 			isa = PBXFileReference;
+			lastKnownFileType = sourcecode.c.c;
 			path = main.c;
 			refType = 4;
 			sourceTree = "<group>";
+			tabWidth = 8;
 		};
 		08FB779DFE84155DC02AAC07 = {
@@ -197,7 +195,6 @@
 //094
 		09AB6884FE841BABC02AAC07 = {
-			expectedFileType = wrapper.framework;
-			fallbackIsa = PBXFileReference;
-			isa = PBXFrameworkReference;
+			isa = PBXFileReference;
+			lastKnownFileType = wrapper.framework;
 			name = CoreFoundation.framework;
 			path = /System/Library/Frameworks/CoreFoundation.framework;
@@ -241,7 +238,6 @@
 //F54
 		F561F49F0139D7DD01AEEDB1 = {
-			expectedFileType = wrapper.framework;
-			fallbackIsa = PBXFileReference;
-			isa = PBXFrameworkReference;
+			isa = PBXFileReference;
+			lastKnownFileType = wrapper.framework;
 			name = ApplicationServices.framework;
 			path = /System/Library/Frameworks/ApplicationServices.framework;
@@ -256,7 +252,7 @@
 		};
 		F574340B01B8A47B01AEEDB1 = {
-			expectedFileType = text;
 			fileEncoding = 30;
 			isa = PBXFileReference;
+			lastKnownFileType = text;
 			path = VERSION;
 			refType = 4;
@@ -264,7 +260,6 @@
 		};
 		F579CF4B019A1C6D01AEEDB1 = {
-			expectedFileType = wrapper.framework;
-			fallbackIsa = PBXFileReference;
-			isa = PBXFrameworkReference;
+			isa = PBXFileReference;
+			lastKnownFileType = wrapper.framework;
 			name = Security.framework;
 			path = /System/Library/Frameworks/Security.framework;
@@ -279,7 +274,7 @@
 		};
 		F5C0CA9501B5740C01AEEDB1 = {
-			expectedFileType = text;
 			fileEncoding = 30;
 			isa = PBXFileReference;
+			lastKnownFileType = text;
 			path = README;
 			refType = 4;
@@ -287,7 +282,6 @@
 		};
 		F5E819BF0198DFF701AEEDB1 = {
-			expectedFileType = wrapper.framework;
-			fallbackIsa = PBXFileReference;
-			isa = PBXFrameworkReference;
+			isa = PBXFileReference;
+			lastKnownFileType = wrapper.framework;
 			name = Carbon.framework;
 			path = /System/Library/Frameworks/Carbon.framework;
Index: /trunk/launch/launch/main.c
===================================================================
--- /trunk/launch/launch/main.c	(revision 165)
+++ /trunk/launch/launch/main.c	(revision 166)
@@ -3,5 +3,5 @@
  Nicholas Riley <launchsw@sabi.net>
 
- Copyright (c) 2001-03, Nicholas Riley
+ Copyright (c) 2001-05, Nicholas Riley
  All rights reserved.
 
@@ -51,5 +51,5 @@
 const char *APP_NAME;
 
-#define VERSION "1.0"
+#define VERSION "1.0.1"
 
 #define STRBUF_LEN 1024
@@ -59,4 +59,5 @@
     OSType creator;
     CFStringRef bundleID, name;
+    Boolean forceURLs;
     enum { ACTION_FIND, ACTION_FIND_ITEMS,
 	   ACTION_OPEN, ACTION_OPEN_ITEMS, 
@@ -64,5 +65,5 @@
 } OPTS = 
 {
-    kLSUnknownCreator, NULL, NULL,
+    kLSUnknownCreator, NULL, NULL, false,
     ACTION_DEFAULT
 };
@@ -87,4 +88,5 @@
     { -10827, "application package contains no executable, or an unusable executable" }, /* kLSNoExecutableErr, not defined in 10.2 */
     { -10828, "Classic environment required but not available" }, /* kLSNoClassicEnvironmentErr, not defined in 10.2 */
+    { -10829, "unable to launch multiple instances of application" }, /* kLSMultipleSessionsNotSupportedErr, not defined in 10.2 */
 #ifndef BROKEN_AUTHORIZATION
     // Security framework errors
@@ -97,4 +99,5 @@
     { icInternalErr, "internal Internet Config error" },
     // Misc. errors
+    { nsvErr, "the volume cannot be found (buggy filesystem?)" },
     { procNotFound, "unable to connect to system service.\nAre you logged in?" },
     { kCGErrorIllegalArgument, "window server error.\nAre you logged in?" },
@@ -105,6 +108,6 @@
 
 void usage() {
-    fprintf(stderr, "usage: %s [-npswbmhCX] [-c creator] [-i bundleID] [-u URL] [-a name] [item ...] [-]\n"
-                    "   or: %s [-npflswbmhCX] item ...\n", APP_NAME, APP_NAME);
+    fprintf(stderr, "usage: %s [-npswbmhCXU] [-c creator] [-i bundleID] [-u URL] [-a name] [item ...] [-]\n"
+                    "   or: %s [-npflswbmhCXU] item ...\n", APP_NAME, APP_NAME);
     fprintf(stderr,
         "  -n            print matching paths/URLs instead of opening them\n"
@@ -121,4 +124,5 @@
         "  -C            force CFM/PEF Carbon application to launch in Classic\n"
         "  -X            don't start Classic for this app if Classic isn't running\n"
+	"  -U            interpret items as URLs, even if same-named files exist\n"
         "  -c creator    match application by four-character creator code ('ToyS')\n"
         "  -i bundle ID  match application by bundle identifier (com.apple.scripteditor)\n"
@@ -127,5 +131,5 @@
         "'document' may be a file, folder, or disk - whatever the application can open.\n"
         "'item' may be a file, folder, disk, or URL.\n\n");
-    fprintf(stderr, "launch "VERSION" (c) 2001-03 Nicholas Riley <http://web.sabi.net/nriley/software/>.\n"
+    fprintf(stderr, "launch "VERSION" (c) 2001-05 Nicholas Riley <http://web.sabi.net/nriley/software/>.\n"
 	            "Please send bugs, suggestions, etc. to <launchsw@sabi.net>.\n");
 
@@ -341,5 +345,5 @@
     if (argc == 1) usage();
     
-    while ( (ch = getopt(argc, argv, "npflswbmhCXc:i:u:a:")) != -1) {
+    while ( (ch = getopt(argc, argv, "npflswbmhCXUc:i:u:a:")) != -1) {
         switch (ch) {
         case 'n':
@@ -384,4 +388,5 @@
         case 'C': LSPEC.launchFlags |= kLSLaunchInClassic; break;  // force Classic
         case 'X': LSPEC.launchFlags ^= kLSLaunchStartClassic; break;// don't start Classic for app
+	case 'U': OPTS.forceURLs = true; break;
         case 'c':
             if (strlen(optarg) != 4) errexit("creator (argument of -c) must be four characters long");
@@ -390,13 +395,13 @@
             break;
         case 'i':
-            OPTS.bundleID = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding());
+            OPTS.bundleID = CFStringCreateWithCString(NULL, optarg, kCFStringEncodingUTF8);
 	    appSpecified = true;
             break;
         case 'a':
-            OPTS.name = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding());
+            OPTS.name = CFStringCreateWithCString(NULL, optarg, kCFStringEncodingUTF8);
 	    appSpecified = true;
             break;
 	case 'u':
-            { CFStringRef str = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding());
+            { CFStringRef str = CFStringCreateWithCString(NULL, optarg, kCFStringEncodingUTF8);
 	      LSPEC.appURL = CFURLCreateWithString(NULL, str, NULL);
               if (str != NULL) CFRelease(str);
@@ -471,18 +476,23 @@
                 LSPEC.launchFlags ^= kLSLaunchAsync;
             } else {
-                argStr = CFStringCreateWithCString(NULL, argv[i], CFStringGetSystemEncoding());
-                // check for URLs
-                itemURL = normalizedURLFromString(argStr);
-                if (itemURL == NULL && OPTS.action == ACTION_LAUNCH_URLS) {
-                    // check for email addresses
-                    if (strchr(argv[i], '@') != NULL && strchr(argv[i], '/') == NULL)
-                        itemURL = normalizedURLFromPrefixSlack(CFSTR("mailto:"), argStr);
-                    // check for "slack" URLs
-                    if (itemURL == NULL && strchr(argv[i], '.') != NULL && strchr(argv[i], '/') != argv[i])
-                        itemURL = normalizedURLFromPrefixSlack(CFSTR("http://"), argStr);
-                }
+		struct stat stat_buf;
+		if (!OPTS.forceURLs && stat(argv[i], &stat_buf) == 0) {
+		    itemURL = NULL;
+		} else {
+		    argStr = CFStringCreateWithCString(NULL, argv[i], kCFStringEncodingUTF8);
+		    // check for URLs
+		    itemURL = normalizedURLFromString(argStr);
+		    if (itemURL == NULL && OPTS.action == ACTION_LAUNCH_URLS) {
+			// check for email addresses
+			if (strchr(argv[i], '@') != NULL && strchr(argv[i], '/') == NULL)
+			    itemURL = normalizedURLFromPrefixSlack(CFSTR("mailto:"), argStr);
+			// check for "slack" URLs
+			if (itemURL == NULL && strchr(argv[i], '.') != NULL && strchr(argv[i], '/') != argv[i])
+			    itemURL = normalizedURLFromPrefixSlack(CFSTR("http://"), argStr);
+		    }
+		}
                 if (itemURL == NULL) {
                     // check for file paths
-                    itemURL = CFURLCreateWithFileSystemPath(NULL, argStr, kCFURLPOSIXPathStyle, false);
+                    itemURL = CFURLCreateFromFileSystemRepresentation(NULL, argv[i], strlen(argv[i]), false);
                     err = LSCopyItemInfoForURL(itemURL, kLSRequestExtensionFlagsOnly, &docInfo);
                     if (err != noErr) osstatusexit(err, "unable to locate '%s'", argv[i]);
@@ -496,22 +506,38 @@
 }
 
+Boolean stringFromURLIsRemote(CFURLRef url, char *strBuffer) {
+    CFStringRef scheme = CFURLCopyScheme(url);
+    Boolean isRemote = !CFEqual(scheme, CFSTR("file"));
+    CFRelease(scheme);
+    
+    strBuffer[0] = '\0';
+    if (isRemote) {
+        CFStringRef urlString = CFURLGetString(url);
+	CFStringGetCString(urlString, strBuffer, STRBUF_LEN, kCFStringEncodingUTF8);
+	CFRelease(urlString);
+    } else {
+	if (CFURLGetFileSystemRepresentation(url, false, strBuffer, STRBUF_LEN)) {
+	    if (strBuffer[0] == '.' && strBuffer[1] == '/') {
+		// remove the leading "./"
+		char *fromBufPtr = strBuffer + 2;
+		while (true) {
+		    *strBuffer = *fromBufPtr;
+		    if (*fromBufPtr == '\0') break;
+		    strBuffer++;
+		    fromBufPtr++;
+		}
+	    }
+	} else {
+	    strcpy(strBuffer, "[can't get path: CFURLGetFileSystemRepresentation failed]");
+	}
+    }
+    return isRemote;
+}
+
 void printPathFromURL(CFURLRef url, FILE *stream) {
-    CFStringRef scheme, pathOrURL;
     static char strBuffer[STRBUF_LEN];
-    
     check(url != NULL && stream != NULL);
-
-    scheme = CFURLCopyScheme(url);
-    
-    if (CFEqual(scheme, CFSTR("file")))
-        pathOrURL = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
-    else
-        pathOrURL = CFURLGetString(url);
-
-    strBuffer[0] = '\0';
-    CFStringGetCString(pathOrURL, strBuffer, STRBUF_LEN, CFStringGetSystemEncoding()); // XXX buffer size issues?
+    stringFromURLIsRemote(url, strBuffer);
     fprintf(stream, "%s\n", strBuffer);
-    CFRelease(scheme);
-    CFRelease(pathOrURL);
 }
 
@@ -582,5 +608,10 @@
 
     if (fscInfo.nodeFlags & kFSNodeIsDirectoryMask) {
-        printf("\tcontents: %lu item%s\n", fscInfo.valence, fscInfo.valence != 1 ? "s" : "");
+        printf("\tcontents: ");
+	switch (fscInfo.valence) {
+	case 0: printf("zero items\n"); break;
+	case 1: printf("1 item\n"); break;
+	default: printf("%lu items\n", fscInfo.valence);
+	}
     } else {
         printSizes("data fork size", fscInfo.dataLogicalSize, fscInfo.dataPhysicalSize, true);
@@ -605,26 +636,37 @@
 }
 
+const char *utf8StringFromCFStringRef(CFStringRef cfStr) {
+    static char tmpBuffer[STRBUF_LEN];
+    CFStringGetCString(cfStr, tmpBuffer, STRBUF_LEN, kCFStringEncodingUTF8);
+    return tmpBuffer;
+}
+
+const char *utf8StringFromOSType(OSType osType) {
+    CFStringRef typeStr = CFStringCreateWithBytes(NULL, (const char *)&osType, 4, CFStringGetSystemEncoding(), false);
+    if (typeStr == NULL) {
+	// punt to displaying verbatim
+	static char tmpBuffer[4];
+	tmpBuffer[4] = '\0';
+	strncpy(tmpBuffer, (const char *)&osType, 4);
+	return tmpBuffer;
+    }
+    const char *buffer = utf8StringFromCFStringRef(typeStr);
+    CFRelease(typeStr);
+    return buffer;
+}
+
 // 'context' is to match prototype for CFArrayApplierFunction, it's unused
 void printInfoFromURL(CFURLRef url, void *context) {
-    CFStringRef scheme, pathOrURL, kind;
-    Boolean isRemote;
-    static char strBuffer[STRBUF_LEN], tmpBuffer[STRBUF_LEN];
+    CFStringRef kind;
+    static char strBuffer[STRBUF_LEN];
     
     check(url != NULL && context == NULL);
 
-    scheme = CFURLCopyScheme(url);
-    
-    isRemote = !CFEqual(scheme, CFSTR("file"));
-    if (isRemote)
-        pathOrURL = CFURLGetString(url);
-    else
-        pathOrURL = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
-
-    strBuffer[0] = '\0';
-    CFStringGetCString(pathOrURL, strBuffer, STRBUF_LEN, CFStringGetSystemEncoding()); // XXX buffer size issues?
-    if (isRemote)
+    if (stringFromURLIsRemote(url, strBuffer))
         printf("<%s>: URL\n", strBuffer);
     else {
         static LSItemInfoRecord info;
+	CFStringRef version = NULL;
+	UInt32 intVersion = 0;
         OSStatus err = LSCopyItemInfoForURL(url, kLSRequestAllInfo, &info);
         if (err != noErr) osstatusexit(err, "unable to get information about '%s'", strBuffer);
@@ -655,7 +697,6 @@
         printf("\n");
         if (!(info.flags & kLSItemInfoIsContainer) || info.flags & kLSItemInfoIsPackage) {
-            tmpBuffer[4] = '\0';
-            strncpy(tmpBuffer, (char *)&info.filetype, 4); printf("\ttype: '%s'", tmpBuffer);
-            strncpy(tmpBuffer, (char *)&info.creator, 4); printf("\tcreator: '%s'\n", tmpBuffer);
+	    printf("\ttype: '%s'", utf8StringFromOSType(info.filetype));
+	    printf("\tcreator: '%s'\n", utf8StringFromOSType(info.creator));
         }
         if (info.flags & kLSItemInfoIsPackage || info.flags & kLSItemInfoIsApplication) {
@@ -663,6 +704,4 @@
             CFBundleRef bundle = CFBundleCreate(NULL, url);
             CFStringRef bundleID = NULL;
-            CFStringRef appVersion = NULL;
-            UInt32 intVersion = 0;
             if (bundle == NULL && (info.flags & kLSItemInfoIsApplication)) {
                 FSRef fsr;
@@ -683,10 +722,12 @@
                             CFPropertyListRef infoPlist = CFPropertyListCreateFromXMLData(NULL, plstData, kCFPropertyListImmutable, &error);
 			    if (plstData != NULL) {
-			        CFRelease(plstData);
-			        plstData = NULL;
+				CFRelease(plstData);
+				plstData = NULL;
+			    } else {
+				// this function should handle the 'plst' 0 case too, but it doesn't provide error messages; however, it handles the case of an unbundled Mach-O binary, so it is useful as a fallback
+				infoPlist = CFBundleCopyInfoDictionaryForURL(url);
 			    }
                             if (infoPlist == NULL) {
-                                CFStringGetCString(error, tmpBuffer, STRBUF_LEN, CFStringGetSystemEncoding());
-                                printf("\t['plst' 0 resource invalid: %s]\n", tmpBuffer);
+                                printf("\t['plst' 0 resource invalid: %s]\n", utf8StringFromCFStringRef(error));
                                 CFRelease(error);
                             } else {
@@ -694,8 +735,8 @@
                                 bundleID = CFDictionaryGetValue(infoPlist, kCFBundleIdentifierKey);
                                 if (bundleID != NULL) CFRetain(bundleID);
-                                appVersion = CFDictionaryGetValue(infoPlist, CFSTR("CFBundleShortVersionString"));
-                                if (appVersion == NULL)
-                                    appVersion = CFDictionaryGetValue(infoPlist, kCFBundleVersionKey);
-                                if (appVersion != NULL) CFRetain(appVersion);
+                                version = CFDictionaryGetValue(infoPlist, CFSTR("CFBundleShortVersionString"));
+                                if (version == NULL)
+                                    version = CFDictionaryGetValue(infoPlist, kCFBundleVersionKey);
+                                if (version != NULL) CFRetain(version);
                                 CFRelease(infoPlist);
                             }
@@ -705,6 +746,6 @@
                             if (err != noErr && err != resNotFound) osstatusexit(err, "unable to read 'vers' 1 resource");
                         } else {
-                            if (appVersion == NULL) { // prefer 'plst' version
-                                appVersion = CFStringCreateWithPascalString(NULL, vers[0]->shortVersion, CFStringGetSystemEncoding()); // XXX use country code instead?
+                            if (version == NULL) { // prefer 'plst' version
+                                version = CFStringCreateWithPascalString(NULL, vers[0]->shortVersion, CFStringGetSystemEncoding()); // XXX use country code instead?
                             }
                             intVersion = ((NumVersionVariant)vers[0]->numericVersion).whole;
@@ -717,9 +758,9 @@
                 if (bundleID != NULL) CFRetain(bundleID);
 		// prefer a short version string, e.g. "1.0 Beta" instead of "51" for Safari
-                appVersion = CFBundleGetValueForInfoDictionaryKey(bundle, CFSTR("CFBundleShortVersionString"));
-		if (appVersion == NULL)
-		    appVersion = CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey);
-                if (appVersion != NULL) {
-                    CFRetain(appVersion);
+                version = CFBundleGetValueForInfoDictionaryKey(bundle, CFSTR("CFBundleShortVersionString"));
+		if (version == NULL)
+		    version = CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey);
+                if (version != NULL) {
+                    CFRetain(version);
                     intVersion = CFBundleGetVersionNumber(bundle);
                 }
@@ -727,27 +768,37 @@
             }
             if (bundleID != NULL) {
-                CFStringGetCString(bundleID, tmpBuffer, STRBUF_LEN, CFStringGetSystemEncoding());
-                printf("\tbundle ID: %s\n", tmpBuffer);
+                printf("\tbundle ID: %s\n", utf8StringFromCFStringRef(bundleID));
                 CFRelease(bundleID);
             }
-            if (appVersion != NULL) {
-                CFStringGetCString(appVersion, tmpBuffer, STRBUF_LEN, CFStringGetSystemEncoding());
-                printf("\tversion: %s", tmpBuffer);
-                if (intVersion != 0) printf(" [0x%lx = %lu]", intVersion, intVersion);
-                putchar('\n');
-                CFRelease(appVersion);
-            }
-        }
-        
+        } else {
+	    // try to get a version if we can, but don't complain if we can't
+	    FSRef fsr;
+	    if (CFURLGetFSRef(url, &fsr)) {
+		SInt16 resFork = FSOpenResFile(&fsr, fsRdPerm);
+		if (ResError() == noErr) {
+		    VersRecHndl vers = (VersRecHndl)Get1Resource('vers', 1);
+		    if (ResError() == noErr && vers != NULL) {
+			version = CFStringCreateWithPascalString(NULL, vers[0]->shortVersion, CFStringGetSystemEncoding()); // XXX use country code instead?
+			intVersion = ((NumVersionVariant)vers[0]->numericVersion).whole;
+		    }
+		}
+		CloseResFile(resFork);
+	    }
+	}
+	
+	if (version != NULL) {
+	    printf("\tversion: %s", utf8StringFromCFStringRef(version));
+	    if (intVersion != 0) printf(" [0x%lx = %lu]", intVersion, intVersion);
+	    putchar('\n');
+	    CFRelease(version);
+	}
+
         // kind string
         err = LSCopyKindStringForURL(url, &kind);
         if (err != noErr) osstatusexit(err, "unable to get kind of '%s'", strBuffer);
-        CFStringGetCString(kind, tmpBuffer, STRBUF_LEN, CFStringGetSystemEncoding());
-        printf("\tkind: %s\n", tmpBuffer);
+        printf("\tkind: %s\n", utf8StringFromCFStringRef(kind));
 	CFRelease(kind);
         printMoreInfoFromURL(url);
     }
-    CFRelease(scheme);
-    CFRelease(pathOrURL);
 }
 
@@ -760,5 +811,5 @@
 
     strBuffer[0] = '\0';
-    CFStringGetCString(urlStr, strBuffer, STRBUF_LEN, CFStringGetSystemEncoding()); // XXX buffer size issues?
+    CFStringGetCString(urlStr, strBuffer, STRBUF_LEN, CFStringGetSystemEncoding()); // XXX no idea what encoding ICLaunchURL is supposed to take; leave as is for now
     strStart = 0;
     strEnd = strlen(strBuffer);
Index: /trunk/launch/package-launch.sh
===================================================================
--- /trunk/launch/package-launch.sh	(revision 165)
+++ /trunk/launch/package-launch.sh	(revision 166)
@@ -1,3 +1,3 @@
-#!/bin/sh
+#!/bin/zsh
 
 set -x -v
@@ -5,9 +5,11 @@
 cd launch && \
 find . -name \*~ -exec rm '{}' \; && \
-xcodebuild && \
+xcodebuild -buildstyle Deployment && \
 SetFile -c 'R*ch' -t 'TEXT' README VERSION launch.1 && \
 strip build/launch && \
 sudo /usr/bin/install -c build/launch /usr/local/bin && \
 sudo /usr/bin/install -c launch.1 /usr/local/man/man1 && \
+chmod 755 build/launch && \
+chmod 644 launch.1 && \
 rm -rf build/launch.build build/intermediates build/.gdb_history && \
 VERSION=`cat VERSION` TARBALL="launch-$VERSION.tar.gz" && \
@@ -16,5 +18,5 @@
 rm -f launch-$VERSION $TARBALL $DMG && \
 ln -s launch launch-$VERSION && \
-tar --exclude=.DS_Store --exclude=.svn --exclude=.gdb_history -zchf launch-$VERSION.tar.gz launch-$VERSION && \
+tar --owner=root --group=wheel --exclude=.DS_Store --exclude=.svn --exclude=.gdb_history -zchf launch-$VERSION.tar.gz launch-$VERSION && \
 #hdiutil create $DMG -megabytes 5 -ov -type UDIF && \
 #DISK=`hdid $DMG | sed -ne ' /Apple_partition_scheme/ s|^/dev/\([^ ]*\).*$|\1|p'` && \
