727 lines
24 KiB
C
727 lines
24 KiB
C
|
/***
|
||
|
*internal.h - contains declarations of internal routines and variables
|
||
|
*
|
||
|
* Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
|
||
|
*
|
||
|
*Purpose:
|
||
|
* Declares routines and variables used internally by the C run-time.
|
||
|
*
|
||
|
* [Internal]
|
||
|
*
|
||
|
*Revision History:
|
||
|
* 05-18-87 SKS Module created
|
||
|
* 07-15-87 JCR Added _old_pfxlen and _tempoff
|
||
|
* 08-05-87 JCR Added _getbuf (corrected by SKS)
|
||
|
* 11-05-87 JCR Added _buferr
|
||
|
* 11-18-87 SKS Add __tzset(), made _isindst() near, remove _dtoxmode
|
||
|
* 01-26-88 SKS Make __tzset, _isindst, _dtoxtime near/far for QC
|
||
|
* 02-10-88 JCR Cleaned up white space
|
||
|
* 06-22-88 SKS _canonic/_getcdrv are now used by all models
|
||
|
* 06-29-88 JCR Removed static buffers _bufout and _buferr
|
||
|
* 08-18-88 GJF Revised to also work for the 386 (small model only).
|
||
|
* 09-22-88 GJF Added declarations for _freebuf, _stbuf and _ftbuf.
|
||
|
* 01-31-89 JCR Removed _canonic, _getcdrv, _getcdwd (see direct.h)
|
||
|
* 06-07-89 PHG Added _dosret for i860 (N10) version of libs
|
||
|
* 07-05-89 PHG Changed above to _dosmaperr, added startup variables
|
||
|
* 08-17-89 GJF Cleanup, removed stuff not needed for 386
|
||
|
* 10-25-89 JCR Added prototype for _getpath()
|
||
|
* 10-30-89 GJF Fixed copyright
|
||
|
* 11-02-89 JCR Changed "DLL" to "_DLL"
|
||
|
* 03-01-90 GJF Added #ifndef _INC_INTERNAL and #include <cruntime.h>
|
||
|
* stuff. Also, removed some (now) useless preprocessing
|
||
|
* directives.
|
||
|
* 03-21-90 GJF Put _CALLTYPE1 into prototypes.
|
||
|
* 03-26-90 GJF Added prototypes for _output() and _input(). Filled
|
||
|
* out the prototype for _openfile
|
||
|
* 04-05-90 GJF Added prototype for __NMSG_WRITE() (C source build
|
||
|
* only).
|
||
|
* 04-10-90 GJF Added prototypes for startup functions.
|
||
|
* 05-28-90 SBM Added _flush()
|
||
|
* 07-11-90 SBM Added _commode, removed execload()
|
||
|
* 07-20-90 SBM Changes supporting clean -W3 compiles (added _cftoe
|
||
|
* and _cftof prototypes)
|
||
|
* 08-01-90 SBM Moved _cftoe() and _cftof() to new header
|
||
|
* <fltintrn.h>, formerly named <struct.h>
|
||
|
* 08-21-90 GJF Changed prototypes for _amsg_exit() and _NMSG_WRITE().
|
||
|
* 11-29-90 GJF Added some defs/decls for lowio under Win32.
|
||
|
* 12-04-90 SRW Added _osfile back for win32. Changed _osfinfo from
|
||
|
* an array of structures to an array of 32-bit handles
|
||
|
* (_osfhnd)
|
||
|
* 04-06-91 GJF Changed _heapinit to _heap_init.
|
||
|
* 08-19-91 JCR Added _exitflag
|
||
|
* 08-20-91 JCR C++ and ANSI naming
|
||
|
* 01-05-92 GJF Added declaration for termination done flag [_WIN32_]
|
||
|
* 01-08-92 GJF Added prototype for _GetMainArgs.
|
||
|
* 01-18-92 GJF Added _aexit_rtn.
|
||
|
* 01-22-92 GJF Fixed definitions of _acmdln and _aexit_rtn for the
|
||
|
* of crtdll.dll, crtdll.lib.
|
||
|
* 01-29-92 GJF Added support for linked-in options equivalent to
|
||
|
* commode.obj and setargv.obj (i.e., special declarations
|
||
|
* for _commode and _dowildcard).
|
||
|
* 02-14-92 GJF Replace _nfile with _nhandle for Win32. Also, added
|
||
|
* #define-s for _NHANDLE_.
|
||
|
* 03-17-92 GJF Removed declaration of _tmpoff for Win32.
|
||
|
* 03-30-92 DJM POSIX support.
|
||
|
* 04-27-92 GJF Added prototypes for _ValidDrive (in stat.c).
|
||
|
* 05-28-92 GJF Added prototype for _mtdeletelocks() for Win32.
|
||
|
* 06-02-92 SKS Move prototype for _pgmptr to <DOS.H>
|
||
|
* 06-02-92 KRS Added prototype for _woutput().
|
||
|
* 08-06-92 GJF Function calling type and variable type macros.
|
||
|
* 08-17-92 KRS Added prototype for _winput().
|
||
|
* 08-21-92 GJF Merged last two changes above.
|
||
|
* 08-24-92 PBS Added _dstoffset for posix TZ
|
||
|
* 10-24-92 SKS Add a fourth parameter to _GetMainArgs: wildcard flag
|
||
|
* _GetMainArgs => __GetMainArgs: 2 leading _'s = internal
|
||
|
* 10-24-92 SKS Remove two unnecessary parameters from _cenvarg()
|
||
|
* 01-21-93 GJF Removed support for C6-386's _cdecl.
|
||
|
* 03-30-93 GJF __gmtotime_t supercedes _dtoxtime.
|
||
|
* 04-06-93 SKS Replace _CRTAPI1/2 with __cdecl, _CRTVAR1 with nothing
|
||
|
* Change _ValidDrive to _validdrive
|
||
|
* 04-07-93 SKS Add _CRTIMP keyword for CRT DLL model
|
||
|
* Use link-time aliases for old names, not #define's
|
||
|
* 04-13-93 SKS Add _mtterm (complement of _mtinit)
|
||
|
* 04-26-93 SKS _mtinit now returns success (1) or failure (0)
|
||
|
* 05-06-93 SKS Add _heap_term() - frees up memory upon DLL detach
|
||
|
* 07-21-93 GJF __loctotime_t supercedes _gmtotime_t.
|
||
|
* 09-15-93 CFW Added mbc init function prototypes.
|
||
|
* 09-17-93 GJF Merged NT SDK and Cuda versions, added prototype for
|
||
|
* _heap_abort.
|
||
|
* 10-13-93 GJF Replaced _ALPHA_ with _M_ALPHA.
|
||
|
* 10-21-93 GJF Changed _NTSDK definition of _commode slightly to
|
||
|
* work with dllsuff\crtexe.c.
|
||
|
* 10-22-93 CFW Test for invalid MB chars using global preset flag.
|
||
|
* 10-26-93 GJF Added typedef for _PVFV.
|
||
|
* 11-19-93 CFW Add _wcmdln, wmain, _wsetargv.
|
||
|
* 11-23-93 CFW Undef GetEnvironmentStrings (TEMPORARY).
|
||
|
* 11-29-93 CFW Remove GetEnvironmentStrings undef, NT 540 has fix.
|
||
|
* 12-01-93 CFW Add _wenvptr and protos for wide environ functions.
|
||
|
* 12-07-93 CFW Add _wcenvarg, _wcapture_argv, and wdospawn protos.
|
||
|
* 01-11-94 GJF __GetMainArgs() instead of __getmainargs for NT SDK.
|
||
|
* 03-04-94 SKS Add declarations of _newmode and _dowildcard.
|
||
|
* Adjust decl of _[w]getmainargs for 4th parameter.
|
||
|
* 03-25-94 GJF Added declaration of __[w]initenv
|
||
|
* 03-25-94 GJF Made declarations of:
|
||
|
* _acmdln, _wcmdln,
|
||
|
* _aenvptr, _wenvptr
|
||
|
* _C_Termination_Flag,
|
||
|
* _exitflag,
|
||
|
* __initenv, __winitenv,
|
||
|
* __invalid_mb_chars
|
||
|
* _lastiob,
|
||
|
* _old_pfxlen,
|
||
|
* _osfhnd[]
|
||
|
* _osfile[],
|
||
|
* _pipech[],
|
||
|
* _tempoff,
|
||
|
* _umaskval
|
||
|
* conditional on DLL_FOR_WIN32S. Made declaration of
|
||
|
* _newmode conditional on DLL_FOR_WIN32S and CRTDLL.
|
||
|
* Made declaration of _cflush conditional on CRTDLL.
|
||
|
* Defined _commode to be a dereferenced function return
|
||
|
* for _DLL. Conditionally included win32s.h.
|
||
|
* 04-14-94 GJF Added definition for FILE.
|
||
|
* 05-03-94 GJF Made declarations of _commode, __initenv, __winitenv
|
||
|
* _acmdln and _wcmdln also conditional on _M_IX86.
|
||
|
* 05-09-94 CFW Add __fcntrlcomp, remove DLL_FOR_WIN32S protection
|
||
|
* on __invalid_mb_chars.
|
||
|
* 09-06-94 GJF Added declarations for __app_type, __set_app_type()
|
||
|
* and related constants, and __error_mode.
|
||
|
* 09-06-94 CFW Remove _MBCS_OS switch.
|
||
|
* 12-14-94 SKS Increase file handle limit for MSVCRT30.DLL
|
||
|
* 12-15-94 XY merged with mac header
|
||
|
* 12-21-94 CFW Remove fcntrlcomp & invalid_mb NT 3.1 hacks.
|
||
|
* 12-23-94 GJF Added prototypes for _fseeki64, _fseeki64_lk,
|
||
|
* _ftelli64 and _ftelli64_lk.
|
||
|
* 12-28-94 JCF Changed _osfhnd from long to int in _MAC_.
|
||
|
* 01-17-95 BWT Don't define main/wmain for POSIX
|
||
|
* 02-11-95 CFW Don't define __argc, __argv, _pgmptr for Mac.
|
||
|
* 02-14-95 GJF Made __dnames[] and __mnames[] const.
|
||
|
* 02-14-95 CFW Clean up Mac merge.
|
||
|
* 03-03-95 GJF Changes to manage streams via __piob[], rather than
|
||
|
* _iob[].
|
||
|
* 03-29-95 BWT Define _commode properly for RISC _DLL CRTEXE case.
|
||
|
* 03-29-95 CFW Add error message to internal headers.
|
||
|
* 04-06-95 CFW Add parameter to _setenvp().
|
||
|
* 05-08-95 CFW Official ANSI C++ new handler added.
|
||
|
* 06-15-95 GJF Revised for ioinfo arrays.
|
||
|
* 07-04-95 GJF Removed additional parameter from _setenvp().
|
||
|
* 06-23-95 CFW ANSI new handler removed from build.
|
||
|
* 07-26-95 GJF Added safe versions of ioinfo access macros.
|
||
|
* 09-25-95 GJF Added parameter to __loctotime_t.
|
||
|
* 12-08-95 SKS Add __initconin()/__initconout() for non-MAC platforms.
|
||
|
* 12-14-95 JWM Add "#pragma once".
|
||
|
* 04-12-96 SKS __badioinfo and __pioinfo must be exported for the
|
||
|
* Old Iostreams DLLs (msvcirt.dll and msvcirtd.dll).
|
||
|
* 04-22-96 GJF Return type of _heap_init changed.
|
||
|
* 05-10-96 SKS Add definition of _CRTIMP1 -- needed by mtlock/mtunlock
|
||
|
* 08-01-96 RDK For PMac, add extern for _osfileflags for extra byte of
|
||
|
* file flags.
|
||
|
* 08-22-96 SKS Add definition of _CRTIMP2
|
||
|
* 02-03-97 GJF Cleaned out obsolete support for Win32s, _CRTAPI* and
|
||
|
* _NTSDK. Replaced defined(_M_MPPC) || defined(_M_M68K)
|
||
|
* with defined(_MAC). Also, detab-ed.
|
||
|
* 04-16-97 GJF Restored the macros for _[w]initenv in the DLL model
|
||
|
* because they prove useful in something else.
|
||
|
* 07-23-97 GJF _heap_init changed slightly.
|
||
|
* 02-07-98 GJF Changes for Win64: use intptr_t where appropriate,
|
||
|
* and made time_t __int64.
|
||
|
* 05-04-98 GJF Added __time64_t support.
|
||
|
* 12-15-98 GJF Changes for 64-bit size_t.
|
||
|
* 05-17-99 PML Remove all Macintosh support.
|
||
|
* 05-28-99 GJF Changed prototype for __crt[w]setenv.
|
||
|
* 06-01-99 PML Minor cleanup for 5/3/99 Plauger STL drop.
|
||
|
* 10-06-99 PML Add _W64 modifier to types which are 32 bits in Win32,
|
||
|
* 64 bits in Win64.
|
||
|
* 10-14-99 PML Add __crtInitCritSecAndSpinCount and _CRT_SPINCOUNT.
|
||
|
* 11-03-99 PML Add va_list definition for _M_CEE.
|
||
|
* 11-12-99 PML Wrap __time64_t in its own #ifndef.
|
||
|
* 03-06-00 PML Add __crtExitProcess.
|
||
|
* 09-07-00 PML Remove va_list definition for _M_CEE (vs7#159777)
|
||
|
* 02-20-01 PML vs7#172586 Avoid _RT_LOCK by preallocating all locks
|
||
|
* that will be required, and returning failure back on
|
||
|
* inability to allocate a lock.
|
||
|
* 03-19-01 BWT Stop calling through functions on X86 to get environment
|
||
|
* 03-27-01 PML Return success/failure code from several startup
|
||
|
* routines instead of calling _amsg_exit (vs7#231220)
|
||
|
*
|
||
|
****/
|
||
|
|
||
|
#if _MSC_VER > 1000 /*IFSTRIP=IGN*/
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifndef _INC_INTERNAL
|
||
|
#define _INC_INTERNAL
|
||
|
|
||
|
#ifndef _CRTBLD
|
||
|
/*
|
||
|
* This is an internal C runtime header file. It is used when building
|
||
|
* the C runtimes only. It is not to be used as a public header file.
|
||
|
*/
|
||
|
#error ERROR: Use of C runtime library internal header file.
|
||
|
#endif /* _CRTBLD */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <cruntime.h>
|
||
|
|
||
|
/*
|
||
|
* Conditionally include windows.h to pick up the definition of
|
||
|
* CRITICAL_SECTION.
|
||
|
*/
|
||
|
#ifdef _MT
|
||
|
#include <windows.h>
|
||
|
#endif
|
||
|
|
||
|
#if !defined(_W64)
|
||
|
#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 /*IFSTRIP=IGN*/
|
||
|
#define _W64 __w64
|
||
|
#else
|
||
|
#define _W64
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* Define _CRTIMP */
|
||
|
|
||
|
#ifndef _CRTIMP
|
||
|
#ifdef CRTDLL
|
||
|
#define _CRTIMP __declspec(dllexport)
|
||
|
#else /* ndef CRTDLL */
|
||
|
#ifdef _DLL
|
||
|
#define _CRTIMP __declspec(dllimport)
|
||
|
#else /* ndef _DLL */
|
||
|
#define _CRTIMP
|
||
|
#endif /* _DLL */
|
||
|
#endif /* CRTDLL */
|
||
|
#endif /* _CRTIMP */
|
||
|
|
||
|
|
||
|
/* Define _CRTIMP1 */
|
||
|
|
||
|
#ifndef _CRTIMP1
|
||
|
#ifdef CRTDLL1
|
||
|
#define _CRTIMP1 __declspec(dllexport)
|
||
|
#else /* ndef CRTDLL1 */
|
||
|
#define _CRTIMP1 _CRTIMP
|
||
|
#endif /* CRTDLL1 */
|
||
|
#endif /* _CRTIMP1 */
|
||
|
|
||
|
|
||
|
/* Define _CRTIMP2 */
|
||
|
#ifndef _CRTIMP2
|
||
|
#if defined(CRTDLL2)
|
||
|
#define _CRTIMP2 __declspec(dllexport)
|
||
|
#else /* ndef CRTDLL2 */
|
||
|
#if defined(_DLL) && !defined(_STATIC_CPPLIB)
|
||
|
#define _CRTIMP2 __declspec(dllimport)
|
||
|
#else /* ndef _DLL && !STATIC_CPPLIB */
|
||
|
#define _CRTIMP2
|
||
|
#endif /* _DLL && !STATIC_CPPLIB */
|
||
|
#endif /* CRTDLL2 */
|
||
|
#endif /* _CRTIMP2 */
|
||
|
|
||
|
|
||
|
/* Define __cdecl for non-Microsoft compilers */
|
||
|
|
||
|
#if ( !defined(_MSC_VER) && !defined(__cdecl) )
|
||
|
#define __cdecl
|
||
|
#endif
|
||
|
|
||
|
#ifndef _INTPTR_T_DEFINED
|
||
|
#ifdef _WIN64
|
||
|
typedef __int64 intptr_t;
|
||
|
#else
|
||
|
typedef _W64 int intptr_t;
|
||
|
#endif
|
||
|
#define _INTPTR_T_DEFINED
|
||
|
#endif
|
||
|
|
||
|
#ifndef _WCHAR_T_DEFINED
|
||
|
typedef unsigned short wchar_t;
|
||
|
#define _WCHAR_T_DEFINED
|
||
|
#endif
|
||
|
|
||
|
/* Define function types used in several startup sources */
|
||
|
|
||
|
typedef void (__cdecl *_PVFV)(void);
|
||
|
typedef int (__cdecl *_PIFV)(void);
|
||
|
|
||
|
|
||
|
#if defined(_DLL) && defined(_M_IX86)
|
||
|
/* Retained for compatibility with VC++ 5.0 and earlier versions */
|
||
|
_CRTIMP int * __p__commode(void);
|
||
|
#endif
|
||
|
#if defined(SPECIAL_CRTEXE) && defined(_DLL)
|
||
|
extern int _commode;
|
||
|
#else
|
||
|
_CRTIMP extern int _commode;
|
||
|
#endif /* defined(_DLL) && defined(SPECIAL_CRTEXE) */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Control structure for lowio file handles
|
||
|
*/
|
||
|
typedef struct {
|
||
|
intptr_t osfhnd; /* underlying OS file HANDLE */
|
||
|
char osfile; /* attributes of file (e.g., open in text mode?) */
|
||
|
char pipech; /* one char buffer for handles opened on pipes */
|
||
|
#ifdef _MT
|
||
|
int lockinitflag;
|
||
|
CRITICAL_SECTION lock;
|
||
|
#endif
|
||
|
} ioinfo;
|
||
|
|
||
|
/*
|
||
|
* Definition of IOINFO_L2E, the log base 2 of the number of elements in each
|
||
|
* array of ioinfo structs.
|
||
|
*/
|
||
|
#define IOINFO_L2E 5
|
||
|
|
||
|
/*
|
||
|
* Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
|
||
|
*/
|
||
|
#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
|
||
|
|
||
|
/*
|
||
|
* Definition of IOINFO_ARRAYS, maximum number of supported ioinfo arrays.
|
||
|
*/
|
||
|
#define IOINFO_ARRAYS 64
|
||
|
|
||
|
#define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS)
|
||
|
|
||
|
/*
|
||
|
* Access macros for getting at an ioinfo struct and its fields from a
|
||
|
* file handle
|
||
|
*/
|
||
|
#define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - \
|
||
|
1)) )
|
||
|
#define _osfhnd(i) ( _pioinfo(i)->osfhnd )
|
||
|
|
||
|
#define _osfile(i) ( _pioinfo(i)->osfile )
|
||
|
|
||
|
#define _pipech(i) ( _pioinfo(i)->pipech )
|
||
|
|
||
|
/*
|
||
|
* Safer versions of the above macros. Currently, only _osfile_safe is
|
||
|
* used.
|
||
|
*/
|
||
|
#define _pioinfo_safe(i) ( ((i) != -1) ? _pioinfo(i) : &__badioinfo )
|
||
|
|
||
|
#define _osfhnd_safe(i) ( _pioinfo_safe(i)->osfhnd )
|
||
|
|
||
|
#define _osfile_safe(i) ( _pioinfo_safe(i)->osfile )
|
||
|
|
||
|
#define _pipech_safe(i) ( _pioinfo_safe(i)->pipech )
|
||
|
|
||
|
/*
|
||
|
* Special, static ioinfo structure used only for more graceful handling
|
||
|
* of a C file handle value of -1 (results from common errors at the stdio
|
||
|
* level).
|
||
|
*/
|
||
|
extern _CRTIMP ioinfo __badioinfo;
|
||
|
|
||
|
/*
|
||
|
* Array of arrays of control structures for lowio files.
|
||
|
*/
|
||
|
extern _CRTIMP ioinfo * __pioinfo[];
|
||
|
|
||
|
/*
|
||
|
* Current number of allocated ioinfo structures (_NHANDLE_ is the upper
|
||
|
* limit).
|
||
|
*/
|
||
|
extern int _nhandle;
|
||
|
|
||
|
int __cdecl _alloc_osfhnd(void);
|
||
|
int __cdecl _free_osfhnd(int);
|
||
|
int __cdecl _set_osfhnd(int, intptr_t);
|
||
|
|
||
|
#ifdef _POSIX_
|
||
|
extern long _dstoffset;
|
||
|
#endif /* _POSIX_ */
|
||
|
|
||
|
extern const char __dnames[];
|
||
|
extern const char __mnames[];
|
||
|
|
||
|
extern int _days[];
|
||
|
extern int _lpdays[];
|
||
|
|
||
|
#ifndef _TIME_T_DEFINED
|
||
|
#ifdef _WIN64
|
||
|
typedef __int64 time_t; /* time value */
|
||
|
#else
|
||
|
typedef _W64 long time_t; /* time value */
|
||
|
#endif
|
||
|
#define _TIME_T_DEFINED /* avoid multiple def's of time_t */
|
||
|
#endif
|
||
|
|
||
|
#ifndef _TIME64_T_DEFINED
|
||
|
typedef __int64 __time64_t; /* 64-bit time value */
|
||
|
#define _TIME64_T_DEFINED
|
||
|
#endif
|
||
|
|
||
|
extern time_t __cdecl __loctotime_t(int, int, int, int, int, int, int);
|
||
|
|
||
|
extern __time64_t __cdecl __loctotime64_t(int, int, int, int, int, int, int);
|
||
|
|
||
|
#ifdef _TM_DEFINED
|
||
|
extern int __cdecl _isindst(struct tm *);
|
||
|
#endif
|
||
|
|
||
|
extern void __cdecl __tzset(void);
|
||
|
|
||
|
extern int __cdecl _validdrive(unsigned);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* This variable is in the C start-up; the length must be kept synchronized
|
||
|
* It is used by the *cenvarg.c modules
|
||
|
*/
|
||
|
|
||
|
extern char _acfinfo[]; /* "_C_FILE_INFO=" */
|
||
|
|
||
|
#define CFI_LENGTH 12 /* "_C_FILE_INFO" is 12 bytes long */
|
||
|
|
||
|
|
||
|
/* typedefs needed for subsequent prototypes */
|
||
|
|
||
|
#ifndef _SIZE_T_DEFINED
|
||
|
#ifdef _WIN64
|
||
|
typedef unsigned __int64 size_t;
|
||
|
#else
|
||
|
typedef _W64 unsigned int size_t;
|
||
|
#endif
|
||
|
#define _SIZE_T_DEFINED
|
||
|
#endif
|
||
|
|
||
|
#ifndef _VA_LIST_DEFINED
|
||
|
#ifdef _M_ALPHA
|
||
|
typedef struct {
|
||
|
char *a0; /* pointer to first homed integer argument */
|
||
|
int offset; /* byte offset of next parameter */
|
||
|
} va_list;
|
||
|
#else
|
||
|
typedef char * va_list;
|
||
|
#endif
|
||
|
#define _VA_LIST_DEFINED
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* stdio internals
|
||
|
*/
|
||
|
#ifndef _FILE_DEFINED
|
||
|
struct _iobuf {
|
||
|
char *_ptr;
|
||
|
int _cnt;
|
||
|
char *_base;
|
||
|
int _flag;
|
||
|
int _file;
|
||
|
int _charbuf;
|
||
|
int _bufsiz;
|
||
|
char *_tmpfname;
|
||
|
};
|
||
|
typedef struct _iobuf FILE;
|
||
|
#define _FILE_DEFINED
|
||
|
#endif /* _FILE_DEFINED */
|
||
|
|
||
|
#if !defined(_FILEX_DEFINED) && defined(_WINDOWS_)
|
||
|
|
||
|
/*
|
||
|
* Variation of FILE type used for the dynamically allocated portion of
|
||
|
* __piob[]. For single thread, _FILEX is the same as FILE. For multithread
|
||
|
* models, _FILEX has two fields: the FILE struct and the CRITICAL_SECTION
|
||
|
* struct used to serialize access to the FILE.
|
||
|
*/
|
||
|
#ifdef _MT
|
||
|
|
||
|
typedef struct {
|
||
|
FILE f;
|
||
|
CRITICAL_SECTION lock;
|
||
|
} _FILEX;
|
||
|
|
||
|
#else /* ndef _MT */
|
||
|
|
||
|
typedef FILE _FILEX;
|
||
|
|
||
|
#endif /* _MT */
|
||
|
|
||
|
#define _FILEX_DEFINED
|
||
|
#endif /* _FILEX_DEFINED */
|
||
|
|
||
|
/*
|
||
|
* Number of entries supported in the array pointed to by __piob[]. That is,
|
||
|
* the number of stdio-level files which may be open simultaneously. This
|
||
|
* is normally set to _NSTREAM_ by the stdio initialization code.
|
||
|
*/
|
||
|
extern int _nstream;
|
||
|
|
||
|
/*
|
||
|
* Pointer to the array of pointers to FILE/_FILEX structures that are used
|
||
|
* to manage stdio-level files.
|
||
|
*/
|
||
|
extern void **__piob;
|
||
|
|
||
|
FILE * __cdecl _getstream(void);
|
||
|
#ifdef _POSIX_
|
||
|
FILE * __cdecl _openfile(const char *, const char *, FILE *);
|
||
|
#else
|
||
|
FILE * __cdecl _openfile(const char *, const char *, int, FILE *);
|
||
|
#endif
|
||
|
FILE * __cdecl _wopenfile(const wchar_t *, const wchar_t *, int, FILE *);
|
||
|
void __cdecl _getbuf(FILE *);
|
||
|
int __cdecl _filwbuf (FILE *);
|
||
|
int __cdecl _flswbuf(int, FILE *);
|
||
|
void __cdecl _freebuf(FILE *);
|
||
|
int __cdecl _stbuf(FILE *);
|
||
|
void __cdecl _ftbuf(int, FILE *);
|
||
|
int __cdecl _output(FILE *, const char *, va_list);
|
||
|
int __cdecl _woutput(FILE *, const wchar_t *, va_list);
|
||
|
int __cdecl _input(FILE *, const unsigned char *, va_list);
|
||
|
int __cdecl _winput(FILE *, const wchar_t *, va_list);
|
||
|
int __cdecl _flush(FILE *);
|
||
|
void __cdecl _endstdio(void);
|
||
|
|
||
|
int __cdecl _fseeki64(FILE *, __int64, int);
|
||
|
int __cdecl _fseeki64_lk(FILE *, __int64, int);
|
||
|
__int64 __cdecl _ftelli64(FILE *);
|
||
|
#ifdef _MT
|
||
|
__int64 __cdecl _ftelli64_lk(FILE *);
|
||
|
#else /* ndef _MT */
|
||
|
#define _ftelli64_lk _ftelli64
|
||
|
#endif /* _MT */
|
||
|
|
||
|
#ifndef CRTDLL
|
||
|
extern int _cflush;
|
||
|
#endif /* CRTDLL */
|
||
|
|
||
|
extern unsigned int _tempoff;
|
||
|
|
||
|
extern unsigned int _old_pfxlen;
|
||
|
|
||
|
extern int _umaskval; /* the umask value */
|
||
|
|
||
|
extern char _pipech[]; /* pipe lookahead */
|
||
|
|
||
|
extern char _exitflag; /* callable termination flag */
|
||
|
|
||
|
extern int _C_Termination_Done; /* termination done flag */
|
||
|
|
||
|
char * __cdecl _getpath(const char *, char *, unsigned);
|
||
|
wchar_t * __cdecl _wgetpath(const wchar_t *, wchar_t *, unsigned);
|
||
|
|
||
|
extern int _dowildcard; /* flag to enable argv[] wildcard expansion */
|
||
|
|
||
|
#ifndef _PNH_DEFINED
|
||
|
typedef int (__cdecl * _PNH)( size_t );
|
||
|
#define _PNH_DEFINED
|
||
|
#endif
|
||
|
|
||
|
#ifdef ANSI_NEW_HANDLER
|
||
|
/* ANSI C++ new handler */
|
||
|
#ifndef _ANSI_NH_DEFINED
|
||
|
typedef void (__cdecl * new_handler) ();
|
||
|
#define _ANSI_NH_DEFINED
|
||
|
#endif
|
||
|
|
||
|
#ifndef _NO_ANSI_NH_DEFINED
|
||
|
#define _NO_ANSI_NEW_HANDLER ((new_handler)-1)
|
||
|
#define _NO_ANSI_NH_DEFINED
|
||
|
#endif
|
||
|
|
||
|
extern new_handler _defnewh; /* default ANSI C++ new handler */
|
||
|
#endif /* ANSI_NEW_HANDLER */
|
||
|
|
||
|
/* calls the currently installed new handler */
|
||
|
int __cdecl _callnewh(size_t);
|
||
|
|
||
|
extern int _newmode; /* malloc new() handler mode */
|
||
|
|
||
|
/* pointer to initial environment block that is passed to [w]main */
|
||
|
extern _CRTIMP wchar_t **__winitenv;
|
||
|
extern _CRTIMP char **__initenv;
|
||
|
|
||
|
/* startup set values */
|
||
|
extern char *_aenvptr; /* environment ptr */
|
||
|
extern wchar_t *_wenvptr; /* wide environment ptr */
|
||
|
|
||
|
/* command line */
|
||
|
|
||
|
#if defined(_DLL) && defined(_M_IX86)
|
||
|
/* Retained for compatibility with VC++ 5.0 and earlier versions */
|
||
|
_CRTIMP char ** __cdecl __p__acmdln(void);
|
||
|
_CRTIMP wchar_t ** __cdecl __p__wcmdln(void);
|
||
|
#endif
|
||
|
_CRTIMP extern char *_acmdln;
|
||
|
_CRTIMP extern wchar_t *_wcmdln;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* prototypes for internal startup functions
|
||
|
*/
|
||
|
int __cdecl _cwild(void); /* wild.c */
|
||
|
int __cdecl _wcwild(void); /* wwild.c */
|
||
|
#ifdef _MT
|
||
|
int __cdecl _mtinit(void); /* tidtable.c */
|
||
|
void __cdecl _mtterm(void); /* tidtable.c */
|
||
|
int __cdecl _mtinitlocks(void); /* mlock.c */
|
||
|
void __cdecl _mtdeletelocks(void); /* mlock.c */
|
||
|
int __cdecl _mtinitlocknum(int); /* mlock.c */
|
||
|
#endif
|
||
|
|
||
|
#ifdef _MT
|
||
|
/* Wrapper for InitializeCriticalSection API, with default spin count */
|
||
|
int __cdecl __crtInitCritSecAndSpinCount(PCRITICAL_SECTION, DWORD);
|
||
|
#define _CRT_SPINCOUNT 4000
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* C source build only!!!!
|
||
|
*
|
||
|
* more prototypes for internal startup functions
|
||
|
*/
|
||
|
void __cdecl _amsg_exit(int); /* crt0.c */
|
||
|
void __cdecl __crtExitProcess(int); /* crt0dat.c */
|
||
|
int __cdecl _cinit(void); /* crt0dat.c */
|
||
|
void __cdecl __doinits(void); /* astart.asm */
|
||
|
void __cdecl __doterms(void); /* astart.asm */
|
||
|
void __cdecl __dopreterms(void); /* astart.asm */
|
||
|
void __cdecl _FF_MSGBANNER(void);
|
||
|
void __cdecl _fptrap(void); /* crt0fp.c */
|
||
|
int __cdecl _heap_init(int);
|
||
|
void __cdecl _heap_term(void);
|
||
|
void __cdecl _heap_abort(void);
|
||
|
void __cdecl __initconin(void); /* initcon.c */
|
||
|
void __cdecl __initconout(void); /* initcon.c */
|
||
|
int __cdecl _ioinit(void); /* crt0.c, crtlib.c */
|
||
|
void __cdecl _ioterm(void); /* crt0.c, crtlib.c */
|
||
|
char * __cdecl _GET_RTERRMSG(int);
|
||
|
void __cdecl _NMSG_WRITE(int);
|
||
|
int __cdecl _setargv(void); /* setargv.c, stdargv.c */
|
||
|
int __cdecl __setargv(void); /* stdargv.c */
|
||
|
int __cdecl _wsetargv(void); /* wsetargv.c, wstdargv.c */
|
||
|
int __cdecl __wsetargv(void); /* wstdargv.c */
|
||
|
int __cdecl _setenvp(void); /* stdenvp.c */
|
||
|
int __cdecl _wsetenvp(void); /* wstdenvp.c */
|
||
|
void __cdecl __setmbctable(unsigned int); /* mbctype.c */
|
||
|
|
||
|
#ifdef _MBCS
|
||
|
int __cdecl __initmbctable(void); /* mbctype.c */
|
||
|
#endif
|
||
|
|
||
|
#ifndef _POSIX_
|
||
|
int __cdecl main(int, char **, char **);
|
||
|
int __cdecl wmain(int, wchar_t **, wchar_t **);
|
||
|
#endif
|
||
|
|
||
|
/* helper functions for wide/multibyte environment conversion */
|
||
|
int __cdecl __mbtow_environ (void);
|
||
|
int __cdecl __wtomb_environ (void);
|
||
|
int __cdecl __crtsetenv (char *, const int);
|
||
|
int __cdecl __crtwsetenv (wchar_t *, const int);
|
||
|
|
||
|
_CRTIMP extern void (__cdecl * _aexit_rtn)(int);
|
||
|
|
||
|
#if defined(_DLL) || defined(CRTDLL)
|
||
|
|
||
|
#ifndef _STARTUP_INFO_DEFINED
|
||
|
typedef struct
|
||
|
{
|
||
|
int newmode;
|
||
|
#ifdef ANSI_NEW_HANDLER
|
||
|
new_handler newh;
|
||
|
#endif /* ANSI_NEW_HANDLER */
|
||
|
} _startupinfo;
|
||
|
#define _STARTUP_INFO_DEFINED
|
||
|
#endif /* _STARTUP_INFO_DEFINED */
|
||
|
|
||
|
_CRTIMP int __cdecl __getmainargs(int *, char ***, char ***,
|
||
|
int, _startupinfo *);
|
||
|
|
||
|
_CRTIMP int __cdecl __wgetmainargs(int *, wchar_t ***, wchar_t ***,
|
||
|
int, _startupinfo *);
|
||
|
|
||
|
#endif /* defined(_DLL) || defined(CRTDLL) */
|
||
|
|
||
|
/*
|
||
|
* Prototype, variables and constants which determine how error messages are
|
||
|
* written out.
|
||
|
*/
|
||
|
#define _UNKNOWN_APP 0
|
||
|
#define _CONSOLE_APP 1
|
||
|
#define _GUI_APP 2
|
||
|
|
||
|
extern int __app_type;
|
||
|
|
||
|
extern int __error_mode;
|
||
|
|
||
|
_CRTIMP void __cdecl __set_app_type(int);
|
||
|
|
||
|
/*
|
||
|
* C source build only!!!!
|
||
|
*
|
||
|
* map Win32 errors into Xenix errno values -- for modules written in C
|
||
|
*/
|
||
|
extern void __cdecl _dosmaperr(unsigned long);
|
||
|
|
||
|
/*
|
||
|
* internal routines used by the exec/spawn functions
|
||
|
*/
|
||
|
|
||
|
extern intptr_t __cdecl _dospawn(int, const char *, char *, char *);
|
||
|
extern intptr_t __cdecl _wdospawn(int, const wchar_t *, wchar_t *, wchar_t *);
|
||
|
extern int __cdecl _cenvarg(const char * const *, const char * const *,
|
||
|
char **, char **, const char *);
|
||
|
extern int __cdecl _wcenvarg(const wchar_t * const *, const wchar_t * const *,
|
||
|
wchar_t **, wchar_t **, const wchar_t *);
|
||
|
#ifndef _M_IX86
|
||
|
extern char ** _capture_argv(va_list *, const char *, char **, size_t);
|
||
|
extern wchar_t ** _wcapture_argv(va_list *, const wchar_t *, wchar_t **, size_t);
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* _INC_INTERNAL */
|