home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / HITECH-C / MOTOROLA.EXE / STDARG.H < prev    next >
C/C++ Source or Header  |  1993-04-21  |  1KB  |  53 lines

  1. /*    Macros for accessing variable arguments */
  2.  
  3. #ifndef    _STDARG
  4.  
  5. #if    (defined(i8051) && !EXTERNAL_STACK) || defined(m6805)
  6. typedef near void * va_list[1];
  7. #else
  8. typedef void *    va_list[1];
  9. #endif
  10.  
  11. #ifdef    m6805
  12. #define    va_start(ap, parmn)    *ap = __va_start()
  13. #pragma inline(__va_start)
  14. extern near void *        __va_start(void);
  15. #define    va_arg(ap, type)    (*(*(near type **)ap)++)
  16. #define    _STDARG
  17. #endif
  18.  
  19. #ifdef    i8086
  20. #ifdef    FLAT_MODEL
  21. #define    _STACK_ALIGN    4
  22. #else
  23. #define    _STACK_ALIGN    2
  24. #endif
  25. #endif
  26.  
  27. #ifdef    z80
  28. #define    _STACK_ALIGN    2
  29. #endif
  30.  
  31. #ifdef    _STACK_ALIGN    
  32. #define    va_start(ap, parmn)    *ap = (char *)&parmn + ((sizeof(parmn)+_STACK_ALIGN-1)&~(_STACK_ALIGN-1))
  33. #define    va_arg(ap, type)    (*(*(type **)ap)++)
  34. #define    _STDARG
  35. #endif
  36.  
  37. #if    i8051 && !EXTERNAL_STACK
  38. #define    va_start(ap, parmn)    *ap = &parmn;
  39. #define    va_arg(ap, type)    (*--(*(type **)ap))
  40. #define    _STDARG
  41. #endif
  42.  
  43. #ifndef    _STDARG
  44. #define    va_start(ap, parmn)    *ap = (char *)&parmn + sizeof parmn
  45. #define    va_arg(ap, type)    (*(*(type **)ap)++)
  46. #define    _STDARG
  47. #endif
  48.  
  49. #define    va_end(ap)
  50.  
  51.  
  52. #endif    /* STDARG */
  53.