blob: 7677258cefcb256accad46c188f678335c55f9d6 [file] [log] [blame]
Jack Jansenda6a9711996-04-12 16:25:30 +00001
2/* ========================== Module Scrap ========================== */
3
4#include "Python.h"
Jack Jansenda6a9711996-04-12 16:25:30 +00005
Jack Jansen7b3cc1f2001-01-24 16:04:01 +00006
7
8#include "macglue.h"
Jack Jansen9d8b96c2000-07-14 22:16:45 +00009#include "pymactoolbox.h"
Jack Jansenda6a9711996-04-12 16:25:30 +000010
Jack Jansenfa77e1a2001-05-22 21:56:42 +000011#ifdef WITHOUT_FRAMEWORKS
Jack Jansenda6a9711996-04-12 16:25:30 +000012#include <Scrap.h>
Jack Jansenfa77e1a2001-05-22 21:56:42 +000013#else
14#include <Carbon/Carbon.h>
15#endif
Jack Jansenda6a9711996-04-12 16:25:30 +000016
Jack Jansen8853b182001-06-20 20:55:05 +000017#if !TARGET_API_MAC_CARBON
18
Jack Jansenda6a9711996-04-12 16:25:30 +000019/*
20** Generate ScrapInfo records
21*/
Jack Jansen9d8b96c2000-07-14 22:16:45 +000022static PyObject *
23SCRRec_New(itself)
Jack Jansenda6a9711996-04-12 16:25:30 +000024 ScrapStuff *itself;
25{
26
27 return Py_BuildValue("lO&hhO&", itself->scrapSize,
28 ResObj_New, itself->scrapHandle, itself->scrapCount, itself->scrapState,
29 PyMac_BuildStr255, itself->scrapName);
30}
Jack Jansen8853b182001-06-20 20:55:05 +000031#endif
Jack Jansenda6a9711996-04-12 16:25:30 +000032
33static PyObject *Scrap_Error;
34
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000035static PyObject *Scrap_LoadScrap(_self, _args)
36 PyObject *_self;
37 PyObject *_args;
38{
39 PyObject *_res = NULL;
40 OSStatus _err;
41 if (!PyArg_ParseTuple(_args, ""))
42 return NULL;
43 _err = LoadScrap();
44 if (_err != noErr) return PyMac_Error(_err);
45 Py_INCREF(Py_None);
46 _res = Py_None;
47 return _res;
48}
49
50static PyObject *Scrap_UnloadScrap(_self, _args)
51 PyObject *_self;
52 PyObject *_args;
53{
54 PyObject *_res = NULL;
55 OSStatus _err;
56 if (!PyArg_ParseTuple(_args, ""))
57 return NULL;
58 _err = UnloadScrap();
59 if (_err != noErr) return PyMac_Error(_err);
60 Py_INCREF(Py_None);
61 _res = Py_None;
62 return _res;
63}
64
65#if !TARGET_API_MAC_CARBON
66
Jack Jansenda6a9711996-04-12 16:25:30 +000067static PyObject *Scrap_InfoScrap(_self, _args)
68 PyObject *_self;
69 PyObject *_args;
70{
71 PyObject *_res = NULL;
72 ScrapStuffPtr _rv;
73 if (!PyArg_ParseTuple(_args, ""))
74 return NULL;
75 _rv = InfoScrap();
76 _res = Py_BuildValue("O&",
77 SCRRec_New, _rv);
78 return _res;
79}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000080#endif
Jack Jansenda6a9711996-04-12 16:25:30 +000081
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000082#if !TARGET_API_MAC_CARBON
Jack Jansenda6a9711996-04-12 16:25:30 +000083
84static PyObject *Scrap_GetScrap(_self, _args)
85 PyObject *_self;
86 PyObject *_args;
87{
88 PyObject *_res = NULL;
89 long _rv;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000090 Handle destination;
91 ScrapFlavorType flavorType;
92 SInt32 offset;
Jack Jansenda6a9711996-04-12 16:25:30 +000093 if (!PyArg_ParseTuple(_args, "O&O&",
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000094 ResObj_Convert, &destination,
95 PyMac_GetOSType, &flavorType))
Jack Jansenda6a9711996-04-12 16:25:30 +000096 return NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000097 _rv = GetScrap(destination,
98 flavorType,
Jack Jansenda6a9711996-04-12 16:25:30 +000099 &offset);
100 _res = Py_BuildValue("ll",
101 _rv,
102 offset);
103 return _res;
104}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000105#endif
106
Jack Jansenda6a9711996-04-12 16:25:30 +0000107
108static PyObject *Scrap_ZeroScrap(_self, _args)
109 PyObject *_self;
110 PyObject *_args;
111{
112 PyObject *_res = NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000113 OSStatus _err;
Jack Jansenda6a9711996-04-12 16:25:30 +0000114 if (!PyArg_ParseTuple(_args, ""))
115 return NULL;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000116#if TARGET_API_MAC_CARBON
117 {
118 ScrapRef scrap;
119
120 _err = ClearCurrentScrap();
121 if (_err != noErr) return PyMac_Error(_err);
122 _err = GetCurrentScrap(&scrap);
123 }
124#else
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000125 _err = ZeroScrap();
Jack Jansenbf21bef2001-01-29 15:20:06 +0000126#endif
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000127 if (_err != noErr) return PyMac_Error(_err);
Jack Jansenda6a9711996-04-12 16:25:30 +0000128 Py_INCREF(Py_None);
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000129 _res = Py_None;
130 return _res;
Jack Jansenda6a9711996-04-12 16:25:30 +0000131}
132
133static PyObject *Scrap_PutScrap(_self, _args)
134 PyObject *_self;
135 PyObject *_args;
136{
137 PyObject *_res = NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000138 OSStatus _err;
139 SInt32 sourceBufferByteCount;
140 ScrapFlavorType flavorType;
141 char *sourceBuffer__in__;
142 int sourceBuffer__len__;
143 int sourceBuffer__in_len__;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000144#if TARGET_API_MAC_CARBON
145 ScrapRef scrap;
146#endif
147
Jack Jansenda6a9711996-04-12 16:25:30 +0000148 if (!PyArg_ParseTuple(_args, "O&s#",
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000149 PyMac_GetOSType, &flavorType,
150 &sourceBuffer__in__, &sourceBuffer__in_len__))
Jack Jansenda6a9711996-04-12 16:25:30 +0000151 return NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000152 sourceBufferByteCount = sourceBuffer__in_len__;
153 sourceBuffer__len__ = sourceBuffer__in_len__;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000154#if TARGET_API_MAC_CARBON
155 _err = GetCurrentScrap(&scrap);
156 if (_err != noErr) return PyMac_Error(_err);
157 _err = PutScrapFlavor(scrap, flavorType, 0, sourceBufferByteCount, sourceBuffer__in__);
158#else
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000159 _err = PutScrap(sourceBufferByteCount,
160 flavorType,
161 sourceBuffer__in__);
Jack Jansenbf21bef2001-01-29 15:20:06 +0000162#endif
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000163 if (_err != noErr) return PyMac_Error(_err);
Jack Jansenda6a9711996-04-12 16:25:30 +0000164 Py_INCREF(Py_None);
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000165 _res = Py_None;
166 sourceBuffer__error__: ;
167 return _res;
Jack Jansenda6a9711996-04-12 16:25:30 +0000168}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000169
170#if TARGET_API_MAC_CARBON
171
172static PyObject *Scrap_ClearCurrentScrap(_self, _args)
173 PyObject *_self;
174 PyObject *_args;
175{
176 PyObject *_res = NULL;
177 OSStatus _err;
178 if (!PyArg_ParseTuple(_args, ""))
179 return NULL;
180 _err = ClearCurrentScrap();
181 if (_err != noErr) return PyMac_Error(_err);
182 Py_INCREF(Py_None);
183 _res = Py_None;
184 return _res;
185}
186#endif
187
188#if TARGET_API_MAC_CARBON
189
190static PyObject *Scrap_CallInScrapPromises(_self, _args)
191 PyObject *_self;
192 PyObject *_args;
193{
194 PyObject *_res = NULL;
195 OSStatus _err;
196 if (!PyArg_ParseTuple(_args, ""))
197 return NULL;
198 _err = CallInScrapPromises();
199 if (_err != noErr) return PyMac_Error(_err);
200 Py_INCREF(Py_None);
201 _res = Py_None;
202 return _res;
203}
204#endif
Jack Jansenda6a9711996-04-12 16:25:30 +0000205
206static PyMethodDef Scrap_methods[] = {
Jack Jansenda6a9711996-04-12 16:25:30 +0000207 {"LoadScrap", (PyCFunction)Scrap_LoadScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000208 "() -> None"},
209 {"UnloadScrap", (PyCFunction)Scrap_UnloadScrap, 1,
210 "() -> None"},
211
212#if !TARGET_API_MAC_CARBON
213 {"InfoScrap", (PyCFunction)Scrap_InfoScrap, 1,
214 "() -> (ScrapStuffPtr _rv)"},
215#endif
216
217#if !TARGET_API_MAC_CARBON
Jack Jansenda6a9711996-04-12 16:25:30 +0000218 {"GetScrap", (PyCFunction)Scrap_GetScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000219 "(Handle destination, ScrapFlavorType flavorType) -> (long _rv, SInt32 offset)"},
220#endif
221
Jack Jansenda6a9711996-04-12 16:25:30 +0000222 {"ZeroScrap", (PyCFunction)Scrap_ZeroScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000223 "() -> None"},
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000224
Jack Jansenda6a9711996-04-12 16:25:30 +0000225 {"PutScrap", (PyCFunction)Scrap_PutScrap, 1,
Jack Jansenbf21bef2001-01-29 15:20:06 +0000226 "(ScrapFlavorType flavorType, Buffer sourceBuffer) -> None"},
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000227
228#if TARGET_API_MAC_CARBON
229 {"ClearCurrentScrap", (PyCFunction)Scrap_ClearCurrentScrap, 1,
230 "() -> None"},
231#endif
232
233#if TARGET_API_MAC_CARBON
234 {"CallInScrapPromises", (PyCFunction)Scrap_CallInScrapPromises, 1,
235 "() -> None"},
236#endif
Jack Jansenda6a9711996-04-12 16:25:30 +0000237 {NULL, NULL, 0}
238};
239
240
241
242
243void initScrap()
244{
245 PyObject *m;
246 PyObject *d;
247
248
249
250
251 m = Py_InitModule("Scrap", Scrap_methods);
252 d = PyModule_GetDict(m);
253 Scrap_Error = PyMac_GetOSErrException();
254 if (Scrap_Error == NULL ||
255 PyDict_SetItemString(d, "Error", Scrap_Error) != 0)
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000256 return;
Jack Jansenda6a9711996-04-12 16:25:30 +0000257}
258
259/* ======================== End module Scrap ======================== */
260