@code{(require 'top-refs)}
@ftindex top-refs
@cindex top-level variable references
@cindex variable references

@noindent
These procedures complement those in @ref{Module Manifests} by
finding the top-level variable references in Scheme source code.
They work by traversing expressions and definitions, keeping track
of bindings encountered.  It is certainly possible to foil these
functions, but they return useful information about SLIB source
code.


@defun top-refs obj

Returns a list of the top-level variables referenced by the Scheme
expression @var{obj}.
@end defun


@defun top-refs<-file filename

@var{filename} should be a string naming an existing file containing Scheme
source code.  @code{top-refs<-file} returns a list of the top-level variable references
made by expressions in the file named by @var{filename}.

Code in modules which @var{filename} @code{require}s is not traversed.  Code in
files loaded from top-level @emph{is} traversed if the expression
argument to @code{load}, @code{slib:load}, @code{slib:load-source},
@code{macro:load}, @code{defmacro:load}, @code{synclo:load},
@code{syncase:load}, or @code{macwork:load} is a literal string
constant or composed of combinations of vicinity functions and
string literal constants; and the resulting file exists (possibly
with ".scm" appended).
@end defun

@noindent
The following function parses an @dfn{Info} Index.
@cindex Info
@footnote{Although it will
work on large info files, feeding it an excerpt is much faster; and
has less chance of being confused by unusual text in the info file.
This command excerpts the SLIB index into @file{slib-index.info}:

@example
info -f slib2d6.info -n "Index" -o slib-index.info
@end example
}


@defun exports<-info-index file n @dots{}

@var{n} @dots{} must be an increasing series of positive integers.
@code{exports<-info-index} returns a list of all the identifiers appearing in the @var{n}th
@dots{} (info) indexes of @var{file}.  The identifiers have the case that
the implementation's @code{read} uses for symbols.  Identifiers
containing spaces (eg. @code{close-base on base-table}) are
@emph{not} included.  #f is returned if the index is not found.

Each info index is headed by a @samp{* Menu:} line.  To list the
symbols in the first and third info indexes do:

@example
(exports<-info-index "slib.info" 1 3)
@end example
@end defun

