25 #ifdef USE_SDL_MAINLOOP 
   34     return (
C4AppDelegate*)[[NSApplication sharedApplication] delegate];
 
   43 @synthesize addViewportForPlayerMenuItem, editorWindowController, kickPlayerMenuItem, recordMenuItem, netMenu, gameWindowController, toggleFullScreen;
 
   51         NSArray* processArguments = [[NSProcessInfo processInfo] arguments];
 
   52         gatheredArguments = [NSMutableArray arrayWithCapacity:[processArguments count]+2];
 
   53         [gatheredArguments addObjectsFromArray:processArguments];
 
   60     NSAppleEventManager* appleEvents = [NSAppleEventManager sharedAppleEventManager];
 
   61     [appleEvents setEventHandler:self
 
   62                      andSelector:@selector(getUrl:withReplyEvent:)
 
   63                    forEventClass:kInternetEventClass andEventID:kAEGetURL];
 
   64     [appleEvents setEventHandler:self
 
   65                      andSelector:@selector(handleQuitEvent:withReplyEvent:)
 
   66                    forEventClass:kCoreEventClass andEventID:kAEQuitApplication];
 
   70 - (void)handleQuitEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
 
   72     NSLog(
@"Quit message via Dock or Tab-Switcher");
 
   73     [
self suggestQuitting:self];
 
   76 - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
 
   78     NSString* pathExtension = [[filename pathExtension] lowercaseString];
 
   80     NSArray* clonkFileNameExtensions = @[@"ocd", @"ocs", @"ocf", @"ocg"];
 
   81     if ([clonkFileNameExtensions containsObject:pathExtension])
 
   94 - (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
 
   96     NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
 
   97     [gatheredArguments addObject:url];
 
  100 - (void) quitAndMaybeRestart
 
  106         NSString* filename = [[NSBundle mainBundle] bundlePath];
 
  107         NSString* cmd = [@"open " stringByAppendingString: filename];
 
  108         system([cmd UTF8String]);
 
  113 - (NSString*)clonkDirectory { 
return [NSBundle.mainBundle.bundlePath stringByDeletingLastPathComponent]; }
 
  115 - (void) applicationDidFinishLaunching: (NSNotification *) note
 
  117     [[NSFileManager defaultManager] changeCurrentDirectoryPath:[
self clonkDirectory]];
 
  120         [NSApp activateIgnoringOtherApps:YES];
 
  124 #ifdef USE_SDL_MAINLOOP 
  126         SDL_main(newArgc, newArgv);
 
  128         [
self quitAndMaybeRestart];
 
  129         [NSApp terminate:self];
 
  137             [NSApp terminate:self];
 
  139         [[NSRunLoop currentRunLoop] performSelector:@selector(delayedRun:) target:self argument:self order:0 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];
 
  141             [toggleFullScreen setTarget:self]; 
 
  146         [NSApp terminate:self];
 
  151 - (void) delayedRun:(
id)sender
 
  164 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)application
 
  167         [
self suggestQuitting:self];
 
  168     return NSTerminateNow;
 
  171 - (void)terminate:(NSApplication*)sender
 
  173 #ifdef USE_SDL_MAINLOOP 
  176     event.type = SDL_QUIT;
 
  177     SDL_PushEvent(&event);
 
  196     for (
unsigned int i = 0; i < [gatheredArguments count]; i++)
 
  198         NSString* arg = [gatheredArguments objectAtIndex:i];
 
  199         if ([arg hasPrefix:
@"-psn"])
 
  205 - (void) infoWithFormat:(NSString*) formatString andArgument:(const 
char*) arg
 
  207     NSRunInformationalAlertPanel([NSString stringWithCString:
LoadResStr(
"IDS_ADDON_INSTALLTITLE") encoding:NSUTF8StringEncoding],
 
  208                                  [NSString stringWithFormat: formatString, arg],
 
  212 - (void) minimalConfigurationInitialization
 
  228     [
self minimalConfigurationInitialization];
 
  231     NSString* justFileName = [addonSupplied lastPathComponent];
 
  232     NSString* destPath = [
self clonkDirectory];
 
  233     NSString* formatString;
 
  238         if ([
addonSupplied hasPrefix:[NSString stringWithCString:(*it).strBuf.getData() encoding:NSUTF8StringEncoding]])
 
  240             [gatheredArguments addObject:addonSupplied];
 
  244             destPath = [NSString stringWithCString:it->strBuf.getData() encoding:NSUTF8StringEncoding];
 
  246     destPath = [destPath stringByAppendingPathComponent:justFileName];
 
  248     NSFileManager* fileManager = [NSFileManager defaultManager];
 
  249     if ([fileManager fileExistsAtPath:destPath])
 
  251         [[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:[
self clonkDirectory] destination:@"" files:[NSArray arrayWithObject:justFileName] tag:0];
 
  252     if ([fileManager copyItemAtPath:
addonSupplied toPath:destPath error:NULL])
 
  254         formatString = [NSString stringWithCString:LoadResStr("IDS_ADDON_INSTALLSUCCESS") encoding:NSUTF8StringEncoding];
 
  258         formatString = [NSString stringWithCString:LoadResStr("IDS_ADDON_INSTALLFAILURE") encoding:NSUTF8StringEncoding];
 
  260     [
self infoWithFormat:formatString andArgument:[justFileName cStringUsingEncoding:NSUTF8StringEncoding]];
 
  267     NSArray* nonCocoaArgs = [gatheredArguments filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSString* arg, NSDictionary *bindings)
 
  271                     [arg hasPrefix:@"-NS"] ||
 
  272                     [arg isEqualToString:@"YES"]
 
  276     int argCount = [nonCocoaArgs count];
 
  277     args.resize(argCount);
 
  278     for (
int i = 0; i < argCount; i++)
 
  280         args[i] = strdup([[nonCocoaArgs objectAtIndex:i] cStringUsingEncoding:NSUTF8StringEncoding]);
 
  284 - (void) applicationDidBecomeActive:(NSNotification*)notification
 
  287     if (gameWindowController)
 
  288         [gameWindowController.window makeKeyAndOrderFront:self];
 
  298 static void _ExceptionHandler(NSException* exception)
 
  300     NSAlert* alert = [NSAlert alertWithMessageText:[exception description] defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:@""];
 
  305 int main (
int argc, 
const char **argv)
 
  307     NSSetUncaughtExceptionHandler(&_ExceptionHandler);
 
  308     return NSApplicationMain(argc, argv);
 
int main(int argc, const char **argv)
 
C4Application Application
 
const char * LoadResStr(const char *id)
 
bool Init(int argc, char *argv[])
 
char LanguageEx[CFG_MaxString+1]
 
bool Load(const char *config_file=nullptr)
 
bool LoadLanguage(const char *strLanguages)
 
@ PATH_PreferredInstallationLocation
 
void StartOnCurrentThread()
 
BOOL isEditorAndGameRunning()
 
BOOL argsLookLikeItShouldBeInstallation()
 
NSMutableArray * gatheredArguments
 
std::vector< char * > args
 
C4AppDelegate * instance()