blob: 139ab967aef68ec2c6e704bef3369243ec8fe3b5 [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;
590 pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
591 if (!is_stringobject(s) || getstringsize(s) != pixcount*sizeof(long)) {
592 fprintf(stderr, "string arg to lrectwrite has wrong size\n");
593 err_badarg();
594 return NULL;
595 }
596 lrectwrite( x1 , y1 , x2 , y2 , (unsigned long *) parray );
597 INCREF(None);
598 return None;
599}
600
601% lrectread
602
603static object *
604gl_lrectread(self, args)
605 object *self;
606 object *args;
607{
608 short x1 ;
609 short y1 ;
610 short x2 ;
611 short y2 ;
612 object *parray;
613 int pixcount;
614 if (!getishortarg(args, 4, 0, &x1))
615 return NULL;
616 if (!getishortarg(args, 4, 1, &y1))
617 return NULL;
618 if (!getishortarg(args, 4, 2, &x2))
619 return NULL;
620 if (!getishortarg(args, 4, 3, &y2))
621 return NULL;
622 pixcount = (long)(x2+1-x1) * (long)(y2+1-y1);
623 parray = newsizedstringobject((char *)NULL, pixcount*sizeof(long));
624 if (parray == NULL)
625 return NULL; /* No memory */
626 lrectread(x1, y1, x2, y2, (unsigned long *) getstringvalue(parray));
627 return parray;
628}
629
630/* Desperately needed, here are tools to compress and decompress
631 the data manipulated by lrectread/lrectwrite.
632
633 gl.packrect(width, height, packfactor, bigdata) --> smalldata
634 makes 'bigdata' 4*(packfactor**2) times smaller by:
635 - turning it into B/W (a factor 4)
636 - replacing squares of size pacfactor by one
637 representative
638
639 gl.unpackrect(width, height, packfactor, smalldata) --> bigdata
640 is the inverse; the numeric arguments must be *the same*.
641
642 Both work best if width and height are multiples of packfactor
643 (in fact unpackrect will leave garbage bytes).
644*/
645
646% packrect
647
648static object *
649gl_packrect(self, args)
650 object *self;
651 object *args;
652{
653 long width, height, packfactor;
654 char *s;
655 object *unpacked, *packed;
656 int pixcount, packedcount, x, y, r, g, b;
657 unsigned long pixel;
658 unsigned char *p;
659 unsigned long *parray;
660 if (!getilongarg(args, 4, 0, &width))
661 return NULL;
662 if (!getilongarg(args, 4, 1, &height))
663 return NULL;
664 if (!getilongarg(args, 4, 2, &packfactor))
665 return NULL;
666 if (!getistringarg(args, 4, 3, &s)) /* For type checking only */
667 return NULL;
668 if (!getiobjectarg(args, 4, 3, &unpacked))
669 return NULL;
670 if (width <= 0 || height <= 0 || packfactor <= 0) {
671 err_setstr(RuntimeError, "packrect args must be > 0");
672 return NULL;
673 }
674 pixcount = width*height;
675 packedcount = ((width+packfactor-1)/packfactor) *
676 ((height+packfactor-1)/packfactor);
677 if (getstringsize(unpacked) != pixcount*sizeof(long)) {
678 fprintf(stderr, "string arg to packrect has wrong size\n");
679 err_badarg();
680 return NULL;
681 }
682 packed = newsizedstringobject((char *)NULL, packedcount);
683 if (packed == NULL)
684 return NULL;
685 parray = (unsigned long *) getstringvalue(unpacked);
686 p = getstringvalue(packed);
687 for (y = 0; y < height; y += packfactor, parray += packfactor*width) {
688 for (x = 0; x < width; x += packfactor) {
689 pixel = parray[x];
690 r = pixel & 0xff;
691 g = (pixel >> 8) & 0xff;
692 b = (pixel >> 16) & 0xff;
693 *p++ = (r+g+b) / 3;
694 }
695 }
696 return packed;
697}
698
699% unpackrect
700
701static unsigned long unpacktab[256];
702static int unpacktab_inited = 0;
703
704static object *
705gl_unpackrect(self, args)
706 object *self;
707 object *args;
708{
709 long width, height, packfactor;
710 char *s;
711 object *unpacked, *packed;
712 int pixcount, packedcount, y;
713 register unsigned char *p;
714 register unsigned long *parray;
715 if (!unpacktab_inited) {
716 register int white;
717 for (white = 256; --white >= 0; )
718 unpacktab[white] = white * 0x010101L;
719 unpacktab_inited++;
720 }
721 if (!getilongarg(args, 4, 0, &width))
722 return NULL;
723 if (!getilongarg(args, 4, 1, &height))
724 return NULL;
725 if (!getilongarg(args, 4, 2, &packfactor))
726 return NULL;
727 if (!getistringarg(args, 4, 3, &s)) /* For type checking only */
728 return NULL;
729 if (!getiobjectarg(args, 4, 3, &packed))
730 return NULL;
731 if (width <= 0 || height <= 0 || packfactor <= 0) {
732 err_setstr(RuntimeError, "packrect args must be > 0");
733 return NULL;
734 }
735 pixcount = width*height;
736 packedcount = ((width+packfactor-1)/packfactor) *
737 ((height+packfactor-1)/packfactor);
738 if (getstringsize(packed) != packedcount) {
739 fprintf(stderr, "string arg to unpackrect has wrong size\n");
740 err_badarg();
741 return NULL;
742 }
743 unpacked = newsizedstringobject((char *)NULL, pixcount*sizeof(long));
744 if (unpacked == NULL)
745 return NULL;
746 parray = (unsigned long *) getstringvalue(unpacked);
747 p = (unsigned char *) getstringvalue(packed);
748 if (packfactor == 1 && width*height > 0) {
749 /* Just expand bytes to longs */
750 register int x = width * height;
751 do {
752 *parray++ = unpacktab[*p++];
753 } while (--x >= 0);
754 }
755 else {
756 register int y;
757 for (y = 0; y < height-packfactor+1;
758 y += packfactor, parray += packfactor*width) {
759 register int x;
760 for (x = 0; x < width-packfactor+1; x += packfactor) {
761 register unsigned long pixel = unpacktab[*p++];
762 register int i;
763 for (i = packfactor*width; (i-=width) >= 0;) {
764 register int j;
765 for (j = packfactor; --j >= 0; )
766 parray[i+x+j] = pixel;
767 }
768 }
769 }
770 }
771 return unpacked;
772}
773
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000774/* End of manually written stubs */
775
776%%
777
778long getshade
779void devport short s long s
780void rdr2i long s long s
781void rectfs short s short s short s short s
782void rects short s short s short s short s
783void rmv2i long s long s
784void noport
785void popviewport
786void clear
787void clearhitcode
788void closeobj
789void cursoff
790void curson
791void doublebuffer
792void finish
793void gconfig
794void ginit
795void greset
796void multimap
797void onemap
798void popattributes
799void popmatrix
800void pushattributes
801void pushmatrix
802void pushviewport
803void qreset
804void RGBmode
805void singlebuffer
806void swapbuffers
807void gsync
808void tpon
809void tpoff
810void clkon
811void clkoff
812void ringbell
813#void callfunc
814void gbegin
815void textinit
816void initnames
817void pclos
818void popname
819void spclos
820void zclear
821void screenspace
822void reshapeviewport
823void winpush
824void winpop
825void foreground
826void endfullscrn
827void endpupmode
828void fullscrn
829void pupmode
830void winconstraints
831void pagecolor short s
832void textcolor short s
833void color short s
834void curveit short s
835void font short s
836void linewidth short s
837void setlinestyle short s
838void setmap short s
839void swapinterval short s
840void writemask short s
841void textwritemask short s
842void qdevice short s
843void unqdevice short s
844void curvebasis short s
845void curveprecision short s
846void loadname short s
847void passthrough short s
848void pushname short s
849void setmonitor short s
850void setshade short s
851void setpattern short s
852void pagewritemask short s
853#
854void callobj long s
855void delobj long s
856void editobj long s
857void makeobj long s
858void maketag long s
859void chunksize long s
860void compactify long s
861void deltag long s
862void lsrepeat long s
863void objinsert long s
864void objreplace long s
865void winclose long s
866void blanktime long s
867void freepup long s
868# This is not in the library!?
869###void pupcolor long s
870#
871void backbuffer long s
872void frontbuffer long s
873void lsbackup long s
874void resetls long s
875void lampon long s
876void lampoff long s
877void setbell long s
878void blankscreen long s
879void depthcue long s
880void zbuffer long s
881void backface long s
882#
883void cmov2i long s long s
884void draw2i long s long s
885void move2i long s long s
886void pnt2i long s long s
887void patchbasis long s long s
888void patchprecision long s long s
889void pdr2i long s long s
890void pmv2i long s long s
891void rpdr2i long s long s
892void rpmv2i long s long s
893void xfpt2i long s long s
894void objdelete long s long s
895void patchcurves long s long s
896void minsize long s long s
897void maxsize long s long s
898void keepaspect long s long s
899void prefsize long s long s
900void stepunit long s long s
901void fudge long s long s
902void winmove long s long s
903#
904void attachcursor short s short s
905void deflinestyle short s short s
906void noise short s short s
907void picksize short s short s
908void qenter short s short s
909void setdepth short s short s
910void cmov2s short s short s
911void draw2s short s short s
912void move2s short s short s
913void pdr2s short s short s
914void pmv2s short s short s
915void pnt2s short s short s
916void rdr2s short s short s
917void rmv2s short s short s
918void rpdr2s short s short s
919void rpmv2s short s short s
920void xfpt2s short s short s
921#
922void cmov2 float s float s
923void draw2 float s float s
924void move2 float s float s
925void pnt2 float s float s
926void pdr2 float s float s
927void pmv2 float s float s
928void rdr2 float s float s
929void rmv2 float s float s
930void rpdr2 float s float s
931void rpmv2 float s float s
932void xfpt2 float s float s
933#
934void loadmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000935# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000936void multmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000937# Really [4][4]
938void crv float s[12]
939# Really [4][3]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000940void rcrv float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000941# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000942#
943# Methods that have strings.
944#
945void addtopup long s char *s long s
946void charstr char *s
947void getport char *s
948long strwidth char *s
949long winopen char *s
950void wintitle char *s
951#
952# Methods that have 1 long (# of elements) and an array
953#
954void polf long s float s[3*arg1]
955void polf2 long s float s[2*arg1]
956void poly long s float s[3*arg1]
957void poly2 long s float s[2*arg1]
958void crvn long s float s[3*arg1]
959void rcrvn long s float s[4*arg1]
960#
961void polf2i long s long s[2*arg1]
962void polfi long s long s[3*arg1]
963void poly2i long s long s[2*arg1]
964void polyi long s long s[3*arg1]
965#
966void polf2s long s short s[2*arg1]
967void polfs long s short s[3*arg1]
968void polys long s short s[3*arg1]
969void poly2s long s short s[2*arg1]
970#
Guido van Rossumb3165151991-08-16 08:59:21 +0000971void defcursor short s short s[128]
972# Is this useful?
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000973void writepixels short s short s[arg1]
Guido van Rossumb3165151991-08-16 08:59:21 +0000974# Should be unsigned short...
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000975void defbasis long s float s[16]
976void gewrite short s short s[arg1]
977#
978void rotate short s char s
979# This is not in the library!?
980###void setbutton short s char s
981void rot float s char s
982#
983void circfi long s long s long s
984void circi long s long s long s
985void cmovi long s long s long s
986void drawi long s long s long s
987void movei long s long s long s
988void pnti long s long s long s
989void newtag long s long s long s
990void pdri long s long s long s
991void pmvi long s long s long s
992void rdri long s long s long s
993void rmvi long s long s long s
994void rpdri long s long s long s
995void rpmvi long s long s long s
996void xfpti long s long s long s
997#
998void circ float s float s float s
999void circf float s float s float s
1000void cmov float s float s float s
1001void draw float s float s float s
1002void move float s float s float s
1003void pnt float s float s float s
1004void scale float s float s float s
1005void translate float s float s float s
1006void pdr float s float s float s
1007void pmv float s float s float s
1008void rdr float s float s float s
1009void rmv float s float s float s
1010void rpdr float s float s float s
1011void rpmv float s float s float s
1012void xfpt float s float s float s
1013#
1014void RGBcolor short s short s short s
1015void RGBwritemask short s short s short s
1016void setcursor short s short s short s
1017void tie short s short s short s
1018void circfs short s short s short s
1019void circs short s short s short s
1020void cmovs short s short s short s
1021void draws short s short s short s
1022void moves short s short s short s
1023void pdrs short s short s short s
1024void pmvs short s short s short s
1025void pnts short s short s short s
1026void rdrs short s short s short s
1027void rmvs short s short s short s
1028void rpdrs short s short s short s
1029void rpmvs short s short s short s
1030void xfpts short s short s short s
1031void curorigin short s short s short s
1032void cyclemap short s short s short s
1033#
1034void patch float s[16] float s[16] float s[16]
1035void splf long s float s[3*arg1] short s[arg1]
1036void splf2 long s float s[2*arg1] short s[arg1]
1037void splfi long s long s[3*arg1] short s[arg1]
1038void splf2i long s long s[2*arg1] short s[arg1]
1039void splfs long s short s[3*arg1] short s[arg1]
1040void splf2s long s short s[2*arg1] short s[arg1]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001041###void defpattern short s short s short s[arg2*arg2/16]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001042#
1043void rpatch float s[16] float s[16] float s[16] float s[16]
1044#
1045# routines that send 4 floats
1046#
1047void ortho2 float s float s float s float s
1048void rect float s float s float s float s
1049void rectf float s float s float s float s
1050void xfpt4 float s float s float s float s
1051#
1052void textport short s short s short s short s
1053void mapcolor short s short s short s short s
1054void scrmask short s short s short s short s
1055void setvaluator short s short s short s short s
1056void viewport short s short s short s short s
1057void shaderange short s short s short s short s
1058void xfpt4s short s short s short s short s
1059void rectfi long s long s long s long s
1060void recti long s long s long s long s
1061void xfpt4i long s long s long s long s
1062void prefposition long s long s long s long s
1063#
1064void arc float s float s float s short s short s
1065void arcf float s float s float s short s short s
1066void arcfi long s long s long s short s short s
1067void arci long s long s long s short s short s
1068#
1069void bbox2 short s short s float s float s float s float s
1070void bbox2i short s short s long s long s long s long s
1071void bbox2s short s short s short s short s short s short s
1072void blink short s short s short s short s short s
1073void ortho float s float s float s float s float s float s
1074void window float s float s float s float s float s float s
1075void lookat float s float s float s float s float s float s short s
1076#
1077void perspective short s float s float s float s
1078void polarview float s short s short s short s
1079# XXX getichararray not supported
1080#void writeRGB short s char s[arg1] char s[arg1] char s[arg1]
1081#
1082void arcfs short s short s short s short s short s
1083void arcs short s short s short s short s short s
1084void rectcopy short s short s short s short s short s short s
1085void RGBcursor short s short s short s short s short s short s short s
1086#
1087long getbutton short s
1088long getcmmode
1089long getlsbackup
1090long getresetls
1091long getdcm
1092long getzbuffer
1093long ismex
1094long isobj long s
1095long isqueued short s
1096long istag long s
1097#
1098long genobj
1099long gentag
1100long getbuffer
1101long getcolor
1102long getdisplaymode
1103long getfont
1104long getheight
1105long gethitcode
1106long getlstyle
1107long getlwidth
1108long getmap
1109long getplanes
1110long getwritemask
1111long qtest
1112long getlsrepeat
1113long getmonitor
1114long getopenobj
1115long getpattern
1116long winget
1117long winattach
1118long getothermonitor
1119long newpup
1120#
1121long getvaluator short s
1122void winset long s
1123long dopup long s
1124void getdepth short r short r
1125void getcpos short r short r
1126void getsize long r long r
1127void getorigin long r long r
1128void getviewport short r short r short r short r
1129void gettp short r short r short r short r
1130void getgpos float r float r float r float r
1131void winposition long s long s long s long s
1132void gRGBcolor short r short r short r
1133void gRGBmask short r short r short r
1134void getscrmask short r short r short r short r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001135###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 +00001136void getmcolor short s short r short r short r
1137void mapw long s short s short s float r float r float r float r float r float r
1138void mapw2 long s short s short s float r float r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001139###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 +00001140long qread short r
1141void getcursor short r short r short r long r
1142#
1143# For these we receive arrays of stuff
1144#
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001145###void getdev long s short s[arg1] short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001146#XXX not generated correctly yet
1147#void getmatrix float r[16]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001148###long readpixels short s short r[retval]
1149###long readRGB short s char r[retval] char r[retval] char r[retval]
1150###long blkqread short s short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001151#
1152# New 4D routines
1153#
1154void cmode
1155void concave long s
1156void curstype long s
1157void drawmode long s
1158void gammaramp short s[256] short s[256] short s[256]
1159long getbackface
1160long getdescender
1161long getdrawmode
1162long getmmode
1163long getsm
1164long getvideo long s
1165void imakebackground
1166void lmbind short s short s
1167void lmdef long s long s long s float s[arg3]
1168void mmode long s
1169void normal float s[3]
1170void overlay long s
1171void RGBrange short s short s short s short s short s short s short s short s
1172void setvideo long s long s
1173void shademodel long s
1174void underlay long s
1175#
1176# New Personal Iris/GT Routines
1177#
1178void bgnclosedline
1179void bgnline
1180void bgnpoint
1181void bgnpolygon
1182void bgnsurface
1183void bgntmesh
1184void bgntrim
1185void endclosedline
1186void endline
1187void endpoint
1188void endpolygon
1189void endsurface
1190void endtmesh
1191void endtrim
1192void blendfunction long s long s
1193void c3f float s[3]
1194void c3i long s[3]
1195void c3s short s[3]
1196void c4f float s[4]
1197void c4i long s[4]
1198void c4s short s[4]
1199void colorf float s
1200void cpack long s
1201void czclear long s long s
1202void dglclose long s
1203long dglopen char *s long s
1204long getgdesc long s
1205void getnurbsproperty long s float r
1206void glcompat long s long s
1207void iconsize long s long s
1208void icontitle char *s
1209void lRGBrange short s short s short s short s short s short s long s long s
1210void linesmooth long s
1211void lmcolor long s
1212void logicop long s
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001213###long lrectread short s short s short s short s long r[retval]
1214###void lrectwrite short s short s short s short s long s[(arg2-arg1+1)*(arg4-arg3+1)]
1215### Now manual, with string last arg
1216###long rectread short s short s short s short s short r[retval]
1217###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 +00001218void lsetdepth long s long s
1219void lshaderange short s short s long s long s
1220void n3f float s[3]
1221void noborder
1222void pntsmooth long s
1223void readsource long s
1224void rectzoom float s float s
1225void sbox float s float s float s float s
1226void sboxi long s long s long s long s
1227void sboxs short s short s short s short s
1228void sboxf float s float s float s float s
1229void sboxfi long s long s long s long s
1230void sboxfs short s short s short s short s
1231void setnurbsproperty long s float s
1232void setpup long s long s long s
1233void smoothline long s
1234void subpixel long s
1235void swaptmesh
1236long swinopen long s
1237void v2f float s[2]
1238void v2i long s[2]
1239void v2s short s[2]
1240void v3f float s[3]
1241void v3i long s[3]
1242void v3s short s[3]
1243void v4f float s[4]
1244void v4i long s[4]
1245void v4s short s[4]
1246void videocmd long s
1247long windepth long s
1248void wmpack long s
1249void zdraw long s
1250void zfunction long s
1251void zsource long s
1252void zwritemask long s
1253#
1254# uses doubles
1255#
1256void v2d double s[2]
1257void v3d double s[3]
1258void v4d double s[4]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001259#
1260# Why isn't this here?
1261#
1262void pixmode long s long s