Changeset 146 for trunk


Ignore:
Timestamp:
10/23/03 21:06:33 (21 years ago)
Author:
Nicholas Riley
Message:

VERSION: Updated for 1.0 (at long last!)

main.c: Dealt with -b/-h issue through documentation in man page,
removed from to do list. Dealt with -X issue through testing and
adding kLSNoClassicEnvironmentErr. Added kLSNoExecutableErr and
kCGErrorApplicationRequiresNewerSystem. Removed
BROKEN_LAUNCHNEWINSTANCE because it's fixed in Panther. Updated for
1.0. Fixed a couple of minor memory leaks. Output errors to stderr
instead of stdout. Work around bug in LSOpenFromURLSpec in Panther
(filed bug already). Don't make '????' look like a trigraph to GCC.

launch.pbproj: Updated for Xcode.

launch.1: Manual page, finally. Documents several known Mac OS X bugs
which interfere with launch's functioning.

README: Updated for 1.0. Added man page installation/removal
instructions, just like appswitch. s/Chimera/Camino/. Added my zsh
e() function as an example. Updated examples to reflect current
software versions and usage. Updated stationery discussion to mention
that Omni apps handle stationery too.

package-launch.sh: Set type/creator of files (not that it matters
since we're not doing a dmg distribution any more). Changes for man
page packaging.

Location:
trunk/launch
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/launch/launch/README

    r137 r146  
    1 launch 1.0b3 [xx April 2003]
    2 ============
     1launch 1.0 [23 October 2003]
     2==========
    33
    44A command-line launcher for Mac OS X in the spirit of open(1).
     
    1414or by path, launching TextEdit, or opening a number of applications,
    1515documents, folders, or URLs.  With the exception of special support for
    16 TextEdit, 'launch' does all this and:
     16TextEdit (open -a), 'launch' does all this and:
    1717
    1818- opens URLs, directly or in your preferred helper application (-l)
     
    2727- launches Carbon applications in Classic
    2828- displays file information including type, creator, bundle ID,
    29   data and resource fork sizes, and dates
     29  data and resource fork sizes, dates and version
    3030- reports errors intelligibly
    3131- and much more!
     
    4949modify the install line as appropriate.
    5050
    51 % sudo /usr/bin/install -d /usr/local/bin
     51% sudo /usr/bin/install -d /usr/local/bin /usr/local/man/man1
    5252% sudo /usr/bin/install -c build/launch /usr/local/bin
     53% sudo /usr/bin/install -c launch.1 /usr/local/man/man1
    5354% rehash
    5455
    5556Uninstallation:
    5657
    57 % sudo rm -f /usr/local/bin/launch
     58% sudo rm -f /usr/local/bin/launch /usr/local/man/man1/appswitch.1
    5859
    5960COMPILATION
    6061-----------
    6162
    62 A Project Builder project, 'launch.pbproj', is included.  A
     63An Xcode/Project Builder project, 'launch.pbproj', is included.  A
    6364precompiled binary is also provided.  'launch' was developed and
    64 tested under Mac OS 10.2.3 with the December 2002 Developer Tools,
    65 and does not require any additional software to build.
     65tested under Mac OS 10.3 with the October 2003 Developer Tools, and
     66does not require any additional software to build.
    6667
    6768USAGE
     
    8283
    8384% launch -i org.mozilla.navigator http://www.apple.com/
    84 [Chimera Navigator opens Apple's Web site]
     85[Camino opens Apple's Web site]
    8586
    8687% launch -l launchsw@sabi.net
     
    9192        type: 'APPL'    creator: 'prvw'
    9293        bundle ID: com.apple.Preview
     94        version: 2.1.0
    9395        kind: Application
    94         contents: 2 items
     96        contents: 1 item
    9597[...]
     98
     99A scripting example: a zsh function which provides an OS X wrapper
     100around emacsclient and the Carbon build of GNU Emacs, using launch and
     101appswitch (another one of my command-line tools).
     102
     103    e() {
     104      ( emacsclient -n $@ >&/dev/null && \
     105        appswitch -a Emacs ) || \
     106      ( launch -ba Emacs && \
     107        until { emacsclient -n $@ >&/dev/null } do sleep 1; done;
     108        appswitch -a Emacs )
     109      export EDITOR=emacsclient
     110    }
    96111
    97112FREQUENTLY ASKED QUESTIONS
     
    108123        type: 'APPL'    creator: 'OWEB'
    109124        bundle ID: com.omnigroup.OmniWeb
     125        version: 4.5
    110126        kind: Application
    111127
     
    119135A. Your application does not support stationery.  Applications which
    120136support stationery respond to it by creating a new untitled document
    121 with the contents of the stationery.  Most (all?) Cocoa applications,
    122 such as TextEdit, do not support stationery.  If you're looking for
    123 a text editor which supports stationery, try BBEdit, Tex-Edit Plus,
    124 the CodeWarrior IDE, or almost any other Carbon editor.
     137with the contents of the stationery.  Most Cocoa applications, such as
     138TextEdit, do not support stationery.  (Omni Group applications are a
     139notable exception.)  If you're looking for a text editor which
     140supports stationery, try BBEdit, Tex-Edit Plus, the CodeWarrior IDE,
     141or almost any other Carbon editor.
    125142
    126143For the curious: launch processes input by simultaneously reading it
     
    146163/Volumes/GrayApps/Utilities/Resorcerer 2.4/Resorcerer: scriptable Mac OS X application [Carbon, prefers native OS X]
    147164        type: 'APPL'    creator: 'Doug'
     165        bundle ID: com.mathemaesthetics.resorcerer
     166        version: 2.4 [0x2418010 = 37847056]
    148167        kind: Application
     168[...]
    149169
    150170
     
    162182using the creator instead of the bundle ID as a workaround (-c instead
    163183of -i).
    164 
    165 
    166 Q. Why does launch display '[can't access CFBundle for application]'
    167 in place of the bundle identifiers of non-packaged applications?
    168 
    169 A. This is a CFBundle bug which remains as of Mac OS X 10.2.3.  If
    170 this matters to you, please ask Apple to fix it, or implement a
    171 workaround in launch by parsing the 'plst' id 0 resource directly.
    172184
    173185
     
    225237---------------
    226238
    227 1.0b3 - xx April 2003
     2391.0 - 23 October 2003
    228240 - work around CFBundle bug to report bundle identifiers and versions
    229241   from resource forks of unpackaged Carbon applications and Classic
    230242   applications [Lloyd Dupont]
     243 - added descriptions for more error codes and clarified error
     244   reporting
     245 - output all errors to stderr
     246 - provide better errors for -X option
     247 - restored -m: OS X bug is fixed in Panther
     248 - fixed a couple of tiny memory leaks
     249 - added man page [Hisashi T Fujinaka]
     250 - work around bug in LSOpenFromURLSpec opening multiple items in
     251   Mac OS X 10.3
    2312521.0b2 - 9 March 2003
    232253 - fixed install instructions to create /usr/local/bin if needed
  • trunk/launch/launch/VERSION

    r137 r146  
    1 1.0b3
     11.0
  • trunk/launch/launch/launch.pbproj/nicholas.pbxuser

    r137 r146  
    99                );
    1010                breakpoints = (
    11                         F5F4D74101B55E0801AEEDB1,
    12                         E190CFFD03AAA8A300AEFBE0,
    13                 );
     11                        E14C949A052A8B0600142529,
     12                );
     13                codeSenseManager = E14C945F052A896100142529;
    1414                executables = (
    1515                        F561F49E0139D79101AEEDB1,
    1616                );
    1717                perUserDictionary = {
    18                         PBXPerProjectTemplateStateSaveDate = 71736398;
     18                        PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
     19                                PBXFileTableDataSourceColumnSortingDirectionKey = -1;
     20                                PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
     21                                PBXFileTableDataSourceColumnWidthsKey = (
     22                                        20,
     23                                        353.8799,
     24                                        199.2085,
     25                                );
     26                                PBXFileTableDataSourceColumnsKey = (
     27                                        PBXErrorsWarningsDataSource_TypeID,
     28                                        PBXErrorsWarningsDataSource_MessageID,
     29                                        PBXErrorsWarningsDataSource_LocationID,
     30                                );
     31                        };
     32                        PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
     33                                PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
     34                                PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
     35                                PBXFileTableDataSourceColumnWidthsKey = (
     36                                        22,
     37                                        407.7974,
     38                                );
     39                                PBXFileTableDataSourceColumnsKey = (
     40                                        PBXExecutablesDataSource_ActiveFlagID,
     41                                        PBXExecutablesDataSource_NameID,
     42                                );
     43                        };
     44                        PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
     45                                PBXFileTableDataSourceColumnSortingDirectionKey = -1;
     46                                PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
     47                                PBXFileTableDataSourceColumnWidthsKey = (
     48                                        20,
     49                                        341,
     50                                        20,
     51                                        65,
     52                                        43,
     53                                        43,
     54                                        20,
     55                                );
     56                                PBXFileTableDataSourceColumnsKey = (
     57                                        PBXFileDataSource_FiletypeID,
     58                                        PBXFileDataSource_Filename_ColumnID,
     59                                        PBXFileDataSource_Built_ColumnID,
     60                                        PBXFileDataSource_ObjectSize_ColumnID,
     61                                        PBXFileDataSource_Errors_ColumnID,
     62                                        PBXFileDataSource_Warnings_ColumnID,
     63                                        PBXFileDataSource_Target_ColumnID,
     64                                );
     65                        };
     66                        PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
     67                                PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
     68                                PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
     69                                PBXFileTableDataSourceColumnWidthsKey = (
     70                                        284.2974,
     71                                        287.2085,
     72                                );
     73                                PBXFileTableDataSourceColumnsKey = (
     74                                        PBXFindDataSource_MessageID,
     75                                        PBXFindDataSource_LocationID,
     76                                );
     77                        };
     78                        PBXPerProjectTemplateStateSaveDate = 88634057;
    1979                        PBXWorkspaceContents = (
    2080                                {
    21                                         LeftSlideOut = {
    22                                                 Split0 = {
     81                                        PBXProjectWorkspaceModule_StateKey_Rev36 = {
     82                                                PBXProjectWorkspaceModule_EditorOpen = true;
     83                                                PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
    2384                                                        Split0 = {
    24                                                                 NavContent0 = {
    25                                                                         bookmark = E17A87E30446BD4A00050002;
    26                                                                         history = (
    27                                                                                 E190CFFE03AAD96100AEFBE0,
    28                                                                                 E190CFFF03AAD96100AEFBE0,
    29                                                                                 E190D00203AAD96100AEFBE0,
    30                                                                                 E190D01403ABB17800AEFBE0,
    31                                                                                 E190D01503ABB17800AEFBE0,
    32                                                                                 E190D01603ABB17800AEFBE0,
    33                                                                                 E190D01703ABB17800AEFBE0,
    34                                                                                 E190D01803ABB17800AEFBE0,
    35                                                                                 E190D01903ABB17800AEFBE0,
    36                                                                                 E190D01A03ABB17800AEFBE0,
    37                                                                                 E190D01B03ABB17800AEFBE0,
    38                                                                                 E190D01C03ABB17800AEFBE0,
    39                                                                                 E190D01D03ABB17800AEFBE0,
    40                                                                                 E190D01E03ABB17800AEFBE0,
    41                                                                                 E190D02303ABB17800AEFBE0,
    42                                                                                 E17A87CF0446BD4A00050002,
    43                                                                                 E17A87D00446BD4A00050002,
    44                                                                                 E17A87D10446BD4A00050002,
    45                                                                                 E17A87D20446BD4A00050002,
    46                                                                                 E17A87D30446BD4A00050002,
    47                                                                                 E17A87D40446BD4A00050002,
    48                                                                                 E17A87D50446BD4A00050002,
    49                                                                                 E17A87D60446BD4A00050002,
    50                                                                                 E17A87D70446BD4A00050002,
    51                                                                                 E17A87D80446BD4A00050002,
    52                                                                                 E17A87D90446BD4A00050002,
    53                                                                                 E17A87DA0446BD4A00050002,
    54                                                                                 E17A87DB0446BD4A00050002,
    55                                                                                 E17A87DC0446BD4A00050002,
    56                                                                                 E17A87DD0446BD4A00050002,
    57                                                                                 E17A87DE0446BD4A00050002,
    58                                                                         );
    59                                                                         prevStack = (
    60                                                                                 E190D00403AAD96100AEFBE0,
    61                                                                                 E190D00503AAD96100AEFBE0,
    62                                                                                 E190D00603AAD96100AEFBE0,
    63                                                                                 E190D00703AAD96100AEFBE0,
    64                                                                                 E190D00803AAD96100AEFBE0,
    65                                                                                 E190D00903AAD96100AEFBE0,
    66                                                                                 E190D02603ABB17800AEFBE0,
    67                                                                                 E190D02803ABB17800AEFBE0,
    68                                                                                 E190D02903ABB17800AEFBE0,
    69                                                                                 E190D02B03ABB17800AEFBE0,
    70                                                                                 E16C83C603F7980800050002,
    71                                                                                 E18D1CC8040C2AFC00050002,
    72                                                                                 E18D1CC9040C2AFC00050002,
    73                                                                                 E17A87DF0446BD4A00050002,
    74                                                                                 E17A87E00446BD4A00050002,
    75                                                                                 E17A87E10446BD4A00050002,
    76                                                                                 E17A87E20446BD4A00050002,
    77                                                                         );
    78                                                                 };
    79                                                                 NavCount = 1;
    80                                                                 NavGeometry0 = {
    81                                                                         Frame = "{{0, 0}, {683, 704}}";
    82                                                                         NavBarVisible = YES;
    83                                                                 };
    84                                                                 NavSplitVertical = NO;
     85                                                                bookmark = E1A087D20548746200594651;
     86                                                                history = (
     87                                                                        E1375C530530898300FE8BF8,
     88                                                                        E103506B05355596002A18D1,
     89                                                                        E11E9B8E0544EE7900045D4F,
     90                                                                        E11E9B8F0544EE7900045D4F,
     91                                                                        E1A087BB0548731500594651,
     92                                                                        E1A087CE0548746200594651,
     93                                                                        E1A087CF0548746200594651,
     94                                                                        E1A087D00548746200594651,
     95                                                                );
     96                                                                nextStack = (
     97                                                                        E1A087D10548746200594651,
     98                                                                );
     99                                                                prevStack = (
     100                                                                        E1375C560530898300FE8BF8,
     101                                                                        E103506C05355596002A18D1,
     102                                                                );
    85103                                                        };
    86104                                                        SplitCount = 1;
    87                                                         Tab1 = {
    88                                                                 Debugger = {
    89                                                                         Split0 = {
    90                                                                                 SplitCount = 2;
    91                                                                         };
    92                                                                         SplitCount = 1;
    93                                                                         TabCount = 2;
    94                                                                 };
    95                                                                 LauncherConfigVersion = 7;
    96                                                         };
    97                                                         Tab2 = {
    98                                                                 LauncherConfigVersion = 3;
    99                                                                 Runner = {
    100                                                                 };
    101                                                         };
    102                                                         TabCount = 5;
    103105                                                };
    104                                                 SplitCount = 1;
    105                                                 Tab1 = {
    106                                                         OptionsSetName = "Hierarchy, all classes";
     106                                                PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {595, 0}}";
     107                                                PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 0}, {595, 671}}";
     108                                                PBXProjectWorkspaceModule_OldSuperviewFrame = "{{180, 0}, {595, 671}}";
     109                                                PBXProjectWorkspaceModule_RunWindowVisible = true;
     110                                                PBXProjectWorkspaceModule_SGTM = {
     111                                                        PBXBottomSmartGroupGIDs = (
     112                                                                1C37FBAC04509CD000000102,
     113                                                                1C37FAAC04509CD000000102,
     114                                                                1C08E77C0454961000C914BD,
     115                                                                1CC0EA4004350EF90044410B,
     116                                                                1CC0EA4004350EF90041110B,
     117                                                                1C37FABC05509CD000000102,
     118                                                                1C37FABC05539CD112110102,
     119                                                                1C37FABC04509CD000100104,
     120                                                        );
     121                                                        PBXTopSmartGroupGIDs = (
     122                                                        );
    107123                                                };
    108                                                 TabCount = 5;
    109124                                        };
    110125                                },
    111126                                {
    112                                         LeftSlideOut = {
    113                                                 Split0 = {
     127                                        PBXProjectWorkspaceModule_StateKey_Rev36 = {
     128                                                PBXProjectWorkspaceModule_EditorOpen = true;
     129                                                PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
    114130                                                        Split0 = {
    115                                                                 NavContent0 = {
    116                                                                         bookmark = E17A87E50446BD4A00050002;
    117                                                                         history = (
    118                                                                                 E17A87E40446BD4A00050002,
    119                                                                         );
    120                                                                 };
    121                                                                 NavCount = 1;
    122                                                                 NavGeometry0 = {
    123                                                                         Frame = "{{0, 0}, {685, 150}}";
    124                                                                         NavBarVisible = YES;
    125                                                                 };
    126                                                                 NavSplitVertical = NO;
     131                                                                bookmark = E1A087D40548746200594651;
     132                                                                history = (
     133                                                                        E1A087D30548746200594651,
     134                                                                );
    127135                                                        };
    128136                                                        SplitCount = 1;
    129                                                         Tab1 = {
    130                                                                 Debugger = {
    131                                                                         Split0 = {
    132                                                                                 SplitCount = 2;
    133                                                                         };
    134                                                                         SplitCount = 1;
    135                                                                         TabCount = 2;
    136                                                                 };
    137                                                                 LauncherConfigVersion = 7;
    138                                                         };
    139                                                         Tab2 = {
    140                                                                 LauncherConfigVersion = 3;
    141                                                                 Runner = {
    142                                                                 };
    143                                                         };
    144                                                         TabCount = 5;
    145137                                                };
    146                                                 SplitCount = 1;
    147                                                 Tab1 = {
    148                                                         OptionsSetName = "Hierarchy, all classes";
     138                                                PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {600, 115}}";
     139                                                PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 115}, {600, 186}}";
     140                                                PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {600, 301}}";
     141                                                PBXProjectWorkspaceModule_SGTM = {
     142                                                        PBXBottomSmartGroupGIDs = (
     143                                                        );
     144                                                        PBXTopSmartGroupGIDs = (
     145                                                        );
    149146                                                };
    150                                                 TabCount = 5;
    151147                                        };
    152148                                },
    153149                        );
     150                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
     151                        };
     152                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = {
     153                        };
     154                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
     155                        };
     156                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
     157                        };
     158                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSingleDataValueViewModule" = {
     159                        };
     160                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
     161                                Split0 = {
     162                                        bookmark = E1A087CB0548731E00594651;
     163                                        history = (
     164                                                E1A087CA0548731E00594651,
     165                                        );
     166                                };
     167                                SplitCount = 1;
     168                        };
     169                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
     170                                PBXProjectWorkspaceModule_StateKey_Rev36 = {
     171                                        PBXProjectWorkspaceModule_EditorOpen = true;
     172                                        PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = {
     173                                                Split0 = {
     174                                                        bookmark = E1A087C60548731900594651;
     175                                                        history = (
     176                                                                E1A087C40548731800594651,
     177                                                        );
     178                                                };
     179                                                SplitCount = 1;
     180                                        };
     181                                        PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {600, 115}}";
     182                                        PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 115}, {600, 186}}";
     183                                        PBXProjectWorkspaceModule_OldSuperviewFrame = "{{0, 0}, {600, 301}}";
     184                                        PBXProjectWorkspaceModule_SGTM = {
     185                                                PBXBottomSmartGroupGIDs = (
     186                                                );
     187                                                PBXTopSmartGroupGIDs = (
     188                                                );
     189                                        };
     190                                };
     191                        };
     192                        "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
     193                        };
    154194                        PBXWorkspaceGeometries = (
    155195                                {
    156                                         ContentSize = "{967, 727}";
    157                                         LeftSlideOut = {
    158                                                 ActiveTab = 0;
    159                                                 ActiveTabName = PBXGroupTreeModule;
    160                                                 Collapsed = NO;
    161                                                 Frame = "{{0, 23}, {967, 704}}";
    162                                                 Split0 = {
    163                                                         Collapsed = NO;
    164                                                         Frame = "{{284, 0}, {683, 704}}";
    165                                                         Split0 = {
    166                                                                 Frame = "{{0, 0}, {683, 704}}";
    167                                                         };
    168                                                         SplitCount = 1;
    169                                                         Tab0 = {
    170                                                                 Frame = "{{0, 0}, {681, 289}}";
    171                                                         };
    172                                                         Tab1 = {
    173                                                                 Debugger = {
    174                                                                         Collapsed = NO;
    175                                                                         Frame = "{{0, 0}, {681, 150}}";
    176                                                                         Split0 = {
    177                                                                                 Frame = "{{0, 24}, {681, 126}}";
    178                                                                                 Split0 = {
    179                                                                                         Frame = "{{0, 0}, {333, 126}}";
    180                                                                                 };
    181                                                                                 Split1 = {
    182                                                                                         DebugVariablesTableConfiguration = (
    183                                                                                                 Name,
    184                                                                                                 123,
    185                                                                                                 Value,
    186                                                                                                 85,
    187                                                                                                 Summary,
    188                                                                                                 105.123,
    189                                                                                         );
    190                                                                                         Frame = "{{342, 0}, {339, 126}}";
    191                                                                                 };
    192                                                                                 SplitCount = 2;
    193                                                                         };
    194                                                                         SplitCount = 1;
    195                                                                         Tab0 = {
    196                                                                                 Frame = "{{0, 0}, {100, 50}}";
    197                                                                         };
    198                                                                         Tab1 = {
    199                                                                                 Frame = "{{0, 0}, {100, 50}}";
    200                                                                         };
    201                                                                         TabCount = 2;
    202                                                                         TabsVisible = YES;
    203                                                                 };
    204                                                                 Frame = "{{0, 0}, {681, 120}}";
    205                                                                 LauncherConfigVersion = 7;
    206                                                         };
    207                                                         Tab2 = {
    208                                                                 Frame = "{{0, 0}, {681, 234}}";
    209                                                                 LauncherConfigVersion = 3;
    210                                                                 Runner = {
    211                                                                         Frame = "{{0, 0}, {681, 234}}";
    212                                                                 };
    213                                                         };
    214                                                         Tab3 = {
    215                                                                 BuildMessageFrame = "{{0, 0}, {683, 205}}";
    216                                                                 BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
    217                                                                 BuildTranscriptFrameExpanded = YES;
    218                                                                 Frame = "{{0, 0}, {681, 238}}";
    219                                                         };
    220                                                         Tab4 = {
    221                                                                 Frame = "{{0, 0}, {612, 295}}";
    222                                                         };
    223                                                         TabCount = 5;
    224                                                         TabsVisible = NO;
    225                                                 };
    226                                                 SplitCount = 1;
    227                                                 Tab0 = {
    228                                                         Frame = "{{0, 0}, {260, 704}}";
    229                                                         GroupTreeTableConfiguration = (
    230                                                                 TargetStatusColumn,
    231                                                                 18,
    232                                                                 MainColumn,
    233                                                                 227,
     196                                        Frame = "{{0, 0}, {775, 691}}";
     197                                        PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
     198                                                PBXProjectWorkspaceModule_SGTM_Geometry = {
     199                                                        _collapsingFrameDimension = 182;
     200                                                        _indexOfCollapsedView = 0;
     201                                                        _percentageOfCollapsedView = 0.2363636;
     202                                                        sizes = (
     203                                                                "{{0, 0}, {180, 671}}",
     204                                                                "{{180, 0}, {595, 671}}",
    234205                                                        );
    235206                                                };
    236                                                 Tab1 = {
    237                                                         ClassesFrame = "{{0, 0}, {250, 333}}";
    238                                                         ClassesTreeTableConfiguration = (
    239                                                                 PBXBookColumnIdentifier,
    240                                                                 20,
    241                                                                 PBXClassColumnIdentifier,
    242                                                                 207,
    243                                                         );
    244                                                         Frame = "{{0, 0}, {248, 554}}";
    245                                                         MembersFrame = "{{0, 342}, {250, 212}}";
    246                                                         MembersTreeTableConfiguration = (
    247                                                                 PBXBookColumnIdentifier,
    248                                                                 20,
    249                                                                 PBXMethodColumnIdentifier,
    250                                                                 206,
     207                                        };
     208                                        WindowFrame = "{{8, 70}, {775, 753}}";
     209                                },
     210                                {
     211                                        Frame = "{{0, 0}, {600, 321}}";
     212                                        PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
     213                                                GroupTreeCollapsed = yes;
     214                                                PBXProjectWorkspaceModule_SGTM_Geometry = {
     215                                                        _collapsingFrameDimension = 182;
     216                                                        _indexOfCollapsedView = 0;
     217                                                        _percentageOfCollapsedView = 0.3033333;
     218                                                        sizes = (
     219                                                                "{{0, 0}, {600, 301}}",
    251220                                                        );
    252221                                                };
    253                                                 Tab2 = {
    254                                                         Frame = "{{0, 0}, {216, 554}}";
    255                                                 };
    256                                                 Tab3 = {
    257                                                         Frame = "{{0, 0}, {239, 554}}";
    258                                                         TargetTableConfiguration = (
    259                                                                 ActiveObject,
    260                                                                 16,
    261                                                                 ObjectNames,
    262                                                                 206.296,
    263                                                         );
    264                                                 };
    265                                                 Tab4 = {
    266                                                         BreakpointsTreeTableConfiguration = (
    267                                                                 breakpointColumn,
    268                                                                 197,
    269                                                                 enabledColumn,
    270                                                                 31,
    271                                                         );
    272                                                         Frame = "{{0, 0}, {250, 554}}";
    273                                                 };
    274                                                 TabCount = 5;
    275                                                 TabsVisible = YES;
    276222                                        };
    277                                         NavBarShownByDefault = YES;
    278                                         StatusViewVisible = YES;
    279                                         Template = 64ABBB4501FA494900185B06;
    280                                         ToolbarVisible = YES;
    281                                         WindowLocation = "{303, 43}";
    282                                 },
    283                                 {
    284                                         ContentSize = "{685, 434}";
    285                                         LeftSlideOut = {
    286                                                 Collapsed = NO;
    287                                                 Frame = "{{0, 23}, {685, 411}}";
    288                                                 Split0 = {
    289                                                         ActiveTab = 2;
    290                                                         ActiveTabName = PBXBuildResultsModule;
    291                                                         Collapsed = NO;
    292                                                         Frame = "{{0, 0}, {685, 411}}";
    293                                                         Split0 = {
    294                                                                 Frame = "{{0, 301}, {685, 110}}";
    295                                                         };
    296                                                         SplitCount = 1;
    297                                                         Tab0 = {
    298                                                                 Frame = "{{0, 0}, {952, 321}}";
    299                                                         };
    300                                                         Tab1 = {
    301                                                                 Debugger = {
    302                                                                         Collapsed = NO;
    303                                                                         Frame = "{{0, 0}, {781, 452}}";
    304                                                                         Split0 = {
    305                                                                                 Frame = "{{0, 24}, {781, 428}}";
    306                                                                                 Split0 = {
    307                                                                                         Frame = "{{0, 0}, {383, 428}}";
    308                                                                                 };
    309                                                                                 Split1 = {
    310                                                                                         DebugVariablesTableConfiguration = (
    311                                                                                                 Name,
    312                                                                                                 123,
    313                                                                                                 Value,
    314                                                                                                 85,
    315                                                                                                 Summary,
    316                                                                                                 155.123,
    317                                                                                         );
    318                                                                                         Frame = "{{392, 0}, {389, 428}}";
    319                                                                                 };
    320                                                                                 SplitCount = 2;
    321                                                                         };
    322                                                                         SplitCount = 1;
    323                                                                         Tab0 = {
    324                                                                                 Frame = "{{0, 0}, {100, 50}}";
    325                                                                         };
    326                                                                         Tab1 = {
    327                                                                                 Frame = "{{0, 0}, {100, 50}}";
    328                                                                         };
    329                                                                         TabCount = 2;
    330                                                                         TabsVisible = YES;
    331                                                                 };
    332                                                                 Frame = "{{0, 0}, {781, 452}}";
    333                                                                 LauncherConfigVersion = 7;
    334                                                         };
    335                                                         Tab2 = {
    336                                                                 Frame = "{{0, 0}, {685, 215}}";
    337                                                                 LauncherConfigVersion = 3;
    338                                                                 Runner = {
    339                                                                         Frame = "{{0, 0}, {685, 215}}";
    340                                                                 };
    341                                                         };
    342                                                         Tab3 = {
    343                                                                 BuildMessageFrame = "{{0, 0}, {687, 262}}";
    344                                                                 BuildTranscriptFrame = "{{0, 271}, {687, 2}}";
    345                                                                 BuildTranscriptFrameExpanded = YES;
    346                                                                 Frame = "{{0, 0}, {685, 295}}";
    347                                                         };
    348                                                         Tab4 = {
    349                                                                 Frame = "{{0, 0}, {612, 295}}";
    350                                                         };
    351                                                         TabCount = 5;
    352                                                         TabsVisible = NO;
    353                                                 };
    354                                                 SplitCount = 1;
    355                                                 Tab0 = {
    356                                                         Frame = "{{0, 0}, {300, 533}}";
    357                                                         GroupTreeTableConfiguration = (
    358                                                                 TargetStatusColumn,
    359                                                                 18,
    360                                                                 MainColumn,
    361                                                                 267,
    362                                                         );
    363                                                 };
    364                                                 Tab1 = {
    365                                                         ClassesFrame = "{{0, 0}, {280, 398}}";
    366                                                         ClassesTreeTableConfiguration = (
    367                                                                 PBXBookColumnIdentifier,
    368                                                                 20,
    369                                                                 PBXClassColumnIdentifier,
    370                                                                 237,
    371                                                         );
    372                                                         Frame = "{{0, 0}, {278, 659}}";
    373                                                         MembersFrame = "{{0, 407}, {280, 252}}";
    374                                                         MembersTreeTableConfiguration = (
    375                                                                 PBXBookColumnIdentifier,
    376                                                                 20,
    377                                                                 PBXMethodColumnIdentifier,
    378                                                                 236,
    379                                                         );
    380                                                 };
    381                                                 Tab2 = {
    382                                                         Frame = "{{0, 0}, {200, 100}}";
    383                                                 };
    384                                                 Tab3 = {
    385                                                         Frame = "{{0, 0}, {200, 100}}";
    386                                                         TargetTableConfiguration = (
    387                                                                 ActiveObject,
    388                                                                 16,
    389                                                                 ObjectNames,
    390                                                                 202.296,
    391                                                         );
    392                                                 };
    393                                                 Tab4 = {
    394                                                         BreakpointsTreeTableConfiguration = (
    395                                                                 breakpointColumn,
    396                                                                 197,
    397                                                                 enabledColumn,
    398                                                                 31,
    399                                                         );
    400                                                         Frame = "{{0, 0}, {250, 100}}";
    401                                                 };
    402                                                 TabCount = 5;
    403                                                 TabsVisible = NO;
    404                                         };
    405                                         NavBarShownByDefault = YES;
    406                                         StatusViewVisible = YES;
    407                                         Template = F5314676015831810DCA290F;
    408                                         ToolbarVisible = YES;
    409                                         WindowLocation = "{328, 75}";
     223                                        WindowFrame = "{{523, 63}, {600, 383}}";
    410224                                },
    411225                        );
    412                         PBXWorkspaceStateSaveDate = 71736398;
     226                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = {
     227                                Frame = "{{0, 0}, {480, 216}}";
     228                                WindowFrame = "{{790, 46}, {480, 294}}";
     229                        };
     230                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugBreakpointsModule" = {
     231                                BreakpointsTreeTableConfiguration = (
     232                                        enabledColumn,
     233                                        16,
     234                                        breakpointColumn,
     235                                        141.583,
     236                                );
     237                                Frame = "{{0, 0}, {180, 158}}";
     238                                WindowFrame = "{{62, 4}, {180, 180}}";
     239                        };
     240                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = {
     241                                Frame = "{{0, 0}, {500, 278}}";
     242                                WindowFrame = "{{200, 200}, {500, 300}}";
     243                        };
     244                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSessionModule" = {
     245                                DebugConsoleDrawerSize = "{100, 120}";
     246                                DebugConsoleVisible = None;
     247                                DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}";
     248                                DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}";
     249                                Frame = "{{0, 0}, {745, 442}}";
     250                                WindowFrame = "{{267, 311}, {745, 511}}";
     251                        };
     252                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSingleDataValueViewModule" = {
     253                                Frame = "{{0, 0}, {400, 66}}";
     254                                WindowFrame = "{{20, 632}, {400, 88}}";
     255                        };
     256                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = {
     257                                Frame = "{{0, 0}, {750, 480}}";
     258                                WindowFrame = "{{15, 325}, {750, 502}}";
     259                        };
     260                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = {
     261                                Frame = "{{0, 0}, {600, 321}}";
     262                                PBXProjectWorkspaceModule_GeometryKey_Rev11 = {
     263                                        GroupTreeCollapsed = yes;
     264                                        PBXProjectWorkspaceModule_SGTM_Geometry = {
     265                                                _collapsingFrameDimension = 182;
     266                                                _indexOfCollapsedView = 0;
     267                                                _percentageOfCollapsedView = 0.3033333;
     268                                                sizes = (
     269                                                        "{{0, 0}, {600, 301}}",
     270                                                );
     271                                        };
     272                                };
     273                                WindowFrame = "{{523, 63}, {600, 383}}";
     274                        };
     275                        "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = {
     276                                Frame = "{{0, 0}, {517, 227}}";
     277                                WindowFrame = "{{723, 149}, {517, 249}}";
     278                        };
     279                        PBXWorkspaceStateSaveDate = 88634057;
    413280                };
    414281                perUserProjectItems = {
    415                         E16C83C603F7980800050002 = E16C83C603F7980800050002;
    416                         E17A87CF0446BD4A00050002 = E17A87CF0446BD4A00050002;
    417                         E17A87D00446BD4A00050002 = E17A87D00446BD4A00050002;
    418                         E17A87D10446BD4A00050002 = E17A87D10446BD4A00050002;
    419                         E17A87D20446BD4A00050002 = E17A87D20446BD4A00050002;
    420                         E17A87D30446BD4A00050002 = E17A87D30446BD4A00050002;
    421                         E17A87D40446BD4A00050002 = E17A87D40446BD4A00050002;
    422                         E17A87D50446BD4A00050002 = E17A87D50446BD4A00050002;
    423                         E17A87D60446BD4A00050002 = E17A87D60446BD4A00050002;
    424                         E17A87D70446BD4A00050002 = E17A87D70446BD4A00050002;
    425                         E17A87D80446BD4A00050002 = E17A87D80446BD4A00050002;
    426                         E17A87D90446BD4A00050002 = E17A87D90446BD4A00050002;
    427                         E17A87DA0446BD4A00050002 = E17A87DA0446BD4A00050002;
    428                         E17A87DB0446BD4A00050002 = E17A87DB0446BD4A00050002;
    429                         E17A87DC0446BD4A00050002 = E17A87DC0446BD4A00050002;
    430                         E17A87DD0446BD4A00050002 = E17A87DD0446BD4A00050002;
    431                         E17A87DE0446BD4A00050002 = E17A87DE0446BD4A00050002;
    432                         E17A87DF0446BD4A00050002 = E17A87DF0446BD4A00050002;
    433                         E17A87E00446BD4A00050002 = E17A87E00446BD4A00050002;
    434                         E17A87E10446BD4A00050002 = E17A87E10446BD4A00050002;
    435                         E17A87E20446BD4A00050002 = E17A87E20446BD4A00050002;
    436                         E17A87E30446BD4A00050002 = E17A87E30446BD4A00050002;
    437                         E17A87E40446BD4A00050002 = E17A87E40446BD4A00050002;
    438                         E17A87E50446BD4A00050002 = E17A87E50446BD4A00050002;
    439                         E18D1CC8040C2AFC00050002 = E18D1CC8040C2AFC00050002;
    440                         E18D1CC9040C2AFC00050002 = E18D1CC9040C2AFC00050002;
    441                         E190CFFE03AAD96100AEFBE0 = E190CFFE03AAD96100AEFBE0;
    442                         E190CFFF03AAD96100AEFBE0 = E190CFFF03AAD96100AEFBE0;
    443                         E190D00203AAD96100AEFBE0 = E190D00203AAD96100AEFBE0;
    444                         E190D00403AAD96100AEFBE0 = E190D00403AAD96100AEFBE0;
    445                         E190D00503AAD96100AEFBE0 = E190D00503AAD96100AEFBE0;
    446                         E190D00603AAD96100AEFBE0 = E190D00603AAD96100AEFBE0;
    447                         E190D00703AAD96100AEFBE0 = E190D00703AAD96100AEFBE0;
    448                         E190D00803AAD96100AEFBE0 = E190D00803AAD96100AEFBE0;
    449                         E190D00903AAD96100AEFBE0 = E190D00903AAD96100AEFBE0;
    450                         E190D01403ABB17800AEFBE0 = E190D01403ABB17800AEFBE0;
    451                         E190D01503ABB17800AEFBE0 = E190D01503ABB17800AEFBE0;
    452                         E190D01603ABB17800AEFBE0 = E190D01603ABB17800AEFBE0;
    453                         E190D01703ABB17800AEFBE0 = E190D01703ABB17800AEFBE0;
    454                         E190D01803ABB17800AEFBE0 = E190D01803ABB17800AEFBE0;
    455                         E190D01903ABB17800AEFBE0 = E190D01903ABB17800AEFBE0;
    456                         E190D01A03ABB17800AEFBE0 = E190D01A03ABB17800AEFBE0;
    457                         E190D01B03ABB17800AEFBE0 = E190D01B03ABB17800AEFBE0;
    458                         E190D01C03ABB17800AEFBE0 = E190D01C03ABB17800AEFBE0;
    459                         E190D01D03ABB17800AEFBE0 = E190D01D03ABB17800AEFBE0;
    460                         E190D01E03ABB17800AEFBE0 = E190D01E03ABB17800AEFBE0;
    461                         E190D02303ABB17800AEFBE0 = E190D02303ABB17800AEFBE0;
    462                         E190D02603ABB17800AEFBE0 = E190D02603ABB17800AEFBE0;
    463                         E190D02803ABB17800AEFBE0 = E190D02803ABB17800AEFBE0;
    464                         E190D02903ABB17800AEFBE0 = E190D02903ABB17800AEFBE0;
    465                         E190D02B03ABB17800AEFBE0 = E190D02B03ABB17800AEFBE0;
    466                 };
    467                 projectwideBuildSettings = {
    468                 };
     282                        E103506B05355596002A18D1 = E103506B05355596002A18D1;
     283                        E103506C05355596002A18D1 = E103506C05355596002A18D1;
     284                        E11E9B8E0544EE7900045D4F = E11E9B8E0544EE7900045D4F;
     285                        E11E9B8F0544EE7900045D4F = E11E9B8F0544EE7900045D4F;
     286                        E1375C530530898300FE8BF8 = E1375C530530898300FE8BF8;
     287                        E1375C560530898300FE8BF8 = E1375C560530898300FE8BF8;
     288                        E1A087BB0548731500594651 = E1A087BB0548731500594651;
     289                        E1A087CE0548746200594651 = E1A087CE0548746200594651;
     290                        E1A087CF0548746200594651 = E1A087CF0548746200594651;
     291                        E1A087D00548746200594651 = E1A087D00548746200594651;
     292                        E1A087D10548746200594651 = E1A087D10548746200594651;
     293                        E1A087D20548746200594651 = E1A087D20548746200594651;
     294                        E1A087D30548746200594651 = E1A087D30548746200594651;
     295                        E1A087D40548746200594651 = E1A087D40548746200594651;
     296                };
     297                sourceControlManager = E14C945E052A896100142529;
    469298                userBookmarkGroup = E190CFF903AAA80600AEFBE0;
    470                 wantsIndex = 1;
    471                 wantsSCM = 0;
     299                userBuildSettings = {
     300                };
    472301        };
    473302        08FB7796FE84155DC02AAC07 = {
    474303                uiCtxt = {
    475                         sepNavWindowFrame = "{{15, 495}, {750, 502}}";
     304                        sepNavIntBoundsRect = "{{0, 0}, {559, 13579}}";
     305                        sepNavSelRange = "{33212, 0}";
     306                        sepNavVisRect = "{{0, 12355}, {559, 169}}";
     307                        sepNavWindowFrame = "{{265, 76}, {725, 703}}";
    476308                };
    477309        };
     
    482314                );
    483315        };
    484         E16C83C603F7980800050002 = {
    485                 fRef = F5C0CA9501B5740C01AEEDB1;
    486                 isa = PBXTextBookmark;
    487                 name = "README: 1";
    488                 rLen = 0;
    489                 rLoc = 0;
    490                 rType = 0;
    491                 vrLen = 1585;
    492                 vrLoc = 0;
    493         };
    494         E17A87CF0446BD4A00050002 = {
    495                 fRef = E17A87E80446BD4A00050002;
    496                 glyphRangeLength = 375;
    497                 glyphRangeLocation = 1432;
    498                 isa = PBXDocBookmark;
    499                 name = "Miscellaneou17456789101112.html: FSRef newRef...";
    500         };
    501         E17A87D00446BD4A00050002 = {
    502                 fRef = E17A87EA0446BD4A00050002;
    503                 isa = PBXTextBookmark;
    504                 name = "CFURL.h: 282";
    505                 rLen = 58;
    506                 rLoc = 13157;
    507                 rType = 0;
    508                 vrLen = 1459;
    509                 vrLoc = 11853;
    510         };
    511         E17A87D10446BD4A00050002 = {
    512                 fRef = E17A87EB0446BD4A00050002;
    513                 glyphRangeLength = 2251;
    514                 glyphRangeLocation = 6098;
    515                 isa = PBXDocBookmark;
    516                 name = "Reading_Reso__Into_Memory.html: Handle GetRe...";
    517         };
    518         E17A87D20446BD4A00050002 = {
    519                 fRef = E17A87E90446BD4A00050002;
    520                 isa = PBXTextBookmark;
    521                 name = "Resources.h: 345";
    522                 rLen = 12;
    523                 rLoc = 9749;
    524                 rType = 0;
    525                 vrLen = 1176;
    526                 vrLoc = 9312;
    527         };
    528         E17A87D30446BD4A00050002 = {
    529                 fRef = E17A87EC0446BD4A00050002;
    530                 isa = PBXTextBookmark;
    531                 name = "memory: 1";
    532                 rLen = 0;
    533                 rLoc = 0;
    534                 rType = 0;
    535                 vrLen = 2067;
    536                 vrLoc = 0;
    537         };
    538         E17A87D40446BD4A00050002 = {
    539                 fRef = E17A87ED0446BD4A00050002;
    540                 isa = PBXTextBookmark;
    541                 name = "CFData.h: 21";
    542                 rLen = 0;
    543                 rLoc = 395;
    544                 rType = 0;
    545                 vrLen = 1169;
    546                 vrLoc = 0;
    547         };
    548         E17A87D50446BD4A00050002 = {
    549                 fRef = E17A87EE0446BD4A00050002;
    550                 isa = PBXTextBookmark;
    551                 name = "CFBase.h: 125";
    552                 rLen = 0;
    553                 rLoc = 3306;
    554                 rType = 0;
    555                 vrLen = 1468;
    556                 vrLoc = 4163;
    557         };
    558         E17A87D60446BD4A00050002 = {
    559                 fRef = E17A87EF0446BD4A00050002;
    560                 isa = PBXTextBookmark;
    561                 name = "CFDictionary.h: 516";
    562                 rLen = 76;
    563                 rLoc = 25628;
    564                 rType = 0;
    565                 vrLen = 2298;
    566                 vrLoc = 24570;
    567         };
    568         E17A87D70446BD4A00050002 = {
    569                 fRef = E17A87F00446BD4A00050002;
    570                 isa = PBXTextBookmark;
    571                 name = "CFPropertyList.h: 19";
    572                 rLen = 0;
    573                 rLoc = 449;
    574                 rType = 0;
    575                 vrLen = 1661;
    576                 vrLoc = 0;
    577         };
    578         E17A87D80446BD4A00050002 = {
    579                 fRef = E17A87F10446BD4A00050002;
    580                 isa = PBXTextBookmark;
    581                 name = "CFBundle.h: 99";
    582                 rLen = 0;
    583                 rLoc = 3680;
    584                 rType = 0;
    585                 vrLen = 1808;
    586                 vrLoc = 1718;
    587         };
    588         E17A87D90446BD4A00050002 = {
    589                 fRef = E17A87F20446BD4A00050002;
    590                 isa = PBXTextBookmark;
    591                 name = "MacMemory.h: 815";
    592                 rLen = 105;
    593                 rLoc = 21843;
    594                 rType = 0;
    595                 vrLen = 1330;
    596                 vrLoc = 21226;
    597         };
    598         E17A87DA0446BD4A00050002 = {
    599                 fRef = E17A87E60446BD4A00050002;
    600                 isa = PBXTextBookmark;
    601                 name = "CFString.h: 143";
    602                 rLen = 116;
    603                 rLoc = 6615;
    604                 rType = 0;
    605                 vrLen = 2410;
    606                 vrLoc = 5535;
    607         };
    608         E17A87DB0446BD4A00050002 = {
    609                 fRef = E17A87E70446BD4A00050002;
    610                 isa = PBXTextBookmark;
    611                 name = "MacTypes.h: 568";
    612                 rLen = 59;
    613                 rLoc = 23905;
    614                 rType = 0;
    615                 vrLen = 2364;
    616                 vrLoc = 22870;
    617         };
    618         E17A87DC0446BD4A00050002 = {
    619                 fRef = F5C0CA9501B5740C01AEEDB1;
    620                 isa = PBXTextBookmark;
    621                 name = "README: 227";
    622                 rLen = 0;
    623                 rLoc = 7729;
    624                 rType = 0;
    625                 vrLen = 1764;
    626                 vrLoc = 7580;
    627         };
    628         E17A87DD0446BD4A00050002 = {
    629                 fRef = F574340B01B8A47B01AEEDB1;
    630                 isa = PBXTextBookmark;
    631                 name = "VERSION: 1";
    632                 rLen = 0;
    633                 rLoc = 3;
    634                 rType = 0;
    635                 vrLen = 3;
    636                 vrLoc = 0;
    637         };
    638         E17A87DE0446BD4A00050002 = {
    639                 fRef = 08FB7796FE84155DC02AAC07;
    640                 isa = PBXTextBookmark;
    641                 name = "main.c: printInfoFromURL";
    642                 rLen = 0;
    643                 rLoc = 27861;
    644                 rType = 0;
    645                 vrLen = 3053;
    646                 vrLoc = 26387;
    647         };
    648         E17A87DF0446BD4A00050002 = {
    649                 fRef = 08FB7796FE84155DC02AAC07;
    650                 isa = PBXTextBookmark;
    651                 name = "main.c: printInfoFromURL";
    652                 rLen = 0;
    653                 rLoc = 29655;
    654                 rType = 0;
    655                 vrLen = 1523;
    656                 vrLoc = 26297;
    657         };
    658         E17A87E00446BD4A00050002 = {
    659                 fRef = F5C0CA9501B5740C01AEEDB1;
    660                 isa = PBXTextBookmark;
    661                 name = "README: 228";
    662                 rLen = 0;
    663                 rLoc = 7899;
    664                 rType = 0;
    665                 vrLen = 1387;
    666                 vrLoc = 7538;
    667         };
    668         E17A87E10446BD4A00050002 = {
    669                 fRef = 08FB7796FE84155DC02AAC07;
    670                 isa = PBXTextBookmark;
    671                 name = "main.c: printInfoFromURL";
    672                 rLen = 0;
    673                 rLoc = 27861;
    674                 rType = 0;
    675                 vrLen = 3053;
    676                 vrLoc = 26387;
    677         };
    678         E17A87E20446BD4A00050002 = {
    679                 fRef = F574340B01B8A47B01AEEDB1;
    680                 isa = PBXTextBookmark;
    681                 name = "VERSION: 1";
    682                 rLen = 0;
    683                 rLoc = 3;
    684                 rType = 0;
    685                 vrLen = 3;
    686                 vrLoc = 0;
    687         };
    688         E17A87E30446BD4A00050002 = {
    689                 fRef = 08FB7796FE84155DC02AAC07;
    690                 isa = PBXTextBookmark;
    691                 name = "main.c: osstatusstr";
    692                 rLen = 0;
    693                 rLoc = 6606;
    694                 rType = 0;
    695                 vrLen = 2056;
    696                 vrLoc = 286;
    697         };
    698         E17A87E40446BD4A00050002 = {
    699                 fRef = 08FB7796FE84155DC02AAC07;
    700                 isa = PBXTextBookmark;
    701                 rLen = 0;
    702                 rLoc = 715;
    703                 rType = 1;
    704         };
    705         E17A87E50446BD4A00050002 = {
    706                 fRef = 08FB7796FE84155DC02AAC07;
    707                 isa = PBXTextBookmark;
    708                 name = "main.c: printInfoFromURL";
    709                 rLen = 0;
    710                 rLoc = 29672;
    711                 rType = 0;
    712                 vrLen = 419;
    713                 vrLoc = 26900;
    714         };
    715         E17A87E60446BD4A00050002 = {
     316        E103506B05355596002A18D1 = {
     317                fRef = E1375C5D0530898300FE8BF8;
     318                isa = PBXTextBookmark;
     319                name = "LSOpen.h: 241";
     320                rLen = 0;
     321                rLoc = 8490;
     322                rType = 0;
     323                vrLen = 1029;
     324                vrLoc = 7546;
     325        };
     326        E103506C05355596002A18D1 = {
     327                fRef = E1375C5D0530898300FE8BF8;
     328                isa = PBXTextBookmark;
     329                name = "LSOpen.h: 241";
     330                rLen = 0;
     331                rLoc = 8490;
     332                rType = 0;
     333                vrLen = 1029;
     334                vrLoc = 7546;
     335        };
     336        E103508E0535B52C002A18D1 = {
    716337                isa = PBXFileReference;
    717338                name = CFString.h;
    718339                path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFString.h;
    719340                refType = 0;
    720         };
    721         E17A87E70446BD4A00050002 = {
    722                 isa = PBXFileReference;
    723                 name = MacTypes.h;
    724                 path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacTypes.h;
    725                 refType = 0;
    726         };
    727         E17A87E80446BD4A00050002 = {
    728                 isa = PBXFileReference;
    729                 name = Miscellaneou17456789101112.html;
    730                 path = /Developer/Documentation/Carbon/Files/ResourceManager/Resource_Manager/Functions/Miscellaneou17456789101112.html;
    731                 refType = 0;
    732         };
    733         E17A87E90446BD4A00050002 = {
    734                 isa = PBXFileReference;
    735                 name = Resources.h;
    736                 path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Resources.h;
    737                 refType = 0;
    738         };
    739         E17A87EA0446BD4A00050002 = {
     341                sourceTree = "<absolute>";
     342        };
     343        E11E9B8E0544EE7900045D4F = {
     344                fRef = E11E9B950544EE9700045D4F;
     345                isa = PBXTextBookmark;
     346                name = "(null): 158";
     347                rLen = 0;
     348                rLoc = 8234;
     349                rType = 0;
     350                vrLen = 1977;
     351                vrLoc = 6660;
     352        };
     353        E11E9B8F0544EE7900045D4F = {
     354                fRef = E103508E0535B52C002A18D1;
     355                isa = PBXTextBookmark;
     356                name = "CFString.h: CFStringCreateWithCString";
     357                rLen = 16;
     358                rLoc = 6861;
     359                rType = 0;
     360                vrLen = 2215;
     361                vrLoc = 5649;
     362        };
     363        E11E9B940544EE9700045D4F = {
     364                expectedFileType = sourcecode.c.h;
    740365                isa = PBXFileReference;
    741366                name = CFURL.h;
    742367                path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFURL.h;
    743368                refType = 0;
    744         };
    745         E17A87EB0446BD4A00050002 = {
    746                 isa = PBXFileReference;
    747                 name = Reading_Reso__Into_Memory.html;
    748                 path = /Developer/Documentation/Carbon/Files/ResourceManager/Resource_Manager/Functions/Reading_Reso__Into_Memory.html;
    749                 refType = 0;
    750         };
    751         E17A87EC0446BD4A00050002 = {
    752                 isa = PBXFileReference;
    753                 name = memory;
    754                 path = "/usr/include/gcc/darwin/3.1/g++-v3/memory";
    755                 refType = 0;
    756         };
    757         E17A87ED0446BD4A00050002 = {
    758                 isa = PBXFileReference;
    759                 name = CFData.h;
    760                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFData.h;
    761                 refType = 0;
    762         };
    763         E17A87EE0446BD4A00050002 = {
    764                 isa = PBXFileReference;
    765                 name = CFBase.h;
    766                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBase.h;
    767                 refType = 0;
    768         };
    769         E17A87EF0446BD4A00050002 = {
    770                 isa = PBXFileReference;
    771                 name = CFDictionary.h;
    772                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFDictionary.h;
    773                 refType = 0;
    774         };
    775         E17A87F00446BD4A00050002 = {
    776                 isa = PBXFileReference;
    777                 name = CFPropertyList.h;
    778                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFPropertyList.h;
    779                 refType = 0;
    780         };
    781         E17A87F10446BD4A00050002 = {
    782                 isa = PBXFileReference;
    783                 name = CFBundle.h;
    784                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBundle.h;
    785                 refType = 0;
    786         };
    787         E17A87F20446BD4A00050002 = {
    788                 isa = PBXFileReference;
    789                 name = MacMemory.h;
    790                 path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacMemory.h;
    791                 refType = 0;
    792         };
    793         E18D1CC8040C2AFC00050002 = {
    794                 fRef = F5C0CA9501B5740C01AEEDB1;
    795                 isa = PBXTextBookmark;
    796                 name = "README: 236";
    797                 rLen = 0;
    798                 rLoc = 8342;
    799                 rType = 0;
    800                 vrLen = 1380;
    801                 vrLoc = 7710;
    802         };
    803         E18D1CC9040C2AFC00050002 = {
    804                 fRef = E18D1CCF040C2AFC00050002;
    805                 isa = PBXTextBookmark;
    806                 name = "CFBundle.h: 102";
    807                 rLen = 24;
    808                 rLoc = 3704;
    809                 rType = 0;
    810                 vrLen = 1174;
    811                 vrLoc = 3020;
    812         };
    813         E18D1CCF040C2AFC00050002 = {
    814                 isa = PBXFileReference;
    815                 name = CFBundle.h;
    816                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFBundle.h;
    817                 refType = 0;
     369                sourceTree = "<absolute>";
     370                uiCtxt = {
     371                        sepNavIntBoundsRect = "{{0, 0}, {554, 6019}}";
     372                        sepNavSelRange = "{18538, 58}";
     373                        sepNavVisRect = "{{0, 5362}, {554, 654}}";
     374                };
     375        };
     376        E11E9B950544EE9700045D4F = {
     377                isa = PBXFileReference;
     378                name = CFStringEncodingExt.h;
     379                path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFStringEncodingExt.h;
     380                refType = 0;
     381                sourceTree = "<absolute>";
     382        };
     383        E11E9B960544EE9700045D4F = {
     384                expectedFileType = sourcecode.c.h;
     385                isa = PBXFileReference;
     386                name = LSOpen.h;
     387                path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LSOpen.h;
     388                refType = 0;
     389                sourceTree = "<absolute>";
     390                uiCtxt = {
     391                        sepNavIntBoundsRect = "{{0, 0}, {578, 3891}}";
     392                        sepNavSelRange = "{2548, 27}";
     393                        sepNavVisRect = "{{0, 856}, {578, 654}}";
     394                };
     395        };
     396        E1375C530530898300FE8BF8 = {
     397                fRef = E1375C5C0530898300FE8BF8;
     398                isa = PBXTextBookmark;
     399                name = "(null): 1";
     400                rLen = 0;
     401                rLoc = 0;
     402                rType = 0;
     403                vrLen = 688;
     404                vrLoc = 0;
     405        };
     406        E1375C560530898300FE8BF8 = {
     407                fRef = E1375C5B0530898300FE8BF8;
     408                isa = PBXTextBookmark;
     409                name = "(null): 1";
     410                rLen = 0;
     411                rLoc = 0;
     412                rType = 0;
     413                vrLen = 688;
     414                vrLoc = 0;
     415        };
     416        E1375C5B0530898300FE8BF8 = {
     417                isa = PBXFileReference;
     418                name = LaunchServices.h;
     419                path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LaunchServices.h;
     420                refType = 0;
     421                sourceTree = "<absolute>";
     422        };
     423        E1375C5C0530898300FE8BF8 = {
     424                isa = PBXFileReference;
     425                name = LaunchServices.h;
     426                path = /Developer/SDKs/MacOSX10.2.7.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LaunchServices.h;
     427                refType = 0;
     428                sourceTree = "<absolute>";
     429        };
     430        E1375C5D0530898300FE8BF8 = {
     431                isa = PBXFileReference;
     432                name = LSOpen.h;
     433                path = /Developer/SDKs/MacOSX10.3.0.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Headers/LSOpen.h;
     434                refType = 0;
     435                sourceTree = "<absolute>";
     436        };
     437        E14C945E052A896100142529 = {
     438                isa = PBXSourceControlManager;
     439                scmConfiguration = {
     440                };
     441                scmType = scm.cvs;
     442        };
     443        E14C945F052A896100142529 = {
     444                indexTemplatePath = "";
     445                isa = PBXCodeSenseManager;
     446                usesDefaults = 1;
     447                wantsCodeCompletion = 1;
     448                wantsCodeCompletionAutoPopup = 0;
     449                wantsCodeCompletionAutoSuggestions = 0;
     450                wantsCodeCompletionCaseSensitivity = 1;
     451                wantsCodeCompletionOnlyMatchingItems = 1;
     452                wantsCodeCompletionParametersIncluded = 1;
     453                wantsCodeCompletionPlaceholdersInserted = 1;
     454                wantsCodeCompletionTabCompletes = 1;
     455                wantsIndex = 1;
     456        };
     457        E14C949A052A8B0600142529 = {
     458                fileReference = 08FB7796FE84155DC02AAC07;
     459                isa = PBXFileBreakpoint;
     460                lineNumber = 674;
     461                state = 1;
    818462        };
    819463        E190CFF903AAA80600AEFBE0 = {
     
    829473                name = "handle URL/file arguments";
    830474                rLen = 0;
    831                 rLoc = 17797;
     475                rLoc = 17894;
    832476                rType = 0;
    833477                vrLen = 1773;
    834478                vrLoc = 14523;
    835479        };
    836         E190CFFD03AAA8A300AEFBE0 = {
    837                 fileReference = 08FB7796FE84155DC02AAC07;
    838                 isa = PBXFileBreakpoint;
    839                 lineNumber = 479;
    840                 state = 1;
    841         };
    842         E190CFFE03AAD96100AEFBE0 = {
    843                 isa = PBXTargetBookmark;
    844                 trg = 08FB779FFE84155DC02AAC07;
    845         };
    846         E190CFFF03AAD96100AEFBE0 = {
    847                 exec = F561F49E0139D79101AEEDB1;
    848                 isa = PBXExecutableBookmark;
    849         };
    850         E190D00203AAD96100AEFBE0 = {
    851                 fRef = E190D00E03AAD96100AEFBE0;
    852                 glyphRangeLength = 886;
    853                 glyphRangeLocation = 314;
    854                 isa = PBXDocBookmark;
    855                 name = "Miscellaneous234567891011.html: Adds the val...";
    856         };
    857         E190D00403AAD96100AEFBE0 = {
    858                 isa = PBXTargetBookmark;
    859                 trg = 08FB779FFE84155DC02AAC07;
    860         };
    861         E190D00503AAD96100AEFBE0 = {
    862                 exec = F561F49E0139D79101AEEDB1;
    863                 isa = PBXExecutableBookmark;
    864         };
    865         E190D00603AAD96100AEFBE0 = {
    866                 isa = PBXTargetBookmark;
    867                 trg = 08FB779FFE84155DC02AAC07;
    868         };
    869         E190D00703AAD96100AEFBE0 = {
    870                 isa = PBXTargetBookmark;
    871                 trg = 08FB779FFE84155DC02AAC07;
    872         };
    873         E190D00803AAD96100AEFBE0 = {
    874                 exec = F561F49E0139D79101AEEDB1;
    875                 isa = PBXExecutableBookmark;
    876         };
    877         E190D00903AAD96100AEFBE0 = {
    878                 fRef = E190D01003AAD96100AEFBE0;
    879                 isa = PBXTextBookmark;
    880                 name = "CFString.h: 146";
    881                 rLen = 25;
    882                 rLoc = 6754;
     480        E1A087BB0548731500594651 = {
     481                fRef = E11E9B960544EE9700045D4F;
     482                isa = PBXTextBookmark;
     483                name = "LSOpen.h: LSLaunchFSRefSpec";
     484                rLen = 27;
     485                rLoc = 2548;
     486                rType = 0;
     487                vrLen = 2176;
     488                vrLoc = 1426;
     489        };
     490        E1A087C80548731D00594651 = {
     491                expectedFileType = sourcecode.c.c;
     492                isa = PBXFileReference;
     493                name = main.c;
     494                path = /Volumes/Ti/Users/nicholas/Documents/Development/launch/launch/main.c;
     495                refType = 0;
     496                sourceTree = "<absolute>";
     497        };
     498        E1A087CE0548746200594651 = {
     499                fRef = E11E9B940544EE9700045D4F;
     500                isa = PBXTextBookmark;
     501                name = "CFURL.h: CFURLGetFSRef";
     502                rLen = 58;
     503                rLoc = 18538;
    883504                rType = 0;
    884505                vrLen = 1812;
    885                 vrLoc = 6085;
    886         };
    887         E190D00E03AAD96100AEFBE0 = {
    888                 isa = PBXFileReference;
    889                 name = Miscellaneous234567891011.html;
    890                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/CollectionServices/Collection_Services/Functions/Miscellaneous234567891011.html;
    891                 refType = 0;
    892         };
    893         E190D01003AAD96100AEFBE0 = {
    894                 isa = PBXFileReference;
    895                 name = CFString.h;
    896                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFString.h;
    897                 refType = 0;
    898         };
    899         E190D01403ABB17800AEFBE0 = {
    900                 fRef = E190D03803ABB17800AEFBE0;
    901                 isa = PBXTextBookmark;
    902                 name = "CFArray.h: 1";
    903                 rLen = 0;
    904                 rLoc = 0;
    905                 rType = 0;
    906                 vrLen = 1987;
    907                 vrLoc = 18422;
    908         };
    909         E190D01503ABB17800AEFBE0 = {
    910                 fRef = E190D03E03ABB17800AEFBE0;
    911                 glyphRangeLength = 682;
    912                 glyphRangeLocation = 46353;
    913                 isa = PBXDocBookmark;
    914                 name = "Miscellaneous.html: Creates an i...";
    915         };
    916         E190D01603ABB17800AEFBE0 = {
    917                 fRef = E190D03903ABB17800AEFBE0;
    918                 glyphRangeLength = 765;
    919                 glyphRangeLocation = 0;
    920                 isa = PBXDocBookmark;
    921                 name = "FSCatalogInfo.html: PATHDocument...";
    922         };
    923         E190D01703ABB17800AEFBE0 = {
    924                 fRef = E190D03F03ABB17800AEFBE0;
    925                 isa = PBXTextBookmark;
    926                 name = "Finder.h: 245";
    927                 rLen = 0;
    928                 rLoc = 10667;
    929                 rType = 0;
    930                 vrLen = 1889;
    931                 vrLoc = 9430;
    932         };
    933         E190D01803ABB17800AEFBE0 = {
    934                 fRef = E190D04003ABB17800AEFBE0;
    935                 isa = PBXTextBookmark;
    936                 name = "unistd.h: 180";
    937                 rLen = 28;
    938                 rLoc = 6936;
    939                 rType = 0;
    940                 vrLen = 1346;
    941                 vrLoc = 6238;
    942         };
    943         E190D01903ABB17800AEFBE0 = {
    944                 fRef = E190D04103ABB17800AEFBE0;
    945                 glyphRangeLength = 1207;
    946                 glyphRangeLocation = 99;
    947                 isa = PBXDocBookmark;
    948                 name = "Accessing_In__Directories.html: Returns cata...";
    949         };
    950         E190D01A03ABB17800AEFBE0 = {
    951                 fRef = E190D03003ABB17800AEFBE0;
    952                 isa = PBXTextBookmark;
    953                 name = "stat.h: 1";
    954                 rLen = 0;
    955                 rLoc = 0;
    956                 rType = 0;
    957                 vrLen = 1792;
    958                 vrLoc = 3421;
    959         };
    960         E190D01B03ABB17800AEFBE0 = {
    961                 fRef = E190D03103ABB17800AEFBE0;
    962                 isa = PBXTextBookmark;
    963                 name = "Files.h: 5736";
    964                 rLen = 105;
    965                 rLoc = 193930;
    966                 rType = 0;
    967                 vrLen = 1145;
    968                 vrLoc = 193348;
    969         };
    970         E190D01C03ABB17800AEFBE0 = {
    971                 fRef = E190D03203ABB17800AEFBE0;
    972                 isa = PBXTextBookmark;
    973                 name = "stdio.h: 301";
    974                 rLen = 0;
    975                 rLoc = 11200;
    976                 rType = 0;
    977                 vrLen = 1154;
    978                 vrLoc = 10552;
    979         };
    980         E190D01D03ABB17800AEFBE0 = {
    981                 fRef = E190D03303ABB17800AEFBE0;
    982                 glyphRangeLength = 702;
    983                 glyphRangeLocation = 18151;
    984                 isa = PBXDocBookmark;
    985                 name = "Miscellaneou39456789101112.html: Creates a ne...";
    986         };
    987         E190D01E03ABB17800AEFBE0 = {
    988                 fRef = E190D03403ABB17800AEFBE0;
    989                 isa = PBXTextBookmark;
    990                 name = "string.h: 78";
    991                 rLen = 42;
    992                 rLoc = 3286;
    993                 rType = 0;
    994                 vrLen = 1261;
    995                 vrLoc = 2846;
    996         };
    997         E190D02303ABB17800AEFBE0 = {
    998                 fRef = E190D03D03ABB17800AEFBE0;
    999                 isa = PBXTextBookmark;
    1000                 name = "InternetConfig.h: 1";
    1001                 rLen = 0;
    1002                 rLoc = 0;
    1003                 rType = 0;
    1004                 vrLen = 1212;
    1005                 vrLoc = 5916;
    1006         };
    1007         E190D02603ABB17800AEFBE0 = {
    1008                 fRef = E190D03603ABB17800AEFBE0;
    1009                 glyphRangeLength = 682;
    1010                 glyphRangeLocation = 46353;
    1011                 isa = PBXDocBookmark;
    1012                 name = "Miscellaneous.html: Creates an i...";
    1013         };
    1014         E190D02803ABB17800AEFBE0 = {
    1015                 fRef = E190D03A03ABB17800AEFBE0;
    1016                 isa = PBXTextBookmark;
    1017                 name = "Files.h: 3008";
    1018                 rLen = 16;
    1019                 rLoc = 102224;
    1020                 rType = 0;
    1021                 vrLen = 1154;
    1022                 vrLoc = 101600;
    1023         };
    1024         E190D02903ABB17800AEFBE0 = {
    1025                 fRef = E190D04203ABB17800AEFBE0;
    1026                 glyphRangeLength = 1207;
    1027                 glyphRangeLocation = 99;
    1028                 isa = PBXDocBookmark;
    1029                 name = "Accessing_In__Directories.html: Returns cata...";
    1030         };
    1031         E190D02B03ABB17800AEFBE0 = {
    1032                 fRef = E190D03503ABB17800AEFBE0;
    1033                 isa = PBXTextBookmark;
    1034                 name = "InternetConfig.h: 1";
    1035                 rLen = 0;
    1036                 rLoc = 0;
    1037                 rType = 0;
    1038                 vrLen = 1212;
    1039                 vrLoc = 5916;
    1040         };
    1041         E190D03003ABB17800AEFBE0 = {
    1042                 isa = PBXFileReference;
    1043                 name = stat.h;
    1044                 path = /usr/include/sys/stat.h;
    1045                 refType = 0;
    1046         };
    1047         E190D03103ABB17800AEFBE0 = {
     506                vrLoc = 16881;
     507        };
     508        E1A087CF0548746200594651 = {
     509                fRef = E1A087D50548746200594651;
     510                isa = PBXTextBookmark;
     511                name = "(null): 5155";
     512                rLen = 0;
     513                rLoc = 175675;
     514                rType = 0;
     515                vrLen = 2070;
     516                vrLoc = 174398;
     517        };
     518        E1A087D00548746200594651 = {
     519                fRef = 08FB7796FE84155DC02AAC07;
     520                isa = PBXTextBookmark;
     521                name = "main.c: 805";
     522                rLen = 5;
     523                rLoc = 33076;
     524                rType = 0;
     525                vrLen = 1438;
     526                vrLoc = 31911;
     527        };
     528        E1A087D10548746200594651 = {
     529                fRef = E1A087D60548746200594651;
     530                isa = PBXTextBookmark;
     531                name = "(null): 5155";
     532                rLen = 0;
     533                rLoc = 175675;
     534                rType = 0;
     535                vrLen = 2070;
     536                vrLoc = 174398;
     537        };
     538        E1A087D20548746200594651 = {
     539                fRef = 08FB7796FE84155DC02AAC07;
     540                isa = PBXTextBookmark;
     541                name = "main.c: 805";
     542                rLen = 0;
     543                rLoc = 33089;
     544                rType = 0;
     545                vrLen = 1436;
     546                vrLoc = 31909;
     547        };
     548        E1A087D30548746200594651 = {
     549                fRef = E1A087C80548731D00594651;
     550                isa = PBXTextBookmark;
     551                rLen = 1;
     552                rLoc = 808;
     553                rType = 1;
     554        };
     555        E1A087D40548746200594651 = {
     556                fRef = 08FB7796FE84155DC02AAC07;
     557                isa = PBXTextBookmark;
     558                name = "main.c: 809";
     559                rLen = 0;
     560                rLoc = 33212;
     561                rType = 0;
     562                vrLen = 325;
     563                vrLoc = 33020;
     564        };
     565        E1A087D50548746200594651 = {
    1048566                isa = PBXFileReference;
    1049567                name = Files.h;
    1050568                path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Files.h;
    1051569                refType = 0;
    1052         };
    1053         E190D03203ABB17800AEFBE0 = {
    1054                 isa = PBXFileReference;
    1055                 name = stdio.h;
    1056                 path = /usr/include/stdio.h;
    1057                 refType = 0;
    1058         };
    1059         E190D03303ABB17800AEFBE0 = {
    1060                 isa = PBXFileReference;
    1061                 name = Miscellaneou39456789101112.html;
    1062                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/URLServices/URL_Services/Functions/Miscellaneou39456789101112.html;
    1063                 refType = 0;
    1064         };
    1065         E190D03403ABB17800AEFBE0 = {
    1066                 isa = PBXFileReference;
    1067                 name = string.h;
    1068                 path = /usr/include/string.h;
    1069                 refType = 0;
    1070         };
    1071         E190D03503ABB17800AEFBE0 = {
    1072                 isa = PBXFileReference;
    1073                 name = InternetConfig.h;
    1074                 path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Headers/InternetConfig.h;
    1075                 refType = 0;
    1076         };
    1077         E190D03603ABB17800AEFBE0 = {
    1078                 isa = PBXFileReference;
    1079                 name = Miscellaneous.html;
    1080                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/StringServices/String_Services/Functions/Miscellaneous.html;
    1081                 refType = 0;
    1082         };
    1083         E190D03803ABB17800AEFBE0 = {
    1084                 isa = PBXFileReference;
    1085                 name = CFArray.h;
    1086                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFArray.h;
    1087                 refType = 0;
    1088         };
    1089         E190D03903ABB17800AEFBE0 = {
    1090                 isa = PBXFileReference;
    1091                 name = FSCatalogInfo.html;
    1092                 path = /Developer/Documentation/Carbon/Files/FileManager/File_Manager/DataTypes/FSCatalogInfo.html;
    1093                 refType = 0;
    1094         };
    1095         E190D03A03ABB17800AEFBE0 = {
     570                sourceTree = "<absolute>";
     571        };
     572        E1A087D60548746200594651 = {
    1096573                isa = PBXFileReference;
    1097574                name = Files.h;
    1098575                path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Files.h;
    1099576                refType = 0;
    1100         };
    1101         E190D03D03ABB17800AEFBE0 = {
    1102                 isa = PBXFileReference;
    1103                 name = InternetConfig.h;
    1104                 path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Headers/InternetConfig.h;
    1105                 refType = 0;
    1106         };
    1107         E190D03E03ABB17800AEFBE0 = {
    1108                 isa = PBXFileReference;
    1109                 name = Miscellaneous.html;
    1110                 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/StringServices/String_Services/Functions/Miscellaneous.html;
    1111                 refType = 0;
    1112         };
    1113         E190D03F03ABB17800AEFBE0 = {
    1114                 isa = PBXFileReference;
    1115                 name = Finder.h;
    1116                 path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/Finder.h;
    1117                 refType = 0;
    1118         };
    1119         E190D04003ABB17800AEFBE0 = {
    1120                 isa = PBXFileReference;
    1121                 name = unistd.h;
    1122                 path = /usr/include/unistd.h;
    1123                 refType = 0;
    1124         };
    1125         E190D04103ABB17800AEFBE0 = {
    1126                 isa = PBXFileReference;
    1127                 name = Accessing_In__Directories.html;
    1128                 path = /Developer/Documentation/Carbon/Files/FileManager/File_Manager/Functions/Accessing_In__Directories.html;
    1129                 refType = 0;
    1130         };
    1131         E190D04203ABB17800AEFBE0 = {
    1132                 isa = PBXFileReference;
    1133                 name = Accessing_In__Directories.html;
    1134                 path = /Developer/Documentation/Carbon/Files/FileManager/File_Manager/Functions/Accessing_In__Directories.html;
    1135                 refType = 0;
     577                sourceTree = "<absolute>";
    1136578        };
    1137579        F561F49E0139D79101AEEDB1 = {
    1138                 activeArgIndex = 1;
     580                activeArgIndex = 2;
    1139581                activeArgIndices = (
     582                        NO,
    1140583                        NO,
    1141584                        YES,
     
    1144587                        "-nu file:///Applications/Prerelease/Mozilla.app",
    1145588                        "-c MSIE http://web.sabi.net/",
     589                        "-f /Volumes/Ti/Applications/iTunes.app",
    1146590                );
    1147591                configStateDict = {
     
    1159603                );
    1160604        };
    1161         F5F4D74101B55E0801AEEDB1 = {
    1162                 fileReference = 08FB7796FE84155DC02AAC07;
    1163                 isa = PBXFileBreakpoint;
    1164                 lineNumber = 609;
    1165                 state = 1;
     605        F5C0CA9501B5740C01AEEDB1 = {
     606                uiCtxt = {
     607                        sepNavIntBoundsRect = "{{0, 0}, {709, 3779}}";
     608                        sepNavSelRange = "{7907, 0}";
     609                        sepNavVisRect = "{{0, 3118}, {709, 443}}";
     610                        sepNavWindowFrame = "{{38, 304}, {750, 502}}";
     611                };
    1166612        };
    1167613}
  • trunk/launch/launch/launch.pbproj/project.pbxproj

    r52 r146  
    44        classes = {
    55        };
    6         objectVersion = 38;
     6        objectVersion = 39;
    77        objects = {
    88                014CEA490018CE3211CA2923 = {
     
    1111                        buildSettings = {
    1212                                COPY_PHASE_STRIP = NO;
     13                                GCC_DYNAMIC_NO_PIC = NO;
     14                                GCC_ENABLE_FIX_AND_CONTINUE = YES;
     15                                GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
     16                                GCC_OPTIMIZATION_LEVEL = 0;
    1317                                OPTIMIZATION_CFLAGS = "-O0";
     18                                ZERO_LINK = YES;
    1419                        };
    1520                        isa = PBXBuildStyle;
     
    2126                        buildSettings = {
    2227                                COPY_PHASE_STRIP = YES;
     28                                GCC_ENABLE_FIX_AND_CONTINUE = NO;
     29                                ZERO_LINK = NO;
    2330                        };
    2431                        isa = PBXBuildStyle;
     
    3643//034
    3744                034768E2FF38A6DC11DB9C8B = {
     45                        expectedFileType = "compiled.mach-o.executable";
     46                        fallbackIsa = PBXFileReference;
    3847                        isa = PBXExecutableFileReference;
    3948                        path = launch;
    4049                        refType = 3;
     50                        sourceTree = BUILT_PRODUCTS_DIR;
    4151                };
    4252//030
     
    5161//084
    5262                08FB7793FE84155DC02AAC07 = {
     63                        buildSettings = {
     64                        };
    5365                        buildStyles = (
    5466                                014CEA490018CE3211CA2923,
     
    7486                        name = launch;
    7587                        refType = 4;
     88                        sourceTree = "<group>";
    7689                };
    7790                08FB7795FE84155DC02AAC07 = {
     
    8295                        name = Source;
    8396                        refType = 4;
     97                        sourceTree = "<group>";
    8498                };
    8599                08FB7796FE84155DC02AAC07 = {
     100                        expectedFileType = sourcecode.c.c;
    86101                        fileEncoding = 30;
    87102                        isa = PBXFileReference;
    88103                        path = main.c;
    89104                        refType = 4;
     105                        sourceTree = "<group>";
    90106                };
    91107                08FB779DFE84155DC02AAC07 = {
     
    99115                        name = "External Frameworks and Libraries";
    100116                        refType = 4;
     117                        sourceTree = "<group>";
    101118                };
    102119                08FB779FFE84155DC02AAC07 = {
     
    180197//094
    181198                09AB6884FE841BABC02AAC07 = {
     199                        expectedFileType = wrapper.framework;
     200                        fallbackIsa = PBXFileReference;
    182201                        isa = PBXFrameworkReference;
    183202                        name = CoreFoundation.framework;
    184203                        path = /System/Library/Frameworks/CoreFoundation.framework;
    185204                        refType = 0;
     205                        sourceTree = "<absolute>";
    186206                };
    187207                09AB6885FE841BABC02AAC07 = {
     
    208228                        name = Products;
    209229                        refType = 4;
     230                        sourceTree = "<group>";
    210231                };
    211232//190
     
    220241//F54
    221242                F561F49F0139D7DD01AEEDB1 = {
     243                        expectedFileType = wrapper.framework;
     244                        fallbackIsa = PBXFileReference;
    222245                        isa = PBXFrameworkReference;
    223246                        name = ApplicationServices.framework;
    224247                        path = /System/Library/Frameworks/ApplicationServices.framework;
    225248                        refType = 0;
     249                        sourceTree = "<absolute>";
    226250                };
    227251                F561F4A00139D7DD01AEEDB1 = {
     
    232256                };
    233257                F574340B01B8A47B01AEEDB1 = {
     258                        expectedFileType = text;
    234259                        fileEncoding = 30;
    235260                        isa = PBXFileReference;
    236261                        path = VERSION;
    237262                        refType = 4;
     263                        sourceTree = "<group>";
    238264                };
    239265                F579CF4B019A1C6D01AEEDB1 = {
     266                        expectedFileType = wrapper.framework;
     267                        fallbackIsa = PBXFileReference;
    240268                        isa = PBXFrameworkReference;
    241269                        name = Security.framework;
    242270                        path = /System/Library/Frameworks/Security.framework;
    243271                        refType = 0;
     272                        sourceTree = "<absolute>";
    244273                };
    245274                F579CF4C019A1C6D01AEEDB1 = {
     
    250279                };
    251280                F5C0CA9501B5740C01AEEDB1 = {
     281                        expectedFileType = text;
    252282                        fileEncoding = 30;
    253283                        isa = PBXFileReference;
    254284                        path = README;
    255285                        refType = 4;
     286                        sourceTree = "<group>";
    256287                };
    257288                F5E819BF0198DFF701AEEDB1 = {
     289                        expectedFileType = wrapper.framework;
     290                        fallbackIsa = PBXFileReference;
    258291                        isa = PBXFrameworkReference;
    259292                        name = Carbon.framework;
    260293                        path = /System/Library/Frameworks/Carbon.framework;
    261294                        refType = 0;
     295                        sourceTree = "<absolute>";
    262296                };
    263297                F5E819C00198DFF701AEEDB1 = {
  • trunk/launch/launch/main.c

    r138 r146  
    1818/* To do/think about:
    1919
    20 - Do we need to assume -b if -h?  Hiding the foreground app just makes
    21 it flash (only if Cocoa?)
    22 
    23 - Does -X work at all?  What does it return if it fails?
    24 
    2520- Launching as root: use authentication framework - doesn't work.
    2621
     
    3732*/
    3833
    39 #define DEBUG 1
     34/* #define DEBUG 1 */
    4035#define BROKEN_AUTHORIZATION 1
    41 #define BROKEN_LAUNCHNEWINSTANCE 1
     36#define BROKEN_LSOPENFROMURLSPEC 1
    4237#define kComponentSignatureString "launch"
    4338
     
    5651const char *APP_NAME;
    5752
    58 #define VERSION "1.0b3"
     53#define VERSION "1.0"
    5954
    6055#define STRBUF_LEN 1024
     
    9085    { kLSLaunchInProgressErr, "application is being opened; please try again after the application is open" },
    9186    { kLSNotRegisteredErr, "application not registered in Launch Services database" },
     87    { kLSNoExecutableErr, "application package contains no executable, or an unusable executable" },
     88    { kLSNoClassicEnvironmentErr, "Classic environment required but not available" },
    9289#ifndef BROKEN_AUTHORIZATION
    9390    // Security framework errors
     
    10299    { procNotFound, "unable to connect to system service.\nAre you logged in?" },
    103100    { kCGErrorIllegalArgument, "window server error.\nAre you logged in?" },
     101    { kCGErrorApplicationRequiresNewerSystem, "application requires a newer Mac OS X version" },
    104102    { fnfErr, "file not found" },
    105103    { 0, NULL }
     
    119117        "  -w            wait for application to finish opening before exiting\n"
    120118        "  -b            launch application in the background\n"
    121 #ifndef BROKEN_LAUNCHNEWINSTANCE
    122119        "  -m            launch application again, even if already running\n"
    123 #endif
    124120        "  -h            hide application once it's finished opening\n"
    125121        "  -C            force CFM/PEF Carbon application to launch in Classic\n"
     
    254250                CFRelease(url);
    255251                url = NULL;
    256             }
     252            } else {
     253                CFRelease(scheme);
     254            }
    257255        }
    258256    }
     
    382380        case 'w': LSPEC.launchFlags ^= kLSLaunchAsync; break;      // synchronous
    383381        case 'b': LSPEC.launchFlags |= kLSLaunchDontSwitch; break; // open in background
    384 #ifdef BROKEN_LAUNCHNEWINSTANCE
    385         case 'm': errexit("-m option not functional (LaunchServices bug?), sorry");
    386 #else
    387382        case 'm': LSPEC.launchFlags |= kLSLaunchNewInstance; break;// open multiple
    388 #endif
    389383        case 'h': LSPEC.launchFlags |= kLSLaunchAndHide; break;    // hide once launched
    390384        case 'C': LSPEC.launchFlags |= kLSLaunchInClassic; break;  // force Classic
     
    419413                    if (scheme == NULL || !CFEqual(scheme, CFSTR("file")))
    420414                        errexit("invalid file:// URL (argument of -u)");
     415                    CFRelease(scheme);
    421416                }
    422417            }
     
    501496}
    502497
    503 // 'context' is to match prototype for CFArrayApplierFunction, it's unused
    504 void printPathFromURL(CFURLRef url, void *context) {
     498void printPathFromURL(CFURLRef url, FILE *stream) {
    505499    CFStringRef scheme, pathOrURL;
    506500    static char strBuffer[STRBUF_LEN];
    507501   
    508     check(url != NULL && context == NULL);
     502    check(url != NULL && stream != NULL);
    509503
    510504    scheme = CFURLCopyScheme(url);
     
    517511    strBuffer[0] = '\0';
    518512    CFStringGetCString(pathOrURL, strBuffer, STRBUF_LEN, CFStringGetSystemEncoding()); // XXX buffer size issues?
    519     printf("%s\n", strBuffer);
     513    fprintf(stream, "%s\n", strBuffer);
    520514    CFRelease(scheme);
    521515    CFRelease(pathOrURL);
     
    700694                                bundleID = CFDictionaryGetValue(infoPlist, kCFBundleIdentifierKey);
    701695                                if (bundleID != NULL) CFRetain(bundleID);
    702                                 CFStringRef appVersion = CFDictionaryGetValue(infoPlist, CFSTR("CFBundleShortVersionString"));
     696                                appVersion = CFDictionaryGetValue(infoPlist, CFSTR("CFBundleShortVersionString"));
    703697                                if (appVersion == NULL)
    704698                                    appVersion = CFDictionaryGetValue(infoPlist, kCFBundleVersionKey);
     
    723717                if (bundleID != NULL) CFRetain(bundleID);
    724718                // prefer a short version string, e.g. "1.0 Beta" instead of "51" for Safari
    725                 CFStringRef appVersion = CFBundleGetValueForInfoDictionaryKey(bundle, CFSTR("CFBundleShortVersionString"));
     719                appVersion = CFBundleGetValueForInfoDictionaryKey(bundle, CFSTR("CFBundleShortVersionString"));
    726720                if (appVersion == NULL)
    727721                    appVersion = CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey);
    728                 if (appVersion != NULL)
     722                if (appVersion != NULL) {
     723                    CFRetain(appVersion);
    729724                    intVersion = CFBundleGetVersionNumber(bundle);
     725                }
    730726                CFRelease(bundle);
    731727            }
     
    749745        CFStringGetCString(kind, tmpBuffer, STRBUF_LEN, CFStringGetSystemEncoding());
    750746        printf("\tkind: %s\n", tmpBuffer);
     747        CFRelease(kind);
    751748        printMoreInfoFromURL(url);
    752749    }
     
    772769   
    773770    CFRelease(urlStr);
     771}
     772
     773OSStatus openFromURLSpec() {
     774#ifndef BROKEN_LSOPENFROMURLSPEC
     775    return LSOpenFromURLSpec(&LSPEC, NULL);
     776#else
     777    LSLaunchFSRefSpec spec = {NULL, 0, NULL, LSPEC.passThruParams,
     778                              LSPEC.launchFlags, LSPEC.asyncRefCon};
     779    CFIndex urlIndex, urlCount = LSPEC.itemURLs ? CFArrayGetCount(LSPEC.itemURLs) : 0;
     780    FSRef *itemRefs = malloc(urlCount * sizeof(FSRef));
     781    CFURLRef url;
     782    CFStringRef scheme, fileScheme = CFSTR("file");
     783    int itemIndex = 0;
     784    OSStatus err;
     785
     786    for (urlIndex = 0 ; urlIndex < urlCount ; urlIndex++) {
     787        url = CFArrayGetValueAtIndex(LSPEC.itemURLs, urlIndex);
     788        scheme = CFURLCopyScheme(url);
     789        if (CFEqual(scheme, fileScheme)) {
     790            if (CFURLGetFSRef(url, &itemRefs[itemIndex])) {
     791                itemIndex++;
     792                CFArrayRemoveValueAtIndex((CFMutableArrayRef)LSPEC.itemURLs, urlIndex);
     793                urlIndex--;
     794                urlCount--;
     795            } else {
     796                fprintf(stderr, "%s: unable to locate: ", APP_NAME);
     797                printPathFromURL(url, stderr);
     798            }
     799        }
     800        CFRelease(scheme);
     801    }
     802
     803    if (urlCount > 0 || itemIndex == 0) { /* URLs, or no items */
     804        err = LSOpenFromURLSpec(&LSPEC, NULL);
     805        if (err != noErr)
     806            return err;
     807    }
     808    if (itemIndex > 0) {
     809        FSRef appRef;
     810        spec.numDocs = itemIndex;
     811        spec.itemRefs = itemRefs;
     812        if (LSPEC.appURL != NULL) {
     813            if (!CFURLGetFSRef(LSPEC.appURL, &appRef)) {
     814                errexit("can't find application");
     815            }
     816            spec.appRef = &appRef;
     817        }
     818        return LSOpenFromRefSpec(&spec, NULL);
     819    }
     820    return noErr;
     821#endif
    774822}
    775823
     
    798846    switch (OPTS.action) {
    799847    case ACTION_FIND:
    800         printPathFromURL(LSPEC.appURL, NULL);
     848        printPathFromURL(LSPEC.appURL, stdout);
    801849        break;
    802850    case ACTION_OPEN:
    803         err = LSOpenFromURLSpec(&LSPEC, NULL);
     851        err = openFromURLSpec();
    804852        if (err != noErr) osstatusexit(err, "can't open application", argv[1]);
    805853        break;
    806854    case ACTION_FIND_ITEMS:
    807855        CFArrayApplyFunction(LSPEC.itemURLs, CFRangeMake(0, CFArrayGetCount(LSPEC.itemURLs)),
    808                              (CFArrayApplierFunction) printPathFromURL, NULL);
     856                             (CFArrayApplierFunction) printPathFromURL, stdout);
    809857        break;
    810858    case ACTION_OPEN_ITEMS:
    811         err = LSOpenFromURLSpec(&LSPEC, NULL);
     859        err = openFromURLSpec();
    812860        if (err != noErr) osstatusexit(err, "can't open items", argv[1]);
    813861        break;
     
    819867    {
    820868        ICInstance icInst;
    821         err = ICStart(&icInst, '????');
     869        err = ICStart(&icInst, '\?\?\?\?'); // in case GCC trigraph handling is enabled
    822870        if (err != noErr) osstatusexit(err, "can't initialize Internet Config", argv[1]);
    823871        CFArrayApplyFunction(LSPEC.itemURLs, CFRangeMake(0, CFArrayGetCount(LSPEC.itemURLs)),
  • trunk/launch/package-launch.sh

    r3 r146  
    66find . -name \*~ -exec rm '{}' \; && \
    77pbxbuild && \
    8 SetFile -c 'R*ch' -t 'TEXT' README VERSION && \
     8SetFile -c 'R*ch' -t 'TEXT' README VERSION launch.1 && \
    99strip build/launch && \
    1010sudo /usr/bin/install -c build/launch /usr/local/bin && \
     11sudo /usr/bin/install -c launch.1 /usr/local/man/man1 && \
    1112rm -rf build/launch.build build/intermediates build/.gdb_history && \
    1213VERSION=`cat VERSION` TARBALL="launch-$VERSION.tar.gz" && \
     
    3132#mv z$DMG $DMG && \
    3233scp $TARBALL ainaz:web/nriley/software/ #$DMG
     34:
Note: See TracChangeset for help on using the changeset viewer.