From 3bbb617ca4195af7fb9ce5751a78dd6ca3d27e16 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Mon, 29 Jul 2002 21:36:35 +0000 Subject: [PATCH] First stab at the launcher application. This will be run when the user doubleclicks a .py, .pyw or .pyc file. It runs the file by invoking the relevant interpreter (either the command line Python in a terminal window or a Python.app for GUI-based scripts). Interpreter to use and the options to pass are settable through preferences. If PythonLauncher wasn't running it does its thing for one script and exits. If it was manually started before a dialog is presented where the user can set the options to use, etc. To be done: - option-drag/doubleclick should always open the interactive dialog - Terminal-window isn't done yet - Should be reimplemented in Python, but pyobjc isn't part of the core. - Various menu entries should be disabled. --- .../PythonLauncher/English.lproj/Credits.rtf | 30 + .../English.lproj/InfoPlist.strings | Bin 0 -> 618 bytes .../English.lproj/MainMenu.nib/classes.nib | 12 + .../English.lproj/MainMenu.nib/info.nib | 21 + .../English.lproj/MainMenu.nib/objects.nib | Bin 0 -> 5016 bytes .../English.lproj/MyDocument.nib/classes.nib | 24 + .../English.lproj/MyDocument.nib/info.nib | 16 + .../English.lproj/MyDocument.nib/objects.nib | Bin 0 -> 4174 bytes Mac/OSX/PythonLauncher/FileSettings.h | 53 ++ Mac/OSX/PythonLauncher/FileSettings.m | 182 ++++++ Mac/OSX/PythonLauncher/MyAppDelegate.h | 14 + Mac/OSX/PythonLauncher/MyAppDelegate.m | 64 ++ Mac/OSX/PythonLauncher/MyDocument.h | 39 ++ Mac/OSX/PythonLauncher/MyDocument.m | 165 +++++ .../PreferenceWindow.nib/classes.nib | 25 + .../PreferenceWindow.nib/info.nib | 16 + .../PreferenceWindow.nib/objects.nib | Bin 0 -> 4920 bytes .../PreferencesWindowController.h | 32 + .../PreferencesWindowController.m | 94 +++ Mac/OSX/PythonLauncher/PythonCompiled.icns | Bin 0 -> 57125 bytes Mac/OSX/PythonLauncher/PythonInterpreter.icns | Bin 0 -> 45913 bytes .../PythonLauncher.pbproj/project.pbxproj | 612 ++++++++++++++++++ Mac/OSX/PythonLauncher/PythonSource.icns | Bin 0 -> 50112 bytes Mac/OSX/PythonLauncher/main.m | 14 + 24 files changed, 1413 insertions(+) create mode 100644 Mac/OSX/PythonLauncher/English.lproj/Credits.rtf create mode 100644 Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib create mode 100755 Mac/OSX/PythonLauncher/FileSettings.h create mode 100755 Mac/OSX/PythonLauncher/FileSettings.m create mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.h create mode 100644 Mac/OSX/PythonLauncher/MyAppDelegate.m create mode 100755 Mac/OSX/PythonLauncher/MyDocument.h create mode 100755 Mac/OSX/PythonLauncher/MyDocument.m create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib create mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.h create mode 100644 Mac/OSX/PythonLauncher/PreferencesWindowController.m create mode 100644 Mac/OSX/PythonLauncher/PythonCompiled.icns create mode 100644 Mac/OSX/PythonLauncher/PythonInterpreter.icns create mode 100755 Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj create mode 100644 Mac/OSX/PythonLauncher/PythonSource.icns create mode 100755 Mac/OSX/PythonLauncher/main.m diff --git a/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf b/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf new file mode 100644 index 000000000000..930ca221a128 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/Credits.rtf @@ -0,0 +1,30 @@ +{\rtf1\mac\ansicpg10000\cocoartf100 +{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\f1\b0 \ + Jack Jansen\ +\ + +\f0\b Human Interface Design: +\f1\b0 \ + Jack Jansen\ +\ + +\f0\b Testing: +\f1\b0 \ + Jack Jansen\ + Pythonmac-SIG@python.org\ +\ + +\f0\b Documentation: +\f1\b0 \ + Missing\ +\ + +\f0\b With special thanks to: +\f1\b0 \ + Guido, of course\ +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings b/Mac/OSX/PythonLauncher/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..40b61850a6f5041eddeb6e3c46b9520f86b1d1aa GIT binary patch literal 618 zc-pm)-3tLh6vfZ8zhd$zvAoI)<)b7~-q-pJYg>!>4T^0rH6+;{0`MEwNOL& QzT-`tqj!B%Cx4sh4)>vKZ~y=R literal 0 Hc-jL100001 diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib new file mode 100644 index 000000000000..47b40aba31c1 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/classes.nib @@ -0,0 +1,12 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {showPreferences = id; }; + CLASS = MyAppDelegate; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib new file mode 100644 index 000000000000..b96759af1c23 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/info.nib @@ -0,0 +1,21 @@ + + + + + IBDocumentLocation + 99 33 356 240 0 0 800 578 + IBEditorPositions + + 29 + 82 396 318 44 0 0 800 578 + + IBFramework Version + 263.2 + IBOpenObjects + + 29 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MainMenu.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..532a5c828967455b622d4670969ba546ec4adf21 GIT binary patch literal 5016 zc-pO44Qv$06`nKLx!CxCnm|PjIwVRQSw$waKpa)IF?Dep|HPLl>W>sHcZ0ofw|m*! z#h5llL-w|W za$x_%hYv{-EicJ0u%9M$%LvnFMgehXzAL5-P{CR3y4NvC!@FaOvDAe8zeEodOsx zgvhwOiaYKJ+oRD>DQFEZTB`Xd z*I#>_>q5KeRrglVf^em!y@j1>l$PHB7lOgB6SS`a$2oi#9ZtXy>Y6EVdMC<6W;sU2HLy(&TX=uW!XuTP$G*5u zS9e79guJ!Bp~_2K7*h7Q;6!C`tpEqx6ZsH^DpP9u=^kpBkG|z;DbGMuN(7$%8Yu+!1}dE)vbhNMJltFznl<g}*1YPfuPAk(JLSaLXMuVn4YeaH)Rk{f|uV}<+G>RQfnTUQ4Be_6O8r`Isr{tsA zTFyZe$sr%eJ8Y>sKmU-MG z*XU=q8ZxBr;psH=N0h+A@)f`(x!&c=RvJ!bU|kwkH$rn0_-i0{3$ABjDh=nda6AJS zvT!>GRXIqH!KM~yNx|6+T+V_GqW!Gz9>zXl8y?yL(N!j$F{tyyy&Np{!~GnbI1bq< z$c)1ZKTK!gS{5!|fX0;&@WXf-?&RQR7H(wWR0ghO;Xw}0WZ+gB?&hF62gfo{lY>ha zVVNJUW?^k3G_8ZpEpRjgr!%lJ2P6mQvoM)~jVsl{helutlOxc{&m79n!ERf;y4xW*H7l3sXouC&uR-xL<4%C#e#hQh}t!fwX8q zXU+_4!k@%}mLyygR<<~BS&W+5r4%C@`GaI7^7RILA+ZkI3{Y~hG&so zQ_RMgOm)IlVHyLlwv^Z8&AoI^tX7tIkD~LPFewtoh7DpZWKIm$6ic=^;&HcV_N7Qo ze7IGMM}tZ5jo3vHa5%L}pq}ap^{6{K@Sb7D#zDhuts9K|TfY5Vl`C61YA?Vi-o_+) z-Vmn-7KNBd0g7oEm<3uz0v|lGS*RB)_(IeMXqP5$u&25yQ~|@%L`(I8GK|kKPtzV(Wi&n;y z+!2y$1KTi9P$dMl30Wu6s3*NGVU{)nyDtS{?4UdWk)~yQJjrSqdlAO3Su~L-T-fn`MTw4)+TXHt4)1iAWFqCP&Er11qqUMZWeh(AnU!Im+ii%I42Z~G&+>uAy0l@ z5_Ei{lqjxBMFQLU62SX`)R&qwyUP%SrPU!PaLq>HCP#6wIAL?A9Y?-H}eTE+hi zL|_UY@=|Bp%j7BVwah3r3(voLWK6L9k$f#ccrx{EyQ)py&&Y52x&eOib)IVACmDH* zH!^aH-(@7tZ!z)#|1Kj3`5H$4#8)%&NB)4344-7=hkW4k{BkePzR3NIyvM5<`3;Y~ z!l!%qn2#qId6VB^B&z_VaW7{7M%OF!CV^-(%z)KhDS-++yS>{QP#5 zy~)UFuJ7ZS=lF&1@s*66Vo1b9h0AI$)`@DvcBfN@{U-M1hLBdZNIm?eR!tncj zM*hXqt9a8cewL9jlq4BB!9PY6e*c(}GdPSf@>d*w&dA?zc$<+)9NuN*@B9oSz+Y$N z7zz$C@((`5$OtElOz_)``~syvV&o5ed<(zvb-t95aej}H!@Q1>6wfj85x?2ZkGAsr z$mW}?`K9mkVMgBJrxeTinlWIPu{HawT%3kuRve; sRES^e<1L>>1Y_hl-?$>h$R{Z>g6Doo*VYa_tSg;{5~D-9_(#(J07Jd4@&Et; literal 0 Hc-jL100001 diff --git a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib new file mode 100644 index 000000000000..7c581494b6f1 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/classes.nib @@ -0,0 +1,24 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {do_apply = id; do_cancel = id; do_reset = id; do_run = id; }; + CLASS = MyDocument; + LANGUAGE = ObjC; + OUTLETS = { + commandline = NSTextField; + debug = NSButton; + inspect = NSButton; + interpreter = NSTextField; + nosite = NSButton; + optimize = NSButton; + others = NSTextField; + tabs = NSButton; + verbose = NSButton; + with_terminal = NSButton; + }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib new file mode 100644 index 000000000000..c7676460e7fe --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 265 40 356 240 0 0 800 578 + IBFramework Version + 263.2 + IBOpenObjects + + 5 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/MyDocument.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..33521ada231fe80754aa1e6926ca1775dcb3e338 GIT binary patch literal 4174 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 RX_6+M*CFHwHGRNw{s#qO!59Dl literal 0 Hc-jL100001 diff --git a/Mac/OSX/PythonLauncher/FileSettings.h b/Mac/OSX/PythonLauncher/FileSettings.h new file mode 100755 index 000000000000..f487469c7330 --- /dev/null +++ b/Mac/OSX/PythonLauncher/FileSettings.h @@ -0,0 +1,53 @@ +// +// FileSettings.h +// PythonLauncher +// +// Created by Jack Jansen on Sun Jul 21 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + +#import + +@protocol FileSettingsSource +- (NSString *) interpreter; +- (BOOL) debug; +- (BOOL) verbose; +- (BOOL) inspect; +- (BOOL) optimize; +- (BOOL) nosite; +- (BOOL) tabs; +- (NSString *) others; +- (BOOL) with_terminal; +@end + +@interface FileSettings : NSObject +{ + NSString *interpreter; // The pathname of the interpreter to use + BOOL debug; // -d option: debug parser + BOOL verbose; // -v option: verbose import + BOOL inspect; // -i option: interactive mode after script + BOOL optimize; // -O option: optimize bytecode + BOOL nosite; // -S option: don't import site.py + BOOL tabs; // -t option: warn about inconsistent tabs + NSString *others; // other options + BOOL with_terminal; // Run in terminal window + + FileSettings *origsource; + NSString *prefskey; +} + ++ (id)getDefaultsForFileType: (NSString *)filetype; ++ (id)newSettingsForFileType: (NSString *)filetype; + +- (id)init; +- (id)initWithFileSettings: (FileSettings *)source; + +- (void)updateFromSource: (id )source; +- (NSString *)commandLineForScript: (NSString *)script; + +- (id)factorySettingsForFileType: (NSString *)filetype; +- (void)saveDefaults; +- (void)updateFromUserDefaults: (NSString *)filetype; + + +@end diff --git a/Mac/OSX/PythonLauncher/FileSettings.m b/Mac/OSX/PythonLauncher/FileSettings.m new file mode 100755 index 000000000000..99a1166854e2 --- /dev/null +++ b/Mac/OSX/PythonLauncher/FileSettings.m @@ -0,0 +1,182 @@ +// +// FileSettings.m +// PythonLauncher +// +// Created by Jack Jansen on Sun Jul 21 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + +#import "FileSettings.h" + +@implementation FileSettings ++ (id)getDefaultsForFileType: (NSString *)filetype +{ + static FileSettings *default_py, *default_pyw, *default_pyc; + FileSettings **curdefault; + + if ([filetype isEqualToString: @"Python Script"]) { + curdefault = &default_py; + } else if ([filetype isEqualToString: @"Python GUI Script"]) { + curdefault = &default_pyw; + } else if ([filetype isEqualToString: @"Python Bytecode Document"]) { + curdefault = &default_pyc; + } else { + NSLog(@"Funny File Type: %@\n", filetype); + curdefault = &default_py; + filetype = @"Python Script"; + } + if (!*curdefault) { + *curdefault = [[FileSettings new] init]; + [*curdefault factorySettingsForFileType: filetype]; + [*curdefault updateFromUserDefaults: filetype]; + } + return *curdefault; +} + ++ (id)newSettingsForFileType: (NSString *)filetype +{ + FileSettings *cur; + + cur = [[FileSettings new] init]; + [cur initWithFileSettings: [FileSettings getDefaultsForFileType: filetype]]; + return cur; +} + +- (id)init +{ + self = [super init]; + return [self factorySettingsForFileType: @"Python Script"]; +} + +- (id)factorySettingsForFileType: (NSString *)filetype +{ + debug = NO; + verbose = NO; + inspect = NO; + optimize = NO; + nosite = NO; + tabs = NO; + others = @""; + if ([filetype isEqualToString: @"Python Script"] || + [filetype isEqualToString: @"Python Bytecode Document"]) { + interpreter = @"/usr/local/bin/python"; + with_terminal = YES; + } else if ([filetype isEqualToString: @"Python GUI Script"]) { + interpreter = @"/Applications/Python.app/Contents/MacOS/python"; + with_terminal = NO; + } else { + NSLog(@"Funny File Type: %@\n", filetype); + } + origsource = NULL; + return self; +} + +- (id)initWithFileSettings: (FileSettings *)source +{ + interpreter = [source->interpreter retain]; + debug = source->debug; + verbose = source->verbose; + inspect = source->inspect; + optimize = source->optimize; + nosite = source->nosite; + tabs = source->tabs; + others = [source->others retain]; + with_terminal = source->with_terminal; + + origsource = [source retain]; + return self; +} + +- (void)saveDefaults +{ + [origsource updateFromSource: self]; +} + +- (void)updateFromSource: (id )source +{ + interpreter = [[source interpreter] retain]; + debug = [source debug]; + verbose = [source verbose]; + inspect = [source inspect]; + optimize = [source optimize]; + nosite = [source nosite]; + tabs = [source tabs]; + others = [[source others] retain]; + with_terminal = [source with_terminal]; + if (!origsource) { + NSUserDefaults *defaults; + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + interpreter, @"interpreter", + [NSNumber numberWithBool: debug], @"debug", + [NSNumber numberWithBool: verbose], @"verbose", + [NSNumber numberWithBool: inspect], @"inspect", + [NSNumber numberWithBool: optimize], @"optimize", + [NSNumber numberWithBool: nosite], @"nosite", + [NSNumber numberWithBool: nosite], @"nosite", + others, @"others", + [NSNumber numberWithBool: with_terminal], @"with_terminal", + nil]; + defaults = [NSUserDefaults standardUserDefaults]; + [defaults setObject: dict forKey: prefskey]; + } +} + +- (void)updateFromUserDefaults: (NSString *)filetype +{ + NSUserDefaults *defaults; + NSDictionary *dict; + id value; + + prefskey = [filetype retain]; + defaults = [NSUserDefaults standardUserDefaults]; + dict = [defaults dictionaryForKey: filetype]; + if (!dict) + return; + value = [dict objectForKey: @"interpreter"]; + if (value) interpreter = [value retain]; + value = [dict objectForKey: @"debug"]; + if (value) debug = [value boolValue]; + value = [dict objectForKey: @"verbose"]; + if (value) verbose = [value boolValue]; + value = [dict objectForKey: @"inspect"]; + if (value) inspect = [value boolValue]; + value = [dict objectForKey: @"optimize"]; + if (value) optimize = [value boolValue]; + value = [dict objectForKey: @"nosite"]; + if (value) nosite = [value boolValue]; + value = [dict objectForKey: @"nosite"]; + if (value) tabs = [value boolValue]; + value = [dict objectForKey: @"others"]; + if (value) others = [value retain]; + value = [dict objectForKey: @"with_terminal"]; + if (value) with_terminal = [value boolValue]; +} + +- (NSString *)commandLineForScript: (NSString *)script +{ + return [NSString stringWithFormat: + @"\"%@\"%s%s%s%s%s%s %@ \"%@\" %s", + interpreter, + debug?" -d":"", + verbose?" -v":"", + inspect?" -i":"", + optimize?" -O":"", + nosite?" -S":"", + tabs?" -t":"", + others, + script, + with_terminal? "" : " &"]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return interpreter;}; +- (BOOL) debug { return debug;}; +- (BOOL) verbose { return verbose;}; +- (BOOL) inspect { return inspect;}; +- (BOOL) optimize { return optimize;}; +- (BOOL) nosite { return nosite;}; +- (BOOL) tabs { return tabs;}; +- (NSString *) others { return others;}; +- (BOOL) with_terminal { return with_terminal;}; + +@end diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.h b/Mac/OSX/PythonLauncher/MyAppDelegate.h new file mode 100644 index 000000000000..c65175a7aec6 --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyAppDelegate.h @@ -0,0 +1,14 @@ +/* MyAppDelegate */ + +#import + +@interface MyAppDelegate : NSObject +{ + BOOL initial_action_done; + BOOL should_terminate; +} +- (id)init; +- (IBAction)showPreferences:(id)sender; +- (BOOL)shouldShowUI; +- (BOOL)shouldTerminate; +@end diff --git a/Mac/OSX/PythonLauncher/MyAppDelegate.m b/Mac/OSX/PythonLauncher/MyAppDelegate.m new file mode 100644 index 000000000000..107e7d092b6e --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyAppDelegate.m @@ -0,0 +1,64 @@ +#import "MyAppDelegate.h" +#import "PreferencesWindowController.h" + +@implementation MyAppDelegate + +- (id)init +{ + self = [super init]; + initial_action_done = NO; + should_terminate = NO; + return self; +} + +- (IBAction)showPreferences:(id)sender +{ + [PreferencesWindowController getPreferencesWindow]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + // If we were opened because of a file drag or doubleclick + // we've set initial_action_done in shouldShowUI + // Otherwise we open a preferences dialog. + if (!initial_action_done) { + initial_action_done = YES; + [self showPreferences: self]; + } +} + +- (BOOL)shouldShowUI +{ + // if this call comes before applicationDidFinishLaunching: we do not show a UI + // for the file. Also, we should terminate immedeately after starting the script. + if (initial_action_done) + return YES; + initial_action_done = YES; + should_terminate = YES; + return NO; +} + +- (BOOL)shouldTerminate +{ + return should_terminate; +} + +- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender +{ + return NO; +} + + +- (BOOL)application:(NSApplication *)sender xx_openFile:(NSString *)filename +{ + initial_action_done = YES; + return YES; +} + +- (BOOL)application:(id)sender xx_openFileWithoutUI:(NSString *)filename +{ + initial_action_done = YES; + return YES; +} + +@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.h b/Mac/OSX/PythonLauncher/MyDocument.h new file mode 100755 index 000000000000..47c7be38e496 --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyDocument.h @@ -0,0 +1,39 @@ +// +// MyDocument.h +// PythonLauncher +// +// Created by Jack Jansen on Fri Jul 19 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + + +#import + +#import "FileSettings.h" + +@interface MyDocument : NSDocument +{ + IBOutlet NSTextField *interpreter; + IBOutlet NSButton *debug; + IBOutlet NSButton *verbose; + IBOutlet NSButton *inspect; + IBOutlet NSButton *optimize; + IBOutlet NSButton *nosite; + IBOutlet NSButton *tabs; + IBOutlet NSTextField *others; + IBOutlet NSButton *with_terminal; + IBOutlet NSTextField *commandline; + + NSString *script; + NSString *filetype; + FileSettings *settings; +} + +- (IBAction)do_run:(id)sender; +- (IBAction)do_cancel:(id)sender; +- (IBAction)do_reset:(id)sender; +- (IBAction)do_apply:(id)sender; + +- (void)controlTextDidChange:(NSNotification *)aNotification; + +@end diff --git a/Mac/OSX/PythonLauncher/MyDocument.m b/Mac/OSX/PythonLauncher/MyDocument.m new file mode 100755 index 000000000000..a4c20d1042db --- /dev/null +++ b/Mac/OSX/PythonLauncher/MyDocument.m @@ -0,0 +1,165 @@ +// +// MyDocument.m +// PythonLauncher +// +// Created by Jack Jansen on Fri Jul 19 2002. +// Copyright (c) 2002 __MyCompanyName__. All rights reserved. +// + +#import "MyDocument.h" +#import "MyAppDelegate.h" + +@implementation MyDocument + +- (id)init +{ + [super init]; + if (self) { + + // Add your subclass-specific initialization here. + // If an error occurs here, send a [self dealloc] message and return nil. + script = @".py"; + filetype = @"Python Script"; + } + return self; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"MyDocument"; +} + +- (void)close +{ + NSApplication *app = [NSApplication sharedApplication]; + [super close]; + if ([[app delegate] shouldTerminate]) + [app terminate: self]; +} + +- (void)load_defaults +{ + settings = [FileSettings newSettingsForFileType: filetype]; +} + +- (void)update_display +{ +// [[self window] setTitle: script]; + + [interpreter setStringValue: [settings interpreter]]; + [debug setState: [settings debug]]; + [verbose setState: [settings verbose]]; + [inspect setState: [settings inspect]]; + [optimize setState: [settings optimize]]; + [nosite setState: [settings nosite]]; + [tabs setState: [settings tabs]]; + [others setStringValue: [settings others]]; + [with_terminal setState: [settings with_terminal]]; + + [commandline setStringValue: [settings commandLineForScript: script]]; +} + +- (void)update_settings +{ + [settings updateFromSource: self]; +} + +- (BOOL)run +{ + const char *cmdline; + int sts; + + if ([settings with_terminal]) { + NSLog(@"Terminal not implemented yet\n"); + return NO; + } + cmdline = [[settings commandLineForScript: script] cString]; + sts = system(cmdline); + if (sts) { + NSLog(@"Exit status: %d\n", sts); + return NO; + } + return YES; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *) aController +{ + [super windowControllerDidLoadNib:aController]; + // Add any code here that need to be executed once the windowController has loaded the document's window. + [self load_defaults]; + [self update_display]; +} + +- (NSData *)dataRepresentationOfType:(NSString *)aType +{ + // Insert code here to write your document from the given data. You can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead. + return nil; +} + +- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type; +{ + // Insert code here to read your document from the given data. You can also choose to override -loadFileWrapperRepresentation:ofType: or -readFromFile:ofType: instead. + BOOL show_ui; + + // ask the app delegate whether we should show the UI or not. + show_ui = [[[NSApplication sharedApplication] delegate] shouldShowUI]; + script = [fileName retain]; + filetype = [type retain]; + settings = [FileSettings newSettingsForFileType: filetype]; + if (show_ui) { + [self update_display]; + return YES; + } else { + [self run]; + [self close]; + return NO; + } +} + +- (IBAction)do_run:(id)sender +{ + [self update_settings]; + [self update_display]; + if ([self run]) + [self close]; +} + +- (IBAction)do_cancel:(id)sender +{ + [self close]; +} + + +- (IBAction)do_reset:(id)sender +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_apply:(id)sender +{ + [self update_settings]; + [self update_display]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return [interpreter stringValue];}; +- (BOOL) debug { return [debug state];}; +- (BOOL) verbose { return [verbose state];}; +- (BOOL) inspect { return [inspect state];}; +- (BOOL) optimize { return [optimize state];}; +- (BOOL) nosite { return [nosite state];}; +- (BOOL) tabs { return [tabs state];}; +- (NSString *) others { return [others stringValue];}; +- (BOOL) with_terminal { return [with_terminal state];}; + +// Delegates +- (void)controlTextDidChange:(NSNotification *)aNotification +{ + [self update_settings]; + [self update_display]; +}; + +@end diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib new file mode 100644 index 000000000000..2a07ee11c65f --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/classes.nib @@ -0,0 +1,25 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {do_apply = id; do_filetype = id; do_reset = id; }; + CLASS = PreferencesWindowController; + LANGUAGE = ObjC; + OUTLETS = { + commandline = NSTextField; + debug = NSButton; + filetype = NSPopUpButton; + inspect = NSButton; + interpreter = NSTextField; + nosite = NSButton; + optimize = NSButton; + others = NSTextField; + tabs = NSButton; + verbose = NSButton; + with_terminal = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib new file mode 100644 index 000000000000..952d977cd40c --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 237 -80 356 240 0 0 1280 938 + IBFramework Version + 263.2 + IBOpenObjects + + 5 + + IBSystem Version + 5S66 + + diff --git a/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/PreferenceWindow.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..8c3102db5c5a4ac799a68c181fba1153de16a872 GIT binary patch literal 4920 zc-oCvYitzP6~1Ge#n_l&Odx>Tjv}N4C{RO48YhJHgNFs!hP5Fn1u~w!Yfn8pv&_t5 zJAbNiW=H*zNY%<7d84YLrL7WD)6}A9yR@a1s*;c^1x1RGkSZa5SSutXBqXbrEYox5 z&b|x|v5a@;%z5AQ_%1c|)@Xu8P0OHC+^)_$LfCPfRb7$Jw(kC)QQ7K{EXgK!9jCS{ z!YL$`<}B?=)6(OdxMkd_3Zp2nMJz+n283}(*tV(1pfPGtO{V5aMT_dg?Yd?ex~fvc zO}UPsZ1g}V)D<~OwWLkhxKpEq!(jr%=YW{Bq<)nK3MVJ)x~)NKoKWbn>2e5Z&s3wAbzE_$MdP+GH=fQo4WPcW6K#ZB6tFWn+0Zj;4eFX0kqsqbxj-TA z7+Foo*v}t7ek`Ow&FVt1$Em3&4Vi8k_ka(qb;hLuiZah}OYMVH9*RrGkn5(L-+O<6 zH>>%Zqsj=4Ml8vquIn_OP3Vcf1p3t~TZ*o=@T@j=MSAc>Thg+0t(~f>UDeD34Z`qg z%uylOrTaWTKELk;p+}z+Vl%Q;-*84UQm_DPf9C)wrn?s7L30_ZuqQhvW3? zfj`0NtN@qz@o(|X<3Yl=`mPA%HKA)!YLM}?b2XjH5N9R&84G@#UuWvl(`W*id+CUE zK%r`M!(YMgy7$FHjN&opqOMiOoX7Eih`J!y_Y{8s}Ue8BuvOB za8BzZ)Uu$?OfjY#VoXt~h`rI`ewIpI_9M(W)iSTmeX;D#CG)S5A=gj6$ze_p& zv3`n|5^)PzW?6Fm-w^-bD%~(_;e;(Tt;1NF)-85s{MIVyc@g$Z?w_ z4-FW4Qj3;lTPQz~6;|;m{^LIB!+KkI+khG~8oxCeD?2rd8VQ5K-?H+#T^`t#qSAyd zyk(Qz8Z6!1nhM2Jg|h*rFC0&5qN0hC*h`JLqDiVa>`&B^fjiC$(^UM~7PiUf8>+?* zy?N~M#f#YOO@%)6CsxFtV%5-Wlan~HhZRd6gpzS9!qvNMVO zl=D=K>rpC7F(8O0Uv5QP51(P{q)k5bZGE`3t;X(zrNou@sMtShQ5lSt^gnur{#Khz z`}(Js*1w@cF>$#Ehau`Q(NrwDBQaXCGy4oX+iWu9+nHI~&JXr$zM0vjPaq6 z7*nMIv&Ai{Tqw;LH`opXHo1a6;b(fLY&&c`XA46R5Wd9ELT~<~d@JC9z;lMY_@m6t zS67ihfgsqzWn1_wD!@-J4ljd1Y?8Kx4{af|5jjE|%bWj_d)*d(c~}?=K_mNp%$xbU zZ;po2=I}10oN6VkjO_)X3~~Jp_M3F(0^+;I0N)+#>nvcrizR$VQol=m{9DM~r3#@J z0-?5`vc(QvPR6OWv@8tIX>UI7&E>t>yvIQ!hrGQso=^ez*~0(E0e>n8X!wwptE*&N z*v+#ymKY&uy1ooEyBuZqNE%f!K{W`O+-yp4YETQLbs4d%FHH&8Z1Rmw>~sp!G2z|G zdXMs6ZN{6=0l;AGNSQ1>f#23K0UB0TM@Su9rtx$enP#X&y%zKz6-_Me<w zd^C;X;)S)Z+CDZ&v{g8*90uVWO;nq{MFJX@U`WReX$BOWJT;h*;2GO&`FW1^0um0i20+4tXA6np zMgDxD5%`s^)FV4{)BYfe>Sqh_w4lhD+&!eP0J?#QwuKwGg~Zw@Rq23K@P2+m_5~gk z1f)bl9SyYHe;V=O(}<6rMx1>baqdatuH3z)I`$=w$a%{nI09s3@e4AxmRNp_XL5HI z>xM;~+3Qq=l{Y%r=@YE~Z8rZZ+g{6>!z}YMyY*vs=S_C|4R&J(>+WWI_p^tuuzPQ@ z*&i|b6LxnmQ+~?!cQW=G)6cSZdRb^2I~if^huF+Mwx^XH?P9G5S-zPq>|wd>Ecy<6 z_avJT*rOIUy@l2OkllZso$6zAyI9>a_F5aeu$6TlVUc4jeull?&d$Bd22L?cVne6d w;iD`YVtvQiz60#$PWE6oJJ!Pv9?tY<2;PuZceb_bvMwDkU;qs3_@6uf2Pq^MivR!s literal 0 Hc-jL100001 diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.h b/Mac/OSX/PythonLauncher/PreferencesWindowController.h new file mode 100644 index 000000000000..a2a4c74ed6e7 --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferencesWindowController.h @@ -0,0 +1,32 @@ +/* PreferencesWindowController */ + +#import + +#import "FileSettings.h" + +@interface PreferencesWindowController : NSWindowController +{ + IBOutlet NSPopUpButton *filetype; + IBOutlet NSTextField *interpreter; + IBOutlet NSButton *debug; + IBOutlet NSButton *verbose; + IBOutlet NSButton *inspect; + IBOutlet NSButton *optimize; + IBOutlet NSButton *nosite; + IBOutlet NSButton *tabs; + IBOutlet NSTextField *others; + IBOutlet NSButton *with_terminal; + IBOutlet NSTextField *commandline; + + FileSettings *settings; +} + ++ getPreferencesWindow; + +- (IBAction)do_reset:(id)sender; +- (IBAction)do_apply:(id)sender; +- (IBAction)do_filetype:(id)sender; + +- (void)controlTextDidChange:(NSNotification *)aNotification; + +@end diff --git a/Mac/OSX/PythonLauncher/PreferencesWindowController.m b/Mac/OSX/PythonLauncher/PreferencesWindowController.m new file mode 100644 index 000000000000..88421627bba0 --- /dev/null +++ b/Mac/OSX/PythonLauncher/PreferencesWindowController.m @@ -0,0 +1,94 @@ +#import "PreferencesWindowController.h" + +@implementation PreferencesWindowController + ++ getPreferencesWindow +{ + static PreferencesWindowController *_singleton; + + if (!_singleton) + _singleton = [[PreferencesWindowController alloc] init]; + [_singleton showWindow: _singleton]; + return _singleton; +} + +- (id) init +{ + self = [self initWithWindowNibName: @"PreferenceWindow"]; + return self; +} + +- (void)load_defaults +{ + NSString *title = [filetype titleOfSelectedItem]; + + settings = [FileSettings getDefaultsForFileType: title]; +} + +- (void)update_display +{ +// [[self window] setTitle: script]; + + [interpreter setStringValue: [settings interpreter]]; + [debug setState: [settings debug]]; + [verbose setState: [settings verbose]]; + [inspect setState: [settings inspect]]; + [optimize setState: [settings optimize]]; + [nosite setState: [settings nosite]]; + [tabs setState: [settings tabs]]; + [others setStringValue: [settings others]]; + [with_terminal setState: [settings with_terminal]]; + + [commandline setStringValue: [settings commandLineForScript: @""]]; +} + +- (void) windowDidLoad +{ + [super windowDidLoad]; + [self load_defaults]; + [self update_display]; +} + +- (void)update_settings +{ + [settings updateFromSource: self]; +} + +- (IBAction)do_filetype:(id)sender +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_reset:(id)sender +{ + [self load_defaults]; + [self update_display]; +} + +- (IBAction)do_apply:(id)sender +{ + [self update_settings]; + [self update_display]; +} + +// FileSettingsSource protocol +- (NSString *) interpreter { return [interpreter stringValue];}; +- (BOOL) debug { return [debug state];}; +- (BOOL) verbose { return [verbose state];}; +- (BOOL) inspect { return [inspect state];}; +- (BOOL) optimize { return [optimize state];}; +- (BOOL) nosite { return [nosite state];}; +- (BOOL) tabs { return [tabs state];}; +- (NSString *) others { return [others stringValue];}; +- (BOOL) with_terminal { return [with_terminal state];}; + +// Delegates +- (void)controlTextDidChange:(NSNotification *)aNotification +{ + [self update_settings]; + [self update_display]; +}; + + +@end diff --git a/Mac/OSX/PythonLauncher/PythonCompiled.icns b/Mac/OSX/PythonLauncher/PythonCompiled.icns new file mode 100644 index 0000000000000000000000000000000000000000..afead3e42e883b95c6aba56e816e63fa8f2cff16 GIT binary patch literal 57125 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

