comparison tests/agcl/examples/good/dsl.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:13d2b8934445
1 // C Prologue
2 /*****
3
4 AnaGram Programming Examples
5
6 A Dos Script Language
7
8 Copyright 1993 Parsifal Software. All Rights Reserved.
9
10 This software is provided 'as-is', without any express or implied
11 warranty. In no event will the authors be held liable for any damages
12 arising from the use of this software.
13
14 Permission is granted to anyone to use this software for any purpose,
15 including commercial applications, and to alter it and redistribute it
16 freely, subject to the following restrictions:
17
18 1. The origin of this software must not be misrepresented; you must not
19 claim that you wrote the original software. If you use this software
20 in a product, an acknowledgment in the product documentation would be
21 appreciated but is not required.
22 2. Altered source versions must be plainly marked as such, and must not be
23 misrepresented as being the original software.
24 3. This notice may not be removed or altered from any source distribution.
25
26 *****/
27
28 #include "stack.h"
29 #include "charsink.h"
30 #include "strdict.h"
31 #include "array.h"
32 #include "symbol.h"
33 #include "query.h"
34
35 #ifdef __BCPLUSPLUS__
36 extern unsigned _stklen = 0x4000; // set stack size
37 #endif
38
39
40 // Define stacks for temporary storage
41
42 stack <action_pointer> as(25); // Stack actions
43 stack <int> is(100); // Stack string indices
44 stack <char *> ps(1000,20); // Stack parameter strings
45 stack <query_item> qs(23); // Stack query items
46
47
48 // Define data structures for symbol table
49
50 #define N_STRINGS 2000
51
52 string_accumulator sa(64000U,500);
53 string_dictionary sd(N_STRINGS);
54 array <symbol_table_entry> st(N_STRINGS);
55
56
57 /*
58 * AnaGram, A System for Syntax Directed Programming
59 * File generated by: ...
60 *
61 * AnaGram Parsing Engine
62 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
63 *
64 * This software is provided 'as-is', without any express or implied
65 * warranty. In no event will the authors be held liable for any damages
66 * arising from the use of this software.
67 *
68 * Permission is granted to anyone to use this software for any purpose,
69 * including commercial applications, and to alter it and redistribute it
70 * freely, subject to the following restrictions:
71 *
72 * 1. The origin of this software must not be misrepresented; you must not
73 * claim that you wrote the original software. If you use this software
74 * in a product, an acknowledgment in the product documentation would be
75 * appreciated but is not required.
76 * 2. Altered source versions must be plainly marked as such, and must not be
77 * misrepresented as being the original software.
78 * 3. This notice may not be removed or altered from any source distribution.
79 */
80
81 #ifndef DSL_H
82 #include "dsl.h"
83 #endif
84
85 #ifndef DSL_H
86 #error Mismatched header file
87 #endif
88
89 #include <ctype.h>
90 #include <stdio.h>
91
92 #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
93 #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
94 #define CONTEXT ((PCB).cs[(PCB).ssx])
95
96
97
98 dsl_pcb_type dsl_pcb;
99 #define PCB dsl_pcb
100 #define CHANGE_REDUCTION(x) dsl_change_reduction(dsl_##x##_token)
101 int dsl_change_reduction(dsl_token_type);
102
103
104 #line - "dsl.syn"
105 #include <stdlib.h>
106 #include <ctype.h>
107 #include <sys/stat.h>
108 #include <fcntl.h>
109 #include <time.h>
110 #include <assert.h>
111 #include <errno.h>
112
113 #if defined(__MSDOS__) || defined(__WINDOWS__)
114 #include <io.h>
115 #include <conio.h>
116 #include <process.h>
117 #else
118 #include <unistd.h>
119
120 /* This is only meant to compile, not run. (Unix) */
121 static int kbhit(void) { return 0; }
122 static int getch(void) { return '?'; }
123 static void ungetch(int) { }
124 static void strupr(char *) { }
125 static int spawnvp(int, const char *, char *const *) { return -1; }
126 #define O_TEXT 0
127 #define O_BINARY 0
128 #define P_WAIT 0
129 #define _MAX_PATH 128
130 #define _MAX_DRIVE 4
131 #define _MAX_DIR 128
132 #define _MAX_FNAME 16
133 #define _MAX_EXT 4
134 static void _splitpath(const char *, char *, char *, char *, char *) {}
135 static void _makepath(char *, const char *, const char *, const char *,
136 const char *) {}
137
138 #endif
139
140 #ifdef __MSDOS__
141 #include <dos.h>
142 #else
143
144 /* This is only meant to compile, not run. (Windows, Unix) */
145
146 #define far
147 struct find_t { int attrib; char name[16]; };
148 int _dos_findfirst(const char *, int, struct find_t *) { return -1; }
149 int _dos_findnext(struct find_t *) { return -1; }
150 #define _A_SUBDIR 1
151 struct diskfree_t {
152 unsigned avail_clusters, bytes_per_sector, sectors_per_cluster;
153 };
154 void _dos_getdiskfree(int, struct diskfree_t *f) {
155 f->avail_clusters = 0;
156 f->bytes_per_sector = 512;
157 f->sectors_per_cluster = 4;
158 }
159 void _dos_getftime(int, unsigned short *d, unsigned short *t) { *d=*t=0; }
160
161 #endif /* not MSDOS */
162
163 #include "edit.h"
164
165
166 #include "screen.h"
167 #include "util.h"
168 #include "redirect.h"
169
170 #define GET_CONTEXT CONTEXT.pointer = PCB.pointer;\
171 CONTEXT.line=PCB.line;\
172 CONTEXT.column = PCB.column;
173
174
175 int debug_switch = 0;
176 char *error_msg = NULL;
177 unsigned errorlevel_index;
178 int errorlevel;
179 int exitcode = 0;
180 int exitflag = 0;
181 int first_line = 1;
182 int first_column = 1;
183 unsigned stderr_index;
184
185 void display_queries(screen_descriptor *);
186
187 #define FIRST_LINE first_line
188 #define FIRST_COLUMN first_column
189
190
191 /*****
192
193 Internal Functions
194
195 *****/
196
197 long file_exists(void) {
198 FILE *f = fopen((sa--).top(),"r");
199 if (f != NULL) fclose(f);
200 return f != NULL;
201 }
202
203 long directory_exists(void) {
204 struct find_t ff;
205 int result;
206
207 sa << "\\*.*";
208 result = _dos_findfirst((sa--).top(),_A_SUBDIR,&ff);
209 return result == 0;
210 }
211
212 long string_length(void) {
213 return size(sa--);
214 }
215
216 long get_file_length(void) {
217 int handle = open((sa--).top(), O_RDONLY);
218 long length;
219 if (handle < 0) return 0;
220 length = filelength(handle);
221 close(handle);
222 return length;
223 }
224
225 long disk_space(void) {
226 struct diskfree_t free;
227 int drive = toupper(*(sa--).top()) - 64;
228 long avail;
229
230 _dos_getdiskfree(drive, &free);
231 avail = (long) free.avail_clusters
232 * (long) free.bytes_per_sector
233 * (long) free.sectors_per_cluster;
234 return avail;
235 }
236
237 long file_time(void) {
238 int handle = open((sa--).top(), O_RDONLY);
239 #ifdef __BCPLUSPLUS__
240 unsigned date, time;
241 #else
242 unsigned short date, time;
243 #endif
244 struct tm t;
245
246 if (handle < 0) return 0;
247 _dos_getftime(handle, &date, &time);
248 close(handle);
249 t.tm_year = ((date & 0xfe00) >> 9) + 80;
250 t.tm_mon = ((date & 0x1e00) >> 5) - 1;
251 t.tm_mday = date & 0x001f;
252 ;
253 t.tm_hour = (time & 0xf800) >> 11;
254 t.tm_min = (time & 0x07e0) >> 5;
255 t.tm_sec = (time & 0x001f) << 1;
256 return mktime(&t);
257 }
258
259
260 // Support for reduction procecures
261
262 // Compare top strings on string accumulator
263
264 /*
265 pops top two strings from string accumulator using strcmp
266 and returns
267 -1 if first string is less than top string
268 0 if strings match
269 +1 if top string is greater than first string
270 */
271
272 int string_comp(void) {
273 int n = size(sa);
274 array<char> right_string((sa--).top(), n+1);
275 return strcmp((sa--).top(),right_string);
276 }
277
278 /*
279 replace the top string on the stack, with a substring where the index
280 of the first character in the substring is given by "first" and the index
281 of the last character is given by "last"
282 */
283
284 void extract(unsigned first, unsigned last) {
285 int n = last - first + 1;
286 assert (last >= first);
287 array <char> x( (sa--).top() + first, n+1 );
288 x[n] = 0;
289 ++sa << x;
290 }
291
292 /*
293 Look up the top string on the accumulator stack in the string dictionary.
294 If it has a value in the symbol table, replace it with the symbol table
295 value. If the value is numeric, convert it to integer. Otherwise, leave the
296 string untouched on the stack.
297 */
298
299 void lookup(void) {
300 unsigned index = sd[sa.top()];
301 if (index == 0) return;
302 switch (st[index].type) {
303 case string_type:
304 case value_type: {
305 --sa; // discard name
306 ++sa << st[index].data.text; // stack value
307 break;
308 }
309 case integer_type: {
310 --sa; // discard name
311 (++sa).printf("%ld", st[index].data.integer); // convert to ascii
312 break;
313 }
314 default:
315 /* not supposed to happen? */
316 break;
317 }
318 }
319
320 /*
321 Find the data type of a symbol and change the reduction accordingly.
322 Return the dictionary index for strings, and the value itself for integers.
323 */
324
325 long name_type(void) {
326 unsigned index = sd << (sa--).top();
327 switch (st[index].type) {
328 case value_type:
329 case string_type: {
330 CHANGE_REDUCTION(string_name);
331 return index;
332 }
333 case built_in_function_type: {
334 CHANGE_REDUCTION(built_in_name);
335 return index;
336 }
337 case undefined_type: {
338 CHANGE_REDUCTION(undefined_name);
339 return index;
340 }
341 case integer_type: return st[index].data.integer;
342 default:
343 /* not supposed to happen? */
344 break;
345 }
346 return 0;
347 }
348
349 /*
350 Store a string formula. A string formula is a sequence of string identifiers
351 the values of which are to be concatenated. The parser has accumulated the
352 identifiers on the integer_stack, is. The formula is terminated by a zero
353 entry.
354 */
355
356 int *formula(void) {
357 int n = size(is << 0);
358 int *f = new int[n];
359 while (n--) is >> f[n];
360 return f;
361 }
362
363 /*
364 Make a copy of an action that has been identified in the text stream.
365 An action pointer was stacked at the beginning of the action text on the
366 action stack, as.
367 */
368
369 action_pointer copy_action(void) {
370 action_pointer ap;
371 as >> ap; // pop action descriptor
372 unsigned length = (unsigned) (PCB.pointer - ap.pointer);
373 unsigned char *action = memdup(ap.pointer,length + 1);
374 action[length] = 0;
375 ap.pointer = action;
376 return ap;
377 }
378
379
380 // Internal Commands
381
382 int echo(int, char *args[]) {
383 int i;
384 const char *cs = "";
385 for (i = 1; args[i]; i++) printf("%s%s", cs, args[i]), cs = " ";
386 printf("\n");
387 fflush(stdout);
388 return 0;
389 }
390
391 int pause(int, char *[]) {
392 int c;
393 while (kbhit()) getch(); // Empty buffer
394 printf("Press any key to continue . . .\n");
395 c = getch();
396 if (c == 3) exit(1);
397 return c;
398 }
399
400 int exit_script(int n_args, char *args[]) {
401 if (n_args > 1) sscanf(args[1], "%d", &exitcode);
402 exit(exitcode);
403 return exitcode;
404 }
405
406 /*
407 int return_script(int n_args, char *args[]) {
408 if (n_args > 1) sscanf(args[1], "%d", &exitcode);
409 PCB.exit_flag = AG_SUCCESS_CODE;
410 return exitcode;
411 }
412 */
413
414 int subdirs(int, char *args[]) {
415 struct find_t file_block;
416 int flag;
417 int length = strlen(args[1]);
418 array <char> name(args[1],length + 5);
419
420 strcat(name, "\\*.*");
421 for (flag = _dos_findfirst(name, _A_SUBDIR, &file_block);
422 flag == 0; flag = _dos_findnext(&file_block)) {
423 if ((file_block.attrib & _A_SUBDIR) == 0) continue;
424 if (strcmp(file_block.name, ".") == 0) continue;
425 if (strcmp(file_block.name, "..") == 0) continue;
426 puts(file_block.name);
427 }
428 return 0;
429 }
430
431 int files(int, char *args[]) {
432 struct find_t file_block;
433 int flag;
434 int length = strlen(args[1]);
435 array<char> name(args[1],length + 5);
436
437 strcat(name, "\\*.*");
438 for (flag = _dos_findfirst(name, 0, &file_block);
439 flag == 0; flag = _dos_findnext(&file_block)) {
440 puts(file_block.name);
441 }
442 return 0;
443 }
444
445
446 /*****
447
448 Execute Command Line
449
450 *****/
451
452
453 void perform_action(action_pointer ap) {
454 dsl_pcb_type save_pcb = PCB;
455
456 PCB.pointer = ap.pointer;
457 first_line = ap.line;
458 first_column = ap.column;
459 dsl();
460 exitflag = PCB.exit_flag != AG_SUCCESS_CODE;
461 PCB = save_pcb;
462 if (exitflag) PCB.exit_flag = AG_SEMANTIC_ERROR_CODE;
463 }
464
465 void exec(void) {
466 int n = size(ps << (char *) NULL);
467 int n_args = n - 1;
468 unsigned index;
469 unsigned uc_index;
470 int i;
471
472 array <char *> args(n);
473 while (n--) ps >> args[n];
474
475 index = sd[args[0]];
476 while (index && st[index].type == string_type) {
477 args[0] = st[index].data.text; // stack value
478 index = sd[args[0]];
479 }
480 if (debug_switch) {
481 for (i = 0; args[i]; i++) fprintf(stderr, "%s ", args[i]);
482 fprintf(stderr,"\nPress any key to continue\n");
483 while (!kbhit());
484 getch();
485 }
486 strupr(args[0]);
487 uc_index = sd[args[0]];
488 if (n_args == 1 && strlen(args[0]) == 2 && args[0][1] == ':') {
489 errorlevel = system(args[0]);
490 }
491 else if ( *args[0] && uc_index) switch (st[uc_index].type) {
492 case internal_type: {
493 errorlevel = (*st[uc_index].data.proc)(n_args, args);
494 break;
495 }
496 case dos_type: {
497 int i;
498 for (i = 1; args[i]; i++) args[i][-1] = ' ';
499 errorlevel = system(args[0]);
500 if (errorlevel == -1) {
501 fprintf(stderr,"Error invoking %s: %s\n", args[0], strerror(errno));
502 exit(1);
503 }
504 break;
505 }
506 default:
507 /* not supposed to happen? */
508 break;
509 }
510 else if ( *args[0] && index) switch (st[index].type) {
511 case action_type: {
512 action_descriptor d = *st[index].data.action;
513 stack <symbol_table_entry> old_entries(d.n_args);
514 for (i = 0; i < d.n_args && args[i+1]; i++) {
515 old_entries << st[d.args[i]];
516 st[d.args[i]].type = value_type;
517 st[d.args[i]].data.text = memdup(args[i+1], 1 + strlen(args[i+1]));
518 }
519 perform_action(d.ap);
520 for (i = d.n_args; i--;) {
521 release(st[d.args[i]]);
522 old_entries >> st[d.args[i]];
523 }
524 break;
525 }
526 default: {
527 char **tmpargs = args;
528 errorlevel = spawnvp(P_WAIT,args[0], tmpargs);
529 if (errorlevel == -1) {
530 fprintf(stderr,"Error invoking %s: %s\n", args[0], strerror(errno));
531 exit(1);
532 }
533 }
534 }
535 else {
536 }
537 st[errorlevel_index].data.integer = errorlevel;
538 while (n_args--) --sa;
539 --ps;
540 if (kbhit()) {
541 int c = getch();
542 if (c == 3) exit(1);
543 ungetch(c);
544 }
545 }
546
547 void discard_temp_file(char *file_name) {
548 unlink(file_name); // Delete file
549 delete [] file_name; // Free storage for name
550 }
551
552
553 /*****
554
555 Execute Command with piped input
556
557 *****/
558
559
560 void exec_pipe_in(char *file_name) {
561 {
562 redirect sin(STDIN, file_name);
563 exec();
564 }
565 discard_temp_file(file_name);
566 }
567
568
569 /*****
570
571 Execute Command with redirected I/O
572
573 *****/
574
575 void exec_redirect_in(void) {
576 redirect sin(STDIN, (sa--).top());
577 exec();
578 }
579
580 char *exec_pipe_out(void) {
581 fflush(stdout);
582 redirect sout(STDOUT);
583 exec();
584 fflush(stdout);
585 return save_file(sout);
586 }
587
588 char *exec_pipe_in_pipe_out(char *file_name) {
589 char *result;
590 {
591 redirect sin(STDIN, file_name);
592 fflush(stdout);
593 redirect sout(STDOUT);
594 exec();
595 fflush(stdout);
596 result = save_file(sout);
597 }
598 discard_temp_file(file_name);
599 return result;
600 }
601
602 char *exec_redirect_in_pipe_out(void) {
603 fflush(stdout);
604 redirect sout(STDOUT);
605 exec_redirect_in();
606 fflush(stdout);
607 return save_file(sout);
608 }
609
610 unsigned check_integer(void) {
611 unsigned index = sd << (sa--).top();
612 if (st[index].type == integer_type) return index;
613 CHANGE_REDUCTION(undeclared_variable);
614 if (st[index].type == string_type) CHANGE_REDUCTION(string_variable);
615 return index;
616 }
617
618 void assign_value(unsigned index) {
619 char *text = copy(sa--);
620 release(st[index]);
621 st[index].type = value_type;
622 st[index].data.text = text;
623 }
624
625 void grab_output(char *temp_name) {
626 unlink(sa.top()); // delete old file
627 rename(temp_name, (sa--).top()); // rename temp file
628 delete [] temp_name; // discard name string
629 }
630
631 void append_output(char *temp_name) {
632 fflush(stdout);
633 redirect sout(STDOUT, (sa--).top(), 1); // append to file named on sa
634 redirect sin(STDIN, temp_name);
635 char buf[2000];
636 int n;
637 while (1) {
638 n = read(STDIN, buf, 2000);
639 if (n == 0) break;
640 write(STDOUT, buf, n);
641 }
642 fflush(stdout);
643 unlink(temp_name);
644 delete [] temp_name;
645 }
646
647 void action_string(void) {
648 action_pointer ap;
649 as >> ap;
650 unsigned length = (unsigned)(PCB.pointer - ap.pointer);
651 array <unsigned char> action(ap.pointer,length + 1);
652 action[length] = 0;
653 fflush(stdout);
654 redirect sout(STDOUT);
655 char *result;
656
657 ap.pointer = action;
658 perform_action(ap);
659 fflush(stdout);
660 result = content(sout);
661 ++sa << result;
662 delete [] result;
663 }
664
665
666 // Program Control functions
667
668 // If/else statement
669
670 int do_if(int pc, int cc) {
671 action_pointer ap;
672 as >> ap;
673 if (!pc && cc && exitflag == 0) {
674 unsigned length = (unsigned) (PCB.pointer - ap.pointer);
675 array<unsigned char> q(ap.pointer, length+1);
676 q[length] = 0;
677 ap.pointer = q;
678 perform_action(ap);
679 }
680 return pc || cc;
681 }
682
683 // While statement
684
685 void do_while(int cc) {
686 unsigned length;
687 action_pointer ap;
688 as >> ap;
689 if (cc == 0) return;
690 length = (unsigned) (PCB.pointer - ap.pointer);
691 array<unsigned char> q(ap.pointer, length+1);
692 q[length] = 0;
693 ap.pointer = q;
694 perform_action(ap);
695 if (exitflag) return;
696 PCB.pointer = CONTEXT.pointer;
697 PCB.line = CONTEXT.line;
698 PCB.column = CONTEXT.column;
699 }
700
701
702 // For Statement
703 // Note that this is the for statement in the DOS batch languange for, not C
704
705 void do_for_loop(void) {
706 int n,k;
707 char *q;
708 const char *seps = " \t\v\f\r\n";
709 action_pointer ap;
710 as >> ap;
711 unsigned length = (unsigned)(PCB.pointer - ap.pointer);
712 array <unsigned char> action(ap.pointer, length + 1);
713 action[length] = 0;
714
715 ap.pointer = action;
716 n = size(sa);
717 array<char> text((sa--).top(), n + 1);
718
719
720 unsigned index = sd << (sa--).top();
721
722 ++ps;
723 for (q = strtok(text, seps); q != NULL; q = strtok(NULL,seps)) {
724 if (*q == '(') {
725 int k = strlen(q) - 1;
726 assert(q[k] == ')');
727 q[k] = 0;
728 q++;
729 }
730 else if (*q == '"') {
731 int k = strlen(q) - 1;
732 assert(q[k] == '"');
733 q[k] = 0;
734 q++;
735 }
736 ps << q;
737 }
738 k = n = size(ps);
739 array<char *> args(n);
740 while (k--) ps >> args[k];
741 --ps;
742 symbol_table_entry save_table_entry = st[index];
743 st[index].type = value_type;
744
745 for (k = 0; k < n && exitflag == 0; k++) {
746 st[index].data.text = args[k];
747 perform_action(ap);
748 }
749 st[index] = save_table_entry;
750 }
751
752 void invoke_script(void) {
753 int handle = open(sa.top(), O_TEXT | O_RDONLY);
754 long size;
755 unsigned n;
756 action_pointer ap;
757
758 if (handle < 0) {
759 fprintf(stderr,"Cannot open %s\n", (sa--).top());
760 exit(1);
761 }
762 --sa;
763 size = filelength(handle);
764 assert(size < 65536L);
765 array <unsigned char> data((unsigned) size+1);
766 n = (unsigned) read(handle,data,(unsigned) size);
767 data[n] = 0;
768 close(handle);
769 exitflag = 0;
770 ap.pointer = data;
771 ap.line = ap.column = 1;
772 perform_action(ap);
773 st[errorlevel_index].data.integer = exitcode;
774 exitflag = exitcode = 0;
775 return;
776 }
777
778 internal_commands_descriptor internal_commands[] = {
779 {"ECHO", echo},
780 {"EXIT", exit_script},
781 {"FILES", files},
782 {"PAUSE", pause},
783 // {"RETURN", return_script},
784 {"SUBDIRS", subdirs},
785 {NULL, NULL}
786 };
787
788 struct built_ins_descriptor built_ins[] = {
789 {"file_exists", file_exists},
790 {"directory_exists", directory_exists},
791 {"string_length", string_length},
792 {"file_length", get_file_length},
793 {"disk_space", disk_space},
794 {"file_time", file_time},
795 {NULL, NULL}
796 };
797
798 void set_extension(char *path, const char *e) {
799 char s[_MAX_PATH];
800 char drive[_MAX_DRIVE];
801 char dir[_MAX_DIR];
802 char file[_MAX_FNAME];
803 char ext[_MAX_EXT];
804
805 _splitpath(path,drive,dir,file,ext);
806 _makepath(s, drive, dir, file, e);
807 ++sa << s;
808 }
809
810 /*
811 Note that if this program is called without any arguments, it looks for a
812 script with the same name as the executable. Thus, to make an install
813 program that picks up the install script without any arguments, you simply
814 rename DSL.EXE to INSTALL.EXE. Then when you run it without any arguments
815 it will run the INSTALL.DSL script.
816 */
817
818 int main(int argc, char *argv[]) {
819 int arg_number = 0;
820 int i = 1;
821 int j = 0;
822
823 init_dos_internals();
824 set_arg(j++, argv[0]);
825 if (argc > i && (argv[i][0] == '/' || argv[i][0] == '-')) {
826 if (toupper(argv[i][1]) != 'D') {
827 printf("Unrecognized switch -- /%c\n", argv[i][1]);
828 return 1;
829 }
830 debug_switch = 1;
831 i++;
832 }
833 if (argc > i) arg_number = i++;
834 set_extension(argv[arg_number], "DSL");
835 set_arg(j++,copy(sa));
836 while (i < argc) set_arg(j++, argv[i++]);
837 define_integer("argc", j);
838 invoke_script(); // Takes file name from sa
839 return exitcode;
840 }
841 #line - "dsl.cpp"
842
843 #ifndef CONVERT_CASE
844 #define CONVERT_CASE(c) (c)
845 #endif
846 #ifndef TAB_SPACING
847 #define TAB_SPACING 8
848 #endif
849
850 #define ag_rp_1(v) (++sa << sd[v], lookup())
851
852 #define ag_rp_2(v) (++sa << sd[v], lookup())
853
854 #define ag_rp_3(v) (++sa << sd[v], lookup())
855
856 #define ag_rp_4() (sa << '[')
857
858 #define ag_rp_5() (concat(sa) << ']', lookup())
859
860 #define ag_rp_6() (concat(sa))
861
862 #define ag_rp_7() (concat(sa))
863
864 #define ag_rp_8(c) (++sa << c)
865
866 #define ag_rp_9(c) (sa << c)
867
868 #define ag_rp_10() (action_string())
869
870 #define ag_rp_11() (as << CONTEXT)
871
872 static void ag_rp_12(void) {
873 #line - "dsl.syn"
874 action_pointer a; as >> a;
875 #line - "dsl.cpp"
876 }
877
878 #define ag_rp_13() (--sa)
879
880 #define ag_rp_14() (--sa)
881
882 #define ag_rp_15() (--sa)
883
884 #define ag_rp_16() (++sa)
885
886 #define ag_rp_17(c) (sa << c)
887
888 #define ag_rp_18() (sa << '(')
889
890 #define ag_rp_19() (concat(sa) << ')')
891
892 #define ag_rp_20() (++sa)
893
894 #define ag_rp_21(c) (sa << c)
895
896 #define ag_rp_22(c) (sa << c)
897
898 #define ag_rp_23() ('\a')
899
900 #define ag_rp_24() ('\b')
901
902 #define ag_rp_25() ('\f')
903
904 #define ag_rp_26() ('\n')
905
906 #define ag_rp_27() ('\r')
907
908 #define ag_rp_28() ('\t')
909
910 #define ag_rp_29() ('\v')
911
912 #define ag_rp_30() ('\\')
913
914 #define ag_rp_31() ('\?')
915
916 #define ag_rp_32() ('\'')
917
918 #define ag_rp_33() ('"')
919
920 #define ag_rp_34(d) (d-'0')
921
922 #define ag_rp_35(n, d) (8*n + d-'0')
923
924 #define ag_rp_36(n, d) (8*n + d-'0')
925
926 #define ag_rp_37(n) ((int) n)
927
928 #define ag_rp_38(n, d) (16*n + d)
929
930 #define ag_rp_39() (exec())
931
932 #define ag_rp_40() (exec_redirect_in())
933
934 #define ag_rp_41(file) (exec_pipe_in(file))
935
936 #define ag_rp_42(file) (grab_output(file))
937
938 #define ag_rp_43(file) (append_output(file))
939
940 #define ag_rp_44() (exec_pipe_out())
941
942 #define ag_rp_45() (exec_redirect_in_pipe_out())
943
944 #define ag_rp_46(file) (exec_pipe_in_pipe_out(file))
945
946 #define ag_rp_47() (sa << 0, ++ps << (sa.top()))
947
948 #define ag_rp_48() (ps << (sa.top()), sa << 0)
949
950 #define ag_rp_49() (ps << (sa.top()), sa << 0)
951
952 #define ag_rp_50(pc) (do_if(pc,1))
953
954 #define ag_rp_51(cc) (cc)
955
956 #define ag_rp_52(cc) (cc)
957
958 #define ag_rp_53(pc, cc) (do_if(pc,cc!=0))
959
960 #define ag_rp_54(cc) ((int) cc)
961
962 #define ag_rp_55(cc) (do_if(0,cc != 0))
963
964 #define ag_rp_56(v) (assign_value(v))
965
966 #define ag_rp_57(v, x) (st[v].data.integer = (int) x)
967
968 #define ag_rp_58(v) (st[v].data.text = copy(sa--))
969
970 #define ag_rp_59(v, n, x) (st[v].data.text[(unsigned)n] = (char) x)
971
972 #define ag_rp_60() (check_integer())
973
974 #define ag_rp_61(cc) (do_while(cc != 0))
975
976 #define ag_rp_62() (do_for_loop())
977
978 #define ag_rp_63(n) (define_action(n))
979
980 #define ag_rp_64(x) (define_integer((sa--).top(), x))
981
982 #define ag_rp_65() (define_string())
983
984 #define ag_rp_66() (0)
985
986 #define ag_rp_67(n) (n+1)
987
988 #define ag_rp_68(c) (++sa << c)
989
990 #define ag_rp_69(c) (sa << c)
991
992 #define ag_rp_70(c) (sa << c)
993
994 #define ag_rp_71(c, x, y) (c != 0 ? x : y)
995
996 #define ag_rp_72(x, y) (x != 0 || y!=0)
997
998 #define ag_rp_73(x, y) (x != 0 && y !=0)
999
1000 #define ag_rp_74(x, y) (x | y)
1001
1002 #define ag_rp_75(x, y) (x ^ y)
1003
1004 #define ag_rp_76(x, y) (x & y)
1005
1006 #define ag_rp_77(x, y) (x == y)
1007
1008 #define ag_rp_78(x, y) (x != y)
1009
1010 #define ag_rp_79() (string_comp() == 0)
1011
1012 #define ag_rp_80() (string_comp() != 0)
1013
1014 #define ag_rp_81(x, y) (x < y)
1015
1016 #define ag_rp_82(x, y) (x > y)
1017
1018 #define ag_rp_83(x, y) (x <= y)
1019
1020 #define ag_rp_84(x, y) (x >= y)
1021
1022 #define ag_rp_85() (string_comp() < 0)
1023
1024 #define ag_rp_86() (string_comp() > 0)
1025
1026 #define ag_rp_87() (string_comp() <= 0)
1027
1028 #define ag_rp_88() (string_comp() >= 0)
1029
1030 #define ag_rp_89(x, y) (x << (int) y)
1031
1032 #define ag_rp_90(x, y) (x >> (int) y)
1033
1034 #define ag_rp_91(x, y) (x + y)
1035
1036 #define ag_rp_92(x, y) (x - y)
1037
1038 #define ag_rp_93(x, y) (x * y)
1039
1040 #define ag_rp_94(x, y) (x / y)
1041
1042 #define ag_rp_95(x, y) (x % y)
1043
1044 static long ag_rp_96(long x) {
1045 #line - "dsl.syn"
1046 assert(x);
1047 return x;
1048
1049 #line - "dsl.cpp"
1050 }
1051
1052 #define ag_rp_97(x) (x)
1053
1054 #define ag_rp_98(x) (-x)
1055
1056 #define ag_rp_99(x) (~x)
1057
1058 #define ag_rp_100(x) (!x)
1059
1060 #define ag_rp_101(x) (x)
1061
1062 #define ag_rp_102(x) (x)
1063
1064 #define ag_rp_103(n) (((unsigned char *) (sa--).top())[(int) n])
1065
1066 static long ag_rp_104(void) {
1067 #line - "dsl.syn"
1068 long temp;
1069 sscanf((sa--).top(), "%ld", &temp);
1070 return temp;
1071
1072 #line - "dsl.cpp"
1073 }
1074
1075 #define ag_rp_105(x) (x)
1076
1077 #define ag_rp_106(x) ((*st[(unsigned)x].data.func)())
1078
1079 #define ag_rp_107() (name_type())
1080
1081 #define ag_rp_108() (concat(sa))
1082
1083 #define ag_rp_109(first, last) (extract((unsigned)first, (unsigned) last))
1084
1085 #define ag_rp_110() (sa << '[')
1086
1087 #define ag_rp_111() (concat(sa) << ']', lookup())
1088
1089 #define ag_rp_112(x) (++sa << st[(unsigned)x].data.text)
1090
1091 #define ag_rp_113(x) (++sa << sd[(unsigned)x])
1092
1093 #define ag_rp_114() (action_string())
1094
1095 #define ag_rp_115(x) (++sa,sa.printf("%ld",x))
1096
1097 #define ag_rp_116() (0)
1098
1099 #define ag_rp_117(x, d) (16*x + d)
1100
1101 #define ag_rp_118(d) (d - '0')
1102
1103 #define ag_rp_119(d) ((d&7) + 9)
1104
1105 #define ag_rp_120() (0)
1106
1107 #define ag_rp_121(n, d) (8*n + d-'0')
1108
1109 #define ag_rp_122(d) (d-'0')
1110
1111 #define ag_rp_123(n, d) (10*n + d-'0')
1112
1113 #define ag_rp_124(c) (c)
1114
1115 #define ag_rp_125(scd) (display_queries(scd))
1116
1117 #define ag_rp_126() (reset(qs), new screen_descriptor)
1118
1119 #define ag_rp_127(scd) (scd->title = formula(), scd)
1120
1121 #define ag_rp_128(scd, c) (scd->color = (char) c, scd)
1122
1123 #define ag_rp_129(scd, c) (scd->entry_color = (char) c, scd)
1124
1125 #define ag_rp_130(scd, c) (scd->highlight_color = (char) c, scd)
1126
1127 #define ag_rp_131(scd, w, h) (scd->width = (unsigned)w, scd->height = (unsigned) h, scd)
1128
1129 #define ag_rp_132(scd, px, py) (scd->pos.x = (unsigned) px,scd->pos.y = (unsigned) py, scd)
1130
1131 #define ag_rp_133(scd, q) (qs << *q, delete q, scd)
1132
1133 #define ag_rp_134(scd, q) (qs << *q, delete q, scd)
1134
1135 #define ag_rp_135(fg, bg) (COLOR((unsigned)fg,(unsigned)bg))
1136
1137 #define ag_rp_136() (clear(new query_item))
1138
1139 #define ag_rp_137(q) (q->id = sd << (sa--).top(), q)
1140
1141 #define ag_rp_138(q) (q->value = formula(), q)
1142
1143 #define ag_rp_139(q) (q->prompt = formula(), q)
1144
1145 #define ag_rp_140(q) (q->explanation = formula(),q)
1146
1147 #define ag_rp_141() (clear(new query_item))
1148
1149 #define ag_rp_142(q) (q->prompt = formula(), q)
1150
1151 #define ag_rp_143(q) (q->explanation = formula(),q)
1152
1153 #define ag_rp_144(q) (q->action = copy_action(), q)
1154
1155 #define ag_rp_145() (reset(is) << (sd << (sa--).top()))
1156
1157 #define ag_rp_146() (is << (sd << (sa--).top()))
1158
1159 #define ag_rp_147() (sa << '[')
1160
1161 #define ag_rp_148() (concat(sa) << ']')
1162
1163
1164 #define READ_COUNTS
1165 #define WRITE_COUNTS
1166 #undef V
1167 #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
1168 #undef VS
1169 #define VS(i) (PCB).vs[(PCB).ssx + i]
1170
1171 #ifndef GET_CONTEXT
1172 #define GET_CONTEXT CONTEXT = (PCB).input_context
1173 #endif
1174
1175 typedef enum {
1176 ag_action_1,
1177 ag_action_2,
1178 ag_action_3,
1179 ag_action_4,
1180 ag_action_5,
1181 ag_action_6,
1182 ag_action_7,
1183 ag_action_8,
1184 ag_action_9,
1185 ag_action_10,
1186 ag_action_11,
1187 ag_action_12
1188 } ag_parser_action;
1189
1190
1191 #ifndef NULL_VALUE_INITIALIZER
1192 #define NULL_VALUE_INITIALIZER = { 0 }
1193 #endif
1194
1195 static dsl_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
1196
1197 static const unsigned char far ag_rpx[] = {
1198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1199 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 6, 0, 7, 8, 9, 0, 10,
1200 0, 11, 0, 0, 12, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 16, 0, 17,
1201 18, 19, 0, 20, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
1202 0, 0, 0, 0, 0, 34, 35, 36, 37, 0, 38, 0, 0, 39, 40, 41, 42, 43,
1203 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
1204 0, 51, 52, 53, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57,
1205 58, 59, 60, 61, 0, 0, 62, 63, 64, 65, 66, 0, 0, 67, 68, 69, 70, 0,
1206 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 78, 79, 80, 0, 81,
1207 82, 83, 84, 85, 86, 87, 88, 0, 89, 90, 0, 91, 92, 0, 93, 94, 95, 96,
1208 0, 97, 98, 99,100,101,102,103,104, 0,105,106, 0,107, 0,108, 0,109,
1209 110,111, 0,112,113,114,115, 0, 0, 0, 0, 0, 0,116,117,118,119,120,
1210 121,122,123,124, 0, 0,125,126, 0,127,128,129,130,131,132,133,134,135,
1211 136, 0,137,138,139,140,141, 0,142,143,144,145,146, 0, 0, 0,147,148
1212 };
1213
1214 static const unsigned char far ag_key_itt[] = {
1215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1217 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1218 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
1219 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1220 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1226 0
1227 };
1228
1229 static const unsigned short far ag_key_pt[] = {
1230 0,213, 0,216, 0,220, 0,224, 0,222, 0,221, 0,226, 0,227,
1231 0,228, 0,164, 0,165, 0,250, 0,251, 0,252, 0,253, 0,255,
1232 0,256, 0,257, 0,258, 0,259, 0,260, 0,261, 0,262, 0,263,
1233 0
1234 };
1235
1236 static const unsigned char far ag_key_ch[] = {
1237 0, 42, 47,255, 47, 97,105,115,255, 42, 47,255, 42, 47,255, 88,120,255,
1238 60, 61,255, 61, 62,255,101,111,255,108,110,120,255,105,111,255,116,255,
1239 102,110,255, 99,105,116,255, 33, 38, 46, 47, 48, 60, 61, 62, 97, 98, 99,
1240 100,101,102,104,105,108,112,115,116,118,119,124,255, 47, 97,105,115,255,
1241 47,255, 42, 47,255,110,120,255,105,111,255,102,110,255, 99,105,116,255,
1242 47, 97, 98, 99,100,101,102,104,105,108,112,115,116,118,119,255, 42, 47,
1243 255,108,110,120,255,105,111,255,102,110,255, 99,105,116,255, 47, 97, 98,
1244 99,100,101,102,104,105,108,112,115,116,118,119,255,102,110,255, 99,116,
1245 255, 47, 97,102,105,115,119,255, 42, 47,255, 60, 61,255, 61, 62,255, 33,
1246 38, 46, 47, 60, 61, 62,124,255,102,110,255, 99,116,255, 97,102,105,115,
1247 119,255, 42, 47,255, 88,120,255, 47, 48,255, 88,120,255, 48,255, 47,255,
1248 34, 39, 63, 92, 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255,
1249 60, 61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98,
1250 99,100,101,102,104,105,108,115,116,124,255, 42, 47,255, 47, 62,100,255,
1251 42, 47,255, 47, 62,255, 47, 62,255, 47, 98, 99,101,102,104,108,115,116,
1252 255, 62,255, 47,119,255, 47,101,255, 88,120,255, 47, 48,255,105,116,255,
1253 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,
1254 255, 42, 47,255, 60, 61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60,
1255 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,255, 42, 47,255, 60,
1256 61,255, 61, 62,255,105,116,255, 33, 38, 46, 47, 60, 61, 62,104,105,108,
1257 115,116,124,255, 42, 47,255, 47,255, 60, 61,255, 61, 62,255,105,116,255,
1258 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,101,102,104,105,108,115,116,124,
1259 255, 33, 60, 61, 62,255,105,116,255, 33, 38, 46, 47, 61, 97, 98, 99,101,
1260 102,104,105,108,115,116,124,255,105,116,255, 38, 46, 47, 97, 98, 99,101,
1261 102,104,105,108,115,116,124,255,105,116,255, 46, 47, 97, 98, 99,101,102,
1262 104,105,108,115,116,124,255, 42, 47,255, 60, 61,255, 61, 62,255,108,110,
1263 255,105,116,255, 33, 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,
1264 105,108,115,116,119,124,255, 47,101,112,255, 47,100,101,112,118,255, 47,
1265 99,255, 99,255,105,255, 47, 62,100,255,102,110,255, 99,116,255, 47, 97,
1266 101,102,105,115,119,255,101,255, 42, 47,255, 47,105,255, 47,105,255, 60,
1267 62,255,100,255,105,255, 46,255, 42, 47,255, 61, 62,255,105,116,255, 33,
1268 38, 46, 47, 60, 61, 62, 97, 98, 99,100,101,102,104,105,108,115,116,124,
1269 255
1270 };
1271
1272 static const unsigned char far ag_key_act[] = {
1273 0,0,0,4,2,7,7,7,4,3,3,4,0,0,4,5,5,4,0,0,4,0,0,4,7,5,4,7,7,7,4,7,7,4,5,
1274 4,5,6,4,7,7,7,4,3,3,3,2,2,2,3,2,7,7,7,2,2,2,7,2,7,7,2,7,7,7,3,4,3,7,7,
1275 7,4,3,4,0,0,4,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,
1276 4,0,0,4,7,7,7,4,7,7,4,5,7,4,7,7,7,4,2,7,7,7,7,2,2,7,2,7,7,2,7,7,7,4,5,
1277 7,4,7,7,4,3,7,7,2,2,7,4,0,0,4,0,0,4,0,0,4,3,3,3,2,2,3,2,3,4,5,7,4,7,7,
1278 4,7,7,2,2,7,4,0,0,4,5,5,4,2,2,4,5,5,4,2,4,3,4,0,0,0,0,0,0,0,0,0,0,0,0,
1279 4,2,4,0,0,4,0,0,4,0,0,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,7,7,7,7,7,2,7,3,4,
1280 0,0,4,2,3,7,4,0,0,4,2,3,4,3,3,4,3,7,7,7,7,7,7,7,7,4,3,4,3,7,4,3,7,4,5,
1281 5,4,3,2,4,7,7,4,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,0,0,
1282 4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,7,7,7,7,2,7,3,4,0,0,4,0,0,4,0,0,4,7,7,4,
1283 3,3,3,2,2,3,2,7,7,7,2,7,3,4,0,0,4,2,4,0,0,4,0,0,4,7,7,4,3,3,3,3,2,3,2,
1284 7,7,7,7,7,7,7,7,2,7,3,4,3,3,3,3,4,7,7,4,3,3,3,3,3,7,7,7,7,7,7,7,7,2,7,
1285 3,4,7,7,4,3,3,3,7,7,7,7,7,7,7,7,2,7,3,4,7,7,4,3,3,7,7,7,7,7,7,7,7,2,7,
1286 3,4,0,0,4,0,0,4,0,0,4,7,7,4,7,7,4,3,3,3,2,2,3,2,7,7,7,7,2,7,7,7,7,2,7,
1287 7,3,4,3,7,7,4,3,7,7,7,7,4,3,7,4,7,4,7,4,3,3,7,4,5,7,4,7,7,4,3,7,7,7,2,
1288 2,7,4,7,4,0,0,4,2,7,4,3,7,4,3,3,4,7,4,7,4,3,4,0,0,4,0,0,4,7,7,4,3,3,3,
1289 2,3,3,2,7,7,7,7,7,7,7,7,7,2,7,3,4
1290 };
1291
1292 static const unsigned short far ag_key_parm[] = {
1293 0, 14, 17, 0, 0, 12, 14, 16, 0, 13, 14, 0, 14, 17, 0, 20, 18, 0,
1294 239,237, 0,238,212, 0, 40, 10, 0, 0, 26, 44, 0, 36, 6, 0, 14, 0,
1295 2, 8, 0, 22, 30, 16, 0,236,232,249, 0, 0, 0,235, 0, 12, 46, 34,
1296 0, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4,231, 0, 17, 12, 14, 16, 0,
1297 14, 0, 14, 17, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0,
1298 0, 12, 46, 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 14, 17,
1299 0, 0, 26, 44, 0, 36, 6, 0, 2, 14, 0, 22, 30, 16, 0, 0, 12, 46,
1300 34, 40, 0, 0, 28, 0, 32, 42, 0, 24, 38, 4, 0, 2, 14, 0, 22, 16,
1301 0, 17, 12, 6, 0, 0, 4, 0, 14, 17, 0,239,237, 0,238,212, 0,236,
1302 232,249, 0, 0,235, 0,231, 0, 2, 14, 0, 22, 16, 0, 12, 6, 0, 0,
1303 4, 0, 14, 17, 0, 20, 18, 0, 0, 0, 0, 20, 18, 0, 0, 0, 17, 0,
1304 69, 68, 67, 66, 59, 60, 61, 62, 63, 64, 65, 77, 0, 0, 0, 14, 17, 0,
1305 239,237, 0,238,212, 0, 30, 16, 0,236,232,249, 0, 0,235, 0, 12, 46,
1306 34, 10, 26, 36, 28, 14, 32, 0, 24,231, 0, 14, 17, 0, 0,212, 10, 0,
1307 14, 17, 0, 0,212, 0, 17,212, 0, 17, 46, 34, 26, 36, 28, 32, 30, 24,
1308 0,212, 0, 17, 4, 0, 17, 0, 0, 20, 18, 0, 14, 0, 0, 30, 16, 0,
1309 236,232,249, 17,237,235,238, 12, 46, 34, 26, 36, 28, 14, 32, 0, 24,231,
1310 0, 14, 17, 0,239,237, 0,238,212, 0, 30, 16, 0,236,232,249, 0, 0,
1311 235, 0, 12, 46, 34, 26, 36, 28, 14, 32, 0, 24,231, 0, 14, 17, 0,239,
1312 237, 0,238,212, 0, 30, 16, 0,236,232,249, 0, 0,235, 0, 28, 14, 32,
1313 0, 24,231, 0, 14, 17, 0, 0, 0,239,237, 0,238,212, 0, 30, 16, 0,
1314 236,232,249, 17, 0,235, 0, 12, 46, 34, 26, 36, 28, 14, 32, 0, 24,231,
1315 0,236,237,235,238, 0, 30, 16, 0,236,232,249, 17,235, 12, 46, 34, 26,
1316 36, 28, 14, 32, 0, 24,231, 0, 30, 16, 0,232,249, 17, 12, 46, 34, 26,
1317 36, 28, 14, 32, 0, 24,231, 0, 30, 16, 0,249, 17, 12, 46, 34, 26, 36,
1318 28, 14, 32, 0, 24,231, 0, 14, 17, 0,239,237, 0,238,212, 0, 0, 26,
1319 0, 30, 16, 0,236,232,249, 0, 0,235, 0, 12, 46, 34, 10, 0, 36, 28,
1320 14, 32, 0, 24, 4,231, 0, 17, 44, 42, 0, 17, 40, 44, 42, 38, 0, 14,
1321 34, 0, 34, 0, 8, 0, 17,212, 10, 0, 2, 14, 0, 22, 16, 0, 17, 12,
1322 0, 6, 0, 0, 4, 0, 0, 0, 14, 17, 0, 0, 2, 0, 17, 2, 0,237,
1323 238, 0, 10, 0, 2, 0,249, 0, 14, 17, 0,238,212, 0, 30, 16, 0,236,
1324 232,249, 0,237,235, 0, 12, 46, 34, 10, 26, 36, 28, 14, 32, 0, 24,231,
1325 0
1326 };
1327
1328 static const unsigned short far ag_key_jmp[] = {
1329 0, 0, 0, 0, 1, 0, 6, 9, 0, 15, 17, 0, 0, 0, 0, 0, 0, 0,
1330 0, 0, 0, 0, 0, 0, 44, 0, 0, 50, 53, 57, 0, 67, 71, 0, 0, 0,
1331 0, 34, 0, 96,101,104, 0, 19, 21, 23, 12, 15, 18, 25, 21, 27, 33, 39,
1332 24, 27, 31, 73, 36, 82, 90, 39,109,114,122,127, 0,129,131,137,140, 0,
1333 146, 0, 0, 0, 0,172,176, 0,186,190, 0, 0,201, 0,217,222,225, 0,
1334 74,148,154,160,165, 77, 80,192, 83,203,211, 86,230,235,243, 0, 0, 0,
1335 0,272,275,279, 0,289,293, 0, 0,304, 0,320,325,328, 0,106,248,254,
1336 260,265,109,113,295,116,306,314,119,333,338,346, 0, 0,362, 0,364,369,
1337 0,351,353,359,139,142,374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,379,
1338 381,383,152,155,385,158,387, 0, 0,398, 0,400,405, 0,389,395,170,173,
1339 410, 0, 0, 0, 0, 0, 0, 0,182,185, 0, 0, 0, 0,191, 0,415, 0,
1340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0,
1341 0, 0, 0, 0, 0, 0,474,477, 0,417,419,421,213,216,423,219,425,431,
1342 437,442,444,449,454,463,466,222,482,487, 0, 0, 0, 0,245,489,491, 0,
1343 0, 0, 0,252,493, 0,495,497, 0,499,501,507,512,517,522,531,539,543,
1344 0,548, 0,550,552, 0,557,559, 0, 0, 0, 0,563,279, 0,626,629, 0,
1345 565,567,569,571,573,575,577,579,585,591,596,601,606,615,618,285,634,639,
1346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,696,699, 0,641,643,645,307,310,
1347 647,313,649,655,661,666,671,676,685,688,316,704,709, 0, 0, 0, 0, 0,
1348 0, 0, 0, 0, 0,739,742, 0,711,713,715,338,341,717,344,719,728,731,
1349 347,747,752, 0, 0, 0, 0,364, 0, 0, 0, 0, 0, 0, 0,811,814, 0,
1350 754,756,758,760,369,762,372,764,770,776,781,786,791,800,803,375,819,824,
1351 0,826,828,830,832, 0,891,894, 0,834,836,838,840,842,844,850,856,861,
1352 866,871,880,883,402,899,904, 0,959,962, 0,906,908,910,912,918,924,929,
1353 934,939,948,951,422,967,972, 0,1025,1028, 0,974,976,978,984,990,995,
1354 1000,1005,1014,1017,440,1033,1038, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1355 0,1067,1070, 0,1099,1102, 0,1040,1042,1044,457,460,1046,463,1048,1054,
1356 1060,1065,466,1074,1079,1088,1091,469,1107,1112,1117, 0,1119,1121,1132,
1357 0,1138,1140,1147,1158,1164, 0,1172,1174, 0,1179, 0,1184, 0,1186,
1358 1188,1190, 0, 0,1207, 0,1209,1214, 0,1192,1194,1200,1204,514,517,1219,
1359 0,1224, 0, 0, 0, 0,530,1228, 0,1230,1232, 0,1234,1236, 0,1238,
1360 0,1240, 0,1242, 0, 0, 0, 0, 0, 0, 0,1303,1306, 0,1244,1246,
1361 1248,548,1250,1252,551,1254,1260,1266,1271,1273,1278,1283,1292,1295,554,
1362 1311,1316, 0
1363 };
1364
1365 static const unsigned short far ag_key_index[] = {
1366 4, 9, 43, 67, 0, 72, 72, 72, 90,123, 0, 0, 0,145, 67, 0, 0, 0,
1367 161, 0, 0, 72, 72, 0,145,176,188, 0,194, 72,196,211, 0,225,248, 72,
1368 72,255,258, 72, 0, 0, 72,258, 0,261, 0,258,258,258,271,258, 0,273,
1369 276,196, 0,282, 0,194,288, 67,211,319,319,350,367,319,319,282,282,282,
1370 282, 0, 0,194,194,194,194,194,378,378,397,378,397,288,405,425,425,425,
1371 425,443, 67, 72,188,188,188,188,196,472, 0, 0,211,211, 0, 72, 0,194,
1372 0,194, 72, 0,493, 72, 0,497, 72, 0, 72, 0,503,506,503,506, 72, 0,
1373 196, 72, 0,508,194, 0,194, 0,282, 0, 0, 0,510,258,258,258,520,528,
1374 145, 0, 0, 0, 0, 0, 4, 0, 0,397, 0,282,194,282,194,282,194,194,
1375 194,194,194,282,194,282, 0,282, 0, 0, 0,282, 0,282, 0,194,194,194,
1376 194,194,194,282,194,282,194,194,282,194,282,194,282,194, 0,211, 0, 0,
1377 0,258, 0,196, 72, 0, 72, 0,196, 0, 0, 72, 0, 72, 0,196,194,194,
1378 196,196,194, 0, 72, 0, 0,196,196,196,196,196,258, 0,258, 0,533,536,
1379 319, 0,194,288, 0,378,378,194,378,378,288,288,288,288,405,405,378,378,
1380 378,378,539,288,288,405,425,425,425,425, 0, 0, 0, 0, 0, 0, 0, 0,
1381 0, 0, 0, 0, 0, 0,196,196,542,194,258,258,544, 0,546,546,282,194,
1382 0,557,196,196,196,196,196,196,282,194,194,194, 0, 0, 72, 0,196, 0,
1383 282,194, 0,196, 0, 0
1384 };
1385
1386 static const unsigned char far ag_key_ends[] = {
1387 99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 47,0,
1388 42,0, 61,0, 38,0, 46,0, 61,0, 99,116,105,111,110,0,
1389 117,116,116,111,110,0, 111,108,111,114,0, 102,97,117,108,116,0,
1390 115,101,0, 116,114,121,0, 112,108,97,110,97,116,105,111,110,0,
1391 101,108,100,0, 114,0, 105,103,104,108,105,103,104,116,0,
1392 111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0,
1393 122,101,0, 114,105,110,103,0, 105,116,108,101,0,
1394 97,114,105,97,98,108,101,0, 104,105,108,101,0, 124,0, 47,0,
1395 99,116,105,111,110,0, 110,116,0, 116,114,105,110,103,0, 42,0,
1396 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0,
1397 101,102,97,117,108,116,0, 116,114,121,0,
1398 112,108,97,110,97,116,105,111,110,0, 101,108,100,0, 114,0,
1399 105,103,104,108,105,103,104,116,0, 116,0, 111,99,97,116,105,111,110,0,
1400 114,111,109,112,116,0, 114,101,101,110,0, 122,101,0,
1401 114,105,110,103,0, 105,116,108,101,0, 97,114,105,97,98,108,101,0,
1402 104,105,108,101,0, 99,116,105,111,110,0, 117,116,116,111,110,0,
1403 111,108,111,114,0, 101,102,97,117,108,116,0, 115,101,0,
1404 116,114,121,0, 112,108,97,110,97,116,105,111,110,0, 101,108,100,0,
1405 114,0, 105,103,104,108,105,103,104,116,0, 116,0,
1406 111,99,97,116,105,111,110,0, 114,111,109,112,116,0, 114,101,101,110,0,
1407 122,101,0, 114,105,110,103,0, 105,116,108,101,0,
1408 97,114,105,97,98,108,101,0, 104,105,108,101,0, 47,0,
1409 99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0,
1410 114,105,110,103,0, 104,105,108,101,0, 61,0, 38,0, 46,0, 61,0,
1411 124,0, 99,116,105,111,110,0, 111,114,0, 116,0, 114,101,101,110,0,
1412 114,105,110,103,0, 104,105,108,101,0, 47,0, 61,0, 38,0, 46,0,
1413 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0,
1414 111,0, 110,116,114,121,0, 105,101,108,100,0,
1415 105,103,104,108,105,103,104,116,0, 110,116,0,
1416 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1417 105,116,108,101,0, 124,0, 62,0, 111,0, 62,0, 47,0, 62,0, 47,0,
1418 117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0,
1419 105,101,108,100,0, 105,103,104,108,105,103,104,116,0,
1420 111,99,97,116,105,111,110,0, 105,122,101,0, 105,116,108,101,0,
1421 62,0, 47,0, 104,105,108,101,0, 47,0, 108,115,101,0, 42,0, 61,0,
1422 38,0, 46,0, 47,0, 61,0, 61,0, 61,0, 99,116,105,111,110,0,
1423 117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0,
1424 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0,
1425 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1426 105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0,
1427 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0,
1428 110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0,
1429 110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1430 105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0,
1431 105,103,104,108,105,103,104,116,0, 110,116,0,
1432 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1433 105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 47,0, 61,0,
1434 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0,
1435 110,116,114,121,0, 105,101,108,100,0, 105,103,104,108,105,103,104,116,0,
1436 110,116,0, 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1437 105,116,108,101,0, 124,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0,
1438 46,0, 47,0, 61,0, 99,116,105,111,110,0, 117,116,116,111,110,0,
1439 111,108,111,114,0, 110,116,114,121,0, 105,101,108,100,0,
1440 105,103,104,108,105,103,104,116,0, 110,116,0,
1441 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1442 105,116,108,101,0, 124,0, 38,0, 46,0, 47,0, 99,116,105,111,110,0,
1443 117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0,
1444 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0,
1445 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1446 105,116,108,101,0, 124,0, 46,0, 47,0, 99,116,105,111,110,0,
1447 117,116,116,111,110,0, 111,108,111,114,0, 110,116,114,121,0,
1448 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0,
1449 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1450 105,116,108,101,0, 124,0, 61,0, 38,0, 46,0, 61,0,
1451 99,116,105,111,110,0, 117,116,116,111,110,0, 111,108,111,114,0,
1452 111,0, 115,101,0, 116,114,121,0, 105,101,108,100,0,
1453 105,103,104,108,105,103,104,116,0, 110,116,0,
1454 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1455 105,116,108,101,0, 104,105,108,101,0, 124,0, 47,0,
1456 120,112,108,97,110,97,116,105,111,110,0, 114,111,109,112,116,0,
1457 47,0, 101,102,97,117,108,116,0, 120,112,108,97,110,97,116,105,111,110,0,
1458 114,111,109,112,116,0, 97,114,105,97,98,108,101,0, 42,0,
1459 111,108,111,114,0, 111,108,111,114,0, 110,0, 47,0, 62,0, 111,0,
1460 47,0, 99,116,105,111,110,0, 108,115,101,0, 111,114,0, 116,0,
1461 114,101,101,110,0, 114,105,110,103,0, 104,105,108,101,0,
1462 108,115,101,0, 102,0, 47,0, 102,0, 61,0, 61,0, 111,0, 102,0,
1463 46,0, 61,0, 38,0, 46,0, 61,0, 61,0, 99,116,105,111,110,0,
1464 117,116,116,111,110,0, 111,108,111,114,0, 111,0, 110,116,114,121,0,
1465 105,101,108,100,0, 105,103,104,108,105,103,104,116,0, 110,116,0,
1466 111,99,97,116,105,111,110,0, 122,101,0, 114,105,110,103,0,
1467 105,116,108,101,0, 124,0,
1468 };
1469
1470 #define AG_TCV(x) ag_tcv[(x)]
1471
1472 static const unsigned short far ag_tcv[] = {
1473 27,195,195,195,195,195,195,195,195, 10, 16, 10, 10, 10,195,195,195,195,
1474 195,195,195,195,195,195,195,195, 27,195,195,195,195,195, 10,246, 55,205,
1475 195,244,234,171,215,214,242,240,254,241,195,243,169,196,196,196,196,196,
1476 196,196,197,197,229,218,209,217,211,230,219,168,168,168,168,168,168,198,
1477 198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
1478 198,204, 75,203,233,198,195,168,168,168,168,168,168,198,198,198,198,198,
1479 198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,207,210,206,
1480 245,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1481 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1482 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1483 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1484 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1485 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1486 195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
1487 195,195,195,195
1488 };
1489
1490 #ifndef SYNTAX_ERROR
1491 #define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
1492 (PCB).error_message, (PCB).line, (PCB).column)
1493 #endif
1494
1495 #ifndef FIRST_LINE
1496 #define FIRST_LINE 1
1497 #endif
1498
1499 #ifndef FIRST_COLUMN
1500 #define FIRST_COLUMN 1
1501 #endif
1502
1503 #ifndef PARSER_STACK_OVERFLOW
1504 #define PARSER_STACK_OVERFLOW {fprintf(stderr, \
1505 "\nParser stack overflow, line %d, column %d\n",\
1506 (PCB).line, (PCB).column);}
1507 #endif
1508
1509 #ifndef REDUCTION_TOKEN_ERROR
1510 #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
1511 "\nReduction token error, line %d, column %d\n", \
1512 (PCB).line, (PCB).column);}
1513 #endif
1514
1515
1516 #ifndef INPUT_CODE
1517 #define INPUT_CODE(T) (T)
1518 #endif
1519
1520 typedef enum
1521 {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
1522 ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
1523
1524 static void ag_get_key_word(int ag_k) {
1525 int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1526 const unsigned char *ag_p;
1527 int ag_ch;
1528 while (1) {
1529 switch (ag_key_act[ag_k]) {
1530 case ag_cf_end_key: {
1531 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1532 do {
1533 if ((ag_ch = *sp++) == 0) {
1534 int ag_k1 = ag_key_parm[ag_k];
1535 int ag_k2 = ag_key_pt[ag_k1];
1536 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
1537 (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1 + 1];
1538 return;
1539 }
1540 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1541 goto ag_fail;
1542 }
1543 case ag_end_key: {
1544 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1545 do {
1546 if ((ag_ch = *sp++) == 0) {
1547 (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
1548 return;
1549 }
1550 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1551 }
1552 case ag_no_match_key:
1553 ag_fail:
1554 (PCB).la_ptr = (PCB).pointer + ag_save;
1555 return;
1556 case ag_cf_set_key: {
1557 int ag_k1 = ag_key_parm[ag_k];
1558 int ag_k2 = ag_key_pt[ag_k1];
1559 ag_k = ag_key_jmp[ag_k];
1560 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
1561 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1562 (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1];
1563 break;
1564 }
1565 case ag_set_key:
1566 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1567 (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
1568 case ag_jmp_key:
1569 ag_k = ag_key_jmp[ag_k];
1570 break;
1571 case ag_accept_key:
1572 (PCB).token_number = (dsl_token_type) ag_key_parm[ag_k];
1573 return;
1574 case ag_cf_accept_key: {
1575 int ag_k1 = ag_key_parm[ag_k];
1576 int ag_k2 = ag_key_pt[ag_k1];
1577 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
1578 (PCB).la_ptr = (PCB).pointer + ag_save;
1579 else (PCB).token_number = (dsl_token_type) ag_key_pt[ag_k1+1];
1580 return;
1581 }
1582 }
1583 ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
1584 ag_p = &ag_key_ch[ag_k];
1585 if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
1586 if (ag_ch > 255 || *ag_p != ag_ch) {
1587 (PCB).la_ptr = (PCB).pointer + ag_save;
1588 return;
1589 }
1590 ag_k = (int) (ag_p - ag_key_ch);
1591 }
1592 }
1593
1594
1595 #ifndef AG_NEWLINE
1596 #define AG_NEWLINE 10
1597 #endif
1598
1599 #ifndef AG_RETURN
1600 #define AG_RETURN 13
1601 #endif
1602
1603 #ifndef AG_FORMFEED
1604 #define AG_FORMFEED 12
1605 #endif
1606
1607 #ifndef AG_TABCHAR
1608 #define AG_TABCHAR 9
1609 #endif
1610
1611 static void ag_track(void) {
1612 int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
1613 while (ag_k--) {
1614 switch (*(PCB).pointer++) {
1615 case AG_NEWLINE:
1616 (PCB).column = 1, (PCB).line++;
1617 case AG_RETURN:
1618 case AG_FORMFEED:
1619 break;
1620 case AG_TABCHAR:
1621 (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
1622 break;
1623 default:
1624 (PCB).column++;
1625 }
1626 }
1627 }
1628
1629
1630 static void ag_prot(void) {
1631 int ag_k;
1632 ag_k = 128 - ++(PCB).btsx;
1633 if (ag_k <= (PCB).ssx) {
1634 (PCB).exit_flag = AG_STACK_ERROR_CODE;
1635 PARSER_STACK_OVERFLOW;
1636 return;
1637 }
1638 (PCB).bts[(PCB).btsx] = (PCB).sn;
1639 (PCB).bts[ag_k] = (PCB).ssx;
1640 (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
1641 (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
1642 (PCB).cs[ag_k] = (PCB).cs[(PCB).ssx];
1643 }
1644
1645 static void ag_undo(void) {
1646 if ((PCB).drt == -1) return;
1647 while ((PCB).btsx) {
1648 int ag_k = 128 - (PCB).btsx;
1649 (PCB).sn = (PCB).bts[(PCB).btsx--];
1650 (PCB).ssx = (PCB).bts[ag_k];
1651 (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
1652 (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
1653 (PCB).cs[(PCB).ssx] = (PCB).cs[ag_k];
1654 }
1655 (PCB).token_number = (dsl_token_type) (PCB).drt;
1656 (PCB).ssx = (PCB).dssx;
1657 (PCB).sn = (PCB).dsn;
1658 (PCB).drt = -1;
1659 }
1660
1661
1662
1663 static const int far ag_rtt[] = {
1664 29, 30, 31, 0,154,157,155,158, 0
1665 };
1666
1667 static const unsigned short far ag_tstt[] = {
1668 228,227,226,207,27,17,16,14,10,0,1,11,12,119,199,
1669 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1670 209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,14,13,10,0,
1671 11,12,
1672 14,10,0,1,11,12,
1673 228,227,226,207,27,17,16,0,7,21,22,23,24,25,26,43,116,117,118,200,
1674 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1675 209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,19,20,
1676 198,168,14,10,0,1,11,12,119,199,
1677 198,168,14,10,0,1,11,12,119,199,
1678 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
1679 168,75,14,10,0,1,11,12,119,199,
1680 263,262,261,260,259,258,257,256,255,254,253,252,251,250,246,245,244,243,242,
1681 241,240,234,233,230,229,228,227,226,224,220,219,218,217,216,215,211,210,
1682 209,207,206,205,198,197,196,195,171,169,168,75,55,17,16,14,10,0,1,11,12,
1683 119,199,
1684 263,262,261,260,259,258,257,256,255,254,253,252,251,250,246,245,244,243,242,
1685 241,240,234,233,230,229,228,227,226,224,220,219,218,217,216,215,213,211,
1686 210,209,207,206,205,198,197,196,195,171,169,168,75,55,27,17,16,14,10,0,
1687 1,11,12,119,199,
1688 198,168,0,9,223,
1689 198,168,0,9,223,
1690 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
1691 168,75,0,8,208,225,
1692 254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
1693 216,215,206,198,197,196,195,171,169,168,75,55,17,16,0,7,89,90,200,
1694 228,227,226,207,17,16,0,7,22,23,24,43,116,117,118,200,
1695 27,0,
1696 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1697 209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,10,0,
1698 16,0,
1699 254,249,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,219,
1700 218,217,215,214,212,211,210,209,207,206,205,204,198,197,196,169,168,27,
1701 17,16,14,10,0,1,11,12,119,121,199,
1702 217,0,105,
1703 217,0,105,
1704 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
1705 168,75,0,
1706 207,14,10,0,1,11,12,119,199,
1707 207,0,40,41,43,
1708 17,16,0,7,200,
1709 254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
1710 216,215,206,198,197,196,195,171,169,168,75,55,0,2,4,5,23,28,29,30,31,36,
1711 48,54,80,81,85,91,92,93,94,96,97,98,100,101,102,103,104,111,112,116,117,
1712 118,174,175,201,202,208,
1713 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1714 207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
1715 11,12,119,199,
1716 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1717 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1718 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
1719 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
1720 247,248,
1721 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
1722 168,75,14,10,0,1,11,12,208,
1723 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1724 207,206,205,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,37,40,41,
1725 42,43,44,48,54,84,86,87,105,109,200,201,202,208,
1726 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1727 209,207,206,205,204,203,198,197,196,195,171,169,168,77,75,69,68,67,66,
1728 65,64,63,62,61,60,59,55,10,0,56,58,70,71,72,73,74,
1729 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1730 209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,51,53,
1731 263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,239,238,
1732 237,236,235,234,233,232,231,230,229,228,227,226,221,219,218,217,215,214,
1733 212,211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,
1734 27,17,16,14,10,0,1,11,12,119,199,
1735 254,246,245,244,243,242,241,240,234,233,230,229,221,219,218,217,215,214,212,
1736 211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,17,16,
1737 14,10,0,1,11,12,119,199,
1738 215,14,10,0,1,11,12,119,199,
1739 207,14,10,0,1,11,12,119,199,
1740 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,212,211,
1741 210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,17,16,14,
1742 10,0,1,11,12,119,199,
1743 204,0,32,
1744 215,14,10,0,1,11,12,119,199,
1745 215,0,50,
1746 207,0,43,
1747 198,168,14,10,0,1,11,12,119,199,
1748 205,0,37,
1749 215,0,50,
1750 263,258,257,256,255,253,252,251,206,17,16,0,7,42,176,178,179,180,181,183,
1751 184,185,186,187,192,200,
1752 198,168,0,9,223,
1753 219,217,0,105,109,
1754 217,0,105,
1755 217,0,105,
1756 212,211,210,0,86,87,88,
1757 254,246,245,244,243,242,241,240,234,233,230,229,218,215,212,211,210,209,207,
1758 206,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,28,29,30,31,34,38,
1759 40,41,43,48,54,82,83,201,202,208,
1760 207,0,40,41,43,
1761 220,0,103,111,
1762 213,206,17,16,0,7,89,90,200,
1763 206,17,16,0,7,89,90,200,
1764 206,0,42,
1765 254,246,245,244,243,242,241,240,234,233,230,229,218,217,215,207,205,198,197,
1766 196,195,171,169,168,165,164,75,55,14,10,0,1,11,12,119,199,
1767 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1768 217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
1769 54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
1770 219,204,0,32,109,
1771 228,227,226,218,207,206,205,27,17,16,0,37,106,107,
1772 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
1773 209,207,206,205,204,203,198,197,196,195,169,168,77,75,69,68,67,66,65,64,
1774 63,62,61,60,59,55,10,0,58,70,71,72,73,74,172,
1775 197,196,169,0,
1776 196,169,0,
1777 197,196,169,168,0,79,
1778 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1779 207,206,205,198,197,196,195,171,169,168,75,55,17,16,14,10,0,1,11,12,119,
1780 199,
1781 263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
1782 235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
1783 207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
1784 263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
1785 235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
1786 207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
1787 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1788 1,11,12,119,199,
1789 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1790 1,11,12,119,199,
1791 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1792 1,11,12,119,199,
1793 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1794 1,11,12,119,199,
1795 215,0,50,156,
1796 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,153,157,158,202,223,
1797 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1798 9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
1799 161,162,163,166,202,223,247,248,
1800 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1801 9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
1802 161,162,163,166,202,223,247,248,
1803 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1804 9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
1805 161,162,163,166,202,223,247,248,
1806 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1807 9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
1808 161,162,163,166,202,223,247,248,
1809 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1810 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
1811 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
1812 247,248,
1813 244,243,242,0,146,147,149,
1814 241,240,0,143,144,
1815 219,204,0,32,109,
1816 239,212,0,88,141,
1817 238,237,236,235,211,209,205,0,37,84,87,135,136,138,139,
1818 238,237,211,209,0,84,87,138,139,
1819 236,235,0,135,136,
1820 234,0,133,
1821 233,0,131,
1822 210,0,86,
1823 232,0,128,
1824 231,230,0,123,126,
1825 228,227,226,218,207,206,27,17,16,0,106,107,
1826 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
1827 168,75,0,
1828 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1829 207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
1830 11,12,119,199,
1831 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1832 207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
1833 11,12,119,199,
1834 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1835 207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
1836 11,12,119,199,
1837 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,211,210,209,
1838 207,206,205,198,197,196,195,171,169,168,165,164,75,55,17,16,14,10,0,1,
1839 11,12,119,199,
1840 204,0,32,
1841 263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,239,238,
1842 237,236,235,234,233,232,231,230,229,228,227,226,221,220,219,218,217,215,
1843 214,213,212,211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,
1844 75,55,27,17,16,14,10,0,1,11,12,119,199,
1845 196,169,0,
1846 197,196,169,168,0,78,79,
1847 196,169,0,
1848 196,169,0,
1849 215,0,48,
1850 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1851 171,169,168,75,55,14,10,0,1,11,12,119,199,
1852 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1853 171,169,168,75,55,0,33,
1854 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1855 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
1856 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
1857 247,248,
1858 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
1859 169,168,75,55,0,2,4,5,28,29,30,31,48,54,201,202,208,
1860 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1861 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
1862 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
1863 247,248,
1864 207,14,10,0,1,11,12,119,199,
1865 207,0,43,
1866 262,261,207,206,17,16,0,7,40,41,42,43,190,191,200,
1867 207,14,10,0,1,11,12,119,199,
1868 207,0,43,
1869 262,261,260,259,206,17,16,0,7,42,188,189,190,191,200,
1870 217,14,10,0,1,11,12,119,199,
1871 217,0,105,
1872 217,14,10,0,1,11,12,119,199,
1873 217,0,105,
1874 257,14,10,0,1,11,12,119,199,
1875 257,0,178,186,
1876 257,14,10,0,1,11,12,119,199,
1877 257,0,178,186,
1878 217,14,10,0,1,11,12,119,199,
1879 217,0,105,
1880 17,16,0,7,200,
1881 217,14,10,0,1,11,12,119,199,
1882 217,0,105,
1883 222,0,113,
1884 217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
1885 54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
1886 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1887 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1888 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
1889 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
1890 247,248,
1891 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1892 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
1893 254,246,245,244,243,242,241,240,234,233,230,229,218,217,215,207,205,198,197,
1894 196,195,171,169,168,165,164,75,55,14,10,0,1,11,12,119,199,
1895 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1896 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
1897 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1898 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
1899 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
1900 169,168,75,55,0,2,4,5,28,29,30,31,36,48,54,81,201,202,208,
1901 204,0,32,
1902 205,0,37,
1903 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1904 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
1905 212,211,210,209,206,17,16,0,84,
1906 254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
1907 216,215,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,23,28,29,30,
1908 31,36,48,54,80,81,85,94,96,97,98,100,101,102,103,104,111,112,116,117,
1909 118,174,175,200,201,202,208,
1910 213,0,95,
1911 254,250,246,245,244,243,242,241,240,234,233,230,229,228,227,226,224,220,218,
1912 216,215,198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,7,23,28,29,30,
1913 31,36,48,54,80,81,85,94,96,97,98,100,101,102,103,104,111,112,116,117,
1914 118,174,175,200,201,202,208,
1915 214,205,0,37,49,
1916 219,204,0,32,109,
1917 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1918 171,169,168,75,55,0,160,
1919 215,0,50,
1920 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,152,153,157,158,202,223,
1921 228,227,226,207,206,27,17,16,14,10,0,1,11,12,119,199,
1922 171,0,
1923 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
1924 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
1925 238,237,236,235,214,211,209,205,0,37,49,84,87,135,136,138,139,
1926 214,0,49,
1927 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1928 1,11,12,119,199,
1929 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1930 9,37,40,41,43,50,54,105,110,143,144,145,148,150,151,152,153,154,155,157,
1931 158,161,162,163,166,202,223,247,248,
1932 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1933 1,11,12,119,199,
1934 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1935 9,37,40,41,43,50,54,105,110,143,144,145,148,150,151,152,153,154,155,157,
1936 158,161,162,163,166,202,223,247,248,
1937 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1938 1,11,12,119,199,
1939 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1940 9,37,40,41,43,50,54,105,110,143,144,145,150,151,152,153,154,155,157,158,
1941 161,162,163,166,202,223,247,248,
1942 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1943 9,37,40,41,43,50,54,105,110,142,143,144,145,150,151,152,153,154,155,157,
1944 158,161,162,163,166,202,223,247,248,
1945 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1946 9,37,40,41,43,50,54,105,110,142,143,144,145,150,151,152,153,154,155,157,
1947 158,161,162,163,166,202,223,247,248,
1948 217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,9,37,40,41,43,50,
1949 54,105,110,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
1950 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1951 9,37,40,41,43,50,54,105,110,140,142,143,144,145,150,151,152,153,154,155,
1952 157,158,161,162,163,166,202,223,247,248,
1953 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1954 1,11,12,119,199,
1955 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1956 9,37,40,41,43,50,54,105,110,140,142,143,144,145,150,151,152,153,154,155,
1957 157,158,161,162,163,166,202,223,247,248,
1958 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1959 1,11,12,119,199,
1960 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1961 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1962 1,11,12,119,199,
1963 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1964 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1965 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1966 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1967 1,11,12,119,199,
1968 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1969 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1970 1,11,12,119,199,
1971 217,215,207,198,168,55,0,4,9,40,41,43,50,54,105,108,152,153,157,158,202,223,
1972 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1973 9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
1974 155,157,158,161,162,163,166,202,223,247,248,
1975 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1976 9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
1977 155,157,158,161,162,163,166,202,223,247,248,
1978 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1979 9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
1980 155,157,158,161,162,163,166,202,223,247,248,
1981 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1982 9,37,40,41,43,50,54,105,110,137,140,142,143,144,145,150,151,152,153,154,
1983 155,157,158,161,162,163,166,202,223,247,248,
1984 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1985 9,37,40,41,43,50,54,105,108,110,134,137,140,142,143,144,145,150,151,152,
1986 153,154,155,157,158,161,162,163,166,202,223,247,248,
1987 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1988 9,37,40,41,43,50,54,105,108,110,134,137,140,142,143,144,145,150,151,152,
1989 153,154,155,157,158,161,162,163,166,202,223,247,248,
1990 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1991 1,11,12,119,199,
1992 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1993 9,37,40,41,43,50,54,105,108,110,132,134,137,140,142,143,144,145,150,151,
1994 152,153,154,155,157,158,161,162,163,166,202,223,247,248,
1995 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
1996 1,11,12,119,199,
1997 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
1998 9,37,40,41,43,50,54,105,108,110,130,132,134,137,140,142,143,144,145,150,
1999 151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
2000 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2001 9,37,40,41,43,50,54,105,108,110,129,130,132,134,137,140,142,143,144,145,
2002 150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
2003 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2004 1,11,12,119,199,
2005 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2006 9,37,40,41,43,50,54,105,108,110,127,129,130,132,134,137,140,142,143,144,
2007 145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
2008 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2009 1,11,12,119,199,
2010 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2011 9,37,40,41,43,50,54,105,108,110,125,127,129,130,132,134,137,140,142,143,
2012 144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,247,248,
2013 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2014 1,11,12,119,199,
2015 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2016 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2017 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2018 247,248,
2019 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2020 171,169,168,75,55,0,2,4,5,40,41,43,44,46,47,48,54,201,202,208,
2021 197,196,169,168,0,79,
2022 254,246,245,244,243,242,241,240,234,233,230,229,219,218,217,215,214,211,210,
2023 209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,16,10,0,51,53,
2024 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2025 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
2026 214,0,49,
2027 204,0,32,
2028 214,0,49,
2029 17,16,0,7,200,
2030 217,14,10,0,1,11,12,119,199,
2031 217,0,105,
2032 217,14,10,0,1,11,12,119,199,
2033 217,0,105,
2034 17,16,0,7,200,
2035 217,0,105,
2036 217,0,105,
2037 217,14,10,0,1,11,12,119,199,
2038 217,0,105,
2039 217,14,10,0,1,11,12,119,199,
2040 217,0,105,
2041 17,16,0,7,200,
2042 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2043 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2044 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2045 247,248,
2046 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2047 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2048 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2049 247,248,
2050 17,16,0,7,200,
2051 17,16,0,7,200,
2052 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2053 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2054 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2055 247,248,
2056 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2057 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2058 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2059 171,169,168,75,55,14,10,0,1,11,12,119,199,
2060 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2061 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
2062 217,0,105,
2063 218,206,205,17,16,0,37,106,107,
2064 218,206,17,16,0,106,107,
2065 205,0,37,
2066 205,0,37,
2067 205,0,37,
2068 254,246,245,244,243,242,241,240,234,233,230,229,218,215,212,211,210,207,206,
2069 198,197,196,195,171,169,168,75,55,17,16,0,2,4,5,28,29,30,31,34,38,40,41,
2070 43,48,54,82,83,201,202,208,
2071 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2072 171,169,168,75,55,0,2,4,5,28,29,30,31,38,40,41,43,48,54,201,202,208,
2073 205,0,37,
2074 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2075 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
2076 216,207,17,16,14,10,0,1,11,12,119,199,
2077 216,207,17,16,0,7,40,41,43,89,90,200,
2078 263,258,257,256,255,254,253,252,251,249,244,243,242,241,240,239,238,237,236,
2079 235,234,233,232,231,230,229,228,227,226,219,218,217,214,212,211,210,209,
2080 207,206,205,204,27,17,16,14,10,0,1,11,12,119,199,
2081 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2082 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
2083 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2084 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2085 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2086 247,248,
2087 219,204,0,32,109,
2088 214,205,0,37,49,
2089 244,243,242,0,146,147,149,
2090 244,243,242,0,146,147,149,
2091 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2092 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2093 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2094 247,248,
2095 241,240,0,143,144,
2096 241,240,0,143,144,
2097 205,0,37,
2098 205,0,37,
2099 205,0,37,
2100 205,0,37,
2101 205,0,37,
2102 205,0,37,
2103 239,212,0,88,141,
2104 239,212,0,88,141,
2105 239,212,0,88,141,
2106 239,212,0,88,141,
2107 238,237,211,209,205,0,37,84,87,138,139,
2108 238,237,211,209,0,84,87,138,139,
2109 238,237,211,209,0,84,87,138,139,
2110 236,235,0,135,136,
2111 234,0,133,
2112 233,0,131,
2113 210,0,86,
2114 232,0,128,
2115 229,0,124,
2116 204,0,32,
2117 205,203,0,35,37,
2118 205,203,0,35,37,
2119 207,0,40,41,43,
2120 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2121 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2122 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2123 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2124 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2125 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2126 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2127 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2128 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2129 169,168,75,55,0,2,4,5,48,54,177,193,201,202,208,
2130 254,246,245,244,243,242,241,240,234,233,230,229,218,198,197,196,195,171,169,
2131 168,75,0,2,208,
2132 254,0,182,
2133 254,0,182,
2134 254,0,182,
2135 204,0,32,
2136 205,17,16,0,7,37,200,
2137 221,207,205,0,37,114,115,
2138 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2139 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2140 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2141 247,248,
2142 212,211,210,206,17,16,0,
2143 212,211,210,206,205,17,16,0,37,
2144 216,0,97,98,
2145 205,203,0,35,37,
2146 249,0,159,
2147 249,214,0,49,159,
2148 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2149 1,11,12,119,199,
2150 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2151 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2152 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2153 247,248,
2154 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2155 171,169,168,75,55,0,2,4,5,40,41,43,44,47,48,54,201,202,208,
2156 263,258,257,256,255,254,253,252,251,249,246,245,244,243,242,241,240,238,237,
2157 236,235,234,233,232,231,230,229,228,227,226,221,219,218,217,215,214,212,
2158 211,210,209,207,206,205,204,203,198,197,196,195,171,169,168,75,55,27,17,
2159 16,14,10,0,1,11,12,119,199,
2160 205,17,16,0,7,37,200,
2161 205,17,16,0,7,37,200,
2162 205,17,16,0,7,37,200,
2163 205,17,16,0,7,37,200,
2164 205,17,16,0,7,37,200,
2165 17,16,0,7,200,
2166 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2167 1,11,12,119,199,
2168 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2169 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2170 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2171 247,248,
2172 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2173 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2174 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2175 247,248,
2176 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2177 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2178 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2179 247,248,
2180 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2181 171,169,168,75,55,0,194,
2182 254,246,245,244,243,242,241,240,234,233,230,229,218,215,198,197,196,195,171,
2183 169,168,75,55,0,2,4,5,48,54,193,201,202,208,
2184 207,14,10,0,1,11,12,119,199,
2185 207,0,40,41,43,
2186 218,206,17,16,0,106,107,
2187 207,0,40,41,43,
2188 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,14,10,0,
2189 1,11,12,119,199,
2190 246,245,241,240,217,215,207,205,198,197,196,171,169,168,165,164,55,0,3,4,6,
2191 9,37,40,41,43,50,54,99,105,108,110,122,125,127,129,130,132,134,137,140,
2192 142,143,144,145,150,151,152,153,154,155,157,158,161,162,163,166,202,223,
2193 247,248,
2194 254,246,245,244,243,242,241,240,234,233,230,229,218,215,207,198,197,196,195,
2195 171,169,168,75,55,0,2,4,5,28,29,30,31,34,38,40,41,43,48,54,201,202,208,
2196 204,0,32,
2197 214,0,49,
2198 205,203,0,35,37,
2199
2200 };
2201
2202
2203 static unsigned const char far ag_astt[6843] = {
2204 8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
2205 9,9,9,9,9,9,9,9,9,9,9,9,9,1,3,9,7,3,1,1,9,5,3,3,1,1,1,1,1,8,1,1,7,1,0,1,1,
2206 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2207 1,1,1,1,1,8,1,7,1,1,5,5,1,1,7,1,1,1,1,3,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,
2208 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2209 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2210 1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2211 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,7,1,
2212 1,2,2,7,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,8,8,8,8,8,8,
2213 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,8,8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1,
2214 1,5,3,3,3,3,1,1,1,1,1,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
2215 9,9,9,9,9,9,9,9,9,9,9,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2216 5,5,5,5,5,5,5,5,10,10,10,10,10,5,5,5,1,1,7,1,1,1,1,2,3,1,7,1,1,7,1,10,10,
2217 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,5,1,1,7,1,1,1,1,
2218 3,1,7,2,1,2,1,1,5,3,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,8,2,2,2,2,
2219 2,2,2,2,2,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2220 1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2221 5,5,5,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,
2222 1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2223 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2224 2,2,2,2,1,9,5,3,3,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,2,2,2,2,
2225 2,2,2,2,2,1,1,7,2,2,2,3,3,2,1,3,2,1,1,1,3,3,3,3,3,1,1,1,1,2,2,2,2,2,2,2,2,
2226 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,
2227 3,2,7,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,3,2,2,2,2,2,2,2,2,2,2,
2228 2,2,2,2,2,2,2,2,2,7,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2229 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,
2230 1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2231 5,5,5,5,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,5,1,1,7,1,1,1,1,3,10,10,10,10,
2232 10,10,10,10,10,10,10,10,5,10,5,5,5,5,5,5,5,5,5,5,5,5,10,10,10,10,10,10,10,
2233 10,5,5,5,1,1,7,1,1,1,1,3,1,5,1,5,1,1,7,1,1,1,1,3,1,7,1,1,7,2,5,5,1,1,7,1,1,
2234 1,1,3,1,4,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2235 7,1,1,1,1,4,1,1,1,4,1,1,4,1,1,1,1,7,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,
2236 5,8,1,5,2,2,2,2,2,2,2,2,2,5,5,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,7,
2237 2,1,2,1,5,3,1,8,5,1,1,7,1,1,1,1,5,1,1,7,1,1,3,1,1,7,3,5,5,5,5,5,5,5,5,5,5,
2238 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,
2239 2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,
2240 1,1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,5,1,1,5,5,5,1,5,5,1,5,5,5,7,1,2,2,1,1,1,1,
2241 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
2242 2,2,2,1,1,7,1,1,1,1,1,1,1,10,10,10,5,10,10,5,2,2,2,2,5,2,5,5,5,5,5,5,5,5,5,
2243 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,
2244 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2245 5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2246 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,
2247 5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
2248 3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,
2249 5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,7,1,2,1,1,1,2,2,2,7,2,2,2,1,2,1,1,1,2,2,2,1,
2250 1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,
2251 1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,
2252 1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,
2253 2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,
2254 1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,
2255 2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,
2256 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,
2257 1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,
2258 1,1,1,5,1,1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,1,5,1,1,5,5,5,1,5,5,5,
2259 5,5,7,2,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,
2260 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
2261 7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2262 5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2263 5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2264 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,5,1,5,5,5,5,5,5,5,5,5,5,
2265 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2266 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,7,2,2,2,2,7,1,1,2,2,5,2,2,5,
2267 2,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,4,4,
2268 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,1,2,2,2,1,2,
2269 2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2270 1,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,1,
2271 1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,
2272 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,1,1,
2273 7,1,1,1,1,3,1,7,2,1,1,1,1,1,1,7,3,1,1,1,2,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,
2274 1,1,1,1,1,1,7,3,1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,
2275 1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,7,1,1,5,1,1,7,1,1,1,1,3,1,
2276 7,1,1,1,7,2,1,5,1,1,7,1,1,1,1,3,1,7,1,1,7,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,
2277 1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,2,2,2,7,1,2,2,1,2,
2278 1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,
2279 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,
2280 2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,
2281 1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,
2282 3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,
2283 2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,
2284 2,1,1,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,1,
2285 1,1,2,2,2,1,1,1,1,1,1,1,1,5,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,
2286 2,2,2,2,2,5,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,4,4,4,1,4,4,4,7,1,2,1,2,2,2,
2287 2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,5,2,1,1,3,3,1,1,1,1,
2288 1,1,1,3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,1,2,2,2,2,2,2,
2289 2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,5,2,1,1,3,3,1,1,1,1,1,1,1,
2290 3,1,1,3,2,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,3,1,1,7,1,1,4,4,4,4,
2291 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,7,1,1,1,1,2,2,2,7,1,2,2,1,2,
2292 1,1,1,1,1,2,2,1,1,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,7,2,2,2,2,2,2,2,2,2,2,
2293 2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
2294 1,1,1,7,1,3,1,1,1,1,1,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
2295 1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,2,
2296 1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,
2297 1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,
2298 2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,
2299 1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,
2300 2,1,1,1,1,2,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,
2301 2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
2302 1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
2303 1,2,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,2,1,1,2,1,2,
2304 2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,
2305 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2306 5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,
2307 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,
2308 5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,5,5,
2309 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,2,1,1,
2310 1,1,1,1,2,2,1,1,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,7,
2311 1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,
2312 1,1,3,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,5,5,5,5,5,5,5,5,5,5,5,5,
2313 5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,2,2,2,7,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,1,
2314 1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
2315 1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,
2316 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,
2317 2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,
2318 1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,
2319 1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,
2320 2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,
2321 1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,
2322 1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
2323 7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,
2324 1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,
2325 5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,
2326 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,
2327 1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2328 1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,
2329 1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,
2330 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2331 5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,
2332 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,5,5,5,5,
2333 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,
2334 2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2335 1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,2,2,1,
2336 1,2,1,1,1,1,1,1,1,1,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,
2337 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,
2338 2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,7,1,1,4,1,1,7,2,1,1,7,2,1,
2339 5,1,1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,7,1,1,7,1,5,1,
2340 1,7,1,1,1,1,3,1,7,1,5,1,1,7,1,1,1,1,3,1,7,1,1,1,7,2,1,1,1,1,1,1,1,1,1,2,2,
2341 2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2342 1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,
2343 2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,
2344 1,1,1,7,2,1,1,1,7,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,
2345 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,
2346 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,
2347 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,
2348 2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,7,1,1,5,
2349 1,5,5,7,1,2,2,1,5,5,5,7,2,2,1,4,1,1,4,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2350 5,5,5,1,5,2,2,2,2,2,2,2,2,2,5,5,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,2,
2351 2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,2,2,2,1,2,1,1,
2352 1,1,1,1,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,7,2,1,1,1,2,2,
2353 2,1,1,2,1,2,1,1,1,1,1,5,5,5,5,1,1,7,1,1,1,1,3,8,1,1,1,7,1,2,1,2,1,1,1,5,5,
2354 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2355 5,5,5,5,5,1,1,7,1,1,1,1,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,
2356 7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,
2357 1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
2358 2,1,1,1,1,1,1,4,1,1,1,1,7,1,3,1,1,1,4,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,
2359 2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2360 1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,4,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,
2361 1,1,4,1,1,4,1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,4,1,1,1,1,1,1,1,7,1,1,1,1,
2362 1,1,1,1,1,4,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,4,1,1,1,4,1,1,4,1,1,4,1,1,4,1,1,
2363 7,1,1,5,1,1,1,7,3,1,1,1,7,2,1,1,7,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2364 2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2365 2,2,2,7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2366 7,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,
2367 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,
2368 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,7,1,1,7,1,1,7,
2369 1,1,4,1,1,1,1,7,2,1,1,1,8,1,7,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,
2370 1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,
2371 2,1,1,1,1,4,4,4,4,4,4,7,4,4,4,4,1,4,4,7,1,1,7,1,1,1,1,7,2,1,1,7,1,1,1,7,2,
2372 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,1,2,2,2,
2373 1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2374 1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,
2375 7,2,2,2,3,1,2,1,3,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
2376 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,
2377 1,1,1,1,3,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,2,1,1,1,1,1,7,
2378 2,1,1,1,1,7,2,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,
2379 1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
2380 1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,
2381 7,2,1,2,2,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,
2382 1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,2,1,
2383 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,4,4,4,4,4,4,
2384 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2385 2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,1,1,3,1,7,2,1,2,1,5,5,5,7,2,2,
2386 1,7,2,1,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,1,1,3,1,1,1,1,1,1,1,
2387 1,2,2,2,1,2,2,2,2,2,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2388 1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,
2389 2,2,2,2,7,2,1,1,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,4,1,1,7,2,1,1,7,2,1
2390 };
2391
2392
2393 static const unsigned short far ag_pstt[] = {
2394 3,3,3,3,3,3,3,1,2,0,2,2,1,2,3,
2395 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,3,5,
2396 1,6,1,
2397 1,138,461,138,138,1,
2398 5,6,7,8,15,4,9,3,14,0,14,14,14,14,15,13,12,11,10,9,
2399 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
2400 16,16,16,16,16,16,16,16,16,17,16,4,16,17,
2401 460,460,1,2,5,2,2,1,2,490,
2402 460,460,1,2,6,2,2,1,2,489,
2403 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2404 460,460,1,2,7,2,2,1,2,488,
2405 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2406 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2407 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,8,2,2,1,
2408 2,469,
2409 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2410 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2411 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,
2412 9,2,2,1,2,462,
2413 140,140,10,19,18,
2414 140,140,11,20,18,
2415 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,12,23,21,22,
2416 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,98,25,25,25,
2417 25,25,25,25,25,25,4,9,13,24,24,25,9,
2418 5,6,7,8,4,9,19,17,17,17,17,13,12,11,10,9,
2419 20,15,
2420 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,11,
2421 12,17,
2422 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2423 460,460,460,460,460,460,460,460,460,460,460,460,141,142,142,142,141,460,
2424 460,460,1,2,18,2,2,1,2,142,485,
2425 26,19,27,
2426 26,20,28,
2427 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,136,
2428 460,1,29,22,29,29,1,29,487,
2429 8,23,133,30,37,
2430 4,9,99,97,9,
2431 32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,56,32,32,32,32,
2432 32,32,32,32,57,25,128,38,38,55,38,48,47,49,43,32,31,55,51,50,55,54,56,
2433 55,54,52,44,55,55,55,53,53,40,46,12,11,10,45,41,34,33,37,
2434 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2435 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,26,
2436 2,2,1,2,479,
2437 26,57,8,140,140,57,27,60,193,203,30,37,58,31,59,61,60,60,201,202,33,18,
2438 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,28,185,82,186,193,
2439 74,203,30,37,79,31,92,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2440 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2441 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,1,138,461,
2442 138,138,1,93,
2443 32,32,32,32,32,32,32,32,32,32,32,32,95,32,26,51,96,94,97,8,99,66,32,32,32,
2444 32,32,32,32,32,57,4,9,30,44,43,42,39,41,40,30,36,37,98,32,31,41,41,41,
2445 41,41,9,34,33,37,
2446 59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
2447 59,59,59,59,59,59,59,101,100,71,70,69,68,67,66,65,64,63,62,61,56,59,31,
2448 58,60,60,60,103,102,60,
2449 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54,50,53,53,53,53,53,53,53,53,
2450 53,53,53,53,53,53,53,53,53,53,53,32,52,104,
2451 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2452 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2453 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2454 460,460,460,1,2,33,2,2,1,2,464,
2455 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2456 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2457 460,1,2,34,2,2,1,2,463,
2458 460,1,2,35,2,2,1,2,482,
2459 460,1,2,36,2,2,1,2,512,
2460 33,33,33,33,33,33,33,33,33,33,33,33,460,33,460,460,460,460,460,460,460,460,
2461 460,460,460,460,33,33,33,33,33,33,33,33,460,460,460,1,2,37,2,2,1,2,470,
2462 105,28,106,
2463 460,1,2,39,2,2,1,2,478,
2464 57,40,107,
2465 8,41,223,
2466 460,460,1,2,42,2,2,1,2,486,
2467 66,93,108,
2468 57,44,109,
2469 110,113,124,116,118,120,122,127,99,4,9,45,224,222,128,126,123,121,119,117,
2470 115,112,125,114,111,9,
2471 140,140,46,129,18,
2472 95,26,24,131,130,
2473 26,23,132,
2474 26,25,133,
2475 134,96,94,50,137,136,135,
2476 32,32,32,32,32,32,32,32,32,32,32,32,32,51,83,83,83,141,8,83,32,32,32,32,32,
2477 32,32,32,57,83,83,51,128,138,138,138,23,24,25,139,139,35,30,37,32,31,
2478 140,141,34,33,37,
2479 8,52,113,30,37,
2480 35,121,120,40,
2481 143,98,4,9,54,142,142,143,9,
2482 98,4,9,55,144,144,101,9,
2483 99,56,103,
2484 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2485 460,460,460,460,460,460,460,460,460,1,2,57,2,2,1,2,477,
2486 26,57,8,140,140,57,58,60,193,203,30,37,58,31,59,145,60,60,201,202,33,18,
2487 26,57,8,66,140,217,217,62,215,140,211,211,57,59,185,146,186,193,74,203,30,
2488 37,79,31,59,204,146,146,204,73,201,202,65,64,63,211,33,18,68,67,
2489 95,105,194,147,148,
2490 123,123,123,150,123,123,66,123,123,123,61,149,135,135,
2491 151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
2492 151,151,151,151,151,151,151,151,151,151,151,151,101,100,71,70,69,68,67,
2493 66,65,64,63,62,61,151,151,62,151,151,151,103,102,151,151,
2494 218,218,218,208,
2495 216,216,207,
2496 213,213,213,214,206,212,
2497 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2498 460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,66,2,2,1,2,
2499 467,
2500 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2501 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2502 460,460,460,460,460,460,460,1,2,67,2,2,1,2,510,
2503 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2504 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2505 460,460,460,460,460,460,460,1,2,68,2,2,1,2,509,
2506 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,69,
2507 2,2,1,2,508,
2508 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,70,
2509 2,2,1,2,507,
2510 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,71,
2511 2,2,1,2,503,
2512 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,72,
2513 2,2,1,2,502,
2514 57,73,152,191,
2515 26,57,8,140,140,57,74,188,193,203,30,37,58,31,59,188,201,202,33,18,
2516 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,75,185,146,186,193,
2517 74,203,30,37,79,31,59,184,78,77,184,76,75,146,146,184,73,201,202,65,64,
2518 63,211,33,18,68,67,
2519 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,76,185,146,186,193,
2520 74,203,30,37,79,31,59,183,78,77,183,76,75,146,146,183,73,201,202,65,64,
2521 63,211,33,18,68,67,
2522 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,77,185,146,186,193,
2523 74,203,30,37,79,31,59,182,78,77,182,76,75,146,146,182,73,201,202,65,64,
2524 63,211,33,18,68,67,
2525 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,78,185,146,186,193,
2526 74,203,30,37,79,31,59,181,78,77,181,76,75,146,146,181,73,201,202,65,64,
2527 63,211,33,18,68,67,
2528 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,79,185,82,186,193,
2529 74,203,30,37,79,31,154,59,153,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2530 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2531 155,157,159,172,160,158,156,
2532 71,72,169,162,161,
2533 95,105,194,147,163,
2534 165,134,160,164,166,
2535 167,169,173,175,96,97,66,84,149,172,171,176,174,170,168,
2536 167,169,96,97,155,180,179,178,177,
2537 173,175,153,182,181,
2538 183,151,184,
2539 185,149,186,
2540 94,147,187,
2541 188,145,189,
2542 190,192,143,193,191,
2543 123,123,123,150,123,123,123,123,123,92,134,134,
2544 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,139,
2545 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2546 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,94,
2547 2,2,1,2,472,
2548 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2549 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,95,
2550 2,2,1,2,481,
2551 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2552 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,96,
2553 2,2,1,2,473,
2554 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2555 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,97,
2556 2,2,1,2,471,
2557 105,38,194,
2558 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2559 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2560 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2561 460,460,460,460,460,1,2,99,2,2,1,2,468,
2562 77,77,100,
2563 213,213,213,214,101,195,195,
2564 79,79,75,
2565 78,78,74,
2566 51,104,196,
2567 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2568 460,460,460,460,460,1,2,105,2,2,1,2,466,
2569 26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,106,
2570 197,
2571 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,107,185,82,186,193,
2572 74,203,30,37,79,31,198,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2573 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2574 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,108,
2575 128,199,199,199,23,24,25,32,31,34,33,37,
2576 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,109,185,82,186,193,
2577 74,203,30,37,79,31,200,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2578 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2579 460,1,2,110,2,2,1,2,525,
2580 8,111,240,
2581 202,204,8,99,4,9,112,241,201,30,206,37,205,203,9,
2582 460,1,2,113,2,2,1,2,520,
2583 8,114,234,
2584 202,204,209,211,99,4,9,115,235,213,212,210,208,207,9,
2585 460,1,2,116,2,2,1,2,518,
2586 26,117,214,
2587 460,1,2,118,2,2,1,2,517,
2588 26,119,215,
2589 460,1,2,120,2,2,1,2,515,
2590 124,121,216,125,
2591 460,1,2,122,2,2,1,2,514,
2592 124,123,217,125,
2593 460,1,2,124,2,2,1,2,519,
2594 26,125,218,
2595 4,9,126,226,9,
2596 460,1,2,127,2,2,1,2,513,
2597 26,128,219,
2598 220,129,221,
2599 26,57,8,66,140,217,217,62,215,140,211,211,57,130,185,146,186,193,74,203,30,
2600 37,79,31,59,222,146,146,222,73,201,202,65,64,63,211,33,18,68,67,
2601 26,57,8,140,140,57,131,60,193,203,30,37,58,31,59,223,60,60,201,202,33,18,
2602 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,132,185,82,186,193,
2603 74,203,30,37,79,31,224,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2604 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2605 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,133,
2606 128,138,138,138,23,24,25,225,225,35,30,37,32,31,34,33,37,
2607 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2608 460,460,460,460,460,460,460,460,460,1,2,134,2,2,1,2,474,
2609 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,135,
2610 128,138,138,138,23,24,25,226,226,35,30,37,32,31,34,33,37,
2611 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,136,
2612 128,138,138,138,23,24,25,227,227,35,30,37,32,31,34,33,37,
2613 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,137,
2614 128,38,38,38,23,24,25,43,32,31,228,34,33,37,
2615 105,34,106,
2616 66,94,229,
2617 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,84,
2618 128,138,138,138,23,24,25,230,230,35,30,37,32,31,34,33,37,
2619 90,90,90,97,85,85,85,141,231,
2620 32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,32,32,32,32,32,
2621 32,32,32,57,4,9,99,128,38,38,97,106,38,48,47,49,43,32,31,106,51,50,106,
2622 109,52,44,106,106,106,53,53,40,46,12,11,10,45,41,9,34,33,37,
2623 232,102,233,
2624 32,36,32,32,32,32,32,32,32,32,32,32,32,5,6,7,42,35,32,39,51,32,32,32,32,32,
2625 32,32,32,57,4,9,99,128,38,38,97,105,38,48,47,49,43,32,31,105,51,50,105,
2626 110,52,44,105,105,105,53,53,40,46,12,11,10,45,41,9,34,33,37,
2627 234,66,145,149,205,
2628 95,105,146,147,163,
2629 198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
2630 198,198,198,198,198,147,235,
2631 57,148,236,
2632 26,57,8,140,140,57,149,237,193,203,30,37,58,31,59,237,237,201,202,33,18,
2633 460,460,460,460,460,460,460,460,1,2,150,2,2,1,2,480,
2634 219,151,
2635 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,152,
2636 128,138,138,138,23,24,25,238,238,35,30,37,32,31,34,33,37,
2637 167,169,173,175,234,96,97,66,153,149,205,172,171,176,174,170,168,
2638 234,154,190,
2639 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,155,
2640 2,2,1,2,506,
2641 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,156,185,146,186,
2642 193,74,203,30,37,79,31,59,179,78,77,179,178,76,75,146,146,179,73,201,
2643 202,65,64,63,211,33,18,68,67,
2644 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,157,
2645 2,2,1,2,505,
2646 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,158,185,146,186,
2647 193,74,203,30,37,79,31,59,179,78,77,179,177,76,75,146,146,179,73,201,
2648 202,65,64,63,211,33,18,68,67,
2649 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,159,
2650 2,2,1,2,504,
2651 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,160,185,146,186,
2652 193,74,203,30,37,79,31,59,176,78,77,176,76,75,146,146,176,73,201,202,65,
2653 64,63,211,33,18,68,67,
2654 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,161,185,146,186,
2655 193,74,203,30,37,79,31,59,239,239,78,77,239,76,75,146,146,239,73,201,
2656 202,65,64,63,211,33,18,68,67,
2657 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,162,185,146,186,
2658 193,74,203,30,37,79,31,59,240,240,78,77,240,76,75,146,146,240,73,201,
2659 202,65,64,63,211,33,18,68,67,
2660 26,57,8,66,140,217,217,62,215,140,211,211,57,163,185,146,186,193,74,203,30,
2661 37,241,31,59,187,146,146,187,73,201,202,65,64,63,211,33,18,68,67,
2662 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,164,185,146,186,
2663 193,74,203,30,37,79,31,59,80,242,80,78,77,80,76,75,146,146,80,73,201,
2664 202,65,64,63,211,33,18,68,67,
2665 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,165,
2666 2,2,1,2,501,
2667 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,166,185,146,186,
2668 193,74,203,30,37,79,31,59,80,243,80,78,77,80,76,75,146,146,80,73,201,
2669 202,65,64,63,211,33,18,68,67,
2670 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,167,
2671 2,2,1,2,500,
2672 26,57,8,140,140,57,168,60,193,203,30,37,58,31,59,244,60,60,201,202,33,18,
2673 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,169,
2674 2,2,1,2,499,
2675 26,57,8,140,140,57,170,60,193,203,30,37,58,31,59,245,60,60,201,202,33,18,
2676 26,57,8,140,140,57,171,60,193,203,30,37,58,31,59,246,60,60,201,202,33,18,
2677 26,57,8,140,140,57,172,60,193,203,30,37,58,31,59,247,60,60,201,202,33,18,
2678 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,173,
2679 2,2,1,2,498,
2680 26,57,8,140,140,57,174,60,193,203,30,37,58,31,59,248,60,60,201,202,33,18,
2681 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,175,
2682 2,2,1,2,497,
2683 26,57,8,140,140,57,176,60,193,203,30,37,58,31,59,249,60,60,201,202,33,18,
2684 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,177,185,146,186,
2685 193,74,203,30,37,79,31,59,80,250,81,80,78,77,80,76,75,146,146,80,73,201,
2686 202,65,64,63,211,33,18,68,67,
2687 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,178,185,146,186,
2688 193,74,203,30,37,79,31,59,80,251,81,80,78,77,80,76,75,146,146,80,73,201,
2689 202,65,64,63,211,33,18,68,67,
2690 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,179,185,146,186,
2691 193,74,203,30,37,79,31,59,80,252,81,80,78,77,80,76,75,146,146,80,73,201,
2692 202,65,64,63,211,33,18,68,67,
2693 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,180,185,146,186,
2694 193,74,203,30,37,79,31,59,80,253,81,80,78,77,80,76,75,146,146,80,73,201,
2695 202,65,64,63,211,33,18,68,67,
2696 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,181,185,82,186,193,
2697 74,203,30,37,79,31,59,254,80,255,83,81,80,78,77,80,76,75,82,82,80,73,
2698 201,202,65,64,63,211,33,18,68,67,
2699 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,182,185,82,186,193,
2700 74,203,30,37,79,31,59,254,80,256,83,81,80,78,77,80,76,75,82,82,80,73,
2701 201,202,65,64,63,211,33,18,68,67,
2702 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,183,
2703 2,2,1,2,496,
2704 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,184,185,82,186,193,
2705 74,203,30,37,79,31,59,84,80,257,85,83,81,80,78,77,80,76,75,82,82,80,73,
2706 201,202,65,64,63,211,33,18,68,67,
2707 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,185,
2708 2,2,1,2,495,
2709 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,186,185,82,186,193,
2710 74,203,30,37,79,31,59,84,80,258,86,85,83,81,80,78,77,80,76,75,82,82,80,
2711 73,201,202,65,64,63,211,33,18,68,67,
2712 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,187,185,82,186,193,
2713 74,203,30,37,79,31,59,84,80,259,87,86,85,83,81,80,78,77,80,76,75,82,82,
2714 80,73,201,202,65,64,63,211,33,18,68,67,
2715 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,188,
2716 2,2,1,2,494,
2717 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,189,185,82,186,193,
2718 74,203,30,37,79,31,59,84,80,260,88,87,86,85,83,81,80,78,77,80,76,75,82,
2719 82,80,73,201,202,65,64,63,211,33,18,68,67,
2720 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,190,
2721 2,2,1,2,493,
2722 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,191,185,82,186,193,
2723 74,203,30,37,79,31,59,84,80,261,89,88,87,86,85,83,81,80,78,77,80,76,75,
2724 82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2725 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,192,
2726 2,2,1,2,492,
2727 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,193,185,82,186,193,
2728 74,203,30,37,79,31,262,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2729 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2730 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,194,
2731 44,43,42,264,30,37,263,264,264,32,31,34,33,37,
2732 213,213,213,214,80,82,
2733 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54,55,53,53,53,53,53,53,53,53,
2734 53,53,53,53,53,53,53,53,53,53,53,196,52,104,
2735 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,197,
2736 128,138,138,138,23,24,25,265,265,35,30,37,32,31,34,33,37,
2737 234,198,266,
2738 105,29,106,
2739 234,200,112,
2740 4,9,201,244,9,
2741 460,1,2,202,2,2,1,2,524,
2742 26,203,267,
2743 460,1,2,204,2,2,1,2,523,
2744 26,205,268,
2745 4,9,206,232,9,
2746 26,207,269,
2747 26,208,270,
2748 460,1,2,209,2,2,1,2,522,
2749 26,210,271,
2750 460,1,2,211,2,2,1,2,521,
2751 26,212,272,
2752 4,9,213,231,9,
2753 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,214,185,82,186,193,
2754 74,203,30,37,79,31,273,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2755 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2756 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,215,185,82,186,193,
2757 74,203,30,37,79,31,274,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2758 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2759 4,9,216,228,9,
2760 4,9,217,227,9,
2761 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,218,185,82,186,193,
2762 74,203,30,37,79,31,275,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2763 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2764 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,219,
2765 276,276,276,32,31,277,276,34,33,37,
2766 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2767 460,460,460,460,460,1,2,220,2,2,1,2,484,
2768 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,221,
2769 128,138,138,138,23,24,25,278,278,35,30,37,32,31,34,33,37,
2770 26,222,279,
2771 150,123,66,123,123,223,149,126,126,
2772 150,123,123,123,224,125,125,
2773 66,122,229,
2774 66,89,229,
2775 66,88,229,
2776 32,32,32,32,32,32,32,32,32,32,32,32,32,51,83,83,83,8,83,32,32,32,32,32,32,
2777 32,32,57,83,83,228,128,138,138,138,23,24,25,139,139,35,30,37,32,31,140,
2778 280,34,33,37,
2779 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,229,
2780 128,138,138,138,23,24,25,31,35,30,37,32,31,34,33,37,
2781 66,95,229,
2782 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,231,
2783 128,138,138,138,23,24,25,281,281,35,30,37,32,31,34,33,37,
2784 460,460,460,460,1,2,232,2,2,1,2,475,
2785 282,8,4,9,233,24,107,30,37,24,282,9,
2786 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2787 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2788 460,460,460,460,460,460,460,1,2,234,2,2,1,2,476,
2789 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,235,
2790 128,138,138,138,23,24,25,283,283,35,30,37,32,31,34,33,37,
2791 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,236,185,82,186,193,
2792 74,203,30,37,79,31,284,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2793 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2794 95,105,195,147,148,
2795 234,66,238,229,192,
2796 155,157,159,174,160,158,156,
2797 155,157,159,173,160,158,156,
2798 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,241,185,82,186,193,
2799 74,203,30,37,79,31,285,59,153,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2800 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2801 71,72,171,162,161,
2802 71,72,170,162,161,
2803 66,168,149,
2804 66,167,149,
2805 66,166,149,
2806 66,165,149,
2807 66,159,149,
2808 66,158,149,
2809 165,134,164,164,166,
2810 165,134,163,164,166,
2811 165,134,162,164,166,
2812 165,134,161,164,166,
2813 167,169,96,97,66,254,149,172,171,170,168,
2814 167,169,96,97,157,180,179,178,177,
2815 167,169,96,97,156,180,179,178,177,
2816 173,175,154,182,181,
2817 183,152,184,
2818 185,150,186,
2819 94,148,187,
2820 188,146,189,
2821 286,262,287,
2822 105,48,194,
2823 66,289,264,45,288,
2824 66,289,265,27,229,
2825 8,266,129,30,37,
2826 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,267,
2827 276,276,276,32,31,290,276,34,33,37,
2828 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,268,
2829 276,276,276,32,31,291,276,34,33,37,
2830 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,269,
2831 276,276,276,32,31,292,276,34,33,37,
2832 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,270,
2833 276,276,276,32,31,293,276,34,33,37,
2834 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,271,
2835 276,276,276,32,31,294,276,34,33,37,
2836 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,272,295,37,
2837 296,273,297,
2838 296,274,298,
2839 296,275,299,
2840 105,245,300,
2841 66,4,9,277,225,301,9,
2842 302,303,66,278,229,303,303,
2843 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,279,185,82,186,193,
2844 74,203,30,37,79,31,304,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2845 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2846 92,92,92,87,87,87,280,
2847 91,91,91,86,66,86,86,281,229,
2848 39,282,305,44,
2849 66,289,283,199,229,
2850 306,284,307,
2851 306,234,285,190,307,
2852 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,286,
2853 2,2,1,2,491,
2854 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,287,185,82,186,193,
2855 74,203,30,37,79,31,144,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2856 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2857 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,288,
2858 44,43,42,47,30,37,263,47,32,31,34,33,37,
2859 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2860 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2861 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
2862 460,460,1,2,289,2,2,1,2,465,
2863 66,4,9,290,243,301,9,
2864 66,4,9,291,242,301,9,
2865 66,4,9,292,239,301,9,
2866 66,4,9,293,238,301,9,
2867 66,4,9,294,237,301,9,
2868 4,9,295,236,9,
2869 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,296,
2870 2,2,1,2,516,
2871 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,297,185,82,186,193,
2872 74,203,30,37,79,31,230,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2873 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2874 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,298,185,82,186,193,
2875 74,203,30,37,79,31,229,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2876 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2877 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,299,185,82,186,193,
2878 74,203,30,37,79,31,233,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2879 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2880 250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
2881 250,250,250,250,250,300,308,
2882 32,32,32,32,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,57,301,
2883 309,309,309,32,31,309,34,33,37,
2884 460,1,2,302,2,2,1,2,483,
2885 8,303,132,30,37,
2886 150,123,123,123,304,127,127,
2887 8,305,111,30,37,
2888 460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,1,2,306,
2889 2,2,1,2,511,
2890 69,70,71,72,26,57,8,66,140,217,217,62,215,140,211,211,57,307,185,82,186,193,
2891 74,203,30,37,79,31,310,59,84,80,91,90,89,88,87,86,85,83,81,80,78,77,80,
2892 76,75,82,82,80,73,201,202,65,64,63,211,33,18,68,67,
2893 32,32,32,32,32,32,32,32,32,32,32,32,32,51,8,32,32,32,32,32,32,32,32,57,308,
2894 128,138,138,138,23,24,25,311,311,35,30,37,32,31,34,33,37,
2895 105,246,300,
2896 234,310,197,
2897 66,289,311,251,229,
2898
2899 };
2900
2901
2902 static const unsigned short far ag_sbt[] = {
2903 0, 15, 56, 62, 82, 121, 131, 141, 170, 230, 292, 297, 302, 327,
2904 365, 381, 383, 419, 421, 469, 472, 475, 497, 506, 511, 516, 584, 627,
2905 649, 710, 738, 793, 848, 887, 953, 999,1008,1017,1062,1065,1074,1077,
2906 1080,1090,1093,1096,1122,1127,1132,1135,1138,1145,1196,1201,1205,1214,
2907 1222,1225,1261,1283,1323,1328,1342,1396,1400,1403,1409,1450,1502,1554,
2908 1579,1604,1629,1654,1658,1678,1727,1776,1825,1874,1935,1942,1947,1952,
2909 1957,1972,1981,1986,1989,1992,1995,1998,2003,2015,2037,2080,2123,2166,
2910 2209,2212,2280,2283,2290,2293,2296,2299,2331,2357,2418,2454,2515,2524,
2911 2527,2542,2551,2554,2569,2578,2581,2590,2593,2602,2606,2615,2619,2628,
2912 2631,2636,2645,2648,2651,2691,2713,2774,2816,2852,2894,2936,2974,2977,
2913 2980,3022,3031,3099,3102,3170,3175,3180,3206,3209,3230,3246,3248,3290,
2914 3307,3310,3335,3385,3410,3460,3485,3534,3584,3634,3674,3725,3750,3801,
2915 3826,3848,3873,3895,3917,3939,3964,3986,4011,4033,4085,4137,4189,4241,
2916 4295,4349,4374,4429,4454,4510,4567,4592,4650,4675,4734,4759,4820,4859,
2917 4865,4904,4946,4949,4952,4955,4960,4969,4972,4981,4984,4989,4992,4995,
2918 5004,5007,5016,5019,5024,5085,5146,5151,5156,5217,5251,5283,5325,5328,
2919 5337,5344,5347,5350,5353,5403,5444,5447,5489,5501,5513,5565,5607,5668,
2920 5673,5678,5685,5692,5753,5758,5763,5766,5769,5772,5775,5778,5781,5786,
2921 5791,5796,5801,5812,5821,5830,5835,5838,5841,5844,5847,5850,5853,5858,
2922 5863,5868,5902,5936,5970,6004,6038,6062,6065,6068,6071,6074,6081,6088,
2923 6149,6156,6165,6169,6174,6177,6182,6207,6268,6306,6371,6378,6385,6392,
2924 6399,6406,6411,6436,6497,6558,6619,6645,6678,6687,6692,6699,6704,6729,
2925 6790,6832,6835,6838,6843
2926 };
2927
2928
2929 static const unsigned short far ag_sbe[] = {
2930 9, 53, 58, 69, 118, 125, 135, 164, 224, 286, 294, 299, 323, 360,
2931 371, 382, 418, 420, 462, 470, 473, 496, 500, 507, 513, 547, 621, 633,
2932 666, 733, 771, 840, 884, 947, 993,1002,1011,1056,1063,1068,1075,1078,
2933 1084,1091,1094,1107,1124,1129,1133,1136,1141,1176,1197,1202,1209,1217,
2934 1223,1255,1267,1296,1325,1338,1388,1399,1402,1407,1444,1496,1548,1573,
2935 1598,1623,1648,1655,1664,1695,1744,1793,1842,1891,1938,1944,1949,1954,
2936 1964,1976,1983,1987,1990,1993,1996,2000,2012,2036,2074,2117,2160,2203,
2937 2210,2274,2282,2287,2292,2295,2297,2325,2355,2374,2441,2471,2518,2525,
2938 2533,2545,2552,2561,2572,2579,2584,2591,2596,2603,2609,2616,2622,2629,
2939 2633,2639,2646,2649,2664,2697,2730,2798,2846,2876,2918,2959,2975,2978,
2940 3004,3029,3063,3100,3134,3172,3177,3204,3207,3215,3240,3247,3272,3298,
2941 3308,3329,3352,3404,3427,3479,3502,3551,3601,3647,3691,3744,3767,3820,
2942 3832,3867,3879,3901,3923,3958,3970,4005,4017,4050,4102,4154,4206,4258,
2943 4312,4368,4391,4448,4471,4527,4586,4609,4669,4692,4753,4776,4844,4863,
2944 4901,4928,4947,4950,4953,4957,4963,4970,4975,4982,4986,4990,4993,4998,
2945 5005,5010,5017,5021,5041,5102,5148,5153,5173,5240,5277,5307,5326,5333,
2946 5341,5345,5348,5351,5383,5427,5445,5471,5495,5505,5559,5589,5624,5670,
2947 5675,5681,5688,5709,5755,5760,5764,5767,5770,5773,5776,5779,5783,5788,
2948 5793,5798,5806,5816,5825,5832,5836,5839,5842,5845,5848,5851,5855,5860,
2949 5864,5891,5925,5959,5993,6027,6059,6063,6066,6069,6072,6077,6084,6105,
2950 6155,6163,6166,6171,6175,6179,6201,6224,6292,6365,6374,6381,6388,6395,
2951 6402,6408,6430,6453,6514,6575,6643,6668,6681,6688,6696,6700,6723,6746,
2952 6814,6833,6836,6840,6843
2953 };
2954
2955
2956 static const unsigned char far ag_fl[] = {
2957 2,1,1,2,1,2,2,1,1,2,0,1,3,1,1,1,1,2,0,1,2,1,1,1,1,1,0,5,1,3,1,3,1,2,1,
2958 1,2,1,2,2,2,2,1,1,1,4,1,3,1,1,2,1,2,1,0,3,2,1,2,1,1,1,1,1,1,1,1,1,1,1,
2959 1,1,1,1,1,1,1,2,2,2,2,1,2,0,1,2,4,4,3,3,2,4,4,1,1,2,1,2,0,1,0,2,2,4,1,
2960 3,3,4,1,3,3,6,4,2,1,1,1,1,1,1,2,1,3,0,1,4,4,6,1,5,0,1,6,3,5,5,1,1,2,3,
2961 1,2,2,1,5,1,3,1,3,1,3,1,3,1,3,1,3,3,3,3,1,3,3,3,3,3,3,3,3,1,3,3,1,3,3,
2962 1,3,3,3,1,1,2,2,2,2,1,1,3,2,1,3,2,3,1,1,3,1,7,0,5,1,1,1,1,2,3,1,1,1,1,
2963 1,1,2,1,1,1,2,1,2,3,1,1,2,2,2,5,3,4,4,6,6,4,4,5,2,2,5,5,5,5,2,2,5,5,3,
2964 1,3,1,1,1,0,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2965 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2966 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2967 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2968 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2969 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2970 1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2971 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2972 2
2973 };
2974
2975 static const unsigned short far ag_ptt[] = {
2976 0, 1, 1, 11, 12, 12, 12,200, 19, 19, 20, 20,200, 24, 24, 24, 25, 25,
2977 26, 26, 21, 28, 28, 28, 28, 28, 33, 28, 36, 36, 34, 34,208,208, 38, 38,
2978 40, 41, 41, 41, 41, 41, 44, 44, 44, 44, 46, 46, 47, 47,201, 48, 48, 51,
2979 53, 51,202, 54, 54, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
2980 58, 58, 70, 70, 70, 72, 73, 74, 71, 78, 78, 83, 83, 80, 80, 80, 80, 80,
2981 85, 85, 85, 81, 82, 82, 89, 89, 90, 90, 93, 93, 93, 22, 91, 91, 91, 91,
2982 92, 92, 92, 92, 97, 96, 94, 94, 94, 94, 94,104,104, 94,100,107,107,100,
2983 100,100, 29,103,115,115,101, 23, 23, 23,225,119,119,225,223,223,223, 99,
2984 99,122,122,125,125,127,127,129,129,130,130,132,132,132,132,132,134,134,
2985 134,134,134,134,134,134,134,137,137,137,140,140,140,142,142,142,142,148,
2986 145,145,145,145,145,110,110,110,110,110,110,110,156,154,108,108,152,152,
2987 160,152,153,153,153,153,153,153,247,247,247,166,166,161,161, 79, 79,162,
2988 162,163,163,248,172,172,102,174,174,174,174,174,174,174,174,174,174,178,
2989 184,184,184,184,184,184,185,185,185,185,185,177,177,193,193,193,194,193,
2990 121, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
2991 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
2992 15, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
2993 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
2994 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
2995 39, 39, 39, 45, 45, 45, 45, 45, 45, 52, 52, 52, 52, 52, 52, 52, 52, 52,
2996 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
2997 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
2998 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
2999 57, 57, 57, 57, 76, 76,120,120,167,167,167,170,170,173,173,173,173,173,
3000 173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
3001 173,173,173,173,173,173,173,173,173,173,199,199, 7, 5, 4, 35, 32, 37,
3002 42, 43, 2, 84, 86, 87, 88, 95, 49, 50, 98,105,106,109,111,114,113, 9,
3003 112, 8,116,117,118,124,123,126,128,131,133,135,136,138,139,141,143,144,
3004 146,147,149,150,151, 3, 6,159,175,176,179,180,182,181,183,186,187,188,
3005 189,190,191,192
3006 };
3007
3008 static const unsigned short far *ag_valid(int ag_k) {
3009 const unsigned short far *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
3010 while (*--ag_tp != (unsigned short) ag_k) if (*ag_tp == 0) return NULL;
3011 return ag_tp;
3012 }
3013
3014 int dsl_change_reduction(dsl_token_type ag_k) {
3015 if (!ag_valid(ag_k)) return 0;
3016 (PCB).reduction_token = ag_k;
3017 return 1;
3018 }
3019
3020 static void ag_default(const int *ag_tp) {
3021 (PCB).ag_dsn = (PCB).sn;
3022 (PCB).ag_dtl = ag_tp;
3023 while (!ag_valid((dsl_token_type) *ag_tp)) ag_tp++;
3024 (PCB).reduction_token = (dsl_token_type) *ag_tp;
3025 }
3026
3027
3028
3029 static void ag_ra(void)
3030 {
3031 switch(ag_rpx[(PCB).ag_ap]) {
3032 case 1: ag_rp_1(V(0,(unsigned *))); break;
3033 case 2: ag_rp_2(V(0,(unsigned *))); break;
3034 case 3: ag_rp_3(V(0,(unsigned *))); break;
3035 case 4: ag_rp_4(); break;
3036 case 5: ag_rp_5(); break;
3037 case 6: ag_rp_6(); break;
3038 case 7: ag_rp_7(); break;
3039 case 8: ag_rp_8(V(0,(int *))); break;
3040 case 9: ag_rp_9(V(1,(int *))); break;
3041 case 10: ag_rp_10(); break;
3042 case 11: ag_rp_11(); break;
3043 case 12: ag_rp_12(); break;
3044 case 13: ag_rp_13(); break;
3045 case 14: ag_rp_14(); break;
3046 case 15: ag_rp_15(); break;
3047 case 16: ag_rp_16(); break;
3048 case 17: ag_rp_17(V(0,(int *))); break;
3049 case 18: ag_rp_18(); break;
3050 case 19: ag_rp_19(); break;
3051 case 20: ag_rp_20(); break;
3052 case 21: ag_rp_21(V(0,(int *))); break;
3053 case 22: ag_rp_22(V(0,(int *))); break;
3054 case 23: V(0,(int *)) = ag_rp_23(); break;
3055 case 24: V(0,(int *)) = ag_rp_24(); break;
3056 case 25: V(0,(int *)) = ag_rp_25(); break;
3057 case 26: V(0,(int *)) = ag_rp_26(); break;
3058 case 27: V(0,(int *)) = ag_rp_27(); break;
3059 case 28: V(0,(int *)) = ag_rp_28(); break;
3060 case 29: V(0,(int *)) = ag_rp_29(); break;
3061 case 30: V(0,(int *)) = ag_rp_30(); break;
3062 case 31: V(0,(int *)) = ag_rp_31(); break;
3063 case 32: V(0,(int *)) = ag_rp_32(); break;
3064 case 33: V(0,(int *)) = ag_rp_33(); break;
3065 case 34: V(0,(int *)) = ag_rp_34(V(1,(int *))); break;
3066 case 35: V(0,(int *)) = ag_rp_35(V(0,(int *)), V(1,(int *))); break;
3067 case 36: V(0,(int *)) = ag_rp_36(V(0,(int *)), V(1,(int *))); break;
3068 case 37: V(0,(int *)) = ag_rp_37(V(1,(long *))); break;
3069 case 38: V(0,(long *)) = ag_rp_38(V(0,(long *)), V(1,(long *))); break;
3070 case 39: ag_rp_39(); break;
3071 case 40: ag_rp_40(); break;
3072 case 41: ag_rp_41(V(0,(char * *))); break;
3073 case 42: ag_rp_42(V(0,(char * *))); break;
3074 case 43: ag_rp_43(V(0,(char * *))); break;
3075 case 44: V(0,(char * *)) = ag_rp_44(); break;
3076 case 45: V(0,(char * *)) = ag_rp_45(); break;
3077 case 46: V(0,(char * *)) = ag_rp_46(V(0,(char * *))); break;
3078 case 47: ag_rp_47(); break;
3079 case 48: ag_rp_48(); break;
3080 case 49: ag_rp_49(); break;
3081 case 50: ag_rp_50(V(0,(int *))); break;
3082 case 51: V(0,(int *)) = ag_rp_51(V(2,(int *))); break;
3083 case 52: V(0,(int *)) = ag_rp_52(V(2,(int *))); break;
3084 case 53: V(0,(int *)) = ag_rp_53(V(0,(int *)), V(4,(int *))); break;
3085 case 54: V(0,(int *)) = ag_rp_54(V(2,(long *))); break;
3086 case 55: V(0,(int *)) = ag_rp_55(V(0,(int *))); break;
3087 case 56: ag_rp_56(V(0,(unsigned *))); break;
3088 case 57: ag_rp_57(V(0,(unsigned *)), V(2,(long *))); break;
3089 case 58: ag_rp_58(V(0,(unsigned *))); break;
3090 case 59: ag_rp_59(V(0,(unsigned *)), V(2,(long *)), V(4,(long *))); break;
3091 case 60: ag_default(&ag_rtt[0]); V(0,(unsigned *)) = ag_rp_60(); break;
3092 case 61: ag_rp_61(V(2,(long *))); break;
3093 case 62: ag_rp_62(); break;
3094 case 63: ag_rp_63(V(1,(int *))); break;
3095 case 64: ag_rp_64(V(3,(long *))); break;
3096 case 65: ag_rp_65(); break;
3097 case 66: V(0,(int *)) = ag_rp_66(); break;
3098 case 67: V(0,(int *)) = ag_rp_67(V(0,(int *))); break;
3099 case 68: ag_rp_68(V(0,(int *))); break;
3100 case 69: ag_rp_69(V(1,(int *))); break;
3101 case 70: ag_rp_70(V(1,(int *))); break;
3102 case 71: V(0,(long *)) = ag_rp_71(V(0,(long *)), V(2,(long *)), V(4,(long *))); break;
3103 case 72: V(0,(long *)) = ag_rp_72(V(0,(long *)), V(2,(long *))); break;
3104 case 73: V(0,(long *)) = ag_rp_73(V(0,(long *)), V(2,(long *))); break;
3105 case 74: V(0,(long *)) = ag_rp_74(V(0,(long *)), V(2,(long *))); break;
3106 case 75: V(0,(long *)) = ag_rp_75(V(0,(long *)), V(2,(long *))); break;
3107 case 76: V(0,(long *)) = ag_rp_76(V(0,(long *)), V(2,(long *))); break;
3108 case 77: V(0,(long *)) = ag_rp_77(V(0,(long *)), V(2,(long *))); break;
3109 case 78: V(0,(long *)) = ag_rp_78(V(0,(long *)), V(2,(long *))); break;
3110 case 79: V(0,(long *)) = ag_rp_79(); break;
3111 case 80: V(0,(long *)) = ag_rp_80(); break;
3112 case 81: V(0,(long *)) = ag_rp_81(V(0,(long *)), V(2,(long *))); break;
3113 case 82: V(0,(long *)) = ag_rp_82(V(0,(long *)), V(2,(long *))); break;
3114 case 83: V(0,(long *)) = ag_rp_83(V(0,(long *)), V(2,(long *))); break;
3115 case 84: V(0,(long *)) = ag_rp_84(V(0,(long *)), V(2,(long *))); break;
3116 case 85: V(0,(long *)) = ag_rp_85(); break;
3117 case 86: V(0,(long *)) = ag_rp_86(); break;
3118 case 87: V(0,(long *)) = ag_rp_87(); break;
3119 case 88: V(0,(long *)) = ag_rp_88(); break;
3120 case 89: V(0,(long *)) = ag_rp_89(V(0,(long *)), V(2,(long *))); break;
3121 case 90: V(0,(long *)) = ag_rp_90(V(0,(long *)), V(2,(long *))); break;
3122 case 91: V(0,(long *)) = ag_rp_91(V(0,(long *)), V(2,(long *))); break;
3123 case 92: V(0,(long *)) = ag_rp_92(V(0,(long *)), V(2,(long *))); break;
3124 case 93: V(0,(long *)) = ag_rp_93(V(0,(long *)), V(2,(long *))); break;
3125 case 94: V(0,(long *)) = ag_rp_94(V(0,(long *)), V(2,(long *))); break;
3126 case 95: V(0,(long *)) = ag_rp_95(V(0,(long *)), V(2,(long *))); break;
3127 case 96: V(0,(long *)) = ag_rp_96(V(0,(long *))); break;
3128 case 97: V(0,(long *)) = ag_rp_97(V(1,(long *))); break;
3129 case 98: V(0,(long *)) = ag_rp_98(V(1,(long *))); break;
3130 case 99: V(0,(long *)) = ag_rp_99(V(1,(long *))); break;
3131 case 100: V(0,(long *)) = ag_rp_100(V(1,(long *))); break;
3132 case 101: V(0,(long *)) = ag_rp_101(V(0,(long *))); break;
3133 case 102: V(0,(long *)) = ag_rp_102(V(0,(int *))); break;
3134 case 103: V(0,(long *)) = ag_rp_103(V(2,(long *))); break;
3135 case 104: V(0,(long *)) = ag_rp_104(); break;
3136 case 105: V(0,(long *)) = ag_rp_105(V(1,(long *))); break;
3137 case 106: V(0,(long *)) = ag_rp_106(V(0,(long *))); break;
3138 case 107: ag_default(&ag_rtt[4]); V(0,(long *)) = ag_rp_107(); break;
3139 case 108: ag_rp_108(); break;
3140 case 109: ag_rp_109(V(3,(long *)), V(5,(long *))); break;
3141 case 110: ag_rp_110(); break;
3142 case 111: ag_rp_111(); break;
3143 case 112: ag_rp_112(V(0,(long *))); break;
3144 case 113: ag_rp_113(V(0,(long *))); break;
3145 case 114: ag_rp_114(); break;
3146 case 115: ag_rp_115(V(1,(long *))); break;
3147 case 116: V(0,(long *)) = ag_rp_116(); break;
3148 case 117: V(0,(long *)) = ag_rp_117(V(0,(long *)), V(1,(long *))); break;
3149 case 118: V(0,(long *)) = ag_rp_118(V(0,(int *))); break;
3150 case 119: V(0,(long *)) = ag_rp_119(V(0,(int *))); break;
3151 case 120: V(0,(long *)) = ag_rp_120(); break;
3152 case 121: V(0,(long *)) = ag_rp_121(V(0,(long *)), V(1,(int *))); break;
3153 case 122: V(0,(long *)) = ag_rp_122(V(0,(int *))); break;
3154 case 123: V(0,(long *)) = ag_rp_123(V(0,(long *)), V(1,(int *))); break;
3155 case 124: V(0,(int *)) = ag_rp_124(V(1,(int *))); break;
3156 case 125: ag_rp_125(V(0,(screen_descriptor * *))); break;
3157 case 126: V(0,(screen_descriptor * *)) = ag_rp_126(); break;
3158 case 127: V(0,(screen_descriptor * *)) = ag_rp_127(V(0,(screen_descriptor * *))); break;
3159 case 128: V(0,(screen_descriptor * *)) = ag_rp_128(V(0,(screen_descriptor * *)), V(1,(int *))); break;
3160 case 129: V(0,(screen_descriptor * *)) = ag_rp_129(V(0,(screen_descriptor * *)), V(2,(int *))); break;
3161 case 130: V(0,(screen_descriptor * *)) = ag_rp_130(V(0,(screen_descriptor * *)), V(2,(int *))); break;
3162 case 131: V(0,(screen_descriptor * *)) = ag_rp_131(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
3163 case 132: V(0,(screen_descriptor * *)) = ag_rp_132(V(0,(screen_descriptor * *)), V(3,(long *)), V(5,(long *))); break;
3164 case 133: V(0,(screen_descriptor * *)) = ag_rp_133(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
3165 case 134: V(0,(screen_descriptor * *)) = ag_rp_134(V(0,(screen_descriptor * *)), V(1,(query_item * *))); break;
3166 case 135: V(0,(int *)) = ag_rp_135(V(2,(long *)), V(4,(long *))); break;
3167 case 136: V(0,(query_item * *)) = ag_rp_136(); break;
3168 case 137: V(0,(query_item * *)) = ag_rp_137(V(0,(query_item * *))); break;
3169 case 138: V(0,(query_item * *)) = ag_rp_138(V(0,(query_item * *))); break;
3170 case 139: V(0,(query_item * *)) = ag_rp_139(V(0,(query_item * *))); break;
3171 case 140: V(0,(query_item * *)) = ag_rp_140(V(0,(query_item * *))); break;
3172 case 141: V(0,(query_item * *)) = ag_rp_141(); break;
3173 case 142: V(0,(query_item * *)) = ag_rp_142(V(0,(query_item * *))); break;
3174 case 143: V(0,(query_item * *)) = ag_rp_143(V(0,(query_item * *))); break;
3175 case 144: V(0,(query_item * *)) = ag_rp_144(V(0,(query_item * *))); break;
3176 case 145: ag_rp_145(); break;
3177 case 146: ag_rp_146(); break;
3178 case 147: ag_rp_147(); break;
3179 case 148: ag_rp_148(); break;
3180 }
3181 (PCB).la_ptr = (PCB).pointer;
3182 }
3183
3184 #define TOKEN_NAMES dsl_token_names
3185 const char *const dsl_token_names[264] = {
3186 "script file",
3187 "ws",
3188 "literal",
3189 "integer constant",
3190 "string literal",
3191 "paren string",
3192 "character constant",
3193 "eol",
3194 "literals",
3195 "name",
3196 "white",
3197 "comment",
3198 "comment head",
3199 "\"*/\"",
3200 "\"/*\"",
3201 "",
3202 "'\\n'",
3203 "\"//\"",
3204 "not eol",
3205 "",
3206 "",
3207 "script file",
3208 "execution block",
3209 "declaration",
3210 "",
3211 "",
3212 "",
3213 "eof",
3214 "word",
3215 "integer variable",
3216 "string variable",
3217 "undeclared variable",
3218 "'['",
3219 "",
3220 "parameter string",
3221 "']'",
3222 "string",
3223 "'#'",
3224 "param word",
3225 "text char",
3226 "action text",
3227 "action text head",
3228 "'}'",
3229 "'{'",
3230 "action word",
3231 "",
3232 "action parameter string",
3233 "action param word",
3234 "paren string chars",
3235 "')'",
3236 "'('",
3237 "paren string char",
3238 "not paren",
3239 "",
3240 "string chars",
3241 "'\\\"'",
3242 "string char",
3243 "not double quote",
3244 "escape sequence",
3245 "\"\\\\a\"",
3246 "\"\\\\b\"",
3247 "\"\\\\f\"",
3248 "\"\\\\n\"",
3249 "\"\\\\r\"",
3250 "\"\\\\t\"",
3251 "\"\\\\v\"",
3252 "\"\\\\\\\\\"",
3253 "\"\\\\?\"",
3254 "\"\\\\\\'\"",
3255 "\"\\\\\\\"\"",
3256 "octal escape",
3257 "hex escape",
3258 "one octal",
3259 "two octal",
3260 "three octal",
3261 "'\\\\'",
3262 "",
3263 "\"\\\\x\"",
3264 "hex number",
3265 "hex digit",
3266 "command",
3267 "identifier",
3268 "parameters",
3269 "",
3270 "'<'",
3271 "piped command",
3272 "'|'",
3273 "'>'",
3274 "\">>\"",
3275 "",
3276 "",
3277 "command sequence",
3278 "if sequence",
3279 "",
3280 "statement",
3281 "\"else\"",
3282 "if statement",
3283 "if condition",
3284 "\"if\"",
3285 "conditional exp",
3286 "assignment",
3287 "for statement",
3288 "screen description",
3289 "while statement",
3290 "",
3291 "'='",
3292 "';'",
3293 "",
3294 "string exp",
3295 "'@'",
3296 "primary exp",
3297 "\"while\"",
3298 "\"for\"",
3299 "\"in\"",
3300 "\"do\"",
3301 "",
3302 "\"action\"",
3303 "\"int\"",
3304 "\"string\"",
3305 "",
3306 "letter",
3307 "digit",
3308 "logical or exp",
3309 "'\\?'",
3310 "':'",
3311 "logical and exp",
3312 "\"||\"",
3313 "inclusive or exp",
3314 "\"&&\"",
3315 "exclusive or exp",
3316 "and exp",
3317 "'^'",
3318 "equality exp",
3319 "'&'",
3320 "relational exp",
3321 "\"==\"",
3322 "\"!=\"",
3323 "shift exp",
3324 "\"<=\"",
3325 "\">=\"",
3326 "additive exp",
3327 "\"<<\"",
3328 "multiplicative exp",
3329 "'+'",
3330 "'-'",
3331 "unary exp",
3332 "'*'",
3333 "'/'",
3334 "nonzero",
3335 "'%'",
3336 "'~'",
3337 "'!'",
3338 "string term",
3339 "string element",
3340 "numeric name",
3341 "built_in name",
3342 "built_in argument",
3343 "string name",
3344 "undefined name",
3345 "\"..\"",
3346 "",
3347 "hex constant",
3348 "octal constant",
3349 "decimal constant",
3350 "\"0x\"",
3351 "\"0X\"",
3352 "",
3353 "",
3354 "",
3355 "'0'",
3356 "",
3357 "'\\''",
3358 "char constant element",
3359 "not single quote",
3360 "screen items",
3361 "\"screen\"",
3362 "\"title\"",
3363 "formula",
3364 "color spec",
3365 "\"entry\"",
3366 "\"highlight\"",
3367 "\"size\"",
3368 "','",
3369 "\"location\"",
3370 "query line",
3371 "button line",
3372 "\"color\"",
3373 "\"field\"",
3374 "\"variable\"",
3375 "\"default\"",
3376 "\"prompt\"",
3377 "\"explanation\"",
3378 "\"button\"",
3379 "formula element",
3380 "",
3381 "",
3382 "",
3383 "",
3384 "",
3385 "",
3386 "eol",
3387 "paren string",
3388 "string literal",
3389 "']'",
3390 "'['",
3391 "'#'",
3392 "'}'",
3393 "'{'",
3394 "literal",
3395 "'<'",
3396 "'|'",
3397 "'>'",
3398 "\">>\"",
3399 "\"else\"",
3400 "')'",
3401 "'('",
3402 "\"if\"",
3403 "'='",
3404 "';'",
3405 "'@'",
3406 "\"while\"",
3407 "\"do\"",
3408 "\"in\"",
3409 "name",
3410 "\"for\"",
3411 "literals",
3412 "\"action\"",
3413 "\"int\"",
3414 "\"string\"",
3415 "':'",
3416 "'\\?'",
3417 "\"||\"",
3418 "\"&&\"",
3419 "'^'",
3420 "'&'",
3421 "\"==\"",
3422 "\"!=\"",
3423 "\"<=\"",
3424 "\">=\"",
3425 "\"<<\"",
3426 "'+'",
3427 "'-'",
3428 "'*'",
3429 "'/'",
3430 "'%'",
3431 "'~'",
3432 "'!'",
3433 "integer constant",
3434 "character constant",
3435 "\"..\"",
3436 "\"screen\"",
3437 "\"title\"",
3438 "\"entry\"",
3439 "\"highlight\"",
3440 "','",
3441 "\"size\"",
3442 "\"location\"",
3443 "\"color\"",
3444 "\"field\"",
3445 "\"variable\"",
3446 "\"default\"",
3447 "\"prompt\"",
3448 "\"explanation\"",
3449 "\"button\"",
3450
3451 };
3452
3453 #ifndef MISSING_FORMAT
3454 #define MISSING_FORMAT "Missing %s"
3455 #endif
3456 #ifndef UNEXPECTED_FORMAT
3457 #define UNEXPECTED_FORMAT "Unexpected %s"
3458 #endif
3459 #ifndef UNNAMED_TOKEN
3460 #define UNNAMED_TOKEN "input"
3461 #endif
3462
3463
3464 static void ag_diagnose(void) {
3465 int ag_snd = (PCB).sn;
3466 int ag_k = ag_sbt[ag_snd];
3467
3468 if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
3469 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
3470 }
3471 else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
3472 && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
3473 && *TOKEN_NAMES[ag_tstt[ag_k]]) {
3474 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
3475 }
3476 else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
3477 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
3478 }
3479 else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
3480 char buf[20];
3481 sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
3482 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
3483 }
3484 else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
3485 (PCB).error_message = (PCB).ag_msg;
3486
3487
3488 }
3489 static int ag_action_1_r_proc(void);
3490 static int ag_action_2_r_proc(void);
3491 static int ag_action_3_r_proc(void);
3492 static int ag_action_4_r_proc(void);
3493 static int ag_action_1_s_proc(void);
3494 static int ag_action_3_s_proc(void);
3495 static int ag_action_1_proc(void);
3496 static int ag_action_2_proc(void);
3497 static int ag_action_3_proc(void);
3498 static int ag_action_4_proc(void);
3499 static int ag_action_5_proc(void);
3500 static int ag_action_6_proc(void);
3501 static int ag_action_7_proc(void);
3502 static int ag_action_8_proc(void);
3503 static int ag_action_9_proc(void);
3504 static int ag_action_10_proc(void);
3505 static int ag_action_11_proc(void);
3506 static int ag_action_8_proc(void);
3507
3508
3509 static int (*const ag_r_procs_scan[])(void) = {
3510 ag_action_1_r_proc,
3511 ag_action_2_r_proc,
3512 ag_action_3_r_proc,
3513 ag_action_4_r_proc
3514 };
3515
3516 static int (*const ag_s_procs_scan[])(void) = {
3517 ag_action_1_s_proc,
3518 ag_action_2_r_proc,
3519 ag_action_3_s_proc,
3520 ag_action_4_r_proc
3521 };
3522
3523 static int (*const ag_gt_procs_scan[])(void) = {
3524 ag_action_1_proc,
3525 ag_action_2_proc,
3526 ag_action_3_proc,
3527 ag_action_4_proc,
3528 ag_action_5_proc,
3529 ag_action_6_proc,
3530 ag_action_7_proc,
3531 ag_action_8_proc,
3532 ag_action_9_proc,
3533 ag_action_10_proc,
3534 ag_action_11_proc,
3535 ag_action_8_proc
3536 };
3537
3538
3539 static int ag_action_10_proc(void) {
3540 int ag_t = (PCB).token_number;
3541 (PCB).btsx = 0, (PCB).drt = -1;
3542 do {
3543 ag_track();
3544 (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3545 (PCB).la_ptr++;
3546 if (ag_key_index[(PCB).sn]) {
3547 unsigned ag_k = ag_key_index[(PCB).sn];
3548 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3549 if (ag_ch <= 255) {
3550 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3551 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3552 }
3553 }
3554 } while ((PCB).token_number == (dsl_token_type) ag_t);
3555 (PCB).la_ptr = (PCB).pointer;
3556 return 1;
3557 }
3558
3559 static int ag_action_11_proc(void) {
3560 int ag_t = (PCB).token_number;
3561
3562 (PCB).btsx = 0, (PCB).drt = -1;
3563 do {
3564 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3565 (PCB).ssx--;
3566 ag_track();
3567 ag_ra();
3568 if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
3569 (PCB).ssx++;
3570 (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3571 (PCB).la_ptr++;
3572 if (ag_key_index[(PCB).sn]) {
3573 unsigned ag_k = ag_key_index[(PCB).sn];
3574 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3575 if (ag_ch <= 255) {
3576 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3577 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3578 }
3579 }
3580 }
3581 while ((PCB).token_number == (dsl_token_type) ag_t);
3582 (PCB).la_ptr = (PCB).pointer;
3583 return 1;
3584 }
3585
3586 static int ag_action_3_r_proc(void) {
3587 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3588 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3589 (PCB).btsx = 0, (PCB).drt = -1;
3590 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3591 ag_ra();
3592 return (PCB).exit_flag == AG_RUNNING_CODE;
3593 }
3594
3595 static int ag_action_3_s_proc(void) {
3596 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3597 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3598 (PCB).btsx = 0, (PCB).drt = -1;
3599 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3600 ag_ra();
3601 return (PCB).exit_flag == AG_RUNNING_CODE;
3602 }
3603
3604 static int ag_action_4_r_proc(void) {
3605 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3606 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3607 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3608 return 1;
3609 }
3610
3611 static int ag_action_2_proc(void) {
3612 (PCB).btsx = 0, (PCB).drt = -1;
3613 if ((PCB).ssx >= 128) {
3614 (PCB).exit_flag = AG_STACK_ERROR_CODE;
3615 PARSER_STACK_OVERFLOW;
3616 }
3617 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3618 GET_CONTEXT;
3619 (PCB).ss[(PCB).ssx] = (PCB).sn;
3620 (PCB).ssx++;
3621 (PCB).sn = (PCB).ag_ap;
3622 ag_track();
3623 return 0;
3624 }
3625
3626 static int ag_action_9_proc(void) {
3627 if ((PCB).drt == -1) {
3628 (PCB).drt=(PCB).token_number;
3629 (PCB).dssx=(PCB).ssx;
3630 (PCB).dsn=(PCB).sn;
3631 }
3632 ag_prot();
3633 (PCB).vs[(PCB).ssx] = ag_null_value;
3634 GET_CONTEXT;
3635 (PCB).ss[(PCB).ssx] = (PCB).sn;
3636 (PCB).ssx++;
3637 (PCB).sn = (PCB).ag_ap;
3638 (PCB).la_ptr = (PCB).pointer;
3639 return (PCB).exit_flag == AG_RUNNING_CODE;
3640 }
3641
3642 static int ag_action_2_r_proc(void) {
3643 (PCB).ssx++;
3644 (PCB).sn = (PCB).ag_ap;
3645 return 0;
3646 }
3647
3648 static int ag_action_7_proc(void) {
3649 --(PCB).ssx;
3650 (PCB).la_ptr = (PCB).pointer;
3651 (PCB).exit_flag = AG_SUCCESS_CODE;
3652 return 0;
3653 }
3654
3655 static int ag_action_1_proc(void) {
3656 ag_track();
3657 (PCB).exit_flag = AG_SUCCESS_CODE;
3658 return 0;
3659 }
3660
3661 static int ag_action_1_r_proc(void) {
3662 (PCB).exit_flag = AG_SUCCESS_CODE;
3663 return 0;
3664 }
3665
3666 static int ag_action_1_s_proc(void) {
3667 (PCB).exit_flag = AG_SUCCESS_CODE;
3668 return 0;
3669 }
3670
3671 static int ag_action_4_proc(void) {
3672 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3673 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3674 (PCB).btsx = 0, (PCB).drt = -1;
3675 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3676 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3677 else GET_CONTEXT;
3678 (PCB).ss[(PCB).ssx] = (PCB).sn;
3679 ag_track();
3680 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3681 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3682 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3683 do {
3684 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3685 if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3686 else ag_t2 = ag_tx;
3687 } while (ag_t1 < ag_t2);
3688 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3689 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3690 REDUCTION_TOKEN_ERROR; break;}
3691 (PCB).ag_ap = ag_pstt[ag_t1];
3692 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3693 }
3694 return 0;
3695 }
3696
3697 static int ag_action_3_proc(void) {
3698 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3699 (PCB).btsx = 0, (PCB).drt = -1;
3700 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3701 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3702 else GET_CONTEXT;
3703 (PCB).ss[(PCB).ssx] = (PCB).sn;
3704 ag_track();
3705 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3706 ag_ra();
3707 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3708 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3709 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3710 do {
3711 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3712 if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3713 else ag_t2 = ag_tx;
3714 } while (ag_t1 < ag_t2);
3715 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3716 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3717 REDUCTION_TOKEN_ERROR; break;}
3718 (PCB).ag_ap = ag_pstt[ag_t1];
3719 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3720 }
3721 return 0;
3722 }
3723
3724 static int ag_action_8_proc(void) {
3725 ag_undo();
3726 (PCB).la_ptr = (PCB).pointer;
3727 (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
3728 ag_diagnose();
3729 SYNTAX_ERROR;
3730 {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
3731 return (PCB).exit_flag == AG_RUNNING_CODE;
3732 }
3733
3734 static int ag_action_5_proc(void) {
3735 int ag_sd = ag_fl[(PCB).ag_ap];
3736 (PCB).btsx = 0, (PCB).drt = -1;
3737 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3738 else {
3739 GET_CONTEXT;
3740 (PCB).ss[(PCB).ssx] = (PCB).sn;
3741 }
3742 (PCB).la_ptr = (PCB).pointer;
3743 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3744 ag_ra();
3745 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3746 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3747 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3748 do {
3749 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3750 if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3751 else ag_t2 = ag_tx;
3752 } while (ag_t1 < ag_t2);
3753 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3754 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3755 REDUCTION_TOKEN_ERROR; break;}
3756 (PCB).ag_ap = ag_pstt[ag_t1];
3757 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
3758 }
3759 return (PCB).exit_flag == AG_RUNNING_CODE;
3760 }
3761
3762 static int ag_action_6_proc(void) {
3763 int ag_sd = ag_fl[(PCB).ag_ap];
3764 (PCB).reduction_token = (dsl_token_type) ag_ptt[(PCB).ag_ap];
3765 if ((PCB).drt == -1) {
3766 (PCB).drt=(PCB).token_number;
3767 (PCB).dssx=(PCB).ssx;
3768 (PCB).dsn=(PCB).sn;
3769 }
3770 if (ag_sd) {
3771 (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3772 }
3773 else {
3774 ag_prot();
3775 (PCB).vs[(PCB).ssx] = ag_null_value;
3776 GET_CONTEXT;
3777 (PCB).ss[(PCB).ssx] = (PCB).sn;
3778 }
3779 (PCB).la_ptr = (PCB).pointer;
3780 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3781 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3782 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3783 do {
3784 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3785 if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3786 else ag_t2 = ag_tx;
3787 } while (ag_t1 < ag_t2);
3788 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3789 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3790 REDUCTION_TOKEN_ERROR; break;}
3791 (PCB).ag_ap = ag_pstt[ag_t1];
3792 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
3793 }
3794 return (PCB).exit_flag == AG_RUNNING_CODE;
3795 }
3796
3797
3798 void init_dsl(void) {
3799 (PCB).la_ptr = (PCB).pointer;
3800 (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
3801 (PCB).exit_flag = AG_RUNNING_CODE;
3802 (PCB).line = FIRST_LINE;
3803 (PCB).column = FIRST_COLUMN;
3804 (PCB).btsx = 0, (PCB).drt = -1;
3805 }
3806
3807 void dsl(void) {
3808 init_dsl();
3809 (PCB).exit_flag = AG_RUNNING_CODE;
3810 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3811 unsigned ag_t1 = ag_sbt[(PCB).sn];
3812 if (ag_tstt[ag_t1]) {
3813 unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
3814 (PCB).token_number = (dsl_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3815 (PCB).la_ptr++;
3816 if (ag_key_index[(PCB).sn]) {
3817 unsigned ag_k = ag_key_index[(PCB).sn];
3818 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3819 if (ag_ch <= 255) {
3820 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3821 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3822 }
3823 }
3824 do {
3825 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3826 if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number)
3827 ag_t1 = ag_tx + 1;
3828 else ag_t2 = ag_tx;
3829 } while (ag_t1 < ag_t2);
3830 if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number)
3831 ag_t1 = ag_sbe[(PCB).sn];
3832 }
3833 (PCB).ag_ap = ag_pstt[ag_t1];
3834 (ag_gt_procs_scan[ag_astt[ag_t1]])();
3835 }
3836 }
3837
3838