changeset 3972:6cd3955b7e4d

[xemacs-hg @ 2007-05-21 03:50:13 by stephent] Sync etags to pot version 17.32.
author stephent
date Mon, 21 May 2007 03:50:19 +0000
parents de8a6fef7fcc
children 16a33eb61442
files configure.ac etc/ETAGS.ChangeLog etc/ETAGS.README etc/etags.1 lib-src/Makefile.in.in lib-src/etags.c
diffstat 6 files changed, 1009 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Sun May 20 21:51:21 2007 +0000
+++ b/configure.ac	Mon May 21 03:50:19 2007 +0000
@@ -1191,8 +1191,11 @@
   fi
 fi
 AC_DEFINE_UNQUOTED(XEMACS_CODENAME, "$xemacs_codename")
+dnl for etags
+verbose_version=$version
 if test "$xemacs_extra_name" != ""; then
   AC_DEFINE_UNQUOTED(XEMACS_EXTRA_NAME, "$xemacs_extra_name")
+  verbose_version="$verbose_version $xemacs_extra_name"
 fi
 if test "$xemacs_release_date" != ""; then
   AC_DEFINE_UNQUOTED(XEMACS_RELEASE_DATE, "$xemacs_release_date")
@@ -5694,6 +5697,7 @@
 
 AC_SUBST(PROGNAME)
 AC_SUBST(version)
+AC_SUBST(verbose_version)
 AC_SUBST(inststaticdir)
 AC_SUBST(instvardir)
 AC_SUBST(srcdir)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/ETAGS.ChangeLog	Mon May 21 03:50:19 2007 +0000
