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