blob: 02f1ceb84b7c126cbeb6361fb5c47998b79033e1 [file] [log] [blame]
Sjoerd Mullenderc4315491992-09-23 14:53:00 +00001/***********************************************************
Guido van Rossum524b5881995-01-04 19:10:35 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Sjoerd Mullenderc4315491992-09-23 14:53:00 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Sjoerd Mullenderc4315491992-09-23 14:53:00 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Sjoerd Mullenderc4315491992-09-23 14:53:00 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Sjoerd Mullenderc4315491992-09-23 14:53:00 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Sjoerd Mullenderc4315491992-09-23 14:53:00 +000029
30******************************************************************/
31
32
33/* Cl objects */
34
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +000035#define CLDEBUG
36
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000037#include <stdarg.h>
Sjoerd Mullenderc4315491992-09-23 14:53:00 +000038#include <cl.h>
39#include "allobjects.h"
40#include "modsupport.h" /* For getargs() etc. */
41#include "ceval.h" /* For call_object() */
42
43typedef struct {
44 OB_HEAD
45 int ob_isCompressor; /* Compressor or Decompressor */
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000046 CL_Handle ob_compressorHdl;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +000047 int *ob_paramtypes;
48 int ob_nparams;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +000049} clobject;
50
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000051static object *ClError; /* exception cl.error */
52
53static int error_handler_called = 0;
54
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +000055/*
56 * We want to use the function prototypes that are available in the C
57 * compiler on the SGI. Because of that, we need to declare the first
58 * argument of the compressor and decompressor methods as "object *",
59 * even though they are really "clobject *". Therefore we cast the
60 * argument to the proper type using this macro.
61 */
62#define SELF ((clobject *) self)
63
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000064/********************************************************************
65 Utility routines.
66********************************************************************/
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000067static void
Sjoerd Mullender3a997271993-02-04 16:43:28 +000068cl_ErrorHandler(CL_Handle handle, int code, const char *fmt, ...)
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000069{
70 va_list ap;
71 char errbuf[BUFSIZ]; /* hopefully big enough */
Sjoerd Mullender384f2481992-09-29 16:43:43 +000072 char *p;
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000073
Sjoerd Mullender384f2481992-09-29 16:43:43 +000074 if (err_occurred()) /* don't change existing error */
75 return;
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000076 error_handler_called = 1;
77 va_start(ap, fmt);
78 vsprintf(errbuf, fmt, ap);
79 va_end(ap);
Sjoerd Mullender384f2481992-09-29 16:43:43 +000080 p = &errbuf[strlen(errbuf) - 1]; /* swat the line feed */
81 if (*p == '\n')
82 *p = 0;
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +000083 err_setstr(ClError, errbuf);
84}
85
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000086/*
87 * This assumes that params are always in the range 0 to some maximum.
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000088 */
89static int
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +000090param_type_is_float(clobject *self, int param)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000091{
Sjoerd Mullender3a997271993-02-04 16:43:28 +000092 int bufferlength;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000093
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +000094 if (self->ob_paramtypes == NULL) {
95 error_handler_called = 0;
96 bufferlength = clQueryParams(self->ob_compressorHdl, 0, 0);
97 if (error_handler_called)
98 return -1;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +000099
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000100 self->ob_paramtypes = NEW(int, bufferlength);
101 if (self->ob_paramtypes == NULL)
102 return -1;
103 self->ob_nparams = bufferlength / 2;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000104
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000105 (void) clQueryParams(self->ob_compressorHdl, self->ob_paramtypes, bufferlength);
106 if (error_handler_called) {
107 DEL(self->ob_paramtypes);
108 self->ob_paramtypes = NULL;
109 return -1;
110 }
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000111 }
112
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000113 if (param < 0 || param >= self->ob_nparams)
114 return -1;
115
116 if (self->ob_paramtypes[param*2 + 1] == CL_FLOATING_ENUM_VALUE ||
117 self->ob_paramtypes[param*2 + 1] == CL_FLOATING_RANGE_VALUE)
118 return 1;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000119 else
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000120 return 0;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000121}
122
123/********************************************************************
124 Single image compression/decompression.
125********************************************************************/
126static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000127cl_CompressImage(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000128{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000129 int compressionScheme, width, height, originalFormat;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000130 float compressionRatio;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000131 int frameBufferSize, compressedBufferSize;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000132 char *frameBuffer;
133 object *compressedBuffer;
134
135 if (!getargs(args, "(iiiifs#)", &compressionScheme, &width, &height,
136 &originalFormat, &compressionRatio, &frameBuffer,
137 &frameBufferSize))
138 return NULL;
139
140 retry:
141 compressedBuffer = newsizedstringobject(NULL, frameBufferSize);
142 if (compressedBuffer == NULL)
143 return NULL;
144
145 compressedBufferSize = frameBufferSize;
146 error_handler_called = 0;
147 if (clCompressImage(compressionScheme, width, height, originalFormat,
148 compressionRatio, (void *) frameBuffer,
149 &compressedBufferSize,
150 (void *) getstringvalue(compressedBuffer))
151 == FAILURE) {
152 DECREF(compressedBuffer);
153 if (!error_handler_called)
154 err_setstr(ClError, "clCompressImage failed");
155 return NULL;
156 }
157
158 if (compressedBufferSize > frameBufferSize) {
159 frameBufferSize = compressedBufferSize;
160 DECREF(compressedBuffer);
161 goto retry;
162 }
163
164 if (compressedBufferSize < frameBufferSize)
165 if (resizestring(&compressedBuffer, compressedBufferSize))
166 return NULL;
167
168 return compressedBuffer;
169}
170
171static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000172cl_DecompressImage(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000173{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000174 int compressionScheme, width, height, originalFormat;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000175 char *compressedBuffer;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000176 int compressedBufferSize, frameBufferSize;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000177 object *frameBuffer;
178
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000179 if (!getargs(args, "(iiiis#)", &compressionScheme, &width, &height,
180 &originalFormat, &compressedBuffer,
181 &compressedBufferSize))
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000182 return NULL;
183
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000184 frameBufferSize = width * height * CL_BytesPerPixel(originalFormat);
185
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000186 frameBuffer = newsizedstringobject(NULL, frameBufferSize);
187 if (frameBuffer == NULL)
188 return NULL;
189
190 error_handler_called = 0;
191 if (clDecompressImage(compressionScheme, width, height, originalFormat,
192 compressedBufferSize, compressedBuffer,
193 (void *) getstringvalue(frameBuffer)) == FAILURE) {
194 DECREF(frameBuffer);
195 if (!error_handler_called)
196 err_setstr(ClError, "clDecompressImage failed");
197 return NULL;
198 }
199
200 return frameBuffer;
201}
202
203/********************************************************************
204 Sequential compression/decompression.
205********************************************************************/
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000206#define CheckCompressor(self) if ((self)->ob_compressorHdl == NULL) { \
207 err_setstr(RuntimeError, "(de)compressor not active"); \
208 return NULL; \
209 }
210
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000211static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000212doClose(clobject *self, object *args, int (*close_func)(CL_Handle))
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000213{
214 CheckCompressor(self);
215
216 if (!getnoarg(args))
217 return NULL;
218
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000219 error_handler_called = 0;
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000220 if ((*close_func)(self->ob_compressorHdl) == FAILURE) {
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000221 if (!error_handler_called)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000222 err_setstr(ClError, "close failed");
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000223 return NULL;
224 }
225
226 self->ob_compressorHdl = NULL;
227
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000228 if (self->ob_paramtypes)
229 DEL(self->ob_paramtypes);
230 self->ob_paramtypes = NULL;
231
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000232 INCREF(None);
233 return None;
234}
235
236static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000237clm_CloseCompressor(object *self, object *args)
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000238{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000239 return doClose(SELF, args, clCloseCompressor);
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000240}
241
242static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000243clm_CloseDecompressor(object *self, object *args)
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000244{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000245 return doClose(SELF, args, clCloseDecompressor);
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000246}
247
248static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000249clm_Compress(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000250{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000251 int numberOfFrames;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000252 int frameBufferSize, compressedBufferSize, size;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000253 char *frameBuffer;
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000254 object *data;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000255
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000256 CheckCompressor(SELF);
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000257
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000258 if (!getargs(args, "(is#)", &numberOfFrames, &frameBuffer, &frameBufferSize))
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000259 return NULL;
260
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000261 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000262 size = clGetParam(SELF->ob_compressorHdl, CL_COMPRESSED_BUFFER_SIZE);
263 compressedBufferSize = size;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000264 if (error_handler_called)
265 return NULL;
266
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000267 data = newsizedstringobject(NULL, size);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000268 if (data == NULL)
269 return NULL;
270
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000271 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000272 if (clCompress(SELF->ob_compressorHdl, numberOfFrames,
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000273 (void *) frameBuffer, &compressedBufferSize,
274 (void *) getstringvalue(data)) == FAILURE) {
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000275 DECREF(data);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000276 if (!error_handler_called)
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000277 err_setstr(ClError, "compress failed");
278 return NULL;
279 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000280
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000281 if (compressedBufferSize < size)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000282 if (resizestring(&data, compressedBufferSize))
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000283 return NULL;
284
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000285 if (compressedBufferSize > size) {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000286 /* we didn't get all "compressed" data */
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000287 DECREF(data);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000288 err_setstr(ClError, "compressed data is more than fitted");
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000289 return NULL;
290 }
291
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000292 return data;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000293}
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000294
295static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000296clm_Decompress(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000297{
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000298 object *data;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000299 int numberOfFrames;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000300 char *compressedData;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000301 int compressedDataSize, dataSize;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000302
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000303 CheckCompressor(SELF);
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000304
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000305 if (!getargs(args, "(is#)", &numberOfFrames, &compressedData,
306 &compressedDataSize))
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000307 return NULL;
308
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000309 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000310 dataSize = clGetParam(SELF->ob_compressorHdl, CL_FRAME_BUFFER_SIZE);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000311 if (error_handler_called)
312 return NULL;
313
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000314 data = newsizedstringobject(NULL, dataSize);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000315 if (data == NULL)
316 return NULL;
317
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000318 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000319 if (clDecompress(SELF->ob_compressorHdl, numberOfFrames,
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000320 compressedDataSize, (void *) compressedData,
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000321 (void *) getstringvalue(data)) == FAILURE) {
322 DECREF(data);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000323 if (!error_handler_called)
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000324 err_setstr(ClError, "decompress failed");
325 return NULL;
326 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000327
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000328 return data;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000329}
330
331static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000332doParams(clobject *self, object *args, int (*func)(CL_Handle, int *, int),
333 int modified)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000334{
335 object *list, *v;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000336 int *PVbuffer;
337 int length;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000338 int i;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000339 float number;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000340
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000341 CheckCompressor(self);
342
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000343 if (!getargs(args, "O", &list))
344 return NULL;
345 if (!is_listobject(list)) {
346 err_badarg();
347 return NULL;
348 }
349 length = getlistsize(list);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000350 PVbuffer = NEW(int, length);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000351 if (PVbuffer == NULL)
352 return err_nomem();
353 for (i = 0; i < length; i++) {
354 v = getlistitem(list, i);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000355 if (is_floatobject(v)) {
356 number = getfloatvalue(v);
357 PVbuffer[i] = CL_TypeIsInt(number);
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000358 } else if (is_intobject(v)) {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000359 PVbuffer[i] = getintvalue(v);
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000360 if ((i & 1) &&
361 param_type_is_float(self, PVbuffer[i-1]) > 0) {
362 number = PVbuffer[i];
363 PVbuffer[i] = CL_TypeIsInt(number);
364 }
365 } else {
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000366 DEL(PVbuffer);
367 err_badarg();
368 return NULL;
369 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000370 }
371
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000372 error_handler_called = 0;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000373 (*func)(self->ob_compressorHdl, PVbuffer, length);
Sjoerd Mullenderf64992e1993-08-03 15:11:36 +0000374 if (error_handler_called) {
375 DEL(PVbuffer);
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000376 return NULL;
Sjoerd Mullenderf64992e1993-08-03 15:11:36 +0000377 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000378
379 if (modified) {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000380 for (i = 0; i < length; i++) {
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000381 if ((i & 1) &&
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000382 param_type_is_float(self, PVbuffer[i-1]) > 0) {
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000383 number = CL_TypeIsFloat(PVbuffer[i]);
384 v = newfloatobject(number);
385 } else
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000386 v = newintobject(PVbuffer[i]);
387 setlistitem(list, i, v);
388 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000389 }
390
391 DEL(PVbuffer);
392
393 INCREF(None);
394 return None;
395}
396
397static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000398clm_GetParams(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000399{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000400 return doParams(SELF, args, clGetParams, 1);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000401}
402
403static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000404clm_SetParams(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000405{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000406 return doParams(SELF, args, clSetParams, 0);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000407}
408
409static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000410do_get(clobject *self, object *args, int (*func)(CL_Handle, int))
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000411{
412 int paramID, value;
413 float fvalue;
414
415 CheckCompressor(self);
416
417 if (!getargs(args, "i", &paramID))
418 return NULL;
419
420 error_handler_called = 0;
421 value = (*func)(self->ob_compressorHdl, paramID);
422 if (error_handler_called)
423 return NULL;
424
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000425 if (param_type_is_float(self, paramID) > 0) {
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000426 fvalue = CL_TypeIsFloat(value);
427 return newfloatobject(fvalue);
428 }
429
430 return newintobject(value);
431}
432
433static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000434clm_GetParam(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000435{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000436 return do_get(SELF, args, clGetParam);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000437}
438
439static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000440clm_GetDefault(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000441{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000442 return do_get(SELF, args, clGetDefault);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000443}
444
445static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000446clm_SetParam(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000447{
448 int paramID, value;
449 float fvalue;
450
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000451 CheckCompressor(SELF);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000452
453 if (!getargs(args, "(ii)", &paramID, &value)) {
454 err_clear();
455 if (!getargs(args, "(if)", &paramID, &fvalue)) {
456 err_clear();
457 err_setstr(TypeError, "bad argument list (format '(ii)' or '(if)')");
458 return NULL;
459 }
460 value = CL_TypeIsInt(fvalue);
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000461 } else {
462 if (param_type_is_float(SELF, paramID) > 0) {
463 fvalue = value;
464 value = CL_TypeIsInt(fvalue);
465 }
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000466 }
467
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000468 error_handler_called = 0;
469 value = clSetParam(SELF->ob_compressorHdl, paramID, value);
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000470 if (error_handler_called)
471 return NULL;
472
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000473 if (param_type_is_float(SELF, paramID) > 0)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000474 return newfloatobject(CL_TypeIsFloat(value));
475 else
476 return newintobject(value);
477}
478
479static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000480clm_GetParamID(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000481{
482 char *name;
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000483 int value;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000484
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000485 CheckCompressor(SELF);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000486
487 if (!getargs(args, "s", &name))
488 return NULL;
489
490 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000491 value = clGetParamID(SELF->ob_compressorHdl, name);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000492 if (value == FAILURE) {
493 if (!error_handler_called)
494 err_setstr(ClError, "getparamid failed");
495 return NULL;
496 }
497
498 return newintobject(value);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000499}
500
501static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000502clm_QueryParams(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000503{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000504 int bufferlength;
505 int *PVbuffer;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000506 object *list;
507 int i;
508
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000509 CheckCompressor(SELF);
Sjoerd Mullender37f17b71992-09-25 10:28:20 +0000510
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000511 if (!getnoarg(args))
512 return NULL;
513
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000514 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000515 bufferlength = clQueryParams(SELF->ob_compressorHdl, 0, 0);
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000516 if (error_handler_called)
517 return NULL;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000518
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000519 PVbuffer = NEW(int, bufferlength);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000520 if (PVbuffer == NULL)
521 return err_nomem();
522
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000523 bufferlength = clQueryParams(SELF->ob_compressorHdl, PVbuffer,
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000524 bufferlength);
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000525 if (error_handler_called) {
526 DEL(PVbuffer);
527 return NULL;
528 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000529
530 list = newlistobject(bufferlength);
531 if (list == NULL) {
532 DEL(PVbuffer);
533 return NULL;
534 }
535
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000536 for (i = 0; i < bufferlength; i++) {
537 if (i & 1)
538 setlistitem(list, i, newintobject(PVbuffer[i]));
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000539 else if (PVbuffer[i] == 0) {
540 INCREF(None);
541 setlistitem(list, i, None);
542 } else
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000543 setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
544 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000545
546 DEL(PVbuffer);
547
548 return list;
549}
550
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000551static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000552clm_GetMinMax(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000553{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000554 int param, min, max;
555 float fmin, fmax;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000556
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000557 CheckCompressor(SELF);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000558
559 if (!getargs(args, "i", &param))
560 return NULL;
561
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000562 clGetMinMax(SELF->ob_compressorHdl, param, &min, &max);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000563
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000564 if (param_type_is_float(SELF, param) > 0) {
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000565 fmin = CL_TypeIsFloat(min);
566 fmax = CL_TypeIsFloat(max);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000567 return mkvalue("(ff)", fmin, fmax);
568 }
569
570 return mkvalue("(ii)", min, max);
571}
572
573static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000574clm_GetName(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000575{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000576 int param;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000577 char *name;
578
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000579 CheckCompressor(SELF);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000580
581 if (!getargs(args, "i", &param))
582 return NULL;
583
584 error_handler_called = 0;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000585 name = clGetName(SELF->ob_compressorHdl, param);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000586 if (name == NULL || error_handler_called) {
587 if (!error_handler_called)
588 err_setstr(ClError, "getname failed");
589 return NULL;
590 }
591
592 return newstringobject(name);
593}
594
595static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000596clm_QuerySchemeFromHandle(object *self, object *args)
597{
598 CheckCompressor(SELF);
599
600 if (!getnoarg(args))
601 return NULL;
602
603 return newintobject(clQuerySchemeFromHandle(SELF->ob_compressorHdl));
604}
605
606static object *
607clm_ReadHeader(object *self, object *args)
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000608{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000609 char *header;
610 int headerSize;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000611
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000612 CheckCompressor(SELF);
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000613
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000614 if (!getargs(args, "s#", &header, &headerSize))
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000615 return NULL;
616
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000617 return newintobject(clReadHeader(SELF->ob_compressorHdl,
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000618 headerSize, header));
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000619}
620
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000621static struct methodlist compressor_methods[] = {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000622 {"close", clm_CloseCompressor}, /* alias */
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000623 {"CloseCompressor", clm_CloseCompressor},
624 {"Compress", clm_Compress},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000625 {"GetDefault", clm_GetDefault},
626 {"GetMinMax", clm_GetMinMax},
627 {"GetName", clm_GetName},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000628 {"GetParam", clm_GetParam},
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000629 {"GetParamID", clm_GetParamID},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000630 {"GetParams", clm_GetParams},
631 {"QueryParams", clm_QueryParams},
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000632 {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000633 {"SetParam", clm_SetParam},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000634 {"SetParams", clm_SetParams},
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000635 {NULL, NULL} /* sentinel */
636};
637
638static struct methodlist decompressor_methods[] = {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000639 {"close", clm_CloseDecompressor}, /* alias */
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000640 {"CloseDecompressor", clm_CloseDecompressor},
641 {"Decompress", clm_Decompress},
642 {"GetDefault", clm_GetDefault},
643 {"GetMinMax", clm_GetMinMax},
644 {"GetName", clm_GetName},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000645 {"GetParam", clm_GetParam},
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000646 {"GetParamID", clm_GetParamID},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000647 {"GetParams", clm_GetParams},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000648 {"ReadHeader", clm_ReadHeader},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000649 {"QueryParams", clm_QueryParams},
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000650 {"QuerySchemeFromHandle",clm_QuerySchemeFromHandle},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000651 {"SetParam", clm_SetParam},
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000652 {"SetParams", clm_SetParams},
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000653 {NULL, NULL} /* sentinel */
654};
655
656static void
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000657cl_dealloc(object *self)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000658{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000659 if (SELF->ob_compressorHdl) {
660 if (SELF->ob_isCompressor)
661 clCloseCompressor(SELF->ob_compressorHdl);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000662 else
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000663 clCloseDecompressor(SELF->ob_compressorHdl);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000664 }
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000665 DEL(self);
666}
667
668static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000669cl_getattr(object *self, char *name)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000670{
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000671 if (SELF->ob_isCompressor)
672 return findmethod(compressor_methods, self, name);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000673 else
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000674 return findmethod(decompressor_methods, self, name);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000675}
676
677static typeobject Cltype = {
678 OB_HEAD_INIT(&Typetype)
679 0, /*ob_size*/
680 "cl", /*tp_name*/
681 sizeof(clobject), /*tp_size*/
682 0, /*tp_itemsize*/
683 /* methods */
Guido van Rossumb6775db1994-08-01 11:34:53 +0000684 (destructor)cl_dealloc, /*tp_dealloc*/
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000685 0, /*tp_print*/
Guido van Rossumb6775db1994-08-01 11:34:53 +0000686 (getattrfunc)cl_getattr, /*tp_getattr*/
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000687 0, /*tp_setattr*/
688 0, /*tp_compare*/
689 0, /*tp_repr*/
690 0, /*tp_as_number*/
691 0, /*tp_as_sequence*/
692 0, /*tp_as_mapping*/
693};
694
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000695static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000696doOpen(object *self, object *args, int (*open_func)(int, CL_Handle *),
697 int iscompressor)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000698{
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000699 int scheme;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000700 clobject *new;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000701
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000702 if (!getargs(args, "i", &scheme))
703 return NULL;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000704
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000705 new = NEWOBJ(clobject, &Cltype);
706 if (new == NULL)
707 return NULL;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000708
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000709 new->ob_compressorHdl = NULL;
710 new->ob_isCompressor = iscompressor;
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000711 new->ob_paramtypes = NULL;
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000712
713 error_handler_called = 0;
714 if ((*open_func)(scheme, &new->ob_compressorHdl) == FAILURE) {
715 DECREF(new);
716 if (!error_handler_called)
717 err_setstr(ClError, "Open(De)Compressor failed");
718 return NULL;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000719 }
Guido van Rossumb6775db1994-08-01 11:34:53 +0000720 return (object *)new;
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000721}
722
723static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000724cl_OpenCompressor(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000725{
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000726 return doOpen(self, args, clOpenCompressor, 1);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000727}
728
729static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000730cl_OpenDecompressor(object *self, object *args)
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000731{
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000732 return doOpen(self, args, clOpenDecompressor, 0);
Sjoerd Mullender384f2481992-09-29 16:43:43 +0000733}
734
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000735static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000736cl_QueryScheme(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000737{
738 char *header;
739 int headerlen;
740 int scheme;
741
742 if (!getargs(args, "s#", &header, &headerlen))
743 return NULL;
744
745 scheme = clQueryScheme(header);
746 if (scheme < 0) {
747 err_setstr(ClError, "unknown compression scheme");
748 return NULL;
749 }
750
751 return newintobject(scheme);
752}
753
754static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000755cl_QueryMaxHeaderSize(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000756{
757 int scheme;
758
759 if (!getargs(args, "i", &scheme))
760 return NULL;
761
762 return newintobject(clQueryMaxHeaderSize(scheme));
763}
764
765static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000766cl_QueryAlgorithms(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000767{
768 int algorithmMediaType;
769 int bufferlength;
770 int *PVbuffer;
771 object *list;
772 int i;
773
774 if (!getargs(args, "i", &algorithmMediaType))
775 return NULL;
776
777 error_handler_called = 0;
778 bufferlength = clQueryAlgorithms(algorithmMediaType, 0, 0);
779 if (error_handler_called)
780 return NULL;
781
782 PVbuffer = NEW(int, bufferlength);
783 if (PVbuffer == NULL)
784 return err_nomem();
785
786 bufferlength = clQueryAlgorithms(algorithmMediaType, PVbuffer,
787 bufferlength);
788 if (error_handler_called) {
789 DEL(PVbuffer);
790 return NULL;
791 }
792
793 list = newlistobject(bufferlength);
794 if (list == NULL) {
795 DEL(PVbuffer);
796 return NULL;
797 }
798
799 for (i = 0; i < bufferlength; i++) {
800 if (i & 1)
801 setlistitem(list, i, newintobject(PVbuffer[i]));
802 else if (PVbuffer[i] == 0) {
803 INCREF(None);
804 setlistitem(list, i, None);
805 } else
806 setlistitem(list, i, newstringobject((char *) PVbuffer[i]));
807 }
808
809 DEL(PVbuffer);
810
811 return list;
812}
813
814static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000815cl_QuerySchemeFromName(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000816{
817 int algorithmMediaType;
818 char *name;
819 int scheme;
820
821 if (!getargs(args, "(is)", &algorithmMediaType, &name))
822 return NULL;
823
824 error_handler_called = 0;
825 scheme = clQuerySchemeFromName(algorithmMediaType, name);
826 if (error_handler_called) {
827 err_setstr(ClError, "unknown compression scheme");
828 return NULL;
829 }
830
831 return newintobject(scheme);
832}
833
834static object *
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000835cl_GetAlgorithmName(object *self, object *args)
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000836{
837 int scheme;
838 char *name;
839
840 if (!getargs(args, "i", &scheme))
841 return NULL;
842
843 name = clGetAlgorithmName(scheme);
844 if (name == 0) {
845 err_setstr(ClError, "unknown compression scheme");
846 return NULL;
847 }
848
849 return newstringobject(name);
850}
851
Sjoerd Mullender22e44cd1993-02-17 09:11:14 +0000852static object *
853do_set(object *self, object *args, int (*func)(int, int, int))
854{
855 int scheme, paramID, value;
856 float fvalue;
857 int is_float = 0;
858
859 if (!getargs(args, "(iii)", &scheme, &paramID, &value)) {
860 err_clear();
861 if (!getargs(args, "(iif)", &scheme, &paramID, &fvalue)) {
862 err_clear();
863 err_setstr(TypeError, "bad argument list (format '(iii)' or '(iif)')");
864 return NULL;
865 }
866 value = CL_TypeIsInt(fvalue);
867 is_float = 1;
868 } else {
869 /* check some parameters which we know to be floats */
870 switch (scheme) {
871 case CL_COMPRESSION_RATIO:
872 case CL_SPEED:
873 fvalue = value;
874 value = CL_TypeIsInt(fvalue);
875 is_float = 1;
876 break;
877 }
878 }
879
880 error_handler_called = 0;
881 value = (*func)(scheme, paramID, value);
882 if (error_handler_called)
883 return NULL;
884
885 if (is_float)
886 return newfloatobject(CL_TypeIsFloat(value));
887 else
888 return newintobject(value);
889}
890
891static object *
892cl_SetDefault(object *self, object *args)
893{
894 return do_set(self, args, clSetDefault);
895}
896
897static object *
898cl_SetMin(object *self, object *args)
899{
900 return do_set(self, args, clSetMin);
901}
902
903static object *
904cl_SetMax(object *self, object *args)
905{
906 return do_set(self, args, clSetMax);
907}
908
Sjoerd Mullender3db845b1995-05-17 11:16:52 +0000909#define func(name, type) \
910 static object *cl_##name(object *self, object *args) \
911 { \
912 int x; \
913 if (!getargs(args, "i", &x)) return NULL; \
914 return new##type##object(CL_##name(x)); \
915 }
916
917#define func2(name, type) \
918 static object *cl_##name(object *self, object *args) \
919 { \
920 int a1, a2; \
921 if (!getargs(args, "(ii)", &a1, &a2)) return NULL; \
922 return new##type##object(CL_##name(a1, a2)); \
923 }
924
925func(BytesPerSample,int)
926func(BytesPerPixel,int)
927func(AudioFormatName,string)
928func(VideoFormatName,string)
929func(AlgorithmNumber,int)
930func(AlgorithmType,int)
931func2(Algorithm,int)
932func(ParamNumber,int)
933func(ParamType,int)
934func2(ParamID,int)
935
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000936#ifdef CLDEBUG
937static object *
938cvt_type(object *self, object *args)
939{
940 int number;
941 float fnumber;
942
943 if (getargs(args, "i", &number))
944 return newfloatobject(CL_TypeIsFloat(number));
945 else {
946 err_clear();
947 if (getargs(args, "f", &fnumber))
948 return newintobject(CL_TypeIsInt(fnumber));
949 return NULL;
950 }
951}
952#endif
953
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000954static struct methodlist cl_methods[] = {
Sjoerd Mullender8dd054d1992-12-14 13:17:29 +0000955 {"CompressImage", cl_CompressImage},
956 {"DecompressImage", cl_DecompressImage},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000957 {"GetAlgorithmName", cl_GetAlgorithmName},
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000958 {"OpenCompressor", cl_OpenCompressor},
959 {"OpenDecompressor", cl_OpenDecompressor},
Sjoerd Mullender3a997271993-02-04 16:43:28 +0000960 {"QueryAlgorithms", cl_QueryAlgorithms},
961 {"QueryMaxHeaderSize", cl_QueryMaxHeaderSize},
962 {"QueryScheme", cl_QueryScheme},
963 {"QuerySchemeFromName", cl_QuerySchemeFromName},
Sjoerd Mullender22e44cd1993-02-17 09:11:14 +0000964 {"SetDefault", cl_SetDefault},
965 {"SetMax", cl_SetMax},
966 {"SetMin", cl_SetMin},
Sjoerd Mullender3db845b1995-05-17 11:16:52 +0000967 {"BytesPerSample", cl_BytesPerSample},
968 {"BytesPerPixel", cl_BytesPerPixel},
969 {"AudioFormatName", cl_AudioFormatName},
970 {"VideoFormatName", cl_VideoFormatName},
971 {"AlgorithmNumber", cl_AlgorithmNumber},
972 {"AlgorithmType", cl_AlgorithmType},
973 {"Algorithm", cl_Algorithm},
974 {"ParamNumber", cl_ParamNumber},
975 {"ParamType", cl_ParamType},
976 {"ParamID", cl_ParamID},
Sjoerd Mullender4e2a4271993-02-16 11:55:17 +0000977#ifdef CLDEBUG
978 {"cvt_type", cvt_type},
979#endif
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000980 {NULL, NULL} /* Sentinel */
981};
982
Sjoerd Mullender3db845b1995-05-17 11:16:52 +0000983#ifdef CL_JPEG_SOFTWARE
984#define IRIX_5_3_LIBRARY
985#endif
986
Sjoerd Mullenderc4315491992-09-23 14:53:00 +0000987void
988initcl()
989{
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +0000990 object *m, *d;
991
992 m = initmodule("cl", cl_methods);
993 d = getmoduledict(m);
994
995 ClError = newstringobject("cl.error");
Sjoerd Mullender3db845b1995-05-17 11:16:52 +0000996 (void) dictinsert(d, "error", ClError);
997
998 (void) dictinsert(d, "MAX_NUMBER_OF_ORIGINAL_FORMATS",
999 newintobject(CL_MAX_NUMBER_OF_ORIGINAL_FORMATS));
1000 (void) dictinsert(d, "MONO", newintobject(CL_MONO));
1001 (void) dictinsert(d, "STEREO_INTERLEAVED",
1002 newintobject(CL_STEREO_INTERLEAVED));
1003 (void) dictinsert(d, "RGB", newintobject(CL_RGB));
1004 (void) dictinsert(d, "RGBX", newintobject(CL_RGBX));
1005 (void) dictinsert(d, "RGBA", newintobject(CL_RGBA));
1006 (void) dictinsert(d, "RGB332", newintobject(CL_RGB332));
1007 (void) dictinsert(d, "GRAYSCALE", newintobject(CL_GRAYSCALE));
1008 (void) dictinsert(d, "Y", newintobject(CL_Y));
1009 (void) dictinsert(d, "YUV", newintobject(CL_YUV));
1010 (void) dictinsert(d, "YCbCr", newintobject(CL_YCbCr));
1011 (void) dictinsert(d, "YUV422", newintobject(CL_YUV422));
1012 (void) dictinsert(d, "YCbCr422", newintobject(CL_YCbCr422));
1013 (void) dictinsert(d, "YUV422HC", newintobject(CL_YUV422HC));
1014 (void) dictinsert(d, "YCbCr422HC", newintobject(CL_YCbCr422HC));
1015 (void) dictinsert(d, "YUV422DC", newintobject(CL_YUV422DC));
1016 (void) dictinsert(d, "YCbCr422DC", newintobject(CL_YCbCr422DC));
1017 (void) dictinsert(d, "RGB8", newintobject(CL_RGB8));
1018 (void) dictinsert(d, "BEST_FIT", newintobject(CL_BEST_FIT));
1019 (void) dictinsert(d, "MAX_NUMBER_OF_AUDIO_ALGORITHMS",
1020 newintobject(CL_MAX_NUMBER_OF_AUDIO_ALGORITHMS));
1021 (void) dictinsert(d, "MAX_NUMBER_OF_VIDEO_ALGORITHMS",
1022 newintobject(CL_MAX_NUMBER_OF_VIDEO_ALGORITHMS));
1023 (void) dictinsert(d, "AUDIO", newintobject(CL_AUDIO));
1024 (void) dictinsert(d, "VIDEO", newintobject(CL_VIDEO));
1025 (void) dictinsert(d, "UNKNOWN_SCHEME",
1026 newintobject(CL_UNKNOWN_SCHEME));
1027 (void) dictinsert(d, "UNCOMPRESSED_AUDIO",
1028 newintobject(CL_UNCOMPRESSED_AUDIO));
1029 (void) dictinsert(d, "G711_ULAW", newintobject(CL_G711_ULAW));
1030 (void) dictinsert(d, "ULAW", newintobject(CL_ULAW));
1031 (void) dictinsert(d, "G711_ALAW", newintobject(CL_G711_ALAW));
1032 (void) dictinsert(d, "ALAW", newintobject(CL_ALAW));
1033 (void) dictinsert(d, "AWARE_MPEG_AUDIO",
1034 newintobject(CL_AWARE_MPEG_AUDIO));
1035 (void) dictinsert(d, "AWARE_MULTIRATE",
1036 newintobject(CL_AWARE_MULTIRATE));
1037 (void) dictinsert(d, "UNCOMPRESSED", newintobject(CL_UNCOMPRESSED));
1038 (void) dictinsert(d, "UNCOMPRESSED_VIDEO",
1039 newintobject(CL_UNCOMPRESSED_VIDEO));
1040 (void) dictinsert(d, "RLE", newintobject(CL_RLE));
1041 (void) dictinsert(d, "JPEG", newintobject(CL_JPEG));
1042#ifdef IRIX_5_3_LIBRARY
1043 (void) dictinsert(d, "JPEG_SOFTWARE", newintobject(CL_JPEG_SOFTWARE));
1044#endif
1045 (void) dictinsert(d, "MPEG_VIDEO", newintobject(CL_MPEG_VIDEO));
1046 (void) dictinsert(d, "MVC1", newintobject(CL_MVC1));
1047 (void) dictinsert(d, "RTR", newintobject(CL_RTR));
1048 (void) dictinsert(d, "RTR1", newintobject(CL_RTR1));
1049 (void) dictinsert(d, "HDCC", newintobject(CL_HDCC));
1050 (void) dictinsert(d, "MVC2", newintobject(CL_MVC2));
1051 (void) dictinsert(d, "RLE24", newintobject(CL_RLE24));
1052 (void) dictinsert(d, "MAX_NUMBER_OF_PARAMS",
1053 newintobject(CL_MAX_NUMBER_OF_PARAMS));
1054 (void) dictinsert(d, "IMAGE_WIDTH", newintobject(CL_IMAGE_WIDTH));
1055 (void) dictinsert(d, "IMAGE_HEIGHT", newintobject(CL_IMAGE_HEIGHT));
1056 (void) dictinsert(d, "ORIGINAL_FORMAT",
1057 newintobject(CL_ORIGINAL_FORMAT));
1058 (void) dictinsert(d, "INTERNAL_FORMAT",
1059 newintobject(CL_INTERNAL_FORMAT));
1060 (void) dictinsert(d, "COMPONENTS", newintobject(CL_COMPONENTS));
1061 (void) dictinsert(d, "BITS_PER_COMPONENT",
1062 newintobject(CL_BITS_PER_COMPONENT));
1063 (void) dictinsert(d, "FRAME_RATE", newintobject(CL_FRAME_RATE));
1064 (void) dictinsert(d, "COMPRESSION_RATIO",
1065 newintobject(CL_COMPRESSION_RATIO));
1066 (void) dictinsert(d, "EXACT_COMPRESSION_RATIO",
1067 newintobject(CL_EXACT_COMPRESSION_RATIO));
1068 (void) dictinsert(d, "FRAME_BUFFER_SIZE",
1069 newintobject(CL_FRAME_BUFFER_SIZE));
1070 (void) dictinsert(d, "COMPRESSED_BUFFER_SIZE",
1071 newintobject(CL_COMPRESSED_BUFFER_SIZE));
1072 (void) dictinsert(d, "BLOCK_SIZE", newintobject(CL_BLOCK_SIZE));
1073 (void) dictinsert(d, "PREROLL", newintobject(CL_PREROLL));
1074 (void) dictinsert(d, "FRAME_TYPE", newintobject(CL_FRAME_TYPE));
1075 (void) dictinsert(d, "ALGORITHM_ID", newintobject(CL_ALGORITHM_ID));
1076 (void) dictinsert(d, "ALGORITHM_VERSION",
1077 newintobject(CL_ALGORITHM_VERSION));
1078 (void) dictinsert(d, "ORIENTATION", newintobject(CL_ORIENTATION));
1079 (void) dictinsert(d, "NUMBER_OF_FRAMES",
1080 newintobject(CL_NUMBER_OF_FRAMES));
1081 (void) dictinsert(d, "SPEED", newintobject(CL_SPEED));
1082 (void) dictinsert(d, "LAST_FRAME_INDEX",
1083 newintobject(CL_LAST_FRAME_INDEX));
1084#ifdef IRIX_5_3_LIBRARY
1085 (void) dictinsert(d, "ENABLE_IMAGEINFO",
1086 newintobject(CL_ENABLE_IMAGEINFO));
1087 (void) dictinsert(d, "INTERNAL_IMAGE_WIDTH",
1088 newintobject(CL_INTERNAL_IMAGE_WIDTH));
1089 (void) dictinsert(d, "INTERNAL_IMAGE_HEIGHT",
1090 newintobject(CL_INTERNAL_IMAGE_HEIGHT));
1091#endif
1092 (void) dictinsert(d, "NUMBER_OF_PARAMS",
1093 newintobject(CL_NUMBER_OF_PARAMS));
1094#ifdef IRIX_5_3_LIBRARY
1095 (void) dictinsert(d, "MVC2_LUMA_THRESHOLD",
1096 newintobject(CL_MVC2_LUMA_THRESHOLD));
1097 (void) dictinsert(d, "MVC2_CHROMA_THRESHOLD",
1098 newintobject(CL_MVC2_CHROMA_THRESHOLD));
1099 (void) dictinsert(d, "MVC2_EDGE_THRESHOLD",
1100 newintobject(CL_MVC2_EDGE_THRESHOLD));
1101 (void) dictinsert(d, "MVC2_BLENDING", newintobject(CL_MVC2_BLENDING));
1102 (void) dictinsert(d, "MVC2_BLENDING_OFF",
1103 newintobject(CL_MVC2_BLENDING_OFF));
1104 (void) dictinsert(d, "MVC2_BLENDING_ON",
1105 newintobject(CL_MVC2_BLENDING_ON));
1106 (void) dictinsert(d, "JPEG_QUALITY_FACTOR",
1107 newintobject(CL_JPEG_QUALITY_FACTOR));
1108 (void) dictinsert(d, "JPEG_STREAM_HEADERS",
1109 newintobject(CL_JPEG_STREAM_HEADERS));
1110 (void) dictinsert(d, "JPEG_QUANTIZATION_TABLES",
1111 newintobject(CL_JPEG_QUANTIZATION_TABLES));
1112 (void) dictinsert(d, "JPEG_NUM_PARAMS",
1113 newintobject(CL_JPEG_NUM_PARAMS));
1114 (void) dictinsert(d, "RTR_QUALITY_LEVEL",
1115 newintobject(CL_RTR_QUALITY_LEVEL));
1116 (void) dictinsert(d, "HDCC_TILE_THRESHOLD",
1117 newintobject(CL_HDCC_TILE_THRESHOLD));
1118 (void) dictinsert(d, "HDCC_SAMPLES_PER_TILE",
1119 newintobject(CL_HDCC_SAMPLES_PER_TILE));
1120#endif
1121 (void) dictinsert(d, "END_OF_SEQUENCE",
1122 newintobject(CL_END_OF_SEQUENCE));
1123 (void) dictinsert(d, "CHANNEL_POLICY",
1124 newintobject(CL_CHANNEL_POLICY));
1125 (void) dictinsert(d, "NOISE_MARGIN", newintobject(CL_NOISE_MARGIN));
1126 (void) dictinsert(d, "BITRATE_POLICY",
1127 newintobject(CL_BITRATE_POLICY));
1128 (void) dictinsert(d, "BITRATE_TARGET",
1129 newintobject(CL_BITRATE_TARGET));
1130 (void) dictinsert(d, "LAYER", newintobject(CL_LAYER));
1131 (void) dictinsert(d, "ENUM_VALUE", newintobject(CL_ENUM_VALUE));
1132 (void) dictinsert(d, "RANGE_VALUE", newintobject(CL_RANGE_VALUE));
1133 (void) dictinsert(d, "FLOATING_ENUM_VALUE",
1134 newintobject(CL_FLOATING_ENUM_VALUE));
1135 (void) dictinsert(d, "FLOATING_RANGE_VALUE",
1136 newintobject(CL_FLOATING_RANGE_VALUE));
1137 (void) dictinsert(d, "DECOMPRESSOR", newintobject(CL_DECOMPRESSOR));
1138 (void) dictinsert(d, "COMPRESSOR", newintobject(CL_COMPRESSOR));
1139 (void) dictinsert(d, "CODEC", newintobject(CL_CODEC));
1140 (void) dictinsert(d, "NONE", newintobject(CL_NONE));
1141#ifdef IRIX_5_3_LIBRARY
1142 (void) dictinsert(d, "BUF_FRAME", newintobject(CL_BUF_FRAME));
1143 (void) dictinsert(d, "BUF_DATA", newintobject(CL_BUF_DATA));
1144#endif
1145#ifdef CL_FRAME
1146 (void) dictinsert(d, "FRAME", newintobject(CL_FRAME));
1147 (void) dictinsert(d, "DATA", newintobject(CL_DATA));
1148#endif
1149 (void) dictinsert(d, "NONE", newintobject(CL_NONE));
1150 (void) dictinsert(d, "KEYFRAME", newintobject(CL_KEYFRAME));
1151 (void) dictinsert(d, "INTRA", newintobject(CL_INTRA));
1152 (void) dictinsert(d, "PREDICTED", newintobject(CL_PREDICTED));
1153 (void) dictinsert(d, "BIDIRECTIONAL", newintobject(CL_BIDIRECTIONAL));
1154 (void) dictinsert(d, "TOP_DOWN", newintobject(CL_TOP_DOWN));
1155 (void) dictinsert(d, "BOTTOM_UP", newintobject(CL_BOTTOM_UP));
1156#ifdef IRIX_5_3_LIBRARY
1157 (void) dictinsert(d, "CONTINUOUS_BLOCK",
1158 newintobject(CL_CONTINUOUS_BLOCK));
1159 (void) dictinsert(d, "CONTINUOUS_NONBLOCK",
1160 newintobject(CL_CONTINUOUS_NONBLOCK));
1161 (void) dictinsert(d, "EXTERNAL_DEVICE",
1162 newintobject((long)CL_EXTERNAL_DEVICE));
1163#endif
1164 (void) dictinsert(d, "AWCMP_STEREO", newintobject(AWCMP_STEREO));
1165 (void) dictinsert(d, "AWCMP_JOINT_STEREO",
1166 newintobject(AWCMP_JOINT_STEREO));
1167 (void) dictinsert(d, "AWCMP_INDEPENDENT",
1168 newintobject(AWCMP_INDEPENDENT));
1169 (void) dictinsert(d, "AWCMP_FIXED_RATE",
1170 newintobject(AWCMP_FIXED_RATE));
1171 (void) dictinsert(d, "AWCMP_CONST_QUAL",
1172 newintobject(AWCMP_CONST_QUAL));
1173 (void) dictinsert(d, "AWCMP_LOSSLESS", newintobject(AWCMP_LOSSLESS));
1174 (void) dictinsert(d, "AWCMP_MPEG_LAYER_I",
1175 newintobject(AWCMP_MPEG_LAYER_I));
1176 (void) dictinsert(d, "AWCMP_MPEG_LAYER_II",
1177 newintobject(AWCMP_MPEG_LAYER_II));
1178 (void) dictinsert(d, "HEADER_START_CODE",
1179 newintobject(CL_HEADER_START_CODE));
1180 (void) dictinsert(d, "BAD_NO_BUFFERSPACE",
1181 newintobject(CL_BAD_NO_BUFFERSPACE));
1182 (void) dictinsert(d, "BAD_PVBUFFER", newintobject(CL_BAD_PVBUFFER));
1183 (void) dictinsert(d, "BAD_BUFFERLENGTH_NEG",
1184 newintobject(CL_BAD_BUFFERLENGTH_NEG));
1185 (void) dictinsert(d, "BAD_BUFFERLENGTH_ODD",
1186 newintobject(CL_BAD_BUFFERLENGTH_ODD));
1187 (void) dictinsert(d, "BAD_PARAM", newintobject(CL_BAD_PARAM));
1188 (void) dictinsert(d, "BAD_COMPRESSION_SCHEME",
1189 newintobject(CL_BAD_COMPRESSION_SCHEME));
1190 (void) dictinsert(d, "BAD_COMPRESSOR_HANDLE",
1191 newintobject(CL_BAD_COMPRESSOR_HANDLE));
1192 (void) dictinsert(d, "BAD_COMPRESSOR_HANDLE_POINTER",
1193 newintobject(CL_BAD_COMPRESSOR_HANDLE_POINTER));
1194 (void) dictinsert(d, "BAD_BUFFER_HANDLE",
1195 newintobject(CL_BAD_BUFFER_HANDLE));
1196 (void) dictinsert(d, "BAD_BUFFER_QUERY_SIZE",
1197 newintobject(CL_BAD_BUFFER_QUERY_SIZE));
1198 (void) dictinsert(d, "JPEG_ERROR", newintobject(CL_JPEG_ERROR));
1199 (void) dictinsert(d, "BAD_FRAME_SIZE",
1200 newintobject(CL_BAD_FRAME_SIZE));
1201 (void) dictinsert(d, "PARAM_OUT_OF_RANGE",
1202 newintobject(CL_PARAM_OUT_OF_RANGE));
1203 (void) dictinsert(d, "ADDED_ALGORITHM_ERROR",
1204 newintobject(CL_ADDED_ALGORITHM_ERROR));
1205 (void) dictinsert(d, "BAD_ALGORITHM_TYPE",
1206 newintobject(CL_BAD_ALGORITHM_TYPE));
1207 (void) dictinsert(d, "BAD_ALGORITHM_NAME",
1208 newintobject(CL_BAD_ALGORITHM_NAME));
1209 (void) dictinsert(d, "BAD_BUFFERING", newintobject(CL_BAD_BUFFERING));
1210 (void) dictinsert(d, "BUFFER_NOT_CREATED",
1211 newintobject(CL_BUFFER_NOT_CREATED));
1212 (void) dictinsert(d, "BAD_BUFFER_EXISTS",
1213 newintobject(CL_BAD_BUFFER_EXISTS));
1214 (void) dictinsert(d, "BAD_INTERNAL_FORMAT",
1215 newintobject(CL_BAD_INTERNAL_FORMAT));
1216 (void) dictinsert(d, "BAD_BUFFER_POINTER",
1217 newintobject(CL_BAD_BUFFER_POINTER));
1218 (void) dictinsert(d, "FRAME_BUFFER_SIZE_ZERO",
1219 newintobject(CL_FRAME_BUFFER_SIZE_ZERO));
1220 (void) dictinsert(d, "BAD_STREAM_HEADER",
1221 newintobject(CL_BAD_STREAM_HEADER));
1222 (void) dictinsert(d, "BAD_LICENSE", newintobject(CL_BAD_LICENSE));
1223 (void) dictinsert(d, "AWARE_ERROR", newintobject(CL_AWARE_ERROR));
1224 (void) dictinsert(d, "BAD_BUFFER_SIZE_POINTER",
1225 newintobject(CL_BAD_BUFFER_SIZE_POINTER));
1226 (void) dictinsert(d, "BAD_BUFFER_SIZE",
1227 newintobject(CL_BAD_BUFFER_SIZE));
1228 (void) dictinsert(d, "BAD_BUFFER_TYPE",
1229 newintobject(CL_BAD_BUFFER_TYPE));
1230 (void) dictinsert(d, "BAD_HEADER_SIZE",
1231 newintobject(CL_BAD_HEADER_SIZE));
1232 (void) dictinsert(d, "BAD_FUNCTION_POINTER",
1233 newintobject(CL_BAD_FUNCTION_POINTER));
1234 (void) dictinsert(d, "BAD_SCHEME_POINTER",
1235 newintobject(CL_BAD_SCHEME_POINTER));
1236 (void) dictinsert(d, "BAD_STRING_POINTER",
1237 newintobject(CL_BAD_STRING_POINTER));
1238 (void) dictinsert(d, "BAD_MIN_GT_MAX",
1239 newintobject(CL_BAD_MIN_GT_MAX));
1240 (void) dictinsert(d, "BAD_INITIAL_VALUE",
1241 newintobject(CL_BAD_INITIAL_VALUE));
1242 (void) dictinsert(d, "BAD_PARAM_ID_POINTER",
1243 newintobject(CL_BAD_PARAM_ID_POINTER));
1244 (void) dictinsert(d, "BAD_PARAM_TYPE",
1245 newintobject(CL_BAD_PARAM_TYPE));
1246 (void) dictinsert(d, "BAD_TEXT_STRING_PTR",
1247 newintobject(CL_BAD_TEXT_STRING_PTR));
1248 (void) dictinsert(d, "BAD_FUNCTIONALITY",
1249 newintobject(CL_BAD_FUNCTIONALITY));
1250 (void) dictinsert(d, "BAD_NUMBER_OF_BLOCKS",
1251 newintobject(CL_BAD_NUMBER_OF_BLOCKS));
1252 (void) dictinsert(d, "BAD_BLOCK_SIZE",
1253 newintobject(CL_BAD_BLOCK_SIZE));
1254 (void) dictinsert(d, "BAD_POINTER", newintobject(CL_BAD_POINTER));
1255 (void) dictinsert(d, "BAD_BOARD", newintobject(CL_BAD_BOARD));
1256 (void) dictinsert(d, "MVC2_ERROR", newintobject(CL_MVC2_ERROR));
1257#ifdef IRIX_5_3_LIBRARY
1258 (void) dictinsert(d, "NEXT_NOT_AVAILABLE",
1259 newintobject(CL_NEXT_NOT_AVAILABLE));
1260 (void) dictinsert(d, "SCHEME_BUSY", newintobject(CL_SCHEME_BUSY));
1261 (void) dictinsert(d, "SCHEME_NOT_AVAILABLE",
1262 newintobject(CL_SCHEME_NOT_AVAILABLE));
1263#endif
1264#ifdef CL_LUMA_THRESHOLD
1265 /* backward compatibility */
1266 (void) dictinsert(d, "LUMA_THRESHOLD",
1267 newintobject(CL_LUMA_THRESHOLD));
1268 (void) dictinsert(d, "CHROMA_THRESHOLD",
1269 newintobject(CL_CHROMA_THRESHOLD));
1270 (void) dictinsert(d, "EDGE_THRESHOLD",
1271 newintobject(CL_EDGE_THRESHOLD));
1272 (void) dictinsert(d, "BLENDING", newintobject(CL_BLENDING));
1273 (void) dictinsert(d, "QUALITY_FACTOR",
1274 newintobject(CL_QUALITY_FACTOR));
1275 (void) dictinsert(d, "STREAM_HEADERS",
1276 newintobject(CL_STREAM_HEADERS));
1277 (void) dictinsert(d, "QUALITY_LEVEL", newintobject(CL_QUALITY_LEVEL));
1278 (void) dictinsert(d, "TILE_THRESHOLD",
1279 newintobject(CL_TILE_THRESHOLD));
1280 (void) dictinsert(d, "SAMPLES_PER_TILE",
1281 newintobject(CL_SAMPLES_PER_TILE));
1282#endif
1283
1284 if (err_occurred())
1285 fatal("can't initialize module cl");
Sjoerd Mullenderd53a4f31992-09-24 10:37:39 +00001286
1287 (void) clSetErrorHandler(cl_ErrorHandler);
Sjoerd Mullenderc4315491992-09-23 14:53:00 +00001288}