Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-02 - 43,50250/tbltrn.lst
There are no other files named tbltrn.lst in the archive.




TTTTTTTTT  BBBBBBBBB  LLL    TTTTTTTTT  RRRRRRRRR  NNN   NNN
   TTT     BBB   BBB  LLL       TTT     RRR   RRR  NNNN  NNN
   TTT     BBBBBBB    LLL       TTT     RRRRRRR    NNN N NNN
   TTT     BBB   BBB  LLL       TTT     RRR  RRR   NNN  NNNN
   TTT     BBBBBBBBB  LLLLLLLL  TTT     RRR   RRR  NNN   NNN


                TBLTRN Instruction Manual

      A Symbolic Table Assembler Written in FORTRAN


                    Table of Contents

Operating Procedures Manual
   Operating Procedures  . . . . . . . . . . . . . . . . 1
   Testing TBLTRN  . . . . . . . . . . . . . . . . . . . 4
   Adapting TBLTRN to Other Computers  . . . . . . . . . 4
   Adapting TBLTRN to Batch Mode or to Other Computers . 6
   Maximum TBLTRN Table and/or Dictionary Size . . . . . 7

Language Specification Manual
   An Introduction to the TBLTRN Language  . . . . . . . 8
   Symbol and Statement Termination  . . . . . . . . . . 20
   Character Classes . . . . . . . . . . . . . . . . . . 20
   Symbol Types  . . . . . . . . . . . . . . . . . . . . 23
   Radices for Integer Evaluation  . . . . . . . . . . . 28
   Parenthetical Expressions . . . . . . . . . . . . . . 29
   Entering Multiple Constants into a Single Byte  . . . 31
   Using Multiple Constants Instead of Integer Prefix  . 32
   Stack Construction and Use  . . . . . . . . . . . . . 33
   User Interaction with Assemblies  . . . . . . . . . . 36
   Conditional Assembly Capability . . . . . . . . . . . 37
   Data Statement Output . . . . . . . . . . . . . . . . 39
   Construction of Test Tables . . . . . . . . . . . . . 41
   User Defined Functions  . . . . . . . . . . . . . . . 42
   Pre-execution Assembly of User Defined Functions  . . 49
   Query Operators . . . . . . . . . . . . . . . . . . . 51
   Programmed Operators  . . . . . . . . . . . . . . . . 56
   Symbol Definitions  . . . . . . . . . . . . . . . . . 101
   Table Entry Definitions . . . . . . . . . . . . . . . 109

Principles of Operation Manual
   Input Text String Buffer Structure  . . . . . . . . . 114
   Symbol Selection from Text Buffer . . . . . . . . . . 121
   Symbol Dictionary Structure . . . . . . . . . . . . . 123
   Symbol Construction by Stack Operators  . . . . . . . 136

Index  . . . . . . . . . . . . . . . . . . . . . . . . . 139





                    Operating Procedures
                    --------- ----------

TBLTRN is an  assembler  written  in  FORTRAN  for  symbolic
tables which are to control other programs.  The language in
which these tables are written is established  by  the  user
through  association  of either single or multiple precision
values with the words of a vocabulary.  Such values  can  be
assembled  with  byte  and/or  location offset as defined by
packing templates also specified by the user.  In  addition,
95 programmed operators are available.

TBLTRN was originally written for use on a  PDP-10  computer
and  the  following  operating  instructions  are  for  that
computer.  The TBLTRN system is distributed on two DECtapes,
the  first  containing  this  documentation to be printed in
upper and lower case, and the second containing the  FORTRAN
and  assembly  language  source  routines,  a  command  file
containing the names of these source routines, and  a  group
of test tables.  TBLTRN should be loaded by transferring the
F4, MAC and CMD files from the second tape to the disk, then
issuing the commands

        LOAD @TBL

and

        SAVE DSK:TBLTRN

so that the core image can be stored for future runs.

When started, TBLTRN will ask the user to supply  the  names
and  unit  numbers  for the input file containing the source
table, and for the  other  files  which  will  be  necessary
during  the  assembly.  These files must all have names of 5
or less characters and the name extension DAT.  If  the  tab
character  is  used  in  the  input  file as equivalent to a
blank, it must  be  declared  as  such  by  the  ACC  (Alter
Character  Class)  operator.   As  a  simple  example of the
specification of these files, a table begun by the line

        A==,B==

in file INPUT.DAT, and terminated by the line

        A,B FIN

in the file FINAL.DAT could be assembled  by  the  following
dialogue between the user and TBLTRN.

        RUN DSK:TBLTRN
TBLTRN:  Operating Procedures Manual                Page   2
Operating Procedures


        TBLTRN (06/72)

        INPUT UNIT NUMBER = 1
        INPUT FILE NAME = INPUT
        OUTPUT UNIT NUMBER = 20
        OUTPUT FILE NAME = OUTPU
        LISTER UNIT NUMBER = 21
        LISTER FILE NAME = LIST
           
        PLEASE TYPE DEFINITION FOR SYMBOL A
        11,
        CONSTANT  4431 WRD  1 OCT         13         11 A
           
        PLEASE TYPE DEFINITION FOR SYMBOL B
        22,
        CONSTANT  4427 WRD  1 OCT         26         22 B
           
        END-OF-FILE READ ON UNIT  1
        IS THERE MORE INPUT (Y OR N) Y
        INPUT UNIT NUMBER = 1
        INPUT FILE NAME = FINAL
           
        STORAGE SUMMARY
        ENTRIES       2
        OPERATORS   578
        LABELS        0
        EXCESS     4420 (CURRENT)
                   4420 (MINIMUM)
           
        CPU TIME: 0.45      ELAPSED TIME: 1:15.25
        NO EXECUTION ERRORS DETECTED
           
        EXIT
        ^C
           
        .

In the above example, the following text was  typed  by  the
user on the teletype.

        RUN DSK:TBLTRN
        1
        INPUT
        20
        OUTPU
        21
        LIST
        11,
        22,
        Y
        1
        FINAL
TBLTRN:  Operating Procedures Manual                Page   3
Operating Procedures


Default answers are assumed if a zero or blank  response  is
given  to a request for a unit number or if a blank response
is given to a request for a file name or  for  whether  more
input is to follow after the reading of an end-of-file.  The
values of these defaults as supplied  by  subroutine  TBLNMB
are as follow.

        INPUT UNIT NUMBER = 1
        INPUT FILE NAME = INPUT
        OUTPUT UNIT NUMBER = 20
        OUTPUT FILE NAME = OUTPU
        LISTER UNIT NUMBER = 21
        LISTER FILE NAME = LIST
        IS THERE MORE INPUT (Y OR N) Y

A negative answer (note that  -0  is  not  negative),  to  a
request for a unit number, invokes the default responses for
that request and for the remaining unit number and file name
requests  which  are then suppressed.  Since the user in the
above dialogue issued what would have been  assumed  as  the
default responses to the first 6 questions, he could instead
have typed only the following text.

        RUN DSK:TBLTRN
        -1
        11,
        22,
        Y (or carriage return)
        0 (or carriage return)
        FINAL

If the teletype unit number (defined at ITTY the first  time
TBLNMB  is called) is given as the response to a request for
a unit number, the remaining requests are suppressed and all
the  remaining  unit  numbers, if any, are assumed to be the
teletype unit number.  The question

        BACKUP UNIT NUMBER (NO BACKUP IF ZERO) =

is asked when the teletype is specified as  the  input  unit
(either initially, or after an end-of-file is read if backup
copying has not already been selected).  A non-zero response
causes  teletype input to be copied into a backup file.  The
default unit number 22 and default file name  BACKU.DAT  are
invoked  if  the  answer  was  negative.   If the answer was
positive, the question

        BACKUP FILE NAME =

is also asked and can be answered with a blank  response  to
invoke  the  BACKU.DAT  default  file  name.  Once selected,
copying of teletype input into the  backup  file  cannot  be
terminated.
TBLTRN:  Operating Procedures Manual                Page   4
Testing TBLTRN


                       Testing TBLTRN
                       ------- ------

The supplied data files such as TEST1.DAT and TEST2.DAT each
contain  a collection of 25 tables which exercise the TBLTRN
grammar.  The numeric name of the test table  and  an  error
summary  consisting  of  the incorrect entries compared with
the expected results are written into the listing  file  for
each  test  table.   These  tables should be tried if simple
tables seem to be giving the expected  results  and  if  the
sample  test  table given in the later section "Construction
of Test Tables" produces the  listing  also  given  in  that
section.



             Adapting TBLTRN to Other Computers
             -------- ------ -- ----- ---------

Although TBLTRN is largely written  in  machine  independent
FORTRAN,  5  simple  assembly  language  or machine-tailored
FORTRAN functions are necessary.  These  functions  are  the
following.

 ITBAND returns as its  value  the  logical  AND  of  its  2
        arguments (the result has a particular bit turned on
        only if the corresponding bit was turned on in  both
        of the arguments).
 ITBMOV returns as its value the value of its first argument
        shifted  the  number of bits indicated by its second
        argument.  The shift is to the left  if  the  second
        argument  is  positive,  to  the right if the second
        argument is negative.  Bits shifted beyond the  word
        boundaries are lost.
 ITBOR  returns as its value  the  inclusive  OR  of  its  2
        arguments (the result has a particular bit turned on
        if the corresponding bit was turned on in either  or
        both of the arguments).
 ITBSIN returns as its value the number which has  the  sign
        bit  turned  on (one) and all other bits off (zero).
        This  function  is  called  only  when  the   symbol
        dictionary  is  constructed from the ISTORE array at
        the start  of  the  first  table  or  when  the  BLK
        operator prepares for the following table.
 ITBXOR returns as its value  the  exclusive  OR  of  its  2
        arguments (the result has a particular bit turned on
        only if the corresponding bit was turned on  in  one
        but not both of the arguments).

ITBMOV can be written in FORTRAN if the number to be shifted
is  positive, and if the number is not shifted into the sign
bit.  The following routine accomplishes such  bit  shifting
by multiplication.
TBLTRN:  Operating Procedures Manual                Page   5
Adapting TBLTRN to Other Computers


              FUNCTION ITBMOV(I,J)
        C
        C     FORTRAN FUNCTION TO SIMULATE SHIFT OPERATOR
        C     DOES NOT WORK FOR NEGATIVE VALUE OF I
        C
        C     I=ITEM TO BE SHIFTED
        C     J=NUMBER OF BITS TO BE SHIFTED
        C
              IF(J.EQ.0)GO TO 4
              IF(I.LT.0)GO TO 2
              IF(J.LT.0)GO TO 1
              ITBMOV=I*(2**J)
              GO TO 5
            1 K=-J
              ITBMOV=I/(2**K)
              GO TO 5
            2 WRITE(5,3)
            3 FORMAT(34H SHIFT OF NEGATIVE VALUE ATTEMPTED)
            4 ITBMOV=I
            5 RETURN
              END

ITBOR can be written in FORTRAN if the FORTRAN .OR. operator
returns  the  inclusive  OR of all bits of the numbers being
operated upon.  FORTRAN language specifications require only
that  the  OR  be of the sign bit.  All bits will usually be
returned  though,  since  this  is  easier.   The  following
routine performs correctly on the PDP-10.

              FUNCTION ITBOR(I,J)
        C
        C     MACHINE DEPENDENT ROUTINE FOR TBLTRN
        C
        C     RETURNS INCLUSIVE OR OF 2 ARGUMENTS
        C
              ITBOR=I.OR.J
              RETURN
              END

ITBAND and ITBXOR can similarly be written in FORTRAN if the
FORTRAN  .AND. and  .XOR. operators  return  as  results the
respective operations applied to all bits of the arguments.

ITBSIN  can  be  written  in  FORTRAN,  but  the  octal   or
hexadecimal  representation will depend both upon the number
of bits per word and  the  manner  in  which  these  can  be
accessed  in  the  particular  FORTRAN  used.  ITBSIN can be
merely a  dummy  routine  if  the  NEG  operator  (really  a
constant)  is not necessary.  The following routine uses the
double quote octal notation to specify  all  36  bits  of  a
PDP-10 word.
TBLTRN:  Operating Procedures Manual                Page   6
Adapting TBLTRN to Other Computers


              FUNCTION ITBSIN(I)
        C
        C     MACHINE DEPENDENT ROUTINE FOR TBLTRN
        C
        C     RETURNS SIGN BIT ON AND ALL OTHER BITS ZEROED
        C
              ITBSIN="400000000000
              RETURN
              END

TBLTRN can at most access 50 bits per word.   When  used  on
computers  with  larger  word  sizes  than  this, either the
excess bits will have to be ignored, or the internal packing
for  storage  of  reduced  byte  shifts  for packing pattern
arguments and of  reduced  byte  shifts  for  references  of
unknown  address  labels  by  the LOC and BIT operators will
have to be changed.  Similarly, TBLTRN cannot be  run  on  a
computer  which cannot store the number 8080 within a single
word.  This is the maximum number needed to pack shift, sign
and  reduced  byte  size within the data cells in the symbol
dictionary.  If a  single  computer  word  can  contain  the
number  8080  but cannot contain the dimension of the MASTER
array times 8080, the test

        IF(LOCK.EQ.0)GO TO XX

(where XX is a statement number) must be  removed  from  the
section of the routine TBLOPR which processes symbols within
the range of the LOC operator.   This  statement  determines
whether a chain of unknown address label references is to be
threaded  into  the  assembled  table.   The  statement   is
indicated by comment cards within the program.



    Adapting TBLTRN to Batch Mode or to Other Computers
    -------- ------ -- ----- ---- -- -- ----- ---------

Routine TBLNMB is called prior to the assembly of the  first
table  to  interrogate  the  user  for the various input and
output unit numbers and to open named  files  if  necessary.
The teletype unit number, stored as ITTY, is defined without
consulting the user the first time TBLNMB  is  called.   The
other default unit numbers and file names are specified by a
DATA statement at the start of the routine.  TBLNMB is  also
called  after  an end-of-file is read on the input device to
determine if there is to be additional input and, if so,  to
open  the  new file.  TBLNMB identifies the end-of-file call
by the line count ILINE being non-zero, and zeroes this line
count  if  there  is  to  be further input.  For batch mode,
TBLNMB will have to be hard-coded to  return  the  following
unit numbers to the main program.
TBLTRN:  Operating Procedures Manual                Page   7
Adapting TBLTRN to Batch Mode or to Other Computers


  ITTY = Output unit onto  which  are  generated  all  error
         messages,  all  query  operator messages, and those
         TEL  operator  messages  for  which  a  0  has  not
         appeared  within  the  range  of  the TEL operator.
         Also receives text  within  the  range  of  the  ''
         (double  apostrophe)  operator  which is not within
         the range of an operator which allows a text string
         as an argument.
       = Input unit from which definitions requested by  the
         ==  operator  are read, and from which all input is
         read if the TTY operator is encountered within  the
         input file.

 IREAD = Input unit from which the table is read.

IWRITE = Output unit  onto  which  the  assembled  table  is
         written.   Also  contains  text within the range of
         the ' (single quote) operator which is  not  within
         the range of an operator which allows a text string
         as an argument.

  ILPT = Output  unit  onto  which  is  generated  debugging
         output of the DBG, DMP and LST operators and output
         of the TEL operator when a 0  has  appeared  within
         the  range  of  the  TEL operator.  Also receives a
         summary of  all  text  replacements  when  the  LMT
         operator has been issued with a negative value, and
         a summary of assembly errors within a test table.

  IOUT = Output unit onto which is  copied  an  input  table
         read  from the teletype.  Normally IOUT is equal to
         ITTY and no copy is kept.



        Maximum TBLTRN Table and/or Dictionary Size
        ------- ------ ----- ------ ---------- ----

The assembled table entries are stacked into the  bottom  of
the MASTER array, and the symbol dictionary is hung from the
location within this same array having the  subscript  which
is  stored  as the variable MAX.  In the distributed version
of TBLTRN which uses 24K of core on a PDP-10, MAX is defined
in  the  BLOCK DATA routine to be 5000, and the dimension of
the MASTER array within the labeled COMMON/TBLTRN/  is  also
5000.   Whether  this size of array will be sufficient for a
particular table will largely depend upon the  size  of  the
symbol  dictionary  defined  by  the  user.   The  available
working space can be changed by replacing all appearances of
the number 5000 with the desired dimension.
TBLTRN:  Language Specification Manual              Page   8
An Introduction to the TBLTRN Language


           An Introduction to the TBLTRN Language
           -- ------------ -- --- ------ --------

When constructing symbolic tables which are to be  processed
by  TBLTRN,  the programmer specifies the table entry (word)
into which an item is to be inserted, the position (byte) in
this word, and how the item is to be inserted (sign).  The 3
properties of word, byte and sign can be  specified  in  any
order  immediately  before  the item to be inserted.  If not
specifed, default values are assumed for  these  properties.
The  item  itself  can  be an integer specified in any radix
from binary to hexadecimal, a symbol which has been  defined
as  a single or multiple entry constant, or an address label
preceded by the location operator LOC.  As a very elementary
example, the statements

        2
        4
        6
        8
        10

would assemble 5 table entries containing the even values 2,
4,  6,  8  and decimal 10.  Since statements which appear on
the same line can be separated by single commas, this  could
also be written as

        2,4,6,8,10

These same statements could be written in symbolic  form  if
symbols  are  first  defined to have the necessary values by
the use of the = operator.  The same table entries would  be
assembled by the statements

        TWO=2,FOUR=4,SIX=6,EIGHT=8,TEN=10
        TWO,FOUR,SIX,EIGHT,TEN

A single statement can, however,  specify  the  contents  of
several  table  entries.  For this purpose, the WRD operator
is used prior to the appearance of the constant to which  it
applies.   The  word  count,  considering  the  initial word
generated by the statement to be word 1, is indicated  by  a
decimal integer prefix of the WRD operator, or by a constant
or parenthetical expression immediately  following  the  WRD
operator.  The single statements

        1WRD TWO 2WRD FOUR 3WRD SIX 4WRD EIGHT 5WRD TEN

or

        TWO WRD TWO FOUR WRD 3 SIX WRD(FOUR)EIGHT WRD(5)TEN
TBLTRN:  Language Specification Manual              Page   9
An Introduction to the TBLTRN Language


or

        TWO WRD(FOUR-2)4 WRD(5-TWO)6 WRD(2+2)8 WRD(5)10

would likewise assemble the same table  entries  as  before.
In  even  these  simple  examples,  however, the items being
packed have become  lost  within  the  assembly  directions.
This  can  be  partially  overcome  by the definition of the
constants as multiple precision integers again  through  use
of  the  WRD operator.  For example, the statements could be
written

        TWO=2,FOUR=WRD TWO 4,SIX=3WRD 6
        EIGHT=WRD(TWO+TWO)8,TEN=WRD 5 10
        TWO FOUR SIX EIGHT TEN

or

        TOTAL=2 2WRD 4 3WRD 6 4WRD 8 5WRD 10
        TOTAL

Items defined in this manner cannot result in table  entries
in  any  other  order.   The  symbol  EIGHT  will  always be
deposited  into  the  fourth  table  entry  being  currently
constructed  regardless  of  this  symbol's  position in the
statement.  If, on the other hand, an item's position within
a  statement  indicates  how and where it is to be packed, a
packing pattern or byte template can be used.  Specified  in
the  template's  definition  are the sign with which and the
byte  and  offset  of  the  word  into  which  each  of  the
template's  arguments  is  to be assembled.  The sign can be
either + (addition), - (subtraction),  IOR  (inclusive  OR),
XOR   (exclusive   OR),   or   AND   (logical   AND).   Such
specifications are optional and can be given in  any  order.
The  default  values  are zero for shift, one for word count
and inclusive OR for sign if the byte size is  2  raised  to
some  power,  or  addition  otherwise.   To again obtain the
assembled values of  2,  4,  6,  8  and  10,  the  following
statements might be used.

        TWO=2,FOUR=4,SIX=6,EIGHT=8,TEN=10
        TEMPLATE=MSK ARG 2WRD ARG 3WRD ARG,,,
        4WRD ARG 5WRD ARG
        TEMPLATE TWO FOUR SIX EIGHT TEN

Templates must always be defined  by  appending  to,  or  in
terms of, the definitions of existing templates, such as the
null  template  MSK.   The  ARG  operator   terminates   the
specification  of  a  single  argument of the template.  The
three commas  are  used  in  the  template's  definition  to
indicate  that  the  definition  continues  on the following
line.  The template is employed by stating its name followed
by the items to which it is to apply.
TBLTRN:  Language Specification Manual              Page  10
An Introduction to the TBLTRN Language


Since computer memory is a vital resource, it is  often  not
economical  to store many small numbers in individual words.
The alternative is to pack several of the smaller items into
a  much  larger  number  still  smaller than the maximum the
computer word can contain.   For  example,  if  the  numbers
represented  by CC, DD and EE range from 0 through 99, these
can be packed into a single integer of 6 decimal  digits  by
the operations

1.  Multipy number CC by 10000 and place the result into the
    storage word.

2.  Multiply number DD by 100 and  add  the  result  to  the
    current contents of the storage word.

3.  Add number EE to the current  contents  of  the  storage
    word.

In the above example, the byte size is  really  decimal  100
with  number  CC being shifted two bytes.  The shift is done
by a logical bit shift if the byte size is 2 raised to  some
power,  and otherwise is done by multiplication if the shift
is to the left, or by division if the shift is to the right,
by the byte size raised to the power indicated as the shift.
The results from  logical  shifting  and  multiplication  or
division  are  identical  for a positive number which is not
shifted into the sign bit.  In the TBLTRN language, the byte
size  would  be  indicated either by use of the SIZ operator
with a decimal integer prefix as in

        100SIZ

or by following the  SIZ  operator  with  a  integer  to  be
interpreted  under the current radix (decimal unless changed
temporarily  by  the  OCT  octal  operator  or  DEC  decimal
operator,  or  unless  changed  locally  within a particular
symbol definition by the SRX  operator,  or  unless  changed
permanently  for table entry definitions by the TRX operator
issued  outside  a  symbol  definition,  or  unless  changed
permanently  for  symbol  definitions  by  the  SRX operator
issued outside a symbol definition) as in the statements

        SIZ 100

or

        SIZ OCT 144

or

        SIZ 8TRX 144
TBLTRN:  Language Specification Manual              Page  11
An Introduction to the TBLTRN Language


or

        8TRX SIZ 144

or by defining a symbol as the constant  decimal  100  by  a
statement of the form

        I100=100

or, if the octal representation 144 is used, by a  statement
of the form

        I100=OCT 144

or

        I100=8SRX 144

or

        I100=SRX DEC 8 144

or

        I100=SRX(4+4)144

and then using this constant after the SIZ operator  in  the
following manner.

        SIZ I100

The table entry can then be constructed using the left shift
operator LFT by a statement of the form

        100SIZ+2LFT CC+1LFT DD+EE

or

        100SIZ 2LFT+CC 1LFT+DD+EE

or

        +2LFT 100SIZ CC+1LFT DD+EE

or

        2LFT+100SIZ CC+1LFT DD+EE

or

        SIZ 100+LFT 2 CC+LFT 1 DD+EE
TBLTRN:  Language Specification Manual              Page  12
An Introduction to the TBLTRN Language


or

        SIZ 100 LFT 2+CC LFT 1+DD+EE

or, if I1 has been defined as  1,  I2  as  2,  and  I100  as
decimal 100, by a statement of the form

        SIZ I100+LFT I2 CC+LFT I1 DD+EE

or

        SIZ I100 LFT I2+CC LFT I1+DD+EE

The number of byte shifts, the size of these bytes, and  the
sign  must  be  specified before the constant to which these
apply, but can be written in any desired  order.   Like  the
word  count  operator  WRD, the number of bytes indicated by
the left shift operator LFT and by the right shift  operator
RIT  are  specified  by  a  decimal  integer  prefix  of the
operator  or  by  a  constant  or  parenthetical  expression
immediately following.  Actually, in the above examples, the
plus signs are  not  really  necessary,  since  addition  is
assumed as default if the byte size is not a number (such as
2, 4, 8, 16 etc.)  which  has  the  base  2,  otherwise  the
default  sign would be inclusive OR.  Also, once set outside
a symbol definition, the byte  size  does  not  have  to  be
respecified  for  each new word.  However, a packing pattern
can be used to supply  all  of  this  information.   Such  a
pattern  could  be  defined for the above packing example by
the statement

        TEMPLATE=MSK 100SIZ+2LFT ARG+1LFT ARG+ARG

or

        TEMPLATE=MSK 100SIZ 2LFT ARG 1LFT ARG ARG

In the above examples, the relative ordering  of  signs  and
shifts  is  arbitrary.   The  byte size would not have to be
stated if it is to be the same as the byte  size  previously
set  outside  a symbol definition.  The default byte size at
the start of each table is 2.

The pattern could then be used to pack items CC, DD, and  EE
in a statement of the form

        TEMPLATE CC DD EE

If an additional packing  pattern  would  be  defined  by  a
statement such as

        PATTERN=MSK 100SIZ 4LFT ARG 3LFT ARG
TBLTRN:  Language Specification Manual              Page  13
An Introduction to the TBLTRN Language


then 5 items might be packed by a statement similar to

        PATTERN AA BB TEMPLATE CC DD EE

or a pattern with more  arguments  might  be  created  by  a
statement such as

        MORE=MSK 100SIZ 4LFT ARG 3LFT ARG 2LFT ARG 1LFT,,,
        ARG ARG

or

        MORE=PATTERN TEMPLATE

or

        MORE=MSK 100SIZ 4LFT ARG 3LFT ARG TEMPLATE

or

        MORE=PATTERN 100SIZ 2LFT ARG 1LFT ARG ARG

and then the packing could be accomplished by simply stating

        MORE AA BB CC DD EE

It should be noted that in the last of the above definitions
of  MORE,  a  byte  size  specification  such  as  100SIZ is
necessary since the byte size used during the definition  of
PATTERN applies only to its arguments.  When items appear in
the table entry to the right of the number of arguments  for
which  the packing pattern is specified, these items are not
arguments and will be entered with the default sign  and  no
shift  unless such are stated.  Therefore, the packing could
also be accomplished by the statement

        PATTERN AA BB 100SIZ 2LFT CC 1LFT DD EE

Packing patterns  can  similarly  be  used  to  specify  the
construction   of   constants.   For  example,  any  of  the
following statements could be  used  to  define  a  constant
called  ABC  having  packed  as  its  value the constants AA
through EE.

        ABC=100SIZ+4LFT AA+3LFT BB+2LFT CC+1LFT DD+0LFT EE

        ABC=100SIZ 4LFT AA 3LFT BB 2LFT CC 1LFT DD 0LFT EE

        ABC=100SIZ+4LFT AA+3LFT BB+2LFT CC+1LFT DD+     EE

        ABC=100SIZ 4LFT AA 3LFT BB 2LFT CC 1LFT DD      EE

TBLTRN:  Language Specification Manual              Page  14
An Introduction to the TBLTRN Language


        ABC=100SIZ+4LFT AA+3LFT BB TEMPLATE CC DD EE

        ABC=100SIZ 4LFT AA 3LFT BB TEMPLATE CC DD EE

        ABC=PATTERN AA BB 100SIZ+2LFT CC+1LFT DD+0LFT EE

        ABC=PATTERN AA BB 100SIZ 2LFT CC 1LFT DD 0LFT EE

        ABC=PATTERN AA BB 100SIZ+2LFT CC+1LFT DD+     EE

        ABC=PATTERN AA BB 100SIZ 2LFT CC 1LFT DD      EE

        ABC=PATTERN AA BB TEMPLATE CC DD EE

        ABC=MORE AA BB CC DD EE

If the same packing pattern applies  to  several  successive
entries, it may be set at the start of the series by the TON
operator, then assumed to be in effect until turned  off  by
the appearance of the null packing pattern MSK (or any other
symbol defined as equal to MSK only).  For example, items AA
through  OO  could be packed into 3 storage words by the set
of statements

        TON MORE AA BB CC DD EE
                 FF GG HH II JJ
                 KK LL MM NN OO MSK

The .  (period) operator can be used in the definition of  a
packing pattern to specify the point in the argument list at
which the origin of the word count is to be  incremented  by
one.  For example, the statement

        MASK=MSK 1000SIZ 1LFT ARG ARG.64SIZ 1LFT ARG ARG

defines a packing pattern named MASK which will perform  the
following operations.

1.  Multiply its first argument by  1000  before  adding  it
    into the first table entry.

2.  Add its second argument without shifting  to  the  first
    table entry.

3.  Advance the table entry origin to the second table entry
    if a third argument is encountered.

4.  Shift its third argument left 6  bits  before  inclusive
    ORing it into the second table entry.

5.  Inclusive OR its fourth argument without  shifting  into
    the second table entry.
TBLTRN:  Language Specification Manual              Page  15
An Introduction to the TBLTRN Language


The statement sequence

        TON MASK
        1 2 3 4
        4 3 2 1

would then assemble the table entries

        1002 = 1*1000 + 2
         196 = 3*64  OR 4
        4003 = 4*1000 + 3
         129 = 2*64  OR 1

If instead, the definition was given as

        MASK=MSK 1000SIZ 1LFT ARG ARG. .,,,
                   64SIZ 1LFT ARG ARG. .

or

        MASK=MSK 1000SIZ 1LFT ARG ARG 2WRD.,,,
                   64SIZ 1LFT ARG ARG 2WRD.

then the same statement sequence would assemble the entries

        1002
           0
         196
        4003
           0
         129

Each statement in the above example produces a  single  zero
entry since the origin is incremented twice before the third
argument is assembled.  If  encountered,  a  fifth  constant
would have been assembled into a new table entry following a
second zero entry using the default sign appropriate for the
default  byte  size and without shift, unless sign, shift or
word count are stated before this fifth constant.

The packing pattern can also specify zeroed entries prior to
the  entry  into which the first argument is assembled.  For
example, the statements

        MASK=MSK.1000SIZ 1LFT ARG ARG. .64SIZ 1LFT ARG ARG
        TON MASK 1 2 3 4,4 3 2 1

would assemble the following table entries.

           0
        1002
           0
         196
TBLTRN:  Language Specification Manual              Page  16
An Introduction to the TBLTRN Language


           0
        4003
           0
         129

An origin  increment  specified  by  a  packing  pattern  is
performed if either of the following is true.  

1.  The present packing pattern  has  a  following  argument
    specification  which  is  fulfilled either automatically
    (see  definition  of  ARG  operator  in  section  titled
    "Programmed  Operators")  or explicitly.  Performance of
    an origin increment  can  be  forced  by  following  its
    specification  in  the packing pattern definition by one
    of the sequences ARG 0, ARG NUL, ARG() or ARG(NUL) which
    would   specify   an  automatic  single  precision  zero
    argument.

2.  All the argument specifications, if any, of the  present
    packing pattern have been fulfilled either automatically
    or explicitly, and within the  statement  in  which  the
    packing  pattern  is used another packing pattern is not
    selected before  processing  of  the  next  constant  or
    address  label  or  a  BIT operator with the destination
    being indicated by the single  period  operator  as  the
    incremented  table  entry  origin or a BIT operator with
    the destination being a known address label of  a  table
    entry  already  assembled  by the current statement (BIT
    possibly preceded, regardless of whether the destination
    is  indicated  as period or label, by the WRD operator).
    The table entry origin offset is not performed if  there
    does  not remain unprocessed within the statement such a
    constant or address label or BIT deposit.

For example, the statements

        MASK MASK 1 2 3 4,MASK 4 3 2 1 MASK

would assemble  the  same  table  entries  as  the  previous
example.

The DUP  (DUPlicate)  operator,  used  with  either  decimal
integer  prefix  or  followed  immediately  by a constant or
parenthetical expression, specifies that the table entry  or
entries  assembled  by  the present (or following) statement
are to be duplicated as a set to form  the  number  of  sets
specified   by   the   integer,  constant  or  parenthetical
expression.  The BIT operator turns on a specified bit in  a
selected  table entry.  Table entries which are BIT operator
destinations and  which  are  within  the  range  of  a  DUP
operator   are   duplicated   correctly  regardless  of  the
placement of the statement which defines these entries  with
respect  to  the BIT operator.  For example, with MASK given
TBLTRN:  Language Specification Manual              Page  17
An Introduction to the TBLTRN Language


the last definition above, the statement

        2DUP MASK 1 2 3 4

would assemble the following table entries.

           0
        1002
           0
         196
           0
        1002
           0
         196

Similarly, the statements

        TWO=2,FOUR=4,SIX=6,EIGHT=8,TEN=10
        TEMPLATE=MSK ARG.ARG.ARG 2WRD ARG. .ARG
        2DUP TEMPLATE TWO FOUR SIX EIGHT TEN

would assemble the following table entries

        2
        4
        6
        8
        10
        2
        4
        6
        8
        10

Individual table entries  can  be  assigned  symbolic  names
(address  labels).  Any undefined symbol not in the range of
an operator, in a statement  which  defines  a  table  entry
prior  to  the  actual specification of the contents of that
table entry (either at the start of the statement  or  after
increment  of  the  table  entry  origin  as  specified by a
packing pattern), is taken as the address label of the table
entry  origin  offset  by 1 less than the word count if such
appears before the label.  For  example,  in  the  following
statements, the symbols ADDRESS1, ADDRESS2 etc.  are address
labels.

        ADDRESS1 3
        MASK=MSK ARG.ARG.
        ADDRESS2 MASK ADDRESS3 2 ADDRESS4 1 ADDRESS5

The above example assembles the table entries
TBLTRN:  Language Specification Manual              Page  18
An Introduction to the TBLTRN Language


        3
        2
        1
        0

The terminal zero entry in the above  example  results  from
the  performance  of  the last origin increment specified by
the  packing  pattern  MASK.   Performance  of  this  origin
increment  is  forced by the appearance of the address label
ADDRESS5.

The origin of the table  entry  word  count  can  always  be
referenced by the . (single period) operator.  The following
examples  illustrate  how  address  labels  are  applied  to
multiple  precision  entries.   The LOC operator precedes an
address label to be used as a constant having as  its  value
the  location  within the table of the named entry.  The BIT
operator similarly precedes the address label of  the  entry
in  which  is  to  be  turned  on (set to 1) the bit (binary
digit) specified either by a decimal integer prefix  of  the
BIT  operator or by a a constant or parenthetical expression
which immediately follows the BIT operator.

        3WRD 5BIT.

turns on the 5th bit from the right in the 2nd  table  entry
above  the  current  table entry origin.  If this appears as
the only  contents  of  the  statement,  3  words  would  be
assembled with the values 0, 0 and 16 respectively.

        3WRD 5BIT ADDRESS

turns on the 5th bit from the right in the 2nd  table  entry
above  the  table  entry  named ADDRESS.  If the table entry
named ADDRESS is currently unknown, at least 3 table entries
will be assembled when it is later located, with the 5th bit
from the right turned on in the upper of these three.  It is
usually advisable to allocate sufficient room to contain the
range of bits turned on through use of a  construction  such
as   ADDRESS   3WRD  NUL  for  such  a  multiple  entry  bit
destination.

        3WRD LOC.

or

        3WRD.

assembles into the 2nd table entry above the  current  table
entry  origin  the  address  (relative  to  the start of the
table) of the 2nd table entry above the current table  entry
origin.
TBLTRN:  Language Specification Manual              Page  19
An Introduction to the TBLTRN Language


        3WRD LOC ADDRESS

assembles into the 2nd table entry above the  current  table
entry origin the address of the table entry named ADDRESS.

        3WRD ADDRESS

assigns the address label ADDRESS to  the  2nd  table  entry
above   the  current  table  entry  origin.   The  statement
containing the construction 3WRD ADDRESS  will  assemble  at
least 2 entries above the table entry origin, and these will
contain zeroes if nothing else is deposited into them.

        3WRD ADDRESS 2WRD 5BIT ADDRESS

turns on the 5th bit in the  first  table  entry  above  the
table  entry named ADDRESS, itself the 2nd table entry above
the current table entry origin.  If this appears as the only
contents  of  the statement, 4 words would be assembled with
the values 0, 0, 0 and 16 respectively.

        ADDRESS1 2WRD ADDRESS2 2BIT ADDRESS2 2WRD 1BIT.

assigns the address label  ADDRESS1  to  the  current  table
entry  origin  and  the  address  label ADDRESS2 to the word
above the current table entry origin.  The values which  are
assembled  for  these  two table entries are 0 and 3 (bits 1
and 2) respectively.

A few final notes

1.  The  packing  pattern,  if  any,  selected  by  the  TON
    operator  and  the byte size in effect prior to a symbol
    definition are restored after the definition.

2.  No packing pattern is assumed to be  in  effect  at  the
    start  of  a  symbol definition even if the TON operator
    has placed one in effect for the statements which define
    table entries.

3.  The byte size in effect after the previous statement  is
    assumed  to  be  in  effect  at  the  start  of a symbol
    definition and is restored after the definition.

4.  The byte size in effect prior to the use  of  a  packing
    pattern  is  restored  after  the  final argument of the
    pattern.  Sign and shift do not survive.

5.  Any  packing  pattern   appearing   outside   a   symbol
    definition while the TON operator has selected a packing
    pattern will itself become the packing pattern  selected
    by the TON operator.
TBLTRN:  Language Specification Manual              Page  20
Symbol and Statement Termination


              Symbol and Statement Termination
              ------ --- --------- -----------

Statement length is independent  of  line  length.   Several
statements  can  be  packed  within  a  line,  or  a  single
statement can extend across several lines, some of which can
contain merely comments.  Continuation of a statement across
a line break is indicated by the ,, (double comma)  operator
at the start of the continuation line, or by the ,,, (triple
comma) operator at the right end (exclusive  of  comment  if
any)  of  the  line  being  continued,  or by the use of the
triple comma operator at the start of an intervening comment
line.  Over-specification of continuation causes no harm.  A
statement is terminated by the , (single comma) operator, by
the  END  operator  to  terminate  the  range of an IF class
operator, or by the subsequent  appearance  of  a  statement
line  not  tied  to the present line by the double or triple
comma operators.  The  BAC  (Begin  Automatic  Continuation)
operator  can make the continuation of statements across the
ends of lines be automatic.  This automatic continuation  is
terminated by the EAC (End Automatic Continuation) operator.
The maximum length of a single input line is 80  characters.
A  warning  is  output  on  the  teletype  if  the statement
exclusive of comment extends  beyond  75  characters.   When
text  replacement  is used, the warning is instead issued if
at any time more than  160  characters  remain  unprocessed.
Overflow is discarded in either case.

