kolibrios/programs/develop/libraries/menuetlibc/include/crt0.h

192 lines
7.3 KiB
C
Raw Normal View History

/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
#ifndef __dj_include_crt0_h_
#define __dj_include_crt0_h_
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __dj_ENFORCE_ANSI_FREESTANDING
#ifndef __STRICT_ANSI__
#ifndef _POSIX_SOURCE
/*****************************************************************************\
* crt0.h - specific to go32 v2.0 applications, controls command line
* argument creation.
\*****************************************************************************/
/*****************************************************************************\
* If the application wishes to provide a wildcard expansion function,
* it should define a __crt0_glob_function function. It should return
* a list of the expanded values, or 0 if no expansion will occur.
* The startup code will free the returned pointer if it is nonzero.
*
* If no expander function is provided, wildcards will be expanded in
* the POSIX.1 style. To disable expansion, provide a __crt0_glob_function
* that always returns 0.
*
* Applications that do not rely on environment variables can provide an
* alternate version of __crt0_load_environment_file that does nothing.
*
* Applications that do not rely on arguments passed to main() can
* provide an alternate version of __crt0_setup_arguments() that does
* nothing.
\*****************************************************************************/
extern char *__dos_argv0;
extern int __crt0_argc;
extern char **__crt0_argv;
void __crt0_load_environment_file(char *_app_name);
void __crt0_setup_arguments(void);
char **__crt0_glob_function(char *_arg);
/*****************************************************************************\
*
* To set any of these startup flags, add the following declaration to
* *your* source code:
*
* int _crt0_startup_flags = _CRT0_FLAG_* | _CRT0_FLAG_*;
*
* The default is all flags off.
*
\*****************************************************************************/
extern int _crt0_startup_flags;
/* If set, argv[0] is left in whatever case it was. If not set, all
** characters are mapped to lower case. Note that if the argv0 field in
** the stubinfo structure is present, the case of that part of argv0 is not
** affected.
*/
#define _CRT0_FLAG_PRESERVE_UPPER_CASE 0x0001
/* If set, reverse slashes (dos-style) are preserved in argv[0]. If not
** set, all reverse slashes are replaced with unix-style slashes.
*/
#define _CRT0_FLAG_USE_DOS_SLASHES 0x0002
/* If set, the .EXE suffix is removed from the file name component of
** argv[0]. If not set, the suffix remains.
*/
#define _CRT0_FLAG_DROP_EXE_SUFFIX 0x0004
/* If set, the drive specifier (ex: `C:') is removed from the beginning of
** argv[0] (if present). If not set, the drive specifier remains.
*/
#define _CRT0_FLAG_DROP_DRIVE_SPECIFIER 0x0008
/* If set, response files (ex: @gcc.rf) are not expanded. If not set, the
** contents of the response files are used to create arguments. Note that
** if the file does not exist, that argument remains unexpanded.
*/
#define _CRT0_FLAG_DISALLOW_RESPONSE_FILES 0x0010
/* If set, fill sbrk()'d memory with a constant value. If not, memory
** gets whatever happens to have been in there, which breaks some
** applications.
*/
#define _CRT0_FLAG_FILL_SBRK_MEMORY 0x0020
/* If set, fill memory (above) with 0xdeadbeef, else fill with zero.
** This is especially useful for debugging uninitialized memory problems.
*/
#define _CRT0_FLAG_FILL_DEADBEEF 0x0040
/* If set, set DS limit to 4GB which allows use of near pointers to DOS
** (and other) memory. WARNING, disables memory protection and bad pointers
** may crash the machine or wipe out your data.
*/
#define _CRT0_FLAG_NEARPTR 0x0080
/* If set, disable NULL pointer protection (if it can be controlled at all).
*/
#define _CRT0_FLAG_NULLOK 0x0100
/* If set, enabled capture of NMI in exception code. This may cause problems
** with laptops and "green" boxes which use it to wake up. Default is to
** leave NMIs alone and pass through to real mode code. You decide.
*/
#define _CRT0_FLAG_NMI_SIGNAL 0x0200
/* If set, disable usage of long file name functions even on systems
** (such as Win95) which support them. This might be needed to work
** around program assumptions on file name format on programs written
** specifically for DOS.
*/
#define _CRT0_FLAG_NO_LFN 0x0400
/* If set, chooses an sbrk() algorithm. If your code requires one type
** or the other, set the value (since the default may change). The non-move
** sbrk makes sure the base of CS/DS/SS does not change. Each new sbrk()
** allocation is put in a different DPMI memory block. This works best with
** DOS programs which would like to use near pointers or hardware interrupts.
** The unix sbrk resizes a single memory block, so programs making assumptions
** about unix-like sbrk behavior may run better with this choice.
*/
#define _CRT0_FLAG_NONMOVE_SBRK 0x0000 /* Default */
#define _CRT0_FLAG_UNIX_SBRK 0x0800
/* If set, locks all memory as it is allocated. This effectively disables
** virtual memory, and may be useful if using extensive hardware interrupt
** codes in a relatively small image size. The memory is locked after it
** is sbrk()ed, so the locking may fail. This bit may be set or cleared
** during execution. When sbrk() uses multiple memory zones, it can be
** difficult to lock all memory since the memory block size and location is
** impossible to determine.
*/
#define _CRT0_FLAG_LOCK_MEMORY 0x1000
/* If set, disables all filename letter-case conversion in functions that
** traverse directories (except findfirst/findnext which always return the
** filenames exactly as found in the directory entry). When reset, all
** filenames on 8+3 MSDOS filesystems and DOS-style 8+3 filenames on LFN
** systems are converted to lower-case by functions such as `readdir',
** `getcwd', `_fixpath' and `srchpath'. Note that when this flag is set,
** ALL filenames on MSDOS systems will appear in upper-case, which is
** both ugly and will break many Unix-born programs. Use only if you know
** exactly what you are doing!
*/
#define _CRT0_FLAG_PRESERVE_FILENAME_CASE 0x2000
/* If set, the quote characters ', ", and \ will be retained in argv[]
** elements when processing command lines passed via `system'. This is
** used by `redir', and should only be needed if you want to get the
** original command line exactly as it was passed by the caller.
*/
#define _CRT0_FLAG_KEEP_QUOTES 0x4000
/*****************************************************************************\
* Access to the memory handles used by the non-move sbrk algorithm.
* The handle is the SI:DI DPMI handle; the address is the offset relative
* to the application's address space. Address will be zero unused slots > 1.
\*****************************************************************************/
typedef struct {
long handle;
unsigned address;
} __djgpp_sbrk_handle;
extern __djgpp_sbrk_handle __djgpp_memory_handle_list[256];
__djgpp_sbrk_handle *__djgpp_memory_handle(unsigned address);
#endif /* !_POSIX_SOURCE */
#endif /* !__STRICT_ANSI__ */
#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */
#ifndef __dj_ENFORCE_FUNCTION_CALLS
#endif /* !__dj_ENFORCE_FUNCTION_CALLS */
#ifdef __cplusplus
}
#endif
#endif /* !__dj_include_crt0_h_ */