COBOL.DOC                                    Page 1



             NPS MICRO-COBOL  Ver. 2.1

                    User's Guide


                  I. Organization

The compiler is designed to run on an 8080 system in 
an interactive mode through the use of a teletype or 
console.   It  requires at least 24k of main  memory 
and  a mass storage device for reading and  writing.  
The compiler is composed of two parts, each of which 
reads a portion of the input file.   Part One  reads 
the  input  program to the end of the Data  Division 
and builds the symbol table.  At the end of the Data 
Division,  Part  One is overlayed by Part Two  which 
uses  the  symbol table to produce  the  code.   The 
output code is written as it is produced to minimize 
the use of internal storage.

The  EXEC  Program  builds the core  image  for  the 
intermediate  code  and performs such  functions  as 
backstuffing  addresses  and offsetting  address  in 
subroutines.  EXEC then copies the interpreter (CIN-
TERP.COM)  into memory and transfers control to  it.  
The interpreter is controlled by a large case state-
ment that decodes the instructions and performs  the 
required actions.


II. MICRO-COBOL Elements

This  section contains a description of each element 
in  the language and shows simple examples of  their 
use.  The following conventions are used in explain-
ing the formats:  Elements enclosed in broken braces 
(<>)  are themselves complete entites and  are  des-
cribed  elsewhere in the manual.   Elements enclosed 
in braces(éè) are choices, one of the elements which 
is to be used.   Elements enclosed in brackets  ([]) 
are  optional.   All elements in capital letters are 
reserved words and must be spelled exactly.

User names are indicated in lower case.  These names 
are  unrestricted in length,  however they  must  be 
unique  within  the first 15 characters.   The  only 
other  restriction on user names is that  the  first 
character must be an alpha character.  The remainder 
of  the user name can have any combination of repre-
sentable characters in it.
COBOL.DOC                                    Page 2


The  input to the compiler does not need to  conform 
to standard COBOL format.   Free form input will  be 
accepted  as  the default  condition.   If  desired, 
sequence  numbers  can be entered in the  first  six 
positions of each line.   However, a toggle needs to 
be  set to cause the compiler to ignore the sequence 
numbers.

The first character position on any line is used  to 
indicate the following:

           * - indicates a comment entry.
           : - indicates a debugging line.
           / - indicates a page eject.


               III. Compiler Toggles

There  are six compiler toggles which are controlled 
by  an entry following the compiler activation  com-
mand,  COBOL<filename>.   The  format of  the  entry 
consists  of  following <filename> by one space  and 
then  entering  a "$" followed  immediately  by  the 
desired toggles.  There must be only one space after 
<filename>  and  no spaces between the "$"  and  the 
toggles.   The  following is an example of a typical 
entry:

                  COBOL EXAMPLE $S

This  entry would cause the compiler to  ignore  the 
first  six characters (used for sequence numbers) at 
the beginning of each input line.   In each case the 
toggle reverses the default value.

     $C  - No intermediate code.   Default  is  off.  
     Setting  this toggle speeds initial compilation 
     for syntax checking.   When this toggle is  set 
     the "CIN" file is empty.

     $D  - Debugging mode.   Default is  off.   This 
     toggle sets the debugging mode, which means all 
     debugging  lines  (those with a ':'  in  column 
     one)  are compiled.   If this toggle is not set 
     in the ENVIRONMENT DIVISION of the source  pro-
     gram  all  debugging lines are treated as  com-
     ments.

     $L  - list the input code on the screen as  the 
     program  is compiled.   Default is  on.   Error 
     messages  are displayed at the terminal in  any 
     case.
COBOL.DOC                                    Page 3


     $P  - Productions.  List  productions  as  they 
     occur.  Default is off.

     $S  - sequence  numbers  are in the  first  six 
     positions of each record.  Default is off.

     $T  - Tokens.   List tokens from  the  scanner.  
     Default is off.

     $W  - Create a list file.   Default is off.   A 
     listing  file  is created when this  toggle  is 
     set.   When  this toggle is not set  the  "LST" 
     file will only contain error messages.


              IV. Run Time Conventions