Symbols must be separated by blanks unless they  are  formed
from  characters  of  different  classes (see next section).
The 8 characters ( ) + - . , ' =  are  each  in  a  separate
class.   The  symbol  ,,,,  (4  commas) is not equivalent to
, ,,, (single comma, blank and 3 commas)  and  is  undefined
unless  the  programmer  specifies otherwise.  Such a symbol
can, however, be defined as either a constant or an  address
label  or  both,  since  there  is no correspondence between
character class and function except for the blank and dollar
sign  characters  and except for the asterisk character with
decimal integer prefix.  Although the character  classes  of
the  initially defined symbols were chosen so as to free the
programmer from  the  use  of  blanks  where  he  would  not
normally  use  them  in  the writing of English text, such a
convenience need not be maintained.



                     Character Classes
                     --------- -------

Symbols in TBLTRN statements are delimited by  a  change  of
character class.  The grouping of characters, except for the
blank or space character, into these classes  is  completely
under  program  control.  However, numerals removed from the
TBLTRN:  Language Specification Manual              Page  21
Character Classes


large unassigned character class  cannot  be  used  to  form
integers  nor  to form decimal integer prefixes or suffixes.
Up to 50  characters  can  be  assigned  character  classes.
Included in this count are ( ) + - . , ' = * $ and the space
or blank character, but not the  numerals.   This  limit  is
imposed  by  the  length  of  the 2 storage arrays needed to
store  the  characters   and   associated   class   numbers.
Attempted  overflow is detected by the portion of the TBLSTR
routine which processes the ACC operator.

The types of symbols based on the initial character  classes
are as follow.

Type 1.  A grouping of  the  non-symbol  forming  characters
         blank  and  dollar  sign  $  which  are in separate
         character classes.  The  dollar  sign  is  a  break
         character which prints on the teletype the value of
         the  symbol  or  table  entries   currently   being
         defined.

Type 2.  A symbol formed from one of the punctuation marks (
         )  . ,  '  =  + and -.  Each of these characters is
         initially within a separate character  class.   For
         example,  the statement --=- can be written without
         embedded blanks to define  the  symbol  --  (double
         minus) as identical to the symbol - (single minus).

Type 3.  A symbol formed from one or more of  the  remaining
         characters  which  are  not  within  any particular
         character class and so, by default, form  a  single
         large class.  These include the letters A through Z
         and numerals 0 through 9 and  punctuation  marks  *
         and  / as well as any other characters not assigned
         to specific classes.

         Subtype 3A.  A symbol which is not an  integer  and
         does  not  begin with a decimal integer prefix.  It
         should be noted that, when  the  radix  is  greater
         that 10, integers can be formed from the numerals 0
         through 9 and the alphabetic letters  A  through  a
         maximum of F for hexadecimal.

         Subtype 3B.  An integer formed from the numerals  0
         through  9, and, if the prevailing radix is greater
         than decimal 10,  from  the  letters  A  through  a
         maximum  of F for hexadecimal.  Symbols constructed
         from these numeric characters are integers  and  do
         not  require  storage  in the symbol dictionary.  A
         numeral equal or greater  than  the  radix  is  not
         allowed   in   a  symbol  formed  entirely  of  the
         characters 0 through 9.  For example, the number 80
         is a radix violation if the radix is 8 (octal).
TBLTRN:  Language Specification Manual              Page  22
Character Classes


         Subtype 3C.  A  symbol  with  a   decimal   integer
         prefix.    The  symbol  must  contain  at  least  1
         character not in the range 0 through 9 and, if  the
         radix  is  greater  than  10,  not  in  the range A
         through a maximum of F for hexadecimal.  The symbol
         is  not of this subtype if the symbol following the
         decimal integer prefix begins with a  character  in
         the  character  class  originally  occupied  by the
         asterisk.  The value of the  prefix  cannot  exceed
         100000.     See   section   titled   "Parenthetical
         Expressions" for the entry of  higher  or  negative
         values.

         The stem (the portion of the symbol  excluding  the
         prefix)  will  be  identified  if  it  is currently
         defined as an operator which can accept  a  decimal
         integer  prefix, and if the entire symbol including
         the prefix is not itself currently defined.  It  is
         possible  for selected values of the prefix to have
         altered meanings.  For example, the statements

                 L=LFT,XSY LFT
                 5LFT=10L,10LFT=5L
                 LFT=L,XSY L

         or, if instead a definition of  the  form  A=.''/B/
         (where  B  can  bear  a  decimal integer prefix) is
         used, which assigns to A the the meaning  of  B  in
         the  original  symbol  dictionary regardless of the
         current meaning of B, then the statements

                XSY LFT
                 5LFT=.''/10LFT/
                10LFT=.''/ 5LFT/
                  LFT=.''/  LFT/

        would interchange the meanings of the prefixes 5 and
        10   when   used  with  the  LFT  operator,  without
        modifying the meanings of the other prefixes.

        Subtype 3D.  A single  appearance  of  the  asterisk
        character  (or of any other character which has been
        placed into the character class originally  occupied
        by  the  asterisk)  with  a  decimal integer prefix.
        Such  symbols  are  produced  by  the  pre-execution
        assembly   of   user   defined   functions  and  are
        interpreted   without   referencing    the    symbol
        dictionary  as  the  operators having the identifier
        codes appearing as  the  decimal  integer  prefixes.
        Successive  symbols  of  this subtype do not require
        separating blanks  between  them  since  the  single
        asterisk   (or   other   character   in  its  class)
        terminates the symbol regardless of the class of the
TBLTRN:  Language Specification Manual              Page  23
Character Classes


        following  character.   Although the single asterisk
        does not appear as an  operator  within  the  symbol
        dictionary,  nothing  prevents  its  being  defined,
        providing it is not defined as equal to  some  other
        operator  which  could itself take a decimal integer
        prefix, then expected to be taken as  that  operator
        if used with a decimal integer prefix.

Each of the following character strings contains 4 symbols.

             THIS IS A SAMPLE
             .10TRX+20
             .+10TRX 20
             ---=-777

As can be seen from the above examples, blanks are necessary
only  when the character classes of adjacent symbols are the
same.  Extra blanks, however, cause  no  harm  and  in  some
cases make for easier reading.

It is convenient to separate words which are grouped to form
single  symbols  by the / character or, if the first word is
not an integer, by the * character which is then of the same
character class as the numerals and letters.  Symbols can be
of any desired length, limited only by the 80 character line
width.   The  following  examples  illustrate the legibility
obtained  through  the  use  of  *  and  /   as   separation
characters.

            THIS*IS*ONE*SYMBOL      THIS/IS/ONE/SYMBOL
            IF*2*GROUPS*MEET        IF/2/GROUPS/MEET
            ACID*SENSITIVE*GROUP    ACID/SENSITIVE/GROUP



                        Symbol Types
                        ------ -----

TBLTRN  symbols  can  be  operators,  address  labels,  both
operators  and address labels, or be undefined.  The primary
operator classifications are  constants,  packing  patterns,
text  strings,  and  programmed  operators.   The programmed
operators are the supplied TBLTRN symbols and are  described
individually   in   a  later  section.   Constants,  packing
patterns and text  strings  are  defined  within  the  input
table.

Constants are symbols which have only the property of value.
    They  can  be  either single or multiple precision.  The
    definition of a  multiple  precision  constant  contains
    directions  for offset from the table entry origin.  For
    example, the statements
TBLTRN:  Language Specification Manual              Page  24
Symbol types


        CONSTANT1=123
        CONSTANT2=2WRD 123

    define the symbols CONSTANT1  and  CONSTANT2  as  single
    entry   constants   with  the  value  decimal  123,  but
    CONSTANT2 is  multiple  precision.   When  used  without
    additional  offset  in  a  statement which defines table
    entries, CONSTANT1  assembles  into  the  current  table
    entry  orgin,  but CONSTANT2 would assemble into the 1st
    table entry beyond.  The statement

        CONSTANT1 CONSTANT2

    would then assemble 2 entries, each containing the value
    123.  Multiple precision constants can, however, specify
    multiple entries.  For example, the definition

        CONSTANT3=CONSTANT1 CONSTANT2

    or

        CONSTANT3=123 2WRD 123

    or

        CONSTANT3=MSK ARG 2WRD ARG
        CONSTANT3=CONSTANT3 123 123

    specifies  that  CONSTANT3  is  a  multiple   precision,
    multiple  entry  constant  which assembles the value 123
    into both the table entry  origin  and  the  next  entry
    beyond   when   used  without  additional  offset  in  a
    statement which defines table entries.

Packing patterns are templates which  specify  the  relative
    destination  and  manner  in  which  constants are to be
    packed.  The packing pattern is employed by stating  its
    name  followed by the constants, its arguments, to which
    it is to apply.  If more than one constant is  to  be  a
    single  argument, these are enclosed within parentheses.
    For example,  some  future  address  minus  the  current
    address,  a  relative separation within the table, could
    be packed as a single argument even though it involves 2
    constants  and,  in  this  case,  a change of sign.  The
    packing  pattern  is  defined  by   appending   to   the
    definition  of  a  currently defined packing pattern the
    definitions  of  other  packing  patterns,  and/or   new
    argument  specifications  each  terminated  by  the  ARG
    operator,   and/or   origin   increment   specifications
    indicated  by  the . (single period) operator.  The null
    packing  pattern  MSK  is  provided  to  initiate   this
    process.   As an example, the packing pattern defined by
    the statement
TBLTRN:  Language Specification Manual              Page  25
Symbol types


        PATTERN=MSK+0LFT 1WRD ARG IOR 3LFT 1WRD ARG

    or

        PATTERN=MSK IOR 3LFT 1WRD ARG
        PATTERN=MSK+0LFT 1WRD ARG PATTERN

    could be used in a statement of the form

        PATTERN(LOC ADRS-LOC.)5

    to pack the difference between the address of the  table
    entry  named ADRS and the current address into the first
    (non-shifted) byte of the current  table  entry  origin,
    and the value 5 into the fourth byte (3 byte shifted) of
    the current table entry orgin.  The byte sizes which the
    packing  pattern uses are those current when the packing
    of its arguments was defined,  regardless  of  the  byte
    size  in  effect  when the packing pattern happens to be
    used.  An argument of a packing pattern which  does  not
    contain  an address and which remains fixed in value can
    be specified in the packing pattern definition following
    the  ARG operator which has specified its packing.  Such
    an  automatic   argument   must   be   enclosed   within
    parentheses if it consists of more than a single integer
    or constant.  See the description of  the  ARG  operator
    for examples of automatic argument definitions.

Text strings are  groups  of  characters  following  on  the
    current  line  either  of  the  operators  ' or ''.  The
    string starts following  the  first  non-blank  charcter
    after the ' or '' operator and continues through the end
    of the current line or up to the next appearance of  the
    delimiter  character.  Except for specifying the ends of
    the string, the delimiter character  is  ignored.   Text
    strings  are  used  for  the  introduction  of character
    information which is not to be scanned for  recognizable
    symbols.   A typical example of the use of a text string
    is the statement

        ACC'/+-/

    which specifies that the plus sign is to be placed  into
    the  character  class  of the minus sign.  Operators can
    also be defined as text strings.  The statement

        LOC*OF*A='/LOC A/

    defines the symbol LOC*OF*A as an  operator  which  will
    replace  itself  by  the text LOC A wherever encountered
    except within the range of a  TEL  or  XSY  operator  or
    within  the  range  of  an unfulfilled IF or Do-If class
    operator.  It is entirely  possible  for  the  character
TBLTRN:  Language Specification Manual              Page  26
Symbol types


    delimiting  a text string to be an apostrophe as long as
    this is separated by at least one blank from the leading
    '  or  ''  operator.   Also, a text string can contain a
    text string.  Examples of quite complicated text strings
    are  given  in  the  later  section  named "User Defined
    Functions."

    The insertion of the text by which an operator  replaces
    itself  can  be deferred until a given number of symbols
    or statements have been interpreted if the  text  string
    is  preceded  in  the  definition  of  the operator by a
    constant  or  parenthetical  expression.   The  argument
    count  is  a number of symbols if zero or positive, or a
    number of statements if negative.  Any insertion made at
    the end of a statement extends, rather than closes, that
    statement.  The insertion is made  at  the  end  of  the
    current   statement   if   the  argument  count  is  -1.
    Statements within the range of an unfulfilled  IF  class
    operator  are  not  counted.   Another  text replacement
    operator  cannot  direct  a  deferred  insertion   while
    symbols or statements are being counted to determine the
    point at which text is to be inserted by  a  first  text
    replacement  operator.   A text replacement operator for
    which the insertion is not deferred  can  appear  within
    such  a  range  but  is  not  itself included within the
    symbol count.  Similarly  not  counted  are  transparent
    symbols  and  those  symbols  within  the  range  of  an
    unfulfilled (false answer) Do-If class operator.  A text
    string  together  with  its  leading ' or '' operator is
    counted as a single symbol.  A symbol can be defined  as
    a  sequence  of  deferred  text  strings.   An insertion
    deferred for a given number of symbols is not  performed
    at  all  if the current statement is terminated prior to
    the interpretation of the  desired  number  of  symbols.
    Similarly   cancelled  are  any  additional  unperformed
    insertions directed by the operator which specified  the
    failing symbol count.

Address labels are table entry names and have as values  the
    locations  of the named entries within the table.  These
    are  treated  as  constants  if  preceded  by  the   LOC
    operator.   (The  LOC  operator  cannot  be  used with a
    following address label either in  a  symbol  definition
    nor  as the value following an operator which could have
    taken a decimal  integer  prefix,  but  did  not.   This
    restriction  is  necessary  to  prevent  the  tremendous
    amount  of  temporary  storage  which  might   be   made
    necessary by the use of an undefined label within such a
    symbol  or  value  definition.   It  should  be   noted,
    however,  that  a symbol can be defined as a text string
    containing   these   symbols   merely    as    character
    information.)  Address  labels  specify  the destination
    when  used  after  the  BIT  operator.   A  symbol   can
TBLTRN:  Language Specification Manual              Page  27
Symbol types


    concurrently  be  both an operator and an address label,
    but definition of a symbol as a text string always takes
    precedence over possible definition as an address label.
    A symbol being defined as an address label  can  already
    be an address label.  If the symbol is an operator other
    than a text string, in order to be assigned as a  label,
    it  must  follow  one  of the operators ADR, LOA or HIA.
    These operators specify that the symbol is the label  of
    the  current  table  entry  origin,  of the lowest table
    entry assembled by the current  statement,  and  of  the
    highest  table  entry  so  far  assembled by the current
    statement respectively.  Any of these operators  can  be
    offset  to  refer to higher table entries if preceded by
    the WRD operator either with decimal integer  prefix  or
    following   parenthetical   expression.   No  offset  is
    indicated by 1WRD and is the default value.  The  offset
    specified by the WRD operator prior to the appearance of
    the address label does not apply to following  constants
    nor  to  additional  following  address  labels.  If the
    symbol being assigned as an  address  label  is  not  an
    operator,  then  use  of the ADR operator is optional in
    the assignment of an address label either prior  to  the
    specification  in  the  statement  of  the contents of a
    table entry or immediately after a packing  pattern  has
    specified  an  increment  of the table entry origin.  It
    should be noted that under these conditions a misspelled
    operator  name  can be taken as an address label and, if
    the statement in which it appears has  not  assembled  a
    table entry, force the assembly of a zero table entry.

    The table entry associated with an address  label  often
    is  unknown  when  the label is referenced.  The default
    sign should never be used to  pack  an  unknown  address
    label  into  a byte containing other contents, since the
    specified action can be performed only  when  the  label
    has been assigned.  Thus, a statement of the form

        LOC ADRS+1

    where ADRS is an unknown address, effectively amounts to
    the statement (providing the default sign is IOR)

        1 IOR LOC ADRS

    and should instead have been written as

        +LOC ADRS+1

    or

        1+LOC ADRS
TBLTRN:  Language Specification Manual              Page  28
Symbol types


    Even a statement of the form

        LOC ADRS+LOC ADRS

    gives unexpected results since an initial  reference  of
    an  unknown  address  within  a  statement  actually  is
    processed last in order to allow TBLTRN to determine  if
    the table entry will contain anything else.



               Radices for Integer Evaluation
               ------- --- ------- ----------

The default radix for table entry statements is  independent
from that used in symbol definitions.  Both of these radices
are set to 10 at the start of each table.  All integers  are
therefore  assumed  to  be decimal unless these radices have
been altered temporarily by the DEC (DECimal) or OCT (OCTal)
operators  or  permanently  by  the TRX (Table RadiX) or SRX
(Symbol RadiX) operators.  None of these radix  modification
operators  alter  the interpretation of the integer prefixes
allowed for some operators.  The DEC and OCT  operators  are
used  in either table entry or symbol definitions to specify
that the following integer is to be interpreted  as  decimal
and  octal  respectively,  regardless  of  the  value of the
default radix.   Necessary  packing  size,  sign  and  shift
information  can  precede  these  operators  or  can  appear
between these operators and the integer to which they apply.
The following integers are equivalent

            8SIZ 1LFT OCT 10
            8SIZ OCT 1LFT 10
            1LFT 8SIZ OCT 10
            1LFT OCT 8SIZ 10
            OCT 8SIZ 1LFT 10
            OCT 1LFT 8SIZ 10

and all equal decimal 64 (octal 100).  Constructions of  the
sort

            TABLERADIX16=16TRX
            SYMBOLRADIX16=16SRX

or

            I16=DEC 16
            TABLERADIX16=TRX I16
            SYMBOLRADIX16=SRX 16

are allowed, but the use of the radix  commands  within  the
definition   results  in  no  permanent  alteration  of  the
prevailing  default  radices.    Either   of   the   symbols
TBLTRN:  Language Specification Manual              Page  29
Radices for Integer Evaluation


TABLERADIX16   or  SYMBOLRADIX16  could  be  used,  however,
outside a symbol  definition  to  change  the  corresponding
radix,  and  SYMBOLRADIX16  could  be  used  within a symbol
definition to temporarily alter the radix for the  remainder
of  the definition.  Some care must, of course, be exercised
if either  radix  is  set  greater  than  decimal  10.   For
example, the statements

            10TRX 16SRX,ABC=ABC

or

            10TRX,ABC=16SRX ABC

would define the symbol ABC as hexadecimal ABC or 10*16*16 +
11*16 + 12.  Similarly, the statements

            10TRX 16SRX,B=BIT,ABC=10B,BCD=10BIT

would define symbol ABC as hexadecimal 10B but  BCD  as  the
operator  10BIT which could then be used in other statements
to specify that the 10th bit in a particular table entry  be
turned  on.   Under  a  default  symbol  definition radix of
decimal 10, ABC would have been given the latter  definition
since  B  and  BIT  have  here  been  defined  as  identical
operators.  



                 Parenthetical Expressions
                 ------------- -----------

Parenthetical expressions in TBLTRN input can be  of  either
of the following 2 types.

1.  Possibly  multiple  precision  expressions.    Such   an
    expression  can  have  several values, each of different
    precision.   Integers  are  considered  to   be   single
    precision constants.  The values of a multiple precision
    constant   are   used   to   establish   values   having
    corresponding  precisions  for the expression.  Possibly
    multiple  precision  expressions  are   used   for   the
    following purposes.

    A.  The entering of several constants into a table entry
        or  constant  definition with a single sign and byte
        and word specification.
    B.  The  entering  of  several  constants  as  a  single
        automatic   argument  within  the  definition  of  a
        packing pattern.
    C.  The use of several constants in the definition of  a
        text replacement operator to establish the number of
        symbols or statements for which the insertion of the
TBLTRN:  Language Specification Manual              Page  30
Parenthetical Expressions


        text  is  to  be  deferred.   Although this value is
        accumulated  as  a   possibly   multiple   precision
        expression,  only  the resulting low precision (word
        1) value is used.

2.  Single precision expressions.  Such  an  expression  has
    only  a single value.  The values of integers within the
    expression are always used in determining the  value  of
    the  expression.   Only  the  values of words having the
    precision selected by the PFX  operator  are  used  from
    symbols  defined  as  constants.   The PFX operator with
    integer prefix, or a symbol defined as  the  combination
    of  PFX  operator and value, can appear either before or
    within the expression.  Single precision expressions are
    used for the following purposes.

    A.  The use of several  constants  in  establishing  the
        value  of  an  operator  which  could have been used
        instead with a decimal integer prefix.
    B.  The use of several  constants  in  establishing  the
        value to be tested by the Do-If class operators DIN,
        DIL, DILE, DIE, DIGE, and DIG, and by the  IF  class
        operators IFN, IFL, IFLE, IFE, IFGE, and IFG.

These  parenthetical  expressions  all   have   the   common
structure

        OSR(OSR CONSTANT OSR CONSTANT OSR CONSTANT)

in  which  OSR  indicates   optional   sign   and/or   radix
specifications  in  any  order,  and  CONSTANT  is either an
integer or a symbol defined as a constant (or  the  operator
LOC  followed  by an address label if the expression is used
to define the contents of a  table  entry  only).   The  OSR
CONSTANT  combination  can  appear  within the parenthetical
expression any number of times.  However, if only  a  single
constant  is  used, then the parentheses are optional in all
circumstances in which a expression can appear.

A sign specified prior to the left  parenthesis  applies  to
any  unsigned  constant  within  the expression.  Within the
expression, a sign before a  constant  temporarily  replaces
the  sign, if any, established prior to the left parenthesis
and applies  only  to  the  following  constant.   The  only
instance  in  which  a  parenthetical  expression can appear
within another is the  specification  of  the  value  of  an
operator  which  could  have  taken a decimal integer prefix
inside a parenthetical expression defining table entries,  a
constant, an automatic argument of a packing pattern, or the
argument count of a deferred text  insertion.   Due  to  the
limitations  of  the contents of a parenthetical expression,
the operator involved would have to be either TRX or SRX  in
expressions  similar  to  (assuming  that  A  and  RADIX are
TBLTRN:  Language Specification Manual              Page  31
Parenthetical Expressions


constants and that RADIX happens to be 2  greater  than  the
desired radix)

        IOR 2WRD 3LFT(A TRX(RADIX-2)64)

or

        CONSTANT=2WRD 3LFT(A SRX(RADIX-2)64)

or

        MASK=MSK IOR 2WRD 3LFT ARG(A SRX(RADIX-2)64)

It should be  noted  that  the  ))  operator  (double  right
parenthesis  without internal blanks) is not equivalent to a
double appearance of the ) operator and cannot  be  used  to
terminate   a   parenthetical  expression  except  when  the
parenthetical expression is a packing pattern  argument  and
the  ))  is meant to both close the argument and advance the
argument list of the packing  pattern  to  the  next  origin
increment if any.



       Entering Multiple Constants into a Single Byte
       -------- -------- --------- ---- - ------ ----

All items enclosed within parentheses in a  table  entry  or
constant  definition are entered into the table entry or the
constant being defined using the shift and  sign  in  effect
when  the  left  parenthesis  is encountered.  If within the
range of a packing pattern, such a parenthetical or constant
shift  expression  is  taken as a single argument.  Integers
within the constant shift expression are  interpreted  under
the  default  radix  unless  preceded  by  the  OCT  or  DEC
operators.   The  SRX  or  TRX   operators   (whichever   is
appropriate)  can  similarly  be  used  either  with decimal
integer  prefix   or   following   constant   or   following
parenthetical   expression   within   the   constant   shift
expression.  The sign, but not the shift or word count,  can
be  temporarily  modified  for  a single constant within the
constant shift expression, but is restored to  its  original
value after the constant has been processed.  As an example,
the sum of A and B could be entered into the byte and  entry
specified  for  the  first  argument  of the packing pattern
MORE, and the sum of C and D into those  specified  for  the
second argument by the statement

            MORE (A+B)(C+D)

It should be noted that neither A and B  nor  C  and  D  are
summed  prior  to  being inserted into the table entry being
defined.  The parenthetical expression  merely  defines  the
TBLTRN:  Language Specification Manual              Page  32
Parenthetical Expressions


byte  and  word into which A, B, C and D are packed, and the
signs used during this packing.

A  right  parenthesis  following  a  right  parenthesis   or
unmatched   by  a  preceding  left  parenthesis  causes  the
remaining unfulfilled argument specifications of the packing
pattern  currently in effect to be ignored up to the packing
pattern's next origin increment specification.   The  effect
of  the  packing  pattern  within  the  current statement is
terminated if the packing pattern has no unperformed  origin
increment   specification.    A  double  right  parenthesis,
written without internal blanks at the end of  the  constant
shift  expression,  is  here  equivalent  to  2 single right
parentheses.  (However, a double right  parenthesis  without
internal  blanks cannot be used to terminate both a constant
shift expression and a parenthetical expression following  a
SRX  or  TRX operator within the constant shift expression.)
For example, if additional items were to be specified beyond
the  argument  list, the argument list can be terminated, or
advanced to the next origin increment specification if  any,
by  the  double  right  parentheses  operator  ))  as in the
statement

            MORE (A+B)(C+D)) 100SIZ 2LFT (E+F)

A double left parentheses, written either  with  or  without
blanks,  is  always  equivalent to a single left parenthesis
(both have the  same  operator  identifier  code),  so  this
statement could also be written

            MORE ((A+B)(C+D)) 100SIZ 2LFT (E+F)

A null argument of a packing pattern can be indicated by the
operator  NUL, by the () operator pair or by the sequence of
3 operators (NUL).



   Using Multiple Constants Instead of an Integer Prefix
   ----- -------- --------- ------- -- -- ------- ------

Those  operators  which  require  a  value  which   can   be
established  by a decimal integer prefix can instead be used
with a following, possibly signed integer or constant, or by
a   group  of  possibly  signed  constants  enclosed  within
parentheses.  If no sign is given,  the  sign  used  is  the
default  sign  for the current byte size.  The sign, if any,
established prior to the operator is not  used  and  remains
unchanged   following   the   specification   of  the  value
associated with the operator.  For example, the statement

        -LFT(A+2)10
TBLTRN:  Language Specification Manual              Page  33
Parenthetical Expressions


assembles a  table  entry  containing  the  result  of  left
shifting  the  integer  10  the  sum  of A and 2 bytes, then
subtracting the shifted result from zero.  A sign,  if  any,
established  between  the  operator and the left parenthesis
preceding a group of constants will  apply  to  any  of  the
constants which are unsigned.  For example, the statement

        -LFT+(A 2)10

produces the same result as the previous example, regardless
of  the  default sign for the current byte size, even though
the integer 2 is unsigned.  Integers following the  operator
are  interpreted  under  the  current radix, not necessarily
decimal.  The radix can be temporarily changed at any  point
by  the  OCT  or DEC operators, or permanently by the TRX or
SRX operators (whichever is appropriate) used  with  decimal
integer prefix only.

The value of a  multiple  precision  constant  following  an
operator  which  could  have taken a decimal integer prefix,
but did not, normally is the value of its highest  precision
word.   The  value  can,  however, be of a word of precision
selected by the PFX operator if this latter operator is used
with  a  positive value.  The default selection of the value
of the highest precision word can be regained by use of  the
PFX  operator  with  zero  value.  The value of the constant
following an operator  which  could  have  taken  a  decimal
integer prefix, but did not, can instead be its precision if
the PFX operator is issued  with  a  negative  value.   Such
precision selection does not apply to integers.



                 Stack Construction and Use
                 ----- ------------ --- ---

TBLTRN has operators for the construction and  use  of  both
value  and  name  stacks.   Value stacks are merely multiple
precision constants  from  which  the  values  of  words  of
selected  precision can be accessed by those operators which
could be used with decimal integer  prefixes.   Name  stacks
are  families  of operators having a common name stem with a
distinguishing decimal integer suffix.

The value stack A  could  be  defined  either  within  an  =
definition,  or  by the stack construction operators PSH and
STK.  These latter 2 operators differ only with  respect  to
the destination precision.  STK stacks the new word onto the
top of the stack with a precision one greater than  that  of
the  current  stack.   PSH  pushes  the  new  word  into the
precision one word of the  stack,  displacing  the  previous
contents of the stack upward.  Either STK or PSH can be used
to place a word into word one of an  undefined  stack.   For
TBLTRN:  Language Specification Manual              Page  34
Stack Construction and Use


example, either of the statements

        PSH 444 A PSH 333 A PSH 222 A PSH 111 A

or

        STK 111 A STK 222 A STK 333 A STK 444 A

would construct a stack with  the  value  444  in  the  high
precision  4th  word  and the value 111 in the low precision
1st word.  An identical stack would be produced  by  any  of
the following sequences of = definitions.

        A=2WRD A 444
        A=2WRD A 333
        A=2WRD A 222
        A=2WRD A 111

or

        A=444 2WRD A
        A=333 2WRD A
        A=222 2WRD A
        A=111 2WRD A

or

        A=A PFX-1 WRD(A+1)111
        A=A PFX-1 WRD(A+1)222
        A=A PFX-1 WRD(A+1)333
        A=A PFX-1 WRD(A+1)444

or

        A=PFX-1 WRD(A+1)111 A
        A=PFX-1 WRD(A+1)222 A
        A=PFX-1 WRD(A+1)333 A
        A=PFX-1 WRD(A+1)444 A

The above examples work correctly even when A  is  undefined
since,  within an = definition, the symbol being defined, if
currently undefined, is taken as a constant  of  zero  value
and  without offset even if an offset has been supplied by a
packing pattern or by the WRD operator.  Statements such as

        A=A

or

        A=5WRD A

would, if A was previously undefined or  merely  an  address
label,  define  A  as  a  single precision constant with the
TBLTRN:  Language Specification Manual              Page  35
Stack Construction and Use


value zero.  When the  symbol  being  defined  is  currently
undefined  or  is  merely  an  address  label,  and  appears
following an operator  which  could  have  taken  a  decimal
integer  prefix,  but  did  not,  the value of the symbol is
taken as zero even if the  PFX-1  operator  has  temporarily
selected  that  the  value  of a non-integer constant be its
precision.  Within an = definition, use of any symbol  which
is  undefined  or  merely  an  address label, other than the
symbol being defined, is considered to be a non-fatal error.
Similarly,  outside  an  =  definition,  a  symbol  which is
undefined or merely an address label,  when  used  after  an
operator  which  could  have taken a decimal integer prefix,
but did not, is assumed to have value and precision equal to
zero.

Value stacks can be used as constants  in  the  assembly  of
table entries or in the definitions of other constants or of
the automatic arguments  of  packing  patterns.   Under  the
default precision selection (identical with that selected by
the 0PFX operator), the value of a constant or  value  stack
following  an  operator  which  could  have  taken a decimal
integer prefix, but did not, is the  value  of  the  highest
precision  word  of  the  constant.  If the PFX operator has
been issued  with  positive  value,  the  value  of  such  a
constant  is the value of the word of the precision selected
by the PFX operator if a word of the selected precision  has
been defined, or zero otherwise.

The highest precision word of a value stack is  the  initial
value placed into the stack if the PSH operator was used, or
the most recent value if the STK operator was used.  The POP
operator  removes  the highest precision word from the stack
and so reveals the values in the order in  which  they  were
inserted  by the PSH operator.  Applying the POP operator to
a single precision stack removes the stack symbol  from  the
symbol  dictionary.   The ROT operator reveals the values in
the same order, but pushes the value stripped from the  high
precision word into the low precision word so that the stack
maintains constant precision and is not destroyed.

Name stacks are referenced by the NST (Numeric Symbol  Text)
operator.     This   operator   replaces   itself   in   all
environments, except within the range of an  unfulfilled  IF
or  Do-If  operator,  by  a  symbol  name  consisting  of an
alphabetic stem established by the NSN (Numeric Symbol Name)
operator  with  a  decimal  integer  suffix  set  by the NSV
(Numeric Symbol Value) operator.  Stacks constructed through
the  use  of  the NST operator can consist of either address
labels or other operators.  Several examples of such  stacks
are given in the section titled ''User Defined Functions.''
TBLTRN:  Language Specification Manual              Page  36
User Interaction with Assemblies


              User Interaction with Assemblies
              ---- ----------- ---- ----------

The programmer can obtain teletype control of an assembly at
any  preselected  statement break by use of the TTY operator
outside a symbol definition  in  the  input  text.   If  the
primary  input  is  not  itself the teletype, the translator
will write the message

            CONTROL TO TELETYPE

on the teletype, swap  the  uninterpreted  portions  of  the
teletype  and  input file text buffers, and transfer control
to the teletype.  All statements issued  by  the  programmer
(including  those  following  on  the  same  line either his
previous issuance of  the  TTY  operator  or  closure  of  a
definition  requested  by  the  ==  operator if any) will be
inserted into the assembly until the next appearance of  the
TTY   operator   outside  a  symbol  definition.   The  only
variation in the format for teletype input is the acceptance
of  120  character  lines  (such  as might be desired if the
teletype has a wide carriage) instead of  the  80  character
lines read from the input file.

The == operator can be  used  to  force  the  programmer  to
define  selected  symbols  without  relinquishing control to
him.  Messages can be transmitted to the programmer  by  the
''  operator which treats all characters to its right within
a pair of delimiter characters as a  non-executable  comment
and  causes  these  to be written on the teletype.  The text
line

            AA=AA+1,''/AA HAS BEEN INCREMENTED/

would add 1 to the  present  value  of  AA,  then  type  the
message

            AA HAS BEEN INCREMENTED

on the teletype.

In the above example, the comma separating AA+1 and the text
string  to  be  written  on  the teletype is necessary since
otherwise  AA  would  become  a  text  replacement  operator
specifying  the  insertion  of  the  text  string after AA+1
symbols (or statements if this value is negative).

A symbol or statement count, which  is  being  performed  to
determine  the  point  at  which  to  make  a  deferred text
insertion, will include either the == or TTY  operators  and
will  continue  at  the  start  of  the  text from the newly
selected input device.  If the symbol or statement count has
not  yet  begun  due to the == or TTY operators being within
TBLTRN:  Language Specification Manual              Page  37
User Interaction with Assemblies


text already inserted by the same use of the operator  which
has  specified  the  deferred  text insertion, then the text
read from the device being selected will also  be  taken  as
part of the previously inserted text and the testing for the
point at which the insertion is to be made will  be  resumed
only  when  control  is returned to the device deselected by
the == or TTY operator.




              Conditional Assembly Capability
              ----------- -------- ----------

The IF and Do-If class operators are provided to  allow  the
programmer  to delete the execution of portions of the input
table during an assembly or to  abort  recursive  functions.
IF  class  operators  can  only  appear  at  the  start of a
statement (or as a separate statement) and must be  followed
immediately  by a constant or expression the value of which,
or by a symbol the identity of which is tested to  determine
whether  the  following  statements  are  to  be executed or
ignored.  The statements through the matching  END  operator
are  executed  only if the following symbol or parenthetical
expression  fulfills  the  requirement  of  the   IF   class
operator.   Transparent  or  null text replacement operators
are ignored and so cannot be tested.   Additional  IF  class
operator tests and their matching END operators can occur in
the range of the statements being ignored, but,  of  course,
no  action  is  taken for these except for the adjustment of
the IF versus END count used in detecting the  END  operator
which  closes  the  range of the original IF class operator.
In order that the IF class operators  be  treated  correctly
when  used  within the range of other IF class operators, it
is important that they be preceded by a statement  break  (a
comma or END operator or, providing the BAC operator has not
been issued, the start of a new line not itself preceded  on
the  same  line  by  the  ,,  operator  or  on  the previous
non-comment line or on an intervening comment  line  by  the
,,,  operator).   The  IF class operators and the conditions
tested are as follow.

Symbol     Condition

IFA        is symbol an address

IFD        is symbol defined

IFE        is value of expression equal zero

IFG        is value of expression greater than zero

TBLTRN:  Language Specification Manual              Page  38
Conditional Assembly Capability


IFGE       is value of expression greater than or equal zero

IFL        is value of expression less than zero

IFLE       is value of expression less than or equal zero

IFN        is value of expression not equal zero

IFNA       is symbol not an address

IFNO       is symbol not an operator other than an address

IFO        is symbol an operator other than an address

IFU        is symbol undefined

An example of the use of the IF class operators follows.

            ''+NON-ZERO TO INCREMENT AA BB CC+
            SWITCH==
            IFN SWITCH AA=AA+1
                       BB=BB+1
                       CC=CC+1
            ''/AA BB AND CC HAVE BEEN INCREMENTED/
            END

The above sequence of statements first types the message

            NON-ZERO TO INCREMENT AA BB CC

on the teletype.  The == operator then requests the user  to
define the symbol SWITCH on the teletype.  The Statements

            AA=AA+1
            BB=BB+1
            CC=CC+1
            ''/AA BB AND CC HAVE BEEN INCREMENTED/

are executed only if the value of SWITCH is non-zero.

The range of the Do-If operators is indicated instead  as  a
number  of symbols within the current statement, rather than
by  a  particular  statement  terminator.   This  number  of
symbols  is  specified  as  a decimal integer prefix or by a
following constant or parenthetical expression.   The  range
of  the Do-If class operator is terminated at the end of the
statement even if the number of symbols  indicated  has  not
been encountered.  Within the range of an unfulfilled (false
answer) Do-If class operator, a text  string  including  its
delimiter characters and the initiating ' or '' operators is
counted as a single symbol.  An operator defined as  a  text
string  similarly  is  counted as a single symbol and is not
replaced by its equivalent text.  Operators defined as  null
TBLTRN:  Language Specification Manual              Page  39
Conditional Assembly Capability


text  strings  (transparent  symbols)  are not counted.  The
conditions tested by the IF and Do-If classes  of  operators
are  the  same.   The  following sequences of statements use
Do-If class operators to perform the same task as  given  as
an example above.

        ''+NON-ZERO TO INCREMENT AA BB CC+
        SWITCH==,7DIN SWITCH 1INC AA 1INC BB 1INC CC
        ,,''/AA BB AND CC HAVE BEEN INCREMENTED/

