DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦3fa941c77⟧ TextFile

    Length: 240128 (0x3aa00)
    Types: TextFile
    Names: »D28«

Derivation

└─⟦4233bed4d⟧ Bits:30005867/disk04.imd Dokumenter (RCSL m.m.)
    └─⟦this⟧ »D28« 

TextFile

           
           \f





















DATA ENTRY  
RELEASE 2 
FORMAT LANGUAGE GUIDE
 
 
 
 
 
 
 












                               First Edition
A/S REGNECENTRALEN                 June 1978
     Information Department RCSL 42 - i 0664\f

F_       Authors:            Aino Andersen, Lis Clement, Peter Jørgensen,
                    Bodil Larsen 
Text Editor:        Peter Jørgensen                      
 
 
 
 
 
 
KEY WORDS:          MUS, Data Entry System, batch translation, format
                    language, definitions, coding sheets, execution,
                    examples.
 
 
ABSTRACT:           This manual contains a description of the format
                       language, and instructions on the writing, translation
                    and execution of format programs.
 
            
 
        
          
 
 
 
 
 
 
 
 
 
           
                     
                     
                     
                     
Users of             
                     

 
 
 
 
Copyright A/S Regnecentralen, 1978 
Printed by A/S Regnecentralen, Copenhagen\f

TABLE OF CONTENTS 
           
           
          0 INTRODUCTION 
           
          1 DEFINITIONS 
          1.1 Definition of Batch - Record - Field 
                1.1.1 Batch 
                1.1.2 Record 
                1.1.3 Field 
            1.2 Definition of Format, Subformat, and Field Description 
                1.2.1 Format 
                1.2.2 Subformat 
                1.2.3 Field Description 
                1.2.4 Field Definition - Field Program 
            1.3 Definition of Subprogram - Table 
                1.3.1 Subprogram 
                1.3.2 Table 
                1.3.3 Argument - Function 
            1.4 Definition of Register 
            1.5 Definition of Fill-In-the Blanks and Format Image 
                1.5.1 Fill-In-the-Blanks 
                1.5.2 Format Image - Subformat Image 
                1.5.3 Image Page - Fill-In-the-Blanks Mask 
           
          2 FORMAT - IMAGE -SUBPROGRAM - TABLE CODING 
            SHEETS 
            2.1 Format Coding Sheet and Image Coding Sheet 
                2.1.1 Format Coding Sheet 
                    2.1.1.1 Subformat Head 
                      2.1.1.2 Field Description 
                2.1.2 Image Coding Sheet 
                      2.1.2.1 Subformat Head 
                      2.1.2.2 Tag Desciption 
            2.2 Subprogram Coding Sheet 
                2.2.1 Subprogram Head 
                2.2.2 Subprogram Part 
            2.3 Table Coding Sheets 
                2.3.1 Single Entry Table Coding Sheets 
                      2.3.1.1 Table Hed With Argument Description 
                      2.3.1.2 Argument Part 
                2.3.2 Double Entry Table Coding Sheet 
                      2.3.2.1 Table Head With Argument Description 
                              and Function Description 
                      2.3.2.2 Argument and Function \f

2.3.3 Disctable Coding Sheet 
                      2.3.3.1 Table Head with Argument Description and
                              Function Description 
                      2.3.3.2 Argument and Function Part 
           
          3 THE FORMAT LANGUAGE 
            3.1 On Programming 
                3.1.1 What Is a Program? 
                3.1.2 The Elements of a Program 
                3.1.3 The Elements of the Format Language 
                3.1.4 Example In the Format Language 
            3.2 Character Set  
                3.2.1 Names 
                3.2.2 Arithmetic Operators 
                3.2.3 Relational Operators 
                3.2.4 Logical Operators 
                3.2.5 Punctuation Symbols 
            3.3 Operands 
                3.3.1 Constants 
                3.3.2 Registers 
                3.3.3 Fields 
                3.3.4 Subscripts 
            3.4 Notation 
            3.5 Arithmetic Expressions 
            3.6 Conditions 
                3.6.1 Relation 
                      3.6.1.1 Comparison of Numeric Operands 
                      3.6.1.2 Comparison of Nonnumeric Operands 
                3.6.2 Table Condition 
                3.6.3 Validity Condition 
                3.6.4 Compound Conditions 
            3.7 Format Language Statements 
                3.7.1 Unconditional Statements 
                      3.7.1.1 ALARM Statement 
                      3.7.1.2 ALLOW and DISALLOW Statements 
                      3.7.1.3 COMPUTE Statement 
                      3.7.1.4 CONNECT Statement  
                      3.7.1.5 DEFINE Statement 
                      3.7.1.6 DISPLAY Statement 
                      3.7.1.7 DUP Statement 
                      3.7.1.8 END Statement 
                      3.7.1.9 END SUBFORMAT Statement 
                      3.7.1.10 GOTO Statement 
                      3.7.1.11 LIMIT Statement 
                      3.7.1.12 MOVE Statement \f

                               3.7.1.13 NOTE Statement 
                      3.7.1.14 PERFORM Statement 
                      3.7.1.15 SEARCH Statement 
                      3.7.1.16 SELECT Statement 
                      3.7.1.17 SET Statement 
                      3.7.1.18 SKIP Statement 
          3.7.2 Conditional Statements 
                      3.7.2.1 IF Statement 
          3.8 Subprograms
    3.8.1 Statements In Subprograms 
                3.8.2 Operands In Subprograms 
           
          4 EXECUTION OF FORMAT PROGRAMS 
            4.1. Selecting Subformat 
            4.2 Terminating a Format Program 
            4.3 Execution of Subformats 
            4.4 Execution of a Field Description 
                4.4.1 Keyed Fields 
                4.4.2 Automatic Fields 
                      4.4.2.1 Duplicate Fields 
                      4.4.2.2 Constant Fields 
                      4.4.2.3 Increment Fields 
                4.4.3 Not Keyed Fields 
                4.4.4 Fields Skipped By SKIP 
                4.4.5 Fields Skipped By ENTER 
                4.4.6 Fields Skipped By RECORD RELEASE 
                      4.4.6.1 Fields With Kind KEYED, DUPLICATE, CONSTANT,
                              INCREMENT 
                      4.4.6.2 Fields With Kind NOT KEYED 
                4.4.7 Fields Skipped By BYPASS 
                4.4.8 Execution of a Field Program 
            4.5 Field Flags 
                4.5.1 Validity Flag 
                4.5.2 Skipped Flag 
                4.5.3 Flags For REKEY 
                4.5.4 Flags For EDIT 
            4.6 Registers 
            4.7 Replay 
            4.8 Execution of IMAGE 
           
          5 ENTERING NEW FORMATS, SUBPROGRAMS, AND TABLES 
            5.1 New Formats 
            5.2 New Subprograms 
            5.3 New Tables 
                5.3.1 New Core Tables \f

5.3.2 Disc Tables 
           
          6 PROGRAMMING HINTS 
            6.1 Screen Processing 
                6.1.1.ScreenProcessing Assigned To the System 
                6.1.2 Establishing Keying Position 
                6.1.3 Defining Tags 
            6.2 Reformatting 
            6.3Automatic Insertion 
                6.3.1 Not Keyed Fields 
                6.3.2 Constant Fields 
            6.4 Automatic Duplication 
            6.5 Automatic Incrementation 
            6.6 The Use of Tables 
            6.7 Partial Rekeying 
            6.8 The use of Pseudo Registers 
           
          APPENDIX 1   Required Space In Core For Formats, 
                       Subprograms and Tables 
          APPENDIX 11  Required Space On Disc For Batches 
          APPENDIX 111 Examples 
          APPENDIX 1V  Standard Formats FORM, IMAGE, SUBPR, and TABLE 
          APPENDIX V   Format Language Syntax 
          APPENDIX V1  Limitations 
          APPENDIX V11 Messages from TRANSLATE 
APPENDIX V111 Definitions of Terms 
APPENDIX 1X   Index\f

                   F_o_r_e_w_o_r_d_ 
           
           
          The main differences between the present second edition and the
          first edition of RC 3600 Date Entry Release 2 Format Language
          Guide (September 1976) are due to the extension of the RC 3600
          Data Entry System with 
           
                    - multiple - entried tables (disc tables) 
                    - subscript - intervals and conversion operators 
                    - pseudo - registers 
                    - infinite number of formats, subprograms and tables. 
           
          In order to handle multiple - entried tables the standard format
          TABLE has been changed and a new coding sheet (disc table coding
          sheet) has been introduced.  It is now possible to give between
          0 and 6 functions to one argument, so the syntax of the SEARCH -
          statement has been changed (variable number of destinations, and
          one or more destination(s) may be dummy). 
           
          To permit reference to groups of characters within fields or re-
          gisters subscript - intervals and conversion operators (ALPHA-
          NUMERIC, NUMERIC) have been introduced. 
           
          The system has been extended with a number of pseudo-registers
          containing run - time information, such as batchname, data and
          time. 
           
          Some instructions concerning (user defined) registers have been
          made in order to leave fill characters and justifications un-
          touched. 
           
                    a. automatic field (i.e. kind D, C or 1) must have
                       exactly the same length as the corresponding
                       register. 
                    b. after execution of an eventual field program 
                       connected to a D-field or an 1-field the field
                       contents will be copied into the register. 
                    c. 1-fields must be of numeric type (N). 
           
                   Beside this (user-defined) registers with a negativ value will be
          in embedded trailing representation (as for SS-fields).\f

                   In section 3.7.1.7 DUP-statement is described even if it is not
          implemented yet. The statement is used to simulate activation of
          the DUP control key. 
           
          Finally the TRANSLATE program has been changed in order to inform
          about the size of a translated item (i.e. format, image, sub-
          program and table).\f

                   HOW TO USE THIS GUIDE 
           
           
          The purpose of this manual is to enable the programmer to acquire
          a reliable working knowledge of the Format Language. It is be-
          lieved that a careful study of the six chapters and the append-
          ices will equip him with all the insight required to write and
          successfully operate Data Entry format programs. 
           
          The subjects dealt with in the various chapters and sections are
          listed in the Table of Contents.  For the novice, especially, the
          following order of study is considered preferable: 
           
          0 Introduction 
          3 The Format Language 
          1 Definitions 
          2 Format - Image - Subprogram - Table Coding Sheets 
          4 Execution of Format Programs 
          5 Entering New Formats, Subprograms, and Tables 
          6 Programming Hints 
          Appendices 1 - V11 
           
          Appendix V111 Definitions of Terms and IX Index should be con-
          sulted any time the user of this manual feels the need to orien-
          tate himself about the terminology.\f

         0         INTRODUCTION 
           
           
          The RC 3600 Data Entry System is a software package operating
          under the RC 3600 Disc Operating Multiprogramming Utility System
          (DOMUS). 
           
          It is an input data preparation key-to-disc system, receiving data
          from local or remote key stations under format program control,
          and storing data on disc files.  Whenever a data batch is comple-
          ted, it may be dumped on tape or transmitted for remote process-
          ing. New format programs can be created and the formats are
          available to all key stations simultaneously. 
           
          The system offers a great variety of data manipulation possibil-
          ities during data entering, including: validity checking, rekey-
          ing, editing, skipping, duplication, arithmetic operations, batch
          accumulating, etc. 
           
          Supervisor functions include: format program generation, data
          batch transmission, etc. 
           
          The keying of new format programs is done under control of a
          standard format and the resulting format text is stored on the
          disc as a normal data batch.  Now the supervisor may translate it
          to a format program and add it to the format library.  
           
          The manual contains a description of the format language, and
          instructions on the writing and translation of format programs. 
           
          As to the practical use of the RC 3600 Data Entry System, see
          User's Guide and Operating Guide.\f

         1         DEFINITIONS 
           
           
1.1       Definition of Batch - Record - Field 
           
 1.1.1     B_a_t_c_h_ 
          A b_a_t_c_h_is the area on a disc (a disc file), where the processed
          data are stored. The batch is output area for the processed
          document. 
           
 1.1.2     R_e_c_o_r_d_ 
          A batch consists of a number of r_e_c_o_r_d_s_. These records describe
          the logical structure of the processed document(s). 
           
1.1.3     F_i_e_l_d_ 
          A record contains a number of fields. A field is an element in
          the document that is processed as a single unit (e.g., a customer
          number, a name, an address). 
           
          E_x_a_m_p_l_e_ _1_ 
          See Figure 1.1.3. 
           
          Here the document is an invoice and the corresponding batch may
          consist of a number of documents structured in the same way as
          this invoice. 
           
          Logically, the document may be divided into the following three
          parts: 
           
                    A h_e_a_d_, containing: 
                    customer name, date, terms of payment, customer number,
                    payment to, invoice number 
                
                    An a_r_t_i_c_l_e_ _l_i_n_e_, containing: 
                    article name, quantity, unit price, and final price 
           
                    A t_o_t_a_l_, containing: 
                    total price 
           
          Each part corresponds to a record in the batch.\f

F_             Figure 1.1.3 
           
           
           \f

F_                 The individual columns in the document are viewed as separate
          elements, and each such element corresponds to a field in the
          batch. 
           
 
1.2       Definition of Format, Subformat, and Field Description 
           
 1.2.1     F_o_r_m_a_t_ 
          A f_o_r_m_a_t_ is a program for the Data Entry system. This program
          guides the keying of one or several given documents, and writes  
          the formatted information to a batch on the disc. 
           
1.2.2     S_u_b_f_o_r_m_a_t_ 
          Each format is divided into a number of separate s_u_b_f_o_r_m_a_t_s_. Each
          subformat controls the keying of one part of the document,
          possibly the whole document, and writes out the data, in
          formatted form, on the disc as one record. 
           
          Records produced with the same subformat have the same length,
          while records produced with different subformats may have
          different lengths. 
           
1.2.3     F_i_e_l_d_ _D_e_s_c_r_i_p_t_i_o_n_ 
          Each subformat consists of a number of f_i_e_l_d_ _d_e_s_c_r_i_p_t_i_o_n_s_ which
          describe the individual elements of a document. 
           
          Each field description controls the keying of one such element:
          calculating, reformatting, and writing it out as a field in a
          record. 
           
1.2.4     F_i_e_l_d_ _D_e_f_i_n_i_t_i_o_n_ _-_ _F_i_e_l_d_ _P_r_o_g_r_a_m_ 
          A field description consists of a f_i_e_l_d_ _d_e_f_i_n_i_t_i_o_n_ and a number
          of program statements which are referred to collectively as a
          f_i_e_l_d_ _p_r_o_g_r_a_m_._ 
           
          If we return to the previous example (Figure 1.1.3), then a
          format for the keying of such a document should look like this: 
           
                   FORMAT INVOI 
           
                   SUBFORMAT 1: 
                    customer  field description 
                             date            field description 
                             terms of payment field description 
                    customer no.     field description \f

                             payment to       field description
invoice no.      field description 
           
          SUBFORMAT 2: 
           
                    article name     field description 
                    quantity         field description 
                    unit price       field description 
                    final price      field description 
           
          SUBFORMAT 3: 
           
                    total price      field description 
           
          Now, if one uses 
           
          SUBFORMAT 1 once  
          SUBFORMAT 2 as many times as there are article lines in the
                      document 
          SUBFORMAT 3 once 
           
          - then all filled-in columns in a document of this kind can be
          read and processed as fields in a batch. 
           
 
1.3       Definition of Subprogram - Table 
           
          Special items in the format language are subprograms and tables.
          These are programmed and translated independently. They can be
          r_e_f_e_r_e_n_c_e_d_ _b_y_ _n_a_m_e_ from a format program or a subprogram. 
           
1.3.1     S_u_b_p_r_o_g_r_a_m_ 
          A s_u_b_p_r_o_g_r_a_m_ is a collection of program statements, which are
          executed when the subprogram is called (from a format program or
          a subprogram). 
           
1.3.2     T_a_b_l_e_ 
          A t_a_b_l_e_ is a collection of structured data which are referenced
          as one unit from a format program or a subprogram. 
           
1.3.3     A_r_g_u_m_e_n_t_-_ _F_u_n_c_t_i_o_n_ 
          A table is either sing-entried or multiple-entried. 
           \f

                   The 1st column is called a_r_g_u_m_e_n_t_: 
          The 2nd and following columns are called f_u_n_c_t_i_o_n_s_. 
           
          A single-entried table contains only one column (arguments). 
          A table consisting of two columns (argument and one function) is
          said to be double-entried. 
           
          Table data must be so structured that all columns are identical
          as to length and type. Examples on the use of tables are given in
          Section 6.6. 
           
 
1.4       Definition of Register 
           
          Each format program can command a number of registers (X01-X99). 
           
          They can be used to transfer information from one subformat to
          another, or as working locations, or when transferring data to
          and from subprograms. The contents of user-defined registers can
          always be changed by a field program. 
           
          Registers may be of different length. 
           
          The format program can also access a number of pseudo-registers
          containing run-time information. These registers cannot be
          changed by the format program. 
           
 
1.5       Definition of Fill-In-the-Blanks and Format Image 
           
          The i_m_a_g_e_, or f_i_l_l_-_i_n_-_t_h_e_-_b_l_a_n_k_s_, facility is another special
          item contained in the system. 
           
1.5.1     F_i_l_l_-_I_n_-_t_h_e_-_B_l_a_n_k_s_ 
          Fill-in-the-blanks guidance assists while keying by displaying
          prompting messages on the screen. Let us look at example 1
          again:a good guidance for keying subformat 2 will be the shown
          printouts. The place of the cursor will indicate the element to
          be keyed. 
           
          article name:quantity: 
               Unit price:            final price: 
           
          blanksblanks for 
          keying final price \f

                   Such printouts appear as fill-in-the-blanks (tags) on the screen.
          This means that there are blank spaces between the printouts and
          the specific columns are keyed in these blank spaces. 
           
1.5.2     F_o_r_m_a_t_ _I_m_a_g_e_ _-_ _S_u_b_f_o_r_m_a_t_ _I_m_a_g_e_ 
          A format may have a f_o_r_m_a_t_ _i_m_a_g_e_ attached. A format image is a
          program by which the fill-in-the-blanks are written to the oper-
          ator during keying. The image is sectioned so that each subformat
          has its s_u_b_f_o_r_m_a_t_ _i_m_a_g_e_. 
           
1.5.3     I_m_a_g_e_ _P_a_g_e_ _-_ _F_i_l_l_-_I_n_-_t_h_e_-_B_l_a_n_k_s_ _M_a_s_k_ 
          A subformat image may be further divided into several i_m_a_g_e_ _p_a_g_e_s_
          each of which structures a f_i_l_l_-_i_n_-_t_h_e_-_b_l_a_n_k_s_ _m_a_s_k_, i.e., a scree,
          image. n\f

         2         FORMAT - IMAGE - SUBPROGRAM - 
          TABLE CODING SHEETS 
           
           
          New formats, images, subprograms, and tables are coded on special
          coding sheets (documents), and the entering of these documents
          into the Data Entry system (by keying) is performed under format
          control, as with all other data. Batches created in this way are
          translated by calling the TRANSLATE supervisor program.  After a
          correct translation the new format, subprogram, or table will be
          available for use in the system. 
           
          In the following the coding sheets will be presented column by
          column, with those columns that require keying marked with an
          asterisk (*). 
           
 
2.1       Format Coding Sheet and Image Coding Sheet 
           
2.1.1     F_o_r_m_a_t_ _C_o_d_i_n_g_ _S_h_e_e_t_ 
          The format coding sheet consists of two parts: 
           
          subformat head, and 
          field descriptions. 
           
          See Figure 2.1.1 
           
2.1.1.1   S_u_b_f_o_r_m_a_t_ _H_e_a_d_ 
          Column 1*: Format name   Min. 1 character, max. 5 characters. The
                                   1st character must be a letter, the fol-
lowing may be either letters or digits.
The format name identifies the current
format in the system, and must differ
from all existing names of formats, sub-
programs, tables, etc. 
 
       Column 2*: Subformat name
1 character, letter or digit.The sub-
format name must be unique in the format.
The subformat name identifies the cur-
rent subform meaning the subsequent row
of descriptions.\f

F_                 Figure 2.1.1 \f

                   Column 3: Protected      Indicates whether the current subformat
                                   is protected against manual selection or
                                   not.  
                                    
                                   N = no protection, i.e., the subformat
                                       can be selected manually. 
                                        
                                   Y = protection, i.e., the subformat can
                                       only be selected by the format
                                       (through a SELECT statement). 
                                    
If this column is empty, then N is under-
stood. 
                                    
          Column 4: Comment        Min. 0 characters, max. 74 characters. A
                                   comment can be used for example, to de-
                                   scribe the format/subformat. 
         
2.1.1.2   F_i_e_l_d_ _D_e_s_c_r_i_p_t_i_o_n_. Columns 1-14 constitute the field definition,
          while column 15 is a field program part. 
           
          Column 1: Field          Min. 0 characters, max. 5 name characters.
                                   If field name is specified, the first
                                   character must be a letter and the fol-
                                   lowing either letters or digits. 
                                    
