mirror of https://github.com/yasm/yasm.git
* genstring.c: Generate string array from source file. * Makefile.am: Build genstring. * Makefile.inc: Use genstring to create license.c from COPYING. * yasm.c: Include license.c and use it for new --license option. Shorten --version option to just displaying version, compile date, and very short copyright message. svn path=/trunk/yasm/; revision=14630.5.0rc2^2^2
parent
5c36a0551f
commit
a9b1395d09
5 changed files with 165 additions and 47 deletions
@ -0,0 +1,103 @@ |
||||
/* $Id$
|
||||
* |
||||
* Generate array-of-const-string from text file. |
||||
* |
||||
* Copyright (C) 2006 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; |
||||
char *charp; |
||||
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; |
||||
} |
Loading…
Reference in new issue