Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / sources / new-s5r4 / svga2.c
1 case GRON:      switch (param[0].xword)
2                 {
3                  case 0:  GrSetMode(GR_width_height_graphics,
4                                     640,480,16);
5                           Res_graph_X=640;
6                           Res_graph_Y=480;
7                           break;
8                  case 1:  GrSetMode(GR_width_height_graphics,
9                                     640,480,256);
10                           Res_graph_X=640;
11                           Res_graph_Y=480;
12                           break;
13                  case 2:  GrSetMode(GR_width_height_graphics,
14                                     800,600,16);
15                           Res_graph_X=800;
16                           Res_graph_Y=600;
17                           break;
18                  
19                  case 3:  GrSetMode(GR_width_height_graphics,
20                                     800,600,256);
21                           Res_graph_X=800;
22                           Res_graph_Y=600;
23                           break;
24                  case 4:  GrSetMode(GR_width_height_graphics,
25                                     1024,768,16);
26                           Res_graph_X=1024;
27                           Res_graph_Y=768;
28                           break;
29                  case 5:  GrSetMode(GR_width_height_graphics,
30                                     1024,768,256);
31                           Res_graph_X=1024;
32                           Res_graph_Y=768;
33                           break;
34                  case 6:  GrSetMode(GR_width_height_graphics,
35                                     1280,1024,16);
36                           Res_graph_X=1280;
37                           Res_graph_Y=1024;
38                           break;
39                  case 7:  GrSetMode(GR_width_height_graphics,
40                                     1280,1024,256);
41                           Res_graph_X=1280;
42                           Res_graph_Y=1024;
43                           break;
44                  case 8:  GrSetMode(GR_width_height_graphics,
45                                     1600,1280,16);
46                           Res_graph_X=1600;
47                           Res_graph_Y=1280;
48                           break;
49                  case 9:  GrSetMode(GR_width_height_graphics,
50                                     1600,1280,256);
51                           Res_graph_X=1600;
52                           Res_graph_Y=1280;
53                           break;
54                  default: GrSetMode(GR_width_height_graphics,
55                                     320,200,256);
56                           Res_graph_X=320;
57                           Res_graph_Y=200;
58                 }
59                 GrClearScreen(0);
60                 break;
61
62 case POINT:     CurX=param[0].xword;
63                 CurY=param[1].xword;
64                 GrPlot(CurX,CurY,Couleur);
65                 break;
66
67 case INPIX:     CurX=param[0].xword;
68                 CurY=param[1].xword;
69                 param[2].xword=GrPixel(CurX,CurY);
70                 break;
71
72 case MOVE:      CurX=param[0].xword;
73                 CurY=param[1].xword;
74                 break;
75
76 case COLOR:     Couleur=param[0].xword;
77                 break;
78
79 case PALETT:    Coul[Pal++]=param[0].xword;
80                 if (Pal==4)
81                 {
82                  GrSetColor(Coul[0],Coul[1],Coul[2],Coul[3]);
83                  Pal=0;
84                 }
85                 break;
86
87 case GROFF:     if(MOUSE_PRESENT) MouseUnInit();
88                 GrSetMode(GR_80_25_text);
89                 break;
90
91 case DRAW:      GrLine(CurX,CurY,param[0].xword,param[1].xword,Couleur);
92                 CurX=param[0].xword;
93                 CurY=param[1].xword;
94                 break;
95
96 case HFILL:     GrHLine(CurX,param[0].xword,CurY,Couleur);
97                 CurX=param[0].xword;
98                 break;
99
100 case VFILL:     GrVLine(CurX,CurY,param[0].xword,Couleur);
101                 CurY=param[0].xword;
102                 break;
103
104 case CLS:       GrClearScreen(Fond);
105                 break;
106
107 case BORDER:    Fond=param[0].xword;
108                 break;
109
110 case INXPOS:    param[0].xword=CurX;
111                 break;
112
113 case INYPOS:    param[0].xword=CurY;
114                 break;
115
116 case OUTSTRING:
117                 {
118                  char *Texte= (char *)(M + strings + param[ 2 ].xword + 1);
119                  if(param[0].xint==-1) ax=CurX;
120                  else ax=param[0].xint;
121                  if(param[1].xint==-1) bx=CurY;
122                  else bx=param[1].xint;
123                  if(param[3].xint==-1) cx=Couleur;
124                  else cx=param[3].xint;
125                  if(param[4].xint==-1) dx=Fond;
126                  else dx=param[4].xint;
127                  GrTextXY(ax,bx,Texte,cx,dx);
128                  if(param[0].xint==-1 && param[1].xint==-1)
129                   {
130                   CurX+=8*strlen(Texte);
131                   if(CurX>GrMaxX())
132                    {
133                    CurX=0;
134                    CurY+=14;
135                    }
136                   }
137                 }
138                 break;
139
140 case HASCII:
141                 {
142                  char *Texte=(char *)&param[ 0 ].xword;
143                  GrTextXY(CurX,CurY,Texte,Couleur,Fond);
144                  CurX+=8;
145                  if (CurX>GrMaxX())
146                  {
147                   CurX=0;
148                   CurY+=14;
149                  }
150                 }
151                 break;
152
153 case INKEY:
154                 {
155                  int Touche;
156
157                  Touche=kbhit();
158                  if (Touche)
159                   param[0].xword=getkey();
160                  else
161                   param[0].xword=0;
162                 }
163                 break;
164
165 case GETMAP :   {
166                  int w,h;
167                  GrContext *Destination;
168
169                  w=abs(param[0].xword-CurX)+1;
170                  h=abs(param[1].xword-CurY)+1;
171                  newarry((word)1,3,(word)AINT,&param[2].xvirt,&am);
172                  Destination=GrCreateContext(w,h,
173                                              NULL,NULL);
174                  M[am+3]=(int)Destination;
175                  M[am+4]=w;
176                  M[am+5]=h;
177                  GrBitBlt(Destination,0,0,
178                           NULL,CurX,CurY,param[0].xword,param[1].xword,
179                           GrWRITE);
180                 }
181                 break;
182
183 case PUTMAP :   if (member(&param[0].xvirt,&am))
184                  GrBitBlt(NULL,CurX,CurY,
185                           (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrWRITE);
186                 else
187                  errsignal(RTEREFTN);
188                 break;
189
190 case ORMAP :    if (member(&param[0].xvirt,&am))
191                  GrBitBlt(NULL,CurX,CurY,
192                           (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrOR);
193                 else
194                  errsignal(RTEREFTN);
195                 break;
196
197 case XORMAP :   if (member(&param[0].xvirt,&am))
198                  GrBitBlt(NULL,CurX,CurY,
199                           (GrContext *)M[am+3],0,0,M[am+4],M[am+5],GrXOR);
200                 else
201                  errsignal(RTEREFTN);
202                 break;
203
204 case INTENS :   {
205                 word am1,am2;
206                 int  i;
207                 int pt1[30][2];
208
209                 if(member(&param[1].xvirt,&am1) && member(&param[2].xvirt,&am2))
210                  {
211                  if(param[0].xint>30) param[0].xint=30;
212                  for(i=0;i<param[0].xint;i++)
213                   {
214                   pt1[i][0]=M[am1+3+i];
215                   pt1[i][1]=M[am2+3+i];
216                   }
217                  if(param[4].xint!=0)
218                   GrFilledPolygon(param[0].xint,pt1,param[3].xint);
219                  else
220                   GrPolygon(param[0].xint,pt1,param[3].xint);
221                  }
222                 else
223                  errsignal(RTEREFTN);
224                 }
225                 break;
226
227 case PATERN :
228                 if(param[5].xint!=0)
229                  GrFilledBox(param[0].xint,param[1].xint,param[2].xint,param[3].xint,param[4].xint);
230                 else
231                  GrBox(param[0].xint,param[1].xint,param[2].xint,param[3].xint,param[4].xint);
232                 break;
233 case TRACK :    afficheinteger(param[0].xint,param[1].xint,param[2].xint,param[3].xint,
234                                param[4].xint);
235                 break;
236 case HFONT :    param[9].xint=gscanfnum(param[0].xint,param[1].xint,param[2].xint*8,
237                                    param[3].xint,param[4].xint,param[5].xint,
238                                    param[6].xint,param[7].xint,param[8].xint);
239                 break;
240
241 case HFONT8 :   {
242                  char *Texte= (char *)(M + strings + param[ 4 ].xword + 1);
243
244                  ret=gschar(param[0].xint,param[1].xint,param[2].xint,&param[3].xint,
245                            Texte,param[5].xint,param[6].xint,param[7].xint);
246
247                  newarry((word) 0, param[3].xint-2,(word) AINT,&param[8].xvirt,&ax);
248                  ax+=3;
249                  while(*ret!='\0')
250                   M[ax++]=*(ret++);
251                 }
252                 break;
253
254 case CIRB :     {
255                 ax=param[0].xint-param[2].xint; /* x */
256                 bx=param[1].xint-param[3].xint; /* y */
257                 cx=param[2].xint*2;             /* rax */
258                 dx=param[3].xint*2;             /* ray */
259                 if(param[7].xint!=0)
260                  GrFilledEllipseArc(ax,bx,cx,dx,param[4].xint,param[5].xint,
261                                     param[6].xint);
262                 else
263                  GrEllipseArc(ax,bx,cx,dx,param[4].xint,param[5].xint,
264                               param[6].xint);
265                 }
266                 break;
267 /* MOUSE */
268
269 case INIT :     mousenit(param[0].xint,param[1].xint);
270                 break;
271
272 case SHOWCURSOR :
273                 mouseshow();
274                 break;
275
276 case HIDECURSOR :
277                 mousehide();
278                 break;
279
280 case STATUS :
281                 break;
282
283 case SETPOSITION :
284                 MouseWarp(param[0].xint,param[1].xint);
285                 break;
286
287 case GETPRESS :
288 case GETRELEASE :
289             
290                 ax=mouse(&v,&p,&h,&l,&r,&c);
291                 param[ 5 ].xint = c;
292                 param[ 4 ].xint = r;
293                 param[ 3 ].xint = l;
294                 param[ 2 ].xint = p;
295                 param[ 1 ].xint = v;
296                 param[ 0 ].xint = h;
297                 /* parametre en retour*/
298                 if(ax)
299                  param[ 6 ].xbool = TRUE;
300                 else
301                  param[ 6 ].xbool = FALSE;
302                 break;
303
304 case SETWINDOW :
305                 MouseSetLimits(param[0].xint,param[1].xint,param[2].xint,param[3].xint);
306                 break;
307
308 case DEFCURSOR :
309                 break;
310
311 case GETMOVEMENT :
312                 MouseEventEnable(param[1].xint,param[0].xint);
313                 break;
314
315 case SETSPEED :
316                 MouseSetSpeed(param[0].xint);
317                 break;
318
319 case SETTHRESHOLD :
320                 break;
321