HELP MAKE_INDEXES                                 Adrian Howard Feb 1992


         CONTENTS - (Use <ENTER> g to access required sections)

 -- Overview
 -- Using LIB *MAKE_INDEXES
 -- Example
 -- How Index Names Are Formed
 -- What An Index File Contains
 -- How "doc_index" directories are updated
 -- Calling LIB *MAKE_INDEXES From The Command Line
 -- Summary
 -- Related Documentation


-- Overview -----------------------------------------------------------

Creating indexes for  documentation files in a Poplog directory tree
involves two processes:

    i)  Creating index files (for example, HELP *INDEX)

    ii) Updating index directories (named "doc_index") used by -ved_?-
        and its sister procedures. See HELP *QUERY and HELP *MKREFINDEX.

The library LIB *MAKE_INDEXES automates this task for directory trees of
a "standard" shape. For the library to work, directories containing
documentation be named after the type of documentation they contain:

    o   REF file directories should be named "ref"
    o   HELP file directories should be named "help"
    o   TEACH file directories should be named "teach"
    o   DOC file directories should be named "doc"


-- Using LIB *MAKE_INDEXES --------------------------------------------

To use LIB *MAKE_INDEXES from Pop11 do:

    uses make_indexes;

    make_indexes(ROOT, SKIP_PATHS, PREFIX, SUFFIX, DOC_TYPES, STRIP);

Where:

    ROOT is the root directory of the tree which is to be indexed.

    SKIP_PATHS is a list of directories which should be ignored.

    PREFIX is the word or string which should be added to the start of
    all index files created.

    SUFFIX is the word or string which should be added to the end of all
    index files created.

    DOC_TYPES is a list of the documentation types whose indexes should
    be created.

    STRIP is a boolean which if true means strip VED character
    attributes and graphics characters from all documentation files for
    which indexes are built.


-- Example ------------------------------------------------------------

If you have the following directory tree in your home directory

                            [login directory]
                                    |
                                    |
                                  poplog
                                    |
                  __________________|___________________
                 |             |            |           |
                help          ref         teach         x
                 |             |            |           |
            (help files)  (ref files)  (teach files)   help
                                                        |
                                                   (help files)

Then issuing the following command

        UNIX                            VMS

    make_indexes(                   make_indexes(
        '$HOME/poplog',                 '$sys$login/poplog/',
        [ '$HOME/poplog/teach' ],       [ '$sys$login/poplog/teach/' ],
        'my', 'index',                  'my', 'index',
        [help ref teach],                [help ref teach],
        false                            false
    );                              );

would do the following:

    i)  Create the following index files:
        o   "myindex" in the directory poplog/help
        o   "myindex" in the directory poplog/ref
        o   "myxindex" in the directory poplog/x/help

    ii) Update any "doc_index" directories (see HELP *MKREFINDEX)

Note that the directory poplog/teach is ignored because it is a member
of the SKIP_PATHS argument.

By default, the procedure displays trace information. If you executed
the above command you would see output similar to this:

    Making help indexes in <HOME DIRECTORY>/poplog...
    Locating directories..
    Calculating index names...
    Creating index file <HOME DIRECTORY>/poplog/help/myindex

    Making ref indexes in <HOME DIRECTORY>/poplog...
    Locating directories..
    Calculating index names...
    Indexing ref directory <HOME DIRECTORY>/poplog/ref
    Creating index file <HOME DIRECTORY>/poplog/ref/myindex

    [ and so on ]

    Finished.

It is assumed that all REF directories should have a "doc_index"
directory and a warning is printed if any are found which do not.

If you do not wish to see any warnings or trace information assign
-false- to the variable -mi_verbose-.


-- How Index Names Are Formed -----------------------------------------

The name of an index file for a given directory is given by the
following algorithm.

    a)  Remove the ROOT passed to -make_indexes- from the directory
        name.

    b)  Remove the last component of the directory name.

    c)  Concatenate the remaining components of the directory.

    d)  Add the PREFIX and SUFFIX passed to

In the above example the directory

    <HOME DIRECTORY/poplog/x/help/

is transformed like this:

    <HOME DIRECTORY/poplog/x/help/ --> x/help --> x --> myxindex


-- What An Index File Contains ----------------------------------------

An index file contains an alphabetical list of all the files in the
relevant directory. The files are placed in columns, as many as will fit
onto a screen -mi_num_columns- wide (72 by default).

The bottom of the index file will contain cross references to any other
indexes of the same documentation type (if any).

By default, the format of index files depends on the documentation type,
to see this compare HELP *INDEX and REF *INDEX. This format can be
altered by redefining the procedures -mi_pr_index_header- and
-mi_pr_index_footer-.

