blob: af412138beb067da0e9ce4ce9d2b29a5665939fd [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 Rossum85a5fbb1990-10-14 12:07:46 +0000564/* End of manually written stubs */
565
566%%
567
568long getshade
569void devport short s long s
570void rdr2i long s long s
571void rectfs short s short s short s short s
572void rects short s short s short s short s
573void rmv2i long s long s
574void noport
575void popviewport
576void clear
577void clearhitcode
578void closeobj
579void cursoff
580void curson
581void doublebuffer
582void finish
583void gconfig
584void ginit
585void greset
586void multimap
587void onemap
588void popattributes
589void popmatrix
590void pushattributes
591void pushmatrix
592void pushviewport
593void qreset
594void RGBmode
595void singlebuffer
596void swapbuffers
597void gsync
598void tpon
599void tpoff
600void clkon
601void clkoff
602void ringbell
603#void callfunc
604void gbegin
605void textinit
606void initnames
607void pclos
608void popname
609void spclos
610void zclear
611void screenspace
612void reshapeviewport
613void winpush
614void winpop
615void foreground
616void endfullscrn
617void endpupmode
618void fullscrn
619void pupmode
620void winconstraints
621void pagecolor short s
622void textcolor short s
623void color short s
624void curveit short s
625void font short s
626void linewidth short s
627void setlinestyle short s
628void setmap short s
629void swapinterval short s
630void writemask short s
631void textwritemask short s
632void qdevice short s
633void unqdevice short s
634void curvebasis short s
635void curveprecision short s
636void loadname short s
637void passthrough short s
638void pushname short s
639void setmonitor short s
640void setshade short s
641void setpattern short s
642void pagewritemask short s
643#
644void callobj long s
645void delobj long s
646void editobj long s
647void makeobj long s
648void maketag long s
649void chunksize long s
650void compactify long s
651void deltag long s
652void lsrepeat long s
653void objinsert long s
654void objreplace long s
655void winclose long s
656void blanktime long s
657void freepup long s
658# This is not in the library!?
659###void pupcolor long s
660#
661void backbuffer long s
662void frontbuffer long s
663void lsbackup long s
664void resetls long s
665void lampon long s
666void lampoff long s
667void setbell long s
668void blankscreen long s
669void depthcue long s
670void zbuffer long s
671void backface long s
672#
673void cmov2i long s long s
674void draw2i long s long s
675void move2i long s long s
676void pnt2i long s long s
677void patchbasis long s long s
678void patchprecision long s long s
679void pdr2i long s long s
680void pmv2i long s long s
681void rpdr2i long s long s
682void rpmv2i long s long s
683void xfpt2i long s long s
684void objdelete long s long s
685void patchcurves long s long s
686void minsize long s long s
687void maxsize long s long s
688void keepaspect long s long s
689void prefsize long s long s
690void stepunit long s long s
691void fudge long s long s
692void winmove long s long s
693#
694void attachcursor short s short s
695void deflinestyle short s short s
696void noise short s short s
697void picksize short s short s
698void qenter short s short s
699void setdepth short s short s
700void cmov2s short s short s
701void draw2s short s short s
702void move2s short s short s
703void pdr2s short s short s
704void pmv2s short s short s
705void pnt2s short s short s
706void rdr2s short s short s
707void rmv2s short s short s
708void rpdr2s short s short s
709void rpmv2s short s short s
710void xfpt2s short s short s
711#
712void cmov2 float s float s
713void draw2 float s float s
714void move2 float s float s
715void pnt2 float s float s
716void pdr2 float s float s
717void pmv2 float s float s
718void rdr2 float s float s
719void rmv2 float s float s
720void rpdr2 float s float s
721void rpmv2 float s float s
722void xfpt2 float s float s
723#
724void loadmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000725# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000726void multmatrix float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000727# Really [4][4]
728void crv float s[12]
729# Really [4][3]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000730void rcrv float s[16]
Guido van Rossumb3165151991-08-16 08:59:21 +0000731# Really [4][4]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000732#
733# Methods that have strings.
734#
735void addtopup long s char *s long s
736void charstr char *s
737void getport char *s
738long strwidth char *s
739long winopen char *s
740void wintitle char *s
741#
742# Methods that have 1 long (# of elements) and an array
743#
744void polf long s float s[3*arg1]
745void polf2 long s float s[2*arg1]
746void poly long s float s[3*arg1]
747void poly2 long s float s[2*arg1]
748void crvn long s float s[3*arg1]
749void rcrvn long s float s[4*arg1]
750#
751void polf2i long s long s[2*arg1]
752void polfi long s long s[3*arg1]
753void poly2i long s long s[2*arg1]
754void polyi long s long s[3*arg1]
755#
756void polf2s long s short s[2*arg1]
757void polfs long s short s[3*arg1]
758void polys long s short s[3*arg1]
759void poly2s long s short s[2*arg1]
760#
Guido van Rossumb3165151991-08-16 08:59:21 +0000761void defcursor short s short s[128]
762# Is this useful?
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000763void writepixels short s short s[arg1]
Guido van Rossumb3165151991-08-16 08:59:21 +0000764# Should be unsigned short...
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000765void defbasis long s float s[16]
766void gewrite short s short s[arg1]
767#
768void rotate short s char s
769# This is not in the library!?
770###void setbutton short s char s
771void rot float s char s
772#
773void circfi long s long s long s
774void circi long s long s long s
775void cmovi long s long s long s
776void drawi long s long s long s
777void movei long s long s long s
778void pnti long s long s long s
779void newtag long s long s long s
780void pdri long s long s long s
781void pmvi long s long s long s
782void rdri long s long s long s
783void rmvi long s long s long s
784void rpdri long s long s long s
785void rpmvi long s long s long s
786void xfpti long s long s long s
787#
788void circ float s float s float s
789void circf float s float s float s
790void cmov float s float s float s
791void draw float s float s float s
792void move float s float s float s
793void pnt float s float s float s
794void scale float s float s float s
795void translate float s float s float s
796void pdr float s float s float s
797void pmv float s float s float s
798void rdr float s float s float s
799void rmv float s float s float s
800void rpdr float s float s float s
801void rpmv float s float s float s
802void xfpt float s float s float s
803#
804void RGBcolor short s short s short s
805void RGBwritemask short s short s short s
806void setcursor short s short s short s
807void tie short s short s short s
808void circfs short s short s short s
809void circs short s short s short s
810void cmovs short s short s short s
811void draws short s short s short s
812void moves short s short s short s
813void pdrs short s short s short s
814void pmvs short s short s short s
815void pnts short s short s short s
816void rdrs short s short s short s
817void rmvs short s short s short s
818void rpdrs short s short s short s
819void rpmvs short s short s short s
820void xfpts short s short s short s
821void curorigin short s short s short s
822void cyclemap short s short s short s
823#
824void patch float s[16] float s[16] float s[16]
825void splf long s float s[3*arg1] short s[arg1]
826void splf2 long s float s[2*arg1] short s[arg1]
827void splfi long s long s[3*arg1] short s[arg1]
828void splf2i long s long s[2*arg1] short s[arg1]
829void splfs long s short s[3*arg1] short s[arg1]
830void splf2s long s short s[2*arg1] short s[arg1]
831void defpattern short s short s short s[arg2*arg2/16]
832#
833void rpatch float s[16] float s[16] float s[16] float s[16]
834#
835# routines that send 4 floats
836#
837void ortho2 float s float s float s float s
838void rect float s float s float s float s
839void rectf float s float s float s float s
840void xfpt4 float s float s float s float s
841#
842void textport short s short s short s short s
843void mapcolor short s short s short s short s
844void scrmask short s short s short s short s
845void setvaluator short s short s short s short s
846void viewport short s short s short s short s
847void shaderange short s short s short s short s
848void xfpt4s short s short s short s short s
849void rectfi long s long s long s long s
850void recti long s long s long s long s
851void xfpt4i long s long s long s long s
852void prefposition long s long s long s long s
853#
854void arc float s float s float s short s short s
855void arcf float s float s float s short s short s
856void arcfi long s long s long s short s short s
857void arci long s long s long s short s short s
858#
859void bbox2 short s short s float s float s float s float s
860void bbox2i short s short s long s long s long s long s
861void bbox2s short s short s short s short s short s short s
862void blink short s short s short s short s short s
863void ortho float s float s float s float s float s float s
864void window float s float s float s float s float s float s
865void lookat float s float s float s float s float s float s short s
866#
867void perspective short s float s float s float s
868void polarview float s short s short s short s
869# XXX getichararray not supported
870#void writeRGB short s char s[arg1] char s[arg1] char s[arg1]
871#
872void arcfs short s short s short s short s short s
873void arcs short s short s short s short s short s
874void rectcopy short s short s short s short s short s short s
875void RGBcursor short s short s short s short s short s short s short s
876#
877long getbutton short s
878long getcmmode
879long getlsbackup
880long getresetls
881long getdcm
882long getzbuffer
883long ismex
884long isobj long s
885long isqueued short s
886long istag long s
887#
888long genobj
889long gentag
890long getbuffer
891long getcolor
892long getdisplaymode
893long getfont
894long getheight
895long gethitcode
896long getlstyle
897long getlwidth
898long getmap
899long getplanes
900long getwritemask
901long qtest
902long getlsrepeat
903long getmonitor
904long getopenobj
905long getpattern
906long winget
907long winattach
908long getothermonitor
909long newpup
910#
911long getvaluator short s
912void winset long s
913long dopup long s
914void getdepth short r short r
915void getcpos short r short r
916void getsize long r long r
917void getorigin long r long r
918void getviewport short r short r short r short r
919void gettp short r short r short r short r
920void getgpos float r float r float r float r
921void winposition long s long s long s long s
922void gRGBcolor short r short r short r
923void gRGBmask short r short r short r
924void getscrmask short r short r short r short r
925void gRGBcursor short r short r short r short r short r short r short r short r long *
926void getmcolor short s short r short r short r
927void mapw long s short s short s float r float r float r float r float r float r
928void mapw2 long s short s short s float r float r
929void defrasterfont short s short s short s Fontchar s[arg3] short s short s[4*arg5]
930long qread short r
931void getcursor short r short r short r long r
932#
933# For these we receive arrays of stuff
934#
935void getdev long s short s[arg1] short r[arg1]
936#XXX not generated correctly yet
937#void getmatrix float r[16]
938long readpixels short s short r[retval]
939long readRGB short s char r[retval] char r[retval] char r[retval]
940long blkqread short s short r[arg1]
941#
942# New 4D routines
943#
944void cmode
945void concave long s
946void curstype long s
947void drawmode long s
948void gammaramp short s[256] short s[256] short s[256]
949long getbackface
950long getdescender
951long getdrawmode
952long getmmode
953long getsm
954long getvideo long s
955void imakebackground
956void lmbind short s short s
957void lmdef long s long s long s float s[arg3]
958void mmode long s
959void normal float s[3]
960void overlay long s
961void RGBrange short s short s short s short s short s short s short s short s
962void setvideo long s long s
963void shademodel long s
964void underlay long s
965#
966# New Personal Iris/GT Routines
967#
968void bgnclosedline
969void bgnline
970void bgnpoint
971void bgnpolygon
972void bgnsurface
973void bgntmesh
974void bgntrim
975void endclosedline
976void endline
977void endpoint
978void endpolygon
979void endsurface
980void endtmesh
981void endtrim
982void blendfunction long s long s
983void c3f float s[3]
984void c3i long s[3]
985void c3s short s[3]
986void c4f float s[4]
987void c4i long s[4]
988void c4s short s[4]
989void colorf float s
990void cpack long s
991void czclear long s long s
992void dglclose long s
993long dglopen char *s long s
994long getgdesc long s
995void getnurbsproperty long s float r
996void glcompat long s long s
997void iconsize long s long s
998void icontitle char *s
999void lRGBrange short s short s short s short s short s short s long s long s
1000void linesmooth long s
1001void lmcolor long s
1002void logicop long s
1003long lrectread short s short s short s short s long r[retval]
1004void lrectwrite short s short s short s short s long s[(arg2-arg1+1)*(arg4-arg3+1)]
1005long rectread short s short s short s short s short r[retval]
1006void rectwrite short s short s short s short s short s[(arg2-arg1+1)*(arg4-arg3+1)]
1007void lsetdepth long s long s
1008void lshaderange short s short s long s long s
1009void n3f float s[3]
1010void noborder
1011void pntsmooth long s
1012void readsource long s
1013void rectzoom float s float s
1014void sbox float s float s float s float s
1015void sboxi long s long s long s long s
1016void sboxs short s short s short s short s
1017void sboxf float s float s float s float s
1018void sboxfi long s long s long s long s
1019void sboxfs short s short s short s short s
1020void setnurbsproperty long s float s
1021void setpup long s long s long s
1022void smoothline long s
1023void subpixel long s
1024void swaptmesh
1025long swinopen long s
1026void v2f float s[2]
1027void v2i long s[2]
1028void v2s short s[2]
1029void v3f float s[3]
1030void v3i long s[3]
1031void v3s short s[3]
1032void v4f float s[4]
1033void v4i long s[4]
1034void v4s short s[4]
1035void videocmd long s
1036long windepth long s
1037void wmpack long s
1038void zdraw long s
1039void zfunction long s
1040void zsource long s
1041void zwritemask long s
1042#
1043# uses doubles
1044#
1045void v2d double s[2]
1046void v3d double s[3]
1047void v4d double s[4]