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