comparison ringtools/fc-e1gen.c @ 172:c138906889f7

fc-e1gen & e1-experiments: added global oscillator set header word
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 22 Mar 2017 21:56:33 +0000
parents cefdc6623322
children b002c7cf5d03
comparison
equal deleted inserted replaced
171:f736f3ce8310 172:c138906889f7
16 char *infname, *outfname; 16 char *infname, *outfname;
17 FILE *inf, *outf; 17 FILE *inf, *outf;
18 char linebuf[512], *fields[MAX_FIELDS+1]; 18 char linebuf[512], *fields[MAX_FIELDS+1];
19 int lineno, nfields; 19 int lineno, nfields;
20 20
21 int global_osc_set;
21 int start_time, osc_mask; 22 int start_time, osc_mask;
22 u_short osc_words[8][4]; 23 u_short osc_words[8][4];
23 24
24 get_input_line() 25 get_input_line()
25 { 26 {
215 } 216 }
216 fprintf(stderr, "%s line %d: osc line expected\n", 217 fprintf(stderr, "%s line %d: osc line expected\n",
217 infname, lineno); 218 infname, lineno);
218 exit(1); 219 exit(1);
219 } 220 }
220 if (!osc_mask) {
221 fprintf(stderr, "%s line %d: no oscillators defined\n",
222 infname, lineno);
223 exit(1);
224 }
225 } 221 }
226 222
227 emit_16bit_word(word) 223 emit_16bit_word(word)
228 u_short word; 224 u_short word;
229 { 225 {
248 if (osc_words[oscn][1] & 0x20) 244 if (osc_words[oscn][1] & 0x20)
249 emit_16bit_word(osc_words[oscn][3]); 245 emit_16bit_word(osc_words[oscn][3]);
250 } 246 }
251 } 247 }
252 248
249 handle_global_osc_set()
250 {
251 int p;
252 int oscn, osc_bit;
253
254 do
255 get_input_line();
256 while (!nfields);
257 if (strcmp(fields[0], "osc-set")) {
258 fprintf(stderr, "%s line %d: osc-set line expected\n",
259 infname, lineno);
260 exit(1);
261 }
262 if (nfields < 2) {
263 fprintf(stderr, "%s line %d: osc-set must be non-empty\n",
264 infname, lineno);
265 exit(1);
266 }
267 for (p = 1; p < nfields; p++) {
268 oscn = input_number(fields[p], 0, 7);
269 osc_bit = 1 << oscn;
270 global_osc_set |= osc_bit;
271 }
272 putc(0, outf);
273 putc(global_osc_set, outf);
274 }
275
253 main(argc, argv) 276 main(argc, argv)
254 char **argv; 277 char **argv;
255 { 278 {
256 if (argc != 3) { 279 if (argc != 3) {
257 fprintf(stderr, "usage: %s src-file e1-bin-file\n", argv[0]); 280 fprintf(stderr, "usage: %s src-file e1-bin-file\n", argv[0]);
273 if (!outf) { 296 if (!outf) {
274 perror(outfname); 297 perror(outfname);
275 exit(1); 298 exit(1);
276 } 299 }
277 300
301 handle_global_osc_set();
278 /* main loop */ 302 /* main loop */
279 for (;;) { 303 for (;;) {
280 do 304 do
281 get_input_line(); 305 get_input_line();
282 while (!nfields); 306 while (!nfields);