mirror of https://github.com/yasm/yasm.git
dependency. svn path=/trunk/yasm/; revision=11030.4
parent
def825542c
commit
52b1e848dd
3 changed files with 147 additions and 57 deletions
@ -0,0 +1,141 @@ |
|||||||
|
/* $IdPath$
|
||||||
|
* |
||||||
|
* C version of NASM's macros.pl |
||||||
|
* |
||||||
|
* Copyright (C) 2004 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 OUTPUT "nasm-macros.c" |
||||||
|
#define MAXLINE 1024 |
||||||
|
|
||||||
|
int |
||||||
|
main(int argc, char *argv[]) |
||||||
|
{ |
||||||
|
FILE *in, *out; |
||||||
|
int i; |
||||||
|
char str[MAXLINE]; |
||||||
|
char *strp; |
||||||
|
char *charp; |
||||||
|
int fline; |
||||||
|
int line = 0; |
||||||
|
int lindex = 0; |
||||||
|
int tasm_count = -1; |
||||||
|
size_t len; |
||||||
|
|
||||||
|
if (argc < 2) { |
||||||
|
fprintf(stderr, "Usage: %s <file> [<file> ...]\n", argv[0]); |
||||||
|
return EXIT_FAILURE; |
||||||
|
} |
||||||
|
|
||||||
|
out = fopen(OUTPUT, "wt"); |
||||||
|
|
||||||
|
if (!out) { |
||||||
|
fprintf(stderr, "Could not open `%s'.\n", OUTPUT); |
||||||
|
return EXIT_FAILURE; |
||||||
|
} |
||||||
|
|
||||||
|
fprintf(out, "/* This file auto-generated from standard.mac by genmacro.c" |
||||||
|
" - don't edit it */\n\n#include <stddef.h>\n\n" |
||||||
|
"static const char *stdmac[] = {\n"); |
||||||
|
|
||||||
|
for (i=1; i<argc; i++) { |
||||||
|
in = fopen(argv[i], "rt"); |
||||||
|
if (!in) { |
||||||
|
fprintf(stderr, "Could not open `%s'.\n", argv[i]); |
||||||
|
fclose(out); |
||||||
|
remove(OUTPUT); |
||||||
|
return EXIT_FAILURE; |
||||||
|
} |
||||||
|
|
||||||
|
fline = 0; |
||||||
|
|
||||||
|
while (fgets(str, MAXLINE, in)) { |
||||||
|
line++; |
||||||
|
fline++; |
||||||
|
|
||||||
|
strp = str; |
||||||
|
|
||||||
|
/* check for unterminated quotes and delete comments */ |
||||||
|
charp = strp; |
||||||
|
while ((charp = strpbrk(charp, "'\";"))) { |
||||||
|
if (charp[0] == ';') { |
||||||
|
*charp = '\0'; |
||||||
|
break; |
||||||
|
} |
||||||
|
if ((charp = strchr(charp+1, charp[0])) == NULL) { |
||||||
|
fprintf(stderr, "%s:%d: error: unterminated quote\n", |
||||||
|
argv[i], fline); |
||||||
|
fclose(out); |
||||||
|
remove(OUTPUT); |
||||||
|
return EXIT_FAILURE; |
||||||
|
} |
||||||
|
charp++; |
||||||
|
} |
||||||
|
|
||||||
|
/* strip off leading and trailing whitespace */ |
||||||
|
while (*strp == ' ' || *strp == '\t') |
||||||
|
strp++; |
||||||
|
len = strlen(strp); |
||||||
|
while (strp[len-1] == ' ' || strp[len-1] == '\t' || |
||||||
|
strp[len-1] == '\n') { |
||||||
|
strp[len-1] = '\0'; |
||||||
|
len--; |
||||||
|
} |
||||||
|
|
||||||
|
/* skip blank lines */ |
||||||
|
if (len == 0) |
||||||
|
continue; |
||||||
|
|
||||||
|
/* check for special TASM ending token */ |
||||||
|
if (strcmp(strp, "*END*TASM*MACROS*") == 0) { |
||||||
|
tasm_count = lindex; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
/* output as string to output file */ |
||||||
|
fprintf(out, " \""); |
||||||
|
while (*strp != '\0') { |
||||||
|
if (*strp == '\\' || *strp == '"') |
||||||
|
fputc('\\', out); |
||||||
|
fputc(*strp, out); |
||||||
|
strp++; |
||||||
|
} |
||||||
|
fprintf(out, "\",\n"); |
||||||
|
lindex++; |
||||||
|
} |
||||||
|
|
||||||
|
fclose(in); |
||||||
|
} |
||||||
|
|
||||||
|
fprintf(out, " NULL\n};\n"); |
||||||
|
if (tasm_count == -1) |
||||||
|
tasm_count = lindex; |
||||||
|
fprintf(out, "#define TASM_MACRO_COUNT %d\n", tasm_count); |
||||||
|
fclose(out); |
||||||
|
|
||||||
|
return EXIT_SUCCESS; |
||||||
|
} |
@ -1,54 +0,0 @@ |
|||||||
#!/usr/bin/perl -w |
|
||||||
# |
|
||||||
# macros.pl produce macros.c from standard.mac |
|
||||||
# |
|
||||||
# The Netwide Assembler is copyright (C) 1996 Simon Tatham and |
|
||||||
# Julian Hall. All rights reserved. The software is |
|
||||||
# redistributable under the licence given in the file "Licence" |
|
||||||
# distributed in the NASM archive. |
|
||||||
|
|
||||||
use strict; |
|
||||||
|
|
||||||
my $fname; |
|
||||||
my $line = 0; |
|
||||||
my $index = 0; |
|
||||||
my $tasm_count; |
|
||||||
|
|
||||||
undef $tasm_count; |
|
||||||
|
|
||||||
open(OUTPUT,">nasm-macros.c") or die "unable to open nasm-macros.c\n"; |
|
||||||
|
|
||||||
print OUTPUT "/* This file auto-generated from standard.mac by macros.pl" . |
|
||||||
" - don't edit it */\n\n#include <stddef.h>\n\nstatic const char *stdmac[] = {\n"; |
|
||||||
|
|
||||||
foreach $fname ( @ARGV ) { |
|
||||||
if (not open(INPUT,$fname)) { |
|
||||||
close(OUTPUT); |
|
||||||
unlink("nasm-macros.c"); |
|
||||||
die "unable to open $fname\n"; |
|
||||||
} |
|
||||||
while (<INPUT>) { |
|
||||||
$line++; |
|
||||||
chomp; |
|
||||||
if (m/^\s*\*END\*TASM\*MACROS\*\s*$/) { |
|
||||||
$tasm_count = $index; |
|
||||||
} elsif (m/^\s*((\s*([^\"\';\s]+|\"[^\"]*\"|\'[^\']*\'))*)\s*(;.*)?$/) { |
|
||||||
$_ = $1; |
|
||||||
s/\\/\\\\/g; |
|
||||||
s/"/\\"/g; |
|
||||||
if (length > 0) { |
|
||||||
print OUTPUT " \"$_\",\n"; |
|
||||||
$index++; |
|
||||||
} |
|
||||||
} else { |
|
||||||
close(OUTPUT); |
|
||||||
unlink("nasm-macros.c"); |
|
||||||
die "$fname:$line: error unterminated quote"; |
|
||||||
} |
|
||||||
} |
|
||||||
close(INPUT); |
|
||||||
} |
|
||||||
print OUTPUT " NULL\n};\n"; |
|
||||||
$tasm_count = $index unless ( defined($tasm_count) ); |
|
||||||
print OUTPUT "#define TASM_MACRO_COUNT $tasm_count\n"; |
|
||||||
close(OUTPUT); |
|
Loading…
Reference in new issue