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