home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.14 / udk / usr / include / stdarg.h < prev    next >
C/C++ Source or Header  |  1998-08-19  |  3KB  |  130 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ifndef _STDARG_H
  12. #define _STDARG_H
  13. #ident    "@(#)sgs-head:i386/head/stdarg.h    1.16"
  14.  
  15. #ifndef _VA_LIST
  16. #if #machine(i860)
  17. #    define _VA_LIST    struct _va_list
  18.     struct _va_list
  19.     {
  20.         unsigned    _ireg_used;
  21.         unsigned    _freg_used;
  22.         long        *_reg_base;
  23.         long        *_mem_ptr;
  24.     };
  25. #else
  26. #    define _VA_LIST    void *
  27. #endif
  28. #endif /*_VA_LIST*/
  29.  
  30. #ifndef __VA_LIST
  31. #   define __VA_LIST
  32.     typedef _VA_LIST    va_list;
  33. #endif
  34.  
  35. #if #machine(i860)
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #ifdef __HIGHC__
  42.  
  43. extern void    *_va_arg(va_list *, unsigned, unsigned, unsigned);
  44.  
  45. #define va_start(ap, pn)                \
  46.     {extern char    _ADDRESS_OF_MEMOFLO_AREA[];    \
  47.     extern long    _ADDRESS_OF_INT_END_AREA[];    \
  48.     extern int    _PARMBYTES_USEDI##pn[],        \
  49.             _PARMBYTES_USEDF##pn[],        \
  50.             _PARMBYTES_USEDM##pn[];        \
  51.     ap._ireg_used = (int)_PARMBYTES_USEDI##pn>>2,    \
  52.     ap._freg_used = (int)_PARMBYTES_USEDF##pn>>2,    \
  53.     ap._mem_ptr = (void *)&pn,            \
  54.     ap._mem_ptr = _ADDRESS_OF_MEMOFLO_AREA +    \
  55.         (int)_PARMBYTES_USEDM##pn;        \
  56.     ap._reg_base = (int)_ADDRESS_OF_INT_END_AREA-80;\
  57.     }
  58. #define va_arg(ap, ty)    (*(ty *)_va_arg(&ap,sizeof(ty),_INFO(ty,0),_INFO(ty,2)))
  59.  
  60. #else /*!__HIGHC__*/
  61.  
  62. extern void    __i860_builtin_va_start(va_list *);
  63. extern void    *__builtin_va_arg();
  64.  
  65. #define va_start(ap,pn)    __i860_builtin_va_start(&ap)
  66. #define va_arg(ap, ty)    (*(ty *)__builtin_va_arg(&ap, (ty *)0))
  67.  
  68. #endif /*__HIGHC__*/
  69.  
  70. #ifdef __cplusplus
  71. }
  72. #endif
  73.  
  74. #else /*!#machine(i860)*/
  75.  
  76. #if #machine(sparc)
  77.  
  78. #define va_start(ap,pn)    ((void)(ap = (va_list)&__builtin_va_alist))
  79.  
  80. #elif __STDC__ - 0 != 0 || !defined(__USLC__)
  81.  
  82. #define va_start(ap,pn)    ((void)(ap = (void *)((char *)&pn \
  83.         + ((sizeof(pn)+(sizeof(int)-1)) & ~(sizeof(int)-1)))))
  84.  
  85. #else
  86.  
  87. #define va_start(ap,pn)    ((void)(ap = (void *)((char *)&...)))
  88.  
  89. #endif /*#machine(sparc)*/
  90.  
  91. #if #machine(m88k)
  92.  
  93. #define va_align(ap,ty)    ((char *)(((int)ap + sizeof(ty)-1) & (~(sizeof(ty)-1))))
  94. #define va_arg(ap, ty)    (((ty *)(ap = va_align(ap, ty) + sizeof(ty)))[-1])
  95.  
  96. #elif #machine(sparc)
  97.  
  98. #define va_arg(ap, ty)    (((ty *)__builtin_va_arg_incr((ty *)ap))[0])
  99.  
  100. #elif #machine(i386) && defined(__cplusplus)
  101.  
  102. #define va_arg(ap, mode) ( \
  103.         ap = (va_list)((char *)ap + (sizeof(mode) + sizeof(int) - 1 \
  104.              & ~(sizeof(int)-1))), \
  105.         sizeof(mode) < sizeof(int) ? \
  106.             *(mode *)((char *)ap - sizeof(int)) : \
  107.             ((mode *)ap)[-1])
  108.  
  109. #else
  110.  
  111. #define va_arg(ap, ty)    (((ty *)(ap = (char *)ap + sizeof(ty)))[-1])
  112.  
  113. #endif /*#machine(m88k)*/
  114.  
  115. #endif /*#machine(i860)*/
  116.  
  117. #ifdef __cplusplus
  118. extern "C" {
  119. #endif
  120.  
  121. extern void    va_end(va_list);
  122.  
  123. #ifdef __cplusplus
  124. }
  125. #endif
  126.  
  127. #define va_end(ap)    ((void)0)
  128.  
  129. #endif /*_STDARG_H*/
  130.