stdlib.mh

来自「开放源码的编译器open watcom 1.6.0版的源代码」· MH 代码 · 共 627 行 · 第 1/2 页

MH
627
字号
_WCRTLINK extern wchar_t  *_wcsset( wchar_t *, wchar_t );
_WCRTLINK extern wchar_t  *_wcsnset( wchar_t *, int, _w_size_t );
_WCRTLINK extern wchar_t  *_wgetenv( const wchar_t *__name );
_WCRTLINK extern int      _wsetenv( const wchar_t *__name,
                                      const wchar_t *__newvalue,
                                      int __overwrite );
_WCRTLINK extern int      _wputenv( const wchar_t *__env_string );
:segment !QNX & !LINUX
_WCRTLINK extern void     _wsearchenv( const wchar_t *__name,
                                         const wchar_t *__env_var,
                                         wchar_t *__buf );
_WCRTLINK extern void     _wsplitpath2( const wchar_t *__inp,
                                          wchar_t *__outp, wchar_t **__drive,
                                          wchar_t **__dir, wchar_t **__fn,
                                          wchar_t **__ext );
_WCRTLINK extern void     _wsplitpath( const wchar_t *__path,
                                         wchar_t *__drive, wchar_t *__dir,
                                         wchar_t *__fname, wchar_t *__ext );
_WCRTLINK extern int      _wsystem( const wchar_t *__cmd );
:endsegment
:endsegment

_WCRTLINK extern int     setenv( const char *__name, const char *__newvalue, int __overwrite );
_WCRTLINK extern void    unsetenv( const char *name );

_WCRTLINK extern int     putenv( const char *__string );
_WCRTLINK extern void    _searchenv( const char *__name, const char *__env_var, char *__buf );
:segment QNX
_WCRTLINK extern int     need_usage( char **argv );
_WCRTLINK extern int     print_usage( char **argv );
_WCRTLINK extern void    searchenv( const char *__name, const char *__env_var, char *__buf );
:endsegment
_WCRTLINK extern void    _splitpath2( const char *__inp, char *__outp,
                                      char **__drive, char **__dir,
                                      char **__fn, char **__ext );
_WCRTLINK extern void    _splitpath( const char *__path, char *__drive,
                                     char *__dir, char *__fname, char *__ext );
_WCRTLINK extern void    swab( char *__src, char *__dest, int __num );
_WCRTLINK extern char    *ultoa( unsigned long int __value, char *__buf, int __radix );
_WCRTLINK extern char    *ulltoa( unsigned long long int __value, char *__buf, int __radix );
_WCRTLINK extern char    *_ultoa( unsigned long int __value, char *__buf, int __radix );
_WCRTLINK extern char    *_ulltoa( unsigned long long int __value, char *__buf, int __radix );
_WCRTLINK extern char    *utoa( unsigned int __value, char *__buf, int __radix );
_WCRTLINK extern char    *_utoa( unsigned int __value, char *__buf, int __radix );

:segment !CNAME
#if defined(__INLINE_FUNCTIONS__)
 #pragma intrinsic(_rotl,_rotr)
 #if defined(__386__) || defined(__AXP__) || defined(__PPC__)
  #pragma intrinsic(_lrotl,_lrotr)
 #endif
#endif
:endsegment

:segment !CNAME
:include saferpro.sp

_WCRTLINK extern constraint_handler_t set_constraint_handler_s( constraint_handler_t __handler );
_WCRTLINK extern void abort_handler_s( const char * __restrict __msg, void * __restrict __ptr, errno_t __error );
_WCRTLINK extern void ignore_handler_s( const char * __restrict __msg, void * __restrict __ptr, errno_t __error );

_WCRTLINK extern errno_t getenv_s( size_t * __restrict __len, char * __restrict __value, rsize_t __maxsize, const char * __restrict __name );

_WCRTLINK extern void    *bsearch_s( const void *__key, const void *__base, rsize_t __nmemb, rsize_t __size,
                                     int (*__compar)(const void *__x, const void *__y, void *__context), void *__context);
