| /* |
| * |
| * Generate array-of-const-string from text file. |
| * |
| * Copyright (C) 2006-2007 Peter Johnson |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| */ |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #define MAXLINE 1024 |
| |
| int |
| main(int argc, char *argv[]) |
| { |
| FILE *in, *out; |
| int i; |
| char *str; |
| char *strp; |
| size_t len; |
| |
| if (argc < 4) { |
| fprintf(stderr, "Usage: %s <string> <outfile> <file> [<file> ...]\n", |
| argv[0]); |
| return EXIT_FAILURE; |
| } |
| |
| out = fopen(argv[2], "wt"); |
| |
| if (!out) { |
| fprintf(stderr, "Could not open `%s'.\n", argv[2]); |
| return EXIT_FAILURE; |
| } |
| |
| str = malloc(MAXLINE); |
| |
| fprintf(out, "/* This file auto-generated from %s by genstring.c" |
| " - don't edit it */\n\n" |
| "static const char *%s[] = {\n", argv[3], argv[1]); |
| |
| for (i=3; i<argc; i++) { |
| in = fopen(argv[i], "rt"); |
| if (!in) { |
| fprintf(stderr, "Could not open `%s'.\n", argv[i]); |
| fclose(out); |
| remove(argv[2]); |
| return EXIT_FAILURE; |
| } |
| |
| while (fgets(str, MAXLINE, in)) { |
| strp = str; |
| |
| /* strip off trailing whitespace */ |
| len = strlen(strp); |
| while (len > 0 && (strp[len-1] == ' ' || strp[len-1] == '\t' || |
| strp[len-1] == '\n')) { |
| strp[len-1] = '\0'; |
| len--; |
| } |
| |
| /* output as string to output file */ |
| fprintf(out, " \""); |
| while (*strp != '\0') { |
| if (*strp == '\\' || *strp == '"') |
| fputc('\\', out); |
| fputc(*strp, out); |
| strp++; |
| } |
| fprintf(out, "\",\n"); |
| } |
| |
| fclose(in); |
| } |
| |
| fprintf(out, "};\n"); |
| fclose(out); |
| |
| free(str); |
| |
| return EXIT_SUCCESS; |
| } |