@@ -0,0 +1,849 @@
+2007-05-18  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c: Extern definitions of some more pointer functions for
+	standalone compilation, especially important for 64bit platforms.
+	(main, print_help): --members is now the default for etags.
+	(C_entries): Parse start of C comment as a space == end of token.
+	This is not necessary for C++ comment, already parsed as newline.
+
+2007-02-05  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (default_C_help, Cplusplus_help, PHP_help, print_help)
+	(main): Now --members is the default for etags, not for ctags yet.
+
+2007-01-02  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (longopts): New undocumented option --no-duplicates.
+	(no_duplicates): Static variables for the above option.
+	(print_help): Do not print help for --no-warn, now undocumented.
+	(add_node): Allow duplicate tags in ctags mode unless --no-duplicates.
+	(main): Pass the -u option to sort in ctags mode.
+
+2006-12-28  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (readline): When creating a relative file name from a
+	#line directive, leave the file name alone.  The previous
+	behaviour was to make it relative to the tags file directory,
+	under the hypothesis that the #line directive file name was
+	relative to the directory of the tagged file.  That hypothesis is
+	wrong with Cpp and Lex.
+
+2006-12-20  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (C_entries): DEFUN names were longer by one: corrected.
+	(Makefile_targets): Do not include spaces in tag names.
+
+2006-08-12  Kevin Ryde <user42@zip.com.au>
+
+	* etags.c (readline): Check for double quote after #line.
+
+2006-08-12  Jan Djärv  <jan.h.d@swipnet.se>
+
+	* etags.c (readline): sscanf could in principle return 2.
+
+2006-08-12  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (readline): lno is unsigned.
+	(TeX_commands): Use p++ (rather than *p++) to increment p.
+	(Lua_functions): Explicitely discard LOOKING_AT's return value.
+
+2006-08-07  Masatake YAMATO  <jet@gyve.org>
+
+	* etags.c (TEX_mode): Check getc retruns EOF.
+	File ended without newline causes infinite loop.
+
+2002-07-14  Adrian Aichner  <adrian@xemacs.org>  (tiny change)
+
+	* etags.c: It's XEmacs, not Xemacs: change all the occurences.
+
+2006-07-10  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c [ETAGS_REGEXPS]: #ifdef's deleted, define unconditionally.
+	[LONG_OPTIONS]: Changed to NO_LONG_OPTIONS, now normally undefined.
+	(Objc_suffixes): Suggest using --lang=c for full help.
+	(C_entries): Initialise savetoken to 0 to shut up the compiler.
+
+2006-07-10  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (absolute_filename): Free unused space (cosmetic change).
+	(in_word_set): In C, also tag #undef symbols.
+
+2006-05-02  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (Perl_functions): Free space allocated for var package.
+	(Erlang_functions): Possibly free space allocated for var last.
+	(Prolog_functions): Possibly free space allocated for var last.
+
+2005-11-18  Hideki IWAMOTO <h-iwamoto@kit.hi-ho.ne.jp>  (tiny change)
+
+	* etags.c (main): Cxref mode writes to stdout: do not close tagf,
+	which was never opened.
+
+2005-09-27  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c: Preliminary Forth support.
+	(prolog_pr): Cast strlen to int before comparison.
+	(LOOKING_AT, LOOKING_AT_NOCASE): Let the preprocessor check that
+	the second argument is indeed a literal string.
+	(main): In append mode, sort the tags file after writing it.
+
+2005-09-27  Emanuele Giaquinta  <emanuele.giaquinta@gmail.com>  (tiny change)
+
+	* etags.c (longopts, print_help, main): The -a (--append) option
+	can be used in ctags also; for one, the Linux make file uses it.
+
+2004-09-13  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c (main): When relative file names are given as argument,
+	make them relative to the current working dir, rather than
+	relative to the output tags file, if the latter is in /dev.
+
+2004-09-13  David A. Capello  <dacap@users.sourceforge.net>  (tiny change)
+
+	* etags.c: (Lua_suffixes, Lua_help, lang_names, Lua_functions):
+	Support the Lua scripting language <http://www.lua.org>.
+
+2004-09-13  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c [EXIT_SUCCESS, EXIT_FAILURE]: Define them when no
+	<stdlib.h> is available.
+	(enum sym_type): New st_C_attribute value for parsing
+	gcc's __attribute__.  Deleted st_C_typespec value.
+	(gperf, in_word_set): Use gperf 3, options changed.  Added the
+	__attribute__ keyword, removed all the st_C_typespec keywords,
+	changed attribute for Java to (C_JAVA & !C_PLPL).
+	(inattribute): New global bool, part of the C state machine.
+	(cblev): Identifier renamed to bracelev throughout.
+	(consider_token, C_entries): Numerous changes for making the
+	parser more robust and adding support for __attribute__.
+
+2004-09-08  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c: Add arch taglines
+	[LONG_OPTIONS]: make it TRUE (ifdef) or FALSE for ease of use.
+	[GOOD, BAD]: renamed to EXIT_SUCCESS, EXIT_FAILURE.
+	(suggest_asking_for_help): Fix having macros in a printf statement.
+	(consider_token): check C++ `operator' only when the token len is
+	long enough.
+
+2003-01-09  Francesco Potortì  <pot@gnu.org>
+
+	* etags.c: changes for language-sepcific help by Philippe
+	Waroquiers <wao@cfmu.eurocontrol.be> applied and largely revised.
+	(language): Added a `help' member.
+	(arg_type): Added an at_end constant.
+	(plain_C_suffixes): Some items removed from here.
+	(Objc_suffixes): And put here (new constant).
+	(Ada_help, Asm_help, default_C_help, Cplusplus_help, Cjava_help,
+	Cobol_help, Erlang_help, Fortran_help, HTML_help, Lisp_help,
+	Makefile_help, Objc_help, Pascal_help, Perl_help, PHP_help,
+	PS_help, Prolog_help, Python_help, Scheme_help, TeX_help,
+	Texinfo_help, Yacc_help, auto_help, none-help, no_lang_help): New
+	constants.
+	(PS_functions, PS_suffixes): Renamed from Postscript_functions and
+	Postscript_suffixes.
+	(lang_names): Adapted to the new language structure, new language
+	"objc" added (was previously merged with "proc").
+	(print_language_names): Some help strings corrected.
+	(print_help): Now takes an argument and possibly prints lang help.
+	(print_help): Some help strings corrected.  Documents
+	language-specific help.
+	(main): Only print help after having parsed all the arguments.
+
+2002-09-03  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (regex_tag_multiline, readline): Never pass pfnote a
+	string that cannot be freed.
+
+2002-08-30  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (consider_token, C_entries): Switch to C++ parsing when
+	auto-detection is enabled and the `::' qualifier is met.
+	(consider_token, C_entries): Several bugs corrected that tagged
+	some declarations even though --declarations was not used.
+	(plainc): New macro.
+	(C_entries): Use it.
+	(C_entries): Several cosmetic changes.
+	(C_entries): Invalidate the token is some cases.
+
+2002-08-29  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (C_entries): Corrected a problem with const C++ funcs.
+	(ignoreindent): Renamed from noindentypedefs.
+	(cjava, cplpl): They are now macros instead of local vars.
+
+2002-08-28  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (HTML_labels): Tag ID= also.
+
+2002-08-27  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (Ada_funcs): Do not tag "use type Xxxx;".
+
+2002-06-25  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: New language HTML.
+	(make_tag): Never generate null length tag names.
+	(linebuffer_init): Renamed from initbuffer.  All callers changed.
+	(pattern): Structure renamed to `regexp', member regex renamed to
+	pattern.
+	(node_st): Member pat renamed to regex.
+	(pattern); New member force_explicit_name, for future use.  Now
+	always set to true, cannot be reset.
+	(add_regex, regex_tag_multiline, readline): Use it.
+	(main): Free some global structures.
+
+2002-06-21  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (fdesc): New member `written'.
+	(readline, process_file): Initialise it.
+	(put_entries): Set it.
+	(main): Use it to create entries for files without tags.
+	(total_size_of_entries): Do not count invalid tags.
+	(etags_strcasecmp): Like BSD's, for compatibility.
+	(strcaseeq): Make it into a macro.
+
+2002-06-21  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: (F_getit, Fortran_functions, Ada_getit, Asm_labels)
+	(Python_functions, PHP_functions, PHP_functions, PHP_functions)
+	(PHP_functions, PHP_functions, Cobol_paragraphs)
+	(Makefile_targets, Postscript_functions, Texinfo_nodes)
+	(prolog_pr, erlang_func, erlang_attribute)
+	(Perl_functions, Perl_functions, Pascal_functions)
+	(TeX_commands, get_tag): Use make_tag instead of pfnote.
+	(get_tag): Prototype changed, all callers changed.
+
+2002-06-20  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: Use, together with etags.el, an optimised form of tags,
+	which are almost always unnamed.  etags.el looks for an explicit
+	tag name, then for an implicit one.  See make_tag for details.
+	The change is both forwards and backwards compatible.
+	(make_tag): New function (was the disabled function new_pfnote).
+	(make_C_tag): Use it.
+
+2002-06-19  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (add_regex): Invalid regexp modifiers are ignored.
+	(Makefile_targets): Tag variables unless --no-globals.
+	(LOOP_ON_INPUT_LINES): Serious bug corrected.
+
+2002-06-13  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (erlang_atom, erlang_attribute): Bugs corrected.
+	(invalidate_nodes): Bug corrected.
+	(print_help): Better help for regexps.
+
+2002-06-12  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (arg_type): at_icregexp label removed (obsolete).
+	(pattern): New member multi_line for multi-line regexps.
+	(filebuf): A global buffer containing the whole file as a string
+	for multi-line regexp matching.
+	(need_filebuf): Global flag raised if multi-line regexps used.
+	(print_help): Document new regexp modifiers, remove references to
+	obsolete option --ignore-case-regexp.
+	(main): Do not set regexp syntax and translation table here.
+	(main): Treat -c option as a backward compatibility hack.
+	(main, find_entries): Init and free filebuf.
+	(find_entries): Call regex_tag_multiline after the regular parser.
+	(scan_separators): Check for untermintaed regexp and return NULL.
+	(analyse_regex, add_regex): Remove the ignore_case argument, which
+	is now a modifier to the regexp.  All callers changed.
+	(add_regex): Manage the regexp modifiers.
+	(regex_tag_multiline): New function.  Reads from filebuf.
+	(readline_internal): If necessary, copy the whole file into filebuf.
+	(readline): Skip multi-line regexps, leave them to regex_tag_multiline.
+
+2002-06-11  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (add_regex): Better check for null regexps.
+	(readline): Check for regex matching null string.
+
+2002-06-07  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (find_entries): Reorganisation.
+
+2002-06-07  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (scan_separators): Support all character escape
+	sequences supported by gcc.
+	(find_entries): rewind unconditionally.
+	(find_entries): Do not call language functions directly, now calls
+	itself.
+	(find_entries): Do general initialisations here.
+	(CNL_SAVE_DEFINEDEF, C_entries, LOOP_ON_INPUT_LINES, F_getit)
+	(Ada_getit, Pascal_functions, Pascal_functions)
+	(prolog_skip_comment): Do not do them here.
+	(readline_internal): Increment lineno here.
+	(readline): Conditionally undo readline_internal increment.
+	(readline): Do not return a value.
+
+2002-06-06  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (enum arg_type): New label at_stdin.
+	(STDIN): New constant.
+	(parsing_stdin): New flag.
+	(longopts): New option --parse-stdin=NAME.
+	(print_help): Document it.
+	(main): Handle it.
+	(process_file): Split into process_file and process_file_name.
+	(process_file_name): New function.
+
+2002-06-06  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (main): Avoid a buffer overrun with sprintf.
+	(TEX_cmt): Make it a static char and move it before TeX_commands.
+	(TeX_commands): Skip comments.
+	(TEX_defenv): Now contains more contructs.
+	(TeX_commands): Shorten the tag to the brace after the name.
+	(TeX_commands): Allow for names with embedded spaces.
+	(TeX_commands): Names now include the initial backslash.
+	(TeX_commands): Names do not include numeric args #n.
+	(TeX_commands): Correct line char number in tags.
+	(TEX_tabent, TEX_token): Deleted.
+	(TeX_commands, TEX_decode_env): Streamlined.
+
+2002-05-31  Paul Eggert  <eggert@twinsun.com>
+
+	* etags.c (main): Use `sort -o TAGFILE TAGFILE' instead of
+	`sort TAGFILE -o TAGFILE', as POSIX 1003.1-2001 disallows
+	the latter usage.
+
+2002-04-22  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: (last_node): Make it a global variable.
+	(process_file): Print the tags from the nodes as soon as
+	possible, and delete the nodes.  This brings down the memory
+	occupancy as etags to almost the same level as when the #line
+	directives were not parsed.
+	(free_fdesc): New function.
+	(find_entries): Use it.
+	(invalidate_nodes): In etags mode, do not just mark the nodes as
+	invalid, do delete them.
+
+2002-04-16  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (find_entries): Bug fix in list management.
+
+2002-04-15  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (get_language_from_filename): Add one argument.
+	(strcaseeq): New function.
+	(get_language_from_filename): Use it to do a case insenstitive
+	comparison if called with appropriate args.
+	(find_entries): Try with case insensitive match.
+	(process_file): Bug fixed.
+
+2002-04-13  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (find_entries): Delete tags previously obtained from
+	file xxx.c's #line directives when parsing file xxx.y.  This is
+	generally done for automatically generated files containing
+	#line directives.  This handles the case when xxx.y is tagged
+	before xxx.c, and the entries of xxx.c pointing to xxx.y should
+	be discarded.
+	(language): Added the metasource member.  Initializers changed.
+	(invalidate_nodes): New function.
+
+2002-03-21  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (readline): Discard lines after having found a #line
+  	directive pointing to an already tagged file.  This handles the
+	case when xxx.y is tagged before xxx.c, and the entries of
+	xxx.c pointing to xxx.y should be discarded.
+
+2002-03-15  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (fdesc): New structure for keeping track of input files.
+	(fdesc): Remove `file' member (a string) and use instead a pointer
+	to a file description structure.
+	(curfile, curfiledir, curtagfname, curlang, nocharno,
+	forced_lang): Global variables removed in favor of fdhead and
+	curfdp, pointers to file description strucures.
+	(longopts, main, print_help): Use the CTAGS conditional to include
+	or exclude options that work on etags or ctags only.
+	(process_file, find_entries, pfnote, add_node, put_entries,
+	readline): Use fdhead and curfdp.
+	(process_file, find_entries): Do not take an arg string, all
+	callers changed.
+
+2002-03-13  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (longopts, print_help, main): Test CTAGS to disallow
+	options that are not right for either etags or ctags.
+
+2002-03-12  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (number_len, total_size_of_entries): Define them also
+	in CTAGS mode, because gcc does not compile all refs away.
+	(Python_functions, PHP_functions): Name tags, for ctags' sake.
+	(TeX_commands): Name tags.  Correction of old disabled code.
+
+2002-03-06  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (Python_functions): Consider indented "def" and "class".
+
+2002-03-05  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (curfiledir, curtagfname): New global variables.
+	(process_file): Initialise them.
+	(readline): Canonicalize the name found in #line directive.
+
+2002-03-05  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: Honour #line directives.
+	(no_line_directive): New global var; set it for old behaviour.
+	(main): Remove some #ifdef in the getopt switch.
+	(add_node, put_entries): Code added to merge different chunks of
+	nodes referring to the same file.  Currently the tags are just
+	appended, without any check for duplicates.
+	(Perl_functions): Do not special case ctags.
+	(readline): Identify #line directives and do the right thing.
+	(nocharno, invalidcharno): New global vars.
+	(process_file): Reset nocharno.
+	(readline): Set nocharno.
+	(pfnote): Read nocharno and maybe put invalidcharno in node.
+	(total_size_of_entries, put_entries): Use invalidcharno.
+
+2002-03-04  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: Keep the whole tag table in memory, even in etags mode.
+	(main): Call put_entries here even in CTAGS mode.
+	(main, process_file): Check the return values of fclose and pclose.
+	(process_file): Do not call put_entries after parsing each file.
+	(process_file): Canonicalise file names even for ctags.
+	(process_file): Set curfile here...
+	(find_entries): ... not here any more.
+	(add_node): In etags mode, build a linked list of entries (on
+	right pointer) for each file, and link the first entry of each
+	file on left nodes.
+	(put_entries): Print here the name of the file.
+	(put_entries): Print the entries starting from the first file.
+	(number_len, total_size_of_entries): Define these only iin etags
+	mode, make the second work only on the right nodes.
+
+2002-01-03  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: Make all global variables static.
+
+2001-12-21  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (Perl_functions): Tag packages and use them in sub tags.
+	(get_tag): Return a pointer to the tag that is found.
+
+2001-12-21  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (LOOKING_AT): Use !intoken instead of iswhite.
+	(F_takeprec): Renamed from takeprec.  All callers changed.
+	(F_getit): Renamed from getit.  All callers changed.
+	(nocase_tail): Renamed from tail.  All callers changed.
+	(Ada_getit): Renamed from adagetit.  All callers changed.
+	(L_getit): Simplified by using get_tag.
+	(Perl_functions, Postscript_functions, erlang_attribute): Use the
+	modified LOOKING_AT.
+	(notinname): Removed '[' and added ')' to the recognised chars.
+	(LOOKING_AT, get_tag, PHP_functions): Use notinname.
+	(Ada_getit, Ada_funcs, Python_functions, Scheme_functions):
+	Clarified, using strneq or notinname.
+	(L_isdef, L_isquote): Removed.
+	(Lisp_functions, L_getit): Clarified.
+
+2001-12-17  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: [P_]: Renamed to __P for consistency with config.h.
+	[HAVE_CONFIG_H]: Let config.h deal with __P.
+	[__STDC__] [!HAVE_CONFIG_H]: Define PTR as in config.h.
+	[!__STDC__] [!HAVE_CONFIG_H]: Do not undefine static, because
+	gperf code needs it.
+	[HAVE_CONFIG_H] [!PTR]: Define PTR (for use with Xemacs).
+	[HAVE_CONFIG_H] [!__P]: Define __P (for use with Xemacs).
+	(xmalloc, xrealloc): Use PTR instead of long *.
+	(bool): Make it a define, not a typedef, for C++ compilers.
+	(pattern): Members renamed to avoid name clash in some C++ compilers.
+	(get_language_from_langname): Use const argument.
+
+2001-12-12  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (PHP_functions): New function by Diez B. Roggisch,
+	heavily adapted by me, for parsing PHP.
+	(LOOKING_AT): New macro.
+	(Perl_functions, Python_functions, PHP_functions)
+	(Scheme_functions, Texinfo_nodes): Use it.
+	(Perl_functions): Use strneq.
+	(prolog_pred): Renamed to prolog_pr.
+	(prolog_pr): Recognise Prolog rules (thanks to Geert Kloosterman)
+	in addition to predicates.
+	[ETAGS_REGEXPS] [!HAVE_CONFIG_H] [__CYGWIN__]: Prevent
+	unmodified compile, as Cygwin's regex.h is incompatible with us
+	(thanks to Markus Hoenicka).
+	[!HAVE_CONFIG_H] [!__STDC__]: #define const as the empty string.
+
+2001-05-11  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (add_regex): Reset the whole newly allocated pattern
+	buffer instead of the individual members.  It's safer and works
+	with Xemacs.
+
+2001-02-23  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (enum sym_type): New label st_C_template.
+	(gperf input): Use it for switching to C++ from C.
+	(consider_token): Do it.
+
+2001-02-16  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (C_entries): Initialise typdefcblev to quiet compilers.
+
+2001-02-06  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c [!HAVE_CONFIG_H] [!__STDC__]: #define static as nothing.
+
+2001-01-31  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: [NDEBUG] #undef assert and #define it as ((void)0), for
+	the sake of some buggy assert.h (e.g. in MinGW and sunos4 pcc).
+	(C_entries): Tag token renamed to still_in_token because sunos4
+	pcc wants to expand it as the token() macro even though it has no
+	arguments.
+
+2001-01-30  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: [WIN32-NATIVE]: #undef MSDOS, #undef WINDOWSNT and
+	#define it for the sake of Xemacs.
+	[WINDOWSNT]: #undef HAVE_NTGUI even if built without
+	HAVE_CONFIG_H.  This change only affects a standalone etags.
+	[WINDOWSNT]: #undef DOS_NT and #define it even if built with
+	HAVE_CONFIG_H.  This change does nothing in Emacs, as DOS_NT is
+	always defined when HAVE_CONFIG_H and WINDOWS are both defined.
+	[!HAVE_UNISTD_H]: use defined(WINDOWSNT) instead of the bare
+	WINDOWSNT, as this is the correct way to use it.
+
+2001-01-28  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c: Be capable to parse nested struct-like structures.
+	(structdef, structtag): Struct state machine revisited.
+	(struct tok): Revisited.
+	(cstack, nestlev, instruct): New struct and macros.
+	(pushclass_above, popclass_above, write_classname): New functions
+	for dealing with nested class names, inspired by Mykola Dzyuba.
+	(consider_token, make_C_tag, C_entries): Many changes for dealing
+	with arbitrarily nested structures.
+	(etags_getcwd): #if MSDOS, not #ifdef MSDOS!
+	(C_entries): Consider templates in C++.
+	(sym_type): New constant st_C_class for detecting "class" also in
+	C mode.
+	(C_AUTO): New macro for automatic detection of C++.
+	(consider_token): Automatic set C++ mode.
+	(C_entries): New security check for yacc.
+	(print_language_names, print_help): Mention the autodetect
+	feature, do not show help for the -C option, now mostly	useless.
+	(C_entries): Tag C++ forward declarations if --declarations.
+	(C_entries): Don't be fooled by things like XDEFUN.
+	(consider_token): Discard asm pseudo function.
+
+2001-01-25  Francesco Potorti`  <pot@potorti.it>
+
+	* etags.c (struct tok): Renamed from struct token.
+	(token): Renamed from tok.
+	(structtype): Make it a local variable.
+	[DEBUG]: Use assert.
+	(xrnew): Change the synopsis.
+	(typedefs_or_cplusplus): Renamed from typedefs_and_cplusplus.
+	(grow_linebuffer): Don't call xrnew when not needed.
+	(token): buffer renamed to line.
+	(C_entries): Three calls to inibuffer moved here from main.
+	(C_entries): Removed all references to var methodlen, delete it.
+	(linebuffer_setlen): Was grow_buffer, now also sets len.
+	(consider_token, C_entries, Pascal_functions): Use it.
+	(C_entries): Preventing problems relative to extern "C".
+	(C_entries): Can tag more than one variable or func separated by
+	comma when --declarations is used.
+	(C_entries): More accurate tagging of members and declarations.
+	(yacc_rules): Was global, made local to C_entries.
+	(next_token_is_func): Removed.
+	(fvdef): New constants fdefunkey, fdefunname.
+	(consider_token, C_entries): Use them.
+	(C_entries): Build proper lisp names for Emacs DEFUNs.
+
+2001-01-15  Francesco Potorti`  <pot@pot.cnuce.cnr.it>
+
+	* etags.c (print_language_names): Print filenames in addition to
+	suffixes.
+
+2001-01-12  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (get_language_from_langname): Renamed from
+	get_language_from_name.
+	(get_language_from_filename): Renamed from
+	get_language_from_suffix.  Now first looks for the complete file
+	name.
+	(language): New member char **filenames.
+	(Makefile_filenames): List of possible filenames for makefiles.
+	(lang_names): Added a NULL member for every entry, added an entry
+	for makefiles.
+	(Makefile_targets): New function, inspired by Assar Westerlund
+	<assar@sics.se>.
+
+2000-11-07  Francesco Potortì  <pot@pot.cnuce.cnr.it>
+
+	* etags.c (Texinfo_nodes): Renamed from Texinfo_fuctions and made
+	it conformant to the style of the rest of the code.
+
+2000-02-10  Francesco Potorti`  <pot@gnu.org>
+
+	* etags.c (iswhite): Redefined not to consider '\0' as white
+	space, and use it throughout in place of isspace, thus preventing a
+	potential signed char to int conversion problem.
+	(MSDOS): #undefine befere redefining
+
+2000-02-04  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (many functions): Add prototypes.
+
+2000-01-31  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c [MSDOS]: Set MSDOS to 1 if #defined, 0 otherwise.
+	(get_compressor_from_suffix, process_file): Use MSDOS in if clause.
+	(etags_strchr, etags_strrchr): Use const char * and int as arguments.
+	(getenv, getcwd): Only declare them if necessary.
+	(EMACS_NAME): New constant macro.
+	(print_version): Use it.
+	(P_) [__STDC__]: Macro for defining function prototypes.
+
+2000-01-18  Fabrice Popineau  <Fabrice.Popineau@supelec.fr>
+
+	* etags.c [WINDOWSNT]: #include <direct.h>
+
+2000-01-18  Martin Buchholz  <martin@xemacs.org>
+
+	* etags.c (all functions): Made them static.
+	(all functions): Write prototypes.
+
+1999-11-19  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (_GNU_SOURCE): Define only if undefined.
+	(get_scheme): Declaration deleted.
+	(main): error was called with an integer as second arg, instead of
+	a char pointer.
+	(canonicalize_filename): Bug removed.
+
+1999-11-18  Dave Love  <d.love@dl.ac.uk>
+
+	* etags.c (C_entries): Rename label `intoken', avoiding K&R
+	lossage from name clash with macro.
+
+1999-09-14  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c: Add suffix psw for PSWrap.
+	(L_getit): Generalize a "cp!=' '" into "!isspace(*cp)".
+	(Postscript_functions): Add code for PSWrap.
+	(Scheme_functions): Use local pointer and new get_tag function.
+	(get_tag): New name for old get_scheme.
+	(process_file): Do not free NULL when file does not exist.
+	(typdef): ttypedefseen renamed to tkeyseen, new label ttypeseen.
+	(C_entries): Modifications that make --members tag even inside
+	typedefs and C nested structs (one level only).
+	(consider_token): Corrected a bug which prevented tagging of enum
+	constants.
+	(C_stab_entry): Added if, for, while, switch, return as
+	st_C_ignore.  This makes it simpler to work when cblev!=0.
+
+1999-04-21  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (C_entries): tag member function declarations when
+	--declarations is used.
+
+1999-04-20  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (C_entries, consider_token): C++ `operator' now is
+	tagged in most cases.
+	As before, :: is not recognised if surrounded by spaces.
+
+1999-01-14  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (relative_filename): Account for DOS file names such
+	that is impossible to make one relative to another.
+
+1998-10-09  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (sym_type): New st_C_extern tag.
+	(gperf input): Use it for spotting external declarations.
+	(print_help): Document the new behaviour of --declarations.
+	(fvextern): New global variable.
+	(consider_token, C_entries): Use it.
+
+1998-06-19  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (HAVE_GETCWD) [WINDOWSNT]: Define if undefined.
+	(etags_getcwd): Remove test for WINDOWSNT.
+
+1998-06-16  Eli Zaretskii  <eliz@is.elta.co.il>
+
+	* etags.c (process_file) [MSDOS]: If foo.c.gz is not found, try
+	foo.cgz, foo.cz, etc.
+
+1998-06-15  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (declarations): New global switch.
+	(longopts): Describe it.
+	(print_help): Document it.
+	(C_entries): Use it.
+	(process_file): Don't process a file twice.
+
+1998-06-02  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (Fortran_functions): No tags for "procedure".
+
+1998-05-29  Eli Zaretskii  <eliz@is.elta.co.il>
+
+	* etags.c (get_compressor_from_suffix): Second argument EXTPTR, if
+	non-zero, returns a pointer to where the extension begins; callers
+	changed.
+	[MSDOS]: Support DOS file names by handling e.g. foo.cgz as if it
+	were foo.c.gz.
+
+1998-05-18  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (sym_type, C_stab_entry): New constant st_C_operator.
+	(fvdev): New constant foperator.
+	(consider_token): Use it to get "operator" in C++.
+	(C_entries): Extend length of operator@ function name.
+	(C_entries): Use foperator when necessary.
+
+1998-05-13  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (main) [!ETAGS_REGEXPS]: Do not call free_patterns.
+
+1998-05-12  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (compressor): New struct for compressed files.
+	(get_compressor_from_suffix): New function.
+	(get_language_from_suffix): Use it.  Also, semantics changed.
+	(process_file): Consider compressed files, close file.
+	(find_entries): Use different call arg for get_language_from_suffix,
+	don't close file.
+
+1998-05-11  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (main): Call free_tree.
+	(find_entries): Do not free curfile.
+	(pfnote): Cosmetic change: NULL and '\0' where appropriate.
+	(prolog_pred, erlang_func, substitute): Cast strlen to int when
+	comparing.
+	(canonicalize_filename): Shut up compiler warning.
+	(Perl_functions): Make tag significant.
+
+1997-11-27  Dave Love  <d.love@dl.ac.uk>
+
+	* etags.c (longopts, optstring): New option --ignore-case-regex (-c).
+	(argument_type): New member at_icregexp.
+	(lc_trans): New global.
+	(main): Fill lc_trans.  Process -c args.
+	(add_regex): New arg determining whether to use translation table.
+	(analyse_regex): New arg.  Use it for add_regex.
+
+1997-09-30  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (init): Cosmetic change: NULL --> '\0'.
+	(erlang_attribute): Bug corrected (uninitialized variable).
+	(filename_is_absolute): New function replaces absolutefn macro and
+ 	corrects a bug.  All callers changed.
+	(canonicalize_filename): New function.
+	(process_file, etags_getcwd, absolute_dirname): Use it.
+	(relative_filename, absolute_filename): Removed var shadowing.
+	(C_entries, Pascal_functions): Add fake initializations to keep
+ 	compilers quiet.
+	(TeX_functions, Prolog_functions, Erlang_functions): Cleanup.
+
+1997-09-20  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (xrnew): New macro.  All callers of xrealloc changed.
+	(language): New typedef (was struct lang_entry).
+	(curlang): New global variable.
+	(node): typedef renamed from NODE.
+	(linebuffer): New typedef (was struct linebuffer).
+	(pattern): New typedef (was struct pattern).  Some members added.
+	Now used as element of a linked list.
+	(patterns, num_patterns): Global variables deleted.
+	(p_head): New global variable.
+	(forced_lang):  New global variable (replaces lang_func).
+	(get_language_from_name, get_language_from_interpreter,
+	get_language_from_suffix): Semantics changed.  All callers changed.
+	(last_node): New global variable.
+	(free_tree, add_node, put_entries, total_size_of_entries): Change
+	name of local vars to avoid clashes with typedef node.
+	(number_len): Rewritten for elegance.
+	(token): New typedef replaces TOKEN.
+	(analyse_regex, add_regex): Rewritten for new functionality.
+	(free_patterns): New function called from main and add_regex.
+	(initbuffer, readline_internal, readline, grow_linebuffer):
+	Change name of local vars to avoid clashes with typedef
+	linebuffer.
+	(readline): Rewritten for new functionality.
+
+1997-09-04  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c: (Scheme_suffixes): New suffix ".ss".
+	(print_help): --globals is now used for more than C-type languages.
+	(Perl_functions): Tag global variables ("my" and "local").
+
+1997-08-22  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (print_help): Some messages clarified.
+	(LOOP_ON_INPUT_LINES): New macro.
+	(just_read_file, Fortran_functions, Asm_labels, Perl_functions,
+	Python_functions, Cobol_paragraphs, Pascal_functions,
+	Lisp_functions, Postscript_functions, Scheme_functions,
+	TeX_functions, Prolog_functions, Erlang_functions): Use it.
+	(Cobol_paragraphs, Postscript_functions, TeX_functions,
+	Prolog_functions, Erlang_functions): Use a local variable instead
+	of the global variable dbp.
+	(Pascal_functions, L_isquote, Scheme_functions): Use GNU coding
+	standard indentation.
+
+1997-08-21  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (Python_suffixes, lang_names, Python_functions): Python
+	support.
+	(skip_spaces, skip_non_spaces): Utility functions.
+	(find_entries, takeprec, getit, Fortran_functions, Perl_functions,
+	Python_functions, L_getit, Lisp_functions, Scheme_functions,
+	prolog_pred, erlanf_func, erlang_attribute): Use them.
+	(eat_white): Deleted.
+
+1997-08-20  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (CHAR, init): Keep into account non US-ASCII
+	characters and compilers with default signed chars.
+	(L_getit): Tag "(defstruct (foo", "(defun (operator" and similar
+	constructs.
+
+1997-07-04  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* (C_stab_entry): "interface" in Java behaves like "class".
+
+1997-06-23  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c: (HAVE_NTGUI) [WINDOWSNT]: #undef if HAVE_CONFIG_H.
+	(main): Put interval syntax here.
+	(add_regex): And remove it from here.
+
+1997-06-17  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c (suggest_asking_for_help): Provide a
+	meaningful help message with and without LONG_OPTIONS.
+
+1997-06-09  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c: <io.h> [MSDOS]: Include it, don't include string.h.
+	<stdlib.h, string.h>: Don't test MSDOS when including them.
+	(white, nonam, endtk): Like elsewhere, use \r instead of \013.
+	(put_entries): Correctly use %ld instead of %d in printf.
+
+1997-06-04  Francesco Potorti`  <F.Potorti@cnuce.cnr.it>
+
+	* etags.c: <unistd.h> [HAVE_UNISTD_H]: Include conditionally, else
+	declare getcwd if HAVE_GETCWD.
+	(consider_token): Dead break instruction removed.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/ETAGS.README	Mon May 21 03:50:19 2007 +0000
@@ -0,0 +1,49 @@
+etags is distributed under the following conditions:
+
+
+Copyright (C) 1984 The Regents of the University of California
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+3. Neither the name of the University nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, 1998, 1999,
+  2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+  Free Software Foundation, Inc.
+
+This file is not considered part of GNU Emacs.
+
+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 of the License, 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.
--- a/etc/etags.1	Sun May 20 21:51:21 2007 +0000
+++ b/etc/etags.1	Mon May 21 03:50:19 2007 +0000
@@ -21,7 +21,7 @@
 [\|\-\-append\|] [\|\-\-no\-defines\|]
 [\|\-\-no\-globals\|] [\|\-\-include=\fIfile\fP\|]
 [\|\-\-ignore\-indentation\|] [\|\-\-language=\fIlanguage\fP\|]
