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