blob: cf301f98d33273f0700e6e8428eebba46e6fea72 [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
811void tpon
812void tpoff
813void clkon
814void clkoff
815void ringbell
816#void callfunc
817void gbegin
818void textinit
819void initnames
820void pclos
821void popname
822void spclos
823void zclear
824void screenspace
825void reshapeviewport
826void winpush
827void winpop
828void foreground
829void endfullscrn
830void endpupmode
831void fullscrn
832void pupmode
833void winconstraints
834void pagecolor short s
835void textcolor short s
836void color short s
837void curveit short s
838void font short s
839void linewidth short s
840void setlinestyle short s
841void setmap short s
842void swapinterval short s
843void writemask short s
844void textwritemask short s
845void qdevice short s
846void unqdevice short s
847void curvebasis short s
848void curveprecision short s
849void loadname short s
850void passthrough short s
851void pushname short s
852void setmonitor short s
853void setshade short s
854void setpattern short s
855void pagewritemask short s
856#
857void callobj long s
858void delobj long s
859void editobj long s
860void makeobj long s
861void maketag long s
862void chunksize long s
863void compactify long s
864void deltag long s
865void lsrepeat long s
866void objinsert long s
867void objreplace long s
868void winclose long s
869void blanktime long s
870void freepup long s
871# This is not in the library!?
872###void pupcolor long s
873#
874void backbuffer long s
875void frontbuffer long s
876void lsbackup long s
877void resetls long s
878void lampon long s
879void lampoff long s
880void setbell long s
881void blankscreen long s
882void depthcue long s
883void zbuffer long s
884void backface long s
885#
886void cmov2i long s long s
887void draw2i long s long s
888void move2i long s long s
889void pnt2i long s long s
890void patchbasis long s long s
891void patchprecision long s long s
892void pdr2i long s long s
893void pmv2i long s long s
894void rpdr2i long s long s
895void rpmv2i long s long s
896void xfpt2i long s long s
897void objdelete long s long s
898void patchcurves long s long s
899void minsize long s long s
900void maxsize long s long s
901void keepaspect long s long s
902void prefsize long s long s
903void stepunit long s long s
904void fudge long s long s
905void winmove long s long s
906#
907void attachcursor short s short s
908void deflinestyle short s short s
909void noise short s short s
910void picksize short s short s
911void qenter short s short s
912void setdepth short s short s
913void cmov2s short s short s
914void draw2s short s short s
915void move2s short s short s
916void pdr2s short s short s
917void pmv2s short s short s
918void pnt2s short s short s
919void rdr2s short s short s
920void rmv2s short s short s
921void rpdr2s short s short s
922void rpmv2s short s short s
923void xfpt2s short s short s
924#
925void cmov2 float s float s
926void draw2 float s float s
927void move2 float s float s
928void pnt2 float s float s
929void pdr2 float s float s
930void pmv2 float s float s
931void rdr2 float s float s
932void rmv2 float s float s
933void rpdr2 float s float s
934void rpmv2 float s float s
935void xfpt2 float s float s
936#
937void loadmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000938# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000939void multmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000940# Really [4][4]
941void crv float s[12]
942# Really [4][3]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000943void rcrv float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000944# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000945#
946# Methods that have strings.
947#
948void addtopup long s char *s long s
949void charstr char *s
950void getport char *s
951long strwidth char *s
952long winopen char *s
953void wintitle char *s
954#
955# Methods that have 1 long (# of elements) and an array
956#
957void polf long s float s[3*arg1]
958void polf2 long s float s[2*arg1]
959void poly long s float s[3*arg1]
960void poly2 long s float s[2*arg1]
961void crvn long s float s[3*arg1]
962void rcrvn long s float s[4*arg1]
963#
964void polf2i long s long s[2*arg1]
965void polfi long s long s[3*arg1]
966void poly2i long s long s[2*arg1]
967void polyi long s long s[3*arg1]
968#
969void polf2s long s short s[2*arg1]
970void polfs long s short s[3*arg1]
971void polys long s short s[3*arg1]
972void poly2s long s short s[2*arg1]
973#
Guido van Rossumb3165151991-08-16 08:59:21 +0000974void defcursor short s short s[128]
975# Is this useful?
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000976void writepixels short s short s[arg1]
Guido van Rossumb3165151991-08-16 08:59:21 +0000977# Should be unsigned short...
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000978void defbasis long s float s[16]
979void gewrite short s short s[arg1]
980#
981void rotate short s char s
982# This is not in the library!?
983###void setbutton short s char s
984void rot float s char s
985#
986void circfi long s long s long s
987void circi long s long s long s
988void cmovi long s long s long s
989void drawi long s long s long s
990void movei long s long s long s
991void pnti long s long s long s
992void newtag long s long s long s
993void pdri long s long s long s
994void pmvi long s long s long s
995void rdri long s long s long s
996void rmvi long s long s long s
997void rpdri long s long s long s
998void rpmvi long s long s long s
999void xfpti long s long s long s
1000#
1001void circ float s float s float s
1002void circf float s float s float s
1003void cmov float s float s float s
1004void draw float s float s float s
1005void move float s float s float s
1006void pnt float s float s float s
1007void scale float s float s float s
1008void translate float s float s float s
1009void pdr float s float s float s
1010void pmv float s float s float s
1011void rdr float s float s float s
1012void rmv float s float s float s
1013void rpdr float s float s float s
1014void rpmv float s float s float s
1015void xfpt float s float s float s
1016#
1017void RGBcolor short s short s short s
1018void RGBwritemask short s short s short s
1019void setcursor short s short s short s
1020void tie short s short s short s
1021void circfs short s short s short s
1022void circs short s short s short s
1023void cmovs short s short s short s
1024void draws short s short s short s
1025void moves short s short s short s
1026void pdrs short s short s short s
1027void pmvs short s short s short s
1028void pnts short s short s short s
1029void rdrs short s short s short s
1030void rmvs short s short s short s
1031void rpdrs short s short s short s
1032void rpmvs short s short s short s
1033void xfpts short s short s short s
1034void curorigin short s short s short s
1035void cyclemap short s short s short s
1036#
1037void patch float s[16] float s[16] float s[16]
1038void splf long s float s[3*arg1] short s[arg1]
1039void splf2 long s float s[2*arg1] short s[arg1]
1040void splfi long s long s[3*arg1] short s[arg1]
1041void splf2i long s long s[2*arg1] short s[arg1]
1042void splfs long s short s[3*arg1] short s[arg1]
1043void splf2s long s short s[2*arg1] short s[arg1]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001044###void defpattern short s short s short s[arg2*arg2/16]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001045#
1046void rpatch float s[16] float s[16] float s[16] float s[16]
1047#
1048# routines that send 4 floats
1049#
1050void ortho2 float s float s float s float s
1051void rect float s float s float s float s
1052void rectf float s float s float s float s
1053void xfpt4 float s float s float s float s
1054#
1055void textport short s short s short s short s
1056void mapcolor short s short s short s short s
1057void scrmask short s short s short s short s
1058void setvaluator short s short s short s short s
1059void viewport short s short s short s short s
1060void shaderange short s short s short s short s
1061void xfpt4s short s short s short s short s
1062void rectfi long s long s long s long s
1063void recti long s long s long s long s
1064void xfpt4i long s long s long s long s
1065void prefposition long s long s long s long s
1066#
1067void arc float s float s float s short s short s
1068void arcf float s float s float s short s short s
1069void arcfi long s long s long s short s short s
1070void arci long s long s long s short s short s
1071#
1072void bbox2 short s short s float s float s float s float s
1073void bbox2i short s short s long s long s long s long s
1074void bbox2s short s short s short s short s short s short s
1075void blink short s short s short s short s short s
1076void ortho float s float s float s float s float s float s
1077void window float s float s float s float s float s float s
1078void lookat float s float s float s float s float s float s short s
1079#
1080void perspective short s float s float s float s
1081void polarview float s short s short s short s
1082# XXX getichararray not supported
1083#void writeRGB short s char s[arg1] char s[arg1] char s[arg1]
1084#
1085void arcfs short s short s short s short s short s
1086void arcs short s short s short s short s short s
1087void rectcopy short s short s short s short s short s short s
1088void RGBcursor short s short s short s short s short s short s short s
1089#
1090long getbutton short s
1091long getcmmode
1092long getlsbackup
1093long getresetls
1094long getdcm
1095long getzbuffer
1096long ismex
1097long isobj long s
1098long isqueued short s
1099long istag long s
1100#
1101long genobj
1102long gentag
1103long getbuffer
1104long getcolor
1105long getdisplaymode
1106long getfont
1107long getheight
1108long gethitcode
1109long getlstyle
1110long getlwidth
1111long getmap
1112long getplanes
1113long getwritemask
1114long qtest
1115long getlsrepeat
1116long getmonitor
1117long getopenobj
1118long getpattern
1119long winget
1120long winattach
1121long getothermonitor
1122long newpup
1123#
1124long getvaluator short s
1125void winset long s
1126long dopup long s
1127void getdepth short r short r
1128void getcpos short r short r
1129void getsize long r long r
1130void getorigin long r long r
1131void getviewport short r short r short r short r
1132void gettp short r short r short r short r
1133void getgpos float r float r float r float r
1134void winposition long s long s long s long s
1135void gRGBcolor short r short r short r
1136void gRGBmask short r short r short r
1137void getscrmask short r short r short r short r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001138###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 +00001139void getmcolor short s short r short r short r
1140void mapw long s short s short s float r float r float r float r float r float r
1141void mapw2 long s short s short s float r float r
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001142###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 +00001143long qread short r
1144void getcursor short r short r short r long r
1145#
1146# For these we receive arrays of stuff
1147#
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001148###void getdev long s short s[arg1] short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001149#XXX not generated correctly yet
1150#void getmatrix float r[16]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001151###long readpixels short s short r[retval]
1152###long readRGB short s char r[retval] char r[retval] char r[retval]
1153###long blkqread short s short r[arg1]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001154#
1155# New 4D routines
1156#
1157void cmode
1158void concave long s
1159void curstype long s
1160void drawmode long s
1161void gammaramp short s[256] short s[256] short s[256]
1162long getbackface
1163long getdescender
1164long getdrawmode
1165long getmmode
1166long getsm
1167long getvideo long s
1168void imakebackground
1169void lmbind short s short s
1170void lmdef long s long s long s float s[arg3]
1171void mmode long s
1172void normal float s[3]
1173void overlay long s
1174void RGBrange short s short s short s short s short s short s short s short s
1175void setvideo long s long s
1176void shademodel long s
1177void underlay long s
1178#
1179# New Personal Iris/GT Routines
1180#
1181void bgnclosedline
1182void bgnline
1183void bgnpoint
1184void bgnpolygon
1185void bgnsurface
1186void bgntmesh
1187void bgntrim
1188void endclosedline
1189void endline
1190void endpoint
1191void endpolygon
1192void endsurface
1193void endtmesh
1194void endtrim
1195void blendfunction long s long s
1196void c3f float s[3]
1197void c3i long s[3]
1198void c3s short s[3]
1199void c4f float s[4]
1200void c4i long s[4]
1201void c4s short s[4]
1202void colorf float s
1203void cpack long s
1204void czclear long s long s
1205void dglclose long s
1206long dglopen char *s long s
1207long getgdesc long s
1208void getnurbsproperty long s float r
1209void glcompat long s long s
1210void iconsize long s long s
1211void icontitle char *s
1212void lRGBrange short s short s short s short s short s short s long s long s
1213void linesmooth long s
1214void lmcolor long s
1215void logicop long s
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001216###long lrectread short s short s short s short s long r[retval]
1217###void lrectwrite short s short s short s short s long s[(arg2-arg1+1)*(arg4-arg3+1)]
1218### Now manual, with string last arg
1219###long rectread short s short s short s short s short r[retval]
1220###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 +00001221void lsetdepth long s long s
1222void lshaderange short s short s long s long s
1223void n3f float s[3]
1224void noborder
1225void pntsmooth long s
1226void readsource long s
1227void rectzoom float s float s
1228void sbox float s float s float s float s
1229void sboxi long s long s long s long s
1230void sboxs short s short s short s short s
1231void sboxf float s float s float s float s
1232void sboxfi long s long s long s long s
1233void sboxfs short s short s short s short s
1234void setnurbsproperty long s float s
1235void setpup long s long s long s
1236void smoothline long s
1237void subpixel long s
1238void swaptmesh
1239long swinopen long s
1240void v2f float s[2]
1241void v2i long s[2]
1242void v2s short s[2]
1243void v3f float s[3]
1244void v3i long s[3]
1245void v3s short s[3]
1246void v4f float s[4]
1247void v4i long s[4]
1248void v4s short s[4]
1249void videocmd long s
1250long windepth long s
1251void wmpack long s
1252void zdraw long s
1253void zfunction long s
1254void zsource long s
1255void zwritemask long s
1256#
1257# uses doubles
1258#
1259void v2d double s[2]
1260void v3d double s[3]
1261void v4d double s[4]
Guido van Rossumd26d9ed1991-10-20 20:13:40 +00001262#
1263# Why isn't this here?
1264#
1265void pixmode long s long s