summaryrefslogtreecommitdiffstats
path: root/Mac/Python/macgetargv.c
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2001-09-05 22:07:52 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2001-09-05 22:07:52 (GMT)
commitdff7770b7f19b3cfdcbcbc4dc205f53ef6170c2d (patch)
tree55145f0e57ac3d18fa9ba320a4ccca5c580f6443 /Mac/Python/macgetargv.c
parentb30e10663304461e4b29342bc7cbc6e428060a25 (diff)
downloadcpython-dff7770b7f19b3cfdcbcbc4dc205f53ef6170c2d.zip
cpython-dff7770b7f19b3cfdcbcbc4dc205f53ef6170c2d.tar.gz
cpython-dff7770b7f19b3cfdcbcbc4dc205f53ef6170c2d.tar.bz2
Changes to make these work under OSX as the main program for a
fullblown drag and drop application. To my surprise it is starting to work already: Python actually executes a script dropped on it. To be done: - Make sure this still works in MacPython - Don't lose argv[0] in the process - Applet support
Diffstat (limited to 'Mac/Python/macgetargv.c')
-rw-r--r--Mac/Python/macgetargv.c53
1 files changed, 39 insertions, 14 deletions
diff --git a/Mac/Python/macgetargv.c b/Mac/Python/macgetargv.c
index 1bd57ad..c5af0ec 100644
--- a/Mac/Python/macgetargv.c
+++ b/Mac/Python/macgetargv.c
@@ -27,6 +27,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <stdlib.h>
+#ifdef WITHOUT_FRAMEWORKS
#include <Types.h>
#include <Files.h>
#include <Events.h>
@@ -40,6 +41,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <Menus.h>
#include <Dialogs.h>
#include <Windows.h>
+#else
+#include <Carbon/Carbon.h>
+#endif /* WITHOUT_FRAMEWORKS */
#if UNIVERSAL_INTERFACES_VERSION >= 0x0340
typedef long refcontype;
@@ -54,7 +58,6 @@ static int arg_count;
static char *arg_vector[256];
FSSpec PyMac_ApplicationFSSpec;
char PyMac_ApplicationPath[256];
-static int applocation_inited;
/* Duplicate a string to the heap. We also export this since it isn't standard
** and others use it
@@ -70,14 +73,33 @@ strdup(const char *src)
}
#endif
+#if TARGET_API_MAC_OSX
+OSErr
+PyMac_GetFullPath(FSSpec *fss, char *path)
+{
+ FSRef fsr;
+ OSErr err;
+
+ *path = '\0';
+ err = FSpMakeFSRef(fss, &fsr);
+ if ( err ) return err;
+ err = (OSErr)FSRefMakePath(&fsr, path, 1024);
+ if ( err ) return err;
+ return 0;
+}
+#endif /* TARGET_API_MAC_OSX */
+
+
+#if !TARGET_API_MAC_OSX
/* Initialize FSSpec and full name of current application */
OSErr
-PyMac_init_process_location()
+PyMac_init_process_location(void)
{
ProcessSerialNumber currentPSN;
ProcessInfoRec info;
OSErr err;
+ static int applocation_inited;
if ( applocation_inited ) return 0;
currentPSN.highLongOfPSN = 0;
@@ -92,6 +114,7 @@ PyMac_init_process_location()
applocation_inited = 1;
return 0;
}
+#endif /* !TARGET_API_MAC_OSX */
/* Check that there aren't any args remaining in the event */
@@ -147,15 +170,15 @@ handle_open_doc(const AppleEvent *theAppleEvent, AppleEvent *reply, refcontype r
DescType rttype;
long i, ndocs, size;
FSSpec fss;
- char path[256];
+ char path[1024];
got_one = 1;
- if (err = AEGetParamDesc(theAppleEvent,
- keyDirectObject, typeAEList, &doclist))
+ if ((err = AEGetParamDesc(theAppleEvent,
+ keyDirectObject, typeAEList, &doclist)))
return err;
- if (err = get_missing_params(theAppleEvent))
+ if ((err = get_missing_params(theAppleEvent)))
return err;
- if (err = AECountItems(&doclist, &ndocs))
+ if ((err = AECountItems(&doclist, &ndocs)))
return err;
for(i = 1; i <= ndocs; i++) {
err = AEGetNthPtr(&doclist, i, typeFSS,
@@ -174,7 +197,7 @@ AEEventHandlerUPP open_app_upp;
AEEventHandlerUPP not_upp;
static void
-set_ae_handlers()
+set_ae_handlers(void)
{
open_doc_upp = NewAEEventHandlerUPP(&handle_open_doc);
open_app_upp = NewAEEventHandlerUPP(&handle_open_app);
@@ -193,7 +216,7 @@ set_ae_handlers()
/* Uninstall standard core event handlers */
static void
-reset_ae_handlers()
+reset_ae_handlers(void)
{
AERemoveEventHandler(kCoreEventClass, kAEOpenApplication,
open_app_upp, false);
@@ -208,7 +231,7 @@ reset_ae_handlers()
/* Wait for events until a core event has been handled */
static void
-event_loop()
+event_loop(void)
{
EventRecord event;
int n;
@@ -229,14 +252,16 @@ event_loop()
/* Get the argv vector, return argc */
int
-PyMac_GetArgv(pargv, noevents)
- char ***pargv;
- int noevents;
+PyMac_GetArgv(char ***pargv, int noevents)
{
-
arg_count = 0;
+#if TARGET_API_MAC_OSX
+ /* In an OSX bundle argv[0] is okay */
+ arg_count++;
+#else
(void)PyMac_init_process_location();
arg_vector[arg_count++] = strdup(PyMac_ApplicationPath);
+#endif /* TARGET_API_MAC_OSX */
if( !noevents ) {
set_ae_handlers();