text: /* Copyright (C) 1986-2001 by Digital Mars. $Revision: 1.1.1.3 $ */
  #if __SC__ || __RCC__
  #pragma once
  #endif
  
  #ifndef __STDLIB_H
  #define __STDLIB_H 1
  
  #if __cplusplus
  extern "C" {
  #endif
  
  /* Define _CRTAPI1 (for compatibility with the NT SDK) */
  #ifndef _CRTAPI1
  #define _CRTAPI1 __cdecl
  #endif
  
  /* Define _CRTAPI2 (for compatibility with the NT SDK) */
  #ifndef _CRTAPI2
  #define _CRTAPI2 __cdecl
  #endif
  
  /* Define CRTIMP */
  #ifndef _CRTIMP
  #if defined(_WIN32) && defined(_DLL)
  #define _CRTIMP  __declspec(dllimport)
  #else
  #define _CRTIMP
  #endif
  #endif
  
  #if __OS2__ && __INTSIZE == 4
  #define __CLIB __stdcall
  #else
  #define __CLIB __cdecl
  #endif
  
  #define EXIT_SUCCESS   0
  #define EXIT_FAILURE   1
  
  #ifndef NULL
  #ifdef __cplusplus
  #define NULL 0
  #else
  #define NULL ((void *)0)
  #endif
  #endif
  
  #if _M_AMD64
  typedef unsigned long long size_t;
  #else
  typedef unsigned size_t;
  #endif
  
  //#ifndef __STDC__
  #if !defined(_WCHAR_T_DEFINED)
  typedef unsigned short wchar_t;
  #define _WCHAR_T_DEFINED 1
  #endif
  //#endif
  
  #pragma pack(__DEFALIGN)
  typedef struct _DIV { int  quot,rem; } div_t;
  typedef struct _LDIV { long quot,rem; } ldiv_t;
  #if __INTSIZE == 4
  typedef struct _LLDIV { long long quot,rem; } lldiv_t;
  #endif
  #pragma pack()
  
  #if !__STDC__
  
  #if !defined(ERANGE)
  #define ERANGE 34
  #endif
  
  #define HUGE_VAL       __inf
  
  #define RAND_MAX       32767
  
  #define _div_t _DIV
  #define _ldiv_t _LDIV
  
  #ifdef __NT__
  extern int __CLIB	__locale_mbsize;
  #define MB_CUR_MAX	__locale_mbsize
  #else
  #define MB_CUR_MAX	1
  #endif
  
  #endif
  
  #define _MAX_PATH   260
  #define _MAX_DRIVE  3
  #define _MAX_DIR    256
  #define _MAX_FNAME  256
  #define _MAX_EXT    256
  
  #if defined(_MT) || __cplusplus
  
  #if !__STDC__
  extern int *__CLIB _errno (void);
  #define errno (*_errno())
  #endif
  extern int *__CLIB __doserrno (void);
  #define _doserrno (*__doserrno ())
  
  #else
  
  #if !__STDC__
  extern int __CLIB errno;
  #endif
  extern int __CLIB _doserrno;
  
  #endif
  
  double __CLIB atof(const char *);
  #define _atold atof
  int    __CLIB atoi(const char *);
  long   __CLIB atol(const char *);
  double __CLIB strtod(const char *,char **);
  long double __CLIB strtold(const char *,char **);
  long   __CLIB strtol(const char *,char **,int);
  unsigned long  __CLIB strtoul(const char *,char **,int);
  #if __INTSIZE == 4
  long long   __CLIB atoll(const char *);
  long long   __CLIB strtoll(const char *,char **,int);
  unsigned long long __CLIB strtoull(const char *,char **,int);
  #endif
  int    __CLIB rand(void);
  void   __CLIB srand(unsigned);
  int    __CLIB random(int num);
  void    __CLIB randomize(void);
  _CRTIMP void * __CLIB calloc(size_t,size_t);
  _CRTIMP void   __CLIB free(void *);
  _CRTIMP void * __CLIB malloc(size_t);
  _CRTIMP void * __CLIB realloc(void *,size_t);
  void   __CLIB abort(void);
  int    __CLIB atexit(void (*)(void));
  void   __CLIB exit(int);
  void   __CLIB _Exit(int);
  void   __CLIB _exit(int);
  
  #pragma noreturn (abort)
  #pragma noreturn (_exit)
  #pragma noreturn (_Exit)
  
  _CRTIMP char * __CLIB getenv(const char *);
  int    __CLIB system(const char *);
  void * __CLIB bsearch(const void *,const void *,size_t,size_t,
         int (__CLIB *)(const void *,const void *));
  void   __CLIB qsort(void *,size_t,size_t,
         int (__CLIB *)(const void *,const void *));
  int    __CLIB abs(int);
  long   __CLIB labs(long);
  div_t  __CLIB div(int,int);
  ldiv_t __CLIB ldiv(long,long);
  #if __INTSIZE == 4
  long long   __CLIB llabs(long long);
  lldiv_t __CLIB lldiv(long long, long long);
  #endif
  int    __CLIB mblen(const char *, size_t);
  size_t __CLIB _mbstrlen(const char *);
  int    __CLIB mbtowc(wchar_t *, const char *, size_t);
  int    __CLIB wctomb(char *, wchar_t);
  size_t __CLIB mbstowcs(wchar_t *, const char *, size_t);
  size_t __CLIB wcstombs(char *, const wchar_t *, size_t);
  void   __CLIB perror(const char *);
  #ifndef toupper
  int    __CLIB toupper(int);
  #endif
  #ifndef tolower
  int    __CLIB tolower(int);
  #endif
  
  unsigned       __CLIB _rotl(unsigned,int);
  unsigned       __CLIB _rotr(unsigned,int);
  unsigned long  __CLIB _lrotl(unsigned long,int);
  unsigned long  __CLIB _lrotr(unsigned long,int);
  char * __CLIB _fullpath(char *buf,const char *path,size_t buflen);
  
  #if !__STDC__
  #define fullpath       _fullpath
  #endif
  
  extern int __CLIB sys_nerr;
  extern char * __CLIB sys_errlist[];
  #define _sys_nerr sys_nerr
  #define _sys_errlist sys_errlist
  
  #ifndef __STDC__
  
  #if __INTSIZE == 2
  int    __CLIB __far _fmblen(const char __far *,size_t);
  int    __CLIB __far _fmbtowc(wchar_t __far *,const char __far *,size_t);
  int    __CLIB __far _fwctomb(char __far *,wchar_t);
  size_t __CLIB __far _fmbstowcs(wchar_t __far *, const char __far *, size_t);
  size_t __CLIB __far _fwcstombs(char __far *, const wchar_t __far *, size_t);
  #else
  int    __CLIB _fmblen(const char __far *,size_t);
  int    __CLIB _fmbtowc(wchar_t __far *,const char __far *,size_t);
  int    __CLIB _fwctomb(char __far *,wchar_t);
  size_t __CLIB _fmbstowcs(wchar_t __far *, const char __far *, size_t);
  size_t __CLIB _fwcstombs(char __far *, const wchar_t __far *, size_t);
  unsigned long long __CLIB strtoull(const char *,char **,int);
  #endif
  
  #if __INTSIZE == 2
  extern char __far *__cdecl _pgmptr;
  #else
  extern char *__cdecl _pgmptr;
  extern wchar_t *__cdecl _wpgmptr;
  #endif
  
  extern unsigned int __cdecl _osver;
  #ifndef __NT__
  extern unsigned short __cdecl _psp;
  extern unsigned char __cdecl _osmajor;
  extern unsigned char __cdecl _osminor;
  #endif
  
  #ifdef _DLL
  extern int * __CLIB __p___argc(void);
  extern char *** __CLIB __p___argv(void);
  extern wchar_t *** __CLIB __p___wargv(void);
  #define __argc	(*__p___argc())
  #define __argv	(*__p___argv())
  #define __wargv	(*__p___wargv())
  #else
  extern int __cdecl __argc;
  extern char __cdecl ** __argv;
  extern wchar_t __cdecl ** __wargv;
  #endif
  
  #if defined (_WIN32)
  wchar_t ** __CLIB __wparsecmdline(const wchar_t *, int *);
  char ** __CLIB __parsecmdline(const char *, int *);
  #endif
  
  #if defined(_WINDOWS) || defined(__NT__)
  extern unsigned char __cdecl _winmajor;
  extern unsigned char __cdecl _winminor;
  extern unsigned int __cdecl _winver;
  #endif
  
  #define _DOS_MODE 0
  #define _OS2_MODE 1
  #define _WIN_MODE 2
  
  #if !__STDC__
  #define DOS_MODE _DOS_MODE
  #define OS2_MODE _OS2_MODE
  #define WIN_MODE _WIN_MODE
  #endif
  
  extern unsigned char __cdecl _osmode;
  
  #define _REAL_MODE 0
  #define _PROT_MODE 1
  
  extern unsigned char __cdecl _cpumode;
  
  extern int __cdecl _fmode;
  
  void __cdecl _splitpath(const char *, char *,char *, char *, char *);
  void __cdecl _makepath(char *, const char *,const char *, const char *, const char *);
  void __cdecl _searchenv(const char *filename, const char *varname, char *pathname);
  
  #include <heapstat.h>
  
  _CRTIMP int __cdecl _heapchk(void);
  _CRTIMP int __cdecl _heapset(unsigned);
  #if __INTSIZE == 2
  int __cdecl _heapadd(void __far *,size_t);
  #else
  int __cdecl _heapadd(void *,size_t);
  #endif
  int __cdecl _heapmin(void);
  
  #ifdef __NT__
  #define _expand realloc
  #else
  void * __cdecl _expand(void *,size_t);
  #endif
  
  _CRTIMP size_t __cdecl _msize(void *);
  
  #if __LARGE__ || __COMPACT__
  void * __cdecl _fmalloc(size_t);
  void * __cdecl _fcalloc(size_t,size_t);
  void * __cdecl _frealloc(void *,size_t);
  void __cdecl _ffree(void *);
  size_t __cdecl _fmsize(void *);
  unsigned long __cdecl coreleft(void);
  unsigned long __cdecl farcoreleft(void);
  #if _WINDOWS
  void __near * __cdecl _nmalloc(size_t);
  void __near * __cdecl _ncalloc(size_t,size_t);
  void __near * __cdecl _nrealloc(void __near *,size_t);
  void __cdecl _nfree(void __near *);
  size_t __cdecl _nmsize(void __near *);
  size_t __cdecl _memmax(void);
  size_t __cdecl _memavl(void);
  unsigned int __cdecl _freect(size_t);
  #endif
  #else
  void * __cdecl _nmalloc(size_t);
  void * __cdecl _ncalloc(size_t,size_t);
  void * __cdecl _nrealloc(void *,size_t);
  void __cdecl _nfree(void *);
  size_t __cdecl _nmsize(void *);
  size_t __cdecl _memmax(void);
  size_t __cdecl _memavl(void);
  unsigned int __cdecl _freect(size_t);
  unsigned __cdecl coreleft(void);
  unsigned long __cdecl farcoreleft(void);
  #if __INTSIZE == 2 || (!__NT__ && !__OS2__)
  void __far * __cdecl _fmalloc(size_t);
  void __far * __cdecl _fcalloc(size_t,size_t);
  void __far * __cdecl _frealloc(void __far *,size_t);
  void __cdecl _ffree(void __far *);
  size_t __cdecl _fmsize(void __far *);
  #endif
  #endif
  
  #if __INTSIZE == 2
  void __huge *_halloc (long, size_t);
  void _hfree (void __huge *);
  #endif
  
  char * __CLIB itoa(int,char *,int);
  char * __CLIB _itoa(int, char *,int);
  char * __CLIB ltoa(long, char *, int);
  char * __CLIB _ltoa(long, char *,int);
  char *  __CLIB ultoa(unsigned long, char *, int);
  char * __CLIB ecvt(double,int,int *,int *);
  char * __CLIB fcvt(double,int,int *,int *);
  char * __CLIB _fcvt(double,int,int *,int *);
  char * __CLIB gcvt(double,int,char *);
  void * __cdecl sbrk(size_t);
  void   __CLIB swab(char *,char *,size_t);
  float  __CLIB strtof(const char *,char **);
  #define _swab swab
  #define _ecvt ecvt
  #define _gcvt gcvt
  #if !_WIN32
  #define strtold        strtod
  #endif
  #define _strtold       strtold
  #define _ultoa ultoa
  #if _MSDOS
  void __ss *    __CLIB alloca(size_t);
  #else
  void *    __CLIB alloca(size_t);
  #endif
  #define _alloca alloca
  size_t __CLIB stackavail(void);
  size_t __CLIB _chkstack(void);
  #define _stackavail stackavail
  
  #if __INTSIZE == 4
  int __cdecl _fatexit (void (__cdecl *func)(void));
  typedef void (__cdecl * _fonexit_t)(void);
  _fonexit_t __cdecl _fonexit (_fonexit_t func);
  #else
  int __cdecl __far _fatexit (void (__cdecl __far *func)(void));
  typedef void (__cdecl __far * _fonexit_t)(void);
  _fonexit_t __cdecl __far _fonexit (_fonexit_t func);
  #endif
  
  typedef void (__cdecl * _onexit_t)(void);
  _onexit_t __cdecl _onexit (_onexit_t func);
  
  #ifndef __STDC__
  #define onexit _onexit
  #endif
  
  #if __INTSIZE == 2
  void __far * __far __CLIB __mallocf(size_t);
  void        __far __CLIB __freef(void __far *);
  #endif
  _CRTIMP int            __CLIB putenv(const char *);
  
  #define _putenv putenv
  
  /* Min and Max macros useful in both C and CPP */
  #define __max(a,b)            (((a) > (b)) ? (a) : (b))
  #define __min(a,b)            (((a) < (b)) ? (a) : (b))
  
  
  #ifndef __cplusplus
  
  #ifndef max
  #define max(a,b)            (((a) > (b)) ? (a) : (b))
  #endif
  
  #ifndef min
  #define min(a,b)            (((a) < (b)) ? (a) : (b))
  #endif
  #endif
  
  extern int (__far __cdecl *_malloc_handler)(void);
  extern char * __cdecl _envptr;
  #ifdef _DLL
  _CRTIMP char ***__CLIB _p_environ (void);
  #define _environ (*_p_environ())
  #else
  extern char ** __cdecl _environ;
  #endif
  
  #define environ _environ
  
  #ifdef __NT__
  #define _aenvptr _envptr
  extern wchar_t * __cdecl _wenvptr;
  #ifdef _DLL
  _CRTIMP wchar_t ***__CLIB _p_wenviron (void);
  #define _wenviron (*_p_wenviron())
  #else
  extern wchar_t ** __cdecl _wenviron;
  #endif
  
  #define wenviron _wenviron
  #endif
  
  #if !(defined (_WINDOWS) || defined (__NT__) || defined (DOS386))
  extern int __CLIB _fileinfo;
  #endif
  
  #if M_UNIX || M_XENIX
  extern char * __cdecl optarg;
  extern int __cdecl optind;
  extern int __cdecl opterr;
  extern int __cdecl optopt;
  #endif
  
  #endif
  
  #ifdef __NT__
  #ifndef __STDC__
  int __CLIB _wtoi(const wchar_t *);
  long __CLIB _wtol(const wchar_t *);
  //double __CLIB wcstod(const wchar_t *, wchar_t **);
  //long double __CLIB wcstold(const wchar_t *, wchar_t **);
  //long __CLIB wcstol(const wchar_t *, wchar_t **, int);
  //unsigned long __CLIB wcstoul(const wchar_t *, wchar_t **, int);
  //long long __CLIB wcstoll(const wchar_t *, wchar_t **, int);
  //unsigned long long __CLIB wcstoull(const wchar_t *, wchar_t **, int);
  _CRTIMP wchar_t * __CLIB _wgetenv(const wchar_t *);
  int __CLIB _wsystem(const wchar_t *);
  wchar_t * __CLIB _itow(int, wchar_t *, int);
  wchar_t * __CLIB _ltow(long, wchar_t *, int);
  wchar_t * __CLIB _ultow(unsigned long, wchar_t *, int);
  wchar_t * __CLIB _wfullpath(wchar_t *, const wchar_t *, size_t);
  void __CLIB _wmakepath(wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *);
  void __CLIB _wperror(const wchar_t *);
  _CRTIMP int __CLIB _wputenv(const wchar_t *);
  void __CLIB _wsearchenv(const wchar_t *, const wchar_t *, wchar_t *);
  void __CLIB _wsplitpath(const wchar_t *, wchar_t *, wchar_t *, wchar_t *, wchar_t *);
  #define itow _itow
  #define ltow _ltow
  #define ultow _ultow
  #endif
  #endif
  
  #if __cplusplus
  }
  #endif
  
  #endif
  