Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
2
/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
3
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
4
#ifndef __dj_include_crt0_h_
5
#define __dj_include_crt0_h_
6
 
7
#ifdef __cplusplus
8
extern "C" {
9
#endif
10
 
11
#ifndef __dj_ENFORCE_ANSI_FREESTANDING
12
 
13
#ifndef __STRICT_ANSI__
14
 
15
#ifndef _POSIX_SOURCE
16
 
17
/*****************************************************************************\
18
 * crt0.h - specific to go32 v2.0 applications, controls command line
19
 * argument creation.
20
\*****************************************************************************/
21
 
22
/*****************************************************************************\
23
 * If the application wishes to provide a wildcard expansion function,
24
 * it should define a __crt0_glob_function function.  It should return
25
 * a list of the expanded values, or 0 if no expansion will occur.
26
 * The startup code will free the returned pointer if it is nonzero.
27
 *
28
 * If no expander function is provided, wildcards will be expanded in
29
 * the POSIX.1 style.  To disable expansion, provide a __crt0_glob_function
30
 * that always returns 0.
31
 *
32
 * Applications that do not rely on environment variables can provide an
33
 * alternate version of __crt0_load_environment_file that does nothing.
34
 *
35
 * Applications that do not rely on arguments passed to main() can
36
 * provide an alternate version of __crt0_setup_arguments() that does
37
 * nothing.
38
\*****************************************************************************/
39
 
40
extern char  *__dos_argv0;
41
extern int    __crt0_argc;
42
extern char **__crt0_argv;
43
 
44
void   __crt0_load_environment_file(char *_app_name);
45
void   __crt0_setup_arguments(void);
46
char **__crt0_glob_function(char *_arg);
47
 
48
/*****************************************************************************\
49
 *
50
 *  To set any of these startup flags, add the following declaration to
51
 *  *your* source code:
52
 *
53
 *	int _crt0_startup_flags = _CRT0_FLAG_* | _CRT0_FLAG_*;
54
 *
55
 *  The default is all flags off.
56
 *
57
\*****************************************************************************/
58
 
59
extern int _crt0_startup_flags;
60
 
61
/* If set, argv[0] is left in whatever case it was.  If not set, all
62
** characters are mapped to lower case.  Note that if the argv0 field in
63
** the stubinfo structure is present, the case of that part of argv0 is not
64
** affected.
65
*/
66
#define _CRT0_FLAG_PRESERVE_UPPER_CASE		0x0001
67
 
68
/* If set, reverse slashes (dos-style) are preserved in argv[0].  If not
69
** set, all reverse slashes are replaced with unix-style slashes.
70
*/
71
#define _CRT0_FLAG_USE_DOS_SLASHES		0x0002
72
 
73
/* If set, the .EXE suffix is removed from the file name component of
74
** argv[0].  If not set, the suffix remains.
75
*/
76
#define _CRT0_FLAG_DROP_EXE_SUFFIX		0x0004
77
 
78
/* If set, the drive specifier (ex: `C:') is removed from the beginning of
79
** argv[0] (if present).  If not set, the drive specifier remains.
80
*/
81
#define _CRT0_FLAG_DROP_DRIVE_SPECIFIER	0x0008
82
 
83
/* If set, response files (ex: @gcc.rf) are not expanded.  If not set, the
84
** contents of the response files are used to create arguments.  Note that
85
** if the file does not exist, that argument remains unexpanded.
86
*/
87
#define _CRT0_FLAG_DISALLOW_RESPONSE_FILES	0x0010
88
 
89
/* If set, fill sbrk()'d memory with a constant value.  If not, memory
90
** gets whatever happens to have been in there, which breaks some
91
** applications.
92
*/
93
#define _CRT0_FLAG_FILL_SBRK_MEMORY		0x0020
94
 
95
/* If set, fill memory (above) with 0xdeadbeef, else fill with zero.
96
** This is especially useful for debugging uninitialized memory problems.
97
*/
98
#define _CRT0_FLAG_FILL_DEADBEEF		0x0040
99
 
100
/* If set, set DS limit to 4GB which allows use of near pointers to DOS
101
** (and other) memory.  WARNING, disables memory protection and bad pointers
102
** may crash the machine or wipe out your data.
103
*/
104
#define _CRT0_FLAG_NEARPTR			0x0080
105
 
106
/* If set, disable NULL pointer protection (if it can be controlled at all).
107
*/
108
#define _CRT0_FLAG_NULLOK			0x0100
109
 
110
/* If set, enabled capture of NMI in exception code.  This may cause problems
111
** with laptops and "green" boxes which use it to wake up.  Default is to
112
** leave NMIs alone and pass through to real mode code.  You decide.
113
*/
114
#define _CRT0_FLAG_NMI_SIGNAL			0x0200
115
 
116
/* If set, disable usage of long file name functions even on systems
117
** (such as Win95) which support them.  This might be needed to work
118
** around program assumptions on file name format on programs written
119
** specifically for DOS.
120
*/
121
#define _CRT0_FLAG_NO_LFN			0x0400
122
 
123
/* If set, chooses an sbrk() algorithm.  If your code requires one type
124
** or the other, set the value (since the default may change).  The non-move
125
** sbrk makes sure the base of CS/DS/SS does not change.  Each new sbrk()
126
** allocation is put in a different DPMI memory block.  This works best with
127
** DOS programs which would like to use near pointers or hardware interrupts.
128
** The unix sbrk resizes a single memory block, so programs making assumptions
129
** about unix-like sbrk behavior may run better with this choice.
130
*/
131
#define _CRT0_FLAG_NONMOVE_SBRK			0x0000		/* Default */
132
#define _CRT0_FLAG_UNIX_SBRK			0x0800
133
 
134
/* If set, locks all memory as it is allocated.  This effectively disables
135
** virtual memory, and may be useful if using extensive hardware interrupt
136
** codes in a relatively small image size.  The memory is locked after it
137
** is sbrk()ed, so the locking may fail.  This bit may be set or cleared
138
** during execution.  When sbrk() uses multiple memory zones, it can be
139
** difficult to lock all memory since the memory block size and location is
140
** impossible to determine.
141
*/
142
 
143
#define _CRT0_FLAG_LOCK_MEMORY			0x1000
144
 
145
/* If set, disables all filename letter-case conversion in functions that
146
** traverse directories (except findfirst/findnext which always return the
147
** filenames exactly as found in the directory entry).  When reset, all
148
** filenames on 8+3 MSDOS filesystems and DOS-style 8+3 filenames on LFN
149
** systems are converted to lower-case by functions such as `readdir',
150
** `getcwd', `_fixpath' and `srchpath'.  Note that when this flag is set,
151
** ALL filenames on MSDOS systems will appear in upper-case, which is
152
** both ugly and will break many Unix-born programs.  Use only if you know
153
** exactly what you are doing!
154
*/
155
 
156
#define _CRT0_FLAG_PRESERVE_FILENAME_CASE	0x2000
157
 
158
/* If set, the quote characters ', ", and \ will be retained in argv[]
159
** elements when processing command lines passed via `system'.  This is
160
** used by `redir', and should only be needed if you want to get the
161
** original command line exactly as it was passed by the caller.
162
*/
163
 
164
#define _CRT0_FLAG_KEEP_QUOTES			0x4000
165
 
166
/*****************************************************************************\
167
 *  Access to the memory handles used by the non-move sbrk algorithm.
168
 *  The handle is the SI:DI DPMI handle; the address is the offset relative
169
 *  to the application's address space.  Address will be zero unused slots > 1.
170
\*****************************************************************************/
171
 
172
typedef struct {
173
  long handle;
174
  unsigned address;
175
  } __djgpp_sbrk_handle;
176
 
177
extern __djgpp_sbrk_handle __djgpp_memory_handle_list[256];
178
__djgpp_sbrk_handle *__djgpp_memory_handle(unsigned address);
179
 
180
#endif /* !_POSIX_SOURCE */
181
#endif /* !__STRICT_ANSI__ */
182
#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */
183
 
184
#ifndef __dj_ENFORCE_FUNCTION_CALLS
185
#endif /* !__dj_ENFORCE_FUNCTION_CALLS */
186
 
187
#ifdef __cplusplus
188
}
189
#endif
190
 
191
#endif /* !__dj_include_crt0_h_ */