hedgewars/SDLMain.m
author unc0rr
Fri, 01 May 2009 09:01:44 +0000
changeset 2021 a591afb43768
parent 1999 a28dcfe658e3
child 2565 54296af65fe9
permissions -rw-r--r--
Some changes in try to fix issue when you enter room with painted map, but frontend shows generated one (most probably bug is triggered by template filters) Untested.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1999
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     1
/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     2
       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     3
       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     4
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     5
    Feel free to customize this file to suit your needs
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     6
*/
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     7
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     8
#import "SDL.h"
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
     9
#import "SDLMain.h"
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    10
#import <sys/param.h> /* for MAXPATHLEN */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    11
#import <unistd.h>
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    12
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    13
/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    14
 but the method still is there and works. To avoid warnings, we declare
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    15
 it ourselves here. */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    16
@interface NSApplication(SDL_Missing_Methods)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    17
- (void)setAppleMenu:(NSMenu *)menu;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    18
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    19
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    20
/* Use this flag to determine whether we use SDLMain.nib or not */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    21
#define		SDL_USE_NIB_FILE	0
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    22
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    23
/* Use this flag to determine whether we use CPS (docking) or not */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    24
#define		SDL_USE_CPS		1
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    25
#ifdef SDL_USE_CPS
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    26
/* Portions of CPS.h */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    27
typedef struct CPSProcessSerNum
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    28
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    29
	UInt32		lo;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    30
	UInt32		hi;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    31
} CPSProcessSerNum;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    32
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    33
extern OSErr	CPSGetCurrentProcess( CPSProcessSerNum *psn);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    34
extern OSErr 	CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    35
extern OSErr	CPSSetFrontProcess( CPSProcessSerNum *psn);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    36
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    37
#endif /* SDL_USE_CPS */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    38
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    39
static int    gArgc;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    40
static char  **gArgv;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    41
static BOOL   gFinderLaunch;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    42
static BOOL   gCalledAppMainline = FALSE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    43
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    44
static NSString *getApplicationName(void)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    45
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    46
    NSDictionary *dict;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    47
    NSString *appName = 0;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    48
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    49
    /* Determine the application name */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    50
    dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    51
    if (dict)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    52
        appName = [dict objectForKey: @"CFBundleName"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    53
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    54
    if (![appName length])
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    55
        appName = [[NSProcessInfo processInfo] processName];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    56
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    57
    return appName;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    58
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    59
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    60
#if SDL_USE_NIB_FILE
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    61
/* A helper category for NSString */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    62
@interface NSString (ReplaceSubString)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    63
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    64
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    65
#endif
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    66
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    67
@interface SDLApplication : NSApplication
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    68
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    69
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    70
@implementation SDLApplication
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    71
/* Invoked from the Quit menu item */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    72
- (void)terminate:(id)sender
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    73
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    74
    /* Post a SDL_QUIT event */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    75
    SDL_Event event;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    76
    event.type = SDL_QUIT;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    77
    SDL_PushEvent(&event);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    78
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    79
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    80
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    81
/* The main class of the application, the application's delegate */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    82
@implementation SDLMain
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    83
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    84
/* Set the working directory to the .app's parent directory */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    85
- (void) setupWorkingDirectory:(BOOL)shouldChdir
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    86
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    87
    if (shouldChdir)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    88
    {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    89
        char parentdir[MAXPATHLEN];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    90
		CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    91
		CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    92
		if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    93
	        assert ( chdir (parentdir) == 0 );   /* chdir to the binary app's parent */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    94
		}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    95
		CFRelease(url);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    96
		CFRelease(url2);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    97
	}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    98
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
    99
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   100
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   101
#if SDL_USE_NIB_FILE
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   102
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   103
/* Fix menu to contain the real app name instead of "SDL App" */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   104
- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   105
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   106
    NSRange aRange;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   107
    NSEnumerator *enumerator;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   108
    NSMenuItem *menuItem;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   109
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   110
    aRange = [[aMenu title] rangeOfString:@"SDL App"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   111
    if (aRange.length != 0)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   112
        [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   113
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   114
    enumerator = [[aMenu itemArray] objectEnumerator];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   115
    while ((menuItem = [enumerator nextObject]))
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   116
    {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   117
        aRange = [[menuItem title] rangeOfString:@"SDL App"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   118
        if (aRange.length != 0)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   119
            [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   120
        if ([menuItem hasSubmenu])
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   121
            [self fixMenu:[menuItem submenu] withAppName:appName];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   122
    }
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   123
    [ aMenu sizeToFit ];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   124
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   125
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   126
#else
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   127
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   128
static void setApplicationMenu(void)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   129
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   130
    /* warning: this code is very odd */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   131
    NSMenu *appleMenu;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   132
    NSMenuItem *menuItem;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   133
    NSString *title;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   134
    NSString *appName;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   135
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   136
    appName = getApplicationName();
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   137
    appleMenu = [[NSMenu alloc] initWithTitle:@""];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   138
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   139
    /* Add menu items */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   140
    title = [@"About " stringByAppendingString:appName];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   141
    [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   142
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   143
    [appleMenu addItem:[NSMenuItem separatorItem]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   144
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   145
    title = [@"Hide " stringByAppendingString:appName];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   146
    [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   147
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   148
    menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   149
    [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   150
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   151
    [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   152
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   153
    [appleMenu addItem:[NSMenuItem separatorItem]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   154
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   155
    title = [@"Quit " stringByAppendingString:appName];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   156
    [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   157
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   158
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   159
    /* Put menu into the menubar */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   160
    menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   161
    [menuItem setSubmenu:appleMenu];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   162
    [[NSApp mainMenu] addItem:menuItem];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   163
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   164
    /* Tell the application object that this is now the application menu */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   165
    [NSApp setAppleMenu:appleMenu];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   166
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   167
    /* Finally give up our references to the objects */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   168
    [appleMenu release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   169
    [menuItem release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   170
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   171
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   172
/* Create a window menu */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   173
static void setupWindowMenu(void)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   174
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   175
    NSMenu      *windowMenu;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   176
    NSMenuItem  *windowMenuItem;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   177
    NSMenuItem  *menuItem;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   178
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   179
    windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   180
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   181
    /* "Minimize" item */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   182
    menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   183
    [windowMenu addItem:menuItem];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   184
    [menuItem release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   185
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   186
    /* Put menu into the menubar */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   187
    windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   188
    [windowMenuItem setSubmenu:windowMenu];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   189
    [[NSApp mainMenu] addItem:windowMenuItem];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   190
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   191
    /* Tell the application object that this is now the window menu */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   192
    [NSApp setWindowsMenu:windowMenu];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   193
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   194
    /* Finally give up our references to the objects */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   195
    [windowMenu release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   196
    [windowMenuItem release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   197
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   198
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   199
/* Replacement for NSApplicationMain */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   200
static void CustomApplicationMain (int argc, char **argv)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   201
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   202
    NSAutoreleasePool	*pool = [[NSAutoreleasePool alloc] init];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   203
    SDLMain				*sdlMain;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   204
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   205
    /* Ensure the application object is initialised */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   206
    [SDLApplication sharedApplication];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   207
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   208
#ifdef SDL_USE_CPS
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   209
    {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   210
        CPSProcessSerNum PSN;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   211
        /* Tell the dock about us */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   212
        if (!CPSGetCurrentProcess(&PSN))
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   213
            if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   214
                if (!CPSSetFrontProcess(&PSN))
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   215
                    [SDLApplication sharedApplication];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   216
    }
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   217
#endif /* SDL_USE_CPS */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   218
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   219
    /* Set up the menubar */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   220
    [NSApp setMainMenu:[[NSMenu alloc] init]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   221
    setApplicationMenu();
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   222
    setupWindowMenu();
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   223
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   224
    /* Create SDLMain and make it the app delegate */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   225
    sdlMain = [[SDLMain alloc] init];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   226
    [NSApp setDelegate:sdlMain];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   227
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   228
    /* Start the main event loop */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   229
    [NSApp run];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   230
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   231
    [sdlMain release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   232
    [pool release];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   233
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   234
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   235
#endif
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   236
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   237
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   238
/*
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   239
 * Catch document open requests...this lets us notice files when the app
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   240
 *  was launched by double-clicking a document, or when a document was
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   241
 *  dragged/dropped on the app's icon. You need to have a
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   242
 *  CFBundleDocumentsType section in your Info.plist to get this message,
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   243
 *  apparently.
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   244
 *
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   245
 * Files are added to gArgv, so to the app, they'll look like command line
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   246
 *  arguments. Previously, apps launched from the finder had nothing but
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   247
 *  an argv[0].
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   248
 *
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   249
 * This message may be received multiple times to open several docs on launch.
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   250
 *
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   251
 * This message is ignored once the app's mainline has been called.
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   252
 */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   253
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   254
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   255
    const char *temparg;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   256
    size_t arglen;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   257
    char *arg;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   258
    char **newargv;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   259
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   260
    if (!gFinderLaunch)  /* MacOS is passing command line args. */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   261
        return FALSE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   262
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   263
    if (gCalledAppMainline)  /* app has started, ignore this document. */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   264
        return FALSE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   265
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   266
    temparg = [filename UTF8String];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   267
    arglen = SDL_strlen(temparg) + 1;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   268
    arg = (char *) SDL_malloc(arglen);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   269
    if (arg == NULL)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   270
        return FALSE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   271
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   272
    newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   273
    if (newargv == NULL)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   274
    {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   275
        SDL_free(arg);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   276
        return FALSE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   277
    }
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   278
    gArgv = newargv;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   279
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   280
    SDL_strlcpy(arg, temparg, arglen);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   281
    gArgv[gArgc++] = arg;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   282
    gArgv[gArgc] = NULL;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   283
    return TRUE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   284
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   285
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   286
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   287
/* Called when the internal event loop has just started running */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   288
- (void) applicationDidFinishLaunching: (NSNotification *) note
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   289
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   290
    int status;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   291
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   292
    /* Set the working directory to the .app's parent directory */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   293
    [self setupWorkingDirectory:gFinderLaunch];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   294
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   295
#if SDL_USE_NIB_FILE
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   296
    /* Set the main menu to contain the real app name instead of "SDL App" */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   297
    [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   298
#endif
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   299
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   300
    /* Hand off to main application code */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   301
    gCalledAppMainline = TRUE;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   302
    status = SDL_main (gArgc, gArgv);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   303
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   304
    /* We're done, thank you for playing */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   305
    exit(status);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   306
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   307
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   308
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   309
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   310
@implementation NSString (ReplaceSubString)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   311
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   312
- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   313
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   314
    unsigned int bufferSize;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   315
    unsigned int selfLen = [self length];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   316
    unsigned int aStringLen = [aString length];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   317
    unichar *buffer;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   318
    NSRange localRange;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   319
    NSString *result;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   320
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   321
    bufferSize = selfLen + aStringLen - aRange.length;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   322
    buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   323
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   324
    /* Get first part into buffer */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   325
    localRange.location = 0;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   326
    localRange.length = aRange.location;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   327
    [self getCharacters:buffer range:localRange];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   328
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   329
    /* Get middle part into buffer */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   330
    localRange.location = 0;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   331
    localRange.length = aStringLen;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   332
    [aString getCharacters:(buffer+aRange.location) range:localRange];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   333
     
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   334
    /* Get last part into buffer */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   335
    localRange.location = aRange.location + aRange.length;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   336
    localRange.length = selfLen - localRange.location;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   337
    [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   338
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   339
    /* Build output string */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   340
    result = [NSString stringWithCharacters:buffer length:bufferSize];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   341
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   342
    NSDeallocateMemoryPages(buffer, bufferSize);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   343
    
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   344
    return result;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   345
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   346
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   347
@end
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   348
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   349
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   350
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   351
#ifdef main
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   352
#  undef main
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   353
#endif
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   354
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   355
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   356
/* Main entry point to executable - should *not* be SDL_main! */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   357
int main (int argc, char **argv)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   358
{
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   359
    /* Copy the arguments into a global variable */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   360
    /* This is passed if we are launched by double-clicking */
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   361
    if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   362
        gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   363
        gArgv[0] = argv[0];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   364
        gArgv[1] = NULL;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   365
        gArgc = 1;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   366
        gFinderLaunch = YES;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   367
    } else {
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   368
        int i;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   369
        gArgc = argc;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   370
        gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   371
        for (i = 0; i <= argc; i++)
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   372
            gArgv[i] = argv[i];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   373
        gFinderLaunch = NO;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   374
    }
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   375
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   376
#if SDL_USE_NIB_FILE
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   377
    [SDLApplication poseAsClass:[NSApplication class]];
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   378
    NSApplicationMain (argc, argv);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   379
#else
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   380
    CustomApplicationMain (argc, argv);
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   381
#endif
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   382
    return 0;
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   383
}
a28dcfe658e3 Commit part of koda's patch which applies cleanly:
unc0rr
parents:
diff changeset
   384