This commit was manufactured by cvs2svn to create tag 'r212'.
[python/dscho.git] / Mac / Modules / scrap / Scrapmodule.c
blob7677258cefcb256accad46c188f678335c55f9d6
2 /* ========================== Module Scrap ========================== */
4 #include "Python.h"
8 #include "macglue.h"
9 #include "pymactoolbox.h"
11 #ifdef WITHOUT_FRAMEWORKS
12 #include <Scrap.h>
13 #else
14 #include <Carbon/Carbon.h>
15 #endif
17 #if !TARGET_API_MAC_CARBON
20 ** Generate ScrapInfo records
22 static PyObject *
23 SCRRec_New(itself)
24 ScrapStuff *itself;
27 return Py_BuildValue("lO&hhO&", itself->scrapSize,
28 ResObj_New, itself->scrapHandle, itself->scrapCount, itself->scrapState,
29 PyMac_BuildStr255, itself->scrapName);
31 #endif
33 static PyObject *Scrap_Error;
35 static PyObject *Scrap_LoadScrap(_self, _args)
36 PyObject *_self;
37 PyObject *_args;
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;
50 static PyObject *Scrap_UnloadScrap(_self, _args)
51 PyObject *_self;
52 PyObject *_args;
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;
65 #if !TARGET_API_MAC_CARBON
67 static PyObject *Scrap_InfoScrap(_self, _args)
68 PyObject *_self;
69 PyObject *_args;
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;
80 #endif
82 #if !TARGET_API_MAC_CARBON
84 static PyObject *Scrap_GetScrap(_self, _args)
85 PyObject *_self;
86 PyObject *_args;
88 PyObject *_res = NULL;
89 long _rv;
90 Handle destination;
91 ScrapFlavorType flavorType;
92 SInt32 offset;
93 if (!PyArg_ParseTuple(_args, "O&O&",
94 ResObj_Convert, &destination,
95 PyMac_GetOSType, &flavorType))
96 return NULL;
97 _rv = GetScrap(destination,
98 flavorType,
99 &offset);
100 _res = Py_BuildValue("ll",
101 _rv,
102 offset);
103 return _res;
105 #endif
108 static PyObject *Scrap_ZeroScrap(_self, _args)
109 PyObject *_self;
110 PyObject *_args;
112 PyObject *_res = NULL;
113 OSStatus _err;
114 if (!PyArg_ParseTuple(_args, ""))
115 return NULL;
116 #if TARGET_API_MAC_CARBON
118 ScrapRef scrap;
120 _err = ClearCurrentScrap();
121 if (_err != noErr) return PyMac_Error(_err);
122 _err = GetCurrentScrap(&scrap);
124 #else
125 _err = ZeroScrap();
126 #endif
127 if (_err != noErr) return PyMac_Error(_err);
128 Py_INCREF(Py_None);
129 _res = Py_None;
130 return _res;
133 static PyObject *Scrap_PutScrap(_self, _args)
134 PyObject *_self;
135 PyObject *_args;
137 PyObject *_res = NULL;
138 OSStatus _err;
139 SInt32 sourceBufferByteCount;
140 ScrapFlavorType flavorType;
141 char *sourceBuffer__in__;
142 int sourceBuffer__len__;
143 int sourceBuffer__in_len__;
144 #if TARGET_API_MAC_CARBON
145 ScrapRef scrap;
146 #endif
148 if (!PyArg_ParseTuple(_args, "O&s#",
149 PyMac_GetOSType, &flavorType,
150 &sourceBuffer__in__, &sourceBuffer__in_len__))
151 return NULL;
152 sourceBufferByteCount = sourceBuffer__in_len__;
153 sourceBuffer__len__ = sourceBuffer__in_len__;
154 #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
159 _err = PutScrap(sourceBufferByteCount,
160 flavorType,
161 sourceBuffer__in__);
162 #endif
163 if (_err != noErr) return PyMac_Error(_err);
164 Py_INCREF(Py_None);
165 _res = Py_None;
166 sourceBuffer__error__: ;
167 return _res;
170 #if TARGET_API_MAC_CARBON
172 static PyObject *Scrap_ClearCurrentScrap(_self, _args)
173 PyObject *_self;
174 PyObject *_args;
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;
186 #endif
188 #if TARGET_API_MAC_CARBON
190 static PyObject *Scrap_CallInScrapPromises(_self, _args)
191 PyObject *_self;
192 PyObject *_args;
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;
204 #endif
206 static PyMethodDef Scrap_methods[] = {
207 {"LoadScrap", (PyCFunction)Scrap_LoadScrap, 1,
208 "() -> None"},
209 {"UnloadScrap", (PyCFunction)Scrap_UnloadScrap, 1,
210 "() -> None"},
212 #if !TARGET_API_MAC_CARBON
213 {"InfoScrap", (PyCFunction)Scrap_InfoScrap, 1,
214 "() -> (ScrapStuffPtr _rv)"},
215 #endif
217 #if !TARGET_API_MAC_CARBON
218 {"GetScrap", (PyCFunction)Scrap_GetScrap, 1,
219 "(Handle destination, ScrapFlavorType flavorType) -> (long _rv, SInt32 offset)"},
220 #endif
222 {"ZeroScrap", (PyCFunction)Scrap_ZeroScrap, 1,
223 "() -> None"},
225 {"PutScrap", (PyCFunction)Scrap_PutScrap, 1,
226 "(ScrapFlavorType flavorType, Buffer sourceBuffer) -> None"},
228 #if TARGET_API_MAC_CARBON
229 {"ClearCurrentScrap", (PyCFunction)Scrap_ClearCurrentScrap, 1,
230 "() -> None"},
231 #endif
233 #if TARGET_API_MAC_CARBON
234 {"CallInScrapPromises", (PyCFunction)Scrap_CallInScrapPromises, 1,
235 "() -> None"},
236 #endif
237 {NULL, NULL, 0}
243 void initScrap()
245 PyObject *m;
246 PyObject *d;
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)
256 return;
259 /* ======================== End module Scrap ======================== */