1d5ac70f0Sopenharmony_ci/* 2d5ac70f0Sopenharmony_ci * ALSA lisp implementation 3d5ac70f0Sopenharmony_ci * Copyright (c) 2003 by Jaroslav Kysela <perex@perex.cz> 4d5ac70f0Sopenharmony_ci * 5d5ac70f0Sopenharmony_ci * 6d5ac70f0Sopenharmony_ci * This library is free software; you can redistribute it and/or modify 7d5ac70f0Sopenharmony_ci * it under the terms of the GNU Lesser General Public License as 8d5ac70f0Sopenharmony_ci * published by the Free Software Foundation; either version 2.1 of 9d5ac70f0Sopenharmony_ci * the License, or (at your option) any later version. 10d5ac70f0Sopenharmony_ci * 11d5ac70f0Sopenharmony_ci * This program is distributed in the hope that it will be useful, 12d5ac70f0Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13d5ac70f0Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14d5ac70f0Sopenharmony_ci * GNU Lesser General Public License for more details. 15d5ac70f0Sopenharmony_ci * 16d5ac70f0Sopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17d5ac70f0Sopenharmony_ci * License along with this library; if not, write to the Free Software 18d5ac70f0Sopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19d5ac70f0Sopenharmony_ci * 20d5ac70f0Sopenharmony_ci */ 21d5ac70f0Sopenharmony_ci 22d5ac70f0Sopenharmony_ci#include <stdio.h> 23d5ac70f0Sopenharmony_ci#include <stdlib.h> 24d5ac70f0Sopenharmony_ci#include <string.h> 25d5ac70f0Sopenharmony_ci#include <unistd.h> 26d5ac70f0Sopenharmony_ci#include <err.h> 27d5ac70f0Sopenharmony_ci 28d5ac70f0Sopenharmony_ci#include "asoundlib.h" 29d5ac70f0Sopenharmony_ci#include "alisp.h" 30d5ac70f0Sopenharmony_ci 31d5ac70f0Sopenharmony_cistatic int verbose = 0; 32d5ac70f0Sopenharmony_cistatic int warning = 0; 33d5ac70f0Sopenharmony_cistatic int debug = 0; 34d5ac70f0Sopenharmony_ci 35d5ac70f0Sopenharmony_cistatic void interpret_filename(const char *file) 36d5ac70f0Sopenharmony_ci{ 37d5ac70f0Sopenharmony_ci struct alisp_cfg cfg; 38d5ac70f0Sopenharmony_ci snd_input_t *in; 39d5ac70f0Sopenharmony_ci snd_output_t *out; 40d5ac70f0Sopenharmony_ci int err; 41d5ac70f0Sopenharmony_ci 42d5ac70f0Sopenharmony_ci memset(&cfg, 0, sizeof(cfg)); 43d5ac70f0Sopenharmony_ci if (file != NULL && strcmp(file, "-") != 0) { 44d5ac70f0Sopenharmony_ci if ((err = snd_input_stdio_open(&in, file, "r")) < 0) { 45d5ac70f0Sopenharmony_ci fprintf(stderr, "unable to open filename '%s' (%s)\n", file, snd_strerror(err)); 46d5ac70f0Sopenharmony_ci return; 47d5ac70f0Sopenharmony_ci } 48d5ac70f0Sopenharmony_ci } else { 49d5ac70f0Sopenharmony_ci if ((err = snd_input_stdio_attach(&in, stdin, 0)) < 0) { 50d5ac70f0Sopenharmony_ci fprintf(stderr, "unable to attach stdin '%s' (%s)\n", file, snd_strerror(err)); 51d5ac70f0Sopenharmony_ci return; 52d5ac70f0Sopenharmony_ci } 53d5ac70f0Sopenharmony_ci } 54d5ac70f0Sopenharmony_ci if (snd_output_stdio_attach(&out, stdout, 0) < 0) { 55d5ac70f0Sopenharmony_ci snd_input_close(in); 56d5ac70f0Sopenharmony_ci fprintf(stderr, "unable to attach stdout (%s)\n", strerror(errno)); 57d5ac70f0Sopenharmony_ci return; 58d5ac70f0Sopenharmony_ci } 59d5ac70f0Sopenharmony_ci cfg.verbose = verbose; 60d5ac70f0Sopenharmony_ci cfg.warning = warning; 61d5ac70f0Sopenharmony_ci cfg.debug = debug; 62d5ac70f0Sopenharmony_ci cfg.in = in; 63d5ac70f0Sopenharmony_ci cfg.out = cfg.eout = cfg.vout = cfg.wout = cfg.dout = out; 64d5ac70f0Sopenharmony_ci err = alsa_lisp(&cfg, NULL); 65d5ac70f0Sopenharmony_ci if (err < 0) 66d5ac70f0Sopenharmony_ci fprintf(stderr, "alsa lisp returned error %i (%s)\n", err, strerror(err)); 67d5ac70f0Sopenharmony_ci else if (verbose) 68d5ac70f0Sopenharmony_ci printf("file %s passed ok via alsa lisp interpreter\n", file); 69d5ac70f0Sopenharmony_ci snd_output_close(out); 70d5ac70f0Sopenharmony_ci snd_input_close(in); 71d5ac70f0Sopenharmony_ci} 72d5ac70f0Sopenharmony_ci 73d5ac70f0Sopenharmony_cistatic void usage(void) 74d5ac70f0Sopenharmony_ci{ 75d5ac70f0Sopenharmony_ci fprintf(stderr, "usage: alsalisp [-vdw] [file...]\n"); 76d5ac70f0Sopenharmony_ci exit(1); 77d5ac70f0Sopenharmony_ci} 78d5ac70f0Sopenharmony_ci 79d5ac70f0Sopenharmony_ciint main(int argc, char **argv) 80d5ac70f0Sopenharmony_ci{ 81d5ac70f0Sopenharmony_ci int c; 82d5ac70f0Sopenharmony_ci 83d5ac70f0Sopenharmony_ci while ((c = getopt(argc, argv, "vdw")) != -1) { 84d5ac70f0Sopenharmony_ci switch (c) { 85d5ac70f0Sopenharmony_ci case 'v': 86d5ac70f0Sopenharmony_ci verbose = 1; 87d5ac70f0Sopenharmony_ci break; 88d5ac70f0Sopenharmony_ci case 'd': 89d5ac70f0Sopenharmony_ci debug = 1; 90d5ac70f0Sopenharmony_ci break; 91d5ac70f0Sopenharmony_ci case 'w': 92d5ac70f0Sopenharmony_ci warning = 1; 93d5ac70f0Sopenharmony_ci break; 94d5ac70f0Sopenharmony_ci case '?': 95d5ac70f0Sopenharmony_ci default: 96d5ac70f0Sopenharmony_ci usage(); 97d5ac70f0Sopenharmony_ci /* NOTREACHED */ 98d5ac70f0Sopenharmony_ci } 99d5ac70f0Sopenharmony_ci } 100d5ac70f0Sopenharmony_ci argc -= optind; 101d5ac70f0Sopenharmony_ci argv += optind; 102d5ac70f0Sopenharmony_ci 103d5ac70f0Sopenharmony_ci if (argc < 1) 104d5ac70f0Sopenharmony_ci interpret_filename(NULL); 105d5ac70f0Sopenharmony_ci else 106d5ac70f0Sopenharmony_ci while (*argv) 107d5ac70f0Sopenharmony_ci interpret_filename(*argv++); 108d5ac70f0Sopenharmony_ci 109d5ac70f0Sopenharmony_ci return 0; 110d5ac70f0Sopenharmony_ci} 111