[comp.arch] request for info about weird varargs implementations

gwyn@brl-smoke.ARPA (Doug Gwyn ) (10/08/87)

Would anyone who knows of an implementation of <varargs.h>
(or <stdarg.h>) that doesn't approximate the usual model:

	typedef char *va_list;
	#define va_dcl int va_alist;
	#define va_start(list) list = (char *) &va_alist
	#define va_end(list)
	#ifdef gould
	#define va_arg(list, mode) ((mode *)(list = \
		(char *) (sizeof(mode) > 4 ? (int)list + 2*8 - 1 & -8 \
					   : (int)list + 2*4 - 1 & -4)))[-1]
	#elif defined(u370)
	#define va_arg(list, mode) ((mode *)(list = \
		(char *) ((int)list + 2*sizeof(mode) - 1 & -sizeof(mode))))[-1]
	#else	/* VAX, PDP-11, 3B, etc. */
	#define va_arg(list, mode) ((mode *)(list += sizeof(mode)))[-1]
	#endif

please send me as much information as you can about it.
In particular, I would like to hear from anyone who thinks
that va_start() and va_end() must expand to something
containing, respectively, { and }, as I remember seeing
once on a Pyramid OSx system.

This information will be used to help determine the ANSI C
specs for <stdarg.h>, so it's important!  Send me E-mail
directly, posting to the newsgroup only if you can't seem
to get mail to me.  Thanks.
	- Gwyn@BRL.MIL