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