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