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