Copyright (c)  1994, 1995, 2002  Timothy Rue (3seas@threeseas.net)

  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation; with no
  Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

  A copy of the license is included in the file fdl.html

-------------------------------------------------------------------------------

                            (PK) Place-Keeper

  Brief:

    PK - Track and alter a VIC reference data and sequence position.


  Specific:

   (PK) Place-Keeper - The concept of the Place-Keeper is to keep track of the
        reference data and sequence position of a VIC instance parts including
        itself. It does this through a PK-file. PK can also directly alter the
        contents of the PK-file and change to another PK-file.
            The PK-file might be considered a process and environment type of
        file. The PK-file is intended to always be changing, by at least the
        changing SF running file@line# stack but in other ways too. Due to this
        the actual PK-file is only updated, saved, at selected times. If a watch
        window is open, then the contents of the watch window is always updated.
            The purpose of the PK-file, other than just keeping track of a VIC
        reference data and sequence position, is to allow snap-shots or frames
        of a VIC process to be taken and at selected positions in a VIC process
        sequence. Doing this allows a VIC process to be set aside, a frame to be
        saved, and picked up later or passed on to one or more VICs to continue.
        This makes possible many types of processing, such as using the concept
        of sub-processes, parallel or network processing, tree or parent/child
        processing, etc. All done with the PK-file while also having the ability
        to communicate, pass data and processes between VICs. And all of this is
        done by simply changing the contents of the PK-file or the PK-file
        itself via the PK command.
            The best way to describe the PK-file and PK command is to take a
        look at the file, go over it line by line and how to change the lines
        using the PK command.

 The PK-file structure:
----------------------------------------------------------

 AI: AI-name.# ; PK-file & path/dir. ; Current Directory

 PK: PK-filename ; last/alt. PK-filename ; opt. default PK-filename

 OI: OI-filename ; last/alt. OI-filename ; opt. default OI-filename

 IP: device, preprocess, Tag, BoI, EoI ; opt. last/alt. set ; default set

 OP: device, postprocess, Tag, BoO, EoO ; opt. last/alt. set ; default set

 SF: SF-LPC flags ; last/alt. flags ; SF-filename@line#
   : SF-filename@line#,....>running stack>

 IQ: IQ flags ; last/alt. flags ; IQ-filename@line#
   : IQ-filename@line#,....>running stack>

 ID: ID flags ; last/alt. flags ; ID-filename@line#
   : ID-filename@line#,....>running stack>

 KE: Master-teeth ; last/alt. M-teeth ; KE-filename
   : opt. last/alt. set

