diff options
Diffstat (limited to 'contrib/groff')
25 files changed, 139 insertions, 10344 deletions
diff --git a/contrib/groff/FREEBSD-Xlist b/contrib/groff/FREEBSD-Xlist new file mode 100644 index 0000000..4549878 --- /dev/null +++ b/contrib/groff/FREEBSD-Xlist @@ -0,0 +1,3 @@ +$FreeBSD$ +*/arch +*/src/libs/snprintf diff --git a/contrib/groff/FREEBSD-upgrade b/contrib/groff/FREEBSD-upgrade new file mode 100644 index 0000000..bf4fe11 --- /dev/null +++ b/contrib/groff/FREEBSD-upgrade @@ -0,0 +1,31 @@ +$FreeBSD$ + +This directory contains virgin copies of the original distribution files +on a "vendor" branch. Do not, under any circumstances, attempt to upgrade +the files in this directory via patches and a cvs commit. + +To upgrade to a newer version of groff, when it is available: + 1. Unpack the new version into an empty directory. + [Do not make ANY changes to the files.] + + 2. Use the command: + cvs import -m 'Virgin import of FSF groff v<version>' \ + src/contrib/groff FSF v<version> + + For example, to do the import of version 1.19.2, I typed: + cvs import -m 'Virgin import of FSF groff v1.19.2' \ + src/contrib/groff FSF v1_19_2 + + 3. Follow the instructions printed out in step 2 to resolve any + conflicts between local FreeBSD changes and the newer version. + +Do not, under any circumstances, deviate from this procedure. + +To make local changes to groff, simply patch and commit to the main +branch (aka HEAD). Never make local changes on the FSF branch. + +All local changes should be submitted to Werner Lemberg <wl@gnu.org> or +Ted Harding <ted.harding@nessie.mcc.ac.uk> for inclusion in the next +vendor release. + +ru@FreeBSD.org - 20 October 2005 diff --git a/contrib/groff/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man index 6c56457..d626376 100644 --- a/contrib/groff/src/devices/grotty/grotty.man +++ b/contrib/groff/src/devices/grotty/grotty.man @@ -1,4 +1,5 @@ .ig +$FreeBSD$ Copyright (C) 1989-2000, 2001, 2002, 2003 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of @@ -52,7 +53,8 @@ should be invoked by using the command with a .BR \-Tascii , -.B \-Tlatin1 +.BR \-Tlatin1 , +.B \-Tkoi8-r or .B \-Tutf8 option on ASCII based systems, and with @@ -238,6 +240,7 @@ to the search path for font and device description files; is the name of the device, usually .BR ascii , .BR latin1 , +.BR koi8-r , .BR utf8 , or .BR cp1047 . @@ -323,6 +326,18 @@ Font description file for font of .B ascii device. +.TP +.B @FONTDIR@/devkoi8-r/DESC +Device description file for +.B koi8-r +device. +.TP +.BI @FONTDIR@/devkoi8-r/ F +Font description file for font +.I F +of +.B koi8-r +device. . .TP .B @FONTDIR@/devlatin1/DESC diff --git a/contrib/groff/src/include/getopt.h b/contrib/groff/src/include/getopt.h deleted file mode 100644 index a4e78cb..0000000 --- a/contrib/groff/src/include/getopt.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989-1994,1996-1999,2001,2003,2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _GETOPT_H - -#ifndef __need_getopt -# define _GETOPT_H 1 -#endif - -/* Standalone applications should #define __GETOPT_PREFIX to an - identifier that prefixes the external functions and variables - defined in this header. When this happens, include the - headers that might declare getopt so that they will not cause - confusion if included after this file. Then systematically rename - identifiers so that they do not collide with the system functions - and variables. Renaming avoids problems with some compilers and - linkers. */ -#if defined __GETOPT_PREFIX && !defined __need_getopt -# include <stdlib.h> -# include <stdio.h> -# if HAVE_UNISTD_H -# include <unistd.h> -# endif -# undef __need_getopt -# undef getopt -# undef getopt_long -# undef getopt_long_only -# undef optarg -# undef opterr -# undef optind -# undef optopt -# define __GETOPT_CONCAT(x, y) x ## y -# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) -# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) -# define getopt __GETOPT_ID (getopt) -# define getopt_long __GETOPT_ID (getopt_long) -# define getopt_long_only __GETOPT_ID (getopt_long_only) -# define optarg __GETOPT_ID (optarg) -# define opterr __GETOPT_ID (opterr) -# define optind __GETOPT_ID (optind) -# define optopt __GETOPT_ID (optopt) -#endif - -/* Standalone applications get correct prototypes for getopt_long and - getopt_long_only; they declare "char **argv". libc uses prototypes - with "char *const *argv" that are incorrect because getopt_long and - getopt_long_only can permute argv; this is required for backward - compatibility (e.g., for LSB 2.0.1). - - This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', - but it caused redefinition warnings if both unistd.h and getopt.h were - included, since unistd.h includes getopt.h having previously defined - __need_getopt. - - The only place where __getopt_argv_const is used is in definitions - of getopt_long and getopt_long_only below, but these are visible - only if __need_getopt is not defined, so it is quite safe to rewrite - the conditional as follows: -*/ -#if !defined __need_getopt -# if defined __GETOPT_PREFIX -# define __getopt_argv_const /* empty */ -# else -# define __getopt_argv_const const -# endif -#endif - -/* If __GNU_LIBRARY__ is not already defined, either we are being used - standalone, or this is the first header included in the source file. - If we are being used with glibc, we need to include <features.h>, but - that does not exist if we are standalone. So: if __GNU_LIBRARY__ is - not defined, include <ctype.h>, which will pull in <features.h> for us - if it's from glibc. (Why ctype.h? It's guaranteed to exist and it - doesn't flood the namespace with stuff the way some other headers do.) */ -#if !defined __GNU_LIBRARY__ -# include <ctype.h> -#endif - -#ifndef __THROW -# ifndef __GNUC_PREREQ -# define __GNUC_PREREQ(maj, min) (0) -# endif -# if defined __cplusplus && __GNUC_PREREQ (2,8) -# define __THROW throw () -# else -# define __THROW -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -#ifndef __need_getopt -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ - const char *name; - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -# define no_argument 0 -# define required_argument 1 -# define optional_argument 2 -#endif /* need getopt */ - - -/* Get definitions and prototypes for functions to process the - arguments in ARGV (ARGC of them, minus the program name) for - options given in OPTS. - - Return the option character from OPTS just read. Return -1 when - there are no more options. For unrecognized options, or options - missing arguments, `optopt' is set to the option letter, and '?' is - returned. - - The OPTS string is a list of characters which are recognized option - letters, optionally followed by colons, specifying that that letter - takes an argument, to be placed in `optarg'. - - If a letter in OPTS is followed by two colons, its argument is - optional. This behavior is specific to the GNU `getopt'. - - The argument `--' causes premature termination of argument - scanning, explicitly telling `getopt' that there are no more - options. - - If OPTS begins with `--', then non-option arguments are treated as - arguments to the option '\0'. This behavior is specific to the GNU - `getopt'. */ - -extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) - __THROW; - -#ifndef __need_getopt -extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind) - __THROW; -extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, - const char *__shortopts, - const struct option *__longopts, int *__longind) - __THROW; - -#endif - -#ifdef __cplusplus -} -#endif - -/* Make sure we later can get all the definitions and declarations. */ -#undef __need_getopt - -#endif /* getopt.h */ diff --git a/contrib/groff/src/libs/libgroff/cmap.cpp b/contrib/groff/src/libs/libgroff/cmap.cpp index 2691c01..91a42f3 100644 --- a/contrib/groff/src/libs/libgroff/cmap.cpp +++ b/contrib/groff/src/libs/libgroff/cmap.cpp @@ -18,13 +18,18 @@ You should have received a copy of the GNU General Public License along with groff; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* $FreeBSD$ */ + #include <ctype.h> +#ifdef __FreeBSD__ +#include <locale.h> +#endif #include "cmap.h" cmap cmlower(CMAP_BUILTIN); cmap cmupper(CMAP_BUILTIN); -#ifdef isascii +#if defined(isascii) && !defined(__FreeBSD__) #define ISASCII(c) isascii(c) #else #define ISASCII(c) (1) @@ -49,6 +54,9 @@ cmap_init::cmap_init() if (initialised) return; initialised = 1; +#ifdef __FreeBSD__ + (void) setlocale(LC_CTYPE, ""); +#endif for (int i = 0; i <= UCHAR_MAX; i++) { cmupper.v[i] = ISASCII(i) && islower(i) ? toupper(i) : i; cmlower.v[i] = ISASCII(i) && isupper(i) ? tolower(i) : i; diff --git a/contrib/groff/src/libs/libgroff/cset.cpp b/contrib/groff/src/libs/libgroff/cset.cpp index 8199e62..6d79d7e 100644 --- a/contrib/groff/src/libs/libgroff/cset.cpp +++ b/contrib/groff/src/libs/libgroff/cset.cpp @@ -18,7 +18,12 @@ You should have received a copy of the GNU General Public License along with groff; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* $FreeBSD$ */ + #include <ctype.h> +#ifdef __FreeBSD__ +#include <locale.h> +#endif #include "lib.h" #include "cset.h" @@ -35,7 +40,7 @@ cset csprint(CSET_BUILTIN); cset csgraph(CSET_BUILTIN); cset cscntrl(CSET_BUILTIN); -#ifdef isascii +#if defined(isascii) && !defined(__FreeBSD__) #define ISASCII(c) isascii(c) #else #define ISASCII(c) (1) @@ -88,6 +93,9 @@ cset_init::cset_init() if (initialised) return; initialised = 1; +#ifdef __FreeBSD__ + (void) setlocale(LC_CTYPE, ""); +#endif for (int i = 0; i <= UCHAR_MAX; i++) { csalpha.v[i] = ISASCII(i) && isalpha(i); csupper.v[i] = ISASCII(i) && isupper(i); diff --git a/contrib/groff/src/libs/libgroff/getopt.c b/contrib/groff/src/libs/libgroff/getopt.c deleted file mode 100644 index bcb81c8..0000000 --- a/contrib/groff/src/libs/libgroff/getopt.c +++ /dev/null @@ -1,1241 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to drepper@gnu.org - before changing it! - Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. - Ditto for AIX 3.2 and <stdlib.h>. */ -#ifndef _NO_PROTO -# define _NO_PROTO -#endif - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <stdio.h> - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -# include <stdlib.h> -# include <unistd.h> -#endif /* GNU C library. */ - -#include <string.h> - -#ifdef VMS -# include <unixlib.h> -#endif - -#ifdef _LIBC -# include <libintl.h> -#else -# include "gettext.h" -# define _(msgid) gettext (msgid) -#endif - -#if defined _LIBC && defined USE_IN_LIBIO -# include <wchar.h> -#endif - -#ifndef attribute_hidden -# define attribute_hidden -#endif - -/* Unlike standard Unix `getopt', functions like `getopt_long' - let the user intersperse the options with the other arguments. - - As `getopt_long' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Using `getopt' or setting the environment variable POSIXLY_CORRECT - disables permutation. - Then the application's behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" -#include "getopt_int.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* 1003.2 says this must be 1 before any call. */ -int optind = 1; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Keep a global copy of all internal members of getopt_data. */ - -static struct _getopt_data getopt_data; - - -#ifndef __GNU_LIBRARY__ - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -#ifndef getenv -extern char *getenv (); -#endif - -#endif /* not __GNU_LIBRARY__ */ - -#ifdef _LIBC -/* Stored original parameters. - XXX This is no good solution. We should rather copy the args so - that we can compare them later. But we must not use malloc(3). */ -extern int __libc_argc; -extern char **__libc_argv; - -/* Bash 2.0 gives us an environment variable containing flags - indicating ARGV elements that should not be considered arguments. */ - -# ifdef USE_NONOPTION_FLAGS -/* Defined in getopt_init.c */ -extern char *__getopt_nonoption_flags; -# endif - -# ifdef USE_NONOPTION_FLAGS -# define SWAP_FLAGS(ch1, ch2) \ - if (d->__nonoption_flags_len > 0) \ - { \ - char __tmp = __getopt_nonoption_flags[ch1]; \ - __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ - __getopt_nonoption_flags[ch2] = __tmp; \ - } -# else -# define SWAP_FLAGS(ch1, ch2) -# endif -#else /* !_LIBC */ -# define SWAP_FLAGS(ch1, ch2) -#endif /* _LIBC */ - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -static void -exchange (char **argv, struct _getopt_data *d) -{ - int bottom = d->__first_nonopt; - int middle = d->__last_nonopt; - int top = d->optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - -#if defined _LIBC && defined USE_NONOPTION_FLAGS - /* First make sure the handling of the `__getopt_nonoption_flags' - string can work normally. Our top argument must be in the range - of the string. */ - if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) - { - /* We must extend the array. The user plays games with us and - presents new arguments. */ - char *new_str = malloc (top + 1); - if (new_str == NULL) - d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; - else - { - memset (__mempcpy (new_str, __getopt_nonoption_flags, - d->__nonoption_flags_max_len), - '\0', top + 1 - d->__nonoption_flags_max_len); - d->__nonoption_flags_max_len = top + 1; - __getopt_nonoption_flags = new_str; - } - } -#endif - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - SWAP_FLAGS (bottom + i, middle + i); - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - d->__first_nonopt += (d->optind - d->__last_nonopt); - d->__last_nonopt = d->optind; -} - -/* Initialize the internal data when the first call is made. */ - -static const char * -_getopt_initialize (int argc, char **argv, const char *optstring, - int posixly_correct, struct _getopt_data *d) -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - d->__first_nonopt = d->__last_nonopt = d->optind; - - d->__nextchar = NULL; - - d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - d->__ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - d->__ordering = REQUIRE_ORDER; - ++optstring; - } - else if (d->__posixly_correct) - d->__ordering = REQUIRE_ORDER; - else - d->__ordering = PERMUTE; - -#if defined _LIBC && defined USE_NONOPTION_FLAGS - if (!d->__posixly_correct - && argc == __libc_argc && argv == __libc_argv) - { - if (d->__nonoption_flags_max_len == 0) - { - if (__getopt_nonoption_flags == NULL - || __getopt_nonoption_flags[0] == '\0') - d->__nonoption_flags_max_len = -1; - else - { - const char *orig_str = __getopt_nonoption_flags; - int len = d->__nonoption_flags_max_len = strlen (orig_str); - if (d->__nonoption_flags_max_len < argc) - d->__nonoption_flags_max_len = argc; - __getopt_nonoption_flags = - (char *) malloc (d->__nonoption_flags_max_len); - if (__getopt_nonoption_flags == NULL) - d->__nonoption_flags_max_len = -1; - else - memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), - '\0', d->__nonoption_flags_max_len - len); - } - } - d->__nonoption_flags_len = d->__nonoption_flags_max_len; - } - else - d->__nonoption_flags_len = 0; -#endif - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns -1. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. - - If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT - environment variable were set. */ - -int -_getopt_internal_r (int argc, char **argv, const char *optstring, - const struct option *longopts, int *longind, - int long_only, int posixly_correct, struct _getopt_data *d) -{ - int print_errors = d->opterr; - if (optstring[0] == ':') - print_errors = 0; - - if (argc < 1) - return -1; - - d->optarg = NULL; - - if (d->optind == 0 || !d->__initialized) - { - if (d->optind == 0) - d->optind = 1; /* Don't scan ARGV[0], the program name. */ - optstring = _getopt_initialize (argc, argv, optstring, - posixly_correct, d); - d->__initialized = 1; - } - - /* Test whether ARGV[optind] points to a non-option argument. - Either it does not have option syntax, or there is an environment flag - from the shell indicating it is not an option. The later information - is only used when the used in the GNU libc. */ -#if defined _LIBC && defined USE_NONOPTION_FLAGS -# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ - || (d->optind < d->__nonoption_flags_len \ - && __getopt_nonoption_flags[d->optind] == '1')) -#else -# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') -#endif - - if (d->__nextchar == NULL || *d->__nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been - moved back by the user (who may also have changed the arguments). */ - if (d->__last_nonopt > d->optind) - d->__last_nonopt = d->optind; - if (d->__first_nonopt > d->optind) - d->__first_nonopt = d->optind; - - if (d->__ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (d->__first_nonopt != d->__last_nonopt - && d->__last_nonopt != d->optind) - exchange ((char **) argv, d); - else if (d->__last_nonopt != d->optind) - d->__first_nonopt = d->optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (d->optind < argc && NONOPTION_P) - d->optind++; - d->__last_nonopt = d->optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (d->optind != argc && !strcmp (argv[d->optind], "--")) - { - d->optind++; - - if (d->__first_nonopt != d->__last_nonopt - && d->__last_nonopt != d->optind) - exchange ((char **) argv, d); - else if (d->__first_nonopt == d->__last_nonopt) - d->__first_nonopt = d->optind; - d->__last_nonopt = argc; - - d->optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (d->optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (d->__first_nonopt != d->__last_nonopt) - d->optind = d->__first_nonopt; - return -1; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if (NONOPTION_P) - { - if (d->__ordering == REQUIRE_ORDER) - return -1; - d->optarg = argv[d->optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - d->__nextchar = (argv[d->optind] + 1 - + (longopts != NULL && argv[d->optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[d->optind][1] == '-' - || (long_only && (argv[d->optind][2] - || !strchr (optstring, argv[d->optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = -1; - int option_index; - - for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) - { - if ((unsigned int) (nameend - d->__nextchar) - == (unsigned int) strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else if (long_only - || pfound->has_arg != p->has_arg - || pfound->flag != p->flag - || pfound->val != p->val) - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[d->optind]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[d->optind]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optind++; - d->optopt = 0; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - d->optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - d->optarg = nameend + 1; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (argv[d->optind - 1][1] == '-') - { - /* --option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("\ -%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); -#else - fprintf (stderr, _("\ -%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); -#endif - } - else - { - /* +option or -option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("\ -%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[d->optind - 1][0], - pfound->name); -#else - fprintf (stderr, _("\ -%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[d->optind - 1][0], - pfound->name); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - - d->__nextchar += strlen (d->__nextchar); - - d->optopt = pfound->val; - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (d->optind < argc) - d->optarg = argv[d->optind++]; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optopt = pfound->val; - return optstring[0] == ':' ? ':' : '?'; - } - } - d->__nextchar += strlen (d->__nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[d->optind][1] == '-' - || strchr (optstring, *d->__nextchar) == NULL) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (argv[d->optind][1] == '-') - { - /* --option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), - argv[0], d->__nextchar); -#else - fprintf (stderr, _("%s: unrecognized option `--%s'\n"), - argv[0], d->__nextchar); -#endif - } - else - { - /* +option or -option */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[d->optind][0], d->__nextchar); -#else - fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[d->optind][0], d->__nextchar); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - d->__nextchar = (char *) ""; - d->optind++; - d->optopt = 0; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *d->__nextchar++; - char *temp = strchr (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*d->__nextchar == '\0') - ++d->optind; - - if (temp == NULL || c == ':') - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - int n; -#endif - - if (d->__posixly_correct) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: illegal option -- %c\n"), - argv[0], c); -#else - fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); -#endif - } - else - { -#if defined _LIBC && defined USE_IN_LIBIO - n = __asprintf (&buf, _("%s: invalid option -- %c\n"), - argv[0], c); -#else - fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); -#endif - } - -#if defined _LIBC && defined USE_IN_LIBIO - if (n >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#endif - } - d->optopt = c; - return '?'; - } - /* Convenience. Treat POSIX -W foo same as long option --foo */ - if (temp[0] == 'W' && temp[1] == ';') - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = 0; - int option_index; - - /* This is an option that requires an argument. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - d->optind++; - } - else if (d->optind == argc) - { - if (print_errors) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, - _("%s: option requires an argument -- %c\n"), - argv[0], c) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option requires an argument -- %c\n"), - argv[0], c); -#endif - } - d->optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - return c; - } - else - /* We already incremented `d->optind' once; - increment it again when taking next ARGV-elt as argument. */ - d->optarg = argv[d->optind++]; - - /* optarg is now the argument, see if it's in the - table of longopts. */ - - for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; - nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) - { - if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - if (ambig && !exact) - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[d->optind]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[d->optind]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - d->optind++; - return '?'; - } - if (pfound != NULL) - { - option_index = indfound; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - d->optarg = nameend + 1; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name); -#endif - } - - d->__nextchar += strlen (d->__nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (d->optind < argc) - d->optarg = argv[d->optind++]; - else - { - if (print_errors) - { -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 - |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[d->optind - 1]); -#endif - } - d->__nextchar += strlen (d->__nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - d->__nextchar += strlen (d->__nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - d->__nextchar = NULL; - return 'W'; /* Let the application handle it. */ - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - d->optind++; - } - else - d->optarg = NULL; - d->__nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*d->__nextchar != '\0') - { - d->optarg = d->__nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - d->optind++; - } - else if (d->optind == argc) - { - if (print_errors) - { - /* 1003.2 specifies the format of this message. */ -#if defined _LIBC && defined USE_IN_LIBIO - char *buf; - - if (__asprintf (&buf, _("\ -%s: option requires an argument -- %c\n"), - argv[0], c) >= 0) - { - _IO_flockfile (stderr); - - int old_flags2 = ((_IO_FILE *) stderr)->_flags2; - ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; - - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L"%s", buf); - else - fputs (buf, stderr); - - ((_IO_FILE *) stderr)->_flags2 = old_flags2; - _IO_funlockfile (stderr); - - free (buf); - } -#else - fprintf (stderr, - _("%s: option requires an argument -- %c\n"), - argv[0], c); -#endif - } - d->optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - d->optarg = argv[d->optind++]; - d->__nextchar = NULL; - } - } - return c; - } -} - -int -_getopt_internal (int argc, char **argv, const char *optstring, - const struct option *longopts, int *longind, - int long_only, int posixly_correct) -{ - int result; - - getopt_data.optind = optind; - getopt_data.opterr = opterr; - - result = _getopt_internal_r (argc, argv, optstring, longopts, longind, - long_only, posixly_correct, &getopt_data); - - optind = getopt_data.optind; - optarg = getopt_data.optarg; - optopt = getopt_data.optopt; - - return result; -} - -/* glibc gets a LSB-compliant getopt. - Standalone applications get a POSIX-compliant getopt. */ -#if _LIBC -enum { POSIXLY_CORRECT = 0 }; -#else -enum { POSIXLY_CORRECT = 1 }; -#endif - -int -getopt (int argc, char *const *argv, const char *optstring) -{ - return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0, - POSIXLY_CORRECT); -} - - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == -1) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/contrib/groff/src/libs/libgroff/getopt1.c b/contrib/groff/src/libs/libgroff/getopt1.c deleted file mode 100644 index 5acd224..0000000 --- a/contrib/groff/src/libs/libgroff/getopt1.c +++ /dev/null @@ -1,174 +0,0 @@ -/* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifdef _LIBC -# include <getopt.h> -#else -# include "getopt.h" -#endif -#include "getopt_int.h" - -#include <stdio.h> - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#include <stdlib.h> -#endif - -#ifndef NULL -#define NULL 0 -#endif - -int -getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, (char **) argv, options, long_options, - opt_index, 0, 0); -} - -int -_getopt_long_r (int argc, char **argv, const char *options, - const struct option *long_options, int *opt_index, - struct _getopt_data *d) -{ - return _getopt_internal_r (argc, argv, options, long_options, opt_index, - 0, 0, d); -} - -/* Like getopt_long, but '-' as well as '--' can indicate a long option. - If an option that starts with '-' (not '--') doesn't match a long option, - but does match a short option, it is parsed as a short option - instead. */ - -int -getopt_long_only (int argc, char *__getopt_argv_const *argv, - const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, (char **) argv, options, long_options, - opt_index, 1, 0); -} - -int -_getopt_long_only_r (int argc, char **argv, const char *options, - const struct option *long_options, int *opt_index, - struct _getopt_data *d) -{ - return _getopt_internal_r (argc, argv, options, long_options, opt_index, - 1, 0, d); -} - - -#ifdef TEST - -#include <stdio.h> - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - int option_index = 0; - static struct option long_options[] = - { - {"add", 1, 0, 0}, - {"append", 0, 0, 0}, - {"delete", 1, 0, 0}, - {"verbose", 0, 0, 0}, - {"create", 0, 0, 0}, - {"file", 1, 0, 0}, - {0, 0, 0, 0} - }; - - c = getopt_long (argc, argv, "abc:d:0123456789", - long_options, &option_index); - if (c == -1) - break; - - switch (c) - { - case 0: - printf ("option %s", long_options[option_index].name); - if (optarg) - printf (" with arg %s", optarg); - printf ("\n"); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case 'd': - printf ("option d with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/contrib/groff/src/libs/libgroff/invalid.cpp b/contrib/groff/src/libs/libgroff/invalid.cpp index 959aef9..ac0c71d 100644 --- a/contrib/groff/src/libs/libgroff/invalid.cpp +++ b/contrib/groff/src/libs/libgroff/invalid.cpp @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with groff; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* $FreeBSD$ */ + #include "lib.h" // Table of invalid input characters. @@ -31,8 +33,8 @@ char invalid_char_table[256]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/contrib/groff/src/preproc/eqn/eqn.cpp b/contrib/groff/src/preproc/eqn/eqn.cpp deleted file mode 100644 index 71b69cd..0000000 --- a/contrib/groff/src/preproc/eqn/eqn.cpp +++ /dev/null @@ -1,1169 +0,0 @@ -#ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; -#endif -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 20 "eqn.y" -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -#include "lib.h" -#include "box.h" -extern int non_empty_flag; -int yylex(); -void yyerror(const char *); -#line 31 "eqn.y" -typedef union { - char *str; - box *b; - pile_box *pb; - matrix_box *mb; - int n; - column *col; -} YYSTYPE; -#line 31 "y.tab.c" -#define OVER 257 -#define SMALLOVER 258 -#define SQRT 259 -#define SUB 260 -#define SUP 261 -#define LPILE 262 -#define RPILE 263 -#define CPILE 264 -#define PILE 265 -#define LEFT 266 -#define RIGHT 267 -#define TO 268 -#define FROM 269 -#define SIZE 270 -#define FONT 271 -#define ROMAN 272 -#define BOLD 273 -#define ITALIC 274 -#define FAT 275 -#define ACCENT 276 -#define BAR 277 -#define UNDER 278 -#define ABOVE 279 -#define TEXT 280 -#define QUOTED_TEXT 281 -#define FWD 282 -#define BACK 283 -#define DOWN 284 -#define UP 285 -#define MATRIX 286 -#define COL 287 -#define LCOL 288 -#define RCOL 289 -#define CCOL 290 -#define MARK 291 -#define LINEUP 292 -#define TYPE 293 -#define VCENTER 294 -#define PRIME 295 -#define SPLIT 296 -#define NOSPLIT 297 -#define UACCENT 298 -#define SPECIAL 299 -#define SPACE 300 -#define GFONT 301 -#define GSIZE 302 -#define DEFINE 303 -#define NDEFINE 304 -#define TDEFINE 305 -#define SDEFINE 306 -#define UNDEF 307 -#define IFDEF 308 -#define INCLUDE 309 -#define DELIM 310 -#define CHARTYPE 311 -#define SET 312 -#define GRFONT 313 -#define GBFONT 314 -#define YYERRCODE 256 -short yylhs[] = { -1, - 0, 0, 6, 6, 1, 1, 1, 2, 2, 2, - 2, 2, 3, 3, 3, 3, 4, 4, 7, 7, - 7, 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, 8, 11, 11, 12, 12, 13, - 13, 16, 16, 15, 15, 14, 14, 14, 14, 9, - 9, 10, 10, 10, -}; -short yylen[] = { 2, - 0, 1, 1, 2, 1, 2, 2, 1, 3, 3, - 5, 5, 1, 2, 3, 3, 1, 3, 1, 3, - 5, 1, 1, 2, 2, 1, 1, 1, 3, 2, - 2, 2, 2, 4, 5, 3, 2, 2, 2, 3, - 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, - 3, 3, 2, 3, 1, 1, 3, 3, 4, 1, - 2, 1, 3, 3, 4, 2, 2, 2, 2, 1, - 1, 1, 1, 1, -}; -short yydefred[] = { 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 22, 23, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 27, 28, 0, - 0, 3, 5, 0, 13, 0, 0, 17, 14, 70, - 71, 0, 0, 55, 31, 32, 33, 30, 73, 74, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 7, 0, 0, 24, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, - 39, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, - 0, 29, 15, 16, 9, 0, 0, 20, 18, 40, - 41, 0, 58, 0, 0, 0, 0, 66, 67, 68, - 69, 34, 61, 0, 0, 0, 0, 59, 35, 0, - 0, 0, 11, 12, 21, 0, 64, 0, 0, 65, -}; -short yydgoto[] = { 31, - 32, 33, 34, 35, 36, 84, 38, 43, 44, 52, - 85, 45, 98, 99, 118, 131, -}; -short yysindex[] = { 1488, - 1527, -120, -120, -120, -120, -123, -249, -249, 1566, 1566, - 1566, 1566, 0, 0, -249, -249, -249, -249, -115, 1488, - 1488, -249, 1566, -256, -251, -249, 0, 0, 0, 1488, - 0, 0, 0, -221, 0, -233, 1488, 0, 0, 0, - 0, 1488, -85, 0, 0, 0, 0, 0, 0, 0, - 0, 1488, 1566, 1566, -195, -195, -195, -195, 1566, 1566, - 1566, 1566, -272, 0, 0, 1566, -195, 0, 0, 1566, - 1402, 1527, 1527, 1527, 1527, 1566, 1566, 1566, 0, 0, - 0, 1566, 0, 1488, -113, 1488, 1444, -195, -195, -195, - -195, -195, -195, -117, -117, -117, -117, -118, 0, -195, - -195, 0, 0, 0, 0, -167, -189, 0, 0, 0, - 0, 1488, 0, -106, -123, 1488, -83, 0, 0, 0, - 0, 0, 0, 1527, 1527, 1566, 1488, 0, 0, 1488, - -105, 1488, 0, 0, 0, 1488, 0, -104, 1488, 0, -}; -short yyrindex[] = { 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 1220, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 128, 363, 406, 0, 0, - 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -103, 0, 0, 185, 492, 727, 770, - 813, 856, 1091, 0, 0, 0, 0, 0, 0, 1134, - 1177, 0, 0, 0, 0, 42, 1220, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -102, 0, 0, -101, - 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, -}; -short yygindex[] = { 0, - -7, -69, 3, -66, 458, 9, -26, 52, 27, -63, - -32, 54, 0, -35, 2, -59, -}; -#define YYTABLESIZE 1865 -short yytable[] = { 49, - 8, 50, 42, 39, 105, 116, 122, 63, 37, 8, - 109, 113, 64, 65, 94, 95, 96, 97, 128, 137, - 140, 56, 57, 62, 68, 63, 76, 77, 69, 83, - 40, 41, 51, 53, 54, 72, 73, 86, 71, 132, - 1, 10, 78, 79, 80, 2, 74, 75, 66, 108, - 10, 129, 70, 114, 133, 134, 46, 47, 48, 135, - 87, 81, 123, 83, 82, 0, 59, 60, 61, 62, - 76, 126, 138, 0, 103, 104, 83, 106, 0, 83, - 78, 79, 80, 0, 42, 0, 78, 79, 80, 72, - 73, 0, 0, 42, 8, 0, 119, 120, 121, 81, - 124, 125, 82, 0, 0, 81, 0, 0, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, - 127, 0, 83, 8, 130, 8, 8, 43, 0, 0, - 0, 83, 0, 0, 0, 10, 43, 0, 0, 0, - 130, 51, 0, 0, 139, 117, 117, 117, 117, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 0, 40, - 41, 0, 40, 41, 10, 112, 10, 10, 94, 95, - 96, 97, 112, 136, 136, 56, 57, 62, 42, 63, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 42, 0, 42, - 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 43, 0, 43, 43, 0, 0, 0, 0, 0, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 36, - 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, - 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 0, 0, 44, 42, 42, 42, 42, 42, 42, 42, - 42, 44, 0, 0, 0, 42, 42, 42, 42, 0, - 42, 42, 0, 42, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 0, 0, 45, 43, 43, 43, 43, - 43, 43, 43, 43, 45, 0, 0, 0, 43, 43, - 43, 43, 0, 43, 43, 0, 43, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 36, 0, 36, 36, 0, 0, 53, 0, - 0, 0, 36, 36, 0, 0, 44, 53, 0, 0, - 36, 36, 36, 36, 0, 0, 55, 56, 57, 58, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 67, 0, 36, 0, 0, 44, 0, 44, 44, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 45, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 89, 0, 0, 0, 0, 90, 91, 92, 93, - 0, 0, 0, 100, 0, 0, 0, 101, 45, 0, - 45, 45, 0, 107, 0, 110, 0, 0, 0, 111, - 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 53, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 47, 47, 0, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, - 0, 44, 44, 44, 44, 44, 44, 44, 44, 0, - 0, 0, 0, 44, 44, 44, 44, 0, 44, 44, - 0, 44, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 0, 0, 0, 45, 45, 45, 45, 45, 45, - 45, 45, 0, 0, 0, 0, 45, 45, 45, 45, - 0, 45, 45, 0, 45, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 0, 0, 46, 53, 53, 53, - 53, 53, 53, 53, 53, 46, 0, 0, 0, 53, - 53, 53, 53, 0, 53, 53, 0, 53, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 0, 48, - 47, 47, 47, 47, 47, 47, 47, 47, 48, 0, - 0, 0, 47, 47, 47, 47, 0, 47, 47, 0, - 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, - 46, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 46, 46, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 48, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 0, 48, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 49, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, - 51, 51, 0, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 0, 0, 0, 46, 46, 46, 46, 46, - 46, 46, 46, 0, 0, 0, 0, 46, 46, 46, - 46, 0, 46, 46, 0, 46, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, - 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, - 48, 48, 48, 48, 0, 48, 48, 0, 48, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, - 50, 49, 49, 49, 49, 49, 49, 49, 49, 50, - 0, 0, 0, 49, 49, 49, 49, 0, 49, 49, - 0, 49, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 0, 0, 52, 51, 51, 51, 51, 51, 51, - 51, 51, 52, 0, 0, 0, 51, 51, 51, 51, - 0, 51, 51, 0, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 50, 54, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 0, 50, 50, 0, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 52, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52, 0, 52, 52, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 54, 54, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 19, 19, 0, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 0, 0, 0, 50, - 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, - 0, 50, 50, 50, 50, 0, 50, 50, 0, 50, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, - 29, 0, 52, 52, 52, 52, 52, 52, 52, 52, - 0, 0, 0, 0, 52, 52, 52, 52, 0, 52, - 52, 0, 52, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 29, 0, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 0, 0, 0, 0, 54, 54, 54, - 54, 0, 54, 54, 0, 54, 19, 19, 19, 0, - 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 27, 29, 0, 19, 19, - 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, - 19, 19, 19, 19, 0, 19, 19, 0, 19, 0, - 0, 0, 0, 0, 30, 0, 102, 28, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 28, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 27, - 1, 0, 0, 2, 3, 4, 5, 6, 0, 0, - 0, 7, 8, 9, 10, 11, 12, 0, 0, 0, - 0, 13, 14, 15, 16, 17, 18, 19, 30, 0, - 0, 28, 20, 21, 22, 23, 0, 24, 25, 0, - 26, 0, 1, 0, 0, 2, 3, 4, 5, 6, - 115, 0, 0, 7, 8, 9, 10, 11, 12, 0, - 0, 0, 0, 13, 14, 15, 16, 17, 18, 19, - 0, 0, 0, 0, 20, 21, 22, 23, 0, 24, - 25, 0, 26, 0, 0, 0, 1, 0, 0, 2, - 3, 4, 5, 6, 0, 0, 0, 7, 8, 9, - 10, 11, 12, 0, 0, 0, 0, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 20, 21, - 22, 23, 0, 24, 25, 1, 26, 0, 2, 3, - 4, 5, 6, 0, 0, 0, 7, 8, 9, 10, - 11, 12, 0, 0, 0, 0, 13, 14, 15, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 0, 22, - 23, 0, 24, 25, 0, 26, 0, 2, 3, 4, - 5, 6, 0, 0, 0, 7, 8, 9, 10, 11, - 12, 0, 0, 0, 0, 13, 14, 15, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 0, 22, 23, - 0, 24, 25, 0, 26, -}; -short yycheck[] = { 123, - 0, 125, 123, 1, 74, 123, 125, 123, 0, 9, - 77, 125, 20, 21, 287, 288, 289, 290, 125, 125, - 125, 125, 125, 125, 281, 125, 260, 261, 280, 37, - 280, 281, 6, 7, 8, 257, 258, 123, 30, 123, - 0, 0, 276, 277, 278, 0, 268, 269, 22, 76, - 9, 115, 26, 86, 124, 125, 3, 4, 5, 126, - 52, 295, 98, 71, 298, -1, 15, 16, 17, 18, - 260, 261, 132, -1, 72, 73, 84, 75, -1, 87, - 276, 277, 278, -1, 0, -1, 276, 277, 278, 257, - 258, -1, -1, 9, 94, -1, 95, 96, 97, 295, - 268, 269, 298, -1, -1, 295, -1, -1, 298, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 127, - 112, -1, 130, 123, 116, 125, 126, 0, -1, -1, - -1, 139, -1, -1, -1, 94, 9, -1, -1, -1, - 132, 115, -1, -1, 136, 94, 95, 96, 97, -1, - -1, -1, -1, -1, -1, -1, 280, 281, -1, 280, - 281, -1, 280, 281, 123, 279, 125, 126, 287, 288, - 289, 290, 279, 279, 279, 279, 279, 279, 94, 279, - -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 123, -1, 125, - 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 94, -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, - 123, -1, 125, 126, -1, -1, -1, -1, -1, 259, - 260, 261, 262, 263, 264, 265, 266, 267, -1, -1, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 125, - -1, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - -1, -1, 0, 279, 280, 281, 282, 283, 284, 285, - 286, 9, -1, -1, -1, 291, 292, 293, 294, -1, - 296, 297, -1, 299, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, -1, -1, 0, 279, 280, 281, 282, - 283, 284, 285, 286, 9, -1, -1, -1, 291, 292, - 293, 294, -1, 296, 297, -1, 299, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, -1, 260, 261, -1, -1, 0, -1, - -1, -1, 268, 269, -1, -1, 94, 9, -1, -1, - 276, 277, 278, 279, -1, -1, 9, 10, 11, 12, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 295, - 23, -1, 298, -1, -1, 123, -1, 125, 126, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 94, - 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 53, 54, -1, -1, -1, -1, 59, 60, 61, 62, - -1, -1, -1, 66, -1, -1, -1, 70, 123, -1, - 125, 126, -1, 76, -1, 78, -1, -1, -1, 82, - -1, -1, 94, -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, 123, -1, 125, 126, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 94, -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, 123, -1, 125, 126, -1, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, -1, -1, - -1, 279, 280, 281, 282, 283, 284, 285, 286, -1, - -1, -1, -1, 291, 292, 293, 294, -1, 296, 297, - -1, 299, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, -1, -1, -1, 279, 280, 281, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - -1, 296, 297, -1, 299, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, -1, -1, 0, 279, 280, 281, - 282, 283, 284, 285, 286, 9, -1, -1, -1, 291, - 292, 293, 294, -1, 296, 297, -1, 299, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, -1, -1, 0, - 279, 280, 281, 282, 283, 284, 285, 286, 9, -1, - -1, -1, 291, 292, 293, 294, -1, 296, 297, -1, - 299, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, - 94, 9, -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, 123, - -1, 125, 126, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 94, 9, -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, 123, -1, 125, 126, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -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, 123, -1, 125, 126, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - -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, 123, -1, - 125, 126, -1, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, -1, -1, -1, 279, 280, 281, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, -1, 296, 297, -1, 299, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, -1, -1, -1, 279, 280, - 281, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, 296, 297, -1, 299, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, -1, -1, - 0, 279, 280, 281, 282, 283, 284, 285, 286, 9, - -1, -1, -1, 291, 292, 293, 294, -1, 296, 297, - -1, 299, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, -1, -1, 0, 279, 280, 281, 282, 283, 284, - 285, 286, 9, -1, -1, -1, 291, 292, 293, 294, - -1, 296, 297, -1, 299, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, 94, 9, -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, 123, -1, 125, 126, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 94, 9, -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, 123, -1, 125, 126, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 94, -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, 123, - -1, 125, 126, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 94, -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, 123, -1, 125, 126, -1, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, -1, -1, -1, 279, - 280, 281, 282, 283, 284, 285, 286, -1, -1, -1, - -1, 291, 292, 293, 294, -1, 296, 297, -1, 299, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, -1, - 9, -1, 279, 280, 281, 282, 283, 284, 285, 286, - -1, -1, -1, -1, 291, 292, 293, 294, -1, 296, - 297, -1, 299, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 9, -1, -1, 279, 280, 281, 282, 283, - 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, - 294, -1, 296, 297, -1, 299, 257, 258, 259, -1, - -1, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 94, 9, -1, 279, 280, - 281, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, 296, 297, -1, 299, -1, - -1, -1, -1, -1, 123, -1, 125, 126, -1, -1, - -1, -1, -1, -1, -1, 9, -1, 94, -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, 123, -1, -1, 126, - -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, - -1, 94, -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, - 123, -1, -1, 126, -1, -1, -1, -1, -1, -1, - 94, -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, 123, - -1, -1, 126, -1, -1, -1, -1, -1, -1, 94, - 259, -1, -1, 262, 263, 264, 265, 266, -1, -1, - -1, 270, 271, 272, 273, 274, 275, -1, -1, -1, - -1, 280, 281, 282, 283, 284, 285, 286, 123, -1, - -1, 126, 291, 292, 293, 294, -1, 296, 297, -1, - 299, -1, 259, -1, -1, 262, 263, 264, 265, 266, - 267, -1, -1, 270, 271, 272, 273, 274, 275, -1, - -1, -1, -1, 280, 281, 282, 283, 284, 285, 286, - -1, -1, -1, -1, 291, 292, 293, 294, -1, 296, - 297, -1, 299, -1, -1, -1, 259, -1, -1, 262, - 263, 264, 265, 266, -1, -1, -1, 270, 271, 272, - 273, 274, 275, -1, -1, -1, -1, 280, 281, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, -1, 296, 297, 259, 299, -1, 262, 263, - 264, 265, 266, -1, -1, -1, 270, 271, 272, 273, - 274, 275, -1, -1, -1, -1, 280, 281, 282, 283, - 284, 285, 286, -1, -1, -1, -1, -1, -1, 293, - 294, -1, 296, 297, -1, 299, -1, 262, 263, 264, - 265, 266, -1, -1, -1, 270, 271, 272, 273, 274, - 275, -1, -1, -1, -1, 280, 281, 282, 283, 284, - 285, 286, -1, -1, -1, -1, -1, -1, 293, 294, - -1, 296, 297, -1, 299, -}; -#define YYFINAL 31 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 314 -#if YYDEBUG -char *yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,"'\\t'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'","'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"OVER", -"SMALLOVER","SQRT","SUB","SUP","LPILE","RPILE","CPILE","PILE","LEFT","RIGHT", -"TO","FROM","SIZE","FONT","ROMAN","BOLD","ITALIC","FAT","ACCENT","BAR","UNDER", -"ABOVE","TEXT","QUOTED_TEXT","FWD","BACK","DOWN","UP","MATRIX","COL","LCOL", -"RCOL","CCOL","MARK","LINEUP","TYPE","VCENTER","PRIME","SPLIT","NOSPLIT", -"UACCENT","SPECIAL","SPACE","GFONT","GSIZE","DEFINE","NDEFINE","TDEFINE", -"SDEFINE","UNDEF","IFDEF","INCLUDE","DELIM","CHARTYPE","SET","GRFONT","GBFONT", -}; -char *yyrule[] = { -"$accept : top", -"top :", -"top : equation", -"equation : mark", -"equation : equation mark", -"mark : from_to", -"mark : MARK mark", -"mark : LINEUP mark", -"from_to : sqrt_over", -"from_to : sqrt_over TO from_to", -"from_to : sqrt_over FROM sqrt_over", -"from_to : sqrt_over FROM sqrt_over TO from_to", -"from_to : sqrt_over FROM sqrt_over FROM from_to", -"sqrt_over : script", -"sqrt_over : SQRT sqrt_over", -"sqrt_over : sqrt_over OVER sqrt_over", -"sqrt_over : sqrt_over SMALLOVER sqrt_over", -"script : nonsup", -"script : simple SUP script", -"nonsup : simple", -"nonsup : simple SUB nonsup", -"nonsup : simple SUB simple SUP script", -"simple : TEXT", -"simple : QUOTED_TEXT", -"simple : SPLIT QUOTED_TEXT", -"simple : NOSPLIT TEXT", -"simple : '^'", -"simple : '~'", -"simple : '\\t'", -"simple : '{' equation '}'", -"simple : PILE pile_arg", -"simple : LPILE pile_arg", -"simple : RPILE pile_arg", -"simple : CPILE pile_arg", -"simple : MATRIX '{' column_list '}'", -"simple : LEFT delim equation RIGHT delim", -"simple : LEFT delim equation", -"simple : simple BAR", -"simple : simple UNDER", -"simple : simple PRIME", -"simple : simple ACCENT simple", -"simple : simple UACCENT simple", -"simple : ROMAN simple", -"simple : BOLD simple", -"simple : ITALIC simple", -"simple : FAT simple", -"simple : FONT text simple", -"simple : SIZE text simple", -"simple : FWD number simple", -"simple : BACK number simple", -"simple : UP number simple", -"simple : DOWN number simple", -"simple : TYPE text simple", -"simple : VCENTER simple", -"simple : SPECIAL text simple", -"number : text", -"pile_element_list : equation", -"pile_element_list : pile_element_list ABOVE equation", -"pile_arg : '{' pile_element_list '}'", -"pile_arg : number '{' pile_element_list '}'", -"column_list : column", -"column_list : column_list column", -"column_element_list : equation", -"column_element_list : column_element_list ABOVE equation", -"column_arg : '{' column_element_list '}'", -"column_arg : number '{' column_element_list '}'", -"column : COL column_arg", -"column : LCOL column_arg", -"column : RCOL column_arg", -"column : CCOL column_arg", -"text : TEXT", -"text : QUOTED_TEXT", -"delim : text", -"delim : '{'", -"delim : '}'", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif -{ - register int yym, yyn, yystate; -#if YYDEBUG - register char *yys; - extern char *getenv(); - - if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if ((yyn = yydefred[yystate]) != 0) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#ifdef lint - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - yyval = yyvsp[1-yym]; - switch (yyn) - { -case 2: -#line 125 "eqn.y" -{ yyvsp[0].b->top_level(); non_empty_flag = 1; } -break; -case 3: -#line 130 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 4: -#line 132 "eqn.y" -{ - list_box *lb = yyvsp[-1].b->to_list_box(); - if (!lb) - lb = new list_box(yyvsp[-1].b); - lb->append(yyvsp[0].b); - yyval.b = lb; - } -break; -case 5: -#line 143 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 6: -#line 145 "eqn.y" -{ yyval.b = make_mark_box(yyvsp[0].b); } -break; -case 7: -#line 147 "eqn.y" -{ yyval.b = make_lineup_box(yyvsp[0].b); } -break; -case 8: -#line 152 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 9: -#line 154 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-2].b, 0, yyvsp[0].b); } -break; -case 10: -#line 156 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0); } -break; -case 11: -#line 158 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } -break; -case 12: -#line 160 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-4].b, make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0), 0); } -break; -case 13: -#line 165 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 14: -#line 167 "eqn.y" -{ yyval.b = make_sqrt_box(yyvsp[0].b); } -break; -case 15: -#line 169 "eqn.y" -{ yyval.b = make_over_box(yyvsp[-2].b, yyvsp[0].b); } -break; -case 16: -#line 171 "eqn.y" -{ yyval.b = make_small_over_box(yyvsp[-2].b, yyvsp[0].b); } -break; -case 17: -#line 176 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 18: -#line 178 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-2].b, 0, yyvsp[0].b); } -break; -case 19: -#line 183 "eqn.y" -{ yyval.b = yyvsp[0].b; } -break; -case 20: -#line 185 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-2].b, yyvsp[0].b, 0); } -break; -case 21: -#line 187 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } -break; -case 22: -#line 192 "eqn.y" -{ yyval.b = split_text(yyvsp[0].str); } -break; -case 23: -#line 194 "eqn.y" -{ yyval.b = new quoted_text_box(yyvsp[0].str); } -break; -case 24: -#line 196 "eqn.y" -{ yyval.b = split_text(yyvsp[0].str); } -break; -case 25: -#line 198 "eqn.y" -{ yyval.b = new quoted_text_box(yyvsp[0].str); } -break; -case 26: -#line 200 "eqn.y" -{ yyval.b = new half_space_box; } -break; -case 27: -#line 202 "eqn.y" -{ yyval.b = new space_box; } -break; -case 28: -#line 204 "eqn.y" -{ yyval.b = new tab_box; } -break; -case 29: -#line 206 "eqn.y" -{ yyval.b = yyvsp[-1].b; } -break; -case 30: -#line 208 "eqn.y" -{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } -break; -case 31: -#line 210 "eqn.y" -{ yyvsp[0].pb->set_alignment(LEFT_ALIGN); yyval.b = yyvsp[0].pb; } -break; -case 32: -#line 212 "eqn.y" -{ yyvsp[0].pb->set_alignment(RIGHT_ALIGN); yyval.b = yyvsp[0].pb; } -break; -case 33: -#line 214 "eqn.y" -{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } -break; -case 34: -#line 216 "eqn.y" -{ yyval.b = yyvsp[-1].mb; } -break; -case 35: -#line 218 "eqn.y" -{ yyval.b = make_delim_box(yyvsp[-3].str, yyvsp[-2].b, yyvsp[0].str); } -break; -case 36: -#line 220 "eqn.y" -{ yyval.b = make_delim_box(yyvsp[-1].str, yyvsp[0].b, 0); } -break; -case 37: -#line 222 "eqn.y" -{ yyval.b = make_overline_box(yyvsp[-1].b); } -break; -case 38: -#line 224 "eqn.y" -{ yyval.b = make_underline_box(yyvsp[-1].b); } -break; -case 39: -#line 226 "eqn.y" -{ yyval.b = make_prime_box(yyvsp[-1].b); } -break; -case 40: -#line 228 "eqn.y" -{ yyval.b = make_accent_box(yyvsp[-2].b, yyvsp[0].b); } -break; -case 41: -#line 230 "eqn.y" -{ yyval.b = make_uaccent_box(yyvsp[-2].b, yyvsp[0].b); } -break; -case 42: -#line 232 "eqn.y" -{ yyval.b = new font_box(strsave(get_grfont()), yyvsp[0].b); } -break; -case 43: -#line 234 "eqn.y" -{ yyval.b = new font_box(strsave(get_gbfont()), yyvsp[0].b); } -break; -case 44: -#line 236 "eqn.y" -{ yyval.b = new font_box(strsave(get_gfont()), yyvsp[0].b); } -break; -case 45: -#line 238 "eqn.y" -{ yyval.b = new fat_box(yyvsp[0].b); } -break; -case 46: -#line 240 "eqn.y" -{ yyval.b = new font_box(yyvsp[-1].str, yyvsp[0].b); } -break; -case 47: -#line 242 "eqn.y" -{ yyval.b = new size_box(yyvsp[-1].str, yyvsp[0].b); } -break; -case 48: -#line 244 "eqn.y" -{ yyval.b = new hmotion_box(yyvsp[-1].n, yyvsp[0].b); } -break; -case 49: -#line 246 "eqn.y" -{ yyval.b = new hmotion_box(-yyvsp[-1].n, yyvsp[0].b); } -break; -case 50: -#line 248 "eqn.y" -{ yyval.b = new vmotion_box(yyvsp[-1].n, yyvsp[0].b); } -break; -case 51: -#line 250 "eqn.y" -{ yyval.b = new vmotion_box(-yyvsp[-1].n, yyvsp[0].b); } -break; -case 52: -#line 252 "eqn.y" -{ yyvsp[0].b->set_spacing_type(yyvsp[-1].str); yyval.b = yyvsp[0].b; } -break; -case 53: -#line 254 "eqn.y" -{ yyval.b = new vcenter_box(yyvsp[0].b); } -break; -case 54: -#line 256 "eqn.y" -{ yyval.b = make_special_box(yyvsp[-1].str, yyvsp[0].b); } -break; -case 55: -#line 261 "eqn.y" -{ - int n; - if (sscanf(yyvsp[0].str, "%d", &n) == 1) - yyval.n = n; - a_delete yyvsp[0].str; - } -break; -case 56: -#line 271 "eqn.y" -{ yyval.pb = new pile_box(yyvsp[0].b); } -break; -case 57: -#line 273 "eqn.y" -{ yyvsp[-2].pb->append(yyvsp[0].b); yyval.pb = yyvsp[-2].pb; } -break; -case 58: -#line 278 "eqn.y" -{ yyval.pb = yyvsp[-1].pb; } -break; -case 59: -#line 280 "eqn.y" -{ yyvsp[-1].pb->set_space(yyvsp[-3].n); yyval.pb = yyvsp[-1].pb; } -break; -case 60: -#line 285 "eqn.y" -{ yyval.mb = new matrix_box(yyvsp[0].col); } -break; -case 61: -#line 287 "eqn.y" -{ yyvsp[-1].mb->append(yyvsp[0].col); yyval.mb = yyvsp[-1].mb; } -break; -case 62: -#line 292 "eqn.y" -{ yyval.col = new column(yyvsp[0].b); } -break; -case 63: -#line 294 "eqn.y" -{ yyvsp[-2].col->append(yyvsp[0].b); yyval.col = yyvsp[-2].col; } -break; -case 64: -#line 299 "eqn.y" -{ yyval.col = yyvsp[-1].col; } -break; -case 65: -#line 301 "eqn.y" -{ yyvsp[-1].col->set_space(yyvsp[-3].n); yyval.col = yyvsp[-1].col; } -break; -case 66: -#line 306 "eqn.y" -{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } -break; -case 67: -#line 308 "eqn.y" -{ yyvsp[0].col->set_alignment(LEFT_ALIGN); yyval.col = yyvsp[0].col; } -break; -case 68: -#line 310 "eqn.y" -{ yyvsp[0].col->set_alignment(RIGHT_ALIGN); yyval.col = yyvsp[0].col; } -break; -case 69: -#line 312 "eqn.y" -{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } -break; -case 70: -#line 316 "eqn.y" -{ yyval.str = yyvsp[0].str; } -break; -case 71: -#line 318 "eqn.y" -{ yyval.str = yyvsp[0].str; } -break; -case 72: -#line 323 "eqn.y" -{ yyval.str = yyvsp[0].str; } -break; -case 73: -#line 325 "eqn.y" -{ yyval.str = strsave("{"); } -break; -case 74: -#line 327 "eqn.y" -{ yyval.str = strsave("}"); } -break; -#line 1114 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - return (1); -yyaccept: - return (0); -} diff --git a/contrib/groff/src/preproc/eqn/eqn_tab.h b/contrib/groff/src/preproc/eqn/eqn_tab.h deleted file mode 100644 index 9a8b3cb..0000000 --- a/contrib/groff/src/preproc/eqn/eqn_tab.h +++ /dev/null @@ -1,67 +0,0 @@ -#define OVER 257 -#define SMALLOVER 258 -#define SQRT 259 -#define SUB 260 -#define SUP 261 -#define LPILE 262 -#define RPILE 263 -#define CPILE 264 -#define PILE 265 -#define LEFT 266 -#define RIGHT 267 -#define TO 268 -#define FROM 269 -#define SIZE 270 -#define FONT 271 -#define ROMAN 272 -#define BOLD 273 -#define ITALIC 274 -#define FAT 275 -#define ACCENT 276 -#define BAR 277 -#define UNDER 278 -#define ABOVE 279 -#define TEXT 280 -#define QUOTED_TEXT 281 -#define FWD 282 -#define BACK 283 -#define DOWN 284 -#define UP 285 -#define MATRIX 286 -#define COL 287 -#define LCOL 288 -#define RCOL 289 -#define CCOL 290 -#define MARK 291 -#define LINEUP 292 -#define TYPE 293 -#define VCENTER 294 -#define PRIME 295 -#define SPLIT 296 -#define NOSPLIT 297 -#define UACCENT 298 -#define SPECIAL 299 -#define SPACE 300 -#define GFONT 301 -#define GSIZE 302 -#define DEFINE 303 -#define NDEFINE 304 -#define TDEFINE 305 -#define SDEFINE 306 -#define UNDEF 307 -#define IFDEF 308 -#define INCLUDE 309 -#define DELIM 310 -#define CHARTYPE 311 -#define SET 312 -#define GRFONT 313 -#define GBFONT 314 -typedef union { - char *str; - box *b; - pile_box *pb; - matrix_box *mb; - int n; - column *col; -} YYSTYPE; -extern YYSTYPE yylval; diff --git a/contrib/groff/src/preproc/eqn/neqn.sh b/contrib/groff/src/preproc/eqn/neqn.sh index f22a2ba..5390bba 100644 --- a/contrib/groff/src/preproc/eqn/neqn.sh +++ b/contrib/groff/src/preproc/eqn/neqn.sh @@ -1,10 +1,25 @@ #! /bin/sh # Provision of this shell script should not be taken to imply that use of -# GNU eqn with groff -Tascii|-Tlatin1|-Tutf8|-Tcp1047 is supported. +# GNU eqn with groff -Tascii|-Tlatin1|-Tkoi8-r|-Tutf8|-Tcp1047 is supported. +# $FreeBSD$ + +# Default device. +case "${LC_ALL-${LC_CTYPE-${LANG}}}" in + *.UTF-8) + T=utf8 ;; + iso_8859_1 | *.ISO*8859-1 | *.ISO*8859-15) + T=latin1 ;; + *.IBM-1047) + T=cp1047 ;; + *.KOI8-R) + T=koi8-r ;; + *) + T=ascii ;; +esac @GROFF_BIN_PATH_SETUP@ PATH="$GROFF_RUNTIME$PATH" export PATH -exec @g@eqn -Tascii ${1+"$@"} +exec @g@eqn -T${T} ${1+"$@"} # eof diff --git a/contrib/groff/src/preproc/pic/pic.cpp b/contrib/groff/src/preproc/pic/pic.cpp deleted file mode 100644 index d6f959b..0000000 --- a/contrib/groff/src/preproc/pic/pic.cpp +++ /dev/null @@ -1,5687 +0,0 @@ -#ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; -#endif -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 21 "pic.y" -#include "pic.h" -#include "ptable.h" -#include "object.h" - -extern int delim_flag; -extern void copy_rest_thru(const char *, const char *); -extern void copy_file_thru(const char *, const char *, const char *); -extern void push_body(const char *); -extern void do_for(char *var, double from, double to, - int by_is_multiplicative, double by, char *body); -extern void do_lookahead(); - -/* Maximum number of characters produced by printf("%g") */ -#define GDIGITS 14 - -int yylex(); -void yyerror(const char *); - -void reset(const char *nm); -void reset_all(); - -place *lookup_label(const char *); -void define_label(const char *label, const place *pl); - -direction current_direction; -position current_position; - -implement_ptable(place) - -PTABLE(place) top_table; - -PTABLE(place) *current_table = &top_table; -saved_state *current_saved_state = 0; - -object_list olist; - -const char *ordinal_postfix(int n); -const char *object_type_name(object_type type); -char *format_number(const char *form, double n); -char *do_sprintf(const char *form, const double *v, int nv); - -#line 65 "pic.y" -typedef union { - char *str; - int n; - double x; - struct { double x, y; } pair; - struct { double x; char *body; } if_data; - struct { char *str; const char *filename; int lineno; } lstr; - struct { double *v; int nv; int maxv; } dv; - struct { double val; int is_multiplicative; } by; - place pl; - object *obj; - corner crn; - path *pth; - object_spec *spec; - saved_state *pstate; - graphics_state state; - object_type obtype; -} YYSTYPE; -#line 73 "y.tab.c" -#define LABEL 257 -#define VARIABLE 258 -#define NUMBER 259 -#define TEXT 260 -#define COMMAND_LINE 261 -#define DELIMITED 262 -#define ORDINAL 263 -#define TH 264 -#define LEFT_ARROW_HEAD 265 -#define RIGHT_ARROW_HEAD 266 -#define DOUBLE_ARROW_HEAD 267 -#define LAST 268 -#define UP 269 -#define DOWN 270 -#define LEFT 271 -#define RIGHT 272 -#define BOX 273 -#define CIRCLE 274 -#define ELLIPSE 275 -#define ARC 276 -#define LINE 277 -#define ARROW 278 -#define MOVE 279 -#define SPLINE 280 -#define HEIGHT 281 -#define RADIUS 282 -#define FIGNAME 283 -#define WIDTH 284 -#define DIAMETER 285 -#define FROM 286 -#define TO 287 -#define AT 288 -#define WITH 289 -#define BY 290 -#define THEN 291 -#define SOLID 292 -#define DOTTED 293 -#define DASHED 294 -#define CHOP 295 -#define SAME 296 -#define INVISIBLE 297 -#define LJUST 298 -#define RJUST 299 -#define ABOVE 300 -#define BELOW 301 -#define OF 302 -#define THE 303 -#define WAY 304 -#define BETWEEN 305 -#define AND 306 -#define HERE 307 -#define DOT_N 308 -#define DOT_E 309 -#define DOT_W 310 -#define DOT_S 311 -#define DOT_NE 312 -#define DOT_SE 313 -#define DOT_NW 314 -#define DOT_SW 315 -#define DOT_C 316 -#define DOT_START 317 -#define DOT_END 318 -#define DOT_X 319 -#define DOT_Y 320 -#define DOT_HT 321 -#define DOT_WID 322 -#define DOT_RAD 323 -#define SIN 324 -#define COS 325 -#define ATAN2 326 -#define LOG 327 -#define EXP 328 -#define SQRT 329 -#define K_MAX 330 -#define K_MIN 331 -#define INT 332 -#define RAND 333 -#define SRAND 334 -#define COPY 335 -#define THRU 336 -#define TOP 337 -#define BOTTOM 338 -#define UPPER 339 -#define LOWER 340 -#define SH 341 -#define PRINT 342 -#define CW 343 -#define CCW 344 -#define FOR 345 -#define DO 346 -#define IF 347 -#define ELSE 348 -#define ANDAND 349 -#define OROR 350 -#define NOTEQUAL 351 -#define EQUALEQUAL 352 -#define LESSEQUAL 353 -#define GREATEREQUAL 354 -#define LEFT_CORNER 355 -#define RIGHT_CORNER 356 -#define NORTH 357 -#define SOUTH 358 -#define EAST 359 -#define WEST 360 -#define CENTER 361 -#define END 362 -#define START 363 -#define RESET 364 -#define UNTIL 365 -#define PLOT 366 -#define THICKNESS 367 -#define FILL 368 -#define COLORED 369 -#define OUTLINED 370 -#define SHADED 371 -#define ALIGNED 372 -#define SPRINTF 373 -#define COMMAND 374 -#define DEFINE 375 -#define UNDEF 376 -#define YYERRCODE 256 -short yylhs[] = { -1, - 0, 0, 16, 17, 17, 29, 29, 30, 30, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, - 31, 31, 33, 34, 31, 35, 36, 31, 37, 31, - 31, 38, 31, 31, 31, 23, 23, 39, 39, 39, - 27, 27, 28, 28, 28, 40, 7, 24, 24, 2, - 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 15, 15, 15, 15, 41, 43, 15, - 15, 42, 42, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 44, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 26, 26, 25, 25, 19, 19, 19, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 45, - 45, 5, 5, 13, 13, 13, 13, 13, 14, 14, - 14, 22, 22, 21, 21, 8, 8, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 11, 11, 12, 12, - 12, 10, 10, 10, 10, 10, 10, 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, 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, -}; -short yylen[] = { 2, - 1, 1, 3, 1, 3, 0, 1, 1, 2, 3, - 3, 4, 1, 1, 1, 1, 1, 2, 2, 0, - 3, 2, 0, 0, 7, 0, 0, 6, 0, 10, - 1, 0, 4, 1, 1, 1, 1, 2, 2, 3, - 1, 2, 1, 1, 1, 0, 5, 0, 2, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 0, 2, 3, 1, 4, 4, 4, 0, 0, 6, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 3, 0, 4, 3, 3, 3, 3, - 2, 2, 3, 2, 3, 2, 3, 2, 3, 3, - 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, - 3, 2, 3, 3, 3, 3, 2, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 1, 5, 0, 3, 1, 1, 3, 1, - 3, 5, 3, 5, 5, 5, 7, 6, 8, 1, - 4, 3, 3, 1, 2, 2, 3, 1, 1, 1, - 3, 1, 3, 1, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 2, 3, 1, 1, - 2, 1, 5, 4, 3, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, - 3, 3, 2, 3, 4, 4, 6, 4, 4, 4, - 6, 6, 4, 4, 3, 4, 3, 3, 3, 3, - 3, 3, 3, 3, 2, -}; -short yydefred[] = { 0, - 8, 0, 2, 0, 0, 0, 0, 133, 17, 13, - 14, 15, 16, 74, 75, 76, 77, 78, 79, 80, - 81, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 85, 68, 0, 4, 0, 0, 82, 71, 0, - 9, 0, 0, 0, 0, 0, 26, 0, 159, 220, - 221, 162, 164, 201, 202, 158, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, - 0, 0, 207, 208, 213, 214, 215, 216, 217, 219, - 218, 0, 0, 0, 0, 0, 140, 137, 160, 0, - 0, 0, 0, 0, 0, 44, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, - 0, 0, 32, 3, 0, 121, 122, 123, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 106, 107, 0, 0, 0, 119, 120, 127, 128, - 129, 130, 124, 125, 0, 0, 0, 0, 0, 132, - 0, 126, 39, 0, 0, 11, 0, 37, 36, 10, - 23, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 205, 209, 211, 204, 206, - 210, 212, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222, 223, 224, 225, 226, 0, 155, 0, 0, 176, - 168, 169, 170, 171, 172, 173, 174, 0, 167, 165, - 166, 42, 0, 0, 60, 0, 0, 0, 46, 0, - 0, 0, 0, 84, 135, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, - 182, 0, 0, 0, 105, 0, 0, 0, 0, 0, - 115, 116, 114, 40, 0, 0, 0, 0, 0, 0, - 65, 0, 12, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 245, 0, 0, 0, 0, 234, - 153, 139, 0, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 161, 141, 143, 175, 0, - 0, 56, 0, 0, 0, 0, 0, 54, 0, 0, - 53, 52, 0, 86, 69, 33, 179, 187, 0, 0, - 0, 177, 0, 0, 181, 0, 0, 24, 0, 235, - 236, 0, 238, 239, 240, 0, 0, 243, 244, 246, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 134, 0, 0, 186, 185, 0, 178, 0, 0, - 28, 0, 0, 0, 0, 0, 145, 142, 144, 151, - 0, 0, 0, 0, 73, 70, 184, 0, 25, 49, - 237, 241, 242, 0, 0, 148, 0, 0, 183, 0, - 147, 0, 0, 29, 149, 0, 0, 30, -}; -short yydgoto[] = { 2, - 112, 194, 114, 438, 97, 98, 34, 99, 100, 279, - 280, 281, 115, 102, 35, 3, 36, 37, 103, 239, - 104, 105, 170, 411, 363, 116, 107, 108, 257, 5, - 39, 48, 304, 409, 172, 379, 447, 259, 40, 356, - 122, 426, 403, 121, 218, -}; -short yysindex[] = { -58, - 0, 0, 0, 5077, -43, -21, -2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, -242, 0,12299, -173,12422, -155,13019, 85, -12299, 0, 0, -214, 0, -58,11880, 0, 0, -42, - 0, -58,12422, 76, -160, -195, 0, -118, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 120, 127, - 133, 137, 154, 161, 162, 173, 174, 179, 0, 0, - -193, -119, 0, 0, 0, 0, 0, 0, 0, 0, - 0,12539,12422,13019,13019, -34, 0, 0, 0, -51, - 170, 585, 46, 495, 329, 0,12299, 0, 110,12422, -12422, 1768, -71, -227, 170, -197, 0, -22, -50,12299, - -58, -58, 0, 0,13489, 0, 0, 0,13382,13382, -13382,13382,13019,13019,13019,13019,13142,13142,13142,12779, -13259, 0, 0,13382,13382,13382, 0, 0, 0, 0, - 0, 0, 0, 0,13019,13382, -228, -228, -228, 0, - 1792, 0, 0, -30,11548, 0,12422, 0, 0, 0, - 0, -28, 0,12422,12422,12422,12422,12422,12422,12422, -12422,12422,11997,12422, 0, 0, 0, 0, 0, 0, - 0, 0, 1315, 194, 198, -11, 299, -10, 159, 159, - -47, 0,13019,13019,13019,13019,13019,13019,13019,13142, -13019,13019,13019,13019,13019,13019,13019,13142, -8, 211, - 0, 0, 0, 0, 0, 2, 0,13259,13259, 0, - 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0,13019, 159, 0,12422,12422,13019, 0,12422, -12422, -228, -228, 0, 0, 180, 5077, 147, 25, 0, - 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, -34, 46, - 46, 46, 1842, 318, 318, 29,12182, -51, 0, 525, - 0, 46,12662, 1336, 0, 1792, 1792, 1792, 1792, 1792, - 0, 0, 0, 0, -21, -2, 0, 0, 0, 170, - 0, 46, 0, 27, 0, 251, 264, 262, 292, 293, - 295, 301, 304, 308, 0, 312, 313,13142,13142, 0, - 0, 0,13142,13259,13259, 0, 57, 1194, 6, 1166, - 1166, 506, 506, 1792, -1, 343, 506, 388, 388, 159, - 159, 159, 159, -16, 211, 0, 0, 0, 0, 3170, - 1194, 0, 394, 14, 506, 103, 1194, 0, 394, 14, - 0, 0, 21, 0, 0, 0, 0, 0, 495, 986, - 986, 0, 324, 118, 0, 1756, 198, 0, 12, 0, - 0,12422, 0, 0, 0,12422,12422, 0, 0, 0, - 389, 7, 131, 351, 353, 79,13142,13142,13019, 0, -13019, 0, 5077, 986, 0, 0, 986, 0, 12, 135, - 0, 361, 363, 365,13142,13142, 0, 0, 0, 0, - 56, 46, 2233, 1792, 0, 0, 0, 367, 0, 0, - 0, 0, 0, 205, 296, 0,12902, 64, 0, 370, - 0,13019, 1792, 0, 0, 1792, 151, 0, -}; -short yyrindex[] = { 5, - 0, 0, 0, 424, 200, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, - 0, 0, 0, 31, 0, 34, 102, 0, 0, 139, - 0,11744, 0, 0, 0, 639, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,10124, 0, 0, 0, 0, - 4478, 9516,10459, 0, 0, 0, 691, 0, 0, 0, - 0, 1713, 0, 2171, 0, 0, 0,11366, 0, 692, - 5532, 5532, 0, 0, 136, 0, 0, 0,10701,10765, -10277,10580, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,10829,10955,11019, 0, 0, 0, 0, - 0, 0, 0, 0, 0,11083, 0, 0, 0, 0, - 5277, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 385, 0, 421, 441, 0, 0, 356, 697, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,10627, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5394, 5735, 5852, 6193, 6310, 6651, 6768, 7109, 0, 7226, - 7567, 7684, 9818, -213, 169, 0, 0, 9399, 0, 9912, - 0, 8025, 0, 0, 0, 8142, 8483, 8600, 8941, 9058, - 0, 0, 0, 0,11436, 1656, 2507, 2965, 321, 362, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4020, 4361, 3445, - 3562, 2188, 2529, 4936,10001, 0, 2646, 1730, 2071, 814, - 1155, 1272, 1613, 0, 3903, 0, 0, 0, 0, 0, - 33, 0, 4451, 3118, 2987, 0, 326, 0, 3990, 4906, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 385, 0, 0, 701, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 452, 455, 0, 0, 0, 0, 0, - 0, 0, 720, 0, 0, 0, 0, 0, 701, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4819, 92, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 460, - 0, 0, 96, 0, 0, 97, 0, 0, -}; -short yygindex[] = { 0, - -25, 401, -104, 0, -78, 280, 0, 0, 1852, 0, - 0, -238, 104, -81, -108, 43, 0, 0, 2253, -44, - 0, 0, 0, 38, 0, 50, 417, -36, 22, 414, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 269, -}; -#define YYTABLESIZE 13863 -short yytable[] = { 96, - 1, 164, 216, 118, 6, 96, 245, 214, 212, 209, - 213, 161, 215, 195, 216, 41, 260, 46, 220, 214, - 212, 4, 213, 35, 215, 210, 228, 211, 229, 322, - 31, 8, 253, 6, 368, 216, 42, 248, 373, 211, - 214, 212, 216, 213, 93, 215, 162, 214, 212, 228, - 213, 229, 215, 38, 162, 44, 301, 124, 43, 217, - 241, 402, 285, 165, 401, 248, 193, 211, 199, 200, - 242, 217, 136, 253, 106, 136, 253, 185, 186, 45, - 106, 96, 35, 242, 109, 244, 162, 93, 228, 31, - 229, 253, 217, 47, 96, 6, 168, 169, 228, 217, - 229, 64, 117, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 269, 269, 269, 284, 35, 436, 286, 287, - 288, 250, 251, 31, 119, 253, 6, 6, 101, 289, - 290, 405, 406, 123, 101, 7, 167, 345, 34, 269, - 171, 352, 354, 173, 30, 358, 360, 174, 35, 347, - 348, 189, 190, 252, 253, 31, 106, 253, 6, 175, - 64, 187, 188, 256, 258, 427, 176, 254, 428, 106, - 243, 417, 177, 228, 38, 229, 178, 328, 329, 330, - 331, 332, 333, 334, 335, 337, 338, 339, 340, 341, - 342, 343, 269, 179, 64, 196, 220, 34, 195, 7, - 180, 181, 284, 284, 377, 49, 291, 292, 293, 255, - 101, 52, 182, 183, 38, 163, 53, 350, 184, 249, - 351, 353, 355, 101, 357, 359, 64, 294, 7, 370, - 371, 34, 7, 305, 320, 191, 192, 8, 321, 7, - 101, 101, 101, 101, 7, 394, 395, 228, 49, 229, - 219, 193, 217, 326, 52, 327, 226, 376, 346, 53, - 7, 6, 6, 34, 6, 6, 440, 201, 300, 349, - 202, 365, 364, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 372, 366, 6, 378, 398, - 7, 380, 335, 269, 425, 7, 253, 269, 284, 284, - 201, 361, 362, 202, 381, 382, 38, 221, 222, 223, - 224, 225, 416, 101, 203, 204, 205, 206, 207, 208, - 66, 101, 7, 253, 404, 55, 203, 204, 205, 206, - 207, 208, 383, 384, 253, 385, 441, 253, 228, 6, - 229, 324, 323, 325, 386, 6, 6, 387, 388, 6, - 30, 6, 389, 390, 203, 233, 205, 206, 207, 208, - 396, 67, 250, 137, 400, 137, 55, 407, 6, 55, - 6, 269, 269, 423, 408, 424, 410, 6, 6, 66, - 196, 253, 253, 420, 55, 228, 397, 229, 233, 269, - 269, 418, 233, 419, 430, 233, 233, 233, 233, 233, - 233, 431, 233, 432, 138, 433, 138, 439, 238, 444, - 445, 443, 448, 66, 233, 233, 446, 233, 55, 238, - 67, 101, 101, 1, 216, 50, 101, 113, 164, 214, - 216, 228, 415, 229, 215, 214, 212, 61, 213, 146, - 215, 62, 63, 166, 299, 66, 429, 120, 233, 125, - 55, 233, 38, 248, 67, 211, 7, 7, 7, 7, - 7, 319, 7, 140, 140, 140, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 233, 217, 7, 138, 138, 138, 67, 217, 221, 222, - 223, 224, 225, 198, 141, 141, 141, 143, 143, 143, - 101, 101, 148, 148, 148, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 101, 101, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, - 7, 7, 216, 0, 7, 0, 7, 214, 212, 0, - 213, 0, 215, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 7, 0, 303, 0, 0, - 374, 0, 7, 7, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 316, 317, 238, 0, 0, 230, 55, - 231, 232, 233, 234, 235, 236, 240, 237, 0, 217, - 0, 231, 232, 233, 234, 235, 236, 0, 237, 0, - 0, 0, 233, 233, 233, 233, 55, 0, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 0, 0, - 226, 0, 0, 0, 0, 0, 233, 233, 22, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 0, 0, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 55, 55, 0, 0, 0, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 19, 18, 233, 233, 233, 233, 255, 22, 233, 233, - 48, 233, 0, 0, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 72, - 0, 0, 233, 233, 233, 233, 233, 233, 233, 255, - 0, 22, 0, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 246, 255, 205, 206, 207, 208, 0, 19, - 18, 0, 0, 0, 230, 255, 255, 0, 255, 48, - 0, 0, 0, 22, 0, 0, 0, 231, 232, 233, - 234, 235, 236, 0, 237, 0, 0, 0, 72, 0, - 0, 0, 412, 19, 18, 0, 413, 414, 0, 255, - 0, 0, 255, 48, 0, 54, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 229, 0, 19, 18, 0, 0, 0, - 0, 255, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 0, 72, 0, 229, 0, 0, 0, - 229, 0, 0, 229, 229, 229, 229, 229, 229, 0, - 229, 79, 80, 81, 82, 0, 0, 0, 0, 0, - 0, 0, 229, 229, 0, 229, 0, 0, 0, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, - 0, 0, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 0, 0, 0, 229, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 79, 80, 81, 82, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 229, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, - 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 276, 0, 255, 255, 255, 255, 0, 0, 255, - 255, 0, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 229, 229, 229, 229, 0, 0, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 229, 229, 0, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 0, 0, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 0, 0, 0, 0, 0, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 0, 0, - 229, 229, 229, 229, 230, 0, 229, 229, 0, 229, - 0, 0, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 0, 0, 0, - 229, 229, 229, 229, 229, 229, 229, 230, 0, 0, - 0, 230, 0, 0, 230, 230, 230, 230, 230, 230, - 0, 230, 216, 0, 0, 0, 0, 214, 212, 0, - 213, 0, 215, 230, 230, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 0, 211, 0, 0, - 216, 0, 0, 0, 0, 214, 212, 0, 213, 0, - 215, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 230, 0, 0, 248, 0, 211, 54, 55, 0, 217, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, - 0, 0, 0, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 231, 0, 0, 0, 231, 0, - 0, 231, 231, 231, 231, 231, 231, 0, 231, 0, - 0, 0, 79, 80, 81, 82, 0, 0, 0, 0, - 231, 231, 0, 231, 0, 0, 0, 0, 0, 0, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 0, - 0, 216, 0, 0, 0, 0, 214, 212, 209, 213, - 0, 215, 0, 0, 231, 0, 0, 231, 0, 0, - 0, 0, 216, 0, 318, 0, 211, 214, 212, 209, - 213, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 231, 211, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, - 0, 230, 230, 230, 230, 0, 0, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 0, 0, 217, - 0, 0, 0, 0, 0, 230, 230, 0, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 0, 0, 0, 0, 0, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, - 0, 230, 230, 230, 230, 0, 0, 230, 230, 0, - 230, 0, 0, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 207, 208, - 0, 230, 230, 230, 230, 230, 230, 230, 231, 231, - 231, 231, 0, 0, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 205, 206, 207, 208, 0, 0, - 0, 0, 231, 231, 0, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 0, 0, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 0, 0, 0, 0, 0, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 0, 0, 231, 231, - 231, 231, 232, 0, 231, 231, 201, 231, 0, 202, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 0, 0, 0, 231, 231, - 231, 231, 231, 231, 231, 232, 0, 0, 0, 232, - 0, 0, 232, 232, 232, 232, 232, 232, 0, 232, - 0, 0, 0, 246, 247, 205, 206, 207, 208, 0, - 0, 232, 232, 0, 232, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, - 0, 0, 220, 0, 0, 0, 0, 220, 220, 220, - 220, 0, 220, 0, 0, 232, 0, 0, 232, 0, - 0, 0, 50, 0, 0, 220, 0, 220, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, - 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 0, 0, 0, 50, 0, 0, 50, 0, 0, 0, - 0, 0, 227, 0, 0, 0, 0, 0, 0, 227, - 227, 50, 227, 227, 227, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 227, 227, - 0, 227, 216, 0, 0, 0, 0, 214, 212, 209, - 213, 0, 215, 0, 216, 50, 0, 0, 0, 214, - 212, 0, 213, 0, 215, 248, 0, 211, 0, 0, - 0, 0, 227, 0, 0, 227, 0, 248, 216, 211, - 0, 0, 0, 214, 212, 0, 213, 50, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, - 0, 248, 0, 211, 227, 0, 0, 0, 0, 0, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 232, - 232, 232, 232, 0, 0, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 217, 0, 0, 0, 0, - 0, 0, 0, 232, 232, 0, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 0, 0, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 0, 0, 0, 0, 0, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 0, 0, 232, - 232, 232, 232, 227, 0, 232, 232, 220, 232, 0, - 220, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 50, 0, 0, 232, - 232, 232, 232, 232, 232, 232, 227, 227, 227, 227, - 0, 278, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 0, 50, 220, 220, 220, 220, 220, 220, - 227, 227, 0, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 0, 0, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 0, 0, - 0, 0, 0, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 0, 0, 227, 227, 227, 227, - 228, 0, 227, 227, 0, 227, 0, 0, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 0, 0, 0, 227, 227, 227, 227, - 227, 227, 227, 228, 246, 247, 205, 206, 207, 208, - 228, 228, 0, 228, 228, 228, 246, 247, 205, 206, - 207, 208, 0, 0, 367, 0, 0, 0, 278, 228, - 228, 375, 228, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 205, 206, 207, 208, 0, 0, 0, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 228, 0, 0, 228, 0, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 228, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 51, 0, 0, 0, 0, 0, - 248, 367, 367, 0, 0, 0, 0, 248, 248, 51, - 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 248, 248, 0, 248, - 0, 0, 0, 0, 0, 367, 0, 0, 367, 0, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 216, - 0, 0, 0, 0, 214, 212, 0, 213, 0, 215, - 248, 0, 0, 248, 0, 0, 0, 0, 0, 0, - 0, 0, 248, 0, 211, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 217, 228, 228, 228, - 228, 0, 0, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 0, 197, 0, 0, 0, 0, 0, - 0, 228, 228, 0, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 0, 0, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 270, - 271, 272, 282, 0, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 0, 0, 228, 228, 228, - 228, 0, 0, 228, 228, 0, 228, 302, 0, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 51, 0, 0, 228, 228, 228, - 228, 228, 228, 228, 248, 248, 248, 248, 0, 0, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 0, 51, 336, 0, 0, 0, 0, 0, 248, 248, - 344, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 0, 0, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 15, 0, 0, 0, - 0, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 437, 0, 248, 248, 248, 248, 250, 197, - 248, 248, 0, 248, 0, 0, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 0, 0, 0, 248, 248, 248, 248, 248, 248, - 248, 250, 0, 0, 0, 15, 0, 0, 250, 250, - 391, 392, 250, 0, 0, 393, 0, 0, 0, 0, - 0, 203, 204, 205, 206, 207, 208, 250, 250, 0, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 250, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 0, 421, - 422, 0, 0, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 434, 435, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 0, 0, 0, 0, 249, 249, 0, 0, 249, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 249, 0, 249, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 201, 0, 0, 0, 0, 0, 201, - 249, 0, 0, 0, 201, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 250, 250, 250, 250, 0, - 0, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 0, 0, 0, 0, 0, 0, 0, 201, 250, - 250, 0, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 0, 0, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 0, 0, 0, - 0, 0, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 0, 0, 250, 250, 250, 250, 0, - 0, 250, 250, 0, 250, 0, 0, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 0, 0, 0, 250, 250, 250, 250, 250, - 250, 250, 249, 249, 249, 249, 0, 0, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 249, 0, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 16, 0, 0, 0, 0, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 0, 0, 249, 249, 249, 249, 247, 0, 249, 249, - 0, 249, 0, 0, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, - 0, 0, 249, 249, 249, 249, 249, 249, 249, 247, - 0, 0, 0, 16, 0, 0, 247, 247, 0, 0, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 247, 247, 0, 247, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 0, 0, 0, 0, 59, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 156, 156, 0, 156, 156, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 59, 156, 0, 0, 156, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 156, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, - 59, 214, 212, 0, 213, 0, 215, 0, 0, 0, - 0, 202, 0, 0, 0, 0, 0, 202, 156, 248, - 0, 211, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 59, 247, 247, 247, 247, 0, 0, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 0, 0, 217, 0, 0, 202, 247, 247, 0, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 0, 0, 0, 0, 0, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 0, 0, 247, 247, 247, 247, 0, 0, 247, - 247, 0, 247, 0, 0, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 0, 0, 0, 247, 247, 247, 247, 247, 247, 247, - 156, 156, 156, 156, 0, 0, 156, 0, 156, 156, - 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, - 0, 59, 0, 0, 156, 156, 0, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 0, 0, 0, 59, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, - 156, 156, 156, 156, 252, 0, 156, 156, 0, 0, - 0, 0, 0, 0, 0, 0, 399, 0, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 59, 0, 0, - 156, 156, 156, 156, 156, 156, 156, 252, 0, 0, - 0, 0, 0, 0, 252, 252, 0, 0, 252, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 205, 206, 207, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, - 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, - 0, 251, 251, 0, 0, 251, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 0, 251, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 252, 252, 252, 252, 0, 0, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 0, 0, 0, - 0, 0, 0, 0, 0, 252, 252, 0, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 0, 0, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 0, 0, 0, 0, 0, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 0, - 0, 252, 252, 252, 252, 0, 0, 252, 252, 0, - 252, 0, 0, 252, 252, 252, 252, 0, 0, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 0, 0, - 0, 252, 252, 252, 252, 252, 252, 252, 251, 251, - 251, 251, 0, 0, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 251, 251, 0, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 0, 0, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 0, 0, 0, 0, 0, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 0, 0, 251, 251, - 251, 251, 157, 0, 251, 251, 0, 251, 0, 0, - 251, 251, 251, 251, 0, 0, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 0, 0, 0, 251, 251, - 251, 251, 251, 251, 251, 157, 0, 0, 0, 0, - 0, 0, 157, 157, 0, 157, 157, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 0, 157, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 157, 0, 0, 157, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, - 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, - 58, 0, 0, 58, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, - 0, 0, 253, 0, 0, 0, 0, 0, 0, 253, - 253, 0, 0, 253, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 253, 0, 58, 253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, - 157, 157, 157, 0, 0, 157, 0, 157, 157, 157, - 157, 157, 157, 157, 157, 0, 0, 0, 0, 0, - 0, 0, 0, 157, 157, 0, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 0, 0, 0, 0, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 0, 0, 157, - 157, 157, 157, 0, 0, 157, 157, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 0, 0, 0, 157, - 157, 157, 157, 157, 157, 157, 253, 253, 253, 253, - 58, 0, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 253, 0, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 0, 0, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 0, 58, - 0, 0, 0, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 0, 0, 253, 253, 253, 253, - 254, 0, 253, 253, 0, 253, 0, 0, 253, 253, - 0, 0, 0, 0, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 0, 0, 0, 253, 253, 253, 253, - 253, 253, 253, 254, 0, 0, 0, 0, 0, 0, - 254, 254, 0, 0, 254, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 254, 0, 0, 254, 0, 0, 254, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, - 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, - 0, 254, 0, 0, 254, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 138, 0, 0, 0, 0, 0, 0, 138, 138, 0, - 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 138, - 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 138, 0, 254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 254, 254, 254, - 254, 0, 0, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, - 0, 254, 254, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 0, 0, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 0, - 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 0, 0, 254, 254, 254, - 254, 0, 0, 254, 254, 0, 254, 0, 0, 0, - 254, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 0, 0, 0, 254, 254, 254, - 254, 254, 254, 254, 138, 138, 138, 138, 0, 0, - 138, 254, 138, 138, 138, 138, 138, 138, 138, 138, - 0, 0, 254, 0, 0, 254, 0, 0, 138, 138, - 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, - 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, - 254, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 0, 0, 138, 138, 138, 138, 146, 0, - 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 0, 0, 0, 138, 138, 138, 138, 138, 138, - 138, 146, 0, 0, 0, 0, 0, 0, 146, 146, - 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 146, 0, 0, 146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, - 0, 0, 0, 146, 0, 0, 57, 0, 0, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 152, 152, 0, 0, 152, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 57, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, - 57, 152, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 146, 146, 146, 146, 0, - 0, 146, 0, 146, 146, 146, 146, 146, 146, 146, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 146, - 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, - 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 0, 0, 146, 146, 146, 146, 0, - 0, 146, 146, 0, 0, 0, 0, 32, 0, 57, - 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 0, 0, 0, 146, 146, 146, 146, 146, - 146, 146, 152, 152, 152, 152, 57, 0, 152, 33, - 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, - 0, 0, 0, 0, 0, 0, 152, 152, 0, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, - 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 0, 57, 0, 0, 0, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 0, 0, 152, 152, 152, 152, 91, 0, 152, 152, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, - 0, 0, 152, 152, 152, 152, 152, 152, 152, 91, - 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 7, 91, 8, 9, 0, 0, - 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, - 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 24, 25, 0, - 0, 26, 0, 27, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 28, 0, 29, 0, 0, 0, 0, 0, 0, 30, - 31, 0, 93, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 93, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 91, 91, 91, 0, 0, 91, - 0, 91, 91, 91, 91, 91, 91, 91, 91, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 91, 0, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, - 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 0, 0, 91, 91, 91, 91, 0, 0, 91, - 91, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, - 93, 93, 93, 93, 6, 0, 93, 0, 93, 93, - 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 93, 0, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 0, 0, 0, 0, 0, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, - 93, 93, 93, 93, 95, 0, 93, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, - 93, 93, 93, 93, 93, 93, 93, 95, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, - 0, 6, 6, 95, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 6, 6, 0, 0, 6, 0, 6, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 6, 0, 6, 0, 0, - 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 95, 95, 95, 0, 0, 95, 0, 95, - 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 95, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, - 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, - 0, 95, 95, 95, 95, 0, 0, 95, 95, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, - 0, 95, 95, 95, 95, 95, 95, 95, 99, 99, - 99, 99, 0, 0, 99, 0, 99, 99, 99, 99, - 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 0, 0, 0, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 0, 0, 99, 99, - 99, 99, 97, 0, 99, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 0, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 97, 0, 0, 0, 0, - 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97, 0, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 97, 97, 97, 0, 0, 97, 0, 97, 97, 97, - 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 0, 0, 0, 0, 0, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 0, 0, 0, 0, 0, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 0, 0, 97, - 97, 97, 97, 0, 0, 97, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 0, 0, 0, 97, - 97, 97, 97, 97, 97, 97, 87, 87, 87, 87, - 0, 0, 87, 0, 87, 87, 87, 87, 87, 87, - 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 87, 0, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 0, 0, 0, 0, 0, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 0, 0, - 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 0, 0, 87, 87, 87, 87, - 88, 0, 87, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 0, 0, 0, 87, 87, 87, 87, - 87, 87, 87, 88, 0, 0, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, - 88, 0, 0, 88, 0, 88, 88, 88, 88, 88, - 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 88, 0, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 0, 0, 0, 0, 0, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 0, - 0, 0, 0, 0, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 0, 0, 88, 88, 88, - 88, 0, 0, 88, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 0, 0, 0, 88, 88, 88, - 88, 88, 88, 88, 89, 89, 89, 89, 0, 0, - 89, 0, 89, 89, 89, 89, 89, 89, 89, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, - 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, - 0, 0, 0, 0, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, - 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 0, 0, 89, 89, 89, 89, 90, 0, - 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 0, 0, 0, 89, 89, 89, 89, 89, 89, - 89, 90, 0, 0, 0, 0, 0, 0, 90, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 90, 90, 90, 0, - 0, 90, 0, 90, 90, 90, 90, 90, 90, 90, - 90, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 90, 0, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, - 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 0, 0, 90, 90, 90, 90, 0, - 0, 90, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 0, 0, 0, 90, 90, 90, 90, 90, - 90, 90, 100, 100, 100, 100, 0, 0, 100, 0, - 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 100, 0, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, - 0, 0, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 0, 0, 0, 0, 0, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 0, 0, 100, 100, 100, 100, 101, 0, 100, 100, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, - 0, 0, 100, 100, 100, 100, 100, 100, 100, 101, - 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, - 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 101, 101, 101, 0, 0, 101, - 0, 101, 101, 101, 101, 101, 101, 101, 101, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 101, 0, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, - 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 0, 0, 101, 101, 101, 101, 0, 0, 101, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, - 102, 102, 102, 102, 0, 0, 102, 0, 102, 102, - 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 102, 0, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, - 102, 102, 102, 102, 104, 0, 102, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 104, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 104, 104, 104, 0, 0, 104, 0, 104, - 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 104, 0, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, - 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 0, 0, 0, 0, 0, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, - 0, 104, 104, 104, 104, 0, 0, 104, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, - 0, 104, 104, 104, 104, 104, 104, 104, 109, 109, - 109, 109, 0, 0, 109, 0, 109, 109, 109, 109, - 109, 109, 109, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 109, 0, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 0, 0, 0, 0, 0, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 0, 0, 109, 109, - 109, 109, 111, 0, 109, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 0, 0, 0, 109, 109, - 109, 109, 109, 109, 109, 111, 0, 0, 0, 0, - 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 111, 0, 0, 111, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 0, 0, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, - 111, 111, 111, 0, 0, 111, 0, 111, 111, 111, - 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, - 0, 0, 0, 111, 111, 0, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 0, 0, 0, 0, 0, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 0, 0, 0, 0, 0, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 0, 0, 111, - 111, 111, 111, 0, 0, 111, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 0, 0, 0, 111, - 111, 111, 111, 111, 111, 111, 118, 118, 118, 118, - 0, 0, 118, 0, 118, 118, 118, 118, 118, 118, - 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 0, 0, 0, 0, 0, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, - 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 0, 0, 118, 118, 118, 118, - 131, 0, 118, 118, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 0, 0, 0, 118, 118, 118, 118, - 118, 118, 118, 131, 0, 0, 0, 0, 0, 0, - 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 113, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, - 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 131, 131, 0, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, - 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, - 131, 0, 0, 131, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 0, 0, 0, 131, 131, 131, - 131, 131, 131, 131, 113, 113, 113, 113, 0, 0, - 113, 0, 113, 113, 113, 113, 113, 113, 113, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, - 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, - 0, 0, 0, 0, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 0, 0, 0, 0, - 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 0, 0, 113, 113, 113, 113, 179, 0, - 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 0, 0, 0, 113, 113, 113, 113, 113, 113, - 113, 179, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 0, 179, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 0, 0, 0, 0, 154, 154, 0, 154, 154, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 0, 0, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 179, 179, 0, - 0, 0, 0, 179, 179, 179, 0, 179, 179, 179, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 179, - 179, 0, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 0, 0, 0, 0, 0, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 0, 0, 0, - 0, 0, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 0, 0, 179, 179, 179, 179, 0, - 0, 179, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 0, 0, 0, 179, 179, 179, 179, 179, - 179, 179, 154, 154, 154, 154, 0, 0, 154, 0, - 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 154, 154, 0, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 159, 0, 0, - 0, 154, 154, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 159, 0, 0, 0, 0, 0, 0, 159, 154, 154, - 159, 0, 159, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, - 0, 0, 154, 154, 154, 154, 154, 154, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 180, 0, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 0, 180, 0, 0, 0, 0, 0, - 0, 180, 180, 0, 0, 180, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 247, 0, 0, 0, 180, 0, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 247, 0, 0, 180, 0, 0, 0, - 247, 247, 0, 0, 247, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 247, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 159, 159, 159, 159, 0, 0, - 159, 0, 159, 159, 159, 159, 159, 159, 159, 159, - 0, 0, 0, 247, 0, 0, 247, 0, 159, 159, - 0, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, - 0, 0, 0, 43, 159, 247, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 0, 0, 0, 0, 43, 0, 0, 0, - 159, 159, 0, 43, 0, 0, 0, 0, 180, 180, - 180, 180, 0, 0, 180, 0, 180, 180, 180, 180, - 180, 180, 43, 0, 159, 159, 159, 159, 159, 159, - 159, 0, 180, 180, 0, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 0, 0, 0, 43, 0, 180, 43, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 0, 0, 43, 0, - 0, 0, 0, 0, 180, 180, 0, 247, 247, 247, - 247, 0, 0, 247, 0, 0, 0, 0, 247, 0, - 0, 247, 247, 0, 0, 0, 98, 0, 180, 180, - 180, 180, 180, 180, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 0, 0, 0, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 98, 0, 247, 247, 247, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 0, 0, 0, 0, 0, 98, - 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 0, 0, 43, 0, 0, 0, - 0, 43, 0, 0, 43, 43, 0, 0, 0, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 0, 0, 0, 0, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 45, 0, - 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, - 0, 45, 0, 0, 0, 0, 43, 0, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 98, 98, 98, 0, 98, 98, 98, 98, 0, - 0, 45, 0, 0, 45, 0, 0, 98, 98, 0, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 201, 96, - 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, - 98, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 0, 0, 0, 98, 98, 98, 98, 98, 98, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, - 255, 255, 96, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 255, 0, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 45, 45, 45, 255, - 0, 45, 0, 0, 0, 0, 45, 0, 0, 45, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 0, 94, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, - 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 92, 0, 45, 45, 45, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 0, 94, 0, 92, 0, 0, 108, 0, - 0, 45, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 96, 96, 96, 0, 96, 96, - 96, 96, 0, 0, 0, 0, 0, 94, 0, 0, - 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 202, 0, 0, 0, 0, 0, 108, 0, 94, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, - 0, 108, 96, 96, 0, 0, 0, 0, 255, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, - 96, 96, 96, 108, 110, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 0, 92, 92, 92, 0, 92, - 92, 92, 92, 0, 0, 255, 255, 255, 255, 255, - 255, 92, 92, 0, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 94, 0, 0, 0, 0, 94, - 94, 94, 0, 94, 94, 94, 94, 0, 0, 0, - 0, 0, 0, 92, 92, 94, 94, 110, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 0, 92, 92, 92, - 92, 92, 92, 92, 0, 0, 0, 117, 0, 110, - 0, 0, 112, 0, 0, 0, 0, 0, 108, 0, - 0, 0, 0, 108, 108, 108, 0, 108, 108, 108, - 108, 0, 0, 0, 0, 0, 0, 94, 94, 108, - 108, 117, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 0, 94, 94, 94, 94, 94, 94, 94, 0, 0, - 0, 112, 0, 117, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 108, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 108, 108, 108, 108, - 108, 108, 0, 0, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 110, 0, 0, 0, 0, 110, - 110, 110, 0, 110, 110, 110, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 110, 0, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 117, 117, 117, 0, 117, 117, 117, - 117, 0, 0, 0, 0, 0, 0, 110, 110, 117, - 117, 0, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 0, 110, 110, 110, 110, 110, 110, 110, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 112, 0, 0, 0, 0, 112, 112, 112, - 0, 112, 112, 112, 112, 0, 0, 0, 0, 0, - 0, 117, 117, 112, 112, 83, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 117, 117, 117, 117, 117, - 117, 117, 0, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 112, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, - 112, 112, 112, 112, 112, 112, 0, 0, 83, 0, - 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 159, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 0, 0, 0, 159, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 83, 83, 0, 0, 0, 83, 0, - 83, 83, 83, 83, 83, 83, 83, 83, 32, 0, - 0, 0, 0, 93, 0, 0, 83, 83, 0, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, - 33, 0, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 0, 0, 0, 0, 0, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 0, 0, 83, 83, 83, 83, 159, 159, 83, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, - 0, 0, 83, 83, 83, 83, 83, 83, 0, 0, - 0, 0, 0, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 159, 159, 159, 6, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, - 0, 0, 0, 0, 295, 296, 51, 8, 9, 0, - 52, 0, 0, 0, 0, 53, 10, 11, 297, 298, - 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, - 22, 0, 0, 0, 6, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 6, 0, 0, 0, - 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 23, 0, 79, 80, 81, 82, 24, 25, - 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 28, 95, 29, 0, 0, 0, 0, 0, 110, - 30, 31, 0, 0, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 0, 6, 0, 0, 0, - 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 0, 0, 6, 0, 0, 111, - 0, 0, 0, 0, 0, 0, 110, 315, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, - 6, 6, 6, 6, 6, 6, 0, 0, 6, 0, - 6, 0, 93, 0, 0, 0, 0, 0, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, - 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 50, 51, 8, - 0, 0, 52, 0, 126, 127, 128, 53, 129, 130, - 131, 132, 0, 0, 0, 0, 0, 0, 0, 0, - 133, 134, 0, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 0, 0, 0, 0, 0, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, - 0, 0, 0, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 111, 0, 79, 80, 81, 82, - 0, 92, 153, 154, 0, 0, 94, 276, 0, 0, - 0, 0, 0, 0, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 0, 0, 0, 155, 156, 157, 158, - 159, 160, 30, 49, 50, 51, 8, 0, 0, 52, - 0, 0, 0, 0, 53, 0, 0, 54, 55, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 95, 0, 79, 80, 81, 82, 0, 92, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 111, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 49, 50, 51, 8, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 111, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 111, 0, 0, 0, 0, 0, - 0, 283, 0, 0, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 49, 50, 51, 8, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 277, 0, - 0, 0, 0, 94, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, - 0, 110, 0, 442, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 273, 50, 51, 0, 0, - 0, 274, 0, 0, 0, 0, 275, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 51, 0, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 283, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 51, 0, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 32, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 0, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 0, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 6, 7, 0, 8, 9, - 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, - 25, 0, 0, 26, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, - 0, 30, 31, -}; -short yycheck[] = { 25, - 59, 44, 37, 29, 0, 31, 111, 42, 43, 44, - 45, 37, 47, 92, 37, 59, 125, 260, 100, 42, - 43, 0, 45, 0, 47, 60, 43, 62, 45, 41, - 0, 260, 0, 0, 273, 37, 58, 60, 277, 62, - 42, 43, 37, 45, 96, 47, 260, 42, 43, 43, - 45, 45, 47, 4, 268, 58, 165, 36, 61, 94, - 105, 41, 141, 42, 44, 60, 92, 62, 94, 95, - 107, 94, 41, 41, 25, 44, 44, 271, 272, 61, - 31, 107, 59, 120, 258, 111, 37, 96, 43, 59, - 45, 59, 94, 336, 120, 91, 257, 258, 43, 94, - 45, 0, 258, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 93, 62, 144, 145, - 146, 349, 350, 93, 40, 93, 93, 123, 25, 155, - 156, 370, 371, 348, 31, 0, 61, 219, 0, 165, - 336, 246, 247, 262, 373, 250, 251, 40, 125, 228, - 229, 271, 272, 351, 352, 125, 107, 125, 125, 40, - 59, 355, 356, 121, 122, 404, 40, 118, 407, 120, - 61, 41, 40, 43, 125, 45, 40, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 40, 93, 92, 278, 59, 277, 0, - 40, 40, 228, 229, 283, 257, 157, 158, 159, 260, - 107, 263, 40, 40, 165, 258, 268, 243, 40, 291, - 246, 247, 248, 120, 250, 251, 125, 258, 93, 274, - 275, 93, 33, 262, 41, 355, 356, 260, 41, 40, - 137, 138, 139, 140, 45, 324, 325, 43, 257, 45, - 302, 277, 94, 264, 263, 303, 46, 283, 257, 268, - 125, 257, 258, 125, 260, 261, 62, 302, 165, 93, - 305, 125, 93, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 257, 262, 283, 262, 306, - 91, 41, 318, 319, 403, 96, 264, 323, 324, 325, - 302, 252, 253, 305, 41, 44, 257, 319, 320, 321, - 322, 323, 306, 210, 349, 350, 351, 352, 353, 354, - 0, 218, 123, 291, 369, 0, 349, 350, 351, 352, - 353, 354, 41, 41, 302, 41, 41, 305, 43, 335, - 45, 43, 44, 45, 44, 341, 342, 44, 41, 345, - 373, 347, 41, 41, 349, 0, 351, 352, 353, 354, - 304, 0, 349, 43, 262, 45, 41, 44, 364, 44, - 366, 397, 398, 399, 257, 401, 365, 373, 374, 59, - 277, 349, 350, 305, 59, 43, 44, 45, 33, 415, - 416, 41, 37, 41, 260, 40, 41, 42, 43, 44, - 45, 41, 47, 41, 43, 41, 45, 41, 91, 346, - 41, 437, 262, 93, 59, 60, 442, 62, 93, 91, - 59, 318, 319, 0, 37, 41, 323, 27, 260, 42, - 37, 43, 44, 45, 47, 42, 43, 346, 45, 44, - 47, 346, 346, 43, 165, 125, 409, 31, 93, 36, - 125, 96, 403, 60, 93, 62, 257, 258, 259, 260, - 261, 193, 263, 43, 44, 45, -1, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 125, 94, 283, 43, 44, 45, 125, 94, 319, 320, - 321, 322, 323, 93, 43, 44, 45, 43, 44, 45, - 397, 398, 43, 44, 45, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 415, 416, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, - 341, 342, 37, -1, 345, -1, 347, 42, 43, -1, - 45, -1, 47, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, -1, 366, -1, 167, -1, -1, - 46, -1, 373, 374, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 91, -1, -1, 260, 264, - 273, 274, 275, 276, 277, 278, 268, 280, -1, 94, - -1, 273, 274, 275, 276, 277, 278, -1, 280, -1, - -1, -1, 257, 258, 259, 260, 291, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - 46, -1, -1, -1, -1, -1, 281, 282, 0, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 349, 350, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 0, 0, 337, 338, 339, 340, 0, 59, 343, 344, - 0, 346, -1, -1, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 0, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, 93, -1, 37, -1, -1, 40, 41, 42, 43, - 44, 45, 349, 47, 351, 352, 353, 354, -1, 59, - 59, -1, -1, -1, 260, 59, 60, -1, 62, 59, - -1, -1, -1, 125, -1, -1, -1, 273, 274, 275, - 276, 277, 278, -1, 280, -1, -1, -1, 59, -1, - -1, -1, 382, 93, 93, -1, 386, 387, -1, 93, - -1, -1, 96, 93, -1, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 0, -1, 125, 125, -1, -1, -1, - -1, 125, -1, -1, -1, 125, -1, -1, -1, -1, - -1, -1, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, 125, -1, 33, -1, -1, -1, - 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, - 47, 337, 338, 339, 340, -1, -1, -1, -1, -1, - -1, -1, 59, 60, -1, 62, -1, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, -1, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, 93, -1, -1, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 337, 338, 339, 340, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 125, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, - -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 46, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 346, -1, -1, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, 346, - -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, - -1, 47, 37, -1, -1, -1, -1, 42, 43, -1, - 45, -1, 47, 59, 60, -1, 62, -1, -1, -1, - -1, -1, -1, -1, -1, 60, -1, 62, -1, -1, - 37, -1, -1, -1, -1, 42, 43, -1, 45, -1, - 47, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, 60, -1, 62, 271, 272, -1, 94, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, - -1, -1, -1, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 33, -1, -1, -1, 37, -1, - -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, 337, 338, 339, 340, -1, -1, -1, -1, - 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, 37, -1, -1, -1, -1, 42, 43, 44, 45, - -1, 47, -1, -1, 93, -1, -1, 96, -1, -1, - -1, -1, 37, -1, 60, -1, 62, 42, 43, 44, - 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 60, 125, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, - -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, 94, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - 346, -1, -1, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 353, 354, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 351, 352, 353, 354, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, 302, 346, -1, 305, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, 37, - -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, - -1, -1, -1, 349, 350, 351, 352, 353, 354, -1, - -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 349, 350, 351, 352, 353, 354, - -1, -1, 37, -1, -1, -1, -1, 42, 43, 44, - 45, -1, 47, -1, -1, 93, -1, -1, 96, -1, - -1, -1, 0, -1, -1, 60, -1, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - 41, 59, 43, 44, 45, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, - -1, 62, 37, -1, -1, -1, -1, 42, 43, 44, - 45, -1, 47, -1, 37, 93, -1, -1, -1, 42, - 43, -1, 45, -1, 47, 60, -1, 62, -1, -1, - -1, -1, 93, -1, -1, 96, -1, 60, 37, 62, - -1, -1, -1, 42, 43, -1, 45, 125, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - -1, 60, -1, 62, 125, -1, -1, -1, -1, -1, - -1, 94, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 94, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, 102, -1, 343, 344, 302, 346, -1, - 305, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 264, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, 140, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 291, 349, 350, 351, 352, 353, 354, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, 346, -1, -1, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, 349, 350, 351, 352, 353, 354, - 40, 41, -1, 43, 44, 45, 349, 350, 351, 352, - 353, 354, -1, -1, 273, -1, -1, -1, 277, 59, - 60, 280, 62, -1, -1, -1, -1, -1, -1, -1, - 349, 350, 351, 352, 353, 354, -1, -1, -1, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, - 0, -1, -1, -1, -1, -1, -1, -1, 337, 338, - 339, 340, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, - 33, 370, 371, -1, -1, -1, -1, 40, 41, 59, - -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, - -1, -1, -1, -1, -1, 404, -1, -1, 407, -1, - -1, -1, -1, 93, -1, -1, -1, -1, -1, 37, - -1, -1, -1, -1, 42, 43, -1, 45, -1, 47, - 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, - -1, -1, 60, -1, 62, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, 257, 258, 259, - 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 92, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 137, - 138, 139, 140, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, 346, 165, -1, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 264, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 291, 210, -1, -1, -1, -1, -1, 281, 282, - 218, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 0, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 290, -1, 337, 338, 339, 340, 0, 277, - 343, 344, -1, 346, -1, -1, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, 59, -1, -1, 40, 41, - 318, 319, 44, -1, -1, 323, -1, -1, -1, -1, - -1, 349, 350, 351, 352, 353, 354, 59, 60, -1, - 62, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, 397, - 398, -1, -1, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 415, 416, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 60, -1, 62, -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, 93, -1, - -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, -1, -1, -1, -1, -1, 263, - 125, -1, -1, -1, 268, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, 302, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, 346, -1, -1, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 0, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, - -1, 346, -1, -1, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, 59, -1, -1, 40, 41, -1, -1, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, 41, -1, 43, 44, 45, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, 59, -1, -1, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, - -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, - 93, 42, 43, -1, 45, -1, 47, -1, -1, -1, - -1, 257, -1, -1, -1, -1, -1, 263, 125, 60, - -1, 62, 268, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, 257, 258, 259, 260, -1, -1, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, 94, -1, -1, 302, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, - -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 346, -1, -1, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, 264, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, -1, 291, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, 287, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 350, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, - 351, 352, 353, 354, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -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, 93, -1, -1, 96, -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, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - 346, -1, -1, 349, 350, 351, 352, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, 346, -1, -1, - 349, 350, 351, 352, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, - -1, -1, 40, 41, -1, 43, 44, 45, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, -1, -1, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, 93, -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, 93, -1, 125, 96, -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, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, - -1, -1, -1, 264, -1, -1, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - 291, -1, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, 350, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, 346, -1, -1, 349, 350, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, - 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - -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, - 0, -1, -1, 93, -1, -1, 96, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, - 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, 62, - -1, -1, -1, 93, -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, - 93, -1, -1, 96, -1, 125, -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, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, 346, -1, -1, -1, - 350, -1, -1, -1, 264, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, 291, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, 302, -1, -1, 305, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - 350, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, 41, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, 93, -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, 93, -1, - 125, 96, -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, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, 91, -1, 264, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, 291, -1, 263, 123, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - -1, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, 350, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 59, 260, 261, -1, -1, - -1, -1, -1, -1, -1, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, -1, -1, 283, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 335, -1, -1, -1, -1, -1, 341, 342, -1, - -1, 345, -1, 347, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, - 364, -1, 366, -1, -1, -1, -1, -1, -1, 373, - 374, -1, 59, -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, 93, -1, -1, 96, - -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, 125, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 91, -1, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, 123, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - -1, 260, 261, 59, -1, -1, -1, -1, -1, -1, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, -1, -1, 283, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, 335, -1, -1, -1, - -1, -1, 341, 342, -1, -1, 345, -1, 347, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, 364, -1, 366, -1, -1, - -1, -1, -1, -1, 373, 374, -1, -1, -1, -1, - 59, -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, 93, -1, -1, 96, -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, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, - -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, -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, 93, -1, -1, 96, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -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, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, - 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - -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, 93, -1, -1, 96, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -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, - 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -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, 93, -1, -1, 96, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -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, 93, -1, - -1, 96, -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, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, -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, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 59, -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, 93, -1, -1, 96, - -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, 125, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -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, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -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, 93, -1, -1, 96, -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, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, - -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, -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, 93, -1, -1, 96, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -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, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, - 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - -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, 93, -1, -1, 96, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -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, - 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, 44, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -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, 93, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, 41, -1, 43, 44, - 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, 62, -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, 93, -1, - -1, 96, -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, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 258, 259, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 0, -1, -1, - -1, 306, 307, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 33, -1, -1, -1, -1, -1, -1, 40, 343, 344, - 43, -1, 45, 46, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, 0, -1, 96, -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, 125, -1, 33, -1, -1, -1, -1, -1, - -1, 40, 41, -1, -1, 44, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -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, - 0, -1, -1, -1, 93, -1, -1, 96, -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, 33, -1, -1, 125, -1, -1, -1, - 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - 60, -1, 62, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, 93, -1, -1, 96, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, 0, 307, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, -1, -1, 33, -1, -1, -1, - 343, 344, -1, 40, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 59, -1, 367, 368, 369, 370, 371, 372, - 373, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, -1, 93, -1, 307, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 125, -1, - -1, -1, -1, -1, 343, 344, -1, 257, 258, 259, - 260, -1, -1, 263, -1, -1, -1, -1, 268, -1, - -1, 271, 272, -1, -1, -1, 0, -1, 367, 368, - 369, 370, 371, 372, 373, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 59, -1, 337, 338, 339, - 340, -1, -1, -1, -1, -1, -1, -1, -1, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, 93, - -1, -1, -1, 373, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, -1, -1, 263, -1, -1, -1, - -1, 268, -1, -1, 271, 272, -1, -1, -1, -1, - -1, 125, -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, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 0, -1, - 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - -1, 33, -1, -1, -1, -1, 373, -1, 40, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, - -1, 265, 266, 267, -1, 269, 270, 271, 272, -1, - -1, 93, -1, -1, 96, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 0, - -1, -1, -1, 125, -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, 343, - 344, -1, -1, -1, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, -1, -1, -1, 41, 42, 43, - 44, 45, 93, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, 93, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, 59, - -1, -1, -1, -1, 0, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 93, -1, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, 59, -1, 125, -1, -1, 0, -1, - -1, 373, -1, -1, -1, -1, -1, -1, -1, 260, - -1, -1, -1, -1, 265, 266, 267, -1, 269, 270, - 271, 272, -1, -1, -1, -1, -1, 93, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, -1, -1, -1, 59, -1, 125, - 264, -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, 291, -1, -1, - -1, 93, 343, 344, -1, -1, -1, -1, 302, -1, - -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 125, 0, -1, -1, -1, -1, -1, - 260, -1, -1, -1, -1, 265, 266, 267, -1, 269, - 270, 271, 272, -1, -1, 349, 350, 351, 352, 353, - 354, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, 0, -1, - -1, -1, -1, -1, 260, -1, -1, -1, -1, 265, - 266, 267, -1, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, 343, 344, 281, 282, 93, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, 367, 368, 369, - 370, 371, 372, 373, -1, -1, -1, 59, -1, 125, - -1, -1, 0, -1, -1, -1, -1, -1, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, 343, 344, 281, - 282, 93, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 367, 368, 369, 370, 371, 372, 373, -1, -1, - -1, 59, -1, 125, -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, 343, 344, -1, -1, 93, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, 260, -1, -1, -1, -1, 265, - 266, 267, -1, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, 343, 344, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 367, 368, 369, 370, 371, 372, 373, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 260, -1, -1, -1, -1, 265, 266, 267, - -1, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, 343, 344, 281, 282, 0, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, 367, 368, 369, 370, 371, - 372, 373, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, -1, -1, 93, -1, - -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, - 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, 59, -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, 93, -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, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - -1, -1, 45, -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, 257, 258, 259, -1, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, 91, -1, - -1, -1, -1, 96, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - 123, -1, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 271, 272, 343, 344, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, -1, -1, - -1, -1, -1, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 337, 338, 339, 340, 33, -1, -1, -1, - -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, - 263, -1, -1, -1, -1, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, -1, -1, - 283, -1, -1, -1, 91, -1, -1, -1, -1, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 123, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, -1, 337, 338, 339, 340, 341, 342, - -1, -1, 345, -1, 347, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 33, 366, -1, -1, -1, -1, -1, 40, - 373, 374, -1, -1, 45, -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, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 96, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, 261, -1, 263, -1, -1, -1, - -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, -1, -1, 283, -1, -1, 33, - -1, -1, -1, -1, -1, -1, 40, 41, -1, -1, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, - 337, 338, 339, 340, 341, 342, -1, -1, 345, -1, - 347, -1, 96, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 33, -1, 337, 338, 339, 340, - -1, 40, 343, 344, -1, -1, 45, 46, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 257, 258, 259, 260, -1, -1, 263, - -1, -1, -1, -1, 268, -1, -1, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 96, -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, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 33, -1, 337, 338, 339, 340, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 96, -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, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, 260, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, 260, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, 46, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, 42, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, 91, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 123, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -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, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 257, 258, -1, 260, 261, - -1, -1, -1, -1, -1, -1, -1, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, -1, - -1, 283, -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 335, -1, -1, -1, -1, -1, 341, - 342, -1, -1, 345, -1, 347, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 364, -1, 366, -1, -1, -1, -1, -1, - -1, 373, 374, -}; -#define YYFINAL 2 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 376 -#if YYDEBUG -char *yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0, -0,0,0,0,0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,"'`'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"LABEL","VARIABLE","NUMBER", -"TEXT","COMMAND_LINE","DELIMITED","ORDINAL","TH","LEFT_ARROW_HEAD", -"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","UP","DOWN","LEFT","RIGHT","BOX", -"CIRCLE","ELLIPSE","ARC","LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS", -"FIGNAME","WIDTH","DIAMETER","FROM","TO","AT","WITH","BY","THEN","SOLID", -"DOTTED","DASHED","CHOP","SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW", -"OF","THE","WAY","BETWEEN","AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S", -"DOT_NE","DOT_SE","DOT_NW","DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X", -"DOT_Y","DOT_HT","DOT_WID","DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT", -"K_MAX","K_MIN","INT","RAND","SRAND","COPY","THRU","TOP","BOTTOM","UPPER", -"LOWER","SH","PRINT","CW","CCW","FOR","DO","IF","ELSE","ANDAND","OROR", -"NOTEQUAL","EQUALEQUAL","LESSEQUAL","GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER", -"NORTH","SOUTH","EAST","WEST","CENTER","END","START","RESET","UNTIL","PLOT", -"THICKNESS","FILL","COLORED","OUTLINED","SHADED","ALIGNED","SPRINTF","COMMAND", -"DEFINE","UNDEF", -}; -char *yyrule[] = { -"$accept : top", -"top : optional_separator", -"top : element_list", -"element_list : optional_separator middle_element_list optional_separator", -"middle_element_list : element", -"middle_element_list : middle_element_list separator element", -"optional_separator :", -"optional_separator : separator", -"separator : ';'", -"separator : separator ';'", -"placeless_element : FIGNAME '=' macro_name", -"placeless_element : VARIABLE '=' any_expr", -"placeless_element : VARIABLE ':' '=' any_expr", -"placeless_element : UP", -"placeless_element : DOWN", -"placeless_element : LEFT", -"placeless_element : RIGHT", -"placeless_element : COMMAND_LINE", -"placeless_element : COMMAND print_args", -"placeless_element : PRINT print_args", -"$$1 :", -"placeless_element : SH $$1 DELIMITED", -"placeless_element : COPY TEXT", -"$$2 :", -"$$3 :", -"placeless_element : COPY TEXT THRU $$2 DELIMITED $$3 until", -"$$4 :", -"$$5 :", -"placeless_element : COPY THRU $$4 DELIMITED $$5 until", -"$$6 :", -"placeless_element : FOR VARIABLE '=' expr TO expr optional_by DO $$6 DELIMITED", -"placeless_element : simple_if", -"$$7 :", -"placeless_element : simple_if ELSE $$7 DELIMITED", -"placeless_element : reset_variables", -"placeless_element : RESET", -"macro_name : VARIABLE", -"macro_name : LABEL", -"reset_variables : RESET VARIABLE", -"reset_variables : reset_variables VARIABLE", -"reset_variables : reset_variables ',' VARIABLE", -"print_args : print_arg", -"print_args : print_args print_arg", -"print_arg : expr", -"print_arg : text", -"print_arg : position", -"$$8 :", -"simple_if : IF any_expr THEN $$8 DELIMITED", -"until :", -"until : UNTIL TEXT", -"any_expr : expr", -"any_expr : text_expr", -"text_expr : text EQUALEQUAL text", -"text_expr : text NOTEQUAL text", -"text_expr : text_expr ANDAND text_expr", -"text_expr : text_expr ANDAND expr", -"text_expr : expr ANDAND text_expr", -"text_expr : text_expr OROR text_expr", -"text_expr : text_expr OROR expr", -"text_expr : expr OROR text_expr", -"text_expr : '!' text_expr", -"optional_by :", -"optional_by : BY expr", -"optional_by : BY '*' expr", -"element : object_spec", -"element : LABEL ':' optional_separator element", -"element : LABEL ':' optional_separator position_not_place", -"element : LABEL ':' optional_separator place", -"$$9 :", -"$$10 :", -"element : '{' $$9 element_list '}' $$10 optional_element", -"element : placeless_element", -"optional_element :", -"optional_element : element", -"object_spec : BOX", -"object_spec : CIRCLE", -"object_spec : ELLIPSE", -"object_spec : ARC", -"object_spec : LINE", -"object_spec : ARROW", -"object_spec : MOVE", -"object_spec : SPLINE", -"object_spec : text", -"object_spec : PLOT expr", -"object_spec : PLOT expr text", -"$$11 :", -"object_spec : '[' $$11 element_list ']'", -"object_spec : object_spec HEIGHT expr", -"object_spec : object_spec RADIUS expr", -"object_spec : object_spec WIDTH expr", -"object_spec : object_spec DIAMETER expr", -"object_spec : object_spec expr", -"object_spec : object_spec UP", -"object_spec : object_spec UP expr", -"object_spec : object_spec DOWN", -"object_spec : object_spec DOWN expr", -"object_spec : object_spec RIGHT", -"object_spec : object_spec RIGHT expr", -"object_spec : object_spec LEFT", -"object_spec : object_spec LEFT expr", -"object_spec : object_spec FROM position", -"object_spec : object_spec TO position", -"object_spec : object_spec AT position", -"object_spec : object_spec WITH path", -"object_spec : object_spec WITH position", -"object_spec : object_spec BY expr_pair", -"object_spec : object_spec THEN", -"object_spec : object_spec SOLID", -"object_spec : object_spec DOTTED", -"object_spec : object_spec DOTTED expr", -"object_spec : object_spec DASHED", -"object_spec : object_spec DASHED expr", -"object_spec : object_spec FILL", -"object_spec : object_spec FILL expr", -"object_spec : object_spec SHADED text", -"object_spec : object_spec COLORED text", -"object_spec : object_spec OUTLINED text", -"object_spec : object_spec CHOP", -"object_spec : object_spec CHOP expr", -"object_spec : object_spec SAME", -"object_spec : object_spec INVISIBLE", -"object_spec : object_spec LEFT_ARROW_HEAD", -"object_spec : object_spec RIGHT_ARROW_HEAD", -"object_spec : object_spec DOUBLE_ARROW_HEAD", -"object_spec : object_spec CW", -"object_spec : object_spec CCW", -"object_spec : object_spec text", -"object_spec : object_spec LJUST", -"object_spec : object_spec RJUST", -"object_spec : object_spec ABOVE", -"object_spec : object_spec BELOW", -"object_spec : object_spec THICKNESS expr", -"object_spec : object_spec ALIGNED", -"text : TEXT", -"text : SPRINTF '(' TEXT sprintf_args ')'", -"sprintf_args :", -"sprintf_args : sprintf_args ',' expr", -"position : position_not_place", -"position : place", -"position : '(' place ')'", -"position_not_place : expr_pair", -"position_not_place : position '+' expr_pair", -"position_not_place : '(' position '+' expr_pair ')'", -"position_not_place : position '-' expr_pair", -"position_not_place : '(' position '-' expr_pair ')'", -"position_not_place : '(' position ',' position ')'", -"position_not_place : expr between position AND position", -"position_not_place : '(' expr between position AND position ')'", -"position_not_place : expr '<' position ',' position '>'", -"position_not_place : '(' expr '<' position ',' position '>' ')'", -"between : BETWEEN", -"between : OF THE WAY BETWEEN", -"expr_pair : expr ',' expr", -"expr_pair : '(' expr_pair ')'", -"place : label", -"place : label corner", -"place : corner label", -"place : corner OF label", -"place : HERE", -"label : LABEL", -"label : nth_primitive", -"label : label '.' LABEL", -"ordinal : ORDINAL", -"ordinal : '`' any_expr TH", -"optional_ordinal_last : LAST", -"optional_ordinal_last : ordinal LAST", -"nth_primitive : ordinal object_type", -"nth_primitive : optional_ordinal_last object_type", -"object_type : BOX", -"object_type : CIRCLE", -"object_type : ELLIPSE", -"object_type : ARC", -"object_type : LINE", -"object_type : ARROW", -"object_type : SPLINE", -"object_type : '[' ']'", -"object_type : TEXT", -"label_path : '.' LABEL", -"label_path : label_path '.' LABEL", -"relative_path : corner", -"relative_path : label_path", -"relative_path : label_path corner", -"path : relative_path", -"path : '(' relative_path ',' relative_path ')'", -"path : ORDINAL LAST object_type relative_path", -"path : LAST object_type relative_path", -"path : ORDINAL object_type relative_path", -"path : LABEL relative_path", -"corner : DOT_N", -"corner : DOT_E", -"corner : DOT_W", -"corner : DOT_S", -"corner : DOT_NE", -"corner : DOT_SE", -"corner : DOT_NW", -"corner : DOT_SW", -"corner : DOT_C", -"corner : DOT_START", -"corner : DOT_END", -"corner : TOP", -"corner : BOTTOM", -"corner : LEFT", -"corner : RIGHT", -"corner : UPPER LEFT", -"corner : LOWER LEFT", -"corner : UPPER RIGHT", -"corner : LOWER RIGHT", -"corner : LEFT_CORNER", -"corner : RIGHT_CORNER", -"corner : UPPER LEFT_CORNER", -"corner : LOWER LEFT_CORNER", -"corner : UPPER RIGHT_CORNER", -"corner : LOWER RIGHT_CORNER", -"corner : NORTH", -"corner : SOUTH", -"corner : EAST", -"corner : WEST", -"corner : CENTER", -"corner : START", -"corner : END", -"expr : VARIABLE", -"expr : NUMBER", -"expr : place DOT_X", -"expr : place DOT_Y", -"expr : place DOT_HT", -"expr : place DOT_WID", -"expr : place DOT_RAD", -"expr : expr '+' expr", -"expr : expr '-' expr", -"expr : expr '*' expr", -"expr : expr '/' expr", -"expr : expr '%' expr", -"expr : expr '^' expr", -"expr : '-' expr", -"expr : '(' any_expr ')'", -"expr : SIN '(' any_expr ')'", -"expr : COS '(' any_expr ')'", -"expr : ATAN2 '(' any_expr ',' any_expr ')'", -"expr : LOG '(' any_expr ')'", -"expr : EXP '(' any_expr ')'", -"expr : SQRT '(' any_expr ')'", -"expr : K_MAX '(' any_expr ',' any_expr ')'", -"expr : K_MIN '(' any_expr ',' any_expr ')'", -"expr : INT '(' any_expr ')'", -"expr : RAND '(' any_expr ')'", -"expr : RAND '(' ')'", -"expr : SRAND '(' any_expr ')'", -"expr : expr '<' expr", -"expr : expr LESSEQUAL expr", -"expr : expr '>' expr", -"expr : expr GREATEREQUAL expr", -"expr : expr EQUALEQUAL expr", -"expr : expr NOTEQUAL expr", -"expr : expr ANDAND expr", -"expr : expr OROR expr", -"expr : '!' expr", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 1643 "pic.y" - -/* bison defines const to be empty unless __STDC__ is defined, which it -isn't under cfront */ - -#ifdef const -#undef const -#endif - -static struct { - const char *name; - double val; - int scaled; // non-zero if val should be multiplied by scale -} defaults_table[] = { - { "arcrad", .25, 1 }, - { "arrowht", .1, 1 }, - { "arrowwid", .05, 1 }, - { "circlerad", .25, 1 }, - { "boxht", .5, 1 }, - { "boxwid", .75, 1 }, - { "boxrad", 0.0, 1 }, - { "dashwid", .05, 1 }, - { "ellipseht", .5, 1 }, - { "ellipsewid", .75, 1 }, - { "moveht", .5, 1 }, - { "movewid", .5, 1 }, - { "lineht", .5, 1 }, - { "linewid", .5, 1 }, - { "textht", 0.0, 1 }, - { "textwid", 0.0, 1 }, - { "scale", 1.0, 0 }, - { "linethick", -1.0, 0 }, // in points - { "fillval", .5, 0 }, - { "arrowhead", 1.0, 0 }, - { "maxpswid", 8.5, 0 }, - { "maxpsht", 11.0, 0 }, -}; - -place *lookup_label(const char *label) -{ - saved_state *state = current_saved_state; - PTABLE(place) *tbl = current_table; - for (;;) { - place *pl = tbl->lookup(label); - if (pl) - return pl; - if (!state) - return 0; - tbl = state->tbl; - state = state->prev; - } -} - -void define_label(const char *label, const place *pl) -{ - place *p = new place[1]; - *p = *pl; - current_table->define(label, p); -} - -int lookup_variable(const char *name, double *val) -{ - place *pl = lookup_label(name); - if (pl) { - *val = pl->x; - return 1; - } - return 0; -} - -void define_variable(const char *name, double val) -{ - place *p = new place[1]; - p->obj = 0; - p->x = val; - p->y = 0.0; - current_table->define(name, p); - if (strcmp(name, "scale") == 0) { - // When the scale changes, reset all scaled pre-defined variables to - // their default values. - for (unsigned int i = 0; - i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) - if (defaults_table[i].scaled) - define_variable(defaults_table[i].name, val*defaults_table[i].val); - } -} - -// called once only (not once per parse) - -void parse_init() -{ - current_direction = RIGHT_DIRECTION; - current_position.x = 0.0; - current_position.y = 0.0; - // This resets everything to its default value. - reset_all(); -} - -void reset(const char *nm) -{ - for (unsigned int i = 0; - i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) - if (strcmp(nm, defaults_table[i].name) == 0) { - double val = defaults_table[i].val; - if (defaults_table[i].scaled) { - double scale; - lookup_variable("scale", &scale); - val *= scale; - } - define_variable(defaults_table[i].name, val); - return; - } - lex_error("`%1' is not a predefined variable", nm); -} - -void reset_all() -{ - // We only have to explicitly reset the pre-defined variables that - // aren't scaled because `scale' is not scaled, and changing the - // value of `scale' will reset all the pre-defined variables that - // are scaled. - for (unsigned int i = 0; - i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) - if (!defaults_table[i].scaled) - define_variable(defaults_table[i].name, defaults_table[i].val); -} - -// called after each parse - -void parse_cleanup() -{ - while (current_saved_state != 0) { - delete current_table; - current_table = current_saved_state->tbl; - saved_state *tem = current_saved_state; - current_saved_state = current_saved_state->prev; - delete tem; - } - assert(current_table == &top_table); - PTABLE_ITERATOR(place) iter(current_table); - const char *key; - place *pl; - while (iter.next(&key, &pl)) - if (pl->obj != 0) { - position pos = pl->obj->origin(); - pl->obj = 0; - pl->x = pos.x; - pl->y = pos.y; - } - while (olist.head != 0) { - object *tem = olist.head; - olist.head = olist.head->next; - delete tem; - } - olist.tail = 0; - current_direction = RIGHT_DIRECTION; - current_position.x = 0.0; - current_position.y = 0.0; -} - -const char *ordinal_postfix(int n) -{ - if (n < 10 || n > 20) - switch (n % 10) { - case 1: - return "st"; - case 2: - return "nd"; - case 3: - return "rd"; - } - return "th"; -} - -const char *object_type_name(object_type type) -{ - switch (type) { - case BOX_OBJECT: - return "box"; - case CIRCLE_OBJECT: - return "circle"; - case ELLIPSE_OBJECT: - return "ellipse"; - case ARC_OBJECT: - return "arc"; - case SPLINE_OBJECT: - return "spline"; - case LINE_OBJECT: - return "line"; - case ARROW_OBJECT: - return "arrow"; - case MOVE_OBJECT: - return "move"; - case TEXT_OBJECT: - return "\"\""; - case BLOCK_OBJECT: - return "[]"; - case OTHER_OBJECT: - case MARK_OBJECT: - default: - break; - } - return "object"; -} - -static char sprintf_buf[1024]; - -char *format_number(const char *form, double n) -{ - if (form == 0) - form = "%g"; - return do_sprintf(form, &n, 1); -} - -char *do_sprintf(const char *form, const double *v, int nv) -{ - string result; - int i = 0; - string one_format; - while (*form) { - if (*form == '%') { - one_format += *form++; - for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++) - one_format += *form; - if (*form == '\0' || strchr("eEfgG%", *form) == 0) { - lex_error("bad sprintf format"); - result += one_format; - result += form; - break; - } - if (*form == '%') { - one_format += *form++; - one_format += '\0'; - snprintf(sprintf_buf, sizeof(sprintf_buf), - "%s", one_format.contents()); - } - else { - if (i >= nv) { - lex_error("too few arguments to snprintf"); - result += one_format; - result += form; - break; - } - one_format += *form++; - one_format += '\0'; - snprintf(sprintf_buf, sizeof(sprintf_buf), - one_format.contents(), v[i++]); - } - one_format.clear(); - result += sprintf_buf; - } - else - result += *form++; - } - result += '\0'; - return strsave(result.contents()); -} -#line 3753 "y.tab.c" -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif -{ - register int yym, yyn, yystate; -#if YYDEBUG - register char *yys; - extern char *getenv(); - - if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if ((yyn = yydefred[yystate]) != 0) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#ifdef lint - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - yyval = yyvsp[1-yym]; - switch (yyn) - { -case 2: -#line 278 "pic.y" -{ - if (olist.head) - print_picture(olist.head); - } -break; -case 3: -#line 287 "pic.y" -{ yyval.pl = yyvsp[-1].pl; } -break; -case 4: -#line 292 "pic.y" -{ yyval.pl = yyvsp[0].pl; } -break; -case 5: -#line 294 "pic.y" -{ yyval.pl = yyvsp[-2].pl; } -break; -case 10: -#line 309 "pic.y" -{ - a_delete graphname; - graphname = new char[strlen(yyvsp[0].str) + 1]; - strcpy(graphname, yyvsp[0].str); - a_delete yyvsp[0].str; - } -break; -case 11: -#line 317 "pic.y" -{ - define_variable(yyvsp[-2].str, yyvsp[0].x); - a_delete yyvsp[-2].str; - } -break; -case 12: -#line 322 "pic.y" -{ - place *p = lookup_label(yyvsp[-3].str); - if (!p) { - lex_error("variable `%1' not defined", yyvsp[-3].str); - YYABORT; - } - p->obj = 0; - p->x = yyvsp[0].x; - p->y = 0.0; - a_delete yyvsp[-3].str; - } -break; -case 13: -#line 334 "pic.y" -{ current_direction = UP_DIRECTION; } -break; -case 14: -#line 336 "pic.y" -{ current_direction = DOWN_DIRECTION; } -break; -case 15: -#line 338 "pic.y" -{ current_direction = LEFT_DIRECTION; } -break; -case 16: -#line 340 "pic.y" -{ current_direction = RIGHT_DIRECTION; } -break; -case 17: -#line 342 "pic.y" -{ - olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, - yyvsp[0].lstr.lineno)); - } -break; -case 18: -#line 347 "pic.y" -{ - olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, - yyvsp[0].lstr.lineno)); - } -break; -case 19: -#line 352 "pic.y" -{ - fprintf(stderr, "%s\n", yyvsp[0].lstr.str); - a_delete yyvsp[0].lstr.str; - fflush(stderr); - } -break; -case 20: -#line 358 "pic.y" -{ delim_flag = 1; } -break; -case 21: -#line 360 "pic.y" -{ - delim_flag = 0; - if (safer_flag) - lex_error("unsafe to run command `%1'", yyvsp[0].str); - else - system(yyvsp[0].str); - a_delete yyvsp[0].str; - } -break; -case 22: -#line 369 "pic.y" -{ - if (yychar < 0) - do_lookahead(); - do_copy(yyvsp[0].lstr.str); - /* do not delete the filename*/ - } -break; -case 23: -#line 376 "pic.y" -{ delim_flag = 2; } -break; -case 24: -#line 378 "pic.y" -{ delim_flag = 0; } -break; -case 25: -#line 380 "pic.y" -{ - if (yychar < 0) - do_lookahead(); - copy_file_thru(yyvsp[-5].lstr.str, yyvsp[-2].str, yyvsp[0].str); - /* do not delete the filename*/ - a_delete yyvsp[-2].str; - a_delete yyvsp[0].str; - } -break; -case 26: -#line 389 "pic.y" -{ delim_flag = 2; } -break; -case 27: -#line 391 "pic.y" -{ delim_flag = 0; } -break; -case 28: -#line 393 "pic.y" -{ - if (yychar < 0) - do_lookahead(); - copy_rest_thru(yyvsp[-2].str, yyvsp[0].str); - a_delete yyvsp[-2].str; - a_delete yyvsp[0].str; - } -break; -case 29: -#line 401 "pic.y" -{ delim_flag = 1; } -break; -case 30: -#line 403 "pic.y" -{ - delim_flag = 0; - if (yychar < 0) - do_lookahead(); - do_for(yyvsp[-8].str, yyvsp[-6].x, yyvsp[-4].x, yyvsp[-3].by.is_multiplicative, yyvsp[-3].by.val, yyvsp[0].str); - } -break; -case 31: -#line 410 "pic.y" -{ - if (yychar < 0) - do_lookahead(); - if (yyvsp[0].if_data.x != 0.0) - push_body(yyvsp[0].if_data.body); - a_delete yyvsp[0].if_data.body; - } -break; -case 32: -#line 418 "pic.y" -{ delim_flag = 1; } -break; -case 33: -#line 420 "pic.y" -{ - delim_flag = 0; - if (yychar < 0) - do_lookahead(); - if (yyvsp[-3].if_data.x != 0.0) - push_body(yyvsp[-3].if_data.body); - else - push_body(yyvsp[0].str); - a_delete yyvsp[-3].if_data.body; - a_delete yyvsp[0].str; - } -break; -case 35: -#line 433 "pic.y" -{ define_variable("scale", 1.0); } -break; -case 38: -#line 443 "pic.y" -{ - reset(yyvsp[0].str); - a_delete yyvsp[0].str; - } -break; -case 39: -#line 448 "pic.y" -{ - reset(yyvsp[0].str); - a_delete yyvsp[0].str; - } -break; -case 40: -#line 453 "pic.y" -{ - reset(yyvsp[0].str); - a_delete yyvsp[0].str; - } -break; -case 41: -#line 461 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } -break; -case 42: -#line 463 "pic.y" -{ - yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1]; - strcpy(yyval.lstr.str, yyvsp[-1].lstr.str); - strcat(yyval.lstr.str, yyvsp[0].lstr.str); - a_delete yyvsp[-1].lstr.str; - a_delete yyvsp[0].lstr.str; - if (yyvsp[-1].lstr.filename) { - yyval.lstr.filename = yyvsp[-1].lstr.filename; - yyval.lstr.lineno = yyvsp[-1].lstr.lineno; - } - else if (yyvsp[0].lstr.filename) { - yyval.lstr.filename = yyvsp[0].lstr.filename; - yyval.lstr.lineno = yyvsp[0].lstr.lineno; - } - } -break; -case 43: -#line 482 "pic.y" -{ - yyval.lstr.str = new char[GDIGITS + 1]; - sprintf(yyval.lstr.str, "%g", yyvsp[0].x); - yyval.lstr.filename = 0; - yyval.lstr.lineno = 0; - } -break; -case 44: -#line 489 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } -break; -case 45: -#line 491 "pic.y" -{ - yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1]; - sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y); - yyval.lstr.filename = 0; - yyval.lstr.lineno = 0; - } -break; -case 46: -#line 501 "pic.y" -{ delim_flag = 1; } -break; -case 47: -#line 503 "pic.y" -{ - delim_flag = 0; - yyval.if_data.x = yyvsp[-3].x; - yyval.if_data.body = yyvsp[0].str; - } -break; -case 48: -#line 512 "pic.y" -{ yyval.str = 0; } -break; -case 49: -#line 514 "pic.y" -{ yyval.str = yyvsp[0].lstr.str; } -break; -case 50: -#line 519 "pic.y" -{ yyval.x = yyvsp[0].x; } -break; -case 51: -#line 521 "pic.y" -{ yyval.x = yyvsp[0].x; } -break; -case 52: -#line 526 "pic.y" -{ - yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0; - a_delete yyvsp[-2].lstr.str; - a_delete yyvsp[0].lstr.str; - } -break; -case 53: -#line 532 "pic.y" -{ - yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0; - a_delete yyvsp[-2].lstr.str; - a_delete yyvsp[0].lstr.str; - } -break; -case 54: -#line 538 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } -break; -case 55: -#line 540 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } -break; -case 56: -#line 542 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } -break; -case 57: -#line 544 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } -break; -case 58: -#line 546 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } -break; -case 59: -#line 548 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } -break; -case 60: -#line 550 "pic.y" -{ yyval.x = (yyvsp[0].x == 0.0); } -break; -case 61: -#line 556 "pic.y" -{ - yyval.by.val = 1.0; - yyval.by.is_multiplicative = 0; - } -break; -case 62: -#line 561 "pic.y" -{ - yyval.by.val = yyvsp[0].x; - yyval.by.is_multiplicative = 0; - } -break; -case 63: -#line 566 "pic.y" -{ - yyval.by.val = yyvsp[0].x; - yyval.by.is_multiplicative = 1; - } -break; -case 64: -#line 574 "pic.y" -{ - yyval.pl.obj = yyvsp[0].spec->make_object(¤t_position, - ¤t_direction); - if (yyval.pl.obj == 0) - YYABORT; - delete yyvsp[0].spec; - if (yyval.pl.obj) - olist.append(yyval.pl.obj); - else { - yyval.pl.x = current_position.x; - yyval.pl.y = current_position.y; - } - } -break; -case 65: -#line 588 "pic.y" -{ - yyval.pl = yyvsp[0].pl; - define_label(yyvsp[-3].str, & yyval.pl); - a_delete yyvsp[-3].str; - } -break; -case 66: -#line 594 "pic.y" -{ - yyval.pl.obj = 0; - yyval.pl.x = yyvsp[0].pair.x; - yyval.pl.y = yyvsp[0].pair.y; - define_label(yyvsp[-3].str, & yyval.pl); - a_delete yyvsp[-3].str; - } -break; -case 67: -#line 602 "pic.y" -{ - yyval.pl = yyvsp[0].pl; - define_label(yyvsp[-3].str, & yyval.pl); - a_delete yyvsp[-3].str; - } -break; -case 68: -#line 608 "pic.y" -{ - yyval.state.x = current_position.x; - yyval.state.y = current_position.y; - yyval.state.dir = current_direction; - } -break; -case 69: -#line 614 "pic.y" -{ - current_position.x = yyvsp[-2].state.x; - current_position.y = yyvsp[-2].state.y; - current_direction = yyvsp[-2].state.dir; - } -break; -case 70: -#line 620 "pic.y" -{ - yyval.pl = yyvsp[-3].pl; - } -break; -case 71: -#line 624 "pic.y" -{ - yyval.pl.obj = 0; - yyval.pl.x = current_position.x; - yyval.pl.y = current_position.y; - } -break; -case 72: -#line 633 "pic.y" -{} -break; -case 73: -#line 635 "pic.y" -{} -break; -case 74: -#line 640 "pic.y" -{ yyval.spec = new object_spec(BOX_OBJECT); } -break; -case 75: -#line 642 "pic.y" -{ yyval.spec = new object_spec(CIRCLE_OBJECT); } -break; -case 76: -#line 644 "pic.y" -{ yyval.spec = new object_spec(ELLIPSE_OBJECT); } -break; -case 77: -#line 646 "pic.y" -{ - yyval.spec = new object_spec(ARC_OBJECT); - yyval.spec->dir = current_direction; - } -break; -case 78: -#line 651 "pic.y" -{ - yyval.spec = new object_spec(LINE_OBJECT); - lookup_variable("lineht", & yyval.spec->segment_height); - lookup_variable("linewid", & yyval.spec->segment_width); - yyval.spec->dir = current_direction; - } -break; -case 79: -#line 658 "pic.y" -{ - yyval.spec = new object_spec(ARROW_OBJECT); - lookup_variable("lineht", & yyval.spec->segment_height); - lookup_variable("linewid", & yyval.spec->segment_width); - yyval.spec->dir = current_direction; - } -break; -case 80: -#line 665 "pic.y" -{ - yyval.spec = new object_spec(MOVE_OBJECT); - lookup_variable("moveht", & yyval.spec->segment_height); - lookup_variable("movewid", & yyval.spec->segment_width); - yyval.spec->dir = current_direction; - } -break; -case 81: -#line 672 "pic.y" -{ - yyval.spec = new object_spec(SPLINE_OBJECT); - lookup_variable("lineht", & yyval.spec->segment_height); - lookup_variable("linewid", & yyval.spec->segment_width); - yyval.spec->dir = current_direction; - } -break; -case 82: -#line 679 "pic.y" -{ - yyval.spec = new object_spec(TEXT_OBJECT); - yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); - } -break; -case 83: -#line 684 "pic.y" -{ - yyval.spec = new object_spec(TEXT_OBJECT); - yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1); - } -break; -case 84: -#line 689 "pic.y" -{ - yyval.spec = new object_spec(TEXT_OBJECT); - yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x), - yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); - a_delete yyvsp[0].lstr.str; - } -break; -case 85: -#line 696 "pic.y" -{ - saved_state *p = new saved_state; - yyval.pstate = p; - p->x = current_position.x; - p->y = current_position.y; - p->dir = current_direction; - p->tbl = current_table; - p->prev = current_saved_state; - current_position.x = 0.0; - current_position.y = 0.0; - current_table = new PTABLE(place); - current_saved_state = p; - olist.append(make_mark_object()); - } -break; -case 86: -#line 711 "pic.y" -{ - current_position.x = yyvsp[-2].pstate->x; - current_position.y = yyvsp[-2].pstate->y; - current_direction = yyvsp[-2].pstate->dir; - yyval.spec = new object_spec(BLOCK_OBJECT); - olist.wrap_up_block(& yyval.spec->oblist); - yyval.spec->tbl = current_table; - current_table = yyvsp[-2].pstate->tbl; - current_saved_state = yyvsp[-2].pstate->prev; - delete yyvsp[-2].pstate; - } -break; -case 87: -#line 723 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->height = yyvsp[0].x; - yyval.spec->flags |= HAS_HEIGHT; - } -break; -case 88: -#line 729 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->radius = yyvsp[0].x; - yyval.spec->flags |= HAS_RADIUS; - } -break; -case 89: -#line 735 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->width = yyvsp[0].x; - yyval.spec->flags |= HAS_WIDTH; - } -break; -case 90: -#line 741 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->radius = yyvsp[0].x/2.0; - yyval.spec->flags |= HAS_RADIUS; - } -break; -case 91: -#line 747 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= HAS_SEGMENT; - switch (yyval.spec->dir) { - case UP_DIRECTION: - yyval.spec->segment_pos.y += yyvsp[0].x; - break; - case DOWN_DIRECTION: - yyval.spec->segment_pos.y -= yyvsp[0].x; - break; - case RIGHT_DIRECTION: - yyval.spec->segment_pos.x += yyvsp[0].x; - break; - case LEFT_DIRECTION: - yyval.spec->segment_pos.x -= yyvsp[0].x; - break; - } - } -break; -case 92: -#line 766 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->dir = UP_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.y += yyval.spec->segment_height; - } -break; -case 93: -#line 773 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->dir = UP_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.y += yyvsp[0].x; - } -break; -case 94: -#line 780 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->dir = DOWN_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.y -= yyval.spec->segment_height; - } -break; -case 95: -#line 787 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->dir = DOWN_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.y -= yyvsp[0].x; - } -break; -case 96: -#line 794 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->dir = RIGHT_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x += yyval.spec->segment_width; - } -break; -case 97: -#line 801 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->dir = RIGHT_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x += yyvsp[0].x; - } -break; -case 98: -#line 808 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->dir = LEFT_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x -= yyval.spec->segment_width; - } -break; -case 99: -#line 815 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->dir = LEFT_DIRECTION; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x -= yyvsp[0].x; - } -break; -case 100: -#line 822 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_FROM; - yyval.spec->from.x = yyvsp[0].pair.x; - yyval.spec->from.y = yyvsp[0].pair.y; - } -break; -case 101: -#line 829 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - if (yyval.spec->flags & HAS_SEGMENT) - yyval.spec->segment_list = new segment(yyval.spec->segment_pos, - yyval.spec->segment_is_absolute, - yyval.spec->segment_list); - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x = yyvsp[0].pair.x; - yyval.spec->segment_pos.y = yyvsp[0].pair.y; - yyval.spec->segment_is_absolute = 1; - yyval.spec->flags |= HAS_TO; - yyval.spec->to.x = yyvsp[0].pair.x; - yyval.spec->to.y = yyvsp[0].pair.y; - } -break; -case 102: -#line 844 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_AT; - yyval.spec->at.x = yyvsp[0].pair.x; - yyval.spec->at.y = yyvsp[0].pair.y; - if (yyval.spec->type != ARC_OBJECT) { - yyval.spec->flags |= HAS_FROM; - yyval.spec->from.x = yyvsp[0].pair.x; - yyval.spec->from.y = yyvsp[0].pair.y; - } - } -break; -case 103: -#line 856 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_WITH; - yyval.spec->with = yyvsp[0].pth; - } -break; -case 104: -#line 862 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_WITH; - position pos; - pos.x = yyvsp[0].pair.x; - pos.y = yyvsp[0].pair.y; - yyval.spec->with = new path(pos); - } -break; -case 105: -#line 871 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_SEGMENT; - yyval.spec->segment_pos.x += yyvsp[0].pair.x; - yyval.spec->segment_pos.y += yyvsp[0].pair.y; - } -break; -case 106: -#line 878 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - if (yyval.spec->flags & HAS_SEGMENT) { - yyval.spec->segment_list = new segment(yyval.spec->segment_pos, - yyval.spec->segment_is_absolute, - yyval.spec->segment_list); - yyval.spec->flags &= ~HAS_SEGMENT; - yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0; - yyval.spec->segment_is_absolute = 0; - } - } -break; -case 107: -#line 890 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; /* nothing*/ - } -break; -case 108: -#line 894 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_DOTTED; - lookup_variable("dashwid", & yyval.spec->dash_width); - } -break; -case 109: -#line 900 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= IS_DOTTED; - yyval.spec->dash_width = yyvsp[0].x; - } -break; -case 110: -#line 906 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_DASHED; - lookup_variable("dashwid", & yyval.spec->dash_width); - } -break; -case 111: -#line 912 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= IS_DASHED; - yyval.spec->dash_width = yyvsp[0].x; - } -break; -case 112: -#line 918 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_DEFAULT_FILLED; - } -break; -case 113: -#line 923 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= IS_FILLED; - yyval.spec->fill = yyvsp[0].x; - } -break; -case 114: -#line 929 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= (IS_SHADED | IS_FILLED); - yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1]; - strcpy(yyval.spec->shaded, yyvsp[0].lstr.str); - } -break; -case 115: -#line 936 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED); - yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1]; - strcpy(yyval.spec->shaded, yyvsp[0].lstr.str); - yyval.spec->outlined = new char[strlen(yyvsp[0].lstr.str)+1]; - strcpy(yyval.spec->outlined, yyvsp[0].lstr.str); - } -break; -case 116: -#line 945 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= IS_OUTLINED; - yyval.spec->outlined = new char[strlen(yyvsp[0].lstr.str)+1]; - strcpy(yyval.spec->outlined, yyvsp[0].lstr.str); - } -break; -case 117: -#line 952 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - /* line chop chop means line chop 0 chop 0*/ - if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { - yyval.spec->flags |= IS_CHOPPED; - yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; - yyval.spec->start_chop = yyval.spec->end_chop = 0.0; - } - else if (yyval.spec->flags & IS_CHOPPED) { - yyval.spec->end_chop = 0.0; - } - else { - yyval.spec->flags |= IS_DEFAULT_CHOPPED; - } - } -break; -case 118: -#line 968 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { - yyval.spec->flags |= IS_CHOPPED; - yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; - yyval.spec->start_chop = 0.0; - yyval.spec->end_chop = yyvsp[0].x; - } - else if (yyval.spec->flags & IS_CHOPPED) { - yyval.spec->end_chop = yyvsp[0].x; - } - else { - yyval.spec->start_chop = yyval.spec->end_chop = yyvsp[0].x; - yyval.spec->flags |= IS_CHOPPED; - } - } -break; -case 119: -#line 985 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_SAME; - } -break; -case 120: -#line 990 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_INVISIBLE; - } -break; -case 121: -#line 995 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= HAS_LEFT_ARROW_HEAD; - } -break; -case 122: -#line 1000 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD; - } -break; -case 123: -#line 1005 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD); - } -break; -case 124: -#line 1010 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_CLOCKWISE; - } -break; -case 125: -#line 1015 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags &= ~IS_CLOCKWISE; - } -break; -case 126: -#line 1020 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - text_item **p; - for (p = & yyval.spec->text; *p; p = &(*p)->next) - ; - *p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); - } -break; -case 127: -#line 1028 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - if (yyval.spec->text) { - text_item *p; - for (p = yyval.spec->text; p->next; p = p->next) - ; - p->adj.h = LEFT_ADJUST; - } - } -break; -case 128: -#line 1038 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - if (yyval.spec->text) { - text_item *p; - for (p = yyval.spec->text; p->next; p = p->next) - ; - p->adj.h = RIGHT_ADJUST; - } - } -break; -case 129: -#line 1048 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - if (yyval.spec->text) { - text_item *p; - for (p = yyval.spec->text; p->next; p = p->next) - ; - p->adj.v = ABOVE_ADJUST; - } - } -break; -case 130: -#line 1058 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - if (yyval.spec->text) { - text_item *p; - for (p = yyval.spec->text; p->next; p = p->next) - ; - p->adj.v = BELOW_ADJUST; - } - } -break; -case 131: -#line 1068 "pic.y" -{ - yyval.spec = yyvsp[-2].spec; - yyval.spec->flags |= HAS_THICKNESS; - yyval.spec->thickness = yyvsp[0].x; - } -break; -case 132: -#line 1074 "pic.y" -{ - yyval.spec = yyvsp[-1].spec; - yyval.spec->flags |= IS_ALIGNED; - } -break; -case 133: -#line 1082 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } -break; -case 134: -#line 1084 "pic.y" -{ - yyval.lstr.filename = yyvsp[-2].lstr.filename; - yyval.lstr.lineno = yyvsp[-2].lstr.lineno; - yyval.lstr.str = do_sprintf(yyvsp[-2].lstr.str, yyvsp[-1].dv.v, yyvsp[-1].dv.nv); - a_delete yyvsp[-1].dv.v; - a_delete yyvsp[-2].lstr.str; - } -break; -case 135: -#line 1095 "pic.y" -{ - yyval.dv.v = 0; - yyval.dv.nv = 0; - yyval.dv.maxv = 0; - } -break; -case 136: -#line 1101 "pic.y" -{ - yyval.dv = yyvsp[-2].dv; - if (yyval.dv.nv >= yyval.dv.maxv) { - if (yyval.dv.nv == 0) { - yyval.dv.v = new double[4]; - yyval.dv.maxv = 4; - } - else { - double *oldv = yyval.dv.v; - yyval.dv.maxv *= 2; -#if 0 - yyval.dv.v = new double[yyval.dv.maxv]; - memcpy(yyval.dv.v, oldv, yyval.dv.nv*sizeof(double)); -#else - /* workaround for bug in Compaq C++ V6.5-033*/ - /* for Compaq Tru64 UNIX V5.1A (Rev. 1885)*/ - double *foo = new double[yyval.dv.maxv]; - memcpy(foo, oldv, yyval.dv.nv*sizeof(double)); - yyval.dv.v = foo; -#endif - a_delete oldv; - } - } - yyval.dv.v[yyval.dv.nv] = yyvsp[0].x; - yyval.dv.nv += 1; - } -break; -case 137: -#line 1131 "pic.y" -{ yyval.pair = yyvsp[0].pair; } -break; -case 138: -#line 1133 "pic.y" -{ - position pos = yyvsp[0].pl; - yyval.pair.x = pos.x; - yyval.pair.y = pos.y; - } -break; -case 139: -#line 1139 "pic.y" -{ - position pos = yyvsp[-1].pl; - yyval.pair.x = pos.x; - yyval.pair.y = pos.y; - } -break; -case 140: -#line 1148 "pic.y" -{ yyval.pair = yyvsp[0].pair; } -break; -case 141: -#line 1150 "pic.y" -{ - yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x; - yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y; - } -break; -case 142: -#line 1155 "pic.y" -{ - yyval.pair.x = yyvsp[-3].pair.x + yyvsp[-1].pair.x; - yyval.pair.y = yyvsp[-3].pair.y + yyvsp[-1].pair.y; - } -break; -case 143: -#line 1160 "pic.y" -{ - yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x; - yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y; - } -break; -case 144: -#line 1165 "pic.y" -{ - yyval.pair.x = yyvsp[-3].pair.x - yyvsp[-1].pair.x; - yyval.pair.y = yyvsp[-3].pair.y - yyvsp[-1].pair.y; - } -break; -case 145: -#line 1170 "pic.y" -{ - yyval.pair.x = yyvsp[-3].pair.x; - yyval.pair.y = yyvsp[-1].pair.y; - } -break; -case 146: -#line 1175 "pic.y" -{ - yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x; - yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y; - } -break; -case 147: -#line 1180 "pic.y" -{ - yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; - yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; - } -break; -case 148: -#line 1185 "pic.y" -{ - yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; - yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; - } -break; -case 149: -#line 1190 "pic.y" -{ - yyval.pair.x = (1.0 - yyvsp[-6].x)*yyvsp[-4].pair.x + yyvsp[-6].x*yyvsp[-2].pair.x; - yyval.pair.y = (1.0 - yyvsp[-6].x)*yyvsp[-4].pair.y + yyvsp[-6].x*yyvsp[-2].pair.y; - } -break; -case 152: -#line 1203 "pic.y" -{ - yyval.pair.x = yyvsp[-2].x; - yyval.pair.y = yyvsp[0].x; - } -break; -case 153: -#line 1208 "pic.y" -{ yyval.pair = yyvsp[-1].pair; } -break; -case 154: -#line 1214 "pic.y" -{ yyval.pl = yyvsp[0].pl; } -break; -case 155: -#line 1216 "pic.y" -{ - path pth(yyvsp[0].crn); - if (!pth.follow(yyvsp[-1].pl, & yyval.pl)) - YYABORT; - } -break; -case 156: -#line 1222 "pic.y" -{ - path pth(yyvsp[-1].crn); - if (!pth.follow(yyvsp[0].pl, & yyval.pl)) - YYABORT; - } -break; -case 157: -#line 1228 "pic.y" -{ - path pth(yyvsp[-2].crn); - if (!pth.follow(yyvsp[0].pl, & yyval.pl)) - YYABORT; - } -break; -case 158: -#line 1234 "pic.y" -{ - yyval.pl.x = current_position.x; - yyval.pl.y = current_position.y; - yyval.pl.obj = 0; - } -break; -case 159: -#line 1243 "pic.y" -{ - place *p = lookup_label(yyvsp[0].str); - if (!p) { - lex_error("there is no place `%1'", yyvsp[0].str); - YYABORT; - } - yyval.pl = *p; - a_delete yyvsp[0].str; - } -break; -case 160: -#line 1253 "pic.y" -{ yyval.pl.obj = yyvsp[0].obj; } -break; -case 161: -#line 1255 "pic.y" -{ - path pth(yyvsp[0].str); - if (!pth.follow(yyvsp[-2].pl, & yyval.pl)) - YYABORT; - } -break; -case 162: -#line 1264 "pic.y" -{ yyval.n = yyvsp[0].n; } -break; -case 163: -#line 1266 "pic.y" -{ - /* XXX Check for overflow (and non-integers?).*/ - yyval.n = (int)yyvsp[-1].x; - } -break; -case 164: -#line 1274 "pic.y" -{ yyval.n = 1; } -break; -case 165: -#line 1276 "pic.y" -{ yyval.n = yyvsp[-1].n; } -break; -case 166: -#line 1281 "pic.y" -{ - int count = 0; - object *p; - for (p = olist.head; p != 0; p = p->next) - if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { - yyval.obj = p; - break; - } - if (p == 0) { - lex_error("there is no %1%2 %3", yyvsp[-1].n, ordinal_postfix(yyvsp[-1].n), - object_type_name(yyvsp[0].obtype)); - YYABORT; - } - } -break; -case 167: -#line 1296 "pic.y" -{ - int count = 0; - object *p; - for (p = olist.tail; p != 0; p = p->prev) - if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { - yyval.obj = p; - break; - } - if (p == 0) { - lex_error("there is no %1%2 last %3", yyvsp[-1].n, - ordinal_postfix(yyvsp[-1].n), object_type_name(yyvsp[0].obtype)); - YYABORT; - } - } -break; -case 168: -#line 1314 "pic.y" -{ yyval.obtype = BOX_OBJECT; } -break; -case 169: -#line 1316 "pic.y" -{ yyval.obtype = CIRCLE_OBJECT; } -break; -case 170: -#line 1318 "pic.y" -{ yyval.obtype = ELLIPSE_OBJECT; } -break; -case 171: -#line 1320 "pic.y" -{ yyval.obtype = ARC_OBJECT; } -break; -case 172: -#line 1322 "pic.y" -{ yyval.obtype = LINE_OBJECT; } -break; -case 173: -#line 1324 "pic.y" -{ yyval.obtype = ARROW_OBJECT; } -break; -case 174: -#line 1326 "pic.y" -{ yyval.obtype = SPLINE_OBJECT; } -break; -case 175: -#line 1328 "pic.y" -{ yyval.obtype = BLOCK_OBJECT; } -break; -case 176: -#line 1330 "pic.y" -{ yyval.obtype = TEXT_OBJECT; } -break; -case 177: -#line 1335 "pic.y" -{ yyval.pth = new path(yyvsp[0].str); } -break; -case 178: -#line 1337 "pic.y" -{ - yyval.pth = yyvsp[-2].pth; - yyval.pth->append(yyvsp[0].str); - } -break; -case 179: -#line 1345 "pic.y" -{ yyval.pth = new path(yyvsp[0].crn); } -break; -case 180: -#line 1349 "pic.y" -{ yyval.pth = yyvsp[0].pth; } -break; -case 181: -#line 1351 "pic.y" -{ - yyval.pth = yyvsp[-1].pth; - yyval.pth->append(yyvsp[0].crn); - } -break; -case 182: -#line 1359 "pic.y" -{ yyval.pth = yyvsp[0].pth; } -break; -case 183: -#line 1361 "pic.y" -{ - yyval.pth = yyvsp[-3].pth; - yyval.pth->set_ypath(yyvsp[-1].pth); - } -break; -case 184: -#line 1367 "pic.y" -{ - lex_warning("`%1%2 last %3' in `with' argument ignored", - yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype)); - yyval.pth = yyvsp[0].pth; - } -break; -case 185: -#line 1373 "pic.y" -{ - lex_warning("`last %1' in `with' argument ignored", - object_type_name(yyvsp[-1].obtype)); - yyval.pth = yyvsp[0].pth; - } -break; -case 186: -#line 1379 "pic.y" -{ - lex_warning("`%1%2 %3' in `with' argument ignored", - yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype)); - yyval.pth = yyvsp[0].pth; - } -break; -case 187: -#line 1385 "pic.y" -{ - lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str); - a_delete yyvsp[-1].str; - yyval.pth = yyvsp[0].pth; - } -break; -case 188: -#line 1394 "pic.y" -{ yyval.crn = &object::north; } -break; -case 189: -#line 1396 "pic.y" -{ yyval.crn = &object::east; } -break; -case 190: -#line 1398 "pic.y" -{ yyval.crn = &object::west; } -break; -case 191: -#line 1400 "pic.y" -{ yyval.crn = &object::south; } -break; -case 192: -#line 1402 "pic.y" -{ yyval.crn = &object::north_east; } -break; -case 193: -#line 1404 "pic.y" -{ yyval.crn = &object:: south_east; } -break; -case 194: -#line 1406 "pic.y" -{ yyval.crn = &object::north_west; } -break; -case 195: -#line 1408 "pic.y" -{ yyval.crn = &object::south_west; } -break; -case 196: -#line 1410 "pic.y" -{ yyval.crn = &object::center; } -break; -case 197: -#line 1412 "pic.y" -{ yyval.crn = &object::start; } -break; -case 198: -#line 1414 "pic.y" -{ yyval.crn = &object::end; } -break; -case 199: -#line 1416 "pic.y" -{ yyval.crn = &object::north; } -break; -case 200: -#line 1418 "pic.y" -{ yyval.crn = &object::south; } -break; -case 201: -#line 1420 "pic.y" -{ yyval.crn = &object::west; } -break; -case 202: -#line 1422 "pic.y" -{ yyval.crn = &object::east; } -break; -case 203: -#line 1424 "pic.y" -{ yyval.crn = &object::north_west; } -break; -case 204: -#line 1426 "pic.y" -{ yyval.crn = &object::south_west; } -break; -case 205: -#line 1428 "pic.y" -{ yyval.crn = &object::north_east; } -break; -case 206: -#line 1430 "pic.y" -{ yyval.crn = &object::south_east; } -break; -case 207: -#line 1432 "pic.y" -{ yyval.crn = &object::west; } -break; -case 208: -#line 1434 "pic.y" -{ yyval.crn = &object::east; } -break; -case 209: -#line 1436 "pic.y" -{ yyval.crn = &object::north_west; } -break; -case 210: -#line 1438 "pic.y" -{ yyval.crn = &object::south_west; } -break; -case 211: -#line 1440 "pic.y" -{ yyval.crn = &object::north_east; } -break; -case 212: -#line 1442 "pic.y" -{ yyval.crn = &object::south_east; } -break; -case 213: -#line 1444 "pic.y" -{ yyval.crn = &object::north; } -break; -case 214: -#line 1446 "pic.y" -{ yyval.crn = &object::south; } -break; -case 215: -#line 1448 "pic.y" -{ yyval.crn = &object::east; } -break; -case 216: -#line 1450 "pic.y" -{ yyval.crn = &object::west; } -break; -case 217: -#line 1452 "pic.y" -{ yyval.crn = &object::center; } -break; -case 218: -#line 1454 "pic.y" -{ yyval.crn = &object::start; } -break; -case 219: -#line 1456 "pic.y" -{ yyval.crn = &object::end; } -break; -case 220: -#line 1461 "pic.y" -{ - if (!lookup_variable(yyvsp[0].str, & yyval.x)) { - lex_error("there is no variable `%1'", yyvsp[0].str); - YYABORT; - } - a_delete yyvsp[0].str; - } -break; -case 221: -#line 1469 "pic.y" -{ yyval.x = yyvsp[0].x; } -break; -case 222: -#line 1471 "pic.y" -{ - if (yyvsp[-1].pl.obj != 0) - yyval.x = yyvsp[-1].pl.obj->origin().x; - else - yyval.x = yyvsp[-1].pl.x; - } -break; -case 223: -#line 1478 "pic.y" -{ - if (yyvsp[-1].pl.obj != 0) - yyval.x = yyvsp[-1].pl.obj->origin().y; - else - yyval.x = yyvsp[-1].pl.y; - } -break; -case 224: -#line 1485 "pic.y" -{ - if (yyvsp[-1].pl.obj != 0) - yyval.x = yyvsp[-1].pl.obj->height(); - else - yyval.x = 0.0; - } -break; -case 225: -#line 1492 "pic.y" -{ - if (yyvsp[-1].pl.obj != 0) - yyval.x = yyvsp[-1].pl.obj->width(); - else - yyval.x = 0.0; - } -break; -case 226: -#line 1499 "pic.y" -{ - if (yyvsp[-1].pl.obj != 0) - yyval.x = yyvsp[-1].pl.obj->radius(); - else - yyval.x = 0.0; - } -break; -case 227: -#line 1506 "pic.y" -{ yyval.x = yyvsp[-2].x + yyvsp[0].x; } -break; -case 228: -#line 1508 "pic.y" -{ yyval.x = yyvsp[-2].x - yyvsp[0].x; } -break; -case 229: -#line 1510 "pic.y" -{ yyval.x = yyvsp[-2].x * yyvsp[0].x; } -break; -case 230: -#line 1512 "pic.y" -{ - if (yyvsp[0].x == 0.0) { - lex_error("division by zero"); - YYABORT; - } - yyval.x = yyvsp[-2].x/yyvsp[0].x; - } -break; -case 231: -#line 1520 "pic.y" -{ - if (yyvsp[0].x == 0.0) { - lex_error("modulus by zero"); - YYABORT; - } - yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x); - } -break; -case 232: -#line 1528 "pic.y" -{ - errno = 0; - yyval.x = pow(yyvsp[-2].x, yyvsp[0].x); - if (errno == EDOM) { - lex_error("arguments to `^' operator out of domain"); - YYABORT; - } - if (errno == ERANGE) { - lex_error("result of `^' operator out of range"); - YYABORT; - } - } -break; -case 233: -#line 1541 "pic.y" -{ yyval.x = -yyvsp[0].x; } -break; -case 234: -#line 1543 "pic.y" -{ yyval.x = yyvsp[-1].x; } -break; -case 235: -#line 1545 "pic.y" -{ - errno = 0; - yyval.x = sin(yyvsp[-1].x); - if (errno == ERANGE) { - lex_error("sin result out of range"); - YYABORT; - } - } -break; -case 236: -#line 1554 "pic.y" -{ - errno = 0; - yyval.x = cos(yyvsp[-1].x); - if (errno == ERANGE) { - lex_error("cos result out of range"); - YYABORT; - } - } -break; -case 237: -#line 1563 "pic.y" -{ - errno = 0; - yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x); - if (errno == EDOM) { - lex_error("atan2 argument out of domain"); - YYABORT; - } - if (errno == ERANGE) { - lex_error("atan2 result out of range"); - YYABORT; - } - } -break; -case 238: -#line 1576 "pic.y" -{ - errno = 0; - yyval.x = log10(yyvsp[-1].x); - if (errno == ERANGE) { - lex_error("log result out of range"); - YYABORT; - } - } -break; -case 239: -#line 1585 "pic.y" -{ - errno = 0; - yyval.x = pow(10.0, yyvsp[-1].x); - if (errno == ERANGE) { - lex_error("exp result out of range"); - YYABORT; - } - } -break; -case 240: -#line 1594 "pic.y" -{ - errno = 0; - yyval.x = sqrt(yyvsp[-1].x); - if (errno == EDOM) { - lex_error("sqrt argument out of domain"); - YYABORT; - } - } -break; -case 241: -#line 1603 "pic.y" -{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } -break; -case 242: -#line 1605 "pic.y" -{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } -break; -case 243: -#line 1607 "pic.y" -{ yyval.x = floor(yyvsp[-1].x); } -break; -case 244: -#line 1609 "pic.y" -{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); } -break; -case 245: -#line 1611 "pic.y" -{ - /* return a random number in the range [0,1) */ - /* portable, but not very random */ - yyval.x = (rand() & 0x7fff) / double(0x8000); - } -break; -case 246: -#line 1617 "pic.y" -{ - yyval.x = 0; - srand((unsigned int)yyvsp[-1].x); - } -break; -case 247: -#line 1622 "pic.y" -{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); } -break; -case 248: -#line 1624 "pic.y" -{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); } -break; -case 249: -#line 1626 "pic.y" -{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); } -break; -case 250: -#line 1628 "pic.y" -{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); } -break; -case 251: -#line 1630 "pic.y" -{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); } -break; -case 252: -#line 1632 "pic.y" -{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); } -break; -case 253: -#line 1634 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } -break; -case 254: -#line 1636 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } -break; -case 255: -#line 1638 "pic.y" -{ yyval.x = (yyvsp[0].x == 0.0); } -break; -#line 5632 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - return (1); -yyaccept: - return (0); -} diff --git a/contrib/groff/src/preproc/pic/pic_tab.h b/contrib/groff/src/preproc/pic/pic_tab.h deleted file mode 100644 index 12611ba..0000000 --- a/contrib/groff/src/preproc/pic/pic_tab.h +++ /dev/null @@ -1,139 +0,0 @@ -#define LABEL 257 -#define VARIABLE 258 -#define NUMBER 259 -#define TEXT 260 -#define COMMAND_LINE 261 -#define DELIMITED 262 -#define ORDINAL 263 -#define TH 264 -#define LEFT_ARROW_HEAD 265 -#define RIGHT_ARROW_HEAD 266 -#define DOUBLE_ARROW_HEAD 267 -#define LAST 268 -#define UP 269 -#define DOWN 270 -#define LEFT 271 -#define RIGHT 272 -#define BOX 273 -#define CIRCLE 274 -#define ELLIPSE 275 -#define ARC 276 -#define LINE 277 -#define ARROW 278 -#define MOVE 279 -#define SPLINE 280 -#define HEIGHT 281 -#define RADIUS 282 -#define FIGNAME 283 -#define WIDTH 284 -#define DIAMETER 285 -#define FROM 286 -#define TO 287 -#define AT 288 -#define WITH 289 -#define BY 290 -#define THEN 291 -#define SOLID 292 -#define DOTTED 293 -#define DASHED 294 -#define CHOP 295 -#define SAME 296 -#define INVISIBLE 297 -#define LJUST 298 -#define RJUST 299 -#define ABOVE 300 -#define BELOW 301 -#define OF 302 -#define THE 303 -#define WAY 304 -#define BETWEEN 305 -#define AND 306 -#define HERE 307 -#define DOT_N 308 -#define DOT_E 309 -#define DOT_W 310 -#define DOT_S 311 -#define DOT_NE 312 -#define DOT_SE 313 -#define DOT_NW 314 -#define DOT_SW 315 -#define DOT_C 316 -#define DOT_START 317 -#define DOT_END 318 -#define DOT_X 319 -#define DOT_Y 320 -#define DOT_HT 321 -#define DOT_WID 322 -#define DOT_RAD 323 -#define SIN 324 -#define COS 325 -#define ATAN2 326 -#define LOG 327 -#define EXP 328 -#define SQRT 329 -#define K_MAX 330 -#define K_MIN 331 -#define INT 332 -#define RAND 333 -#define SRAND 334 -#define COPY 335 -#define THRU 336 -#define TOP 337 -#define BOTTOM 338 -#define UPPER 339 -#define LOWER 340 -#define SH 341 -#define PRINT 342 -#define CW 343 -#define CCW 344 -#define FOR 345 -#define DO 346 -#define IF 347 -#define ELSE 348 -#define ANDAND 349 -#define OROR 350 -#define NOTEQUAL 351 -#define EQUALEQUAL 352 -#define LESSEQUAL 353 -#define GREATEREQUAL 354 -#define LEFT_CORNER 355 -#define RIGHT_CORNER 356 -#define NORTH 357 -#define SOUTH 358 -#define EAST 359 -#define WEST 360 -#define CENTER 361 -#define END 362 -#define START 363 -#define RESET 364 -#define UNTIL 365 -#define PLOT 366 -#define THICKNESS 367 -#define FILL 368 -#define COLORED 369 -#define OUTLINED 370 -#define SHADED 371 -#define ALIGNED 372 -#define SPRINTF 373 -#define COMMAND 374 -#define DEFINE 375 -#define UNDEF 376 -typedef union { - char *str; - int n; - double x; - struct { double x, y; } pair; - struct { double x; char *body; } if_data; - struct { char *str; const char *filename; int lineno; } lstr; - struct { double *v; int nv; int maxv; } dv; - struct { double val; int is_multiplicative; } by; - place pl; - object *obj; - corner crn; - path *pth; - object_spec *spec; - saved_state *pstate; - graphics_state state; - object_type obtype; -} YYSTYPE; -extern YYSTYPE yylval; diff --git a/contrib/groff/src/preproc/refer/label.cpp b/contrib/groff/src/preproc/refer/label.cpp deleted file mode 100644 index e39022d..0000000 --- a/contrib/groff/src/preproc/refer/label.cpp +++ /dev/null @@ -1,1620 +0,0 @@ -#ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; -#endif -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 23 "label.y" - -#include "refer.h" -#include "refid.h" -#include "ref.h" -#include "token.h" - -int yylex(); -void yyerror(const char *); -int yyparse(); - -static const char *format_serial(char c, int n); - -struct label_info { - int start; - int length; - int count; - int total; - label_info(const string &); -}; - -label_info *lookup_label(const string &label); - -struct expression { - enum { - /* Does the tentative label depend on the reference?*/ - CONTAINS_VARIABLE = 01, - CONTAINS_STAR = 02, - CONTAINS_FORMAT = 04, - CONTAINS_AT = 010 - }; - virtual ~expression() { } - virtual void evaluate(int, const reference &, string &, - substring_position &) = 0; - virtual unsigned analyze() { return 0; } -}; - -class at_expr : public expression { -public: - at_expr() { } - void evaluate(int, const reference &, string &, substring_position &); - unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; } -}; - -class format_expr : public expression { - char type; - int width; - int first_number; -public: - format_expr(char c, int w = 0, int f = 1) - : type(c), width(w), first_number(f) { } - void evaluate(int, const reference &, string &, substring_position &); - unsigned analyze() { return CONTAINS_FORMAT; } -}; - -class field_expr : public expression { - int number; - char name; -public: - field_expr(char nm, int num) : number(num), name(nm) { } - void evaluate(int, const reference &, string &, substring_position &); - unsigned analyze() { return CONTAINS_VARIABLE; } -}; - -class literal_expr : public expression { - string s; -public: - literal_expr(const char *ptr, int len) : s(ptr, len) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class unary_expr : public expression { -protected: - expression *expr; -public: - unary_expr(expression *e) : expr(e) { } - ~unary_expr() { delete expr; } - void evaluate(int, const reference &, string &, substring_position &) = 0; - unsigned analyze() { return expr ? expr->analyze() : 0; } -}; - -/* This caches the analysis of an expression.*/ - -class analyzed_expr : public unary_expr { - unsigned flags; -public: - analyzed_expr(expression *); - void evaluate(int, const reference &, string &, substring_position &); - unsigned analyze() { return flags; } -}; - -class star_expr : public unary_expr { -public: - star_expr(expression *e) : unary_expr(e) { } - void evaluate(int, const reference &, string &, substring_position &); - unsigned analyze() { - return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0) - | CONTAINS_STAR); - } -}; - -typedef void map_func(const char *, const char *, string &); - -class map_expr : public unary_expr { - map_func *func; -public: - map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -typedef const char *extractor_func(const char *, const char *, const char **); - -class extractor_expr : public unary_expr { - int part; - extractor_func *func; -public: - enum { BEFORE = +1, MATCH = 0, AFTER = -1 }; - extractor_expr(expression *e, extractor_func *f, int pt) - : unary_expr(e), part(pt), func(f) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class truncate_expr : public unary_expr { - int n; -public: - truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class separator_expr : public unary_expr { -public: - separator_expr(expression *e) : unary_expr(e) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class binary_expr : public expression { -protected: - expression *expr1; - expression *expr2; -public: - binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { } - ~binary_expr() { delete expr1; delete expr2; } - void evaluate(int, const reference &, string &, substring_position &) = 0; - unsigned analyze() { - return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0); - } -}; - -class alternative_expr : public binary_expr { -public: - alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class list_expr : public binary_expr { -public: - list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class substitute_expr : public binary_expr { -public: - substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -class ternary_expr : public expression { -protected: - expression *expr1; - expression *expr2; - expression *expr3; -public: - ternary_expr(expression *e1, expression *e2, expression *e3) - : expr1(e1), expr2(e2), expr3(e3) { } - ~ternary_expr() { delete expr1; delete expr2; delete expr3; } - void evaluate(int, const reference &, string &, substring_position &) = 0; - unsigned analyze() { - return ((expr1 ? expr1->analyze() : 0) - | (expr2 ? expr2->analyze() : 0) - | (expr3 ? expr3->analyze() : 0)); - } -}; - -class conditional_expr : public ternary_expr { -public: - conditional_expr(expression *e1, expression *e2, expression *e3) - : ternary_expr(e1, e2, e3) { } - void evaluate(int, const reference &, string &, substring_position &); -}; - -static expression *parsed_label = 0; -static expression *parsed_date_label = 0; -static expression *parsed_short_label = 0; - -static expression *parse_result; - -string literals; - -#line 222 "label.y" -typedef union { - int num; - expression *expr; - struct { int ndigits; int val; } dig; - struct { int start; int len; } str; -} YYSTYPE; -#line 217 "y.tab.c" -#define TOKEN_LETTER 257 -#define TOKEN_LITERAL 258 -#define TOKEN_DIGIT 259 -#define YYERRCODE 256 -short yylhs[] = { -1, - 0, 1, 1, 6, 6, 2, 2, 2, 3, 3, - 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 9, 9, 7, 7, 8, 8, - 10, 10, 10, -}; -short yylen[] = { 2, - 1, 1, 5, 0, 1, 1, 3, 3, 1, 2, - 1, 3, 1, 1, 1, 2, 2, 2, 5, 3, - 3, 2, 3, 3, 0, 1, 1, 2, 1, 2, - 0, 1, 1, -}; -short yydefred[] = { 0, - 0, 14, 13, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 1, 27, 0, 17, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 28, - 30, 23, 24, 0, 0, 0, 32, 33, 0, 0, - 0, 0, 0, 0, 3, 0, 19, -}; -short yydgoto[] = { 7, - 8, 9, 10, 11, 12, 13, 15, 18, 47, 39, -}; -short yysindex[] = { -32, - -257, 0, 0, -240, -32, -32, 0, 0, -18, -32, - -36, -114, 0, 0, -246, 0, 0, -241, -14, -39, - -32, -32, -32, -114, -21, -257, -257, 0, -32, 0, - 0, 0, 0, -25, -32, -32, 0, 0, -223, -246, - -246, -36, -32, -257, 0, -246, 0, -}; -short yyrindex[] = { 35, - 1, 0, 0, 0, -5, -4, 0, 0, 14, 208, - 159, 224, 0, 0, 11, 0, 0, 40, 0, 0, - 2, 0, 0, 253, -220, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 281, 0, 0, 0, 50, - 105, 214, 0, 115, 0, 149, 0, -}; -short yygindex[] = { 0, - 19, 0, 7, 37, -10, 10, -23, 0, 0, 0, -}; -#define YYTABLESIZE 511 -short yytable[] = { 24, - 15, 14, 40, 41, 4, 28, 26, 5, 27, 25, - 16, 29, 30, 2, 19, 20, 16, 31, 17, 23, - 46, 37, 33, 38, 24, 24, 32, 6, 35, 36, - 34, 3, 43, 44, 4, 4, 31, 15, 15, 18, - 15, 15, 15, 15, 21, 15, 15, 16, 16, 20, - 16, 16, 16, 16, 2, 16, 16, 4, 15, 4, - 15, 45, 15, 15, 15, 42, 0, 0, 16, 0, - 16, 2, 16, 16, 16, 2, 18, 18, 0, 18, - 18, 18, 18, 0, 18, 18, 20, 20, 0, 20, - 20, 20, 20, 0, 20, 20, 0, 18, 0, 18, - 0, 18, 18, 18, 21, 22, 0, 20, 0, 20, - 0, 20, 20, 20, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, - 0, 21, 21, 0, 21, 21, 21, 21, 26, 21, - 21, 25, 25, 0, 25, 25, 25, 25, 11, 25, - 25, 0, 21, 18, 21, 18, 21, 21, 21, 0, - 0, 0, 25, 20, 25, 20, 25, 25, 25, 0, - 0, 0, 0, 0, 0, 26, 26, 0, 26, 26, - 26, 26, 0, 26, 26, 11, 11, 0, 11, 11, - 0, 0, 0, 0, 0, 0, 26, 6, 26, 0, - 26, 26, 26, 12, 0, 0, 11, 0, 11, 0, - 11, 11, 11, 9, 1, 2, 0, 0, 21, 0, - 21, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 25, 0, 0, 0, 0, 6, 0, 0, 6, 0, - 12, 12, 10, 12, 12, 0, 0, 15, 15, 0, - 9, 9, 7, 9, 9, 6, 0, 16, 16, 6, - 6, 12, 26, 12, 26, 12, 12, 12, 0, 0, - 8, 9, 11, 9, 11, 9, 9, 9, 0, 10, - 10, 0, 10, 10, 0, 0, 18, 18, 0, 0, - 7, 0, 0, 7, 0, 0, 20, 20, 0, 0, - 10, 0, 10, 0, 10, 10, 10, 0, 8, 0, - 7, 8, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 12, 8, 12, - 0, 0, 8, 8, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 25, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 26, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 10, -}; -short yycheck[] = { 10, - 0, 259, 26, 27, 37, 42, 43, 40, 45, 46, - 0, 126, 259, 0, 5, 6, 257, 259, 259, 38, - 44, 43, 62, 45, 35, 36, 41, 60, 22, 23, - 21, 64, 58, 257, 0, 41, 257, 37, 38, 0, - 40, 41, 42, 43, 63, 45, 46, 37, 38, 0, - 40, 41, 42, 43, 41, 45, 46, 62, 58, 58, - 60, 43, 62, 63, 64, 29, -1, -1, 58, -1, - 60, 58, 62, 63, 64, 62, 37, 38, -1, 40, - 41, 42, 43, -1, 45, 46, 37, 38, -1, 40, - 41, 42, 43, -1, 45, 46, -1, 58, -1, 60, - -1, 62, 63, 64, 0, 124, -1, 58, -1, 60, - -1, 62, 63, 64, 0, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 124, -1, 126, -1, -1, -1, - -1, -1, -1, -1, 124, -1, 126, -1, -1, -1, - -1, 37, 38, -1, 40, 41, 42, 43, 0, 45, - 46, 37, 38, -1, 40, 41, 42, 43, 0, 45, - 46, -1, 58, 124, 60, 126, 62, 63, 64, -1, - -1, -1, 58, 124, 60, 126, 62, 63, 64, -1, - -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, - 42, 43, -1, 45, 46, 37, 38, -1, 40, 41, - -1, -1, -1, -1, -1, -1, 58, 0, 60, -1, - 62, 63, 64, 0, -1, -1, 58, -1, 60, -1, - 62, 63, 64, 0, 257, 258, -1, -1, 124, -1, - 126, -1, -1, -1, -1, -1, -1, -1, 124, -1, - 126, -1, -1, -1, -1, 38, -1, -1, 41, -1, - 37, 38, 0, 40, 41, -1, -1, 257, 258, -1, - 37, 38, 0, 40, 41, 58, -1, 257, 258, 62, - 63, 58, 124, 60, 126, 62, 63, 64, -1, -1, - 0, 58, 124, 60, 126, 62, 63, 64, -1, 37, - 38, -1, 40, 41, -1, -1, 257, 258, -1, -1, - 38, -1, -1, 41, -1, -1, 257, 258, -1, -1, - 58, -1, 60, -1, 62, 63, 64, -1, 38, -1, - 58, 41, -1, -1, 62, 63, -1, -1, -1, -1, - -1, 124, -1, -1, -1, -1, -1, 124, 58, 126, - -1, -1, 62, 63, -1, -1, -1, 124, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, -1, -1, -1, 124, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 124, 257, 258, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, -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, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, -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, 257, - 258, -}; -#define YYFINAL 7 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 259 -#if YYDEBUG -char *yyname[] = { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'","'.'",0,0,0,0,0,0,0,0,0,0,0, -"':'",0,"'<'",0,"'>'","'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0, -"'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,"TOKEN_LETTER","TOKEN_LITERAL","TOKEN_DIGIT", -}; -char *yyrule[] = { -"$accept : expr", -"expr : optional_conditional", -"conditional : alternative", -"conditional : alternative '?' optional_conditional ':' conditional", -"optional_conditional :", -"optional_conditional : conditional", -"alternative : list", -"alternative : alternative '|' list", -"alternative : alternative '&' list", -"list : substitute", -"list : list substitute", -"substitute : string", -"substitute : substitute '~' string", -"string : '@'", -"string : TOKEN_LITERAL", -"string : TOKEN_LETTER", -"string : TOKEN_LETTER number", -"string : '%' TOKEN_LETTER", -"string : '%' digits", -"string : string '.' flag TOKEN_LETTER optional_number", -"string : string '+' number", -"string : string '-' number", -"string : string '*'", -"string : '(' optional_conditional ')'", -"string : '<' optional_conditional '>'", -"optional_number :", -"optional_number : number", -"number : TOKEN_DIGIT", -"number : number TOKEN_DIGIT", -"digits : TOKEN_DIGIT", -"digits : digits TOKEN_DIGIT", -"flag :", -"flag : '+'", -"flag : '-'", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 -#endif -#endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 398 "label.y" - -/* bison defines const to be empty unless __STDC__ is defined, which it -isn't under cfront */ - -#ifdef const -#undef const -#endif - -const char *spec_ptr; -const char *spec_end; -const char *spec_cur; - -static char uppercase_array[] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', - 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', - 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', -}; - -static char lowercase_array[] = { - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', - 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', -}; - -int yylex() -{ - while (spec_ptr < spec_end && csspace(*spec_ptr)) - spec_ptr++; - spec_cur = spec_ptr; - if (spec_ptr >= spec_end) - return 0; - unsigned char c = *spec_ptr++; - if (csalpha(c)) { - yylval.num = c; - return TOKEN_LETTER; - } - if (csdigit(c)) { - yylval.num = c - '0'; - return TOKEN_DIGIT; - } - if (c == '\'') { - yylval.str.start = literals.length(); - for (; spec_ptr < spec_end; spec_ptr++) { - if (*spec_ptr == '\'') { - if (++spec_ptr < spec_end && *spec_ptr == '\'') - literals += '\''; - else { - yylval.str.len = literals.length() - yylval.str.start; - return TOKEN_LITERAL; - } - } - else - literals += *spec_ptr; - } - yylval.str.len = literals.length() - yylval.str.start; - return TOKEN_LITERAL; - } - return c; -} - -int set_label_spec(const char *label_spec) -{ - spec_cur = spec_ptr = label_spec; - spec_end = strchr(label_spec, '\0'); - literals.clear(); - if (yyparse()) - return 0; - delete parsed_label; - parsed_label = parse_result; - return 1; -} - -int set_date_label_spec(const char *label_spec) -{ - spec_cur = spec_ptr = label_spec; - spec_end = strchr(label_spec, '\0'); - literals.clear(); - if (yyparse()) - return 0; - delete parsed_date_label; - parsed_date_label = parse_result; - return 1; -} - -int set_short_label_spec(const char *label_spec) -{ - spec_cur = spec_ptr = label_spec; - spec_end = strchr(label_spec, '\0'); - literals.clear(); - if (yyparse()) - return 0; - delete parsed_short_label; - parsed_short_label = parse_result; - return 1; -} - -void yyerror(const char *message) -{ - if (spec_cur < spec_end) - command_error("label specification %1 before `%2'", message, spec_cur); - else - command_error("label specification %1 at end of string", - message, spec_cur); -} - -void at_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &) -{ - if (tentative) - ref.canonicalize_authors(result); - else { - const char *end, *start = ref.get_authors(&end); - if (start) - result.append(start, end - start); - } -} - -void format_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &) -{ - if (tentative) - return; - const label_info *lp = ref.get_label_ptr(); - int num = lp == 0 ? ref.get_number() : lp->count; - if (type != '0') - result += format_serial(type, num + 1); - else { - const char *ptr = i_to_a(num + first_number); - int pad = width - strlen(ptr); - while (--pad >= 0) - result += '0'; - result += ptr; - } -} - -static const char *format_serial(char c, int n) -{ - assert(n > 0); - static char buf[128]; // more than enough. - switch (c) { - case 'i': - case 'I': - { - char *p = buf; - // troff uses z and w to represent 10000 and 5000 in Roman - // numerals; I can find no historical basis for this usage - const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI"; - if (n >= 40000) - return i_to_a(n); - while (n >= 10000) { - *p++ = s[0]; - n -= 10000; - } - for (int i = 1000; i > 0; i /= 10, s += 2) { - int m = n/i; - n -= m*i; - switch (m) { - case 3: - *p++ = s[2]; - /* falls through */ - case 2: - *p++ = s[2]; - /* falls through */ - case 1: - *p++ = s[2]; - break; - case 4: - *p++ = s[2]; - *p++ = s[1]; - break; - case 8: - *p++ = s[1]; - *p++ = s[2]; - *p++ = s[2]; - *p++ = s[2]; - break; - case 7: - *p++ = s[1]; - *p++ = s[2]; - *p++ = s[2]; - break; - case 6: - *p++ = s[1]; - *p++ = s[2]; - break; - case 5: - *p++ = s[1]; - break; - case 9: - *p++ = s[2]; - *p++ = s[0]; - } - } - *p = 0; - break; - } - case 'a': - case 'A': - { - char *p = buf; - // this is derived from troff/reg.c - while (n > 0) { - int d = n % 26; - if (d == 0) - d = 26; - n -= d; - n /= 26; - *p++ = c == 'a' ? lowercase_array[d - 1] : - uppercase_array[d - 1]; - } - *p-- = 0; - // Reverse it. - char *q = buf; - while (q < p) { - char temp = *q; - *q = *p; - *p = temp; - --p; - ++q; - } - break; - } - default: - assert(0); - } - return buf; -} - -void field_expr::evaluate(int, const reference &ref, - string &result, substring_position &) -{ - const char *end; - const char *start = ref.get_field(name, &end); - if (start) { - start = nth_field(number, start, &end); - if (start) - result.append(start, end - start); - } -} - -void literal_expr::evaluate(int, const reference &, - string &result, substring_position &) -{ - result += s; -} - -analyzed_expr::analyzed_expr(expression *e) -: unary_expr(e), flags(e ? e->analyze() : 0) -{ -} - -void analyzed_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - if (expr) - expr->evaluate(tentative, ref, result, pos); -} - -void star_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - const label_info *lp = ref.get_label_ptr(); - if (!tentative - && (lp == 0 || lp->total > 1) - && expr) - expr->evaluate(tentative, ref, result, pos); -} - -void separator_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - int start_length = result.length(); - int is_first = pos.start < 0; - if (expr) - expr->evaluate(tentative, ref, result, pos); - if (is_first) { - pos.start = start_length; - pos.length = result.length() - start_length; - } -} - -void map_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &) -{ - if (expr) { - string temp; - substring_position temp_pos; - expr->evaluate(tentative, ref, temp, temp_pos); - (*func)(temp.contents(), temp.contents() + temp.length(), result); - } -} - -void extractor_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &) -{ - if (expr) { - string temp; - substring_position temp_pos; - expr->evaluate(tentative, ref, temp, temp_pos); - const char *end, *start = (*func)(temp.contents(), - temp.contents() + temp.length(), - &end); - switch (part) { - case BEFORE: - if (start) - result.append(temp.contents(), start - temp.contents()); - else - result += temp; - break; - case MATCH: - if (start) - result.append(start, end - start); - break; - case AFTER: - if (start) - result.append(end, temp.contents() + temp.length() - end); - break; - default: - assert(0); - } - } -} - -static void first_part(int len, const char *ptr, const char *end, - string &result) -{ - for (;;) { - const char *token_start = ptr; - if (!get_token(&ptr, end)) - break; - const token_info *ti = lookup_token(token_start, ptr); - int counts = ti->sortify_non_empty(token_start, ptr); - if (counts && --len < 0) - break; - if (counts || ti->is_accent()) - result.append(token_start, ptr - token_start); - } -} - -static void last_part(int len, const char *ptr, const char *end, - string &result) -{ - const char *start = ptr; - int count = 0; - for (;;) { - const char *token_start = ptr; - if (!get_token(&ptr, end)) - break; - const token_info *ti = lookup_token(token_start, ptr); - if (ti->sortify_non_empty(token_start, ptr)) - count++; - } - ptr = start; - int skip = count - len; - if (skip > 0) { - for (;;) { - const char *token_start = ptr; - if (!get_token(&ptr, end)) - assert(0); - const token_info *ti = lookup_token(token_start, ptr); - if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) { - ptr = token_start; - break; - } - } - } - first_part(len, ptr, end, result); -} - -void truncate_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &) -{ - if (expr) { - string temp; - substring_position temp_pos; - expr->evaluate(tentative, ref, temp, temp_pos); - const char *start = temp.contents(); - const char *end = start + temp.length(); - if (n > 0) - first_part(n, start, end, result); - else if (n < 0) - last_part(-n, start, end, result); - } -} - -void alternative_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - int start_length = result.length(); - if (expr1) - expr1->evaluate(tentative, ref, result, pos); - if (result.length() == start_length && expr2) - expr2->evaluate(tentative, ref, result, pos); -} - -void list_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - if (expr1) - expr1->evaluate(tentative, ref, result, pos); - if (expr2) - expr2->evaluate(tentative, ref, result, pos); -} - -void substitute_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - int start_length = result.length(); - if (expr1) - expr1->evaluate(tentative, ref, result, pos); - if (result.length() > start_length && result[result.length() - 1] == '-') { - // ought to see if pos covers the - - result.set_length(result.length() - 1); - if (expr2) - expr2->evaluate(tentative, ref, result, pos); - } -} - -void conditional_expr::evaluate(int tentative, const reference &ref, - string &result, substring_position &pos) -{ - string temp; - substring_position temp_pos; - if (expr1) - expr1->evaluate(tentative, ref, temp, temp_pos); - if (temp.length() > 0) { - if (expr2) - expr2->evaluate(tentative, ref, result, pos); - } - else { - if (expr3) - expr3->evaluate(tentative, ref, result, pos); - } -} - -void reference::pre_compute_label() -{ - if (parsed_label != 0 - && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) { - label.clear(); - substring_position temp_pos; - parsed_label->evaluate(1, *this, label, temp_pos); - label_ptr = lookup_label(label); - } -} - -void reference::compute_label() -{ - label.clear(); - if (parsed_label) - parsed_label->evaluate(0, *this, label, separator_pos); - if (short_label_flag && parsed_short_label) - parsed_short_label->evaluate(0, *this, short_label, short_separator_pos); - if (date_as_label) { - string new_date; - if (parsed_date_label) { - substring_position temp_pos; - parsed_date_label->evaluate(0, *this, new_date, temp_pos); - } - set_date(new_date); - } - if (label_ptr) - label_ptr->count += 1; -} - -void reference::immediate_compute_label() -{ - if (label_ptr) - label_ptr->total = 2; // force use of disambiguator - compute_label(); -} - -int reference::merge_labels(reference **v, int n, label_type type, - string &result) -{ - if (abbreviate_label_ranges) - return merge_labels_by_number(v, n, type, result); - else - return merge_labels_by_parts(v, n, type, result); -} - -int reference::merge_labels_by_number(reference **v, int n, label_type type, - string &result) -{ - if (n <= 1) - return 0; - int num = get_number(); - // Only merge three or more labels. - if (v[0]->get_number() != num + 1 - || v[1]->get_number() != num + 2) - return 0; - int i; - for (i = 2; i < n; i++) - if (v[i]->get_number() != num + i + 1) - break; - result = get_label(type); - result += label_range_indicator; - result += v[i - 1]->get_label(type); - return i; -} - -const substring_position &reference::get_separator_pos(label_type type) const -{ - if (type == SHORT_LABEL && short_label_flag) - return short_separator_pos; - else - return separator_pos; -} - -const string &reference::get_label(label_type type) const -{ - if (type == SHORT_LABEL && short_label_flag) - return short_label; - else - return label; -} - -int reference::merge_labels_by_parts(reference **v, int n, label_type type, - string &result) -{ - if (n <= 0) - return 0; - const string &lb = get_label(type); - const substring_position &sp = get_separator_pos(type); - if (sp.start < 0 - || sp.start != v[0]->get_separator_pos(type).start - || memcmp(lb.contents(), v[0]->get_label(type).contents(), - sp.start) != 0) - return 0; - result = lb; - int i = 0; - do { - result += separate_label_second_parts; - const substring_position &s = v[i]->get_separator_pos(type); - int sep_end_pos = s.start + s.length; - result.append(v[i]->get_label(type).contents() + sep_end_pos, - v[i]->get_label(type).length() - sep_end_pos); - } while (++i < n - && sp.start == v[i]->get_separator_pos(type).start - && memcmp(lb.contents(), v[i]->get_label(type).contents(), - sp.start) == 0); - return i; -} - -string label_pool; - -label_info::label_info(const string &s) -: start(label_pool.length()), length(s.length()), count(0), total(1) -{ - label_pool += s; -} - -static label_info **label_table = 0; -static int label_table_size = 0; -static int label_table_used = 0; - -label_info *lookup_label(const string &label) -{ - if (label_table == 0) { - label_table = new label_info *[17]; - label_table_size = 17; - for (int i = 0; i < 17; i++) - label_table[i] = 0; - } - unsigned h = hash_string(label.contents(), label.length()) % label_table_size; - label_info **ptr; - for (ptr = label_table + h; - *ptr != 0; - (ptr == label_table) - ? (ptr = label_table + label_table_size - 1) - : ptr--) - if ((*ptr)->length == label.length() - && memcmp(label_pool.contents() + (*ptr)->start, label.contents(), - label.length()) == 0) { - (*ptr)->total += 1; - return *ptr; - } - label_info *result = *ptr = new label_info(label); - if (++label_table_used * 2 > label_table_size) { - // Rehash the table. - label_info **old_table = label_table; - int old_size = label_table_size; - label_table_size = next_size(label_table_size); - label_table = new label_info *[label_table_size]; - int i; - for (i = 0; i < label_table_size; i++) - label_table[i] = 0; - for (i = 0; i < old_size; i++) - if (old_table[i]) { - h = hash_string(label_pool.contents() + old_table[i]->start, - old_table[i]->length); - label_info **p; - for (p = label_table + (h % label_table_size); - *p != 0; - (p == label_table) - ? (p = label_table + label_table_size - 1) - : --p) - ; - *p = old_table[i]; - } - a_delete old_table; - } - return result; -} - -void clear_labels() -{ - for (int i = 0; i < label_table_size; i++) { - delete label_table[i]; - label_table[i] = 0; - } - label_table_used = 0; - label_pool.clear(); -} - -static void consider_authors(reference **start, reference **end, int i); - -void compute_labels(reference **v, int n) -{ - if (parsed_label - && (parsed_label->analyze() & expression::CONTAINS_AT) - && sort_fields.length() >= 2 - && sort_fields[0] == 'A' - && sort_fields[1] == '+') - consider_authors(v, v + n, 0); - for (int i = 0; i < n; i++) - v[i]->compute_label(); -} - - -/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i -where 0 <= i <= N if there exists a reference with a list of authors -<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i -and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0, -A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and -<B0,B1,...,BM>. If a reference needs author i we only have to call -need_author(j) for some j >= i such that the reference also needs -author j. */ - -/* This function handles 2 tasks: -determine which authors are needed (cannot be elided with et al.); -determine which authors can have only last names in the labels. - -References >= start and < end have the same first i author names. -Also they're sorted by A+. */ - -static void consider_authors(reference **start, reference **end, int i) -{ - if (start >= end) - return; - reference **p = start; - if (i >= (*p)->get_nauthors()) { - for (++p; p < end && i >= (*p)->get_nauthors(); p++) - ; - if (p < end && i > 0) { - // If we have an author list <A B C> and an author list <A B C D>, - // then both lists need C. - for (reference **q = start; q < end; q++) - (*q)->need_author(i - 1); - } - start = p; - } - while (p < end) { - reference **last_name_start = p; - reference **name_start = p; - for (++p; - p < end && i < (*p)->get_nauthors() - && same_author_last_name(**last_name_start, **p, i); - p++) { - if (!same_author_name(**name_start, **p, i)) { - consider_authors(name_start, p, i + 1); - name_start = p; - } - } - consider_authors(name_start, p, i + 1); - if (last_name_start == name_start) { - for (reference **q = last_name_start; q < p; q++) - (*q)->set_last_name_unambiguous(i); - } - // If we have an author list <A B C D> and <A B C E>, then the lists - // need author D and E respectively. - if (name_start > start || p < end) { - for (reference **q = last_name_start; q < p; q++) - (*q)->need_author(i); - } - } -} - -int same_author_last_name(const reference &r1, const reference &r2, int n) -{ - const char *ae1; - const char *as1 = r1.get_sort_field(0, n, 0, &ae1); - const char *ae2; - const char *as2 = r2.get_sort_field(0, n, 0, &ae2); - if (!as1 && !as2) return 1; // they are the same - if (!as1 || !as2) return 0; - return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0; -} - -int same_author_name(const reference &r1, const reference &r2, int n) -{ - const char *ae1; - const char *as1 = r1.get_sort_field(0, n, -1, &ae1); - const char *ae2; - const char *as2 = r2.get_sort_field(0, n, -1, &ae2); - if (!as1 && !as2) return 1; // they are the same - if (!as1 || !as2) return 0; - return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0; -} - - -void int_set::set(int i) -{ - assert(i >= 0); - int bytei = i >> 3; - if (bytei >= v.length()) { - int old_length = v.length(); - v.set_length(bytei + 1); - for (int j = old_length; j <= bytei; j++) - v[j] = 0; - } - v[bytei] |= 1 << (i & 7); -} - -int int_set::get(int i) const -{ - assert(i >= 0); - int bytei = i >> 3; - return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0; -} - -void reference::set_last_name_unambiguous(int i) -{ - last_name_unambiguous.set(i); -} - -void reference::need_author(int n) -{ - if (n > last_needed_author) - last_needed_author = n; -} - -const char *reference::get_authors(const char **end) const -{ - if (!computed_authors) { - ((reference *)this)->computed_authors = 1; - string &result = ((reference *)this)->authors; - int na = get_nauthors(); - result.clear(); - for (int i = 0; i < na; i++) { - if (last_name_unambiguous.get(i)) { - const char *e, *start = get_author_last_name(i, &e); - assert(start != 0); - result.append(start, e - start); - } - else { - const char *e, *start = get_author(i, &e); - assert(start != 0); - result.append(start, e - start); - } - if (i == last_needed_author - && et_al.length() > 0 - && et_al_min_elide > 0 - && last_needed_author + et_al_min_elide < na - && na >= et_al_min_total) { - result += et_al; - break; - } - if (i < na - 1) { - if (na == 2) - result += join_authors_exactly_two; - else if (i < na - 2) - result += join_authors_default; - else - result += join_authors_last_two; - } - } - } - const char *start = authors.contents(); - *end = start + authors.length(); - return start; -} - -int reference::get_nauthors() const -{ - if (nauthors < 0) { - const char *dummy; - int na; - for (na = 0; get_author(na, &dummy) != 0; na++) - ; - ((reference *)this)->nauthors = na; - } - return nauthors; -} -#line 1242 "y.tab.c" -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif -{ - register int yym, yyn, yystate; -#if YYDEBUG - register char *yys; - extern char *getenv(); - - if (yys = getenv("YYDEBUG")) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if ((yyn = yydefred[yystate]) != 0) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#ifdef lint - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - yyval = yyvsp[1-yym]; - switch (yyn) - { -case 1: -#line 251 "label.y" -{ parse_result = (yyvsp[0].expr ? new analyzed_expr(yyvsp[0].expr) : 0); } -break; -case 2: -#line 256 "label.y" -{ yyval.expr = yyvsp[0].expr; } -break; -case 3: -#line 258 "label.y" -{ yyval.expr = new conditional_expr(yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); } -break; -case 4: -#line 263 "label.y" -{ yyval.expr = 0; } -break; -case 5: -#line 265 "label.y" -{ yyval.expr = yyvsp[0].expr; } -break; -case 6: -#line 270 "label.y" -{ yyval.expr = yyvsp[0].expr; } -break; -case 7: -#line 272 "label.y" -{ yyval.expr = new alternative_expr(yyvsp[-2].expr, yyvsp[0].expr); } -break; -case 8: -#line 274 "label.y" -{ yyval.expr = new conditional_expr(yyvsp[-2].expr, yyvsp[0].expr, 0); } -break; -case 9: -#line 279 "label.y" -{ yyval.expr = yyvsp[0].expr; } -break; -case 10: -#line 281 "label.y" -{ yyval.expr = new list_expr(yyvsp[-1].expr, yyvsp[0].expr); } -break; -case 11: -#line 286 "label.y" -{ yyval.expr = yyvsp[0].expr; } -break; -case 12: -#line 288 "label.y" -{ yyval.expr = new substitute_expr(yyvsp[-2].expr, yyvsp[0].expr); } -break; -case 13: -#line 293 "label.y" -{ yyval.expr = new at_expr; } -break; -case 14: -#line 295 "label.y" -{ - yyval.expr = new literal_expr(literals.contents() + yyvsp[0].str.start, - yyvsp[0].str.len); - } -break; -case 15: -#line 300 "label.y" -{ yyval.expr = new field_expr(yyvsp[0].num, 0); } -break; -case 16: -#line 302 "label.y" -{ yyval.expr = new field_expr(yyvsp[-1].num, yyvsp[0].num - 1); } -break; -case 17: -#line 304 "label.y" -{ - switch (yyvsp[0].num) { - case 'I': - case 'i': - case 'A': - case 'a': - yyval.expr = new format_expr(yyvsp[0].num); - break; - default: - command_error("unrecognized format `%1'", char(yyvsp[0].num)); - yyval.expr = new format_expr('a'); - break; - } - } -break; -case 18: -#line 320 "label.y" -{ - yyval.expr = new format_expr('0', yyvsp[0].dig.ndigits, yyvsp[0].dig.val); - } -break; -case 19: -#line 324 "label.y" -{ - switch (yyvsp[-1].num) { - case 'l': - yyval.expr = new map_expr(yyvsp[-4].expr, lowercase); - break; - case 'u': - yyval.expr = new map_expr(yyvsp[-4].expr, uppercase); - break; - case 'c': - yyval.expr = new map_expr(yyvsp[-4].expr, capitalize); - break; - case 'r': - yyval.expr = new map_expr(yyvsp[-4].expr, reverse_name); - break; - case 'a': - yyval.expr = new map_expr(yyvsp[-4].expr, abbreviate_name); - break; - case 'y': - yyval.expr = new extractor_expr(yyvsp[-4].expr, find_year, yyvsp[-2].num); - break; - case 'n': - yyval.expr = new extractor_expr(yyvsp[-4].expr, find_last_name, yyvsp[-2].num); - break; - default: - yyval.expr = yyvsp[-4].expr; - command_error("unknown function `%1'", char(yyvsp[-1].num)); - break; - } - } -break; -case 20: -#line 355 "label.y" -{ yyval.expr = new truncate_expr(yyvsp[-2].expr, yyvsp[0].num); } -break; -case 21: -#line 357 "label.y" -{ yyval.expr = new truncate_expr(yyvsp[-2].expr, -yyvsp[0].num); } -break; -case 22: -#line 359 "label.y" -{ yyval.expr = new star_expr(yyvsp[-1].expr); } -break; -case 23: -#line 361 "label.y" -{ yyval.expr = yyvsp[-1].expr; } -break; -case 24: -#line 363 "label.y" -{ yyval.expr = new separator_expr(yyvsp[-1].expr); } -break; -case 25: -#line 368 "label.y" -{ yyval.num = -1; } -break; -case 26: -#line 370 "label.y" -{ yyval.num = yyvsp[0].num; } -break; -case 27: -#line 375 "label.y" -{ yyval.num = yyvsp[0].num; } -break; -case 28: -#line 377 "label.y" -{ yyval.num = yyvsp[-1].num*10 + yyvsp[0].num; } -break; -case 29: -#line 382 "label.y" -{ yyval.dig.ndigits = 1; yyval.dig.val = yyvsp[0].num; } -break; -case 30: -#line 384 "label.y" -{ yyval.dig.ndigits = yyvsp[-1].dig.ndigits + 1; yyval.dig.val = yyvsp[-1].dig.val*10 + yyvsp[0].num; } -break; -case 31: -#line 390 "label.y" -{ yyval.num = 0; } -break; -case 32: -#line 392 "label.y" -{ yyval.num = 1; } -break; -case 33: -#line 394 "label.y" -{ yyval.num = -1; } -break; -#line 1565 "y.tab.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yyss + yystacksize - 1) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - return (1); -yyaccept: - return (0); -} diff --git a/contrib/groff/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man index 9e6a4ac..23f3fab 100644 --- a/contrib/groff/src/roff/groff/groff.man +++ b/contrib/groff/src/roff/groff/groff.man @@ -14,6 +14,9 @@ Front-Cover Texts, and with no Back-Cover Texts. A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. + +$FreeBSD$ + .. . .\" -------------------------------------------------------------------- @@ -1093,6 +1096,10 @@ Text output using the ISO \%Latin-1 (ISO \%8859-1) character set; see .BR \%iso_8859_1 (7). . .TP +.B koi8-r +Text output using the Russian KOI8-R character set. +. +.TP .B lbp Output for Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers). . diff --git a/contrib/groff/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man index 0511b45..f169229 100644 --- a/contrib/groff/src/roff/nroff/nroff.man +++ b/contrib/groff/src/roff/nroff/nroff.man @@ -15,6 +15,9 @@ manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. + + $FreeBSD$ + .. . .TH @G@NROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" @@ -55,6 +58,7 @@ command using groff. Only .BR ascii , .BR latin1 , +.BR koi8-r , .BR utf8 , and .B cp1047 diff --git a/contrib/groff/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh index 3120215..4342019 100755 --- a/contrib/groff/src/roff/nroff/nroff.sh +++ b/contrib/groff/src/roff/nroff/nroff.sh @@ -1,5 +1,6 @@ #! /bin/sh # Emulate nroff with groff. +# $FreeBSD$ prog="$0" # Default device. @@ -8,8 +9,10 @@ prog="$0" case "`exec 2>/dev/null ; locale charmap`" in UTF-8) T=-Tutf8 ;; - ISO-8859-1 | ISO-8859-15) + ISO*8859-1 | ISO*8859-15) T=-Tlatin1 ;; + KOI8-R) + T=-Tkoi8-r ;; IBM-1047) T=-Tcp1047 ;; *) @@ -19,6 +22,8 @@ case "`exec 2>/dev/null ; locale charmap`" in iso_8859_1 | *.ISO-8859-1 | *.ISO8859-1 | \ iso_8859_15 | *.ISO-8859-15 | *.ISO8859-15) T=-Tlatin1 ;; + *.KOI8-R) + T=-Tkoi8-r ;; *.IBM-1047) T=-Tcp1047 ;; *) @@ -27,6 +32,8 @@ case "`exec 2>/dev/null ; locale charmap`" in T=-Tutf8 ;; latin1) T=-Tlatin1 ;; + koi8-r) + T=-Tkoi8-r ;; cp1047) T=-Tcp1047 ;; *) @@ -53,7 +60,7 @@ for i exit 1 ;; -[iptSUC] | -[dMmrno]*) opts="$opts $1" ;; - -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) + -Tascii | -Tlatin1 | -Tkoi8-r | -Tutf8 | -Tcp1047) T=$1 ;; -T*) # ignore other devices diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common index dc8cc28..9199824 100644 --- a/contrib/groff/tmac/doc-common +++ b/contrib/groff/tmac/doc-common @@ -485,7 +485,6 @@ .ds doc-operating-system-FreeBSD-5.5 5.5 .ds doc-operating-system-FreeBSD-6.0 6.0 .ds doc-operating-system-FreeBSD-6.1 6.1 -.ds doc-operating-system-FreeBSD-6.2 6.2 .ds doc-operating-system-FreeBSD-7.0 7.0 . .ds doc-operating-system-Darwin-8.0.0 8.0.0 diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms index 25cce80..f759409 100644 --- a/contrib/groff/tmac/doc-syms +++ b/contrib/groff/tmac/doc-syms @@ -204,13 +204,13 @@ .as doc-str-At-v7 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At] .ds doc-str-At-V \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V .as doc-str-At-V " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1 +.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.1 .as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2 +.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.2 .as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3 +.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.3 .as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4 +.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.4 .as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] . .de At diff --git a/contrib/groff/tmac/eqnrc b/contrib/groff/tmac/eqnrc index 874d735..e23db46 100644 --- a/contrib/groff/tmac/eqnrc +++ b/contrib/groff/tmac/eqnrc @@ -1,4 +1,5 @@ .\" Startup file for eqn. +.\" $FreeBSD$ .EQ sdefine << %{ < back 20 < }% sdefine >> %{ > back 20 > }% @@ -51,6 +52,7 @@ ifdef ps|X|html ! set draw_lines 1 ! ifdef ascii ! define n %1% ! ifdef latin1 ! define n %1% ! +ifdef koi8-r ! define n %1% ! ifdef utf8 ! define n %1% ! ifdef cp1047 ! define n %1% ! ifdef n ! diff --git a/contrib/groff/tmac/mdoc.local b/contrib/groff/tmac/mdoc.local deleted file mode 100644 index 2de6621..0000000 --- a/contrib/groff/tmac/mdoc.local +++ /dev/null @@ -1,2 +0,0 @@ -.\" This file is loaded after doc.tmac. -.\" Put any local modifications to doc.tmac here. diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc index d73ace3..5defe8a 100644 --- a/contrib/groff/tmac/troffrc +++ b/contrib/groff/tmac/troffrc @@ -1,4 +1,5 @@ .\" Startup file for troff. +.\" $FreeBSD$ . .\" This is tested by pic. .nr 0p 0 @@ -17,6 +18,7 @@ .do ds troffrc!X100-12 X.tmac .do ds troffrc!ascii tty.tmac .do ds troffrc!latin1 tty.tmac +.do ds troffrc!koi8-r tty.tmac .do ds troffrc!utf8 tty.tmac .do ds troffrc!cp1047 tty.tmac .do ds troffrc!lj4 lj4.tmac @@ -29,7 +31,10 @@ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html . .\" test whether we work under EBCDIC .do ie '\[char97]'a' \ -. do tr \[char160]\~ +. ie '\*[.T]'koi8-r' \ +. do tr \[char154]\~ +. el \ +. do tr \[char160]\~ .el \ . do tr \[char65]\~ . @@ -39,8 +44,18 @@ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html .\" Load hyphenation patterns and exceptions. .do hpf hyphen.us .do hpfa hyphenex.us +.if '\*[.T]'koi8-r' \ +. do hpfa hyphen.ru . .\" Handle paper formats .do mso papersize.tmac . +.\" Disable SGR support in grotty(1). +.if n \{\ +. do nop \X'tty: sgr 0' +. sp -1 +. nr nl 0-1 +. nr % -1 +.\} +. .\" Don't let blank lines creep in here. diff --git a/contrib/groff/tmac/tty-char.tmac b/contrib/groff/tmac/tty-char.tmac index eb0efc4..58f8fdb 100644 --- a/contrib/groff/tmac/tty-char.tmac +++ b/contrib/groff/tmac/tty-char.tmac @@ -1,4 +1,5 @@ .\" tty-char.tmac +.\" $FreeBSD$ .\" .\" This file defines standard troff characters and some groff characters for .\" use with -Tascii, -Tlatin1, -Tutf8, and -Tcp1047. @@ -233,5 +234,7 @@ . .ie '\*(.T'cp1047' \ . do mso cp1047.tmac +.el .ie '\*(.T'koi8-r' \ +. do mso koi8-r.tmac .el \ . do mso latin1.tmac diff --git a/contrib/groff/tmac/tty.tmac b/contrib/groff/tmac/tty.tmac index 8d69253..6e6a856 100644 --- a/contrib/groff/tmac/tty.tmac +++ b/contrib/groff/tmac/tty.tmac @@ -1,4 +1,5 @@ .\" tty.tmac +.\" $FreeBSD$ .\" .nr _C \n(.C .cp 0 @@ -82,9 +83,10 @@ . .ie '\*(.T'cp1047' \ . do mso cp1047.tmac -.el \ -. if !'\*(.T'ascii' \ -. do mso latin1.tmac +.el .ie '\*(.T'koi8-r' \ +. do mso koi8-r.tmac +.el .if !'\*(.T'ascii' \ +. do mso latin1.tmac . .\" If you want the character definitions in tty-char.tmac to be loaded .\" automatically, remove the `\"' from the next line. |