Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / sources / int / dosgraf1.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 #include <dos.h>\r
32 #include "graf\graf.h"\r
33 \r
34 \r
35 static union REGS r;\r
36 \r
37 #ifndef NO_PROTOTYPES\r
38 static char *normalize(char *);\r
39 static int mouse(int,word *,word *,word *);\r
40 #else\r
41 static char *normalize();\r
42 static int mouse();\r
43 #endif\r
44 \r
45 \r
46 \r
47 static char *normalize(addr)    /* Normalize segmented address */\r
48     char *addr;\r
49 {\r
50     union{\r
51         char *address;\r
52         unsigned int words[2];\r
53     } conv;\r
54     conv.address = addr;\r
55 #if !WORD_32BIT\r
56     conv.words[1] += conv.words[0] / 16;\r
57     conv.words[0] %= 16;\r
58 #endif\r
59     return (conv.address);\r
60 }\r
61 \r
62 \r
63 \r
64 static int mouse(func, bx, cx, dx)      /* Call mouse driver INT 33H */\r
65 int func;\r
66 word *bx, *cx, *dx;\r
67 {\r
68     union REGS r;\r
69     r.x.ax = func;\r
70     r.x.bx = *bx;\r
71     r.x.cx = *cx;\r
72     r.x.dx = *dx;\r
73     int86(0x33, &r, &r);\r
74     *bx = (int) r.x.bx;\r
75     *cx = (int) r.x.cx;\r
76     *dx = (int) r.x.dx;\r
77     return(r.x.ax);\r
78 }\r
79 \r