This program is used to mangle Quark and/or Xtags.

It scans its input directory and each file is processed according to a
parameter file specified either as the default or as the DY: FipHdr field.

There is also a question of where to send the output file as this, by default,
is put in spool/2go for IPWHEEL to distribute. So it needs a Destination(s) or
DU FipHdr field. This is added by either :
    - It there is a DX FipHdr field in the input file, that is used.
    - If not, the keyword 'dest' is used in the parameter file.
    - If that is not specified either, it is sent to 'woops' the Intercept queue. 
    - You may also specify it from the incoming data using the 'fiphdr' keyword.
        In this case the contents of DX, 'dest' or 'woops' will be the default if
there is no data.

The parameter file in tables/setup defaults to FORMAT and has the keywords:

    style: (name)   (sub keywords describing that style)
        subkeywords are :
            fiphdr:AA   dup:
            fiphdr:AB   dup:+
                The data with this style is also added as a FipHdr field.
                The 'dup' keyword allows for the data of multiple styles 
                all with the same FipHdr field. Any chr specified for 'dup'
                is used as the separator - space is the default.
            start:"\n-- Before --\n"
                Data (in FipSeq) to add when the style first occurs.
                Double quote for spaces.
                Data (in FipSeq) to add when the next style occurs.
            convertfield:   upper/lower/zapspcextra/zapspc
            stripfromdata:  If FipHdr is also specified for this field - strip from the
op of the data

        Where there are many style all starting with the same name, use a wildcard
'=' to denote all following.
        A single wildcard '=' can also be used Before any text for embedded names.
            eg  style:"= kop="    fiphdr:AH   dup:\073
            everything with SPACE 'kop' stuff into the FipHdr field AH
        There can be one and only style lines for a single style.
        Name is case-insensitive.
        Note that the Name can have embedded spaces - so put dbl quotes around the

        Styles which are labeled in the data but are not specified in the parameter
file are logged and ignored.
        Rows with no style labeled are assumed to be in the same style as the
previous row.
        eg :
            style:"Headline=" fiphdr:AA   dup:\073    stripfromdata:
            style:"Shares Head="  fiphdr:AA   dup:\073
            style:"Reverse="  fiphdr:AA   dup:\073

            style:"Caption="  fiphdr:AE   dup:+

            style:"Shares Price=" start:<table> end:</table>

    zapstyle: Nameof Style to ignore
            zapstyle:"Story Notes"
    pifont:(Font name)
            Zaps all characters in this font if specified OUTSIDE a Style
    pichr (chr) font:(FontName) replace:(replacment string)
            pichr:\035  font"Zapf Dingbats"   replace:(bullet)
            Zaps (or replaces) certain characters in this font if specified OUTSIDE a

    tag:(string)    data:(replacement string)
        Replace all occurences of any tagged string - such as special chrs - with the
replacement string.
        If the Tag is NOT specified it is stripped except for Chrs specified as
        decimal numbers which are translated into their correct chr.
                <\l> will be stripped if not specified.
                <\#124> will be converted to the chr '|'.
            tag:\-  data:-
            tag:\@  data:@
            Note that the 'string' is NOT FipSeq, so only one '\' is required.
        Zap this tag and ALL data until next occurance.
        Use this the remove all data in a particular mode which may be used as
        a Comment mode.

Other keywords :

    keepfiphdr: Normally the FipHdr of the incoming file is ignored unless
recreated with 'fiphdr'. Use this to presere the entire FipHdr of the input
file and stickon the top of the output.
    nofiphdr:   do NOT add a FipHdr to the output file. Any new FipHdr keywords are
            added without the tilde NL top and bottom.
    zapfiphdrfld:   Zap/delete this fiphdr field
            This is done to the incoming FipHdr BEFORE any extra fields are added.
    fiphdr:(2-letter code)  (optional FipSeq)
            Add a FipHdr with optional data

    preservetags:   Preserve any other tags. Default is to strip all tags.

    dest: (one or more Fip Destinations separated by space or '+')
            This can be overridden by the DX: FipHdr field. Note that all
            destinations MUST be in the tables/sys/USERS file. As per normal
            case is important, so ZAPME and zapme are 2 different destinations.
            eg. dest:logcopy+outquark.
    filename: (FipSeq)  New filename for the output file name.
    overwrite:  Where 'filename' has been specified, if there is already a file
            with that name in the output queue, it is deleted first.
    before: (FipSeq)    String to parse and add at the top of the file.
    after: (FipSeq)     String to parse and add at the end of the file.
    beffile: (Path/filename)    Contents of a file in FipSeq to parse and add at the
                    top of the file (after 'before')
    aftfile: (Path/filename)    Contents of a file in FipSeq to parse and add at the
                    bottom of the file (before 'after')
    number:octal|dec|hex    In FipSeq, make all escaped numbers Octal, Dec or Hex.
                default is octal
    extralocale: (2chr combinations)
            For changing uppercase to lower and vice versa, we can add to the normal
            by specifying a series of 2 letters which the lower then the upper.
            The lowercase chr is 1st then the upper, then a separator or space.
            eg  extralocale:aA,bB,cC,dD,\212\232,\213\237
            Normal a-z/A-Z are by default : in the example above they are included
            to give an idea of syntax

    chr:(octal/dec/hex number):(FipSeq string)
        Replace this single character with the string
        This can be a printable chr or an escaped number. The number is
        octal/dec/hex depending on the preceding 'number' keyword (if any).
        eg  chr:\313:(pound)    chr:<:&lt;
        Note that ALL data is changed INCLUDING the contents of 'before' etc.

Input parameters (all optional) are :
    -1 : filename for a single shot     default: spooled
or  -i : spooled input queue to scan    default: spool/2qtags

    -o : output queue           default: spool/2go
    -d : done queue for original raw data   default: none-input deleted
    -t : scan time for the directory    default: 1 sec
    -w : file wait time for files arriving  default: none
        across a network (for NFS, make about 10 secs)
    -l : log every new file pls     default: do NOT log
    -S : Splitter string for files which need
        to be split beforehand      default:none
        Use this for files like Atex Prestige Library extracts
        which are single files containing many items.
        These are split into a queue which is zapped afterwards.
    -z : name of the default parameter file default: tables/setup/QTAGS
    -v : print version no and exit

**************** Notes ***********************

**** NULs (characters of binary zero) are stripped from the output file.
    So a parameter like the following will have no effect at all !
        tag:ds  data:\000

**** Current Limitations are :
    No more than 2000 tags may be specified.

(copyright) 2017 and previous years FingerPost Ltd.