[Commit] nickle ChangeLog, 1.135, 1.136 command.5c, 1.22,
1.23 parse-args.5c, 1.3, 1.4
Bart Massey
commit at keithp.com
Tue Oct 4 23:17:10 PDT 2005
Committed by: bart
Update of /local/src/CVS/nickle
In directory home.keithp.com:/tmp/cvs-serv26604
Modified Files:
ChangeLog command.5c parse-args.5c
Log Message:
2005-09-04 Bart Massey <bart at cs.pdx.edu>
* parse-args.5c:
Fixes for various buglets including
mis-parsing single-character
options and using the wrong variable
in an error message.
* command.5c:
Changed the semantics of argv. It is now
dim 0 iff the program reads from standard
input *and* was not passed arguments.
Index: ChangeLog
===================================================================
RCS file: /local/src/CVS/nickle/ChangeLog,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -d -r1.135 -r1.136
--- ChangeLog 2 Oct 2005 18:30:19 -0000 1.135
+++ ChangeLog 5 Oct 2005 06:17:07 -0000 1.136
@@ -1,3 +1,16 @@
+2005-09-04 Bart Massey <bart at cs.pdx.edu>
+
+ * parse-args.5c:
+ Fixes for various buglets including
+ mis-parsing single-character
+ options and using the wrong variable
+ in an error message.
+
+ * command.5c:
+ Changed the semantics of argv. It is now
+ dim 0 iff the program reads from standard
+ input *and* was not passed arguments.
+
2005-09-02 Bart Massey <bart at cs.pdx.edu>
* Makefile.am:
Index: command.5c
===================================================================
RCS file: /local/src/CVS/nickle/command.5c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- command.5c 3 Aug 2005 18:07:47 -0000 1.22
+++ command.5c 5 Oct 2005 06:17:07 -0000 1.23
@@ -304,14 +304,16 @@
ParseArgs::parseargs(&argd, &argv);
/* Reset argv to hold remaining arguments */
- if (is_uninit(&user_argind)) {
+ if (lex_stdin && is_uninit(&user_argind)) {
string[0] rest = {};
argv = rest;
} else {
+ if (is_uninit(&user_argind))
+ user_argind = dim(argv);
string[dim(argv) - user_argind + 1] rest;
rest[0] = script_name;
- for (int i = 1; i < dim(rest); i++)
- rest[i] = argv[i + user_argind - 1];
+ for (int i = 1; i < dim(rest); i++)
+ rest[i] = argv[i + user_argind - 1];
argv = rest;
}
Index: parse-args.5c
===================================================================
RCS file: /local/src/CVS/nickle/parse-args.5c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- parse-args.5c 1 Aug 2005 09:20:30 -0000 1.3
+++ parse-args.5c 5 Oct 2005 06:17:07 -0000 1.4
@@ -143,13 +143,11 @@
void save_value(&arg_var a, string value)
/*
* convert and store the value
- * associated with an argument
+ * associated with an argument.
+ * return number of args consumed
*/
{
union switch(a) {
- case arg_flag var:
- var = true;
- break;
case arg_string var:
var = value;
break;
@@ -162,21 +160,30 @@
case arg_lambda var:
var(value);
break;
+ default:
+ abort("save_value called on wrong var type");
}
}
void process_flag(&arg a)
/*
- * Process a flag that requires an argument
+ * Process a flag
*/
{
- if (argind >= dim(argv)) {
- fprintf(stderr, "%s: missing value for --%s\n",
- argd.prog_name, a.name);
- usage(stderr);
- }
- save_value(&a.var, argv[argind]);
argind++;
+ union switch(a.var) {
+ case arg_flag var:
+ var = true;
+ return;
+ default:
+ if (argind >= dim(argv)) {
+ fprintf(stderr, "%s: missing value for --%s\n",
+ argd.prog_name, a.name);
+ usage(stderr);
+ }
+ save_value(&a.var, argv[argind]);
+ argind++;
+ }
}
/* handle the help case first */
@@ -202,7 +209,6 @@
/* process abbreviated (old-style) flags (maybe grouped) */
if (a[0] == '-' && a[1] != '-') {
- argind++;
for (int i = 1; i < length(a); i++) {
if (!hash_test(arg_abbr_hash, a[i])) {
fprintf(stderr, "%s: unknown flag char '-%c'\n",
@@ -224,7 +230,6 @@
argname);
usage(stderr);
}
- argind++;
process_flag(&arg_name_hash[argname]);
continue;
}
@@ -249,7 +254,7 @@
break;
fprintf(stderr, "%s: missing required argument %s\n",
argd.prog_name,
- argd.args[i].expr_name);
+ argd.posn_args[i].name);
usage(stderr);
}
save_value(&argd.posn_args[i].var, argv[argind]);
More information about the Commit
mailing list