home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / OS9_Unix.lzh / DEFS / varargs.h < prev   
Text File  |  1992-09-01  |  1KB  |  36 lines

  1. /* varargs.h for os9/68k by Robert A. Larson    */
  2. /* version 0 for os9/68k C 2.0 04/20/86        */
  3. /* varargs is a "portable" way to write a routine that takes a variable */
  4. /* number of arguements.  The documentation of varargs is part of the     */
  5. /* unix 4.2 BSD distribution.                        */
  6.  
  7. #define va_alist    _va_arg1, _va_arg2, _va_arg3
  8.  
  9. #define va_dcl        unsigned _va_arg1, _va_arg2, _va_arg3;
  10.  
  11. typedef    struct {
  12.       unsigned _va_at;  /* number of arguments used, 0, 1, or more  */
  13.                             /* (double as first arg counts as 2)        */
  14.       union {
  15.         struct {
  16.           unsigned _va_uns1, _va_uns2;
  17.         } _va_uuns;
  18.         double _va_udouble;
  19.       } _va_union;
  20.       char *_va_pointer;
  21.         } va_list;
  22.  
  23. #define    va_start(pvar)    ( (pvar)._va_at = 0,                \
  24.               (pvar)._va_union._va_uuns._va_uns1 = _va_arg1,\
  25.               (pvar)._va_union._va_uuns._va_uns2 = _va_arg2,\
  26.               (pvar)._va_pointer = (char *) &_va_arg3    \
  27.             )
  28.  
  29. #define va_arg(pvar,type)    (((pvar)._va_at++)?(((pvar)._va_at==2)?(\
  30. (sizeof(type)==8)?(*(((type*)((pvar)._va_pointer))++)):(type)(\
  31. (pvar)._va_union._va_uuns._va_uns2)):(*(((type*)((pvar)._va_pointer))++)\
  32. )):((sizeof(type)==8)?((++(pvar)._va_at),(type)(pvar)._va_union._va_udouble\
  33. ):(type)((pvar)._va_union._va_uuns._va_uns1)))
  34.  
  35. #define va_end(pvar)                /* va_end is simple */
  36.