Lines Matching refs:z

49   z[lc++]="";  in makeascii()
50 z[lc++]="/*"; in makeascii()
51 z[lc++]="# Sfront, a SAOL to C translator "; in makeascii()
52 z[lc++]="# This file: ascii kbd control driver for sfront"; in makeascii()
53 z[lc++]="#"; in makeascii()
54 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makeascii()
55 z[lc++]="# All rights reserved."; in makeascii()
56 z[lc++]="#"; in makeascii()
57 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makeascii()
58 z[lc++]="# modification, are permitted provided that the following conditions are"; in makeascii()
59 z[lc++]="# met:"; in makeascii()
60 z[lc++]="#"; in makeascii()
61 z[lc++]="# Redistributions of source code must retain the above copyright"; in makeascii()
62 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makeascii()
63 z[lc++]="#"; in makeascii()
64 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makeascii()
65 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makeascii()
66 z[lc++]="# documentation and/or other materials provided with the distribution."; in makeascii()
67 z[lc++]="#"; in makeascii()
68 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makeascii()
69 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makeascii()
70 z[lc++]="# derived from this software without specific prior written permission."; in makeascii()
71 z[lc++]="#"; in makeascii()
72 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makeascii()
73 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makeascii()
74 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makeascii()
75 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makeascii()
76 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makeascii()
77 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makeascii()
78 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makeascii()
79 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makeascii()
80 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makeascii()
81 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makeascii()
82 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makeascii()
83 z[lc++]="#"; in makeascii()
84 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makeascii()
85 z[lc++]="*/"; in makeascii()
86 z[lc++]=""; in makeascii()
87 z[lc++]=""; in makeascii()
88 z[lc++]="#include <ctype.h>"; in makeascii()
89 z[lc++]="#include <unistd.h>"; in makeascii()
90 z[lc++]="#include <fcntl.h>"; in makeascii()
91 z[lc++]="#include <termios.h>"; in makeascii()
92 z[lc++]=""; in makeascii()
93 z[lc++]="/****************************************************************/"; in makeascii()
94 z[lc++]="/****************************************************************/"; in makeascii()
95 z[lc++]="/* ascii keyboard control driver for sfront */ "; in makeascii()
96 z[lc++]="/****************************************************************/"; in makeascii()
97 z[lc++]=""; in makeascii()
98 z[lc++]="/****************************/"; in makeascii()
99 z[lc++]="/* terminal and signal vars */"; in makeascii()
100 z[lc++]="/****************************/"; in makeascii()
101 z[lc++]=""; in makeascii()
102 z[lc++]="struct termios csysi_term_default; /* to restore stdin */"; in makeascii()
103 z[lc++]="sig_atomic_t csysi_no_interrupt = 1; /* flags [cntrl-c] */"; in makeascii()
104 z[lc++]=""; in makeascii()
105 z[lc++]="/*************************/"; in makeascii()
106 z[lc++]="/* keyboard input buffer */"; in makeascii()
107 z[lc++]="/*************************/"; in makeascii()
108 z[lc++]=""; in makeascii()
109 z[lc++]="#define CSYSI_INBUFF_SIZE 32"; in makeascii()
110 z[lc++]=""; in makeascii()
111 z[lc++]="char csysi_inbuff[CSYSI_INBUFF_SIZE]; /* holds new keypresses */"; in makeascii()
112 z[lc++]="int csysi_inbuff_cnt; "; in makeascii()
113 z[lc++]="int csysi_inbuff_len;"; in makeascii()
114 z[lc++]=""; in makeascii()
115 z[lc++]="/***********************/"; in makeascii()
116 z[lc++]="/* keyboard action map */"; in makeascii()
117 z[lc++]="/***********************/"; in makeascii()
118 z[lc++]=""; in makeascii()
119 z[lc++]="#define CSYSI_MAPSIZE 256"; in makeascii()
120 z[lc++]=""; in makeascii()
121 z[lc++]="typedef struct csysi_kinfo {"; in makeascii()
122 z[lc++]=" unsigned char cmd; /* CSYS_MIDI_{NOTEON,PROGRAM,CC,NOOP} */"; in makeascii()
123 z[lc++]=" unsigned char ndata; /* note number or parameter */"; in makeascii()
124 z[lc++]="} csysi_kinfo;"; in makeascii()
125 z[lc++]=""; in makeascii()
126 z[lc++]="csysi_kinfo csysi_map[CSYSI_MAPSIZE];"; in makeascii()
127 z[lc++]=""; in makeascii()
128 z[lc++]="/**********************/"; in makeascii()
129 z[lc++]="/* current note state */"; in makeascii()
130 z[lc++]="/**********************/"; in makeascii()
131 z[lc++]=""; in makeascii()
132 z[lc++]="#define CSYSI_NOTESIZE 128"; in makeascii()
133 z[lc++]="#define CSYSI_DURATION 0.1F"; in makeascii()
134 z[lc++]=""; in makeascii()
135 z[lc++]="typedef struct csysi_noteinfo {"; in makeascii()
136 z[lc++]=""; in makeascii()
137 z[lc++]=" unsigned char cmd; "; in makeascii()
138 z[lc++]=" float time;"; in makeascii()
139 z[lc++]=""; in makeascii()
140 z[lc++]="} csysi_noteinfo;"; in makeascii()
141 z[lc++]=""; in makeascii()
142 z[lc++]="csysi_noteinfo csysi_notestate[CSYSI_NOTESIZE];"; in makeascii()
143 z[lc++]=""; in makeascii()
144 z[lc++]="int csysi_noteoff_min; /* lowest pending noteoff */"; in makeascii()
145 z[lc++]="int csysi_noteoff_max; /* highest pending noteoff */"; in makeascii()
146 z[lc++]="int csysi_noteoff_num; /* number of pending noteoffs */"; in makeascii()
147 z[lc++]=""; in makeascii()
148 z[lc++]="/****************/"; in makeascii()
149 z[lc++]="/* timeout list */"; in makeascii()
150 z[lc++]="/****************/"; in makeascii()
151 z[lc++]=""; in makeascii()
152 z[lc++]="int csysi_noteready[CSYSI_NOTESIZE];"; in makeascii()
153 z[lc++]="int csysi_noteready_len;"; in makeascii()
154 z[lc++]=""; in makeascii()
155 z[lc++]="/***********/"; in makeascii()
156 z[lc++]="/* volume */"; in makeascii()
157 z[lc++]="/***********/"; in makeascii()
158 z[lc++]=""; in makeascii()
159 z[lc++]="#define CSYSI_VOLUME_DEFAULT 64"; in makeascii()
160 z[lc++]="#define CSYSI_VOLUME_MAX 112"; in makeascii()
161 z[lc++]="#define CSYSI_VOLUME_MIN 32"; in makeascii()
162 z[lc++]="#define CSYSI_VOLUME_INCREMENT 8"; in makeascii()
163 z[lc++]=""; in makeascii()
164 z[lc++]="int csysi_volume = CSYSI_VOLUME_DEFAULT;"; in makeascii()
165 z[lc++]=""; in makeascii()
166 z[lc++]="/********************/"; in makeascii()
167 z[lc++]="/* function externs */"; in makeascii()
168 z[lc++]="/********************/"; in makeascii()
169 z[lc++]=""; in makeascii()
170 z[lc++]="extern void csysi_signal_handler(int signum);"; in makeascii()
171 z[lc++]="extern void csysi_kbdmap_init(void);"; in makeascii()
172 z[lc++]=""; in makeascii()
173 z[lc++]=""; in makeascii()
174 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeascii()
175 z[lc++]="/* high-level functions: called by sfront engine */"; in makeascii()
176 z[lc++]="/*______________________________________________________________*/"; in makeascii()
177 z[lc++]=""; in makeascii()
178 z[lc++]="/****************************************************************/"; in makeascii()
179 z[lc++]="/* initialization routine for control */"; in makeascii()
180 z[lc++]="/****************************************************************/"; in makeascii()
181 z[lc++]=""; in makeascii()
182 z[lc++]="int csys_setup(void)"; in makeascii()
183 z[lc++]=" "; in makeascii()
184 z[lc++]="{"; in makeascii()
185 z[lc++]=" struct termios term_info;"; in makeascii()
186 z[lc++]=" int i;"; in makeascii()
187 z[lc++]=""; in makeascii()
188 z[lc++]=" /******************************/"; in makeascii()
189 z[lc++]=" /* initialize data structures */"; in makeascii()
190 z[lc++]=" /******************************/"; in makeascii()
191 z[lc++]=""; in makeascii()
192 z[lc++]=" csysi_kbdmap_init();"; in makeascii()
193 z[lc++]=""; in makeascii()
194 z[lc++]=" for (i = 0; i < CSYSI_NOTESIZE; i++)"; in makeascii()
195 z[lc++]=" csysi_notestate[i].cmd = CSYS_MIDI_NOTEOFF;"; in makeascii()
196 z[lc++]=""; in makeascii()
197 z[lc++]=" /*************************/"; in makeascii()
198 z[lc++]=" /* set up signal handler */"; in makeascii()
199 z[lc++]=" /*************************/"; in makeascii()
200 z[lc++]=""; in makeascii()
201 z[lc++]=" if ((NSYS_NET == 0) && (signal(SIGINT, csysi_signal_handler) == SIG_ERR))"; in makeascii()
202 z[lc++]=" {"; in makeascii()
203 z[lc++]=" printf(\"Error: Can't set up SIGINT signal handler\\n\");"; in makeascii()
204 z[lc++]=" return CSYS_ERROR;"; in makeascii()
205 z[lc++]=" }"; in makeascii()
206 z[lc++]=""; in makeascii()
207 z[lc++]=" /****************************************************/"; in makeascii()
208 z[lc++]=" /* set up terminal: no echo, single-character reads */"; in makeascii()
209 z[lc++]=" /****************************************************/"; in makeascii()
210 z[lc++]=""; in makeascii()
211 z[lc++]=" if (tcgetattr(STDIN_FILENO, &csysi_term_default))"; in makeascii()
212 z[lc++]=" {"; in makeascii()
213 z[lc++]=" printf(\"Error: Can't set up terminal (1).\\n\");"; in makeascii()
214 z[lc++]=" return CSYS_ERROR;"; in makeascii()
215 z[lc++]=" }"; in makeascii()
216 z[lc++]=""; in makeascii()
217 z[lc++]=" term_info = csysi_term_default;"; in makeascii()
218 z[lc++]=""; in makeascii()
219 z[lc++]=" term_info.c_lflag &= (~ICANON); "; in makeascii()
220 z[lc++]=" term_info.c_lflag &= (~ECHO);"; in makeascii()
221 z[lc++]=" term_info.c_cc[VTIME] = 0; "; in makeascii()
222 z[lc++]=" term_info.c_cc[VMIN] = 0;"; in makeascii()
223 z[lc++]=""; in makeascii()
224 z[lc++]=" if (tcsetattr(STDIN_FILENO, TCSANOW, &term_info))"; in makeascii()
225 z[lc++]=" {"; in makeascii()
226 z[lc++]=" printf(\"Error: Can't set up terminal (2).\\n\");"; in makeascii()
227 z[lc++]=" return CSYS_ERROR;"; in makeascii()
228 z[lc++]=" }"; in makeascii()
229 z[lc++]=""; in makeascii()
230 z[lc++]=" if (fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK))"; in makeascii()
231 z[lc++]=" {"; in makeascii()
232 z[lc++]=" printf(\"Error: Can't set stdin to O_NONBLOCK.\\n\");"; in makeascii()
233 z[lc++]=" return CSYS_ERROR;"; in makeascii()
234 z[lc++]=" }"; in makeascii()
235 z[lc++]=""; in makeascii()
236 z[lc++]=" /*********************/"; in makeascii()
237 z[lc++]=" /* user instructions */"; in makeascii()
238 z[lc++]=" /*********************/"; in makeascii()
239 z[lc++]=""; in makeascii()
240 z[lc++]="#if (!defined(ASYS_OUTDRIVER_LINUX))"; in makeascii()
241 z[lc++]=""; in makeascii()
242 z[lc++]=" fprintf(stderr, "; in makeascii()
243 z[lc++]=" \"\\nInput Driver Instructions for -cin ascii:\\n\");"; in makeascii()
244 z[lc++]=" fprintf(stderr, "; in makeascii()
245 z[lc++]=" \"{a-z}: notes, {0-9}: MIDI presets, {+,-} volume, cntrl-C exits.\\n\");"; in makeascii()
246 z[lc++]=""; in makeascii()
247 z[lc++]="#if (!defined(ASYS_OUTDRIVER_COREAUDIO))"; in makeascii()
248 z[lc++]=" fprintf(stderr, "; in makeascii()
249 z[lc++]=" \"If autorepeat interferes, try 'xset -r' to disable it.\\n\\n\");"; in makeascii()
250 z[lc++]="#endif"; in makeascii()
251 z[lc++]=""; in makeascii()
252 z[lc++]="#endif"; in makeascii()
253 z[lc++]=" "; in makeascii()
254 z[lc++]=" return CSYS_DONE;"; in makeascii()
255 z[lc++]="}"; in makeascii()
256 z[lc++]=""; in makeascii()
257 z[lc++]="/****************************************************************/"; in makeascii()
258 z[lc++]="/* polling routine for new data */"; in makeascii()
259 z[lc++]="/****************************************************************/"; in makeascii()
260 z[lc++]=""; in makeascii()
261 z[lc++]="int csys_newdata(void)"; in makeascii()
262 z[lc++]=" "; in makeascii()
263 z[lc++]="{"; in makeascii()
264 z[lc++]=" int i, bottom, top;"; in makeascii()
265 z[lc++]=" int ret = CSYS_NONE;"; in makeascii()
266 z[lc++]=""; in makeascii()
267 z[lc++]=" if (csysi_no_interrupt)"; in makeascii()
268 z[lc++]=" {"; in makeascii()
269 z[lc++]=" /* see if any NoteOn's ready to be turned off */"; in makeascii()
270 z[lc++]=""; in makeascii()
271 z[lc++]=" if (csysi_noteoff_num)"; in makeascii()
272 z[lc++]=" {"; in makeascii()
273 z[lc++]=" csysi_noteready_len = 0;"; in makeascii()
274 z[lc++]=" top = bottom = -1;"; in makeascii()
275 z[lc++]=" for (i = csysi_noteoff_min; i <= csysi_noteoff_max; i++)"; in makeascii()
276 z[lc++]=" if (csysi_notestate[i].cmd == CSYS_MIDI_NOTEON)"; in makeascii()
277 z[lc++]=" {"; in makeascii()
278 z[lc++]=" if (csysi_notestate[i].time > EV(absolutetime))"; in makeascii()
279 z[lc++]=" {"; in makeascii()
280 z[lc++]=" if (bottom < 0)"; in makeascii()
281 z[lc++]=" bottom = i;"; in makeascii()
282 z[lc++]=" top = i;"; in makeascii()
283 z[lc++]=" }"; in makeascii()
284 z[lc++]=" else"; in makeascii()
285 z[lc++]=" {"; in makeascii()
286 z[lc++]=" csysi_notestate[i].cmd = CSYS_MIDI_NOTEOFF;"; in makeascii()
287 z[lc++]=" csysi_noteready[csysi_noteready_len++] = i;"; in makeascii()
288 z[lc++]=" csysi_noteoff_num--;"; in makeascii()
289 z[lc++]=" ret = CSYS_MIDIEVENTS;"; in makeascii()
290 z[lc++]=" }"; in makeascii()
291 z[lc++]=" }"; in makeascii()
292 z[lc++]=" csysi_noteoff_min = bottom;"; in makeascii()
293 z[lc++]=" csysi_noteoff_max = top;"; in makeascii()
294 z[lc++]=" }"; in makeascii()
295 z[lc++]=""; in makeascii()
296 z[lc++]=" /* check for new keypresses */"; in makeascii()
297 z[lc++]=""; in makeascii()
298 z[lc++]=" csysi_inbuff_cnt = 0;"; in makeascii()
299 z[lc++]=" csysi_inbuff_len = read(STDIN_FILENO, csysi_inbuff, CSYSI_INBUFF_SIZE);"; in makeascii()
300 z[lc++]=" csysi_inbuff_len = (csysi_inbuff_len >= 0) ? csysi_inbuff_len : 0;"; in makeascii()
301 z[lc++]=" return (csysi_inbuff_len ? CSYS_MIDIEVENTS : ret);"; in makeascii()
302 z[lc++]=" }"; in makeascii()
303 z[lc++]=" else"; in makeascii()
304 z[lc++]=" return CSYS_MIDIEVENTS;"; in makeascii()
305 z[lc++]="}"; in makeascii()
306 z[lc++]=""; in makeascii()
307 z[lc++]="/****************************************************************/"; in makeascii()
308 z[lc++]="/* processes a MIDI event */"; in makeascii()
309 z[lc++]="/****************************************************************/"; in makeascii()
310 z[lc++]=""; in makeascii()
311 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makeascii()
312 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makeascii()
313 z[lc++]=" float * fval)"; in makeascii()
314 z[lc++]=""; in makeascii()
315 z[lc++]="{"; in makeascii()
316 z[lc++]=" unsigned char i;"; in makeascii()
317 z[lc++]=""; in makeascii()
318 z[lc++]=" if (csysi_no_interrupt)"; in makeascii()
319 z[lc++]=" {"; in makeascii()
320 z[lc++]=" *extchan = 0;"; in makeascii()
321 z[lc++]=""; in makeascii()
322 z[lc++]=" /* check for new NoteOffs */"; in makeascii()
323 z[lc++]=""; in makeascii()
324 z[lc++]=" if (csysi_noteready_len)"; in makeascii()
325 z[lc++]=" {"; in makeascii()
326 z[lc++]=" csysi_noteready_len--;"; in makeascii()
327 z[lc++]=" *cmd = CSYS_MIDI_NOTEOFF;"; in makeascii()
328 z[lc++]=" *ndata = csysi_noteready[csysi_noteready_len];"; in makeascii()
329 z[lc++]=" *vdata = 0;"; in makeascii()
330 z[lc++]=" return ((csysi_inbuff_len || csysi_noteready_len) ? "; in makeascii()
331 z[lc++]=" CSYS_MIDIEVENTS : CSYS_NONE);"; in makeascii()
332 z[lc++]=" }"; in makeascii()
333 z[lc++]=""; in makeascii()
334 z[lc++]=" /* handle new keypresses */"; in makeascii()
335 z[lc++]=""; in makeascii()
336 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makeascii()
337 z[lc++]=""; in makeascii()
338 z[lc++]=" while (csysi_inbuff_cnt < csysi_inbuff_len)"; in makeascii()
339 z[lc++]=" switch (csysi_map[(i = csysi_inbuff[csysi_inbuff_cnt++])].cmd) {"; in makeascii()
340 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makeascii()
341 z[lc++]=""; in makeascii()
342 z[lc++]=" *ndata = csysi_map[i].ndata;"; in makeascii()
343 z[lc++]=""; in makeascii()
344 z[lc++]=" if (csysi_notestate[*ndata].cmd == CSYS_MIDI_NOTEOFF)"; in makeascii()
345 z[lc++]=" {"; in makeascii()
346 z[lc++]=" *cmd = CSYS_MIDI_NOTEON;"; in makeascii()
347 z[lc++]=" *vdata = csysi_volume;"; in makeascii()
348 z[lc++]=" "; in makeascii()
349 z[lc++]=" csysi_notestate[*ndata].cmd = CSYS_MIDI_NOTEON;"; in makeascii()
350 z[lc++]=" csysi_notestate[*ndata].time = EV(absolutetime) + CSYSI_DURATION;"; in makeascii()
351 z[lc++]=" "; in makeascii()
352 z[lc++]=" if (csysi_noteoff_num++)"; in makeascii()
353 z[lc++]=" {"; in makeascii()
354 z[lc++]=" if (*ndata > csysi_noteoff_max)"; in makeascii()
355 z[lc++]=" csysi_noteoff_max = *ndata;"; in makeascii()
356 z[lc++]=" else"; in makeascii()
357 z[lc++]=" if (*ndata < csysi_noteoff_min)"; in makeascii()
358 z[lc++]=" csysi_noteoff_min = *ndata;"; in makeascii()
359 z[lc++]=" }"; in makeascii()
360 z[lc++]=" else"; in makeascii()
361 z[lc++]=" csysi_noteoff_min = csysi_noteoff_max = *ndata;"; in makeascii()
362 z[lc++]=" return ((csysi_inbuff_cnt < csysi_inbuff_len) ? "; in makeascii()
363 z[lc++]=" CSYS_MIDIEVENTS : CSYS_NONE);"; in makeascii()
364 z[lc++]=" }"; in makeascii()
365 z[lc++]=""; in makeascii()
366 z[lc++]=" break;"; in makeascii()
367 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makeascii()
368 z[lc++]=" *cmd = CSYS_MIDI_PROGRAM;"; in makeascii()
369 z[lc++]=" *ndata = csysi_map[i].ndata;"; in makeascii()
370 z[lc++]=" return ((csysi_inbuff_cnt < csysi_inbuff_len) ? "; in makeascii()
371 z[lc++]=" CSYS_MIDIEVENTS : CSYS_NONE);"; in makeascii()
372 z[lc++]=" break; "; in makeascii()
373 z[lc++]=" case CSYS_MIDI_CC:"; in makeascii()
374 z[lc++]=" if (csysi_map[i].ndata)"; in makeascii()
375 z[lc++]=" {"; in makeascii()
376 z[lc++]=" csysi_volume += CSYSI_VOLUME_INCREMENT;"; in makeascii()
377 z[lc++]=" if (csysi_volume > CSYSI_VOLUME_MAX)"; in makeascii()
378 z[lc++]=" csysi_volume = CSYSI_VOLUME_MAX;"; in makeascii()
379 z[lc++]=" }"; in makeascii()
380 z[lc++]=" else"; in makeascii()
381 z[lc++]=" {"; in makeascii()
382 z[lc++]=" csysi_volume -= CSYSI_VOLUME_INCREMENT;"; in makeascii()
383 z[lc++]=" if (csysi_volume < CSYSI_VOLUME_MIN)"; in makeascii()
384 z[lc++]=" csysi_volume = CSYSI_VOLUME_MIN;"; in makeascii()
385 z[lc++]=" }"; in makeascii()
386 z[lc++]=" break; "; in makeascii()
387 z[lc++]=" case CSYS_MIDI_NOOP:"; in makeascii()
388 z[lc++]=" break;"; in makeascii()
389 z[lc++]=" default:"; in makeascii()
390 z[lc++]=" break;"; in makeascii()
391 z[lc++]=" }"; in makeascii()
392 z[lc++]=""; in makeascii()
393 z[lc++]=" return CSYS_NONE;"; in makeascii()
394 z[lc++]=" }"; in makeascii()
395 z[lc++]=""; in makeascii()
396 z[lc++]=" /* end session if a cntrl-C clears csysi_no_interrupt */"; in makeascii()
397 z[lc++]=""; in makeascii()
398 z[lc++]=" *cmd = CSYS_MIDI_ENDTIME;"; in makeascii()
399 z[lc++]=" *fval = EV(scorebeats);"; in makeascii()
400 z[lc++]=" return CSYS_NONE;"; in makeascii()
401 z[lc++]="}"; in makeascii()
402 z[lc++]=""; in makeascii()
403 z[lc++]="/****************************************************************/"; in makeascii()
404 z[lc++]="/* closing routine for control */"; in makeascii()
405 z[lc++]="/****************************************************************/"; in makeascii()
406 z[lc++]=""; in makeascii()
407 z[lc++]="void csys_shutdown(void)"; in makeascii()
408 z[lc++]=" "; in makeascii()
409 z[lc++]="{"; in makeascii()
410 z[lc++]=" tcsetattr(STDIN_FILENO, TCSANOW, &csysi_term_default);"; in makeascii()
411 z[lc++]="}"; in makeascii()
412 z[lc++]=""; in makeascii()
413 z[lc++]=""; in makeascii()
414 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeascii()
415 z[lc++]="/* mid-level functions: called by top-level driver functions */"; in makeascii()
416 z[lc++]="/*______________________________________________________________*/"; in makeascii()
417 z[lc++]=""; in makeascii()
418 z[lc++]="/****************************************************************/"; in makeascii()
419 z[lc++]="/* initializes keyboard map */"; in makeascii()
420 z[lc++]="/****************************************************************/"; in makeascii()
421 z[lc++]=""; in makeascii()
422 z[lc++]="void csysi_kbdmap_init(void)"; in makeascii()
423 z[lc++]=""; in makeascii()
424 z[lc++]="{"; in makeascii()
425 z[lc++]=" int i;"; in makeascii()
426 z[lc++]=""; in makeascii()
427 z[lc++]=" /* MIDI note number map */"; in makeascii()
428 z[lc++]=""; in makeascii()
429 z[lc++]=" csysi_map['z'].ndata = csysi_map['a'].ndata = csysi_map['q'].ndata = 48; "; in makeascii()
430 z[lc++]=" csysi_map['Z'].ndata = csysi_map['A'].ndata = csysi_map['Q'].ndata = 48; "; in makeascii()
431 z[lc++]=" csysi_map['x'].ndata = csysi_map['s'].ndata = csysi_map['w'].ndata = 50; "; in makeascii()
432 z[lc++]=" csysi_map['X'].ndata = csysi_map['S'].ndata = csysi_map['W'].ndata = 50; "; in makeascii()
433 z[lc++]=" csysi_map['c'].ndata = csysi_map['d'].ndata = csysi_map['e'].ndata = 52; "; in makeascii()
434 z[lc++]=" csysi_map['C'].ndata = csysi_map['D'].ndata = csysi_map['E'].ndata = 52; "; in makeascii()
435 z[lc++]=" csysi_map['v'].ndata = csysi_map['f'].ndata = csysi_map['r'].ndata = 55; "; in makeascii()
436 z[lc++]=" csysi_map['V'].ndata = csysi_map['F'].ndata = csysi_map['R'].ndata = 55; "; in makeascii()
437 z[lc++]=" csysi_map['b'].ndata = csysi_map['g'].ndata = csysi_map['t'].ndata = 57;"; in makeascii()
438 z[lc++]=" csysi_map['B'].ndata = csysi_map['G'].ndata = csysi_map['T'].ndata = 57;"; in makeascii()
439 z[lc++]=" csysi_map['n'].ndata = csysi_map['h'].ndata = csysi_map['y'].ndata = 60; "; in makeascii()
440 z[lc++]=" csysi_map['N'].ndata = csysi_map['H'].ndata = csysi_map['Y'].ndata = 60; "; in makeascii()
441 z[lc++]=" csysi_map['m'].ndata = csysi_map['j'].ndata = csysi_map['u'].ndata = 62; "; in makeascii()
442 z[lc++]=" csysi_map['M'].ndata = csysi_map['J'].ndata = csysi_map['U'].ndata = 62; "; in makeascii()
443 z[lc++]=" csysi_map[','].ndata = csysi_map['k'].ndata = csysi_map['i'].ndata = 64; "; in makeascii()
444 z[lc++]=" csysi_map['<'].ndata = csysi_map['K'].ndata = csysi_map['I'].ndata = 64; "; in makeascii()
445 z[lc++]=" csysi_map['.'].ndata = csysi_map['l'].ndata = csysi_map['o'].ndata = 67; "; in makeascii()
446 z[lc++]=" csysi_map['>'].ndata = csysi_map['L'].ndata = csysi_map['O'].ndata = 67; "; in makeascii()
447 z[lc++]=" csysi_map['/'].ndata = csysi_map[';'].ndata = csysi_map['p'].ndata = 69;"; in makeascii()
448 z[lc++]=" csysi_map['\\?'].ndata = csysi_map[':'].ndata = csysi_map['P'].ndata = 69;"; in makeascii()
449 z[lc++]=" csysi_map['\\''].ndata = csysi_map['['].ndata = 72; "; in makeascii()
450 z[lc++]=" csysi_map['\"'].ndata = csysi_map['{'].ndata = 72; "; in makeascii()
451 z[lc++]=" csysi_map[']'].ndata = 74; "; in makeascii()
452 z[lc++]=" csysi_map['}'].ndata = 74; "; in makeascii()
453 z[lc++]=" csysi_map['\\\\'].ndata = csysi_map['\\n'].ndata = 76; "; in makeascii()
454 z[lc++]=" csysi_map['|'].ndata = 76; "; in makeascii()
455 z[lc++]=" csysi_map[' '].ndata = 48;"; in makeascii()
456 z[lc++]=""; in makeascii()
457 z[lc++]=" /* set command type */"; in makeascii()
458 z[lc++]=""; in makeascii()
459 z[lc++]=" for (i = 0; i < CSYSI_MAPSIZE; i++)"; in makeascii()
460 z[lc++]=" {"; in makeascii()
461 z[lc++]=" if (csysi_map[i].ndata)"; in makeascii()
462 z[lc++]=" csysi_map[i].cmd = CSYS_MIDI_NOTEON;"; in makeascii()
463 z[lc++]=" else"; in makeascii()
464 z[lc++]=" if (isdigit(i))"; in makeascii()
465 z[lc++]=" {"; in makeascii()
466 z[lc++]=" csysi_map[i].cmd = CSYS_MIDI_PROGRAM;"; in makeascii()
467 z[lc++]=" csysi_map[i].ndata = (i - '0');"; in makeascii()
468 z[lc++]=" }"; in makeascii()
469 z[lc++]=" else"; in makeascii()
470 z[lc++]=" if ((i == '+') || (i == '_') || (i == '-') || (i == '='))"; in makeascii()
471 z[lc++]=" {"; in makeascii()
472 z[lc++]=" csysi_map[i].cmd = CSYS_MIDI_CC;"; in makeascii()
473 z[lc++]=" csysi_map[i].ndata = ((i == '+') || (i == '='));"; in makeascii()
474 z[lc++]=" }"; in makeascii()
475 z[lc++]=" else"; in makeascii()
476 z[lc++]=" csysi_map[i].cmd = CSYS_MIDI_NOOP;"; in makeascii()
477 z[lc++]=" }"; in makeascii()
478 z[lc++]=""; in makeascii()
479 z[lc++]="}"; in makeascii()
480 z[lc++]=""; in makeascii()
481 z[lc++]=""; in makeascii()
482 z[lc++]=""; in makeascii()
483 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeascii()
484 z[lc++]="/* low-level functions */"; in makeascii()
485 z[lc++]="/*______________________________________________________________*/"; in makeascii()
486 z[lc++]=""; in makeascii()
487 z[lc++]="/****************************************************************/"; in makeascii()
488 z[lc++]="/* SIGINT signal handler */"; in makeascii()
489 z[lc++]="/****************************************************************/"; in makeascii()
490 z[lc++]=""; in makeascii()
491 z[lc++]="void csysi_signal_handler(int signum)"; in makeascii()
492 z[lc++]=""; in makeascii()
493 z[lc++]="{"; in makeascii()
494 z[lc++]=""; in makeascii()
495 z[lc++]=" if (csysi_no_interrupt)"; in makeascii()
496 z[lc++]=" {"; in makeascii()
497 z[lc++]=" csysi_no_interrupt = 0;"; in makeascii()
498 z[lc++]=" }"; in makeascii()
499 z[lc++]=" else"; in makeascii()
500 z[lc++]=" {"; in makeascii()
501 z[lc++]=" exit(129); /* emergency shutdown */"; in makeascii()
502 z[lc++]=" }"; in makeascii()
503 z[lc++]=""; in makeascii()
504 z[lc++]="}"; in makeascii()
505 z[lc++]=""; in makeascii()
506 z[lc++]=""; in makeascii()
515 z[lc++]=""; in makegliss()
516 z[lc++]=""; in makegliss()
517 z[lc++]="/*"; in makegliss()
518 z[lc++]="# Sfront, a SAOL to C translator "; in makegliss()
519 z[lc++]="# This file: fast note gliss control driver for sfront"; in makegliss()
520 z[lc++]="#"; in makegliss()
521 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makegliss()
522 z[lc++]="# All rights reserved."; in makegliss()
523 z[lc++]="#"; in makegliss()
524 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makegliss()
525 z[lc++]="# modification, are permitted provided that the following conditions are"; in makegliss()
526 z[lc++]="# met:"; in makegliss()
527 z[lc++]="#"; in makegliss()
528 z[lc++]="# Redistributions of source code must retain the above copyright"; in makegliss()
529 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makegliss()
530 z[lc++]="#"; in makegliss()
531 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makegliss()
532 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makegliss()
533 z[lc++]="# documentation and/or other materials provided with the distribution."; in makegliss()
534 z[lc++]="#"; in makegliss()
535 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makegliss()
536 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makegliss()
537 z[lc++]="# derived from this software without specific prior written permission."; in makegliss()
538 z[lc++]="#"; in makegliss()
539 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makegliss()
540 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makegliss()
541 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makegliss()
542 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makegliss()
543 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makegliss()
544 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makegliss()
545 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makegliss()
546 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makegliss()
547 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makegliss()
548 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makegliss()
549 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makegliss()
550 z[lc++]="#"; in makegliss()
551 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makegliss()
552 z[lc++]="*/"; in makegliss()
553 z[lc++]=""; in makegliss()
554 z[lc++]=""; in makegliss()
555 z[lc++]=""; in makegliss()
556 z[lc++]="#define CSYSI_BOTTOMNOTE 20"; in makegliss()
557 z[lc++]="#define CSYSI_TOPNOTE 100"; in makegliss()
558 z[lc++]="#define CSYSI_VELOCITY 64"; in makegliss()
559 z[lc++]="#define CSYSI_LENGTH 60"; in makegliss()
560 z[lc++]="#define CSYSI_NUMPFIELDS 2"; in makegliss()
561 z[lc++]="/****************************************************************/"; in makegliss()
562 z[lc++]="/****************************************************************/"; in makegliss()
563 z[lc++]="/* glissando control driver for sfront */ "; in makegliss()
564 z[lc++]="/****************************************************************/"; in makegliss()
565 z[lc++]=""; in makegliss()
566 z[lc++]="int csysi_flag = CSYSI_LENGTH;"; in makegliss()
567 z[lc++]="int csysi_on = 0;"; in makegliss()
568 z[lc++]="int csysi_note = CSYSI_BOTTOMNOTE;"; in makegliss()
569 z[lc++]="int csysi_noteinc = 1;"; in makegliss()
570 z[lc++]="int csysi_instr = 1;"; in makegliss()
571 z[lc++]="float csysi_pfields[CSYSI_NUMPFIELDS];"; in makegliss()
572 z[lc++]=""; in makegliss()
573 z[lc++]="/****************************************************************/"; in makegliss()
574 z[lc++]="/* initialization routine for control */"; in makegliss()
575 z[lc++]="/****************************************************************/"; in makegliss()
576 z[lc++]=""; in makegliss()
577 z[lc++]="int csys_setup(void)"; in makegliss()
578 z[lc++]=" "; in makegliss()
579 z[lc++]="{"; in makegliss()
580 z[lc++]=" return CSYS_DONE;"; in makegliss()
581 z[lc++]="}"; in makegliss()
582 z[lc++]=""; in makegliss()
583 z[lc++]="/****************************************************************/"; in makegliss()
584 z[lc++]="/* polling routine for new data */"; in makegliss()
585 z[lc++]="/****************************************************************/"; in makegliss()
586 z[lc++]=""; in makegliss()
587 z[lc++]="int csys_newdata(void)"; in makegliss()
588 z[lc++]=" "; in makegliss()
589 z[lc++]="{"; in makegliss()
590 z[lc++]=" if (csysi_flag)"; in makegliss()
591 z[lc++]=" {"; in makegliss()
592 z[lc++]=" csysi_flag--;"; in makegliss()
593 z[lc++]=" return CSYS_NONE;"; in makegliss()
594 z[lc++]=" }"; in makegliss()
595 z[lc++]=""; in makegliss()
596 z[lc++]=" csysi_flag = CSYSI_LENGTH;"; in makegliss()
597 z[lc++]=" if (csysi_noteinc == 1)"; in makegliss()
598 z[lc++]=" {"; in makegliss()
599 z[lc++]=" csysi_on = !csysi_on;"; in makegliss()
600 z[lc++]=" return CSYS_MIDIEVENTS;"; in makegliss()
601 z[lc++]=" }"; in makegliss()
602 z[lc++]=" else"; in makegliss()
603 z[lc++]=" return CSYS_SASLEVENTS;"; in makegliss()
604 z[lc++]=""; in makegliss()
605 z[lc++]="}"; in makegliss()
606 z[lc++]=""; in makegliss()
607 z[lc++]="/****************************************************************/"; in makegliss()
608 z[lc++]="/* processes a MIDI event */"; in makegliss()
609 z[lc++]="/****************************************************************/"; in makegliss()
610 z[lc++]=""; in makegliss()
611 z[lc++]=""; in makegliss()
612 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makegliss()
613 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makegliss()
614 z[lc++]=" float * fval)"; in makegliss()
615 z[lc++]=""; in makegliss()
616 z[lc++]="{"; in makegliss()
617 z[lc++]=""; in makegliss()
618 z[lc++]=" if (csysi_on)"; in makegliss()
619 z[lc++]=" {"; in makegliss()
620 z[lc++]=" *cmd = CSYS_MIDI_NOTEON;"; in makegliss()
621 z[lc++]=" *ndata = csysi_note;"; in makegliss()
622 z[lc++]=" }"; in makegliss()
623 z[lc++]=" else"; in makegliss()
624 z[lc++]=" {"; in makegliss()
625 z[lc++]=" *cmd = CSYS_MIDI_NOTEOFF;"; in makegliss()
626 z[lc++]=" *ndata = csysi_note;"; in makegliss()
627 z[lc++]=" csysi_note += csysi_noteinc;"; in makegliss()
628 z[lc++]=" if ((csysi_note == CSYSI_TOPNOTE)||(csysi_note == CSYSI_BOTTOMNOTE))"; in makegliss()
629 z[lc++]=" {"; in makegliss()
630 z[lc++]=" csysi_noteinc *= -1;"; in makegliss()
631 z[lc++]=" }"; in makegliss()
632 z[lc++]=" }"; in makegliss()
633 z[lc++]=""; in makegliss()
634 z[lc++]=" *vdata = CSYSI_VELOCITY;"; in makegliss()
635 z[lc++]=" *extchan = 0;"; in makegliss()
636 z[lc++]=" return CSYS_NONE;"; in makegliss()
637 z[lc++]=""; in makegliss()
638 z[lc++]="}"; in makegliss()
639 z[lc++]=""; in makegliss()
640 z[lc++]=""; in makegliss()
641 z[lc++]="/****************************************************************/"; in makegliss()
642 z[lc++]="/* processes a SASL event */"; in makegliss()
643 z[lc++]="/****************************************************************/"; in makegliss()
644 z[lc++]=""; in makegliss()
645 z[lc++]="int csys_saslevent(unsigned char * cmd, unsigned char * priority,"; in makegliss()
646 z[lc++]=" unsigned short * id, unsigned short * label,"; in makegliss()
647 z[lc++]=" float * fval, unsigned int * pnum, float ** p)"; in makegliss()
648 z[lc++]=""; in makegliss()
649 z[lc++]="{"; in makegliss()
650 z[lc++]=""; in makegliss()
651 z[lc++]=" if (csysi_instr)"; in makegliss()
652 z[lc++]=" {"; in makegliss()
653 z[lc++]=" csysi_instr = 0;"; in makegliss()
654 z[lc++]=" *cmd = CSYS_SASL_INSTR;"; in makegliss()
655 z[lc++]=" *priority = 0;"; in makegliss()
656 z[lc++]=" *id = CSYS_SASL_INSTR_spiano;"; in makegliss()
657 z[lc++]=" *label = 5;"; in makegliss()
658 z[lc++]=" *fval = 0.10;"; in makegliss()
659 z[lc++]=" *pnum = CSYSI_NUMPFIELDS;"; in makegliss()
660 z[lc++]=" csysi_pfields[0] = csysi_note;"; in makegliss()
661 z[lc++]=" csysi_pfields[1] = CSYSI_VELOCITY;"; in makegliss()
662 z[lc++]=" *p = &csysi_pfields[0];"; in makegliss()
663 z[lc++]=" "; in makegliss()
664 z[lc++]=" csysi_note += csysi_noteinc;"; in makegliss()
665 z[lc++]=" if ((csysi_note == CSYSI_TOPNOTE)||(csysi_note == CSYSI_BOTTOMNOTE))"; in makegliss()
666 z[lc++]=" {"; in makegliss()
667 z[lc++]=" csysi_noteinc *= -1;"; in makegliss()
668 z[lc++]=" }"; in makegliss()
669 z[lc++]=" return CSYS_SASLEVENTS;"; in makegliss()
670 z[lc++]=" }"; in makegliss()
671 z[lc++]=" else"; in makegliss()
672 z[lc++]=" {"; in makegliss()
673 z[lc++]=" csysi_instr = 1;"; in makegliss()
674 z[lc++]=" *cmd = CSYS_SASL_CONTROL;"; in makegliss()
675 z[lc++]=" *priority = 0;"; in makegliss()
676 z[lc++]=" *id = CSYS_SASL_NOINSTR;"; in makegliss()
677 z[lc++]=" *label = 5;"; in makegliss()
678 z[lc++]=" *fval = 0;"; in makegliss()
679 z[lc++]=" *pnum = CSYS_SASL_GBL_pedal;"; in makegliss()
680 z[lc++]=" return CSYS_NONE;"; in makegliss()
681 z[lc++]=" }"; in makegliss()
682 z[lc++]="}"; in makegliss()
683 z[lc++]=""; in makegliss()
684 z[lc++]=" "; in makegliss()
685 z[lc++]="/****************************************************************/"; in makegliss()
686 z[lc++]="/* closing routine for control */"; in makegliss()
687 z[lc++]="/****************************************************************/"; in makegliss()
688 z[lc++]=""; in makegliss()
689 z[lc++]="void csys_shutdown(void)"; in makegliss()
690 z[lc++]=" "; in makegliss()
691 z[lc++]="{"; in makegliss()
692 z[lc++]="}"; in makegliss()
693 z[lc++]=""; in makegliss()
702 z[lc++]=""; in makelinmidi()
703 z[lc++]="/*"; in makelinmidi()
704 z[lc++]="# Sfront, a SAOL to C translator "; in makelinmidi()
705 z[lc++]="# This file: Merged linux/freebsd MIDI Input control driver "; in makelinmidi()
706 z[lc++]="#"; in makelinmidi()
707 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makelinmidi()
708 z[lc++]="# All rights reserved."; in makelinmidi()
709 z[lc++]="#"; in makelinmidi()
710 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makelinmidi()
711 z[lc++]="# modification, are permitted provided that the following conditions are"; in makelinmidi()
712 z[lc++]="# met:"; in makelinmidi()
713 z[lc++]="#"; in makelinmidi()
714 z[lc++]="# Redistributions of source code must retain the above copyright"; in makelinmidi()
715 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makelinmidi()
716 z[lc++]="#"; in makelinmidi()
717 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makelinmidi()
718 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makelinmidi()
719 z[lc++]="# documentation and/or other materials provided with the distribution."; in makelinmidi()
720 z[lc++]="#"; in makelinmidi()
721 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makelinmidi()
722 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makelinmidi()
723 z[lc++]="# derived from this software without specific prior written permission."; in makelinmidi()
724 z[lc++]="#"; in makelinmidi()
725 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makelinmidi()
726 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makelinmidi()
727 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makelinmidi()
728 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makelinmidi()
729 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makelinmidi()
730 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makelinmidi()
731 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makelinmidi()
732 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makelinmidi()
733 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makelinmidi()
734 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makelinmidi()
735 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makelinmidi()
736 z[lc++]="#"; in makelinmidi()
737 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makelinmidi()
738 z[lc++]="*/"; in makelinmidi()
739 z[lc++]=""; in makelinmidi()
740 z[lc++]=""; in makelinmidi()
741 z[lc++]="#include <fcntl.h>"; in makelinmidi()
742 z[lc++]="#include <signal.h> "; in makelinmidi()
743 z[lc++]="#include <sys/time.h> "; in makelinmidi()
744 z[lc++]=""; in makelinmidi()
745 z[lc++]="/****************************************************************/"; in makelinmidi()
746 z[lc++]="/****************************************************************/"; in makelinmidi()
747 z[lc++]="/* MIDI Input control driver for sfront */ "; in makelinmidi()
748 z[lc++]="/****************************************************************/"; in makelinmidi()
749 z[lc++]=""; in makelinmidi()
750 z[lc++]="#ifndef CSYSI_MIDIDEV"; in makelinmidi()
751 z[lc++]="#define CSYSI_MIDIDEV \"/dev/midi00\""; in makelinmidi()
752 z[lc++]="#endif"; in makelinmidi()
753 z[lc++]=""; in makelinmidi()
754 z[lc++]="#define CSYSI_BUFFSIZE 1024"; in makelinmidi()
755 z[lc++]="#define CSYSI_SYSEX_EOX 0xF7"; in makelinmidi()
756 z[lc++]=""; in makelinmidi()
757 z[lc++]="/* set CSYSI_DELAY to 0 to wait for partially completed MIDI commands */"; in makelinmidi()
758 z[lc++]="/* waiting for commands decreases variance of the latency, at the */"; in makelinmidi()
759 z[lc++]="/* expense of losing computation cycles */"; in makelinmidi()
760 z[lc++]=""; in makelinmidi()
761 z[lc++]="#define CSYSI_DELAY 1"; in makelinmidi()
762 z[lc++]=""; in makelinmidi()
763 z[lc++]="/* variables for SIGALRM for MIDI overrun */"; in makelinmidi()
764 z[lc++]=""; in makelinmidi()
765 z[lc++]="/* period for interrupt: 320us per MIDI byte @ 128 bytes, minus safety zone */"; in makelinmidi()
766 z[lc++]=""; in makelinmidi()
767 z[lc++]="#define CSYSI_ALARMPERIOD 40000"; in makelinmidi()
768 z[lc++]=""; in makelinmidi()
769 z[lc++]="/* maximum number of I/O retries before termination */"; in makelinmidi()
770 z[lc++]=""; in makelinmidi()
771 z[lc++]="#define CSYSI_MAXRETRY 256"; in makelinmidi()
772 z[lc++]=""; in makelinmidi()
773 z[lc++]="sigset_t csysi_overrun_mask; /* for masking off overrun interrupt */"; in makelinmidi()
774 z[lc++]="struct sigaction csysi_overrun_action; /* for setting up overrun interrupt */"; in makelinmidi()
775 z[lc++]="struct itimerval csysi_overrun_timer; /* for setting up overrun timer */"; in makelinmidi()
776 z[lc++]=""; in makelinmidi()
777 z[lc++]="/* flag for new note on/off */"; in makelinmidi()
778 z[lc++]=""; in makelinmidi()
779 z[lc++]="int csysi_newnote = 0;"; in makelinmidi()
780 z[lc++]=""; in makelinmidi()
781 z[lc++]="/* MIDI parsing state variables */"; in makelinmidi()
782 z[lc++]=""; in makelinmidi()
783 z[lc++]="int csysi_midi = 0;"; in makelinmidi()
784 z[lc++]=""; in makelinmidi()
785 z[lc++]="unsigned char csysi_hold[CSYSI_BUFFSIZE];"; in makelinmidi()
786 z[lc++]="int csysi_holdidx = 0;"; in makelinmidi()
787 z[lc++]=""; in makelinmidi()
788 z[lc++]="unsigned char csysi_data[CSYSI_BUFFSIZE];"; in makelinmidi()
789 z[lc++]=""; in makelinmidi()
790 z[lc++]="int csysi_len;"; in makelinmidi()
791 z[lc++]="int csysi_cnt;"; in makelinmidi()
792 z[lc++]="unsigned char csysi_cmd;"; in makelinmidi()
793 z[lc++]="unsigned char csysi_num;"; in makelinmidi()
794 z[lc++]="unsigned short csysi_extchan;"; in makelinmidi()
795 z[lc++]="unsigned char csysi_ndata = 0xFF;"; in makelinmidi()
796 z[lc++]=""; in makelinmidi()
797 z[lc++]="/****************************************************************/"; in makelinmidi()
798 z[lc++]="/* generic error-checking wrappers */"; in makelinmidi()
799 z[lc++]="/****************************************************************/"; in makelinmidi()
800 z[lc++]=""; in makelinmidi()
801 z[lc++]="#define CSYSI_ERROR_RETURN(x) do {\\"; in makelinmidi()
802 z[lc++]=" fprintf(stderr, \" Error: %s.\\n\", x);\\"; in makelinmidi()
803 z[lc++]=" fprintf(stderr, \" Errno Message: %s\\n\\n\", strerror(errno));\\"; in makelinmidi()
804 z[lc++]=" return CSYS_ERROR; } while (0)"; in makelinmidi()
805 z[lc++]=""; in makelinmidi()
806 z[lc++]="#define CSYSI_ERROR_TERMINATE(x) do {\\"; in makelinmidi()
807 z[lc++]=" fprintf(stderr, \" Runtime Errno Message: %s\\n\", strerror(errno));\\"; in makelinmidi()
808 z[lc++]=" epr(0,NULL,NULL, \"Soundcard error -- \" x );} while (0)"; in makelinmidi()
809 z[lc++]=""; in makelinmidi()
810 z[lc++]=""; in makelinmidi()
811 z[lc++]="/****************************************************************/"; in makelinmidi()
812 z[lc++]="/* signal handler to catch MIDI buffer overruns */"; in makelinmidi()
813 z[lc++]="/****************************************************************/"; in makelinmidi()
814 z[lc++]=""; in makelinmidi()
815 z[lc++]="void csysi_overrun_handler(int signum) "; in makelinmidi()
816 z[lc++]=""; in makelinmidi()
817 z[lc++]="{ "; in makelinmidi()
818 z[lc++]=" int retry = 0;"; in makelinmidi()
819 z[lc++]=" int len;"; in makelinmidi()
820 z[lc++]=""; in makelinmidi()
821 z[lc++]=" while ((len = read(csysi_midi, &(csysi_hold[csysi_holdidx]), "; in makelinmidi()
822 z[lc++]=" CSYSI_BUFFSIZE-csysi_holdidx)) < 0)"; in makelinmidi()
823 z[lc++]=" {"; in makelinmidi()
824 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makelinmidi()
825 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csysi_overrun_handler\");"; in makelinmidi()
826 z[lc++]=""; in makelinmidi()
827 z[lc++]=" if (errno == EAGAIN) /* no data ready */"; in makelinmidi()
828 z[lc++]=" break;"; in makelinmidi()
829 z[lc++]=" if (errno == EINTR) /* interrupted, try again */"; in makelinmidi()
830 z[lc++]=" continue;"; in makelinmidi()
831 z[lc++]=""; in makelinmidi()
832 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makelinmidi()
833 z[lc++]=" }"; in makelinmidi()
834 z[lc++]=""; in makelinmidi()
835 z[lc++]=" if (len > 0)"; in makelinmidi()
836 z[lc++]=" {"; in makelinmidi()
837 z[lc++]=" if ((csysi_holdidx += len) >= CSYSI_BUFFSIZE)"; in makelinmidi()
838 z[lc++]=" fprintf(stderr, \" Warning: MIDI overrun, data lost\\n\\n\");"; in makelinmidi()
839 z[lc++]=" }"; in makelinmidi()
840 z[lc++]=""; in makelinmidi()
841 z[lc++]=" /* reset timer */"; in makelinmidi()
842 z[lc++]=""; in makelinmidi()
843 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makelinmidi()
844 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't reset ITIMER_REAL timer\");"; in makelinmidi()
845 z[lc++]="}"; in makelinmidi()
846 z[lc++]=""; in makelinmidi()
847 z[lc++]=""; in makelinmidi()
848 z[lc++]="/****************************************************************/"; in makelinmidi()
849 z[lc++]="/* initialization routine for control */"; in makelinmidi()
850 z[lc++]="/****************************************************************/"; in makelinmidi()
851 z[lc++]=""; in makelinmidi()
852 z[lc++]="int csys_setup(void)"; in makelinmidi()
853 z[lc++]=" "; in makelinmidi()
854 z[lc++]="{"; in makelinmidi()
855 z[lc++]=""; in makelinmidi()
856 z[lc++]=" csysi_midi = open(CSYSI_MIDIDEV, O_RDONLY|O_NONBLOCK);"; in makelinmidi()
857 z[lc++]=""; in makelinmidi()
858 z[lc++]=" if (csysi_midi == -1)"; in makelinmidi()
859 z[lc++]=" CSYSI_ERROR_RETURN(\"Can't open MIDI input device\");"; in makelinmidi()
860 z[lc++]=""; in makelinmidi()
861 z[lc++]=" /* set up mask for overrun timer */"; in makelinmidi()
862 z[lc++]=" "; in makelinmidi()
863 z[lc++]=" if (sigemptyset(&csysi_overrun_mask) < 0)"; in makelinmidi()
864 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigemptyset(overrun) OS call\");"; in makelinmidi()
865 z[lc++]=""; in makelinmidi()
866 z[lc++]=" if (sigaddset(&csysi_overrun_mask, SIGALRM) < 0)"; in makelinmidi()
867 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigaddset(overrun) OS call\");"; in makelinmidi()
868 z[lc++]=""; in makelinmidi()
869 z[lc++]=" /* set up signal handler for overrun timer */"; in makelinmidi()
870 z[lc++]=" "; in makelinmidi()
871 z[lc++]=" if (sigemptyset(&csysi_overrun_action.sa_mask) < 0)"; in makelinmidi()
872 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigemptyset(oaction) OS call\");"; in makelinmidi()
873 z[lc++]=""; in makelinmidi()
874 z[lc++]=" csysi_overrun_action.sa_flags = SA_RESTART;"; in makelinmidi()
875 z[lc++]=" csysi_overrun_action.sa_handler = csysi_overrun_handler;"; in makelinmidi()
876 z[lc++]=" "; in makelinmidi()
877 z[lc++]=" if (sigaction(SIGALRM, &csysi_overrun_action, NULL) < 0)"; in makelinmidi()
878 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't set up SIGALRM signal handler\");"; in makelinmidi()
879 z[lc++]=""; in makelinmidi()
880 z[lc++]=" /* set up timer and arm */"; in makelinmidi()
881 z[lc++]=""; in makelinmidi()
882 z[lc++]=" csysi_overrun_timer.it_value.tv_sec = 0;"; in makelinmidi()
883 z[lc++]=" csysi_overrun_timer.it_value.tv_usec = CSYSI_ALARMPERIOD;"; in makelinmidi()
884 z[lc++]=" csysi_overrun_timer.it_interval.tv_sec = 0;"; in makelinmidi()
885 z[lc++]=" csysi_overrun_timer.it_interval.tv_usec = 0;"; in makelinmidi()
886 z[lc++]=""; in makelinmidi()
887 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makelinmidi()
888 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't set up ITIMER_REAL timer\");"; in makelinmidi()
889 z[lc++]=""; in makelinmidi()
890 z[lc++]=" return CSYS_DONE;"; in makelinmidi()
891 z[lc++]="}"; in makelinmidi()
892 z[lc++]=""; in makelinmidi()
893 z[lc++]="/****************************************************************/"; in makelinmidi()
894 z[lc++]="/* unmasks overrun timer at end of MIDI parsing */"; in makelinmidi()
895 z[lc++]="/****************************************************************/"; in makelinmidi()
896 z[lc++]=""; in makelinmidi()
897 z[lc++]="int csysi_midiparseover(void)"; in makelinmidi()
898 z[lc++]=""; in makelinmidi()
899 z[lc++]="{"; in makelinmidi()
900 z[lc++]=" if (sigprocmask(SIG_UNBLOCK, &csysi_overrun_mask, NULL) < 0)"; in makelinmidi()
901 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't unmask MIDI overrun timer\");"; in makelinmidi()
902 z[lc++]=""; in makelinmidi()
903 z[lc++]=" return CSYS_NONE;"; in makelinmidi()
904 z[lc++]="}"; in makelinmidi()
905 z[lc++]=""; in makelinmidi()
906 z[lc++]="/****************************************************************/"; in makelinmidi()
907 z[lc++]="/* polling routine for new data */"; in makelinmidi()
908 z[lc++]="/****************************************************************/"; in makelinmidi()
909 z[lc++]=""; in makelinmidi()
910 z[lc++]="int csys_newdata(void)"; in makelinmidi()
911 z[lc++]=" "; in makelinmidi()
912 z[lc++]="{"; in makelinmidi()
913 z[lc++]=" int i;"; in makelinmidi()
914 z[lc++]=" int retry = 0;"; in makelinmidi()
915 z[lc++]=" int len;"; in makelinmidi()
916 z[lc++]=""; in makelinmidi()
917 z[lc++]=" /* block overrun time and reset it */"; in makelinmidi()
918 z[lc++]=""; in makelinmidi()
919 z[lc++]=" if (sigprocmask(SIG_BLOCK, &csysi_overrun_mask, NULL) < 0)"; in makelinmidi()
920 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't mask MIDI overrun timer\");"; in makelinmidi()
921 z[lc++]=""; in makelinmidi()
922 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makelinmidi()
923 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't reset ITIMER_REAL timer\");"; in makelinmidi()
924 z[lc++]=""; in makelinmidi()
925 z[lc++]=" if (!csysi_holdidx)"; in makelinmidi()
926 z[lc++]=" {"; in makelinmidi()
927 z[lc++]=" while ((len = read(csysi_midi, csysi_hold, CSYSI_BUFFSIZE)) < 0)"; in makelinmidi()
928 z[lc++]=" { "; in makelinmidi()
929 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makelinmidi()
930 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csys_newdata(if)\");"; in makelinmidi()
931 z[lc++]=""; in makelinmidi()
932 z[lc++]=" if (errno == EAGAIN)"; in makelinmidi()
933 z[lc++]=" return csysi_midiparseover(); /* no data ready, so leave */"; in makelinmidi()
934 z[lc++]=" if (errno == EINTR)"; in makelinmidi()
935 z[lc++]=" continue; /* interrupted, try again */"; in makelinmidi()
936 z[lc++]=""; in makelinmidi()
937 z[lc++]=" /* all other errors fatal */"; in makelinmidi()
938 z[lc++]=""; in makelinmidi()
939 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makelinmidi()
940 z[lc++]=" }"; in makelinmidi()
941 z[lc++]=" }"; in makelinmidi()
942 z[lc++]=" else"; in makelinmidi()
943 z[lc++]=" {"; in makelinmidi()
944 z[lc++]=" while ((len = read(csysi_midi, &(csysi_hold[csysi_holdidx]), "; in makelinmidi()
945 z[lc++]=" CSYSI_BUFFSIZE-csysi_holdidx)) < 0)"; in makelinmidi()
946 z[lc++]=" {"; in makelinmidi()
947 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makelinmidi()
948 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csys_newdata(el)\");"; in makelinmidi()
949 z[lc++]=""; in makelinmidi()
950 z[lc++]=" if (errno == EAGAIN)"; in makelinmidi()
951 z[lc++]=" break; /* no data ready, process buffer */"; in makelinmidi()
952 z[lc++]=" if (errno == EINTR)"; in makelinmidi()
953 z[lc++]=" continue; /* interrupted, try again */"; in makelinmidi()
954 z[lc++]=""; in makelinmidi()
955 z[lc++]=" /* all other errors fatal */"; in makelinmidi()
956 z[lc++]=""; in makelinmidi()
957 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makelinmidi()
958 z[lc++]=" }"; in makelinmidi()
959 z[lc++]=""; in makelinmidi()
960 z[lc++]=" len = (len < 0) ? csysi_holdidx : len + csysi_holdidx;"; in makelinmidi()
961 z[lc++]=" csysi_holdidx = 0;"; in makelinmidi()
962 z[lc++]=" }"; in makelinmidi()
963 z[lc++]=""; in makelinmidi()
964 z[lc++]=" csysi_newnote = csysi_len = csysi_cnt = 0;"; in makelinmidi()
965 z[lc++]=""; in makelinmidi()
966 z[lc++]=" for (i = 0; i < len; i++)"; in makelinmidi()
967 z[lc++]=" if (csysi_hold[i] <= CSYSI_SYSEX_EOX)"; in makelinmidi()
968 z[lc++]=" csysi_data[csysi_len++] = csysi_hold[i];"; in makelinmidi()
969 z[lc++]=""; in makelinmidi()
970 z[lc++]=" if (!csysi_len) "; in makelinmidi()
971 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
972 z[lc++]=""; in makelinmidi()
973 z[lc++]=" /* leave interrupts locked until all data transferred */"; in makelinmidi()
974 z[lc++]=""; in makelinmidi()
975 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
976 z[lc++]=" "; in makelinmidi()
977 z[lc++]="}"; in makelinmidi()
978 z[lc++]=""; in makelinmidi()
979 z[lc++]="/****************************************************************/"; in makelinmidi()
980 z[lc++]="/* gets one byte from MIDI stream */"; in makelinmidi()
981 z[lc++]="/****************************************************************/"; in makelinmidi()
982 z[lc++]=""; in makelinmidi()
983 z[lc++]="unsigned char csysi_getbyte(void)"; in makelinmidi()
984 z[lc++]=""; in makelinmidi()
985 z[lc++]="{"; in makelinmidi()
986 z[lc++]=" unsigned char d;"; in makelinmidi()
987 z[lc++]=" int retry = 0;"; in makelinmidi()
988 z[lc++]=""; in makelinmidi()
989 z[lc++]=" /* used when we need to risk waiting for the next byte */"; in makelinmidi()
990 z[lc++]=""; in makelinmidi()
991 z[lc++]=" while (1)"; in makelinmidi()
992 z[lc++]=" {"; in makelinmidi()
993 z[lc++]=" if (read(csysi_midi, &d, 1) != 1)"; in makelinmidi()
994 z[lc++]=" {"; in makelinmidi()
995 z[lc++]=" if (errno == EAGAIN) /* no data ready */"; in makelinmidi()
996 z[lc++]=" {"; in makelinmidi()
997 z[lc++]=" retry = 0;"; in makelinmidi()
998 z[lc++]=" continue;"; in makelinmidi()
999 z[lc++]=" }"; in makelinmidi()
1000 z[lc++]=" if (errno == EINTR) /* interrupted */"; in makelinmidi()
1001 z[lc++]=" { "; in makelinmidi()
1002 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makelinmidi()
1003 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csysi_getbyte\");"; in makelinmidi()
1004 z[lc++]=" continue;"; in makelinmidi()
1005 z[lc++]=" }"; in makelinmidi()
1006 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makelinmidi()
1007 z[lc++]=" }"; in makelinmidi()
1008 z[lc++]=" else"; in makelinmidi()
1009 z[lc++]=" {"; in makelinmidi()
1010 z[lc++]=" retry = 0;"; in makelinmidi()
1011 z[lc++]=" if (d <= CSYSI_SYSEX_EOX)"; in makelinmidi()
1012 z[lc++]=" break;"; in makelinmidi()
1013 z[lc++]=" else"; in makelinmidi()
1014 z[lc++]=" continue;"; in makelinmidi()
1015 z[lc++]=" }"; in makelinmidi()
1016 z[lc++]=" }"; in makelinmidi()
1017 z[lc++]=""; in makelinmidi()
1018 z[lc++]=" return d;"; in makelinmidi()
1019 z[lc++]=""; in makelinmidi()
1020 z[lc++]="}"; in makelinmidi()
1021 z[lc++]=""; in makelinmidi()
1022 z[lc++]="/****************************************************************/"; in makelinmidi()
1023 z[lc++]="/* flushes MIDI system messages */"; in makelinmidi()
1024 z[lc++]="/****************************************************************/"; in makelinmidi()
1025 z[lc++]=""; in makelinmidi()
1026 z[lc++]="int csysi_sysflush(unsigned short type)"; in makelinmidi()
1027 z[lc++]=""; in makelinmidi()
1028 z[lc++]="{"; in makelinmidi()
1029 z[lc++]=" unsigned char byte;"; in makelinmidi()
1030 z[lc++]=""; in makelinmidi()
1031 z[lc++]=" if ((type == 6) || /* one-byte messages */"; in makelinmidi()
1032 z[lc++]=" (type == 1) || /* undefined messages */"; in makelinmidi()
1033 z[lc++]=" (type == 4) ||"; in makelinmidi()
1034 z[lc++]=" (type == 5))"; in makelinmidi()
1035 z[lc++]=" { "; in makelinmidi()
1036 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1037 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1038 z[lc++]=" else"; in makelinmidi()
1039 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1040 z[lc++]=" }"; in makelinmidi()
1041 z[lc++]=" "; in makelinmidi()
1042 z[lc++]=" if (type == 3) /* song select -- 1 data byte */"; in makelinmidi()
1043 z[lc++]=" {"; in makelinmidi()
1044 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1045 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1046 z[lc++]=" else"; in makelinmidi()
1047 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1048 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1049 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1050 z[lc++]=" else"; in makelinmidi()
1051 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1052 z[lc++]=" }"; in makelinmidi()
1053 z[lc++]=" "; in makelinmidi()
1054 z[lc++]=" if (type == 2) /* song pointer -- 2 data bytes */"; in makelinmidi()
1055 z[lc++]=" {"; in makelinmidi()
1056 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1057 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1058 z[lc++]=" else"; in makelinmidi()
1059 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1060 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1061 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1062 z[lc++]=" else"; in makelinmidi()
1063 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1064 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1065 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1066 z[lc++]=" else"; in makelinmidi()
1067 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1068 z[lc++]=" }"; in makelinmidi()
1069 z[lc++]=""; in makelinmidi()
1070 z[lc++]=" if (type == 0) "; in makelinmidi()
1071 z[lc++]=" {"; in makelinmidi()
1072 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1073 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makelinmidi()
1074 z[lc++]=" else"; in makelinmidi()
1075 z[lc++]=" byte = csysi_getbyte();"; in makelinmidi()
1076 z[lc++]=" while (byte < CSYS_MIDI_NOTEOFF)"; in makelinmidi()
1077 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1078 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makelinmidi()
1079 z[lc++]=" else"; in makelinmidi()
1080 z[lc++]=" byte = csysi_getbyte();"; in makelinmidi()
1081 z[lc++]=" if (byte != CSYSI_SYSEX_EOX) /* non-compliant MIDI */"; in makelinmidi()
1082 z[lc++]=" {"; in makelinmidi()
1083 z[lc++]=" if ((byte&0xF0) != 0xF0)"; in makelinmidi()
1084 z[lc++]=" {"; in makelinmidi()
1085 z[lc++]=" csysi_cmd = byte&0xF0;"; in makelinmidi()
1086 z[lc++]=" csysi_extchan = byte&0x0F;"; in makelinmidi()
1087 z[lc++]=" }"; in makelinmidi()
1088 z[lc++]=" switch (byte&0xF0) {"; in makelinmidi()
1089 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makelinmidi()
1090 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makelinmidi()
1091 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makelinmidi()
1092 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makelinmidi()
1093 z[lc++]=" case CSYS_MIDI_CC:"; in makelinmidi()
1094 z[lc++]=" csysi_num = 2;"; in makelinmidi()
1095 z[lc++]=" break;"; in makelinmidi()
1096 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makelinmidi()
1097 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makelinmidi()
1098 z[lc++]=" csysi_num = 1;"; in makelinmidi()
1099 z[lc++]=" break;"; in makelinmidi()
1100 z[lc++]=" case 0xF0: "; in makelinmidi()
1101 z[lc++]=" if ((byte&0x0F)==2) /* song pointer -- 2 data bytes */"; in makelinmidi()
1102 z[lc++]=" {"; in makelinmidi()
1103 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1104 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1105 z[lc++]=" else"; in makelinmidi()
1106 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1107 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1108 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1109 z[lc++]=" else"; in makelinmidi()
1110 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1111 z[lc++]=" }"; in makelinmidi()
1112 z[lc++]=" if ((byte&0x0F)==3) /* song select -- 1 data byte */"; in makelinmidi()
1113 z[lc++]=" {"; in makelinmidi()
1114 z[lc++]=" if (csysi_cnt < csysi_len)"; in makelinmidi()
1115 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1116 z[lc++]=" else"; in makelinmidi()
1117 z[lc++]=" csysi_getbyte();"; in makelinmidi()
1118 z[lc++]=" }"; in makelinmidi()
1119 z[lc++]=" break;"; in makelinmidi()
1120 z[lc++]=" }"; in makelinmidi()
1121 z[lc++]=" }"; in makelinmidi()
1122 z[lc++]=" }"; in makelinmidi()
1123 z[lc++]=""; in makelinmidi()
1124 z[lc++]=" /* outside of if {} to catch errant F7 bytes */"; in makelinmidi()
1125 z[lc++]=""; in makelinmidi()
1126 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1127 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1128 z[lc++]=" else"; in makelinmidi()
1129 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1130 z[lc++]=""; in makelinmidi()
1131 z[lc++]="}"; in makelinmidi()
1132 z[lc++]=""; in makelinmidi()
1133 z[lc++]=""; in makelinmidi()
1134 z[lc++]="/****************************************************************/"; in makelinmidi()
1135 z[lc++]="/* processes a MIDI event */"; in makelinmidi()
1136 z[lc++]="/****************************************************************/"; in makelinmidi()
1137 z[lc++]=""; in makelinmidi()
1138 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makelinmidi()
1139 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makelinmidi()
1140 z[lc++]=" float * fval)"; in makelinmidi()
1141 z[lc++]=""; in makelinmidi()
1142 z[lc++]="{"; in makelinmidi()
1143 z[lc++]=" unsigned char overflow[2], oval;"; in makelinmidi()
1144 z[lc++]=" int len, tot, idx;"; in makelinmidi()
1145 z[lc++]=""; in makelinmidi()
1146 z[lc++]=""; in makelinmidi()
1147 z[lc++]=" if (csysi_data[csysi_cnt] > 127) /* a command byte */"; in makelinmidi()
1148 z[lc++]=" {"; in makelinmidi()
1149 z[lc++]=" *cmd = 0xF0 & csysi_data[csysi_cnt];"; in makelinmidi()
1150 z[lc++]=" *extchan = 0x0F & csysi_data[csysi_cnt];"; in makelinmidi()
1151 z[lc++]=" if (*cmd != 0xF0)"; in makelinmidi()
1152 z[lc++]=" {"; in makelinmidi()
1153 z[lc++]=" csysi_cmd = *cmd;"; in makelinmidi()
1154 z[lc++]=" csysi_extchan = *extchan;"; in makelinmidi()
1155 z[lc++]=" }"; in makelinmidi()
1156 z[lc++]=" csysi_cnt++;"; in makelinmidi()
1157 z[lc++]=" switch (*cmd) {"; in makelinmidi()
1158 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makelinmidi()
1159 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makelinmidi()
1160 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makelinmidi()
1161 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makelinmidi()
1162 z[lc++]=" case CSYS_MIDI_CC:"; in makelinmidi()
1163 z[lc++]=" csysi_num = 2;"; in makelinmidi()
1164 z[lc++]=" if (CSYSI_DELAY && ((csysi_cnt + 1) == csysi_len)) /* delay cmd */"; in makelinmidi()
1165 z[lc++]=" {"; in makelinmidi()
1166 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makelinmidi()
1167 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makelinmidi()
1168 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1169 z[lc++]=" }"; in makelinmidi()
1170 z[lc++]=" break;"; in makelinmidi()
1171 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makelinmidi()
1172 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makelinmidi()
1173 z[lc++]=" csysi_num = 1;"; in makelinmidi()
1174 z[lc++]=" break;"; in makelinmidi()
1175 z[lc++]=" case 0xF0: "; in makelinmidi()
1176 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makelinmidi()
1177 z[lc++]=" return csysi_sysflush(*extchan);"; in makelinmidi()
1178 z[lc++]=" break;"; in makelinmidi()
1179 z[lc++]=" }"; in makelinmidi()
1180 z[lc++]=" if (CSYSI_DELAY && (csysi_cnt == csysi_len)) /* delay cmd */"; in makelinmidi()
1181 z[lc++]=" {"; in makelinmidi()
1182 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makelinmidi()
1183 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1184 z[lc++]=" }"; in makelinmidi()
1185 z[lc++]=" }"; in makelinmidi()
1186 z[lc++]=" else /* running status or a delayed MIDI command */"; in makelinmidi()
1187 z[lc++]=" {"; in makelinmidi()
1188 z[lc++]=" *cmd = csysi_cmd;"; in makelinmidi()
1189 z[lc++]=" *extchan = csysi_extchan;"; in makelinmidi()
1190 z[lc++]=" if (CSYSI_DELAY && (csysi_ndata != 0xFF)) /* finish delayed cmd */"; in makelinmidi()
1191 z[lc++]=" {"; in makelinmidi()
1192 z[lc++]=" *ndata = csysi_ndata;"; in makelinmidi()
1193 z[lc++]=" csysi_ndata = 0xFF;"; in makelinmidi()
1194 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makelinmidi()
1195 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makelinmidi()
1196 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makelinmidi()
1197 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1198 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1199 z[lc++]=" else"; in makelinmidi()
1200 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1201 z[lc++]=" }"; in makelinmidi()
1202 z[lc++]=" if (CSYSI_DELAY && (csysi_num == 2) && /* (further) delay cmd */"; in makelinmidi()
1203 z[lc++]=" (csysi_cnt + 1 == csysi_len))"; in makelinmidi()
1204 z[lc++]=" {"; in makelinmidi()
1205 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makelinmidi()
1206 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makelinmidi()
1207 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1208 z[lc++]=" }"; in makelinmidi()
1209 z[lc++]=" }"; in makelinmidi()
1210 z[lc++]=""; in makelinmidi()
1211 z[lc++]=" /* do complete commands and finish some types of delayed commands */"; in makelinmidi()
1212 z[lc++]=""; in makelinmidi()
1213 z[lc++]=" if (csysi_cnt + csysi_num <= csysi_len)"; in makelinmidi()
1214 z[lc++]=" {"; in makelinmidi()
1215 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makelinmidi()
1216 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makelinmidi()
1217 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makelinmidi()
1218 z[lc++]=" if (csysi_num == 2)"; in makelinmidi()
1219 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makelinmidi()
1220 z[lc++]=" if (csysi_cnt == csysi_len)"; in makelinmidi()
1221 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1222 z[lc++]=" else"; in makelinmidi()
1223 z[lc++]=" return CSYS_MIDIEVENTS;"; in makelinmidi()
1224 z[lc++]=" }"; in makelinmidi()
1225 z[lc++]=""; in makelinmidi()
1226 z[lc++]=" /* should never execute if CSYSI_DELAY is 1 */"; in makelinmidi()
1227 z[lc++]=""; in makelinmidi()
1228 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makelinmidi()
1229 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makelinmidi()
1230 z[lc++]=""; in makelinmidi()
1231 z[lc++]=" tot = csysi_cnt + csysi_num - csysi_len;"; in makelinmidi()
1232 z[lc++]=" idx = 0;"; in makelinmidi()
1233 z[lc++]=" while (tot > 0)"; in makelinmidi()
1234 z[lc++]=" {"; in makelinmidi()
1235 z[lc++]=" overflow[idx++] = csysi_getbyte();"; in makelinmidi()
1236 z[lc++]=" tot--;"; in makelinmidi()
1237 z[lc++]=" }"; in makelinmidi()
1238 z[lc++]=" if (csysi_num == 1) "; in makelinmidi()
1239 z[lc++]=" {"; in makelinmidi()
1240 z[lc++]=" *ndata = overflow[0];"; in makelinmidi()
1241 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1242 z[lc++]=" }"; in makelinmidi()
1243 z[lc++]=" if (csysi_cnt + 1 == csysi_len)"; in makelinmidi()
1244 z[lc++]=" {"; in makelinmidi()
1245 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makelinmidi()
1246 z[lc++]=" *vdata = overflow[0];"; in makelinmidi()
1247 z[lc++]=" }"; in makelinmidi()
1248 z[lc++]=" else"; in makelinmidi()
1249 z[lc++]=" {"; in makelinmidi()
1250 z[lc++]=" *ndata = overflow[0];"; in makelinmidi()
1251 z[lc++]=" *vdata = overflow[1];"; in makelinmidi()
1252 z[lc++]=" }"; in makelinmidi()
1253 z[lc++]=" return csysi_midiparseover();"; in makelinmidi()
1254 z[lc++]=" "; in makelinmidi()
1255 z[lc++]="}"; in makelinmidi()
1256 z[lc++]=""; in makelinmidi()
1257 z[lc++]=""; in makelinmidi()
1258 z[lc++]="/****************************************************************/"; in makelinmidi()
1259 z[lc++]="/* closing routine for control */"; in makelinmidi()
1260 z[lc++]="/****************************************************************/"; in makelinmidi()
1261 z[lc++]=""; in makelinmidi()
1262 z[lc++]="void csys_shutdown(void)"; in makelinmidi()
1263 z[lc++]=" "; in makelinmidi()
1264 z[lc++]="{"; in makelinmidi()
1265 z[lc++]=" /* disarm timer */"; in makelinmidi()
1266 z[lc++]=""; in makelinmidi()
1267 z[lc++]=" if (sigprocmask(SIG_BLOCK, &csysi_overrun_mask, NULL) < 0)"; in makelinmidi()
1268 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't mask MIDI overrun time\");"; in makelinmidi()
1269 z[lc++]=""; in makelinmidi()
1270 z[lc++]=" csysi_overrun_timer.it_value.tv_sec = 0;"; in makelinmidi()
1271 z[lc++]=" csysi_overrun_timer.it_value.tv_usec = 0;"; in makelinmidi()
1272 z[lc++]=" csysi_overrun_timer.it_interval.tv_sec = 0;"; in makelinmidi()
1273 z[lc++]=" csysi_overrun_timer.it_interval.tv_usec = 0;"; in makelinmidi()
1274 z[lc++]=""; in makelinmidi()
1275 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makelinmidi()
1276 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't disarm ITIMER_REAL timer\");"; in makelinmidi()
1277 z[lc++]=""; in makelinmidi()
1278 z[lc++]=" close(csysi_midi);"; in makelinmidi()
1279 z[lc++]="}"; in makelinmidi()
1280 z[lc++]=""; in makelinmidi()
1281 z[lc++]=""; in makelinmidi()
1282 z[lc++]="#undef CSYSI_MIDIDEV"; in makelinmidi()
1283 z[lc++]="#undef CSYSI_BUFFSIZE"; in makelinmidi()
1284 z[lc++]="#undef CSYSI_SYSEX_EOX"; in makelinmidi()
1285 z[lc++]="#undef CSYSI_DELAY"; in makelinmidi()
1286 z[lc++]="#undef CSYSI_ALARMPERIOD"; in makelinmidi()
1287 z[lc++]="#undef CSYSI_ERROR_RETURN"; in makelinmidi()
1288 z[lc++]="#undef CSYSI_ERROR_TERMINATE"; in makelinmidi()
1289 z[lc++]=""; in makelinmidi()
1298 z[lc++]=""; in makefreebsdmidi()
1299 z[lc++]="/*"; in makefreebsdmidi()
1300 z[lc++]="# Sfront, a SAOL to C translator "; in makefreebsdmidi()
1301 z[lc++]="# This file: Merged linux/freebsd MIDI Input control driver "; in makefreebsdmidi()
1302 z[lc++]="#"; in makefreebsdmidi()
1303 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makefreebsdmidi()
1304 z[lc++]="# All rights reserved."; in makefreebsdmidi()
1305 z[lc++]="#"; in makefreebsdmidi()
1306 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makefreebsdmidi()
1307 z[lc++]="# modification, are permitted provided that the following conditions are"; in makefreebsdmidi()
1308 z[lc++]="# met:"; in makefreebsdmidi()
1309 z[lc++]="#"; in makefreebsdmidi()
1310 z[lc++]="# Redistributions of source code must retain the above copyright"; in makefreebsdmidi()
1311 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makefreebsdmidi()
1312 z[lc++]="#"; in makefreebsdmidi()
1313 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makefreebsdmidi()
1314 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makefreebsdmidi()
1315 z[lc++]="# documentation and/or other materials provided with the distribution."; in makefreebsdmidi()
1316 z[lc++]="#"; in makefreebsdmidi()
1317 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makefreebsdmidi()
1318 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makefreebsdmidi()
1319 z[lc++]="# derived from this software without specific prior written permission."; in makefreebsdmidi()
1320 z[lc++]="#"; in makefreebsdmidi()
1321 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makefreebsdmidi()
1322 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makefreebsdmidi()
1323 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makefreebsdmidi()
1324 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makefreebsdmidi()
1325 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makefreebsdmidi()
1326 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makefreebsdmidi()
1327 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makefreebsdmidi()
1328 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makefreebsdmidi()
1329 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makefreebsdmidi()
1330 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makefreebsdmidi()
1331 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makefreebsdmidi()
1332 z[lc++]="#"; in makefreebsdmidi()
1333 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makefreebsdmidi()
1334 z[lc++]="*/"; in makefreebsdmidi()
1335 z[lc++]=""; in makefreebsdmidi()
1336 z[lc++]=""; in makefreebsdmidi()
1337 z[lc++]=""; in makefreebsdmidi()
1338 z[lc++]="#include <fcntl.h>"; in makefreebsdmidi()
1339 z[lc++]="#include <signal.h> "; in makefreebsdmidi()
1340 z[lc++]="#include <sys/time.h> "; in makefreebsdmidi()
1341 z[lc++]=""; in makefreebsdmidi()
1342 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1343 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1344 z[lc++]="/* MIDI Input control driver for sfront */ "; in makefreebsdmidi()
1345 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1346 z[lc++]=""; in makefreebsdmidi()
1347 z[lc++]="#ifndef CSYSI_MIDIDEV"; in makefreebsdmidi()
1348 z[lc++]="#define CSYSI_MIDIDEV \"/dev/midi00\""; in makefreebsdmidi()
1349 z[lc++]="#endif"; in makefreebsdmidi()
1350 z[lc++]=""; in makefreebsdmidi()
1351 z[lc++]="#define CSYSI_BUFFSIZE 1024"; in makefreebsdmidi()
1352 z[lc++]="#define CSYSI_SYSEX_EOX 0xF7"; in makefreebsdmidi()
1353 z[lc++]=""; in makefreebsdmidi()
1354 z[lc++]="/* set CSYSI_DELAY to 0 to wait for partially completed MIDI commands */"; in makefreebsdmidi()
1355 z[lc++]="/* waiting for commands decreases variance of the latency, at the */"; in makefreebsdmidi()
1356 z[lc++]="/* expense of losing computation cycles */"; in makefreebsdmidi()
1357 z[lc++]=""; in makefreebsdmidi()
1358 z[lc++]="#define CSYSI_DELAY 1"; in makefreebsdmidi()
1359 z[lc++]=""; in makefreebsdmidi()
1360 z[lc++]="/* variables for SIGALRM for MIDI overrun */"; in makefreebsdmidi()
1361 z[lc++]=""; in makefreebsdmidi()
1362 z[lc++]="/* period for interrupt: 320us per MIDI byte @ 128 bytes, minus safety zone */"; in makefreebsdmidi()
1363 z[lc++]=""; in makefreebsdmidi()
1364 z[lc++]="#define CSYSI_ALARMPERIOD 40000"; in makefreebsdmidi()
1365 z[lc++]=""; in makefreebsdmidi()
1366 z[lc++]="/* maximum number of I/O retries before termination */"; in makefreebsdmidi()
1367 z[lc++]=""; in makefreebsdmidi()
1368 z[lc++]="#define CSYSI_MAXRETRY 256"; in makefreebsdmidi()
1369 z[lc++]=""; in makefreebsdmidi()
1370 z[lc++]="sigset_t csysi_overrun_mask; /* for masking off overrun interrupt */"; in makefreebsdmidi()
1371 z[lc++]="struct sigaction csysi_overrun_action; /* for setting up overrun interrupt */"; in makefreebsdmidi()
1372 z[lc++]="struct itimerval csysi_overrun_timer; /* for setting up overrun timer */"; in makefreebsdmidi()
1373 z[lc++]=""; in makefreebsdmidi()
1374 z[lc++]="/* flag for new note on/off */"; in makefreebsdmidi()
1375 z[lc++]=""; in makefreebsdmidi()
1376 z[lc++]="int csysi_newnote = 0;"; in makefreebsdmidi()
1377 z[lc++]=""; in makefreebsdmidi()
1378 z[lc++]="/* MIDI parsing state variables */"; in makefreebsdmidi()
1379 z[lc++]=""; in makefreebsdmidi()
1380 z[lc++]="int csysi_midi = 0;"; in makefreebsdmidi()
1381 z[lc++]=""; in makefreebsdmidi()
1382 z[lc++]="unsigned char csysi_hold[CSYSI_BUFFSIZE];"; in makefreebsdmidi()
1383 z[lc++]="int csysi_holdidx = 0;"; in makefreebsdmidi()
1384 z[lc++]=""; in makefreebsdmidi()
1385 z[lc++]="unsigned char csysi_data[CSYSI_BUFFSIZE];"; in makefreebsdmidi()
1386 z[lc++]="int csysi_len;"; in makefreebsdmidi()
1387 z[lc++]="int csysi_cnt;"; in makefreebsdmidi()
1388 z[lc++]="unsigned char csysi_cmd;"; in makefreebsdmidi()
1389 z[lc++]="unsigned char csysi_num;"; in makefreebsdmidi()
1390 z[lc++]="unsigned short csysi_extchan;"; in makefreebsdmidi()
1391 z[lc++]="unsigned char csysi_ndata = 0xFF;"; in makefreebsdmidi()
1392 z[lc++]=""; in makefreebsdmidi()
1393 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1394 z[lc++]="/* generic error-checking wrappers */"; in makefreebsdmidi()
1395 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1396 z[lc++]=""; in makefreebsdmidi()
1397 z[lc++]="#define CSYSI_ERROR_RETURN(x) do {\\"; in makefreebsdmidi()
1398 z[lc++]=" fprintf(stderr, \" Error: %s.\\n\", x);\\"; in makefreebsdmidi()
1399 z[lc++]=" fprintf(stderr, \" Errno Message: %s\\n\\n\", strerror(errno));\\"; in makefreebsdmidi()
1400 z[lc++]=" return CSYS_ERROR; } while (0)"; in makefreebsdmidi()
1401 z[lc++]=""; in makefreebsdmidi()
1402 z[lc++]="#define CSYSI_ERROR_TERMINATE(x) do {\\"; in makefreebsdmidi()
1403 z[lc++]=" fprintf(stderr, \" Runtime Errno Message: %s\\n\", strerror(errno));\\"; in makefreebsdmidi()
1404 z[lc++]=" epr(0,NULL,NULL, \"Soundcard error -- \" x );} while (0)"; in makefreebsdmidi()
1405 z[lc++]=""; in makefreebsdmidi()
1406 z[lc++]=""; in makefreebsdmidi()
1407 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1408 z[lc++]="/* signal handler to catch MIDI buffer overruns */"; in makefreebsdmidi()
1409 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1410 z[lc++]=""; in makefreebsdmidi()
1411 z[lc++]="void csysi_overrun_handler(int signum) "; in makefreebsdmidi()
1412 z[lc++]=""; in makefreebsdmidi()
1413 z[lc++]="{ "; in makefreebsdmidi()
1414 z[lc++]=" int retry = 0;"; in makefreebsdmidi()
1415 z[lc++]=" int len;"; in makefreebsdmidi()
1416 z[lc++]=""; in makefreebsdmidi()
1417 z[lc++]=" while ((len = read(csysi_midi, &(csysi_hold[csysi_holdidx]), "; in makefreebsdmidi()
1418 z[lc++]=" CSYSI_BUFFSIZE-csysi_holdidx)) < 0)"; in makefreebsdmidi()
1419 z[lc++]=" {"; in makefreebsdmidi()
1420 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makefreebsdmidi()
1421 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csysi_overrun_handler\");"; in makefreebsdmidi()
1422 z[lc++]=""; in makefreebsdmidi()
1423 z[lc++]=" if (errno == EAGAIN) /* no data ready */"; in makefreebsdmidi()
1424 z[lc++]=" break;"; in makefreebsdmidi()
1425 z[lc++]=" if (errno == EINTR) /* interrupted, try again */"; in makefreebsdmidi()
1426 z[lc++]=" continue;"; in makefreebsdmidi()
1427 z[lc++]=""; in makefreebsdmidi()
1428 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makefreebsdmidi()
1429 z[lc++]=" }"; in makefreebsdmidi()
1430 z[lc++]=""; in makefreebsdmidi()
1431 z[lc++]=" if (len > 0)"; in makefreebsdmidi()
1432 z[lc++]=" {"; in makefreebsdmidi()
1433 z[lc++]=" if ((csysi_holdidx += len) >= CSYSI_BUFFSIZE)"; in makefreebsdmidi()
1434 z[lc++]=" fprintf(stderr, \" Warning: MIDI overrun, data lost\\n\\n\");"; in makefreebsdmidi()
1435 z[lc++]=" }"; in makefreebsdmidi()
1436 z[lc++]=""; in makefreebsdmidi()
1437 z[lc++]=" /* reset timer */"; in makefreebsdmidi()
1438 z[lc++]=""; in makefreebsdmidi()
1439 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makefreebsdmidi()
1440 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't reset ITIMER_REAL timer\");"; in makefreebsdmidi()
1441 z[lc++]="}"; in makefreebsdmidi()
1442 z[lc++]=""; in makefreebsdmidi()
1443 z[lc++]=""; in makefreebsdmidi()
1444 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1445 z[lc++]="/* initialization routine for control */"; in makefreebsdmidi()
1446 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1447 z[lc++]=""; in makefreebsdmidi()
1448 z[lc++]="int csys_setup(void)"; in makefreebsdmidi()
1449 z[lc++]=" "; in makefreebsdmidi()
1450 z[lc++]="{"; in makefreebsdmidi()
1451 z[lc++]=""; in makefreebsdmidi()
1452 z[lc++]=" csysi_midi = open(CSYSI_MIDIDEV, O_RDONLY|O_NONBLOCK);"; in makefreebsdmidi()
1453 z[lc++]=""; in makefreebsdmidi()
1454 z[lc++]=" if (csysi_midi == -1)"; in makefreebsdmidi()
1455 z[lc++]=" CSYSI_ERROR_RETURN(\"Can't open MIDI input device\");"; in makefreebsdmidi()
1456 z[lc++]=""; in makefreebsdmidi()
1457 z[lc++]=" /* set up mask for overrun timer */"; in makefreebsdmidi()
1458 z[lc++]=" "; in makefreebsdmidi()
1459 z[lc++]=" if (sigemptyset(&csysi_overrun_mask) < 0)"; in makefreebsdmidi()
1460 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigemptyset(overrun) OS call\");"; in makefreebsdmidi()
1461 z[lc++]=""; in makefreebsdmidi()
1462 z[lc++]=" if (sigaddset(&csysi_overrun_mask, SIGALRM) < 0)"; in makefreebsdmidi()
1463 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigaddset(overrun) OS call\");"; in makefreebsdmidi()
1464 z[lc++]=""; in makefreebsdmidi()
1465 z[lc++]=" /* set up signal handler for overrun timer */"; in makefreebsdmidi()
1466 z[lc++]=" "; in makefreebsdmidi()
1467 z[lc++]=" if (sigemptyset(&csysi_overrun_action.sa_mask) < 0)"; in makefreebsdmidi()
1468 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't run sigemptyset(oaction) OS call\");"; in makefreebsdmidi()
1469 z[lc++]=""; in makefreebsdmidi()
1470 z[lc++]=" csysi_overrun_action.sa_flags = SA_RESTART;"; in makefreebsdmidi()
1471 z[lc++]=" csysi_overrun_action.sa_handler = csysi_overrun_handler;"; in makefreebsdmidi()
1472 z[lc++]=" "; in makefreebsdmidi()
1473 z[lc++]=" if (sigaction(SIGALRM, &csysi_overrun_action, NULL) < 0)"; in makefreebsdmidi()
1474 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't set up SIGALRM signal handler\");"; in makefreebsdmidi()
1475 z[lc++]=""; in makefreebsdmidi()
1476 z[lc++]=" /* set up timer and arm */"; in makefreebsdmidi()
1477 z[lc++]=""; in makefreebsdmidi()
1478 z[lc++]=" csysi_overrun_timer.it_value.tv_sec = 0;"; in makefreebsdmidi()
1479 z[lc++]=" csysi_overrun_timer.it_value.tv_usec = CSYSI_ALARMPERIOD;"; in makefreebsdmidi()
1480 z[lc++]=" csysi_overrun_timer.it_interval.tv_sec = 0;"; in makefreebsdmidi()
1481 z[lc++]=" csysi_overrun_timer.it_interval.tv_usec = 0;"; in makefreebsdmidi()
1482 z[lc++]=""; in makefreebsdmidi()
1483 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makefreebsdmidi()
1484 z[lc++]=" CSYSI_ERROR_RETURN(\"Couldn't set up ITIMER_REAL timer\");"; in makefreebsdmidi()
1485 z[lc++]=""; in makefreebsdmidi()
1486 z[lc++]=" return CSYS_DONE;"; in makefreebsdmidi()
1487 z[lc++]="}"; in makefreebsdmidi()
1488 z[lc++]=""; in makefreebsdmidi()
1489 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1490 z[lc++]="/* unmasks overrun timer at end of MIDI parsing */"; in makefreebsdmidi()
1491 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1492 z[lc++]=""; in makefreebsdmidi()
1493 z[lc++]="int csysi_midiparseover(void)"; in makefreebsdmidi()
1494 z[lc++]=""; in makefreebsdmidi()
1495 z[lc++]="{"; in makefreebsdmidi()
1496 z[lc++]=" if (sigprocmask(SIG_UNBLOCK, &csysi_overrun_mask, NULL) < 0)"; in makefreebsdmidi()
1497 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't unmask MIDI overrun timer\");"; in makefreebsdmidi()
1498 z[lc++]=""; in makefreebsdmidi()
1499 z[lc++]=" return CSYS_NONE;"; in makefreebsdmidi()
1500 z[lc++]="}"; in makefreebsdmidi()
1501 z[lc++]=""; in makefreebsdmidi()
1502 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1503 z[lc++]="/* polling routine for new data */"; in makefreebsdmidi()
1504 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1505 z[lc++]=""; in makefreebsdmidi()
1506 z[lc++]="int csys_newdata(void)"; in makefreebsdmidi()
1507 z[lc++]=" "; in makefreebsdmidi()
1508 z[lc++]="{"; in makefreebsdmidi()
1509 z[lc++]=" int i = 0;"; in makefreebsdmidi()
1510 z[lc++]=" int retry = 0;"; in makefreebsdmidi()
1511 z[lc++]=" int len;"; in makefreebsdmidi()
1512 z[lc++]=""; in makefreebsdmidi()
1513 z[lc++]=" /* block overrun time and reset it */"; in makefreebsdmidi()
1514 z[lc++]=""; in makefreebsdmidi()
1515 z[lc++]=" if (sigprocmask(SIG_BLOCK, &csysi_overrun_mask, NULL) < 0)"; in makefreebsdmidi()
1516 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't mask MIDI overrun timer\");"; in makefreebsdmidi()
1517 z[lc++]=""; in makefreebsdmidi()
1518 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makefreebsdmidi()
1519 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't reset ITIMER_REAL timer\");"; in makefreebsdmidi()
1520 z[lc++]=""; in makefreebsdmidi()
1521 z[lc++]=" if (!csysi_holdidx)"; in makefreebsdmidi()
1522 z[lc++]=" {"; in makefreebsdmidi()
1523 z[lc++]=" while ((len = read(csysi_midi, csysi_hold, CSYSI_BUFFSIZE)) < 0)"; in makefreebsdmidi()
1524 z[lc++]=" { "; in makefreebsdmidi()
1525 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makefreebsdmidi()
1526 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csys_newdata(if)\");"; in makefreebsdmidi()
1527 z[lc++]=""; in makefreebsdmidi()
1528 z[lc++]=" if (errno == EAGAIN)"; in makefreebsdmidi()
1529 z[lc++]=" return csysi_midiparseover(); /* no data ready, so leave */"; in makefreebsdmidi()
1530 z[lc++]=" if (errno == EINTR)"; in makefreebsdmidi()
1531 z[lc++]=" continue; /* interrupted, try again */"; in makefreebsdmidi()
1532 z[lc++]=""; in makefreebsdmidi()
1533 z[lc++]=" /* all other errors fatal */"; in makefreebsdmidi()
1534 z[lc++]=""; in makefreebsdmidi()
1535 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makefreebsdmidi()
1536 z[lc++]=" }"; in makefreebsdmidi()
1537 z[lc++]=" }"; in makefreebsdmidi()
1538 z[lc++]=" else"; in makefreebsdmidi()
1539 z[lc++]=" {"; in makefreebsdmidi()
1540 z[lc++]=" while ((len = read(csysi_midi, &(csysi_hold[csysi_holdidx]), "; in makefreebsdmidi()
1541 z[lc++]=" CSYSI_BUFFSIZE-csysi_holdidx)) < 0)"; in makefreebsdmidi()
1542 z[lc++]=" {"; in makefreebsdmidi()
1543 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makefreebsdmidi()
1544 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csys_newdata(el)\");"; in makefreebsdmidi()
1545 z[lc++]=""; in makefreebsdmidi()
1546 z[lc++]=" if (errno == EAGAIN)"; in makefreebsdmidi()
1547 z[lc++]=" break; /* no data ready, process buffer */"; in makefreebsdmidi()
1548 z[lc++]=" if (errno == EINTR)"; in makefreebsdmidi()
1549 z[lc++]=" continue; /* interrupted, try again */"; in makefreebsdmidi()
1550 z[lc++]=""; in makefreebsdmidi()
1551 z[lc++]=" /* all other errors fatal */"; in makefreebsdmidi()
1552 z[lc++]=""; in makefreebsdmidi()
1553 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makefreebsdmidi()
1554 z[lc++]=" }"; in makefreebsdmidi()
1555 z[lc++]=""; in makefreebsdmidi()
1556 z[lc++]=" len = (len < 0) ? csysi_holdidx : len + csysi_holdidx;"; in makefreebsdmidi()
1557 z[lc++]=" csysi_holdidx = 0;"; in makefreebsdmidi()
1558 z[lc++]=" }"; in makefreebsdmidi()
1559 z[lc++]=""; in makefreebsdmidi()
1560 z[lc++]=" csysi_newnote = csysi_len = csysi_cnt = 0;"; in makefreebsdmidi()
1561 z[lc++]=" while (i < len)"; in makefreebsdmidi()
1562 z[lc++]=" {"; in makefreebsdmidi()
1563 z[lc++]=" if (csysi_hold[i] <= CSYSI_SYSEX_EOX)"; in makefreebsdmidi()
1564 z[lc++]=" csysi_data[csysi_len++] = csysi_hold[i];"; in makefreebsdmidi()
1565 z[lc++]=" i++;"; in makefreebsdmidi()
1566 z[lc++]=" }"; in makefreebsdmidi()
1567 z[lc++]=""; in makefreebsdmidi()
1568 z[lc++]=" if (!csysi_len) "; in makefreebsdmidi()
1569 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1570 z[lc++]=""; in makefreebsdmidi()
1571 z[lc++]=" /* leave interrupts locked until all data transferred */"; in makefreebsdmidi()
1572 z[lc++]=""; in makefreebsdmidi()
1573 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1574 z[lc++]=" "; in makefreebsdmidi()
1575 z[lc++]="}"; in makefreebsdmidi()
1576 z[lc++]=""; in makefreebsdmidi()
1577 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1578 z[lc++]="/* gets one byte from MIDI stream */"; in makefreebsdmidi()
1579 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1580 z[lc++]=""; in makefreebsdmidi()
1581 z[lc++]="unsigned char csysi_getbyte(void)"; in makefreebsdmidi()
1582 z[lc++]=""; in makefreebsdmidi()
1583 z[lc++]="{"; in makefreebsdmidi()
1584 z[lc++]=" unsigned char d;"; in makefreebsdmidi()
1585 z[lc++]=" int retry = 0;"; in makefreebsdmidi()
1586 z[lc++]=""; in makefreebsdmidi()
1587 z[lc++]=" /* used when we need to risk waiting for the next byte */"; in makefreebsdmidi()
1588 z[lc++]=""; in makefreebsdmidi()
1589 z[lc++]=" while (1)"; in makefreebsdmidi()
1590 z[lc++]=" {"; in makefreebsdmidi()
1591 z[lc++]=" if (read(csysi_midi, &d, 1) != 1)"; in makefreebsdmidi()
1592 z[lc++]=" {"; in makefreebsdmidi()
1593 z[lc++]=" if (errno == EAGAIN) /* no data ready */"; in makefreebsdmidi()
1594 z[lc++]=" {"; in makefreebsdmidi()
1595 z[lc++]=" retry = 0;"; in makefreebsdmidi()
1596 z[lc++]=" continue;"; in makefreebsdmidi()
1597 z[lc++]=" }"; in makefreebsdmidi()
1598 z[lc++]=" if (errno == EINTR) /* interrupted */"; in makefreebsdmidi()
1599 z[lc++]=" { "; in makefreebsdmidi()
1600 z[lc++]=" if (++retry > CSYSI_MAXRETRY)"; in makefreebsdmidi()
1601 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Too many I/O retries -- csysi_getbyte\");"; in makefreebsdmidi()
1602 z[lc++]=" continue;"; in makefreebsdmidi()
1603 z[lc++]=" }"; in makefreebsdmidi()
1604 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't read MIDI device\");"; in makefreebsdmidi()
1605 z[lc++]=" }"; in makefreebsdmidi()
1606 z[lc++]=" else"; in makefreebsdmidi()
1607 z[lc++]=" {"; in makefreebsdmidi()
1608 z[lc++]=" retry = 0;"; in makefreebsdmidi()
1609 z[lc++]=" if (d <= CSYSI_SYSEX_EOX)"; in makefreebsdmidi()
1610 z[lc++]=" break;"; in makefreebsdmidi()
1611 z[lc++]=" else"; in makefreebsdmidi()
1612 z[lc++]=" continue;"; in makefreebsdmidi()
1613 z[lc++]=" }"; in makefreebsdmidi()
1614 z[lc++]=" }"; in makefreebsdmidi()
1615 z[lc++]=""; in makefreebsdmidi()
1616 z[lc++]=" return d;"; in makefreebsdmidi()
1617 z[lc++]=""; in makefreebsdmidi()
1618 z[lc++]="}"; in makefreebsdmidi()
1619 z[lc++]=""; in makefreebsdmidi()
1620 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1621 z[lc++]="/* flushes MIDI system messages */"; in makefreebsdmidi()
1622 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1623 z[lc++]=""; in makefreebsdmidi()
1624 z[lc++]="int csysi_sysflush(unsigned short type)"; in makefreebsdmidi()
1625 z[lc++]=""; in makefreebsdmidi()
1626 z[lc++]="{"; in makefreebsdmidi()
1627 z[lc++]=" unsigned char byte;"; in makefreebsdmidi()
1628 z[lc++]=""; in makefreebsdmidi()
1629 z[lc++]=" if ((type == 6) || /* one-byte messages */"; in makefreebsdmidi()
1630 z[lc++]=" (type == 1) || /* undefined messages */"; in makefreebsdmidi()
1631 z[lc++]=" (type == 4) ||"; in makefreebsdmidi()
1632 z[lc++]=" (type == 5))"; in makefreebsdmidi()
1633 z[lc++]=" { "; in makefreebsdmidi()
1634 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1635 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1636 z[lc++]=" else"; in makefreebsdmidi()
1637 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1638 z[lc++]=" }"; in makefreebsdmidi()
1639 z[lc++]=" "; in makefreebsdmidi()
1640 z[lc++]=" if (type == 3) /* song select -- 1 data byte */"; in makefreebsdmidi()
1641 z[lc++]=" {"; in makefreebsdmidi()
1642 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1643 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1644 z[lc++]=" else"; in makefreebsdmidi()
1645 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1646 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1647 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1648 z[lc++]=" else"; in makefreebsdmidi()
1649 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1650 z[lc++]=" }"; in makefreebsdmidi()
1651 z[lc++]=" "; in makefreebsdmidi()
1652 z[lc++]=" if (type == 2) /* song pointer -- 2 data bytes */"; in makefreebsdmidi()
1653 z[lc++]=" {"; in makefreebsdmidi()
1654 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1655 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1656 z[lc++]=" else"; in makefreebsdmidi()
1657 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1658 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1659 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1660 z[lc++]=" else"; in makefreebsdmidi()
1661 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1662 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1663 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1664 z[lc++]=" else"; in makefreebsdmidi()
1665 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1666 z[lc++]=" }"; in makefreebsdmidi()
1667 z[lc++]=""; in makefreebsdmidi()
1668 z[lc++]=" if (type == 0) "; in makefreebsdmidi()
1669 z[lc++]=" {"; in makefreebsdmidi()
1670 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1671 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1672 z[lc++]=" else"; in makefreebsdmidi()
1673 z[lc++]=" byte = csysi_getbyte();"; in makefreebsdmidi()
1674 z[lc++]=" while (byte < CSYS_MIDI_NOTEOFF)"; in makefreebsdmidi()
1675 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1676 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1677 z[lc++]=" else"; in makefreebsdmidi()
1678 z[lc++]=" byte = csysi_getbyte();"; in makefreebsdmidi()
1679 z[lc++]=" if (byte != CSYSI_SYSEX_EOX) /* non-compliant MIDI */"; in makefreebsdmidi()
1680 z[lc++]=" {"; in makefreebsdmidi()
1681 z[lc++]=" if ((byte&0xF0) != 0xF0)"; in makefreebsdmidi()
1682 z[lc++]=" {"; in makefreebsdmidi()
1683 z[lc++]=" csysi_cmd = byte&0xF0;"; in makefreebsdmidi()
1684 z[lc++]=" csysi_extchan = byte&0x0F;"; in makefreebsdmidi()
1685 z[lc++]=" }"; in makefreebsdmidi()
1686 z[lc++]=" switch (byte&0xF0) {"; in makefreebsdmidi()
1687 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makefreebsdmidi()
1688 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makefreebsdmidi()
1689 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makefreebsdmidi()
1690 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makefreebsdmidi()
1691 z[lc++]=" case CSYS_MIDI_CC:"; in makefreebsdmidi()
1692 z[lc++]=" csysi_num = 2;"; in makefreebsdmidi()
1693 z[lc++]=" break;"; in makefreebsdmidi()
1694 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makefreebsdmidi()
1695 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makefreebsdmidi()
1696 z[lc++]=" csysi_num = 1;"; in makefreebsdmidi()
1697 z[lc++]=" break;"; in makefreebsdmidi()
1698 z[lc++]=" case 0xF0: "; in makefreebsdmidi()
1699 z[lc++]=" if ((byte&0x0F)==2) /* song pointer -- 2 data bytes */"; in makefreebsdmidi()
1700 z[lc++]=" {"; in makefreebsdmidi()
1701 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1702 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1703 z[lc++]=" else"; in makefreebsdmidi()
1704 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1705 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1706 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1707 z[lc++]=" else"; in makefreebsdmidi()
1708 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1709 z[lc++]=" }"; in makefreebsdmidi()
1710 z[lc++]=" if ((byte&0x0F)==3) /* song select -- 1 data byte */"; in makefreebsdmidi()
1711 z[lc++]=" {"; in makefreebsdmidi()
1712 z[lc++]=" if (csysi_cnt < csysi_len)"; in makefreebsdmidi()
1713 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1714 z[lc++]=" else"; in makefreebsdmidi()
1715 z[lc++]=" csysi_getbyte();"; in makefreebsdmidi()
1716 z[lc++]=" }"; in makefreebsdmidi()
1717 z[lc++]=" break;"; in makefreebsdmidi()
1718 z[lc++]=" }"; in makefreebsdmidi()
1719 z[lc++]=" }"; in makefreebsdmidi()
1720 z[lc++]=" }"; in makefreebsdmidi()
1721 z[lc++]=""; in makefreebsdmidi()
1722 z[lc++]=" /* outside of if {} to catch errant F7 bytes */"; in makefreebsdmidi()
1723 z[lc++]=""; in makefreebsdmidi()
1724 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1725 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1726 z[lc++]=" else"; in makefreebsdmidi()
1727 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1728 z[lc++]=""; in makefreebsdmidi()
1729 z[lc++]="}"; in makefreebsdmidi()
1730 z[lc++]=""; in makefreebsdmidi()
1731 z[lc++]=""; in makefreebsdmidi()
1732 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1733 z[lc++]="/* processes a MIDI event */"; in makefreebsdmidi()
1734 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1735 z[lc++]=""; in makefreebsdmidi()
1736 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makefreebsdmidi()
1737 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makefreebsdmidi()
1738 z[lc++]=" float * fval)"; in makefreebsdmidi()
1739 z[lc++]=""; in makefreebsdmidi()
1740 z[lc++]="{"; in makefreebsdmidi()
1741 z[lc++]=" unsigned char overflow[2], oval;"; in makefreebsdmidi()
1742 z[lc++]=" int len, tot, idx;"; in makefreebsdmidi()
1743 z[lc++]=""; in makefreebsdmidi()
1744 z[lc++]=""; in makefreebsdmidi()
1745 z[lc++]=" if (csysi_data[csysi_cnt] > 127) /* a command byte */"; in makefreebsdmidi()
1746 z[lc++]=" {"; in makefreebsdmidi()
1747 z[lc++]=" *cmd = 0xF0 & csysi_data[csysi_cnt];"; in makefreebsdmidi()
1748 z[lc++]=" *extchan = 0x0F & csysi_data[csysi_cnt];"; in makefreebsdmidi()
1749 z[lc++]=" if (*cmd != 0xF0)"; in makefreebsdmidi()
1750 z[lc++]=" {"; in makefreebsdmidi()
1751 z[lc++]=" csysi_cmd = *cmd;"; in makefreebsdmidi()
1752 z[lc++]=" csysi_extchan = *extchan;"; in makefreebsdmidi()
1753 z[lc++]=" }"; in makefreebsdmidi()
1754 z[lc++]=" csysi_cnt++;"; in makefreebsdmidi()
1755 z[lc++]=" switch (*cmd) {"; in makefreebsdmidi()
1756 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makefreebsdmidi()
1757 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makefreebsdmidi()
1758 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makefreebsdmidi()
1759 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makefreebsdmidi()
1760 z[lc++]=" case CSYS_MIDI_CC:"; in makefreebsdmidi()
1761 z[lc++]=" csysi_num = 2;"; in makefreebsdmidi()
1762 z[lc++]=" if (CSYSI_DELAY && ((csysi_cnt + 1) == csysi_len)) /* delay cmd */"; in makefreebsdmidi()
1763 z[lc++]=" {"; in makefreebsdmidi()
1764 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makefreebsdmidi()
1765 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makefreebsdmidi()
1766 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1767 z[lc++]=" }"; in makefreebsdmidi()
1768 z[lc++]=" break;"; in makefreebsdmidi()
1769 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makefreebsdmidi()
1770 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makefreebsdmidi()
1771 z[lc++]=" csysi_num = 1;"; in makefreebsdmidi()
1772 z[lc++]=" break;"; in makefreebsdmidi()
1773 z[lc++]=" case 0xF0: "; in makefreebsdmidi()
1774 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makefreebsdmidi()
1775 z[lc++]=" return csysi_sysflush(*extchan);"; in makefreebsdmidi()
1776 z[lc++]=" break;"; in makefreebsdmidi()
1777 z[lc++]=" }"; in makefreebsdmidi()
1778 z[lc++]=" if (CSYSI_DELAY && (csysi_cnt == csysi_len)) /* delay cmd */"; in makefreebsdmidi()
1779 z[lc++]=" {"; in makefreebsdmidi()
1780 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makefreebsdmidi()
1781 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1782 z[lc++]=" }"; in makefreebsdmidi()
1783 z[lc++]=" }"; in makefreebsdmidi()
1784 z[lc++]=" else /* running status or a delayed MIDI command */"; in makefreebsdmidi()
1785 z[lc++]=" {"; in makefreebsdmidi()
1786 z[lc++]=" *cmd = csysi_cmd;"; in makefreebsdmidi()
1787 z[lc++]=" *extchan = csysi_extchan;"; in makefreebsdmidi()
1788 z[lc++]=" if (CSYSI_DELAY && (csysi_ndata != 0xFF)) /* finish delayed cmd */"; in makefreebsdmidi()
1789 z[lc++]=" {"; in makefreebsdmidi()
1790 z[lc++]=" *ndata = csysi_ndata;"; in makefreebsdmidi()
1791 z[lc++]=" csysi_ndata = 0xFF;"; in makefreebsdmidi()
1792 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makefreebsdmidi()
1793 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makefreebsdmidi()
1794 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1795 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1796 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1797 z[lc++]=" else"; in makefreebsdmidi()
1798 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1799 z[lc++]=" }"; in makefreebsdmidi()
1800 z[lc++]=" if (CSYSI_DELAY && (csysi_num == 2) && /* (further) delay cmd */"; in makefreebsdmidi()
1801 z[lc++]=" (csysi_cnt + 1 == csysi_len))"; in makefreebsdmidi()
1802 z[lc++]=" {"; in makefreebsdmidi()
1803 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makefreebsdmidi()
1804 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makefreebsdmidi()
1805 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1806 z[lc++]=" }"; in makefreebsdmidi()
1807 z[lc++]=" }"; in makefreebsdmidi()
1808 z[lc++]=""; in makefreebsdmidi()
1809 z[lc++]=" /* do complete commands and finish some types of delayed commands */"; in makefreebsdmidi()
1810 z[lc++]=""; in makefreebsdmidi()
1811 z[lc++]=" if (csysi_cnt + csysi_num <= csysi_len)"; in makefreebsdmidi()
1812 z[lc++]=" {"; in makefreebsdmidi()
1813 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makefreebsdmidi()
1814 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makefreebsdmidi()
1815 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1816 z[lc++]=" if (csysi_num == 2)"; in makefreebsdmidi()
1817 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1818 z[lc++]=" if (csysi_cnt == csysi_len)"; in makefreebsdmidi()
1819 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1820 z[lc++]=" else"; in makefreebsdmidi()
1821 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefreebsdmidi()
1822 z[lc++]=" }"; in makefreebsdmidi()
1823 z[lc++]=""; in makefreebsdmidi()
1824 z[lc++]=" /* should never execute if CSYSI_DELAY is 1 */"; in makefreebsdmidi()
1825 z[lc++]=""; in makefreebsdmidi()
1826 z[lc++]=" csysi_newnote |= (((*cmd) == CSYS_MIDI_NOTEON) |"; in makefreebsdmidi()
1827 z[lc++]=" ((*cmd) == CSYS_MIDI_NOTEOFF));"; in makefreebsdmidi()
1828 z[lc++]=""; in makefreebsdmidi()
1829 z[lc++]=" tot = csysi_cnt + csysi_num - csysi_len;"; in makefreebsdmidi()
1830 z[lc++]=" idx = 0;"; in makefreebsdmidi()
1831 z[lc++]=" while (tot > 0)"; in makefreebsdmidi()
1832 z[lc++]=" {"; in makefreebsdmidi()
1833 z[lc++]=" overflow[idx++] = csysi_getbyte();"; in makefreebsdmidi()
1834 z[lc++]=" tot--;"; in makefreebsdmidi()
1835 z[lc++]=" }"; in makefreebsdmidi()
1836 z[lc++]=" if (csysi_num == 1) "; in makefreebsdmidi()
1837 z[lc++]=" {"; in makefreebsdmidi()
1838 z[lc++]=" *ndata = overflow[0];"; in makefreebsdmidi()
1839 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1840 z[lc++]=" }"; in makefreebsdmidi()
1841 z[lc++]=" if (csysi_cnt + 1 == csysi_len)"; in makefreebsdmidi()
1842 z[lc++]=" {"; in makefreebsdmidi()
1843 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makefreebsdmidi()
1844 z[lc++]=" *vdata = overflow[0];"; in makefreebsdmidi()
1845 z[lc++]=" }"; in makefreebsdmidi()
1846 z[lc++]=" else"; in makefreebsdmidi()
1847 z[lc++]=" {"; in makefreebsdmidi()
1848 z[lc++]=" *ndata = overflow[0];"; in makefreebsdmidi()
1849 z[lc++]=" *vdata = overflow[1];"; in makefreebsdmidi()
1850 z[lc++]=" }"; in makefreebsdmidi()
1851 z[lc++]=" return csysi_midiparseover();"; in makefreebsdmidi()
1852 z[lc++]=" "; in makefreebsdmidi()
1853 z[lc++]="}"; in makefreebsdmidi()
1854 z[lc++]=""; in makefreebsdmidi()
1855 z[lc++]=""; in makefreebsdmidi()
1856 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1857 z[lc++]="/* closing routine for control */"; in makefreebsdmidi()
1858 z[lc++]="/****************************************************************/"; in makefreebsdmidi()
1859 z[lc++]=""; in makefreebsdmidi()
1860 z[lc++]="void csys_shutdown(void)"; in makefreebsdmidi()
1861 z[lc++]=" "; in makefreebsdmidi()
1862 z[lc++]="{"; in makefreebsdmidi()
1863 z[lc++]=" /* disarm timer */"; in makefreebsdmidi()
1864 z[lc++]=""; in makefreebsdmidi()
1865 z[lc++]=" if (sigprocmask(SIG_BLOCK, &csysi_overrun_mask, NULL) < 0)"; in makefreebsdmidi()
1866 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't mask MIDI overrun time\");"; in makefreebsdmidi()
1867 z[lc++]=""; in makefreebsdmidi()
1868 z[lc++]=" csysi_overrun_timer.it_value.tv_sec = 0;"; in makefreebsdmidi()
1869 z[lc++]=" csysi_overrun_timer.it_value.tv_usec = 0;"; in makefreebsdmidi()
1870 z[lc++]=" csysi_overrun_timer.it_interval.tv_sec = 0;"; in makefreebsdmidi()
1871 z[lc++]=" csysi_overrun_timer.it_interval.tv_usec = 0;"; in makefreebsdmidi()
1872 z[lc++]=""; in makefreebsdmidi()
1873 z[lc++]=" if (setitimer(ITIMER_REAL, &csysi_overrun_timer, NULL) < 0)"; in makefreebsdmidi()
1874 z[lc++]=" CSYSI_ERROR_TERMINATE(\"Couldn't disarm ITIMER_REAL timer\");"; in makefreebsdmidi()
1875 z[lc++]=""; in makefreebsdmidi()
1876 z[lc++]=" close(csysi_midi);"; in makefreebsdmidi()
1877 z[lc++]="}"; in makefreebsdmidi()
1878 z[lc++]=""; in makefreebsdmidi()
1879 z[lc++]=""; in makefreebsdmidi()
1880 z[lc++]="#undef CSYSI_MIDIDEV"; in makefreebsdmidi()
1881 z[lc++]="#undef CSYSI_BUFFSIZE"; in makefreebsdmidi()
1882 z[lc++]="#undef CSYSI_SYSEX_EOX"; in makefreebsdmidi()
1883 z[lc++]="#undef CSYSI_DELAY"; in makefreebsdmidi()
1884 z[lc++]="#undef CSYSI_ALARMPERIOD"; in makefreebsdmidi()
1885 z[lc++]="#undef CSYSI_ERROR_RETURN"; in makefreebsdmidi()
1886 z[lc++]="#undef CSYSI_ERROR_TERMINATE"; in makefreebsdmidi()
1887 z[lc++]=""; in makefreebsdmidi()
1896 z[lc++]="/*"; in makewin32()
1897 z[lc++]="# Sfront, a SAOL to C translator "; in makewin32()
1898 z[lc++]="# This file: Win32 Directsound MIDI IN soundcard jack driver for sfront"; in makewin32()
1899 z[lc++]="#"; in makewin32()
1900 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makewin32()
1901 z[lc++]="# All rights reserved."; in makewin32()
1902 z[lc++]="#"; in makewin32()
1903 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makewin32()
1904 z[lc++]="# modification, are permitted provided that the following conditions are"; in makewin32()
1905 z[lc++]="# met:"; in makewin32()
1906 z[lc++]="#"; in makewin32()
1907 z[lc++]="# Redistributions of source code must retain the above copyright"; in makewin32()
1908 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makewin32()
1909 z[lc++]="#"; in makewin32()
1910 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makewin32()
1911 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makewin32()
1912 z[lc++]="# documentation and/or other materials provided with the distribution."; in makewin32()
1913 z[lc++]="#"; in makewin32()
1914 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makewin32()
1915 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makewin32()
1916 z[lc++]="# derived from this software without specific prior written permission."; in makewin32()
1917 z[lc++]="#"; in makewin32()
1918 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makewin32()
1919 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makewin32()
1920 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makewin32()
1921 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makewin32()
1922 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makewin32()
1923 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makewin32()
1924 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makewin32()
1925 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makewin32()
1926 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makewin32()
1927 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makewin32()
1928 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makewin32()
1929 z[lc++]="#"; in makewin32()
1930 z[lc++]="# Author: Professor John Wawrzynek, UCB CS Division"; in makewin32()
1931 z[lc++]="# Maintainance Email To: John Lazzaro, lazzaro@cs.berkeley.edu"; in makewin32()
1932 z[lc++]="#"; in makewin32()
1933 z[lc++]="*/"; in makewin32()
1934 z[lc++]=""; in makewin32()
1935 z[lc++]=""; in makewin32()
1936 z[lc++]="/*"; in makewin32()
1937 z[lc++]=" * WIN32 midi driver for sfront."; in makewin32()
1938 z[lc++]=" *"; in makewin32()
1939 z[lc++]=" */"; in makewin32()
1940 z[lc++]=""; in makewin32()
1941 z[lc++]="#include <windows.h>"; in makewin32()
1942 z[lc++]="#include <windowsx.h>"; in makewin32()
1943 z[lc++]="#include <mmsystem.h>"; in makewin32()
1944 z[lc++]=""; in makewin32()
1945 z[lc++]="#include <stdio.h>"; in makewin32()
1946 z[lc++]=""; in makewin32()
1947 z[lc++]=""; in makewin32()
1948 z[lc++]="/*"; in makewin32()
1949 z[lc++]=" * Globals"; in makewin32()
1950 z[lc++]=" */"; in makewin32()
1951 z[lc++]="#define CSYSI_MIDIBUFSIZ 256"; in makewin32()
1952 z[lc++]=""; in makewin32()
1953 z[lc++]="// midi related"; in makewin32()
1954 z[lc++]=""; in makewin32()
1955 z[lc++]="DWORD csysi_midiBufA[CSYSI_MIDIBUFSIZ];"; in makewin32()
1956 z[lc++]="DWORD csysi_midiBufB[CSYSI_MIDIBUFSIZ];"; in makewin32()
1957 z[lc++]=""; in makewin32()
1958 z[lc++]="DWORD * csysi_midiWrite;"; in makewin32()
1959 z[lc++]="DWORD * csysi_bufWrPtr;"; in makewin32()
1960 z[lc++]=""; in makewin32()
1961 z[lc++]="DWORD * csysi_bufRdPtr;"; in makewin32()
1962 z[lc++]="DWORD * csysi_midiRdEnd;"; in makewin32()
1963 z[lc++]=""; in makewin32()
1964 z[lc++]="HMIDIIN csysi_hMidiIn;"; in makewin32()
1965 z[lc++]=""; in makewin32()
1966 z[lc++]="// console stuff for graceful exit"; in makewin32()
1967 z[lc++]=""; in makewin32()
1968 z[lc++]="HANDLE csysi_hStdin;"; in makewin32()
1969 z[lc++]="INPUT_RECORD csysi_irInBuf[1];"; in makewin32()
1970 z[lc++]="DWORD csysi_cNumRead, csysi_fdwSaveOldMode;"; in makewin32()
1971 z[lc++]="BOOL csysi_exitFlag;"; in makewin32()
1972 z[lc++]=""; in makewin32()
1973 z[lc++]=""; in makewin32()
1974 z[lc++]=""; in makewin32()
1975 z[lc++]="/****************************************************************/"; in makewin32()
1976 z[lc++]="/* Callback routine for incoming events */"; in makewin32()
1977 z[lc++]="/****************************************************************/"; in makewin32()
1978 z[lc++]=""; in makewin32()
1979 z[lc++]="void CALLBACK csysi_MidiInProc(HMIDIIN hMidiIn, UINT wMsg, DWORD dwInstance,"; in makewin32()
1980 z[lc++]=" DWORD dwParam1, DWORD dwParam2)"; in makewin32()
1981 z[lc++]="{"; in makewin32()
1982 z[lc++]=" if (csysi_bufWrPtr==csysi_midiWrite+CSYSI_MIDIBUFSIZ)"; in makewin32()
1983 z[lc++]=" {"; in makewin32()
1984 z[lc++]=" fprintf(stderr, \"Midi input buffer overflow, dropping event.\\n\");"; in makewin32()
1985 z[lc++]=" return;"; in makewin32()
1986 z[lc++]=" }"; in makewin32()
1987 z[lc++]=" *csysi_bufWrPtr++ = dwParam1;"; in makewin32()
1988 z[lc++]="}"; in makewin32()
1989 z[lc++]=""; in makewin32()
1990 z[lc++]="/****************************************************************/"; in makewin32()
1991 z[lc++]="/* initialization routine for control */"; in makewin32()
1992 z[lc++]="/****************************************************************/"; in makewin32()
1993 z[lc++]=""; in makewin32()
1994 z[lc++]="int csys_setup(void)"; in makewin32()
1995 z[lc++]="{"; in makewin32()
1996 z[lc++]=" csysi_midiWrite = csysi_bufWrPtr = &csysi_midiBufA;"; in makewin32()
1997 z[lc++]=""; in makewin32()
1998 z[lc++]=" // open first available midi input device"; in makewin32()
1999 z[lc++]=""; in makewin32()
2000 z[lc++]=" if (midiInOpen(&csysi_hMidiIn, (UINT) 0, (DWORD) "; in makewin32()
2001 z[lc++]=" &csysi_MidiInProc, 0L, (DWORD) CALLBACK_FUNCTION))"; in makewin32()
2002 z[lc++]=" {"; in makewin32()
2003 z[lc++]=" fprintf(stderr, \"MidiInOpen error.\\n\");"; in makewin32()
2004 z[lc++]=" return CSYS_ERROR;"; in makewin32()
2005 z[lc++]=" }"; in makewin32()
2006 z[lc++]=""; in makewin32()
2007 z[lc++]=" if (midiInStart(csysi_hMidiIn))"; in makewin32()
2008 z[lc++]=" {"; in makewin32()
2009 z[lc++]=" fprintf(stderr, \"MidiInStart error.\\n\");"; in makewin32()
2010 z[lc++]=" return CSYS_ERROR;"; in makewin32()
2011 z[lc++]=" }"; in makewin32()
2012 z[lc++]=""; in makewin32()
2013 z[lc++]=" // Console"; in makewin32()
2014 z[lc++]=""; in makewin32()
2015 z[lc++]=" csysi_hStdin = GetStdHandle(STD_INPUT_HANDLE);"; in makewin32()
2016 z[lc++]=" if (csysi_hStdin == INVALID_HANDLE_VALUE)"; in makewin32()
2017 z[lc++]=" {"; in makewin32()
2018 z[lc++]=" fprintf(stderr, \"GetStdHandle error.\\n\");"; in makewin32()
2019 z[lc++]=" exit(-1);"; in makewin32()
2020 z[lc++]=" }"; in makewin32()
2021 z[lc++]=""; in makewin32()
2022 z[lc++]=" if (! GetConsoleMode(csysi_hStdin, &csysi_fdwSaveOldMode) )"; in makewin32()
2023 z[lc++]=" {"; in makewin32()
2024 z[lc++]=" fprintf(stderr, \"GetConsoleMode error.\\n\");"; in makewin32()
2025 z[lc++]=" exit(-1);"; in makewin32()
2026 z[lc++]=" }"; in makewin32()
2027 z[lc++]=""; in makewin32()
2028 z[lc++]=" if (! SetConsoleMode(csysi_hStdin, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT)"; in makewin32()
2029 z[lc++]=")"; in makewin32()
2030 z[lc++]=" {"; in makewin32()
2031 z[lc++]=" fprintf(stderr, \"GetConsoleMode error.\\n\");"; in makewin32()
2032 z[lc++]=" exit(-1);"; in makewin32()
2033 z[lc++]=" }"; in makewin32()
2034 z[lc++]=""; in makewin32()
2035 z[lc++]=" csysi_cNumRead = 0;"; in makewin32()
2036 z[lc++]=" csysi_exitFlag = FALSE;"; in makewin32()
2037 z[lc++]=""; in makewin32()
2038 z[lc++]=" return CSYS_DONE;"; in makewin32()
2039 z[lc++]="}"; in makewin32()
2040 z[lc++]=""; in makewin32()
2041 z[lc++]="/****************************************************************/"; in makewin32()
2042 z[lc++]="/* polling routine for new data */"; in makewin32()
2043 z[lc++]="/****************************************************************/"; in makewin32()
2044 z[lc++]=""; in makewin32()
2045 z[lc++]="int csys_newdata(void)"; in makewin32()
2046 z[lc++]=" "; in makewin32()
2047 z[lc++]="{"; in makewin32()
2048 z[lc++]=" // check for console input"; in makewin32()
2049 z[lc++]=" PeekConsoleInput(csysi_hStdin, csysi_irInBuf, 1, &csysi_cNumRead);"; in makewin32()
2050 z[lc++]=" if (csysi_cNumRead>0) "; in makewin32()
2051 z[lc++]=" {"; in makewin32()
2052 z[lc++]=" csysi_exitFlag = TRUE;"; in makewin32()
2053 z[lc++]=" fprintf(stderr, \"exiting ... \\n\");"; in makewin32()
2054 z[lc++]=" return CSYS_MIDIEVENTS;"; in makewin32()
2055 z[lc++]=" }"; in makewin32()
2056 z[lc++]=""; in makewin32()
2057 z[lc++]=" // now midi stuff"; in makewin32()
2058 z[lc++]=" csysi_bufRdPtr = csysi_midiWrite;"; in makewin32()
2059 z[lc++]=" csysi_midiRdEnd = csysi_bufWrPtr; "; in makewin32()
2060 z[lc++]=""; in makewin32()
2061 z[lc++]=" // An input event RIGHT HERE will be lost!"; in makewin32()
2062 z[lc++]=""; in makewin32()
2063 z[lc++]=" // switch write buffer (avoid locking out incoming)"; in makewin32()
2064 z[lc++]=" if (csysi_midiWrite==csysi_midiBufA) "; in makewin32()
2065 z[lc++]=" csysi_bufWrPtr = csysi_midiWrite = csysi_midiBufB;"; in makewin32()
2066 z[lc++]=" else "; in makewin32()
2067 z[lc++]=" csysi_bufWrPtr = csysi_midiWrite = csysi_midiBufA;"; in makewin32()
2068 z[lc++]=""; in makewin32()
2069 z[lc++]=" if (csysi_midiRdEnd==csysi_bufRdPtr)"; in makewin32()
2070 z[lc++]=" return CSYS_NONE;"; in makewin32()
2071 z[lc++]=" else"; in makewin32()
2072 z[lc++]=" return CSYS_MIDIEVENTS;"; in makewin32()
2073 z[lc++]="}"; in makewin32()
2074 z[lc++]=""; in makewin32()
2075 z[lc++]="/****************************************************************/"; in makewin32()
2076 z[lc++]="/* processes a MIDI event */"; in makewin32()
2077 z[lc++]="/****************************************************************/"; in makewin32()
2078 z[lc++]=""; in makewin32()
2079 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makewin32()
2080 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makewin32()
2081 z[lc++]=" float * fval)"; in makewin32()
2082 z[lc++]="{"; in makewin32()
2083 z[lc++]=" DWORD msg;"; in makewin32()
2084 z[lc++]=""; in makewin32()
2085 z[lc++]=" // keyboard exit"; in makewin32()
2086 z[lc++]=" if (csysi_exitFlag)"; in makewin32()
2087 z[lc++]=" {"; in makewin32()
2088 z[lc++]=" *cmd = CSYS_MIDI_ENDTIME;"; in makewin32()
2089 z[lc++]=" *fval = EV(scorebeats);"; in makewin32()
2090 z[lc++]=" return CSYS_NONE;"; in makewin32()
2091 z[lc++]=" }"; in makewin32()
2092 z[lc++]=""; in makewin32()
2093 z[lc++]=" // unpack event"; in makewin32()
2094 z[lc++]=" msg = *csysi_bufRdPtr++;"; in makewin32()
2095 z[lc++]=" *cmd = 0xff & msg;"; in makewin32()
2096 z[lc++]=" *ndata = (0xff00 & msg) >> 8;"; in makewin32()
2097 z[lc++]=" *vdata = (0xff0000 & msg) >> 16;"; in makewin32()
2098 z[lc++]=" *extchan = 0;"; in makewin32()
2099 z[lc++]=""; in makewin32()
2100 z[lc++]=" if (csysi_midiRdEnd==csysi_bufRdPtr)"; in makewin32()
2101 z[lc++]=" return CSYS_NONE;"; in makewin32()
2102 z[lc++]=" else"; in makewin32()
2103 z[lc++]=" return CSYS_MIDIEVENTS;"; in makewin32()
2104 z[lc++]="}"; in makewin32()
2105 z[lc++]=""; in makewin32()
2106 z[lc++]="/****************************************************************/"; in makewin32()
2107 z[lc++]="/* closing routine for control */"; in makewin32()
2108 z[lc++]="/****************************************************************/"; in makewin32()
2109 z[lc++]=""; in makewin32()
2110 z[lc++]="void csys_shutdown(void)"; in makewin32()
2111 z[lc++]=" "; in makewin32()
2112 z[lc++]="{"; in makewin32()
2113 z[lc++]=" // restore console"; in makewin32()
2114 z[lc++]=" if (! SetConsoleMode(csysi_hStdin, csysi_fdwSaveOldMode) )"; in makewin32()
2115 z[lc++]=" {"; in makewin32()
2116 z[lc++]=" fprintf(stderr, \"GetConsoleMode error.\\n\");"; in makewin32()
2117 z[lc++]=" exit(-1);"; in makewin32()
2118 z[lc++]=" }"; in makewin32()
2119 z[lc++]=""; in makewin32()
2120 z[lc++]=" //close midi"; in makewin32()
2121 z[lc++]=" if (midiInClose(csysi_hMidiIn))"; in makewin32()
2122 z[lc++]=" {"; in makewin32()
2123 z[lc++]=" fprintf(stderr, \"MidiInClose error.\\n\");"; in makewin32()
2124 z[lc++]=" }"; in makewin32()
2125 z[lc++]=" return;"; in makewin32()
2126 z[lc++]="}"; in makewin32()
2127 z[lc++]=""; in makewin32()
2136 z[lc++]=""; in makealsamidi()
2137 z[lc++]=""; in makealsamidi()
2138 z[lc++]="/*"; in makealsamidi()
2139 z[lc++]="# Sfront, a SAOL to C translator "; in makealsamidi()
2140 z[lc++]="# This file: ALSA MIDI (Card 0, Device 0) control driver for sfront"; in makealsamidi()
2141 z[lc++]="#"; in makealsamidi()
2142 z[lc++]="# Can anyone think of a way of specifying the card/device number?"; in makealsamidi()
2143 z[lc++]="#"; in makealsamidi()
2144 z[lc++]="# This driver is a small modification of the linmidi.c driver."; in makealsamidi()
2145 z[lc++]="# The modifications were made by Steven Pickles (pix)"; in makealsamidi()
2146 z[lc++]="#"; in makealsamidi()
2147 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makealsamidi()
2148 z[lc++]="# All rights reserved."; in makealsamidi()
2149 z[lc++]="#"; in makealsamidi()
2150 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makealsamidi()
2151 z[lc++]="# modification, are permitted provided that the following conditions are"; in makealsamidi()
2152 z[lc++]="# met:"; in makealsamidi()
2153 z[lc++]="#"; in makealsamidi()
2154 z[lc++]="# Redistributions of source code must retain the above copyright"; in makealsamidi()
2155 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makealsamidi()
2156 z[lc++]="#"; in makealsamidi()
2157 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makealsamidi()
2158 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makealsamidi()
2159 z[lc++]="# documentation and/or other materials provided with the distribution."; in makealsamidi()
2160 z[lc++]="#"; in makealsamidi()
2161 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makealsamidi()
2162 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makealsamidi()
2163 z[lc++]="# derived from this software without specific prior written permission."; in makealsamidi()
2164 z[lc++]="#"; in makealsamidi()
2165 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makealsamidi()
2166 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makealsamidi()
2167 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makealsamidi()
2168 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makealsamidi()
2169 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makealsamidi()
2170 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makealsamidi()
2171 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makealsamidi()
2172 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makealsamidi()
2173 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makealsamidi()
2174 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makealsamidi()
2175 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makealsamidi()
2176 z[lc++]="#"; in makealsamidi()
2177 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makealsamidi()
2178 z[lc++]="*/"; in makealsamidi()
2179 z[lc++]=""; in makealsamidi()
2180 z[lc++]=""; in makealsamidi()
2181 z[lc++]="#include <sys/asoundlib.h>"; in makealsamidi()
2182 z[lc++]=""; in makealsamidi()
2183 z[lc++]="/****************************************************************/"; in makealsamidi()
2184 z[lc++]="/****************************************************************/"; in makealsamidi()
2185 z[lc++]="/* linux /dev/mid00 control driver for sfront */"; in makealsamidi()
2186 z[lc++]="/* alsamidi doesn't support root mode in -timesync yet */ "; in makealsamidi()
2187 z[lc++]="/****************************************************************/"; in makealsamidi()
2188 z[lc++]=""; in makealsamidi()
2189 z[lc++]="#define CSYSI_BUFFSIZE 1024"; in makealsamidi()
2190 z[lc++]="#define CSYSI_SYSEX_EOX 0xF7"; in makealsamidi()
2191 z[lc++]=""; in makealsamidi()
2192 z[lc++]="/* set CSYSI_DELAY to 0 to wait for partially completed MIDI commands */"; in makealsamidi()
2193 z[lc++]="/* waiting for commands decreases variance of the latency, at the */"; in makealsamidi()
2194 z[lc++]="/* expense of losing computation cycles */"; in makealsamidi()
2195 z[lc++]=""; in makealsamidi()
2196 z[lc++]="#define CSYSI_DELAY 1"; in makealsamidi()
2197 z[lc++]=""; in makealsamidi()
2198 z[lc++]="void *csysi_handle;"; in makealsamidi()
2199 z[lc++]="int csysi_card = 0;"; in makealsamidi()
2200 z[lc++]="int csysi_device = 0;"; in makealsamidi()
2201 z[lc++]="int csysi_error = 0;"; in makealsamidi()
2202 z[lc++]=""; in makealsamidi()
2203 z[lc++]="unsigned char csysi_hold[CSYSI_BUFFSIZE];"; in makealsamidi()
2204 z[lc++]="unsigned char csysi_data[CSYSI_BUFFSIZE];"; in makealsamidi()
2205 z[lc++]="int csysi_len;"; in makealsamidi()
2206 z[lc++]="int csysi_cnt;"; in makealsamidi()
2207 z[lc++]="unsigned char csysi_cmd;"; in makealsamidi()
2208 z[lc++]="unsigned char csysi_num;"; in makealsamidi()
2209 z[lc++]="unsigned short csysi_extchan;"; in makealsamidi()
2210 z[lc++]="unsigned char csysi_ndata = 0xFF;"; in makealsamidi()
2211 z[lc++]=""; in makealsamidi()
2212 z[lc++]="/****************************************************************/"; in makealsamidi()
2213 z[lc++]="/* initialization routine for control */"; in makealsamidi()
2214 z[lc++]="/****************************************************************/"; in makealsamidi()
2215 z[lc++]=""; in makealsamidi()
2216 z[lc++]="int csys_setup(void)"; in makealsamidi()
2217 z[lc++]="{"; in makealsamidi()
2218 z[lc++]=""; in makealsamidi()
2219z[lc++]=" if ((csysi_error = snd_rawmidi_open(&csysi_handle, csysi_card, csysi_device, SND_RAWMID… in makealsamidi()
2220 z[lc++]=" fprintf(stderr, \"ALSAMIDI: open failed: %s\\n\", snd_strerror(csysi_error));"; in makealsamidi()
2221 z[lc++]=" return CSYS_ERROR;"; in makealsamidi()
2222 z[lc++]=" }"; in makealsamidi()
2223 z[lc++]=""; in makealsamidi()
2224 z[lc++]=" if ((csysi_error = snd_rawmidi_block_mode(csysi_handle, 0)) < 0) {"; in makealsamidi()
2225z[lc++]=" fprintf(stderr, \"ALSAMIDI: disabling block mode failed: %s\\n\", snd_strerror(csysi_… in makealsamidi()
2226 z[lc++]=" return CSYS_ERROR;"; in makealsamidi()
2227 z[lc++]=" }"; in makealsamidi()
2228 z[lc++]=""; in makealsamidi()
2229 z[lc++]=" return CSYS_DONE;"; in makealsamidi()
2230 z[lc++]="}"; in makealsamidi()
2231 z[lc++]=""; in makealsamidi()
2232 z[lc++]="/****************************************************************/"; in makealsamidi()
2233 z[lc++]="/* polling routine for new data */"; in makealsamidi()
2234 z[lc++]="/****************************************************************/"; in makealsamidi()
2235 z[lc++]=""; in makealsamidi()
2236 z[lc++]="int csys_newdata(void)"; in makealsamidi()
2237 z[lc++]=" "; in makealsamidi()
2238 z[lc++]="{"; in makealsamidi()
2239 z[lc++]=" int i = 0;"; in makealsamidi()
2240 z[lc++]=" int len;"; in makealsamidi()
2241 z[lc++]=""; in makealsamidi()
2242 z[lc++]=" len = snd_rawmidi_read(csysi_handle, csysi_hold, CSYSI_BUFFSIZE); "; in makealsamidi()
2243 z[lc++]=" if (len < 0)"; in makealsamidi()
2244 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2245 z[lc++]=""; in makealsamidi()
2246 z[lc++]=" csysi_len = csysi_cnt = 0;"; in makealsamidi()
2247 z[lc++]=" while (i < len)"; in makealsamidi()
2248 z[lc++]=" {"; in makealsamidi()
2249 z[lc++]=" if (csysi_hold[i] <= CSYSI_SYSEX_EOX)"; in makealsamidi()
2250 z[lc++]=" csysi_data[csysi_len++] = csysi_hold[i];"; in makealsamidi()
2251 z[lc++]=" i++;"; in makealsamidi()
2252 z[lc++]=" }"; in makealsamidi()
2253 z[lc++]=""; in makealsamidi()
2254 z[lc++]=" if (!csysi_len)"; in makealsamidi()
2255 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2256 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2257 z[lc++]=" "; in makealsamidi()
2258 z[lc++]="}"; in makealsamidi()
2259 z[lc++]=""; in makealsamidi()
2260 z[lc++]="/****************************************************************/"; in makealsamidi()
2261 z[lc++]="/* gets one byte from MIDI stream */"; in makealsamidi()
2262 z[lc++]="/****************************************************************/"; in makealsamidi()
2263 z[lc++]=""; in makealsamidi()
2264 z[lc++]="unsigned char csysi_getbyte(void)"; in makealsamidi()
2265 z[lc++]=""; in makealsamidi()
2266 z[lc++]="{"; in makealsamidi()
2267 z[lc++]=" unsigned char d;"; in makealsamidi()
2268 z[lc++]=""; in makealsamidi()
2269 z[lc++]=" while ( !("; in makealsamidi()
2270 z[lc++]=" (snd_rawmidi_read(csysi_handle, &d, 1) == 1) &&"; in makealsamidi()
2271 z[lc++]=" (d <= CSYSI_SYSEX_EOX)) );"; in makealsamidi()
2272 z[lc++]=" return d;"; in makealsamidi()
2273 z[lc++]="}"; in makealsamidi()
2274 z[lc++]=""; in makealsamidi()
2275 z[lc++]="/****************************************************************/"; in makealsamidi()
2276 z[lc++]="/* flushes MIDI system messages */"; in makealsamidi()
2277 z[lc++]="/****************************************************************/"; in makealsamidi()
2278 z[lc++]=""; in makealsamidi()
2279 z[lc++]="int csysi_sysflush(unsigned short type)"; in makealsamidi()
2280 z[lc++]=""; in makealsamidi()
2281 z[lc++]="{"; in makealsamidi()
2282 z[lc++]=" unsigned char byte;"; in makealsamidi()
2283 z[lc++]=""; in makealsamidi()
2284 z[lc++]=" if ((type == 6) || /* one-byte messages */"; in makealsamidi()
2285 z[lc++]=" (type == 1) || /* undefined messages */"; in makealsamidi()
2286 z[lc++]=" (type == 4) ||"; in makealsamidi()
2287 z[lc++]=" (type == 5))"; in makealsamidi()
2288 z[lc++]=" { "; in makealsamidi()
2289 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2290 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2291 z[lc++]=" else"; in makealsamidi()
2292 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2293 z[lc++]=" }"; in makealsamidi()
2294 z[lc++]=" "; in makealsamidi()
2295 z[lc++]=" if (type == 3) /* song select -- 1 data byte */"; in makealsamidi()
2296 z[lc++]=" {"; in makealsamidi()
2297 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2298 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2299 z[lc++]=" else"; in makealsamidi()
2300 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2301 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2302 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2303 z[lc++]=" else"; in makealsamidi()
2304 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2305 z[lc++]=" }"; in makealsamidi()
2306 z[lc++]=" "; in makealsamidi()
2307 z[lc++]=" if (type == 2) /* song pointer -- 2 data bytes */"; in makealsamidi()
2308 z[lc++]=" {"; in makealsamidi()
2309 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2310 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2311 z[lc++]=" else"; in makealsamidi()
2312 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2313 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2314 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2315 z[lc++]=" else"; in makealsamidi()
2316 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2317 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2318 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2319 z[lc++]=" else"; in makealsamidi()
2320 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2321 z[lc++]=" }"; in makealsamidi()
2322 z[lc++]=""; in makealsamidi()
2323 z[lc++]=" if (type == 0) "; in makealsamidi()
2324 z[lc++]=" {"; in makealsamidi()
2325 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2326 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makealsamidi()
2327 z[lc++]=" else"; in makealsamidi()
2328 z[lc++]=" byte = csysi_getbyte();"; in makealsamidi()
2329 z[lc++]=" while (byte < CSYS_MIDI_NOTEOFF)"; in makealsamidi()
2330 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2331 z[lc++]=" byte = csysi_data[csysi_cnt++];"; in makealsamidi()
2332 z[lc++]=" else"; in makealsamidi()
2333 z[lc++]=" byte = csysi_getbyte();"; in makealsamidi()
2334 z[lc++]=" if (byte != CSYSI_SYSEX_EOX) /* non-compliant MIDI */"; in makealsamidi()
2335 z[lc++]=" {"; in makealsamidi()
2336 z[lc++]=" if ((byte&0xF0) != 0xF0)"; in makealsamidi()
2337 z[lc++]=" {"; in makealsamidi()
2338 z[lc++]=" csysi_cmd = byte&0xF0;"; in makealsamidi()
2339 z[lc++]=" csysi_extchan = byte&0x0F;"; in makealsamidi()
2340 z[lc++]=" }"; in makealsamidi()
2341 z[lc++]=" switch (byte&0xF0) {"; in makealsamidi()
2342 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makealsamidi()
2343 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makealsamidi()
2344 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makealsamidi()
2345 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makealsamidi()
2346 z[lc++]=" case CSYS_MIDI_CC:"; in makealsamidi()
2347 z[lc++]=" csysi_num = 2;"; in makealsamidi()
2348 z[lc++]=" break;"; in makealsamidi()
2349 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makealsamidi()
2350 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makealsamidi()
2351 z[lc++]=" csysi_num = 1;"; in makealsamidi()
2352 z[lc++]=" break;"; in makealsamidi()
2353 z[lc++]=" case 0xF0: "; in makealsamidi()
2354 z[lc++]=" if ((byte&0x0F)==2) /* song pointer -- 2 data bytes */"; in makealsamidi()
2355 z[lc++]=" {"; in makealsamidi()
2356 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2357 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2358 z[lc++]=" else"; in makealsamidi()
2359 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2360 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2361 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2362 z[lc++]=" else"; in makealsamidi()
2363 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2364 z[lc++]=" }"; in makealsamidi()
2365 z[lc++]=" if ((byte&0x0F)==3) /* song select -- 1 data byte */"; in makealsamidi()
2366 z[lc++]=" {"; in makealsamidi()
2367 z[lc++]=" if (csysi_cnt < csysi_len)"; in makealsamidi()
2368 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2369 z[lc++]=" else"; in makealsamidi()
2370 z[lc++]=" csysi_getbyte();"; in makealsamidi()
2371 z[lc++]=" }"; in makealsamidi()
2372 z[lc++]=" break;"; in makealsamidi()
2373 z[lc++]=" }"; in makealsamidi()
2374 z[lc++]=" }"; in makealsamidi()
2375 z[lc++]=" }"; in makealsamidi()
2376 z[lc++]=""; in makealsamidi()
2377 z[lc++]=" /* outside of if {} to catch errant F7 bytes */"; in makealsamidi()
2378 z[lc++]=""; in makealsamidi()
2379 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2380 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2381 z[lc++]=" else"; in makealsamidi()
2382 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2383 z[lc++]=""; in makealsamidi()
2384 z[lc++]="}"; in makealsamidi()
2385 z[lc++]=""; in makealsamidi()
2386 z[lc++]=""; in makealsamidi()
2387 z[lc++]="/****************************************************************/"; in makealsamidi()
2388 z[lc++]="/* processes a MIDI event */"; in makealsamidi()
2389 z[lc++]="/****************************************************************/"; in makealsamidi()
2390 z[lc++]=""; in makealsamidi()
2391 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makealsamidi()
2392 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makealsamidi()
2393 z[lc++]=" float * fval)"; in makealsamidi()
2394 z[lc++]=""; in makealsamidi()
2395 z[lc++]="{"; in makealsamidi()
2396 z[lc++]=" unsigned char overflow[2], oval;"; in makealsamidi()
2397 z[lc++]=" int len, tot, idx;"; in makealsamidi()
2398 z[lc++]=""; in makealsamidi()
2399 z[lc++]=" if (csysi_data[csysi_cnt] > 127) /* a command byte */"; in makealsamidi()
2400 z[lc++]=" {"; in makealsamidi()
2401 z[lc++]=" *cmd = 0xF0 & csysi_data[csysi_cnt];"; in makealsamidi()
2402 z[lc++]=" *extchan = 0x0F & csysi_data[csysi_cnt];"; in makealsamidi()
2403 z[lc++]=" if (*cmd != 0xF0)"; in makealsamidi()
2404 z[lc++]=" {"; in makealsamidi()
2405 z[lc++]=" csysi_cmd = *cmd;"; in makealsamidi()
2406 z[lc++]=" csysi_extchan = *extchan;"; in makealsamidi()
2407 z[lc++]=" }"; in makealsamidi()
2408 z[lc++]=" csysi_cnt++;"; in makealsamidi()
2409 z[lc++]=" switch (*cmd) {"; in makealsamidi()
2410 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makealsamidi()
2411 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makealsamidi()
2412 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makealsamidi()
2413 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makealsamidi()
2414 z[lc++]=" case CSYS_MIDI_CC:"; in makealsamidi()
2415 z[lc++]=" csysi_num = 2;"; in makealsamidi()
2416 z[lc++]=" if (CSYSI_DELAY && ((csysi_cnt + 1) == csysi_len)) /* delay cmd */"; in makealsamidi()
2417 z[lc++]=" {"; in makealsamidi()
2418 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makealsamidi()
2419 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsamidi()
2420 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2421 z[lc++]=" }"; in makealsamidi()
2422 z[lc++]=" break;"; in makealsamidi()
2423 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makealsamidi()
2424 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makealsamidi()
2425 z[lc++]=" csysi_num = 1;"; in makealsamidi()
2426 z[lc++]=" break;"; in makealsamidi()
2427 z[lc++]=" case 0xF0: "; in makealsamidi()
2428 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsamidi()
2429 z[lc++]=" return csysi_sysflush(*extchan);"; in makealsamidi()
2430 z[lc++]=" break;"; in makealsamidi()
2431 z[lc++]=" }"; in makealsamidi()
2432 z[lc++]=" if (CSYSI_DELAY && (csysi_cnt == csysi_len)) /* delay cmd */"; in makealsamidi()
2433 z[lc++]=" {"; in makealsamidi()
2434 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsamidi()
2435 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2436 z[lc++]=" }"; in makealsamidi()
2437 z[lc++]=" }"; in makealsamidi()
2438 z[lc++]=" else /* running status or a delayed MIDI command */"; in makealsamidi()
2439 z[lc++]=" {"; in makealsamidi()
2440 z[lc++]=" *cmd = csysi_cmd;"; in makealsamidi()
2441 z[lc++]=" *extchan = csysi_extchan;"; in makealsamidi()
2442 z[lc++]=" if (CSYSI_DELAY && (csysi_ndata != 0xFF)) /* finish delayed cmd */"; in makealsamidi()
2443 z[lc++]=" {"; in makealsamidi()
2444 z[lc++]=" *ndata = csysi_ndata;"; in makealsamidi()
2445 z[lc++]=" csysi_ndata = 0xFF;"; in makealsamidi()
2446 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makealsamidi()
2447 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2448 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2449 z[lc++]=" else"; in makealsamidi()
2450 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2451 z[lc++]=" }"; in makealsamidi()
2452 z[lc++]=" if (CSYSI_DELAY && (csysi_num == 2) && /* (further) delay cmd */"; in makealsamidi()
2453 z[lc++]=" (csysi_cnt + 1 == csysi_len))"; in makealsamidi()
2454 z[lc++]=" {"; in makealsamidi()
2455 z[lc++]=" csysi_ndata = csysi_data[csysi_cnt];"; in makealsamidi()
2456 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsamidi()
2457 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2458 z[lc++]=" }"; in makealsamidi()
2459 z[lc++]=" }"; in makealsamidi()
2460 z[lc++]=""; in makealsamidi()
2461 z[lc++]=" /* do complete commands and finish some types of delayed commands */"; in makealsamidi()
2462 z[lc++]=""; in makealsamidi()
2463 z[lc++]=" if (csysi_cnt + csysi_num <= csysi_len)"; in makealsamidi()
2464 z[lc++]=" {"; in makealsamidi()
2465 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makealsamidi()
2466 z[lc++]=" if (csysi_num == 2)"; in makealsamidi()
2467 z[lc++]=" *vdata = csysi_data[csysi_cnt++];"; in makealsamidi()
2468 z[lc++]=" if (csysi_cnt == csysi_len)"; in makealsamidi()
2469 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2470 z[lc++]=" else"; in makealsamidi()
2471 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsamidi()
2472 z[lc++]=" }"; in makealsamidi()
2473 z[lc++]=""; in makealsamidi()
2474 z[lc++]=" /* should never execute if CSYSI_DELAY is 1 */"; in makealsamidi()
2475 z[lc++]=""; in makealsamidi()
2476 z[lc++]=" tot = csysi_cnt + csysi_num - csysi_len;"; in makealsamidi()
2477 z[lc++]=" idx = 0;"; in makealsamidi()
2478 z[lc++]=" while (tot > 0)"; in makealsamidi()
2479 z[lc++]=" {"; in makealsamidi()
2480 z[lc++]=" if ( "; in makealsamidi()
2481 z[lc++]=" //(read(csysi_midi, &oval, 1) == 1) &&"; in makealsamidi()
2482 z[lc++]=" (snd_rawmidi_read(csysi_handle, &oval, 1) == 1) &&"; in makealsamidi()
2483 z[lc++]=" (oval <= CSYSI_SYSEX_EOX) )"; in makealsamidi()
2484 z[lc++]=" {"; in makealsamidi()
2485 z[lc++]=" tot--;"; in makealsamidi()
2486 z[lc++]=" overflow[idx++] = oval;"; in makealsamidi()
2487 z[lc++]=" }"; in makealsamidi()
2488 z[lc++]=" }"; in makealsamidi()
2489 z[lc++]=""; in makealsamidi()
2490 z[lc++]=" if (csysi_num == 1) "; in makealsamidi()
2491 z[lc++]=" {"; in makealsamidi()
2492 z[lc++]=" *ndata = overflow[0];"; in makealsamidi()
2493 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2494 z[lc++]=" }"; in makealsamidi()
2495 z[lc++]=" if (csysi_cnt + 1 == csysi_len)"; in makealsamidi()
2496 z[lc++]=" {"; in makealsamidi()
2497 z[lc++]=" *ndata = csysi_data[csysi_cnt++];"; in makealsamidi()
2498 z[lc++]=" *vdata = overflow[0];"; in makealsamidi()
2499 z[lc++]=" }"; in makealsamidi()
2500 z[lc++]=" else"; in makealsamidi()
2501 z[lc++]=" {"; in makealsamidi()
2502 z[lc++]=" *ndata = overflow[0];"; in makealsamidi()
2503 z[lc++]=" *vdata = overflow[1];"; in makealsamidi()
2504 z[lc++]=" }"; in makealsamidi()
2505 z[lc++]=" return CSYS_NONE;"; in makealsamidi()
2506 z[lc++]=""; in makealsamidi()
2507 z[lc++]=" "; in makealsamidi()
2508 z[lc++]="}"; in makealsamidi()
2509 z[lc++]=""; in makealsamidi()
2510 z[lc++]="/****************************************************************/"; in makealsamidi()
2511 z[lc++]="/* closing routine for control */"; in makealsamidi()
2512 z[lc++]="/****************************************************************/"; in makealsamidi()
2513 z[lc++]=""; in makealsamidi()
2514 z[lc++]="void csys_shutdown(void)"; in makealsamidi()
2515 z[lc++]=" "; in makealsamidi()
2516 z[lc++]="{"; in makealsamidi()
2517 z[lc++]=" snd_rawmidi_close(csysi_handle);"; in makealsamidi()
2518 z[lc++]="}"; in makealsamidi()
2519 z[lc++]=""; in makealsamidi()
2520 z[lc++]=""; in makealsamidi()
2521 z[lc++]=""; in makealsamidi()
2522 z[lc++]=""; in makealsamidi()
2531 z[lc++]=""; in makealsaseq()
2532 z[lc++]="/*"; in makealsaseq()
2533 z[lc++]="# Sfront, a SAOL to C translator "; in makealsaseq()
2534 z[lc++]="# This file: ALSA Sequencer Control driver for Sfront."; in makealsaseq()
2535 z[lc++]="#"; in makealsaseq()
2536 z[lc++]="# This driver was originaly based on the alsamidi driver, but has"; in makealsaseq()
2537 z[lc++]="# been almost completely rewritten."; in makealsaseq()
2538 z[lc++]="#"; in makealsaseq()
2539 z[lc++]="# Copyright (C) 2001 Enrique Robledo Arnuncio"; in makealsaseq()
2540 z[lc++]="#"; in makealsaseq()
2541 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makealsaseq()
2542 z[lc++]="# modification, are permitted provided that the following conditions are"; in makealsaseq()
2543 z[lc++]="# met:"; in makealsaseq()
2544 z[lc++]="#"; in makealsaseq()
2545 z[lc++]="# Redistributions of source code must retain the above copyright"; in makealsaseq()
2546 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makealsaseq()
2547 z[lc++]="#"; in makealsaseq()
2548 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makealsaseq()
2549 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makealsaseq()
2550 z[lc++]="# documentation and/or other materials provided with the distribution."; in makealsaseq()
2551 z[lc++]="#"; in makealsaseq()
2552 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makealsaseq()
2553 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makealsaseq()
2554 z[lc++]="# derived from this software without specific prior written permission."; in makealsaseq()
2555 z[lc++]="#"; in makealsaseq()
2556 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makealsaseq()
2557 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makealsaseq()
2558 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makealsaseq()
2559 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makealsaseq()
2560 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makealsaseq()
2561 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makealsaseq()
2562 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makealsaseq()
2563 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makealsaseq()
2564 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makealsaseq()
2565 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makealsaseq()
2566 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makealsaseq()
2567 z[lc++]="#"; in makealsaseq()
2568 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makealsaseq()
2569 z[lc++]="*/"; in makealsaseq()
2570 z[lc++]=""; in makealsaseq()
2571 z[lc++]=""; in makealsaseq()
2572 z[lc++]="#include <sys/asoundlib.h>"; in makealsaseq()
2573 z[lc++]=""; in makealsaseq()
2574 z[lc++]="/****************************************************************/"; in makealsaseq()
2575 z[lc++]="/****************************************************************/"; in makealsaseq()
2576 z[lc++]="/* Linux ALSA /dev/snd/seq control driver for sfront */"; in makealsaseq()
2577 z[lc++]="/* See the alsaseq README file included in the sfman for usage */"; in makealsaseq()
2578 z[lc++]="/* tips and some configuration issues. */"; in makealsaseq()
2579 z[lc++]="/* Specific command line options: */"; in makealsaseq()
2580 z[lc++]="/* */"; in makealsaseq()
2581 z[lc++]="/* -csys_alsaseq_subscribe client:port [client:port ...] */"; in makealsaseq()
2582 z[lc++]="/* */"; in makealsaseq()
2583 z[lc++]="/****************************************************************/"; in makealsaseq()
2584 z[lc++]=""; in makealsaseq()
2585 z[lc++]="#undef CSYSI_DEBUG"; in makealsaseq()
2586 z[lc++]=""; in makealsaseq()
2587 z[lc++]="/* Configuration for multiple connections */"; in makealsaseq()
2588 z[lc++]="#define CSYSI_MAX_DEVS 32"; in makealsaseq()
2589 z[lc++]="#define CSYSI_MAP2_BITS 6"; in makealsaseq()
2590 z[lc++]="#define CSYSI_MASK1 0xFFC0"; in makealsaseq()
2591 z[lc++]=""; in makealsaseq()
2592 z[lc++]="/* Driver info */"; in makealsaseq()
2593 z[lc++]="snd_seq_t *csysi_handle;"; in makealsaseq()
2594 z[lc++]="int csysi_port;"; in makealsaseq()
2595 z[lc++]="unsigned short csysi_self_addr;"; in makealsaseq()
2596 z[lc++]=""; in makealsaseq()
2597 z[lc++]="/* ALSA address <-> channel device number associative tables interface */"; in makealsaseq()
2598 z[lc++]="void csysi_init_maps();"; in makealsaseq()
2599 z[lc++]="int csysi_new_ext_channel_device(unsigned short alsa_addr);"; in makealsaseq()
2600 z[lc++]="int csysi_read_ext_channel_device(unsigned short alsa_addr);"; in makealsaseq()
2601 z[lc++]="void csysi_remove_ext_channel_device(unsigned short alsa_addr);"; in makealsaseq()
2602 z[lc++]=""; in makealsaseq()
2603 z[lc++]=""; in makealsaseq()
2604 z[lc++]="/****************************************************************/"; in makealsaseq()
2605 z[lc++]="/* initialization routine for control */"; in makealsaseq()
2606 z[lc++]="/****************************************************************/"; in makealsaseq()
2607 z[lc++]=""; in makealsaseq()
2608 z[lc++]="int csysi_parse_address(const char* str)"; in makealsaseq()
2609 z[lc++]="{"; in makealsaseq()
2610 z[lc++]=" const char *port = NULL;"; in makealsaseq()
2611 z[lc++]=" int c,p;"; in makealsaseq()
2612 z[lc++]=" const char* pt;"; in makealsaseq()
2613 z[lc++]=" "; in makealsaseq()
2614 z[lc++]=" if (str==NULL)"; in makealsaseq()
2615 z[lc++]=" return -1;"; in makealsaseq()
2616 z[lc++]=" for (pt=str; *pt!=0; pt++) {"; in makealsaseq()
2617 z[lc++]=" if (*pt == ':' || *pt == '.')"; in makealsaseq()
2618 z[lc++]=" if (port==NULL) port = pt+1;"; in makealsaseq()
2619 z[lc++]=" else return -1;"; in makealsaseq()
2620 z[lc++]=" else"; in makealsaseq()
2621 z[lc++]=" if (!isdigit(*pt))"; in makealsaseq()
2622 z[lc++]=" return -1;"; in makealsaseq()
2623 z[lc++]=" }"; in makealsaseq()
2624 z[lc++]=" if (port == NULL)"; in makealsaseq()
2625 z[lc++]=" return -1;"; in makealsaseq()
2626 z[lc++]=" c = atoi(str);"; in makealsaseq()
2627 z[lc++]=" p = atoi(port);"; in makealsaseq()
2628 z[lc++]=" if (c<0 || c>255 || p<0 || p>255)"; in makealsaseq()
2629 z[lc++]=" return -1;"; in makealsaseq()
2630 z[lc++]=" return c<<8|p;"; in makealsaseq()
2631 z[lc++]="}"; in makealsaseq()
2632 z[lc++]=""; in makealsaseq()
2633 z[lc++]="int csys_setup(void)"; in makealsaseq()
2634 z[lc++]="{"; in makealsaseq()
2635 z[lc++]=" int res,arg,addr;"; in makealsaseq()
2636 z[lc++]=" "; in makealsaseq()
2637 z[lc++]=" /* Driver connection */"; in makealsaseq()
2638 z[lc++]=" if ((res = snd_seq_open(&csysi_handle, SND_SEQ_OPEN_IN)) < 0) {"; in makealsaseq()
2639 z[lc++]=" fprintf(stderr, \"ALSASEQ: Open failed: %s\\n\", snd_strerror(res));"; in makealsaseq()
2640 z[lc++]=" return CSYS_ERROR;"; in makealsaseq()
2641 z[lc++]=" }"; in makealsaseq()
2642 z[lc++]=" if ((res = snd_seq_set_client_name(csysi_handle,"; in makealsaseq()
2643 z[lc++]=" \"Sfront SA Synthesizer\")) < 0) {"; in makealsaseq()
2644 z[lc++]=" fprintf(stderr, \"ALSASEQ: Could not set name: %s\\n\","; in makealsaseq()
2645 z[lc++]=" snd_strerror(res));"; in makealsaseq()
2646 z[lc++]=" snd_seq_close(csysi_handle);"; in makealsaseq()
2647 z[lc++]=" return CSYS_ERROR;"; in makealsaseq()
2648 z[lc++]=" }"; in makealsaseq()
2649 z[lc++]=" if ((res = snd_seq_create_simple_port(csysi_handle,"; in makealsaseq()
2650 z[lc++]=" \"MIDI input\","; in makealsaseq()
2651 z[lc++]=" SND_SEQ_PORT_CAP_WRITE | "; in makealsaseq()
2652 z[lc++]=" SND_SEQ_PORT_CAP_SUBS_WRITE,"; in makealsaseq()
2653 z[lc++]=" SND_SEQ_PORT_TYPE_SYNTH)) < 0) {"; in makealsaseq()
2654 z[lc++]=" fprintf(stderr, \"ALSASEQ: Port creation failed: %s\\n\","; in makealsaseq()
2655 z[lc++]=" snd_strerror(res));"; in makealsaseq()
2656 z[lc++]=" snd_seq_close(csysi_handle);"; in makealsaseq()
2657 z[lc++]=" return CSYS_ERROR;"; in makealsaseq()
2658 z[lc++]=" }"; in makealsaseq()
2659 z[lc++]=" csysi_port = res;"; in makealsaseq()
2660 z[lc++]=" csysi_self_addr = snd_seq_client_id(csysi_handle) << 8 + res;"; in makealsaseq()
2661 z[lc++]=" "; in makealsaseq()
2662 z[lc++]=" /* Extended channel mapping tables initialization */"; in makealsaseq()
2663 z[lc++]=" csysi_init_maps();"; in makealsaseq()
2664 z[lc++]=" "; in makealsaseq()
2665 z[lc++]=" /* Command line processing */"; in makealsaseq()
2666 z[lc++]=" for (arg=1; arg<EV(csys_argc); arg++) {"; in makealsaseq()
2667 z[lc++]=" if (strcmp(EV(csys_argv[arg]),\"-csys_alsaseq_subscribe\"))"; in makealsaseq()
2668 z[lc++]=" continue;"; in makealsaseq()
2669 z[lc++]=" while ((arg+1)<EV(csys_argc) && EV(csys_argv[arg+1])[0] != '-') {"; in makealsaseq()
2670 z[lc++]=" arg++;"; in makealsaseq()
2671 z[lc++]=" if ((addr = csysi_parse_address(EV(csys_argv[arg]))) < 0) {"; in makealsaseq()
2672 z[lc++]=" fprintf(stderr,\"ALSASEQ: Warning: Invalid ALSA address: %s\\n\\n\","; in makealsaseq()
2673 z[lc++]=" EV(csys_argv[arg]));"; in makealsaseq()
2674 z[lc++]=" continue;"; in makealsaseq()
2675 z[lc++]=" }"; in makealsaseq()
2676 z[lc++]=" if (csysi_new_ext_channel_device(addr) < 0) {"; in makealsaseq()
2677 z[lc++]=" fprintf(stderr,\"ALSASEQ: Warning: Ignored subscription to %s:\\n\""; in makealsaseq()
2678 z[lc++]=" \" Too many extended channel devices in use.\\n\\n\","; in makealsaseq()
2679 z[lc++]=" EV(csys_argv[arg]));"; in makealsaseq()
2680 z[lc++]=" continue;"; in makealsaseq()
2681 z[lc++]=" }"; in makealsaseq()
2682 z[lc++]=" if ((res = snd_seq_connect_from(csysi_handle,"; in makealsaseq()
2683 z[lc++]=" csysi_port,"; in makealsaseq()
2684 z[lc++]=" (addr&0xFF00)>>8,"; in makealsaseq()
2685 z[lc++]=" addr&0x00FF)) < 0) {"; in makealsaseq()
2686 z[lc++]=" csysi_remove_ext_channel_device(addr);"; in makealsaseq()
2687 z[lc++]=" fprintf(stderr,"; in makealsaseq()
2688 z[lc++]=" \"ALSASEQ: Warning: Could not connect\""; in makealsaseq()
2689 z[lc++]=" \"to the given address: %s\\n\\n\","; in makealsaseq()
2690 z[lc++]=" EV(csys_argv[arg]));"; in makealsaseq()
2691 z[lc++]=" }"; in makealsaseq()
2692 z[lc++]=" }"; in makealsaseq()
2693 z[lc++]=" }"; in makealsaseq()
2694 z[lc++]=" return CSYS_DONE;"; in makealsaseq()
2695 z[lc++]="}"; in makealsaseq()
2696 z[lc++]=""; in makealsaseq()
2697 z[lc++]="/****************************************************************/"; in makealsaseq()
2698 z[lc++]="/* polling routine for new data */"; in makealsaseq()
2699 z[lc++]="/****************************************************************/"; in makealsaseq()
2700 z[lc++]=""; in makealsaseq()
2701 z[lc++]="int csys_newdata(void)"; in makealsaseq()
2702 z[lc++]=" "; in makealsaseq()
2703 z[lc++]="{"; in makealsaseq()
2704 z[lc++]=" int len;"; in makealsaseq()
2705 z[lc++]=" "; in makealsaseq()
2706 z[lc++]=" len = snd_seq_event_input_pending(csysi_handle,1);"; in makealsaseq()
2707 z[lc++]=" if (len <= 0)"; in makealsaseq()
2708 z[lc++]=" return CSYS_NONE;"; in makealsaseq()
2709 z[lc++]=" return CSYS_MIDIEVENTS;"; in makealsaseq()
2710 z[lc++]="}"; in makealsaseq()
2711 z[lc++]=""; in makealsaseq()
2712 z[lc++]=""; in makealsaseq()
2713 z[lc++]="/****************************************************************/"; in makealsaseq()
2714 z[lc++]="/* processes a MIDI event */"; in makealsaseq()
2715 z[lc++]="/****************************************************************/"; in makealsaseq()
2716 z[lc++]=""; in makealsaseq()
2717 z[lc++]="int csys_midievent(unsigned char * cmd,"; in makealsaseq()
2718 z[lc++]=" unsigned char * ndata, "; in makealsaseq()
2719 z[lc++]=" unsigned char * vdata, "; in makealsaseq()
2720 z[lc++]=" unsigned short * extchan,"; in makealsaseq()
2721 z[lc++]=" float * fval)"; in makealsaseq()
2722 z[lc++]=" "; in makealsaseq()
2723 z[lc++]="{"; in makealsaseq()
2724 z[lc++]=" snd_seq_event_t *event;"; in makealsaseq()
2725 z[lc++]=" int len,res,device;"; in makealsaseq()
2726 z[lc++]=" unsigned short channel;"; in makealsaseq()
2727 z[lc++]=" unsigned short alsa_address;"; in makealsaseq()
2728 z[lc++]=" "; in makealsaseq()
2729 z[lc++]=" res = snd_seq_event_input(csysi_handle,&event);"; in makealsaseq()
2730 z[lc++]=" if (res<0) {"; in makealsaseq()
2731 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsaseq()
2732 z[lc++]=" return CSYS_DONE;"; in makealsaseq()
2733 z[lc++]=" }"; in makealsaseq()
2734 z[lc++]=" "; in makealsaseq()
2735 z[lc++]=" /* First, we check where does the event come from */"; in makealsaseq()
2736 z[lc++]=" alsa_address = event->source.client << 8 + event->source.port;"; in makealsaseq()
2737 z[lc++]=" "; in makealsaseq()
2738 z[lc++]=" if (alsa_address == csysi_self_addr) {"; in makealsaseq()
2739 z[lc++]=" switch (event->type) {"; in makealsaseq()
2740 z[lc++]=" case SND_SEQ_EVENT_PORT_USED:"; in makealsaseq()
2741 z[lc++]=" alsa_address = event->data.addr.client << 8 + "; in makealsaseq()
2742 z[lc++]=" event->data.addr.port;"; in makealsaseq()
2743 z[lc++]=" device = csysi_new_ext_channel_device(alsa_address);"; in makealsaseq()
2744 z[lc++]="#ifdef CSYSI_DEBUG"; in makealsaseq()
2745 z[lc++]=" if (device < 0)"; in makealsaseq()
2746 z[lc++]=" fprintf(stderr,\"ALSASEQ: Could not map %d:%d:\""; in makealsaseq()
2747 z[lc++]=" \" no extended devices left\\n\","; in makealsaseq()
2748 z[lc++]=" event->data.addr.client,"; in makealsaseq()
2749 z[lc++]=" event->data.addr.port);"; in makealsaseq()
2750 z[lc++]=" else"; in makealsaseq()
2751 z[lc++]=" fprintf(stderr,\"ALSASEQ: %d:%d mapped to extended device %d\\n\","; in makealsaseq()
2752 z[lc++]=" event->data.addr.client,"; in makealsaseq()
2753 z[lc++]=" event->data.addr.port,"; in makealsaseq()
2754 z[lc++]=" device);"; in makealsaseq()
2755 z[lc++]="#endif "; in makealsaseq()
2756 z[lc++]=" break;"; in makealsaseq()
2757 z[lc++]=" }"; in makealsaseq()
2758 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsaseq()
2759 z[lc++]=" if ( snd_seq_event_input_pending(csysi_handle,1) <= 0)"; in makealsaseq()
2760 z[lc++]=" return CSYS_NONE;"; in makealsaseq()
2761 z[lc++]=" return CSYS_EVENTS;"; in makealsaseq()
2762 z[lc++]=" }"; in makealsaseq()
2763 z[lc++]=" "; in makealsaseq()
2764 z[lc++]=" device = csysi_read_ext_channel_device(alsa_address);"; in makealsaseq()
2765 z[lc++]=" if (device<0) { /* Unregistered source. Should not happen. */"; in makealsaseq()
2766 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsaseq()
2767 z[lc++]=" if ( snd_seq_event_input_pending(csysi_handle,1) <= 0)"; in makealsaseq()
2768 z[lc++]=" return CSYS_NONE;"; in makealsaseq()
2769 z[lc++]=" return CSYS_EVENTS;"; in makealsaseq()
2770 z[lc++]=" }"; in makealsaseq()
2771 z[lc++]=" "; in makealsaseq()
2772 z[lc++]=" switch (event->type) {"; in makealsaseq()
2773 z[lc++]=" case SND_SEQ_EVENT_NOTEON:"; in makealsaseq()
2774 z[lc++]=" *cmd = CSYS_MIDI_NOTEON;"; in makealsaseq()
2775 z[lc++]=" *ndata = event->data.note.note;"; in makealsaseq()
2776 z[lc++]=" *vdata = event->data.note.velocity;"; in makealsaseq()
2777 z[lc++]=" channel = event->data.note.channel;"; in makealsaseq()
2778 z[lc++]=" break;"; in makealsaseq()
2779 z[lc++]=" case SND_SEQ_EVENT_NOTEOFF:"; in makealsaseq()
2780 z[lc++]=" *cmd = CSYS_MIDI_NOTEOFF;"; in makealsaseq()
2781 z[lc++]=" *ndata = event->data.note.note;"; in makealsaseq()
2782 z[lc++]=" channel = event->data.note.channel;"; in makealsaseq()
2783 z[lc++]=" break;"; in makealsaseq()
2784 z[lc++]=" case SND_SEQ_EVENT_KEYPRESS: /* Not tested */"; in makealsaseq()
2785 z[lc++]=" *cmd = CSYS_MIDI_PTOUCH;"; in makealsaseq()
2786 z[lc++]=" *ndata = event->data.note.note;"; in makealsaseq()
2787 z[lc++]=" *vdata = event->data.note.velocity;"; in makealsaseq()
2788 z[lc++]=" channel = event->data.note.channel;"; in makealsaseq()
2789 z[lc++]=" break;"; in makealsaseq()
2790 z[lc++]=" case SND_SEQ_EVENT_CONTROLLER:"; in makealsaseq()
2791 z[lc++]=" *cmd = CSYS_MIDI_CC;"; in makealsaseq()
2792 z[lc++]=" *ndata = event->data.control.param;"; in makealsaseq()
2793 z[lc++]=" *vdata = event->data.control.value;"; in makealsaseq()
2794 z[lc++]=" channel = event->data.control.channel;"; in makealsaseq()
2795 z[lc++]=" break;"; in makealsaseq()
2796 z[lc++]=" case SND_SEQ_EVENT_PGMCHANGE:"; in makealsaseq()
2797 z[lc++]=" *cmd = CSYS_MIDI_PROGRAM;"; in makealsaseq()
2798 z[lc++]=" *ndata = event->data.control.value;"; in makealsaseq()
2799 z[lc++]=" channel = event->data.control.channel;"; in makealsaseq()
2800 z[lc++]=" break;"; in makealsaseq()
2801 z[lc++]=" case SND_SEQ_EVENT_CHANPRESS:"; in makealsaseq()
2802 z[lc++]=" *cmd = CSYS_MIDI_CTOUCH;"; in makealsaseq()
2803 z[lc++]=" *ndata = event->data.control.value;"; in makealsaseq()
2804 z[lc++]=" channel = event->data.control.channel;"; in makealsaseq()
2805 z[lc++]=" break;"; in makealsaseq()
2806 z[lc++]=" case SND_SEQ_EVENT_PITCHBEND:"; in makealsaseq()
2807 z[lc++]=" *cmd = CSYS_MIDI_WHEEL;"; in makealsaseq()
2808 z[lc++]=" *ndata = event->data.control.value & 0x007F;"; in makealsaseq()
2809 z[lc++]=" *vdata = (event->data.control.value & (0x007F << 7) ) >> 7;"; in makealsaseq()
2810 z[lc++]=" channel = event->data.control.channel;"; in makealsaseq()
2811 z[lc++]=" break;"; in makealsaseq()
2812 z[lc++]=" case SND_SEQ_EVENT_TEMPO: /* ??? Not tested. */"; in makealsaseq()
2813 z[lc++]=" *cmd = CSYS_MIDI_NEWTEMPO;"; in makealsaseq()
2814 z[lc++]=" *fval = (float)event->data.queue.param.value;"; in makealsaseq()
2815 z[lc++]=" break;"; in makealsaseq()
2816 z[lc++]=" case SND_SEQ_EVENT_PORT_UNUSED:"; in makealsaseq()
2817 z[lc++]=" csysi_remove_ext_channel_device(alsa_address);"; in makealsaseq()
2818 z[lc++]="#ifdef CSYSI_DEBUG"; in makealsaseq()
2819 z[lc++]=" fprintf(stderr,\"ALSASEQ: %d:%d disconected from device %d\\n\","; in makealsaseq()
2820 z[lc++]=" event->data.addr.client,"; in makealsaseq()
2821 z[lc++]=" event->data.addr.port,"; in makealsaseq()
2822 z[lc++]=" device);"; in makealsaseq()
2823 z[lc++]="#endif"; in makealsaseq()
2824 z[lc++]=" break;"; in makealsaseq()
2825 z[lc++]=" /* No MIDI_ENDTIME event in alsa? */"; in makealsaseq()
2826 z[lc++]=" default:"; in makealsaseq()
2827 z[lc++]=" *cmd = CSYS_MIDI_NOOP;"; in makealsaseq()
2828 z[lc++]=" }"; in makealsaseq()
2829 z[lc++]=" "; in makealsaseq()
2830 z[lc++]=" *extchan = device * 16 + channel;"; in makealsaseq()
2831 z[lc++]=" "; in makealsaseq()
2832 z[lc++]=" len = snd_seq_event_input_pending(csysi_handle,1);"; in makealsaseq()
2833 z[lc++]=" if (len <= 0)"; in makealsaseq()
2834 z[lc++]=" return CSYS_NONE;"; in makealsaseq()
2835 z[lc++]=" return CSYS_EVENTS;"; in makealsaseq()
2836 z[lc++]="}"; in makealsaseq()
2837 z[lc++]=""; in makealsaseq()
2838 z[lc++]="/****************************************************************/"; in makealsaseq()
2839 z[lc++]="/* closing routine for control */"; in makealsaseq()
2840 z[lc++]="/****************************************************************/"; in makealsaseq()
2841 z[lc++]=""; in makealsaseq()
2842 z[lc++]="void csys_shutdown(void)"; in makealsaseq()
2843 z[lc++]="{"; in makealsaseq()
2844 z[lc++]=" snd_seq_close(csysi_handle);"; in makealsaseq()
2845 z[lc++]="}"; in makealsaseq()
2846 z[lc++]=""; in makealsaseq()
2847 z[lc++]=""; in makealsaseq()
2848 z[lc++]="/****************************************************************/"; in makealsaseq()
2849 z[lc++]="/* ALSA address to extended channel device mapping */"; in makealsaseq()
2850 z[lc++]="/****************************************************************/"; in makealsaseq()
2851 z[lc++]=""; in makealsaseq()
2852 z[lc++]=""; in makealsaseq()
2853 z[lc++]="/* New alsa subscriptions to our port are asigned an \"extended device"; in makealsaseq()
2854 z[lc++]=" * number\" (dev). Extended channels will be calculated as:"; in makealsaseq()
2855 z[lc++]=" * extchan = dev*16 + MIDI_channel"; in makealsaseq()
2856 z[lc++]=" * The structures and functions below do the mapping between alsa"; in makealsaseq()
2857 z[lc++]=" * addresses and extended device number, using an asociative table"; in makealsaseq()
2858 z[lc++]=" * mechanism. A single level of indirection would require a 64Kb"; in makealsaseq()
2859 z[lc++]=" * table, so we use two levels of indirection."; in makealsaseq()
2860 z[lc++]=" */"; in makealsaseq()
2861 z[lc++]=""; in makealsaseq()
2862 z[lc++]="#define CSYSI_MASK2 ~CSYSI_MASK1"; in makealsaseq()
2863 z[lc++]="#define CSYSI_SIZE1 ( 1 << (16-CSYSI_MAP2_BITS) )"; in makealsaseq()
2864 z[lc++]="#define CSYSI_SIZE2 ( 1 << CSYSI_MAP2_BITS )"; in makealsaseq()
2865 z[lc++]=""; in makealsaseq()
2866 z[lc++]=""; in makealsaseq()
2867 z[lc++]="unsigned char csysi_is_used_dev[CSYSI_MAX_DEVS];"; in makealsaseq()
2868 z[lc++]="unsigned char csysi_available_dev;"; in makealsaseq()
2869 z[lc++]="unsigned short csysi_used_devs;"; in makealsaseq()
2870 z[lc++]="unsigned char csysi_map1[CSYSI_SIZE1];"; in makealsaseq()
2871 z[lc++]="unsigned char csysi_map2[CSYSI_MAX_DEVS][CSYSI_SIZE2];"; in makealsaseq()
2872 z[lc++]="unsigned char csysi_map2_counts[CSYSI_MAX_DEVS];"; in makealsaseq()
2873 z[lc++]="unsigned char csysi_available_page;"; in makealsaseq()
2874 z[lc++]=""; in makealsaseq()
2875 z[lc++]=""; in makealsaseq()
2876 z[lc++]="/* Initialize Address mapping structures */"; in makealsaseq()
2877 z[lc++]="void csysi_init_maps()"; in makealsaseq()
2878 z[lc++]="{"; in makealsaseq()
2879 z[lc++]=" int i,j;"; in makealsaseq()
2880 z[lc++]=" "; in makealsaseq()
2881 z[lc++]=" for (i=0; i<CSYSI_SIZE1; i++)"; in makealsaseq()
2882 z[lc++]=" csysi_map1[i]=0xFF;"; in makealsaseq()
2883 z[lc++]=" for (i=0; i<CSYSI_MAX_DEVS; i++) {"; in makealsaseq()
2884 z[lc++]=" csysi_is_used_dev[i]=0;"; in makealsaseq()
2885 z[lc++]=" csysi_map2_counts[i]=0;"; in makealsaseq()
2886 z[lc++]=" for (j=0; j<CSYSI_SIZE2; j++)"; in makealsaseq()
2887 z[lc++]=" csysi_map2[i][j]=0xFF;"; in makealsaseq()
2888 z[lc++]=" }"; in makealsaseq()
2889 z[lc++]=" csysi_used_devs = 0;"; in makealsaseq()
2890 z[lc++]=" csysi_available_dev = 0;"; in makealsaseq()
2891 z[lc++]=" csysi_available_page = 0;"; in makealsaseq()
2892 z[lc++]="}"; in makealsaseq()
2893 z[lc++]=""; in makealsaseq()
2894 z[lc++]="/* Get extended channel device number for an alsa address. "; in makealsaseq()
2895 z[lc++]=" * Returns the extended channel number, or -1 if the address was not"; in makealsaseq()
2896 z[lc++]=" * mapped. */"; in makealsaseq()
2897 z[lc++]="int csysi_read_ext_channel_device(unsigned short addr)"; in makealsaseq()
2898 z[lc++]="{"; in makealsaseq()
2899 z[lc++]=" unsigned short idx1,idx2_1,idx2_2;"; in makealsaseq()
2900 z[lc++]=""; in makealsaseq()
2901 z[lc++]=" idx1 = ( addr & CSYSI_MASK1 ) >> CSYSI_MAP2_BITS;"; in makealsaseq()
2902 z[lc++]=" idx2_1 = csysi_map1[idx1];"; in makealsaseq()
2903 z[lc++]=" idx2_2 = ( addr & CSYSI_MASK2 );"; in makealsaseq()
2904 z[lc++]=" if ( idx2_1 > CSYSI_MAX_DEVS-1 || "; in makealsaseq()
2905 z[lc++]=" csysi_map2[idx2_1][idx2_2] > CSYSI_MAX_DEVS-1 )"; in makealsaseq()
2906 z[lc++]=" return -1;"; in makealsaseq()
2907 z[lc++]=" return csysi_map2[idx2_1][idx2_2];"; in makealsaseq()
2908 z[lc++]="}"; in makealsaseq()
2909 z[lc++]=""; in makealsaseq()
2910 z[lc++]="/* Add an ALSA address to the asociative tables. Returns <0 if there"; in makealsaseq()
2911 z[lc++]=" * was no space left for the new address. Otherwhise, the address is"; in makealsaseq()
2912 z[lc++]=" * mapped to the first available device number, which is returned."; in makealsaseq()
2913 z[lc++]=" * NOTE: In the worst case, the loops used to update the \"available"; in makealsaseq()
2914 z[lc++]=" * page\" and the \"available device\" pointers can have a length of"; in makealsaseq()
2915 z[lc++]=" * almost CSYSI_MAX_DEVS. This would happen in a system with most of"; in makealsaseq()
2916 z[lc++]=" * the available pages/devices used, where a page/device near the"; in makealsaseq()
2917 z[lc++]=" * begginig is freed, and then a new page/device is requested."; in makealsaseq()
2918 z[lc++]=" * Hopefuly this can be asumed to be infrecuent enough, so we can"; in makealsaseq()
2919 z[lc++]=" * avoid using a more complicated mechanism to track free"; in makealsaseq()
2920 z[lc++]=" * pages/devices */"; in makealsaseq()
2921 z[lc++]="int csysi_new_ext_channel_device(unsigned short addr)"; in makealsaseq()
2922 z[lc++]="{"; in makealsaseq()
2923 z[lc++]=" unsigned short idx1,idx2_1,idx2_2,dev;"; in makealsaseq()
2924 z[lc++]=""; in makealsaseq()
2925 z[lc++]=" if (csysi_used_devs > CSYSI_MAX_DEVS-1)"; in makealsaseq()
2926 z[lc++]=" return -1;"; in makealsaseq()
2927 z[lc++]=" "; in makealsaseq()
2928 z[lc++]=" idx1 = ( addr & CSYSI_MASK1 ) >> CSYSI_MAP2_BITS;"; in makealsaseq()
2929 z[lc++]=" idx2_1 = csysi_map1[idx1];"; in makealsaseq()
2930 z[lc++]=" idx2_2 = ( addr & CSYSI_MASK2 );"; in makealsaseq()
2931 z[lc++]=" if ( idx2_1 < CSYSI_MAX_DEVS &&"; in makealsaseq()
2932 z[lc++]=" csysi_map2[idx2_1][idx2_2] < CSYSI_MAX_DEVS )"; in makealsaseq()
2933 z[lc++]=" return csysi_map2[idx2_1][idx2_2];"; in makealsaseq()
2934 z[lc++]=" "; in makealsaseq()
2935 z[lc++]=" if (idx2_1 > CSYSI_MAX_DEVS-1) {"; in makealsaseq()
2936 z[lc++]=" idx2_1 = csysi_map1[idx1] = csysi_available_page;"; in makealsaseq()
2937 z[lc++]=" while (csysi_map2_counts[++csysi_available_page])"; in makealsaseq()
2938 z[lc++]=" if (csysi_available_page==CSYSI_MAX_DEVS)"; in makealsaseq()
2939 z[lc++]=" break;"; in makealsaseq()
2940 z[lc++]=" }"; in makealsaseq()
2941 z[lc++]=" "; in makealsaseq()
2942 z[lc++]=" dev = csysi_map2[idx2_1][idx2_2] = csysi_available_dev;"; in makealsaseq()
2943 z[lc++]=" csysi_used_devs++;"; in makealsaseq()
2944 z[lc++]=" csysi_map2_counts[idx2_1]++;"; in makealsaseq()
2945 z[lc++]=" csysi_is_used_dev[csysi_available_dev] = 1;"; in makealsaseq()
2946 z[lc++]=" while (csysi_is_used_dev[++csysi_available_dev])"; in makealsaseq()
2947 z[lc++]=" if (csysi_available_dev==CSYSI_MAX_DEVS)"; in makealsaseq()
2948 z[lc++]=" break;"; in makealsaseq()
2949 z[lc++]=" "; in makealsaseq()
2950 z[lc++]=" return dev;"; in makealsaseq()
2951 z[lc++]="}"; in makealsaseq()
2952 z[lc++]=""; in makealsaseq()
2953 z[lc++]="/* Removes an ALSA address to the asociative tables. */"; in makealsaseq()
2954 z[lc++]="void csysi_remove_ext_channel_device(unsigned short addr)"; in makealsaseq()
2955 z[lc++]="{"; in makealsaseq()
2956 z[lc++]=" unsigned short idx1,idx2_1,idx2_2,dev;"; in makealsaseq()
2957 z[lc++]=" "; in makealsaseq()
2958 z[lc++]=" idx1 = ( addr & CSYSI_MASK1 ) >> CSYSI_MAP2_BITS;"; in makealsaseq()
2959 z[lc++]=" idx2_1 = csysi_map1[idx1];"; in makealsaseq()
2960 z[lc++]=" idx2_2 = ( addr & CSYSI_MASK2 );"; in makealsaseq()
2961 z[lc++]=" if ( idx2_1 > CSYSI_MAX_DEVS-1 || "; in makealsaseq()
2962 z[lc++]=" csysi_map2[idx2_1][idx2_2] > CSYSI_MAX_DEVS-1 ||"; in makealsaseq()
2963 z[lc++]=" !csysi_map2_counts[idx2_1] ||"; in makealsaseq()
2964 z[lc++]=" !csysi_used_devs )"; in makealsaseq()
2965 z[lc++]=" return;"; in makealsaseq()
2966 z[lc++]=" "; in makealsaseq()
2967 z[lc++]=" dev = csysi_map2[idx2_1][idx2_2];"; in makealsaseq()
2968 z[lc++]=" csysi_map2[idx2_1][idx2_2] = 0xFF;"; in makealsaseq()
2969 z[lc++]=" csysi_is_used_dev[dev]=0;"; in makealsaseq()
2970 z[lc++]=" csysi_used_devs--;"; in makealsaseq()
2971 z[lc++]=" if (dev < csysi_available_dev)"; in makealsaseq()
2972 z[lc++]=" csysi_available_dev = dev;"; in makealsaseq()
2973 z[lc++]=" "; in makealsaseq()
2974 z[lc++]=" if (--csysi_map2_counts[idx2_1]==0) {"; in makealsaseq()
2975 z[lc++]=" csysi_map1[idx1] = 0xFF;"; in makealsaseq()
2976 z[lc++]=" if (idx2_1 < csysi_available_page)"; in makealsaseq()
2977 z[lc++]=" csysi_available_page = idx2_1;"; in makealsaseq()
2978 z[lc++]=" }"; in makealsaseq()
2979 z[lc++]="}"; in makealsaseq()
2988 z[lc++]=""; in makefstr()
2989 z[lc++]="/*"; in makefstr()
2990 z[lc++]="# Sfront, a SAOL to C translator "; in makefstr()
2991 z[lc++]="# This file: Plays streaming data from .mp4 file."; in makefstr()
2992 z[lc++]="#"; in makefstr()
2993 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makefstr()
2994 z[lc++]="# All rights reserved."; in makefstr()
2995 z[lc++]="#"; in makefstr()
2996 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makefstr()
2997 z[lc++]="# modification, are permitted provided that the following conditions are"; in makefstr()
2998 z[lc++]="# met:"; in makefstr()
2999 z[lc++]="#"; in makefstr()
3000 z[lc++]="# Redistributions of source code must retain the above copyright"; in makefstr()
3001 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makefstr()
3002 z[lc++]="#"; in makefstr()
3003 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makefstr()
3004 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makefstr()
3005 z[lc++]="# documentation and/or other materials provided with the distribution."; in makefstr()
3006 z[lc++]="#"; in makefstr()
3007 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makefstr()
3008 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makefstr()
3009 z[lc++]="# derived from this software without specific prior written permission."; in makefstr()
3010 z[lc++]="#"; in makefstr()
3011 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makefstr()
3012 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makefstr()
3013 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makefstr()
3014 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makefstr()
3015 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makefstr()
3016 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makefstr()
3017 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makefstr()
3018 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makefstr()
3019 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makefstr()
3020 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makefstr()
3021 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makefstr()
3022 z[lc++]="#"; in makefstr()
3023 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makefstr()
3024 z[lc++]="*/"; in makefstr()
3025 z[lc++]=""; in makefstr()
3026 z[lc++]=""; in makefstr()
3027 z[lc++]="/****************************************************************/"; in makefstr()
3028 z[lc++]="/****************************************************************/"; in makefstr()
3029 z[lc++]="/* streaming file control driver for sfront */ "; in makefstr()
3030 z[lc++]="/****************************************************************/"; in makefstr()
3031 z[lc++]=""; in makefstr()
3032 z[lc++]="#define SAMP_SR 5"; in makefstr()
3033 z[lc++]="#define SAMP_LOOPSTART 4"; in makefstr()
3034 z[lc++]="#define SAMP_LOOPEND 3"; in makefstr()
3035 z[lc++]="#define SAMP_BASEFREQ 2"; in makefstr()
3036 z[lc++]="#define SAMP_LLMEM 1"; in makefstr()
3037 z[lc++]="#define SAMP_DATABLOCK 5"; in makefstr()
3038 z[lc++]=""; in makefstr()
3039 z[lc++]="FILE * csysi_bitfile; /* streaming file */"; in makefstr()
3040 z[lc++]=""; in makefstr()
3041 z[lc++]="/* bit-level state variables */"; in makefstr()
3042 z[lc++]=""; in makefstr()
3043 z[lc++]="unsigned char csysi_bitstoread = 0;"; in makefstr()
3044 z[lc++]="int csysi_bitreadpos = - 1;"; in makefstr()
3045 z[lc++]=""; in makefstr()
3046 z[lc++]="/* bit-level parsing constants */"; in makefstr()
3047 z[lc++]=""; in makefstr()
3048 z[lc++]="#define CSYSI_IDENT 0xF0"; in makefstr()
3049 z[lc++]="#define CSYSI_NUMBER 0xF1"; in makefstr()
3050 z[lc++]="#define CSYSI_INTGR 0xF2"; in makefstr()
3051 z[lc++]="#define CSYSI_STRCONST 0xF3"; in makefstr()
3052 z[lc++]="#define CSYSI_BYTE 0xF4"; in makefstr()
3053 z[lc++]=""; in makefstr()
3054 z[lc++]="#define CSYSI_BINORC 0"; in makefstr()
3055 z[lc++]="#define CSYSI_BINSCORE 1"; in makefstr()
3056 z[lc++]="#define CSYSI_BINMIDI 2"; in makefstr()
3057 z[lc++]="#define CSYSI_BINSAMP 3"; in makefstr()
3058 z[lc++]="#define CSYSI_BINSBF 4"; in makefstr()
3059 z[lc++]="#define CSYSI_BINSYM 5"; in makefstr()
3060 z[lc++]=""; in makefstr()
3061 z[lc++]="#define CSYSI_EVSCORE 0"; in makefstr()
3062 z[lc++]="#define CSYSI_EVMIDI 1"; in makefstr()
3063 z[lc++]="#define CSYSI_EVSAMPLE 2"; in makefstr()
3064 z[lc++]=""; in makefstr()
3065 z[lc++]="#define CSYSI_MIDIMASKCOM 0xF0"; in makefstr()
3066 z[lc++]="#define CSYSI_MIDISYSTEM 0xF0"; in makefstr()
3067 z[lc++]="#define CSYSI_MIDIMASKCHAN 0x0F"; in makefstr()
3068 z[lc++]="#define CSYSI_METATEMPO 0x51"; in makefstr()
3069 z[lc++]=""; in makefstr()
3070 z[lc++]="#define CSYSI_MAXENDTIME 21600.0F"; in makefstr()
3071 z[lc++]=""; in makefstr()
3072 z[lc++]="/* word-level state variables */"; in makefstr()
3073 z[lc++]=""; in makefstr()
3074 z[lc++]="float csysi_bitaccesstime = 0.0F; /* current SA_access_unit time */"; in makefstr()
3075 z[lc++]=""; in makefstr()
3076 z[lc++]="int csysi_moreaccessunits = 1; /* more access_units left to read */"; in makefstr()
3077 z[lc++]="int csysi_endofevent = 1; /* no more events in access_unit */"; in makefstr()
3078 z[lc++]=""; in makefstr()
3079 z[lc++]="int csysi_numabstime = 0; /* number of abs-time sasl events */"; in makefstr()
3080 z[lc++]="int csysi_numscotime = 0; /* number of rel-time sasl events */"; in makefstr()
3081 z[lc++]="int csysi_nummidi = 0; /* number of midi events */"; in makefstr()
3082 z[lc++]=""; in makefstr()
3083 z[lc++]="int csysi_absready = 0; /* abs-time sasl events triggered */"; in makefstr()
3084 z[lc++]="int csysi_scoready = 0; /* rel-time sasl events triggered */"; in makefstr()
3085 z[lc++]="int csysi_midiready = 0; /* midi events triggered */"; in makefstr()
3086 z[lc++]=""; in makefstr()
3087 z[lc++]="int csysi_targetvar = -1; /* pointer into csys_target[] */"; in makefstr()
3088 z[lc++]="int csysi_targetcount = 0; /* pointer info {instr,var}index */"; in makefstr()
3089 z[lc++]=""; in makefstr()
3090 z[lc++]="unsigned char csysi_runstat = 0; /* holds running status byte */"; in makefstr()
3091 z[lc++]="int csysi_endflag = 0; /* flag for issuing last end command */"; in makefstr()
3092 z[lc++]="float csysi_compendtime = 0; /* supplied computed endtime */"; in makefstr()
3093 z[lc++]=""; in makefstr()
3094 z[lc++]=" "; in makefstr()
3095 z[lc++]="/* data structures for pending events */"; in makefstr()
3096 z[lc++]=""; in makefstr()
3097 z[lc++]="#define CSYSI_MAXSASL 64"; in makefstr()
3098 z[lc++]=""; in makefstr()
3099 z[lc++]="/* add at the head, consume from the tail */"; in makefstr()
3100 z[lc++]=""; in makefstr()
3101 z[lc++]="int csysi_headsco = 0; /* next available place for data */"; in makefstr()
3102 z[lc++]="int csysi_tailsco = -1; /* first occupied place for data */"; in makefstr()
3103 z[lc++]=" "; in makefstr()
3104 z[lc++]="int csysi_headabs = 0; /* next available place for data */"; in makefstr()
3105 z[lc++]="int csysi_tailabs = -1; /* first occupied place for data */"; in makefstr()
3106 z[lc++]=" "; in makefstr()
3107 z[lc++]="typedef struct csysi_sevent {"; in makefstr()
3108 z[lc++]=" float atime;"; in makefstr()
3109 z[lc++]=" float stime;"; in makefstr()
3110 z[lc++]=" unsigned char cmd;"; in makefstr()
3111 z[lc++]=" unsigned char priority;"; in makefstr()
3112 z[lc++]=" unsigned short id;"; in makefstr()
3113 z[lc++]=" unsigned short label;"; in makefstr()
3114 z[lc++]=" float fval;"; in makefstr()
3115 z[lc++]=" unsigned int pnum;"; in makefstr()
3116 z[lc++]=" float * p;"; in makefstr()
3117 z[lc++]="} csysi_sevent;"; in makefstr()
3118 z[lc++]=""; in makefstr()
3119 z[lc++]="csysi_sevent csysi_scoqueue[CSYSI_MAXSASL];"; in makefstr()
3120 z[lc++]="csysi_sevent csysi_absqueue[CSYSI_MAXSASL];"; in makefstr()
3121 z[lc++]=""; in makefstr()
3122 z[lc++]="#define CSYSI_MAXMIDI 64"; in makefstr()
3123 z[lc++]=""; in makefstr()
3124 z[lc++]="/* add at the head, consume from the tail */"; in makefstr()
3125 z[lc++]=""; in makefstr()
3126 z[lc++]="int csysi_headmidi = 0; /* next available place for data */"; in makefstr()
3127 z[lc++]="int csysi_tailmidi = -1; /* first occupied place for data */"; in makefstr()
3128 z[lc++]=" "; in makefstr()
3129 z[lc++]="typedef struct csysi_mevent {"; in makefstr()
3130 z[lc++]=" float atime;"; in makefstr()
3131 z[lc++]=" unsigned char cmd;"; in makefstr()
3132 z[lc++]=" unsigned char ndata;"; in makefstr()
3133 z[lc++]=" unsigned char vdata;"; in makefstr()
3134 z[lc++]=" unsigned short extchan;"; in makefstr()
3135 z[lc++]=" float fval;"; in makefstr()
3136 z[lc++]="} csysi_mevent;"; in makefstr()
3137 z[lc++]=""; in makefstr()
3138 z[lc++]="csysi_mevent csysi_midiqueue[CSYSI_MAXMIDI];"; in makefstr()
3139 z[lc++]=""; in makefstr()
3140 z[lc++]="/* data structure for samples */"; in makefstr()
3141 z[lc++]=""; in makefstr()
3142 z[lc++]="typedef struct csysi_sampleunit {"; in makefstr()
3143 z[lc++]=" float atime;"; in makefstr()
3144 z[lc++]=" int token;"; in makefstr()
3145 z[lc++]=" int len;"; in makefstr()
3146 z[lc++]=" float * p;"; in makefstr()
3147 z[lc++]=" struct csysi_sampleunit * next;"; in makefstr()
3148 z[lc++]="} csysi_sampleunit;"; in makefstr()
3149 z[lc++]=""; in makefstr()
3150 z[lc++]="csysi_sampleunit * csysi_samples = NULL;"; in makefstr()
3151 z[lc++]=""; in makefstr()
3152 z[lc++]=""; in makefstr()
3153 z[lc++]="/******************************************************************/"; in makefstr()
3154 z[lc++]="/* gets next byte from bitfile */"; in makefstr()
3155 z[lc++]="/******************************************************************/"; in makefstr()
3156 z[lc++]=""; in makefstr()
3157 z[lc++]="void csysi_readnextbyte(void)"; in makefstr()
3158 z[lc++]=""; in makefstr()
3159 z[lc++]="{"; in makefstr()
3160 z[lc++]=" int retry = 0;"; in makefstr()
3161 z[lc++]=""; in makefstr()
3162 z[lc++]=" while (fread(&csysi_bitstoread,sizeof(char),1,csysi_bitfile)!=1)"; in makefstr()
3163 z[lc++]=" {"; in makefstr()
3164 z[lc++]=" if (feof(csysi_bitfile))"; in makefstr()
3165 z[lc++]=" csys_terminate(\"premature end of .mp4 file\");"; in makefstr()
3166 z[lc++]=" if (++retry > IOERROR_RETRY)"; in makefstr()
3167 z[lc++]=" csys_terminate(\"i/o problems during .mp4 file read\");"; in makefstr()
3168 z[lc++]=" clearerr(csysi_bitfile);"; in makefstr()
3169 z[lc++]=" }"; in makefstr()
3170 z[lc++]=" csysi_bitreadpos = 7;"; in makefstr()
3171 z[lc++]=""; in makefstr()
3172 z[lc++]="}"; in makefstr()
3173 z[lc++]=""; in makefstr()
3174 z[lc++]="/******************************************************************/"; in makefstr()
3175 z[lc++]="/* reads numbits LSBs of bitval from bitfile */"; in makefstr()
3176 z[lc++]="/******************************************************************/"; in makefstr()
3177 z[lc++]=""; in makefstr()
3178 z[lc++]=""; in makefstr()
3179 z[lc++]="unsigned int csysi_readbit(unsigned int numbits)"; in makefstr()
3180 z[lc++]=""; in makefstr()
3181 z[lc++]="{"; in makefstr()
3182 z[lc++]=" unsigned int ret = 0;"; in makefstr()
3183 z[lc++]=""; in makefstr()
3184 z[lc++]=" while (numbits > 0)"; in makefstr()
3185 z[lc++]=" {"; in makefstr()
3186 z[lc++]=" if (csysi_bitreadpos < 0)"; in makefstr()
3187 z[lc++]=" csysi_readnextbyte();"; in makefstr()
3188 z[lc++]=" ret |= "; in makefstr()
3189 z[lc++]=" ((csysi_bitstoread & (1 << csysi_bitreadpos)) != 0) << (numbits-1);"; in makefstr()
3190 z[lc++]=" numbits--;"; in makefstr()
3191 z[lc++]=" csysi_bitreadpos--;"; in makefstr()
3192 z[lc++]=" }"; in makefstr()
3193 z[lc++]=" return ret;"; in makefstr()
3194 z[lc++]=""; in makefstr()
3195 z[lc++]="}"; in makefstr()
3196 z[lc++]=""; in makefstr()
3197 z[lc++]="/******************************************************************/"; in makefstr()
3198 z[lc++]="/* checks for next accessunit, sets bitaccesstime */"; in makefstr()
3199 z[lc++]="/******************************************************************/"; in makefstr()
3200 z[lc++]=""; in makefstr()
3201 z[lc++]="int csysi_readaccesstime()"; in makefstr()
3202 z[lc++]=""; in makefstr()
3203 z[lc++]="{"; in makefstr()
3204 z[lc++]=" int numbits = 32;"; in makefstr()
3205 z[lc++]=" union { unsigned int l; float f ; } u;"; in makefstr()
3206 z[lc++]=" int retry = 0;"; in makefstr()
3207 z[lc++]=""; in makefstr()
3208 z[lc++]=" u.l = 0;"; in makefstr()
3209 z[lc++]=" while (numbits > 0)"; in makefstr()
3210 z[lc++]=" {"; in makefstr()
3211 z[lc++]=" while (csysi_bitreadpos >= 0)"; in makefstr()
3212 z[lc++]=" {"; in makefstr()
3213 z[lc++]=" u.l |= "; in makefstr()
3214 z[lc++]=" ((csysi_bitstoread & (1 << csysi_bitreadpos)) != 0) << (numbits-1);"; in makefstr()
3215 z[lc++]=" csysi_bitreadpos--;"; in makefstr()
3216 z[lc++]=" if (!(--numbits))"; in makefstr()
3217 z[lc++]=" {"; in makefstr()
3218 z[lc++]=" csysi_bitaccesstime = u.f;"; in makefstr()
3219 z[lc++]=" return 1;"; in makefstr()
3220 z[lc++]=" }"; in makefstr()
3221 z[lc++]=" }"; in makefstr()
3222 z[lc++]=" while (fread(&csysi_bitstoread,sizeof(char),1,csysi_bitfile)!=1)"; in makefstr()
3223 z[lc++]=" {"; in makefstr()
3224 z[lc++]=" if (feof(csysi_bitfile))"; in makefstr()
3225 z[lc++]=" return 0;"; in makefstr()
3226 z[lc++]=" if (++retry > IOERROR_RETRY)"; in makefstr()
3227 z[lc++]=" csys_terminate(\"i/o problems during .mp4 file read\");"; in makefstr()
3228 z[lc++]=" clearerr(csysi_bitfile);"; in makefstr()
3229 z[lc++]=" }"; in makefstr()
3230 z[lc++]=" csysi_bitreadpos = 7;"; in makefstr()
3231 z[lc++]=" }"; in makefstr()
3232 z[lc++]=" return 0; /* should never happen */"; in makefstr()
3233 z[lc++]="}"; in makefstr()
3234 z[lc++]=""; in makefstr()
3235 z[lc++]=""; in makefstr()
3236 z[lc++]="/******************************************************************/"; in makefstr()
3237 z[lc++]="/* flushes numbits of bitval from bitfile */"; in makefstr()
3238 z[lc++]="/******************************************************************/"; in makefstr()
3239 z[lc++]=""; in makefstr()
3240 z[lc++]=""; in makefstr()
3241 z[lc++]="void csysi_readflush(unsigned int numbits)"; in makefstr()
3242 z[lc++]=""; in makefstr()
3243 z[lc++]="{"; in makefstr()
3244 z[lc++]=""; in makefstr()
3245 z[lc++]=" while (numbits > 0)"; in makefstr()
3246 z[lc++]=" {"; in makefstr()
3247 z[lc++]=" if (csysi_bitreadpos < 0)"; in makefstr()
3248 z[lc++]=" csysi_readnextbyte();"; in makefstr()
3249 z[lc++]=" numbits--;"; in makefstr()
3250 z[lc++]=" csysi_bitreadpos--;"; in makefstr()
3251 z[lc++]=" }"; in makefstr()
3252 z[lc++]=""; in makefstr()
3253 z[lc++]="}"; in makefstr()
3254 z[lc++]=""; in makefstr()
3255 z[lc++]="/******************************************************************/"; in makefstr()
3256 z[lc++]="/* move past midi_file block */"; in makefstr()
3257 z[lc++]="/******************************************************************/"; in makefstr()
3258 z[lc++]=""; in makefstr()
3259 z[lc++]="void csysi_midifileflush(void)"; in makefstr()
3260 z[lc++]=""; in makefstr()
3261 z[lc++]="{"; in makefstr()
3262 z[lc++]=""; in makefstr()
3263 z[lc++]=" csysi_readflush(8*csysi_readbit(32));"; in makefstr()
3264 z[lc++]=""; in makefstr()
3265 z[lc++]="}"; in makefstr()
3266 z[lc++]=""; in makefstr()
3267 z[lc++]="/******************************************************************/"; in makefstr()
3268 z[lc++]="/* move past symboltable block */"; in makefstr()
3269 z[lc++]="/******************************************************************/"; in makefstr()
3270 z[lc++]=""; in makefstr()
3271 z[lc++]="void csysi_symboltableflush(void)"; in makefstr()
3272 z[lc++]=""; in makefstr()
3273 z[lc++]="{"; in makefstr()
3274 z[lc++]=" unsigned int num;"; in makefstr()
3275 z[lc++]=""; in makefstr()
3276 z[lc++]=" num = csysi_readbit(16);"; in makefstr()
3277 z[lc++]=" while (num > 0)"; in makefstr()
3278 z[lc++]=" {"; in makefstr()
3279 z[lc++]=" csysi_readflush(8*csysi_readbit(4)); "; in makefstr()
3280 z[lc++]=" num--;"; in makefstr()
3281 z[lc++]=" }"; in makefstr()
3282 z[lc++]="}"; in makefstr()
3283 z[lc++]=""; in makefstr()
3284 z[lc++]="/******************************************************************/"; in makefstr()
3285 z[lc++]="/* move past orcfile block */"; in makefstr()
3286 z[lc++]="/******************************************************************/"; in makefstr()
3287 z[lc++]=""; in makefstr()
3288 z[lc++]="void csysi_orcfileflush(void)"; in makefstr()
3289 z[lc++]=""; in makefstr()
3290 z[lc++]="{"; in makefstr()
3291 z[lc++]=" unsigned int num, token;"; in makefstr()
3292 z[lc++]=""; in makefstr()
3293 z[lc++]=" num = csysi_readbit(16);"; in makefstr()
3294 z[lc++]=" while (num > 0)"; in makefstr()
3295 z[lc++]=" {"; in makefstr()
3296 z[lc++]=" token = csysi_readbit(8);"; in makefstr()
3297 z[lc++]=" switch(token) {"; in makefstr()
3298 z[lc++]=" case CSYSI_IDENT:"; in makefstr()
3299 z[lc++]=" csysi_readflush(16);"; in makefstr()
3300 z[lc++]=" break;"; in makefstr()
3301 z[lc++]=" case CSYSI_NUMBER:"; in makefstr()
3302 z[lc++]=" csysi_readflush(32);"; in makefstr()
3303 z[lc++]=" break;"; in makefstr()
3304 z[lc++]=" case CSYSI_INTGR:"; in makefstr()
3305 z[lc++]=" csysi_readflush(32);"; in makefstr()
3306 z[lc++]=" break;"; in makefstr()
3307 z[lc++]=" case CSYSI_STRCONST:"; in makefstr()
3308 z[lc++]=" csysi_readflush(8*csysi_readbit(8));"; in makefstr()
3309 z[lc++]=" break;"; in makefstr()
3310 z[lc++]=" case CSYSI_BYTE:"; in makefstr()
3311 z[lc++]=" csysi_readflush(8);"; in makefstr()
3312 z[lc++]=" break;"; in makefstr()
3313 z[lc++]=" default:"; in makefstr()
3314 z[lc++]=" break;"; in makefstr()
3315 z[lc++]=" }"; in makefstr()
3316 z[lc++]=" num--;"; in makefstr()
3317 z[lc++]=" }"; in makefstr()
3318 z[lc++]="}"; in makefstr()
3319 z[lc++]=""; in makefstr()
3320 z[lc++]="/******************************************************************/"; in makefstr()
3321 z[lc++]="/* move past one score_line */"; in makefstr()
3322 z[lc++]="/******************************************************************/"; in makefstr()
3323 z[lc++]=""; in makefstr()
3324 z[lc++]="void csysi_scorelineflush(void)"; in makefstr()
3325 z[lc++]=""; in makefstr()
3326 z[lc++]="{"; in makefstr()
3327 z[lc++]=" int hastime, haslabel, scoretype;"; in makefstr()
3328 z[lc++]=" int numpfields, destroy, refers, sym;"; in makefstr()
3329 z[lc++]=""; in makefstr()
3330 z[lc++]=" hastime = csysi_readbit(1);"; in makefstr()
3331 z[lc++]=" if (hastime)"; in makefstr()
3332 z[lc++]=" csysi_readflush(33);"; in makefstr()
3333 z[lc++]=" csysi_readflush(1);"; in makefstr()
3334 z[lc++]=" scoretype = csysi_readbit(3);"; in makefstr()
3335 z[lc++]=" switch (scoretype) {"; in makefstr()
3336 z[lc++]=" case CSYS_SASL_INSTR:"; in makefstr()
3337 z[lc++]=" haslabel = csysi_readbit(1);"; in makefstr()
3338 z[lc++]=" if (haslabel)"; in makefstr()
3339 z[lc++]=" csysi_readflush(16);"; in makefstr()
3340 z[lc++]=" csysi_readflush(48);"; in makefstr()
3341 z[lc++]=" numpfields = csysi_readbit(8);"; in makefstr()
3342 z[lc++]=" csysi_readflush(32*numpfields);"; in makefstr()
3343 z[lc++]=" break;"; in makefstr()
3344 z[lc++]=" case CSYS_SASL_CONTROL: "; in makefstr()
3345 z[lc++]=" haslabel = csysi_readbit(1);"; in makefstr()
3346 z[lc++]=" if (haslabel)"; in makefstr()
3347 z[lc++]=" csysi_readflush(16);"; in makefstr()
3348 z[lc++]=" csysi_readflush(48);"; in makefstr()
3349 z[lc++]=" break;"; in makefstr()
3350 z[lc++]=" case CSYS_SASL_TABLE:"; in makefstr()
3351 z[lc++]=" csysi_readflush(16);"; in makefstr()
3352 z[lc++]=" destroy = csysi_readbit(1);"; in makefstr()
3353 z[lc++]=" if (!destroy)"; in makefstr()
3354 z[lc++]=" {"; in makefstr()
3355 z[lc++]=" sym = csysi_readbit(8);"; in makefstr()
3356 z[lc++]=" refers = csysi_readbit(1);"; in makefstr()
3357 z[lc++]=" if (refers)"; in makefstr()
3358 z[lc++]=" csysi_readflush(16); "; in makefstr()
3359 z[lc++]=" numpfields = csysi_readbit(16);"; in makefstr()
3360 z[lc++]=" if (sym == CSYS_SASL_TGEN_CONCAT)"; in makefstr()
3361 z[lc++]=" {"; in makefstr()
3362 z[lc++]=" csysi_readflush(32);"; in makefstr()
3363 z[lc++]=" if ((numpfields - 1) > 0)"; in makefstr()
3364 z[lc++]=" csysi_readflush(16*(numpfields-1));"; in makefstr()
3365 z[lc++]=" }"; in makefstr()
3366 z[lc++]=" else"; in makefstr()
3367 z[lc++]=" csysi_readflush(32*numpfields);"; in makefstr()
3368 z[lc++]=" }"; in makefstr()
3369 z[lc++]=" break;"; in makefstr()
3370 z[lc++]=" case CSYS_SASL_ENDTIME: "; in makefstr()
3371 z[lc++]=" break;"; in makefstr()
3372 z[lc++]=" case CSYS_SASL_TEMPO: "; in makefstr()
3373 z[lc++]=" csysi_readflush(32);"; in makefstr()
3374 z[lc++]=" break;"; in makefstr()
3375 z[lc++]=" default:"; in makefstr()
3376 z[lc++]=" csys_terminate(\"Unknown score line type in .mp4 file\");"; in makefstr()
3377 z[lc++]=" }"; in makefstr()
3378 z[lc++]=""; in makefstr()
3379 z[lc++]="}"; in makefstr()
3380 z[lc++]=""; in makefstr()
3381 z[lc++]="/******************************************************************/"; in makefstr()
3382 z[lc++]="/* move past score_file block */"; in makefstr()
3383 z[lc++]="/******************************************************************/"; in makefstr()
3384 z[lc++]=""; in makefstr()
3385 z[lc++]="void csysi_scorefileflush(void)"; in makefstr()
3386 z[lc++]=""; in makefstr()
3387 z[lc++]="{"; in makefstr()
3388 z[lc++]=" unsigned int numlines;"; in makefstr()
3389 z[lc++]=""; in makefstr()
3390 z[lc++]=" numlines = csysi_readbit(20);"; in makefstr()
3391 z[lc++]=" while (numlines > 0)"; in makefstr()
3392 z[lc++]=" {"; in makefstr()
3393 z[lc++]=" csysi_scorelineflush();"; in makefstr()
3394 z[lc++]=" numlines--;"; in makefstr()
3395 z[lc++]=" }"; in makefstr()
3396 z[lc++]="}"; in makefstr()
3397 z[lc++]=""; in makefstr()
3398 z[lc++]=""; in makefstr()
3399 z[lc++]="/******************************************************************/"; in makefstr()
3400 z[lc++]="/* move past sample block */"; in makefstr()
3401 z[lc++]="/******************************************************************/"; in makefstr()
3402 z[lc++]=""; in makefstr()
3403 z[lc++]="void csysi_sampleflush(void)"; in makefstr()
3404 z[lc++]=""; in makefstr()
3405 z[lc++]="{"; in makefstr()
3406 z[lc++]=""; in makefstr()
3407 z[lc++]=" unsigned int len;"; in makefstr()
3408 z[lc++]=""; in makefstr()
3409 z[lc++]=" csysi_readflush(16); /* symbol */"; in makefstr()
3410 z[lc++]=" len = csysi_readbit(24); "; in makefstr()
3411 z[lc++]=" if (csysi_readbit(1)) /* srate */"; in makefstr()
3412 z[lc++]=" csysi_readflush(17);"; in makefstr()
3413 z[lc++]=" if (csysi_readbit(1)) /* loop */"; in makefstr()
3414 z[lc++]=" csysi_readflush(48);"; in makefstr()
3415 z[lc++]=" if (csysi_readbit(1)) /* base */"; in makefstr()
3416 z[lc++]=" csysi_readflush(32);"; in makefstr()
3417 z[lc++]=" csysi_readflush((16+csysi_readbit(1)*16)*len);"; in makefstr()
3418 z[lc++]=""; in makefstr()
3419 z[lc++]="}"; in makefstr()
3420 z[lc++]=""; in makefstr()
3421 z[lc++]="/******************************************************************/"; in makefstr()
3422 z[lc++]="/* flushes StructuredAudioSpecificConfig */"; in makefstr()
3423 z[lc++]="/******************************************************************/"; in makefstr()
3424 z[lc++]=""; in makefstr()
3425 z[lc++]=""; in makefstr()
3426 z[lc++]="void csysi_flushconfig(void) "; in makefstr()
3427 z[lc++]=""; in makefstr()
3428 z[lc++]="{"; in makefstr()
3429 z[lc++]=" int type;"; in makefstr()
3430 z[lc++]=""; in makefstr()
3431 z[lc++]=" while (csysi_readbit(1))"; in makefstr()
3432 z[lc++]=" {"; in makefstr()
3433 z[lc++]=" type = csysi_readbit(3);"; in makefstr()
3434 z[lc++]=" switch (type) {"; in makefstr()
3435 z[lc++]=" case CSYSI_BINORC:"; in makefstr()
3436 z[lc++]=" csysi_orcfileflush();"; in makefstr()
3437 z[lc++]=" break;"; in makefstr()
3438 z[lc++]=" case CSYSI_BINSCORE:"; in makefstr()
3439 z[lc++]=" csysi_scorefileflush();"; in makefstr()
3440 z[lc++]=" break;"; in makefstr()
3441 z[lc++]=" case CSYSI_BINMIDI: "; in makefstr()
3442 z[lc++]=" csysi_midifileflush();"; in makefstr()
3443 z[lc++]=" break;"; in makefstr()
3444 z[lc++]=" case CSYSI_BINSAMP:"; in makefstr()
3445 z[lc++]=" csysi_sampleflush();"; in makefstr()
3446 z[lc++]=" break;"; in makefstr()
3447 z[lc++]=" case CSYSI_BINSBF:"; in makefstr()
3448 z[lc++]=" csys_terminate(\".mp4 uses SASBF\");"; in makefstr()
3449 z[lc++]=" break;"; in makefstr()
3450 z[lc++]=" case CSYSI_BINSYM: "; in makefstr()
3451 z[lc++]=" csysi_symboltableflush();"; in makefstr()
3452 z[lc++]=" break;"; in makefstr()
3453 z[lc++]=" }"; in makefstr()
3454 z[lc++]=" }"; in makefstr()
3455 z[lc++]="}"; in makefstr()
3456 z[lc++]=""; in makefstr()
3457 z[lc++]="/******************************************************************/"; in makefstr()
3458 z[lc++]="/* puts score data in saslqueue[idx] */"; in makefstr()
3459 z[lc++]="/******************************************************************/"; in makefstr()
3460 z[lc++]=""; in makefstr()
3461 z[lc++]="void csysi_scorelinefill(void)"; in makefstr()
3462 z[lc++]=""; in makefstr()
3463 z[lc++]="{"; in makefstr()
3464 z[lc++]=" union { unsigned int l; float f ; } u;"; in makefstr()
3465 z[lc++]=" int sym, i, j, sampletoken, size, skip;"; in makefstr()
3466 z[lc++]=" csysi_sampleunit * sidx;"; in makefstr()
3467 z[lc++]=" csysi_sevent * cq;"; in makefstr()
3468 z[lc++]=""; in makefstr()
3469 z[lc++]=" if (csysi_readbit(1)) /* has_time */"; in makefstr()
3470 z[lc++]=" {"; in makefstr()
3471 z[lc++]=" cq = &(csysi_scoqueue[csysi_headsco]);"; in makefstr()
3472 z[lc++]=" cq->atime = csysi_bitaccesstime;"; in makefstr()
3473 z[lc++]=" if (csysi_tailsco == -1)"; in makefstr()
3474 z[lc++]=" csysi_tailsco = csysi_headsco;"; in makefstr()
3475 z[lc++]=" csysi_headsco = (csysi_headsco+1)&(CSYSI_MAXSASL-1);"; in makefstr()
3476 z[lc++]=""; in makefstr()
3477 z[lc++]=" csysi_readflush(1); /* use_if_late */"; in makefstr()
3478 z[lc++]=" u.l = csysi_readbit(32);"; in makefstr()
3479 z[lc++]=" cq->stime = u.f;"; in makefstr()
3480 z[lc++]=" if (u.f < 0)"; in makefstr()
3481 z[lc++]=" cq->stime = -1.0F;"; in makefstr()
3482 z[lc++]=" csysi_numscotime++;"; in makefstr()
3483 z[lc++]=""; in makefstr()
3484 z[lc++]=" }"; in makefstr()
3485 z[lc++]=" else"; in makefstr()
3486 z[lc++]=" {"; in makefstr()
3487 z[lc++]=" cq = &(csysi_absqueue[csysi_headabs]);"; in makefstr()
3488 z[lc++]=" cq->atime = csysi_bitaccesstime;"; in makefstr()
3489 z[lc++]=" if (csysi_tailabs == -1)"; in makefstr()
3490 z[lc++]=" csysi_tailabs = csysi_headabs;"; in makefstr()
3491 z[lc++]=" csysi_headabs = (csysi_headabs+1)&(CSYSI_MAXSASL-1);"; in makefstr()
3492 z[lc++]=""; in makefstr()
3493 z[lc++]=" csysi_numabstime++;"; in makefstr()
3494 z[lc++]=" }"; in makefstr()
3495 z[lc++]=" cq->priority = csysi_readbit(1); "; in makefstr()
3496 z[lc++]=" switch (cq->cmd = csysi_readbit(3)) {"; in makefstr()
3497 z[lc++]=" case CSYS_SASL_INSTR:"; in makefstr()
3498 z[lc++]=" if (csysi_readbit(1)) /* has label */"; in makefstr()
3499 z[lc++]=" cq->label = csysi_readbit(16);"; in makefstr()
3500 z[lc++]=" else"; in makefstr()
3501 z[lc++]=" cq->label = CSYS_NOLABEL;"; in makefstr()
3502 z[lc++]=" cq->cmd = CSYS_SASL_NOOP;"; in makefstr()
3503 z[lc++]=" sym = csysi_readbit(16); /* token for instr */"; in makefstr()
3504 z[lc++]=" for (i=0; i < CSYS_INSTRNUM; i++)"; in makefstr()
3505 z[lc++]=" if (csys_instr[i].token == sym)"; in makefstr()
3506 z[lc++]=" {"; in makefstr()
3507 z[lc++]=" cq->cmd = CSYS_SASL_INSTR;"; in makefstr()
3508 z[lc++]=" cq->id = csys_instr[i].index;"; in makefstr()
3509 z[lc++]=" }"; in makefstr()
3510 z[lc++]=" u.l = csysi_readbit(32); "; in makefstr()
3511 z[lc++]=" cq->fval = u.f; /* duration */"; in makefstr()
3512 z[lc++]=" "; in makefstr()
3513 z[lc++]=" /* pfields */"; in makefstr()
3514 z[lc++]=" cq->p = malloc((cq->pnum = csysi_readbit(8))*sizeof(float));"; in makefstr()
3515 z[lc++]=" for (i = 0; i < cq->pnum; i++)"; in makefstr()
3516 z[lc++]=" {"; in makefstr()
3517 z[lc++]=" u.l = csysi_readbit(32); "; in makefstr()
3518 z[lc++]=" cq->p[i] = u.f;"; in makefstr()
3519 z[lc++]=" }"; in makefstr()
3520 z[lc++]=" break;"; in makefstr()
3521 z[lc++]=" case CSYS_SASL_CONTROL:"; in makefstr()
3522 z[lc++]=" if (csysi_readbit(1)) /* has label */"; in makefstr()
3523 z[lc++]=" {"; in makefstr()
3524 z[lc++]=" /* expands into to a set of calls later on */"; in makefstr()
3525 z[lc++]=""; in makefstr()
3526 z[lc++]=" cq->label = csysi_readbit(16);"; in makefstr()
3527 z[lc++]=" cq->pnum = csysi_readbit(16);"; in makefstr()
3528 z[lc++]=" }"; in makefstr()
3529 z[lc++]=" else"; in makefstr()
3530 z[lc++]=" {"; in makefstr()
3531 z[lc++]=" sym = csysi_readbit(16);"; in makefstr()
3532 z[lc++]=" cq->cmd = CSYS_SASL_NOOP;"; in makefstr()
3533 z[lc++]=" cq->label = CSYS_NOLABEL;"; in makefstr()
3534 z[lc++]=" cq->id = CSYS_SASL_NOINSTR;"; in makefstr()
3535 z[lc++]=" for (i=0; i < CSYS_GLOBALNUM; i++)"; in makefstr()
3536 z[lc++]=" if (csys_global[i].token == sym)"; in makefstr()
3537 z[lc++]=" {"; in makefstr()
3538 z[lc++]=" cq->cmd = CSYS_SASL_CONTROL;"; in makefstr()
3539 z[lc++]=" cq->pnum = csys_global[i].index;"; in makefstr()
3540 z[lc++]=" break;"; in makefstr()
3541 z[lc++]=" }"; in makefstr()
3542 z[lc++]=" }"; in makefstr()
3543 z[lc++]=" u.l = csysi_readbit(32);"; in makefstr()
3544 z[lc++]=" cq->fval = u.f;"; in makefstr()
3545 z[lc++]=" break;"; in makefstr()
3546 z[lc++]=" case CSYS_SASL_TABLE:"; in makefstr()
3547 z[lc++]=" sidx = NULL;"; in makefstr()
3548 z[lc++]=" sym = csysi_readbit(16);"; in makefstr()
3549 z[lc++]=" if (csysi_readbit(1)) /* destroy */"; in makefstr()
3550 z[lc++]=" {"; in makefstr()
3551 z[lc++]=" cq->label = CSYS_SASL_TGEN_DESTROY;"; in makefstr()
3552 z[lc++]=" cq->pnum = 0;"; in makefstr()
3553 z[lc++]=" cq->p = NULL;"; in makefstr()
3554 z[lc++]=" }"; in makefstr()
3555 z[lc++]=" else"; in makefstr()
3556 z[lc++]=" {"; in makefstr()
3557 z[lc++]=" cq->label = csysi_readbit(8); /* generator */"; in makefstr()
3558 z[lc++]=" if (csysi_readbit(1)) /* refers to sample */"; in makefstr()
3559 z[lc++]=" {"; in makefstr()
3560 z[lc++]=" sampletoken = csysi_readbit(16);"; in makefstr()
3561 z[lc++]=" sidx = csysi_samples;"; in makefstr()
3562 z[lc++]=" while (sidx)"; in makefstr()
3563 z[lc++]=" {"; in makefstr()
3564 z[lc++]=" if (sidx->token == sampletoken)"; in makefstr()
3565 z[lc++]=" {"; in makefstr()
3566 z[lc++]=" while (sidx->next && "; in makefstr()
3567 z[lc++]=" (sidx->next->token == sampletoken) &&"; in makefstr()
3568 z[lc++]=" (sidx->next->atime <= csysi_bitaccesstime))"; in makefstr()
3569 z[lc++]=" sidx = sidx->next;"; in makefstr()
3570 z[lc++]=" break;"; in makefstr()
3571 z[lc++]=" }"; in makefstr()
3572 z[lc++]=" sidx = sidx->next;"; in makefstr()
3573 z[lc++]=" }"; in makefstr()
3574 z[lc++]=" }"; in makefstr()
3575 z[lc++]=" cq->p = malloc((cq->pnum = csysi_readbit(16))*sizeof(float));"; in makefstr()
3576 z[lc++]=" for (i = 0; i < cq->pnum; i++)"; in makefstr()
3577 z[lc++]=" {"; in makefstr()
3578 z[lc++]=" if (i && (cq->label == CSYS_SASL_TGEN_CONCAT))"; in makefstr()
3579 z[lc++]=" {"; in makefstr()
3580 z[lc++]=" u.l = csysi_readbit(16); "; in makefstr()
3581 z[lc++]=" cq->p[i] = -1.0F;"; in makefstr()
3582 z[lc++]=" for (j=0; j < CSYS_GLOBALNUM; j++)"; in makefstr()
3583 z[lc++]=" if ((csys_global[j].token == u.l) &&"; in makefstr()
3584 z[lc++]=" (csys_global[j].type == CSYS_TABLE))"; in makefstr()
3585 z[lc++]=" {"; in makefstr()
3586 z[lc++]=" cq->p[i] = csys_global[j].index;"; in makefstr()
3587 z[lc++]=" break;"; in makefstr()
3588 z[lc++]=" }"; in makefstr()
3589 z[lc++]=" if (cq->p[i] == -1.0F)"; in makefstr()
3590 z[lc++]=" csys_terminate(\"concat uses an unknown table\");"; in makefstr()
3591 z[lc++]=" }"; in makefstr()
3592 z[lc++]=" else"; in makefstr()
3593 z[lc++]=" {"; in makefstr()
3594 z[lc++]=" u.l = csysi_readbit(32); "; in makefstr()
3595 z[lc++]=" cq->p[i] = u.f;"; in makefstr()
3596 z[lc++]=" }"; in makefstr()
3597 z[lc++]=" } "; in makefstr()
3598 z[lc++]=" cq->cmd = CSYS_SASL_NOOP;"; in makefstr()
3599 z[lc++]=" for (i=0; i < CSYS_GLOBALNUM; i++)"; in makefstr()
3600 z[lc++]=" if ((csys_global[i].token == sym) &&"; in makefstr()
3601 z[lc++]=" (csys_global[i].type == CSYS_TABLE))"; in makefstr()
3602 z[lc++]=" {"; in makefstr()
3603 z[lc++]=" cq->cmd = CSYS_SASL_TABLE;"; in makefstr()
3604 z[lc++]=" cq->id = csys_global[i].index;"; in makefstr()
3605 z[lc++]=" break;"; in makefstr()
3606 z[lc++]=" }"; in makefstr()
3607 z[lc++]=" if (cq->label == CSYS_SASL_TGEN_SAMPLE)"; in makefstr()
3608 z[lc++]=" {"; in makefstr()
3609 z[lc++]=" if (!sidx)"; in makefstr()
3610 z[lc++]=" csys_terminate(\"sample block not found\");"; in makefstr()
3611 z[lc++]=""; in makefstr()
3612 z[lc++]=" size = -1;"; in makefstr()
3613 z[lc++]=" skip = 0;"; in makefstr()
3614 z[lc++]=" if (cq->pnum)"; in makefstr()
3615 z[lc++]=" size = ROUND(cq->p[0]);"; in makefstr()
3616 z[lc++]=" if (cq->pnum > 2)"; in makefstr()
3617 z[lc++]=" skip = ROUND(cq->p[2]);"; in makefstr()
3618 z[lc++]=" /* free (cq->p); */"; in makefstr()
3619 z[lc++]=" if ( ((size < 0) || (size + SAMP_DATABLOCK <= sidx->len))"; in makefstr()
3620 z[lc++]=" && (skip <= 0))"; in makefstr()
3621 z[lc++]=" {"; in makefstr()
3622 z[lc++]=" cq->p = sidx->p;"; in makefstr()
3623 z[lc++]=" if (size < 0)"; in makefstr()
3624 z[lc++]=" cq->pnum = sidx->len;"; in makefstr()
3625 z[lc++]=" else"; in makefstr()
3626 z[lc++]=" cq->pnum = size + SAMP_DATABLOCK;"; in makefstr()
3627 z[lc++]=" }"; in makefstr()
3628 z[lc++]=" else"; in makefstr()
3629 z[lc++]=" {"; in makefstr()
3630 z[lc++]=" if (size < 0)"; in makefstr()
3631 z[lc++]=" cq->pnum = size = sidx->len - skip;"; in makefstr()
3632 z[lc++]=" else"; in makefstr()
3633 z[lc++]=" cq->pnum = size = size + SAMP_DATABLOCK;"; in makefstr()
3634 z[lc++]=" cq->p = calloc(size, sizeof(float));"; in makefstr()
3635 z[lc++]=" cq->p[size - SAMP_LLMEM] = 1;"; in makefstr()
3636 z[lc++]=" cq->p[size - SAMP_SR] = sidx->p[sidx->len - SAMP_SR];"; in makefstr()
3637 z[lc++]=" cq->p[size - SAMP_LOOPSTART] = "; in makefstr()
3638 z[lc++]=" ROUND(sidx->p[sidx->len - SAMP_LOOPSTART]) - skip;"; in makefstr()
3639 z[lc++]=" cq->p[size - SAMP_LOOPEND] = "; in makefstr()
3640 z[lc++]=" ROUND(sidx->p[sidx->len - SAMP_LOOPEND]) - skip;"; in makefstr()
3641 z[lc++]=" cq->p[size - SAMP_BASEFREQ] = "; in makefstr()
3642 z[lc++]=" sidx->p[sidx->len - SAMP_BASEFREQ];"; in makefstr()
3643 z[lc++]=" j = skip;"; in makefstr()
3644 z[lc++]=" i = 0;"; in makefstr()
3645 z[lc++]=" while ((i < (size - SAMP_DATABLOCK)) && (j < (sidx->len - SAMP_DATABLOCK)))"; in makefstr()
3646 z[lc++]=" cq->p[i++] = sidx->p[j++];"; in makefstr()
3647 z[lc++]=" }"; in makefstr()
3648 z[lc++]=" }"; in makefstr()
3649 z[lc++]=" }"; in makefstr()
3650 z[lc++]=" break;"; in makefstr()
3651 z[lc++]=" case CSYS_SASL_ENDTIME:"; in makefstr()
3652 z[lc++]=" csysi_endflag = 1; /* obey SASL endtime command */"; in makefstr()
3653 z[lc++]=" break;"; in makefstr()
3654 z[lc++]=" case CSYS_SASL_TEMPO: "; in makefstr()
3655 z[lc++]=" u.l = csysi_readbit(32);"; in makefstr()
3656 z[lc++]=" cq->fval = u.f;"; in makefstr()
3657 z[lc++]=" break;"; in makefstr()
3658 z[lc++]=" default:"; in makefstr()
3659 z[lc++]=" csys_terminate(\"Unknown score line type in .mp4 file\");"; in makefstr()
3660 z[lc++]=" }"; in makefstr()
3661 z[lc++]=""; in makefstr()
3662 z[lc++]="}"; in makefstr()
3663 z[lc++]=""; in makefstr()
3664 z[lc++]="/******************************************************************/"; in makefstr()
3665 z[lc++]="/* reads the sample class */"; in makefstr()
3666 z[lc++]="/******************************************************************/"; in makefstr()
3667 z[lc++]=""; in makefstr()
3668 z[lc++]="void csysi_sampleread(void)"; in makefstr()
3669 z[lc++]=""; in makefstr()
3670 z[lc++]="{"; in makefstr()
3671 z[lc++]=" int sym, i, len;"; in makefstr()
3672 z[lc++]=" csysi_sampleunit * sidx, * newsamp;"; in makefstr()
3673 z[lc++]=" union { unsigned int l; float f ; } u;"; in makefstr()
3674 z[lc++]=" union { unsigned short us; signed short ss ; } s;"; in makefstr()
3675 z[lc++]=""; in makefstr()
3676 z[lc++]=" sidx = (csysi_sampleunit *) malloc(sizeof(csysi_sampleunit));"; in makefstr()
3677 z[lc++]=" sidx->token = sym = csysi_readbit(16);"; in makefstr()
3678 z[lc++]=" sidx->len = len = csysi_readbit(24) + SAMP_DATABLOCK;"; in makefstr()
3679 z[lc++]=" sidx->p = (float *) malloc(len*sizeof(float));"; in makefstr()
3680 z[lc++]=""; in makefstr()
3681 z[lc++]=" sidx->p[len - SAMP_LLMEM] = 0;"; in makefstr()
3682 z[lc++]=" if (csysi_readbit(1)) /* sampling rate */"; in makefstr()
3683 z[lc++]=" sidx->p[len - SAMP_SR] = csysi_readbit(17);"; in makefstr()
3684 z[lc++]=" else"; in makefstr()
3685 z[lc++]=" sidx->p[len - SAMP_SR] = EV(ARATE);"; in makefstr()
3686 z[lc++]=""; in makefstr()
3687 z[lc++]=" if (csysi_readbit(1)) /* loop points */"; in makefstr()
3688 z[lc++]=" {"; in makefstr()
3689 z[lc++]=" sidx->p[len - SAMP_LOOPSTART] = csysi_readbit(24);"; in makefstr()
3690 z[lc++]=" sidx->p[len - SAMP_LOOPEND] = csysi_readbit(24);"; in makefstr()
3691 z[lc++]=" }"; in makefstr()
3692 z[lc++]=" else"; in makefstr()
3693 z[lc++]=" {"; in makefstr()
3694 z[lc++]=" sidx->p[len - SAMP_LOOPSTART] = -1;"; in makefstr()
3695 z[lc++]=" sidx->p[len - SAMP_LOOPEND] = -1;"; in makefstr()
3696 z[lc++]=" }"; in makefstr()
3697 z[lc++]=""; in makefstr()
3698 z[lc++]=" if (csysi_readbit(1)) /* base frequency */"; in makefstr()
3699 z[lc++]=" {"; in makefstr()
3700 z[lc++]=" u.l = csysi_readbit(32);"; in makefstr()
3701 z[lc++]=" sidx->p[len - SAMP_BASEFREQ] = u.f;"; in makefstr()
3702 z[lc++]=" }"; in makefstr()
3703 z[lc++]=" else"; in makefstr()
3704 z[lc++]=" sidx->p[len - SAMP_BASEFREQ] = -1;"; in makefstr()
3705 z[lc++]=""; in makefstr()
3706 z[lc++]=" i = 0;"; in makefstr()
3707 z[lc++]=" if (csysi_readbit(1)) /* float sample */"; in makefstr()
3708 z[lc++]=" {"; in makefstr()
3709 z[lc++]=" while (i < (len - SAMP_DATABLOCK))"; in makefstr()
3710 z[lc++]=" {"; in makefstr()
3711 z[lc++]=" u.l = csysi_readbit(32);"; in makefstr()
3712 z[lc++]=" sidx->p[i++] = u.f;"; in makefstr()
3713 z[lc++]=" }"; in makefstr()
3714 z[lc++]=" }"; in makefstr()
3715 z[lc++]=" else"; in makefstr()
3716 z[lc++]=" { "; in makefstr()
3717 z[lc++]=" while (i < (len - SAMP_DATABLOCK))"; in makefstr()
3718 z[lc++]=" {"; in makefstr()
3719 z[lc++]=" s.us = csysi_readbit(16);"; in makefstr()
3720 z[lc++]=" sidx->p[i++] = s.ss*(1.0F/32767.0F);"; in makefstr()
3721 z[lc++]=" }"; in makefstr()
3722 z[lc++]=" }"; in makefstr()
3723 z[lc++]=""; in makefstr()
3724 z[lc++]=" newsamp = sidx;"; in makefstr()
3725 z[lc++]=""; in makefstr()
3726 z[lc++]=" if (!csysi_samples)"; in makefstr()
3727 z[lc++]=" {"; in makefstr()
3728 z[lc++]=" csysi_samples = newsamp;"; in makefstr()
3729 z[lc++]=" return;"; in makefstr()
3730 z[lc++]=" }"; in makefstr()
3731 z[lc++]=""; in makefstr()
3732 z[lc++]=" if ((sidx = csysi_samples)->token > sym)"; in makefstr()
3733 z[lc++]=" {"; in makefstr()
3734 z[lc++]=" newsamp->next = csysi_samples;"; in makefstr()
3735 z[lc++]=" csysi_samples = newsamp;"; in makefstr()
3736 z[lc++]=" return;"; in makefstr()
3737 z[lc++]=" }"; in makefstr()
3738 z[lc++]=""; in makefstr()
3739 z[lc++]=" while (sidx && (sidx->token <= sym))"; in makefstr()
3740 z[lc++]=" {"; in makefstr()
3741 z[lc++]=""; in makefstr()
3742 z[lc++]=" if ((sidx->next == NULL) || "; in makefstr()
3743 z[lc++]=" (sidx->next->token > sym))"; in makefstr()
3744 z[lc++]=" break;"; in makefstr()
3745 z[lc++]=""; in makefstr()
3746 z[lc++]=" if (sidx->token == sym)"; in makefstr()
3747 z[lc++]=" {"; in makefstr()
3748 z[lc++]=" while (sidx->next && (sidx->next->token == sym))"; in makefstr()
3749 z[lc++]=" sidx = sidx->next;"; in makefstr()
3750 z[lc++]=" break;"; in makefstr()
3751 z[lc++]=" }"; in makefstr()
3752 z[lc++]=" sidx = sidx->next;"; in makefstr()
3753 z[lc++]=" }"; in makefstr()
3754 z[lc++]=""; in makefstr()
3755 z[lc++]=" newsamp->next = sidx->next;"; in makefstr()
3756 z[lc++]=" sidx->next = newsamp;"; in makefstr()
3757 z[lc++]=" return;"; in makefstr()
3758 z[lc++]=""; in makefstr()
3759 z[lc++]="}"; in makefstr()
3760 z[lc++]=""; in makefstr()
3761 z[lc++]="/******************************************************************/"; in makefstr()
3762 z[lc++]="/* checks if buffer is empty */"; in makefstr()
3763 z[lc++]="/******************************************************************/"; in makefstr()
3764 z[lc++]=""; in makefstr()
3765 z[lc++]="int csysi_emptycheck(int len, csysi_mevent * mq)"; in makefstr()
3766 z[lc++]=""; in makefstr()
3767 z[lc++]="{"; in makefstr()
3768 z[lc++]=" if (len)"; in makefstr()
3769 z[lc++]=" return 0;"; in makefstr()
3770 z[lc++]=""; in makefstr()
3771 z[lc++]=" mq->cmd = CSYS_MIDI_NOOP;"; in makefstr()
3772 z[lc++]=" return 1;"; in makefstr()
3773 z[lc++]="}"; in makefstr()
3774 z[lc++]=""; in makefstr()
3775 z[lc++]=""; in makefstr()
3776 z[lc++]="/******************************************************************/"; in makefstr()
3777 z[lc++]="/* puts midi data in csysi_midiqueue[idx] */"; in makefstr()
3778 z[lc++]="/******************************************************************/"; in makefstr()
3779 z[lc++]=""; in makefstr()
3780 z[lc++]="void csysi_midilinefill(void)"; in makefstr()
3781 z[lc++]=""; in makefstr()
3782 z[lc++]="{"; in makefstr()
3783 z[lc++]=" int len, system, bpm;"; in makefstr()
3784 z[lc++]=" unsigned char nextbyte;"; in makefstr()
3785 z[lc++]=" csysi_mevent * mq;"; in makefstr()
3786 z[lc++]=""; in makefstr()
3787 z[lc++]=" mq = &(csysi_midiqueue[csysi_headmidi]);"; in makefstr()
3788 z[lc++]=" mq->atime = csysi_bitaccesstime;"; in makefstr()
3789 z[lc++]=""; in makefstr()
3790 z[lc++]=" if (csysi_tailmidi == -1)"; in makefstr()
3791 z[lc++]=" csysi_tailmidi = csysi_headmidi;"; in makefstr()
3792 z[lc++]=" csysi_headmidi = (csysi_headmidi+1)&(CSYSI_MAXMIDI-1);"; in makefstr()
3793 z[lc++]=""; in makefstr()
3794 z[lc++]=" len = csysi_readbit(24);"; in makefstr()
3795 z[lc++]=""; in makefstr()
3796 z[lc++]=" csysi_nummidi++;"; in makefstr()
3797 z[lc++]=" if (csysi_emptycheck(len, mq))"; in makefstr()
3798 z[lc++]=" return;"; in makefstr()
3799 z[lc++]=" nextbyte = (unsigned char)csysi_readbit(8); "; in makefstr()
3800 z[lc++]=" len--;"; in makefstr()
3801 z[lc++]=""; in makefstr()
3802 z[lc++]=" if (!(nextbyte & 0x80))"; in makefstr()
3803 z[lc++]=" {"; in makefstr()
3804 z[lc++]=" mq->cmd = csysi_runstat;"; in makefstr()
3805 z[lc++]=" mq->ndata = nextbyte;"; in makefstr()
3806 z[lc++]=" }"; in makefstr()
3807 z[lc++]=" else"; in makefstr()
3808 z[lc++]=" {"; in makefstr()
3809 z[lc++]=" mq->cmd = nextbyte;"; in makefstr()
3810 z[lc++]=" if ((nextbyte & CSYSI_MIDIMASKCOM) != CSYSI_MIDISYSTEM)"; in makefstr()
3811 z[lc++]=" { "; in makefstr()
3812 z[lc++]=" csysi_runstat = nextbyte;"; in makefstr()
3813 z[lc++]=" if (csysi_emptycheck(len, mq))"; in makefstr()
3814 z[lc++]=" return;"; in makefstr()
3815 z[lc++]=" mq->ndata = (unsigned char)csysi_readbit(8);"; in makefstr()
3816 z[lc++]=" len--;"; in makefstr()
3817 z[lc++]=" }"; in makefstr()
3818 z[lc++]=" }"; in makefstr()
3819 z[lc++]=""; in makefstr()
3820 z[lc++]=" mq->extchan = CSYSI_MIDIMASKCHAN & mq->cmd;"; in makefstr()
3821 z[lc++]=""; in makefstr()
3822 z[lc++]=" switch ((mq->cmd)&CSYSI_MIDIMASKCOM) {"; in makefstr()
3823 z[lc++]=" case CSYS_MIDI_NOTEOFF: /* two byte commands */"; in makefstr()
3824 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makefstr()
3825 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makefstr()
3826 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makefstr()
3827 z[lc++]=" case CSYS_MIDI_CC:"; in makefstr()
3828 z[lc++]=" if (csysi_emptycheck(len, mq))"; in makefstr()
3829 z[lc++]=" return;"; in makefstr()
3830 z[lc++]=" mq->vdata = (unsigned char)csysi_readbit(8);"; in makefstr()
3831 z[lc++]=" len--;"; in makefstr()
3832 z[lc++]=" break;"; in makefstr()
3833 z[lc++]=" case CSYS_MIDI_CTOUCH: /* one byte commands */"; in makefstr()
3834 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makefstr()
3835 z[lc++]=" break;"; in makefstr()
3836 z[lc++]=" case CSYSI_MIDISYSTEM: /* tempo command */"; in makefstr()
3837 z[lc++]=" if (mq->cmd != 0xFF)"; in makefstr()
3838 z[lc++]=" break;"; in makefstr()
3839 z[lc++]=" if (csysi_emptycheck(len, mq))"; in makefstr()
3840 z[lc++]=" return;"; in makefstr()
3841 z[lc++]=" if (((unsigned char)csysi_readbit(8)) != CSYSI_METATEMPO )"; in makefstr()
3842 z[lc++]=" {"; in makefstr()
3843 z[lc++]=" len--;"; in makefstr()
3844 z[lc++]=" break;"; in makefstr()
3845 z[lc++]=" }"; in makefstr()
3846 z[lc++]=" len--;"; in makefstr()
3847 z[lc++]=""; in makefstr()
3848 z[lc++]=" if (len >= 4)"; in makefstr()
3849 z[lc++]=" {"; in makefstr()
3850 z[lc++]=" csysi_readflush(8); "; in makefstr()
3851 z[lc++]=" bpm = csysi_readbit(24); "; in makefstr()
3852 z[lc++]=" len -= 4;"; in makefstr()
3853 z[lc++]=" if (bpm)"; in makefstr()
3854 z[lc++]=" {"; in makefstr()
3855 z[lc++]=" mq->fval = 60e6F/bpm;"; in makefstr()
3856 z[lc++]=" mq->cmd = CSYS_MIDI_NEWTEMPO;"; in makefstr()
3857 z[lc++]=" }"; in makefstr()
3858 z[lc++]=" else"; in makefstr()
3859 z[lc++]=" mq->cmd = CSYS_MIDI_NOOP;"; in makefstr()
3860 z[lc++]=" }"; in makefstr()
3861 z[lc++]=" else"; in makefstr()
3862 z[lc++]=" mq->cmd = CSYS_MIDI_NOOP;"; in makefstr()
3863 z[lc++]=""; in makefstr()
3864 z[lc++]=" break;"; in makefstr()
3865 z[lc++]=" }"; in makefstr()
3866 z[lc++]=" "; in makefstr()
3867 z[lc++]=" csysi_readflush(len*8); /* one command per event, spec says */"; in makefstr()
3868 z[lc++]=""; in makefstr()
3869 z[lc++]="}"; in makefstr()
3870 z[lc++]=""; in makefstr()
3871 z[lc++]="/******************************************************************/"; in makefstr()
3872 z[lc++]="/* finds next streaming score event */"; in makefstr()
3873 z[lc++]="/******************************************************************/"; in makefstr()
3874 z[lc++]=""; in makefstr()
3875 z[lc++]="int csysi_readnewevent(void)"; in makefstr()
3876 z[lc++]=""; in makefstr()
3877 z[lc++]="{"; in makefstr()
3878 z[lc++]=" int type, ret;"; in makefstr()
3879 z[lc++]=""; in makefstr()
3880 z[lc++]=" if (ret = csysi_readbit(1)) /* more data here */"; in makefstr()
3881 z[lc++]=" {"; in makefstr()
3882 z[lc++]=" type = csysi_readbit(2);"; in makefstr()
3883 z[lc++]=" switch (type)"; in makefstr()
3884 z[lc++]=" {"; in makefstr()
3885 z[lc++]=" case CSYSI_EVSCORE:"; in makefstr()
3886 z[lc++]=" csysi_scorelinefill();"; in makefstr()
3887 z[lc++]=" break;"; in makefstr()
3888 z[lc++]=" case CSYSI_EVMIDI:"; in makefstr()
3889 z[lc++]=" csysi_midilinefill();"; in makefstr()
3890 z[lc++]=" break;"; in makefstr()
3891 z[lc++]=" case CSYSI_EVSAMPLE:"; in makefstr()
3892 z[lc++]=" csysi_sampleread();"; in makefstr()
3893 z[lc++]=" break;"; in makefstr()
3894 z[lc++]=" default:"; in makefstr()
3895 z[lc++]=" csys_terminate(\"Unknown event type in .mp4 file\");"; in makefstr()
3896 z[lc++]=" }"; in makefstr()
3897 z[lc++]=" }"; in makefstr()
3898 z[lc++]=" return ret;"; in makefstr()
3899 z[lc++]=""; in makefstr()
3900 z[lc++]="}"; in makefstr()
3901 z[lc++]=""; in makefstr()
3902 z[lc++]="/******************************************************************/"; in makefstr()
3903 z[lc++]="/* adds an endtime command to a queue */"; in makefstr()
3904 z[lc++]="/******************************************************************/"; in makefstr()
3905 z[lc++]=""; in makefstr()
3906 z[lc++]="int csysi_setendtime(float fval)"; in makefstr()
3907 z[lc++]=""; in makefstr()
3908 z[lc++]="{"; in makefstr()
3909 z[lc++]=" int ret = 0;"; in makefstr()
3910 z[lc++]=" "; in makefstr()
3911 z[lc++]=" if ((csysi_headmidi&(CSYSI_MAXMIDI-1)) != csysi_tailmidi)"; in makefstr()
3912 z[lc++]=" {"; in makefstr()
3913 z[lc++]=" csysi_midiqueue[csysi_headmidi].atime = csysi_bitaccesstime;"; in makefstr()
3914 z[lc++]=" csysi_midiqueue[csysi_headmidi].cmd = CSYS_MIDI_ENDTIME;"; in makefstr()
3915 z[lc++]=" csysi_midiqueue[csysi_headmidi].fval = fval;"; in makefstr()
3916 z[lc++]=" if (csysi_tailmidi == -1)"; in makefstr()
3917 z[lc++]=" csysi_tailmidi = csysi_headmidi;"; in makefstr()
3918 z[lc++]=" csysi_headmidi = (csysi_headmidi+1)&(CSYSI_MAXMIDI-1);"; in makefstr()
3919 z[lc++]=" csysi_nummidi++;"; in makefstr()
3920 z[lc++]=" ret = 1;"; in makefstr()
3921 z[lc++]=" }"; in makefstr()
3922 z[lc++]=" return ret;"; in makefstr()
3923 z[lc++]=""; in makefstr()
3924 z[lc++]="}"; in makefstr()
3925 z[lc++]=""; in makefstr()
3926 z[lc++]=""; in makefstr()
3927 z[lc++]="/****************************************************************/"; in makefstr()
3928 z[lc++]="/* fill sasl and midi queues with more data */"; in makefstr()
3929 z[lc++]="/****************************************************************/"; in makefstr()
3930 z[lc++]=""; in makefstr()
3931 z[lc++]="void csysi_fillqueues(void)"; in makefstr()
3932 z[lc++]=""; in makefstr()
3933 z[lc++]="{"; in makefstr()
3934 z[lc++]=" /* while data is left in file, and room left in queues, */"; in makefstr()
3935 z[lc++]=" /* fill queues with more data */"; in makefstr()
3936 z[lc++]=""; in makefstr()
3937 z[lc++]=" while (csysi_moreaccessunits &&"; in makefstr()
3938 z[lc++]=" ((csysi_headsco&(CSYSI_MAXSASL-1)) != csysi_tailsco) && "; in makefstr()
3939 z[lc++]=" ((csysi_headabs&(CSYSI_MAXSASL-1)) != csysi_tailabs) && "; in makefstr()
3940 z[lc++]=" ((csysi_headmidi&(CSYSI_MAXMIDI-1)) != csysi_tailmidi))"; in makefstr()
3941 z[lc++]=" {"; in makefstr()
3942 z[lc++]=" if (csysi_endofevent)"; in makefstr()
3943 z[lc++]=" {"; in makefstr()
3944 z[lc++]=" csysi_moreaccessunits = csysi_readaccesstime();"; in makefstr()
3945 z[lc++]=" }"; in makefstr()
3946 z[lc++]=" if (csysi_moreaccessunits)"; in makefstr()
3947 z[lc++]=" {"; in makefstr()
3948 z[lc++]=" csysi_endofevent = !csysi_readnewevent();"; in makefstr()
3949 z[lc++]=" }"; in makefstr()
3950 z[lc++]=" }"; in makefstr()
3951 z[lc++]=""; in makefstr()
3952 z[lc++]=" if (!(CSYS_GIVENENDTIME) && !csysi_moreaccessunits &&"; in makefstr()
3953 z[lc++]=" !(csysi_endflag))"; in makefstr()
3954 z[lc++]=" {"; in makefstr()
3955 z[lc++]=" csysi_endflag = csysi_setendtime(csysi_compendtime);"; in makefstr()
3956 z[lc++]=" }"; in makefstr()
3957 z[lc++]=""; in makefstr()
3958 z[lc++]=" return;"; in makefstr()
3959 z[lc++]=""; in makefstr()
3960 z[lc++]="}"; in makefstr()
3961 z[lc++]=""; in makefstr()
3962 z[lc++]="/****************************************************************/"; in makefstr()
3963 z[lc++]="/* finds, opens, and seeks streaming file */"; in makefstr()
3964 z[lc++]="/****************************************************************/"; in makefstr()
3965 z[lc++]=""; in makefstr()
3966 z[lc++]="void csysi_openfile(void)"; in makefstr()
3967 z[lc++]=""; in makefstr()
3968 z[lc++]="{"; in makefstr()
3969 z[lc++]=" int i;"; in makefstr()
3970 z[lc++]=" char * name;"; in makefstr()
3971 z[lc++]=""; in makefstr()
3972 z[lc++]=" /* first search ./sa file command line for .mp4 file */"; in makefstr()
3973 z[lc++]=""; in makefstr()
3974 z[lc++]=" for (i=1;i<EV(csys_argc); i++)"; in makefstr()
3975 z[lc++]=" if (!strcmp(EV(csys_argv[i]),\"-csys_fstr_file\"))"; in makefstr()
3976 z[lc++]=" {"; in makefstr()
3977 z[lc++]=" i++;"; in makefstr()
3978 z[lc++]=" if (i == EV(csys_argc))"; in makefstr()
3979 z[lc++]=" csys_terminate(\".mp4 file not specified\");"; in makefstr()
3980 z[lc++]=" if (!(csysi_bitfile = fopen(EV(csys_argv[i]),\"rb\")))"; in makefstr()
3981 z[lc++]=" {"; in makefstr()
3982 z[lc++]=" name = (char *) calloc(strlen(EV(csys_argv[i]))+5, sizeof(char));"; in makefstr()
3983 z[lc++]=" sprintf(name,\"%s.mp4\",EV(csys_argv[i]));"; in makefstr()
3984 z[lc++]=" if (!(csysi_bitfile = fopen(name,\"rb\")))"; in makefstr()
3985 z[lc++]=" csys_terminate(\".mp4 file not found\");"; in makefstr()
3986 z[lc++]=" }"; in makefstr()
3987 z[lc++]=" break;"; in makefstr()
3988 z[lc++]=" }"; in makefstr()
3989 z[lc++]=""; in makefstr()
3990 z[lc++]=" /* then look though sfront command line for -bitc */"; in makefstr()
3991 z[lc++]=""; in makefstr()
3992 z[lc++]=" if (!csysi_bitfile)"; in makefstr()
3993 z[lc++]=" {"; in makefstr()
3994 z[lc++]=" for (i=1;i<csys_sfront_argc; i++)"; in makefstr()
3995 z[lc++]=" if (!strcmp(csys_sfront_argv[i],\"-bitc\"))"; in makefstr()
3996 z[lc++]=" {"; in makefstr()
3997 z[lc++]=" i++;"; in makefstr()
3998 z[lc++]=" if (i == csys_sfront_argc)"; in makefstr()
3999 z[lc++]=" csys_terminate(\"-bitc file.mp4 unspecified\");"; in makefstr()
4000 z[lc++]=" if (!(csysi_bitfile = fopen(csys_sfront_argv[i],\"rb\")))"; in makefstr()
4001 z[lc++]=" {"; in makefstr()
4002 z[lc++]=" name = (char *) calloc(strlen(csys_sfront_argv[i])+5,"; in makefstr()
4003 z[lc++]=" sizeof(char));"; in makefstr()
4004 z[lc++]=" sprintf(name,\"%s.mp4\",csys_sfront_argv[i]);"; in makefstr()
4005 z[lc++]=" if (!(csysi_bitfile = fopen(name,\"rb\")))"; in makefstr()
4006 z[lc++]=" csys_terminate(\"-bitc file.mp4 not found\");"; in makefstr()
4007 z[lc++]=" }"; in makefstr()
4008 z[lc++]=" break;"; in makefstr()
4009 z[lc++]=" }"; in makefstr()
4010 z[lc++]=" }"; in makefstr()
4011 z[lc++]=""; in makefstr()
4012 z[lc++]=" if (!csysi_bitfile)"; in makefstr()
4013 z[lc++]=" csys_terminate("; in makefstr()
4014 z[lc++]=" \"Syntax: ./sa -csys_fstr_file file.mp4, or sfront -bitc file.mp4\");"; in makefstr()
4015 z[lc++]=""; in makefstr()
4016 z[lc++]=" /* if an explicit SASL endtime not give, invalidate computed endtime */"; in makefstr()
4017 z[lc++]=""; in makefstr()
4018 z[lc++]=" if (!(CSYS_GIVENENDTIME))"; in makefstr()
4019 z[lc++]=" {"; in makefstr()
4020 z[lc++]=" csysi_compendtime = EV(endtime);"; in makefstr()
4021 z[lc++]=" if (!csysi_setendtime(CSYSI_MAXENDTIME))"; in makefstr()
4022 z[lc++]=" csys_terminate(\"problem setting init endtime\");"; in makefstr()
4023 z[lc++]=" }"; in makefstr()
4024 z[lc++]=""; in makefstr()
4025 z[lc++]=" /* skip to access_units, fill up queues */"; in makefstr()
4026 z[lc++]=""; in makefstr()
4027 z[lc++]=" csysi_flushconfig();"; in makefstr()
4028 z[lc++]=" csysi_fillqueues();"; in makefstr()
4029 z[lc++]=""; in makefstr()
4030 z[lc++]="}"; in makefstr()
4031 z[lc++]=""; in makefstr()
4032 z[lc++]="/****************************************************************/"; in makefstr()
4033 z[lc++]="/* initialization routine for control */"; in makefstr()
4034 z[lc++]="/****************************************************************/"; in makefstr()
4035 z[lc++]=""; in makefstr()
4036 z[lc++]="int csys_setup(void)"; in makefstr()
4037 z[lc++]=" "; in makefstr()
4038 z[lc++]="{"; in makefstr()
4039 z[lc++]=" csysi_openfile();"; in makefstr()
4040 z[lc++]=" return CSYS_DONE;"; in makefstr()
4041 z[lc++]="}"; in makefstr()
4042 z[lc++]=""; in makefstr()
4043 z[lc++]=""; in makefstr()
4044 z[lc++]="/****************************************************************/"; in makefstr()
4045 z[lc++]="/* polling routine for new data */"; in makefstr()
4046 z[lc++]="/****************************************************************/"; in makefstr()
4047 z[lc++]=""; in makefstr()
4048 z[lc++]="int csys_newdata(void)"; in makefstr()
4049 z[lc++]=" "; in makefstr()
4050 z[lc++]="{"; in makefstr()
4051 z[lc++]=" int i, found;"; in makefstr()
4052 z[lc++]=""; in makefstr()
4053 z[lc++]=" csysi_absready = 0; "; in makefstr()
4054 z[lc++]=" csysi_scoready = 0; "; in makefstr()
4055 z[lc++]=" csysi_midiready = 0; "; in makefstr()
4056 z[lc++]=""; in makefstr()
4057 z[lc++]=" csysi_fillqueues();"; in makefstr()
4058 z[lc++]=""; in makefstr()
4059 z[lc++]=" /* see if an event is ready */"; in makefstr()
4060 z[lc++]=""; in makefstr()
4061 z[lc++]=" i = csysi_tailsco;"; in makefstr()
4062 z[lc++]=" found = ((i = csysi_tailsco) < 0);"; in makefstr()
4063 z[lc++]=" while (csysi_numscotime && !found)"; in makefstr()
4064 z[lc++]=" {"; in makefstr()
4065 z[lc++]=" if (csysi_scoqueue[i].stime <= EV(scorebeats))"; in makefstr()
4066 z[lc++]=" csysi_scoready++;"; in makefstr()
4067 z[lc++]=" else"; in makefstr()
4068 z[lc++]=" found = 1;"; in makefstr()
4069 z[lc++]=" i = (i+1)&(CSYSI_MAXSASL-1);"; in makefstr()
4070 z[lc++]=" if (i == csysi_headsco)"; in makefstr()
4071 z[lc++]=" found = 1;"; in makefstr()
4072 z[lc++]=" }"; in makefstr()
4073 z[lc++]=" "; in makefstr()
4074 z[lc++]=" i = csysi_tailabs;"; in makefstr()
4075 z[lc++]=" found = ((i = csysi_tailabs) < 0);"; in makefstr()
4076 z[lc++]=" while (csysi_numabstime && !found)"; in makefstr()
4077 z[lc++]=" {"; in makefstr()
4078 z[lc++]=" if (csysi_absqueue[i].atime < EV(absolutetime))"; in makefstr()
4079 z[lc++]=" csysi_absready++;"; in makefstr()
4080 z[lc++]=" else"; in makefstr()
4081 z[lc++]=" found = 1;"; in makefstr()
4082 z[lc++]=" i = (i+1)&(CSYSI_MAXSASL-1);"; in makefstr()
4083 z[lc++]=" if (i == csysi_headabs)"; in makefstr()
4084 z[lc++]=" found = 1;"; in makefstr()
4085 z[lc++]=" }"; in makefstr()
4086 z[lc++]=" "; in makefstr()
4087 z[lc++]=" i = csysi_tailmidi;"; in makefstr()
4088 z[lc++]=" found = ((i = csysi_tailmidi) < 0);"; in makefstr()
4089 z[lc++]=" while (csysi_nummidi && !found)"; in makefstr()
4090 z[lc++]=" {"; in makefstr()
4091 z[lc++]=" if (csysi_midiqueue[i].atime < EV(absolutetime))"; in makefstr()
4092 z[lc++]=" csysi_midiready++;"; in makefstr()
4093 z[lc++]=" else"; in makefstr()
4094 z[lc++]=" found = 1;"; in makefstr()
4095 z[lc++]=" i = (i+1)&(CSYSI_MAXMIDI-1);"; in makefstr()
4096 z[lc++]=" if (i == csysi_headmidi)"; in makefstr()
4097 z[lc++]=" found = 1;"; in makefstr()
4098 z[lc++]=" }"; in makefstr()
4099 z[lc++]=""; in makefstr()
4100 z[lc++]=" if (csysi_midiready)"; in makefstr()
4101 z[lc++]=" {"; in makefstr()
4102 z[lc++]=" if ((csysi_absready || csysi_scoready))"; in makefstr()
4103 z[lc++]=" return CSYS_EVENTS;"; in makefstr()
4104 z[lc++]=" else"; in makefstr()
4105 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefstr()
4106 z[lc++]=" }"; in makefstr()
4107 z[lc++]=" else"; in makefstr()
4108 z[lc++]=" {"; in makefstr()
4109 z[lc++]=" if ((csysi_absready || csysi_scoready))"; in makefstr()
4110 z[lc++]=" return CSYS_SASLEVENTS;"; in makefstr()
4111 z[lc++]=" else"; in makefstr()
4112 z[lc++]=" return CSYS_NONE;"; in makefstr()
4113 z[lc++]=" }"; in makefstr()
4114 z[lc++]=""; in makefstr()
4115 z[lc++]="}"; in makefstr()
4116 z[lc++]=""; in makefstr()
4117 z[lc++]="/****************************************************************/"; in makefstr()
4118 z[lc++]="/* processes a SASL event */"; in makefstr()
4119 z[lc++]="/****************************************************************/"; in makefstr()
4120 z[lc++]=""; in makefstr()
4121 z[lc++]="int csys_saslevent(unsigned char * cmd, unsigned char * priority,"; in makefstr()
4122 z[lc++]=" unsigned short * id, unsigned short * label,"; in makefstr()
4123 z[lc++]=" float * fval, unsigned int * pnum, float ** p)"; in makefstr()
4124 z[lc++]=""; in makefstr()
4125 z[lc++]="{"; in makefstr()
4126 z[lc++]=" int i, done, j, scofound;"; in makefstr()
4127 z[lc++]=" csysi_sevent * cq;"; in makefstr()
4128 z[lc++]=""; in makefstr()
4129 z[lc++]=""; in makefstr()
4130 z[lc++]=" done = 1;"; in makefstr()
4131 z[lc++]=" if (csysi_scoready)"; in makefstr()
4132 z[lc++]=" {"; in makefstr()
4133 z[lc++]=" cq = &(csysi_scoqueue[csysi_tailsco]);"; in makefstr()
4134 z[lc++]=" scofound = 1;"; in makefstr()
4135 z[lc++]=" }"; in makefstr()
4136 z[lc++]=" else"; in makefstr()
4137 z[lc++]=" {"; in makefstr()
4138 z[lc++]=" if (csysi_absready)"; in makefstr()
4139 z[lc++]=" {"; in makefstr()
4140 z[lc++]=" cq = &(csysi_absqueue[csysi_tailabs]);"; in makefstr()
4141 z[lc++]=" scofound = 0;"; in makefstr()
4142 z[lc++]=" }"; in makefstr()
4143 z[lc++]=" else"; in makefstr()
4144 z[lc++]=" csys_terminate(\"saslevent() queue error\");"; in makefstr()
4145 z[lc++]=" }"; in makefstr()
4146 z[lc++]=""; in makefstr()
4147 z[lc++]=" *priority = cq->priority;"; in makefstr()
4148 z[lc++]=" *id = cq->id;"; in makefstr()
4149 z[lc++]=" *label = cq->label;"; in makefstr()
4150 z[lc++]=" *fval = cq->fval;"; in makefstr()
4151 z[lc++]=" *pnum = cq->pnum;"; in makefstr()
4152 z[lc++]=" *p = cq->p;"; in makefstr()
4153 z[lc++]=""; in makefstr()
4154 z[lc++]=" switch (*cmd = cq->cmd) {"; in makefstr()
4155 z[lc++]=" case CSYS_SASL_ENDTIME : "; in makefstr()
4156 z[lc++]=" *fval = EV(scorebeats);"; in makefstr()
4157 z[lc++]=" break;"; in makefstr()
4158 z[lc++]=" case CSYS_SASL_NOOP :"; in makefstr()
4159 z[lc++]=" case CSYS_SASL_TEMPO : "; in makefstr()
4160 z[lc++]=" case CSYS_SASL_TABLE :"; in makefstr()
4161 z[lc++]=" case CSYS_SASL_INSTR :"; in makefstr()
4162 z[lc++]=" break;"; in makefstr()
4163 z[lc++]=" case CSYS_SASL_CONTROL :"; in makefstr()
4164 z[lc++]=" if ((*id) == CSYS_SASL_NOINSTR)"; in makefstr()
4165 z[lc++]=" break;"; in makefstr()
4166 z[lc++]=" if (csysi_targetvar == -1)"; in makefstr()
4167 z[lc++]=" {"; in makefstr()
4168 z[lc++]=" csysi_targetvar=0;"; in makefstr()
4169 z[lc++]=" while (csysi_targetvar < CSYS_TARGETNUM)"; in makefstr()
4170 z[lc++]=" {"; in makefstr()
4171 z[lc++]=" if (csys_target[csysi_targetvar].token == (*pnum))"; in makefstr()
4172 z[lc++]=" break;"; in makefstr()
4173 z[lc++]=" csysi_targetvar++;"; in makefstr()
4174 z[lc++]=" }"; in makefstr()
4175 z[lc++]=" if (csysi_targetvar == CSYS_TARGETNUM) "; in makefstr()
4176 z[lc++]=" {"; in makefstr()
4177 z[lc++]=" /* specified variable not imported -- abort command */"; in makefstr()
4178 z[lc++]=" *cmd = CSYS_SASL_NOOP;"; in makefstr()
4179 z[lc++]=" csysi_targetvar = -1;"; in makefstr()
4180 z[lc++]=" break;"; in makefstr()
4181 z[lc++]=" }"; in makefstr()
4182 z[lc++]=" csysi_targetcount = 0;"; in makefstr()
4183 z[lc++]=" }"; in makefstr()
4184 z[lc++]=" *id = csys_target[csysi_targetvar].instrindex[csysi_targetcount];"; in makefstr()
4185 z[lc++]=" *pnum = csys_target[csysi_targetvar].varindex[csysi_targetcount];"; in makefstr()
4186 z[lc++]=" if ((++csysi_targetcount) < csys_target[csysi_targetvar].numinstr)"; in makefstr()
4187 z[lc++]=" done = 0;"; in makefstr()
4188 z[lc++]=" else"; in makefstr()
4189 z[lc++]=" csysi_targetvar = -1;"; in makefstr()
4190 z[lc++]=" break;"; in makefstr()
4191 z[lc++]=" }"; in makefstr()
4192 z[lc++]=""; in makefstr()
4193 z[lc++]=" if (done)"; in makefstr()
4194 z[lc++]=" {"; in makefstr()
4195 z[lc++]=" if (scofound)"; in makefstr()
4196 z[lc++]=" {"; in makefstr()
4197 z[lc++]=" csysi_scoready--;"; in makefstr()
4198 z[lc++]=" csysi_numscotime--;"; in makefstr()
4199 z[lc++]=" csysi_tailsco = (csysi_tailsco+1)&(CSYSI_MAXSASL-1);"; in makefstr()
4200 z[lc++]=" if (csysi_tailsco == csysi_headsco) /* empty */"; in makefstr()
4201 z[lc++]=" {"; in makefstr()
4202 z[lc++]=" csysi_headsco = 0;"; in makefstr()
4203 z[lc++]=" csysi_tailsco = -1;"; in makefstr()
4204 z[lc++]=" }"; in makefstr()
4205 z[lc++]=" }"; in makefstr()
4206 z[lc++]=" else"; in makefstr()
4207 z[lc++]=" {"; in makefstr()
4208 z[lc++]=" csysi_absready--;"; in makefstr()
4209 z[lc++]=" csysi_numabstime--;"; in makefstr()
4210 z[lc++]=" csysi_tailabs = (csysi_tailabs+1)&(CSYSI_MAXSASL-1);"; in makefstr()
4211 z[lc++]=" if (csysi_tailabs == csysi_headabs) /* empty */"; in makefstr()
4212 z[lc++]=" {"; in makefstr()
4213 z[lc++]=" csysi_headabs = 0;"; in makefstr()
4214 z[lc++]=" csysi_tailabs = -1;"; in makefstr()
4215 z[lc++]=" }"; in makefstr()
4216 z[lc++]=" }"; in makefstr()
4217 z[lc++]=" }"; in makefstr()
4218 z[lc++]=""; in makefstr()
4219 z[lc++]=" if (csysi_scoready || csysi_absready)"; in makefstr()
4220 z[lc++]=" return CSYS_SASLEVENTS;"; in makefstr()
4221 z[lc++]=" else"; in makefstr()
4222 z[lc++]=" return CSYS_NONE;"; in makefstr()
4223 z[lc++]=""; in makefstr()
4224 z[lc++]="}"; in makefstr()
4225 z[lc++]=""; in makefstr()
4226 z[lc++]=" "; in makefstr()
4227 z[lc++]="/****************************************************************/"; in makefstr()
4228 z[lc++]="/* closing routine for control */"; in makefstr()
4229 z[lc++]="/****************************************************************/"; in makefstr()
4230 z[lc++]=""; in makefstr()
4231 z[lc++]="void csys_shutdown(void)"; in makefstr()
4232 z[lc++]=" "; in makefstr()
4233 z[lc++]="{"; in makefstr()
4234 z[lc++]="}"; in makefstr()
4235 z[lc++]=""; in makefstr()
4236 z[lc++]=""; in makefstr()
4237 z[lc++]="/****************************************************************/"; in makefstr()
4238 z[lc++]="/* processes a MIDI event */"; in makefstr()
4239 z[lc++]="/****************************************************************/"; in makefstr()
4240 z[lc++]=""; in makefstr()
4241 z[lc++]=""; in makefstr()
4242 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makefstr()
4243 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makefstr()
4244 z[lc++]=" float * fval)"; in makefstr()
4245 z[lc++]=""; in makefstr()
4246 z[lc++]="{"; in makefstr()
4247 z[lc++]=""; in makefstr()
4248 z[lc++]=" int i = csysi_tailmidi;"; in makefstr()
4249 z[lc++]=""; in makefstr()
4250 z[lc++]=" *cmd = csysi_midiqueue[i].cmd;"; in makefstr()
4251 z[lc++]=" *ndata = csysi_midiqueue[i].ndata;"; in makefstr()
4252 z[lc++]=" *vdata = csysi_midiqueue[i].vdata;"; in makefstr()
4253 z[lc++]=" *extchan = csysi_midiqueue[i].extchan;"; in makefstr()
4254 z[lc++]=" *fval = csysi_midiqueue[i].fval;"; in makefstr()
4255 z[lc++]=""; in makefstr()
4256 z[lc++]=" if (*cmd == CSYS_MIDI_ENDTIME)"; in makefstr()
4257 z[lc++]=" *fval = (*fval > EV(scorebeats) + 5.0F) ? *fval : EV(scorebeats) + 5.0F;"; in makefstr()
4258 z[lc++]=""; in makefstr()
4259 z[lc++]=" csysi_midiready--;"; in makefstr()
4260 z[lc++]=" csysi_nummidi--;"; in makefstr()
4261 z[lc++]=""; in makefstr()
4262 z[lc++]=" csysi_tailmidi = (csysi_tailmidi+1)&(CSYSI_MAXMIDI-1);"; in makefstr()
4263 z[lc++]=" if (csysi_tailmidi == csysi_headmidi) /* empty */"; in makefstr()
4264 z[lc++]=" {"; in makefstr()
4265 z[lc++]=" csysi_headmidi = 0;"; in makefstr()
4266 z[lc++]=" csysi_tailmidi = -1;"; in makefstr()
4267 z[lc++]=" }"; in makefstr()
4268 z[lc++]=""; in makefstr()
4269 z[lc++]=" if (csysi_midiready)"; in makefstr()
4270 z[lc++]=" return CSYS_MIDIEVENTS;"; in makefstr()
4271 z[lc++]=" else"; in makefstr()
4272 z[lc++]=" return CSYS_NONE;"; in makefstr()
4273 z[lc++]=""; in makefstr()
4274 z[lc++]="}"; in makefstr()
4275 z[lc++]=""; in makefstr()
4276 z[lc++]="#undef SAMP_SR "; in makefstr()
4277 z[lc++]="#undef SAMP_LOOPSTART "; in makefstr()
4278 z[lc++]="#undef SAMP_LOOPEND "; in makefstr()
4279 z[lc++]="#undef SAMP_BASEFREQ "; in makefstr()
4280 z[lc++]="#undef SAMP_DATABLOCK "; in makefstr()
4281 z[lc++]=""; in makefstr()
4282 z[lc++]=""; in makefstr()
4291 z[lc++]=""; in makecoremidi()
4292 z[lc++]="/*"; in makecoremidi()
4293 z[lc++]="# Sfront, a SAOL to C translator "; in makecoremidi()
4294 z[lc++]="# This file: coremidi control driver for sfront"; in makecoremidi()
4295 z[lc++]="#"; in makecoremidi()
4296 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makecoremidi()
4297 z[lc++]="# All rights reserved."; in makecoremidi()
4298 z[lc++]="#"; in makecoremidi()
4299 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makecoremidi()
4300 z[lc++]="# modification, are permitted provided that the following conditions are"; in makecoremidi()
4301 z[lc++]="# met:"; in makecoremidi()
4302 z[lc++]="#"; in makecoremidi()
4303 z[lc++]="# Redistributions of source code must retain the above copyright"; in makecoremidi()
4304 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makecoremidi()
4305 z[lc++]="#"; in makecoremidi()
4306 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makecoremidi()
4307 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makecoremidi()
4308 z[lc++]="# documentation and/or other materials provided with the distribution."; in makecoremidi()
4309 z[lc++]="#"; in makecoremidi()
4310 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makecoremidi()
4311 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makecoremidi()
4312 z[lc++]="# derived from this software without specific prior written permission."; in makecoremidi()
4313 z[lc++]="#"; in makecoremidi()
4314 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makecoremidi()
4315 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makecoremidi()
4316 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makecoremidi()
4317 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makecoremidi()
4318 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makecoremidi()
4319 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makecoremidi()
4320 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makecoremidi()
4321 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makecoremidi()
4322 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makecoremidi()
4323 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makecoremidi()
4324 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makecoremidi()
4325 z[lc++]="#"; in makecoremidi()
4326 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makecoremidi()
4327 z[lc++]="*/"; in makecoremidi()
4328 z[lc++]=""; in makecoremidi()
4329 z[lc++]=""; in makecoremidi()
4330 z[lc++]=""; in makecoremidi()
4331 z[lc++]="/****************************************************************/"; in makecoremidi()
4332 z[lc++]="/****************************************************************/"; in makecoremidi()
4333 z[lc++]="/* coremidi control driver for sfront */ "; in makecoremidi()
4334 z[lc++]="/****************************************************************/"; in makecoremidi()
4335 z[lc++]=""; in makecoremidi()
4336 z[lc++]="#include <sys/types.h>"; in makecoremidi()
4337 z[lc++]="#include <sys/socket.h>"; in makecoremidi()
4338 z[lc++]="#include <unistd.h>"; in makecoremidi()
4339 z[lc++]="#include <sys/uio.h>"; in makecoremidi()
4340 z[lc++]="#include <fcntl.h>"; in makecoremidi()
4341 z[lc++]=""; in makecoremidi()
4342 z[lc++]="#if !(defined(ASYS_OUTDRIVER_COREAUDIO)||defined(ASYS_INDRIVER_COREAUDIO))"; in makecoremidi()
4343 z[lc++]="#include <CoreFoundation/CFString.h>"; in makecoremidi()
4344 z[lc++]="#endif"; in makecoremidi()
4345 z[lc++]=""; in makecoremidi()
4346 z[lc++]="#include <CoreMIDI/CoreMIDI.h>"; in makecoremidi()
4347 z[lc++]=""; in makecoremidi()
4348 z[lc++]="/***************************/"; in makecoremidi()
4349 z[lc++]="/* graceful_exit constants */"; in makecoremidi()
4350 z[lc++]="/***************************/"; in makecoremidi()
4351 z[lc++]=""; in makecoremidi()
4352 z[lc++]="#define CSYSI_GE_RUNNING 0"; in makecoremidi()
4353 z[lc++]="#define CSYSI_GE_DOEXIT 1"; in makecoremidi()
4354 z[lc++]="#define CSYSI_GE_EXITED 2"; in makecoremidi()
4355 z[lc++]=""; in makecoremidi()
4356 z[lc++]="#define CSYSI_RETRY_MAX 256 /* retry counter for read() EINTR */"; in makecoremidi()
4357 z[lc++]=""; in makecoremidi()
4358 z[lc++]="/*************************/"; in makecoremidi()
4359 z[lc++]="/* MIDI source constants */"; in makecoremidi()
4360 z[lc++]="/*************************/"; in makecoremidi()
4361 z[lc++]=""; in makecoremidi()
4362 z[lc++]="#define CSYSI_MAXPORTS 4 /* must match ../../control.c */"; in makecoremidi()
4363 z[lc++]=""; in makecoremidi()
4364 z[lc++]="/**********************************/"; in makecoremidi()
4365 z[lc++]="/* buffer constants -- needs work */"; in makecoremidi()
4366 z[lc++]="/**********************************/"; in makecoremidi()
4367 z[lc++]=""; in makecoremidi()
4368 z[lc++]="#define CSYSI_BUFFSIZE 1024 /* size of the holding buffer */"; in makecoremidi()
4369 z[lc++]="#define CSYSI_SENDSIZE 256 /* maximum size of one packet[] */"; in makecoremidi()
4370 z[lc++]="#define CSYSI_SYSEXSIZE 128 /* buffer size for F0/F4/F5 */"; in makecoremidi()
4371 z[lc++]=""; in makecoremidi()
4372 z[lc++]="/****************************/"; in makecoremidi()
4373 z[lc++]="/* System command constants */"; in makecoremidi()
4374 z[lc++]="/****************************/"; in makecoremidi()
4375 z[lc++]=""; in makecoremidi()
4376 z[lc++]="#define CSYSI_BLOCK_SYSTEM_COMMANDS 0 /* remove 0xF from source */"; in makecoremidi()
4377 z[lc++]="#define CSYSI_PASS_SYSTEM_COMMANDS 1 /* retain 0xF */"; in makecoremidi()
4378 z[lc++]=""; in makecoremidi()
4379 z[lc++]="#define CSYSI_SYSTEM_GATE CSYSI_PASS_SYSTEM_COMMANDS /* sets mode */"; in makecoremidi()
4380 z[lc++]=""; in makecoremidi()
4381 z[lc++]="#define CSYSI_COMMAND_ONGOING 0 /* arbitrary-length command ongoing */"; in makecoremidi()
4382 z[lc++]="#define CSYSI_COMMAND_COMPLETED 1 /* arbitrary-length command completed */"; in makecoremidi()
4383 z[lc++]=""; in makecoremidi()
4384 z[lc++]=""; in makecoremidi()
4385 z[lc++]="/**********************/"; in makecoremidi()
4386 z[lc++]="/* preamble constants */"; in makecoremidi()
4387 z[lc++]="/**********************/"; in makecoremidi()
4388 z[lc++]=""; in makecoremidi()
4389 z[lc++]="/*"; in makecoremidi()
4390 z[lc++]=""; in makecoremidi()
4391 z[lc++]=" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 "; in makecoremidi()
4392 z[lc++]="-------------------------------------------------------------------"; in makecoremidi()
4393 z[lc++]="| 0xF7 |T|R|R|R| EXT | tstamp (T = 1) ... | MIDI ... |"; in makecoremidi()
4394 z[lc++]="-------------------------------------------------------------------"; in makecoremidi()
4395 z[lc++]=""; in makecoremidi()
4396 z[lc++]=" T is set to 1 if a non-NOW timestamp follows the header octet."; in makecoremidi()
4397 z[lc++]=" R's are reserved."; in makecoremidi()
4398 z[lc++]=" EXT codes which of 16 16-channel MIDI sources."; in makecoremidi()
4399 z[lc++]=""; in makecoremidi()
4400 z[lc++]="*/"; in makecoremidi()
4401 z[lc++]=""; in makecoremidi()
4402 z[lc++]="#define CSYSI_PREAMBLE_SIZE 6 /* read_proc preamble w/ timestamp */"; in makecoremidi()
4403 z[lc++]="#define CSYSI_PREAMBLE_NOWSIZE 2 /* read_proc preamble w/o timestamp */"; in makecoremidi()
4404 z[lc++]=""; in makecoremidi()
4405 z[lc++]="#define CSYSI_PREAMBLE_POS_MARKER 0 /* first octet is the marker: 0xFF */"; in makecoremidi()
4406 z[lc++]="#define CSYSI_PREAMBLE_POS_CONTROL 1 /* second octet holds control bits */"; in makecoremidi()
4407 z[lc++]="#define CSYSI_PREAMBLE_POS_TSTAMP 2 /* last 4 (optional) octets for tstamp */"; in makecoremidi()
4408 z[lc++]=""; in makecoremidi()
4409 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_MARKER 0xF7u /* marker value: for easy parsing */"; in makecoremidi()
4410 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_T 0x80u /* timestamp follows this octet */"; in makecoremidi()
4411 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_R2 0x40u /* reserved bits */"; in makecoremidi()
4412 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_R1 0x20u "; in makecoremidi()
4413 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_R0 0x10u "; in makecoremidi()
4414 z[lc++]="#define CSYSI_PREAMBLE_FLAGS_EXT 0x0Fu /* the EXT nibble */"; in makecoremidi()
4415 z[lc++]=""; in makecoremidi()
4416 z[lc++]="/*****************************/"; in makecoremidi()
4417 z[lc++]="/* simulated F4/F5 constants */"; in makecoremidi()
4418 z[lc++]="/*****************************/"; in makecoremidi()
4419 z[lc++]=""; in makecoremidi()
4420 z[lc++]="/*"; in makecoremidi()
4421 z[lc++]=" SysEx format to simulate undefined commands:"; in makecoremidi()
4422 z[lc++]=""; in makecoremidi()
4423 z[lc++]=" | F7 | 7D | code | octone (if bit set) | octtwo (if bit set) | F0 |"; in makecoremidi()
4424 z[lc++]=""; in makecoremidi()
4425 z[lc++]="*/"; in makecoremidi()
4426 z[lc++]=""; in makecoremidi()
4427 z[lc++]="#define CSYSI_UNDEFINED_ID 0x7Du /* Manufacturers ID */"; in makecoremidi()
4428 z[lc++]=""; in makecoremidi()
4429 z[lc++]="#define CSYSI_UNDEFINED_F4 0x40u /* set is F4, clear is F5 */"; in makecoremidi()
4430 z[lc++]="#define CSYSI_UNDEFINED_OCTONE 0x20u /* presence of 1st octet */"; in makecoremidi()
4431 z[lc++]="#define CSYSI_UNDEFINED_OCTTWO 0x10u /* presence of 2nd octet */ "; in makecoremidi()
4432 z[lc++]=""; in makecoremidi()
4433 z[lc++]="/************************/"; in makecoremidi()
4434 z[lc++]="/* input port variables */"; in makecoremidi()
4435 z[lc++]="/************************/"; in makecoremidi()
4436 z[lc++]=""; in makecoremidi()
4437 z[lc++]="MIDIClientRef csysi_inclient; /* the input client */"; in makecoremidi()
4438 z[lc++]="MIDIPortRef csysi_inport; /* it's port */"; in makecoremidi()
4439 z[lc++]=""; in makecoremidi()
4440 z[lc++]="typedef struct csysi_portinfo {"; in makecoremidi()
4441 z[lc++]=" int ext; /* EXT field for preamble, also array index */"; in makecoremidi()
4442 z[lc++]=" int valid; /* 0 if unused, 1 if online, -1 if offline */"; in makecoremidi()
4443 z[lc++]=" MIDIEndpointRef src; /* current src (may be invalid if offline) */"; in makecoremidi()
4444 z[lc++]=" int id; /* unique ID of src (currently unused) */"; in makecoremidi()
4445 z[lc++]=""; in makecoremidi()
4446 z[lc++]="#if (CSYSI_SYSTEM_GATE == CSYSI_PASS_SYSTEM_COMMANDS)"; in makecoremidi()
4447 z[lc++]=" unsigned char sysbuff[CSYSI_SYSEXSIZE]; /* System command buffer */"; in makecoremidi()
4448 z[lc++]=" int sysex_size; /* current size of sysbuff[] */"; in makecoremidi()
4449 z[lc++]="#endif"; in makecoremidi()
4450 z[lc++]=""; in makecoremidi()
4451 z[lc++]="} csysi_portinfo;"; in makecoremidi()
4452 z[lc++]=""; in makecoremidi()
4453 z[lc++]="csysi_portinfo csysi_ports[CSYSI_MAXPORTS];"; in makecoremidi()
4454 z[lc++]=""; in makecoremidi()
4455 z[lc++]="/**********************************/"; in makecoremidi()
4456 z[lc++]="/* read_proc pipe data structures */"; in makecoremidi()
4457 z[lc++]="/**********************************/"; in makecoremidi()
4458 z[lc++]=""; in makecoremidi()
4459 z[lc++]="int csysi_readproc_pipepair[2];"; in makecoremidi()
4460 z[lc++]="int csysi_graceful_exit;"; in makecoremidi()
4461 z[lc++]=""; in makecoremidi()
4462 z[lc++]="/************************/"; in makecoremidi()
4463 z[lc++]="/* command buffer state */"; in makecoremidi()
4464 z[lc++]="/************************/"; in makecoremidi()
4465 z[lc++]=""; in makecoremidi()
4466 z[lc++]="unsigned char csysi_buffer[CSYSI_BUFFSIZE];"; in makecoremidi()
4467 z[lc++]="int csysi_len, csysi_cnt;"; in makecoremidi()
4468 z[lc++]="unsigned short csysi_currext;"; in makecoremidi()
4469 z[lc++]=""; in makecoremidi()
4470 z[lc++]="/****************************************************************/"; in makecoremidi()
4471 z[lc++]="/* generic error-checking wrappers */"; in makecoremidi()
4472 z[lc++]="/****************************************************************/"; in makecoremidi()
4473 z[lc++]=""; in makecoremidi()
4474 z[lc++]="#define CSYSI_ERROR_RETURN(x) do {\\"; in makecoremidi()
4475 z[lc++]=" fprintf(stderr, \" Error: %s.\\n\", x);\\"; in makecoremidi()
4476 z[lc++]=" fprintf(stderr, \" Errno Message: %s\\n\\n\", strerror(errno));\\"; in makecoremidi()
4477 z[lc++]=" return CSYS_ERROR; } while (0)"; in makecoremidi()
4478 z[lc++]=""; in makecoremidi()
4479 z[lc++]="#define CSYSI_ERROR_TERMINATE(x) do {\\"; in makecoremidi()
4480 z[lc++]=" fprintf(stderr, \" Runtime Errno Message: %s\\n\", strerror(errno));\\"; in makecoremidi()
4481 z[lc++]=" epr(0,NULL,NULL, \"Soundcard error -- \" x );} while (0)"; in makecoremidi()
4482 z[lc++]=""; in makecoremidi()
4483 z[lc++]="/*******************/"; in makecoremidi()
4484 z[lc++]="/* forward externs */"; in makecoremidi()
4485 z[lc++]="/*******************/"; in makecoremidi()
4486 z[lc++]=""; in makecoremidi()
4487 z[lc++]="extern void csysi_read_proc(const MIDIPacketList * pktlist,"; in makecoremidi()
4488 z[lc++]=" void * readProcRefCon, "; in makecoremidi()
4489 z[lc++]=" void * srcConnRefCon);"; in makecoremidi()
4490 z[lc++]=""; in makecoremidi()
4491 z[lc++]="extern void csysi_notify_proc(const MIDINotification * message,"; in makecoremidi()
4492 z[lc++]=" void * refcon);"; in makecoremidi()
4493 z[lc++]=""; in makecoremidi()
4494 z[lc++]="extern int csysi_bugrecovery(MIDIPacket * p, unsigned char * mdata,"; in makecoremidi()
4495 z[lc++]=" int * idx, int len);"; in makecoremidi()
4496 z[lc++]=""; in makecoremidi()
4497 z[lc++]="extern int csysi_packet_arblength(MIDIPacket * p, unsigned char * mdata,"; in makecoremidi()
4498 z[lc++]=" int * idx, int * len, unsigned char ext);"; in makecoremidi()
4499 z[lc++]=""; in makecoremidi()
4500 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makecoremidi()
4501 z[lc++]="/* high-level functions: called by sfront engine */"; in makecoremidi()
4502 z[lc++]="/*______________________________________________________________*/"; in makecoremidi()
4503 z[lc++]=""; in makecoremidi()
4504 z[lc++]="/****************************************************************/"; in makecoremidi()
4505 z[lc++]="/* initialization routine for control */"; in makecoremidi()
4506 z[lc++]="/****************************************************************/"; in makecoremidi()
4507 z[lc++]=""; in makecoremidi()
4508 z[lc++]="int csys_setup(void)"; in makecoremidi()
4509 z[lc++]=" "; in makecoremidi()
4510 z[lc++]="{"; in makecoremidi()
4511 z[lc++]=" int connected, numsrc, flags, i, numvsrc;"; in makecoremidi()
4512 z[lc++]=" MIDIEndpointRef src;"; in makecoremidi()
4513 z[lc++]=" MIDIEntityRef ent;"; in makecoremidi()
4514 z[lc++]=" char name[256];"; in makecoremidi()
4515 z[lc++]=" CFStringRef cf_name;"; in makecoremidi()
4516 z[lc++]=""; in makecoremidi()
4517 z[lc++]=" /********************************/"; in makecoremidi()
4518 z[lc++]=" /* create input client and port */"; in makecoremidi()
4519 z[lc++]=" /********************************/"; in makecoremidi()
4520 z[lc++]=""; in makecoremidi()
4521 z[lc++]=" if (MIDIClientCreate(CFSTR(\"sfront_inclient\"), NULL, "; in makecoremidi()
4522 z[lc++]=" (void *) NULL, &csysi_inclient))"; in makecoremidi()
4523 z[lc++]=" CSYSI_ERROR_RETURN(\"Could not create CoreMIDI client\");"; in makecoremidi()
4524 z[lc++]=""; in makecoremidi()
4525 z[lc++]=" if (MIDIInputPortCreate(csysi_inclient, CFSTR(\"sfront_inport\"),"; in makecoremidi()
4526 z[lc++]=" csysi_read_proc, (void *) NULL, "; in makecoremidi()
4527 z[lc++]=" &csysi_inport))"; in makecoremidi()
4528 z[lc++]=" CSYSI_ERROR_RETURN(\"Could not create CoreMIDI inport\");"; in makecoremidi()
4529 z[lc++]=""; in makecoremidi()
4530 z[lc++]=" /********************************************************/"; in makecoremidi()
4531 z[lc++]=" /* open pipes, since data may start flowing immediately */"; in makecoremidi()
4532 z[lc++]=" /********************************************************/"; in makecoremidi()
4533 z[lc++]=""; in makecoremidi()
4534 z[lc++]=" if (socketpair(AF_UNIX, SOCK_DGRAM, 0, csysi_readproc_pipepair))"; in makecoremidi()
4535 z[lc++]=" CSYSI_ERROR_RETURN(\"Cannot open readproc pipe\");"; in makecoremidi()
4536 z[lc++]=""; in makecoremidi()
4537 z[lc++]=" if ((flags = fcntl(csysi_readproc_pipepair[0], F_GETFL, 0)) == -1)"; in makecoremidi()
4538 z[lc++]=" CSYSI_ERROR_RETURN(\"Unknown flags for read end of readproc pipe\");"; in makecoremidi()
4539 z[lc++]=""; in makecoremidi()
4540 z[lc++]=" if (fcntl(csysi_readproc_pipepair[0], F_SETFL, flags | O_NONBLOCK) == -1) "; in makecoremidi()
4541 z[lc++]=" CSYSI_ERROR_RETURN(\"Cannot O_NONBLOCK read end of readproc pipe\");"; in makecoremidi()
4542 z[lc++]=""; in makecoremidi()
4543 z[lc++]=" /********************************************************/"; in makecoremidi()
4544 z[lc++]=" /* for now, connect only one source, exit if no sources */"; in makecoremidi()
4545 z[lc++]=" /********************************************************/"; in makecoremidi()
4546 z[lc++]=" "; in makecoremidi()
4547 z[lc++]=" for (i = 0; i < CSYSI_MAXPORTS; i++)"; in makecoremidi()
4548 z[lc++]=" csysi_ports[i].ext = i;"; in makecoremidi()
4549 z[lc++]=""; in makecoremidi()
4550 z[lc++]=" numvsrc = connected = 0;"; in makecoremidi()
4551 z[lc++]=" numsrc = (int) MIDIGetNumberOfSources();"; in makecoremidi()
4552 z[lc++]=" "; in makecoremidi()
4553 z[lc++]=" for (i = 0; i < numsrc; i++)"; in makecoremidi()
4554 z[lc++]=" if (src = MIDIGetSource((ItemCount) i))"; in makecoremidi()
4555 z[lc++]=" {"; in makecoremidi()
4556 z[lc++]=" if (MIDIEndpointGetEntity(src, &ent) || (ent == NULL))"; in makecoremidi()
4557 z[lc++]=" {"; in makecoremidi()
4558 z[lc++]=" numvsrc++;"; in makecoremidi()
4559 z[lc++]=" continue;"; in makecoremidi()
4560 z[lc++]=" }"; in makecoremidi()
4561 z[lc++]=""; in makecoremidi()
4562 z[lc++]=" if (MIDIPortConnectSource(csysi_inport, src,"; in makecoremidi()
4563 z[lc++]=" &(csysi_ports[connected].ext)))"; in makecoremidi()
4564 z[lc++]=" continue;"; in makecoremidi()
4565 z[lc++]=""; in makecoremidi()
4566 z[lc++]=" csysi_ports[connected].valid = 1;"; in makecoremidi()
4567 z[lc++]=" csysi_ports[connected].src = src;"; in makecoremidi()
4568 z[lc++]=" connected++;"; in makecoremidi()
4569 z[lc++]=""; in makecoremidi()
4570 z[lc++]=" if ((connected == CSYSI_MAXPORTS) && (i + 1 != numsrc))"; in makecoremidi()
4571 z[lc++]=" {"; in makecoremidi()
4572 z[lc++]=" fprintf(stderr, "; in makecoremidi()
4573 z[lc++]=" \"\\nWarning: -cin coremidi configured for %i ports max,\\n\", "; in makecoremidi()
4574 z[lc++]=" CSYSI_MAXPORTS);"; in makecoremidi()
4575 z[lc++]=" fprintf(stderr, "; in makecoremidi()
4576 z[lc++]=" \" skipping the last %i MIDI port(s) in your setup.\\n\", "; in makecoremidi()
4577 z[lc++]=" numsrc - i - 1);"; in makecoremidi()
4578 z[lc++]=" break;"; in makecoremidi()
4579 z[lc++]=" }"; in makecoremidi()
4580 z[lc++]=" }"; in makecoremidi()
4581 z[lc++]=""; in makecoremidi()
4582 z[lc++]=" fprintf(stderr, \"\\nCoreMIDI setup info:\\n\");"; in makecoremidi()
4583 z[lc++]=""; in makecoremidi()
4584 z[lc++]=" if (!connected)"; in makecoremidi()
4585 z[lc++]=" {"; in makecoremidi()
4586 z[lc++]=" fprintf(stderr, \" No CoreMIDI sources to connect with, exiting ...\\n\");"; in makecoremidi()
4587 z[lc++]=" if (numvsrc)"; in makecoremidi()
4588 z[lc++]=" fprintf(stderr, \" (Sfront doesn't support virtual sources yet.)\\n\");"; in makecoremidi()
4589 z[lc++]=" return CSYS_ERROR;"; in makecoremidi()
4590 z[lc++]=" }"; in makecoremidi()
4591 z[lc++]=""; in makecoremidi()
4592 z[lc++]=" /*******************************/"; in makecoremidi()
4593 z[lc++]=" /* print out source identities */"; in makecoremidi()
4594 z[lc++]=" /*******************************/"; in makecoremidi()
4595 z[lc++]=""; in makecoremidi()
4596 z[lc++]=" for (i = 0; i < connected; i++)"; in makecoremidi()
4597 z[lc++]=" {"; in makecoremidi()
4598 z[lc++]=" fprintf(stderr, \" SAOL MIDI channels %i-%i connect to \","; in makecoremidi()
4599 z[lc++]=" 16*csysi_ports[i].ext, 16*(csysi_ports[i].ext + 1) - 1);"; in makecoremidi()
4600 z[lc++]=""; in makecoremidi()
4601 z[lc++]=" src = csysi_ports[i].src;"; in makecoremidi()
4602 z[lc++]=" "; in makecoremidi()
4603 z[lc++]=" if (MIDIObjectGetStringProperty(src, kMIDIPropertyName, &cf_name))"; in makecoremidi()
4604 z[lc++]=" {"; in makecoremidi()
4605 z[lc++]=" fprintf(stderr, \"(unnamed source).\\n\");"; in makecoremidi()
4606 z[lc++]=" continue;"; in makecoremidi()
4607 z[lc++]=" }"; in makecoremidi()
4608 z[lc++]=""; in makecoremidi()
4609 z[lc++]=" if (!CFStringGetCString(cf_name, name, 256, CFStringGetSystemEncoding()))"; in makecoremidi()
4610 z[lc++]=" {"; in makecoremidi()
4611 z[lc++]=" fprintf(stderr, \"(unnamed source).\\n\");"; in makecoremidi()
4612 z[lc++]=" CFRelease(cf_name);"; in makecoremidi()
4613 z[lc++]=" continue;"; in makecoremidi()
4614 z[lc++]=" }"; in makecoremidi()
4615 z[lc++]=""; in makecoremidi()
4616 z[lc++]=" CFRelease(cf_name);"; in makecoremidi()
4617 z[lc++]=" fprintf(stderr, \"%s.\\n\", name);"; in makecoremidi()
4618 z[lc++]=" }"; in makecoremidi()
4619 z[lc++]=""; in makecoremidi()
4620 z[lc++]=" if (numvsrc)"; in makecoremidi()
4621 z[lc++]=" fprintf(stderr, "; in makecoremidi()
4622 z[lc++]=" \" (Virtual sources also found; sfront doesn't support them yet.)\\n\");"; in makecoremidi()
4623 z[lc++]=""; in makecoremidi()
4624 z[lc++]=" fprintf(stderr, \"\\nMIDI Preset Numbers \");"; in makecoremidi()
4625 z[lc++]=""; in makecoremidi()
4626 z[lc++]=" i = 0;"; in makecoremidi()
4627 z[lc++]=" while (i < csys_sfront_argc)"; in makecoremidi()
4628 z[lc++]=" {"; in makecoremidi()
4629 z[lc++]=" if (!(strcmp(csys_sfront_argv[i],\"-bitc\") && "; in makecoremidi()
4630 z[lc++]=" strcmp(csys_sfront_argv[i],\"-bit\") &&"; in makecoremidi()
4631 z[lc++]=" strcmp(csys_sfront_argv[i],\"-orc\")))"; in makecoremidi()
4632 z[lc++]=" {"; in makecoremidi()
4633 z[lc++]=" i++;"; in makecoremidi()
4634 z[lc++]=" fprintf(stderr, \"for %s \", csys_sfront_argv[i]);"; in makecoremidi()
4635 z[lc++]=" break;"; in makecoremidi()
4636 z[lc++]=" }"; in makecoremidi()
4637 z[lc++]=" i++;"; in makecoremidi()
4638 z[lc++]=" }"; in makecoremidi()
4639 z[lc++]=""; in makecoremidi()
4640 z[lc++]=" fprintf(stderr, \"(use MIDI controller to select):\\n\");"; in makecoremidi()
4641 z[lc++]=""; in makecoremidi()
4642 z[lc++]=" for (i = 0; i < CSYS_PRESETNUM; i++)"; in makecoremidi()
4643 z[lc++]=" {"; in makecoremidi()
4644 z[lc++]=" fprintf(stderr, \"%3i. %s\", "; in makecoremidi()
4645 z[lc++]=" csys_presets[i].preset,"; in makecoremidi()
4646 z[lc++]=" csys_instr[csys_presets[i].index].name);"; in makecoremidi()
4647 z[lc++]=" if ((i&1))"; in makecoremidi()
4648 z[lc++]=" fprintf(stderr, \"\\n\");"; in makecoremidi()
4649 z[lc++]=" else"; in makecoremidi()
4650 z[lc++]=" {"; in makecoremidi()
4651 z[lc++]=" fprintf(stderr, \"\\t\\t\");"; in makecoremidi()
4652 z[lc++]=" if (i == (CSYS_PRESETNUM-1))"; in makecoremidi()
4653 z[lc++]=" fprintf(stderr, \"\\n\");"; in makecoremidi()
4654 z[lc++]=" }"; in makecoremidi()
4655 z[lc++]=" }"; in makecoremidi()
4656 z[lc++]=""; in makecoremidi()
4657 z[lc++]=" return CSYS_DONE;"; in makecoremidi()
4658 z[lc++]="}"; in makecoremidi()
4659 z[lc++]=""; in makecoremidi()
4660 z[lc++]="/****************************************************************/"; in makecoremidi()
4661 z[lc++]="/* polling routine for new data */"; in makecoremidi()
4662 z[lc++]="/****************************************************************/"; in makecoremidi()
4663 z[lc++]=""; in makecoremidi()
4664 z[lc++]="int csys_newdata(void)"; in makecoremidi()
4665 z[lc++]=" "; in makecoremidi()
4666 z[lc++]="{"; in makecoremidi()
4667 z[lc++]=" int len, retry;"; in makecoremidi()
4668 z[lc++]=""; in makecoremidi()
4669 z[lc++]=" if (((len = read(csysi_readproc_pipepair[0], csysi_buffer, "; in makecoremidi()
4670 z[lc++]=" CSYSI_SENDSIZE)) < 0) && (errno == EAGAIN))"; in makecoremidi()
4671 z[lc++]=" return CSYS_NONE; /* fast path */"; in makecoremidi()
4672 z[lc++]=""; in makecoremidi()
4673 z[lc++]=" if (csysi_graceful_exit == CSYSI_GE_EXITED)"; in makecoremidi()
4674 z[lc++]=" return CSYS_NONE;"; in makecoremidi()
4675 z[lc++]=""; in makecoremidi()
4676 z[lc++]=" csysi_len = 0;"; in makecoremidi()
4677 z[lc++]=" retry = 0;"; in makecoremidi()
4678 z[lc++]=""; in makecoremidi()
4679 z[lc++]=" do "; in makecoremidi()
4680 z[lc++]=" {"; in makecoremidi()
4681 z[lc++]=" if (len > 0)"; in makecoremidi()
4682 z[lc++]=" {"; in makecoremidi()
4683 z[lc++]=" if ((csysi_len += len) > (CSYSI_BUFFSIZE - CSYSI_SENDSIZE))"; in makecoremidi()
4684 z[lc++]=" break;"; in makecoremidi()
4685 z[lc++]=" }"; in makecoremidi()
4686 z[lc++]=" else"; in makecoremidi()
4687 z[lc++]=" {"; in makecoremidi()
4688 z[lc++]=" if (len == 0)"; in makecoremidi()
4689 z[lc++]=" {"; in makecoremidi()
4690 z[lc++]=" fprintf(stderr, \"-cin coremidi: writev() error.\\n\");"; in makecoremidi()
4691 z[lc++]=" csysi_graceful_exit = CSYSI_GE_DOEXIT;"; in makecoremidi()
4692 z[lc++]=" break;"; in makecoremidi()
4693 z[lc++]=" }"; in makecoremidi()
4694 z[lc++]=" else"; in makecoremidi()
4695 z[lc++]=" if ((errno != EINTR) || (++retry > CSYSI_RETRY_MAX)) "; in makecoremidi()
4696 z[lc++]=" {"; in makecoremidi()
4697 z[lc++]=" fprintf(stderr, \"-cin coremidi: pipe read() error.\\n\");"; in makecoremidi()
4698 z[lc++]=" csysi_graceful_exit = CSYSI_GE_DOEXIT;"; in makecoremidi()
4699 z[lc++]=" break;"; in makecoremidi()
4700 z[lc++]=" }"; in makecoremidi()
4701 z[lc++]=" }"; in makecoremidi()
4702 z[lc++]=""; in makecoremidi()
4703 z[lc++]=" len = read(csysi_readproc_pipepair[0], &(csysi_buffer[csysi_len]),"; in makecoremidi()
4704 z[lc++]=" CSYSI_SENDSIZE);"; in makecoremidi()
4705 z[lc++]=" } "; in makecoremidi()
4706 z[lc++]=" while ((len >= 0) || (errno != EAGAIN));"; in makecoremidi()
4707 z[lc++]=""; in makecoremidi()
4708 z[lc++]=" csysi_cnt = 0;"; in makecoremidi()
4709 z[lc++]=" return CSYS_MIDIEVENTS;"; in makecoremidi()
4710 z[lc++]="}"; in makecoremidi()
4711 z[lc++]=""; in makecoremidi()
4712 z[lc++]="/****************************************************************/"; in makecoremidi()
4713 z[lc++]="/* processes a MIDI event */"; in makecoremidi()
4714 z[lc++]="/****************************************************************/"; in makecoremidi()
4715 z[lc++]=""; in makecoremidi()
4716 z[lc++]="int csys_midievent(unsigned char * cmd, unsigned char * ndata, "; in makecoremidi()
4717 z[lc++]=" unsigned char * vdata, unsigned short * extchan,"; in makecoremidi()
4718 z[lc++]=" float * fval)"; in makecoremidi()
4719 z[lc++]=""; in makecoremidi()
4720 z[lc++]="{"; in makecoremidi()
4721 z[lc++]=" if (csysi_graceful_exit == CSYSI_GE_DOEXIT)"; in makecoremidi()
4722 z[lc++]=" {"; in makecoremidi()
4723 z[lc++]=" csysi_graceful_exit = CSYSI_GE_EXITED;"; in makecoremidi()
4724 z[lc++]=" *cmd = CSYS_MIDI_ENDTIME;"; in makecoremidi()
4725 z[lc++]=" *fval = EV(scorebeats);"; in makecoremidi()
4726 z[lc++]=" return CSYS_NONE;"; in makecoremidi()
4727 z[lc++]=" }"; in makecoremidi()
4728 z[lc++]=""; in makecoremidi()
4729 z[lc++]=" while (csysi_buffer[csysi_cnt] == CSYSI_PREAMBLE_FLAGS_MARKER)"; in makecoremidi()
4730 z[lc++]=" {"; in makecoremidi()
4731 z[lc++]=" /* later handle semantics of the timestamp bits */"; in makecoremidi()
4732 z[lc++]=""; in makecoremidi()
4733 z[lc++]=" csysi_currext = "; in makecoremidi()
4734 z[lc++]=" (csysi_buffer[++csysi_cnt] & CSYSI_PREAMBLE_FLAGS_EXT) << 4;"; in makecoremidi()
4735 z[lc++]=""; in makecoremidi()
4736 z[lc++]=" /* skip over the rest of the preamble */"; in makecoremidi()
4737 z[lc++]=""; in makecoremidi()
4738 z[lc++]=" if ((csysi_buffer[csysi_cnt] & CSYSI_PREAMBLE_FLAGS_T) == 0)"; in makecoremidi()
4739 z[lc++]=" csysi_cnt++; "; in makecoremidi()
4740 z[lc++]=" else "; in makecoremidi()
4741 z[lc++]=" csysi_cnt += 5;"; in makecoremidi()
4742 z[lc++]=""; in makecoremidi()
4743 z[lc++]=" if (csysi_cnt == csysi_len)"; in makecoremidi()
4744 z[lc++]=" {"; in makecoremidi()
4745 z[lc++]=" *cmd = CSYS_MIDI_NOOP; "; in makecoremidi()
4746 z[lc++]=" return CSYS_NONE;"; in makecoremidi()
4747 z[lc++]=" }"; in makecoremidi()
4748 z[lc++]=" }"; in makecoremidi()
4749 z[lc++]=""; in makecoremidi()
4750 z[lc++]=" /* assumes:"; in makecoremidi()
4751 z[lc++]=" * 1 - integral number of commands"; in makecoremidi()
4752 z[lc++]=" * 2 - F0, F7, \"specialized\""; in makecoremidi()
4753 z[lc++]=" * 3 - F4/F5 has 0, 1, or 2 data bytes"; in makecoremidi()
4754 z[lc++]=" * 4 - input stream is perfect MIDI + \"specials\""; in makecoremidi()
4755 z[lc++]=" */"; in makecoremidi()
4756 z[lc++]=""; in makecoremidi()
4757 z[lc++]=" if (csysi_buffer[csysi_cnt] < (unsigned char)(CSYS_MIDI_SYSTEM))"; in makecoremidi()
4758 z[lc++]=" {"; in makecoremidi()
4759 z[lc++]=" if ((CSYSI_SYSTEM_GATE == CSYSI_PASS_SYSTEM_COMMANDS) &&"; in makecoremidi()
4760 z[lc++]=" (csysi_buffer[csysi_cnt] < (unsigned char) (CSYS_MIDI_NOTEOFF)))"; in makecoremidi()
4761 z[lc++]=" {"; in makecoremidi()
4762 z[lc++]=" *cmd = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4763 z[lc++]=" *extchan = csysi_currext;"; in makecoremidi()
4764 z[lc++]=" *ndata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4765 z[lc++]=" "; in makecoremidi()
4766 z[lc++]=" if (*cmd != CSYS_MIDI_GMRESET)"; in makecoremidi()
4767 z[lc++]=" *vdata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4768 z[lc++]=" }"; in makecoremidi()
4769 z[lc++]=" else"; in makecoremidi()
4770 z[lc++]=" {"; in makecoremidi()
4771 z[lc++]=" *cmd = 0xF0u & csysi_buffer[csysi_cnt];"; in makecoremidi()
4772 z[lc++]=" *extchan = (0x0Fu & csysi_buffer[csysi_cnt++]) + csysi_currext;"; in makecoremidi()
4773 z[lc++]=" *ndata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4774 z[lc++]=" "; in makecoremidi()
4775 z[lc++]=" if ((*cmd != CSYS_MIDI_PROGRAM) && (*cmd != CSYS_MIDI_CTOUCH))"; in makecoremidi()
4776 z[lc++]=" *vdata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4777 z[lc++]=" }"; in makecoremidi()
4778 z[lc++]=" }"; in makecoremidi()
4779 z[lc++]=" else"; in makecoremidi()
4780 z[lc++]=" {"; in makecoremidi()
4781 z[lc++]=" *cmd = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4782 z[lc++]=" *extchan = csysi_currext;"; in makecoremidi()
4783 z[lc++]=""; in makecoremidi()
4784 z[lc++]=" if (*cmd < CSYS_MIDI_SYSTEM_SYSEX_END)"; in makecoremidi()
4785 z[lc++]=" {"; in makecoremidi()
4786 z[lc++]=" if ((*cmd == CSYS_MIDI_SYSTEM_QFRAME) || "; in makecoremidi()
4787 z[lc++]=" (*cmd == CSYS_MIDI_SYSTEM_SONG_SELECT) ||"; in makecoremidi()
4788 z[lc++]=" (*cmd == CSYS_MIDI_SYSTEM_SONG_PP))"; in makecoremidi()
4789 z[lc++]=" *ndata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4790 z[lc++]=""; in makecoremidi()
4791 z[lc++]=" if (*cmd == CSYS_MIDI_SYSTEM_SONG_PP)"; in makecoremidi()
4792 z[lc++]=" *vdata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4793 z[lc++]=""; in makecoremidi()
4794 z[lc++]=" if ((*cmd == CSYS_MIDI_SYSTEM_UNUSED1) || "; in makecoremidi()
4795 z[lc++]=" (*cmd == CSYS_MIDI_SYSTEM_UNUSED2))"; in makecoremidi()
4796 z[lc++]=" {"; in makecoremidi()
4797 z[lc++]=" if ((csysi_cnt < csysi_len) && "; in makecoremidi()
4798 z[lc++]=" !(csysi_buffer[csysi_cnt] & 0x80u))"; in makecoremidi()
4799 z[lc++]=" *ndata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4800 z[lc++]=" else"; in makecoremidi()
4801 z[lc++]=" *ndata = CSYS_MIDI_SYSTEM_SYSEX_END;"; in makecoremidi()
4802 z[lc++]=""; in makecoremidi()
4803 z[lc++]=" if ((csysi_cnt < csysi_len) && "; in makecoremidi()
4804 z[lc++]=" !(csysi_buffer[csysi_cnt] & 0x80u))"; in makecoremidi()
4805 z[lc++]=" *vdata = csysi_buffer[csysi_cnt++];"; in makecoremidi()
4806 z[lc++]=" else"; in makecoremidi()
4807 z[lc++]=" *vdata = CSYS_MIDI_SYSTEM_SYSEX_END;"; in makecoremidi()
4808 z[lc++]=" }"; in makecoremidi()
4809 z[lc++]=" }"; in makecoremidi()
4810 z[lc++]=" }"; in makecoremidi()
4811 z[lc++]=""; in makecoremidi()
4812 z[lc++]=" if (csysi_cnt == csysi_len)"; in makecoremidi()
4813 z[lc++]=" return CSYS_NONE;"; in makecoremidi()
4814 z[lc++]=" else"; in makecoremidi()
4815 z[lc++]=" return CSYS_MIDIEVENTS;"; in makecoremidi()
4816 z[lc++]="}"; in makecoremidi()
4817 z[lc++]=""; in makecoremidi()
4818 z[lc++]="/****************************************************************/"; in makecoremidi()
4819 z[lc++]="/* closing routine for control */"; in makecoremidi()
4820 z[lc++]="/****************************************************************/"; in makecoremidi()
4821 z[lc++]=""; in makecoremidi()
4822 z[lc++]="void csys_shutdown(void)"; in makecoremidi()
4823 z[lc++]=" "; in makecoremidi()
4824 z[lc++]="{"; in makecoremidi()
4825 z[lc++]=" close(csysi_readproc_pipepair[0]);"; in makecoremidi()
4826 z[lc++]=" close(csysi_readproc_pipepair[1]);"; in makecoremidi()
4827 z[lc++]=" return;"; in makecoremidi()
4828 z[lc++]="}"; in makecoremidi()
4829 z[lc++]=""; in makecoremidi()
4830 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makecoremidi()
4831 z[lc++]="/* callback functions: called by coremidi directly */"; in makecoremidi()
4832 z[lc++]="/*______________________________________________________________*/"; in makecoremidi()
4833 z[lc++]=""; in makecoremidi()
4834 z[lc++]="extern int csysi_packet_shorten(MIDIPacket * p, "; in makecoremidi()
4835 z[lc++]=" unsigned char * mdata,"; in makecoremidi()
4836 z[lc++]=" int * idx, unsigned char ext); "; in makecoremidi()
4837 z[lc++]=""; in makecoremidi()
4838 z[lc++]="/****************************************************************/"; in makecoremidi()
4839 z[lc++]="/* callback for MIDI input */"; in makecoremidi()
4840 z[lc++]="/****************************************************************/"; in makecoremidi()
4841 z[lc++]=""; in makecoremidi()
4842 z[lc++]="void csysi_read_proc(const MIDIPacketList * pktlist,"; in makecoremidi()
4843 z[lc++]=" void * readProcRefCon, void * srcConnRefCon)"; in makecoremidi()
4844 z[lc++]=""; in makecoremidi()
4845 z[lc++]="{"; in makecoremidi()
4846 z[lc++]=" unsigned char preamble[CSYSI_PREAMBLE_NOWSIZE];"; in makecoremidi()
4847 z[lc++]=" unsigned char mdata[CSYSI_SENDSIZE];"; in makecoremidi()
4848 z[lc++]=" struct iovec vector[2];"; in makecoremidi()
4849 z[lc++]=" MIDIPacket * p;"; in makecoremidi()
4850 z[lc++]=" int num, idx, retry;"; in makecoremidi()
4851 z[lc++]=" unsigned char ext;"; in makecoremidi()
4852 z[lc++]=""; in makecoremidi()
4853 z[lc++]=" /* initialize preamble */"; in makecoremidi()
4854 z[lc++]=""; in makecoremidi()
4855 z[lc++]=" preamble[CSYSI_PREAMBLE_POS_MARKER] = CSYSI_PREAMBLE_FLAGS_MARKER;"; in makecoremidi()
4856 z[lc++]=" preamble[CSYSI_PREAMBLE_POS_CONTROL] = ext = "; in makecoremidi()
4857 z[lc++]=" CSYSI_PREAMBLE_FLAGS_EXT & ((unsigned char) *((int *) srcConnRefCon));"; in makecoremidi()
4858 z[lc++]=""; in makecoremidi()
4859 z[lc++]=" /* initialize write vector -- update for timestamp support */"; in makecoremidi()
4860 z[lc++]=""; in makecoremidi()
4861 z[lc++]=" vector[0].iov_base = (char *) preamble;"; in makecoremidi()
4862 z[lc++]=" vector[0].iov_len = (size_t) CSYSI_PREAMBLE_NOWSIZE;"; in makecoremidi()
4863 z[lc++]=" vector[1].iov_base = (char *) mdata;"; in makecoremidi()
4864 z[lc++]=""; in makecoremidi()
4865 z[lc++]=" /* loop through packets, send DGRAMs */"; in makecoremidi()
4866 z[lc++]=""; in makecoremidi()
4867 z[lc++]=" p = (MIDIPacket *) &(pktlist->packet[0]);"; in makecoremidi()
4868 z[lc++]=" num = pktlist->numPackets;"; in makecoremidi()
4869 z[lc++]=""; in makecoremidi()
4870 z[lc++]=" while (num--)"; in makecoremidi()
4871 z[lc++]=" {"; in makecoremidi()
4872 z[lc++]=" retry = idx = 0;"; in makecoremidi()
4873 z[lc++]=""; in makecoremidi()
4874 z[lc++]=" do {"; in makecoremidi()
4875 z[lc++]=" if ((vector[1].iov_len = csysi_packet_shorten(p, mdata, &idx, ext)))"; in makecoremidi()
4876 z[lc++]=" while (writev(csysi_readproc_pipepair[1], vector, 2) < 0)"; in makecoremidi()
4877 z[lc++]=" if ((errno != EINTR) || (++retry >= CSYSI_RETRY_MAX))"; in makecoremidi()
4878 z[lc++]=" {"; in makecoremidi()
4879 z[lc++]=" close(csysi_readproc_pipepair[0]);"; in makecoremidi()
4880 z[lc++]=" close(csysi_readproc_pipepair[1]);"; in makecoremidi()
4881 z[lc++]=" return;"; in makecoremidi()
4882 z[lc++]=" }"; in makecoremidi()
4883 z[lc++]=" } while (idx < p->length);"; in makecoremidi()
4884 z[lc++]=""; in makecoremidi()
4885 z[lc++]=" p = MIDIPacketNext(p);"; in makecoremidi()
4886 z[lc++]=" }"; in makecoremidi()
4887 z[lc++]="}"; in makecoremidi()
4888 z[lc++]=""; in makecoremidi()
4889 z[lc++]="/****************************************************************/"; in makecoremidi()
4890 z[lc++]="/* callback for MIDI input */"; in makecoremidi()
4891 z[lc++]="/****************************************************************/"; in makecoremidi()
4892 z[lc++]=""; in makecoremidi()
4893 z[lc++]="void csysi_notify_proc(const MIDINotification * message,"; in makecoremidi()
4894 z[lc++]=" void * refcon)"; in makecoremidi()
4895 z[lc++]=""; in makecoremidi()
4896 z[lc++]="{"; in makecoremidi()
4897 z[lc++]=" /* not currently registered with MIDIClientCreate() */"; in makecoremidi()
4898 z[lc++]="}"; in makecoremidi()
4899 z[lc++]=""; in makecoremidi()
4900 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makecoremidi()
4901 z[lc++]="/* mid-level functions: called by top-level driver functions */"; in makecoremidi()
4902 z[lc++]="/*______________________________________________________________*/"; in makecoremidi()
4903 z[lc++]=""; in makecoremidi()
4904 z[lc++]="/****************************************************************/"; in makecoremidi()
4905 z[lc++]="/* copy SA-safe commands into mdata */"; in makecoremidi()
4906 z[lc++]="/****************************************************************/"; in makecoremidi()
4907 z[lc++]=""; in makecoremidi()
4908 z[lc++]="int csysi_packet_shorten(MIDIPacket * p, unsigned char * mdata,"; in makecoremidi()
4909 z[lc++]=" int * idx, unsigned char ext)"; in makecoremidi()
4910 z[lc++]="{"; in makecoremidi()
4911 z[lc++]=" int len = 0;"; in makecoremidi()
4912 z[lc++]=""; in makecoremidi()
4913 z[lc++]=" do {"; in makecoremidi()
4914 z[lc++]=""; in makecoremidi()
4915 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_PASS_SYSTEM_COMMANDS)"; in makecoremidi()
4916 z[lc++]=" if (csysi_ports[ext].sysex_size && (p->data[*idx] & 0xF0u))"; in makecoremidi()
4917 z[lc++]=" if (csysi_packet_arblength(p, mdata, idx, &len, ext) || (*idx == p->length))"; in makecoremidi()
4918 z[lc++]=" return len;"; in makecoremidi()
4919 z[lc++]=""; in makecoremidi()
4920 z[lc++]=" switch (p->data[*idx] & 0xF0u) {"; in makecoremidi()
4921 z[lc++]=" case CSYS_MIDI_NOTEOFF:"; in makecoremidi()
4922 z[lc++]=" case CSYS_MIDI_NOTEON:"; in makecoremidi()
4923 z[lc++]=" case CSYS_MIDI_PTOUCH:"; in makecoremidi()
4924 z[lc++]=" case CSYS_MIDI_WHEEL:"; in makecoremidi()
4925 z[lc++]=" case CSYS_MIDI_CC:"; in makecoremidi()
4926 z[lc++]=" if ((p->length >= (*idx + 3)) && (p->data[*idx + 1] < 128)"; in makecoremidi()
4927 z[lc++]=" && (p->data[*idx + 2] < 128))"; in makecoremidi()
4928 z[lc++]=" {"; in makecoremidi()
4929 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 3);"; in makecoremidi()
4930 z[lc++]=" if (p->length == (*idx += 3))"; in makecoremidi()
4931 z[lc++]=" return len + 3;"; in makecoremidi()
4932 z[lc++]=" if ((len += 3) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
4933 z[lc++]=" return len;"; in makecoremidi()
4934 z[lc++]=" }"; in makecoremidi()
4935 z[lc++]=" else"; in makecoremidi()
4936 z[lc++]=" return csysi_bugrecovery(p, mdata, idx, len);"; in makecoremidi()
4937 z[lc++]=" continue;"; in makecoremidi()
4938 z[lc++]=" case CSYS_MIDI_PROGRAM:"; in makecoremidi()
4939 z[lc++]=" case CSYS_MIDI_CTOUCH:"; in makecoremidi()
4940 z[lc++]=" if ((p->length >= (*idx + 2)) && (p->data[*idx + 1] < 128))"; in makecoremidi()
4941 z[lc++]=" {"; in makecoremidi()
4942 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 2);"; in makecoremidi()
4943 z[lc++]=" if (p->length == (*idx += 2))"; in makecoremidi()
4944 z[lc++]=" return len + 2;"; in makecoremidi()
4945 z[lc++]=" if ((len += 2) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
4946 z[lc++]=" return len; "; in makecoremidi()
4947 z[lc++]=" }"; in makecoremidi()
4948 z[lc++]=" else"; in makecoremidi()
4949 z[lc++]=" return csysi_bugrecovery(p, mdata, idx, len);"; in makecoremidi()
4950 z[lc++]=" continue;"; in makecoremidi()
4951 z[lc++]=" case CSYS_MIDI_SYSTEM:"; in makecoremidi()
4952 z[lc++]=" switch (p->data[*idx]) {"; in makecoremidi()
4953 z[lc++]=" case CSYS_MIDI_SYSTEM_TICK: /* 1 octet */ "; in makecoremidi()
4954 z[lc++]=" case CSYS_MIDI_SYSTEM_TUNE_REQUEST: "; in makecoremidi()
4955 z[lc++]=" case CSYS_MIDI_SYSTEM_CLOCK:"; in makecoremidi()
4956 z[lc++]=" case CSYS_MIDI_SYSTEM_START:"; in makecoremidi()
4957 z[lc++]=" case CSYS_MIDI_SYSTEM_CONTINUE:"; in makecoremidi()
4958 z[lc++]=" case CSYS_MIDI_SYSTEM_STOP:"; in makecoremidi()
4959 z[lc++]=" case CSYS_MIDI_SYSTEM_UNUSED3:"; in makecoremidi()
4960 z[lc++]=" case CSYS_MIDI_SYSTEM_SENSE:"; in makecoremidi()
4961 z[lc++]=" case CSYS_MIDI_SYSTEM_RESET:"; in makecoremidi()
4962 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_BLOCK_SYSTEM_COMMANDS)"; in makecoremidi()
4963 z[lc++]=" {"; in makecoremidi()
4964 z[lc++]=" if (p->length == (*idx += 1))"; in makecoremidi()
4965 z[lc++]=" return len;"; in makecoremidi()
4966 z[lc++]=" }"; in makecoremidi()
4967 z[lc++]=" else"; in makecoremidi()
4968 z[lc++]=" {"; in makecoremidi()
4969 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 1);"; in makecoremidi()
4970 z[lc++]=" if (p->length == (*idx += 1))"; in makecoremidi()
4971 z[lc++]=" return len + 1;"; in makecoremidi()
4972 z[lc++]=" if ((len += 1) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
4973 z[lc++]=" return len;"; in makecoremidi()
4974 z[lc++]=" }"; in makecoremidi()
4975 z[lc++]=" continue;"; in makecoremidi()
4976 z[lc++]=" case CSYS_MIDI_SYSTEM_SYSEX_END: "; in makecoremidi()
4977 z[lc++]=" if (p->length == (*idx += 1))"; in makecoremidi()
4978 z[lc++]=" return len;"; in makecoremidi()
4979 z[lc++]=" continue;"; in makecoremidi()
4980 z[lc++]=" case CSYS_MIDI_SYSTEM_QFRAME: /* 2 octets */ "; in makecoremidi()
4981 z[lc++]=" case CSYS_MIDI_SYSTEM_SONG_SELECT:"; in makecoremidi()
4982 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_BLOCK_SYSTEM_COMMANDS)"; in makecoremidi()
4983 z[lc++]=" {"; in makecoremidi()
4984 z[lc++]=" if (p->length == (*idx += 2))"; in makecoremidi()
4985 z[lc++]=" return len; "; in makecoremidi()
4986 z[lc++]=" }"; in makecoremidi()
4987 z[lc++]=" else"; in makecoremidi()
4988 z[lc++]=" {"; in makecoremidi()
4989 z[lc++]=" if ((p->length >= (*idx + 2)) && (p->data[*idx + 1] < 128))"; in makecoremidi()
4990 z[lc++]=" {"; in makecoremidi()
4991 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 2);"; in makecoremidi()
4992 z[lc++]=" if (p->length == (*idx += 2))"; in makecoremidi()
4993 z[lc++]=" return len + 2;"; in makecoremidi()
4994 z[lc++]=" if ((len += 2) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
4995 z[lc++]=" return len; "; in makecoremidi()
4996 z[lc++]=" }"; in makecoremidi()
4997 z[lc++]=" else"; in makecoremidi()
4998 z[lc++]=" return csysi_bugrecovery(p, mdata, idx, len);"; in makecoremidi()
4999 z[lc++]=" }"; in makecoremidi()
5000 z[lc++]=" continue;"; in makecoremidi()
5001 z[lc++]=" case CSYS_MIDI_SYSTEM_SONG_PP: /* 3 octets */ "; in makecoremidi()
5002 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_BLOCK_SYSTEM_COMMANDS)"; in makecoremidi()
5003 z[lc++]=" {"; in makecoremidi()
5004 z[lc++]=" if (p->length == (*idx += 3))"; in makecoremidi()
5005 z[lc++]=" return len;"; in makecoremidi()
5006 z[lc++]=" }"; in makecoremidi()
5007 z[lc++]=" else"; in makecoremidi()
5008 z[lc++]=" {"; in makecoremidi()
5009 z[lc++]=" if ((p->length >= (*idx + 3)) && (p->data[*idx + 1] < 128)"; in makecoremidi()
5010 z[lc++]=" && (p->data[*idx + 2] < 128))"; in makecoremidi()
5011 z[lc++]=" {"; in makecoremidi()
5012 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 3);"; in makecoremidi()
5013 z[lc++]=" if (p->length == (*idx += 3))"; in makecoremidi()
5014 z[lc++]=" return len + 3;"; in makecoremidi()
5015 z[lc++]=" if ((len += 3) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
5016 z[lc++]=" return len;"; in makecoremidi()
5017 z[lc++]=" }"; in makecoremidi()
5018 z[lc++]=" else"; in makecoremidi()
5019 z[lc++]=" return csysi_bugrecovery(p, mdata, idx, len);"; in makecoremidi()
5020 z[lc++]=" }"; in makecoremidi()
5021 z[lc++]=" continue;"; in makecoremidi()
5022 z[lc++]=" case CSYS_MIDI_SYSTEM_UNUSED1: /* undefined Common commands */"; in makecoremidi()
5023 z[lc++]=" case CSYS_MIDI_SYSTEM_UNUSED2:"; in makecoremidi()
5024 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_PASS_SYSTEM_COMMANDS)"; in makecoremidi()
5025 z[lc++]=" {"; in makecoremidi()
5026 z[lc++]=" /* case 1: zero data octets */"; in makecoremidi()
5027 z[lc++]=" "; in makecoremidi()
5028 z[lc++]=" if ((((*idx) + 1) == p->length) || (p->data[(*idx) + 1] & 0x80u))"; in makecoremidi()
5029 z[lc++]=" {"; in makecoremidi()
5030 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 1);"; in makecoremidi()
5031 z[lc++]=" if (p->length == (*idx += 1))"; in makecoremidi()
5032 z[lc++]=" return len + 1;"; in makecoremidi()
5033 z[lc++]=" if ((len += 1) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
5034 z[lc++]=" return len;"; in makecoremidi()
5035 z[lc++]=" continue;"; in makecoremidi()
5036 z[lc++]=" }"; in makecoremidi()
5037 z[lc++]=""; in makecoremidi()
5038 z[lc++]=" /* case 2: one data octet */"; in makecoremidi()
5039 z[lc++]=" "; in makecoremidi()
5040 z[lc++]=" if ((((*idx) + 2) == p->length) || (p->data[(*idx) + 2] & 0x80u))"; in makecoremidi()
5041 z[lc++]=" {"; in makecoremidi()
5042 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 2);"; in makecoremidi()
5043 z[lc++]=" if (p->length == (*idx += 2))"; in makecoremidi()
5044 z[lc++]=" return len + 2;"; in makecoremidi()
5045 z[lc++]=" if ((len += 2) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
5046 z[lc++]=" return len;"; in makecoremidi()
5047 z[lc++]=" continue;"; in makecoremidi()
5048 z[lc++]=" }"; in makecoremidi()
5049 z[lc++]=""; in makecoremidi()
5050 z[lc++]=" /* case 3: two data octets */"; in makecoremidi()
5051 z[lc++]=" "; in makecoremidi()
5052 z[lc++]=" if ((((*idx) + 3) == p->length) || (p->data[(*idx) + 3] & 0x80u))"; in makecoremidi()
5053 z[lc++]=" {"; in makecoremidi()
5054 z[lc++]=" memcpy(&(mdata[len]), &(p->data[*idx]), 3);"; in makecoremidi()
5055 z[lc++]=" if (p->length == (*idx += 3))"; in makecoremidi()
5056 z[lc++]=" return len + 3;"; in makecoremidi()
5057 z[lc++]=" if ((len += 3) > (CSYSI_SENDSIZE - 3))"; in makecoremidi()
5058 z[lc++]=" return len;"; in makecoremidi()
5059 z[lc++]=" continue;"; in makecoremidi()
5060 z[lc++]=" }"; in makecoremidi()
5061 z[lc++]=" }"; in makecoremidi()
5062 z[lc++]=" *idx += 1;"; in makecoremidi()
5063 z[lc++]=" while ((*idx < p->length) && !(p->data[(*idx)] & 0x80u))"; in makecoremidi()
5064 z[lc++]=" (*idx)++;"; in makecoremidi()
5065 z[lc++]=" if (*idx == p->length)"; in makecoremidi()
5066 z[lc++]=" return len;"; in makecoremidi()
5067 z[lc++]=" continue;"; in makecoremidi()
5068 z[lc++]=" case CSYS_MIDI_SYSTEM_SYSEX_START: /* SysEx commands */"; in makecoremidi()
5069 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_BLOCK_SYSTEM_COMMANDS)"; in makecoremidi()
5070 z[lc++]=" {"; in makecoremidi()
5071 z[lc++]=" if (p->data[(*idx)] == CSYS_MIDI_SYSTEM_SYSEX_START)"; in makecoremidi()
5072 z[lc++]=" *idx += 1;"; in makecoremidi()
5073 z[lc++]=" while ((*idx < p->length) && !(p->data[(*idx)] & 0x80u))"; in makecoremidi()
5074 z[lc++]=" (*idx)++;"; in makecoremidi()
5075 z[lc++]=" if (p->data[(*idx)] == CSYS_MIDI_SYSTEM_SYSEX_END)"; in makecoremidi()
5076 z[lc++]=" (*idx)++;"; in makecoremidi()
5077 z[lc++]=" }"; in makecoremidi()
5078 z[lc++]=" else"; in makecoremidi()
5079 z[lc++]=" if (csysi_packet_arblength(p, mdata, idx, &len, ext))"; in makecoremidi()
5080 z[lc++]=" return len;"; in makecoremidi()
5081 z[lc++]=""; in makecoremidi()
5082 z[lc++]=" if (*idx == p->length)"; in makecoremidi()
5083 z[lc++]=" return len;"; in makecoremidi()
5084 z[lc++]=" continue;"; in makecoremidi()
5085 z[lc++]=" }"; in makecoremidi()
5086 z[lc++]=" *idx = p->length; /* should never run */"; in makecoremidi()
5087 z[lc++]=" return len;"; in makecoremidi()
5088 z[lc++]=" default: /* a sysex continuation */"; in makecoremidi()
5089 z[lc++]=" if (CSYSI_SYSTEM_GATE == CSYSI_BLOCK_SYSTEM_COMMANDS)"; in makecoremidi()
5090 z[lc++]=" {"; in makecoremidi()
5091 z[lc++]=" while ((*idx < p->length) && !(p->data[(*idx)] & 0x80u))"; in makecoremidi()
5092 z[lc++]=" (*idx)++;"; in makecoremidi()
5093 z[lc++]=" if (p->data[(*idx)] == CSYS_MIDI_SYSTEM_SYSEX_END)"; in makecoremidi()
5094 z[lc++]=" (*idx)++;"; in makecoremidi()
5095 z[lc++]=" if (*idx == p->length)"; in makecoremidi()
5096 z[lc++]=" return len;"; in makecoremidi()
5097 z[lc++]=" }"; in makecoremidi()
5098 z[lc++]=" else"; in makecoremidi()
5099 z[lc++]=" if (csysi_packet_arblength(p, mdata, idx, &len, ext))"; in makecoremidi()
5100 z[lc++]=" return len;"; in makecoremidi()
5101 z[lc++]=""; in makecoremidi()
5102 z[lc++]=" if (*idx == p->length)"; in makecoremidi()
5103 z[lc++]=" return len;"; in makecoremidi()
5104 z[lc++]=" continue;"; in makecoremidi()
5105 z[lc++]=" }"; in makecoremidi()
5106 z[lc++]=" }"; in makecoremidi()
5107 z[lc++]=" while (1);"; in makecoremidi()
5108 z[lc++]=" "; in makecoremidi()
5109 z[lc++]=" *idx = p->length; /* should never run, loop has no exit path */"; in makecoremidi()
5110 z[lc++]=" return len;"; in makecoremidi()
5111 z[lc++]="} "; in makecoremidi()
5112 z[lc++]=""; in makecoremidi()
5113 z[lc++]="/****************************************************************/"; in makecoremidi()
5114 z[lc++]="/* recover from CoreMIDI legacy bugs */"; in makecoremidi()
5115 z[lc++]="/****************************************************************/"; in makecoremidi()
5116 z[lc++]=""; in makecoremidi()
5117 z[lc++]="int csysi_bugrecovery(MIDIPacket * p, unsigned char * mdata,"; in makecoremidi()
5118 z[lc++]=" int * idx, int len)"; in makecoremidi()
5119 z[lc++]="{"; in makecoremidi()
5120 z[lc++]=" mdata[len] = CSYS_MIDI_SYSTEM_RESET;"; in makecoremidi()
5121 z[lc++]=" *idx = p->length;"; in makecoremidi()
5122 z[lc++]=" return len + 1; "; in makecoremidi()
5123 z[lc++]="}"; in makecoremidi()
5124 z[lc++]=""; in makecoremidi()
5125 z[lc++]="/****************************************************************/"; in makecoremidi()
5126 z[lc++]="/* parse arbitrary-length command bodies */"; in makecoremidi()
5127 z[lc++]="/****************************************************************/"; in makecoremidi()
5128 z[lc++]=""; in makecoremidi()
5129 z[lc++]="int csysi_packet_arblength(MIDIPacket * p, unsigned char * mdata,"; in makecoremidi()
5130 z[lc++]=" int * idx, int * len, unsigned char ext)"; in makecoremidi()
5131 z[lc++]="{"; in makecoremidi()
5132 z[lc++]=""; in makecoremidi()
5133 z[lc++]=" if (p->data[(*idx)] == CSYS_MIDI_SYSTEM_SYSEX_START)"; in makecoremidi()
5134 z[lc++]=" {"; in makecoremidi()
5135 z[lc++]=" csysi_ports[ext].sysex_size = 0;"; in makecoremidi()
5136 z[lc++]=" *idx += 1;"; in makecoremidi()
5137 z[lc++]=" }"; in makecoremidi()
5138 z[lc++]=""; in makecoremidi()
5139 z[lc++]=" while (*idx < p->length)"; in makecoremidi()
5140 z[lc++]=" if (p->data[(*idx)] & 0x80u)"; in makecoremidi()
5141 z[lc++]=" {"; in makecoremidi()
5142 z[lc++]=" if (p->data[(*idx)] == CSYS_MIDI_SYSTEM_SYSEX_END)"; in makecoremidi()
5143 z[lc++]=" (*idx)++;"; in makecoremidi()
5144 z[lc++]=" "; in makecoremidi()
5145 z[lc++]=" switch (csysi_ports[ext].sysex_size) {"; in makecoremidi()
5146 z[lc++]=" case 2:"; in makecoremidi()
5147 z[lc++]=" if (csysi_ports[ext].sysbuff[0] == 0x7Du)"; in makecoremidi()
5148 z[lc++]=" {"; in makecoremidi()
5149 z[lc++]=" if (csysi_ports[ext].sysbuff[1] & CSYSI_UNDEFINED_F4)"; in makecoremidi()
5150 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED1;"; in makecoremidi()
5151 z[lc++]=" else"; in makecoremidi()
5152 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED2;"; in makecoremidi()
5153 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5154 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5155 z[lc++]=" }"; in makecoremidi()
5156 z[lc++]=" break;"; in makecoremidi()
5157 z[lc++]=" case 3:"; in makecoremidi()
5158 z[lc++]=" if (csysi_ports[ext].sysbuff[0] == 0x7Du)"; in makecoremidi()
5159 z[lc++]=" {"; in makecoremidi()
5160 z[lc++]=" if (csysi_ports[ext].sysbuff[1] & CSYSI_UNDEFINED_F4)"; in makecoremidi()
5161 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED1;"; in makecoremidi()
5162 z[lc++]=" else"; in makecoremidi()
5163 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED2;"; in makecoremidi()
5164 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[2];"; in makecoremidi()
5165 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5166 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5167 z[lc++]=" }"; in makecoremidi()
5168 z[lc++]=" break;"; in makecoremidi()
5169 z[lc++]=" case 4:"; in makecoremidi()
5170 z[lc++]=" if (csysi_ports[ext].sysbuff[0] == 0x7Du)"; in makecoremidi()
5171 z[lc++]=" {"; in makecoremidi()
5172 z[lc++]=" if (csysi_ports[ext].sysbuff[1] & CSYSI_UNDEFINED_F4)"; in makecoremidi()
5173 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED1;"; in makecoremidi()
5174 z[lc++]=" else"; in makecoremidi()
5175 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_SYSTEM_UNUSED2;"; in makecoremidi()
5176 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[2];"; in makecoremidi()
5177 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[3];"; in makecoremidi()
5178 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5179 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5180 z[lc++]=" }"; in makecoremidi()
5181 z[lc++]=" if ((csysi_ports[ext].sysbuff[0] == 0x7Eu) &&"; in makecoremidi()
5182 z[lc++]=" (csysi_ports[ext].sysbuff[1] == 0x7Fu) &&"; in makecoremidi()
5183 z[lc++]=" (csysi_ports[ext].sysbuff[2] == 0x09u) &&"; in makecoremidi()
5184 z[lc++]=" ((csysi_ports[ext].sysbuff[3] == 0x01u) ||"; in makecoremidi()
5185 z[lc++]=" (csysi_ports[ext].sysbuff[3] == 0x02u)))"; in makecoremidi()
5186 z[lc++]=" {"; in makecoremidi()
5187 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_GMRESET;"; in makecoremidi()
5188 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[3];"; in makecoremidi()
5189 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5190 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5191 z[lc++]=" }"; in makecoremidi()
5192 z[lc++]=" break;"; in makecoremidi()
5193 z[lc++]=" case 6: "; in makecoremidi()
5194 z[lc++]=" if ((csysi_ports[ext].sysbuff[0] == 0x7Fu) &&"; in makecoremidi()
5195 z[lc++]=" (csysi_ports[ext].sysbuff[1] == 0x7Fu) &&"; in makecoremidi()
5196 z[lc++]=" (csysi_ports[ext].sysbuff[2] == 0x04u) &&"; in makecoremidi()
5197 z[lc++]=" (csysi_ports[ext].sysbuff[3] == 0x01u) &&"; in makecoremidi()
5198 z[lc++]=" (csysi_ports[ext].sysbuff[4] < 0x80u) &&"; in makecoremidi()
5199 z[lc++]=" (csysi_ports[ext].sysbuff[5] < 0x80u))"; in makecoremidi()
5200 z[lc++]=" {"; in makecoremidi()
5201 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_MVOLUME;"; in makecoremidi()
5202 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[4];"; in makecoremidi()
5203 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[5];"; in makecoremidi()
5204 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5205 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5206 z[lc++]=" }"; in makecoremidi()
5207 z[lc++]=" break;"; in makecoremidi()
5208 z[lc++]=" case 8: "; in makecoremidi()
5209 z[lc++]=" if ((csysi_ports[ext].sysbuff[0] == 0x43u) &&"; in makecoremidi()
5210 z[lc++]=" (csysi_ports[ext].sysbuff[1] == 0x73u) &&"; in makecoremidi()
5211 z[lc++]=" (csysi_ports[ext].sysbuff[2] == 0x7Fu) &&"; in makecoremidi()
5212 z[lc++]=" (csysi_ports[ext].sysbuff[3] == 0x32u) &&"; in makecoremidi()
5213 z[lc++]=" (csysi_ports[ext].sysbuff[4] == 0x11u) &&"; in makecoremidi()
5214 z[lc++]=" (csysi_ports[ext].sysbuff[5] < 0x80u) &&"; in makecoremidi()
5215 z[lc++]=" (csysi_ports[ext].sysbuff[6] < 0x80u) &&"; in makecoremidi()
5216 z[lc++]=" (csysi_ports[ext].sysbuff[7] < 0x80u))"; in makecoremidi()
5217 z[lc++]=" {"; in makecoremidi()
5218 z[lc++]=" mdata[(*len)++] = CSYS_MIDI_MANUEX;"; in makecoremidi()
5219 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[6];"; in makecoremidi()
5220 z[lc++]=" mdata[(*len)++] = csysi_ports[ext].sysbuff[7];"; in makecoremidi()
5221 z[lc++]=" if ((p->length == (*idx)) || ((*len) > (CSYSI_SENDSIZE - 3)))"; in makecoremidi()
5222 z[lc++]=" return CSYSI_COMMAND_COMPLETED;"; in makecoremidi()
5223 z[lc++]=" }"; in makecoremidi()
5224 z[lc++]=" break; "; in makecoremidi()
5225 z[lc++]=" }"; in makecoremidi()
5226 z[lc++]=" csysi_ports[ext].sysex_size = 0;"; in makecoremidi()
5227 z[lc++]=" break; /* while */"; in makecoremidi()
5228 z[lc++]=" }"; in makecoremidi()
5229 z[lc++]=" else"; in makecoremidi()
5230 z[lc++]=" {"; in makecoremidi()
5231 z[lc++]=" if (csysi_ports[ext].sysex_size < CSYSI_SYSEXSIZE)"; in makecoremidi()
5232 z[lc++]=" csysi_ports[ext].sysbuff[csysi_ports[ext].sysex_size++] ="; in makecoremidi()
5233 z[lc++]=" p->data[*idx];"; in makecoremidi()
5234 z[lc++]=" (*idx)++;"; in makecoremidi()
5235 z[lc++]=" }"; in makecoremidi()
5236 z[lc++]=""; in makecoremidi()
5237 z[lc++]=" return CSYSI_COMMAND_ONGOING;"; in makecoremidi()
5238 z[lc++]="}"; in makecoremidi()
5239 z[lc++]=""; in makecoremidi()
5240 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makecoremidi()
5241 z[lc++]="/* low-level functions */"; in makecoremidi()
5242 z[lc++]="/*______________________________________________________________*/"; in makecoremidi()
5243 z[lc++]=""; in makecoremidi()
5244 z[lc++]=""; in makecoremidi()
5245 z[lc++]=""; in makecoremidi()
5246 z[lc++]=""; in makecoremidi()
5255 z[lc++]=""; in makeaucontrol()
5256 z[lc++]="/*"; in makeaucontrol()
5257 z[lc++]="# Sfront, a SAOL to C translator "; in makeaucontrol()
5258 z[lc++]="# This file: aucontrol control driver for sfront"; in makeaucontrol()
5259 z[lc++]="#"; in makeaucontrol()
5260 z[lc++]="# Copyright (c) 1999-2006, Regents of the University of California"; in makeaucontrol()
5261 z[lc++]="# All rights reserved."; in makeaucontrol()
5262 z[lc++]="#"; in makeaucontrol()
5263 z[lc++]="# Redistribution and use in source and binary forms, with or without"; in makeaucontrol()
5264 z[lc++]="# modification, are permitted provided that the following conditions are"; in makeaucontrol()
5265 z[lc++]="# met:"; in makeaucontrol()
5266 z[lc++]="#"; in makeaucontrol()
5267 z[lc++]="# Redistributions of source code must retain the above copyright"; in makeaucontrol()
5268 z[lc++]="# notice, this list of conditions and the following disclaimer."; in makeaucontrol()
5269 z[lc++]="#"; in makeaucontrol()
5270 z[lc++]="# Redistributions in binary form must reproduce the above copyright"; in makeaucontrol()
5271 z[lc++]="# notice, this list of conditions and the following disclaimer in the"; in makeaucontrol()
5272 z[lc++]="# documentation and/or other materials provided with the distribution."; in makeaucontrol()
5273 z[lc++]="#"; in makeaucontrol()
5274 z[lc++]="# Neither the name of the University of California, Berkeley nor the"; in makeaucontrol()
5275 z[lc++]="# names of its contributors may be used to endorse or promote products"; in makeaucontrol()
5276 z[lc++]="# derived from this software without specific prior written permission."; in makeaucontrol()
5277 z[lc++]="#"; in makeaucontrol()
5278 z[lc++]="# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"; in makeaucontrol()
5279 z[lc++]="# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"; in makeaucontrol()
5280 z[lc++]="# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"; in makeaucontrol()
5281 z[lc++]="# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT"; in makeaucontrol()
5282 z[lc++]="# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"; in makeaucontrol()
5283 z[lc++]="# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT"; in makeaucontrol()
5284 z[lc++]="# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,"; in makeaucontrol()
5285 z[lc++]="# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"; in makeaucontrol()
5286 z[lc++]="# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"; in makeaucontrol()
5287 z[lc++]="# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE"; in makeaucontrol()
5288 z[lc++]="# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; in makeaucontrol()
5289 z[lc++]="#"; in makeaucontrol()
5290 z[lc++]="# Maintainer: John Lazzaro, lazzaro@cs.berkeley.edu"; in makeaucontrol()
5291 z[lc++]="*/"; in makeaucontrol()
5292 z[lc++]=""; in makeaucontrol()
5293 z[lc++]="/****************************************************************/"; in makeaucontrol()
5294 z[lc++]="/****************************************************************/"; in makeaucontrol()
5295 z[lc++]="/* audiounit control driver for sfront */ "; in makeaucontrol()
5296 z[lc++]="/****************************************************************/"; in makeaucontrol()
5297 z[lc++]=""; in makeaucontrol()
5298 z[lc++]="/*~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5299 z[lc++]="/* include headers */"; in makeaucontrol()
5300 z[lc++]="/*_________________*/"; in makeaucontrol()
5301 z[lc++]=""; in makeaucontrol()
5302 z[lc++]="/* for socket system */"; in makeaucontrol()
5303 z[lc++]=""; in makeaucontrol()
5304 z[lc++]="#include <sys/types.h>"; in makeaucontrol()
5305 z[lc++]="#include <sys/socket.h>"; in makeaucontrol()
5306 z[lc++]="#include <unistd.h>"; in makeaucontrol()
5307 z[lc++]="#include <sys/uio.h>"; in makeaucontrol()
5308 z[lc++]="#include <fcntl.h>"; in makeaucontrol()
5309 z[lc++]=""; in makeaucontrol()
5310 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5311 z[lc++]="/* MIDI event constants */"; in makeaucontrol()
5312 z[lc++]="/* Must match audiounit.c versions */"; in makeaucontrol()
5313 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5314 z[lc++]=""; in makeaucontrol()
5315 z[lc++]="/* retry limit for socket writing */"; in makeaucontrol()
5316 z[lc++]=""; in makeaucontrol()
5317 z[lc++]="#define CSYSI_AUCONTROL_RETRY_MAX 256"; in makeaucontrol()
5318 z[lc++]=""; in makeaucontrol()
5319 z[lc++]="/* bitfield constants for MIDIevent flags variable */"; in makeaucontrol()
5320 z[lc++]=""; in makeaucontrol()
5321 z[lc++]="#define CSYSI_AUCONTROL_MIDIFLAGS_WAITING 0x01u /* queuing flag bit */"; in makeaucontrol()
5322 z[lc++]=""; in makeaucontrol()
5323 z[lc++]="/* bitfield constants for SASLevent flags variable */"; in makeaucontrol()
5324 z[lc++]=""; in makeaucontrol()
5325 z[lc++]="#define CSYSI_AUCONTROL_SASLFLAGS_WAITING 0x01u /* queuing flag bit */"; in makeaucontrol()
5326 z[lc++]=""; in makeaucontrol()
5327 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5328 z[lc++]="/* typedef for MIDI events */"; in makeaucontrol()
5329 z[lc++]="/* Fields & order must match */"; in makeaucontrol()
5330 z[lc++]="/* asysn_audiounit_MIDIevent */"; in makeaucontrol()
5331 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5332 z[lc++]=""; in makeaucontrol()
5333 z[lc++]="typedef struct csysi_aucontrol_MIDIevent {"; in makeaucontrol()
5334 z[lc++]=" unsigned char cmd;"; in makeaucontrol()
5335 z[lc++]=" unsigned char d0;"; in makeaucontrol()
5336 z[lc++]=" unsigned char d1;"; in makeaucontrol()
5337 z[lc++]=" unsigned char flags;"; in makeaucontrol()
5338 z[lc++]=" int kcycleidx;"; in makeaucontrol()
5339 z[lc++]="} csysi_aucontrol_MIDIevent;"; in makeaucontrol()
5340 z[lc++]=""; in makeaucontrol()
5341 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5342 z[lc++]="/* typedef for SASL events */"; in makeaucontrol()
5343 z[lc++]="/* Fields & order must match */"; in makeaucontrol()
5344 z[lc++]="/* asysn_audiounit_SASLevent */"; in makeaucontrol()
5345 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5346 z[lc++]=""; in makeaucontrol()
5347 z[lc++]="typedef struct csysi_aucontrol_SASLevent {"; in makeaucontrol()
5348 z[lc++]=" int index;"; in makeaucontrol()
5349 z[lc++]=" Float32 value;"; in makeaucontrol()
5350 z[lc++]=" unsigned char flags;"; in makeaucontrol()
5351 z[lc++]=" int kcycleidx;"; in makeaucontrol()
5352 z[lc++]="} csysi_aucontrol_SASLevent;"; in makeaucontrol()
5353 z[lc++]=""; in makeaucontrol()
5354 z[lc++]="/*~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5355 z[lc++]="/* aucontrol state */"; in makeaucontrol()
5356 z[lc++]="/*~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5357 z[lc++]=""; in makeaucontrol()
5358 z[lc++]="typedef struct csysi_aucontrol_state {"; in makeaucontrol()
5359 z[lc++]=" int mpipe;"; in makeaucontrol()
5360 z[lc++]=" csysi_aucontrol_MIDIevent nextMIDIevent;"; in makeaucontrol()
5361 z[lc++]=" int spipe;"; in makeaucontrol()
5362 z[lc++]=" csysi_aucontrol_SASLevent nextSASLevent;"; in makeaucontrol()
5363 z[lc++]="} csysi_aucontrol_state;"; in makeaucontrol()
5364 z[lc++]=""; in makeaucontrol()
5365 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5366 z[lc++]="/* helper function externs */"; in makeaucontrol()
5367 z[lc++]="/*_________________________*/"; in makeaucontrol()
5368 z[lc++]=""; in makeaucontrol()
5369 z[lc++]="extern int csysi_aucontrol_midievent_read(csysi_aucontrol_state * mystate);"; in makeaucontrol()
5370 z[lc++]="extern int csysi_aucontrol_saslevent_read(csysi_aucontrol_state * mystate);"; in makeaucontrol()
5371 z[lc++]=""; in makeaucontrol()
5372 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5373 z[lc++]="/* high-level functions: called by sfront engine */"; in makeaucontrol()
5374 z[lc++]="/*______________________________________________________________*/"; in makeaucontrol()
5375 z[lc++]=""; in makeaucontrol()
5376 z[lc++]="/****************************************************************/"; in makeaucontrol()
5377 z[lc++]="/* initialization routine for control */"; in makeaucontrol()
5378 z[lc++]="/****************************************************************/"; in makeaucontrol()
5379 z[lc++]=""; in makeaucontrol()
5380 z[lc++]="int csys_setup(ENGINE_PTR_DECLARE)"; in makeaucontrol()
5381 z[lc++]=" "; in makeaucontrol()
5382 z[lc++]="{"; in makeaucontrol()
5383 z[lc++]=" csysi_aucontrol_state * mystate;"; in makeaucontrol()
5384 z[lc++]=" int msize;"; in makeaucontrol()
5385 z[lc++]=" char message[256];"; in makeaucontrol()
5386 z[lc++]=""; in makeaucontrol()
5387 z[lc++]=" msize = sizeof(csysi_aucontrol_state);"; in makeaucontrol()
5388 z[lc++]=" if (!(mystate = calloc(1, msize)))"; in makeaucontrol()
5389 z[lc++]=" return CSYS_ERROR;"; in makeaucontrol()
5390 z[lc++]=" asysn_audiounit_memstatus(mystate, msize, MADV_WILLNEED);"; in makeaucontrol()
5391 z[lc++]=""; in makeaucontrol()
5392 z[lc++]=" EV(csys_state) = (void *) mystate;"; in makeaucontrol()
5393 z[lc++]=""; in makeaucontrol()
5394 z[lc++]=" if ((EV(csys_argc) == 5) && "; in makeaucontrol()
5395 z[lc++]=" !strcmp(EV(csys_argv)[1], \"-asys_audiounit_mpipe\") &&"; in makeaucontrol()
5396 z[lc++]=" !strcmp(EV(csys_argv)[3], \"-asys_audiounit_spipe\"))"; in makeaucontrol()
5397 z[lc++]=" {"; in makeaucontrol()
5398 z[lc++]=" mystate->mpipe = atoi(EV(csys_argv[2]));"; in makeaucontrol()
5399 z[lc++]=" mystate->spipe = atoi(EV(csys_argv[4]));"; in makeaucontrol()
5400 z[lc++]=" }"; in makeaucontrol()
5401 z[lc++]=""; in makeaucontrol()
5402 z[lc++]=" sprintf(message, \"Opening aucontrol driver for %s\\n\\n\", "; in makeaucontrol()
5403 z[lc++]=" (EV(csys_argc) >= 1) ? EV(csys_argv)[0] : \"(unknown)\");"; in makeaucontrol()
5404 z[lc++]=""; in makeaucontrol()
5405 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING(message);"; in makeaucontrol()
5406 z[lc++]=""; in makeaucontrol()
5407 z[lc++]=" return CSYS_DONE;"; in makeaucontrol()
5408 z[lc++]="}"; in makeaucontrol()
5409 z[lc++]=""; in makeaucontrol()
5410 z[lc++]="/****************************************************************/"; in makeaucontrol()
5411 z[lc++]="/* polling routine for new data */"; in makeaucontrol()
5412 z[lc++]="/****************************************************************/"; in makeaucontrol()
5413 z[lc++]=""; in makeaucontrol()
5414 z[lc++]="int csys_newdata(ENGINE_PTR_DECLARE)"; in makeaucontrol()
5415 z[lc++]=" "; in makeaucontrol()
5416 z[lc++]="{"; in makeaucontrol()
5417 z[lc++]=" csysi_aucontrol_state * mystate = (csysi_aucontrol_state *) EV(csys_state);"; in makeaucontrol()
5418 z[lc++]=" int has_midi, has_sasl;"; in makeaucontrol()
5419 z[lc++]=""; in makeaucontrol()
5420 z[lc++]="#if defined(CSYS_CDRIVER_AUCONTROLM)"; in makeaucontrol()
5421 z[lc++]=" has_midi = (mystate->nextMIDIevent.flags & CSYSI_AUCONTROL_MIDIFLAGS_WAITING) ||"; in makeaucontrol()
5422 z[lc++]=" (csysi_aucontrol_midievent_read(mystate) == CSYS_MIDIEVENTS);"; in makeaucontrol()
5423 z[lc++]="#else"; in makeaucontrol()
5424 z[lc++]=" has_midi = 0;"; in makeaucontrol()
5425 z[lc++]="#endif"; in makeaucontrol()
5426 z[lc++]=""; in makeaucontrol()
5427 z[lc++]=" has_sasl = (mystate->nextSASLevent.flags & CSYSI_AUCONTROL_SASLFLAGS_WAITING) ||"; in makeaucontrol()
5428 z[lc++]=" (csysi_aucontrol_saslevent_read(mystate) == CSYS_SASLEVENTS);"; in makeaucontrol()
5429 z[lc++]=""; in makeaucontrol()
5430 z[lc++]=" if (!(has_midi || has_sasl)) /* quick exit in common case */"; in makeaucontrol()
5431 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5432 z[lc++]=""; in makeaucontrol()
5433 z[lc++]=" has_midi = has_midi && (mystate->nextMIDIevent.kcycleidx <= EV(kcycleidx));"; in makeaucontrol()
5434 z[lc++]=" has_sasl = has_sasl && (mystate->nextSASLevent.kcycleidx <= EV(kcycleidx));"; in makeaucontrol()
5435 z[lc++]=""; in makeaucontrol()
5436 z[lc++]=" if (!(has_midi || has_sasl))"; in makeaucontrol()
5437 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5438 z[lc++]=""; in makeaucontrol()
5439 z[lc++]=" if (has_midi && has_sasl)"; in makeaucontrol()
5440 z[lc++]=" return CSYS_EVENTS;"; in makeaucontrol()
5441 z[lc++]=""; in makeaucontrol()
5442 z[lc++]="#if defined(CSYS_CDRIVER_AUCONTROLM)"; in makeaucontrol()
5443 z[lc++]=" if (has_midi)"; in makeaucontrol()
5444 z[lc++]=" return CSYS_MIDIEVENTS;"; in makeaucontrol()
5445 z[lc++]="#endif"; in makeaucontrol()
5446 z[lc++]=""; in makeaucontrol()
5447 z[lc++]=" if (has_sasl)"; in makeaucontrol()
5448 z[lc++]=" return CSYS_SASLEVENTS;"; in makeaucontrol()
5449 z[lc++]="}"; in makeaucontrol()
5450 z[lc++]=""; in makeaucontrol()
5451 z[lc++]=""; in makeaucontrol()
5452 z[lc++]="#if defined(CSYS_CDRIVER_AUCONTROLM)"; in makeaucontrol()
5453 z[lc++]=""; in makeaucontrol()
5454 z[lc++]="/****************************************************************/"; in makeaucontrol()
5455 z[lc++]="/* processes a MIDI event */"; in makeaucontrol()
5456 z[lc++]="/****************************************************************/"; in makeaucontrol()
5457 z[lc++]=""; in makeaucontrol()
5458 z[lc++]="int csys_midievent(ENGINE_PTR_DECLARE_COMMA unsigned char * cmd, "; in makeaucontrol()
5459 z[lc++]=" unsigned char * ndata, unsigned char * vdata, "; in makeaucontrol()
5460 z[lc++]=" unsigned short * extchan, float * fval)"; in makeaucontrol()
5461 z[lc++]=""; in makeaucontrol()
5462 z[lc++]="{"; in makeaucontrol()
5463 z[lc++]=" csysi_aucontrol_state * mystate = (csysi_aucontrol_state *) EV(csys_state);"; in makeaucontrol()
5464 z[lc++]=""; in makeaucontrol()
5465 z[lc++]=" if ((*cmd = mystate->nextMIDIevent.cmd) < CSYS_MIDI_SYSTEM)"; in makeaucontrol()
5466 z[lc++]=" {"; in makeaucontrol()
5467 z[lc++]=" *extchan = (*cmd) & 0x0Fu; "; in makeaucontrol()
5468 z[lc++]=" *ndata = mystate->nextMIDIevent.d0;"; in makeaucontrol()
5469 z[lc++]=" *vdata = mystate->nextMIDIevent.d1;"; in makeaucontrol()
5470 z[lc++]=" }"; in makeaucontrol()
5471 z[lc++]=" else"; in makeaucontrol()
5472 z[lc++]=" *cmd = CSYS_MIDI_NOOP; /* filter MIDI System commands */"; in makeaucontrol()
5473 z[lc++]=""; in makeaucontrol()
5474 z[lc++]=" if (csysi_aucontrol_midievent_read(mystate) == CSYS_NONE)"; in makeaucontrol()
5475 z[lc++]=" {"; in makeaucontrol()
5476 z[lc++]=" mystate->nextMIDIevent.flags &= ~(CSYSI_AUCONTROL_MIDIFLAGS_WAITING);"; in makeaucontrol()
5477 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5478 z[lc++]=" }"; in makeaucontrol()
5479 z[lc++]=""; in makeaucontrol()
5480 z[lc++]=" if (mystate->nextMIDIevent.kcycleidx <= EV(kcycleidx))"; in makeaucontrol()
5481 z[lc++]=" return CSYS_MIDIEVENTS;"; in makeaucontrol()
5482 z[lc++]=""; in makeaucontrol()
5483 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5484 z[lc++]="}"; in makeaucontrol()
5485 z[lc++]=""; in makeaucontrol()
5486 z[lc++]="#endif"; in makeaucontrol()
5487 z[lc++]=""; in makeaucontrol()
5488 z[lc++]="/****************************************************************/"; in makeaucontrol()
5489 z[lc++]="/* processes a SASL event */"; in makeaucontrol()
5490 z[lc++]="/****************************************************************/"; in makeaucontrol()
5491 z[lc++]=""; in makeaucontrol()
5492 z[lc++]="int csys_saslevent(ENGINE_PTR_DECLARE_COMMA unsigned char * cmd, "; in makeaucontrol()
5493 z[lc++]=" unsigned char * priority, unsigned short * id, "; in makeaucontrol()
5494 z[lc++]=" unsigned short * label, float * fval, "; in makeaucontrol()
5495 z[lc++]=" unsigned int * pnum, float ** p)"; in makeaucontrol()
5496 z[lc++]=""; in makeaucontrol()
5497 z[lc++]="{"; in makeaucontrol()
5498 z[lc++]=" csysi_aucontrol_state * mystate = (csysi_aucontrol_state *) EV(csys_state);"; in makeaucontrol()
5499 z[lc++]=""; in makeaucontrol()
5500 z[lc++]=" *cmd = CSYS_SASL_CONTROL;"; in makeaucontrol()
5501 z[lc++]=" *priority = 1;"; in makeaucontrol()
5502 z[lc++]=" *id = CSYS_SASL_NOINSTR;"; in makeaucontrol()
5503 z[lc++]=" *label = CSYS_NOLABEL;"; in makeaucontrol()
5504 z[lc++]=" *pnum = mystate->nextSASLevent.index;"; in makeaucontrol()
5505 z[lc++]=" *fval = mystate->nextSASLevent.value;"; in makeaucontrol()
5506 z[lc++]=" "; in makeaucontrol()
5507 z[lc++]=" if (csysi_aucontrol_saslevent_read(mystate) == CSYS_NONE)"; in makeaucontrol()
5508 z[lc++]=" {"; in makeaucontrol()
5509 z[lc++]=" mystate->nextSASLevent.flags &= ~(CSYSI_AUCONTROL_SASLFLAGS_WAITING);"; in makeaucontrol()
5510 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5511 z[lc++]=" }"; in makeaucontrol()
5512 z[lc++]=""; in makeaucontrol()
5513 z[lc++]=" if (mystate->nextSASLevent.kcycleidx <= EV(kcycleidx))"; in makeaucontrol()
5514 z[lc++]=" return CSYS_SASLEVENTS;"; in makeaucontrol()
5515 z[lc++]=""; in makeaucontrol()
5516 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5517 z[lc++]="}"; in makeaucontrol()
5518 z[lc++]=""; in makeaucontrol()
5519 z[lc++]=""; in makeaucontrol()
5520 z[lc++]="/****************************************************************/"; in makeaucontrol()
5521 z[lc++]="/* closing routine for control */"; in makeaucontrol()
5522 z[lc++]="/****************************************************************/"; in makeaucontrol()
5523 z[lc++]=""; in makeaucontrol()
5524 z[lc++]="void csys_shutdown(ENGINE_PTR_DECLARE)"; in makeaucontrol()
5525 z[lc++]=" "; in makeaucontrol()
5526 z[lc++]="{"; in makeaucontrol()
5527 z[lc++]=" csysi_aucontrol_state * mystate = (csysi_aucontrol_state *) EV(csys_state);"; in makeaucontrol()
5528 z[lc++]=" int msize;"; in makeaucontrol()
5529 z[lc++]=" char message[256];"; in makeaucontrol()
5530 z[lc++]=""; in makeaucontrol()
5531 z[lc++]=" /* flush unprocessed events from MIDI and SASL pipes */"; in makeaucontrol()
5532 z[lc++]=""; in makeaucontrol()
5533 z[lc++]="#if defined(CSYS_CDRIVER_AUCONTROLM)"; in makeaucontrol()
5534 z[lc++]=" do { } while (csysi_aucontrol_midievent_read(mystate) != CSYS_NONE);"; in makeaucontrol()
5535 z[lc++]="#endif"; in makeaucontrol()
5536 z[lc++]=" do { } while (csysi_aucontrol_saslevent_read(mystate) != CSYS_NONE);"; in makeaucontrol()
5537 z[lc++]=""; in makeaucontrol()
5538 z[lc++]=" /* log driver close, and free mystate */"; in makeaucontrol()
5539 z[lc++]=""; in makeaucontrol()
5540 z[lc++]=" sprintf(message, \"Closing aucontrol driver for %s\\n\\n\","; in makeaucontrol()
5541 z[lc++]=" (EV(csys_argc) >= 1) ? EV(csys_argv)[0] : \"(unknown)\");"; in makeaucontrol()
5542 z[lc++]=""; in makeaucontrol()
5543 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING(message);"; in makeaucontrol()
5544 z[lc++]=""; in makeaucontrol()
5545 z[lc++]=" msize = sizeof(csysi_aucontrol_state);"; in makeaucontrol()
5546 z[lc++]=" asysn_audiounit_memstatus(mystate, msize, MADV_FREE);"; in makeaucontrol()
5547 z[lc++]=" free(mystate);"; in makeaucontrol()
5548 z[lc++]=""; in makeaucontrol()
5549 z[lc++]=" return;"; in makeaucontrol()
5550 z[lc++]="}"; in makeaucontrol()
5551 z[lc++]=""; in makeaucontrol()
5552 z[lc++]=""; in makeaucontrol()
5553 z[lc++]="/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/"; in makeaucontrol()
5554 z[lc++]="/* helper functions */"; in makeaucontrol()
5555 z[lc++]="/*______________________________________________________________*/"; in makeaucontrol()
5556 z[lc++]=""; in makeaucontrol()
5557 z[lc++]="#if defined(CSYS_CDRIVER_AUCONTROLM)"; in makeaucontrol()
5558 z[lc++]=""; in makeaucontrol()
5559 z[lc++]="/****************************************************************/"; in makeaucontrol()
5560 z[lc++]="/* read a MIDI event from the socket */"; in makeaucontrol()
5561 z[lc++]="/****************************************************************/"; in makeaucontrol()
5562 z[lc++]=""; in makeaucontrol()
5563 z[lc++]="int csysi_aucontrol_midievent_read(csysi_aucontrol_state * mystate)"; in makeaucontrol()
5564 z[lc++]=""; in makeaucontrol()
5565 z[lc++]="{"; in makeaucontrol()
5566 z[lc++]=" int retry = 0;"; in makeaucontrol()
5567 z[lc++]=" int len;"; in makeaucontrol()
5568 z[lc++]=""; in makeaucontrol()
5569 z[lc++]=" if (mystate->mpipe == 0)"; in makeaucontrol()
5570 z[lc++]=" return CSYS_NONE; /* no mpipe, so no MIDIevents */"; in makeaucontrol()
5571 z[lc++]=""; in makeaucontrol()
5572 z[lc++]=" do {"; in makeaucontrol()
5573 z[lc++]=""; in makeaucontrol()
5574 z[lc++]=" if (((len = read(mystate->mpipe, &(mystate->nextMIDIevent),"; in makeaucontrol()
5575 z[lc++]=" sizeof(csysi_aucontrol_MIDIevent))) < 0) && (errno == EAGAIN))"; in makeaucontrol()
5576 z[lc++]=" return CSYS_NONE; /* no MIDIevents in mpipe */"; in makeaucontrol()
5577 z[lc++]=""; in makeaucontrol()
5578 z[lc++]=" if (len == sizeof(csysi_aucontrol_MIDIevent))"; in makeaucontrol()
5579 z[lc++]=" return CSYS_MIDIEVENTS; /* a MIDIevent was read */"; in makeaucontrol()
5580 z[lc++]=""; in makeaucontrol()
5581 z[lc++]=" if ((len >= 0) || (errno != EINTR) || (++retry > CSYSI_AUCONTROL_RETRY_MAX))"; in makeaucontrol()
5582 z[lc++]=" {"; in makeaucontrol()
5583 z[lc++]=" if (len == 0)"; in makeaucontrol()
5584 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5585 z[lc++]=" (\"\\tError in csys_newdata: read() returned a zero-length MIDIevent\\n\");"; in makeaucontrol()
5586 z[lc++]=""; in makeaucontrol()
5587 z[lc++]=" if (len > 0)"; in makeaucontrol()
5588 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5589 z[lc++]=" (\"\\tError in csys_newdata: read() returned an incomplete MIDIevent\\n\");"; in makeaucontrol()
5590 z[lc++]=" "; in makeaucontrol()
5591 z[lc++]=" if ((len < 0) && (errno != EINTR))"; in makeaucontrol()
5592 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5593 z[lc++]=" (\"\\tError in csys_newdata: errno other than EINTR or EAGAIN (MIDI)\\n\");"; in makeaucontrol()
5594 z[lc++]=""; in makeaucontrol()
5595 z[lc++]=" if ((len < 0) && (retry > ASYS_AUDIOUNIT_RETRY_MAX))"; in makeaucontrol()
5596 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5597 z[lc++]=" (\"\\tError in csys_newdata: Maximum retry for EINTR exceeded (MIDI)\\n\");"; in makeaucontrol()
5598 z[lc++]=""; in makeaucontrol()
5599 z[lc++]=" return CSYS_NONE; /* to do: clear flag, consider error reporting */"; in makeaucontrol()
5600 z[lc++]=" }"; in makeaucontrol()
5601 z[lc++]=" "; in makeaucontrol()
5602 z[lc++]=" } while(1); /* loop to try again when (errno == EINTR) */"; in makeaucontrol()
5603 z[lc++]=""; in makeaucontrol()
5604 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5605 z[lc++]="}"; in makeaucontrol()
5606 z[lc++]=""; in makeaucontrol()
5607 z[lc++]="#endif "; in makeaucontrol()
5608 z[lc++]=""; in makeaucontrol()
5609 z[lc++]="/****************************************************************/"; in makeaucontrol()
5610 z[lc++]="/* read a SASL event from the socket */"; in makeaucontrol()
5611 z[lc++]="/****************************************************************/"; in makeaucontrol()
5612 z[lc++]=""; in makeaucontrol()
5613 z[lc++]="int csysi_aucontrol_saslevent_read(csysi_aucontrol_state * mystate)"; in makeaucontrol()
5614 z[lc++]=""; in makeaucontrol()
5615 z[lc++]="{"; in makeaucontrol()
5616 z[lc++]=" int retry = 0;"; in makeaucontrol()
5617 z[lc++]=" int len;"; in makeaucontrol()
5618 z[lc++]=""; in makeaucontrol()
5619 z[lc++]=" if (mystate->spipe == 0)"; in makeaucontrol()
5620 z[lc++]=" return CSYS_NONE; /* no spipe, so no SASLevents */"; in makeaucontrol()
5621 z[lc++]=""; in makeaucontrol()
5622 z[lc++]=" do {"; in makeaucontrol()
5623 z[lc++]=""; in makeaucontrol()
5624 z[lc++]=" if (((len = read(mystate->spipe, &(mystate->nextSASLevent),"; in makeaucontrol()
5625 z[lc++]=" sizeof(csysi_aucontrol_SASLevent))) < 0) && (errno == EAGAIN))"; in makeaucontrol()
5626 z[lc++]=" return CSYS_NONE; /* no SASLevents in spipe */"; in makeaucontrol()
5627 z[lc++]=""; in makeaucontrol()
5628 z[lc++]=" if (len == sizeof(csysi_aucontrol_SASLevent))"; in makeaucontrol()
5629 z[lc++]=" return CSYS_SASLEVENTS; /* a SASLevent was read */"; in makeaucontrol()
5630 z[lc++]=""; in makeaucontrol()
5631 z[lc++]=" if ((len >= 0) || (errno != EINTR) || (++retry > CSYSI_AUCONTROL_RETRY_MAX))"; in makeaucontrol()
5632 z[lc++]=" {"; in makeaucontrol()
5633 z[lc++]=" if (len == 0)"; in makeaucontrol()
5634 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5635 z[lc++]=" (\"\\tError in csys_newdata: read() returned a zero-length SASLevent\\n\");"; in makeaucontrol()
5636 z[lc++]=""; in makeaucontrol()
5637 z[lc++]=" if (len > 0)"; in makeaucontrol()
5638 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5639 z[lc++]=" (\"\\tError in csys_newdata: read() returned an incomplete SASLevent\\n\");"; in makeaucontrol()
5640 z[lc++]=" "; in makeaucontrol()
5641 z[lc++]=" if ((len < 0) && (errno != EINTR))"; in makeaucontrol()
5642 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5643 z[lc++]=" (\"\\tError in csys_newdata: errno other than EINTR or EAGAIN (SASL)\\n\");"; in makeaucontrol()
5644 z[lc++]=""; in makeaucontrol()
5645 z[lc++]=" if ((len < 0) && (retry > ASYS_AUDIOUNIT_RETRY_MAX))"; in makeaucontrol()
5646 z[lc++]=" ASYS_AUDIOUNIT_WIRETAP_PUTSTRING"; in makeaucontrol()
5647 z[lc++]=" (\"\\tError in csys_newdata: Maximum retry for EINTR exceeded (SASL)\\n\");"; in makeaucontrol()
5648 z[lc++]=""; in makeaucontrol()
5649 z[lc++]=" return CSYS_NONE; /* to do: clear flag, consider error reporting */"; in makeaucontrol()
5650 z[lc++]=" }"; in makeaucontrol()
5651 z[lc++]=" "; in makeaucontrol()
5652 z[lc++]=" } while(1); /* loop to try again when (errno == EINTR) */"; in makeaucontrol()
5653 z[lc++]=""; in makeaucontrol()
5654 z[lc++]=" return CSYS_NONE;"; in makeaucontrol()
5655 z[lc++]="}"; in makeaucontrol()