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