FreeCalypso > hg > fc-magnetite
view helpers/cfg-hdr-gen.c @ 597:f18b29e27be5
First attempt at MCSI voice path automatic switching
The function is implemented at the ACI level in both aci2 and aci3,
successfully avoids triggering the DSP bug on the first call,
but the shutdown of MCSI upon call completion is not working properly yet
in either version.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 27 Mar 2019 22:18:35 +0000 |
parents | b8b08c302ace |
children |
line wrap: on
line source
/* * This helper program generates the set of *.cfg header files, based on a * template file and environment variables for the non-constant settings. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <ctype.h> #include <string.h> #include <strings.h> char *infname; FILE *inf, *outf; char include_guard_symbol[32]; char linebuf[256]; int lineno; make_include_guard_symbol(fname) char *fname; { char *sp, *dp; int c; sp = fname; dp = include_guard_symbol; *dp++ = '_'; *dp++ = '_'; while (c = *sp++) { if (islower(c)) c = toupper(c); else if (c == '.') c = '_'; *dp++ = c; } *dp++ = '_'; *dp++ = '_'; *dp = '\0'; } close_output() { if (outf) { fprintf(outf, "#endif /* %s */\n", include_guard_symbol); fclose(outf); outf = 0; } } bracket_line() { char *cp; close_output(); cp = index(linebuf+1, ']'); if (!cp) { fprintf(stderr, "%s line %d: unterminated bracket line\n", infname, lineno); exit(1); } *cp = '\0'; outf = fopen(linebuf+1, "w"); if (!outf) { perror(linebuf+1); exit(1); } make_include_guard_symbol(linebuf+1); fprintf(outf, "#ifndef %s\n", include_guard_symbol); fprintf(outf, "#define %s\n", include_guard_symbol); } process_line() { char *cp, *symbol, *value; if (linebuf[0] == '[') return bracket_line(); for (cp = linebuf; isspace(*cp); cp++) ; if (*cp == '\0' || *cp == '#') return; for (symbol = cp; *cp && !isspace(*cp); cp++) ; if (!*cp) { inv: fprintf(stderr, "%s line %d: expected two fields\n", infname, lineno); exit(1); } *cp++ = '\0'; while (isspace(*cp)) cp++; if (*cp == '\0' || *cp == '#') goto inv; for (value = cp; *cp && !isspace(*cp); cp++) ; if (*cp) *cp++ = '\0'; while (isspace(*cp)) cp++; if (*cp != '\0' && *cp != '#') goto inv; if (!strcmp(value, "var")) { value = getenv(symbol); if (!value) { fprintf(stderr, "%s line %d: no environment variable named %s\n", infname, lineno, symbol); exit(1); } } if (!outf) { fprintf(stderr, "%s line %d: no open output file\n", infname, lineno); exit(1); } fprintf(outf, "#define %s %s\n", symbol, value); } main(argc, argv) char **argv; { if (argc != 3) { fprintf(stderr, "usage: %s template-file output-dir\n", argv[0]); exit(1); } infname = argv[1]; inf = fopen(infname, "r"); if (!inf) { perror(infname); exit(1); } if (chdir(argv[2]) < 0) { perror(argv[2]); exit(1); } for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) process_line(); close_output(); exit(0); }