-
Notifications
You must be signed in to change notification settings - Fork 16
/
default.html
304 lines (274 loc) · 19.7 KB
/
default.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>default.h</TITLE>
<STYLE TYPE="TEXT/CSS">
<!--
.IE3-DUMMY { CONT-SIZE: 100%; }
BODY { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; BACKGROUND-COLOR: #E0E0E0; }
P { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H1 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H2 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H3 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H4 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H5 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
H6 { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
UL { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; }
TD { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; BACKGROUND-COLOR: #FFFFFF; }
.NOBORDER { BACKGROUND-COLOR: #E0E0E0; PADDING: 0pt; }
.NOBORDER TD { FONT-FAMILY: Verdana,Arial,Helvetica,Sans-Serif; BACKGROUND-COLOR: #E0E0E0; PADDING: 0pt; }
.CODE { FONT-FAMILY: Courier New; }
-->
</STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#E0E0E0">
<FONT SIZE="5"><B>The <default.h> Header File</B></FONT>
<HR>
<P><B>Default header file which is always included</B></P>
<P>default.h is always included at the top of every other header file.
<BR><BR>
In addition to defining the following macros, this header file handles basic symbols
such as <CODE>USE_TI89</CODE> and related ones, or <CODE>MIN_AMS</CODE>.
See the info section <A HREF="httigcc.html">How to make a TIGCC/GCC4TI program</A>.</P>
<H3><U>Functions</U></H3>
<DL INDENT="20"><DT><B><A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A></B><DD>Returns a void pointer to a TIOS ROM call (internal).<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_addr_hack_concat">_rom_call_addr_hack_concat</A></B><DD>Returns a void pointer for a TIOS ROM call, using an address hack if needed (internal).<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_addr_hack">_rom_call_addr_hack</A></B><DD>Returns a void pointer for a TIOS ROM call, using an address hack if needed.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_addr">_rom_call_addr</A></B><DD>Returns a void pointer to a TIOS ROM call.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_attr">_rom_call_attr</A></B><DD>Constructs a function definition with attributes for a TIOS ROM call.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_concat">_rom_call_concat</A></B><DD>Constructs a function definition for a TIOS ROM call (internal).<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_hack_attr_concat">_rom_call_hack_attr_concat</A></B><DD>Constructs a function definition with an address hack and attributes for a
TIOS ROM call (internal).<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_hack_attr">_rom_call_hack_attr</A></B><DD>Constructs a function definition with an address hack and attributes for a
TIOS ROM call.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call_hack">_rom_call_hack</A></B><DD>Constructs a function definition with an address hack for a TIOS ROM call.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#_rom_call">_rom_call</A></B><DD>Constructs a function definition for a TIOS ROM call.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#import_binary">import_binary</A></B><DD>Imports a binary file as an arbitrary symbol.</DL>
<H3><U>Global Variables</U></H3>
<DL INDENT="20"><DT><B><A HREF="#__jmp_tbl">__jmp_tbl</A></B><DD>A variable which points to the TIOS jump table of ROM calls.</DL>
<H3><U>Constants</U></H3>
<DL INDENT="20"><DT><B><A HREF="#MIN_AMS_MAJOR">MIN_AMS_MAJOR</A></B><DD>The major part of <CODE>MIN_AMS</CODE>.<IMG WIDTH="1" HEIGHT="20" ALIGN="TOP"><DT><B><A HREF="#MIN_AMS_MINOR">MIN_AMS_MINOR</A></B><DD>The minor part of <CODE>MIN_AMS</CODE>.</DL>
<P>See also: <A HREF="nostub.html">nostub.h</A>, <A HREF="doors.html">doors.h</A></P>
<HR>
<H3><A NAME="_rom_call_addr_concat"><U>_rom_call_addr_concat</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_addr_concat(intindex,romindex) (__jmp_tbl [intindex])</TD></TR></TABLE></P>
<P><B>Returns a void pointer to a TIOS ROM call (internal).</B></P>
<P>_rom_call_addr_concat is an internal macro which is used by
<A HREF="#_rom_call_addr">_rom_call_addr</A> and
<A HREF="#_rom_call">_rom_call</A>.
<BR><BR>
<I>intindex</I> contains the index of the ROM call as a numeric constant. It
is used in this definition, as an array subscript for
<A HREF="#__jmp_tbl">__jmp_tbl</A>, a pointer to the table of ROM calls.
<I>romindex</I> contains a symbol in the form <CODE>_ROM_CALL_xxx</CODE>,
where <I>xxx</I> is the index in hexadecimal form without the <CODE>'0x'</CODE>
prefix.
<BR><BR>
Other header files override this definition to use <I>romind</I> instead.
In particular, <A HREF="doors.html">doors.h</A> includes a
<CODE>romsymb.h</CODE> header file which defines a list of external variables
for all ROM call symbols which may appear in <I>romindex</I>, and changes the
definition to:</P>
<PRE>#define _rom_call_addr_concat(intindex,romindex) (&romindex)
</PRE>
<P>You probably wonder why _rom_call_addr_concat exists at all, since other
header files might as well override <A HREF="#_rom_call_addr">_rom_call_addr</A>,
which could be used directly by <A HREF="#_rom_call">_rom_call</A>.
The reason is that all arguments which are not concatenated are
<A HREF="cpp.html#SEC11">scanned</A> for macros that have to be expanded.
If <A HREF="#_rom_call">_rom_call</A> was using
<A HREF="#_rom_call_addr">_rom_call_addr</A>, passing <I>index</I> to
it, then the <I>index</I> parameter would be scanned. This turns out to be fatal
if the user defines a macro such as <CODE>A1</CODE>, and uses the ROM call with
the index <CODE>0xA1</CODE>.
<BR><BR>
Therefore, both <A HREF="#_rom_call_addr">_rom_call_addr</A> and
<A HREF="#_rom_call">_rom_call</A> have to use concatenation on their
<I>index</I> parameter. Then they pass the resulting symbols to _rom_call_addr_concat.</P>
<HR>
<H3><A NAME="_rom_call_addr_hack_concat"><U>_rom_call_addr_hack_concat</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_addr_hack_concat(intindex,romindex,addr,minams,minindex) (MIN_AMS >= (minams) || TIOS_entries ><BR>
(minindex) ? _rom_call_addr_concat (intindex, romindex) : ({
<TABLE><TR><TD WIDTH="12"></TD><TD CLASS="CODE">
asm (".xdef __ref_all___reject_unofficial_os");<BR>
(<B><A HREF="keywords.html#void">void</A></B> *) (addr);<BR>
</TD></TR></TABLE>
}))</TD></TR></TABLE></P>
<P><B>Returns a void pointer for a TIOS ROM call, using an address hack if needed (internal).</B></P>
<P>_rom_call_addr_hack_concat is a macro used internally by
<A HREF="#_rom_call_addr_hack">_rom_call_addr_hack</A>. Its only
purpose is to prevent <A HREF="cpp.html#SEC11">prescan</A> of the
ROM call index (see
<A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A> for more
information).</P>
<P>See also: <A HREF="#_rom_call_addr_hack">_rom_call_addr_hack</A></P>
<HR>
<H3><A NAME="_rom_call_addr_hack"><U>_rom_call_addr_hack</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_addr_hack(index,addr,minams) (_rom_call_addr_hack_concat (0x##index, _ROM_CALL_##index, (addr), (minams), 0x##index))</TD></TR></TABLE></P>
<P><B>Returns a void pointer for a TIOS ROM call, using an address hack if needed.</B></P>
<P>_rom_call_addr_hack works exactly like
<A HREF="#_rom_call_addr">_rom_call_addr</A>,
except that it takes an additional parameter <I>addr</I> specifying an
alternative way to get the address of the ROM call. If the TIOS jump table
contains the ROM call specified by <I>index</I>, the address from the jump
table is used. Otherwise _rom_call_addr_hack computes the address specified by
<I>addr</I> (which can be any pointer type), and returns it.
<BR><BR>
<I>minams</I> specifies the AMS version which first exports the ROM call
identified by <I>index</I>. If the value of
<CODE><A HREF="httigcc.html#minams">MIN_AMS</A></CODE> is greater or
equal to the value of <I>minams</I>, the ROM call is used unconditionally.
When using this macro directly, you need to make sure that this value is
correct; otherwise you will get crashes only if a specific value for
<CODE><A HREF="httigcc.html#minams">MIN_AMS</A></CODE> has been
chosen and an unsupported AMS version is used.</P>
<P>See also: <A HREF="#_rom_call_addr">_rom_call_addr</A>, <A HREF="#_rom_call_hack">_rom_call_hack</A>, <A HREF="httigcc.html#amsdep_addr">Manually Obtaining the Address of a ROM Function</A></P>
<HR>
<H3><A NAME="_rom_call_addr"><U>_rom_call_addr</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_addr(index) (_rom_call_addr_concat (0x##index, _ROM_CALL_##index))</TD></TR></TABLE></P>
<P><B>Returns a void pointer to a TIOS ROM call.</B></P>
<P>_rom_call_addr returns a void pointer to a TIOS ROM call, which you can cast
to any other pointer type. After this cast, you can dereference it and handle
it like any other variable.
<BR><BR>
Note that <I>index</I> is the index of the ROM Call in hexadecimal form, but
without the <CODE>'0x'</CODE> prefix. The reason for this unusual convention is
that kernel programs use ROM calls by referring to <CODE>_ROM_CALL_xxx</CODE>,
where <I>xxx</I> is the hexadecimal index of the ROM call.
<BR><BR>
See <A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A> for info
about the reason why _rom_call_addr_concat is used.</P>
<HR>
<H3><A NAME="_rom_call_attr"><U>_rom_call_attr</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_attr(type,args,attr,index) (*({
<TABLE><TR><TD WIDTH="12"></TD><TD CLASS="CODE">
<B><A HREF="keywords.html#typedef">typedef</A></B> <A HREF="gnuexts.html#SEC85">__ATTR_TIOS__</A> attr type (*__temp__type__) args;<BR>
(__temp__type__) (__rom_call_addr_concat (0x##index, _ROM_CALL_##index));<BR>
</TD></TR></TABLE>
}))</TD></TR></TABLE></P>
<P><B>Constructs a function definition with attributes for a TIOS ROM call.</B></P>
<P>_rom_call_attr works exactly like <A HREF="#_rom_call">_rom_call</A>,
except that it takes an additional parameter <I>attr</I> to specify
attributes for the function.</P>
<P>See also: <A HREF="#_rom_call">_rom_call</A></P>
<HR>
<H3><A NAME="_rom_call_concat"><U>_rom_call_concat</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_concat(type,args,intindex,romindex) (*((type (* <A HREF="gnuexts.html#SEC85">__ATTR_TIOS__</A>) args) (__rom_call_addr_concat (intindex, romindex))))</TD></TR></TABLE></P>
<P><B>Constructs a function definition for a TIOS ROM call (internal).</B></P>
<P>_rom_call_concat is a macro used internally by
<A HREF="#_rom_call">_rom_call</A> and other macros. Its only purpose
is to prevent <A HREF="cpp.html#SEC11">prescan</A> of the ROM call
index (see <A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A>
for more information).</P>
<P>See also: <A HREF="#_rom_call">_rom_call</A></P>
<HR>
<H3><A NAME="_rom_call_hack_attr_concat"><U>_rom_call_hack_attr_concat</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_hack_attr_concat(type,args,attr,intindex,romindex,addr,minams,minindex) (*({
<TABLE><TR><TD WIDTH="12"></TD><TD CLASS="CODE">
<B><A HREF="keywords.html#typedef">typedef</A></B> <A HREF="gnuexts.html#SEC85">__ATTR_TIOS__</A> attr type (*__temp__type__hack__) args;<BR>
(__temp__type__hack__) (MIN_AMS >= (minams) || TIOS_entries ><BR>
(minindex) ? (<B><A HREF="keywords.html#const">const</A></B> <B><A HREF="keywords.html#void">void</A></B> *) (&(_rom_call_concat (<B><A HREF="keywords.html#void">void</A></B>, (<B><A HREF="keywords.html#void">void</A></B>), (intindex), (romindex)))) : ({
<TABLE><TR><TD WIDTH="12"></TD><TD CLASS="CODE">
asm (".xdef __ref_all___reject_unofficial_os");<BR>
(<B><A HREF="keywords.html#const">const</A></B> <B><A HREF="keywords.html#void">void</A></B> *) (addr);<BR>
</TD></TR></TABLE>
}));<BR>
</TD></TR></TABLE>
}))</TD></TR></TABLE></P>
<P><B>Constructs a function definition with an address hack and attributes for a
TIOS ROM call (internal).</B></P>
<P>_rom_call_hack_attr_concat is a macro used internally by
<A HREF="#_rom_call_hack">_rom_call_hack</A> and
<A HREF="#_rom_call_hack_attr">_rom_call_hack_attr</A>. Its only
purpose is to prevent <A HREF="cpp.html#SEC11">prescan</A> of the
ROM call index (see
<A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A> for more
information).</P>
<P>See also: <A HREF="#_rom_call_hack_attr">_rom_call_hack_attr</A>, <A HREF="#_rom_call_hack">_rom_call_hack</A>, <A HREF="#_rom_call">_rom_call</A></P>
<HR>
<H3><A NAME="_rom_call_hack_attr"><U>_rom_call_hack_attr</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_hack_attr(type,args,attr,index,addr,minams) (_rom_call_hack_attr_concat (type, args, attr, 0x##index, _ROM_CALL_##index, (addr), (minams), 0x##index))</TD></TR></TABLE></P>
<P><B>Constructs a function definition with an address hack and attributes for a
TIOS ROM call.</B></P>
<P>_rom_call_hack_attr works exactly like
<A HREF="#_rom_call_hack">_rom_call_hack</A>, except that it takes an
additional parameter <I>attr</I> to specify attributes for the function.</P>
<P>See also: <A HREF="#_rom_call_hack">_rom_call_hack</A>, <A HREF="#_rom_call_addr_hack">_rom_call_addr_hack</A>, <A HREF="#_rom_call_attr">_rom_call_attr</A>, <A HREF="#_rom_call">_rom_call</A></P>
<HR>
<H3><A NAME="_rom_call_hack"><U>_rom_call_hack</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call_hack(type,args,index,addr,minams) (_rom_call_hack_attr_concat (type, args, , 0x##index, _ROM_CALL_##index, (addr), (minams), 0x##index))</TD></TR></TABLE></P>
<P><B>Constructs a function definition with an address hack for a TIOS ROM call.</B></P>
<P>_rom_call_hack works exactly like <A HREF="#_rom_call">_rom_call</A>,
except that it takes an additional parameter <I>addr</I> specifying an
alternative way to get the address of the ROM call. If the TIOS jump table
contains the ROM call specified by <I>index</I>, the address from the jump
table is used. Otherwise _rom_call_hack computes the address specified by
<I>addr</I> (which can be any pointer type), and uses it as the address of
the ROM call.
<BR><BR>
<I>minams</I> specifies the AMS version which first exports the ROM call
identified by <I>index</I>. If the value of
<CODE><A HREF="httigcc.html#minams">MIN_AMS</A></CODE> is greater or
equal to the value of <I>minams</I>, the ROM call is used unconditionally.
When using this macro directly, you need to make sure that this value is
correct; otherwise you will get crashes only if a specific value for
<CODE><A HREF="httigcc.html#minams">MIN_AMS</A></CODE> has been
chosen and an unsupported AMS version is used.</P>
<P>See also: <A HREF="#_rom_call">_rom_call</A>, <A HREF="#_rom_call_hack_attr">_rom_call_hack_attr</A>, <A HREF="#_rom_call_addr_hack">_rom_call_addr_hack</A>, <A HREF="httigcc.html#amsdep_addr">Manually Obtaining the Address of a ROM Function</A></P>
<HR>
<H3><A NAME="_rom_call"><U>_rom_call</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> _rom_call(type,args,index) (_rom_call_concat (type, args, 0x##index, _ROM_CALL_##index))</TD></TR></TABLE></P>
<P><B>Constructs a function definition for a TIOS ROM call.</B></P>
<P>_rom_call uses <A HREF="#_rom_call_addr">_rom_call_addr</A> to get a
void pointer to the location in memory where the function is stored, and then
casts this pointer to a temporarily defined "pointer to function" type.
<BR><BR>
To avoid <A HREF="cpp.html#SEC11">argument prescan</A> of
<I>index</I>, <A HREF="#_rom_call_addr">_rom_call_addr</A> cannot be
used directly, but instead another macro has to be used, which has been
called <A HREF="#_rom_call_addr_concat">_rom_call_addr_concat</A>.</P>
<P>See also: <A HREF="#_rom_call_attr">_rom_call_attr</A>, <A HREF="#_rom_call_hack">_rom_call_hack</A>, <A HREF="#_rom_call_addr">_rom_call_addr</A></P>
<HR>
<H3><A NAME="import_binary"><U>import_binary</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> import_binary(filename,symname) asm(".globl "#symname"\n"#symname":\n\t.incbin \""filename"\"")</TD></TR></TABLE></P>
<P><B>Imports a binary file as an arbitrary symbol.</B></P>
<P>import_binary imports a binary file at the current position using the
<CODE><A HREF="gnuasm.html#SEC97B">.incbin</A></CODE> assembler directive.
The parameter <I>filename</I> specifies the file name in quotes;
<I>symname</I> specifies the symbol name to assign to the contents.
You can give the symbol any type using an external definition; for example:</P>
<PRE>extern unsigned char myarray[];
import_binary ("myfile.bin", myarray);
</PRE>
<P>It is not recommended to use import_binary at any place other than the top
level, as binary contents placed inside functions will generally be
interpreted as code.</P>
<HR>
<H3><A NAME="__jmp_tbl"><U>__jmp_tbl</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> __jmp_tbl (*(<B><A HREF="keywords.html#void">void</A></B>***)0xC8)</TD></TR></TABLE></P>
<P><B>A variable which points to the TIOS jump table of ROM calls.</B></P>
<P>__jmp_tbl is a global variable, which is implemented here as a macro. Defining
<CODE><A HREF="httigcc.html#advanced_optrom">OPTIMIZE_ROM_CALLS</A></CODE> causes this definition to be overridden; in
this case, __jmp_tbl will be a real variable stored in the register <CODE>a5</CODE>.
<BR><BR>
__jmp_tbl is always a pointer to a void pointer, so you can treat it as an
array of void pointers. Its size can be determined using the
<A HREF="compat.html#TIOS_entries">TIOS_entries</A> pseudo-constant.
<BR><BR>
Most of the entries in the jump table point to functions, but some of them
actually point to global variables of the operating system.
<BR><BR>
Usually, it is not desirable to use __jmp_tbl directly. The code may be
optimized a little better if you use the
<A HREF="#_rom_call">_rom_call</A> and
<A HREF="#_rom_call_addr">_rom_call_addr</A> macros instead.</P>
<HR>
<H3><A NAME="MIN_AMS_MAJOR"><U>MIN_AMS_MAJOR</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> MIN_AMS_MAJOR (MIN_AMS / 100)</TD></TR></TABLE></P>
<P><B>The major part of <CODE>MIN_AMS</CODE>.</B></P>
<P>MIN_AMS_MAJOR contains the major version number of the defined minimum AMS
version. It may be used in header files which are supplied to a lot of users
to test the availability of certain features, in addition to <CODE>MIN_AMS</CODE>
itself.</P>
<HR>
<H3><A NAME="MIN_AMS_MINOR"><U>MIN_AMS_MINOR</U></A></H3>
<P><TABLE BORDER="1" CELLPADDING="2"><TR><TD CLASS="CODE"><B><A HREF="cpp.html#SEC10">#define</A></B> MIN_AMS_MINOR (MIN_AMS % 100)</TD></TR></TABLE></P>
<P><B>The minor part of <CODE>MIN_AMS</CODE>.</B></P>
<P>MIN_AMS_MINOR contains the minor version number of the defined minimum AMS
version. It may be used in header files which are supplied to a lot of users
to test the availability of certain features, in addition to <CODE>MIN_AMS</CODE>
itself.</P>
<HR>
<H3><A HREF="index.html">Return to the main index</A></H3>
</BODY>
</HTML>