aboutsummaryrefslogtreecommitdiffstats
path: root/asn1c
diff options
context:
space:
mode:
Diffstat (limited to 'asn1c')
-rw-r--r--asn1c/asn1c.c88
-rwxr-xr-xasn1c/check-parsing.sh6
2 files changed, 56 insertions, 38 deletions
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index 4c8d599f..db006885 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -23,11 +23,15 @@
static void usage(char *av0); /* Print the Usage screen and exit(EX_USAGE) */
+#undef COPYRIGHT
+#define COPYRIGHT \
+ "Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>\n"
+
int
main(int ac, char **av) {
enum asn1p_flags asn1_parser_flags = A1P_NOFLAGS;
enum asn1f_flags asn1_fixer_flags = A1F_NOFLAGS;
- enum asn1c_flags asn1_compiler_flags= A1C_NOFLAGS;
+ enum asn1c_flags asn1_compiler_flags= A1C_NO_C99;
enum asn1print_flags asn1_printer_flags = APF_NOFLAGS;
int print_arg__print_out = 0; /* Don't compile, just print parsed */
int print_arg__fix_n_print = 0; /* Fix and print */
@@ -41,7 +45,7 @@ main(int ac, char **av) {
/*
* Process command-line options.
*/
- while((ch = getopt(ac, av, "EFf:LPp:RS:t:W:")) != -1)
+ while((ch = getopt(ac, av, "EFf:hLPp:RS:t:vW:")) != -1)
switch(ch) {
case 'E':
print_arg__print_out = 1;
@@ -56,28 +60,30 @@ main(int ac, char **av) {
asn1_parser_flags |= A1P_CONSTRUCTS_RESTRICT_TO_1990;
} else if(strcmp(optarg, "native-integers") == 0) {
asn1_compiler_flags |= A1C_USE_NATIVE_INTEGERS;
- } else if(strcmp(optarg, "no-c99") == 0) {
- asn1_compiler_flags |= A1C_NO_C99;
} else if(strcmp(optarg, "unnamed-unions") == 0) {
asn1_compiler_flags |= A1C_UNNAMED_UNIONS;
} else if(strncmp(optarg, "known-extern-type=", 18) == 0) {
char *known_type = optarg + 18;
ret = asn1f_make_known_external_type(known_type);
assert(ret == 0 || errno == EEXIST);
+ } else if(strcmp(optarg, "bless-SIZE") == 0) {
+ asn1_fixer_flags |= A1F_EXTENDED_SizeConstraint;
} else {
fprintf(stderr, "-f%s: Invalid argument\n", optarg);
exit(EX_USAGE);
}
break;
- case 'L':
- asn1_printer_flags |= APF_LINE_COMMENTS;
- break;
+ case 'h':
+ usage(av[0]);
case 'P':
asn1_compiler_flags |= A1C_PRINT_COMPILED;
+ asn1_compiler_flags &= ~A1C_NO_C99;
break;
case 'p':
if(strcmp(optarg, "rint-constraints") == 0) {
asn1_printer_flags |= APF_DEBUG_CONSTRAINTS;
+ } else if(strcmp(optarg, "rint-lines") == 0) {
+ asn1_printer_flags |= APF_LINE_COMMENTS;
} else {
fprintf(stderr, "-p%s: Invalid argument\n", optarg);
exit(EX_USAGE);
@@ -93,6 +99,10 @@ main(int ac, char **av) {
if(decode_tlv_from_string(optarg))
exit(EX_DATAERR);
exit(0);
+ case 'v':
+ fprintf(stderr, "ASN.1 Compiler, v" VERSION "\n" COPYRIGHT);
+ exit(0);
+ break;
case 'W':
if(strcmp(optarg, "error") == 0) {
warnings_as_errors = 1;
@@ -125,8 +135,7 @@ main(int ac, char **av) {
}
if(asn1_printer_flags) {
fprintf(stderr, "Error: "
- "-L and -print-constraints "
- "require -E\n");
+ "-print-... arguments require -E\n");
exit(EX_USAGE);
}
}
@@ -255,36 +264,41 @@ main(int ac, char **av) {
static void
usage(char *av0) {
fprintf(stderr,
- "ASN.1 Compiler, v" VERSION "\n"
- "Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>\n"
- "Usage: %s [options] ...\n"
- "Where [options] are:\n"
- "\t-E\tRun only the ASN.1 parser and print out the tree\n"
- "\t-F\tDuring -E operation, also perform tree fixing\n"
- "\t-L\tGenerate \"-- #line\" comments in -E output\n"
- "\n"
- "\t-P \tConcatenate and print the compiled text\n"
- "\t-R \tRestrict output (tables only, no support code)\n"
- "\t-S <dir>\tDirectory with support (skeleton?) files\n"
- "\t \t(Default is \"%s\")\n"
- "\n"
- "\t-t <data>\tDecode the given tag[/length] sequence\n"
- "\n"
- "\t-ftypes88\tUse only ASN.1:1988 embedded types\n"
+"ASN.1 Compiler, v" VERSION "\n" COPYRIGHT
+"Usage: %s [options] infile...\n"
+"Where [options] are:\n"
+" -E Run only the ASN.1 parser and print out the tree\n"
+" -F During -E operation, also perform tree fixing\n"
+"\n"
+" -P Concatenate and print the compiled text\n"
+" -R Restrict output (tables only, no support code)\n"
+" -S <dir> Directory with support (skeleton?) files\n"
+" (Default is \"%s\")\n"
+"\n"
+
+" -t <data-string> Decode the given tag[/length] sequence\n"
+" (e.g. -t \"bf 20\")\n"
+"\n"
+
+" -Werror Treat warnings as errors; abort if any warning\n"
+" -Wdebug-lexer Enable verbose debugging output from lexer\n"
+" -Wdebug-fixer --//-- semantics processor\n"
+" -Wdebug-compiler --//-- compiler\n"
+"\n"
+
+" -fbless-SIZE Allow SIZE() constraint for INTEGER etc (non-std.)\n"
/*
- "\t-fconstr90\tUse only ASN.1:1990 constructs (not available)\n"
+" -fconstr90 Use only ASN.1:1990 constructs (not available)\n"
*/
- "\t-fknown-extern-type=<name>\tPretend this type is known\n"
- "\t-fnative-integers\tUse int instead of INTEGER_t whenever possible\n"
- "\t-fno-c99\tDisable C99 extensions\n"
- "\t-funnamed-unions\tEnable unnamed unions in structures\n"
- "\n"
- "\t-print-constraints\tExplain subtype constraints (debug)\n"
- "\n"
- "\t-Werror \tTreat warnings as errors; abort if any warning\n"
- "\t-Wdebug-lexer\tEnable verbose debugging output from lexer\n"
- "\t-Wdebug-fixer\tDebug ASN.1 semantics processor\n"
- "\t-Wdebug-compiler\tDebug ASN.1 compiler\n"
+" -fknown-extern-type=<name> Pretend this type is known\n"
+" -fnative-integers Use int instead of INTEGER_t whenever possible\n"
+" -funnamed-unions Enable unnamed unions in structures\n"
+" -ftypes88 Use only ASN.1:1988 embedded types\n"
+"\n"
+
+" -print-constraints Explain subtype constraints (debug)\n"
+" -print-lines Generate \"-- #line\" comments in -E output\n"
+
,
a1c_basename(av0), DATADIR
);
diff --git a/asn1c/check-parsing.sh b/asn1c/check-parsing.sh
index ca00c5f0..c5c2d6aa 100755
--- a/asn1c/check-parsing.sh
+++ b/asn1c/check-parsing.sh
@@ -12,7 +12,11 @@ for ref in ../tests/*.asn1.-*; do
if [ $? = 0 ]; then
diff -a -u "$ref" "$tmpfile" || ec=$?
fi
- rm -f "$tmpfile"
+ if [ "$1" != "regenerate" ]; then
+ rm -f "$tmpfile"
+ else
+ mv "$tmpfile" "$ref"
+ fi
done
exit $ec