a68g-types.h

You can download the current version of Algol 68 Genie and its documentation here.

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