RCREF                                      MLG, 6 Jan 1982
-----
RCREF is a loadbale option (Load RCREF).  RCREF is a Standard LISP
program for processing a set of Standard LISP function definitions to
produce:

1) A "Summary" showing:

       a) A list of files processed
       b) A list of "entry points" (functions which are  not
          called or are called only by themselves)
       c) A list of undefined  functions  (functions  called
          but not defined in this set of functions)
       d) A list of variables that were used non-locally but
          not declared GLOBAL or FLUID before there use
       e) A list of variables that were declared GLOBAL but used
	  as FLUIDs i.e. bound in a function
       f) A list of FLUID variables that were not bound in a function
	  so that one might consider declaring them GLOBALs
       g) A list of all GLOBAL variables present
       h) A list of all FLUID variables present
       i) A list of all functions present

2) A "global variable usage" table, showing for each non-local variable:

       a) Functions in which it is used as a declared  FLUID
          or GLOBAL
       b) Functions in which it is  used  but  not  declared
          before
       c) Functions in which it is bound
       d) Functions i which it is changed by SETQ

3) A "function usage" table showing for each function:

       a) Where it is defined
       b) Functions which call this function
       c) Functions called by it
       d) Non-local variables used

    The output is alphabetized on the first seven characters of  each
function name.

    RCREF will also check that functions are called with the  correct
number of arguments.


RESTRICTIONS:
    Algebraic procedures in  REDUCE  are  treated  as  if  they  were
symbolic,  so that algebraic constructs will actually appear as calls
to symbolic functions, such as AEVAL.

   Syslisp procedures are not correctly analyzed.

USAGE:
    RCREF should be used in in PSL:RLISP To make file FILE.CRF
that is crossreference listing for files FILE1.EX1 and  FILE2.EX2  do
the following in RLISP:

@PSL:RLISP
LOAD RCREF;

OUT "file.crf";             [% later, CREFOUT ..."]
ON CREF;
IN "file1.ex1","file2.ex2";
OFF CREF;
SHUT "file.crf";	    [ later CREFEND]

    To process more files, more IN statements may be added,
or the IN statement changed to include more files.


OPTIONS:

If the flag CREFSUMMARY is ON (or !*CREFSUMMARY is true in LISP),
then only the summary (see 1 abowe) is produced.

Functions with the flag NOLIST will not be examined or output.
Initially, all Standard LISP functions are so flagged.  (In fact,
they are kept on a list NOLIST!*, so if you wish to see references
to ALL functions, then CREF should be first loaded with the
command LOAD RCREF, and this variable then set to NIL).

It should also be remembered that in REDUCE (RLISP) any  macros  with
the flag EXPAND or, if FORCE is on, without the flag NOEXPAND will be
expanded  before  the  definition  is  seen  by  the  cross-reference
program,  so  this  flag  can also be used to select those macros you
require expanded and those not.

