1 /* 2 scot.h: 3 4 Copyright (C) 1991 Alan deLespinasse 5 6 This file is part of Csound. 7 8 The Csound Library is free software; you can redistribute it 9 and/or modify it under the terms of the GNU Lesser General Public 10 License as published by the Free Software Foundation; either 11 version 2.1 of the License, or (at your option) any later version. 12 13 Csound is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU Lesser General Public License for more details. 17 18 You should have received a copy of the GNU Lesser General Public 19 License along with Csound; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 21 02110-1301 USA 22 */ 23 24 /* SCOT.H */ 25 /* aldel Jul 91 */ 26 27 #include <stdio.h> 28 #include <string.h> 29 #include <ctype.h> 30 31 #ifndef TRUE 32 #define TRUE 1 33 #define FALSE 0 34 #endif 35 #define PITCHCLASSES 7 36 #define NOTESPEROCT 12 37 #define MAXLINE 300 38 #define NEXTP "!&" 39 40 typedef struct 41 { 42 unsigned long num,denom; 43 } Rat; 44 45 typedef struct strlist /* used for p-fields */ 46 { 47 struct strlist *next; 48 char str[32]; 49 } Strlist; 50 51 typedef struct note 52 { 53 struct note *next; 54 double instrum; 55 Rat start, /* when note starts */ 56 dur, /* length of note (mul by grpmul) */ 57 lastdur; /* duration to carry to next note */ 58 int octave, /* 8=middle c-b */ 59 pitchclass, /* c=0, d=1, e=2... */ 60 accid, /* -1=flat, +1=sharp, etc. */ 61 accmod, /* TRUE if note had #,-,n modifiers */ 62 slur, /* 0,1,2,3 */ 63 tie, /* TRUE if note has __ after it */ 64 written; /* TRUE when written to score */ 65 Strlist *p, /* pfields local to this note */ 66 *carryp; /* pfields to carry to next note */ 67 } Note; 68 69 typedef struct nextp /* keeps track of !next keywords */ 70 { 71 struct nextp *next; 72 int src,dst; /* !next psrc "pdst" */ 73 } Nextp; 74 75 typedef struct macro 76 { 77 struct macro *next; 78 char name[33],text[128]; /* [name="text..."] */ 79 } Macro; 80 81 typedef struct inst 82 { 83 struct inst *next; 84 char *name; 85 unsigned number; 86 Macro *lmac; /* local macros */ 87 } Inst; 88 89 typedef struct tempo 90 { 91 struct tempo *next; 92 Rat time; 93 int val; 94 } Tempo; 95 96 #include <stdlib.h> 97 98 static void readinstsec(Inst *,Nextp **, 99 Rat *,Rat *,Rat *,Rat *,Rat *, 100 Note **,Note **,Tempo **, 101 int *,int *,int *,int *,int *,int*, 102 char *); 103 static void addparam(int,char *,Strlist **); 104 static char *findparam(int,Strlist **); 105 static char *readparams(Inst *); 106 static int applymacs(char **,Inst *); 107 static char *macval(char *,Inst *); 108 static void initnote(Note *); 109 static void readorch(Inst **); 110 static void readmacros(Macro **); 111 static void readfunctions(void); 112 static void readscore(Inst *); 113 static int expectchar(int); 114 static int findint(int *); 115 static int findchar(int *); 116 static int findonoff(int *); 117 static int findword(char *); 118 static void efindword(char *); 119 static int letterval(int); 120 static double pitchval(int,int,int,int); 121 static void writenote(Note *); 122 static void freenote(Note *); 123 static void freeps(Strlist *); 124 static void strlistcopy(Strlist **,Strlist **); 125 static int getccom(void); 126 static double ratval(Rat *); 127 static void ratreduce(Rat *); 128 static void ratadd(Rat *,Rat *,Rat *); 129 static void ratmul(Rat *,Rat *,Rat *); 130 static void ratdiv(Rat *,Rat *,Rat *); 131 static int ratcmp(Rat *,Rat *); 132 static void ratass(Rat *,Rat *); 133 static void scoterror(char *); 134 static void scotferror(char *); 135 static void initf(FILE *,FILE *,char *); 136 static int scotgetc(void); 137 static void scotungetc(void); 138 static void reporterrcount(void); 139 140