t~Nh(F4lj~iaF&*4MlrdWricTs; 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 X?^@RH=I(J#>mRuY^54gQ#N+=1qZ=A> literal 0 Hc-jL100001 diff --git a/Mac/OSX/PythonLauncher/PythonInterpreter.icns b/Mac/OSX/PythonLauncher/PythonInterpreter.icns new file mode 100644 index 0000000000000000000000000000000000000000..d5dd12fde30166370e04a79d567066734f483b93 GIT binary patch literal 45913 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 + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + ???? + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + py + + CFBundleTypeIconFile + PythonSource.icns + CFBundleTypeName + Python Script + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + pyw + + CFBundleTypeName + Python GUI Script + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + pyc + + CFBundleTypeIconFile + PythonCompiled.icns + CFBundleTypeName + Python Bytecode Document + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleExecutable + PythonLauncher + CFBundleGetInfoString + Python Launcher + CFBundleIconFile + PythonInterpreter.icns + CFBundleIdentifier + org.python.PythonLauncher + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Python Launcher + CFBundlePackageType + APPL + CFBundleSignature + PytL + CFBundleVersion + 2.3a0 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + +"; + shouldUseHeadermap = 1; + }; + 2A37F4C7FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 2A37F4C8FDCFA73011CA2CEA, + F52A90D002EB5C6A01000102, + F5A4C14202F2055D01000102, + F5A4C14702F2070D01000102, + ); + isa = PBXHeadersBuildPhase; + }; + 2A37F4C8FDCFA73011CA2CEA = { + fileRef = 2A37F4AEFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + }; + }; + 2A37F4C9FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 080E96D9FE201CDB7F000001, + 080E96DAFE201CDB7F000001, + 080E96DBFE201CDB7F000001, + 089C1661FE840EACC02AAC07, + F58D4A3D02F1F94B01000102, + F58D4A3E02F1F94B01000102, + F58D4A3F02F1F94B01000102, + F5A4C13F02F203F701000102, + ); + isa = PBXResourcesBuildPhase; + }; + 2A37F4CEFDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 2A37F4CFFDCFA73011CA2CEA, + 2A37F4D0FDCFA73011CA2CEA, + F52A90CF02EB5C6A01000102, + F5A4C14302F2055D01000102, + F5A4C14602F2070D01000102, + ); + isa = PBXSourcesBuildPhase; + }; + 2A37F4CFFDCFA73011CA2CEA = { + fileRef = 2A37F4ACFDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 2A37F4D0FDCFA73011CA2CEA = { + fileRef = 2A37F4B0FDCFA73011CA2CEA; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 2A37F4D1FDCFA73011CA2CEA = { + buildActionMask = 2147483647; + files = ( + 1058C7A9FEA54F5311CA2CBB, + ); + isa = PBXFrameworksBuildPhase; + }; +//2A0 +//2A1 +//2A2 +//2A3 +//2A4 +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 + 4A9504D0FFE6A4CB11CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = NO; + OPTIMIZATION_CFLAGS = "-O0"; + }; + isa = PBXBuildStyle; + name = Development; + }; + 4A9504D1FFE6A4CB11CA0CBA = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = YES; + }; + isa = PBXBuildStyle; + name = Deployment; + }; +//4A0 +//4A1 +//4A2 +//4A3 +//4A4 +//F50 +//F51 +//F52 +//F53 +//F54 + F52A90CD02EB5C6A01000102 = { + isa = PBXFileReference; + path = FileSettings.m; + refType = 4; + }; + F52A90CE02EB5C6A01000102 = { + isa = PBXFileReference; + path = FileSettings.h; + refType = 4; + }; + F52A90CF02EB5C6A01000102 = { + fileRef = F52A90CD02EB5C6A01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F52A90D002EB5C6A01000102 = { + fileRef = F52A90CE02EB5C6A01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3A02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonCompiled.icns; + refType = 4; + }; + F58D4A3B02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonInterpreter.icns; + refType = 4; + }; + F58D4A3C02F1F94B01000102 = { + isa = PBXFileReference; + path = PythonSource.icns; + refType = 4; + }; + F58D4A3D02F1F94B01000102 = { + fileRef = F58D4A3A02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3E02F1F94B01000102 = { + fileRef = F58D4A3B02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F58D4A3F02F1F94B01000102 = { + fileRef = F58D4A3C02F1F94B01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C13E02F203F601000102 = { + isa = PBXFileReference; + path = PreferenceWindow.nib; + refType = 4; + }; + F5A4C13F02F203F701000102 = { + fileRef = F5A4C13E02F203F601000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14002F2055C01000102 = { + isa = PBXFileReference; + path = PreferencesWindowController.h; + refType = 4; + }; + F5A4C14102F2055C01000102 = { + isa = PBXFileReference; + path = PreferencesWindowController.m; + refType = 4; + }; + F5A4C14202F2055D01000102 = { + fileRef = F5A4C14002F2055C01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14302F2055D01000102 = { + fileRef = F5A4C14102F2055C01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14402F2070D01000102 = { + isa = PBXFileReference; + path = MyAppDelegate.m; + refType = 4; + }; + F5A4C14502F2070D01000102 = { + isa = PBXFileReference; + path = MyAppDelegate.h; + refType = 4; + }; + F5A4C14602F2070D01000102 = { + fileRef = F5A4C14402F2070D01000102; + isa = PBXBuildFile; + settings = { + }; + }; + F5A4C14702F2070D01000102 = { + fileRef = F5A4C14502F2070D01000102; + isa = PBXBuildFile; + settings = { + }; + }; + }; + rootObject = 2A37F4A9FDCFA73011CA2CEA; +} diff --git a/Mac/OSX/PythonLauncher/PythonSource.icns b/Mac/OSX/PythonLauncher/PythonSource.icns new file mode 100644 index 0000000000000000000000000000000000000000..4ac7a9687441f615f182378c5957b7fe6d58ecf4 GIT binary patch literal 50112 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 + +int main(int argc, const char *argv[]) +{ + return NSApplicationMain(argc, argv); +} -- 2.47.3