_WCRTLINK extern errno_t qsort_s( void *__base, rsize_t __nmemb, rsize_t __size,
                                  int (*__compar)(const void *__x, const void *__y, void *__context), void *__context);

_WCRTLINK extern errno_t wctomb_s( int * __restrict __status, char * __restrict __s, rsize_t __smax, wchar_t __wc );
_WCRTLINK extern errno_t mbstowcs_s( size_t * __restrict __retval, wchar_t * __restrict __dst, rsize_t __dstmax, const char * __restrict __src, rsize_t __len );
_WCRTLINK extern errno_t wcstombs_s( size_t * __restrict __retval, char * __restrict __dst, rsize_t __dstmax, const wchar_t * __restrict __src, rsize_t __len );

:include saferepi.sp
:endsegment

/* min and max macros */
#if !defined(__max)
#define __max(a,b)  (((a) > (b)) ? (a) : (b))
#endif
#if !defined(max) && !defined(__cplusplus)
#define max(a,b)  (((a) > (b)) ? (a) : (b))
#endif
#if !defined(__min)
#define __min(a,b)  (((a) < (b)) ? (a) : (b))
#endif
#if !defined(min) && !defined(__cplusplus)
#define min(a,b)  (((a) < (b)) ? (a) : (b))
#endif

/*
 * The following sizes are the maximum sizes of buffers used by the _fullpath()
 * _makepath() and _splitpath() functions.  They include space for the '\0'
 * terminator.
 */
:segment QNX | LINUX
#define _MAX_DRIVE      48      /*  maximum length of node name w/ '\0' */
#define _MAX_NODE    _MAX_DRIVE /*  maximum length of node name w/ '\0' */
#define _MAX_DIR        256     /*  maximum length of subdirectory      */
#define _MAX_FNAME      48      /*  maximum length of a file name       */
#define _MAX_EXT        48      /*  maximum length of a file extension  */
:elsesegment DOS
#if defined(__NT__) || defined(__OS2__) || defined(__WATCOM_LFN__)
#define _MAX_DRIVE   3  /* maximum length of drive component */
#define _MAX_DIR    256 /* maximum length of path component */
#define _MAX_FNAME  256 /* maximum length of file name component */
#define _MAX_EXT    256 /* maximum length of extension component */
#else
#define _MAX_DRIVE   3  /* maximum length of drive component */
#define _MAX_DIR    130 /* maximum length of path component */
#define _MAX_FNAME   9  /* maximum length of file name component */
#define _MAX_EXT     5  /* maximum length of extension component */
#ifndef _MAX_NAME
#define _MAX_NAME    13  /* maximum length of file name (with extension) */
#endif
#endif
:endsegment

#define _MAX_PATH2 (_MAX_PATH+3) /* maximum size of output buffer
                                    for _splitpath2() */

_WCRTLINK char     ***__get_environ_ptr( void );
#if defined(__FUNCTION_DATA_ACCESS)
 #define environ   (*__get_environ_ptr())
:segment !QNX & !LINUX
#elif defined(__SW_BR) || defined(_RTDLL)
 #define environ   environ_br
:endsegment
#endif
_WCRTDATA extern char **_WCNEAR environ;    /* pointer to environment table */

:segment !QNX & !LINUX
#if defined(__NT__)
 _WCRTLINK int      *__get_fileinfo_ptr( void );
 #if defined(__FUNCTION_DATA_ACCESS)
  #define _fileinfo (*__get_fileinfo_ptr())
 #elif defined(__SW_BR) || defined(_RTDLL)
  #define _fileinfo _fileinfo_br
 #endif
 _WCRTDATA extern int _fileinfo;        /* for inheriting POSIX handles */
#endif
:endsegment
:segment !QNX & !NO_WIDECHAR
:segment !LINUX
_WCRTLINK wchar_t  ***__get_wenviron_ptr( void );
#if defined(__FUNCTION_DATA_ACCESS)
 #define _wenviron (*__get_wenviron_ptr())
