123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include <brl.mod/blitz.mod/blitz.h>
- #import <AppKit/AppKit.h>
- void __bb_brl_appstub_appstub();
- static int app_argc;
- static char **app_argv;
- static NSMutableArray *_appArgs;
- static NSAutoreleasePool *_globalPool;
- static void createAppMenu( NSString *appName ){
- NSMenu *appMenu;
- NSMenuItem *item;
- NSString *title;
-
- [NSApp setMainMenu:[NSMenu new]];
-
- appMenu=[NSMenu new];
-
- title=[@"Hide " stringByAppendingString:appName];
- [appMenu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"h"];
- item=(NSMenuItem*)[appMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
- [item setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
-
- [appMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
-
- [appMenu addItem:[NSMenuItem separatorItem]];
- title=[@"Quit " stringByAppendingString:appName];
- [appMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
-
- item=[NSMenuItem new];
- [item setSubmenu:appMenu];
- [[NSApp mainMenu] addItem:item];
-
- [NSApp performSelector:NSSelectorFromString(@"setAppleMenu:") withObject:appMenu];
- }
- static void run(){
- signal( SIGPIPE,SIG_IGN );
-
- bbStartup( app_argc,app_argv,0,0 );
- __bb_brl_appstub_appstub();
-
- exit( 0 );
- }
- void bbFlushAutoreleasePool(){
- [_globalPool release];
- _globalPool=[[NSAutoreleasePool alloc] init];
- }
- @interface BlitzMaxAppDelegate : NSObject{
- }
- @end
- @implementation BlitzMaxAppDelegate
- -(void)applicationWillTerminate:(NSNotification*)notification{
- exit(0);
- }
- -(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender{
- return NSTerminateCancel;
- }
- -(BOOL)application:(NSApplication*)app openFile:(NSString*)path{
- [_appArgs addObject:path];
- return YES;
- }
- -(void)applicationDidFinishLaunching:(NSNotification*)notification{
- int i;
- app_argc=[_appArgs count];
- app_argv=(char**)malloc( (app_argc+1)*sizeof(char*) );
- for( i=0;i<app_argc;++i ){
- NSString *t=[_appArgs objectAtIndex:i];
- char *p=(char*)malloc( [t length]+1 );
- strcpy( p,[t cString] );
- app_argv[i]=p;
- }
- app_argv[i]=0;
- [_appArgs release];
- [NSApp activateIgnoringOtherApps:YES];
-
- run();
- }
- @end
- int main( int argc,char *argv[] ){
- int i;
- CFURLRef url;
- char *app_file,*p;
-
- _globalPool=[[NSAutoreleasePool alloc] init];
- [NSApplication sharedApplication];
-
- app_argc=argc;
- app_argv=argv;
-
- url=CFBundleCopyExecutableURL( CFBundleGetMainBundle() );
- app_file=malloc( 4096 );
- CFURLGetFileSystemRepresentation( url,true,(UInt8*)app_file,4096 );
-
- if( strstr( app_file,".app/Contents/MacOS/" ) ){
- //GUI app!
- //
- p=strrchr( app_file,'/' );
- if( p ){
- ++p;
- }else{
- p=app_file;
- }
- createAppMenu( [NSString stringWithCString:p] );
- free( app_file );
-
- [NSApp setDelegate:[[BlitzMaxAppDelegate alloc] init]];
-
- _appArgs=[[NSMutableArray arrayWithCapacity:10] retain];
- [_appArgs addObject:[NSString stringWithCString:argv[0]] ];
-
- [NSApp run];
- }else{
- //Console app!
- //
- free( app_file );
- run();
- }
- }
|