-[\|\-\-members\|] [\|\-\-output=\fItagfile\fP\|]
+[\|\-\-no\-members\|] [\|\-\-output=\fItagfile\fP\|]
 [\|\-\-regex=\fIregexp\fP\|] [\|\-\-no\-regex\|]
 [\|\-\-help\|] [\|\-\-version\|]
 \fIfile\fP .\|.\|.
@@ -135,10 +135,10 @@
 .TP
 .B \-\-members
 Create tag entries for variables that are members of structure-like
-constructs in C++, Objective C, Java.
+constructs in C++, Objective C, Java.  This is the default for etags.
 .TP
 .B \-\-no\-members
-Do not tag member variables.  This is the default behavior.
+Do not tag member variables.  This is the default for ctags.
 .TP
 .B \-\-packages\-only
 Only tag packages in Ada files.
@@ -224,7 +224,7 @@
 
 .br
 A regexp can be preceded by {\fIlang\fP}, thus restricting it to match
-lines of files of the specified language.  Use \fBetags --help\fP to obtain
+lines of files of the specified language.  Use \fBetags \-\-help\fP to obtain
 a list of the recognised languages.  This feature is particularly useful inside
 \fBregex files\fP.  A regex file contains one regex per line.  Empty lines,
 and those lines beginning with space or tab are ignored.  Lines beginning