or

        ''+SWITCH MUST BE 27 TO INCREMENT AA BB CC+
        SWITCH==,DIE 8(27-SWITCH)INC 1 AA 1INC BB 1INC CC
        ,,''/AA BB AND CC HAVE BEEN INCREMENTED/

The comment and continuation symbols ... ,, and ,,, are,  of
course,  not  included  within  the  unfulfilled Do-If class
operator symbol count.



                   Data Statement Output
                   ---- --------- ------

The assembled table  entries  are  output  as  FORTRAN  DATA
statements which must then be spliced into the program which
requires the table.  The format of these DATA statements can
be  defined  in  the  table being assembled.  The array name
used in the output DATA statements  is  taken  as  the  text
string  following  the TTL operator.  The character width of
the columns of data within the generated DATA  statement  is
specified as a decimal integer prefix of, or the constant or
parenthetical expression following, the CLM operator.   This
prefix  or  following  constant  or parenthetical expression
will specify one of the following actions.

1.  If  the  specified  column  width  is  zero,  the   DATA
    statements  are  generated without internal blanks.  The
    output requires the minimum number of characters, but is
    difficult to interpret visually.

2.  If the specified column width is greater than  zero  but
    is  less  than  the  maximum number of characters in any
    single number, blanks will be inserted into  the  output
    to  form  columns  of  sufficient  width  to contain the
    output.

3.  If the specified column width is  equal  to  or  greater
    than  the  maximum  number  of  characters in any single
    number, blanks will be inserted into the output to  form
    columns  of  the specified width.  Separating commas are
    not included in this count.
TBLTRN:  Language Specification Manual              Page  40
Data Statement Output


The number of characters in the statement field of a  single
output  line is specified as a decimal integer prefix of, or
the constant or parenthetical expression following, the  WID
operator.  The value of this prefix or following constant or
parenthetical expression cannot be greater than 66 since, of
the 72 characters in a single line of a FORTRAN statement, 5
are  in  the  statement  number  field  and  1  is  in   the
continuation field.

For example, the specification statement

            TTL'/ONE/52WID 7CLM

was used to generate the following DATA statements.

      DIMENSION ONE   (120),ONE001( 50),ONE051( 50),
     1          ONE101( 20)
      EQUIVALENCE (ONE001(1),ONE(  1)),
     1            (ONE051(1),ONE( 51)),
     2            (ONE101(1),ONE(101))
      DATA ONE001/     10,     10,     10,     10,     10,
     1               1010,   1010,   1010,   1010,   1010,
     2             101010, 101010, 101010, 101010, 101010,
     3                 20,     20,     20,     20,     20,
     4               2020,   2020,   2020,   2020,   2020,
     5             202020, 202020, 202020, 202020, 202020,
     6                 30,     30,     30,     30,     30,
     7               3030,   3030,   3030,   3030,   3030,
     8             303030, 303030, 303030, 303030, 303030,
     9                 40,     40,     40,     40,     40/
      DATA ONE051/   4040,   4040,   4040,   4040,   4040,
     1             404040, 404040, 404040, 404040, 404040,
     2                 50,     50,     50,     50,     50,
     3               5050,   5050,   5050,   5050,   5050,
     4             505050, 505050, 505050, 505050, 505050,
     5                 60,     60,     60,     60,     60,
     6               6060,   6060,   6060,   6060,   6060,
     7             606060, 606060, 606060, 606060, 606060,
     8                 70,     70,     70,     70,     70,
     9               7070,   7070,   7070,   7070,   7070/
      DATA ONE101/ 707070, 707070, 707070, 707070, 707070,
     1                 80,     80,     80,     80,     80,
     2               8080,   8080,   8080,   8080,   8080,
     3             808080, 808080, 808080, 808080, 808080/

However, with the specification statement

            TTL'/TWO/52WID 0CLM

the following output is instead  obtained  representing  the
same table.
TBLTRN:  Language Specification Manual              Page  41
Data Statement Output


      DIMENSION TWO(120),TWO001(99),TWO100(21)
      EQUIVALENCE (TWO001(1),TWO(1)),(TWO100(1),TWO(100))
      DATA TWO001/10,10,10,10,10,1010,1010,1010,1010,1010,
     1101010,101010,101010,101010,101010,20,20,20,20,20,
     22020,2020,2020,2020,2020,202020,202020,202020,
     3202020,202020,30,30,30,30,30,3030,3030,3030,3030,
     43030,303030,303030,303030,303030,303030,40,40,40,40,
     540,4040,4040,4040,4040,4040,404040,404040,404040,
     6404040,404040,50,50,50,50,50,5050,5050,5050,5050,
     75050,505050,505050,505050,505050,505050,60,60,60,60,
     860,6060,6060,6060,6060,6060,606060,606060,606060,
     9606060,606060,70,70,70,70,70,7070,7070,7070,7070/
      DATA TWO100/7070,707070,707070,707070,707070,707070,
     180,80,80,80,80,8080,8080,8080,8080,8080,808080,
     2808080,808080,808080,808080/

The routines DATAST and DAWORD can be  replaced  if  FORTRAN
DATA  statements  are  not  the desired output.  The routine
DANUMB,  although  part  of  the  DATA  statement  generator
package, is used elsewhere by TBLTRN to print positive octal
numbers without the  leading  zeroes  normally  inserted  by
PDP-10   FORTRAN,   and  to  generate  the  decimal  numbers
appearing both in the text by which NST replaces itself  and
in pre-assembled code.



                Construction of Test Tables
                ------------ -- ---- ------

The TBLTRN syntax is maintained  through  the  use  of  test
tables  which  assemble to give predicted results.  New test
tables are written when the syntax recognition  facility  is
extended  or  to  insure  against  recurrence  of  corrected
errors.  Test tables are designated by the appearance of the
TST   operator   either   with  decimal  integer  prefix  or
immediately  followed  by  a   constant   or   parenthetical
expression which specifies the number of table entries to be
assembled by the test statements.  The assembly  of  a  test
table  is  normal  except that the TTY and == operators swap
buffers but continue to read from the input file if the  TST
operator  has  been issued.  The expected values of the test
statements are specified by simple statements at the end  of
the  table  so that the actual number of table entries which
should be assembled is  twice  that  specified  by  the  TST
operator.   The  upper  section  of  the predicted length is
compared with the remaining lower section of the table,  and
any differences are listed in both octal and decimal through
the next correct entry.  For example, the table

        10TST TTL'+TEST1+
        1,2,6,3,4,5,7,8,9
        1,2,3,4,5,6,7,8,9,10
TBLTRN:  Language Specification Manual              Page  42
Construction of Test Tables


        BLK

would produce the following error messages  on  the  listing
device.

        TEST1
        ARRAY DIFFERENCES
        *****
        1)     1 OCT             1 DEC             1
        1)     2 OCT             2 DEC             2
        1)     3 OCT             6 DEC             6
        1)     4 OCT             3 DEC             3
        *
        2)    10 OCT             1 DEC             1
        2)    11 OCT             2 DEC             2
        2)    12 OCT             3 DEC             3
        *****
        1)     7 OCT             7 DEC             7
        *
        2)    15 OCT             6 DEC             6
        2)    16 OCT             7 DEC             7
        *****
        2)    19 OCT            12 DEC            10
        *****

A correctly assembled test table enters only its  name  into
the listing file.



                   User Defined Functions
                   ---- ------- ---------

User defined functions are created by  manipulation  of  the
input  character  stream  as  this  is  processed.   This is
possible since symbols can be defined as  text  strings  and
are  replaced  by  these  text  strings whenever encountered
later  except  within  the  range  of  the  XSY  or  TEL  or
unfulfilled  IF or Do-If class operators.  Such a definition
is similar to that of any other symbol except that the  text
string  follows either the ' or '' operators and is enclosed
within delimiter characters.

The main restrictions  imposed  upon  the  writing  of  user
defined  functions  are  that  the  length  of a single text
string cannot normally exceed the length of a  single  input
line,  usually 80 characters, minus delimiters, and that the
unprocessed text in a single line cannot exceed the  maximum
buffer  length or 160 characters after the text replacement.
Buffer overflow is discarded after  informing  the  user  of
this  action.  The message is, however, written at most only
once for a  single  line.   Also,  since  functions  can  be
recursive   (self-calling),  some  maximum  number  of  text
TBLTRN:  Language Specification Manual              Page  43
User Defined Functions


replacements in a single input line must be taken as a limit
to  abort infinite loops.  This upper limit is initially set
at 1000 but is under program control (see description of LMT
operator).  For example, the symbol definition

        A='+A B+

would result in both buffer overflow and infinite loop which
must  be  terminated when the symbol A is later encountered.
In particular, the first 5 text replacements  would  produce
the following lines of unprocessed text.

        A B
        A B B
        A B B B
        A B B B B
        A B B B B B

Sample Function F0:
------ -------- --

N0=0...COUNT OF TIMES F0 CALLED
F0='+NSN'/Z/NSV N0 LOA NST 1INC N0+

The above is an example of a simple  user  defined  function
named  F0  which assigns a unique label to the current table
entry origin and counts the number  of  times  it  has  been
called.   F0  employs the NST (Numeric Symbol Text) operator
which replaces  itself  by  a  symbol  constructed  of  a  6
character  or shorter prefix established by the NSN (Numeric
Symbol Name) operator and of a non-negative  number  set  by
the NSV (Numeric Symbol Value) operator.

Detailed Description of F0:
-------- ----------- -- --

F0='+NSN'/Z/NSV N0 LOA NST 1INC N0+
     *******

defines the prefix of the symbol by which the  NST  operator
will  replace  itself  to be the single letter Z.  Since the
letter Z is a text string  within  the  longer  text  string
which  defines  F0,  2  different  delimiter  characters are
necessary.

F0='+NSN'/Z/NSV N0 LOA NST 1INC N0+
            ******

defines the numeric portion of the symbol by which  the  NST
operator  will  replace  itself to be the number of times F0
has been previously called.
TBLTRN:  Language Specification Manual              Page  44
User Defined Functions


F0='+NSN'/Z/NSV N0 LOA NST 1INC N0+
                   *******

assigns as the label of the current table entry  origin  the
symbol  by  which  the  NST  operator replaces itself.  This
symbol will be Z0 the first time F0 is called.

F0='+NSN'/Z/NSV N0 LOA NST 1INC N0+
                           *******

increments the count N0 of the number of times F0  has  been
called.   It  should  be  noted that the F0 does not force a
statement break as would  be  necessary  if  N0  was  to  be
incremented  by  the statement N0=N0+1.  F0 can therefore be
used anywhere within the statement which generates the table
entries which it is to label.

Sample Function F1:
------ -------- --

N1=0...COUNT OF TIMES F1 CALLED
F1='+,1DIG N0 F1A,
F1A='+NSV N1 NSN'/A/NST 1INC N1 0DEF Q0 NSN'/Z/F1B
F1B='+NSV Q0 LOC NST XAD NST,1INC Q0 1RED N0 1DIG N0 F1B

The above is a somewhat more complex function which forms  a
directory of the labels assigned earlier in the table by the
function F0.  These labels  are  expunged  from  the  symbol
dictionary  and  the  count  of  times F0 has been called is
reset to zero.

Detailed Description of F1:
-------- ----------- -- --

F1='+,1DIG N0 F1A,
      ***********

executes user defined function F1A if F0  has  been  called.
F1A  will  assign  a  unique  label  to  the  start  of  the
directory, then call F1B which is a  recursive  function  to
actually create the directory.

F1A='+NSV N1 NSN'/A/NST 1INC N1 0DEF Q0 NSN'/Z/F1B
      *****************

assigns a unique label to the start of the directory.
1.  Defines the numeric portion of the symbol by  which  the
    operator  NST  replaces itself to be the number of times
    F1 has been successfully called previously.
2.  Defines the prefix of the symbol by which  the  operator
    NST replaces itself to be the letter A.
3.  Assigns as the label of the current table  entry  origin
    the  symbol  by  which the NST operator replaces itself.
TBLTRN:  Language Specification Manual              Page  45
User Defined Functions


    This symbol will be A0  the  first  time  F1  is  called
    successfully.   The table entry origin will be the start
    of the directory since the current statement will not be
    closed until after F1B has specified the contents of the
    first location within the directory.

F1A='+NSV N1 NSN'/A/NST 1INC N1 0DEF Q0 NSN'/Z/F1B
                        ***********************

prepares for function F1B.
1.  Increments the count N1 of the number of  times  F1  has
    been successfully called.
2.  Defines as zero the number of items which F1B has placed
    into the directory.
3.  Defines the prefix  of  the  symbol  by  which  the  NST
    operator  will  replace itself in the function F1B to be
    the single letter Z.  The function  F1B  will  use  this
    prefix  in  the  generation  of  the  labels  which have
    already been assigned by the function F0.

F1A='+NSV N1 NSN'/A/NST 1INC N1 0DEF Q0 NSN'/Z/F1B
                                               ***

calls function F1B.  F1B enters the location of  1  labelled
entry  into the directory each time called.  F1B will recall
itself until all of the labels  assigned  by  F0  have  been
catalogued.

F1B='+NSV Q0 LOC NST XAD NST,1INC Q0 1RED N0 1DIG N0 F1B
      ***********************

enters a single location into the directory.
1.  Defines the numeric portion of the symbol by  which  NST
    will  replace  itself  to be the number of times F1B has
    been previously called during the present  execution  of
    F1.
2.  Inserts into the present table entry the location of the
    entry  which  has  as  label the symbol by which the NST
    operator replaces itself.
3.  Removes this label from the symbol dictionary  since  it
    is no longer needed and would be reassigned next time F0
    was called a sufficient number  of  times  anyway.   The
    following  comma  both  terminates  the range of the XAD
    operator and increments the table entry origin  for  the
    next entry in the directory.

F1B='+NSV Q0 LOC NST XAD NST,1INC Q0 1RED N0 1DIG N0 F1B
                             ***************

prepares for recalling function F1B.
1.  Increments the count Q0 of the number of times  F1B  has
    been  called for use in generation of the next label the
    next time F1B is called.
TBLTRN:  Language Specification Manual              Page  46
User Defined Functions


2.  Decrements the number of times F0 was called.   As  long
    as  this  number is greater than zero, F1B will continue
    to recall itself.

F1B='+NSV Q0 LOC NST XAD NST,1INC Q0 1RED N0 1DIG N0 F1B
                                             ***********

recalls the function F1B if the count N0 has  not  yet  been
reduced to zero.

F1='+,1DIG N0 F1A,
                 *

The terminal comma insulates the F1 function  from  whatever
statements  happen  to  follow  on  the  same  line  as  the
appearance of F1.  A terminal  blank  is  not  necessary  to
insulate  this  comma  from the following symbol which could
itself be formed of commas since an extra blank is  inserted
when  a text replacement is performed if the right character
of the inserted text string is of the same  character  class
as  the first non-blank character following the symbol being
replaced.  Excess blanks immediately  following  the  symbol
being   replaced   are   removed   to   prevent   accidental
accumulation of terminal blanks within a recursively  called
function.

Sample Function F2
------ -------- --

Statements of the form

GROUP1 CAN BE ALDEHYDE OR KETONE OR ACID
GROUP2 CAN BE BROMIDE OR IODIDE

can be used to turn on a prespecified bit  in  each  of  the
several destination sets identified by the symbols ALDEHYDE,
KETONE etc. if the definitions given below are made.  It  is
assumed  that  the  identifier symbols are used elsewhere in
the tables as constants having values which,  when  shifted,
are  identical  to  the  sequence of the desired destination
sets.  If RXSET  is  the  number  of  entries  necessary  to
contain the range of prespecified bits, the destination sets
are twice this length with the GROUP1  statements  accessing
the  lower RXSET entries and the GROUP2 statements accessing
the upper RXSET entries.  The  destination  sets  referenced
are  created  later  in  the  table by the function F2.  The
created sets are prefaced by a directory set of length FGSET
with  only  those  bits  turned  on  which correspond to the
referenced sets created by F2.  The definitions necessary to
accomplish these tasks are as follow:

FGSET=2...NUMBER OF ENTRIES PER FUNCTIONAL GROUP SET
RXSET=3...NUMBER OF ENTRIES PER REACTION SET
TBLTRN:  Language Specification Manual              Page  47
User Defined Functions


 ...
 ...DEFINE GROUP1, GROUP2 AND OR
GROUP1='+NSN'/X/,Q5=1,XSY Q6,OR
GROUP2='*NSN'/X/,Q5=RXSET+1,XSY Q6,OR
OR='/,Q6=1RIT/1'/-1,NSV Q6 WRD Q5 BIT N0 NST/
CAN=,BE=
 ...
 ...DEFINE F2
N2=0...COUNT OF TIMES F2 CALLED
Q4=RXSET+RXSET
F2='+,64DEF Q0 0DEF Q1 0DEF Q2 NSN'/X/F2A,
F2A='+,NSV Q1 1INC Q1 1RED Q0 1DIA NST F2B 1DIG Q0 F2A
F2B='+1DIE Q2 F2C NST WRD Q4 NUL BIT Q1 Q3 XAD NST,
F2C='+1DEF Q2 NSN'/B/NSV N2 NST Q3 WRD FGSET NUL F2D
F2D='+1INC N2 NSN'/X/1RED Q1 NSV Q1 1INC Q1,

Detailed Description of F2:
-------- ----------- -- --

GROUP1='+NSN'/X/,Q5=1,XSY Q6,OR
GROUP2='*NSN'/X/,Q5=RXSET+1,XSY Q6,OR

The operations performed by  GROUP1  or  by  GROUP2  are  as
follows.
1.  The prefix of the names of the destinations  sets  which
    will be constructed by the NST operator is defined to be
    the single letter X.
2.  The symbol Q5 will be used after the WRD operator by the
    function OR to determine offset of the BIT operator.  Q5
    is defined so as to allow GROUP1  to  access  the  lower
    half  and  GROUP2  to  access  the  upper  half  of  the
    destination sets.  The definitions of GROUP1 and  GROUP2
    are identical except for this offset.
3.  Q6 will be defined by the function OR to be the  shifted
    and  offset  value  of  the  identifier  symbol  such as
    ALDEHYDE.  If no offset is necessary, the last use of OR
    in  the  previous  statement  will  have defined Q6 as a
    shift operator.  The present definition of Q6 is removed
    from the symbol dictionary to insure its legal definitin
    by OR as a constant.
4.  The function OR is called the first time so that it need
    not  be  written  in  the  statement preceding the first
    identifier symbol.

OR='/,Q6=1RIT/1'/-1,NSV Q6 WRD Q5 BIT N0 NST/

The text

        OR ALDEHYDE

is processed as the text
TBLTRN:  Language Specification Manual              Page  48
User Defined Functions


        ,Q6=1RIT ALDEHYDE-1,NSV Q6 WRD Q5 BIT N0 NST

It is necessary that text be processed following  the  final
identifier symbol in the GROUP1 or GROUP2 statement in order
to finish the definition of Q6 and to turn on the bit in the
referenced destination set.  To prevent necessity of writing
a terminal symbol in the statement, the  definition  of  the
function OR specifies that the text

        -1,NSV Q6 WRD Q5 BIT N0 NST

be inserted into the text stream after one additional symbol
has  been  interpreted.   (It  should  be  noted that a text
replacement symbol  which  specifies  a  deferred  insertion
cannot appear within the range of another such symbol.  Text
replacement symbols which do not direct  deferred  insertion
can appear within the range of a deferred insertion, but are
not themselves taken into the symbol count although  symbols
inserted  by  them are counted.) The operations performed by
OR are as follows.
1.  Q6 is  defined  as  one  less  than  the  value  of  the
    identifier  symbol right shifted one bit.  It is assumed
    that the identifier symbol can have the  even  values  2
    through  128 while the symbols by which the NST operator
    replaces itself are desired to be X0 through X63  so  as
    to conserve symbol dictionary space.
2.  The numeric portion of the name of the  destination  set
    is defined to be the value of Q6.
3.  The offset Q5 defined by GROUP1 or GROUP2 is applied  in
    order to access the proper half of the destination set.
4.  The bit N0 defined by the last use of the function F0 is
    turned  on  in  the selected half of the destination set
    having as name the symbol  by  which  the  NST  operator
    replaces itself.

CAN=,BE=

The symbols CAN and BE are defined as null text strings  and
are therefore transparent.

N2=0...COUNT OF TIMES F2 CALLED
Q4=RXSET+RXSET

N2  is  a  count  of  the  number  of  times  F2  is  called
successfully and is used for generation of a unique name for
the directory set.  Q4 is the number of table entries  which
must  be  reserved  for each referenced destination set even
though not all of these need be non-zero.

F2='+,64DEF Q0 0DEF Q1 0DEF Q2 NSN'/X/F2A,

F2 prepares to loop through function F2A 64  times  to  test
each  of  the  possibly  referenced destination set names X0
TBLTRN:  Language Specification Manual              Page  49
User Defined Functions


through X63.  Q0 is a count of the number of times F2A  must
yet  be  called.  Q1 is the count of the number of times F2A
has already been called and is used in the generation of the
symbol  names  to  be  tested.  Q2 is a switch which will be
made  non-zero  if  and  when  a  directory  set  has   been
constructed before creating the first referenced destination
set.

F2A='+,NSV Q1 1INC Q1 1RED Q0 1DIA NST F2B 1DIG Q0 F2A

F2A tests each of the possible  destination  set  names  for
definition  as  an address label.  If true, F2B is called to
create the destination set and the directory  if  necessary.
F2A recalls itself if it has not been executed 64 times.

F2B='+1DIE Q2 F2C NST WRD Q4 NUL BIT Q1 Q3 XAD NST,

F2B tests Q2 to determine if  the  directory  set  has  been
constructed.   If  not,  F2C is called to allocate space for
this and name it  Q3.   F2B  turns  on  bit  Q1  within  the
directory  set to mark the existence of the destination set.
Q4 entries are allocated for the  present  destination  set,
the   name   of  which  is  then  removed  from  the  symbol
dictionary.

F2C='+1DEF Q2 NSN'/B/NSV N2 NST Q3 WRD FGSET NUL F2D
F2D='+1INC N2 NSN'/X/1RED Q1 NSV Q1 1INC Q1,

F2C is called only before  the  construction  of  the  first
referenced destination set.  It creates the directory set of
FGSET entries, assigns this both the name Q3 and the name  B
with  the  number  of  previous  successful  calls  of F2 as
suffix.  The symbol by which NST  replaces  itself  is  then
redefined  to be that in effect when F2C was called.  F2C is
divided into 2 sections  merely  to  reduce  the  number  of
unprocessed characters in the input text buffer.



      Pre-execution Assembly of User Defined Functions
      ------------- -------- -- ---- ------- ---------

Although both the ' and '' operators can be used to  specify
user  defined  functions,  the  ''  operator causes the text
string to be converted to an assembled  form  which  can  be
interpreted  without  referencing the symbol dictionary when
the  function  is  executed.   During  this  assembly,   the
operators which are recognized are all of those which TBLTRN
had available prior  to  the  first  table,  and  these  are
delimited  by  the initial character classes even though the
symbol dictionary and character classes can have since  been
modified.   All symbols which were not in the initial TBLTRN
symbol dictionary, the entire  contents  of  a  text  string
TBLTRN:  Language Specification Manual              Page  50
Pre-execution Assembly of User Defined Functions


within  the  text string forming the definition, and the NEG
operator are not  altered.   The  assembler  does  not  test
syntax  so  errors  can be detected only at execution of the
function.  Similarly, The use of an  initially  recognizable
operator name after the XSY operator, or as an address label
following the operators LOA, HIA, LOC or  BIT  will  not  be
handled correctly.

Pre-assembled functions have the  advantage  that  they  are
executed faster and can access operators which may no longer
exist in the symbol dictionary.   When  a  table  uses  only
functions  which  are  pre-assembled, most of the programmed
operators can be removed  from  the  symbol  dictionary  and
therefore  speed  the identification of all the user defined
symbols.

The assembled codes are formed of  the  operator  identifier
code  followed by an asterisk or whatever character has been
placed  by  the  ACC  operator  into  the  class  originally
occupied by only the asterisk.  The decimal integer prefixes
which some operators can take are shifted to  the  right  of
the  assembled  code  separated  from it by the DEC operator
designation 12* if the prefix has a value of 3 or greater.

As examples, the user Defined functions OR and F2 introduced
in  the  previous section are shown below as they are stored
in the symbol  dictionary  first  if  defined  using  the  '
operator  and and second when defined using the '' operator.
The assembled version of  a  function  often  requires  more
space  than  the  source  due to the expansion of single and
double character operators and the necessity of insertion of
the  DEC  operator representation before integers which were
originally prefixes.

TEXT      4437 OPR  8                                OR
 ''  ''     ********
 ''  ''     ,Q6=1RIT
 ''  ''     ********
 ''  ''     * ARGUMENT COUNT   1
 ''  ''     ***************************
 ''  ''     -1,NSV Q6 WRD Q5 BIT N0 NST

TEXT      4437 OPR  8                                OR
 ''  ''     ************
 ''  ''     5*Q6 15*32*1
 ''  ''     ************
 ''  ''     * ARGUMENT COUNT   1
 ''  ''     *****************************
 ''  ''     9*1 5*119*Q6 58*Q5 40*N0 121*

 TEXT      4092 OPR  8                                F2
  ''  ''     *************************************
  ''  ''     ,64DEF Q0 0DEF Q1 0DEF Q2 NSN'/X/F2A,
TBLTRN:  Language Specification Manual              Page  51
Pre-execution Assembly of User Defined Functions


 TEXT      4092 OPR  8                                F2
  ''  ''     ****************************************
  ''  ''     5*112*12*64 Q0 113*Q1 113*Q2 118*4*/X/F2
  ''  ''     A 5*
  ''  ''     ****

WARNING.  In text which is to be assembled, operators should
not  be  written with decimal integer prefixes if within the
range of code  executed  conditionally  depending  upon  the
validity  of  a  Do-If  class operator test.  The reason for
this is  that  the  assembly  process  converts  the  single
operator with integer prefix to one symbol if the prefix has
the value zero, to the operator followed by  the  prefix  if
the  prefix  has the value 1, or to the operator followed by
the DEC operator designation 12* followed by the  prefix  if
the prefix has a value greater than 1.



                      Query Operators
                      ----- ---------

Query operators report to  the  user  on  the  teletype  the
current  status  of  various TBLTRN conditions without going
through  the  usual  symbol   recognition   process.    Such
operators   are   completely   transparent   to  the  TBLTRN
processor, and are always active except within text strings.
A  query  operator  is  identified by being composed only of
characters of the class originally occupied  by  the  dollar
sign.   The  option  desired  is  selected  by the number of
characters making up the operator.   These  options  are  as
follow.

Single character query operators  list  the  symbol  or  the
       group  of table entries currently being defined.  The
       format of the output is identical to that which would
       be generated by the TEL operator.  Through the use of
       several single character  query  operators  within  a
       statement,  individual  steps  in  the  definition or
       assembly can be observed.

Double character query operators list the current sign, byte
       and  word  together  with  the  name of the presently
       selected packing pattern, if any.  Sign is  indicated
       by numbers -1 through 4 as follow.

      -1.  Default sign.
       0.  Exclusive or.
       1.  And.
       2.  Addition.
       3.  Subtraction.
       4.  Inclusive or.
TBLTRN:  Language Specification Manual              Page  52
Query Operators


       The listed byte size is the base  of  the  byte  size
       specified  by the source table if this specified byte
       size is a base from  2  through  17  raised  to  some
       power.   Otherwise, the listed byte size is identical
       to that specified by the source  table.   The  listed
       byte  number  is  based  upon  the  listed byte size,
       assuming the right byte to  be  byte  1.   The  entry
       number is listed as the number of table entries below
       the current table entry origin and is followed by the
       current offset.  The offset which would correspond to
       the highest numbered table entry currently  assembled
       is also given.

       Following this packing information in the output is a
       listing of the text currently in the input buffer and
       of the text being held  for  deferred  insertion,  if
       any,  together  with the conditions necessary for its
       insertion.  This portion of the listing consists of a
       character  count,  the classification name "NEW TEXT"
       or "DEFERRED" and the text itself.

Triple character query operators list the current  character
       classes  in  the order of the character class number.
       The listed class numbers begin at 5 since  the  lower
       class  numbers  are reserved for special combinations
       of the unassigned characters.  Class 5 characters are
       treated  as  blanks.  Class 6 contains the characters
       which can form query operators.  Class 7 contains the
       characters  which  can  be  used with decimal integer
       prefixes as pre-assembled code.  No special functions
       are associated with the higher class numbers.

The query operater answer message begins  with  the  current
input  line number and that portion of the current statement
appearing on the current input line.   After  generation  of
this  message,  all  class  5  and  class  6  characters are
translated to blanks so that the current query operator will
not be printed in later answer or error messages.

Example:

        $MASK$=$MSK$ARG$65$2WRD ARG$129$

would generate the following messages.

        1 $

        1 MASK$
    ENTRY       1        OCT             0            0

        1 MASK =$
    TEXT     4472 OPR  8                                MASK
TBLTRN:  Language Specification Manual              Page  53
Query Operators


        1 MASK = MSK$
    OPERATOR 4472 OPR 29                                MASK

        1 MASK = MSK ARG$
    BYTEMASK 4472 OPR 29 SIN  4 SIZ  2 BYT  1 WRD     1 MASK

        1 MASK = MSK ARG 65$
    BYTEMASK 4472 OPR 29 SIN  4 SIZ  2 BYT  1 WRD     1 MASK
     ''  ''  AUTO ARG    OCT           101           65 MASK

        1 MASK = MSK ARG 65 2WRD ARG$
    BYTEMASK 4472 OPR 29 SIN  4 SIZ  2 BYT  1 WRD     1 MASK
     ''  ''  AUTO ARG    OCT           101           65 MASK
     ''  ''              SIN  4 SIZ  2 BYT  1 WRD     2 MASK

        1 MASK = MSK ARG 65 2WRD ARG 129$
    BYTEMASK 4472 OPR 29 SIN  4 SIZ  2 BYT  1 WRD     1 MASK
     ''  ''  AUTO ARG    OCT           101           65 MASK
     ''  ''              SIN  4 SIZ  2 BYT  1 WRD     2 MASK
     ''  ''  AUTO ARG    OCT           201          129 MASK

Example:

        MASK=MSK.,LOC ADR2
        ADR1$LOC ADR2$MASK$LOC ADR2$MASK$2BIT ADR1$77$

would generate the following messages.

       16 ADR1$
    ENTRY       2        OCT             0            0

       16 ADR1 LOC ADR2$
    ENTRY       2        OCT             0            0
    RESERVED             SIN  4 SIZ  2 BYT  1 LOC     2 ADR2

       16 ADR1 LOC ADR2 MASK$
    LIST END    2                                       ADR2
    BYTEINFO    1        SIN  4 SIZ  2 BYT  1 LOC     2 ADR2

       16 ADR1 LOC ADR2 MASK LOC ADR2$
    LIST END    2                                       ADR2
    BYTEINFO    1        SIN  4 SIZ  2 BYT  1 LOC     2 ADR2
    ENTRY       3        OCT             0            0
    RESERVED             SIN  4 SIZ  2 BYT  1 LOC     3 ADR2

       16 ADR1 LOC ADR2 MASK LOC ADR2 MASK$
    BYTEINFO    2        SIN  4 SIZ  2 BYT  1 LOC     3 ADR2
    BYTEINFO    1        SIN  4 SIZ  2 BYT  1 LOC     2 ADR2
    LIST END    3                                       ADR2
    BYTEINFO    2        SIN  4 SIZ  2 BYT  1 LOC     3 ADR2

       16 ADR1 LOC ADR2 MASK LOC ADR2 MASK 2BIT ADR1$
    BYTEINFO 4454        SIN  4 SIZ  2 BYT  1 LOC     2 ADR2
TBLTRN:  Language Specification Manual              Page  54
Query Operators


    ENTRY       2        OCT             2            2
    POINTER     3                                  4454 ADR2
    BYTEINFO    1        SIN  4 SIZ  2 BYT  1 LOC     3 ADR2

       16 ADR1 LOC ADR2 MASK LOC ADR2 MASK 2BIT ADR1 77$
    BYTEINFO 4454        SIN  4 SIZ  2 BYT  1 LOC     2 ADR2
    ENTRY       2        OCT             2            2
    POINTER     3                                  4454 ADR2
    BYTEINFO    1        SIN  4 SIZ  2 BYT  1 LOC     3 ADR2
    ENTRY       4        OCT           115           77

Example:

        MASK=MSK$$3WRD$$2LFT$$10SIZ$$-$$ARG$ $$
        10DUP 0
        2WRD$$-$$2LFT$$22$ $$MASK$$33$ $$

would generate the following messages.

        1 MASK=MSK$$
    SIGN=-1, BYTE=  1 OF SIZE=  2, ENTRY=   0+  1 OF  0
     39 NEW TEXT MASK=MSK$$3WRD$$2LFT$$10SIZ$$-$$ARG$ $$
     
        1 MASK=MSK  3WRD$$
    SIGN=-1, BYTE=  1 OF SIZE=  2, ENTRY=   0+  3 OF  0
     39 NEW TEXT MASK=MSK  3WRD$$2LFT$$10SIZ$$-$$ARG$ $$
     
        1 MASK=MSK  3WRD  2LFT$$
    SIGN=-1, BYTE=  3 OF SIZE=  2, ENTRY=   0+  3 OF  0
     39 NEW TEXT MASK=MSK  3WRD  2LFT$$10SIZ$$-$$ARG$ $$
     
        1 MASK=MSK  3WRD  2LFT  10SIZ$$
    SIGN=-1, BYTE=  3 OF SIZE= 10, ENTRY=   0+  3 OF  0
     39 NEW TEXT MASK=MSK  3WRD  2LFT  10SIZ$$-$$ARG$ $$
     
        1 MASK=MSK  3WRD  2LFT  10SIZ  -$$
    SIGN= 3, BYTE=  3 OF SIZE= 10, ENTRY=   0+  3 OF  0
     39 NEW TEXT MASK=MSK  3WRD  2LFT  10SIZ  -$$ARG$ $$
     
        1 MASK=MSK  3WRD  2LFT  10SIZ  -  ARG$
    BYTEMASK 4430 OPR 29 SIN  3 SIZ 10 BYT  3 WRD     3 MASK
     
        1 MASK=MSK  3WRD  2LFT  10SIZ  -  ARG  $$
    SIGN=-1, BYTE=  1 OF SIZE= 10, ENTRY=   0+  1 OF  0
     39 NEW TEXT MASK=MSK  3WRD  2LFT  10SIZ  -  ARG  $$
     
        3 2WRD$$
    SIGN=-1, BYTE=  1 OF SIZE=  2, ENTRY=  10+  2 OF  0
     33 NEW TEXT 2WRD$$-$$2LFT$$22$ $$MASK$$33$ $$
     
        3 2WRD  -$$
    SIGN= 3, BYTE=  1 OF SIZE=  2, ENTRY=  10+  2 OF  0
     33 NEW TEXT 2WRD  -$$2LFT$$22$ $$MASK$$33$ $$
TBLTRN:  Language Specification Manual              Page  55
Query Operators


     
        3 2WRD  -  2LFT$$
    SIGN= 3, BYTE=  3 OF SIZE=  2, ENTRY=  10+  2 OF  0
     33 NEW TEXT 2WRD  -  2LFT$$22$ $$MASK$$33$ $$
     
        3 2WRD  -  2LFT  22$
    ENTRY      12        OCT  777777777650          -88
    ENTRY      11        OCT             0            0
     
        3 2WRD  -  2LFT  22  $$
    SIGN=-1, BYTE=  1 OF SIZE=  2, ENTRY=  10+  1 OF  2
     33 NEW TEXT 2WRD  -  2LFT  22  $$MASK$$33$ $$
     
        3 2WRD  -  2LFT  22    MASK$$
    SIGN= 3, BYTE=  3 OF SIZE= 10, ENTRY=  10+  3 OF  2 MASK
     33 NEW TEXT 2WRD  -  2LFT  22    MASK$$33$ $$
     
        3 2WRD  -  2LFT  22    MASK  33$
    ENTRY      13        OCT  777777771434        -3300
    ENTRY      12        OCT  777777777650          -88
    ENTRY      11        OCT             0            0
     
        3 2WRD  -  2LFT  22    MASK  33  $$
    SIGN=-1, BYTE=  1 OF SIZE=  2, ENTRY=  10+  1 OF  3
     33 NEW TEXT 2WRD  -  2LFT  22    MASK  33  $$