This section explains how to run the compiler on the 
current system.   The compiler expects to see a file 
with a type of CBL as the input file.   In  general, 
the  input  is  free form.   If the  input  includes 
sequence numbers then the compiler must be  notified 
by setting the appropriate toggle.   The compiler is 
started by typing COBOL <filename>.   Where the file 
name is the system name of the input file.  There is 
no  interaction required to start the second part of 
the  compiler.   The output file will have the  same 
<filename>  as the input file,  and will be given  a 
file type of CIN.   any previous copies of the  file 
will  be erased.   As with the CIN file,  a LST file 
will be created with the same file name as the input 
file and any previous LST files with that name  will 
`e erased.

The  interpreter  is started by typing  EXEC  <file-
name>.   The first program is a loader,  and it will 
display  "NPS MICRO-COBOL LOADER VERS 2.1"  followed 
by the display "LOAD FINISHED" to indicates success-
ful  completion.    The  run-time  package  will  be 
brought in by the EXEC routine, and execution should 
continue without interruption.   Successful transfer 
of  control to the interpreter will be indicated  by 
the  display "NPS MICRO-COBOL INTERPRETER VERS 2.1."  
Completion of program execution will be indicated by 
the display "X EXECUTION ERROR(S)," where "X" is the 
number of errors which occurred during execution.
COBOL.DOC                                    Page 4


           V. File Interactions with CP/M

The  file structure that is expected by the  program 
imposes some restrictions on the system.  References 
4  and 5 contain detailed information on the facili-
ties of CP/M,  and should be consulted for  details.  
The  information that has been included in this sec-
tion is intended to explain where limitations  exist 
and how the program interacts with the system.

All files in CP/M are on a random access device, and 
there  is  no way for the system to distinguish  se-
quential files from files created in a random  mode.  
This  means  that  the various types  of  reads  and 
writes  are  all  valid to any file that  has  fixed 
length  records.   The  restrictions of  the  ASSIGN 
statement  prevent a file from being open  for  both 
random and sequential actions during one program.

Each  logical  record  is terminated by  a  carriage 
return  and a line feed.   In the case  of  variable 
length  records,  this  is  the only end  mark  that 
exists.   This  convention was adopted to allow  the 
various programs which are used in CP/M to work with 
the files.   Files created by the editor,  for exam-
ple,  will generally be variable length files.  This 
convention  removes the capability of reading  vari-
able length files in a random mode.

All of the physical records are 128 bytes in length, 
and  the  program  supplies buffer space  for  these 
records in addition to the logical records.  Logical 
records may be of any desired length.
COBOL.DOC                                    PAGE 5









              IDENTIFICATION DIVISION

ELEMENT:

     IDENTIFICATION DIVISION Format

FORMAT:

     IDENTIFICATION DIVISION.
     PROGRAM-ID. <comment>.
     [AUTHOR. <comment>.]
     [DATE-WRITTEN. <comment>.]
     [SECURITY. <comment>.]

DESCRIPTION:

     This division provides information for  program 
     identification  for the reader.   The order  of 
     the lines is fixed.

EXAMPLES:

     IDENTIFICATION DIVISION.

     PROGRAM-ID. SAMPLE.

     AUTHOR. HAL R POWELL.
COBOL.DOC                                    PAGE 6




                ENVIRONMENT DIVISION


ELEMENT:

     ENVIRONMENT DIVISION Format

FORMAT:

     [ ENVIRONMENT DIVISION.

     CONFIGURATION SECTION.

     SOURCE-COMPUTER. <comment> [DEBUGGING MODE].

     OBJECT-COMPUTER. <comment>.

     [INPUT-OUTPUT SECTION.

     FILE-CONTROL.

       <file-control-entry> . . .

     [I-O-CONTROL.

       SAME file-name-1 file-name-2 [file-name-3]
               [file-name-4] [file-name-5]. ] ] ]

DESCRIPTION:

     This division determines the external nature of 
     a  file.   In the case of CP/M all of the files 
     used  can  be accessed either  sequentially  or 
     randomly except for variable length files which 
     are  sequential only.   The debugging  mode  is 
     also  set by this section.   The DEBUGGING MODE 
     clause  is used in conjunction with the ':'  to 
     indicate  conditional  compilation.    If  this 
     clause is specified, all debugging lines (those 
     with  a ':' in column one)  are  compiled.   If 
     this  clause  is not specified,  all  debugging 
     lines are treated as comments.  In addition the 
     DEBUGGING  MODE can be specified by  using  the 
     compiler toggle 'D.'
COBOL.DOC                                    Page 7


                <file-control-entry>


ELEMENT:

     <file-control-entry>

FORMAT:

     1.
        SELECT file-name
         ASSIGN implementor-name
         [ORGANIZATION SEQUENTIAL]
         [ACCESS SEQUENTIAL].

     2.
        SELECT file-name
         ASSIGN implementor-name
         ORGANIZATION RELATIVE
         [ACCESS éSEQUENTIAL [RELATIVE data-name]è].
                 éRANDOM RELATIVE data-name      è

     3.
        SELECT file-name
         ASSIGN implementor-name
         ORGANIZATION INDEXED
         [ACCESS éSEQUENTIALè].
                 éRANDOM    è

DESCRIPTION:

     The file-control-entry defines the type of file 
     that the program expects to see.   There is  no 
     difference  on  the diskette,  but the type  of 
     reads  and writes that are performed will  dif-
     fer.   For  CP/M the implementor name needs  to 
     conform to the normal specifications.   Indexed 
     is not implemented.

EXAMPLES:

     SELECT CARDS
         ASSIGN CARD.FIL.
     SELECT RANDOM-FILE
         ASSIGN A.RAN
         ORGANIZATION RELATIVE
         ACCESS RANDOM RELATIVE RAND-FLAG.
COBOL.DOC                                    PAGE 8


                   DATA DIVISION

ELEMENT:

     DATA DIVISION Format

FORMAT:

     DATA DIVISION.
     [FILE SECTION.
     [FD file-name
         [BLOCK integer-1 RECORDS]
         [RECORD [integer-1 TO] integer-3]
         LABEL RECORDS éSTANDARDè]
                éOMITTEDè
         [VALUE OF implementor-name-1 literal-1
            [implementor-name-2 literal-2] . . . ].
         [<record-description-entry>] . . . ] . . .
         [WORKING-STORAGE SECTION.
         [<record-description-entry>] . . . ]
         [LINKAGE SECTION.
         [<record-description-entry>] . . . ]
COBOL.DOC                                    Page 9


                     <comment>

DESCRIPTION:

     This is the section that describes how the data 
     is structured.   There are no major differences 
     from  standard COBOL except for the  following:  
     1.  Label records make no sense on the diskette 
     so  no  entry is required.   2.   The VALUE  OF 
     clause likewise has no meaning for CP/M.   If a 
     record is given two lengths as in RECORD 12  to 
     128,  the  file is taken to be variable  length 
     and  can  only  be accessed in  the  sequential 
     mode.  See the section on files for more infor-
     mation.
COBOL.DOC                                    Page 10


                     <comment>


ELEMENT:

     <comment>

FORMAT:

     any string of characters

DESCRIPTION:

     A  comment is a string of characters.   It  may 
     include  anything other than a period  followed 
     by a blank or a reserved word,  either of which 
     terminate the string.  Comments may be empty if 
     desired,  but the terminator is still  required 
     by the program.

EXAMPLES:

     this is a comment
     anotheroneallruntogether
     8080b 16K

Note  page  1:   * in column 1 to cause compiler  to 
ignore sequence numbers.
COBOL.DOC                                    Page 11


              <data-description-entry>

ELEMENT:

     <data-description-entry> Format

FORMAT:

     level-number édata-nameè
                  éFILLER   è
     [REDEFINES data-name]
     [PIC character-string]
     [USAGE éCOMP   è]
            éCOMP-3è
            éCOMPUTATIONALè
            éDISPLAYè
     [SIGN éLEADINGè [SEPARATE]]
            éTRAILINGè
     [OCCURS integer]
     [SYNC [LEFT]]
            [RIGHT]
     [VALUE literal].

DESCRIPTION:

     This  statement describes the  specific  attri-
     butes  of the data.   Since the 8080 is a  byte 
     machine,  there  was  no  meaning to  the  SYNC 
     clause,  and thus it has not been  implemented, 
     however  existing programs that are transferred 
     to  MICRO-COBOL and use this feature will  com-
     pile  and  execute successfully.   All  numeric 
     data are maintained in DISPLAY format or packed 
     BCD if the COMP-3 option is used.

EXAMPLES:

     01 CARD-RECORD.
       02 PART PIC X(5).
       02 NEXT-PART PIC 99V99 USAGE DISPLAY.
       02 FILLER.
          03 NUMB PIC S9(3)V9 SIGN LEADING SEPARATE.
          03 LONG-NUMB 9(15).
          03 STRING REDEFINES LONG-NUMB PIC X(15).
       02 ARRAY PIC 99 OCCURS 100.
COBOL.DOC                                    PAGE 12


                 PROCEDURE DIVISION

ELEMENT:

     PROCEDURE DIVISION Format

FORMAT:

     1.

        PROCEDURE DIVISION [USING name1 [name2] . . . [name5]].
        section-name SECTION.
        [paragraph-name. <sentence> [<sentence> . . . ] . . . ] . . .

     2.

        PROCEDURE DIVISION [USING name1 [name2] . . . [name5]].
        paragraph-name. <sentence> [<sentence> . . . ] . . .

DESCRIPTION:

     As is indicated,  if the program is to  contain 
     sections, then the first paragraph must be in a 
     section.
COBOL.DOC                                    Page 13


                     <sentence>

ELEMENT:

     <sentence>

FORMAT:

     <imperative-statement>

     <conditional-statement>
COBOL.DOC                                    Page 14


               <imperative-statement>

ELEMENT:

     <imperative-statement>

FORMAT:

     The following verbs are *always* imperative:

        ACCEPT . . . . . . . . 15
        CALL . . . . . . . . . 17
        CLOSE  . . . . . . . . 17
        DISPLAY  . . . . . . . 18
        EXIT . . . . . . . . . 19
        GO . . . . . . . . . . 20
        MOVE . . . . . . . . . 22
        OPEN . . . . . . . . . 24
        PERFORM  . . . . . . . 25
        STOP . . . . . . . . . 27

     The following *may be* imperatives:

     arithmetic verbs (ADD (16), DIVIDE (19), MULTI-
     PLY  (23),  SUBTRACT (28)) *without*  the  SIZE 
     ERROR  statement and DELETE (18),  WRITE  (29), 
     and REWRITE (26) *without* the INVALID option.
COBOL.DOC                                    Page 15


              <conditional-statements>

ELEMENT:

     <conditional-statements>

FORMAT:

     IF . . . . . . . . . . . . 21
     READ . . . . . . . . . . . 26

     arithmetic  verbs *with* the SIZE ERROR  state-
     ment and DELETE,  WRITE, and REWRITE *with* the 
     INVALID option.


                       *****


                       ACCEPT

ELEMENT:

     ACCEPT

FORMAT:

     ACCEPT<identifier>

DESCRIPTION:

     This statement reads up to 255 characters  from 
     the  console.   The  usage of the item must  be 
     DISPLAY.

EXAMPLES:

     ACCEPT IMAGE.

     ACCEPT NUM(9).
COBOL.DOC                                    Page 16


                        ADD

ELEMENT:

     ADD

FORMAT:

     ADD  éidentifier-1è  [éidentifier-2è]  . . .  TO identifier-m
          éliteral-1   è   éliteral-2   è
          [ROUNDED] [SIZE ERROR <imperative-statement>]

DESCRIPTION:

     This  instruction  adds either one number to  a 
     second with the result being placed in the last 
     location.   Multiple adds have not been  imple-
     mented.

EXAMPLES:

     ADD 10 TO NUM1

     ADD X TO Z ROUNDED.

     ADD 100 TO NUMBER SIZE ERROR GO ERROR-LOC
COBOL.DOC                                    Page 17


                        CALL

ELEMENT:

     CALL

FORMAT:

     CALL literal [USING name1 [name2] . . . [nameN]]

DESCRIPTION:

     Control is transferred to the called  procedure 
     with an address of each of the parameters to be 
     passed.   The  parameters  map to those in  the 
     linkage  section of the  called  program.   The 
     type  and  size  of the parameters  must  match 
     exactly.

EXAMPLES:

     CALL 'NC152' USING DN1

     CALL 'PRINT'

     CALL 'ADDLIST' USING VAR1 VAR2 VAR3

                       *****

                       CLOSE

ELEMENT:

     CLOSE

FORMAT:

     CLOSE file-name

DESCRIPTION:

     Files  must be closed if they have ben written.  
     However,  the  normal requirement to  close  an 
     input  file prior to the end of processing does 
     not exist.

EXAMPLES:

     CLOSE FILE1

     CLOSE RANDFILE
COBOL.DOC                                    Page 18


                       DELETE

ELEMENT:

     DELETE

FORMAT:

     DELETE file-name [INVALID <imperative-statement>]

DESCRIPTION:

     This  statement requires the file-name  of  the 
     item  to be deleted.   The record is  logically 
     removed by filling it with a high value charac-
     ter, which is not displayable to the console or 
     line printer.   The logical record space can be 
     used  again  by writing a valid record  in  its 
     place.

EXAMPLES:

     DELETE FILE-NAME

                       *****

                      DISPLAY

ELEMENT:

     DISPLAY

FORMAT:

     DISPLAY éidentifierè [éidentifier-1è] . . . [éidentifier-Nè]
             éliteral   è  éliteral-1   è  . . .  éliteral-N   è

DESCRIPTION:

     This  displays the contents of an identifier or 
     displays a literal on the console.   Usage must 
     be DISPLAY.   The maximum length of the display 
     is  80  characters for literal values  and  255 
     characters for identifiers.

EXAMPLES:

     DISPLAY MESSAGE-1

     DISPLAY MESSAGE-3 10

     DISPLAY 'THIS MUST BE THE END'
COBOL.DOC                                    Page 19


                       DIVIDE

ELEMENT:

     DIVIDE

FORMAT:

     DIVIDE éidentifierè INTO identifier-1 [ROUNDED]
            éliteral   è
          [SIZE ERROR <imperative-statement>]

DESCRIPTION:

     The result of the division is stored in identi-
     fier-1; any remainder is lost.

EXAMPLES:

     DIVIDE NUMB INTO STORE
     DIVIDE 25 INTO RESULT


                       *****


                        EXIT

ELEMENT:

     EXIT

FORMAT:

     EXIT [PROGRAM]

DESCRIPTION:

     The EXIT command causes no action by the inter-
     preter  but allows for an empty  paragraph  for 
     the construction of a common return point.  The 
     optional  PROGRAM  terminates a subroutine  and 
     returns  to the calling program.   It's use  in 
     the main program causes no action to be taken.

EXAMPLES:

     EXIT PROGRAM

     EXIT
COBOL.DOC                                    Page 20


                         GO

ELEMENT:

     GO

FORMAT:

     1.
          GO procedure-name

     2.
          GO procedure-1 [procedure-2] . . . procedure-20

             DEPENDING identifier

DESCRIPTION:

     The  GO command causes an unconditional  branch 
     to  the  routine specified.   The  second  form 
     causes a forward branch depending on the  value 
     of the contents of the identifier.  The identi-
     fier  must be a numeric integer  value.   There 
     can be no more than 20 procedure names.

EXAMPLES:

     GO READ-CARD.

     GO READ1 READ2 READ3 DEPENDING READ-INDEX
COBOL.DOC                                    Page 21


                         IF

ELEMENT:

     IF

FORMAT:

     IF <condition> éstmt-lst   è END-IF
     IF <condition> éstmt-lst   è ELSE éstmt-lstè END-IF
          éNEXT SENTENCEè   éNEXT SENTENCEè

DESCRIPTION:

     This  is  an enhanced version of  the  standard 
     COBOL IF statement.  Nesting of IF statement is 
     allowed.

EXAMPLES:

     IF A GREATER B ADD A TO C ELSE GO ERROR-ONE END-IF.

     IF A NOT NUMERIC NEXT SENTENCE ELSE MOVE ZERO TO A END-IF.

     IF A LESS B
          DISPLAY A
          DISPLAY B END-IF.

     IF A GREATER B
          DISPLAY A
          DISPLAY B
     ELSE
          DISPLAY C
          DISPLAY D END-IF.

     IF A GREATER B
          IF A GREATER C
             DISPLAY A
          ELSE
             DISPLAY C
          END-IF
     ELSE
          IF B GREATER C
             DISPLAY B
          ELSE
             DISPLAY C
          END-IF
     END-IF.
COBOL.DOC                                    Page 22


                        MOVE

ELEMENT:

     MOVE

FORMAT:

     MOVE éidentifier-1è TO identifier-2
          éliteral     è

DESCRIPTION:

     The standard list of allowable moves applies to 
     this action.  As a space saving feature of this 
     implementation,  all  numeric moves go  through 
     the  accumulators.   This  makes numeric  moves 
     slower  than  alpha-numeric  moves,  and  where 
     possible they should be avoided.  Any move that 
     involves  picture clauses that are exactly  the 
     same  can be accomplished as  an  alpha-numeric 
     move  if  the elements are redefined as  alpha-
     numeric;   also  all  group  moves  are  alpha-
     numeric.

EXAMPLES:

     MOVE SPACE TO PRINT-LINE.

     MOVE A(10) TO B(PTR).
COBOL.DOC                                    Page 23


                      MULTIPLY

ELEMENT:

     MULTIPLY

FORMAT:

     MULTIPLY éidentifierè BY identifier-2 [ROUNDED]
              éliteral   è
          [SIZE ERROR <imperative-statement>]

DESCRIPTION:

     The multiply routine uses a double length  reg-
     ister to calculate the result.  This allows the 
     result  generated  to be of maximum  precision.  
     The  actual value stored will be determined  by 
     the  amount of storage allocated for the  vari-
     able.  Overflow will occur if the number in the 
     register is larger than the variable.   If  the 
     precision  in the register is greater than  the 
     variable,  truncation  occurs unless the  round 
     option is specified.

EXAMPLES:

     MULTIPLY X BY Y.

     MULTIPLY A BY B(7) SIZE ERROR GO OVERFLOW.
COBOL.DOC                                    Page 24


                        OPEN

ELEMENT:

     OPEN

FORMAT:

     OPEN éINPUT file-name-1 è [éfile-name-2è] . . .
          éOUTPUT file-name-1è [éfile-name-2è] . . .
          éI-O file-name-1   è [éfile-name-2è] . . .

DESCRIPTION:

     The  three types of OPENS have exactly the same 
     effect on the diskette.  However, they do allow 
     for  internal  checking of the other  file  ac-
     tions.  For example, a write to a file set open 
     as  input will cause a fatal  error.   Multiple 
     opens have not been implemented.

EXAMPLES:

     OPEN INPUT CARDS.

     OPEN OUTPUT REPORT-FILE.
COBOL.DOC                                    Page 25


                      PERFORM

ELEMENT:

     PERFORM

FORMAT:

     1.
          PERFORM procedure-name [THRU procedure-name-2]
     2.
          PERFORM procedure-name [THRU procedure-name-2]
             éidentifierè TIMES
             éinteger   è
     3.
          PERFORM procedure-name [THRU procedure-name-2]
             UNTIL <condition>
     4.
          PERFORM procedure-name VARYING éidentifierè
             FROM éidentifierè BY éidentifierè
             UNTIL <condition>

DESCRIPTION:

     All four options are supported.   Branching may 
     be either forward or backward,  and the  proce-
     dures  called  may have perform  statements  in 
     them  as long as the end points do not coincide 
     or overlap.

EXAMPLES:

     PERFORM OPEN-ROUTINE.

     PERFORM TOTALS THRU END-REPORT.

     PERFORM SUM 10 TIMES.

     PERFORM SKIP-LINE UNTIL PG-CNT GREATER 60.

     PERFORM REPEAT-AGAIN VARYING COUNTER FROM 1 BY 2
          UNTIL COUNTER EQUAL 10.
COBOL.DOC                                    Page 26


                        READ

ELEMENT:

     READ

FORMAT:

     1.
          READ file-name INVALID <imperative-statement>

     2.
          READ file-name END <imperative-statement>

DESCRIPTION:

     The  invalid  condition is only  applicable  to 
     files in a random mode.   All sequential  files 
     must have an END statement.

EXAMPLES:

     READ CARDS END GO END-OF-FILE.

     READ RANDOM-FILE INVALID MOVE SPACES TO REC-1.

                       *****

                      REWRITE

ELEMENT:

     REWRITE

FORMAT:

     REWRITE record-name [INVALID <imperative>]

DESCRIPTION:

     REWRITE  is only valid for files that are  open 
     in  the I-O mode.   The INVALID clause is  only 
     valid for random files.  This statement results 
     in  the current record being written back  into 
     the place that it was just read from,  the last 
     executed read.

EXAMPLES:

     REWRITE CARDS.

     REWRITE RAND-1 INVALID PERFORM ERROR-CHECK.
COBOL.DOC                                    Page 27


                        STOP

ELEMENT:

     STOP

FORMAT:

     STOP éRUN   è
          éliteralè

DESCRIPTION:

     This  statement stops execution of the program.  
     If a literal is specified,  then the literal is 
     displayed  on the console and a prompt is  dis-
     played  giving the operator the option of  ter-
     minating or continuing program execution.

EXAMPLES:

     STOP RUN.

     STOP 1.

     STOP 'INVALID FINISH'.

     For  the last two examples the following prompt 
     is displayed:

     OPERATOR ENTER A <CR> TO CONTINUE
         OR ENTER AN "S" TO TERMINATE.
COBOL.DOC                                    Page 28


                      SUBTRACT

ELEMENT:

     SUBTRACT

FORMAT:

     SUBTRACT éidentifier-1è [identifier-2] . . . FROM identifier-m
              éliteral-1   è [literal-2   ]
          [ROUNDED] [SIZE ERROR <imperative-statement>]

DESCRIPTION:

     Identifier-m,  is  decremented by the value  of 
     identifier/literal one.  The results are stored 
     back in identifier-m.   Rounding and size error 
     options  are available  if  desired.   Multiple 
     subtracts have not been implemented.

EXAMPLES:

     SUBTRACT 10 FROM SUB(12).

     SUBTRACT A FROM C ROUNDED.
COBOL.DOC                                    Page 29


                       WRITE

ELEMENT:

     WRITE

FORMAT:

     1.
          WRITE record-name [éBEFOREè ADVANCING éINTEGERè]
                 éAFTER è      éPAGE  è
     2.
          WRITE record-name INVALID <imperative-statement>

DESCRIPTION:

     The  record  specified is written to  the  file 
     specified  in  the file section of  the  source 
     program.   The  INVALID option only applies  to 
     random files.

EXAMPLES:

     WRITE OUT-FILE.

     WRITE RAND-FILE INVALID PERFORM ERROR-RECOV.
COBOL.DOC                                    Page 30


                    <condition>

ELEMENT:

     <condition>

FORMAT:

     RELATIONAL CONDITION:

          éidentifier-1è [NOT] éGREATERè éidentifier-2è
          éliteral-1è      éLESS  è éliteral-2   è
                           éEQUAL è
     CLASS CONDITION:
          identifier [NOT] éNUMERIC  è
                           éALPHABETICè

DESCRIPTION:

     It  is not valid to compare two literals.   The 
     class  condition NUMERIC will allow for a  sign 
     if the identifier is signed numeric.

EXAMPLES:

     A NOT LESS 10.

     LINE GREATER 'C'.

     NUMB1 NOT NUMERIC
COBOL.DOC                                    Page 31


                    Subscripting

ELEMENT:

     subscripting

FORMAT:

     data-name (subscript)

DESCRIPTION:

     Any  item defined with an OCCURS may be  refer-
     enced by a subscript.   The subscript may be  a 
     literal integer,  or it may be a data item that 
     has been specified as an integer.   If the sub-
     script is signed,  the sign must be positive at 
     the time of its use.

EXAMPLES:

     A(10)

     ITEM(SUB)
COBOL.DOC                                    Page 32


                 VI. Error Messages

             A. Compiler Fatal Messages


BR  Bad read - disk error,  no corrective action can 
    be taken in the program.

CL  Close error - unable to close the output file.

MA  Make error - could not create the output file.

MO  Memory  overflow  - the code and constants  gen-
    erated  will  not  fit in  the  allotted  memory 
    space.

OP  Open error - can not open the input file,  or no 
    such file present.

SO  Stack  overflow  - LALR (1)  parsing  stack  has 
    exceeded its maximum allowable size.

ST  Symbol  table  overflow - symbol  table  is  too 
    large for the allocated space.

WR  Write error - disk error, could not write a code 
    record to the disk.
COBOL.DOC                                    Page 33


                B. Compiler Warnings

DD  Carriage  Control error - The WRITE BEFORE/AFTER 
    ADVANCING  option can only be used with  sequen-
    tial files.

CE  Close error - attempted to close a  non-existing 
    file.

DD  Duplicate  Declaration - the identifier name has 
    been previously declared.

EL  Extra levels - only 10 are allowed.

FT  File  type - the data element used in a read  or 
    write statement is not a file name.

IA  Invalid  access - the specified options are  not 
    an allowable combination.

ID  Identifier  stack overflow - more than 20  items 
    in a GO - DEPENDING statement.

IS  Invalid subscript - an item was subscripted  but 
    it was not defined by an OCCURS.

IT  Invalid  type - the field types do not match for 
    this statement.

LE  Literal error - a literal value was assigned  to 
    an  item that is part of a group item previously 
    assigned a value.

LV  Literal  value error - the PICTURE clause  field 
    type  does  not match the VALUE  clause  literal 
    type.

L7  Level 77 error - level 77 used incorrectly.

MD  Multiple decimals - a numeric literal in a VALUE 
    clause contains more than one sign.

NF  No  file assigned - there was no  SELECT  clause 
    for this file.

NI  Not  implemented - a production was used that is 
    not implemented.

NP  No  production  - no production exists  for  the 
    current  parser  configuration;  error  recovery 
    will automatically occur.
COBOL.DOC                                    Page 34


            B. Compiler Warnings (cont.)

NV  Numeric value - a numeric value was assigned  to 
    a non-numeric item.

OE  Open error - attempt to open a file that was not 
    declared;  or  attempted to open a file for  I-O 
    that was not a RELATIVE file.

OL  OCCURS  LEVEL - 01 and 77 levels can not contain 
    an occurs clause.

PC  Picture clause - a pic clause exceeds 30 charac-
    ters.

P1  More than one float symbol declared.

P2  Non-numeric data in repetition clause or missing 
    right parenthesis.

P3  Invalid or incompatible symbol in pic clause.

P4  Invalid symbol(s) embedded within a float symbol 
    only /,O,B,',' allowed.

P5  Invalid  combination of symbols in  pic  clause, 
    type cannot be determined.

P6  Number of possible numeric entries exceeds  reg-
    ister length max is 18.

PF  Paragraph  first - a section header was produced 
    after  a  paragraph header,  which is not  in  a 
    section.

R1  Redefine  nesting - a redefinition was made  for 
    an item which is part of a redefined item.

R2  Redefine length - the length of the redefinition 
    item  was  greater than the item that  is  rede-
    fined.   That  is only allowed at the 01  level.  
    This  error message may be printed out one iden-
    tifier past the redefining identifier record  in 
    which it occurred.

R3  Redefines  misplaced - a redefines was attempted 
    in the FILE SECTION of the source program.

SE  Scanner  error - the scanner was unable to  read 
    an identifier due to an invalid character.
COBOL.DOC                                    Page 35


            B. Compiler Warnings (cont.)


SG  Sign error - either a sign was expected and  not 
    found, or a sign was present when not valid.

SL  Significance  loss  - the number assigned  as  a 
    value is larger than the field defined.

TE  Type  error  - the type of a subscript index  is 
    not integer numeric.

UD  Undeclared  identifier - the identifier was  not 
    declared.

UL  Unresolved   label   - label   has   not    been 
    referenced.   This  warning will be given to all 
    references to external subroutines.

VE  Value error - a value statement was assigned  to 
    an item in the file section.

WL  Wrong level error - program attempted to write a 
    record  other  than  an 01 level  record  to  an 
    output file.
COBOL.DOC                                    Page 36


            C. Interpreter Fatal Errors

CL  Close  error - the system was unable to close an 
    output file.

CO  Call   stack  Overflow   - insufficient   memory 
    available  to transfer variable address'  and/or 
    return location for a subroutine call.

ME  Make  error  - the system was unable to make  an 
    output file on the disk.

NF  No  file  - an input file with  the  given  name 
    could not be opened.

OE  Open  Error  - attempt to open a file which  was 
    already open.

OP  open  Error  - the system was unable to  open  a 
    file.

PS  Procedure Stack - not enough memory to load  all 
    subroutines.

SO  Subroutine  Overflow  - subroutine symbol  table 
    overflow.

W1  Write  non-sequential - attempted to WRITE to  a 
    file  opened for INPUT or a file opened for  I-O 
    when ACCESS was SEQUENTIAL.

W2  Wrong key - attempted to change the key value to 
    a lower value than the number of the last record 
    written.

W3  Write  input  - attempted  to WRITE  to  a  file 
    opened for INPUT.

W4  Write  non-empty - attempted to WRITE to a  non-
    empty record.

W5  Read  output - attempted to READ a  file  opened 
    for OUTPUT.

W6  Rewrite  error - attempted to REWRITE to a  file 
    not opened for I-O.

W7  Rewrite  error - attempted to REWRITE  a  record 
    before  reading  the file;  or multiple  REWRITE 
    attempts without doing a READ between each.
COBOL.DOC                                    Page 37


          D. Interpreter Warning Messages

EM  End mark - a record that was read did not have a 
    carriage  return or a line feed in the  expected 
    location.

GD  Go  to  depending - the value of  the  depending 
    indicator   was  greater  than  the  number   of 
    available branch addresses.

IC  Invalid  character  - an invalid  character  was 
    loaded  into  an output field during  an  edited 
    move.   For example, a numeric character into an 
    alphabetic-only field.

NE  Numeric   Error   - non-numeric   data   in   an 
    arithmetic operation.

W8  Write Error - the system was unable to write  to 
    an output file on the disk.  Disk may be full.

SI  Sign Invalid - the sign is not a "+" or a "-."