--- a/lib-src/Makefile.in.in	Sun May 20 21:51:21 2007 +0000
+++ b/lib-src/Makefile.in.in	Mon May 21 03:50:19 2007 +0000
@@ -42,6 +42,7 @@
 ALLOCA=@ALLOCA@
 LN_S=@LN_S@
 version=@version@
+etags_xemacs_version=@verbose_version@
 
 ## This will be the name of the generated binary and is set automatically
 ## by configure.
@@ -309,7 +310,7 @@
 	$(CC) -c $(cflags) \
 	-DINHIBIT_STRING_HEADER ${top_srcdir}/src/regex.c
 
-etags_args = $(cflags) -DEMACS_NAME='"XEmacs"' -DVERSION='"${version}"' \
+etags_args = $(cflags) -DEMACS_NAME='"XEmacs"' -DVERSION='"${etags_xemacs_version}"' \
 	${srcdir}/etags.c $(GETOPTOBJS) regex.o $(ldflags)
 etags_deps = ${srcdir}/etags.c $(GETOPTDEPS) regex.o ../src/config.h
 
@@ -322,6 +323,7 @@
 ellcc: ${ellcc_deps}
 	$(CC) ${ellcc_args} -o $@
 
+## #### we should probably do the same as for pot's etags
 ootags_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/ootags.c \
 	$(GETOPTOBJS) regex.o $(ldflags)
 ootags_deps = ${srcdir}/ootags.c $(GETOPTDEPS) regex.o ../src/config.h
