This is a description of the VMS qi server and how it is different from the
CSO implementation.
First, there is no code in common with CSO. Second, the file structure is
completely different. Other than that, they're pretty much identical.
Lets start with the configuration (.cnf) file. It is similar to the
prod.cnf CSO file, except the field numbers are completely different, the
max size and merge option fields (fields 3 and 5) are ignored but kept for
CSO compatability. It looks like:
Version 1 limits the attributes to Indexed, Lookup, Public and Default.
There are two database files: the index (.index) and the data (.data)
files. The index file is a fixed-length indexed file that contains the
contents of data fields with the Indexed attribute. It has 3 fields:
Keyword: 25 character keyword (name, etc.) to look up
Field: 2 digit field number that the keyword came from
ID: 8 digit foreign key to data file
A single key is made up of the Keyword+Field fields.
The data file is a variable-length indexed file that contains the various
data elements to retrieve. It has 4 fields:
ID: 8 digit identifier
Field: 2 digit field number
Sequence: 2 digit sequence number (00-99, probably can overflow to ZZ)
Attributes: 1 digit encoded attribute set
Data: 1-120 characters of data
A single key is made up of the ID+Field+Sequence fields.
The maximum size of a field is 120 x 100 characters, usually organized as
up to 100 lines of up to 120 characters each, although clients may add a
layer of encoding that allows concatenation of records.
Getting started.
The QI_BUILD program expects to see a file in the same format as the data
file described above. There are a couple of reasons for this:
* there are going to be lots of raw data file formats and I can only pick one
* programs (such as build) can act on the .dat file or the .data file
* a dump program is not necessary
The QI_MAKE program will convert most fixed-length field sequential data
files to the QI_BUILD data file format. The MAKE program reads a data file
(input.QI_MAKE) that describes the input file format and the translations
of fields to field number/data.
The format of MAKE.DAT is:
start character, length, field number, capitalize, blank when zero, pre, post,
start character is the start column of the field
length is the length of the field
field number is the .CNF field number associated with this field
capitalize is 1 or 0; if 1, a capitalization algorithm is applied to the field
blank when zero will omit the field if it contains only zeros
pre places a character string at the start of the field
post places a character string at the end of the field
Fields that are blank are not written.
Procedure to create a database:
The command to run MAKE read the file INPUT and write the file OUTPUT is
MAKE := $device:[path]QI_MAKE.EXE
MAKE INPUT OUTPUT [sequence]
Sequence is the base of the internal ID numbers given to each record. It
can be up to 8 digits and if omitted defaults to 0. [For the California
Community Colleges, I strongly suggest you use your college or district
number as the first three digits of the id field followed by 00000.]
As it runs, QI_MAKE prints the ID number every hundred input records.
Given a data file that has a record format something like:
811000010200Tanner Bruce
You can then run the build program that will build the .INDEX file with all
the indexable fields. If you wish, build will also create the .DATA file
(although running convert may be faster).
The syntax for build is
BUILD := $device:[path]QI_BUILD.EXE
BUILD input [/DATA] [/OUTPUT=output]
QI_BUILD reads the field definitions (input.CNF), input data (input.DAT)
and creates an index file (output.INDEX) and optionally a data file
(output.DATA).
The nameserver uses four logical names that must be defined /system/exec.
These logical names are not used by QI_MAKE or QI_BUILD.
CSO_CONFIG points to the .CNF file
CSO_INDEX points to the .INDEX file
CSO_DATA points to the .DATA file
CSO_LOG points to the usage log file
CSO_SITEINFO points to a file that gives the siteinfo output.
The nameserver is designed to run as a "forked" or "inetd" style process
under MULTINET_SERVER. To do this, you run the MultiNet server
configuration program:
$ multinet config/server
SERVER-CONFIG>add cso
[Adding new configuration entry for service "CSO"]
Protocol: [TCP]
TCP Port number: 105
Program to run: device:[path]qi.exe
[Added service CSO to configuration]
SERVER-CONFIG>exit
You may also perform a RESTART command to restart the MULTINET_SERVER with
the new CSO definition.
At this point you should be able to access the namserver via telnet, ph, or
gopher (with the appropriate link entry). The server currently supports
the 'anonymous' (read-only) mode commands. The query command semantics are
a little different from those of the CCSO nameserver.
There are two 'modes' that the query command will operate under. In 'exact'
mode, an Indexed field is searched exactly and whatever is found is returned.
If 'exact' mode is off, an Indexed field is searched first exactly; if nothing
is found, it is searched for any keys that start with the query value. A name
field is then searched on soundex value if the first two searches don't find
anything.
Name field searches also automatically perform a nickname search.
There are two global modes thet qi runs under: exact and debug. These modes
are defined by the SET command. SET EXACT=ON sets the exact mode described
above. SET DEBUG=ON tells qi to emit internal debugging information.
SET EXACT=OFF and SET DEBUG=OFF reset these modes.