[net.unix-wizards] %r format item in some printf implem

hamilton (09/14/82)

#R:sri-unix:-298900:uicsovax:5500025:000:604
uicsovax!hamilton    Sep 14 14:06:00 1982

i used to use %r printf format too, but after several system changes,
with attendant re-implementations of %r, and accidental recompilations
using the standard library, i have settled on using _doprnt() directly.
the example given by sri-unix!wales:
	oops (args)
	    char *args;
	{   fprintf (stderr, "ERROR: %r", &args);
	    exit (1);
	}
becomes:
	oops (fmt, args)
	    char *args;
	{   fprintf (stderr, "ERROR: ");
	    _doprnt (fmt, &args, stderr);
	    exit (1);
	}
with a minimum of extra work, you can stay portable...

    wayne hamilton ({decvax,ucbvax,harpo}!pur-ee!uiucdcs!uicsovax!hamilton)

nrh (09/18/82)

#R:sri-unix:-298900:esquire:900002:000:534
esquire!nrh    Sep 17 23:11:00 1982

***** esquire:net.unix-wizar / uicsovax!hamilton /  4:43 am  Sep 17, 1982

Just a note about the philosophy of using _doprnt instead of "%r"
for portability:

I think you're being hard on the authors of future standard I/O
libraries in using _doprnt, a function that is nowhere documented,
and which, by its name, seems meant to be used by routines 
internal to standard I/O only.

I've no better solution, unless you count an ongoing battle with 
successive implementations of printf(), but feel that _doprnt
should be out of sight.

trt (09/18/82)

Due to the lack of a clearly portable way to provide routines like:
	warn("Cannot open %s", filename);
Steve Daniel (duke!mcnc!swd) used the following for "A news":
	char	bfr[BIGENOUGH];	/* handy global buffer */
	...
	sprintf(bfr, "Cannot open %s", filename);
	warn(bfr);
This way of handling variable numbers of arguments is portable,
fairly easy to use, and can be used to invoke *any* routine,
not just those written to handle printf-style format:
	sprintf(bfr, "%s/%s", dir, name);
	fp = fopen(bfr, "r");

If sprintf(III) returned a pointer to the result string
(which alas is not true of some versions) one could just type:
	fp = fopen(sprintf(bfr, "%s/%s", dir, name), "r");

Tom Truscott (duke!trt)