1 
2 /*
3 #    Sfront, a SAOL to C translator
4 #    This file: Include file for shared variables
5 #
6 # Copyright (c) 1999-2006, Regents of the University of California
7 # All rights reserved.
8 #
9 # Redistribution and use in source and binary forms, with or without
10 # modification, are permitted provided that the following conditions are
11 # met:
12 #
13 #  Redistributions of source code must retain the above copyright
14 #  notice, this list of conditions and the following disclaimer.
15 #
16 #  Redistributions in binary form must reproduce the above copyright
17 #  notice, this list of conditions and the following disclaimer in the
18 #  documentation and/or other materials provided with the distribution.
19 #
20 #  Neither the name of the University of California, Berkeley nor the
21 #  names of its contributors may be used to endorse or promote products
22 #  derived from this software without specific prior written permission.
23 #
24 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 #
36 #    Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu
37 */
38 
39 
40 #ifndef _SFRONT_TREE_H
41 #define _SFRONT_TREE_H 1
42 
43 #define IDSTRING "0.99 08/30/11"
44 
45 #include <stdio.h>
46 #include <math.h>
47 #include <string.h>
48 #include <ctype.h>
49 #include <stdlib.h>
50 #include <float.h>
51 #include <limits.h>
52 
53 #include "csrclib.h"
54 #include "csyslib.h"
55 #include "asyslib.h"
56 #include "psyslib.h"
57 #include "nsyslib.h"
58 
59 extern void * alloca(size_t);
60 
61 #define S_RESERVED0    0x00
62 #define S_AOPCODE      0x01
63 #define S_ASIG         0x02
64 #define S_ELSE         0x03
65 #define S_EXPORTS      0x04
66 #define S_EXTEND       0x05
67 #define S_GLOBAL       0x06
68 #define S_IF           0x07
69 #define S_IMPORTS      0x08
70 #define S_INCHANNELS   0x09
71 #define S_INSTR        0x0A
72 #define S_IOPCODE      0x0B
73 #define S_IVAR         0x0C
74 #define S_KOPCODE      0x0D
75 #define S_KRATE        0x0E
76 #define S_KSIG         0x0F
77 
78 #define S_MAP          0x10
79 #define S_OPARRAY      0x11
80 #define S_OPCODE       0x12
81 #define S_OUTBUS       0x13
82 #define S_OUTCHANNELS  0x14
83 #define S_OUTPUT       0x15
84 #define S_RETURN       0x16
85 #define S_ROUTE        0x17
86 #define S_SEND         0x18
87 #define S_SEQUENCE     0x19
88 #define S_SASBF        0x1A
89 #define S_SPATIALIZE   0x1B
90 #define S_SRATE        0x1C
91 #define S_TABLE        0x1D
92 #define S_TABLEMAP     0x1E
93 #define S_TEMPLATE     0x1F
94 
95 #define S_TURNOFF      0x20
96 #define S_WHILE        0x21
97 #define S_WITH         0x22
98 #define S_XSIG         0x23
99 #define S_INTERP       0x24
100 
101 #define S_PRESET       0x25
102 #define S_RESERVED1    0x26
103 #define S_RESERVED2    0x27
104 #define S_RESERVED3    0x28
105 #define S_RESERVED4    0x29
106 #define S_RESERVED5    0x2A
107 #define S_RESERVED6    0x2B
108 #define S_RESERVED7    0x2C
109 #define S_RESERVED8    0x2D
110 #define S_RESERVED9    0x2E
111 #define S_RESERVED10   0x2F
112 
113 #define S_K_RATE       0x30
114 #define S_S_RATE       0x31
115 #define S_INCHAN       0x32
116 #define S_OUTCHAN      0x33
117 #define S_TIME         0x34
118 #define S_DUR          0x35
119 #define S_MIDICTRL     0x36
120 #define S_MIDITOUCH    0x37
121 #define S_MIDIBEND     0x38
122 #define S_INPUT        0x39
123 #define S_INGROUP      0x3A
124 #define S_RELEASED     0x3B
125 #define S_CPULOAD      0x3C
126 #define S_POSITION     0x3D
127 #define S_DIRECTION    0x3E
128 #define S_LISTENERPOSITION 0x3F
129 
130 #define S_LISTENERDIRECTION 0x40
131 #define S_MINFRONT     0x41
132 #define S_MINBACK      0x42
133 #define S_MAXFRONT     0x43
134 #define S_MAXBACK      0x44
135 #define S_PARAMS       0x45
136 #define S_ITIME        0x46
137 #define S_RESERVED11   0x47
138 #define S_CHANNEL      0x48
139 #define S_INPUT_BUS    0x49
140 #define S_OUTPUT_BUS   0x4A
141 #define S_STARTUP      0x4B
142 #define S_RESERVED15   0x4C
143 #define S_RESERVED16   0x4D
144 #define S_RESERVED17   0x4E
145 #define S_RESERVED18   0x4F
146 
147 #define S_AND          0x50
148 #define S_OR           0x51
149 #define S_GEQ          0x52
150 #define S_LEQ          0x53
151 #define S_NEQ          0x54
152 #define S_EQEQ         0x55
153 #define S_MINUS        0x56
154 #define S_STAR         0x57
155 #define S_SLASH        0x58
156 #define S_PLUS         0x59
157 #define S_GT           0x5A
158 #define S_LT           0x5B
159 #define S_Q            0x5C
160 #define S_COL          0x5D
161 #define S_LP           0x5E
162 #define S_RP           0x5F
163 
164 #define S_LC           0x60
165 #define S_RC           0x61
166 #define S_LB           0x62
167 #define S_RB           0x63
168 #define S_SEM          0x64
169 #define S_COM          0x65
170 #define S_EQ           0x66
171 #define S_NOT          0x67
172 #define S_RESERVED19   0x68
173 #define S_RESERVED20   0x69
174 #define S_RESERVED21   0x6A
175 #define S_RESERVED22   0x6B
176 #define S_RESERVED23   0x6C
177 #define S_RESERVED24   0x6D
178 #define S_RESERVED25   0x6E
179 #define S_SAMPLE       0x6F
180 
181 #define S_DATA         0x70
182 #define S_RANDOM       0x71
183 #define S_STEP         0x72
184 #define S_LINESEG      0x73
185 #define S_EXPSEG       0x74
186 #define S_CUBICSEG     0x75
187 #define S_POLYNOMIAL   0x76
188 #define S_SPLINE       0x77
189 #define S_WINDOW       0x78
190 #define S_HARM         0x79
191 #define S_HARM_PHASE   0x7A
192 #define S_PERIODIC     0x7B
193 #define S_BUZZWAVE     0x7C
194 #define S_CONCAT       0x7D
195 #define S_EMPTY        0x7E
196 #define S_DESTROY      0x7F
197 
198 #define S_INT          0x80
199 #define S_FRAC         0x81
200 #define S_DBAMP        0x82
201 #define S_AMPDB        0x83
202 #define S_ABS          0x84
203 #define S_EXP          0x85
204 #define S_LOG          0x86
205 #define S_SQRT         0x87
206 #define S_SIN          0x88
207 #define S_COS          0x89
208 #define S_ATAN         0x8A
209 #define S_POW          0x8B
210 #define S_LOG10        0x8C
211 #define S_ASIN         0x8D
212 #define S_ACOS         0x8E
213 #define S_FLOOR        0x8F
214 
215 #define S_CEIL            0x90
216 #define S_MIN             0x91
217 #define S_MAX             0x92
218 #define S_PCHOCT          0x93
219 #define S_OCTPCH          0x94
220 #define S_CPSPCH          0x95
221 #define S_PCHCPS          0x96
222 #define S_CPSOCT          0x97
223 #define S_OCTCPS          0x98
224 #define S_PCHMIDI         0x99
225 #define S_MIDIPCH         0x9A
226 #define S_OCTMIDI         0x9B
227 #define S_MIDIOCT         0x9C
228 #define S_CPSMIDI         0x9D
229 #define S_MIDICPS         0x9E
230 #define S_SGN             0x9F
231 
232 #define S_FTLEN           0xA0
233 #define S_FTLOOP          0xA1
234 #define S_FTLOOPEND       0xA2
235 #define S_FTSETLOOP       0xA3
236 #define S_FTSETEND        0xA4
237 #define S_FTBASECPS       0xA5
238 #define S_FTSETBASE       0xA6
239 #define S_TABLEREAD       0xA7
240 #define S_TABLEWRITE      0xA8
241 #define S_OSCIL           0xA9
242 #define S_LOSCIL          0xAA
243 #define S_DOSCIL          0xAB
244 #define S_KOSCIL          0xAC
245 #define S_KLINE           0xAD
246 #define S_ALINE           0xAE
247 #define S_SBLOCK          0xAF
248 
249 #define S_KEXPON          0xB0
250 #define S_AEXPON          0xB1
251 #define S_KPHASOR         0xB2
252 #define S_APHASOR         0xB3
253 #define S_PLUCK           0xB4
254 #define S_BUZZOPCODE      0xB5
255 #define S_GRAIN           0xB6
256 #define S_IRAND           0xB7
257 #define S_KRAND           0xB8
258 #define S_ARAND           0xB9
259 #define S_ILINRAND        0xBA
260 #define S_KLINRAND        0xBB
261 #define S_ALINRAND        0xBC
262 #define S_IEXPRAND        0xBD
263 #define S_KEXPRAND        0xBE
264 #define S_AEXPRAND        0xBF
265 
266 #define S_KPOISSONRAND    0xC0
267 #define S_APOISSONRAND    0xC1
268 #define S_IGAUSSRAND      0xC2
269 #define S_KGAUSSRAND      0xC3
270 #define S_AGAUSSRAND      0xC4
271 #define S_PORT            0xC5
272 #define S_HIPASS          0xC6
273 #define S_LOPASS          0xC7
274 #define S_BANDPASS        0xC8
275 #define S_BANDSTOP        0xC9
276 #define S_FIR             0xCA
277 #define S_IIR             0xCB
278 #define S_FIRT            0xCC
279 #define S_IIRT            0xCD
280 #define S_BIQUAD          0xCE
281 #define S_FFT             0xCF
282 
283 #define S_IFFT            0xD0
284 #define S_RMS             0xD1
285 #define S_GAIN            0xD2
286 #define S_BALANCE         0xD3
287 #define S_DECIMATE        0xD4
288 #define S_UPSAMP          0xD5
289 #define S_DOWNSAMP        0xD6
290 #define S_SAMPHOLD        0xD7
291 #define S_DELAY           0xD8
292 #define S_DELAY1          0xD9
293 #define S_FRACDELAY       0xDA
294 #define S_COMB            0xDB
295 #define S_ALLPASS         0xDC
296 #define S_CHORUS          0xDD
297 #define S_FLANGE          0xDE
298 #define S_REVERB          0xDF
299 
300 #define S_COMPRESSOR      0xE0
301 #define S_GETTUNE         0xE1
302 #define S_SETTUNE         0xE2
303 #define S_FTSR            0xE3
304 #define S_FTSETSR         0xE4
305 #define S_GETTEMPO        0xE5
306 #define S_SETTEMPO        0xE6
307 #define S_FX_SPEEDC       0xE7
308 #define S_SPEEDT          0xE8
309 #define S_RESERVED26      0xE9
310 #define S_RESERVED27      0xEA
311 #define S_RESERVED28      0xEB
312 #define S_RESERVED29      0xEC
313 #define S_RESERVED30      0xED
314 #define S_RESERVED31      0xEE
315 #define S_RESERVED32      0xEF
316 
317 #define S_IDENT        0xF0
318 #define S_NUMBER       0xF1
319 #define S_INTGR        0xF2
320 #define S_STRCONST     0xF3
321 #define S_BYTE         0xF4
322 #define S_FREE1        0xF5
323 #define S_FREE2        0xF6
324 #define S_FREE3        0xF7
325 #define S_FREE4        0xF8
326 #define S_FREE5        0xF9
327 #define S_FREE6        0xFA
328 #define S_FREE7        0xFB
329 #define S_FREE8        0xFC
330 #define S_FREE9        0xFD
331 #define S_FREE10       0xFE
332 #define S_EOO          0xFF
333 
334 #define S_BADCHAR      0x0100
335 #define S_BADNUMBER    0x0101
336 #define S_INSTRDECL    0x0102
337 #define S_OPCODEDECL   0x0103
338 #define S_GLOBALDECL   0x0104
339 #define S_TEMPLATEDECL 0x0105
340 #define S_IDENTLIST    0x0106
341 #define S_MIDITAG      0x0107
342 #define S_VARDECLS     0x0108
343 #define S_BLOCK        0x0109
344 #define S_NAME         0x010A
345 #define S_VARDECL      0x010B
346 #define S_NAMELIST     0x010C
347 #define S_TAGLIST      0x010D
348 #define S_LVALUE       0x010E
349 #define S_EXPR         0x010F
350 #define S_STATEMENT    0x0110
351 #define S_FLOATCAST    0x0111
352 #define S_GLOBALBLOCK  0x0112
353 #define S_ROUTEDEF     0x0113
354 #define S_SENDDEF      0x0114
355 #define S_SEQDEF       0x0115
356 #define S_INSTANCE     0x0116
357 #define S_BUS          0x0117
358 #define S_EXPRLIST     0x0118
359 #define S_RTDEF        0x0119
360 #define S_UNION        0x011A
361 #define S_UNUSED2      0x011B
362 #define S_CONTROL      0x011C
363 #define S_LCONTROL     0x011D
364 #define S_LINSTR       0x011E
365 #define S_TEMPO        0x011F
366 #define S_END          0x0120
367 #define S_NEWLINE      0x0121
368 #define S_EOF          0x0122
369 #define S_PARAMDECL    0x0123
370 #define S_PARAMLIST    0x0124
371 #define S_OPVARDECL    0x0125
372 #define S_OPVARDECLS   0x0126
373 #define S_OPCALL       0x0127
374 #define S_OPARRAYCALL  0x0128
375 #define S_OPARRAYDECL  0x0129
376 #define S_EXPRSTRLIST  0x012A
377 #define S_INTLIST      0x012B
378 #define S_SOPCODE      0x012C
379 #define S_TMAPIDX      0x012D
380 #define S_PRINTF       0x012E
381 #define S_SASLFILE     0x012F
382 #define S_SAOLFILE     0x0130
383 #define S_OUTBUSNAME   0x0131
384 #define S_INSTRNAME    0x0132
385 #define S_FUTURE       0x0133
386 
387 
388 /* codes returned for adding to symbol table */
389 
390 #define INSTALLED 0
391 #define DUPLICATE 1
392 #define DELETED 2
393 #define NOTPRESENT 3
394 
395 #define SYSERROR1 -1
396 
397 /* types of rates */
398 
399 #define UNKNOWN   0
400 #define IRATETYPE 1
401 #define KRATETYPE 2
402 #define ARATETYPE 3
403 #define XRATETYPE 4
404 
405 /* types of widths */
406 
407 /* #define UNKNOWN   0 */
408 #define INCHANNELSWIDTH -1
409 #define OUTCHANNELSWIDTH -2
410 #define CHANNELSWIDTH -3
411 #define NOTDEFINED -4
412 
413 /* types of volatility */
414 #define VARIABLE 0
415 #define CONSTANT 1
416 
417 /* types of expressions */
418 #define ASFLOAT 0
419 #define ASINT   1
420 
421 /* types of variables */
422 #define SCALARTYPE 1
423 #define VECTORTYPE 2
424 #define TABLETYPE  3
425 #define TMAPTYPE   4
426 
427 /* kinds of symbols */
428 #define K_NORMAL 0
429 #define K_PFIELD 1
430 #define K_IMPORT 2
431 #define K_EXPORT 3
432 #define K_IMPORTEXPORT 4
433 #define K_INSTRNAME 5
434 #define K_BUSNAME 6
435 #define K_OPCODENAME 7
436 #define K_INTERNAL   8
437 #define K_PRESET 9
438 
439 /* states for typechecking */
440 
441 #define CHECKINPROGRESS 0
442 #define CHECKDONE 1
443 
444 /* printing options */
445 
446 #define PRINTIPASS 1
447 #define PRINTKPASS 2
448 #define PRINTAPASS 3
449 #define PRINTTOKENS 4
450 
451 /* types of opcode call printouts */
452 
453 #define SAMERATETYPE 0
454 #define SLOWRATETYPE 1
455 
456 /* actions to take if wavegenerator SIZE = -1 */
457 
458 #define GENILLEGAL 0
459 #define GENNUMDATA 1
460 #define GENLARGESTX 2
461 #define GENBUZZ 3
462 #define GENCONCAT 4
463 #define GENSTEP 5
464 #define GENPAIRS 6
465 #define GENCUBIC 7
466 #define GENSPLINE 8
467 
468 /* refer-count table changing options */
469 
470 #define TPARAMCHANGE 0
471 #define TVALCHANGE   1
472 
473 /* types of IF-ELSE sections */
474 
475 #define IRATESECTION 1
476 #define KRATESECTION 2
477 #define BOTHSECTIONS 3
478 
479 /* spatialize */
480 
481 #define HEADSIZE   0.2F /* size of head, in feet */
482 #define SPEEDSOUND 1087.49F
483 #define DZERO 1.0F
484 #define ROOMDELAY 0.020F
485 #define ROOMGAIN 0.177828F
486 
487 /* fft and ifft */
488 
489 #define FFTTABSIZE 14
490 
491 /* sample-rate interpolation */
492 
493 #define INTERP_LINEAR  0
494 #define INTERP_SINC    1
495 
496 #define PI   (3.14159265358979323846)
497 
498 /* print buffer size */
499 
500 #define ZSIZE        8196
501 
502 /* MIDI defines */
503 
504 #define MCHAN 16
505 #define MNOTE 128
506 
507 #define MIDIMASKCOM  0xF0
508 #define MIDIMASKCHAN 0x0F
509 
510 #define MIDINOTEOFF  0x80
511 #define MIDINOTEON   0x90
512 #define MIDIKEYTOUCH 0xA0
513 #define MIDICONTROL  0xB0
514 #define MIDIPATCH    0xC0
515 #define MIDICHTOUCH  0xD0
516 #define MIDIWHEEL    0xE0
517 #define MIDISYSTEM   0xF0
518 #define MIDISYSEX0   0xF0
519 #define MIDISPP      0xF2
520 #define MIDISSP      0xF3
521 #define MIDITUNE     0xF6
522 #define MIDISYSEX7   0xF7
523 #define MIDITIME     0xF8
524 #define MIDISTART    0xFA
525 #define MIDICONT     0xFB
526 #define MIDISTOP     0xFC
527 #define MIDISENSE    0xFE
528 #define MIDIMETA     0xFF
529 
530 #define METASEQNUM   0x00
531 #define METATEXT     0x01
532 #define METACOPYR    0x02
533 #define METASEQNAME  0x03
534 #define METAINSTR    0x04
535 #define METALYRIC    0x05
536 #define METAMARKER   0x06
537 #define METACUEPT    0x07
538 #define METACHANNEL  0x20
539 #define METAPORT     0x21
540 #define METATEMPO    0x51
541 #define METASMPTE    0x54
542 #define METATIMESIG  0x58
543 #define METAKEYSIG   0x59
544 
545 /* for globals[] */
546 
547 #define MIDICTRLPOS      0
548 #define MIDIVOLUMEPOS   7
549 #define MIDIPANPOS     10
550 #define MIDIEXPRPOS    11
551 #define MIDITOUCHPOS   128
552 #define MIDICHTOUCHPOS 256
553 #define MIDIBENDPOS    257
554 #define MIDIEXTPOS     258
555 #define MIDIFRAMELEN   259
556 
557 /* for binary files */
558 
559 /* 3-bit code for config datastructure */
560 
561 #define BINORC   0
562 #define BINSCORE 1
563 #define BINMIDI  2
564 #define BINSAMP  3
565 #define BINSBF   4
566 #define BINSYM   5
567 #define BINRES1  6
568 #define BINRES2  7
569 
570 /* and a few extra for coding purposes */
571 
572 #define BINSSTR  8
573 
574 /* 2-bit code for streaming events */
575 
576 #define EVSCORE  0
577 #define EVMIDI   1
578 #define EVSAMPLE 2
579 #define EVRES    3
580 
581 /* 3-bit code for score datastructure */
582 
583 #define BININSTR     0
584 #define BINCONTROL   1
585 #define BINTABLE     2
586 #define BINEND       4
587 #define BINTEMPO     5
588 
589 /* code for type of MIDI/SASL to read */
590 
591 #define FCONFSCORE  0
592 #define FCONFMIDI   1
593 #define FSSTRSCORE  2
594 #define FSSTRMIDI   3
595 #define BCONFSCORE  4
596 #define BCONFMIDI   5
597 #define BSSTRSCORE  6
598 #define BSSTRMIDI   7
599 
600 /* code for type of timestamps in a list */
601 
602 #define RELTSTAMP 0
603 #define ABSTSTAMP 1
604 
605 /* template cloning states */
606 
607 #define NOSUB 0
608 #define DOSUB 1
609 
610 /* time-management states */
611 
612 #define RENDER 1
613 #define PLAYBACK 2
614 #define TIMESYNC 3
615 
616 /* new latency limits, in seconds */
617 
618 #define HIGH_LATENCY_MIN      0.0001F
619 #define HIGH_LATENCY_DEFAULT  0.300F
620 #define HIGH_LATENCY_MAX      1.0F
621 
622 #define LOW_LATENCY_MIN      0.0001F
623 #define LOW_LATENCY_DEFAULT  0.002F
624 #define LOW_LATENCY_MAX      0.050F
625 
626 /* types of latency, for control and ain drivers */
627 
628 #define LOW_LATENCY_DRIVER   0
629 #define HIGH_LATENCY_DRIVER  1
630 
631 /* types of networking available */
632 
633 #define NO_NETWORKING  0
634 #define HAS_NETWORKING 1
635 #define NET_STATUS     NO_NETWORKING
636 
637 /* default SIP location */
638 
639 #define SIP_IP          "169.229.59.210"
640 #define SIP_RTP_PORT    5060
641 
642 /* transposition for mirror session */
643 
644 #define MSESSION_INTERVAL  5
645 
646 /* maximum number of dynamic/controldevices notes, control lines, tables */
647 
648 #define MAXDNOTES   256
649 #define MAXDCONTROL 64
650 #define MAXDTABLES  64
651 
652 /* size of static strings -- eventually replace */
653 
654 #define STRSIZE 2048
655 
656 /* maximum depth of user-defined opcode calls (catches recursive calls) */
657 
658 #define MAXOPCODEDEPTH 30
659 
660 /* types of system compilers */
661 
662 #define UNKNOWN_COMPILER 0
663 #define GCC_COMPILER     1
664 
665 /* directory pre-prcoesss looks for SAOL library by default */
666 
667 #define SAOLLIBDIR  "/usr/share/sfront"
668 
669 /* types of input/output samples for drivers */
670 
671 #define SAMPLE_SHORT 0
672 #define SAMPLE_FLOAT 1
673 
674 /* active/passive samples for drivers */
675 
676 #define PASSIVE_FLOW 0
677 #define  ACTIVE_FLOW 1
678 
679 /* output file wordsize hint for drivers */
680 
681 #define WORDSIZE_8BIT    0
682 #define WORDSIZE_16BIT   1
683 #define WORDSIZE_24BIT   2
684 
685 /* bit positions for instr status word */
686 
687 #define STATWORD_EFFECTS    1
688 #define STATWORD_SCORE      2
689 #define STATWORD_MIDI       4
690 #define STATWORD_DYNAMIC    8
691 #define STATWORD_STARTUP   16
692 
693 /* types of signal variable mirroring */
694 
695 #define REQUIRED      0
696 #define GLOBALMIRROR  1
697 #define OPCODEMIRROR  2
698 
699 /* types of oparray code generation */
700 
701 #define OPARRAY_GENERAL  0
702 #define OPARRAY_CONSTANT 1
703 
704 /* maximum size for computing constant tables */
705 
706 #define MAXTABLECONSTSIZE 8192
707 
708 /* number of players in a session */
709 
710 #define DEFAULTBANDSIZE 2
711 #define     MAXBANDSIZE 31
712 
713 /* levels of forward-error-correction */
714 
715 #define FEC_NONE     0   /* must be zero */
716 #define FEC_NOGUARD  1
717 #define FEC_MINIMAL  2
718 #define FEC_STANDARD 3
719 #define FEC_EXTRA    4
720 
721 /* default timing limit for late notes */
722 
723 #define LATETIME_LIMIT   0.040F
724 
725 /* minimum pass-phrase length */
726 
727 #define MINIMUM_SESSIONKEY 20
728 
729 
730 /*******************************/
731 /* main symbol table structure */
732 /*******************************/
733 
734 typedef struct sigsym {
735 
736 /* these fields valid for all types of symbols */
737 
738 char * val;             /* IDENT associated with symbol */
739 int kind;               /* kind of symbol*/
740 struct tnode * defnode; /* S_NAME tnode where IDENT is defined */
741 struct sigsym * next;   /* linked list ptr */
742 int width;              /* width (for instrs, output width) */
743 int effects;            /* instruments targeted by a send */
744 int score;              /* instrument used in score */
745 int ascore;             /* instrument used in score w/ absolute time*/
746 int dyn;                /* instrument used dynamically */
747 int midi;               /* instrument used in MIDI */
748 int amidi;              /* instrument used in MIDI w/ absolute time*/
749 int miditag;            /* instr definition has a preset tag */
750 int startup;            /* instrument used as startup() */
751 int outputbus;          /* instrument writing to output bus */
752 
753 /* valid only for identifiers */
754 
755 int rate;               /* RATETYPE,KRATETYPE,ARATETYPE,XRATETYPE */
756 int special;            /* 1 if a specialop                       */
757 int res;                /* ASFLOAT or ASINT */
758 int vartype;            /* SCALARTYPE,VECTORTYPE,TABLETYPE,TMAPTYPE */
759 int vol;                /* CONSTANT or VARIABLE */
760 int numinst;            /* number of instances created by send */
761 int calrate;            /* calculated rate for xsig pfields */
762 
763 /* valid only for instr definitions */
764 
765 struct tnode * obus;  /* output bus for this instrument */
766 
767 /* valid for opcode and instr definitions */
768 
769 int maxifstate;         /* maximum number of if-else state variables */
770 
771 /* for optimization pass use */
772 
773 char * consval;         /* holds calculated value */
774 
775 /* reference count struct pointers */
776 
777 struct trefer * tref;  /* reference counts for tokens        */
778 struct crefer * cref;  /* reference counts for instr/opcodes */
779 
780 } sigsym;
781 
782 
783 /*****************************/
784 /* main parse tree structure */
785 /*****************************/
786 
787 typedef struct tnode {
788 
789 char * val;             /* string for terminals */
790 
791 int ttype;              /* S_* number           */
792 int rate;               /* IRATETYPE,KRATETYPE,ARATETYPE,UNKNOWN */
793 int special;            /* 1 if a specialop                       */
794 int width;              /* width for arrays */
795 int res;                /* ASFLOAT or ASINT */
796 int vartype;            /* SCALARTYPE or VECTORTYPE */
797 int vol;                /* CONSTANT or VARIABLE */
798 
799 struct sigsym * sptr;   /* symbol table entry for terminals */
800 struct tnode  * optr;   /* symbol table entry for opcode calls */
801 struct tnode  * dptr;   /* symbol table entry for dynamic instr calls */
802 int opwidth;            /* width for oparray calls */
803 int staterate;          /* rate of controlling statement, for opcode calls */
804 struct tnode * extra;   /* extra formal parameters for varargs opcode calls */
805 int extrarate;          /* maximum formal parameter rate for varargs */
806 
807 struct tnode *ibus;     /* input bus list for this instance */
808 int arrayidx;           /* position in effects[] */
809 int usesinput;          /* needs a function for input[] */
810 int usesingroup;        /* needs a function for inGroup[] */
811 float time;             /* start time -- for sasl links */
812 int inwidth;            /* instance input width */
813 
814 struct tnode * next;    /* tree pointers -- across */
815 struct tnode * down;    /* tree pointers -- down */
816 int linenum;            /* position of token for error reporting */
817 char * filename;        /* filename for error reporting */
818 
819 } tnode;
820 
821 
822 /*******************************/
823 /*   reference count structs   */
824 /*******************************/
825 
826 
827 /*    reference counts for each token              */
828 /* assignments include call-by-reference uses      */
829 /* (u) implies refcount used for something useful  */
830 /* other counts were done for future optimizations */
831 
832 typedef struct trefer {
833 
834   /* information about assignments */
835 
836   int assigntot;    /* number of assignments overall (u)  */
837   int assignif;     /* number of assignments in if/else block/guard  (u) */
838   int assignwhile;  /* number of assignments in while block/guard  (u) */
839   int assignbyref;  /* number of assignments made in call-by-refer (u) */
840   int assigntval;   /* number of assignments made to values of tables (u) */
841                     /* contrast with assigntot, which also detects params */
842   int assignrate;   /* rate of fastest assignment to the variable (u) */
843 
844   /* information about accesses */
845 
846   int accesstot;    /* total number of expression references  */
847   int accessrate;   /* fastest rate variable is accessed at   */
848 
849   /* variable status */
850 
851   int varstate;    /* i/k/a variable potentially read before written */
852   int dynaccess;   /* does a dyn instr statement import this ivar  */
853   int totexport;   /* total number of times exported in an instr   */
854   int totimport;   /* total number of times imported in an instr   */
855   int mirror;      /* mirror status of imports/exports signal var  */
856 
857   /* in use for globals only */
858 
859   int finalinstr;   /* the last instr in execution seq that modifies var */
860 
861 } trefer;
862 
863 
864 
865 /* reference counts for each instr or opcode */
866 /* includes effects of all called opcodes    */
867 /* (u) implies refcount used for something useful  */
868 /* other counts were done for future optimizations */
869 
870 typedef struct crefer {
871 
872   int MIDIctrl;  /* rate of fastest assignment to MIDIctrl (u)     */
873   int params;    /* rate of fastest assignment to params (u)       */
874   int settune;   /* rate of fastest execution of settune   (u)     */
875   int kadur;     /* number of times dur accessed at k/a rates (u)  */
876   int idur;      /* number of times dur accessed at i rate  (u)    */
877   int itime;     /* number of times itime accessed     (u)         */
878   int statevars; /* number of i/k/a sigs read before written       */
879   int statewave; /* number of wavetables written                   */
880   int callparam; /* number of parameter assigns (call-by-ref only) */
881   int syslines;  /* number of instr/output/outbus/spat/ext/toff    */
882   int conlines;  /* number of extend + turnoff lines               */
883 
884   /* for instrs and user-defined opcodes */
885 
886   int ilines;    /* number of i-rate statements at top level       */
887   int klines;    /* number of k-rate statements at top level       */
888   int alines;    /* number of a-rate statements at top level       */
889   int ifstate;   /* number of if-else state variables at top level */
890   int inmirror;  /* set if input[] buses need mirroring            */
891 
892   /* for opcodes only */
893 
894   int callif;     /* set if opcode call happens inside if block    */
895   int callwhile;  /* set if opcode call happens inside while block */
896   int callswitch; /* set if opcode call happens inside switch      */
897   int callrate;   /* rate opcode is called at                      */
898 
899 } crefer;
900 
901 
902 struct hasarray {
903 
904 int o_abs;
905 int o_acos;
906 int o_aexpon;
907 int o_aexprand;
908 int o_agaussrand;
909 int o_aline;
910 int o_alinrand;
911 int o_allpass;
912 int o_ampdb;
913 int o_aphasor;
914 int o_apoissonrand;
915 int o_arand;
916 int o_asin;
917 int o_atan;
918 int o_balance;
919 int o_bandpass;
920 int o_bandstop;
921 int o_biquad;
922 int o_buzz;
923 int o_ceil;
924 int o_chorus;
925 int o_comb;
926 int o_compressor;
927 int o_cos;
928 int o_cpsmidi;
929 int o_cpsoct;
930 int o_cpspch;
931 int o_dbamp;
932 int o_decimate;
933 int o_delay;
934 int o_delay1;
935 int o_doscil;
936 int o_downsamp;
937 int o_exp;
938 int o_fft;
939 int o_fir;
940 int o_firt;
941 int o_flange;
942 int o_floor;
943 int o_frac;
944 int o_fracdelay;
945 int o_ftbasecps;
946 int o_ftlen;
947 int o_ftloop;
948 int o_ftloopend;
949 int o_ftsetbase;
950 int o_ftsetend;
951 int o_ftsetloop;
952 int o_ftsetsr;
953 int o_ftsr;
954 int o_gain;
955 int o_gettempo;
956 int o_gettune;
957 int o_grain;
958 int o_hipass;
959 int o_iexprand;
960 int o_ifft;
961 int o_igaussrand;
962 int o_iir;
963 int o_iirt;
964 int o_ilinrand;
965 int o_int;
966 int o_irand;
967 int o_kexpon;
968 int o_kexprand;
969 int o_kgaussrand;
970 int o_kline;
971 int o_klinrand;
972 int o_koscil;
973 int o_kphasor;
974 int o_kpoissonrand;
975 int o_krand;
976 int o_log;
977 int o_log10;
978 int o_lopass;
979 int o_loscil;
980 int o_max;
981 int o_midicps;
982 int o_midioct;
983 int o_midipch;
984 int o_min;
985 int o_octcps;
986 int o_octmidi;
987 int o_octpch;
988 int o_oscil;
989 int o_pchcps;
990 int o_pchmidi;
991 int o_pchoct;
992 int o_pluck;
993 int o_port;
994 int o_pow;
995 int o_reverb;
996 int o_rms;
997 int o_samphold;
998 int o_sblock;
999 int o_settempo;
1000 int o_settune;
1001 int o_sgn;
1002 int o_sin;
1003 int o_speedt;
1004 int o_sqrt;
1005 int o_tableread;
1006 int o_tablewrite;
1007 int o_upsamp;
1008 int w_buzz;
1009 int w_concat;
1010 int w_cubicseg;
1011 int w_data;
1012 int w_empty;
1013 int w_expseg;
1014 int w_harm;
1015 int w_harm_phase;
1016 int w_lineseg;
1017 int w_periodic;
1018 int w_polynomial;
1019 int w_random;
1020 int w_sample;
1021 int w_spline;
1022 int w_step;
1023 int w_window;
1024 int spatialize;
1025 int s_k_rate;
1026 int s_s_rate;
1027 int s_inchan;
1028 int s_outchan;
1029 int s_time;
1030 int s_dur;
1031 int s_itime;
1032 int s_preset;
1033 int s_channel;
1034 int s_MIDIctrl;
1035 int s_MIDItouch;
1036 int s_MIDIbend;
1037 int s_input;
1038 int s_inGroup;
1039 int s_released;
1040 int s_cpuload;
1041 int s_position;
1042 int s_direction;
1043 int s_listenerPosition;
1044 int s_listenerDirection;
1045 int s_minFront;
1046 int s_maxFront;
1047 int s_minBack;
1048 int s_maxBack;
1049 int s_params;
1050 };
1051 
1052 /* markerlist for mp4write */
1053 
1054 typedef struct aiffmark {
1055 
1056 short id;
1057 unsigned int position;
1058 struct aiffmark * next;
1059 
1060 } aiffmark;
1061 
1062 
1063 /* compiler flags */
1064 
1065 extern int midiverbose;
1066 extern int isocheck;
1067 extern int rateoptimize;
1068 extern int constoptimize;
1069 
1070 extern FILE * saolfile;
1071 extern FILE * saslfile;
1072 extern FILE * sstrfile;
1073 extern FILE * midifile;
1074 extern FILE * mstrfile;
1075 extern FILE * outfile;
1076 extern FILE * boutfile;
1077 extern FILE * orcoutfile;
1078 extern FILE * scooutfile;
1079 extern FILE * midoutfile;
1080 extern FILE * bitfile;
1081 extern FILE * soundfile;
1082 
1083 extern int sfront_argc;
1084 extern char ** sfront_argv;
1085 
1086 extern int aout;
1087 extern int aoutflow;
1088 extern char * aoutname;
1089 
1090 extern int ain;
1091 extern int ainlatency;
1092 extern int ainflow;
1093 extern char * ainname;
1094 
1095 extern int outfile_wordsize;
1096 
1097 extern int cin;
1098 extern int cmidi;
1099 extern int csasl;
1100 extern int cmaxchan;
1101 extern int cinmaxchan;
1102 extern int clatency;
1103 extern char * cinname;
1104 
1105 extern int reentrant;
1106 extern int creentrant;
1107 extern int nomain;
1108 extern int adebug;
1109 
1110 extern int timeoptions;
1111 extern float latency;
1112 extern int catchsignals;
1113 extern int fixedseed;
1114 extern int isocompliant;
1115 extern int compilertype;
1116 extern int cppsaol;
1117 extern char * cppincludes;
1118 extern int systemshell;
1119 extern int hexstrings;
1120 extern char * session;
1121 extern char * sessionkey;
1122 extern int feclevel;
1123 extern int lateplay;
1124 extern float latetime;
1125 extern int null_program;
1126 extern int netstart;
1127 extern int netmsets;
1128 extern unsigned short sip_port;
1129 extern char sip_ip[];
1130 extern int msession_interval;
1131 extern char * au_component_type;
1132 extern char * au_component_manu;
1133 extern char * au_component_subtype;
1134 extern char * au_filesystem_name;
1135 extern char * au_ui_name;
1136 extern char * au_ui_manu;
1137 extern char * au_manu_url;
1138 extern char * au_view_bundlename;
1139 extern char * au_view_baseclass;
1140 
1141 extern tnode * saolfilelist;
1142 extern tnode * saslfilelist;
1143 extern tnode * sstrfilelist;
1144 extern tnode * currsaolfile;
1145 extern int ascsaolptree;
1146 
1147 extern char * z[];
1148 
1149 /* for free'ing dynamically-created lines */
1150 
1151 typedef struct znode {
1152 
1153 char * zchar;
1154 struct znode * next;
1155 
1156 } znode;
1157 
1158 extern znode * zlist;
1159 
1160 extern struct hasarray has;
1161 
1162 extern int srate;
1163 extern int krate;
1164 extern int saol_krate;
1165 extern int twocycle;
1166 extern int inchannels;
1167 extern int outchannels;
1168 extern int interp;
1169 extern float globaltune;
1170 
1171 extern int interp_cmdline;
1172 extern unsigned int sinc_pilen;
1173 extern unsigned int sinc_zcross;
1174 extern float sinc_upmax;
1175 
1176 extern tnode * troot;
1177 extern tnode * groot;
1178 extern tnode * instances;
1179 extern tnode * outputbusinstance;
1180 extern tnode * outbustable;
1181 extern tnode * printfunctions;
1182 extern tnode * locopcodecalls;
1183 extern tnode * tlocopcodecalls;
1184 extern tnode * locdyncalls;
1185 extern tnode * tlocdyncalls;
1186 extern tnode * globalopcodecalls;
1187 
1188 extern tnode maplistopcall;
1189 extern tnode maplistoparraycall;
1190 
1191 extern sigsym * bitsamplein;
1192 extern sigsym * bitsampleout;
1193 extern sigsym * bitsymtable;
1194 extern sigsym * bitsymin;
1195 extern sigsym * locsymtable;
1196 extern sigsym * tlocsymtable;
1197 extern sigsym * globalsymtable;
1198 extern sigsym * instrnametable;
1199 extern sigsym * unusedinstrtable;
1200 extern sigsym * opcodenametable;
1201 extern sigsym * dinstrnametable;
1202 extern sigsym * busnametable;
1203 extern sigsym * outputbus;
1204 extern sigsym * startupinstr;
1205 extern sigsym * instrpresets;
1206 extern sigsym * targetsymtable;
1207 extern sigsym * mpegtokens;
1208 
1209 extern char   * currinstancename;
1210 extern char   * curropcodeprefix;
1211 extern tnode  * currinstance;
1212 extern tnode  * curropcodeinstance;
1213 extern sigsym * curropcodestack;
1214 extern sigsym * currinstrument;
1215 extern sigsym * currconstoptlevel;
1216 
1217 extern int currinstrwidth;
1218 extern int currinputwidth;
1219 extern int curropcoderate;
1220 extern int currspecialrate;
1221 extern int currtreerate;
1222 extern int currblockrate;
1223 extern int currintprint;
1224 extern int currconstoptif;
1225 extern int currconstoptwhile;
1226 extern int currconstwhilerate;
1227 extern int currrateunguarded;
1228 
1229 extern int globalblockcount;
1230 extern int suspendvarchecks;
1231 extern int conditionalblocks;
1232 extern int currarrayindex;
1233 extern int currscalarflag;
1234 extern int outstrict;
1235 extern int setbusnum;
1236 extern int isaninstr;
1237 extern int nonpolyparams;
1238 extern int numinstrnames;
1239 extern int curropcalldepth;
1240 extern int maxoparraydepth;
1241 extern int curroparraydepth;
1242 extern int useshadowbus;
1243 extern int mpegtokencount;
1244 
1245 extern int ifrefdepth;
1246 extern int whilerefdepth;
1247 extern int ifrefglobaldepth;
1248 extern int whilerefglobaldepth;
1249 
1250 /* sasl reading stuff */
1251 
1252 extern int numpfields;
1253 extern int maxmidipreset;
1254 
1255 typedef struct sasdata {
1256 
1257   tnode * temporoot;
1258   tnode * tempotail;
1259   int numtempo;
1260 
1261   tnode * tableroot;
1262   tnode * tabletail;
1263   int numtable;
1264 
1265   tnode * controlroot;
1266   tnode * controltail;
1267   int numcontrol;
1268 
1269   tnode * instrroot;
1270   tnode * instrtail;
1271 
1272   sigsym * labeltable;
1273   int numlabels;
1274 
1275   unsigned int scorefsize;
1276 
1277   char * endtimeval;
1278 
1279   float compendtime;
1280 
1281 } sasdata;
1282 
1283 
1284 extern sasdata * confsasl;
1285 extern sasdata * sstrsasl;
1286 extern sasdata * allsasl;
1287 extern sasdata * abssasl;
1288 
1289 extern tnode * tempomap;
1290 
1291 /* midi reading stuff */
1292 
1293 /* state for reading a midi file */
1294 
1295 typedef struct midata {
1296 
1297   tnode * imidiroot;         /* list of midi events */
1298   tnode * imiditail;
1299 
1300   unsigned int midifsize;   /* midi file size, for mp4write */
1301 
1302   unsigned int miditracks;  /* track counter for extchan */
1303   unsigned int miditicks;   /* ticks per quarter note */
1304   unsigned int midimaxtime; /* maximum timestamp in file */
1305   int midinumchan;          /* extended channels in use */
1306 
1307 } midata;
1308 
1309 extern midata * confmidi;
1310 extern midata * sstrmidi;
1311 extern int totmidichan;
1312 extern int midiallsoundsoff;
1313 
1314 /* temporary midi variables */
1315 
1316 extern unsigned char midirunstat;
1317 extern unsigned int midictime;
1318 extern unsigned int midibank[];
1319 extern int midiext[];
1320 extern int midifirst[];
1321 extern tnode * midicurrinstr[];
1322 extern tnode * midicurrnote[];
1323 extern tnode * midilastnote[][MNOTE];
1324 
1325 extern int midihasctrlflag[][MNOTE];
1326 extern int midihastouchc[];
1327 extern int midihastouchk[];
1328 extern int midihaswheel[];
1329 
1330 
1331 /* mp4 bit writing stuff */
1332 
1333 extern unsigned char bitstowrite; /* buffers for mp4 binary write */
1334 extern int bitwritepos;           /* keeps track of bit position */
1335 
1336 extern unsigned char bitstoread;  /* buffers for mp4 binary read */
1337 extern int bitreadpos;            /* keeps track of bit position */
1338 
1339                                   /* for mp4 binary intrachunk read */
1340 extern unsigned int bitreadlen;  /* number of bytes left in chunk */
1341 extern int bitscoretype;          /* type of line read in progress */
1342 extern int bitlinecount;          /* score line finished */
1343 extern float bitscotime;          /* score time */
1344 extern int bitscohastime;         /* score line hastime bit */
1345 extern int bitscolabel;           /* score label (-1 if no label) */
1346 extern int bitscopfields;         /* score number of pfields */
1347 extern int bitscopfieldsmax;      /* score number of pfields max */
1348 extern int bittabletoken;         /* tabletype token for sample table gen */
1349 extern int bitsampletoken;        /* score token for sample table gen */
1350 extern int bitsamplefirst;        /* counter for sample table gen */
1351 extern float bitaccesstime;       /* time of current access unit */
1352 
1353 extern unsigned char bitstowrite;
1354 extern int bitwritepos;
1355 
1356 extern unsigned char bitstoread;
1357 extern int bitreadpos;
1358 
1359 extern int bitwritenosymbols;
1360 
1361 extern int bitreadaccessunits;
1362 
1363 extern int ffttables[];          /* checklist for including fft tables */
1364 
1365 /*****************************/
1366 /* lexical/parsing variables */
1367 /*****************************/
1368 
1369 extern int saollinenumber;
1370 extern char * saolsourcefile;
1371 
1372 #define YYSTYPE tnode *
1373 
1374 /* maximum size of context-dependent lexical look-ahead */
1375 
1376 #define LEXSTACKSIZE 256
1377 #define LEXBUFSIZE   256
1378 
1379 extern int lexstackret[];
1380 extern tnode * lexstacktnode[];
1381 extern int lexstackptr;
1382 
1383 extern int lexholdret[];
1384 extern tnode * lexholdtnode[];
1385 extern int lexholdptr;
1386 
1387 /* possible values for look-ahead state machine */
1388 
1389 #define TEMPLATE_REST 0
1390 #define TEMPLATE_ACTIVE 1
1391 #define TEMPLATE_PRESET 2
1392 #define TEMPLATE_PMAPLIST 3
1393 #define TEMPLATE_WITH 4
1394 #define TEMPLATE_WMAPLIST 5
1395 #define TEMPLATE_LOOKAHEAD 6
1396 
1397 extern int lexstatemachine;
1398 
1399 /* possible values for mp4write global state machine */
1400 
1401 #define GLOBAL_DORMANT  0
1402 #define GLOBAL_FIRST    1
1403 #define GLOBAL_REST     2
1404 #define GLOBAL_ACTIVE   3
1405 
1406 extern int lexttl;
1407 extern int sendsemicoloncount;
1408 
1409 
1410 /* for describing a wav or aiff sample */
1411 
1412 typedef struct sampleinfo {
1413 
1414   char wav;             /* 1 if from wav file, 0 if from aif file */
1415   char numbytes;        /* number of bytes in a data word         */
1416   char framebytes;      /* number of bytes in one N-channel frame */
1417   char chanpoint;       /* 1st byte of channel in frame; -1 sum to mono */
1418   unsigned int len;    /* number of samples                      */
1419   unsigned int point;  /* number of bytes before first data byte */
1420   unsigned int srate;  /* sampling rate */
1421   char hasbase;         /* has a base frequency */
1422   char hasloop;         /* has loop points */
1423   float base;           /* base frequency */
1424   unsigned int start;  /* start of loop */
1425   unsigned int end;    /* end of loop */
1426 
1427 } sampleinfo;
1428 
1429 
1430 /**********************/
1431 /* external functions */
1432 /**********************/
1433 
1434 /* from ascwrite.c */
1435 
1436 extern void ascsaolwrite(void);
1437 extern void ascsaslwrite(sasdata *);
1438 
1439 /* from audio.c */
1440 
1441 extern void printaudiohelp(void);
1442 extern int ainfilecheck(char *);
1443 extern int aoutfilecheck(char *);
1444 extern int makeaudiotypeout(int);
1445 extern int stdoutused(int);
1446 extern int stdinused(int);
1447 extern int wiretap_logging(int);
1448 extern int adriver_reflection(int);
1449 extern int makeaudiotypein(int);
1450 extern void audiodefaults(void);
1451 extern void makeainparams(int, int *, int *);
1452 extern void makeaudiodriver(int);
1453 extern int makeaoutsync(int);
1454 extern int makeainsync(int);
1455 extern int makeaouttimedefault(int);
1456 extern int makeaintimedefault(int);
1457 extern int makeaoutrobust(int);
1458 extern int makeainrobust(int);
1459 
1460 /* from blocktree.c */
1461 
1462 extern void nextstateupdate(int *);
1463 extern void blocktree(tnode *, int);
1464 
1465 /* from csrclib.c  */
1466 
1467 extern void makepreamble(void);
1468 
1469 /* from cmainpass.c */
1470 
1471 extern void makecontrolsys(void);
1472 extern void makesaslcontrolsys(void);
1473 extern void makesasltablesys(void);
1474 extern void makesaslcrosscontrol(char *);
1475 
1476 /* from collapse.c */
1477 
1478 extern void co_constcollapse(tnode *);
1479 
1480 /* from control.c */
1481 
1482 extern void printcontrolhelp(void);
1483 extern int cinfilecheck(char *);
1484 extern void makecontroldriver(int);
1485 extern void makenetworkdriver(void);
1486 
1487 /* from corecode.c */
1488 
1489 extern tnode * firstopcodearg(tnode *);
1490 extern void printblock(int);
1491 extern void printraw(int);
1492 extern void printlib(int);
1493 extern void printwaveblock(int, sigsym *, char *);
1494 extern void printwaveblock2(int, tnode *);
1495 extern void printwavesymblock(int, sigsym *, char *);
1496 extern void printwavesymblock2(int, tnode *);
1497 extern void printcontrolblock(int, char *);
1498 extern void mz(int);
1499 extern void vmcheck(void *);
1500 extern void coreopcodebody(tnode *);
1501 extern void genex(int*, tnode*, char *);
1502 extern void gened(tnode*, char *);
1503 
1504 /* from coreinline.c */
1505 
1506 extern int  coreopcodecaninline(tnode *);
1507 extern void coreopcodedoinline(tnode *);
1508 
1509 /* from corevars.c */
1510 
1511 extern void coreopcodevars(tnode *);
1512 extern int coreopcodename(tnode *);
1513 extern int coreopcodehasextras(tnode *);
1514 extern int coreopcodespeedtrap(tnode *);
1515 extern int delicatepolyops(tnode * tptr);
1516 extern int polyopcallexcept(tnode * tptr);
1517 extern int coreopcodeprecompute(tnode *);
1518 extern void coreopcodecollapse(tnode *, tnode *);
1519 extern void hascoreopcode(tnode *, int);
1520 extern void corerefer(sigsym *, tnode *, tnode *, int);
1521 extern int coreopcodespecial(tnode *);
1522 extern int coreopcodeasint(tnode *);
1523 extern sigsym * coreopcodeadd(tnode *, sigsym **);
1524 extern int coreopcodeargs(tnode *,tnode *);
1525 extern void coreopcodevarargs(tnode * tcall);
1526 
1527 /* from lex.c */
1528 
1529 extern void yyerror(char *);
1530 extern int yylex(void);
1531 extern void showerrorplace(int, char *);
1532 extern void internalerror(char *, char *);
1533 extern void noerrorplace(void);
1534 extern void warningmessage(tnode *, char *);
1535 extern int lexstate_pmap(void);
1536 extern int lexstate_wmap(void);
1537 
1538 
1539 /* from mp4read.c */
1540 
1541 extern unsigned int readbit(unsigned int);
1542 extern void readflush(unsigned int);
1543 extern int readprepare(int);
1544 extern int orclex(void);
1545 extern tnode * binconflex(void);
1546 extern tnode * binsstrlex(void);
1547 extern void readsampleset(void);
1548 extern void readsymboltable(void);
1549 
1550 /* from mp4write.c */
1551 
1552 extern void mp4write(void);
1553 
1554 /* from oclone.c */
1555 
1556 extern void installopnames(tnode *);
1557 extern void installdyninstr(tnode *);
1558 extern tnode * eclone(tnode *);
1559 extern tnode * tclone(tnode *);
1560 extern sigsym * sclone (sigsym *);
1561 extern tnode *  treeclone(tnode *, sigsym **, int);
1562 
1563 /* from optconst.c */
1564 
1565 extern void stateoptconst(int, tnode **);
1566 extern void exprcollapse(int, tnode *);
1567 
1568 /* from optmain.c */
1569 
1570 extern void optmain(void);
1571 
1572 /* from optrate.c */
1573 
1574 extern int looseopcoderules(tnode *);
1575 extern void stateoptrate(int, tnode *, tnode **, int *);
1576 
1577 /* from optrefer.c */
1578 
1579 extern void exprrefer(sigsym *, tnode *, int);
1580 extern void staterefer(sigsym *, tnode *, int);
1581 extern void tmaprefer(sigsym *, int, int);
1582 extern void refermirror(sigsym *);
1583 
1584 /* from parsehelp.c */
1585 
1586 extern void tablecheck(tnode *);
1587 extern void tablelistcheck(tnode *);
1588 extern tnode * leftrecurse(tnode *, tnode *);
1589 extern tnode * leftsrecurse(tnode *, tnode *, tnode *);
1590 extern void make_instrpfields(tnode *);
1591 extern tnode * make_instrdecl(tnode *, tnode *, tnode *, tnode *, tnode *,
1592                        tnode *, tnode *, tnode *, tnode *, tnode *);
1593 extern tnode * make_miditag(tnode *, tnode *);
1594 extern void make_opcodetype(tnode *, tnode *);
1595 extern tnode * make_opcodedecl(tnode *, tnode *, tnode *, tnode *, tnode *,
1596 			       tnode *, tnode *, tnode *, tnode *);
1597 extern tnode * make_globaldecl(tnode *, tnode *, tnode *, tnode *);
1598 extern void make_templatepfields(tnode *, tnode *);
1599 extern tnode * make_templatedecl(tnode *, tnode *, tnode *, tnode *,
1600 				 tnode *, tnode *, tnode *);
1601 extern void templateopcodepatch(void);
1602 extern tnode * make_mapblock(tnode *, tnode *);
1603 extern tnode * make_rtparam(tnode *, tnode *, tnode *);
1604 extern tnode * make_routedef(tnode *, tnode *, tnode *, tnode *, tnode *,
1605 			     tnode *, tnode *);
1606 extern tnode * make_senddef(tnode *, tnode *, tnode *, tnode *, tnode *,
1607 			    tnode *, tnode *, tnode *, tnode *);
1608 extern tnode * make_seqdef(tnode *, tnode *, tnode *, tnode *, tnode *);
1609 extern tnode * make_statement(tnode *, tnode *, tnode *, tnode *, tnode *,
1610 			      tnode *, tnode *, tnode *, tnode *,
1611 			      tnode *, tnode *);
1612 extern tnode * make_lval(tnode *, tnode *, tnode *, tnode *);
1613 extern tnode * make_simplevar(tnode *, tnode *, tnode *, tnode *,
1614 			      char *, int);
1615 extern tnode * make_tabledecl(tnode *, tnode *, tnode *, tnode *, tnode *,
1616 			      tnode *, tnode *);
1617 extern tnode * make_tablemap(tnode *, tnode *, tnode *, tnode *,
1618 			     tnode *, tnode *);
1619 extern tnode * make_paramdecl(tnode *, tnode *);
1620 extern tnode * make_name(tnode *, tnode *, tnode *, tnode *);
1621 extern tnode * make_stree(tnode *, tnode *, tnode *, tnode *, char *, int);
1622 extern tnode * make_expr(tnode *, tnode *, tnode *, tnode *, tnode *, tnode *,
1623 			 tnode *);
1624 
1625 
1626 /* from parser.tab.c */
1627 
1628 extern int yyparse(void);
1629 
1630 /* from postparse.c */
1631 
1632 extern void checkopcodeargswidth(tnode *);
1633 extern void saolparse(void);
1634 extern void varupdate(tnode *, sigsym**);
1635 
1636 /* from readmidi.c */
1637 
1638 extern void readmidi(midata *, sasdata *, int type);
1639 extern void initmidiinstr(int, sigsym *, int *);
1640 extern void initmidiinstrassign(int, sigsym *);
1641 extern void initmidiinstrconstant(int, sigsym *);
1642 extern void binmidiwrite(int);
1643 extern void midieventread(void);
1644 
1645 /* from readscore.c */
1646 
1647 extern void readscore(int);
1648 extern void printtablefunctions(void);
1649 extern void initendtime(void);
1650 extern void initendtimeassign(void);
1651 extern void initscoreinstr(int, sigsym * sptr);
1652 extern void initscoreinstrassign(int, sigsym * sptr);
1653 extern void initscoreinstrconstant(int, sigsym * sptr);
1654 extern void initscorecontrol(int);
1655 extern void initscorecontrolassign(int);
1656 extern void initscorecontrolconstant(int);
1657 extern void initscoretempo(int);
1658 extern void initscoretempoassign(int);
1659 extern void initscoretempoconstant(int);
1660 extern void initscoretableexterns(int);
1661 extern void initscoretablevars(int);
1662 extern void initscoretableassign(int);
1663 extern void initscoretableconstant(int);
1664 extern int parsetempo(sasdata *, tnode *, int);
1665 extern int parsecontrol(sasdata *, tnode *, int);
1666 extern void mergescores(void);
1667 extern void renumberabs(void);
1668 extern void showbadline(tnode *);
1669 extern void badline(tnode *);
1670 
1671 /* from sfmain.c */
1672 
1673 extern void deletecppfiles(void);
1674 
1675 /* from special.c */
1676 
1677 extern int specialupdate(tnode *);
1678 
1679 /* from stparse.c */
1680 
1681 extern int constdur(void);
1682 extern void hasstandardname(tnode *);
1683 extern void printdurassign(void);
1684 extern void printstandardname(tnode **);
1685 extern int standardcollapse(tnode *);
1686 extern int standardname(tnode *);
1687 extern int standardrate(tnode *);
1688 extern int standardres(tnode *);
1689 extern int standardvartype(tnode *);
1690 extern int standardwidth(tnode *);
1691 
1692 /* from symbols.c */
1693 
1694 extern int      addsym(sigsym **, tnode*);
1695 extern int      addvsym(sigsym **, char *, int);
1696 extern sigsym * addvsymend(sigsym **, char *, int);
1697 extern int      addvsymsort(sigsym **, char *, int);
1698 extern sigsym * getsym(sigsym **, tnode*);
1699 extern sigsym * getvsym(sigsym **, char*);
1700 extern void     symcheck(int, tnode *);
1701 extern int      deletesym(sigsym **, sigsym*);
1702 extern sigsym * reversetable (sigsym *);
1703 extern sigsym * findlast(sigsym **,tnode *);
1704 extern void     moveafter(sigsym **,sigsym *,sigsym *);
1705 extern int      movebefore(sigsym **,sigsym *,sigsym *);
1706 extern char *   dupval(char * val);
1707 extern char *   dupunderscore(char * val);
1708 extern tnode *  make_tnode(char *, int);
1709 extern int      make_int(tnode * tptr);
1710 extern int      largeinteger(char * s);
1711 extern int      reachableinstrexeff(sigsym *);
1712 extern int      reachableinstrexstart(sigsym *);
1713 extern int      reachableinstrexeffexstart(sigsym *);
1714 extern int      reachableinstr(sigsym *);
1715 
1716 /* from tokens.c */
1717 
1718 extern int identtoken (tnode * );
1719 extern char * strfortoken(char *, int);
1720 extern int tokenmap(int);
1721 extern int parsetokenmap(int);
1722 
1723 /* from treeupdate.c */
1724 
1725 extern int  truewidth(int);
1726 extern int  widthupdate(tnode *);
1727 extern void opraterecurse(tnode *);
1728 extern void inrateupdate(sigsym *);
1729 extern void rateupdate(tnode *);
1730 
1731 /* from writemain.c */
1732 
1733 extern void printmainloops(void);
1734 
1735 /* from writeop.c */
1736 
1737 extern void redefnormal(void);
1738 extern void redefglobal(void);
1739 extern void redefstatic(int);
1740 extern void opcodefunctions(void);
1741 extern void printopcodes(tnode *);
1742 extern void printtmapcase(tnode *, tnode *, char *);
1743 extern void printtabledefine(int, char *, int, int);
1744 extern void printinlinetable(tnode * tptr);
1745 extern  int maketableindex(tnode *, sigsym *, char **, int *);
1746 extern char * namingprefix(sigsym *, char *);
1747 extern char * stackstring(int, int, char * idxstr);
1748 extern  int indexed_cbr(tnode * aptr);
1749 extern  int stname_cbr(tnode * aptr);
1750 
1751 /* from writeorc.c */
1752 
1753 extern void toptree(int);
1754 extern void postscript(void);
1755 extern int shadowcheck(void);
1756 extern char * inputbusmacro(void);
1757 
1758 /* from writepre.c */
1759 
1760 extern void preamble(void);
1761 extern void postcorefunctions(void);
1762 extern void printsaoltables(int);
1763 extern void printtablecatalog(void);
1764 
1765 /* from wtparse.c */
1766 
1767 extern int wavegeneratorname(tnode *);
1768 extern void haswavegenerator(tnode *);
1769 extern float * wavereduceconstants(tnode *, tnode *);
1770 extern void wavegeneratorvar(sigsym *);
1771 extern void createtable(sigsym *, char *, int);
1772 extern void tablestartupcheck(sigsym * ident, int mode, int kind);
1773 /* from wtconst.c */
1774 
1775 extern float * wavereduceconstants(tnode *, tnode *);
1776 extern void createconstanttable(sigsym *, char *, int);
1777 extern void printtablestring(sigsym *, char *);
1778 extern char * compactfloat(char *, float);
1779 
1780 #endif /* _SFRONT_TREE_H */
1781 
1782 
1783 
1784 
1785 
1786 
1787 
1788 
1789 
1790 
1791 
1792 
1793 
1794