blob: 87864c61a95543c9e79e0fc9ada06a58c1cbf4e7 [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/*
2Input used to generate the Python module "glmodule.c".
Guido van Rossumb3165151991-08-16 08:59:21 +00003The stub generator is a Python script called "cgen.py".
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00004
5Each definition must be contained on one line:
6
7<returntype> <name> <type> <arg> <type> <arg>
8
9<returntype> can be: void, short, long (XXX maybe others?)
10
11<type> can be: char, string, short, float, long, or double
12 string indicates a null terminated string;
13 if <type> is char and <arg> begins with a *, the * is stripped
14 and <type> is changed into string
15
16<arg> has the form <mode> or <mode>[<subscript>]
17 where <mode> can be
18 s: arg is sent
19 r: arg is received (arg is a pointer)
20 and <subscript> can be (N and I are numbers):
21 N
22 argI
23 retval
24 N*argI
25 N*retval
26*/
27
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000028#include <gl.h>
29#include <device.h>
Guido van Rossum3f5da241990-12-20 15:06:42 +000030
31#include "allobjects.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032#include "import.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000033#include "modsupport.h"
34#include "cgensupport.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
36/*
37Some stubs are too complicated for the stub generator.
38We can include manually written versions of them here.
39A line starting with '%' gives the name of the function so the stub
40generator can include it in the table of functions.
41*/
42
43/*
44varray -- an array of v.. calls.
45The argument is an array (maybe list or tuple) of points.
46Each point must be a tuple or list of coordinates (x, y, z).
47The points may be 2- or 3-dimensional but must all have the
48same dimension. Float and int values may be mixed however.
49The points are always converted to 3D double precision points
50by assuming z=0.0 if necessary (as indicated in the man page),
51and for each point v3d() is called.
52*/
53
54% varray
55
56static object *
57gl_varray(self, args)
58 object *self;
59 object *args;
60{
61 object *v, *w;
62 int i, n, width;
63 double vec[3];
64 object * (*getitem) FPROTO((object *, int));
65
66 if (!getiobjectarg(args, 1, 0, &v))
67 return NULL;
68
69 if (is_listobject(v)) {
70 n = getlistsize(v);
71 getitem = getlistitem;
72 }
73 else if (is_tupleobject(v)) {
74 n = gettuplesize(v);
75 getitem = gettupleitem;
76 }
77 else {
78 err_badarg();
79 return NULL;
80 }
81
82 if (n == 0) {
83 INCREF(None);
84 return None;
85 }
86 if (n > 0)
87 w = (*getitem)(v, 0);
88
89 width = 0;
90 if (w == NULL) {
91 }
92 else if (is_listobject(w)) {
93 width = getlistsize(w);
94 }
95 else if (is_tupleobject(w)) {
96 width = gettuplesize(w);
97 }
98
99 switch (width) {
100 case 2:
101 vec[2] = 0.0;
102 /* Fall through */
103 case 3:
104 break;
105 default:
106 err_badarg();
107 return NULL;
108 }
109
110 for (i = 0; i < n; i++) {
111 w = (*getitem)(v, i);
112 if (!getidoublearray(w, 1, 0, width, vec))
113 return NULL;
114 v3d(vec);
115 }
116
117 INCREF(None);
118 return None;
119}
120
121/*
122vnarray, nvarray -- an array of n3f and v3f calls.
123The argument is an array (list or tuple) of pairs of points and normals.
124Each pair is a tuple (NOT a list) of a point and a normal for that point.
125Each point or normal must be a tuple (NOT a list) of coordinates (x, y, z).
126Three coordinates must be given. Float and int values may be mixed.
127For each pair, n3f() is called for the normal, and then v3f() is called
128for the vector.
129
130vnarray and nvarray differ only in the order of the vector and normal in
131the pair: vnarray expects (v, n) while nvarray expects (n, v).
132*/
133
134static object *gen_nvarray(); /* Forward */
135
136% nvarray
137
138static object *
139gl_nvarray(self, args)
140 object *self;
141 object *args;
142{
143 return gen_nvarray(args, 0);
144}
145
146% vnarray
147
148static object *
149gl_vnarray(self, args)
150 object *self;
151 object *args;
152{
153 return gen_nvarray(args, 1);
154}
155
156/* Generic, internal version of {nv,nv}array: inorm indicates the
157 argument order, 0: normal first, 1: vector first. */
158
159static object *
160gen_nvarray(args, inorm)
161 object *args;
162 int inorm;
163{
164 object *v, *w, *wnorm, *wvec;
165 int i, n;
166 float norm[3], vec[3];
167 object * (*getitem) FPROTO((object *, int));
168
169 if (!getiobjectarg(args, 1, 0, &v))
170 return NULL;
171
172 if (is_listobject(v)) {
173 n = getlistsize(v);
174 getitem = getlistitem;
175 }
176 else if (is_tupleobject(v)) {
177 n = gettuplesize(v);
178 getitem = gettupleitem;
179 }
180 else {
181 err_badarg();
182 return NULL;
183 }
184
185 for (i = 0; i < n; i++) {
186 w = (*getitem)(v, i);
187 if (!is_tupleobject(w) || gettuplesize(w) != 2) {
188 err_badarg();
189 return NULL;
190 }
191 wnorm = gettupleitem(w, inorm);
192 wvec = gettupleitem(w, 1 - inorm);
193 if (!getifloatarray(wnorm, 1, 0, 3, norm) ||
194 !getifloatarray(wvec, 1, 0, 3, vec))
195 return NULL;
196 n3f(norm);
197 v3f(vec);
198 }
199
200 INCREF(None);
201 return None;
202}
203
204/* nurbssurface(s_knots[], t_knots[], ctl[][], s_order, t_order, type).
205 The dimensions of ctl[] are computed as follows:
206 [len(s_knots) - s_order], [len(t_knots) - t_order]
207*/
208
209% nurbssurface
210
211static object *
212gl_nurbssurface(self, args)
213 object *self;
214 object *args;
215{
216 long arg1 ;
217 double * arg2 ;
218 long arg3 ;
219 double * arg4 ;
220 double *arg5 ;
221 long arg6 ;
222 long arg7 ;
223 long arg8 ;
224 long ncoords;
225 long s_byte_stride, t_byte_stride;
226 long s_nctl, t_nctl;
227 long s, t;
228 object *v, *w, *pt;
229 double *pnext;
230 if (!getilongarraysize(args, 6, 0, &arg1))
231 return NULL;
232 if ((arg2 = NEW(double, arg1 )) == NULL) {
233 return err_nomem();
234 }
235 if (!getidoublearray(args, 6, 0, arg1 , arg2))
236 return NULL;
237 if (!getilongarraysize(args, 6, 1, &arg3))
238 return NULL;
239 if ((arg4 = NEW(double, arg3 )) == NULL) {
240 return err_nomem();
241 }
242 if (!getidoublearray(args, 6, 1, arg3 , arg4))
243 return NULL;
244 if (!getilongarg(args, 6, 3, &arg6))
245 return NULL;
246 if (!getilongarg(args, 6, 4, &arg7))
247 return NULL;
248 if (!getilongarg(args, 6, 5, &arg8))
249 return NULL;
250 if (arg8 == N_XYZ)
251 ncoords = 3;
252 else if (arg8 == N_XYZW)
253 ncoords = 4;
254 else {
255 err_badarg();
256 return NULL;
257 }
258 s_nctl = arg1 - arg6;
259 t_nctl = arg3 - arg7;
260 if (!getiobjectarg(args, 6, 2, &v))
261 return NULL;
262 if (!is_listobject(v) || getlistsize(v) != s_nctl) {
263 err_badarg();
264 return NULL;
265 }
266 if ((arg5 = NEW(double, s_nctl*t_nctl*ncoords )) == NULL) {
267 return err_nomem();
268 }
269 pnext = arg5;
270 for (s = 0; s < s_nctl; s++) {
271 w = getlistitem(v, s);
272 if (w == NULL || !is_listobject(w) ||
273 getlistsize(w) != t_nctl) {
274 err_badarg();
275 return NULL;
276 }
277 for (t = 0; t < t_nctl; t++) {
278 pt = getlistitem(w, t);
279 if (!getidoublearray(pt, 1, 0, ncoords, pnext))
280 return NULL;
281 pnext += ncoords;
282 }
283 }
284 s_byte_stride = sizeof(double) * ncoords;
285 t_byte_stride = s_byte_stride * s_nctl;
286 nurbssurface( arg1 , arg2 , arg3 , arg4 ,
287 s_byte_stride , t_byte_stride , arg5 , arg6 , arg7 , arg8 );
288 DEL(arg2);
289 DEL(arg4);
290 DEL(arg5);
291 INCREF(None);
292 return None;
293}
294
295/* nurbscurve(knots, ctlpoints, order, type).
296 The length of ctlpoints is len(knots)-order. */
297
298%nurbscurve
299
300static object *
301gl_nurbscurve(self, args)
302 object *self;
303 object *args;
304{
305 long arg1 ;
306 double * arg2 ;
307 long arg3 ;
308 double * arg4 ;
309 long arg5 ;
310 long arg6 ;
311 int ncoords, npoints;
312 int i;
313 object *v;
314 double *pnext;
315 if (!getilongarraysize(args, 4, 0, &arg1))
316 return NULL;
317 if ((arg2 = NEW(double, arg1 )) == NULL) {
318 return err_nomem();
319 }
320 if (!getidoublearray(args, 4, 0, arg1 , arg2))
321 return NULL;
322 if (!getilongarg(args, 4, 2, &arg5))
323 return NULL;
324 if (!getilongarg(args, 4, 3, &arg6))
325 return NULL;
326 if (arg6 == N_ST)
327 ncoords = 2;
328 else if (arg6 == N_STW)
329 ncoords = 3;
330 else {
331 err_badarg();
332 return NULL;
333 }
334 npoints = arg1 - arg5;
335 if (!getiobjectarg(args, 4, 1, &v))
336 return NULL;
337 if (!is_listobject(v) || getlistsize(v) != npoints) {
338 err_badarg();
339 return NULL;
340 }
341 if ((arg4 = NEW(double, npoints*ncoords )) == NULL) {
342 return err_nomem();
343 }
344 pnext = arg4;
345 for (i = 0; i < npoints; i++) {
346 if (!getidoublearray(getlistitem(v, i), 1, 0, ncoords, pnext))
347 return NULL;
348 pnext += ncoords;
349 }
350 arg3 = (sizeof(double)) * ncoords;
351 nurbscurve( arg1 , arg2 , arg3 , arg4 , arg5 , arg6 );
352 DEL(arg2);
353 DEL(arg4);
354 INCREF(None);
355 return None;
356}
357
358/* pwlcurve(points, type).
359 Points is a list of points. Type must be N_ST. */
360
361%pwlcurve
362
363static object *
364gl_pwlcurve(self, args)
365 object *self;
366 object *args;
367{
368 object *v;
369 long type;
370 double *data, *pnext;
371 long npoints, ncoords;
372 int i;
373 if (!getiobjectarg(args, 2, 0, &v))
374 return NULL;
375 if (!getilongarg(args, 2, 1, &type))
376 return NULL;
377 if (!is_listobject(v)) {
378 err_badarg();
379 return NULL;
380 }
381 npoints = getlistsize(v);
382 if (type == N_ST)
383 ncoords = 2;
384 else {
385 err_badarg();
386 return NULL;
387 }
388 if ((data = NEW(double, npoints*ncoords)) == NULL) {
389 return err_nomem();
390 }
391 pnext = data;
392 for (i = 0; i < npoints; i++) {
393 if (!getidoublearray(getlistitem(v, i), 1, 0, ncoords, pnext))
394 return NULL;
395 pnext += ncoords;
396 }
397 pwlcurve(npoints, data, sizeof(double)*ncoords, type);
398 DEL(data);
399 INCREF(None);
400 return None;
401}
402
403
404/* Picking and Selecting */
405
406static short *pickbuffer = NULL;
407static long pickbuffersize;
408
409static object *
410pick_select(args, func)
411 object *args;
412 void (*func)();
413{
414 if (!getilongarg(args, 1, 0, &pickbuffersize))
415 return NULL;
416 if (pickbuffer != NULL) {
417 err_setstr(RuntimeError,
418 "pick/gselect: already picking/selecting");
419 return NULL;
420 }
421 if ((pickbuffer = NEW(short, pickbuffersize)) == NULL) {
422 return err_nomem();
423 }
424 (*func)(pickbuffer, pickbuffersize);
425 INCREF(None);
426 return None;
427}
428
429static object *
430endpick_select(args, func)
431 object *args;
432 long (*func)();
433{
434 object *v, *w;
435 int i, nhits, n;
436 if (!getnoarg(args))
437 return NULL;
438 if (pickbuffer == NULL) {
439 err_setstr(RuntimeError,
440 "endpick/endselect: not in pick/select mode");
441 return NULL;
442 }
443 nhits = (*func)(pickbuffer);
444 if (nhits < 0) {
445 nhits = -nhits; /* How to report buffer overflow otherwise? */
446 }
447 /* Scan the buffer to see how many integers */
448 n = 0;
449 for (; nhits > 0; nhits--) {
450 n += 1 + pickbuffer[n];
451 }
452 v = newlistobject(n);
453 if (v == NULL)
454 return NULL;
455 /* XXX Could do it nicer and interpret the data structure here,
456 returning a list of lists. But this can be done in Python... */
457 for (i = 0; i < n; i++) {
458 w = newintobject((long)pickbuffer[i]);
459 if (w == NULL) {
460 DECREF(v);
461 return NULL;
462 }
463 setlistitem(v, i, w);
464 }
465 DEL(pickbuffer);
466 pickbuffer = NULL;
467 return v;
468}
469
470extern void pick(), gselect();
471extern long endpick(), endselect();
472
473%pick
474static object *gl_pick(self, args) object *self, *args; {
475 return pick_select(args, pick);
476}
477
478%endpick
479static object *gl_endpick(self, args) object *self, *args; {
480 return endpick_select(args, endpick);
481}
482
483%gselect
484static object *gl_gselect(self, args) object *self, *args; {
485 return pick_select(args, gselect);
486}
487
488%endselect
489static object *gl_endselect(self, args) object *self, *args; {
490 return endpick_select(args, endselect);
491}
492
493
494/* XXX The generator botches this one. Here's a quick hack to fix it. */
495
Guido van Rossumb3165151991-08-16 08:59:21 +0000496/* XXX The generator botches this one. Here's a quick hack to fix it. */
497
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000498% getmatrix float r[16]
499
500static object *
501gl_getmatrix(self, args)
502 object *self;
503 object *args;
504{
505 float arg1 [ 16 ] ;
506 object *v, *w;
507 int i;
508 getmatrix( arg1 );
509 v = newlistobject(16);
510 if (v == NULL) {
511 return err_nomem();
512 }
513 for (i = 0; i < 16; i++) {
514 w = mknewfloatobject(arg1[i]);
515 if (w == NULL) {
516 DECREF(v);
517 return NULL;
518 }
519 setlistitem(v, i, w);
520 }
521 return v;
522}
523
Guido van Rossumb3165151991-08-16 08:59:21 +0000524/* Here's an alternate version that returns a 4x4 matrix instead of
525 a vector. Unfortunately it is incompatible with loadmatrix and
526 multmatrix... */
527
528% altgetmatrix float r[4][4]
529
530static object *
531gl_altgetmatrix(self, args)
532 object *self;
533 object *args;
534{
535 float arg1 [ 4 ] [ 4 ] ;
536 object *v, *w;
537 int i, j;
538 getmatrix( arg1 );
539 v = newlistobject(4);
540 if (v == NULL) {
541 return NULL;
542 }
543 for (i = 0; i < 4; i++) {
544 w = newlistobject(4);
545 if (w == NULL) {
546 DECREF(v);
547 return NULL;
548 }
549 setlistitem(v, i, w);
550 }
551 for (i = 0; i < 4; i++) {
552 for (j = 0; j < 4; j++) {
553 w = mknewfloatobject(arg1[i][j]);
554 if (w == NULL) {
555 DECREF(v);
556 return NULL;
557 }
558 setlistitem(getlistitem(v, i), j, w);
559 }
560 }
561 return v;
562}
563
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000564% lrectwrite
565
566static object *
567gl_lrectwrite(self, args)
568 object *self;
569 object *args;
570{
571 short x1 ;
572 short y1 ;
573 short x2 ;
574 short y2 ;
575 string parray ;
576 object *s;
577 int pixcount;
578 if (!getishortarg(args, 5, 0, &x1))
579 return NULL;
580 if (!getishortarg(args, 5, 1, &y1))
581 return NULL;
582 if (!getishortarg(args, 5, 2, &x2))
583 return NULL;
584 if (!getishortarg(args, 5, 3, &y2))
585 return NULL;
586 if (!getistringarg(args, 5, 4, &parray))
587 return NULL;
588 if (!getiobjectarg(args, 5, 4, &s))
589 return NULL;
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000590#if 0
591/* Don't check this, it breaks experiments with pixmode(PM_SIZE, ...) */
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000592 pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
593 if (!is_stringobject(s) || getstringsize(s) != pixcount*sizeof(long)) {
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000594 err_setstr(RuntimeError,
595 "string arg to lrectwrite has wrong size");
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000596 return NULL;
597 }
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000598#endif
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000599 lrectwrite( x1 , y1 , x2 , y2 , (unsigned long *) parray );
600 INCREF(None);
601 return None;
602}
603
604% lrectread
605
606static object *
607gl_lrectread(self, args)
608 object *self;
609 object *args;
610{
611 short x1 ;
612 short y1 ;
613 short x2 ;
614 short y2 ;
615 object *parray;
616 int pixcount;
617 if (!getishortarg(args, 4, 0, &x1))
618 return NULL;
619 if (!getishortarg(args, 4, 1, &y1))
620 return NULL;
621 if (!getishortarg(args, 4, 2, &x2))
622 return NULL;
623 if (!getishortarg(args, 4, 3, &y2))
624 return NULL;
625 pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
626 parray = newsizedstringobject((char *)NULL, pixcount*sizeof(long));
627 if (parray == NULL)
628 return NULL; /* No memory */
629 lrectread(x1, y1, x2, y2, (unsigned long *) getstringvalue(parray));
630 return parray;
631}
632
633/* Desperately needed, here are tools to compress and decompress
634 the data manipulated by lrectread/lrectwrite.
635
636 gl.packrect(width, height, packfactor, bigdata) --> smalldata
637 makes 'bigdata' 4*(packfactor**2) times smaller by:
638 - turning it into B/W (a factor 4)
639 - replacing squares of size pacfactor by one
640 representative
641
642 gl.unpackrect(width, height, packfactor, smalldata) --> bigdata
643 is the inverse; the numeric arguments must be *the same*.
644
645 Both work best if width and height are multiples of packfactor
646 (in fact unpackrect will leave garbage bytes).
647*/
648
649% packrect
650
651static object *
652gl_packrect(self, args)
653 object *self;
654 object *args;
655{
656 long width, height, packfactor;
657 char *s;
658 object *unpacked, *packed;
659 int pixcount, packedcount, x, y, r, g, b;
660 unsigned long pixel;
661 unsigned char *p;
662 unsigned long *parray;
663 if (!getilongarg(args, 4, 0, &width))
664 return NULL;
665 if (!getilongarg(args, 4, 1, &height))
666 return NULL;
667 if (!getilongarg(args, 4, 2, &packfactor))
668 return NULL;
669 if (!getistringarg(args, 4, 3, &s)) /* For type checking only */
670 return NULL;
671 if (!getiobjectarg(args, 4, 3, &unpacked))
672 return NULL;
673 if (width <= 0 || height <= 0 || packfactor <= 0) {
674 err_setstr(RuntimeError, "packrect args must be > 0");
675 return NULL;
676 }
677 pixcount = width*height;
678 packedcount = ((width+packfactor-1)/packfactor) *
679 ((height+packfactor-1)/packfactor);
680 if (getstringsize(unpacked) != pixcount*sizeof(long)) {
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000681 err_setstr(RuntimeError,
682 "string arg to packrect has wrong size");
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000683 return NULL;
684 }
685 packed = newsizedstringobject((char *)NULL, packedcount);
686 if (packed == NULL)
687 return NULL;
688 parray = (unsigned long *) getstringvalue(unpacked);
689 p = getstringvalue(packed);
690 for (y = 0; y < height; y += packfactor, parray += packfactor*width) {
691 for (x = 0; x < width; x += packfactor) {
692 pixel = parray[x];
693 r = pixel & 0xff;
694 g = (pixel >> 8) & 0xff;
695 b = (pixel >> 16) & 0xff;
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000696 *p++ = (30*r+59*g+11*b) / 100;
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000697 }
698 }
699 return packed;
700}
701
702% unpackrect
703
704static unsigned long unpacktab[256];
705static int unpacktab_inited = 0;
706
707static object *
708gl_unpackrect(self, args)
709 object *self;
710 object *args;
711{
712 long width, height, packfactor;
713 char *s;
714 object *unpacked, *packed;
715 int pixcount, packedcount, y;
716 register unsigned char *p;
717 register unsigned long *parray;
718 if (!unpacktab_inited) {
719 register int white;
720 for (white = 256; --white >= 0; )
721 unpacktab[white] = white * 0x010101L;
722 unpacktab_inited++;
723 }
724 if (!getilongarg(args, 4, 0, &width))
725 return NULL;
726 if (!getilongarg(args, 4, 1, &height))
727 return NULL;
728 if (!getilongarg(args, 4, 2, &packfactor))
729 return NULL;
730 if (!getistringarg(args, 4, 3, &s)) /* For type checking only */
731 return NULL;
732 if (!getiobjectarg(args, 4, 3, &packed))
733 return NULL;
734 if (width <= 0 || height <= 0 || packfactor <= 0) {
735 err_setstr(RuntimeError, "packrect args must be > 0");
736 return NULL;
737 }
738 pixcount = width*height;
739 packedcount = ((width+packfactor-1)/packfactor) *
740 ((height+packfactor-1)/packfactor);
741 if (getstringsize(packed) != packedcount) {
Guido van Rossum6d0b5a71991-11-12 15:41:00 +0000742 err_setstr(RuntimeError,
743 "string arg to unpackrect has wrong size");
Guido van Rossumd26d9ed1991-10-20 20:13:40 +0000744 return NULL;
745 }
746 unpacked = newsizedstringobject((char *)NULL, pixcount*sizeof(long));
747 if (unpacked == NULL)
748 return NULL;
749 parray = (unsigned long *) getstringvalue(unpacked);
750 p = (unsigned char *) getstringvalue(packed);
751 if (packfactor == 1 && width*height > 0) {
752 /* Just expand bytes to longs */
753 register int x = width * height;
754 do {
755 *parray++ = unpacktab[*p++];
756 } while (--x >= 0);
757 }
758 else {
759 register int y;
760 for (y = 0; y < height-packfactor+1;
761 y += packfactor, parray += packfactor*width) {
762 register int x;
763 for (x = 0; x < width-packfactor+1; x += packfactor) {
764 register unsigned long pixel = unpacktab[*p++];
765 register int i;
766 for (i = packfactor*width; (i-=width) >= 0;) {
767 register int j;
768 for (j = packfactor; --j >= 0; )
769 parray[i+x+j] = pixel;
770 }
771 }
772 }
773 }
774 return unpacked;
775}
776
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000777/* End of manually written stubs */
778
779%%
780
781long getshade
782void devport short s long s
783void rdr2i long s long s
784void rectfs short s short s short s short s
785void rects short s short s short s short s
786void rmv2i long s long s
787void noport
788void popviewport
789void clear
790void clearhitcode
791void closeobj
792void cursoff
793void curson
794void doublebuffer
795void finish
796void gconfig
797void ginit
798void greset
799void multimap
800void onemap
801void popattributes
802void popmatrix
803void pushattributes
804void pushmatrix
805void pushviewport
806void qreset
807void RGBmode
808void singlebuffer
809void swapbuffers
810void gsync
Guido van Rossum06a67021992-02-26 15:19:45 +0000811void gflush
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000812void tpon
813void tpoff
814void clkon
815void clkoff
816void ringbell
817#void callfunc
818void gbegin
819void textinit
820void initnames
821void pclos
822void popname
823void spclos
824void zclear
825void screenspace
826void reshapeviewport
827void winpush
828void winpop
829void foreground
830void endfullscrn
831void endpupmode
832void fullscrn
833void pupmode
834void winconstraints
835void pagecolor short s
836void textcolor short s
837void color short s
838void curveit short s
839void font short s
840void linewidth short s
841void setlinestyle short s
842void setmap short s
843void swapinterval short s
844void writemask short s
845void textwritemask short s
846void qdevice short s
847void unqdevice short s
848void curvebasis short s
849void curveprecision short s
850void loadname short s
851void passthrough short s
852void pushname short s
853void setmonitor short s
854void setshade short s
855void setpattern short s
856void pagewritemask short s
857#
858void callobj long s
859void delobj long s
860void editobj long s
861void makeobj long s
862void maketag long s
863void chunksize long s
864void compactify long s
865void deltag long s
866void lsrepeat long s
867void objinsert long s
868void objreplace long s
869void winclose long s
870void blanktime long s
871void freepup long s
872# This is not in the library!?
873###void pupcolor long s
874#
875void backbuffer long s
876void frontbuffer long s
877void lsbackup long s
878void resetls long s
879void lampon long s
880void lampoff long s
881void setbell long s
882void blankscreen long s
883void depthcue long s
884void zbuffer long s
885void backface long s
886#
887void cmov2i long s long s
888void draw2i long s long s
889void move2i long s long s
890void pnt2i long s long s
891void patchbasis long s long s
892void patchprecision long s long s
893void pdr2i long s long s
894void pmv2i long s long s
895void rpdr2i long s long s
896void rpmv2i long s long s
897void xfpt2i long s long s
898void objdelete long s long s
899void patchcurves long s long s
900void minsize long s long s
901void maxsize long s long s
902void keepaspect long s long s
903void prefsize long s long s
904void stepunit long s long s
905void fudge long s long s
906void winmove long s long s
907#
908void attachcursor short s short s
909void deflinestyle short s short s
910void noise short s short s
911void picksize short s short s
912void qenter short s short s
913void setdepth short s short s
914void cmov2s short s short s
915void draw2s short s short s
916void move2s short s short s
917void pdr2s short s short s
918void pmv2s short s short s
919void pnt2s short s short s
920void rdr2s short s short s
921void rmv2s short s short s
922void rpdr2s short s short s
923void rpmv2s short s short s
924void xfpt2s short s short s
925#
926void cmov2 float s float s
927void draw2 float s float s
928void move2 float s float s
929void pnt2 float s float s
930void pdr2 float s float s
931void pmv2 float s float s
932void rdr2 float s float s
933void rmv2 float s float s
934void rpdr2 float s float s
935void rpmv2 float s float s
936void xfpt2 float s float s
937#
938void loadmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000939# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000940void multmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000941# Really [4][4]
942void crv float s[12]
943# Really [4][3]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000944void rcrv float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000945# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000946#
947# Methods that have strings.
948#
949void addtopup long s char *s long s
950void charstr char *s
951void getport char *s
952long strwidth char *s
953long winopen char *s
954void wintitle char *s
955#
956# Methods that have 1 long (# of elements) and an array
957#
958void polf long s float s[3*arg1]
959void polf2 long s float s[2*arg1]
960void poly long s float s[3*arg1]
961void poly2 long s float s[2*arg1]
962void crvn long s float s[3*arg1]
963void rcrvn long s float s[4*arg1]
964#
965void polf2i long s long s[2*arg1]
966void polfi long s long s[3*arg1]
967void poly2i long s long s[2*arg1]
968void polyi long s long s[3*arg1]
969#
970void polf2s long s short s[2*arg1]
971void polfs long s short s[3*arg1]
972void polys long s short s[3*arg1]
973void poly2s long s short s[2*arg1]
974#
Guido van Rossumb3165151991-08-16 08:59:21 +0000975void defcursor short s short s[128]
976# Is this useful?
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000977void writepixels short s short s[arg1]
Guido van Rossumb3165151991-08-16 08:59:21 +0000978# Should be unsigned short...
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000979void defbasis long s float s[16]
980void gewrite short s short s[arg1]
981#
982void rotate short s char s
983# This is not in the library!?
984###void setbutton short s char s
985void rot float s char s
986#
987void circfi long s long s long s
988void circi long s long s long s
989void cmovi long s long s long s
990void drawi long s long s long s
991void movei long s long s long s
992void pnti long s long s long s
993void newtag long s long s long s
994void pdri long s long s long s
995void pmvi long s long s long s
996void rdri long s long s long s
997void rmvi long s long s long s
998void rpdri long s long s long s
999void rpmvi long s long s long s
1000void xfpti long s long s long s
1001#
1002void circ float s float s float s
1003void circf float s float s float s
1004void cmov float s float s float s
1005void draw float s float s float s
1006void move float s float s float s
1007void pnt float s float s float s
1008void scale float s float s float s
1009void translate float s float s float s
1010void pdr float s float s float s
1011void pmv float s float s float s
1012void rdr float s float s float s
1013void rmv float s float s float s
1014void rpdr float s float s float s
1015void rpmv float s float s float s
1016void xfpt float s float s float s
1017#
1018void RGBcolor short s short s short s
1019void RGBwritemask short s short s short s
1020void setcursor short s short s short s
1021void tie short s short s short s
1022void circfs short s short s short s
1023void circs short s short s short s
1024void cmovs short s short s short s
1025void draws short s short s short s
1026void moves short s short s short s
1027void pdrs short s short s short s
1028void pmvs short s short s short s
1029void pnts short s short s short s
1030void rdrs short s short s short s
1031void rmvs short s short s short s
1032void rpdrs short s short s short s
1033void rpmvs short s short s short s
1034void xfpts short s short s short s
1035void curorigin short s short s short s
1036void cyclemap short s short s short s
1037#
1038void patch float s[16] float s[16] float s[16]
1039void splf long s float s[3*arg1] short s[arg1]
1040void splf2 long s float s[2*arg1] short s[arg1]
1041void splfi long s long s[3*arg1] short s[arg1]
1042void splf2i long s long s[2*arg1] short s[arg1]
1043void splfs long s short s[3*arg1] short s[arg1]
1044void splf2s long s short s[2*arg1] short s[arg1]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001045###void defpattern short s short s short s[arg2*arg2/16]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001046#
1047void rpatch float s[16] float s[16] float s[16] float s[16]
1048#
1049# routines that send 4 floats
1050#
1051void ortho2 float s float s float s float s
1052void rect float s float s float s float s
1053void rectf float s float s float s float s
1054void xfpt4 float s float s float s float s
1055#
1056void textport short s short s short s short s
1057void mapcolor short s short s short s short s
1058void scrmask short s short s short s short s
1059void setvaluator short s short s short s short s
1060void viewport short s short s short s short s
1061void shaderange short s short s short s short s
1062void xfpt4s short s short s short s short s
1063void rectfi long s long s long s long s
1064void recti long s long s long s long s
1065void xfpt4i long s long s long s long s
1066void prefposition long s long s long s long s
1067#
1068void arc float s float s float s short s short s
1069void arcf float s float s float s short s short s
1070void arcfi long s long s long s short s short s
1071void arci long s long s long s short s short s
1072#
1073void bbox2 short s short s float s float s float s float s
1074void bbox2i short s short s long s long s long s long s
1075void bbox2s short s short s short s short s short s short s
1076void blink short s short s short s short s short s
1077void ortho float s float s float s float s float s float s
1078void window float s float s float s float s float s float s
1079void lookat float s float s float s float s float s float s short s
1080#
1081void perspective short s float s float s float s
1082void polarview float s short s short s short s
1083# XXX getichararray not supported
1084#void writeRGB short s char s[arg1] char s[arg1] char s[arg1]
1085#
1086void arcfs short s short s short s short s short s
1087void arcs short s short s short s short s short s
1088void rectcopy short s short s short s short s short s short s
1089void RGBcursor short s short s short s short s short s short s short s
1090#
1091long getbutton short s
1092long getcmmode
1093long getlsbackup
1094long getresetls
1095long getdcm
1096long getzbuffer
1097long ismex
1098long isobj long s
1099long isqueued short s
1100long istag long s
1101#
1102long genobj
1103long gentag
1104long getbuffer
1105long getcolor
1106long getdisplaymode
1107long getfont
1108long getheight
1109long gethitcode
1110long getlstyle
1111long getlwidth
1112long getmap
1113long getplanes
1114long getwritemask
1115long qtest
1116long getlsrepeat
1117long getmonitor
1118long getopenobj
1119long getpattern
1120long winget
1121long winattach
1122long getothermonitor
1123long newpup
1124#
1125long getvaluator short s
1126void winset long s
1127long dopup long s
1128void getdepth short r short r
1129void getcpos short r short r
1130void getsize long r long r
1131void getorigin long r long r
1132void getviewport short r short r short r short r
1133void gettp short r short r short r short r
1134void getgpos float r float r float r float r
1135void winposition long s long s long s long s
1136void gRGBcolor short r short r short r
1137void gRGBmask short r short r short r
1138void getscrmask short r short r short r short r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001139###void gRGBcursor short r short r short r short r short r short r short r short r
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001140void getmcolor short s short r short r short r
1141void mapw long s short s short s float r float r float r float r float r float r
1142void mapw2 long s short s short s float r float r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001143###void defrasterfont short s short s short s Fontchar s[arg3] short s short s[4*arg5]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001144long qread short r
1145void getcursor short r short r short r long r
1146#
1147# For these we receive arrays of stuff
1148#
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001149###void getdev long s short s[arg1] short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001150#XXX not generated correctly yet
1151#void getmatrix float r[16]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001152###long readpixels short s short r[retval]
1153###long readRGB short s char r[retval] char r[retval] char r[retval]
1154###long blkqread short s short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001155#
1156# New 4D routines
1157#
1158void cmode
1159void concave long s
1160void curstype long s
1161void drawmode long s
1162void gammaramp short s[256] short s[256] short s[256]
1163long getbackface
1164long getdescender
1165long getdrawmode
1166long getmmode
1167long getsm
1168long getvideo long s
1169void imakebackground
1170void lmbind short s short s
1171void lmdef long s long s long s float s[arg3]
1172void mmode long s
1173void normal float s[3]
1174void overlay long s
1175void RGBrange short s short s short s short s short s short s short s short s
1176void setvideo long s long s
1177void shademodel long s
1178void underlay long s
1179#
1180# New Personal Iris/GT Routines
1181#
1182void bgnclosedline
1183void bgnline
1184void bgnpoint
1185void bgnpolygon
1186void bgnsurface
1187void bgntmesh
1188void bgntrim
1189void endclosedline
1190void endline
1191void endpoint
1192void endpolygon
1193void endsurface
1194void endtmesh
1195void endtrim
1196void blendfunction long s long s
1197void c3f float s[3]
1198void c3i long s[3]
1199void c3s short s[3]
1200void c4f float s[4]
1201void c4i long s[4]
1202void c4s short s[4]
1203void colorf float s
1204void cpack long s
1205void czclear long s long s
1206void dglclose long s
1207long dglopen char *s long s
1208long getgdesc long s
1209void getnurbsproperty long s float r
1210void glcompat long s long s
1211void iconsize long s long s
1212void icontitle char *s
1213void lRGBrange short s short s short s short s short s short s long s long s
1214void linesmooth long s
1215void lmcolor long s
1216void logicop long s
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001217###long lrectread short s short s short s short s long r[retval]
1218###void lrectwrite short s short s short s short s long s[(arg2-arg1+1)*(arg4-arg3+1)]
1219### Now manual, with string last arg
1220###long rectread short s short s short s short s short r[retval]
1221###void rectwrite short s short s short s short s short s[(arg2-arg1+1)*(arg4-arg3+1)]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001222void lsetdepth long s long s
1223void lshaderange short s short s long s long s
1224void n3f float s[3]
1225void noborder
1226void pntsmooth long s
1227void readsource long s
1228void rectzoom float s float s
1229void sbox float s float s float s float s
1230void sboxi long s long s long s long s
1231void sboxs short s short s short s short s
1232void sboxf float s float s float s float s
1233void sboxfi long s long s long s long s
1234void sboxfs short s short s short s short s
1235void setnurbsproperty long s float s
1236void setpup long s long s long s
1237void smoothline long s
1238void subpixel long s
1239void swaptmesh
1240long swinopen long s
1241void v2f float s[2]
1242void v2i long s[2]
1243void v2s short s[2]
1244void v3f float s[3]
1245void v3i long s[3]
1246void v3s short s[3]
1247void v4f float s[4]
1248void v4i long s[4]
1249void v4s short s[4]
1250void videocmd long s
1251long windepth long s
1252void wmpack long s
1253void zdraw long s
1254void zfunction long s
1255void zsource long s
1256void zwritemask long s
1257#
1258# uses doubles
1259#
1260void v2d double s[2]
1261void v3d double s[3]
1262void v4d double s[4]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001263#
1264# Why isn't this here?
1265#
1266void pixmode long s long s