This program feeds files to an Atex J11 system via NFS Gateway.

When started first goes and gets files :
    - The default parameter FORMAT file : tables/gateway/FORMAT     
    - The default J11 header        : tables/gateway/header/WIRE
                            or WIRE.HED-HEADER-SYS
    - The standard qdata parameter file : tables/gateway/QDATA
These defaults can be overridden using inputs switches defined below. 

The program scans a queue in spool - usually spool/2atex - and sends any files
to the J11 network. 

A maximum file size can be specified using the -B input switch. If a file that
is bigger arrives, it is logged and sent to the woops queue for a System
Manager to decide what to do. This is to stop people sending inappropiate files
over - like JPEG mailfiles or complete Quark Pages.

Incoming files are checked for FIP header fields :
    DH: J11 Header file to use if not default
    DF: Format or Translation table file if not the default.
        In particular, wire files brought in by the WIRE program generally use the
WIRE format, Mailbox uses BOX, Data formats uses FORM etc.
    DS: Supercede this file if it already exists. default: duplicate

If a FIP hdr field FNOHDR is present No J11 header will be added. The text will
be scanned/processed in the normal way.

If a FIP hdr field FBIN is present, the file is considered a complete file and
NO alterations will be made at all to either header or trailer.

If a FIP hdr field FBIN and FADDHDR are present, the data of the file is
considered complete but we need to add a Header.

The FORMAT parameter file is then used to determine how to process the text and
how to fill in which J11 header fields with FIP header fields and/or standing
text and/or system variables.

