home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / sybase / starbuck / h.z / STDARG.H < prev    next >
C/C++ Source or Header  |  1996-07-24  |  3KB  |  95 lines

  1. /*
  2.  *  stdarg.h    Variable argument macros
  3.  *        definitions for use with variable argument lists
  4.  *
  5.  *  Copyright by WATCOM International Corp. 1988-1996.  All rights reserved.
  6.  */
  7. #ifndef _STDARG_H_INCLUDED
  8. #define _STDARG_H_INCLUDED
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12.  
  13. #ifndef _COMDEF_H_INCLUDED
  14.  #include <_comdef.h>
  15. #endif
  16.  
  17. #ifndef _VA_LIST_DEFINED
  18. #define _VA_LIST_DEFINED
  19. #if defined(__PPC__)
  20.  #if defined(__NT__)
  21.     typedef char * __va_list;
  22.  #else
  23.     typedef struct {
  24.       char  __gpr;
  25.       char  __fpr;
  26.       char  __reserved[2];
  27.       char *__input_arg_area;
  28.       char *__reg_save_area;
  29.     } __va_list;
  30.   #endif
  31. #elif defined(__AXP__)
  32.   typedef struct {
  33.     char *__base;
  34.     int   __offset;
  35.   } __va_list;
  36. #elif defined(__HUGE__) || defined(__SW_ZU)
  37.   typedef char _WCFAR *__va_list[1];
  38. #else
  39.   typedef char *__va_list[1];
  40. #endif
  41. #endif
  42. typedef __va_list va_list;
  43.  
  44. #if defined(__AXP__)
  45.  #define _AXP_WORD_SIZE        8
  46.  #define _AXP_FLOAT_SIZE    8
  47.  #define _AXP_FLOAT_REGS    6
  48.  extern void *__builtin_va_start(va_list*, ...);
  49.  #pragma intrinsic(__builtin_va_start);
  50.  #define va_start(ap,pn) (__builtin_va_start(&ap,pn,1))
  51.  #define va_arg(ap,type) ((ap).__offset+=\
  52.      ((sizeof(type)+_AXP_WORD_SIZE-1)&~(_AXP_WORD_SIZE-1)),\
  53.      (*(type *)((ap).__base+(ap).__offset-\
  54.        ((__builtin_isfloat(type)&&(ap).__offset <=\
  55.          (_AXP_FLOAT_REGS*_AXP_FLOAT_SIZE)) ?\
  56.        (_AXP_FLOAT_REGS*_AXP_FLOAT_SIZE)+_AXP_FLOAT_SIZE :\
  57.              ((sizeof(type)+_AXP_WORD_SIZE-1)&~(_AXP_WORD_SIZE-1))))))
  58.  #define va_end(ap)     ((void)0)
  59. #elif defined(__PPC__)
  60.  #if defined(__NT__)
  61.   #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
  62.   #define    _ALIGNIT(ap,t) \
  63.     ((((int)(ap))+(sizeof(t)<8?3:7)) & (sizeof(t)<8?~3:~7))
  64.   #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )
  65.   #define va_arg(ap,t)    ( *(t *)((ap = (char *) (_ALIGNIT(ap, t) + _INTSIZEOF(t))) - _INTSIZEOF(t)) )
  66.   #define va_end(ap)      ( ap = (va_list)0 )
  67.  #else
  68.   extern void *__builtin_va_start( va_list * );
  69.   #pragma intrinsic(__builtin_va_start);
  70.   #define va_start(ap,pn) (__builtin_va_start(&ap,pn))
  71.   #define va_arg(ap,type) (__builtin_va_arg(&ap,type))
  72.  #endif
  73. #else
  74.  #if defined(__HUGE__) || defined(__SW_ZU)
  75.   #define va_start(ap,pn) ((ap)[0]=(char _WCFAR*)&pn+\
  76.       ((sizeof(pn)+sizeof(int)-1)&~(sizeof(int)-1)),(void)0)
  77.   #define va_arg(ap,type)     ((ap)[0]+=\
  78.       ((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)),\
  79.       (*(type _WCFAR*)((ap)[0]-((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)))))
  80.   #define va_end(ap)        ((ap)[0]=0,(void)0)
  81.  #else
  82.   #define va_start(ap,pn) ((ap)[0]=(char *)&pn+\
  83.       ((sizeof(pn)+sizeof(int)-1)&~(sizeof(int)-1)),(void)0)
  84.   #define va_arg(ap,type)     ((ap)[0]+=\
  85.       ((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)),\
  86.       (*(type *)((ap)[0]-((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)))))
  87.   #define va_end(ap)        ((ap)[0]=0,(void)0)
  88.  #endif
  89. #endif
  90.  
  91. #ifdef __cplusplus
  92. };
  93. #endif
  94. #endif
  95.