[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