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