home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.14 / udk / usr / include / varargs.h < prev    next >
C/C++ Source or Header  |  1998-08-19  |  3KB  |  103 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 _VARARGS_H
  12. #define _VARARGS_H
  13.  
  14. #ident    "@(#)sgs-head:i386/head/varargs.h    1.4.4.3"
  15.  
  16. #ifdef m88k
  17. #include <sys/varargs.h>
  18. #else    /* not m88k */
  19.  
  20. #ifndef _VA_LIST
  21. #ifdef i860 
  22. #    define _VA_LIST    struct _va_list
  23.     struct _va_list
  24.     {
  25.         unsigned    _ireg_used;
  26.         unsigned    _freg_used;
  27.         long        *_reg_base;
  28.         long        *_mem_ptr;
  29.     };
  30. #else
  31. #    define _VA_LIST    void *
  32. #endif
  33. #endif /*_VA_LIST*/
  34.  
  35. #ifndef __VA_LIST
  36. #   define __VA_LIST
  37.     typedef _VA_LIST    va_list;
  38. #endif
  39.  
  40. #ifdef    i860
  41.  
  42. #ifndef __HIGHC__
  43. extern void  __i860_builtin_va_start(va_list *);
  44. extern void *__builtin_va_arg();
  45. #define va_start(ap) __i860_builtin_va_start(&ap)
  46. #define va_arg(ap,type) (*(type *)__builtin_va_arg(&ap, (type *)0))
  47. #define va_alist __builtin_va_alist
  48. #define va_dcl int __builtin_va_alist;
  49. #else    /* __HIGHC__ version */
  50. /* the _va_alist-4 in the code below is a kludge and
  51.    va_alist better not be in memory */
  52. #define va_start(ap)                    \
  53.     {extern char _ADDRESS_OF_MEMOFLO_AREA[];    \
  54.     extern long _ADDRESS_OF_INT_END_AREA[];        \
  55.     extern int  _PARMBYTES_USEDI##_va_alist[],    \
  56.             _PARMBYTES_USEDF##_va_alist[],    \
  57.             _PARMBYTES_USEDM##_va_alist[];    \
  58.     ap.ireg_used = ((int)_PARMBYTES_USEDI##_va_alist-4)>>2,\
  59.     ap.freg_used = (int)_PARMBYTES_USEDF##_va_alist>>2,\
  60.     ap.mem_ptr = (void *)&_va_alist,        \
  61.     ap.mem_ptr = _ADDRESS_OF_MEMOFLO_AREA +        \
  62.         (int)_PARMBYTES_USEDM##_va_alist;    \
  63.     ap.reg_base = (int)_ADDRESS_OF_INT_END_AREA-80;    \
  64.     }
  65. #define va_arg(ap,type) \
  66.     (*(type*) _va_arg(&ap,sizeof(type),_INFO(type,0),_INFO(type,2)))
  67. #define va_alist _va_alist, ...
  68. #define va_dcl int _va_alist;
  69. extern void *_va_arg(va_list *ap, unsigned len, unsigned align, unsigned class);
  70. #endif  /* HIGHC */
  71.  
  72.  
  73. #else    /* i860 */
  74.  
  75. #if sparc
  76. #define va_alist __builtin_va_alist
  77. #endif /* sparc */
  78.  
  79. #define va_dcl int va_alist;
  80.  
  81. #if sparc
  82. #define va_start(list) (void) (list = (va_list) &va_alist)
  83. #else
  84. #define va_start(list) list = (void *) &va_alist
  85. #endif
  86.  
  87. #if sparc
  88. #if defined(__STDC__)
  89. #define va_arg(list, mode) ((mode *)__builtin_va_arg_incr((mode *)list))[0]
  90. #else
  91. #define va_arg(list, mode) ((mode *)(list = (char *)list + sizeof(mode)))[-1]
  92. #endif
  93. #else /* not sparc */
  94. #define va_arg(list, mode)  (((mode *)(list = (char *)list + sizeof(mode)))[-1])
  95. #endif
  96. #endif    /* i860 */
  97.  
  98. #define va_end(list)
  99.  
  100. #endif    /* m88k */
  101.  
  102. #endif    /* _VARARGS_H */
  103.