Definitions of standard identifiers, procedures and modes. Signed-off-by: Jose E. Marchesi <[email protected]> Co-authored-by: Marcel van der Veer <[email protected]> --- gcc/algol68/a68-parser-prelude.cc | 1493 +++++++++++++++++++++++++++++ 1 file changed, 1493 insertions(+) create mode 100644 gcc/algol68/a68-parser-prelude.cc
diff --git a/gcc/algol68/a68-parser-prelude.cc b/gcc/algol68/a68-parser-prelude.cc new file mode 100644 index 00000000000..46c61c2ee19 --- /dev/null +++ b/gcc/algol68/a68-parser-prelude.cc @@ -0,0 +1,1493 @@ +/* Standard prelude definitions. + Copyright (C) 2001-2023 J. Marcel van der Veer. + Copyright (C) 2025 Jose E. Marchesi. + + Original implementation by J. Marcel van der Veer. + Adapted for GCC by Jose E. Marchesi. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + <http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" + +#include "a68.h" + +#define A68_STD true +#define A68_EXT false + +/* ALGOL68C type procs. */ + +#define A68C_DEFIO(name, mode) \ + do \ + { \ + m = a68_proc (MODE (mode), M_REF_FILE, NO_MOID); \ + a68_idf (A68_EXT, "get" #name, m); \ + m = a68_proc (M_VOID, M_REF_FILE, MODE (mode), NO_MOID); \ + a68_idf (A68_EXT, "put" #name, m); \ + m = a68_proc (MODE (mode), NO_MOID); \ + a68_idf (A68_EXT, "read" #name, m); \ + m = a68_proc (M_VOID, MODE (mode), NO_MOID); \ + a68_idf (A68_EXT, "print" #name, m); \ + } \ + while (0) + +/* Enter tag in standenv symbol table. */ + +static void +add_a68_standenv (bool portable, int a, NODE_T* n, char *c, MOID_T *m, + int p, LOWERER_T l = NO_LOWERER) +{ +#define INSERT_TAG(l, n) \ + do { \ + NEXT (n) = *(l); \ + *(l) = (n); \ + } while (0) + + TAG_T *new_one = a68_new_tag (); + + PROCEDURE_LEVEL (INFO (n)) = 0; + USE (new_one) = false; + HEAP (new_one) = HEAP_SYMBOL; + TAG_TABLE (new_one) = A68_STANDENV; + NODE (new_one) = n; + VALUE (new_one) = (c != NO_TEXT ? TEXT (a68_add_token (&A68 (top_token), c)) : NO_TEXT); + PRIO (new_one) = p; + TAX_TREE_DECL (new_one) = NULL; + LOWERER (new_one) = l; + UNIT (new_one) = NULL; + PORTABLE (new_one) = portable; + MOID (new_one) = m; + NEXT (new_one) = NO_TAG; + if (a == IDENTIFIER) + INSERT_TAG (&IDENTIFIERS (A68_STANDENV), new_one); + else if (a == OP_SYMBOL) + INSERT_TAG (&OPERATORS (A68_STANDENV), new_one); + else if (a == PRIO_SYMBOL) + INSERT_TAG (&PRIO (A68_STANDENV), new_one); + else if (a == INDICANT) + INSERT_TAG (&INDICANTS (A68_STANDENV), new_one); + else if (a == LABEL) + INSERT_TAG (&LABELS (A68_STANDENV), new_one); +#undef INSERT_TAG +} + +/* Compose PROC moid from arguments - first result, than arguments. */ + +static MOID_T * +a68_proc (MOID_T *m, ...) +{ + PACK_T *p = NO_PACK, *q = NO_PACK; + MOID_T *y; + + va_list attribute; + va_start (attribute, m); + while ((y = va_arg (attribute, MOID_T *)) != NO_MOID) + { + PACK_T *new_one = a68_new_pack (); + + MOID (new_one) = y; + TEXT (new_one) = NO_TEXT; + NEXT (new_one) = NO_PACK; + if (q != NO_PACK) + NEXT (q) = new_one; + else + p = new_one; + q = new_one; + } + + va_end (attribute); + return a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, + a68_count_pack_members (p), NO_NODE, m, p); +} + +/* Enter an identifier in standenv. */ + +static void +a68_idf (bool portable, const char *n, MOID_T *m, LOWERER_T l = NO_LOWERER) +{ + add_a68_standenv (portable, IDENTIFIER, + a68_some_node (TEXT (a68_add_token (&A68 (top_token), n))), + NO_TEXT, m, 0, l); +} + +/* Enter a moid in standenv. */ + +static void +a68_mode (int p, const char *t, MOID_T **m) +{ + (*m) = a68_add_mode (&TOP_MOID (&A68_JOB), + STANDARD, p, + a68_some_node (TEXT (a68_find_keyword (A68 (top_keyword), t))), + NO_MOID, NO_PACK); +} + +/* Enter a priority in standenv. */ + +static void +a68_prio (const char *p, int b) +{ + add_a68_standenv (true, PRIO_SYMBOL, + a68_some_node (TEXT (a68_add_token (&A68 (top_token), p))), + NO_TEXT, NO_MOID, b, NO_LOWERER); +} + +/* Enter operator in standenv. */ + +static void +a68_op (bool portable, const char *n, MOID_T *m, LOWERER_T l = NO_LOWERER) +{ + add_a68_standenv (portable, OP_SYMBOL, + a68_some_node (TEXT (a68_add_token (&A68 (top_token), n))), + NO_TEXT, m, 0, l); +} + +/* Enter standard modes in standenv. */ + +static void +stand_moids (void) +{ + /* Primitive A68 moids. */ + a68_mode (0, "VOID", &M_VOID); + /* Standard precision. */ + a68_mode (0, "INT", &M_INT); + a68_mode (0, "REAL", &M_REAL); + a68_mode (0, "COMPL", &M_COMPLEX); + a68_mode (0, "BITS", &M_BITS); + a68_mode (0, "BYTES", &M_BYTES); + /* Multiple precision. */ + a68_mode (-2, "INT", &M_SHORT_SHORT_INT); + a68_mode (-2, "BITS", &M_SHORT_SHORT_BITS); + a68_mode (-1, "INT", &M_SHORT_INT); + a68_mode (-1, "BITS", &M_SHORT_BITS); + a68_mode (1, "INT", &M_LONG_INT); + a68_mode (1, "REAL", &M_LONG_REAL); + a68_mode (1, "COMPL", &M_LONG_COMPLEX); + a68_mode (1, "BITS", &M_LONG_BITS); + a68_mode (1, "BYTES", &M_LONG_BYTES); + a68_mode (2, "REAL", &M_LONG_LONG_REAL); + a68_mode (2, "INT", &M_LONG_LONG_INT); + a68_mode (2, "BITS", &M_LONG_LONG_BITS); + a68_mode (2, "COMPL", &M_LONG_LONG_COMPLEX); + /* Other. */ + a68_mode (0, "BOOL", &M_BOOL); + a68_mode (0, "CHAR", &M_CHAR); + a68_mode (0, "STRING", &M_STRING); + a68_mode (0, "FILE", &M_FILE); + a68_mode (0, "CHANNEL", &M_CHANNEL); + a68_mode (0, "SEMA", &M_SEMA); + /* Rows. */ + M_ROWS = a68_add_mode (&TOP_MOID (&A68_JOB), ROWS_SYMBOL, 0, NO_NODE, NO_MOID, NO_PACK); + /* REFs. */ + M_REF_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_INT, NO_PACK); + M_REF_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_REAL, NO_PACK); + M_REF_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_COMPLEX, NO_PACK); + M_REF_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_BITS, NO_PACK); + M_REF_BYTES = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_BYTES, NO_PACK); + /* Multiple precision. */ + M_REF_LONG_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_INT, NO_PACK); + M_REF_LONG_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_REAL, NO_PACK); + M_REF_LONG_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_COMPLEX, NO_PACK); + M_REF_LONG_LONG_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_INT, NO_PACK); + M_REF_LONG_LONG_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_REAL, NO_PACK); + M_REF_LONG_LONG_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_COMPLEX, NO_PACK); + M_REF_LONG_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_BITS, NO_PACK); + M_REF_LONG_LONG_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_LONG_BITS, NO_PACK); + M_REF_LONG_BYTES = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_LONG_BYTES, NO_PACK); + M_REF_SHORT_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_SHORT_INT, NO_PACK); + M_REF_SHORT_SHORT_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_SHORT_SHORT_INT, NO_PACK +); + M_REF_SHORT_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_SHORT_BITS, NO_PACK); + M_REF_SHORT_SHORT_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_SHORT_SHORT_BITS, NO_PACK); + /* Other. */ + M_REF_BOOL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_BOOL, NO_PACK); + M_REF_CHAR = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_CHAR, NO_PACK); + M_REF_FILE = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_FILE, NO_PACK); + M_REF_REF_FILE = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_REF_FILE, NO_PACK); + /* [] INT. */ + M_ROW_INT = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_INT, NO_PACK); + HAS_ROWS (M_ROW_INT) = true; + SLICE (M_ROW_INT) = M_INT; + M_REF_ROW_INT = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_INT, NO_PACK); + NAME (M_REF_ROW_INT) = M_REF_INT; + /* [] REAL. */ + M_ROW_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_REAL, NO_PACK); + HAS_ROWS (M_ROW_REAL) = true; + SLICE (M_ROW_REAL) = M_REAL; + M_REF_ROW_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_REAL, NO_PACK); + NAME (M_REF_ROW_REAL) = M_REF_REAL; + /* [,] REAL. */ + M_ROW_ROW_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 2, NO_NODE, M_REAL, NO_PACK); + HAS_ROWS (M_ROW_ROW_REAL) = true; + SLICE (M_ROW_ROW_REAL) = M_ROW_REAL; + M_REF_ROW_ROW_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_ROW_REAL, NO_PACK); + NAME (M_REF_ROW_ROW_REAL) = M_REF_ROW_REAL; + /* [] COMPLEX. */ + M_ROW_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_COMPLEX, NO_PACK); + HAS_ROWS (M_ROW_COMPLEX) = true; + SLICE (M_ROW_COMPLEX) = M_COMPLEX; + M_REF_ROW_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_COMPLEX, NO_PACK); + NAME (M_REF_ROW_COMPLEX) = M_REF_COMPLEX; + /* [,] COMPLEX. */ + M_ROW_ROW_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 2, NO_NODE, M_COMPLEX, NO_PACK); + HAS_ROWS (M_ROW_ROW_COMPLEX) = true; + SLICE (M_ROW_ROW_COMPLEX) = M_ROW_COMPLEX; + M_REF_ROW_ROW_COMPLEX = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_ROW_COMPLEX, NO_PACK); + NAME (M_REF_ROW_ROW_COMPLEX) = M_REF_ROW_COMPLEX; + /* [] BOOL. */ + M_ROW_BOOL = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_BOOL, NO_PACK); + HAS_ROWS (M_ROW_BOOL) = true; + SLICE (M_ROW_BOOL) = M_BOOL; + /* FLEX [] BOOL. */ + MOID_T *m = a68_add_mode (&TOP_MOID (&A68_JOB), FLEX_SYMBOL, 0, NO_NODE, M_ROW_BOOL, NO_PACK); + HAS_ROWS (m) = true; + M_FLEX_ROW_BOOL = m; + /* [] BITS. */ + M_ROW_BITS = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_BITS, NO_PACK); + HAS_ROWS (M_ROW_BITS) = true; + SLICE (M_ROW_BITS) = M_BITS; + /* [] CHAR. */ + M_ROW_CHAR = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_CHAR, NO_PACK); + HAS_ROWS (M_ROW_CHAR) = true; + SLICE (M_ROW_CHAR) = M_CHAR; + /* [][] CHAR. */ + M_ROW_ROW_CHAR = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_ROW_CHAR, NO_PACK); + HAS_ROWS (M_ROW_ROW_CHAR) = true; + SLICE (M_ROW_ROW_CHAR) = M_ROW_CHAR; + /* MODE STRING = FLEX [] CHAR. */ + m = a68_add_mode (&TOP_MOID (&A68_JOB), FLEX_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK); + HAS_ROWS (m) = true; + M_FLEX_ROW_CHAR = m; + EQUIVALENT (M_STRING) = m; + /* REF [] CHAR. */ + M_REF_ROW_CHAR = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK); + NAME (M_REF_ROW_CHAR) = M_REF_CHAR; + /* PROC [] CHAR. */ + M_PROC_ROW_CHAR = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, 0, NO_NODE, M_ROW_CHAR, NO_PACK); + /* REF STRING = REF FLEX [] CHAR. */ + M_REF_STRING = a68_add_mode (&TOP_MOID (&A68_JOB), REF_SYMBOL, 0, NO_NODE, EQUIVALENT (M_STRING), NO_PACK); + NAME (M_REF_STRING) = M_REF_CHAR; + DEFLEXED (M_REF_STRING) = M_REF_ROW_CHAR; + /* [] STRING. */ + M_ROW_STRING = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_STRING, NO_PACK); + HAS_ROWS (M_ROW_STRING) = true; + SLICE (M_ROW_STRING) = M_STRING; + DEFLEXED (M_ROW_STRING) = M_ROW_ROW_CHAR; + /* PROC STRING. */ + M_PROC_STRING = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, 0, NO_NODE, M_STRING, NO_PACK); + DEFLEXED (M_PROC_STRING) = M_PROC_ROW_CHAR; + /* COMPLEX. */ + PACK_T *z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + EQUIVALENT (M_COMPLEX) = m; + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_REF_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + NAME (M_REF_COMPLEX) = m; + /* LONG COMPLEX. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + EQUIVALENT (M_LONG_COMPLEX) = m; + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_REF_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + NAME (M_REF_LONG_COMPLEX) = m; + /* LONG_LONG COMPLEX. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_LONG_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + EQUIVALENT (M_LONG_LONG_COMPLEX) = m; + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_LONG_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "im")), NO_NODE); + (void) a68_add_mode_to_pack (&z, M_REF_LONG_LONG_REAL, TEXT (a68_add_token (&A68 (top_token), "re")), NO_NODE); + m = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + NAME (M_REF_LONG_LONG_COMPLEX) = m; + /* SEMA. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_INT, NO_TEXT, NO_NODE); + EQUIVALENT (M_SEMA) = a68_add_mode (&TOP_MOID (&A68_JOB), STRUCT_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + /* PROC VOID. */ + z = NO_PACK; + M_PROC_VOID = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, a68_count_pack_members (z), NO_NODE, M_VOID, z); + /* PROC (REAL) REAL. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REAL, NO_TEXT, NO_NODE); + M_PROC_REAL_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, a68_count_pack_members (z), NO_NODE, M_REAL, z); + /* PROC (LONG_REAL) LONG_REAL. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_LONG_REAL, NO_TEXT, NO_NODE); + M_PROC_LONG_REAL_LONG_REAL = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, a68_count_pack_members (z), NO_NODE, M_LONG_REAL, z); + /* IO: PROC (REF FILE) BOOL. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_FILE, NO_TEXT, NO_NODE); + M_PROC_REF_FILE_BOOL = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, a68_count_pack_members (z), NO_NODE, M_BOOL, z); + /* IO: PROC (REF FILE) VOID. */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_REF_FILE, NO_TEXT, NO_NODE); + M_PROC_REF_FILE_VOID = a68_add_mode (&TOP_MOID (&A68_JOB), PROC_SYMBOL, a68_count_pack_members (z), NO_NODE, M_VOID, z); + /* IO: SIMPLIN and SIMPLOUT. */ + M_SIMPLIN = a68_add_mode (&TOP_MOID (&A68_JOB), IN_TYPE_MODE, 0, NO_NODE, NO_MOID, NO_PACK); + M_ROW_SIMPLIN = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_SIMPLIN, NO_PACK); + SLICE (M_ROW_SIMPLIN) = M_SIMPLIN; + M_SIMPLOUT = a68_add_mode (&TOP_MOID (&A68_JOB), OUT_TYPE_MODE, 0, NO_NODE, NO_MOID, NO_PACK); + M_ROW_SIMPLOUT = a68_add_mode (&TOP_MOID (&A68_JOB), ROW_SYMBOL, 1, NO_NODE, M_SIMPLOUT, NO_PACK); + SLICE (M_ROW_SIMPLOUT) = M_SIMPLOUT; +} + +/* Set up standenv - general RR but not transput. */ + +static void +stand_prelude (void) +{ + /* Identifiers. */ + a68_idf (A68_STD, "intlengths", M_INT, a68_lower_intlengths); + a68_idf (A68_STD, "intshorths", M_INT, a68_lower_intshorths); + a68_idf (A68_STD, "maxint", M_INT, a68_lower_maxint); + a68_idf (A68_STD, "longmaxint", M_LONG_INT, a68_lower_maxint); + a68_idf (A68_STD, "longlongmaxint", M_LONG_LONG_INT, a68_lower_maxint); + a68_idf (A68_STD, "shortmaxint", M_SHORT_INT, a68_lower_maxint); + a68_idf (A68_STD, "shortshortmaxint", M_SHORT_SHORT_INT, a68_lower_maxint); + a68_idf (A68_STD, "maxreal", M_REAL, a68_lower_maxreal); + a68_idf (A68_STD, "longmaxreal", M_LONG_REAL, a68_lower_maxreal); + a68_idf (A68_STD, "longlongmaxreal", M_LONG_LONG_REAL, a68_lower_maxreal); + a68_idf (A68_STD, "smallreal", M_REAL, a68_lower_smallreal); + a68_idf (A68_STD, "longsmallreal", M_LONG_REAL, a68_lower_smallreal); + a68_idf (A68_STD, "longlongsmallreal", M_LONG_LONG_REAL, a68_lower_smallreal); + a68_idf (A68_STD, "reallengths", M_INT, a68_lower_reallengths); + a68_idf (A68_STD, "realshorths", M_INT, a68_lower_realshorths); + a68_idf (A68_STD, "bitslengths", M_INT, a68_lower_bitslengths); + a68_idf (A68_STD, "bitsshorths", M_INT, a68_lower_bitsshorths); + a68_idf (A68_STD, "bitswidth", M_INT, a68_lower_bitswidth); + a68_idf (A68_STD, "longbitswidth", M_INT, a68_lower_longbitswidth); + a68_idf (A68_STD, "longlongbitswidth", M_INT, a68_lower_longlongbitswidth); + a68_idf (A68_STD, "shortbitswidth", M_INT, a68_lower_shortbitswidth); + a68_idf (A68_STD, "shortshortbitswidth", M_INT, a68_lower_shortshortbitswidth); + a68_idf (A68_STD, "maxbits", M_BITS, a68_lower_maxbits); + a68_idf (A68_STD, "longmaxbits", M_LONG_BITS, a68_lower_maxbits); + a68_idf (A68_STD, "longlongmaxbits", M_LONG_LONG_BITS, a68_lower_maxbits); + a68_idf (A68_STD, "maxabschar", M_INT, a68_lower_maxabschar); + a68_idf (A68_STD, "intwidth", M_INT, a68_lower_intwidth); + a68_idf (A68_STD, "longintwidth", M_INT, a68_lower_longintwidth); + a68_idf (A68_STD, "longlongintwidth", M_INT, a68_lower_longlongintwidth); + a68_idf (A68_STD, "shortintwidth", M_INT, a68_lower_shortintwidth); + a68_idf (A68_STD, "shortshortintwidth", M_INT, a68_lower_shortshortintwidth); + a68_idf (A68_STD, "realwidth", M_INT, a68_lower_realwidth); + a68_idf (A68_STD, "longrealwidth", M_INT, a68_lower_longrealwidth); + a68_idf (A68_STD, "longlongrealwidth", M_INT, a68_lower_longlongrealwidth); + a68_idf (A68_STD, "expwidth", M_INT, a68_lower_expwidth); + a68_idf (A68_STD, "longexpwidth", M_INT, a68_lower_longexpwidth); + a68_idf (A68_STD, "longlongexpwidth", M_INT, a68_lower_longlongexpwidth); + a68_idf (A68_STD, "pi", M_REAL, a68_lower_pi); + a68_idf (A68_STD, "longpi", M_LONG_REAL, a68_lower_pi); + a68_idf (A68_STD, "longlongpi", M_LONG_LONG_REAL, a68_lower_pi); + a68_idf (A68_STD, "compllengths", M_INT); + a68_idf (A68_STD, "complshorths", M_INT); + a68_idf (A68_STD, "byteslengths", M_INT); + a68_idf (A68_STD, "bytesshorths", M_INT); + a68_idf (A68_STD, "byteswidth", M_INT); + a68_idf (A68_STD, "longbyteswidth", M_INT); + a68_idf (A68_STD, "flip", M_CHAR, a68_lower_flip); + a68_idf (A68_STD, "flop", M_CHAR, a68_lower_flop); + a68_idf (A68_STD, "errorchar", M_CHAR, a68_lower_errorchar); + a68_idf (A68_STD, "nullcharacter", M_CHAR, a68_lower_nullcharacter); + a68_idf (A68_STD, "blank", M_CHAR, a68_lower_blank); + /* BITS procedures. */ + MOID_T *m = a68_proc (M_BITS, M_ROW_BOOL, NO_MOID); + a68_idf (A68_STD, "bitspack", m); + /* SHORT BITS procedures. */ + m = a68_proc (M_SHORT_BITS, M_ROW_BOOL, NO_MOID); + a68_idf (A68_STD, "shortbitspack", m); + /* SHORT SHORT BITS procedures. */ + m = a68_proc (M_SHORT_SHORT_BITS, M_ROW_BOOL, NO_MOID); + a68_idf (A68_STD, "shortshortbitspack", m); + /* LONG BITS procedures. */ + m = a68_proc (M_LONG_BITS, M_ROW_BOOL, NO_MOID); + a68_idf (A68_STD, "longbitspack", m); + /* LONG LONG BITS procedures. */ + m = a68_proc (M_LONG_LONG_BITS, M_ROW_BOOL, NO_MOID); + a68_idf (A68_STD, "longlongbitspack", m); + /* RNG procedures. */ + m = a68_proc (M_VOID, M_INT, NO_MOID); + a68_idf (A68_STD, "firstrandom", m); + /* REAL procedures. */ + m = A68_MCACHE (proc_real); + a68_idf (A68_STD, "nextrandom", m); + a68_idf (A68_STD, "random", m, a68_lower_random); + a68_idf (A68_STD, "rnd", m); + m = A68_MCACHE (proc_real_real); + a68_idf (A68_STD, "arccos", m, a68_lower_acos); + a68_idf (A68_STD, "arcsin", m, a68_lower_asin); + a68_idf (A68_STD, "arctan", m, a68_lower_atan); + a68_idf (A68_STD, "cos", m, a68_lower_cos); + a68_idf (A68_STD, "exp", m, a68_lower_exp); + a68_idf (A68_STD, "ln", m, a68_lower_ln); + a68_idf (A68_STD, "sin", m, a68_lower_sin); + a68_idf (A68_STD, "sqrt", m, a68_lower_sqrt); + a68_idf (A68_STD, "tan", m, a68_lower_tan); + /* LONG REAL procedures. */ + m = a68_proc (M_LONG_REAL, NO_MOID); + a68_idf (A68_STD, "longnextrandom", m); + a68_idf (A68_STD, "longrandom", m, a68_lower_longrandom); + m = a68_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_idf (A68_STD, "longarccos", m, a68_lower_long_acos); + a68_idf (A68_STD, "longarcsin", m, a68_lower_long_asin); + a68_idf (A68_STD, "longarctan", m, a68_lower_long_atan); + a68_idf (A68_STD, "longcos", m, a68_lower_long_cos); + a68_idf (A68_STD, "longexp", m, a68_lower_long_exp); + a68_idf (A68_STD, "longln", m, a68_lower_long_ln); + a68_idf (A68_STD, "longsin", m, a68_lower_long_sin); + a68_idf (A68_STD, "longsqrt", m, a68_lower_long_sqrt); + a68_idf (A68_STD, "longtan", m, a68_lower_long_tan); + /* LONG LONG REAL procedures. */ + m = a68_proc (M_LONG_LONG_REAL, NO_MOID); + a68_idf (A68_STD, "longlongnextrandom", m); + a68_idf (A68_STD, "longlongrandom", m, a68_lower_longlongrandom); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_idf (A68_STD, "longlongarccos", m, a68_lower_long_long_acos); + a68_idf (A68_STD, "longlongarcsin", m, a68_lower_long_long_asin); + a68_idf (A68_STD, "longlongarctan", m, a68_lower_long_long_atan); + a68_idf (A68_STD, "longlongcos", m, a68_lower_long_long_cos); + a68_idf (A68_STD, "longlongexp", m, a68_lower_long_long_exp); + a68_idf (A68_STD, "longlongln", m, a68_lower_long_long_ln); + a68_idf (A68_STD, "longlongsin", m, a68_lower_long_long_sin); + a68_idf (A68_STD, "longlongsqrt", m, a68_lower_long_long_sqrt); + a68_idf (A68_STD, "longlongtan", m, a68_lower_long_long_tan); + /* Priorities. */ + a68_prio ("+:=", 1); + a68_prio ("-:=", 1); + a68_prio ("*:=", 1); + a68_prio ("/:=", 1); + a68_prio ("%:=", 1); + a68_prio ("%*:=", 1); + a68_prio ("+=:", 1); + a68_prio ("PLUSAB", 1); + a68_prio ("MINUSAB", 1); + a68_prio ("TIMESAB", 1); + a68_prio ("DIVAB", 1); + a68_prio ("OVERAB", 1); + a68_prio ("MODAB", 1); + a68_prio ("PLUSTO", 1); + a68_prio ("OR", 2); + a68_prio ("AND", 3); + a68_prio ("XOR", 3); + a68_prio ("=", 4); + a68_prio ("/=", 4); + a68_prio ("<", 5); + a68_prio ("<=", 5); + a68_prio (">", 5); + a68_prio (">=", 5); + a68_prio ("EQ", 4); + a68_prio ("NE", 4); + a68_prio ("LT", 5); + a68_prio ("LE", 5); + a68_prio ("GT", 5); + a68_prio ("GE", 5); + a68_prio ("+", 6); + a68_prio ("-", 6); + a68_prio ("*", 7); + a68_prio ("/", 7); + a68_prio ("OVER", 7); + a68_prio ("%", 7); + a68_prio ("MOD", 7); + a68_prio ("%*", 7); + a68_prio ("ELEM", 7); + a68_prio ("**", 8); + a68_prio ("SHL", 8); + a68_prio ("SHR", 8); + a68_prio ("UP", 8); + a68_prio ("DOWN", 8); + a68_prio ("^", 8); + a68_prio ("LWB", 8); + a68_prio ("UPB", 8); + a68_prio ("I", 9); + a68_prio ("+*", 9); + /* BOOL operators. */ + m = a68_proc (M_BOOL, M_BOOL, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_not2); + a68_op (A68_STD, "~", m, a68_lower_not2); + m = a68_proc (M_INT, M_BOOL, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_boolabs2); + m = a68_proc (M_BOOL, M_BOOL, M_BOOL, NO_MOID); + a68_op (A68_STD, "OR", m, a68_lower_or3); + a68_op (A68_STD, "AND", m, a68_lower_and3); + a68_op (A68_STD, "=", m, a68_lower_bool_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bool_ne3); + a68_op (A68_STD, "EQ", m, a68_lower_bool_eq3); + a68_op (A68_STD, "NE", m, a68_lower_bool_ne3); + /* CHAR operators. */ + m = a68_proc (M_BOOL, M_CHAR, M_CHAR, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_char_eq3); + a68_op (A68_STD, "/=", m, a68_lower_char_ne3); + a68_op (A68_STD, "<", m, a68_lower_char_lt3); + a68_op (A68_STD, "<=", m, a68_lower_char_le3); + a68_op (A68_STD, ">", m, a68_lower_char_gt3); + a68_op (A68_STD, ">=", m, a68_lower_char_ge3); + a68_op (A68_STD, "EQ", m, a68_lower_char_eq3); + a68_op (A68_STD, "NE", m, a68_lower_char_ne3); + a68_op (A68_STD, "LT", m, a68_lower_char_lt3); + a68_op (A68_STD, "LE", m, a68_lower_char_le3); + a68_op (A68_STD, "GT", m, a68_lower_char_gt3); + a68_op (A68_STD, "GE", m, a68_lower_char_ge3); + m = a68_proc (M_INT, M_CHAR, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_charabs2); + m = a68_proc (M_CHAR, M_INT, NO_MOID); + a68_op (A68_STD, "REPR", m, a68_lower_repr2); + /* STRING operators. */ + m = a68_proc (M_BOOL, M_STRING, M_STRING, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_string_eq3); + a68_op (A68_STD, "/=", m, a68_lower_string_ne3); + a68_op (A68_STD, "<", m, a68_lower_string_lt3); + a68_op (A68_STD, "<=", m, a68_lower_string_le3); + a68_op (A68_STD, ">=", m, a68_lower_string_ge3); + a68_op (A68_STD, ">", m, a68_lower_string_gt3); + a68_op (A68_STD, "EQ", m, a68_lower_string_eq3); + a68_op (A68_STD, "NE", m, a68_lower_string_ne3); + a68_op (A68_STD, "LT", m, a68_lower_string_lt3); + a68_op (A68_STD, "LE", m, a68_lower_string_le3); + a68_op (A68_STD, "GE", m, a68_lower_string_ge3); + a68_op (A68_STD, "GT", m, a68_lower_string_gt3); + m = a68_proc (M_STRING, M_CHAR, M_CHAR, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_char_plus3); + m = a68_proc (M_STRING, M_STRING, M_STRING, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_string_plus3); + m = a68_proc (M_REF_STRING, M_REF_STRING, M_STRING, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_string_plusab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_string_plusab3); + m = a68_proc (M_REF_STRING, M_REF_STRING, M_INT, NO_MOID); + a68_op (A68_STD, "*:=", m, a68_lower_string_multab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_string_multab3); + m = a68_proc (M_REF_STRING, M_STRING, M_REF_STRING, NO_MOID); + a68_op (A68_STD, "+=:", m, a68_lower_string_plusto3); + a68_op (A68_STD, "PLUSTO", m, a68_lower_string_plusto3); + m = a68_proc (M_STRING, M_STRING, M_INT, NO_MOID); + a68_op (A68_STD, "*", m, a68_lower_string_mult3); + m = a68_proc (M_STRING, M_INT, M_STRING, NO_MOID); + a68_op (A68_STD, "*", m, a68_lower_string_mult3); + m = a68_proc (M_STRING, M_INT, M_CHAR, NO_MOID); + a68_op (A68_STD, "*", m, a68_lower_char_mult3); + m = a68_proc (M_STRING, M_CHAR, M_INT, NO_MOID); + a68_op (A68_STD, "*", m, a68_lower_char_mult3); + /* SHORT SHORT INT operators. */ + m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_intabs2); + m = a68_proc (M_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "SIGN", m, a68_lower_sign2); + m = a68_proc (M_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengint2); + m = a68_proc (M_BOOL, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "ODD", m, a68_lower_odd2); + m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_int); + a68_op (A68_STD, "-", m, a68_lower_minus_int); + a68_op (A68_STD, "*", m, a68_lower_mult_int); + a68_op (A68_STD, "OVER", m, a68_lower_over3); + a68_op (A68_STD, "%", m, a68_lower_over3); + a68_op (A68_STD, "MOD", m, a68_lower_mod3); + a68_op (A68_STD, "%*", m, a68_lower_mod3); + m = a68_proc (M_REF_SHORT_SHORT_INT, M_REF_SHORT_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "%:=", m, a68_lower_overab3); + a68_op (A68_STD, "%*:=", m, a68_lower_modab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "OVERAB", m, a68_lower_overab3); + a68_op (A68_STD, "MODAB", m, a68_lower_modab3); + m = a68_proc (M_BOOL, M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "EQ", m, a68_lower_int_eq3); + a68_op (A68_STD, "NE", m, a68_lower_int_ne3); + a68_op (A68_STD, "GE", m, a68_lower_int_ge3); + a68_op (A68_STD, "GT", m, a68_lower_int_gt3); + a68_op (A68_STD, "LE", m, a68_lower_int_le3); + a68_op (A68_STD, "LT", m, a68_lower_int_lt3); + a68_op (A68_STD, "=", m, a68_lower_int_eq3); + a68_op (A68_STD, ">=", m, a68_lower_int_ge3); + a68_op (A68_STD, ">", m, a68_lower_int_gt3); + a68_op (A68_STD, "<=", m, a68_lower_int_le3); + a68_op (A68_STD, "<", m, a68_lower_int_lt3); + a68_op (A68_STD, "/=", m, a68_lower_int_ne3); + m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_INT, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_int); + a68_op (A68_STD, "^", m, a68_lower_pow_int); + /* SHORT INT operators. */ + m = a68_proc (M_SHORT_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_intabs2); + m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenint2); + m = a68_proc (M_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengint2); + a68_op (A68_STD, "SIGN", m, a68_lower_sign2); + m = a68_proc (M_BOOL, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "ODD", m, a68_lower_odd2); + m = a68_proc (M_SHORT_INT, M_SHORT_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_int); + a68_op (A68_STD, "-", m, a68_lower_minus_int); + a68_op (A68_STD, "*", m, a68_lower_mult_int); + a68_op (A68_STD, "OVER", m, a68_lower_over3); + a68_op (A68_STD, "%", m, a68_lower_over3); + a68_op (A68_STD, "MOD", m, a68_lower_mod3); + a68_op (A68_STD, "%*", m, a68_lower_mod3); + m = a68_proc (M_REF_SHORT_INT, M_REF_SHORT_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "%:=", m, a68_lower_overab3); + a68_op (A68_STD, "%*:=", m, a68_lower_modab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "OVERAB", m, a68_lower_overab3); + a68_op (A68_STD, "MODAB", m, a68_lower_modab3); + m = a68_proc (M_BOOL, M_SHORT_INT, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_int_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_int_eq3); + a68_op (A68_STD, "/=", m, a68_lower_int_ne3); + a68_op (A68_STD, "NE", m, a68_lower_int_ne3); + a68_op (A68_STD, "<", m, a68_lower_int_lt3); + a68_op (A68_STD, "LT", m, a68_lower_int_lt3); + a68_op (A68_STD, "<=", m, a68_lower_int_le3); + a68_op (A68_STD, "LE", m, a68_lower_int_le3); + a68_op (A68_STD, ">", m, a68_lower_int_gt3); + a68_op (A68_STD, "GT", m, a68_lower_int_gt3); + a68_op (A68_STD, ">=", m, a68_lower_int_ge3); + a68_op (A68_STD, "GE", m, a68_lower_int_ge3); + m = a68_proc (M_SHORT_INT, M_SHORT_INT, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_int); + a68_op (A68_STD, "^", m, a68_lower_pow_int); + /* INT operators. */ + m = a68_proc (M_INT, M_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_intabs2); + a68_op (A68_STD, "SIGN", m, a68_lower_sign2); + m = a68_proc (M_SHORT_INT, M_INT, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenint2); + m = a68_proc (M_LONG_INT, M_INT, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengint2); + m = a68_proc (M_BOOL, M_INT, NO_MOID); + a68_op (A68_STD, "ODD", m, a68_lower_odd2); + m = a68_proc (M_BOOL, M_INT, M_INT, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_int_eq3); + a68_op (A68_STD, "/=", m, a68_lower_int_ne3); + a68_op (A68_STD, "<", m, a68_lower_int_lt3); + a68_op (A68_STD, "<=", m, a68_lower_int_le3); + a68_op (A68_STD, ">", m, a68_lower_int_gt3); + a68_op (A68_STD, ">=", m, a68_lower_int_ge3); + a68_op (A68_STD, "EQ", m, a68_lower_int_eq3); + a68_op (A68_STD, "NE", m, a68_lower_int_ne3); + a68_op (A68_STD, "LT", m, a68_lower_int_lt3); + a68_op (A68_STD, "LE", m, a68_lower_int_le3); + a68_op (A68_STD, "GT", m, a68_lower_int_gt3); + a68_op (A68_STD, "GE", m, a68_lower_int_ge3); + m = a68_proc (M_INT, M_INT, M_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_int); + a68_op (A68_STD, "-", m, a68_lower_minus_int); + a68_op (A68_STD, "*", m, a68_lower_mult_int); + a68_op (A68_STD, "OVER", m, a68_lower_over3); + a68_op (A68_STD, "%", m, a68_lower_over3); + a68_op (A68_STD, "MOD", m, a68_lower_mod3); + a68_op (A68_STD, "%*", m, a68_lower_mod3); + a68_op (A68_STD, "**", m, a68_lower_pow_int); + a68_op (A68_STD, "^", m, a68_lower_pow_int); + m = a68_proc (M_REAL, M_INT, M_INT, NO_MOID); + a68_op (A68_STD, "/", m, a68_lower_rdiv3); + m = a68_proc (M_REF_INT, M_REF_INT, M_INT, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "%:=", m, a68_lower_overab3); + a68_op (A68_STD, "%*:=", m, a68_lower_modab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "OVERAB", m, a68_lower_overab3); + a68_op (A68_STD, "MODAB", m, a68_lower_modab3); + /* LONG INT operators */ + m = a68_proc (M_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_intabs2); + m = a68_proc (M_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenint2); + a68_op (A68_STD, "SIGN", m, a68_lower_sign2); + m = a68_proc (M_LONG_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengint2); + m = a68_proc (M_BOOL, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "ODD", m, a68_lower_odd2); + m = a68_proc (M_LONG_INT, M_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_int); + a68_op (A68_STD, "-", m, a68_lower_minus_int); + a68_op (A68_STD, "*", m, a68_lower_mult_int); + a68_op (A68_STD, "OVER", m, a68_lower_over3); + a68_op (A68_STD, "%", m, a68_lower_over3); + a68_op (A68_STD, "MOD", m, a68_lower_mod3); + a68_op (A68_STD, "%*", m, a68_lower_mod3); + m = a68_proc (M_REF_LONG_INT, M_REF_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "%:=", m, a68_lower_overab3); + a68_op (A68_STD, "%*:=", m, a68_lower_modab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "OVERAB", m, a68_lower_overab3); + a68_op (A68_STD, "MODAB", m, a68_lower_modab3); + m = a68_proc (M_BOOL, M_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_int_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_int_eq3); + a68_op (A68_STD, "/=", m, a68_lower_int_ne3); + a68_op (A68_STD, "NE", m, a68_lower_int_ne3); + a68_op (A68_STD, "<", m, a68_lower_int_lt3); + a68_op (A68_STD, "LT", m, a68_lower_int_lt3); + a68_op (A68_STD, "<=", m, a68_lower_int_le3); + a68_op (A68_STD, "LE", m, a68_lower_int_le3); + a68_op (A68_STD, ">", m, a68_lower_int_gt3); + a68_op (A68_STD, "GT", m, a68_lower_int_gt3); + a68_op (A68_STD, ">=", m, a68_lower_int_ge3); + a68_op (A68_STD, "GE", m, a68_lower_int_ge3); + m = a68_proc (M_LONG_REAL, M_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "/", m, a68_lower_rdiv3); + m = a68_proc (M_LONG_INT, M_LONG_INT, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_int); + a68_op (A68_STD, "^", m, a68_lower_pow_int); + /* LONG LONG INT operators. */ + m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_intabs2); + m = a68_proc (M_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "SIGN", m, a68_lower_sign2); + m = a68_proc (M_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenint2); + m = a68_proc (M_BOOL, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "ODD", m, a68_lower_odd2); + m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_int); + a68_op (A68_STD, "-", m, a68_lower_minus_int); + a68_op (A68_STD, "*", m, a68_lower_mult_int); + a68_op (A68_STD, "OVER", m, a68_lower_over3); + a68_op (A68_STD, "%", m, a68_lower_over3); + a68_op (A68_STD, "MOD", m, a68_lower_mod3); + a68_op (A68_STD, "%*", m, a68_lower_mod3); + m = a68_proc (M_REF_LONG_LONG_INT, M_REF_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "%:=", m, a68_lower_overab3); + a68_op (A68_STD, "%*:=", m, a68_lower_modab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "OVERAB", m, a68_lower_overab3); + a68_op (A68_STD, "MODAB", m, a68_lower_modab3); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "/", m, a68_lower_rdiv3); + m = a68_proc (M_BOOL, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "EQ", m, a68_lower_int_eq3); + a68_op (A68_STD, "NE", m, a68_lower_int_ne3); + a68_op (A68_STD, "GE", m, a68_lower_int_ge3); + a68_op (A68_STD, "GT", m, a68_lower_int_gt3); + a68_op (A68_STD, "LE", m, a68_lower_int_le3); + a68_op (A68_STD, "LT", m, a68_lower_int_lt3); + a68_op (A68_STD, "=", m, a68_lower_int_eq3); + a68_op (A68_STD, ">=", m, a68_lower_int_ge3); + a68_op (A68_STD, ">", m, a68_lower_int_gt3); + a68_op (A68_STD, "<=", m, a68_lower_int_le3); + a68_op (A68_STD, "<", m, a68_lower_int_lt3); + a68_op (A68_STD, "/=", m, a68_lower_int_ne3); + m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_INT, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_int); + a68_op (A68_STD, "^", m, a68_lower_pow_int); + /* SHORT SHORT BITS operators */ + m = a68_proc (M_BOOL, M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_bit_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bit_ne3); + a68_op (A68_STD, "NE", m, a68_lower_bit_ne3); + a68_op (A68_STD, "<=", m, a68_lower_bit_le3); + a68_op (A68_STD, "LE", m, a68_lower_bit_le3); + a68_op (A68_STD, ">=", m, a68_lower_bit_ge3); + a68_op (A68_STD, "GE", m, a68_lower_bit_ge3); + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_bitnot2); + a68_op (A68_STD, "~", m, a68_lower_bitnot2); + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "AND", m, a68_lower_bitand3); + a68_op (A68_STD, "OR", m, a68_lower_bitior3); + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "SHL", m, a68_lower_shl3); + a68_op (A68_STD, "UP", m, a68_lower_shl3); + a68_op (A68_STD, "SHR", m, a68_lower_shr3); + a68_op (A68_STD, "DOWN", m, a68_lower_shr3); + m = a68_proc (M_BOOL, M_INT, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "ELEM", m, a68_lower_bitelem3); + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_INT, NO_MOID); + a68_op (A68_STD, "BIN", m, a68_lower_bin2); + m = a68_proc (M_SHORT_SHORT_INT, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_bitabs2); + m = a68_proc (M_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_bitleng2); + /* SHORT BITS operatos. */ + m = a68_proc (M_SHORT_INT, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_bitabs2); + m = a68_proc (M_SHORT_BITS, M_SHORT_INT, NO_MOID); + a68_op (A68_STD, "BIN", m, a68_lower_bin2); + m = a68_proc (M_SHORT_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_bitnot2); + a68_op (A68_STD, "~", m, a68_lower_bitnot2); + m = a68_proc (M_BOOL, M_SHORT_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_bit_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bit_ne3); + a68_op (A68_STD, "NE", m, a68_lower_bit_ne3); + a68_op (A68_STD, "<=", m, a68_lower_bit_le3); + a68_op (A68_STD, "LE", m, a68_lower_bit_le3); + a68_op (A68_STD, ">=", m, a68_lower_bit_ge3); + a68_op (A68_STD, "GE", m, a68_lower_bit_ge3); + m = a68_proc (M_SHORT_BITS, M_SHORT_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "AND", m, a68_lower_bitand3); + a68_op (A68_STD, "OR", m, a68_lower_bitior3); + m = a68_proc (M_SHORT_BITS, M_SHORT_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "SHL", m, a68_lower_shl3); + a68_op (A68_STD, "UP", m, a68_lower_shl3); + a68_op (A68_STD, "SHR", m, a68_lower_shr3); + a68_op (A68_STD, "DOWN", m, a68_lower_shr3); + m = a68_proc (M_BOOL, M_INT, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "ELEM", m, a68_lower_bitelem3); + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_bitshorten2); + m = a68_proc (M_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_bitleng2); + /* BITS operators. */ + m = a68_proc (M_INT, M_BITS, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_bitabs2); + m = a68_proc (M_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "BIN", m, a68_lower_bin2); + m = a68_proc (M_BITS, M_BITS, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_bitnot2); + a68_op (A68_STD, "~", m, a68_lower_bitnot2); + m = a68_proc (M_BOOL, M_BITS, M_BITS, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_bit_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bit_ne3); + a68_op (A68_STD, "<=", m, a68_lower_bit_le3); + a68_op (A68_STD, ">=", m, a68_lower_bit_ge3); + a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3); + a68_op (A68_STD, "NE", m, a68_lower_bit_ne3); + a68_op (A68_STD, "LE", m, a68_lower_bit_le3); + a68_op (A68_STD, "GE", m, a68_lower_bit_ge3); + m = a68_proc (M_BITS, M_BITS, M_BITS, NO_MOID); + a68_op (A68_STD, "AND", m, a68_lower_bitand3); + a68_op (A68_STD, "OR", m, a68_lower_bitior3); + m = a68_proc (M_BITS, M_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "SHL", m, a68_lower_shl3); + a68_op (A68_STD, "UP", m, a68_lower_shl3); + a68_op (A68_STD, "SHR", m, a68_lower_shr3); + a68_op (A68_STD, "DOWN", m, a68_lower_shr3); + m = a68_proc (M_BOOL, M_INT, M_BITS, NO_MOID); + a68_op (A68_STD, "ELEM", m, a68_lower_bitelem3); + m = a68_proc (M_LONG_BITS, M_BITS, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_bitleng2); + m = a68_proc (M_SHORT_BITS, M_BITS, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_bitshorten2); + /* LONG BITS operatos. */ + m = a68_proc (M_LONG_INT, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_bitabs2); + m = a68_proc (M_LONG_BITS, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "BIN", m, a68_lower_bin2); + m = a68_proc (M_LONG_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_bitnot2); + a68_op (A68_STD, "~", m, a68_lower_bitnot2); + m = a68_proc (M_BOOL, M_LONG_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_bit_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bit_ne3); + a68_op (A68_STD, "NE", m, a68_lower_bit_ne3); + a68_op (A68_STD, "<=", m, a68_lower_bit_le3); + a68_op (A68_STD, "LE", m, a68_lower_bit_le3); + a68_op (A68_STD, ">=", m, a68_lower_bit_ge3); + a68_op (A68_STD, "GE", m, a68_lower_bit_ge3); + m = a68_proc (M_LONG_BITS, M_LONG_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "AND", m, a68_lower_bitand3); + a68_op (A68_STD, "OR", m, a68_lower_bitior3); + m = a68_proc (M_LONG_BITS, M_LONG_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "SHL", m, a68_lower_shl3); + a68_op (A68_STD, "UP", m, a68_lower_shl3); + a68_op (A68_STD, "SHR", m, a68_lower_shr3); + a68_op (A68_STD, "DOWN", m, a68_lower_shr3); + m = a68_proc (M_BOOL, M_INT, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "ELEM", m, a68_lower_bitelem3); + m = a68_proc (M_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_bitshorten2); + m = a68_proc (M_LONG_LONG_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_bitleng2); + /* LONG LONG BITS operators */ + m = a68_proc (M_BOOL, M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_bit_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_bit_eq3); + a68_op (A68_STD, "/=", m, a68_lower_bit_ne3); + a68_op (A68_STD, "NE", m, a68_lower_bit_ne3); + a68_op (A68_STD, "<=", m, a68_lower_bit_le3); + a68_op (A68_STD, "LE", m, a68_lower_bit_le3); + a68_op (A68_STD, ">=", m, a68_lower_bit_ge3); + a68_op (A68_STD, "GE", m, a68_lower_bit_ge3); + m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "NOT", m, a68_lower_bitnot2); + a68_op (A68_STD, "~", m, a68_lower_bitnot2); + m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "AND", m, a68_lower_bitand3); + a68_op (A68_STD, "OR", m, a68_lower_bitior3); + m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_BITS, M_INT, NO_MOID); + a68_op (A68_STD, "SHL", m, a68_lower_shl3); + a68_op (A68_STD, "UP", m, a68_lower_shl3); + a68_op (A68_STD, "SHR", m, a68_lower_shr3); + a68_op (A68_STD, "DOWN", m, a68_lower_shr3); + m = a68_proc (M_BOOL, M_INT, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "ELEM", m, a68_lower_bitelem3); + m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "BIN", m, a68_lower_bin2); + m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_bitabs2); + m = a68_proc (M_LONG_BITS, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_bitshorten2); + /* REAL operators. */ + m = A68_MCACHE (proc_real_real); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_realabs2); + m = a68_proc (M_INT, M_REAL, NO_MOID); + a68_op (A68_STD, "SIGN", m, a68_lower_realsign2); + a68_op (A68_STD, "ROUND", m, a68_lower_round2); + a68_op (A68_STD, "ENTIER", m, a68_lower_entier2); + m = a68_proc (M_BOOL, M_REAL, M_REAL, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_real_eq3); + a68_op (A68_STD, "/=", m, a68_lower_real_ne3); + a68_op (A68_STD, "<", m, a68_lower_real_lt3); + a68_op (A68_STD, "<=", m, a68_lower_real_le3); + a68_op (A68_STD, ">", m, a68_lower_real_gt3); + a68_op (A68_STD, ">=", m, a68_lower_real_ge3); + a68_op (A68_STD, "EQ", m, a68_lower_real_eq3); + a68_op (A68_STD, "NE", m, a68_lower_real_ne3); + a68_op (A68_STD, "LT", m, a68_lower_real_lt3); + a68_op (A68_STD, "LE", m, a68_lower_real_le3); + a68_op (A68_STD, "GT", m, a68_lower_real_gt3); + a68_op (A68_STD, "GE", m, a68_lower_real_ge3); + m = A68_MCACHE (proc_real_real_real); + a68_op (A68_STD, "+", m, a68_lower_plus_real); + a68_op (A68_STD, "-", m, a68_lower_minus_real); + a68_op (A68_STD, "*", m, a68_lower_mult_real); + a68_op (A68_STD, "/", m, a68_lower_div3); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + m = a68_proc (M_REAL, M_REAL, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + m = a68_proc (M_REF_REAL, M_REF_REAL, M_REAL, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "/:=", m, a68_lower_divab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "DIVAB", m, a68_lower_divab3); + m = a68_proc (M_LONG_REAL, M_REAL, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengreal2); + /* LONG REAL operators */ + m = a68_proc (M_LONG_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "LENG", m, a68_lower_lengreal2); + m = a68_proc (M_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenreal2); + m = a68_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + a68_op (A68_STD, "ABS", m, a68_lower_realabs2); + m = a68_proc (M_INT, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "SIGN", m, a68_lower_realsign2); + m = a68_proc (M_LONG_INT, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "ENTIER", m, a68_lower_entier2); + a68_op (A68_STD, "ROUND", m, a68_lower_round2); + m = a68_proc (M_LONG_REAL, M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_real); + a68_op (A68_STD, "-", m, a68_lower_minus_real); + a68_op (A68_STD, "*", m, a68_lower_mult_real); + a68_op (A68_STD, "/", m, a68_lower_div3); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + m = a68_proc (M_REF_LONG_REAL, M_REF_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "/:=", m, a68_lower_divab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "DIVAB", m, a68_lower_divab3); + m = a68_proc (M_BOOL, M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_real_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_real_eq3); + a68_op (A68_STD, "/=", m, a68_lower_real_ne3); + a68_op (A68_STD, "NE", m, a68_lower_real_ne3); + a68_op (A68_STD, "<", m, a68_lower_real_lt3); + a68_op (A68_STD, "LT", m, a68_lower_real_lt3); + a68_op (A68_STD, "<=", m, a68_lower_real_le3); + a68_op (A68_STD, "LE", m, a68_lower_real_le3); + a68_op (A68_STD, ">", m, a68_lower_real_gt3); + a68_op (A68_STD, "GT", m, a68_lower_real_gt3); + a68_op (A68_STD, ">=", m, a68_lower_real_ge3); + a68_op (A68_STD, "GE", m, a68_lower_real_ge3); + m = a68_proc (M_LONG_REAL, M_LONG_REAL, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + /* LONG LONG REAL operators. */ + m = a68_proc (M_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "SHORTEN", m, a68_lower_shortenreal2); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "ABS", m, a68_lower_realabs2); + a68_op (A68_STD, "+", m, a68_lower_confirm2); + a68_op (A68_STD, "-", m, a68_lower_negate2); + m = a68_proc (M_INT, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "SIGN", m, a68_lower_realsign2); + m = a68_proc (M_LONG_LONG_INT, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "ENTIER", m, a68_lower_entier2); + a68_op (A68_STD, "ROUND", m, a68_lower_round2); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "+", m, a68_lower_plus_real); + a68_op (A68_STD, "-", m, a68_lower_minus_real); + a68_op (A68_STD, "*", m, a68_lower_mult_real); + a68_op (A68_STD, "/", m, a68_lower_div3); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + m = a68_proc (M_REF_LONG_LONG_REAL, M_REF_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "+:=", m, a68_lower_plusab3); + a68_op (A68_STD, "-:=", m, a68_lower_minusab3); + a68_op (A68_STD, "*:=", m, a68_lower_multab3); + a68_op (A68_STD, "/:=", m, a68_lower_divab3); + a68_op (A68_STD, "PLUSAB", m, a68_lower_plusab3); + a68_op (A68_STD, "MINUSAB", m, a68_lower_minusab3); + a68_op (A68_STD, "TIMESAB", m, a68_lower_multab3); + a68_op (A68_STD, "DIVAB", m, a68_lower_divab3); + m = a68_proc (M_BOOL, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "=", m, a68_lower_real_eq3); + a68_op (A68_STD, "EQ", m, a68_lower_real_eq3); + a68_op (A68_STD, "/=", m, a68_lower_real_ne3); + a68_op (A68_STD, "NE", m, a68_lower_real_ne3); + a68_op (A68_STD, "<", m, a68_lower_real_lt3); + a68_op (A68_STD, "LT", m, a68_lower_real_lt3); + a68_op (A68_STD, "<=", m, a68_lower_real_le3); + a68_op (A68_STD, "LE", m, a68_lower_real_le3); + a68_op (A68_STD, ">", m, a68_lower_real_gt3); + a68_op (A68_STD, "GT", m, a68_lower_real_gt3); + a68_op (A68_STD, ">=", m, a68_lower_real_ge3); + a68_op (A68_STD, "GE", m, a68_lower_real_ge3); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, M_INT, NO_MOID); + a68_op (A68_STD, "**", m, a68_lower_pow_real); + a68_op (A68_STD, "^", m, a68_lower_pow_real); + /* ROWS operators. */ + m = a68_proc (M_INT, M_ROWS, NO_MOID); + a68_op (A68_STD, "LWB", m, a68_lower_lwb2); + a68_op (A68_STD, "UPB", m, a68_lower_upb2); + m = a68_proc (M_INT, M_INT, M_ROWS, NO_MOID); + a68_op (A68_STD, "LWB", m, a68_lower_lwb3); + a68_op (A68_STD, "UPB", m, a68_lower_upb3); + /* BYTES operators. */ + m = a68_proc (M_BYTES, M_STRING, NO_MOID); + a68_idf (A68_STD, "bytespack", m); + m = a68_proc (M_CHAR, M_INT, M_BYTES, NO_MOID); + a68_op (A68_STD, "ELEM", m); + m = a68_proc (M_BYTES, M_BYTES, M_BYTES, NO_MOID); + a68_op (A68_STD, "+", m); + m = a68_proc (M_REF_BYTES, M_REF_BYTES, M_BYTES, NO_MOID); + a68_op (A68_STD, "+:=", m); + a68_op (A68_STD, "PLUSAB", m); + m = a68_proc (M_BOOL, M_BYTES, M_BYTES, NO_MOID); + a68_op (A68_STD, "=", m); + a68_op (A68_STD, "/=", m); + a68_op (A68_STD, "<", m); + a68_op (A68_STD, "<=", m); + a68_op (A68_STD, ">", m); + a68_op (A68_STD, ">=", m); + a68_op (A68_STD, "EQ", m); + a68_op (A68_STD, "NE", m); + a68_op (A68_STD, "LT", m); + a68_op (A68_STD, "LE", m); + a68_op (A68_STD, "GT", m); + a68_op (A68_STD, "GE", m); + /* LONG BYTES operators. */ + m = a68_proc (M_LONG_BYTES, M_BYTES, NO_MOID); + a68_op (A68_STD, "LENG", m); + m = a68_proc (M_BYTES, M_LONG_BYTES, NO_MOID); + a68_idf (A68_STD, "SHORTEN", m); + m = a68_proc (M_LONG_BYTES, M_STRING, NO_MOID); + a68_idf (A68_STD, "longbytespack", m); + m = a68_proc (M_CHAR, M_INT, M_LONG_BYTES, NO_MOID); + a68_op (A68_STD, "ELEM", m); + m = a68_proc (M_LONG_BYTES, M_LONG_BYTES, M_LONG_BYTES, NO_MOID); + a68_op (A68_STD, "+", m); + m = a68_proc (M_REF_LONG_BYTES, M_REF_LONG_BYTES, M_LONG_BYTES, NO_MOID); + a68_op (A68_STD, "+:=", m); + a68_op (A68_STD, "PLUSAB", m); + m = a68_proc (M_BOOL, M_LONG_BYTES, M_LONG_BYTES, NO_MOID); + a68_op (A68_STD, "=", m); + a68_op (A68_STD, "/=", m); + a68_op (A68_STD, "<", m); + a68_op (A68_STD, "<=", m); + a68_op (A68_STD, ">", m); + a68_op (A68_STD, ">=", m); + a68_op (A68_STD, "EQ", m); + a68_op (A68_STD, "NE", m); + a68_op (A68_STD, "LT", m); + a68_op (A68_STD, "LE", m); + a68_op (A68_STD, "GT", m); + a68_op (A68_STD, "GE", m); + /* COMPLEX operators. */ + m = a68_proc (M_COMPLEX, M_REAL, M_REAL, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_reali); + a68_op (A68_STD, "+*", m, a68_lower_reali); + m = a68_proc (M_COMPLEX, M_INT, M_INT, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_inti); + a68_op (A68_STD, "+*", m, a68_lower_inti); + m = a68_proc (M_REAL, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "RE", m, a68_lower_re2); + a68_op (A68_STD, "IM", m, a68_lower_im2); + a68_op (A68_STD, "ABS", m); + a68_op (A68_STD, "ARG", m); + m = A68_MCACHE (proc_complex_complex); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "CONJ", m, a68_lower_conj2); + m = a68_proc (M_BOOL, M_COMPLEX, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "=", m); + a68_op (A68_STD, "/=", m); + a68_op (A68_STD, "EQ", m); + a68_op (A68_STD, "NE", m); + m = a68_proc (M_COMPLEX, M_COMPLEX, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "*", m); + a68_op (A68_STD, "/", m); + m = a68_proc (M_COMPLEX, M_COMPLEX, M_INT, NO_MOID); + a68_op (A68_STD, "**", m); + a68_op (A68_STD, "UP", m); + a68_op (A68_STD, "^", m); + m = a68_proc (M_REF_COMPLEX, M_REF_COMPLEX, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "+:=", m); + a68_op (A68_STD, "-:=", m); + a68_op (A68_STD, "*:=", m); + a68_op (A68_STD, "/:=", m); + a68_op (A68_STD, "PLUSAB", m); + a68_op (A68_STD, "MINUSAB", m); + a68_op (A68_STD, "TIMESAB", m); + a68_op (A68_STD, "DIVAB", m); + m = a68_proc (M_COMPLEX, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "SHORTEN", m); + /* LONG COMPLEX operators */ + m = a68_proc (M_LONG_COMPLEX, M_LONG_INT, M_LONG_INT, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_longinti); + a68_op (A68_STD, "+*", m, a68_lower_longinti); + m = a68_proc (M_LONG_COMPLEX, M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_longreali); + a68_op (A68_STD, "+*", m, a68_lower_longreali); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "LENG", m); + m = a68_proc (M_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "SHORTEN", m); + m = a68_proc (M_LONG_COMPLEX, M_COMPLEX, NO_MOID); + a68_op (A68_STD, "LENG", m); + m = a68_proc (M_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "SHORTEN", m); + m = a68_proc (M_LONG_REAL, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "RE", m, a68_lower_re2); + a68_op (A68_STD, "IM", m, a68_lower_im2); + a68_op (A68_STD, "ARG", m); + a68_op (A68_STD, "ABS", m); + m = a68_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "CONJ", m, a68_lower_conj2); + m = a68_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "*", m); + a68_op (A68_STD, "/", m); + m = a68_proc (M_LONG_COMPLEX, M_LONG_COMPLEX, M_INT, NO_MOID); + a68_op (A68_STD, "**", m); + a68_op (A68_STD, "UP", m); + a68_op (A68_STD, "^", m); + m = a68_proc (M_BOOL, M_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "=", m); + a68_op (A68_STD, "EQ", m); + a68_op (A68_STD, "/=", m); + a68_op (A68_STD, "NE", m); + m = a68_proc (M_REF_LONG_COMPLEX, M_REF_LONG_COMPLEX, M_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+:=", m); + a68_op (A68_STD, "-:=", m); + a68_op (A68_STD, "*:=", m); + a68_op (A68_STD, "/:=", m); + a68_op (A68_STD, "PLUSAB", m); + a68_op (A68_STD, "MINUSAB", m); + a68_op (A68_STD, "TIMESAB", m); + a68_op (A68_STD, "DIVAB", m); + /* LONG LONG COMPLEX operators. */ + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_INT, M_LONG_LONG_INT, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_longlonginti); + a68_op (A68_STD, "+*", m, a68_lower_longlonginti); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_op (A68_STD, "I", m, a68_lower_longlongreali); + a68_op (A68_STD, "+*", m, a68_lower_longlongreali); + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "RE", m, a68_lower_re2); + a68_op (A68_STD, "IM", m, a68_lower_im2); + a68_op (A68_STD, "ARG", m); + a68_op (A68_STD, "ABS", m); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "CONJ", m, a68_lower_conj2); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+", m); + a68_op (A68_STD, "-", m); + a68_op (A68_STD, "*", m); + a68_op (A68_STD, "/", m); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, M_INT, NO_MOID); + a68_op (A68_STD, "**", m); + a68_op (A68_STD, "UP", m); + a68_op (A68_STD, "^", m); + m = a68_proc (M_BOOL, M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "=", m); + a68_op (A68_STD, "EQ", m); + a68_op (A68_STD, "/=", m); + a68_op (A68_STD, "NE", m); + m = a68_proc (M_REF_LONG_LONG_COMPLEX, M_REF_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "+:=", m); + a68_op (A68_STD, "-:=", m); + a68_op (A68_STD, "*:=", m); + a68_op (A68_STD, "/:=", m); + a68_op (A68_STD, "PLUSAB", m); + a68_op (A68_STD, "MINUSAB", m); + a68_op (A68_STD, "TIMESAB", m); + a68_op (A68_STD, "DIVAB", m); + m = a68_proc (M_LONG_LONG_COMPLEX, M_LONG_LONG_COMPLEX, NO_MOID); + a68_op (A68_STD, "LENG", m); + /* SEMA operators. */ + m = a68_proc (M_SEMA, M_INT, NO_MOID); + a68_op (A68_STD, "LEVEL", m); + m = a68_proc (M_INT, M_SEMA, NO_MOID); + a68_op (A68_STD, "LEVEL", m); + m = a68_proc (M_VOID, M_SEMA, NO_MOID); + a68_op (A68_STD, "UP", m); + a68_op (A68_STD, "DOWN", m); +} + +/* GNU extensions for the standenv. */ + +static void +gnu_prelude (void) +{ + MOID_T *m = NO_MOID; + /* Priorities. */ + a68_prio ("ELEMS", 8); + /* Identifiers. */ + a68_idf (A68_EXT, "infinity", M_REAL, a68_lower_infinity); + a68_idf (A68_EXT, "minusinfinity", M_REAL, a68_lower_minusinfinity); + a68_idf (A68_EXT, "longlonginfinity", M_LONG_LONG_REAL); + a68_idf (A68_EXT, "longlongminusinfinity", M_LONG_LONG_REAL); + a68_idf (A68_EXT, "longinfinity", M_LONG_REAL); + a68_idf (A68_EXT, "longminusinfinity", M_LONG_REAL); + a68_idf (A68_EXT, "minint", M_INT, a68_lower_minint); + a68_idf (A68_EXT, "longminint", M_LONG_INT, a68_lower_minint); + a68_idf (A68_EXT, "longlongminint", M_LONG_LONG_INT, a68_lower_minint); + a68_idf (A68_EXT, "shortminint", M_SHORT_INT, a68_lower_minint); + a68_idf (A68_EXT, "shortshortminint", M_SHORT_SHORT_INT, a68_lower_minint); + a68_idf (A68_EXT, "minreal", M_REAL, a68_lower_minreal); + a68_idf (A68_EXT, "longminreal", M_LONG_REAL, a68_lower_minreal); + a68_idf (A68_EXT, "longlongminreal", M_LONG_LONG_REAL, a68_lower_minreal); + a68_idf (A68_EXT, "invalidchar", M_CHAR, a68_lower_invalidchar); + /* REAL procedures. */ + m = A68_MCACHE (proc_real_real); + a68_idf (A68_EXT, "log", m, a68_lower_log); + /* LONG REAL procedures. */ + m = a68_proc (M_LONG_REAL, M_LONG_REAL, NO_MOID); + a68_idf (A68_EXT, "longlog", m, a68_lower_long_log); + /* LONG LONG REAL procedures. */ + m = a68_proc (M_LONG_LONG_REAL, M_LONG_LONG_REAL, NO_MOID); + a68_idf (A68_EXT, "longlonglog", m, a68_lower_long_long_log); + /* BOOL operators. */ + m = a68_proc (M_BOOL, M_BOOL, M_BOOL, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_xor3); + /* SHORT SHORT BITS operators. */ + m = a68_proc (M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, M_SHORT_SHORT_BITS, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_bitxor3); + /* SHORT BITS operators. */ + m = a68_proc (M_SHORT_BITS, M_SHORT_BITS, M_SHORT_BITS, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_bitxor3); + /* BITS operators. */ + m = a68_proc (M_BITS, M_BITS, M_BITS, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_bitxor3); + /* LONG BITS operators. */ + m = a68_proc (M_LONG_BITS, M_LONG_BITS, M_LONG_BITS, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_bitxor3); + /* LONG LONG BITS operators. */ + m = a68_proc (M_LONG_LONG_BITS, M_LONG_LONG_BITS, M_LONG_LONG_BITS, NO_MOID); + a68_op (A68_EXT, "XOR", m, a68_lower_bitxor3); + /* ROWS operators. */ + m = a68_proc (M_INT, M_ROWS, NO_MOID); + a68_op (A68_EXT, "ELEMS", m, a68_lower_elems2); + m = a68_proc (M_INT, M_INT, M_ROWS, NO_MOID); + a68_op (A68_EXT, "ELEMS", m, a68_lower_elems3); +} + +/* POSIX prelude. */ + +static void +posix_prelude (void) +{ + MOID_T *m = NO_MOID; + + /* Environment variables. */ + m = a68_proc (M_STRING, M_STRING, NO_MOID); + a68_idf (A68_EXT, "getenv", m, a68_lower_posixgetenv); + /* Exit status handling. */ + m = a68_proc (M_VOID, M_INT, NO_MOID); + a68_idf (A68_EXT, "setexitstatus", m, a68_lower_setexitstatus); + /* Argument handling. */ + m = A68_MCACHE (proc_int); + a68_idf (A68_EXT, "argc", m, a68_lower_posixargc); + m = a68_proc (M_STRING, M_INT, NO_MOID); + a68_idf (A68_EXT, "argv", m, a68_lower_posixargv); + /* Error procedures. */ + m = A68_MCACHE (proc_int); + a68_idf (A68_EXT, "errno", m, a68_lower_posixerrno); + m = a68_proc (M_VOID, M_STRING, NO_MOID); + a68_idf (A68_EXT, "perror", m, a68_lower_posixperror); + m = a68_proc (M_STRING, M_INT, NO_MOID); + a68_idf (A68_EXT, "strerror", m, a68_lower_posixstrerror); + /* I/O identifiers. */ + a68_idf (A68_EXT, "stdin", M_INT, a68_lower_posixstdinfiledes); + a68_idf (A68_EXT, "stdout", M_INT, a68_lower_posixstdoutfiledes); + a68_idf (A68_EXT, "stderr", M_INT, a68_lower_posixstderrfiledes); + a68_idf (A68_EXT, "fileodefault", M_BITS, a68_lower_posixfileodefault); + a68_idf (A68_EXT, "fileordwr", M_BITS, a68_lower_posixfileordwr); + a68_idf (A68_EXT, "fileordonly", M_BITS, a68_lower_posixfileordonly); + a68_idf (A68_EXT, "fileowronly", M_BITS, a68_lower_posixfileowronly); + a68_idf (A68_EXT, "fileotrunc", M_BITS, a68_lower_posixfileotrunc); + /* Opening and closing files. */ + m = a68_proc (M_INT, M_STRING, M_BITS, NO_MOID); + a68_idf (A68_EXT, "fopen", m, a68_lower_posixfopen); + a68_idf (A68_EXT, "fcreate", m, a68_lower_posixfcreate); + m = A68_MCACHE (proc_int_int); + a68_idf (A68_EXT, "fclose", m, a68_lower_posixfclose); + /* Getting properties of files. */ + m = a68_proc (M_LONG_LONG_INT, M_INT, NO_MOID); + a68_idf (A68_EXT, "fsize", m, a68_lower_posixfsize); + /* Sockets. */ + m = a68_proc (M_INT, M_STRING, M_INT, NO_MOID); + a68_idf (A68_EXT, "fconnect", m, a68_lower_posixfconnect); + /* String and character output. */ + m = a68_proc (M_CHAR, M_CHAR, NO_MOID); + a68_idf (A68_EXT, "putchar", m, a68_lower_posixputchar); + m = a68_proc (M_VOID, M_STRING, NO_MOID); + a68_idf (A68_EXT, "puts", m, a68_lower_posixputs); + m = a68_proc (M_CHAR, M_INT, M_CHAR, NO_MOID); + a68_idf (A68_EXT, "fputc", m, a68_lower_posixfputc); + m = a68_proc (M_INT, M_INT, M_STRING, NO_MOID); + a68_idf (A68_EXT, "fputs", m, a68_lower_posixfputs); + /* String and character input. */ + m = A68_MCACHE (proc_char); + a68_idf (A68_EXT, "getchar", m, a68_lower_posixgetchar); + m = a68_proc (M_CHAR, M_INT, NO_MOID); + a68_idf (A68_EXT, "fgetc", m, a68_lower_posixfgetc); + m = a68_proc (M_REF_STRING, M_INT, NO_MOID); + a68_idf (A68_EXT, "gets", m, a68_lower_posixgets); + m = a68_proc (M_REF_STRING, M_INT, M_INT, NO_MOID); + a68_idf (A68_EXT, "fgets", m, a68_lower_posixfgets); +} + +/* Transput. */ + +static void +stand_transput (void) +{ + PACK_T *z = NO_PACK; + MOID_T *m = NO_MOID; + + /* Modes. */ + + /* NUMBER */ + z = NO_PACK; + (void) a68_add_mode_to_pack (&z, M_INT, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_INT, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_LONG_INT, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_SHORT_INT, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_SHORT_SHORT_INT, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_REAL, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_REAL, NO_TEXT, NO_NODE); + (void) a68_add_mode_to_pack (&z, M_LONG_LONG_REAL, NO_TEXT, NO_NODE); + M_NUMBER = a68_add_mode (&TOP_MOID (&A68_JOB), UNION_SYMBOL, a68_count_pack_members (z), NO_NODE, NO_MOID, z); + + /* Layout procedures. */ + + /* Conversion procedures. */ + m = a68_proc (M_STRING, M_NUMBER, M_INT, NO_MOID); + a68_idf (A68_STD, "whole", m); +} + +/* Build the standard environ symbol table. */ + +void +a68_make_standard_environ (void) +{ + stand_moids (); + A68_MCACHE (proc_bool) = a68_proc (M_BOOL, NO_MOID); + A68_MCACHE (proc_char) = a68_proc (M_CHAR, NO_MOID); + A68_MCACHE (proc_complex_complex) = a68_proc (M_COMPLEX, M_COMPLEX, NO_MOID); + A68_MCACHE (proc_int) = a68_proc (M_INT, NO_MOID); + A68_MCACHE (proc_int_int) = a68_proc (M_INT, M_INT, NO_MOID); + A68_MCACHE (proc_int_int_real) = a68_proc (M_REAL, M_INT, M_INT, NO_MOID); + A68_MCACHE (proc_int_real) = a68_proc (M_REAL, M_INT, NO_MOID); + A68_MCACHE (proc_int_real_real) = a68_proc (M_REAL, M_INT, M_REAL, NO_MOID); + A68_MCACHE (proc_int_real_real_real) = a68_proc (M_REAL, M_INT, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real) = a68_proc (M_REAL, NO_MOID); + A68_MCACHE (proc_real_int_real) = a68_proc (M_REAL, M_REAL, M_INT, NO_MOID); + A68_MCACHE (proc_real_real_int_real) = a68_proc (M_REAL, M_REAL, M_REAL, M_INT, NO_MOID); + A68_MCACHE (proc_real_real) = M_PROC_REAL_REAL; + A68_MCACHE (proc_real_real_real) = a68_proc (M_REAL, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real_real_real_int) = a68_proc (M_INT, M_REAL, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real_real_real_real) = a68_proc (M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real_real_real_real_real) = a68_proc (M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real_real_real_real_real_real) = a68_proc (M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, M_REAL, NO_MOID); + A68_MCACHE (proc_real_ref_real_ref_int_void) = a68_proc (M_VOID, M_REAL, M_REF_REAL, M_REF_INT, NO_MOID); + A68_MCACHE (proc_void) = a68_proc (M_VOID, NO_MOID); + stand_prelude (); + if (!OPTION_STRICT (&A68_JOB)) + { + gnu_prelude (); + posix_prelude (); + } + stand_transput (); +} -- 2.30.2
