ANNOUNCE

Announcing: Exuberant Ctags
Author    : Darren Hiebert

This is to announce the availability of a new version my new, better ctags
utility. I am quite pleased with it, and others who have used it have been
very enthusiastic about the greater reliability and functionality it
provides.

You can find it at any of:

	http://fly.hiwaay.net/~darren/ctags.html (Web site)
	ftp://sunsite.unc.edu/pub/Linux/devel/lang/c/ctags-1.5.tar.gz
	ftp://ftp.halcyon.com/local/gvr/ctags-1.5.tar.gz

What makes this ctags desirable?

1.  It can find *all* types of C language tags, including all of the
    following:

            macro definitions
            enumerated values (values inside enum{...})
            function and method definitions
            enum/struct/union tags
            external function prototypes (optional)
            typedefs
            variable declarations

2.  It is far less easily fooled by code containing #if preprocessor
    conditional constructs, using a conditional path selection algorithm to
    resolve complicated choices, and a fall-back algorithm when this one
    fails.

3.  Can also be used to print out a list of selected objects found in source
    files.

4.  Supports UNIX, MSDOS, WindowsNT, Windows95, OS/2 and the Amiga. In some
    cases, you may need to play with the include files, depending upon you
    compiler. Some pre-compiled binaries may become available on the web
    site.

I wrote this because of my disappointment with the other ctags utilities
that are available. However, it does have a couple of minor limitations (you
be the judge):

1.  Support for C++ is limited.
2.  Supports only C; not Lisp, shell scripts, or anything else you might
    think of.


README

Exuberant Ctags
===============
Author: Darren Hiebert (darren@sirsi.com, darren@hiwaay.net,
			http://fly.hiwaay.net/~darren)

This source code is released into the public domain. It is provided on an
as-is basis and no responsibility is accepted for its failure to perform
as expected. It is worth at least as much as you paid for it!

[The source code for ctags can be found in src/ctags]

This is a reimplementation of the underused ctags(1) program and is intended
to be the mother of all ctags programs 8^). I was motivated to write this
because no currently available ctags program supported generation of tags for
all possible tag candidates, and because most were easily fooled by a number
of contructs. I am quite pleased with the result. It provides the following
features:

    Able to generate tags for all of the following objects:
	- macro definitions
	- enumeration values (those inside enum{...})
	- function definitions (and some C++ methods)
	- function prototypes (optional; intended for library header files)
	- enum, struct and union tags and C++ class names
	- typedefs
	- global variables

    Supports for both K&R style and new ANSI style function definitions.

    It is very robust in parsing C code and is extremely hard to fool, even
    with conditional preprocessor contructs.

Which brings us to the most frequently asked question:

  Q: Why is it called "Exuberant" ctags?
  A: Because one of the meanings of the word is:

    exuberant : produced in extreme abundance : PLENTIFUL syn see PROFUSE

Compare the tag file produced by Exuberant Ctags with that produced by any
other ctags and you will see how appropriate the name is.

Exuberant Ctags is derived from and inspired by the ctags program by Steve
Kirkendall (kirkenda@cs.pdx.edu) that comes with the Elvis vi clone (though
almost none of the original code remains). This, too, was freely available.

Please report any problems you find. The two problems I expect to be most
likely are either a tag which you expected but is missing, or a tag created
in error (shouldn't really be a tag). Please include a sample of code (the
definition) for the object which misbehaves.
