home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * *
- * grp.c *
- * *
- ******************************************************************************/
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <swis.h>
- #include <os.h>
- #include "GrpLib.h"
-
- void SetMouseArea(int left, int bottom, int right, int top)
- {
- os_regset regs;
- char blk[16];
- int i=0;
-
- blk[i++]=(char) 1; /* define mouse co-ordinate bounding box */
- blk[i++]=(char) (left & 0xFF); blk[i++]=(char) ((left >>8) & 0xFF);
- blk[i++]=(char) (bottom & 0xFF); blk[i++]=(char) ((bottom>>8) & 0xFF);
- blk[i++]=(char) (right & 0xFF); blk[i++]=(char) ((right >>8) & 0xFF);
- blk[i++]=(char) (top & 0xFF); blk[i++]=(char) ((top >>8) & 0xFF);
-
- regs.r[0]=0x15; /* define pointer and mouse parameters */
- regs.r[1]=(int)blk;
- os_swi(OS_Word,®s);
- }
-
- void SetMousePos(int x, int y)
- {
- os_regset regs;
- char blk[16];
- int i=0;
-
- blk[i++]=(char) 3; /* set mouse position */
- blk[i++]=(char) (x & 0xFF); blk[i++]=(char) ((x>>8) & 0xFF);
- blk[i++]=(char) (y & 0xFF); blk[i++]=(char) ((y>>8) & 0xFF);
-
- regs.r[0]=0x15; /* define pointer and mouse parameters */
- regs.r[1]=(int)blk;
- os_swi(OS_Word,®s);
- }
-
- void ReadMouse(int *x, int *y, int *b)
- {
- os_regset regs;
-
- os_swi(OS_Mouse,®s);
- *x=regs.r[0];
- *y=regs.r[1];
- *b=regs.r[2];
- }
-
- int Inkey()
- {
- os_regset regs;
-
- regs.r[0] = 129; /* kb read */
- regs.r[1] = 0; /* wait time low byte */
- regs.r[2] = 0; /* wait time high byte */
- os_swi(OS_Byte,®s);
- return( (regs.r[2]==0) ? regs.r[1] : 0);
- }
-
-
-
- int main()
- {
- int i;
-
- int msx,msy,msbut,msorgx,msorgy;
- int kbbut;
-
- int stp=6;
- int ra,rs,rt,x,y,z,v;
-
- char *spr1,*spr2,*spr3;
- Object *cvx1,*cvx2,*cvx3;
- Object *sch1,*sch2,*sch3;
-
- Object *ObjTab[4];
-
- Object *obs;
-
- int curobj;
-
- Envi *envi;
-
-
-
- InitGrp();
- Change2DParm(0,0,319,255);
- Change3DParm(2*80,2*64,2*320);
-
- obs = MakeObj("", NULL,0);
-
- cvx1 = MakeObj("<Demo3$Dir>.crayon1", CVX ,1);
- cvx2 = MakeObj("<Demo3$Dir>.crayon2", CVX ,0);
-
- sch1 = MakeObj("<Demo3$Dir>.plane1", SCH ,0);
- sch2 = MakeObj("<Demo3$Dir>.plane2", SCH ,1);
- sch3 = MakeObj("<Demo3$Dir>.sub8", SCH ,2);
-
-
- ObjTab[0]=cvx1;
- ObjTab[1]=sch1;
- ObjTab[2]=sch2;
- ObjTab[3]=sch3;
-
- PlaceObj(obs,0,0,0,0,0,-2000);
-
- for (i=0;i<4;i++) PlaceObj(ObjTab[i],0,0,0,0,0,0);
-
- envi = MakeEnvi(1, 0, 0x50);
- MkVec4(envi->DirecSrc[0], 128, 128, 128, 0);
- MkVec4(envi->PonctSrc[0], 0, 200, 0, 100000);
-
-
-
- SetMouseArea(0,0,1279,1023);
- SetMousePos(640,512);
- ReadMouse(&msorgx,&msorgy,&msbut);
-
- v=0;
- curobj=2;
-
- while (1==1) {
-
- PlotObj(envi,obs,ObjTab[curobj]);
-
-
- ReadMouse(&msx,&msy,&msbut);
- msx-=msorgx;
- msy-=msorgy;
-
- kbbut = Inkey();
-
- ReadObjCoord(ObjTab[curobj], &ra,&rs,&rt, &x,&y,&z);
-
- rt += (msx*stp);
- rs += (msy*stp);
- if (msbut==0x01<<2) ra+=stp;
- if (msbut==0x01<<0) ra-=stp;
- switch (kbbut) {
- case '+' : v+=5; break;
- case '-' : v-=5; break;
- case 'S' : v =0;ra=0;rs=0;rt=0;
- }
-
- /*PlaceObj(ObjTab[curobj], ra,rs,rt, x,y,z); */
- MoveObj(ObjTab[curobj], ra,rs/256,rt/64, v);
-
- switch (kbbut) {
- case '1': curobj=0;break;
- case '2': curobj=1; break;
- case '3': curobj=2; break;
- case '4': curobj=3; break;
- case ' ': return(0);
- }
-
- SwapView(0x80808080);
- }
-
- }
-