xref: /freebsd/contrib/bc/src/data.c (revision 50696a6e8cbfdbf4a0d00f2f85f1951aa0d8e23d)
1252884aeSStefan Eßer /*
2252884aeSStefan Eßer  * *****************************************************************************
3252884aeSStefan Eßer  *
43aa99676SStefan Eßer  * SPDX-License-Identifier: BSD-2-Clause
5252884aeSStefan Eßer  *
63aa99676SStefan Eßer  * Copyright (c) 2018-2020 Gavin D. Howard and contributors.
7252884aeSStefan Eßer  *
8252884aeSStefan Eßer  * Redistribution and use in source and binary forms, with or without
9252884aeSStefan Eßer  * modification, are permitted provided that the following conditions are met:
10252884aeSStefan Eßer  *
11252884aeSStefan Eßer  * * Redistributions of source code must retain the above copyright notice, this
12252884aeSStefan Eßer  *   list of conditions and the following disclaimer.
13252884aeSStefan Eßer  *
14252884aeSStefan Eßer  * * Redistributions in binary form must reproduce the above copyright notice,
15252884aeSStefan Eßer  *   this list of conditions and the following disclaimer in the documentation
16252884aeSStefan Eßer  *   and/or other materials provided with the distribution.
17252884aeSStefan Eßer  *
18252884aeSStefan Eßer  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19252884aeSStefan Eßer  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20252884aeSStefan Eßer  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21252884aeSStefan Eßer  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22252884aeSStefan Eßer  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23252884aeSStefan Eßer  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24252884aeSStefan Eßer  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25252884aeSStefan Eßer  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26252884aeSStefan Eßer  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27252884aeSStefan Eßer  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28252884aeSStefan Eßer  * POSSIBILITY OF SUCH DAMAGE.
29252884aeSStefan Eßer  *
30252884aeSStefan Eßer  * *****************************************************************************
31252884aeSStefan Eßer  *
32252884aeSStefan Eßer  * Constant data for bc.
33252884aeSStefan Eßer  *
34252884aeSStefan Eßer  */
35252884aeSStefan Eßer 
36252884aeSStefan Eßer #include <args.h>
37252884aeSStefan Eßer #include <lex.h>
38252884aeSStefan Eßer #include <parse.h>
39252884aeSStefan Eßer #include <bc.h>
40252884aeSStefan Eßer #include <dc.h>
41252884aeSStefan Eßer #include <num.h>
42252884aeSStefan Eßer #include <rand.h>
43252884aeSStefan Eßer #include <program.h>
44252884aeSStefan Eßer #include <vm.h>
45252884aeSStefan Eßer 
46*50696a6eSStefan Eßer #if !BC_ENABLE_LIBRARY
47*50696a6eSStefan Eßer 
48252884aeSStefan Eßer #if BC_ENABLED
49252884aeSStefan Eßer const char bc_sig_msg[] = "\ninterrupt (type \"quit\" to exit)\n";
50252884aeSStefan Eßer const uchar bc_sig_msg_len = (uchar) (sizeof(bc_sig_msg) - 1);
51252884aeSStefan Eßer #endif // BC_ENABLED
52252884aeSStefan Eßer #if DC_ENABLED
53252884aeSStefan Eßer const char dc_sig_msg[] = "\ninterrupt (type \"q\" to exit)\n";
54252884aeSStefan Eßer const uchar dc_sig_msg_len = (uchar) (sizeof(dc_sig_msg) - 1);
55252884aeSStefan Eßer #endif // DC_ENABLED
56252884aeSStefan Eßer 
57252884aeSStefan Eßer const char bc_copyright[] =
58252884aeSStefan Eßer 	"Copyright (c) 2018-2020 Gavin D. Howard and contributors\n"
59252884aeSStefan Eßer 	"Report bugs at: https://git.yzena.com/gavin/bc\n\n"
60252884aeSStefan Eßer 	"This is free software with ABSOLUTELY NO WARRANTY.\n";
61252884aeSStefan Eßer 
62252884aeSStefan Eßer const char* const bc_err_func_header = "Function:";
63252884aeSStefan Eßer const char* const bc_err_line = ":%zu";
64252884aeSStefan Eßer 
65252884aeSStefan Eßer const char *bc_errs[] = {
66252884aeSStefan Eßer 	"Math error:",
67252884aeSStefan Eßer 	"Parse error:",
68252884aeSStefan Eßer 	"Runtime error:",
69252884aeSStefan Eßer 	"Fatal error:",
70252884aeSStefan Eßer #if BC_ENABLED
71252884aeSStefan Eßer 	"Warning:",
72252884aeSStefan Eßer #endif // BC_ENABLED
73252884aeSStefan Eßer };
74252884aeSStefan Eßer 
75252884aeSStefan Eßer const uchar bc_err_ids[] = {
76252884aeSStefan Eßer 
77252884aeSStefan Eßer 	BC_ERR_IDX_MATH, BC_ERR_IDX_MATH, BC_ERR_IDX_MATH, BC_ERR_IDX_MATH,
78252884aeSStefan Eßer 
79252884aeSStefan Eßer 	BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL,
80252884aeSStefan Eßer 	BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL, BC_ERR_IDX_FATAL,
81252884aeSStefan Eßer 
82252884aeSStefan Eßer 	BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC,
83252884aeSStefan Eßer 	BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC,
84252884aeSStefan Eßer 	BC_ERR_IDX_EXEC, BC_ERR_IDX_EXEC,
85252884aeSStefan Eßer 
86252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
87252884aeSStefan Eßer 	BC_ERR_IDX_PARSE,
88252884aeSStefan Eßer #if BC_ENABLED
89252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
90252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
91252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
92252884aeSStefan Eßer 
93252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
94252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
95252884aeSStefan Eßer 	BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE,
96252884aeSStefan Eßer 	BC_ERR_IDX_PARSE,
97252884aeSStefan Eßer #endif // BC_ENABLED
98252884aeSStefan Eßer 
99252884aeSStefan Eßer };
100252884aeSStefan Eßer 
101252884aeSStefan Eßer const char* const bc_err_msgs[] = {
102252884aeSStefan Eßer 
103252884aeSStefan Eßer 	"negative number",
104252884aeSStefan Eßer 	"non-integer number",
105252884aeSStefan Eßer 	"overflow: number cannot fit",
106252884aeSStefan Eßer 	"divide by 0",
107252884aeSStefan Eßer 
108252884aeSStefan Eßer 	"memory allocation failed",
109252884aeSStefan Eßer 	"I/O error",
110252884aeSStefan Eßer 	"cannot open file: %s",
111252884aeSStefan Eßer 	"file is not ASCII: %s",
112252884aeSStefan Eßer 	"path is a directory: %s",
113252884aeSStefan Eßer 	"bad command-line option: \"%s\"",
114252884aeSStefan Eßer 	"option requires an argument: '%c' (\"%s\")",
115252884aeSStefan Eßer 	"option takes no arguments: '%c' (\"%s\")",
116252884aeSStefan Eßer 
117252884aeSStefan Eßer 	"bad ibase: must be [%lu, %lu]",
118252884aeSStefan Eßer 	"bad obase: must be [%lu, %lu]",
119252884aeSStefan Eßer 	"bad scale: must be [%lu, %lu]",
120252884aeSStefan Eßer 	"bad read() expression",
121252884aeSStefan Eßer 	"read() call inside of a read() call",
122252884aeSStefan Eßer 	"variable or array element is the wrong type",
123252884aeSStefan Eßer #if DC_ENABLED
124252884aeSStefan Eßer 	"stack has too few elements",
125252884aeSStefan Eßer #else // DC_ENABLED
126252884aeSStefan Eßer 	NULL,
127252884aeSStefan Eßer #endif // DC_ENABLED
128252884aeSStefan Eßer #if BC_ENABLED
129252884aeSStefan Eßer 	"wrong number of parameters; need %zu, have %zu",
130252884aeSStefan Eßer 	"undefined function: %s()",
131252884aeSStefan Eßer 	"cannot use a void value in an expression",
132252884aeSStefan Eßer #else
133252884aeSStefan Eßer 	NULL, NULL, NULL,
134252884aeSStefan Eßer #endif // BC_ENABLED
135252884aeSStefan Eßer 
136252884aeSStefan Eßer 	"end of file",
137252884aeSStefan Eßer 	"bad character '%c'",
138252884aeSStefan Eßer 	"string end cannot be found",
139252884aeSStefan Eßer 	"comment end cannot be found",
140252884aeSStefan Eßer 	"bad token",
141252884aeSStefan Eßer #if BC_ENABLED
142252884aeSStefan Eßer 	"bad expression",
143252884aeSStefan Eßer 	"empty expression",
144252884aeSStefan Eßer 	"bad print statement",
145252884aeSStefan Eßer 	"bad function definition",
146d213476dSStefan Eßer 	("bad assignment: left side must be scale, ibase, "
147d213476dSStefan Eßer 		"obase, seed, last, var, or array element"),
148252884aeSStefan Eßer 	"no auto variable found",
149252884aeSStefan Eßer 	"function parameter or auto \"%s%s\" already exists",
150252884aeSStefan Eßer 	"block end cannot be found",
151252884aeSStefan Eßer 	"cannot return a value from void function: %s()",
152252884aeSStefan Eßer 	"var cannot be a reference: %s",
153252884aeSStefan Eßer 
154252884aeSStefan Eßer 	"POSIX does not allow names longer than 1 character: %s",
155252884aeSStefan Eßer 	"POSIX does not allow '#' script comments",
156252884aeSStefan Eßer 	"POSIX does not allow the following keyword: %s",
157252884aeSStefan Eßer 	"POSIX does not allow a period ('.') as a shortcut for the last result",
158252884aeSStefan Eßer 	"POSIX requires parentheses around return expressions",
159252884aeSStefan Eßer 	"POSIX does not allow the following operator: %s",
160252884aeSStefan Eßer 	"POSIX does not allow comparison operators outside if statements or loops",
161252884aeSStefan Eßer 	"POSIX requires 0 or 1 comparison operators per condition",
162252884aeSStefan Eßer 	"POSIX requires all 3 parts of a for loop to be non-empty",
163252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
164252884aeSStefan Eßer 	"POSIX does not allow exponential notation",
165252884aeSStefan Eßer #else
166252884aeSStefan Eßer 	NULL,
167252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
168252884aeSStefan Eßer 	"POSIX does not allow array references as function parameters",
169252884aeSStefan Eßer 	"POSIX does not allow void functions",
170252884aeSStefan Eßer 	"POSIX requires the left brace be on the same line as the function header",
171252884aeSStefan Eßer #endif // BC_ENABLED
172252884aeSStefan Eßer 
173252884aeSStefan Eßer };
174252884aeSStefan Eßer 
175252884aeSStefan Eßer #if BC_ENABLE_HISTORY
176252884aeSStefan Eßer const char *bc_history_bad_terms[] = { "dumb", "cons25", "emacs", NULL };
177252884aeSStefan Eßer 
178252884aeSStefan Eßer const char bc_history_tab[] = "        ";
179252884aeSStefan Eßer const size_t bc_history_tab_len = sizeof(bc_history_tab) - 1;
180252884aeSStefan Eßer 
181252884aeSStefan Eßer // These are listed in ascending order for efficiency.
182252884aeSStefan Eßer const uint32_t bc_history_wchars[][2] = {
183252884aeSStefan Eßer 	{ 0x1100, 0x115F },
184252884aeSStefan Eßer 	{ 0x231A, 0x231B },
185252884aeSStefan Eßer 	{ 0x2329, 0x232A },
186252884aeSStefan Eßer 	{ 0x23E9, 0x23EC },
187252884aeSStefan Eßer 	{ 0x23F0, 0x23F0 },
188252884aeSStefan Eßer 	{ 0x23F3, 0x23F3 },
189252884aeSStefan Eßer 	{ 0x25FD, 0x25FE },
190252884aeSStefan Eßer 	{ 0x2614, 0x2615 },
191252884aeSStefan Eßer 	{ 0x2648, 0x2653 },
192252884aeSStefan Eßer 	{ 0x267F, 0x267F },
193252884aeSStefan Eßer 	{ 0x2693, 0x2693 },
194252884aeSStefan Eßer 	{ 0x26A1, 0x26A1 },
195252884aeSStefan Eßer 	{ 0x26AA, 0x26AB },
196252884aeSStefan Eßer 	{ 0x26BD, 0x26BE },
197252884aeSStefan Eßer 	{ 0x26C4, 0x26C5 },
198252884aeSStefan Eßer 	{ 0x26CE, 0x26CE },
199252884aeSStefan Eßer 	{ 0x26D4, 0x26D4 },
200252884aeSStefan Eßer 	{ 0x26EA, 0x26EA },
201252884aeSStefan Eßer 	{ 0x26F2, 0x26F3 },
202252884aeSStefan Eßer 	{ 0x26F5, 0x26F5 },
203252884aeSStefan Eßer 	{ 0x26FA, 0x26FA },
204252884aeSStefan Eßer 	{ 0x26FD, 0x26FD },
205252884aeSStefan Eßer 	{ 0x2705, 0x2705 },
206252884aeSStefan Eßer 	{ 0x270A, 0x270B },
207252884aeSStefan Eßer 	{ 0x2728, 0x2728 },
208252884aeSStefan Eßer 	{ 0x274C, 0x274C },
209252884aeSStefan Eßer 	{ 0x274E, 0x274E },
210252884aeSStefan Eßer 	{ 0x2753, 0x2755 },
211252884aeSStefan Eßer 	{ 0x2757, 0x2757 },
212252884aeSStefan Eßer 	{ 0x2795, 0x2797 },
213252884aeSStefan Eßer 	{ 0x27B0, 0x27B0 },
214252884aeSStefan Eßer 	{ 0x27BF, 0x27BF },
215252884aeSStefan Eßer 	{ 0x2B1B, 0x2B1C },
216252884aeSStefan Eßer 	{ 0x2B50, 0x2B50 },
217252884aeSStefan Eßer 	{ 0x2B55, 0x2B55 },
218252884aeSStefan Eßer 	{ 0x2E80, 0x2E99 },
219252884aeSStefan Eßer 	{ 0x2E9B, 0x2EF3 },
220252884aeSStefan Eßer 	{ 0x2F00, 0x2FD5 },
221252884aeSStefan Eßer 	{ 0x2FF0, 0x2FFB },
222252884aeSStefan Eßer 	{ 0x3001, 0x303E },
223252884aeSStefan Eßer 	{ 0x3041, 0x3096 },
224252884aeSStefan Eßer 	{ 0x3099, 0x30FF },
225252884aeSStefan Eßer 	{ 0x3105, 0x312D },
226252884aeSStefan Eßer 	{ 0x3131, 0x318E },
227252884aeSStefan Eßer 	{ 0x3190, 0x31BA },
228252884aeSStefan Eßer 	{ 0x31C0, 0x31E3 },
229252884aeSStefan Eßer 	{ 0x31F0, 0x321E },
230252884aeSStefan Eßer 	{ 0x3220, 0x3247 },
231252884aeSStefan Eßer 	{ 0x3250, 0x32FE },
232252884aeSStefan Eßer 	{ 0x3300, 0x4DBF },
233252884aeSStefan Eßer 	{ 0x4E00, 0xA48C },
234252884aeSStefan Eßer 	{ 0xA490, 0xA4C6 },
235252884aeSStefan Eßer 	{ 0xA960, 0xA97C },
236252884aeSStefan Eßer 	{ 0xAC00, 0xD7A3 },
237252884aeSStefan Eßer 	{ 0xF900, 0xFAFF },
238252884aeSStefan Eßer 	{ 0xFE10, 0xFE19 },
239252884aeSStefan Eßer 	{ 0xFE30, 0xFE52 },
240252884aeSStefan Eßer 	{ 0xFE54, 0xFE66 },
241252884aeSStefan Eßer 	{ 0xFE68, 0xFE6B },
242252884aeSStefan Eßer 	{ 0x16FE0, 0x16FE0 },
243252884aeSStefan Eßer 	{ 0x17000, 0x187EC },
244252884aeSStefan Eßer 	{ 0x18800, 0x18AF2 },
245252884aeSStefan Eßer 	{ 0x1B000, 0x1B001 },
246252884aeSStefan Eßer 	{ 0x1F004, 0x1F004 },
247252884aeSStefan Eßer 	{ 0x1F0CF, 0x1F0CF },
248252884aeSStefan Eßer 	{ 0x1F18E, 0x1F18E },
249252884aeSStefan Eßer 	{ 0x1F191, 0x1F19A },
250252884aeSStefan Eßer 	{ 0x1F200, 0x1F202 },
251252884aeSStefan Eßer 	{ 0x1F210, 0x1F23B },
252252884aeSStefan Eßer 	{ 0x1F240, 0x1F248 },
253252884aeSStefan Eßer 	{ 0x1F250, 0x1F251 },
254252884aeSStefan Eßer 	{ 0x1F300, 0x1F320 },
255252884aeSStefan Eßer 	{ 0x1F32D, 0x1F335 },
256252884aeSStefan Eßer 	{ 0x1F337, 0x1F37C },
257252884aeSStefan Eßer 	{ 0x1F37E, 0x1F393 },
258252884aeSStefan Eßer 	{ 0x1F3A0, 0x1F3CA },
259252884aeSStefan Eßer 	{ 0x1F3CF, 0x1F3D3 },
260252884aeSStefan Eßer 	{ 0x1F3E0, 0x1F3F0 },
261252884aeSStefan Eßer 	{ 0x1F3F4, 0x1F3F4 },
262252884aeSStefan Eßer 	{ 0x1F3F8, 0x1F43E },
263252884aeSStefan Eßer 	{ 0x1F440, 0x1F440 },
264252884aeSStefan Eßer 	{ 0x1F442, 0x1F4FC },
265252884aeSStefan Eßer 	{ 0x1F4FF, 0x1F53D },
266252884aeSStefan Eßer 	{ 0x1F54B, 0x1F54E },
267252884aeSStefan Eßer 	{ 0x1F550, 0x1F567 },
268252884aeSStefan Eßer 	{ 0x1F57A, 0x1F57A },
269252884aeSStefan Eßer 	{ 0x1F595, 0x1F596 },
270252884aeSStefan Eßer 	{ 0x1F5A4, 0x1F5A4 },
271252884aeSStefan Eßer 	{ 0x1F5FB, 0x1F64F },
272252884aeSStefan Eßer 	{ 0x1F680, 0x1F6C5 },
273252884aeSStefan Eßer 	{ 0x1F6CC, 0x1F6CC },
274252884aeSStefan Eßer 	{ 0x1F6D0, 0x1F6D2 },
275252884aeSStefan Eßer 	{ 0x1F6EB, 0x1F6EC },
276252884aeSStefan Eßer 	{ 0x1F6F4, 0x1F6F6 },
277252884aeSStefan Eßer 	{ 0x1F910, 0x1F91E },
278252884aeSStefan Eßer 	{ 0x1F920, 0x1F927 },
279252884aeSStefan Eßer 	{ 0x1F930, 0x1F930 },
280252884aeSStefan Eßer 	{ 0x1F933, 0x1F93E },
281252884aeSStefan Eßer 	{ 0x1F940, 0x1F94B },
282252884aeSStefan Eßer 	{ 0x1F950, 0x1F95E },
283252884aeSStefan Eßer 	{ 0x1F980, 0x1F991 },
284252884aeSStefan Eßer 	{ 0x1F9C0, 0x1F9C0 },
285252884aeSStefan Eßer 	{ 0x20000, 0x2FFFD },
286252884aeSStefan Eßer 	{ 0x30000, 0x3FFFD },
287252884aeSStefan Eßer };
288252884aeSStefan Eßer 
289252884aeSStefan Eßer const size_t bc_history_wchars_len =
290252884aeSStefan Eßer 	sizeof(bc_history_wchars) / sizeof(bc_history_wchars[0]);
291252884aeSStefan Eßer 
292252884aeSStefan Eßer // These are listed in ascending order for efficiency.
293252884aeSStefan Eßer const uint32_t bc_history_combo_chars[] = {
294252884aeSStefan Eßer 	0x0300,0x0301,0x0302,0x0303,0x0304,0x0305,0x0306,0x0307,
295252884aeSStefan Eßer 	0x0308,0x0309,0x030A,0x030B,0x030C,0x030D,0x030E,0x030F,
296252884aeSStefan Eßer 	0x0310,0x0311,0x0312,0x0313,0x0314,0x0315,0x0316,0x0317,
297252884aeSStefan Eßer 	0x0318,0x0319,0x031A,0x031B,0x031C,0x031D,0x031E,0x031F,
298252884aeSStefan Eßer 	0x0320,0x0321,0x0322,0x0323,0x0324,0x0325,0x0326,0x0327,
299252884aeSStefan Eßer 	0x0328,0x0329,0x032A,0x032B,0x032C,0x032D,0x032E,0x032F,
300252884aeSStefan Eßer 	0x0330,0x0331,0x0332,0x0333,0x0334,0x0335,0x0336,0x0337,
301252884aeSStefan Eßer 	0x0338,0x0339,0x033A,0x033B,0x033C,0x033D,0x033E,0x033F,
302252884aeSStefan Eßer 	0x0340,0x0341,0x0342,0x0343,0x0344,0x0345,0x0346,0x0347,
303252884aeSStefan Eßer 	0x0348,0x0349,0x034A,0x034B,0x034C,0x034D,0x034E,0x034F,
304252884aeSStefan Eßer 	0x0350,0x0351,0x0352,0x0353,0x0354,0x0355,0x0356,0x0357,
305252884aeSStefan Eßer 	0x0358,0x0359,0x035A,0x035B,0x035C,0x035D,0x035E,0x035F,
306252884aeSStefan Eßer 	0x0360,0x0361,0x0362,0x0363,0x0364,0x0365,0x0366,0x0367,
307252884aeSStefan Eßer 	0x0368,0x0369,0x036A,0x036B,0x036C,0x036D,0x036E,0x036F,
308252884aeSStefan Eßer 	0x0483,0x0484,0x0485,0x0486,0x0487,0x0591,0x0592,0x0593,
309252884aeSStefan Eßer 	0x0594,0x0595,0x0596,0x0597,0x0598,0x0599,0x059A,0x059B,
310252884aeSStefan Eßer 	0x059C,0x059D,0x059E,0x059F,0x05A0,0x05A1,0x05A2,0x05A3,
311252884aeSStefan Eßer 	0x05A4,0x05A5,0x05A6,0x05A7,0x05A8,0x05A9,0x05AA,0x05AB,
312252884aeSStefan Eßer 	0x05AC,0x05AD,0x05AE,0x05AF,0x05B0,0x05B1,0x05B2,0x05B3,
313252884aeSStefan Eßer 	0x05B4,0x05B5,0x05B6,0x05B7,0x05B8,0x05B9,0x05BA,0x05BB,
314252884aeSStefan Eßer 	0x05BC,0x05BD,0x05BF,0x05C1,0x05C2,0x05C4,0x05C5,0x05C7,
315252884aeSStefan Eßer 	0x0610,0x0611,0x0612,0x0613,0x0614,0x0615,0x0616,0x0617,
316252884aeSStefan Eßer 	0x0618,0x0619,0x061A,0x064B,0x064C,0x064D,0x064E,0x064F,
317252884aeSStefan Eßer 	0x0650,0x0651,0x0652,0x0653,0x0654,0x0655,0x0656,0x0657,
318252884aeSStefan Eßer 	0x0658,0x0659,0x065A,0x065B,0x065C,0x065D,0x065E,0x065F,
319252884aeSStefan Eßer 	0x0670,0x06D6,0x06D7,0x06D8,0x06D9,0x06DA,0x06DB,0x06DC,
320252884aeSStefan Eßer 	0x06DF,0x06E0,0x06E1,0x06E2,0x06E3,0x06E4,0x06E7,0x06E8,
321252884aeSStefan Eßer 	0x06EA,0x06EB,0x06EC,0x06ED,0x0711,0x0730,0x0731,0x0732,
322252884aeSStefan Eßer 	0x0733,0x0734,0x0735,0x0736,0x0737,0x0738,0x0739,0x073A,
323252884aeSStefan Eßer 	0x073B,0x073C,0x073D,0x073E,0x073F,0x0740,0x0741,0x0742,
324252884aeSStefan Eßer 	0x0743,0x0744,0x0745,0x0746,0x0747,0x0748,0x0749,0x074A,
325252884aeSStefan Eßer 	0x07A6,0x07A7,0x07A8,0x07A9,0x07AA,0x07AB,0x07AC,0x07AD,
326252884aeSStefan Eßer 	0x07AE,0x07AF,0x07B0,0x07EB,0x07EC,0x07ED,0x07EE,0x07EF,
327252884aeSStefan Eßer 	0x07F0,0x07F1,0x07F2,0x07F3,0x0816,0x0817,0x0818,0x0819,
328252884aeSStefan Eßer 	0x081B,0x081C,0x081D,0x081E,0x081F,0x0820,0x0821,0x0822,
329252884aeSStefan Eßer 	0x0823,0x0825,0x0826,0x0827,0x0829,0x082A,0x082B,0x082C,
330252884aeSStefan Eßer 	0x082D,0x0859,0x085A,0x085B,0x08D4,0x08D5,0x08D6,0x08D7,
331252884aeSStefan Eßer 	0x08D8,0x08D9,0x08DA,0x08DB,0x08DC,0x08DD,0x08DE,0x08DF,
332252884aeSStefan Eßer 	0x08E0,0x08E1,0x08E3,0x08E4,0x08E5,0x08E6,0x08E7,0x08E8,
333252884aeSStefan Eßer 	0x08E9,0x08EA,0x08EB,0x08EC,0x08ED,0x08EE,0x08EF,0x08F0,
334252884aeSStefan Eßer 	0x08F1,0x08F2,0x08F3,0x08F4,0x08F5,0x08F6,0x08F7,0x08F8,
335252884aeSStefan Eßer 	0x08F9,0x08FA,0x08FB,0x08FC,0x08FD,0x08FE,0x08FF,0x0900,
336252884aeSStefan Eßer 	0x0901,0x0902,0x093A,0x093C,0x0941,0x0942,0x0943,0x0944,
337252884aeSStefan Eßer 	0x0945,0x0946,0x0947,0x0948,0x094D,0x0951,0x0952,0x0953,
338252884aeSStefan Eßer 	0x0954,0x0955,0x0956,0x0957,0x0962,0x0963,0x0981,0x09BC,
339252884aeSStefan Eßer 	0x09C1,0x09C2,0x09C3,0x09C4,0x09CD,0x09E2,0x09E3,0x0A01,
340252884aeSStefan Eßer 	0x0A02,0x0A3C,0x0A41,0x0A42,0x0A47,0x0A48,0x0A4B,0x0A4C,
341252884aeSStefan Eßer 	0x0A4D,0x0A51,0x0A70,0x0A71,0x0A75,0x0A81,0x0A82,0x0ABC,
342252884aeSStefan Eßer 	0x0AC1,0x0AC2,0x0AC3,0x0AC4,0x0AC5,0x0AC7,0x0AC8,0x0ACD,
343252884aeSStefan Eßer 	0x0AE2,0x0AE3,0x0B01,0x0B3C,0x0B3F,0x0B41,0x0B42,0x0B43,
344252884aeSStefan Eßer 	0x0B44,0x0B4D,0x0B56,0x0B62,0x0B63,0x0B82,0x0BC0,0x0BCD,
345252884aeSStefan Eßer 	0x0C00,0x0C3E,0x0C3F,0x0C40,0x0C46,0x0C47,0x0C48,0x0C4A,
346252884aeSStefan Eßer 	0x0C4B,0x0C4C,0x0C4D,0x0C55,0x0C56,0x0C62,0x0C63,0x0C81,
347252884aeSStefan Eßer 	0x0CBC,0x0CBF,0x0CC6,0x0CCC,0x0CCD,0x0CE2,0x0CE3,0x0D01,
348252884aeSStefan Eßer 	0x0D41,0x0D42,0x0D43,0x0D44,0x0D4D,0x0D62,0x0D63,0x0DCA,
349252884aeSStefan Eßer 	0x0DD2,0x0DD3,0x0DD4,0x0DD6,0x0E31,0x0E34,0x0E35,0x0E36,
350252884aeSStefan Eßer 	0x0E37,0x0E38,0x0E39,0x0E3A,0x0E47,0x0E48,0x0E49,0x0E4A,
351252884aeSStefan Eßer 	0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0EB1,0x0EB4,0x0EB5,0x0EB6,
352252884aeSStefan Eßer 	0x0EB7,0x0EB8,0x0EB9,0x0EBB,0x0EBC,0x0EC8,0x0EC9,0x0ECA,
353252884aeSStefan Eßer 	0x0ECB,0x0ECC,0x0ECD,0x0F18,0x0F19,0x0F35,0x0F37,0x0F39,
354252884aeSStefan Eßer 	0x0F71,0x0F72,0x0F73,0x0F74,0x0F75,0x0F76,0x0F77,0x0F78,
355252884aeSStefan Eßer 	0x0F79,0x0F7A,0x0F7B,0x0F7C,0x0F7D,0x0F7E,0x0F80,0x0F81,
356252884aeSStefan Eßer 	0x0F82,0x0F83,0x0F84,0x0F86,0x0F87,0x0F8D,0x0F8E,0x0F8F,
357252884aeSStefan Eßer 	0x0F90,0x0F91,0x0F92,0x0F93,0x0F94,0x0F95,0x0F96,0x0F97,
358252884aeSStefan Eßer 	0x0F99,0x0F9A,0x0F9B,0x0F9C,0x0F9D,0x0F9E,0x0F9F,0x0FA0,
359252884aeSStefan Eßer 	0x0FA1,0x0FA2,0x0FA3,0x0FA4,0x0FA5,0x0FA6,0x0FA7,0x0FA8,
360252884aeSStefan Eßer 	0x0FA9,0x0FAA,0x0FAB,0x0FAC,0x0FAD,0x0FAE,0x0FAF,0x0FB0,
361252884aeSStefan Eßer 	0x0FB1,0x0FB2,0x0FB3,0x0FB4,0x0FB5,0x0FB6,0x0FB7,0x0FB8,
362252884aeSStefan Eßer 	0x0FB9,0x0FBA,0x0FBB,0x0FBC,0x0FC6,0x102D,0x102E,0x102F,
363252884aeSStefan Eßer 	0x1030,0x1032,0x1033,0x1034,0x1035,0x1036,0x1037,0x1039,
364252884aeSStefan Eßer 	0x103A,0x103D,0x103E,0x1058,0x1059,0x105E,0x105F,0x1060,
365252884aeSStefan Eßer 	0x1071,0x1072,0x1073,0x1074,0x1082,0x1085,0x1086,0x108D,
366252884aeSStefan Eßer 	0x109D,0x135D,0x135E,0x135F,0x1712,0x1713,0x1714,0x1732,
367252884aeSStefan Eßer 	0x1733,0x1734,0x1752,0x1753,0x1772,0x1773,0x17B4,0x17B5,
368252884aeSStefan Eßer 	0x17B7,0x17B8,0x17B9,0x17BA,0x17BB,0x17BC,0x17BD,0x17C6,
369252884aeSStefan Eßer 	0x17C9,0x17CA,0x17CB,0x17CC,0x17CD,0x17CE,0x17CF,0x17D0,
370252884aeSStefan Eßer 	0x17D1,0x17D2,0x17D3,0x17DD,0x180B,0x180C,0x180D,0x1885,
371252884aeSStefan Eßer 	0x1886,0x18A9,0x1920,0x1921,0x1922,0x1927,0x1928,0x1932,
372252884aeSStefan Eßer 	0x1939,0x193A,0x193B,0x1A17,0x1A18,0x1A1B,0x1A56,0x1A58,
373252884aeSStefan Eßer 	0x1A59,0x1A5A,0x1A5B,0x1A5C,0x1A5D,0x1A5E,0x1A60,0x1A62,
374252884aeSStefan Eßer 	0x1A65,0x1A66,0x1A67,0x1A68,0x1A69,0x1A6A,0x1A6B,0x1A6C,
375252884aeSStefan Eßer 	0x1A73,0x1A74,0x1A75,0x1A76,0x1A77,0x1A78,0x1A79,0x1A7A,
376252884aeSStefan Eßer 	0x1A7B,0x1A7C,0x1A7F,0x1AB0,0x1AB1,0x1AB2,0x1AB3,0x1AB4,
377252884aeSStefan Eßer 	0x1AB5,0x1AB6,0x1AB7,0x1AB8,0x1AB9,0x1ABA,0x1ABB,0x1ABC,
378252884aeSStefan Eßer 	0x1ABD,0x1B00,0x1B01,0x1B02,0x1B03,0x1B34,0x1B36,0x1B37,
379252884aeSStefan Eßer 	0x1B38,0x1B39,0x1B3A,0x1B3C,0x1B42,0x1B6B,0x1B6C,0x1B6D,
380252884aeSStefan Eßer 	0x1B6E,0x1B6F,0x1B70,0x1B71,0x1B72,0x1B73,0x1B80,0x1B81,
381252884aeSStefan Eßer 	0x1BA2,0x1BA3,0x1BA4,0x1BA5,0x1BA8,0x1BA9,0x1BAB,0x1BAC,
382252884aeSStefan Eßer 	0x1BAD,0x1BE6,0x1BE8,0x1BE9,0x1BED,0x1BEF,0x1BF0,0x1BF1,
383252884aeSStefan Eßer 	0x1C2C,0x1C2D,0x1C2E,0x1C2F,0x1C30,0x1C31,0x1C32,0x1C33,
384252884aeSStefan Eßer 	0x1C36,0x1C37,0x1CD0,0x1CD1,0x1CD2,0x1CD4,0x1CD5,0x1CD6,
385252884aeSStefan Eßer 	0x1CD7,0x1CD8,0x1CD9,0x1CDA,0x1CDB,0x1CDC,0x1CDD,0x1CDE,
386252884aeSStefan Eßer 	0x1CDF,0x1CE0,0x1CE2,0x1CE3,0x1CE4,0x1CE5,0x1CE6,0x1CE7,
387252884aeSStefan Eßer 	0x1CE8,0x1CED,0x1CF4,0x1CF8,0x1CF9,0x1DC0,0x1DC1,0x1DC2,
388252884aeSStefan Eßer 	0x1DC3,0x1DC4,0x1DC5,0x1DC6,0x1DC7,0x1DC8,0x1DC9,0x1DCA,
389252884aeSStefan Eßer 	0x1DCB,0x1DCC,0x1DCD,0x1DCE,0x1DCF,0x1DD0,0x1DD1,0x1DD2,
390252884aeSStefan Eßer 	0x1DD3,0x1DD4,0x1DD5,0x1DD6,0x1DD7,0x1DD8,0x1DD9,0x1DDA,
391252884aeSStefan Eßer 	0x1DDB,0x1DDC,0x1DDD,0x1DDE,0x1DDF,0x1DE0,0x1DE1,0x1DE2,
392252884aeSStefan Eßer 	0x1DE3,0x1DE4,0x1DE5,0x1DE6,0x1DE7,0x1DE8,0x1DE9,0x1DEA,
393252884aeSStefan Eßer 	0x1DEB,0x1DEC,0x1DED,0x1DEE,0x1DEF,0x1DF0,0x1DF1,0x1DF2,
394252884aeSStefan Eßer 	0x1DF3,0x1DF4,0x1DF5,0x1DFB,0x1DFC,0x1DFD,0x1DFE,0x1DFF,
395252884aeSStefan Eßer 	0x20D0,0x20D1,0x20D2,0x20D3,0x20D4,0x20D5,0x20D6,0x20D7,
396252884aeSStefan Eßer 	0x20D8,0x20D9,0x20DA,0x20DB,0x20DC,0x20E1,0x20E5,0x20E6,
397252884aeSStefan Eßer 	0x20E7,0x20E8,0x20E9,0x20EA,0x20EB,0x20EC,0x20ED,0x20EE,
398252884aeSStefan Eßer 	0x20EF,0x20F0,0x2CEF,0x2CF0,0x2CF1,0x2D7F,0x2DE0,0x2DE1,
399252884aeSStefan Eßer 	0x2DE2,0x2DE3,0x2DE4,0x2DE5,0x2DE6,0x2DE7,0x2DE8,0x2DE9,
400252884aeSStefan Eßer 	0x2DEA,0x2DEB,0x2DEC,0x2DED,0x2DEE,0x2DEF,0x2DF0,0x2DF1,
401252884aeSStefan Eßer 	0x2DF2,0x2DF3,0x2DF4,0x2DF5,0x2DF6,0x2DF7,0x2DF8,0x2DF9,
402252884aeSStefan Eßer 	0x2DFA,0x2DFB,0x2DFC,0x2DFD,0x2DFE,0x2DFF,0x302A,0x302B,
403252884aeSStefan Eßer 	0x302C,0x302D,0x3099,0x309A,0xA66F,0xA674,0xA675,0xA676,
404252884aeSStefan Eßer 	0xA677,0xA678,0xA679,0xA67A,0xA67B,0xA67C,0xA67D,0xA69E,
405252884aeSStefan Eßer 	0xA69F,0xA6F0,0xA6F1,0xA802,0xA806,0xA80B,0xA825,0xA826,
406252884aeSStefan Eßer 	0xA8C4,0xA8C5,0xA8E0,0xA8E1,0xA8E2,0xA8E3,0xA8E4,0xA8E5,
407252884aeSStefan Eßer 	0xA8E6,0xA8E7,0xA8E8,0xA8E9,0xA8EA,0xA8EB,0xA8EC,0xA8ED,
408252884aeSStefan Eßer 	0xA8EE,0xA8EF,0xA8F0,0xA8F1,0xA926,0xA927,0xA928,0xA929,
409252884aeSStefan Eßer 	0xA92A,0xA92B,0xA92C,0xA92D,0xA947,0xA948,0xA949,0xA94A,
410252884aeSStefan Eßer 	0xA94B,0xA94C,0xA94D,0xA94E,0xA94F,0xA950,0xA951,0xA980,
411252884aeSStefan Eßer 	0xA981,0xA982,0xA9B3,0xA9B6,0xA9B7,0xA9B8,0xA9B9,0xA9BC,
412252884aeSStefan Eßer 	0xA9E5,0xAA29,0xAA2A,0xAA2B,0xAA2C,0xAA2D,0xAA2E,0xAA31,
413252884aeSStefan Eßer 	0xAA32,0xAA35,0xAA36,0xAA43,0xAA4C,0xAA7C,0xAAB0,0xAAB2,
414252884aeSStefan Eßer 	0xAAB3,0xAAB4,0xAAB7,0xAAB8,0xAABE,0xAABF,0xAAC1,0xAAEC,
415252884aeSStefan Eßer 	0xAAED,0xAAF6,0xABE5,0xABE8,0xABED,0xFB1E,0xFE00,0xFE01,
416252884aeSStefan Eßer 	0xFE02,0xFE03,0xFE04,0xFE05,0xFE06,0xFE07,0xFE08,0xFE09,
417252884aeSStefan Eßer 	0xFE0A,0xFE0B,0xFE0C,0xFE0D,0xFE0E,0xFE0F,0xFE20,0xFE21,
418252884aeSStefan Eßer 	0xFE22,0xFE23,0xFE24,0xFE25,0xFE26,0xFE27,0xFE28,0xFE29,
419252884aeSStefan Eßer 	0xFE2A,0xFE2B,0xFE2C,0xFE2D,0xFE2E,0xFE2F,
420252884aeSStefan Eßer 	0x101FD,0x102E0,0x10376,0x10377,0x10378,0x10379,0x1037A,0x10A01,
421252884aeSStefan Eßer 	0x10A02,0x10A03,0x10A05,0x10A06,0x10A0C,0x10A0D,0x10A0E,0x10A0F,
422252884aeSStefan Eßer 	0x10A38,0x10A39,0x10A3A,0x10A3F,0x10AE5,0x10AE6,0x11001,0x11038,
423252884aeSStefan Eßer 	0x11039,0x1103A,0x1103B,0x1103C,0x1103D,0x1103E,0x1103F,0x11040,
424252884aeSStefan Eßer 	0x11041,0x11042,0x11043,0x11044,0x11045,0x11046,0x1107F,0x11080,
425252884aeSStefan Eßer 	0x11081,0x110B3,0x110B4,0x110B5,0x110B6,0x110B9,0x110BA,0x11100,
426252884aeSStefan Eßer 	0x11101,0x11102,0x11127,0x11128,0x11129,0x1112A,0x1112B,0x1112D,
427252884aeSStefan Eßer 	0x1112E,0x1112F,0x11130,0x11131,0x11132,0x11133,0x11134,0x11173,
428252884aeSStefan Eßer 	0x11180,0x11181,0x111B6,0x111B7,0x111B8,0x111B9,0x111BA,0x111BB,
429252884aeSStefan Eßer 	0x111BC,0x111BD,0x111BE,0x111CA,0x111CB,0x111CC,0x1122F,0x11230,
430252884aeSStefan Eßer 	0x11231,0x11234,0x11236,0x11237,0x1123E,0x112DF,0x112E3,0x112E4,
431252884aeSStefan Eßer 	0x112E5,0x112E6,0x112E7,0x112E8,0x112E9,0x112EA,0x11300,0x11301,
432252884aeSStefan Eßer 	0x1133C,0x11340,0x11366,0x11367,0x11368,0x11369,0x1136A,0x1136B,
433252884aeSStefan Eßer 	0x1136C,0x11370,0x11371,0x11372,0x11373,0x11374,0x11438,0x11439,
434252884aeSStefan Eßer 	0x1143A,0x1143B,0x1143C,0x1143D,0x1143E,0x1143F,0x11442,0x11443,
435252884aeSStefan Eßer 	0x11444,0x11446,0x114B3,0x114B4,0x114B5,0x114B6,0x114B7,0x114B8,
436252884aeSStefan Eßer 	0x114BA,0x114BF,0x114C0,0x114C2,0x114C3,0x115B2,0x115B3,0x115B4,
437252884aeSStefan Eßer 	0x115B5,0x115BC,0x115BD,0x115BF,0x115C0,0x115DC,0x115DD,0x11633,
438252884aeSStefan Eßer 	0x11634,0x11635,0x11636,0x11637,0x11638,0x11639,0x1163A,0x1163D,
439252884aeSStefan Eßer 	0x1163F,0x11640,0x116AB,0x116AD,0x116B0,0x116B1,0x116B2,0x116B3,
440252884aeSStefan Eßer 	0x116B4,0x116B5,0x116B7,0x1171D,0x1171E,0x1171F,0x11722,0x11723,
441252884aeSStefan Eßer 	0x11724,0x11725,0x11727,0x11728,0x11729,0x1172A,0x1172B,0x11C30,
442252884aeSStefan Eßer 	0x11C31,0x11C32,0x11C33,0x11C34,0x11C35,0x11C36,0x11C38,0x11C39,
443252884aeSStefan Eßer 	0x11C3A,0x11C3B,0x11C3C,0x11C3D,0x11C3F,0x11C92,0x11C93,0x11C94,
444252884aeSStefan Eßer 	0x11C95,0x11C96,0x11C97,0x11C98,0x11C99,0x11C9A,0x11C9B,0x11C9C,
445252884aeSStefan Eßer 	0x11C9D,0x11C9E,0x11C9F,0x11CA0,0x11CA1,0x11CA2,0x11CA3,0x11CA4,
446252884aeSStefan Eßer 	0x11CA5,0x11CA6,0x11CA7,0x11CAA,0x11CAB,0x11CAC,0x11CAD,0x11CAE,
447252884aeSStefan Eßer 	0x11CAF,0x11CB0,0x11CB2,0x11CB3,0x11CB5,0x11CB6,0x16AF0,0x16AF1,
448252884aeSStefan Eßer 	0x16AF2,0x16AF3,0x16AF4,0x16B30,0x16B31,0x16B32,0x16B33,0x16B34,
449252884aeSStefan Eßer 	0x16B35,0x16B36,0x16F8F,0x16F90,0x16F91,0x16F92,0x1BC9D,0x1BC9E,
450252884aeSStefan Eßer 	0x1D167,0x1D168,0x1D169,0x1D17B,0x1D17C,0x1D17D,0x1D17E,0x1D17F,
451252884aeSStefan Eßer 	0x1D180,0x1D181,0x1D182,0x1D185,0x1D186,0x1D187,0x1D188,0x1D189,
452252884aeSStefan Eßer 	0x1D18A,0x1D18B,0x1D1AA,0x1D1AB,0x1D1AC,0x1D1AD,0x1D242,0x1D243,
453252884aeSStefan Eßer 	0x1D244,0x1DA00,0x1DA01,0x1DA02,0x1DA03,0x1DA04,0x1DA05,0x1DA06,
454252884aeSStefan Eßer 	0x1DA07,0x1DA08,0x1DA09,0x1DA0A,0x1DA0B,0x1DA0C,0x1DA0D,0x1DA0E,
455252884aeSStefan Eßer 	0x1DA0F,0x1DA10,0x1DA11,0x1DA12,0x1DA13,0x1DA14,0x1DA15,0x1DA16,
456252884aeSStefan Eßer 	0x1DA17,0x1DA18,0x1DA19,0x1DA1A,0x1DA1B,0x1DA1C,0x1DA1D,0x1DA1E,
457252884aeSStefan Eßer 	0x1DA1F,0x1DA20,0x1DA21,0x1DA22,0x1DA23,0x1DA24,0x1DA25,0x1DA26,
458252884aeSStefan Eßer 	0x1DA27,0x1DA28,0x1DA29,0x1DA2A,0x1DA2B,0x1DA2C,0x1DA2D,0x1DA2E,
459252884aeSStefan Eßer 	0x1DA2F,0x1DA30,0x1DA31,0x1DA32,0x1DA33,0x1DA34,0x1DA35,0x1DA36,
460252884aeSStefan Eßer 	0x1DA3B,0x1DA3C,0x1DA3D,0x1DA3E,0x1DA3F,0x1DA40,0x1DA41,0x1DA42,
461252884aeSStefan Eßer 	0x1DA43,0x1DA44,0x1DA45,0x1DA46,0x1DA47,0x1DA48,0x1DA49,0x1DA4A,
462252884aeSStefan Eßer 	0x1DA4B,0x1DA4C,0x1DA4D,0x1DA4E,0x1DA4F,0x1DA50,0x1DA51,0x1DA52,
463252884aeSStefan Eßer 	0x1DA53,0x1DA54,0x1DA55,0x1DA56,0x1DA57,0x1DA58,0x1DA59,0x1DA5A,
464252884aeSStefan Eßer 	0x1DA5B,0x1DA5C,0x1DA5D,0x1DA5E,0x1DA5F,0x1DA60,0x1DA61,0x1DA62,
465252884aeSStefan Eßer 	0x1DA63,0x1DA64,0x1DA65,0x1DA66,0x1DA67,0x1DA68,0x1DA69,0x1DA6A,
466252884aeSStefan Eßer 	0x1DA6B,0x1DA6C,0x1DA75,0x1DA84,0x1DA9B,0x1DA9C,0x1DA9D,0x1DA9E,
467252884aeSStefan Eßer 	0x1DA9F,0x1DAA1,0x1DAA2,0x1DAA3,0x1DAA4,0x1DAA5,0x1DAA6,0x1DAA7,
468252884aeSStefan Eßer 	0x1DAA8,0x1DAA9,0x1DAAA,0x1DAAB,0x1DAAC,0x1DAAD,0x1DAAE,0x1DAAF,
469252884aeSStefan Eßer 	0x1E000,0x1E001,0x1E002,0x1E003,0x1E004,0x1E005,0x1E006,0x1E008,
470252884aeSStefan Eßer 	0x1E009,0x1E00A,0x1E00B,0x1E00C,0x1E00D,0x1E00E,0x1E00F,0x1E010,
471252884aeSStefan Eßer 	0x1E011,0x1E012,0x1E013,0x1E014,0x1E015,0x1E016,0x1E017,0x1E018,
472252884aeSStefan Eßer 	0x1E01B,0x1E01C,0x1E01D,0x1E01E,0x1E01F,0x1E020,0x1E021,0x1E023,
473252884aeSStefan Eßer 	0x1E024,0x1E026,0x1E027,0x1E028,0x1E029,0x1E02A,0x1E8D0,0x1E8D1,
474252884aeSStefan Eßer 	0x1E8D2,0x1E8D3,0x1E8D4,0x1E8D5,0x1E8D6,0x1E944,0x1E945,0x1E946,
475252884aeSStefan Eßer 	0x1E947,0x1E948,0x1E949,0x1E94A,0xE0100,0xE0101,0xE0102,0xE0103,
476252884aeSStefan Eßer 	0xE0104,0xE0105,0xE0106,0xE0107,0xE0108,0xE0109,0xE010A,0xE010B,
477252884aeSStefan Eßer 	0xE010C,0xE010D,0xE010E,0xE010F,0xE0110,0xE0111,0xE0112,0xE0113,
478252884aeSStefan Eßer 	0xE0114,0xE0115,0xE0116,0xE0117,0xE0118,0xE0119,0xE011A,0xE011B,
479252884aeSStefan Eßer 	0xE011C,0xE011D,0xE011E,0xE011F,0xE0120,0xE0121,0xE0122,0xE0123,
480252884aeSStefan Eßer 	0xE0124,0xE0125,0xE0126,0xE0127,0xE0128,0xE0129,0xE012A,0xE012B,
481252884aeSStefan Eßer 	0xE012C,0xE012D,0xE012E,0xE012F,0xE0130,0xE0131,0xE0132,0xE0133,
482252884aeSStefan Eßer 	0xE0134,0xE0135,0xE0136,0xE0137,0xE0138,0xE0139,0xE013A,0xE013B,
483252884aeSStefan Eßer 	0xE013C,0xE013D,0xE013E,0xE013F,0xE0140,0xE0141,0xE0142,0xE0143,
484252884aeSStefan Eßer 	0xE0144,0xE0145,0xE0146,0xE0147,0xE0148,0xE0149,0xE014A,0xE014B,
485252884aeSStefan Eßer 	0xE014C,0xE014D,0xE014E,0xE014F,0xE0150,0xE0151,0xE0152,0xE0153,
486252884aeSStefan Eßer 	0xE0154,0xE0155,0xE0156,0xE0157,0xE0158,0xE0159,0xE015A,0xE015B,
487252884aeSStefan Eßer 	0xE015C,0xE015D,0xE015E,0xE015F,0xE0160,0xE0161,0xE0162,0xE0163,
488252884aeSStefan Eßer 	0xE0164,0xE0165,0xE0166,0xE0167,0xE0168,0xE0169,0xE016A,0xE016B,
489252884aeSStefan Eßer 	0xE016C,0xE016D,0xE016E,0xE016F,0xE0170,0xE0171,0xE0172,0xE0173,
490252884aeSStefan Eßer 	0xE0174,0xE0175,0xE0176,0xE0177,0xE0178,0xE0179,0xE017A,0xE017B,
491252884aeSStefan Eßer 	0xE017C,0xE017D,0xE017E,0xE017F,0xE0180,0xE0181,0xE0182,0xE0183,
492252884aeSStefan Eßer 	0xE0184,0xE0185,0xE0186,0xE0187,0xE0188,0xE0189,0xE018A,0xE018B,
493252884aeSStefan Eßer 	0xE018C,0xE018D,0xE018E,0xE018F,0xE0190,0xE0191,0xE0192,0xE0193,
494252884aeSStefan Eßer 	0xE0194,0xE0195,0xE0196,0xE0197,0xE0198,0xE0199,0xE019A,0xE019B,
495252884aeSStefan Eßer 	0xE019C,0xE019D,0xE019E,0xE019F,0xE01A0,0xE01A1,0xE01A2,0xE01A3,
496252884aeSStefan Eßer 	0xE01A4,0xE01A5,0xE01A6,0xE01A7,0xE01A8,0xE01A9,0xE01AA,0xE01AB,
497252884aeSStefan Eßer 	0xE01AC,0xE01AD,0xE01AE,0xE01AF,0xE01B0,0xE01B1,0xE01B2,0xE01B3,
498252884aeSStefan Eßer 	0xE01B4,0xE01B5,0xE01B6,0xE01B7,0xE01B8,0xE01B9,0xE01BA,0xE01BB,
499252884aeSStefan Eßer 	0xE01BC,0xE01BD,0xE01BE,0xE01BF,0xE01C0,0xE01C1,0xE01C2,0xE01C3,
500252884aeSStefan Eßer 	0xE01C4,0xE01C5,0xE01C6,0xE01C7,0xE01C8,0xE01C9,0xE01CA,0xE01CB,
501252884aeSStefan Eßer 	0xE01CC,0xE01CD,0xE01CE,0xE01CF,0xE01D0,0xE01D1,0xE01D2,0xE01D3,
502252884aeSStefan Eßer 	0xE01D4,0xE01D5,0xE01D6,0xE01D7,0xE01D8,0xE01D9,0xE01DA,0xE01DB,
503252884aeSStefan Eßer 	0xE01DC,0xE01DD,0xE01DE,0xE01DF,0xE01E0,0xE01E1,0xE01E2,0xE01E3,
504252884aeSStefan Eßer 	0xE01E4,0xE01E5,0xE01E6,0xE01E7,0xE01E8,0xE01E9,0xE01EA,0xE01EB,
505252884aeSStefan Eßer 	0xE01EC,0xE01ED,0xE01EE,0xE01EF,
506252884aeSStefan Eßer };
507252884aeSStefan Eßer 
508252884aeSStefan Eßer const size_t bc_history_combo_chars_len =
509252884aeSStefan Eßer 	sizeof(bc_history_combo_chars) / sizeof(bc_history_combo_chars[0]);
510252884aeSStefan Eßer 
511252884aeSStefan Eßer #if BC_DEBUG_CODE
512252884aeSStefan Eßer BcFile bc_history_debug_fp;
513252884aeSStefan Eßer char *bc_history_debug_buf;
514252884aeSStefan Eßer #endif // BC_DEBUG_CODE
515252884aeSStefan Eßer #endif // BC_ENABLE_HISTORY
516252884aeSStefan Eßer 
517252884aeSStefan Eßer const char bc_func_main[] = "(main)";
518252884aeSStefan Eßer const char bc_func_read[] = "(read)";
519252884aeSStefan Eßer 
520252884aeSStefan Eßer #if BC_DEBUG_CODE
521252884aeSStefan Eßer const char* bc_inst_names[] = {
522252884aeSStefan Eßer 
523252884aeSStefan Eßer #if BC_ENABLED
524252884aeSStefan Eßer 	"BC_INST_INC",
525252884aeSStefan Eßer 	"BC_INST_DEC",
526252884aeSStefan Eßer #endif // BC_ENABLED
527252884aeSStefan Eßer 
528252884aeSStefan Eßer 	"BC_INST_NEG",
529252884aeSStefan Eßer 	"BC_INST_BOOL_NOT",
530252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
531252884aeSStefan Eßer 	"BC_INST_TRUNC",
532252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
533252884aeSStefan Eßer 
534252884aeSStefan Eßer 	"BC_INST_POWER",
535252884aeSStefan Eßer 	"BC_INST_MULTIPLY",
536252884aeSStefan Eßer 	"BC_INST_DIVIDE",
537252884aeSStefan Eßer 	"BC_INST_MODULUS",
538252884aeSStefan Eßer 	"BC_INST_PLUS",
539252884aeSStefan Eßer 	"BC_INST_MINUS",
540252884aeSStefan Eßer 
541252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
542252884aeSStefan Eßer 	"BC_INST_PLACES",
543252884aeSStefan Eßer 
544252884aeSStefan Eßer 	"BC_INST_LSHIFT",
545252884aeSStefan Eßer 	"BC_INST_RSHIFT",
546252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
547252884aeSStefan Eßer 
548252884aeSStefan Eßer 	"BC_INST_REL_EQ",
549252884aeSStefan Eßer 	"BC_INST_REL_LE",
550252884aeSStefan Eßer 	"BC_INST_REL_GE",
551252884aeSStefan Eßer 	"BC_INST_REL_NE",
552252884aeSStefan Eßer 	"BC_INST_REL_LT",
553252884aeSStefan Eßer 	"BC_INST_REL_GT",
554252884aeSStefan Eßer 
555252884aeSStefan Eßer 	"BC_INST_BOOL_OR",
556252884aeSStefan Eßer 	"BC_INST_BOOL_AND",
557252884aeSStefan Eßer 
558252884aeSStefan Eßer #if BC_ENABLED
559252884aeSStefan Eßer 	"BC_INST_ASSIGN_POWER",
560252884aeSStefan Eßer 	"BC_INST_ASSIGN_MULTIPLY",
561252884aeSStefan Eßer 	"BC_INST_ASSIGN_DIVIDE",
562252884aeSStefan Eßer 	"BC_INST_ASSIGN_MODULUS",
563252884aeSStefan Eßer 	"BC_INST_ASSIGN_PLUS",
564252884aeSStefan Eßer 	"BC_INST_ASSIGN_MINUS",
565252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
566252884aeSStefan Eßer 	"BC_INST_ASSIGN_PLACES",
567252884aeSStefan Eßer 	"BC_INST_ASSIGN_LSHIFT",
568252884aeSStefan Eßer 	"BC_INST_ASSIGN_RSHIFT",
569252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
570252884aeSStefan Eßer 	"BC_INST_ASSIGN",
571252884aeSStefan Eßer 
572252884aeSStefan Eßer 	"BC_INST_ASSIGN_POWER_NO_VAL",
573252884aeSStefan Eßer 	"BC_INST_ASSIGN_MULTIPLY_NO_VAL",
574252884aeSStefan Eßer 	"BC_INST_ASSIGN_DIVIDE_NO_VAL",
575252884aeSStefan Eßer 	"BC_INST_ASSIGN_MODULUS_NO_VAL",
576252884aeSStefan Eßer 	"BC_INST_ASSIGN_PLUS_NO_VAL",
577252884aeSStefan Eßer 	"BC_INST_ASSIGN_MINUS_NO_VAL",
578252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
579252884aeSStefan Eßer 	"BC_INST_ASSIGN_PLACES_NO_VAL",
580252884aeSStefan Eßer 	"BC_INST_ASSIGN_LSHIFT_NO_VAL",
581252884aeSStefan Eßer 	"BC_INST_ASSIGN_RSHIFT_NO_VAL",
582252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
583252884aeSStefan Eßer #endif // BC_ENABLED
584252884aeSStefan Eßer 	"BC_INST_ASSIGN_NO_VAL",
585252884aeSStefan Eßer 
586252884aeSStefan Eßer 	"BC_INST_NUM",
587252884aeSStefan Eßer 	"BC_INST_VAR",
588252884aeSStefan Eßer 	"BC_INST_ARRAY_ELEM",
589252884aeSStefan Eßer #if BC_ENABLED
590252884aeSStefan Eßer 	"BC_INST_ARRAY",
591252884aeSStefan Eßer #endif // BC_ENABLED
592252884aeSStefan Eßer 
5933aa99676SStefan Eßer 	"BC_INST_ZERO",
594252884aeSStefan Eßer 	"BC_INST_ONE",
595252884aeSStefan Eßer 
596252884aeSStefan Eßer #if BC_ENABLED
597252884aeSStefan Eßer 	"BC_INST_LAST",
598252884aeSStefan Eßer #endif // BC_ENABLED
599252884aeSStefan Eßer 	"BC_INST_IBASE",
600252884aeSStefan Eßer 	"BC_INST_OBASE",
601252884aeSStefan Eßer 	"BC_INST_SCALE",
602252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
603252884aeSStefan Eßer 	"BC_INST_SEED",
604252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
605252884aeSStefan Eßer 	"BC_INST_LENGTH",
606252884aeSStefan Eßer 	"BC_INST_SCALE_FUNC",
607252884aeSStefan Eßer 	"BC_INST_SQRT",
608252884aeSStefan Eßer 	"BC_INST_ABS",
609252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
610252884aeSStefan Eßer 	"BC_INST_IRAND",
611252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
612252884aeSStefan Eßer 	"BC_INST_READ",
613252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
614252884aeSStefan Eßer 	"BC_INST_RAND",
615252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
616252884aeSStefan Eßer 	"BC_INST_MAXIBASE",
617252884aeSStefan Eßer 	"BC_INST_MAXOBASE",
618252884aeSStefan Eßer 	"BC_INST_MAXSCALE",
619252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
620252884aeSStefan Eßer 	"BC_INST_MAXRAND",
621252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
622252884aeSStefan Eßer 
623252884aeSStefan Eßer 	"BC_INST_PRINT",
624252884aeSStefan Eßer 	"BC_INST_PRINT_POP",
625252884aeSStefan Eßer 	"BC_INST_STR",
626252884aeSStefan Eßer 	"BC_INST_PRINT_STR",
627252884aeSStefan Eßer 
628252884aeSStefan Eßer #if BC_ENABLED
629252884aeSStefan Eßer 	"BC_INST_JUMP",
630252884aeSStefan Eßer 	"BC_INST_JUMP_ZERO",
631252884aeSStefan Eßer 
632252884aeSStefan Eßer 	"BC_INST_CALL",
633252884aeSStefan Eßer 
634252884aeSStefan Eßer 	"BC_INST_RET",
635252884aeSStefan Eßer 	"BC_INST_RET0",
636252884aeSStefan Eßer 	"BC_INST_RET_VOID",
637252884aeSStefan Eßer 
638252884aeSStefan Eßer 	"BC_INST_HALT",
639252884aeSStefan Eßer #endif // BC_ENABLED
640252884aeSStefan Eßer 
641252884aeSStefan Eßer #if DC_ENABLED
642252884aeSStefan Eßer 	"BC_INST_POP",
643252884aeSStefan Eßer 	"BC_INST_POP_EXEC",
644252884aeSStefan Eßer 	"BC_INST_MODEXP",
645252884aeSStefan Eßer 	"BC_INST_DIVMOD",
646252884aeSStefan Eßer 
647252884aeSStefan Eßer 	"BC_INST_EXECUTE",
648252884aeSStefan Eßer 	"BC_INST_EXEC_COND",
649252884aeSStefan Eßer 
650252884aeSStefan Eßer 	"BC_INST_ASCIIFY",
651252884aeSStefan Eßer 	"BC_INST_PRINT_STREAM",
652252884aeSStefan Eßer 
653252884aeSStefan Eßer 	"BC_INST_PRINT_STACK",
654252884aeSStefan Eßer 	"BC_INST_CLEAR_STACK",
655252884aeSStefan Eßer 	"BC_INST_STACK_LEN",
656252884aeSStefan Eßer 	"BC_INST_DUPLICATE",
657252884aeSStefan Eßer 	"BC_INST_SWAP",
658252884aeSStefan Eßer 
659252884aeSStefan Eßer 	"BC_INST_LOAD",
660252884aeSStefan Eßer 	"BC_INST_PUSH_VAR",
661252884aeSStefan Eßer 	"BC_INST_PUSH_TO_VAR",
662252884aeSStefan Eßer 
663252884aeSStefan Eßer 	"BC_INST_QUIT",
664252884aeSStefan Eßer 	"BC_INST_NQUIT",
665252884aeSStefan Eßer #endif // DC_ENABLED
666252884aeSStefan Eßer };
667252884aeSStefan Eßer #endif // BC_DEBUG_CODE
668252884aeSStefan Eßer 
669*50696a6eSStefan Eßer const char bc_parse_zero[2] = "0";
670*50696a6eSStefan Eßer const char bc_parse_one[2] = "1";
671252884aeSStefan Eßer 
672252884aeSStefan Eßer #if BC_ENABLED
673252884aeSStefan Eßer const BcLexKeyword bc_lex_kws[] = {
674252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("auto", 4, true),
675252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("break", 5, true),
676252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("continue", 8, false),
677252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("define", 6, true),
678252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("for", 3, true),
679252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("if", 2, true),
680252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("limits", 6, false),
681252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("return", 6, true),
682252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("while", 5, true),
683252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("halt", 4, false),
684252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("last", 4, false),
685252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("ibase", 5, true),
686252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("obase", 5, true),
687252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("scale", 5, true),
6883aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
689252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("seed", 4, false),
6903aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
691252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("length", 6, true),
692252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("print", 5, false),
693252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("sqrt", 4, true),
694252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("abs", 3, false),
6953aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
696252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("irand", 5, false),
6973aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
698252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("quit", 4, true),
699252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("read", 4, false),
7003aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
701252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("rand", 4, false),
7023aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
703252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("maxibase", 8, false),
704252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("maxobase", 8, false),
705252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("maxscale", 8, false),
7063aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
707252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("maxrand", 7, false),
7083aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
709252884aeSStefan Eßer 	BC_LEX_KW_ENTRY("else", 4, false),
710252884aeSStefan Eßer };
711252884aeSStefan Eßer 
712252884aeSStefan Eßer const size_t bc_lex_kws_len = sizeof(bc_lex_kws) / sizeof(BcLexKeyword);
713252884aeSStefan Eßer 
714252884aeSStefan Eßer // This is an array that corresponds to token types. An entry is
715252884aeSStefan Eßer // true if the token is valid in an expression, false otherwise.
716252884aeSStefan Eßer const uint8_t bc_parse_exprs[] = {
717252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, true),
718252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true),
719252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true),
7203aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
721252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true),
722252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, false, false, true, true, false, false),
723252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, true, true, false),
724252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, false, false),
725252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, true, true, true, true, true, true, false),
726252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, false, true, true, true, true),
727252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, false, 0, 0, 0, 0, 0)
7283aa99676SStefan Eßer #elif BC_ENABLE_EXTRA_MATH // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
7293aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, true, true, true, true, true),
7303aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, false, false, true, true, false, false),
7313aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, true, true, false),
7323aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, false, false),
7333aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, true, true, true, true, true, false, true),
7343aa99676SStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, false, true, true, true, true, false, 0),
7353aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
736252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, true, false, false, true, true, false),
737252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, true, true),
738252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, false, false, false, false, false, false),
739252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(false, false, true, true, true, true, true, false),
740252884aeSStefan Eßer 	BC_PARSE_EXPR_ENTRY(true, true, false, true, true, true, true, false)
741252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
742252884aeSStefan Eßer };
743252884aeSStefan Eßer 
744252884aeSStefan Eßer // This is an array of data for operators that correspond to token types.
745252884aeSStefan Eßer const uchar bc_parse_ops[] = {
746252884aeSStefan Eßer 	BC_PARSE_OP(0, false), BC_PARSE_OP(0, false),
747252884aeSStefan Eßer 	BC_PARSE_OP(1, false), BC_PARSE_OP(1, false),
748252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
749252884aeSStefan Eßer 	BC_PARSE_OP(2, false),
750252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
751252884aeSStefan Eßer 	BC_PARSE_OP(4, false),
752252884aeSStefan Eßer 	BC_PARSE_OP(5, true), BC_PARSE_OP(5, true), BC_PARSE_OP(5, true),
753252884aeSStefan Eßer 	BC_PARSE_OP(6, true), BC_PARSE_OP(6, true),
754252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
755252884aeSStefan Eßer 	BC_PARSE_OP(3, false),
756252884aeSStefan Eßer 	BC_PARSE_OP(7, true), BC_PARSE_OP(7, true),
757252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
758252884aeSStefan Eßer 	BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), BC_PARSE_OP(9, true),
759252884aeSStefan Eßer 	BC_PARSE_OP(9, true), BC_PARSE_OP(9, true), BC_PARSE_OP(9, true),
760252884aeSStefan Eßer 	BC_PARSE_OP(11, true), BC_PARSE_OP(10, true),
761252884aeSStefan Eßer 	BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), BC_PARSE_OP(8, false),
762252884aeSStefan Eßer 	BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), BC_PARSE_OP(8, false),
763252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
764252884aeSStefan Eßer 	BC_PARSE_OP(8, false), BC_PARSE_OP(8, false), BC_PARSE_OP(8, false),
765252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
766252884aeSStefan Eßer 	BC_PARSE_OP(8, false),
767252884aeSStefan Eßer };
768252884aeSStefan Eßer 
769252884aeSStefan Eßer // These identify what tokens can come after expressions in certain cases.
770252884aeSStefan Eßer const BcParseNext bc_parse_next_expr =
771252884aeSStefan Eßer 	BC_PARSE_NEXT(4, BC_LEX_NLINE, BC_LEX_SCOLON, BC_LEX_RBRACE, BC_LEX_EOF);
772252884aeSStefan Eßer const BcParseNext bc_parse_next_param =
773252884aeSStefan Eßer 	BC_PARSE_NEXT(2, BC_LEX_RPAREN, BC_LEX_COMMA);
774252884aeSStefan Eßer const BcParseNext bc_parse_next_print =
775252884aeSStefan Eßer 	BC_PARSE_NEXT(4, BC_LEX_COMMA, BC_LEX_NLINE, BC_LEX_SCOLON, BC_LEX_EOF);
776252884aeSStefan Eßer const BcParseNext bc_parse_next_rel = BC_PARSE_NEXT(1, BC_LEX_RPAREN);
777252884aeSStefan Eßer const BcParseNext bc_parse_next_elem = BC_PARSE_NEXT(1, BC_LEX_RBRACKET);
778252884aeSStefan Eßer const BcParseNext bc_parse_next_for = BC_PARSE_NEXT(1, BC_LEX_SCOLON);
779252884aeSStefan Eßer const BcParseNext bc_parse_next_read =
780252884aeSStefan Eßer 	BC_PARSE_NEXT(2, BC_LEX_NLINE, BC_LEX_EOF);
781252884aeSStefan Eßer #endif // BC_ENABLED
782252884aeSStefan Eßer 
783252884aeSStefan Eßer #if DC_ENABLED
784252884aeSStefan Eßer const uint8_t dc_lex_regs[] = {
785252884aeSStefan Eßer 	BC_LEX_OP_REL_EQ, BC_LEX_OP_REL_LE, BC_LEX_OP_REL_GE, BC_LEX_OP_REL_NE,
786252884aeSStefan Eßer 	BC_LEX_OP_REL_LT, BC_LEX_OP_REL_GT, BC_LEX_SCOLON, BC_LEX_COLON,
787252884aeSStefan Eßer 	BC_LEX_KW_ELSE, BC_LEX_LOAD, BC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN,
788252884aeSStefan Eßer 	BC_LEX_STORE_PUSH,
789252884aeSStefan Eßer };
790252884aeSStefan Eßer 
791252884aeSStefan Eßer const size_t dc_lex_regs_len = sizeof(dc_lex_regs) / sizeof(uint8_t);
792252884aeSStefan Eßer 
793252884aeSStefan Eßer const uchar dc_lex_tokens[] = {
7943aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
795252884aeSStefan Eßer 	BC_LEX_KW_IRAND,
7963aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
797252884aeSStefan Eßer 	BC_LEX_INVALID,
7983aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
799252884aeSStefan Eßer 	BC_LEX_INVALID,
800252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
801252884aeSStefan Eßer 	BC_LEX_OP_TRUNC,
802252884aeSStefan Eßer #else // BC_ENABLE_EXTRA_MATH
803252884aeSStefan Eßer 	BC_LEX_INVALID,
804252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
805252884aeSStefan Eßer 	BC_LEX_OP_MODULUS, BC_LEX_INVALID,
8063aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
807252884aeSStefan Eßer 	BC_LEX_KW_RAND,
8083aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
809252884aeSStefan Eßer 	BC_LEX_INVALID,
8103aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
811252884aeSStefan Eßer 	BC_LEX_LPAREN, BC_LEX_RPAREN, BC_LEX_OP_MULTIPLY, BC_LEX_OP_PLUS,
812252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_OP_MINUS, BC_LEX_INVALID, BC_LEX_OP_DIVIDE,
813252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
814252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
815252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_INVALID,
816252884aeSStefan Eßer 	BC_LEX_COLON, BC_LEX_SCOLON, BC_LEX_OP_REL_GT, BC_LEX_OP_REL_EQ,
817252884aeSStefan Eßer 	BC_LEX_OP_REL_LT, BC_LEX_KW_READ,
818252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
819252884aeSStefan Eßer 	BC_LEX_OP_PLACES,
820252884aeSStefan Eßer #else // BC_ENABLE_EXTRA_MATH
821252884aeSStefan Eßer 	BC_LEX_INVALID,
822252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
823252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
824252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_EQ_NO_REG,
825252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
826252884aeSStefan Eßer 	BC_LEX_OP_LSHIFT,
827252884aeSStefan Eßer #else // BC_ENABLE_EXTRA_MATH
828252884aeSStefan Eßer 	BC_LEX_INVALID,
829252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
830252884aeSStefan Eßer 	BC_LEX_KW_IBASE,
8313aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
832252884aeSStefan Eßer 	BC_LEX_KW_SEED,
8333aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
834252884aeSStefan Eßer 	BC_LEX_INVALID,
8353aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
836252884aeSStefan Eßer 	BC_LEX_KW_SCALE, BC_LEX_LOAD_POP, BC_LEX_OP_BOOL_AND, BC_LEX_OP_BOOL_NOT,
837252884aeSStefan Eßer 	BC_LEX_KW_OBASE, BC_LEX_PRINT_STREAM, BC_LEX_NQUIT, BC_LEX_POP,
838252884aeSStefan Eßer 	BC_LEX_STORE_PUSH, BC_LEX_KW_MAXIBASE, BC_LEX_KW_MAXOBASE,
839252884aeSStefan Eßer 	BC_LEX_KW_MAXSCALE,
8403aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
841252884aeSStefan Eßer 	BC_LEX_KW_MAXRAND,
8423aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
843252884aeSStefan Eßer 	BC_LEX_INVALID,
8443aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
845252884aeSStefan Eßer 	BC_LEX_SCALE_FACTOR,
846252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_KW_LENGTH, BC_LEX_INVALID, BC_LEX_INVALID,
847252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_OP_POWER, BC_LEX_NEG, BC_LEX_INVALID,
848252884aeSStefan Eßer 	BC_LEX_ASCIIFY, BC_LEX_KW_ABS, BC_LEX_CLEAR_STACK, BC_LEX_DUPLICATE,
849252884aeSStefan Eßer 	BC_LEX_KW_ELSE, BC_LEX_PRINT_STACK, BC_LEX_INVALID,
850252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
851252884aeSStefan Eßer 	BC_LEX_OP_RSHIFT,
852252884aeSStefan Eßer #else // BC_ENABLE_EXTRA_MATH
853252884aeSStefan Eßer 	BC_LEX_INVALID,
854252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
855252884aeSStefan Eßer 	BC_LEX_STORE_IBASE,
8563aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
857252884aeSStefan Eßer 	BC_LEX_STORE_SEED,
8583aa99676SStefan Eßer #else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
859252884aeSStefan Eßer 	BC_LEX_INVALID,
8603aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
861252884aeSStefan Eßer 	BC_LEX_STORE_SCALE, BC_LEX_LOAD,
862252884aeSStefan Eßer 	BC_LEX_OP_BOOL_OR, BC_LEX_PRINT_POP, BC_LEX_STORE_OBASE, BC_LEX_KW_PRINT,
863252884aeSStefan Eßer 	BC_LEX_KW_QUIT, BC_LEX_SWAP, BC_LEX_OP_ASSIGN, BC_LEX_INVALID,
864252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_KW_SQRT, BC_LEX_INVALID, BC_LEX_EXECUTE,
865252884aeSStefan Eßer 	BC_LEX_INVALID, BC_LEX_STACK_LEVEL,
866252884aeSStefan Eßer 	BC_LEX_LBRACE, BC_LEX_OP_MODEXP, BC_LEX_RBRACE, BC_LEX_OP_DIVMOD,
867252884aeSStefan Eßer 	BC_LEX_INVALID
868252884aeSStefan Eßer };
869252884aeSStefan Eßer 
870252884aeSStefan Eßer const uchar dc_parse_insts[] = {
871252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID,
872252884aeSStefan Eßer #if BC_ENABLED
873252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID,
874252884aeSStefan Eßer #endif // BC_ENABLED
875252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_BOOL_NOT,
876252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
877252884aeSStefan Eßer 	BC_INST_TRUNC,
878252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
879252884aeSStefan Eßer 	BC_INST_POWER, BC_INST_MULTIPLY, BC_INST_DIVIDE, BC_INST_MODULUS,
880252884aeSStefan Eßer 	BC_INST_PLUS, BC_INST_MINUS,
881252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
882252884aeSStefan Eßer 	BC_INST_PLACES,
883252884aeSStefan Eßer 	BC_INST_LSHIFT, BC_INST_RSHIFT,
884252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
885252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
886252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID,
887252884aeSStefan Eßer 	BC_INST_BOOL_OR, BC_INST_BOOL_AND,
888252884aeSStefan Eßer #if BC_ENABLED
889252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
890252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID,
891252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
892252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
893252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
894252884aeSStefan Eßer #endif // BC_ENABLED
895252884aeSStefan Eßer 	BC_INST_INVALID,
896252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_REL_GT, BC_INST_REL_LT,
897252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_REL_GE,
898252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_REL_LE,
899252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
900252884aeSStefan Eßer #if BC_ENABLED
901252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
902252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
903252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
904252884aeSStefan Eßer #endif // BC_ENABLED
905252884aeSStefan Eßer 	BC_INST_IBASE, BC_INST_OBASE, BC_INST_SCALE,
9063aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
907252884aeSStefan Eßer 	BC_INST_SEED,
9083aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
909252884aeSStefan Eßer 	BC_INST_LENGTH, BC_INST_PRINT,
910252884aeSStefan Eßer 	BC_INST_SQRT, BC_INST_ABS,
9113aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
912252884aeSStefan Eßer 	BC_INST_IRAND,
9133aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
914252884aeSStefan Eßer 	BC_INST_QUIT, BC_INST_INVALID,
9153aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
916252884aeSStefan Eßer 	BC_INST_RAND,
9173aa99676SStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
918252884aeSStefan Eßer 	BC_INST_MAXIBASE,
919252884aeSStefan Eßer 	BC_INST_MAXOBASE, BC_INST_MAXSCALE,
9203aa99676SStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
921252884aeSStefan Eßer 	BC_INST_MAXRAND,
922252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
923252884aeSStefan Eßer 	BC_INST_INVALID,
924252884aeSStefan Eßer 	BC_INST_REL_EQ, BC_INST_MODEXP, BC_INST_DIVMOD, BC_INST_INVALID,
925252884aeSStefan Eßer 	BC_INST_EXECUTE, BC_INST_PRINT_STACK, BC_INST_CLEAR_STACK,
926252884aeSStefan Eßer 	BC_INST_STACK_LEN, BC_INST_DUPLICATE, BC_INST_SWAP, BC_INST_POP,
927252884aeSStefan Eßer 	BC_INST_ASCIIFY, BC_INST_PRINT_STREAM,
928252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
929252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
930252884aeSStefan Eßer 	BC_INST_INVALID,
931252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
932252884aeSStefan Eßer 	BC_INST_INVALID, BC_INST_INVALID, BC_INST_INVALID,
933252884aeSStefan Eßer 	BC_INST_PRINT_POP, BC_INST_NQUIT, BC_INST_SCALE_FUNC,
934252884aeSStefan Eßer };
935252884aeSStefan Eßer #endif // DC_ENABLED
936252884aeSStefan Eßer 
937*50696a6eSStefan Eßer #endif // !BC_ENABLE_LIBRARY
938*50696a6eSStefan Eßer 
939*50696a6eSStefan Eßer #if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
940*50696a6eSStefan Eßer 
941*50696a6eSStefan Eßer const BcRandState bc_rand_multiplier = BC_RAND_MULTIPLIER;
942*50696a6eSStefan Eßer 
943*50696a6eSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND
944*50696a6eSStefan Eßer 
945252884aeSStefan Eßer #if BC_LONG_BIT >= 64
946252884aeSStefan Eßer const BcDig bc_num_bigdigMax[] = {
947252884aeSStefan Eßer 	709551616U,
948252884aeSStefan Eßer 	446744073U,
949*50696a6eSStefan Eßer 	18U,
950*50696a6eSStefan Eßer };
951*50696a6eSStefan Eßer const BcDig bc_num_bigdigMax2[] = {
952*50696a6eSStefan Eßer 	768211456U,
953*50696a6eSStefan Eßer 	374607431U,
954*50696a6eSStefan Eßer 	938463463U,
955*50696a6eSStefan Eßer 	282366920U,
956*50696a6eSStefan Eßer 	340U,
957252884aeSStefan Eßer };
958252884aeSStefan Eßer #else // BC_LONG_BIT >= 64
959252884aeSStefan Eßer const BcDig bc_num_bigdigMax[] = {
960252884aeSStefan Eßer 	7296U,
961252884aeSStefan Eßer 	9496U,
962252884aeSStefan Eßer 	42U,
963252884aeSStefan Eßer };
964*50696a6eSStefan Eßer const BcDig bc_num_bigdigMax2[] = {
965*50696a6eSStefan Eßer 	1616U,
966*50696a6eSStefan Eßer 	955U,
967*50696a6eSStefan Eßer 	737U,
968*50696a6eSStefan Eßer 	6744U,
969*50696a6eSStefan Eßer 	1844U,
970*50696a6eSStefan Eßer };
971252884aeSStefan Eßer #endif // BC_LONG_BIT >= 64
972252884aeSStefan Eßer 
973252884aeSStefan Eßer const size_t bc_num_bigdigMax_size = sizeof(bc_num_bigdigMax) / sizeof(BcDig);
974*50696a6eSStefan Eßer const size_t bc_num_bigdigMax2_size = sizeof(bc_num_bigdigMax2) / sizeof(BcDig);
975252884aeSStefan Eßer 
976252884aeSStefan Eßer const char bc_num_hex_digits[] = "0123456789ABCDEF";
977252884aeSStefan Eßer 
978252884aeSStefan Eßer const BcBigDig bc_num_pow10[BC_BASE_DIGS + 1] = {
979252884aeSStefan Eßer 	1,
980252884aeSStefan Eßer 	10,
981252884aeSStefan Eßer 	100,
982252884aeSStefan Eßer 	1000,
983252884aeSStefan Eßer 	10000,
984252884aeSStefan Eßer #if BC_BASE_DIGS > 4
985252884aeSStefan Eßer 	100000,
986252884aeSStefan Eßer 	1000000,
987252884aeSStefan Eßer 	10000000,
988252884aeSStefan Eßer 	100000000,
989252884aeSStefan Eßer 	1000000000,
990252884aeSStefan Eßer #endif // BC_BASE_DIGS > 4
991252884aeSStefan Eßer };
992252884aeSStefan Eßer 
993*50696a6eSStefan Eßer #if !BC_ENABLE_LIBRARY
994*50696a6eSStefan Eßer 
995252884aeSStefan Eßer const BcNumBinaryOp bc_program_ops[] = {
996252884aeSStefan Eßer 	bc_num_pow, bc_num_mul, bc_num_div, bc_num_mod, bc_num_add, bc_num_sub,
997252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
998252884aeSStefan Eßer 	bc_num_places, bc_num_lshift, bc_num_rshift,
999252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
1000252884aeSStefan Eßer };
1001252884aeSStefan Eßer 
1002252884aeSStefan Eßer const BcNumBinaryOpReq bc_program_opReqs[] = {
1003*50696a6eSStefan Eßer 	bc_num_powReq, bc_num_mulReq, bc_num_divReq, bc_num_divReq,
1004252884aeSStefan Eßer 	bc_num_addReq, bc_num_addReq,
1005252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
1006252884aeSStefan Eßer 	bc_num_placesReq, bc_num_placesReq, bc_num_placesReq,
1007252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
1008252884aeSStefan Eßer };
1009252884aeSStefan Eßer 
1010252884aeSStefan Eßer const BcProgramUnary bc_program_unarys[] = {
1011252884aeSStefan Eßer 	bc_program_negate, bc_program_not,
1012252884aeSStefan Eßer #if BC_ENABLE_EXTRA_MATH
1013252884aeSStefan Eßer 	bc_program_trunc,
1014252884aeSStefan Eßer #endif // BC_ENABLE_EXTRA_MATH
1015252884aeSStefan Eßer };
1016252884aeSStefan Eßer 
1017252884aeSStefan Eßer const char bc_program_exprs_name[] = "<exprs>";
1018252884aeSStefan Eßer 
1019252884aeSStefan Eßer const char bc_program_stdin_name[] = "<stdin>";
1020252884aeSStefan Eßer const char bc_program_ready_msg[] = "ready for more input\n";
1021252884aeSStefan Eßer const size_t bc_program_ready_msg_len = sizeof(bc_program_ready_msg) - 1;
1022252884aeSStefan Eßer const char bc_program_esc_chars[] = "ab\\efnqrt";
1023252884aeSStefan Eßer const char bc_program_esc_seqs[] = "\a\b\\\\\f\n\"\r\t";
1024*50696a6eSStefan Eßer 
1025*50696a6eSStefan Eßer #endif // !BC_ENABLE_LIBRARY
1026