--- a/lib-src/etags.c	Sun May 20 21:51:21 2007 +0000
+++ b/lib-src/etags.c	Mon May 21 03:50:19 2007 +0000
@@ -1,30 +1,69 @@
 /* Tags file maker to go with GNU Emacs           -*- coding: latin-1 -*-
-   Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995,
-                 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-                 2005, 2006 Free Software Foundation, Inc. and Ken Arnold
-
- This file is not considered part of GNU Emacs.
-
- 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 of the License, 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. */
+
+Copyright (C) 1984 The Regents of the University of California
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+3. Neither the name of the University nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, 1998, 1999,
+  2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+  Free Software Foundation, Inc.
+
+This file is not considered part of GNU Emacs.
+
+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 of the License, 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. */
+
+
+/* NB To comply with the above BSD license, copyright information is
+reproduced in etc/ETAGS.README.  That file should be updated when the
+above notices are.
+
+To the best of our knowledge, this code was originally based on the
+ctags.c distributed with BSD4.2, which was copyrighted by the
+University of California, as described above. */
+
 
 /*
  * Authors:
- *	Ctags originally by Ken Arnold.
- *	Fortran added by Jim Kleckner.
- *	Ed Pelegri-Llopart added C typedefs.
- *	Gnu Emacs TAGS format and modifications by RMS?
+ * 1983	Ctags originally by Ken Arnold.
+ * 1984	Fortran added by Jim Kleckner.
+ * 1984	Ed Pelegri-Llopart added C typedefs.
+ * 1985	Emacs TAGS format by Richard Stallman.
  * 1989	Sam Kendall added C++.
  * 1992 Joseph B. Wells improved C and C++ parsing.
  * 1993	Francesco Potortì reorganised C and C++.
@@ -41,7 +80,7 @@
  * configuration file containing regexp definitions for etags.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 17.26";
+char pot_etags_version[] = "@(#) pot revision number is 17.32";
 
 #define	TRUE	1
 #define	FALSE	0
@@ -120,7 +159,14 @@
 #  include <stdlib.h>
 #  include <string.h>
 # else /* no standard C headers */