Both procedures take the same arguments:

    mi_pr_index_header(DOC_TYPE, INDEX_NAME, INDEX_PATH, OTHER_INDEXES)
    mi_pr_index_footer(DOC_TYPE, INDEX_NAME, INDEX_PATH, OTHER_INDEXES)

Where:

    DOC_TYPE is the documentation type (eg, 'ref')

    INDEX_NAME is the name of the index file (eg, 'myindex')

    INDEX_PATH is the full pathname of the index file.

    OTHER_INDEXES is a list of the names of any other index files of the
    same documentation type.

The procedure -mi_pr_index_header- should display the section of the
index file before the list of files. The procedure -mi_pr_index_footer-
should display the information after the list of files. Both procedures
should do this by printing to the logical standard output channel (for
example by using -pr- and -npr-).


-- How "doc_index" directories are updated ----------------------------

The method used to update "doc_index" directories is controlled by the
list -mi_indexing_commands-. Each element of -mi_indexing_commands- is a
two element list of the form:

    [DIR COMMAND]

When -make_indexes- attempts to update the "doc_index" of a given
directory it examines each element of -mi_indexing_commands- in turn.

If the pathname of the directory containing "doc_index" contains DIR as
one of its components then COMMAND is called and no more elements of
-mi_indexing_commands- are examined.

If COMMAND is a procedure it is called with the pathname of the
directory as its argument. If COMMAND is a string, then the string

    COMMAND sys_>< space sys_>< PATH

is passed to -sysobey-, where PATH is the full pathname of the directory
containing "doc_index".

If no DIR can be found in -mi_indexing_commands- which will match the
directory, a -mishap- will occur.

On Unix systems the default value of -mi_indexing_commands- is:

    [
        ['lisp'   'pop11 $usepop/pop/lisp/mklisprefindex']
        ['pml'    'pop11 +$popsavelib/pml $usepop/pop/pml/src/mkindex']
        ['ref'    'pop11 mkrefindex']
    ]

On VMS systems the default value of -mi_indexing_commands- is:

    [
        ['lisp'   'pop11 usepop:[pop.lisp]mklisprefindex.p']
        ['pml'    'pop11/popsavelib:pml usepop:[pop.pml.src]mkindex.ml']
        ['ref'    'pop11 mkrefindex']
    ]

So, for example:

    /foo/baz/ref        will be indexed with    mkrefindex
    /foo/baz/lisp/ref   will be indexed with    mklisprefindex
    /foo/baz/pml/ref    will be indexed with    mkindex


-- Calling LIB *MAKE_INDEXES From The Command Line --------------------

LIB *MAKE_INDEXES may also be invoked from the shell (on Unix systems)
or DCL (on VMS systems) as follows:

    pop11 make_indexes ROOT -strip SKIP_PATHS PREFIX SUFFIX DOC_TYPES

Where ROOT, SKIP_PATHS, PREFIX, SUFFIX, and DOC_TYPES are the same as a
normal call to -make_indexes-. The items in the lists SKIP_PATHS and
DOC_TYPES will have to be enclosed in "(" and ")" brackets (remember to
escape the brackets with "\" when using Unix).

The '-strip' flag if present sets the STRIP argument to -make_indexes-
true (otherwise STRIP is false).

All arguments except ROOT are optional, including the '-strip' flag. The
default values if they are absent are as follows:

    STRIP       == false

    SKIP_PATHS  ==  []

    PREFIX      ==  ''

    SUFFIX      ==  'index'

    DOC_TYPES   ==  [ref help teach doc]


-- Summary ------------------------------------------------------------

The library LIB *MAKE_INDEXES defined the following:

make_indexes(PATH, SKIP_PATHS, PREFIX, SUFFIX, DOC_TYPES, STRIP)
    Index a directory tree.

mi_verbose -> BOOL
    Unless -false-, warning and trace information is displayed when
    -make_indexes- is running.

mi_num_columns -> INTEGER
    The number of columns available in an index file.

mi_pr_index_header(DOC_TYPE, INDEX_NAME, INDEX_PATH, OTHER_INDEXES)
mi_pr_index_footer(DOC_TYPE, INDEX_NAME, INDEX_PATH, OTHER_INDEXES)
    Procedures used to format contents of index files.

mi_indexing_commands -> LIST
    Procedures or Unix/DCL scripts for updating "doc_index" directories.


-- Related Documentation ----------------------------------------------

HELP *MKREFINDEX --- Library for indexing documentation files
HELP *QUERY      --- VED commands for locating information

REF *STANDARDS      --- Poplog documentation and library standards
REF *REFFORM        --- Details of REF file format


--- C.all/help/make_indexes
--- Copyright University of Sussex 1992. All rights reserved. ----------
