annotate Mac/Modules/macosmodule.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents d0c03c32e8d9
children d6b292a33cfe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2091
b4d982c648bb 1995 copyright
Guido van Rossum <guido@python.org>
parents: 2033
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
b4d982c648bb 1995 copyright
Guido van Rossum <guido@python.org>
parents: 2033
diff changeset
3 The Netherlands.
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 documentation for any purpose and without fee is hereby granted,
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 both that copyright notice and this permission notice appear in
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 Centrum or CWI not be used in advertising or publicity pertaining to
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 distribution of the software without specific, written prior permission.
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 ******************************************************************/
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 /* Macintosh OS-specific interface */
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 #include "Python.h"
2033
e43a1942e588 - Use PyErr_Mac for nicer exceptions
Jack Jansen <jack.jansen@cwi.nl>
parents: 1916
diff changeset
28 #include "macglue.h"
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
30 #include <Windows.h>
3425
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
31 #include <Files.h>
4342
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
32 #include <LowMem.h>
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
33
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 static PyObject *MacOS_Error; /* Exception MacOS.Error */
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
2418
22b1ab0e6473 change SC ifdef to MPW
Guido van Rossum <guido@python.org>
parents: 2401
diff changeset
36 #ifdef MPW
2383
4cc8137ccb56 cfm 68k support
Guido van Rossum <guido@python.org>
parents: 2276
diff changeset
37 #define bufferIsSmall -607 /*error returns from Post and Accept */
4cc8137ccb56 cfm 68k support
Guido van Rossum <guido@python.org>
parents: 2276
diff changeset
38 #endif
4cc8137ccb56 cfm 68k support
Guido van Rossum <guido@python.org>
parents: 2276
diff changeset
39
3425
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
40 static PyObject *ErrorObject;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
41
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
42 /* ----------------------------------------------------- */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
43
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
44 /* Declarations for objects of type Resource fork */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
45
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
46 typedef struct {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
47 PyObject_HEAD
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
48 short fRefNum;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
49 int isclosed;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
50 } rfobject;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
51
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
52 staticforward PyTypeObject Rftype;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
53
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
54
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
55
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
56 /* ---------------------------------------------------------------- */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
57
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
58 static void
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
59 do_close(self)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
60 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
61 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
62 if (self->isclosed ) return;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
63 (void)FSClose(self->fRefNum);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
64 self->isclosed = 1;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
65 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
66
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
67 static char rf_read__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
68 "Read data from resource fork"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
69 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
70
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
71 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
72 rf_read(self, args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
73 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
74 PyObject *args;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
75 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
76 long n;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
77 PyObject *v;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
78 OSErr err;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
79
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
80 if (self->isclosed) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
81 PyErr_SetString(PyExc_ValueError, "Operation on closed file");
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
82 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
83 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
84
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
85 if (!PyArg_ParseTuple(args, "l", &n))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
86 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
87
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
88 v = PyString_FromStringAndSize((char *)NULL, n);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
89 if (v == NULL)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
90 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
91
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
92 err = FSRead(self->fRefNum, &n, PyString_AsString(v));
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
93 if (err && err != eofErr) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
94 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
95 Py_DECREF(v);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
96 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
97 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
98 _PyString_Resize(&v, n);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
99 return v;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
100 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
101
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
102
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
103 static char rf_write__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
104 "Write to resource fork"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
105 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
106
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
107 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
108 rf_write(self, args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
109 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
110 PyObject *args;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
111 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
112 char *buffer;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
113 long size;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
114 OSErr err;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
115
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
116 if (self->isclosed) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
117 PyErr_SetString(PyExc_ValueError, "Operation on closed file");
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
118 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
119 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
120 if (!PyArg_ParseTuple(args, "s#", &buffer, &size))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
121 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
122 err = FSWrite(self->fRefNum, &size, buffer);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
123 if (err) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
124 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
125 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
126 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
127 Py_INCREF(Py_None);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
128 return Py_None;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
129 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
130
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
131
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
132 static char rf_seek__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
133 "Set file position"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
134 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
135
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
136 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
137 rf_seek(self, args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
138 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
139 PyObject *args;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
140 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
141 long amount, pos;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
142 int whence = SEEK_SET;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
143 long eof;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
144 OSErr err;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
145
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
146 if (self->isclosed) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
147 PyErr_SetString(PyExc_ValueError, "Operation on closed file");
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
148 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
149 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
150 if (!PyArg_ParseTuple(args, "l|i", &amount, &whence))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
151 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
152
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
153 if ( err = GetEOF(self->fRefNum, &eof))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
154 goto ioerr;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
155
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
156 switch (whence) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
157 case SEEK_CUR:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
158 if (err = GetFPos(self->fRefNum, &pos))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
159 goto ioerr;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
160 break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
161 case SEEK_END:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
162 pos = eof;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
163 break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
164 case SEEK_SET:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
165 pos = 0;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
166 break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
167 default:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
168 PyErr_BadArgument();
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
169 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
170 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
171
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
172 pos += amount;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
173
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
174 /* Don't bother implementing seek past EOF */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
175 if (pos > eof || pos < 0) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
176 PyErr_BadArgument();
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
177 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
178 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
179
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
180 if ( err = SetFPos(self->fRefNum, fsFromStart, pos) ) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
181 ioerr:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
182 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
183 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
184 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
185 Py_INCREF(Py_None);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
186 return Py_None;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
187 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
188
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
189
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
190 static char rf_tell__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
191 "Get file position"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
192 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
193
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
194 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
195 rf_tell(self, args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
196 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
197 PyObject *args;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
198 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
199 long where;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
200 OSErr err;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
201
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
202 if (self->isclosed) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
203 PyErr_SetString(PyExc_ValueError, "Operation on closed file");
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
204 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
205 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
206 if (!PyArg_ParseTuple(args, ""))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
207 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
208 if ( err = GetFPos(self->fRefNum, &where) ) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
209 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
210 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
211 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
212 return PyInt_FromLong(where);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
213 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
214
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
215 static char rf_close__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
216 "Close resource fork"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
217 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
218
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
219 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
220 rf_close(self, args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
221 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
222 PyObject *args;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
223 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
224 if (!PyArg_ParseTuple(args, ""))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
225 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
226 do_close(self);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
227 Py_INCREF(Py_None);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
228 return Py_None;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
229 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
230
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
231
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
232 static struct PyMethodDef rf_methods[] = {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
233 {"read", rf_read, 1, rf_read__doc__},
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
234 {"write", rf_write, 1, rf_write__doc__},
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
235 {"seek", rf_seek, 1, rf_seek__doc__},
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
236 {"tell", rf_tell, 1, rf_tell__doc__},
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
237 {"close", rf_close, 1, rf_close__doc__},
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
238
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
239 {NULL, NULL} /* sentinel */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
240 };
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
241
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
242 /* ---------- */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
243
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
244
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
245 static rfobject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
246 newrfobject()
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
247 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
248 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
249
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
250 self = PyObject_NEW(rfobject, &Rftype);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
251 if (self == NULL)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
252 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
253 self->isclosed = 1;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
254 return self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
255 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
256
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
257
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
258 static void
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
259 rf_dealloc(self)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
260 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
261 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
262 do_close(self);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
263 PyMem_DEL(self);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
264 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
265
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
266 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
267 rf_getattr(self, name)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
268 rfobject *self;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
269 char *name;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
270 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
271 return Py_FindMethod(rf_methods, (PyObject *)self, name);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
272 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
273
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
274 static char Rftype__doc__[] =
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
275 "Resource fork file object"
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
276 ;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
277
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
278 static PyTypeObject Rftype = {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
279 PyObject_HEAD_INIT(&PyType_Type)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
280 0, /*ob_size*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
281 "Resource fork", /*tp_name*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
282 sizeof(rfobject), /*tp_basicsize*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
283 0, /*tp_itemsize*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
284 /* methods */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
285 (destructor)rf_dealloc, /*tp_dealloc*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
286 (printfunc)0, /*tp_print*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
287 (getattrfunc)rf_getattr, /*tp_getattr*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
288 (setattrfunc)0, /*tp_setattr*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
289 (cmpfunc)0, /*tp_compare*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
290 (reprfunc)0, /*tp_repr*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
291 0, /*tp_as_number*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
292 0, /*tp_as_sequence*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
293 0, /*tp_as_mapping*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
294 (hashfunc)0, /*tp_hash*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
295 (ternaryfunc)0, /*tp_call*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
296 (reprfunc)0, /*tp_str*/
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
297
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
298 /* Space for future expansion */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
299 0L,0L,0L,0L,
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
300 Rftype__doc__ /* Documentation string */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
301 };
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
302
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
303 /* End of code for Resource fork objects */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
304 /* -------------------------------------------------------- */
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
305
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 /*----------------------------------------------------------------------*/
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
307 /* Miscellaneous File System Operations */
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
308
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
309 static PyObject *
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
310 MacOS_GetCreatorAndType(PyObject *self, PyObject *args)
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
311 {
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
312 Str255 name;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
313 FInfo info;
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
314 PyObject *creator, *type, *res;
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
315 OSErr err;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
316
2209
4053d4cb50e0 renamed Get routines to PyMac_Get; added macfs to config.c
Guido van Rossum <guido@python.org>
parents: 2184
diff changeset
317 if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, &name))
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
318 return NULL;
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
319 if ((err = GetFInfo(name, 0, &info)) != noErr)
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
320 return PyErr_Mac(MacOS_Error, err);
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
321 creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4);
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
322 type = PyString_FromStringAndSize((char *)&info.fdType, 4);
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
323 res = Py_BuildValue("OO", creator, type);
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
324 Py_DECREF(creator);
2136
c57b5c50a2d2 rename2 changes
Guido van Rossum <guido@python.org>
parents: 2092
diff changeset
325 Py_DECREF(type);
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
326 return res;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
327 }
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
328
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
329 static PyObject *
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
330 MacOS_SetCreatorAndType(PyObject *self, PyObject *args)
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
331 {
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
332 Str255 name;
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
333 ResType creator, type;
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
334 FInfo info;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
335 OSErr err;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
336
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
337 if (!PyArg_ParseTuple(args, "O&O&O&",
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
338 PyMac_GetStr255, &name, PyMac_GetOSType, &creator, PyMac_GetOSType, &type))
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
339 return NULL;
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
340 if ((err = GetFInfo(name, 0, &info)) != noErr)
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
341 return PyErr_Mac(MacOS_Error, err);
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
342 info.fdCreator = creator;
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
343 info.fdType = type;
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
344 if ((err = SetFInfo(name, 0, &info)) != noErr)
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
345 return PyErr_Mac(MacOS_Error, err);
2092
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
346 Py_INCREF(Py_None);
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
347 return Py_None;
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
348 }
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
349
b03b43bee1ab Used new getargs interface; added {Get,Set}FileInfo.
Guido van Rossum <guido@python.org>
parents: 2091
diff changeset
350 /*----------------------------------------------------------------------*/
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
351 /* STDWIN High Level Event interface */
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
352
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
353 #include <EPPC.h>
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
354 #include <Events.h>
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
355
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
356 #ifdef USE_STDWIN
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
357
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
358 extern void (*_w_high_level_event_proc)(EventRecord *);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
359
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
360 static PyObject *MacOS_HighLevelEventHandler = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
361
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
362 static void
2232
8d5e36b37a41 Got rid of the Resource and Sound interfaces, in favor of the ones
Guido van Rossum <guido@python.org>
parents: 2229
diff changeset
363 MacOS_HighLevelEventProc(EventRecord *e)
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
364 {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
365 if (MacOS_HighLevelEventHandler != NULL) {
2232
8d5e36b37a41 Got rid of the Resource and Sound interfaces, in favor of the ones
Guido van Rossum <guido@python.org>
parents: 2229
diff changeset
366 PyObject *args = PyMac_BuildEventRecord(e);
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
367 PyObject *res;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
368 if (args == NULL)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
369 res = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
370 else {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
371 res = PyEval_CallObject(MacOS_HighLevelEventHandler, args);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
372 Py_DECREF(args);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
373 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
374 if (res == NULL) {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
375 fprintf(stderr, "Exception in MacOS_HighLevelEventProc:\n");
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
376 PyErr_Print();
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
377 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
378 else
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
379 Py_DECREF(res);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
380 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
381 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
382
2251
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
383 /* XXXX Need to come here from PyMac_DoYield too... */
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
384
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
385 static PyObject *
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
386 MacOS_SetHighLevelEventHandler(self, args)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
387 PyObject *self;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
388 PyObject *args;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
389 {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
390 PyObject *previous = MacOS_HighLevelEventHandler;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
391 PyObject *next = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
392 if (!PyArg_ParseTuple(args, "|O", &next))
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
393 return NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
394 if (next == Py_None)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
395 next = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
396 Py_INCREF(next);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
397 MacOS_HighLevelEventHandler = next;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
398 if (next == NULL)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
399 _w_high_level_event_proc = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
400 else
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
401 _w_high_level_event_proc = MacOS_HighLevelEventProc;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
402 if (previous == NULL) {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
403 Py_INCREF(Py_None);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
404 previous = Py_None;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
405 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
406 return previous;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
407 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
408
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
409 #endif /* USE_STDWIN */
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
410
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
411 static PyObject *
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
412 MacOS_AcceptHighLevelEvent(self, args)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
413 PyObject *self;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
414 PyObject *args;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
415 {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
416 TargetID sender;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
417 unsigned long refcon;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
418 Ptr buf;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
419 unsigned long len;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
420 OSErr err;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
421 PyObject *res;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
422
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
423 buf = NULL;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
424 len = 0;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
425 err = AcceptHighLevelEvent(&sender, &refcon, buf, &len);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
426 if (err == bufferIsSmall) {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
427 buf = malloc(len);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
428 if (buf == NULL)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
429 return PyErr_NoMemory();
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
430 err = AcceptHighLevelEvent(&sender, &refcon, buf, &len);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
431 if (err != noErr) {
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
432 free(buf);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
433 return PyErr_Mac(MacOS_Error, (int)err);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
434 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
435 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
436 else if (err != noErr)
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
437 return PyErr_Mac(MacOS_Error, (int)err);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
438 res = Py_BuildValue("s#ls#",
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
439 (char *)&sender, (int)(sizeof sender), refcon, (char *)buf, (int)len);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
440 free(buf);
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
441 return res;
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
442 }
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
443
2251
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
444 /*
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
445 ** Set poll frequency and cpu-yield-time
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
446 */
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
447 static PyObject *
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
448 MacOS_SetScheduleTimes(PyObject *self, PyObject *args)
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
449 {
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
450 long fgi, fgy, bgi, bgy;
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
451
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
452 bgi = bgy = -2;
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
453 if (!PyArg_ParseTuple(args, "ll|ll", &fgi, &fgy, &bgi, &bgy))
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
454 return NULL;
2401
1325b3e8e3d3 Minor bug fix
Jack Jansen <jack.jansen@cwi.nl>
parents: 2383
diff changeset
455 if ( bgi == -2 || bgy == -2 ) {
2251
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
456 bgi = fgi;
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
457 bgy = fgy;
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
458 }
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
459 PyMac_SetYield(fgi, fgy, bgi, bgy);
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
460 Py_INCREF(Py_None);
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
461 return Py_None;
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
462 }
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
463
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
464 static PyObject *
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
465 MacOS_EnableAppswitch(PyObject *self, PyObject *args)
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
466 {
2429
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
467 int old, new;
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
468
2429
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
469 if (!PyArg_ParseTuple(args, "i", &new))
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
470 return NULL;
2429
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
471 old = PyMac_DoYieldEnabled;
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
472 PyMac_DoYieldEnabled = new;
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
473 return Py_BuildValue("i", old);
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
474 }
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
475
2276
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
476
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
477 static PyObject *
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
478 MacOS_HandleEvent(PyObject *self, PyObject *args)
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
479 {
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
480 EventRecord ev;
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
481
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
482 if (!PyArg_ParseTuple(args, "O&", PyMac_GetEventRecord, &ev))
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
483 return NULL;
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
484 PyMac_HandleEvent(&ev);
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
485 Py_INCREF(Py_None);
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
486 return Py_None;
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
487 }
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
488
2831
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
489 static PyObject *
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
490 MacOS_GetErrorString(PyObject *self, PyObject *args)
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
491 {
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
492 int errn;
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
493
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
494 if (!PyArg_ParseTuple(args, "i", &errn))
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
495 return NULL;
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
496 return Py_BuildValue("s", PyMac_StrError(errn));
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
497 }
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
498
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
499 static char splash_doc[] = "Open a splash-screen dialog by resource-id (0=close)";
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
500
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
501 static PyObject *
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
502 MacOS_splash(PyObject *self, PyObject *args)
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
503 {
4309
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
504 int resid = -1;
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
505 static DialogPtr curdialog;
4328
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
506 WindowRef theWindow;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
507 CGrafPtr thePort;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
508 short xpos, ypos, width, height, swidth, sheight;
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
509
4309
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
510 if (!PyArg_ParseTuple(args, "|i", &resid))
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
511 return NULL;
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
512 if (curdialog)
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
513 DisposeDialog(curdialog);
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
514
4309
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
515 if ( resid != -1 ) {
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
516 curdialog = GetNewDialog(resid, NULL, (WindowPtr)-1);
4328
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
517 if ( curdialog ) {
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
518 theWindow = GetDialogWindow(curdialog);
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
519 thePort = GetWindowPort(theWindow);
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
520 width = thePort->portRect.right - thePort->portRect.left;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
521 height = thePort->portRect.bottom - thePort->portRect.top;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
522 swidth = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
523 sheight = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top - LMGetMBarHeight();
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
524 xpos = (swidth-width)/2;
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
525 ypos = (sheight-height)/5 + LMGetMBarHeight();
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
526 MoveWindow(theWindow, xpos, ypos, 0);
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
527 ShowWindow(theWindow);
4309
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
528 DrawDialog(curdialog);
4328
b03ab35d52df Added dialog-centering code to splash()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4309
diff changeset
529 }
4309
ecbeb445f62e Fixed macos.splash to actually *draw* the splash box:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3567
diff changeset
530 }
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
531 Py_INCREF(Py_None);
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
532 return Py_None;
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
533 }
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
534
4342
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
535 static char DebugStr_doc[] = "Switch to low-level debugger with a message";
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
536
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
537 static PyObject *
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
538 MacOS_DebugStr(PyObject *self, PyObject *args)
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
539 {
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
540 Str255 message;
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
541 PyObject *object = 0;
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
542
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
543 if (!PyArg_ParseTuple(args, "O&|O", PyMac_GetStr255, message, &object))
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
544 return NULL;
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
545 DebugStr(message);
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
546 Py_INCREF(Py_None);
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
547 return Py_None;
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
548 }
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
549
3425
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
550 static char openrf_doc[] = "Open resource fork of a file";
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
551
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
552 static PyObject *
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
553 MacOS_openrf(PyObject *self, PyObject *args)
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
554 {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
555 OSErr err;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
556 char *mode = "r";
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
557 FSSpec fss;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
558 SignedByte permission = 1;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
559 rfobject *fp;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
560
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
561 if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSSpec, &fss, &mode))
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
562 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
563 while (*mode) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
564 switch (*mode++) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
565 case '*': break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
566 case 'r': permission = 1; break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
567 case 'w': permission = 2; break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
568 case 'b': break;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
569 default:
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
570 PyErr_BadArgument();
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
571 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
572 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
573 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
574
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
575 if ( (fp = newrfobject()) == NULL )
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
576 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
577
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
578 err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
579
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
580 if ( err == fnfErr ) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
581 /* In stead of doing complicated things here to get creator/type
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
582 ** correct we let the standard i/o library handle it
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
583 */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
584 FILE *tfp;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
585 char pathname[257];
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
586
4524
d0c03c32e8d9 Got rid of nfullpath()
Jack Jansen <jack.jansen@cwi.nl>
parents: 4465
diff changeset
587 if ( err=PyMac_GetFullPath(&fss, pathname) ) {
3425
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
588 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
589 Py_DECREF(fp);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
590 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
591 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
592
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
593 if ( (tfp = fopen(pathname, "w")) == NULL ) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
594 PyMac_Error(fnfErr); /* What else... */
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
595 Py_DECREF(fp);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
596 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
597 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
598 fclose(tfp);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
599 err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
600 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
601 if ( err ) {
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
602 Py_DECREF(fp);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
603 PyMac_Error(err);
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
604 return NULL;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
605 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
606 fp->isclosed = 0;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
607 return (PyObject *)fp;
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
608 }
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
609
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
610 static PyMethodDef MacOS_Methods[] = {
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
611 {"AcceptHighLevelEvent", MacOS_AcceptHighLevelEvent, 1},
2227
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
612 {"GetCreatorAndType", MacOS_GetCreatorAndType, 1},
e53d019e7d47 Got rid of {Get,Set}FileType in favor of {Get,Set}CreatorAndType --
Guido van Rossum <guido@python.org>
parents: 2221
diff changeset
613 {"SetCreatorAndType", MacOS_SetCreatorAndType, 1},
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
614 #ifdef USE_STDWIN
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
615 {"SetHighLevelEventHandler", MacOS_SetHighLevelEventHandler, 1},
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
616 #endif
2251
e0a3242d5ae7 Added eventhandling in mainloop/busywait routine plus leaving some
Jack Jansen <jack.jansen@cwi.nl>
parents: 2232
diff changeset
617 {"SetScheduleTimes", MacOS_SetScheduleTimes, 1},
2262
03bd79432f06 - Moved interrupt code to macglue.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 2251
diff changeset
618 {"EnableAppswitch", MacOS_EnableAppswitch, 1},
2276
66d6d13df4f8 Added HandleEvent method to macos, so python programs can hand back
Jack Jansen <jack.jansen@cwi.nl>
parents: 2262
diff changeset
619 {"HandleEvent", MacOS_HandleEvent, 1},
2831
eedd6c1f3ae7 Added GetErrorString method (convert OSErr number to string)
Jack Jansen <jack.jansen@cwi.nl>
parents: 2429
diff changeset
620 {"GetErrorString", MacOS_GetErrorString, 1},
3425
23254daa247b Added openrf method, which opens resource fork. The resulting object
Jack Jansen <jack.jansen@cwi.nl>
parents: 2831
diff changeset
621 {"openrf", MacOS_openrf, 1, openrf_doc},
3567
6f715bff17e4 Added splash method (to quickly display splash screen without first
Jack Jansen <jack.jansen@cwi.nl>
parents: 3430
diff changeset
622 {"splash", MacOS_splash, 1, splash_doc},
4342
897297abe5b4 Added DebugStr method to drop into low-level debugger
Jack Jansen <jack.jansen@cwi.nl>
parents: 4328
diff changeset
623 {"DebugStr", MacOS_DebugStr, 1, DebugStr_doc},
2184
87f4d6d2e9c8 added high level event interface (requires stdwin patch)
Guido van Rossum <guido@python.org>
parents: 2175
diff changeset
624 {NULL, NULL} /* Sentinel */
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 };
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
626
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
627
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 void
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 MacOS_Init()
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
630 {
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
631 PyObject *m, *d;
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
632
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
633 m = Py_InitModule("MacOS", MacOS_Methods);
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 d = PyModule_GetDict(m);
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
635
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 /* Initialize MacOS.Error exception */
2232
8d5e36b37a41 Got rid of the Resource and Sound interfaces, in favor of the ones
Guido van Rossum <guido@python.org>
parents: 2229
diff changeset
637 MacOS_Error = PyMac_GetOSErrException();
1916
e125f5021e67 config.c: add MacOS module
Guido van Rossum <guido@python.org>
parents: 1896
diff changeset
638 if (MacOS_Error == NULL || PyDict_SetItemString(d, "Error", MacOS_Error) != 0)
1892
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 Py_FatalError("can't define MacOS.Error");
eec0dc5aba60 gestaltmodule.c: interface to Gestalt Manager.
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 }
2429
efb0685a6c91 return old value of PyMac_DoYieldEnabled; -1 means do not even check for interrupts
Guido van Rossum <guido@python.org>
parents: 2418
diff changeset
641