diff options
Diffstat (limited to 'mkid.texinfo')
-rw-r--r-- | mkid.texinfo | 957 |
1 files changed, 0 insertions, 957 deletions
diff --git a/mkid.texinfo b/mkid.texinfo deleted file mode 100644 index 076b313..0000000 --- a/mkid.texinfo +++ /dev/null @@ -1,957 +0,0 @@ -\input texinfo -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename mkid.info -@settitle The ID Database -@setchapternewpage odd -@comment %**end of header (This is for running Texinfo on a region.) - -@include version.texi - -@ifinfo -@format -START-INFO-DIR-ENTRY -* mkid: (mkid). Identifier database utilities -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@ifinfo -This file documents the @code{mkid} identifier database utilities. - -Copyright (C) 1991 Tom Horsley - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation. -@end ifinfo - -@titlepage -@title The MKID Identifier Database, version @value{VERSION} -@subtitle A Simple, Fast, High-Capacity Cross-Referencer -@subtitle lid, gid, aid, eid, pid, iid -@author by Tom Horsley - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1991 Tom Horsley - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation. -@end titlepage - -@ifinfo -@node Top, Overview, (dir), (dir) -@top GNU @code{mkid} - -@menu -* Overview:: What is an ID database and what tools manipulate it? -* Mkid:: Mkid -* Database Query Tools:: Database Query Tools -* Iid:: Iid -* Other Tools:: Other Tools -* Command Index:: Command Index -@end menu - -@end ifinfo - -@node Overview, Mkid, Top, Top -@chapter Overview -@cindex Reference to First Chapter -An ID database is simply a file containing a list of file names, a list of -identifiers, and a binary relation (stored as a bit matrix) indicating which -of the identifiers appear in each file. With this database and some tools -to manipulate the data, a host of tasks become simpler and faster. You can -@code{grep} through hundreds of files for a name, skipping the files that -don't contain the name. You can search for all the memos containing -references to a project. You can edit every file that calls some function, -adding a new required argument. Anyone with a large software project to -maintain, or a large set of text files to organize can benefit from the ID -database and the tools that manipulate it. - -There are several programs in the ID family. The @code{mkid} program -scans the files, finds the identifiers and builds the ID database. The -@code{lid} and @code{aid} tools are used to generate lists of file names -containing an identifier (perhaps to recompile every file that -references a macro which just changed). The @code{eid} program will -invoke an editor on each of the files containing an identifier and the -@code{gid} program will @code{grep} for an identifier in the subset of -files known to contain it. The @code{pid} tool is used to query the -path names of the files in the database (rather than the contents). -Finally, the @code{iid} tool is an interactive program supporting -complex queries to intersect and join sets of file names. - -@menu -* History:: History -@end menu - -@node History, , Overview, Overview -@section History -Greg McGary conceived of the ideas behind mkid when he began hacking -the UNIX kernel in 1984. He needed a navigation tool to help him find -his way the expansive, unfamiliar landscape. The first mkid-like tools -were built with shell scripts, and produced an ascii database that looks -much like the output of `lid' with no arguments. It took over an hour -on a VAX 11/750 to build a database for a 4.1BSDish kernel. Lookups were -done with the UNIX command @code{look}, modified to handle very long lines. - -In 1986, Greg rewrote mkid, lid, fid and idx in C to improve -performance. Database-build times were shortened by an order of -magnitude. The mkid tools were first posted to @file{comp.sources.unix} -September of 1987. - -Over the next few years, several versions diverged from the original -source. Tom Horsley at Harris Computer Systems Division stepped forward -to take over maintenance and integrated some of the fixes from divergent -versions. He also wrote the @code{iid} program. A pre-release of -@code{mkid2} was posted to @file{alt.sources} near the end of 1990. At -that time Tom wrote this texinfo manual with the encouragement the net -community. (Tom thanks Doug Scofield and Bill Leonard whom I dragooned -into helping me poorf raed and edit --- they found several problems in -the initial version.) - -In January, 1995, Greg McGary reemerged as the primary maintaner and is -hereby launching @code{mkid-3} whose primary new feature is an efficient -algorithm for building databases that is linear over the size of the -input text for both time and space. (The old algorithm was quadratic -for space and choked on very large source trees.) The code is now under -GPL and might become a part of the GNU system. @code{Mkid-3} is an -interim release, since several significant enhacements are in the works. -These include an optional coupling with GNU grep, so that grep can use -an ID database for hints; a cscope work-alike query interface; -incremental update of the ID database; and an automatic file-tree walker -so you need not explicitly supply every file name argument to -the @code{mkid} program. - -@node Mkid, Database Query Tools, Overview, Top -@chapter Mkid -The @code{mkid} program builds the ID database. To do this it must scan -each of the files included in the database. This takes some time, but -once the work is done the query programs run very rapidly. - -The @code{mkid} program knows how to scan a variety of of files. For -example, it knows how to skip over comments and strings in a C program, -only picking out the identifiers used in the code. - -Identifiers are not the only thing included in the database. -Numbers are also scanned and included in the database indexed by -their binary value. Since the same number can be written many -different ways (47, 0x2f, 057 in a C program for instance), this -feature allows you to find hard coded uses of constants without -regard to the radix used to specify them. - -All the places in this document where identifiers are written about -should really mention identifiers and numbers, but that gets fairly -clumsy after a while, so you should always keep in mind that numbers are -included in the database as well as identifiers. - -@menu -* Mkid Command Line Options:: Mkid Command Line Options -* Builtin Scanners:: Builtin Scanners -* Adding Your Own Scanner:: Adding Your Own Scanner -* Mkid Examples:: Mkid Examples -@end menu - -@node Mkid Command Line Options, Builtin Scanners, Mkid, Mkid -@section Mkid Command Line Options -@deffn Command mkid [@code{-v}] [@code{-S@var{scanarg}}] [@code{-a@var{arg-file}}] [@code{-}] [@code{-f@var{out-file}}] [@code{-u}] [@code{files}@dots{}] -@table @code -@item -v -Verbose. Mkid tells you as it scans each file and indicates which scanner -it is using. It also summarizes some statistics about the database at -the end. -@item -S@var{scanarg} -The @code{-S} option is used to specify arguments to the various language -scanners. @xref{Scanner Arguments}, for details. -@item -a@var{arg-file} -Name a file containing additional command line arguments (one per line). This -may be used to specify lists of file names longer than will fit on a command -line. -@item - -A simple @code{-} by itself means read arguments from stdin. -@item -f@var{out-file} -Specify the name of the database file to create. The default name is @code{ID} -(in the current directory), but you may specify any name. The file names -stored in the database will be stored relative to the directory containing -the database, so if you move the database after creating it, you may have -trouble finding files unless they remain in the same relative position. -@item -u -The @code{-u} option updates an existing database by rescanning any files -that have changed since the database was written. Unfortunately you cannot -incrementally add new files to a database. -@item files -Remaining arguments are names of files to be scanned and included in the -database. -@end table -@end deffn - -@menu -* Scanner Arguments:: Scanner Arguments -@end menu - -@node Scanner Arguments, , Mkid Command Line Options, Mkid Command Line Options -@subsection Scanner Arguments -Scanner arguments all start with @code{-S}. Scanner arguments are used to tell -@code{mkid} which language scanner to use for which files, to pass language -specific options to the individual scanners, and to get some limited -online help about scanner options. - -@code{Mkid} usually determines which language scanner to use on a file -by looking at the suffix of the file name. The suffix starts at the last -@samp{.} in a file name and includes the @samp{.} and all remaining -characters (for example the suffix of @file{fred.c} is @file{.c}). Not -all files have a suffix, and not all suffixes are bound to a specific -language by mkid. If @code{mkid} cannot determine what language a file -is, it will use the language bound to the @file{.default} suffix. The -plain text scanner is normally bound to @file{.default}, but the -@code{-S} option can be used to change any language bindings. - -There are several different forms for scanner options: -@table @code -@item -S.@var{<suffix>}=@var{<language>} -@code{Mkid} determines which language scanner to use on a file by examining the -file name suffix. The @samp{.} is part of the suffix and must be specified -in this form of the @code{-S} option. For example @samp{-S.y=c} tells -@code{mkid} to use the @samp{c} language scanner for all files ending in -the @samp{.y} suffix. -@item -S.@var{<suffix>}=? -@code{Mkid} has several built in suffixes it already recognizes. Passing -a @samp{?} will cause it to print the language it will use to scan files -with that suffix. -@item -S?=@var{<language>} -This form will print which suffixes are scanned with the given language. -@item -S?=? -This prints all the suffix@expansion{}language bindings recognized by -@code{mkid}. -@item -S@var{<language>}-@var{<arg>} -Each language scanner accepts scanner dependent arguments. This form of the -@code{-S} option is used to pass arbitrary arguments to the language scanners. -@item -S@var{<language>}? -Passing a @samp{?} instead of a language option will print a brief summary -of the options recognized by the specified language scanner. -@item -S@var{<new language>}/@var{<builtin language>}/@var{<filter command>} -This form specifies a new language defined in terms of a builtin language -and a shell command that will be used to filter the file prior to passing -on to the builtin language scanner. -@end table - -@node Builtin Scanners, Adding Your Own Scanner, Mkid Command Line Options, Mkid -@section Builtin Scanners -If you run @code{mkid -S?=?} you will find bindings for a number of -languages; unfortunately pascal, though mentioned in the list, is not -actually supported. The supported languages are documented below -@footnote{This is not strictly true --- vhil is a supported language, but -it is an obsolete and arcane dialect of C and should be ignored}. - -@menu -* C:: C -* Plain Text:: Plain Text -* Assembler:: Assembler -@end menu - -@node C, Plain Text, Builtin Scanners, Builtin Scanners -@subsection C - -The C scanner is probably the most popular. It scans identifiers out of -C programs, skipping over comments and strings in the process. The -normal @file{.c} and @file{.h} suffixes are automatically recognized as -C language, as well as the more obscure @file{.y} (yacc) and @file{.l} -(lex) suffixes. - -The @code{-S} options recognized by the C scanner are: - -@table @code -@item -Sc-s@var{<character>} -Allow the specified @var{<character>} in identifiers (some dialects of -C allow @code{$} in identifiers, so you could say @code{-Sc-s$} to -accept that dialect). -@item -Sc-u -Don't strip leading underscores from identifier names (this is the default -mode of operation). -@item -Sc+u -Do strip leading underscores from identifier names (I don't know why you -would want to do this in C programs, but the option is available). -@end table - -@node Plain Text, Assembler, C, Builtin Scanners -@subsection Plain Text -The plain text scanner is designed for scanning documents. This is -typically the scanner used when adding custom scanners, and several -custom scanners are built in to @code{mkid} and defined in terms of filters -and the text scanner. A troff scanner runs @code{deroff} over the file -then feeds the result to the text scanner. A compressed man page scanner -runs @code{pcat} piped into @code{col -b}, and a @TeX{} scanner runs -@code{detex}. - -Options: - -@table @code -@item -Stext+a@var{<character>} -Include the specified character in identifiers. By default, standard -C identifiers are recognized. -@item -Stext-a@var{<character>} -Exclude the specified character from identifiers. -@item -Stext+s@var{<character>} -Squeeze the specified character out of identifiers. By default, the -characters @samp{'}, @samp{-}, and @samp{.} are squeezed out of identifiers. -This generates transformations like @var{fred's}@expansion{}@var{freds} or -@var{a.s.p.c.a.}@expansion{}@var{aspca}. -@item -Stext-s@var{<character>} -Do not squeeze out the specified character. -@end table - -@node Assembler, , Plain Text, Builtin Scanners -@subsection Assembler -Assemblers come in several flavors, so there are several options to -control scanning of assembly code: - -@table @code -@item -Sasm-c@var{<character>} -The specified character starts a comment that extends to end of line -(in many assemblers this is a semicolon or number sign --- there is -no default value for this). -@item -Sasm+u -Strip the leading underscores off identifiers (the default behavior). -@item -Sasm-u -Do not strip the leading underscores. -@item -Sasm+a@var{<character>} -The specified character is allowed in identifiers. -@item -Sasm-a@var{<character>} -The specified character is allowed in identifiers, but any identifier -containing that character is ignored (often a @samp{.} or @samp{@@} -will be used to indicate an internal temp label, you may want to -ignore these). -@item -Sasm+p -Recognize C preprocessor directives in assembler source (default). -@item -Sasm-p -Do not recognize C preprocessor directives in assembler source. -@item -Sasm+C -Skip over C style comments in assembler source (default). -@item -Sasm-C -Do not skip over C style comments in assembler source. -@end table - -@node Adding Your Own Scanner, Mkid Examples, Builtin Scanners, Mkid -@section Adding Your Own Scanner - -There are two ways to add new scanners to @code{mkid}. The first is to -modify the code in @file{getscan.c} and add a new @file{scan-*.c} file -with the code for your scanner. This is not too hard, but it requires -relinking and installing a new version of @code{mkid}, which might be -inconvenient, and would lead to the proliferation of @code{mkid} -versions. - -The second technique uses the @code{-S<lang>/<lang>/<filter>} form -of the @code{-S} option to specify a new language scanner. In this form -the first language is the name of the new language to be defined, -the second language is the name of an existing language scanner to -be invoked on the output of the filter command specified as the -third component of the @code{-S} option. - -The filter is an arbitrary shell command. Somewhere in the filter string, -a @code{%s} should occur. This @code{%s} is replaced by the name of the -source file being scanned, the shell command is invoked, and whatever -comes out on @var{stdout} is scanned using the builtin scanner. - -For example, no scanner is provided for texinfo files (like this one). -If I wished to index the contents of this file, but avoid indexing the -texinfo directives, I would need a filter that stripped out the texinfo -directives, but left the remainder of the file intact. I could then use -the plain text scanner on the remainder. A quick way to specify this -might be: - -@example -'-S/texinfo/text/sed s,@@[a-z]*,,g < %s' -@end example - -This defines a new language scanner (@var{texinfo}) defined in terms of -a @code{sed} command to strip out texinfo directives (at signs followed -by letters). Once the directives are stripped, the remaining text is run -through the plain text scanner. - -This is just an example, to do a better job I would actually need to -delete some lines (such as those beginning with @code{@@end}) as well -as deleting the @code{@@} directives embedded in the text. - -@node Mkid Examples, , Adding Your Own Scanner, Mkid -@section Mkid Examples - -The simplest example of @code{mkid} is something like: - -@example -mkid *.[chy] -@end example - -This will build an ID database indexing all the -identifiers and numbers in the @file{.c}, @file{.h}, and @file{.y} files -in the current directory. Because those suffixes are already known to -@code{mkid} as C language files, no other special arguments are required. - -From a simple example, lets go to a more complex one. Suppose you want -to build a database indexing the contents of all the @var{man} pages. -Since @code{mkid} already knows how to deal with @file{.z} files, let's -assume your system is using the @code{compress} program to store -compressed cattable versions of the @var{man} pages. The -@code{compress} program creates files with a @code{.Z} suffix, so -@code{mkid} will have to be told how to scan @file{.Z} files. The -following code shows how to combine the @code{find} command with the -special scanner arguments to @code{mkid} to generate the required ID -database: - -@example -cd /usr/catman -find . -name '*.Z' -print | mkid '-Sman/text/uncompress -c < %s' -S.Z=man - -@end example - -This example first switches to the @file{/usr/catman} directory where -the compressed @var{man} pages are stored. The @code{find} command then -finds all the @file{.Z} files under that directory and prints their -names. This list is piped into the @code{mkid} program. The @code{-} -argument by itself (at the end of the line) tells @code{mkid} to read -arguments (in this case the list of file names) from @var{stdin}. The -first @code{-S} argument defines a new language (@var{man}) in terms of -the @code{uncompress} utility and the existing text scanner. The second -@code{-S} argument tells @code{mkid} to treat all @file{.Z} files as -language @var{man}. In practice, you might find the @code{mkid} -arguments need to be even more complex, something like: - -@example -mkid '-Sman/text/uncompress -c < %s | col -b' -S.Z=man - -@end example - -This will take the additional step of getting rid of any underlining and -backspacing which might be present in the compressed @var{man} pages. - -@node Database Query Tools, Iid, Mkid, Top -@chapter Database Query Tools - -The ID database is useless without database query tools. The remainder -of this document describes those tools. - -The @code{lid}, @code{gid}, -@code{aid}, @code{eid}, and @code{pid} programs are all the same program -installed with links to different names. The name used to invoke the -program determines how it will act. - -The @code{iid} program is an interactive query shell that sits on top -of the other query tools. - -@menu -* Common Options:: Common command line options -* Patterns:: Identifier pattern matching -* Lid:: Look up identifiers -* Aid:: Case insensitive lid -* Gid:: Grep for identifiers -* Eid:: Edit files with matching identifiers -* Pid:: Look up path names in database -@end menu - -@node Common Options, Patterns, Database Query Tools, Database Query Tools -@section Common Options - -Since many of the programs are really links to one common program, it -is only reasonable to expect that most of the query tools would share -common command line options. Not all options make sense for all programs, -but they are all described here. The description of each program -gives the options that program uses. - -@table @code -@item -f@var{<file>} -Read the database specified by @var{<file>}. Normally the tools look -for a file named @file{ID} in either the current directory or in any -of the directories above the current directory. This means you can keep -a global @file{ID} database in the root of a large source tree and use -the query tools from anywhere within that tree. -@item -r@var{<directory>} -The query tools usually assume the file names in the database are relative -to the directory holding the database. The @code{-r} option tells the -tools to look for the files relative to @var{<directory>} regardless -of the location of the database. -@item -c -This is shorthand for @code{-r`pwd`}. It tells the query tools to assume -the file names are stored relative to the current working directory. -@item -e -Force the pattern arguments to be treated as regular expressions. -Normally the query tools attempt to guess if the patterns are regular -expressions or simple identifiers by looking for special characters -in the pattern. -@item -w -Force the pattern arguments to be treated as simple words even if -they contain special regular expression characters. -@item -k -Normally the query tools that generate lists of file names attempt to -compress the lists using the @code{csh} brace notation. This option -suppresses the file name compression and outputs each name in full. -(This is particularly useful if you are a @code{ksh} user and want to -feed the list of names to another command --- the @code{-k} option -comes from the @code{k} in @code{ksh}). -@item -g -It is possible to build the query tools so the @code{-k} option is the -default behavior. If this is the case for your system, the @code{-g} -option turns on the globbing of file names using the @code{csh} brace -notation. -@item -n -Normally the query tools that generate lists of file names also list -the matching identifier at the head of the list of names. This is -irritating if you want just a list of names to feed to another command, -so the @code{-n} option suppresses the identifier and lists only -file names. -@item -b -This option is only used by the @code{pid} tool. It restricts @code{pid} -to pattern match only the basename part of a file name. Normally the -absolute file name is matched against the pattern. -@item -d -o -x -a -These options may be used in any combination to limit the radix of -numeric matches. The @code{-d} option will allow matches on decimal -numbers, @code{-o} on octal, and @code{-x} on hexadecimal numbers. -The @code{-a} option is shorthand for specifying all three. Any -combination of these options may be used. -@item -m -Merge multiple lines of output into a single line. (If your query -matches more than one identifier the default action is to generate -a separate line of output for each matching identifier). -@item -s -Search for identifiers that appear only once in the database. This -helps to locate identifiers that are defined but never used. -@item -u@var{<number>} -List identifiers that conflict in the first @var{<number>} characters. -This could be useful porting programs to brain-dead computers that -refuse to support long identifiers, but your best long term option -is to set such computers on fire. -@end table - -@node Patterns, Lid, Common Options, Database Query Tools -@section Patterns - -You can attempt to match either simple identifiers or numbers in a -query, or you can specify a regular expression pattern which may -match many different identifiers in the database. The query -programs use either @var{regex} and @var{regcmp} or @var{re_comp} -and @var{re_exec}, depending on which one is available in the library -on your system. These might not always support the exact same -regular expression syntax, so consult your local @var{man} pages -to find out. Any regular expression routines should support the following -syntax: - -@table @code -@item . -A dot matches any character. -@item [ ] -Brackets match any of the characters specified within the brackets. You -can match any characters @emph{except} the ones in brackets by typing -@code{^} as the first character. A range of characters can be specified -using @code{-}. -@item * -An asterisk means repeat the previous pattern zero or more times. -@item ^ -An @code{^} at the beginning of a pattern means the pattern must match -starting at the first character of the identifier. -@item $ -A @code{$} at the end of the pattern means the pattern must match ending -at the last character in the identifier. -@end table - -@node Lid, Aid, Patterns, Database Query Tools -@section Lid - -@deffn Command lid [@code{-f@var{<file>}}] [@code{-u@var{<n>}}] [@code{-r@var{<dir>}}] [@code{-ewdoxamskgnc}] patterns@dots{} -@end deffn - -The @code{lid} program stands for @var{lookup identifier}. -It searches the database for any identifiers matching the patterns -and prints the names of the files that match each pattern. The exact -format of the output depends on the options. - -@node Aid, Gid, Lid, Database Query Tools -@section Aid - -@deffn Command aid [@code{-f@var{<file>}}] [@code{-u@var{<n>}}] [@code{-r@var{<dir>}}] [@code{-doxamskgnc}] patterns@dots{} -@end deffn - -The @code{aid} command is an abbreviation for @var{apropos identifier}. -The patterns cannot be regular expressions, but it looks for them using -a case insensitive match, and any pattern that is a substring of an -identifier in the database will match that identifier. - -For example @samp{aid get} might match the identifiers @code{fgets}, -@code{GETLINE}, and @code{getchar}. - -@node Gid, Eid, Aid, Database Query Tools -@section Gid - -@deffn Command gid [@code{-f@var{<file>}}] [@code{-u@var{<n>}}] [@code{-r@var{<dir>}}] [@code{-doxasc}] patterns@dots{} -@end deffn - -The @code{gid} command stands for @var{grep for identifiers}. It finds -identifiers in the database that match the specified patterns, then -@code{greps} for those identifiers in just the set of files containing -matches. In a large source tree, this saves a fantastic amount of time. - -There is an @var{emacs} interface to this program (@pxref{GNU Emacs Interface}). -If you are an @var{emacs} user, you will probably prefer the @var{emacs} -interface over the @code{eid} tool. - -@node Eid, Pid, Gid, Database Query Tools -@section Eid - -@deffn Command eid [@code{-f@var{<file>}}] [@code{-u@var{<n>}}] [@code{-r@var{<dir>}}] [@code{-doxasc}] patterns@dots{} -@end deffn - -The @code{eid} command allows you to invoke an editor on each file containing -a matching pattern. The @code{EDITOR} environment variable is the name of the -program to be invoked. If the specified editor can accept an initial search -argument on the command line, you can use the @code{EIDARG}, @code{EIDLDEL}, -and @code{EIDRDEL} environment variables to specify the form of that argument. - -@table @code -@item EDITOR -The name of the editor program to invoke. -@item EIDARG -A printf string giving the form of the argument to pass containing the -initial search string (the matching identifier). For @code{vi} -it should be set to @samp{+/%s/'}. -@item EIDLDEL -A string giving the regular expression pattern that forces a match at -the beginning (left end) of a word. This string is inserted in front -of the matching identifier when composing the search argument. For @code{vi}, -this should be @samp{\<}. -@item EIDRDEL -The matching right end word delimiter. For @code{vi}, use @samp{\>}. -@end table - -@node Pid, , Eid, Database Query Tools -@section Pid - -@deffn Command pid [@code{-f@var{<file>}}] [@code{-u@var{<n>}}] [@code{-r@var{<dir>}}] [@code{-ebkgnc}] patterns@dots{} -@end deffn - -The @code{pid} tool is unlike all the other tools. It matches the -patterns against the file names in the database rather than the -identifiers in the database. Patterns are treated as shell wild card -patterns unless the @code{-e} option is given, in which case full -regular expression matching is done. - -The wild card pattern is matched against the absolute path name of the -file. Most shells treat slashes @samp{/} and file names that start with -dot @samp{.} specially, @code{pid} does not do this. It simply attempts -to match the absolute path name string against the wild card pattern. - -The @code{-b} option restricts the pattern matching to the base name of -the file (all the leading directory names are stripped prior to pattern -matching). - -@node Iid, Other Tools, Database Query Tools, Top -@chapter Iid - -@deffn Command iid [@code{-a}] [@code{-c@var{<command>}}] [@code{-H}] -@table @code -@item -a -Normally @code{iid} uses the @code{lid} command to search for names. -If you give the @code{-a} option on the command line, then it will -use @code{aid} as the default search engine. -@item -c@var{<command>} -In normal operation, @code{iid} starts up and prompts you for commands -used to build sets of files. The @code{-c} option is used to pass a -single query command to @code{iid} which it then executes and exits. -@item -H -The @code{-H} option prints a short help message and exits. To get more -help use the @code{help} command from inside @code{iid}. -@end table -@end deffn - -The @code{iid} program is an interactive ID query tool. It operates by -running the other query programs (such as @code{lid} and @code{aid}) -and creating sets of file names returned by these queries. It also -provides operators for @code{anding} and @code{oring} these sets to -create new sets. - -The @code{PAGER} environment variable names the program @code{iid} uses -to display files. If you use @code{emacs}, you might want to set -@code{PAGER} so it invokes the @code{emacsclient} program. Check the -file @file{lisp/server.el} in the emacs source tree for documentation on -this. It is useful not only with X windows, but also when running -@code{iid} from an emacs shell buffer. There is also a somewhat spiffier -version called gnuserv by Andy Norman -(@code{ange%anorman@@hplabs.hp.com}) which appeared in @file{comp.emacs} -sometime in 1989. - -@menu -* Ss and Files commands:: Ss and Files commands -* Sets:: Sets -* Show:: Show -* Begin:: Begin -* Help:: Help -* Off:: Off -* Shell Commands as Queries:: Shell Commands as Queries -* Shell Escape:: Shell Escape -@end menu - -@node Ss and Files commands, Sets, Iid, Iid -@section Ss and Files commands - -The primary query commands are @code{ss} (for select sets) and @code{files} -(for show file names). These commands both take a query expression as an -argument. - -@deffn Subcommand ss query -The @code{ss} command runs a query and builds a set (or sets) of file names. The -result is printed as a summary of the sets constructed showing how many file -names are in each set. -@end deffn - -@deffn Subcommand files query -The @code{files} command is like the @code{ss} command, but rather than printing -a summary, it displays the full list of matching file names. -@end deffn - -@deffn Subcommand f query -The @code{f} command is merely a shorthand notation for @code{files}. -@end deffn - -Database queries are simple expressions with operators like @code{and} -and @code{or}. Parentheses can be used to group operations. The complete -set of operators is summarized below: - -@table @code -@item @var{pattern} -Any pattern not recognized as one of the keywords in this table is treated -as an identifier to be searched for in the database. It is passed as an -argument to the default search program (normally @code{lid}, but @code{aid} -is used if the @code{-a} option was given when @code{iid} was started). -The result of this operation is a set of file names, and it is assigned a -unique set number. -@item lid -@code{lid} is a keyword. It is used to invoke @code{lid} with the list of -identifiers following it as arguments. This forces the use of @code{lid} -regardless of the state of the @code{-a} option (@pxref{Lid}). -@item aid -The @code{aid} keyword is like the @code{lid} keyword, but it forces the -use of the @code{aid} program (@pxref{Aid}). -@item match -The @code{match} operator invokes the @code{pid} program to do pattern -matching on file names rather than identifiers. The set generated contains -the file names that match the specified patterns (@pxref{Pid}). -@item or -The @code{or} operator takes two sets of file names as arguments and generates -a new set containing all the files from both sets. -@item and -The @code{and} operator takes two sets of file names and generates a new -set containing only files from both sets. -@item not -The @code{not} operator inverts a set of file names, producing the set of -all files not in the input set. -@item set number -A set number consists of the letter @code{s} followed immediately by a number. -This refers to one of the sets created by a previous query operation. During -one @code{iid} session, each query generates a unique set number, so any -previously generated set may be used as part of any new query by referring -to the set number. -@end table - -The @code{not} operator has the highest precedence with @code{and} -coming in the middle and @code{or} having the lowest precedence. The -operator names are recognized using case insensitive matching, so -@code{AND}, @code{and}, and @code{aNd} are all the same as far as -@code{iid} is concerned. If you wish to use a keyword as an operand to -one of the query programs, you must enclose it in quotes. Any patterns -containing shell special characters must also be properly quoted or -escaped, since the query commands are run by invoking them with the -shell. - -Summary of query expression syntax: - -@example -A <query> is: - <set number> - <identifier> - lid <identifier list> - aid <identifier list> - match <wild card list> - <query> or <query> - <query> and <query> - not <query> - ( <query> ) -@end example - -@node Sets, Show, Ss and Files commands, Iid -@section Sets - -@deffn Subcommand sets -@end deffn - -The @code{sets} command displays all the sets created so far. Each one -is described by the query command that generated it. - -@node Show, Begin, Sets, Iid -@section Show - -@deffn Subcommand show set -@end deffn - -@deffn Subcommand p set -@end deffn - -The @code{show} and @code{p} commands are equivalent. They both accept -a set number as an argument and run the program given in the @code{PAGER} -environment variable with the file names in that set as arguments. - -@node Begin, Help, Show, Iid -@section Begin - -@deffn Subcommand begin directory -@end deffn - -@deffn Subcommand b directory -@end deffn - -The @code{begin} command (and its abbreviated version @code{b}) is used -to begin a new @code{iid} session in a different directory (which presumably -contains a different database). It flushes all the sets created so far -and switches to the specified directory. It is equivalent to exiting @code{iid}, -changing directories in the shell, and running @code{iid} again. - -@node Help, Off, Begin, Iid -@section Help - -@deffn Subcommand help -@end deffn - -@deffn Subcommand h -@end deffn - -@deffn Subcommand ? -@end deffn - -The @code{help}, @code{h}, and @code{?} command are three different ways to -ask for help. They all invoke the @code{PAGER} program to display a short -help file. - -@node Off, Shell Commands as Queries, Help, Iid -@section Off - -@deffn Subcommand off -@end deffn - -@deffn Subcommand quit -@end deffn - -@deffn Subcommand q -@end deffn - -These three command (or just an end of file) all cause @code{iid} to exit. - -@node Shell Commands as Queries, Shell Escape, Off, Iid -@section Shell Commands as Queries - -When the first word on an @code{iid} command is not recognized as a -builtin @code{iid} command, @code{iid} assumes the command is a shell -command which will write a list of file names to @var{stdout}. This list -of file names is used to generate a new set of files. - -Any set numbers that appear as arguments to this command are expanded -into lists of file names prior to running the command. - -@node Shell Escape, , Shell Commands as Queries, Iid -@section Shell Escape - -If a command starts with a bang (@code{!}) character, the remainder of -the line is run as a shell command. Any set numbers that appear as -arguments to this command are expanded into lists of file names prior to -running the command. - -@node Other Tools, Command Index, Iid, Top -@chapter Other Tools - -This chapter describes some support tools that work with the other ID -programs. - -@menu -* GNU Emacs Interface:: Using gid.el -* Fid:: List identifiers in a file. -* Idx:: Extract identifiers from source file. -@end menu - -@node GNU Emacs Interface, Fid, Other Tools, Other Tools -@section GNU Emacs Interface - -The source distribution comes with a file named @file{gid.el}. This is -a GNU emacs interface to the @code{gid} tool. If you put the file where -emacs can find it (somewhere in your @code{EMACSLOADPATH}) and put -@code{(autoload 'gid "gid" nil t)} in your @file{.emacs} file, you will -be able to invoke the @code{gid} function using @kbd{M-x gid}. - -This function prompts you with the word the cursor is on. If you want -to search for a different pattern, simply delete the line and type the -pattern of interest. - -It runs @code{gid} in a @code{*compilation*} buffer, so the normal -@code{next-error} function can be used to visit all the places the -identifier is found (@pxref{Compilation,,,emacs,The GNU Emacs Manual}). - -@node Fid, Idx, GNU Emacs Interface, Other Tools -@section Fid - -@deffn Command fid [@code{-f@var{<file>}}] file1 [file2] -@table @code -@item -f@var{<file>} -Look in the named database. -@item @var{file1} -List the identifiers contained in file1 according to the database. -@item @var{file2} -If a second file is given, list only the identifiers both files have -in common. -@end table -@end deffn - -The @code{fid} program provides an inverse query. Instead of listing -files containing some identifier, it lists the identifiers found in -a file. - -@node Idx, , Fid, Other Tools -@section Idx - -@deffn Command idx [@code{-s@var{<directory>}}] [@code{-r@var{<directory>}}] [@code{-S@var{<scanarg>}}] files@dots{} -The @code{-s}, @code{-r}, and @code{-S} arguments to @code{idx} -are identical to the same arguments on @code{mkid} -(@pxref{Mkid Command Line Options}). -@end deffn - -The @code{idx} command is more of a test frame for scanners than a tool -designed to be independently useful. It takes the same scanner arguments -as @code{mkid}, but rather than building a database, it prints the -identifiers found to @var{stdout}, one per line. You can use it to try -out a scanner on a sample file to make sure it is extracting the -identifiers you believe it should extract. - -@node Command Index, , Other Tools, Top -@unnumbered Command Index - -@printindex fn - -@contents -@bye |