prelude.c
1 //! @file prelude.c
2 //! @author J. Marcel van der Veer
3
4 //! @section Copyright
5 //!
6 //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
7 //! Copyright 2001-2026 J. Marcel van der Veer [algol68g@xs4all.nl].
8
9 //! @section License
10 //!
11 //! This program is free software; you can redistribute it and/or modify it
12 //! under the terms of the GNU General Public License as published by the
13 //! Free Software Foundation; either version 3 of the License, or
14 //! (at your option) any later version.
15 //!
16 //! This program is distributed in the hope that it will be useful, but
17 //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 //! more details. You should have received a copy of the GNU General Public
20 //! License along with this program. If not, see [http://www.gnu.org/licenses/].
21
22 //! @section Synopsis
23 //!
24 //! Standard prelude definitions.
25
26 #include "a68g.h"
27 #include "a68g-prelude.h"
28 #include "a68g-prelude-mathlib.h"
29 #include "a68g-prelude-gsl.h"
30 #include "a68g-transput.h"
31 #include "a68g-mp.h"
32 #include "a68g-parser.h"
33 #include "a68g-double.h"
34
35 #define A68G_STD A68G_TRUE
36 #define A68G_EXT A68G_FALSE
37
38 //! @brief Standard_environ_proc_name.
39
40 char *standard_environ_proc_name (GPROC f)
41 {
42 for (TAG_T *i = IDENTIFIERS (A68G_STANDENV); i != NO_TAG; FORWARD (i)) {
43 if (PROCEDURE (i) == f) {
44 return NSYMBOL (NODE (i));
45 }
46 }
47 return NO_TEXT;
48 }
49
50 //! @brief Enter tag in standenv symbol table.
51
52 void add_a68g_standenv (BOOL_T portable, int a, NODE_T * n, char *c, MOID_T * m, int p, GPROC * q)
53 {
54 #define INSERT_TAG(l, n) {\
55 NEXT (n) = *(l);\
56 *(l) = (n);\
57 }
58 TAG_T *new_one = new_tag ();
59 PROCEDURE_LEVEL (INFO (n)) = 0;
60 USE (new_one) = A68G_FALSE;
61 HEAP (new_one) = HEAP_SYMBOL;
62 TAG_TABLE (new_one) = A68G_STANDENV;
63 NODE (new_one) = n;
64 VALUE (new_one) = (c != NO_TEXT ? TEXT (add_token (&A68G (top_token), c)) : NO_TEXT);
65 PRIO (new_one) = p;
66 PROCEDURE (new_one) = q;
67 A68G_STANDENV_PROC (new_one) = (BOOL_T) (q != NO_GPROC);
68 UNIT (new_one) = NULL;
69 PORTABLE (new_one) = portable;
70 MOID (new_one) = m;
71 NEXT (new_one) = NO_TAG;
72 if (a == IDENTIFIER) {
73 INSERT_TAG (&IDENTIFIERS (A68G_STANDENV), new_one);
74 } else if (a == OP_SYMBOL) {
75 INSERT_TAG (&OPERATORS (A68G_STANDENV), new_one);
76 } else if (a == PRIO_SYMBOL) {
77 INSERT_TAG (&PRIO (A68G_STANDENV), new_one);
78 } else if (a == INDICANT) {
79 INSERT_TAG (&INDICANTS (A68G_STANDENV), new_one);
80 } else if (a == LABEL) {
81 INSERT_TAG (&LABELS (A68G_STANDENV), new_one);
82 }
83 #undef INSERT_TAG
84 }
85
86 //! @brief Compose PROC moid from arguments - first result, than arguments.
87
88 MOID_T *a68g_proc (MOID_T * m, ...)
89 {
90 va_list attribute;
91 va_start (attribute, m);
92 PACK_T *p = NO_PACK, *q = NO_PACK;
93 MOID_T *y;
94 while ((y = va_arg (attribute, MOID_T *)) != NO_MOID) {
95 PACK_T *new_one = new_pack ();
96 MOID (new_one) = y;
97 TEXT (new_one) = NO_TEXT;
98 NEXT (new_one) = NO_PACK;
99 if (q != NO_PACK) {
100 NEXT (q) = new_one;
101 } else {
102 p = new_one;
103 }
104 q = new_one;
105 }
106 va_end (attribute);
107 return add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (p), NO_NODE, m, p);
108 }
109
110 //! @brief Enter an identifier in standenv.
111
112 void a68g_idf (BOOL_T portable, char *n, MOID_T * m, GPROC * q)
113 {
114 add_a68g_standenv (portable, IDENTIFIER, some_node (TEXT (add_token (&A68G (top_token), n))), NO_TEXT, m, 0, q);
115 }
116
117 void a68g_id2 (BOOL_T portable, char *n1, char *n2, MOID_T * m, GPROC * q)
118 {
119 add_a68g_standenv (portable, IDENTIFIER, some_node (TEXT (add_token (&A68G (top_token), n1))), NO_TEXT, m, 0, q);
120 add_a68g_standenv (A68G_EXT, IDENTIFIER, some_node (TEXT (add_token (&A68G (top_token), n2))), NO_TEXT, m, 0, q);
121 }
122
123 //! @brief Enter a moid in standenv.
124
125 void a68g_mode (int p, char *t, MOID_T ** m)
126 {
127 (*m) = add_mode (&TOP_MOID (&A68G_JOB), STANDARD, p, some_node (TEXT (find_keyword (A68G (top_keyword), t))), NO_MOID, NO_PACK);
128 }
129
130 //! @brief Enter a priority in standenv.
131
132 void a68g_prio (char *p, int b)
133 {
134 add_a68g_standenv (A68G_TRUE, PRIO_SYMBOL, some_node (TEXT (add_token (&A68G (top_token), p))), NO_TEXT, NO_MOID, b, NO_GPROC);
135 }
136
137 //! @brief Enter operator in standenv.
138
139 void a68g_op (BOOL_T portable, char *n, MOID_T * m, GPROC * q)
140 {
141 add_a68g_standenv (portable, OP_SYMBOL, some_node (TEXT (add_token (&A68G (top_token), n))), NO_TEXT, m, 0, q);
142 }
143
144 //! @brief Enter standard modes in standenv.
145
146 void stand_moids (void)
147 {
148 // Primitive A68 moids.
149 a68g_mode (0, "VOID", &M_VOID);
150 // Standard precision.
151 a68g_mode (0, "INT", &M_INT);
152 a68g_mode (0, "REAL", &M_REAL);
153 a68g_mode (0, "COMPLEX", &M_COMPLEX);
154 a68g_mode (0, "COMPL", &M_COMPL);
155 a68g_mode (0, "BITS", &M_BITS);
156 a68g_mode (0, "BYTES", &M_BYTES);
157 // Multiple precision.
158 a68g_mode (1, "INT", &M_LONG_INT);
159 a68g_mode (1, "REAL", &M_LONG_REAL);
160 a68g_mode (1, "COMPLEX", &M_LONG_COMPLEX);
161 a68g_mode (1, "COMPL", &M_LONG_COMPL);
162 a68g_mode (1, "BITS", &M_LONG_BITS);
163 a68g_mode (1, "BYTES", &M_LONG_BYTES);
164 a68g_mode (2, "REAL", &M_LONG_LONG_REAL);
165 a68g_mode (2, "INT", &M_LONG_LONG_INT);
166 a68g_mode (2, "COMPLEX", &M_LONG_LONG_COMPLEX);
167 a68g_mode (2, "COMPL", &M_LONG_LONG_COMPL);
168 #if (A68G_LEVEL < 3)
169 a68g_mode (2, "BITS", &M_LONG_LONG_BITS);
170 #endif
171 // Other.
172 a68g_mode (0, "BOOL", &M_BOOL);
173 a68g_mode (0, "CHAR", &M_CHAR);
174 a68g_mode (0, "STRING", &M_STRING);
175 a68g_mode (0, "FILE", &M_FILE);
176 a68g_mode (0, "CHANNEL", &M_CHANNEL);
177 a68g_mode (0, "PIPE", &M_PIPE);
178 a68g_mode (0, "FORMAT", &M_FORMAT);
179 a68g_mode (0, "SEMA", &M_SEMA);
180 a68g_mode (0, "SOUND", &M_SOUND);
181 PORTABLE (M_PIPE) = A68G_FALSE;
182 HAS_ROWS (M_SOUND) = A68G_TRUE;
183 PORTABLE (M_SOUND) = A68G_FALSE;
184 // ROWS.
185 M_ROWS = add_mode (&TOP_MOID (&A68G_JOB), ROWS_SYMBOL, 0, NO_NODE, NO_MOID, NO_PACK);
186 // REFs.
187 M_REF_INT = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_INT, NO_PACK);
188 M_REF_REAL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_REAL, NO_PACK);
189 M_REF_COMPLEX = M_REF_COMPL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_COMPLEX, NO_PACK);
190 M_REF_BITS = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_BITS, NO_PACK);
191 M_REF_BYTES = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_BYTES, NO_PACK);
192 M_REF_FORMAT = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_FORMAT, NO_PACK);
193 M_REF_PIPE = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_PIPE, NO_PACK);
194 // Multiple precision.
195 M_REF_LONG_INT = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_INT, NO_PACK);
196 M_REF_LONG_REAL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_REAL, NO_PACK);
197 M_REF_LONG_COMPLEX = M_REF_LONG_COMPL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_COMPLEX, NO_PACK);
198 M_REF_LONG_BITS = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_BITS, NO_PACK);
199 M_REF_LONG_LONG_INT = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_INT, NO_PACK);
200 M_REF_LONG_LONG_REAL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_REAL, NO_PACK);
201 M_REF_LONG_LONG_COMPLEX = M_REF_LONG_LONG_COMPL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_COMPLEX, NO_PACK);
202 #if (A68G_LEVEL < 3)
203 M_REF_LONG_LONG_BITS = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_BITS, NO_PACK);
204 #endif
205 M_REF_LONG_BYTES = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_BYTES, NO_PACK);
206 // Other.
207 M_REF_BOOL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_BOOL, NO_PACK);
208 M_REF_CHAR = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_CHAR, NO_PACK);
209 M_REF_FILE = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_FILE, NO_PACK);
210 M_REF_REF_FILE = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_REF_FILE, NO_PACK);
211 M_REF_SOUND = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_SOUND, NO_PACK);
212 // [] INT.
213 M_ROW_INT = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_INT, NO_PACK);
214 HAS_ROWS (M_ROW_INT) = A68G_TRUE;
215 SLICE (M_ROW_INT) = M_INT;
216 M_REF_ROW_INT = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_INT, NO_PACK);
217 NAME (M_REF_ROW_INT) = M_REF_INT;
218 // [] REAL.
219 M_ROW_REAL = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_REAL, NO_PACK);
220 HAS_ROWS (M_ROW_REAL) = A68G_TRUE;
221 SLICE (M_ROW_REAL) = M_REAL;
222 M_REF_ROW_REAL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_REAL, NO_PACK);
223 NAME (M_REF_ROW_REAL) = M_REF_REAL;
224 // [,] REAL.
225 M_ROW_ROW_REAL = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 2, NO_NODE, M_REAL, NO_PACK);
226 HAS_ROWS (M_ROW_ROW_REAL) = A68G_TRUE;
227 SLICE (M_ROW_ROW_REAL) = M_ROW_REAL;
228 M_REF_ROW_ROW_REAL = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_ROW_REAL, NO_PACK);
229 NAME (M_REF_ROW_ROW_REAL) = M_REF_ROW_REAL;
230 // [] COMPLEX.
231 M_ROW_COMPLEX = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_COMPLEX, NO_PACK);
232 HAS_ROWS (M_ROW_COMPLEX) = A68G_TRUE;
233 SLICE (M_ROW_COMPLEX) = M_COMPLEX;
234 M_REF_ROW_COMPLEX = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_COMPLEX, NO_PACK);
235 NAME (M_REF_ROW_COMPLEX) = M_REF_COMPLEX;
236 // [,] COMPLEX.
237 M_ROW_ROW_COMPLEX = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 2, NO_NODE, M_COMPLEX, NO_PACK);
238 HAS_ROWS (M_ROW_ROW_COMPLEX) = A68G_TRUE;
239 SLICE (M_ROW_ROW_COMPLEX) = M_ROW_COMPLEX;
240 M_REF_ROW_ROW_COMPLEX = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_ROW_COMPLEX, NO_PACK);
241 NAME (M_REF_ROW_ROW_COMPLEX) = M_REF_ROW_COMPLEX;
242 // [] BOOL.
243 M_ROW_BOOL = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_BOOL, NO_PACK);
244 HAS_ROWS (M_ROW_BOOL) = A68G_TRUE;
245 SLICE (M_ROW_BOOL) = M_BOOL;
246 // FLEX [] BOOL.
247 MOID_T *m = add_mode (&TOP_MOID (&A68G_JOB), FLEX_SYMBOL, 0, NO_NODE, M_ROW_BOOL, NO_PACK);
248 HAS_ROWS (m) = A68G_TRUE;
249 M_FLEX_ROW_BOOL = m;
250 // [] BITS.
251 M_ROW_BITS = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_BITS, NO_PACK);
252 HAS_ROWS (M_ROW_BITS) = A68G_TRUE;
253 SLICE (M_ROW_BITS) = M_BITS;
254 // [] LONG BITS.
255 M_ROW_LONG_BITS = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_LONG_BITS, NO_PACK);
256 HAS_ROWS (M_ROW_LONG_BITS) = A68G_TRUE;
257 SLICE (M_ROW_LONG_BITS) = M_LONG_BITS;
258 // [] CHAR.
259 M_ROW_CHAR = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_CHAR, NO_PACK);
260 HAS_ROWS (M_ROW_CHAR) = A68G_TRUE;
261 SLICE (M_ROW_CHAR) = M_CHAR;
262 // [][] CHAR.
263 M_ROW_ROW_CHAR = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_ROW_CHAR, NO_PACK);
264 HAS_ROWS (M_ROW_ROW_CHAR) = A68G_TRUE;
265 SLICE (M_ROW_ROW_CHAR) = M_ROW_CHAR;
266 // MODE STRING = FLEX [] CHAR.
267 m = add_mode (&TOP_MOID (&A68G_JOB), FLEX_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK);
268 HAS_ROWS (m) = A68G_TRUE;
269 M_FLEX_ROW_CHAR = m;
270 EQUIVALENT (M_STRING) = m;
271 // REF [] CHAR.
272 M_REF_ROW_CHAR = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK);
273 NAME (M_REF_ROW_CHAR) = M_REF_CHAR;
274 // PROC [] CHAR.
275 M_PROC_ROW_CHAR = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK);
276 // REF STRING = REF FLEX [] CHAR.
277 M_REF_STRING = add_mode (&TOP_MOID (&A68G_JOB), REF_SYMBOL, 0, NO_NODE, EQUIVALENT (M_STRING), NO_PACK);
278 NAME (M_REF_STRING) = M_REF_CHAR;
279 DEFLEXED (M_REF_STRING) = M_REF_ROW_CHAR;
280 // [] STRING.
281 M_ROW_STRING = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_STRING, NO_PACK);
282 HAS_ROWS (M_ROW_STRING) = A68G_TRUE;
283 SLICE (M_ROW_STRING) = M_STRING;
284 DEFLEXED (M_ROW_STRING) = M_ROW_ROW_CHAR;
285 // PROC STRING.
286 M_PROC_STRING = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, 0, NO_NODE, M_STRING, NO_PACK);
287 DEFLEXED (M_PROC_STRING) = M_PROC_ROW_CHAR;
288 // COMPLEX.
289 PACK_T *z = NO_PACK;
290 (void) add_mode_to_pack (&z, M_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
291 (void) add_mode_to_pack (&z, M_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
292 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
293 EQUIVALENT (M_COMPLEX) = EQUIVALENT (M_COMPL) = m;
294 z = NO_PACK;
295 (void) add_mode_to_pack (&z, M_REF_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
296 (void) add_mode_to_pack (&z, M_REF_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
297 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
298 NAME (M_REF_COMPLEX) = NAME (M_REF_COMPL) = m;
299 // LONG COMPLEX.
300 z = NO_PACK;
301 (void) add_mode_to_pack (&z, M_LONG_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
302 (void) add_mode_to_pack (&z, M_LONG_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
303 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
304 EQUIVALENT (M_LONG_COMPLEX) = EQUIVALENT (M_LONG_COMPL) = m;
305 z = NO_PACK;
306 (void) add_mode_to_pack (&z, M_REF_LONG_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
307 (void) add_mode_to_pack (&z, M_REF_LONG_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
308 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
309 NAME (M_REF_LONG_COMPLEX) = NAME (M_REF_LONG_COMPL) = m;
310 // LONG_LONG COMPLEX.
311 z = NO_PACK;
312 (void) add_mode_to_pack (&z, M_LONG_LONG_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
313 (void) add_mode_to_pack (&z, M_LONG_LONG_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
314 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
315 EQUIVALENT (M_LONG_LONG_COMPLEX) = EQUIVALENT (M_LONG_LONG_COMPL) = m;
316 z = NO_PACK;
317 (void) add_mode_to_pack (&z, M_REF_LONG_LONG_REAL, TEXT (add_token (&A68G (top_token), "im")), NO_NODE);
318 (void) add_mode_to_pack (&z, M_REF_LONG_LONG_REAL, TEXT (add_token (&A68G (top_token), "re")), NO_NODE);
319 m = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
320 NAME (M_REF_LONG_LONG_COMPLEX) = NAME (M_REF_LONG_LONG_COMPL) = m;
321 // NUMBER.
322 z = NO_PACK;
323 (void) add_mode_to_pack (&z, M_INT, NO_TEXT, NO_NODE);
324 (void) add_mode_to_pack (&z, M_LONG_INT, NO_TEXT, NO_NODE);
325 (void) add_mode_to_pack (&z, M_LONG_LONG_INT, NO_TEXT, NO_NODE);
326 (void) add_mode_to_pack (&z, M_REAL, NO_TEXT, NO_NODE);
327 (void) add_mode_to_pack (&z, M_LONG_REAL, NO_TEXT, NO_NODE);
328 (void) add_mode_to_pack (&z, M_LONG_LONG_REAL, NO_TEXT, NO_NODE);
329 M_NUMBER = add_mode (&TOP_MOID (&A68G_JOB), UNION_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
330 // HEX_NUMBER.
331 z = NO_PACK;
332 (void) add_mode_to_pack (&z, M_BOOL, NO_TEXT, NO_NODE);
333 (void) add_mode_to_pack (&z, M_CHAR, NO_TEXT, NO_NODE);
334 (void) add_mode_to_pack (&z, M_INT, NO_TEXT, NO_NODE);
335 (void) add_mode_to_pack (&z, M_LONG_INT, NO_TEXT, NO_NODE);
336 (void) add_mode_to_pack (&z, M_REAL, NO_TEXT, NO_NODE);
337 (void) add_mode_to_pack (&z, M_LONG_REAL, NO_TEXT, NO_NODE);
338 (void) add_mode_to_pack (&z, M_BITS, NO_TEXT, NO_NODE);
339 (void) add_mode_to_pack (&z, M_LONG_BITS, NO_TEXT, NO_NODE);
340 M_HEX_NUMBER = add_mode (&TOP_MOID (&A68G_JOB), UNION_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
341 // SEMA.
342 z = NO_PACK;
343 (void) add_mode_to_pack (&z, M_REF_INT, NO_TEXT, NO_NODE);
344 EQUIVALENT (M_SEMA) = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
345 // PROC VOID.
346 z = NO_PACK;
347 M_PROC_VOID = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (z), NO_NODE, M_VOID, z);
348 // PROC (REAL) REAL.
349 z = NO_PACK;
350 (void) add_mode_to_pack (&z, M_REAL, NO_TEXT, NO_NODE);
351 M_PROC_REAL_REAL = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (z), NO_NODE, M_REAL, z);
352 // PROC (LONG_REAL) LONG_REAL.
353 z = NO_PACK;
354 (void) add_mode_to_pack (&z, M_LONG_REAL, NO_TEXT, NO_NODE);
355 M_PROC_LONG_REAL_LONG_REAL = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (z), NO_NODE, M_LONG_REAL, z);
356 // IO: PROC (REF FILE) BOOL.
357 z = NO_PACK;
358 (void) add_mode_to_pack (&z, M_REF_FILE, NO_TEXT, NO_NODE);
359 M_PROC_REF_FILE_BOOL = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (z), NO_NODE, M_BOOL, z);
360 // IO: PROC (REF FILE) VOID.
361 z = NO_PACK;
362 (void) add_mode_to_pack (&z, M_REF_FILE, NO_TEXT, NO_NODE);
363 M_PROC_REF_FILE_VOID = add_mode (&TOP_MOID (&A68G_JOB), PROC_SYMBOL, count_pack_members (z), NO_NODE, M_VOID, z);
364 // IO: SIMPLIN and SIMPLOUT.
365 M_SIMPLIN = add_mode (&TOP_MOID (&A68G_JOB), IN_TYPE_MODE, 0, NO_NODE, NO_MOID, NO_PACK);
366 M_ROW_SIMPLIN = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_SIMPLIN, NO_PACK);
367 SLICE (M_ROW_SIMPLIN) = M_SIMPLIN;
368 M_SIMPLOUT = add_mode (&TOP_MOID (&A68G_JOB), OUT_TYPE_MODE, 0, NO_NODE, NO_MOID, NO_PACK);
369 M_ROW_SIMPLOUT = add_mode (&TOP_MOID (&A68G_JOB), ROW_SYMBOL, 1, NO_NODE, M_SIMPLOUT, NO_PACK);
370 SLICE (M_ROW_SIMPLOUT) = M_SIMPLOUT;
371 // PIPE.
372 z = NO_PACK;
373 (void) add_mode_to_pack (&z, M_INT, TEXT (add_token (&A68G (top_token), "pid")), NO_NODE);
374 (void) add_mode_to_pack (&z, M_REF_FILE, TEXT (add_token (&A68G (top_token), "write")), NO_NODE);
375 (void) add_mode_to_pack (&z, M_REF_FILE, TEXT (add_token (&A68G (top_token), "read")), NO_NODE);
376 EQUIVALENT (M_PIPE) = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
377 z = NO_PACK;
378 (void) add_mode_to_pack (&z, M_REF_INT, TEXT (add_token (&A68G (top_token), "pid")), NO_NODE);
379 (void) add_mode_to_pack (&z, M_REF_REF_FILE, TEXT (add_token (&A68G (top_token), "write")), NO_NODE);
380 (void) add_mode_to_pack (&z, M_REF_REF_FILE, TEXT (add_token (&A68G (top_token), "read")), NO_NODE);
381 NAME (M_REF_PIPE) = add_mode (&TOP_MOID (&A68G_JOB), STRUCT_SYMBOL, count_pack_members (z), NO_NODE, NO_MOID, z);
382 }
383
384 //! @brief Set up standenv - general RR but not transput.
385
386 void stand_prelude (void)
387 {
388 // Identifiers.
389 a68g_id2 (A68G_STD, "longlongpi", "qpi", M_LONG_LONG_REAL, genie_pi_mp);
390 //
391 a68g_idf (A68G_EXT, "clock", M_REAL, genie_cputime);
392 a68g_idf (A68G_EXT, "cputime", M_REAL, genie_cputime);
393 a68g_idf (A68G_EXT, "seconds", M_REAL, genie_cputime);
394 a68g_idf (A68G_STD, "bitslengths", M_INT, genie_bits_lengths);
395 a68g_idf (A68G_STD, "bitsshorths", M_INT, genie_bits_shorths);
396 a68g_idf (A68G_STD, "bitswidth", M_INT, genie_bits_width);
397 a68g_idf (A68G_STD, "byteslengths", M_INT, genie_bytes_lengths);
398 a68g_idf (A68G_STD, "bytesshorths", M_INT, genie_bytes_shorths);
399 a68g_idf (A68G_STD, "byteswidth", M_INT, genie_bytes_width);
400 a68g_idf (A68G_STD, "compllengths", M_INT, genie_complex_lengths);
401 a68g_idf (A68G_STD, "complshorths", M_INT, genie_complex_shorths);
402 a68g_idf (A68G_STD, "expwidth", M_INT, genie_exp_width);
403 a68g_idf (A68G_STD, "infinity", M_REAL, genie_infinity_real);
404 a68g_idf (A68G_STD, "inf", M_REAL, genie_infinity_real);
405 a68g_idf (A68G_STD, "intlengths", M_INT, genie_int_lengths);
406 a68g_idf (A68G_STD, "intshorths", M_INT, genie_int_shorths);
407 a68g_idf (A68G_STD, "intwidth", M_INT, genie_int_width);
408 a68g_idf (A68G_STD, "longbitswidth", M_INT, genie_long_bits_width);
409 a68g_idf (A68G_STD, "longbyteswidth", M_INT, genie_long_bytes_width);
410 a68g_idf (A68G_STD, "longexpwidth", M_INT, genie_long_exp_width);
411 a68g_idf (A68G_STD, "longintwidth", M_INT, genie_long_int_width);
412 a68g_idf (A68G_STD, "longlongexpwidth", M_INT, genie_long_mp_exp_width);
413 a68g_idf (A68G_STD, "longlonginfinity", M_LONG_LONG_REAL, genie_infinity_mp);
414 a68g_idf (A68G_STD, "longlonginf", M_LONG_LONG_REAL, genie_infinity_mp);
415 a68g_idf (A68G_STD, "longlongintwidth", M_INT, genie_long_mp_int_width);
416 a68g_idf (A68G_STD, "longlongmaxint", M_LONG_LONG_INT, genie_long_mp_max_int);
417 a68g_idf (A68G_STD, "longlongmaxreal", M_LONG_LONG_REAL, genie_long_mp_max_real);
418 a68g_idf (A68G_STD, "longlongmininf", M_LONG_LONG_REAL, genie_minus_infinity_mp);
419 a68g_idf (A68G_STD, "longlongminreal", M_LONG_LONG_REAL, genie_long_mp_min_real);
420 a68g_idf (A68G_STD, "longlongminusinfinity", M_LONG_LONG_REAL, genie_minus_infinity_mp);
421 a68g_idf (A68G_STD, "longlongrealwidth", M_INT, genie_long_mp_real_width);
422 a68g_idf (A68G_STD, "longlongsmallreal", M_LONG_LONG_REAL, genie_long_mp_small_real);
423 a68g_idf (A68G_STD, "longrealwidth", M_INT, genie_long_real_width);
424 a68g_idf (A68G_STD, "maxabschar", M_INT, genie_max_abs_char);
425 a68g_idf (A68G_STD, "maxbits", M_BITS, genie_max_bits);
426 a68g_idf (A68G_STD, "maxint", M_INT, genie_max_int);
427 a68g_idf (A68G_STD, "maxreal", M_REAL, genie_max_real);
428 a68g_idf (A68G_STD, "mininf", M_REAL, genie_minus_infinity_real);
429 a68g_idf (A68G_STD, "minreal", M_REAL, genie_min_real);
430 a68g_idf (A68G_STD, "minusinfinity", M_REAL, genie_minus_infinity_real);
431 a68g_idf (A68G_STD, "mpradix", M_INT, genie_mp_radix);
432 a68g_idf (A68G_STD, "nan", M_REAL, genie_nan_real);
433 a68g_idf (A68G_STD, "pi", M_REAL, genie_pi);
434 a68g_idf (A68G_STD, "reallengths", M_INT, genie_real_lengths);
435 a68g_idf (A68G_STD, "realshorths", M_INT, genie_real_shorths);
436 a68g_idf (A68G_STD, "realwidth", M_INT, genie_real_width);
437 a68g_idf (A68G_STD, "smallreal", M_REAL, genie_small_real);
438 #if defined (BUILD_LINUX)
439 a68g_idf (A68G_EXT, "wallclock", M_REAL, genie_walltime);
440 a68g_idf (A68G_EXT, "wallseconds", M_REAL, genie_walltime);
441 a68g_idf (A68G_EXT, "walltime", M_REAL, genie_walltime);
442 #endif
443 MOID_T *m = a68g_proc (M_VOID, A68G_MCACHE (proc_void), NO_MOID);
444 a68g_idf (A68G_EXT, "blocks", A68G_MCACHE (proc_int), genie_block);
445 a68g_idf (A68G_EXT, "collections", A68G_MCACHE (proc_int), genie_garbage_collections);
446 a68g_idf (A68G_EXT, "collectseconds", A68G_MCACHE (proc_real), genie_garbage_seconds);
447 a68g_idf (A68G_EXT, "garbage", A68G_MCACHE (proc_int), genie_garbage_freed);
448 a68g_idf (A68G_EXT, "garbagecollections", A68G_MCACHE (proc_int), genie_garbage_collections);
449 a68g_idf (A68G_EXT, "garbagefreed", A68G_MCACHE (proc_int), genie_garbage_freed);
450 a68g_idf (A68G_EXT, "garbagerefused", A68G_MCACHE (proc_int), genie_garbage_refused);
451 a68g_idf (A68G_EXT, "garbageseconds", A68G_MCACHE (proc_real), genie_garbage_seconds);
452 a68g_idf (A68G_EXT, "ongcevent", m, genie_on_gc_event);
453 a68g_idf (A68G_EXT, "sweeps", A68G_MCACHE (proc_int), genie_garbage_collections);
454 a68g_idf (A68G_EXT, "sweepsrefused", A68G_MCACHE (proc_int), genie_garbage_refused);
455 a68g_idf (A68G_EXT, "stackpointer", M_INT, genie_stack_pointer);
456 a68g_idf (A68G_EXT, "systemstackpointer", M_INT, genie_system_stack_pointer);
457 a68g_idf (A68G_EXT, "systemstacksize", M_INT, genie_system_stack_size);
458 a68g_idf (A68G_EXT, "actualstacksize", M_INT, genie_stack_pointer);
459 a68g_idf (A68G_EXT, "heappointer", M_INT, genie_system_heap_pointer);
460 a68g_idf (A68G_EXT, "systemheappointer", M_INT, genie_system_heap_pointer);
461 a68g_idf (A68G_EXT, "gcheap", A68G_MCACHE (proc_void), genie_gc_heap);
462 a68g_idf (A68G_EXT, "sweepheap", A68G_MCACHE (proc_void), genie_gc_heap);
463 a68g_idf (A68G_EXT, "preemptivegc", A68G_MCACHE (proc_void), genie_preemptive_gc_heap);
464 a68g_idf (A68G_EXT, "preemptivesweep", A68G_MCACHE (proc_void), genie_preemptive_gc_heap);
465 a68g_idf (A68G_EXT, "preemptivesweepheap", A68G_MCACHE (proc_void), genie_preemptive_gc_heap);
466 a68g_idf (A68G_EXT, "backtrace", A68G_MCACHE (proc_void), genie_backtrace);
467 a68g_idf (A68G_EXT, "break", A68G_MCACHE (proc_void), genie_break);
468 a68g_idf (A68G_EXT, "debug", A68G_MCACHE (proc_void), genie_debug);
469 a68g_idf (A68G_EXT, "monitor", A68G_MCACHE (proc_void), genie_debug);
470 m = a68g_proc (M_VOID, M_STRING, NO_MOID);
471 a68g_idf (A68G_EXT, "abend", m, genie_abend);
472 m = a68g_proc (M_STRING, M_STRING, NO_MOID);
473 a68g_idf (A68G_EXT, "evaluate", m, genie_evaluate);
474 m = a68g_proc (M_INT, M_STRING, NO_MOID);
475 a68g_idf (A68G_EXT, "system", m, genie_system);
476 m = A68G_MCACHE (proc_int_int);
477 a68g_idf (A68G_EXT, "sleep", m, genie_sleep);
478 // Machine environ parameters.
479 a68g_idf (A68G_EXT, "i32mach", A68G_MCACHE (proc_int_int), genie_i32mach);
480 a68g_idf (A68G_EXT, "r64mach", A68G_MCACHE (proc_int_real), genie_i32mach);
481 #if (A68G_LEVEL >= 3)
482 m = a68g_proc (M_LONG_INT, M_INT, NO_MOID);
483 a68g_idf (A68G_EXT, "i64mach", m, genie_i64mach);
484 m = a68g_proc (M_LONG_REAL, M_INT, NO_MOID);
485 a68g_idf (A68G_EXT, "r128mach", m, genie_r128mach);
486 #endif
487 // BITS procedures.
488 m = a68g_proc (M_BITS, M_ROW_BOOL, NO_MOID);
489 a68g_idf (A68G_STD, "bitspack", m, genie_bits_pack);
490 // RNG procedures.
491 m = a68g_proc (M_VOID, M_INT, NO_MOID);
492 a68g_idf (A68G_STD, "firstrandom", m, genie_first_random);
493 m = A68G_MCACHE (proc_real);
494 a68g_idf (A68G_STD, "nextrandom", m, genie_next_random);
495 a68g_idf (A68G_STD, "random", m, genie_next_random);
496 a68g_idf (A68G_STD, "rnd", m, genie_next_rnd);
497 m = a68g_proc (M_LONG_LONG_REAL, NO_MOID);
498 a68g_idf (A68G_STD, "longlongnextrandom", m, genie_long_next_random);
499 a68g_idf (A68G_STD, "longlongrandom", m, genie_long_next_random);
500 // Priorities.
501 a68g_prio ("+:=", 1);
502 a68g_prio ("-:=", 1);
503 a68g_prio ("*:=", 1);
504 a68g_prio ("/:=", 1);
505 a68g_prio ("%:=", 1);
506 a68g_prio ("%*:=", 1);
507 a68g_prio ("+=:", 1);
508 a68g_prio ("PLUSAB", 1);
509 a68g_prio ("MINUSAB", 1);
510 a68g_prio ("TIMESAB", 1);
511 a68g_prio ("DIVAB", 1);
512 a68g_prio ("OVERAB", 1);
513 a68g_prio ("MODAB", 1);
514 a68g_prio ("PLUSTO", 1);
515 a68g_prio ("OR", 2);
516 a68g_prio ("AND", 3);
517 a68g_prio ("&", 3);
518 a68g_prio ("XOR", 3);
519 a68g_prio ("=", 4);
520 a68g_prio ("/=", 4);
521 a68g_prio ("~=", 4);
522 a68g_prio ("^=", 4);
523 a68g_prio ("<", 5);
524 a68g_prio ("<=", 5);
525 a68g_prio (">", 5);
526 a68g_prio (">=", 5);
527 a68g_prio ("EQ", 4);
528 a68g_prio ("NE", 4);
529 a68g_prio ("LT", 5);
530 a68g_prio ("LE", 5);
531 a68g_prio ("GT", 5);
532 a68g_prio ("GE", 5);
533 a68g_prio ("+", 6);
534 a68g_prio ("-", 6);
535 a68g_prio ("*", 7);
536 a68g_prio ("/", 7);
537 a68g_prio ("OVER", 7);
538 a68g_prio ("%", 7);
539 a68g_prio ("MOD", 7);
540 a68g_prio ("%*", 7);
541 a68g_prio ("ELEM", 7);
542 a68g_prio ("SET", 7);
543 a68g_prio ("CLEAR", 7);
544 a68g_prio ("**", 8);
545 a68g_prio ("SHL", 8);
546 a68g_prio ("SHR", 8);
547 a68g_prio ("ROL", 8);
548 a68g_prio ("ROR", 8);
549 a68g_prio ("UP", 8);
550 a68g_prio ("DOWN", 8);
551 a68g_prio ("^", 8);
552 a68g_prio ("ELEMS", 8);
553 a68g_prio ("LWB", 8);
554 a68g_prio ("UPB", 8);
555 a68g_prio ("SORT", 8);
556 a68g_prio ("I", 9);
557 a68g_prio ("+*", 9);
558 // INT ops.
559 m = a68g_proc (M_INT, M_INT, NO_MOID);
560 a68g_op (A68G_STD, "+", m, genie_idle);
561 a68g_op (A68G_STD, "-", m, genie_minus_int);
562 a68g_op (A68G_STD, "ABS", m, genie_abs_int);
563 a68g_op (A68G_STD, "SIGN", m, genie_sign_int);
564 m = a68g_proc (M_BOOL, M_INT, NO_MOID);
565 a68g_op (A68G_STD, "ODD", m, genie_odd_int);
566 m = a68g_proc (M_BOOL, M_INT, M_INT, NO_MOID);
567 a68g_op (A68G_STD, "=", m, genie_eq_int);
568 a68g_op (A68G_STD, "/=", m, genie_ne_int);
569 a68g_op (A68G_STD, "~=", m, genie_ne_int);
570 a68g_op (A68G_STD, "^=", m, genie_ne_int);
571 a68g_op (A68G_STD, "<", m, genie_lt_int);
572 a68g_op (A68G_STD, "<=", m, genie_le_int);
573 a68g_op (A68G_STD, ">", m, genie_gt_int);
574 a68g_op (A68G_STD, ">=", m, genie_ge_int);
575 a68g_op (A68G_STD, "EQ", m, genie_eq_int);
576 a68g_op (A68G_STD, "NE", m, genie_ne_int);
577 a68g_op (A68G_STD, "LT", m, genie_lt_int);
578 a68g_op (A68G_STD, "LE", m, genie_le_int);
579 a68g_op (A68G_STD, "GT", m, genie_gt_int);
580 a68g_op (A68G_STD, "GE", m, genie_ge_int);
581 m = a68g_proc (M_INT, M_INT, M_INT, NO_MOID);
582 a68g_op (A68G_STD, "+", m, genie_add_int);
583 a68g_op (A68G_STD, "-", m, genie_sub_int);
584 a68g_op (A68G_STD, "*", m, genie_mul_int);
585 a68g_op (A68G_STD, "OVER", m, genie_over_int);
586 a68g_op (A68G_STD, "%", m, genie_over_int);
587 a68g_op (A68G_STD, "MOD", m, genie_mod_int);
588 a68g_op (A68G_STD, "%*", m, genie_mod_int);
589 a68g_op (A68G_STD, "**", m, genie_pow_int);
590 a68g_op (A68G_STD, "UP", m, genie_pow_int);
591 a68g_op (A68G_STD, "^", m, genie_pow_int);
592 m = a68g_proc (M_REAL, M_INT, M_INT, NO_MOID);
593 a68g_op (A68G_STD, "/", m, genie_div_int);
594 m = a68g_proc (M_REF_INT, M_REF_INT, M_INT, NO_MOID);
595 a68g_op (A68G_STD, "+:=", m, genie_plusab_int);
596 a68g_op (A68G_STD, "-:=", m, genie_minusab_int);
597 a68g_op (A68G_STD, "*:=", m, genie_timesab_int);
598 a68g_op (A68G_STD, "%:=", m, genie_overab_int);
599 a68g_op (A68G_STD, "%*:=", m, genie_modab_int);
600 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_int);
601 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_int);
602 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_int);
603 a68g_op (A68G_STD, "OVERAB", m, genie_overab_int);
604 a68g_op (A68G_STD, "MODAB", m, genie_modab_int);
605 // REAL ops.
606 m = A68G_MCACHE (proc_real_real);
607 a68g_op (A68G_STD, "+", m, genie_idle);
608 a68g_op (A68G_STD, "-", m, genie_minus_real);
609 a68g_op (A68G_STD, "ABS", m, genie_abs_real);
610 a68g_op (A68G_EXT, "FRAC", m, genie_frac_real);
611 m = a68g_proc (M_INT, M_REAL, NO_MOID);
612 a68g_op (A68G_STD, "SIGN", m, genie_sign_real);
613 a68g_op (A68G_EXT, "ROUND", m, genie_round_real);
614 a68g_op (A68G_EXT, "NINT", m, genie_round_real);
615 a68g_op (A68G_EXT, "FLOOR", m, genie_entier_real);
616 a68g_op (A68G_EXT, "CEIL", m, genie_ceil_real);
617 a68g_op (A68G_STD, "ENTIER", m, genie_entier_real);
618 a68g_op (A68G_EXT, "FIX", m, genie_trunc_real);
619 a68g_op (A68G_EXT, "TRUNC", m, genie_trunc_real);
620 m = a68g_proc (M_BOOL, M_REAL, M_REAL, NO_MOID);
621 a68g_op (A68G_STD, "=", m, genie_eq_real);
622 a68g_op (A68G_STD, "/=", m, genie_ne_real);
623 a68g_op (A68G_STD, "~=", m, genie_ne_real);
624 a68g_op (A68G_STD, "^=", m, genie_ne_real);
625 a68g_op (A68G_STD, "<", m, genie_lt_real);
626 a68g_op (A68G_STD, "<=", m, genie_le_real);
627 a68g_op (A68G_STD, ">", m, genie_gt_real);
628 a68g_op (A68G_STD, ">=", m, genie_ge_real);
629 a68g_op (A68G_STD, "EQ", m, genie_eq_real);
630 a68g_op (A68G_STD, "NE", m, genie_ne_real);
631 a68g_op (A68G_STD, "LT", m, genie_lt_real);
632 a68g_op (A68G_STD, "LE", m, genie_le_real);
633 a68g_op (A68G_STD, "GT", m, genie_gt_real);
634 a68g_op (A68G_STD, "GE", m, genie_ge_real);
635 m = A68G_MCACHE (proc_real_real_real);
636 a68g_op (A68G_STD, "+", m, genie_add_real);
637 a68g_op (A68G_STD, "-", m, genie_sub_real);
638 a68g_op (A68G_STD, "*", m, genie_mul_real);
639 a68g_op (A68G_STD, "/", m, genie_div_real);
640 a68g_op (A68G_STD, "**", m, genie_pow_real);
641 a68g_op (A68G_STD, "UP", m, genie_pow_real);
642 a68g_op (A68G_STD, "^", m, genie_pow_real);
643 m = a68g_proc (M_REAL, M_REAL, M_INT, NO_MOID);
644 a68g_op (A68G_STD, "**", m, genie_pow_real_int);
645 a68g_op (A68G_STD, "UP", m, genie_pow_real_int);
646 a68g_op (A68G_STD, "^", m, genie_pow_real_int);
647 m = a68g_proc (M_REF_REAL, M_REF_REAL, M_REAL, NO_MOID);
648 a68g_op (A68G_STD, "+:=", m, genie_plusab_real);
649 a68g_op (A68G_STD, "-:=", m, genie_minusab_real);
650 a68g_op (A68G_STD, "*:=", m, genie_timesab_real);
651 a68g_op (A68G_STD, "/:=", m, genie_divab_real);
652 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_real);
653 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_real);
654 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_real);
655 a68g_op (A68G_STD, "DIVAB", m, genie_divab_real);
656 // Procedures
657 m = A68G_MCACHE (proc_real_real);
658 a68g_id2 (A68G_EXT, "arccosdg", "acosdg", m, genie_acosdg_real);
659 a68g_id2 (A68G_EXT, "arccosh", "acosh", m, genie_acosh_real);
660 a68g_id2 (A68G_EXT, "arccot", "acot", m, genie_acot_real);
661 a68g_id2 (A68G_EXT, "arccotdg", "acotdg", m, genie_acotdg_real);
662 a68g_id2 (A68G_EXT, "arccsc", "acsc", m, genie_acsc_real);
663 a68g_id2 (A68G_EXT, "arccscdg", "acscdg", m, genie_acscdg_real);
664 a68g_id2 (A68G_EXT, "arcsec", "asec", m, genie_asec_real);
665 a68g_id2 (A68G_EXT, "arcsecdg", "asecdg", m, genie_asecdg_real);
666 a68g_id2 (A68G_EXT, "arcsindg", "asindg", m, genie_asindg_real);
667 a68g_id2 (A68G_EXT, "arcsinh", "asinh", m, genie_asinh_real);
668 a68g_id2 (A68G_EXT, "arctandg", "atandg", m, genie_atandg_real);
669 a68g_id2 (A68G_EXT, "arctanh", "atanh", m, genie_atanh_real);
670 a68g_id2 (A68G_STD, "arccos", "acos", m, genie_acos_real);
671 a68g_id2 (A68G_STD, "arcsin", "asin", m, genie_asin_real);
672 a68g_id2 (A68G_STD, "arctan", "atan", m, genie_atan_real);
673 a68g_idf (A68G_EXT, "cas", m, genie_cas_real);
674 a68g_idf (A68G_EXT, "cbrt", m, genie_curt_real);
675 a68g_idf (A68G_EXT, "cosdg", m, genie_cosdg_real);
676 a68g_idf (A68G_EXT, "cosh", m, genie_cosh_real);
677 a68g_idf (A68G_EXT, "cospi", m, genie_cospi_real);
678 a68g_idf (A68G_EXT, "cotdg", m, genie_cotdg_real);
679 a68g_idf (A68G_EXT, "cot", m, genie_cot_real);
680 a68g_idf (A68G_EXT, "cotpi", m, genie_cotpi_real);
681 a68g_idf (A68G_EXT, "cscdg", m, genie_cscdg_real);
682 a68g_idf (A68G_EXT, "csc", m, genie_csc_real);
683 a68g_idf (A68G_EXT, "curt", m, genie_curt_real);
684 a68g_idf (A68G_EXT, "erfc", m, genie_erfc_real);
685 a68g_idf (A68G_EXT, "erf", m, genie_erf_real);
686 a68g_idf (A68G_EXT, "gamma", m, genie_gamma_real);
687 a68g_idf (A68G_EXT, "inverfc", m, genie_inverfc_real);
688 a68g_idf (A68G_EXT, "inverf", m, genie_inverf_real);
689 a68g_idf (A68G_EXT, "inverseerfc", m, genie_inverfc_real);
690 a68g_idf (A68G_EXT, "inverseerf", m, genie_inverf_real);
691 a68g_idf (A68G_EXT, "ln1p", m, genie_ln1p_real);
692 a68g_idf (A68G_EXT, "lngamma", m, genie_ln_gamma_real);
693 a68g_idf (A68G_EXT, "secdg", m, genie_secdg_real);
694 a68g_idf (A68G_EXT, "sec", m, genie_sec_real);
695 a68g_idf (A68G_EXT, "sindg", m, genie_sindg_real);
696 a68g_idf (A68G_EXT, "sinh", m, genie_sinh_real);
697 a68g_idf (A68G_EXT, "sinpi", m, genie_sinpi_real);
698 a68g_idf (A68G_EXT, "tandg", m, genie_tandg_real);
699 a68g_idf (A68G_EXT, "tanh", m, genie_tanh_real);
700 a68g_idf (A68G_EXT, "tanpi", m, genie_tanpi_real);
701 a68g_idf (A68G_STD, "cos", m, genie_cos_real);
702 a68g_idf (A68G_STD, "exp", m, genie_exp_real);
703 a68g_idf (A68G_STD, "ln", m, genie_ln_real);
704 a68g_idf (A68G_STD, "log", m, genie_log_real);
705 a68g_idf (A68G_STD, "sin", m, genie_sin_real);
706 a68g_idf (A68G_STD, "sqrt", m, genie_sqrt_real);
707 a68g_idf (A68G_STD, "tan", m, genie_tan_real);
708 // Miscellaneous.
709 a68g_id2 (A68G_EXT, "arctan2", "atan2", A68G_MCACHE (proc_real_real_real), genie_atan2_real);
710 a68g_id2 (A68G_EXT, "arctan2dg", "atan2dg", A68G_MCACHE (proc_real_real_real), genie_atan2dg_real);
711 a68g_idf (A68G_EXT, "beta", A68G_MCACHE (proc_real_real_real), genie_beta_real);
712 a68g_idf (A68G_EXT, "betainc", A68G_MCACHE (proc_real_real_real_real), genie_beta_inc_cf_real);
713 a68g_idf (A68G_EXT, "choose", A68G_MCACHE (proc_int_int_real), genie_choose_real);
714 a68g_idf (A68G_EXT, "fact", A68G_MCACHE (proc_int_real), genie_fact_real);
715 a68g_idf (A68G_EXT, "gammainc", A68G_MCACHE (proc_real_real_real), genie_gamma_inc_h_real);
716 a68g_idf (A68G_EXT, "gammaincf", A68G_MCACHE (proc_real_real_real), genie_gamma_inc_f_real);
717 a68g_idf (A68G_EXT, "gammaincg", A68G_MCACHE (proc_real_real_real_real_real), genie_gamma_inc_g_real);
718 a68g_idf (A68G_EXT, "gammaincgf", A68G_MCACHE (proc_real_real_real), genie_gamma_inc_gf_real);
719 a68g_idf (A68G_EXT, "lje126", A68G_MCACHE (proc_real_real_real_real), genie_lj_e_12_6);
720 a68g_idf (A68G_EXT, "ljf126", A68G_MCACHE (proc_real_real_real_real), genie_lj_f_12_6);
721 a68g_idf (A68G_EXT, "lnbeta", A68G_MCACHE (proc_real_real_real), genie_ln_beta_real);
722 a68g_idf (A68G_EXT, "lnchoose", A68G_MCACHE (proc_int_int_real), genie_ln_choose_real);
723 a68g_idf (A68G_EXT, "lnfact", A68G_MCACHE (proc_int_real), genie_ln_fact_real);
724 // COMPLEX ops.
725 m = a68g_proc (M_COMPLEX, M_REAL, M_REAL, NO_MOID);
726 a68g_op (A68G_STD, "I", m, genie_i_complex);
727 a68g_op (A68G_STD, "+*", m, genie_i_complex);
728 m = a68g_proc (M_COMPLEX, M_INT, M_INT, NO_MOID);
729 a68g_op (A68G_STD, "I", m, genie_i_int_complex);
730 a68g_op (A68G_STD, "+*", m, genie_i_int_complex);
731 m = a68g_proc (M_REAL, M_COMPLEX, NO_MOID);
732 a68g_op (A68G_STD, "RE", m, genie_re_complex);
733 a68g_op (A68G_STD, "IM", m, genie_im_complex);
734 a68g_op (A68G_STD, "ABS", m, genie_abs_complex);
735 a68g_op (A68G_STD, "ARG", m, genie_arg_complex);
736 m = A68G_MCACHE (proc_complex_complex);
737 a68g_op (A68G_STD, "+", m, genie_idle);
738 a68g_op (A68G_STD, "-", m, genie_minus_complex);
739 a68g_op (A68G_STD, "CONJ", m, genie_conj_complex);
740 m = a68g_proc (M_BOOL, M_COMPLEX, M_COMPLEX, NO_MOID);
741 a68g_op (A68G_STD, "=", m, genie_eq_complex);
742 a68g_op (A68G_STD, "/=", m, genie_ne_complex);
743 a68g_op (A68G_STD, "~=", m, genie_ne_complex);
744 a68g_op (A68G_STD, "^=", m, genie_ne_complex);
745 a68g_op (A68G_STD, "EQ", m, genie_eq_complex);
746 a68g_op (A68G_STD, "NE", m, genie_ne_complex);
747 m = a68g_proc (M_COMPLEX, M_COMPLEX, M_COMPLEX, NO_MOID);
748 a68g_op (A68G_STD, "+", m, genie_add_complex);
749 a68g_op (A68G_STD, "-", m, genie_sub_complex);
750 a68g_op (A68G_STD, "*", m, genie_mul_complex);
751 a68g_op (A68G_STD, "/", m, genie_div_complex);
752 m = a68g_proc (M_COMPLEX, M_COMPLEX, M_INT, NO_MOID);
753 a68g_op (A68G_STD, "**", m, genie_pow_complex_int);
754 a68g_op (A68G_STD, "UP", m, genie_pow_complex_int);
755 a68g_op (A68G_STD, "^", m, genie_pow_complex_int);
756 m = a68g_proc (M_REF_COMPLEX, M_REF_COMPLEX, M_COMPLEX, NO_MOID);
757 a68g_op (A68G_STD, "+:=", m, genie_plusab_complex);
758 a68g_op (A68G_STD, "-:=", m, genie_minusab_complex);
759 a68g_op (A68G_STD, "*:=", m, genie_timesab_complex);
760 a68g_op (A68G_STD, "/:=", m, genie_divab_complex);
761 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_complex);
762 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_complex);
763 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_complex);
764 a68g_op (A68G_STD, "DIVAB", m, genie_divab_complex);
765 m = A68G_MCACHE (proc_complex_complex);
766 a68g_id2 (A68G_EXT, "complexarccosh", "cacosh", m, genie_acosh_complex);
767 a68g_id2 (A68G_EXT, "complexarccos", "cacos", m, genie_acos_complex);
768 a68g_id2 (A68G_EXT, "complexarcsinh", "casinh", m, genie_asinh_complex);
769 a68g_id2 (A68G_EXT, "complexarcsin", "casin", m, genie_asin_complex);
770 a68g_id2 (A68G_EXT, "complexarctanh", "catanh", m, genie_atanh_complex);
771 a68g_id2 (A68G_EXT, "complexarctan", "catan", m, genie_atan_complex);
772 a68g_id2 (A68G_EXT, "complexcosh", "ccosh", m, genie_cosh_complex);
773 a68g_id2 (A68G_EXT, "complexcos", "ccos", m, genie_cos_complex);
774 a68g_id2 (A68G_EXT, "complexexp", "cexp", m, genie_exp_complex);
775 a68g_id2 (A68G_EXT, "complexln", "cln", m, genie_ln_complex);
776 a68g_id2 (A68G_EXT, "complexsinh", "csinh", m, genie_sinh_complex);
777 a68g_id2 (A68G_EXT, "complexsin", "csin", m, genie_sin_complex);
778 a68g_id2 (A68G_EXT, "complexsqrt", "csqrt", m, genie_sqrt_complex);
779 a68g_id2 (A68G_EXT, "complextanh", "ctanh", m, genie_tanh_complex);
780 a68g_id2 (A68G_EXT, "complextan", "ctan", m, genie_tan_complex);
781 // BOOL ops.
782 m = a68g_proc (M_BOOL, M_BOOL, NO_MOID);
783 a68g_op (A68G_STD, "NOT", m, genie_not_bool);
784 a68g_op (A68G_STD, "~", m, genie_not_bool);
785 m = a68g_proc (M_INT, M_BOOL, NO_MOID);
786 a68g_op (A68G_STD, "ABS", m, genie_abs_bool);
787 m = a68g_proc (M_BOOL, M_BOOL, M_BOOL, NO_MOID);
788 a68g_op (A68G_STD, "OR", m, genie_or_bool);
789 a68g_op (A68G_STD, "AND", m, genie_and_bool);
790 a68g_op (A68G_STD, "&", m, genie_and_bool);
791 a68g_op (A68G_EXT, "XOR", m, genie_xor_bool);
792 a68g_op (A68G_STD, "=", m, genie_eq_bool);
793 a68g_op (A68G_STD, "/=", m, genie_ne_bool);
794 a68g_op (A68G_STD, "~=", m, genie_ne_bool);
795 a68g_op (A68G_STD, "^=", m, genie_ne_bool);
796 a68g_op (A68G_STD, "EQ", m, genie_eq_bool);
797 a68g_op (A68G_STD, "NE", m, genie_ne_bool);
798 // CHAR ops.
799 m = a68g_proc (M_BOOL, M_CHAR, M_CHAR, NO_MOID);
800 a68g_op (A68G_STD, "=", m, genie_eq_char);
801 a68g_op (A68G_STD, "/=", m, genie_ne_char);
802 a68g_op (A68G_STD, "~=", m, genie_ne_char);
803 a68g_op (A68G_STD, "^=", m, genie_ne_char);
804 a68g_op (A68G_STD, "<", m, genie_lt_char);
805 a68g_op (A68G_STD, "<=", m, genie_le_char);
806 a68g_op (A68G_STD, ">", m, genie_gt_char);
807 a68g_op (A68G_STD, ">=", m, genie_ge_char);
808 a68g_op (A68G_STD, "EQ", m, genie_eq_char);
809 a68g_op (A68G_STD, "NE", m, genie_ne_char);
810 a68g_op (A68G_STD, "LT", m, genie_lt_char);
811 a68g_op (A68G_STD, "LE", m, genie_le_char);
812 a68g_op (A68G_STD, "GT", m, genie_gt_char);
813 a68g_op (A68G_STD, "GE", m, genie_ge_char);
814 m = a68g_proc (M_INT, M_CHAR, NO_MOID);
815 a68g_op (A68G_STD, "ABS", m, genie_abs_char);
816 m = a68g_proc (M_CHAR, M_INT, NO_MOID);
817 a68g_op (A68G_STD, "REPR", m, genie_repr_char);
818 m = a68g_proc (M_BOOL, M_CHAR, NO_MOID);
819 a68g_idf (A68G_EXT, "isalnum", m, genie_is_alnum);
820 a68g_idf (A68G_EXT, "isalpha", m, genie_is_alpha);
821 a68g_idf (A68G_EXT, "iscntrl", m, genie_is_cntrl);
822 a68g_idf (A68G_EXT, "isdigit", m, genie_is_digit);
823 a68g_idf (A68G_EXT, "isgraph", m, genie_is_graph);
824 a68g_idf (A68G_EXT, "islower", m, genie_is_lower);
825 a68g_idf (A68G_EXT, "isprint", m, genie_is_print);
826 a68g_idf (A68G_EXT, "ispunct", m, genie_is_punct);
827 a68g_idf (A68G_EXT, "isspace", m, genie_is_space);
828 a68g_idf (A68G_EXT, "isupper", m, genie_is_upper);
829 a68g_idf (A68G_EXT, "isxdigit", m, genie_is_xdigit);
830 m = a68g_proc (M_CHAR, M_CHAR, NO_MOID);
831 a68g_idf (A68G_EXT, "tolower", m, genie_to_lower);
832 a68g_idf (A68G_EXT, "toupper", m, genie_to_upper);
833 // BITS ops.
834 m = a68g_proc (M_INT, M_BITS, NO_MOID);
835 a68g_op (A68G_STD, "ABS", m, genie_abs_bits);
836 m = a68g_proc (M_BITS, M_INT, NO_MOID);
837 a68g_op (A68G_STD, "BIN", m, genie_bin_int);
838 m = a68g_proc (M_BITS, M_BITS, NO_MOID);
839 a68g_op (A68G_STD, "NOT", m, genie_not_bits);
840 a68g_op (A68G_STD, "~", m, genie_not_bits);
841 m = a68g_proc (M_BOOL, M_BITS, M_BITS, NO_MOID);
842 a68g_op (A68G_STD, "=", m, genie_eq_bits);
843 a68g_op (A68G_STD, "/=", m, genie_ne_bits);
844 a68g_op (A68G_STD, "~=", m, genie_ne_bits);
845 a68g_op (A68G_STD, "^=", m, genie_ne_bits);
846 a68g_op (A68G_STD, "<=", m, genie_le_bits);
847 a68g_op (A68G_STD, ">=", m, genie_ge_bits);
848 a68g_op (A68G_STD, "EQ", m, genie_eq_bits);
849 a68g_op (A68G_STD, "NE", m, genie_ne_bits);
850 a68g_op (A68G_STD, "LE", m, genie_le_bits);
851 a68g_op (A68G_STD, "GE", m, genie_ge_bits);
852 #if (A68G_LEVEL >= 3)
853 a68g_op (A68G_EXT, "<", m, genie_lt_bits);
854 a68g_op (A68G_EXT, ">", m, genie_gt_bits);
855 a68g_op (A68G_EXT, "LT", m, genie_lt_bits);
856 a68g_op (A68G_EXT, "GT", m, genie_gt_bits);
857 #endif
858 m = a68g_proc (M_BITS, M_BITS, M_BITS, NO_MOID);
859 a68g_op (A68G_STD, "AND", m, genie_and_bits);
860 a68g_op (A68G_STD, "&", m, genie_and_bits);
861 a68g_op (A68G_STD, "OR", m, genie_or_bits);
862 a68g_op (A68G_EXT, "XOR", m, genie_xor_bits);
863 a68g_op (A68G_EXT, "+", m, genie_add_bits);
864 a68g_op (A68G_EXT, "-", m, genie_sub_bits);
865 a68g_op (A68G_EXT, "*", m, genie_times_bits);
866 a68g_op (A68G_EXT, "OVER", m, genie_over_bits);
867 a68g_op (A68G_EXT, "MOD", m, genie_over_bits);
868 m = a68g_proc (M_BITS, M_BITS, M_INT, NO_MOID);
869 a68g_op (A68G_STD, "SHL", m, genie_shl_bits);
870 a68g_op (A68G_STD, "UP", m, genie_shl_bits);
871 a68g_op (A68G_STD, "SHR", m, genie_shr_bits);
872 a68g_op (A68G_STD, "DOWN", m, genie_shr_bits);
873 a68g_op (A68G_EXT, "ROL", m, genie_rol_bits);
874 a68g_op (A68G_EXT, "ROR", m, genie_ror_bits);
875 m = a68g_proc (M_BOOL, M_INT, M_BITS, NO_MOID);
876 a68g_op (A68G_STD, "ELEM", m, genie_elem_bits);
877 m = a68g_proc (M_BITS, M_INT, M_BITS, NO_MOID);
878 a68g_op (A68G_STD, "SET", m, genie_set_bits);
879 a68g_op (A68G_STD, "CLEAR", m, genie_clear_bits);
880 // LONG LONG INT in software
881 m = a68g_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
882 a68g_op (A68G_STD, "+", m, genie_idle);
883 a68g_op (A68G_STD, "-", m, genie_minus_mp);
884 a68g_op (A68G_STD, "ABS", m, genie_abs_mp);
885 m = a68g_proc (M_INT, M_LONG_LONG_INT, NO_MOID);
886 a68g_op (A68G_STD, "SIGN", m, genie_sign_mp);
887 m = a68g_proc (M_BOOL, M_LONG_LONG_INT, NO_MOID);
888 a68g_op (A68G_STD, "ODD", m, genie_odd_mp);
889 m = a68g_proc (M_LONG_LONG_INT, M_LONG_LONG_REAL, NO_MOID);
890 a68g_op (A68G_EXT, "FLOOR", m, genie_entier_mp);
891 a68g_op (A68G_EXT, "CEIL", m, genie_ceil_mp);
892 a68g_op (A68G_STD, "ENTIER", m, genie_entier_mp);
893 a68g_op (A68G_EXT, "FIX", m, genie_trunc_mp);
894 a68g_op (A68G_EXT, "TRUNC", m, genie_trunc_mp);
895 a68g_op (A68G_EXT, "ROUND", m, genie_round_mp);
896 a68g_op (A68G_EXT, "NINT", m, genie_round_mp);
897 m = a68g_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
898 a68g_op (A68G_STD, "+", m, genie_add_mp_int);
899 a68g_op (A68G_STD, "-", m, genie_sub_mp_int);
900 a68g_op (A68G_STD, "*", m, genie_mul_mp_int);
901 a68g_op (A68G_STD, "OVER", m, genie_over_mp);
902 a68g_op (A68G_STD, "%", m, genie_over_mp);
903 a68g_op (A68G_STD, "MOD", m, genie_mod_mp);
904 a68g_op (A68G_STD, "%*", m, genie_mod_mp);
905 m = a68g_proc (M_REF_LONG_LONG_INT, M_REF_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
906 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp_int);
907 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp_int);
908 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp_int);
909 a68g_op (A68G_STD, "%:=", m, genie_overab_mp);
910 a68g_op (A68G_STD, "%*:=", m, genie_modab_mp);
911 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp_int);
912 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp_int);
913 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp_int);
914 a68g_op (A68G_STD, "OVERAB", m, genie_overab_mp);
915 a68g_op (A68G_STD, "MODAB", m, genie_modab_mp);
916 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
917 a68g_op (A68G_STD, "/", m, genie_div_mp);
918 m = a68g_proc (M_BOOL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
919 a68g_op (A68G_STD, "EQ", m, genie_eq_mp);
920 a68g_op (A68G_STD, "NE", m, genie_ne_mp);
921 a68g_op (A68G_STD, "GE", m, genie_ge_mp);
922 a68g_op (A68G_STD, "GT", m, genie_gt_mp);
923 a68g_op (A68G_STD, "LE", m, genie_le_mp);
924 a68g_op (A68G_STD, "LT", m, genie_lt_mp);
925 a68g_op (A68G_STD, "=", m, genie_eq_mp);
926 a68g_op (A68G_STD, ">=", m, genie_ge_mp);
927 a68g_op (A68G_STD, ">", m, genie_gt_mp);
928 a68g_op (A68G_STD, "<=", m, genie_le_mp);
929 a68g_op (A68G_STD, "<", m, genie_lt_mp);
930 a68g_op (A68G_STD, "/=", m, genie_ne_mp);
931 a68g_op (A68G_STD, "^=", m, genie_ne_mp);
932 a68g_op (A68G_STD, "~=", m, genie_ne_mp);
933 m = a68g_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_INT, NO_MOID);
934 a68g_op (A68G_STD, "**", m, genie_pow_mp_int_int);
935 a68g_op (A68G_STD, "UP", m, genie_pow_mp_int_int);
936 a68g_op (A68G_STD, "^", m, genie_pow_mp_int_int);
937 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
938 a68g_op (A68G_STD, "I", m, genie_idle);
939 a68g_op (A68G_STD, "+*", m, genie_idle);
940 // LONG LONG REAL in software
941 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
942 a68g_op (A68G_STD, "+", m, genie_idle);
943 a68g_op (A68G_STD, "-", m, genie_minus_mp);
944 a68g_op (A68G_STD, "ABS", m, genie_abs_mp);
945 a68g_op (A68G_EXT, "FRAC", m, genie_frac_mp);
946 m = a68g_proc (M_INT, M_LONG_LONG_REAL, NO_MOID);
947 a68g_op (A68G_STD, "SIGN", m, genie_sign_mp);
948 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
949 a68g_id2 (A68G_EXT, "longlongarccosdg", "qacosdg", m, genie_acosdg_mp);
950 a68g_id2 (A68G_EXT, "longlongarccosh", "qacosh", m, genie_acosh_mp);
951 a68g_id2 (A68G_EXT, "longlongarccotdg", "qacotdg", m, genie_acotdg_mp);
952 a68g_id2 (A68G_EXT, "longlongarccot", "qacot", m, genie_acot_mp);
953 a68g_id2 (A68G_EXT, "longlongarccscdg", "qacscdg", m, genie_acscdg_mp);
954 a68g_id2 (A68G_EXT, "longlongarccsc", "qacsc", m, genie_acsc_mp);
955 a68g_id2 (A68G_EXT, "longlongarcsecdg", "qasecdg", m, genie_asecdg_mp);
956 a68g_id2 (A68G_EXT, "longlongarcsec", "qasec", m, genie_asec_mp);
957 a68g_id2 (A68G_EXT, "longlongarcsindg", "qasindg", m, genie_asindg_mp);
958 a68g_id2 (A68G_EXT, "longlongarcsinh", "qasinh", m, genie_asinh_mp);
959 a68g_id2 (A68G_EXT, "longlongarctandg", "qatandg", m, genie_atandg_mp);
960 a68g_id2 (A68G_EXT, "longlongarctanh", "qatanh", m, genie_atanh_mp);
961 a68g_id2 (A68G_EXT, "longlongcas", "qcas", m, genie_cas_mp);
962 a68g_id2 (A68G_EXT, "longlongcbrt", "qcbrt", m, genie_curt_mp);
963 a68g_id2 (A68G_EXT, "longlongcosdg", "qcosdg", m, genie_cosdg_mp);
964 a68g_id2 (A68G_EXT, "longlongcosh", "qcosh", m, genie_cosh_mp);
965 a68g_id2 (A68G_EXT, "longlongcospi", "qcospi", m, genie_cospi_mp);
966 a68g_id2 (A68G_EXT, "longlongcotdg", "qcotdg", m, genie_cotdg_mp);
967 a68g_id2 (A68G_EXT, "longlongcotpi", "qcotpi", m, genie_cotpi_mp);
968 a68g_id2 (A68G_EXT, "longlongcot", "qcot", m, genie_cot_mp);
969 a68g_id2 (A68G_EXT, "longlongcscdg", "qcscdg", m, genie_cscdg_mp);
970 a68g_id2 (A68G_EXT, "longlongcsc", "qcsc", m, genie_csc_mp);
971 a68g_id2 (A68G_EXT, "longlongcurt", "qcurt", m, genie_curt_mp);
972 a68g_id2 (A68G_EXT, "longlongerfc", "qerfc", m, genie_erfc_mp);
973 a68g_id2 (A68G_EXT, "longlongerf", "qerf", m, genie_erf_mp);
974 a68g_id2 (A68G_EXT, "longlonggamma", "qgamma", m, genie_gamma_mp);
975 a68g_id2 (A68G_EXT, "longlonginverfc", "qinverfc", m, genie_inverfc_mp);
976 a68g_id2 (A68G_EXT, "longlonginverf", "qinverf", m, genie_inverf_mp);
977 a68g_id2 (A68G_EXT, "longlonglngamma", "qlngamma", m, genie_lngamma_mp);
978 a68g_id2 (A68G_EXT, "longlongsecdg", "qsecdg", m, genie_secdg_mp);
979 a68g_id2 (A68G_EXT, "longlongsec", "qsec", m, genie_sec_mp);
980 a68g_id2 (A68G_EXT, "longlongsindg", "qsindg", m, genie_sindg_mp);
981 a68g_id2 (A68G_EXT, "longlongsinh", "qsinh", m, genie_sinh_mp);
982 a68g_id2 (A68G_EXT, "longlongsinpi", "qsinpi", m, genie_sinpi_mp);
983 a68g_id2 (A68G_EXT, "longlongtandg", "qtandg", m, genie_tandg_mp);
984 a68g_id2 (A68G_EXT, "longlongtanh", "qtanh", m, genie_tanh_mp);
985 a68g_id2 (A68G_EXT, "longlongtanpi", "qtanpi", m, genie_tanpi_mp);
986 a68g_id2 (A68G_STD, "longlongarccos", "qacos", m, genie_acos_mp);
987 a68g_id2 (A68G_STD, "longlongarcsin", "qasin", m, genie_asin_mp);
988 a68g_id2 (A68G_STD, "longlongarctan", "qatan", m, genie_atan_mp);
989 a68g_id2 (A68G_STD, "longlongcos", "qcos", m, genie_cos_mp);
990 a68g_id2 (A68G_STD, "longlongexp", "qexp", m, genie_exp_mp);
991 a68g_id2 (A68G_STD, "longlongln", "qln", m, genie_ln_mp);
992 a68g_id2 (A68G_STD, "longlonglog", "qlog", m, genie_log_mp);
993 a68g_id2 (A68G_STD, "longlongsin", "qsin", m, genie_sin_mp);
994 a68g_id2 (A68G_STD, "longlongsqrt", "qsqrt", m, genie_sqrt_mp);
995 a68g_id2 (A68G_STD, "longlongtan", "qtan", m, genie_tan_mp);
996 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
997 a68g_id2 (A68G_EXT, "longlongarctan2dg", "qatan2dg", m, genie_atan2dg_mp);
998 a68g_id2 (A68G_EXT, "longlongarctan2", "qatan2", m, genie_atan2_mp);
999 a68g_id2 (A68G_EXT, "longlongbeta", "qbeta", m, genie_beta_mp);
1000 a68g_id2 (A68G_EXT, "longlonggammaincf", "qgammaincf", m, genie_gamma_inc_f_mp);
1001 a68g_id2 (A68G_EXT, "longlonggammaincgf", "qgammaincgf", m, genie_gamma_inc_gf_mp);
1002 a68g_id2 (A68G_EXT, "longlonggammainc", "qgammainc", m, genie_gamma_inc_h_mp);
1003 a68g_id2 (A68G_EXT, "longlonglnbeta", "qlnbeta", m, genie_lnbeta_mp);
1004 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1005 a68g_id2 (A68G_EXT, "longlongbetainc", "qbetainc", m, genie_beta_inc_mp);
1006 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1007 a68g_id2 (A68G_EXT, "longlonggammaincg", "qgammaincg", m, genie_gamma_inc_g_mp);
1008 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1009 a68g_op (A68G_STD, "+", m, genie_add_mp);
1010 a68g_op (A68G_STD, "-", m, genie_sub_mp);
1011 a68g_op (A68G_STD, "*", m, genie_mul_mp);
1012 a68g_op (A68G_STD, "/", m, genie_div_mp);
1013 a68g_op (A68G_STD, "**", m, genie_pow_mp);
1014 a68g_op (A68G_STD, "UP", m, genie_pow_mp);
1015 a68g_op (A68G_STD, "^", m, genie_pow_mp);
1016 m = a68g_proc (M_REF_LONG_LONG_REAL, M_REF_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1017 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp);
1018 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp);
1019 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp);
1020 a68g_op (A68G_STD, "/:=", m, genie_divab_mp);
1021 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp);
1022 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp);
1023 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp);
1024 a68g_op (A68G_STD, "DIVAB", m, genie_divab_mp);
1025 m = a68g_proc (M_BOOL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1026 a68g_op (A68G_STD, "=", m, genie_eq_mp);
1027 a68g_op (A68G_STD, "EQ", m, genie_eq_mp);
1028 a68g_op (A68G_STD, "/=", m, genie_ne_mp);
1029 a68g_op (A68G_STD, "~=", m, genie_ne_mp);
1030 a68g_op (A68G_STD, "^=", m, genie_ne_mp);
1031 a68g_op (A68G_STD, "NE", m, genie_ne_mp);
1032 a68g_op (A68G_STD, "<", m, genie_lt_mp);
1033 a68g_op (A68G_STD, "LT", m, genie_lt_mp);
1034 a68g_op (A68G_STD, "<=", m, genie_le_mp);
1035 a68g_op (A68G_STD, "LE", m, genie_le_mp);
1036 a68g_op (A68G_STD, ">", m, genie_gt_mp);
1037 a68g_op (A68G_STD, "GT", m, genie_gt_mp);
1038 a68g_op (A68G_STD, ">=", m, genie_ge_mp);
1039 a68g_op (A68G_STD, "GE", m, genie_ge_mp);
1040 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_INT, NO_MOID);
1041 a68g_op (A68G_STD, "**", m, genie_pow_mp_int);
1042 a68g_op (A68G_STD, "UP", m, genie_pow_mp_int);
1043 a68g_op (A68G_STD, "^", m, genie_pow_mp_int);
1044 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1045 a68g_op (A68G_STD, "I", m, genie_idle);
1046 a68g_op (A68G_STD, "+*", m, genie_idle);
1047 // LONG LONG COMPLEX in software
1048 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_COMPLEX, NO_MOID);
1049 a68g_op (A68G_STD, "RE", m, genie_re_mp_complex);
1050 a68g_op (A68G_STD, "IM", m, genie_im_mp_complex);
1051 a68g_op (A68G_STD, "ARG", m, genie_arg_mp_complex);
1052 a68g_op (A68G_STD, "ABS", m, genie_abs_mp_complex);
1053 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1054 a68g_op (A68G_STD, "+", m, genie_idle);
1055 a68g_op (A68G_STD, "-", m, genie_minus_mp_complex);
1056 a68g_op (A68G_STD, "CONJ", m, genie_conj_mp_complex);
1057 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1058 a68g_op (A68G_STD, "+", m, genie_add_mp_complex);
1059 a68g_op (A68G_STD, "-", m, genie_sub_mp_complex);
1060 a68g_op (A68G_STD, "*", m, genie_mul_mp_complex);
1061 a68g_op (A68G_STD, "/", m, genie_div_mp_complex);
1062 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, M_INT, NO_MOID);
1063 a68g_op (A68G_STD, "**", m, genie_pow_mp_complex_int);
1064 a68g_op (A68G_STD, "UP", m, genie_pow_mp_complex_int);
1065 a68g_op (A68G_STD, "^", m, genie_pow_mp_complex_int);
1066 m = a68g_proc (M_BOOL, M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1067 a68g_op (A68G_STD, "=", m, genie_eq_mp_complex);
1068 a68g_op (A68G_STD, "EQ", m, genie_eq_mp_complex);
1069 a68g_op (A68G_STD, "/=", m, genie_ne_mp_complex);
1070 a68g_op (A68G_STD, "~=", m, genie_ne_mp_complex);
1071 a68g_op (A68G_STD, "^=", m, genie_ne_mp_complex);
1072 a68g_op (A68G_STD, "NE", m, genie_ne_mp_complex);
1073 m = a68g_proc (M_REF_LONG_LONG_COMPLEX, M_REF_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1074 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp_complex);
1075 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp_complex);
1076 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp_complex);
1077 a68g_op (A68G_STD, "/:=", m, genie_divab_mp_complex);
1078 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp_complex);
1079 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp_complex);
1080 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp_complex);
1081 a68g_op (A68G_STD, "DIVAB", m, genie_divab_mp_complex);
1082 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1083 a68g_id2 (A68G_EXT, "longlongcomplexarccosh", "qcacosh", m, genie_acosh_mp_complex);
1084 a68g_id2 (A68G_EXT, "longlongcomplexarccos", "qcacos", m, genie_acos_mp_complex);
1085 a68g_id2 (A68G_EXT, "longlongcomplexarcsinh", "qcasinh", m, genie_asinh_mp_complex);
1086 a68g_id2 (A68G_EXT, "longlongcomplexarcsin", "qcasin", m, genie_asin_mp_complex);
1087 a68g_id2 (A68G_EXT, "longlongcomplexarctanh", "qcatanh", m, genie_atanh_mp_complex);
1088 a68g_id2 (A68G_EXT, "longlongcomplexarctan", "qcatan", m, genie_atan_mp_complex);
1089 a68g_id2 (A68G_EXT, "longlongcomplexcosh", "qccosh", m, genie_cosh_mp_complex);
1090 a68g_id2 (A68G_EXT, "longlongcomplexcos", "qccos", m, genie_cos_mp_complex);
1091 a68g_id2 (A68G_EXT, "longlongcomplexexp", "qcexp", m, genie_exp_mp_complex);
1092 a68g_id2 (A68G_EXT, "longlongcomplexln", "qcln", m, genie_ln_mp_complex);
1093 a68g_id2 (A68G_EXT, "longlongcomplexsinh", "qcsinh", m, genie_sinh_mp_complex);
1094 a68g_id2 (A68G_EXT, "longlongcomplexsin", "qcsin", m, genie_sin_mp_complex);
1095 a68g_id2 (A68G_EXT, "longlongcomplexsqrt", "qcsqrt", m, genie_sqrt_mp_complex);
1096 a68g_id2 (A68G_EXT, "longlongcomplextanh", "qctanh", m, genie_tanh_mp_complex);
1097 a68g_id2 (A68G_EXT, "longlongcomplextan", "qctan", m, genie_tan_mp_complex);
1098 // BYTES ops.
1099 m = a68g_proc (M_BYTES, M_STRING, NO_MOID);
1100 a68g_idf (A68G_STD, "bytespack", m, genie_bytespack);
1101 m = a68g_proc (M_CHAR, M_INT, M_BYTES, NO_MOID);
1102 a68g_op (A68G_STD, "ELEM", m, genie_elem_bytes);
1103 m = a68g_proc (M_BYTES, M_BYTES, M_BYTES, NO_MOID);
1104 a68g_op (A68G_STD, "+", m, genie_add_bytes);
1105 m = a68g_proc (M_REF_BYTES, M_REF_BYTES, M_BYTES, NO_MOID);
1106 a68g_op (A68G_STD, "+:=", m, genie_plusab_bytes);
1107 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_bytes);
1108 m = a68g_proc (M_REF_BYTES, M_BYTES, M_REF_BYTES, NO_MOID);
1109 a68g_op (A68G_STD, "+=:", m, genie_plusto_bytes);
1110 a68g_op (A68G_STD, "PLUSTO", m, genie_plusto_bytes);
1111 m = a68g_proc (M_BOOL, M_BYTES, M_BYTES, NO_MOID);
1112 a68g_op (A68G_STD, "=", m, genie_eq_bytes);
1113 a68g_op (A68G_STD, "/=", m, genie_ne_bytes);
1114 a68g_op (A68G_STD, "~=", m, genie_ne_bytes);
1115 a68g_op (A68G_STD, "^=", m, genie_ne_bytes);
1116 a68g_op (A68G_STD, "<", m, genie_lt_bytes);
1117 a68g_op (A68G_STD, "<=", m, genie_le_bytes);
1118 a68g_op (A68G_STD, ">", m, genie_gt_bytes);
1119 a68g_op (A68G_STD, ">=", m, genie_ge_bytes);
1120 a68g_op (A68G_STD, "EQ", m, genie_eq_bytes);
1121 a68g_op (A68G_STD, "NE", m, genie_ne_bytes);
1122 a68g_op (A68G_STD, "LT", m, genie_lt_bytes);
1123 a68g_op (A68G_STD, "LE", m, genie_le_bytes);
1124 a68g_op (A68G_STD, "GT", m, genie_gt_bytes);
1125 a68g_op (A68G_STD, "GE", m, genie_ge_bytes);
1126 // LONG BYTES ops.
1127 m = a68g_proc (M_LONG_BYTES, M_BYTES, NO_MOID);
1128 a68g_op (A68G_STD, "LENG", m, genie_leng_bytes);
1129 m = a68g_proc (M_BYTES, M_LONG_BYTES, NO_MOID);
1130 a68g_idf (A68G_STD, "SHORTEN", m, genie_shorten_bytes);
1131 m = a68g_proc (M_LONG_BYTES, M_STRING, NO_MOID);
1132 a68g_idf (A68G_STD, "longbytespack", m, genie_long_bytespack);
1133 m = a68g_proc (M_CHAR, M_INT, M_LONG_BYTES, NO_MOID);
1134 a68g_op (A68G_STD, "ELEM", m, genie_elem_long_bytes);
1135 m = a68g_proc (M_LONG_BYTES, M_LONG_BYTES, M_LONG_BYTES, NO_MOID);
1136 a68g_op (A68G_STD, "+", m, genie_add_long_bytes);
1137 m = a68g_proc (M_REF_LONG_BYTES, M_REF_LONG_BYTES, M_LONG_BYTES, NO_MOID);
1138 a68g_op (A68G_STD, "+:=", m, genie_plusab_long_bytes);
1139 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_long_bytes);
1140 m = a68g_proc (M_REF_LONG_BYTES, M_LONG_BYTES, M_REF_LONG_BYTES, NO_MOID);
1141 a68g_op (A68G_STD, "+=:", m, genie_plusto_long_bytes);
1142 a68g_op (A68G_STD, "PLUSTO", m, genie_plusto_long_bytes);
1143 m = a68g_proc (M_BOOL, M_LONG_BYTES, M_LONG_BYTES, NO_MOID);
1144 a68g_op (A68G_STD, "=", m, genie_eq_long_bytes);
1145 a68g_op (A68G_STD, "/=", m, genie_ne_long_bytes);
1146 a68g_op (A68G_STD, "~=", m, genie_ne_long_bytes);
1147 a68g_op (A68G_STD, "^=", m, genie_ne_long_bytes);
1148 a68g_op (A68G_STD, "<", m, genie_lt_long_bytes);
1149 a68g_op (A68G_STD, "<=", m, genie_le_long_bytes);
1150 a68g_op (A68G_STD, ">", m, genie_gt_long_bytes);
1151 a68g_op (A68G_STD, ">=", m, genie_ge_long_bytes);
1152 a68g_op (A68G_STD, "EQ", m, genie_eq_long_bytes);
1153 a68g_op (A68G_STD, "NE", m, genie_ne_long_bytes);
1154 a68g_op (A68G_STD, "LT", m, genie_lt_long_bytes);
1155 a68g_op (A68G_STD, "LE", m, genie_le_long_bytes);
1156 a68g_op (A68G_STD, "GT", m, genie_gt_long_bytes);
1157 a68g_op (A68G_STD, "GE", m, genie_ge_long_bytes);
1158 // STRING ops.
1159 m = a68g_proc (M_BOOL, M_STRING, M_STRING, NO_MOID);
1160 a68g_op (A68G_STD, "=", m, genie_eq_string);
1161 a68g_op (A68G_STD, "/=", m, genie_ne_string);
1162 a68g_op (A68G_STD, "~=", m, genie_ne_string);
1163 a68g_op (A68G_STD, "^=", m, genie_ne_string);
1164 a68g_op (A68G_STD, "<", m, genie_lt_string);
1165 a68g_op (A68G_STD, "<=", m, genie_le_string);
1166 a68g_op (A68G_STD, ">=", m, genie_ge_string);
1167 a68g_op (A68G_STD, ">", m, genie_gt_string);
1168 a68g_op (A68G_STD, "EQ", m, genie_eq_string);
1169 a68g_op (A68G_STD, "NE", m, genie_ne_string);
1170 a68g_op (A68G_STD, "LT", m, genie_lt_string);
1171 a68g_op (A68G_STD, "LE", m, genie_le_string);
1172 a68g_op (A68G_STD, "GE", m, genie_ge_string);
1173 a68g_op (A68G_STD, "GT", m, genie_gt_string);
1174 m = a68g_proc (M_STRING, M_CHAR, M_CHAR, NO_MOID);
1175 a68g_op (A68G_STD, "+", m, genie_add_char);
1176 m = a68g_proc (M_STRING, M_STRING, M_STRING, NO_MOID);
1177 a68g_op (A68G_STD, "+", m, genie_add_string);
1178 m = a68g_proc (M_REF_STRING, M_REF_STRING, M_STRING, NO_MOID);
1179 a68g_op (A68G_STD, "+:=", m, genie_plusab_string);
1180 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_string);
1181 m = a68g_proc (M_REF_STRING, M_REF_STRING, M_INT, NO_MOID);
1182 a68g_op (A68G_STD, "*:=", m, genie_timesab_string);
1183 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_string);
1184 m = a68g_proc (M_REF_STRING, M_STRING, M_REF_STRING, NO_MOID);
1185 a68g_op (A68G_STD, "+=:", m, genie_plusto_string);
1186 a68g_op (A68G_STD, "PLUSTO", m, genie_plusto_string);
1187 m = a68g_proc (M_STRING, M_STRING, M_INT, NO_MOID);
1188 a68g_op (A68G_STD, "*", m, genie_times_string_int);
1189 m = a68g_proc (M_STRING, M_INT, M_STRING, NO_MOID);
1190 a68g_op (A68G_STD, "*", m, genie_times_int_string);
1191 m = a68g_proc (M_STRING, M_INT, M_CHAR, NO_MOID);
1192 a68g_op (A68G_STD, "*", m, genie_times_int_char);
1193 m = a68g_proc (M_STRING, M_CHAR, M_INT, NO_MOID);
1194 a68g_op (A68G_STD, "*", m, genie_times_char_int);
1195 m = a68g_proc (M_CHAR, M_INT, M_ROW_CHAR, NO_MOID);
1196 a68g_op (A68G_STD, "ELEM", m, genie_elem_string);
1197 m = a68g_proc (M_STRING, M_STRING, NO_MOID);
1198 a68g_idf (A68G_EXT, "realpath", m, genie_realpath);
1199 // SEMA ops.
1200 #if defined (BUILD_PARALLEL_CLAUSE)
1201 m = a68g_proc (M_SEMA, M_INT, NO_MOID);
1202 a68g_op (A68G_STD, "LEVEL", m, genie_level_sema_int);
1203 m = a68g_proc (M_INT, M_SEMA, NO_MOID);
1204 a68g_op (A68G_STD, "LEVEL", m, genie_level_int_sema);
1205 m = a68g_proc (M_VOID, M_SEMA, NO_MOID);
1206 a68g_op (A68G_STD, "UP", m, genie_up_sema);
1207 a68g_op (A68G_STD, "DOWN", m, genie_down_sema);
1208 #else
1209 m = a68g_proc (M_SEMA, M_INT, NO_MOID);
1210 a68g_op (A68G_STD, "LEVEL", m, genie_unimplemented);
1211 m = a68g_proc (M_INT, M_SEMA, NO_MOID);
1212 a68g_op (A68G_STD, "LEVEL", m, genie_unimplemented);
1213 m = a68g_proc (M_VOID, M_SEMA, NO_MOID);
1214 a68g_op (A68G_STD, "UP", m, genie_unimplemented);
1215 a68g_op (A68G_STD, "DOWN", m, genie_unimplemented);
1216 #endif
1217 // ROWS ops.
1218 m = a68g_proc (M_INT, M_ROWS, NO_MOID);
1219 a68g_op (A68G_EXT, "ELEMS", m, genie_monad_elems);
1220 a68g_op (A68G_STD, "LWB", m, genie_monad_lwb);
1221 a68g_op (A68G_STD, "UPB", m, genie_monad_upb);
1222 m = a68g_proc (M_INT, M_INT, M_ROWS, NO_MOID);
1223 a68g_op (A68G_EXT, "ELEMS", m, genie_dyad_elems);
1224 a68g_op (A68G_STD, "LWB", m, genie_dyad_lwb);
1225 a68g_op (A68G_STD, "UPB", m, genie_dyad_upb);
1226 m = a68g_proc (M_ROW_STRING, M_ROW_STRING, NO_MOID);
1227 a68g_op (A68G_EXT, "SORT", m, genie_sort_row_string);
1228 // Some "terminators" to handle the mapping of very short or very long modes.
1229 // This allows you to write SHORT REAL z = SHORTEN pi while everything is
1230 // silently mapped onto REAL.
1231 m = a68g_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID);
1232 a68g_op (A68G_STD, "LENG", m, genie_idle);
1233 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1234 a68g_op (A68G_STD, "LENG", m, genie_idle);
1235 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1236 a68g_op (A68G_STD, "LENG", m, genie_idle);
1237 m = a68g_proc (M_INT, M_INT, NO_MOID);
1238 a68g_op (A68G_STD, "SHORTEN", m, genie_idle);
1239 m = a68g_proc (M_REAL, M_REAL, NO_MOID);
1240 a68g_op (A68G_STD, "SHORTEN", m, genie_idle);
1241 m = a68g_proc (M_COMPLEX, M_COMPLEX, NO_MOID);
1242 a68g_op (A68G_STD, "SHORTEN", m, genie_idle);
1243 m = a68g_proc (M_BITS, M_BITS, NO_MOID);
1244 a68g_op (A68G_STD, "SHORTEN", m, genie_idle);
1245 // SOUND/RIFF procs.
1246 m = a68g_proc (M_SOUND, M_INT, M_INT, M_INT, M_INT, NO_MOID);
1247 a68g_idf (A68G_EXT, "newsound", m, genie_new_sound);
1248 m = a68g_proc (M_INT, M_SOUND, M_INT, M_INT, NO_MOID);
1249 a68g_idf (A68G_EXT, "getsound", m, genie_get_sound);
1250 m = a68g_proc (M_VOID, M_SOUND, M_INT, M_INT, M_INT, NO_MOID);
1251 a68g_idf (A68G_EXT, "setsound", m, genie_set_sound);
1252 m = a68g_proc (M_INT, M_SOUND, NO_MOID);
1253 a68g_op (A68G_EXT, "RESOLUTION", m, genie_sound_resolution);
1254 a68g_op (A68G_EXT, "CHANNELS", m, genie_sound_channels);
1255 a68g_op (A68G_EXT, "RATE", m, genie_sound_rate);
1256 a68g_op (A68G_EXT, "SAMPLES", m, genie_sound_samples);
1257 }
1258
1259 //! @brief Set up standenv - transput.
1260
1261 void stand_mp_level_2 (void)
1262 {
1263 #if (A68G_LEVEL <= 2)
1264 a68g_id2 (A68G_STD, "longpi", "dpi", M_LONG_REAL, genie_pi_mp);
1265 a68g_idf (A68G_STD, "longmaxbits", M_LONG_BITS, genie_long_max_bits);
1266 a68g_idf (A68G_STD, "longmaxint", M_LONG_INT, genie_long_max_int);
1267 a68g_idf (A68G_STD, "longsmallreal", M_LONG_REAL, genie_long_small_real);
1268 a68g_idf (A68G_STD, "longmaxreal", M_LONG_REAL, genie_long_max_real);
1269 a68g_idf (A68G_STD, "longminreal", M_LONG_REAL, genie_long_min_real);
1270 a68g_idf (A68G_STD, "longinfinity", M_LONG_REAL, genie_infinity_mp);
1271 a68g_idf (A68G_STD, "longminusinfinity", M_LONG_REAL, genie_minus_infinity_mp);
1272 a68g_idf (A68G_STD, "longinf", M_LONG_REAL, genie_infinity_mp);
1273 a68g_idf (A68G_STD, "longmininf", M_LONG_REAL, genie_minus_infinity_mp);
1274 // LONG INT in software
1275 MOID_T *m = a68g_proc (M_LONG_INT, M_LONG_INT, NO_MOID);
1276 a68g_op (A68G_STD, "+", m, genie_idle);
1277 a68g_op (A68G_STD, "-", m, genie_minus_mp);
1278 a68g_op (A68G_STD, "ABS", m, genie_abs_mp);
1279 m = a68g_proc (M_LONG_INT, M_INT, NO_MOID);
1280 a68g_op (A68G_STD, "LENG", m, genie_lengthen_int_to_mp);
1281 m = a68g_proc (M_INT, M_LONG_INT, NO_MOID);
1282 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_to_int);
1283 a68g_op (A68G_STD, "SIGN", m, genie_sign_mp);
1284 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_REAL, NO_MOID);
1285 a68g_op (A68G_STD, "LENG", m, genie_lengthen_mp_to_long_mp);
1286 m = a68g_proc (M_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1287 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_long_mp_to_mp);
1288 m = a68g_proc (M_LONG_LONG_INT, M_LONG_INT, NO_MOID);
1289 a68g_op (A68G_STD, "LENG", m, genie_lengthen_mp_to_long_mp);
1290 m = a68g_proc (M_LONG_INT, M_LONG_LONG_INT, NO_MOID);
1291 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_long_mp_to_mp);
1292 m = a68g_proc (M_BOOL, M_LONG_INT, NO_MOID);
1293 a68g_op (A68G_STD, "ODD", m, genie_odd_mp);
1294 m = a68g_proc (M_LONG_INT, M_LONG_REAL, NO_MOID);
1295 a68g_op (A68G_EXT, "FLOOR", m, genie_entier_mp);
1296 a68g_op (A68G_EXT, "CEIL", m, genie_ceil_mp);
1297 a68g_op (A68G_STD, "ENTIER", m, genie_entier_mp);
1298 a68g_op (A68G_EXT, "FIX", m, genie_trunc_mp);
1299 a68g_op (A68G_EXT, "TRUNC", m, genie_trunc_mp);
1300 a68g_op (A68G_EXT, "ROUND", m, genie_round_mp);
1301 a68g_op (A68G_EXT, "NINT", m, genie_round_mp);
1302 m = a68g_proc (M_LONG_INT, M_LONG_INT, M_LONG_INT, NO_MOID);
1303 a68g_op (A68G_STD, "+", m, genie_add_mp_int);
1304 a68g_op (A68G_STD, "-", m, genie_sub_mp_int);
1305 a68g_op (A68G_STD, "*", m, genie_mul_mp_int);
1306 a68g_op (A68G_STD, "OVER", m, genie_over_mp);
1307 a68g_op (A68G_STD, "%", m, genie_over_mp);
1308 a68g_op (A68G_STD, "MOD", m, genie_mod_mp);
1309 a68g_op (A68G_STD, "%*", m, genie_mod_mp);
1310 m = a68g_proc (M_REF_LONG_INT, M_REF_LONG_INT, M_LONG_INT, NO_MOID);
1311 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp_int);
1312 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp_int);
1313 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp_int);
1314 a68g_op (A68G_STD, "%:=", m, genie_overab_mp);
1315 a68g_op (A68G_STD, "%*:=", m, genie_modab_mp);
1316 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp_int);
1317 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp_int);
1318 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp_int);
1319 a68g_op (A68G_STD, "OVERAB", m, genie_overab_mp);
1320 a68g_op (A68G_STD, "MODAB", m, genie_modab_mp);
1321 m = a68g_proc (M_BOOL, M_LONG_INT, M_LONG_INT, NO_MOID);
1322 a68g_op (A68G_STD, "=", m, genie_eq_mp);
1323 a68g_op (A68G_STD, "EQ", m, genie_eq_mp);
1324 a68g_op (A68G_STD, "/=", m, genie_ne_mp);
1325 a68g_op (A68G_STD, "~=", m, genie_ne_mp);
1326 a68g_op (A68G_STD, "^=", m, genie_ne_mp);
1327 a68g_op (A68G_STD, "NE", m, genie_ne_mp);
1328 a68g_op (A68G_STD, "<", m, genie_lt_mp);
1329 a68g_op (A68G_STD, "LT", m, genie_lt_mp);
1330 a68g_op (A68G_STD, "<=", m, genie_le_mp);
1331 a68g_op (A68G_STD, "LE", m, genie_le_mp);
1332 a68g_op (A68G_STD, ">", m, genie_gt_mp);
1333 a68g_op (A68G_STD, "GT", m, genie_gt_mp);
1334 a68g_op (A68G_STD, ">=", m, genie_ge_mp);
1335 a68g_op (A68G_STD, "GE", m, genie_ge_mp);
1336 m = a68g_proc (M_LONG_REAL, M_LONG_INT, M_LONG_INT, NO_MOID);
1337 a68g_op (A68G_STD, "/", m, genie_div_mp);
1338 m = a68g_proc (M_LONG_INT, M_LONG_INT, M_INT, NO_MOID);
1339 a68g_op (A68G_STD, "**", m, genie_pow_mp_int_int);
1340 a68g_op (A68G_STD, "UP", m, genie_pow_mp_int_int);
1341 a68g_op (A68G_STD, "^", m, genie_pow_mp_int_int);
1342 m = a68g_proc (M_LONG_COMPLEX, M_LONG_INT, M_LONG_INT, NO_MOID);
1343 a68g_op (A68G_STD, "I", m, genie_idle);
1344 a68g_op (A68G_STD, "+*", m, genie_idle);
1345 m = a68g_proc (M_LONG_REAL, M_REAL, NO_MOID);
1346 a68g_op (A68G_STD, "LENG", m, genie_lengthen_real_to_mp);
1347 m = a68g_proc (M_REAL, M_LONG_REAL, NO_MOID);
1348 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_to_real);
1349 // LONG REAL in software
1350 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID);
1351 a68g_op (A68G_STD, "+", m, genie_idle);
1352 a68g_op (A68G_STD, "-", m, genie_minus_mp);
1353 a68g_op (A68G_STD, "ABS", m, genie_abs_mp);
1354 a68g_op (A68G_EXT, "FRAC", m, genie_frac_mp);
1355 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID);
1356 a68g_id2 (A68G_EXT, "longarccosdg", "dacosdg", m, genie_acosdg_mp);
1357 a68g_id2 (A68G_EXT, "longarccosh", "dacosh", m, genie_acosh_mp);
1358 a68g_id2 (A68G_EXT, "longarccot", "dacot", m, genie_acot_mp);
1359 a68g_id2 (A68G_EXT, "longarccotdg", "dacotdg", m, genie_acosdg_mp);
1360 a68g_id2 (A68G_EXT, "longarccsc", "dacsc", m, genie_acsc_mp);
1361 a68g_id2 (A68G_EXT, "longarccscdg", "dacscdg", m, genie_acscdg_mp);
1362 a68g_id2 (A68G_EXT, "longarcsec", "dasec", m, genie_asec_mp);
1363 a68g_id2 (A68G_EXT, "longarcsecdg", "dasecdg", m, genie_asecdg_mp);
1364 a68g_id2 (A68G_EXT, "longarcsindg", "dasindg", m, genie_asindg_mp);
1365 a68g_id2 (A68G_EXT, "longarcsinh", "dasinh", m, genie_asinh_mp);
1366 a68g_id2 (A68G_EXT, "longarctandg", "datandg", m, genie_atandg_mp);
1367 a68g_id2 (A68G_EXT, "longarctanh", "datanh", m, genie_atanh_mp);
1368 a68g_id2 (A68G_EXT, "longcas", "dcas", m, genie_cas_mp);
1369 a68g_id2 (A68G_EXT, "longcbrt", "dcbrt", m, genie_curt_mp);
1370 a68g_id2 (A68G_EXT, "longcosdg", "dcosdg", m, genie_cosdg_mp);
1371 a68g_id2 (A68G_EXT, "longcosh", "dcosh", m, genie_cosh_mp);
1372 a68g_id2 (A68G_EXT, "longcospi", "dcospi", m, genie_cospi_mp);
1373 a68g_id2 (A68G_EXT, "longcot", "dcot", m, genie_cot_mp);
1374 a68g_id2 (A68G_EXT, "longcotdg", "dcotdg", m, genie_cotdg_mp);
1375 a68g_id2 (A68G_EXT, "longcotpi", "dcotpi", m, genie_cotpi_mp);
1376 a68g_id2 (A68G_EXT, "longcsc", "dcsc", m, genie_csc_mp);
1377 a68g_id2 (A68G_EXT, "longcscdg", "dcscdg", m, genie_cscdg_mp);
1378 a68g_id2 (A68G_EXT, "longcurt", "dcurt", m, genie_curt_mp);
1379 a68g_id2 (A68G_EXT, "longerfc", "derfc", m, genie_erfc_mp);
1380 a68g_id2 (A68G_EXT, "longerf", "derf", m, genie_erf_mp);
1381 a68g_id2 (A68G_EXT, "longgamma", "dgamma", m, genie_gamma_mp);
1382 a68g_id2 (A68G_EXT, "longinverfc", "dinverfc", m, genie_inverfc_mp);
1383 a68g_id2 (A68G_EXT, "longinverf", "dinverf", m, genie_inverf_mp);
1384 a68g_id2 (A68G_EXT, "longlngamma", "dlngamma", m, genie_lngamma_mp);
1385 a68g_id2 (A68G_EXT, "longsecdg", "dsecdg", m, genie_secdg_mp);
1386 a68g_id2 (A68G_EXT, "longsec", "dsec", m, genie_sec_mp);
1387 a68g_id2 (A68G_EXT, "longsindg", "dsindg", m, genie_sindg_mp);
1388 a68g_id2 (A68G_EXT, "longsinh", "dsinh", m, genie_sinh_mp);
1389 a68g_id2 (A68G_EXT, "longsinpi", "dsinpi", m, genie_sinpi_mp);
1390 a68g_id2 (A68G_EXT, "longtandg", "dtandg", m, genie_tandg_mp);
1391 a68g_id2 (A68G_EXT, "longtanh", "dtanh", m, genie_tanh_mp);
1392 a68g_id2 (A68G_EXT, "longtanpi", "dtanpi", m, genie_tanpi_mp);
1393 // RR.
1394 a68g_id2 (A68G_STD, "longarccos", "dacos", m, genie_acos_mp);
1395 a68g_id2 (A68G_STD, "longarcsin", "dasin", m, genie_asin_mp);
1396 a68g_id2 (A68G_STD, "longarctan", "datan", m, genie_atan_mp);
1397 a68g_id2 (A68G_STD, "longcos", "dcos", m, genie_cos_mp);
1398 a68g_id2 (A68G_STD, "longexp", "dexp", m, genie_exp_mp);
1399 a68g_id2 (A68G_STD, "longln", "dln", m, genie_ln_mp);
1400 a68g_id2 (A68G_STD, "longlog", "dlog", m, genie_log_mp);
1401 a68g_id2 (A68G_STD, "longsin", "dsin", m, genie_sin_mp);
1402 a68g_id2 (A68G_STD, "longsqrt", "dsqrt", m, genie_sqrt_mp);
1403 a68g_id2 (A68G_STD, "longtan", "dtan", m, genie_tan_mp);
1404 m = a68g_proc (M_LONG_REAL, NO_MOID);
1405 a68g_idf (A68G_STD, "longnextrandom", m, genie_long_next_random);
1406 a68g_idf (A68G_STD, "longrandom", m, genie_long_next_random);
1407 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1408 a68g_id2 (A68G_EXT, "longarctan2", "datan2", m, genie_atan2_mp);
1409 a68g_id2 (A68G_EXT, "longarctan2dg", "datan2dg", m, genie_atan2dg_mp);
1410 a68g_id2 (A68G_EXT, "longbeta", "dbeta", m, genie_beta_mp);
1411 a68g_id2 (A68G_EXT, "longgammainc", "dgammainc", m, genie_gamma_inc_h_mp);
1412 a68g_id2 (A68G_EXT, "longgammaincf", "dgammaincf", m, genie_gamma_inc_f_mp);
1413 a68g_id2 (A68G_EXT, "longgammaincgf", "dgammaincgf", m, genie_gamma_inc_gf_mp);
1414 a68g_id2 (A68G_EXT, "longlnbeta", "dlnbeta", m, genie_lnbeta_mp);
1415 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1416 a68g_id2 (A68G_EXT, "longbetainc", "dbetainc", m, genie_beta_inc_mp);
1417 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1418 a68g_id2 (A68G_EXT, "longgammaincg", "dgammaincg", m, genie_gamma_inc_g_mp);
1419 m = a68g_proc (M_INT, M_LONG_REAL, NO_MOID);
1420 a68g_op (A68G_STD, "SIGN", m, genie_sign_mp);
1421 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1422 a68g_op (A68G_STD, "+", m, genie_add_mp);
1423 a68g_op (A68G_STD, "-", m, genie_sub_mp);
1424 a68g_op (A68G_STD, "*", m, genie_mul_mp);
1425 a68g_op (A68G_STD, "/", m, genie_div_mp);
1426 a68g_op (A68G_STD, "**", m, genie_pow_mp);
1427 a68g_op (A68G_STD, "UP", m, genie_pow_mp);
1428 a68g_op (A68G_STD, "^", m, genie_pow_mp);
1429 m = a68g_proc (M_REF_LONG_REAL, M_REF_LONG_REAL, M_LONG_REAL, NO_MOID);
1430 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp);
1431 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp);
1432 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp);
1433 a68g_op (A68G_STD, "/:=", m, genie_divab_mp);
1434 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp);
1435 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp);
1436 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp);
1437 a68g_op (A68G_STD, "DIVAB", m, genie_divab_mp);
1438 m = a68g_proc (M_BOOL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1439 a68g_op (A68G_STD, "=", m, genie_eq_mp);
1440 a68g_op (A68G_STD, "EQ", m, genie_eq_mp);
1441 a68g_op (A68G_STD, "/=", m, genie_ne_mp);
1442 a68g_op (A68G_STD, "~=", m, genie_ne_mp);
1443 a68g_op (A68G_STD, "^=", m, genie_ne_mp);
1444 a68g_op (A68G_STD, "NE", m, genie_ne_mp);
1445 a68g_op (A68G_STD, "<", m, genie_lt_mp);
1446 a68g_op (A68G_STD, "LT", m, genie_lt_mp);
1447 a68g_op (A68G_STD, "<=", m, genie_le_mp);
1448 a68g_op (A68G_STD, "LE", m, genie_le_mp);
1449 a68g_op (A68G_STD, ">", m, genie_gt_mp);
1450 a68g_op (A68G_STD, "GT", m, genie_gt_mp);
1451 a68g_op (A68G_STD, ">=", m, genie_ge_mp);
1452 a68g_op (A68G_STD, "GE", m, genie_ge_mp);
1453 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_INT, NO_MOID);
1454 a68g_op (A68G_STD, "**", m, genie_pow_mp_int);
1455 a68g_op (A68G_STD, "UP", m, genie_pow_mp_int);
1456 a68g_op (A68G_STD, "^", m, genie_pow_mp_int);
1457 m = a68g_proc (M_LONG_COMPLEX, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1458 a68g_op (A68G_STD, "I", m, genie_idle);
1459 a68g_op (A68G_STD, "+*", m, genie_idle);
1460 // LONG COMPLEX in software
1461 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1462 a68g_op (A68G_STD, "LENG", m, genie_lengthen_mp_complex_to_long_mp_complex);
1463 m = a68g_proc (M_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1464 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_long_mp_complex_to_mp_complex);
1465 m = a68g_proc (M_LONG_COMPLEX, M_COMPLEX, NO_MOID);
1466 a68g_op (A68G_STD, "LENG", m, genie_lengthen_complex_to_mp_complex);
1467 m = a68g_proc (M_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1468 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_complex_to_complex);
1469 m = a68g_proc (M_LONG_REAL, M_LONG_COMPLEX, NO_MOID);
1470 a68g_op (A68G_STD, "RE", m, genie_re_mp_complex);
1471 a68g_op (A68G_STD, "IM", m, genie_im_mp_complex);
1472 a68g_op (A68G_STD, "ARG", m, genie_arg_mp_complex);
1473 a68g_op (A68G_STD, "ABS", m, genie_abs_mp_complex);
1474 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1475 a68g_op (A68G_STD, "+", m, genie_idle);
1476 a68g_op (A68G_STD, "-", m, genie_minus_mp_complex);
1477 a68g_op (A68G_STD, "CONJ", m, genie_conj_mp_complex);
1478 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1479 a68g_op (A68G_STD, "+", m, genie_add_mp_complex);
1480 a68g_op (A68G_STD, "-", m, genie_sub_mp_complex);
1481 a68g_op (A68G_STD, "*", m, genie_mul_mp_complex);
1482 a68g_op (A68G_STD, "/", m, genie_div_mp_complex);
1483 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_INT, NO_MOID);
1484 a68g_op (A68G_STD, "**", m, genie_pow_mp_complex_int);
1485 a68g_op (A68G_STD, "UP", m, genie_pow_mp_complex_int);
1486 a68g_op (A68G_STD, "^", m, genie_pow_mp_complex_int);
1487 m = a68g_proc (M_BOOL, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1488 a68g_op (A68G_STD, "=", m, genie_eq_mp_complex);
1489 a68g_op (A68G_STD, "EQ", m, genie_eq_mp_complex);
1490 a68g_op (A68G_STD, "/=", m, genie_ne_mp_complex);
1491 a68g_op (A68G_STD, "~=", m, genie_ne_mp_complex);
1492 a68g_op (A68G_STD, "^=", m, genie_ne_mp_complex);
1493 a68g_op (A68G_STD, "NE", m, genie_ne_mp_complex);
1494 m = a68g_proc (M_REF_LONG_COMPLEX, M_REF_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1495 a68g_op (A68G_STD, "+:=", m, genie_plusab_mp_complex);
1496 a68g_op (A68G_STD, "-:=", m, genie_minusab_mp_complex);
1497 a68g_op (A68G_STD, "*:=", m, genie_timesab_mp_complex);
1498 a68g_op (A68G_STD, "/:=", m, genie_divab_mp_complex);
1499 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_mp_complex);
1500 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_mp_complex);
1501 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_mp_complex);
1502 a68g_op (A68G_STD, "DIVAB", m, genie_divab_mp_complex);
1503 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1504 a68g_id2 (A68G_EXT, "longcomplexarccos", "dcacos", m, genie_acos_mp_complex);
1505 a68g_id2 (A68G_EXT, "longcomplexarccosh", "dcacosh", m, genie_acosh_mp_complex);
1506 a68g_id2 (A68G_EXT, "longcomplexarcsin", "dcasin", m, genie_asin_mp_complex);
1507 a68g_id2 (A68G_EXT, "longcomplexarcsinh", "dcasinh", m, genie_asinh_mp_complex);
1508 a68g_id2 (A68G_EXT, "longcomplexarctan", "dcatan", m, genie_atan_mp_complex);
1509 a68g_id2 (A68G_EXT, "longcomplexarctanh", "dcatanh", m, genie_atanh_mp_complex);
1510 a68g_id2 (A68G_EXT, "longcomplexcos", "dccos", m, genie_cos_mp_complex);
1511 a68g_id2 (A68G_EXT, "longcomplexcosh", "dccosh", m, genie_cosh_mp_complex);
1512 a68g_id2 (A68G_EXT, "longcomplexexp", "dcexp", m, genie_exp_mp_complex);
1513 a68g_id2 (A68G_EXT, "longcomplexln", "dcln", m, genie_ln_mp_complex);
1514 a68g_id2 (A68G_EXT, "longcomplexsin", "dcsin", m, genie_sin_mp_complex);
1515 a68g_id2 (A68G_EXT, "longcomplexsinh", "dcsin", m, genie_sinh_mp_complex);
1516 a68g_id2 (A68G_EXT, "longcomplexsqrt", "dcsqrt", m, genie_sqrt_mp_complex);
1517 a68g_id2 (A68G_EXT, "longcomplextan", "dctan", m, genie_tan_mp_complex);
1518 a68g_id2 (A68G_EXT, "longcomplextanh", "dctanh", m, genie_tanh_mp_complex);
1519
1520 // LONG BITS in software
1521 m = a68g_proc (M_LONG_BITS, M_ROW_BOOL, NO_MOID);
1522 a68g_idf (A68G_STD, "longbitspack", m, genie_long_bits_pack);
1523 m = a68g_proc (M_LONG_INT, M_LONG_BITS, NO_MOID);
1524 a68g_op (A68G_STD, "ABS", m, genie_idle);
1525 m = a68g_proc (M_LONG_BITS, M_LONG_INT, NO_MOID);
1526 a68g_op (A68G_STD, "BIN", m, genie_bin_mp);
1527 m = a68g_proc (M_BITS, M_LONG_BITS, NO_MOID);
1528 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_to_bits);
1529 m = a68g_proc (M_LONG_BITS, M_BITS, NO_MOID);
1530 a68g_op (A68G_STD, "LENG", m, genie_lengthen_unt_to_mp);
1531 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, NO_MOID);
1532 a68g_op (A68G_STD, "NOT", m, genie_not_mp);
1533 a68g_op (A68G_STD, "~", m, genie_not_mp);
1534 m = a68g_proc (M_BOOL, M_LONG_BITS, M_LONG_BITS, NO_MOID);
1535 a68g_op (A68G_STD, "=", m, genie_eq_mp);
1536 a68g_op (A68G_STD, "EQ", m, genie_eq_mp);
1537 a68g_op (A68G_STD, "/=", m, genie_ne_mp);
1538 a68g_op (A68G_STD, "~=", m, genie_ne_mp);
1539 a68g_op (A68G_STD, "^=", m, genie_ne_mp);
1540 a68g_op (A68G_STD, "NE", m, genie_ne_mp);
1541 a68g_op (A68G_STD, "<=", m, genie_le_long_bits);
1542 a68g_op (A68G_STD, "LE", m, genie_le_long_bits);
1543 a68g_op (A68G_STD, ">=", m, genie_ge_long_bits);
1544 a68g_op (A68G_STD, "GE", m, genie_ge_long_bits);
1545 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, M_LONG_BITS, NO_MOID);
1546 a68g_op (A68G_STD, "AND", m, genie_and_mp);
1547 a68g_op (A68G_STD, "&", m, genie_and_mp);
1548 a68g_op (A68G_STD, "OR", m, genie_or_mp);
1549 a68g_op (A68G_EXT, "XOR", m, genie_xor_mp);
1550 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, M_INT, NO_MOID);
1551 a68g_op (A68G_STD, "SHL", m, genie_shl_mp);
1552 a68g_op (A68G_STD, "UP", m, genie_shl_mp);
1553 a68g_op (A68G_STD, "SHR", m, genie_shr_mp);
1554 a68g_op (A68G_STD, "DOWN", m, genie_shr_mp);
1555 m = a68g_proc (M_BOOL, M_INT, M_LONG_BITS, NO_MOID);
1556 a68g_op (A68G_STD, "ELEM", m, genie_elem_long_bits);
1557 m = a68g_proc (M_LONG_BITS, M_INT, M_LONG_BITS, NO_MOID);
1558 a68g_op (A68G_STD, "SET", m, genie_set_long_bits);
1559 a68g_op (A68G_STD, "CLEAR", m, genie_clear_long_bits);
1560 #endif
1561 }
1562
1563 void stand_mp_level_3 (void)
1564 {
1565 #if (A68G_LEVEL >= 3)
1566 a68g_id2 (A68G_STD, "longpi", "dpi", M_LONG_REAL, genie_pi_double);
1567 a68g_idf (A68G_STD, "longmaxbits", M_LONG_BITS, genie_double_max_bits);
1568 a68g_idf (A68G_STD, "longmaxint", M_LONG_INT, genie_double_max_int);
1569 a68g_idf (A68G_STD, "longsmallreal", M_LONG_REAL, genie_double_small_real);
1570 a68g_idf (A68G_STD, "longmaxreal", M_LONG_REAL, genie_double_max_real);
1571 a68g_idf (A68G_STD, "longminreal", M_LONG_REAL, genie_double_min_real);
1572 a68g_idf (A68G_STD, "longinfinity", M_LONG_REAL, genie_infinity_double);
1573 a68g_idf (A68G_STD, "longminusinfinity", M_LONG_REAL, genie_minus_infinity_double);
1574 a68g_idf (A68G_STD, "longinf", M_LONG_REAL, genie_infinity_double);
1575 a68g_idf (A68G_STD, "longmininf", M_LONG_REAL, genie_minus_infinity_double);
1576 // LONG INT as 128 bit
1577 MOID_T *m = a68g_proc (M_LONG_INT, M_LONG_INT, NO_MOID);
1578 a68g_op (A68G_STD, "+", m, genie_idle);
1579 a68g_op (A68G_STD, "-", m, genie_minus_double_int);
1580 a68g_op (A68G_STD, "ABS", m, genie_abs_double_int);
1581 m = a68g_proc (M_LONG_INT, M_INT, NO_MOID);
1582 a68g_op (A68G_STD, "LENG", m, genie_lengthen_int_to_double_int);
1583 m = a68g_proc (M_LONG_LONG_INT, M_LONG_INT, NO_MOID);
1584 a68g_op (A68G_STD, "LENG", m, genie_lengthen_double_int_to_mp);
1585 m = a68g_proc (M_INT, M_LONG_INT, NO_MOID);
1586 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_long_int_to_int);
1587 a68g_op (A68G_STD, "SIGN", m, genie_sign_double_int);
1588 m = a68g_proc (M_BOOL, M_LONG_INT, NO_MOID);
1589 a68g_op (A68G_STD, "ODD", m, genie_odd_double_int);
1590 m = a68g_proc (M_LONG_INT, M_LONG_REAL, NO_MOID);
1591 a68g_op (A68G_EXT, "FLOOR", m, genie_entier_double);
1592 a68g_op (A68G_EXT, "CEIL", m, genie_ceil_double);
1593 a68g_op (A68G_STD, "ENTIER", m, genie_entier_double);
1594 a68g_op (A68G_EXT, "FIX", m, genie_trunc_double);
1595 a68g_op (A68G_EXT, "TRUNC", m, genie_trunc_double);
1596 a68g_op (A68G_EXT, "ROUND", m, genie_round_double);
1597 a68g_op (A68G_EXT, "NINT", m, genie_round_double);
1598 m = a68g_proc (M_LONG_INT, M_LONG_INT, M_LONG_INT, NO_MOID);
1599 a68g_op (A68G_STD, "+", m, genie_add_double_int);
1600 a68g_op (A68G_STD, "-", m, genie_sub_double_int);
1601 a68g_op (A68G_STD, "*", m, genie_mul_double_int);
1602 a68g_op (A68G_STD, "OVER", m, genie_over_double_int);
1603 a68g_op (A68G_STD, "%", m, genie_over_double_int);
1604 a68g_op (A68G_STD, "MOD", m, genie_mod_double_int);
1605 a68g_op (A68G_STD, "%*", m, genie_mod_double_int);
1606 m = a68g_proc (M_LONG_INT, M_LONG_INT, M_INT, NO_MOID);
1607 a68g_op (A68G_STD, "**", m, genie_pow_double_int_int);
1608 a68g_op (A68G_STD, "UP", m, genie_pow_double_int_int);
1609 a68g_op (A68G_STD, "^", m, genie_pow_double_int_int);
1610 m = a68g_proc (M_REF_LONG_INT, M_REF_LONG_INT, M_LONG_INT, NO_MOID);
1611 a68g_op (A68G_STD, "+:=", m, genie_plusab_double_int);
1612 a68g_op (A68G_STD, "-:=", m, genie_minusab_double_int);
1613 a68g_op (A68G_STD, "*:=", m, genie_timesab_double_int);
1614 a68g_op (A68G_STD, "%:=", m, genie_overab_double_int);
1615 a68g_op (A68G_STD, "%*:=", m, genie_modab_double_int);
1616 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_double_int);
1617 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_double_int);
1618 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_double_int);
1619 a68g_op (A68G_STD, "OVERAB", m, genie_overab_double_int);
1620 a68g_op (A68G_STD, "MODAB", m, genie_modab_double_int);
1621 m = a68g_proc (M_LONG_REAL, M_LONG_INT, M_LONG_INT, NO_MOID);
1622 a68g_op (A68G_STD, "/", m, genie_div_double_int);
1623 m = a68g_proc (M_BOOL, M_LONG_INT, M_LONG_INT, NO_MOID);
1624 a68g_op (A68G_STD, "=", m, genie_eq_double_int);
1625 a68g_op (A68G_STD, "EQ", m, genie_eq_double_int);
1626 a68g_op (A68G_STD, "/=", m, genie_ne_double_int);
1627 a68g_op (A68G_STD, "~=", m, genie_ne_double_int);
1628 a68g_op (A68G_STD, "^=", m, genie_ne_double_int);
1629 a68g_op (A68G_STD, "NE", m, genie_ne_double_int);
1630 a68g_op (A68G_STD, "<", m, genie_lt_double_int);
1631 a68g_op (A68G_STD, "LT", m, genie_lt_double_int);
1632 a68g_op (A68G_STD, "<=", m, genie_le_double_int);
1633 a68g_op (A68G_STD, "LE", m, genie_le_double_int);
1634 a68g_op (A68G_STD, ">", m, genie_gt_double_int);
1635 a68g_op (A68G_STD, "GT", m, genie_gt_double_int);
1636 a68g_op (A68G_STD, ">=", m, genie_ge_double_int);
1637 a68g_op (A68G_STD, "GE", m, genie_ge_double_int);
1638 // LONG REAL as 128 bit
1639 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID);
1640 a68g_op (A68G_STD, "+", m, genie_idle);
1641 a68g_op (A68G_STD, "-", m, genie_minus_double);
1642 a68g_op (A68G_STD, "ABS", m, genie_abs_double);
1643 a68g_op (A68G_EXT, "FRAC", m, genie_frac_double);
1644 m = a68g_proc (M_INT, M_LONG_REAL, NO_MOID);
1645 a68g_op (A68G_STD, "SIGN", m, genie_sign_double);
1646 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1647 a68g_op (A68G_STD, "+", m, genie_add_double);
1648 a68g_op (A68G_STD, "-", m, genie_sub_double);
1649 a68g_op (A68G_STD, "*", m, genie_mul_double);
1650 a68g_op (A68G_STD, "/", m, genie_over_double);
1651 a68g_op (A68G_STD, "**", m, genie_pow_double);
1652 a68g_op (A68G_STD, "UP", m, genie_pow_double);
1653 a68g_op (A68G_STD, "^", m, genie_pow_double);
1654 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_INT, NO_MOID);
1655 a68g_op (A68G_STD, "**", m, genie_pow_double_int);
1656 a68g_op (A68G_STD, "UP", m, genie_pow_double_int);
1657 a68g_op (A68G_STD, "^", m, genie_pow_double_int);
1658 m = a68g_proc (M_LONG_REAL, M_REAL, NO_MOID);
1659 a68g_op (A68G_STD, "LENG", m, genie_lengthen_real_to_double);
1660 m = a68g_proc (M_REAL, M_LONG_REAL, NO_MOID);
1661 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_double_to_real);
1662 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_REAL, NO_MOID);
1663 a68g_op (A68G_STD, "LENG", m, genie_lengthen_double_to_mp);
1664 m = a68g_proc (M_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1665 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_to_double);
1666 m = a68g_proc (M_LONG_INT, M_LONG_LONG_INT, NO_MOID);
1667 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_mp_to_double_int);
1668 m = a68g_proc (M_REF_LONG_REAL, M_REF_LONG_REAL, M_LONG_REAL, NO_MOID);
1669 a68g_op (A68G_STD, "+:=", m, genie_plusab_double);
1670 a68g_op (A68G_STD, "-:=", m, genie_minusab_double);
1671 a68g_op (A68G_STD, "*:=", m, genie_timesab_double);
1672 a68g_op (A68G_STD, "/:=", m, genie_divab_double);
1673 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_double);
1674 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_double);
1675 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_double);
1676 a68g_op (A68G_STD, "DIVAB", m, genie_divab_double);
1677 m = a68g_proc (M_BOOL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1678 a68g_op (A68G_STD, "=", m, genie_eq_double);
1679 a68g_op (A68G_STD, "EQ", m, genie_eq_double);
1680 a68g_op (A68G_STD, "/=", m, genie_ne_double);
1681 a68g_op (A68G_STD, "~=", m, genie_ne_double);
1682 a68g_op (A68G_STD, "^=", m, genie_ne_double);
1683 a68g_op (A68G_STD, "NE", m, genie_ne_double);
1684 a68g_op (A68G_STD, "<", m, genie_lt_double);
1685 a68g_op (A68G_STD, "LT", m, genie_lt_double);
1686 a68g_op (A68G_STD, "<=", m, genie_le_double);
1687 a68g_op (A68G_STD, "LE", m, genie_le_double);
1688 a68g_op (A68G_STD, ">", m, genie_gt_double);
1689 a68g_op (A68G_STD, "GT", m, genie_gt_double);
1690 a68g_op (A68G_STD, ">=", m, genie_ge_double);
1691 a68g_op (A68G_STD, "GE", m, genie_ge_double);
1692 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID);
1693 a68g_id2 (A68G_EXT, "longarccosdg", "dacosdg", m, genie_acosdg_double);
1694 a68g_id2 (A68G_EXT, "longarccosh", "dacosh", m, genie_acosh_double);
1695 a68g_id2 (A68G_EXT, "longarccotdg", "dacotdg", m, genie_acotdg_double);
1696 a68g_id2 (A68G_EXT, "longarccot", "dacot", m, genie_acot_double);
1697 a68g_id2 (A68G_EXT, "longarccsc", "dacsc", m, genie_acsc_double);
1698 a68g_id2 (A68G_EXT, "longarccscdg", "dacscdg", m, genie_acscdg_double);
1699 a68g_id2 (A68G_EXT, "longarcsecdg", "dasecdg", m, genie_asecdg_double);
1700 a68g_id2 (A68G_EXT, "longarcsindg", "dasindg", m, genie_asindg_double);
1701 a68g_id2 (A68G_EXT, "longarcsinh", "dasinh", m, genie_asinh_double);
1702 a68g_id2 (A68G_EXT, "longarctandg", "datandg", m, genie_atandg_double);
1703 a68g_id2 (A68G_EXT, "longarctanh", "datanh", m, genie_atanh_double);
1704 a68g_id2 (A68G_EXT, "longcbrt", "dcbrt", m, genie_curt_double);
1705 a68g_id2 (A68G_EXT, "longcosdg", "dcosdg", m, genie_cosdg_double);
1706 a68g_id2 (A68G_EXT, "longcosh", "dcosh", m, genie_cosh_double);
1707 a68g_id2 (A68G_EXT, "longcospi", "dcospi", m, genie_cospi_double);
1708 a68g_id2 (A68G_EXT, "longcotdg", "dcotdg", m, genie_cotdg_double);
1709 a68g_id2 (A68G_EXT, "longcot", "dcot", m, genie_cot_double);
1710 a68g_id2 (A68G_EXT, "longcotpi", "dcotpi", m, genie_cotpi_double);
1711 a68g_id2 (A68G_EXT, "longcsc", "dcsc", m, genie_csc_double);
1712 a68g_id2 (A68G_EXT, "longcscdg", "dcscdg", m, genie_cscdg_double);
1713 a68g_id2 (A68G_EXT, "longcurt", "dcurt", m, genie_curt_double);
1714 a68g_id2 (A68G_EXT, "longerfc", "derfc", m, genie_erfc_double);
1715 a68g_id2 (A68G_EXT, "longerf", "derf", m, genie_erf_double);
1716 a68g_id2 (A68G_EXT, "longinverfc", "dinverfc", m, genie_inverfc_double);
1717 a68g_id2 (A68G_EXT, "longinverf", "dinverf", m, genie_inverf_double);
1718 a68g_id2 (A68G_EXT, "longgamma", "dgamma", m, genie_gamma_double);
1719 a68g_id2 (A68G_EXT, "longlngamma", "dlngamma", m, genie_lngamma_double);
1720 a68g_id2 (A68G_EXT, "longsec", "dsec", m, genie_sec_double);
1721 a68g_id2 (A68G_EXT, "longsecdg", "dsecdg", m, genie_secdg_double);
1722 a68g_id2 (A68G_EXT, "longsindg", "dsindg", m, genie_sindg_double);
1723 a68g_id2 (A68G_EXT, "longsinh", "dsinh", m, genie_sinh_double);
1724 a68g_id2 (A68G_EXT, "longsinpi", "dsinpi", m, genie_sinpi_double);
1725 a68g_id2 (A68G_EXT, "longtandg", "dtandg", m, genie_tandg_double);
1726 a68g_id2 (A68G_EXT, "longtanh", "dtanh", m, genie_tanh_double);
1727 a68g_id2 (A68G_EXT, "longtanpi", "dtanpi", m, genie_tanpi_double);
1728 a68g_id2 (A68G_STD, "longarccos", "dacos", m, genie_acos_double);
1729 a68g_id2 (A68G_STD, "longarcsin", "dasin", m, genie_asin_double);
1730 a68g_id2 (A68G_STD, "longarctan", "datan", m, genie_atan_double);
1731 a68g_id2 (A68G_EXT, "longcas", "dcas", m, genie_cas_double);
1732 a68g_id2 (A68G_STD, "longcos", "dcos", m, genie_cos_double);
1733 a68g_id2 (A68G_STD, "longexp", "dexp", m, genie_exp_double);
1734 a68g_id2 (A68G_STD, "longln", "dln", m, genie_ln_double);
1735 a68g_id2 (A68G_STD, "longlog", "dlog", m, genie_log_double);
1736 a68g_id2 (A68G_STD, "longsin", "dsin", m, genie_sin_double);
1737 a68g_id2 (A68G_STD, "longsqrt", "dsqrt", m, genie_sqrt_double);
1738 a68g_id2 (A68G_STD, "longtan", "dtan", m, genie_tan_double);
1739 m = a68g_proc (M_LONG_REAL, NO_MOID);
1740 a68g_idf (A68G_STD, "longnextrandom", m, genie_next_random_double);
1741 a68g_idf (A68G_STD, "longrandom", m, genie_next_random_double);
1742 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1743 a68g_id2 (A68G_EXT, "longarctan2dg", "datan2dg", m, genie_atan2dg_double);
1744 a68g_id2 (A68G_EXT, "longarctan2", "datan2", m, genie_atan2_double);
1745 a68g_id2 (A68G_EXT, "longbeta", "dbeta", m, genie_beta_double);
1746 a68g_id2 (A68G_EXT, "longgammaincgf", "dgammaincgf", m, genie_gamma_inc_gf_double);
1747 a68g_id2 (A68G_EXT, "longgammaincf", "dgammaincf", m, genie_gamma_inc_f_double);
1748 a68g_id2 (A68G_EXT, "longgammainc", "dgammainc", m, genie_gamma_inc_h_double);
1749 a68g_id2 (A68G_EXT, "longlnbeta", "dlnbeta", m, genie_ln_beta_double);
1750 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1751 a68g_id2 (A68G_EXT, "longbetainc", "dbetainc", m, genie_beta_inc_cf_double);
1752 m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1753 a68g_id2 (A68G_EXT, "longgammaincg", "dgammaincg", m, genie_gamma_inc_g_double);
1754 // LONG BITS as 128 bit
1755 m = a68g_proc (M_LONG_BITS, M_ROW_BOOL, NO_MOID);
1756 a68g_idf (A68G_STD, "longbitspack", m, genie_double_bits_pack);
1757 m = a68g_proc (M_BITS, M_LONG_BITS, NO_MOID);
1758 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_double_bits_to_bits);
1759 m = a68g_proc (M_LONG_BITS, M_BITS, NO_MOID);
1760 a68g_op (A68G_STD, "LENG", m, genie_lengthen_bits_to_double_bits);
1761 m = a68g_proc (M_LONG_INT, M_LONG_BITS, NO_MOID);
1762 a68g_op (A68G_STD, "ABS", m, genie_idle);
1763 m = a68g_proc (M_LONG_BITS, M_LONG_INT, NO_MOID);
1764 a68g_op (A68G_STD, "BIN", m, genie_bin_double_int);
1765 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, NO_MOID);
1766 a68g_op (A68G_STD, "NOT", m, genie_not_double_bits);
1767 a68g_op (A68G_STD, "~", m, genie_not_double_bits);
1768 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, M_LONG_BITS, NO_MOID);
1769 a68g_op (A68G_STD, "AND", m, genie_and_double_bits);
1770 a68g_op (A68G_STD, "&", m, genie_and_double_bits);
1771 a68g_op (A68G_STD, "OR", m, genie_or_double_bits);
1772 a68g_op (A68G_EXT, "XOR", m, genie_xor_double_bits);
1773 a68g_op (A68G_EXT, "+", m, genie_add_double_bits);
1774 a68g_op (A68G_EXT, "-", m, genie_sub_double_bits);
1775 a68g_op (A68G_EXT, "*", m, genie_times_double_bits);
1776 a68g_op (A68G_EXT, "OVER", m, genie_over_double_bits);
1777 a68g_op (A68G_EXT, "MOD", m, genie_over_double_bits);
1778 m = a68g_proc (M_BOOL, M_LONG_BITS, M_LONG_BITS, NO_MOID);
1779 a68g_op (A68G_STD, "=", m, genie_eq_double_bits);
1780 a68g_op (A68G_STD, "/=", m, genie_ne_double_bits);
1781 a68g_op (A68G_STD, "~=", m, genie_ne_double_bits);
1782 a68g_op (A68G_STD, "^=", m, genie_ne_double_bits);
1783 a68g_op (A68G_STD, "<=", m, genie_le_double_bits);
1784 a68g_op (A68G_STD, ">=", m, genie_ge_double_bits);
1785 a68g_op (A68G_STD, "EQ", m, genie_eq_double_bits);
1786 a68g_op (A68G_STD, "NE", m, genie_ne_double_bits);
1787 a68g_op (A68G_STD, "LE", m, genie_le_double_bits);
1788 a68g_op (A68G_STD, "GE", m, genie_ge_double_bits);
1789 a68g_op (A68G_EXT, "<", m, genie_lt_double_bits);
1790 a68g_op (A68G_EXT, ">", m, genie_gt_double_bits);
1791 a68g_op (A68G_EXT, "LT", m, genie_lt_double_bits);
1792 a68g_op (A68G_EXT, "GT", m, genie_gt_double_bits);
1793 m = a68g_proc (M_BOOL, M_INT, M_LONG_BITS, NO_MOID);
1794 a68g_op (A68G_STD, "ELEM", m, genie_elem_double_bits);
1795 m = a68g_proc (M_LONG_BITS, M_INT, M_LONG_BITS, NO_MOID);
1796 a68g_op (A68G_STD, "SET", m, genie_set_double_bits);
1797 a68g_op (A68G_STD, "CLEAR", m, genie_clear_double_bits);
1798 m = a68g_proc (M_LONG_BITS, M_LONG_BITS, M_INT, NO_MOID);
1799 a68g_op (A68G_STD, "SHL", m, genie_shl_double_bits);
1800 a68g_op (A68G_STD, "UP", m, genie_shl_double_bits);
1801 a68g_op (A68G_STD, "SHR", m, genie_shr_double_bits);
1802 a68g_op (A68G_STD, "DOWN", m, genie_shr_double_bits);
1803 a68g_op (A68G_EXT, "ROL", m, genie_rol_double_bits);
1804 a68g_op (A68G_EXT, "ROR", m, genie_ror_double_bits);
1805 // LONG COMPLEX as 2 x 128 bit.
1806 m = a68g_proc (M_LONG_COMPLEX, M_COMPLEX, NO_MOID);
1807 a68g_op (A68G_STD, "LENG", m, genie_lengthen_complex_to_double_compl);
1808 m = a68g_proc (M_LONG_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1809 a68g_op (A68G_STD, "LENG", m, genie_lengthen_double_compl_to_long_mp_complex);
1810 m = a68g_proc (M_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1811 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_double_compl_to_complex);
1812 m = a68g_proc (M_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID);
1813 a68g_op (A68G_STD, "SHORTEN", m, genie_shorten_long_mp_complex_to_double_compl);
1814 m = a68g_proc (M_LONG_COMPLEX, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1815 a68g_op (A68G_STD, "I", m, genie_i_double_compl);
1816 a68g_op (A68G_STD, "+*", m, genie_i_double_compl);
1817 m = a68g_proc (M_LONG_COMPLEX, M_LONG_INT, M_LONG_INT, NO_MOID);
1818 a68g_op (A68G_STD, "I", m, genie_i_int_double_compl);
1819 a68g_op (A68G_STD, "+*", m, genie_i_int_double_compl);
1820 m = a68g_proc (M_LONG_REAL, M_LONG_COMPLEX, NO_MOID);
1821 a68g_op (A68G_STD, "RE", m, genie_re_double_compl);
1822 a68g_op (A68G_STD, "IM", m, genie_im_double_compl);
1823 a68g_op (A68G_STD, "ABS", m, genie_abs_double_compl);
1824 a68g_op (A68G_STD, "ARG", m, genie_arg_double_compl);
1825 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1826 a68g_op (A68G_STD, "+", m, genie_idle);
1827 a68g_op (A68G_STD, "-", m, genie_minus_double_compl);
1828 a68g_op (A68G_STD, "CONJ", m, genie_conj_double_compl);
1829 m = a68g_proc (M_BOOL, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1830 a68g_op (A68G_STD, "=", m, genie_eq_double_compl);
1831 a68g_op (A68G_STD, "/=", m, genie_ne_double_compl);
1832 a68g_op (A68G_STD, "~=", m, genie_ne_double_compl);
1833 a68g_op (A68G_STD, "^=", m, genie_ne_double_compl);
1834 a68g_op (A68G_STD, "EQ", m, genie_eq_double_compl);
1835 a68g_op (A68G_STD, "NE", m, genie_ne_double_compl);
1836 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1837 a68g_op (A68G_STD, "+", m, genie_add_double_compl);
1838 a68g_op (A68G_STD, "-", m, genie_sub_double_compl);
1839 a68g_op (A68G_STD, "*", m, genie_mul_double_compl);
1840 a68g_op (A68G_STD, "/", m, genie_div_double_compl);
1841 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_INT, NO_MOID);
1842 a68g_op (A68G_STD, "**", m, genie_pow_double_compl_int);
1843 a68g_op (A68G_STD, "UP", m, genie_pow_double_compl_int);
1844 a68g_op (A68G_STD, "^", m, genie_pow_double_compl_int);
1845 m = a68g_proc (M_REF_LONG_COMPLEX, M_REF_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1846 a68g_op (A68G_STD, "+:=", m, genie_plusab_double_compl);
1847 a68g_op (A68G_STD, "-:=", m, genie_minusab_double_compl);
1848 a68g_op (A68G_STD, "*:=", m, genie_timesab_double_compl);
1849 a68g_op (A68G_STD, "/:=", m, genie_divab_double_compl);
1850 a68g_op (A68G_STD, "PLUSAB", m, genie_plusab_double_compl);
1851 a68g_op (A68G_STD, "MINUSAB", m, genie_minusab_double_compl);
1852 a68g_op (A68G_STD, "TIMESAB", m, genie_timesab_double_compl);
1853 a68g_op (A68G_STD, "DIVAB", m, genie_divab_double_compl);
1854 m = a68g_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID);
1855 a68g_id2 (A68G_EXT, "longcomplexarccosh", "dcacosh", m, genie_acosh_double_compl);
1856 a68g_id2 (A68G_EXT, "longcomplexarccos", "dcacos", m, genie_acos_double_compl);
1857 a68g_id2 (A68G_EXT, "longcomplexarcsinh", "dcasinh", m, genie_asinh_double_compl);
1858 a68g_id2 (A68G_EXT, "longcomplexarcsin", "dcasin", m, genie_asin_double_compl);
1859 a68g_id2 (A68G_EXT, "longcomplexarctanh", "dcatanh", m, genie_atanh_double_compl);
1860 a68g_id2 (A68G_EXT, "longcomplexarctan", "dcatan", m, genie_atan_double_compl);
1861 a68g_id2 (A68G_EXT, "longcomplexatanh", "dcatanh", m, genie_atanh_double_compl);
1862 a68g_id2 (A68G_EXT, "longcomplexcosh", "dccosh", m, genie_cosh_double_compl);
1863 a68g_id2 (A68G_EXT, "longcomplexcos", "dccos", m, genie_cos_double_compl);
1864 a68g_id2 (A68G_EXT, "longcomplexexp", "dcexp", m, genie_exp_double_compl);
1865 a68g_id2 (A68G_EXT, "longcomplexln", "dcln", m, genie_ln_double_compl);
1866 a68g_id2 (A68G_EXT, "longcomplexsinh", "dcsinh", m, genie_sinh_double_compl);
1867 a68g_id2 (A68G_EXT, "longcomplexsin", "dcsin", m, genie_sin_double_compl);
1868 a68g_id2 (A68G_EXT, "longcomplexsqrt", "dcsqrt", m, genie_sqrt_double_compl);
1869 a68g_id2 (A68G_EXT, "longcomplextanh", "dctanh", m, genie_tanh_double_compl);
1870 a68g_id2 (A68G_EXT, "longcomplextan", "dctan", m, genie_tan_double_compl);
1871
1872 #endif
1873 }
1874
1875 void stand_mpfr (void)
1876 {
1877 #if defined (HAVE_GNU_MPFR)
1878 MOID_T *m = a68g_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID);
1879 a68g_id2 (A68G_EXT, "mpfrlonggammainc", "mpfrdgammainc", m, genie_gamma_inc_double_mpfr);
1880 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1881 a68g_id2 (A68G_STD, "mpfrlonglongbeta", "mpfrqbeta", m, genie_beta_mpfr);
1882 a68g_id2 (A68G_STD, "mpfrlonglonggammainc", "mpfrqgammainc", m, genie_gamma_inc_mpfr);
1883 a68g_id2 (A68G_STD, "mpfrlonglonglnbeta", "mpfrqlnbeta", m, genie_ln_beta_mpfr);
1884 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1885 a68g_id2 (A68G_STD, "mpfrlonglongbetainc", "mpfrqbetainc", m, genie_beta_inc_mpfr);
1886 m = a68g_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID);
1887 a68g_id2 (A68G_EXT, "mpfrlonglongerfc", "mpfrqerfc", m, genie_mpfr_erfc_mp);
1888 a68g_id2 (A68G_EXT, "mpfrlonglongerf", "mpfrqerf", m, genie_mpfr_erf_mp);
1889 a68g_id2 (A68G_EXT, "mpfrlonglonggamma", "mpfrqgamma", m, genie_gamma_mpfr);
1890 a68g_id2 (A68G_EXT, "mpfrlonglonginverfc", "mpfrqinverfc", m, genie_mpfr_inverfc_mp);
1891 a68g_id2 (A68G_EXT, "mpfrlonglonginverf", "mpfrqinverf", m, genie_mpfr_inverf_mp);
1892 a68g_id2 (A68G_EXT, "mpfrlonglonglngamma", "mpfrqlngamma", m, genie_lngamma_mpfr);
1893 a68g_idf (A68G_EXT, "mpfrmp", m, genie_mpfr_mp);
1894 #endif
1895 }
1896
1897 void stand_transput (void)
1898 {
1899 a68g_idf (A68G_EXT, "blankcharacter", M_CHAR, genie_blank_char);
1900 a68g_idf (A68G_EXT, "formfeedcharacter", M_CHAR, genie_formfeed_char);
1901 a68g_idf (A68G_EXT, "formfeedchar", M_CHAR, genie_formfeed_char);
1902 a68g_idf (A68G_EXT, "newlinecharacter", M_CHAR, genie_newline_char);
1903 a68g_idf (A68G_EXT, "newlinechar", M_CHAR, genie_newline_char);
1904 a68g_idf (A68G_EXT, "nullcharacter", M_CHAR, genie_null_char);
1905 a68g_idf (A68G_EXT, "tabcharacter", M_CHAR, genie_tab_char);
1906 a68g_idf (A68G_EXT, "tabchar", M_CHAR, genie_tab_char);
1907 a68g_idf (A68G_STD, "blankchar", M_CHAR, genie_blank_char);
1908 a68g_idf (A68G_STD, "blank", M_CHAR, genie_blank_char);
1909 a68g_idf (A68G_STD, "eofcharacter", M_CHAR, genie_eof_char);
1910 a68g_idf (A68G_STD, "eofchar", M_CHAR, genie_eof_char);
1911 a68g_idf (A68G_STD, "errorchar", M_CHAR, genie_error_char);
1912 a68g_idf (A68G_STD, "expchar", M_CHAR, genie_exp_char);
1913 a68g_idf (A68G_STD, "flip", M_CHAR, genie_flip_char);
1914 a68g_idf (A68G_STD, "flop", M_CHAR, genie_flop_char);
1915 a68g_idf (A68G_STD, "nullchar", M_CHAR, genie_null_char);
1916 MOID_T *m = a68g_proc (M_STRING, M_HEX_NUMBER, M_INT, M_INT, NO_MOID);
1917 a68g_idf (A68G_STD, "bits", m, genie_bits);
1918 m = a68g_proc (M_STRING, M_NUMBER, M_INT, NO_MOID);
1919 a68g_idf (A68G_STD, "whole", m, genie_whole);
1920 m = a68g_proc (M_STRING, M_NUMBER, M_INT, M_INT, NO_MOID);
1921 a68g_idf (A68G_STD, "fixed", m, genie_fixed);
1922 m = a68g_proc (M_STRING, M_NUMBER, M_INT, M_INT, M_INT, NO_MOID);
1923 a68g_idf (A68G_STD, "float", m, genie_float);
1924 m = a68g_proc (M_STRING, M_NUMBER, M_INT, M_INT, M_INT, M_INT, NO_MOID);
1925 a68g_idf (A68G_STD, "real", m, genie_real);
1926 a68g_idf (A68G_STD, "standin", M_REF_FILE, genie_stand_in);
1927 a68g_idf (A68G_STD, "standout", M_REF_FILE, genie_stand_out);
1928 a68g_idf (A68G_STD, "standback", M_REF_FILE, genie_stand_back);
1929 a68g_idf (A68G_EXT, "standerror", M_REF_FILE, genie_stand_error);
1930 a68g_idf (A68G_STD, "standinchannel", M_CHANNEL, genie_stand_in_channel);
1931 a68g_idf (A68G_STD, "standoutchannel", M_CHANNEL, genie_stand_out_channel);
1932 a68g_idf (A68G_EXT, "standdrawchannel", M_CHANNEL, genie_stand_draw_channel);
1933 a68g_idf (A68G_STD, "standbackchannel", M_CHANNEL, genie_stand_back_channel);
1934 a68g_idf (A68G_EXT, "standerrorchannel", M_CHANNEL, genie_stand_error_channel);
1935 m = a68g_proc (M_VOID, M_REF_FILE, M_STRING, NO_MOID);
1936 a68g_idf (A68G_STD, "maketerm", m, genie_make_term);
1937 m = a68g_proc (M_BOOL, M_CHAR, M_REF_INT, M_STRING, NO_MOID);
1938 a68g_idf (A68G_STD, "charinstring", m, genie_char_in_string);
1939 a68g_idf (A68G_EXT, "lastcharinstring", m, genie_last_char_in_string);
1940 m = a68g_proc (M_BOOL, M_STRING, M_REF_INT, M_STRING, NO_MOID);
1941 a68g_idf (A68G_EXT, "stringinstring", m, genie_string_in_string);
1942 m = a68g_proc (M_STRING, M_REF_FILE, NO_MOID);
1943 a68g_idf (A68G_EXT, "idf", m, genie_idf);
1944 a68g_idf (A68G_EXT, "term", m, genie_term);
1945 m = a68g_proc (M_STRING, NO_MOID);
1946 a68g_idf (A68G_EXT, "programidf", m, genie_program_idf);
1947 // Event routines.
1948 m = a68g_proc (M_VOID, M_REF_FILE, M_PROC_REF_FILE_BOOL, NO_MOID);
1949 a68g_idf (A68G_STD, "onfileend", m, genie_on_file_end);
1950 a68g_idf (A68G_STD, "onpageend", m, genie_on_page_end);
1951 a68g_idf (A68G_STD, "onlineend", m, genie_on_line_end);
1952 a68g_idf (A68G_STD, "onlogicalfileend", m, genie_on_file_end);
1953 a68g_idf (A68G_STD, "onphysicalfileend", m, genie_on_file_end);
1954 a68g_idf (A68G_STD, "onformatend", m, genie_on_format_end);
1955 a68g_idf (A68G_STD, "onformaterror", m, genie_on_format_error);
1956 a68g_idf (A68G_STD, "onvalueerror", m, genie_on_value_error);
1957 a68g_idf (A68G_STD, "onopenerror", m, genie_on_open_error);
1958 a68g_idf (A68G_EXT, "ontransputerror", m, genie_on_transput_error);
1959 // Enquiries on files.
1960 a68g_idf (A68G_EXT, "drawpossible", M_PROC_REF_FILE_BOOL, genie_draw_possible);
1961 a68g_idf (A68G_EXT, "endoffile", M_PROC_REF_FILE_BOOL, genie_eof);
1962 a68g_idf (A68G_EXT, "endofline", M_PROC_REF_FILE_BOOL, genie_eoln);
1963 a68g_idf (A68G_EXT, "eof", M_PROC_REF_FILE_BOOL, genie_eof);
1964 a68g_idf (A68G_EXT, "eoln", M_PROC_REF_FILE_BOOL, genie_eoln);
1965 a68g_idf (A68G_EXT, "rewindpossible", M_PROC_REF_FILE_BOOL, genie_reset_possible);
1966 a68g_idf (A68G_STD, "binpossible", M_PROC_REF_FILE_BOOL, genie_bin_possible);
1967 a68g_idf (A68G_STD, "compressible", M_PROC_REF_FILE_BOOL, genie_compressible);
1968 a68g_idf (A68G_STD, "getpossible", M_PROC_REF_FILE_BOOL, genie_get_possible);
1969 a68g_idf (A68G_STD, "putpossible", M_PROC_REF_FILE_BOOL, genie_put_possible);
1970 a68g_idf (A68G_STD, "reidfpossible", M_PROC_REF_FILE_BOOL, genie_reidf_possible);
1971 a68g_idf (A68G_STD, "resetpossible", M_PROC_REF_FILE_BOOL, genie_reset_possible);
1972 a68g_idf (A68G_STD, "setpossible", M_PROC_REF_FILE_BOOL, genie_set_possible);
1973 // Handling of files.
1974 m = a68g_proc (M_INT, M_REF_FILE, M_STRING, M_CHANNEL, NO_MOID);
1975 a68g_idf (A68G_STD, "open", m, genie_open);
1976 a68g_idf (A68G_STD, "append", m, genie_append);
1977 a68g_idf (A68G_STD, "establish", m, genie_establish);
1978 m = a68g_proc (M_VOID, M_REF_FILE, M_REF_STRING, NO_MOID);
1979 a68g_idf (A68G_STD, "associate", m, genie_associate);
1980 m = a68g_proc (M_INT, M_REF_FILE, M_CHANNEL, NO_MOID);
1981 a68g_idf (A68G_EXT, "cooked", M_PROC_REF_FILE_VOID, genie_kbd_cooked);
1982 a68g_idf (A68G_EXT, "raw", M_PROC_REF_FILE_VOID, genie_kbd_raw);
1983 a68g_idf (A68G_EXT, "rewind", M_PROC_REF_FILE_VOID, genie_reset);
1984 a68g_idf (A68G_STD, "backspace", M_PROC_REF_FILE_VOID, genie_backspace);
1985 a68g_idf (A68G_STD, "close", M_PROC_REF_FILE_VOID, genie_close);
1986 a68g_idf (A68G_STD, "create", m, genie_create);
1987 a68g_idf (A68G_STD, "erase", M_PROC_REF_FILE_VOID, genie_erase);
1988 a68g_idf (A68G_STD, "lock", M_PROC_REF_FILE_VOID, genie_lock);
1989 a68g_idf (A68G_STD, "newline", M_PROC_REF_FILE_VOID, genie_new_line);
1990 a68g_idf (A68G_STD, "newpage", M_PROC_REF_FILE_VOID, genie_new_page);
1991 a68g_idf (A68G_STD, "reset", M_PROC_REF_FILE_VOID, genie_reset);
1992 a68g_idf (A68G_STD, "scratch", M_PROC_REF_FILE_VOID, genie_erase);
1993 a68g_idf (A68G_STD, "space", M_PROC_REF_FILE_VOID, genie_space);
1994 m = a68g_proc (M_INT, M_REF_FILE, M_INT, NO_MOID);
1995 a68g_idf (A68G_STD, "set", m, genie_set);
1996 a68g_idf (A68G_STD, "seek", m, genie_set);
1997 m = a68g_proc (M_VOID, M_ROW_SIMPLIN, NO_MOID);
1998 a68g_idf (A68G_STD, "read", m, genie_read);
1999 a68g_idf (A68G_STD, "readbin", m, genie_read_bin);
2000 a68g_idf (A68G_STD, "readf", m, genie_read_format);
2001 m = a68g_proc (M_VOID, M_ROW_SIMPLOUT, NO_MOID);
2002 a68g_idf (A68G_STD, "printbin", m, genie_write_bin);
2003 a68g_idf (A68G_STD, "printf", m, genie_write_format);
2004 a68g_idf (A68G_STD, "print", m, genie_write);
2005 a68g_idf (A68G_STD, "writebin", m, genie_write_bin);
2006 a68g_idf (A68G_STD, "writef", m, genie_write_format);
2007 a68g_idf (A68G_STD, "write", m, genie_write);
2008 m = a68g_proc (M_VOID, M_REF_FILE, M_ROW_SIMPLIN, NO_MOID);
2009 a68g_idf (A68G_STD, "get", m, genie_read_file);
2010 a68g_idf (A68G_STD, "getf", m, genie_read_file_format);
2011 a68g_idf (A68G_STD, "getbin", m, genie_read_bin_file);
2012 m = a68g_proc (M_VOID, M_REF_FILE, M_ROW_SIMPLOUT, NO_MOID);
2013 a68g_idf (A68G_STD, "put", m, genie_write_file);
2014 a68g_idf (A68G_STD, "putf", m, genie_write_file_format);
2015 a68g_idf (A68G_STD, "putbin", m, genie_write_bin_file);
2016 m = a68g_proc (M_VOID, M_REF_STRING, M_ROW_SIMPLIN, NO_MOID);
2017 a68g_idf (A68G_EXT, "gets", m, genie_get_text);
2018 a68g_idf (A68G_EXT, "getsf", m, genie_getf_text);
2019 m = a68g_proc (M_VOID, M_REF_STRING, M_ROW_SIMPLOUT, NO_MOID);
2020 a68g_idf (A68G_EXT, "puts", m, genie_put_text);
2021 a68g_idf (A68G_EXT, "putsf", m, genie_putf_text);
2022 m = a68g_proc (M_REF_STRING, M_REF_STRING, M_ROW_SIMPLOUT, NO_MOID);
2023 a68g_idf (A68G_EXT, "string", m, genie_string);
2024 a68g_idf (A68G_EXT, "stringf", m, genie_stringf);
2025 A68C_DEFIO (bits, bits, BITS);
2026 A68C_DEFIO (bool, bool, BOOL);
2027 A68C_DEFIO (char, char, CHAR);
2028 A68C_DEFIO (compl, complex, COMPLEX);
2029 A68C_DEFIO (complex, complex, COMPLEX);
2030 A68C_DEFIO (double, long_real, LONG_REAL);
2031 A68C_DEFIO (int, int, INT);
2032 A68C_DEFIO (longbits, long_bits, LONG_BITS);
2033 A68C_DEFIO (longcomplex, mp_complex, LONG_COMPLEX);
2034 A68C_DEFIO (longcompl, mp_complex, LONG_COMPLEX);
2035 A68C_DEFIO (longint, long_int, LONG_INT);
2036 A68C_DEFIO (longlongcomplex, long_mp_complex, LONG_LONG_COMPLEX);
2037 A68C_DEFIO (longlongcompl, long_mp_complex, LONG_LONG_COMPLEX);
2038 A68C_DEFIO (longlongint, long_mp_int, LONG_LONG_INT);
2039 A68C_DEFIO (longlongreal, long_mp_real, LONG_LONG_REAL);
2040 A68C_DEFIO (longreal, long_real, LONG_REAL);
2041 A68C_DEFIO (quad, long_mp_real, LONG_LONG_REAL);
2042 A68C_DEFIO (real, real, REAL);
2043 A68C_DEFIO (string, string, STRING);
2044 a68g_idf (A68G_EXT, "readline", M_PROC_STRING, genie_read_line);
2045 }
2046
2047 //! @brief Set up standenv - extensions.
2048
2049 void stand_extensions (void)
2050 {
2051 // UNIX things.
2052 MOID_T *m = A68G_MCACHE (proc_int);
2053 a68g_idf (A68G_EXT, "rows", m, genie_rows);
2054 a68g_idf (A68G_EXT, "columns", m, genie_columns);
2055 a68g_idf (A68G_EXT, "argc", m, genie_argc);
2056 a68g_idf (A68G_EXT, "a68gargc", m, genie_a68g_argc);
2057 a68g_idf (A68G_EXT, "errno", m, genie_errno);
2058 a68g_idf (A68G_EXT, "fork", m, genie_fork);
2059 m = a68g_proc (M_STRING, NO_MOID);
2060 a68g_idf (A68G_EXT, "getpwd", m, genie_pwd);
2061 m = a68g_proc (M_INT, M_STRING, NO_MOID);
2062 a68g_idf (A68G_EXT, "setpwd", m, genie_cd);
2063 m = a68g_proc (M_BOOL, M_STRING, NO_MOID);
2064 a68g_idf (A68G_EXT, "fileisdirectory", m, genie_file_is_directory);
2065 a68g_idf (A68G_EXT, "fileisblockdevice", m, genie_file_is_block_device);
2066 a68g_idf (A68G_EXT, "fileischardevice", m, genie_file_is_char_device);
2067 a68g_idf (A68G_EXT, "fileisregular", m, genie_file_is_regular);
2068 #if defined (S_ISFIFO)
2069 a68g_idf (A68G_EXT, "fileisfifo", m, genie_file_is_fifo);
2070 #endif
2071 #if defined (S_ISLNK)
2072 a68g_idf (A68G_EXT, "fileislink", m, genie_file_is_link);
2073 #endif
2074 m = a68g_proc (M_BITS, M_STRING, NO_MOID);
2075 a68g_idf (A68G_EXT, "filemode", m, genie_file_mode);
2076 m = a68g_proc (M_STRING, M_INT, NO_MOID);
2077 a68g_idf (A68G_EXT, "argv", m, genie_argv);
2078 a68g_idf (A68G_EXT, "a68gargv", m, genie_a68g_argv);
2079 a68g_idf (A68G_EXT, "reseterrno", A68G_MCACHE (proc_void), genie_reset_errno);
2080 m = a68g_proc (M_STRING, M_INT, NO_MOID);
2081 a68g_idf (A68G_EXT, "strerror", m, genie_strerror);
2082 m = a68g_proc (M_INT, M_STRING, M_ROW_STRING, M_ROW_STRING, NO_MOID);
2083 a68g_idf (A68G_EXT, "exec", m, genie_exec);
2084 a68g_idf (A68G_EXT, "execve", m, genie_exec);
2085 m = a68g_proc (M_PIPE, NO_MOID);
2086 a68g_idf (A68G_EXT, "createpipe", m, genie_create_pipe);
2087 m = a68g_proc (M_INT, M_STRING, M_ROW_STRING, M_ROW_STRING, NO_MOID);
2088 a68g_idf (A68G_EXT, "execsub", m, genie_exec_sub);
2089 a68g_idf (A68G_EXT, "execvechild", m, genie_exec_sub);
2090 m = a68g_proc (M_PIPE, M_STRING, M_ROW_STRING, M_ROW_STRING, NO_MOID);
2091 a68g_idf (A68G_EXT, "execsubpipeline", m, genie_exec_sub_pipeline);
2092 a68g_idf (A68G_EXT, "execvechildpipe", m, genie_exec_sub_pipeline);
2093 m = a68g_proc (M_INT, M_STRING, M_ROW_STRING, M_ROW_STRING, M_REF_STRING, NO_MOID);
2094 a68g_idf (A68G_EXT, "execsuboutput", m, genie_exec_sub_output);
2095 a68g_idf (A68G_EXT, "execveoutput", m, genie_exec_sub_output);
2096 m = a68g_proc (M_STRING, M_STRING, NO_MOID);
2097 a68g_idf (A68G_EXT, "getenv", m, genie_getenv);
2098 m = a68g_proc (M_INT, M_INT, NO_MOID);
2099 a68g_idf (A68G_EXT, "waitpid", m, genie_waitpid);
2100 m = a68g_proc (M_ROW_INT, NO_MOID);
2101 a68g_idf (A68G_EXT, "utctime", m, genie_utctime);
2102 a68g_idf (A68G_EXT, "localtime", m, genie_localtime);
2103 m = a68g_proc (M_INT, M_STRING, M_STRING, M_REF_INT, M_REF_INT, NO_MOID);
2104 a68g_idf (A68G_EXT, "grepinstring", m, genie_grep_in_string);
2105 a68g_idf (A68G_EXT, "grepinsubstring", m, genie_grep_in_substring);
2106 m = a68g_proc (M_INT, M_STRING, M_STRING, M_REF_STRING, NO_MOID);
2107 a68g_idf (A68G_EXT, "subinstring", m, genie_sub_in_string);
2108 #if defined (BUILD_UNIX) || defined (BUILD_WINDOWS)
2109 m = a68g_proc (M_CHAR, M_INT, NO_MOID);
2110 a68g_idf (A68G_EXT, "peekchar", m, genie_peek_char);
2111 #endif
2112 #if defined (HAVE_DIRENT_H)
2113 m = a68g_proc (M_ROW_STRING, M_STRING, NO_MOID);
2114 a68g_idf (A68G_EXT, "getdirectory", m, genie_directory);
2115 #endif
2116 #if defined (HAVE_CURL)
2117 m = a68g_proc (M_VOID, M_INT, M_INT, NO_MOID);
2118 a68g_idf (A68G_EXT, "httptimeout", m, genie_curl_timeout);
2119 a68g_idf (A68G_EXT, "httpstimeout", m, genie_curl_timeout);
2120 m = a68g_proc (M_INT, M_REF_STRING, M_STRING, M_STRING, M_INT, NO_MOID);
2121 a68g_idf (A68G_EXT, "httpcontent", m, genie_http_content);
2122 a68g_idf (A68G_EXT, "httpscontent", m, genie_https_content);
2123 #endif
2124 }
2125
2126 #if defined (HAVE_GNU_PLOTUTILS)
2127
2128 void stand_plot (void)
2129 {
2130 // Drawing.
2131 MOID_T *m = a68g_proc (M_BOOL, M_REF_FILE, M_STRING, M_STRING, NO_MOID);
2132 a68g_idf (A68G_EXT, "drawdevice", m, genie_make_device);
2133 a68g_idf (A68G_EXT, "makedevice", m, genie_make_device);
2134 m = a68g_proc (M_REAL, M_REF_FILE, NO_MOID);
2135 a68g_idf (A68G_EXT, "drawaspect", m, genie_draw_aspect);
2136 m = a68g_proc (M_VOID, M_REF_FILE, NO_MOID);
2137 a68g_idf (A68G_EXT, "drawclear", m, genie_draw_clear);
2138 a68g_idf (A68G_EXT, "drawerase", m, genie_draw_clear);
2139 a68g_idf (A68G_EXT, "drawflush", m, genie_draw_show);
2140 a68g_idf (A68G_EXT, "drawshow", m, genie_draw_show);
2141 m = a68g_proc (M_VOID, M_REF_FILE, M_INT, NO_MOID);
2142 a68g_idf (A68G_EXT, "drawfillstyle", m, genie_draw_fillstyle);
2143 m = a68g_proc (M_STRING, M_INT, NO_MOID);
2144 a68g_idf (A68G_EXT, "drawgetcolourname", m, genie_draw_get_colour_name);
2145 a68g_idf (A68G_EXT, "drawgetcolorname", m, genie_draw_get_colour_name);
2146 m = a68g_proc (M_VOID, M_REF_FILE, M_REAL, M_REAL, M_REAL, NO_MOID);
2147 a68g_idf (A68G_EXT, "drawcolor", m, genie_draw_colour);
2148 a68g_idf (A68G_EXT, "drawcolour", m, genie_draw_colour);
2149 a68g_idf (A68G_EXT, "drawbackgroundcolor", m, genie_draw_background_colour);
2150 a68g_idf (A68G_EXT, "drawbackgroundcolour", m, genie_draw_background_colour);
2151 a68g_idf (A68G_EXT, "drawcircle", m, genie_draw_circle);
2152 a68g_idf (A68G_EXT, "drawball", m, genie_draw_atom);
2153 a68g_idf (A68G_EXT, "drawstar", m, genie_draw_star);
2154 m = a68g_proc (M_VOID, M_REF_FILE, M_REAL, M_REAL, NO_MOID);
2155 a68g_idf (A68G_EXT, "drawpoint", m, genie_draw_point);
2156 a68g_idf (A68G_EXT, "drawline", m, genie_draw_line);
2157 a68g_idf (A68G_EXT, "drawmove", m, genie_draw_move);
2158 a68g_idf (A68G_EXT, "drawrect", m, genie_draw_rect);
2159 m = a68g_proc (M_VOID, M_REF_FILE, M_CHAR, M_CHAR, M_ROW_CHAR, NO_MOID);
2160 a68g_idf (A68G_EXT, "drawtext", m, genie_draw_text);
2161 m = a68g_proc (M_VOID, M_REF_FILE, M_ROW_CHAR, NO_MOID);
2162 a68g_idf (A68G_EXT, "drawlinestyle", m, genie_draw_linestyle);
2163 a68g_idf (A68G_EXT, "drawfontname", m, genie_draw_fontname);
2164 m = a68g_proc (M_VOID, M_REF_FILE, M_REAL, NO_MOID);
2165 a68g_idf (A68G_EXT, "drawlinewidth", m, genie_draw_linewidth);
2166 m = a68g_proc (M_VOID, M_REF_FILE, M_INT, NO_MOID);
2167 a68g_idf (A68G_EXT, "drawfontsize", m, genie_draw_fontsize);
2168 a68g_idf (A68G_EXT, "drawtextangle", m, genie_draw_textangle);
2169 m = a68g_proc (M_VOID, M_REF_FILE, M_STRING, NO_MOID);
2170 a68g_idf (A68G_EXT, "drawcolorname", m, genie_draw_colour_name);
2171 a68g_idf (A68G_EXT, "drawcolourname", m, genie_draw_colour_name);
2172 a68g_idf (A68G_EXT, "drawbackgroundcolorname", m, genie_draw_background_colour_name);
2173 a68g_idf (A68G_EXT, "drawbackgroundcolourname", m, genie_draw_background_colour_name);
2174 }
2175
2176 #endif
2177
2178 #if defined (HAVE_CURSES)
2179
2180 void stand_curses (void)
2181 {
2182 a68g_idf (A68G_EXT, "cursesstart", A68G_MCACHE (proc_void), genie_curses_start);
2183 a68g_idf (A68G_EXT, "cursesend", A68G_MCACHE (proc_void), genie_curses_end);
2184 a68g_idf (A68G_EXT, "cursesclear", A68G_MCACHE (proc_void), genie_curses_clear);
2185 a68g_idf (A68G_EXT, "cursesrefresh", A68G_MCACHE (proc_void), genie_curses_refresh);
2186 a68g_idf (A68G_EXT, "cursesgreen", A68G_MCACHE (proc_void), genie_curses_green);
2187 a68g_idf (A68G_EXT, "cursescyan", A68G_MCACHE (proc_void), genie_curses_cyan);
2188 a68g_idf (A68G_EXT, "cursesred", A68G_MCACHE (proc_void), genie_curses_red);
2189 a68g_idf (A68G_EXT, "cursesyellow", A68G_MCACHE (proc_void), genie_curses_yellow);
2190 a68g_idf (A68G_EXT, "cursesmagenta", A68G_MCACHE (proc_void), genie_curses_magenta);
2191 a68g_idf (A68G_EXT, "cursesblue", A68G_MCACHE (proc_void), genie_curses_blue);
2192 a68g_idf (A68G_EXT, "curseswhite", A68G_MCACHE (proc_void), genie_curses_white);
2193 a68g_idf (A68G_EXT, "cursesgreeninverse", A68G_MCACHE (proc_void), genie_curses_green_inverse);
2194 a68g_idf (A68G_EXT, "cursescyaninverse", A68G_MCACHE (proc_void), genie_curses_cyan_inverse);
2195 a68g_idf (A68G_EXT, "cursesredinverse", A68G_MCACHE (proc_void), genie_curses_red_inverse);
2196 a68g_idf (A68G_EXT, "cursesyellowinverse", A68G_MCACHE (proc_void), genie_curses_yellow_inverse);
2197 a68g_idf (A68G_EXT, "cursesmagentainverse", A68G_MCACHE (proc_void), genie_curses_magenta_inverse);
2198 a68g_idf (A68G_EXT, "cursesblueinverse", A68G_MCACHE (proc_void), genie_curses_blue_inverse);
2199 a68g_idf (A68G_EXT, "curseswhiteinverse", A68G_MCACHE (proc_void), genie_curses_white_inverse);
2200 MOID_T *m = A68G_MCACHE (proc_char);
2201 a68g_idf (A68G_EXT, "cursesgetchar", m, genie_curses_getchar);
2202 m = a68g_proc (M_VOID, M_CHAR, NO_MOID);
2203 a68g_idf (A68G_EXT, "cursesputchar", m, genie_curses_putchar);
2204 m = a68g_proc (M_VOID, M_INT, M_INT, NO_MOID);
2205 a68g_idf (A68G_EXT, "cursesmove", m, genie_curses_move);
2206 m = A68G_MCACHE (proc_int);
2207 a68g_idf (A68G_EXT, "curseslines", m, genie_curses_lines);
2208 a68g_idf (A68G_EXT, "cursescolumns", m, genie_curses_columns);
2209 m = a68g_proc (M_BOOL, M_CHAR, NO_MOID);
2210 a68g_idf (A68G_EXT, "cursesdelchar", m, genie_curses_del_char);
2211 }
2212
2213 #endif
2214
2215 #if defined (HAVE_POSTGRESQL)
2216
2217 void stand_postgresql (void)
2218 {
2219 MOID_T *m = a68g_proc (M_INT, M_REF_FILE, M_STRING, M_REF_STRING, NO_MOID);
2220 a68g_idf (A68G_EXT, "pqconnectdb", m, genie_pq_connectdb);
2221 m = a68g_proc (M_INT, M_REF_FILE, NO_MOID);
2222 a68g_idf (A68G_EXT, "pqfinish", m, genie_pq_finish);
2223 a68g_idf (A68G_EXT, "pqreset", m, genie_pq_reset);
2224 m = a68g_proc (M_INT, M_REF_FILE, M_STRING, NO_MOID);
2225 a68g_idf (A68G_EXT, "pqparameterstatus", m, genie_pq_parameterstatus);
2226 a68g_idf (A68G_EXT, "pqexec", m, genie_pq_exec);
2227 a68g_idf (A68G_EXT, "pqfnumber", m, genie_pq_fnumber);
2228 m = a68g_proc (M_INT, M_REF_FILE, NO_MOID);
2229 a68g_idf (A68G_EXT, "pqntuples", m, genie_pq_ntuples);
2230 a68g_idf (A68G_EXT, "pqnfields", m, genie_pq_nfields);
2231 a68g_idf (A68G_EXT, "pqcmdstatus", m, genie_pq_cmdstatus);
2232 a68g_idf (A68G_EXT, "pqcmdtuples", m, genie_pq_cmdtuples);
2233 a68g_idf (A68G_EXT, "pqerrormessage", m, genie_pq_errormessage);
2234 a68g_idf (A68G_EXT, "pqresulterrormessage", m, genie_pq_resulterrormessage);
2235 a68g_idf (A68G_EXT, "pqdb", m, genie_pq_db);
2236 a68g_idf (A68G_EXT, "pquser", m, genie_pq_user);
2237 a68g_idf (A68G_EXT, "pqpass", m, genie_pq_pass);
2238 a68g_idf (A68G_EXT, "pqhost", m, genie_pq_host);
2239 a68g_idf (A68G_EXT, "pqport", m, genie_pq_port);
2240 a68g_idf (A68G_EXT, "pqtty", m, genie_pq_tty);
2241 a68g_idf (A68G_EXT, "pqoptions", m, genie_pq_options);
2242 a68g_idf (A68G_EXT, "pqprotocolversion", m, genie_pq_protocolversion);
2243 a68g_idf (A68G_EXT, "pqserverversion", m, genie_pq_serverversion);
2244 a68g_idf (A68G_EXT, "pqsocket", m, genie_pq_socket);
2245 a68g_idf (A68G_EXT, "pqbackendpid", m, genie_pq_backendpid);
2246 m = a68g_proc (M_INT, M_REF_FILE, M_INT, NO_MOID);
2247 a68g_idf (A68G_EXT, "pqfname", m, genie_pq_fname);
2248 a68g_idf (A68G_EXT, "pqfformat", m, genie_pq_fformat);
2249 m = a68g_proc (M_INT, M_REF_FILE, M_INT, M_INT, NO_MOID);
2250 a68g_idf (A68G_EXT, "pqgetvalue", m, genie_pq_getvalue);
2251 a68g_idf (A68G_EXT, "pqgetisnull", m, genie_pq_getisnull);
2252 }
2253
2254 #endif
2255
2256 #if defined (BUILD_LINUX)
2257
2258 void stand_linux (void)
2259 {
2260 #if defined (HAVE_EXECINFO_H)
2261 a68g_idf (A68G_EXT, "sigsegv", A68G_MCACHE (proc_void), genie_sigsegv);
2262 #endif
2263 }
2264
2265 #endif
2266
2267 //! @brief Build the standard environ symbol table.
2268
2269 void make_standard_environ (void)
2270 {
2271 stand_moids ();
2272 A68G_MCACHE (proc_bool) = a68g_proc (M_BOOL, NO_MOID);
2273 A68G_MCACHE (proc_char) = a68g_proc (M_CHAR, NO_MOID);
2274 A68G_MCACHE (proc_complex_complex) = a68g_proc (M_COMPLEX, M_COMPLEX, NO_MOID);
2275 A68G_MCACHE (proc_int) = a68g_proc (M_INT, NO_MOID);
2276 A68G_MCACHE (proc_int_int) = a68g_proc (M_INT, M_INT, NO_MOID);
2277 A68G_MCACHE (proc_int_int_real) = a68g_proc (M_REAL, M_INT, M_INT, NO_MOID);
2278 A68G_MCACHE (proc_int_real) = a68g_proc (M_REAL, M_INT, NO_MOID);
2279 A68G_MCACHE (proc_int_real_real) = a68g_proc (M_REAL, M_INT, M_REAL, NO_MOID);
2280 A68G_MCACHE (proc_int_real_real_real) = a68g_proc (M_REAL, M_INT, M_REAL, M_REAL, NO_MOID);
2281 A68G_MCACHE (proc_real) = a68g_proc (M_REAL, NO_MOID);
2282 A68G_MCACHE (proc_real_int_real) = a68g_proc (M_REAL, M_REAL, M_INT, NO_MOID);
2283 A68G_MCACHE (proc_real_real_int_real) = a68g_proc (M_REAL, M_REAL, M_REAL, M_INT, NO_MOID);
2284 A68G_MCACHE (proc_real_real) = M_PROC_REAL_REAL;
2285 A68G_MCACHE (proc_real_real_real) = a68g_proc (M_REAL, M_REAL, M_REAL, NO_MOID);
2286 A68G_MCACHE (proc_real_real_real_int) = a68g_proc (M_INT, M_REAL, M_REAL, M_REAL, NO_MOID);
2287 A68G_MCACHE (proc_real_real_real_real) = a68g_proc (M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID);
2288 A68G_MCACHE (proc_real_real_real_real_real) = a68g_proc (M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID);
2289 A68G_MCACHE (proc_real_real_real_real_real_real) = a68g_proc (M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID);
2290 A68G_MCACHE (proc_real_ref_real_ref_int_void) = a68g_proc (M_VOID, M_REAL, M_REF_REAL, M_REF_INT, NO_MOID);
2291 A68G_MCACHE (proc_void) = a68g_proc (M_VOID, NO_MOID);
2292 stand_prelude ();
2293 stand_mp_level_2 ();
2294 stand_mp_level_3 ();
2295 stand_transput ();
2296 stand_extensions ();
2297 #if (A68G_LEVEL <= 2)
2298 stand_longlong_bits ();
2299 #endif
2300 #if defined (HAVE_GNU_MPFR)
2301 stand_mpfr ();
2302 #endif
2303 #if defined (HAVE_GSL)
2304 stand_gsl ();
2305 #endif
2306 #if defined (HAVE_R_MATHLIB)
2307 stand_mathlib ();
2308 #endif
2309 #if defined (BUILD_LINUX)
2310 stand_linux ();
2311 #endif
2312 #if defined (HAVE_GNU_PLOTUTILS)
2313 stand_plot ();
2314 #endif
2315 #if defined (HAVE_CURSES)
2316 stand_curses ();
2317 #endif
2318 #if defined (HAVE_POSTGRESQL)
2319 stand_postgresql ();
2320 #endif
2321 }
|
© 2002-2026 J.M. van der Veer (jmvdveer@xs4all.nl)
|