----------------------------------------------------------


 PK-File - Line, Field and PK Command descriptions:
 ==================================================

    The beginning two letters and colon (i.e. "AI:") are to identify the lines
    and related command. Where there is a following line with just a beginning
    colon `:', these are lines related to the previous line and command. This
    format is for the users benefit.


 GENERAL COMMANDS:
 -----------------

    "PK -?"

        Opens the hypertext help system window, at PK help. (???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for PK help which may contain an external call to load a web browser
        and hypertext/html PK help page.)


    "PK -s [opt path:][opt. filename]"

        Saves "frame", PK-file with optional new filename. A path may be
        specified. This does NOT change the current PK-file name within the
        continuing PK-file. But it does change, if new filename, the listed
        current PK-filename in the new file. With no path option used, the file
        is written to the "current directory". If the current directory or path
        is another VIC room and the file already exist, an error happens and
        follows the standard error process of "VIC is put into step mode, the SF
        user interface is opened to the error causing line and the error window
        list the error." If the current directory or path is a non-VIC room or
        the executing VIC then the file is written over any existing file by the
        same name, unless the file is write protected causing the standard error
        process to happen.

        Note: this command is a forced save and functions differently than the
        auto-save that happens.


    "PK -rn [opt. filename]"

        Rename PK-file. If no filename is given, the current filename extension
        is removed, if exist or other than an auto-count value, and a three
        place extension is added. This consists of ".pk" and a count value range
        of from 0-9 then A-Z (case insensitive but done in Caps.) For a total of
        36 different versions of a filename. This count repeats, should the
        count go beyond "Z" and can be set, or reset, to any auto extension
        value by simply using this command with the specific filename and
        extension value. This does not save the file but only renames it within
        the PK-file and is the name used during auto-save or forced save without
        a filename given.


    "PK -del filename"

        Deletes given filename. No path is allowed and it only works on "room"
        files not delete protected. If the file does not exist or is a delete
        protected file, an error message will be posted to the error window and
        the VIC process will continue. This is a simple built-in delete. This
        works on any "room" file.


    IN THE FOLLOWING COMMANDS, THE USE OF:
    --------------------------------------

        "-r" for "r"eturn

        "-c" for "c"reate, "c"hange, "c"ancel



 AI: LINE DESCRIPTION:
 =====================

    AI: AI-name.# ; PK-file directory ; Current Directory
    -----------------------------------------------------

        This line contains information relative to the existence of this VIC.
		It's name.#, where it got the PK-file from, and current directory.


    COMMANDS:
    --------

    "PK AI -?"

        Opens the hypertext help system window, at "PK AI" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK AI" help which may contain an external call to load a web
        browser and hypertext/html PK AI help page.)

    "PK AI -r"

        Returns this AI: line.


    AI: FIELD 1 DESCRIPTION:
    ------------------------

    AI-name.#

        This is the specific VIC name and number, it is also the directory name
        of the specific VIC. The only time this field changes is in the event
        this PK-file is given to another VIC, where it will be giving that VIC
        name and number. This is an automatic field change.


    COMMAND:
    --------

    "PK AI -r1"

        Returns this "AI-name.#".


    AI: FIELD 2 DESCRIPTION:
    ------------------------

    PK-file directory

        This is the directory where this PK-file was obtained. Keep in mind that
        when a PK-file is auto-saved, it is saved (unless otherwise noted to be
        the VIC-HOME directory "assignment", i.e. VIC-HOME:AI-name.#) to it's
        room directory. But any PK-file loaded from it's "room" or the VIC-HOME
        directory "assignment" will NOT have this field updated. Recall, if the
        PK-file is obtained from the VIC-HOME directory but not through the
        VIC-HOME "assignment" this will be as though it is NOT from the
        VIC-HOME. This is an automatic field change and contains the complete
        path to the directory the PK-file was obtained from.


    COMMAND:
    --------

    "PK AI -r2"

        Returns this "PK-file directory and path"


    AI: FIELD 3 DESCRIPTION:
    ------------------------

    Current Directory

        This is the "current directory" and followed in the "search path"
        sequence, as stated in the AI command reference. This field contains the
        complete path to this directory.


    COMMANDS:
    ---------

    "PK AI -r3"

        Returns this "current directory and path"


    "PK AI -c3"

        Causes current directory to be the VIC room directory, if not already.


    "PK AI -c3 new.dir"

        Sets the current directory to given directory. If the directory does not
        exist the standard error process happens.


 PK: LINE DESCRIPTION:
 =====================

    PK: PK-filename ; last/alt. PK-filename ; opt. default PK-filename
    ------------------------------------------------------------------

        This line contains the current PK-filename (self-reference), the last or
    an alternate PK-filename, as well as an optional default PK-filename.


    COMMANDS:
    ---------

    "PK PK -?"

        Opens the hypertext help system window, at "PK PK" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for PK help which may contain an external call to load a web browser
        and hypertext/html PK help page.)


    "PK PK -r"

        Returns this PK: line.


    "PK PK -c [PK: line]"

        This in effect does several of the below mentioned actions. It is a way
        of handing PK the whole PK line (all three fields of the PK line). First
        loads in the PK-file, then last/alt. PK-file, then the default PK-file,
        Going thru and creation and error processes.

        ****
        If no "PK: line" argument is given it does the same thing as the
        following "PK PK -c1" command does except it DOES Auto-save the
        current PK-file before loading in the prev./alt. or default PK file.


    "PK PK"

        Toggle or switches PK line Field 1 and 2 contents. Contents of Field 1
        becomes content of Field 2 and vice versa. If field 2 is empty then the
        default PK-file is used. It the default does not exist, it is created,
        going thru the creation and error process.


    PK: FIELD  1 DESCRIPTION:
    -------------------------

    PK-filename

        This is the current PK-file in use with this VIC. This is
        self-referencing, the name of this file.


    COMMANDS:
    ---------

    "PK PK -r1"

        Returns the current PK-filename.


    "PK PK -c1"

        Drops the current PK-file contents and loads in the last/alt PK-file,
		if exist, otherwise loads in the default PK-file. If the default does
        not exist it is created, following the method listed in the AI command
        reference for default PK-file creation. This includes the use of
        VIC-HOME:, PATH: and error actions.

        *** This command does NOT update the last/alt. PK-filename position in
        the PK-file it loads. ***

            In a simple way, this command might be used to traverse a circular
        linked-list of PK-files. But used along with other commands and
        variables, more complex movement can be done. Keep in mind that the
        PK-files are snap-shots or frames of a process and environment, and at
        selected point in the process, processes that may also be circular.


    "PK PK -c1 PK-filename"

        Saves the current PK-file and makes the given PK-file the current. This
        also updates the now current PK-file's "last/alt. PK-filename" with the
        saved PK-filename. If the given PK-filename does not exist it is created
        following the method listed in the AI command reference. This includes
        the use of VIC-HOME:, PATH: and error actions.


    PK: FIELD 2 DESCRIPTION:
    ------------------------

    last/alt. PK-filename

        This is the last used or alternate PK-file used by this VIC.


    COMMANDS:
    ---------

    "PK PK -r2"

        Returns the last/alt. PK-filename


    "PK PK -c2"

        Removes the last/alt. PK-filename from the PK-file.


    "PK PK -c2 PK-filename"

        Sets the last/alt. PK-filename to the given PK-filename. If the given
        PK-filename does not exist it is created following the method listed in
        the AI command reference. This includes the use of VIC-HOME:, PATH: and
        error actions.


    PK: FIELD 3 DESCRIPTION:
    ------------------------

    opt. default PK-filename

        This is the optional default PK-file used by this VIC.


    COMMANDS:
    ---------

    "PK PK -r3"

        Returns the "Default PK-filename".


    "PK PK -c3"

        Removes the "Default PK-filename" from the PK-file.


    "PK PK -c3 PK-filename"

        Sets the "Default PK-filename" to the given PK-filename. If the given
        PK-filename does not exist it is created following the method listed in
        the AI command reference. This includes the use of VIC-HOME:, PATH: and
        error actions.


 OI: LINE DESCRIPTION:
 =====================

    OI: OI-filename ; last/alt. OI-filename ; opt. default-filename
    ---------------------------------------------------------------

        This line contains the current OI-filename, the last or alternate
    OI-filename, as well as an optional default OI-filename. The OI-file
    contains the list of variables, opt. variable class and variable value,
    used by user defined processes.


    COMMANDS:
    ---------

    "PK OI -?"

        Opens the hypertext help system window, at "PK OI" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK OI" help which may contain an external call to load a web
        browser and hypertext/html "PK OI" help page.)


    "PK OI -r"

        Returns this OI: line


    "PK OI -c"

        Causes the OI line to reset to default values. Which is default-filename
        in field 1 position. If the file does not exist, it is created.


    "PK OI -c [OI: line]"

        Changes the OI line to the values given.


    "PK OI"

        Toggles or switches OI line Fields 1 and 2 contents. Contents of Field 1
        becomes content of Field 2 and vice versa. If field 2 is empty the then
        the default-file is use. If it does not exist then it is created.


    OI: FIELD 1 DESCRIPTION:
    ------------------------

    OI-Filename

        This is the currently accessed OI-file within this VIC.


    COMMANDS:
    ---------

    "PK OI -r1"

        Returns the current OI-filename.


    "PK OI -c1"

        Removes the current OI-filename from the PK-file. In doing this, the
        last/alt. OI-filename is moved to the current OI-filename position, if
        exist. Otherwise, the default OI-filename is copied to the current
        OI-filename position. If the default does not exist, it is created and
        placed in the VIC room.


    "PK OI -c1 OI-filename"

        Sets the current OI-Filename to the given OI-filename. This command
        also updates the last/alt. OI-filename to the previous current
        OI-filename. If the given OI-file does not exist, it is created
        following the standard file creation and use of VIC-HOME:, Path:
        and error actions.


    OI: FIELD 2 DESCRIPTION:
    ------------------------

    last/alt. OI-filename

        This is the last or alternate OI-file accessed within this VIC.


    COMMANDS:
    ---------

    "PK OI -r2"

        Returns the last/alt. OI-filename.


    "PK OI -c2"

        Removes the last/alt. OI-filename from the PK-file.


    "PK OI -c2 OI-filename"

        Sets the last/alt. OI-File to the given OI-filename. If the
        OI-file does not exist, it is created following the standard file
        creation and use of VIC-HOME:, Path: and error actions.


    OI: FIELD 3 DESCRIPTION:
    ------------------------

    opt. default OI-filename

        This is the optional default OI-file within this VIC.


    COMMANDS:
    ---------

    "PK OI -r3"

        Returns the optional/default OI-filename.


    "PK OI -c3"

        Removes the opt/default OI-filename from the PK-file.


    "PK OI -c3 OI-filename"

        Sets the opt/default OI-Filename to the given OI-filename. If the given
        OI-file does not exist, it is created following the standard file
        creation and use of VIC-HOME:, Path: and error actions.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 NOTE: In the following IP: and OP: LINE DESCRIPTION...

 "Device" is any device that can generate output and/or receive input
 (respective of InPut or OutPut Line. These may be pipes (named or unnamed) or
 files or devices like stdin/stdout, serial port, internet related port, etc..
 It should be formatted in terms of how you would use it in a typical command
 shell. I.E. ">>file", "ser:", "|sort", etc..

 "preprocessor" and "postprocessor" are optional field that name any program
 the input or output is to be processed by before reaching its designation of
 input variable or output direction/device. If used it is applied before the
 following BoI, EoI, BoO, EoO filtering characters/patterns/offsets are.

 "Tag" is really just an optional tag to be used as the user sees fit, but is
 associated  to variables (OI file contents) created and used by a VIC instance.

 BoI = Beginning of Input character(s)/pattern/offset
 EoI = End of Input character(s)/pattern/offset
 BoO = Beginning of Output character(s)/pattern/offset
 EoO = End of Output character(s)/pattern/offset

 These are optional character(s)/pattern matching to determine when input and
 output begins and ends. i.e. BoI = "cat" and EoI = "dog" [must be quoted] and
 with the input string of  "the cat chased the mouse while being chased by the
 dog, Rover" the input received would be "cat chased the mouse while being
 chased by the dog". Perhaps there should be a way to determine whether or not
 to include named characters? i.e. -"cat" +"dog" would output "chased the mouse
 while being chased by the dog". Also offset values may be used instead of, or
 along with, quoted patterns by using unquoted numerical values, where if used
 w/o quoted pattern determines the offset of the beginning and/or end of input/
 output relative to the beginning of input/output. But if used with quoted
 pattern(s), then it's the first pattern match after offset, that begins or end
 used input/output.

 The BoI/O and EoI/O pattern matching range will be a set or subset of the
 IQ commands pattern matching abilities. These pattern matching abilities
 will be something following standards already in use.

 Thought note:
 It may be useful to make OI variable files compatible/interchangeable with
 KE files. If I recall, that was one of the whys behind the thought of adding a
 "class/tag" to a variable.
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


IP: LINE DESCRIPTION:
=====================

    IP: device, preprocess, Tag, BoI, EoI ; opt. last/alt. set ; default set
    --------------------------------------------------------------------------

        This line contains information relative to input as it pertains to the
    OI command (the command for creating and manipulating files of variables
    and the contents of these variables.) The output device for input to be
    received from, an optional preprocessor stage (this may be another input/
    output program or even another VIC), an optional content Tag, the optional
    "Beginning of Input" (BoI) character(s)/pattern/offset set and the "End of
    Input" (EoI) character(s)/patterns/offset set. It also contains an optional
    last/alternate full set of the above as well as a default set.


    COMMANDS:
    ---------

    "PK IP -?"

        Opens the hypertext help system window, at "PK IP" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK IP" help which may contain an external call to load a web
        browser and hypertext/html "PK IP" help page.)


    "PK IP -r"

        Returns this IP: line


    "PK IP -c"

        Causes the IP: line to reset to default value, which is only
        "stdin,,,," in field 1 position.


    "PK IP -c [IP: line]"

        Changes the IP line to the values given.


    "PK IP"

        Toggles or switches IP line Fields 1 and 2 contents. Contents of Field 1
        becomes content of Field 2 and vice versa. If field 2 is empty then the
        default value of "stdin,,,," is used.


    IP: FIELD 1 DESCRIPTION:
    ------------------------

    device, preprocess, Tag, BoI, EoI

        This is the current IP-set accessed within this VIC.


    COMMANDS:
    ---------

    "PK IP -r1"

        Returns the current IP-set.


    "PK IP -c1"

        Removes the current IP-set from the PK-file. In doing this, the
        last/alt. IP-set is moved to the current position, if exist. Otherwise,
        the default IP-set is copied to the current position.  If the default
        does not exist, it is created as simply "stdin,,,,".


    "PK IP -c1 IP-set"

        Sets the current IP-set position to the given IP-set. This command also
        moves to the last/alt. IP-set position the prior "current" IP-set (The
        IP-set being replaced). If the given IP-set does not contain a device
        then the device position is set to stdin.


    IP: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. IP-set

        This is the last or alternate IP-set accessed within this VIC.


    COMMANDS:
    ---------

    "PK IP -r2"

        Returns the last/alt. IP-set.


    "PK IP -c2"

        Removes the last/alt. IP-set from the PK-file.


    "PK IP -c2 IP-set"

        Sets the last/alt. IP-set to the given IP-set. If the IP-set does not
        contain a device then the device position is set to stdin.


    IP: FIELD 3 DESCRIPTION:
    ------------------------

    default IP-set

        This is the optional default IP-set within this VIC.


     COMMANDS:
    ---------

    "PK IP -r3"

        Returns the optional/default IP-set.


    "PK IP -c3"

        Removes the opt/default IP-set from the PK-file.


    "PK IP -c3 IP-set"

        Sets the opt/default IP-set to the given IP-set. If the given IP-set
        does not contain a device then the device position is set to stdin.


 OP: LINE DESCRIPTION:
 =====================

    OP: device, postprocess, Tag, BoO, EoO ; opt. last/alt. set ; default set
    ---------------------------------------------------------------------------

        This line contains information relative to Output as it pertains to the
    Specific VIC instance SF command processor. The device to send SF command
    processor output to, an optional postprocessor stage (this may be another
    input/output program or even another VIC), an optional Content Tag, the
    optional "Beginning of Output" (BoO) character(s)/pattern/offset set and
    the "End of Output" (EoO) character(s)/patterns/offset set. It also contains
    an optional last/alternate full set of the above as well as a default set.


    COMMANDS:
    ---------

    "PK OP -?"

        Opens the hypertext help system window, at "PK OP" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK OP" help which may contain an external call to load a web
        browser and hypertext/html "PK OP" help page.)


    "PK OP -r"

        Returns this OP: line


    "PK OP -c"

        Causes the OP: line to reset to default value, which is only
        "stdout,,,," in field 1 position.


    "PK OP -c [OP: line]"

        Changes the OP line


    "PK OP"

        Toggles or switches OP line Fields 1 and 2 contents. Contents of Field 1
        becomes content of Field 2 and vice versa. If field 2 is empty then the
        default value of "stdout,,,," is used.


    OP: FIELD 1 DESCRIPTION:
    ------------------------

    device, postprocess, Tag, BoO, EoO

        This is the current OP-set accessed within this VIC.


    COMMANDS:
    ---------

    "PK OP -r1"

        Returns the current OP-set.


    "PK OP -c1"

        Removes the current OP-set from the PK-file. In doing this, the
        last/alt. OP-set is moved to the current position, if exist. Otherwise,
        the default OP-set is copied to the current position.  If the default
        does not exist, it is created as simply "stdout,,,,".


    "PK OP -c1 IP-set"

        Sets the current OP-set position to the given OP-set. This command also
        moves to the last/alt. OP-set position the prior "current" OP-set (The
        IP-set being replaced). If the given OP-set does not contain a device
        then the device position is set to stdout.


    OP: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. OP-set

        This is the last or alternate OP-set accessed within this VIC.


    COMMANDS:
    ---------

    "PK OP -r2"

        Returns the last/alt. OP-set.


    "PK OP -c2"

        Removes the last/alt. OP-set from the PK-file.


    "PK OP -c2 OP-set"

        Sets the last/alt. OP-set to the given OP-set. If the OP-set does not
        contain a device then the device position is set to stdout.


    OP: FIELD 3 DESCRIPTION:
    ------------------------

    default OP-set

        This is the optional default OP-set within this VIC.


     COMMANDS:
    ---------

    "PK OP -r3"

        Returns the optional/default OP-set.


    "PK OP -c3"

        Removes the opt/default OP-set from the PK-file.


    "PK OP -c3 OP-set"

        Sets the opt/default OP-set to the given OP-set. If the given OP-set
        does not contain a device then the device position is set to stdout.


 SF: LINES DESCRIPTIONS:
 =======================

    SF: SF-LPC flags ; last/alt. flags ; SF-filename@line#
      : SF-filename@line#,....>running stack>
    -------------------------------------------------------

    The SF running stack always shows the "next" file@line# to be processed.
    Field 3 can be empty or contain just an SF-filename or an SF stack of
    filenames and/or "stdin", "IQ-out" or "ID-out".

    SF-LPC FLAGS:
    **** The setting of flags should work in a manner that adding or subtracting
    a flag changes the value of the position for which that flag belongs.
    See "sf-lpc-flags.html" for possible flags.


    COMMANDS:
    ---------

    "PK SF -?"

        Opens the hypertext help system window, at "PK SF" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK SF" help which may contain an external call to load a web
        browser and hypertext/html "PK SF" help page.)


    "PK SF -r"

        Returns this first SF: line


    "PK SF -c"

        Causes the SF: line to reset to default values, default flags in field
        1, field 2 left blank and "SF-default-filename" in field 3 position. If
        SF-default-file does not exist and the SF-stack is empty then SF is put
        into interactive mode and field 3 is set to stdin.


    "PK SF -c [SF: line]"

        Changes the first SF: line to the values given.


    "PK SF"

        Toggles or switches SF line Fields 1 and 2 contents.
        Contents of Field 1 becomes content of Field 2 and vice versa.
        If field 2 is blank then default flag values are used.


    SF: FIELD 1 DESCRIPTION:
    ------------------------

    SF-LPC flags

        This is the current SF-LPC flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK SF -r1"

        Returns the current SF-LPC flags.


    "PK SF -c1"

        Removes the current SF-LPC flags from the PK-file. In doing this, the
        last/alt. SF-LPC flags are moved to the current position, if exist.
        Otherwise, the default SF-LPC flags are written to the current position.


    "PK SF -c1 [SF-LPC flags]"

        Sets the current SF-LPC flags position to the given SF-LPC flags. This
        command also moves to the last/alt. SF-LPC flags position the prior
        "current" SF-LPC flags (The SF-LPC flags being replaced).


    SF: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. flags

        This is the last or alternate SF-LPC flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK SF -r2"

        Returns the last/alt. SF-LPC flags.


    "PK SF -c2"

        Clears the last/alt. SF-LPC flags from the PK-file.


    "PK SF -c2 [SF-LPC flags]"

        Sets the last/alt. SF-LPC flags to the given SF-LPC flags.


    SF: FIELD 3 DESCRIPTION:
    ------------------------

    SF-filename@line#

        This is the default SF-file and line number to use in this VIC. It is
        the default starting position to use when the SF stack is empty (this
        is what "empty" is replaced with. This value can contain a stack of
        SF-filename@line# values. If this value is empty when the stack is, the
        stack gets set to "stdin" and a current SF-LPC flag is automatically
        set to interactive mode.


     COMMANDS:
    ---------

    "PK SF -r3"

        Returns the contents of this field 3.


    "PK SF -c3"

        Clears the contents of this field 3 from the PK-file.


    "PK SF -c3 [SF-filename@line#,....]"

        Sets field 3 to the given SF-filename@line# value(s).


    SF: FIELD 4 DESCRIPTION (second line):
    ------------------------

    SF-filename@line#,...> running stack>

        This is the SF-file running stack in use in this VIC. If this value is
        empty and field 3 is also empty then the stack gets set to "stdin" and
        a current SF-LPC flag is automatically set to interactive mode.

        The SF running stack always shows the "next" file@line# to be processed.


    COMMANDS:
    ---------

    "PK SF -r4"

        Returns the contents of this field 4.


    "PK SF -c4"

        Clears the contents of this field 4 from the PK-file.


    "PK SF -c4 [SF-filename@line#,...]"

        Sets field 4 to the given SF-filename@line#,... value(s).


 IQ: LINES DESCRIPTIONS:
 =======================

    IQ: IQ flags ; last/alt. flags ; IQ-filename@line#
      : IQ-filename@line#,....>running stack>
    --------------------------------------------------

    The IQ running stack always shows the "next" file@line# to be processed.
    Field 3 can be empty or contain just an IQ-filename or an IQ stack of
    filenames.

    IQ FLAGS:
    **** The setting of flags should work in a manner that adding or subtracting
    a flag changes the value of the position for which that flag belongs. See
    the stand alone IQ program for flag possibilities (which may and will likely
    change when IQ is integrated into the rest of the VIC).


    COMMANDS:
    ---------

    "PK IQ -?"

        Opens the hypertext help system window, at "PK IQ" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK IQ" help which may contain an external call to load a web
        browser and hypertext/html "PK IQ" help page.)


    "PK IQ -r"

        Returns this first IQ: line


    "PK IQ -c"

        Causes the IQ: line to reset to default values, default flags in field
        1, field 2 left blank and "IQ-default-filename" in field 3 position. If
        the IQ-default-file does not exist then IQ won't have any output except
        for error out that file does not exist (if error out flag is set).


    "PK IQ -c [IQ: line]"

        Changes the first IQ: line to the values given.


    "PK IQ"

        Toggles or switches IQ line Fields 1 and 2 contents.
        Contents of Field 1 becomes content of Field 2 and vice versa.
        If field 2 is blank then default flag values are used.


    IQ: FIELD 1 DESCRIPTION:
    ------------------------

    IQ flags (current)

        This is the current IQ flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK IQ -r1"

        Returns the current IQ flags.


    "PK IQ -c1"

        Removes the current IQ flags from the PK-file. In doing this, the
        last/alt. IQ flags are moved to the current position, if exist.
        Otherwise, the default IQ flags are written to the current position.


    "PK IQ -c1 [IQ flags]"

        Sets the current IQ flags position to the given IQ flags. This
        command also moves to the last/alt. IQ flags position the prior
        "current" IQ flags (The IQ flags being replaced).


    IQ: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. flags

        This is the last or alternate IQ flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK IQ -r2"

        Returns the last/alt. IQ flags.


    "PK IQ -c2"

        Clears the last/alt. IQ flags from the PK-file.


    "PK IQ -c2 [IQ flags]"

        Sets the last/alt. IQ flags to the given IQ flags.


    IQ: FIELD 3 DESCRIPTION:
    ------------------------

    IQ-filename@line#

        This is the default IQ-file and line number to use in this VIC. It is
        the default starting position to use when the IQ stack is empty (this
        is what "empty" is replaced with. This value can contain a stack of
        IQ-filename@line# values. If this value is empty when the stack is, then
        IQ outputs nothing or an error message that no IQ-file is given (when
        error out flag is set.)


    COMMANDS:
    ---------

    "PK IQ -r3"

        Returns the contents of this field 3.


    "PK IQ -c3"

        Clears the contents of this field 3 from the PK-file.


    "PK IQ -c3 [IQ-filename@line#,....]"

        Sets field 3 to the given IQ-filename@line# value(s).


    IQ: FIELD 4 DESCRIPTION (second line):
    ------------------------

    IQ-filename@line#,...> running stack>

        This is the IQ-file running stack in use in this VIC. If this value is
        empty then it gets set to the value of IQ field 3 upon the use of the IQ
        command. If field 3 is also empty then IQ output nothing or an error
        message that no IQ-file is given (if error out flag is set).

        The IQ running stack shows the next file@line# to be processed.
        When the IQ command is issued then the SF stack has "IQ-out" added to
        the stack to indicate where it is getting it's input from.


    COMMANDS:
    ---------

    "PK IQ -r4"

        Returns the contents of this field 4.


    "PK IQ -c4"

        Clears the contents of this field 4 from the PK-file.


    "PK IQ -c4 [IQ-filename@line#,...]"

        Sets field 4 to the given IQ-filename@line#,... value(s).


 ID: LINES DESCRIPTIONS:
 =======================

    ID: ID flags ; last/alt. flags ; ID-filename@line#
      : ID-filename@line#,....>running stack>
    --------------------------------------------------

    The ID running stack always shows the "next" file@line# to be processed
    Field 3 can be empty or contain just an ID-filename or an ID stack of
    filenames.

    ID FLAGS:
    **** The setting of flags should work in a manner that adding or subtracting
    a flag changes the value of the position for which that flag belongs. There
    is currently no reference for this but the functionality used to manipulate
    ID flags will be similar to IQ flag manipulation.


    COMMANDS:
    ---------

    "PK ID -?"

        Opens the hypertext help system window, at "PK ID" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK ID" help which may contain an external call to load a web
        browser and hypertext/html "PK ID" help page.)


    "PK ID -r"

        Returns this first ID: line


    "PK ID -c"

        Causes the ID: line to reset to default values, default flags in field
        1, field 2 left blank and "ID-default-filename" in field 3 position. If
        the ID-default-file does not exist then ID won't have any output except
        for error out that file does not exist (if error out flag is set).


    "PK ID -c [ID: line]"

        Changes the first ID: line to the values given.


    "PK ID"

        Toggles or switches ID line Fields 1 and 2 contents.
        Contents of Field 1 becomes content of Field 2 and vice versa.
        If field 2 is blank then default flag values are used.


    ID: FIELD 1 DESCRIPTION:
    ------------------------

    ID flags (current)

        This is the current ID flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK ID -r1"

        Returns the current ID flags.


    "PK ID -c1"

        Removes the current ID flags from the PK-file. In doing this, the
        last/alt. ID flags are moved to the current position, if exist.
        Otherwise, the default ID flags are written to the current position.


    "PK ID -c1 [ID flags]"

        Sets the current ID flags position to the given ID flags. This
        command also moves to the last/alt. ID flags position the prior
        "current" ID flags (The ID flags being replaced).


    ID: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. flags

        This is the last or alternate ID flags accessed within this VIC.


    COMMANDS:
    ---------

    "PK ID -r2"

        Returns the last/alt. ID flags.


    "PK ID -c2"

        Clears the last/alt. ID flags from the PK-file.


    "PK ID -c2 [ID flags]"

        Sets the last/alt. ID flags to the given ID flags.


    ID: FIELD 3 DESCRIPTION:
    ------------------------

    ID-filename@line#

        This is the default ID-file and line number to use in this VIC. It is
        the default starting position to use when the ID stack is empty (this
        is what "empty" is replaced with. This value can contain a stack of
        ID-filename@line# values. If this value is empty when the stack is, then
        ID outputs nothing or an error message that no ID-file is given (when
        error out flag is set.)


    COMMANDS:
    ---------

    "PK ID -r3"

        Returns the contents of this field 3.


    "PK ID -c3"

        Clears the contents of this field 3 from the PK-file.


    "PK ID -c3 [ID-filename@line#,....]"

        Sets field 3 to the given ID-filename@line# value(s).


    ID: FIELD 4 DESCRIPTION (second line):
    ------------------------

    ID-filename@line#,...> running stack>

        This is the ID-file running stack in use in this VIC. If this value is
        empty then it gets set to the value of ID field 3 upon the use of the ID
        command. If field 3 is also empty then ID output nothing or an error
        message that no ID-file is given (if error out flag is set).

        The ID running stack shows the next file@line# to be processed.
        When the ID command is issued then the SF stack has "ID-out" added to
        the stack to indicate where it is getting it's input from.


    COMMANDS:
    ---------

    "PK ID -r4"

        Returns the contents of this field 4.


    "PK ID -c4"

        Clears the contents of this field 4 from the PK-file.


    "PK ID -c4 [ID-filename@line#,...]"

        Sets field 4 to the given ID-filename@line#,... value(s).


 KE: LINE DESCRIPTION:
 =====================

    KE: Master-teeth ; last/alt. M-teeth ; KE-filename
      : opt. last/alt. set
    ---------------------------------------------------

    KE data is used by IQ and ID to cause additional constraints to be applied
    in what IQ and ID will output. Think of KE in terms of key to unlock access
    to specific knowledge/data, and Master-Teeth like Master-Keys that unlock
    many such knowledge/data parts. Having NO Master-Teeth defaults in a wild
    card '*' that matches all. Hence, the application of KEys causes specified
    constraints to be applied.

    Master Teeth:
    **** The setting of the Master Teeth ..... There is currently no reference
    for KE Master-Teeth but the functionality used to manipulate Master-Teeth
    should probably include, besides the default of replacing the complete
    Master-Teeth field, the option to add (+) a tooth "+tooth" from the list of
    Teeth and to remove (-) a tooth "-tooth" from the list. By just adding a '+'
    or '-' to the beginning of the tooth to add or subtract it from the
    Master-Teeth field. These would of course be used in the commands:
    "PK KE -c# [KE Master-Teeth]"  I.E. "PK KE -c1 -loose -tooth +dollar" would
    remove the Master-teeth "lose" and "tooth" and add the Master-tooth "dollar".

    Hint: In making the KE file compatible with the OI variable file it is
    likely that a Master tooth might be like a variable name that points to a
    variables contents that may contain key teeth (or more than one key.)


    COMMANDS:
    ---------

    "PK KE -?"

        Opens the hypertext help system window, at "PK KE" help.(???)
        (an AI command call to a VIC instance to run IQ on a VIC-help.iq file
        for "PK KE" help which may contain an external call to load a web
        browser and hypertext/html "PK KE" help page.)


    "PK KE -r"

        Returns this first KE: line


    "PK KE -c"

        Causes the KE: line to reset to default values, default Master-Teeth in
        field 1, field 2 left blank and "KE-default-filename" in field 3
        position. If the KE-default-file does not exist then KE won't have any
        constraining effect on IQ or ID usage.


    "PK KE -c [KE: line]"

        Changes the first KE: line to the values given.


    "PK KE"

        Toggles or switches KE line Fields 1 and 2 contents.
        Contents of Field 1 becomes content of Field 2 and vice versa.


    "PK KE x"

        Switches KE line 1 with KE Line 2.


    KE: FIELD 1 DESCRIPTION:
    ------------------------

    KE Master-Teeth (current)

        This is the current KE Master-Teeth accessed within this VIC.


    COMMANDS:
    ---------

    "PK KE -r1"

        Returns the current KE Master-Teeth.


    "PK KE -c1"

        Removes the current KE Master-Teeth from the PK-file. In doing this, the
        last/alt. KE Master-Teeth are moved to the current position.


    "PK KE -c1 [KE Master-Teeth]"

        Sets the current KE Master-Teeth position to the given ME Master-Teeth.
        This command also moves to the last/alt. KE Master-Teeth position the
        prior "current" KE Master-Teeth (The KE Master-Teeth being replaced).


    KE: FIELD 2 DESCRIPTION:
    ------------------------

    opt. last/alt. KE Master-Teeth

        This is the last or alternate KE Master-Teeth accessed within this VIC
        and KE line "set".


    COMMANDS:
    ---------

    "PK KE -r2"

        Returns the last/alt. KE Master-Teeth.


    "PK KE -c2"

        Clears the last/alt. KE Master-Teeth from the PK-file.


    "PK KE -c2 [KE Master-Teeth]"

        Sets the last/alt. KE Master-Teeth to the given KE Master-Teeth.


    KE: FIELD 3 DESCRIPTION:
    ------------------------

    KE-filename

        This is the KE-file to use in this VIC.


    COMMANDS:
    ---------

    "PK KE -r3"

        Returns the contents of this field 3.


    "PK KE -c3"

        Clears the contents of this field 3 from the PK-file.


    "PK KE -c3 KE-filename"

        Sets field 3 to the given KE-filename.


    KE: FIELD 4 DESCRIPTION (second line):
    ------------------------

    opt. last/alt. set

    This is an alternate or optional full set of the first line of KE
    "KE: Master-teeth ; last/alt. M-teeth ; KE-filename". There are no field
    manipulations built in for this second line. It is treated as only one field
    because you can exchange line 1 and 2, do manipulation and flip back if you
    need to manipulate the contents with built-in commands.  The semi-colon ';'
    is used to separate fields for line 1.


    COMMANDS:
    ---------

    "PK KE -r4"

        Returns the contents of this field 4.


    "PK KE -c4"

        Clears the contents of this field 4 from the PK-file.


    "PK KE -c4 [Master-Teeth; last/alt. Master-Teeth; KE-Filename]"

        Sets field 4 to the given KE value(s).