1 /* Loglan82 Compiler&Interpreter
2 Copyright (C) 1981-1993 Institute of Informatics, University of Warsaw
3 Copyright (C) 1993, 1994 LITA, Pau
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.
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.
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.
19 contacts: Andrzej.Salwicki@univ-pau.fr
22 LITA Departement d'Informatique
24 Avenue de l'Universite
26 tel. ++33 59923154 fax. ++33 59841696
28 =======================================================================
31 #define send_par(par) theMessage.data.s[cnt++]=(short)(param[par].xword);
32 #define send_shrt(wd) theMessage.data.s[cnt++]=(short)(wd);
33 #define send_word(wd) theMessage.data.s[cnt++]=(short)((wd)&0xffff); \
34 theMessage.data.s[cnt++]=(short)(((wd)>>16)&0xffff);
38 theMessage.type=ClientMessage; \
39 theMessage.format = 16; \
40 theMessage.message_type = nrproc; \
41 XSendEvent(theDisplay,theWindow,True,NoEventMask,&theMessage); \
44 #define nxtev do XNextEvent( theDisplay, &retEv ); \
45 while( retEv.type!=ClientMessage ); \
48 #define rec_par(par) param[par].xword=(int)(retEv.xclient.data.s[cnt++]);
49 #define rec_shrt(sh) sh = (int)(retEv.xclient.data.s[cnt++]);
50 #define rec_word(wd) wd = (int)(retEv.xclient.data.s[cnt++]) & 0xffff; \
51 wd |= (int)(retEv.xclient.data.s[cnt++]) << 16;
56 if ((theDisplay = XOpenDisplay(NULL)) == NULL){
57 fprintf (stderr,"\nint: Can't open display\n");
60 myWindow = XCreateWindow(
62 RootWindow(theDisplay,DefaultScreen(theDisplay)),
64 CopyFromParent,InputOnly,CopyFromParent,
67 if( (child_no=fork())==0 ){
69 sprintf(me,"%d",(int)myWindow);
70 execlp("herc","herc",me,NULL);
79 if( graphmode == FALSE ) break;
91 xystack[stackptr].x = curx;
92 xystack[stackptr].y = cury;
93 xystack[stackptr].fcol = fcol;
94 xystack[stackptr].bcol = bcol;
95 xystack[stackptr].style= style;
98 if( stackptr == 16 ) stackptr--;
111 curx = xystack[stackptr].x;
112 cury = xystack[stackptr].y;
113 fcol = xystack[stackptr].fcol;
114 bcol = xystack[stackptr].bcol;
115 style= xystack[stackptr].style;
155 param[0].xword = curx;
159 param[0].xword = cury;
175 if( param[0].xword != 0 ) curx += 8;
179 fcol = param[0].xword;
185 bcol = param[0].xword;
191 bcol = param[0].xword;
208 char *s= (char *)(M + strings + param[ 0 ].xword + 1);
209 int signs=M[ strings + param[ 0 ].xword ];
233 word x=param[0].xword;
234 word y=param[1].xword;
235 word w = x - curx + 1;
236 word h = y - cury + 1;
239 if( w <= 0 ){ w=-w; x-=w; }
240 if( h <= 0 ){ h=-h; y-=h; }
248 newarry((word) 1, 3, (word)AINT, ¶m[ 2 ].xvirt, &am);
258 if (member(¶m[ 0 ].xvirt, &am)){
259 send_word( M[ am+3 ] )
262 send_shrt( M[ am+4 ] )
263 send_shrt( M[ am+5 ] )
265 }else errsignal(RTEREFTN);
270 patern((int *) ¶m[ 0 ].xword, (int *) ¶m[ 1 ].xword,
271 (int *) ¶m[ 2 ].xword, (int *) ¶m[ 3 ].xword);
275 intens((int *) ¶m[ 0 ].xword);
279 pallet((int *) ¶m[ 0 ].xword);
283 if (member(¶m[ 0 ].xvirt, &am))
284 if (M[ am ] >= 0x8000L/sizeof(word))
285 video(normalize((char *) &M[ am+3 ]));
286 else errsignal(RTEILLAB);
287 else errsignal(RTEREFTN);
291 i = (int) param[ 1 ].xword;
292 if (i == 0) graphmode = FALSE;
294 if (i == 1) graphmode = TRUE;
295 hpage((int *) ¶m[ 0 ].xword, &i,
296 (int *) ¶m[ 2 ].xword);
300 param[ 0 ].xword = nocard(NULL);
314 if( child_no == 0 ) param[ 0 ].xword = inkey();
321 param[ 0 ].xword = keycode;
327 hfont((int *) ¶m[ 0 ].xword, (int *) ¶m[ 1 ].xword);
331 param[ 0 ].xword = 0;
332 param[ 1 ].xword = 0;
333 hfont8((int *) ¶m[ 0 ].xword, (int *) ¶m[ 1 ].xword);
339 double alfa,beta,aspect,abs; word kolb,wwyp;
345 alfa = (double)(param[3].xreal);
346 beta = (double)(param[4].xreal);
347 kolb = param[5].xword;
348 wwyp = param[6].xword;
350 aspect = (double)(param[7].xword) / (double)(param[8].xword);
351 aspect *= (double)(param[2].xword);
353 alfa = alfa / M_PI * 180.0 * 64.0 ;
354 beta = beta / M_PI * 180.0 * 64.0 ;
357 if( abs < 0.0 ) abs = -abs;
361 send_shrt( (unsigned)aspect )
362 send_shrt( (unsigned)alfa )
363 send_shrt( (unsigned)beta )
371 param[ 0 ].xbool = 2;
372 param[ 1 ].xbool = lbool(1);