a68g-types.h

     
   1  //! @file a68g-types.h
   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  #if !defined (__A68G_TYPES_H__)
  23  #define __A68G_TYPES_H__
  24  
  25  // Type definitions
  26  
  27  #define COMPLEX_T double complex
  28  
  29  typedef unt char BYTE_T;
  30  typedef BYTE_T *A68_STRUCT;
  31  
  32  typedef char BUFFER[BUFFER_SIZE + 1];
  33  typedef int CHAR_T;
  34  typedef int LEAP_T;
  35  typedef MP_T A68_LONG[DEFAULT_DOUBLE_DIGITS + 2];
  36  typedef struct A68_ARRAY A68_ARRAY;
  37  typedef struct A68_BITS A68_BITS;
  38  typedef struct A68_BOOL A68_BOOL;
  39  typedef struct A68_BYTES A68_BYTES;
  40  typedef struct A68_CHANNEL A68_CHANNEL;
  41  typedef struct A68_CHAR A68_CHAR;
  42  typedef struct A68_COLLITEM A68_COLLITEM;
  43  typedef struct A68_FILE A68_FILE;
  44  typedef struct A68_FORMAT A68_FORMAT;
  45  typedef struct A68_HANDLE A68_HANDLE;
  46  typedef struct A68_INT A68_INT;
  47  typedef struct A68_LONG_BYTES A68_LONG_BYTES;
  48  typedef struct A68_PROCEDURE A68_PROCEDURE;
  49  typedef struct A68_REAL A68_REAL;
  50  typedef struct A68_REF A68_REF, A68_ROW;
  51  typedef struct A68_SOUND A68_SOUND;
  52  typedef struct A68_STREAM A68_STREAM;
  53  typedef struct A68_TUPLE A68_TUPLE;
  54  typedef struct A68_UNION A68_UNION;
  55  typedef struct ACTIVATION_RECORD ACTIVATION_RECORD;
  56  typedef struct DEC_T DEC_T;
  57  typedef struct DIAGNOSTIC_T DIAGNOSTIC_T;
  58  typedef struct FILES_T FILES_T;
  59  typedef struct GINFO_T GINFO_T;
  60  typedef struct KEYWORD_T KEYWORD_T;
  61  typedef struct LINE_T LINE_T;
  62  typedef struct MODES_T MODES_T;
  63  typedef struct MOID_T MOID_T;
  64  typedef struct NODE_INFO_T NODE_INFO_T;
  65  typedef struct OPTION_LIST_T OPTION_LIST_T;
  66  typedef struct OPTIONS_T OPTIONS_T;
  67  typedef struct PACK_T PACK_T;
  68  typedef struct POSTULATE_T POSTULATE_T;
  69  typedef struct PROP_T PROP_T;
  70  typedef struct REFINEMENT_T REFINEMENT_T;
  71  typedef struct SOID_T SOID_T;
  72  typedef struct TABLE_T TABLE_T;
  73  typedef struct TAG_T TAG_T;
  74  typedef struct TOKEN_T TOKEN_T;
  75  typedef unt FILE_T, MOOD_T;
  76  typedef void GPROC (NODE_T *);
  77  
  78  typedef PROP_T PROP_PROC (NODE_T *);
  79  
  80  struct A68_REAL
  81  {
  82    STATUS_MASK_T status;
  83    REAL_T value;
  84  } ALIGNED;
  85  
  86  struct DEC_T
  87  {
  88    char *text;
  89    int level;
  90    DEC_T *sub, *less, *more;
  91  };
  92  
  93  struct ACTIVATION_RECORD
  94  {
  95    ADDR_T static_link, dynamic_link, dynamic_scope, parameters;
  96    NODE_T *node;
  97    jmp_buf *jump_stat;
  98    BOOL_T proc_frame;
  99    int frame_no, frame_level, parameter_level;
 100  #if defined (BUILD_PARALLEL_CLAUSE)
 101    pthread_t thread_id;
 102  #endif
 103  };
 104  
 105  struct PROP_T
 106  {
 107    PROP_PROC *unit;
 108    NODE_T *source;
 109  };
 110  
 111  struct A68_STREAM
 112  {
 113    char *name;
 114    FILE_T fd;
 115    BOOL_T opened, writemood;
 116  } ALIGNED;
 117  
 118  struct DIAGNOSTIC_T
 119  {
 120    int attribute, number;
 121    NODE_T *where;
 122    LINE_T *line;
 123    char *text, *symbol;
 124    DIAGNOSTIC_T *next;
 125  };
 126  
 127  struct FILES_T
 128  {
 129    char *path, *initial_name, *generic_name;
 130    struct A68_STREAM binary, diags, plugin, script, object, source, listing, pretty;
 131  };
 132  
 133  struct KEYWORD_T
 134  {
 135    int attribute;
 136    char *text;
 137    KEYWORD_T *less, *more;
 138  };
 139  
 140  struct MODES_T
 141  {
 142    MOID_T *BITS, *BOOL, *BYTES, *CHANNEL, *CHAR, *COLLITEM, *COMPL, *COMPLEX,
 143      *C_STRING, *ERROR, *FILE, *FORMAT, *HEX_NUMBER, *HIP, *INT, *LONG_BITS, *LONG_BYTES,
 144      *LONG_COMPL, *LONG_COMPLEX, *LONG_INT, *LONG_LONG_BITS, *LONG_LONG_COMPL,
 145      *LONG_LONG_COMPLEX, *LONG_LONG_INT, *LONG_LONG_REAL, *LONG_REAL, *NUMBER, *PIPE,
 146      *PROC_REAL_REAL, *PROC_LONG_REAL_LONG_REAL, *PROC_REF_FILE_BOOL, *PROC_REF_FILE_VOID, *PROC_ROW_CHAR,
 147      *PROC_STRING, *PROC_VOID, *REAL, *REF_BITS, *REF_BOOL, *REF_BYTES,
 148      *REF_CHAR, *REF_COMPL, *REF_COMPLEX, *REF_FILE, *REF_FORMAT, *REF_INT,
 149      *REF_LONG_BITS, *REF_LONG_BYTES, *REF_LONG_COMPL, *REF_LONG_COMPLEX,
 150      *REF_LONG_INT, *REF_LONG_LONG_BITS, *REF_LONG_LONG_COMPL,
 151      *REF_LONG_LONG_COMPLEX, *REF_LONG_LONG_INT, *REF_LONG_LONG_REAL, *REF_LONG_REAL, 
 152      *REF_PIPE, *REF_REAL, *REF_REF_FILE, *REF_ROW_CHAR, *REF_ROW_COMPLEX, *REF_ROW_INT, 
 153      *REF_ROW_REAL, *REF_ROW_ROW_COMPLEX, *REF_ROW_ROW_REAL, *REF_SOUND, *REF_STRING,
 154      *ROW_BITS, *ROW_BOOL, *ROW_CHAR, *ROW_COMPLEX, *ROW_INT, *ROW_LONG_BITS, *ROW_LONG_LONG_BITS, 
 155      *ROW_REAL, *ROW_ROW_CHAR, *ROW_ROW_COMPLEX, *ROW_ROW_REAL, *ROWS, *ROW_SIMPLIN, *ROW_SIMPLOUT, 
 156      *ROW_STRING, *SEMA, *SIMPLIN, *SIMPLOUT, *SOUND, *SOUND_DATA, *STRING, *FLEX_ROW_CHAR, 
 157      *FLEX_ROW_BOOL, *UNDEFINED, *VACUUM, *VOID;
 158  };
 159  
 160  struct OPTIONS_T
 161  {
 162    OPTION_LIST_T *list;
 163    BOOL_T backtrace, brackets, check_only, clock, cross_reference, debug, compile, compile_check, keep, fold, license, moid_listing, object_listing, portcheck, pragmat_sema, pretty, reductions, regression_test, run, rerun, run_script, source_listing, standard_prelude_listing, statistics_listing, strict, stropping, trace, tree_listing, unused, verbose, version, no_warnings, quiet;
 164    int time_limit, opt_level, indent;
 165    STATUS_MASK_T nodemask;
 166  };
 167  
 168  struct MOID_T
 169  {
 170    int attribute, dim, number, short_id, size, digits, sizec, digitsc;
 171    BOOL_T has_rows, use, portable, derivate;
 172    NODE_T *node;
 173    PACK_T *pack;
 174    MOID_T *sub, *equivalent_mode, *slice, *deflexed_mode, *name, *multiple_mode, *next, *rowed, *trim;
 175  };
 176  #define NO_MOID ((MOID_T *) NULL)
 177  
 178  struct NODE_T
 179  {
 180    GINFO_T *genie;
 181    int number, attribute, annotation;
 182    MOID_T *type;
 183    NODE_INFO_T *info;
 184    NODE_T *next, *previous, *sub, *sequence, *nest;
 185    PACK_T *pack;
 186    STATUS_MASK_T status, codex;
 187    TABLE_T *symbol_table, *non_local;
 188    TAG_T *tag;
 189  };
 190  #define NO_NODE ((NODE_T *) NULL)
 191  
 192  struct NODE_INFO_T
 193  {
 194    int procedure_level, priority, pragment_type;
 195    char *char_in_line, *symbol, *pragment, *expr;
 196    LINE_T *line;
 197  };
 198  
 199  struct GINFO_T
 200  {
 201    PROP_T propagator;
 202    BOOL_T is_coercion, is_new_lexical_level, need_dns;
 203    BYTE_T *offset;
 204    MOID_T *partial_proc, *partial_locale;
 205    NODE_T *parent;
 206    char *compile_name;
 207    int level, argsize, size, compile_node;
 208    void *constant;
 209  };
 210  
 211  struct OPTION_LIST_T
 212  {
 213    char *str;
 214    int scan;
 215    BOOL_T processed;
 216    LINE_T *line;
 217    OPTION_LIST_T *next;
 218  };
 219  
 220  struct PACK_T
 221  {
 222    MOID_T *type;
 223    char *text;
 224    NODE_T *node;
 225    PACK_T *next, *previous;
 226    int size;
 227    ADDR_T offset;
 228  };
 229  
 230  struct POSTULATE_T
 231  {
 232    MOID_T *a, *b;
 233    POSTULATE_T *next;
 234  };
 235  
 236  struct REFINEMENT_T
 237  {
 238    REFINEMENT_T *next;
 239    char *name;
 240    LINE_T *line_defined, *line_applied;
 241    int applications;
 242    NODE_T *node_defined, *begin, *end;
 243  };
 244  
 245  struct SOID_T
 246  {
 247    int attribute, sort, cast;
 248    MOID_T *type;
 249    NODE_T *node;
 250    SOID_T *next;
 251  };
 252  
 253  struct LINE_T
 254  {
 255    char marker[6], *string, *filename;
 256    DIAGNOSTIC_T *diagnostics;
 257    int number, print_status;
 258    BOOL_T list;
 259    LINE_T *next, *previous;
 260  };
 261  #define NO_LINE ((LINE_T *) NULL)
 262  
 263  struct TABLE_T
 264  {
 265    int num, level, nest, attribute;
 266    BOOL_T initialise_frame, initialise_anon, proc_ops;
 267    ADDR_T ap_increment;
 268    TABLE_T *previous, *outer;
 269    TAG_T *identifiers, *operators, *priority, *indicants, *labels, *anonymous;
 270    NODE_T *jump_to, *sequence;
 271  };
 272  #define NO_TABLE ((TABLE_T *) NULL)
 273  
 274  struct TAG_T
 275  {
 276    STATUS_MASK_T status, codex;
 277    TABLE_T *symbol_table;
 278    MOID_T *type;
 279    NODE_T *node, *unit;
 280    char *value;
 281    GPROC *procedure;
 282    BOOL_T scope_assigned, use, in_proc, a68_standenv_proc, loc_assigned, portable;
 283    int priority, heap, scope, size, youngest_environ, number;
 284    ADDR_T offset;
 285    TAG_T *next, *body;
 286  };
 287  #define NO_TAG ((TAG_T *) NULL)
 288  
 289  struct TOKEN_T
 290  {
 291    char *text;
 292    TOKEN_T *less, *more;
 293  };
 294  
 295  //! @struct A68_HANDLE
 296  //! @brief Handle for REF into the HEAP.
 297  //! @details
 298  //! A REF into the HEAP points at a HANDLE.
 299  //! The HANDLE points at the actual object in the HEAP.
 300  //! Garbage collection modifies HANDLEs, but not REFs.
 301  
 302  struct A68_HANDLE
 303  {
 304    STATUS_MASK_T status;
 305    BYTE_T *pointer;
 306    int size;
 307    MOID_T *type;
 308    A68_HANDLE *next, *previous;
 309  } ALIGNED;
 310  
 311  //! @struct A68_REF
 312  //! @brief Fat A68 pointer.
 313  
 314  struct A68_REF
 315  {
 316    STATUS_MASK_T status;
 317    ADDR_T offset;
 318    ADDR_T scope; // Dynamic scope.
 319    A68_HANDLE *handle;
 320  } ALIGNED;
 321  
 322  //! @struct A68_ARRAY
 323  //! @brief A68 array descriptor. 
 324  //! @details
 325  //! A row is an A68_REF to an A68_ARRAY.
 326  //! 
 327  //! An A68_ARRAY is followed by one A68_TUPLE per dimension.
 328  //! 
 329  //! @verbatim
 330  //! A68_REF row -> A68_ARRAY ----+   ARRAY: Description of row, ref to elements
 331  //!                A68_TUPLE 1   |   TUPLE: Bounds, one for every dimension
 332  //!                ...           |
 333  //!                A68_TUPLE dim |
 334  //!                ...           |
 335  //!                ...           |
 336  //!                Element 1 <---+   Element: Sequential row elements, in the heap
 337  //!                ...                        Not always contiguous - trims!
 338  //! @endverbatim
 339  
 340  struct A68_ARRAY
 341  {
 342    MOID_T *type;
 343    int dim, elem_size;
 344    ADDR_T slice_offset, field_offset;
 345    A68_REF array;
 346  } ALIGNED;
 347  
 348  struct A68_BITS
 349  {
 350    STATUS_MASK_T status;
 351    UNSIGNED_T value;
 352  } ALIGNED;
 353  
 354  struct A68_BYTES
 355  {
 356    STATUS_MASK_T status;
 357    char value[BYTES_WIDTH + 1];
 358  } ALIGNED;
 359  
 360  struct A68_CHANNEL
 361  {
 362    STATUS_MASK_T status;
 363    BOOL_T reset, set, get, put, bin, draw, compress;
 364  } ALIGNED;
 365  
 366  struct A68_BOOL
 367  {
 368    STATUS_MASK_T status;
 369    BOOL_T value;
 370  } ALIGNED;
 371  
 372  struct A68_CHAR
 373  {
 374    STATUS_MASK_T status;
 375    CHAR_T value;
 376  } ALIGNED;
 377  
 378  struct A68_COLLITEM
 379  {
 380    STATUS_MASK_T status;
 381    int count;
 382  };
 383  
 384  struct A68_INT
 385  {
 386    STATUS_MASK_T status;
 387    INT_T value;
 388  } ALIGNED;
 389  
 390  //! @struct A68_FORMAT
 391  //! @brief A68 format descriptor.
 392  //! @details
 393  //! A format behaves very much like a procedure.
 394  
 395  struct A68_FORMAT
 396  {
 397    STATUS_MASK_T status;
 398    NODE_T *body;      // Entry point in syntax tree.
 399    ADDR_T fp_environ; // Frame pointer to environ.
 400  } ALIGNED;
 401  
 402  struct A68_LONG_BYTES
 403  {
 404    STATUS_MASK_T status;
 405    char value[LONG_BYTES_WIDTH + 1];
 406  } ALIGNED;
 407  
 408  //! @struct A68_PROCEDURE
 409  //! @brief A68 procedure descriptor.
 410  
 411  struct A68_PROCEDURE
 412  {
 413    STATUS_MASK_T status;
 414    union
 415    {
 416      NODE_T *node;
 417      GPROC *procedure;
 418    } body;             // Entry point in syntax tree or precompiled C procedure.
 419    A68_HANDLE *locale; // Locale for partial parametrisation.
 420    MOID_T *type;
 421    ADDR_T fp_environ;  // Frame pointer to environ.
 422  } ALIGNED;
 423  
 424  typedef A68_REAL A68_COMPLEX[2];
 425  
 426  //! @struct A68_TUPLE
 427  //! @brief A tuple containing bounds etcetera for one dimension.
 428  
 429  struct A68_TUPLE
 430  {
 431    INT_T upper_bound, lower_bound, shift, span, k;
 432  } ALIGNED;
 433  
 434  struct A68_UNION
 435  {
 436    STATUS_MASK_T status;
 437    void *value;
 438  } ALIGNED;
 439  
 440  struct A68_SOUND
 441  {
 442    STATUS_MASK_T status;
 443    unt num_channels, sample_rate, bits_per_sample, num_samples, data_size;
 444    A68_REF data;
 445  };
 446  
 447  struct A68_FILE
 448  {
 449    STATUS_MASK_T status;
 450    A68_CHANNEL channel;
 451    A68_FORMAT format;
 452    A68_PROCEDURE file_end_mended, page_end_mended, line_end_mended, value_error_mended, open_error_mended, transput_error_mended, format_end_mended, format_error_mended;
 453    A68_REF identification, terminator, string;
 454    ADDR_T frame_pointer, stack_pointer;  // Since formats open frames
 455    BOOL_T read_mood, write_mood, char_mood, draw_mood, opened, open_exclusive, end_of_file, tmp_file;
 456    FILE_T fd;
 457    int transput_buffer, strpos, file_entry;
 458    struct
 459    {
 460      FILE *stream;
 461  #if defined (HAVE_GNU_PLOTUTILS)
 462      plPlotter *plotter;
 463      plPlotterParams *plotter_params;
 464  #endif
 465      BOOL_T device_made, device_opened;
 466      A68_REF device, page_size;
 467      int device_handle /* deprecated */ , window_x_size, window_y_size;
 468      REAL_T x_coord, y_coord, red, green, blue;
 469    }
 470    device;
 471  #if defined (HAVE_POSTGRESQL)
 472  # if ! defined (A68_OPTIMISE)
 473    PGconn *connection;
 474    PGresult *result;
 475  # endif
 476  #endif
 477  };
 478  
 479  #define M_BITS (MODE (BITS))
 480  #define M_BOOL (MODE (BOOL))
 481  #define M_BYTES (MODE (BYTES))
 482  #define M_CHANNEL (MODE (CHANNEL))
 483  #define M_CHAR (MODE (CHAR))
 484  #define M_COLLITEM (MODE (COLLITEM))
 485  #define M_COMPLEX (MODE (COMPLEX))
 486  #define M_COMPL (MODE (COMPL))
 487  #define M_C_STRING (MODE (C_STRING))
 488  #define M_ERROR (MODE (ERROR))
 489  #define M_FILE (MODE (FILE))
 490  #define M_FLEX_ROW_BOOL (MODE (FLEX_ROW_BOOL))
 491  #define M_FLEX_ROW_CHAR (MODE (FLEX_ROW_CHAR))
 492  #define M_FORMAT (MODE (FORMAT))
 493  #define M_HEX_NUMBER (MODE (HEX_NUMBER))
 494  #define M_HIP (MODE (HIP))
 495  #define M_INT (MODE (INT))
 496  #define M_LONG_BITS (MODE (LONG_BITS))
 497  #define M_LONG_BYTES (MODE (LONG_BYTES))
 498  #define M_LONG_COMPLEX (MODE (LONG_COMPLEX))
 499  #define M_LONG_COMPL (MODE (LONG_COMPL))
 500  #define M_LONG_INT (MODE (LONG_INT))
 501  #define M_LONG_LONG_BITS (MODE (LONG_LONG_BITS))
 502  #define M_LONG_LONG_COMPLEX (MODE (LONG_LONG_COMPLEX))
 503  #define M_LONG_LONG_COMPL (MODE (LONG_LONG_COMPL))
 504  #define M_LONG_LONG_INT (MODE (LONG_LONG_INT))
 505  #define M_LONG_LONG_REAL (MODE (LONG_LONG_REAL))
 506  #define M_LONG_REAL (MODE (LONG_REAL))
 507  #define M_NIL (MODE (NIL))
 508  #define M_NUMBER (MODE (NUMBER))
 509  #define M_PIPE (MODE (PIPE))
 510  #define M_PROC_LONG_REAL_LONG_REAL (MODE (PROC_LONG_REAL_LONG_REAL))
 511  #define M_PROC_REAL_REAL (MODE (PROC_REAL_REAL))
 512  #define M_PROC_REF_FILE_BOOL (MODE (PROC_REF_FILE_BOOL))
 513  #define M_PROC_REF_FILE_VOID (MODE (PROC_REF_FILE_VOID))
 514  #define M_PROC_ROW_CHAR (MODE (PROC_ROW_CHAR))
 515  #define M_PROC_STRING (MODE (PROC_STRING))
 516  #define M_PROC_VOID (MODE (PROC_VOID))
 517  #define M_REAL (MODE (REAL))
 518  #define M_REF_BITS (MODE (REF_BITS))
 519  #define M_REF_BOOL (MODE (REF_BOOL))
 520  #define M_REF_BYTES (MODE (REF_BYTES))
 521  #define M_REF_CHAR (MODE (REF_CHAR))
 522  #define M_REF_COMPLEX (MODE (REF_COMPLEX))
 523  #define M_REF_COMPL (MODE (REF_COMPL))
 524  #define M_REF_FILE (MODE (REF_FILE))
 525  #define M_REF_FORMAT (MODE (REF_FORMAT))
 526  #define M_REF_INT (MODE (REF_INT))
 527  #define M_REF_LONG_BITS (MODE (REF_LONG_BITS))
 528  #define M_REF_LONG_BYTES (MODE (REF_LONG_BYTES))
 529  #define M_REF_LONG_COMPLEX (MODE (REF_LONG_COMPLEX))
 530  #define M_REF_LONG_COMPL (MODE (REF_LONG_COMPL))
 531  #define M_REF_LONG_INT (MODE (REF_LONG_INT))
 532  #define M_REF_LONG_LONG_COMPLEX (MODE (REF_LONG_LONG_COMPLEX))
 533  #define M_REF_LONG_LONG_COMPL (MODE (REF_LONG_LONG_COMPL))
 534  #define M_REF_LONG_LONG_INT (MODE (REF_LONG_LONG_INT))
 535  #define M_REF_LONG_LONG_REAL (MODE (REF_LONG_LONG_REAL))
 536  #define M_REF_LONG_REAL (MODE (REF_LONG_REAL))
 537  #define M_REF_PIPE (MODE (REF_PIPE))
 538  #define M_REF_REAL (MODE (REF_REAL))
 539  #define M_REF_REF_FILE (MODE (REF_REF_FILE))
 540  #define M_REF_ROW_CHAR (MODE (REF_ROW_CHAR))
 541  #define M_REF_ROW_COMPLEX (MODE (REF_ROW_COMPLEX))
 542  #define M_REF_ROW_INT (MODE (REF_ROW_INT))
 543  #define M_REF_ROW_REAL (MODE (REF_ROW_REAL))
 544  #define M_REF_ROW_ROW_COMPLEX (MODE (REF_ROW_ROW_COMPLEX))
 545  #define M_REF_ROW_ROW_REAL (MODE (REF_ROW_ROW_REAL))
 546  #define M_REF_SOUND (MODE (REF_SOUND))
 547  #define M_REF_STRING (MODE (REF_STRING))
 548  #define M_ROW_BITS (MODE (ROW_BITS))
 549  #define M_ROW_BOOL (MODE (ROW_BOOL))
 550  #define M_ROW_CHAR (MODE (ROW_CHAR))
 551  #define M_ROW_COMPLEX (MODE (ROW_COMPLEX))
 552  #define M_ROW_INT (MODE (ROW_INT))
 553  #define M_ROW_LONG_BITS (MODE (ROW_LONG_BITS))
 554  #define M_ROW_LONG_LONG_BITS (MODE (ROW_LONG_LONG_BITS))
 555  #define M_ROW_REAL (MODE (ROW_REAL))
 556  #define M_ROW_ROW_CHAR (MODE (ROW_ROW_CHAR))
 557  #define M_ROW_ROW_COMPLEX (MODE (ROW_ROW_COMPLEX))
 558  #define M_ROW_ROW_REAL (MODE (ROW_ROW_REAL))
 559  #define M_ROW_SIMPLIN (MODE (ROW_SIMPLIN))
 560  #define M_ROW_SIMPLOUT (MODE (ROW_SIMPLOUT))
 561  #define M_ROWS (MODE (ROWS))
 562  #define M_ROW_STRING (MODE (ROW_STRING))
 563  #define M_SEMA (MODE (SEMA))
 564  #define M_SIMPLIN (MODE (SIMPLIN))
 565  #define M_SIMPLOUT (MODE (SIMPLOUT))
 566  #define M_SOUND_DATA (MODE (SOUND_DATA))
 567  #define M_SOUND (MODE (SOUND))
 568  #define M_STRING (MODE (STRING))
 569  #define M_UNDEFINED (MODE (UNDEFINED))
 570  #define M_VACUUM (MODE (VACUUM))
 571  #define M_VOID (MODE (VOID))
 572  
 573  #endif