Windows2000/private/shell/iert/internal.h

649 lines
17 KiB
C

/*
*internal.h - contains declarations of internal routines and variables
*
* Copyright (c) 1985-1996, Microsoft Corporation. All rights reserved.
*
*Purpose:
* Declares routines and variables used internally by the C run-time.
*
* [Internal]
*
****/
#if _MSC_VER > 1000
#pragma once
#endif /* _MSC_VER > 1000 */
#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 /* __cplusplus */
#include <cruntime.h>
/*
* Conditionally include windows.h to pick up the definition of
* CRITICAL_SECTION.
*/
#if defined (_MT)
#include <windows.h>
#endif /* defined (_MT) */
/* Define _CRTAPI1 (for compatibility with the NT SDK) */
#ifndef _CRTAPI1
#if _MSC_VER >= 800 && _M_IX86 >= 300
#define _CRTAPI1 __cdecl
#else /* _MSC_VER >= 800 && _M_IX86 >= 300 */
#define _CRTAPI1
#endif /* _MSC_VER >= 800 && _M_IX86 >= 300 */
#endif /* _CRTAPI1 */
/* Define _CRTAPI2 (for compatibility with the NT SDK) */
#ifndef _CRTAPI2
#if _MSC_VER >= 800 && _M_IX86 >= 300
#define _CRTAPI2 __cdecl
#else /* _MSC_VER >= 800 && _M_IX86 >= 300 */
#define _CRTAPI2
#endif /* _MSC_VER >= 800 && _M_IX86 >= 300 */
#endif /* _CRTAPI2 */
/* Define _CRTIMP */
#ifndef _CRTIMP
/* current definition */
#ifdef CRTDLL
#define _CRTIMP __declspec(dllexport)
#else /* CRTDLL */
#ifdef _DLL
#define _CRTIMP __declspec(dllimport)
#else /* _DLL */
#define _CRTIMP
#endif /* _DLL */
#endif /* CRTDLL */
#endif /* _CRTIMP */
/* Define _CRTIMP1 */
#ifndef _CRTIMP1
#ifdef CRTDLL1
#define _CRTIMP1 __declspec(dllexport)
#else /* CRTDLL1 */
#define _CRTIMP1 _CRTIMP
#endif /* CRTDLL1 */
#endif /* _CRTIMP1 */
/* Define _CRTIMP2 */
#ifndef _CRTIMP2
#ifdef CRTDLL2
#define _CRTIMP2 __declspec(dllexport)
#else /* CRTDLL2 */
#ifdef _DLL
#define _CRTIMP2 __declspec(dllimport)
#else /* _DLL */
#define _CRTIMP2
#endif /* _DLL */
#endif /* CRTDLL2 */
#endif /* _CRTIMP2 */
/* Define __cdecl for non-Microsoft compilers */
#if (!defined (_MSC_VER) && !defined (__cdecl))
#define __cdecl
#endif /* (!defined (_MSC_VER) && !defined (__cdecl)) */
#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif /* _WCHAR_T_DEFINED */
/* Define function type used in several startup sources */
typedef void (__cdecl *_PVFV)(void);
#if defined (_DLL) && defined (_M_IX86)
#ifndef SPECIAL_CRTEXE
#define _commode (*__p__commode())
#endif /* SPECIAL_CRTEXE */
_CRTIMP int * __p__commode(void);
#else /* defined (_DLL) && defined (_M_IX86) */
#if defined (SPECIAL_CRTEXE) && defined (_DLL)
extern int _commode;
#else /* defined (SPECIAL_CRTEXE) && defined (_DLL) */
_CRTIMP extern int _commode;
#endif /* defined (SPECIAL_CRTEXE) && defined (_DLL) */
#endif /* defined (_DLL) && defined (_M_IX86) */
#ifdef _WIN32
/*
* Control structure for lowio file handles
*/
typedef struct {
long 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 */
#if defined (_MT)
int lockinitflag;
CRITICAL_SECTION lock;
#endif /* defined (_MT) */
} 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;
#else /* _WIN32 */
/*
* Define the number of supported handles. This definition must exactly match
* the one in mtdll.h.
*/
#ifdef CRTDLL
#define _NHANDLE_ 512 /* *MUST* match the value under ifdef _DLL! */
#else /* CRTDLL */
#ifdef _DLL
#define _NHANDLE_ 512
#else /* _DLL */
#ifdef _MT
#define _NHANDLE_ 256
#else /* _MT */
#define _NHANDLE_ 64
#endif /* _MT */
#endif /* _DLL */
#endif /* CRTDLL */
extern int _nhandle; /* == _NHANDLE_, set in ioinit.c */
extern char _osfile[];
extern int _osfhnd[];
#if defined (_M_M68K) || defined (_M_MPPC)
extern unsigned char _osperm[];
extern short _osVRefNum[];
extern int _nfile; /*old -- check sources */
extern unsigned int _tmpoff; /*old -- check source */
extern unsigned char _osfileflags[];
#define FTEMP 0x01
#endif /* defined (_M_M68K) || defined (_M_MPPC) */
#endif /* _WIN32 */
int __cdecl _alloc_osfhnd(void);
int __cdecl _free_osfhnd(int);
int __cdecl _set_osfhnd(int,long);
extern const char __dnames[];
extern const char __mnames[];
extern int _days[];
extern int _lpdays[];
#ifndef _TIME_T_DEFINED
typedef long time_t; /* time value */
#define _TIME_T_DEFINED /* avoid multiple def's of time_t */
#endif /* _TIME_T_DEFINED */
#if defined (_M_M68K) || defined (_M_MPPC)
extern time_t __cdecl _gmtotime_t (int, int, int, int, int, int);
#endif /* defined (_M_M68K) || defined (_M_MPPC) */
extern time_t __cdecl __loctotime_t(int, int, int, int, int, int, int);
#ifdef _TM_DEFINED
extern int __cdecl _isindst(struct tm *);
#endif /* _TM_DEFINED */
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
typedef unsigned int size_t;
#define _SIZE_T_DEFINED
#endif /* _SIZE_T_DEFINED */
#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 /* _M_ALPHA */
typedef char * va_list;
#endif /* _M_ALPHA */
#define _VA_LIST_DEFINED
#endif /* _VA_LIST_DEFINED */
/*
* 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 (_M_MPPC) && !defined (_M_M68K)
#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.
*/
#if defined (_MT)
typedef struct {
FILE f;
CRITICAL_SECTION lock;
} _FILEX;
#else /* defined (_MT) */
typedef FILE _FILEX;
#endif /* defined (_MT) */
#define _FILEX_DEFINED
#endif /* !defined (_FILEX_DEFINED) && defined (_WINDOWS_) */
/*
* 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;
#endif /* !defined (_M_MPPC) && !defined (_M_M68K) */
#if defined (_M_MPPC) || defined (_M_M68K)
extern FILE * _lastiob;
#endif /* defined (_M_MPPC) || defined (_M_M68K) */
FILE * __cdecl _getstream(void);
FILE * __cdecl _openfile(const char *, const char *, int, FILE *);
#ifdef _WIN32
FILE * __cdecl _wopenfile(const wchar_t *, const wchar_t *, int, FILE *);
#endif /* _WIN32 */
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);
#ifdef _WIN32
int __cdecl _woutput(FILE *, const wchar_t *, va_list);
#endif /* _WIN32 */
int __cdecl _input(FILE *, const unsigned char *, va_list);
#ifdef _WIN32
int __cdecl _winput(FILE *, const wchar_t *, va_list);
#endif /* _WIN32 */
int __cdecl _flush(FILE *);
void __cdecl _endstdio(void);
#ifdef _WIN32
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 /* _MT */
#define _ftelli64_lk _ftelli64
#endif /* _MT */
#endif /* _WIN32 */
#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);
#ifdef _WIN32
wchar_t * __cdecl _wgetpath(const wchar_t *, wchar_t *, unsigned);
#endif /* _WIN32 */
extern int _dowildcard; /* flag to enable argv[] wildcard expansion */
#ifndef _PNH_DEFINED
typedef int (__cdecl * _PNH)( size_t );
#define _PNH_DEFINED
#endif /* _PNH_DEFINED */
/* calls the currently installed new handler */
int _callnewh(size_t);
extern int _newmode; /* malloc new() handler mode */
#if defined (_DLL) && defined (_M_IX86)
/* pointer to initial environment block that is passed to [w]main */
#define __winitenv (*__p___winitenv())
_CRTIMP wchar_t *** __cdecl __p___winitenv(void);
#define __initenv (*__p___initenv())
_CRTIMP char *** __cdecl __p___initenv(void);
#else /* defined (_DLL) && defined (_M_IX86) */
/* pointer to initial environment block that is passed to [w]main */
#ifdef _WIN32
extern _CRTIMP wchar_t **__winitenv;
#endif /* _WIN32 */
extern _CRTIMP char **__initenv;
#endif /* defined (_DLL) && defined (_M_IX86) */
/* startup set values */
extern char *_aenvptr; /* environment ptr */
#ifdef _WIN32
extern wchar_t *_wenvptr; /* wide environment ptr */
#endif /* _WIN32 */
/* command line */
#if defined (_DLL) && defined (_M_IX86)
#define _acmdln (*__p__acmdln())
_CRTIMP char ** __cdecl __p__acmdln(void);
#define _wcmdln (*__p__wcmdln())
_CRTIMP wchar_t ** __cdecl __p__wcmdln(void);
#else /* defined (_DLL) && defined (_M_IX86) */
_CRTIMP extern char *_acmdln;
#ifdef _WIN32
_CRTIMP extern wchar_t *_wcmdln;
#endif /* _WIN32 */
#endif /* defined (_DLL) && defined (_M_IX86) */
/*
* prototypes for internal startup functions
*/
int __cdecl _cwild(void); /* wild.c */
#ifdef _WIN32
int __cdecl _wcwild(void); /* wwild.c */
#endif /* _WIN32 */
#ifdef _MT
int __cdecl _mtinit(void); /* tidtable.asm */
void __cdecl _mtterm(void); /* tidtable.asm */
void __cdecl _mtinitlocks(void); /* mlock.asm */
void __cdecl _mtdeletelocks(void); /* mlock.asm */
#endif /* _MT */
/*
* C source build only!!!!
* more prototypes for internal startup functions
*/
void __cdecl _amsg_exit(int); /* crt0.c */
#if defined (_M_M68K) || defined (_M_MPPC)
int __cdecl __cinit(void); /* crt0dat.c */
#else /* defined (_M_M68K) || defined (_M_MPPC) */
void __cdecl _cinit(void); /* crt0dat.c */
#endif /* defined (_M_M68K) || defined (_M_MPPC) */
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 */
#if defined (_M_M68K) || defined (_M_MPPC)
void __cdecl _heap_init(void);
#else /* defined (_M_M68K) || defined (_M_MPPC) */
int __cdecl _heap_init(void);
#endif /* defined (_M_M68K) || defined (_M_MPPC) */
void __cdecl _heap_term(void);
void __cdecl _heap_abort(void);
#ifdef _WIN32
void __cdecl __initconin(void); /* initcon.c */
void __cdecl __initconout(void); /* initcon.c */
#endif /* _WIN32 */
void __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);
void __cdecl _setargv(void); /* setargv.c, stdargv.c */
void __cdecl __setargv(void); /* stdargv.c */
#ifdef _WIN32
void __cdecl _wsetargv(void); /* wsetargv.c, wstdargv.c */
void __cdecl __wsetargv(void); /* wstdargv.c */
#endif /* _WIN32 */
void __cdecl _setenvp(void); /* stdenvp.c */
#ifdef _WIN32
void __cdecl _wsetenvp(void); /* wstdenvp.c */
#endif /* _WIN32 */
void __cdecl __setmbctable(unsigned int); /* mbctype.c */
#if defined (_M_M68K) || defined (_M_MPPC)
void __cdecl _envinit(void); /* intcon.c */
int __cdecl __dupx(int, int); /* dupx.c */
#define SystemSevenOrLater 1
#include "types.h"
void _ShellReturn(void); /* astart.a */
extern int _shellStack; /* astart.a */
int __GestaltAvailable(void); /* gestalt.c */
int __TrapFromGestalt(OSType selector, long bitNum); /* gestalt.c */
int SzPathNameFromDirID(long lDirID, char * szPath, int cbLen);
void __cdecl _endlowio(void); /* endlow.c */
void __cdecl _initcon(void); /* intcon.c */
void __cdecl _inittime(void); /* clock.c */
void __cdecl _onexitinit (void); /* onexit.c */
#endif /* defined (_M_M68K) || defined (_M_MPPC) */
#if defined (_MBCS)
void __cdecl __initmbctable(void); /* mbctype.c */
#endif /* defined (_MBCS) */
int __cdecl main(int, char **, char **);
#ifdef _WIN32
int __cdecl wmain(int, wchar_t **, wchar_t **);
#endif /* _WIN32 */
#ifdef _WIN32
/* helper functions for wide/multibyte environment conversion */
int __cdecl __mbtow_environ (void);
int __cdecl __wtomb_environ (void);
int __cdecl __crtsetenv (const char *, const int);
int __cdecl __crtwsetenv (const wchar_t *, const int);
#endif /* _WIN32 */
_CRTIMP extern void (__cdecl * _aexit_rtn)(int);
#if defined (_DLL) || defined (CRTDLL)
#ifndef _STARTUP_INFO_DEFINED
typedef struct
{
int newmode;
} _startupinfo;
#define _STARTUP_INFO_DEFINED
#endif /* _STARTUP_INFO_DEFINED */
_CRTIMP void __cdecl __getmainargs(int *, char ***, char ***, int, _startupinfo *);
#ifdef _WIN32
_CRTIMP void __cdecl __wgetmainargs(int *, wchar_t ***, wchar_t ***, int, _startupinfo *);
#endif /* _WIN32 */
#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
*/
#ifdef _WIN32
extern void __cdecl _dosmaperr(unsigned long);
#else /* _WIN32 */
extern void __cdecl _dosmaperr(short);
#endif /* _WIN32 */
/*
* internal routines used by the exec/spawn functions
*/
extern int __cdecl _dospawn(int, const char *, char *, char *);
#ifdef _WIN32
extern int __cdecl _wdospawn(int, const wchar_t *, wchar_t *, wchar_t *);
#endif /* _WIN32 */
extern int __cdecl _cenvarg(const char * const *, const char * const *,
char **, char **, const char *);
#ifdef _WIN32
extern int __cdecl _wcenvarg(const wchar_t * const *, const wchar_t * const *,
wchar_t **, wchar_t **, const wchar_t *);
#endif /* _WIN32 */
#ifndef _M_IX86
extern char ** _capture_argv(va_list *, const char *, char **, size_t);
#ifdef _WIN32
extern wchar_t ** _wcapture_argv(va_list *, const wchar_t *, wchar_t **, size_t);
#endif /* _WIN32 */
#endif /* _M_IX86 */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _INC_INTERNAL */