The field name identifies a field within
the current subformat, and must be uni-
que on subformat level. 
                                    
          The 2nd, 3rd, and 4th columns describe the current field's
          position of the screen (by indicating first field position). 
                                         
          Column 2:                Max. 1 digit: min. value Page = 1, max.
                                   value = 8. 
                                   Used to divide a record into a number of
                                   parts (pages), each of which consists of
                                   a number of fields which together make
                                   up the screen image. 
                                    
The pages are numbered from 1 up. When
page is indicated, its value must be
either equal to or greater than that of
last indicated pagenumber, and it must
                                   furthermore be accompanied by the
                                           indication of line and position (i.e.,
columns 3 and 4).\f

Column 3: Line           Max. 2 digits: min. value = 1, max.
                                   value = number of data lines on screen.
                                    
                                   Indicates on which data line the field
                                   is to be entered on the current page.
                                   When line is indicated, page and posi-
                                   tion must also be stated (=2nd and 4th
                                   columns).  
                                    
          Column 4: Position       Max. 2 digists: min. value = 1, max.
                                   value = number of characters on screen
                                   line. 
                                    
                                   Indicates position of first character of
                                   the field on current line, counting from
                                   left. The position number is limited so
                                   as to allow the whole field to fit into
                                   the remainder of the screen line. 
                                    
                                   When position is indicated, page and
                                   line (=2nd and 3rd columns) must also be
                                   stated. 
                                    
          If columns 2-4 are not keyed, one of the following will occur: 
           
          - If there is sufficient space left on current line: the field is
            placed after the preceding field, leaving a blank position in
            between. 
             
          - If there is not sufficient space left on current line: the field
            is placed on the next line, starting from the left-most position.
             
          - If there is not sufficient space left on the current screen
            image: the field is placed on the 1st data line of the next
            page, starting in the left-most screen position. 
             
          - If the current field is the first field in the subformat: the
            field is placed on the 1st data line of the first page, start-
            ing in the left-most screen position. 
           
             Column 5(*): Length      Max. 2 digits: min. value = 0, max.
                                   value = 80. 
                                    
                                   When length is greater than 0, the field
length will be "length" = number of\f

                                            characters. 
                                    
                                   When length = 0, only the program part
                                   (column 15) of a field description can
                                   be stated. When using a format, no field
                                   input is required, but the program part
                                   of such a field will be executed. 
                                    
                                   When length is left blank, no other col-
                                   umns but the program part (= column 15)
                                   of the field can be stated, in which case
                                   this program part is treated as a contin-
                                   uation of the program part of the preced-
                                   ing field description. 
                                    
          Column 6(*): Min. length  
                                   Max. 2 digits: min. value = 0, max. value
                                   = length (see 5th column) of current
                                   field description. 
                                    
                                   Indicates minimal number of characters
                                   to be keyed to the field: if min. length
                                   = 0, the field may be skipped. Indicated
                                   whenever length (column 5)'0. 
                                    
          Column 7(*): Type        Describes field type, i.e., which charac-
                                   ters should be keyed to the field.  
                                    
                                   N  = unsigned numeric. 
                                        Allowable characters: 
                                        1. Digits 0 through 9. 
                                        2. Fill characters. 
                                        The field will be treated as a posi-
                                        tive expression. 
                                    
                                           SN = signed numeric.
                                        Allowable characters: 
                                        1. Digits 0 through 9. 
                                        2. Minus sign (preceding first
                                           digit). 
                                        3. Fill characters. 
                                         
                                        When the minus sign is keyed, the
                                        field will be computed as a
                                                 negative expression, otherwise as\f

                                                 positive. A minus sign is stored in
                                        its keyed position, and occupies
                                        thus a field position that would be
                                        free if no minus sign were keyed
                                        (leading separate representation). 
                                         
                                   SS = signed numeric. 
                                        Allowable characters: 
                                        1. Digits 0 through 9. 
                                        2. Fill characters. 
                                         
                                        When the field is terminated by the
                                        -ENTER key, it is treated as a nega-
                                        tive expression: when the ENTER key
                                        is used, the field is assigned a
                                        positive value. 
                                         
                                        The negating operator is stored as
                                        an overpunch of the right-most chara-
                                        cter in the field - also called embed-
                                        ded trailing representation (0 becomes
                                        a , 1 becomes a J, 2 a K, 3 an L,etc.).
                                          
                                   AN = alphanumeric. 
                                        Allowable characters: all non-con-
                                        trol characters. 
                                         
                                   A =  alphabetic. 
                                        Allowable characters: 
                                        1. Letters A through Z. 
                                        2. . , - 
                                        3. Fill characters. 
                                         
                                   The field is indicated when length
                                   (column 5) '0. 
                                    
          Column 8 (*): Output position 
                                   Max. 3 digits: min. value = 0, max. value
                                   = 255. 
                                    
                                   The position of the field in the output
                                   records is indicated by a field number,
                                   which permits reformatting the field
                                   sequence from input. 
       \f

                                   Fields with output position = 0 (n_o_
                                   t_r_a_n_s_f_e_r_ _f_i_e_l_d_s_) are always placed after
                                   the last field in the output record. Such
                                   fields, though still stored in the output
                                   record (for possible rekeying) are not
                                   transferred by dump- or transfer
                                   programs.  
                                    
                                   The first field in the output record has
                                   output position = 1. 
                                    
                                   Only fields with a length (column 5) ' 0
                                   are counted. 
                                    
                                   Fields with length (column 5) = 0 are
                                   always placed after the last field in
                                   the output record. 
                                    
                                   Indication of output position isrequired
                                   if length (column 5) ' 0.
                                    
            Column 9: r/l            Indicates justification: 
                                    
                                   R = right-justified 
                                   L = left-justfied 
                                    
                                   If the number of keyed characters is less
                                   than field length (column 5), the keyed
                                   characters are placed either in the right-
                                   most or in the left-most part of the
                                   field. Remaining positions are filled
                                   with fill characters (see next column
                                   specification!). 
                                    
                                   No indication = automatic right-justifi-
                                   cation. 
                                    
          Column 10: Fill characters 
                                   Specifies fill characters to fill not
                                   keyed position in the field: 
                                    = space 
                                   0 = zero 
                                   * = asterisk 
                                    
                                   If fill character is not indicated,\f

                                   spaces are understood. 
                                    
          Column 11: Rekey         Indicates rekeying of a field: 
                                    
                                   Y =  rekey field. 
                                   N =  do not rekey field. 
                                   No indication implies rekeying. 
                                    
          Column 12: Display       Indicates whether an edited field shall
                                   be displayed on the screen or not.
                                   'Editing' includes, among other things,
                                   justification and insertion of fill
                                   characters. 
                                    
                                   N =  do not display edited field. 
                                   Y =  display edited field (contents of
                                        output record field) justified and
                                        filled with fill characters. 
                                    
                                   Example: Display = Y may be used to show
                                   input of a not keyed field. 
                                   No indication of display implies N. 
                                    
          Column 13: Kind          Indicates field kind, that is: 
                                    
                                   K =  keyed field. Field may be keyed. 
                                   N =  not keyed field. No operator action
                                        required: the field contentsmay
                                        be computed by the fieldprogram.
                                   C =  constant field. Field contains
                                        either the contens of the register 
                                        specified in colum 14, or currently
                                        keyed field input. 
                                   D =  duplication field. Either the field
                                        contains the value of the register 
                                        specified in column 14, or one keys
                                        in the current value when the field
                                        is encountered. In the latter case 
                                        the register is changed to thekey-
                                        ed value.    
                                   I =  incrementation field. As fordupli-
                                        cation field, except that - if no
                                        data are keyed in - the register
                                        value + 1 is entered to both field
