home *** CD-ROM | disk | FTP | other *** search
- C Cross Referencing & Documenting tool. Version 1.4a - cxref
- ============================================================
-
- A program that can automatically generate documentation and cross references for
- a C program.
-
- The input is any C program with appropriate comments and the output is LaTeX or
- HTML files.
-
- --------------------------------------------------------------------------------
- ------------------------------- Program Options --------------------------------
- --------------------------------------------------------------------------------
-
- The name of the program is cxref.
-
- Usage: cxref filename [ ... filename]
- [-Odirname] [-Nbasename] [-Rdirname]
- [-all-comments] [-no-comments]
- [-verbatim-comments] [-block-comments]
- [-xref[-all][-file][-func][-var][-type]]
- [-warn[-all][-comment][-xref]]
- [-index[-all][-file][-func][-var][-type]]
- [-raw]
- [-latex|-latex2e]
- [-html]
- [-Idirname] [-Ddefine] [-Udefine]
- [-CPP cpp_program] [-- cpp_arg [ ... cpp_arg]]
-
- Usage: cxref filename [ ... filename] -delete
- [-Odirname] [-Nbasename] [-Rdirname]
-
-
- filename The name of the file to document, any number of files may be
- documented at a time.
-
- -delete The files named are to be deleted from the output directory and
- their entries in the cross reference database and main output
- files are to be removed.
-
- -Odirname The name of a directory to use for the output latex files and
- the location of the cross reference files that are created.
-
- -Nbasename The name to use for the first part of the output and cross
- reference files instead of cxref, the file extensions remain
- the same.
-
- -Rdirname When the source files are in more than one directory, set
- dirname to the name of the root directory of the source tree
- (use relative path if easier e.g. `-R../..'). This will then
- run cxref from that root directory and the `-Odirname' must be
- relative to that directory.
-
- -all-comments In case you think that the existing comments might work,
- (see below for description of special comments).
- [Danger! This option can produce weird results.]
-
- -no-comments Ignores all comments, useful if you just want the cross
- references and not the documentation.
-
- -verbatim-comments When the comments that you have in the code are formatted
- in a predetermined style that you want to preserve on the
- output, this option will force them not to be reformatted.
- [Note, this is for file and function comments only.]
-
- -block-comments When the comments in the program are formatted in the `block'
- style (with a leading `*' character on every line), this option
- will remove that character from the output.
- [Works for a single `*', `+', `|' or `:' on each line.]
-
- -xref Produce cross referencing information (see below).
- -all All cross references.
- -file Cross references for files.
- -func Cross references for functions.
- -var Cross references for variables.
- -type Cross references for types.
-
- -warn Produce warnings, the options must be concatenated together:
- -all All warnings.
- -comment Warn of missing comments.
- -xref Warn of missing cross references.
-
- -index Produce a cross reference index, the options must be
- concatenated together:
- -all All indexes.
- -file Index of files.
- -func Index of functions.
- -var Index of variables.
- -type Index of types.
-
- -raw Produce a raw form of output, not really of much use except
- with -warn.
-
- -latex Produce a LaTeX file to document each of the source files and
- also an extra file that includes each of these files.
- -latex2e Produce the LaTeX file described above for use with the
- LaTeX2e version of LaTeX.
-
- -html Produce an HTML file to document each of the source files and
- a main file to reference each of these files.
-
- -Idirname GCC option to specify the path for include files.
- -Ddefine GCC option to define a pre-processor symbol.
- -Udefine GCC option to undefine a pre-processor symbol.
-
- -CPP program The name of the program to use instead of the compile time
- default. The program must be able to perform all of the actions
- that `gcc -E -C -dD' does to work. If the program takes
- arguments then the whole thing needs to be in quotes so that it
- is interpreted as a single argument to cxref.
-
- -- arg ... arg Extra arguments to be passed to the pre-processor can be placed
- after the `--' separator.
-
- --------------------------------------------------------------------------------
- ----------------------- C Compiler Replacement cxref-cc ------------------------
- --------------------------------------------------------------------------------
-
- To simplify using cxref on existing source code, there is now a shell script
- that will call the C compiler and then call cxref to process the source file.
- This means that it can be used as a drop in replacement for CC in Makefiles and
- the like.
-
- Usage: cxref-cc [usual cc options]
-
- The name of the source file is extracted from the list of options as well as the
- `-D*', `-I*', `-U*' flags and when the C compiler exits succesfully cxref will
- be called. The name of the C compiler to use is controlled by the CXREFCC
- environment variable, or if this is not set then the CC environment variable, or
- failing this just gcc.
-
- Using this script requires the use of a `.cxref' configuration file to contain
- the options since there is nowhere to put the options on the command line for
- the C compiler.
-
- This will only cross-reference and document the C source files since they are
- the only ones that are compiled, but it will make sure that they are
- cross-referenced with the correct options etc.
-
- --------------------------------------------------------------------------------
- ----------------------- Cxref configuration File .cxref ------------------------
- --------------------------------------------------------------------------------
-
- These command line arguments can also be put into a file named `.cxref' instead
- of on the command line. When cxref is run the arguments to the program are
- interpreted in the following order.
-
- 1) Those on the command line.
- 2) Those in the `.cxref' file in the current directory.
- 3) Those in the `.cxref' file in the source tree root specified by `-R'.
-
- This means that in a multi-directory source tree, each sub-directory can have a
- `.cxref' file containing just the line `-R..' or appropriate. The main
- directory can have a `.cxref' file containing the remainder of the options.
- This removes completely the need to have any options on the command line apart
- from the source file names.
-
- The format of the `.cxref' file is any number of lines, each one containing a
- single command line argument (equivalent to one of the argv). The only options
- that cannot be used are the names of source files themselves and the `-delete'
- option. Blank lines are ignored and lines starting with a '#' are comments.
-
- --------------------------------------------------------------------------------
- ------------------------ Program Documentation Comments ------------------------
- --------------------------------------------------------------------------------
-
- The documentation for the program is produced from comments in the code that are
- appropriately formatted. The cross referencing comes from the code itself and
- requires no extra work.
-
- The special comments are `/**** ****/' (for a file) and `/*++++ ++++*/' (for a
- data object) any number of `*' or `+' can be used inside of the standard `/*'
- and `*/' comment delimiters in the comments, they are ignored.
-
- If a comment line starts with whitespace and is followed by `+html+' then the
- rest of the line is included only in the HTML output, and is not processed so it
- can include HTML markup, `-html-' means that the rest of the line is included in
- all except the HTML output. The same applies to `+latex+' and `-latex-',
- `+none+' can be used for lines not to appear in any output. The exception to
- this is that the raw output does not do any checking and will output all lines.
-
- In any situation where a comment follows a `,', `;' or `)' separated only by
- spaces and tabs, the comment is pushed to before the punctuation to apply to
- object there.
-
- The program is implemented using a full ANSI C grammar parser with some GCC
- extensions, this means that the style of the code is unimportant, only the
- content and comments.
-
- --------------------------------------------------------------------------------
- ------------------------- Automated Comment Insertion --------------------------
- --------------------------------------------------------------------------------
-
- To simplify the insertion of comments that will be parsed by cxref, the file
- cxref.el provides a number of Emacs lisp functions. To use them add the line
- `(load "cxref")' to your `.emacs' file or type `M-x load-file cxref.el' from
- within Emacs.
-
- The functions and key bindings are:
-
- Control-C Control-F - Adds file comments, a /** **/ header at the top of the
- file and if it is a .h file then it also adds a #ifndef,
- #define at the beginning and #endif at the end to stop
- multiple inclusions.
-
- Control-C f - Adds comments to a function, the cursor must be on the
- line containing the start of the function definition when
- this function is called. The /*+ ... +*/ comment that is
- added is of the header type (see the examples) not inline.
-
- Control-C v - Adds a leading comment to the variable or other definition
- on the current line.
-
- Control-C e - Adds a trailing comment at the end of the line.
-
- Control-C i - Adds an inline comment that is ignored by cxref.
-
- --------------------------------------------------------------------------------
- -------------------------------- C Preprocessor --------------------------------
- --------------------------------------------------------------------------------
-
- To improve the output that is available a modified version of the GNU CPP V2.7.2
- is supplied (named cxref-cpp).
-
- This modified C preprocessor allows for a finer control over some features of
- the preprocessing that are not important for a compiler. In a standard
- preprocessor, the preprocessor directives are intended for use only by the
- preprocessor, so passing the information through is not important.
-
- With cxref-cpp, there are two features that are different to the standard GNU
- CPP:
-
- 1) The #include directives from the file are output in the same way as the
- #defines are output. An extra flag has been added to cpp to do this, '-dI',
- it works in the same way as the existing '-dD' flag for #defines.
-
- 2) Comments trailing a #include or a #define are dropped with GNU CPP even if -C
- is used. This is not important while compiling but is useful for documenting.
-
- --------------------------------------------------------------------------------
- ------------------------------ Cross Referencing -------------------------------
- --------------------------------------------------------------------------------
-
- The cross referencing is performed for the following items
-
- Files - The files that the current file is included in
- (even when included via other files).
-
- #includes - Files included in the current file.
- - Files included by these files etc.
-
- Variables - The location of the definition of external variables.
- - The files that have visibility of global variables.
- - The files / functions that use the variable.
-
- Functions - The file that the function is prototyped in.
- - The functions that the function calls.
- - The functions that call the function.
- - The files and functions that reference the function.
- - The variables that are used in the function.
-
- Each of these items is cross referenced in the output.
-
- The cross referencing uses files `cxref.variable', `cxref.function',
- `cxref.include' and `cxref.typedef' in the output directory.
- These are a complete list of the function and variable usage in the program and
- could be used to generate a function call hierarchy or variable usage diagram
- for example.
- Two cxref passes of each file is needed, the first to build up the cross
- referencing files and the second to use them.
-
- (The file names are different if the `-N' option is used.)
-
- --------------------------------------------------------------------------------
- --------------------------------- LaTeX Output ---------------------------------
- --------------------------------------------------------------------------------
-
- The default LaTeX output is a file for each of the source files with one extra
- file `cxref.tex' that includes each of the other files. This is to allow a
- makefile to only update the changed files (although the references may require
- all of the files to be checked again). When the cxref.tex file has been written
- it can be modified by the user, any new files that are added are added at the
- end of the source code section, the rest of the file being unchanged.
-
- The index is written to a file called `cxref.apdx.tex' and cxref.tex is updated
- to refer to it.
-
- Also written out are three LaTeX style files `page.sty', `fonts.sty' and
- `cxref.sty'. These set up the page to use a smaller margin and smaller fonts to
- allow more to appear on a page and also define the new commands for typesetting
- the cxref output.
-
- (The file names `cxref.tex' and `cxref.apdx.tex' are different if the `-N'
- option is used.)
-
- --------------------------------------------------------------------------------
- --------------------------------- HTML Output ----------------------------------
- --------------------------------------------------------------------------------
-
- The default HTML output is a file for each of the source files with one extra
- file `cxref.html' that includes each of the other files. This is to allow a
- makefile to only update the changed files (although the references may require
- all of the files to be checked again). When the cxref.html file has been
- written it can be modified by the user, any new files that are added are added
- at the end before the table of contents, the rest of the file being unchanged.
-
- The index is written to a file called `cxref.apdx.html' and cxref.html is
- updated to refer to it.
-
- (The file names `cxref.html' and `cxref.apdx.html' are different if the `-N'
- option is used.)
-
- --------------------------------------------------------------------------------
- --------------------------- Example Special Comments ---------------------------
- --------------------------------------------------------------------------------
-
- See the `README.c' file, to see that the comments are indeed seen in the code,
- run `cxref README.c -raw', the comments are indicated in chevrons `<<< >>>'.
-
- --------------------------------------------------------------------------------
- ----------------------------- Further Information ------------------------------
- --------------------------------------------------------------------------------
-
- There is a list of frequently asked questions and their answers for the cxref
- program in the FAQ file. A list of improvements planned for future versions of
- the program are listed in the file TODO.
-
- More up-to-date information can be found on the World Wide Web at the cxref
- homepage, reached via the author's homepage http://www.gedanken.demon.co.uk/.
-
- If you wish to submit bug reports or other comments about the program then email
- the author amb@gedanken.demon.co.uk and put cxref in the subject line.
-
- --------------------------------------------------------------------------------
- ----------------------------- Author and Copyright -----------------------------
- --------------------------------------------------------------------------------
-
- The cxref program was written by Andrew M. Bishop in 1995,96,97.
-
- The cxref program is copyright Andrew M. Bishop 1995,96,97.
-
- The cxref-cpp program is copyright Free Software Foundation, Inc.
-
- The cxref and cxref-cpp programs can be freely distributed according to the
- terms of the GNU General Public License (see the file `COPYING').
-