aboutsummaryrefslogtreecommitdiffstats
path: root/Frameworks
diff options
context:
space:
mode:
Diffstat (limited to 'Frameworks')
l---------Frameworks/Growl.framework/Growl1
l---------Frameworks/Growl.framework/Headers1
l---------Frameworks/Growl.framework/Resources1
-rwxr-xr-xFrameworks/Growl.framework/Versions/A/Growlbin0 -> 139476 bytes
-rw-r--r--Frameworks/Growl.framework/Versions/A/Headers/Growl.h6
-rw-r--r--Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h780
-rw-r--r--Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h609
-rw-r--r--Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h348
-rw-r--r--Frameworks/Growl.framework/Versions/A/Resources/Info.plist24
l---------Frameworks/Growl.framework/Versions/Current1
l---------Frameworks/MCPKit_bundled.framework/Headers1
l---------Frameworks/MCPKit_bundled.framework/MCPKit_bundled1
l---------Frameworks/MCPKit_bundled.framework/PrivateHeaders1
l---------Frameworks/MCPKit_bundled.framework/Resources1
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPAttribute.h104
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription+MCPEntreprise.h42
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription.h91
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnection.h158
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnectionWinCont.h52
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConstants.h33
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPDocument.h95
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPEntrepriseNotifications.h35
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPFastQueries.h47
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPJoin.h68
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPKit_bundled.h38
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel+MCPEntreprise.h32
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel.h78
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNull.h36
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNumber.h84
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPObject.h106
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPRelation.h109
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResult.h110
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResultPlus.h43
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_alloc.h52
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_list.h46
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql.h738
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_com.h399
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_embed.h33
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_time.h56
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_version.h29
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Headers/typelib.h34
-rwxr-xr-xFrameworks/MCPKit_bundled.framework/Versions/A/MCPKit_bundledbin0 -> 1748716 bytes
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPAttribute+Private.h35
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPClassDescription+Private.h41
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPRelation+Private.h41
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/InfoPlist.stringsbin0 -> 192 bytes
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/JavaCompiling.plist8
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/_MCPConnectionWindow_EOArchive_English.java424
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/classes.nib28
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/info.nib16
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/keyedobjects.nibbin0 -> 9169 bytes
-rw-r--r--Frameworks/MCPKit_bundled.framework/Versions/A/Resources/Info.plist20
l---------Frameworks/MCPKit_bundled.framework/Versions/Current1
l---------Frameworks/Sparkle.framework/Headers1
l---------Frameworks/Sparkle.framework/Resources1
l---------Frameworks/Sparkle.framework/Sparkle1
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h57
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h18
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h16
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h53
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h17
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h66
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h18
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h18
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h41
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h29
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h77
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h32
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h48
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h39
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h23
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h59
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h72
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUInstaller.h24
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h19
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h18
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h24
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h21
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h36
-rwxr-xr-xFrameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h30
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h42
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h17
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h23
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h29
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h46
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h27
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h36
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h80
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h41
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h21
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h27
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h16
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/SUWindowController.h19
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h63
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist24
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist174
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib48
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib20
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nibbin0 -> 7168 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib50
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib20
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nibbin0 -> 7148 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib67
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib20
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nibbin0 -> 10282 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib59
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib21
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nibbin0 -> 12679 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.stringsbin0 -> 7580 bytes
-rwxr-xr-xFrameworks/Sparkle.framework/Versions/A/Resources/relaunchbin0 -> 75404 bytes
-rwxr-xr-xFrameworks/Sparkle.framework/Versions/A/Sparklebin0 -> 762824 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist24
-rwxr-xr-xFrameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunchbin0 -> 71208 bytes
-rw-r--r--Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo1
l---------Frameworks/Sparkle.framework/Versions/Current1
l---------Frameworks/Sparkle.framework/relaunch.app1
116 files changed, 7012 insertions, 0 deletions
diff --git a/Frameworks/Growl.framework/Growl b/Frameworks/Growl.framework/Growl
new file mode 120000
index 00000000..85956e2d
--- /dev/null
+++ b/Frameworks/Growl.framework/Growl
@@ -0,0 +1 @@
+Versions/Current/Growl \ No newline at end of file
diff --git a/Frameworks/Growl.framework/Headers b/Frameworks/Growl.framework/Headers
new file mode 120000
index 00000000..a177d2a6
--- /dev/null
+++ b/Frameworks/Growl.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers \ No newline at end of file
diff --git a/Frameworks/Growl.framework/Resources b/Frameworks/Growl.framework/Resources
new file mode 120000
index 00000000..953ee36f
--- /dev/null
+++ b/Frameworks/Growl.framework/Resources
@@ -0,0 +1 @@
+Versions/Current/Resources \ No newline at end of file
diff --git a/Frameworks/Growl.framework/Versions/A/Growl b/Frameworks/Growl.framework/Versions/A/Growl
new file mode 100755
index 00000000..cfe458fd
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Growl
Binary files differ
diff --git a/Frameworks/Growl.framework/Versions/A/Headers/Growl.h b/Frameworks/Growl.framework/Versions/A/Headers/Growl.h
new file mode 100644
index 00000000..e2a44255
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Headers/Growl.h
@@ -0,0 +1,6 @@
+#include "GrowlDefines.h"
+
+#ifdef __OBJC__
+# include "GrowlApplicationBridge.h"
+#endif
+#include "GrowlApplicationBridge-Carbon.h"
diff --git a/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h b/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h
new file mode 100644
index 00000000..e35663f6
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h
@@ -0,0 +1,780 @@
+//
+// GrowlApplicationBridge-Carbon.h
+// Growl
+//
+// Created by Mac-arena the Bored Zo on Wed Jun 18 2004.
+// Based on GrowlApplicationBridge.h by Evan Schoenberg.
+// This source code is in the public domain. You may freely link it into any
+// program.
+//
+
+#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_
+#define _GROWLAPPLICATIONBRIDGE_CARBON_H_
+
+#include <sys/cdefs.h>
+#include <Carbon/Carbon.h>
+
+#ifndef GROWL_EXPORT
+#define GROWL_EXPORT __attribute__((visibility("default")))
+#endif
+
+/*! @header GrowlApplicationBridge-Carbon.h
+ * @abstract Declares an API that Carbon applications can use to interact with Growl.
+ * @discussion GrowlApplicationBridge uses a delegate to provide information //XXX
+ * to Growl (such as your application's name and what notifications it may
+ * post) and to provide information to your application (such as that Growl
+ * is listening for notifications or that a notification has been clicked).
+ *
+ * You can set the Growldelegate with Growl_SetDelegate and find out the
+ * current delegate with Growl_GetDelegate. See struct Growl_Delegate for more
+ * information about the delegate.
+ */
+
+__BEGIN_DECLS
+
+/*! @struct Growl_Delegate
+ * @abstract Delegate to supply GrowlApplicationBridge with information and respond to events.
+ * @discussion The Growl delegate provides your interface to
+ * GrowlApplicationBridge. When GrowlApplicationBridge needs information about
+ * your application, it looks for it in the delegate; when Growl or the user
+ * does something that you might be interested in, GrowlApplicationBridge
+ * looks for a callback in the delegate and calls it if present
+ * (meaning, if it is not <code>NULL</code>).
+ * XXX on all of that
+ * @field size The size of the delegate structure.
+ * @field applicationName The name of your application.
+ * @field registrationDictionary A dictionary describing your application and the notifications it can send out.
+ * @field applicationIconData Your application's icon.
+ * @field growlInstallationWindowTitle The title of the installation window.
+ * @field growlInstallationInformation Text to display in the installation window.
+ * @field growlUpdateWindowTitle The title of the update window.
+ * @field growlUpdateInformation Text to display in the update window.
+ * @field referenceCount A count of owners of the delegate.
+ * @field retain Called when GrowlApplicationBridge receives this delegate.
+ * @field release Called when GrowlApplicationBridge no longer needs this delegate.
+ * @field growlIsReady Called when GrowlHelperApp is listening for notifications.
+ * @field growlNotificationWasClicked Called when a Growl notification is clicked.
+ * @field growlNotificationTimedOut Called when a Growl notification timed out.
+ */
+struct Growl_Delegate {
+ /* @discussion This should be sizeof(struct Growl_Delegate).
+ */
+ size_t size;
+
+ /*All of these attributes are optional.
+ *Optional attributes can be NULL; required attributes that
+ * are NULL cause setting the Growl delegate to fail.
+ *XXX - move optional/required status into the discussion for each field
+ */
+
+ /* This name is used both internally and in the Growl preferences.
+ *
+ * This should remain stable between different versions and incarnations of
+ * your application.
+ * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ * "SurfWriter Lite" are not.
+ *
+ * This can be <code>NULL</code> if it is provided elsewhere, namely in an
+ * auto-discoverable plist file in your app bundle
+ * (XXX refer to more information on that) or in registrationDictionary.
+ */
+ CFStringRef applicationName;
+
+ /*
+ * Must contain at least these keys:
+ * GROWL_NOTIFICATIONS_ALL (CFArray):
+ * Contains the names of all notifications your application may post.
+ *
+ * Can also contain these keys:
+ * GROWL_NOTIFICATIONS_DEFAULT (CFArray):
+ * Names of notifications that should be enabled by default.
+ * If omitted, GROWL_NOTIFICATIONS_ALL will be used.
+ * GROWL_APP_NAME (CFString):
+ * Same as the applicationName member of this structure.
+ * If both are present, the applicationName member shall prevail.
+ * If this key is present, you may omit applicationName (set it to <code>NULL</code>).
+ * GROWL_APP_ICON (CFData):
+ * Same as the iconData member of this structure.
+ * If both are present, the iconData member shall prevail.
+ * If this key is present, you may omit iconData (set it to <code>NULL</code>).
+ *
+ * If you change the contents of this dictionary after setting the delegate,
+ * be sure to call Growl_Reregister.
+ *
+ * This can be <code>NULL</code> if you have an auto-discoverable plist file in your app
+ * bundle. (XXX refer to more information on that)
+ */
+ CFDictionaryRef registrationDictionary;
+
+ /* The data can be in any format supported by NSImage. As of
+ * Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and
+ * PICT formats.
+ *
+ * If this is not supplied, Growl will look up your application's icon by
+ * its application name.
+ */
+ CFDataRef applicationIconData;
+
+ /* Installer display attributes
+ *
+ * These four attributes are used by the Growl installer, if this framework
+ * supports it.
+ * For any of these being <code>NULL</code>, a localised default will be
+ * supplied.
+ */
+
+ /* If this is <code>NULL</code>, Growl will use a default,
+ * localized title.
+ *
+ * Only used if you're using Growl-WithInstaller.framework. Otherwise,
+ * this member is ignored.
+ */
+ CFStringRef growlInstallationWindowTitle;
+ /* This information may be as long or short as desired (the
+ * window will be sized to fit it). If Growl is not installed, it will
+ * be displayed to the user as an explanation of what Growl is and what
+ * it can do in your application.
+ * It should probably note that no download is required to install.
+ *
+ * If this is <code>NULL</code>, Growl will use a default, localized
+ * explanation.
+ *
+ * Only used if you're using Growl-WithInstaller.framework. Otherwise,
+ * this member is ignored.
+ */
+ CFStringRef growlInstallationInformation;
+ /* If this is <code>NULL</code>, Growl will use a default,
+ * localized title.
+ *
+ * Only used if you're using Growl-WithInstaller.framework. Otherwise,
+ * this member is ignored.
+ */
+ CFStringRef growlUpdateWindowTitle;
+ /* This information may be as long or short as desired (the
+ * window will be sized to fit it). If an older version of Growl is
+ * installed, it will be displayed to the user as an explanation that an
+ * updated version of Growl is included in your application and
+ * no download is required.
+ *
+ * If this is <code>NULL</code>, Growl will use a default, localized
+ * explanation.
+ *
+ * Only used if you're using Growl-WithInstaller.framework. Otherwise,
+ * this member is ignored.
+ */
+ CFStringRef growlUpdateInformation;
+
+ /* This member is provided for use by your retain and release
+ * callbacks (see below).
+ *
+ * GrowlApplicationBridge never directly uses this member. Instead, it
+ * calls your retain callback (if non-<code>NULL</code>) and your release
+ * callback (if non-<code>NULL</code>).
+ */
+ unsigned referenceCount;
+
+ //Functions. Currently all of these are optional (any of them can be NULL).
+
+ /* When you call Growl_SetDelegate(newDelegate), it will call
+ * oldDelegate->release(oldDelegate), and then it will call
+ * newDelegate->retain(newDelegate), and the return value from retain
+ * is what will be set as the delegate.
+ * (This means that this member works like CFRetain and -[NSObject retain].)
+ * This member is optional (it can be <code>NULL</code>).
+ * For a delegate allocated with malloc, this member would be
+ * <code>NULL</code>.
+ * @result A delegate to which GrowlApplicationBridge holds a reference.
+ */
+ void *(*retain)(void *);
+ /* When you call Growl_SetDelegate(newDelegate), it will call
+ * oldDelegate->release(oldDelegate), and then it will call
+ * newDelegate->retain(newDelegate), and the return value from retain
+ * is what will be set as the delegate.
+ * (This means that this member works like CFRelease and
+ * -[NSObject release].)
+ * This member is optional (it can be NULL).
+ * For a delegate allocated with malloc, this member might be
+ * <code>free</code>(3).
+ */
+ void (*release)(void *);
+
+ /* Informs the delegate that Growl (specifically, the GrowlHelperApp) was
+ * launched successfully (or was already running). The application can
+ * take actions with the knowledge that Growl is installed and functional.
+ */
+ void (*growlIsReady)(void);
+
+ /* Informs the delegate that a Growl notification was clicked. It is only
+ * sent for notifications sent with a non-<code>NULL</code> clickContext,
+ * so if you want to receive a message when a notification is clicked,
+ * clickContext must not be <code>NULL</code> when calling
+ * Growl_PostNotification or
+ * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+ */
+ void (*growlNotificationWasClicked)(CFPropertyListRef clickContext);
+
+ /* Informs the delegate that a Growl notification timed out. It is only
+ * sent for notifications sent with a non-<code>NULL</code> clickContext,
+ * so if you want to receive a message when a notification is clicked,
+ * clickContext must not be <code>NULL</code> when calling
+ * Growl_PostNotification or
+ * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext.
+ */
+ void (*growlNotificationTimedOut)(CFPropertyListRef clickContext);
+};
+
+/*! @struct Growl_Notification
+ * @abstract Structure describing a Growl notification.
+ * @discussion XXX
+ * @field size The size of the notification structure.
+ * @field name Identifies the notification.
+ * @field title Short synopsis of the notification.
+ * @field description Additional text.
+ * @field iconData An icon for the notification.
+ * @field priority An indicator of the notification's importance.
+ * @field reserved Bits reserved for future usage.
+ * @field isSticky Requests that a notification stay on-screen until dismissed explicitly.
+ * @field clickContext An identifier to be passed to your click callback when a notification is clicked.
+ * @field clickCallback A callback to call when the notification is clicked.
+ */
+struct Growl_Notification {
+ /* This should be sizeof(struct Growl_Notification).
+ */
+ size_t size;
+
+ /* The notification name distinguishes one type of
+ * notification from another. The name should be human-readable, as it
+ * will be displayed in the Growl preference pane.
+ *
+ * The name is used in the GROWL_NOTIFICATIONS_ALL and
+ * GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and
+ * in this member of the Growl_Notification structure.
+ */
+ CFStringRef name;
+
+ /* A notification's title describes the notification briefly.
+ * It should be easy to read quickly by the user.
+ */
+ CFStringRef title;
+
+ /* The description supplements the title with more
+ * information. It is usually longer and sometimes involves a list of
+ * subjects. For example, for a 'Download complete' notification, the
+ * description might have one filename per line. GrowlMail in Growl 0.6
+ * uses a description of '%d new mail(s)' (formatted with the number of
+ * messages).
+ */
+ CFStringRef description;
+
+ /* The notification icon usually indicates either what
+ * happened (it may have the same icon as e.g. a toolbar item that
+ * started the process that led to the notification), or what it happened
+ * to (e.g. a document icon).
+ *
+ * The icon data is optional, so it can be <code>NULL</code>. In that
+ * case, the application icon is used alone. Not all displays support
+ * icons.
+ *
+ * The data can be in any format supported by NSImage. As of Mac OS X
+ * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form
+ * ats.
+ */
+ CFDataRef iconData;
+
+ /* Priority is new in Growl 0.6, and is represented as a
+ * signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low
+ * priority, and +2 is Very High priority.
+ *
+ * Not all displays support priority. If you do not wish to assign a
+ * priority to your notification, assign 0.
+ */
+ signed int priority;
+
+ /* These bits are not used in Growl 0.6. Set them to 0.
+ */
+ unsigned reserved: 31;
+
+ /* When the sticky bit is clear, in most displays,
+ * notifications disappear after a certain amount of time. Sticky
+ * notifications, however, remain on-screen until the user dismisses them
+ * explicitly, usually by clicking them.
+ *
+ * Sticky notifications were introduced in Growl 0.6. Most notifications
+ * should not be sticky. Not all displays support sticky notifications,
+ * and the user may choose in Growl's preference pane to force the
+ * notification to be sticky or non-sticky, in which case the sticky bit
+ * in the notification will be ignored.
+ */
+ unsigned isSticky: 1;
+
+ /* If this is not <code>NULL</code>, and your click callback
+ * is not <code>NULL</code> either, this will be passed to the callback
+ * when your notification is clicked by the user.
+ *
+ * Click feedback was introduced in Growl 0.6, and it is optional. Not
+ * all displays support click feedback.
+ */
+ CFPropertyListRef clickContext;
+
+ /* If this is not <code>NULL</code>, it will be called instead
+ * of the Growl delegate's click callback when clickContext is
+ * non-<code>NULL</code> and the notification is clicked on by the user.
+ *
+ * Click feedback was introduced in Growl 0.6, and it is optional. Not
+ * all displays support click feedback.
+ *
+ * The per-notification click callback is not yet supported as of Growl
+ * 0.7.
+ */
+ void (*clickCallback)(CFPropertyListRef clickContext);
+
+ CFStringRef identifier;
+};
+
+#pragma mark -
+#pragma mark Easy initialisers
+
+/*! @defined InitGrowlDelegate
+ * @abstract Callable macro. Initializes a Growl delegate structure to defaults.
+ * @discussion Call with a pointer to a struct Growl_Delegate. All of the
+ * members of the structure will be set to 0 or <code>NULL</code>, except for
+ * size (which will be set to <code>sizeof(struct Growl_Delegate)</code>) and
+ * referenceCount (which will be set to 1).
+ */
+#define InitGrowlDelegate(delegate) \
+ do { \
+ if (delegate) { \
+ (delegate)->size = sizeof(struct Growl_Delegate); \
+ (delegate)->applicationName = NULL; \
+ (delegate)->registrationDictionary = NULL; \
+ (delegate)->applicationIconData = NULL; \
+ (delegate)->growlInstallationWindowTitle = NULL; \
+ (delegate)->growlInstallationInformation = NULL; \
+ (delegate)->growlUpdateWindowTitle = NULL; \
+ (delegate)->growlUpdateInformation = NULL; \
+ (delegate)->referenceCount = 1U; \
+ (delegate)->retain = NULL; \
+ (delegate)->release = NULL; \
+ (delegate)->growlIsReady = NULL; \
+ (delegate)->growlNotificationWasClicked = NULL; \
+ (delegate)->growlNotificationTimedOut = NULL; \
+ } \
+ } while(0)
+
+/*! @defined InitGrowlNotification
+ * @abstract Callable macro. Initializes a Growl notification structure to defaults.
+ * @discussion Call with a pointer to a struct Growl_Notification. All of
+ * the members of the structure will be set to 0 or <code>NULL</code>, except
+ * for size (which will be set to
+ * <code>sizeof(struct Growl_Notification)</code>).
+ */
+#define InitGrowlNotification(notification) \
+ do { \
+ if (notification) { \
+ (notification)->size = sizeof(struct Growl_Notification); \
+ (notification)->name = NULL; \
+ (notification)->title = NULL; \
+ (notification)->description = NULL; \
+ (notification)->iconData = NULL; \
+ (notification)->priority = 0; \
+ (notification)->reserved = 0U; \
+ (notification)->isSticky = false; \
+ (notification)->clickContext = NULL; \
+ (notification)->clickCallback = NULL; \
+ (notification)->identifier = NULL; \
+ } \
+ } while(0)
+
+#pragma mark -
+#pragma mark Public API
+
+// @functiongroup Managing the Growl delegate
+
+/*! @function Growl_SetDelegate
+ * @abstract Replaces the current Growl delegate with a new one, or removes
+ * the Growl delegate.
+ * @param newDelegate
+ * @result Returns false and does nothing else if a pointer that was passed in
+ * is unsatisfactory (because it is non-<code>NULL</code>, but at least one
+ * required member of it is <code>NULL</code>). Otherwise, sets or unsets the
+ * delegate and returns true.
+ * @discussion When <code>newDelegate</code> is non-<code>NULL</code>, sets
+ * the delegate to <code>newDelegate</code>. When it is <code>NULL</code>,
+ * the current delegate will be unset, and no delegate will be in place.
+ *
+ * It is legal for <code>newDelegate</code> to be the current delegate;
+ * nothing will happen, and Growl_SetDelegate will return true. It is also
+ * legal for it to be <code>NULL</code>, as described above; again, it will
+ * return true.
+ *
+ * If there was a delegate in place before the call, Growl_SetDelegate will
+ * call the old delegate's release member if it was non-<code>NULL</code>. If
+ * <code>newDelegate</code> is non-<code>NULL</code>, Growl_SetDelegate will
+ * call <code>newDelegate->retain</code>, and set the delegate to its return
+ * value.
+ *
+ * If you are using Growl-WithInstaller.framework, and an older version of
+ * Growl is installed on the user's system, the user will automatically be
+ * prompted to update.
+ *
+ * GrowlApplicationBridge currently does not copy this structure, nor does it
+ * retain any of the CF objects in the structure (it regards the structure as
+ * a container that retains the objects when they are added and releases them
+ * when they are removed or the structure is destroyed). Also,
+ * GrowlApplicationBridge currently does not modify any member of the
+ * structure, except possibly the referenceCount by calling the retain and
+ * release members.
+ */
+GROWL_EXPORT Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate);
+
+/*! @function Growl_GetDelegate
+ * @abstract Returns the current Growl delegate, if any.
+ * @result The current Growl delegate.
+ * @discussion Returns the last pointer passed into Growl_SetDelegate, or
+ * <code>NULL</code> if no such call has been made.
+ *
+ * This function follows standard Core Foundation reference-counting rules.
+ * Because it is a Get function, not a Copy function, it will not retain the
+ * delegate on your behalf. You are responsible for retaining and releasing
+ * the delegate as needed.
+ */
+GROWL_EXPORT struct Growl_Delegate *Growl_GetDelegate(void);
+
+#pragma mark -
+
+// @functiongroup Posting Growl notifications
+
+/*! @function Growl_PostNotification
+ * @abstract Posts a Growl notification.
+ * @param notification The notification to post.
+ * @discussion This is the preferred means for sending a Growl notification.
+ * The notification name and at least one of the title and description are
+ * required (all three are preferred). All other parameters may be
+ * <code>NULL</code> (or 0 or false as appropriate) to accept default values.
+ *
+ * If using the Growl-WithInstaller framework, if Growl is not installed the
+ * user will be prompted to install Growl.
+ * If the user cancels, this function will have no effect until the next
+ * application session, at which time when it is called the user will be
+ * prompted again. The user is also given the option to not be prompted again.
+ * If the user does choose to install Growl, the requested notification will
+ * be displayed once Growl is installed and running.
+ */
+GROWL_EXPORT void Growl_PostNotification(const struct Growl_Notification *notification);
+
+/*! @function Growl_PostNotificationWithDictionary
+* @abstract Notifies using a userInfo dictionary suitable for passing to
+* CFDistributedNotificationCenter.
+* @param userInfo The dictionary to notify with.
+* @discussion Before Growl 0.6, your application would have posted
+* notifications using CFDistributedNotificationCenter by creating a userInfo
+* dictionary with the notification data. This had the advantage of allowing
+* you to add other data to the dictionary for programs besides Growl that
+* might be listening.
+*
+* This function allows you to use such dictionaries without being restricted
+* to using CFDistributedNotificationCenter. The keys for this dictionary
+ * can be found in GrowlDefines.h.
+*/
+GROWL_EXPORT void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo);
+
+/*! @function Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext
+ * @abstract Posts a Growl notification using parameter values.
+ * @param title The title of the notification.
+ * @param description The description of the notification.
+ * @param notificationName The name of the notification as listed in the
+ * registration dictionary.
+ * @param iconData Data representing a notification icon. Can be <code>NULL</code>.
+ * @param priority The priority of the notification (-2 to +2, with -2
+ * being Very Low and +2 being Very High).
+ * @param isSticky If true, requests that this notification wait for a
+ * response from the user.
+ * @param clickContext An object to pass to the clickCallback, if any. Can
+ * be <code>NULL</code>, in which case the clickCallback is not called.
+ * @discussion Creates a temporary Growl_Notification, fills it out with the
+ * supplied information, and calls Growl_PostNotification on it.
+ * See struct Growl_Notification and Growl_PostNotification for more
+ * information.
+ *
+ * The icon data can be in any format supported by NSImage. As of Mac OS X
+ * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats.
+ */
+GROWL_EXPORT void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext(
+ /*inhale*/
+ CFStringRef title,
+ CFStringRef description,
+ CFStringRef notificationName,
+ CFDataRef iconData,
+ signed int priority,
+ Boolean isSticky,
+ CFPropertyListRef clickContext);
+
+#pragma mark -
+
+// @functiongroup Registering
+
+/*! @function Growl_RegisterWithDictionary
+ * @abstract Register your application with Growl without setting a delegate.
+ * @discussion When you call this function with a dictionary,
+ * GrowlApplicationBridge registers your application using that dictionary.
+ * If you pass <code>NULL</code>, GrowlApplicationBridge will ask the delegate
+ * (if there is one) for a dictionary, and if that doesn't work, it will look
+ * in your application's bundle for an auto-discoverable plist.
+ * (XXX refer to more information on that)
+ *
+ * If you pass a dictionary to this function, it must include the
+ * <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ * This function is mainly an alternative to the delegate system introduced
+ * with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ * <code>growlIsReady</code> (since they are sent to the delegate). You can,
+ * however, set a delegate after registering without one.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ * @result <code>false</code> if registration failed (e.g. if Growl isn't installed).
+ */
+GROWL_EXPORT Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict);
+
+/*! @function Growl_Reregister
+ * @abstract Updates your registration with Growl.
+ * @discussion If your application changes the contents of the
+ * GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the
+ * Growl delegate, or if it changes the value of that member, or if it
+ * changes the contents of its auto-discoverable plist, call this function
+ * to have Growl update its registration information for your application.
+ *
+ * Otherwise, this function does not normally need to be called. If you're
+ * using a delegate, your application will be registered when you set the
+ * delegate if both the delegate and its registrationDictionary member are
+ * non-<code>NULL</code>.
+ *
+ * This function is now implemented using
+ * <code>Growl_RegisterWithDictionary</code>.
+ */
+GROWL_EXPORT void Growl_Reregister(void);
+
+#pragma mark -
+
+/*! @function Growl_SetWillRegisterWhenGrowlIsReady
+ * @abstract Tells GrowlApplicationBridge to register with Growl when Growl
+ * launches (or not).
+ * @discussion When Growl has started listening for notifications, it posts a
+ * <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ * Center. GrowlApplicationBridge listens for this notification, using it to
+ * perform various tasks (such as calling your delegate's
+ * <code>growlIsReady</code> callback, if it has one). If this function is
+ * called with <code>true</code>, one of those tasks will be to reregister
+ * with Growl (in the manner of <code>Growl_Reregister</code>).
+ *
+ * This attribute is automatically set back to <code>false</code>
+ * (the default) after every <code>GROWL_IS_READY</code> notification.
+ * @param flag <code>true</code> if you want GrowlApplicationBridge to register with
+ * Growl when next it is ready; <code>false</code> if not.
+ */
+GROWL_EXPORT void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag);
+/*! @function Growl_WillRegisterWhenGrowlIsReady
+ * @abstract Reports whether GrowlApplicationBridge will register with Growl
+ * when Growl next launches.
+ * @result <code>true</code> if GrowlApplicationBridge will register with
+ * Growl when next it posts GROWL_IS_READY; <code>false</code> if not.
+ */
+GROWL_EXPORT Boolean Growl_WillRegisterWhenGrowlIsReady(void);
+
+#pragma mark -
+
+// @functiongroup Obtaining registration dictionaries
+
+/*! @function Growl_CopyRegistrationDictionaryFromDelegate
+ * @abstract Asks the delegate for a registration dictionary.
+ * @discussion If no delegate is set, or if the delegate's
+ * <code>registrationDictionary</code> member is <code>NULL</code>, this
+ * function returns <code>NULL</code>.
+ *
+ * This function does not attempt to clean up the dictionary in any way - for
+ * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ * will be missing it too. Use
+ * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> or
+ * <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ * to try to fill in missing keys.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void);
+
+/*! @function Growl_CopyRegistrationDictionaryFromBundle
+ * @abstract Looks in a bundle for a registration dictionary.
+ * @discussion This function looks in a bundle for an auto-discoverable
+ * registration dictionary file using <code>CFBundleCopyResourceURL</code>.
+ * If it finds one, it loads the file using <code>CFPropertyList</code> and
+ * returns the result.
+ *
+ * If you pass <code>NULL</code> as the bundle, the main bundle is examined.
+ *
+ * This function does not attempt to clean up the dictionary in any way - for
+ * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ * will be missing it too. Use
+ * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or
+ * <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code>
+ * to try to fill in missing keys.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle);
+
+/*! @function Growl_CreateBestRegistrationDictionary
+ * @abstract Obtains a registration dictionary, filled out to the best of
+ * GrowlApplicationBridge's knowledge.
+ * @discussion This function creates a registration dictionary as best
+ * GrowlApplicationBridge knows how.
+ *
+ * First, GrowlApplicationBridge examines the Growl delegate (if there is
+ * one) and gets the registration dictionary from that. If no such dictionary
+ * was obtained, GrowlApplicationBridge looks in your application's main
+ * bundle for an auto-discoverable registration dictionary file. If that
+ * doesn't exist either, this function returns <code>NULL</code>.
+ *
+ * Second, GrowlApplicationBridge calls
+ * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> with
+ * whatever dictionary was obtained. The result of that function is the
+ * result of this function.
+ *
+ * GrowlApplicationBridge uses this function when you call
+ * <code>Growl_SetDelegate</code>, or when you call
+ * <code>Growl_RegisterWithDictionary</code> with <code>NULL</code>.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateBestRegistrationDictionary(void);
+
+#pragma mark -
+
+// @functiongroup Filling in registration dictionaries
+
+/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionary
+ * @abstract Tries to fill in missing keys in a registration dictionary.
+ * @param regDict The dictionary to fill in.
+ * @result The dictionary with the keys filled in.
+ * @discussion This function examines the passed-in dictionary for missing keys,
+ * and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ * Key Value
+ * --- -----
+ * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code>
+ * <code>GROWL_APP_ICON</code> The icon of the application.
+ * <code>GROWL_APP_LOCATION</code> The location of the application.
+ * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ * Keys are only filled in if missing; if a key is present in the dictionary,
+ * its value will not be changed.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict);
+/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys
+ * @abstract Tries to fill in missing keys in a registration dictionary.
+ * @param regDict The dictionary to fill in.
+ * @param keys The keys to fill in. If <code>NULL</code>, any missing keys are filled in.
+ * @result The dictionary with the keys filled in.
+ * @discussion This function examines the passed-in dictionary for missing keys,
+ * and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ * Key Value
+ * --- -----
+ * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code>
+ * <code>GROWL_APP_ICON</code> The icon of the application.
+ * <code>GROWL_APP_LOCATION</code> The location of the application.
+ * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ * Only those keys that are listed in <code>keys</code> will be filled in.
+ * Other missing keys are ignored. Also, keys are only filled in if missing;
+ * if a key is present in the dictionary, its value will not be changed.
+ *
+ * This function was introduced in Growl.framework 0.7.
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys);
+
+/*! @brief Tries to fill in missing keys in a notification dictionary.
+ * @param notifDict The dictionary to fill in.
+ * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ * @discussion This function examines the \a notifDict for missing keys, and
+ * tries to get them from the last known registration dictionary. As of 1.1,
+ * the keys that it will look for are:
+ *
+ * \li <code>GROWL_APP_NAME</code>
+ * \li <code>GROWL_APP_ICON</code>
+ *
+ * @since Growl.framework 1.1
+ */
+GROWL_EXPORT CFDictionaryRef Growl_CreateNotificationDictionaryByFillingInDictionary(CFDictionaryRef notifDict);
+
+#pragma mark -
+
+// @functiongroup Querying Growl's status
+
+/*! @function Growl_IsInstalled
+ * @abstract Determines whether the Growl prefpane and its helper app are
+ * installed.
+ * @result Returns true if Growl is installed, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsInstalled(void);
+
+/*! @function Growl_IsRunning
+ * @abstract Cycles through the process list to find whether GrowlHelperApp
+ * is running.
+ * @result Returns true if Growl is running, false otherwise.
+ */
+GROWL_EXPORT Boolean Growl_IsRunning(void);
+
+#pragma mark -
+
+// @functiongroup Launching Growl
+
+/*! @typedef GrowlLaunchCallback
+ * @abstract Callback to notify you that Growl is running.
+ * @param context The context pointer passed to Growl_LaunchIfInstalled.
+ * @discussion Growl_LaunchIfInstalled calls this callback function if Growl
+ * was already running or if it launched Growl successfully.
+ */
+typedef void (*GrowlLaunchCallback)(void *context);
+
+/*! @function Growl_LaunchIfInstalled
+ * @abstract Launches GrowlHelperApp if it is not already running.
+ * @param callback A callback function which will be called if Growl was successfully
+ * launched or was already running. Can be <code>NULL</code>.
+ * @param context The context pointer to pass to the callback. Can be <code>NULL</code>.
+ * @result Returns true if Growl was successfully launched or was already
+ * running; returns false and does not call the callback otherwise.
+ * @discussion Returns true and calls the callback (if the callback is not
+ * <code>NULL</code>) if the Growl helper app began launching or was already
+ * running. Returns false and performs no other action if Growl could not be
+ * launched (e.g. because the Growl preference pane is not properly installed).
+ *
+ * If <code>Growl_CreateBestRegistrationDictionary</code> returns
+ * non-<code>NULL</code>, this function will register with Growl atomically.
+ *
+ * The callback should take a single argument; this is to allow applications
+ * to have context-relevant information passed back. It is perfectly
+ * acceptable for context to be <code>NULL</code>. The callback itself can be
+ * <code>NULL</code> if you don't want one.
+ */
+GROWL_EXPORT Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context);
+
+#pragma mark -
+#pragma mark Constants
+
+/*! @defined GROWL_PREFPANE_BUNDLE_IDENTIFIER
+ * @abstract The CFBundleIdentifier of the Growl preference pane bundle.
+ * @discussion GrowlApplicationBridge uses this to determine whether Growl is
+ * currently installed, by searching for the Growl preference pane. Your
+ * application probably does not need to use this macro itself.
+ */
+#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER
+#define GROWL_PREFPANE_BUNDLE_IDENTIFIER CFSTR("com.growl.prefpanel")
+#endif
+
+__END_DECLS
+
+#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */
diff --git a/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
new file mode 100644
index 00000000..4341f3fb
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
@@ -0,0 +1,609 @@
+//
+// GrowlApplicationBridge.h
+// Growl
+//
+// Created by Evan Schoenberg on Wed Jun 16 2004.
+// Copyright 2004-2006 The Growl Project. All rights reserved.
+//
+
+/*!
+ * @header GrowlApplicationBridge.h
+ * @abstract Defines the GrowlApplicationBridge class.
+ * @discussion This header defines the GrowlApplicationBridge class as well as
+ * the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant.
+ */
+
+#ifndef __GrowlApplicationBridge_h__
+#define __GrowlApplicationBridge_h__
+
+#import <Foundation/Foundation.h>
+#import <AppKit/AppKit.h>
+#import "GrowlDefines.h"
+
+//Forward declarations
+@protocol GrowlApplicationBridgeDelegate;
+
+//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation)
+#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install"
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ * @class GrowlApplicationBridge
+ * @abstract A class used to interface with Growl.
+ * @discussion This class provides a means to interface with Growl.
+ *
+ * Currently it provides a way to detect if Growl is installed and launch the
+ * GrowlHelperApp if it's not already running.
+ */
+@interface GrowlApplicationBridge : NSObject {
+
+}
+
+/*!
+ * @method isGrowlInstalled
+ * @abstract Detects whether Growl is installed.
+ * @discussion Determines if the Growl prefpane and its helper app are installed.
+ * @result Returns YES if Growl is installed, NO otherwise.
+ */
++ (BOOL) isGrowlInstalled;
+
+/*!
+ * @method isGrowlRunning
+ * @abstract Detects whether GrowlHelperApp is currently running.
+ * @discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings.
+ * @result Returns YES if GrowlHelperApp is running, NO otherwise.
+ */
++ (BOOL) isGrowlRunning;
+
+#pragma mark -
+
+/*!
+ * @method setGrowlDelegate:
+ * @abstract Set the object which will be responsible for providing and receiving Growl information.
+ * @discussion This must be called before using GrowlApplicationBridge.
+ *
+ * The methods in the GrowlApplicationBridgeDelegate protocol are required
+ * and return the basic information needed to register with Growl.
+ *
+ * The methods in the GrowlApplicationBridgeDelegate_InformalProtocol
+ * informal protocol are individually optional. They provide a greater
+ * degree of interaction between the application and growl such as informing
+ * the application when one of its Growl notifications is clicked by the user.
+ *
+ * The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol
+ * informal protocol are individually optional and are only applicable when
+ * using the Growl-WithInstaller.framework which allows for automated Growl
+ * installation.
+ *
+ * When this method is called, data will be collected from inDelegate, Growl
+ * will be launched if it is not already running, and the application will be
+ * registered with Growl.
+ *
+ * If using the Growl-WithInstaller framework, if Growl is already installed
+ * but this copy of the framework has an updated version of Growl, the user
+ * will be prompted to update automatically.
+ *
+ * @param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol.
+ */
++ (void) setGrowlDelegate:(NSObject<GrowlApplicationBridgeDelegate> *)inDelegate;
+
+/*!
+ * @method growlDelegate
+ * @abstract Return the object responsible for providing and receiving Growl information.
+ * @discussion See setGrowlDelegate: for details.
+ * @result The Growl delegate.
+ */
++ (NSObject<GrowlApplicationBridgeDelegate> *) growlDelegate;
+
+#pragma mark -
+
+/*!
+ * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:
+ * @abstract Send a Growl notification.
+ * @discussion This is the preferred means for sending a Growl notification.
+ * The notification name and at least one of the title and description are
+ * required (all three are preferred). All other parameters may be
+ * <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ * If using the Growl-WithInstaller framework, if Growl is not installed the
+ * user will be prompted to install Growl. If the user cancels, this method
+ * will have no effect until the next application session, at which time when
+ * it is called the user will be prompted again. The user is also given the
+ * option to not be prompted again. If the user does choose to install Growl,
+ * the requested notification will be displayed once Growl is installed and
+ * running.
+ *
+ * @param title The title of the notification displayed to the user.
+ * @param description The full description of the notification displayed to the user.
+ * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ * @param iconData <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ */
++ (void) notifyWithTitle:(NSString *)title
+ description:(NSString *)description
+ notificationName:(NSString *)notifName
+ iconData:(NSData *)iconData
+ priority:(signed int)priority
+ isSticky:(BOOL)isSticky
+ clickContext:(id)clickContext;
+
+/*!
+ * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
+ * @abstract Send a Growl notification.
+ * @discussion This is the preferred means for sending a Growl notification.
+ * The notification name and at least one of the title and description are
+ * required (all three are preferred). All other parameters may be
+ * <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ * If using the Growl-WithInstaller framework, if Growl is not installed the
+ * user will be prompted to install Growl. If the user cancels, this method
+ * will have no effect until the next application session, at which time when
+ * it is called the user will be prompted again. The user is also given the
+ * option to not be prompted again. If the user does choose to install Growl,
+ * the requested notification will be displayed once Growl is installed and
+ * running.
+ *
+ * @param title The title of the notification displayed to the user.
+ * @param description The full description of the notification displayed to the user.
+ * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ * @param iconData <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced.
+ */
++ (void) notifyWithTitle:(NSString *)title
+ description:(NSString *)description
+ notificationName:(NSString *)notifName
+ iconData:(NSData *)iconData
+ priority:(signed int)priority
+ isSticky:(BOOL)isSticky
+ clickContext:(id)clickContext
+ identifier:(NSString *)identifier;
+
+/*!
+ * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
+ * @abstract Send a Growl notification.
+ * @discussion This is the preferred means for sending a Growl notification.
+ * The notification name and at least one of the title and description are
+ * required (all three are preferred). All other parameters may be
+ * <code>nil</code> (or 0 or NO as appropriate) to accept default values.
+ *
+ * If using the Growl-WithInstaller framework, if Growl is not installed the
+ * user will be prompted to install Growl. If the user cancels, this method
+ * will have no effect until the next application session, at which time when
+ * it is called the user will be prompted again. The user is also given the
+ * option to not be prompted again. If the user does choose to install Growl,
+ * the requested notification will be displayed once Growl is installed and
+ * running.
+ *
+ * @param title The title of the notification displayed to the user.
+ * @param description The full description of the notification displayed to the user.
+ * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
+ * @param iconData <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
+ * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
+ * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
+ * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
+ * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced.
+ */
++ (void) notifyWithTitle:(NSString *)title
+ description:(NSString *)description
+ notificationName:(NSString *)notifName
+ iconData:(NSData *)iconData
+ priority:(signed int)priority
+ isSticky:(BOOL)isSticky
+ clickContext:(id)clickContext
+ identifier:(NSString *)identifier;
+
+/*! @method notifyWithDictionary:
+ * @abstract Notifies using a userInfo dictionary suitable for passing to
+ * <code>NSDistributedNotificationCenter</code>.
+ * @param userInfo The dictionary to notify with.
+ * @discussion Before Growl 0.6, your application would have posted
+ * notifications using <code>NSDistributedNotificationCenter</code> by
+ * creating a userInfo dictionary with the notification data. This had the
+ * advantage of allowing you to add other data to the dictionary for programs
+ * besides Growl that might be listening.
+ *
+ * This method allows you to use such dictionaries without being restricted
+ * to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary
+ * can be found in GrowlDefines.h.
+ */
++ (void) notifyWithDictionary:(NSDictionary *)userInfo;
+
+#pragma mark -
+
+/*! @method registerWithDictionary:
+ * @abstract Register your application with Growl without setting a delegate.
+ * @discussion When you call this method with a dictionary,
+ * GrowlApplicationBridge registers your application using that dictionary.
+ * If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate
+ * (if there is one) for a dictionary, and if that doesn't work, it will look
+ * in your application's bundle for an auto-discoverable plist.
+ * (XXX refer to more information on that)
+ *
+ * If you pass a dictionary to this method, it must include the
+ * <code>GROWL_APP_NAME</code> key, unless a delegate is set.
+ *
+ * This method is mainly an alternative to the delegate system introduced
+ * with Growl 0.6. Without a delegate, you cannot receive callbacks such as
+ * <code>-growlIsReady</code> (since they are sent to the delegate). You can,
+ * however, set a delegate after registering without one.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ */
++ (BOOL) registerWithDictionary:(NSDictionary *)regDict;
+
+/*! @method reregisterGrowlNotifications
+ * @abstract Reregister the notifications for this application.
+ * @discussion This method does not normally need to be called. If your
+ * application changes what notifications it is registering with Growl, call
+ * this method to have the Growl delegate's
+ * <code>-registrationDictionaryForGrowl</code> method called again and the
+ * Growl registration information updated.
+ *
+ * This method is now implemented using <code>-registerWithDictionary:</code>.
+ */
++ (void) reregisterGrowlNotifications;
+
+#pragma mark -
+
+/*! @method setWillRegisterWhenGrowlIsReady:
+ * @abstract Tells GrowlApplicationBridge to register with Growl when Growl
+ * launches (or not).
+ * @discussion When Growl has started listening for notifications, it posts a
+ * <code>GROWL_IS_READY</code> notification on the Distributed Notification
+ * Center. GrowlApplicationBridge listens for this notification, using it to
+ * perform various tasks (such as calling your delegate's
+ * <code>-growlIsReady</code> method, if it has one). If this method is
+ * called with <code>YES</code>, one of those tasks will be to reregister
+ * with Growl (in the manner of <code>-reregisterGrowlNotifications</code>).
+ *
+ * This attribute is automatically set back to <code>NO</code> (the default)
+ * after every <code>GROWL_IS_READY</code> notification.
+ * @param flag <code>YES</code> if you want GrowlApplicationBridge to register with
+ * Growl when next it is ready; <code>NO</code> if not.
+ */
++ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag;
+/*! @method willRegisterWhenGrowlIsReady
+ * @abstract Reports whether GrowlApplicationBridge will register with Growl
+ * when Growl next launches.
+ * @result <code>YES</code> if GrowlApplicationBridge will register with Growl
+ * when next it posts GROWL_IS_READY; <code>NO</code> if not.
+ */
++ (BOOL) willRegisterWhenGrowlIsReady;
+
+#pragma mark -
+
+/*! @method registrationDictionaryFromDelegate
+ * @abstract Asks the delegate for a registration dictionary.
+ * @discussion If no delegate is set, or if the delegate's
+ * <code>-registrationDictionaryForGrowl</code> method returns
+ * <code>nil</code>, this method returns <code>nil</code>.
+ *
+ * This method does not attempt to clean up the dictionary in any way - for
+ * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ * will be missing it too. Use <code>+[GrowlApplicationBridge
+ * registrationDictionaryByFillingInDictionary:]</code> or
+ * <code>+[GrowlApplicationBridge
+ * registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ * to fill in missing keys.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromDelegate;
+
+/*! @method registrationDictionaryFromBundle:
+ * @abstract Looks in a bundle for a registration dictionary.
+ * @discussion This method looks in a bundle for an auto-discoverable
+ * registration dictionary file using <code>-[NSBundle
+ * pathForResource:ofType:]</code>. If it finds one, it loads the file using
+ * <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the
+ * result.
+ *
+ * If you pass <code>nil</code> as the bundle, the main bundle is examined.
+ *
+ * This method does not attempt to clean up the dictionary in any way - for
+ * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
+ * will be missing it too. Use <code>+[GrowlApplicationBridge
+ * registrationDictionaryByFillingInDictionary:]</code> or
+ * <code>+[GrowlApplicationBridge
+ * registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
+ * to fill in missing keys.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
++ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle;
+
+/*! @method bestRegistrationDictionary
+ * @abstract Obtains a registration dictionary, filled out to the best of
+ * GrowlApplicationBridge's knowledge.
+ * @discussion This method creates a registration dictionary as best
+ * GrowlApplicationBridge knows how.
+ *
+ * First, GrowlApplicationBridge contacts the Growl delegate (if there is
+ * one) and gets the registration dictionary from that. If no such dictionary
+ * was obtained, GrowlApplicationBridge looks in your application's main
+ * bundle for an auto-discoverable registration dictionary file. If that
+ * doesn't exist either, this method returns <code>nil</code>.
+ *
+ * Second, GrowlApplicationBridge calls
+ * <code>+registrationDictionaryByFillingInDictionary:</code> with whatever
+ * dictionary was obtained. The result of that method is the result of this
+ * method.
+ *
+ * GrowlApplicationBridge uses this method when you call
+ * <code>+setGrowlDelegate:</code>, or when you call
+ * <code>+registerWithDictionary:</code> with <code>nil</code>.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ * @result A registration dictionary.
+ */
++ (NSDictionary *) bestRegistrationDictionary;
+
+#pragma mark -
+
+/*! @method registrationDictionaryByFillingInDictionary:
+ * @abstract Tries to fill in missing keys in a registration dictionary.
+ * @discussion This method examines the passed-in dictionary for missing keys,
+ * and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ * Key Value
+ * --- -----
+ * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code>
+ * <code>GROWL_APP_ICON</code> The icon of the application.
+ * <code>GROWL_APP_LOCATION</code> The location of the application.
+ * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ * Keys are only filled in if missing; if a key is present in the dictionary,
+ * its value will not be changed.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ * @param regDict The dictionary to fill in.
+ * @result The dictionary with the keys filled in. This is an autoreleased
+ * copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+/*! @method registrationDictionaryByFillingInDictionary:restrictToKeys:
+ * @abstract Tries to fill in missing keys in a registration dictionary.
+ * @discussion This method examines the passed-in dictionary for missing keys,
+ * and tries to work out correct values for them. As of 0.7, it uses:
+ *
+ * Key Value
+ * --- -----
+ * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code>
+ * <code>GROWL_APP_ICON</code> The icon of the application.
+ * <code>GROWL_APP_LOCATION</code> The location of the application.
+ * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code>
+ *
+ * Only those keys that are listed in <code>keys</code> will be filled in.
+ * Other missing keys are ignored. Also, keys are only filled in if missing;
+ * if a key is present in the dictionary, its value will not be changed.
+ *
+ * This method was introduced in Growl.framework 0.7.
+ * @param regDict The dictionary to fill in.
+ * @param keys The keys to fill in. If <code>nil</code>, any missing keys are filled in.
+ * @result The dictionary with the keys filled in. This is an autoreleased
+ * copy of <code>regDict</code>.
+ */
++ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys;
+
+/*! @brief Tries to fill in missing keys in a notification dictionary.
+ * @param notifDict The dictionary to fill in.
+ * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
+ * @discussion This function examines the \a notifDict for missing keys, and
+ * tries to get them from the last known registration dictionary. As of 1.1,
+ * the keys that it will look for are:
+ *
+ * \li <code>GROWL_APP_NAME</code>
+ * \li <code>GROWL_APP_ICON</code>
+ *
+ * @since Growl.framework 1.1
+ */
++ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
+
++ (NSDictionary *) frameworkInfoDictionary;
+@end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ * @protocol GrowlApplicationBridgeDelegate
+ * @abstract Required protocol for the Growl delegate.
+ * @discussion The methods in this protocol are required and are called
+ * automatically as needed by GrowlApplicationBridge. See
+ * <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>.
+ * See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>.
+ */
+
+@protocol GrowlApplicationBridgeDelegate
+
+// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7.
+
+@end
+
+//------------------------------------------------------------------------------
+#pragma mark -
+
+/*!
+ * @category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol)
+ * @abstract Methods which may be optionally implemented by the GrowlDelegate.
+ * @discussion The methods in this informal protocol will only be called if implemented by the delegate.
+ */
+@interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol)
+
+/*!
+ * @method registrationDictionaryForGrowl
+ * @abstract Return the dictionary used to register this application with Growl.
+ * @discussion The returned dictionary gives Growl the complete list of
+ * notifications this application will ever send, and it also specifies which
+ * notifications should be enabled by default. Each is specified by an array
+ * of <code>NSString</code> objects.
+ *
+ * For most applications, these two arrays can be the same (if all sent
+ * notifications should be displayed by default).
+ *
+ * The <code>NSString</code> objects of these arrays will correspond to the
+ * <code>notificationName:</code> parameter passed in
+ * <code>+[GrowlApplicationBridge
+ * notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls.
+ *
+ * The dictionary should have the required key object pairs:
+ * key: GROWL_NOTIFICATIONS_ALL object: <code>NSArray</code> of <code>NSString</code> objects
+ * key: GROWL_NOTIFICATIONS_DEFAULT object: <code>NSArray</code> of <code>NSString</code> objects
+ *
+ * The dictionary may have the following key object pairs:
+ * key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES object: <code>NSDictionary</code> of key: notification name object: human-readable notification name
+ *
+ * You do not need to implement this method if you have an auto-discoverable
+ * plist file in your app bundle. (XXX refer to more information on that)
+ *
+ * @result The <code>NSDictionary</code> to use for registration.
+ */
+- (NSDictionary *) registrationDictionaryForGrowl;
+
+/*!
+ * @method applicationNameForGrowl
+ * @abstract Return the name of this application which will be used for Growl bookkeeping.
+ * @discussion This name is used both internally and in the Growl preferences.
+ *
+ * This should remain stable between different versions and incarnations of
+ * your application.
+ * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ * "SurfWriter Lite" are not.
+ *
+ * You do not need to implement this method if you are providing the
+ * application name elsewhere, meaning in an auto-discoverable plist file in
+ * your app bundle (XXX refer to more information on that) or in the result
+ * of -registrationDictionaryForGrowl.
+ *
+ * @result The name of the application using Growl.
+ */
+- (NSString *) applicationNameForGrowl;
+
+/*!
+ * @method applicationIconForGrowl
+ * @abstract Return the <code>NSImage</code> to treat as the application icon.
+ * @discussion The delegate may optionally return an <code>NSImage</code>
+ * object to use as the application icon. If this method is not implemented,
+ * {{{-applicationIconDataForGrowl}}} is tried. If that method is not
+ * implemented, the application's own icon is used. Neither method is
+ * generally needed.
+ * @result The <code>NSImage</code> to treat as the application icon.
+ */
+- (NSImage *) applicationIconForGrowl;
+
+/*!
+ * @method applicationIconDataForGrowl
+ * @abstract Return the <code>NSData</code> to treat as the application icon.
+ * @discussion The delegate may optionally return an <code>NSData</code>
+ * object to use as the application icon; if this is not implemented, the
+ * application's own icon is used. This is not generally needed.
+ * @result The <code>NSData</code> to treat as the application icon.
+ * @deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}.
+ */
+- (NSData *) applicationIconDataForGrowl;
+
+/*!
+ * @method growlIsReady
+ * @abstract Informs the delegate that Growl has launched.
+ * @discussion Informs the delegate that Growl (specifically, the
+ * GrowlHelperApp) was launched successfully. The application can take actions
+ * with the knowledge that Growl is installed and functional.
+ */
+- (void) growlIsReady;
+
+/*!
+ * @method growlNotificationWasClicked:
+ * @abstract Informs the delegate that a Growl notification was clicked.
+ * @discussion Informs the delegate that a Growl notification was clicked. It
+ * is only sent for notifications sent with a non-<code>nil</code>
+ * clickContext, so if you want to receive a message when a notification is
+ * clicked, clickContext must not be <code>nil</code> when calling
+ * <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationWasClicked:(id)clickContext;
+
+/*!
+ * @method growlNotificationTimedOut:
+ * @abstract Informs the delegate that a Growl notification timed out.
+ * @discussion Informs the delegate that a Growl notification timed out. It
+ * is only sent for notifications sent with a non-<code>nil</code>
+ * clickContext, so if you want to receive a message when a notification is
+ * clicked, clickContext must not be <code>nil</code> when calling
+ * <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
+ * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
+ */
+- (void) growlNotificationTimedOut:(id)clickContext;
+
+@end
+
+#pragma mark -
+/*!
+ * @category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+ * @abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework.
+ * @discussion The methods in this informal protocol will only be called if
+ * implemented by the delegate. They allow greater control of the information
+ * presented to the user when installing or upgrading Growl from within your
+ * application when using Growl-WithInstaller.framework.
+ */
+@interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol)
+
+/*!
+ * @method growlInstallationWindowTitle
+ * @abstract Return the title of the installation window.
+ * @discussion If not implemented, Growl will use a default, localized title.
+ * @result An NSString object to use as the title.
+ */
+- (NSString *)growlInstallationWindowTitle;
+
+/*!
+ * @method growlUpdateWindowTitle
+ * @abstract Return the title of the upgrade window.
+ * @discussion If not implemented, Growl will use a default, localized title.
+ * @result An NSString object to use as the title.
+ */
+- (NSString *)growlUpdateWindowTitle;
+
+/*!
+ * @method growlInstallationInformation
+ * @abstract Return the information to display when installing.
+ * @discussion This information may be as long or short as desired (the window
+ * will be sized to fit it). It will be displayed to the user as an
+ * explanation of what Growl is and what it can do in your application. It
+ * should probably note that no download is required to install.
+ *
+ * If this is not implemented, Growl will use a default, localized explanation.
+ * @result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlInstallationInformation;
+
+/*!
+ * @method growlUpdateInformation
+ * @abstract Return the information to display when upgrading.
+ * @discussion This information may be as long or short as desired (the window
+ * will be sized to fit it). It will be displayed to the user as an
+ * explanation that an updated version of Growl is included in your
+ * application and no download is required.
+ *
+ * If this is not implemented, Growl will use a default, localized explanation.
+ * @result An NSAttributedString object to display.
+ */
+- (NSAttributedString *)growlUpdateInformation;
+
+@end
+
+//private
+@interface GrowlApplicationBridge (GrowlInstallationPrompt_private)
++ (void) _userChoseNotToInstallGrowl;
+@end
+
+#endif /* __GrowlApplicationBridge_h__ */
diff --git a/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h b/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h
new file mode 100644
index 00000000..2b971cfe
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h
@@ -0,0 +1,348 @@
+//
+// GrowlDefines.h
+//
+
+#ifndef _GROWLDEFINES_H
+#define _GROWLDEFINES_H
+
+#ifdef __OBJC__
+#define XSTR(x) (@x)
+#define STRING_TYPE NSString *
+#else
+#define XSTR CFSTR
+#define STRING_TYPE CFStringRef
+#endif
+
+/*! @header GrowlDefines.h
+ * @abstract Defines all the notification keys.
+ * @discussion Defines all the keys used for registration with Growl and for
+ * Growl notifications.
+ *
+ * Most applications should use the functions or methods of Growl.framework
+ * instead of posting notifications such as those described here.
+ * @updated 2004-01-25
+ */
+
+// UserInfo Keys for Registration
+#pragma mark UserInfo Keys for Registration
+
+/*! @group Registration userInfo keys */
+/* @abstract Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification.
+ * @discussion The values of these keys describe the application and the
+ * notifications it may post.
+ *
+ * Your application must register with Growl before it can post Growl
+ * notifications (and have them not be ignored). However, as of Growl 0.6,
+ * posting GROWL_APP_REGISTRATION notifications directly is no longer the
+ * preferred way to register your application. Your application should instead
+ * use Growl.framework's delegate system.
+ * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ * more information.
+ */
+
+/*! @defined GROWL_APP_NAME
+ * @abstract The name of your application.
+ * @discussion The name of your application. This should remain stable between
+ * different versions and incarnations of your application.
+ * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
+ * "SurfWriter Lite" are not.
+ */
+#define GROWL_APP_NAME XSTR("ApplicationName")
+/*! @defined GROWL_APP_ID
+ * @abstract The bundle identifier of your application.
+ * @discussion The bundle identifier of your application. This key should
+ * be unique for your application while there may be several applications
+ * with the same GROWL_APP_NAME.
+ * This key is optional.
+ */
+#define GROWL_APP_ID XSTR("ApplicationId")
+/*! @defined GROWL_APP_ICON
+ * @abstract The image data for your application's icon.
+ * @discussion Image data representing your application's icon. This may be
+ * superimposed on a notification icon as a badge, used as the notification
+ * icon when a notification-specific icon is not supplied, or ignored
+ * altogether, depending on the display. Must be in a format supported by
+ * NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_APP_ICON XSTR("ApplicationIcon")
+/*! @defined GROWL_NOTIFICATIONS_DEFAULT
+ * @abstract The array of notifications to turn on by default.
+ * @discussion These are the names of the notifications that should be enabled
+ * by default when your application registers for the first time. If your
+ * application reregisters, Growl will look here for any new notification
+ * names found in GROWL_NOTIFICATIONS_ALL, but ignore any others.
+ */
+#define GROWL_NOTIFICATIONS_DEFAULT XSTR("DefaultNotifications")
+/*! @defined GROWL_NOTIFICATIONS_ALL
+ * @abstract The array of all notifications your application can send.
+ * @discussion These are the names of all of the notifications that your
+ * application may post. See GROWL_NOTIFICATION_NAME for a discussion of good
+ * notification names.
+ */
+#define GROWL_NOTIFICATIONS_ALL XSTR("AllNotifications")
+/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS
+ * @abstract A dictionary of human-readable names for your notifications.
+ * @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL
+ * which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display.
+ * The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions.
+ * For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed.
+ *
+ * This key is optional.
+ */
+#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES XSTR("HumanReadableNames")
+/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS
+* @abstract A dictionary of descriptions of _when_ each notification occurs
+* @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
+* descriptions of _when_ each notification occurs, such as "You received a new mail message" or
+* "A file finished downloading".
+*
+* This key is optional.
+*/
+#define GROWL_NOTIFICATIONS_DESCRIPTIONS XSTR("NotificationDescriptions")
+
+/*! @defined GROWL_TICKET_VERSION
+ * @abstract The version of your registration ticket.
+ * @discussion Include this key in a ticket plist file that you put in your
+ * application bundle for auto-discovery. The current ticket version is 1.
+ */
+#define GROWL_TICKET_VERSION XSTR("TicketVersion")
+// UserInfo Keys for Notifications
+#pragma mark UserInfo Keys for Notifications
+
+/*! @group Notification userInfo keys */
+/* @abstract Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification.
+ * @discussion The values of these keys describe the content of a Growl
+ * notification.
+ *
+ * Not all of these keys are supported by all displays. Only the name, title,
+ * and description of a notification are universal. Most of the built-in
+ * displays do support all of these keys, and most other visual displays
+ * probably will also. But, as of 0.6, the Log, MailMe, and Speech displays
+ * support only textual data.
+ */
+
+/*! @defined GROWL_NOTIFICATION_NAME
+ * @abstract The name of the notification.
+ * @discussion The name of the notification. Note that if you do not define
+ * GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name
+ * will the one displayed within the Growl preference pane and should be human-readable.
+ */
+#define GROWL_NOTIFICATION_NAME XSTR("NotificationName")
+/*! @defined GROWL_NOTIFICATION_TITLE
+ * @abstract The title to display in the notification.
+ * @discussion The title of the notification. Should be very brief.
+ * The title usually says what happened, e.g. "Download complete".
+ */
+#define GROWL_NOTIFICATION_TITLE XSTR("NotificationTitle")
+/*! @defined GROWL_NOTIFICATION_DESCRIPTION
+ * @abstract The description to display in the notification.
+ * @discussion The description should be longer and more verbose than the title.
+ * The description usually tells the subject of the action,
+ * e.g. "Growl-0.6.dmg downloaded in 5.02 minutes".
+ */
+#define GROWL_NOTIFICATION_DESCRIPTION XSTR("NotificationDescription")
+/*! @defined GROWL_NOTIFICATION_ICON
+ * @discussion Image data for the notification icon. Must be in a format
+ * supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_ICON XSTR("NotificationIcon")
+/*! @defined GROWL_NOTIFICATION_APP_ICON
+ * @discussion Image data for the application icon, in case GROWL_APP_ICON does
+ * not apply for some reason. Must be in a format supported by NSImage, such
+ * as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_APP_ICON XSTR("NotificationAppIcon")
+/*! @defined GROWL_NOTIFICATION_PRIORITY
+ * @discussion The priority of the notification as an integer number from
+ * -2 to +2 (+2 being highest).
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_PRIORITY XSTR("NotificationPriority")
+/*! @defined GROWL_NOTIFICATION_STICKY
+ * @discussion A Boolean number controlling whether the notification is sticky.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_STICKY XSTR("NotificationSticky")
+/*! @defined GROWL_NOTIFICATION_CLICK_CONTEXT
+ * @abstract Identifies which notification was clicked.
+ * @discussion An identifier for the notification for clicking purposes.
+ *
+ * This will be passed back to the application when the notification is
+ * clicked. It must be plist-encodable (a data, dictionary, array, number, or
+ * string object), and it should be unique for each notification you post.
+ * A good click context would be a UUID string returned by NSProcessInfo or
+ * CFUUID.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_CLICK_CONTEXT XSTR("NotificationClickContext")
+
+/*! @defined GROWL_DISPLAY_PLUGIN
+ * @discussion The name of a display plugin which should be used for this notification.
+ * Optional. If this key is not set or the specified display plugin does not
+ * exist, the display plugin stored in the application ticket is used. This key
+ * allows applications to use different default display plugins for their
+ * notifications. The user can still override those settings in the preference
+ * pane.
+ */
+#define GROWL_DISPLAY_PLUGIN XSTR("NotificationDisplayPlugin")
+
+/*! @defined GROWL_NOTIFICATION_IDENTIFIER
+ * @abstract An identifier for the notification for coalescing purposes.
+ * Notifications with the same identifier fall into the same class; only
+ * the last notification of a class is displayed on the screen. If a
+ * notification of the same class is currently being displayed, it is
+ * replaced by this notification.
+ *
+ * Optional. Not supported by all display plugins.
+ */
+#define GROWL_NOTIFICATION_IDENTIFIER XSTR("GrowlNotificationIdentifier")
+
+/*! @defined GROWL_APP_PID
+ * @abstract The process identifier of the process which sends this
+ * notification. If this field is set, the application will only receive
+ * clicked and timed out notifications which originate from this process.
+ *
+ * Optional.
+ */
+#define GROWL_APP_PID XSTR("ApplicationPID")
+
+/*! @defined GROWL_NOTIFICATION_PROGRESS
+* @abstract If this key is set, it should contain a double value wrapped
+* in a NSNumber which describes some sort of progress (from 0.0 to 100.0).
+* If this is key is not set, no progress bar is shown.
+*
+* Optional. Not supported by all display plugins.
+*/
+#define GROWL_NOTIFICATION_PROGRESS XSTR("NotificationProgress")
+
+// Notifications
+#pragma mark Notifications
+
+/*! @group Notification names */
+/* @abstract Names of distributed notifications used by Growl.
+ * @discussion These are notifications used by applications (directly or
+ * indirectly) to interact with Growl, and by Growl for interaction between
+ * its components.
+ *
+ * Most of these should no longer be used in Growl 0.6 and later, in favor of
+ * Growl.framework's GrowlApplicationBridge APIs.
+ */
+
+/*! @defined GROWL_APP_REGISTRATION
+ * @abstract The distributed notification for registering your application.
+ * @discussion This is the name of the distributed notification that can be
+ * used to register applications with Growl.
+ *
+ * The userInfo dictionary for this notification can contain these keys:
+ * <ul>
+ * <li>GROWL_APP_NAME</li>
+ * <li>GROWL_APP_ICON</li>
+ * <li>GROWL_NOTIFICATIONS_ALL</li>
+ * <li>GROWL_NOTIFICATIONS_DEFAULT</li>
+ * </ul>
+ *
+ * No longer recommended as of Growl 0.6. An alternate method of registering
+ * is to use Growl.framework's delegate system.
+ * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
+ * more information.
+ */
+#define GROWL_APP_REGISTRATION XSTR("GrowlApplicationRegistrationNotification")
+/*! @defined GROWL_APP_REGISTRATION_CONF
+ * @abstract The distributed notification for confirming registration.
+ * @discussion The name of the distributed notification sent to confirm the
+ * registration. Used by the Growl preference pane. Your application probably
+ * does not need to use this notification.
+ */
+#define GROWL_APP_REGISTRATION_CONF XSTR("GrowlApplicationRegistrationConfirmationNotification")
+/*! @defined GROWL_NOTIFICATION
+ * @abstract The distributed notification for Growl notifications.
+ * @discussion This is what it all comes down to. This is the name of the
+ * distributed notification that your application posts to actually send a
+ * Growl notification.
+ *
+ * The userInfo dictionary for this notification can contain these keys:
+ * <ul>
+ * <li>GROWL_NOTIFICATION_NAME (required)</li>
+ * <li>GROWL_NOTIFICATION_TITLE (required)</li>
+ * <li>GROWL_NOTIFICATION_DESCRIPTION (required)</li>
+ * <li>GROWL_NOTIFICATION_ICON</li>
+ * <li>GROWL_NOTIFICATION_APP_ICON</li>
+ * <li>GROWL_NOTIFICATION_PRIORITY</li>
+ * <li>GROWL_NOTIFICATION_STICKY</li>
+ * <li>GROWL_NOTIFICATION_CLICK_CONTEXT</li>
+ * <li>GROWL_APP_NAME (required)</li>
+ * </ul>
+ *
+ * No longer recommended as of Growl 0.6. Three alternate methods of posting
+ * notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:],
+ * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and
+ * Growl_PostNotification.
+ */
+#define GROWL_NOTIFICATION XSTR("GrowlNotification")
+/*! @defined GROWL_SHUTDOWN
+* @abstract The distributed notification name that tells Growl to shutdown.
+* @discussion The Growl preference pane posts this notification when the
+* "Stop Growl" button is clicked.
+*/
+#define GROWL_SHUTDOWN XSTR("GrowlShutdown")
+/*! @defined GROWL_PING
+ * @abstract A distributed notification to check whether Growl is running.
+ * @discussion This is used by the Growl preference pane. If it receives a
+ * GROWL_PONG, the preference pane takes this to mean that Growl is running.
+ */
+#define GROWL_PING XSTR("Honey, Mind Taking Out The Trash")
+/*! @defined GROWL_PONG
+ * @abstract The distributed notification sent in reply to GROWL_PING.
+ * @discussion GrowlHelperApp posts this in reply to GROWL_PING.
+ */
+#define GROWL_PONG XSTR("What Do You Want From Me, Woman")
+/*! @defined GROWL_IS_READY
+ * @abstract The distributed notification sent when Growl starts up.
+ * @discussion GrowlHelperApp posts this when it has begin listening on all of
+ * its sources for new notifications. GrowlApplicationBridge (in
+ * Growl.framework), upon receiving this notification, reregisters using the
+ * registration dictionary supplied by its delegate.
+ */
+#define GROWL_IS_READY XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
+/*! @defined GROWL_NOTIFICATION_CLICKED
+ * @abstract The distributed notification sent when a supported notification is clicked.
+ * @discussion When a Growl notification with a click context is clicked on by
+ * the user, Growl posts this distributed notification.
+ * The GrowlApplicationBridge responds to this notification by calling a
+ * callback in its delegate.
+ */
+#define GROWL_NOTIFICATION_CLICKED XSTR("GrowlClicked!")
+#define GROWL_NOTIFICATION_TIMED_OUT XSTR("GrowlTimedOut!")
+
+/*! @group Other symbols */
+/* Symbols which don't fit into any of the other categories. */
+
+/*! @defined GROWL_KEY_CLICKED_CONTEXT
+ * @abstract Used internally as the key for the clickedContext passed over DNC.
+ * @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the
+ * click context that was supplied in the original notification.
+ */
+#define GROWL_KEY_CLICKED_CONTEXT XSTR("ClickedContext")
+/*! @defined GROWL_REG_DICT_EXTENSION
+ * @abstract The filename extension for registration dictionaries.
+ * @discussion The GrowlApplicationBridge in Growl.framework registers with
+ * Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION)
+ * and opening it in the GrowlHelperApp. This happens whether or not Growl is
+ * running; if it was stopped, it quits immediately without listening for
+ * notifications.
+ */
+#define GROWL_REG_DICT_EXTENSION XSTR("growlRegDict")
+
+
+#define GROWL_POSITION_PREFERENCE_KEY @"GrowlSelectedPosition"
+
+#endif //ndef _GROWLDEFINES_H
diff --git a/Frameworks/Growl.framework/Versions/A/Resources/Info.plist b/Frameworks/Growl.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 00000000..38bfb237
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,24 @@
+<?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>CFBundleExecutable</key>
+ <string>Growl</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.growl.growlframework</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.1.4</string>
+ <key>CFBundleSignature</key>
+ <string>GRRR</string>
+ <key>CFBundleVersion</key>
+ <string>1.1.4</string>
+ <key>NSPrincipalClass</key>
+ <string>GrowlApplicationBridge</string>
+</dict>
+</plist>
diff --git a/Frameworks/Growl.framework/Versions/Current b/Frameworks/Growl.framework/Versions/Current
new file mode 120000
index 00000000..8c7e5a66
--- /dev/null
+++ b/Frameworks/Growl.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/Headers b/Frameworks/MCPKit_bundled.framework/Headers
new file mode 120000
index 00000000..fc757d7c
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers/ \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/MCPKit_bundled b/Frameworks/MCPKit_bundled.framework/MCPKit_bundled
new file mode 120000
index 00000000..88bf2d87
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/MCPKit_bundled
@@ -0,0 +1 @@
+Versions/Current/MCPKit_bundled \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/PrivateHeaders b/Frameworks/MCPKit_bundled.framework/PrivateHeaders
new file mode 120000
index 00000000..834d4c04
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/PrivateHeaders
@@ -0,0 +1 @@
+Versions/Current/PrivateHeaders/ \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/Resources b/Frameworks/MCPKit_bundled.framework/Resources
new file mode 120000
index 00000000..089faccc
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Resources
@@ -0,0 +1 @@
+Versions/Current/Resources/ \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPAttribute.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPAttribute.h
new file mode 100644
index 00000000..7044718d
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPAttribute.h
@@ -0,0 +1,104 @@
+//
+// MCPAttribute.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+
+#import <Foundation/Foundation.h>
+
+@class MCPModel;
+@class MCPClassDescription;
+@class MCPRelation;
+@class MCPJoin;
+
+
+@interface MCPAttribute : NSObject < NSCoding > {
+@protected
+ MCPClassDescription *classDescription; // ClassDescription of which the attribute is attribute
+ NSString *name; // Name of the attribute (Obj-C side)
+ Class valueClass; // Class used by the attribute (or NULL if the internal type is not an object)
+ NSString *internalType; // Name of the class, or type used for the class definition
+ NSString *externalName; // Name of the corresponding column in the DB
+ NSString *externalType; // Type used to store the attribute (in the DB)
+ unsigned int width; // Width (for storing by the DB)
+ BOOL allowsNull; // Attribute can be null
+ BOOL autoGenerated; // Attribute is auto generated by the DB
+ BOOL isPartOfKey; // Attribute is part of theprimary key of the class description
+ BOOL isPartOfIdentity; // Attribute is part of the idclass description of the class description
+ BOOL hasAccessor; // Does this attribute have an accessor
+ id defaultValue; // Default value of the attribute
+ NSMutableArray *joins; // An array of the joins using this attribute
+// NSMutableArray *relations; // An array of the relations (MCPRelation) that use this attribue as join
+}
+
+#pragma mark Class methods
++ (void) initialize;
+
+#pragma mark Life cycle
+- (id) initForClassDescription:(MCPClassDescription *) iClassDescription withName:(NSString *) iName;
+- (void) dealloc;
+
+#pragma mark NSCoding protocol
+- (id) initWithCoder:(NSCoder *) decoder;
+- (void) encodeWithCoder:(NSCoder *) encoder;
+
+#pragma mark Setters
+- (void) setName:(NSString *) iName;
+- (void) setValueClass:(Class) iValueClass;
+- (void) setInternalType:(NSString *) iInternalType;
+- (void) setExternalType:(NSString *) iExternalType;
+- (void) setExternalName:(NSString *) iExternalName;
+- (void) setWidth:(unsigned int) iWidth;
+- (void) setAllowsNull:(BOOL) iAllowsNull;
+- (void) setAutoGenerated:(BOOL) iAutoGenerated;
+- (void) setIsPartOfKey:(BOOL) iIsPartOfKey;
+- (void) setIsPartOfIdentity:(BOOL) iIsPartOfIdentity;
+- (void) setHasAccessor:(BOOL) iHasAccessor;
+- (void) setDefaultValue:(id) iDefaultValue;
+- (void) insertObject:(MCPJoin *) iJoin inJoinsAtIndex:(unsigned int) index;
+- (void) removeObjectFromJoinsAtIndex:(unsigned int) index;
+//- (void) addRelation:(MCPRelation *) iRelation;
+//- (void) removeRelation:(MCPRelation *) iRelation;
+
+#pragma mark Getters
+- (MCPClassDescription *) classDescription;
+- (NSString *) name;
+- (Class) valueClass;
+- (NSString *) valueClassName;
+- (NSString *) internalType;
+- (NSString *) externalName;
+- (NSString *) externalType;
+- (unsigned int) width;
+- (BOOL) allowsNull;
+- (BOOL) autoGenerated;
+- (BOOL) isPartOfKey;
+- (BOOL) isPartOfIdentity;
+- (BOOL) hasAccessor;
+- (id) defaultValue;
+- (unsigned int) countOfJoins;
+- (MCPJoin *) objectInJoinsAtIndex:(unsigned int) index;
+- (unsigned int) indexOfJoinIdenticalTo:(id) iJoin;
+
+#pragma mark Some general methods:
+- (BOOL) isEqual:(id) iObject;
+
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription+MCPEntreprise.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription+MCPEntreprise.h
new file mode 100644
index 00000000..a41a4617
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription+MCPEntreprise.h
@@ -0,0 +1,42 @@
+//
+// MCPClassDescription+MCPEntreprise.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 01/11/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import <Foundation/Foundation.h>
+#import "MCPClassDescription.h"
+
+@interface MCPClassDescription (MCPEntreprise)
+
+#pragma mark Pseudo getters (for NSClassDescription overload)
+- (NSArray *) attributeKeys;
+- (NSString *) inverseRelationshipKey:(NSString *) relationshipKey;
+- (NSArray *) toManyRelationshipKeys;
+- (NSArray *) toOneRelationshipKeys;
+
+#pragma mark Specifics for MCPObject
+- (NSArray *) primaryKeyAttributes;
+- (NSArray *) identityAttributes;
+- (MCPAttribute *) attributeWithName: (NSString *) iName;
+- (MCPRelation *) relationWithName:(NSString *) iRelationName;
+- (BOOL) singleIntAutoGenKey;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription.h
new file mode 100644
index 00000000..26ca382e
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPClassDescription.h
@@ -0,0 +1,91 @@
+//
+// MCPClassDescription.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+
+#import <Foundation/Foundation.h>
+
+@class MCPModel;
+@class MCPAttribute;
+@class MCPRelation;
+@class MCPRelation;
+
+@interface MCPClassDescription : NSClassDescription < NSCoding > {
+@protected
+ MCPModel *model; // The model where we stand
+ NSString *name; // Name of the class (can not use className, as it is already used by NSObject).
+ NSString *externalName; // Name of the table for storage
+ NSMutableArray *attributes; // array of the attributes of the class description
+ NSMutableArray *relations; // array of the relations of the class description (both origin and destination)
+ NSMutableArray *incomings; // array if the INCOMMING relation (just to be sure we are able to invalidate those if necessary)
+ Class representedClass; // the class object that the description represents.
+}
+
+#warning hasSingleIntAutoGenKey should be a method returning the obvious (from the name).
+// This correspond to the method singleIntAutoGenKey in the category MCPEntreprise... which name should I change...
+
+#pragma mark Class methods
++ (void) initialize;
+
+#pragma mark Life cycle
+- (id) initInModel:(MCPModel *) iModel withName:(NSString *) iName;
+- (void) dealloc;
+
+#pragma mark NSCoding protocol
+- (id) initWithCoder:(NSCoder *) decoder;
+- (void) encodeWithCoder:(NSCoder *) encoder;
+
+#pragma mark Making new attributes and relations
+- (MCPAttribute *) addNewAttributeWithName:(NSString *) iName inPosition:(int) index;
+- (MCPRelation *) addNewRelationTo:(MCPClassDescription *) iTo name:(NSString *) iName inPostion:(int) index;
+
+#pragma mark Setters
+- (void) setName:(NSString *) iName;
+- (void) setExternalName:(NSString *) iExternalName;
+- (void) insertObject:(MCPAttribute *) iAttribute inAttributesAtIndex:(unsigned int) index;
+- (void) removeObjectFromAttributesAtIndex:(unsigned int) index;
+- (void) insertObject:(MCPRelation *) iRelation inRelationsAtIndex:(unsigned int) index;
+- (void) removeObjectFromRelationsAtIndex:(unsigned int) index;
+
+#pragma mark Getters
+- (MCPModel *) model;
+- (NSString *) name;
+- (NSString *) externalName;
+- (NSArray *) attributes;
+- (unsigned int) countOfAttributes;
+- (MCPAttribute *) objectInAttributesAtIndex:(unsigned int) index;
+- (unsigned int) indexOfAttribute:(id) iAttribute;
+- (NSArray *) relations;
+- (unsigned int) countOfRelations;
+- (MCPRelation *) objectInRelationsAtIndex:(unsigned int) index;
+- (unsigned int) indexOfRelation:(id) iRelation;
+- (Class) representedClass;
+
+#pragma mark Some general methods:
+- (BOOL) isEqual:(id) iObject;
+
+#pragma mark Output for logging
+- (NSString *) descriptionWithLocale:(NSDictionary *) locale;
+//- (NSString *) descriptionWithLocale:(NSDictionary *) locale;
+//- (NSString *) description;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnection.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnection.h
new file mode 100644
index 00000000..5b2f2eaf
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnection.h
@@ -0,0 +1,158 @@
+//
+// MCPConnection.h
+// SMySQL
+//
+// Created by serge cohen (serge.cohen@m4x.org) on Sat Dec 08 2001.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPConnection.h 335 2006-01-08 21:14:07Z serge $
+// $Author: serge $
+
+
+#import <Foundation/Foundation.h>
+#import "mysql.h"
+#import "MCPConstants.h"
+
+
+@class MCPResult;
+
+// Deafult connection option
+extern const unsigned int kMCPConnectionDefaultOption;
+
+// Default socket (from the mysql.h used at compile time)
+extern const char *kMCPConnectionDefaultSocket;
+
+// Added to mysql error code
+extern const unsigned int kMCPConnectionNotInited;
+
+// The length of the truncation if required:
+extern const unsigned int kLengthOfTruncationForLog;
+
+@interface MCPConnection : NSObject {
+@protected
+ MYSQL *mConnection; /*"The inited MySQL connection."*/
+ BOOL mConnected; /*"Reflect the fact that the connection is already in place or not."*/
+ NSStringEncoding mEncoding; /*"The encoding used by MySQL server, to ISO-1 default."*/
+ NSTimeZone *mTimeZone; /*"The time zone of the session."*/
+ unsigned int mConnectionFlags; /*"The flags to be used for the connection to the database."*/
+}
+/*"
+Getting default of MySQL
+"*/
++ (NSDictionary *) getMySQLLocales;
++ (NSStringEncoding) encodingForMySQLEncoding:(const char *) mysqlEncoding;
++ (NSStringEncoding) defaultMySQLEncoding;
+
+/*"
+Class maintenance
+"*/
++ (void) initialize;
++ (void) setLogQueries:(BOOL) iLogFlag;
++ (void) setTruncateLongFieldInLogs:(BOOL) iTruncFlag;
++ (BOOL) truncateLongField;
+
+/*"
+Initialisation
+"*/
+- (id) init;
+// Port to 0 to use the default port
+- (id) initToHost:(NSString *) host withLogin:(NSString *) login password:(NSString *) pass usingPort:(int) port;
+- (id) initToSocket:(NSString *) socket withLogin:(NSString *) login password:(NSString *) pass;
+
+- (BOOL) setConnectionOption:(int) option toValue:(BOOL) value;
+// Port to 0 to use the default port
+- (BOOL) connectWithLogin:(NSString *) login password:(NSString *) pass host:(NSString *) host port:(int) port socket:(NSString *) socket;
+
+- (BOOL) selectDB:(NSString *) dbName;
+
+/*"
+Errors information
+"*/
+
+- (NSString *) getLastErrorMessage;
+- (unsigned int) getLastErrorID;
+- (BOOL) isConnected;
+- (BOOL) checkConnection;
+
+/*"
+Queries
+"*/
+
+- (NSString *) prepareBinaryData:(NSData *) theData;
+- (NSString *) prepareString:(NSString *) theString;
+- (NSString *) quoteObject:(id) theObject;
+
+- (MCPResult *) queryString:(NSString *) query;
+
+- (my_ulonglong) affectedRows;
+- (my_ulonglong) insertId;
+
+
+/*"
+Getting description of the database structure
+"*/
+- (MCPResult *) listDBs;
+- (MCPResult *) listDBsLike:(NSString *) dbsName;
+- (MCPResult *) listTables;
+- (MCPResult *) listTablesLike:(NSString *) tablesName;
+// Next method uses SHOW TABLES FROM db to be sure that the db is not changed during this call.
+- (MCPResult *) listTablesFromDB:(NSString *) dbName like:(NSString *) tablesName;
+- (MCPResult *) listFieldsFromTable:(NSString *) tableName;
+- (MCPResult *) listFieldsFromTable:(NSString *) tableName like:(NSString *) fieldsName;
+
+
+/*"
+Server information and control
+"*/
+
+- (NSString *) clientInfo;
+- (NSString *) hostInfo;
+- (NSString *) serverInfo;
+- (NSNumber *) protoInfo;
+- (MCPResult *) listProcesses;
+- (BOOL) killProcess:(unsigned long) pid;
+
+//- (BOOL)createDBWithName:(NSString *)dbName;
+//- (BOOL)dropDBWithName:(NSString *)dbName;
+
+/*"
+Disconnection
+"*/
+- (void) disconnect;
+- (void) dealloc;
+
+/*"
+String encoding concerns (C string type to NSString).
+It's unlikely that users of the framework needs to use these methods which are used internally
+"*/
+- (void) setEncoding:(NSStringEncoding) theEncoding;
+- (NSStringEncoding) encoding;
+
+- (const char *) cStringFromString:(NSString *) theString;
+- (NSString *) stringWithCString:(const char *) theCString;
+
+/*"
+Text data convertion to string
+"*/
+- (NSString *) stringWithText:(NSData *) theTextData;
+
+/*" Time Zone handling ."*/
+- (void) setTimeZone:(NSTimeZone *) iTimeZone;
+- (NSTimeZone *) timeZone;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnectionWinCont.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnectionWinCont.h
new file mode 100644
index 00000000..98195e9f
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConnectionWinCont.h
@@ -0,0 +1,52 @@
+//
+// MCPConnectionWinCont.h
+// Vacations
+//
+// Created by Serge Cohen on Mon May 26 2003.
+// Copyright (c) 2003 ARP/wARP. All rights reserved.
+//
+
+#import <AppKit/AppKit.h>
+
+// External classes, forward reference.
+@class MCPDocument;
+
+
+@interface MCPConnectionWinCont : NSWindowController
+{
+ IBOutlet NSTextField *mHostField;
+ IBOutlet NSTextField *mLoginField;
+ IBOutlet NSTextField *mDatabaseField;
+ IBOutlet NSTextField *mPortField;
+
+ IBOutlet NSPanel *mPasswordSheet;
+ IBOutlet NSTextField *mPasswordField;
+
+ IBOutlet NSButton *mCreateButton;
+// MCPDocument *mMCPDocument;
+}
+
+
+/*" Actions for Interface Builder "*/
+/*" For the clear text information. "*/
+- (IBAction) doGo:(id) sender;
+- (IBAction) doCancel:(id) sender;
+- (IBAction) doCreate:(id) sender;
+- (IBAction) modifyInstance:(id) sender;
+
+
+/*" For the password. "*/
+- (IBAction) passwordClick:(id) sender;
+- (IBAction) askPassword:(id) sender;
+- (NSString *) Password;
+
+
+/*" Overrides of NSWindowController method, to adapt to this Window Controller. "*/
+- (id) init;
+- (void) dealloc;
+- (void) windowDidLoad;
+
+/*" Getting the button for creating a DB. "*/
+- (NSButton*) getCreateButton;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConstants.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConstants.h
new file mode 100644
index 00000000..cccdfe8c
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPConstants.h
@@ -0,0 +1,33 @@
+//
+// MCPConstants.h
+// SMySQL
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on Mon Jun 03 2002.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPConstants.h 335 2006-01-08 21:14:07Z serge $
+// $Author: serge $
+
+
+typedef enum {
+ MCPTypeArray = 1,
+ MCPTypeDictionary = 2,
+ MCPTypeFlippedArray = 3,
+ MCPTypeFlippedDictionary = 4
+} MCPReturnType;
+
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPDocument.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPDocument.h
new file mode 100644
index 00000000..28f375da
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPDocument.h
@@ -0,0 +1,95 @@
+//
+// MCPDocument.h
+// Vacations
+//
+// Created by Serge Cohen on Sat May 24 2003.
+// Copyright (c) 2003 ARP/wARP. All rights reserved.
+//
+
+
+#import <Cocoa/Cocoa.h>
+
+// External classes, forward reference.
+@class MCPConnection;
+@class MCPResult;
+
+
+@interface MCPDocument : NSDocument
+{
+ BOOL MCPConInfoNeeded, MCPPassNeeded;
+ NSString *MCPHost, *MCPLogin, *MCPDatabase;
+ unsigned int MCPPort;
+ MCPConnection *MCPConnect;
+
+// Handling of windows.
+ NSWindowController *MCPMainWinCont;
+ Class MCPConnectedWinCont; /*" Window controller used once the connection is established (As a class). "*/
+// Handling the DB creation state.
+ NSString *MCPModelName;
+ BOOL MCPWillCreateNewDB;
+}
+
+/*" Class Maintenance "*/
++ (void) initialize;
+
+// Standards
+/*" Initialisation and deallocation "*/
+- (id) init;
+- (void) dealloc;
+
+/*" Connection to the databse related "*/
+- (MCPResult *) MCPqueryString:(NSString *) query;
+- (unsigned int) MCPinsertRow:(NSString *) insert;
+- (MCPConnection *) MCPgetConnection;
+
+// Accessors
+/*" Accessors to the parameters of the connection "*/
+- (void) setMCPHost:(NSString *) theHost;
+- (void) setMCPLogin:(NSString *) theLogin;
+- (void) setMCPDatabase:(NSString *) theDatabase;
+- (void) setMCPPort:(unsigned int) thePort;
+- (void) setMCPConInfoNeeded:(BOOL) theConInfoNeeded;
+
+- (NSString *) MCPHost;
+- (NSString *) MCPLogin;
+- (NSString *) MCPDatabase;
+- (unsigned int) MCPPort;
+- (BOOL) MCPConInfoNeeded;
+- (BOOL) MCPPassNeeded;
+
+- (BOOL) MCPisConnected;
+- (MCPConnection *) MCPConnect;
+
+/*" Accessor to the window generated once the connection is established "*/
+- (void) setMCPConnectedWinCont:(Class) theConnectedWinCont;
+
+- (Class) MCPConnectedWinCont;
+
+/*" Accessors to the main window (connection or connected window), through their window controller. "*/
+- (NSWindowController *) MCPMainWinCont;
+
+/*" Accessors to the DB creation instances. "*/
+- (void) setMCPModelName:(NSString *) theModelName;
+- (void) setMCPWillCreateNewDB:(BOOL) theWillCreateNewDB;
+
+- (NSString *) MCPModelName;
+- (BOOL) MCPWillCreateNewDB;
+
+/*" Practical creation of the database, from a model file. "*/
+- (BOOL) createModelDB;
+
+/*" Overrides of NSDocument methods. "*/
+// Managing the document in file format
+- (NSData *) dataRepresentationOfType:(NSString *) aType;
+- (BOOL)loadDataRepresentation:(NSData *) data ofType:(NSString *)aType;
+
+// Managing NSWindowController(s)
+- (NSArray *) makeWindowControllers;
+- (void) windowControllerDidLoadNib:(NSWindowController *) aController;
+
+/*" Method to take care of the password sheet. "*/
+// Callback from sheet
+- (void) MCPPasswordSheetDidEnd:(NSWindow *) sheet returnCode:(int) returnCode contextInfo:(void *) contextInfo;
+
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPEntrepriseNotifications.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPEntrepriseNotifications.h
new file mode 100644
index 00000000..824051e6
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPEntrepriseNotifications.h
@@ -0,0 +1,35 @@
+//
+// MCPEntrepriseNotifications.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+
+#import <Foundation/Foundation.h>
+
+// The instance are defined in MMDocument.h
+
+#pragma mark Name for notification
+
+extern NSString *MCPModelChangedNotification;
+extern NSString *MCPClassDescriptionChangedNotification;
+extern NSString *MCPAttributeChangedNotification;
+extern NSString *MCPRelationChangedNotification;
+
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPFastQueries.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPFastQueries.h
new file mode 100644
index 00000000..cea22a11
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPFastQueries.h
@@ -0,0 +1,47 @@
+//
+// MCPFastQueries.h
+// SMySQL
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on Mon Jun 03 2002.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPFastQueries.h 334 2006-01-08 20:32:38Z serge $
+// $Author: serge $
+
+#import <Foundation/Foundation.h>
+
+#import "MCPConnection.h"
+
+@interface MCPConnection (MCPFastQueries)
+/*"
+For insert queries, get directly the Id of the newly inserted row
+"*/
+- (my_ulonglong) insertQuery:(NSString *) aQuery;
+- (my_ulonglong) updateQuery:(NSString *) aQuery;
+
+
+/*"
+Returns directly a proper NS object, or a collection (NSArray, NSDictionary...).
+"*/
+- (id) getFirstFieldFromQuery:(NSString *) aQuery;
+- (id) getFirstRowFromQuery:(NSString *) aQuery asType:(MCPReturnType) aType;
+- (id) getAllRowsFromQuery:(NSString *) aQuery asType:(MCPReturnType) aType;
+- (NSArray *) getQuery:(NSString *) aQuery colWithIndex:(unsigned int) aCol;
+- (NSArray *) getQuery:(NSString *) aQuery colWithName:(NSString *) aColName;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPJoin.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPJoin.h
new file mode 100644
index 00000000..4784a30b
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPJoin.h
@@ -0,0 +1,68 @@
+//
+// MCPJoin.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 18/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCPModel;
+@class MCPClassDescription;
+@class MCPAttribute;
+@class MCPRelation;
+@class MCPRelation;
+
+@interface MCPJoin : NSObject < NSCoding > {
+@protected
+// Note that NONE of these attributes are retained!!!
+// Instead all these objects are notified of the existence of the join
+// and are responsible to invalidate/delete it if necessary.
+ MCPRelation *relation;
+ MCPAttribute *origin;
+ MCPAttribute *destination;
+}
+
+#pragma mark Class methods
++ (void) initialize;
+
+#pragma mark Life cycle
+- (id) initForRelation:(MCPRelation *) iRelation from:(MCPAttribute *) iOrigin to:(MCPAttribute *) iDestination;
+- (void) invalidate;
+- (void) dealloc;
+
+#pragma mark NSCoding protocol
+- (id) initWithCoder:(NSCoder *) decoder;
+- (void) encodeWithCoder:(NSCoder *) encoder;
+
+#pragma mark Setters
+// No setter for relation : should be set at init time!
+- (void) setOrigin:(MCPAttribute *) iOrigin;
+- (void) setDestination:(MCPAttribute *) iDestination;
+
+#pragma mark Getters
+- (MCPRelation *) relation;
+- (MCPAttribute *) origin;
+- (MCPAttribute *) destination;
+- (unsigned int) index;
+
+#pragma mark Some general methods:
+- (BOOL) isEqual:(id) iObject;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPKit_bundled.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPKit_bundled.h
new file mode 100644
index 00000000..3242a9dd
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPKit_bundled.h
@@ -0,0 +1,38 @@
+/*
+ * MCPKit_bundled.h
+ * MCPKit
+ *
+ * Created by serge cohen (serge.cohen@m4x.org) on Sat Dec 08 2001.
+ * Copyright (c) 2001 Serge Cohen.
+ *
+ * This code 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 any later version.
+ *
+ * This code 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.
+ *
+ * For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+ * write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * More info at <http://mysql-cocoa.sourceforge.net/>
+ *
+ *
+ * $Id: MCPKit_bundled.h 335 2006-01-08 21:14:07Z serge $
+ * $Author: serge $
+ */
+
+#import <Foundation/Foundation.h>
+
+#import <MCPKit_bundled/MCPConstants.h>
+#import <MCPKit_bundled/MCPNull.h>
+#import <MCPKit_bundled/MCPResult.h>
+#import <MCPKit_bundled/MCPConnection.h>
+#import <MCPKit_bundled/MCPNumber.h>
+#import <MCPKit_bundled/MCPResultPlus.h>
+#import <MCPKit_bundled/MCPFastQueries.h>
+#import "mysql.h"
+//#import <SMySQL/mysql.h>
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel+MCPEntreprise.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel+MCPEntreprise.h
new file mode 100644
index 00000000..069c9862
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel+MCPEntreprise.h
@@ -0,0 +1,32 @@
+//
+// MCPModel+MCPEntreprise.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 01/11/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import "MCPModel.h"
+
+@interface MCPModel (MCPEntreprise)
+
+#pragma mark Work as a class description server
+- (void) registerAsClassDescriptionServer;
+- (void) registerDescriptionForClass:(NSNotification *) notification;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel.h
new file mode 100644
index 00000000..362fed72
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPModel.h
@@ -0,0 +1,78 @@
+//
+// MCPModel.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCPClassDescription;
+@class MCPAttribute;
+@class MCPRelation;
+
+@interface MCPModel : NSObject < NSCoding > {
+@protected
+ NSString *name; // Name of the model ... useless.
+ NSMutableArray *classDescriptions; // Order of the class descriptions in the model.
+ BOOL usesInnoDBTables; // The database should use InnoDB tables.
+// Might add a string holding définition of tables.
+// Might also add some sort of template for generated files (at least the header).
+}
+
+#pragma mark Class methods
++ (void) initialize;
+
+#pragma mark Life cycle
+- (id) initWithName:(NSString *) iName;
+- (void) dealloc;
+
+#pragma mark NSCoding protocol
+- (id) initWithCoder:(NSCoder *) decoder;
+- (void) encodeWithCoder:(NSCoder *) encoder;
+
+#pragma mark Making new class description
+- (MCPClassDescription *) addNewClassDescriptionWithName:(NSString *) iName inPosition:(int) index;
+
+#pragma mark Setters
+- (void) setName:(NSString *) iName;
+- (void) setClassDescriptions:(NSArray *) iClassDescriptions;
+- (void) insertObject:(MCPClassDescription *) iClassDescription inClassDescriptionsAtIndex:(unsigned int) index;
+- (void) removeObjectFromClassDescriptionsAtIndex:(unsigned int) index;
+- (void) setUsesInnoDBTables:(BOOL) iUsesInnoDB;
+
+// Deprecated : non KVC
+//- (void) removeClassDescription:(MCPClassDescription *) iClassDescription;
+//- (void) addClassDescription:(MCPClassDescription *) iClassDescription;
+
+#pragma mark Getters
+- (NSString *) name;
+- (NSArray *) classDescriptions;
+- (unsigned int) countOfClassDescriptions;
+- (MCPClassDescription *) objectInClassDescriptionsAtIndex:(unsigned int) index;
+- (unsigned int) indexOfClassDescription:(id) iClassDescription;
+- (BOOL) usesInnoDBTables;
+
+// Deprecated : non KVC
+//- (MCPClassDescription *) classDescriptionWithClassName:(NSString *) iClassDescriptionClassName;
+
+#pragma mark Output for logging
+- (NSString *) descriptionWithLocale:(NSDictionary *) locale;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNull.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNull.h
new file mode 100644
index 00000000..1fa0babd
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNull.h
@@ -0,0 +1,36 @@
+//
+// MCPNull.h
+// SMySQL
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on Sun Jun 02 2002.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPNull.h 334 2006-01-08 20:32:38Z serge $
+// $Author: serge $
+
+#import <Foundation/Foundation.h>
+
+
+@interface NSObject (MCPNSNullTest)
+
+/*"
+Addin to NSObject.
+"*/
+- (BOOL) isNSNull;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNumber.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNumber.h
new file mode 100644
index 00000000..f4851e2a
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPNumber.h
@@ -0,0 +1,84 @@
+//
+// MCPNumber.h
+// NumberTest
+//
+// Created by serge cohen (serge.cohen@m4x.org) on Sat Dec 08 2001.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPNumber.h 334 2006-01-08 20:32:38Z serge $
+// $Author: serge $
+
+#import <Foundation/Foundation.h>
+
+
+@interface MCPNumber : NSNumber {
+ const char *typeCode;
+ NSNumber *number;
+}
+
+- (id) initWithChar:(char) value;
+- (id) initWithUnsignedChar:(unsigned char) value;
+- (id) initWithShort:(short) value;
+- (id) initWithUnsignedShort:(unsigned short) value;
+- (id) initWithInt:(int) value;
+- (id) initWithUnsignedInt:(unsigned int) value;
+- (id) initWithLong:(long) value;
+- (id) initWithUnsignedLong:(unsigned long) value;
+- (id) initWithLongLong:(long long) value;
+- (id) initWithUnsignedLongLong:(unsigned long long) value;
+- (id) initWithFloat:(float) value;
+- (id) initWithDouble:(double) value;
+- (id) initWithBool:(BOOL) value;
+
++ (MCPNumber *) numberWithChar:(char) value;
++ (MCPNumber *) numberWithUnsignedChar:(unsigned char) value;
++ (MCPNumber *) numberWithShort:(short) value;
++ (MCPNumber *) numberWithUnsignedShort:(unsigned short) value;
++ (MCPNumber *) numberWithInt:(int) value;
++ (MCPNumber *) numberWithUnsignedInt:(unsigned int) value;
++ (MCPNumber *) numberWithLong:(long) value;
++ (MCPNumber *) numberWithUnsignedLong:(unsigned long) value;
++ (MCPNumber *) numberWithLongLong:(long long) value;
++ (MCPNumber *) numberWithUnsignedLongLong:(unsigned long long) value;
++ (MCPNumber *) numberWithFloat:(float) value;
++ (MCPNumber *) numberWithDouble:(double) value;
++ (MCPNumber *) numberWithBool:(BOOL) value;
+
+- (void) dealloc;
+
+/*" Most important : NSNumber primitive methods: "*/
+- (const char *) objCType;
+- (void) getValue:(void *) buffer;
+
+//- (NSString *) descriptionWithLocale:(NSDictionary *) aLocale; // Not Primitive, but buggy...
+
+- (char) charValue;
+- (unsigned char) unsignedCharValue;
+- (short) shortValue;
+- (unsigned short) unsignedShortValue;
+- (int) intValue;
+- (unsigned int) unsignedIntValue;
+- (long) longValue;
+- (unsigned long) unsignedLongValue;
+- (long long) longLongValue;
+- (unsigned long long) unsignedLongLongValue;
+- (float) floatValue;
+- (double) doubleValue;
+- (BOOL) boolValue;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPObject.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPObject.h
new file mode 100644
index 00000000..2496180a
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPObject.h
@@ -0,0 +1,106 @@
+//
+// MCPObject.h
+// MCPKit
+//
+// Created by Serge Cohen on Wed May 19 2004.
+// Copyright (c) 2004 Serge Cohen. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/*" Possible return code on some operations of the database interaction. "*/
+typedef enum {
+ MCPDBReturnUnknown = 0, /*"Unknown state, should not happen."*/
+ MCPDBReturnDeleted = 1, /*"The entry have been successfuly deleted from DB."*/
+ MCPDBReturnUsed = 2, /*"The entry can not be removed, because some entries are still connected to it (some delete restrict/inhibit delete)."*/
+ MCPDBReturnNone = 3, /*"No entry exist with this Id."*/
+ MCPDBReturnNew = 4, /*"The entry was indeed new and inserted in the database."*/
+ MCPDBReturnUpdated = 5, /*"The entry was updated in the DB."*/
+ MCPDBReturnIncompleteKey = 6, /*"Part of the primary key is missing, action not taken."*/
+ MCPDBReturnMultiple = 7, /*"Multiple rows are found with a query supposed to return at most one row."*/
+ MCPDBReturnNoIdentity = 8, /*"The object does not have attributes that defines identity."*/
+ MCPDBReturnNoKey = 9, /*"There is no primary key defined for this entity."*/
+ MCPDBReturnNoConnection = 10, /*"The MCPObject is not having a connection."*/
+ MCPDBReturnWrongRelationOrigin = 11, /*"Looking for a relation not which origin is not of the specified class."*/
+ MCPDBReturnWrongRelationCardinality = 12, /*"Using a method assuming a cardinality of the relation while the relation as the other one."*/
+ MCPDBReturnNoSuchRelation = 13, /*"There is no relation with such a name starting from this class."*/
+ MCPDBReturnNotTarget = 14, /*"Tried to remove an object from a relation, while the objects does NOT belong to the relation."*/
+ MCPDBReturnOK = 100 /*"Everything went OK."*/
+} MCPDBReturnCode;
+
+@class MCPConnection;
+@class MCPClassDescription;
+@class MCPRelation;
+
+@interface MCPObject : NSObject {
+ MCPClassDescription *classDescription;
+ MCPConnection *connection;
+}
+
+#pragma mark Life of the Object
+/*" Life of the object "*/
+- (id) init;
+- (id) initWithDictionary:(NSDictionary *) dictionary;
+
+- (void) dealloc;
+
+- (void) setAttributesToDefault;
+
+#pragma mark Accessors
+/*" Accessor(s) "*/
+- (MCPClassDescription *) classDescription;
+- (MCPConnection *) connection;
+
+- (void) setConnection:(MCPConnection *) iConnection;
+
+#pragma mark Database interface
+/*" Database interface "*/
+- (id) readFromDBRow:(NSDictionary *) iDictionary withTableName:(NSString *) iTableName;
+- (MCPDBReturnCode) setPrimaryKey:(id) iDictionary andFetchFromDB:(MCPConnection *) iConnection;
+//- (MCPDBReturnCode) setPrimaryKey:(NSDictionary *) iDictionary andFetchFromDB:(MCPConnection *) iConnection;
+- (NSDictionary *) checkDBId; // the returned dictionary contains a MCPDBReturnCode key with the return code.
+- (NSDictionary *) saveInDB; // the returned dictionary contains a MCPDBReturnCode key with the return code.
+- (MCPDBReturnCode) getAutoGenerated;
+- (MCPDBReturnCode) updateInDB;
+- (MCPDBReturnCode) deleteInDB;
++ (MCPDBReturnCode) deleteInDBUsingConnection:(MCPConnection *) iConnection withId:(id) iId;
+
+#pragma mark Handling relations
+/*" Handling realtions "*/
+- (id) getTargetOfRelation:(MCPRelation *) iRelation;
+- (id) getTargetOfRelationNamed:(NSString *) iRelationName;
+- (MCPDBReturnCode) setTarget:(id) iTarget forRelation:(MCPRelation *) iRelation;
+- (MCPDBReturnCode) setTarget:(id) iTarget forRelationNamed:(NSString *) iRelationName;
+- (unsigned int) countTargetForRelation:(MCPRelation *) iRelation;
+- (unsigned int) countTargetForRelationNamed:(NSString *) iRelationName;
+- (MCPObject *) getTargetOfRelation:(MCPRelation *) iRelation atIndex:(unsigned int) iIndex;
+- (MCPObject *) getTargetOfRelationNamed:(NSString *) iRelationName atIndex:(unsigned int) iIndex;
+- (MCPDBReturnCode) addTarget:(MCPObject *) iTarget toRelation:(MCPRelation *) iRelation;
+- (MCPDBReturnCode) addTarget:(MCPObject *) iTarget toRelationNamed:(NSString *) iRelationName;
+- (MCPDBReturnCode) removeTarget:(MCPObject *) iTarget toRelation:(MCPRelation *) iRelation;
+- (MCPDBReturnCode) removeTarget:(MCPObject *) iTarget toRelationNamed:(NSString *) iRelationName;
+- (MCPDBReturnCode) removeTargetToRelation:(MCPRelation *) iRelation atIndex:(unsigned int) iIndex;
+- (MCPDBReturnCode) removeTargetToRelationNamed:(NSString *) iRelationName atIndex:(unsigned int) iIndex;
+- (unsigned int) indexOfTarget:(MCPObject *) iTarget inRelation:(MCPRelation *) iRelation;
+- (unsigned int) indexOfTarget:(MCPObject *) iTarget inRelationNamed:(NSString *) iRelationName;
+
+#pragma mark Utilities
+/*" Utility methods "*/
+- (id) defaultValueForKey:(NSString *) iKey;
+- (NSDictionary *) primaryKey;
+
+/*" Testing equality (VERY important for relation management)"*/
+- (BOOL) isEqual:(id) iObject;
+
+#pragma mark Output
+/*" Output : "*/
+- (NSString *) description;
+- (NSString *) descriptionWithLocale:(NSDictionary *) locale;
+
+#pragma mark Ordering the array for relations
+- (NSString *) orderSQLForClassDescription:(MCPClassDescription *) iClassDescription;
+
+/*" Anti-crash method... "*/
+- (void) setNilValueForKey:(NSString *) iKey;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPRelation.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPRelation.h
new file mode 100644
index 00000000..fa359e2e
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPRelation.h
@@ -0,0 +1,109 @@
+//
+// MCPRelation.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 11/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+
+#import <Foundation/Foundation.h>
+
+@class MCPModel;
+@class MCPClassDescription;
+@class MCPAttribute;
+
+@class MCPJoin;
+
+typedef enum {
+ OnDeleteNullify = 1,
+ OnDeleteDeny = 2,
+ OnDeleteCascade = 3,
+ OnDeleteDefault = 4,
+ OnDeleteNoAction = 5
+} MCPRelationDeleteRule;
+
+
+@interface MCPRelation : NSObject < NSCoding > {
+@protected
+ NSString *name; // Name of the relation
+ MCPRelationDeleteRule deleteRule; // Delete rule : what to do of the destination when origin is deleted
+ MCPRelation *inverseRelation; // The inverse relation (or nil if no inverse present)
+ MCPClassDescription *origin; // The class description from which the relation originate
+ MCPClassDescription *destination; // The class description to which the relation arrives
+ NSMutableArray *joins; // Joining attributes (array of MCPJoin)
+ BOOL isToMany; // Is the relation to many (or to one)
+ BOOL isMandatory; // Is the relation mandatory for the class description (origin)
+ BOOL ownsDestination; // The origin class description owns the destination class description(ies)
+}
+
+#pragma mark Class methods
++ (void) initialize;
+
++ (NSArray *) existingDeleteRules;
+- (NSArray *) existingDeleteRules;
+
+#pragma mark Life cycle
+- (id) initWithName:(NSString *) iName from:(MCPClassDescription *) iFrom to:(MCPClassDescription *) iTo;
+- (void) invalidateRelation;
+- (void) dealloc;
+
+#pragma mark NSCoding protocol
+- (id) initWithCoder:(NSCoder *) decoder;
+- (void) encodeWithCoder:(NSCoder *) encoder;
+
+#pragma mark Managing joins
+//- (MCPJoin *) addNewJoin;
+- (MCPJoin *) addJoinFrom:(MCPAttribute *) iFrom to:(MCPAttribute *) iTo;
+- (void) removeJoinFrom:(MCPAttribute *) iFrom to:(MCPAttribute *) iTo;
+//- (void) unjoinAttribute:(MCPAttribute *) iAttribute;
+
+#pragma mark Setters
+- (void) setDestination:(MCPClassDescription *) iDestination;
+- (void) setName:(NSString *) iName;
+- (void) setDeleteRule:(MCPRelationDeleteRule) iDeleteRule;
+- (void) setInverseRelation:(MCPRelation *) iInverseRelation;
+- (void) insertObject:(MCPJoin *) iJoin inJoinsAtIndex:(unsigned int) index;
+- (void) removeObjectFromJoinsAtIndex:(unsigned int) index;
+- (void) setIsToMany:(BOOL) iIsToMany;
+- (void) setIsMandatory:(BOOL) iIsMandatory;
+- (void) setOwnsDestintation:(BOOL) iOwnsDestination;
+
+#pragma mark Getters
+- (NSString *) name;
+- (MCPRelationDeleteRule) deleteRule;
+- (MCPRelation *) inverseRelation;
+- (MCPClassDescription *) origin;
+- (MCPClassDescription *) destination;
+- (NSArray *) joins;
+- (unsigned int) countOfJoins;
+- (MCPJoin *) objectInJoinsAtIndex:(unsigned int) index;
+- (unsigned int) indexOfJoinIdenticalTo:(id) iJoin;
+- (BOOL) isToMany;
+- (BOOL) isMandatory;
+- (BOOL) ownsDestination;
+
+#pragma mark Some Usefull methods
+- (MCPAttribute *) destinationAttributeForOrigin:(MCPAttribute *) iFrom;
+- (MCPAttribute *) originAttributeForDestination:(MCPAttribute *) iTo;
+
+#pragma mark Some general methods:
+- (BOOL) isEqual:(id) iObject;
+- (NSString *) descriptionWithLocale:(NSDictionary *) locale;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResult.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResult.h
new file mode 100644
index 00000000..91b69fb5
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResult.h
@@ -0,0 +1,110 @@
+//
+// MCPResult.h
+// SMySQL
+//
+// Created by serge cohen (serge.cohen@m4x.org) on Sat Dec 08 2001.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPResult.h 335 2006-01-08 21:14:07Z serge $
+// $Author: serge $
+
+
+#import <Foundation/Foundation.h>
+#import "mysql.h"
+#import "MCPConstants.h"
+
+
+@interface MCPResult : NSObject {
+@protected
+ MYSQL_RES *mResult; /*" The MYSQL_RES structure of the C API. "*/
+ NSArray *mNames; /*" An NSArray holding the name of the columns. "*/
+ NSDictionary *mMySQLLocales; /*" A Locales dictionary to define the locales of MySQL. "*/
+ NSStringEncoding mEncoding; /*" The encoding used by MySQL server, to ISO-1 default. "*/
+ unsigned int mNumOfFields; /*" The number of fields in the result. "*/
+ NSTimeZone *mTimeZone; /*" The time zone of the connection when the query was made. "*/
+}
+/*"
+Class maintenance
+ "*/
+
++ (void) initialize;
+
+ /*"
+ Init used #{only} by #{MCPConnection}
+ "*/
+
+- (id) initWithMySQLPtr:(MYSQL *) mySQLPtr encoding:(NSStringEncoding) theEncoding timeZone:(NSTimeZone *) iTimeZone;
+- (id) initWithResPtr:(MYSQL_RES *) mySQLResPtr encoding:(NSStringEncoding) theEncoding timeZone:(NSTimeZone *) iTimeZone;
+- (id) init;
+
+ /*"
+ General info on the result
+ "*/
+
+- (my_ulonglong) numOfRows;
+- (unsigned int) numOfFields;
+
+ /*"
+ Getting the rows
+ "*/
+
+- (void) dataSeek:(my_ulonglong) row;
+
+- (id) fetchRowAsType:(MCPReturnType) aType;
+- (NSArray *) fetchRowAsArray;
+- (NSDictionary *) fetchRowAsDictionary;
+
+ /*"
+ Getting information on columns
+ "*/
+
+- (NSArray *) fetchFieldNames;
+
+- (id) fetchTypesAsType:(MCPReturnType) aType;
+- (NSArray *) fetchTypesAsArray;
+- (NSDictionary *) fetchTypesAsDictionary;
+
+- (unsigned int) fetchFlagsAtIndex:(unsigned int) index;
+- (unsigned int) fetchFlagsForKey:(NSString *) key;
+
+- (BOOL) isBlobAtIndex:(unsigned int) index;
+- (BOOL) isBlobForKey:(NSString *) key;
+
+ /*"
+ Text data convertion to string
+ "*/
+- (NSString *) stringWithText:(NSData *) theTextData;
+
+ /*"
+ Utility method
+ "*/
+- (NSString *) description;
+
+ /*"
+ End of the scope...
+ "*/
+
+- (void) dealloc;
+
+ /*"
+ Private methods, internal use only
+ "*/
+- (const char *) cStringFromString:(NSString *) theString;
+- (NSString *) stringWithCString:(const char *) theCString;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResultPlus.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResultPlus.h
new file mode 100644
index 00000000..28d6ff2f
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/MCPResultPlus.h
@@ -0,0 +1,43 @@
+//
+// MCPResultPlus.h
+// SMySQL
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on Mon Jun 03 2002.
+// Copyright (c) 2001 Serge Cohen.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+// $Id: MCPResultPlus.h 334 2006-01-08 20:32:38Z serge $
+// $Author: serge $
+
+#import <Foundation/Foundation.h>
+
+#import "MCPResult.h"
+
+@interface MCPResult (MCPResultPlus)
+
+/*"
+Getting a complete column as an array
+"*/
+- (NSArray *) fetchColAtIndex:(unsigned int) aCol;
+- (NSArray *) fetchColWithName:(NSString *) aColName;
+
+/*"
+Getting the complete result as 2D array
+"*/
+- (id) fetch2DResultAsType:(MCPReturnType) aType;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_alloc.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_alloc.h
new file mode 100644
index 00000000..a3dd35d7
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_alloc.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 2000 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+/*
+ Data structures for mysys/my_alloc.c (root memory allocator)
+*/
+
+#ifndef _my_alloc_h
+#define _my_alloc_h
+
+#define ALLOC_MAX_BLOCK_TO_DROP 4096
+#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10
+
+typedef struct st_used_mem
+{ /* struct for once_alloc (block) */
+ struct st_used_mem *next; /* Next block in use */
+ unsigned int left; /* memory left in block */
+ unsigned int size; /* size of block */
+} USED_MEM;
+
+
+typedef struct st_mem_root
+{
+ USED_MEM *free; /* blocks with free memory in it */
+ USED_MEM *used; /* blocks almost without free memory */
+ USED_MEM *pre_alloc; /* preallocated block */
+ /* if block have less memory it will be put in 'used' list */
+ unsigned int min_malloc;
+ unsigned int block_size; /* initial block size */
+ unsigned int block_num; /* allocated blocks counter */
+ /*
+ first free block in queue test counter (if it exceed
+ MAX_BLOCK_USAGE_BEFORE_DROP block will be droped in 'used' list)
+ */
+ unsigned int first_block_usage;
+
+ void (*error_handler)(void);
+} MEM_ROOT;
+#endif
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_list.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_list.h
new file mode 100644
index 00000000..f786621e
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/my_list.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2000 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef _list_h_
+#define _list_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct st_list {
+ struct st_list *prev,*next;
+ void *data;
+} LIST;
+
+typedef int (*list_walk_action)(void *,void *);
+
+extern LIST *list_add(LIST *root,LIST *element);
+extern LIST *list_delete(LIST *root,LIST *element);
+extern LIST *list_cons(void *data,LIST *root);
+extern LIST *list_reverse(LIST *root);
+extern void list_free(LIST *root,unsigned int free_data);
+extern unsigned int list_length(LIST *);
+extern int list_walk(LIST *,list_walk_action action,gptr argument);
+
+#define rest(a) ((a)->next)
+#define list_push(a,b) (a)=list_cons((b),(a))
+#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old) ; my_free((gptr) old,MYF(MY_FAE)); }
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql.h
new file mode 100644
index 00000000..d8a56126
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql.h
@@ -0,0 +1,738 @@
+/* Copyright (C) 2000-2003 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef _mysql_h
+#define _mysql_h
+
+#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */
+#undef WIN
+#undef _WIN
+#undef _WIN32
+#undef _WIN64
+#undef __WIN__
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _global_h /* If not standard header */
+#include <sys/types.h>
+#ifdef __LCC__
+#include <winsock.h> /* For windows */
+#endif
+typedef char my_bool;
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__)
+#define __WIN__
+#endif
+#if !defined(__WIN__)
+#define STDCALL
+#else
+#define STDCALL __stdcall
+#endif
+typedef char * gptr;
+
+#ifndef my_socket_defined
+#ifdef __WIN__
+#define my_socket SOCKET
+#else
+typedef int my_socket;
+#endif /* __WIN__ */
+#endif /* my_socket_defined */
+#endif /* _global_h */
+
+#include "mysql_com.h"
+#include "mysql_time.h"
+#include "mysql_version.h"
+#include "typelib.h"
+
+#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */
+
+extern unsigned int mysql_port;
+extern char *mysql_unix_port;
+
+#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */
+#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */
+
+#ifdef __NETWARE__
+#pragma pack(push, 8) /* 8 byte alignment */
+#endif
+
+#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
+#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
+#define IS_BLOB(n) ((n) & BLOB_FLAG)
+#define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR)
+#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG)
+#define INTERNAL_NUM_FIELD(f) (((f)->type <= FIELD_TYPE_INT24 && ((f)->type != FIELD_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == FIELD_TYPE_YEAR)
+
+
+typedef struct st_mysql_field {
+ char *name; /* Name of column */
+ char *org_name; /* Original column name, if an alias */
+ char *table; /* Table of column if column was a field */
+ char *org_table; /* Org table name, if table was an alias */
+ char *db; /* Database for table */
+ char *catalog; /* Catalog for table */
+ char *def; /* Default value (set by mysql_list_fields) */
+ unsigned long length; /* Width of column (create length) */
+ unsigned long max_length; /* Max width for selected set */
+ unsigned int name_length;
+ unsigned int org_name_length;
+ unsigned int table_length;
+ unsigned int org_table_length;
+ unsigned int db_length;
+ unsigned int catalog_length;
+ unsigned int def_length;
+ unsigned int flags; /* Div flags */
+ unsigned int decimals; /* Number of decimals in field */
+ unsigned int charsetnr; /* Character set */
+ enum enum_field_types type; /* Type of field. See mysql_com.h for types */
+} MYSQL_FIELD;
+
+typedef char **MYSQL_ROW; /* return data as array of strings */
+typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
+
+#ifndef _global_h
+#if defined(NO_CLIENT_LONG_LONG)
+typedef unsigned long my_ulonglong;
+#elif defined (__WIN__)
+typedef unsigned __int64 my_ulonglong;
+#else
+typedef unsigned long long my_ulonglong;
+#endif
+#endif
+
+#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
+
+typedef struct st_mysql_rows {
+ struct st_mysql_rows *next; /* list of rows */
+ MYSQL_ROW data;
+ unsigned long length;
+} MYSQL_ROWS;
+
+typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
+
+#include "my_alloc.h"
+
+typedef struct st_mysql_data {
+ my_ulonglong rows;
+ unsigned int fields;
+ MYSQL_ROWS *data;
+ MEM_ROOT alloc;
+#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY)
+ MYSQL_ROWS **prev_ptr;
+#endif
+} MYSQL_DATA;
+
+enum mysql_option
+{
+ MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE,
+ MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
+ MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE,
+ MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
+ MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
+ MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
+ MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH
+};
+
+struct st_mysql_options {
+ unsigned int connect_timeout, read_timeout, write_timeout;
+ unsigned int port, protocol;
+ unsigned long client_flag;
+ char *host,*user,*password,*unix_socket,*db;
+ struct st_dynamic_array *init_commands;
+ char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
+ char *ssl_key; /* PEM key file */
+ char *ssl_cert; /* PEM cert file */
+ char *ssl_ca; /* PEM CA file */
+ char *ssl_capath; /* PEM directory of CA-s? */
+ char *ssl_cipher; /* cipher to use */
+ char *shared_memory_base_name;
+ unsigned long max_allowed_packet;
+ my_bool use_ssl; /* if to use SSL or not */
+ my_bool compress,named_pipe;
+ /*
+ On connect, find out the replication role of the server, and
+ establish connections to all the peers
+ */
+ my_bool rpl_probe;
+ /*
+ Each call to mysql_real_query() will parse it to tell if it is a read
+ or a write, and direct it to the slave or the master
+ */
+ my_bool rpl_parse;
+ /*
+ If set, never read from a master, only from slave, when doing
+ a read that is replication-aware
+ */
+ my_bool no_master_reads;
+#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY)
+ my_bool separate_thread;
+#endif
+ enum mysql_option methods_to_use;
+ char *client_ip;
+ /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */
+ my_bool secure_auth;
+
+ /* function pointers for local infile support */
+ int (*local_infile_init)(void **, const char *, void *);
+ int (*local_infile_read)(void *, char *, unsigned int);
+ void (*local_infile_end)(void *);
+ int (*local_infile_error)(void *, char *, unsigned int);
+ void *local_infile_userdata;
+};
+
+enum mysql_status
+{
+ MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT
+};
+
+enum mysql_protocol_type
+{
+ MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
+ MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
+};
+/*
+ There are three types of queries - the ones that have to go to
+ the master, the ones that go to a slave, and the adminstrative
+ type which must happen on the pivot connectioin
+*/
+enum mysql_rpl_type
+{
+ MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
+};
+
+struct st_mysql_methods;
+
+typedef struct st_mysql
+{
+ NET net; /* Communication parameters */
+ gptr connector_fd; /* ConnectorFd for SSL */
+ char *host,*user,*passwd,*unix_socket,*server_version,*host_info,*info;
+ char *db;
+ struct charset_info_st *charset;
+ MYSQL_FIELD *fields;
+ MEM_ROOT field_alloc;
+ my_ulonglong affected_rows;
+ my_ulonglong insert_id; /* id if insert on table with NEXTNR */
+ my_ulonglong extra_info; /* Used by mysqlshow */
+ unsigned long thread_id; /* Id for connection in server */
+ unsigned long packet_length;
+ unsigned int port;
+ unsigned long client_flag,server_capabilities;
+ unsigned int protocol_version;
+ unsigned int field_count;
+ unsigned int server_status;
+ unsigned int server_language;
+ unsigned int warning_count;
+ struct st_mysql_options options;
+ enum mysql_status status;
+ my_bool free_me; /* If free in mysql_close */
+ my_bool reconnect; /* set to 1 if automatic reconnect */
+
+ /* session-wide random string */
+ char scramble[SCRAMBLE_LENGTH+1];
+
+ /*
+ Set if this is the original connection, not a master or a slave we have
+ added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
+ */
+ my_bool rpl_pivot;
+ /*
+ Pointers to the master, and the next slave connections, points to
+ itself if lone connection.
+ */
+ struct st_mysql* master, *next_slave;
+
+ struct st_mysql* last_used_slave; /* needed for round-robin slave pick */
+ /* needed for send/read/store/use result to work correctly with replication */
+ struct st_mysql* last_used_con;
+
+ LIST *stmts; /* list of all statements */
+ const struct st_mysql_methods *methods;
+ void *thd;
+ /*
+ Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
+ from mysql_stmt_close if close had to cancel result set of this object.
+ */
+ my_bool *unbuffered_fetch_owner;
+} MYSQL;
+
+typedef struct st_mysql_res {
+ my_ulonglong row_count;
+ MYSQL_FIELD *fields;
+ MYSQL_DATA *data;
+ MYSQL_ROWS *data_cursor;
+ unsigned long *lengths; /* column lengths of current row */
+ MYSQL *handle; /* for unbuffered reads */
+ MEM_ROOT field_alloc;
+ unsigned int field_count, current_field;
+ MYSQL_ROW row; /* If unbuffered read */
+ MYSQL_ROW current_row; /* buffer to current row */
+ my_bool eof; /* Used by mysql_fetch_row */
+ /* mysql_stmt_close() had to cancel this result */
+ my_bool unbuffered_fetch_cancelled;
+ const struct st_mysql_methods *methods;
+} MYSQL_RES;
+
+#define MAX_MYSQL_MANAGER_ERR 256
+#define MAX_MYSQL_MANAGER_MSG 256
+
+#define MANAGER_OK 200
+#define MANAGER_INFO 250
+#define MANAGER_ACCESS 401
+#define MANAGER_CLIENT_ERR 450
+#define MANAGER_INTERNAL_ERR 500
+
+#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT)
+#define MYSQL_CLIENT
+#endif
+
+
+typedef struct st_mysql_manager
+{
+ NET net;
+ char *host,*user,*passwd;
+ unsigned int port;
+ my_bool free_me;
+ my_bool eof;
+ int cmd_status;
+ int last_errno;
+ char* net_buf,*net_buf_pos,*net_data_end;
+ int net_buf_size;
+ char last_error[MAX_MYSQL_MANAGER_ERR];
+} MYSQL_MANAGER;
+
+typedef struct st_mysql_parameters
+{
+ unsigned long *p_max_allowed_packet;
+ unsigned long *p_net_buffer_length;
+} MYSQL_PARAMETERS;
+
+#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY)
+#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
+#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
+#endif
+
+/*
+ Set up and bring down the server; to ensure that applications will
+ work when linked against either the standard client library or the
+ embedded server library, these functions should be called.
+*/
+int STDCALL mysql_server_init(int argc, char **argv, char **groups);
+void STDCALL mysql_server_end(void);
+/*
+ mysql_server_init/end need to be called when using libmysqld or
+ libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
+ you don't need to call it explicitely; but you need to call
+ mysql_server_end() to free memory). The names are a bit misleading
+ (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general
+ names which suit well whether you're using libmysqld or libmysqlclient. We
+ intend to promote these aliases over the mysql_server* ones.
+*/
+#define mysql_library_init mysql_server_init
+#define mysql_library_end mysql_server_end
+
+MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void);
+
+/*
+ Set up and bring down a thread; these function should be called
+ for each thread in an application which opens at least one MySQL
+ connection. All uses of the connection(s) should be between these
+ function calls.
+*/
+my_bool STDCALL mysql_thread_init(void);
+void STDCALL mysql_thread_end(void);
+
+/*
+ Functions to get information from the MYSQL and MYSQL_RES structures
+ Should definitely be used if one uses shared libraries.
+*/
+
+my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
+unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
+my_bool STDCALL mysql_eof(MYSQL_RES *res);
+MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res,
+ unsigned int fieldnr);
+MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
+MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res);
+MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res);
+
+unsigned int STDCALL mysql_field_count(MYSQL *mysql);
+my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
+my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
+unsigned int STDCALL mysql_errno(MYSQL *mysql);
+const char * STDCALL mysql_error(MYSQL *mysql);
+const char *STDCALL mysql_sqlstate(MYSQL *mysql);
+unsigned int STDCALL mysql_warning_count(MYSQL *mysql);
+const char * STDCALL mysql_info(MYSQL *mysql);
+unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
+const char * STDCALL mysql_character_set_name(MYSQL *mysql);
+
+MYSQL * STDCALL mysql_init(MYSQL *mysql);
+my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
+ const char *cert, const char *ca,
+ const char *capath, const char *cipher);
+my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
+ const char *passwd, const char *db);
+MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
+ const char *user,
+ const char *passwd,
+ const char *db,
+ unsigned int port,
+ const char *unix_socket,
+ unsigned long clientflag);
+int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
+int STDCALL mysql_query(MYSQL *mysql, const char *q);
+int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
+MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
+
+/* perform query on master */
+my_bool STDCALL mysql_master_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+my_bool STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+/* perform query on slave */
+my_bool STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+
+/* local infile support */
+
+#define LOCAL_INFILE_ERROR_LEN 512
+
+void
+mysql_set_local_infile_handler(MYSQL *mysql,
+ int (*local_infile_init)(void **, const char *,
+ void *),
+ int (*local_infile_read)(void *, char *,
+ unsigned int),
+ void (*local_infile_end)(void *),
+ int (*local_infile_error)(void *, char*,
+ unsigned int),
+ void *);
+
+void
+mysql_set_local_infile_default(MYSQL *mysql);
+
+
+/*
+ enable/disable parsing of all queries to decide if they go on master or
+ slave
+*/
+void STDCALL mysql_enable_rpl_parse(MYSQL* mysql);
+void STDCALL mysql_disable_rpl_parse(MYSQL* mysql);
+/* get the value of the parse flag */
+int STDCALL mysql_rpl_parse_enabled(MYSQL* mysql);
+
+/* enable/disable reads from master */
+void STDCALL mysql_enable_reads_from_master(MYSQL* mysql);
+void STDCALL mysql_disable_reads_from_master(MYSQL* mysql);
+/* get the value of the master read flag */
+my_bool STDCALL mysql_reads_from_master_enabled(MYSQL* mysql);
+
+enum mysql_rpl_type STDCALL mysql_rpl_query_type(const char* q, int len);
+
+/* discover the master and its slaves */
+my_bool STDCALL mysql_rpl_probe(MYSQL* mysql);
+
+/* set the master, close/free the old one, if it is not a pivot */
+int STDCALL mysql_set_master(MYSQL* mysql, const char* host,
+ unsigned int port,
+ const char* user,
+ const char* passwd);
+int STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
+ unsigned int port,
+ const char* user,
+ const char* passwd);
+
+int STDCALL mysql_shutdown(MYSQL *mysql,
+ enum mysql_enum_shutdown_level
+ shutdown_level);
+int STDCALL mysql_dump_debug_info(MYSQL *mysql);
+int STDCALL mysql_refresh(MYSQL *mysql,
+ unsigned int refresh_options);
+int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid);
+int STDCALL mysql_set_server_option(MYSQL *mysql,
+ enum enum_mysql_set_option
+ option);
+int STDCALL mysql_ping(MYSQL *mysql);
+const char * STDCALL mysql_stat(MYSQL *mysql);
+const char * STDCALL mysql_get_server_info(MYSQL *mysql);
+const char * STDCALL mysql_get_client_info(void);
+unsigned long STDCALL mysql_get_client_version(void);
+const char * STDCALL mysql_get_host_info(MYSQL *mysql);
+unsigned long STDCALL mysql_get_server_version(MYSQL *mysql);
+unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
+MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild);
+MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
+MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
+int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
+ const char *arg);
+void STDCALL mysql_free_result(MYSQL_RES *result);
+void STDCALL mysql_data_seek(MYSQL_RES *result,
+ my_ulonglong offset);
+MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result,
+ MYSQL_ROW_OFFSET offset);
+MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
+ MYSQL_FIELD_OFFSET offset);
+MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
+unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
+MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
+MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
+ const char *wild);
+unsigned long STDCALL mysql_escape_string(char *to,const char *from,
+ unsigned long from_length);
+unsigned long STDCALL mysql_hex_string(char *to,const char *from,
+ unsigned long from_length);
+unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
+ char *to,const char *from,
+ unsigned long length);
+void STDCALL mysql_debug(const char *debug);
+char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
+ char *to,
+ unsigned long to_length,
+ const char *from,
+ unsigned long from_length,
+ void *param,
+ char *
+ (*extend_buffer)
+ (void *, char *to,
+ unsigned long *length));
+void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
+unsigned int STDCALL mysql_thread_safe(void);
+my_bool STDCALL mysql_embedded(void);
+MYSQL_MANAGER* STDCALL mysql_manager_init(MYSQL_MANAGER* con);
+MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
+ const char* host,
+ const char* user,
+ const char* passwd,
+ unsigned int port);
+void STDCALL mysql_manager_close(MYSQL_MANAGER* con);
+int STDCALL mysql_manager_command(MYSQL_MANAGER* con,
+ const char* cmd, int cmd_len);
+int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con,
+ char* res_buf,
+ int res_buf_size);
+my_bool STDCALL mysql_read_query_result(MYSQL *mysql);
+
+
+/*
+ The following definitions are added for the enhanced
+ client-server protocol
+*/
+
+/* statement state */
+enum enum_mysql_stmt_state
+{
+ MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE,
+ MYSQL_STMT_FETCH_DONE
+};
+
+
+/* bind structure */
+typedef struct st_mysql_bind
+{
+ unsigned long *length; /* output length pointer */
+ my_bool *is_null; /* Pointer to null indicator */
+ void *buffer; /* buffer to get/put data */
+ enum enum_field_types buffer_type; /* buffer type */
+ unsigned long buffer_length; /* buffer length, must be set for str/binary */
+
+ /* Following are for internal use. Set by mysql_stmt_bind_param */
+ unsigned char *inter_buffer; /* for the current data position */
+ unsigned long offset; /* offset position for char/binary fetch */
+ unsigned long internal_length; /* Used if length is 0 */
+ unsigned int param_number; /* For null count and error messages */
+ unsigned int pack_length; /* Internal length for packed data */
+ my_bool is_unsigned; /* set if integer type is unsigned */
+ my_bool long_data_used; /* If used with mysql_send_long_data */
+ my_bool internal_is_null; /* Used if is_null is 0 */
+ void (*store_param_func)(NET *net, struct st_mysql_bind *param);
+ void (*fetch_result)(struct st_mysql_bind *, unsigned char **row);
+ void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *,
+ unsigned char **row);
+} MYSQL_BIND;
+
+
+/* statement handler */
+typedef struct st_mysql_stmt
+{
+ MEM_ROOT mem_root; /* root allocations */
+ LIST list; /* list to keep track of all stmts */
+ MYSQL *mysql; /* connection handle */
+ MYSQL_BIND *params; /* input parameters */
+ MYSQL_BIND *bind; /* output parameters */
+ MYSQL_FIELD *fields; /* result set metadata */
+ MYSQL_DATA result; /* cached result set */
+ MYSQL_ROWS *data_cursor; /* current row in cached result */
+ /* copy of mysql->affected_rows after statement execution */
+ my_ulonglong affected_rows;
+ my_ulonglong insert_id; /* copy of mysql->insert_id */
+ /*
+ mysql_stmt_fetch() calls this function to fetch one row (it's different
+ for buffered, unbuffered and cursor fetch).
+ */
+ int (*read_row_func)(struct st_mysql_stmt *stmt,
+ unsigned char **row);
+ unsigned long stmt_id; /* Id for prepared statement */
+ unsigned int last_errno; /* error code */
+ unsigned int param_count; /* input parameter count */
+ unsigned int field_count; /* number of columns in result set */
+ enum enum_mysql_stmt_state state; /* statement state */
+ char last_error[MYSQL_ERRMSG_SIZE]; /* error message */
+ char sqlstate[SQLSTATE_LENGTH+1];
+ /* Types of input parameters should be sent to server */
+ my_bool send_types_to_server;
+ my_bool bind_param_done; /* input buffers were supplied */
+ my_bool bind_result_done; /* output buffers were supplied */
+ /* mysql_stmt_close() had to cancel this result */
+ my_bool unbuffered_fetch_cancelled;
+ /*
+ Is set to true if we need to calculate field->max_length for
+ metadata fields when doing mysql_stmt_store_result.
+ */
+ my_bool update_max_length;
+} MYSQL_STMT;
+
+enum enum_stmt_attr_type
+{
+ /*
+ When doing mysql_stmt_store_result calculate max_length attribute
+ of statement metadata. This is to be consistent with the old API,
+ where this was done automatically.
+ In the new API we do that only by request because it slows down
+ mysql_stmt_store_result sufficiently.
+ */
+ STMT_ATTR_UPDATE_MAX_LENGTH
+};
+
+
+typedef struct st_mysql_methods
+{
+ my_bool (*read_query_result)(MYSQL *mysql);
+ my_bool (*advanced_command)(MYSQL *mysql,
+ enum enum_server_command command,
+ const char *header,
+ unsigned long header_length,
+ const char *arg,
+ unsigned long arg_length,
+ my_bool skip_check);
+ MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
+ unsigned int fields);
+ MYSQL_RES * (*use_result)(MYSQL *mysql);
+ void (*fetch_lengths)(unsigned long *to,
+ MYSQL_ROW column, unsigned int field_count);
+ void (*flush_use_result)(MYSQL *mysql);
+#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
+ MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
+ my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
+ int (*stmt_execute)(MYSQL_STMT *stmt);
+ int (*read_binary_rows)(MYSQL_STMT *stmt);
+ int (*unbuffered_fetch)(MYSQL *mysql, char **row);
+ void (*free_embedded_thd)(MYSQL *mysql);
+ const char *(*read_statistics)(MYSQL *mysql);
+ my_bool (*next_result)(MYSQL *mysql);
+ int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd);
+#endif
+} MYSQL_METHODS;
+
+
+MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql);
+int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query,
+ unsigned long length);
+int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt);
+int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt);
+int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
+ unsigned int column,
+ unsigned long offset);
+int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt);
+unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt,
+ enum enum_stmt_attr_type attr_type,
+ const void *attr);
+my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt,
+ enum enum_stmt_attr_type attr_type,
+ void *attr);
+my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
+my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
+my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt);
+my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt,
+ unsigned int param_number,
+ const char *data,
+ unsigned long length);
+MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt);
+MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt);
+unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt);
+const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt);
+const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt);
+MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt,
+ MYSQL_ROW_OFFSET offset);
+MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt);
+void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset);
+my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt);
+my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt);
+my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt);
+unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt);
+
+my_bool STDCALL mysql_commit(MYSQL * mysql);
+my_bool STDCALL mysql_rollback(MYSQL * mysql);
+my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
+my_bool STDCALL mysql_more_results(MYSQL *mysql);
+int STDCALL mysql_next_result(MYSQL *mysql);
+void STDCALL mysql_close(MYSQL *sock);
+
+
+/* status return codes */
+#define MYSQL_NO_DATA 100
+
+#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
+
+#ifdef USE_OLD_FUNCTIONS
+MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
+ const char *user, const char *passwd);
+int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
+int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
+#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
+#endif
+#define HAVE_MYSQL_REAL_CONNECT
+
+/*
+ The following functions are mainly exported because of mysqlbinlog;
+ They are not for general usage
+*/
+
+#define simple_command(mysql, command, arg, length, skip_check) \
+ (*(mysql)->methods->advanced_command)(mysql, command, \
+ NullS, 0, arg, length, skip_check)
+unsigned long net_safe_read(MYSQL* mysql);
+
+#ifdef __NETWARE__
+#pragma pack(pop) /* restore alignment */
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mysql_h */
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_com.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_com.h
new file mode 100644
index 00000000..6f941fc0
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_com.h
@@ -0,0 +1,399 @@
+/* Copyright (C) 2000 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+/*
+** Common definition between mysql server & client
+*/
+
+#ifndef _mysql_com_h
+#define _mysql_com_h
+
+#define NAME_LEN 64 /* Field/table name length */
+#define HOSTNAME_LENGTH 60
+#define USERNAME_LENGTH 16
+#define SERVER_VERSION_LENGTH 60
+#define SQLSTATE_LENGTH 5
+
+#define LOCAL_HOST "localhost"
+#define LOCAL_HOST_NAMEDPIPE "."
+
+
+#if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
+#define MYSQL_NAMEDPIPE "MySQL"
+#define MYSQL_SERVICENAME "MySQL"
+#endif /* __WIN__ */
+
+enum enum_server_command
+{
+ COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
+ COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS,
+ COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING,
+ COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP,
+ COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
+ COM_PREPARE, COM_EXECUTE, COM_LONG_DATA, COM_CLOSE_STMT,
+ COM_RESET_STMT, COM_SET_OPTION,
+ /* don't forget to update const char *command_name[] in sql_parse.cc */
+
+ /* Must be last */
+ COM_END
+};
+
+
+/*
+ Length of random string sent by server on handshake; this is also length of
+ obfuscated password, recieved from client
+*/
+#define SCRAMBLE_LENGTH 20
+#define SCRAMBLE_LENGTH_323 8
+/* length of password stored in the db: new passwords are preceeded with '*' */
+#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1)
+#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2)
+
+
+#define NOT_NULL_FLAG 1 /* Field can't be NULL */
+#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
+#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
+#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
+#define BLOB_FLAG 16 /* Field is a blob */
+#define UNSIGNED_FLAG 32 /* Field is unsigned */
+#define ZEROFILL_FLAG 64 /* Field is zerofill */
+#define BINARY_FLAG 128 /* Field is binary */
+
+/* The following are only sent to new clients */
+#define ENUM_FLAG 256 /* field is an enum */
+#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
+#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
+#define SET_FLAG 2048 /* field is a set */
+#define NUM_FLAG 32768 /* Field is num (for clients) */
+#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
+#define GROUP_FLAG 32768 /* Intern: Group field */
+#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
+#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */
+
+#define REFRESH_GRANT 1 /* Refresh grant tables */
+#define REFRESH_LOG 2 /* Start on new log file */
+#define REFRESH_TABLES 4 /* close all tables */
+#define REFRESH_HOSTS 8 /* Flush host cache */
+#define REFRESH_STATUS 16 /* Flush status variables */
+#define REFRESH_THREADS 32 /* Flush thread cache */
+#define REFRESH_SLAVE 64 /* Reset master info and restart slave
+ thread */
+#define REFRESH_MASTER 128 /* Remove all bin logs in the index
+ and truncate the index */
+
+/* The following can't be set with mysql_refresh() */
+#define REFRESH_READ_LOCK 16384 /* Lock tables for read */
+#define REFRESH_FAST 32768 /* Intern flag */
+
+/* RESET (remove all queries) from query cache */
+#define REFRESH_QUERY_CACHE 65536
+#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */
+#define REFRESH_DES_KEY_FILE 0x40000L
+#define REFRESH_USER_RESOURCES 0x80000L
+
+#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
+#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
+#define CLIENT_LONG_FLAG 4 /* Get all column flags */
+#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
+#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
+#define CLIENT_COMPRESS 32 /* Can use compression protocol */
+#define CLIENT_ODBC 64 /* Odbc client */
+#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
+#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
+#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */
+#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
+#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
+#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
+#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
+#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */
+#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */
+#define CLIENT_MULTI_STATEMENTS 65536 /* Enable/disable multi-stmt support */
+#define CLIENT_MULTI_RESULTS 131072 /* Enable/disable multi-results */
+#define CLIENT_REMEMBER_OPTIONS (((ulong) 1) << 31)
+
+#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
+#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
+#define SERVER_STATUS_MORE_RESULTS 4 /* More results on server */
+#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
+#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
+#define SERVER_QUERY_NO_INDEX_USED 32
+#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */
+
+#define MYSQL_ERRMSG_SIZE 512
+#define NET_READ_TIMEOUT 30 /* Timeout on read */
+#define NET_WRITE_TIMEOUT 60 /* Timeout on write */
+#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
+
+struct st_vio; /* Only C */
+typedef struct st_vio Vio;
+
+#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */
+#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */
+#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */
+#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */
+#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */
+#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */
+#define MAX_BLOB_WIDTH 8192 /* Default width for blob */
+
+typedef struct st_net {
+#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
+ Vio* vio;
+ unsigned char *buff,*buff_end,*write_pos,*read_pos;
+ my_socket fd; /* For Perl DBI/dbd */
+ unsigned long max_packet,max_packet_size;
+ unsigned int pkt_nr,compress_pkt_nr;
+ unsigned int write_timeout, read_timeout, retry_count;
+ int fcntl;
+ my_bool compress;
+ /*
+ The following variable is set if we are doing several queries in one
+ command ( as in LOAD TABLE ... FROM MASTER ),
+ and do not want to confuse the client with OK at the wrong time
+ */
+ unsigned long remain_in_buf,length, buf_length, where_b;
+ unsigned int *return_status;
+ unsigned char reading_or_writing;
+ char save_char;
+ my_bool no_send_ok;
+ /*
+ Pointer to query object in query cache, do not equal NULL (0) for
+ queries in cache that have not stored its results yet
+ */
+#endif
+ char last_error[MYSQL_ERRMSG_SIZE], sqlstate[SQLSTATE_LENGTH+1];
+ unsigned int last_errno;
+ unsigned char error;
+ gptr query_cache_query;
+ my_bool report_error; /* We should report error (we have unreported error) */
+ my_bool return_errno;
+} NET;
+
+#define packet_error (~(unsigned long) 0)
+
+enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
+ MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
+ MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
+ MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
+ MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
+ MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
+ MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
+ MYSQL_TYPE_NEWDATE,
+ MYSQL_TYPE_NEW_DECIMAL=246,
+ MYSQL_TYPE_ENUM=247,
+ MYSQL_TYPE_SET=248,
+ MYSQL_TYPE_TINY_BLOB=249,
+ MYSQL_TYPE_MEDIUM_BLOB=250,
+ MYSQL_TYPE_LONG_BLOB=251,
+ MYSQL_TYPE_BLOB=252,
+ MYSQL_TYPE_VAR_STRING=253,
+ MYSQL_TYPE_STRING=254,
+ MYSQL_TYPE_GEOMETRY=255
+
+};
+
+/* For backward compatibility */
+#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS
+#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL
+#define FIELD_TYPE_TINY MYSQL_TYPE_TINY
+#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT
+#define FIELD_TYPE_LONG MYSQL_TYPE_LONG
+#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT
+#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE
+#define FIELD_TYPE_NULL MYSQL_TYPE_NULL
+#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP
+#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG
+#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24
+#define FIELD_TYPE_DATE MYSQL_TYPE_DATE
+#define FIELD_TYPE_TIME MYSQL_TYPE_TIME
+#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME
+#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR
+#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE
+#define FIELD_TYPE_NEW_DECIMAL MYSQL_TYPE_NEW_DECIMAL
+#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM
+#define FIELD_TYPE_SET MYSQL_TYPE_SET
+#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB
+#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB
+#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB
+#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB
+#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING
+#define FIELD_TYPE_STRING MYSQL_TYPE_STRING
+#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY
+#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
+#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
+
+
+/* Shutdown/kill enums and constants */
+
+/* Bits for THD::killable. */
+#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0)
+#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1)
+#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
+#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3)
+
+enum mysql_enum_shutdown_level {
+ /*
+ We want levels to be in growing order of hardness (because we use number
+ comparisons). Note that DEFAULT does not respect the growing property, but
+ it's ok.
+ */
+ SHUTDOWN_DEFAULT = 0,
+ /* wait for existing connections to finish */
+ SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT,
+ /* wait for existing trans to finish */
+ SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS,
+ /* wait for existing updates to finish (=> no partial MyISAM update) */
+ SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE,
+ /* flush InnoDB buffers and other storage engines' buffers*/
+ SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1),
+ /* don't flush InnoDB buffers, flush other storage engines' buffers*/
+ SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
+ /* Now the 2 levels of the KILL command */
+#if MYSQL_VERSION_ID >= 50000
+ KILL_QUERY= 254,
+#endif
+ KILL_CONNECTION= 255
+};
+
+/* options for mysql_set_option */
+enum enum_mysql_set_option
+{
+ MYSQL_OPTION_MULTI_STATEMENTS_ON,
+ MYSQL_OPTION_MULTI_STATEMENTS_OFF
+};
+
+#define net_new_transaction(net) ((net)->pkt_nr=0)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+my_bool my_net_init(NET *net, Vio* vio);
+void my_net_local_init(NET *net);
+void net_end(NET *net);
+void net_clear(NET *net);
+my_bool net_realloc(NET *net, unsigned long length);
+my_bool net_flush(NET *net);
+my_bool my_net_write(NET *net,const char *packet,unsigned long len);
+my_bool net_write_command(NET *net,unsigned char command,
+ const char *header, unsigned long head_len,
+ const char *packet, unsigned long len);
+int net_real_write(NET *net,const char *packet,unsigned long len);
+unsigned long my_net_read(NET *net);
+
+/*
+ The following function is not meant for normal usage
+ Currently it's used internally by manager.c
+*/
+struct sockaddr;
+int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen,
+ unsigned int timeout);
+
+struct rand_struct {
+ unsigned long seed1,seed2,max_value;
+ double max_value_dbl;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+ /* The following is for user defined functions */
+
+enum Item_result {STRING_RESULT, REAL_RESULT, INT_RESULT, ROW_RESULT};
+
+typedef struct st_udf_args
+{
+ unsigned int arg_count; /* Number of arguments */
+ enum Item_result *arg_type; /* Pointer to item_results */
+ char **args; /* Pointer to argument */
+ unsigned long *lengths; /* Length of string arguments */
+ char *maybe_null; /* Set to 1 for all maybe_null args */
+} UDF_ARGS;
+
+ /* This holds information about the result */
+
+typedef struct st_udf_init
+{
+ my_bool maybe_null; /* 1 if function can return NULL */
+ unsigned int decimals; /* for real functions */
+ unsigned long max_length; /* For string functions */
+ char *ptr; /* free pointer for function data */
+ my_bool const_item; /* 0 if result is independent of arguments */
+} UDF_INIT;
+
+ /* Constants when using compression */
+#define NET_HEADER_SIZE 4 /* standard header size */
+#define COMP_HEADER_SIZE 3 /* compression header extra size */
+
+ /* Prototypes to password functions */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ These functions are used for authentication by client and server and
+ implemented in sql/password.c
+*/
+
+void randominit(struct rand_struct *, unsigned long seed1,
+ unsigned long seed2);
+double my_rnd(struct rand_struct *);
+void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st);
+
+void hash_password(unsigned long *to, const char *password, unsigned int password_len);
+void make_scrambled_password_323(char *to, const char *password);
+void scramble_323(char *to, const char *message, const char *password);
+my_bool check_scramble_323(const char *, const char *message,
+ unsigned long *salt);
+void get_salt_from_password_323(unsigned long *res, const char *password);
+void make_password_from_salt_323(char *to, const unsigned long *salt);
+
+void make_scrambled_password(char *to, const char *password);
+void scramble(char *to, const char *message, const char *password);
+my_bool check_scramble(const char *reply, const char *message,
+ const unsigned char *hash_stage2);
+void get_salt_from_password(unsigned char *res, const char *password);
+void make_password_from_salt(char *to, const unsigned char *hash_stage2);
+
+/* end of password.c */
+
+char *get_tty_password(char *opt_message);
+const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
+
+/* Some other useful functions */
+
+my_bool my_init(void);
+int load_defaults(const char *conf_file, const char **groups,
+ int *argc, char ***argv);
+my_bool my_thread_init(void);
+void my_thread_end(void);
+
+#ifdef _global_h
+ulong STDCALL net_field_length(uchar **packet);
+my_ulonglong net_field_length_ll(uchar **packet);
+char *net_store_length(char *pkg, ulonglong length);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
+#define MYSQL_STMT_HEADER 4
+#define MYSQL_LONG_DATA_HEADER 6
+
+#endif
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_embed.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_embed.h
new file mode 100644
index 00000000..603af8e8
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_embed.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2000 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+/* Defines that are unique to the embedded version of MySQL */
+
+#ifdef EMBEDDED_LIBRARY
+
+/* Things we don't need in the embedded version of MySQL */
+/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
+
+#undef HAVE_PSTACK /* No stacktrace */
+#undef HAVE_DLOPEN /* No udf functions */
+#undef HAVE_OPENSSL
+#undef HAVE_ISAM
+#undef HAVE_SMEM /* No shared memory */
+#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
+
+#define DONT_USE_RAID
+
+#endif /* EMBEDDED_LIBRARY */
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_time.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_time.h
new file mode 100644
index 00000000..5f4fc12c
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_time.h
@@ -0,0 +1,56 @@
+/* Copyright (C) 2004 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef _mysql_time_h_
+#define _mysql_time_h_
+
+/*
+ Time declarations shared between the server and client API:
+ you should not add anything to this header unless it's used
+ (and hence should be visible) in mysql.h.
+ If you're looking for a place to add new time-related declaration,
+ it's most likely my_time.h. See also "C API Handling of Date
+ and Time Values" chapter in documentation.
+*/
+
+enum enum_mysql_timestamp_type
+{
+ MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1,
+ MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2
+};
+
+
+/*
+ Structure which is used to represent datetime values inside MySQL.
+
+ We assume that values in this structure are normalized, i.e. year <= 9999,
+ month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions
+ in server such as my_system_gmt_sec() or make_time() family of functions
+ rely on this (actually now usage of make_*() family relies on a bit weaker
+ restriction). Also functions that produce MYSQL_TIME as result ensure this.
+ There is one exception to this rule though if this structure holds time
+ value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold
+ bigger values.
+*/
+typedef struct st_mysql_time
+{
+ unsigned int year, month, day, hour, minute, second;
+ unsigned long second_part;
+ my_bool neg;
+ enum enum_mysql_timestamp_type time_type;
+} MYSQL_TIME;
+
+#endif /* _mysql_time_h_ */
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_version.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_version.h
new file mode 100644
index 00000000..9f38c100
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/mysql_version.h
@@ -0,0 +1,29 @@
+/* Copyright Abandoned 1996, 1999, 2001 MySQL AB
+ This file is public domain and comes with NO WARRANTY of any kind */
+
+/* Version numbers for protocol & mysqld */
+
+#ifndef _mysql_version_h
+#define _mysql_version_h
+#ifdef _CUSTOMCONFIG_
+#include <custom_conf.h>
+#else
+#define PROTOCOL_VERSION 10
+#define MYSQL_SERVER_VERSION "4.1.12"
+#define MYSQL_BASE_VERSION "mysqld-4.1"
+#define MYSQL_SERVER_SUFFIX_DEF ""
+#define FRM_VER 6
+#define MYSQL_VERSION_ID 40112
+#define MYSQL_PORT 3306
+#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
+#define MYSQL_CONFIG_NAME "my"
+#define MYSQL_COMPILATION_COMMENT "Source distribution"
+
+/* mysqld compile time options */
+#endif /* _CUSTOMCONFIG_ */
+
+#ifndef LICENSE
+#define LICENSE GPL
+#endif /* LICENSE */
+
+#endif /* _mysql_version_h */
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/typelib.h b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/typelib.h
new file mode 100644
index 00000000..4d6a90ad
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Headers/typelib.h
@@ -0,0 +1,34 @@
+/* Copyright (C) 2000 MySQL AB
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+
+#ifndef _typelib_h
+#define _typelib_h
+
+typedef struct st_typelib { /* Different types saved here */
+ unsigned int count; /* How many types */
+ const char *name; /* Name of typelib */
+ const char **type_names;
+ unsigned int *type_lengths;
+} TYPELIB;
+
+extern int find_type(char *x,TYPELIB *typelib,unsigned int full_name);
+extern void make_type(char *to,unsigned int nr,TYPELIB *typelib);
+extern const char *get_type(TYPELIB *typelib,unsigned int nr);
+
+extern TYPELIB sql_protocol_typelib;
+
+#endif /* _typelib_h */
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/MCPKit_bundled b/Frameworks/MCPKit_bundled.framework/Versions/A/MCPKit_bundled
new file mode 100755
index 00000000..160ce713
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/MCPKit_bundled
Binary files differ
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPAttribute+Private.h b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPAttribute+Private.h
new file mode 100644
index 00000000..2426b16a
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPAttribute+Private.h
@@ -0,0 +1,35 @@
+//
+// MCPAttribute+Private.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import "MCPAttribute.h"
+
+@interface MCPAttribute (Private)
+
+
+#pragma mark Setters
+- (void) setValueClassName:(NSString *) iClassName;
+
+#pragma mark Pseudo-getters
+
+@end
+
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPClassDescription+Private.h b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPClassDescription+Private.h
new file mode 100644
index 00000000..fa4ffab3
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPClassDescription+Private.h
@@ -0,0 +1,41 @@
+//
+// MCPClassDescription+Private.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 09/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+
+#import "MCPClassDescription.h"
+
+@interface MCPClassDescription (Private)
+
+#pragma mark Setters
+- (void) setAttributes:(NSArray *) iAttributes;
+- (void) setRelations:(NSArray *) iRelations;
+- (void) insertObject:(MCPRelation *) iRelation inIncomingsAtIndex:(unsigned int) index;
+- (void) removeObjectFromIncomingsAtIndex:(unsigned int) index;
+
+#pragma mark Getters
+- (NSArray *) incomings;
+- (unsigned int) countOfIncomings;
+- (MCPRelation *) objectInIncomingsAtIndex:(unsigned int) index;
+- (unsigned int) indexOfIncoming:(id) iRelation;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPRelation+Private.h b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPRelation+Private.h
new file mode 100644
index 00000000..aa286787
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/PrivateHeaders/MCPRelation+Private.h
@@ -0,0 +1,41 @@
+//
+// MCPRelation+Private.h
+// MCPModeler
+//
+// Created by Serge Cohen (serge.cohen@m4x.org) on 11/08/04.
+// Copyright 2004 Serge Cohen. All rights reserved.
+//
+// This code 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 any later version.
+//
+// This code 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.
+//
+// For a copy of the GNU General Public License, visit <http://www.gnu.org/> or
+// write to the Free Software Foundation, Inc., 59 Temple Place--Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// More info at <http://mysql-cocoa.sourceforge.net/>
+//
+
+#import "MCPRelation.h"
+
+@interface MCPRelation (Private)
+
+#pragma mark Making some work
+- (void) invalidateJoins; // Check that the joins are realistics.
+
+#pragma mark Setters
+- (void) setOrigin:(MCPClassDescription *) iOrigin;
+//- (void) setJoins:(NSArray *) iJoins;
+
+#pragma mark Getters
+- (MCPModel *) model;
+
+#pragma mark Fro the controller layer and the UI
+- (void) addNewDefaultJoin;
+
+@end
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
new file mode 100644
index 00000000..8177d470
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
Binary files differ
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/JavaCompiling.plist b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/JavaCompiling.plist
new file mode 100644
index 00000000..e0a16f9b
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/JavaCompiling.plist
@@ -0,0 +1,8 @@
+<?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>JavaSourceSubpath</key>
+ <string>_MCPConnectionWindow_EOArchive_English.java</string>
+</dict>
+</plist>
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/_MCPConnectionWindow_EOArchive_English.java b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/_MCPConnectionWindow_EOArchive_English.java
new file mode 100644
index 00000000..5ba619a6
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/_MCPConnectionWindow_EOArchive_English.java
@@ -0,0 +1,424 @@
+// _MCPConnectionWindow_EOArchive_English.java
+// Generated by EnterpriseObjects palette at vendredi 14 mai 2004 11 h 08 Europe/Amsterdam
+
+import com.webobjects.eoapplication.*;
+import com.webobjects.eocontrol.*;
+import com.webobjects.eointerface.*;
+import com.webobjects.eointerface.swing.*;
+import com.webobjects.foundation.*;
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.table.*;
+import javax.swing.text.*;
+
+public class _MCPConnectionWindow_EOArchive_English extends com.webobjects.eoapplication.EOArchive {
+ IBHelpConnector _iBHelpConnector0, _iBHelpConnector1, _iBHelpConnector2, _iBHelpConnector3;
+ com.webobjects.eointerface.swing.EOFrame _eoFrame0, _eoFrame1;
+ com.webobjects.eointerface.swing.EOTextField _nsTextField0, _nsTextField1, _nsTextField2, _nsTextField3, _nsTextField4, _nsTextField5, _nsTextField6, _nsTextField7, _nsTextField8, _nsTextField9;
+ com.webobjects.eointerface.swing.EOView _nsBox0, _nsBox1, _nsBox2, _nsBox3;
+ javax.swing.JButton _nsButton0, _nsButton1, _nsButton2, _nsButton3, _nsButton4;
+ javax.swing.JPanel _nsView0, _nsView1;
+ javax.swing.JPasswordField _nsSecureTextField0;
+
+ public _MCPConnectionWindow_EOArchive_English(Object owner, NSDisposableRegistry registry) {
+ super(owner, registry);
+ }
+
+ protected void _construct() {
+ Object owner = _owner();
+ EOArchive._ObjectInstantiationDelegate delegate = (owner instanceof EOArchive._ObjectInstantiationDelegate) ? (EOArchive._ObjectInstantiationDelegate)owner : null;
+ Object replacement;
+
+ super._construct();
+
+ _nsBox3 = (com.webobjects.eointerface.swing.EOView)_registered(new com.webobjects.eointerface.swing.EOView(), "NSView");
+ _nsBox2 = (com.webobjects.eointerface.swing.EOView)_registered(new com.webobjects.eointerface.swing.EOView(), "NSBox1");
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mCreateButton")) != null)) {
+ _nsButton4 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (javax.swing.JButton)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsButton4");
+ } else {
+ _nsButton4 = (javax.swing.JButton)_registered(new javax.swing.JButton("Create DB"), "NSButton2");
+ }
+
+ _nsButton3 = (javax.swing.JButton)_registered(new javax.swing.JButton("Cancel"), "NSButton1");
+ _nsButton2 = (javax.swing.JButton)_registered(new javax.swing.JButton("Go"), "NSButton");
+ _nsBox1 = (com.webobjects.eointerface.swing.EOView)_registered(new com.webobjects.eointerface.swing.EOView(), "NSView");
+ _nsBox0 = (com.webobjects.eointerface.swing.EOView)_registered(new com.webobjects.eointerface.swing.EOView(), "NSBox1");
+ _nsTextField9 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField23");
+ _nsTextField8 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField22");
+ _nsTextField7 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField21");
+ _nsTextField6 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField2");
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "window")) != null)) {
+ _eoFrame1 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOFrame)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_eoFrame1");
+ } else {
+ _eoFrame1 = (com.webobjects.eointerface.swing.EOFrame)_registered(new com.webobjects.eointerface.swing.EOFrame(), "Window");
+ }
+
+ _nsView1 = (JPanel)_eoFrame1.getContentPane();
+ _iBHelpConnector3 = (IBHelpConnector)_registered(new IBHelpConnector(), "");
+ _iBHelpConnector2 = (IBHelpConnector)_registered(new IBHelpConnector(), "");
+ _iBHelpConnector1 = (IBHelpConnector)_registered(new IBHelpConnector(), "");
+ _iBHelpConnector0 = (IBHelpConnector)_registered(new IBHelpConnector(), "");
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mHostField.nextFocusableComponent.nextFocusableComponent.nextFocusableComponent")) != null)) {
+ _nsTextField5 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOTextField)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsTextField5");
+ } else {
+ _nsTextField5 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField12");
+ }
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mHostField.nextFocusableComponent.nextFocusableComponent")) != null)) {
+ _nsTextField4 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOTextField)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsTextField4");
+ } else {
+ _nsTextField4 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField11");
+ }
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mHostField.nextFocusableComponent")) != null)) {
+ _nsTextField3 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOTextField)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsTextField3");
+ } else {
+ _nsTextField3 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField1");
+ }
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mHostField.nextFocusableComponent.nextFocusableComponent.nextFocusableComponent.nextFocusableComponent")) != null)) {
+ _nsTextField2 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOTextField)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsTextField2");
+ } else {
+ _nsTextField2 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField");
+ }
+
+ _nsButton1 = (javax.swing.JButton)_registered(new javax.swing.JButton("Cancel"), "NSButton1");
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mPasswordField.nextFocusableComponent")) != null)) {
+ _nsButton0 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (javax.swing.JButton)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsButton0");
+ } else {
+ _nsButton0 = (javax.swing.JButton)_registered(new javax.swing.JButton("OK"), "NSButton");
+ }
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mPasswordField")) != null)) {
+ _nsSecureTextField0 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (javax.swing.JPasswordField)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_nsSecureTextField0");
+ } else {
+ _nsSecureTextField0 = (javax.swing.JPasswordField)_registered(new javax.swing.JPasswordField(), "NSTextField");
+ }
+
+ _nsTextField1 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField21");
+ _nsTextField0 = (com.webobjects.eointerface.swing.EOTextField)_registered(new com.webobjects.eointerface.swing.EOTextField(), "NSTextField2");
+
+ if ((delegate != null) && ((replacement = delegate.objectForOutletPath(this, "mPasswordSheet")) != null)) {
+ _eoFrame0 = (replacement == EOArchive._ObjectInstantiationDelegate.NullObject) ? null : (com.webobjects.eointerface.swing.EOFrame)replacement;
+ _replacedObjects.setObjectForKey(replacement, "_eoFrame0");
+ } else {
+ _eoFrame0 = (com.webobjects.eointerface.swing.EOFrame)_registered(new com.webobjects.eointerface.swing.EOFrame(), "Panel");
+ }
+
+ _nsView0 = (JPanel)_eoFrame0.getContentPane();
+ }
+
+ protected void _awaken() {
+ super._awaken();
+
+ if (_replacedObjects.objectForKey("_eoFrame0") == null) {
+ _connect(_eoFrame0, _owner(), "delegate");
+ }
+
+ _nsButton0.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "passwordClick", _nsButton0), ""));
+
+ if (_replacedObjects.objectForKey("_eoFrame0") == null) {
+ _connect(_owner(), _eoFrame0, "mPasswordSheet");
+ }
+
+ if (_replacedObjects.objectForKey("_nsSecureTextField0") == null) {
+ _connect(_owner(), _nsSecureTextField0, "mPasswordField");
+ }
+
+ if (_replacedObjects.objectForKey("_nsButton4") == null) {
+ _connect(_owner(), _nsButton4, "mCreateButton");
+ }
+
+ _nsButton4.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "doCreate", _nsButton4), ""));
+ _nsButton3.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "doCancel", _nsButton3), ""));
+ _nsButton2.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "doGo", _nsButton2), ""));
+
+ if (_replacedObjects.objectForKey("_eoFrame1") == null) {
+ _connect(_owner(), _eoFrame1, "window");
+ }
+
+ _nsTextField2.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "modifyInstance", _nsTextField2), ""));
+
+ if (_replacedObjects.objectForKey("_nsTextField3") == null) {
+ _connect(_owner(), _nsTextField3, "mLoginField");
+ }
+
+ _nsTextField3.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "modifyInstance", _nsTextField3), ""));
+
+ if (_replacedObjects.objectForKey("_nsTextField4") == null) {
+ _connect(_owner(), _nsTextField4, "mDatabaseField");
+ }
+
+ _nsTextField4.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "modifyInstance", _nsTextField4), ""));
+
+ if (_replacedObjects.objectForKey("_nsTextField5") == null) {
+ _connect(_owner(), _nsTextField5, "mPortField");
+ }
+
+ _nsTextField5.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "modifyInstance", _nsTextField5), ""));
+
+ if (_replacedObjects.objectForKey("_nsTextField2") == null) {
+ _connect(_owner(), _nsTextField2, "mHostField");
+ }
+
+ _nsButton1.addActionListener((com.webobjects.eointerface.swing.EOControlActionAdapter)_registered(new com.webobjects.eointerface.swing.EOControlActionAdapter(_owner(), "passwordClick", _nsButton1), ""));
+ }
+
+ protected void _init() {
+ super._init();
+ if (!(_nsBox2.getLayout() instanceof EOViewLayout)) { _nsBox2.setLayout(new EOViewLayout()); }
+ _nsBox3.setSize(401, 1);
+ _nsBox3.setLocation(2, 2);
+ ((EOViewLayout)_nsBox2.getLayout()).setAutosizingMask(_nsBox3, EOViewLayout.MinYMargin);
+ _nsBox2.add(_nsBox3);
+ _nsBox2.setBorder(new com.webobjects.eointerface.swing._EODefaultBorder("", true, "Lucida Grande", 13, Font.PLAIN));
+
+ if (_replacedObjects.objectForKey("_nsButton4") == null) {
+ _setFontForComponent(_nsButton4, "Lucida Grande", 13, Font.PLAIN);
+ _nsButton4.setMargin(new Insets(0, 2, 0, 2));
+ }
+
+ _setFontForComponent(_nsButton3, "Lucida Grande", 13, Font.PLAIN);
+ _nsButton3.setMargin(new Insets(0, 2, 0, 2));
+ _setFontForComponent(_nsButton2, "Lucida Grande", 13, Font.PLAIN);
+ _nsButton2.setMargin(new Insets(0, 2, 0, 2));
+ if (!(_nsBox0.getLayout() instanceof EOViewLayout)) { _nsBox0.setLayout(new EOViewLayout()); }
+ _nsBox1.setSize(328, 1);
+ _nsBox1.setLocation(2, 2);
+ ((EOViewLayout)_nsBox0.getLayout()).setAutosizingMask(_nsBox1, EOViewLayout.MinYMargin);
+ _nsBox0.add(_nsBox1);
+ _nsBox0.setBorder(new com.webobjects.eointerface.swing._EODefaultBorder("", true, "Lucida Grande", 13, Font.PLAIN));
+ _setFontForComponent(_nsTextField9, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField9.setEditable(false);
+ _nsTextField9.setOpaque(false);
+ _nsTextField9.setText("Port :");
+ _nsTextField9.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ _nsTextField9.setSelectable(true);
+ _nsTextField9.setEnabled(true);
+ _nsTextField9.setBorder(null);
+ _setFontForComponent(_nsTextField8, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField8.setEditable(false);
+ _nsTextField8.setOpaque(false);
+ _nsTextField8.setText("Database :");
+ _nsTextField8.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ _nsTextField8.setSelectable(true);
+ _nsTextField8.setEnabled(true);
+ _nsTextField8.setBorder(null);
+ _setFontForComponent(_nsTextField7, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField7.setEditable(false);
+ _nsTextField7.setOpaque(false);
+ _nsTextField7.setText("Login :");
+ _nsTextField7.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ _nsTextField7.setSelectable(true);
+ _nsTextField7.setEnabled(true);
+ _nsTextField7.setBorder(null);
+ _setFontForComponent(_nsTextField6, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField6.setEditable(false);
+ _nsTextField6.setOpaque(false);
+ _nsTextField6.setText("Host :");
+ _nsTextField6.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ _nsTextField6.setSelectable(true);
+ _nsTextField6.setEnabled(true);
+ _nsTextField6.setBorder(null);
+ if (!(_nsView1.getLayout() instanceof EOViewLayout)) { _nsView1.setLayout(new EOViewLayout()); }
+ _nsTextField6.setSize(72, 17);
+ _nsTextField6.setLocation(11, 17);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField6, EOViewLayout.MaxXMargin | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField6);
+ _nsTextField7.setSize(72, 17);
+ _nsTextField7.setLocation(11, 47);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField7, EOViewLayout.MaxXMargin | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField7);
+ _nsTextField8.setSize(72, 17);
+ _nsTextField8.setLocation(11, 77);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField8, EOViewLayout.MaxXMargin | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField8);
+ _nsTextField9.setSize(72, 17);
+ _nsTextField9.setLocation(11, 107);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField9, EOViewLayout.MaxXMargin | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField9);
+ _nsTextField2.setSize(242, 22);
+ _nsTextField2.setLocation(88, 14);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField2, EOViewLayout.MinXMargin | EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField2);
+ _nsTextField3.setSize(242, 22);
+ _nsTextField3.setLocation(88, 44);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField3, EOViewLayout.MinXMargin | EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField3);
+ _nsTextField4.setSize(242, 22);
+ _nsTextField4.setLocation(88, 74);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField4, EOViewLayout.MinXMargin | EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField4);
+ _nsTextField5.setSize(242, 22);
+ _nsTextField5.setLocation(88, 104);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsTextField5, EOViewLayout.MinXMargin | EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsTextField5);
+ _nsBox0.setSize(332, 5);
+ _nsBox0.setLocation(5, 130);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsBox0, EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView1.add(_nsBox0);
+ _nsButton2.setSize(77, 26);
+ _nsButton2.setLocation(256, 144);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsButton2, EOViewLayout.MinXMargin | EOViewLayout.MinYMargin);
+ _nsView1.add(_nsButton2);
+ _nsButton3.setSize(77, 26);
+ _nsButton3.setLocation(172, 144);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsButton3, EOViewLayout.MinXMargin | EOViewLayout.MinYMargin);
+ _nsView1.add(_nsButton3);
+ _nsButton4.setSize(96, 26);
+ _nsButton4.setLocation(12, 144);
+ ((EOViewLayout)_nsView1.getLayout()).setAutosizingMask(_nsButton4, EOViewLayout.MinYMargin);
+ _nsView1.add(_nsButton4);
+
+ if (_replacedObjects.objectForKey("_eoFrame1") == null) {
+ _nsView1.setSize(342, 180);
+ _eoFrame1.setTitle("New Connection Parameters");
+ _eoFrame1.setLocation(111, 492);
+ _eoFrame1.setSize(342, 180);
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField5") == null) {
+ _connect(_nsTextField5, _nsTextField2, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField5") == null) {
+ _setFontForComponent(_nsTextField5, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField5.setEditable(true);
+ _nsTextField5.setOpaque(true);
+ _nsTextField5.setText("");
+ _nsTextField5.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+ _nsTextField5.setSelectable(true);
+ _nsTextField5.setEnabled(true);
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField4") == null) {
+ _connect(_nsTextField4, _nsTextField5, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField4") == null) {
+ _setFontForComponent(_nsTextField4, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField4.setEditable(true);
+ _nsTextField4.setOpaque(true);
+ _nsTextField4.setText("");
+ _nsTextField4.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+ _nsTextField4.setSelectable(true);
+ _nsTextField4.setEnabled(true);
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField3") == null) {
+ _connect(_nsTextField3, _nsTextField4, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField3") == null) {
+ _setFontForComponent(_nsTextField3, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField3.setEditable(true);
+ _nsTextField3.setOpaque(true);
+ _nsTextField3.setText("");
+ _nsTextField3.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+ _nsTextField3.setSelectable(true);
+ _nsTextField3.setEnabled(true);
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField2") == null) {
+ _connect(_nsTextField2, _nsTextField3, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsTextField2") == null) {
+ _setFontForComponent(_nsTextField2, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField2.setEditable(true);
+ _nsTextField2.setOpaque(true);
+ _nsTextField2.setText("");
+ _nsTextField2.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+ _nsTextField2.setSelectable(true);
+ _nsTextField2.setEnabled(true);
+ }
+
+ _connect(_nsButton1, _nsSecureTextField0, "nextFocusableComponent");
+ _setFontForComponent(_nsButton1, "Lucida Grande", 13, Font.PLAIN);
+ _nsButton1.setMargin(new Insets(0, 2, 0, 2));
+
+ if (_replacedObjects.objectForKey("_nsButton0") == null) {
+ _connect(_nsButton0, _nsButton1, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsButton0") == null) {
+ _setFontForComponent(_nsButton0, "Lucida Grande", 13, Font.PLAIN);
+ _nsButton0.setMargin(new Insets(0, 2, 0, 2));
+ }
+
+ if (_replacedObjects.objectForKey("_nsSecureTextField0") == null) {
+ _connect(_nsSecureTextField0, _nsButton0, "nextFocusableComponent");
+ }
+
+ if (_replacedObjects.objectForKey("_nsSecureTextField0") == null) {
+ _setFontForComponent(_nsSecureTextField0, "Lucida Grande", 13, Font.PLAIN);
+ _nsSecureTextField0.setEditable(true);
+ _nsSecureTextField0.setOpaque(true);
+ _nsSecureTextField0.setText("");
+ _nsSecureTextField0.setHorizontalAlignment(javax.swing.JTextField.LEFT);
+ _nsSecureTextField0.setEnabled(true);
+ }
+
+ _setFontForComponent(_nsTextField1, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField1.setEditable(false);
+ _nsTextField1.setOpaque(false);
+ _nsTextField1.setText("Password :");
+ _nsTextField1.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
+ _nsTextField1.setSelectable(false);
+ _nsTextField1.setEnabled(true);
+ _nsTextField1.setBorder(null);
+ _setFontForComponent(_nsTextField0, "Lucida Grande", 13, Font.PLAIN);
+ _nsTextField0.setEditable(false);
+ _nsTextField0.setOpaque(false);
+ _nsTextField0.setText("Please enter your password for DB server ");
+ _nsTextField0.setHorizontalAlignment(javax.swing.JTextField.CENTER);
+ _nsTextField0.setSelectable(false);
+ _nsTextField0.setEnabled(true);
+ _nsTextField0.setBorder(null);
+ if (!(_nsView0.getLayout() instanceof EOViewLayout)) { _nsView0.setLayout(new EOViewLayout()); }
+ _nsTextField0.setSize(395, 17);
+ _nsTextField0.setLocation(11, 14);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsTextField0, EOViewLayout.WidthSizable | EOViewLayout.MaxYMargin);
+ _nsView0.add(_nsTextField0);
+ _nsTextField1.setSize(73, 17);
+ _nsTextField1.setLocation(11, 51);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsTextField1, EOViewLayout.MaxXMargin | EOViewLayout.MaxYMargin);
+ _nsView0.add(_nsTextField1);
+ _nsSecureTextField0.setSize(314, 22);
+ _nsSecureTextField0.setLocation(89, 48);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsSecureTextField0, EOViewLayout.WidthSizable | EOViewLayout.MinYMargin);
+ _nsView0.add(_nsSecureTextField0);
+ _nsBox2.setSize(405, 5);
+ _nsBox2.setLocation(5, 37);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsBox2, EOViewLayout.MinYMargin);
+ _nsView0.add(_nsBox2);
+ _nsButton0.setSize(77, 26);
+ _nsButton0.setLocation(329, 88);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsButton0, EOViewLayout.MinYMargin);
+ _nsView0.add(_nsButton0);
+ _nsButton1.setSize(77, 26);
+ _nsButton1.setLocation(245, 88);
+ ((EOViewLayout)_nsView0.getLayout()).setAutosizingMask(_nsButton1, EOViewLayout.MinYMargin);
+ _nsView0.add(_nsButton1);
+
+ if (_replacedObjects.objectForKey("_eoFrame0") == null) {
+ _nsView0.setSize(415, 124);
+ _eoFrame0.setTitle("Password");
+ _eoFrame0.setLocation(95, 422);
+ _eoFrame0.setSize(415, 124);
+ }
+ }
+}
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/classes.nib b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/classes.nib
new file mode 100644
index 00000000..e9dc7fa3
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/classes.nib
@@ -0,0 +1,28 @@
+{
+ IBClasses = (
+ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
+ {
+ ACTIONS = {
+ askPassword = id;
+ doCancel = id;
+ doCreate = id;
+ doGo = id;
+ modifyInstance = id;
+ passwordClick = id;
+ };
+ CLASS = MCPConnectionWinCont;
+ LANGUAGE = ObjC;
+ OUTLETS = {
+ mCreateButton = NSButton;
+ mDatabaseField = NSTextField;
+ mHostField = NSTextField;
+ mLoginField = NSTextField;
+ mPasswordField = NSTextField;
+ mPasswordSheet = NSPanel;
+ mPortField = NSTextField;
+ };
+ SUPERCLASS = NSWindowController;
+ }
+ );
+ IBVersion = 1;
+} \ No newline at end of file
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/info.nib b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/info.nib
new file mode 100644
index 00000000..10b70ee6
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/info.nib
@@ -0,0 +1,16 @@
+<?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>193 200 356 240 0 0 1280 832 </string>
+ <key>IBFramework Version</key>
+ <string>364.0</string>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>5</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>7F44</string>
+</dict>
+</plist>
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/keyedobjects.nib b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/keyedobjects.nib
new file mode 100644
index 00000000..d0ebc199
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/English.lproj/MCPConnectionWindow.nib/keyedobjects.nib
Binary files differ
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/Info.plist b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 00000000..c5731f54
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,20 @@
+<?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>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>MCPKit_bundled</string>
+ <key>CFBundleIdentifier</key>
+ <string>net.chocolatnoir.MCPKit_bundled</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+</dict>
+</plist>
diff --git a/Frameworks/MCPKit_bundled.framework/Versions/Current b/Frameworks/MCPKit_bundled.framework/Versions/Current
new file mode 120000
index 00000000..8c7e5a66
--- /dev/null
+++ b/Frameworks/MCPKit_bundled.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/Headers b/Frameworks/Sparkle.framework/Headers
new file mode 120000
index 00000000..a177d2a6
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Headers
@@ -0,0 +1 @@
+Versions/Current/Headers \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/Resources b/Frameworks/Sparkle.framework/Resources
new file mode 120000
index 00000000..953ee36f
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Resources
@@ -0,0 +1 @@
+Versions/Current/Resources \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/Sparkle b/Frameworks/Sparkle.framework/Sparkle
new file mode 120000
index 00000000..b2c52731
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Sparkle
@@ -0,0 +1 @@
+Versions/Current/Sparkle \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h
new file mode 100644
index 00000000..38fc9238
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSBundle+SUAdditions.h
@@ -0,0 +1,57 @@
+//
+// NSBundle+SUAdditions.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSBUNDLE_PLUS_ADDITIONS_H
+#define NSBUNDLE_PLUS_ADDITIONS_H
+
+@interface NSBundle (SUAdditions)
+/*!
+ @method
+ @abstract Returns a name for the bundle suitable for display to the user.
+ @discussion This is performed by asking NSFileManager for the display name of the bundle.
+*/
+- (NSString *)name;
+
+/*!
+ @method
+ @abstract Returns the current internal version of the bundle.
+ @discussion This uses the CFBundleVersion info value. This string is not appropriate for display to users: use -displayVersion instead.
+*/
+- (NSString *)version;
+
+/*!
+ @method
+ @abstract Returns the bundle's version, suitable for display to the user.
+ @discussion If the CFBundleShortVersionString is available and different from the CFBundleVersion, this looks like CFBundleShortVersionString (CFBundleVersion). If the version strings are the same or CFBundleShortVersionString is not defined, this is equivalent to -version.
+*/
+- (NSString *)displayVersion;
+
+/*!
+ @method
+ @abstract Returns a suitable icon for this bundle.
+ @discussion Uses the CFBundleIconFile icon if defined; otherwise, uses the default application icon.
+*/
+- (NSImage *)icon;
+
+/*!
+ @method
+ @abstract Returns whether the application is running from a disk image.
+*/
+- (BOOL)isRunningFromDiskImage;
+
+/*!
+ @method
+ @abstract Returns a profile of the users system useful for statistical purposes.
+ @discussion Returns an array of dictionaries; each dictionary represents a piece of data and has keys "key", "visibleKey", "value", and "visibleValue".
+*/
+- (NSArray *)systemProfile;
+
+- (NSString *)publicDSAKey;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h
new file mode 100644
index 00000000..76b2b501
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Aliases.h
@@ -0,0 +1,18 @@
+//
+// NSFileManager+Aliases.h
+// Sparkle
+//
+// Created by Andy Matuschak on 2/4/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_ALIASES_H
+#define NSFILEMANAGER_PLUS_ALIASES_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSFileManager (Aliases)
+- (BOOL)isAliasFolderAtPath:(NSString *)path;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h
new file mode 100644
index 00000000..80b91a9b
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h
@@ -0,0 +1,16 @@
+//
+// NSFileManager+Authentication.m
+// Sparkle
+//
+// Created by Andy Matuschak on 3/9/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_AUTHENTICATION_H
+#define NSFILEMANAGER_PLUS_AUTHENTICATION_H
+
+@interface NSFileManager (SUAuthenticationAdditions)
+- (BOOL)copyPathWithAuthentication:(NSString *)src overPath:(NSString *)dst error:(NSError **)error;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h
new file mode 100644
index 00000000..e541c300
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+ExtendedAttributes.h
@@ -0,0 +1,53 @@
+//
+// NSFileManager+ExtendedAttributes.h
+// Sparkle
+//
+// Created by Mark Mentovai on 2008-01-22.
+// Copyright 2008 Mark Mentovai. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_EXTENDEDATTRIBUTES
+#define NSFILEMANAGER_PLUS_EXTENDEDATTRIBUTES
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSFileManager (ExtendedAttributes)
+
+// Wraps the removexattr system call, allowing an AppKit-style NSString* to
+// be used for the pathname argument. Note that the order of the arguments
+// has changed from what removexattr accepts, so that code reads more
+// naturally.
+//
+// removexattr is only available on Mac OS X 10.4 ("Tiger") and later. If
+// built with an SDK that includes removexattr, this method will link against
+// removexattr directly. When using earlier SDKs, this method will dynamically
+// look up the removexattr symbol at runtime. If the symbol is not present,
+// as will be the case when running on 10.3, this method returns -1 and sets
+// errno to ENOSYS.
+- (int)removeXAttr:(const char*)name
+ fromFile:(NSString*)file
+ options:(int)options;
+
+// Removes the directory tree rooted at |root| from the file quarantine.
+// The quarantine was introduced on Mac OS X 10.5 and is described at:
+//
+// http://developer.apple.com/releasenotes/Carbon/RN-LaunchServices/index.html
+//#apple_ref/doc/uid/TP40001369-DontLinkElementID_2
+//
+// If |root| is not a directory, then it alone is removed from the quarantine.
+// Symbolic links, including |root| if it is a symbolic link, will not be
+// traversed.
+//
+// Ordinarily, the quarantine is managed by calling LSSetItemAttribute
+// to set the kLSItemQuarantineProperties attribute to a dictionary specifying
+// the quarantine properties to be applied. However, it does not appear to be
+// possible to remove an item from the quarantine directly through any public
+// Launch Services calls. Instead, this method takes advantage of the fact
+// that the quarantine is implemented in part by setting an extended attribute,
+// "com.apple.quarantine", on affected files. Removing this attribute is
+// sufficient to remove files from the quarantine.
+- (void)releaseFromQuarantine:(NSString*)root;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h
new file mode 100644
index 00000000..9a97eacd
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h
@@ -0,0 +1,17 @@
+//
+// NSFileManager+Verification.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSFILEMANAGER_PLUS_VERIFICATION_H
+#define NSFILEMANAGER_PLUS_VERIFICATION_H
+
+// For the paranoid folks!
+@interface NSFileManager (SUVerification)
+- (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature withPublicDSAKey:(NSString *)pkeyString;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h
new file mode 100644
index 00000000..7d84b688
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSString+extras.h
@@ -0,0 +1,66 @@
+/*
+
+BSD License
+
+Copyright (c) 2002, Brent Simmons
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of ranchero.com or Brent Simmons nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+*/
+
+#ifndef NSSTRING_PLUS_EXTRAS_H
+#define NSSTRING_PLUS_EXTRAS_H
+
+
+/*
+ NSString+extras.h
+ NetNewsWire
+
+ Created by Brent Simmons on Fri Jun 14 2002.
+ Copyright (c) 2002 Brent Simmons. All rights reserved.
+*/
+
+
+#import <Foundation/Foundation.h>
+#import <CoreFoundation/CoreFoundation.h>
+#import "SUConstants.h" // for NSInteger
+
+@interface NSString (extras)
+
+- (NSString *)stringWithSubstitute:(NSString *)subs forCharactersFromSet:(NSCharacterSet *)set;
+
+- (NSString *) trimWhiteSpace;
+
+- (NSString *) stripHTML;
+
+- (NSString *) ellipsizeAfterNWords: (NSInteger) n;
+
++ (BOOL) stringIsEmpty: (NSString *) s;
+
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h
new file mode 100644
index 00000000..40b2f9e8
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSURL+Parameters.h
@@ -0,0 +1,18 @@
+//
+// NSURL+Parameters.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSURL_PLUS_PARAMETERS_H
+#define NSURL_PLUS_PARAMETERS_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSURL (SUParameterAdditions)
+- (NSURL *)URLWithParameters:(NSArray *)parameters;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h
new file mode 100644
index 00000000..11194125
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace+SystemVersion.h
@@ -0,0 +1,18 @@
+//
+// NSWorkspace+SystemVersion.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef NSWORKSPACE_PLUS_SYSTEMVERSION_H
+#define NSWORKSPACE_PLUS_SYSTEMVERSION_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface NSWorkspace (SystemVersion)
++ (NSString *)systemVersionString;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h
new file mode 100644
index 00000000..bd50fb13
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NSWorkspace_RBAdditions.h
@@ -0,0 +1,41 @@
+//
+// NSWorkspace_RBAdditions.h
+// PathProps
+//
+// Created by Rainer Brockerhoff on 10/04/2007.
+// Copyright 2007 Rainer Brockerhoff. All rights reserved.
+//
+
+#ifndef NSWORKSPACE_RBADDITIONS_H
+#define NSWORKSPACE_RBADDITIONS_H
+
+
+extern NSString* NSWorkspace_RBfstypename;
+extern NSString* NSWorkspace_RBmntonname;
+extern NSString* NSWorkspace_RBmntfromname;
+extern NSString* NSWorkspace_RBdeviceinfo;
+extern NSString* NSWorkspace_RBimagefilepath;
+extern NSString* NSWorkspace_RBconnectiontype;
+extern NSString* NSWorkspace_RBpartitionscheme;
+extern NSString* NSWorkspace_RBserverURL;
+
+@interface NSWorkspace (NSWorkspace_RBAdditions)
+
+// This method will return nil if the input path is invalid. Otherwise, the returned NSDictionary may contain
+// the following keys:
+//- NSWorkspace_RBfstypename: will always be present.Shows the filesystem type (usually "hfs"), from statfs.
+//- NSWorkspace_RBmntonname: will always be present. Shows the volume mount point.
+//- NSWorkspace_RBmntfromname: will always be present. Shows the BSD device path for local volumes; info for
+// remote volumes depends on the filesystem type.
+//- NSWorkspace_RBconnectiontype: should always be present for local volumes. Shows the connection type ("SATA", "USB", etc.).
+//- NSWorkspace_RBpartitionscheme: should always be present for local volumes. Shows the partition scheme.
+//- NSWorkspace_RBdeviceinfo: should always be present for local volumes. Shows some information about the
+// physical device; varies widely.
+//- NSWorkspace_RBimagefilepath: should be present for disk images only. Shows the path of the disk image file.
+//- NSWorkspace_RBserverURL: should be present for remote volumes only. Shows the server URL.
+
+- (NSDictionary*)propertiesForPath:(NSString*)path;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h b/Frameworks/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h
new file mode 100644
index 00000000..1cf5c04e
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/NTSynchronousTask.h
@@ -0,0 +1,29 @@
+//
+// NTSynchronousTask.h
+// CocoatechCore
+//
+// Created by Steve Gehrman on 9/29/05.
+// Copyright 2005 Steve Gehrman. All rights reserved.
+//
+
+#ifndef NTSYNCHRONOUSTASK_H
+#define NTSYNCHRONOUSTASK_H
+
+@interface NTSynchronousTask : NSObject
+{
+ NSTask *mv_task;
+ NSPipe *mv_outputPipe;
+ NSPipe *mv_inputPipe;
+
+ NSData* mv_output;
+ BOOL mv_done;
+ int mv_result;
+}
+
+// pass nil for directory if not needed
+// returns the result
++ (NSData*)task:(NSString*)toolPath directory:(NSString*)currentDirectory withArgs:(NSArray*)args input:(NSData*)input;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h b/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h
new file mode 100644
index 00000000..38978b2b
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/RSS.h
@@ -0,0 +1,77 @@
+/*
+
+BSD License
+
+Copyright (c) 2002, Brent Simmons
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of ranchero.com or Brent Simmons nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+*/
+
+#ifndef RSS_H
+#define RSS_H
+
+
+/*
+ RSS.h
+ A class for reading RSS feeds.
+
+ Created by Brent Simmons on Wed Apr 17 2002.
+ Copyright (c) 2002 Brent Simmons. All rights reserved.
+*/
+
+
+#import <Cocoa/Cocoa.h>
+#import <CoreFoundation/CoreFoundation.h>
+#import "NSString+extras.h"
+
+
+@interface RSS : NSObject {
+ NSMutableData *incrementalData;
+ id delegate;
+
+ NSDictionary *headerItems;
+ NSMutableArray *newsItems;
+ NSString *version;
+
+ BOOL flRdf;
+ BOOL normalize;
+ }
+
+- (RSS *)initWithURL:(NSURL *) url userAgent:(NSString*)userAgent delegate:delegate;
+- (BOOL)loadData:(NSData *)rssData normalize:(BOOL)fl;
+
+- (NSMutableArray *)newsItems;
+- (NSDictionary *)newestItem;
+
+@end
+
+@interface NSObject (RSSDelegateProtocol)
+- (void)feedDidFinishLoading:(RSS *)feed;
+- (void)feed:(RSS *)feed didFailWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h
new file mode 100644
index 00000000..624f3f21
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h
@@ -0,0 +1,32 @@
+//
+// SUAppcast.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAPPCAST_H
+#define SUAPPCAST_H
+
+@class RSS, SUAppcastItem;
+@interface SUAppcast : NSObject {
+ NSArray *items;
+ NSString *userAgentString;
+ id delegate;
+}
+
+- (void)fetchAppcastFromURL:(NSURL *)url;
+- (void)setDelegate:delegate;
+- (void)setUserAgentString:(NSString *)userAgentString;
+
+- (NSArray *)items;
+
+@end
+
+@interface NSObject (SUAppcastDelegate)
+- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
+- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
new file mode 100644
index 00000000..d0c0523e
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
@@ -0,0 +1,48 @@
+//
+// SUAppcastItem.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAPPCASTITEM_H
+#define SUAPPCASTITEM_H
+
+
+@interface SUAppcastItem : NSObject {
+ NSString *title;
+ NSDate *date;
+ NSString *description;
+
+ NSURL *releaseNotesURL;
+
+ NSString *DSASignature;
+ NSString *minimumSystemVersion;
+
+ NSURL *fileURL;
+ NSString *versionString;
+ NSString *displayVersionString;
+
+ NSDictionary *propertiesDictionary;
+}
+
+// Initializes with data from a dictionary provided by the RSS class.
+- initWithDictionary:(NSDictionary *)dict;
+
+- (NSString *)title;
+- (NSString *)versionString;
+- (NSString *)displayVersionString;
+- (NSDate *)date;
+- (NSString *)description;
+- (NSURL *)releaseNotesURL;
+- (NSURL *)fileURL;
+- (NSString *)DSASignature;
+- (NSString *)minimumSystemVersion;
+
+// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
+- (NSDictionary *)propertiesDictionary;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h
new file mode 100644
index 00000000..76fb35f4
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h
@@ -0,0 +1,39 @@
+//
+// SUAutomaticUpdateAlert.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/18/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAUTOMATICUPDATEALERT_H
+#define SUAUTOMATICUPDATEALERT_H
+
+#import "SUWindowController.h"
+
+typedef enum
+{
+ SUInstallNowChoice,
+ SUInstallLaterChoice,
+ SUDoNotInstallChoice
+} SUAutomaticInstallationChoice;
+
+@class SUAppcastItem;
+@interface SUAutomaticUpdateAlert : SUWindowController {
+ SUAppcastItem *updateItem;
+ id delegate;
+ NSBundle *hostBundle;
+}
+
+- (id)initWithAppcastItem:(SUAppcastItem *)item hostBundle:(NSBundle *)hostBundle delegate:delegate;
+- (IBAction)installNow:sender;
+- (IBAction)installLater:sender;
+- (IBAction)doNotInstall:sender;
+
+@end
+
+@interface NSObject (SUAutomaticUpdateAlertDelegateProtocol)
+- (void)automaticUpdateAlert:(SUAutomaticUpdateAlert *)aua finishedWithChoice:(SUAutomaticInstallationChoice)choice;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h
new file mode 100644
index 00000000..f63c194e
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateDriver.h
@@ -0,0 +1,23 @@
+//
+// SUAutomaticUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUAUTOMATICUPDATEDRIVER_H
+#define SUAUTOMATICUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+@class SUAutomaticUpdateAlert;
+@interface SUAutomaticUpdateDriver : SUBasicUpdateDriver {
+ BOOL postponingInstallation, showErrors;
+ SUAutomaticUpdateAlert *alert;
+}
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h
new file mode 100644
index 00000000..bd0297c5
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUBasicUpdateDriver.h
@@ -0,0 +1,59 @@
+//
+// SUBasicUpdateDriver.h
+// Sparkle,
+//
+// Created by Andy Matuschak on 4/23/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUBASICUPDATEDRIVER_H
+#define SUBASICUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUpdateDriver.h"
+
+@class SUAppcastItem, SUUnarchiver, SUAppcast, SUUnarchiver;
+@interface SUBasicUpdateDriver : SUUpdateDriver {
+ NSBundle *hostBundle;
+ SUAppcastItem *updateItem;
+
+ NSURLDownload *download;
+ NSString *downloadPath;
+
+ SUUnarchiver *unarchiver;
+
+ NSString *relaunchPath;
+}
+
+- (void)checkForUpdatesAtURL:(NSURL *)appcastURL hostBundle:(NSBundle *)hb;
+
+- (void)appcastDidFinishLoading:(SUAppcast *)ac;
+- (void)appcast:(SUAppcast *)ac failedToLoadWithError:(NSError *)error;
+
+- (BOOL)isItemNewer:(SUAppcastItem *)ui;
+- (BOOL)hostSupportsItem:(SUAppcastItem *)ui;
+- (BOOL)itemContainsSkippedVersion:(SUAppcastItem *)ui;
+- (BOOL)itemContainsValidUpdate:(SUAppcastItem *)ui;
+- (void)didFindValidUpdate;
+- (void)didNotFindUpdate;
+
+- (void)downloadUpdate;
+- (void)download:(NSURLDownload *)d decideDestinationWithSuggestedFilename:(NSString *)name;
+- (void)downloadDidFinish:(NSURLDownload *)d;
+- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error;
+
+- (void)extractUpdate;
+- (void)unarchiverDidFinish:(SUUnarchiver *)ua;
+- (void)unarchiverDidFail:(SUUnarchiver *)ua;
+
+- (void)installUpdate;
+- (void)installerFinishedForHostBundle:(NSBundle *)hb;
+- (void)installerForHostBundle:(NSBundle *)hb failedWithError:(NSError *)error;
+- (void)relaunchHostApp;
+
+- (void)abortUpdate;
+- (void)abortUpdateWithError:(NSError *)error;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h
new file mode 100644
index 00000000..c0c427af
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUConstants.h
@@ -0,0 +1,72 @@
+//
+// SUConstants.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+
+#ifndef SUCONSTANTS_H
+#define SUCONSTANTS_H
+
+
+extern NSString *SUUpdaterWillRestartNotification;
+extern NSString *SUTechnicalErrorInformationKey;
+
+extern NSString *SUFeedURLKey;
+extern NSString *SUHasLaunchedBeforeKey;
+extern NSString *SUShowReleaseNotesKey;
+extern NSString *SUSkippedVersionKey;
+extern NSString *SUScheduledCheckIntervalKey;
+extern NSString *SULastCheckTimeKey;
+extern NSString *SUExpectsDSASignatureKey;
+extern NSString *SUPublicDSAKeyKey;
+extern NSString *SUPublicDSAKeyFileKey;
+extern NSString *SUAutomaticallyUpdateKey;
+extern NSString *SUAllowsAutomaticUpdatesKey;
+extern NSString *SUEnableAutomaticChecksKey;
+extern NSString *SUEnableAutomaticChecksKeyOld;
+extern NSString *SUEnableSystemProfilingKey;
+extern NSString *SUSendProfileInfoKey;
+
+extern NSString *SUSparkleErrorDomain;
+// Appcast phase errors.
+extern OSStatus SUAppcastParseError;
+extern OSStatus SUNoUpdateError;
+extern OSStatus SUAppcastError;
+extern OSStatus SURunningFromDiskImageError;
+
+// Downlaod phase errors.
+extern OSStatus SUTemporaryDirectoryError;
+
+// Extraction phase errors.
+extern OSStatus SUUnarchivingError;
+extern OSStatus SUSignatureError;
+
+// Installation phase errors.
+extern OSStatus SUFileCopyFailure;
+extern OSStatus SUAuthenticationFailure;
+extern OSStatus SUMissingUpdateError;
+extern OSStatus SUMissingInstallerToolError;
+extern OSStatus SURelaunchError;
+extern OSStatus SUInstallationError;
+
+// NSInteger is a type that was added to Leopard.
+// Here is some glue to ensure that NSInteger will work with pre-10.5 SDKs:
+#ifndef NSINTEGER_DEFINED
+ #ifdef NS_BUILD_32_LIKE_64
+ typedef long NSInteger;
+ typedef unsigned long NSUInteger;
+ #else
+ typedef int NSInteger;
+ typedef unsigned int NSUInteger;
+ #endif
+ #define NSIntegerMax LONG_MAX
+ #define NSIntegerMin LONG_MIN
+ #define NSUIntegerMax ULONG_MAX
+ #define NSINTEGER_DEFINED 1
+#endif
+
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUInstaller.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUInstaller.h
new file mode 100644
index 00000000..08bfc974
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUInstaller.h
@@ -0,0 +1,24 @@
+//
+// SUInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUINSTALLER_H
+#define SUINSTALLER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUInstaller : NSObject { }
++ (void)installFromUpdateFolder:(NSString *)updateFolder overHostBundle:(NSBundle *)hostBundle delegate:delegate synchronously:(BOOL)synchronously;
++ (void)_finishInstallationWithResult:(BOOL)result hostBundle:(NSBundle *)hostBundle error:(NSError *)error delegate:delegate;
+@end
+
+@interface NSObject (SUInstallerDelegateInformalProtocol)
+- (void)installerFinishedForHostBundle:(NSBundle *)hostBundle;
+- (void)installerForHostBundle:(NSBundle *)hostBundle failedWithError:(NSError *)error;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h
new file mode 100644
index 00000000..94bb3ad0
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUPackageInstaller.h
@@ -0,0 +1,19 @@
+//
+// SUPackageInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPACKAGEINSTALLER_H
+#define SUPACKAGEINSTALLER_H
+
+#import "Sparkle.h"
+#import "SUPlainInstaller.h"
+
+@interface SUPackageInstaller : SUPlainInstaller { }
++ (void)installPath:(NSString *)path overHostBundle:(NSBundle *)bundle delegate:delegate;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h
new file mode 100644
index 00000000..075ffe66
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUPlainInstaller.h
@@ -0,0 +1,18 @@
+//
+// SUPlainInstaller.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/10/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPLAININSTALLER_H
+#define SUPLAININSTALLER_H
+
+#import "Sparkle.h"
+
+@interface SUPlainInstaller : SUInstaller { }
++ (void)performInstallationWithPath:(NSString *)path hostBundle:(NSBundle *)hostBundle delegate:delegate synchronously:(BOOL)synchronously;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h
new file mode 100644
index 00000000..c91c6a32
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUProbingUpdateDriver.h
@@ -0,0 +1,24 @@
+//
+// SUProbingUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUPROBINGUPDATEDRIVER_H
+#define SUPROBINGUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+// This replaces the old SUStatusChecker.
+@interface SUProbingUpdateDriver : SUBasicUpdateDriver { }
+@end
+
+@interface NSObject (SUProbeDriverDelegateProtocol)
+- (void)didFindValidUpdate:(SUAppcastItem *)item toHostBundle:(NSBundle *)hb;
+- (void)didNotFindUpdateToHostBundle:(NSBundle *)hb;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h
new file mode 100644
index 00000000..892a6a74
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUScheduledUpdateDriver.h
@@ -0,0 +1,21 @@
+//
+// SUScheduledUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/6/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSCHEDULEDUPDATEDRIVER_H
+#define SUSCHEDULEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUIBasedUpdateDriver.h"
+
+@interface SUScheduledUpdateDriver : SUUIBasedUpdateDriver {
+ BOOL showErrors;
+}
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h
new file mode 100644
index 00000000..0bc15706
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h
@@ -0,0 +1,36 @@
+//
+// SUStandardVersionComparator.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSTANDARDVERSIONCOMPARATOR_H
+#define SUSTANDARDVERSIONCOMPARATOR_H
+
+
+#import "SUVersionComparisonProtocol.h"
+
+/*!
+ @class
+ @abstract Sparkle's default version comparator.
+ @discussion This comparator is adapted from MacPAD, by Kevin Ballard. It's "dumb" in that it does essentially string comparison, in components split by character type.
+*/
+@interface SUStandardVersionComparator : NSObject <SUVersionComparison> { }
+
+/*!
+ @method
+ @abstract Returns a singleton instance of the comparator.
+*/
++ (SUStandardVersionComparator *)defaultComparator;
+
+/*!
+ @method
+ @abstract Compares version strings through textual analysis.
+ @discussion See the implementation for more details.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h
new file mode 100755
index 00000000..a1fca913
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h
@@ -0,0 +1,30 @@
+//
+// SUStatusChecker.h
+// Sparkle
+//
+// Created by Evan Schoenberg on 7/6/06.
+//
+
+#ifndef SUSTATUSCHECKER_H
+#define SUSTATUSCHECKER_H
+
+#import "SUUpdater.h"
+
+@class SUStatusChecker;
+
+@protocol SUStatusCheckerDelegate <NSObject>
+//versionString will be nil and isNewVersion will be NO if version checking fails.
+- (void)statusChecker:(SUStatusChecker *)statusChecker foundVersion:(NSString *)versionString isNewVersion:(BOOL)isNewVersion;
+@end
+
+@interface SUStatusChecker : SUUpdater {
+ id<SUStatusCheckerDelegate> scDelegate;
+}
+
+// Create a status checker which will notifiy delegate once the appcast version is determined.
+// Notification occurs via the method defined in the SUStatusCheckerDelegate informal protocol.
++ (SUStatusChecker *)statusCheckerForDelegate:(id<SUStatusCheckerDelegate>)delegate;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h
new file mode 100644
index 00000000..dc0c197f
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUStatusController.h
@@ -0,0 +1,42 @@
+//
+// SUStatusController.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/14/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSTATUSCONTROLLER_H
+#define SUSTATUSCONTROLLER_H
+
+#import "SUWindowController.h"
+
+@interface SUStatusController : SUWindowController {
+ double progressValue, maxProgressValue;
+ NSString *title, *statusText, *buttonTitle;
+ IBOutlet NSButton *actionButton;
+ IBOutlet NSProgressIndicator* progressBar;
+ NSBundle *hostBundle;
+}
+
+- (id)initWithHostBundle:(NSBundle *)hostBundle;
+
+// Pass 0 for the max progress value to get an indeterminate progress bar.
+// Pass nil for the status text to not show it.
+- (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText;
+
+// If isDefault is YES, the button's key equivalent will be \r.
+- (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault;
+- (void)setButtonEnabled:(BOOL)enabled;
+- (void)setButtonHidden:(BOOL)hidden;
+
+- (double)progressValue;
+- (void)setProgressValue:(double)value;
+- (double)maxProgressValue;
+- (void)setMaxProgressValue:(double)value;
+
+- (void)setStatusText:(NSString *)statusText;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h
new file mode 100644
index 00000000..8ce9f545
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUSystemProfiler.h
@@ -0,0 +1,17 @@
+//
+// SUSystemProfiler.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/22/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUSYSTEMPROFILER_H
+#define SUSYSTEMPROFILER_H
+
+@interface SUSystemProfiler : NSObject {}
++ (SUSystemProfiler *)sharedSystemProfiler;
+- (NSMutableArray *)systemProfileArrayForHostBundle:(NSBundle *)hostBundle;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h
new file mode 100644
index 00000000..d3459801
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUIBasedUpdateDriver.h
@@ -0,0 +1,23 @@
+//
+// SUUIBasedUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/5/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUIBASEDUPDATEDRIVER_H
+#define SUUIBASEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUBasicUpdateDriver.h"
+
+@class SUStatusController, SUUpdateAlert;
+@interface SUUIBasedUpdateDriver : SUBasicUpdateDriver {
+ SUStatusController *statusController;
+ SUUpdateAlert *updateAlert;
+}
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h
new file mode 100644
index 00000000..337bf500
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h
@@ -0,0 +1,29 @@
+//
+// SUUnarchiver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUNARCHIVER_H
+#define SUUNARCHIVER_H
+
+@interface SUUnarchiver : NSObject {
+ id delegate;
+ NSString *archivePath;
+}
+
+- (void)unarchivePath:(NSString *)path;
+- (void)setDelegate:delegate;
+- (void)cleanUp;
+
+@end
+
+@interface NSObject (SUUnarchiverDelegate)
+- (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length;
+- (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver;
+- (void)unarchiverDidFail:(SUUnarchiver *)unarchiver;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h
new file mode 100644
index 00000000..a0288aba
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h
@@ -0,0 +1,46 @@
+//
+// SUUpdateAlert.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/12/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEALERT_H
+#define SUUPDATEALERT_H
+
+#import "SUWindowController.h"
+
+typedef enum
+{
+ SUInstallUpdateChoice,
+ SURemindMeLaterChoice,
+ SUSkipThisVersionChoice
+} SUUpdateAlertChoice;
+
+@class WebView, SUAppcastItem;
+@interface SUUpdateAlert : SUWindowController {
+ SUAppcastItem *updateItem;
+ NSBundle *hostBundle;
+ id delegate;
+
+ IBOutlet WebView *releaseNotesView;
+ IBOutlet NSTextField *description;
+ NSProgressIndicator *releaseNotesSpinner;
+ BOOL webViewFinishedLoading;
+}
+
+- (id)initWithAppcastItem:(SUAppcastItem *)item hostBundle:(NSBundle *)hostBundle;
+- (void)setDelegate:delegate;
+
+- (IBAction)installUpdate:sender;
+- (IBAction)skipThisVersion:sender;
+- (IBAction)remindMeLater:sender;
+
+@end
+
+@interface NSObject (SUUpdateAlertDelegate)
+- (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h
new file mode 100644
index 00000000..f0c4413d
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdateDriver.h
@@ -0,0 +1,27 @@
+//
+// SUUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/7/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEDRIVER_H
+#define SUUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUUpdateDriver : NSObject
+{
+ BOOL finished;
+ id delegate;
+}
+- (void)checkForUpdatesAtURL:(NSURL *)appcastURL hostBundle:(NSBundle *)hb;
+- (void)abortUpdate;
+- (BOOL)finished;
+
+- delegate;
+- (void)setDelegate:delegate;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h
new file mode 100644
index 00000000..24959da7
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdatePermissionPrompt.h
@@ -0,0 +1,36 @@
+//
+// SUUpdatePermissionPrompt.h
+// Sparkle
+//
+// Created by Andy Matuschak on 1/24/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATEPERMISSIONPROMPT_H
+#define SUUPDATEPERMISSIONPROMPT_H
+
+#import "Sparkle.h"
+
+typedef enum {
+ SUAutomaticallyCheck,
+ SUDoNotAutomaticallyCheck
+} SUPermissionPromptResult;
+
+@interface SUUpdatePermissionPrompt : SUWindowController {
+ NSBundle *hostBundle;
+ id delegate;
+ IBOutlet NSTextField *descriptionTextField;
+ IBOutlet NSView *moreInfoView;
+ IBOutlet NSButton *moreInfoButton;
+ BOOL isShowingMoreInfo, shouldSendProfile;
+}
++ (void)promptWithHostBundle:(NSBundle *)hb delegate:(id)d;
+- (IBAction)toggleMoreInfo:(id)sender;
+- (IBAction)finishPrompt:(id)sender;
+@end
+
+@interface NSObject (SUUpdatePermissionPromptDelegateInformalProtocol)
+- (void)updatePermissionPromptFinishedWithResult:(SUPermissionPromptResult)result;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h
new file mode 100644
index 00000000..80788728
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h
@@ -0,0 +1,80 @@
+//
+// SUUpdater.h
+// Sparkle
+//
+// Created by Andy Matuschak on 1/4/06.
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUPDATER_H
+#define SUUPDATER_H
+
+@class SUUpdateDriver;
+@interface SUUpdater : NSObject {
+ NSTimer *checkTimer;
+ SUUpdateDriver *driver;
+
+ NSBundle *hostBundle;
+ id delegate;
+}
+
+- (void)setHostBundle:(NSBundle *)hostBundle;
+- (void)setDelegate:(id)delegate;
+
+// This IBAction is meant for a main menu item. Hook up any menu item to this action,
+// and Sparkle will check for updates and report back its findings verbosely.
+- (IBAction)checkForUpdates:sender;
+
+// This forces an update to begin with a particular driver (see SU*UpdateDriver.h)
+- (void)checkForUpdatesWithDriver:(SUUpdateDriver *)driver;
+
+- (BOOL)updateInProgress;
+
+@end
+
+@interface NSObject (SUUpdaterDelegateInformalProtocol)
+// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not
+// Sparkle will also be sending along the system profile. This method should return an array of dictionaries with the following keys:
+- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
+
+// Use this to override the default behavior for Sparkle prompting the user about automatic update checks.
+- (BOOL)shouldPromptForPermissionToCheckForUpdates;
+
+// Implement this if you want to do some special handling with the appcast once it finishes loading.
+- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
+
+// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding
+// a valid update, if any, in the given appcast.
+- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast;
+
+// Sent when a valid update is found by the update driver.
+- (void)didFindValidUpdate:(SUAppcastItem *)update;
+
+// Sent when the user makes a choice in the update alert dialog (install now / remind me later / skip this version).
+- (void)userChoseAction:(SUUpdateAlertChoice)action forUpdate:(SUAppcastItem *)update;
+
+// Sent immediately before installing the specified update.
+- (void)updateWillInstall:(SUAppcastItem *)update;
+
+// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue.
+- (BOOL)shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation;
+
+// Called immediately before relaunching.
+- (void)updaterWillRelaunchApplication;
+
+@end
+
+// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
+#ifdef DEBUG
+#define SU_MIN_CHECK_INTERVAL 60
+#else
+#define SU_MIN_CHECK_INTERVAL 60*60
+#endif
+
+#ifdef DEBUG
+#define SU_DEFAULT_CHECK_INTERVAL 60
+#else
+#define SU_DEFAULT_CHECK_INTERVAL 60*60*24
+#endif
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h
new file mode 100644
index 00000000..ba2eedb2
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserDefaults.h
@@ -0,0 +1,41 @@
+//
+// SUUserDefaults.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUSERDEFAULTS_H
+#define SUUSERDEFAULTS_H
+
+/*!
+ @class
+ @abstract A substitute for NSUserDefaults that will work with arbitrary bundle identifiers.
+ @discussion Make sure you call -setIdentifier: before using SUUserDefaults. The other methods in this class work just like those in NSUserDefaults.
+*/
+
+@interface SUUserDefaults : NSObject {
+ NSString *identifier;
+}
+
+/*!
+ @method
+ @abstract Returns a singleton instance of the user defaults class.
+*/
++ (SUUserDefaults *)standardUserDefaults;
+
+/*!
+ @method
+ @abstract Sets which bundle identifier to use when setting and retrieving defaults.
+ @discussion It is imperative that you set the identifier through this method before trying to set or retrieve defaults.
+*/
+- (void)setIdentifier:(NSString *)identifier;
+
+- (id)objectForKey:(NSString *)defaultName;
+- (void)setObject:(id)value forKey:(NSString *)defaultName;
+- (BOOL)boolForKey:(NSString *)defaultName;
+- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h
new file mode 100644
index 00000000..6849c91d
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUUserInitiatedUpdateDriver.h
@@ -0,0 +1,21 @@
+//
+// SUUserInitiatedUpdateDriver.h
+// Sparkle
+//
+// Created by Andy Matuschak on 5/30/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUUSERINITIATEDUPDATEDRIVER_H
+#define SUUSERINITIATEDUPDATEDRIVER_H
+
+#import <Cocoa/Cocoa.h>
+#import "SUUIBasedUpdateDriver.h"
+
+@interface SUUserInitiatedUpdateDriver : SUUIBasedUpdateDriver {
+ SUStatusController *checkingController;
+}
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
new file mode 100644
index 00000000..3d11ae87
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
@@ -0,0 +1,27 @@
+//
+// SUVersionComparisonProtocol.h
+// Sparkle
+//
+// Created by Andy Matuschak on 12/21/07.
+// Copyright 2007 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUVERSIONCOMPARISONPROTOCOL_H
+#define SUVERSIONCOMPARISONPROTOCOL_H
+
+/*!
+ @protocol
+ @abstract Implement this protocol to provide version comparison facilities for Sparkle.
+*/
+@protocol SUVersionComparison
+
+/*!
+ @method
+ @abstract An abstract method to compare two version strings.
+ @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent.
+*/
+- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
+
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h
new file mode 100644
index 00000000..b263a8d4
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonTest.h
@@ -0,0 +1,16 @@
+//
+// SUVersionComparisonTest.h
+// Sparkle
+//
+// Created by Andy Matuschak on 4/15/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#import <SenTestingKit/SenTestingKit.h>
+
+
+@interface SUVersionComparisonTest : SenTestCase {
+
+}
+
+@end
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/SUWindowController.h b/Frameworks/Sparkle.framework/Versions/A/Headers/SUWindowController.h
new file mode 100644
index 00000000..8b50a64c
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/SUWindowController.h
@@ -0,0 +1,19 @@
+//
+// SUWindowController.h
+// Sparkle
+//
+// Created by Andy Matuschak on 2/13/08.
+// Copyright 2008 Andy Matuschak. All rights reserved.
+//
+
+#ifndef SUWINDOWCONTROLLER_H
+#define SUWINDOWCONTROLLER_H
+
+#import <Cocoa/Cocoa.h>
+
+@interface SUWindowController : NSWindowController { }
+// We use this instead of plain old NSWindowController initWithWindowNibName so that we'll be able to find the right path when running in a bundle loaded from another app.
+- (id)initWithHostBundle:(NSBundle *)hb windowNibName:(NSString *)nibName;
+@end
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h b/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h
new file mode 100644
index 00000000..924ce289
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h
@@ -0,0 +1,63 @@
+//
+// Sparkle.h
+// Sparkle
+//
+// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07)
+// Copyright 2006 Andy Matuschak. All rights reserved.
+//
+
+//
+// Prefix header for all source files of the 'Sparkle' target in the 'Sparkle' project.
+//
+
+#ifndef SPARKLE_H
+#define SPARKLE_H
+
+#define SULocalizedString(key,comment) NSLocalizedStringFromTableInBundle(key, @"Sparkle", [NSBundle bundleForClass:[self class]], comment)
+
+#ifdef __OBJC__
+#import <Cocoa/Cocoa.h>
+#import "SUConstants.h"
+#endif
+
+
+// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless
+// there are name-space collisions) so we can list all of them to start with:
+
+#import "NSBundle+SUAdditions.h"
+#import "NSFileManager+Aliases.h"
+#import "NSFileManager+Authentication.h"
+#import "NSFileManager+Verification.h"
+#import "NSString+extras.h"
+#import "NSURL+Parameters.h"
+#import "NSWorkspace_RBAdditions.h"
+#import "NSWorkspace+SystemVersion.h"
+
+#import "NTSynchronousTask.h"
+
+#import "RSS.h"
+
+#import "SUAppcast.h"
+#import "SUAppcastItem.h"
+#import "SUAutomaticUpdateAlert.h"
+#import "SUAutomaticUpdateDriver.h"
+#import "SUBasicUpdateDriver.h"
+#import "SUConstants.h"
+#import "SUInstaller.h"
+#import "SUProbingUpdateDriver.h"
+#import "SUScheduledUpdateDriver.h"
+#import "SUStandardVersionComparator.h"
+#import "SUStatusController.h"
+#import "SUSystemProfiler.h"
+#import "SUUIBasedUpdateDriver.h"
+#import "SUUnarchiver.h"
+#import "SUUpdateAlert.h"
+#import "SUUpdateDriver.h"
+#import "SUUpdater.h"
+#import "SUUpdatePermissionPrompt.h"
+#import "SUUserInitiatedUpdateDriver.h"
+#import "SUUserDefaults.h"
+#import "SUVersionComparisonProtocol.h"
+#import "SUWindowController.h"
+
+#endif
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist b/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist
new file mode 100644
index 00000000..2eb30510
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,24 @@
+<?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>CFBundleExecutable</key>
+ <string>Sparkle</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.andymatuschak.Sparkle</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Sparkle</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.5 Beta 1</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.5</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist b/Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
new file mode 100644
index 00000000..92ef9471
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
@@ -0,0 +1,174 @@
+<?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>ADP2,1</key>
+ <string>Developer Transition Kit</string>
+ <key>MacBook1,1</key>
+ <string>MacBook (Core Duo)</string>
+ <key>MacBook2,1</key>
+ <string>MacBook (Core 2 Duo)</string>
+ <key>MacBook4,1</key>
+ <string>MacBook (Core 2 Duo Feb 2008)</string>
+ <key>MacBookAir1,1</key>
+ <string>MacBook Air (January 2008)</string>
+ <key>MacBookPro1,1</key>
+ <string>MacBook Pro Core Duo (15-inch)</string>
+ <key>MacBookPro1,2</key>
+ <string>MacBook Pro Core Duo (17-inch)</string>
+ <key>MacBookPro2,1</key>
+ <string>MacBook Pro Core 2 Duo (17-inch)</string>
+ <key>MacBookPro2,2</key>
+ <string>MacBook Pro Core 2 Duo (15-inch)</string>
+ <key>MacBookPro3,1</key>
+ <string>MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo)</string>
+ <key>MacBookPro3,2</key>
+ <string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string>
+ <key>MacBookPro4,1</key>
+ <string>MacBook Pro (Core 2 Duo Feb 2008)</string>
+ <key>MacPro1,1</key>
+ <string>Mac Pro (four-core)</string>
+ <key>MacPro2,1</key>
+ <string>Mac Pro (eight-core)</string>
+ <key>MacPro3,1</key>
+ <string>Mac Pro (January 2008 4- or 8- core "Harpertown")</string>
+ <key>Macmini1,1</key>
+ <string>Mac Mini (Core Solo/Duo)</string>
+ <key>PowerBook1,1</key>
+ <string>PowerBook G3</string>
+ <key>PowerBook2,1</key>
+ <string>iBook G3</string>
+ <key>PowerBook2,2</key>
+ <string>iBook G3 (FireWire)</string>
+ <key>PowerBook2,3</key>
+ <string>iBook G3</string>
+ <key>PowerBook2,4</key>
+ <string>iBook G3</string>
+ <key>PowerBook3,1</key>
+ <string>PowerBook G3 (FireWire)</string>
+ <key>PowerBook3,2</key>
+ <string>PowerBook G4</string>
+ <key>PowerBook3,3</key>
+ <string>PowerBook G4 (Gigabit Ethernet)</string>
+ <key>PowerBook3,4</key>
+ <string>PowerBook G4 (DVI)</string>
+ <key>PowerBook3,5</key>
+ <string>PowerBook G4 (1GHz / 867MHz)</string>
+ <key>PowerBook4,1</key>
+ <string>iBook G3 (Dual USB, Late 2001)</string>
+ <key>PowerBook4,2</key>
+ <string>iBook G3 (16MB VRAM)</string>
+ <key>PowerBook4,3</key>
+ <string>iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003)</string>
+ <key>PowerBook5,1</key>
+ <string>PowerBook G4 (17 inch)</string>
+ <key>PowerBook5,2</key>
+ <string>PowerBook G4 (15 inch FW 800)</string>
+ <key>PowerBook5,3</key>
+ <string>PowerBook G4 (17-inch 1.33GHz)</string>
+ <key>PowerBook5,4</key>
+ <string>PowerBook G4 (15 inch 1.5/1.33GHz)</string>
+ <key>PowerBook5,5</key>
+ <string>PowerBook G4 (17-inch 1.5GHz)</string>
+ <key>PowerBook5,6</key>
+ <string>PowerBook G4 (15 inch 1.67GHz/1.5GHz)</string>
+ <key>PowerBook5,7</key>
+ <string>PowerBook G4 (17-inch 1.67GHz)</string>
+ <key>PowerBook5,8</key>
+ <string>PowerBook G4 (Double layer SD, 15 inch)</string>
+ <key>PowerBook5,9</key>
+ <string>PowerBook G4 (Double layer SD, 17 inch)</string>
+ <key>PowerBook6,1</key>
+ <string>PowerBook G4 (12 inch)</string>
+ <key>PowerBook6,2</key>
+ <string>PowerBook G4 (12 inch, DVI)</string>
+ <key>PowerBook6,3</key>
+ <string>iBook G4</string>
+ <key>PowerBook6,4</key>
+ <string>PowerBook G4 (12 inch 1.33GHz)</string>
+ <key>PowerBook6,5</key>
+ <string>iBook G4 (Early-Late 2004)</string>
+ <key>PowerBook6,7</key>
+ <string>iBook G4 (Mid 2005)</string>
+ <key>PowerBook6,8</key>
+ <string>PowerBook G4 (12 inch 1.5GHz)</string>
+ <key>PowerMac1,1</key>
+ <string>Power Macintosh G3 (Blue &amp; White)</string>
+ <key>PowerMac1,2</key>
+ <string>Power Macintosh G4 (PCI Graphics)</string>
+ <key>PowerMac10,1</key>
+ <string>Mac Mini G4</string>
+ <key>PowerMac10,2</key>
+ <string>Mac Mini (Late 2005)</string>
+ <key>PowerMac11,2</key>
+ <string>Power Macintosh G5 (Late 2005)</string>
+ <key>PowerMac12,1</key>
+ <string>iMac G5 (iSight)</string>
+ <key>PowerMac2,1</key>
+ <string>iMac G3 (Slot-loading CD-ROM)</string>
+ <key>PowerMac2,2</key>
+ <string>iMac G3 (Summer 2000)</string>
+ <key>PowerMac3,1</key>
+ <string>Power Macintosh G4 (AGP Graphics)</string>
+ <key>PowerMac3,2</key>
+ <string>Power Macintosh G4 (AGP Graphics)</string>
+ <key>PowerMac3,3</key>
+ <string>Power Macintosh G4 (Gigabit Ethernet)</string>
+ <key>PowerMac3,4</key>
+ <string>Power Macintosh G4 (Digital Audio)</string>
+ <key>PowerMac3,5</key>
+ <string>Power Macintosh G4 (Quick Silver)</string>
+ <key>PowerMac3,6</key>
+ <string>Power Macintosh G4 (Mirrored Drive Door)</string>
+ <key>PowerMac4,1</key>
+ <string>iMac G3 (Early/Summer 2001)</string>
+ <key>PowerMac4,2</key>
+ <string>iMac G4 (Flat Panel)</string>
+ <key>PowerMac4,4</key>
+ <string>eMac</string>
+ <key>PowerMac4,5</key>
+ <string>iMac G4 (17-inch Flat Panel)</string>
+ <key>PowerMac5,1</key>
+ <string>Power Macintosh G4 Cube</string>
+ <key>PowerMac6,1</key>
+ <string>iMac G4 (USB 2.0)</string>
+ <key>PowerMac6,3</key>
+ <string>iMac G4 (20-inch Flat Panel)</string>
+ <key>PowerMac6,4</key>
+ <string>eMac (USB 2.0, 2005)</string>
+ <key>PowerMac7,2</key>
+ <string>Power Macintosh G5</string>
+ <key>PowerMac7,3</key>
+ <string>Power Macintosh G5</string>
+ <key>PowerMac8,1</key>
+ <string>iMac G5</string>
+ <key>PowerMac8,2</key>
+ <string>iMac G5 (Ambient Light Sensor)</string>
+ <key>PowerMac9,1</key>
+ <string>Power Macintosh G5 (Late 2005)</string>
+ <key>RackMac1,1</key>
+ <string>Xserve G4</string>
+ <key>RackMac1,2</key>
+ <string>Xserve G4 (slot-loading, cluster node)</string>
+ <key>RackMac3,1</key>
+ <string>Xserve G5</string>
+ <key>Xserve1,1</key>
+ <string>Xserve (Intel Xeon)</string>
+ <key>Xserve2,1</key>
+ <string>Xserve (January 2008 quad-core)</string>
+ <key>iMac1,1</key>
+ <string>iMac G3 (Rev A-D)</string>
+ <key>iMac4,1</key>
+ <string>iMac (Core Duo)</string>
+ <key>iMac4,2</key>
+ <string>iMac for Education (17-inch, Core Duo)</string>
+ <key>iMac5,1</key>
+ <string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string>
+ <key>iMac5,2</key>
+ <string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string>
+ <key>iMac6,1</key>
+ <string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string>
+ <key>iMac8,1</key>
+ <string>iMac (April 2008)</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib
new file mode 100644
index 00000000..3c6ae83f
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib
@@ -0,0 +1,48 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>NSApplication</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSResponder</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>SUStatusController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>actionButton</key>
+ <string>NSButton</string>
+ <key>progressBar</key>
+ <string>NSProgressIndicator</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib
new file mode 100644
index 00000000..4318cb1b
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>629</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C31</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib
new file mode 100644
index 00000000..4bdc9d67
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib
new file mode 100644
index 00000000..4b1ab30e
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib
@@ -0,0 +1,50 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>doNotInstall</key>
+ <string>id</string>
+ <key>installLater</key>
+ <string>id</string>
+ <key>installNow</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUAutomaticUpdateAlert</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib
new file mode 100644
index 00000000..ab36d310
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>658</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib
new file mode 100644
index 00000000..7630390c
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib
new file mode 100644
index 00000000..994d4c36
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib
@@ -0,0 +1,67 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSApplication</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSResponder</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>installUpdate</key>
+ <string>id</string>
+ <key>remindMeLater</key>
+ <string>id</string>
+ <key>skipThisVersion</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUUpdateAlert</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>delegate</key>
+ <string>id</string>
+ <key>description</key>
+ <string>NSTextField</string>
+ <key>releaseNotesView</key>
+ <string>WebView</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib
new file mode 100644
index 00000000..d9b82f55
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib
@@ -0,0 +1,20 @@
+<?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>IBFramework Version</key>
+ <string>649</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib
new file mode 100644
index 00000000..b3a80995
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib
new file mode 100644
index 00000000..5220a221
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib
@@ -0,0 +1,59 @@
+<?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>IBClasses</key>
+ <array>
+ <dict>
+ <key>CLASS</key>
+ <string>SUWindowController</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSWindowController</string>
+ </dict>
+ <dict>
+ <key>ACTIONS</key>
+ <dict>
+ <key>finishPrompt</key>
+ <string>id</string>
+ <key>toggleMoreInfo</key>
+ <string>id</string>
+ </dict>
+ <key>CLASS</key>
+ <string>SUUpdatePermissionPrompt</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>OUTLETS</key>
+ <dict>
+ <key>delegate</key>
+ <string>id</string>
+ <key>descriptionTextField</key>
+ <string>NSTextField</string>
+ <key>moreInfoButton</key>
+ <string>NSButton</string>
+ <key>moreInfoView</key>
+ <string>NSView</string>
+ </dict>
+ <key>SUPERCLASS</key>
+ <string>SUWindowController</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>FirstResponder</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ <key>SUPERCLASS</key>
+ <string>NSObject</string>
+ </dict>
+ <dict>
+ <key>CLASS</key>
+ <string>NSObject</string>
+ <key>LANGUAGE</key>
+ <string>ObjC</string>
+ </dict>
+ </array>
+ <key>IBVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib
new file mode 100644
index 00000000..cee1fbcc
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib
@@ -0,0 +1,21 @@
+<?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>IBFramework Version</key>
+ <string>644</string>
+ <key>IBLastKnownRelativeProjectPath</key>
+ <string>../../Sparkle.xcodeproj</string>
+ <key>IBOldestOS</key>
+ <integer>5</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>6</integer>
+ <integer>42</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>9C7010</string>
+ <key>targetFramework</key>
+ <string>IBCocoaFramework</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib
new file mode 100644
index 00000000..6df9ce74
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
new file mode 100644
index 00000000..34cf8170
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch b/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch
new file mode 100755
index 00000000..91525fe6
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/Sparkle b/Frameworks/Sparkle.framework/Versions/A/Sparkle
new file mode 100755
index 00000000..05c8dab2
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/Sparkle
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist
new file mode 100644
index 00000000..150493ef
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/Info.plist
@@ -0,0 +1,24 @@
+<?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>CFBundleExecutable</key>
+ <string>relaunch</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.andymatuschak.Sparkle.relaunch</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.5</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+ <key>NSUIElement</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch
new file mode 100755
index 00000000..45b57f0d
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/MacOS/relaunch
Binary files differ
diff --git a/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo
new file mode 100644
index 00000000..bd04210f
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/A/relaunch.app/Contents/PkgInfo
@@ -0,0 +1 @@
+APPL???? \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/Versions/Current b/Frameworks/Sparkle.framework/Versions/Current
new file mode 120000
index 00000000..8c7e5a66
--- /dev/null
+++ b/Frameworks/Sparkle.framework/Versions/Current
@@ -0,0 +1 @@
+A \ No newline at end of file
diff --git a/Frameworks/Sparkle.framework/relaunch.app b/Frameworks/Sparkle.framework/relaunch.app
new file mode 120000
index 00000000..d2b01a5e
--- /dev/null
+++ b/Frameworks/Sparkle.framework/relaunch.app
@@ -0,0 +1 @@
+Versions/Current/relaunch.app \ No newline at end of file