Move Mac/OSX/PythonLauncher one level up
diff --git a/Mac/PythonLauncher/MyDocument.m b/Mac/PythonLauncher/MyDocument.m
new file mode 100755
index 0000000..5acc2dc
--- /dev/null
+++ b/Mac/PythonLauncher/MyDocument.m
@@ -0,0 +1,175 @@
+//
+//  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"
+#import "doscript.h"
+
+@implementation MyDocument
+
+- (id)init
+{
+    self = [super init];
+    if (self) {
+    
+        // Add your subclass-specific initialization here.
+        // If an error occurs here, send a [self dealloc] message and return nil.
+        script = [@"<no script>.py" retain];
+        filetype = [@"Python Script" retain];
+        settings = NULL;
+    }
+    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
+{
+//    if (settings) [settings release];
+    settings = [FileSettings newSettingsForFileType: filetype];
+}
+
+- (void)update_display
+{
+//    [[self window] setTitle: script];
+    
+    [interpreter setStringValue: [settings interpreter]];
+    [honourhashbang setState: [settings honourhashbang]];
+    [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]];
+    [scriptargs setStringValue: [settings scriptargs]];
+    [with_terminal setState: [settings with_terminal]];
+    
+    [commandline setStringValue: [settings commandLineForScript: script]];
+}
+
+- (void)update_settings
+{
+    [settings updateFromSource: self];
+}
+
+- (BOOL)run
+{
+    const char *cmdline;
+    int sts;
+    
+     cmdline = [[settings commandLineForScript: script] cString];
+   if ([settings with_terminal]) {
+        sts = doscript(cmdline);
+    } else {
+        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 release];
+    script = [fileName retain];
+    [filetype release];
+    filetype = [type retain];
+//    if (settings) [settings release];
+    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
+{
+    [settings reset];
+    [self update_display];
+}
+
+- (IBAction)do_apply:(id)sender
+{
+    [self update_settings];
+    [self update_display];
+}
+
+// FileSettingsSource protocol 
+- (NSString *) interpreter { return [interpreter stringValue];};
+- (BOOL) honourhashbang { return [honourhashbang state];};
+- (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];};
+- (NSString *) scriptargs { return [scriptargs stringValue];};
+- (BOOL) with_terminal { return [with_terminal state];};
+
+// Delegates
+- (void)controlTextDidChange:(NSNotification *)aNotification
+{
+    [self update_settings];
+    [self update_display];
+};
+
+@end