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-2025 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 //! 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, 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, digits, size_compl, digits_compl;
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 size;
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, size, youngest_environ, number;
293 MOID_T *type;
294 NODE_T *node, *unit;
295 TABLE_T *symbol_table;
296 TAG_T *next, *body;
297 };
298 #define NO_TAG ((TAG_T *) NULL)
299
300 struct TOKEN_T
301 {
302 char *text;
303 TOKEN_T *less, *more;
304 };
305
306 //! @struct A68G_HANDLE
307 //! @brief Handle for REF into the HEAP.
308 //! @details
309 //! A REF into the HEAP points at a HANDLE.
310 //! The HANDLE points at the actual object in the HEAP.
311 //! Garbage collection modifies HANDLEs, but not REFs.
312
313 struct A68G_HANDLE
314 {
315 STATUS_MASK_T status;
316 A68G_HANDLE *next, *previous;
317 BYTE_T *pointer;
318 MOID_T *type;
319 size_t size;
320 } ALIGNED;
321
322 static const A68G_HANDLE nil_handle = {INIT_MASK, NO_HANDLE, NO_HANDLE, NO_BYTE, NO_MOID, 0};
323
324 //! @struct A68G_REF
325 //! @brief Fat A68 pointer.
326 //! Records dynamic scope.
327
328 struct A68G_REF
329 {
330 STATUS_MASK_T status;
331 ADDR_T offset, scope;
332 A68G_HANDLE *handle;
333 } ALIGNED;
334
335 static const A68G_REF nil_ref = {(STATUS_MASK_T) (INIT_MASK | NIL_MASK), 0, 0, NO_HANDLE};
336
337 //! @struct A68G_ARRAY
338 //! @brief A68 array descriptor.
339 //! @details
340 //! A row is an A68G_REF to an A68G_ARRAY.
341 //!
342 //! An A68G_ARRAY is followed by one A68G_TUPLE per dimension.
343 //!
344 //! @verbatim
345 //! A68G_REF row -> A68G_ARRAY ----+ ARRAY: Description of row, ref to elements.
346 //! A68G_TUPLE 1 | TUPLE: Bounds, one for every dimension.
347 //! ... |
348 //! A68G_TUPLE dim |
349 //! ... |
350 //! ... |
351 //! Element 1 <---+ Sequential row elements in the heap.
352 //! ...
353 //! Element n
354 //! @endverbatim
355
356 struct A68G_ARRAY
357 {
358 A68G_REF array;
359 ADDR_T slice_offset, field_offset;
360 int dim, elem_size;
361 MOID_T *type;
362 } ALIGNED;
363
364 struct A68G_BITS
365 {
366 STATUS_MASK_T status;
367 UNSIGNED_T value;
368 } ALIGNED;
369
370 struct A68G_BYTES
371 {
372 STATUS_MASK_T status;
373 char value[A68G_BYTES_WIDTH + 1];
374 } ALIGNED;
375
376 struct A68G_CHANNEL
377 {
378 STATUS_MASK_T status;
379 BOOL_T reset, set, get, put, bin, draw, compress;
380 } ALIGNED;
381
382 struct A68G_BOOL
383 {
384 STATUS_MASK_T status;
385 BOOL_T value;
386 } ALIGNED;
387
388 struct A68G_CHAR
389 {
390 STATUS_MASK_T status;
391 CHAR_T value;
392 } ALIGNED;
393
394 struct A68G_COLLITEM
395 {
396 STATUS_MASK_T status;
397 int count;
398 };
399
400 struct A68G_INT
401 {
402 STATUS_MASK_T status;
403 INT_T value;
404 } ALIGNED;
405
406 //! @struct A68G_FORMAT
407 //! @brief A68 format descriptor.
408 //! @details
409 //! A format behaves very much like a procedure.
410
411 struct A68G_FORMAT
412 {
413 STATUS_MASK_T status;
414 ADDR_T fp_environ; // Frame pointer to environ.
415 NODE_T *body; // Entry point in syntax tree.
416 } ALIGNED;
417
418 static const A68G_FORMAT nil_format = {INIT_MASK, 0, NULL};
419
420 struct A68G_LONG_BYTES
421 {
422 STATUS_MASK_T status;
423 char value[A68G_LONG_BYTES_WIDTH + 1];
424 } ALIGNED;
425
426 //! @struct A68G_PROCEDURE
427 //! @brief A68 procedure descriptor.
428
429 struct A68G_PROCEDURE
430 {
431 STATUS_MASK_T status;
432 A68G_HANDLE *locale; // Locale for partial parametrisation.
433 ADDR_T fp_environ; // Frame pointer to environ.
434 MOID_T *type;
435 union
436 {
437 NODE_T *node;
438 GPROC *procedure;
439 } body; // Entry point in syntax tree or precompiled C procedure.
440 } ALIGNED;
441
442 typedef A68G_REAL A68G_COMPLEX[2];
443
444 //! @struct A68G_TUPLE
445 //! @brief A tuple containing bounds etcetera for one dimension.
446
447 struct A68G_TUPLE
448 {
449 INT_T upper_bound, lower_bound, shift, span, k;
450 } ALIGNED;
451
452 struct A68G_UNION
453 {
454 STATUS_MASK_T status;
455 void *value;
456 } ALIGNED;
457
458 struct A68G_SOUND
459 {
460 STATUS_MASK_T status;
461 INT_T num_channels, sample_rate, bits_per_sample, num_samples, data_size;
462 A68G_REF data;
463 };
464
465 struct A68G_FILE
466 {
467 STATUS_MASK_T status;
468 A68G_CHANNEL channel;
469 A68G_FORMAT format;
470 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;
471 A68G_REF identification, terminator, string;
472 ADDR_T frame_pointer, stack_pointer; // Since formats open frames
473 BOOL_T read_mood, write_mood, char_mood, draw_mood, opened, open_exclusive, end_of_file, tmp_file;
474 FILE_T fd;
475 int transput_buffer, strpos, file_entry;
476 struct
477 {
478 FILE *stream;
479 #if defined (HAVE_GNU_PLOTUTILS)
480 plPlotter *plotter;
481 plPlotterParams *plotter_params;
482 #endif
483 BOOL_T device_made, device_opened;
484 A68G_REF device, page_size;
485 int device_handle /* deprecated */ , window_x_size, window_y_size;
486 REAL_T x_coord, y_coord, red, green, blue;
487 }
488 device;
489 #if defined (HAVE_POSTGRESQL)
490 # if ! defined (A68G_OPTIMISE)
491 PGconn *connection;
492 PGresult *result;
493 # endif
494 #endif
495 };
496
497 #define M_BITS (MODE (BITS))
498 #define M_BOOL (MODE (BOOL))
499 #define M_BYTES (MODE (BYTES))
500 #define M_CHANNEL (MODE (CHANNEL))
501 #define M_CHAR (MODE (CHAR))
502 #define M_COLLITEM (MODE (COLLITEM))
503 #define M_COMPLEX (MODE (COMPLEX))
504 #define M_COMPL (MODE (COMPL))
505 #define M_C_STRING (MODE (C_STRING))
506 #define M_ERROR (MODE (ERROR))
507 #define M_FILE (MODE (FILE))
508 #define M_FLEX_ROW_BOOL (MODE (FLEX_ROW_BOOL))
509 #define M_FLEX_ROW_CHAR (MODE (FLEX_ROW_CHAR))
510 #define M_FORMAT (MODE (FORMAT))
511 #define M_HEX_NUMBER (MODE (HEX_NUMBER))
512 #define M_HIP (MODE (HIP))
513 #define M_INT (MODE (INT))
514 #define M_LONG_BITS (MODE (LONG_BITS))
515 #define M_LONG_BYTES (MODE (LONG_BYTES))
516 #define M_LONG_COMPLEX (MODE (LONG_COMPLEX))
517 #define M_LONG_COMPL (MODE (LONG_COMPL))
518 #define M_LONG_INT (MODE (LONG_INT))
519 #define M_LONG_LONG_BITS (MODE (LONG_LONG_BITS))
520 #define M_LONG_LONG_COMPLEX (MODE (LONG_LONG_COMPLEX))
521 #define M_LONG_LONG_COMPL (MODE (LONG_LONG_COMPL))
522 #define M_LONG_LONG_INT (MODE (LONG_LONG_INT))
523 #define M_LONG_LONG_REAL (MODE (LONG_LONG_REAL))
524 #define M_LONG_REAL (MODE (LONG_REAL))
525 #define M_NIL (MODE (NIL))
526 #define M_NUMBER (MODE (NUMBER))
527 #define M_PIPE (MODE (PIPE))
528 #define M_PROC_LONG_REAL_LONG_REAL (MODE (PROC_LONG_REAL_LONG_REAL))
529 #define M_PROC_REAL_REAL (MODE (PROC_REAL_REAL))
530 #define M_PROC_REF_FILE_BOOL (MODE (PROC_REF_FILE_BOOL))
531 #define M_PROC_REF_FILE_VOID (MODE (PROC_REF_FILE_VOID))
532 #define M_PROC_ROW_CHAR (MODE (PROC_ROW_CHAR))
533 #define M_PROC_STRING (MODE (PROC_STRING))
534 #define M_PROC_VOID (MODE (PROC_VOID))
535 #define M_REAL (MODE (REAL))
536 #define M_REF_BITS (MODE (REF_BITS))
537 #define M_REF_BOOL (MODE (REF_BOOL))
538 #define M_REF_BYTES (MODE (REF_BYTES))
539 #define M_REF_CHAR (MODE (REF_CHAR))
540 #define M_REF_COMPLEX (MODE (REF_COMPLEX))
541 #define M_REF_COMPL (MODE (REF_COMPL))
542 #define M_REF_FILE (MODE (REF_FILE))
543 #define M_REF_FORMAT (MODE (REF_FORMAT))
544 #define M_REF_INT (MODE (REF_INT))
545 #define M_REF_LONG_BITS (MODE (REF_LONG_BITS))
546 #define M_REF_LONG_BYTES (MODE (REF_LONG_BYTES))
547 #define M_REF_LONG_COMPLEX (MODE (REF_LONG_COMPLEX))
548 #define M_REF_LONG_COMPL (MODE (REF_LONG_COMPL))
549 #define M_REF_LONG_INT (MODE (REF_LONG_INT))
550 #define M_REF_LONG_LONG_BITS (MODE (REF_LONG_LONG_BITS))
551 #define M_REF_LONG_LONG_COMPLEX (MODE (REF_LONG_LONG_COMPLEX))
552 #define M_REF_LONG_LONG_COMPL (MODE (REF_LONG_LONG_COMPL))
553 #define M_REF_LONG_LONG_INT (MODE (REF_LONG_LONG_INT))
554 #define M_REF_LONG_LONG_REAL (MODE (REF_LONG_LONG_REAL))
555 #define M_REF_LONG_REAL (MODE (REF_LONG_REAL))
556 #define M_REF_PIPE (MODE (REF_PIPE))
557 #define M_REF_REAL (MODE (REF_REAL))
558 #define M_REF_REF_FILE (MODE (REF_REF_FILE))
559 #define M_REF_ROW_CHAR (MODE (REF_ROW_CHAR))
560 #define M_REF_ROW_COMPLEX (MODE (REF_ROW_COMPLEX))
561 #define M_REF_ROW_INT (MODE (REF_ROW_INT))
562 #define M_REF_ROW_REAL (MODE (REF_ROW_REAL))
563 #define M_REF_ROW_ROW_COMPLEX (MODE (REF_ROW_ROW_COMPLEX))
564 #define M_REF_ROW_ROW_REAL (MODE (REF_ROW_ROW_REAL))
565 #define M_REF_SOUND (MODE (REF_SOUND))
566 #define M_REF_STRING (MODE (REF_STRING))
567 #define M_ROW_BITS (MODE (ROW_BITS))
568 #define M_ROW_BOOL (MODE (ROW_BOOL))
569 #define M_ROW_CHAR (MODE (ROW_CHAR))
570 #define M_ROW_COMPLEX (MODE (ROW_COMPLEX))
571 #define M_ROW_INT (MODE (ROW_INT))
572 #define M_ROW_LONG_BITS (MODE (ROW_LONG_BITS))
573 #define M_ROW_LONG_LONG_BITS (MODE (ROW_LONG_LONG_BITS))
574 #define M_ROW_REAL (MODE (ROW_REAL))
575 #define M_ROW_ROW_CHAR (MODE (ROW_ROW_CHAR))
576 #define M_ROW_ROW_COMPLEX (MODE (ROW_ROW_COMPLEX))
577 #define M_ROW_ROW_REAL (MODE (ROW_ROW_REAL))
578 #define M_ROW_SIMPLIN (MODE (ROW_SIMPLIN))
579 #define M_ROW_SIMPLOUT (MODE (ROW_SIMPLOUT))
580 #define M_ROWS (MODE (ROWS))
581 #define M_ROW_STRING (MODE (ROW_STRING))
582 #define M_SEMA (MODE (SEMA))
583 #define M_SIMPLIN (MODE (SIMPLIN))
584 #define M_SIMPLOUT (MODE (SIMPLOUT))
585 #define M_SOUND_DATA (MODE (SOUND_DATA))
586 #define M_SOUND (MODE (SOUND))
587 #define M_STRING (MODE (STRING))
588 #define M_UNDEFINED (MODE (UNDEFINED))
589 #define M_VACUUM (MODE (VACUUM))
590 #define M_VOID (MODE (VOID))
591
592 #endif
© 2002-2025 J.M. van der Veer (jmvdveer@xs4all.nl)
|