#elif defined(__SW_BR) || defined(_RTDLL)
 #define _wenviron _wenviron_br
#endif
#ifdef __NETWARE__
 _WCRTDATA extern wchar_t **_WCDATA _wenviron;   /* pointer to wide environment */
#else
:endsegment
 _WCRTDATA extern wchar_t **_WCNEAR _wenviron;   /*  pointer to wide environment */
:segment !LINUX
#endif
:endsegment
:endsegment

:include errno.sp

:segment !QNX & !LINUX
_WCRTLINK extern int    *__get_doserrno_ptr( void );
#define _doserrno       (*__get_doserrno_ptr())     /* DOS system error code value */

#if !defined(__NETWARE__)
#define sys_errlist _sys_errlist
#define sys_nerr _sys_nerr
#endif
_WCRTLINK unsigned           *__get_psp_ptr( void );
_WCRTLINK unsigned char      *__get_osmode_ptr( void );
_WCRTLINK int                *__get_fmode_ptr( void );
_WCRTLINK char               **__get_sys_errlist_ptr( void );
_WCRTLINK int                *__get_sys_nerr_ptr( void );
_WCRTLINK unsigned           *__get_minreal_ptr( void );
_WCRTLINK unsigned long      *__get_win_alloc_flags_ptr( void );
_WCRTLINK unsigned long      *__get_win_realloc_flags_ptr( void );
#if defined(__FUNCTION_DATA_ACCESS)
 #define _psp                (*__get_psp_ptr())
 #define _osmode             (*__get_osmode_ptr())
 #define _fmode              (*__get_fmode_ptr())
 #define _sys_errlist        (*__get_sys_errlist_ptr())
 #define _sys_nerr           (*__get_sys_nerr_ptr())
 #define __minreal           (*__get_minreal_ptr())
 #define __win_alloc_flags   (*__get_win_alloc_flags_ptr())
 #define __win_realloc_flags (*__get_win_realloc_flags_ptr())
#elif defined(__SW_BR) || defined(_RTDLL)
 #define _psp                _psp_br
 #define _osmode             _osmode_br
 #define _fmode              _fmode_br
 #define _sys_errlist        _sys_errlist_br
 #define _sys_nerr           _sys_nerr_br
 #define __minreal           __minreal_br
 #define __win_alloc_flags   __win_alloc_flags_br
 #define __win_realloc_flags __win_realloc_flags_br
#endif
_WCRTDATA extern unsigned _WCDATA    _psp;      /* Program Segment Prefix */
_WCRTDATA extern unsigned char _WCNEAR _osmode; /* DOS_MODE or OS2_MODE */
_WCRTDATA extern int _WCNEAR        _fmode;     /* default file translation mode */
_WCRTDATA extern char               *_sys_errlist[];/* strerror error message table */
_WCRTDATA extern int _WCNEAR        _sys_nerr;  /* # of entries in _sys_errlist array */
_WCRTDATA extern unsigned _WCDATA   __minreal;  /* DOS4GW var for WLINK MINREAL option*/
_WCRTDATA extern unsigned long _WCDATA __win_alloc_flags; /* Windows allocation flags */
_WCRTDATA extern unsigned long _WCDATA __win_realloc_flags;/* Windows reallocation flags */
#define DOS_MODE 0                              /* Real Address Mode */
#define OS2_MODE 1                              /* Protected Address Mode */

:endsegment
_WCRTLINK unsigned      *__get_amblksiz_ptr( void );
_WCRTLINK unsigned char *__get_osmajor_ptr( void );
_WCRTLINK unsigned char *__get_osminor_ptr( void );
#if defined(__FUNCTION_DATA_ACCESS)
 #define _amblksiz      (*__get_amblksiz_ptr())
 #define _osmajor       (*__get_osmajor_ptr())
 #define _osminor       (*__get_osminor_ptr())
