//==============================================================================
//  Component:
//      STD (C++ Standard Library)
//
//  Library:
//      $KW; $FN; $EKW;
//      $KW; $Own; $Ver; $ChkD; $EKW;
//
//  Purpose:
//
//  Copyright (C) 1998-2001, Interstron, Ltd.
//  All rights reserved.
//==###=========================================================================
#ifndef _CSTDARG
#define _CSTDARG

#ifdef  __cplusplus
namespace std{
    extern "C" {
#endif

#define _INTERNAL_IN_STD


#ifdef _INTERNAL_IN_STD
#ifndef _CARG__
#define _CARG__
typedef void * va_list;
#endif
#endif
#ifdef _INTERNAL_NOT_IN_STD
#ifndef _ARG__
#define _ARG__
typedef void * va_list;
#endif
#endif

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )


#if __NM__
//#define va_start(ap,v)  ( ap = (va_list)((char*)&v - _INTSIZEOF(v)) )
//#define va_arg(ap,t)    ( *(t *)(__builtin_va_arg_rev(&ap, (t *)0)) )

/*	 -1? "-",     ,  1, ,  v  
      ,   -
      */
#define va_start(ap,v)  ( ap = (va_list)((char*)&v - 1) )
#define va_arg(ap,t)    ( *(t *)(__builtin_va_arg_rev(&ap, (t *)0)) )
#else
#define va_start(ap,v)  ( ap = (va_list)((char*)&v + _INTSIZEOF(v)) )
#define va_arg(ap,t)    ( *(t *)(__builtin_va_arg(&ap, (t *)0)) )
#endif

void* __builtin_va_arg_rev(va_list* list, ...);
void* __builtin_va_arg(va_list* list, ...);


#define va_end(ap)      ( ap = (va_list)0 )
#undef _INTERNAL_IN_STD

#ifdef  __cplusplus
    }
}
#endif

#endif
//==###=========================================================================
//  End of module:
//      $KW; $FN; $EKW;
//==============================================================================