-    extern char *getenv ();
+   extern char *getenv ();
+   extern char *strcpy ();
+   extern char *strncpy ();
+   extern char *strcat ();
+   extern char *strncat ();
+   extern unsigned long strlen ();
+   extern PTR malloc ();
+   extern PTR realloc ();
 #  ifdef VMS
 #   define EXIT_SUCCESS	1
 #   define EXIT_FAILURE	0
@@ -444,7 +490,7 @@
   *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
 
 static bool append_to_tagfile;	/* -a: append to tags */
-/* The next four default to TRUE for etags, but to FALSE for ctags.  */
+/* The next five default to TRUE for etags, but to FALSE for ctags.  */
 static bool typedefs;		/* -t: create tags for C and Ada typedefs */
 static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */
 				/* 0 struct/enum/union decls, and C++ */
@@ -453,8 +499,8 @@
 				/* constants and variables. */
 				/* -D: opposite of -d.  Default under ctags. */
 static bool globals;		/* create tags for global variables */
+static bool members;		/* create tags for C member variables */
 static bool declarations;	/* --declarations: tag them and extern in C&Co*/
-static bool members;		/* create tags for C member variables */
 static bool no_line_directive;	/* ignore #line directives (undocumented) */
 static bool no_duplicates;	/* no duplicate tags for ctags (undocumented) */
 static bool update;		/* -u: update tags */
