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