K This is a description of the VMS qi server and how it is different from the  CSO implementation.   J First, there is no code in common with CSO.  Second, the file structure isF completely different.  Other than that, they're pretty much identical.  D Lets start with the configuration (.cnf) file.  It is similar to theI prod.cnf CSO file, except the field numbers are completely different, the J max size and merge option fields (fields 3 and 5) are ignored but kept for" CSO compatability.  It looks like:  6 2:name:120:Full name.:O:Indexed:Lookup:Public:Default:  G Version 1 limits the attributes to Indexed, Lookup, Public and Default.   E There are two database files: the index (.index) and the data (.data) F files. The index file is a fixed-length indexed file that contains theE contents of data fields with the Indexed attribute.  It has 3 fields:   8 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  7 A single key is made up of the Keyword+Field+ID fields.   I 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 numberH Sequence:   2 digit sequence number (00-99, probably can overflow to ZZ)) Attributes: 1 digit encoded attribute set $ Data:       1-120 characters of data  8 A single key is made up of the ID+Field+Sequence fields.  I The maximum size of a field is 120 x 100 characters, usually organized as H up to 100 lines of up to 120 characters each, although clients may add a7 layer of encoding that allows concatenation of records.    Getting started.  I 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:  M * there are going to be lots of raw data file formats and I can only pick one E * programs (such as build) can act on the .dat file or the .data file ! * a dump program is not necessary   H The QI_MAKE program will convert most fixed-length field sequential dataK files to the QI_BUILD data file format.  The MAKE program reads a data file I (input.QI_MAKE) that describes the input file format and the translations  of fields to field number/data.    The format of MAKE.DAT is:N start character, length, field number, capitalize, blank when zero, pre, post,  0 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 fieldN 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 7 pre places a character string at the start of the field 6 post places a character string at the end of the field  & Fields that are blank are not written.     Procedure to create a database:   H 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]  I Sequence is the base of the internal ID numbers given to each record.  It H can be up to 8 digits and if omitted defaults to 0.  [For the CaliforniaG Community Colleges, I strongly suggest you use your college or district D number as the first three digits of the id field followed by 00000.]  E 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    K You can then run the build program that will build the .INDEX file with all I 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]  H QI_BUILD reads the field definitions (input.CNF), input data (input.DAT)C and creates an index file (output.INDEX) and optionally a data file  (output.DATA).    I The nameserver uses four logical names that must be defined /system/exec. 8 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.   H 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 2 [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  J You may also perform a RESTART command to restart the MULTINET_SERVER with the new CSO definition.   K At this point you should be able to access the namserver via telnet, ph, or H gopher (with the appropriate link entry).  The server currently supportsK the 'anonymous' (read-only) mode commands.  The query command semantics are 5 a little different from those of the CCSO nameserver.   L There are two 'modes' that the query command will operate under.  In 'exact'M mode, an Indexed field is searched exactly and whatever is found is returned.   N If 'exact' mode is off, an Indexed field is searched first exactly; if nothingN is found, it is searched for any keys that start with the query value.  A nameL field is then searched on soundex value if the first two searches don't find	 anything.   A Name field searches also automatically perform a nickname search.   L There are two global modes thet qi runs under: exact and debug.  These modesK are defined by the SET command.  SET EXACT=ON sets the exact mode described E above.  SET DEBUG=ON tells qi to emit internal debugging information. 2 SET EXACT=OFF and SET DEBUG=OFF reset these modes.  