Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/ui/ui-drv/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ui-drv/cocoa')
-rw-r--r--src/ui/ui-drv/cocoa/AppController.h59
-rw-r--r--src/ui/ui-drv/cocoa/AppController.m542
-rw-r--r--src/ui/ui-drv/cocoa/CustomDialog.h38
-rw-r--r--src/ui/ui-drv/cocoa/CustomDialog.m433
-rw-r--r--src/ui/ui-drv/cocoa/English.lproj/Credits.html26
-rw-r--r--src/ui/ui-drv/cocoa/English.lproj/InfoPlist.stringsbin0 -> 420 bytes
-rw-r--r--src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/designable.nib498
-rw-r--r--src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/keyedobjects.nibbin0 -> 4197 bytes
-rw-r--r--src/ui/ui-drv/cocoa/FractalView.h70
-rw-r--r--src/ui/ui-drv/cocoa/FractalView.m347
-rw-r--r--src/ui/ui-drv/cocoa/HowToBuild.txt47
-rw-r--r--src/ui/ui-drv/cocoa/Info.plist69
-rw-r--r--src/ui/ui-drv/cocoa/Japanese.lproj/InfoPlist.stringsbin0 -> 208 bytes
-rw-r--r--src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/classes.nib4
-rw-r--r--src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/info.nib17
-rw-r--r--src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/keyedobjects.nibbin0 -> 10793 bytes
-rw-r--r--src/ui/ui-drv/cocoa/Read Me.rtf193
-rw-r--r--src/ui/ui-drv/cocoa/Readme Cocoa390
-rw-r--r--src/ui/ui-drv/cocoa/VideatorProxy.h42
-rw-r--r--src/ui/ui-drv/cocoa/VideatorProxy.m157
-rw-r--r--src/ui/ui-drv/cocoa/XaoS.icnsbin0 -> 223269 bytes
-rw-r--r--src/ui/ui-drv/cocoa/XaoS.xcodeproj/project.pbxproj831
-rw-r--r--src/ui/ui-drv/cocoa/XaoSDocument.icnsbin0 -> 127993 bytes
-rw-r--r--src/ui/ui-drv/cocoa/XaoS_Prefix.pch7
-rw-r--r--src/ui/ui-drv/cocoa/aconfig.h123
-rw-r--r--src/ui/ui-drv/cocoa/grlib_cocoa.m142
-rw-r--r--src/ui/ui-drv/cocoa/performanceCursor.tiffbin0 -> 4478 bytes
-rw-r--r--src/ui/ui-drv/cocoa/ui_cocoa.m267
-rw-r--r--src/ui/ui-drv/cocoa/version.h22
29 files changed, 4324 insertions, 0 deletions
diff --git a/src/ui/ui-drv/cocoa/AppController.h b/src/ui/ui-drv/cocoa/AppController.h
new file mode 100644
index 0000000..324eaff
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/AppController.h
@@ -0,0 +1,59 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import <Cocoa/Cocoa.h>
+#import <Carbon/Carbon.h>
+
+#import "FractalView.h"
+#include "ui.h"
+@ class VideatorProxy;
+
+@interface AppController:NSObject {
+ FractalView *view;
+ NSWindow *window;
+ BOOL applicationIsLaunched;
+}
+
+#pragma mark Accessors
+-(FractalView *) view;
+
+#pragma mark Driver Initialization
+-(void) initLocale;
+-(int) initDriver:(struct ui_driver *)driver fullscreen:(BOOL) fullscreen;
+-(void) uninitDriver;
+
+#pragma mark Menus
+-(void) localizeApplicationMenu;
+-(void) performMenuAction:(NSMenuItem *) sender;
+-(NSString *) keyEquivalentForName:(NSString *) name;
+-(void) buildMenuWithContext:(struct uih_context *)context name:(CONST char *) name;
+-(void) buildMenuWithContext:(struct uih_context *)context name:(CONST char *)menuName parent:(NSMenu *) parentMenu;
+-(void) buildMenuWithContext:(struct uih_context *)context name:(CONST char *)menuName parent:(NSMenu *)parentMenu isNumbered:(BOOL) isNumbered;
+-(void) showPopUpMenuWithContext:(struct uih_context *)context name:(CONST char *) name;
+
+#pragma mark Dialogs
+-(void) showDialogWithContext:(struct uih_context *)context name:(CONST char *) name;
+
+#pragma mark Help
+-(void) showHelpWithContext:(struct uih_context *)context name:(CONST char *) name;
+@end extern AppController *controller;
diff --git a/src/ui/ui-drv/cocoa/AppController.m b/src/ui/ui-drv/cocoa/AppController.m
new file mode 100644
index 0000000..6f03b97
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/AppController.m
@@ -0,0 +1,542 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import "AppController.h"
+#import "CustomDialog.h"
+#import "VideatorProxy.h"
+#import "ui.h"
+
+#ifdef HAVE_GETTEXT
+#include <libintl.h>
+#include <locale.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+/*
+ * This category overrides standard NSWindow behavior which prevents a window
+ * from receiving keyboard events unless it has a titlebar. Without this, the
+ * keyboard doesn't work in full screen mode.
+ */
+@implementation NSWindow (CanBecomeKeyWindowOverride)
+- (BOOL)canBecomeKeyWindow {
+ return YES;
+}
+@end
+
+
+AppController *controller;
+
+@implementation AppController
+
+
+#pragma mark Initialization
+- (id)init {
+ self = [super init];
+ if (self) {
+ applicationIsLaunched = NO;
+ [self initLocale];
+ }
+ return self;
+}
+
+#pragma mark Accessors
+
+- (FractalView *)view {
+ return view;
+}
+
+#pragma mark Driver Initialization
+
+- (void)initLocale {
+ /*
+ * The LANG environment variables used by gettext to determine the locale
+ * are not normally set on Mac OS X, so we use the Cocoa API to retrieve
+ * the list of preferred languages and set the LANG variable accordingly.
+ */
+
+ NSString *myLocalePath = [[[NSBundle mainBundle] resourcePath]
+ stringByAppendingPathComponent:@"locale"];
+
+#ifdef USE_LOCALEPATH
+ /*
+ * This is a global variable defined in ui.h, which the main function uses
+ * to locate the locale files when USE_LOCALEPATH is defined. If it is
+ * undefined, the main function will use the hard coded locale path instead.
+ */
+ localepath = (char *)[myLocalePath UTF8String];
+#endif
+
+ /*
+ * Each of the locales we support is stored in its own subdirectory in the
+ * Resources/locale directory. The name of the directory corresponds to the
+ * ISO code for the locale. Therefore, a list of the files in this
+ * directory conveniently serves as a list of supported locales.
+ */
+ NSMutableArray *supportedLanguages = [[[NSFileManager defaultManager]
+ directoryContentsAtPath:myLocalePath]
+ mutableCopy];
+
+ /* English is supported by default, so there isn't a locale directory for
+ * it. But in order to match it with the user's preferred languages, it
+ * still has to be in the array of supported languages.
+ */
+ [supportedLanguages addObject:@"en"];
+
+ /*
+ * The AppleLanguages user default returns an array of languages sorted
+ * according to the User's settings in the International Preference Panel.
+ * We find the best match between the supported and preferred locales
+ * and set the LANG variable to that.
+ */
+ NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
+ NSArray *preferredLanguages = [defaults objectForKey:@"AppleLanguages"];
+ NSString *lang = [preferredLanguages firstObjectCommonWithArray:supportedLanguages];
+ if (lang) setenv("LANG", [lang UTF8String], /*overwrite? */ 0);
+
+ [supportedLanguages release];
+}
+
+- (int)initDriver:(struct ui_driver *)driver
+ fullscreen:(BOOL)fullscreen {
+ /*
+ * Calculate the pixel size in cm. userSpaceScaleFactor returns:
+ * pixels per per point
+ * pixels per inch = pixels per point * 72.0
+ * inches per pixel = 1 / pixels per inch
+ * cm per pixel = inches per pixel * 2.54
+ */
+ CGDirectDisplayID displayID = (CGDirectDisplayID)[[[[NSScreen mainScreen] deviceDescription] objectForKey:@"NSScreenNumber"] intValue];
+ CGSize displaySize = CGDisplayScreenSize(displayID);
+ NSSize displayResolution = [[NSScreen mainScreen] frame].size;
+ driver->width = (displaySize.width/displayResolution.width)/10;
+ driver->height = (displaySize.height/displayResolution.height)/10;
+
+ if (fullscreen) {
+ /*
+ * SetSystemUIMode is the easiest way to make a full screen application.
+ * It's Carbon, but it should be 64-bit safe. kUIModeAllHidden hides
+ * the dock and menuBar and kUIOptionAutoShowMenuBar causes the menubar
+ * to automatically slide in when the user moves the mouse to the top
+ * edge of the screen.
+ */
+ SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ window = [[NSWindow alloc] initWithContentRect:[[NSScreen mainScreen] frame]
+ styleMask:NSBorderlessWindowMask
+ backing:NSBackingStoreBuffered
+ defer:YES];
+ } else {
+ window = [[NSWindow alloc] initWithContentRect:NSMakeRect(50, 50, 640, 480)
+ styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
+ backing:NSBackingStoreBuffered
+ defer:YES];
+ [window setFrameAutosaveName:@"XaoSWindow"];
+ }
+
+ view = [[FractalView alloc] initWithFrame:[[window contentView] frame]];
+ [view setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+ [[window contentView] addSubview:view];
+ [window makeFirstResponder:view];
+ [window setDelegate:self];
+ [window setTitle:@"XaoS"];
+ [window makeKeyAndOrderFront:self];
+ [NSApp setDelegate:self];
+
+ /*
+ * These tasks should only be done once, when the application first launches
+ * but for various reasons, they can't be done until after the main run
+ * loop has started. That's why we put them in the driver init code.
+ */
+ if (!applicationIsLaunched) {
+ [self localizeApplicationMenu];
+ [NSApp finishLaunching];
+ applicationIsLaunched = YES;
+ }
+
+ return 1; // 1 for success; 0 for failure
+}
+
+- (void)uninitDriver {
+ SetSystemUIMode(kUIModeNormal, 0);
+ [view release];
+ [window release];
+}
+
+#pragma mark Menus
+
+- (void)localizeApplicationMenu {
+ /*
+ * Internationalize XaoS application menu. We do this via code instead
+ * of within the nib because this allows all i18n to be cross-platform and
+ * self-contained within the po file instead of spread across many places.
+ */
+ NSMenu *appMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
+
+ [[appMenu itemWithTitle:@"About XaoS"]
+ setTitle:[NSString stringWithUTF8String:_("About XaoS")]];
+
+ [[appMenu itemWithTitle:@"Services"]
+ setTitle:[NSString stringWithUTF8String:_("Services")]];
+
+ [[appMenu itemWithTitle:@"Hide XaoS"]
+ setTitle:[NSString stringWithUTF8String:_("Hide XaoS")]];
+
+ [[appMenu itemWithTitle:@"Hide Others"]
+ setTitle:[NSString stringWithUTF8String:_("Hide Others")]];
+
+ [[appMenu itemWithTitle:@"Show All"]
+ setTitle:[NSString stringWithUTF8String:_("Show All")]];
+
+ [[appMenu itemWithTitle:@"Quit XaoS"]
+ setTitle:[NSString stringWithUTF8String:_("Quit XaoS")]];
+}
+
+- (void)performMenuAction:(NSMenuItem *)sender {
+ /*
+ * Find the XaoS menu item associated with the sending Cocoa menu item
+ * then invoke the callback to perform that action.
+ */
+ NSString *name = [sender representedObject];
+ CONST menuitem *item = menu_findcommand([name UTF8String]);
+
+ ui_menuactivate(item, NULL);
+}
+
+- (NSString *)keyEquivalentForName:(NSString *)name {
+ // If you want more command-keys, just add them here based on their name:
+ if ([name isEqualToString:@"undo"]) return @"z";
+ if ([name isEqualToString:@"redo"]) return @"Z";
+ if ([name isEqualToString:@"loadpos"]) return @"o";
+ if ([name isEqualToString:@"savepos"]) return @"s";
+ return @"";
+}
+
+- (void)buildMenuWithContext:(struct uih_context *)context
+ name:(CONST char *)name {
+ NSMenu *menu = [NSApp mainMenu];
+ while ([menu numberOfItems] > 1)
+ [menu removeItemAtIndex:1];
+ [self buildMenuWithContext:context name:name parent:menu];
+}
+
+- (void)buildMenuWithContext:(struct uih_context *)context
+ name:(CONST char *)menuName
+ parent:(NSMenu *)parentMenu {
+ [self buildMenuWithContext:context
+ name:menuName
+ parent:parentMenu
+ isNumbered:NO];
+}
+
+- (void)buildMenuWithContext:(struct uih_context *)context
+ name:(CONST char *)menuName
+ parent:(NSMenu *)parentMenu
+ isNumbered:(BOOL)isNumbered {
+ int i, n;
+ CONST menuitem *item;
+ for (i=0,n=1; (item = menu_item(menuName, i)) != NULL; i++) {
+ if (item->type == MENU_SEPARATOR) {
+ [parentMenu addItem:[NSMenuItem separatorItem]];
+ } else {
+ NSString *menuTitle = [NSString stringWithUTF8String:item->name];
+
+ /*
+ * Add elipses to menu items that open dialogs in order to conform
+ * with the Apple Human Interface Guidelines.
+ */
+ if (item->type == MENU_CUSTOMDIALOG || item->type == MENU_DIALOG)
+ menuTitle = [menuTitle stringByAppendingString:@"..."];
+
+ NSString *menuShortName = [NSString stringWithUTF8String:item->shortname];
+ NSString *keyEquiv = [self keyEquivalentForName:menuShortName];
+
+ /*
+ * Add classic XaoS key accelerator to name in parenthesis, unless
+ * this is the main menu. This allows both Mac-style and Xaos-style
+ * key equivalents to co-exist.
+ */
+ if (item->key && parentMenu != [NSApp mainMenu])
+ menuTitle = [NSString stringWithFormat:@"%@ (%s)", menuTitle, item->key];
+
+ NSMenuItem *newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:menuTitle action:nil keyEquivalent:keyEquiv];
+
+ /*
+ * If this is a numbered pop-up menu, override the default key
+ * accelerator with a number or letter based on the position in
+ * the menu.
+ */
+ if (isNumbered && item->type != MENU_SUBMENU) {
+ if (n < 10)
+ keyEquiv = [NSString stringWithFormat:@"%d", n];
+ else if (n == 10)
+ keyEquiv = @"0";
+ else if (n < 36)
+ keyEquiv = [NSString stringWithFormat:@"%c", 'a' + n - 11];
+
+ [newItem setKeyEquivalent:keyEquiv];
+ [newItem setKeyEquivalentModifierMask:0];
+ n++;
+ }
+
+ if (item->type == MENU_SUBMENU) {
+ /* Recursively build submenus */
+ NSMenu *newMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:menuTitle];
+ [newMenu setDelegate:self];
+ [newItem setSubmenu:newMenu];
+ [self buildMenuWithContext:context name:item->shortname parent:newMenu];
+
+ /* Conditionally add special items to certain menus */
+
+ /*
+ * These items are necessary to provide the expected keyboard
+ * equivalents for cut & paste operations in custom dialogs
+ * and to conform to the human interface guidelines
+ */
+ if ([menuShortName isEqualToString:@"edit"]) {
+ [newMenu addItem:[NSMenuItem separatorItem]];
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Cut")]
+ action:@selector(cut:) keyEquivalent:@"x"];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Copy")]
+ action:@selector(copy:) keyEquivalent:@"c"];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Paste")]
+ action:@selector(paste:) keyEquivalent:@"v"];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Delete")]
+ action:@selector(delete:) keyEquivalent:@""];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Select All")]
+ action:@selector(selectAll:) keyEquivalent:@"a"];
+ }
+
+ /*
+ * These items in the window menu are necessary to provide expected
+ * keyboard equivalents for menu operations such as minimizing and
+ * to conform with the human interface guidelnes.
+ */
+ if ([menuShortName isEqualToString:@"window"]) {
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Minimize")]
+ action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Zoom")]
+ action:@selector(performZoom:) keyEquivalent:@""];
+
+ [newMenu addItem:[NSMenuItem separatorItem]];
+
+ [newMenu addItemWithTitle:[NSString stringWithUTF8String:_("Bring All to Front")]
+ action:@selector(arrangeInFront:) keyEquivalent:@""];
+ }
+
+ /*
+ * The close menu item in the File menu is necessary to provide
+ * the expected Command-W close window keyboard equivalent and
+ * to conform with the human interface guidelines.
+ */
+ if ([menuShortName isEqualToString:@"file"]) {
+ int i = [newMenu indexOfItemWithRepresentedObject:@"savepos"];
+ [newMenu insertItemWithTitle:[NSString stringWithUTF8String:_("Close")]
+ action:@selector(performClose:)
+ keyEquivalent:@"w"
+ atIndex:i];
+ [newMenu insertItem:[NSMenuItem separatorItem] atIndex:i];
+ }
+
+ /*
+ * Add Videator Output menu item in the UI menu just below
+ * VJ Mode. This will toggle sending video feed to Videator.
+ */
+#ifdef VIDEATOR_SUPPORT
+ if ([menuShortName isEqualToString:@"ui"]) {
+ int i = [newMenu indexOfItemWithRepresentedObject:@"inhibittextoutput"]+1;
+ NSMenuItem *item = [newMenu insertItemWithTitle:[NSString stringWithUTF8String:_("Videator Output")]
+ action:@selector(toggleVideator:)
+ keyEquivalent:@""
+ atIndex:i];
+ [item setTarget:[view videatorProxy]];
+ [item setRepresentedObject:@"videator"];
+ }
+#endif
+
+ [newMenu release];
+ } else {
+ /*
+ * Set action for leaf menu items to generic callback function
+ * and save the short name as the item's represented object. When
+ * the callback is activated, it will find the XaoS menu item
+ * to activate based on the represented object.
+ */
+ [newItem setTarget:self];
+ [newItem setAction:@selector(performMenuAction:)];
+ [newItem setRepresentedObject:menuShortName];
+ if (item->flags & (MENUFLAG_RADIO | MENUFLAG_CHECKBOX) && menu_enabled (item, context))
+ [newItem setState:NSOnState];
+ }
+
+ [parentMenu addItem:newItem];
+ [newItem release];
+ }
+ }
+}
+
+- (void)menuNeedsUpdate:(NSMenu *)menu {
+ CONST struct menuitem *xaosItem;
+ NSMenuItem *menuItem;
+ NSEnumerator *itemEnumerator = [[menu itemArray] objectEnumerator];
+ while (menuItem = [itemEnumerator nextObject]) {
+ if ([menuItem representedObject]) {
+ xaosItem = menu_findcommand([[menuItem representedObject] UTF8String]);
+ if (xaosItem)
+ [menuItem setState:(menu_enabled(xaosItem, globaluih) ? NSOnState : NSOffState)];
+#ifdef VIDEATOR_SUPPORT
+ else if ([[menuItem representedObject] isEqualToString:@"videator"])
+ [menuItem setState:([[view videatorProxy] videatorEnabled] ? NSOnState : NSOffState)];
+#endif
+ }
+ }
+}
+
+- (void)showPopUpMenuWithContext:(struct uih_context *)context
+ name:(CONST char *)name {
+ NSMenu *popUpMenu = [[NSMenu alloc] initWithTitle:@"Popup Menu"];
+ NSPopUpButtonCell *popUpButtonCell = [[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:NO];
+ NSRect frame = {{0.0, 0.0}, {0.0, 0.0}};
+ frame.origin = [window mouseLocationOutsideOfEventStream];
+ [self buildMenuWithContext:context name:name parent:popUpMenu isNumbered:YES];
+ int state = [[popUpMenu itemAtIndex:0] state];
+ [popUpButtonCell setMenu:popUpMenu];
+ [[popUpMenu itemAtIndex:0] setState:state];
+ [popUpButtonCell performClickWithFrame:frame inView:view];
+ [popUpButtonCell release];
+ [popUpMenu release];
+}
+
+#pragma mark Dialogs
+
+- (void)showDialogWithContext:(struct uih_context *)context
+ name:(CONST char *)name {
+ CONST menuitem *item = menu_findcommand (name);
+ if (!item) return;
+
+ CONST menudialog *dialog = menu_getdialog (context, item);
+ if (!dialog) return;
+
+ int nitems;
+ for (nitems = 0; dialog[nitems].question; nitems++);
+
+ if (nitems == 1 && (dialog[0].type == DIALOG_IFILE || dialog[0].type == DIALOG_OFILE)) {
+ NSString *extension = [[NSString stringWithUTF8String:dialog[0].defstr] pathExtension];
+
+ NSString *fileName = nil;
+ switch(dialog[0].type) {
+ case DIALOG_IFILE:
+ {
+ NSOpenPanel *oPanel = [NSOpenPanel openPanel];
+
+ int result = [oPanel runModalForDirectory:nil
+ file:nil
+ types:[NSArray arrayWithObject:extension]];
+
+ if (result == NSOKButton)
+ fileName = [oPanel filename];
+ break;
+ }
+ case DIALOG_OFILE:
+ {
+ NSSavePanel *sPanel = [NSSavePanel savePanel];
+ [sPanel setRequiredFileType:extension];
+
+ int result = [sPanel runModalForDirectory:nil file:@"untitled"];
+
+ if (result == NSOKButton)
+ fileName = [sPanel filename];
+ break;
+ }
+ }
+
+ [window makeKeyAndOrderFront:self];
+
+ if (fileName) {
+ dialogparam *param = malloc (sizeof (dialogparam));
+ param->dstring = strdup([fileName UTF8String]);
+ ui_menuactivate (item, param);
+ }
+
+ } else {
+ CustomDialog *customDialog = [[CustomDialog alloc] initWithContext:context
+ menuItem:item
+ dialog:dialog];
+ [NSApp beginSheet:customDialog
+ modalForWindow:window
+ modalDelegate:nil
+ didEndSelector:nil
+ contextInfo:nil];
+ [NSApp runModalForWindow:customDialog];
+ [NSApp endSheet:customDialog];
+ [customDialog orderOut:self];
+ [window makeKeyAndOrderFront:self];
+
+ if ([customDialog params])
+ ui_menuactivate(item, [customDialog params]);
+
+ [customDialog release];
+ }
+}
+
+#pragma mark Help
+
+- (void)showHelpWithContext:(struct uih_context *)context
+ name:(CONST char *)name {
+ NSString *anchor = [NSString stringWithUTF8String:name];
+ [[NSHelpManager sharedHelpManager] openHelpAnchor:anchor inBook:@"XaoS Help"];
+}
+
+#pragma mark Window Delegates
+
+- (void)windowWillClose:(NSNotification *)notification {
+ [NSApp terminate:self];
+}
+
+- (void)windowDidResize:(NSNotification *)notification {
+ // Handle maximize/zoom, but ignore live resizing
+ if (![view inLiveResize])
+ ui_resize();
+}
+
+#pragma mark Application Delegates
+
+- (BOOL)application:(NSApplication *)theApplication
+ openFile:(NSString *)filename {
+ if ([[filename pathExtension] isEqualToString:@"xpf"]) {
+ uih_loadfile(globaluih, [filename UTF8String]);
+ return YES;
+ } else if ([[filename pathExtension] isEqualToString:@"xaf"]) {
+ uih_playfile(globaluih, [filename UTF8String]);
+ return YES;
+ } else {
+ return NO;
+ }
+}
+
+@end \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/CustomDialog.h b/src/ui/ui-drv/cocoa/CustomDialog.h
new file mode 100644
index 0000000..2821022
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/CustomDialog.h
@@ -0,0 +1,38 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import <Cocoa/Cocoa.h>
+#include "ui.h"
+
+@ interface CustomDialog:NSWindow {
+ struct uih_context *context;
+ CONST menuitem *item;
+ CONST menudialog *dialog;
+ dialogparam *params;
+ NSMutableDictionary *controls;
+}
+
+-(id) initWithContext:(struct uih_context *)context menuItem:(CONST menuitem *)item dialog:(CONST menudialog *) dialog;
+-(dialogparam *) params;
+
+@end
diff --git a/src/ui/ui-drv/cocoa/CustomDialog.m b/src/ui/ui-drv/cocoa/CustomDialog.m
new file mode 100644
index 0000000..5cac7df
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/CustomDialog.m
@@ -0,0 +1,433 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import "CustomDialog.h"
+
+#ifdef HAVE_GETTEXT
+#include <libintl.h>
+#include <locale.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+#define MARGIN 20
+#define SPACING 8
+
+@implementation CustomDialog
+
+#pragma mark Initialization
+
+- (id)initWithContext:(struct uih_context *)myContext
+ menuItem:(CONST menuitem *)myItem
+ dialog:(CONST menudialog *)myDialog {
+
+ NSRect windowRect = NSMakeRect(200, 200, 300, 107);
+ NSRect helpButtonRect = NSMakeRect(20, 20, 25, 25);
+ NSRect cancelButtonRect = NSMakeRect(128, 20, 75, 25);
+ NSRect okButtonRect = NSMakeRect(210, 20, 75, 25);
+ NSRect labelRect = NSMakeRect(20, 67, 62, 17);
+ NSRect controlRect = NSMakeRect(90, 65, 190, 22);
+ NSRect coordRect = NSMakeRect(90, 65, 85, 22);
+
+ self = [super initWithContentRect:windowRect
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:YES];
+
+ if (self) {
+ context = myContext;
+ item = myItem;
+ dialog = myDialog;
+
+ [self setTitle:[NSString stringWithUTF8String:item->name]];
+
+ controls = [[NSMutableDictionary alloc] initWithCapacity:10];
+
+ NSMutableArray *labels = [[NSMutableArray alloc] initWithCapacity:10];
+
+ int maxLabelWidth = 0, maxControlWidth = 0, nitems = 0, i = 0;
+
+ for (nitems = 0; dialog[nitems].question; nitems++);
+
+ for (i = 0; i < nitems; i++) {
+ NSTextField *label = [[NSTextField alloc] initWithFrame:labelRect];
+ NSString *question = [NSString stringWithUTF8String:dialog[i].question];
+ [label setEditable:NO];
+ [label setBezeled:NO];
+ [label setDrawsBackground:NO];
+ [label setStringValue:question];
+
+ [label sizeToFit];
+ if ([label frame].size.width > maxLabelWidth)
+ maxLabelWidth = [label frame].size.width;
+
+ [[self contentView] addSubview:label];
+ [labels addObject:label];
+ [label release];
+
+ switch (dialog[i].type) {
+ case DIALOG_INT:
+ case DIALOG_FLOAT:
+ case DIALOG_STRING:
+ case DIALOG_KEYSTRING:
+ {
+ NSTextField *textField = [[NSTextField alloc] initWithFrame:controlRect];
+ [textField setEditable:YES];
+ [textField setBezeled:YES];
+ [textField setBezelStyle:NSTextFieldSquareBezel];
+ [[textField cell] setScrollable:YES];
+ switch (dialog[i].type) {
+ case DIALOG_INT:
+ [textField setIntValue:dialog[i].defint];
+ break;
+ case DIALOG_FLOAT:
+ [textField setDoubleValue:dialog[i].deffloat];
+ break;
+ case DIALOG_STRING:
+ [textField setStringValue:[NSString stringWithUTF8String:dialog[i].defstr]];
+ break;
+ case DIALOG_KEYSTRING:
+ [textField setStringValue:[NSString stringWithUTF8String:dialog[i].defstr]];
+ break;
+ }
+
+ if ([textField frame].size.width > maxControlWidth)
+ maxControlWidth = [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:question];
+ [textField release];
+
+ break;
+ }
+ case DIALOG_IFILE:
+ case DIALOG_OFILE:
+ {
+ NSTextField *textField = [[NSTextField alloc] initWithFrame:controlRect];
+ [textField setEditable:NO];
+ [textField setBezeled:YES];
+ [textField setBezelStyle:NSTextFieldSquareBezel];
+ [[textField cell] setScrollable:YES];
+ [textField setStringValue:[NSString stringWithUTF8String:dialog[i].defstr]];
+ [[textField cell] setRepresentedObject:[NSString stringWithUTF8String:dialog[i].defstr]];
+
+ if ([textField frame].size.width > maxControlWidth)
+ maxControlWidth = [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:question];
+
+ NSButton *chooseButton = [[NSButton alloc] initWithFrame:okButtonRect];
+ [chooseButton setTitle:[NSString stringWithUTF8String:_("Choose")]];
+ [chooseButton setButtonType:NSMomentaryPushInButton];
+ [chooseButton setBezelStyle:NSRoundedBezelStyle];
+ [chooseButton setTarget:self];
+ if (dialog[i].type == DIALOG_IFILE)
+ [chooseButton setAction:@selector(chooseInput:)];
+ else
+ [chooseButton setAction:@selector(chooseOutput:)];
+ [[chooseButton cell] setRepresentedObject:textField];
+
+ [[self contentView] addSubview:chooseButton];
+ [controls setValue:chooseButton forKey:[question stringByAppendingString:@"choose"]];
+
+ if ([textField frame].size.width + SPACING + [chooseButton frame].size.width > maxControlWidth)
+ maxControlWidth = [textField frame].size.width + SPACING + [chooseButton frame].size.width;
+
+ [chooseButton release];
+ [textField release];
+ break;
+ }
+ case DIALOG_CHOICE:
+ {
+
+ NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:controlRect];
+
+ NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
+ CONST char **str = (CONST char **) dialog[i].defstr;
+ int y;
+ for (y = 0; str[y] != NULL; y++)
+ {
+ NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithUTF8String:str[y]] action:nil keyEquivalent:@""];
+ [menu addItem:menuItem];
+ [menuItem release];
+ }
+ [popupButton setMenu:menu];
+ [menu release];
+ [popupButton selectItemAtIndex:dialog[i].defint];
+
+ [popupButton sizeToFit];
+ if ([popupButton frame].size.width > maxControlWidth)
+ maxControlWidth = [popupButton frame].size.width;
+
+ [[self contentView] addSubview:popupButton];
+ [controls setValue:popupButton forKey:question];
+ [popupButton release];
+
+ break;
+ }
+ case DIALOG_ONOFF:
+ {
+ break;
+ }
+ case DIALOG_COORD:
+ {
+ int coordWidth = 0;
+ NSTextField *textField = [[NSTextField alloc] initWithFrame:coordRect];
+ [textField setEditable:YES];
+ [textField setBezeled:YES];
+ [textField setBezelStyle:NSTextFieldSquareBezel];
+ [[textField cell] setScrollable:YES];
+ [textField setDoubleValue:dialog[i].deffloat];
+
+ coordWidth += [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:question];
+ [textField release];
+
+ textField = [[NSTextField alloc] initWithFrame:labelRect];
+ [textField setEditable:NO];
+ [textField setBezeled:NO];
+ [textField setDrawsBackground:NO];
+ [textField setStringValue:@"+"];
+
+ [textField sizeToFit];
+ coordWidth += [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:[question stringByAppendingString:@"+"]];
+ [textField release];
+
+ textField = [[NSTextField alloc] initWithFrame:coordRect];
+ [textField setEditable:YES];
+ [textField setBezeled:YES];
+ [textField setBezelStyle:NSTextFieldSquareBezel];
+ [[textField cell] setScrollable:YES];
+ [textField setDoubleValue:dialog[i].deffloat2];
+
+ coordWidth += [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:[question stringByAppendingString:@"2"]];
+ [textField release];
+
+ textField = [[NSTextField alloc] initWithFrame:labelRect];
+ [textField setEditable:NO];
+ [textField setBezeled:NO];
+ [textField setDrawsBackground:NO];
+ [textField setStringValue:@"i"];
+
+ [textField sizeToFit];
+ coordWidth += [textField frame].size.width;
+
+ [[self contentView] addSubview:textField];
+ [controls setValue:textField forKey:[question stringByAppendingString:@"i"]];
+ [textField release];
+
+ if (coordWidth > maxControlWidth)
+ maxControlWidth = coordWidth;
+ }
+ }
+ if (MARGIN + maxLabelWidth + SPACING + maxControlWidth + MARGIN > windowRect.size.width)
+ windowRect.size.width = MARGIN + maxLabelWidth + SPACING + maxControlWidth + MARGIN;
+ }
+
+ controlRect.origin.x = labelRect.origin.x + maxLabelWidth + SPACING;
+
+ for (i = nitems-1; i >= 0; i--) {
+ NSTextField *label = [labels objectAtIndex:i];
+ NSControl *control = [controls objectForKey:[label stringValue]];
+ [label setFrameOrigin:labelRect.origin];
+
+ [control setFrameOrigin:controlRect.origin];
+
+ switch (dialog[i].type) {
+ case DIALOG_IFILE:
+ case DIALOG_OFILE:
+ {
+ NSButton *chooseButton = [controls objectForKey:[[label stringValue] stringByAppendingString:@"choose"]];
+ [chooseButton setFrameOrigin:NSMakePoint([control frame].origin.x + [control frame].size.width + SPACING, [control frame].origin.y - 2)];
+ break;
+ }
+ case DIALOG_COORD:
+ {
+ NSRect controlRect2 = controlRect;
+ controlRect2.origin.x += [control frame].size.width;
+ control = [controls objectForKey:[[label stringValue] stringByAppendingString:@"+"]];
+ [control setFrameOrigin:controlRect2.origin];
+ controlRect2.origin.x += [control frame].size.width;
+ control = [controls objectForKey:[[label stringValue] stringByAppendingString:@"2"]];
+ [control setFrameOrigin:controlRect2.origin];
+ controlRect2.origin.x += [control frame].size.width;
+ control = [controls objectForKey:[[label stringValue] stringByAppendingString:@"i"]];
+ [control setFrameOrigin:controlRect2.origin];
+ control = [controls objectForKey:[label stringValue]];
+ }
+ }
+
+ labelRect.origin.y += SPACING + [control frame].size.height;
+ controlRect.origin.y += SPACING + [control frame].size.height;
+ }
+
+ controlRect.origin.y += MARGIN;
+
+ windowRect.size.height = controlRect.origin.y;
+
+ okButtonRect.origin.x += windowRect.size.width - [self frame].size.width;
+ cancelButtonRect.origin.x += windowRect.size.width - [self frame].size.width;
+
+ NSButton *okButton = [[NSButton alloc] initWithFrame:okButtonRect];
+ [okButton setTitle:[NSString stringWithUTF8String:_("OK")]];
+ [okButton setButtonType:NSMomentaryPushInButton];
+ [okButton setBezelStyle:NSRoundedBezelStyle];
+ [okButton setKeyEquivalent:@"\r"];
+ [okButton setTarget:self];
+ [okButton setAction:@selector(execute:)];
+ [okButton sizeToFit];
+ [[self contentView] addSubview:okButton];
+
+ NSButton *cancelButton = [[NSButton alloc] initWithFrame:cancelButtonRect];
+ [cancelButton setTitle:[NSString stringWithUTF8String:_("Cancel")]];
+ [cancelButton setButtonType:NSMomentaryPushInButton];
+ [cancelButton setBezelStyle:NSRoundedBezelStyle];
+ [cancelButton setTarget:self];
+ [cancelButton setAction:@selector(cancel:)];
+ [cancelButton sizeToFit];
+ [[self contentView] addSubview:cancelButton];
+
+ NSButton *helpButton = [[NSButton alloc] initWithFrame:helpButtonRect];
+ [helpButton setTitle:@""];
+ [helpButton setButtonType:NSMomentaryPushInButton];
+ [helpButton setBezelStyle:NSHelpButtonBezelStyle];
+ [helpButton setTarget:self];
+ [helpButton setAction:@selector(help:)];
+ [[self contentView] addSubview:helpButton];
+ [helpButton release];
+
+ okButtonRect.size.width = MAX([okButton frame].size.width + 2, [cancelButton frame].size.width) + 2 * SPACING;
+ cancelButtonRect.size.width = okButtonRect.size.width;
+
+ okButtonRect.origin.x = windowRect.size.width - MARGIN - okButtonRect.size.width;
+ cancelButtonRect.origin.x = okButtonRect.origin.x - SPACING - cancelButtonRect.size.width;
+
+ [okButton setFrame:okButtonRect];
+ [cancelButton setFrame:cancelButtonRect];
+
+ [cancelButton release];
+ [okButton release];
+
+ [self setContentSize:windowRect.size];
+ }
+ return self;
+}
+
+# pragma mark Targets
+
+- (IBAction)execute:(id)sender {
+ int nitems;
+ for (nitems = 0; dialog[nitems].question; nitems++);
+ params = malloc (sizeof (*params) * nitems);
+
+ int i;
+ for (i = 0; i < nitems; i++) {
+ NSString *question = [NSString stringWithUTF8String:dialog[i].question];
+ NSControl *control;
+ switch (dialog[i].type) {
+ case DIALOG_IFILE:
+ case DIALOG_OFILE:
+ case DIALOG_STRING:
+ case DIALOG_KEYSTRING:
+ control = [controls objectForKey:question];
+ params[i].dstring = strdup ([[control stringValue] UTF8String]);
+ break;
+ case DIALOG_INT:
+ control = [controls objectForKey:question];
+ params[i].dint = [control intValue];
+ break;
+ case DIALOG_FLOAT:
+ control = [controls objectForKey:question];
+ params[i].number = [control floatValue];
+ break;
+ case DIALOG_COORD:
+ control = [controls objectForKey:question];
+ params[i].dcoord[0] = [control floatValue];
+ control = [controls objectForKey:[question stringByAppendingString:@"2"]];
+ params[i].dcoord[1] = [control floatValue];
+ break;
+ case DIALOG_CHOICE:
+ control = [controls objectForKey:question];
+ params[i].dint = [(NSPopUpButtonCell *)control indexOfSelectedItem];
+ break;
+ }
+ }
+ [NSApp stopModal];
+}
+
+- (IBAction)cancel:(id)sender {
+ params = NULL;
+ [NSApp stopModal];
+}
+
+- (IBAction)help:(id)sender {
+ ui_help(item->shortname);
+}
+
+- (IBAction)chooseInput:(id)sender {
+ NSTextField *target = [[sender cell] representedObject];
+ NSString *extension = [[[target cell] representedObject] pathExtension];
+ NSOpenPanel *oPanel = [NSOpenPanel openPanel];
+
+ int result = [oPanel runModalForDirectory:nil
+ file:nil
+ types:[NSArray arrayWithObject:extension]];
+
+ if (result == NSOKButton)
+ [target setStringValue:[oPanel filename]];
+}
+
+- (IBAction)chooseOutput:(id)sender {
+ NSTextField *target = [[sender cell] representedObject];
+ NSString *extension = [[[target cell] representedObject] pathExtension];
+ NSSavePanel *sPanel = [NSSavePanel savePanel];
+ [sPanel setRequiredFileType:extension];
+
+ int result = [sPanel runModalForDirectory:nil file:[target stringValue]];
+ if (result == NSOKButton)
+ [target setStringValue:[sPanel filename]];
+}
+
+#pragma mark Accessors
+
+- (dialogparam *)params {
+ return params;
+}
+
+#pragma mark Deallocation
+
+- (void)dealloc {
+ [controls release];
+ [super dealloc];
+}
+@end
diff --git a/src/ui/ui-drv/cocoa/English.lproj/Credits.html b/src/ui/ui-drv/cocoa/English.lproj/Credits.html
new file mode 100644
index 0000000..d38d9cd
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/English.lproj/Credits.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta http-equiv="Content-Style-Type" content="text/css">
+ <title></title>
+ <meta name="Generator" content="Cocoa HTML Writer">
+ <meta name="CocoaVersion" content="824.41">
+ <style type="text/css">
+ body {
+ font-family: "Lucida Grande", Arial, sans-serif;
+ font-size: 8pt;
+ text-align: center;
+ }
+ </style>
+</head>
+<body>
+<p>XaoS is free software; you can redistribute it and/or modify it under the
+terms of the<br>
+<a href="help:anchor=gpl%20bookID=XaoS%20Help">GNU General Public License</a>.
+</p>
+<p><a href="help:anchor=about%20bookID=XaoS%20Help">Credits</a></p>
+<p><a href="help:anchor=devel%20bookID=XaoS%20Help">How to Help</a></p>
+<p><a href="http://xaos.sourceforge.net/">XaoS Website</a></p>
+</body>
+</html>
diff --git a/src/ui/ui-drv/cocoa/English.lproj/InfoPlist.strings b/src/ui/ui-drv/cocoa/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000..42b5784
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/English.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/designable.nib b/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/designable.nib
new file mode 100644
index 0000000..5d0aa75
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/designable.nib
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
+ <data>
+ <int key="IBDocument.SystemTarget">0</int>
+ <string key="IBDocument.SystemVersion">9C7010</string>
+ <string key="IBDocument.InterfaceBuilderVersion">629</string>
+ <string key="IBDocument.AppKitVersion">949.26</string>
+ <string key="IBDocument.HIToolboxVersion">352.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="29"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string id="617114957">com.apple.InterfaceBuilderKit</string>
+ <string id="578961457">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1021">
+ <string key="NSClassName" id="1039455869">NSApplication</string>
+ </object>
+ <object class="NSCustomObject" id="1014">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1050">
+ <reference key="NSClassName" ref="1039455869"/>
+ </object>
+ <object class="NSMenu" id="649796088">
+ <string key="NSTitle">AMainMenu</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="694149608">
+ <reference key="NSMenu" ref="649796088"/>
+ <string key="NSTitle" id="163516152">XaoS</string>
+ <string key="NSKeyEquiv" id="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="621373611">
+ <string key="NSClassName" id="963292957">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="481733502">
+ <reference key="NSClassName" ref="963292957"/>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="110575045">
+ <reference key="NSTitle" ref="163516152"/>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="238522557">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">About XaoS</string>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="304266470">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <reference key="NSTitle" ref="1003"/>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="1046388886">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle" id="487627014">Services</string>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="752062318">
+ <reference key="NSTitle" ref="487627014"/>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSName">_NSServicesMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="646227648">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <reference key="NSTitle" ref="1003"/>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="755159360">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide XaoS</string>
+ <string key="NSKeyEquiv" id="712247123">h</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="342932134">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Hide Others</string>
+ <reference key="NSKeyEquiv" ref="712247123"/>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="908899353">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Show All</string>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="1056857174">
+ <reference key="NSMenu" ref="110575045"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <reference key="NSTitle" ref="1003"/>
+ <reference key="NSKeyEquiv" ref="1003"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ <object class="NSMenuItem" id="632727374">
+ <reference key="NSMenu" ref="110575045"/>
+ <string key="NSTitle">Quit XaoS</string>
+ <string key="NSKeyEquiv">q</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="621373611"/>
+ <reference key="NSMixedImage" ref="481733502"/>
+ </object>
+ </object>
+ <string key="NSName">_NSAppleMenu</string>
+ </object>
+ </object>
+ </object>
+ <string key="NSName">_NSMainMenu</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontStandardAboutPanel:</string>
+ <reference key="source" ref="1021"/>
+ <reference key="destination" ref="238522557"/>
+ </object>
+ <int key="connectionID">142</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hide:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="755159360"/>
+ </object>
+ <int key="connectionID">367</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideOtherApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="342932134"/>
+ </object>
+ <int key="connectionID">368</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">terminate:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="632727374"/>
+ </object>
+ <int key="connectionID">369</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unhideAllApplications:</string>
+ <reference key="source" ref="1014"/>
+ <reference key="destination" ref="908899353"/>
+ </object>
+ <int key="connectionID">370</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="1049">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1048"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1021"/>
+ <reference key="parent" ref="1049"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1014"/>
+ <reference key="parent" ref="1049"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1050"/>
+ <reference key="parent" ref="1049"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="649796088"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="694149608"/>
+ </object>
+ <reference key="parent" ref="1049"/>
+ <string key="objectName">MainMenu</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="694149608"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="110575045"/>
+ </object>
+ <reference key="parent" ref="649796088"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="110575045"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="238522557"/>
+ <reference ref="755159360"/>
+ <reference ref="908899353"/>
+ <reference ref="632727374"/>
+ <reference ref="646227648"/>
+ <reference ref="304266470"/>
+ <reference ref="1046388886"/>
+ <reference ref="1056857174"/>
+ <reference ref="342932134"/>
+ </object>
+ <reference key="parent" ref="694149608"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="238522557"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">134</int>
+ <reference key="object" ref="755159360"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">150</int>
+ <reference key="object" ref="908899353"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">136</int>
+ <reference key="object" ref="632727374"/>
+ <reference key="parent" ref="110575045"/>
+ <string key="objectName">1111</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">144</int>
+ <reference key="object" ref="646227648"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">236</int>
+ <reference key="object" ref="304266470"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">131</int>
+ <reference key="object" ref="1046388886"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="752062318"/>
+ </object>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">149</int>
+ <reference key="object" ref="1056857174"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">145</int>
+ <reference key="object" ref="342932134"/>
+ <reference key="parent" ref="110575045"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">130</int>
+ <reference key="object" ref="752062318"/>
+ <reference key="parent" ref="1046388886"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>130.IBPluginDependency</string>
+ <string>130.ImportedFromIB2</string>
+ <string>130.editorWindowContentRectSynchronizationRect</string>
+ <string>131.IBPluginDependency</string>
+ <string>131.ImportedFromIB2</string>
+ <string>134.IBPluginDependency</string>
+ <string>134.ImportedFromIB2</string>
+ <string>136.IBPluginDependency</string>
+ <string>136.ImportedFromIB2</string>
+ <string>144.IBPluginDependency</string>
+ <string>144.ImportedFromIB2</string>
+ <string>145.IBPluginDependency</string>
+ <string>145.ImportedFromIB2</string>
+ <string>149.IBPluginDependency</string>
+ <string>149.ImportedFromIB2</string>
+ <string>150.IBPluginDependency</string>
+ <string>150.ImportedFromIB2</string>
+ <string>236.IBPluginDependency</string>
+ <string>236.ImportedFromIB2</string>
+ <string>29.IBPluginDependency</string>
+ <string>29.ImportedFromIB2</string>
+ <string>29.WindowOrigin</string>
+ <string>29.editorWindowContentRectSynchronizationRect</string>
+ <string>56.IBPluginDependency</string>
+ <string>56.ImportedFromIB2</string>
+ <string>57.IBPluginDependency</string>
+ <string>57.ImportedFromIB2</string>
+ <string>57.editorWindowContentRectSynchronizationRect</string>
+ <string>58.IBPluginDependency</string>
+ <string>58.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="578961457"/>
+ <reference ref="617114957"/>
+ <reference ref="617114957"/>
+ <reference ref="578961457"/>
+ <integer value="1" id="9"/>
+ <string>{{436, 809}, {64, 6}}</string>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <string>{74, 862}</string>
+ <string>{{6, 836}, {77, 20}}</string>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ <string>{{18, 683}, {174, 153}}</string>
+ <reference ref="578961457"/>
+ <reference ref="9"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">374</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../../XaoS.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableData" key="IBDocument.RunnableNib">
+ <bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
+AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxBuAAsADAAxADUANgA8AD0A
+QQBFAE0AUwBjAGoAawBsAHEAcgBzAHYAegB7AH4AfwCDAIkAkACRAJIAkwCXAJ4AnwCgAKQArACtAK4A
+rwCzALoAuwC8AMAA0QDWANcA2wDmAOcA6AD0AP8BCADnAQkBDgERARIBFAEdASYBJwEoASsBLQE+AVAB
+YgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQF0AXcBjgGlAaYBpwGoAakBqgGrAawBrQGuAa8B
+sAGxAbIBswG0AbUBtgG3AbgBuQG8Ab8BwlUkbnVsbN8QEgANAA4ADwAQABEAEgATABQAFQAWABcAGAAZ
+ABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMFZOU1Jvb3RWJGNsYXNz
+XU5TT2JqZWN0c0tleXNfEA9OU0NsYXNzZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlPaWRzVmFsdWVz
+XU5TQ29ubmVjdGlvbnNbTlNOYW1lc0tleXNbTlNGcmFtZXdvcmtdTlNDbGFzc2VzS2V5c1pOU09pZHNL
+ZXlzXU5TTmFtZXNWYWx1ZXNfEBlOU0FjY2Vzc2liaWxpdHlDb25uZWN0b3JzXU5TRm9udE1hbmFnZXJf
+EBBOU1Zpc2libGVXaW5kb3dzXxAPTlNPYmplY3RzVmFsdWVzXxAXTlNBY2Nlc3NpYmlsaXR5T2lkc0tl
+eXNZTlNOZXh0T2lkXE5TT2lkc1ZhbHVlc4ACgG2AKoBTgGyACIBBgAWAUoBUgEKAaoAAgAaAQIBrEQF4
+gFXSAA4AMgAzADRbTlNDbGFzc05hbWWABIADXU5TQXBwbGljYXRpb27SADcAOAA5ADpYJGNsYXNzZXNa
+JGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9tT2JqZWN0WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IA
+DgA+AD8AQFpOUy5vYmplY3RzgAeg0gA3ADgAQgBDowBDAEQAO1xOU011dGFibGVTZXRVTlNTZXTSAA4A
+PgBGAEeAKaUASABJAEoASwBMgAmAF4AcgCCAJdMADgBOAE8AUABRAFJYTlNTb3VyY2VXTlNMYWJlbIAW
+gAqAFdgADgBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYldOU1RpdGxlXxARTlNLZXlFcXVpdk1v
+ZE1hc2taTlNLZXlFcXVpdl1OU01uZW1vbmljTG9jWU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51
+gBSADBIAEAAAgA0Sf////4AOgBKAC9QADgBUAGQAZQBmAGcAaABpVk5TTmFtZVtOU01lbnVJdGVtc4A5
+gC+APIAxWVF1aXQgWGFvU1Fx0wAOADIAbQBuAG8AcF5OU1Jlc291cmNlTmFtZYARgA+AEFdOU0ltYWdl
+XxAPTlNNZW51Q2hlY2ttYXJr0gA3ADgAdAB1ogB1ADtfEBBOU0N1c3RvbVJlc291cmNl0wAOADIAbQBu
+AG8AeYARgA+AE18QEE5TTWVudU1peGVkU3RhdGXSADcAOAB8AH2iAH0AO1pOU01lbnVJdGVtWnRlcm1p
+bmF0ZTrSADcAOACAAIGjAIEAggA7XxAVTlNOaWJDb250cm9sQ29ubmVjdG9yXk5TTmliQ29ubmVjdG9y
+1AAOAIQATgBPAFAAHwCHAIhdTlNEZXN0aW5hdGlvboAWgAKAGIAb1wAOAFQAVgBXAFgAWQBaAFsAiwCM
+AF8AYABhAGKAFIAZgBqADoASgAtaQWJvdXQgWGFvU1BfEB1vcmRlckZyb250U3RhbmRhcmRBYm91dFBh
+bmVsOtMADgBOAE8AUACVAJaAFoAdgB/YAA4AVABVAFYAVwBYAFkAWgBbAJkAXQCMAF8AYABhAGKAFIAe
+gBqADoASgAtYU2hvdyBBbGxfEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM60wAOAE4ATwBQAKIAo4AWgCGA
+JNgADgBUAFUAVgBXAFgAWQBaAFsApgCnAKgAXwBgAGEAYoAUgCISABgAAIAjgA6AEoALW0hpZGUgT3Ro
+ZXJzUWhfEBZoaWRlT3RoZXJBcHBsaWNhdGlvbnM60wAOAE4ATwBQALEAsoAWgCaAKNgADgBUAFUAVgBX
+AFgAWQBaAFsAtQBdAKgAXwBgAGEAYoAUgCeAI4AOgBKAC1lIaWRlIFhhb1NVaGlkZTrSADcAOAC9AL6j
+AL4AvwA7Xk5TTXV0YWJsZUFycmF5V05TQXJyYXnSAA4APgDBAMKAP64AlQBRAIcAxgDHAGIAyQDKALEA
+ogDNAM4AzwDQgB2ACoAYgCuAMoALgDOAPoAmgCGAOoA7gDaALtQADgBUAGQAZQBmANMA1ADVgDmALIA9
+gC1ZQU1haW5NZW510gAOAD4ARgDZgCmhANCALtoADgDcAFQAVQBWAFcAWABZAFoA3QBbAGIAZwBdAIwA
+XwBgAGEAxgDlWU5TU3VibWVudVhOU0FjdGlvboAUgAuAL4AagA6AEoArgDBUWGFvU15zdWJtZW51QWN0
+aW9uOtIADgA+AEYA6oApqQCHAMcAyQDNALEAogCVAM4AUYAYgDKAM4A6gCaAIYAdgDuACtoADgBUAFUA
+9QBWAPYAVwBYAFkAWgBbAIwAXQD5AIwA+QBfAGAAYQBiXU5TSXNTZXBhcmF0b3JcTlNJc0Rpc2FibGVk
+gBSAGgmAGgmADoASgAvaAA4A3ABUAFUAVgBXAFgAWQBaAN0AWwDPAQIAXQCMAF8AYABhAGIBB4AUgDaA
+NIAagA6AEoALgDVYU2VydmljZXPUAA4AVABkAGUAZgECAQwBDYA5gDSAOIA30gAOAD4ARgEQgCmgXxAP
+X05TU2VydmljZXNNZW510gA3ADgBEwBaogBaADvaAA4AVABVAPUAVgD2AFcAWABZAFoAWwCMAF0A+QCM
+APkAXwBgAGEAYoAUgBoJgBoJgA6AEoAL2gAOAFQAVQD1AFYA9gBXAFgAWQBaAFsAjABdAPkAjAD5AF8A
+YABhAGKAFIAaCYAaCYAOgBKAC1xfTlNBcHBsZU1lbnVbX05TTWFpbk1lbnXSAA4AMgAzADSABIAD0gA3
+ADgBLAC/ogC/ADvSAA4APgDBAS+AP64AYgBiAGIAHwBiANAAYgAfAGIAYgBiAGIAyQDGgAuAC4ALgAKA
+C4AugAuAAoALgAuAC4ALgDOAK9IADgA+AMEBQIA/rxAPANAAUQCHAMYAxwBiAMkAHwDKALEAogDNAM4A
+zwCVgC6ACoAYgCuAMoALgDOAAoA+gCaAIYA6gDuANoAd0gAOAD4AwQFSgD+vEA8BUwFUAVUBVgFXAVgB
+WQFaAVsBXAFdAV4BXwFgAWGAQ4BEgEWARoBHgEiASYBKgEuATIBNgE6AT4BQgFFfEBBNZW51IEl0ZW0g
+KFhhb1MpVDExMTFfEBZNZW51IEl0ZW0gKEFib3V0IFhhb1MpWE1haW5NZW51WVNlcGFyYXRvcltNZW51
+IChYYW9TKV8QFE1lbnUgSXRlbSAoU2VydmljZXMpXEZpbGUncyBPd25lcltBcHBsaWNhdGlvbl8QFU1l
+bnUgSXRlbSAoSGlkZSBYYW9TKV8QF01lbnUgSXRlbSAoSGlkZSBPdGhlcnMpW1NlcGFyYXRvci0xW1Nl
+cGFyYXRvci0yXxAPTWVudSAoU2VydmljZXMpXxAUTWVudSBJdGVtIChTaG93IEFsbCnSAA4APgDBAXOA
+P6DSAA4APgDBAXaAP6DSAA4APgDBAXmAP68QFACVAEkAUQBKAIcAxgDHAEsAYgDJAB8AygCxAKIAzQDO
+AEgAzwBMANCAHYAXgAqAHIAYgCuAMoAggAuAM4ACgD6AJoAhgDqAO4AJgDaAJYAu0gAOAD4AwQGQgD+v
+EBQBkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkgFaAV4BYgFmAWoBbgFyAXYBe
+gF+AYIBhgGKAY4BkgGWAZoBngGiAaRCWEI4QiBEBchA6EB0Q7BEBcBA5EIMRAXcT//////////0QhhCR
+EJAQlREBcRCCEQFvEDjSAA4APgBGAbuAKaDSAA4APgDBAb6AP6DSAA4APgDBAcGAP6DSADcAOAHDAcSi
+AcQAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYBRQFLAZYBnQGkAbIBxAHgAe4B
++gIGAhQCHwItAkkCVwJqAnwClgKgAq0CrwKxArMCtQK3ArkCuwK9Ar8CwQLDAsUCxwLJAssCzQLQAtIC
+2wLnAukC6wL5AwIDCwMWAxsDKgMzA0YDTwNaA1wDXQNmA20DegOAA4kDiwOWA5gDmgOcA54DoAOtA7YD
+vgPAA8IDxAPlA+0EAQQMBBoEJAQxBDgEOgQ8BEEEQwRIBEoETAROBF8EZgRyBHQEdgR4BHoEhASGBJME
+ogSkBKYEqASwBMIEywTQBOME8ATyBPQE9gUJBRIFFwUiBS0FNgU9BVUFZAV1BYMFhQWHBYkFiwWoBaoF
+rAWuBbAFsgW0Bb8FwAXgBe0F7wXxBfMGFAYWBhgGGgYcBh4GIAYpBkIGTwZRBlMGVQZ2BngGegZ/BoEG
+gwaFBocGkwaVBq4Guwa9Br8GwQbiBuQG5gboBuoG7AbuBvgG/gcHBw4HHQclBy4HMAdNB08HUQdTB1UH
+VwdZB1sHXQdfB2EHYwdlB2cHaQd6B3wHfgeAB4IHjAeVB5cHmgecB8UHzwfYB9oH3AfeB+AH4gfkB+YH
+6AftB/wIBQgHCBoIHAgeCCAIIggkCCYIKAgqCCwIVQhjCHAIcgh0CHUIdwh4CHoIfAh+CKcIqQirCK0I
+rwixCLMItQi3CMAI0QjTCNUI1wjZCOII5AjlCPcJAAkFCS4JMAkyCTMJNQk2CTgJOgk8CWUJZwlpCWoJ
+bAltCW8JcQlzCYAJjAmVCZcJmQmiCacJsAmyCc8J0QnTCdUJ1wnZCdsJ3QnfCeEJ4wnlCecJ6QnrCfQJ
+9goXChkKGwodCh8KIQojCiUKJwopCisKLQovCjEKMwo1Cj4KQAphCmMKZQpnCmkKawptCm8KcQpzCnUK
+dwp5CnsKfQp/CpIKlwqwCrkKwwrPCuYK8wr/CxcLMQs9C0kLWwtyC3sLfQt+C4cLiQuKC5MLlQvAC8IL
+xAvGC8gLygvMC84L0AvSC9QL1gvYC9oL3AveC+AL4gvkC+YL6AvxC/MMHgwgDCIMJAwmDCgMKgwsDC4M
+MAwyDDQMNgw4DDoMPAw+DEAMQgxEDEYMSAxKDEwMTwxRDFMMVQxYDFoMXAxfDGgMagxsDG4McAxzDHUM
+eAx6DIMMhQyGDI8MkQySDJsMnQyeDKcMrAAAAAAAAAICAAAAAAAAAcUAAAAAAAAAAAAAAAAAAAy7A</bytes>
+ </object>
+ </data>
+</archive>
diff --git a/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/keyedobjects.nib b/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/keyedobjects.nib
new file mode 100644
index 0000000..8659a00
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/English.lproj/MainMenu.nib/keyedobjects.nib
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/FractalView.h b/src/ui/ui-drv/cocoa/FractalView.h
new file mode 100644
index 0000000..34957ab
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/FractalView.h
@@ -0,0 +1,70 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import <Cocoa/Cocoa.h>
+
+#include "ui.h"
+
+#ifdef VIDEATOR_SUPPORT
+@ class VideatorProxy;
+#endif
+
+@interface FractalView:NSView {
+ int mouseX, mouseY;
+ int mouseButton, rightMouseButton, otherMouseButton, mouseScrollWheel;
+ int keysDown;
+ int cursorType;
+
+ int currentBuffer;
+ NSBitmapImageRep *imageRep[2];
+
+ NSString *messageText;
+ NSPoint messageLocation;
+
+#ifdef VIDEATOR_SUPPORT
+ VideatorProxy *videatorProxy;
+#endif
+}
+
+#pragma mark Buffers
+-(int) allocBuffer1:(char **)b1 buffer2:(char **) b2;
+-(void) freeBuffers;
+-(void) flipBuffers;
+
+#pragma mark Accessors
+
+#ifdef VIDEATOR_SUPPORT
+-(VideatorProxy *) videatorProxy;
+#endif
+-(void) getWidth:(int *)w height:(int *) h;
+-(void) getMouseX:(int *)mx mouseY:(int *)my mouseButton:(int *) mb;
+-(void) getMouseX:(int *)mx mouseY:(int *)my mouseButton:(int *)mb keys:(int *) k;
+
+#pragma mark Cursor
+-(void) setCursorType:(int) type;
+
+#pragma mark Text
+-(void) printText:(CONST char *)text atX:(int)x y:(int) y;
+- (NSDictionary *) textAttributes;
+
+@end
diff --git a/src/ui/ui-drv/cocoa/FractalView.m b/src/ui/ui-drv/cocoa/FractalView.m
new file mode 100644
index 0000000..6a3b458
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/FractalView.m
@@ -0,0 +1,347 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import "FractalView.h"
+#ifdef VIDEATOR_SUPPORT
+#import "VideatorProxy.h"
+#endif
+
+@interface NSObject(AppDelegateStuff)
+
+- (void)keyPressed:(NSString *)key;
+
+@end
+
+@implementation FractalView
+
+#pragma mark Initialization
+
+- (id)initWithFrame:(NSRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+#ifdef VIDEATOR_SUPPORT
+ videatorProxy = [[VideatorProxy alloc] init];
+#endif
+ }
+ return self;
+}
+
+- (void)dealloc {
+#ifdef VIDEATOR_SUPPORT
+ [videatorProxy release];
+#endif
+ [super dealloc];
+}
+
+#pragma mark Drawing
+
+- (BOOL)isOpaque {
+ return YES;
+}
+
+- (void)drawRect:(NSRect)rect {
+ if (imageRep[currentBuffer]) {
+ [imageRep[currentBuffer] drawInRect:[self bounds]];
+ }
+
+ if (messageText) {
+ [messageText drawAtPoint:messageLocation withAttributes:[self textAttributes]];
+ [messageText release];
+ messageText = nil;
+ }
+
+#ifdef VIDEATOR_SUPPORT
+ [videatorProxy sendImageRep:imageRep[currentBuffer]];
+#endif
+}
+
+#pragma mark Resize Handling
+
+- (void)viewDidEndLiveResize {
+ ui_resize();
+}
+
+#pragma mark Mouse Event Handling
+
+- (void)calculateMouseLocationFromEvent:(NSEvent *)theEvent {
+ NSPoint mouseLoc = [self convertPoint:[theEvent locationInWindow] fromView:nil];
+ mouseX = mouseLoc.x;
+ mouseY = [self bounds].size.height - mouseLoc.y;
+}
+
+- (void)mouseDown:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+
+ // Emulate 3 buttons based on modifier keys
+ mouseScrollWheel = 0;
+ if ([theEvent modifierFlags] & NSControlKeyMask) {
+ mouseButton = BUTTON3;
+ } else if ([theEvent modifierFlags] & NSShiftKeyMask) {
+ mouseButton = BUTTON2;
+ } else {
+ mouseButton = BUTTON1;
+ }
+}
+
+- (void)mouseUp:(NSEvent *)theEvent {
+ mouseButton = 0;
+}
+
+- (void)mouseDragged:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+}
+
+- (void)rightMouseDown:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+ mouseScrollWheel = 0;
+ rightMouseButton = BUTTON3;
+}
+
+- (void)rightMouseUp:(NSEvent *)theEvent {
+ rightMouseButton = 0;
+}
+
+- (void)rightMouseDragged:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+}
+
+- (void)otherMouseDown:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+ mouseScrollWheel = 0;
+ otherMouseButton = BUTTON2;
+}
+
+- (void)otherMouseUp:(NSEvent *)theEvent {
+ otherMouseButton = 0;
+}
+
+- (void)otherMouseDragged:(NSEvent *)theEvent {
+ [self calculateMouseLocationFromEvent:theEvent];
+}
+
+- (void)scrollWheel:(NSEvent *)theEvent {
+ // Only scroll if no mouse buttons are held
+ if ((mouseButton | rightMouseButton | otherMouseButton) == 0) {
+ mouseScrollWheel = BUTTON2;
+ mouseX += [theEvent deltaX];
+ mouseY += [theEvent deltaY];
+ }
+}
+
+#pragma mark Keyboard Event Handling
+
+- (void)flagsChanged:(NSEvent *)theEvent {
+ // Emulate 3 buttons based on modifier keys
+ if (mouseButton) {
+ if ([theEvent modifierFlags] & NSControlKeyMask) {
+ mouseButton = BUTTON3;
+ } else if ([theEvent modifierFlags] & NSShiftKeyMask) {
+ mouseButton = BUTTON2;
+ } else {
+ mouseButton = BUTTON1;
+ }
+ }
+}
+
+- (void)keyDown:(NSEvent *)e {
+ NSString *characters = [e characters];
+ if ([characters length] == 0) return;
+
+ unichar keyChar = [characters characterAtIndex:0];
+ switch(keyChar) {
+ case NSLeftArrowFunctionKey:
+ keysDown |= 1;
+ ui_key(UIKEY_LEFT);
+ break;
+ case NSRightArrowFunctionKey:
+ keysDown |= 2;
+ ui_key(UIKEY_RIGHT);
+ break;
+ case NSUpArrowFunctionKey:
+ keysDown |= 4;
+ ui_key(UIKEY_UP);
+ break;
+ case NSDownArrowFunctionKey:
+ keysDown |= 8;
+ ui_key(UIKEY_DOWN);
+ break;
+ case NSBackspaceCharacter:
+ ui_key(UIKEY_BACKSPACE);
+ break;
+ case NSEndFunctionKey:
+ ui_key(UIKEY_END);
+ break;
+ case '\033': // Escape
+ ui_key(UIKEY_ESC);
+ break;
+ case NSHomeFunctionKey:
+ ui_key(UIKEY_HOME);
+ break;
+ case NSPageDownFunctionKey:
+ ui_key(UIKEY_PGDOWN);
+ break;
+ case NSPageUpFunctionKey:
+ ui_key(UIKEY_PGUP);
+ break;
+ case NSTabCharacter:
+ ui_key(UIKEY_TAB);
+ break;
+ default:
+ ui_key(keyChar);
+ }
+}
+
+- (void)keyUp:(NSEvent *)e {
+ NSString *characters = [e characters];
+ if ([characters length] == 0) return;
+
+ unichar keyChar = [characters characterAtIndex:0];
+ switch(keyChar) {
+ case NSLeftArrowFunctionKey:
+ keysDown &= ~1;
+ break;
+ case NSRightArrowFunctionKey:
+ keysDown &= ~2;
+ break;
+ case NSUpArrowFunctionKey:
+ keysDown &= ~4;
+ break;
+ case NSDownArrowFunctionKey:
+ keysDown &= ~8;
+ break;
+ }
+}
+
+#pragma mark Accessors
+
+#ifdef VIDEATOR_SUPPORT
+- (VideatorProxy *)videatorProxy {
+ return videatorProxy;
+}
+#endif
+
+- (void)getWidth:(int *)w height:(int *)h {
+ NSRect bounds = [self bounds];
+ *w = bounds.size.width;
+ *h = bounds.size.height;
+}
+
+- (void)getMouseX:(int *)mx mouseY:(int *)my mouseButton:(int *)mb {
+ *mx = mouseX;
+ *my = mouseY;
+ *mb = mouseButton | rightMouseButton | otherMouseButton | mouseScrollWheel;
+}
+
+- (void)getMouseX:(int *)mx mouseY:(int *)my mouseButton:(int *)mb keys:(int *)k
+{
+ [self getMouseX:mx mouseY:my mouseButton:mb];
+ *k = keysDown;
+}
+
+#pragma mark Cursor
+
+- (void)setCursorType:(int)type {
+ cursorType = type;
+ [[self window] invalidateCursorRectsForView:self];
+}
+
+- (void)resetCursorRects {
+ /* BUG - cursor changes back to arrow when mouse is clicked
+ if (cursorType == VJMOUSE) {
+ NSCursor *cursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:@"performanceCursor"] hotSpot:NSMakePoint(1.0,1.0)];
+ [cursor setOnMouseEntered:YES];
+ [self addCursorRect:[self bounds] cursor:cursor];
+ [cursor release];
+ } */
+}
+
+
+#pragma mark Text
+
+- (NSDictionary *)textAttributes {
+
+ NSMutableDictionary *attrsDictionary = [NSMutableDictionary dictionaryWithObject:[NSColor whiteColor]
+ forKey:NSForegroundColorAttributeName];
+
+ NSShadow *dockStyleTextShadow = [[NSShadow alloc] init];
+ [dockStyleTextShadow setShadowOffset:NSMakeSize(2, -2)];
+ [dockStyleTextShadow setShadowBlurRadius:1];
+ [dockStyleTextShadow setShadowColor:[NSColor blackColor]];
+ [attrsDictionary setValue:[NSFont boldSystemFontOfSize:12.0] forKey:NSFontAttributeName];
+ [attrsDictionary setValue:dockStyleTextShadow forKey:NSShadowAttributeName];
+ [dockStyleTextShadow autorelease];
+
+ return attrsDictionary;
+}
+
+
+- (void)printText:(CONST char *)text atX:(int)x y:(int)y {
+ messageText = [[NSString stringWithUTF8String:text] retain];
+ messageLocation = NSMakePoint(x + 15, [self bounds].size.height - y);
+ [self setNeedsDisplay:YES];
+}
+
+#pragma mark Buffers
+
+- (int)allocBuffer1:(char **)b1 buffer2:(char **)b2 {
+ currentBuffer = 0;
+ NSRect bounds = [self bounds];
+ imageRep[0] = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+ pixelsWide:bounds.size.width
+ pixelsHigh:bounds.size.height
+ bitsPerSample:8
+ samplesPerPixel:3
+ hasAlpha:NO
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bytesPerRow:0
+ bitsPerPixel:32];
+
+ *b1 = (char *)[imageRep[0] bitmapData];
+
+ imageRep[1] = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+ pixelsWide:bounds.size.width
+ pixelsHigh:bounds.size.height
+ bitsPerSample:8
+ samplesPerPixel:3
+ hasAlpha:NO
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bytesPerRow:0
+ bitsPerPixel:32];
+
+ *b2 = (char *)[imageRep[1] bitmapData];
+ NSLog(@"bytesPerRow = %d", [imageRep[0] bytesPerRow]);
+ return [imageRep[0] bytesPerRow];
+}
+
+- (void)freeBuffers {
+ [imageRep[0] release];
+ [imageRep[1] release];
+}
+
+- (void)flipBuffers {
+ currentBuffer ^= 1;
+}
+
+@end
diff --git a/src/ui/ui-drv/cocoa/HowToBuild.txt b/src/ui/ui-drv/cocoa/HowToBuild.txt
new file mode 100644
index 0000000..90209f1
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/HowToBuild.txt
@@ -0,0 +1,47 @@
+XaoS for Mac OS X (Cocoa)
+Build Instructions
+
+By J.B. Langston III
+
+Here are instructions for getting the XaoS Xcode project to build successfully
+assuming you have downloaded a released source tarball or gotten the source
+from CVS:
+
+A) Build dependencies
+
+ 1) Download the latest libpng from
+
+ ftp://ftp.simplesystems.org/pub/libpng/png/src/
+
+ 2) Configure libpng for universal binaries with the following command:
+
+ env CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -mmacosx-version-min=10.4" \
+ LDFLAGS="-arch i386 -arch ppc" \
+ ./configure --prefix=$XAOS_ROOT/src/ui/ui-drv/cocoa/thirdparty --disable-dependency-tracking
+
+ Be sure to replace $XAOS_ROOT with the root of your XaoS source folder.
+
+ For more information about building open source libraries as universal binaries:
+ http://developer.apple.com/technotes/tn2005/tn2137.html
+
+ 3) Make and install libpng:
+
+ make && make install
+
+ 4) Download the latest gsl from
+
+ ftp://ftp.gnu.org/gnu/gsl/
+
+ 5) Repeat steps 2 and 3 for gsl
+
+ 6) Download the latest gettext from
+
+ ftp://ftp.gnu.org/gnu/gettext/
+
+ 7) Repeat steps 2 and 3 for gettext
+
+B) Build XaoS
+
+ You should now be able to build XaoS from the Xcode project.
+
+Have fun! If you have questions, feel free to e-mail me: jb-langston at austin dot rr dot com \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/Info.plist b/src/ui/ui-drv/cocoa/Info.plist
new file mode 100644
index 0000000..7dc86fd
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Info.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>xaf</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>XaoSDocument</string>
+ <key>CFBundleTypeName</key>
+ <string>XaoS Animation File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ <key>LSTypeIsPackage</key>
+ <false/>
+ <key>NSPersistentStoreTypeKey</key>
+ <string>XML</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>xpf</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>XaoSDocument</string>
+ <key>CFBundleTypeName</key>
+ <string>XaoS Position File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ <key>LSTypeIsPackage</key>
+ <false/>
+ <key>NSPersistentStoreTypeKey</key>
+ <string>XML</string>
+ </dict>
+ </array>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleHelpBookFolder</key>
+ <string>XaoSHelp</string>
+ <key>CFBundleHelpBookName</key>
+ <string>XaoSHelp</string>
+ <key>CFBundleIconFile</key>
+ <string>XaoS</string>
+ <key>CFBundleIdentifier</key>
+ <string>net.sourceforge.xaos.XaoS</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>3.5</string>
+ <key>NSAppleScriptEnabled</key>
+ <string>YES</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/src/ui/ui-drv/cocoa/Japanese.lproj/InfoPlist.strings b/src/ui/ui-drv/cocoa/Japanese.lproj/InfoPlist.strings
new file mode 100644
index 0000000..8a78ff4
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Japanese.lproj/InfoPlist.strings
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/classes.nib b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/classes.nib
new file mode 100644
index 0000000..b9b4b09
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/classes.nib
@@ -0,0 +1,4 @@
+{
+ IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; });
+ IBVersion = 1;
+} \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/info.nib b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/info.nib
new file mode 100644
index 0000000..4c74210
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/info.nib
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBDocumentLocation</key>
+ <string>94 103 356 240 0 0 1280 1002 </string>
+ <key>IBEditorPositions</key>
+ <dict>
+ <key>29</key>
+ <string>93 343 318 44 0 0 1280 1002 </string>
+ </dict>
+ <key>IBFramework Version</key>
+ <string>403.0</string>
+ <key>IBSystem Version</key>
+ <string>8A278</string>
+</dict>
+</plist>
diff --git a/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/keyedobjects.nib b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/keyedobjects.nib
new file mode 100644
index 0000000..ee1187e
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Japanese.lproj/MainMenu.nib/keyedobjects.nib
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/Read Me.rtf b/src/ui/ui-drv/cocoa/Read Me.rtf
new file mode 100644
index 0000000..b005745
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Read Me.rtf
@@ -0,0 +1,193 @@
+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf270
+{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
+{\colortbl;\red255\green255\blue255;}
+{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1}
+{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}
+{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3}
+{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4}
+{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5}
+{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid6}
+{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid7}
+{\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid8}
+{\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid9}
+{\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid10}}
+{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}}
+\vieww9000\viewh8400\viewkind0
+\deftab720
+\pard\pardeftab720\sa80\ql\qnatural
+
+\f0\b\fs24 \cf0 XaoS Real-Time Fractal Zoomer for Mac OS X, Version 3.4\
+\pard\pardeftab720\ql\qnatural
+
+\b0 \cf0 \
+Originally written by Jan Hubicka and Thomas Marsh\
+Currently maintained by Zoltan Kovacs (kovzol@math.u-szeged.hu)\
+Ported to Mac OS X By J.B. Langston III (jb-langston@austin.rr.com)\
+\'a0\
+Current version: \
+XaoS Homepage: {\field{\*\fldinst{HYPERLINK "http://xaos.sf.net/"}}{\fldrslt http://xaos.sf.net/}}\
+\'a0\
+\pard\pardeftab720\sa80\ql\qnatural
+
+\b \cf0 About\
+\pard\pardeftab720\sa80\ql\qnatural
+
+\b0 \cf0 XaoS is an incredible program that lets you explore fractals by zooming in and out in real time.\'a0 If you\'92ve only used static fractal viewers like Fractint or UltraFractal before, zooming into a fractal as a real time animation is incredible.\'a0 XaoS was originally written by Jan Hubicka and Thomas Marsh, and is currently maintained by Zoltan Kovacs. I contributed the Mac OS X user interface and made binaries available for ease of use. XaoS is free software available under the terms of the GNU General Public License.\
+\pard\pardeftab720\ql\qnatural
+\cf0 \
+\pard\pardeftab720\sa80\ql\qnatural
+
+\b \cf0 Installation and Usage\
+\pard\pardeftab720\ql\qnatural
+
+\b0 \cf0 After downloading the XaoS binary, just copy it to your applications folder and run the program. Basic usage is really pretty simple.\'a0\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls1\ilvl0\cf0 {\listtext \'95 }Point your mouse at the part of the image you want to zoom in on, and hold down the mouse button.\'a0 Away you go!\'a0\
+{\listtext \'95 }To zoom back out, hold down the control key and click.\'a0 Or, right click with a two-button mouse.\'a0\
+{\listtext \'95 }To pan, hold down the shift key and drag. On a three-button mouse, drag with the center button.\'a0 If you have a mouse with a scroll wheel, pressing down on the scroll wheel usually works like the center button.\
+{\listtext \'95 }To go full-screen, select UI->Drivers->Mac OS X Fullscreen Driver from the menu. In full screen mode, the menu is only displayed when you move the mouse near the top of the screen. After going full screen, you can quit by pressing \uc0\u8984 Q, or you can go back to windowed mode by selecting UI->Drivers->Mac OS X Windowed Driver.\
+\pard\pardeftab720\ql\qnatural
+\cf0 \'a0\
+To learn more, check out the tutorials from the Help menu.\'a0 They are really informative and a lot of fun to watch.\'a0 For more in-depth information, use the online help.\
+\'a0\
+\pard\pardeftab720\ql\qnatural
+
+\b \cf0 Known Issues\
+\pard\pardeftab720\ql\qnatural
+
+\b0 \cf0 The following are known issues with the current version of XaoS for Mac OS X.\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls2\ilvl0\cf0 {\listtext \'95 }Catseye fractal does not render properly.\'a0 \uc0\u8232 Workaround: Set the bailout to just over 4 (e.g., 4.000000001). After changing this setting, the fractal renders as expected.\
+\pard\pardeftab720\ql\qnatural
+\cf0 \
+\pard\pardeftab720\sa80\ql\qnatural
+
+\b \cf0 Revision History\
+\pard\pardeftab720\sa80\ql\qnatural
+
+\b0 \cf0 3.4\
+Release Date: 6/1/2008\
+\pard\tx560\pardeftab720\ql\qnatural
+\cf0 \
+This is a huge release for Mac users. The Mac user interface has been completely rewritten in Cocoa and improved in a number of ways:\
+\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\sa80\ql\qnatural
+\ls3\ilvl0\cf0 {\listtext \'95 }Standard Aqua dialog boxes instead of the strange-looking Unixy things in previous versions. Fields in dialog boxes now support cut and paste as you would expect.\
+{\listtext \'95 }Pop-up menus are now displayed using standard Aqua menus\
+{\listtext \'95 }Menu bar in full-screen mode is now the standard Mac OS X menu bar. It automatically slides into view when you move your mouse to the top of the screen and slides out when you move away from it.\
+{\listtext \'95 }XaoS now has a standard Aqua about dialog box, which displays links to license and credits in help file.\
+{\listtext \'95 }Help is now displayed via Mac OS X's standard help viewer. Tutorials can still be launched via links in the help viewer.\
+{\listtext \'95 }Support for opening xpf (Saved Position) and xaf (Saved Animation) files directly from Finder via drag and drop and by double-clicking. XaoS now includes its own document icon for these files as well.\
+{\listtext \'95 }Support for basic AppleScriptability via the standard script dictionary. Includes things like opening files and manipulating the window, but no XaoS-specific functionality.\
+{\listtext \'95 }Support for panning the fractal with the mouse scroll wheel or trackpad two-finger gestures.\
+\pard\tx560\pardeftab720\ql\qnatural
+\cf0 \
+In addition to the user interface improvements, XaoS for Mac has the following improvements:\
+\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\sa80\ql\qnatural
+\ls4\ilvl0\cf0 {\listtext \'95 }Now uses greater precision (long double) for calculations to enable much deeper zooms.\
+{\listtext \'95 }In addition to English, XaoS for Mac OS X now supports the following languages: Czech, French, German, Hungarian, Italian, Romanian, and Spanish.\
+{\listtext \'95 }Integration with Stone Design's Videator (http://stone.com/Videator/). XaoS can now send live a live video stream to Videator, which can then do post-processing using Mac OS X's core video technology. This is great for VJing (live video performance art). See http://stone.com/Videator/VJ.html for more details.\
+{\listtext \'95 }New Italian translation courtesy of Sergio Zanchetta\
+{\listtext \'95 }Updated German translation by Andreas Madritsch\
+{\listtext \'95 }Bug fix to prevent Edge Detection and Pseudo 3D filter from rendering the image completely black.\
+{\listtext \'95 }Bug fix to prevent garbled characters when using non-English languages on modern systems using UTF-8\
+{\listtext \'95 }Bug fix to prevent XaoS from crashing after using the Render Animation functionality\
+{\listtext \'95 }Bug fix to prevent incorrect colors on smooth coloring modes with certain video modes\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 \
+3.3\
+Release Date: 3/13/2008\
+\
+Changes since 3.2.2:\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\sa80\ql\qnatural
+\ls5\ilvl0\cf0 {\listtext \'95 }Added user formula support using SFFE/GSL library.\
+{\listtext \'95 }Fixed bug where colors display incorrectly on Intel Macs after switching from full screen back to windowed driver.\
+{\listtext \'95 }Upgraded libpng to 1.2.25.\
+{\listtext \'95 }Included libgsl 1.10.\
+{\listtext \'95 }Updated build instructions with easier third party library build process.\
+{\listtext \'95 }Added performance mode, which inhibits text display (useful for VJing).\
+{\listtext \'95 }Fixed bug where color cycling would stop when moving from forward cycling to reverse.\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 \
+3.2.2 \
+Release Date: 9/26/2006\
+\
+Changes since Beta 4:\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\sa80\ql\qnatural
+\ls6\ilvl0\cf0 {\listtext \'95 }Fixed bug which was preventing XaoS from rendering images over 2500x2500\
+{\listtext \'95 }Added fullscreen driver\
+{\listtext \'95 }Upgraded libpng to 1.2.12\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 \
+3.2.1 Beta 4\
+\pard\pardeftab720\ql\qnatural
+\cf0 Release Date: 7/8/2006\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls7\ilvl0\cf0 \
+\pard\pardeftab720\ql\qnatural
+\cf0 Changes since Beta 3:\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls8\ilvl0\cf0 {\listtext \'95 }Fixed bug with colors on Intel Macs (default colors previously showed yellow instead of blue)\
+{\listtext \'95 }Fixed bug that prevented render animation option from working correctly\
+{\listtext \'95 }Added -windowsize and -autoscreensize command line arguments\
+\pard\tx940\tx1440\pardeftab720\li1440\fi-1440\ql\qnatural
+\ls8\ilvl1\cf0 -windowsize allows you to specify the window size on the command line\
+ -autoscreensize causes XaoS to attempt to automatically detect the pysical screen size\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 \
+3.2.1 Beta 3\
+\pard\pardeftab720\ql\qnatural
+\cf0 Release Date: 6/27/2006\
+\
+Changes since Beta 2:\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls9\ilvl0\cf0 {\listtext \'95 }Support saving to png. libpng is included as a private framework.\
+{\listtext \'95 }Changed icon to match XaoS default image\
+{\listtext \'95 }Provide standard Mac OS keyboard shortcuts for applicable functions -- redo, undo, save, load\
+{\listtext \'95 }Repackaged as a disk image with Readme fil\
+\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 3.2.1 Beta 2\
+\pard\pardeftab720\ql\qnatural
+\cf0 Release Date: 6/20/2006\
+\
+Changes since Beta 1:\
+\pard\tx220\tx720\pardeftab720\li720\fi-720\ql\qnatural
+\ls10\ilvl0\cf0 {\listtext \'95 }Keyboard input has been implemented for all keys supported by XaoS.\
+{\listtext \'95 }Fixed bug where window events were not handled if driver was reinitialized.\
+{\listtext \'95 }Tutorials now play back.\
+{\listtext \'95 }Random examples now load.\
+{\listtext \'95 }Since Mac OS X doesn't allow single menu items directly in the menubar, I put "Stop Replay" for animation mode in the UI menu\
+{\listtext \'95 }Mac OS X applications have their own quit command in the Application menu.\'a0 So I removed the quit menu and preceeding separator from the file menu.\
+{\listtext \'95 }Swapped order of UI and Help menus in animation mode to comply with Human Interface Guidelines.\
+\pard\pardeftab720\ql\qnatural
+\cf0 \'a0\
+\pard\pardeftab720\sa80\ql\qnatural
+\cf0 3.2.1 Beta 1\
+\pard\pardeftab720\ql\qnatural
+\cf0 Release Date: 6/15/2006\
+\'a0\
+This was the original public release of XaoS for Mac OS X.\
+\
+\pard\pardeftab720\ql\qnatural
+
+\b \cf0 Included Software
+\b0 \
+\
+libpng 1.2.25\
+http://libpng.org/pub/png/libpng.html\
+\
+GNU Scientific Library 1.10 \
+http://www.gnu.org/software/gsl/\
+\
+
+\b About Free Software\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\ql\qnatural\pardirnatural
+
+\b0 \cf0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\
+the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\
+\
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\
+\
+You should have received a copy of the GNU General Public License along with this program; it is displayable from the program's online help feature. If not, you can find it on the Internet at http://www.gnu.org or you can write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.} \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/Readme Cocoa b/src/ui/ui-drv/cocoa/Readme Cocoa
new file mode 100644
index 0000000..3e92f34
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/Readme Cocoa
@@ -0,0 +1,390 @@
+2006-10-23 - Andrew Stone (andrew@stone.com)
+ - to build for Videator: -DVIDEATOR_SUPPORT
+ - added this file
+ - added Credits.html
+ - modified InfoPlist.strings
+ - MainMenu.nib
+ - changed NewApplication to XaoS
+ - changed window title to indicate this version of XaoS talks to Videator
+
+ - AppController.m: added distributed notification with imageRep
+ - FractalView.m: added method to return current imageRep
+2006-10-25
+ - ui_cocoa.m now byte swaps color masks
+
+2006-10-26
+ - hot keys working
+ - tutorial and help working ala carbon
+
+2006-11-29 - J.B. Langston
+
+Committing additional changes submitted 10/30 by Andrew Stone:
+
+ - support for arrow keys
+ up/down change zoom speed
+ right/left: if cycling - change
+ if auto-rotation - change speed of rotation
+
+ - UI -> Performance Mode
+ This will turn off the echoing of messages to the screen
+
+ - going from cycle forward and backward no longer toggles cycling off
+
+ - BUG FIX: window now regains key status after after dialog
+
+2008-03-14 - J.B. Langston
+
+ - Fixed bug with smooth color modes on PowerPC Macs (filter.h)
+
+2008-03-17 - J.B. Langston
+
+ - Added user formula support using SFFE/libgsl
+
+ - Added support for libpng to Cocoa
+
+ - Added build instructions to Cocoa project
+
+2008-03-18 - J.B. Langston
+
+ - Moved Videator support into separate VideatorProxy class and updated with
+ Andrew's latest changes - UNTESTED
+
+ - Replaced funky bit-swapping code; now use #if __BIG_ENDIAN__ to set color
+ masks correctly
+
+ - Removed unnecessary xstdio_osx.c and made executable-relative paths work
+ with standard xstdio.c
+
+ - Added Enter key equivalent for OK button on custom dialogs
+
+ - Added call to resize image when maximizing window
+
+ - Added call to terminate app on window close
+
+ - Enabled long double support for deeper zooms
+
+ - Added event handling for middle and right mouse buttons
+
+ - Added event handling for scroll wheel panning
+
+ - Added copyright headers to all files
+
+ - Changed [view setNeedsDisplay:YES] to [view display] to draw immediately
+ in order to eliminate jerky zooming motion
+
+ - Added support to print status text
+
+ - Made save and open panels use last selected directory instead of always
+ going back to home directory
+
+ - Made window regains key status after open/save dialog
+
+ - Removed "-Videator Enabled" from titlebar
+
+ - Fixes to custom dialogs to correctly display long doubles and allow
+ horizontal scrolling instead of wrapping values
+
+2008-03-20
+
+ REFACTORING/CLEANUP
+
+ - Added autorelease pools to all driver functions, wrapping all controller calls
+
+ - removed autorelease pools from inside controller methods
+
+ - Removed Preferences nib, controller, menu item, and associated icons
+ (Videator support will be toggled via menu item in UI menu)
+
+ - changed driver and function name to cocoa_* instead of osx_*
+
+ - Added MACOSX define that can trigger shared functionality for Cocoa/Carbon drivers
+
+ - Removed separate fullscreen driver
+
+ - Removed wrapper functions from controller; now call view functions directly
+
+ - Added functions for driver init and uninit to controller
+
+ - Added pragma marks to categorize functions in controller and view
+
+ - Moved videator hook to view's drawRect:
+
+ - Added wait date to event handling to prevent busy waiting
+
+ HELP SUPPORT
+
+ - Created Apple Help conversion script
+
+ - Added help settings to Info.plist
+
+ - Updated showHelpWithContext:name: method to show main help page
+
+ - Added help conversion script to pre-compile script build phase
+
+2008-03-31
+
+ DIALOGS
+
+ - Add copy/paste functionality for custom dialogs
+
+ HELP
+
+ - Update help conversion script to automatically generate index
+
+ - Update help to use stylesheets
+
+2008-04-04
+
+ I18N
+
+ - Add reference to gettext library, and script command to copy it
+
+ - Add code to detect default locale and set LANG variable accordingly
+
+
+2008-04-05
+
+ MENUS
+
+ - Added Window menu and associated menu items
+
+ I18N
+
+ - Fixed bug where key equivalents were not found when foreign languages
+ were selected
+
+ - I18nized cut/copy/paste/etc. menu items, and OK/Cancel dialog buttons
+
+2008-04-06
+
+ I18N
+
+ - Add code to convert user's native text encoding (usually UTF-8) to
+ Latin1/2 to prevent garbled text through built-in text handling system
+
+ - Automate po/mo file build and packaging
+
+ - Add code to set locale directory correctly relative to executable path
+
+ MENUS
+
+ - Implement popup menus
+
+ - I18nize menu items in application menu
+
+ HELP
+
+ - fix bug in help conversion that results in missing headers for some files
+
+ - Add help applescript to automatically launch tutorials
+
+2008-04-07
+
+ MENUS
+
+ - Implement menu delegate to check/uncheck menu items when displayed
+
+ DIALOGS
+
+ - Hook up choose file button on custom dialogs
+
+2008-04-09
+
+ FULL SCREEN
+
+ - Implement fullscreen code
+
+ - Add menu item to UI menu to toggle fullscreen mode
+
+ - Change render basename type from to DIALOG_STRING to DIALOG_OFILE
+
+ DRIVER
+
+ - Add driver initialization code
+
+ - Add driver uninitialization code
+
+ MISC
+
+ - Conditionalize custom script build phases so they do not do unnecessary work
+
+2008-04-10
+
+ I18N
+
+ - Added italian translation
+
+ MISC
+
+ - Rebuilt Xcode project to fix issues with debugger and interface builder
+
+ - Incremented Cocoa version number from 3.3 to 3.4
+
+ HELP
+
+ - Got rid of space in help file name
+
+2008-04-14
+
+ I18N
+
+ - Make OK/Cancel buttons on custom dialogs autosize to fit i18n labels
+
+ MISC
+
+ - Change Performance Mode to VJ mode (changed shortcut from P to v)
+ (performance mode might be confused with performance enhancement)
+
+ - Added document icon
+
+ - Added Close menu item to file menu
+
+ - Fixed regression where window did not retain key status after dialog
+
+ - Add cursor changing code in cocoa driver
+
+ - Add hook to change cursor during performance mode
+
+2008-04-16
+
+ HELP
+
+ - Add css element to make dt elements bold
+
+ - Add anchors for usrform and usrformInit to help file
+
+ I18N
+
+ - Updated italian po and catalog
+
+ - Added Italian to configure.in ALL_LINGUAS
+
+ MISC
+
+ - Refine about dialog box
+
+ - Add comments and cleanup
+
+ - Changed version to 3.4pre1 in configure.in
+
+2008-04-17
+
+ BUGS
+
+ - Fix crash after animation rendering
+
+ Analysis: changes introduced for sffe made the uih variable from ui.c
+ global in ui.h so that the sffe parser can be accessed from custom
+ formula code in formulas.c. Uih was previously declared static in render.c
+ because the animation renderer maintains its own context. SFFE changed
+ this from static to extern so the uih in render.c was pointing to the same
+ uih in ui.c, instead of to a different structure. When animations were
+ rendered, the uih in ui.h got clobbered, and the next function that tried
+ to use it caused a segfault.
+
+ Fix:
+ 1. Change name of global uih pointer defined in ui.h from uih to globaluih.
+ 2. Change sffe code to access globaluih pointer instead of uih
+ 3. Add code to main function to set both uih and globaluih to point at the same structure
+ 4. Change code in cocoa driver to use globaluih as well
+
+ - Fix bug that causes XaoS to crash when using non-native (ugly) dialog
+ code for Render Animation dialog with open file dialog for basename
+
+ Analysis: There was a loop in ui_buildfile in dialog.c, that tried to
+ find a "*" in the default filename, and if it didn't find one, it would
+ run right off the end of the buffer and continue until a seg fault occurred.
+
+ Fix: the loop now checks for both "*" or a nul terminator as the exit
+ condition. If it doesn't find an asterisk, it still stops at the end
+ of the string.
+
+ - Make custom dialog boxes slide out of view before executing menu function
+
+ This prevents the dialog from hanging around after clicking OK during long
+ running operations such as rendering animations
+
+ - Add code to prevent rendering animation if absolute path is not specified
+ for Basename. This prevents files from being accidentally written to the
+ hard drive's root directory
+
+2008-04-23
+
+ I18N
+
+ - Changes to -initLocale: do not overwrite LANG if it is already set
+
+ - Added AppController.m and CustomDialog.m in i18n/Makefile.in.in
+
+ - Regenerated po and pot files with new strings from cocoa driver
+
+ MISC
+
+ - Conditionalize window menu with #ifdef MACOSX
+
+2008-04-24
+
+ - Add enable/disable menu item for Videator
+
+ - Move Close menu item to proper place in File menu
+
+ - Reindent code
+
+ - Cleanups to eliminate warnings
+
+ - Conditionalize videator code
+
+2008-04-26
+
+ - Update video encoding section to recommend ffmpeg, mencoder
+
+ - Move Berkeley MPEG encoder information to historical section
+
+ - Create help section to explain how to get support
+
+ - Add library copyright information to credits help section
+
+ - Update Development help section with recent contribution instructions
+
+ - Add Mac OS X help section
+
+ - Add links to Videator in Mac OS X help section
+
+2008-05-15
+
+ - Fix diacritical mark rendering on Mac OS X Tiger
+
+ - Update Italian translation
+
+ - Fix problem with localized application menu
+
+ - Add link to XaoS Website in About dialog
+
+2008-05-20
+
+ - Fix black screen with edge detection filters
+
+ - Fix black screen with pseudo-3d filter
+
+ - Fix black screen with hsv coloring modes
+
+ - Automatically save window position and size
+
+ - Update help file to remove workarounds for fixed issues
+
+2008-05-22
+
+ - Increment version numbers
+
+
+TODO:
+
+* bugs
+
+ - Fix catseye rendering (shows empty circle without increasing bailout)
+ - Cursor changing code only works until the user clicks a button
+
+* acs features
+ - Implement fast palette save/recall
+ - Implement autokeys on startup
+
diff --git a/src/ui/ui-drv/cocoa/VideatorProxy.h b/src/ui/ui-drv/cocoa/VideatorProxy.h
new file mode 100644
index 0000000..f4187ee
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/VideatorProxy.h
@@ -0,0 +1,42 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ * Videator Support by Andrew Stone (Stone Design)
+ * For information about Videator, visit http://www.stone.com/Videator
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifdef VIDEATOR_SUPPORT
+#import <Cocoa/Cocoa.h>
+
+@ interface VideatorProxy:NSObject {
+ BOOL _wantsThrottle;
+ NSDate *_lastFrameCreatedDate;
+ id _videatorProxy;
+ NSCalendarDate *_killDate;
+ BOOL _videatorEnabled;
+}
+
+-(void) sendImageRep:(NSBitmapImageRep *) imageRep;
+-(void) toggleVideator:(id) sender;
+-(BOOL) videatorEnabled;
+
+@end
+#endif
diff --git a/src/ui/ui-drv/cocoa/VideatorProxy.m b/src/ui/ui-drv/cocoa/VideatorProxy.m
new file mode 100644
index 0000000..506ac48
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/VideatorProxy.m
@@ -0,0 +1,157 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ * Videator Support by Andrew Stone (Stone Design)
+ * For information about Videator, visit http://www.stone.com/Videator
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include <aconfig.h>
+#ifdef VIDEATOR_SUPPORT
+#import "VideatorProxy.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <libc.h>
+
+NSString *cheapHostName() {
+ NSString *host = @"localhost";
+ char s[_POSIX_HOST_NAME_MAX+1];
+ s[0] = '\0';
+ if (gethostname(s, _POSIX_HOST_NAME_MAX) == 0) {
+ if (strlen(s) > 0)
+ host = [[[NSString alloc] initWithUTF8String:s]autorelease];
+ }
+ return host;
+}
+
+#define VideatorServer ([NSString stringWithFormat:@"VideatorServer-%@",cheapHostName()])
+#define FRAME_REFRESH_THRESHOLD 0.04
+
+@protocol VideatorVendedProtocol
+// to notify in main thread
+- (void)runUpdateAlert:(NSString *)latestVersionNumber;
+// XaoS
+- (BOOL)wantsXaoSImage;
+- (void)setXaosImageData:(NSData *)bmData;
+// automator mode to check its not hung
+- (BOOL)heartBeat;
+@end
+
+
+@implementation VideatorProxy
+
++ (void)setupDefaults
+{
+ NSString *userDefaultsValuesPath;
+ NSDictionary *userDefaultsValuesDict;
+ NSDictionary *initialValuesDict;
+ NSArray *resettableUserDefaultsKeys;
+
+ userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults"
+ ofType:@"plist"];
+ userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];
+
+ [[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];
+
+ resettableUserDefaultsKeys=[NSArray arrayWithObjects:@"EnableVideator",nil];
+ initialValuesDict=[userDefaultsValuesDict dictionaryWithValuesForKeys:resettableUserDefaultsKeys];
+
+ [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initialValuesDict];
+}
+
++ (void)initialize {
+ [self setupDefaults];
+}
+
+- (id)init {
+ self = [super init];
+ if (self) {
+ _videatorEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"EnableVideator"];
+ }
+ return self;
+}
+
+- (void)toggleVideator:(id)sender {
+ _videatorEnabled ^= 1;
+ [[NSUserDefaults standardUserDefaults] setBool:_videatorEnabled forKey:@"EnableVideator"];
+}
+
+- (BOOL)videatorEnabled {
+ return _videatorEnabled;
+}
+
+- (void)connectionDidDie:(NSNotification *)n {
+ _videatorProxy = nil;
+ _killDate = [[NSCalendarDate date] retain];
+ NSLog(@"Videator is dead... ...Long Live Videator!");
+}
+
+- (void)getProxy {
+
+ // do not try and reconnect to an application that is terminating:
+ if (_killDate && [_killDate timeIntervalSinceNow] > -10.0) return;
+ else _killDate = nil;
+
+ _videatorProxy = [[NSConnection rootProxyForConnectionWithRegisteredName:VideatorServer host:nil] retain];
+ // if we can't find it, no big deal:
+ if (_videatorProxy != nil) {
+ [_videatorProxy setProtocolForProxy:@protocol(VideatorVendedProtocol)];
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(connectionDidDie:) name:@"VideatorWillTerminate" object:nil];
+ }
+}
+
+- (void)sendImageRep:(NSBitmapImageRep *)imageRep {
+ // simply return if user does not want this
+ if (!_videatorEnabled) return;
+
+ // Andrew's Videator hook - costs almost nothing since the view maintains the bitmapImageRep in hand -
+ // We call it here because other mechanisms might cause a redraw in the view but we don't want that overhead
+ // unless we've been notified that there really was a change:
+ // HOWEVER we can only shove so much stuff down the pipe - let's try 30 frames per second threshold
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSDate *now = [NSDate date];
+
+
+ if (_wantsThrottle) {
+ static float _FRAME_REFRESH_THRESHOLD = 0.0;
+ if (_FRAME_REFRESH_THRESHOLD == 0.0) {
+ _FRAME_REFRESH_THRESHOLD = [[NSUserDefaults standardUserDefaults] floatForKey:@"RefreshThreshold"];
+ if (_FRAME_REFRESH_THRESHOLD == 0.0) _FRAME_REFRESH_THRESHOLD = FRAME_REFRESH_THRESHOLD;
+ }
+ if (_lastFrameCreatedDate && [now timeIntervalSinceDate:_lastFrameCreatedDate] < _FRAME_REFRESH_THRESHOLD) return;
+ [_lastFrameCreatedDate release];
+ _lastFrameCreatedDate = [now retain];
+ }
+
+ if (!_videatorProxy) [self getProxy];
+ NS_DURING
+ if (_videatorProxy!=nil /* DO NOT WAIT FOR THE ROUNDTRIP && [_videatorProxy wantsXaoSImage] */)
+ [_videatorProxy setXaosImageData:[imageRep TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:0]];
+ NS_HANDLER
+
+ NS_ENDHANDLER
+
+ [pool release];
+}
+
+@end
+#endif \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/XaoS.icns b/src/ui/ui-drv/cocoa/XaoS.icns
new file mode 100644
index 0000000..e03d0cb
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/XaoS.icns
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/XaoS.xcodeproj/project.pbxproj b/src/ui/ui-drv/cocoa/XaoS.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..fd7e096
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/XaoS.xcodeproj/project.pbxproj
@@ -0,0 +1,831 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 44;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
+ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+ D90A09560DB42FD900B7AAFD /* performanceCursor.tiff in Resources */ = {isa = PBXBuildFile; fileRef = D90A09550DB42FD900B7AAFD /* performanceCursor.tiff */; };
+ D90A096A0DB4465100B7AAFD /* XaoSDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = D90A09690DB4465100B7AAFD /* XaoSDocument.icns */; };
+ D962B0AD101CA598003C66CE /* grlib_cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = D962B0AC101CA598003C66CE /* grlib_cocoa.m */; };
+ D962B20C101E9149003C66CE /* grlib.c in Sources */ = {isa = PBXBuildFile; fileRef = D962B20B101E9149003C66CE /* grlib.c */; };
+ D99B5B740DAEE9D100489809 /* ui_cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B730DAEE9D100489809 /* ui_cocoa.m */; };
+ D99B5B7E0DAEE9E700489809 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B770DAEE9E700489809 /* AppController.m */; };
+ D99B5B7F0DAEE9E700489809 /* FractalView.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B790DAEE9E700489809 /* FractalView.m */; };
+ D99B5B800DAEE9E700489809 /* CustomDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B7B0DAEE9E700489809 /* CustomDialog.m */; };
+ D99B5B810DAEE9E700489809 /* VideatorProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B7D0DAEE9E700489809 /* VideatorProxy.m */; };
+ D99B5C040DAEEA2700489809 /* cmplx.asm in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B890DAEEA2700489809 /* cmplx.asm */; };
+ D99B5C050DAEEA2700489809 /* sffe.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B8A0DAEEA2700489809 /* sffe.c */; };
+ D99B5C060DAEEA2700489809 /* sffe_cmplx_asm.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B8B0DAEEA2700489809 /* sffe_cmplx_asm.c */; };
+ D99B5C070DAEEA2700489809 /* sffe_cmplx_gsl.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5B8C0DAEEA2700489809 /* sffe_cmplx_gsl.c */; };
+ D99B5C160DAEEA2700489809 /* subwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BC70DAEEA2700489809 /* subwindow.c */; };
+ D99B5C170DAEEA2700489809 /* palettef.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BC80DAEEA2700489809 /* palettef.c */; };
+ D99B5C180DAEEA2700489809 /* interlace.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BC90DAEEA2700489809 /* interlace.c */; };
+ D99B5C190DAEEA2700489809 /* edge2.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCA0DAEEA2700489809 /* edge2.c */; };
+ D99B5C1A0DAEEA2700489809 /* fractal.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCB0DAEEA2700489809 /* fractal.c */; };
+ D99B5C1B0DAEEA2700489809 /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCC0DAEEA2700489809 /* rotate.c */; };
+ D99B5C1C0DAEEA2700489809 /* itersmall.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCD0DAEEA2700489809 /* itersmall.c */; };
+ D99B5C1D0DAEEA2700489809 /* blur.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCE0DAEEA2700489809 /* blur.c */; };
+ D99B5C1E0DAEEA2700489809 /* anti.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BCF0DAEEA2700489809 /* anti.c */; };
+ D99B5C1F0DAEEA2700489809 /* stereogram.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD00DAEEA2700489809 /* stereogram.c */; };
+ D99B5C200DAEEA2700489809 /* edge.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD10DAEEA2700489809 /* edge.c */; };
+ D99B5C210DAEEA2700489809 /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD20DAEEA2700489809 /* zoom.c */; };
+ D99B5C220DAEEA2700489809 /* star.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD30DAEEA2700489809 /* star.c */; };
+ D99B5C230DAEEA2700489809 /* formulas.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD40DAEEA2700489809 /* formulas.c */; };
+ D99B5C240DAEEA2700489809 /* emboss.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD50DAEEA2700489809 /* emboss.c */; };
+ D99B5C250DAEEA2700489809 /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD60DAEEA2700489809 /* julia.c */; };
+ D99B5C260DAEEA2700489809 /* btrace.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD70DAEEA2700489809 /* btrace.c */; };
+ D99B5C270DAEEA2700489809 /* i386.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD80DAEEA2700489809 /* i386.c */; };
+ D99B5C280DAEEA2700489809 /* dither.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BD90DAEEA2700489809 /* dither.c */; };
+ D99B5C290DAEEA2700489809 /* 3d.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BDA0DAEEA2700489809 /* 3d.c */; };
+ D99B5C2A0DAEEA2700489809 /* plane.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BDB0DAEEA2700489809 /* plane.c */; };
+ D99B5C2B0DAEEA2700489809 /* filter.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BDD0DAEEA2700489809 /* filter.c */; };
+ D99B5C2C0DAEEA2700489809 /* palette.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BDE0DAEEA2700489809 /* palette.c */; };
+ D99B5C2D0DAEEA2700489809 /* random.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BDF0DAEEA2700489809 /* random.c */; };
+ D99B5C2F0DAEEA2700489809 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE10DAEEA2700489809 /* font.c */; };
+ D99B5C300DAEEA2700489809 /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE20DAEEA2700489809 /* image.c */; };
+ D99B5C310DAEEA2700489809 /* drivers.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE40DAEEA2700489809 /* drivers.c */; };
+ D99B5C320DAEEA2700489809 /* dialog.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE50DAEEA2700489809 /* dialog.c */; };
+ D99B5C330DAEEA2700489809 /* uihelp.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE60DAEEA2700489809 /* uihelp.c */; };
+ D99B5C340DAEEA2700489809 /* uimenu.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE70DAEEA2700489809 /* uimenu.c */; };
+ D99B5C350DAEEA2700489809 /* fparams.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE80DAEEA2700489809 /* fparams.c */; };
+ D99B5C360DAEEA2700489809 /* ui.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BE90DAEEA2700489809 /* ui.c */; };
+ D99B5C370DAEEA2700489809 /* param.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BEA0DAEEA2700489809 /* param.c */; };
+ D99B5C380DAEEA2700489809 /* filesel.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BEB0DAEEA2700489809 /* filesel.c */; };
+ D99B5C390DAEEA2700489809 /* pipecmd.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BEC0DAEEA2700489809 /* pipecmd.c */; };
+ D99B5C3A0DAEEA2700489809 /* save.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BEE0DAEEA2700489809 /* save.c */; };
+ D99B5C3B0DAEEA2700489809 /* menu.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BEF0DAEEA2700489809 /* menu.c */; };
+ D99B5C3C0DAEEA2700489809 /* wstack.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF00DAEEA2700489809 /* wstack.c */; };
+ D99B5C3D0DAEEA2700489809 /* playtext.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF10DAEEA2700489809 /* playtext.c */; };
+ D99B5C3E0DAEEA2700489809 /* render.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF20DAEEA2700489809 /* render.c */; };
+ D99B5C3F0DAEEA2700489809 /* play.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF30DAEEA2700489809 /* play.c */; };
+ D99B5C400DAEEA2700489809 /* messg.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF40DAEEA2700489809 /* messg.c */; };
+ D99B5C410DAEEA2700489809 /* ui_helper.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF50DAEEA2700489809 /* ui_helper.c */; };
+ D99B5C420DAEEA2700489809 /* autopilot.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF60DAEEA2700489809 /* autopilot.c */; };
+ D99B5C430DAEEA2700489809 /* xmenu.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF80DAEEA2700489809 /* xmenu.c */; };
+ D99B5C440DAEEA2700489809 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BF90DAEEA2700489809 /* png.c */; };
+ D99B5C450DAEEA2700489809 /* xstring.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFA0DAEEA2700489809 /* xstring.c */; };
+ D99B5C460DAEEA2700489809 /* xshl.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFB0DAEEA2700489809 /* xshl.c */; };
+ D99B5C470DAEEA2700489809 /* xldio.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFC0DAEEA2700489809 /* xldio.c */; };
+ D99B5C480DAEEA2700489809 /* help.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFD0DAEEA2700489809 /* help.c */; };
+ D99B5C490DAEEA2700489809 /* xerror.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFE0DAEEA2700489809 /* xerror.c */; };
+ D99B5C4A0DAEEA2700489809 /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5BFF0DAEEA2700489809 /* thread.c */; };
+ D99B5C4B0DAEEA2700489809 /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5C000DAEEA2700489809 /* timers.c */; };
+ D99B5C4D0DAEEA2700489809 /* xstdio.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5C020DAEEA2700489809 /* xstdio.c */; };
+ D99B5C4E0DAEEA2700489809 /* catalog.c in Sources */ = {isa = PBXBuildFile; fileRef = D99B5C030DAEEA2700489809 /* catalog.c */; };
+ D99B5C500DAEEA6900489809 /* XaoS.icns in Resources */ = {isa = PBXBuildFile; fileRef = D99B5C4F0DAEEA6900489809 /* XaoS.icns */; };
+ D99B5E070DAEEB1200489809 /* XaoSHelp in Resources */ = {isa = PBXBuildFile; fileRef = D99B5D700DAEEB1200489809 /* XaoSHelp */; };
+ D99B5E0C0DAEEB4C00489809 /* libintl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D99B5E090DAEEB4C00489809 /* libintl.dylib */; };
+ D99B5E0D0DAEEB4C00489809 /* libgsl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D99B5E0A0DAEEB4C00489809 /* libgsl.dylib */; };
+ D99B5E0E0DAEEB4C00489809 /* libpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D99B5E0B0DAEEB4C00489809 /* libpng.dylib */; };
+ D99B5E1D0DAEEBD400489809 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D99B5E1C0DAEEBD400489809 /* Carbon.framework */; };
+ D99B5E200DAEEC0E00489809 /* libintl.dylib in Copy Embedded Frameworks and Libraries */ = {isa = PBXBuildFile; fileRef = D99B5E090DAEEB4C00489809 /* libintl.dylib */; };
+ D99B5E210DAEEC0E00489809 /* libgsl.dylib in Copy Embedded Frameworks and Libraries */ = {isa = PBXBuildFile; fileRef = D99B5E0A0DAEEB4C00489809 /* libgsl.dylib */; };
+ D99B5E220DAEEC0E00489809 /* libpng.dylib in Copy Embedded Frameworks and Libraries */ = {isa = PBXBuildFile; fileRef = D99B5E0B0DAEEB4C00489809 /* libpng.dylib */; };
+ D99B5E690DAEF3A400489809 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = D99B5E670DAEF3A400489809 /* Credits.html */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ D99B5E1F0DAEEC0D00489809 /* Copy Embedded Frameworks and Libraries */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ D99B5E200DAEEC0E00489809 /* libintl.dylib in Copy Embedded Frameworks and Libraries */,
+ D99B5E210DAEEC0E00489809 /* libgsl.dylib in Copy Embedded Frameworks and Libraries */,
+ D99B5E220DAEEC0E00489809 /* libpng.dylib in Copy Embedded Frameworks and Libraries */,
+ );
+ name = "Copy Embedded Frameworks and Libraries";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
+ 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+ 32CA4F630368D1EE00C91783 /* XaoS_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XaoS_Prefix.pch; sourceTree = "<group>"; };
+ 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 8D1107320486CEB800E47090 /* XaoS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XaoS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ D90A09550DB42FD900B7AAFD /* performanceCursor.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = performanceCursor.tiff; sourceTree = "<group>"; };
+ D90A09690DB4465100B7AAFD /* XaoSDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = XaoSDocument.icns; sourceTree = "<group>"; };
+ D95DA721101FE23800826B31 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+ D962B0AC101CA598003C66CE /* grlib_cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = grlib_cocoa.m; sourceTree = "<group>"; };
+ D962B20B101E9149003C66CE /* grlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = grlib.c; path = ../../../filter/grlib.c; sourceTree = SOURCE_ROOT; };
+ D99B5B710DAEE9D100489809 /* aconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aconfig.h; sourceTree = "<group>"; };
+ D99B5B720DAEE9D100489809 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
+ D99B5B730DAEE9D100489809 /* ui_cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa.m; sourceTree = "<group>"; };
+ D99B5B760DAEE9E700489809 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = "<group>"; };
+ D99B5B770DAEE9E700489809 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = "<group>"; };
+ D99B5B780DAEE9E700489809 /* FractalView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FractalView.h; sourceTree = "<group>"; };
+ D99B5B790DAEE9E700489809 /* FractalView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FractalView.m; sourceTree = "<group>"; };
+ D99B5B7A0DAEE9E700489809 /* CustomDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomDialog.h; sourceTree = "<group>"; };
+ D99B5B7B0DAEE9E700489809 /* CustomDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomDialog.m; sourceTree = "<group>"; };
+ D99B5B7C0DAEE9E700489809 /* VideatorProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideatorProxy.h; sourceTree = "<group>"; };
+ D99B5B7D0DAEE9E700489809 /* VideatorProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideatorProxy.m; sourceTree = "<group>"; };
+ D99B5B820DAEEA0800489809 /* Readme Cocoa */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Readme Cocoa"; sourceTree = "<group>"; };
+ D99B5B830DAEEA0800489809 /* HowToBuild.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HowToBuild.txt; sourceTree = "<group>"; };
+ D99B5B890DAEEA2700489809 /* cmplx.asm */ = {isa = PBXFileReference; explicitFileType = sourcecode.nasm; fileEncoding = 4; path = cmplx.asm; sourceTree = "<group>"; };
+ D99B5B8A0DAEEA2700489809 /* sffe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sffe.c; sourceTree = "<group>"; };
+ D99B5B8B0DAEEA2700489809 /* sffe_cmplx_asm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sffe_cmplx_asm.c; sourceTree = "<group>"; };
+ D99B5B8C0DAEEA2700489809 /* sffe_cmplx_gsl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sffe_cmplx_gsl.c; sourceTree = "<group>"; };
+ D99B5B8F0DAEEA2700489809 /* archaccel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = archaccel.h; sourceTree = "<group>"; };
+ D99B5B900DAEEA2700489809 /* btrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = btrace.h; sourceTree = "<group>"; };
+ D99B5B910DAEEA2700489809 /* c256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = c256.h; sourceTree = "<group>"; };
+ D99B5B920DAEEA2700489809 /* catalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catalog.h; sourceTree = "<group>"; };
+ D99B5B930DAEEA2700489809 /* complex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = complex.h; sourceTree = "<group>"; };
+ D99B5BA10DAEEA2700489809 /* cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = "<group>"; };
+ D99B5BA20DAEEA2700489809 /* fconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fconfig.h; sourceTree = "<group>"; };
+ D99B5BA30DAEEA2700489809 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = "<group>"; };
+ D99B5BA40DAEEA2700489809 /* formulas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = formulas.h; sourceTree = "<group>"; };
+ D99B5BA50DAEEA2700489809 /* fractal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fractal.h; sourceTree = "<group>"; };
+ D99B5BA60DAEEA2700489809 /* gccaccel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gccaccel.h; sourceTree = "<group>"; };
+ D99B5BA70DAEEA2700489809 /* gccbuild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gccbuild.h; sourceTree = "<group>"; };
+ D99B5BA80DAEEA2700489809 /* generic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generic.h; sourceTree = "<group>"; };
+ D99B5BA90DAEEA2700489809 /* grlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grlib.h; sourceTree = "<group>"; };
+ D99B5BAA0DAEEA2700489809 /* hicolor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hicolor.h; sourceTree = "<group>"; };
+ D99B5BAC0DAEEA2700489809 /* __math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = __math.h; sourceTree = "<group>"; };
+ D99B5BAD0DAEEA2700489809 /* ctrl87.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ctrl87.h; sourceTree = "<group>"; };
+ D99B5BAE0DAEEA2700489809 /* sstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sstring.h; sourceTree = "<group>"; };
+ D99B5BB30DAEEA2700489809 /* misc-f.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "misc-f.h"; sourceTree = "<group>"; };
+ D99B5BB40DAEEA2700489809 /* param.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = param.h; sourceTree = "<group>"; };
+ D99B5BB50DAEEA2700489809 /* pixel_t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixel_t.h; sourceTree = "<group>"; };
+ D99B5BB60DAEEA2700489809 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plane.h; sourceTree = "<group>"; };
+ D99B5BB80DAEEA2700489809 /* timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timers.h; sourceTree = "<group>"; };
+ D99B5BB90DAEEA2700489809 /* true24.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = true24.h; sourceTree = "<group>"; };
+ D99B5BBA0DAEEA2700489809 /* truecolor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = truecolor.h; sourceTree = "<group>"; };
+ D99B5BBB0DAEEA2700489809 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = "<group>"; };
+ D99B5BBC0DAEEA2700489809 /* ui_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_helper.h; sourceTree = "<group>"; };
+ D99B5BBE0DAEEA2700489809 /* version.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version.h.in; sourceTree = "<group>"; };
+ D99B5BBF0DAEEA2700489809 /* xerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xerror.h; sourceTree = "<group>"; };
+ D99B5BC00DAEEA2700489809 /* xio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xio.h; sourceTree = "<group>"; };
+ D99B5BC10DAEEA2700489809 /* xldio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xldio.h; sourceTree = "<group>"; };
+ D99B5BC20DAEEA2700489809 /* xmenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xmenu.h; sourceTree = "<group>"; };
+ D99B5BC30DAEEA2700489809 /* xshl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xshl.h; sourceTree = "<group>"; };
+ D99B5BC40DAEEA2700489809 /* xthread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xthread.h; sourceTree = "<group>"; };
+ D99B5BC50DAEEA2700489809 /* zoom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zoom.h; sourceTree = "<group>"; };
+ D99B5BC70DAEEA2700489809 /* subwindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = subwindow.c; path = ../../../engine/subwindow.c; sourceTree = SOURCE_ROOT; };
+ D99B5BC80DAEEA2700489809 /* palettef.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = palettef.c; path = ../../../engine/palettef.c; sourceTree = SOURCE_ROOT; };
+ D99B5BC90DAEEA2700489809 /* interlace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = interlace.c; path = ../../../engine/interlace.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCA0DAEEA2700489809 /* edge2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = edge2.c; path = ../../../engine/edge2.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCB0DAEEA2700489809 /* fractal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fractal.c; path = ../../../engine/fractal.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCC0DAEEA2700489809 /* rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rotate.c; path = ../../../engine/rotate.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCD0DAEEA2700489809 /* itersmall.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = itersmall.c; path = ../../../engine/itersmall.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCE0DAEEA2700489809 /* blur.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = blur.c; path = ../../../engine/blur.c; sourceTree = SOURCE_ROOT; };
+ D99B5BCF0DAEEA2700489809 /* anti.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = anti.c; path = ../../../engine/anti.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD00DAEEA2700489809 /* stereogram.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stereogram.c; path = ../../../engine/stereogram.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD10DAEEA2700489809 /* edge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = edge.c; path = ../../../engine/edge.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD20DAEEA2700489809 /* zoom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zoom.c; path = ../../../engine/zoom.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD30DAEEA2700489809 /* star.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = star.c; path = ../../../engine/star.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD40DAEEA2700489809 /* formulas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = formulas.c; path = ../../../engine/formulas.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD50DAEEA2700489809 /* emboss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = emboss.c; path = ../../../engine/emboss.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD60DAEEA2700489809 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = julia.c; path = ../../../engine/julia.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD70DAEEA2700489809 /* btrace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = btrace.c; path = ../../../engine/btrace.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD80DAEEA2700489809 /* i386.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = i386.c; path = ../../../engine/i386.c; sourceTree = SOURCE_ROOT; };
+ D99B5BD90DAEEA2700489809 /* dither.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dither.c; path = ../../../engine/dither.c; sourceTree = SOURCE_ROOT; };
+ D99B5BDA0DAEEA2700489809 /* 3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = 3d.c; path = ../../../engine/3d.c; sourceTree = SOURCE_ROOT; };
+ D99B5BDB0DAEEA2700489809 /* plane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = plane.c; path = ../../../engine/plane.c; sourceTree = SOURCE_ROOT; };
+ D99B5BDD0DAEEA2700489809 /* filter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = filter.c; path = ../../../filter/filter.c; sourceTree = SOURCE_ROOT; };
+ D99B5BDE0DAEEA2700489809 /* palette.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = palette.c; path = ../../../filter/palette.c; sourceTree = SOURCE_ROOT; };
+ D99B5BDF0DAEEA2700489809 /* random.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = random.c; path = ../../../filter/random.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE10DAEEA2700489809 /* font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = font.c; path = ../../../filter/font.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE20DAEEA2700489809 /* image.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = image.c; path = ../../../filter/image.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE40DAEEA2700489809 /* drivers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = drivers.c; path = ../../drivers.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE50DAEEA2700489809 /* dialog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dialog.c; path = ../../dialog.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE60DAEEA2700489809 /* uihelp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = uihelp.c; path = ../../uihelp.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE70DAEEA2700489809 /* uimenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = uimenu.c; path = ../../uimenu.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE80DAEEA2700489809 /* fparams.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fparams.c; path = ../../fparams.c; sourceTree = SOURCE_ROOT; };
+ D99B5BE90DAEEA2700489809 /* ui.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ui.c; path = ../../ui.c; sourceTree = SOURCE_ROOT; };
+ D99B5BEA0DAEEA2700489809 /* param.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = param.c; path = ../../param.c; sourceTree = SOURCE_ROOT; };
+ D99B5BEB0DAEEA2700489809 /* filesel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = filesel.c; path = ../../filesel.c; sourceTree = SOURCE_ROOT; };
+ D99B5BEC0DAEEA2700489809 /* pipecmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pipecmd.c; path = ../../pipecmd.c; sourceTree = SOURCE_ROOT; };
+ D99B5BEE0DAEEA2700489809 /* save.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = save.c; path = "../../../ui-hlp/save.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BEF0DAEEA2700489809 /* menu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = menu.c; path = "../../../ui-hlp/menu.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF00DAEEA2700489809 /* wstack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wstack.c; path = "../../../ui-hlp/wstack.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF10DAEEA2700489809 /* playtext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = playtext.c; path = "../../../ui-hlp/playtext.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF20DAEEA2700489809 /* render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = render.c; path = "../../../ui-hlp/render.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF30DAEEA2700489809 /* play.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = play.c; path = "../../../ui-hlp/play.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF40DAEEA2700489809 /* messg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = messg.c; path = "../../../ui-hlp/messg.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF50DAEEA2700489809 /* ui_helper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ui_helper.c; path = "../../../ui-hlp/ui_helper.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF60DAEEA2700489809 /* autopilot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = autopilot.c; path = "../../../ui-hlp/autopilot.c"; sourceTree = SOURCE_ROOT; };
+ D99B5BF80DAEEA2700489809 /* xmenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xmenu.c; path = ../../../util/xmenu.c; sourceTree = SOURCE_ROOT; };
+ D99B5BF90DAEEA2700489809 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = png.c; path = ../../../util/png.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFA0DAEEA2700489809 /* xstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xstring.c; path = ../../../util/xstring.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFB0DAEEA2700489809 /* xshl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xshl.c; path = ../../../util/xshl.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFC0DAEEA2700489809 /* xldio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xldio.c; path = ../../../util/xldio.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFD0DAEEA2700489809 /* help.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = help.c; path = ../../../util/help.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFE0DAEEA2700489809 /* xerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xerror.c; path = ../../../util/xerror.c; sourceTree = SOURCE_ROOT; };
+ D99B5BFF0DAEEA2700489809 /* thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread.c; path = ../../../util/thread.c; sourceTree = SOURCE_ROOT; };
+ D99B5C000DAEEA2700489809 /* timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = timers.c; path = ../../../util/timers.c; sourceTree = SOURCE_ROOT; };
+ D99B5C020DAEEA2700489809 /* xstdio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xstdio.c; path = ../../../util/xstdio.c; sourceTree = SOURCE_ROOT; };
+ D99B5C030DAEEA2700489809 /* catalog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = catalog.c; path = ../../../util/catalog.c; sourceTree = SOURCE_ROOT; };
+ D99B5C4F0DAEEA6900489809 /* XaoS.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = XaoS.icns; sourceTree = "<group>"; };
+ D99B5D700DAEEB1200489809 /* XaoSHelp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = XaoSHelp; path = ../../../../help/XaoSHelp; sourceTree = SOURCE_ROOT; };
+ D99B5E090DAEEB4C00489809 /* libintl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libintl.dylib; sourceTree = "<group>"; };
+ D99B5E0A0DAEEB4C00489809 /* libgsl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libgsl.dylib; sourceTree = "<group>"; };
+ D99B5E0B0DAEEB4C00489809 /* libpng.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libpng.dylib; sourceTree = "<group>"; };
+ D99B5E1C0DAEEBD400489809 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+ D99B5E680DAEF3A400489809 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = English; path = English.lproj/Credits.html; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D11072E0486CEB800E47090 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+ D99B5E1D0DAEEBD400489809 /* Carbon.framework in Frameworks */,
+ D99B5E0C0DAEEB4C00489809 /* libintl.dylib in Frameworks */,
+ D99B5E0D0DAEEB4C00489809 /* libgsl.dylib in Frameworks */,
+ D99B5E0E0DAEEB4C00489809 /* libpng.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 080E96DDFE201D6D7F000001 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5B760DAEE9E700489809 /* AppController.h */,
+ D99B5B770DAEE9E700489809 /* AppController.m */,
+ D99B5B780DAEE9E700489809 /* FractalView.h */,
+ D99B5B790DAEE9E700489809 /* FractalView.m */,
+ D99B5B7A0DAEE9E700489809 /* CustomDialog.h */,
+ D99B5B7B0DAEE9E700489809 /* CustomDialog.m */,
+ D99B5B7C0DAEE9E700489809 /* VideatorProxy.h */,
+ D99B5B7D0DAEE9E700489809 /* VideatorProxy.m */,
+ );
+ name = Classes;
+ sourceTree = "<group>";
+ };
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5E1C0DAEEBD400489809 /* Carbon.framework */,
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+ );
+ name = "Linked Frameworks";
+ sourceTree = "<group>";
+ };
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+ );
+ name = "Other Frameworks";
+ sourceTree = "<group>";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D1107320486CEB800E47090 /* XaoS.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* XaoS */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5B820DAEEA0800489809 /* Readme Cocoa */,
+ D99B5B830DAEEA0800489809 /* HowToBuild.txt */,
+ 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ D99B5B860DAEEA2700489809 /* Shared Sources */,
+ 29B97317FDCFA39411CA2CEA /* Resources */,
+ D99B5E080DAEEB2B00489809 /* Embedded Frameworks and Libraries */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = XaoS;
+ sourceTree = "<group>";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 32CA4F630368D1EE00C91783 /* XaoS_Prefix.pch */,
+ D99B5B710DAEE9D100489809 /* aconfig.h */,
+ D99B5B720DAEE9D100489809 /* version.h */,
+ D99B5B730DAEE9D100489809 /* ui_cocoa.m */,
+ D962B0AC101CA598003C66CE /* grlib_cocoa.m */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 29B97317FDCFA39411CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5E670DAEF3A400489809 /* Credits.html */,
+ 8D1107310486CEB800E47090 /* Info.plist */,
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+ 29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
+ D99B5C4F0DAEEA6900489809 /* XaoS.icns */,
+ D90A09690DB4465100B7AAFD /* XaoSDocument.icns */,
+ D90A09550DB42FD900B7AAFD /* performanceCursor.tiff */,
+ D99B5D700DAEEB1200489809 /* XaoSHelp */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ D99B5B860DAEEA2700489809 /* Shared Sources */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BF70DAEEA2700489809 /* util */,
+ D99B5BED0DAEEA2700489809 /* ui-hlp */,
+ D99B5BE30DAEEA2700489809 /* ui */,
+ D99B5BDC0DAEEA2700489809 /* filter */,
+ D99B5BC60DAEEA2700489809 /* engine */,
+ D99B5B870DAEEA2700489809 /* sffe */,
+ D99B5B8D0DAEEA2700489809 /* include */,
+ );
+ name = "Shared Sources";
+ sourceTree = "<group>";
+ };
+ D99B5B870DAEEA2700489809 /* sffe */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5B880DAEEA2700489809 /* asm */,
+ D99B5B8A0DAEEA2700489809 /* sffe.c */,
+ D99B5B8B0DAEEA2700489809 /* sffe_cmplx_asm.c */,
+ D99B5B8C0DAEEA2700489809 /* sffe_cmplx_gsl.c */,
+ );
+ name = sffe;
+ path = ../../../sffe;
+ sourceTree = SOURCE_ROOT;
+ };
+ D99B5B880DAEEA2700489809 /* asm */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5B890DAEEA2700489809 /* cmplx.asm */,
+ );
+ path = asm;
+ sourceTree = "<group>";
+ };
+ D99B5B8D0DAEEA2700489809 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ D95DA721101FE23800826B31 /* config.h */,
+ D99B5B8F0DAEEA2700489809 /* archaccel.h */,
+ D99B5B900DAEEA2700489809 /* btrace.h */,
+ D99B5B910DAEEA2700489809 /* c256.h */,
+ D99B5B920DAEEA2700489809 /* catalog.h */,
+ D99B5B930DAEEA2700489809 /* complex.h */,
+ D99B5BA10DAEEA2700489809 /* cursor.h */,
+ D99B5BA20DAEEA2700489809 /* fconfig.h */,
+ D99B5BA30DAEEA2700489809 /* filter.h */,
+ D99B5BA40DAEEA2700489809 /* formulas.h */,
+ D99B5BA50DAEEA2700489809 /* fractal.h */,
+ D99B5BA60DAEEA2700489809 /* gccaccel.h */,
+ D99B5BA70DAEEA2700489809 /* gccbuild.h */,
+ D99B5BA80DAEEA2700489809 /* generic.h */,
+ D99B5BA90DAEEA2700489809 /* grlib.h */,
+ D99B5BAA0DAEEA2700489809 /* hicolor.h */,
+ D99B5BAB0DAEEA2700489809 /* i386 */,
+ D99B5BB30DAEEA2700489809 /* misc-f.h */,
+ D99B5BB40DAEEA2700489809 /* param.h */,
+ D99B5BB50DAEEA2700489809 /* pixel_t.h */,
+ D99B5BB60DAEEA2700489809 /* plane.h */,
+ D99B5BB80DAEEA2700489809 /* timers.h */,
+ D99B5BB90DAEEA2700489809 /* true24.h */,
+ D99B5BBA0DAEEA2700489809 /* truecolor.h */,
+ D99B5BBB0DAEEA2700489809 /* ui.h */,
+ D99B5BBC0DAEEA2700489809 /* ui_helper.h */,
+ D99B5BBE0DAEEA2700489809 /* version.h.in */,
+ D99B5BBF0DAEEA2700489809 /* xerror.h */,
+ D99B5BC00DAEEA2700489809 /* xio.h */,
+ D99B5BC10DAEEA2700489809 /* xldio.h */,
+ D99B5BC20DAEEA2700489809 /* xmenu.h */,
+ D99B5BC30DAEEA2700489809 /* xshl.h */,
+ D99B5BC40DAEEA2700489809 /* xthread.h */,
+ D99B5BC50DAEEA2700489809 /* zoom.h */,
+ );
+ name = include;
+ path = ../../../include;
+ sourceTree = SOURCE_ROOT;
+ };
+ D99B5BAB0DAEEA2700489809 /* i386 */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BAC0DAEEA2700489809 /* __math.h */,
+ D99B5BAD0DAEEA2700489809 /* ctrl87.h */,
+ D99B5BAE0DAEEA2700489809 /* sstring.h */,
+ );
+ path = i386;
+ sourceTree = "<group>";
+ };
+ D99B5BC60DAEEA2700489809 /* engine */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BC70DAEEA2700489809 /* subwindow.c */,
+ D99B5BC80DAEEA2700489809 /* palettef.c */,
+ D99B5BC90DAEEA2700489809 /* interlace.c */,
+ D99B5BCA0DAEEA2700489809 /* edge2.c */,
+ D99B5BCB0DAEEA2700489809 /* fractal.c */,
+ D99B5BCC0DAEEA2700489809 /* rotate.c */,
+ D99B5BCD0DAEEA2700489809 /* itersmall.c */,
+ D99B5BCE0DAEEA2700489809 /* blur.c */,
+ D99B5BCF0DAEEA2700489809 /* anti.c */,
+ D99B5BD00DAEEA2700489809 /* stereogram.c */,
+ D99B5BD10DAEEA2700489809 /* edge.c */,
+ D99B5BD20DAEEA2700489809 /* zoom.c */,
+ D99B5BD30DAEEA2700489809 /* star.c */,
+ D99B5BD40DAEEA2700489809 /* formulas.c */,
+ D99B5BD50DAEEA2700489809 /* emboss.c */,
+ D99B5BD60DAEEA2700489809 /* julia.c */,
+ D99B5BD70DAEEA2700489809 /* btrace.c */,
+ D99B5BD80DAEEA2700489809 /* i386.c */,
+ D99B5BD90DAEEA2700489809 /* dither.c */,
+ D99B5BDA0DAEEA2700489809 /* 3d.c */,
+ D99B5BDB0DAEEA2700489809 /* plane.c */,
+ );
+ name = engine;
+ sourceTree = "<group>";
+ };
+ D99B5BDC0DAEEA2700489809 /* filter */ = {
+ isa = PBXGroup;
+ children = (
+ D962B20B101E9149003C66CE /* grlib.c */,
+ D99B5BDD0DAEEA2700489809 /* filter.c */,
+ D99B5BDE0DAEEA2700489809 /* palette.c */,
+ D99B5BDF0DAEEA2700489809 /* random.c */,
+ D99B5BE10DAEEA2700489809 /* font.c */,
+ D99B5BE20DAEEA2700489809 /* image.c */,
+ );
+ name = filter;
+ sourceTree = "<group>";
+ };
+ D99B5BE30DAEEA2700489809 /* ui */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BE40DAEEA2700489809 /* drivers.c */,
+ D99B5BE50DAEEA2700489809 /* dialog.c */,
+ D99B5BE60DAEEA2700489809 /* uihelp.c */,
+ D99B5BE70DAEEA2700489809 /* uimenu.c */,
+ D99B5BE80DAEEA2700489809 /* fparams.c */,
+ D99B5BE90DAEEA2700489809 /* ui.c */,
+ D99B5BEA0DAEEA2700489809 /* param.c */,
+ D99B5BEB0DAEEA2700489809 /* filesel.c */,
+ D99B5BEC0DAEEA2700489809 /* pipecmd.c */,
+ );
+ name = ui;
+ sourceTree = "<group>";
+ };
+ D99B5BED0DAEEA2700489809 /* ui-hlp */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BEE0DAEEA2700489809 /* save.c */,
+ D99B5BEF0DAEEA2700489809 /* menu.c */,
+ D99B5BF00DAEEA2700489809 /* wstack.c */,
+ D99B5BF10DAEEA2700489809 /* playtext.c */,
+ D99B5BF20DAEEA2700489809 /* render.c */,
+ D99B5BF30DAEEA2700489809 /* play.c */,
+ D99B5BF40DAEEA2700489809 /* messg.c */,
+ D99B5BF50DAEEA2700489809 /* ui_helper.c */,
+ D99B5BF60DAEEA2700489809 /* autopilot.c */,
+ );
+ name = "ui-hlp";
+ sourceTree = "<group>";
+ };
+ D99B5BF70DAEEA2700489809 /* util */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5BF80DAEEA2700489809 /* xmenu.c */,
+ D99B5BF90DAEEA2700489809 /* png.c */,
+ D99B5BFA0DAEEA2700489809 /* xstring.c */,
+ D99B5BFB0DAEEA2700489809 /* xshl.c */,
+ D99B5BFC0DAEEA2700489809 /* xldio.c */,
+ D99B5BFD0DAEEA2700489809 /* help.c */,
+ D99B5BFE0DAEEA2700489809 /* xerror.c */,
+ D99B5BFF0DAEEA2700489809 /* thread.c */,
+ D99B5C000DAEEA2700489809 /* timers.c */,
+ D99B5C020DAEEA2700489809 /* xstdio.c */,
+ D99B5C030DAEEA2700489809 /* catalog.c */,
+ );
+ name = util;
+ sourceTree = "<group>";
+ };
+ D99B5E080DAEEB2B00489809 /* Embedded Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ D99B5E090DAEEB4C00489809 /* libintl.dylib */,
+ D99B5E0A0DAEEB4C00489809 /* libgsl.dylib */,
+ D99B5E0B0DAEEB4C00489809 /* libpng.dylib */,
+ );
+ name = "Embedded Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D1107260486CEB800E47090 /* XaoS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "XaoS" */;
+ buildPhases = (
+ D99B5E110DAEEB6800489809 /* Pre-Compile Script */,
+ 8D1107290486CEB800E47090 /* Resources */,
+ 8D11072C0486CEB800E47090 /* Sources */,
+ 8D11072E0486CEB800E47090 /* Frameworks */,
+ D99B5E1F0DAEEC0D00489809 /* Copy Embedded Frameworks and Libraries */,
+ D99B5E240DAEEC2200489809 /* Post-Compile Script */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = XaoS;
+ productInstallPath = "$(HOME)/Applications";
+ productName = XaoS;
+ productReference = 8D1107320486CEB800E47090 /* XaoS.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "XaoS" */;
+ compatibilityVersion = "Xcode 3.0";
+ hasScannedForEncodings = 1;
+ mainGroup = 29B97314FDCFA39411CA2CEA /* XaoS */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D1107260486CEB800E47090 /* XaoS */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D1107290486CEB800E47090 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
+ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
+ D99B5C500DAEEA6900489809 /* XaoS.icns in Resources */,
+ D99B5E070DAEEB1200489809 /* XaoSHelp in Resources */,
+ D99B5E690DAEF3A400489809 /* Credits.html in Resources */,
+ D90A09560DB42FD900B7AAFD /* performanceCursor.tiff in Resources */,
+ D90A096A0DB4465100B7AAFD /* XaoSDocument.icns in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ D99B5E110DAEEB6800489809 /* Pre-Compile Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Pre-Compile Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# create config.h from config.autoconf (normally done by makefile)\nif [ $PROJECT_DIR/../../../include/config/config.autoconf -nt $PROJECT_DIR/../../../include/config.h ]; then\n\tln -sf $PROJECT_DIR/../../../include/config/config.autoconf $PROJECT_DIR/../../../include/config.h\nfi\n\n# change libraries to use executable-relative paths\nif [ $PROJECT_DIR/thirdparty/lib/libpng.dylib -nt $PROJECT_DIR/libpng.dylib ]; then\n\tcp $PROJECT_DIR/thirdparty/lib/libpng.dylib $PROJECT_DIR/libpng.dylib\n\tinstall_name_tool -id @executable_path/../Frameworks/libpng.dylib $PROJECT_DIR/libpng.dylib\nfi\n\nif [ $PROJECT_DIR/thirdparty/lib/libgsl.dylib -nt $PROJECT_DIR/libgsl.dylib ]; then\n\tcp $PROJECT_DIR/thirdparty/lib/libgsl.dylib $PROJECT_DIR/libgsl.dylib\n\tinstall_name_tool -id @executable_path/../Frameworks/libgsl.dylib $PROJECT_DIR/libgsl.dylib\nfi\n\nif [ $PROJECT_DIR/thirdparty/lib/libintl.dylib -nt $PROJECT_DIR/libintl.dylib ]; then\n\tcp $PROJECT_DIR/thirdparty/lib/libintl.dylib $PROJECT_DIR/libintl.dylib\n\tinstall_name_tool -id @executable_path/../Frameworks/libintl.dylib $PROJECT_DIR/libintl.dylib\nfi\n\n# build apple help\nif [ $PROJECT_DIR/../../../../help/xaos.hlp -nt $PROJECT_DIR/../../../../help/XaoSHelp ]; then\n\tcd $PROJECT_DIR/../../../../help\n\t./applehelpconv\n\tcd $PROJECT_DIR\nfi\n\n";
+ };
+ D99B5E240DAEEC2200489809 /* Post-Compile Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Post-Compile Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Make resource subdirectories\nmkdir $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/tutorial\nmkdir $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/examples\nmkdir $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/catalogs\nmkdir $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/help\nmkdir $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/locale\n\n# Copy resources from project source directories\ncp $PROJECT_DIR/../../../../tutorial/*.x[ah]f $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/tutorial\ncp $PROJECT_DIR/../../../../examples/*/*.x[ap]f $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/examples\ncp $PROJECT_DIR/../../../../catalogs/*.cat $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/catalogs\ncp $PROJECT_DIR/../../../../help/xaos.hlp $BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/help\n\n# Build message catalogs and copy to app bundle\ncd $PROJECT_DIR/../../../i18n\nlocaledir=$BUILT_PRODUCTS_DIR/XaoS.app/Contents/Resources/locale\npofiles=`ls *.po`\nmsgfmt=$PROJECT_DIR/thirdparty/bin/msgfmt\nfor pofile in $pofiles; do\n\tlang=`basename $pofile .po`\n\tmofile=${lang}.mo\n\tif [ $pofile -nt $mofile ]; then\n\t\t$msgfmt -o $mofile -c -v --statistics $pofile\n\tfi\n\tmkdir -p $localedir/$lang/LC_MESSAGES\n\tcp $mofile $localedir/$lang/LC_MESSAGES/xaos.mo\ndone\ncd $PROJECT_DIR";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D11072C0486CEB800E47090 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D99B5B740DAEE9D100489809 /* ui_cocoa.m in Sources */,
+ D99B5B7E0DAEE9E700489809 /* AppController.m in Sources */,
+ D99B5B7F0DAEE9E700489809 /* FractalView.m in Sources */,
+ D99B5B800DAEE9E700489809 /* CustomDialog.m in Sources */,
+ D99B5B810DAEE9E700489809 /* VideatorProxy.m in Sources */,
+ D99B5C040DAEEA2700489809 /* cmplx.asm in Sources */,
+ D99B5C050DAEEA2700489809 /* sffe.c in Sources */,
+ D99B5C060DAEEA2700489809 /* sffe_cmplx_asm.c in Sources */,
+ D99B5C070DAEEA2700489809 /* sffe_cmplx_gsl.c in Sources */,
+ D99B5C160DAEEA2700489809 /* subwindow.c in Sources */,
+ D99B5C170DAEEA2700489809 /* palettef.c in Sources */,
+ D99B5C180DAEEA2700489809 /* interlace.c in Sources */,
+ D99B5C190DAEEA2700489809 /* edge2.c in Sources */,
+ D99B5C1A0DAEEA2700489809 /* fractal.c in Sources */,
+ D99B5C1B0DAEEA2700489809 /* rotate.c in Sources */,
+ D99B5C1C0DAEEA2700489809 /* itersmall.c in Sources */,
+ D99B5C1D0DAEEA2700489809 /* blur.c in Sources */,
+ D99B5C1E0DAEEA2700489809 /* anti.c in Sources */,
+ D99B5C1F0DAEEA2700489809 /* stereogram.c in Sources */,
+ D99B5C200DAEEA2700489809 /* edge.c in Sources */,
+ D99B5C210DAEEA2700489809 /* zoom.c in Sources */,
+ D99B5C220DAEEA2700489809 /* star.c in Sources */,
+ D99B5C230DAEEA2700489809 /* formulas.c in Sources */,
+ D99B5C240DAEEA2700489809 /* emboss.c in Sources */,
+ D99B5C250DAEEA2700489809 /* julia.c in Sources */,
+ D99B5C260DAEEA2700489809 /* btrace.c in Sources */,
+ D99B5C270DAEEA2700489809 /* i386.c in Sources */,
+ D99B5C280DAEEA2700489809 /* dither.c in Sources */,
+ D99B5C290DAEEA2700489809 /* 3d.c in Sources */,
+ D99B5C2A0DAEEA2700489809 /* plane.c in Sources */,
+ D99B5C2B0DAEEA2700489809 /* filter.c in Sources */,
+ D99B5C2C0DAEEA2700489809 /* palette.c in Sources */,
+ D99B5C2D0DAEEA2700489809 /* random.c in Sources */,
+ D99B5C2F0DAEEA2700489809 /* font.c in Sources */,
+ D99B5C300DAEEA2700489809 /* image.c in Sources */,
+ D99B5C310DAEEA2700489809 /* drivers.c in Sources */,
+ D99B5C320DAEEA2700489809 /* dialog.c in Sources */,
+ D99B5C330DAEEA2700489809 /* uihelp.c in Sources */,
+ D99B5C340DAEEA2700489809 /* uimenu.c in Sources */,
+ D99B5C350DAEEA2700489809 /* fparams.c in Sources */,
+ D99B5C360DAEEA2700489809 /* ui.c in Sources */,
+ D99B5C370DAEEA2700489809 /* param.c in Sources */,
+ D99B5C380DAEEA2700489809 /* filesel.c in Sources */,
+ D99B5C390DAEEA2700489809 /* pipecmd.c in Sources */,
+ D99B5C3A0DAEEA2700489809 /* save.c in Sources */,
+ D99B5C3B0DAEEA2700489809 /* menu.c in Sources */,
+ D99B5C3C0DAEEA2700489809 /* wstack.c in Sources */,
+ D99B5C3D0DAEEA2700489809 /* playtext.c in Sources */,
+ D99B5C3E0DAEEA2700489809 /* render.c in Sources */,
+ D99B5C3F0DAEEA2700489809 /* play.c in Sources */,
+ D99B5C400DAEEA2700489809 /* messg.c in Sources */,
+ D99B5C410DAEEA2700489809 /* ui_helper.c in Sources */,
+ D99B5C420DAEEA2700489809 /* autopilot.c in Sources */,
+ D99B5C430DAEEA2700489809 /* xmenu.c in Sources */,
+ D99B5C440DAEEA2700489809 /* png.c in Sources */,
+ D99B5C450DAEEA2700489809 /* xstring.c in Sources */,
+ D99B5C460DAEEA2700489809 /* xshl.c in Sources */,
+ D99B5C470DAEEA2700489809 /* xldio.c in Sources */,
+ D99B5C480DAEEA2700489809 /* help.c in Sources */,
+ D99B5C490DAEEA2700489809 /* xerror.c in Sources */,
+ D99B5C4A0DAEEA2700489809 /* thread.c in Sources */,
+ D99B5C4B0DAEEA2700489809 /* timers.c in Sources */,
+ D99B5C4D0DAEEA2700489809 /* xstdio.c in Sources */,
+ D99B5C4E0DAEEA2700489809 /* catalog.c in Sources */,
+ D962B0AD101CA598003C66CE /* grlib_cocoa.m in Sources */,
+ D962B20C101E9149003C66CE /* grlib.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C165DFE840E0CC02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+ 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 29B97319FDCFA39411CA2CEA /* English */,
+ );
+ name = MainMenu.nib;
+ sourceTree = "<group>";
+ };
+ D99B5E670DAEF3A400489809 /* Credits.html */ = {
+ isa = PBXVariantGroup;
+ children = (
+ D99B5E680DAEF3A400489809 /* English */,
+ );
+ name = Credits.html;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ C01FCF4B08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = XaoS_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)\"",
+ "\"$(SRCROOT)/thirdparty/lib\"",
+ );
+ PRODUCT_NAME = XaoS;
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ C01FCF4C08A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = XaoS_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)\"",
+ "\"$(SRCROOT)/thirdparty/lib\"",
+ );
+ PRODUCT_NAME = XaoS;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = ./thirdparty/include;
+ OTHER_LDFLAGS = "-liconv";
+ PREBINDING = NO;
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+ USER_HEADER_SEARCH_PATHS = ../../../include;
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ GCC_FAST_MATH = YES;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_UNROLL_LOOPS = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = ./thirdparty/include;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-liconv";
+ PREBINDING = NO;
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk";
+ USER_HEADER_SEARCH_PATHS = ../../../include;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "XaoS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4B08A954540054247B /* Debug */,
+ C01FCF4C08A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "XaoS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/src/ui/ui-drv/cocoa/XaoSDocument.icns b/src/ui/ui-drv/cocoa/XaoSDocument.icns
new file mode 100644
index 0000000..a827ad7
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/XaoSDocument.icns
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/XaoS_Prefix.pch b/src/ui/ui-drv/cocoa/XaoS_Prefix.pch
new file mode 100644
index 0000000..b52a674
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/XaoS_Prefix.pch
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'XaoS' target in the 'XaoS' project
+//
+
+#ifdef __OBJC__
+ #import <Cocoa/Cocoa.h>
+#endif
diff --git a/src/ui/ui-drv/cocoa/aconfig.h b/src/ui/ui-drv/cocoa/aconfig.h
new file mode 100644
index 0000000..d6127b6
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/aconfig.h
@@ -0,0 +1,123 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef ACONFIG_H
+#define ACONFIG_H
+/* #undef HAVE_PTHREAD_SIGHANDLER */
+
+
+//#define DEBUG
+#define VIDEATOR_SUPPORT
+
+/* Triggers Mac OS X-specific behavior in common sources */
+#define MACOSX
+
+/* Cocoa driver needs to do some pre-initialization in its own main function */
+#define MAIN_FUNCTION XaoS_main
+
+/* XaoS xio library uses \01 to indicate paths relative to the executable */
+#define DATAPATH "\01/../Resources"
+#define USE_LOCALEPATH 1
+
+/* Using alloca causes stack overflows on large images */
+/* #undef C_ALLOCA */
+/* #define HAVE_ALLOCA 1 */
+/* #define HAVE_ALLOCA_H 1 */
+
+/* #undef const */
+#define USE_PTHREAD 1
+
+#define HAVE_FABSL 1
+/* #undef HAVE__FABSL */
+/* #undef HAVE___FABSL */
+#define HAVE_FTIME 1
+#define USE_PNG 1
+#define HAVE_FINITE 1
+#define HAVE_SELECT 1
+
+/* Long double is too slow on PowerPC; only enable for i386 build */
+#ifdef __i386__
+#define HAVE_LONG_DOUBLE 1
+#endif
+
+/* #undef HAVE_REDRAWWIN */
+/* #undef HAVE_WREDRAWLN */
+#define USE_NCURSES 1
+/* #undef inline */
+/* #undef _POSIX_SOURCE */
+#define STDC_HEADERS 1
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+#define HAVE_GETTIMEOFDAY 1
+/* #undef HAVE_USLEEP */
+/* #undef HAVE_TERMATTRS */
+/* #undef HAVE_MOUSEMASK */
+#define HAVE_SETITIMER 1
+/* Define if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+/* #define MITSHM 1 */
+/* #undef CURSES_DRIVER */
+/* #undef BEOS_DRIVER */
+/* #undef AA_DRIVER */
+/* #undef GGI_DRIVER */
+/* #undef X11_DRIVER */
+/* #undef DGA_DRIVER */
+/* #undef SVGA_DRIVER */
+/* #undef WIN32_DRIVER */
+/* #undef DDRAW_DRIVER */
+/* #undef OSX_DRIVER */
+#define COCOA_DRIVER 1
+#define SIZEOF_SHORT 2
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+#define HAVE_GETTEXT 1
+#define NO_MALLOC_H 1
+
+/* Enable SFFE; use ASM for i386 and GSL for PowerPC */
+#define SFFE_USING 1
+#ifdef __i386__
+#define SFFE_CMPLX_ASM 1
+#else
+#define SFFE_CMPLX_GSL 1
+#endif
+
+/* Define colors based on hardware endianness */
+#if __BIG_ENDIAN__
+#define RMASK 0xff000000
+#define GMASK 0x00ff0000
+#define BMASK 0x0000ff00
+#else
+#define RMASK 0x000000ff
+#define GMASK 0x0000ff00
+#define BMASK 0x00ff0000
+#endif
+
+/* Use platform-provided text rendering instead of built-in */
+#define PLATFORM_TEXT_RENDERING 1
+
+
+#endif
diff --git a/src/ui/ui-drv/cocoa/grlib_cocoa.m b/src/ui/ui-drv/cocoa/grlib_cocoa.m
new file mode 100644
index 0000000..3fedb0c
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/grlib_cocoa.m
@@ -0,0 +1,142 @@
+#include <config.h>
+#ifdef PLATFORM_TEXT_RENDERING
+
+#import <Cocoa/Cocoa.h>
+
+#include <fconfig.h>
+#include <filter.h>
+#include <fractal.h>
+#include <ui_helper.h>
+#include <grlib.h>
+
+NSMutableDictionary *textAttributes(int fgcolor, int bgcolor) {
+
+ float red, green, blue;
+
+ NSMutableDictionary *attrsDictionary = [NSMutableDictionary
+ dictionaryWithCapacity:5];
+
+ [attrsDictionary setValue:[NSColor whiteColor]
+ forKey:NSForegroundColorAttributeName];
+
+ [attrsDictionary setValue:[NSFont
+ boldSystemFontOfSize:[NSFont systemFontSize]]
+ forKey:NSFontAttributeName];
+
+ //NSLog(@"%x", fgcolor);
+ red = (fgcolor & RMASK) / 255.0;
+ green = (fgcolor & GMASK) / 255.0;
+ blue = (fgcolor & BMASK) / 255.0;
+ [attrsDictionary setValue:[NSColor colorWithDeviceRed:red
+ green:green
+ blue:blue
+ alpha:1.0]
+ forKey:NSForegroundColorAttributeName];
+
+ red = (bgcolor & RMASK) / 255.0;
+ green = (bgcolor & GMASK) / 255.0;
+ blue = (bgcolor & BMASK) / 255.0;
+ NSShadow *textShadow = [[NSShadow alloc] init];
+ [textShadow setShadowColor:[NSColor colorWithDeviceRed:red
+ green:green
+ blue:blue
+ alpha:1.0]];
+ [textShadow setShadowOffset:NSMakeSize(2, -2)];
+ [textShadow setShadowBlurRadius:1];
+
+ [attrsDictionary setValue:textShadow forKey:NSShadowAttributeName];
+ [textShadow autorelease];
+
+ return attrsDictionary;
+}
+
+
+int
+xprint(struct image *image, CONST struct xfont *current, int x, int y,
+ CONST char *text, int fgcolor, int bgcolor, int mode)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc]
+ initWithBitmapDataPlanes:image->currlines
+ pixelsWide:image->width
+ pixelsHigh:image->height
+ bitsPerSample:8
+ samplesPerPixel:3
+ hasAlpha:NO
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bytesPerRow:0
+ bitsPerPixel:32];
+
+ [NSGraphicsContext saveGraphicsState];
+ NSGraphicsContext *context = [NSGraphicsContext
+ graphicsContextWithBitmapImageRep:imageRep];
+ [NSGraphicsContext setCurrentContext:context];
+
+ NSString *messageText = [[[NSString stringWithUTF8String:text]
+ componentsSeparatedByString:@"\n"]
+ objectAtIndex:0];
+ //NSLog(messageText);
+
+ NSMutableDictionary *attrsDictionary = textAttributes(fgcolor, bgcolor);
+
+ NSSize textSize = [messageText sizeWithAttributes:attrsDictionary];
+ [messageText drawAtPoint:NSMakePoint(x, image->height - y - textSize.height)
+ withAttributes:attrsDictionary];
+
+ [NSGraphicsContext restoreGraphicsState];
+
+ /*
+ * The calling functions expect the return value to be the number of
+ * bytes in the string, not the number of characters (this is not always
+ * equal for UTF-8 strings). Therefore, we don't use [messageText length].
+ */
+ int bytesUsed = [messageText
+ lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+
+ [imageRep release];
+ [pool release];
+
+ return bytesUsed;
+}
+
+int xtextwidth(CONST struct xfont *font, CONST char *text)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSString *messageText = [[[NSString stringWithUTF8String:text]
+ componentsSeparatedByString:@"\n"]
+ objectAtIndex:0];
+
+ NSMutableDictionary *attrsDictionary = textAttributes(0, 0);
+
+ NSSize textSize = [messageText sizeWithAttributes:attrsDictionary];
+
+ [pool release];
+ return ceil(textSize.width) + 2;
+}
+
+int xtextheight(CONST struct xfont *font) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSString *messageText = @"Test String";
+
+ NSMutableDictionary *attrsDictionary = textAttributes(0, 0);
+ NSSize textSize = [messageText sizeWithAttributes:attrsDictionary];
+ [pool release];
+ return ceil(textSize.height) + 2;
+}
+
+int xtextcharw(CONST struct xfont *font, CONST char c)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+ NSString *messageText = [NSString stringWithFormat:@"%c", c];
+
+ NSMutableDictionary *attrsDictionary = textAttributes(0, 0);
+ NSSize textSize = [messageText sizeWithAttributes:attrsDictionary];
+ [pool release];
+ return ceil(textSize.width) + 2;
+}
+#endif \ No newline at end of file
diff --git a/src/ui/ui-drv/cocoa/performanceCursor.tiff b/src/ui/ui-drv/cocoa/performanceCursor.tiff
new file mode 100644
index 0000000..fe7faf4
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/performanceCursor.tiff
Binary files differ
diff --git a/src/ui/ui-drv/cocoa/ui_cocoa.m b/src/ui/ui-drv/cocoa/ui_cocoa.m
new file mode 100644
index 0000000..0e107dc
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/ui_cocoa.m
@@ -0,0 +1,267 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * Cocoa Driver by J.B. Langston III (jb-langston@austin.rr.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#import "AppController.h"
+
+#include "ui.h"
+
+struct ui_driver cocoa_driver, cocoa_fullscreen_driver;
+
+#ifdef USE_LOCALEPATH
+char *localepath;
+#endif
+
+static void
+cocoa_printText(int x, int y, CONST char *text)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] printText:text atX:x y:y];
+ [pool release];
+}
+
+static void
+cocoa_refreshDisplay()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] display];
+ [pool release];
+}
+
+static void
+cocoa_flipBuffers ()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] flipBuffers];
+ [pool release];
+}
+
+static void
+cocoa_freeBuffers (char *b1, char *b2)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] freeBuffers];
+ [pool release];
+}
+
+static int
+cocoa_allocBuffers (char **b1, char **b2)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ int rowLength = [[controller view] allocBuffer1:b1 buffer2:b2];
+ [pool release];
+ return rowLength;
+}
+
+static void
+cocoa_getImageSize (int *w, int *h)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] getWidth:w height:h];
+ [pool release];
+}
+
+static void
+cocoa_processEvents (int wait, int *mx, int *my, int *mb, int *k)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ //NSDate *eventDate = wait ? [NSDate distantFuture] : [NSDate distantPast];
+ NSEvent *event = [NSApp nextEventMatchingMask: NSAnyEventMask
+ untilDate: nil //eventDate
+ inMode: NSDefaultRunLoopMode
+ dequeue: YES];
+ if (event != nil) {
+ [NSApp sendEvent: event];
+ }
+ [[controller view] getMouseX:mx mouseY:my mouseButton:mb keys:k];
+ [pool release];
+}
+
+
+static int
+cocoa_initDriver ()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ int status = [controller initDriver:&cocoa_driver fullscreen:NO];
+ [pool release];
+ return status;
+}
+
+static int
+cocoa_initFullScreenDriver ()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ int status = [controller initDriver:&cocoa_fullscreen_driver fullscreen:YES];
+ [pool release];
+ return status;
+}
+
+static void
+cocoa_uninitDriver ()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [controller uninitDriver];
+ [pool release];
+}
+
+static void
+cocoa_getMouse (int *x, int *y, int *b)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] getMouseX:x mouseY:y mouseButton:b];
+ [pool release];
+}
+
+
+static void
+cocoa_setCursorType (int type)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [[controller view] setCursorType:type];
+ [pool release];
+}
+
+static void
+cocoa_buildMenu (struct uih_context *uih, CONST char *name)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [controller buildMenuWithContext:uih name:name];
+ [pool release];
+}
+
+static void
+cocoa_showPopUpMenu (struct uih_context *c, CONST char *name)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [controller showPopUpMenuWithContext:c name:name];
+ [pool release];
+}
+
+
+static void
+cocoa_showDialog (struct uih_context *c, CONST char *name)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [controller showDialogWithContext:c name:name];
+ [pool release];
+}
+
+static void
+cocoa_showHelp (struct uih_context *c, CONST char *name)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [controller showHelpWithContext:c name:name];
+ [pool release];
+}
+
+int
+main(int argc, char* argv[])
+{
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+ [NSApplication sharedApplication];
+ [NSBundle loadNibNamed:@"MainMenu" owner:NSApp];
+ controller = [[AppController alloc] init];
+ [pool release];
+ return MAIN_FUNCTION(argc, argv);
+}
+
+struct gui_driver cocoa_gui_driver = {
+/* setrootmenu */ cocoa_buildMenu,
+/* enabledisable */ NULL,
+/* menu */ cocoa_showPopUpMenu,
+/* dialog */ cocoa_showDialog,
+/* help */ cocoa_showHelp
+};
+
+
+static struct params cocoa_params[] = {
+{NULL, 0, NULL, NULL}
+};
+
+struct ui_driver cocoa_driver = {
+/* name */ "Mac OS X Windowed Driver",
+/* init */ cocoa_initDriver,
+/* getsize */ cocoa_getImageSize,
+/* processevents */ cocoa_processEvents,
+/* getmouse */ cocoa_getMouse,
+/* uninit */ cocoa_uninitDriver,
+/* set_color */ NULL,
+/* set_range */ NULL,
+/* print */ cocoa_printText,
+/* display */ cocoa_refreshDisplay,
+/* alloc_buffers */ cocoa_allocBuffers,
+/* free_buffers */ cocoa_freeBuffers,
+/* filp_buffers */ cocoa_flipBuffers,
+/* mousetype */ cocoa_setCursorType,
+/* flush */ NULL,
+/* textwidth */ 12,
+/* textheight */ 12,
+/* params */ cocoa_params,
+/* flags */ PIXELSIZE,
+/* width */ 0.0,
+/* height */ 0.0,
+/* maxwidth */ 0,
+/* maxheight */ 0,
+/* imagetype */ UI_TRUECOLOR,
+/* palettestart */ 0,
+/* paletteend */ 256,
+/* maxentries */ 255,
+/* rmask */ RMASK,
+/* gmask */ GMASK,
+/* bmask */ BMASK,
+/* gui_driver */ &cocoa_gui_driver
+};
+
+struct ui_driver cocoa_fullscreen_driver = {
+/* name */ "Mac OS X Full Screen Driver",
+/* init */ cocoa_initFullScreenDriver,
+/* getsize */ cocoa_getImageSize,
+/* processevents */ cocoa_processEvents,
+/* getmouse */ cocoa_getMouse,
+/* uninit */ cocoa_uninitDriver,
+/* set_color */ NULL,
+/* set_range */ NULL,
+/* print */ cocoa_printText,
+/* display */ cocoa_refreshDisplay,
+/* alloc_buffers */ cocoa_allocBuffers,
+/* free_buffers */ cocoa_freeBuffers,
+/* filp_buffers */ cocoa_flipBuffers,
+/* mousetype */ cocoa_setCursorType,
+/* flush */ NULL,
+/* textwidth */ 12,
+/* textheight */ 12,
+/* params */ cocoa_params,
+/* flags */ PIXELSIZE | FULLSCREEN,
+/* width */ 0.0,
+/* height */ 0.0,
+/* maxwidth */ 0,
+/* maxheight */ 0,
+/* imagetype */ UI_TRUECOLOR,
+/* palettestart */ 0,
+/* paletteend */ 256,
+/* maxentries */ 255,
+/* rmask */ RMASK,
+/* gmask */ GMASK,
+/* bmask */ BMASK,
+/* gui_driver */ &cocoa_gui_driver
+};
+/* DONT FORGET TO ADD DOCUMENTATION ABOUT YOUR DRIVER INTO xaos.hlp FILE!*/
diff --git a/src/ui/ui-drv/cocoa/version.h b/src/ui/ui-drv/cocoa/version.h
new file mode 100644
index 0000000..719d117
--- /dev/null
+++ b/src/ui/ui-drv/cocoa/version.h
@@ -0,0 +1,22 @@
+/*
+ * XaoS, a fast portable realtime fractal zoomer
+ * Copyright (C) 1996,1997 by
+ *
+ * Jan Hubicka (hubicka@paru.cas.cz)
+ * Thomas Marsh (tmarsh@austin.ibm.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#define XaoS_VERSION "3.5"