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