Trailing-Edge - PDP-10 Archives - decuslib20-01 - decus/20-0004/multifileindex.tty
There are no other files named multifileindex.tty in the archive.


For a set of lisp files which comprise part or all of a system, it is
often useful to have complete listings of that set of files.  However,
finding your way around in them can often be very tedious if you don't
know the system and the structure of the files intimately.  The
MULTIFILEINDEX package is an attempt to help users by creating a listing
of an entire system or set of files, including an alphebetized table of
contents with all functions indexed.  Information (but not index
numbers) is included for other entities in the files such as records,
blocks, or properties.  The function multifileindex implements this

In order to make the index, or map, of the files, the COMS for all the
files being listed need be "loaded"; multifileindex does a getdef on
each file (file names are obtained using findfile) to obtain its COMS.
As other indirections are noted, they also are obtained.  For example,
if you have a file TEST, and the value of testcoms is ((FNS * TESTFNS)),
just doing a getdef on TESTCOMS will not suffice; as the expression
(FNS * TESTFNS) is parsed, a getdef is also done to obtain the value of
testfns.  If you want to see what getdefs are being done, set
multifileindexgetdefflg to T.

multifileindex, in the default case:

   - Outputs an alphebetized table of contents (index) indicating
     the name of an entity (function, record, etc.), the file that
     it belongs to, and its type (property, variable (set or saved),
     record, block, etc.).  If the entity is the name of a function,
     then the information includes a unique index in the listing for
     the function, its type (expr, fexpr*, etc.), and its arglist.

   - Outputs the files with each function being preceeded by its
     indexnumber right-justified on the line.

   - Undoably removes the names of the files indexed from

Header information is placed at the top of each page, and the pages are
numbered.  The value of filelinelength indicates the width of the page;
linesperpage is the number of lines per page, and is initially set to 58
if it is unbound when the MULTIFILEINDEX package is loaded.  At present,
multifileindex does not know about fonts.

How the columns of the index are printed depends on the value of four
globals.  The primary one, multifileindexcols, indicates how the other
three are to be interpreted.  These other variables are
multifileindexnamecol, multifileindexfilecol, and multifileindextypecol
(initally 0, 26 and 41, respectively).  If multifileindexcols is the
atom FLOATCOLS (the default), then an attempt is made to fit the columns
onto the page in a way that maximizes the amount of space for the type
information (the amount of space allocated for the type field must be at

least 45% of filelinelength in this case).  If multifileindexcols is
either T or FIXCOLS, then the value of the other variables are treated
as absolute column positions on the page.  If multifileindexcols is
either NIL or FIXFLOATCOLS, the columns will be floated, but will not be
any smaller than the column positions defined by the other variables.

There are are four variables which govern what will actually get put out
onto the destination file:

                    (initially T) indicates if you want the file index.

                    (initially T) indicates if you want the files output
                    to destinationfile.

There is also an interface to Masterscope.  If the value of either of
the next two variables is T, then multifileindex assumes that the
sourcefiles have already been analyzed by Masterscope, and does an

                    (initially NIL) indicates that you want the
                    Masterscope information about each function.  This
                    includes who calls each function, who this function
                    calls, and what variables are set or referred to
                    either locally or freely.

                    (initially NIL) indicates that all variables used in
                    the files should have some information output about
                    them.  The list of variables to look at is obtained
                    by effectively asking Masterscope the question:
                    "WHO IS USED BY ANY AND WHO IS SET BY ANY".  You
                    will be told who binds, uses freely or locally, or
                    smashes freely or locally each variable.  The
                    variable map is case-independently sorted by the
                    name of the variable.

This package is similar to the SINGLEFILEINDEX package also in
<LISPUSERS>.  SINGLEFILEINDEX provides a table of contents for functions
only, and operates on one file at a time, does not include any
Masterscope-type information.  It is much simpler and faster than
MULTIFILEINDEX and is useful every time you make a file.

                    sourcefiles can either be a list of file names, or
                    an atom.  If it is NIL, multifileindex returns
                    immediately.  If it is T, the value of filelst is

                    destinationfile is the output file.  If

                    destinationfile is NIL, the value of globalvar
                    printer is used; it is initialized to the line
                    printer (device LPT:)  if it is unbound when the
                    MULTIFILEINDEX package is loaded.

                    newpageflg indicates whether or not you wish each
                    function in the listing to be on a page by itself.