On Tue, May 30, 2006 at 12:26:45AM +0200, Michael Kerrisk wrote:
> Justin,
> 
> I feel this page could be improved further.  Please:
> 
> * read "man 3p getsubopt" and "info getsubopt".
As noted in the manpage, I have done so.

> Make your terminology consistent with them (epsecially the 3p doc;
> e.g., use "token" and "value")

> * send me a test program that you've used to verify
>   how getsubopt works.  (Don't worry about including it
>   in the man page -- I may do that later.)
Attached.

> > .TH GETSUBOPT 3 "2006-05-26" GNU
> > .
> 
> What are these dots doing?
Best-practice mentioned in roff.7:

o Never include empty or blank lines in a roff document.  Instead,
use the empty request (a line consisting of a dot only) or a line
comment .\" if a structuring element is needed.

> > .SH SYNOPSIS
> > \fB#define _XOPEN_SOURCE 500
> 
> I prefer that you use the ".BI" style for 
> prototypes (see fcntl.2); please change this.
You'll be happy to know that I recently started using them for argp.3.

BTW, where are \f[RPBI] documented?

I dislike .{nf,fi}, since it assumes a given terminal width.  By the
way, why does nroff |less seem to assume 80 character width?

Re: your previous question ("Re: Fixes from the Debian diff...",
[EMAIL PROTECTED])

groff_diff.7:
In GNU troff, as in UNIX troff, you should always follow a sentence
with either a newline or two spaces.

Also:

groff.7
In text paragraphs, it is advantageous to start each sentence at a
line of its own.

roff.7
o Start each sentence on a line of its own, for the spacing after a
dot is handled differently depending on whether it terminates an
abbreviation or a sentence.  To distinguish both cases, do a line
break after each sentence.

> > \fBNULL\fP-terminated list of accepted parameters.
> 
> Please don't format "NULL".
Done; could you provide a quantitative distinction between things
which should{,n't} be formatted?

> > The first equal sign in a parameter (if any) is interpreted as a
> > separator between the name and the value of that parameter.  The value
> > extends to the next comma, or (for the last parameter) to the end of
> > the string.  If the name of the parameter matches a known name from
> > \fItokens\fP, and a value string was found, \fBgetsubopt\fP() stores
> > to 
> 
> As noted for another of your pages, "stores to" isn't good grammer;
> 
> Better: "store the address of that string in *valuep"
Is your objection to the order of the clauses, or to the preposition?

Justin
/* make CFLAGS='-W -Wall -O3 -g -std=gnu99' getsubopt */
#define _GNU_SOURCE

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

int main(int argc, char **argv)
{
	char *const tok[]={
		"foo",
		"bar",
		"baz",
		NULL,
	};

	if (argc!=2) {
		fprintf(stderr, "Usage: %s <suboptstring>\n", *argv);
		exit(EXIT_FAILURE);
	}

	for (char *s=argv[1]; *s; ) {
		int ntok=-1+sizeof(tok)/sizeof(*tok);
		int ret;
		char *val;

		if (-1==(ret=getsubopt(&s, tok, &val))) {
			printf("Failed to match to token: %s\n", val);
			continue;
		}

		assert(ret<ntok);
		printf("Matched to token %d (%s); value: %s\n",
				ret, tok[ret], val);
	}

	exit(EXIT_SUCCESS);
}

Reply via email to