X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/3d3bc1fe30f356cf674a979409e86ea0f88de4a0..1d5b3c08fe51fa55ff258c40a9aea3e96de104e1:/ChangeLog diff --git a/ChangeLog b/ChangeLog index c188d999..141039d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,613 @@ +2009-04-06 Joel E. Denny + + Fix options documentation. + * build-aux/cross-options.pl: As in --help output, write optional + arguments as [=ARG] not =[ARG]. + * doc/bison.texinfo (Bison Options): Add -W/--warnings argument. + +2009-04-04 Joel E. Denny + + Replace BISON_PROG_GNU_M4 with Autoconf's AC_PROG_GNU_M4. + If the first m4 in $PATH is wrong, it keeps looking. Moreover, its + requirements for a correct m4 are stricter. + * m4/m4.m4: Make it a symbolic link to submodules/autoconf/m4/m4.m4. + * configure.ac: Update to use AC_PROG_GNU_M4. + Reported by Eric Blake. + +2009-04-03 Joel E. Denny + + Help with updating web manual. + * HACKING: Incorporate instructions from gnulib/doc/README. + * bootstrap.conf (gnulib_modules): Add gendocs. + +2009-04-03 Akim Demaille + + Regen. + * src/parse-gram.h, src/parse-gram.c: Regen. + +2009-04-03 Akim Demaille + + Factor %FLAG at scan level. + * src/parse-gram.y (PERCENT_DEBUG, PERCENT_ERROR_VERBOSE): Token + definitions and associated rules, replaced by.... + (PERCENT_FLAG): this new token type, and rule. + * src/scan-gram.l (RETURN_PERCENT_FLAG): New. + Use it for %debug and %error-verbose. + +2009-04-03 Akim Demaille + + Regen. + * src/parse-gram.h, src/parse-gram.c: Regen. + +2009-04-03 Akim Demaille + + Treat %debug as %define debug. + * data/bison.m4 (b4_debug_if): New. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/yacc.c, + * data/lalr1.java: Use it instead of b4_debug_flag. + * src/getargs.h, src/getargs.c (debug_flag): Remove. + * src/output.c (prepare): Don't output it. + * src/parse-gram.y: Treat %debug as %define debug. + +2009-04-03 Akim Demaille + + Treat %error-verbose as %define error_verbose. + This allows to pass -Derror_verbose on the command line. Better + yet, it allows to pass -Derror_verbose=$(ERROR_VERBOSE), with + ERROR_VERBOSE being defined as false or true. + * data/bison.m4 (b4_percent_define_if_define): Instead of relying + on b4_percent_define_ifdef, for does not check the defined value, + but only whether the symbol is defined, rely on + b4_percent_define_flag_if, so that a value of "false" is processed + as a false. + If not defined, define the flag to "false". + (b4_error_verbose_if): New. + * data/glr.c, data/lalr1.cc, data/yacc.c: Use it instead of + b4_error_verbose_flag. + * src/getargs.h, src/getargs.c (error_verbose_flag): Remove. + * src/output.c (prepare): Don't output it. + * src/parse-gram.y (%error-verbose): Treat as %define error_verbose. + +2009-04-03 Joel E. Denny + + Fix strange %define locations for default values. + Reported by Akim Demaille at + + and discussed again starting at + . + * data/bison.m4 (b4_percent_define_default): Leave syncline blank + because location information is bogus. + Use angle brackets to delimit fake file name because square brackets + look like underexpanded m4. Choose a better fake file name. + Use negative line numbers. + * src/muscle_tab.c (muscle_percent_define_default): Likewise. + * src/location.c (location_print): If line for a boundary is negative, + only print that boundary's file name. + * src/location.h: Document that. + * tests/skeletons.at (%define Boolean variables: invalid skeleton + defaults): Update output. + +2009-04-03 Joel E. Denny + + Pacify ./configure --enable-gcc-warnings. + * Makefile.am (AM_CFLAGS): Remove $(WERROR_CFLAGS) because many files + in lib won't compile with it. + * src/local.mk (src_bison_CFLAGS): Use $(WERROR_CFLAGS) here only. + +2009-03-31 Akim Demaille + + bootstrap: --help to stdout. + * bootstrap (usage): Don't send --help to stderr. + Use a here doc instead of a long string. + +2009-03-31 Akim Demaille + + bootstrap: README-hacking no longer exists + * bootstrap (checkout_only_file): Set to HACKING. + +2009-03-26 Akim Demaille + + doc: merge HACKING and README-hacking. + Two files is confusing. + Reported by Alexandre Duret-Lutz. + + * README-hacking: Merge into... + * HACKING (Working from the repository): here. + +2009-03-26 Akim Demaille + + doc: update README-hacking. + * README-hacking: We now use git and git submodules. + Reported by Ralf Wildenhues and Alexandre Duret-Lutz. + +2009-03-26 Akim Demaille + + lalr1.cc: avoid GCC 4.3 warnings. + GCC 4.3 now warns about "a || b && c" and asks for explicit + parentheses. + Reported by Alexandre Duret-Lutz. + * data/location.cc: Update copyright years. + (Position::operator==): Use parens to make precedence explicit. + Compare lines and columns first, as they are more likely to be + different, and they are faster to compare. + +2009-03-26 Akim Demaille + + gnulib: update. + * gnulib: Update to latest. + * src/local.mk (AM_CFLAGS): Move to... + * Makefile.am: here. + * etc/prefix-gnulib-mk (prefix_assignment): Also transform + AM_CFLAGS. + +2009-03-02 Akim Demaille + + Comment changes. + +2009-03-02 Akim Demaille + + Share b4_yytranslate_define. + * data/lalr1.cc (b4_yytranslate_define): Move to... + * data/c++.m4: here. + +2009-03-02 Akim Demaille + + Use locations in the variant example. + Yes, this obfuscates the point of this example, variants only. + But glr.cc cannot work (yet?) without locations. This change + makes it easier to use this example with glr.cc. + + * examples/variant.yy (assert): %define it. + (locations): Request them. + (yylex): Bind the location to the stage. + +2009-03-02 Akim Demaille + + Dub make_TOKEN as a public type interface. + * data/c++.m4 (b4_symbol_constructor_declare) + (b4_symbol_constructor_define): New empty stubs. + (b4_public_types_declare, b4_public_types_define): Use them. + * data/lalr1.cc (b4_symbol_constructor_declare) + (b4_symbol_constructor_declare_) + (b4_symbol_constructor_define_, b4_symbol_constructor_define): + Move to... + * data/variant.hh: here. + Remove the "b4_variant_if" parts, as variant.hh is loaded only if + needed. + * data/lalr1.cc: No longer invoke b4_symbol_constructor_define and + b4_symbol_constructor_declare, as it is now done by + b4_public_types_define and b4_public_types_declare. + +2009-03-02 Akim Demaille + + Coding style changes. + * data/lalr1.cc (b4_symbol_constructor_declaration_) + (b4_symbol_constructor_declarations) + (b4_symbol_constructor_definition_) + (b4_symbol_constructor_definitions) + (b4_yytranslate_definition): Rename as... + (b4_symbol_constructor_declare_) + (b4_symbol_constructor_declare) + (b4_symbol_constructor_define_) + (b4_symbol_constructor_define) + (b4_yytranslate_define): these. + * data/variant.hh (b4_variant_definition): Rename as... + (b4_variant_define): this. + +2009-03-02 Akim Demaille + + Factor b4_assert_if, b4_lex_symbol_if, and b4_variant_if. + * data/bison.m4 (b4_percent_define_if_define): New. + * data/c++.m4 (b4_variant_if): Move to... + * data/bison.m4: Here, using b4_percent_define_if_define. + * data/lalr1.cc (b4_assert_if, b4_lex_symbol_if): Move to... + * data/bison.m4: Here, using b4_percent_define_if_define. + +2009-03-02 Akim Demaille + + Dub symbol_type_base as a public type. + * data/c++.m4 (b4_public_types_declare): Now define + symbol_type_base and symbol_type. + (b4_public_types_define): New. + In both cases, the definitions are taken verbatim from lalr1.cc. + * data/lalr1.cc: Adjust. + +2009-03-02 Akim Demaille + + b4_public_types_declare. + * data/c++.m4 (b4_public_types_declare): New. + * data/glr.cc, data/lalr1.cc: Use it. + +2009-03-02 Akim Demaille + + b4_semantic_type_declare. + * data/c++.m4 (b4_semantic_type_declare): New. + Factors and generalizes what was in glr.cc and lalr1.cc. + * data/variant.hh (b4_semantic_type_declare): Redefine it for + variants. + * data/lalr1.cc, data/glr.cc: Use it. + +2009-02-26 Akim Demaille + + Upgrade gnulib. + * gnulib: Upgrade from master. + * lib/.cvsignore, lib/.gitignore, m4/.cvsignore, m4/.gitignore: + Regen. + +2009-02-25 Akim Demaille + + Remove useless arguments. + * data/glr.c (yy_reduce_print): $$ and @$ are not used and not + relevant. + +2009-02-25 Akim Demaille + + Comment changes. + * data/lalr1.cc: here. + +2009-02-25 Akim Demaille + + Fix glr.cc's debug level handling. + * data/glr.cc (yydebug_): Remove, as it is actually yydebug from + glr.c which is used. + (debug_level, set_debug_level): Adjust. + +2009-02-25 Akim Demaille + + Copyright years. + * data/glr.c: Add 2007 and 2008 here, consistenly with the comments. + +2009-02-25 Akim Demaille + + Style changes. + * etc/bench.pl.in (generate_grammar_list): Consitently use + location_type, not yy::location. + +2009-02-25 Akim Demaille + + Comment change. + * data/lalr1.cc: here. + +2009-02-19 Akim Demaille + + Make yyparser::error public. + * data/lalr1.cc: here. + There is no good reason to keep it private (and it is convenient + to use it from the scanner for instance). It is already public in + glr.cc. + +2009-02-19 Akim Demaille + + Comment changes. + * data/glr.cc: here. + +2009-02-19 Akim Demaille + + Remove trailing blanks. + The epilogue has its own ending \n, no need to add another. + + * data/glr.c, data/lalr1.java, data/yacc.c: dnl when outputing the + epilogue. + * data/glr.cc: dnl when extending the epilogue. + Remove stray "private:". + +2009-02-19 Akim Demaille + + Use b4_c_modern. + * data/c.m4 (b4_c_function_decl): Here. + +2009-02-19 Akim Demaille + + Comment changes. + * data/lalr1.cc: here. + +2009-02-19 Akim Demaille + + Extract variant.hh + * data/variant.hh: New, extracted from... + * data/lalr1.cc: here. + Adjust. + * data/local.mk: Adjust. + +2009-02-19 Akim Demaille + + Extract stack.hh from lalr1.cc. + * data/stack.hh: New. + * data/lalr1.cc: Extract from here. + * data/local.mk: Adjust. + +2009-02-03 Joel E. Denny + + Add reminder about uploading public key to keys.gnupg.net. + * HACKING (Release Procedure): Here. + +2009-01-28 Akim Demaille + + * NEWS: Update information about 2.4.1 and 2.4.2. + +2008-11-04 Akim Demaille + + Reformat NEWS. + * NEWS: Use more outline-mode markup. + Suggested by Jim Meyering. + +2009-01-08 Akim Demaille + + Fix grep portability issues. + Grep on Solaris does not support -q. + Reported by Summum Bonum. + + * NEWS: Add a stub for 2.4.2. + * THANKS: Add Summum Bonum. + * tests/atlocal.in (EGREP): New. + (CC, CXX, XSLTPROC): Make it possible to override them via + envvars. + * tests/java.at: Use $EGREP instead of egrep. + Use AT_CHECK's ignore instead of grep's -q. + +2008-12-11 Akim Demaille + + Pass the token type to yysyntax_error. + * data/yacc.c (yysyntax_error): Take the transated token instead + of the raw number. + Adjust callers. + * TODO: Update. + +2008-12-11 Akim Demaille + + Formatting changes. + * data/glr.c: Formatting changes. + +2008-12-11 Akim Demaille + + Propagate i18n changes into glr.c. + * TODO: Update. + * data/glr.c (yyreportSyntaxError): Use "switch" instead of + building the error message format dynamically. + * data/lalr1.java: Formatting changes. + +2008-12-11 Akim Demaille + + Use testsuite -C. + * tests/local.mk: Replace "cd && testsuite" by "testsuite -C". + Solves problems when top_srcdir is an absolute path. + Suggested by Eric Blake. + * configure.ac: Require Autoconf 2.62. + +2008-12-11 Akim Demaille + + Simplify the i18n of the error messages. + * data/lalr1.cc: Comment changes. + * data/yacc.c (yysyntax_error): Rewrite, using a switch as in + lalr1.cc instead of building dynamically the format string. + +2008-12-08 Akim Demaille + + Fix portability issue in the test suite. + * tests/local.at (AT_MATCHES_CHECK): New. + Based on Perl instead of Sed. Sed has too many portability + pitfalls, not ever Sed is GNU Sed. + * tests/actions.at (Fix user actions without a trailing semicolon): + Use it. + +2008-12-08 Akim Demaille + + Update data/README. + * data/README: Document glr.cc, lalr1.java, m4sugar and xslt. + +2008-12-08 Akim Demaille + + Install autoconf as a submodule to get m4sugar. + * .gitmodules: Add submodules/autoconf. + * data/m4sugar/foreach.m4, data/m4sugar/m4sugar.m4: Now links into + submodules/autoconf. + +2008-12-08 Akim Demaille + + Test token.prefix in all the skeletons. + * data/java.m4 (b4_token_enum): Use the token.prefix. + * tests/local.at (AT_BISON_OPTION_PUSHDEFS): Define AT_TOKEN_PREFIX. + * tests/calc.at (_AT_DATA_CALC_Y): Use it. + Add checks for yacc.c, glr.c, lalr1.cc and glr.cc. + * tests/java.at: Comment changes. + (AT_CHECK_JAVA_MINIMAL): Define the END token. + (Java parser class and package names): Add token.prefix check. + +2008-12-08 Akim Demaille + + Fix regeneration of atconfig. + * tests/local.mk (tests/atconfig): The rule was incorrect, but + remove it: now that there is no tests/Makefile.am, the top-level + Makefile properly updates atconfig when needed. + +2008-12-07 Di-an Jan + + Implement the FIXME that ends an user action with a semicolon + if it seems necessary. + * src/scan-code.l (flex rules section): Flag cpp directive from + any `#' to the first unescaped end-of-line. Semicolon is not + needed after `;', `{', '}', or cpp directives and is needed after + any other token (whitespaces and comments have no effect). + * tests/actions.at (Fix user actions without a trailing semicolon): + New test. + * tests/input.at (AT_CHECK_UNUSED_VALUES): Add semicolons to + to make user actions complete statements. + Adjust column numbers in error messages. + * tests/regression.at (Fix user actions without a trailing semicolon): + Remove. Covered by new test. + +2008-12-07 Akim Demaille + + Update gnulib. + * gnulib: Update from master. + +2008-12-05 Eric Blake + + Avoid compiler warning. + * src/output.c (muscle_insert_item_number_table): Delete unused + function. + +2008-12-02 Eric Blake + + Build testsuite with newer autoconf. + * tests/output.at (m4_expand): Don't override in newer autoconf, + where the underlying implementation changed. + * tests/cxx-type.at (_AT_RESOLVED_GLR_OUTPUT) + (_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_AMBIG_GLR_OUTPUT) + (_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + (_AT_VERBOSE_GLR_STDERR): Expand to double-quoted strings, + since some of them contain unbalanced ')'. + +2008-12-01 Akim Demaille + + Use b4_symbol for printers and destructors everywhere. + * data/bison.m4 (b4_symbol_action_location): New. + * data/c.m4 (b4_symbol_actions): Remove. + Adjust all callers to use by b4_symbol_foreach and the corresponding + b4_symbol_printer/destructor macro. + * data/glr.cc: Adjust. + * data/lalr1.java: Adjust the %destructor sanity check. + * src/output.c (symbol_code_props_output): Remove, we no longer + need the b4_symbol_printers/destructors tables. + +2008-12-01 Akim Demaille + + Use b4_symbol_case_. + * data/lalr1.cc, data/bison.m4 (b4_symbol_action): Use + b4_symbol_case_. + +2008-12-01 Akim Demaille + + Move b4_symbol based macro to bison.m4. + * data/lalr1.cc (b4_symbol_, b4_symbol, b4_symbol_if) + (b4_symbol_action, b4_symbol_destructor, b4_symbol_printer) + (b4_symbol_case_, b4_symbol_foreach, b4_type_action_) + (b4_type_foreach): Move to... + * data/bison.m4: Here. + * data/lalr1.cc (b4_symbol_action): Specialize for C++: use + b4_symbol_value_template instead of b4_symbol_value. + +2008-12-01 Akim Demaille + + b4_symbol/type_foreach. + * data/lalr1.cc (b4_symbol_foreach, b4_type_foreach): New. + Use them. + +2008-12-01 Akim Demaille + + Use the symbol properties to output the printer/destructor for lalr1.cc. + Instead of defining complex list of tuples to define various + properties of the symbols, we now prefer to define symbols as + "structs" in m4: using the symbol key (its number), and the + property name, b4_symbol gives it value. Use this to handle + destructors and printers. + + * src/output.c (CODE_PROP): New. + (prepare_symbol_definitions): Use it to define the printer and + destructor related attributes of the symbols. + * data/lalr1.cc (b4_symbol_actions): Rename as... + (b4_symbol_action): this. + Use b4_symbol instead of 6 arguments. + (b4_symbol_printer, b4_symbol_destructor): New. + Use them instead of b4_symbol_actions. + +2008-12-01 Akim Demaille + + Avoid capturing variables too easily. + * src/muscle_tab.h (MUSCLE_INSERT_BOOL, MUSCLE_OBSTACK_SGROW): Use + v__ and p__ instead of v and p. + +2008-12-01 Akim Demaille + + Remove spurious empty line before syncline. + * data/bison.m4 (b4_syncline): Don't output an empty line before + the output. + +2008-11-26 Akim Demaille + + Convert lib/Makefile.am into lib/local.mk. + The real problem is rather gnulib.mk, which itself is extracted + from a Makefile.am that gnulib expects to the "recursive". The + tool prefix-gnulib-mk converts such a gnulib.mk to be + non-recursive. Also, some AC_SUBST variables need to be adjusted. + + * etc/prefix-gnulib-mk: New. + * bootstrap (slurp): Use it to convert further gnulib.mk. + No longer try to avoid re-creation of lib/gnulib.mk as the changes + are deeper. + * lib/Makefile.am: Rename as... + * lib/local.mk: this. + Adjust to be prefixed. + * Makefile.am, configure.ac: Adjust. + * src/local.mk (AM_CPPFLAGS): Extend it, don't define it. + +2008-11-26 Akim Demaille + + s/_FLAGS/FLAGS/. + * tests/local.mk (TESTSUITE_FLAGS, AUTOTEST_FLAGS): Rename as... + (TESTSUITEFLAGS, AUTOTESTFLAGS): these to compy with the GCS. + Reported by Eric Blake. + +2008-11-26 Akim Demaille + + Use b4_parser_tables_define in glr.cc. + * data/glr.c: Use b4_parser_tables_define instead of defining the + (deterministic integral) tables by hand. + +2008-11-26 Akim Demaille + + Use b4_parser_tables_define in Java. + * data/java.m4 (b4_typed_parser_table): Rename as... + (b4_typed_parser_table_define): this, for consistency. + Accept a comment as $4. + Move $2 into yy*_. + (b4_integral_parser_table): Rename as... + (b4_integral_parser_table_define): this. + * data/lalr1.java: Adjust all uses. + Use b4_parser_tables_define instead of generation by hand. + +2008-11-26 Akim Demaille + + Prepare the convergence bw C style and Java table generation. + * data/bison.m4 (b4_tables_map, b4_tables_declare) + (b4_tables_define): Rename as... + (b4_integral_parser_tables_map, b4_parser_tables_declare) + (b4_parser_tables_define): these. + * data/c.m4 (b4_table_define): Rename as... + (b4_integral_parser_table_define): this. + * data/lalr1.cc: Adjust. + (b4_table_define, b4_table_declare): Rename as... + (b4_integral_parser_table_define) + (b4_integral_parser_table_declare): these. + (yyrline_): Move the comment where it is actually used. + * data/yacc.c: Adjust. + (yyrline): Use b4_integral_parser_table_define. + +2008-11-26 Akim Demaille + + Regen. + * src/parse-gram.h, src/parse-gram.c: Regen. + +2008-11-26 Akim Demaille + + Factor the generation of the (integral) tables bw yacc.c and lalr1.cc. + * data/lalr1.cc (b4_tables_map): Move to... + * data/bison.m4: here. + Update the comment for yytable during the flight. + (b4_tables_declare, b4_tables_define): New. + * data/lalr1.cc: Use them. + * data/c.m4 (b4_table_define): New. + * data/yacc.c: Use b4_tables_define instead of output the tables + by hand. + * tests/regression.at (Web2c Actions): Adjust the expected output, + the order of the tables changed. + 2008-11-26 Akim Demaille Get rid of (yy)rhs and (yy)prhs. These tables are no longer needed in the parsers, and they don't seem to be useful. They are not documented either. - + * src/output.c (prepare_rules): Get rid of rhs and prhs. Adjust the computation of (yy)r2. @@ -16,7 +620,7 @@ Get rid of lalr1-split.cc. It was no longer maintainer. - + * data/lalr1-split.cc: Remove. * etc/bench.pl.in (bench_fusion_parser): Remove. Adjust. @@ -44,7 +648,7 @@ Prefer TESTSUITE_FLAGS. TESTSUITEFLAGS is barely readable. - + * tests/local.mk (TESTSUITE_FLAGS): Default to $(TESTSUITEFLAGS) for backward compatibility. Use the former instead of the latter. @@ -62,12 +666,13 @@ 2008-11-25 Akim Demaille Get rid of yyrhs and yyprhs in yacc.c. - They were used to get the symbol types, given a rule number, when - displaying the top of the stack before a reduction. But the symbol type - is available from the state stack. This has two be benefits: two tables - less in the parser (making it smaller), and a more consistent use of the - three stacks which will help to fuse them. - + They were used to get the symbol types, given a rule number, when + displaying the top of the stack before a reduction. But the + symbol type is available from the state stack. This has two be + benefits: two tables less in the parser (making it smaller), and a + more consistent use of the three stacks which will help to fuse + them. + * data/yacc.c (yyprhs, yyrhs): Remove. (YY_REDUCE_PRINT): Pass yyssp to yy_reduce_print. (yy_reduce_print): Take yyssp as argument. @@ -80,7 +685,7 @@ b4_tables_map. The point is to factor the generation of the tables across skeletons. This is language dependant. - + * data/c.m4 (b4_comment_): New. Should be usable to define how to generate tables independently of the language. @@ -140,7 +745,7 @@ (Option Cross Key): Implement FIXME: listing directives also. * build-aux/cross-options.pl: Read from rather than <>. (Short Option): Special case -d. Put arguments inside @option. - (Bison Directive): Add column, automatically extracted from + (Bison Directive): Add column, automatically extracted from src/scan-gram.l (actual name passed as the first argument) with special case for %define. * doc/local.mk (doc/cross-options.texi): Pass src/scan-gram.l @@ -1916,9 +2521,9 @@ 2008-08-29 Akim Demaille Clarify UPDATED use. - * doc/bison.texinfo: It refers to the last edition of this file, + * doc/bison.texinfo: It refers to the last edition of this file, not to the release date of Bison. - Reported by Joel E. Denny. + Reported by Joel E. Denny. 2008-08-29 Akim Demaille @@ -1938,15 +2543,15 @@ 2008-08-27 Akim Demaille Check yyerrok in calc.at. - * tests/calc.at (calc.y): Use yyerrok on "( error )". - (AT_CHECK_CALC): Add a check that ensures that yyerrok works as - expected. + * tests/calc.at (calc.y): Use yyerrok on "( error )". + (AT_CHECK_CALC): Add a check that ensures that yyerrok works as + expected. 2008-08-27 Akim Demaille Support yyerrok in lalr1.cc. YYBACKUP is still to import back into lalr1.cc. - * data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define. + * data/lalr1.cc (yyerrork, yyclearin, YYRECOVERING): Define. 2008-08-26 Joel E. Denny @@ -22710,8 +23315,8 @@ ----- Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 - Free Software Foundation, Inc. + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this