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