Example:

        $$$ACC'/??/ACC'/(A/ACC'/)A/ACC'*//*ACC'/-+/$$$

would generate the following messages.

       18 $$$
    CHARACTER CLASSES
      5  
      6 $
      7 *
      8 .
      9 ,
     10 '
     11 -
     12 +
     13 =
     14 (
     15 )

       18 ACC'/??/ACC'/(A/ACC'/)A/ACC'*//*ACC'/-+/$$$
    CHARACTER CLASSES
      5  
      6 $
      7 *
      8 .
      9 ,
TBLTRN:  Language Specification Manual              Page  56
Query Operators


     10 '
     12 +
        -
     13 =
     14 /
     16 ?



                    Programmed Operators
                    ---------- ---------

The symbols described  below  are  recognized  initially  by
TBLTRN.  The operators having the names, ,, ,,, ' '' ... END
and NST cannot be removed from the  symbol  dictionary,  but
can  be  renamed.  All other symbols (including the = and ==
and XSY and XAD operators) can be removed  from  the  symbol
dictionary  by the XSY operator and then be redefined during
the translation of  a  particular  table  by  the  =  or  ==
operators,  but  the original symbol assignments are usually
restored during the preparation for the translation  of  the
following  table (i.e., by the BLK operator or by any symbol
which has been equated to the BLK operator).

Symbol    Meaning

,    (comma, end of statement)  This operator defines end of
     statement  if  necessary.   The  symbol  following this
     operator  begins  a  new  statement.   This   statement
     separator  is  necessary in input from the normal input
     device only if multiple statements appear on  a  single
     line or if the BAC operator has been issued.  If the ==
     (double equal sign) operator is used  to  request  that
     the user enter a symbol definition on the teletype when
     the teletype is not  the  selected  input  device,  the
     definition  can be terminated by a comma or, if the BAC
     operator has not been issued, by typing a new statement
     on  a  following  line.   In the latter case, or in the
     former if additional text follows the comma on the same
     line,  the  additional  text is stored until additional
     teletype input is required.

,,   (double comma, continue)  This operator is used at  the
     start  of  a  line  to  indicate  that the current line
     continues  the  current  statement.   Elsewhere,   this
     operator  is treated as transparent.  Use of the double
     comma operator within the range of the BAC operator  is
     redundant, but causes not harm.

,,,  (triple comma,  continue)  This  operator  is  used  to
     indicate that the present statement is continued on the
     next  non-comment  line.   Characters  right  of   this
     operator  on  the  present  line are to be treated as a
TBLTRN:  Language Specification Manual              Page  57
Programmed Operators


     comment and are ignored by the translator.  Use of  the
     triple  comma  operator  within  the  range  of the BAC
     operator or at the end of the  line  prior  to  a  line
     beginning  with  the double comma operator is redundant
     but causes no harm.

     Example:  (See definition of ... for another example.)

             MASK=MSK 100SIZ 1LFT ARG ARG

         is exactly equivalent to the statement

              MASK  ,,,FIRST  COMMENT
             =     ...SECOND  COMMENT (TRIPLE PERIOD)
             ,,MSK ,,,THIRD   COMMENT
             100SIZ,,,FOURTH  COMMENT
                   ...FIFTH   COMMENT (TRIPLE PERIOD)
             1LFT  ,,,SIXTH   COMMENT
             ,,ARG ...SEVENTH COMMENT (TRIPLE PERIOD)
                   ,,,EIGHTH  COMMENT
             ARG

'    (apostrophe or single quote) followed on the same line,
     with  or  without  separating  blanks,  by  a non-blank
     delimiter character.  The text right of  the  delimiter
     character  up  to  the next appearance of the delimiter
     character or the end of the current input line is taken
     as   a   text  string.   If  within  the  range  of  an
     unfulfilled (false answer) IF or Do-If class  operator,
     the entire text string including initial apostrophe and
     delimiting characters is counted as a single symbol and
     is  not  performed.   The text string is used after the
     ACC operator to establish character classes, and  after
     the NSN and TTL operators to establish names of no more
     than 6 non-blank characters.

     Examples:

             TTL'/IVALUE/

         would define IVALUE to be the  name  of  the  array
         output by TBLTRN at the end of the current table.

             ONE=1
             DIE 2 ONE ACC'/XX/DIN 2 ONE ACC'/YY/

         would place Y into its own unique character  class.
         However,  since  the  DIE  (Do-If  Equal zero) test
         failed, the next 2 symbols following the integer  2
         after the DIE operator, namely the ACC operator and
         the text string '/XX/, would not  be  executed  and
         the character class of X is unchanged.
TBLTRN:  Language Specification Manual              Page  58
Programmed Operators


     When such a text string appears in a symbol  definition
     containing  at  most  other text strings, each possibly
     preceded by a constant or parenthetical expression, the
     symbol  being  defined  when  encountered again, except
     within the range of the TEL and XSY or  unfulfilled  IF
     class  or  Do-If  class operators, will insert the text
     string   into   the   input   statement    after    the
     interpretation  within  the  present  statement  of the
     number of symbols specified  by  a  preceding  zero  or
     positive  constant  or  zero or positive expression, or
     before the number of statement breaks  specified  by  a
     preceding  negative  constant  or  negative expression.
     The count of symbols or of statements is done after all
     non-deferred    text    replacements   are   completed.
     Therefore, the count does not include symbols defind as
     text  strings,  but  rather  includes  those symbols or
     statements by  which  these  text  replacement  symbols
     replace themselves.

     Example:

             ADD*THREE*CONSTANTS=1'/+/1'/+/

         or
             TWO=2
             ADD*THREE*CONSTANTS=(TWO-1)'/+/ONE'/+/

         would define the symbol  ADD*THREE*CONSTANTS  as  a
         text  replacement  operator which would insert text
         consisting of a plus sign after each of the next  2
         symbols following it in the current statement.  The
         statements

             A+B+C

         and

             ADD*THREE*CONSTANTS A B C

         would then be equivalent.

     Example:

             REMOVE*SYMBOLS=-1'/XSY A B C/

         would define the symbol REMOVE*SYMBOLS  as  a  text
         replacement  operator  which  would insert the text
         XSY A B C at the end of the statement in  which  it
         is used.

         The statements
TBLTRN:  Language Specification Manual              Page  59
Programmed Operators


             REMOVE*SYMBOLS=-1'/XSY A/0'/B C/

         and

             REMOVE*SYMBOLS=-1'/XSY A/'/B C/

         are identical and produce a  result  equivalent  to
         the previous example, since a absent argument count
         has the default value zero and here specifies  that
         the  text  B  C is to be inserted immediately (that
         is,  after  zero  additional  symbols  within   the
         present  statement) after the interpretation of the
         text XSY A.  Splitting of a long insertion is often
         useful  to  reduce  the  number of characters which
         must be stored in the input text buffer.  It should
         be  noted,  however, that an argument count greater
         than zero could never be satisfied if any  previous
         argument   of  the  text  replacement  operator  is
         negative.

         The definition

             REMOVE*SYMBOLS=-1'/XSY A/-1'/B C/

         produces the same result as  the  previous  example
         since  the  end  of  statement  which  signals  the
         insertion of the text XSY A still exists  following
         the  symbol  A  at  which  point  the  text  B C is
         inserted.

     Example:

             REMOVE*SYMBOLS=-1'/XSY A B C/-2'/XSY D E F/

         would define the symbol REMOVE*SYMBOLS  as  a  text
         replacement  operator  which  would insert the text
         XSY A B C at the end of the statement in  which  is
         is  used, and which would insert the text XSY D E F
         at the end of the following statement.

     Example:

         The statements

             TELL*SYMBOLS=-1'/=1/-2'/=2,TEL A,TEL B/
             ,,-1'/TEL C/-2'/=3/
             TELL*SYMBOLS A,B,C

         or

             TELL*SYMBOLS=-1'/=1/-3'/A,TEL B/...NOTE -3 HERE
             ,,-1'/TEL C/-2'/=3/
             DUMMY='/=2,TEL/...THIS COMMA COUNTS IN -3 ABOVE
TBLTRN:  Language Specification Manual              Page  60
Programmed Operators


             TELL*SYMBOLS A,B DUMMY,C

         or

             TELL*SYMBOLS=-1'/=1/-2'/=2,DUMMY/
             DUMMY='/TEL A,TEL B/,,-1'/TEL C/-2'/=3/
             TELL*SYMBOLS A,B,C

         or

             TELL*SYMBOLS=-1'/=1/-2'/=2 DUMMY/,,,
             -1'/TEL C/-2'/=3/
             DUMMY='/,TEL A,TEL B/
             TELL*SYMBOLS A,B,C

         are equivalent to the text

             A=1,B=2,TEL A,TEL B TEL C,C=3

         and  would  report  to  the  user  the  values   of
         constants A and B, report the definition of the TEL
         operator, and report that C is  unknown.   The  TEL
         operator  is  included  within  the  list  of items
         reported since the insertion  of  the  text  TEL  C
         continues  the  argument  list  of the TEL operator
         already in the statement into which  this  text  is
         inserted.   As can be seen from the above examples,
         a text replacement operator for which the insertion
         is   deferred   can  have  within  its  range  text
         replacement  operators   which   direct   immediate
         insertion.   However,  a  deferred  insertion  text
         replacement operator cannot appear within the range
         of another deferred insertion operator.

     If the text string in a symbol  definition  instead  is
     separated  from the = or == operator by a single period
     operator, then the symbol to the left of the  =  or  ==
     operator  is defined to have a meaning identical to the
     current non-address meaning of the symbol appearing  in
     the  text  string.  Both the old and new symbols retain
     their initial meanings until the end of the  statement.
     After  the definition statement has been completed, the
     non-address meaning of the symbol appearing in the text
     string  is  removed  from  the symbol dictionary.  This
     operation therefore performs a rename.

     If not used within any of the above described contexts,
     the text string will be written without trailing blanks
     into the output before the  generated  DATA  statement.
     All  blanks  are  suppressed in a text string following
     the ACC, NSN or TTL operators.
TBLTRN:  Language Specification Manual              Page  61
Programmed Operators


     Examples:

             '+      BLOCK DATA+
             '+C     DRIVING TABLE+

         writes into the generated output the FORTRAN  BLOCK
         DATA  statement  and  follows  this  with a FORTRAN
         Comment card.

             A='-'*      BLOCK DATA*-

         defines A to be a text string which will output the
         FORTRAN BLOCK DATA statement when A is used.

             ACC'*//*

         assigns the character / (slash) to its  own  unique
         character class.

             NSN'+A+

         assigns the text A to be the prefix of the  symbols
         constructed   by  the  NST  (Numeric  Symbol  Text)
         operator.  If the command 235NSV  (Numberic  Symbol
         Value)  is also given, the following appearances of
         NST are replaced by the text A235 except within the
         range of an unfulfilled IF or Do-If class operator.

''   (double apostrophe) followed on the same line, with  or
     without  separating  blanks,  by  a non-blank delimiter
     character.  Identical to ' (single apostrophe) operator
     defined  above  if  not  within  the range of a = or ==
     operator, except that the text string is  written  onto
     the teletype if not within the range of the ACC, NSN or
     TTL operators.

     When used after the =  or  ==  operators  in  a  symbol
     definition  consisting  only  of text strings, possibly
     preceded by constants or parenthetical expressions, the
     text  string  is  assembled  using  the original TBLTRN
     programmed operators (those described in  this  manual)
     and  the  original character classes, leaving unaltered
     any unrecognizable symbols or text strings  within  the
     larger text string.

     If the text string  is  separated  from  the  =  or  ==
     operator by the single period operator, then the symbol
     to the left of the =  or  ==  operator  is  defined  as
     identical  to the meaning within the original (default)
     symbol dictionary of the  symbol  (possibly  used  with
     decimal  integer  prefix)  in  the  text  string.   The
     current meaning, if any, of the symbol appearing in the
     text string is not changed.
TBLTRN:  Language Specification Manual              Page  62
Programmed Operators


.    (single period)  In a statement which defines  a  table
     entry,  this  operator acts as the address label of the
     current table entry.  Used alone or following  the  LOC
     operator, the single period operator acts as a constant
     having as value the address of  the  table  entry  into
     which it is deposited.

     After the BIT operator, the single period operator  can
     be  used to specify that the destination is the current
     table entry origin, offset by one less than  the  value
     of the WRD operator if present.

     The single period operator used before a text string in
     a symbol definition defines the symbol left of the = or
     == operator as equal to the non-address meaning of  the
     symbol  appearing  within the text string.  If the text
     string is begun by the single apostrophe operator,  the
     current  non-address  meaning of the symbol in the text
     string is removed from the symbol dictionary  when  the
     statement  is  terminated.  If instead, the text string
     is  begun  by  the  double  apostrophe  operator,   the
     definition  assigned  to the new symbol will be that in
     the original symbol dictionary of the symbol within the
     text  string.   These  operations are provided to allow
     the renaming or copying of the  statement  continuation
     and statement termination operators.

     Examples:

             A='/LFT 3+LOC/
             LOCATION*OF=.'/A/

         defines  the   symbol   LOCATION*OF   as   a   text
         replacement  operator  (macro) which when used will
         insert the text  LFT  3+LOC  into  the  input  text
         buffer.  The text replacement meaning of the symbol
         A is removed from  the  symbol  dictionary  by  the
         definition of LOCATION*OF.

             SHIFT*LEFT=.''/3LFT/

         defines the symbol SHIFT*LEFT as an operator  equal
         to  the  original  (default)  meaning of the symbol
         3LFT regardless of the current  meaning  of  either
         LFT or 3LFT.  A decimal interger prefix can only be
         used if the text string  is  begun  by  the  double
         apostrophe  operator,  and  if the operator bearing
         the prefix can  legally  be  written  with  such  a
         prefix.

             COMMENT=.''/.../
TBLTRN:  Language Specification Manual              Page  63
Programmed Operators


         defines the symbol  COMMENT  as  identical  to  the
         original  meaning  of  the  triple period operator.
         The current meaning, if any, of the  triple  period
         operator would not be changed by this definition.

     In the definition of  a  packing  pattern,  the  single
     period operator specifies that when the packing pattern
     is used, the table entry origin is  to  be  incremented
     after  the  previous  argument specifications have been
     fulfilled if either of the following is true.

     1.  The  present  packing  pattern  has   a   following
         argument  specification  which  is fulfilled either
         automatically (see definition of ARG  operator)  or
         explicitly.  Performance of an origin increment can
         be forced by following  its  specification  in  the
         packing  pattern definition by one of the sequences
         ARG 0, ARG  NUL,  ARG()  or  ARG(NUL)  which  would
         specify   an   automatic   single   precision  zero
         argument.

     2.  All the argument specifications,  if  any,  of  the
         present  packing pattern have been fulfilled either
         automatically  or  explicitly,   and   within   the
         statement  in  which  the  packing  pattern is used
         another packing  pattern  is  not  selected  before
         processing of the next constant or address label or
         a BIT operator with the destination being indicated
         by  the  single  period operator as the incremented
         table entry origin  or  a  BIT  operator  with  the
         destination  being a known address label of a table
         entry already assembled by  the  current  statement
         (BIT  possibly  preceded, regardless of whether the
         destination is indicated as period or label, by the
         WRD  operator).   The  table entry origin offset is
         not performed if there does not remain  unprocessed
         within  the  statement  such  a constant or address
         label or BIT deposit.

     This offset of the table entry origin can be  specified
     by  the  WRD  operator  prior  to the appearance of the
     single  period  operator   in   the   packing   pattern
     definition.  The default value of the offset is 1.

     Example:

             JUMP*TWO*WORDS=MSK WRD 2.

         defines the  symbol  JUMP*TWO*WORDS  as  a  packing
         pattern  which  when used would increment the table
         entry origin by 2 words if  the  current  statement
         specifies  additional contents of the table entries
         defined by the current statement before the use  of
TBLTRN:  Language Specification Manual              Page  64
Programmed Operators


         another pattern if any.

...  (triple periods,  comment)  Characters  right  of  this
     operator  on  the  present  line are to be treated as a
     comment  and  are  ignored  by  the  translator.   This
     operator  does  not itself force closure of the current
     statement.

     Example:

             102 ...FIRST   COMMENT
             300 ...SECOND  COMMENT
                 ...THIRD   COMMENT
             ,,+4...FOURTH  COMMENT
             500 ,,,FIFTH   COMMENT (TRIPLE COMMA)
                 ...SIXTH   COMMENT
               +6...SEVENTH COMMENT
             700 ...EIGHTH  COMMENT
                 ,,,NINTH   COMMENT (TRIPLE COMMA)
               +8...TENTH   COMMENT

         assembles table entries

             102
             304
             506
             708

+    (plus sign, add)  The next constant  encountered  after
     this  operator  within  the  current statement is to be
     added into the constant  or  table  entry  or  operator
     value being currently defined.

-    (minus sign, subtract)  The next  constant  encountered
     after  this operator within the current statement is to
     be subtracted into  the  constant  or  table  entry  or
     operator value being currently defined.

=    (equal sign)  When used outside  a  symbol  definition,
     the  symbol  appearing  left  of this operator is to be
     defined as the operator or expression right  of  the  =
     operator through the end of the statement (as indicated
     by the , or END operator or, if the  BAC  operator  has
     not  been  issued,  by  a  new statement on a following
     line).  The  =  operator  must  be  the  second  symbol
     (excluding  transparent  symbols  or symbols defined as
     text strings  having  deferred  insertion)  within  the
     statement  or be the second symbol following the symbol
     or parenthetical  expression  tested  by  an  IF  class
     operator  if  present.   The  symbol being defined must
     previously have been undefined, or have been defined as
     a  constant  or  packing  pattern, or have been only an
     address label.  If the symbol was previously a  packing
TBLTRN:  Language Specification Manual              Page  65
Programmed Operators


     pattern  or a constant, it can be redefined in terms of
     its previous identity.  If the  symbol  was  previously
     defined  only  as  an  address,  its  future  use as an
     address is unchanged by the new definition (unless  the
     new  definition  is  as  a text string since this would
     have precedence over definition as  an  address  label,
     see  below)  since  the  same  symbol  name can be both
     address label and other  operator  depending  upon  the
     context in which it is used.

     Example:

             PACKING=SIZ

         defines the symbol PACKING to be an operator  which
         can  be  used  to establish the packing size in the
         same manner as the operator SIZ.

     Example:

             PACKINGSIZE=64SIZ

         or

             PACKINGSIZE=SIZ 64

         or

             PACKINGSIZE=32
             PACKINGSIZE=SIZ(OCT 40+PACKINGSIZE)

         defines the symbol PACKINGSIZE as an operator which
         can be used to set the packing size at 64 to create
         6 bit bytes.  The use of the  SIZ  operator  within
         the symbol definition has not, however, changed the
         packing size for the following statements.

     Example:

             SIXTYFOUR=8SIZ 2LFT 1

         or

             SIXTYFOUR=2LFT 8SIZ 1

         or

             ONE=1,TWO=2,EIGHT=8
             SIXTYFOUR=LFT TWO SIZ EIGHT ONE

         defines the symbol SIXTYFOUR as a constant with the
         value  decimal 64 (1 left shifted 2 units of 3 bits
         each).
TBLTRN:  Language Specification Manual              Page  66
Programmed Operators


     A symbol can also be defined as a text string following
     and  on  the  same  line  as  the  ' or '' operator and
     enclosed within delimiter characters.  Such a symbol is
     replaced by the text string whenever encountered except
     within the range of the XSY or TEL or unfulfilled IF or
     Do-If  class  operators.  This is the only mechanism by
     which a symbol can be defined as equal to  a  group  of
     unrelated  operators,  or  in  terms of address labels.
     Definition as  a  text  string  can  also  be  used  to
     simulate  definition  as the text construction operator
     NST (as opposed to the text constructed by NST) or  the
     terminator, continuation and comment operators , ,, ,,,
     ' '' ... and END.  However, definition as a text string
     consisting  of  only  a  single  operator should not be
     performed unless it is necessary that the definition be
     removable   by   the   XSY  operator  or  conditionally
     performed following Do-If or IF class operators.  If no
     definition  is  given  (for example ABC=) the symbol is
     defined as a null text string  (identical  to  ABC='//)
     and is transparent to all operators except XSY and TEL.

     Example:

             SETA='/,XSY A,A='+,XSY B,B='-LOC C-, +,/

         defines SETA as  a  symbol  which  when  used  will
         define  A as a symbol which when used will define B
         as the value of the subscript of  the  table  entry
         having  the  address  label  C.  It should be noted
         that the definitions of SETA and of A are insulated
         from other symbols by the end of statement operator
         single comma.  This properly  closes  the  previous
         statement,  if  any, on the same line as the use of
         SETA or of A.  Such closure would be necessary, for
         example,  if  this  previous statement was itself a
         symbol definition.  No extra blanks  are  necessary
         at the right end of the text string to separate the
         terminal comma from the symbol following the use of
         SETA  or  of  A  even  though  this could itself be
         formed of commas.

     The = operator can  be  followed  by  a  single  period
     operator  and then by a text string indicated by the ''
     operator (but not by the  '  operator)  to  define  the
     symbol  preceding  the  =  operator as identical to the
     meaning in the original (default) symbol dictionary  of
     the  symbol appearing within the text string.  Only the
     default meaning of the NEG operator cannot be copied in
     this  manner.   The  current definition, if any, of the
     symbol within the text string is ignored.  This is  the
     only  mechanism  by which more than one symbol name can
     become associated directly with any of the operators  ,
     ,, ,,, ' '' ... END or NST.
TBLTRN:  Language Specification Manual              Page  67
Programmed Operators


     Example:

             STOP=.''/,/,HALT=''/,/

         defines the symbol STOP  as  an  end  of  statement
         operator  identical  to  the initial meaning of the
         single comma operator.  The effect of  the  use  of
         the   symbols   STOP  and  HALT  would  under  most
         conditions be the  same,  however  HALT  could  not
         cause  an end of statement if used within the range
         of the TEL or XSY or unfulfilled (false answer)  IF
         class or unfulfilled Do-If class operators.

     The = operator can also be followed by a single  period
     operator  and  then by a text string indicated by the '
     operator (but not by the ''  operator)  to  rename  the
     non-address  meaning  of  the  symbol  within  the text
     string to the name of the symbol being  defined.   Both
     the  old  and  new  symbol  names retain their previous
     meanings until the end  of  the  definition  statement.
     The  non-address  meaning  of  the  old  symbol name is
     removed from the symbol dictionary after the  statement
     is terminated.

     Example:

             RENAME=''/=.'/,XSY.,.RENAME/,/, ,=

         1.  Defines RENAME as a symbol which  will  replace
             itself  in the input text stream by constructed
             operators  having  meanings  identical  to  the
             operators  = . and ' (single equal sign, single
             period and single apostrophe)  in  the  initial
             symbol dictionary.
         2.  Removes the current  meaning  of  the  operator
             . (single period) from the symbol dictionary.
         3.  Renames the end of statement operator , (single
             comma)  to have the new name . (single period).
             This statement is terminated by the comma which
             has  retained  its  initial  meaning  until the
             statement is closed.
         4.  Defines the , (single comma) operator as a null
             text string.

==   (double equal sign, ask user for definition)  Identical
     to  the  = (single equal) operator defined above except
     that the definition must be input by the  user  on  the
     teletype.  Lack of a definition will not be accepted as
     a default definition as a null text string  unless  the
     teletype  is also the currently selected input unit.  A
     message is typed on the teletype informing the user  of
     the   line   number   and   symbol  name.   Control  is
     transferred to the teletype until  the  definition  has
TBLTRN:  Language Specification Manual              Page  68
Programmed Operators


     been  completed.   The  user  must close the definition
     either with a single comma or END operator, or, if  the
     BAC  operator  has  not  been  issued,  by typing a new
     statement on a following line.  In the latter case,  or
     in  the  former if additional text follows the comma on
     the same line, the  additional  text  is  stored  until
     additional teletype input is required.  Neither a blank
     line nor a line containing only transparent symbols nor
     a  comment  line beginning with the ... (triple period)
     operator terminates the definition  since  a  statement
     can  continue  across  these.  The program will confirm
     the definition of the symbol when  the  definition  has
     been completed.

     Example:

             SYMBOL1==,SYMBOL2==,SYMBOL3==

         would request that  the  user  define  the  symbols
         SYMBOL1,  SYMBOL2  and SYMBOL3.  Execution will not
         continue until these definitions are supplied.

(    (single  left  parenthesis)  The  following   constants
     through  the  next  byte pattern name, the symbols ) or
     )), or the end of the statement are to be entered  into
     the  byte  of the table entry currently established and
     with the sign currently established.  The sign  can  be
     temporarily  altered  but  is  restored  to its initial
     value after each constant.

     Example: Table starting with

             MASK=MSK 100SIZ 1LFT ARG+ARG
             TWO=2
             TON MASK  LOC.         .  +.
                      (LOC.+1)   LOC.  +.
                      (   .+TWO)(   .LOC.)

         assembles table entries

             102
             304
             506

     The value of an operator which could  have  accepted  a
     decimal  integer prefix, but which does not have such a
     prefix,  can  instead  be  specified  enclosed   within
     parentheses  following  the  operator.  The parentheses
     are not necessary if this value is calculated from just
     a  single  constant  or  integer.   The  sign,  if any,
     established prior to  the  operator  which  could  have
     taken  the  decimal  integer  prefix  is re-established
     after the end of the following expression.
TBLTRN:  Language Specification Manual              Page  69
Programmed Operators


     Example:

             DEF-(+5 3)TWO SIZ+(3 5)
             LFT TWO(1+TWO)(TWO+3)
             LFT(7-TWO-3)(OCT 17 AND TRX(TWO+6)25)
             ,,(DEC 31 XOR 30)

         would assemble table entries containing 197  (octal
         305)   and   327  (octal  507)  respectively.   The
         individual operations performed in this example are
         as follow.
         1.  Define symbol TWO as a constant with value 2.
         2.  Set the byte size to 8 (3 bits per shift unit).
         3.  Left shift 2 bytes the value 1 and  inclusively
             OR  this  octal  100  into the initially zeroed
             first table entry.
         4.  Left shift 2 bytes the value  of  the  constant
             TWO  and  add this octal 200 to the first table
             entry to give octal 300.
         5.  Inclusively OR the value of  the  constant  TWO
             into the first table entry to give octal 302.
         6.  Add the value 3 to the  first  table  entry  to
             give the final value octal 305.
         7.  Left shift 2  bytes  the  value  octal  17  and
             inclusively   OR   this  octal  1700  into  the
             initially zeroed first table entry.
         8.  Set to octal the radix for  the  interpretation
             of integers not preceded by either OCT or DEC.
         9.  Left shift 2  bytes  the  value  octal  25  and
             logically  AND  this octal 2500 into the second
             table entry to give octal 500.
         10. Inclusively OR the value decimal 31 (octal  37)
             into the second table entry to give octal 537.
         11. Exclusively OR the  value  octal  30  into  the
             second  table  entry  to  give  the final value
             octal 507.

     An  automatic  argument  of  a  packing  pattern   must
     similarly   be  defined  enclosed  in  left  and  right
     parentheses if the argument consists  of  more  than  a
     single integer or constant.  Several examples are given
     in the definition of the ARG operator.

((   (double left  parenthesis)  Identical  to  single  left
     parenthesis.  

     Example: This symbol is provided to allow the  argument
     list  of a packing pattern (such as MASK) to be written
     in the form

             MASK ((arg1)(arg2))    rest of statement
TBLTRN:  Language Specification Manual              Page  70
Programmed Operators


         or

             MASK ( (arg1) (arg2) ) rest of statement

         or, if each argument is a single constant

             MASK ARG1 ARG2)        rest of statement

)    (single  right  parenthesis)  Terminates  the  constant
     byte  and  sign range of the preceding ( or ((.  If not
     preceded by (  or  ((,  the  )  operator  advances  the
     argument   specification   of  the  presently  selected
     packing  pattern  to  the  next  origin  increment   or
     terminates  the  range  within the present statement of
     the packing pattern if an origin increment not found.

))   (double  right  parenthesis)  Terminates  the  constant
     byte  and sign range of the preceding ( or ((, and also
     advances  argument  specification  of   the   presently
     selected  packing  pattern to the next origin increment
     or terminates the range within the present statement of
     the packing pattern if an origin increment not found.

     Example:

             MASK=MSK 100SIZ 1LFT ARG 2LFT ARG 3LFT ARG
             TON MASK 1) +2
                      3))+4
                   (2+3))+6
                  ((3+4))+8

         assembles table entries

             102
             304
             506
             708

ACC  (Alter Character Class)  When  used  outside  a  symbol
     definition,  the  next  symbol,  which  must  be a text
     string initiated by the '  or  ''  operators  and  with
     delimiter  characters,  defines or alters the character
     classes used to delimit adjacent symbols not  separated
     by blanks.  The first (left) non-blank character within
     the text string is placed into the character  class  of
     the  second  non-blank  character.   If  the  first and
     second  non-blank   characters   are   identical,   the
     character  is  placed  into  a character class separate
     from all others.  If the  text  string  consists  of  a
     single non-blank character, this character is placed in
     the character class containing the blank.  If the  text
     string  consists  of  more than 2 non-blank characters,
     the extra characters to the right are ignored.
TBLTRN:  Language Specification Manual              Page  71
Programmed Operators


     Example:

             ACC'/+-/

         places the character + (plus) into the class of the
         character  - (minus).  Symbols could then be formed
         of any combination of these 2 characters, as  might
         be done to allow the definitions +-=IOR and -+=IOR.

     Example:

             ACC'/88/ACC'/99/
             8=LFT
             9=8 1...NOT 9=18 AS 1 AND 8 NOT IN SAME CLASS
             2SIZ 92

         would assemble a table entry containing the value 4
         which is 2 left shifted 1 byte of size 2.

ADR  (ADdRess)  When used outside a symbol  definition,  the
     following symbol is defined as the address label of the
     present table entry origin, offset by one less than the
     value  specified  by  the WRD operator if used prior to
     the ADR operator.  If  the  symbol  was  previously  an
     address  label,  its value is merely redefined.  If the
     symbol is currently also defined as an  operator  other
     than an address label, it will in the future be used as
     an address label following  the  LOC,  BIT,  XAD,  IFA,
     IFNA,   DIA   and  DINA  operators.   Unlike  automatic
     definition as an address label, the  ADR  operator  and
     its  following symbol can appear in the statement after
     a   constant   has   been   assembled   following   the
     establishment of the table entry origin.

     Example:

             MASK=MSK ARG.ARG 2WRD ARG
             MASK 123 ADR SECOND 2WRD ADR THIRD 456 789

         or

             MASK=MSK ARG.ARG 2WRD ARG
             MASK 123 456 789 ADR SECOND 2WRD ADR THIRD

         defines the symbol SECOND to be the  address  label
         of  the  second  assembled  table entry (containing
         456) and the symbol THIRD to be the  address  label
         of  the  third  assembled  table  entry (containing
         789).

AND  (AND)  The next constant or address  encountered  after
     this  operator  within  the  present statement is to be
     ANDed into the constant  or  table  entry  or  operator
TBLTRN:  Language Specification Manual              Page  72
Programmed Operators


     value  being  currently defined.  After the logical AND
     operation, the only bits which are turned  on  (set  to
     one)  in  the  item  being defined are those bits which
     were originally on both in the item being  defined  and
     in the item being ANDed with the item being defined.

     Examples:

             OCT 27 AND OCT 72

         assembles a table entry containing  octal  22.   It
         should  be  noted  that  the  result  of the AND of
         anything with zero is  always  zero.   Therefore  a
         statement such as

             DEF AND 63 A

         would direct that the DEF operator be used  with  a
         zero  value, and as a result, A would be defined as
         a constant with the value zero.

ARG  (ARGument)  Marks  end   of   sign,   byte   and   word
     specification  of  an  argument  in  a  packing pattern
     definition.  The ARG operator  can  be  followed  by  a
     constant  or  constant  shift  phrase to be taken as an
     automatic argument  of  the  packing  pattern,  by  the
     specification   of   sign,   byte  and  word  count  of
     additional   arguments,   by   an   origin    increment
     specification,  or  by  the  name  of  another  packing
     pattern.

     Example:

             MASK=MSK+2LFT 4WRD ARG 4WRD 2LFT-ARG

         defines MASK as a packing pattern which  would  add
         its  1st  argument into the 3rd byte (2 byte shift)
         of the 3rd table entry  beyond  the  current  table
         entry  origin  and  then  subtract its 2nd argument
         from the same byte of the same table entry.

             MASK=MSK+2LFT 4WRD ARG 22 4WRD 2LFT-ARG

         defines MASK as a packing pattern which  would  add
         the  value  22  into  the 3rd byte of the 3rd table
         entry beyond the current  table  entry  origin  and
         then subtract its 2nd argument (22 is automatically
         its 1st argument) from the same byte  of  the  same
         table entry.

             AA=33
             MASK=MSK+2LFT 4WRD ARG,,,
                  4WRD 2LFT-ARG(+11+OCT 54 AA)
TBLTRN:  Language Specification Manual              Page  73
Programmed Operators


         define MASK as a packing pattern  which  would  add
         its 1st argument into the 3rd byte of the 3rd table
         entry beyond the current  table  entry  origin  and
         then  add  11  followed  by  the addition of 44 and
         subtraction of 33 to the same byte of the same word
         if,  and only if, there was a 1st argument.  In the
         above example, the values of the automatic argument
         are   stored  when  the  definition  is  made,  and
         afterwards do not depend upon the value of AA  when
         the   pattern  is  used.   The  radix  for  integer
         evaluation during the remainder of  the  definition
         (or  for  just the next constant in the definition)
         can be reset at any point in  the  definition.   If
         the  sign  is not specified in the definition of an
         automatic argument, the sign is taken as  the  last
         sign  specified  before  the  left parenthesis if a
         left parenthesis is used.  Thus, the statements

             AA=33
             MASK=MSK+2LFT 4WRD ARG,,,
                  4WRD 8SRX 2LFT ARG+(DEC 11 54-AA)

         or

             AA=33
             MASK=MSK+2LFT 4WRD ARG,,,
                  4WRD 2LFT ARG+(8SRX DEC 11 54-AA)

         are exactly equivalent to the above.  Byte and word
         count   cannot   be  respecified  between  the  ARG
         operator and the automatic argument just  as  these
         cannot be respecified for an explicit argument of a
         packing pattern used in a statement which defines a
         table entry.

BAC  (Begin Automatic Continue)  When used outside a  symbol
     definition,  this  operator  causes  each  new  line to
     continue the previous statement even if the ,,  or  ,,,
     operators  have  not been used.  Statements can only be
     terminated by the , (single  comma)  or  END  operators
     while   the   BAC  operator  is  in  effect,  and  text
     replacement symbols for which insertion of the text  is
     deferred  until before the end of a specified number of
     statements will only be inserted before the last of the
     specified number of , or END operators.  Some operators
     such as TTY, TEL, XSY, XAD, BLK, SAV and FIN will still
     properly cause local termination of the assembly of the
     table entries assembled by the  statement  even  though
     the  statement  has  not  been  closed  by the , or END
     operators.  The  range  of  the  BAC  operator  extends
     through  the  appearance  of  the  EAC  (End  Automatic
     Continue) operator or through the end  of  the  current
     table as indicated by the BLK, SAV or FIN operators.
TBLTRN:  Language Specification Manual              Page  74
Programmed Operators


BIT  (BIT) with   decimal   integer   prefix   or   followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by an address
     label.   When used outside a symbol definition, the bit
     indicated by the  decimal  integer  prefix  or  by  the
     constant  or parenthetical expression following the BIT
     operator is to be turned on in the  table  entry  which
     has  the  label  given.   Bit  1  is the right bit with
     numbers increasing to the left.  This numbering  scheme
     can be reversed by using the BPR operator to specifiy a
     negative number of bits per table entry.   With  either
     numbering   system,   overflow   bits   are  placed  in
     successively  higher  table  entries.   The   . (single
     period)  operator  can be used to represent the address
     label of the current table entry origin.  It should  be
     noted  that  address  labels  (or a single period as an
     address label) cannot be used in a symbol definition.

     Example:

             10BPR 5WRD 1BIT.

         or

             10BPR 3WRD 21BIT.

         or

             10BPR 1WRD 41BIT.

         or

             10BPR 41BIT.

         or

             5WRD ADDRESS 10BPR 1BIT ADDRESS

         or

             3WRD ADDRESS 10BPR 21BIT ADDRESS

         or

             1WRD ADDRESS 10BPR 1WRD 41BIT ADDRESS

         or

             ADDRESS 10BPR 41BIT ADDRESS

         turns on the 1st (right) bit in the 4th table entry
         beyond  the  current table entry origin.  It should
         be noted that 1WRD is the default and indicates  no
TBLTRN:  Language Specification Manual              Page  75
Programmed Operators


         additional  offset  from  the  current  table entry
         origin.

     Example:

             FOUR=4
             SIX=6
             ADDRESS1 BIT SIX ADDRESS2 BIT FOUR ADDRESS2
             ADDRESS2 1BIT ADDRESS1 3BIT ADDRESS1

         or

             10BPR
             1BIT ADDRESS1 3BIT ADDRESS1
             14BIT ADDRESS1 16BIT ADDRESS1
             ADDRESS1 2WRD NUL

         or

             MINUS=-10,BPR MINUS
             ADDRESS1 2WRD NUL
             8BIT ADDRESS1 10BIT ADDRESS1
             15BIT ADDRESS1 17BIT ADDRESS1

         assemble table entries

             5 (octal 101)
             40 (octal 101000)

         The NUL operator is used in the  above  example  to
         force  sufficient  table entries to be set aside in
         the destination which is to receive bits  specified
         later.

     The BSZ operator can force the  Bit  operator  to  form
     counts  in  larger  than single bit bytes.  BSZ through
     either decimal integer prefix or immediately  following
     constant  or  parenthetical expression defines the byte
     size referenced by the BIT operator.   This  byte  size
     need not be 2 raised to some power, but should not be a
     base not greater than 17 raised to some power.  A  byte
     size  of  2 (1 bit) is the default and the BIT operator
     inclusively OR's into this byte size so that the effect
     is  the  turning on of the the specified bit.  When the
     byte size is larger, the BIT operator  instead  adds  a
     properly  shifted one to the entry containing the byte.
     The contents of the byte thus serve as a count  of  the
     number  of  times  the BIT operator deposited into this
     particular byte.  No check for overflow of the byte  is
     made however.

BLK  (BLocK)  When used outside a  symbol  definition,  this
     operator writes the table which has been assembled onto
TBLTRN:  Language Specification Manual              Page  76
Programmed Operators


     the  output  device,   restores   the   TBLTRN   symbol
     dictionary  and  character  classes  to  their original
     conditions, and begins reading of the next table to  be
     assembled.   The  final  table  to be assembled must be
     terminated by a FIN operator rather than by  a  BLK  or
     SAV operator.

     Example:

             1,2,3,BLK,4,5,6,FIN

         would assemble a table containing the entries 1,  2
         and 3 and a second (and final) table containing the
         entries 4, 5 and 6.

BOD  (Begin  Ordered  Dictionary)  When  issued  outside   a
     symbol  definition,  this operator causes all following
     symbol definitions by the = or == operators  to  insert
     the  symbols  being defined into the ordered portion of
     the symbol dictionary.  Such symbol definitions require
     more  time  to perform than the simple graftings of the
     new definitions to the end  of  the  symbol  dictionary
     which   are   performed   when  the  EOD  (End  Ordered
     Dictionary)  command  is   active.    However,   future
     recognitions  of  symbols within the ordered portion of
     the  symbol  dictionary  are  performed  more  quickly.
     Insertion  of  newly  defined  symbols into the ordered
     portion of the symbol dictionary is the default  action
     at the start of each table.

BPR  (Bit PRecision) with decimal integer prefix or followed
     immediately  by a constant or parenthetical expression.
     When used outside  a  symbol  definition,  the  integer
     prefix  or the absolute value of the following constant
     or parenthetical expression  is  to  be  taken  as  the
     number  of  bytes  per word which can be set by the BIT
     operator.  Unless the byte size referenced by  the  BIT
     operator has been altered by the BSZ operator, the byte
     size will be a single bit.  The right hand byte in  the
     word  is  byte  1 with the byte numbering increasing to
     the left if the number of  bytes  is  specified  by  an
     integer   prefix  or  positive  following  constant  or
     parenthetical expression.  If the number  of  bytes  is
     specified  instead  by a negative following constant or
     parenthetical expression, the byte numbering  increases
     from  left  to  right  with the right byte numbered the
     absolute  value  of  the  constant   or   parenthetical
     expression.   The  default  conditions  at the start of
     each table are 32 single bit bytes per table entry with
     the right bit being byte 1.

BSZ  (Bit SiZe) with  decimal  integer  prefix  or  followed
     immediately  by a constant or parenthetical expression.
TBLTRN:  Language Specification Manual              Page  77
Programmed Operators


     When used outside a symbol definition, the value of the
     integer   prefix   or   the   following   constant   or
     parenthetical expression is to be taken as the size  of
     the  bytes  referenced  by  the BIT operator.  The byte
     size is the number of different  values  which  can  be
     packed  into the bit.  The default byte size is 2 which
     is a single bit.

     Example:

             100BSZ

         would define the byte size referenced  by  the  BIT
         operator  as  100.   When  the byte size is greater
         than  2,  the  BIT  operator   adds   rather   than
         inclusively  OR's  a  properly shifted one into the
         byte.  The statement

             1BIT A 2BIT A 2BIT A 3BIT A 3BIT A 3BIT A

         would deposit the  value  decimal  30201  into  the
         table entry named A if the byte size was 100.

CLM  (CoLuMn)  with  decimal  integer  prefix  or   followed
     immediately  by a constant or parenthetical expression.
     When used outside a symbol definition, the value of the
     decimal  integer  appearing  as prefix or the following
     constant or parenthtical expression is to be  taken  as
     the  width  in  characters  of  the numbers in the DATA
     statements generated  as  output.   If  this  width  is
     specified   as   zero,  the  DATA  statements  will  be
     generated in a compact format without inserted  blanks.
     If  the  specified width is greater than zero, the DATA
     statements are generated with the assembled numbers  in
     columns.   The  width  of  each of these columns is the
     larger of the specified width and the maximum width  of
     any number.

     Example:

             TTL'/VALUE/10CLM 60WID

         would  specify  that  the  output  DATA  statements
         represent  the  basic array name as VALUE and group
         the table entries into columns 10  characters  wide
         (not  counting  separating  commas)  in a statement
         field 60 characters wide.

DBG  (DeBuG)  When used outside a  symbol  definition,  this
     operator   causes  the  TBLTRN  symbol  dictionary  and
     assembled table entries to  be  listed  on  the  lister
     device.   Table  entries  which  contain  pointers  are
     identified as such and are printed unpacked in decimal.
TBLTRN:  Language Specification Manual              Page  78
Programmed Operators


     All  other  table  entries  and  the  values of defined
     constants are printed in both decimal and octal.

DEC  (DECimal)  The integer which follows this  operator  in
     the  current  statement  is  to be evaluated in decimal
     (that is, with radix 10).

     Example:

             ITEM=DEC 100+OCT 13
             DEC 1000+ITEM

         would define a table entry containing decimal  1111
         regardless of the default radices.

DEF  (DEFine) with  decimal  integer  prefix   or   followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by  a  symbol
     defined   as  a  single  entry  constant  or  which  is
     undefined or which is merely an  address  label.   When
     used outside a symbol definition, the final argument is
     assigned the value of the decimal integer prefix of the
     DEF  operator  or  of  the  constant  or  parenthetical
     expression immediately following the DEF operator if  a
     decimal  integer  prefix  is not present.  If the final
     argument of the DEF operator is undefined or merely  an
     address  label,  this  final  argument  is defined as a
     single  precision  constant,   without   altering   the
     possible  address label definition.  The operators DEF,
     INC, POP, PSH, RED, ROT, SFT, and STK permanently alter
     the  value  of  a  constant without depositing into the
     current table entry.  None of these  operators  can  be
     used within a symbol definition to alter the value of a
     constant.  Of course, new operator names can be defined
     as equal to any one of these operators by statements of
     the form

         DEFINE=DEF

     or

         DEFINE=.''/DEF/

     Example:

             DEF 8 B

     or

             8DEF B

         assigns the symbol B (which must be a single  entry
         constant,  be  undefined,  or  be merely an address
TBLTRN:  Language Specification Manual              Page  79
Programmed Operators


         label) the value 8.  If B is not currently a single
         entry constant, it is defined as a single precision
         constant.   If  B  is  currently  a  single   entry
         constant, its precision is unchanged.

DIA  (Do If Address) with decimal integer prefix or followed
     immediately  by a constant or parenthetical expression,
     this in turn being followed immediately by a symbol  to
     be  tested  for  definition  as an address label.  When
     used  outside  a  symbol  definition,  the  prefix   or
     immediately   following   constant   or   parenthetical
     expression indicates the number  of  symbols  following
     the  tested  symbol  within the current statement which
     will  be  assembled  only  if  the  tested  symbol   is
     currently  an address label.  Since a symbol can at the
     same time be both address label and other operator, the
     opposite  of DIA is DINA (Do If Not Address) instead of
     DIO (Do If Other).

DID  (Do If Defined) with decimal integer prefix or followed
     immediately  by a constant or parenthetical expression,
     this in turn being followed immediately by a symbol  to
     be  tested for definition as either an address label or
     other operator.  When used outside a symbol definition,
     the   prefix   or  immediately  following  constant  or
     parenthetical  expression  indicates  the   number   of
     symbols  following the tested symbol within the current
     statement which will be assembled only  if  the  tested
     symbol   is   currently   defined.   An  address  label
     previously referenced by the BIT or LOC  operators  but
     as  yet  unassigned  to  a  table entry is defined even
     though its eventual value is unknown.  The opposite  of
     DID is DIU (Do If Undefined).

DIE  (Do If  Equal  zero) with  decimal  integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression, either form being followed immediately by a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     prefix   or   immediately   following    constant    or
     parenthetical   expression   indicates  the  number  of
     symbols following the  tested  constant  or  expression
     within  the  current  statement which will be assembled
     only if the tested constant or expression has  a  value
     equal to zero.

     Example:

     The statements

     MULT=2WRD 3 5WRD 1 4 WRD 3-2
         2DIE         4PFX-MULT          5 +6
TBLTRN:  Language Specification Manual              Page  80
Programmed Operators


     0PFX DIE      MULT    MULT   99    22   ...SKIP 99
          DIE     (MULT+2)(MULT-1)      22+11
       66-DIE(3PFX MULT+6) MULT   99+88+22   ...SKIP 99+88+
          DIE     -MULT   -MULT   99+   55   ...SKIP 99+

     assemble table entries containing 11, 22,  33,  44  and
     55.

DIG  (Do If Greater than zero) with decimal  integer  prefix
     or  followed immediately by a constant or parenthetical
     expression, either form being followed immediately by a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     prefix   or   immediately   following    constant    or
     parenthetical   expression   indicates  the  number  of
     symbols following the  tested  constant  or  expression
     within  the  current  statement which will be assembled
     only if the tested constant or expression has  a  value
     greater than zero.

DIGE (Do If Greater than or Equal zero) with decimal integer
     prefix   or  followed  immediately  by  a  constant  or
     parenthetical expression, either  form  being  followed
     immediately   by   a   possibly   signed   constant  or
     parenthetical expression (containing no address labels)
     of  which the value is to be tested.  When used outside
     a  symbol  definition,  the   prefix   or   immediately
     following    constant   or   parenthetical   expression
     indicates the number of symbols  following  the  tested
     constant  or  expression  within  the current statement
     which will be assembled only if the tested constant  or
     expression has a value greater than or equal to zero.

DIL  (Do If Less than zero) with decimal integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression, either form being followed immediately by a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     prefix   or   immediately   following    constant    or
     parenthetical   expression   indicates  the  number  of
     symbols following the  tested  constant  or  expression
     within  the  current  statement which will be assembled
     only if the tested constant or expression has  a  value
     less than zero.

DILE (Do If Less than or Equal  zero) with  decimal  integer
     prefix   or  followed  immediately  by  a  constant  or
     parenthetical expression, either  form  being  followed
     immediately   by   a   possibly   signed   constant  or
     parenthetical expression (containing no address labels)
     of  which the value is to be tested.  When used outside
TBLTRN:  Language Specification Manual              Page  81
Programmed Operators


     a  symbol  definition,  the   prefix   or   immediately
     following    constant   or   parenthetical   expression
     indicates the number of symbols  following  the  tested
     constant  or  expression  within  the current statement
     which will be assembled only if the tested constant  or
     expression has a value less than or equal to zero.

DIN  (Do If Not equal zero) with decimal integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression, either form being followed immediately by a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     prefix   or   immediately   following    constant    or
     parenthetical   expression   indicates  the  number  of
     symbols following the  tested  constant  or  expression
     within  the  current  statement which will be assembled
     only if the tested constant or expression has  a  value
     not equal to zero.

DINA (Do If Not  Address) with  decimal  integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression, this in turn being followed immediately  by
     a  symbol  to  be  tested  for definition as an address
     label.  When used  outside  a  symbol  definition,  the
     prefix    or    immediately   following   constant   or
     parenthetical  expression  indicates  the   number   of
     symbols  following the tested symbol within the current
     statement which will be assembled only  if  the  tested
     symbol  is  currently  not  an  address label.  Since a
     symbol can at the same time be both address  label  and
     other  operator,  the  opposite  of  DINA is DIA (Do If
     Address) instead of DINO (Do If Not Other).

DINO (Do  If  Not  Other) with  decimal  integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression, this in turn being followed immediately  by
     a  symbol  to be tested for definition as other than an
     address label.  When used outside a symbol  definition,
     the   prefix   or  immediately  following  constant  or
     parenthetical  expression  indicates  the   number   of
     symbols  following the tested symbol within the current
     statement which will be assembled only  if  the  tested
     symbol  is  currently  not  an  operator  other than an
     address label.  Since a symbol can at the same time  be
     both  address label and other operator, the opposite of
     DINO is DIO (Do If Other) instead of DINA  (Do  If  Not
     Address).

DIO  (Do If Other) with decimal integer prefix  or  followed
     immediately  by a constant or parenthetical expression,
     this in turn being followed immediately by a symbol  to
     be  tested  for  definition  as  other  than an address
TBLTRN:  Language Specification Manual              Page  82
Programmed Operators


     label.  When used  outside  a  symbol  definition,  the
     prefix    or    immediately   following   constant   or
     parenthetical  expression  indicates  the   number   of
     symbols  following the tested symbol within the current
     statement which will be assembled only  if  the  tested
     symbol  is  currently an operator other than an address
     label.  Since a symbol can at the  same  time  be  both
     address  label  and other operator, the opposite of DIO
     is DINO (Do  If  Not  Other)  instead  of  DIA  (Do  If
     Address).

DIU  (Do  If  Undefined) with  decimal  integer  prefix   or
     followed  immediately  by  a  constant or parenthetical
     expression, this in turn being followed immediately  by
     a  symbol  to  be  tested  for  definition as either an
     address label or other operator.  When used  outside  a
     symbol  definition, the prefix or immediately following
     constant  or  parenthetical  expression  indicates  the
     number  of  symbols  following the tested symbol within
     the current statement which will be assembled  only  if
     the  tested  symbol  is currently undefined (neither an
     address label nor other).  An address label  previously
     referenced  by  the  BIT  or  LOC  operators but as yet
     unassigned to a table entry is defined even though  its
     eventual  value is unknown.  The opposite of DIU is DID
     (Do If Defined).

DMP  (DuMP)  When used outside  a  symbol  definition,  this
     operator  causes  the  TBLTRN  symbol  dictionary to be
     printed on the lister device.

DUP  (DUPlicate) with decimal  integer  prefix  or  followed
     immediately  by  a constant or parenthetical expression
     defined as a single entry constant.  When used  outside
     a symbol definition, the set of table entries specified
     by the present statement (or by the next if the present
     statement  does  not  define  a  table  entry)  will be
     repeated as  a  set  to  produce  the  number  of  sets
     specified  by  the decimal integer prefix of, or by the
     constant or parenthetical expression which follows, the
     DUP operator.

     Example:

             1BIT ADDRESS 4DUP,ADDRESS 2WRD 2

         or

             1BIT ADDRESS 4DUP ADDRESS 2WRD 2

         or
TBLTRN:  Language Specification Manual              Page  83
Programmed Operators


             1BIT ADDRESS ADDRESS 4DUP 2WRD 2

         or

             1BIT ADDRESS ADDRESS 2WRD 2 4DUP

         assembles the table entries

             1
             2
             1
             2
             1
             2
             1
             2

EAC  (End Automatic Continue)  When used  outside  a  symbol
     definition,  this  operator  terminates  the  automatic
     continuation specified  by  the  BAC  (Begin  Automatic
     Continuation)  operator.   After  the  EAC operator has
     been issued, the appearance of a non-text line not tied
     to  the current statement by the ,, or ,,, operators is
     taken as an end of statement.   Automatic  continuation
     would  also be terminated by the end of table operators
     BLK, SAV and FIN.

END  (END)  This  operator  defines  end  of  statement   if
     necessary, and end of conditional assembly initiated by
     an IF class operator such as the IFE (IF Equal zero) or
     IFN (IF Not equal zero) operators.  An error message is
     reported if the number of IF class  operators  and  END
     operators  do  not balance.  Conditional assemblies can
     be nested but cannot overlap.

EOD  (End Ordered Dictionary)  When issued outside a  symbol
     definition,  this  operator causes all following symbol
     definitions by the = or == operators to add  the  newly
     defined symbols, if undefined prior to the definitions,
     to the end of the symbol dictionary.  Such  definitions
     are  performed  more  quickly than when the symbols are
     inserted  into  the  ordered  portion  of  the   symbol
     dictionary.  Similarly, expunging of symbols within the
     unordered portion of the symbol dictionary is  quicker,
     since  garbage  collection  then  does  not  need to be
     performed upon the entire dictionary.  However,  future
     recognition  of symbols within the unordered portion of
     the symbol dictionary is slower than for symbols within
     the ordered portion since the latter is searched first.
     The BOD (Begin  Ordered  Dictionary)  operator  can  be
     issued  to  cause  the  symbols  defined by the = or ==
     operators to be inserted into the  ordered  portion  of
     the symbol dictionary if not already within the ordered
TBLTRN:  Language Specification Manual              Page  84
Programmed Operators


     portion prior to the definition.  Labels, and constants
     defined   by   the  DEF,  STK  and  PSH  operators,  if
     previously undefined are always added to the  unordered
     portion of the symbol dictionary.

FIL  (FILl) with  decimal   integer   prefix   or   followed
     immediately  by a constant or parenthetical expression.
     When used outside a symbol definition, the value of the
     the  integer  prefix  or  of  the following constant or
     parenthetical expression is to be taken as  the  number
     of  table  entries  to  which  the table is filled with
     zeroes when output if the table  length  is  less  than
     this number.

FIN  (FINish)  When used outside a symbol  definition,  this
     operator  writes  the  final  assembled  table onto the
     output device, writes an end of file on that device and
     terminates execution.

HIA  (HIgh Address)  When used outside a symbol  definition,
     the following symbol is defined as the address label of
     the highest subscript table entry currently  assembled,
     offset  by one less than the value specified by the WRD
     operator if used prior to the  HIA  operator.   If  the
     current  statement has not assembled any table entries,
     the table entry origin is one entry above  the  highest
     entry previously assembled and this now becomes the the
     highest table entry.  If the symbol was  previously  an
     address  label,  its value is merely redefined.  If the
     symbol is currently also defined as an  operator  other
     than an address label, it will in the future be used as
     an address label following  the  LOC,  BIT,  XAD,  IFA,
     IFNA,   DIA   and  DINA  operators.   Unlike  automatic
     definition as an address label, the  HIA  operator  and
     its  following symbol can appear in the statement after
     a constant has been assembled  following  establishment
     of the table entry origin.

     Example:

             MASK=MSK ARG.ARG 2WRD ARG
             2WRD HIA SECOND MASK 123 456 789 HIA THIRD

         or

             MASK=MSK ARG.ARG 2WRD ARG
             MASK 123 456 HIA SECOND 2WRD HIA THIRD 789

         defines the symbol SECOND to be the  address  label
         of  the  second  assembled  table entry (containing
         456) and the symbol THIRD to be the  address  label
         of  the  third  assembled  table  entry (containing
         789).
TBLTRN:  Language Specification Manual              Page  85
Programmed Operators


IFA  (IF Address) followed immediately by  a  symbol  to  be
     tested  for  definition as an address label.  When used
     outside  a  symbol  definition,  the  statements  which
     follow  through  the  matching  END  operator  will  be
     assembled only if the following symbol is currently  an
     address  label.  Since a symbol can at the same time be
     both address label and other operator, the opposite  of
     IFA is IFNA (IF Not Address) instead of IFO (IF Other).

IFD  (IF Defined) followed immediately by  a  symbol  to  be
     tested  for  definition  as  either an address label or
     other operator.  When used outside a symbol definition,
     the  statements  which  follow through the matching END
     operator will be assembled only if the following symbol
     is  currently  defined.   An  address  label previously
     referenced by the BIT  or  LOC  operators  but  as  yet
     unassigned  to a table entry is defined even though its
     eventual value is unknown.  The opposite of IFD is  IFU
     (IF Undefined).

IFE  (IF Equal  zero) followed  immediately  by  a  possibly
     signed constant or parenthetical expression (containing
     no address labels) of which the value is to be  tested.
     When  used  outside a symbol definition, the statements
     which follow through the matching END operator will  be
     assembled only if the tested constant or expression has
     a value equal to zero.

     Example:

     The  following  statements   assemble   table   entries
     containing the values 1 through 19.

         ONE=1,TWO=2
         ...
         ...ALL THE TESTS BELOW FAIL BEACUSE THE VALUE
         ...TESTED IS LESS THAN ZERO OR NOT SPECIFIED.
         ...
         ...THE IFE 0,0 END CONDITIONAL IS NOT EXECUTED
         ...SINCE IT IS WITHIN RANGE OF A TEST WHICH FAILED.
         ...
         1,IFE(ONE-3),0,IFE 0,0 END 0 END 2,IFE END 3
         IFE-ONE,0 END 4,IFE(2-5,0 END 5,IFE(ONE-TWO END 6
         ...
         ...ALL THE TESTS BELOW SUCCEED EXCEPT FOR THE
         ...IFE(ONE+1),0 END CONDITIONAL, AND EXCEPT FOR THE
         ...TEST FOR WHICH TESTED VALUE ISN'T SPECIFIED.
         ...
         IFE-(+ONE 1),7,IFE(ONE+1),0 END 8,IFE END IFE+0,9
         END IFE(2-TWO,10 END 11,IFE(5-5 END 12 END
         ...
         ...ALL THE TESTS BELOW FAIL BECAUSE THE VALUE
         ...TESTED IS GREATER THAN ZERO OR NOT SPECIFIED.
TBLTRN:  Language Specification Manual              Page  86
Programmed Operators


         ...
         13,IFE(3-TWO),0 END 14,IFE END 15,IFE+ONE,0 END 16
         17,IFE(-1+2,0 END 18,IFE(ONE+2 END 19

IFG  (IF  Greater  than  zero) followed  immediately  by   a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     statements  which  follow  through  the  matching   END
     operator  will be assembled only if the tested constant
     or expression has a value greater than zero.

IFGE (IF Greater than or Equal zero) followed immediately by
     a  possibly signed constant or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     statements  which  follow  through  the  matching   END
     operator  will be assembled only if the tested constant
     or expression has a value  greater  than  or  equal  to
     zero.

IFL  (IF Less than zero) followed immediately by a  possibly
     signed constant or parenthetical expression (containing
     no address labels) of which the value is to be  tested.
     When  used  outside a symbol definition, the statements
     which follow through the matching END operator will  be
     assembled only if the tested constant or expression has
     a value less than zero.

IFLE (IF Less than or Equal zero) followed immediately by  a
     possibly  signed  constant  or parenthetical expression
     (containing no address labels) of which the value is to
     be  tested.  When used outside a symbol definition, the
     statements  which  follow  through  the  matching   END
     operator  will be assembled only if the tested constant
     or expression has a value less than or equal to zero.

IFN  (IF Not equal zero) followed immediately by a  possibly
     signed constant or parenthetical expression (containing
     no address labels) of which the value is to be  tested.
     When  used  outside a symbol definition, the statements
     which follow through the matching END operator will  be
     assembled only if the tested constant or expression has
     a value not equal to zero.

IFNA (IF Not Address) followed immediately by a symbol to be
     tested  for  definition as an address label.  When used
     outside  a  symbol  definition,  the  statements  which
     follow  through  the  matching  END  operator  will  be
     assembled only if the following symbol is currently not
     an  address label.  Since a symbol can at the same time
     be both address label and other operator, the  opposite
     of  IFNA  is  IFA  (IF Address) instead of IFNO (IF Not
TBLTRN:  Language Specification Manual              Page  87
Programmed Operators


     Other).

IFNO (IF Not Other) followed immediately by a symbol  to  be
     tested  for  definition as other than an address label.
     When used outside a symbol definition,  the  statements
     which  follow through the matching END operator will be
     assembled only if the following symbol is currently not
     an  operator  other  than  an  address  label.  Since a
     symbol can at the same time be both address  label  and
     other  operator, the opposite of IFNO is IFO (IF Other)
     instead of IFNA (IF Not Address).

IFO  (IF Other) followed  immediately  by  a  symbol  to  be
     tested  for  definition as other than an address label.
     When used outside a symbol definition,  the  statements
     which  follow through the matching END operator will be
     assembled only if the following symbol is currently  an
     operator  other  than an address label.  Since a symbol
     can at the same time be both address  label  and  other
     operator,  the  opposite  of IFO is IFNO (IF Not Other)
     instead of IFA (IF Address).

IFU  (IF Undefined) followed immediately by a symbol  to  be
     tested  for  definition  as  either an address label or
     other operator.  When used outside a symbol definition,
     the  statements  which  follow through the matching END
     operator will be assembled only if the following symbol
     is  currently  undefined  (neither an address label nor
     other).  An address label previously referenced by  the
     BIT  or  LOC operators but as yet unassigned to a table
     entry is defined even  though  its  eventual  value  is
     unknown.  The opposite of IFU is IFD (IF Defined).

INC  (INCrement) with decimal  integer  prefix  or  followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by  a  symbol
     defined  as a single entry constant.  When used outside
     a symbol definition, the value of the final argument is
     incremented  by the value of the decimal integer prefix
     of the INC operator or by the value of the constant  or
     parenthetical  expression immediately following the INC
     operator if a decimal integer prefix is not present.

     Example:

             DEF DEC 25 A INC(5-3)A

         would define the symbol A to be a constant with the
         value decimal 27.

IOR  (Inclusive   OR)  The   next   constant   or    address
     encountered  after  this  operator  within  the present
     statement is to be inclusively ORed into  the  constant
TBLTRN:  Language Specification Manual              Page  88
Programmed Operators


     or  table  entry  being  currently  defined.   The  IOR
     operator can be used to force inclusive ORing when this
     operation would not be the default if no sign is given.
     After the inclusive OR operation, all  bits  originally
     turned on (set to one) in the item being defined remain
     on and, in addition, the item being defined has  turned
     on  all  bits which were on in the item being ORed with
     the item being defined.

     Example:

             OCT 25 IOR OCT 72

         and

             10SIZ 2TRX 1001 1001 1001 1001 1001 1001 1001

         both assemble table entries with the value octal 77
         (decimal  63)  since  the  default sign is addition
         when the packing size is 10.

JST  (JuSTify)  with  decimal  integer  prefix  or  followed
     immediately  by a constant or parenthetical expression.
     When used outside a symbol definition, the value of the
     integer  prefix  or  following  expression  selects the
     justification of the numeric portion  of  the  text  by
     which  the  NST  operator  replaces itself.  If the JST
     operator has been used with a zero value,  or  has  not
     been  used at all, since the last appearance of the NST
     operator, the numeric portion of the text by which  NST
     replaces   itself  will  appear  as  a  numeric  suffix
     following the text selected by the NSN operator without
     any  inserted  blanks.  If the JST operator has instead
     been used with a positive non-zero value since the last
     appearance  of  the NST operator, the text by which the
     next use of the NST operator will replace  itself  will
     have  the numeric portion right justified in a field of
     the width selected by the JST operator.  If the numeric
     portion has fewer characters than the field width, this
     numeric portion is right justified by the insertion  of
     extra  blanks  following  the text selected by NSN.  If
     this numeric  portion  has  more  characters  than  the
     selected  field  width,  the  left  (most  significant)
     characters will be discarded.

LFT  (LeFT shift) with decimal integer  prefix  or  followed
     immediately  by a constant or parenthetical expression.
     The value of the integer prefix  or  of  the  following
     constant  or parenthetical expression is to be taken as
     the number of bytes which the next constant  is  to  be
     shifted  to  the  left  before being assembled into the
     table entry or symbol currently being defined.
TBLTRN:  Language Specification Manual              Page  89
Programmed Operators


     Example:

             10SIZ 2LFT 2

         or

             SIZ 10 LFT 2 2

         assemble table entry with the value decimal 200  (2
         left shifted 2 units of 10 each).

LMT  (LiMiT) with  decimal  integer   prefix   or   followed
     immediately  by a constant or parenthetical expression.
     When used outside a symbol definition, the value of the
     decimal  integer prefix or of the following constant or
     parenthetical expression is to be taken as the  maximum
     number of text replacements which can be performed in a
     single input line.   If  the  value  of  the  following
     constant  or expression is negative, its absolute value
     is taken as the limit, and a trace of text replacements
     is  written  on  the listing device.  Processing of the
     line will be terminated if this limit is exceeded.  The
     default limit at the start of each table is 1000.  Each
     replacement within  a  statement  containing  a  syntax
     error is counted as 100 replacements.

LOA  (LOw Address)  When used outside a  symbol  definition,
     the following symbol is defined as the address label of
     the  lowest  table  entry  assembled  by  the   present
     statement,  offset by one less than the value specified
     by the WRD operator if used prior to the LOA  operator.
     If  the  current  statement has not assembled any table
     entries, the table entry origin is one entry above  the
     highest entry previously assembled and this now becomes
     the  lowest  table  entry  assembled  by  the   current
     statement.   If  the  symbol  was previously an address
     label, its value is merely redefined.  If the symbol is
     currently  also  defined  as  an operator other than an
     address label, it will in the  future  be  used  as  an
     address  label  following the LOC, BIT, XAD, IFA, IFNA,
     DIA and DINA operators.  Unlike automatic definition as
     an  address  label,  the LOA operator and its following
     symbol can appear in the statement after a constant has
     been  assembled  following  establishment  of the table
     entry origin.

     Example:

             MASK=MSK ARG.ARG 2WRD ARG
             3WRD LOA THIRD MASK 123 456 789 2WRD LOA SECOND

         defines the symbol SECOND to be the  address  label
         of  the  second  assembled  table entry (containing
TBLTRN:  Language Specification Manual              Page  90
Programmed Operators


         456) and the symbol THIRD to be the  address  label
         of  the  third  assembled  table  entry (containing
         789).

LOC  (LOCation)  When used outside a symbol definition,  the
     symbol  following  this  operator is to be treated as a
     constant having as its value the  location  within  the
     table  of  the  entry  for  which it is the label.  The
     current  table  entry  always  has  as  its  label  the
     operator . (single  period) so that it is not necessary
     to label  each  entry  which  is  to  contain  its  own
     address.   The  construction LOC.  is accepted although
     LOC is not here necessary.  It  should  be  noted  that
     address labels (or a single period as an address label)
     cannot be used in a symbol definition.

     Example: Table starting

             ADDRESS LOC ADDRESS
                     LOC .
                         .
                     2SIZ 2LFT LOC ADDRESS

         assembles table entries

             1
             2
             3
             4

LST  (LiST)  When used outside  a  symbol  definition,  this
     operator  causes  the  assembled  table  entries  to be
     printed on the lister device.

MSK  (MaSK)  A null packing  pattern  having  no  arguments.
     This  is  used  to  terminate  the  range  of a packing
     pattern which the TON operator has directed will  apply
     to all following table entries.  Since packing patterns
     can only be defined  in  terms  of  previously  defined
     patterns,  MSK  is  also necessary for the initial user
     definition of such patterns.

     Example:

             MASK=MSK 100SIZ 1LFT ARG ARG
             TON MASK 1 2
                      3 4 MSK
                      506

        assembles table entries

             102
             304
TBLTRN:  Language Specification Manual              Page  91
Programmed Operators


             506

NEG  (NEGative)  A single precision constant having the sign
     bit a one (turned on) and all other bits zeroed.

NSN  (Numeric  Symbol  Name)  When  used  outside  a  symbol
     definition,  the  non-blank characters of the following
     text string are taken as the basic name (prefix) of the
     symbol  by which the NST (Numeric Symbol Text) operator
     replaces itself.  The text string must be of 6 or fewer
     non-blank  characters, be initiated by ' or '' operator
     and,  following  this  operator,  be  enclosed   within
     delimiter characters which are otherwise ignored.

NST  (Numeric  Symbol   Text)   replaces   itself   in   any
     environment,  except within the range of an unfulfilled
     IF or Do-If class operator, by a symbol constructed  of
     a  text  name  with a decimal integer suffix.  The text
     name is established by the NSN  (Numeric  Symbol  Name)
     operator  and  the  value  of  the  numeric  suffix  is
     specified by the NSV (Numeric Symbol  Value)  operator.
     NST  is  one  of  the  few  operators  which  cannot be
     expunged from the symbol dictionary.   A  statement  of
     the  form  XSY  NST  or  XAD  NST  instead expunges the
     non-address or address  meanings  respectively  of  the
     symbol by which NST replaces itself.  See also JST.

     Example:

             NSN'+A+10NSV XSY NST

         expunges the non-address meaning, if  any,  of  the
         symbol  A10  from  the  TBLTRN  symbol  dictionary.
         Normally, the numeric suffix would be indicated  by
         a non-negative constant or parenthetical expression
         immediately following the NSV operator so that this
         suffix can be calculated.

NSV  (Numeric Symbol Value) with decimal integer  prefix  or
     followed  immediately  by  a  constant or parenthetical
     expression.  When used outside a symbol definition, the
     integer  prefix  or the value of the following constant
     or parenthetical expression is  taken  as  the  numeric
     suffix  of  the symbol by which the NST (Numeric Symbol
     Text) operator replaces itself.  The default  value  is
     zero at the start of each table.

NUL  (NULl)  This  operator  acts  as  a  null   or   single
     precision  zero  valued  argument  during  the use of a
     packing  pattern  or  during  the  definition   of   an
     automatic   argument  of  a  packing  pattern,  and  is
     equivalent to the operator pair ().  The form (NUL)  is
     acceptable,  but  the trailing parenthesis is necessary
TBLTRN:  Language Specification Manual              Page  92
Programmed Operators


     only if a leading parenthesis is used.  NUL acts  as  a
     zero  when used with or without the WRD operator in the
     definition of a constant or  of  a  table  entry.   NUL
     cannot  be  used  to  specify  the value of an operator
     which could have taken an integer prefix but did not.

     Example:

             MASK=MSK 100SIZ 2LFT ARG 1LFT ARG ARG
             TON MASK (   ) 1    2
                      (NUL) 3    4
                       NUL (5)   6
                       NUL  7    8
                       NUL NUL 910

        or

             MASK1=MSK 100SIZ 2LFT ARG NUL 1LFT ARG ARG
             MASK2=MSK 100SIZ 1LFT ARG 2LFT ARG(NUL)ARG
             MASK3=MSK 100SIZ 2LFT ARG()1LFT ARG ARG
             MASK4=MSK 100SIZ 1LFT ARG ARG 2LFT ARG()
             MASK5=MSK 100SIZ 1LFT ARG ARG 2LFT ARG NUL
             MASK1 1 2
             MASK2 3 4
             MASK3 5 6
             MASK4 7 8
             MASK5 9 10

        assembles table entries

             102
             304
             506
             708
             910

OCT  (OCTal)  The next integer after this  operator  in  the
     current statement is to be evaluated as octal (that is,
     with radix 8).  The symbol will be tagged as illegal if
     it contains the digits 8 or 9.

PFX  (PreFiX)  with  decimal  integer  prefix  or   followed
     immediately  by a constant or parenthetical expression.
     The value of the integer prefix  or  of  the  following
     constant  or parenthetical expression is to be taken as
     the precision of  the  single  entry  of  a  single  or
     multiple  entry  non-integer  constant  which  is to be
     taken as its value when such a constant is  used  after
     any  operator  which could have taken a decimal integer
     prefix, but which did not.  A zero value of the  prefix
     of the PFX operator or of the constant or parenthetical
     expression following it specifies that the value  of  a
     non-integer constant used after an operator which could
TBLTRN:  Language Specification Manual              Page  93
Programmed Operators


     have taken a decimal integer prefix, but which did not,
     is to be the value of its highest precision entry.  The
     latter option, the value  being  that  of  the  highest
     precision  entry,  is  the default at the start of each
     table.  A negative value  of  the  prefix  of  the  PFX
     operator or of the constant or parenthetical expression
     following it specifies that the value of a  non-integer
     constant  used after an operator which could have taken
     a decimal integer prefix, but which did not, is  to  be
     its  precision.   The  last option, the value being the
     precision,  continues  only  through  the  end  of  the
     current   statement  at  which  point  the  PFX  option
     previously in effect is reinstated.  Similarly, the PFX
     option   selected  prior  to  a  symbol  definition  is
     reinstated at the end of the definition so that  effect
     of PFX operators within a symbol definition is entirely
     local to that definition.

POP  (POP) followed immediately by a symbol which is defined
     as  a  constant, or which is defined only as an address
     label, or which  is  currently  undefined.   When  used
     outside  a  symbol definition, the high precision entry
     of the following constant is deleted.  If the  constant
     previously was of single precision, its definition as a
     constant is deleted from the  symbol  dictionary.   The
     symbol  following the POP operator is left unchanged if
     it previously was either undefined or only  an  address
     label.

PSH  (PuSH) with  decimal   integer   prefix   or   followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by  a  symbol
     which  is  defined  as  a constant, or which is defined
     only  as  an  address  label,  or  which  is  currently
     undefined.   If  undefined  or merely an address label,
     the final argument of  the  PSH  operator  is  defined,
     without altering the possible address label definition,
     as a single precision constant having the value of  the
     decimal  integer  prefix  of the PSH operator or of the
     constant  or   parenthetical   expression   immediately
     following  the PSH operator if a decimal integer prefix
     is not present.   If  the  final  argument  is  instead
     already  a  constant,  the value of the decimal integer
     prefix of the PSH  operator,  or  of  the  constant  or
     parenthetical  expression following the PSH operator if
     a decimal integer prefix is not present, is placed into
     the   precision   1   entry   of   the  constant  after
     incrementing by one the  precision  of  the  previously
     defined entries.  The PSH operator is used only outside
     symbol definitions.

RED  (REDuce) with  decimal  integer  prefix   or   followed
     immediately  by a constant or parenthetical expression,
TBLTRN:  Language Specification Manual              Page  94
Programmed Operators


     either designation being in turn followed by  a  symbol
     defined  as a single entry constant.  When used outside
     a symbol definition, the value of the final argument is
     decremented  by the value of the decimal integer prefix
     of the RED operator or by the value of the constant  or
     parenthetical  expression immediately following the RED
     operator if a decimal integer prefix is not present.

RIT  (RIghT shift) with decimal integer prefix  or  followed
     immediately  by a constant or parenthetical expression.
     Identical to LFT except that the shift is to the right.

     Example:

             10SIZ 1RIT 1020
                   2RIT 30400
                   3RIT 506000

        assembles table entries

             102
             304
             506

ROT  (ROTate) followed immediately  by  a  symbol  which  is
     defined  as  a constant, or which is defined only as an
     address label, or which is currently  undefined.   When
     used outside a symbol definition, the precisions of all
     entries of the following constant  are  incremented  by
     one  and  the  highest  precision entry is made the new
     precision 1 entry.  The final precision of the constant
     is  not changed.  The symbol following the ROT operator
     is left unchanged if it previously was either undefined
     or only an address label.

SAV  (SAVe)  When used outside  a  symbol  definition,  this
     operator writes the table which has been assembled onto
     the output device, removes all labels from  the  TBLTRN
     symbol dictionary (but does not restore this dictionary
     to its original condition), and begins reading  of  the
     next table to be assembled.  All symbols defined by the
     =, ==, DEF, PSH and STK  operators  and  all  character
     classes  defined  by  the  ACC  operator  are retained.
     Symbols which have been removed by the XSY operator are
     not  restored.  The final table to be assembled must be
     terminated by a FIN operator rather than by the BLK  or
     SAV operators.

SFT  (ShiFT) with  decimal  integer   prefix   or   followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by  a  symbol
     defined  as a single entry constant.  When used outside
     a symbol definition, the value of the final argument is
TBLTRN:  Language Specification Manual              Page  95
Programmed Operators


     left  shifted  the  number  of  bytes  specified by the
     integer prefix of the SFT operator or by  the  constant
     or  parenthetical  expression immediately following the
     SFT  operator  if  a  decimal  integer  prefix  is  not
     present.   Right  shifts  are  specified  as a negative
     number of bytes.  The byte size is  that  specified  by
     the SIZ operator.

SIZ  (SIZe)  with  decimal  integer   prefix   or   followed
     immediately  by a constant or parenthetical expression.
     The  decimal  integer  appearing  as  prefix   or   the
     following constant or parenthetical expression is to be
     taken as the byte size for shifting by the LFT, RIT and
     SFT  operators.   Appearance  of  the SIZ operator with
     integer  prefix  or  following  constant  or  following
     expression  within  a  symbol  definition specifies the
     byte size only for the remainder of the definition.  If
     the  byte  size is changed outside a symbol definition,
     it remains at the new  value  until  changed  again  or
     until the end of the table at which time it is reset to
     its default value of 2.  The base (the smallest  number
     which  when  raised to some power equals the byte size)
     of the byte size  cannot  exceed  17  when  an  address
     defined  later  in  the  table  is referenced or when a
     packing pattern is being defined.   The  byte  size  is
     really  the largest number plus one which can be packed
     per byte without overflowing.  If the byte is to  be  6
     bits  long, the byte size is decimal 64 which is stored
     internally by  the  program  as  2**6  when  the  64SIZ
     operator  is  encountered.  If the packing is to be one
     item per 3 decimal digits, the  byte  size  is  decimal
     1000  which  would be indicated by the 1000SIZ operator
     and would be stored internally as 10**3 (note that  the
     base  of  the  byte size is 10 not 1000).  It should be
     noted that the largest byte size which can be indicated
     by   a   decimal   integer   prefix  is  100000.   This
     restriction does not apply to byte sizes indicated by a
     symbol following the SIZ operator.

SRX  (Symbol RadiX) with decimal integer prefix or  followed
     immediately  by a constant or parenthetical expression.
     The value of the decimal integer appearing as prefix or
     of  the  following constant or parenthetical expression
     is to be taken  as  the  radix  of  integers  appearing
     within  symbol  definitions.   Appearance  of  a symbol
     radix designation within a symbol definition  specifies
     the radix only for the remainder of the definition.  If
     the  symbol  radix  is   changed   outside   a   symbol
     definition,  it  remains at the new value until changed
     again or until the end of the table at which time it is
     reset  to its default value of 10.  The specified radix
     must be in the range 2  through  16.   Care  should  be
     taken  if  the  radix  is  greater  than  10 since some
TBLTRN:  Language Specification Manual              Page  96
Programmed Operators


     operator names will then be treated as constants.

     Example:

             10TRX,10SRX,D=DUP,SYMBOL=10D

         defines SYMBOL as an operator which could  be  used
         to  specify that the table entries assembled by the
         current or following  statement  be  considered  to
         appear  10 times.  However, under a symbol radix of
         16, SYMBOL would become a constant with  the  value
         1*16*16+0*16+13.

STK  (STacK) with  decimal  integer   prefix   or   followed
     immediately  by a constant or parenthetical expression,
     either designation being in turn followed by  a  symbol
     which  is  defined  as  a constant, or which is defined
     only  as  an  address  label,  or  which  is  currently
     undefined.   If  undefined  or merely an address label,
     the final argument of  the  STK  operator  is  defined,
     without altering the possible address label definition,
     as a single precision  constant  having  as  value  the
     value of the decimal integer prefix of the STK operator
     or  of  the  constant   or   parenthetical   expression
     immediately  following  the  STK  operator if a decimal
     integer prefix is not present.  If the  final  argument
     is instead already a constant, the value of the decimal
     integer prefix of the STK operator, or of the  constant
     or  parenthetical expression following the STK operator
     if a decimal integer prefix is not present,  is  placed
     into a new entry, of the constant, having a precision 1
     greater than the previous high precision entry  of  the
     constant.  The STK operator is used only outside symbol
     definitions.

TEL  (TELl)  When  used  ouside  a  symbol  definition,  all
     available  information  about  all symbols between this
     operator and the end of the statement (as indicated  by
     the  end of the line or by the , or END operators which
     like the '  ''  ,,  ,,,  and  ... operators  cannot  be
     arguments  of  the  TEL operator) will be listed on the
     teletype in debugging format.  Integers are used within
     the  range  of the TEL operator to request the contents
     of  a  particular  previously  assembled  table  entry.
     Decimal integers with asterisk (or any character placed
     into the  class  originally  containing  the  asterisk)
     suffixes  are used within the range of the TEL operator
     to identify the initially defined operators having  the
     indicated  operator  identifier  codes.   It  should be
     noted  that  these  integer-asterisk  combinations  are
     identical  to  the indicated operators and so cannot be
     used to identify operators such as ' '' , ,, ,,, ... or
     END.  No harm results from requesting information about
TBLTRN:  Language Specification Manual              Page  97
Programmed Operators


     symbols not contained in the  symbol  dictionary  since
     such symbols are merely listed as undefined and, though
     entered into the symbol  dictionary,  are  removed  the
     next time any item is appended to the dictionary.

     Use of the NST operator within the  range  of  the  TEL
     operator  will report the definition of the symbol with
     which NST  replaces  itself.   Other  text  replacement
     operators   appearing  within  the  range  of  the  TEL
     operator do not replace themselves, so the  definitions
     of such symbols can be determined.

     Example:

             TEL 1 2 3 LOC .

         would list the contents of table entries 1, 2 and 3
         and   would   list   the  contents  of  the  symbol
         dictionary pertaining to symbols LOC and  . (single
         period).

     The integer zero can be used anywhere within the  range
     of  the  TEL  operator  to cause the definitions of the
     remaining items to be written on the listing device  in
     a  storage  word  by storage word format.  This listing
     device output is continued through the end of the range
     of  the  TEL operator or through the next appearance of
     the integer zero within its range.

TON  (Turn ON)  When used outside a symbol  definition,  the
     packing  pattern  which  follows the TON operator is to
     apply to all following table entries until  control  is
     transferred  to  the  next  packing pattern encountered
     outside a symbol definition or until canceled by a null
     packing pattern such as MSK.  Packing patterns indicate
     the positions into which items  in  a  table  entry  or
     symbol  definition  are to be assembled by shifting and
     how these are to be inserted (by addition,  subtraction
     or  inclusive ORing).  Selecting a packing pattern with
     the TON operator does not itself generate a table entry
     even  if  the  packing pattern has an initial automatic
     argument unless the statement also contains a constant,
     address  label  or  BIT operator with the current table
     entry as destination.   In  contrast,  local  selection
     (selction  neither  by  the  TON  operator nor by being
     within the range of a packing pattern selected  by  the
     TON operator) of a packing pattern which has an initial
     automatic argument  does  generate  a  table  entry  or
     entries  containing  the automatic argument even if the
     statement contains nothing else.

TRX  (Table RadiX) with decimal integer prefix  or  followed
     immediately  by a constant or parenthetical expression.
TBLTRN:  Language Specification Manual              Page  98
Programmed Operators


     When used outside a symbol definition, the value of the
     decimal integer appearing as prefix or of the following
     constant or parenthetical expression is to be taken  as
     the radix of integers appearing within statements which
     define table entries.  The specified radix must  be  in
     the  range  2  through 16.  Care should be taken if the
     radix is greater than  10  since  some  operator  names
     could  then be interpreted as integers.  The radix used
     within statements which define table entries  is  reset
     to 10 at the start of each table.

     Example:

             10TRX,D=DUP,10D

         specifies that the set of table  entries  assembled
         by  the next statement is to be duplicated as a set
         so as to appear 10 times.  However, under  a  table
         radix  of  16,  the  statement  10D  would  instead
         specify  a  single  table  entry  with  the   value
         1*16*16+0*16+13.

TST  (TeST)  with  decimal  integer   prefix   or   followed
     immediately  by a constant or parenthetical expression.
     This operator is reserved for use in test tables.  When
     used  outside  a  symbol  definition,  the value of the
     decimal integer appearing as prefix or of the following
     constant  or expression is to be taken as the length of
     the upper section of the present table.  The  BLK,  SAV
     or  FIN  operator  at the end of the present table will
     call  subroutine  DACOMP  rather  than  output  a  DATA
     statement.   DACOMP reports any differences between the
     upper and lower sections of the assembled table.

TTL  (TiTLe)  When used outside  a  symbol  definition,  the
     non-blank  characters  of the following text string are
     taken as the name of the array containing the assembled
     table entries in the DATA statements generated as final
     output.  This  text  string  must  be  of  6  or  fewer
     non-blank  characters and must be initiated by the ' or
     '' operator and, following this operator,  be  enclosed
     within   delimiter   characters   which  are  otherwise
     ignored.   The  default  name  used   in   these   DATA
     statements is TBLTRN.

TTY  (TeleTYpe)  When used outside a symbol definition, this
     operator  causes  control  to be switched between input
     file and teletype to allow execution time  modification
     of  assembly  such as the definition of constants which
     are used to select conditional assemblies.   The  input
     file   always   has   control  initially.   Control  is
     transferred back to the input file by  typing  the  TTY
     operator  on  the  teletype.  Additional statements can
TBLTRN:  Language Specification Manual              Page  99
Programmed Operators


     follow the TTY control transfer statement on  the  same
     input  line on either device.  Usually the TTY operator
     is given as a separate statement.  If issued outside  a
     symbol  definition  it  will,  however,  terminate  the
     current statement before causing the control transfer.

     Example: If the user desires  no  interaction  for  the
     first  3  control  transfers  to the teletype, he might
     type either

             TTY,TTY,TTY

         or

             TTY
             TTY
             TTY

WID  (WIDth)  with  decimal  integer  prefix   or   followed
     immediately  by a constant or parenthetical expression.
     When used outside a symbol definition, the value of the
     decimal integer appearing as prefix or of the following
     constant or parenthetical expression is to be taken  as
     the   width   in  characters  of  the  DATA  statements
     generated as output.  The width stated in  this  manner
     cannot be greater than 66.  The leading 6 characters in
     each output line are not included in this count.

WRD  (WoRD) with  decimal   integer   prefix   or   followed
     immediately  by a constant or parenthetical expression.
     The  integer  appearing  as  prefix  or  the  following
     constant  or parenthetical expression specifies the nth
     word  of  a  multiple  precision  table  entry.    This
     operator  can be used before an address label, constant
     or the BIT operator.  Used before an address label, the
     WRD  operator  indicates  that the address label is the
     name of the nth-1 table entry beyond the current  table
     entry  origin.   Before  a  constant,  the WRD operator
     directs that the constant be assembled into  the  nth-1
     table  entry  beyond  the  current  table entry origin.
     Before a BIT operator, the WRD operator specifies  that
     the  bit  selected is to be turned on in the nth-1 word
     following the table  entry  having  the  address  label
     which  follows  the BIT operator.  The WRD operator can
     also appear in the definition of a constant to  specify
     that  the  constant  will  be  assembled into the nth-1
     table entry  beyond  the  table  entry  origin  of  the
     statement in which it is used.

XAD  (eXpunge ADdress)  When   used   outside    a    symbol
     definition,  the  address  definitions,  if any, of all
     symbols (except for the ,  ,,  ,,,  '  ''  ... and  END
     operators  which  cannot  be  given  address  meanings)
TBLTRN:  Language Specification Manual              Page 100
Programmed Operators


     between this operator and the end of the statement,  as
     indicated  by  the  ,  or  END  operators  or  the next
     non-continuation line,  are  removed  from  the  TBLTRN
     symbol  dictionary.   A request for removal of a symbol
     without an address definition is ignored.  Both the NST
     operator  and  symbols  defined  as  text  strings  are
     replaced within the range of the XAD  operator.   If  a
     symbol  is  defined  as  both an address label and as a
     text string, the text string replacement  is  performed
     within  the  range  of the XAD operator rather than the
     address meaning being removed.

XOR  (eXclusive   OR)  The   next   constant   or    address
     encountered  after  this  operator  within  the present
     statement is to be exclusively ORed into  the  constant
     or  table  entry  or  operator  value  being  currently
     defined.  After the exclusive OR  operation,  the  only
     bits which are turned on (set to one) in the item being
     defined are those bits which were originally on  either
     in  the  item  being defined or in the item being XORed
     with the item being defined but not in both.

     Example:

             OCT 27 XOR OCT 72

         assembles a table entry containing octal 55.

XSY  (eXpunge SYmbol)  When   used    outside    a    symbol
     definition,  the non-address definitions of all symbols
     (except for the , ,, ,,, '  ''  ... and  END  operators
     which  cannot be arguments of the XSY operator) between
     this  operator  and  the  end  of  the  statement,   as
     indicated  by  the  ,  or  END  operators  or  the next
     non-continuation line,  are  removed  from  the  TBLTRN
     symbol  dictionary.   A request for removal of a symbol
     without a non-address definition is ignored.   The  NST
     (Numeric  Symbol  Text) operator is replaced within the
     range of the XSY operator by the symbol defined by  the
     NSN  and  NSV  operators,  but  symbols defined as text
     strings are not replaced by these text  strings.   This
     allows  the  removal  of  calculated  (numeric  suffix)
     symbols and of text string symbols (in the latter case,
     without  removing  whatever  symbols might happen to be
     named within the text definition).

     Example:

             NAME='/NSN'+A+/,VALUE=0NSV
             NAME VALUE XSY BIT XSY LFT NAME VALUE NST

         would remove the symbols BIT, XSY, LFT, NAME, VALUE
         and A0 from the symbol dictionary.
TBLTRN:  Language Specification Manual              Page 101
Programmed Operators


                     Symbol Definitions
                     ------ -----------

Symbols not currently in the symbol dictionary  are  defined
in statements having the structure

            PART1 PART2 PART3

in which

    PART1 (optional) is any IF class  operator  followed  by
    the symbol, possibly signed constant or expression to be
    tested.

    PART2 is the symbol being defined followed by either  of
    the  operators  =  or  ==.   With  the  exception of the
    ... ,,, and ,,  operators,  only  a  symbol  defined  as
    either  a  null  text  string or as a deferred insertion
    text string can appear before the symbol being  defined,
    or  between  the  symbol  being  defined and the = or ==
    operators.  The symbol being defined must  currently  be
    defined as a packing pattern or a constant or as only an
    address label or be undefined.  Other  operators  cannot
    be  redefined  unless  first  removed  from  the  symbol
    dictionary by the XSY operator.   Packing  patterns  and
    constants  can  be  redefined  in  terms of their values
    prior to the  present  definition.   If  the  symbol  is
    currently   an   address   label,   this  definition  is
    maintained concurrent to the new definition.

    The operators = and == are equivalent if  the  currently
    selected  input  device is the teletype.  The definition
    always appears to the right of the  =  operator  on  the
    currently  selected  input  device.   If  the  currently
    selected input  device  is  not  the  teletype,  the  ==
    operator  temporarily transfers control to the teletype,
    prompts  the  user  for  the  desired  definition,   and
    transfers control back to the previous input device when
    the definition has been stated in terms  of  other  than
    null text replacement (transparent) operators.  Transfer
    of control between input devices is always made  to  the
    next character in the current line, not to the next line
    so  it  is  possible  (though  not  desirable   due   to
    likelihood  of  user  error)  for several teletype input
    definitions to appear on a single line.

    PART3 (optional if the symbol is to be defined as a null
    text  string  operator  and the == operator has not been
    used while the teletype is the deselected input  device)
    can be any of the following

    1.  Any single currently defined operator except ' ''  ,
        ,,  ,,, ... and END.  A context dependent definition
TBLTRN:  Language Specification Manual              Page 102
Symbol Definitions


        of this operator as an address  label,  if  any,  is
        ignored.   If  this operator is a packing pattern of
        which the first argument is  automatic,  the  symbol
        left  of  the  = or == operator will be defined as a
        constant  having  the  value   of   this   automatic
        argument.   An  operator which has been defined as a
        text string will be replaced  by  that  text  string
        within  the  definition.   The  operator NST will be
        replaced by a symbol constructed  of  the  text  and
        number  suffix previously defined by the NSN and NSV
        operators respectively (TBLTRN0 is the default).

    2.  Any of the operators BIT BPR BSZ CLM DEF DIA DID DIE
        DIG  DIGE DIL DILE DIN DINA DINO DIO DIU DUP FIL INC
        JST LFT LMT NSV PFX PSH RED RIT SFT SIZ SRX STK  TRX
        TST  WID  or  WRD  with  a decimal integer prefix or
        followed immediately by a constant or  parenthetical
        expression.   The  following  definitions  are legal
        (assuming that the symbol I8 has been defined as the
        number 8 as in the statement I8=DEC 8).

            BASE8=SIZ I8
            BASE64=64SIZ
            BASE64=SIZ 64
            BASE64=SIZ(56+8)
            BASE64=SIZ(56+I8)
            BASE64=SIZ(I8+56)
            BASE64=SIZ OCT 100
            BASE64=SIZ 8SRX 100
            BASE64=SIZ(OCT 70+I8)
            BASE64=SIZ(I8+OCT 70)
            BASE64=SIZ+(I8 OCT 70)
            BASE64=SIZ+(I8 I8 I8 I8 I8 I8 I8 I8)

        As is similarly the case for statements which define
        table   entries,   it   is   not  necessary  that  a
        parenthetical expression be terminated  by  a  right
        parenthesis   if  nothing  else  appears  after  the
        expression in the statement.  (Note, however, that a
        final  null  automatic argument of a packing pattern
        cannot be defined  merely  by  the  use  of  a  left
        parenthesis following the ARG operator.)

    3.  Any previously defined packing pattern of which  the
        first   argument,   if   any,   is   not  automatic.
        Definition in terms of a packing pattern  having  an
        initial  argument  which  is  automatic is ambiguous
        since any definition, which would assemble  a  table
        entry or entries if not within the range of the = or
        ==  operators,  is  taken  as  a  definition  of   a
        constant.
TBLTRN:  Language Specification Manual              Page 103
Symbol Definitions


    4.  Any previously defined packing pattern  followed  by
        any  sequence of previously defined packing patterns
        and/or new packing pattern definitions consisting of
        argument   packing   specifications   and/or  origin
        increment  specifications.   Anywhere   within   the
        definition,  use  of  a  previously  defined packing
        pattern  having  an  initial   argument   which   is
        automatic  will  change the definition to definition
        of a constant.  The new packing pattern  definitions
        can consist of any of the following.

        A.  The operators SIZ and SRX with  decimal  integer
            prefix  or followed immediately by a constant or
            parenthetical expression.  When  used  within  a
            symbol  definition,  these  operators modify the
            byte  size  and  radix  respectively   for   the
            remainder of the defintion.

        B.  The  . (single   period)   operator   optionally
            preceded   by  the  WRD  operator  with  decimal
            integer  prefix   or   by   the   WRD   operator
            immediately    followed   by   a   constant   or
            parenthetical expression.  This  indicates  that
            the table entry origin of the statement in which
            the packing pattern is used is to be incremented
            by  one  table entry if the WRD operator was not
            used, or by the number of entries  specified  by
            the  WRD  operator.  This increment is performed
            only if there remains  yet  unprocessed  in  the
            statement,   before  the  selection  of  another
            packing pattern if  any,  an  address  label  or
            constant  or  BIT  operator with the destination
            being a table entry  already  assembled  by  the
            current statement.

        C.  Directions for assembly of an  argument  of  the
            packing pattern being defined.  These directions
            consist of the required symbol ARG  preceded  in
            any  order by optional specification of word and
            byte into which  and  of  sign  with  which  the
            argument  is to be assembled.  The optional word
            count is specified  by  the  WRD  operator  with
            decimal  integer  prefix or followed immediately
            by a constant or parenthetical expression.   The
            optional  byte specification is specified by the
            shift operator LFT or RIT with  decimal  integer
            prefix  or followed immediately by a constant or
            parenthetical expression.  The optional sign  is
            specifed  by one of the operators + - XOR IOR or
            AND.  The default word count and byte  are  1WRD
            and  0LFT  or  0RIT.  The default sign is IOR if
            the byte size at the time of the definition is 2
            raised to some power, otherwise the default sign
TBLTRN:  Language Specification Manual              Page 104
Symbol Definitions


            is +.

        D.  Definition  of  an  automatic  argument  of  the
            packing pattern.  The value of such an automatic
            argument  is   specified   following   the   ARG
            operator.    When   the  packing  pattern  being
            defined  is  used,  the  value  of  the  present
            argument  will  be  taken from the definition of
            the  packing  pattern  rather  than   from   the
            statement  in which the packing pattern is used.
            The value  of  the  automatic  argument  can  be
            specified  either  by  an  integer  or  a symbol
            defined   as   a   constant.     Radix    change
            specification  can  be  used  prior  to  the ARG
            operator, or after the ARG operator prior to the
            integer.   The  symbol defined as a constant can
            be multiple entry.  If the value must be defined
            as  more  than a single integer or constant, the
            group  of  integers  and/or  constants  must  be
            enclosed  within  parentheses.   If  the sign is
            changed within these parentheses, it is restored
            to   its  original  value  after  the  following
            integer or constant.  Word count and Byte cannot
            be altered from the value specified prior to the
            ARG operator.

        The null packing  pattern  MSK  must  be  the  first
        non-null operator appearing in the definition of the
        first packing pattern  defined  by  the  user.   The
        following definitions are legal.

            PATTERN1=MSK 64SIZ ARG 1LFT ARG 2LFT ARG
            PATTERN2=MSK 64SIZ 3LFT ARG 4LFT ARG 5LFT ARG
            PATTERN3=PATTERN1 PATTERN2

        PATTERN3 is defined by the above statements to be  a
        packing   pattern   which  directs  that  its  first
        argument be inclusive ORed (the default if  base  of
        the  byte  size  is 2) and right justified, that its
        second  argument  be  inclusive  ORed  after   being
        shifted  left 6 bits, similarly on through the sixth
        argument which is inclusive ORed after being shifted
        left 30 bits.

        If instead, the first 3 arguments were to  be  added
        and  the second 3 arguments were to be subtracted, a
        possible definition would be

            PATTERN3=MSK 64SIZ+ARG+1LFT ARG+2LFT ARG-3LFT
             ARG-4LFT ARG-5LFT ARG

        The  byte  size  in  effect  at  the  start  of  any
        definition  is  the last byte size which was defined
TBLTRN:  Language Specification Manual              Page 105
Symbol Definitions


        by a SIZ operator outside a symbol definition.   The
        default  value of the byte size at the start of each
        table is 2.  The specification of the packing of  an
        argument  of  the  packing  pattern being defined is
        complete only when the ARG operator has been  given.
        Therefore,  PATTERN4 would be a null packing pattern
        identical to MSK if defined as follows.

            PATTERN4=MSK+2LFT 5WRD

    5.  The definition of a constant formed from any of  the
        following   parts   in  any  meaningful  order.   In
        general, the definition of a  constant  follows  the
        same rules as the definition of table entries.

        A.  The operators SIZ and SRX with  decimal  integer
            prefix  or followed immediately by a constant or
            parenthetical expression.  When  used  within  a
            symbol  definition,  these  operators modify the
            byte  size  and  radix  respectively   for   the
            remainder of the definition.

        B.  The name of a packing  pattern  which  specifies
            how  the  following  constant  phrases are to be
            packed to  form  the  constant  currently  being
            defined.

        C.  A constant phrase constructed according  to  the
            rules  listed  in  the next section, except that
            address  labels  cannot  be  used.    A   symbol
            previously   defined   as   a  constant  can  be
            redefined in terms of its former value.

        The statements

            ABC=3WRD 15
            GHI=3
            GHI=WRD GHI 15
            JKL=ABC
            MNO=3WRD OCT 17
            PQR=8SRX 3WRD 17

        define the symbols ABC, GHI, JKL,  MNO  and  PQR  as
        constants  with  the value decimal 15 which would be
        deposited into the 2nd table entry beyond the  table
        entry  origin  of  the  statement  in which they are
        used.

            ABC=MSK 2WRD ARG 3WRD ARG 4WRD ARG 5WRD ARG
            ABC=ABC 11 22 33 44
            GHI=2WRD 11 3WRD 22 4WRD 33 5WRD 44
            JKL=MSK 3WRD ARG 5WRD ARG 2WRD ARG
            JKL=4WRD 33 JKL 22 44 11
TBLTRN:  Language Specification Manual              Page 106
Symbol Definitions


            MNO=3WRD 33 2WRD 22
            MNO=5WRD 44 2WRD 11 2WRD MNO
            PQR=ABC

        The above statements define the  symbols  ABC,  GHI,
        JKL, MNO and PQR as constants each having the set of
        values decimal 11 which would be deposited into  the
        1st table entry, decimal 22 which would be deposited
        into the 2nd table entry, decimal 33 which would  be
        deposited  into  the  3rd table entry and decimal 44
        which would be deposited into the  4th  table  entry
        beyond  the  table  entry origin of the statement in
        which they are used.

            PATTERN=MSK 10SIZ 1LFT ARG ARG
            I1=1,I2=I1+I1,I3=1+I2
            ABC=2LFT 10SIZ I1 1LFT I2 I3
            GHI=PATTERN I2 I3 10SIZ 2LFT I1
            JKL=10SIZ 2LFT I1 PATTERN(I1+I1)(I1+I1+I1)
            MNO=PATTERN OCT 14 I3
            PQR=8SRX PATTERN 14 I3

        The above statements define the  symbols  ABC,  GHI,
        JKL, MNO and PQR as constants with the value decimal
        123 which would be deposited into  the  table  entry
        origin of the statement in which they are used.  The
        WRD operator (with  integer  prefix  or  immediately
        following   constant  or  parenthetical  expression)
        could have been used within the  definition  of  the
        packing  pattern, or prior to the constants not used
        as packing pattern arguments, to alter  the  offset,
        from  the  table entry origin, of the table entry or
        entries into which the constant being defined  would
        be assembled.

    6.  Any text string following the ' or '' operators  and
        delimited  at  both  ends by any delimiter character
        which is otherwise ignored.  The end of the  current
        line  is  taken as the end of the text string if the
        second appearance of the delimiter character is  not
        found.  After the definition has been completed, the
        symbol will be replaced by the text string  wherever
        encountered except within the range of the TEL, XSY,
        or unfulfilled IF or  Do-If  class  operators.   Any
        symbols in the text string following the '' operator
        which are not  within  the  original  TBLTRN  symbol
        dictionary,  and  all  symbols appearing in the text
        string following the ' operator, must  have  meaning
        when  the  text  replacement  is  made regardless of
        their meaning at the time the definition as the text
        string  is  made.   Each  letter  of the text string
        requires  a  word  of  storage  space.   Except  for
        symbols  which  are  to be identical to a previously
TBLTRN:  Language Specification Manual              Page 107
Symbol Definitions


        defined single packing pattern  or  single  multiple
        entry  constant,  definition as a text string should
        not be used if the definition can be made directly.

        The text string can be preceded in the definition by
        an argument count constructed according to the rules
        for the definition of a constant.  If the  value  of
        this  constant is zero or positive, the text will be
        inserted after the interpretation of  the  specified
        number  of  symbols  within  the  present  statement
        rather  than  immediately.   Another  deferred  text
        replacement symbol cannot appear within the range of
        the first.  The symbol count does not include  other
        text  replacement  symbols  directing immediate text
        insertion but instead  those  none-text  replacement
        symbols  within the inserted text, and likewise does
        not  include  symbols  within  the  range   of   any
        unfulfilled  Do-If class operator.  The insertion is
        not performed if the specified number of symbols  is
        not  encountered  prior  to  the  end of the current
        statement.

        Example:

            ADD=1'/+/
            SUM=ADD 1 2

        or

            ADD=2'/+/
             SUM ADD=1 2

        would define SUM as the sum of 1 and 2.

        The text insertion can also be deferred until  prior
        to a desired number of statement breaks specified by
        negative  value  of  a  constant  or   parenthetical
        expression   preceding   the   text  string  in  the
        definition.  The text insertion would then  continue
        the  statement  at  the end of which it is inserted.
        The statement  count  does  not  include  statements
        within   the   range  of  an  unfulfilled  IF  class
        operator.

        Example:

            ADD=-1'/+2/
            ADD SUM=1,

        or
            ADD=-2'/+2/
            ADD DIF=1-2,SUM=1,
TBLTRN:  Language Specification Manual              Page 108
Symbol Definitions


        or
            ADD=-2'/+2/
            ADD DIF=1-2
            SUM=1
            ZERO=0

        would define SUM as the sum of 1 and 2.

        Additional  text   strings   can   follow   in   the
        definition,  each  optionally  preceded  by  its own
        symbol or statement count.  When  the  symbol  being
        defined  is  later  encountered, the count of either
        symbol or statement arguments for a particular  text
        insertion  is  not begun until all of the previously
        inserted  text  has  been   interpreted,   and   any
        statement  closures  within that previously inserted
        text do  not  affect  the  argument  count  for  the
        following insertion.

        The text string  following  a  zero  argument  count
        effectively   continues  the  previous  text  string
        although this following text string is not  inserted
        into the input text buffer until the previous string
        has been completely interpreted.  This can  be  used
        to  input  a  composite  text  string which would be
        longer than a single input line.  Negative and  zero
        argument counts can be mixed in any order.  However,
        since a symbol count must be  satisfied  within  the
        current  statement  in order that the following text
        be inserted, an argument count which is greater than
        zero   can  never  be  satisfied  if  any  preceding
        argument count of the same user defined function  is
        negative.

        The  statement  count  for  a   deferred   insertion
        includes the end of the current statement even if an
        insertion has already  been  made  at  this  end  of
        statement.   For  example,  the  values  4, 8 and 12
        would be assembled by either of the following  lines
        of statements.

            A=-1'/+1/0'/+1/-2'/+5/,A 2,3,12

        or

            A=-1'/+1/-1'/+1/-2'/+5/,A 2,3,12

    7.  A single period operator followed by either the ' or
        ''  operators  and a text string containing the name
        of 1 symbol between delimiter  characters.   If  the
        text  string  is introduced by the single apostrophe
        operator, the current  non-address  meaning  of  the
        symbol  in the text string is assigned to the symbol
TBLTRN:  Language Specification Manual              Page 109
Symbol Definitions


        being defined, and the previous name is removed from
        the  symbol  dictionary.   If  the  text  string  is
        instead  introduced   by   the   double   apostrophe
        operator,  the  symbol being defined is assigned the
        original (default dictionary) meaning of the  symbol
        (possibly  with  decimal integer prefix) in the text
        string without changing the current meaning, if any,
        of  this  symbol  in  the text string.  Only the NEG
        operator  cannot  be   copied   from   the   default
        dictionary in this latter fashion.



                  Table Entry Definitions
                  ----- ----- -----------

Table  entries  are  assembled  by  statements  having   the
structure

            PART1 PART2 PART3

in which

    PART1 (optional) is any IF class  operator  followed  by
    the symbol, possibly signed constant or expression to be
    tested.

    PART2 (optional) includes any of the following items  in
    (except  for  address  labels not preceded by one of the
    operators ADR, LOA or HIA) any sequence.

    1.  An address label phrase consisting of the following

        A.  Optional word count consisting of  the  operator
            WRD   either  with  decimal  integer  prefix  or
            followed   immediately   by   a   constant    or
            parenthetical expression.

        B.  One of the operators ADR,  LOA,  or  HIA.   This
            specifies  that  the  address  label  is  of the
            current table entry origin,  or  of  the  lowest
            table  entry assembled by the current statement,
            or of the highest table entry assembled  by  the
            current  statement  respectively.   If  the  WRD
            operator has preceded this operator, this origin
            is  offset  by  one less than the specified word
            count.  The use of the ADR operator is  optional
            if  the  symbol to be taken as the address label
            is not currently defined as  an  operator  other
            than an address label, and if no constant phrase
            (as defined below) has been assembled since  the
            last  table  entry  origin increment.  The table
            entry origin is initially the first table  entry
TBLTRN:  Language Specification Manual              Page 110
Table Entry Definitions


            assembled   by  the  present  statement  and  is
            incremented for each period in the definition of
            the  packing  pattern  in  use, if any.  Address
            label phrases without ADR, LOA or HIA operators,
            can appear before the initial constant phrase in
            the statement or  before  the  initial  constant
            phrase  following a shift in origin specified by
            a packing pattern.

        C.  The symbol to be taken as the address label.  If
            not  preceded  by the ADR, LOA or HIA operators,
            this symbol must currently not  be  an  operator
            other than an address label.

    2.  A constant phrase consisting of the following

        A.  In any order, optional sign  (+  -  XOR  IOR  or
            AND),  optional  shift  (LFT or RIT with decimal
            integer  prefix  or  followed   immediately   by
            constant  or  parenthetical  expression)  and/or
            optional word count (WRD  with  decimal  integer
            prefix  or followed immediately by a constant or
            parenthetical expression).  Default sign is  IOR
            if the base of the byte size (shift unit defined
            by SIZ operator outside a symbol definition)  is
            2,  and  is  +  otherwise.   Default shift is no
            shift.  Default word count is one.

            Shift and word count should not be specified  if
            the  constant  to which these would apply is the
            argument of (within  the  range  of)  a  packing
            pattern.

        B.  Enclosed in  optional  parentheses  which  would
            indicate uniform sign, uniform shift and uniform
            word  count,  can  appear  any  combination   of
            integers with or without the preceding operators
            OCT, DEC or TRX (the latter with decimal integer
            prefix  or a following constant or parenthetical
            expression),  symbols  defined   as   constants,
            address labels preceded by the LOC operator, the
            operator NUL (which might be considered to be  a
            constant   with  the  value  zero),  and/or  the
            . (single period) operator  with  or  without  a
            preceding  LOC operator.  If within parentheses,
            the sign can be temporarily reset for  the  next
            appearing  constant  (integer, symbol or address
            label) only.

            The phrase

                5WRD+2LFT ABC
TBLTRN:  Language Specification Manual              Page 111
Table Entry Definitions


            Adds the value of the constant named ABC to  the
            5th  table entry presently being assembled (that
            is, the 4th table entry beyond the current table
            entry origin) after shifting it left 2 bytes.

                +2LFT 3WRD.

            or
                +2LFT 3WRD LOC.

            adds  the  address  of  the  3rd   table   entry
            presently  being  assembled  (the 2nd beyond the
            current table entry origin) to that table  entry
            after  shifting  the  address left 2 bytes.  The
            address  of  a  table  entry  is  its   position
            (subscript)  ralative to the start of the table.
            The 1st table entry assembled has the address 1.

                +4WRD 1LFT(LOC ADRS 3)

            adds the sum of the address of the  table  entry
            named   ADRS  and  3  to  the  4th  table  entry
            presently being assembled (the  3rd  beyond  the
            current  table entry origin) after shifting each
            of these left 1 byte.

    3.  A bit phrase consisting of the following

        A.  Optional word count.

        B.  The operator BIT  with  either  decimal  integer
            prefix  or followed immediately by a constant or
            parenthetical expression.

        C.  The label of the table  entry  which  is  to  be
            taken as having a word count of unity.

            The phrase

                3WRD 6BIT ADRS

            turns on the 6th bit (numbering system depending
            on the precision set by the BPR operator) in the
            2nd table entry after the table entry having the
            address label ADRS.

                2WRD 5BIT.

            turns on the 5th bit  in  the  2nd  table  entry
            presently being assembled (the next entry beyond
            the current table entry origin).
TBLTRN:  Language Specification Manual              Page 112
Table Entry Definitions


        Bit phrases can appear within the range of a packing
        pattern  or  within  the  parentheses  in a constant
        phrase.  In either case, the sign,  shift  and  word
        count  are regenerated after the bit phrase has been
        processed.  Otherwise, default sign, shift and  word
        count   are  assumed  immediately  following  a  bit
        phrase.

    A table entry or entries will be assembled if, and  only
    if,  the statement includes an address label phrase or a
    constant phrase or a bit  phrase  with  the  destination
    indicated  by the . (period) operator or if it includes,
    not selected by the TON operator, a packing pattern with
    an initial automatic argument.

    4.  The name of a packing pattern which is to apply only
        to the present statement.

    5.  The operator TON followed by the name of  a  packing
        pattern if this pattern is to apply to the following
        table  entry  definitions  until  changed   by   the
        appearance  of  another  packing  pattern  or  until
        terminated by  the  appearance  of  a  null  packing
        pattern  such  as MSK.  It should be noted that if a
        packing pattern is in effect, but a particular table
        entry  contains  more constants than the pattern has
        arguments, the extra (right)  constants  are  packed
        with  whatever  byte  size  was last set outside the
        range of the pattern (either right of the  pattern's
        arguments   or  before  the  pattern  was  put  into
        effect).

    6.  The operator DUP with either decimal integer  prefix
        or   followed   immediately   by   a   constant   or
        parenthetical   expression.    The   table   entries
        assembled   by   the   present   statement  will  be
        duplicated as a set after the end of  the  statement
        has  been  read  to produce the total number of sets
        specified by the prefix or constant or parenthetical
        expression.   Likewise,  later bit deposits into the
        range  of  the  DUP  operator  will  apply  to   the
        referenced table entry in each set.

    7.  The operator SIZ with either decimal integer  prefix
        or   followed   immediately   by   a   constant   or
        parenthetical expression.   The  byte  size  of  the
        shift  operators  LFT  and  RIT  is specified by the
        prefix of the SIZ operator or  by  the  constant  or
        parenthetical   expression  which  follows  the  SIZ
        operator.

    8.  The operator TRX with either decimal integer  prefix
        or   followed   immediately   by   a   constant   or
TBLTRN:  Language Specification Manual              Page 113
Table Entry Definitions


        parenthetical expression.  The default  radix  under
        which   integers  are  interpreted  in  table  entry
        statements is specified by the prefix  or  following
        constant or parenthetical expression.

    9.  The operator BPR with either decimal integer  prefix
        or   followed   immediately   by   a   constant   or
        parenthetical expression.  The number  of  bits  per
        table   entry,   and   their  numbering  scheme,  as
        referenced by a bit phrase is specifed by the prefix
        or following constant or parenthetical expression.

    10. Any other operator in proper context except = == ARG
        BLK FIN SAV TTY XSY XAD TEL or IF class operator.

    PART3 (optional) is any one of the following items.

    1.  One of the operators BLK, FIN, SAV or TTY.

    2.  One of the  operators  XAD  XSY  or  TEL  wich  have
        argument  lists  which  extend  to  the  end  of the
        present statement.
TBLTRN:  Principles of Operation Manual             Page 114
Input Text String Buffer Structure


             Input Text String Buffer Structure
             ----- ---- ------ ------ ---------

Each line of input text is read into the first 80  locations
of  a  buffer  array called LETTER using a 80A1 format.  The
line is scanned from right to left to determine the terminal
(right) non-blank character and its position within the line
is stored as the pointer ILTR.  As the  text  is  processed,
the  buffer  array  can  expand  or contract as user defined
functions insert additional text and  discard  that  already
processed.  As a simple example, let us take the text

        A=-1'/,B 2/,LMT-100
        B=-1'/,C 3
        C=-1'/,  4
        A 1
        5

The fourth line in this  example  assembles  a  table  entry
containing the value 1, and directs that the text

        ,B 2

be inserted at  the  end  of  the  current  statement.   The
current  statement  is  not  terminated  by  the end of line
following the character 1, but rather by  the  lack  of  the
continuation  operator  ,, before the character 5 within the
following line.  Therefore, the new  text  is  inserted  not
after  the  character  1  but is instead inserted before the
character 5.  The input buffer LETTER then contains the text

        ,B 25

An additional pointer is necessary  to  record  the  end  of
statement  condition  existing  after the character 2.  This
pointer, MLTR, points to the right-hand character within the
present  statement if an end-of-statement insertion has been
made.  Otherwise, MLTR and ILTR are identical.  Assembly  of
the  current  statement  is  continued through the character
numbered MLTR unless a  statement  termination  operator  is
encountered  prior  to  this.   A  text  replacement or text
insertion operation clears all processed text from the input
buffer,  left  justifies the inserted text within the buffer
followed by the remaining unprocessed  text,  and  redefines
MLTR and ILTR to correspond to the altered buffer size.

If desired, a record of all text insertion  and  replacement
operations  will  be  written into the listing file.  Such a
record  is  usually  necessary  when  complex  user  defined
functions  are  being  tested.   To  guard  against infinite
replacement loops, the maximum number of  text  replacements
which  can  be  performed  for  a  single  input line is the
absolute value of ILOOP.  The number  of  text  replacements
TBLTRN:  Principles of Operation Manual             Page 115
Input Text String Buffer Structure


actually performed within the line is stored as LOOP.  ILOOP
can be set by the source table using the LMT operator.   The
replacement  summary  is  generated if ILOOP is negative.  A
complete replacement summary for the above example would  be
as follows.

        LINE       4 INSERTION     1
          2 OLD TEXT A 
          1 NEW TEXT 1
           (UNTIL  0 LETTERS THEN  1 STATEMENTS)
          4 DEFERRED ,B 2
          
        LINE       5 INSERTION     1
            FUNCTION A
          4 NEW TEXT ,B 2
          1 NEW TEXT 5
          
        LINE       5 INSERTION     2
          2 OLD TEXT ,B
          1 NEW TEXT 2
           (UNTIL  0 LETTERS THEN  1 STATEMENTS)
          4 DEFERRED ,C 3
          1 NEW TEXT 5
          
        LINE       5 INSERTION     3
          1 OLD TEXT 2
            FUNCTION B
          4 NEW TEXT ,C 3
          1 NEW TEXT 5
          
        LINE       5 INSERTION     4
          2 OLD TEXT ,C
          1 NEW TEXT 3
           (UNTIL  0 LETTERS THEN  1 STATEMENTS)
          4 DEFERRED ,  4
          1 NEW TEXT 5
          
        LINE       5 INSERTION     5
          1 OLD TEXT 3
            FUNCTION C
          4 NEW TEXT ,  4
          1 NEW TEXT 5

In the above summary, the columns from left to right are the
number of characters in the portion of the text string being
listed,  the  classification  of  that  portion,   and   the
characters  themselves.   The  listing of text is split onto
separate lines wherever a statement break has been, or is to
be  forced at the end of inserted text.  The classifications
"OLD  TEXT"  and  "NEW  TEXT"  refer  respectively  to   the
processed  text being discarded, and to the unprocessed text
including that inserted.  A symbol which is responsible  for
the  deferred insertion of a text string is listed under the
TBLTRN:  Principles of Operation Manual             Page 116
Input Text String Buffer Structure


classification "FUNCTION."

The LETTER array is dimensioned at 160, double the length of
the  text  read,  to allow some expansion of the unprocessed
text buffer due to text replacement.  Excess characters  are
discarded  after  informing  the  user  at most once of this
action.  A number of error  messages  are  treated  in  this
manner.   These  messages are generated and JERR is assigned
as value the current line  number  only  if  JERR  does  not
already  have  this  as  its  value.   If a text replacement
summary is being generated,  the  discarded  characters  are
listed within the classification "OVERFLOW."

The current value of MLTR must be stored and MLTR  redefined
when  the inserted text specifies that additional text is to
be inserted at the end  of  a  statement  and  this  end  of
statement  occurs  prior  to  MLTR.  For example, the simple
test table

        ...TEXT REPLACEMENT TEST TABLE
        LMT-100 TTL'/92/TST 18
        A=    1'/, 2,/-1'/B  4  6,16,17
        B='/,/1'/, 5,/-1'/C  7  9,15
        C='/,/1'/, 8,/-1'/D 10 12
        D='/,/1'/,11,/-1'/E 13
        E='/,/1'/,14 /
        A 1 3,18
         1, 2, 3, 4, 5, 6, 7, 8, 9,10
        11,12,13,14,15,16,17,18 BLK

would, during its processing, cause the  input  text  buffer
array LETTER to contain unprocessed portions of several text
insertions.  The  following  replacement  summary  would  be
generated during the processing of this table.

        LINE       8 INSERTION     1
          2 OLD TEXT A 
          6 NEW TEXT 1 3,18
           (UNTIL  0 LETTERS THEN  1 SYMBOLS)
          4 DEFERRED , 2,
          
        LINE       8 INSERTION     2
          1 OLD TEXT 1
            FUNCTION A
          8 NEW TEXT , 2,3,18
           (UNTIL  4 LETTERS THEN  1 STATEMENTS)
         13 DEFERRED B  4  6,16,17
          
        LINE       8 INSERTION     3
          6 OLD TEXT , 2,3,
            FUNCTION A
         13 NEW TEXT B  4  6,16,17
          2 NEW TEXT 18
TBLTRN:  Principles of Operation Manual             Page 117
Input Text String Buffer Structure


          
        LINE       8 INSERTION     4
          1 OLD TEXT B
         11 NEW TEXT ,4  6,16,17
           (UNTIL  1 LETTERS THEN  1 SYMBOLS)
          4 DEFERRED , 5,
          2 NEW TEXT 18
          
        LINE       8 INSERTION     5
          2 OLD TEXT ,4
            FUNCTION B
         11 NEW TEXT , 5,6,16,17
           (UNTIL  4 LETTERS THEN  1 STATEMENTS)
         10 DEFERRED C  7  9,15
          2 NEW TEXT 18
          
        LINE       8 INSERTION     6
          6 OLD TEXT , 5,6,
            FUNCTION B
         10 NEW TEXT C  7  9,15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION     7
          1 OLD TEXT C
          8 NEW TEXT ,7  9,15
           (UNTIL  1 LETTERS THEN  1 SYMBOLS)
          4 DEFERRED , 8,
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION     8
          2 OLD TEXT ,7
            FUNCTION C
          8 NEW TEXT , 8,9,15
           (UNTIL  4 LETTERS THEN  1 STATEMENTS)
          7 DEFERRED D 10 12
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION     9
          6 OLD TEXT , 8,9,
            FUNCTION C
          7 NEW TEXT D 10 12
          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION    10
          1 OLD TEXT D
          6 NEW TEXT ,10 12
           (UNTIL  1 LETTERS THEN  1 SYMBOLS)
          4 DEFERRED ,11,
TBLTRN:  Principles of Operation Manual             Page 118
Input Text String Buffer Structure


          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION    11
          3 OLD TEXT ,10
            FUNCTION D
          6 NEW TEXT ,11,12
           (UNTIL  4 LETTERS THEN  1 STATEMENTS)
          4 DEFERRED E 13
          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION    12
          6 OLD TEXT ,11,12
            FUNCTION D
          4 NEW TEXT E 13
          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION    13
          1 OLD TEXT E
          3 NEW TEXT ,13
           (UNTIL  1 LETTERS THEN  1 SYMBOLS)
          4 DEFERRED ,14 
          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18
          
        LINE       8 INSERTION    14
          3 OLD TEXT ,13
            FUNCTION E
          4 NEW TEXT ,14 
          2 NEW TEXT 15
          5 NEW TEXT 16,17
          2 NEW TEXT 18

Each  end-of-statement  insertion  places  into  the  LETTER
array,  between  the  newly  inserted text and the remaining
unprocessed  text,  one  plus  the  number   of   characters
remaining  unprocessed  through  the  end  of  the  line, or
through the end of the previous  end-of-statement  insertion
if  any.   The  LETTER  array  can,  therefore, contain both
numeric and alphabetic information.  The  minimum  value  of
MLTR  during  the  lifetime  of  the  current  LETTER  array
contents is stored as  NLTR,  and  is  used  to  split  into
separate  lines  under  the "OLD TEXT" classification in the
replacement summary any text containing  a  statement  break
which  was forced at the end of inserted text.  The contents
of the LETTER array together with the  values  of  MLTR  and
ILTR  during  the processing of the above example are listed
TBLTRN:  Principles of Operation Manual             Page 119
Input Text String Buffer Structure


below.

        MLTR  ILTR  LETTER array (pointers starred below)

          8     8   A 1 3,18

          6     6   1 3,18
                          
          8     8   , 2,3,18
                            
         13    16   B  4  6,16,17318
                                 *  
         11    14   ,4  6,16,17318
                               *  
         11    14   , 5,6,16,17318
                               *  
         10    19   C  7  9,15616,17318
                              *     *  
          8    17   ,7  9,15616,17318
                            *     *  
          8    17   , 8,9,15616,17318
                            *     *  
          7    19   D 10 12315616,17318
                           *  *     *  
          6    18   ,10 12315616,17318
                          *  *     *  
          6    18   ,11,12315616,17318
                          *  *     *  
          4    16   E 13315616,17318
                        *  *     *  
          3    15   ,13315616,17318
                       *  *     *  
          4    16   ,14 315616,17318
                        *  *     *  
          7    16   ,14 315616,17318
                        *  *     *  
         13    16   ,14 315616,17318
                        *  *     *  
         16    16   ,14 315616,17318
                        *  *     *  
         
Actually, duplicate sets of  input  buffers  and  associated
pointers  are  necessary,  one  each  for  the  selected and
deselected input devices.  When either the TTY  operator  or
the  ==  operator  switches  these  devices, the unprocessed
portion of the LETTER array is swapped with the contents  of
the  LTTR  array,  and  the corresponding adjusted values of
MLTR and ILTR are swapped with JLTR and  KLTR  respectively.
The  line  number  ILINE, error message switch JERR and text
replacement and insersion count LOOP are also  swapped  with
KLINE, KERR and JLOOP respectively.
TBLTRN:  Principles of Operation Manual             Page 120
Input Text String Buffer Structure


In all of the above  examples,  the  end  of  statement  was
indicated  either  by  an end of line or by the single comma
operator.  When, instead, the end of statement is  indicated
by  the  END  operator  and  text  must  be  inserted before
terminating the  current  statement,  the  END  operator  is
discarded and the count inserted at MLTR+1 is made negative.
The END operator must be marked rather than  be  immediately
executed  since  it might actually terminate the range of an
IF class operator still within the text  not  yet  inserted.
For  example,  the  following  text would assemble the table
entries 1 and 3.

        LMT=100,A=0
        B=-1'/,IFN A 2
        IFE A B 1 END 3 END

The above example would generate the  following  replacement
summary.

        LINE       3 INSERTION     1
          7 OLD TEXT IFE A B
         11 NEW TEXT 1 END 3 END
           (UNTIL  0 LETTERS THEN  1 STATEMENTS)
          8 DEFERRED ,IFN A 2
          
        LINE       3 INSERTION     2
          5 OLD TEXT 1 END
            FUNCTION B
          8 NEW TEXT ,IFN A 2
           (RANGE OF IF CLASS OPERATOR ENDS)
          5 NEW TEXT 3 END

The contents of the LETTER array during  the  processing  of
the  above example would be as follows.  (Although requiring
2 characters to list, the pointer containing -6 is a  single
word.)

        MLTR  ILTR  LETTER array (pointers starred below)
          
         19    19   IFE A B 1 END 3 END
          
         11    11   1 END 3 END
          
          8    14   ,IFN A 2-63 END
                            **
         14    14   ,IFN A 2-63 END
                            **




TBLTRN:  Principles of Operation Manual             Page 121
Symbol Selection from Text Buffer


             Symbol Selection from Text Buffer
             ------ --------- ---- ---- ------

The routine TBLNXT is responsible  for  selecting  the  next
symbol  from  the text buffer.  As input it accepts the text
buffer LETTER, a  pointer  IRIGHT  to  the  right  character
already  processed, and a pointer MLTR to the furthest right
character which could possibly be in the  next  symbol.   It
returns  KIND with the character class, ILEFT with a pointer
to the left character  within  the  symbol,  IRIGHT  with  a
pointer  to  the  right  character within the symbol, NUMBER
with the value of a integer if any under the current  radix,
and ITEN with the value of a decimal integer prefix if any.

A symbol consists  of  contiguous  characters  of  a  single
character  class  and  is delimited by a change in character
class.  The contents of the various  character  classes  are
alterable  by  the ACC operator.  The IPNCTN array serves as
the template for the establishment of character  classes  at
the  beginning  of  processing of each source table.  IPNCTN
contains  the  characters  blank,  dollar  sign,   asterisk,
period,  comma,  apostrophe,  minus  sign,  plus sign, equal
sign,  left  parenthesis  and  right   parenthesis.    These
characters are copied into the JPNCTN array and, to identify
the intial character classes, the numbers 5 through  15  are
stored  in  the  KPNCTN  array.   The  latter  2  arrays are
dimensioned at 50 each to allow for  expansion  by  the  ACC
operator.

Character classes 1 through 4 are  subclasses  reserved  for
the  large  group  of  unassigned  characters.  Selection of
these subclasses is  dependent  upon  the  possible  initial
appearance of numerals within the symbol.

Class 1 is for a symbol formed entirely of characters  which
        are  within the small set of 10 numerals 0 through 9
        with at least one character being a numeral which is
        equal  or  greater  than the current radix.  Symbols
        within this class are integers which contain a radix
        violation and are considered to be non-fatal errors.

Class 2 is for a symbol formed entirely of characters  which
        are within the large set of 16 numerals (0 through 9
        and A through F) and which are less than the current
        radix.   Symbols  within this class are integers and
        do  not  require  symbol  dictionary  reference  for
        interpretation.

Class 3 is for a symbol beginning with one of the numerals 0
        through  9  and  containing  at  least one character
        which is not one of the numerals  0  through  9  and
        which,  if  within  the  large set of 16 numerals (0
        through 9 and A through F), is equal or greater than
TBLTRN:  Principles of Operation Manual             Page 122
Symbol Selection from Text Buffer


        the current radix.  Symbols within this class bear a
        decimal integer prefix.  The symbol with prefix will
        be tested for presence in the symbol dictionary.  If
        the symbol with prefix is not  present,  the  symbol
        without prefix is similarly tested.  The symbol with
        prefix will be added to the symbol  dictionary  only
        if  the  symbol is not already present in the symbol
        dictionary either with or without prefix.

Class 4 is for a  symbol  not  beginning  with  one  of  the
        numerals  0  through  9  but containing at least one
        character which is not one of the numerals 0 through
        9  and which, if within the large set of 16 numerals
        (0 through 9 and A through F), is equal  or  greater
        than  the  current  radix.  Symbols within the class
        must be stored as is in the symbol dictionary.

Class 7 is for a symbol beginning with with some sequence of
        the  numerals  0 through 9 followed immediately by a
        character of the class originally  occupied  by  the
        asterisk.   The  symbol  is  terminated  immediately
        after the asterisk regardless of the  class  of  the
        following  character.  Such symbols are generated as
        assembled instructions when the '' operator is  used
        to  define  a symbol as a text string.  The value of
        the decimal integer prefix  specifies  a  particular
        operator by its identifier code.  If the symbol does
        not start with a  decimal  integer  prefix  followed
        immediately  by  an asterisk, then the asterisk does
        not act as a symbol delimiter within a  class  3  or
        class 4 symbol.

The blank (space) character is always of character class  5.
Character  class  6 initially contains the dollar sign which
serves as an enquire character.  Character class 7 initially
contains  the  asterisk  which  can  be used with an integer
prefix to designate  assembled  operator  identifier  codes.
Characters  can always be placed into character class 5, but
character classes 6 and  7  cannot  be  assigned  if  empty.
Symbols  cannot  be  formed  from either classes 5 or 6.  No
special functions are associated with the character  classes
above 7.

As each new character in a  symbol  is  encountered,  it  is
first  tested  for  its  presence  in  the  JPNCTN array.  A
character is the end of a symbol if any of the following  is
true.

    1.  The present character is within  the  JPNCTN  array,
        with  the  parallel  KPNCTN  array  entry having the
        value 7 (class originally occupied by the asterisk),
        and  the  present  symbol has consisted only of some
        sequence of the numerals 0 through 9.
TBLTRN:  Principles of Operation Manual             Page 123
Symbol Selection from Text Buffer


    2.  Both the present and the next characters are present
        in the JPNCTN array, but the parallel KPNCTN entries
        are not identical.

    3.  The present character is in the JPNCTN array and the
        parallel  KPNCTN  array entry is not 7, but the next
        character is not in the JPNCTN array or if the  next
        character  is  in  the  JPNCTN array then the KPNCTN
        array entry which is parallel to the  appearance  of
        this next character within the JPNCTN array is 7.

    4.  The next character is in the JPNCTN  array  and  the
        parallel  KPNCTN  array  entry  is  not  7,  but the
        present character is not in the JPNCTN array  or  if
        the  present  character  is in the JPNCTN array then
        the KPNCTN array entry  which  is  parallel  to  the
        appearance  of  this  present  character  within the
        JPNCTN array is 7.

If not in the JPNCTN array, the present  character  must  be
tested for presence in the IDGT array when all the preceding
characters, if any, are digits (including the letter  A  and
above  if  the  radix  is  11  or  above).  The value of the
accumulated number under the  current  radix  is  stored  as
NUMBER.  NUMBER is constructed by bit shifting and inclusive
ORing if the base of the radix is  binary  (as  for  example
octal or hexadecimal), otherwise, multiplcation shifting and
addition are used.   The  powers  of  2  are  identified  by
testing  for 2, 4, 8 and 16 as special cases.  To save time,
radix 10 and radix 8 are tested for first  since  these  are
most common.  The value of the accumulated decimal number is
also stored  as  ITEN  if  the  present  character  and  all
preceding  characters  are  in the IDGT array and within the
range 0 through 9.

In addition to the current radix  stored  in  IRADIX,  three
other  radix  states  must  be  kept.   These  are the radix
appropriate for table entries KRADIX, the radix  for  symbol
definitions  JRADIX, and the value of JRADIX at the start of
a symbol definition LRADIX.  LRADIX  is  necessary  since  a
radix  change  within  a  symbol  definition applies to that
definition only.



                Symbol Dictionary Structure
                ------ ---------- ---------

Since the BIT operator can make reverse as well  as  forward
references,  all  assembled  table  entries must be retained
until the complete table has been assembled.   Even  without
this  restriction, the lowest reference of an as yet unknown
address would form the upper bounds  of  the  table  entries
TBLTRN:  Principles of Operation Manual             Page 124
Symbol Dictionary Structure


which could be assumed to be completely specified.  In order
to make the most  efficient  utilization  of  the  resulting
massive   storage  requirement,  both  the  assembled  table
entries and the  working  symbol  dictionary  together  with
information  about  unknown  address  labels are kept in the
single large array named MASTER.

In practice, although the number of assembled table  entries
is  continually  increasing,  the symbol dictionary probably
reaches its maximum size half way through the table assembly
and  from  then  on  decreases  making  room for the growing
assembled table as unknown address references are  resolved.
The  symbol dictionary is constructed starting at the top of
the MASTER array.  Unless the EOD (End  Ordered  Dictionary)
command  has  been issued, new items defined by either the =
or == operators are  inserted  into  the  symbol  dictionary
after  (below)  the  most recently defined symbol having the
same number  of  characters  in  its  name.   Since  address
labels,  and constants initially defined by the DEF, PSH and
STK operators, are left in the unordered  lower  section  of
the  dictionary,  garbage  collection must be relied upon to
keep search time to a minimum.

The symbol dictionary is a conglomerate of symbol cells  and
data  cells.   Each  cell  begins  with  a  pointer  to  the
following cell and an identifier code which is zero in cells
to  be  garbage  collected.   A  symbol  cell has a positive
identifier  code  which  is  followed  by  a  single   value
associated  with  the  symbol  and  by the characters of the
symbol itself.  The value word of a symbol  cell  having  an
associated data cell is a negative pointer to the identifier
code of that data cell.  The identifier  code  of  the  data
cell  is similarly a negative back-pointer to the value word
of the corresponding symbol  cell.   Data  cells  are  never
cross-linked,  although the linkage from the symbol cell for
an unassigned address label can proceed  indirectly  through
temporary  storage within the assembled table.  Additions to
data  cells  are  accomplished   through   reverse   garbage
collection.

The original dictionary is  constructed  from  the  template
array  ISTORE.   To  aid  user modification, ISTORE does not
have a list structure.  Each operator is indicated in ISTORE
merely by the number of characters, followed by the operator
identifier code and the characters making up  the  operator.
As  a  table in processed, each unknown symbol read from the
input buffer is appended to the  lower  end  of  the  symbol
dictionary  in  a  symbol  cell with a zero identifier code.
The lowest symbol dictionary cell is in turn replaced if its
identifier  code  is still zero when the next unknown symbol
is encountered.  Undefined symbols are therefore not allowed
to creep into the symbol dictionary.
TBLTRN:  Principles of Operation Manual             Page 125
Symbol Dictionary Structure


The  following  is  a  complete  list  of  the  symbol  cell
identifier codes of the programmed operators.


    3  POP   27  IFE   50  CLM   73  IFD   96  DID  119  NSV
    4  '     28 IFLE   51 *CLM   74  BSZ   97 *DID  120 *NSV
    5  ,     29  MSK   52  TST   75 *BSZ   98  DIU  121  NST
    6  ...   30  LFT   53 *TST   76  IFU   99 *DIU  122  JST
    7  ,,,   31 *LFT   54  (     77  IFA  100  DIA  123 *JST
    9  -     32  RIT   54  ((    78  IFO  101 *DIA  124  XOR
   10  +     33 *RIT   55  )     79  LMT  102  DIO  125  AND
   11  OCT   34  SIZ   56  ))    80 *LMT  103 *DIO  126  PFX
   12  DEC   35 *SIZ   57  NUL   81  XAD  104 DINA  127 *PFX
   13  LOC   36  ''    58  WRD   82  IFL  105*DINA  128  STK
   14  XSY   37  ==    59 *WRD   83  EAC  106 DINO  129 *STK
   15  =     38  IOR   60  IFN   84  IFG  107*DINO  130  PSH
   16  .     39  TON   61 IFGE   85  ROT  108  RED  131 *PSH
   17  DMP   40  BIT   62  FIL   86 IFNA  109 *RED  132  SFT
   18  DBG   41 *BIT   63 *FIL   87 IFNO  110  INC  133 *SFT
   19  LST   42  DUP   64  BPR   88  DIE  111 *INC  134  BAC
   20  BLK   43 *DUP   65 *BPR   89 *DIE  112  DEF  135  BOD
   21  FIN   44  SRX   67  ARG   90  DIN  113 *DEF  136  EOD
   22  SAV   45 *SRX   68  ADR   91 *DIN  114 DILE 1001  NEG
   23  TTL   46  TRX   69  ,,    92  DIL  115*DILE          
   24  TEL   47 *TRX   70  HIA   93 *DIL  116 DIGE          
   25  TTY   48  WID   71  LOA   94  DIG  117*DIGE          
   26  END   49 *WID   72  ACC   95 *DIG  118  NSN          


    5  ,    135  BOD  114 DILE   73  IFD   29  MSK   44  SRX
   69  ,,    64  BPR  115*DILE   27  IFE 1001  NEG   45 *SRX
    7  ,,,   65 *BPR   90  DIN   84  IFG  118  NSN  128  STK
    4  '     74  BSZ   91 *DIN   61 IFGE  121  NST  129 *STK
   36  ''    75 *BSZ  104 DINA   82  IFL  119  NSV   24  TEL
   16  .     50  CLM  105*DINA   28 IFLE  120 *NSV   39  TON
    6  ...   51 *CLM  106 DINO   60  IFN   57  NUL   46  TRX
   10  +     18  DBG  107*DINO   86 IFNA   11  OCT   47 *TRX
    9  -     12  DEC  102  DIO   87 IFNO  126  PFX   52  TST
   15  =    112  DEF  103 *DIO   78  IFO  127 *PFX   53 *TST
   37  ==   113 *DEF   98  DIU   76  IFU    3  POP   23  TTL
   54  (    100  DIA   99 *DIU  110  INC  130  PSH   25  TTY
   54  ((   101 *DIA   17  DMP  111 *INC  131 *PSH   48  WID
   55  )     96  DID   42  DUP   38  IOR  108  RED   49 *WID
   56  ))    97 *DID   43 *DUP  122  JST  109 *RED   58  WRD
   72  ACC   88  DIE   83  EAC  123 *JST   32  RIT   59 *WRD
   68  ADR   89 *DIE   26  END   30  LFT   33 *RIT   81  XAD
  125  AND   94  DIG  136  EOD   31 *LFT   85  ROT  124  XOR
   67  ARG   95 *DIG   62  FIL   79  LMT   22  SAV   14  XSY
  134  BAC  116 DIGE   63 *FIL   80 *LMT  132  SFT          
   40  BIT  117*DIGE   21  FIN   71  LOA  133 *SFT          
   41 *BIT   92  DIL   70  HIA   13  LOC   34  SIZ          
   20  BLK   93 *DIL   77  IFA   19  LST   35 *SIZ          
TBLTRN:  Principles of Operation Manual             Page 126
Symbol Dictionary Structure


In the above list, an operator name  starting  with  a  star
indicates  an  operator  defined by the user as the operator
preceding it in the list with eiher decimal  integer  prefix
or following parenthetical expression.  The identifier codes
137 through 1000 are unassigned.  Cells with  the  following
identifiers are generated during the table assembly.

       -1 or less, data cell back pointer
        0  undefined symbol
        1  unassigned address label
        2  assigned address label
        8  text replacement operator
       29  packing pattern
       66  multiple entry constant
     1001 or greater, single entry constant

Operators without associated values have the simplest symbol
cell structure.  For example, the definition

        LEFT=LFT

generates the following symbol cell

        4479  4472
        4478    30
        4477     0
        4476 T
        4475 F
        4474 E
        4473 L

This would be represented in debugging output as follows.

OPERATOR  4479 OPR 30                                LEFT

The left column in the above example contains the  locations
within the MASTER array.  The first location 4479 within the
cell contains a pointer 4472 to the  first  location  within
the following cell.  The identifier code 30 in location 4478
defines the symbol to be the left shift operator.  There  is
no value associated with this operator since it will be used
either with a decimal integer prefix  or  with  a  following
constant.   The location 4477 which would contain this value
is therefore zero.  Locations 4476 through 4473 contain  the
characters  forming  the symbol, one character per location.
The order of  the  characters  within  the  symbol  cell  is
opposed to that of the construction and search of the symbol
dictionary in order to allow the symbol to be output by  the
implied  DO  in  a  FORTRAN  WRITE  statement.   The similar
statement

        LEFT=2LFT
TBLTRN:  Principles of Operation Manual             Page 127
Symbol Dictionary Structure


associates only a single value with the new symbol  so  this
can  still  be stored within the symbol cell.  The resulting
symbol cell structure is shown below.

        4479  4472
        4478    31
        4477     2
        4476 T
        4475 F
        4474 E
        4473 L

This would be represented in debugging output as follows.

OPERATOR  4479 OPR 31                              2 LEFT

In the above example, the identifier code 31 specifies  that
the  symbol  is  the left shift operator with the associated
value 2 given in the following location.

Single entry constants require the storage  of  2  items  of
data,  the  value and the precision (offset specified by WRD
operator).  The use of separate data cells has been avoided,
however, by making the identifier code of these constants be
the  sum  of  1000  and  the  offset.   Since  single  entry
constants  are  the  most  common  symbol  type,  the use of
separate data cells would waste  considerable  storage.   As
examples, the statements

        ONE=11,TWO=2WRD 22,THREE=3WRD 33

would generate the following symbol cells.

        4479  4473      4473  4467      4467  4459   
        4478  1001      4472  1002      4466  1003   
        4477    11      4471    22      4465    33   
        4476 E          4470 O          4464 E       
        4475 N          4469 W          4463 E       
        4474 O          4468 T          4462 R       
                                        4461 H       
                                        4460 T       

These would be represented in debugging output as follows.

CONSTANT  4479 WRD  1 OCT            13           11 ONE
CONSTANT  4473 WRD  2 OCT            26           22 TWO
CONSTANT  4467 WRD  3 OCT            41           33 THREE

Multiple entry constants are represented by identifier  code
66.    The   value   word  is  a  negative  pointer  to  the
back-pointer in the associated data  cell.   The  data  cell
contains  2 words for each entry specified in the definition
of the constant.  The higher of these 2 words  contains  the
TBLTRN:  Principles of Operation Manual             Page 128
Symbol Dictionary Structure


offset  and  the  lower  contains  the contents of the entry
having that offset.  The specified  entries  appear  in  the
order  of  precision,  independent  of  manner  and order of
specification,  with  the  highest  precision  entry   first
(highest).   Unspecified entries and zero entries other than
the highest precision entry specified are  not  included  in
the data cell.  As examples, the statements

        I=33 2WRD 22 4WRD 0
        J=33 4WRD 0 2WRD 22
        K=4WRD 0 2WRD 22 33

generate the following symbol and data cells.

        4479  4475      4467  4463      4455  4451   
        4478    66      4466    66      4454    66   
        4477 -4474      4465 -4462      4453 -4450   
        4476 I          4464 J          4452 K       
        4475  4467      4463  4455      4451  4443   
        4474 -4477      4462 -4465      4450 -4453   
        4473     4      4461     4      4449     4   
        4472     0      4460     0      4448     0   
        4471     2      4459     2      4447     2   
        4470    22      4458    22      4446    22   
        4469     1      4457     1      4445     1   
        4468    33      4456    33      4444    33   

These would be represented in debugging output as follows.

CONSTANT  4479 WRD  4 OCT             0            0 I
 ''  ''        WRD  2 OCT            26           22 I
 ''  ''        WRD  1 OCT            41           33 I
CONSTANT  4467 WRD  4 OCT             0            0 J
 ''  ''        WRD  2 OCT            26           22 J
 ''  ''        WRD  1 OCT            41           33 J
CONSTANT  4455 WRD  4 OCT             0            0 K
 ''  ''        WRD  2 OCT            26           22 K
 ''  ''        WRD  1 OCT            41           33 K

Symbols which are defined as text strings are represented by
identifier  code  8.  A symbol defined as a null text string
has  a  zero  value  word  and  no  associated  data   cell.
Otherwise,  the  value  word  is  a  negative pointer to the
back-pointer in the associated data cell which contains  the
characters  of  the  text string following the back-pointer.
Query characters within the text string are  stored  in  the
data  cell  and  are  not  executed immediately.  Blanks are
stored only if the single quote operator is  used  to  begin
the  text  string.  The stored characters of the text string
are preceded (above in the storage  array)  by  a  character
count  and  are followed by the argument count if a deferred
text string follows within the  definition.   An  additional
zero length text string is stored if the initial text string
TBLTRN:  Principles of Operation Manual             Page 129
Symbol Dictionary Structure


within  the  definition   is   preceded   by   an   argument
specification.  As examples, the statements

        A=''/  TEL A,XSY A,B  /
        B='/  A='*TEL A,*,  /
        C=1''/  A  /-1'/  A  /

generate the following symbol and data cells.

        4437  4433      4415  4411      4392  4388   
        4436     8      4414     8      4391     8   
        4435 -4432      4413 -4410      4390 -4387   
        4434 A          4412 B          4389 C       
        4433  4415      4411  4392      4388  4375   
        4432 -4435      4410 -4413      4387 -4390   
        4431    15      4409    16      4386     0   
        4430 B          4408            4385     1   
        4429 *          4407            4384     1   
        4428 5          4406 ,          4383 A       
        4427            4405 *          4382    -1   
        4426 A          4404 ,          4381     5   
        4425 *          4403 A          4380         
        4424 4          4402            4379         
        4423 1          4401 L          4378 A       
        4422 *          4400 E          4377         
        4421 5          4399 T          4376         
        4420            4398 *                       
        4419 A          4397 '                       
        4418 *          4396 =                       
        4417 4          4395 A                       
        4416 2          4394                         
                        4393                         

These would be represented in debugging output as follows.

TEXT      4437 OPR  8                                A
 ''  ''     ***************
 ''  ''     24*A 5*14*A 5*B
TEXT      4415 OPR  8                                B
 ''  ''     ****************
 ''  ''       A='*TEL A,*,  
TEXT      4392 OPR  8                                C
 ''  ''     * ARGUMENT COUNT   1
 ''  ''     *
 ''  ''     A
 ''  ''     *
 ''  ''     * ARGUMENT COUNT  -1
 ''  ''     *****
 ''  ''       A  

The first use of A redefines A.  The statement
TBLTRN:  Principles of Operation Manual             Page 130
Symbol Dictionary Structure


        C''/FIRST/''/SECOND/

would generate the following as output.

FIRST
TEXT      4437 OPR  8                                A
 ''  ''     ***************
 ''  ''     24*A 5*14*A 5*B
SECOND
TEXT      4397 OPR  8                                A
 ''  ''     ******
 ''  ''     TEL A,

The identifier code for known  address  labels  is  2.   The
value word contains the subscript of the table entry bearing
the label  if  this  entry  was  not  repeated  by  the  DUP
operator.   The  value  word  for  the label of a duplicated
entry is a negative pointer to a data cell since  additional
information  must  be stored so tht a later BIT operator can
deposit into the labeled entry and into all of  its  copies.
The  data  cell contains, starting at the highest data word,
the subscript of the labeled entry, the number of copies  of
this  entry  (1  less  than  value  of prefix of or constant
following DUP operator), and the number of entries assembled
by  the  statement  which  were  copied.   As  examples, the
statements

        11 2WRD 22 LOA A HIA B
        4DUP 33 2WRD 44 LOA C HIA D

generate the following symbol and data cells

        4479  4475      4471  4467      4467  4463   
        4478     2      4470     2      4466     2   
        4477     1      4469 -4462      4465 -4457   
        4476 A          4468 C          4464 D       
                        4463  4458      4458  4453   
        4475  4471      4462 -4469      4457 -4465   
        4474     2      4461     3      4456     4   
        4473     2      4460     3      4455     3   
        4472 B          4459     2      4454     2   

These would be represented in debugging format at follows.

ADDRESS   4479 OPR  2                      LOC     1 A
ADDRESS   4475 OPR  2                      LOC     2 B
ADDRESS   4471 OPR  2    ENTRIES  2 DUP  4 LOC     3 C
ADDRESS   4467 OPR  2    ENTRIES  2 DUP  4 LOC     4 D

The identifier code for a packing pattern is 29.  For a null
packing  pattern  such  as MSK, the value word which follows
the word containing the identifier code is zero.  Otherwise,
this value word is a negative pointer to the back-pointer in
TBLTRN:  Principles of Operation Manual             Page 131
Symbol Dictionary Structure


the associated data  cell.   The  data  cell  which  can  be
created  for  the  storage  of a packing pattern can be more
complex than that of any other operator.   The  items  which
follow  the  negative  back-pointer  in  the  data  cell are
grouped in pairs.  The first word  identifies  the  type  of
information being stored as follows.

    1st word zero.  Table entry origin increment.
        The 2nd word contains the number  of  table  entries
        which the origin is to be incremented.

    1st word positive.  Explicit argument specification.
        The 1st word contains the shift specified by the WRD
        operator.   The  second word contains the sum of the
        reduced byte size minus 2 then times 505,  the  sign
        to  be  used  times  101,  and  the  shift stated in
        reduced bytes plus 50.  The reduced byte size is the
        base of the current byte size if this base is in the
        range 2 through 17.   Otherwise,  the  reduced  byte
        size  is  the  same  as  the current byte size.  The
        signs are stored as 

        0   Exclusive or (bit on if on in only one argument)
        1   And          (bit on if on in both arguments)
        2   Addition
        3   Subtraction
        4   Inclusive or (bit on if on in either argument)

        It will be noted that the shift  stated  in  reduced
        bytes  must  be  within  the  range  -50 to +50.  In
        particular, this limits shifts stated in bits, or in
        bytes  which are exact multiples of bits, to 50 left
        and 50 right.

    1st word negative.  Automatic argument specification.
        The 2nd word contains the same packed information as
        an  explicit  argument  specification.  However, the
        following words contain consecutive pairs of offsets
        and  values  to  be  used as the automatic argument.
        The total number of items in the offsets and  values
        list  is  the  absolute  value  of the negative word
        preceding the the word containing  the  packed  byte
        size, sign and shift information.

As examples, the statements

    A=MSK
    B=MSK 2WRD 3LFT+100SIZ ARG
    C=MSK 3WRD.
    D=MSK 16SIZ 1WRD 2LFT-ARG
    E=MSK 2WRD 3LFT+100SIZ ARG 3WRD.16SIZ 1WRD 2LFT-ARG
    F=3WRD 45 40 2WRD 60 3WRD+45
    F=MSK 2WRD 3LFT+100SIZ ARG(F-10)3WRD.16SIZ 1WRD 2LFT-ARG
TBLTRN:  Principles of Operation Manual             Page 132
Symbol Dictionary Structure


would generate the following symbol and data cells.

    4479  4475        4459  4455        4439  4435        
    4478    29        4458    29        4438    29        
    4477     0        4457 -4454        4437 -4434        
    4476 A            4456 D            4436 F            
                      4455  4451        4435  4417        
                      4454 -4457        4434 -4437        
    4475  4471        4453     1        4433    -6        
    4474    29        4452   361        4432  4298        
    4473 -4470        (0*505+3*101+58)  (8*505+2*101+56)  
    4472 B                              4431     4        
    4471  4467                          4430    90        
    4470 -4473        4451  4447        4429     3        
    4469     2        4450    29        4428    60        
    4468  4298        4449 -4446        4427     2        
    (8*505+2*101+56)  4448 E            4426    40        
                      4447  4439        4425    -2        
                      4446 -4449        4424  4399        
    4467  4463        4445     2        (8*505+3*101+56)  
    4466    29        4444  4298        4423     2        
    4465 -4462        (8*505+2*101+56)  4422    10        
    4464 C            4443     0        4421     0        
    4463  4459        4442     3        4420     3        
    4462 -4465        4441     1        4419     1        
    4461     0        4440   361        4418   361        
    4460     3        (0*505+3*101+58)  (0*505+3*101+58)  

These would be represented in debugging output as follows.

OPERATOR  4479 OPR 29                                A
BYTEMASK  4475 OPR 29 SIN  2 SIZ 10 BYT  7 WRD     2 B
BYTEMASK  4467 OPR 29 ORIGIN INCREMENT     WRD     3 C
BYTEMASK  4459 OPR 29 SIN  3 SIZ  2 BYT  9 WRD     1 D
BYTEMASK  4451 OPR 29 SIN  2 SIZ 10 BYT  7 WRD     2 E
 ''  ''               ORIGIN INCREMENT     WRD     3 E
 ''  ''               SIN  3 SIZ  2 BYT  9 WRD     1 E
BYTEMASK  4439 OPR 29 SIN  2 SIZ 10 BYT  7 WRD     4 F
 ''  ''   AUTO ARG    OCT           132           90 F
 ''  ''               SIN  2 SIZ 10 BYT  7 WRD     3 F
 ''  ''   AUTO ARG    OCT            74           60 F
 ''  ''               SIN  2 SIZ 10 BYT  7 WRD     2 F
 ''  ''   AUTO ARG    OCT            50           40 F
 ''  ''               SIN  3 SIZ 10 BYT  7 WRD     2 F
 ''  ''   AUTO ARG    OCT            12           10 F
 ''  ''               ORIGIN INCREMENT     WRD     3 F
 ''  ''               SIN  3 SIZ  2 BYT  9 WRD     1 F

References of unknown address  labels  are  stored  in  data
cells  packed  similarly to those used for packing patterns.
The identifier code for an unknown address label is  1,  and
the  value  word  which follows is a negative pointer to the
back-pointer in the associated data cell.  The  items  which
TBLTRN:  Principles of Operation Manual             Page 133
Symbol Dictionary Structure


follow  the negative back-pointer are grouped in pairs.  The
second word of the pair is packed identically to the  second
word  of  an  explicit  argument  specification of a packing
pattern.  The first word, if positive, is the number of  the
table entry into which the address associated with the label
is to be packed.  If the first word is negative, the pair of
words  store  a  reference of the label by the bit operator,
and the first word is the negative of the  offset  specified
by the WRD operator or packing pattern in effect, if any, or
is -1 if an offset has not been specified.  As examples, the
statements

        10BPR 3WRD 5BIT     A 15BIT A  
              3WRD 5BIT     G 15BIT G  
         4BSZ 3WRD 5BIT     B 15BIT B  
              3WRD 5BIT     G 15BIT G  
         5BSZ 3WRD 5BIT     C 15BIT C  
              3WRD 5BIT     G 15BIT G  
              3WRD 5LFT LOC D   LOC D  
              3WRD 5LFT LOC G   LOC G  
         4SIZ 3WRD 5LFT LOC E   LOC E  
              3WRD 5LFT LOC G   LOC G  
         5SIZ 3WRD 5LFT LOC F   LOC F  
              3WRD 5LFT LOC G   LOC G  

would generate the following symbol and data cells.

    6431  6427        6371  6367        6421  6417        
    6430     1        6370     1        6420     1        
    6429 -6426        6369 -6366        6419 -6416        
    6428 A            6368 D            6418 G            
    6427  6421        6367  6361        6417  6391        
    6426 -6429        6366 -6369        6416 -6419        
    6425    -3        6365     1        6415    -3        
    6424   458        6364   454        6414   458        
    (0*505+4*101+54)  (0*505+4*101+50)  (0*505+4*101+54)  
    6423    -2        6363     3        6413    -2        
    6422   458        6362   459        6412   458        
    (0*505+4*101+54)  (0*505+4*101+55)  (0*505+4*101+54)  
                                        6411    -3        
                                        6410   260        
                                        (0*505+2*101+58)  
TBLTRN:  Principles of Operation Manual             Page 134
Symbol Dictionary Structure


    6391  6387        6361  6357        6409    -2        
    6390     1        6360     1        6408   260        
    6389 -6386        6359 -6356        (0*505+2*101+58)  
    6388 B            6358 E            6407    -3        
    6387  6381        6357  6351        6406  1771        
    6386 -6389        6356 -6359        (3*505+2*101+54)  
    6385    -3        6355     7        6405    -2        
    6384   260        6354   454        6404  1771        
    (0*505+2*101+58)  (0*505+4*101+50)  (3*505+2*101+54)  
    6383    -2        6353     9        6403     4        
    6382   260        6352   464        6402   454        
    (0*505+2*101+58)  (0*505+4*101+60)  (0*505+4*101+50)  
                                        6401     6        
                                        6400   459        
                                        (0*505+4*101+55)  
    6381  6377        6351  6347        6399    10        
    6380     1        6350     1        6398   454        
    6379 -6376        6349 -6346        (0*505+4*101+50)  
    6378 C            6348 F            6397    12        
    6377  6371        6347  6341        6396   464        
    6376 -6379        6346 -6349        (0*505+4*101+60)  
    6375    -3        6345    13        6395    16        
    6374  1771        6344  1767        6394  1767        
    (3*505+2*101+54)  (3*505+2*101+50)  (3*505+2*101+50)  
    6373    -2        6343    15        6393    18        
    6372  1771        6342  1772        6392  1772        
    (3*505+2*101+54)  (3*505+2*101+55)  (3*505+2*101+55)  

These would be represented in debugging output as follows.

ADDRESS   6431 OPR  1                      LOC  6427 A
 ''  ''   6427   6431 SIN  4 SIZ  2 BYT  5 WRD     3 A
 ''  ''               SIN  4 SIZ  2 BYT  5 WRD     2 A
ADDRESS   6391 OPR  1                      LOC  6387 B
 ''  ''   6387   6391 SIN  2 SIZ  2 BYT  9 WRD     3 B
 ''  ''               SIN  2 SIZ  2 BYT  9 WRD     2 B
ADDRESS   6381 OPR  1                      LOC  6377 C
 ''  ''   6377   6381 SIN  2 SIZ  5 BYT  5 WRD     3 C
 ''  ''               SIN  2 SIZ  5 BYT  5 WRD     2 C
ADDRESS   6371 OPR  1                      LOC  6367 D
 ''  ''   6367   6371 SIN  4 SIZ  2 BYT  1 LOC     1 D
 ''  ''               SIN  4 SIZ  2 BYT  6 LOC     3 D
ADDRESS   6361 OPR  1                      LOC  6357 E
 ''  ''   6357   6361 SIN  4 SIZ  2 BYT  1 LOC     7 E
 ''  ''               SIN  4 SIZ  2 BYT 11 LOC     9 E
ADDRESS   6351 OPR  1                      LOC  6347 F
 ''  ''   6347   6351 SIN  2 SIZ  5 BYT  1 LOC    13 F
 ''  ''               SIN  2 SIZ  5 BYT  6 LOC    15 F
ADDRESS   6421 OPR  1                      LOC  6417 G
 ''  ''   6417   6421 SIN  4 SIZ  2 BYT  5 WRD     3 G
 ''  ''               SIN  4 SIZ  2 BYT  5 WRD     2 G
 ''  ''               SIN  2 SIZ  2 BYT  9 WRD     3 G
 ''  ''               SIN  2 SIZ  2 BYT  9 WRD     2 G
TBLTRN:  Principles of Operation Manual             Page 135
Symbol Dictionary Structure


 ''  ''               SIN  2 SIZ  5 BYT  5 WRD     3 G
 ''  ''               SIN  2 SIZ  5 BYT  5 WRD     2 G
 ''  ''               SIN  4 SIZ  2 BYT  1 LOC     4 G
 ''  ''               SIN  4 SIZ  2 BYT  6 LOC     6 G
 ''  ''               SIN  4 SIZ  2 BYT  1 LOC    10 G
 ''  ''               SIN  4 SIZ  2 BYT 11 LOC    12 G
 ''  ''               SIN  2 SIZ  5 BYT  1 LOC    16 G
 ''  ''               SIN  2 SIZ  5 BYT  6 LOC    18 G

When a table entry contains only an address  of  an  unknown
label,  the  table  entry  itself  can  be used to store the
necessary shift and sign information until  the  address  is
determined.   The  value word of the symbol cell stores this
information for the first table entry in the list, and  that
table  entry  stores  the  corresponding information for the
next.  Packed with the sign and shift  information  is  also
the  table  entry  number, left shifted by multiplying times
8080 (101 possible shifts times 5 possible  signs  times  16
possible  reduced  byte sizes).  The terminal table entry in
the list is either zero if there is no associated data cell,
or is a negative pointer to the negative back-pointer in the
data cell.  The list is constructed only if, when the  table
entry  origin  moves  past all currently assembled items, an
unknown address has been the only item assembled  since  the
previous   time  the  table  entry  origin  moved  past  all
assembled items.

The LOCK variable is initially zero,  and  is  again  zeroed
when  the  table entry origin moves past all assembled table
entries.  When an unknown address is assembled, LOCK is  set
to 1 if it is currently zero or to 2 otherwise.  LOCK is set
to 2 if any  constant  other  than  an  unknown  address  is
assembled,  or  if the BIT operator specifies a deposit into
the table entry origin or into a table entry  above  it  but
within  the  range  of table entries assembled so far by the
current statement.  The JSIGN variable  records  whether  an
unknown  address  reference  was  encountered while LOCK was
zero.  JSIGN is initially -1 but stores the appropriate sign
as  0  through  4 if an address is being temporarily stored.
IADDRS holds the location of the identifier code within  the
symbol  cell  contaning  the  unknown label, JBASE holds the
reduced byte size, JSHIFT holds the shift, and JMORE holds 1
plus  the offset from the current table entry origin.  JMORE
is adjusted if the table entry origin moves, and,  if  JMORE
is  no  longer  positive,  the  information stored by all of
these variables is packed into the table entry list if  LOCK
is still 1 or into the data cell, creating a new one if none
exists, if LOCK is 2.  IADDRS is adjusted whenever items are
inserted  or  deleted  above  the  symbol cell in the symbol
dictionary.  For example, the statements

             3WRD 5BIT     B
             3WRD 5LFT LOC A
TBLTRN:  Principles of Operation Manual             Page 136
Symbol Dictionary Structure


             3WRD 5LFT LOC B
        4SIZ 3WRD 5LFT LOC A
             3WRD 5LFT LOC B
        5SIZ 3WRD 5LFT LOC A
             3WRD 5LFT LOC B

would generate the following list structures and symbol  and
data cells.

    6423   6419                6431   6427                
    6422      1                6430      1                
    6421  24699                6429  48939                
    (  3* 8080+0*505+4*101+55) (  6* 8080+0*505+4*101+55) 
    6420  A                    6428  B                    
       3  73184                   6  97424                
    (  9* 8080+0*505+4*101+60) ( 12* 8080+0*505+4*101+60) 
       9 122972                  12 147212                
    ( 15* 8080+3*505+2*101+55) ( 18* 8080+3*505+2*101+55) 
      15      0                  18  -6426                
                               6427   6423                
                               6426    -18                
                               6425     -3                
                               6424    458                
                               (  0* 8080+0*505+4*101+54) 

These would be represented in debugging output as follows.

ADDRESS   6423 OPR  1 SIN  4 SIZ  2 BYT  6 LOC     3 A
LIST END    15                                       A
BYTEINFO     9        SIN  2 SIZ  5 BYT  6 LOC    15 A
BYTEINFO     3        SIN  4 SIZ  2 BYT 11 LOC     9 A
ADDRESS   6431 OPR  1 SIN  4 SIZ  2 BYT  6 LOC     6 B
 ''  ''   6427     18 SIN  4 SIZ  2 BYT  5 WRD     3 B
POINTER     18                                  6427 B
BYTEINFO    12        SIN  2 SIZ  5 BYT  6 LOC    18 B
BYTEINFO     6        SIN  4 SIZ  2 BYT 11 LOC    12 B



           Symbol Construction by Stack Operators
           ------ ------------ -- ----- ---------

The stack rotation operator ROT  can  cause  contraction  or
expansion  of  the  symbol dictionary in order to remove all
but high precision zeroes from  the  storage  of  constants.
Such  compacted  storage  is  not efficient for stacks since
these are mostly formed of non-zero words.  However,  TBLTRN
is  primarily  a  translator,  not  an  operating system, so
efficient storage of constants to be  assembled  into  table
entries  is considered to be more important than the storage
of stacks.  As examples of the  manipulations  performed  by
the ROT operator, the stack generated by the statement
TBLTRN:  Principles of Operation Manual             Page 137
Symbol Construction by Stack Operators


        PSH 33 A PSH 0 A PSH 0 A

or by the identical constant definition

        A=3WRD 33

would appear initially, and after each of  3  rotations,  as
follows.

        4443  4439  4443  4439  4443  4439  4443  4439  
        4442  1003  4442    66  4442    66  4442  1003  
        4441    33  4441 -4438  4441 -4438  4441    33  
        4440 A      4440 A      4440 A      4440 A      
                    4439  4433  4439  4433              
                    4438 -4441  4438 -4441              
                    4437     3  4437     3              
                    4436     0  4436     0              
                    4435     1  4435     2              
                    4434    33  4434    33              

The above is an extreme example since only one word  in  the
stack  or constant is non-zero so that no extra data cell is
necessary whenever this is the highest precesion word in the
stack.   A  data cell would always be necessary if the stack
contains more  than  just  a  single  non-zero  entry.   For
example, the stack generated by the statement

        PSH 33 A PSH 22 A PSH 0

or by the identical constant definition

        A=2WRD 22 3WRD 33

would appear initially, and after each of  3  rotations,  as
follows.
        4443  4439  4443  4439  4443  4439  4443  4439  
        4442    66  4442    66  4442    66  4442    66  
        4441 -4438  4441 -4438  4441 -4438  4441 -4438  
        4440 A      4440 A      4440 A      4440 A      
        4439  4433  4439  4433  4439  4431  4439  4433  
        4438 -4441  4438 -4441  4438 -4441  4438 -4441  
        4437     3  4437     3  4437     3  4437     3  
        4436    33  4436    22  4436     0  4436    33  
        4435     2  4435     1  4435     2  4435     2  
        4434    22  4434    33  4434    33  4434    22  
                                4433     1              
                                4432    22           




TBLTRN:  Principles of Operation Manual             Page 138
Symbol Construction by Stack Operators


                                 author:  Donald E. Barth
                                          Chemistry Dept.
                                          Harvard University
                                          12 Oxford Street
                                          Cambridge, Mass.
                                updated:  January 1973

TBLTRN releases

Aug 1972  Initial DECUS release.

Jan 1973  1.  Extension.  Rename definition of form A=.'/B/
          2.  Extension.  Copy definition of form A=.''/B/
          3.  Extension.  Expression as value tested by  the
              DIN,  DIL,  DILE,  DIE,  DIGE,  DIG, IFN, IFL,
              IFLE, IFE, IFGE, and IFG operators.
          4.  Correction.  DEF, PSH and STK when acting upon
              a  symbol defined only as an address label did
              not construct a constant of the same name.
          5.  Correction.  POP did not  reveal  zero  values
              due  to  zero  compression  of  multiple entry
              constants.
          6.  Correction.  Packing pattern used in  constant
              definition and at start of following statement
              defining  table  entries  sometimes   produced
              extra zero entries.
          7.  Correction.  After PFX-1 statement or a symbol
              definition,  the precision set by PFX operator
              was reset to second state prior rather than to
              previous state.
          8.  Correction.  Address label used in  expression
              following  operator  which  could  have  taken
              decimal integer prefix was treated as  illegal
              rather than having value zero.
          9.  Correction.  Assembled text  containing  2  as
              integer  prefix  did  not preface this integer
              with DEC operator designation.
         10.  Correction.   EAC  operator  could  not   have
              alternate definition as address label.
TBLTRN                                              Page 139
Index



$  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 51
$$ 
     defined . . . . . . . . . . . . . . 51
$$$
     defined . . . . . . . . . . . . . . 52
     example . . . . . . . . . . . . . . 55

'  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 57
     defining symbol identical to  . . . 66
     in range of Do-If class . . . . . . 38
'' 
     defined . . . . . . . . . . . . . . 61
     defining symbol identical to  . . . 66
     example . . . . . . . . . . . . . . 36
     in range of Do-If class . . . . . . 38
     pre-assembled code definition . . . 49, 106

(  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 29, 68
     example . . . . . . . . . . . . . . 25
(( 
     defined . . . . . . . . . . . . . . 32, 69

)  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 29, 70
     example . . . . . . . . . . . . . . 25
)) 
     defined . . . . . . . . . . . . . . 32, 70
     when equivalent to ) )  . . . . . . 31

*  
     as pre-assembled code delimiter . . 22
     in pre-assembled code example . . . 50
     list of operator codes  . . . . . . 125

+  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 64

,  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 20, 56
     defining symbol identical to  . . . 66
,, 
     defined . . . . . . . . . . . . . . 20, 56
     defining symbol identical to  . . . 66
TBLTRN                                              Page 140
Index


     in range of ,,, . . . . . . . . . . 57
,,,
     defined . . . . . . . . . . . . . . 20, 56
     defining symbol identical to  . . . 66

-  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 64

.  
     after BIT . . . . . . . . . . . . . 74
     after WRD . . . . . . . . . . . . . 18
     after WRD in packing pattern  . . . 15
     as local address label  . . . . . . 18, 62
     as separate character class . . . . 21
     before text string in definition  . 66
     defined . . . . . . . . . . . . . . 62
     in packing pattern  . . . . . . . . 14, 63
     in rename definition  . . . . . . . 67
     LOC unnecessary . . . . . . . . . . 62
...
     defined . . . . . . . . . . . . . . 64
     defining symbol identical to  . . . 66
     example . . . . . . . . . . . . . . 57

=  
     as separate character class . . . . 21
     defined . . . . . . . . . . . . . . 64, 101
     example . . . . . . . . . . . . . . 61
     redefinition  . . . . . . . . . . . 56
     rename  . . . . . . . . . . . . . . 67
== 
     and deferred text insertion . . . . 37
     defined . . . . . . . . . . . . . . 36, 67, 101
     example . . . . . . . . . . . . . . 38
     redefinition  . . . . . . . . . . . 56
     terminating definition  . . . . . . 56
     within test table . . . . . . . . . 41

ACC
     defined . . . . . . . . . . . . . . 70
     example . . . . . . . . . . . . . . 25, 55, 61
address label
     . as current  . . . . . . . . . . . 18, 62
     after ADR . . . . . . . . . . . . . 27, 71, 109
     after BIT . . . . . . . . . . . . . 74
     after HIA . . . . . . . . . . . . . 27, 84, 109
     after LOA . . . . . . . . . . . . . 27, 89, 109
     after LOC . . . . . . . . . . . . . 90
     after WRD . . . . . . . . . . . . . 27
     also as other operator  . . . . . . 23, 26, 64, 71
     defined . . . . . . . . . . . . . . 17, 26, 109
     in symbol definition  . . . . . . . 26
TBLTRN                                              Page 141
Index


     operators which need  . . . . . . . 71
     redefinition  . . . . . . . . . . . 71
     selective removal by XAD  . . . . . 99
     text string takes precedence over . 27
     unknown . . . . . . . . . . . . . . 27
ADR
     defined . . . . . . . . . . . . . . 27, 71
AND
     defined . . . . . . . . . . . . . . 71
ARG
     defined . . . . . . . . . . . . . . 72
argument of packing pattern
     automatic argument  . . . . . . . . 25, 72
     explicit argument . . . . . . . . . 68, 84
     NUL as null argument  . . . . . . . 91

BAC
     , necessary if issued . . . . . . . 56
     ,, in range . . . . . . . . . . . . 56
     ,,, in range  . . . . . . . . . . . 57
     defined . . . . . . . . . . . . . . 20, 73
     termination of range  . . . . . . . 73
bit numbering
     overflow wrap-around  . . . . . . . 74
     reversal by BPR . . . . . . . . . . 74
     set by BPR  . . . . . . . . . . . . 76
bit size
     set by BSZ  . . . . . . . . . . . . 75, 76
BIT
     . after . . . . . . . . . . . . . . 18, 62, 74
     after WRD . . . . . . . . . . . . . 18, 74, 111
     defined . . . . . . . . . . . . . . 26, 74
     destination in range of DUP . . . . 16
blank
     as separate character class . . . . 21
     between text replacement and following symbol  46
     extend character class of . . . . . 70
     in text string  . . . . . . . . . . 60
     translation of query operator to  . 52
BLK
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 75
BOD
     defined . . . . . . . . . . . . . . 76
     versus EOD  . . . . . . . . . . . . 83
BPR
     defined . . . . . . . . . . . . . . 76, 113
BSZ
     defined . . . . . . . . . . . . . . 76
byte shift
     discussion  . . . . . . . . . . . . 10
     left by LFT . . . . . . . . . . . . 88
     logical shift or multiplcation  . . 10
TBLTRN                                              Page 142
Index


     right by RIT  . . . . . . . . . . . 94
byte size
     after change in symbol definition . 19
     after use of packing pattern  . . . 19
     default . . . . . . . . . . . . . . 12
     defined . . . . . . . . . . . . . . 10
     during use of packing patern  . . . 25
     selection of  . . . . . . . . . . . 12
     when using BIT  . . . . . . . . . . 75
byte template
     (see packing pattern)

character class
     alteration by ACC . . . . . . . . . 70
     alteration example  . . . . . . . . 55, 61
     description of  . . . . . . . . . . 20
     restored by BLK . . . . . . . . . . 76
     summary reported by $$$ . . . . . . 52
CLM
     defined . . . . . . . . . . . . . . 39, 77
     example . . . . . . . . . . . . . . 40
comment
     after ,,, . . . . . . . . . . . . . 56
     after ... . . . . . . . . . . . . . 64
     example . . . . . . . . . . . . . . 57, 64
constant
     as symbol type  . . . . . . . . . . 23
     defining value by DEF . . . . . . . 78
     discussion of definition as . . . . 105
     in parenthetical expression . . . . 30
     increasing value by INC . . . . . . 87
     multiple precision  . . . . . . . . 9, 23
     parenthetical expression in definition  31
     redefinition  . . . . . . . . . . . 64
     reducing value by RED . . . . . . . 93
     shifting value by SFT . . . . . . . 94
     sign bit  . . . . . . . . . . . . . 91
     unknown in definition of itself . . 34
control transfer
     permanent by TTY  . . . . . . . . . 36, 98
     temporary by == . . . . . . . . . . 36

DATA statement
     column width set by CLM . . . . . . 77
     discussion  . . . . . . . . . . . . 39
     example . . . . . . . . . . . . . . 40
     statement width set by WID  . . . . 99
DBG
     defined . . . . . . . . . . . . . . 77
DEC
     defined . . . . . . . . . . . . . . 28, 78
decimal integer prefix
     (see integer prefix)
TBLTRN                                              Page 143
Index


decimal radix
     (see DEC)
DEF
     defined . . . . . . . . . . . . . . 78
default
     byte size . . . . . . . . . . . . . 12
     offset  . . . . . . . . . . . . . . 27
     sign  . . . . . . . . . . . . . . . 12
DIA
     defined . . . . . . . . . . . . . . 79
dictionary
     (see symbol dictionary)
DID
     defined . . . . . . . . . . . . . . 79
DIE
     defined . . . . . . . . . . . . . . 79
DIG
     defined . . . . . . . . . . . . . . 80
DIGE
     defined . . . . . . . . . . . . . . 80
DIL
     defined . . . . . . . . . . . . . . 80
DILE
     defined . . . . . . . . . . . . . . 80
DIN
     defined . . . . . . . . . . . . . . 81
DINA
     defined . . . . . . . . . . . . . . 81
DINO
     defined . . . . . . . . . . . . . . 81
DIO
     defined . . . . . . . . . . . . . . 81
DIU
     defined . . . . . . . . . . . . . . 82
DMP
     defined . . . . . . . . . . . . . . 82
Do-If class
     defined . . . . . . . . . . . . . . 37
     NST after . . . . . . . . . . . . . 35
     text string after . . . . . . . . . 38, 57
     text string symbol after  . . . . . 38, 58
dump
     of dictionary and table by DBG  . . 77
     of selected symbol or entry by TEL  96
     of symbol dictionary by DMP . . . . 82
     of table by LST . . . . . . . . . . 90
     of text replacements by LMT . . . . 89
DUP
     BIT destination in range of . . . . 16
     defined . . . . . . . . . . . . . . 16, 82, 112
duplication
     of table entry by DUP . . . . . . . 16, 82, 112

TBLTRN                                              Page 144
Index


EAC
     defined . . . . . . . . . . . . . . 20, 83
end of statement
     indicated by ,  . . . . . . . . . . 56
END
     defined . . . . . . . . . . . . . . 20, 83
     defining symbol identical to  . . . 66
EOD
EOD
     versus BOD  . . . . . . . . . . . . 76

FIL
     defined . . . . . . . . . . . . . . 84
FIN
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 84

HIA
     defined . . . . . . . . . . . . . . 27, 84

IF class
     at start of symbol definition . . . 101
     defined . . . . . . . . . . . . . . 37
     in table entry definition . . . . . 109
     NST after . . . . . . . . . . . . . 35
     termination of range by END . . . . 20, 83
     text string after . . . . . . . . . 57
     text string symbol after  . . . . . 58
     within range of deferred insertion  26
     within range of IF class  . . . . . 37
IFA
     defined . . . . . . . . . . . . . . 85
IFD
     defined . . . . . . . . . . . . . . 85
IFE
     defined . . . . . . . . . . . . . . 85
IFG
     defined . . . . . . . . . . . . . . 86
IFGE
     defined . . . . . . . . . . . . . . 86
IFL
     defined . . . . . . . . . . . . . . 86
IFLE
     defined . . . . . . . . . . . . . . 86
IFN
     defined . . . . . . . . . . . . . . 86
IFNA
     defined . . . . . . . . . . . . . . 86
IFNO
     defined . . . . . . . . . . . . . . 87
IFO
     defined . . . . . . . . . . . . . . 87
IFU
TBLTRN                                              Page 145
Index


     defined . . . . . . . . . . . . . . 87
INC
     defined . . . . . . . . . . . . . . 87
input text
     storage after == closure  . . . . . 68
     storage after TTY control transfer  36
integer prefix
     as operator value . . . . . . . . . 22
     following constant instead of . . . 32
     list of operators which accept  . . 102, 125
     parenthetical expression instead of  32
IOR
     defined . . . . . . . . . . . . . . 87

JST
     defined . . . . . . . . . . . . . . 88

label
     (see address label)
LFT
     defined . . . . . . . . . . . . . . 12, 88
line
     length  . . . . . . . . . . . . . . 20, 36
list
     (see dump)
LMT
     defined . . . . . . . . . . . . . . 43, 89
LOA
     defined . . . . . . . . . . . . . . 27, 89
LOC
     . after . . . . . . . . . . . . . . 18, 62
     after WRD . . . . . . . . . . . . . 18
     defined . . . . . . . . . . . . . . 26, 90
     in symbol definition  . . . . . . . 26
LST
     defined . . . . . . . . . . . . . . 90

MSK
     defined . . . . . . . . . . . . . . 90
     example . . . . . . . . . . . . . . 24
multiple precision constant
     (see constant)
     (see value stack)

name stack
     defined . . . . . . . . . . . . . . 33
     example as address label stack  . . 43
     of DATA statement . . . . . . . . . 98
     of table entry (see address label)
NEG
     defined . . . . . . . . . . . . . . 91
NSN
     defined . . . . . . . . . . . . . . 35, 91
TBLTRN                                              Page 146
Index


     example . . . . . . . . . . . . . . 61
NST
     defined . . . . . . . . . . . . . . 35, 91
     defining symbol identical to  . . . 66
     in symbol definition  . . . . . . . 66
NSV
     defined . . . . . . . . . . . . . . 35, 91
NUL
     defined . . . . . . . . . . . . . . 32, 91
     example . . . . . . . . . . . . . . 75
null text string symbol
     after Do-If class . . . . . . . . . 38
     definition as . . . . . . . . . . . 66
     example . . . . . . . . . . . . . . 48
numeric symbol text
     as name stack . . . . . . . . . . . 35
     numeric suffix set by NSV . . . . . 91
     symbol prefix set by NSN  . . . . . 91

OCT
     defined . . . . . . . . . . . . . . 28, 92
     example . . . . . . . . . . . . . . 28
octal radix
     (see OCT)
operator codes
     list of . . . . . . . . . . . . . . 125
origin offset
     by packing pattern  . . . . . . . . 14, 63
     when performed  . . . . . . . . . . 15, 63

packing pattern
     ARG in definition . . . . . . . . . 72
     argument definition . . . . . . . . 72
     automatic argument  . . . . . . . . 25, 72
     byte size after use of  . . . . . . 19
     defined . . . . . . . . . . . . . . 9, 24
     discussion of definition as . . . . 102
     end of argument list  . . . . . . . 70
     end of explicit argument  . . . . . 70
     example . . . . . . . . . . . . . . 25, 70, 71
     explicit argument . . . . . . . . . 68, 84
     global selection by TON . . . . . . 14, 97
     local selection . . . . . . . . . . 97
     NUL as null argument  . . . . . . . 91
     null  . . . . . . . . . . . . . . . 14, 24, 90
     null argument . . . . . . . . . . . 32
     origin increment specified by . . . 14
     parenthetical expression as argument  31
     redefiniton of  . . . . . . . . . . 64
     skip to origin increment  . . . . . 70
     trace of sample definition  . . . . 53
     use of in definition in range of TON  19
     within range of pattern selected by TON  19
TBLTRN                                              Page 147
Index


parenthetical expression
     as packing pattern argument . . . . 24
     defining constant . . . . . . . . . 31
     defining table entry  . . . . . . . 31
     discussion  . . . . . . . . . . . . 29
     within parenthetical expression . . 30
PFX
     defined . . . . . . . . . . . . . . 33, 92
     example . . . . . . . . . . . . . . 34
POP
     defined . . . . . . . . . . . . . . 35, 93
pre-assembled code
     defining symbol as  . . . . . . . . 61, 106
     discussion  . . . . . . . . . . . . 49
     interpretation of . . . . . . . . . 22
precision as value of operator
     (see PFX)
     (see value stack)
prefix
     (see integer prefix)
     (see PFX)
PSH
     defined . . . . . . . . . . . . . . 33, 93
     example . . . . . . . . . . . . . . 34

query operator
     (see $ $$ or $$$)
     discussion  . . . . . . . . . . . . 51

radix
     discussion  . . . . . . . . . . . . 28
     in parenthetical expression . . . . 30
     in symbol definition  . . . . . . . 73
     in table entries  . . . . . . . . . 97
     interpretation of integers under  . 21
     temporary . . . . . . . . . . . . . 78, 92
RED
     defined . . . . . . . . . . . . . . 93
redefinition
     of address label  . . . . . . . . . 71
     of constant . . . . . . . . . . . . 64
     of packing pattern  . . . . . . . . 64
RIT
     defined . . . . . . . . . . . . . . 12, 94
ROT
     defined . . . . . . . . . . . . . . 35, 94

SAV
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 94
SFT
     defined . . . . . . . . . . . . . . 94
shift
TBLTRN                                              Page 148
Index


     (see byte shift)
sign
     + . . . . . . . . . . . . . . . . . 64
     - . . . . . . . . . . . . . . . . . 64
     AND . . . . . . . . . . . . . . . . 71
     default . . . . . . . . . . . . . . 12
     in parenthetical expression . . . . 30
     IOR . . . . . . . . . . . . . . . . 87
     of automatic argument . . . . . . . 73
     of packing pattern argument . . . . 9
     should specify for unknown label  . 27
     when using BIT  . . . . . . . . . . 75, 77
     while packing table entry . . . . . 12
     XOR . . . . . . . . . . . . . . . . 100
single precision constant
     (see constant)
SIZ
     defined . . . . . . . . . . . . . . 10, 95, 112
space
     (see blank)
SRX
     defined . . . . . . . . . . . . . . 95
     example . . . . . . . . . . . . . . 29
     in parenthetical expression . . . . 30
     in symbol definitions . . . . . . . 95
stack
     (see name stack)
     (see value stack)
statement
     automatic continuation  . . . . . . 20, 73, 83
     continuation  . . . . . . . . . . . 20, 56
     end of == definition  . . . . . . . 68
     explicit continuation . . . . . . . 56
     length  . . . . . . . . . . . . . . 20
     local termination . . . . . . . . . 73
     termination . . . . . . . . . . . . 56, 83
STK
     defined . . . . . . . . . . . . . . 33, 96
     example . . . . . . . . . . . . . . 34
symbol definition
     as group of operators . . . . . . . 66
     as pre-assembled code . . . . . . . 61, 106
     as text string  . . . . . . . . . . 66
     by =  . . . . . . . . . . . . . . . 64
     discussion  . . . . . . . . . . . . 101
     IF class at start . . . . . . . . . 101
     temporary byte size set during  . . 19
     temporary packing pattern used in . 19
symbol dictionary
     restored by BLK . . . . . . . . . . 56, 76
     selective address removal by XAD  . 99
     selective operator removal by XSY . 100
symbol
TBLTRN                                              Page 149
Index


     defining as text string . . . . . . 58, 66
     definition by = . . . . . . . . . . 64
     definition by ==  . . . . . . . . . 36, 67
     detecting breaks between  . . . . . 20
     length  . . . . . . . . . . . . . . 23
     type of . . . . . . . . . . . . . . 23

table entry origin
     address label of  . . . . . . . . . 71
     increment of by packing pattern . . 14
table entry
     duplication by DUP  . . . . . . . . 16, 82, 112
     parenthetical expression in definition  31
table termination
     by BLK  . . . . . . . . . . . . . . 75
     by FIN  . . . . . . . . . . . . . . 84
     by SAV  . . . . . . . . . . . . . . 94
     fill with zeroes  . . . . . . . . . 84
TEL
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 96
     text string symbol after  . . . . . 58
     transparent symbol after  . . . . . 66
teletype
     symbol definition on  . . . . . . . 36, 67
test table
     discussion  . . . . . . . . . . . . 41
     specifying  . . . . . . . . . . . . 98
text replacement symbol
     (see text string symbol)
text replacement
     (see text string symbol)
     blanks between it and following symbol  46
     buffer overflow warning . . . . . . 20, 42
     by numeric symbol text  . . . . . . 91
     deferred  . . . . . . . . . . . . . 26, 37, 58
     deferred example  . . . . . . . . . 48, 107
     dump of . . . . . . . . . . . . . . 89
     loop termination set by LMT . . . . 43
text string symbol
     after Do-If class . . . . . . . . . 38
     as user defined function  . . . . . 42
     defined . . . . . . . . . . . . . . 25
     precedence over label definition  . 27
text string
     after ' . . . . . . . . . . . . . . 57
     after ''  . . . . . . . . . . . . . 61
     after ACC . . . . . . . . . . . . . 70
     after Do-If class . . . . . . . . . 38
     blanks in . . . . . . . . . . . . . 60
     defined . . . . . . . . . . . . . . 25
     defining symbol as  . . . . . . . . 66
     discussion of definition as . . . . 106
TBLTRN                                              Page 150
Index


     within pre-assembled code . . . . . 49
     within symbol definition  . . . . . 61
     within text string  . . . . . . . . 61, 66
     written as output . . . . . . . . . 60
TON
     defined . . . . . . . . . . . . . . 14, 97, 112
     example . . . . . . . . . . . . . . 70
     restoration after pattern use in definition  19
     second packing pattern within range of first  19
transparent symbol
     ,, not starting line  . . . . . . . 56
     and deferred text insertion . . . . 26
     definition as . . . . . . . . . . . 66
TRX
     defined . . . . . . . . . . . . . . 97, 112
     example . . . . . . . . . . . . . . 29
     in parenthetical expression . . . . 30
TST
     defined . . . . . . . . . . . . . . 41, 98
TTL
     defined . . . . . . . . . . . . . . 39, 98
     example . . . . . . . . . . . . . . 40, 77
TTY
     and deferred text insertion . . . . 37
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 36, 98
     within test table . . . . . . . . . 41

user defined function
     discussion  . . . . . . . . . . . . 26, 42, 106
     pre-assembly of . . . . . . . . . . 49

value stack
     adding item to by PSH . . . . . . . 93
     adding item to by STK . . . . . . . 96
     as value of operator  . . . . . . . 33
     defined . . . . . . . . . . . . . . 33
     precision as value of operator  . . 92
     removing item from by POP . . . . . 93
     rotating by ROT . . . . . . . . . . 94

WID
     defined . . . . . . . . . . . . . . 40, 99
     example . . . . . . . . . . . . . . 40, 77
WRD
     . after . . . . . . . . . . . . . . 18
     . after in packing pattern  . . . . 15, 63
     address label after . . . . . . . . 27, 71
     BIT after . . . . . . . . . . . . . 18
     defined . . . . . . . . . . . . . . 8, 99
     LOC after . . . . . . . . . . . . . 18

XAD
TBLTRN                                              Page 151
Index


     causes local statement termination  73
     defined . . . . . . . . . . . . . . 99
     redefinition of . . . . . . . . . . 56
XOR
     defined . . . . . . . . . . . . . . 100
XSY
     causes local statement termination  73
     defined . . . . . . . . . . . . . . 100
     redefinition of . . . . . . . . . . 56
     text string symbol after  . . . . . 58
     transparent symbol after  . . . . . 66