case GRON: switch (param[0].xword) { case 0: GrSetMode(GR_width_height_graphics, 640,480,16); Res_graph_X=640; Res_graph_Y=480; break; case 1: GrSetMode(GR_width_height_graphics, 640,480,256); Res_graph_X=640; Res_graph_Y=480; break; case 2: GrSetMode(GR_width_height_graphics, 800,600,16); Res_graph_X=800; Res_graph_Y=600; break; case 3: GrSetMode(GR_width_height_graphics, 800,600,256); Res_graph_X=800; Res_graph_Y=600; break; case 4: GrSetMode(GR_width_height_graphics, 1024,768,16); Res_graph_X=1024; Res_graph_Y=768; break; case 5: GrSetMode(GR_width_height_graphics, 1024,768,256); Res_graph_X=1024; Res_graph_Y=768; break; case 6: GrSetMode(GR_width_height_graphics, 1280,1024,16); Res_graph_X=1280; Res_graph_Y=1024; break; case 7: GrSetMode(GR_width_height_graphics, 1280,1024,256); Res_graph_X=1280; Res_graph_Y=1024; break; case 8: GrSetMode(GR_width_height_graphics, 1600,1280,16); Res_graph_X=1600; Res_graph_Y=1280; break; case 9: GrSetMode(GR_width_height_graphics, 1600,1280,256); Res_graph_X=1600; Res_graph_Y=1280; break; default: GrSetMode(GR_width_height_graphics, 320,200,256); Res_graph_X=320; Res_graph_Y=200; } GrClearScreen(0); break; case POINT: CurX=param[0].xword; CurY=param[1].xword; GrPlot(CurX,CurY,Couleur); break; case INPIX: CurX=param[0].xword; CurY=param[1].xword; param[2].xword=GrPixel(CurX,CurY); break; case MOVE: CurX=param[0].xword; CurY=param[1].xword; break; case COLOR: Couleur=param[0].xword; break; case PALETT: Coul[Pal++]=param[0].xword; if (Pal==4) { GrSetColor(Coul[0],Coul[1],Coul[2],Coul[3]); Pal=0; } break; case GROFF: if(MOUSE_PRESENT) MouseUnInit(); GrSetMode(GR_80_25_text); break; case DRAW: GrLine(CurX,CurY,param[0].xword,param[1].xword,Couleur); CurX=param[0].xword; CurY=param[1].xword; break; case HFILL: GrHLine(CurX,param[0].xword,CurY,Couleur); CurX=param[0].xword; break; case VFILL: GrVLine(CurX,CurY,param[0].xword,Couleur); CurY=param[0].xword; break; case CLS: GrClearScreen(Fond); break; case BORDER: Fond=param[0].xword; break; case INXPOS: param[0].xword=CurX; break; case INYPOS: param[0].xword=CurY; break; case OUTSTRING: { char *Texte= (char *)(M + strings + param[ 2 ].xword + 1); if(param[0].xint==-1) ax=CurX; else ax=param[0].xint; if(param[1].xint==-1) bx=CurY; else bx=param[1].xint; if(param[3].xint==-1) cx=Couleur; else cx=param[3].xint; if(param[4].xint==-1) dx=Fond; else dx=param[4].xint; GrTextXY(ax,bx,Texte,cx,dx); if(param[0].xint==-1 && param[1].xint==-1) { CurX+=8*strlen(Texte); if(CurX>GrMaxX()) { CurX=0; CurY+=14; } } } break; case HASCII: { char *Texte=(char *)¶m[ 0 ].xword; GrTextXY(CurX,CurY,Texte,Couleur,Fond); CurX+=8; if (CurX>GrMaxX()) { CurX=0; CurY+=14; } } break; case INKEY: { int Touche; Touche=kbhit(); if (Touche) param[0].xword=getkey(); else param[0].xword=0; } break; case GETMAP : { int w,h; GrContext *Destination; w=abs(param[0].xword-CurX)+1; h=abs(param[1].xword-CurY)+1; newarry((word)1,3,(word)AINT,¶m[2].xvirt,&am); Destination=GrCreateContext(w,h, NULL,NULL); M[am+3]=(int)Destination; M[am+4]=w; M[am+5]=h; GrBitBlt(Destination,0,0, NULL,CurX,CurY,param[0].xword,param[1].xword, GrWRITE); } break; case PUTMAP : if (member(¶m[0].xvirt,&am)) GrBitBlt(NULL,CurX,CurY, (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrWRITE); else errsignal(RTEREFTN); break; case ORMAP : if (member(¶m[0].xvirt,&am)) GrBitBlt(NULL,CurX,CurY, (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrOR); else errsignal(RTEREFTN); break; case XORMAP : if (member(¶m[0].xvirt,&am)) GrBitBlt(NULL,CurX,CurY, (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrXOR); else errsignal(RTEREFTN); break; case INTENS : { word am1,am2; int i; int pt1[30][2]; if(member(¶m[1].xvirt,&am1) && member(¶m[2].xvirt,&am2)) { if(param[0].xint>30) param[0].xint=30; for(i=0;i