home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 October / Chip_1997-10_cd.bin / tema / sybase / powerj / h.z / STDARG.H < prev    next >
C/C++ Source or Header  |  1996-11-06  |  3KB  |  98 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. #if !defined(_ENABLE_AUTODEPEND)
  10.   #pragma read_only_file;
  11. #endif
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. #ifndef _COMDEF_H_INCLUDED
  17.  #include <_comdef.h>
  18. #endif
  19.  
  20. #ifndef _VA_LIST_DEFINED
  21. #define _VA_LIST_DEFINED
  22. #if defined(__PPC__)
  23.  #if defined(__NT__)
  24.     typedef char * __va_list;
  25.  #else
  26.     typedef struct {
  27.       char  __gpr;
  28.       char  __fpr;
  29.       char  __reserved[2];
  30.       char *__input_arg_area;
  31.       char *__reg_save_area;
  32.     } __va_list;
  33.   #endif
  34. #elif defined(__AXP__)
  35.   typedef struct {
  36.     char *__base;
  37.     int   __offset;
  38.   } __va_list;
  39. #elif defined(__HUGE__) || defined(__SW_ZU)
  40.   typedef char _WCFAR *__va_list[1];
  41. #else
  42.   typedef char *__va_list[1];
  43. #endif
  44. #endif
  45. typedef __va_list va_list;
  46.  
  47. #if defined(__AXP__)
  48.  #define _AXP_WORD_SIZE        8
  49.  #define _AXP_FLOAT_SIZE    8
  50.  #define _AXP_FLOAT_REGS    6
  51.  extern void *__builtin_va_start(va_list*, ...);
  52.  #pragma intrinsic(__builtin_va_start);
  53.  #define va_start(ap,pn) (__builtin_va_start(&ap,pn,1))
  54.  #define va_arg(ap,type) ((ap).__offset+=\
  55.      ((sizeof(type)+_AXP_WORD_SIZE-1)&~(_AXP_WORD_SIZE-1)),\
  56.      (*(type *)((ap).__base+(ap).__offset-\
  57.        ((__builtin_isfloat(type)&&(ap).__offset <=\
  58.          (_AXP_FLOAT_REGS*_AXP_FLOAT_SIZE)) ?\
  59.        (_AXP_FLOAT_REGS*_AXP_FLOAT_SIZE)+_AXP_FLOAT_SIZE :\
  60.              ((sizeof(type)+_AXP_WORD_SIZE-1)&~(_AXP_WORD_SIZE-1))))))
  61.  #define va_end(ap)     ((void)0)
  62. #elif defined(__PPC__)
  63.  #if defined(__NT__)
  64.   #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
  65.   #define    _ALIGNIT(ap,t) \
  66.     ((((int)(ap))+(sizeof(t)<8?3:7)) & (sizeof(t)<8?~3:~7))
  67.   #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )
  68.   #define va_arg(ap,t)    ( *(t *)((ap = (char *) (_ALIGNIT(ap, t) + _INTSIZEOF(t))) - _INTSIZEOF(t)) )
  69.   #define va_end(ap)      ( ap = (va_list)0 )
  70.  #else
  71.   extern void *__builtin_va_start( va_list * );
  72.   #pragma intrinsic(__builtin_va_start);
  73.   #define va_start(ap,pn) (__builtin_va_start(&ap,pn))
  74.   #define va_arg(ap,type) (__builtin_va_arg(&ap,type))
  75.  #endif
  76. #else
  77.  #if defined(__HUGE__) || defined(__SW_ZU)
  78.   #define va_start(ap,pn) ((ap)[0]=(char _WCFAR*)&pn+\
  79.       ((sizeof(pn)+sizeof(int)-1)&~(sizeof(int)-1)),(void)0)
  80.   #define va_arg(ap,type)     ((ap)[0]+=\
  81.       ((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)),\
  82.       (*(type _WCFAR*)((ap)[0]-((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)))))
  83.   #define va_end(ap)        ((ap)[0]=0,(void)0)
  84.  #else
  85.   #define va_start(ap,pn) ((ap)[0]=(char *)&pn+\
  86.       ((sizeof(pn)+sizeof(int)-1)&~(sizeof(int)-1)),(void)0)
  87.   #define va_arg(ap,type)     ((ap)[0]+=\
  88.       ((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)),\
  89.       (*(type *)((ap)[0]-((sizeof(type)+sizeof(int)-1)&~(sizeof(int)-1)))))
  90.   #define va_end(ap)        ((ap)[0]=0,(void)0)
  91.  #endif
  92. #endif
  93.  
  94. #ifdef __cplusplus
  95. };
  96. #endif
  97. #endif
  98.