home *** CD-ROM | disk | FTP | other *** search
- /* 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
-
- /*****************************************************************************\
- * 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_ */
-