Syntax :
    ; comment
    name:   (fipseq for filename)   (end of line)
        This will be the J11 filename       default: \SN
    pchr:   (mode precedent chr)    (eoln)
        This allows {M0 to be roman on the J11, {M1 bold. default: '{'
    number: (dec, oct or hex)   (eoln)
        This allows escaped numbers specified in \000 type strings to 
        be decimal, octal or hex        default: octal.
    before: (fipseq)        (eoln)
        String to add before the text on the J11    default: none.
    after:  (fipseq)        (eoln)
        String to add after the text on the J11     default: none.
    dup:    ($ or inc or zeros)     (eoln)
        CCM like duplicates or incrementing names (see below) def:inc
    usa-date-format:    Date format should be MM/DD  (default is DD/MM)
        usa-data-format:no will also force it DD/MM
        See also the environment variable FIP_USA_DATE
    qdata:  (qdata param filename)  (eoln)
        Use this to specify either NO qdata - using a blank parameter
        or a different Qdata file in tables/gateway. See below.

  For each header field that needs filling in :
    hdr: (2 letter j11 header field) (space/tab) (fipseq for that hdr field)
  or for right justified fields :
    rhdr: (2 letter j11 header field) (space/tab) (fipseq for that hdr field)

Where fipseq is a sequence of fixed text, unix escape chrs, FIP header fields
and Octal chrs).

Note that values above octal 200 are invalid in the header and qdata and are
replaced by a '.'.

Files of the same name in a different queue are normally NOT overwritten - the
filename is altered depending on the 'dup:' keyword. 

If 'dup:inc' then the filename is incremented : if the name is 9 chrs long, the
last chr is incremented; if less than 9 chrs, an 'a' is suffixed to the name.
This is the default.

If 'dup:$' then the filename is changed to a CCM-like extention of $01 etc.

If 'dup:zeros' then the extension is forced to .000 up to .999

If a 'qdata' parameter file is specified then this is used to define QDATA on
the J11. If 'qdata' is specified WITHOUT a parameter (ie 'qdata: (eoln)), NO
qdata will be created. However if the parameter s NOT specified, the default
QDATA file is used.

The syntax of the QDATA file is :
    ; comment lines (eoln)
    (j11 hdr field) (colon) (size) (colon) (optional FIP hdr sequence) (eoln)

    where j11 hdr fields and FIP hdr sequences are as described above.
    where Size is the length of the field
    Fields are padded to the correct length with spaces
    ; comment
    ; no data needed for PA - leave as SPACES
    ; Priority

There a several Optional parameters, please see below :
    atex012: (char for j11 012 chr) (eoln)
    softquad: (char for a j11 soft end of line) (eoln)
    newdq:  (replacement Fip Hdr field for DQ containing the j11 q-g) (eoln)
    defaultquegrp:  (default j11 q-g if none specified or found in the DQ FipHdr
field ) (eoln)
    update: (j11 name-queue-group)  (eoln)
    updtop: (Text and/or FipSeq)    (eoln)
    updappend: (top / bottom)   (eoln)
    force:  (j11 queue-group)   (eoln)
    bcmsg:  (msg text)      (eoln)
    bclogon: (logon or logons)  (eoln)
    bcsys:  (j11 system)        (eoln)
    dir:    (directory name and parameters) (eoln)

ATEX012 is the 1st non-space character of the parameter is that used for any
Octal 12 atex chrs. The octal 12 chr is a NL which is what we normally use for
any Quad. This defaults to octal 220. The parameter can be a chr, unix escape
or octal number. The value is changed in the header, text and qdata.

SOFTQUAD is a character which will put the end-of-line mode on the next valid
character. The character can be a chr, unix escape chr or octal number. Take
case not to assign a value that you need ! The value is valid ONLY for text and
must not be 0/NUL.
    ie If an EndOfLine mode is required on a character that does not normally have
such a mode set, the 'softquad' chr will stick it on - ie if softquad is a
tilde :
    'rubb~ish' in the text will force an end of line on the 'i'.

The FORCE option will ignore the contents of the DQ: FIP header queue and will
attempt to place the file in this queue-group.

NEWDQ allows you to specify an alternative Fip Hdr field to 'DQ' which will
contain the J11 queue and group. This can also be a combination field with a
default :
    combie:AQ   EQ|QQ,junk-wir
This will look in EQ first; if there is no EQ, QQ is used; if there is no QQ,
the default is 'junk-wir'. Note if you have FORCE option, this is ignored

DEFAULTQUEGRP specifies a default j11 queue and group if the DQ FipHdr field
does not exists (or its replacement with 'newdq:' see above) or there is
nothing in the field.

There is also an option to UPDATE an existing J11 file. This uses the 'update'
parameter. In this case any existing file on the J11 is updated but not
    update:     (j11 name-queue-group)      default: none
The parameter to 'update' is the actual name-q-g to update. This can be a
    update: \VN
    where FIP hdr field VN will contain the full atex f-q-g.
If the j11 file is not found, in-use or is being created, a message is logged
and the file IGNORED. Any text in the rs6000 file is ignored. Any text in the
J11 file is preserved. Parameters 'name', 'after' and 'dup' are ignored.
UPDATE is normally used to change j11 header fields - file status for example.
UPDTOP allow you to add text at the TOP of the file (only where 'update' has
been specified).
    updtop:{M2 File modified on \$d-\$m-\$y \$h:\$n\002{M0
    To add the first lines of data in the rs6000 file to the j11 file :
UPDAPPEND will append the data from the rs6000 file either on TOP or on the
BOTTOM of the j11 file. The default is on Top. Again only where 'update' has
been specified.
or  updappend:bottom

Messages (as per Broadcast message) can be sent by specifying 3 parameters:
    bcmsg:      Msg text in FIP sequence    default: nothing
    bclogon:    J11 logon(s)            default: all logons
    bcsys:      J11 sys number          default: all systems

Directory(ies) can be created in queue spool/gdirs with a specific number of
lines of text. These can be called across from the J11 using IPGCALL. The
syntax for the directory is :
dir:(filename) items:(no of items) lines:(no of lines) top:(header line) fifo:
    where :
        The filename is the name of the directory in spool/gdirs
        items: number of files or items to keep in the directory if lifo
            The default is 100.
        lines: number of text lines (maximum) per item. The default is 3
        fifo:  make the directory first-in-first-out and ignore the
            items keyword.      default: lifo
        top:    FipSeq for the first or header line for each file. The
            Name, queue and group are always added as the first
            section of text. This parameter MUST be within double 
            quotes where spaces are embedded. eg :
            top:"\XP   \XC   \XK           \$h:\$n\"
        qmode:  Mode the queue-group is in. Normally this is hidden
            but may be revealed by qmode:0      default: mode 9

Where sections of FipHdr fields are required or changes to the output style,
use keywords : fixed, partial, combie, optional, repeat, newdate and/or style.
(see The SysAdmin manual for more information).

    They are normally specified :
        fixed:QZ    1234543
        partial:QT  ST,3,2,U,<,>
        combie:QY   ep|na,(0000000)a 
        option:QE   ep,11,7,s
        repeat:QK   XK,-,3  
    or  repeat:QP   PK,,4,#X
        style:QS    XN,%.03d 

IPGTWY uses environment variables and input switches on starteup to override
its defaults :
    FIP_GTWY_defDQ      default queue-group default: spike-wir
    FIP_GTWY_defSN      default atexfilename    default: gtwy.000
and if necessary, the characters which are considered End-of-Line and End of
    FIP_GTWY_EOLN       End of Line chrs    default: \002\003\004\005
    FIP_GTWY_EOWD       End of Word chrs    default: \040\034\035\055
If the '-z' input flag for force is ON, the env variable used is :
    FIP_GTWY_EOLNNL  End of Line chrs   default: \002\003\004\005\012
    note that all EOL env variables should be between double quotes.
    FIP_GTWY_LINE       No of chrs per line default: 80
                for the \$L parameter.

Input switches (All optional) :
    -o : Atex nfs path name     default: /Atex/commgr/wires
    -n : Atex nfs path name for headerless files. default: /Atex/commgr/noh
    -t : sleep time betwix scans    default: 1 sec
    -q : queue to scan      default: 2atex
    -d : default qdata file     default: tables/gateway/QDATA
    -h : default header file    default: tables/gateway/header/WIRE
    -H : path to header-sys on J11  default: /Atex/commgr/wires/sys/header
    -B : do NOT copy files bigger than this size (specified in kilobytes).
                    default: allow ALL files
        eg: send all files greater than 1mb to woops    -B 1000
        Note that the j11 does NOT really like big files !!
    -x : default trans table file   default: tables/gateway/FORMAT
    -z : force NO NL->QL translation default: NL->QL and 0220-> 1/3
    -v : print version number and exit

Version Control
;018i   26aug97 added dup:zeros, allowed upto 99 dups and added defaultquegrp
        ;a 4nov97 ucase names pls
        ;b 29mar99 LINUX
        ;c 23may02 cleanup - small issue with j11 headers
        ;d 06jun02 added script
        ;e-h 05feb03 added modes MA->ME and bigger Before/Afters
        ;i 27mar03 added usa-date-format:

(copyright) 2017 and previous years FingerPost Ltd.