blob: 50402990494da49e5bf269a2c94ee5820114d0eb [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
17/*
18** Generate ScrapInfo records
19*/
Jack Jansen9d8b96c2000-07-14 22:16:45 +000020static PyObject *
21SCRRec_New(itself)
Jack Jansenda6a9711996-04-12 16:25:30 +000022 ScrapStuff *itself;
23{
24
25 return Py_BuildValue("lO&hhO&", itself->scrapSize,
26 ResObj_New, itself->scrapHandle, itself->scrapCount, itself->scrapState,
27 PyMac_BuildStr255, itself->scrapName);
28}
29
30static PyObject *Scrap_Error;
31
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000032static PyObject *Scrap_LoadScrap(_self, _args)
33 PyObject *_self;
34 PyObject *_args;
35{
36 PyObject *_res = NULL;
37 OSStatus _err;
38 if (!PyArg_ParseTuple(_args, ""))
39 return NULL;
40 _err = LoadScrap();
41 if (_err != noErr) return PyMac_Error(_err);
42 Py_INCREF(Py_None);
43 _res = Py_None;
44 return _res;
45}
46
47static PyObject *Scrap_UnloadScrap(_self, _args)
48 PyObject *_self;
49 PyObject *_args;
50{
51 PyObject *_res = NULL;
52 OSStatus _err;
53 if (!PyArg_ParseTuple(_args, ""))
54 return NULL;
55 _err = UnloadScrap();
56 if (_err != noErr) return PyMac_Error(_err);
57 Py_INCREF(Py_None);
58 _res = Py_None;
59 return _res;
60}
61
62#if !TARGET_API_MAC_CARBON
63
Jack Jansenda6a9711996-04-12 16:25:30 +000064static PyObject *Scrap_InfoScrap(_self, _args)
65 PyObject *_self;
66 PyObject *_args;
67{
68 PyObject *_res = NULL;
69 ScrapStuffPtr _rv;
70 if (!PyArg_ParseTuple(_args, ""))
71 return NULL;
72 _rv = InfoScrap();
73 _res = Py_BuildValue("O&",
74 SCRRec_New, _rv);
75 return _res;
76}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000077#endif
Jack Jansenda6a9711996-04-12 16:25:30 +000078
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000079#if !TARGET_API_MAC_CARBON
Jack Jansenda6a9711996-04-12 16:25:30 +000080
81static PyObject *Scrap_GetScrap(_self, _args)
82 PyObject *_self;
83 PyObject *_args;
84{
85 PyObject *_res = NULL;
86 long _rv;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000087 Handle destination;
88 ScrapFlavorType flavorType;
89 SInt32 offset;
Jack Jansenda6a9711996-04-12 16:25:30 +000090 if (!PyArg_ParseTuple(_args, "O&O&",
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000091 ResObj_Convert, &destination,
92 PyMac_GetOSType, &flavorType))
Jack Jansenda6a9711996-04-12 16:25:30 +000093 return NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +000094 _rv = GetScrap(destination,
95 flavorType,
Jack Jansenda6a9711996-04-12 16:25:30 +000096 &offset);
97 _res = Py_BuildValue("ll",
98 _rv,
99 offset);
100 return _res;
101}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000102#endif
103
Jack Jansenda6a9711996-04-12 16:25:30 +0000104
105static PyObject *Scrap_ZeroScrap(_self, _args)
106 PyObject *_self;
107 PyObject *_args;
108{
109 PyObject *_res = NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000110 OSStatus _err;
Jack Jansenda6a9711996-04-12 16:25:30 +0000111 if (!PyArg_ParseTuple(_args, ""))
112 return NULL;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000113#if TARGET_API_MAC_CARBON
114 {
115 ScrapRef scrap;
116
117 _err = ClearCurrentScrap();
118 if (_err != noErr) return PyMac_Error(_err);
119 _err = GetCurrentScrap(&scrap);
120 }
121#else
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000122 _err = ZeroScrap();
Jack Jansenbf21bef2001-01-29 15:20:06 +0000123#endif
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000124 if (_err != noErr) return PyMac_Error(_err);
Jack Jansenda6a9711996-04-12 16:25:30 +0000125 Py_INCREF(Py_None);
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000126 _res = Py_None;
127 return _res;
Jack Jansenda6a9711996-04-12 16:25:30 +0000128}
129
130static PyObject *Scrap_PutScrap(_self, _args)
131 PyObject *_self;
132 PyObject *_args;
133{
134 PyObject *_res = NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000135 OSStatus _err;
136 SInt32 sourceBufferByteCount;
137 ScrapFlavorType flavorType;
138 char *sourceBuffer__in__;
139 int sourceBuffer__len__;
140 int sourceBuffer__in_len__;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000141#if TARGET_API_MAC_CARBON
142 ScrapRef scrap;
143#endif
144
Jack Jansenda6a9711996-04-12 16:25:30 +0000145 if (!PyArg_ParseTuple(_args, "O&s#",
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000146 PyMac_GetOSType, &flavorType,
147 &sourceBuffer__in__, &sourceBuffer__in_len__))
Jack Jansenda6a9711996-04-12 16:25:30 +0000148 return NULL;
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000149 sourceBufferByteCount = sourceBuffer__in_len__;
150 sourceBuffer__len__ = sourceBuffer__in_len__;
Jack Jansenbf21bef2001-01-29 15:20:06 +0000151#if TARGET_API_MAC_CARBON
152 _err = GetCurrentScrap(&scrap);
153 if (_err != noErr) return PyMac_Error(_err);
154 _err = PutScrapFlavor(scrap, flavorType, 0, sourceBufferByteCount, sourceBuffer__in__);
155#else
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000156 _err = PutScrap(sourceBufferByteCount,
157 flavorType,
158 sourceBuffer__in__);
Jack Jansenbf21bef2001-01-29 15:20:06 +0000159#endif
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000160 if (_err != noErr) return PyMac_Error(_err);
Jack Jansenda6a9711996-04-12 16:25:30 +0000161 Py_INCREF(Py_None);
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000162 _res = Py_None;
163 sourceBuffer__error__: ;
164 return _res;
Jack Jansenda6a9711996-04-12 16:25:30 +0000165}
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000166
167#if TARGET_API_MAC_CARBON
168
169static PyObject *Scrap_ClearCurrentScrap(_self, _args)
170 PyObject *_self;
171 PyObject *_args;
172{
173 PyObject *_res = NULL;
174 OSStatus _err;
175 if (!PyArg_ParseTuple(_args, ""))
176 return NULL;
177 _err = ClearCurrentScrap();
178 if (_err != noErr) return PyMac_Error(_err);
179 Py_INCREF(Py_None);
180 _res = Py_None;
181 return _res;
182}
183#endif
184
185#if TARGET_API_MAC_CARBON
186
187static PyObject *Scrap_CallInScrapPromises(_self, _args)
188 PyObject *_self;
189 PyObject *_args;
190{
191 PyObject *_res = NULL;
192 OSStatus _err;
193 if (!PyArg_ParseTuple(_args, ""))
194 return NULL;
195 _err = CallInScrapPromises();
196 if (_err != noErr) return PyMac_Error(_err);
197 Py_INCREF(Py_None);
198 _res = Py_None;
199 return _res;
200}
201#endif
Jack Jansenda6a9711996-04-12 16:25:30 +0000202
203static PyMethodDef Scrap_methods[] = {
Jack Jansenda6a9711996-04-12 16:25:30 +0000204 {"LoadScrap", (PyCFunction)Scrap_LoadScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000205 "() -> None"},
206 {"UnloadScrap", (PyCFunction)Scrap_UnloadScrap, 1,
207 "() -> None"},
208
209#if !TARGET_API_MAC_CARBON
210 {"InfoScrap", (PyCFunction)Scrap_InfoScrap, 1,
211 "() -> (ScrapStuffPtr _rv)"},
212#endif
213
214#if !TARGET_API_MAC_CARBON
Jack Jansenda6a9711996-04-12 16:25:30 +0000215 {"GetScrap", (PyCFunction)Scrap_GetScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000216 "(Handle destination, ScrapFlavorType flavorType) -> (long _rv, SInt32 offset)"},
217#endif
218
Jack Jansenda6a9711996-04-12 16:25:30 +0000219 {"ZeroScrap", (PyCFunction)Scrap_ZeroScrap, 1,
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000220 "() -> None"},
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000221
Jack Jansenda6a9711996-04-12 16:25:30 +0000222 {"PutScrap", (PyCFunction)Scrap_PutScrap, 1,
Jack Jansenbf21bef2001-01-29 15:20:06 +0000223 "(ScrapFlavorType flavorType, Buffer sourceBuffer) -> None"},
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000224
225#if TARGET_API_MAC_CARBON
226 {"ClearCurrentScrap", (PyCFunction)Scrap_ClearCurrentScrap, 1,
227 "() -> None"},
228#endif
229
230#if TARGET_API_MAC_CARBON
231 {"CallInScrapPromises", (PyCFunction)Scrap_CallInScrapPromises, 1,
232 "() -> None"},
233#endif
Jack Jansenda6a9711996-04-12 16:25:30 +0000234 {NULL, NULL, 0}
235};
236
237
238
239
240void initScrap()
241{
242 PyObject *m;
243 PyObject *d;
244
245
246
247
248 m = Py_InitModule("Scrap", Scrap_methods);
249 d = PyModule_GetDict(m);
250 Scrap_Error = PyMac_GetOSErrException();
251 if (Scrap_Error == NULL ||
252 PyDict_SetItemString(d, "Error", Scrap_Error) != 0)
Jack Jansen7b3cc1f2001-01-24 16:04:01 +0000253 return;
Jack Jansenda6a9711996-04-12 16:25:30 +0000254}
255
256/* ======================== End module Scrap ======================== */
257