1 /* varargs.h for MicroGnuEmacs 2a.  This one will work on systems that	*/
2 /* the non-varargs version of mg 1 did.					*/
3 /* based on the one I wrote for os9/68k .  I did not look at the bsd code. */
4 
5 /* by Robert A. Larson */
6 
7 /* assumptions made about how arguments are passed:			*/
8 /*	arguments are stored in a block of memory with no padding between. */
9 /*	The first argument will have the lowest address			*/
10 
11 /* varargs is a "portable" way to write a routine that takes a variable */
12 /* number of arguements.  This implemination agrees with both the 4.2bsd*/
13 /* and Sys V documentation of varargs.  Note that just because varargs.h*/
14 /* is used does not mean that it is used properly.			*/
15 
16 #define va_dcl		unsigned va_alist;
17 
18 #ifndef	__TURBOC__	/* 90.03.23  by A.Shirahashi */
19 #undef	va_start
20 #undef	va_arg
21 #undef	va_end
22 typedef	char *va_list;
23 #endif	/* __TURBOC__ */
24 
25 #if defined(__TURBOC__) && __TURBOC__ > 0x0200
26 /* 90.12.27  For Turbo C++ 1.0 by Junn Ohta */
27 typedef void *va_list;
28 #endif
29 
30 #define	va_start(pvar)		((pvar) = (char *)&va_alist)
31 
32 #ifdef	__TURBOC__	/* 90.03.23  by A.Shirahashi */
33 #define	va_arg(pvar,type)	((((char *)(pvar))+=sizeof(type)),*(((type *)(pvar)) - 1))
34 #else	/* NOT __TURBOC__ */
35 #define va_arg(pvar,type)	(((pvar)+=sizeof(type)),*(((type *)(pvar)) - 1))
36 #endif	/* __TURBOC__ */
37 
38 #define va_end(pvar)		/* va_end is simple */
39