draw3.c

0000/**************************************
0001  draw3.c IPC GL-functions
0002**************************************/
0003#include <stdio.h>
0004#include <stdlib.h>
0005#include <math.h>
0006#include <sys/types.h>
0007#include <sys/ipc.h>
0008#include <sys/shm.h>
0009#include <sys/sem.h>
0010#include "draw2.h"
0011#include <string.h>
0012
0013extern int semid; /* semaphore identifier */
0014extern struct sembuf sb;
0015extern void *shmx;
0016
0017extern char *outbuf; // output buffer in shared memory
0018extern int outptr; // current pointer in outbuf
0019extern int outmax; // buffer capacity
0020
0021
0022int sendMsg()
0023{
0024  sb.sem_num=5; /* call from a function program */
0025  sb.sem_op=1;
0026  semop(semid,&sb,1);
0027  sb.sem_num=4; /* wake up f006 */
0028  sb.sem_op=1;
0029  semop(semid,&sb,1);
0030  sb.sem_num=6; /* wait */
0031  sb.sem_op=-1;
0032  sb.sem_flg=0;
0033  semop(semid,&sb,1);
0034  sb.sem_num=7; /* test if error */
0035  sb.sem_op=0;
0036  sb.sem_flg=IPC_NOWAIT;
0037  if(semop(semid,&sb,1)!=0){
0038    sb.sem_num=7;
0039    sb.sem_op=-1;
0040    sb.sem_flg=0;
0041    semop(semid,&sb,1); /* wait */
0042    return 1;
0043  }
0044  return 0;
0045}
0046 
0047int glFrustum(double l,double r,double b,double t,double n,double f)
0048{
0049  *(double *)((int*)shmx+1)=l;
0050  *((double *)((int*)shmx+1)+1)=r;
0051  *((double *)((int*)shmx+1)+2)=b;
0052  *((double *)((int*)shmx+1)+3)=t;
0053  *((double *)((int*)shmx+1)+4)=n;
0054  *((double *)((int*)shmx+1)+5)=f;
0055  *(int*)shmx=0;
0056  sendMsg();
0057}
0058
0059int glTranslatef(double x,double y,double z)
0060{
0061  *(double *)((int*)shmx+1)=x;
0062  *((double *)((int*)shmx+1)+1)=y;
0063  *((double *)((int*)shmx+1)+2)=z;
0064  *(int*)shmx=1;
0065  sendMsg();
0066}
0067
0068int glRotatef(double ang,double x,double y,double z)
0069{
0070  *(double *)((int*)shmx+1)=ang;
0071  *((double *)((int*)shmx+1)+1)=x;
0072  *((double *)((int*)shmx+1)+2)=y;
0073  *((double *)((int*)shmx+1)+3)=z;
0074  *(int*)shmx=2;
0075  sendMsg();
0076}
0077
0078int glViewport(int x0, int y0, int wid, int hei)
0079{
0080  *((int*)shmx +1)=x0;
0081  *((int*)shmx +2)=y0;
0082  *((int*)shmx +3)=wid;
0083  *((int*)shmx +4)=hei;
0084  *(int*)shmx=3;
0085  sendMsg();
0086}
0087
0088int glBegin(int p)
0089{
0090  *((int*)shmx +1)=p; // primitives
0091  *(int*)shmx=4;
0092  sendMsg();
0093}
0094
0095int glColor3f(double r, double g, double b)
0096{
0097  *(double *)((int*)shmx+1)=r;
0098  *((double *)((int*)shmx+1)+1)=g;
0099  *((double *)((int*)shmx+1)+2)=b;
0100  *(int*)shmx=5;
0101  sendMsg();
0102}
0103
0104int glVertex3f(double x,double y,double z)
0105{
0106  *(double *)((int*)shmx+1)=x;
0107  *((double *)((int*)shmx+1)+1)=y;
0108  *((double *)((int*)shmx+1)+2)=z;
0109  *(int*)shmx=6;
0110  sendMsg();
0111}
0112
0113int glEnd()
0114{
0115  *(int*)shmx=7;
0116  sendMsg();
0117}
0118
0119int glVertex2d(double x,double y)
0120{
0121  *(double *)((int*)shmx+1)=x;
0122  *((double *)((int*)shmx+1)+1)=y;
0123  *(int*)shmx=8;
0124  sendMsg();
0125}
0126
0127int glVertex3d(double x,double y,double z)
0128{
0129  *(double *)((int*)shmx+1)=x;
0130  *((double *)((int*)shmx+1)+1)=y;
0131  *((double *)((int*)shmx+1)+2)=z;
0132  *(int*)shmx=9;
0133  sendMsg();
0134}
0135
0136int glVertex4d(double x,double y,double z,double w)
0137{
0138  *(double *)((int*)shmx+1)=x;
0139  *((double *)((int*)shmx+1)+1)=y;
0140  *((double *)((int*)shmx+1)+2)=z;
0141  *((double *)((int*)shmx+1)+3)=w;
0142  *(int*)shmx=10;
0143  sendMsg();
0144}
0145
0146int glRectd(double x1,double y1,double x2,double y2)
0147{
0148  *(double *)((int*)shmx+1)=x1;
0149  *((double *)((int*)shmx+1)+1)=y1;
0150  *((double *)((int*)shmx+1)+2)=x2;
0151  *((double *)((int*)shmx+1)+3)=y2;
0152  *(int*)shmx=11;
0153  sendMsg();
0154}
0155
0156int glEdgeFlag(int flg)
0157{
0158  *((int*)shmx+1)=flg;
0159  *(int*)shmx=12;
0160  sendMsg();
0161}
0162
0163int glRotated(double ang,double x,double y,double z)
0164{
0165  *(double *)((int*)shmx+1)=ang;
0166  *((double *)((int*)shmx+1)+1)=x;
0167  *((double *)((int*)shmx+1)+2)=y;
0168  *((double *)((int*)shmx+1)+3)=z;
0169  *(int*)shmx=13;
0170  sendMsg();
0171}
0172
0173int glTranslated(double x,double y,double z)
0174{
0175  *(double *)((int*)shmx+1)=x;
0176  *((double *)((int*)shmx+1)+1)=y;
0177  *((double *)((int*)shmx+1)+2)=z;
0178  *(int*)shmx=14;
0179  sendMsg();
0180}
0181
0182int glScaled(double x,double y,double z)
0183{
0184  *(double *)((int*)shmx+1)=x;
0185  *((double *)((int*)shmx+1)+1)=y;
0186  *((double *)((int*)shmx+1)+2)=z;
0187  *(int*)shmx=15;
0188  sendMsg();
0189}
0190
0191/* 16 glMultMatrixd(double *m) */
0192
0193int glOrtho(double l,double r,double b,double t,double n,double f)
0194{
0195  *(double *)((int*)shmx+1)=l;
0196  *((double *)((int*)shmx+1)+1)=r;
0197  *((double *)((int*)shmx+1)+2)=b;
0198  *((double *)((int*)shmx+1)+3)=t;
0199  *((double *)((int*)shmx+1)+4)=n;
0200  *((double *)((int*)shmx+1)+5)=f;
0201  *(int*)shmx=17;
0202  sendMsg();
0203}
0204
0205/* 18 glLoadMatrixd(double *m) */
0206
0207int glLoadIdentity()
0208{
0209  *(int*)shmx=19;
0210  sendMsg();
0211}
0212
0213int glMatrixMode(int m)
0214{
0215  *((int*)shmx +1)=m;
0216  *(int*)shmx=20;
0217  sendMsg();
0218}
0219
0220int glPushMatrix()
0221{
0222  *(int*)shmx=21;
0223  sendMsg();
0224}
0225
0226int glPopMatrix()
0227{
0228  *(int*)shmx=22;
0229  sendMsg();
0230}
0231
0232/* 23 glDepthRange(double near,double far) */
0233
0234int glColor4f(double r,double g,double b,double a)
0235{
0236  *(double *)((int*)shmx+1)=r;
0237  *((double *)((int*)shmx+1)+1)=g;
0238  *((double *)((int*)shmx+1)+2)=b;
0239  *((double *)((int*)shmx+1)+3)=a;
0240  *(int*)shmx=24;
0241  sendMsg();
0242}
0243
0244int glNormal3d(double x,double y,double z)
0245{
0246  *(double *)((int*)shmx+1)=x;
0247  *((double *)((int*)shmx+1)+1)=y;
0248  *((double *)((int*)shmx+1)+2)=z;
0249  *(int*)shmx=25;
0250  sendMsg();
0251}
0252
0253int glLightfv(int light,int pname,double *param)
0254{
0255  int i,j;
0256  *((int *)shmx+1)=light;
0257  *((int *)shmx+2)=pname;
0258  switch(pname){
0259  case 0x1200: // GL_AMBIENT
0260  case 0x1201: // GL_DIFFUSE
0261  case 0x1202: // GL_SPECULAR
0262  case 0x1203: // GL_POSITION
0263    j=4;
0264    break;
0265  case 0x1204: // GL_SPOT_DIRECTION
0266    j=3;
0267    break;
0268  default:
0269    j=1;
0270    break;
0271  }
0272  for(i=0;i<j;i++) *((float *)((int *)shmx+3)+i)=param[i];
0273  *(int*)shmx=26;
0274  sendMsg();
0275}
0276
0277int glMaterialfv(int face,int pname,double *param)
0278{
0279  int i,j;
0280  *((int *)shmx+1)=face;
0281  *((int *)shmx+2)=pname;
0282  switch(pname){
0283  case 0x1200: // GL_AMBIENT
0284  case 0x1201: // GL_DIFFUSE
0285  case 0x1202: // GL_SPECULAR
0286  case 0x1600: // GL_EMISSION
0287  case 0x1602: // GL_AMBIENT_AND_DIFFUSE
0288    j=4;
0289    break;
0290  case 0x1603: // GL_COLOR_INDEXES
0291    j=3;
0292    break;
0293  default:
0294    j=1;
0295    break;
0296  }
0297  for(i=0;i<j;i++) *((float *)((int *)shmx+3)+i)=param[i];
0298  *(int*)shmx=27;
0299  sendMsg();
0300}
0301
0302/* 28 glLightModelf(int pname,double param) */
0303
0304int glShadeModel(int m)
0305{
0306  *((int*)shmx +1)=m;
0307  *(int*)shmx=29;
0308  sendMsg();
0309}
0310
0311int glFrontFace(int dir)
0312{
0313  *((int*)shmx +1)=dir;
0314  *(int*)shmx=30;
0315  sendMsg();
0316}
0317
0318int glColorMaterial(int face,int mode)
0319{
0320  *((int*)shmx +1)=face;
0321  *((int*)shmx +2)=mode;
0322  *(int*)shmx=31;
0323  sendMsg();
0324}
0325
0326/* 32 glGetLightfv(int light,int pname,double *params) */
0327/* 33 glGetMaterialfv(int face,int pname,double *params) */
0328
0329int glClipPlane(int plane,double *equation)
0330{
0331  int i;
0332  *((int*)shmx +1)=plane;
0333  for(i=0;i<4;i++) ((double *)((char *)shmx+8))[i]=equation[i];
0334  *(int*)shmx=34;
0335  sendMsg();
0336}
0337
0338/* 35 glGetClipPlane(int plane,double *equation) */
0339
0340int glRasterPos2d(double x,double y)
0341{
0342  *(double *)((int*)shmx +1)=x;
0343  *(double *)((int*)shmx +3)=y;
0344  *(int*)shmx=36;
0345  sendMsg();
0346}
0347
0348
0349/* 37 glRasterPos3d(double x,double y,double z) */
0350/* 38 glRasterPos4d(double x,double y,double z,double w) */
0351
0352int glBitmap(int width,int height,double xorig,double yorig,double xmove,double ymove,int *bitmap)
0353{
0354  int n,i;
0355  *((int*)shmx +1)=width;
0356  *((int*)shmx +2)=height;
0357  *(double *)((int*)shmx +3)=xorig;
0358  *(double *)((int*)shmx +5)=yorig;
0359  *(double *)((int*)shmx +7)=xmove;
0360  *(double *)((int*)shmx +9)=ymove;
0361  n=(width%8)? width/8+1 : width/8;
0362  n*=height;
0363  for(i=0;i<n;i++) ((unsigned char *)((int *)shmx+11))[i]=bitmap[i];
0364  *(int*)shmx=39;
0365  sendMsg();
0366}
0367
0368/* 40 glPointSize(double size) */
0369int glLineWidth(double width)
0370{
0371  *(double *)((int *)shmx+1)=width;
0372  *(int*)shmx=41;
0373  sendMsg();
0374}
0375
0376int glLineStipple(int factor,int pattern)
0377{
0378  *((int*)shmx +1)=factor;
0379  *((int*)shmx +2)=pattern;
0380  *(int*)shmx=42;
0381  sendMsg();
0382}
0383
0384int glPolygonStipple(int n,char *mask)
0385{
0386  int i;
0387  *(int*)shmx=43;
0388  for(i=0;i<n;i++) *((char *)shmx+4+i)=mask[i];
0389  sendMsg();
0390}
0391/* 44 glGetPolygonStipple(char *mask) */
0392
0393int glCullFace(int mode)
0394{
0395  *(int *)((int *)shmx+1)=mode;
0396  *(int*)shmx=45;
0397  sendMsg();
0398}
0399
0400/* 46 glPolygonMode(int face,int mode) */
0401/* 47 glReadBuffer(int mode) */
0402/* 48 glReadPixels(int x,int y,int width,int height,int format,int type,char *pixels) */
0403/* 49 glDrawPixels(int width,int height,int format,int type,char *pixels) */
0404int glDrawPixels(int width,int height,int format,int type,char *pixels)
0405{
0406  *((int*)shmx +1)=width;
0407  *((int*)shmx +2)=height;
0408  *((int*)shmx +3)=format;
0409  *((int*)shmx +4)=type;
0410  strcpy((char *)((int*)shmx +5),pixels);
0411  *(int*)shmx=49;
0412  sendMsg();
0413}
0414
0415int glCopyPixels(int x,int y,int width,int height,int type)
0416{
0417  *((int*)shmx +1)=x;
0418  *((int*)shmx +2)=y;
0419  *((int*)shmx +3)=width;
0420  *((int*)shmx +4)=height;
0421  *((int*)shmx +5)=type;
0422  *(int*)shmx=50;
0423  sendMsg();
0424}
0425
0426int glPixelStorei(int pname,int param)
0427{
0428  *((int*)shmx +1)=pname;
0429  *((int*)shmx +2)=param;
0430  *(int*)shmx=51;
0431  sendMsg();
0432}
0433
0434/* 52 glPixelTransfer{if} (GLenum pname, TYPE param)*/
0435/* 53 glPixelMap{f usui}v (GLenum map, GLint mapsize, const TYPE *values)*/
0436/* 54 glGetPixelMap{f usui}v (GLenum map, TYPE *values)*/
0437/* 55 glPixelZoom (GLfloat xfactor, GLfloat yfactor)*/
0438int glPixelZoom (double xfactor,double yfactor)
0439{
0440  *(float *)((int*)shmx +1)=xfactor;
0441  *(float *)((int*)shmx +2)=yfactor;
0442  *(int*)shmx=55;
0443  sendMsg();
0444}
0445int glTexParameteri(int target,int pname,int param)
0446{
0447  *((int*)shmx +1)=target;
0448  *((int*)shmx +2)=pname;
0449  *((int*)shmx +3)=param;
0450  *(int*)shmx=56;
0451  sendMsg();
0452}
0453
0454int glTexEnvf(int target,int pname,double param)
0455{
0456  *((int*)shmx +1)=target;
0457  *((int*)shmx +2)=pname;
0458  *(float *)((int*)shmx +3)=param;
0459  *(int*)shmx=57;
0460  sendMsg();
0461}
0462
0463/* 58 glTexCoord1{sifd}{v} (TYPE s)*/
0464
0465int glTexCoord2d(double s,double t)
0466{
0467  *(double *)((int*)shmx +1)=s;
0468  *(double *)((int*)shmx +3)=t;
0469  *(int*)shmx=59;
0470  sendMsg();
0471}
0472 
0473/* 60 glTexCoord3{sifd}{v} (TYPE s, TYPE t, TYPE r)*/
0474/* 61 glTexCoord4{sifd}{v} (TYPE s, TYPE t, TYPE r, TYPE q)*/
0475/* 62 glTexGen{ifd}{v} (GLenum coord, GLenum pname, TYPE param)*/
0476int glTexGendv(int coord,int pname,double * param)
0477{
0478  int i;
0479  *((int*)shmx +1)=coord;
0480  *((int*)shmx +2)=pname;
0481  for(i=0;i<4;i++) ((double *)((int *)shmx+3))[i]=param[i];
0482  *(int*)shmx=62;
0483  sendMsg();
0484}
0485
0486/* 63 glTexImage1D (GLenum target, GLint level, GLint components, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)*/
0487int glTexImage1D(int target,int level,int components,int width,int border,int format,int type,char *pixels)
0488{
0489  *((int*)shmx +1)=target;
0490  *((int*)shmx +2)=level;
0491  *((int*)shmx +3)=components;
0492  *((int*)shmx +4)=width;
0493  *((int*)shmx +5)=border;
0494  *((int*)shmx +6)=format;
0495  *((int*)shmx +7)=type;
0496  strcpy((char *)((int*)shmx +8),pixels);
0497  *(int*)shmx=63;
0498  sendMsg();
0499  strcpy(pixels,(char *)((int*)shmx +8));
0500}
0501/* 64 glTexImage2D (GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)*/
0502int glTexImage2D(int target,int level,int components,int width,int height,int border,int format,int type,char *pixels)
0503{
0504  *((int*)shmx +1)=target;
0505  *((int*)shmx +2)=level;
0506  *((int*)shmx +3)=components;
0507  *((int*)shmx +4)=width;
0508  *((int*)shmx +5)=height;
0509  *((int*)shmx +6)=border;
0510  *((int*)shmx +7)=format;
0511  *((int*)shmx +8)=type;
0512  strcpy((char *)((int*)shmx +9),pixels);
0513  *(int*)shmx=64;
0514  sendMsg();
0515  strcpy(pixels,(char *)((int*)shmx +9));
0516}
0517
0518/* 65 glGetTexEnv{if}v (GLenum target, GLenum pname, TYPE *params)*/
0519/* 66 glGetTexGen{ifd}v (GLenum coord, GLenum pname, TYPE *params)*/
0520/* 67 glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)*/
0521/* 68 glGetTexLevelParameter{if}v (GLenum target, GLint level, GLenum pname, TYPE *params)*/
0522/* 69 glGetTexParameter{if}v (GLenum target, GLenum pname, TYPE *params)*/
0523
0524int glFogi(int pname,int param)
0525{
0526  *((int*)shmx +1)=pname;
0527  *((int*)shmx +2)=param;
0528  *(int*)shmx=70;
0529  sendMsg();
0530}
0531
0532/* 71 glScissor (GLint x, GLint y, GLsizei width, GLsizei height)*/
0533/* 72 glAlphaFunc (GLenum func, GLclampf ref)*/
0534/* 73 glStencilFunc (GLenum func, GLint ref, GLuint mask)*/
0535/* 74 glStencilOp (GLenum fail, GLenum pass, GLenum zpass)*/
0536/* 75 glDepthFunc (GLenum func)*/
0537int glBlendFunc (int sfactor,int dfactor)
0538{
0539  *((int*)shmx +1)=sfactor;
0540  *((int*)shmx +2)=dfactor;
0541  *(int*)shmx=76;
0542  sendMsg();
0543}
0544
0545/* 77 glLogicOp (GLenum opcode)*/
0546
0547int glClear(int m)
0548{
0549  *((int*)shmx +1)=m;
0550  *(int*)shmx=78;
0551  sendMsg();
0552}
0553/* 79 glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)*/
0554
0555int glClearColor(double r, double g, double b,double a)
0556{
0557  *(double *)((int*)shmx+1)=r;
0558  *((double *)((int*)shmx+1)+1)=g;
0559  *((double *)((int*)shmx+1)+2)=b;
0560  *((double *)((int*)shmx+1)+3)=a;
0561  *(int*)shmx=80;
0562  sendMsg();
0563}
0564/* 81 glClearDepth (GLclampd depth)*/
0565/* 82 glClearIndex (GLfloat c)*/
0566/* 83 glClearStencil (GLint s)*/
0567/* 84 glDrawBuffer (GLenum mode)*/
0568/* 85 glIndexMask (GLuint mask)*/
0569/* 86 glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)*/
0570
0571int glDepthMask(int flag)
0572{
0573  *((int*)shmx +1)=flag;
0574  *(int*)shmx=87;
0575  sendMsg();
0576}
0577
0578/* 88 glStencilMask (GLuint mask)*/
0579/* 89 glAccum (GLenum op, GLfloat value)*/
0580/* 90 glMap1{fd} (GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order, const TYPE *points)*/
0581/* 91 glMap2{fd} (GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder, TYPE v1, TYPE v2, GLint vstride,GLint vorder, const TYPE *points)*/
0582int glMap2d(int target,double u1,double u2,int ustride,int uorder,double v1,double v2,int vstride,int vorder,double *points)
0583{
0584  int i,n;
0585  n=uorder*vorder;
0586  switch(target){
0587  case 0x0DB4: // GL_MAP2_TEXTURE_COORD_2
0588    n*=2;
0589    break;
0590  case 0x0DB7: // GL_MAP2_VERTEX_3
0591    n*=3;
0592    break;
0593  default:
0594    n*=3;
0595    break;
0596  }
0597  for(i=0;i<n;i++) *((double *)outbuf+i)=points[i];
0598  *((int*)shmx +1)=target;
0599  *(double *)((int *)shmx+2)=u1;
0600  *(double *)((int *)shmx+4)=u2;
0601  *((int *)shmx+6)=ustride;
0602  *((int *)shmx+7)=uorder;
0603  *(double *)((int *)shmx+8)=v1;
0604  *(double *)((int *)shmx+10)=v2;
0605  *((int *)shmx+12)=vstride;
0606  *((int *)shmx+13)=vorder;
0607  *(int*)shmx=91;
0608  sendMsg();
0609}
0610/* 92 glMapGrid1{fd} (GLint n, TYPE u1, TYPE u2)*/
0611/* 93 glMapGrid2{fd} (GLint un, TYPE u1, TYPE u2, GLint vn, TYPE v1, TYPE v2)*/
0612int glMapGrid2d(int un,double u1,double u2,int vn,double v1,double v2){
0613  *((int*)shmx +1)=un;
0614  *(double *)((int *)shmx+2)=u1;
0615  *(double *)((int *)shmx+4)=u2;
0616  *((int*)shmx +6)=vn;
0617  *(double *)((int *)shmx+7)=v1;
0618  *(double *)((int *)shmx+9)=v2;
0619  *(int*)shmx=93;
0620  sendMsg();
0621}
0622
0623/* 94 glEvalMesh1 (GLenum mode, GLint i1, GLint i2)*/
0624/* 95 glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)*/
0625int glEvalMesh2(int mode,int i1,int i2,int j1,int j2)
0626{
0627  *((int*)shmx +1)=mode;
0628  *((int*)shmx +2)=i1;
0629  *((int*)shmx +3)=i2;
0630  *((int*)shmx +4)=j1;
0631  *((int*)shmx +5)=j2;
0632  *(int*)shmx=95;
0633  sendMsg();
0634}
0635
0636/* 96 glEvalPoint1 (GLint i)*/
0637/* 97 glEvalPoint2 (GLint i, GLint j)*/
0638/* 98 glEvalCoord1{fd}{v} (TYPE u)*/
0639/* 99 glEvalCoord2{fd}{v} (TYPE u, TYPE v)*/
0640/* 100 glGetMap{idf}v (GLenum target, GLenum query, TYPE *v)*/
0641/* 101 GLint glRenderMode (GLenum mode)*/
0642/* 102 glSelectBuffer (GLsizei size, GLuint *buffer)*/
0643/* 103 glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer)*/
0644/* 104 glPassThrough (GLfloat token)*/
0645/* 105 glInitNames (void)*/
0646/* 106 glLoadName (GLuint name)*/
0647/* 107 glPushName (GLuint name)*/
0648/* 108 glPopName (void)*/
0649
0650int glNewList (int list,int mode)
0651{
0652  *((int*)shmx +1)=list;
0653  *((int*)shmx +2)=mode;
0654  *(int*)shmx=109;
0655  sendMsg();
0656}
0657
0658int glEndList (void)
0659{
0660  *(int*)shmx=110;
0661  sendMsg();
0662}
0663/* 111 glDeleteLists (GLuint list, GLsizei range)*/
0664int glCallList(int list)
0665{
0666  *((int*)shmx +1)=list;
0667  *(int*)shmx=112;
0668  sendMsg();
0669}
0670
0671/* 113 glCallLists (GLsizei n, GLenum type, const GLvoid *lists)*/
0672int glCallLists (int n,int type,int *lists)
0673{
0674  int i;
0675  if(type!=0x1400) return -1;
0676  *((int*)shmx+1)=n;
0677  *((int*)shmx+2)=type;
0678  for(i=0;i<n;i++) ((unsigned char *)shmx+12)[i]=lists[i];
0679  *(int*)shmx=113;
0680  sendMsg();
0681  return 0;
0682}
0683
0684int glGenLists(int range)
0685{
0686  *((int*)shmx +1)=range;
0687  *(int*)shmx=114;
0688  sendMsg();
0689  return *((int*)shmx+1);
0690}
0691
0692/* 115 GLboolean glIsList (GLuint list)*/
0693
0694int glListBase(int base)
0695{
0696  *((int*)shmx +1)=base;
0697  *(int*)shmx=116;
0698  sendMsg();
0699}
0700
0701int glEnable (int cap)
0702{
0703  *((int*)shmx +1)=cap;
0704  *(int*)shmx=117;
0705  sendMsg();
0706}
0707
0708int glDisable (int cap)
0709{
0710  *((int*)shmx +1)=cap;
0711  *(int*)shmx=118;
0712  sendMsg();
0713}
0714/* 119 GLboolean glIsEnabled (GLenum cap)*/
0715/* 120 glFinish (void)*/
0716/* 121 glFlush (void)*/
0717
0718int glHint (int target,int mode)
0719{
0720  *((int*)shmx +1)=target;
0721  *((int*)shmx +2)=mode;
0722  *(int*)shmx=122;
0723  sendMsg();
0724}
0725
0726/* 123 GLenum glGetError (void)*/
0727/* 124 const GLubyte * glGetString (GLenum name)*/
0728/* 125 glGetBooleanv (GLenum pname, GLboolean *params)*/
0729/* 126 glGetDoublev (GLenum pname, GLdouble *params)*/
0730int glGetDoublev (int pname,int n,double *params)
0731{
0732  int i;
0733  *((int *)shmx+1)=pname;
0734  *(int*)shmx=122;
0735  sendMsg();
0736  for(i=0;i<n;i++) params[i]=*((double *)shmx+1+i);
0737}
0738
0739/* 127 glGetIntegerv (GLenum pname, GLint *params)*/
0740/* 128 glPushAttrib (GLbitfield mask)*/
0741int glPushAttrib (int mask)
0742{
0743  *((int*)shmx +1)=mask;
0744  *(int*)shmx=128;
0745  sendMsg();
0746}
0747
0748/* 129 glPopAttrib (void)*/
0749int glPopAttrib (void)
0750{
0751  *(int*)shmx=129;
0752  sendMsg();
0753}
0754/* 130 int gluScaleImage (GLenum format, GLint widthin, GLint heightin,GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout)*/
0755/* 131 int gluBuild1DMipmaps (GLenum target, GLint components, GLint width, GLenum format, GLenum type, void *data)*/
0756/* 132 int gluBuild2DMipmaps (GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, void *data)*/
0757
0758int gluOrtho2D(double left,double right,double bottom,double top)
0759{
0760  *(double *)((int*)shmx+1)=left;
0761  *((double *)((int*)shmx+1)+1)=right;
0762  *((double *)((int*)shmx+1)+2)=bottom;
0763  *((double *)((int*)shmx+1)+3)=top;
0764  *(int*)shmx=133;
0765  sendMsg();
0766}
0767
0768int gluPerspective(double fovy,double aspect,double zNear,double zFar)
0769{
0770  *(double *)((int*)shmx+1)=fovy;
0771  *((double *)((int*)shmx+1)+1)=aspect;
0772  *((double *)((int*)shmx+1)+2)=zNear;
0773  *((double *)((int*)shmx+1)+3)=zFar;
0774  *(int*)shmx=134;
0775  sendMsg();
0776}
0777
0778int gluLookAt(double eyex,double eyey,double eyez,double centerx,double centery,double centerz,double upx,double upy,double upz)
0779{
0780  *(double *)((int*)shmx+1)=eyex;
0781  *((double *)((int*)shmx+1)+1)=eyey;
0782  *((double *)((int*)shmx+1)+2)=eyez;
0783  *((double *)((int*)shmx+1)+3)=centerx;
0784  *((double *)((int*)shmx+1)+4)=centery;
0785  *((double *)((int*)shmx+1)+5)=centerz;
0786  *((double *)((int*)shmx+1)+6)=upx;
0787  *((double *)((int*)shmx+1)+7)=upy;
0788  *((double *)((int*)shmx+1)+8)=upz;
0789  *(int*)shmx=136;
0790  sendMsg();
0791}
0792/* 139 GLUtriangulatorObj* gluNewTess (void)*/
0793/* 140 gluTessCallback (GLUtriangulatorObj *tobj, GLenum which, void (*fn)())*/
0794/* 141 gluDeleteTess (GLUtriangulatorObj *tobj)*/
0795/* 142 gluBeginPolygon (GLUtriangulatorObj *tobj)*/
0796/* 143 gluEndPolygon (GLUtriangulatorObj *tobj)*/
0797/* 144 gluNextContour (GLUtriangulatorObj *tobj, GLenum type)*/
0798/* 145 gluTessVertex (GLUtriangulatorObj *tobj, GLdouble v[3], void *data)*/
0799/* 146 GLUquadricObj* gluNewQuadric (void)*/
0800/* 147 gluDeleteQuadric (GLUquadricObj *state)*/
0801/* 148 gluQuadricCallback (GLUquadricObj *qobj, GLenum which, void (*fn)())*/
0802/* 149 gluQuadricNormals (GLUquadricObj *quadObject, GLenum normals)*/
0803/* 150 gluQuadricTexture (GLUquadricObj *quadObject, GLboolean textureCoords)*/
0804/* 151 gluQuadricOrientation (GLUquadricObj *quadObject, GLenum orientation)*/
0805/* 152 gluQuadricDrawStyle (GLUquadricObj *quadObject, GLenum drawStyle)*/
0806/* 153 gluCylinder (GLUquadricObj *qobj, GLdouble baseRadius,GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)*/
0807/* 154 gluDisk (GLUquadricObj *qobj, GLdouble innerRadius,GLdouble outerRadius, GLint slices, GLint loops)*/
0808/* 155 gluPartialDisk (GLUquadricObj *qobj, GLdouble innerRadius,GLdouble outerRadius, GLint slices, GLint loops,GLdouble startAngle, GLdouble sweepAngle)*/
0809/* 156 gluSphere (GLUquadricObj *qobj, GLdouble radius, GLint slices,GLint stacks)*/
0810/* 157 GLUnurbsObj* gluNewNurbsRenderer (void)*/
0811/* 158 gluDeleteNurbsRenderer (GLUnurbsObj *nobj)*/
0812/* 159 gluNurbsCallback (GLUnurbsObj *nobj, GLenum which, void (*fn)())*/
0813/* 160 gluBeginCurve (GLUnurbsObj *nobj)*/
0814/* 161 gluEndCurve (GLUnurbsObj *nobj)*/
0815/* 162 gluNurbsCurve (GLUnurbsObj *nobj, GLint nknots, GLfloat *knot, GLint stride, GLfloat *ctlarray, GLint order, GLenum type)*/
0816/* 163 gluBeginSurface (GLUnurbsObj *nobj);void gluEndSurface (GLUnurbsObj *nobj)*/
0817/* 164 gluBeginSurface (GLUnurbsObj *nobj);void gluEndSurface (GLUnurbsObj *nobj)*/
0818/* 165 gluNurbsSurface (GLUnurbsObj *nobj, GLint uknot_count, GLfloat *uknot, GLint vknot_count, GLfloat *vknot, GLint u_stride, GLint v_stride, GLfloat *ctlarray, GLint sorder, GLint torder, GLenum type)*/
0819/* 166 gluBeginTrim (GLUnurbsObj *nobj)*/
0820/* 167 gluEndTrim (GLUnurbsObj *nobj)*/
0821/* 168 gluPwlCurve (GLUnurbsObj *nobj, GLint count, GLfloat *array, GLint stride, GLenum type)*/
0822/* 169 gluLoadSamplingMatrices (GLUnurbsObj *nobj, const GLfloat modelMatrix[16], const GLfloat projMatrix[16], const GLint viewport[4])*/
0823/* 170 gluNurbsProperty (GLUnurbsObj *nobj, GLenum property, GLfloat value)*/
0824/* 171 gluGetNurbsProperty (GLUnurbsObj *nobj, GLenum property,GLfloat *value)*/
0825/* 172 const GLubyte* gluErrorString (GLenum errorCode)*/
0826
0827int glFogf(int pname,double param)
0828{
0829  *((int*)shmx +1)=pname;
0830  *((float *)((int*)shmx +2))=param;
0831  *(int*)shmx=174;
0832  sendMsg();
0833}
0834
0835int glFogfv(int pname,int n,double *param)
0836{
0837  int i;
0838  *((int*)shmx +1)=pname;
0839  for(i=0;i<n;i++) ((float *)((int*)shmx +2))[i]=param[i];
0840  *(int*)shmx=175;
0841  sendMsg();
0842}
0843
0844int glEnableClientState(int cap)
0845{
0846  *((int*)shmx +1)=cap;
0847  *(int*)shmx=176;
0848  sendMsg();
0849}
0850
0851int glDisableClientState(int cap)
0852{
0853  *((int*)shmx +1)=cap;
0854  *(int*)shmx=177;
0855  sendMsg();
0856}
0857
0858int glVertexPointer(int size,int type,int stride,int n,double *ptr)
0859{
0860  int i,j;
0861  float *fp;
0862  *((int*)shmx +1)=size;
0863  *((int*)shmx +2)=type;
0864  *((int*)shmx +3)=stride;
0865  *((int*)shmx +4)=n;
0866  fp=(float *)outbuf;
0867  j=size*n;
0868  for(i=0;i<j;i++) fp[i]=ptr[i];
0869  *(int*)shmx=178;
0870  sendMsg();
0871}
0872
0873int glColorPointer(int size,int type,int stride,int n,double *ptr )
0874{
0875  int i,j;
0876  float *fp;
0877  *((int*)shmx +1)=size;
0878  *((int*)shmx +2)=type;
0879  *((int*)shmx +3)=stride;
0880  *((int*)shmx +4)=n;
0881  fp=(float *)outbuf;
0882  j=size*n;
0883  for(i=0;i<j;i++) fp[i]=ptr[i];
0884  *(int*)shmx=179;
0885  sendMsg();
0886}
0887
0888glDrawElements(int mode,int count,int type,int *indices)
0889{
0890  int i;
0891  unsigned char *ucp;
0892  *((int*)shmx +1)=mode;
0893  *((int*)shmx +2)=count;
0894  *((int*)shmx +3)=type;
0895  ucp=(unsigned char *)((int *)shmx+4);
0896  for(i=0;i<count;i++) ucp[i]=indices[i];
0897  *(int*)shmx=180;
0898  sendMsg();
0899}
0900
0901glGenTextures(int n,int *textures)
0902{
0903  int i;
0904  *((int *)shmx+1)=n;
0905  *(int *)shmx=181;
0906  sendMsg();
0907  for(i=0;i<n;i++) textures[i]=((int *)shmx+2)[i];
0908}
0909
0910glBindTexture(int target,int texture)
0911{
0912  *((int *)shmx+1)=target;
0913  *((int *)shmx+2)=texture;
0914  *(int *)shmx=182;
0915  sendMsg();
0916}
0917
0918glRasterPos2i(int x,int y)
0919{
0920  *((int *)shmx+1)=x;
0921  *((int *)shmx+2)=y;
0922  *(int *)shmx=183;
0923  sendMsg();
0924}
0925
0926int glTexGeni(int coord,int pname,int param)
0927{
0928  *((int*)shmx +1)=coord;
0929  *((int*)shmx +2)=pname;
0930  *((int*)shmx +3)=param;
0931  *(int*)shmx=184;
0932  sendMsg();
0933}
0934