@@ -577,10 +623,11 @@
 definitions of `struct', `union' and `enum'.  `#define' macro\n\
 definitions and `enum' constants are tags unless you specify\n\
 `--no-defines'.  Global variables are tags unless you specify\n\
-`--no-globals'.  Use of `--no-globals' and `--no-defines'\n\
-can make the tags table file much smaller.\n\
+`--no-globals' and so are struct members unless you specify\n\
+`--no-members'.  Use of `--no-globals', `--no-defines' and\n\
+`--no-members' can make the tags table file much smaller.\n\
 You can tag function declarations and external variables by\n\
-using `--declarations', and struct members by using `--members'.";
+using `--declarations'.";
 
 static char *Cplusplus_suffixes [] =
   { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx",
@@ -590,8 +637,8 @@
 static char Cplusplus_help [] =
 "In C++ code, all the tag constructs of C code are tagged.  (Use\n\
 --help --lang=c --lang=c++ for full help.)\n\
-In addition to C tags, member functions are also recognized, and\n\
-optionally member variables if you use the `--members' option.\n\
+In addition to C tags, member functions are also recognized.  Member\n\
+variables are recognized unless you use the `--no-members' option.\n\
 Tags for variables and functions in classes are named `CLASS::VARIABLE'\n\
 and `CLASS::FUNCTION'.  `operator' definitions have tag names like\n\
 `operator+'.";
@@ -686,8 +733,8 @@
 static char *PHP_suffixes [] =
   { "php", "php3", "php4", NULL };
 static char PHP_help [] =
-"In PHP code, tags are functions, classes and defines.  When using\n\
-the `--members' option, vars are tags too.";
+"In PHP code, tags are functions, classes and defines.  Unless you use\n\
+the `--no-members' option, vars are tags too.";
 
 static char *plain_C_suffixes [] =
   { "pc",			/* Pro*C file */
@@ -834,25 +881,15 @@
 #ifndef EMACS_NAME
 # define EMACS_NAME "standalone"
 #endif
-#ifdef EMACS_VERSION
-# ifdef XEMACS_EXTRA_NAME
-#  define E_VERSION EMACS_VERSION " " XEMACS_EXTRA_NAME
-# else
-#  define E_VERSION EMACS_VERSION
-# endif
-#elif defined(VERSION)
-# define E_VERSION VERSION
-#else
-# define E_VERSION "version"
+#ifndef VERSION
+# define VERSION "17.32"
 #endif
-
 static void
 print_version ()
 {
-  printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, E_VERSION);
-  puts (pot_etags_version);
-  puts ("Copyright (C) 2006 Free Software Foundation, Inc. and Ken Arnold");
-  puts ("This program is distributed under the same terms as Emacs");
+  printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION);
+  puts ("Copyright (C) 2007 Free Software Foundation, Inc.");
+  puts ("This program is distributed under the terms in ETAGS.README");
 
   exit (EXIT_SUCCESS);
 }
