Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / sources / new-s5r4 / dosgraf2.c
1 /*     Loglan82 Compiler&Interpreter
2      Copyright (C) 1993 Institute of Informatics, University of Warsaw
3      Copyright (C)  1993, 1994 LITA, Pau
4      
5      This program is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published by
7      the Free Software Foundation; either version 2 of the License, or
8      (at your option) any later version.
9      
10      This program is distributed in the hope that it will be useful,
11      but WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13      GNU General Public License for more details.
14      
15              You should have received a copy of the GNU General Public License
16              along with this program; if not, write to the Free Software
17              Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19  contacts:  Andrzej.Salwicki@univ-pau.fr
20
21 or             Andrzej Salwicki
22                 LITA   Departement d'Informatique
23                 Universite de Pau
24                 Avenue de l'Universite
25                 64000 Pau   FRANCE
26                  tel.  ++33 59923154    fax. ++33 59841696
27
28 =======================================================================
29 */
30
31         case GRON :
32                 gron((int *) &param[ 0 ].xword);
33                 graphmode = TRUE;
34                 break;
35                 
36         case GROFF :
37                 groff();
38                 graphmode = FALSE;
39                 break;
40         
41         case CLS :
42                 cls();
43                 break;
44         
45         case POINT :
46                 point((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
47                 break;
48                 
49         case MOVE :
50                 move((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
51                 break;
52                 
53         case DRAW :
54                 draw((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
55                 break;
56                 
57         case HFILL :
58                 hfill((int *) &param[ 0 ].xword);
59                 break;
60                 
61         case VFILL :
62                 vfill((int *) &param[ 0 ].xword);
63                 break;
64                 
65         case COLOR :
66                 color((int *) &param[ 0 ].xword);
67                 break;
68                 
69         case STYLE :
70                 style((int *) &param[ 0 ].xword);
71                 break;
72                 
73         case PATERN :
74                 patern((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword,
75                        (int *) &param[ 2 ].xword, (int *) &param[ 3 ].xword);
76                 break;
77                 
78         case INTENS :
79                 intens((int *) &param[ 0 ].xword);
80                 break;
81                 
82         case PALETT :
83                 pallet((int *) &param[ 0 ].xword);
84                 break;
85                 
86         case BORDER :
87                 border((int *) &param[ 0 ].xword);
88                 break;
89         
90         case VIDEO :
91                 if (member(&param[ 0 ].xvirt, &am))
92                     if (M[ am ] >= 0x8000L/sizeof(word))
93                         video(normalize((char *) &M[ am+3 ]));
94                     else errsignal(RTEILLAB);
95                 else errsignal(RTEREFTN);
96                 break;
97
98         case HPAGE :
99                 i = (int) param[ 1 ].xword;
100                 if (i == 0) graphmode = FALSE;
101                 else
102                     if (i == 1) graphmode = TRUE;
103                 hpage((int *) &param[ 0 ].xword, &i,
104                       (int *) &param[ 2 ].xword);
105                 break;
106
107         case NOCARD :
108                 param[ 0 ].xword = nocard(NULL);
109                 break;
110         
111         case PUSHXY :
112                 pushxy();
113                 break;
114                 
115         case POPHXY :
116                 popxy();
117                 break;
118                 
119         case INXPOS :
120                 param[ 0 ].xword = inxpos(NULL);
121                 break;
122         
123         case INYPOS :
124                 param[ 0 ].xword = inypos(NULL);
125                 break;
126
127         case INPIX :
128                 param[ 2 ].xword = inpix((int *) &param[ 0 ].xword,
129                                          (int *) &param[ 1 ].xword);
130                 break;
131         
132         case GETMAP :
133                 t1 = abs(param[ 0 ].xword-inxpos(NULL))+1;  /* cols */
134                 t2 = abs(param[ 1 ].xword-inypos(NULL))+1;  /* rows */
135                 t1 = (4+t1*t2+sizeof(word)-1)/sizeof(word); /* no. of words, pixel=byte */
136                 newarry((word) 1, t1, (word)AINT, &param[ 2 ].xvirt, &am);
137                 getmap((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword,
138                        normalize((char *) &M[ am+3 ]));
139                 break;
140         
141         case PUTMAP :
142                 if (member(&param[ 0 ].xvirt, &am))
143                     putmap(normalize((char *) &M[ am+3 ]));
144                 else errsignal(RTEREFTN);
145                 break;
146                 
147         case ORMAP :
148                 if (member(&param[ 0 ].xvirt, &am))
149                     ormap(normalize((char *) &M[ am+3 ]));
150                 else errsignal(RTEREFTN);
151                 break;
152                 
153         case XORMAP :
154                 if (member(&param[ 0 ].xvirt, &am))
155                     xormap(normalize((char *) &M[ am+3 ]));
156                 else errsignal(RTEREFTN);
157                 break;
158         
159         case TRACK :
160                 track((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
161                 break;
162
163         case INKEY :
164                 param[ 0 ].xword = inkey(NULL);
165                 break;
166
167         case HASCII :
168                 hascii((int *) &param[ 0 ].xword);
169                 break;
170
171         case HFONT :
172                 hfont((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
173                 break;
174                                 
175         case HFONT8 :
176                 param[ 0 ].xword = 0;
177                 param[ 1 ].xword = 0;
178                 hfont8((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword);
179                 break;
180         
181         case OUTSTRING :
182                 t1 = strings+param[ 0 ].xword;
183                 outhli((int *) &M[ t1 ], (char *) &M[ t1+1 ]);
184                 break;
185
186         case CIRB :
187                 r1 = param[ 3 ].xreal;
188                 r2 = param[ 4 ].xreal;
189                 cirb((int *) &param[ 0 ].xword, (int *) &param[ 1 ].xword,
190                      (int *) &param[ 2 ].xword, &r1, &r2,
191                      (int *) &param[ 5 ].xword, (int *) &param[ 6 ].xword,
192                      (int *) &param[ 7 ].xword, (int *) &param[ 8 ].xword);
193                 break;
194
195 /* MOUSE */
196
197         case INIT :
198                 ax = mouse(0, &param[ 0 ].xword, &cx, &dx);
199                 param[ 1 ].xbool = lbool(ax);
200                 break;
201         
202         case SHOWCURSOR :
203                 mouse(1, &bx, &cx, &dx);
204                 break;
205         
206         case HIDECURSOR :
207                 mouse(2, &bx, &cx, &dx);
208                 break;
209         
210         case STATUS :
211                 mouse(3, &bx, &param[ 0 ].xword, &param[ 1 ].xword);
212                 param[ 2 ].xbool = lbool(bx & 0x01);
213                 param[ 3 ].xbool = lbool(bx & 0x02);
214                 param[ 4 ].xbool = lbool(bx & 0x04);
215                 break;
216         
217         case SETPOSITION :
218                 mouse(4, &bx, &param[ 0 ].xword, &param[ 1 ].xword);
219                 break;
220         
221         case GETPRESS :
222         case GETRELEASE :
223                 i = ( nrproc == GETPRESS ? 5 : 6 );
224                 bx = param[ 0 ].xword;
225                 ax = mouse(i, &bx, &param[ 1 ].xword, &param[ 2 ].xword);
226                 param[ 4 ].xbool = lbool(ax & 0x01);
227                 param[ 5 ].xbool = lbool(ax & 0x02);
228                 param[ 6 ].xbool = lbool(ax & 0x04);
229                 param[ 3 ].xword = bx;
230                 break;
231         
232         case SETWINDOW :
233                 mouse(7, &bx, &param[ 0 ].xword, &param[ 1 ].xword);
234                 mouse(8, &bx, &param[ 2 ].xword, &param[ 3 ].xword);
235                 break;
236         
237         case DEFCURSOR :
238                 mouse(10, &param[ 0 ].xword, &param[ 1 ].xword,
239                           &param[ 2 ].xword);
240                 break;
241
242         case GETMOVEMENT :
243                 mouse(11, &bx, &param[ 0 ].xword, &param[ 1 ].xword);
244                 break;
245
246         case SETSPEED :
247                 mouse(15, &bx, &param[ 0 ].xword, &param[ 1 ].xword);
248                 break;
249
250         case SETMARGINS :
251                 r.x.ax = 16;
252                 r.x.cx = param[ 0 ].xword;
253                 r.x.dx = param[ 2 ].xword;
254                 r.x.si = param[ 1 ].xword;
255                 r.x.di = param[ 3 ].xword;
256                 int86(0x33, &r, &r);
257                 break;
258                 
259         case SETTHRESHOLD :
260                 mouse(19, &bx, &cx, &param[ 0 ].xword);
261                 break;
262
263