and register. The field must be of\f

                                                 of type "N" (column 7).  
                                         
                                   When kind = C, D, or 1, indication of
                                   register (=column 14) is required. No
                                   indication of kind implies that kind =K.
                                    
          Column 14: Register      Max. 2 digits: min. value = 1, max. value
                                   = 99. 
                                    
                                   Specifies which register should be used
                                   to hold the field contents if field kind
                                   = C, D, or 1. 
                                    
                                   Register may only be specified for fields
                                   with kind (column 13) = C, D, or 1. 
                                     
          Column 15: Program statements 
                                   Min. 0 characters, max. 890 characters.
                                   Contains a part of a field program. A
                                   field program consists of a number of
                                   these columns, which together form none,
                                   one, or several statements (see Section
                                   3.7). These statements are used when,
                                   for instance, submitting current field
                                   to closer control than what is specified
                                   in columns 5 through 14. If a statement
                                   is to include a reference to a field,
                                   the corresponding field name (as speci-
                                   fied in its 1st column) must be indi-
                                   cated. 
                                    
                                   If there is not enough space in a column
                                   to include the whole field program, the
                                   field program may be continued in the
                                   next column 15, provided the preceding
                                   columns 1 through 14 are left empty. 
                                    
                                   A field program is considered to be
                                   concluded if a filled-in field descrip-
                                   tion (columns 1 through 14) or a new
                                   subformat is encountered, or if the
                                   format is concluded. 
                                    
                                   If the format coding sheet is not large
                                   enough to hold the whole subformat,\f

                                            continue on a new format coding sheet,
                                   but leave the subformat head empty. 
                                    
   2.1.2     I_m_a_g_e_ _C_o_d_i_n_g_ _S_h_e_e_t_ 
          The image coding sheet consists of two parts: 
           
          subformat head, and  
          tag descriptions. 
           
          See Figure 2.1.2. 
           
 2.1.2.1   S_u_b_f_o_r_m_a_t_ _H_e_a_d_ 
          Column 1*: Format name   Min. 1 character, max. 5 characters.
                                   Format name must be identical to the
                                   name of the format where the current
                                   format image is used. 
                                    
          Column 2*: Subformat name 
                                   1 character. 
                                    
                                   The subformat name must correspond to
                                   the name of a subformat within the
                                   format that uses those tags which are
                                   listed up to the appearance of the next
                                   subformat head or the end of the tag
                                   description. 
                                    
           Column 3: Comment        Min. 0 characters, max. 74 characters.
                                   Comments are used to describe e.g. the
                                   screen layout. 
                                    
     2.1.2.2   T_a_g_ _d_e_s_c_r_i_p_t_i_o_n_. Together, the 1st, 2nd, and 3rd columns describe
          the screen position of current tag (by indicating 1st text posit-
          ion. 
           
          Column 1*: Page          Max. 1 digit: min. value = 1, max. value
                                   = 8. 
                                    
                                   The tags of one subformat are hereby
                                   divided into a number of parts (pages).
                                   Each page contains as many tags as
                                   together create one screen image. 
                                    
                                   The pages are numbered from 1 up. Tag
                                   descriptions belonging to the same page
                                   must appear in one sequence.\f

Figure 2.1.2 
           \f

                                            The page numbers are printed in unbroken
                                   non-decreasing, sesquence. 
                                    
          Column 2*: Line          Max. 2 digits: min. value = 1, max. value
                                   = number of data lines on the screen.
                                   Indicates on which data line the actual
                                   text is to start (on current page). 
                                    
          Column 3*: Position      Max. 2 digits: min. value 1, max. value
                                   = number of characters on one screen
                                   line. Indicates position of the first
                                   character of current text on the current
                                   screen line. The position may not fill
                                   more than to allow the rest of the screen
                                   line to hold the whole text. 
                                    
          Column 4*: Text          Min. 1 character, max. 80 characters.
                                   This contains the tag which is to be
                                   used by the current subformat in the
                                   screen psotion specified by page, line,
                                   and position (that is, the 1st, 2nd, and
                                   3rd columns).  
                                    
                                   The following spaces (i.e., superfluous
                                   spaces to the right of text) are not
                                   included in the image. 
                                    
          
2.2       Subprogram Coding Sheet 
           
          The subprogram coding sheet consists of two parts: 
           
          subprogram head, and 
          subprogram parts. 
           
          See Figure 2.2 
                                    
         2.2.1     S_u_b_p_r_o_g_r_a_m_ _H_e_a_d_ 
          Column 1*: Subprogram name     
                                   Min. 1. character, max. 5 characters.
                                   1st character must be a letter, the foll-
                                   owing characters either letters or dig-
                                   its. A subprogram's name serves as its
                                   identification in the system and must
                                   differ from all existing formats,
                                   subprograms, tables, etc.\f

                   Column 2: Comment        Min. 0 characters, max. 74 characters.
                                   Comments may be used when, for instance,
                                   describing the subprogram. 
                                    
       2.2.2     S_u_b_p_r_o_g_r_a_m_ _p_a_r_t_ 
          Column 1: Program statement 
                                   Min. 1 character, max. 80 characters.
                                   Contains a part of a subprogram. A sub-
                                   program consists of a number of such col-
                                   umns, which together form one or more
                                   statements. (See Sections 3.7 and 3.8!).\f

                   Figure 2.2\f

                   Figure 2.3.1.\f

         2.3       Table Coding Sheets 
           
           
       2.3.1     S_i_n_g_l_e_ _E_n_t_r_y_ _T_a_b_l_e_ _C_o_d_i_n_g_ _S_h_e_e_t_s_ 
          A single entry table coding sheet consists of: 
           
          table head with argument description, and 
          argument part. 
           
          See Figure 2.3.1.  
          This coding sheet only applies to core-tables: coding of disc
          tables is performed on the disc table coding sheets (2.3.3). 
           
   2.3.1.1   T_a_b_l_e_ _H_e_a_d_ _W_i_t_h_ _A_r_g_u_m_e_n_t_ _D_e_s_c_r_i_p_t_i_o_n_  
          Column 1*: Table name    Min. 1 character, max. 5 characters. The
                                   first character must be a letter, the
                                   following either letters or digits. The
                                   table's name serves as its idification
                                   in the system, and must differ from all
                                   existing formats, subprograms. tables,
                                   etc.  
                                    
          Column 2*: Type          = S, for S_ingle entry table. 
                                    
          Column 3*: A-type        This describes the argument type, thus: 
                                    
                                   N =  unsigned numeric 
                                   AN = alphanumeric 
                                    
                 Column 4*: A-lgth        Max. 2 digits: min. value = 1, max. value
                                   = 80. 
                                     
                                   Gives the argument length. All arguments
                                   have the same length. 
                                    
         2.3.1.2   A_r_g_u_m_e_n_t_ _P_a_r_t_ 
          Column 1*: Argument      Min. 1 character, max. A-lgth
                                   characters. If A type= 
                                    
                                   N:   Right-justify the argument and fill
                                        not keyed position to the left of
                                        the argument with zeroes. 
                                   AN:  Left-justify the argument and fillnot\f

                   Figure 2.3.2 
           \f

                                   keyed positions to the right of the argu-
                                   ment with blanks (). 
                                    
                              An argument may n_o_t_ stretch over more than
                              one line. 
                               
    2.3.2     D_o_u_b_l_e_ _E_n_t_r_y_ _T_a_b_l_e_ _C_o_d_i_n_g_ _S_h_e_e_t_ 
                  A double entry table coding sheet consists of: 
           
          table head with argument description and function description,
          and argument part and function part. 
           
          See Figure 2.3.2. 
          This coding sheet only applies to core-tables: coding of disc
          tables is performed on the disc table coding sheets (2.3.3). 
           
        2.3.2.1   T_a_b_l_e_ _H_e_a_d_ _W_i_t_h_ _A_r_g_u_m_e_n_t_ _D_e_s_c_r_i_p_t_i_o_n_ _a_n_d_ _F_u_n_c_t_i_o_n_ _D_e_s_c_r_i_p_t_i_o_n_ 
          Column 1*: Table name    Min. 1 character, max. 5 characters. The
                                   first character must be a letter, and
                                   the following may be either letters or
                                   digits. The table name serves as its identi-
                                   fication in the system and must differ
                                   from all existing names of formats, sub-
                                   programs, tables, etc.  
                                    
          Column 2*: Type          = D, for D_ouble entry table. 
                                    
            Column 3*: A-type        Describes the argument type, thus: 
                                    
                                   N    = unsigned numeric 
                                   AN = alphanumeric 
                                    
               Column 4*: A-lgth        Max. 2 digits: min. value = 1, max.
                                   value = 80. 
                                    
                                   Indicates the length of argument. All
                                   arguments have the same length. 
                                    
          Column 5*: F-type        Describes the function type, thus: 
                                    
                                   N =  unsigned numeric 
                                   AN = alphanumeric 
                                    
          Column 6*: F-lgth        Mag. 2 digits: min. value = 1, max.
                                   value = 80 \f

                                            Indicates the length of function. All
                                   functions have the same length.  
                                    
2.3.2.2   A_r_g_u_m_e_n_t_ _a_n_d_ _F_u_n_c_t_i_o_n_ 
          Column 1*: Argument      Min. 1 character, max. A-lgth charac-
                                   ters. If A-type = 
                                    
                                   N:   Right-justify the argument and fill
                                        not keyed positions to the left of
                                        the argument with zeroes. 
                                   AN:  Left-justify the argument and fill
                                        not keyed positions to the right of
                                        the argument with blanks (). 
                                   An argument may n_o_t_ stretch over more
                                   than one line. 
                                    
          Column 2*: Function      Min. 1 character, max. F-lgth charac-
                                   ters. If F-type = 
                                    
                                   N:   Right-justify the function and fill
                                        not keyed positions to the left of
                                        the function with zeroes. 
                                   AN:  Left-justify the function and fill
                                        not keyed positions to the right of
                                        the function with blanks (). 
                                   A function may n_o_t_ stretch over more
                                   than one line. 
                                    
2.3.3     D_i_s_c_ _T_a_b_l_e_ _C_o_d_i_n_g_ _S_h_e_e_t_. 
          A disc table coding sheet consists of: 
           
          table head with argument and function description, and argument
          part and function part. 
           
          See Figure 2.3.3. 
           
2.3.3.1   T_a_b_l_e_ _H_e_a_d_ _w_i_t_h_ _A_r_g_u_m_e_n_t_ _D_e_s_c_r_i_p_t_i_o_n_ _a_n_d_ _F_u_n_c_t_i_o_n_ _D_e_s_c_r_i_p_t_i_o_n_ 
          Column 1*: Table name    Min. 1 character, max. 5 characters. The
                                   first character must be a letter, and
                                   the following may be either letters or
                                   digits. The table name serves as it
                                   identification in the system and must be
                                   the name of the disc table holding the
                                   table.  
                                    \f

                Column 2*: Type          = M, for possibly M_ultiple entry table.
                                    
           Column 7*: No. of Functions
A digit specifying the number of func-
                                   tions per argument: min. value = 0, max.
                                   value = 6. Zero means that the table is
                                   single-entried. 
                                    
            Column 8*: A - type      Describes the argument type, thus: 
                                    
                                   N =  unsigned numeric 
                                   AN = alphanumeric 
                                    
          Column 9(*): F1 - type   Describes the type of first function, thus.
                                     
                                   N =  unsigned numeric 
                                   AN = alphanumeric 
                                   Not filled in if no. of functions equals 0.
                                     
                Column 10(*): F2 - type  Describes the type of third function (see
                                   column 9). Not filled in if no of func-
                                   tions less than 3. 
                                    
                Column 11(*): F3 - type  Describes the type of third function (see
                                   column 9). Not filled in if no. of func-
                                   tions less than 3. 
                                    
          Column 12(*): F4 - type  Describes the type of fourth function
                                   (see column 9). Not filled in if no. of
                                   functions less than 4. \f

                   Figure 2.3.3 
           \f

          Column 13(*): F5 - type  Describes the type of fifth function
                                   (see column 9). Not filled in if no. of
                                   functions less than 5. 
                                    
          Column 14(*): F6 - type  Describes the type of sixth function
                                   (see column 9). Not filled in if no. of
                                   functions less than 6. 
                                    
       2.3.3.2.  A_r_g_u_m_e_n_t_ _a_n_d_ _F_u_n_c_t_i_o_n_ _P_a_r_t_  
          Column 1 (*): Operation  Operation to be performed: 
                                    
                                   I =  I_nsert, the argument in column 2 on
                                        the same line and functions in fol-
                                        lowing lines are to be inserted in
                                        the table as one entry. 
                                         
                                   U =  U_pdate, the functions in following
                                        lines replace the functions of an
                                        existing entry identified by the
                                        argument specified in column 2 of
                                        the same line. 
                                         
                                   D =  D_elete, remove the entry identified
                                        by the argument specified in column
                                        2 of the same line from the table. 
                                         
                                   E =  E_nd, specifies that the line is the
                                        last coding sheet. 
                                         
          Column 2(*): Arguments   If column 1 of the same line is filled
          and Functions            in with an E then column 2 is empty. 
                                    
                                   If column 1 of the same line is filled
                                   in with a D then column 2 is an argu-
                                   ment. 
                                    
                                   If column 1 of the same line is filled
                                   in with 1 or U then column 2 is an argu-
                                   ment and the following lines contain the
                                   corresponding functions in column 2
                                   (column 1 empty). The number of func-
                                   tions following the argument must corr-
                                   espond to the number specified in column
                                   7 of the table head (see above). \f

                                            Each argument and function must contain
                                   at least one and at most 80 characters,
                                   however, the lengths must correspond to
                                   the characteristics with which the disc
                                   table has been created, see Users Guide
                                   part 2. 
                                    
                                   An argument is specified as follows: 
                                    
                                   If A - type = 
                                   N:   Right - justify the argument and
                                        fill not keyed positions to the
                                        left of the argument with zeroes. 
                                         
                                   AN:  Left - justify the argument and
                                        fill not key positions to the right
                                        of the argument with blanks (). 
                                         
                                   An argument may n_o_t_ stretch over more
                                   than one line. 
                                    
                                   A function is specified as follows: 
                                    
                                   If Fx - type (x = function number) = 
                                   N:   Right - justify the function and
                                        fill not keyed positions to the
                                        left of the function with zeroes. 
                                         
                                   AN:  Left - justify the function and
                                        fill not keyed positions to the
                                        right of the function with blanks
                                        (). 
                                         
                                   A function may n_o_t_ stretch over more
                                   than one line.\f

         3         THE FORMAT LANGUAGE 
           
           
  3.1       On programming 
           
3.1.1     W_h_a_t_ _I_s_ _A_ _P_r_o_g_r_a_m_?_ 
          A program can be viewed as the exact description of the procedure
          whereby you solve a specific problem. 
           
          Consider, for example, the problem of crossing a street without
          being overrun by a car. In a case like this it is not enough to
          know that you must "watch out before you cross the street", if
          you have not been confronted with precisely the same problem
          before.  
           
          Therefore, the problem must be analyzed, which means that one
          must try to survey the parameters contained in the problem, and
          to assess their different roles therein. 
           
          In order to be able to cross the street you must therefore know
          that a car might come, that it might come from left or right, and
          that it might prevent your getting across the street. 
           
          Thus, a program must be a step by step description of how the
          parameters (operands) contained in a problem should be handled so
          as to arrive at the desired final stage from a given starting
          point. 
           
          In the example of crossing a street one may choose as a starting
          point the situation where the program ignores the events leading
          up to that situation. As the final stage one selects the arrival
          at the opposite sidewalk. Written in ordinary language, such a
          program might look something like this: 
           
          E_x_a_m_p_l_e_ _3_._1_._1_a_ 
           
                    1. Look to the left. 
                    2. Do you see a car? 
                       Yes: Go to point 3. 
                       No:  Clear, go to point 5. 
                    3. Is the car less than 200 meters away? 
                       Yes: Go to point 4. 
                       No: Clear, go to point 5. 
                    4. Is the car parked? 
                       Yes: Clear, go to point 5. \f

                      No:  Go to point 1. 
                    5. Look to the right. 
                    6. Do you see a car? 
                       Yes: Go to point 7. 
                       No:  Clear, go to point 9. 
                    7. Is the car less than 200 meters away? 
                       Yes: Go to point 8. 
                       No:  Clear, go to point 9. 
                    8. Is the car parked? 
                       Yes: Clear, go to point 9. 
                       No:  Go to point 1. 
                    9. Walk to the opposite sidewalk. 
                     
          As suggested above, one could use another, preceding, program to
          describe how to reach the specific street that one is to cross,
          and a following program to specify what actions to take once one
          has crossed the street. 
           
          Therefore, the starting situation could be altered a little. Let
          us say that, 
          1. You are standing at the curbline, and 
          2. You know that the street has two-way traffic or, if not, that
             it is a oneway street (with traffic from left or from right). 
           
          The source of your information may be a previously executed pro-
          gram (its final stage), and in rewriting the program given in the
          example above (3.1.1a) you can insert the information under 2.,
          so as to be able to decide which way to look: 
           
          E_x_a_m_p_l_e_ _3_._1_._1_b_ 

                    1. Does the street have two-way traffic? 
                       Yes: Go to point 1b. 
                       No:  Go to point 1a. 
                   1a. Does the street have one-way traffic from the left? 
                       Yes: Go to point 1b. 
                       No:  One-way, from the right: Go to point 5a. 
                   1b. Look to the left. 
                    . 
                    . 
                    . 
                    5. Does the street have one-way traffic only? 
                       Yes: Clear from the left, go to point 9. 
                       No:  Go to point 5a. 
                   5a. Look to the right. \f

                             . 
                    . 
                    . 
           
          We could further extend the example'sprogram. It could, for
          example, count all cars passing from the right, it could register
          how many times one had looked to the left before the street was
          safe to cross, and so on. This information could be fed into a
          following program, e.g., for statistical use. 
           
          All information that is available for a program in the starting
          situation is called i_n_p_u_t_ _p_a_r_a_m_e_t_e_r_s_, which, together with the
          program's own calculations, may influence the execution of the
          program. Information derived from a program is called o_u_t_p_u_t_
          p_a_r_a_m_e_t_e_r_s_. 
           
3.1.2     T_h_e_ _E_l_e_m_e_n_t_s_ _o_f_ _a_ _P_r_o_g_r_a_m_ 
          A program consists of a number of statements. Every single state-
          ment's execution marks a step on the way from the program's 
          starting situation to its final stage. The statements are written
          in a programming language, that is characterized by the firm
          rules that guide the formulation of a statement. 
           
          In the examples 3.1.1a and 3.1.1b every step can be viewed as a
          program statement. 
           
          The statements operate on a set of parameters (operands) that can
          be read and changed. 
           
          In Example 3.1.1b point 1 can be viewed as the read-out of the
          input parameter, stating the direction of traffic. If the example
          had been extended also to register the number of passing cars,
          this number would be a parameter that would be changed during the
          course of the program, from zero at the starting situation to the
          actual number of cars at the final stage. 
           
          The execution of the program begins with the execution of its
          first statement. This done, the next statement is executed, and
          so forth, until the program's last statement has been reached. 
           
          As can be seen from the examples above, the statements of a
          program are not executed in unbroken order: some statements are
          skipped as a result of the answers that are given to the
          questions presented. 
           \f

         3.1.3     T_h_e_ _E_l_e_m_e_n_t_s_ _o_f_ _t_h_e_ _F_o_r_m_a_t_ _L_a_n_g_u_a_g_e_ 
          There are two types of programs in the Format Language: f_i_e_l_d_ _p_r_o_
          g_r_a_m_s_ and s_u_b_p_r_o_g_r_a_m_s_. A field program consists of those program
          statements that belong to a field description. A subprogram is a
          labelled collection of program statements, which are executed
          when referenced from a program. Subprograms are used if the
          repeating of the same sequence of statements in several programs
          is to be avoided. 
           
          The operands for a program are called v_a_r_i_a_b_l_e_s_ and c_o_n_s_t_a_n_t_s_. 
           
          A variable is a place for storing information that can later be
          called upon and may be subject to change. In the Format Language,
          the variables are fields and registers. A variable is referenced
          from a program statement by calling it by name. A field is refer-
          enced by using the name of a field description, by which the pro-
          gram is made capable of processing a keyed unit of a specific
          part of a document. Fields cannot be referenced from subprograms.
           
          A register is referenced by putting an "X" before its number.
          Registers in a given format are used to transfer information
          between programs, and to store intermediate results within
          programs. 
          Variables may contain different kinds of values, e.g., numerical
          or alphabetical. 
           
          A constant contains information that cannot be changed by the
          program, but is entered into calculations together with
          variables. Like variables, constants may contain different kinds
          of values. In the Format Language several constants may be
          assembled into a specified table, and can thus be referenced
          collectively from the program. 
           
        3.1.4     E_x_a_m_p_l_e_ _I_n_ _t_h_e_ _F_o_r_m_a_t_ _L_a_n_g_u_a_g_e_ 
          P_r_o_b_l_e_m_: 
          A document contains, among other things, the following elements: 
           
   DATE OF PURCHASE         DATE OF PAYMENT        AMOUNT: 
           
          The two dates are specified by year and month (format YYMM). Date
          of purchase may not come later than date of payment. If purchase
          date coincides with date of payment, the program calculates a
          discount. 
           
          P_r_o_b_l_e_m_ _a_n_a_l_y_s_i_s_,_ _p_r_o_g_r_a_m_ _p_l_a_n_n_i_n_g_: \f

                   The first field program controls the date of purchase, and uses
          as input parameter a field with a keyed four digit number (speci-
          fied in the field program's definition section). 
           
          The second field program controls the date of payment in the same
          manner as the first field program it further compares the two
          dates. Thus the date of purchase will be one of the program's in-
          put parameters. 
           
          Since these dates are identically checked, one can use a subpro-
          gram, with the date itself as the input parameter and a correct/-
          not correct indication as the output parameter. Month and year
          are separately checked: the year must be within the 70-80 (inclu-
          sive) interval, which is used as a constant. 
           
          As for the amounts, these are not subject to special verification
          and a corresponding field description therefore involves only the
          definition section. 
           
          Calculation of discounts is performed by the filed program of a
          'not-keyed field' (meaning a field which receieves its value
          solely from the calculating done by the program). As input para-
          meters the program uses the two dates and the amount, and the
          resulting discount amount will appear in the field as the output
          parameter. The discount percentage is a constant. 
           
          Example 3.1.4a shows how to write field descriptions, and in
          Example 3.1.4b you will find the subprogram that checks the date.
           
          The program statements will be discussed later in this manual.
          Here oly the following information is given: 
           
          -  "DEFINE X01 4" defines a register of length 4. 
          -  "COMPUTE X01 = KDATE" transfers the contents of a field to a
             register. 
          -  "PERFORM DCHEK" causes the subprogram DCHEK to be executed,
             after which the program continues with the next statement. 
          -  "ALARM "DATE OF PURCHASE WRONG"" causes the writing of an
             error message, whereupon the information must be keyed anew,
             and the filed program is again executed from the beginning. 
          -  "IF KDATE' BDATE", 'means "IF GREATER THAN". 
          -  "DISCOUNT = AMOUNT/100*3" places the result of an arithmetical
             expression in a field. The discount rate is 3 percent of the
             amount. \f

                   Example 3.1.4a \f

                   Example 3.1.4b \f

         3.2       Character Set 
           
          The character set for the format language consists of 50 charac-
          ters. These characters and their corresponding meanings are: 
           
                    C_h_a_r_a_c_t_e_r M_e_a_n_i_n_g_ 
           
                    0,1,2,3,4,5,6,7,8,9      Digit 
                    A,B'C,D,E,F,G,H,I,J,K, 
                    L,M,N,O,P,Q,R,S,T,U, 
                    V,W,X,Y,Z                Letter 
                                            Space 
                    +                        Plus sign 
                    -                        Minus sign or hyphen 
                    *                        Asterisk 
                    /                        Stroke 
                    =                        Equal 
                    ,                        Comma 
                    ;                        Semicolon 
                    "                        Quotation 
                    (                        Left parenthesis 
                    )                        Right parenthesis 
                    '                        Greater than 
                                Less than 
                    :                        Colon 
                     
          The basic elements of the language are: 
           
          names, arithmetic operators, relational operators, logical oper-
          ators, and punctuation symbols. 
           
          The elements are explained in the following sections. 
           
         3.2.1     N_a_m_e_s_ 
          A name is composed of a combination of characters. Allowable
          characters are: 
            
          Letters: A through Z 
          Digits:  0 through 9 
           
          A name must begin with a letter. Only the five leading characters
          are significant. Thus PERFORM is equivalent to PERFO, for example
          and PERFO is equivalent to PERFORMANCE; but IN is not equivalent
          to INCORRECT: \f

                   There are 6 types of names: reserved names, user-defined field
          names, user-defined label names, user-defined subprogram names,
          user-defined table names, and user-defined subformat names. 
           
          Reserved names have a special predefined meaning to the system;
          therefore, these must never be used as user-defined names.
          Reserved names are listed in Table 3.2.1-1 
           
          Some of the reserved names are verbs. Verbs identify statements
          in the format language and are used in field programs and sub-
          programs. The verbs allowed in each of the two programs are
          listed in Table 3.2.1-2. 
           
          Table 3.2.1-1. L_i_s_t_ _o_f_ _R_e_s_e_r_v_e_d_ _N_a_m_e_s_ 
           
          ALARM                   GIVING                          SET 
          ALLOW                   GOTO                            SKIP 
          ALPHANUMERIC            IF                              SUBFORMAT
          AND                     IN                              THEN 
          AT                      INVALID                         TO 
          COMPUTE                 LIMIT                           VALID 
          CONECT                  MOD                             X00 
          DEFIND                  MOVE                           X01 
          DISALLOW                NOT                            . 
          DISC                    NOTE                            X99 
          DISPLAY                 NUMERIC                         XBATCH 
          DUP                     OR                              XDATE 
          ELSE                    PERFORM                         XJOB 
          END                     SEARCH                        XOPERATOR
          FIELD                   SELECT                          XTIME 
           \f

                   Table 3.2.1-2. L_i_s_t_ _o_f_ _R_e_s_e_r_v_e_d_ _V_e_r_b_s_ 
           
          may be used in:
V_e_r_b_                 F_i_e_l_d_ _P_r_o_g_r_a_m_                    S_u_b_p_r_o_g_r_a_m_
           
          ALARM                      x                              x 
          ALLOW                      x                               x 
          COMPUTE                    x                               x 
          CONNECT                    x                               x 
          DEFINE                     x                               x 
          DISALLOW                   x                               x 
          DISPLAY                    x                               x 
          DUP                        x                               x 
          END                        x                               x 
END SUBFORMAT              x                               x 
          GOTO                       x                               x 
          IF                         x                               x 
          LIMIT                      x                               x 
          MOVE                       x                               x 
          NOTE                       x                               x 
          PERFORM                    x                               x 
          SEARCH                     x                               x 
          SELECT SUBFORMAT           x 
          SET                        x 
          SKIP                       x                               x 
           
3.2.2     A_r_i_t_h_m_e_t_i_c_ _O_p_e_r_a_t_o_r_s_ 
          The arithemetic operators are used to perform specific arithmetic
          operations. The used symbols and their operation are: 
                    +                   Addition 
                    -                   Subtraction 
                    *                   Multiplication 
                    /                   Division 
                    MOD                 Modulo 
                    NUMERIC             Conversion of nonnumeric to numeric
                   ALPHANUMERIC        Conversion of numeric to nonnumeric
           
3.2.3     R_e_l_a_t_i_o_n_a_l_ _O_p_e_r_a_t_o_r_s_ 
          Relational operators specify the type of comparisons to be made
          between two operands in relational conditions. These symbols and
          their meaning are: 
           
                    '          Greater than
'=   Greater than or equal to
 =   Equal to \f

                                      Less than
                    =        Less than or equal to
' Not equal to 
           
3.2.4     L_o_g_i_c_a_l_ _O_p_e_r_a_t_o_r_s_ 
          Logical operators are reserved names that define a connection
          between operands. The reserved names and their use are: 
           
                    AND       Logical "and" 
                    OR        Logical "or" 
                    NOT       Logical "not" 
           
3.2.5     P_u_n_c_t_u_a_t_i_o_n_ _S_y_m_b_o_l_s_ 
          The punctuation symbols used in the program statement section of
          a format program, and their names, are: 
           
                             Space        (      Left parenthesis 
                    ,         Comma        )      Right parenthesis 
                    ;         Semicolon    "      Quotation mark 
                    :         Colon
           
           
3.3       Operands 
           
          The operands used in the format language are described in the
          following paragraphs. The operands are: 
                     
                    Constants 
                    Registers 
                    Fields 
           
          Registers and fields may be used with subscripts; this feature is
          described in section 3.3.4. 
           
          Operands may be used as destination or as source, except constants
          which only may be used as source. Source means that the operand
          is "input parameter" to a statement. Destination means that the
          operand is "output parameter" from a statement. 
           
          Operands may be numeric or nonnumeric. A numeric operand contains
          a numeric value. A nonnumeric operand contains a string of chara-
          cters. 
           
3.3.1     C_o_n_s_t_a_n_t_s_ 
          Constants are strings of characters which represent a specific
          value. There are two types of constants: numeric and nonnumeric. \f

                   A numeric constant is composed of digits, and must contain at least
          one digit but not more than 80 digits. The value of a numeric con-
          stant is always positive. Negative values are obtained in the state-
          ments, where it is allowed, by preceding the numeric constant by
          a minus. 
           
          Examples of valid numeric constants are: 
                    198 
                    50 
                    091 
           
          Examples of invalid numeric constants are: 
           
                    -198      Sign is not allowed 
                    1.5       Cannot contain a decimal point 
                    9,85      No comma allowed 
           
          A nonnumeric constant can contain any characters including those
          not in the format language character set, except quotation marks.
          The constant must be enclosed in quotation marks. A nonnumeric
          constant can be from 0 to 78 characters. 
           
          Examples of valid nonnumeric constants: 
           
                    "MONTH IS GREATER THAN 12" 
                    "19876" 
                    "TYPE N FOR NO, Y FOR YES" 
                    " 
           
          Example of invalid nonnumeric constant: 
           
                    "TYPE "N" FOR NO"  Cannot contain quotation marks 
           
          A nonnumeric constant may look like a numeric constant, but the
          two are not identical. They are both stored as characters, but a
          numeric constant is interpreted as a numeric value. Thus the
          numeric constant 00190 is equivalent to the numeric constant 190,
          but the nonnumeric constant "00190" is not equivalent to the non-
          numeric constant "190" or "190". 
           
3.3.2     R_e_g_i_s_t_e_r_s_ 
          Registers have been added to extend the possibilities of the
          language. Registers are normally used in three connections. They
          are used for transferring data from one record to another, for
          transferring data to and from a subprogram and for computations.\f

                   Registers are defined by the DEFINE statement, see Section 3.7.1.5.
            
          The letter X followed by any number from 01 to 99 is used to name
          a register. As many registers as needed can be used in a format
          program. The numbers used need not be sequential, but should be
          sequential starting with 01 to conserve storage. 
           
          Examples of valid register names: 
           
                    X01 
                    X11 
                    X99 
           
          Examples of invalid register names: 
           
                    X00      Digits not 01 to 99 
                    X1       Too few digits 
                    X010      Too many digits 
           
          A register contains eithre numeric or nonnumeric data. The type
          of data is dependent of the program statement, which had the reg-
          ister as destination last time (e.g., the MOVE statement makes
          the register nonnumeric, the COMPUTE statement numeric). Data are
          always stored as characters in the register. The length of a reg-
          ister is declared by a DEFINE statement and is the number of
          character positions in the register. The DEFINE statement must be
          executed before any other statement referring to that register.
          The DEFINE statement must be executed before any other statement
          referring to that register. The DEFINE statment gives no type to
          the register; the type is given first when the register is used
          as destination in a statement. It is allowed to change the type
          of a register during exectuion of the format program. 
           
          If nonnumeric data are stored in a register, and the number of
          characters in the data is smaller than the register length, data
          are stored from left to right and the remaining positions in the
          register are filled with spaces. If the number of characters in
          the data is greater than the register length the right-most chara-
          cters are truncated. 
           
          Numeric data are right-justified in the register, and remaining
          postiions are filled with zeroes if the data are created by the
          COMPUTE statement. The negating operator of data representing a 
          negative value will be stored as for type SS (see 2.1.1.2). If
          the number of significant digits in the data is greater than the\f

                   the register length, a runtime error will occur. 
           
          Numeric data stored automatically in a register (automatic fields,
          see 4.4.2) will always be identical to the data stored in the
          field also with respect to justification, fill characters and
          representation of negating operator. 
           
          An automatic field, of which the length of the register unequals
          the length of the field, will cause a runtime error when the field
          is encountered 
           
          The system furthermore contains a number of pseudo-registers con-
          taining run-time information which may be accessed by programs. 
           
          The pseudo-registers are predefined by the system their names
          belonging to the reserved names of the language. This means that
          these registers may be accessed without having been defined by
          DEFINE statements in the format program, and that they do not
          claim storage to be used. 
           
          The contents of the pseudo-registers cannot be altered by the
          programs which means that they cannot occur: 
           
          - On the left side of the equal sign in COMPUTE statements (see
            3.7.1.3). 
          - after the word GIVING in CONNECT and SEARCH statements (see
            3.7.1.4 and 3.7.1.14) 
          - after the word TO in MOVE statements (see 3.7.1.11). 
          - in field definitions (see 2.1.1.2, column 14:register). 
 
          Apart from these limitations the pseudo-registers may be used in
          all connections where registers are allowed as source operands.
          The operand type of the pseudo-registers is nonnumeric. 
           
          The pseudo-registers are: 
           
                    length in 
          n_a_m_e_      c_h_a_r_a_c_t_e_r_s_          t_y_p_e_      c_o_n_t_e_n_t_s_ 
           
          XBATCH    5                   AN        Name of the batch in
                                                  which processed data are
                                                  stored. 
          XDATE     8                   AN        Year, month, and day in
                                                  the format: YY.MM.DD
                                                  corresponding to the time\f

                                                 at which a readout of the register
                                        occurs. 
          XJOB      5         AN        Name of the job to which the batch
                                        is belonging. 
          XOPERATOR 3         AN        Operator initials of key station
                                        operator. 
          XTIME     8         AN        Hour, minute, and second in the
                                        format: HH.MM.SS corresponding to
                                        the time at which a readout of the
                                       register occurs. 
           
          Operator initials are the initials given by the key station oper-
          ator when work on a key station is initiated. For further details
          see Users Guide, Part 1, which also describes when and how name
          of batch and job are entered by the keying operator. 
           
3.3.3     F_i_e_l_d_s_ 
          Fields are numeric or nonnumeric depending on their type as
          specified in the field definition: 
           
                    F_i_e_l_d_ _D_e_f_i_n_i_t_i_o_n_ _t_y_p_e_         O_p_e_r_a_n_d_ _T_y_p_e_ 
           
                    N                             numeric 
                    SN                            numeric 
                    SS                            numeric 
                    AN                            nonnumeric 
                    A                             nonnumeric 
           
          Current field is the field which field description contains the
          field program. 
           
          Any field before (in the same subformat) and including current
          field is allowed as source operand in a field program. No field,,
          except current field, is allowed as destination operand and curr-
          ent field is only allowed as destination if it is not keyed (i.e.,
          kind = N). 
           
          The following rules apply to not keyed fields used as destination
          operands: 
          1. It is only allowed to store nonnumeric data in fields of type
             A or AN, and numeric data in fields of type N, SN, or SS. 
              
          2. When nonnumeric data are stored and the number of characters
             in the data is smaller than the field length, the data are
             left- or right-justified depending on the specification in the\f

                      field definition, and the remaining positions are filled with
             the fill character specififed in the field definition. 
              
             If the number of characters in the data is greater than the
             field length, the right-most characters are truncated. Then it
             is checked whether the field contents correspond with the type
             assigned in the field definition, otherwise a runtime error
             will occur (only applies for type = A). 
              
             Examples of storing nonnumeric data: 
              
          Field                         Justi- 
          l_e_n_g_t_h_    T_y_p_e_      F_i_l_l_      f_i_c_a_t_i_o_n_  S_o_u_r_c_e_    F_i_e_l_d_ _c_o_n_t_e_n_t_s_ 
           
            6       A                  L         "ABC"  "ABC" 
            4       A                  L         "ADDRESS" "ADDR" 
            6       A                  L         "ABC"     "ABC" 
            6       A                  R         "ABC"     "ABC" 
            6       A                  L         "123"     runtime error 
            3       AN                 R         "JANUARY" "JAN" 
           10       AN                 R         "JANUARY" "JANUARY" 
            6       AN                 L         "123"     "123" 
           
          3. When numeric data are stored and the number of significant
          digits (leading zeroes are ignored) is smaller than the field
          length, the data are left- or right-justified depending on the
          specification in the field definition, and the remaining posi-
          tions are filled with the fill character specified in the
          field definition.  
          If the number of significant digits is greater than the field
          length a runtime error will occur. It is then checked whether the
          field contents correspond with the assigned type in the field
          definition, otherwise a runtime error will occur (only applies
          for type =N). 
           
          Examples of storing numeric data: \f

                   Field                         Justifi- 
          l_e_n_g_t_h_    T_y_p_e_      F_i_l_l_      c_a_t_i_o_n_    S_o_u_r_c_e_    F_i_e_l_d_ _c_o_n_t_e_n_t_s_ 
           
          5         N         0         R         155       00155 
          5         N         0         R         -50       runtime error 
          5         N         0         R         555555    runtime error 
          5         SN                 R         -50       -50 
          5         SN                 R         -50000    runtime error 
          5         SN        0         L         -50       -5000  
          5         SS        0         R         59        00059 
          5         SS        0         R         -55555    5555n 
          5         SS        0         R         -51       0005j 
 
3.3.4     S_u_b_s_c_r_i_p_t_s_ 
          Subscripts are used to refer to individual characters or groups
          of characters in a register or a field. 
           
          The syntax of subscripts is (notation is described in 3.4): 
           
                    numeric constant    : numeric constant 
           
          A single character is accessed by supplying one subscript. A group
          of characters is accessed by supplying the leftmost subscript fol-
          lowed by the rightmost subscript of a sequence of adjacent charac-
          ters in a register or field. A group of characters consists of two
          or more characters. 
           
          Subscripts should be in the range 1 to the length of the register
          or the field, where 1 is the leftmost subscript. 
           
          Examples of subscripting are: 
           
                    MOVE XDATE(4:5) TO MONTH, 
                    COMPUTE A = B(3) * B(5), 
                    COMPUTE X01(5) = 9, 
                    MOVE "DD" TO X03(7:8), 
           
          If at run-time, the value of the subscript exceeds the size of the
          register or the field being subscripted, a runtime error will
          occur. 
           
          When destination operands are supplied with subscripts, please
          notice the following rules: 
           
          1.  Only the contents of the character position(s) specified by
              the subscript is changed. The justification and filling\f

                       described in the preceding section are not executed. 
               
          2.  A negative value cannot be assigned to a subscripted numeric
              operand. 
               
          3.  A register must be initialized before it is used as destina-
              tion with subscript. The initialization may be performed by
              any statement which has the register as destination. The ini-
              tialization is necessary because when registers are used as
              destination with subscript, it is required that the type of
              the source and the type of the register concur. 
               
              Example: If a register is used nonnumerically it may be in-
              itialized with a MOVE statment. 
               
                    MOVE  "  TO X01 
               
              and then used with subscript, e.g., 
               
                    MOVE "A" TO X01(1), 
                    MOVE "Z" TO X01(10), 
              If a register is used numerically it may be initialized with
              a COMPUTE statement: 
               
                    COMPUTE X02 = 0 
                     
              and then used with subscript, e.g., 
               
                    COMPUTE X02(1) = 5, 
                    COMPUTE X02(3) = 9, 
               
            4.  It is not necessary to initialize a field before it is used
              as destination, because a not keyed field is always filled
              with the specified fill character before a field program is
              executed. 
               
          5.  After a field is used as destination with subscript, the con-
              tents of the field are checked against the type of the field
              (only applies to type A), and a runtime error will occur if
              the contents and the type do not correspond. 
               
 
3.4       Notation 
           
          The notation used in the remainder of this section is described
                   in the following paragraphs: \f

                   1.  All words printed in capital letters belong to the language.
              They are referred to as "reserved names". 
               
          2.  Variable entries which are to be supplied by the format pro-
              grammer are printed in lower case letters.  
           
          3.  When punctuation or other special characters are printed, they
              are required. 
               
          4.  Braces     enclosing vertically listed items indicate that one
              and only one of the items is required. 
               
          5.  Brackets    are used to enclose a portion which is optional. 
               
          6.  The ellipsis ... indicates that the preceding entity can occur
              one or more times in succession. 
               
               
    3.5       Arithmetic Expressions 
           
          Arithmetic expressions (or shortly: expressions) are used in cert-
          ain program statements (the IF and COMPUTE statements, see Section
           3.7). An arithmetic expression is composed of operands, parentheses
          and arithmetic operators according to certain rules which make an
          expression written almost as in the mathematical literature. 
           
          A simple example of a statement containing an arithmetic express-
          ion is: 
           
                    COMPUTE X01 = X01 + X02, 
           
          where "X01 + X02" is the expression the evaluation of it being
          the sum of values of register X01 and register X02. 
           
          The following rules concerning the type of result of an arithmetic
          expression must be observed: 
           
          1.  The evaluation of an arithmetic expression in COMPUTE state-
              ments must result in a numeric value. 

          2.  A relation (see 3.6.1) may compare either two arithmetic
              expressions giving nonnumeric values or two arithmetic expre-
              ssions giving numeric values. 
               \f

                   The arithmetic operators allowed are: 
           
               O_p_e_r_a_t_o_r_       M_e_a_n_i_n_g_ 
           
               +              addition            called adding       
               -              subtraction         operators  
               *              multiplication       
               /              division            called multiplying      
               MOD            modulo              operators 
               ALPHANUMERIC   convert numeric to nonnumeric    called conver-
               NUMERIC        convert nonnumeric to numeric    sion operators
           
          The most simple arithmetic expression consists of merely one
          numeric operand.  
           
          More complex arithmetic expressions may be composed by: 
           
          1.  separating two or more operands by one of the arithmetic
              operators; 
               
          2.  preceding one operand with one of the adding operators (e.g.,
              COMPUTE X01 = +5, COMPUTE X01 = X01); 
               
          3.  Subexpressions, enclosed in parentheses, may be used as an
              operand. 
               
           The rules for composing arithmetic expressions are: 
           
               fieldnamefieldname
          fieldname (subscripts)fieldname (subscripts)
 NUMERICregister                 +    NUMERIC  register
     +           register (subscripts)-register (subscripts)
     -         nonnumeric constant*nonnumeric constant
                                 /
MOD
numeric constant                      numeric constant
NUMERIC (expression)                  NUMERIC (expression) 
fieldname
fieldname (subscripts)
ALPHANUMERIC   register
register (subscripts)
numeric constant
(expression) \f

                   The following rules concerning conversion operators must be
          obeyed: 
           
          1.  The entity (fieldname, register, constant, or parenthesed
              expression) following the NUMERIC operator must be of non-
              numeric type. An operand to be converted by NUMERIC must only
              contain digits and fill characters and the conversion cannot
              result in a negative value (negating operator not allowed). 
               
          2.  The entity following the ALPHANUMERIC operator must be of
              numeric type. 
               
          Examples of arithmetic expressions are: 
                    X01 
                    FLD1 
                    59 
                    +X02(1) 
                    -59 
                    NUMERIC X10 
                    ALPHANUMERIC FLD5 
                    X01*FLD 
                    X04*NUMERIC XDATE (7:8) 
                    X01 + X02)/2 
                    ALPHANUMERIC (NUMERIC X06*3) 
                    FLD1 MOD 10 + FLD2 MOD 10 
                    (FLD1(1)*2+FLD1(2)*3)/(FLD(1)+FLD(2)) 
                    ((A+B) * (C+D) + (A+B)/2) MOD 10 
           
          An arithmetic expression is evaluated in the following order: 
           
          1 (first):  Subexpression in parentheses 
          2        :  Conversion operators (ALPHANUMERIC, NUMERIC) 
          3        :  Multiplying operators (*,/,and MOD) 
          4 (last) :  Adding operators (+ and -) 
           
          When a sequence of operators has the same priority, the operators
          are executed in order of their occurence from left to right. 
           
          An example of evaluating an expression: 
           
          Consider the expression: 
           
                    -(A+B)* (C-D)/2 \f

                   First the subexpressions in parentheses are evaluated. A is added
          to B giving a temporary result, namely R1, and D is subtracted
          from C giving another temporary result R2. The expression may now
          be shown as: 
           
                    -R1 * R2 /2 
           
          Now the multiplying operators are executed in order of their occur-
          rence from left to right, therefore R1 is multiplied to R2 giving
          the temporary result R3, and the expression may be shown as: 
           
                    -R3 /2 
           
          The second multiplying operator is executed: R3 is divided by 2
          giving R4. Finally, R4 is negated, and the evaluation is compl-
          eted. 
           
          The following examples show the evaluation of divisions: 
           
               e_x_p_r_e_s_s_i_o_n_     r_e_s_u_l_t_     e_x_p_r_e_s_s_i_o_n_r_e_s_u_l_t_ 
           
               7/3              2        7 MOD 3              1 
               7/(-3)         - 2        7 MOD (-3)           1 
               (-7)/3         - 2        (-7) MOD 3         - 1 
               (-7/(-3)         2        (-7) MOD (-3)      - 1 
           
     
3.6       Conditions 
           
          Conditions are used in the so.called conditional statements (the
          IF statement, see Section 3.7). A condition causes the path of
          control to be altered depending upon whether the condition is
          true or false. A simple example is the following statement: 
           
                    IF TOTAL X01 THEN COMPUTE X02 = X02 + 1, 
           
          The condition is "TOTAL X01". If TOTAL is less than X01, the
          condition is true and the new value of X02 is computed. If TOTAL
          is not less than X01, the condition is false and control is trans-
          ferred to the next statement following the IF statement. 
           
          In the format language the following types of conditions are
          allowed: 
           
          relations, validity conditions, and table conditions. \f

                   A condition may be either simple or compound. A simple condition
          is a relation, a validity condition or a table condition. A com-
          pound conditon is composed of conditions, parantheses, and logical
          operators. 
           
  3.6.1     R_e_l_a_t_i_o_n_ 
          A relation is a comparison of two operands, either of which can
          be a field name, a register, a constant, or an arithmetic expre-
          ssion. The operands are separated by a relational operator which
          specifies the type of comparison to be made between the two
          operands. The allowable relational operators and their corres-
          ponding meanings are: 
           
                    R_e_l_a_t_i_o_n_a_l_ _o_p_e_r_a_t_o_r_           M_e_a_n_i_n_g_ 
           
                    ;                             greater than 
                    ;=                            greater than or equal to 
                    =                             equal to 
                    =                           less than or equal to 
                                                less than 
                    ;                           not equal to 
           
          The syntax of a relation is: 
           
                     field name
                     field name (subscripts)                  field name (subscripts)
          registerrelational op.register
register (subscripts)register (subscripts)
constantconstant
arithmetic expression   arithmetic expression 
           
          The following rules apply to relational conditions: 
           
          1.  A numeric operand can only be compared with another numeric
              operand. 
               
                2.  A nonnumeric operand can only be compared with another non-
              numeric operand. 
               
            3.  Comparisons of numeric and nonnumeric operands are not allowed
              When needed, however, the conversion operators NUMERIC and
              ALPHANUMERIC may be used to convert the type of an operand. 
               \f

                   Examples of relations: 
           
                    X01 ' = 0 
                    X01 = X02 
                    X01 * 2 - A = X02 
                    D = "JENSEN" 
                    (A + B) ' 3 
                   X05 = "TEXT" 
                    X03(1) * 2 ' = 10 
                    (A(1) + A(2) MOD 10 = 0 
                    ALPHANUMERIC FLD = "*****" 
                    YEAR = XDATE (1:2) 
           
   3.6.1.1   C_o_m_p_a_r_i_s_o_n_ _o_f_ _N_u_m_e_r_i_c_ _O_p_e_r_a_n_d_s_ If the operands are numeric the
          respective values of the operands are compared. 
           
       3.6.1.2   C_o_m_p_a_r_i_s_o_n_ _o_f_ _N_o_n_n_u_m_e_r_i_c_ _O_p_e_r_a_n_d_s_ The characters used in non-
          numeric operands are ordered according to their position in a
          sequence of (all) characters. The relation between two characters
          is determined by their positions in the sequence of characters.
          The character sequence in ascending order is: 
           
                    (space) 
                    ! 
                    # 
                    < 
                    % 
                    & 
                    " 
                    ( 
                    ) 
                    * 
                    + 
                     
                    - 
                    . 
                     
                    0 through 9 
                    : 
                    ; 
                     
                    = 
                    ' 
                    ? 
                    Æ \f

                             A through Z 
                    
                     
           
          When nonnumeric operands are of equal length (i.e., they contain
          the same number of character positions), characters in correspon-
          ding positions of the two operands are compared starting with the
          left-most position and proceeding to the right-most position. If
          all the characters are the same through the last position, the
          operands are considered equal. If a pair of unequal characters is
          encountered, the position in the character sequence is determined
          for each character. The operand containing the highest character
          position is considered to be the greatest of the two operands.
          See the examples below! 
           
          When nonnumeric operands are of unequal length (i.e., they do not
                   contain the same number of character positions), the longest oper-
          and is treated as if the right-most characters were truncated, to
          make it the same length as the other operand. The comparison is
          then made as though they were the same length. 
           
          Examples of comparing two nonnumeric operands A and B: 
           
                                TRUE                   
          A           B         RELATION     EXPLANATION 
           
          "JENSEN"    "HANSEN"  A ' B        Operands are of equal length. 
                                             Characters are compared from 
                                             left to right. J comes after H
                                             in the character sequence. 
           
          "FIELD"     "FIELDS"  A = B        The right-most character is 
                                             truncated in B. 
           
          "29"        "199"     A ' B        The right-most character is 
                                             truncated in B, and 2 follows 
                                             1 in the character sequence. 
           
          "39"       "029"     A B        0 comes after space in the 
                                             character sequence. 
           
          "HANSEN"    "HANSON"  A B        Characters are compared from 
                                             left to right, the first pair 
                                             of unequal characters is E and
                                             O, and E is preceding 0 in the
                                             character sequence. \f

         3.6.2.    T_a_b_l_e_ _C_o_n_d_i_t_i_o_n_ 
          A table condition is used to search a table for a specific argu-
          ment. The syntax of a table condition is: 
           
               field name 
               field name (subscripts) 
               register                      IN table name 
               register (subscripts) 
               constant 
           
          The table name identifies the table in the library of tables used
          The table may be either a single.entried or a double-entried core
          table, but not a DISC table (see Section 5.3). 
           
          The arguments in the table, specified by table name, are searched
          for a match against the operand preceding the word IN. If a match
          is found the condition is true, otherwise the condition is false.
           
          The operand preceding IN and the arguments in the table must be
                   of the same type (i.e., either numeric or nonnumeric). The methods
          for comparing operands as described in Sections 3.6.1.1 and
          3.6.1.2 are also used when evaluating a table condition. 
           
          Examples of table conditions: 
           
                    X01 IN TABL1 
                    FLD IN CTABL 
                    FLD(1) IN CTABL 
           
   3.6.3     V_a_l_i_d_i_t_y_ _C_o_n_d_i_t_i_o_n_ 
          The validity condition determines whether a field is valid or
          invalid. The syntax of a validity condition is: 
           
                                   VALID 
                    field name     INVALID 
           
          Every field has an associated validity flag, which can be expli-
          citly set to valid or invalid by the SET statement (see Section
          3.7.1.16). Unless changed by a SET statement, the validity flag
          of a field is invalid if an error has been detected and not
          corrected, otherwise the validity flag is valid. 
           
           
           \f

         3.6.4.    C_o_m_p_o_u_n_d_ _C_o_n_d_i_t_i_o_n_s_ 
          Conditions, parentheses, and logical operators may be combined to
          form a compound condition. 
           
          The logical operators and their meanings are: 
           
                    L_o_g_i_c_a_l_ _O_p_e_r_a_t_o_r_    M_e_a_n_i_n_g_ 
                                                              
                    OR                  logical disjunction 
                    AND                 logical conjunction 
                    NOT                 Logical negation 
           
          The syntax of a compound condition using the AND or OR operator
          is: 
           
                          AND                     AND
(condition)     OR      (condition)     OR      (condition) 
           
          The syntax of a compound condition using the NOT operator is: 
           
                    NOT     (condition) 
           
          The results of the relationships between two conditions A and B
          are: 
           
          A        B        NOT (A)     (A) AND (B)     (A) OR (B)    
          true     true     false       true            true 
          true     false    false       false           true 
          false    true     true        false           true 
          false    false    true        false           false
           
                   Additional pairs of parentheses, enclosing subconditions, may be
          used to specify the order in which the compound conditions are to
          be evaluated. 
           
          The compound conditions are evaluated in the following order: 
           
          1 (first) :  Arithmetic expressions 
          2         :  Relational operators / table operator 
          3         :  Subconditions in parentheses 
          4         :  Logical NOT operator 
          5         :  Logical OR operator 
          6 (last)  :  Logical AND operator 
           
          When a sequence of operators has the same order, the operators\f

                   are executed in order of their occurrence from left to right. 
           
          Examples of compound conditions and their evaluation: 
           
                    NOT (A ' B) 
           
          First the relational condition A ' B is evaluated, then the
          result is negated. 
           
                    (X01 = X02) AND (A IN TAB1) 
           
          First the relational condition preceding the word AND is eval-
          uated, then the table condition following AND, and finally the
          AND operator is executed. 
           
                    NOT ( (X01 ' A) OR (X01  B)) 
           
          First the relational conditions preceding and following the word
          OR are evaluated, then the OR operator and finally the NOT oper-
          ator. 
           
                    NOT (X01 ' A) OR (X01 B) 
           
          First the relational condition following the word NOT is eval-
          uated, and the result is negated, then the relational condition
          following the word OR is evaluated, and finally the OR operator
          is executed. 
           
   
3.7       Format Language Statements 
           
          A statement is the basic unit of a field program or a subprogram.
          Each statement begins with a verb and describes some action to be
          taken. Normally this is an action which could not be specified in
          the checkbox part of the format coding sheet. 
           
          The statements are separated by commas, and a program is termi-
          nated by a comma. 
           
          A field program consists of none, one or more statements. 
           
          In the format language there are two categories of statements:
          conditional statements and unconditional statements. A condit-
          ional statement is one which contains some conditions that are
          tested to determine the path to be taken in the feild program
                   (the IF statement). An unconditional statement is one which\f

                   specifies an unconditional action to be taken. 
           
3.7.1     U_n_c_o_n_d_i_t_i_o_n_a_l_ _S_t_a_t_e_m_e_n_t_s_ 
 
3.7.1.1   A_L_A_R_M_ _S_t_a_t_e_m_e_n_t_. The ALARM statement is used to display error
          messages on the message part of the keystation screen. The syntax
          of the ALARM statement is: 
           
                                        nonnumeric constant 
                                        register 
                    ALARM               register (subscripts) 
                                        field name 
                                        field name (subscripts) 
           
          The ALARM statement displays the contents of the operand on the
          second line (the message part) of the keystation screen. State-
          ments following the ALARM statement are not executed, and the
          operator must either correct or bypass the field. 
           
          Examples of the ALARM statement: 
           
                    ALARM "FINAL PRICE NOT OK"' 
                    CONNECT "BATCH OUT OF BALANCE, DIFF=" TO X01 GIVING 
                    X02,
                    ALARM X02, 
           
    3.7.1.2   A_L_L_O_W_ _a_n_d_ _D_I_S_A_L_L_O_W_ _S_t_a_t_e_m_e_n_t_s_. The ALLOW and DISALLOW statements
          check current field for specific values, the ALLOW statement spec
          ifies allowable values, and the DISALLOW statement specifies in-
          correct values. The syntax for these statements is either: 
           
          ALLOW        +   numeric constant        +   numeric constant    
                       -                           -
            
          DISALLOW      nonnumeric constant         nonnumeric constant    
           
          or 
           
          ALLOW 
          DISALLOW      DISC table name 
           
          In the second form of the ALLOW/DISALLOW statement table name is
          a name which identifies the table in the library of core tables
          (the DISC option is not used) or in the library of DISC tables
          (the DISC option is used). The table may be either single or mul-
                   tiple entried. Current field is checked against the table
          arguments. \f

                   The type of the constants following the word ALLOW or DISALLOW,
          or the type of table arguments must correspond with the type of
          current field. The methods for comparing numeric and nonnumeric
          operands are described in Sections 3.6.1.1 and 3.6.1.2. 
           
          In the ALLOW statement, if the contents of the current field are
          not one of the specified values, the statements following the
          ALLOW statement are not executed, and the operator must correct
          or bypass the field. 
           
          In the DISALLOW statement, if the contents of the current field
          are one of the specified values, the statements following the
          DISALLOW statement are not executed, and the operator must
          correct or bypass the field. 
           
          Examples of the ALLOW and DISALLOW statements: 
           
                    ALLOW "HANSEN" "JENSEN", 
                    ALLOW 0 125 512, 
                    ALLOW CTABL' 
                           where CTABL is the name of a CORE table 
                    ALLOW "A" "ST" "XYZ", 
                    DISALLOW DISC TAB01, 
                           where TAB01 is the name of a DISC table 
                    DISALLOW -2 -1 0 +1 +2, 
           
         3.7.1.3   C_O_M_P_U_T_E_ _S_t_a_t_e_m_e_n_t_. The COMPUTE statement is used for arithmetic
          calculations. The syntax of the COMPUTE statement is: 
           
                    current field name 
          COMPUTE   current field name (subscripts)   = arithmetic expression
                    register 
                    register (subscripts) 
           
          The expression is evaluated (see Section 3.5) and the result is
          stored in the operand preceding the equal sign. The current field
          is allowed as destination only if it is a not keyed field and
          numeric in type. 
           
          Please note that nonnumeric operands containing only digits and
          fill characters may be entered in expressions by converting them
          to numeric types with the conversion operator NUMERIC. 
           \f

                   Examples of the COMPUTE statement: 
           
                    COMPUTE A1 =0 
                    COMPUTE X01 = X01 + PRICE, 
                    COMPUTE MONTH = DATE(3) * 10 + DATE (4) 
                    COMPUTE X01(1) = F1, 
                    COMPUTE X01(2) = X04(5), 
                    COMPUTE FLD = FLD + 1, 
                    COMPUTE X03 = NUMERIC X02 + 1, 
                    COMPUTE X01 (6:7) = F1 (8:9), 
           
          N_o_t_i_c_e_: The second example of the COMPUTE statement shows how you
          can make a total of a field (named PRICE) in a register. Each
          time PRICE is keyed the statement shown is executed and at the
          end of the registration it will hold the total. 
           
    3.7.1.4   C_O_N_N_E_C_T_ _S_t_a_t_e_m_e_n_t_. The CONNECT statement is used to connect two
          items and to store the resulting character string. The syntax of
          the CONNECT statement is: 
           
               field name                 field name                     current
          field name (subscripts)field name (subscripts)field
CONNECT   registerTOregisterGIVINGname
register (subscripts)register (subscripts)register
          constant                  constant
           
          The operands preceding and following the word TO are concatenated
          in left-to-right order. The resulting character string is stored
          in the operand following the word GIVING. Current field is only
          allowed as destination if it is a not keyed field and nonnumeric
          in type. The source operands can be either numeric or nonnumeric;
          if an operand is numeric it is interpreted as a nonnumeric char-
          acter string. 
           
          Examples of CONNECT statements: 
           
               CONNECT A TO B GIVING X01, 
                    where A = "ABC" and B = "DEF" causes X01 = "ABCDEF". 
               CONNECT "AMOUNT = " TO A1 GIVING X01, 
                    where A1 = 512 causes X01 = "AMOUNT = 512"
               CONNECT FLD TO " GIVING X01, 
                    where the lengths of FLD and X01 are equivalent, causes
                    X01 = contents of FLD. If FLD is numeric in type this
                    construction may be usesd to convert the contents of
                    FLD from numeric to nonnumeric type. \f

                        CONNECT "" TO X01 GIVING X01, 
                    This construction will shift the contents of X01 one 
                    position to the right and a space will be stored in the
                    first position of X01. 
                     
         3.7.1.5.  D_E_F_I_N_E_ _S_t_a_t_e_m_e_n_t_. The DEFINE statement is used to define the
          length of a register in character positions. The syntax of the
          DEFINE statement is: 
           
               DEFINE         register  numeric constant 
           
          The numeric constant defines the register length in character
          positions. The upper limit for the register length is 255 char-
          acter positions, but to conserve storage the register size should
          be as small as possible. The length of a register must be defined
          by a DEFINE statement before the register is used in any other
          statement, or before the register is used in connection with
          automatic duplication, insertion or incrementation (i.e., kind =
          D, C, or 1). It is only allowed to redefine a register, if it is
          equivalent in length to the first definition. 
           
          Example of the DEFINE statment: 
           
               DEFINE X01 1, 
           
          N_o_t_i_c_e_: The pseudo-registers mentionned in section 3.3.2 are
          pre-defined. The define statement is only used for defining
          registers named X01 - X99. 
           
3.7.1.6   D_I_S_P_L_A_Y_ _S_t_a_t_e_m_e_n_t_. The DISPLAY statement is used to display
          operator information on the message part of the keystation
          screen. The syntax of the DISPLAY statement is: 
           
                              nonnumeric constant 
                              register 
                    DISPLAY   register (subscripts) 
                              field name 
                              field name (subscripts) 
           
          The DISPLAY statement displays the contents of the operand on the
          second line (message part) of the keystation screen, and it will
          be displayed until some other message to the second line occurs.
          The display statement can be used for simple fill-in-the-blanks
          keying and for debugging format programs by displaying register
          contents. \f

                   Examples of the DISPLAY statement: 
           
                    DISPLAY "KEY YOUR INITIALS", 
                    DISPLAY X01, 
           
  3.7.1.7   D_U_P_ _s_t_a_t_e_m_e_n_t_. (Not yet available) The DUP statement is used to
          simulate activation of the DUP control key. The syntax of the DUP
          statement is: 
           
                    DUP numeric constant FIELDS 
           
          The numeric constant defines the number of following Constant,
          Duplication, and Incrementation fields to be created as if the
          DUP control key was activated. If the number of fields referenced
          to a field beyond the record a runtime error will occur as will
          be the result if a Keyed field is encountered before the speci-
          fied number of fields have been treated. Otherwise the statements
          following the DUP statement are not executed and the action
          specified by the statement is performed. 
           
          Examples of DUP statement: 
           
                    DUP 1 FIELD 
                    IF FLD = X01 THEN DUP 3 FIELDS, 
           
          N_o_t_i_c_e_: If an error, calling upon operator intervention, occurs
          before the number of fields have been treated then the action
          specified by the DUP statement is interrupted and a message will
          be displayed on the key staton display screen as would be the
          case if the DUP key had been pressed the same number of times as
          specified by the statement. 
           
  3.7.1.8   E_N_D_ _S_t_a_t_e_m_e_n_t_. The END statement is used to terminate a format or
          a subprogram. It must physically be the last statement of the
          format or the subprogram. The syntax of the END statement is: 
           
                    END 
           
   3.7.1.9   E_N_D_ _S_U_B_F_O_R_M_A_T_ _S_t_a_t_e_m_e_n_t_. The END SUBFORMAT statement is used to
          terminate any subformat except the last subformat, which is
          terminated by the END statement. When required, the END SUBFORMAT
          statement must physically be the last statement in the subformat.
          The syntax of the END SUBFORMAT statement is: 
           
                    END SUBFORMAT \f

         3.7.1.10  G_O_T_O_ _S_t_a_t_e_m_e_n_t_. The GOTO statement is used to transfer control
          from one part of the program (that is, a field program or a sub-
          program) to another statement in the same program. The syntax of
          the GOTO statement is: 
           
                    GOTO label 
           
          A statement may be labeled by assigning it a name followed by a
          colon (additional labels are allowed). The label is used in a
          GOTO statement to pass control to the statement after the label. 
           
          Labels must be defined within the program that contains the ref-
          erence to the label, and a GOTO  statement cannot reference a
          label in another program. 
           
          Examples of labels and the GOTO statement: 
           
                    IF X01 0 THEN GOTO ERROR, 
                    - 
                    - 
                    ERROR: ALARM "BATCH OUT OF BALANCE", 
                     
                    AGAIN: IF X01 =0 THEN GOTO NEXT, 
                    COMPUTE X01 = X01 - 1, 
                    - 
                    GOTO AGAIN, 
                    - 
                    NEXT: 
   
      3.7.1.11  L_I_M_I_T_ _S_t_a_t_e_m_e_n_t_. The LIMIT statement is used to check current
          field against a range of values. The syntax of the LIMIT statement
          is: 
           
               LIMIT     +     numeric constant     +     numeric constant
-                          - 
           
          The LIMIT statement is only allowed if current field is numeric
          in type. 
           
          The second value must be greater than or equal to the first value.
          The range includes the smallest and the largest value. 
           
          If the check falls, the statements following the LIMIT statement
          are not executed, and the operator must either correct or bypass
          the field. \f

                   Examples of the LIMIT statement: 
                     
                    LIMIT 1000 5000, 
                    LIMIT -500  999,
                    LIMIT -510 -509, 
                    LIMIT   -1   11, 
                    LIMIT    0    0, 
           
    3.7.1.12  M_O_V_E_ _S_t_a_t_e_m_e_n_t_. The MOVE statement is used for moving nonnumeric
          data from one place to another, such as from one field to another
          The syntax of the MOVE statement is: 
           
                field namecurrent field name
                field name (subscripts)     current field name (subscripts)
          MOVE  nonnumeric constantTO register
registerregister (subscripts)
register (subscripts) 
                    
          The operand preceding the word TO is moved to the operand follow-
          ing the word TO. Both operands must be nonnumeric in type. Current
          field name is only allowed as destination if it is a not keyed
          field. 
           
          Examples of the MOVE statement: 
           
                    MOVE "TEXT" TO X02, 
                    MOVE X01(1) TO FLD1(3), 
                    MOVE X03 TO FLD4, 
                    MOVE FLD(1) TO FLD(2), 
                     
    3.7.1.13  N_O_T_E_ _S_t_a_t_e_m_e_n_t_. The NOTE statement is used to write a commentary
          which is shown on the source listing but is not used in the syst-
          em. The syntax of the NOTE statement is: 
           
                    NOTE      character string 
           
          The system ignores the character string following the word NOTE
          up to the first comma or semicolon. 
           
          Observe the following rules about the NOTE statement: 
           
          1.  The character string may contain any characters including
              those not in the format language character. 
               
             2.  The character string may proceed through more than one line. \f

                   3.  If quotation marks are used in the character string they must
              occur in pairs on a line. 
               
          4.  The NOTE statement must not be the last statement before ELSE
              (because there is no comma or semicolon before ELSE, see
              Section 3.7.2.1 about the IF statement). 
               
          5.  The character string may contain any reserved name. 
               
           6.  The character string may be empty. 
               
          Examples of the NOTE statement: 
           
                    NOTE CHECK DATE, 
                    NOTE THIS FIELD CONTAINS THE SALES PRICE, 
                    NOTE IF X01 '0 THEN FIELD 1 IS CORRECT, 
                    NOTE "JENSEN" IS AN INVALID NAME, 
                    NOTE "JENSEN" IS AN INVALID NAME. 
                              BUT "HANSEN" IS OK; 
                    NOTE, 
           
          N_o_t_i_c_e_: A field program must not end with a label, because labels
          are preceding statements. If a label is wanted at the end of a
          field program, a NOTE statrement with an empty character string
          may be used as last statement. 
           
    3.7.1.14  P_E_R_F_O_R_M_ _S_t_a_t_e_m_e_n_t_. A PERFORM statement is used to pass control
          from a field program to a subprogram, or from one subprogram to
          another subprogram. The syntax of the PERFORM statement is: 
           
                    PERFORM   subprogram name 
           
          The subprogram name must be in the subprogram library (see Sect-
          ion 5.2). Return from the subprogram is made to the statement
          following the PERFORM statement. 
           
          The PERFORM statement may occur as the last statement in a field
          program, in which case further statements are not required. 
           
          See further in Section 3.8 about subprograms. 
           
          An example of a PERFORM statement is: 
           
                    PERFORM   CHE10, 
           \f

         3.7.1.15  S_E_A_R_C_H_ _S_t_a_t_e_m_e_n_t_. The SEARCH statement is used to search a table
          for a specified argument and if the search is successful, to stor
          the function(s) of the argument, otherwise if the search is
          unsuccessful, to perform a specific action. The syntax of the
          SEARC statement is: 
           
                        field name
field name (subscripts)
SEARCHregister                  IN DISC table name
register (subscripts) 
                        constant 
                                  * 
                                  current field name 
                        GIVING    current field name (subscripts)
    register
register (subscripts) 

AT END    unconditoinal statement 
           
          Table name identifies the table in the library of the core tables
          (the DISC option is not used) or in the library of DISC tables
          (the DISC option is used). The table must not be single-entried. 
           
          Using the operand following the word SEARCH the table is searched
          for a match against the arguments of the table. 
           
          If the search is successful, the function(s) of the argument
          which matched will be stored in the operand(s) following the word
          GIVING, and the unconditional statement following AT END will not
          be executed. 
           
          Double-entried core-tables can only contain one function per
          argument, i.e. only one operand must be specified following the
          word GIVING. 
           
          If the table is a disc-table with more than one function per
          argument then as many operands as the number of functions per
          argument must be specified following the word GIVING. The first
          function corresponding to the argument will then be stored in the
          first operand specified, the second function in the second oper-
          and specified etc. 
           
          To prevent unwanted functions from being stored, an asterisk may
          be specified instead of one or more operands following the word
          GIVING. The place of an asterisk among the operand(s) defines the\f

                   unwanted function(s). 
           
          If the search is unsuccessful, control is transferred to the uncon-
          ditional statement following the words AT END, and the operand(s)
          after the word GIVING will not be changed. 
           
          The source operand must be of the same type as the table argu-
          ments. Current field is only allowed as destination if it is a not
          keyed field, and if it is of the same type as the table functions.
            
          Examples of the SEARCH statement: 
                     
                    SEARCH CUSNO IN CTABL GIVING X01 
                    AT END ALARM "CUSTOMER NUMBER NOT KNOWN", 
                     
                    SEARCH FLD1 IN ATABL GIVING FLD4 
                    AT END GOTO ERROR, 
                     
                    SEARCH FLD(1) IN ATABL GIVING X01 
                    AT END COMPUTE X01 = 0, 
                     
                    SEARCH ART NO IN DISC ARTTB 
                    GIVING * X01 X13** 
                    AT END ALARM "ARTICLE NUMBER NOT KNOWN", 
                    NOTE ONLY 2ND AND 3RD ARGUMENT OUT OF 5 ARE STORED, 
                     
                    SEARCH CUSNO, IN CTABL GIVING* 
                    AT END ALARM "CUSTOMER NUMBER NOT KNOWN", 
                     
          N_o_t_i_c_e_: If the search is unsuccessful no value is stored in the
          destination operand(s). 
           
  3.7.1.16  S_E_L_E_C_T_ _S_t_a_t_e_m_e_n_t_. The SELECT statement is used to change
          subformat under program control. The syntax of the SELECT
          statement is: 
           
                    SELECT SUBFORMAT    subformat name 
           
          The SELECT statement may appear only in the last field program in
          a subformat. The statements following the SELECT statement are
          not executed, and the subformat change is made. 
           
          Examples of the SELECT statement: 
           
                    SELECT SUBFORMAT 2, 
         IF X01 = 0 THEN SELECT SUBFORMAT E, \f

         3.7.1.17  S_E_T_ _S_t_a_t_e_m_e_n_t_. The SET statement is used to set the field status
          to valid or invalid. The syntax of the SET statement is: 
           
                    SET  field name     VALID 
                                        INVALID 
           
          The validity flag of the specified field is set valid or invalid,
          based upon the selected option. 
           
          Examples of the SET statement: 
           
                    SET FLD1 VALID, 
                    IF TOTAL ' X01 THEN SET A INVALID, 
           
          N_o_t_i_c_e_: The field status will n_o_t_ be replayed, i.e. once a field
          status is changed (in)valid it is treated as if it was (in)valid.
           
      3.7.1.18  S_K_I_P_ _S_t_a_t_e_m_e_n_t_. The SKIP statement is used to make an automatic
          skip to a forward field. The syntax of the SKIP statement is: 
           
                    SKIP  numeric constant   FIELDS 
           
          The numeric constant defines the number of fields to be skipped,
          which must be greater than 0. If the number of fields reference
          to a field beyond the record a runtime error will occur, other-
          wise the statements following the SKIP statement are not executed
          and the skip action is performed. The skipped fields are filled
          with fill characaters and their field programs are not executed. 
           
          Examples of the SKIP statement: 
           
                    SKIP 1 FIELD, 
                    IF FLD ' 10 THEN SKIP 2 FIELDS, 
           
    3.7.2     C_o_n_d_i_t_i_o_n_a_l_ _S_t_a_t_e_m_e_n_t_ 
    
3.7.2.1   I_F_ _S_t_a_t_e_m_e_n_t_. The IF statement is a conditional statement. It is
          used to make a path through the field program, depending on the
          result of the evaluation of the specified condition. The syntax
          of the IF statement is: 
           
               IF   condition   THEN   sentence   ELSE sentence  
           
          The condition following the word IF is evaluated. The the con-
          dition is true, the sentence following the word THEN is
          executed. Control is then passed to the next statement after the\f

                   IF statement, unless the sentence contains a GOTO statement, in
          which case control is passed to the GOTO label. 
           
          If the condition is false, the sentence following THEN is skipped
          and the sentence following the word ELSE is executed, or, if the
          ELSE option is omitted, the next statement after the IF statement
          is executed. 
           
          The IF statement may occur as last statement in a field program,
          in which case no following statement is required. 
           
          A sentence contains one or more statements, separated by a semi-
          colon, and terminated with a comma or the word ELSE. 
           
          A sentence following the word THEN may contain any statement
          except a conditional statement. A sentence following the word
          ELSE may contain any statement including a conditional statement.
           
          N_o_t_i_c_e_: 
           
          1.  Neither comma nor semicolon is allowed immediately before
              the word ELSE. 
               
          2.  A sentence following the word THEN is terminated when the
              word ELSE or a comma is encountered. 
               
          3.  A sentence following the word ELSE is terminated when the
              first comma is encountered. 
               
          Examples of the IF statement: 
                     
                    IF NOT (TOTAL = X04) THEN "ALARM TOTAL PRICE NOT OK" 
                    ELSE DISPLAY "END OK", 
           
                    IF X01 '0 THEN COMPUTE X02 = X02 + A; 
                                   COMPUTE X01 = X01 - 1, 
           
                    IF X01 X02 THEN COMPUTE X02 = X02 - A 
                    ELSE COMPUTE X02 = X02 + A; COMPUTE X03 = X03 - 1, 
                     
                    IF A ' B THEN GOTO C, 
                     
                    NOTE NEXT STATEMENT CHECKS IF A PREVIOUS (NUMERIC) 
                    FIELD ONLY CONSISTS OF FILL CHARACTERS (I.E. HAS BEEN 
                    SKIPPED), IF ALPHANUMERIC FLD5 = "******" THEN SKIP 2 
                    FIELDS,\f

         3.8       Subprograms 
           
          A subprogram is a program that is called from another program, by
          using the PERFORM statement. Control is transferred to the first
          statement in the subprogram, and returned to the calling program
          by the END statement in the subprogram. 
           
 3.8.1     S_t_a_t_e_m_e_n_t_s_ _I_n_ _S_u_b_p_r_o_g_r_a_m_s_ 
          The statements allowed in subprograms are: 
           
                    ALARM     (field name not allowed as operand) 
                    ALLOW     (the DISC table option is not allowed 
                    COMPUTE   (field names not allowed as operands) 
                    CONNECT   (field names not allowed as operands) 
                    DEFINE 
                    DISALLOW  (the DISC table option is not allowed) 
                    DISPLAY   (field name not allowed as operand) 
                    DUP 
                    END 
                    GOTO 
                    IF        (validity condition and field names as  
                              operands are not allowed) 
                    LIMIT 
                    MOVE      (field names not allowed as operands) 
                    NOTE 
                    PERFORM 
                    SEARCH    (the DISC table option is not allowed) 
                    SKIP 
                     
          N_o_t_i_c_e_: 
           
          1.  A subprogram must end with an END statement. 
           
          2.  A subprogram cannot call itself in a PERFORM statement. 
           
      3.8.2     O_p_e_r_a_n_d_s_ _I_n_ _S_u_b_p_r_o_g_r_a_m_s_ 
          Only registers and constants are allowed as operands in state-
          ments in subprograms. The register names refer to the same regis-
          ters as in the field programs, and a register may be used both in
          field programs and in subprograms. 
           
          Registers are used for transferring data to and from subprograms,
          as the format language contains no possibilities of defining sub-
          programs with parameters. 
           \f

                   Example: 
           
          Consider a problem, where you want a check-digit control in a
          numeric field. You program the check in a subprogram, for example
           
           
           
           
           C0001         CHECK-DIGIT CONTROL - X01 = CUSTOMER NUMBER 
           
           
           
     IF   ((X01 (1) * 5
          + X01 (2) * 4
       + X01 (3) * 3 
          + X01 (4) * 2 
          + X01 (5) * 1) MOD 11 ' 0 THEN 
     ALARM "INCORRECT CUSTOMER NUMBER", 
     END, 
           
          The corresponding field program may look as follows: 
           
           
           
           
           
           
           
           
           
           
     CUSNO          5         ON        1         COMPUTE X01=CUSNO, 
                                                  PERFORM C0001, \f

         4         EXECUTION OF FORMAT PROGRAMS 
           
           
         4.1       Selecting Subformat 
           
          After invoking a format the system is set ready to execute the
          first subformat. 
           
          The same subformat is run through cyclically until a new sub-
          format is selected. 
           
          A subformat can be selected manually by using the SUBFORMAT con-
          trol key, or it can be program-selected by execution of a SELECT
          SUBFORMAT statement. 
           
 
4.2       Terminating a Format Program 
           
          A format program is terminated by executing an END statement. 
           
 
4.3       Execution of Subformats 
           
          The field descriptions in a subformat are executed sequentially.
          After the initial sequential execution of all field descriptions
          in a subformat follows a cyclical repetition starting with the
          subformat's first field description, and so on. 
           
          This sequential process can be interrupted by a SKIP statement,
          or by using the RECORD RELEASE or the FIELD BACK control key. 
           
          By using the SKIP statement the execution of one or several sub-
          sequent field descriptions in a subformat can be skipped. 
           
          Pressing the RECORD RELEASE control key will cause the remaining
          field descriptions of a subformat to be skipped, provided this is
          allowed - see Section 4.4.6. 
           
          Pressing the FIELD BACK control key will cause a backward step in
          the field sequence of a subformat - though not beyond the current
          record. 
           
       
4.4       Execution of a Field Description 
           
          The execution of a field description is dependent on the field
          definition, the field input and previous skip instructions. There
          is a number of possible alternatives: \f

                   * The field is a KEYED field. 
          * The field is an AUTOMATIC field. 
          * The field is a NOT KEYED field (including 0-length fields). 
          * The field has been skipped by a SKIP statement.
* The field has been skipped by the ENTER key, i.e., no data input
          * The field has been skipped by the RECORD RELEASE key. 
          * The field has been skipped by the BYPASS key. 
           
  4.4.1     K_e_y_e_d_ _F_i_e_l_d_s_ 
          If a field is keyed (i.e. kind = K), the following steps will be
          executed in the named order: 
           
          * Right/left justification and insertion of fill characters. 
          * Length check. 
          * Minimum length check. 
          * Type check. 
          * Execution of the field program. 
           
       4.4.2     A_u_t_o_m_a_t_i_c_ _F_i_e_l_d_s_ 
          There are three kinds of automatic fields: 
           
          DUPLICATE fields (i.e. kind = D), 
          CONSTANT fields (i.e. kind = C), 
          INCREMENT fields (i.e. kind = 1). 
           
         4.4.2.1   D_u_p_l_i_c_a_t_e_ _F_i_e_l_d_s_. Two possibilities are open:  
           
          1.  Keying the field; 
           
          2.  Duplicating the field. 
           
          Keyed fields are executed as specified in 4.4.1. 
           
          Subsesquently, 
           
          * the field's contents are transferred to the register defined in
            the field definition. Un equal length of field and register
            cause a runtime error. 
           
          Pressing the DUPLICATE control key will cause the following to
          happen: 
           
           
           
           \f

                   * The contents of the register specified in the field description
            are transferred to the field. Un equal length of field and
            register cause a runtime error. 
             
          * A typecheck is performed. 
          * Execution of the field program. 
          * The contents of the field are transferred to the corresponding 
            register. 
           
        4.4.2.2   C_o_n_s_t_a_n_t_ _F_i_e_l_d_s_. There are two possibilities: 
           
          1.  Keying the field; 
           
          2.  Duplicating the field. 
           
          Keyed fields are executed as specified in 4.4.1. 
           
          Pressing the DUPLICATE control key will result in the field being
          executed as a DUPLICATE field, cf. 4.4.2.1. The contents of the
          field will n_o_t_ be transferred to the register after the execution
          of the field program. 
           
     4.4.2.3   I_n_c_r_e_m_e_n_t_ _F_i_e_l_d_s_. There are two possibilities: 
           
          1.  Keying the field; 
           
          2.  Duplicating the field. 
           
          Keyed fields are executed as specified in 4.4.1. 
           
          Subsequently, 
           
          * the field's contents are transferred to the register defined in
            the field definition. Unequal length of field and register
            cause a runtime error. 
           
          Pressing the DUPLICATE control key will have the following
          result: 
           
          * The contents of the register specified in the field definition
            are transferred to the field. Unequal length of field and reg-
            ister cause a runtime error. 
           
          * The field is incremented by 1.
 \f

                   * A typecheck is performed. 
          * Execution of the field program. 
          * The contents of the field are transferred to the corresponding
            register. 
             
         4.4.3     N_o_t_ _K_e_y_e_d_ _F_i_e_l_d_s_ 
           
          NOT KEYED fields are fields with kind = N or length = 0. Such
          fields will have not input during registration. 
           
          The following is performed: 
           
          * Insertion of fill characters. 
          * Execution of the field program. 
           
   4.4.4     F_i_e_l_d_s_ _S_k_i_p_p_e_d_ _b_y_ _S_K_I_P_ 
          If a field is skipped by using the SKIP statement, the following
          will occur: 
           
          * Insertion of fill characters. 
          * No execution of the field program. 
          * Register corresponding to duplicate or increment fields will n_o_t_
            be updated. 
           
       4.4.5     F_i_e_l_d_s_ _S_k_i_p_p_e_d_ _b_y_ _E_N_T_E_R_ 
          If a field is bypassed by simply pressing the ENTER key, the foll-
          owing will occur: 
           
          * Minimum length check, i.e. if minimum length is greater than
            zero, and error message appears and the field has to be keyed. 
           
          Otherwise, the following is performed: 
           
          * Insertion of fill characters. 
          * No execution of the field program. 
          * Registers corresponding to duplicate or increment fields will  
            n_o_t_ be updated. 
           
  4.4.6     F_i_e_l_d_s_ _S_k_i_p_p_e_d_ _b_y_ _R_E_C_O_R_D_ _R_E_L_E_A_S_E_ 
          Fields skipped by pressing the RECORD RELEASE key will be executed
          in accordance with the field's definition. 
           
   4.4.6.1   F_i_e_l_d_s_ _w_i_t_h_ _K_i_n_d_ _K_E_Y_E_D_,_ _D_U_P_L_I_C_A_T_E_,_ _C_O_N_S_T_A_N_T_,_ _I_N_C_R_E_M_E_N_T_. Fields
          with kind KEYED, DUPLICATE, CONSTANT, INCREMENT are executed as
          fields skipped with ENTER (see Section 4.4.5). \f

                   * If the minimum length of the field is not zero, an error mess-
            age appears, and the field must be keyed. Subsesquently, RECORD
            RELEASE is stopped, and normal execution is resumed in KEY,
            REKEY, or EDIT mode. 
             
  4.4.6.2   F_i_e_l_d_s_ _w_i_t_h_ _K_i_n_d_ _N_O_T_ _K_E_Y_E_D_. If the skipped field is of the NOT
          KEYED kind the following will happen: 
           
          * Insertion of fill characters. 
          * Execution of the field program. 
           
 4.4.7     F_i_e_l_d_s_ _S_k_i_p_p_e_d_ _b_y_ _B_Y_P_A_S_S_ 
          The BYPASS control key is used to bypass fields that one has
          given up keying correctly.  
           
          * The field will retain the contents it had before activating the
            BYPASS key, if the field has been keyed. 
          * The field program is not executed. 
          * Registers corresponding to duplicate and increment fields are
            n_o_t_ updated. 
 
       4.4.8     E_x_e_c_u_t_i_o_n_ _o_f_ _a_ _F_i_e_l_d_ _P_r_o_g_r_a_m_ 
          The statements in a field program are executed sequentially. 
           
            The whole field program is executed. However, any error detected
          through ALLOW, DISALLOW, or LIMIT, as well as execution of an
          ALARM, DUP, SKIP, or SELECT statement will cause the field pro-
          gram to be interrupted after such a statement. 
           
          The sequential processing of a field program can be interrupted
          by a GOTO statement. 
           
  
4.5       Field Flags 
           
          During exeuction of a field description the field is assigned two
          flags, which are independent of each other. They are: 
           
          Validity flag 
          Skipped flag. 
           
    4.5.1     V_a_l_i_d_i_t_y_ _F_l_a_g_ 
          This flag has two values: 
           
          VALID 
          INVALID \f

                   An INVALID flag is assigned to a field which 
           
          * is skipped by the BYPASS key, or 
          * is set INVALID by a SET statement, or 
          * is a "NOT KEYED" field containing an error, or 
          * is a keyed field containing an error, that has not yet been 
            corrected. 
           
          In other cases the field gets a VALID flag. 
           
          If a field in a record has an INVALID flag, the record will also
          get an INVALID flag. 
           
          You may ask for a field's validity flag in an IF statement. 
           
  4.5.2     S_k_i_p_p_e_d_ _F_l_a_g_ 
          This flag has three values: 
           
          NOT SKIPPED 
          SKIPPED 
          SKIPPED BY STATEMENT 
           
          A SKIPPED flag is given to a field which 
           
          * is skipped by the ENTER key, or 
          * is skipped by the BYPASS key, or 
          * is skipped by the RECORD RELEASE key. 
           
          A SKIPPED BY STATEMENT flag is given to a field which  
           
          * is skipped by the SKIP statement. 
           
          Otherwise, the field gets a NOT SKIPPED flag. We say the field is
          skipped if it has a SKIPPED flag or a SKIPPED BY STATEMENT flag
          and the field program is n_o_t_ executed. 
           
        4.5.3     F_l_a_g_s_ _f_o_r_ _R_E_K_E_Y_ 
          For fields specified as "REKEY YES" the flags in REKEY mode are
          set as for KEY mode when the fields are rekeyed. A field speci-
          fied as "REKEY NO" gets normally the same flags as the corres-
          ponding old field. But depending on the old field flags for "REKEY
          NO" fields some special actions occur: 
           
          If the old field validity flag is INVALID, the old field is not
                   used as field input but an error message appears and the field
          must be keyed as if it were specified as "REKEY YES". \f

                   If the old field skipped flag is SKIPPED BY STATEMENT and the
          field will not again be skipped by the SKIP statement, an error
          message appears and the field must be keyed as if it were speci-
          fied as "REKEY YES". 
           
   4.5.4     F_l_a_g_s_ _f_o_r_ _E_D_I_T_ 
          When fields are keyed in EDIT mode the flags are set as for KEY
          mode. When searching in EDIT mode the fields are normally given
          the same flags as the corresponding old fields. But depending on
          the old field flags some special actions occur: 
           
          If the old field validity flag is INVALID, the old field is not
          used as input, but the searching stops with an error message. 
           
          If the old field skipped flag is SKIPPED BY STATEMENT and the
          field will not again be skipped by the SKIP statement, the old
          field is not used as input, but the searching is stopped with an
          error message. 
           
   
4.6       Registers 
           
          Registers may be assigned directly in the field program, or indir-
          ectly when used for automatic fields (kind: duplicate or increment.
          In the latter case the field is not transferred to the register
          until after execution of the field program, so that the contents
          of the register will be e_x_a_c_t_l_y_ the same as the contents of the
          field.  
           
       4.7       Replay 
           
          When the format program is executed during keying, the format is
          said to be "playing" the batch. The format execution sesquence
          and the contents of the registers may be dependent on what is
          keyed. Therefore, a register of which the contents are affected
          by what is keyed must be changed whenever the field affecting it
          is changed. To revise the register contents and bring them up to
          date, the entrie batch must be "replayed" from start up to the
          point where the change is made. To save time during replay pict-
          ures of the registers are frequently saved in the batch, and the
          replay is actually performed from the nearest preceding register
          picture. 
           \f

                   Replay occurs: 
           
          * when the RECORD BACK key is used. 
          * when the FIELD BACK key is used. 
          * when the CLEAR key is used. 
          * when the SUBFORM key is used. 
          * when the RECORD key is used. 
          * when an error is detected during format program execution and a
            register has been changed in the format program. 
          * when keying or rekeying is reopened after the ESCAPE key has
            been used. 
           
          Be aware that the status of fields will not be replayed. 
           
           
    4.8       Execution of IMAGE 
           
          The execution of the format image belonging to a given format is
          given by the execution of the format itself. 
           
          In selecting subformat the corresponding subformat image is auto-
          matically used. 
           
          If a subformat image consists of only one page, the fill-in-the-
                   blanks mask will be replaced during the run of the subformat.
          This replacement occurs as each new page is specified in the
          field definitions.\f

         5         ENTERING NEW FORMATS, SUBPROGRAMS, AND TABLES 
           
           
          The keying of new formats, subprograms, or tables is controlled
          by a standard format. The result is a batch, which can be edited,
          saved, listed, etc., in the same way as with all other batches in
          the Data Entry system. 
           
          Before entering new formats or subprograms in the system all ref-
          erenced subprograms and tables must have been entered. 
           
          The entering of formats, subprograms, and tables is guided by the
          supervisor program TRANSLATE, with the exception of DISC tables
          which are treated separately. 
           
          TRANSLATE controls if the source batch is correctly structured
          and, if so, translates it into internal form. The name of the
          translated file is then included in the current library, after
          which the new format, or subformat, or table, can be referenced
          by its name. 
           
               
       5.1.      New Formats 
           
          The format text of the coding shetts is keyed under the control
          of the standard format FORM. 
           
          The keying of tags written on complementary coding sheets is
          controlled by the standard format IMAGE. 
           
          Both standard formats support fill-in-the-blanks guidance. 
           
          The FORM standard format contains 3 subformats (see Appendix IV):
           
          H - reads subformat head belonging to the new format; 
          F - reads field description belonging to the new format; 
          E - terminates the batach (format text). 
           
          The format coding sheets are interpreted by FORM in the following
          way: 
 
           
           
           
           \f

                                                                       1st subformat
                                                              is H 
                                                               
                                                              - read by H 
                                                               
                                                                automatic 
                                                                selection 
                                                                of F  
                                                               
                                                              - read by F 
                                                              - read by F 
                                                               
                                                               
                                                              - read by F 
                                                               
                                                                automatic 
                                                                selection 
                                                                of H 
                                                               
                                                              - read by H 
                                                               
                                                                automatic  
                                                                selection 
                                                                of F 
                                                               
                                                              - read by F 
                                                              - read by F 
                                                               
                                                               
                                                              - read by F 
                                                                automatica-
                                                                lly termin-
                                                                ated by E 
           
          *  Such automatic selection of subformats is performed only if
             this statement is indicated exactly as above, meaning that the
             statement must begin in the 1st position in column 15, that
             there must be one, and only one, space between END and SUB-
             FORMAT, and that the words SUBFORMAT and END must be immedia-
             tely followed by a comma. 
              
          Subformat H contains 5 field descriptions, which check the
          following: 
           \f

                   1. FORMAT NAME (AN)           The first character of the FORMAT 
                                        NAME must be a letter from "A" - "Z":
           
          2. SUBFORMAT NAME (AN)        must be a letter from "A" - "Z" or
                                        a digit. 
           
          3.  PROTECTED (A)             "Y", "N", or "" 
           
          4.  COMMENT (AN)              No check. 
           
                   5.  Field description         No check; automatic selection of sub-
          (not keyed field)         format F. 
           
          Subformat F contains 16 field descriptions, with the first 15
          receiving input from the columns of the format coding sheets,
          while the 16th is a not keyed (0-length) field for consistency
          checks of the first 15 field descriptions. The following checks
          are performed. 
           
          1. FIELDNAME (AN)        The first character of FIELDNAME must 
                                   be a letter from "A" -"Z", or FIELD- 
                                   NAME = "". 
           
          2. PAGE (N)              When PAGE is keyed as SPACE ENTER two
                                   field descriptions are automatically
                                   skipped (that is, neither PAGE nor LINE
                                   or POSITION are specified); else the
                                   following checks are made: PAGE must be
                                   a number from 1 to 8, and must, further-
                                   more, be greater than or equal to the
                                   last defined PAGE of the current subfor-
                                   mat. 
           
          3. LINE (N)              LINE Is a number from 1 to 21. 

4. POSITION (N)          POSITION is a number from 1 to 80. 
           
          5. LENGTH (N)            When LENGTH is defined as 0 (zero) or as
                                   a SPACE ENTER' an automatic skipping
                                   occurs to the 15th field description
                                   (PROGRAM STATEMENTS); else the following
                                   check is made: 
                                   LENGTH must be a number from 1 to 80. 
                                    
          6. MIN. LENGTH (N)       When LENGTH is defined as 0 (zero) or\f

                                            equal to LENGTH, and has to be a number
                                   from 0 to 80.  
                                    
          7. TYPE (A)              "N", "SN, "SS", "AN", or "A".
 
          8. OUTPUT POSITION (N)   OUTPUT POSITION is a number from 0 to 255.
                                    
          9. R/L (A)               "L", "R", or "" 
                                    
         10. FILL (AN)             "", "0", or "*" 
                                    
            11. REKEY (A)             "Y", "N", or "" 
                                    
         12. DISPLAY (A)           "N", "Y", or "" 
                                    
         13. KIND (A)              "", "D", "C", "I", "N" or "K";
                                   furthermore, TYPE must be N", if KIND =
                                   "1". 
                                    
         14. REGISTER (N)          REGISTER is a number from 1 to 99.

       15. PROGRAM STATEMENTS    No checks.
(AN)  
          
         16. Field description     If LENGTH = "", or LENGTH = 0: only
             (not keyed field)     PROGRAM STATEMENTS may be specified.
The following applies if LENGTH '0: 
                                   - Either PAGE, LINE, and POSITION are
                                     all specified, or none of them.
                                   - MIN.LENGTH, TYPE, and OUTPUT POSITION
                                     are all specified, or none of them 
                                   - If REGISTER is n_o_t_ specified, then  
                                     KIND is either "N", "K", or "". 
                                   - If REGISTER is specified, then KIND 
                                     is either "C", <"D", or "I". 
                                    
                                   When PROGRAM STATEMENTS start with "END
                                   SUBFORMAT,", subformat H is automatically
                                   selected.
                                   When PROGRAM STATEMENTS start with "END,",
                                   subformat E is automatically selected. 
                                    
         Subformat E consists of one field description, with a field
         definition describing a not keyed (0-length) field, and the field
         program is solely an END statement.\f

                   In addition to normal error messages (length, type, limit,
          etc.),the following alarm texts may appear when using the
          standard format FORM: 
           
                                                     From subformat. Column
           
          CURRENT PAGENO LESS THAN PREVIOUS PAGENO            F.2 
          ERROR IN CHECKBOX CONTENTS                          F.16 
          ILLEGAL FIELD NAME                                  F.1 
          ILLEGAL FORMAT NAME                                 H.1 
          ILLEGAL SUBFORMAT NAME                              H.2 
          KIND "1" ONLY ALLOWED IF TYPE = "N"                 F.13 
          MIN.LENGTH GREATER THAN FIELD LENGTH                F.6 
           
          The standard format IMAGE contains 3 subformats (see Appendix
          IV). 
           
          H - reads subformat head belonging to the new format image; 
          F - reads tag description; 
          E - terminates batch (format image text). 
           
          The format image coding sheets are interpreted by IMAGE in the
          following way: \f

                                                                    1st subformat is
                                                           H 
                                                            
                                                           - read by H 
                                                            
                                                             automatic 
                                                             selection of F
                                                            
                                                           - read by F 
                                                           - read by F 
                                                            
                                                            
                                                           - read by F 
                                                            
                                                             manual selec- 
                                                             tion of H 
                                                            
                                                           - read by H 
                                                            
                                                             automatic 
                                                             election of F 

- read by F 
                                                           - read by F 
                                                            
                                                           - read by F 
                                                            
                                                             manual selec- 
                                                             tion of E ter-
                                                           minates the  
                                                             batch
           
          Subformat H contains 4 field descriptions, where the following
          checks are made: 
           
          1.  FORMATNAME (AN)      The first character of the FORMAT-NAME
                                   must be a letter from "A" to "Z". 
           
          2.  SUBFORMAT NAME (AN)  Is a letter from "A" to "Z", or a digit.

3.  COMMENT (AN)         No check. 
           
          4.  Field description    No check; automatic selection of subfor-
              (not keyed field)    mat F.\f

                   Subformat F contains 4 field descriptions, where the following
          checks are made: 
           
           1.  PAGE (N)                  PAGE must be a number from 1 to 8,
                                        and must, furthermore, be greater 
                                         than or equal to the last defined 
                                        PAGE of the current subformat.
                                         
          2.  LINE (N)                  LINE is a number from 1 to 21.
           
          3.  POSITION (N)              POSITION is a number from 1 to 80. 
           
          4.  TEXT (AN)                 No check. 
           
          Subformat E consists of one field description, with a field defin-
          ition describing a not keyed (0-length) field, and the field pro-
          gram is solely an END statement. 
           
          In addition to normal error messages (length, type, limit, etc),
          the following alarm texts may appear when using the standard
          format IMAGE: 
           
                                                              From subformat. Column
           
          CURRENT PAGENO LESS THAN PREVIOUS PAGENO          F.1 
          ILLEGAL FORMAT NAME                               H.1 
          ILLEGAL SUBFORMAT NAME                            H.2 
           
          When the created batches are considered to be correct, translation
          of the format is initiated by activating the supervisor program
          TRANSLATE (see Users Guide): 
           
                    TRANSLATE FORM form-batch image-batch 
           
          Remember that all referenced subprograms and tables must be known
          to the system before starting the format translation. Once the
          format is translated they are no longer needed. 
           
          When the format has been correctly translated, the format name is
          included in the format library.\f

         5.2       New Subprograms 
           
          The subprogram text of the coding sheets is keyed under the con-
          trol of the standard format SUBPR. The standard format supports
          fill-in-the-blanks guidance. 
           
          The SUBPR standard format contains 3 subformats (see Appendix
          IV): 
           
          H - reads subprogram head; 
          P - reads a part of a subprogram; 
          E - terminates the batch (subprogram text). 
           
          The subprogram coding sheets are interpreted by SUBPR in the
          following way: 
           
                                                           1st subformat 
                                                           is H    
           
           
           
                                                           - read by H 
           
           
                                                             automatic  
                                                             selection of P
           
           
                                                           - read by P 
                                                           - read by P 
           
           
           
                                                           - read by P 
           
           
                                                             automatically 
                                                             terminated by 
                                                             E. 
           
          * Automatic selection of subformats is accomplished only if this
            statement is indicated exactly as above. That is, the statement
            should start in the 1st position, and the word END should be
            immediately followed by a comma. 
           \f

                   Subformat H contains 3 field descriptions, with the following
          checks to be made: 
           
          1.  SUBPROGRAMNAME (AN)       The first character of the SUBPRO-
                                        GRAMNAME must be a letter from "A"
to "Z". 
           
          2.  COMMENT (AN)              No check. 
           
          3.  Field description         No check; subformat P is automatic-
              (not keyed field)         ally selected.
           
          Subformat P consists of one field description, with the following
          operation: 
           
          1.  PROGRAM STATEMENTS (AN)   No check; subformat E is automatic-
                                        ally selected if PROGRAM STATEMENTS
          start with "END,". 
           
          Subformat E consists of one field description, with a field def-
          inition describing a not keyed (0-length) field, and the field
          program being solely an END statement. 
           
          In addition to normal error messages (length, type, limit, etc)
          the following alarm text may appear when using the standard for-
          mat SUBPR: 
           
                                                     From subformat. Column
           
          ILLEGAL SUBPROGRAM NAME                               H.1 
           
          When the created batch is considered to be correct, translation
          of the subprogram is initiated by activating the supervisor pro-
          gram TRANSLATE (see Users Guide). 
           
                              TRANSLATE SUBPROGRAM subpr - batch 
           
          Remember that all referenced subprograms and tables must be known
          to the system before starting translation of the subprogram. Once
          the translation is finished they are no longer needed. 
           
          When the subprogram has been correctly translated, it is included
          in the subprogram library.\f

         5.3       New Tables 
           
        5.3.1.    N_e_w_ _C_o_r_e_ _T_a_b_l_e_s_ 
          The keying of the table text from the coding sheets is controlled
          by the standard format TABLE. The standard format supports fill-
          in-the-blanks guidance. 
           
          The TABLE standard format contains 15 subformats (see Appendix
          IV): 
           
          H - reads columns 1 - 6 of table head. 
          M - reads column 7 of table head. 
          T - reads columns 8 - 14 of table head. 
          1 - reads table element, Single entry table, A-type = N; 
          2 - reads table element, Single entry table, A-type = AN; 
          3 - reads table elements, Double entry table, A-type = N, F-type
              = N; 
          4 - reads table elements, Double entry table, A-type = N, F-type 
              = AN; 
          5 - reads table elements, Double entry table, A-type = AN, F-type
              = N; 
          6 - reads table elements, Double entry table, A-type = AN, F-type
              = AN; 
          C - stores a control word (DISC TABLE) in the batch and selects
              subformat O; 
          O - reads operation and selects subformat S; 
          S - selects subformat A, or N, or O; 
          A - reads disc table element of type AN and selects subformat S; 
          N - reads disc table element of type N and selects subformat S; 
          E - terminates batch (table text). 
           
          Subformats M,T,C,O,S,A,N, and E which conern disc tables (poss-
          ibly M_ultiple entry tables) are explained in section 5.3.2. 
           
          The table coding sheets are interpreted by TABLE in one of the
          following two ways (see Appendix IV) when the table is a core-
          table: \f

                   1. S_ingle entry table 
           
                                                          1st subformat 
                                                          is H 
                                                           
                                                           
                                                          - read by H 
                                                           
                                                           
                                                            automatic se- 
                                                            lection of sub-
                                                            format 1 or 2 
                                                           
                                                          - read by 1 or 2 
                                                          - read by 1 or 2 
                                                           
                                                           
                                                          - read by 1 or 2 
                                                           
                                                            Manual selec- 
                                                            tion of E ter- 
                                                            minates batch.

          2. D_ouble entry table 
                                                           
                                                          1st subformat 
                                                          is H 
                                                           
                                                           
                                                          - read by H 
                                                           
                                                           
                                                            automatic se- 
                                                            lection of sub-
                                                          format 3, 4,  
                                                            5, or 6 
                                                           
                                                          - read by 3, 4, 
                                                            5, or 6 
                                                           
                                                          - read by 3, 4, 
5, or 6 
                                                           
                                                            Manual selec- 
                                                            tion of E ter- 
minates batch.\f

                   Subformat H contains 7 field descriptions, with the following
          checks to be made: 
           
          1.  TABLENAME (AN)            The first character in TABLENAME
                                        must be a letter from "A" to "Z". 
           
          2.  TYPE (A)                  "S" or "D" or "M" 
                                        If TYPE = "M" the next four field 
                                        descriptions are skipped. 
           
          3.  ARGUMENTTYPE (A)          "N" or "AN" 
              (A-TYPE) 
           
          4.  ARGUMENTLENGTH (N)        ARGUMENTLENGTH must be a number
              (A-LGTH)                  from 1 to 80.
                  If TYPE = "S" the next two field  
                                        descriptions are skipped. 
           
          5.  FUNCTIONTYPE (A)          "N" or "AN" 
              (F-TYPE) 
           
          6.  FUNCTIONLENGTH (N)        FUNCTIONLENGTH must be a number 
              (F-LGTH)                  from 1 to 80. 
           
          7.  Field description         No check; depending on TYPE, ARGU- 
              (not keyed field)         MENTTYPE and FUNCTIONTYPE a subfor-
                                        mat from 1 through 6 or M is auto- 
                                        matically selected.

  Subformats 1 and 2 contain one field description each, with field
          type being N an AN, respectively - otherwise no check performed. 
           
          Subformats 3, 4, 5, and 6 contain 2 field descriptions each, with
          field types being N/N, N/AN, AN/N, and AN/AN, respectively - other-
          wise no check is performed. 
           
          Subformat E consists of one field description, with a field def-
            inition describing a not keyed (0-length) field, and the field
          program is solely an END statement. 
           
          In addition to normal error messages (length, type, limit, etc)
          the following alarm text might appear when using the standard
          format TABLE: 
           \f

                                                              From subformat. Column
           
          ILLEGAL TABLE NAME                                 H.1 
           
          When the created batch is considered to be correct, translation
          of the table is initiated by activating the supervisor program
          TRANSLATE (See Users Guide) 
           
                              TRANSLATE TABLE table-batch 
           
          When the table has been correctly translated, the table name is
          included in the table library. 
           
   5.3.2     D_i_s_c_ _T_a_b_l_e_s_ 
          When using a table with many table elements, it is sometimes nec-
          essary to set up the table as a disc table. A disc table also
          features the possibility of up to seven table columns (one argu-
          ment - six functions) where as a core table can consist of at
          most two columns. 
           
          The structure of the table (number of columns, type and length of
          each column, largest number of entries) is set up with the help
          of supervisor program CREATE which creates a table consisting of
          empty entries and which includes the table name in the disc table
          library. 
           
          The entering of data to the table is accomplished with the help
          of supervisor program DISCTABLE. This program checks if the table
          text is correctly structured, and translates the data into table
          entries. The translation, during which the entries are stored in
          a hash-organized way, is usually a time-consuming process, but it
          will, on the other hand, enable quick checks to be made on the
          existence of certain elements, even in cases involving very large
          tables. 
           
          Please note, that it is possible to insert, update (replace), or
          to delete, elements in the translated table also with the help of
          supervisor program DISCTABLE, so as to avoid repeating the entire
          translation procedure. 
           
          The table text is either keyed to a batch under the control of
          the standard format TABLE, or it may be stored on a magnetic tape
          generated by another computer. 
           
          The subformats of format TABLE are listed in section 5.3.1, the\f

                   interpretation of the coding sheets takes place in the following
          way: 
           
                              1st subformat is H                     
           
           
                              - read by H 
                              automatic selection of subformat M 
           
           
                              - read by M 
           
                              automatic selection of subformat T 
           
           
                              - read by T. The subformat is automatically
                                reselected up to six times if required  
                                (number of functions) 
           
                              automatic selection of subformat O 
           
           
                              - read by O 
           
                              automatic selection of subformat A or N 
           
           
                              - read by A or N 
           
                              automatic selection of subformat A or N if 
                              following lines contain function(s) 
           
           
                              - read by A or N 
           
                              subformat A or N is automatically reselected 
                              as long as functions follow where upon subfor-
                              mat O is selected 
           
           
                              - read by O 
           
           
                              - read by O 
           

                              automatic selection of subformat E.\f

                   Subformat H and E are explained in section 5.3.1 
           
          Subformat M contains three field descriptions with the following
          checks to be made: 
           
          1. Field description     No check, used for register definition. 
             (not keyed field)    
           
          2. NO. OF FUNCTIONS (N)  NO. OF FUNCTIONS must be a number from 
             (NO. OF F'S)          0 to 6. 
           
          3. Field description     No check, used for computations (e.g.
             (not keyed field)     the number of times to execute subformat
                                   T); automatic selection of subformat T.
 
          Subformat T contains two field descriptions: 
           
          1. TYPE (A)              "N" or "AN" 
             (A-TYPE; F1,2,3,4,5,
6,-TYPE) 
           
          2. Field description     No check, used for determining if keying
             (not keyed field)     is to continue under control of this sub-
                                   format or if subformat C is to be sel-
                                   ected (depends on NO. OF FUNCTIONS). 
           
          Subformat C consists of one not-keyed field which stores the next
          "DISCTABLE" in the batch so that compatibility with a magnetic
          tape (see section 5.3.2) is achieved. 
           
          Subformat O contains two fields: 
           
          1. OPERATION (A)         "I" or "J" or "D" or "E" 
             (OP) 
           
          2. Field description     No check, not keyed (0-length) field
   (not keyed field)     selecting subformat E if OPERATION = "E"
                                   or, if not, selecting subformat S. 
           
          Subformat S consists of one not keyed (0-length) field which
          selects subformat A or N if entered from O. If entered from A
          then one of these subformats are reselected if a function is to
          be read, otherwise subformat O is selected. 
           
           \f

                   Subformats A and N contain one field description each, with field
          type being AN and N, respectively - otherwise no check is perfor-
          med. 
          If the table text is stored on magnetic tape, this must have the
          following format: 
           
          The record format of the file must be variable, blocked type (IBM
          VB format, max. 512 bytes), and the coding of characters must be
          in accordance with the ASCII or EBCDIC alphabets. 
           
          The first two records are used for identification: 
           
          record 1, 5 bytes : table name, fill characters: space. 
          record 2, 9 bytes : the text DISC TABLE. 
           
          The following records concern the entries of the table. 
           
          An insertion of a table entry is accomplished by a sequence of 2
          - 8 records: 
           
          record 1, 1 byte: the text 1
          record 2, max. 80 bytes : argument of entry 
          record 3, max. 80 bytes : function 1 
          . 
          . 
          . 
          record 8, max. 80 bytes : function 6 
           
          If the table is single-entried then an inserton consists of only
          two records. If the table is multiple entried, the number of rec-
          ords following record 2 corresponds to the number of functions
          per table entry. 
           
          A table entry is updated (replaced) by supplying the following
          sequence of 2 - 8 records: 
           
          record 1, 1 byte: 
          record 2, max. 80 bytes : argument of entry 
          record 3, max. 80 bytes : function 1 
          . 
          . 
          . 
          record 8, max. 80 bytes : function 6 
           \f

                   The number of necessary records is as for insertion al a_l_l_ ele-
          ments of the entry are replaced. 
           
          A table entry is deleted from the table by a sequence of 2 rec-
          ords: 
           
          record 1, 1 byte: 
            record 2, max. 80 bytes : argument of the entry 
           
          The last record in the file must be a one-byte record containing
          the text E. 
           
          The arguments and functions must conform the structure of the
          table with respect to type and length, see also section 2.3.3. 
           
          The table text translation is performed by activating the super-
          visor program DISCTABLE through one of the calls below (see Users
          Guide): 
           
          DISCTABLE BATCH.batchname     (if the table text is keyed
                                             under control of the TABLE
                                            format) 
           
          DISCTABLE MTx.filenumber ASCII     (if the table text is stored
                                             on magnetic tape in ASCII
                                             code; x = tape station no.) 
           
          DISCTABLE MTx.filenumber EBCDIC    (if the table text is stored
                                             in EBCDIC code). 
           \f

         6         PROGRAMMING HINTS 
           
           
          This section describes the special facilities of the system, how
          they are programmed, and how they work when the finished format
          is used for keying. 
           
           
    6.1       Screen Processing 
           
          Screen processing is understood as covering all information given
          by the format program on the utilization of the screen's data
          area. The first lines on the screen are always reserved for the
          system. 
           
          As an aid to registration it is possible to specify tags, and it
          is likewise possible to specify the keying position of the single
          units on the screen. Screen processing, cn, however, also be ent-
          irely left to the system. 
           
       6.1.1     S_c_r_e_e_n_ _P_r_o_c_e_s_s_i_n_g_ _A_s_s_i_g_n_e_d_ _T_o_ _t_h_e_ _S_y_s_t_e_m_ 
          In case one chooses to leave screen processing entirely to the
          system, the columns PAGE, LINE, and POSITION in the definition
          sections of a_l_l_ field descriptions are left unkeyed. 
           
          The system will then utilize the screen in such a way that LENGTH
          in the definition sections of the field descriptions assigns the
          number of screen positions that are set aside for keying to the
          field. 
           
          - The f_i_r_s_t_ _f_i_e_l_d_ _o_f_ _t_h_e_ _s_u_b_f_o_r_m_a_t_ is keyed in the left most pos-
            ition of the first data line on the screen. This field is de-
            fined as the first field on the s_u_b_f_o_r_m_a_t_'_s_ _f_i_r_s_t_ _p_a_g_e_. 
             
          - If there is sufficient space on the current line, one proceeds
            to key the n_e_x_t_ _f_i_e_l_d_ on this line, leaving one blank position
            before the field. 
             
          - If there is not enough space left on the current line, the n_e_x_t_
            f_i_e_l_d_ is keyed on the following line, starting with the left
            most position. 
             
          - If there are no more lines available, the next field is keyed
            from the left most position on the first data line of the
            screen, which then makes this field the first field on the\f

                   s_u_b_f_o_r_m_a_t_'_s_ _n_e_x_t_ _p_a_g_e_. Previous to keying this field the screen's
          input section is blanked. 
           
          E_x_a_m_p_l_e_ _6_._1_._1_  
           
          A subformat starts with the following field descriptions: 
           
           
           
                    FLD1           10 
                    FLD2           15 
                    FLD3            4 
                    FLD4           75 
                    FLD5            5 
           
                   Keying positions on the screen will be subsequently appear as
          follows: 
           
STATUS LINE
                               MESSAGE LINE

          FLD1      FLD2      FLD3 
                       FLD4 
          FLD5 
           
         6.1.2     E_s_t_a_b_l_i_s_h_i_n_g_ _K_e_y_i_n_g_ _P_o_s_i_t_i_o_n_s_ 
          In order to specify where on the screen every single unit of a
          subformat is to be keyed, the operator fills in: PAGE, LINE, and
          POSITION in the definition section of the field descriptions. The
          system will process this information in the following way: 
           
          - A s_u_b_f_o_r_m_a_t_'_s_ _f_i_r_s_t_ _f_i_e_l_d_ will be keyed from the screen pos-
            ition specified under LINE and POSITION in the first field
            description (PAGE is here, as a rule, specified as 1). This
            field is the first field on the s_u_b_f_o_r_m_a_t_'_s_ _f_i_r_s_t_ _p_a_g_e_. 
             
          - If PAGE has the same value in the next field description as in
            the preceding one, the n_e_x_t_ _f_i_e_l_d_ is keyed from the screen pos-
            ition specified under LINE and POSITION. 
             
          - If PAGE has a higher value in the next field description than
            in the preceding one, the screen is blanked, and the next field
            is keyed starting in the screen position specified under LINE
            and POSITION. This field is then the first field of the s_u_b_f_o_r_-
   m_a_t_'_s_ _n_e_x_t_ _p_a_g_e_. \f

                   When planning the keying positions the programmer uses a screen
          layout form on which he marks out the keying positions and from
          which the LINE and POSITION values can be read and used when
          completing the definition sections of the field descriptions. 
           
          E_x_a_m_p_l_e_ _6_._1_._2_a_ 
           
          Screen layout: 
           
           
                    CUSTOMER       DATE 
          NO.
           
           
                                   ARTICLE 
                                     NO.  
                                     QUAN-
TITY 
                                     UNIT 
                                    PRICE 
                                   AMOUNT 
           
          Field descriptions: 
           
           
           
           
          CUSTN  1  2  1  5 
          DATE   1  2  7  6 
          ARTIN  1  4  9  6 
          QTY    1  5 11  4 
          UPRIC  1  6  9  6 
          AMOUN  1  7  7  8 
           
          Within the same subformat it is possible to combine field descrip-
          tions with PAGE, LINE, and POSITION filed out, with not completed
          field descriptions. 
           
          Thus, if the system encounters a field description where no infor-
          mation is given, the keying positions will be calculated according
                   to the formula presented in Section 6.1.1. Such field descriptions
          must therefore be adapted to programmer-selected keying positions,
          bearing in mind that these might cause the system to shift page.
          The system does not permit overlapping. 
           \f

                   E_x_a_m_p_l_e_ _6_._1_._2_b_ 
           
          The field descriptions below will give the same result as the
          field descriptions presented in Example 6.2.2a (now, PAGE, LINE,
                   and POSITION are not filled out in the DATE column). 
           
           
           
           
                    CUSTN  1  2   1  5 
                    DATE             6 
                    ARTIN  1  4   9  6 
                    QTY    1  5  11  4 
                    UPRIC  1  6   9  6 
                    AMOUN  1  7   7  8 
           
  6.1.3     D_e_f_i_n_i_n_g_ _T_a_g_s_ 
          Tags are normally specified only in connection with those formats
          where the keying positions are defined by the programmer himself
          (see above). Therefore, tags must be coordinated with keying
          positions, not only as far as the screen positions are concerned,
          but also with a view to possible page-shifts in the subformat.
          Every individual tag within a subformat will then be characterized
          by PAGE, LINE, and POSITION (see IMAGE Coding Sheet, Section
          2.1.2).  
          The system utilizes the tag information in the following way:
 
          - On selection of a new subformat or a new page within a subformat
            the screen is blanked and a_l_l_ tags belonging to the new page in
            the subformat are laid out in their specified screen positions
            before keying is started to the first field of the page. 
             
          - When the first field of a subformat is going to be keyed, the
            keying positions but not the tags will be blanked if last used
            tags are the same as those belonging to the first page of the
            subformat. This is, for instance, the case with subformats which
            contain only one page and are repeatedly executed. 
             
          When devising tags and establishing their position in relation to
          the keying positions, the programmer uses the screen layout form.\f

                   E_x_a_m_p_l_e_ _6_._1_._3_a_ 
           
          Extending Example 6.1.2a to include tags gives the following
          screen layout: 
           
           
           
                    NUMBER         DATE 
                    CUSTOMER DATE 
                      NO. 
           
           
                    ARTICLE        ARTICLE 
                                     NO.  
                    QUANTITY        QUAN- 
                                    TITY 
                    PRICE           UNIT 
                                    PRICE 
                    AMOUNT         AMOUNT 
           
                   Tag specifications: 
           
           
           
                    1 1 1 NUMBER DATE 
                    1 4 1 ARTICLE 
                    1 5 1 QUANTITY 
                    1 6 1 PRICE 
                    1 7 1 AMOUNT 
           
          E_x_a_m_p_l_e_ _6_._1_._3_b_ 
           
          This example shows how a format, at the start of registration,
          can display a screen image which serves as a keying instruction
          to the operator. 
           
          The format's first subformat might look as follows: 
           
          EXAMP 1 N      THE SUBFORMAT IS USED AS A GUIDE 
           
           
                     1 16 1 1 O AN O  

                              SELECT SUBFORMAT 2, 
                                        END SUBFORMAT, \f

                   matching tags: 
           
           
           
           
EXAMP1  GUIDE 
  
 
 
 
1  1 1 FORMAT EXAMP.
1  3 1 THE FORMAT IS USED FOR KEYING INVOICES 
1  5 1 SUBFORMAT 1 : SHOWS THIS GUIDE 
1  6 1               (MAY BE ACTIVATED DURING KEYING, TOO).
    1  7 1 SUBFORMAT 2 : HEAD OF INVOICE, SELECTED BY THE OPERATOR 
1  8 1               AT THE START OF A NEW INVOICE. 
1  9 1 SUBFORMAT 3 : LINES OF INVOICE, ASUTOMATICALLY SELECTED 
1 10 1               AFTER SUBFORMAT 2. 
1 11 1 SUBFORMAT 4 : END OF BATCH, SELECTED BY THE OPERATOR 
1 12 1               AFTER LAST INVOICE. 
1 14 1 PRESS THE ENTER KEY WHEN YOU WANT TO START KEYING. 
1 15 1 (THE KEYING WILL START IN SUBFORMAT 2, AUTOMATICALLY). 
 
          The record that the operator creates when pressing the ENTER key
          contains only one field, a so-called no-transfer field (OUTPUT
          POSITION = 0). Such a field will be skipped when the batch is
          transferred to a main computer. 
           
          The following final notes on the subject of tags should be added:
           
          1.  No tags are attached to a format until the format is entered
              into the system by activating the supervisor program TRANS-
              LATE (see Chapter 5). When using this format later on, the
              operator may, however, at the start of registration, command
              the registration to be executed without tags. (See Users
              Guide on Control Commands!) 
               
          2.  When dealing with subformats that entirely rely on system-est-
              ablished keying positions, the available space for tags is
              limited to what might be left of the lower section of the
              screen. With such subformats, one may use, for example, DIS-
              PLAY statements as a primitive form of tags. 
               
               
               \f

         6.2       Reformatting 
           
          Reformatting means storing the units of a document in a different
          order than the keying order. Reformatting is done by specifying
          suitable values for "OUTPUT POSITION" in the definition section
          of the field descriptions: 
           
          E_x_a_m_p_l_e_ _6_._2_ 
           
          A document contains, among others, the following information: 
           
                date      customer no.:       article no.:      quantity: 
           
          The information is typed from left to right, but the preferred
          storing sequence on the record might be the following: 
           
               Field 1Field 2          Field 3     Field 4

article no.     customer no.     date        quantity 
           
          The field descriptions are therefore filled out as follows: 
           
           
           
               DATE   .  .  .  .  .  .  3  .  .  .  .  .  .
CUSTN  .  .  .  .  .  .  2  .  .  .  .  .  .
ARTIN  .  .  .  .  .  .  1  .  .  .  .  .  .
QTY    .  .  .  .  .  .  4  .  .  .  .  .  . 
           
           
          The programmer should be careful when specifying output position
          in order to avoid "gaps" in the subformat (leaving, for example,
          output position 2 empty, while defining output positions 1 and 3.
           
           
         6.3       Automatic Insertion 
           
           
       6.3.1     N_o_t_ _K_e_y_e_d_ _F_i_e_l_d_s_ 
          A not keyed field does not require keying, but is assigned its
          value solely by the program part of the field description. 
           
          Such fields can be used to insert, for example, constant values,
          or results of calculations, or the contents of a register, as
          values in the record. \f

                   E_x_a_m_p_l_e_ _6_._3_._1_ 
           
           
           
          DTYPE          2   2  A   1   N    MOVE "AA" TO DTYPE, 
                                               NOTE TYPE OF DOCUMENT, 
           
           
          TOTAL         10  10  N  12 N    COMPUTE TOTAL = 
                                               TOTAL + AMOUNT, 
           
           
          DATE           6   6  N  17   N    COMPUTE DATE = X05,

Note especially the field description "DATE". The register X05
          may have been assigned a value at the outset of registration of a
          specific sequence (typically a subformat that is only used once
          in a sequence). The date is thereby made available to all sub-
          formats during registration. One should take care to control that
          the register is not used for other programs, for instance, appear-
          ing in "REGISTER" in the definition section of a field descrip-
          tion. 
           
  6.3.2     C_o_n_s_t_a_n_t_ _F_i_e_l_d_s_ 
          A constant field is assigned the value of a register when the
          operator activates the DUPlicate key. The contents of the regis-
          ter are initialized by the program part of a field description. 
           
          When a constant field is executed the first time, it is essential
          that the register specified in the definition section of the
          field description be assigned a value prior to execution, or it
          will not be possible for the operator to press the DUP key. This
          is frequently done at the start of the registration of a specific
          sequence in subformats that are executed only once within the
          sequence. Where the contents of the register are preserved throu-
          ghout the registation of a sesquence, they may not be used for
          other purposes. 
           
          If the operator does not use the DUP key for a constant field,
          the keying takes place as normal. Such keying does not change the
          contents of the register. 
           
           
           \f

                   E_x_a_m_p_l_e_ _6_._3_._2_ 
           
          Subformat 1: 
           
           
           
           
          DATE           6  6  N   1              COMPUTE X02 = DATE, 
                                                  MOVE '    ' TO X03, 
           
          Subformat 2: 
           
           
           
          DATE           6  6  N  12       C02 
           
           
          CODE           4  1 AN  17       C03 
           
          The value of the DATE field in Subformat 2 will be the value reg-
          istrated in Subformat 1, and the CODE field is filled with spaces
          when pressing the DUP key at these two fields. 
           
           
  6.4       Automatic Duplication 
           
          Duplication means assigning a certain field the same value as for
          the corresponding field in the preceding record. 
           
          Duplication is accomplished by utilizing duplication fields. 
           
          A duplication field is one that is assigned the value of a reg-
          ister when the operator presses the DUP key. If, by contrast, the
          operator uses normal keying routines, the keyed data will be in-
          put to both field and register. 
           
          The DUP key cannot be used with duplication fields, if the spec-
          ified register has not yet been assigned any value; this is the
          normal case when first executing a duplication field, and the
          operator must therefore key the field input, which by this action
          also will be stored in the register. 
           
          The use of a register should be limited to one duplication field
          in a subformat; the register should not be changed by program
          statements. \f

                   E_x_a_m_p_l_e_ _6_._4_ 
           
          A document is filled out as follows: 
           
                    CUSTOMER NO         ARTICLE NO          QUANTITY 

                       5002                 30                 12 
                       5002                992                  1 
                       3111                992                 97 
                       3111                992                 33 
                       4001                 30                 14 
           
          The matching subformat: 
           
          EXAMP 2 
           
           
           
          CUSTN          4  4  N  1        D01 
          ARTIN          3  2  N  2        D02 
          AMOUN          5  1  N  3    0          END SUBFORMAT, 
           
          The effect of DUP on the fourth line, first field, will be the
          input of 3111 as customer number in the record, if this number is
          keyed in the corresponding position in the third record. 
           
           
   6.5       Automatic Incrementation 
           
          Automatic incrementation means that a field is assigned the value
          of some previously keyed value increased by 1. 
           
          Automatic incrementation uses increment fields. An increment
          field has the same function as a duplication field (see Section
          6.4), except that the corresponding register is increased by 1 by
          activating the DUP key. The keying of an increment field causes
          also the corresponding register to be changed. 
           
           
           
           
           
           
           
           \f

                   E_x_a_m_p_l_e_ _6_._5_ 
           
          A document is filled out as follows: 
           
                    TYPE      INFORMATION 1       INFORMATION 2 
           
                      1            1250                  20 
                      2             900                1992 
                      3                                     
                      4              11                  77 
           
          The matching subformat: 
           
          EXAMP 2 
           
           
           
           
          TYPE      1  1  N  1     I01 
          INF1      4  1  N  2 
          INF2      4  1  N  3               END SUBFORMAT, 
           
          On the first line of the field TYPE "1" is keyed, on the next
          DUP, the third line is left empty, and on the fourth "4" is keyed.
           
           
       6.6       The Use of Tables 
           
          Tables are used in programs during calculations when an operand
          may contain one out of so many values that a comparison of the
          current value with every single possible value, by program stat-
          ements, would be an insurmountable task (as for instance, using
          IF and ALLOW/DISALLOW with constants representing allowed/disal-
          lowed values). 
           
          Therefore, the values are gathered together in a table and can
          thus be referenced collectively by a single program statement. 
           
          The use of tables ensures another advantage in that they can be
          utilized by different programs. 
           
          There are two types of tables: 
           
          1.  If one only wants to find out if a certain value exists, a
              single-entried table is used, listing all possible values.\f

                   2.  If the operation not only involves establishing the existence
              of a certain value (argument), but also the access to an ass-
              ociated value (function), a multiple-entried table is used,
              which contains all possible arguments together with their
              assigned values. 
               
          When used for registration, a format is taken from the disc and
          placed in the internal core together with the referenced tables.
          In the case of very long tables, it is therefore recommended to
          create so-called DISC tables, in order to save space in the comp-
          uter. A DISC table will a_l_w_a_y_s_ be stored on the disc only. Please
          also notice that core tables cannot contain more than two columns
          (single-entried or double-entried) where as DISC tables can cont-
          ain up to seven columns (six functions per argument). See Chapter
          5 for further details! 
           
          E_x_a_m_p_l_e_ _6_._6_ 
           
          A document contains, among other things, the following units: 
           
                    MONTH:         DAY:      DATE: 
           
          Corresponding field descriptions: 
           
           
          MONTH     9  1  AN  10L       IF NOT (MONTH IN MTABL) 
                                          THEN ALARM "MONTH IS WRONG", 
           
          DAY       9  1  AN  11L       IF NOT (DAY IN DTABL) 
                                          THEN ALARM "DAY IS WRONG", 
           
          DATE      2  1   N  12        IF DATE  1 
                                          THEN ALARM "DATE IS WRONG", 
                                        IF MONTH VALID THEN 
                                          SEARCH MONTH IN MTABL 
                                          GIVING X01  
                                          AT END ALARM "SYSTEM ERROR" 
                                          ELSE COMPUTE X01 = 31, 
                                        IF DATE 'X01 
                                          THEN ALARM "DATE IS WRONG", 
           
           
           
           
           \f

                   Two tables are referenced: 
           
                    one single-entried    and     one double-entried
           
                    DTABL  AN 9                   MTABL  AN 9 N 2 
           
           
                    MONDAY                        JANUARY 
                    TUESDAY                       31 
                    WEDNESDAY                     FEBRUARY 
                    THURSDAY                      29 
                    FRIDAY                        MARCH 
                    SATURDAY                      31 
                    SUNDAY 
           
           
           
                                                  NOVEMBER 
                                                  30 
                                                  DECEMBER 
                                                  31 
           
          Note that MTABLE in "MONTH" actually serves as a single-entried
          table. 
           
          If MTABL were a disctable (though inconvenient with respect to
          its size) instead of a core table then the following changes had
          to be made in the program statements in above field descriptions:
           
          1.  The statement in MONTH must be replaced by the following
              (disctable not allowed in table condition): 
           
              SEARCH MONTH IN DISC MTABL  GIVING* 
              AT END ALARM "MONTH IS WRONG", 
               
          2.  The fourth line of DATE must be replaced by: 
               
              SEARCH MONTH IN DISC MTABL 
               
               
               
               
               
               
               \f

                   The table would be coded like this: 
           
           
           
          MTABL          1  AN  N 
           
           
          j JANUARY 
            31 
          j FEBRUARY 
            29 
          j MARCH 
            31 
           
           
           
           
           
           
           
           
          j NOVEMBER 
            30 
          j DECEMBER 
            31 
          E 
           
           
    6.7       Partial Rekeying 
           
          In order to save time when rekeying it might often be appropriate
          to rekey only certain units of certain documents. 
           
          This procedure is controlled by the column "REKEY" in the
          definition sections of the field descriptions. If the REKEY
          column is keyed N (for No), the corresponding field is skipped
          when rekeying. 
           \f

                   The table would be coded like this: 
           
           
           
          MTABL          1  AN  N 
           
           
          j JANUARY 
            31 
          j FEBRUARY 
            29 
          j MARCH 
            31 
           
           
           
           
           
           
           
           
          j NOVEMBER 
            30 
          j DECEMBER 
            31 
          E 
           
           
    6.7       Partial Rekeying 
           
          In order to save time when rekeying it might often be appropriate
          to rekey only certain units of certain documents. 
           
          This procedure is controlled by the column "REKEY" in the defini-
          tion sections of the field descriptions. If the REKEY column is
          keyed N (for No), the corresponding field is skipped when rekey-
          ing. 
           
                   As a rule, fields containing important information will always be
          rekeyed, if the information can not be thoroughly checked at the
          initial keying stage by the use of tables, LIMIT statements or
          the like. Take, for example, amounts included in the sum total:
          if the total turns out to be false, one does not know if the
          keying error occurred when the total was keyed or is hidden among
          the amounts added up. \f

         6.8       The Use of Pseudo-Registers 
           
          The pseudo-registers described in section 3.3.2 enable a format
          to read out information about the nevironment as it looks when
          the format is used for registration. 
           
          The information may for example be stored in the batch for trace
          purposes. Consider a format which, at the start of a registration,
          outputs name of job and name of batch together with the time of
          registration start-up. Once stored the information will also be
          available to the computer to which the batch is transferred for
          further processing.\f

                   APPENDIX I 
          REQUIRED SPACE IN CORE FOR FORMATS, 
          SUBPROGRAMS AND TABLES 
           
           
          The following sizes are all defined in bytes. In some cases
          length is defined as an interval (lower limit - upper limit); a
          definition section may, for instance, at best fill 15 bytes and
          at worse 16 bytes. 
           
          format head                        16
                                             + 4 * number of subformats 
          subformat head                     8 
          definition section                 15-16 
          image head                         4 
                                             + 4 * number of subformats 
          image of subformat head            4 
                                             + 2 * number of pages 
          image page                         1 
                                             + 5 * number of texts 
                                             + length of texts 
           
          P_r_o_g_r_a_m_ _p_a_r_t_ 
           
          field reference                    3 
          register reference                 2 
          constant                           2 
                                             + constant length 
          subscript                          1
          table (not DISC table)             1-2 
          (1st reference of table)           + table length 
          table (not DISC table)             3 
          (subsequent references) 
          DISC table                         34-35 
          label reference                    3-4 
          subformat reference                2 
          translated subprogram              as for normal program part 
          translated table (not DISC table)  6 
                                             + number of arguments 
                                             * (length of one argument +
                                                length of one function)
         +,-,+,/,MOD,',=,,', =,'=      1 
          AND, OR, NOT, VALID, INVALID, IN   1 
           
           \f

                   COMPUTE - =                             1 
          MOVE - TO                               1 
          CONNECT - TO - GIVING                   2 
          SEARCH - GIVING - AT END                9-11 
          LIMIT                                   1 
          ALLOW                                   1-3 
          DISALLOW                                1-3 
          GOTO                                    1 
          SELECT SUBFORMAT                        1 
          DISPLAY                                 1 
          ALARM                                   1 
          DEFINE - length                         3 
          END                                     1 
          END SUBFORMAT                           0 
          NOTE                                    0 
          PERFORM (1st reference of subprogram    9-12 
                                                  + subprogram length 
          PERFORM (subsequent references)         4-5 
          DUP-FIELDS                              3 
          SKIP - FIELDS                           3 
          IF - THEN                               4-5 
          IF - THEN - ELSE                        8-10 
          SET                                     1 
           
          Study the example on the opposit page!\f

                    
           
          EXPL 1    REQUIRED SPACE - 1 
           
           
          F1           1  0  N  1       DEFINE X01 1, COMPUTE X01=F1, 
                                        PERFORM CHECK, 
           
                       0                SELECT SUBFORMAT 2, 
                                        END SUBFORMAT, 
           
           
          EXPL 2    REQUIRED SPACE - 2 
           
           
                       0                DISPLAY X01, 
           
          F1           1  0  N  0       COMPUTE X01 = F1, PERFORM CHECK, 
           
                       0                END, 
           
          Translated, this format requires the following number of bytes: 
           
          format head (16 + 4 * 2)                          24 
          subformat 1: 
            subformat head                        8
            1st field description: 
              definition section            15-16
              DEFINE - 13
              X01 (register reference)2
              COMPUTE - =1
              X012
              F1 (field reference)3
            PERFORM CHECK*) (9  12 + 50)  5_9_-_6_2_  85-89
         
          _________ 
           
          *) The subprogram CHECK is assumed to require 50 bytes. 
           
            2nd field description: 
           
              definition section            15-16 
              SELECT SUBFORMAT              1 
              2 (subformat reference)       2 
              END SUBFORMAT                 0_ _ _ _ _  1_8_-_1_9_    111-116 \f

                   subformat 2: 
            subformat head                         8 
            1st field description: 
              definition section            15-16 
              DISPLAY                       1 
              X01                           2_ _ _ _ _  18-19 
            2nd field description: 
              definition section            15-16 
              COMPUTE - =                   1 
              X01                           2 
              F1                            3 
              PERFORM CHECK                 4_-_5_ _ _  25-27 
            3rd field description: 
              definition section            15-16 
              END                           1_ _ _ _ _  1_6_-_1_7_    6_7_-_7_1_ 
           
          Total number of bytes:                            2_0_2_-_2_1_1_ 
           
          In other words, the translated format will require something
          between 202 and 211 bytes. \f

«eof»