#elif defined(__SW_BR) || defined(_RTDLL)
 #define _amblksiz      _amblksiz_br
 #define _osmajor       _osmajor_br
 #define _osminor       _osminor_br
#endif
_WCRTDATA extern unsigned _WCNEAR       _amblksiz;   /*  mallocs done in multiples of    */
_WCRTDATA extern unsigned char _WCNEAR  _osmajor;    /*  O/S major version # */
_WCRTDATA extern unsigned char _WCNEAR  _osminor;    /*  O/S minor version # */

:segment !QNX & !LINUX
#if defined(__NT__)
 _WCRTLINK unsigned short   *__get_osbuild_ptr( void );
 _WCRTLINK unsigned int     *__get_osver_ptr( void );
 _WCRTLINK unsigned int     *__get_winmajor_ptr( void );
 _WCRTLINK unsigned int     *__get_winminor_ptr( void );
 _WCRTLINK unsigned int     *__get_winver_ptr( void );
 #if defined(__FUNCTION_DATA_ACCESS)
  #define _osbuild          (*__get_osbuild_ptr())
  #define _osver            (*__get_osver_ptr())
  #define _winmajor         (*__get_winmajor_ptr())
  #define _winminor         (*__get_winminor_ptr())
  #define _winver           (*__get_winver_ptr())
 #elif defined(__SW_BR) || defined(_RTDLL)
  #define _osbuild          _osbuild_br
  #define _osver            _osver_br
  #define _winmajor         _winmajor_br
  #define _winminor         _winminor_br
  #define _winver           _winver_br
 #endif
 _WCRTDATA extern unsigned short _WCDATA _osbuild;  /*  O/S build revision  */
 _WCRTDATA extern unsigned int _WCDATA _osver;      /*  O/S build revision  */
 _WCRTDATA extern unsigned int _WCDATA _winmajor;   /*  O/S major version # */
 _WCRTDATA extern unsigned int _WCDATA _winminor;   /*  O/S minor version # */
 _WCRTDATA extern unsigned int _WCDATA _winver;     /*  O/S version #       */
#endif
:endsegment
extern  int       __argc;       /* number of cmd line args */
extern  char    **__argv;       /* vector of cmd line args */
:segment !QNX & !LINUX & !NO_WIDECHAR
#if defined(__NT__) || (defined(__OS2__) && (defined(__386__) || defined(__PPC__)))
extern  int       __wargc;      /* number of wide cmd line args */
extern  wchar_t **__wargv;      /* vector of wide cmd line args */
#endif
:endsegment

:segment QNX | LINUX
:include alloca.sp
:endsegment

:segment QNX
#if defined(__386__)
:endsegment
:segment QNX | LINUX
_WCRTLINK extern int          brk( void *endds );
_WCRTLINK extern void _WCNEAR *sbrk( int incr );
:endsegment
:segment QNX
#else
:endsegment
:segment !LINUX
_WCRTLINK extern void _WCNEAR *__brk( unsigned __new_brk_value );
_WCRTLINK extern void _WCNEAR *sbrk( int __increment );
:endsegment
:segment QNX
#endif
:endsegment

typedef void (*onexit_t)( void );
_WCRTLINK extern onexit_t     onexit( onexit_t __func );

#endif /* End of extensions section. */

:include poppack.sp
:segment CNAME
:include cplusepi.sp
:endsegment

:segment !CNAME
#endif /* __cplusplus */
:endsegment

#endif

:segment CNAME
:: For C++ provide the appropriate overloaded signatures. These signatures
:: must not be extern "C" (which is why they are down here).
#ifndef _INCLUDED_FROM_STDLIB_H
#ifndef _CSTDLIB_AUX_INCLUDED
#define _CSTDLIB_AUX_INCLUDED
namespace std {
  inline long int abs( long int __x ) { return( labs( __x ) ); }
  inline ldiv_t div( long int __n, long int __d )
    { return( ldiv( __n, __d ) ); }
}
#endif
#endif
:endsegment

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?