@@ -939,8 +976,13 @@
     puts ("--no-globals\n\
 	Do not create tag entries for global variables in some\n\
 	languages.  This makes the tags file smaller.");
-  puts ("--members\n\
+  if (CTAGS)
+    puts ("--members\n\
 	Create tag entries for members of structures in some languages.");
+  else
+    puts ("--no-members\n\
+	Do not create tag entries for members of structures\n\
+	in some languages.");
 
   puts ("-r REGEXP, --regex=REGEXP or --regex=@regexfile\n\
         Make a tag for each line matching a regular expression pattern\n\
@@ -988,7 +1030,7 @@
         Print on the standard output an index of items intended for\n\
         human consumption, similar to the output of vgrind.  The index\n\
         is sorted, and gives the page number of each item.");
-# ifdef PRINT_UNDOCUMENTED_OPTIONS_HELP
+# if PRINT_UNDOCUMENTED_OPTIONS_HELP
       puts ("-w, --no-duplicates\n\
         Do not create duplicate tag entries, for compatibility with\n\
 	traditional ctags.");
@@ -1178,13 +1220,13 @@
 
   /*
    * If etags, always find typedefs and structure tags.  Why not?
-   * Also default to find macro constants, enum constants and
-   * global variables.
+   * Also default to find macro constants, enum constants, struct
+   * members and global variables.
    */
   if (!CTAGS)
     {
       typedefs = typedefs_or_cplusplus = constantypedefs = TRUE;
-      globals = TRUE;
+      globals = members = TRUE;
     }
 
   /* When the optstring begins with a '-' getopt_long does not rearrange the
@@ -3366,17 +3408,15 @@
 	case '/':
 	  if (*lp == '*')
 	    {
+	      incomm = TRUE;
 	      lp++;
-	      incomm = TRUE;
-	      continue;
+	      c = ' ';
 	    }
 	  else if (/* cplpl && */ *lp == '/')
 	    {
 	      c = '\0';
-	      break;
 	    }
-	  else
-	    break;
+	  break;
 	case '%':
 	  if ((c_ext & YACC) && *lp == '%')
 	    {
@@ -6904,6 +6944,7 @@
  * tab-width: 8
  * fill-column: 79
  * c-font-lock-extra-types: ("FILE" "bool" "language" "linebuffer" "fdesc" "node" "regexp")
+ * c-file-style: "gnu"
  * End:
  */