Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-05 - 43,50337/07/simlh2.man
There is 1 other file named simlh2.man in the archive. Click here to see a list.


Swedish National Defense Research Institute     FOA 1 Report
Department of Planning and Operations Research  C8399-M3(E5)
S-10450 Stockholm 80                            December 1974
                                                Revised edition:
                                                Dec 1977

DECsystem-10 SIMULA Language Handbook Part II
=============================================

     (Programmer's Guide)

BY   Stefan Arnborg, Olof Bjorner, Lars Enderin, Elisabeth
     Engstrom, Reidar Karlsson, Mats Ohlin, Jacob Palme, Ingrid
     Wennerstrom and Claes Wihlborg.


ABSTRACT:

     The DECsystem-10 SIMULA Language Handbook contains the
     information necessary for an applications programmer who
     intends to use SIMULA on a DECsystem-10 computer.

     Part I contains a description of the SIMULA programming
     language.  The contents of Part I are mostly
     machine-independent.

     Part II (this part) contains special information for
     DECsystem-10.  Part II will tell you:
   > How to run the compiler on a DECsystem-10,
   > What might differ between SIMULA on the DEC 10 and other
     computers,
   > How to write separately compiled classes in SIMULA and
     procedures in SIMULA, MACRO 10 or FORTRAN,
   > How to use the SIMULA Debugging System (SIMDDT),
   > How to produce efficient and portable programs,
   > How to interpret error messages,

     Part III will tell you about useful utility programs in
     SIMULA and/or for SIMULA users.

     This document reflects the software as of version 4 of the
     DECsystem-10 SIMULA system.

     Last update 1977-12-25.


NTIS NUMBER:  PB-243 065.

SEARCH KEY

     Computer, Programming, Programming Language, SIMULA,
     DECsystem-10, Digital Equipment, Algol 60, Fortran, Separate
     compilation, Part-compilation, Debugging, On-line debugging,
     DDT, Dynamic Debugging Technique, Compiler, Compiling
     techniques, Data structures, Diagnostic messages, Error
     messages, Program measurement, Prettyprint, Program library.
DECsystem-10 SIMULA Language Handbook, part II             Page 2


CONDITIONS OF RELEASE

     The information in this document is subject to change
     without notice.  The Swedish National Defense Research
     Institute assumes no responsibility for any errors that may
     appear in this manual (or in the SIMULA-10 system).

     The software described in this document is furnished to the
     user for use on a DECsystem-10 computer system and may be
     copied only for use on DECsystem-10 and DECsystem-20
     systems, except as may otherwise be provided in writing by
     the Swedish National Defense Research Institute.

     Copyright 1974, 1975, 1976, 1977 by The Swedish National
     Defense Research Institute.  Copying is allowed.
DECsystem-10 SIMULA Language Handbook, part II             Page 3
CHAPTER 0 CONTENTS


0    CONTENTS
     ========



        1  INTRODUCTION

        2  DEC SYSTEM-10 SIMULA SYSTEM

        3  OPERATING PROCEDURES

           3.1 INTRODUCTION
           3.2 THE R COMMAND
           3.3 COMPIL-CLASS COMMANDS
           3.4 BATCH
           3.5 SWITCHES


         4  IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE

           4.1 SYSTEM PREFIXES
           4.2 VIRTUAL MATCHES
           4.3 EDITING AND DE-EDITING PROCEDURES
           4.4 MATHEMATICAL LIBRARY FUNCTIONS
           4.5 COLLATING SEQUENCE, LETTER
           4.6 INITIALIZATION OF CHARACTER VARIABLES
           4.7 SUBSCRIPT CHECKING
           4.8 RANDOM DRAWING
           4.9 QUALIFICATION CHECKING
           4.10 SIMULATION PROCEDURE TIME


         5  LANGUAGE EXTENSIONS

         6  RESTRICTIONS

           6.1 CAPACITY RESTRICTIONS
           6.2 PARAMETER CORRESPONDENCE
           6.3 FOR STATEMENTS
           6.4 MISCELLANEOUS RESTRICTIONS
           6.5 RESTRICTIONS IN SIMULA WITH RESPECT TO ALGOL 60


        7  SEPARATE COMPILATION

           7.1 THE EXTERNAL DECLARATION
           7.2 THE EXTERNAL SWITCH
           7.3 RESTRICTIONS ON SEPARATE COMPILATION
           7.4 SIMDIR UTILITY PROGRAM
DECsystem-10 SIMULA Language Handbook, part II             Page 4
CHAPTER 0 CONTENTS


        8  OBJECT PROGRAM I/O

           8.1 INTRODUCTION
           8.2 HOW TO DEFINE A FILE
           8.3 RUN-TIME SWITCHES
           8.4 CLASS INFILE
           8.5 CLASS OUTFILE
           8.6 CLASS PRINTFILE
           8.7 CLASS DIRECTFILE
           8.8 CLASS BASICIO
           8.9 DEVICE CONTROL CHARACTERS


        9  DEBUGGING SIMULA PROGRAMS WITH SIMDDT

           9.1 LOADING AND STARTING SIMDDT
           9.2 SIMDDT INPUT AND OUTPUT
           9.3 SIMDDT COMMANDS



       10  PROGRAMMING CONSIDERATIONS

           10.1 WRITING EFFICIENT PROGRAMS
           10.2 WRITING PORTABLE PROGRAMS
           10.3 WRITING VERY LARGE PROGRAMS
           10.4 MISCELLANEOUS ADVICE
DECsystem-10 SIMULA Language Handbook, part II             Page 5
CHAPTER 0 CONTENTS


        APPENDICES

        A  HARDWARE REPRESENTATION

           A.1 SIMULA COMPILER INPUT
           A.2 SIMULA PROGRAMS ON CARDS
           A.3 STANDARD LINE SEQUENCE NUMBERS
           A.4 BASIC SYMBOLS
           A.5 IDENTIFIERS
           A.6 CONSTANTS
           A.7 COMMENTS
           A.8 USE OF SPACES AND LINE EDITING CHARACTERS


        B  INTERNAL REPRESENTATION

           B.1 REPRESENTATION OF VARIABLES
           B.2 REPRESENTATION OF DYNAMIC ADDRESSES
           B.3 REPRESENTATION OF PARAMETERS
           B.4 DYNAMIC RECORDS


        C  COMPILER DIAGNOSTICS

           C.1 COMMAND AND SWITCH MESSAGES
           C.2 SOURCE CODE DIAGNOSTICS


         D  RUN-TIME AND DEBUG DIAGNOSTICS

           D.1 DIALOGUE MESSAGES
           D.2 RUN-TIME ERROR MESSAGES


        E  HOW TO WRITE AN EXTERNAL MACRO OR 
           FORTRAN PROCEDURE

           E.1 EXTERNAL FORTRAN PROCEDURES
           E.2 FORTRAN PROGRAMMING EXAMPLE
           E.3 EXTERNAL MACRO-10 PROCEDURES
           E.4 MACRO-10 CALLING STANDARD
           E.5 STANDARD MACROS
           E.6 MACRO-10 PROGRAMMING EXAMPLES


        F  RUN-TIME SYSTEM COMPONENTS

        G  RESERVED SIMULA WORDS AND STANDARD IDENTIFIERS
DECsystem-10 SIMULA Language Handbook, part II             Page 6
CHAPTER 0 CONTENTS


        H  SAMPLE JOB LISTINGS

           H.1 THE R COMMAND
           H.2 THE COMPILE COMMAND
           H.3 THE LOAD COMMAND
           H.4 THE EXECUTE COMMAND
           H.5 THE DEBUG COMMAND
           H.6 CONTROL CARDS IN BATCH
           H.7 EXAMPLE OF CTL FILE IN BATCH
           H.8 SOURCE CODE LISTING WITH ERRORS AND
               CROSS REFERENCE TABLE
           H.9 SIMDDT EXAMPLES


        I  ERROR REPORT

        J  PROGRAM MEASUREMENT SYSTEM

        K  TECO, SOS OR EDITS ON SIMULA PROGRAMS

           K.1 WHY LINE NUMBERED FILES?
           K.2 WHICH TEXT EDITOR SHOULD YOU USE?
           K.3 HOW TO USE SOS OR EDITS ON SIMULA SOURCE PROGRAMS
           K.4 HOW TO GIVE A FILE A NEW LINE NUMBER WITH TECO
           K.5 EDITING A LINE NUMBERED FILE WITH TECO


        L  AUTOMATIC EDITING OF SIMULA PROGRAMS

        M  CONVERSION OF SIMULA PROGRAMS
           BETWEEN DEC, IBM AND CDC COMPUTERS

           M.1 CONVERSION FROM IBM 360/370 SIMULA
               TO DEC SYSTEM-10 SIMULA
           M.2 CONVERSION FROM DEC SYSTEM-10 SIMULA
               TO IBM 360/370 SIMULA
           M.3 CONVERSION FROM CDC SIMULA
               TO DEC SYSTEM-10 SIMULA


        N  (Moved to part III of the handbook)

        O  DUMP OF CODE GENERATED BY THE SIMULA COMPILER


        P  CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA

           P.1 WHY TRANSLATE FROM ALGOL TO SIMULA?
           P.2 WHY IS SIMULA NOT COMPATIBLE WITH ALGOL?
           P.3 TEXT STRING HANDLING
           P.4 INPUT/OUTPUT
DECsystem-10 SIMULA Language Handbook, part II             Page 7
CHAPTER 0 CONTENTS


           P.5 MISCELLANEOUS
DECsystem-10 SIMULA Language Handbook, part II             Page 8
Chapter 1 INTRODUCTION


1    INTRODUCTION
     ============


     SIMULA is a general purpose language which contains Algol 60
     as a subset.  Its defining documents are the Common Base
     Language [1] and the Revised Algol 60 Report [2].  In
     addition to the facilities offered by Algol, SIMULA is
     especially suited for list processing, text handling and
     simulation, through the class concept.  The SIMULA language
     is described in detail in the first part of the DECsystem-10
     SIMULA Language Handbook [3].

     The full SIMULA language, including recommended extensions,
     is implemented as defined in Common Base Language.  In
     addition a powerful interactive debugging system called
     SIMDDT is provided.  Special care has been taken to make
     this SIMULA implementation compatible with IBM 360/370
     SIMULA in as many respects as possible.  Conversion programs
     exist which transform IBM 360/370 programs to DECsystem-10
     SIMULA and vice versa (see appendix M).  Compatibility with
     other SIMULA systems is also high and a conversion program
     from CDC SIMULA to DECsystem-10 SIMULA is also available
     (see appendix M).

     This part of the SIMULA Language Handbook contains
     information on all implementation defined parts of the
     SIMULA language, such as object program I/O and various
     restrictions.  It also contains descriptions of features
     unique to the DECsystem-10 implementation, e.g.  commands
     and switches, SIMDDT debugging package and utility programs.

     The reader of this manual is supposed to be familiar with
     the SIMULA language and the time-sharing environment of
     DECsystem-10 [4].

     The development of the SIMULA system was undertaken as a
     joint project between the software house Engmans Elektronik
     AB (ENEA) and the Swedish National Defense Research
     Institute (FOA).  This document was compiled by Olof
     Bjorner, Elisabeth Engstrom, Reidar Karlsson, Ingrid
     Wennerstrom and Claes Wihlborg from ENEA and by Lars
     Enderin, Mats Ohlin, Jacob Palme and Stefan Arnborg from
     FOA.
DECsystem-10 SIMULA Language Handbook, part II             Page 9
Chapter 1 INTRODUCTION


     If you want a copy of the SIMULA system (not for the KA10
     CPU), you should get it either from the Swedish National
     Defence Research Institute or from the DECUS library.  In
     that way you will get the best and latest version.
     Therefore do not privately redistribute the SIMULA system to
     other installations.

     Copies of DECsystem-10 SIMULA for the KA10 CPU can be
     obtained from the Computing Center at the University of
     Western Ontario, London, Canada.

     Reference documents:


     1.  Dahl, Myhrhaug and Nygaard:
         Common Base Language
         Norwegian Computing Center, October 1970.
         Publication No S-22.

     2.  Revised Report on the Algorithmic Language Algol 60
         CACM Vol 6, No 1 1963.

     3.  DECsystem-10 SIMULA Language Handbook, part I
         FOA P Report No C8398-M3(E5), October 1974.

     4.  DECsystem-10 Users Handbook, 2nd Edition
         Digital Equipment Corporation, 1972

     5.  Birtwistle, Myhrhaug, Nygaard:
         SIMULA begin
         Studentlitteratur, Lund, Sweden 1973

     6.  DECsystem-10 SIMULA Technical documentation.  
DECsystem-10 SIMULA Language Handbook, part II            Page 10
Chapter 2 THE DECsystem-10 SIMULA SYSTEM


2.   THE DECsystem-10 SIMULA SYSTEM
     ==============================


     The SIMULA system consists of the following subsystems:

     *  a three pass compiler
     *  a run-time system
     *  an interactive debug system
     *  utility programs and help files.

     The SIMULA system will run under DEC monitors series 5 and 6
     and can be used in the same way as other language
     processors, e.g FORTRAN or COBOL.  The operating procedures
     are described in chapter 3.

     The compiler takes as input a source module specified in the
     command string.  If there are references to external modules
     in the program the compiler also reads attribute files for
     these modules (for further information about external
     modules see chapter 7).  The source program is translated
     into an equivalent object program.  This object program
     together with control information to the run-time system and
     symbol tables are output to a REL file.  If compile-time
     errors or warning conditions were detected, diagnostic
     messages are output to the terminal.  If the compiled module
     was itself an external class or procedure definition, an
     attribute file with extension ATR is output as well.  The
     compiler also produces a program listing with an optional
     cross reference table if requested.

     The object program, i.e.  the REL file produced from the
     main program and all REL files for external modules referred
     to by it, are loaded into core by LINK-10.  LINK-10 also
     searches the SIMULA library SIMLIB and fetches subroutines
     referred to by the object programs.  The output from LINK-10
     is an executable SIMULA program in core which can be saved
     on disk with the SAVE command.

     Before the execution starts, the user may request the
     interactive debug package SIMDDT by issuing the command
     REENTER instead of START.  This loads the self-relocating
     debug system into core.  Otherwise the debug system is
     automatically loaded after execution start when needed.
DECsystem-10 SIMULA Language Handbook, part II            Page 11
Chapter 2 THE DECsystem-10 SIMULA SYSTEM


     When the SIMULA program starts, a reentrant high segment
     (usually called operating system, object-time system or
     run-time system(1)) containing additional support routines
     is fetched from the system area.  The execution of the
     SIMULA program then proceeds.  The high segment is called
     SIMRTS.  For reasons of storage economy, SIMRTS is usually
     split into two separate segments of which one is loaded
     initially and is replaced with the other once initialization
     is ready.  The initial high segment may be needed by some
     programs when creating and opening new files in the course
     of execution, but the other high segment is the one normally
     active.

     If an illegal condition is detected during execution, SIMDDT
     is loaded and an appropriate diagnostic message is printed
     on the user's TTY.  SIMDDT then waits for commands issued by
     the user to find out the cause of the error, but program
     execution can usually not be continued.

     The debug package, SIMDDT, is similar in capacity to DDT but
     is entirely source language oriented.  The user may specify
     breakpoints and conditions to stop at defined statements.
     SIMDDT is described in chapter 9.

     Utility programs exist for conversion of SIMULA source
     programs between CDC SIMULA, IBM 360/370 SIMULA and
     DECsystem-10 SIMULA and for measuring program efficiency.
     These utility programs are described in appendix M.  A
     special program, SIMDIR, can be used to obtain information
     from the directory about the files compiled with the SIMULA
     compiler.  The SIMDIR program is described in chapter 7.

     The ability of TOPS-10 to share reentrant code in high
     segments has been utilized in the compiler and SIMRTS.  The
     compiler generates code in the low segment.  This code is
     also reentrant as long as no breakpoints are set.  Library
     routines in SIMLIB are also kept in low segment and are not
     reentrant.

     The compiler will run in a minimum of 23K words for very
     small programs and in 30K words for large programs.  The
     reentrant parts of RTS will occupy either 4.5K or 5.5K words
     of core.


-----------------

(1) The routines in SIMLIB and SIMRTS are called run-time  system
(RTS) throughout this manual.
DECsystem-10 SIMULA Language Handbook, part II            Page 12
Chapter 2 THE DECsystem-10 SIMULA SYSTEM


     The following help files exist:

     SIMULA.HLP
     contains information about the SIMULA system and references
     to other help files and documentation files.

     SIMCOM.HLP
     contains information about command string format and
     compile-time switches.  This file is also printed as a
     result of the compiler switch HELP.

     SIMRTS.HLP
     contains information about run-time switches and file
     definitions in a specification file.  This file is also
     printed as a result of the run-time switch HELP.

     SIMDDT.HLP
     contains information about available SIMDDT commands.  An
     abbreviated version of this file is printed on the user's
     TTY as a result of the SIMDDT command HELP.  
DECsystem-10 SIMULA Language Handbook, part II            Page 13
Chapter 3 OPERATING PROCEDURES


3.   OPERATING PROCEDURES
     ====================



3.1  INTRODUCTION

     The DECsystem-10 monitor supports both time-sharing and
     multiprogramming batch mode of operation.  The SIMULA
     programmer can use either or both of these operating
     environments to develop his applications.  In the
     time-sharing environment he can run the SIMULA compiler
     either directly using the R command or indirectly using the
     commands COMPILE, LOAD, DEBUG and EXECUTE.  In a batch
     environment he can also use a special batch card $SIMULA.
DECsystem-10 SIMULA Language Handbook, part II            Page 14
Chapter 3.2 OPERATING PROCEDURES, THE R COMMAND


3.2  THE R COMMAND

     This command can be used if your installation has not yet
     implemented SIMULA into the COMPIL cusp, which interprets
     commands like COMPILE and EXECUTE.

     The compiler is invoked with the following command:

     R SIMULA

     The compiler outputs an asterisk (*) on the terminal and is
     now ready to accept the first command.  A command should
     have the following format:

     relfil,lstfil=source1,source2,...

     Syntax:

     1. Each file descriptor has the format:

     dev:filename.ext[path]/switch/switch...

     Default for device (dev) is DSK.  If no path (directory) is
     given, your own default path, which may be different from
     your logged-in ppn (UFD), is used.  The default path can be
     changed by the SETSRC program.  See the SETSRC program in
     the Monitor Commands manual and the PATH. UUO in the Monitor
     Calls manual for further information about default paths.
     Subfile directories may be used.

     2. relfil receives the object code generated by the
     compiler.  If a file specification for relfil is given
     explicitly or by default, it is normally created unless
     severe errors were detected during compilation.  Exception:
     No rel file is produced when compiling the procedure heading
     for a procedure with OPTIONS /E:CODE, QUICK, FORTRAN or F40.
     See chapter 7 and app. E.  Default filename is the name of
     the first source.  Default extension (ext) is REL.

     3. lstfil receives the program listing generated by the
     compiler and is produced if one of the switches L or C is
     set (see below).  Default filename is the name of the last
     source file.  Default extension (ext) is LST.

     4. source1, source2, ...  are the source files which,
     combined, make up one SIMULA source program.  Default
     extension is SIM.  If no extension is given with the source
     file specification, .SIM is tried first, then the null
     extension.  (x.SIM, then x.).  Device must be disk or a
     logical name assigned to a disk device with the monitor
     command ASSIGN.
DECsystem-10 SIMULA Language Handbook, part II            Page 15
Chapter 3.2 OPERATING PROCEDURES, THE R COMMAND


     5. Underline (left arrow) (_) may be used instead of equal
     sign (=).

     6. If only one source file is used as input and default
     names of rel and lst files are desired the equal sign or
     underline (left arrow) may be omitted.
     Example:
       .R SIMULA
       *DSKD:X.SIM[123,456]
     is equivalent to
       .R SIMULA
       *DSK:X.REL,DSK:X.LST=DSKD:X.SIM[123,456]

     7.  A number of switches may follow any of the file
     descriptors.  A switch applies from the beginning of the
     preceding source file until the switch is changed.  Note
     however that certain switches must appear before the start
     of the program, i.e.  must follow the first source
     specification.  Switches following relfil or lstfil apply to
     the first source.  The switches are described in section
     3.5.

     8.  Leading and trailing spaces or tabs are ignored in a
     file descriptor.  The following characters delimit a file
     descriptor:
     carriage return (<CR>)
     comma (,)
     equal sign (=)
     left arrow (_)
     All other delimiting characters will be treated as illegal
     and cause an error message to appear on the terminal.

     9.  Legal characters in a device name, file name or
     extension are letters (lower case are converted to upper
     case), digits (0-9), dollar ($) and percent (%).

     10.  A project or programmer number must not exceed 6 digits
     and must contain only octal digits (i e not 8 or 9).
     Alternatively, the project or programmer number, or both,
     may be empty, normally implying that the missing number(s)
     should be taken from the UFD (logged-in ppn).  Specifically,
     [,] means your own ppn.  If the device has an implied ppn
     (SYS, HLP, NEW, LIB etc), that ppn is used as default
     instead of the UFD, however.  The default path, which is
     assumed when no path is given, can also be designated by
     [-].  The path definition must be surrounded by square
     brackets.  Sub-file directories are allowed.
DECsystem-10 SIMULA Language Handbook, part II            Page 16
Chapter 3.2 OPERATING PROCEDURES, THE R COMMAND


     When the program is compiled without errors the following
     text is printed on the terminal:

     NO ERRORS DETECTED

     If errors were detected during the compilation the typed
     text consists of the diagnostic messages together with the
     relevant source lines and the message:

     ERRORS DETECTED:

        ww TYPE W
        ee TYPE E

     where ww is number of warnings and ee is number of errors.

     Then a new asterisk is output and a new command may be
     entered.  The compilation is terminated with control-C.
DECsystem-10 SIMULA Language Handbook, part II            Page 17
Chapter 3.3 OPERATING PROCEDURES, COMPIL-CLASS COMMANDS


3.3  COMPIL-CLASS COMMANDS


     Any of the commands COMPILE, LOAD, EXECUTE and DEBUG may be
     used with all the standard features of the COMPIL CUSP such
     as concatenation with +, processor switches in parentheses
     etc.  The switch SIMULA and the extension SIM are recognized
     by the COMPIL class commands.  The file will be compiled
     with the SIMULA compiler if the source file extension is SIM
     or if the SIMULA switch is used in the command and the
     source file extension is not found or not recognized as
     belonging to another language processor.  The COMPIL switch
     CREF will give a listfile with extension LST and the LIST
     switch will give a spooled LPT file.
     If an external class or procedure is missing in a LOAD
     command the LINK-10 program will give the message:
     ?LNKUGS undefined global symbols
        name   location
     where the second character in the name is %.
     This name is unique and created by the SIMULA compiler to
     force an automatic check at load time that the external
     module has not been changed since the main program was
     compiled.  You can use the SIMDIR program to find out the
     names of all the external classes and procedures that are
     required by the main program.

     Examples:

      .COMPILE SIMPRO(-WR),SIMPR5/LIST
      SIMULA:  SIMPRO
      SIMULA:  SIMPR5

      EXIT

     The line NO ERRORS DETECTED is suppressed.

      .LOAD SIMPR1+SIMPR2
      SIMULA:  SIMPR1
      LINK:  Loading

      EXIT

      .EXECUTE SIMPRO
      SIMULA:  SIMPRO
      LINK:  Loading
      [LNKXCT SIMPRO Execution]

      .DEBUG SIMPRO
      SIMULA:  SIMPRO
      Link:  Loading
      [LNKXCT SIMPRO Execution]
DECsystem-10 SIMULA Language Handbook, part II            Page 18
Chapter 3.3 OPERATING PROCEDURES, COMPIL-CLASS COMMANDS


      SIMDDT STARTED
      *

     Chapter 9 describes how to use SIMDDT.  More elaborate
     examples are found in Appendix H.

     INSTALLATIONS WITHOUT SIMULA MODIFICATIONS TO COMPIL AND
     LINK

     If your installation has not implemented the special SIMULA
     modifications to the COMPIL and LINK cusps, then SIMULA
     source programs must be compiled using the "R SIMULA"
     command (chapter 3.2).  They may then be loaded by the
     following command:

     .LOAD/REL xxxx,SYS:SIMLIB/SEARCH

     where "xxxx" is the name of the SIMULA program to be loaded.
     (To execute write "EXECUTE" instead of "LOAD" in the above
     command string.)

     AVOIDING LINK-10 ERROR MESSAGES

     When a SIMULA program is loaded, you will sometimes get
     error messages from LINK-10.  The following description may
     help you to interpret those messages.

     The most common error message is
     ?LNKUGS undefined global symbols

     Here are some possible causes of this error message:

   > You have changed the attributes of a separately compiled
     SIMULA class, but not recompiled dependent modules.
     Recompile them with the ".COMP/COMP" command.

   > If the undefined global symbols are ".SIMVL" and ".SIMLV"
     then you have probably forgotten the switch /SEARCH on
     SIMLIB in your LOAD command.  These symbols are defined by
     programs using SIMSET and/or SIMULATION.

   > [For release 1B or 1C of DECsystem-10 SIMULA]:
          You have actually forgotten to list some separately
          compiled modules which your program needs.
     [From release 2 of DECsystem-10 SIMULA]:
          Separately compiled module names need no longer be
          listed in the LOAD command from release 2.  Instead,
          there must be .REL files corresponding to each .ATR
          file for separately compiled modules.  If the .ATR
          files are combined in a library, then the .REL files
          must be combined in a corresponding library.
DECsystem-10 SIMULA Language Handbook, part II            Page 19
Chapter 3.3 OPERATING PROCEDURES, COMPIL-CLASS COMMANDS


          Corresponding .ATR and .REL files should have the same
          filename before the extension and should be stored in
          the same directory path.

     You can find out which separately compiled modules are used
     by locating the EXTERNAL declarations in the main program.
     Alternatively, you can use the SIMDIR utility program.
     Write:
      .R SIMDIR
      DIRECTORY [1,4]
      SEARCH mainp USING
     where "mainp" should be the name of the main SIMULA program.
DECsystem-10 SIMULA Language Handbook, part II            Page 20
Chapter 3.4 OPERATING PROCEDURES, BATCH


3.4  BATCH

     The $SIMULA card is defined as a language card in SPRINT
     (Spooling PRocessor for INpuT).  The $SIMULA card precedes a
     SIMULA source program and causes SPRINT to copy the program
     onto disk and to insert a COMPILE monitor command into the
     control file.  The source program is ended by any SPRINT
     control card other than $MODE.

     When the job is run, the specified program is compiled and
     temporary relocatable binary and listing files are created.
     The listing file is printed as part of the job's output.

     The $SIMULA card does not cause execution of the program.
     Execution is initiated by an EXECUTE monitor command or by a
     $DATA or a $EXECUTE card.

     If execution is initiated by the $DATA card and no file name
     is specified on this card, then a "funny named" spooled card
     reader file containing the data following the $DATA card is
     created.  This file can be read by a SIMULA program if a
     logical file name is assigned to CDR.  The assignment can be
     done either with the ASSIGN monitor command or with a file
     specification in the SIMULA program.
     E.g.  ...NEW infile ("INFILE CDR:");

     Processor switches can be passed to the SIMULA compiler by
     including them in the command string.  Refer to Paragraph
     3.5 for a description of the SIMULA processor switches.

     If the processor switch (C) is given on the $SIMULA card a
     spooled LPT file containing program listing and cross
     reference listing will be created since the $SIMULA card
     generates a COMPILE command with /LIST as default.


     Card format:

     $SIMULA dev:name.ext [directory] (SS...)/S1/S2.../Sn

     dev:          = a file structure name.  If omitted, DSK is
                     assumed.

     name.ext      = the name of the file to be created on disk.
                     If omitted, SPRINT assigns the filename
                     LN????  (where ?  represents a character
                     arbitrarily chosen by SPRINT to produce a
                     unique filename) with the extension .SIM.
                     However, when the user specifies only a
                     filename (with no extension), SPRINT will
                     not append any extension.  The source and
DECsystem-10 SIMULA Language Handbook, part II            Page 21
Chapter 3.4 OPERATING PROCEDURES, BATCH


                     relocatable binary files will be explicitly
                     deleted at the end of the job if no filename
                     was specified.  However, if an attribute
                     file was created during the compilation it
                     will not be explicitly deleted.  Where the
                     user has specified a filename, the
                     disposition of the files depends on the
                     protection the user has given to them.

     [directory]   = a directory path other than that specified
                     on the $JOB card.  If omitted, the
                     project-programmer number on the $JOB card
                     is used.

     (SS...)       = processor switches to be passed to the
                     SIMULA compiler.  They must be enclosed in
                     parentheses without any commas or slashes.
                     However, a minus sign may precede any
                     switch.

     /S1/S2.../Sn  = the switches that control the mode of input
                     interpretation and the listing of the
                     compiled program.

       Switch        Meaning

     /ASCII          The input is read in ASCII mode.  If no
                     other card format switch is specified, then
                     the default is the mode indicated on the
                     /HOLLERITH switch on the $JOB card.

     /NOLIST         No listing file of the program is created.
                     If this switch is not specified, a listing
                     file will be created.

     /NOSUPPRESS     Trailing blanks are not suppressed.  The
                     default is no suppression.

     /SUPPRESS       Trailing blanks are suppressed.  The default
                     is no suppression.

     /WIDTH:nn       Columns 1 through nn (inclusive) are read.
                     Any remaining columns are treated as if they
                     contained blanks.  If this switch is not
                     specified or if no argument is specified,
                     then SPRINT will assume a value of 80.

     /026            The card deck is read in 026 card code.  If
                     no other card format switch is specified,
                     then the default is the mode indicated on
                     the /HOLLERITH switch on the $JOB card.
DECsystem-10 SIMULA Language Handbook, part II            Page 22
Chapter 3.4 OPERATING PROCEDURES, BATCH


                     This switch applies only to card-reader
                     input.  Input from other devices must be
                     read in ASCII code;  otherwise, an error
                     message is written in the log file and the
                     job is terminated.


     For a description of other SPRINT control cards that can be
     used in batch mode refer to DECsystem 10 OPERATING SYSTEM
     COMMANDS Chapter 3 Batch System Commands.

     An example of a SIMULA batch is given in Appendix H.6
     CONTROL CARDS IN BATCH.
DECsystem-10 SIMULA Language Handbook, part II            Page 23
Chapter 3.5 OPERATING PROCEDURES, SWITCHES


3.5  SWITCHES

     The compiler switches are passed to the compiler in three
     ways:

     i) via a COMPIL-class command or a $SIMULA card in batch.
     In this case only the short one letter forms of the switches
     are accepted, possibly preceded by a minus sign or an
     unsigned decimal number e.g.  20P.  The switches must be
     placed inside parentheses without slashes.  Note that the
     switches LIST, NOLIST and CREF exist as switches directly in
     the command.  If used this way, however, these switches
     cause an LPT-file to be produced instead of an LST-file.

     ii) via the R SIMULA command.  A switch may be placed after
     any file descriptor.  Each switch begins with a unique
     letter, which means that the switch may be denoted with one
     or more letters.  Each switch must be preceded by a slash.

     iii) in the OPTIONS statement in the SIMULA source code.
     See below for format of the OPTIONS statement.

     The meaning of a switch is reversed if it is preceded by a
     minus sign.  The lower case letters can always be used
     instead of the corresponding upper case letter.

3.5.1 SWITCHES IN COMPILER COMMAND STRING

     Name       Format  Default/Meaning

     ARRAY      /A      /A
                        Generate code to check array boundaries.

     CREF       /C      /-C
                        Generate a cross reference listing on the
                        list file.  This switch also sets the
                        L-switch.

     DEBUGS     /D      /D
                        Generate a symbol table for SIMDDT.  

     EXTERNAL   /nE     /-E
                        Treat the source program as an external
                        class or procedure.  n is a decimal
                        unsigned number specifying the block
                        level at which the external program will
                        be compiled.  Default for n is 1.  /-E
                        indicates main program.  See below for
                        format in OPTIONS statement.
DECsystem-10 SIMULA Language Handbook, part II            Page 24
Chapter 3.5.1 SWITCHES IN COMPILER COMMAND STRING


     HELP       /H      /-H
                        Type this information at the user
                        terminal.  HELP can be placed anywhere
                        before the second source file descriptor.
                        HELP is only valid in connection with the
                        R command.

     IDENTIFICATION /I  /I
                        Generate a line number table to be used
                        for debugging with SIMDDT and for
                        run-time diagnostic messages.

     LIST       /L      /-L
                        Generate a listing of the source program.
                        If this switch is present before the
                        first source file specification then all
                        source files are listed.  If it is
                        present after say, the second source
                        specification, then the first will not be
                        listed.

     NOERR      /N      /-N
                        Suppress output of error messages on the
                        user's terminal.

     PAGE       /nP     /55P
                        Specify the number (n) of lines per page
                        in the source file listing.  If n > 55
                        then the default vale 55 is used.  See
                        below for extended format.

     QUALIFICATION /Q   /Q
                        Generate code to check that a class
                        instance has a certain qualification.

     RUNSWITCHES /R     /-R
                        File specifications will be read from TTY
                        at the start of the object program
                        execution.  See below for extended
                        format.

     SEARCH     /S      /S
                        Enables automatic search of ATR
                        libraries.  Libraries on the default
                        search list (see below) are searched if
                        an ATR file corresponding to an external
                        procedure or class cannot be found.  See
                        below for extended format.

     WARNING    /W      /W
                        Warning messages are listed on the source
DECsystem-10 SIMULA Language Handbook, part II            Page 25
Chapter 3.5.1 SWITCHES IN COMPILER COMMAND STRING


                        listing (if any) and on the user's TTY.

     Y          /Y      /-Y
                        Write the line number table after the
                        source listing.  The IDENTIFICATION and
                        the LIST switches must be set.

     If the default setting (except for the LIST switch) is used
     throughout the compilation the message DEFAULT SWITCHES USED
     is printed after the source code on the listfile.  If any of
     the switches A, D, E, I, Q, R, S or W has been changed the
     message SWITCHES CHANGED FROM DEFAULT:  followed by a list
     of changed switches is printed.

3.5.2 SWITCHES IN THE OPTIONS STATEMENT

     All switches except HELP may occur in an OPTIONS statement.
     The OPTIONS statement is part of the source program and may
     be placed everywhere a comment is allowed.  The format of
     the switch is the same as for case ii) above.

     Format:

     OPTIONS(/switch/switch...);

     If the LIST switch is used in the OPTIONS statement then all
     lines including the OPTIONS statement itself are listed on
     the list file.  If -LIST is used then all following lines
     starting with the first line after the OPTIONS statement are
     suppressed up to the next LIST switch (if any).

3.5.2.1 Extended formats for switches E, P, R and S

     Note that extended formats for switches E, P, R and S are
     available.  The extended format for the E switch can only be
     used in the OPTIONS statement, whereas the longer forms of
     the P, R and S switches can also be used with the R SIMULA
     command (explicit execution of the compiler).

3.5.2.1.1 E switch

     See Appendix E for further details.

3.5.2.1.2 P SWITCH

     /P:"text"
     The text enclosed in quotes will be placed in the list file
     page heading.  The first line after the OPTIONS statement is
     printed on a new page.  This is also done for /P without
     argument.
DECsystem-10 SIMULA Language Handbook, part II            Page 26
Chapter 3.5.2.1.3 R SWITCH


3.5.2.1.3 R SWITCH

     /R:"file spec"
     The file specification has the same syntax as file
     specifications in a command.  File specifications will be
     read from that file at run time.  (See Chapter 8).

     Examples:

     /R:"SYSIN"
     /R:"TTY:"        (equivalent to /R)
     /R:"DSKC:FILES.SPC[130,131]"

3.5.2.1.4 S SWITCH
     See 7.1.1.


3.5.3 CHANGING SWITCHES DURING COMPILATION

     At start of compilation the switches are set to their
     default values which may be changed via switches passed in
     the invoking commands.  The switches retain their values
     until they are changed in an OPTIONS statement.  All
     switches can be set (change value) or reset by the OPTIONS
     statement (except HELP).  This can for example be used to
     list only parts of the source program:
     OPTIONS (/LIST);....  OPTIONS(/-LIST);

3.5.3.1 SWITCHES THAT MAY BE CHANGED ANYWHERE IN THE SOURCE FILE

     The switches A, L, N, P, Q, S and W can be set and reset in
     OPTIONS statements placed troughout the SIMULA program.  The
     effect of several S switches, however, is dependent only on
     the order in which they are listed, not on the location in
     the program.  Thus all S switches may be gathered together
     at the start of the program with the same effect, as long as
     the order is the same.  Note that the libraries mentioned
     last will be searched first!

3.5.3.2 SWITCHES THAT MUST BE DEFINED AT THE START OF THE SOURCE
     FILE

     The switches C, D, E, I, R and Y must either be passed to
     the compiler in the invoking command and/or they must appear
     in OPTIONS statements which are placed before the proper
     start of the SIMULA program (main program, class or
     procedure).
DECsystem-10 SIMULA Language Handbook, part II            Page 27
Chapter 4 IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE


4.   IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE.
     ===================================================

     This chapter covers those parts of the language which are
     implementation defined, which means that a program using
     them may execute differently on different systems.  A
     programmer should normally avoid using implementation
     defined parts of SIMULA, but the information in this chapter
     should be helpful when programs are moved between different
     SIMULA systems and when unexpected diagnostics or results
     have been obtained.  This chapter does not cover
     input/output (chapter 8), language extensions (chapter 5),
     capacity restrictions (chapter 6) or separate compilation
     (chapter 7).


4.1  SYSTEM PREFIXES.

     The use of system classes as prefixes is restricted.  For
     efficiency reasons no subclass of FILE may be used as block
     or class prefix.

     Since the body of LINKAGE contains a local object, the
     prefix chain of a prefixed block may not contain this class
     or its subclasses LINK, HEAD and PROCESS.  The definition of
     MAIN PROGRAM in SIMULATION implies that SIMULATION must not
     occur as a prefix in a class instance, and the same
     restriction has been enforced for SIMSET.  It is however
     permitted to define subclasses of SIMSET and SIMULATION as
     long as these subclasses do not occur in object generators
     (i.e.  after NEW).

     According to the SIMULA definition, a class can be used as a
     prefix only at the block level at which it is declared.  The
     system classes SIMSET and SIMULATION should be considered to
     be declared at the level where one of them first occurs, and
     their attribute classes at a level one greater.  There may
     be several occurrences of the prefixes SIMULATION and/or
     SIMSET at this level (even concurrently active) although
     this would normally not be considered good programming
     practice.


4.2  VIRTUAL MATCHES.

     DEC-10 SIMULA only accepts the virtual matches listed in the
     Common Base [1] (LABEL, SWITCH, PROCEDURE and <type>
     PROCEDURE), which is a restriction compared to IBM 360/370
     SIMULA.  When a match is detected, it is compared with the
     previous match or, if it is the first match, with the
     virtual specification.  The kinds (LABEL, SWITCH or
DECsystem-10 SIMULA Language Handbook, part II            Page 28
Chapter 4.2 IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE


     PROCEDURE) must be equal.  If the types are not equal, it
     must either be a function procedure matched to a pure (no
     type) procedure, or it must be two REF type function
     procedures where the new match is qualified by a subclass of
     the qualification of the old match.  If a no type
     specification has been matched by a function procedure the
     result of the function is accessible only where the match
     can be seen at compile time.


4.3  EDITING AND DE-EDITING PROCEDURES.

     The character used to represent the power-of-ten symbol in
     input data is initially E, as in FORTRAN.  It may be changed
     to any other printable character except a digit, ., +, -,
     TAB or blank by a call to the procedure LOWTEN.

     The exponent created by PUTREAL and OUTREAL has two digits
     (possibly both 0) and is preceded by + or -.

     INFRAC and GETFRAC read a sequence of digits where two
     consecutive digits may be separated by a blank or a decimal
     point.  There can only be one decimal point in one number.

     An edit overflow causes the text field to be filled with
     asterisks and a message to be typed after program
     completion.


4.4  MATHEMATICAL SYSTEM FUNCTIONS.

     If a mathematical function exists in both single and double
     precision, the double precision routine is chosen if the
     argument type is LONG REAL, otherwise both argument and
     function value are considered to be REAL.  Since the Algol
     Report [2] does not require a particular set of mathematical
     functions, the functions available in DEC-10 SIMULA are
     listed in table 4.1.  An asterisk (*) marks functions
     recommended in [2].  Argument types are:  I-INTEGER, R-REAL,
     L-LONG REAL.

     In addition to the functions listed below, further functions
     are available in the DECsystem-10 SIMULA Program Library.
     See LIBSIM.HLP for a listing of these, and the DECsystem-10
     SIMULA Language Handbook part III for a full description.
DECsystem-10 SIMULA Language Handbook, part II            Page 29
Chapter 4.4 IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE


     RECOMM. NAME    ARG     2ND ARG EXPLANATION

     *       ABS     R/L             modulus
             ARCCOS  R               inverse cosine
             ARCSIN  R               inverse sine
     *       ARCTAN  R/L             inverse tangent
     *       COS     R/L             cosine
             COSH    R               hyperbolic cosine
     *       EXP     R/L             exponential
     *       LN      R/L             natural logarithm
     *       SIN     R/L             sine
             SINH    R               hyperbolic sine
     *       SQRT    R/L             square root
             TAN     R               tangent
             TANH    R               hyperbolic tangent
     *       ENTIER  R/L             integer part
             MOD     I       I       remainder of first arg
                                     divided by second
     *       SIGN    I/R/L           Euler sign function


     Table 4.1: Mathematical functions.


4.5  COLLATING SEQUENCE, LETTER.

     The internal representation of CHARACTER variables is the 7
     bit ASCII representation which defines the collating
     sequence and the type conversion functions RANK and CHAR.
     The range of the former and the domain of the latter is thus
     the integers from 0 to 127, inclusive.  In the collating
     sequence, digits 0-9 are first, then upper case letters
     (A-Z) and lower case letters (a-z) (for details concerning
     special and national characters see appendix A).  A portable
     program should not use lower case letters or assume that
     digits precede letters, nor that letters are consecutive
     (letters A-Z can however safely be assumed to rank in
     alphabetic sequence).

     The Boolean function LETTER is TRUE for upper and lower case
     letters A-Z, but is FALSE for national letters $, # and @.


4.6  INITIALIZATION OF CHARACTER VARIABLES.

     A character variable in DEC-10 SIMULA is initialized to the
     null character with rank zero.  It will usually not be
     visible on the output medium when output.  In other SIMULA
     systems the initial value may often be output as a space
     (blank).
DECsystem-10 SIMULA Language Handbook, part II            Page 30
Chapter 4.7 IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE


4.7  SUBSCRIPT CHECKING.

     If subscript checking is enabled (switch /A is set), each
     subscript of a subscripted variable is checked individually.
     This is not done on all other systems.


4.8  RANDOM DRAWING.

     The random drawing procedures in DEC-10 SIMULA are based on
     Lehmers congruence method for pseudo random number
     generation.  The generator G is 5**15 and the modulus P is
     2**35:


                     U  = G U    (mod P)
                      i      i-1


                     X  = U /P
                      i    i


     If the initial value of a sequence of pseudo random numbers
     is negated, the antithetic variables are obtained.  The
     procedures always make the variables odd, so no
     initialization is necessary.  However, if initialization is
     omitted in a program it may loop indefinitely on other
     systems.

     Where the definition of a random drawing procedure assumes a
     parameter array to be monotonic, this is not checked for
     efficiency reasons.  However, no matter what the array
     contains, a reference outside the array will never occur.


4.9  QUALIFICATION CHECKING.

     If a class has become accessible by means of an INSPECT
     statement the qualification of the connected class is
     considered identical to that of the original class.
     However, a connected class can not be used as block or class
     prefix.
DECsystem-10 SIMULA Language Handbook, part II            Page 31
Chapter 4.10 IMPLEMENTATION DEFINED PARTS OF THE SIMULA LANGUAGE


4.10 SIMULATION PROCEDURE TIME


     Unlike some other systems the SIMULATION real procedure TIME
     returns the current simulation time in single precision.
     This may possibly imply that a simulation program will
     behave differently on DECsystem-10 SIMULA than on other
     systems.  
DECsystem-10 SIMULA Language Handbook, part II            Page 32
Chapter 5 LANGUAGE EXTENSIONS


5.   LANGUAGE EXTENSIONS.
     ===================

Comments

     Extensions in the source language representation are that !
     (exclamation mark) is equivalent to the keyword COMMENT, and
     that comments may occur anywhere between two basic symbols.

Constants in other radices than 10

     Integer constants can be given in the radix representation
     bRa where b is the radix (in decimal) and a is the radix b
     representation of the number.  This is allowed for radices
     2, 4, 8 and 16.  As an example, 31 can be written 16R1F.

National characters

     National characters $, # and @ can be used as letters in
     identifiers.

WHILE statement

     The WHILE statement permits a programmer to write

     WHILE b DO s1

     which is equivalent to

     L:IF b THEN BEGIN s1;  GOTO L END

     Here b is a Boolean expression and s1 is a statement (even a
     compound statement, a block or a prefixed block).  L is a
     label not occurring elsewhere in the program.  It is allowed
     to jump into s1 if it is a compound statement.

TEXT value constants in conditional expressions

     Text value constants may occure in conditional text
     expressions.  However, such expressions must not be used as
     actual parameter when the corresponding formal parameter is
     called by NAME.  TEXT constants are allowed in conditional
     expressions in the following four cases:

     a) As right-hand-side in a TEXT-VALUE-RELATION:
        Example: t:= IF bool THEN "yes" ELSE "no";

     b) As actual parameter in a procedure called by VALUE:
        Example: PROCEDURE p(t);  TEXT t;  VALUE t;  ...
                 p(IF bool THEN "yes" ELSE "no");
DECsystem-10 SIMULA Language Handbook, part II            Page 33
Chapter 5 LANGUAGE EXTENSIONS


     c) As actual parameter to certain system procedures,
        OUTTEXT, COPY and NEW ...  FILE.
        Example:  t:= COPY(IF bool THEN "yes" ELSE "no");

     d) In a TEXT-value-relation:
        Example:  IF x = (IF uc THEN "C" else "c") THEN

Precision

     The additional types LONG REAL and SHORT INTEGER are allowed
     in DEC 10 SIMULA.  LONG REAL is used for double precision
     floating point numbers, but SHORT INTEGER is equivalent to
     INTEGER and has been introduced only to get better
     compatibility with IBM 360/370 SIMULA.  All arithmetic types
     can be mixed in any way in expressions except as stated in
     chapter 6.2.

CALL system procedure

     The system procedure CALL has the following effect:
     The execution of CALL(Y) resumes execution of the detached
     instance Y at its reactivation point.  Further operations
     are as if an object generator (NEW) had been used, i.e.  if
     Y detaches or terminates control returns to after the CALL
     statement.  Y must be detached and not operating when
     CALL(Y) is executed.

PREV system function

     The new system function PREV which is an attribute of
     LINKAGE gives as result the same value as LAST for a HEAD of
     a non-empty list, the same as PRED for a LINK which is not
     first in a list and the HEAD for the first LINK in a list
     (Common Base 17.2).

BREAKOUTIMAGE system procedure

     The new system procedure BREAKOUTIMAGE is an attribute of
     OUTFILE.  It is identical in effect to OUTIMAGE except that
     the trailing <CR><LF> of the image is not output (used
     mainly when writing to a terminal).

OPTIONS statement

     The OPTIONS statement is not a language extension but a
     communication channel to the programming system, see Chapter
     3.  OPTIONS is however made a reserved word in DEC-10
     SIMULA.

EXTERNAL procedures and classes
DECsystem-10 SIMULA Language Handbook, part II            Page 34
Chapter 5 LANGUAGE EXTENSIONS


     Language extensions related to separate module compilation
     are described in Chapter 7 of this handbook and in chapter 4
     of part I of the DECsystem-10 SIMULA Language Handbook.

HIDDEN specification

     The HIDDEN and PROTECTED specifications described in the
     DECsystem-10 Simula Language Handbook part I chapter 2.5.7
     are accepted by the system.
DECsystem-10 SIMULA Language Handbook, part II            Page 35
Chapter 6 RESTRICTIONS


6.   RESTRICTIONS.
     =============


6.1  CAPACITY RESTRICTIONS.

     Capacity restrictions are a consequence of the internal
     design of DEC-10 SIMULA, such as the number of bits used
     internally to hold a particular quantity.  The significance
     of such restrictions at source language level is often
     difficult to explain, and the normal course of action taken
     by a programmer should be to rewrite a program when a
     violation has been diagnosed.  Some of the capacity limits
     are so high that a violation is very unlikely to occur
     whereas others are not.  The limitations are also dependent
     on the amount of core and disk space available.  The
     following limits must not be exceeded:

     LIMIT   QUANTITY

     128K    largest low segment area(object code+data)
     10      number of subscripts in array
     64      block level
     255     formal parameters to procedure or
             (concatenated) class
     255     virtual quantities in (concatenated) class
     511     BLOCK STATE NUMBER
     65535   maximum line number in source module
     3072    number of differently spelled identifiers
             in source module
     32      DISPLAY LEVEL
     20      CONCURRENT single precision intermediate
             quantities
     4096    FIXUPS
     200     SUBEXPRESSIONS IN A SIMPLE STATEMENT
     1023    words in BLOCK INSTANCE RECORD


     The meaning of some of these quantities can only be
     explained by reference to the syntax tree for a program as
     defined in the Algol Report [2] and the Common Base [1].

     [The maximum BLOCK STATE NUMBER is the size of the maximal
     set of <unlabelled block>:s in the syntax tree which is not
     cut by an instance of <prefixed block>, <class body>,
     <procedure body>, <connection> or <for statement>, except an
     instance of <prefixed block> or <procedure body> which is
     the root of the minimal subtree containing all the subblocks
     in the set.  In this definition a prefixed block or a
     procedure or class body should not be regarded as an
     unlabelled block.]
DECsystem-10 SIMULA Language Handbook, part II            Page 36
Chapter 6 RESTRICTIONS


     The maximum DISPLAY LEVEL is computed for a hypothetical
     program obtained by replacing all external declarations by
     their defining declarations.  In this program take the
     number of instances of <prefixed block>, <class
     declaration>, <procedure declaration>, <for statement>,
     <connection> and <actual parameter> corresponding to a
     formal parameter which is not known not to be by name in a
     path of the syntax tree.  Also add all occurrences along the
     path of <unlabelled block> which are separated from the
     enclosing scope by an instance of <for statement>,
     <connection> or <class body>.  The maximum DISPLAY LEVEL is
     the maximal such value plus one or, if the outermost scope
     is a <prefixed block>, two.

     The number of FIXUPS is obtained by adding weights of syntax
     entities in a single module:

     2       <conditional statement>
     4       <connection>
     1       <label definition>
     2       <unlabelled block>
     4       <procedure declaration>
     6       <class declaration>
     5       <prefixed block>
     2       <while statement>

     The number of CONCURRENT INTERMEDIATE QUANTITIES is
     minimized by reordering operands to commuting operators like
     +, *, :=, etc.  As an example, the expression 

     A:=A+(A+(A+(A+A)))

     has 6 INTERMEDIATE QUANTITIES if A is a formal parameter
     called by name, but only one if A is a declared REAL
     variable.

     The number of SUBEXPRESSIONS IN A SIMPLE STATEMENT is well
     approximated by the number of basic symbols in it, with the
     following corrections:

     -1      <conditional expression>
     -1      parenthesis delimiting subexpression
     -1      left parenthesis delimiting parameters, switch
             index or array subscripts
     +1      long real constant
     +1      implicit arithmetic conversion or qualification
             check
     +1      actual parameter to class, prefixed block or
             declared procedure

     The size of a BLOCK INSTANCE RECORD is two plus the size of
DECsystem-10 SIMULA Language Handbook, part II            Page 37
Chapter 6 RESTRICTIONS


     all its parameters and variables.  All name parameters
     require two words.  Otherwise, an ARRAY requires one word
     regardless of type.  LABEL and PROCEDURE parameters called
     by reference require two words, SWITCH by reference one
     word.  Simple quantities require two words if their type is
     LONG REAL or TEXT, otherwise one word.  In addition, the
     value of a function requires one or two words depending on
     the type.


6.2  PARAMETER CORRESPONDENCE.

6.2.1 Call by value.

     For an arithmetic array passed by value the actual type must
     be identical to the formal type.

6.2.2 Call by reference.

     A string is not a legal actual parameter for a text
     parameter called by reference.  This is a restriction
     compared to IBM 360/370 SIMULA.  An actual array parameter
     of type REF must have the same qualification as the formal
     array.

6.2.3 Parameters to system procedures and functions.

     Where an array is passed to a system procedure or function
     (DISCRETE, HISTD, LINEAR, HISTO) the type of the array must
     be REAL.  The last parameter to random drawing functions
     must be an INTEGER (declared, subscripted or remote)
     variable or an INTEGER parameter which was passed by value.
     The first three parameters to ACCUM must be REAL (declared,
     subscripted or remote) variables or REAL value parameters.


6.3  FOR STATEMENTS.

     The controlling variable of a for statement must not be of
     type TEXT.  Neither may it be a subscripted or remote
     variable, a name parameter or a function identifier.

     These restrictions to Algol 60 are recommended in SIMULA,
     but they have not been enforced in all implementations.
DECsystem-10 SIMULA Language Handbook, part II            Page 38
Chapter 6 RESTRICTIONS


6.4   MISCELLANEOUS RESTRICTIONS.

     A subclass must be declared after its prefix class.

     A switch which is an attribute of a terminated class
     instance can not be accessed.


6.5  RESTRICTIONS IN SIMULA WITH RESPECT TO ALGOL 60.

     In this section we list all differences between SIMULA and
     pure Algol 60 which may cause a pure Algol 60 program to
     behave differently when running as a SIMULA program.  All
     subsections are preceded by the number of a paragraph in the
     Algol Report [2] which is not valid for SIMULA.

     (2.6) The entities <proper string>, <open string> and
     <string> do not exist in SIMULA.  They are replaced by TEXT
     variables and constants.

     (3.2) A <parameter delimiter> in SIMULA is a comma (,).
     Parameter comments ("fat comma") are not permitted.
     Ordinary comments may be used instead.

     (3.5.1) Integer labels are not permitted.

     (4.3.5) A transfer to a switch designator whose value is
     undefined is equivalent to a dummy statement except that
     side effects caused during the evaluation will remain.

     (4.6.1) FOR statements, see also 6.3.  The increment of a
     STEP-UNTIL element is evaluated once after the initial
     assignment to the control variable, once for every new
     repetition and once after the last repetition.  This may
     cause different behaviour if the increment is an expression
     which causes side effects or is dependent on the value of
     the control variable.

     (4.7.3.1), (4.7.3.2) The default parameter transmission mode
     for simple parameters is by value, not by name.

     (4.7.5.5) All formal parameters must be completely specified
     with respect to type and kind.  A standard (system)
     procedure or function can not be passed as an actual
     parameter to a formal parameter specified PROCEDURE or
     <type> PROCEDURE.  For actual to formal parameter
     correspondence, see also 6.2.1.

     (5.1) OWN variables are not permitted in SIMULA.  
DECsystem-10 SIMULA Language Handbook, part II            Page 39
CHAPTER 7  SEPARATE COMPILATION





7.   SEPARATE COMPILATION
     ====================


     A user-oriented description of separate compilation in
     SIMULA is given in chapter 4 of the DECsystem-10 SIMULA
     Language Handbook Part 1.  If you are not thoroughly
     familiar with the principles of separate compilation in
     SIMULA, you should read that chapter before continuing with
     this text.

     To implement the error checking during compile time, the
     compiler, when compiling an external module, generates an
     attribute file (extension ATR) which describes all
     accessible attributes of the object.

     When compiling a program which uses a previously compiled
     external module, the compiler must be told where to find the
     ATR-file of the used module.  This can be done in the
     EXTERNAL declaration or by using the SEARCH switch in the
     OPTIONS statement.


7.1  THE EXTERNAL DECLARATION


     The syntax of the <external declaration> is (!  stands for
     choice):

        <octal digit>::=0!1!2!3!4!5!6!7

        <octal number>::=<octal digit>!
                         <octal number><octal digit>

        <ppn>::=!<octal number>,<octal number>!
                 <octal number>,!,<octal number>

        <sfd list>::=<identifier>!<sfd list>,<identifier>

        <path>::=![<ppn>]![-]![<ppn>,<sfd list>]

        <device>::=!<identifier>:

        <external identifier>::=<device><identifier><path>

        <external item>::=<external identifier>!
                          <identifier>=<external identifier>
DECsystem-10 SIMULA Language Handbook, part II            Page 40
CHAPTER 7.1  SEPARATE COMPILATION. THE EXTERNAL DECLARATION.


        <external list>::=<external item>!
                          <external list>,<external item>

        <external declaration>::=
                  EXTERNAL PROCEDURE <external list>!
                  EXTERNAL <type> PROCEDURE <external list>!
                  EXTERNAL CLASS <external list>

        <separately compiled procedure>::=<procedure declaration>
           !<external declaration><separately compiled procedure>

        <separately compiled class>::=<class declaration>!
            <external declaration><separately compiled class>

        <separately compiled main program>::=<program>

        <singly compiled main program>::=<program>


     The difference between <separately compiled main program>
     and <singly compiled main program> is that <separately
     compiled main program> contains at least one <external
     declaration> and <singly compiled main program> contains no
     <external declaration>.


     The external identifier is a file specification which may be
     used to retrieve the attribute file (after completing the
     specification by the extension ATR).  DSK:  is used for
     <device> if omitted.  The user's default path is used if
     <path> is omitted.  If project or programmer number is
     omitted, the user's logged-in ppn (his UFD) is used to
     supply the missing information.  The specification [-] is an
     alternative way of specifying the default path (same as
     missing <path>).

     <device> must be a disk-like device.


     A separately compiled class or procedure may only refer to
     the following entities in the local environment of the
     external statement:

     - Formal parameters of the separately compiled class or
     procedure.

     - Other separately compiled classes with their externally
     accessible attributes.

     - Other separately compiled procedures.
DECsystem-10 SIMULA Language Handbook, part II            Page 41
CHAPTER 7.1  SEPARATE COMPILATION. THE EXTERNAL DECLARATION.


     These other separately compiled classes and procedures are
     declared by external declarations in the source program of
     the separately compiled module.  Their declarations precede
     the proper start of the source code of the separately
     compiled class or procedure.


     Example of full source text of a separately compiled class
     using these conventions:

       OPTIONS(/E);
       EXTERNAL PROCEDURE a;
       EXTERNAL CLASS b,c,d;
       b CLASS e(f);REF (c) f;
         BEGIN REF (d) g;
           g :- NEW d;
           a(g);
         END


     External declarations preceding the beginning of a
     separately compiled class or procedure do not cause any
     copying of the declared external modules into the combined
     program.
     They simply inform the compiler that these external
     declarations will occur in the environment of an external
     statement introducing the module into another program, class
     or procedure.
     Thus, a, b, c and d in the example must be declared by
     external declarations in the environment of an external
     statement referring to e.

     According to SIMULA rules, separately compiled prefix
     classes must be copied into a program in the same block as
     their subclasses.

     Example;  "- - - -" indicates separate compilation:

     CLASS a; BEGIN ... END
     - - - -
     EXTERNAL CLASS a; a CLASS b; BEGIN ... END
     - - - -
     BEGIN COMMENT main program;
       EXTERNAL CLASS a,b;
       ...
     END
DECsystem-10 SIMULA Language Handbook, part II            Page 42
CHAPTER 7.1  SEPARATE COMPILATION. THE EXTERNAL DECLARATION.


7.1.1 TELLING THE COMPILER WHERE TO FIND EXTERNAL MODULES

     When an external module is compiled, two output files are
     usually produced, one with extension ATR and one with
     extension REL.  (If the actual code is in another language,
     another compiler produces the REL file, see appendix E.) For
     example, the separately compiled module X.SIM will yield the
     two output files X.ATR and X.REL.

     The ATR file is read by the compiler each time a module
     which uses X is compiled.  The REL file is used by the
     loader (LINK-10) to produce an executable program from
     several separately compiled modules.

7.1.1.1 SEARCH LIST


     When the compiler has encountered an external declaration,
     e.g.
          EXTERNAL CLASS X;
     and does not find the file <external identifier>.ATR (X.ATR
     in this case) in the user DSK area, it scans an (implied)
     SEARCH LIST consisting of file definitions (device name,
     file name, path).  The search list is also used when a class
     or procedure is compiled separately, to find a possible
     matching ATR module which is compared to the attribute
     information of the module being compiled.  If no attributes
     have changed, no new information need be created, but if the
     matching module was found in a library, a copy of the module
     is output as a separate ATR file matching the REL file being
     produced, if any.  In this way the ATR and REL files will
     nearly always be found on the same disk area (possibly in
     matching libraries).

7.1.1.1.1 DEFAULT SEARCH LIST

     If no SEARCH switch is given in the source file or via the R
     or COMPILE command, the default search list contains
     DSK:LIBSIM[user default path] and SYS:LIBSIM.  The extension
     ATR is assumed throughout.

     LIBSIM and any other file on the search list must be
     recognized as a library.  In the library, the SIMULA name of
     the external module is used as a search key to find the
     corresponding ATR module.  FUDGE2 or MAKLIB can be used to
     create an ATR library.  See 7.1.1.5.

     The SEARCH switch can be used to modify the search list by
     adding or deleting files.  If an explicit file definition
     (see 7.1.1.2) is given in the external declaration, the
     search list is not used.
DECsystem-10 SIMULA Language Handbook, part II            Page 43
CHAPTER 7.1  SEPARATE COMPILATION. THE EXTERNAL DECLARATION.


7.1.1.2 EXPLICIT SPECIFICATION OF THE ATR FILE

     In the EXTERNAL declaration, you can write e.g.
          EXTERNAL CLASS x=x1[100,200];
     This tells the compiler that the CLASS x is described in the
     ATR file x1.ATR on the disk area for ppn [100,200].  The
     compiler will not look for other ATR files if you give the
     file name in this way.  If x1.ATR is not found, an error
     message will be given.  If x1.ATR is a library (see
     7.1.1.5), the name x will be looked up, otherwise x1.ATR
     will be used directly.  When compiling a class or procedure
     separately, the corresponding effect is achieved by having a
     name on the REL file which is different from the SIMULA name
     of the class or procedure (first 6 letters) and/or by
     specifying a path different from the default path for the
     REL file.  Note that the REL file specification is used also
     for the ATR file, with the extension changed to ATR.


7.1.1.3 THE SEARCH SWITCH

     The SEARCH switch can be used to modify the library search
     which is performed when X.ATR is not found.  You can tell
     the compiler to search other libraries than LIBSIM and on
     directories (paths) other than your own default path or the
     SYS default path.  The possible variants are:

     a) /S with no argument.  This means that the default search
     list (see 7.1.1.1.1) is (re)established.  Any additional
     libraries are left on the list in their original places.

     b) /S:"file spec", puts the library mentioned on the search
     list.  The same library will only appear once on the search
     list.

     c) /-S with no argument.  No libraries will be searched.  /S
     will reestablish the standard search list, leaving other
     libraries off the list.

     d) /-S:"file spec" removes the specified library from the
     search list.

     Example:  OPTIONS(/-S/S:"LIBSIM[101,101]") removes
     LIBSIM.ATR and SYS:LIBSIM.ATR from the search list, leaving
     only LIBSIM.ATR[101,101].  OPTIONS(/S), if given later,
     reestablishes the standard list, but LIBSIM.ATR[101,101]
     will still be searched before LIBSIM.ATR[-].  [-] means the
     default path for DSK.  Note that the SEARCH switch can also
     be given via R SIMULA in the command string!  Note also that
     ALL search switches apply to ALL external declarations in
     the currently compiled module, since action is taken after
DECsystem-10 SIMULA Language Handbook, part II            Page 44
CHAPTER 7.1  SEPARATE COMPILATION. THE EXTERNAL DECLARATION.


     scanning the whole module.

7.1.1.4 LOADING AND EXECUTING PROGRAMS WITH EXTERNAL MODULES

     Loading and execution commands are greatly simplified if the
     REL file corresponding to a given ATR file is found by
     simply substituting the extension REL for the extension ATR.
     If the ATR file is X.ATR, the REL file should be X.REL, and
     if the attributes of X are found in the library L.ATR, the
     code of X should be found in the library L.REL.  To simplify
     the load command, the compiler will tell LINK-10 to look for
     object code in REL files corresponding to the ATR files
     used.

     A program can thus be (compiled and loaded and) executed
     simply by the command
          EXECUTE mainprogramname
     providing the external modules have been compiled in
     advance.

     Note that since the REL files are loaded in library search
     mode, explicit inclusion of files in the command string may
     be used to bypass the search for certain entry points.


7.1.1.5 Producing ATR and REL file libraries

     Libraries of ATR or REL files can be produced by copying
     together several ATR or REL files using the FUDGE2 or MAKLIB
     program, which are described in the DECsystem-10 monitor
     commands handbook.

     IMPORTANT!!!  The /X (/INDEX) switch must be used to produce
     an index, otherwise the SIMULA compiler cannot find the ATR
     modules.  Be careful to mention the extension ATR, since REL
     is assumed if no extension is given!

     Example:  Add proc to LIBSIM.ATR and LIBSIM.REL -
       .R FUDGE2
       *LIBSIM.REL=LIBSIM.REL,proc.REL/A$
       *LIBSIM.ATR=LIBSIM.ATR,proc.ATR/A$
       *LIBSIM.REL=LIBSIM.REL/X$
       *LIBSIM.ATR=LIBSIM.ATR/X$

     $ stands for <ALTMODE> (octal 33).
DECsystem-10 SIMULA Language Handbook, part II            Page 45
CHAPTER 7.2  SEPARATE COMPILATION.  THE EXTERNAL SWITCH.


7.2  THE EXTERNAL SWITCH


     Short form: nE:<list>
     Long form:  nEXTERNAL:<list>
     Default:    -E


     Treat the source program as an EXTERNAL CLASS or PROCEDURE.
     -E indicates main program.  When /E or /-E appears in an
     OPTIONS statement it has no effect unless it appears before
     the proper start of the SIMULA program.

     n is an unsigned decimal number specifying the block level
     at which the external module is going to be declared in the
     main program.  n is optional and has the default value 1
     (the outermost block).

     :<list> can only be used in an OPTIONS statement placed at
     the start of the SIMULA specification program for an
     external procedure written in MACRO-10 or FORTRAN (detailed
     explanation in appendix E).




7.3  RESTRICTIONS ON SEPARATE COMPILATION


     A separately compiled class or procedure must not be
     declared as attribute to another class.

     A separately compiled class or procedure must not be copied
     indirectly, i.e. in a separately compiled class or procedure
     all external declarations must precede the proper start of
     the class or procedure declaration.

     In an EXECUTE, LOAD or DEBUG monitor command, source files
     should be listed in compilation order, with the main program
     last.  The compilation order must be such that attribute
     files are available when referred to.

     Error messages from LINK-10 because of missing REL files are
     explained at the end of section 3.3 in this handbook.

     7.4  SIMDIR UTILITY PROGRAM
DECsystem-10 SIMULA Language Handbook, part II            Page 46
CHAPTER 7.4  SEPARATE COMPILATION.  SIMDIR UTILITY PROGRAM.


With the SIMDIR program you can easily find out:
     > Which separately compiled modules are required by one or
     several main programs.
     > Which program modules require a certain separately
     compiled procedure or class.
     To start the program type:
     .R SIMDIR
     SIMDIR responds with a "*" , signalling that it is ready for
     a command.

     In the simplest case, you can now write:

        SEARCH /ALL REQUIRED BY main

     This will list all modules on your PPN which are used by the
     module main.  main is usually a SIMULA main program, but can
     be a separately compiled module.

        SEARCH /ALL USING proc

     This will list all modules on your PPN which use the
     separately compiled module proc.

     You can precede the SEARCH command with a DIRECTORY command
     to tell the system to include other PPN:s in the search.
     For example, you can write:

        DIRECTORY [*,*]
        SEARCH /ALL USING proc

     This will give a listing of all SIMULA programs on all PPN:s
     which require your separately compiled procedure proc.

     As input SIMDIR requires ATR-files from separately compiled
     classes and procedures and REL-files from main programs.
     This means that SIMDIR only works when such ATR and REL
     files are present for the programs to be listed.

     The syntax of SIMDIR commands follows:

     <SEARCH-command>::= SEARCH <pattern> [<relation>[<pattern>]]
        <relation>::= USING ! REQUIRED BY
        <pattern>::= [<device>][<filename>][<ppn>][<switches>]
        <ppn>::= <left bracket><ppn1><right bracket>
        <ppn1>::= SELF ! OTHERS ! <pnr>,<pnr>
        <pnr>::= ! * ! <octal number>
        <switches>::= <switch> ! <switches><switch>
        <switch>::= /<switchname>
        <switchname>::= ALL ! MAIN ! CLASSES ! PROCEDURES !
                FPROCEDURES ! SPROCEDURES ! MPROCEDURES !
                FAST ! TTY
DECsystem-10 SIMULA Language Handbook, part II            Page 47
CHAPTER 7.4  SEPARATE COMPILATION.  SIMDIR UTILITY PROGRAM.


        <device>::= <name>:
        <filename>::= <name>

        SEARCH <pattern> means that all modules matching the
        pattern will be searched for and listed.

        SEARCH <pattern> <relation> means that all modules
        matching the pattern will be searched for and listed
        together with the modules which have the given relation
        to the modules.

        SEARCH <pattern> <relation> <pattern> means that all
        modules matching the first pattern and having the given
        relation to any module matching the second pattern are
        listed.

        A module matches a pattern when it matches all components
        of that pattern.  If any component is missing in a
        pattern, then all modules match that component.  The
        pattern may not be empty, however.

        There are two special PPN:s that you may use in a
        pattern:  [SELF] is the LOGIN PPN.  [OTHERS] stands for
        all PPN's except [SELF] which have been given in
        DIRECTORY commands.

        Explanation of switches:
                ALL             All modules match
                MAIN            Main programs match
                CLASSES         Classes match
                PROCEDURES      Procedures match
                FPROCEDURES     FORTRAN procedures match
                MPROCEDURES     MACRO-10 procedures match
                SPROCEDURES     SIMULA procedures match
                FAST            Do not output PPN
                TTY             Change output device
                                temporarily to TTY.


     <DIRECTORY-command>::= DIRECTORY <directories>
        <directories>::= <directory> ! <directory>,<directories>
        <directory>::= [<switch>] <ppn> [<switch>]
        <switch>   ::= /MAIN ! /-MAIN

        Include the given directories when searching.
        /MAIN means that all modules are fetched from this
        directory, /-MAIN that only external classes and
        procedures are fetched.  Default is /-MAIN.


     <LIST-command>::= LIST <file specification>
DECsystem-10 SIMULA Language Handbook, part II            Page 48
CHAPTER 7.4  SEPARATE COMPILATION.  SIMDIR UTILITY PROGRAM.


        Program output - as generated by subsequent search
        commands - is written on the specified file.  Default is
        DSK:SIMDIR.LST


     <CLOSE-command>::= CLOSE

        The current list file is closed.


     <EXIT-command>::= EXIT

        Close current list file (if any) and return to monitor.


     <HELP-command>::= HELP [ /TTY ]

        Output help-text.


     All "reserved words" (upper case letters above) can be
     abbreviated arbitrarily.  Any conflicts are resolved as
     follows :
        /M means /MAIN
        /F means /FAST


     When SIMDIR is started a *D[S]/M command is automatically
     performed.


     EXAMPLES:

     List all SIMULA modules on your own PPN
      .R SIMDIR
      *S/ALL
        .
        .
        .

     List those of your own modules which are used by others in
     the same project.
      .R SIMDIR
      *DIR [,*]/M
      *SEARCH [SELF] REQ BY [OTHERS]
        .
        .
        .
DECsystem-10 SIMULA Language Handbook, part II            Page 49
CHAPTER 8 OBJECT PROGRAM I/O


8    OBJECT PROGRAM INPUT-OUTPUT
     ===========================


8.1  INTRODUCTION


     The SIMULA run-time system (RTS) supports input from and
     output to files on auxiliary memory like disk storage,
     DECtape and magnetic tape and standard peripherals like line
     printer, card reader and punch, paper tape reader and punch.
     These peripherals will normally be spooled in a time-sharing
     environment but RTS will not distinguish between spooled and
     unspooled devices.

     Only ASCII (=ISO-7) mode input and output is supported.
     Binary I/O can be performed only with external assembly
     procedures (see chapter 7 and appendix E).

     Files can be accessed sequentially using class INFILE.
     Class DIRECTFILE allows random access in addition to
     sequential access.  Class DIRECTFILE can only be used with
     files on disk, however.

     The I/O subsystem of RTS works interactively with the user
     as described in later sections.  When an error condition
     occurs the user is consulted for corrective action if
     recovery is possible, otherwise a run-time error occurs.

     To escape from the dialogue the user can use altmode as
     answer.  SIMDDT is then entered and the user can later
     resume the dialogue with the PROCEED command (refer to
     chapter 9).  Note however, that it is not possible to use
     SIMDDT when the escape facility is used in dialogue before
     start of the SIMULA program execution, i.e.  when the
     specification file is read.

     The various dialogue messages are described in appendix D.
     The rest of this chapter is concerned with how to define
     files, run-time switches and various aspects of the
     different input-output classes of SIMULA.
     8.2  HOW TO DEFINE A FILE


     A new file is created with the object generator NEW.  File
     objects can be of four different classes:

     infile
     outfile
     printfile
     directfile
DECsystem-10 SIMULA Language Handbook, part II            Page 50
Chapter 8.2 OBJECT PROGRAM I/O, HOW TO DEFINE A FILE


     Printfile is a subclass of outfile.  The argument to these
     file classes should be a text variable or a text constant
     containing a file definition.  The file definition binds the
     file object to a device and a physical file.
     File definition format:

     logicalname file-descriptor

     The logical name must consist of one to six alphanumeric
     characters.  The characters percent (%) and dollar ($) will
     also be accepted.  The logical name is used in all run-time
     error messages concerning I/O.  The following text will
     precede all such errors:
     ERROR FOR FILE:  logicalname
     The logical name need not be unique, but the user is advised
     to have unique names for ease of identification.  The
     logical name is also used to link file class arguments to
     file definitions from the specification file as described
     below.

     Examples:

     FILE1:-NEW infile ("FILE1 MYFILE.DAT");
     x:-NEW outfile("FILE2 RESULT.LST<077>");
     INSPECT NEW directfile ("dir random") DO ...

     The logical name may be omitted from the file definition.
     In this case the file name will be used as logical name or
     if the file name is missing, the device name is used.

     Examples:

     Y:-NEW outfile("LPT:");                 Logical name is LPT
     Z:-NEW infile("TEXT.ASC");              Logical name is TEXT
     W:-NEW infile("W");                     Logical name is W

     The logical name must be delimited by at least one space or
     tab.

     The complete format of a file descriptor is:

     device:filename.extension[path]<protection>/switch/switch
     ...
        or
     str:<directory>filename.type;protection/switch/switch ...
     (TOPS-20)

     Default for device or str is DSK.  Device may be any
     physical device name or logical device name (structure name)
     previously defined (via the ASSIGN command or equivalent).
     Default for file name is logical name.  No default for
DECsystem-10 SIMULA Language Handbook, part II            Page 51
Chapter 8.2 OBJECT PROGRAM I/O, HOW TO DEFINE A FILE


     extension (type).  may contain letters (lower case are
     converted to upper case), digits, percent and dollar sign.
     Part or all of the filename can also be specified in octal
     code.  The character "#" (number sign) starts a string of
     octal digits (values 0-7).  Two octal digits represent one
     character in sixbit (DEC-10 64 character subset).  An odd
     number of digits is augmented by a final zero.  The string
     is converted to 6-bit bytes and inserted in the file name
     (left justified) at the position of the number sign.  The
     string of digits is finished when a non-octal character is
     encountered.  Example:  "DSKD:#000123000456.UFD[1,1]" is the
     specification of the UFD (user file directory) of path
     [123,456] on structure DSKD.

     Default for path is user's default path.  The format is:

     [projectnumber,programmernumber,sfd1,sfd2,...]

     The path must always end with a right square bracket.
     Default TOPS-20 directory is the connected directory.
     Default for protection is the installation defined standard
     protection.  Switches are covered in section 8.3.  Trailing
     or leading spaces and tabs are ignored in the file
     descriptor.

     A file descriptor may contain an asterisk in any of the
     fields except protection.  This will cause a dialogue at
     run-time.  The following message is typed on the terminal:

     %PLEASE SPECIFY ADDITIONAL INFORMATION FOR FILE:
     logicalname
     *

     The user can now enter missing parts of the file descriptor
     and also override previously defined parts.

     Example:

        ...  NEW infile ("FILE1 *");

     RTS types:

     %PLEASE SPECIFY ADDITIONAL INFORMATION FOR FILE:  FILE1
     *INFIL.DAT

     The system will repeat this request until all fields
     containing asterisks are defined.

     The source contains:  ...  NEW infile("file2 *:*");
DECsystem-10 SIMULA Language Handbook, part II            Page 52
Chapter 8.2 OBJECT PROGRAM I/O, HOW TO DEFINE A FILE


     The following dialoque might take place:

     %PLEASE SPECIFY ADDITIONAL INFORMATION FOR FILE:  file2
     *INFIL.DAT
     %PLEASE SPECIFY ADDITIONAL INFORMATION FOR FILE:  file2
     *DSK:

     This is one way in which the user can defer the binding
     between file and file object until run-time.

     A similar dialogue is entered when an error occurs such that
     the file specification given by the program cannot be
     opened.  In such a case, you can transfer to SIMDDT from
     this dialogue by pushing the ALTMODE (ESCAPE) button on your
     terminal.

     Another way is to let the SIMULA program use data from the
     TTY or a file on any other device to create parameter
     strings to NEW file creations.

     A third way to achieve this is the specification file
     facility.  This gives the user the ability to specify all
     his file definitions in a special file that is read by RTS
     before start of execution.  This file may also contain
     run-time switches.  The compile switch RUNSWITCHES must be
     used at compilation.  This switch defines the specification
     file which can be TTY or a DSK file.  /R without argument
     denotes TTY.  In that case the RTS will type ENTER FILE
     DEFINITIONS before execution start and the user may supply
     file definitions and switches.  The TTY input is terminated
     with a carriage return.

     Example:

      .EXECUTE SIMPRO(R)
      SIMULA:  SIMPRO
      LINK:  Loading
      [LNKXCT  SIMPRO Execution]
      ENTER FILE DEFINITIONS:
      *FILE1 INFILE.DAT[130,133]
      *FILE2 OUTFIL.DAT
      *SCRATCH DUMMY
      *
      EXECUTION STARTED

     The file definitions have the same format as in the argument
     to the file classes.  The logical name must be unique, since
     RTS uses this name to link the file definitions in the
     specification file to the file class arguments.  RTS will
     build a table from the specification file.  When a new file
     object is created this table is searched to see if the file
DECsystem-10 SIMULA Language Handbook, part II            Page 53
Chapter 8.2 OBJECT PROGRAM I/O, HOW TO DEFINE A FILE


     was defined prior to execution.  Information in the
     specification file overrides the information in the file
     class argument.

     The file definitions may also be a part of SYSIN.  This is
     accomplished with /R:"SYSIN" in the OPTIONS statement in the
     source code.  If SYSIN is read from TTY the dialogue
     described above will take place.  If SYSIN is a disk file,
     the file definitions are read from SYSIN.  They must then be
     terminated with an empty line to separate them from the rest
     of the SYSIN input to be read by the program.

     It is also possible to use indirect specification files.
     This is denoted with the normal indirect delimiter:

     @file-descriptor

     Indirect files can only be read from disk and must not
     contain any definitions of indirect files.  They must not be
     stored in sub-file directories.

     Example:

      .EXECUTE SIMPRO(R)
      SIMULA:  SIMPRO
      LINK:  Loading
      [LNKXCT  SIMPRO Execution]
      ENTER FILE DEFINITIONS:
      *@FILES.SPC
      *
      EXECUTION STARTED

     Specification files on disk need not be terminated with an
     empty line.  It is possible to have more than one indirect
     specification file, but they can not be nested.  SYSIN may
     also be used as an indirect specification file.
DECsystem-10 SIMULA Language Handbook, part II            Page 54
Chapter 8.3 OBJECT PROGRAM I/O, RUN-TIME SWITCHES


8.3  RUN-TIME SWITCHES


     Switches that appear before the file definition or, in a
     specification file, alone on a line are called GLOBAL
     switches.  Other switches are termed LOCAL.  The same switch
     may be either local or global as defined below.  All
     switches can be designated with their first letter or with
     as many letters as desired.  The full names are given below.

     ACCESS:APPEND
     This switch can only be local and is applicable to outfiles
     and printfiles only.  It means that the file will be written
     in append mode, i.e.  the output will be appended to the
     file if it already exists.

     ACCESS:RONLY
     This local switch is applicable to directfiles only.  It
     means that the directfile can only be read, not modified.

     BUFFER:n

     type     n       meaning

     global   =<32    
                      n is the number of buffers in the buffer
                      ring for all subsequent files, unless they
                      have a local BUFFER switch or a new global
                      BUFFER switch appears
     global   >32     
                      n defines the area in words to be allocated
                      for buffers (necessary space for all files
                      defined in the specification file will
                      however always be allocated regardless of
                      this value)
     local    =<32    
                      n is the number of buffers in the buffer
                      ring for this file
     local    >32     
                      n defines the size of one buffer in a
                      two-buffer ring (applicable to mag-tape
                      only)

     FILES:n
     This switch defines the number of files to be handled
     simultaneously during execution and helps the run-time
     system to allocate an appropriate buffer area before start
     of execution.  Since garbage collection will be invoked when
     the buffer area overflows, FILES can be used to avoid this.
     FILES is a global switch only.  Default for n is 0.
DECsystem-10 SIMULA Language Handbook, part II            Page 55
Chapter 8.3 OBJECT PROGRAM I/O, RUN-TIME SWITCHES


     IMAGESIZE:n
     A local switch applicable to directfiles only.  It defines
     the record size which will be n+2 to allow for carriage
     return and line feed.  If this switch is not given, the
     image size specified via the parameter to OPEN will be used
     to define n.

     HELP
     Prints the contents of the help file SIMRTS.HLP on the
     user's terminal.

     LIMIT:n
     LIMIT specifies the number of blocks that may be written on
     an outfile or printfile.  Default is no limit.  A run-time
     error occurs if this limit is exceeded.  LIMIT may only be
     used as a local switch.

     NUMBERED
     This switch can be applied only as a local switch in the
     specification of an outfile, printfile or directfile.  On a
     call to outimage, the last bit of the first word of the
     image is set to 1.  The actual line number must be supplied
     by the SIMULA program in the five first characters of the
     image.
     NOTE!!  The image must start on a word boundary!
     If the image is a main text or starts a main text, this is
     always the case.  According to DEC standard, the sixth
     character should be a tab (char(9)).  NUMBERED implies
     WORDALIGNED.  See below.

     SIZE:n
     This switch defines the initial number of blocks (n) to be
     allocated to an outfile or directfile.  Default for n is 5.
     At least n blocks will always be allocated but the file can
     however become larger than this size.  The switch will
     improve the efficiency when the file is large.  SIZE may
     only be used as a local switch.

     A numeric switch value must be given in the form of a
     decimal integer optionally followed immediately by the
     letter K or P, signifying multiplication with 1024 and 512
     respectively.

     WORDALIGNED
     This switch is local and applies to outfiles and printfiles.
     Directfiles are always word-aligned.  The WORDALIGNED switch
     forces each image in the buffer to start on a word boundary.
     If in addition the internal image is word-aligned, the image
     can be copied more efficiently to the buffer.  Main texts
     are always word-aligned.
DECsystem-10 SIMULA Language Handbook, part II            Page 56
Chapter 8.3 OBJECT PROGRAM I/O, RUN-TIME SWITCHES


     All switches except FILES and HELP may appear in the text
     argument to a file object.

     Example:

     INSPECT NEW outfile("RES.DAT/A:APPEND/LIMIT:100") DO ...







8.4  CLASS INFILE


     An infile is always read sequentially.  Each inimage will
     return the next record in the image defined for the file,
     which is the text variable specified in the OPEN call.  A
     record is terminated with either of line feed, altmode, form
     feed or vertical tab.  Carriage returns and nulls are
     ignored on input.  Form feed, altmode and vertical tab are
     transferred to the image, while the line feed is not moved.
     This means that if a file which contains, say, form feeds,
     is copied with a very simple SIMULA program, the new copy of
     the file will have an extra carriage return+line feed
     sequence appended after each form feed, since OUTIMAGE
     appends these two characters after each image.  (Unless the
     copying SIMULA program explicitly checks for form feeds in
     the copied text).

     If the external image is longer than the image size then a
     run-time error occurs.  If the external length is shorter
     than the image size, the rest of the image is padded with
     blanks.

     The procedure ENDFILE will return TRUE when the end of file
     has been passed.  The image will contain a special end of
     file record consisting of the two characters /* followed by
     spaces when INIMAGE is called and end of file is
     encountered.

     The following scheme may be used to process an infile:

             REF(INFILE)F;
             F:-NEW infile("...");
             F.OPEN(...);
             .
             .
             .
             F.INIMAGE;
DECsystem-10 SIMULA Language Handbook, part II            Page 57
Chapter 8.4 OBJECT PROGRAM I/O, CLASS INFILE


             WHILE NOT F.ENDFILE DO
             BEGIN
                     process one record;...;
                     F.INIMAGE
             END;
             .
             .
             F.CLOSE;

     If ENDFILE returns TRUE when INIMAGE is called a run-time
     error occurs.

     The following devices can be used for infile:
     TTY, disk, DECtape, magnetic tape, card reader and paper
     tape reader.







8.5  CLASS OUTFILE


     Outfiles are written sequentially.  The user may allocate as
     many blocks as appropriate with the SIZE switch.  If SIZE is
     omitted at least 5 blocks will be allocated.  If the initial
     allocation is used up, the operating system will
     automatically allocate as much as needed.

     The LIMIT switch may be used to stop unintentional endless
     loops with output.  The argument to LIMIT defines how many
     blocks will be written on a file.  A run-time error is
     invoked if this limit is exceeded.

     On OUTIMAGE, IMAGE.STRIP is output with carriage return and
     line feed appended.  A special procedure BREAKOUTIMAGE
     exists to allow output on TTY without carriage return and
     line feed.  This procedure can be used on any device.
     BREAKOUTIMAGE strips away only spaces after POS before
     outputting the line.

     Outfiles can also be written in append mode with the switch
     ACCESS:APPEND.  If the file already exists, the new output
     is appended to the existing file.  The minimum allocation of
     (usually) 5 blocks does not apply to files written in append
     mode.  All unused space will be released at CLOSE.

     Outfiles can be written on the following devices:
     TTY, disk, DECtape, magnetic tape, line printer, card and
DECsystem-10 SIMULA Language Handbook, part II            Page 58
Chapter 8.6 OBJECT PROGRAM I/O, CLASS PRINTFILE


     paper tape punch.







8.6  CLASS PRINTFILE


     This file class is a subclass of outfile.  The following
     differences exist compared to outfile:

     - SIZE does not apply to printfile, i.e.  the user can not
     allocate a specific amount of blocks, all unused space will
     be released when the file is closed.

     - a form feed is output when the file is opened on a device
     other than TTY.

     - a form feed is output after n lines, where n is the
     current value of the internal variable linesperpage (set by
     the user with the procedure LINESPERPAGE or defaulted to
     60).

     - the following special procedures exist for printfile to
     control the layout of the printed file:
     SPACING, LINESPERPAGE, EJECT.  These procedures are
     described in the SIMULA Language Handbook Part I.

     It is often inconvenient to get a form feed on TTY after n
     lines of output, especially in conversational applications.
     This can be circumvented with the following statement:
     SYSOUT.LINESPERPAGE(-1) which will set n to 2**18-1, which
     will be the same as no form feeds in most practical cases.

     Printfiles can be written on the same devices as outfiles.
DECsystem-10 SIMULA Language Handbook, part II            Page 59
Chapter 8.7 OBJECT PROGRAM I/O, CLASS DIRECTFILE


8.7  CLASS DIRECTFILE


     A SIMULA directfile is a file that can be accessed randomly
     by specifying the desired record's relative number in the
     file.  This is done with the LOCATE procedure.  The records
     are numbered sequentially from 1 upwards.

     The operating system permits the user to create directfiles
     randomly.  It is e.g.  possible to start from scratch and
     write, say, record 100.  The operating system will then
     write blocks 1 to 99 and fill them with nulls and then write
     block 100.  The file can then be expanded randomly, the
     operating system will allocate needed space and fill
     unwritten blocks with nulls.

     Definitions:

     Image size is the length of the text variable used at OPEN.

     Record size is the length of each external record in the
     file, this length is fixed for directfile.

     Actual record size is the number of characters preceding
     line feed, not counting carriage return, or number of
     characters preceding and including vertical tab, altmode or
     form feed.

     Physical record size is the number of words needed to store
     one record in the file;  all records start on a word
     boundary.

     A disk block consists of 128 words, 640 characters, which
     gives an image size of 638 characters not counting carriage
     return and line feed.  The record size for a directfile is
     fixed and is defined with the IMAGESIZE switch or, if the
     switch is not given, by the length of the text variable
     given on the first call of OPEN for the file.  For each
     following inimage or outimage call, the current image of the
     file  m u s t  have the size used at open.

     A directfile record, the external image, is thus n+2
     characters long, where n is the value of the IMAGESIZE
     switch argument.  The record size may be smaller, greater
     than or equal to the physical block size.  RTS will compute
     the relative block number from the record number and the
     physical record size.

     On output, CR-LF is appended after the end of the image in
     the buffer.  Both on input and output, the  w h o l e  image
     is always transferred to or from the buffer, regardless of
DECsystem-10 SIMULA Language Handbook, part II            Page 60
Chapter 8.7 OBJECT PROGRAM I/O, CLASS DIRECTFILE


     any special characters.  It is thus possible to embed
     control characters, e.g.  line feed, carriage return, form
     feed, in the image.

     The ENDFILE procedure returns TRUE when both of the
     following two conditions are true:

     a) LOCATION identifies a record outside the file range,
     i. e. LOCATION < 1 or LOCATION > limit, where limit is an
     internal variable containing the highest record number in
     the file.  This variable is computed from record size and
     file length at OPEN and is updated by OUTIMAGE when the file
     is expanded.

     b) INIMAGE has been called at least once, and the last call
     was made after the last call for OUTIMAGE, and the last call
     for INIMAGE was made with a location identifying a record
     outside the file range as defined above.

     ENDFILE also returns TRUE when the file is not open.

     If LOCATE identifies a not yet written record, a subsequent
     call on ENDFILE will return FALSE.  INIMAGE will return the
     end of file record (see section 8.4) when an unwritten
     record is read.

     Example:

        D:-NEW directfile(...);
        .
        .
        .
        D.LOCATE(I);
        D.INIMAGE;
        IF D.ENDFILE THEN action for end of file;
        IF D.IMAGE.STRIP="/*" THEN action for not written record;
        .
        .

     This will also work for empty files.

     Directfiles can only be stored on disk.


     If you intend to read a directfile sequentially from start
     to end, you can save about 30% of the CPU time by declaring
     it as an INFILE in your SIMULA program.
DECsystem-10 SIMULA Language Handbook, part II            Page 61
Chapter 8.8 OBJECT PROGRAM I/O, BASICIO


8.8  CLASS BASICIO


     This class contains actions to generate a standard infile
     called SYSIN and a standard printfile called SYSOUT.  These
     files are generated and opened at start of execution.  They
     will be automatically closed at end of execution, but the
     user may close and reopen them as he wishes.  SYSIN and
     SYSOUT will normally be assigned to TTY by RTS, but the user
     may prevent this through definitions in the specification
     file, e.g.:

     SYSIN INDAT.DAT
     SYSOUT RESULT.LST/ACCESS:APPEND

     The user can also use the ASSIGN command before the
     execution and assign SYSIN and SYSOUT to, say, DSK.  SYSIN
     will then be read from a file called SYSIN without extension
     and SYSOUT will be written on a file called SYSOUT also
     without extension.

     If TTY is used as device for SYSIN or SYSOUT, the image size
     will initially be set to the carriage width of that
     terminal.  In other cases the image size of SYSIN will be 80
     characters and the image size of SYSOUT will be 132
     characters.



8.9  DEVICE CONTROL CHARACTERS

     Most ASCII(ISO) device control characters are illegal in
     SIMULA source program TEXT and CHARACTER constants.  They
     can however be entered into TEXT and CHARACTER variables by
     using the built-in function CHAR.

     For outfiles and printfiles all 128 ASCII(ISO) characters
     are output just as they appear in the image of the outfile.
     However, outimage will skip trailing blanks and
     breakoutimage will skip trailing blanks after pos.

     For directfiles, all 128 ASCII(ISO) characters are input and
     output unchanged.  Trailing blanks are not skipped.

     On input for infiles, the following special handling of
     certain device control characters will occur:
DECsystem-10 SIMULA Language Handbook, part II            Page 62
Chapter 8.9 DEVICE CONTROL CHARACTERS


      Octal Decimal Name         Action

      000    0      Null         Ignored in input.
      011   10      Line Feed    The character is not input, but
                                 will finish a line, so that the
                                 next INIMAGE will continue with
                                 the character following the line
                                 feed.
      013   11      Vertical Tab The character will be input as
                                 the last character of a line,
                                 and the next INIMAGE will
                                 continue with the following
                                 character.
      014   12      Form Feed    Same as vertical tab.
      015   13      Carr. Return Ignored in input.
      032   26      Control-Z    Signifies end-of-file in input
                                 from a terminal.  Otherwise
                                 copied directly.
      033   27      Escape       Same as vertical tab.  
DECsystem-10 SIMULA Language Handbook, part II            Page 63
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


9.   DEBUGGING SIMULA PROGRAMS WITH SIMDDT
     =====================================


     SIMDDT is an interactive program that is used to debug
     SIMULA programs.  SIMDDT allows the user to:

     a) set up to 20 breakpoints (1)               [STOP] AT n...
        in the program
     b) continue from a breakpoint                 PROCEED
     c) display the current breakpoint settings    [STOP] BREAKS
     d) remove a breakpoint setting                REMOVE [AT n]
     e) change the contents of a variable          INPUT x:= ...
     f) display the contents of a variable         OUTPUT x, ...
     g) display all variables in the storage pool  VARIABLES 
     h) display the dynamic operating chain        CHAIN
     i) display all scheduled processes            SCHEDULED
     k) switch output to a disk file e.g.  a.bug   USE a.bug
     l) display the source code                    DISPLAY m[:n]
     m) move SIMDDT viewpoint :  to object x       INSPECT x
           to SIMDDT interrupt point               INSPECT/START
           to CLASS or PROCEDURE generation point  INSPECT/RETURN
           to viewpoint before last RETURN         INSPECT/RESET
           to statically enclosing block           INSPECT/UP
     n) close open files                           [STOP] CLOSE
     o) read SIMDDT control file e.g.  x.cmd       @x.cmd
     p) terminate execution                        EXIT


















-----------------

(1) At a breakpoint the normal program execution  is  interrupted
and  the  debugging  program  SIMDDT  gets  control.  SIMDDT will
perform the tasks that were specified  when  the  breakpoint  was
set.
DECsystem-10 SIMULA Language Handbook, part II            Page 64
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


9.1  LOADING AND STARTING SIMDDT


     The SIMDDT program is self-relocating and it is read from
     disk by a SIMRTS routine when requested.  The SIMULA
     compiler switches I (IDENTIFICATION, produces a line number
     table) and D (DEBUGS, produces a symbol table) must have
     been set during compilation if the program is to be debugged
     with SIMDDT.  The switches are set by default but if they
     were set off, SIMDDT will give incomplete information to the
     user.

9.1.1 DEBUG

     If the source file has extension SIM or the /SIMULA switch
     is used, the DEBUG monitor command will ensure that SIMDDT
     is read into low segment core and started before the SIMULA
     program execution starts.  Note that this will not work if
     the first file in the DEBUG command is placed on another
     directory path.  You will get DDT instead of SIMDDT.  In
     that case you can use LOAD followed by REENTER to get
     SIMDDT.
     Command example:

     .DEBUG MYPROG.SIM


9.1.2 LOAD, SAVE, GET, REENTER

     The monitor commands LOAD plus SAVE will save the user
     program not including SIMDDT on disk.  If issued directly
     after LOAD (+SAVE) or GET, the REENTER command will cause
     SIMDDT to be read into low segment core and started.  The
     START monitor command will start user program execution
     directly.
     Command example:

     .LOAD MYPROG.SIM
     .SAVE
     .REENTER


9.1.3 ^C - REENTER

     After the SIMULA program has started to execute without the
     debugging system it is usually possible to invoke SIMDDT.
     One or two ^C commands will stop execution and return the
     terminal to monitor mode.  The REENTER monitor command will
     load and start SIMDDT, which will give the number of the
     source program line which corresponds to the statement which
     was interrupted by ^C.  This is very useful when the program
DECsystem-10 SIMULA Language Handbook, part II            Page 65
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


     is looping.  ^C can also be used if SIMDDT is already
     loaded.  If the user program was expecting input from the
     user terminal when the ^C was given (i.e.  if one ^C is
     sufficient), then SIMDDT will not start until the input has
     been typed.
     Note that SIMDDT will be started when the execution has
     reached the user source program level, i.e.  an I/O
     operation must be completed.  In some cases it will not be
     possible to break the execution and the user will be advised
     to try again.
     Command example:

     .EXECUTE MYPROG.SIM
     ^C
     ^C
     .REENTER


9.1.4 Program errors

     After a run time error has been detected, the SIMDDT program
     will be called to write the error message and the source
     program line number which holds the statement that caused
     the error.  Appendix H contains an example on how to handle
     program errors in a batch run.


9.1.5 CONTINUE after program exit

     The CONTINUE monitor command can be used to start SIMDDT
     after a normal program exit.  The variables in the storage
     pool can be displayed with the VARIABLES command.


9.1.6 REENTER after program exit

     The REENTER command should be used to restart the program
     and SIMDDT after program exit.  Note that all breakpoint
     settings will be lost, since the data area is reinitialized.
     If SIMDDT was not loaded at execution start, the START
     command will restart the program without invoking SIMDDT.
DECsystem-10 SIMULA Language Handbook, part II            Page 66
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


9.2  SIMDDT INPUT AND OUTPUT


     The user TTY is normally used for input to SIMDDT.  An "*"
     on the terminal signals that SIMDDT is expecting a user
     command.  The @ command will cause SIMDDT to read its input
     from the indicated file.

     A maximum of 135 characters are allowed in the input command
     which is terminated by a break character (e.g.  carriage
     return, line feed).


     At entry to SIMDDT one of the following messages will be
     given:

     SIMDDT STARTED
     *
              SIMDDT and SIMRTS have been initialized but
              user program execution has not started.
              Breakpoints can be set before starting the
              program with the PROCEED command.


     AT <LINE> .....
              Breakpoint instruction executed, no STOP specified.


     STOP AT <LINE> .....
     *
              Breakpoint instruction executed and STOP specified.


     SIMDDT ENTERED , PROGRAM INTERRUPTED AT <LINE>
     *
              Program was probably interrupted via ^C and
              REENTERed or the CONTINUE command was issued after
              program exit.


     ?ERROR IN JOB <N> AT <LINE>
     ZYQnnn ......
     *
              The error ZYQnnn was found.  


     <LINE> is a reference to a line number in the source program
     or an octal address, see below.
DECsystem-10 SIMULA Language Handbook, part II            Page 67
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


     The user TTY is used for output from SIMDDT when it is in
     debug mode and no USE command has been given.

     Both the user TTY and the SYSOUT file are used for output
     from SIMDDT when it is in error mode and continuation after
     the error is not possible.  The output from the ALL command
     is only written to SYSOUT but all other output is written on
     both files.
     If an output file is specified with the USE command it
     replaces the SYSOUT file.

     The ^O monitor command can be used to suppress output from
     SIMDDT.
     The ^C and REENTER monitor commands can be used to end
     processing of the current command.
     The output will be resumed when a new command is expected
     and SIMDDT outputs the "*".

     The format of the output from SIMDDT is briefly described in
     the command descriptions below.  Appendix H contains
     examples of SIMDDT output.
     Every address that points into the generated code for
     statements is output in the line number format
     <MODULE>:<NNNNN>, see below 9.3.1.  The line chosen by
     SIMDDT is the last line on which a statement starts with an
     address less than or equal to the referenced address.  If no
     line number table was generated during compilation (-I
     switch set) or if the address references an external FORTRAN
     procedure the format of the line identification is
     <MODULE>:O <oooooo> , where o is an octal digit.  When the
     address can not be linked to any line number table the
     address is output in octal format O <oooooo> .  This is the
     case for all addresses pointing to the dynamic area, into an
     external Macro 10 procedure, into the simulation routines
     and into the high segment.
DECsystem-10 SIMULA Language Handbook, part II            Page 68
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


9.3  SIMDDT COMMANDS


     SIMDDT operates in two modes, debug and error mode.  SIMDDT
     is in error mode when entered after a program error,
     otherwise it is in debug mode.


9.3.1 Command syntax


     SIMDDT will translate all lower case letters to upper case.
     The reserved words in the commands can be truncated to any
     number of characters as long as they are unique.  The
     keywords INPUT and STOP have also been given short forms
     namely I and ST.  A command may not occupy more than one
     line.

     A line starting with the character ; will be treated as a
     comment and ignored.

     One or more blank and/or TAB characters must be used as
     separator between adjacent identifiers or keywords.

     Meta symbols used in the syntax description below are:

     !     (logical or sign) separates alternative options
     []    (square brackets) enclose a group of options of which
           one or none may be selected
     ...   denotes an arbitrary repetition of the group enclosed
           by the preceding braces or square brackets.

     See also the ALGOL report [2] for an explanation of the meta
     language.


     The user identifies a breakpoint with a source program line
     number.  In the command descriptions below the notation
     <LINE> is used.  <LINE> has the form [<MODULE>:] <NNNNN>.

     <MODULE> is MAIN or the SIMULA name of a separately compiled
     procedure or class.  MAIN indicates the main program.  If
     <MODULE>:  is omitted, the current module is used by SIMDDT,
     that is MAIN at program start and later the module in which
     the current breakpoint is placed.

     <NNNNN> is a line number in the source program.  The line
     should contain the beginning of an executable statement.  If
     not found the first higher numbered line on which a
     statement starts will be chosen.
DECsystem-10 SIMULA Language Handbook, part II            Page 69
CHAPTER 9 DEBUGGING SIMULA PROGRAMS WITH SIMDDT


     In the commands the user references a source variable with
     the notation <IDENTIFICATION> or <IDENTIFICATION2>.

     <IDENTIFICATION> ::= <IDENTIFICATION1> 
                          [QUA <CLASS IDENTIFIER>] !
                          <IDENTIFICATION>.<IDENTIFICATION1>

     <IDENTIFICATION1> ::= <IDENTIFIER> !  
                           THIS <CLASS IDENTIFIER>!
                           <ARRAY IDENTIFIER>(<SUBSCRIPT LIST>)

     <SUBSCRIPT LIST> ::= [-] <INTEGER> !
                          [-] <INTEGER>,<SUBSCRIPT LIST>

     <IDENTIFICATION2> ::= <IDENTIFICATION> !
                          [<IDENTIFICATION>.]<ARRAY IDENTIFIER> !
                          [<IDENTIFICATION>.]*

     The <IDENTIFIER> must be a simple variable of type INTEGER,
     REAL, LONG REAL, BOOLEAN or CHARACTER or a simple object
     reference or TEXT type variable.  When the <IDENTIFIER> is a
     formal parameter called by name it is not handled by SIMDDT.
     A formal parameter with transmission mode by value or by
     reference will be treated like a declared variable.  The
     standard procedures SYSIN, SYSOUT, FIRST, LAST, SUC, PRED,
     PREV, EVTIME, MAIN, TIME and CURRENT are accepted by SIMDDT.
     A type procedure identifier is handled by SIMDDT if the
     current block is the procedure block.  The identifier can
     however not be used in connection with the IFCHANGED and the
     IF features in a breakpoint command or on the right hand
     side in an INPUT command.

     The brackets ( ) around the <SUBSCRIPT LIST> can be replaced
     by a pair of square brackets, e.g.  A[1,2].

     In the commands below the notation <STRING> is used.
     <STRING> is a string of characters enclosed in " .  The
     first 5 characters in the string are part of the message
     that SIMDDT outputs at the breakpoint.
DECsystem-10 SIMULA Language Handbook, part II            Page 70
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


9.3.2 Commands


     [STOP] AT <LINE> [,<N>] [<STRING>]

     SIMDDT ACTION:  Identifies a breakpoint and outputs a
     message every n:th time the referenced statement is
     executed.  If STOP is given execution is halted and new
     SIMDDT commands are accepted.  <N>, the loop counter, is an
     integer number.


     [STOP] AT <LINE> [<STRING>] [IFCHANGED] <IDENTIFICATION2> [,
     <IDENTIFICATION2> ]...

     SIMDDT ACTION:  Identifies a breakpoint.  If IFCHANGED is
     specified SIMDDT will output only changed variable values,
     otherwise the values are always given.  If IFCHANGED is
     specified the first time the breakpoint is reached, the
     value is compared to 0, FALSE, NOTEXT, NONE or CHAR(0),
     depending on its type.  * the complete block indicator and
     <ARRAY IDENTIFIER> are not allowed when IFCHANGED used.

     [STOP] AT <LINE> [<STRING>] IF <IDENTIFICATION> 
     <RELATION OPERATOR> <VALUE>

     SIMDDT ACTION:  Identifies a breakpoint.  SIMDDT will output
     the variable value if the relation is TRUE.
     The <RELATION OPERATOR> can be one of > >= < <= = \= == =/=
     GT GE LT LE EQ NE EQV IS IN.  The <VALUE> can be an
     <IDENTIFICATION>, TRUE, FALSE, NOTEXT, NONE, arithmetic
     constant, character constant, text value constant or CLASS
     identifier.
     The character " can never be part of an input text value
     constant.  Some special control characters can not be part
     of a character or text value constant, see 9.2.
     The arithmetic constant must be in the form of an <INTEGER
     ITEM> when the variable is integer and in the form of a
     <REAL ITEM> when it is a real or long real variable.  The
     de-editing procedures GETINT and GETREAL in the RTS system
     are used to get the value.


     REMOVE [ AT <LINE> ]

     SIMDDT ACTION:  Remove all breakpoint commands for a
     specific line or remove all breakpoints.


     [STOP] BREAKS
DECsystem-10 SIMULA Language Handbook, part II            Page 71
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     SIMDDT ACTION:  List all breakpoint commands.  The input
     order is not kept.  If STOP is specified, SIMDDT will halt
     after each breakpoint command and allow the user to remove
     it.  When all breakpoint commands for a line are removed the
     breakpoint is removed.  The BREAKS command can be used to
     check if it was possible to set a breakpoint at the line
     given in the user command since SIMDDT will change the line
     number if necessary.

     USER ACTION:  Type REMOVE to remove the last command listed
     or type an empty line (RETURN key) to keep the command.


     OUTPUT <IDENTIFICATION2> [/-TEXT][/-ARRAY]
     [,<IDENTIFICATION2>]...

     SIMDDT ACTION:  Output the values of the variables.  See
     VARIABLES for explanation of the switches.

     For an <ARRAY IDENTIFIER> the following will be output:
     The name and the array bounds
     <SUBSCRIPT LIST> = value of element ( if not initial value)

     If [<IDENTIFICATION>.]* is used then all the variables in
     the referenced block are output.
     The editing procedure PUTINT is used to output an integer
     variable and the PUTREAL procedure is used for real and long
     real variables.  A real variable will be given with 8 and a
     long real variable with 16 significant digits.

     For a text variable the following will be output:
     Octal address of the dynamic area allocated to the text
     variable
     SUBTEXT STARTS AT POSITION= <N>     (only if subtext)
     LENGTH= <N>
     POS= <N>
     " plus all characters in the stripped text
     "       (only if the last character in text is not a blank)
     A character with RANK(character) < 32 will be replaced by ^
     followed by a capital letter (octal 100 is added to the
     internal representation of the character).

     For a REF variable the following will be given:
     QUALIFICATION ERROR     (if error)
     Name of class referenced by variable
     Octal address of dynamic area referenced by variable
     TERMINATED or DETACHED <LINE> or <LINE> (if active class)
     where <LINE> is the reactivation point of the invoking
     block.

     For a character variable the character enclosed in quotes
DECsystem-10 SIMULA Language Handbook, part II            Page 72
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     will be output if RANK(character) is >= 32, otherwise the
     output will be CHAR <N>, where <N> is RANK(character),
     RANK(' ')=32.






     INPUT <IDENTIFICATION> <ASSIGNMENT OPERATOR> <VALUE>

     SIMDDT ACTION:  Changes the value of the referenced variable
     to the value given in the command.  The operators are := and
     :-.  See above for explanation of <VALUE>.


     DISPLAY [<MODULE>:][<RANGE>]

             <RANGE> ::= <NNNNN> !  [<NNNNN>]:<NNNNN> !
     [<NNNNN>],<NN>

     SIMDDT ACTION:  Output the indicated source program lines.
     If no range is given, 10 lines are displayed starting with
     the next line to be displayed.  The next line can be denoted
     by a dot (.).  The value of "." is 0 when no lines have been
     displayed.  The next existing line number is substituted for
     a non-existent line.  The first line can also be denoted by
     an up-arrow (^).  A colon (:) is used to separate the
     end-points of the range.  A dash (-) can also be used.
     Alternatively, the number of lines to be displayed can be
     given following a comma (,).  <NN> is the number of lines.
     The upper end of the range can be given by an asterisk (*),
     which is interpreted as +infinity.  If the first line of the
     range is not given, "." is assumed.  If the source program
     file is not found the user must enter the correct file
     specification via the I/O dialogue.  The display file is
     closed at exit from SIMDDT.  If <MODULE>:  is not given in
     the command and it is the first DISPLAY command since SIMDDT
     was entered, the current module is assumed otherwise the
     already opened source program file is read again.


     INSPECT <IDENTIFICATION> !  /START !  /RETURN !  /RESET !
     /UP

     SIMDDT ACTION:  The point in the program, from which SIMDDT
     sees the variables, is moved.  This makes it possible to
     input and output variables, which are not visible from the
     block in which the program execution was interrupted.
DECsystem-10 SIMULA Language Handbook, part II            Page 73
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     INSPECT <IDENTIFICATION>
     SIMDDT will now see inside the CLASS object, to which the
     variable refers.  It must be an object reference (not NONE).

     INSPECT /START
     SIMDDT will again see from the place, where program
     execution was originally interrupted and SIMDDT entered.  If
     SIMDDT was entered via an error or via ^C-REENTER, the
     initial SIMDDT message is repeated, giving the reason for
     entering SIMDDT.  Useful with display terminals.

     INSPECT /RETURN
     SIMDDT should be looking inside a procedure or an active
     CLASS.  /RETURN will make SIMDDT see from the point where
     the procedure was called or where the class was generated or
     called.

     INSPECT /RESET
     Go back to where SIMDDT was looking before the last INSPECT
     /RETURN command.  /RESET is equal to /START if no INSPECT
     /RETURN command has been given since SIMDDT was entered.

     INSPECT /UP
     Look directly at the statically enclosing block.  Not valid
     when SIMDDT is looking at a terminated class instance.




     PROCEED

     SIMDDT ACTION:  SIMDDT will either start program execution
     or continue processing at the point where it was
     interrupted.  PROCEED is not valid after an error from which
     it is not possible to continue or after a NOPROCEED command.


     USE <FILE SPECIFICATION>

     SIMDDT ACTION:  SIMDDT output will be written on the file
     specified in the command.  All output that signals a user
     action is also output on TTY e.g.  the message "STOP AT
     MAIN:17 " will be output both at the TTY and the file at the
     breakpoint stop.  The file is not closed until a new USE
     command is given or at the end of execution.  The format of
     the <FILE SPECIFICATION> is the same as the one used for the
     other user files, see chapter 8.2.  USE TTY:  will reset
     SIMDDT output to the terminal.


     CHAIN
DECsystem-10 SIMULA Language Handbook, part II            Page 74
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     SIMDDT ACTION:  Writes the dynamic operating chain starting
     with the current block.  Only procedures, class instances
     and inspected class instances are given.  The name of the
     block and its activation line are listed.  Note that no
     operating chain is given when the interruption address was
     not located in any line number table.


     VARIABLES [/-ARRAY][/-TEXT][/-GC][/START:[-]<oooooo>

     SIMDDT ACTION:  The complete storage pool is scanned and all
     variables that are of a type treated by SIMDDT are listed
     together with the name of the dynamic block in which the
     variables are declared.  Unless /-GC was specified or
     garbage collection is not safe, the garbage collector
     routine (G.C.) will be called before the storage pool is
     scanned.  When /-ARRAY is specified all array elements are
     skipped in the output.  When /-TEXT is specified all text
     characters are skipped in the output.  The /START switch can
     be used to output only the top of the pool.  Only blocks at
     addresses greater than the (octal) value of the /START
     switch will be output.  A negative value is added to the top
     of pool address to give a starting address.  G.C.  scans the
     pool and removes all dynamic blocks that are unreferenced
     and inactive.  To reduce output only variables which do not
     have their initial values are given.  The amount of data is
     often very large, and the USE command can be used to direct
     the output to a disk or LPT file.
     For each dynamic block instance the following will be
     output:
     The name of the dynamic block, that is the procedure or
     class name, MAIN if main program, PREFIXED BLOCK plus name
     of prefix class or BLOCK if unreduced block
     Octal address of the dynamic area
     TERMINATED or DETACHED <LINE> or <LINE> (if active)

     The value of a type procedure will also be output.

     The format of the variables is found in the description of
     the OUTPUT command above.  For each array identifier the
     name and the array bounds are always given even if all
     elements have their initial values.


     SCHEDULED

     SIMDDT ACTION:  For each scheduled process the following
     will be output:
     EVTIME= scheduled time
     Class name
     Octal address of dynamic area DETACHED <LINE>
DECsystem-10 SIMULA Language Handbook, part II            Page 75
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     ALL [/-ARRAY] [/-TEXT] [/-GC] [/START:[-]<oooooo>]

     SIMDDT ACTION:  Produces the same information as if the
     commands CHAIN, VARIABLES and SCHEDULED had been given.  The
     switches apply to the implied VARIABLES command, q.v.


     [STOP] CLOSE

     SIMDDT ACTION:  Lists and closes all open files except SYSIN
     and SYSOUT.  If STOP is specified SIMDDT will halt and allow
     the user to close the file.  Answer CLOSE or carriage
     return.


     NOPROCEED

     SIMDDT ACTION:  Inhibits the use of the PROCEED command.
     After this command it will be possible to use a critical
     command such as USE or DISPLAY.  Not necessary when stopping
     at preset breakpoints.  


     @ <FILE SPECIFICATION>

     SIMDDT ACTION:  SIMDDT input will be read from the file
     specified in the command.  The command will be output on the
     TTY before it is processed.  When end of file found SIMDDT
     will request input from the TTY.


     EXIT

     SIMDDT ACTION:  Returns control to SIMRTS which closes the
     SYSIN and SYSOUT files and then returns to the monitor.  


     HELP

     SIMDDT ACTION:  Lists part of the SIMDDT.HLP file.
DECsystem-10 SIMULA Language Handbook, part II            Page 76
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


9.3.3 Command examples


     STOP AT 55,3

     EXPLANATION:  Set a breakpoint at first statement on line 55
     and stop processing every third time the statement is
     executed so that the user can communicate with SIMDDT.

     AT MAIN:30 "LIST" VINT[1,3], VREF.VBOOL

     EXPLANATION:  Output the values of the variables VINT[1,3]
     and VREF.VBOOL each time the first statement on line 30 in
     the main program is to be executed.  The message will
     contain the letters "LIST".

     AT 10 IFCHANGED VREAL,VTEXT

     EXPLANATION:  Output the variable value if any of the
     variables were changed since the last time the statement at
     line 10 was to be executed.

     STOP AT 80 IF VREAL>=1.5

     EXPLANATION:  Stop execution at the statement on line 80 if
     the variable VREAL>=1.5

     STOP AT 80 IF BOOL EQV TRUE

     EXPLANATION:  SIMDDT does not understand "STOP AT 80 IF
     BOOL" but the above statement works and gives the desired
     effect.  In the same way, write "BOOL EQV FALSE" to give the
     effect of "NOT BOOL".

     OUTPUT VREF.VINTARRAY,VREALA[-1,7,7],VCHAR

     EXPLANATION:  Output all elements of the array
     VREF.VINTARRAY which are not zero, output the array element
     VREALA[-1,7,7] and the variable VCHAR.

     INPUT VTEXT:="TEXT VALUE ASSIGNMENT"

     EXPLANATION:  Change the value of the text variable.  Note
     that only the characters may be changed, but not the length.

     USE DEBFIL.LPT

     EXPLANATION:  SIMDDT output will be written on file
     DEBFIL.LPT.  Output in connection with a breakpoint stop
     will also appear on the user TTY.
DECsystem-10 SIMULA Language Handbook, part II            Page 77
CHAPTER 9 DEBUGGING SIMULA PROGRAMS , SIMDDT COMMANDS


     DISPLAY 1:10

     EXPLANATION:  Output the source program lines 1 to 10.

     DISPLAY ,5

     EXPLANATION:  Output the next 5 lines of the program.

     DISPLAY

     EXPLANATION:  Output the next 10 lines (== DISPLAY .,10).


     Appendix H.9 contains additional SIMDDT examples.
DECsystem-10 SIMULA Language Handbook, part II            Page 78
Chapter 10 PROGRAMMING CONSIDERATIONS


10.  PROGRAMMING CONSIDERATIONS
     ==========================

10.1 WRITING EFFICIENT PROGRAMS


     This section contains some hints on how to write efficient
     programs in SIMULA.  Unless very high efficiency is
     required, however, good structuring and readability should
     always have the highest priority.  If the program is to be
     run at other installations, portability considerations are
     also important.  See 10.2.

     A programmer who writes less well structured programs to
     gain efficiency will often find that he did not gain the
     efficiency he intended.  The initial version may be
     efficient, but due to the bad structure, later changes and
     additions will be harder to make, and as a result the end
     product may be less efficient and probably less reliable
     than if the program had been well structured at the outset.

     If you desire efficiency, your efforts towards this goal
     should be guided by knowledge about which parts of your
     programs are expensive.  Use of performance measurements
     programs such as that described in appendix J may be a good
     aid towards gaining this knowledge.  When you know which
     parts of your programs consume the most cpu time, core or
     other expensive resources, you will know where to apply
     rewriting or MACRO 10 procedures to minimize use of these
     resources.

     The following hints are not ordered by importance:

      -> Do not ignore warning messages issued by the compiler.
     Often, these messages point to possibly inefficient or
     dangerous coding sequences or features.

      -> Avoid unnecessary type conversions by declaring
     variables with appropriate types, and by avoiding mixed type
     expressions.  Note that the precision of certain arithmetic
     functions is governed by the precision of the argument,
     i.e. LONG REAL arguments cause the LONG REAL version to be
     called.  This may be inefficient in some cases where the
     greater precision is not necessary.

      -> In connection with the above, note also that the
     de-editing procedures GETREAL and INREAL always give LONG
     REAL results.  Copy the result to a REAL variable before
     using it in a REAL expression, if you want to avoid
     unnecessary conversions.
DECsystem-10 SIMULA Language Handbook, part II            Page 79
Chapter 10 PROGRAMMING CONSIDERATIONS


      -> In FOR statements, the STEP and UNTIL elements should be
     constants or simple variables.  Usually you do not want
     re-evaluation of these at every loop iteration.  Avoid
     function designators, formal parameters by name, subscripted
     variables, variables of different type from the controlled
     variable, and general expressions.  The fastest loop is one
     with step +1 or -1 and a limit which is a simple constant or
     variable.  Use the WHILE statement where the full generality
     of the FOR statement is not needed.

      -> In most cases, it is best to avoid transmitting
     parameters by name if value or reference mode can be used.
     One case where name parameters may be necessary is when the
     values of some parameters are to be modified by a procedure.
     In this case, it often pays to copy the value on entry and
     copy the modified value back on return.  Access to simple
     variables corresponding to formal parameters by name is
     optimized, but it is still slower than accessing a local or
     global variable.  In this respect, value and reference mode
     parameters count as local variables in the procedure.  What
     is said above does not always apply for text parameters when
     you have to choose between name and value mode.  One reason
     for this is that value transmission of text parameters
     destroys the stack nature of the top of the data area, which
     makes memory allocation slower.  Another reason is that
     copying of long texts should be avoided.  See below about
     "memory allocation for procedures".

      -> Avoid long linear searches through large sets.  If
     possible, use hash coding or binary tree representations to
     reduce the search times.  Note that CARDINAL performs a
     linear search through the whole set on each call!

      -> If many attributes of a class are to be accessed, use
     inspection in order to save some code space and execution
     time.  As a guideline, use INSPECT when you have more than 4
     accesses to attributes of the same class.  However, program
     readability may often motivate deviations from this
     guideline.

      -> Do not repeat the same information in many blocks.
     Suppose for example that you have a large number of
     instances of the same class, and some data is repeated in
     many or all of these instances.

     Instead of copying this information in all the block
     instances, you may put the information in a separate class
     object, with a reference from the partly similar objects to
     the single common object.

     Example:  Suppose that you have 1000 records of people with
DECsystem-10 SIMULA Language Handbook, part II            Page 80
Chapter 10 PROGRAMMING CONSIDERATIONS


     only four different work addresses.  Instead of including
     the work address in each of the 1000 class instances, you
     can have just four instances of a class "address", with
     references from each of the 1000 records to one of the four
     "address" instances.

      -> Avoid creating unnecessary blocks.  If a new temporary
     variable is required, declare it in an existing block rather
     than converting a compound statement into a block.

      -> Use EJECT and SPACING instead of outputting blank images
     on printfiles.  This is faster.

      -> Garbage collection time and the amount of core used is
     reduced if care is taken to avoid maintaining references to
     space-consuming data structures which are no longer needed.

     Examples:

     REF(HEAD) QUEUE;  ....building a large queue...  QUEUE:-
     NONE;  Comment when the set is no longer needed, this may
     save a lot of core and garbage collection time;

     TEXT MANUSCRIPT;  ...building a long text string...
     MANUSCRIPT:- NOTEXT;  Comment saves space when the
     manuscript is no longer needed;

     BEGIN REAL ARRAY MATRIX[100,100];
     ...use of the MATRIX ...
     END;  Comment saves space when the MATRIX is no longer
     needed;

      -> Memory allocation for procedures without VALUE-declared
     TEXT parameters is especially efficient.  However, this
     efficiency is lost if the procedure or any procedure called
     by it directly or indirectly creates new text objects (via
     COPY, BLANKS, INTEXT) or class instances (NEW) or CALLs a
     detached CLASS instance.

      -> Do not use INTEXT unnecessarily.  It creates a new text
     object (see above) and can usually be replaced by a suitable
     subtext of Image, but be careful not to use Inimage directly
     or indirectly before you have handled that subtext
     completely.  You may e.g. use text assignment:
     T:=Sysin.Image.Sub(Sysin.Pos,10) might replace T:-
     Intext(10) if T is preallocated e.g. via Blanks(10).  T can
     be reused.
DECsystem-10 SIMULA Language Handbook, part II            Page 81
Chapter 10 PROGRAMMING CONSIDERATIONS


      -> Use built-in system procedures and classes where these
     suit your needs.  They are often considerably faster than a
     corresponding SIMULA procedure or even corresponding in-line
     code.

     Example I:  "WHILE mytext.more DO" is faster than "n:=
     mytext.length;  FOR i:= 1 STEP 1 UNTIL n DO".

     Example II:  The built-in procedures LETTER and DIGIT
     provide a faster way of checking if a character is a letter
     or digit than using RANK and checking the integer values
     yourself.  Your program will also become less
     machine-dependent if you use LETTER and DIGIT.

      -> If you use DIRECTFILE, try to organize your programs to
     minimize the number of reads and writes.  This can be done
     by using hash-coding, keeping central tables in core, etc.

      -> If you have to choose from a number of alternatives,
     depending on the value of a variable, then a series of IF
     ...  THEN ...  ELSE statements is more efficient than a
     SWITCH, when the number of alternatives is less than 50.
     When the number of alternatives is larger than 50, a nested
     IF ...  THEN BEGIN IF ...  THEN ...  ELSE ...  END ELSE
     structure is still more efficient, though less neat, than
     use of a SWITCH.

      -> If a program has been carefully tested both by the
     programmer and in production work, you may, if you dare,
     consider to set off some of the built-in debugging aids, to
     save core and cpu time.  The following switches can be used
     (should be given in the COMPILE (EXECUTE etc.) command):

     -A  removes array bounds checking for arrays.  May save cpu
     time.
     -Q  removes qualification checking of reference assignments.
     May save cpu time.
     -I  removes the generation of line number tables for SIMDDT.
     Saves core.
     -D  removes the generation of symbol tables for SIMDDT.
     Saves core.


10.2 WRITING PORTABLE PROGRAMS


     Even if you do not now plan to move a program to another
     SIMULA system, such a need may arise in the future.  If
     portability is desirable, deviations from the Common Base
     language [1] should be kept at a minimum, or at least be
     very clearly commented and set aside from the rest of the
DECsystem-10 SIMULA Language Handbook, part II            Page 82
Chapter 10 PROGRAMMING CONSIDERATIONS


     code.  If external assembly or FORTRAN procedures are used,
     a SIMULA version should if possible be available for each of
     these in case of a move to a different installation.

     The following constructs of DECsystem-10 SIMULA should be
     avoided if you want portable programs:


      -> Any input procedure which is dependent on the line
     length of the input file.  Especially avoid input procedures
     requiring input lines longer than 72 or 80 characters.

      -> Changing the length of the image of a file after opening
     the file, especially letting the image be == NOTEXT.

      -> Use of multi-line text constants.

      -> Any output procedure which writes disk files with lines
     longer than 72 or 80 characters (132 characters for
     printfiles).

      -> Any use of the following Swedish characters in source
     program identifiers:  $, #, @, }, {, `.  These characters
     may however occur in TEXT and CHARACTER constants.

      -> Use of non-decimal constants.

      -> Use of lower case letters.

      -> Use of the characters whose decimal value is less than
     32 and the characters:
         !, [, ], ^, ~, | .
     Use alternative representations as follows:  NE for \=, NOT
     for \, COMMENT for !, () for [], ** for ^.

     -> Use of TEXT constants in IF-clauses, e.g.
     "Outtext(IF bool THEN "yes" ELSE "no");"

      -> With DIRECTFILE, use of the procedure ENDFILE, reading
     of unwritten lines, writing past the end of the file.


     Most of the external library procedures in chapters 4 and 7
     of the DECsystem-10 Simula Language Handbook part III will
     give portability problems.

     Some of the incompatibilities mentioned above will be
     removed automatically from your source programs if you
     convert them to IBM SIMULA using the SIMIBM program
     described in appendix M of this handbook.
DECsystem-10 SIMULA Language Handbook, part II            Page 83
Chapter 10 PROGRAMMING CONSIDERATIONS


10.3 WRITING VERY LARGE PROGRAMS


     When you begin writing a program which may in the end be
     larger than 1000 or 2000 lines, you can save much trouble by
     planning the program carefully before starting to program.

     To save compilation time when the program grows large, it is
     advisable to divide the program into separately compiled
     modules.  This division must be planned BEFORE starting to
     write the program.  When a program already has grown large,
     it is often difficult or impossible to find a workable such
     structuring.

     The best way to divide a program into separately compiled
     modules is usually to divide it into a not too large number
     of rather large (about 500 lines) separately compiled
     classes.

     Take advantage of the SIMULA feature that one class may
     extend the concepts defined in a prefixing class, and that
     the main program may combine the facilities of several such
     separately compiled classes or class chains.

     Example:  Your program may be divided into the following
     modules:
     1) Analyzing user input commands
     2) Interpreting formulas input by the user
     3) Handling help requests from the user
     4) Processing of the data base

     If none of these four modules use data or procedures from
     another module, you can write the four modules as four
     independent separately compiled classes, all accessible only
     from the main program:

     Command    Formula           Help request    Data base
     analysis   interpretation    handling        handling
          !            !            !               !
          --------------Main program-----------------
DECsystem-10 SIMULA Language Handbook, part II            Page 84
Chapter 10 PROGRAMMING CONSIDERATIONS


     If, however, the module "Formula interpretation uses
     facilities defined in the module "Command analysis", the
     following structure may be appropriate:

     Command
     analysis
        !
     Formula            Help request     Data base
     interpretation     handling         handling
        !                  !                !
        -------------Main program------------

     This has the disadvantage that changes in the data
     definitions in "command analysis" may force recompilation of
     "Formula interpretation", but the advantage that "Formula
     interpretation" has access to the data structures and
     operations defined in "Command analysis".

     Suppose now that "Data base handling" can be divided into
     two modules, "Reading records" and "Handling records".  Both
     these modules require access to the data structure
     definitions used to represent "records" in core.

     One solution is then to make one of these two a subclass to
     the other:

                                         Defining
                                         records
                                            !
     Command                             Reading
     analysis                            records
        !                                   !
     Formula            Help request     Handling
     interpretation     handling         records
        !                  !                !
        -------------Main program------------
DECsystem-10 SIMULA Language Handbook, part II            Page 85
Chapter 10 PROGRAMMING CONSIDERATIONS


     Another solution is to make "reading records" and "handling
     records" two parallel subclasses to "Defining records":

     Command                              Defining
     analysis                             records
        !                                 !     !
     Formula          Help request   Reading   Handling
     interpretation   handling       records   records
        !                   !          !         !
        --------------------Main program----------

     The latter solution has the advantage that no changes in
     "reading records" can cause recompilation of "handling
     records", but the disadvantage that "defining records"
     becomes more limited.  It works best if "defining records"
     is a class with no internal class definitions in it.

     In some cases, the only solution for you is to structure
     your program as a long chain of separately compiled classes,
     each a subclass to the previous one.  This is the only
     solution for code which has to be inside "SIMSET" or
     "SIMULATION".  The disadvantage with this solution is that a
     change in the data definitions in the outermost class may
     force recompilation of the whole chain.


10.4 MISCELLANEOUS ADVICE


      -> Use BREAKOUTIMAGE when communicating with a
     conversational display terminal.  This permits the prompting
     question and the answer to be written on the same line.
     Example:  outtext("Enter t:");  breakoutimage;  lastitem;
     t:-copy(sysin.image.sub(sysin.pos,...));  sysin.setpos(0).

      -> If the output from a program is directed to a
     conversational terminal (e.g. the user's tty), it may be
     inconvenient, especially with display terminals, to get the
     automatic new page after every 60 lines.  This can be
     circumvented by using an outfile instead of a printfile, or
     by coding LINESPERPAGE(-1) in your program.
     LINESPERPAGE(-1) effectively sets the page size to infinity.
DECsystem-10 SIMULA Language Handbook, part II            Page 86
APPENDIX A   HARDWARE REPRESENTATION


APPENDIX A   HARDWARE REPRESENTATION
====================================


A.1  SIMULA COMPILER INPUT.

     A DECsystem-10 SIMULA program is a sequence of symbols from
     the DECsystem-10 character set (ASCII 7 bit code) placed on
     a disk file (i.e.  an ordered set of data on a disk like
     device).  The data on the file is separated into lines.  A
     line is delimited by a vertical tab (VT), line feed (LF) or
     form feed (FF) character.  The maximum length of a line is
     135 characters.

     A SIMULA program consists of a sequence of basic symbols,
     identifiers, constants, comments and line editing
     characters.  The rules for these are given below.



A.2  SIMULA PROGRAMS ON CARDS.

     Existing SIMULA programs with card characteristics, 80
     characters per card with columns 73-80 for identification or
     sequence numbers can easily be processed by using either (i)
     the batch switch WIDTH or (ii) the PIP command switch E or
     (iii) the IBMSIM or CDCSIM program described in appendix M
     to remove columns 73-80.  The IBMSIM and CDCSIM program will
     also convert the character representation from IBM SIMULA or
     CDC SIMULA to DECsystem 10 SIMULA.



A.3  STANDARD LINE SEQUENCE NUMBERS.

     The rules for standard sequence numbers are specified in the
     LINED reference manual paragraph 7.0.  Those characters that
     belong to the sequence number (i.e.  padding NULL
     characters, the number itself and a trailing tab character)
     are not considered part of the input SIMULA program.
     However they will appear in the program listing and they are
     put in the line number table so that SIMDDT can use them.
     If no line numbers appear in the source code the SIMULA
     compiler will supply its own line numbers.  The handling of
     programs with partly numerical, partly blank line numbers is
     described in appendix K.
DECsystem-10 SIMULA Language Handbook, part II            Page 87
APPENDIX A   HARDWARE REPRESENTATION


Reference  DEC 10 SIMULA  Alternative    ASCII 7 bit   Comments
language   representation representation octal code
-----------------------------------------------------------------
   +           +                         053
   -           -                         055
   x           *                         052
   /           /                         057
"int. div."    //                        057 057
   ^           ^              **         136
   >           >              GT         076
"> or ="       >=             GE         076 075
   <           <              LT         074
"< or ="       <=             LE         074 075
   =           =              EQ         075
"not ="        NE             \=         (134 075)
   ==          ==                        075 075
   =/=         =/=                       075 057 075
   .           .                         056
   ,           ,                         054
   :           :                         072
   ;           ;                         073
"lowered ten"  &              &&         046     Lowered ten
   symbol
                                                 & in real
                                                 constants
                                                 && in long real
   (           (                         050
   )           )                         051
   [           [              (          133
   ]           ]              )          135
   :=          :=                        072 075
   :-          :-                        072 055
   '           '                         047     Character quote
   "           "                         042     Text quote
"not"          NOT            \          (134)
"space"        <space>                   040
"log. OR "     OR
"log. AND"     AND
"log. IMP"     IMP
"log. EQV"     EQV
COMMENT        COMMENT        !          041     ! is comment
                                                 symbol in
                                                 DEC 10 ALGOL
                                                 and FORTRAN but
                                                 not in standard
                                                 SIMULA
-----------------------------------------------------------------

   Table A.1   Special character representation in DEC 10 SIMULA.
               Non-printable reference language symbols
               are enclosed in double quotes.
DECsystem-10 SIMULA Language Handbook, part II            Page 88
APPENDIX A   HARDWARE REPRESENTATION


A.4  BASIC SYMBOLS.

     A basic symbol is represented as a keyword, a special
     character or a sequence of special characters.  The keywords
     are the standard SIMULA words plus GO, LONG, OPTIONS, SHORT,
     TO and the words listed in the table A.1 above (See Appendix
     G.).  A lower case letter can always be used instead of the
     corresponding upper case letter.



A.5  IDENTIFIERS.

     The first character in an identifier must be a letter.  The
     following characters must be letters, digits or underline
     characters.  A lower case letter can always be used instead
     of the corresponding upper case letter.  The first 12
     characters in an identifier are significant.  An identifier
     must not be a keyword (See Appendix G).  The character
     <underline> or <left arrow> (octal code 137) is accepted in
     identifiers but not as the first caracter.  Embedded blanks
     are not accepted.



A.6  CONSTANTS.

A.6.1  Arithmetic constants.

     Integer constants consist of a number of decimal digits.  If
     an integer constant is out of integer range it is regarded
     as a real constant.  The integer range is 1 - 2^35 to 2^35 -
     1.
     ( 2^35 = 34 359 738 368 ).
     An integer constant can be written in a different radix as
     follows:
     nRd
     where n is 2, 4, 8 or 16 and d represents a string of digits
     acceptable in the corresponding radix.  E.g.  octal number
     7711 is written 8R7711 and binary 10 is written 2R10.

     Real constants consist of a decimal number (containing
     either an integral part or a fractional part or both)
     followed by an optional exponent.  The fractional part has a
     range in magnitude of 1/2 to (1 - 2^-27) with a precision of
     approximately 8 decimal digits.  The exponent consists of
     the lowered ten symbol & followed by an optionally signed
     integer.  The exponent range is -128 to 127 inclusive.  E.g.
     0.000000000123 could be written 1.23&-10.  Assuming positive
     numbers, the smallest real number distinct from zero is
     0.146 936 793 852 785 939&&-38, and the greatest number is
DECsystem-10 SIMULA Language Handbook, part II            Page 89
APPENDIX A   HARDWARE REPRESENTATION


     0.170 141 183 460 469 231&&+39.  Since the sign is treated
     separately, these limits are valid for negative numbers if
     the sign is changed.

     Long real constants must contain the exponent part with the
     lowered ten symbol &&.  The exponent range is the same as
     for real constants.  The fractional part has a range in
     magnitude of 1/2 to (1 - 2^-62) with a precision of
     approximately 19 decimal digits.  Long real constants should
     be used only if a precision greater than 8 decimal digits is
     needed.  E.g.  3.1415926535898 is written 3.1415926535898&&0
     to be represented in double precision.



A.6.2  Boolean constants.

     Boolean constants are the SIMULA words TRUE and FALSE.



A.6.3  Character constants.

     A character constant is any single printable character from
     the ASCII set, octal code 040-176, enclosed by the symbol '
     (octal code 047).  Other ASCII character values can be
     entered with the CHAR procedure, e.g.  CHAR(9) for <TAB>.



A.6.4  Text constants.

     A text constant is represented by one or more sequences of
     printable ASCII characters, octal code 040-176, enclosed in
     double quote symbols " (octal code 042).  The sequences may
     be separated by any number of blanks, tabs or line control
     characters (VT, CR, LF, FF).  Together, the sequences form
     one text constant which is the concatenated contents of the
     character sequences.  The double quote symbol in a text
     constant is written as two consecutive double quote symbols.
     The line delimiting characters VT, CR, LF and FF are
     accepted but not treated as part of the text constant.
     Other ASCII character values can be entered with a
     combination of the PUTCHAR and CHAR procedures.



A.7  COMMENTS.

     A comment consists of the basic symbol COMMENT followed by a
     nonalphameric character and the successive characters up to
DECsystem-10 SIMULA Language Handbook, part II            Page 90
APPENDIX A   HARDWARE REPRESENTATION


     and including the next semicolon.  The symbol COMMENT may be
     replaced by the character !  (octal code 041).  All
     printable characters plus the line editing characters are
     allowed in comments.

     An END comment is the string of characters following the
     basic symbol END up to but not including the next semicolon,
     END, ELSE, WHEN or OTHERWISE.

     Comments and END comments are printed in the program
     listing, but they are not further processed by the compiler.

     A warning message is issued if an END comment contains the
     basic symbols ":=" , ":-" , "(" or "GOTO".



A.8  USE OF SPACES AND LINE EDITING CHARACTERS.

     A basic symbol, identifier or constant must not contain line
     editing characters or non-significant spaces.
     Exceptions are:
     1) GOTO can be written with or without spaces and
        line editing characters between GO and TO.
     2) Arithmetic constants may contain spaces.

     Adjacent identifiers or basic symbols represented by
     keywords must be separated by one or more spaces and/or line
     editing characters.  The same rule applies to a keyword
     followed or preceded by a number constant.  Any basic
     symbol, identifier or constant must be contained in one
     line.  A text constant may, however, continue over several
     lines.  This is best achieved by splitting the constant into
     several parts, e g
         t:-copy("first part of text "
                 "second part of text");
DECsystem-10 SIMULA Language Handbook, part II            Page 91
APPENDIX B   INTERNAL REPRESENTATION


APPENDIX B   INTERNAL REPRESENTATION
====================================



     The DECsystem-10 SIMULA Technical Documentation [6] should
     be consulted when the information in this appendix is
     insufficient.



B.1  REPRESENTATION OF VARIABLES


     INTEGER
     -------

     One word.  Twos complement fixed point hardware format.


     SHORT INTEGER
     -------------

     Treated as INTEGER.


     REAL
     ----

     One word.  Single precision floating point hardware format.


     LONG REAL
     ---------

     Two words.  Double precision floating point hardware format.


     CHARACTER
     ---------

     One word.  The rightmost 7 bits contain the character.  The
     rest of the word is zero.


     BOOLEAN
     -------

     One word.  TRUE is represented by -1.  Any other non-zero
     value will also be interpreted as TRUE.  FALSE is
     represented by 0.
DECsystem-10 SIMULA Language Handbook, part II            Page 92
APPENDIX B   INTERNAL REPRESENTATION


     REF
     ---

     One word.  Left halfword is zero.  Right halfword points at
     an object or is NONE.  NONE is represented by octal 676000
     (223K).


     TEXT
     ----

     Two words.              ---------------------
                     0       [   SP    I   ZTE   ]
                             ----------+----------
                     1       [   LNG   I   CP    ]
                             ---------------------

     SP   0<0:17>    The number of characters before this
                     (sub)text within the text object.
     ZTE  0<18:35>   Pointer to the text record.
     LNG  1<0:17>    Length of TEXT.
     CP   1<18:35>   Current position in text (= POS-1)

     Text record:
                             ---------------------
                     0       [     Overhead      ]
                             ----------+----------
                     1       [   CLN   I   LEN   ]
                             ----------+----------
                     2       [    Characters     ]
                             .    of text        .
                             [                   ]
                             ---------------------

     Overhead        One word with information and workspace for
                     the garbage collector.
     CLN  1<0:17>    Number of characters in text as given in
                     parameter to BLANKS or COPY.
     LEN  1<18:35>   The length of the record in words
DECsystem-10 SIMULA Language Handbook, part II            Page 93
APPENDIX B   INTERNAL REPRESENTATION


     ARRAY
     -----

     One word.  Left halfword is zero.  Right halfword points to
     an array record.

     Array record:
                             ---------------------------------
                     0       [           Overhead            ]
                             ----------------+----------------
                     1       [               I      LEN      ]
                             ----------------+----------------
                     2       [              BAD              ]
                             --------+-------+----------------
                     3       [  TYP  I  SUB  I      ZPR      ]
                             --------+-------+----------------
                     4       [             LOW(1)            ]
                             ---------------------------------
                     5       [             UPP(1)            ]
                             .                               .
                     2n+2    [             LOW(n)            ]
                             ---------------------------------
                     2n+3    [             UPP(n)            ]
                             ---------------------------------
                     2n+4    [             DOP(2)            ]
                             .                               .
                     3n+2    [             DOP(n)            ]
                             ---------------------------------
                     3n+3    [                               ]
                             .       Array  elements         .
                             [                               ]
                             ---------------------------------

     Overhead        One word with information and workspace for
                     the garbage collector.
     LEN  1<18:35>   Total length of array record.
     BAD  2<0:35>    Address of the (possibly fictive) array
                     element with all subscripts zero.
     TYP  3<0:8>     Type of the elements in the array.
     SUB  3<9:17>    Number of subscripts.
     ZPR  3<18:35>   Qualification prototype pointer if REF
                     array.
     LOW[1:SUB]      Lower subscript bounds.
     UPP[1:SUB]      Upper subscript bounds.
     DOP[2:SUB]      Dope vector.
DECsystem-10 SIMULA Language Handbook, part II            Page 94
APPENDIX B   INTERNAL REPRESENTATION


B.2  REPRESENTATION OF DYNAMIC ADDRESSES


     DYNAMIC ADDRESS OF VALUE TYPE VARIABLE

                             ----------------+----------------
                             [      OFS      I      ZBI      ]
                             ----------------+----------------

             OFS     Offset of variable in block instance.
             ZBI     Block instance address.


     DYNAMIC ADDRESS OF SWITCH

                             ----------------+----------------
                             [      ZSR      I      ZBI      ]
                             ----------------+----------------

             ZSR     Switch record address.
             ZBI     Block instance address (static environment).


     DYNAMIC ADDRESS OF LABEL

                             ----------------+----------------
                             [      CAD      I      ZBI      ]
                             ----------------+----------------
                             [      EBL      I      BNM      ]
                             ----------------+----------------

             CAD     Code address.
             ZBI     Block instance address.
             EBL     Effective block level.
             BNM     State (block number).


     DYNAMIC ADDRESS OF ARRAY

                             ---------------------------------
                             [              ZAR              ]
                             ---------------------------------

             ZAR     Address of array record.
DECsystem-10 SIMULA Language Handbook, part II            Page 95
APPENDIX B   INTERNAL REPRESENTATION


     DYNAMIC ADDRESS OF REF ARRAY

                             ---------------------------------
                             [              ZAR              ]
                             ---------------------------------
                             [              ZPR              ]
                             ---------------------------------

             ZAR     Address of array record.
             ZPR     Qualification prototype address.


     DYNAMIC ADDRESS OF REF VARIABLE

                             ----------------+----------------
                             [      OFS      I      ZBI      ]
                             ----------------+----------------
                             [              ZPR              ]
                             ---------------------------------

             OFS     Offset in block instance.
             ZBI     Block instance
             ZPR     Qualification prototype address.


     DYNAMIC ADDRESS OF PROCEDURE

                             ----------------+----------------
                             [      ZPR      I      ZBI      ]
                             ----------------+----------------
                             [               I      EBI      ]
                             ----------------+----------------

             ZPR     Procedure prototype address.
             ZBI     Enclosing "complete" block (with display).
             EBI     Innermost enclosing block.
DECsystem-10 SIMULA Language Handbook, part II            Page 96
APPENDIX B   INTERNAL REPRESENTATION


B.3  REPRESENTATION OF PARAMETERS


     VALUE TYPE (integer, (long)real, boolean or character)
     CALLED BY VALUE.
     OBJECT REF CALLED BY REFERENCE.
     TEXT OR ANY TYPE OF ARRAY CALLED BY VALUE OR REFERENCE.

     They have the same representation as the corresponding
     variables.


     LABEL,SWITCH AND PROCEDURE CALLED BY REFERENCE

     They are represented by their dynamic addresses.


     ALL PARAMETERS CALLED BY NAME

     Parameters called by name are represented by a double-word
     descriptor with the following fields:

     NTH  0<0>       This field is =1 if no thunk exists, i.e.
                     if all information about the actual
                     parameter is contained in the descriptor.
     ATP  0<1:5>     Type code for actual parameter.
     DTP  0<6:8>     Type of descriptor and thunk.
                     VALUE   EXPLANATION
                     0   Actual parameter is a simple variable.
                         Its address is obtained by adding ZBI
                         and ADR.
                     1   Not used.
                     2   Not used.
                     3   The thunk will yield a dynamic address.
                     4   ADR is the address of a constant actual
                         parameter.
                     5   Not used.
                     6   Not used.
                     7   The thunk yields the value of an
                         expression.
     AKD  0<9:11>    Gives the kind of the actual parameter.
     CNV  0<13>      Set to 1 if parameter conversion is
                     necessary.  i.e.  the type of the formal
                     parameter and the actual parameter are not
                     the same.
     FTP  0<14;17>   Type code for formal parameter.
DECsystem-10 SIMULA Language Handbook, part II            Page 97
APPENDIX B   INTERNAL REPRESENTATION


     ZBI  0<18:35>   Address of block instance where actual
                     parameter exists or address of nearest block
                     instance (with display) to be used when
                     evaluating the thunk.
     ZQU  1<0:17>    Qualifying prototype for actual parameter of
                     type REF.
     ADR  1<18:35>   If NTH is zero this is the address of the
                     thunk.  Otherwise the interpretation of this
                     field depends on the value of DTP as
                     follows:
                     DTP=0   Offset of variable in its block.
                     DTP=4   Address of a constant.




B.4  DYNAMIC RECORDS


     DISPLAY RECORD

                             ---------------------------------
                             [           Overhead            ]
                             ----------------+----------------
                     -n-2    [      ZAC      I      LEN      ]
                             ---------------------------------
                     -n-1    [            ZPB(n)             ]
                             .                               .
                     -2      [            ZPB(1)             ]
                             ----------------+----------------
                     -1      [      ZBI      I      ARE      ]
                             ----------------+----------------

             Overhead One word with information and workspace for
                     the garbage collector.
             ZAC     Pointer to an accumulator stack record if
                     present.
             LEN     Length of the display record.
             ZPB[1:n] Display vector
             ZBI     Normally the block instance which was active
                     when this display record was created.
             ARE     Reactivation address of the block to which
                     this display belongs.
DECsystem-10 SIMULA Language Handbook, part II            Page 98
APPENDIX B   INTERNAL REPRESENTATION


     BLOCK INSTANCE HEADER

                             ---------------------------------
                     0       [           Overhead            ]
                             ----------------+----------------
                     1       [      BNM      I      ZPR      ]
                             ----------------+----------------

             Overhead One word with information and workspace for
                     the garbage collector.
             BNM     State of block instance (i.e.  the number of
                     the subblock currently active).
             ZPR     Prototype address


     UNREDUCED SUBBLOCK RECORD

                             ---------------------------------
                     0       [                               ]
                             .     block instance header     .
                     1       [                               ]
                             ---------------------------------
                     2       [                               ]
                             .     variables in subblock     .
                             [                               ]
                             ---------------------------------
     PROCEDURE INSTANCE

                             ---------------------------------
                             [                               ]
                             .       display record          .
                     -1      [                               ]
                             ---------------------------------
                     0       [                               ]
                             .     block instance header     .
                     1       [                               ]
                             ---------------------------------
                     2       [                               ]
                             .      formal parameters        .
                             [                               ]
                             ---------------------------------
                             [                               ]
                             .    variables of procedure     .
                             [                               ]
                             ---------------------------------
DECsystem-10 SIMULA Language Handbook, part II            Page 99
APPENDIX B   INTERNAL REPRESENTATION


     FUNCTION DESIGNATOR INSTANCE

                             ---------------------------------
                             [                               ]
                             .        display record         .
                     -1      [                               ]
                             ---------------------------------
                     0       [                               ]
                             .     block instance header     .
                     1       [                               ]
                             ---------------------------------
                     2       [       value of function       ]
                             .                               .
                             [       formal parameters       ]
                             ---------------------------------
                             [                               ]
                             .     variables of function     .
                             [                               ]
                             ---------------------------------


     CLASS INSTANCE

                             ---------------------------------
                             [                               ]
                             .         display record        .
                     -1      [                               ]
                             ---------------------------------
                     0       [                               ]
                             .     block instance header     .
                     1       [                               ]
                             ---------------------------------
                     2       [                               ]
                             .       formal parameters       .
                             [                               ]
                             ---------------------------------
                             [                               ]
                             .          attributes           .
                             [                               ]
                             ---------------------------------
DECsystem-10 SIMULA Language Handbook, part II           Page 100
APPENDIX B   INTERNAL REPRESENTATION


     SUBCLASS INSTANCE

                             ---------------------------------
                             [                               ]
                             .     prefix class instance     .
                             [                               ]
                             ---------------------------------
                             [                               ]
                             .       formal parameters       .
                             [                               ]
                             ---------------------------------
                             [                               ]
                             .           attributes          .
                             [                               ]
                             ---------------------------------


     PREFIX BLOCK INSTANCE

                             ---------------------------------
                             [                               ]
                             .     prefix class instance     .
                             [                               ]
                             ---------------------------------
                             [                               ]
                             .      variables of block       .
                             [                               ]
                             ---------------------------------



     EVENTNOTICE RECORD

                             ---------------------------------
                     0       [           Overhead            ]
                             ----------------+----------------
                     1       [               I       LEN     ]
                             ----------------+----------------
                     2       [       ZEV     I       ZER     ]
                             ----------------+----------------
                             [                               ]
                             .       Eventnotices            .
                             [                               ]
                             ---------------------------------

             Overhead One word with information and workspace for
                     the garbage collector.
             LEN     Length of the eventnotice rcord.
             ZEV     Eventnotice free chain start.
             ZER     Chain of eventnotice records.
DECsystem-10 SIMULA Language Handbook, part II           Page 101
APPENDIX B   INTERNAL REPRESENTATION


     EVENTNOTICE

                             ----------------+----------------
                     0       [       ZBL     I       ZPS     ]
                             ----------------+----------------
                     1       [       ZLL     I       ZRL     ]
                             ----------------+----------------
                     2       [       ZER     I       ZCH     ]
                             ----------------+----------------
                     3       [              TIM              ]
                             ---------------------------------

             ZBL     Backward link.
             ZPS     Process pointer.
             ZLL     Left link.
             ZRL     Right link.
             ZER     Base pointer (enclosing eventnotice record).
             ZCH     Free list pointer.
             TIM     Scheduled time.



     SIMULATION BLOCK

                             ---------------------------------
                     0       [                               ]
                             .       block instance header   .
                     1       [                               ]
                             ----------------+----------------
                     2       [       FT      I       LT      ]
                             ----------------+----------------
                     3       [       LNK     I       ZER     ]
                             ----------------+----------------
                     4       [              ZPS              ]
                             ---------------------------------

             FT      First eventnotice in SQS.
             LT      Last eventnotice in SQS and root of binary
                     tree.
             LNK     Chain of simulation blocks.  Used by garbage
                     collector.
             ZER     Chain of eventnotice records.
             ZPS     Ref(PROCESS) main program.
DECsystem-10 SIMULA Language Handbook, part II           Page 102
APPENDIX B   INTERNAL REPRESENTATION


     LINKAGE

                             ---------------------------------
                     0       [                               ]
                             .       block instance header   .
                     1       [                               ]
                             ----------------+----------------
                     2       [       SUC     I       PRE     ]
                             ----------------+----------------

             SUC     SUC link.
             PRE     PRED link.



     PROCESS

                             ---------------------------------
                     0       [                               ]
                             .            linkage            .
                     2       [                               ]
                             ---------------------------------
                     3       [              ZEV              ]
                             ---------------------------------

             ZEV     Eventnotice pointer.



     ORDER OF PARAMETERS

     The parameters will appear in the same order as they are
     named in the source program.


     ORDER OF ATTRIBUTES AND VARIABLES

     The attributes and variables are divided into three groups.
     In the first group are all which do not belong to another
     group.  In the second group are all of type TEXT and kind
     simple.  In the third group are all of type REF or kind
     ARRAY.  Within each group the attributes and variables have
     the same order as they are declared in the source program.  
DECsystem-10 SIMULA Language Handbook, part II           Page 103
APPENDIX C COMPILER DIAGNOSTICS


APPENDIX C  COMPILER DIAGNOSTICS
================================



     This appendix is divided into two sections.  The first
     section covers the diagnostic messages associated with
     commands and switches.  These messages are unnumbered.

     The second section contains all source code messages
     produced by the compiler.




C.1  COMMAND AND SWITCH MESSAGES




?= OR _ MISSING IN COMMAND

     EXPLANATION:  Equal sign or left arrow (=underline) is
     mandatory in all commands unless the command consists of
     only one source file descriptor.


?CAN'T OPEN DISK

     EXPLANATION:  OPEN failure when trying to open a disk
     device.

     COMPILER ACTION:  The compiler prints an asterisk and waits
     for next command.


?COMMAND LINE EXCEEDS 135 CHARACTERS

     EXPLANATION:  Overflow in the internal command line buffer.

     COMPILER ACTION:  The input buffer is cleared, i.e.  all
     type ahead input is deleted.  The compiler prints an
     asterisk and waits for next command.
DECsystem-10 SIMULA Language Handbook, part II           Page 104
APPENDIX C COMPILER DIAGNOSTICS


COLON AFTER -E OR nE NOT ALLOWED.  LIST IGNORED

     COMPILER ACTION:  Switch is processed as /-E or /nE.


COLON AFTER SWITCH switch NOT SUCCEEDED BY QUOTE.  COLON IGNORED.

     COMPILER ACTION:  The switch is processed as if no colon was
     present.


?COMMA MISSING IN PPN

     USER ACTION:  Retype the command.


EXTERNAL SWITCH ALREADY SPECIFIED.  IGNORED

     EXPLANATION:  EXTERNAL switch can only be specified once for
     each compilation.


FINAL QUOTE IN TEXT CONSTANT MISSING.  QUOTE ASSUMED

     EXPLANATION:  Text constant after colon must be enclosed in
     quotes.


?HELP FILE NOT FOUND

     COMPILER ACTION:  HELP switch ignored.


?ILLEGAL DELIMITER "byte" IN COMMAND

     EXPLANATION:  Legal file specification delimiters are comma,
     equal sign, left arrow, space, tab and carriage return.

     USER ACTION:  Retype command.


INCOMPLETE EXTERNAL LIST

     EXPLANATION:  Not valid EXTERNAL list format.  See Chapter
     3.5.
DECsystem-10 SIMULA Language Handbook, part II           Page 105
APPENDIX C COMPILER DIAGNOSTICS


?INVALID DEVICE.  ONLY DSK ALLOWED

     EXPLANATION:  Device in command can only be disk or a
     logical name assigned to disk.

     USER ACTION:  Retype command.


KEYWORD (NO)CHECK EXPECTED AFTER CODE IN EXTERNAL LIST.  LIST
     IGNORED

     EXPLANATION:  CHECK, NOCHECK or -CHECK is expected after
     CODE in EXTERNAL list.

     COMPILER ACTION:  Switch is processed as /E.


KEYWORD FORTRAN, F40 OR CODE EXPECTED AFTER :  IN EXTERNAL LIST.
     LIST IGNORED

     COMPILER ACTION:  Switch is processed as /E.


?LOOKUP ERROR ON COMMAND FILE

     EXPLANATION:  Command file from COMPILE not found.

     COMPILER ACTION:  The compiler prints an asterisk and waits
     for next command.


MINUS NOT VALID BEFORE switch.  MINUS IGNORED

     EXPLANATION:  Minus is not excepted before HELP and PAGE.


MISSPELLED SWITCH:  switch.  FIRST LETTER USED

     EXPLANATION:  First letter of switch matches existing switch
     name but not rest of switch.

     COMPILER ACTION:  The misspelling is ignored and the switch
     is processed according to the first letter.


?MORE THAN 6 DIGITS IN PPN

     USER ACTION:  Retype the command.
DECsystem-10 SIMULA Language Handbook, part II           Page 106
APPENDIX C COMPILER DIAGNOSTICS


UNRECOGNIZABLE SWITCH:  switch.  SWITCH IGNORED

     EXPLANATION:  First letter of switch name does not match any
     legal switch.


NUMBER BEFORE switch NOT VALID.  NUMBER IGNORED

     EXPLANATION:  Decimal number may only precede EXTERNAL AND
     PAGE.


NUMBER NOT VALID WITH MINUS IN switch.  NUMBER IGNORED

     EXPLANATION:  Number is not valid after minus sign in any
     switch.


?READ ERROR ON COMMAND FILE

     EXPLANATION:  Read error occurred when reading the command
     file from COMPIL.

     COMPILER ACTION:  The compiler types an asterisk and waits
     for next command from the user (see chapter 3.2).


READ ERROR ON HELP FILE

     COMPILER ACTION:  The rest of the help message is lost.  The
     compiler continues command processing.


?RIGHT PARENTHESIS MISSING AFTER SWITCH(ES)

     EXPLANATION:  Switches from the COMPIL CUSP must be enclosed
     in parentheses.

     USER ACTION:  Retype the command.


?RIGHT SQUARE BRACKET MISSING IN PPN

     USER ACTION:  Retype the command.
DECsystem-10 SIMULA Language Handbook, part II           Page 107
APPENDIX C COMPILER DIAGNOSTICS


SWITCH switch NOT VALID AFTER PROGRAM START.  SWITCH IGNORED

     EXPLANATION:  See chapter 3.5.


?SWITCH WITHOUT FILE SPEC.  SWITCH IGNORED.

     EXPLANATION:  All switches except HELP must be preceded by a
     file specification.

     USER ACTION:  Type a new command.


TEXT CONSTANT AFTER -R NOT ALLOWED.  TEXT CONSTANT IGNORED.

     COMPILER ACTION:  Switch processed as /-R.


WARNING:  NO SWITCH NAME

     EXPLANATION:  Slash is not followed by a switch name.

     COMPILER ACTION:  Slash ignored.



C.2  COMPILER SOURCE CODE DIAGNOSTICS


All compiler messages are numbered SIMnnn X, where nnn is an
identification number and X indicates type of error:

E  indicates error, generated code may or may not be executable
W  indicates warning, generated code is executable
T  indicates termination error, no relfil is generated

If a terminating error occurs, the list file may not be
generated.


The message is printed on the user's TTY and in the source
listing after the faulty line.  If the faulty statement covers
more than one line, the message is written after the last line.
The line number given in the message points at the start of the
faulty statement.


COMPILER SOURCE CODE DIAGNOSTICS:
DECsystem-10 SIMULA Language Handbook, part II           Page 108
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM001 W MINUS NOT VALID IN AAAA , MINUS IGNORED

         EXPLANATION:  AAAA is a switch name.  Minus may not
         precede PAGE or HELP.


SIM002 W COLON AFTER AAAA NOT SUCCEEDED BY QUOTE, TEXT CONSTANT
         IGNORED

         EXPLANATION:  AAAA is a switch name.  A text constant
         after colon must be enclosed in quotes.


SIM003 W END QUOTE MISSING IN TEXT CONSTANT, QUOTE ASSUMED

         EXPLANATION:  A text constant argument to a switch must
         be enclosed in quotes.


SIM004 W COLON AFTER AAAA NOT ALLOWED IN COMMAND, CONSTANT
         IGNORED

         EXPLANATION:  AAAA is a switch name.  Colon indicates a
         switch argument and is only allowed for EXTERNAL, PAGE
         and RUNSWITCHES.


SIM005 W HELP NOT VALID IN OPTIONS STATEMENT, IGNORED

         EXPLANATION:  HELP switch is always ignored in OPTIONS.


SIM006 W NUMBER IN AAAA NOT VALID, NUMBER IGNORED

         EXPLANATION:  AAAA is a switch name.  Number is allowed
         only before EXTERNAL and PAGE.


SIM007 W NOT RECOGNIZABLE SWITCH AAAA , SWITCH IGNORED

         EXPLANATION:  AAAA is a switch name.  First letter of
         switch did not match the beginning of any legal switch.


SIM010 W SWITCH:  AAAA MISSPELLED.

         EXPLANATION:  AAAA is a switch name.

         COMPILER ACTION:  Switch is processed according to first
         letter.
DECsystem-10 SIMULA Language Handbook, part II           Page 109
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM011 W SWITCH AAAA NOT VALID AFTER PROGRAM START, SWITCH
         IGNORED

         EXPLANATION:  AAAA is a switch name.  See chapter 3.5.


SIM012 W NUMBER NOT VALID WITH MINUS IN AAAA , NUMBER IGNORED

         EXPLANATION:  AAAA is a switch name.


SIM013 W EXTERNAL SWITCH ALREADY SPECIFIED, IGNORED

         EXPLANATION:  EXTERNAL can only be specified once in
         each compilation.


SIM014 W CHECK EXPECTED AFTER AAAA IN EXTERNAL LIST, LIST IGNORED

         EXPLANATION:  AAAA is a keyword, CODE or FORTRAN.

         COMPILER ACTION:  Switch is processed as /E.


SIM015 W EXTERNAL LIST INCOMPLETE

         EXPLANATION:  Illegal EXTERNAL list format.  See chapter
         3.5.


SIM016 W FORTRAN, F40 OR CODE EXPECTED AFTER :  IN EXTERNAL, LIST
         IGNORED

         COMPILER ACTION:  Switch is processed as /E.


SIM017 W COLON AFTER -E NOT ALLOWED, LIST IGNORED

         COMPILER ACTION:  Switch is processed as /-E or /nE.


SIM020 W TEXT CONSTANT AFTER -R NOT ALLOWED, TEXT CONSTANT
         IGNORED

         COMPILER ACTION:  Switch is processed as /-R.
DECsystem-10 SIMULA Language Handbook, part II           Page 110
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM021 W INVALID DEVICE IN R-SWITCH, ONLY DSK ALLOWED

         EXPLANATION:  File specification in R-switch must have a
         DSK device.

         COMPILER ACTION:  Switch ignored.

         USER ACTION:  Change device to DSK, or, if a logical
         name is used, assign this name to DSK.


SIM022 W COMMA MISSING IN R-SWITCH

         EXPLANATION:  PPN in file specification in R-switch must
         contain comma.

         COMPILER ACTION:  Switch ignored.

         USER ACTION:  Correct PPN and re-compile.


SIM023 W RIGHT SQUARE BRACKET MISSING IN R-SWITCH

         EXPLANATION:  PPN in file specification must always be
         terminated with right square bracket ].

         USER ACTION:  Correct PPN and re-compile.


SIM024 W MORE THAN SIX DIGITS IN PPN

         EXPLANATION:  PPN in file specification in R-switch
         contains more than 6 digits.

         COMPILER ACTION:  Switch ignored.

         USER ACTION:  Correct PPN and re-compile.


SIM031 W COMPILER HAS RENUMBERED LINE AAAA

         EXPLANATION:  AAAA = line number.

         COMPILER ACTION:  The line number is replaced by
         previous line number + 1 in the source code listing.

         USER ACTION:  Resequence the line numbers in the source
         file.  If you are using the SOS text editor, use the NP
         command to get consecutive line numbers throughout the
         file.  See also appendix K.2 (for SOS or EDITS) or K.3
         (for TECO).
DECsystem-10 SIMULA Language Handbook, part II           Page 111
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM032 W LINE NUMBER EXCEEDS 65534

         EXPLANATION:  Line numbers exceeding 65534 will not
         affect the compilation, but later run-time errors will
         not indicate the correct line.  These line numbers
         cannot be used for debugging with SIMDDT.

         USER ACTION:  Alternative 1:  Resequence the source file
         with smaller line number increment.  See appendix K.2 or
         K.3.
         Alternative 2:  Divide large SIMULA source program file
         into separately compiled modules.  See chapter 4 of part
         I of the DECsystem-10 SIMULA Language Handbook.


SIM034 W OVERFLOW, INTEGER CONVERTED TO REAL

         EXPLANATION:  Integer constant larger than 2^35-1.


SIM035 W YOU MAY HAVE FORGOTTEN ;  AFTER END

         EXPLANATION:  One of the basic symbols:
              := :- ( GOTO
         has been found in an end comment.  The comment is
         terminated by:
              ;  END ELSE WHEN or OTHERWISE

         USER ACTION:  If error, correct it, if not, insert
         COMMENT after END.


SIM036 W END OF LINE IN TEXT CONSTANT

         EXPLANATION:  One of the characters LF CR FF or VT has
         been found in a text constant.

         COMPILER ACTION:  The character is skipped and not moved
         to the generated program.


SIM037 W PAGE STRING MISSING AFTER :  IN OPTIONS

         COMPILER ACTION:  The input is skipped until / or ;  is
         found.
DECsystem-10 SIMULA Language Handbook, part II           Page 112
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM040 W PAGE STRING LONGER THAN 60 CHARACTERS

         EXPLANATION:  The maximum number of characters in a page
         switch string is 60.

         COMPILER ACTION:  The input is skipped until the next "
         or until a new line is found.


SIM041 W INVALID CHARACTER, AAAA EXPECTED IN OPTIONS

         EXPLANATION:  The invalid character and the character
         which is expected are edited into the message.  One of
         the characters ( / ) ;  is expected.

         COMPILER ACTION:  The input is skipped until the next /
         ( ) or ;  is found.


SIM042 W SWITCH MISSING IN OPTIONS STATEMENT

         EXPLANATION:  No switch was found in an OPTIONS
         statement.


SIM043 W END OF FILE IN OPTIONS STATEMENT



SIM044 W CHARACTER AFTER TEST NOT VALID

         EXPLANATION:  This message should not occur.  The test
         version of the compiler accepts ^^ as a control
         character which directs debug output.  The characters
         after ^^ are not valid and 0 is assumed.


SIM051 W ILLEGAL END OF PROGRAM

         EXPLANATION:  Program continues after last end.

         USER ACTION:  Check block structure.


SIM052 W ILLEGAL SWITCH SETTING
DECsystem-10 SIMULA Language Handbook, part II           Page 113
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM053 W SHORT NOT FOLLOWED BY INTEGER

         COMPILER ACTION:  Treated as INTEGER.


SIM054 W LONG NOT FOLLOWED BY REAL

         COMPILER ACTION:  Treated as REAL.


SIM055 W LEFT BRACKET IN EXPRESSION



SIM056 W % AT START OF LINE, LINE IGNORED

         EXPLANATION:  Line starting with % may contain compiler
         directives in other SIMULA systems.

         COMPILER ACTION:  Line is treated as a comment.

         USER ACTION:  Delete the line or translate to OPTIONS
         statement.


SIM061 E TOO LONG LINE

         EXPLANATION:  A source code line must not exceed 135
         characters including possible nulls.

         COMPILER ACTION:  The line is truncated to 135
         characters and compiled as if it were terminated with
         carriage return and line feed.


SIM063 E = MUST FOLLOW =/

         COMPILER ACTION:  =/= assumed.


SIM064 E NONPRINTABLE CHARACTER

         COMPILER ACTION:  The character is ignored.

         USER ACTION:  Check the source input program.  
DECsystem-10 SIMULA Language Handbook, part II           Page 114
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM065 E ILLEGAL CHARACTER AAAA

         EXPLANATION:  AAAA is the illegal character.

         COMPILER ACTION:  The character is treated as a blank.


SIM066 E GO NOT FOLLOWED BY TO

         COMPILER ACTION:  The single GO is treated as GO TO.


SIM067 E GO MISSING BEFORE TO

         COMPILER ACTION:  The TO is ignored.


SIM070 E EOF IN COMMENT

         EXPLANATION:  The ;  which closes the comment is not
         found before the end of the input file is found.


SIM071 E EOF IN TEXT CONSTANT

         EXPLANATION:  The " which closes the text constant is
         not found before the end of the input file is found.

         COMPILER ACTION:  Valid program parts are taken as part
         of the text constant if the " was forgotten.


SIM072 E CHARACTER QUOTE MISSING

         COMPILER ACTION:  The incomplete character constant is
         treated as a valid one.


SIM073 E CONTROL CHARACTER IN CHARACTER CONSTANT

         EXPLANATION:  The TAB character (HT) and the line
         control characters LF, FF, VT and CR are not accepted as
         character constants.  Non-printable characters, e.g.
         altmode, are not accepted either, see SIM064.

         COMPILER ACTION:  The character is treated as a blank.

         USER ACTION:  Use the built-in procedure CHAR.
DECsystem-10 SIMULA Language Handbook, part II           Page 115
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM074 E TAB IN TEXT CONSTANT

         EXPLANATION:  The horisontal tab character is not
         accepted in a text constant.

         COMPILER ACTION:  The tab is treated as a blank
         character.

         USER ACTION:  Use PUTCHAR(CHAR(9));.


SIM075 E TEXT CONSTANT LONGER THAN 2**15



SIM076 E MORE THAN ONE DECIMAL POINT

         COMPILER ACTION:  Extra decimal points in the real
         constant are ignored.


SIM077 E DIGIT MISSING AFTER DECIMAL POINT

         COMPILER ACTION:  A zero is assumed to follow the
         decimal point in the real constant.


SIM100 E NO DIGITS IN EXPONENT

         COMPILER ACTION:  The exponent is ignored.


SIM101 E FLOATING OVERFLOW

         COMPILER ACTION:  The maximal real constant,
         approximately 1.7&38, see A.6.1, is used instead.


SIM102 E FLOATING UNDERFLOW

         COMPILER ACTION:  The real constant 0 is used.


SIM103 E INTEGER OVERFLOW IN RADIX CONSTANT

         COMPILER ACTION:  The integer constant 8R377777777777 is
         used.
DECsystem-10 SIMULA Language Handbook, part II           Page 116
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM104 E DIGITS MISSING IN RADIX NUMBER

         EXPLANATION:  There are no digits (0-9 or A-F) after R
         in a radix constant.

         COMPILER ACTION:  The base is used as integer constant.


SIM105 E DIGIT AAAA NOT LESS THAN RADIX BASE

         EXPLANATION:  AAAA is the digit (0-9 or A-F) which is
         greater than the radix base.

         COMPILER ACTION:  The rest of the number is ignored.


SIM110 E ILLEGAL START OF PROGRAM

         COMPILER ACTION:  Scan until program start is found.


SIM111 E XXXX IS MISPLACED

         EXPLANATION:  XXXX = misplaced entity.

         COMPILER ACTION:  Skip rest of statement or declaration.


SIM112 E DECLARATION MUST BE FOLLOWED BY ;

         COMPILER ACTION:  ;  assumed.


SIM113 E MISSING END

         COMPILER ACTION:  An extra END is assumed.


SIM114 E XXXX IS ILLEGAL CLASS PREFIX

         EXPLANATION:  XXXX = prefix.

         COMPILER ACTION:  The class is treated as unprefixed.


SIM115 E XXXX SPECIFICATION MUST PRECEDE TYPE SPECIFICATION

         EXPLANATION:  XXXX = value or name.

         COMPILER ACTION:  Specification ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 117
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


         USER ACTION:  Reorder specifications.


SIM116 E ILLEGAL CLASS SPECIFICATION



SIM117 E VIRTUAL MUST BE FOLLOWED BY :

         COMPILER ACTION:  :  is assumed.


SIM120 E ILLEGAL VIRTUAL SPECIFICATION

         COMPILER ACTION:  Specification ignored.


SIM121 E MISSING ;  AFTER INNER

         COMPILER ACTION:  ;  is assumed.


SIM122 E XXXX IS ILLEGAL CLASS/PROCEDURE NAME

         EXPLANATION:  XXXX = CLASS/PROCEDURE name.

         USER ACTION:  Check that name is not a reserved word.
         (See appendix G).


SIM123 E ILLEGAL VIRTUAL TYPE

         COMPILER ACTION:  Specification ignored.


SIM124 E MISSING IDENTIFIER LIST

         EXPLANATION:  No identifier follows <type>.


SIM125 E ERRONEOUS SWITCH DECLARATION

         COMPILER ACTION:  Declaration ignored.


SIM126 E ILLEGAL REFERENCE TYPE

         EXPLANATION:  Syntax should be:
         REF(<CLASS-identifier>).

         COMPILER ACTION:  Declaration or specification ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 118
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM127 E MORE THAN 10 DIMENSIONS



SIM130 E MISSING XXXX

         EXPLANATION:  XXXX = right parenthesis/bracket.

         COMPILER ACTION:  Missing symbol is assumed.


SIM131 E HOMELESS XXXX PART

         EXPLANATION:  XXXX = ELSE/WHEN/OTHERWISE.

         COMPILER ACTION:  Statement ignored.


SIM132 E STATEMENT BEFORE BEGIN NOT TERMINATED

         COMPILER ACTION:  ;  assumed before BEGIN.


SIM133 E CANNOT FIND THEN IN IF-STATEMENT

         COMPILER ACTION:  statement skipped.


SIM134 E IF-STATEMENT CANNOT BE PLACED DIRECTLY AFTER THEN

         COMPILER ACTION:  Enclose statement by BEGIN-END.

         USER ACTION:  Do the same.


SIM135 E FOR-, INSPECT- or WHILE-STATEMENT CANNOT BE PLACED
         BETWEEN THEN AND ELSE

         COMPILER ACTION:  Enclose statement by BEGIN-END.

         USER ACTION:  Do the same.


SIM136 E INNER ILLEGALLY PLACED

         EXPLANATION:  1) INNER is not placed at the outermost
         block level in a class body.
         2) Several INNER statements occur in the same class
         body.
         3) INNER is preceded by something different from BEGIN
         or semicolon (;).  According to the syntax ([1] Sect
DECsystem-10 SIMULA Language Handbook, part II           Page 119
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


         2.1, [3] Sect 5.5), these are the only symbols which can
         directly precede INNER (except for comments).

         COMPILER ACTION:  This INNER is skipped.


SIM137 E DECLARATION FOUND WHERE STATEMENT WAS EXPECTED

         USER ACTION:  Check that this is not caused by an error
         in a previous declaration.  This error may also be
         caused by a missing END earlier in the program.  (Use
         SIMED - see App.  L - to check the BEGIN-END nesting).


SIM140 E MISSING FOR-LIST



SIM141 E MISSING DO IN FOR-STATEMENT

         COMPILER ACTION:  Statement ignored.


SIM142 E ILLEGAL CONTROLLING VARIABLE

         EXPLANATION:  The controlling variable may not be of
         type TEXT, a remote or subscripted variable, or a
         function identifier.

         COMPILER ACTION:  Statement ignored.


SIM143 E MISSING CONNECTION BLOCK

         COMPILER ACTION:  Statement ignored.


SIM144 E ILLEGAL WHEN-CLAUSE

         EXPLANATION:  The syntax is:  WHEN <CLASS-identifier> DO

         COMPILER ACTION:  Clause is ignored.


SIM145 E MISSING DO IN WHILE-STATEMENT

         COMPILER ACTION:  Statement ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 120
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM146 E CANNOT FIND UNTIL

         COMPILER ACTION:  FOR list element skipped.


SIM147 E XXXX MISSING IN CONDITIONAL EXPRESSION

         EXPLANATION:  XXXX = THEN/ELSE.


SIM150 E NOCHECK PROCEDURES MUST NOT HAVE ANY EXPLICIT FORMAL
         PARAMETERS



SIM151 E MISSING IDENTIFIER AFTER XXXX

         EXPLANATION:  XXXX = NEW/THIS/ . /QUA.


SIM152 E CONDITIONAL EXPRESSION IS NOT ENCLOSED BY PARENTHESES

         COMPILER ACTION:  Parentheses assumed.


SIM153 E MISSING OPERAND



SIM154 E MISSING BINARY OPERATOR

         COMPILER ACTION:  Skip second operand.

         EXPLANATION:  Could be missing ;.


SIM155 E ILLEGAL EXTERNAL ITEM

         EXPLANATION:  Only CLASSes or PROCEDUREs may be
         external.


SIM156 E ERROR IN EXTERNAL ITEM
DECsystem-10 SIMULA Language Handbook, part II           Page 121
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM157 E BLOCK STACK OVERFLOW

         EXPLANATION:  Too deep nesting of blocks, PROCEDUREs,
         CLASSes and connections.

         USER ACTION:  Restructure program, for example by using
         recursive procedures instead of blocks within blocks.


SIM160 E XXXX PREVIOUSLY SPECIFIED

         EXPLANATION:  XXXX = identifier.

         COMPILER ACTION:  Specification ignored.


SIM161 E XXXX SPECIFIED BUT IS NOT FORMAL PARAMETER

         EXPLANATION:  XXXX = identifier.


SIM162 E FORMAL PARAMETER XXXX NOT SPECIFIED

         EXPLANATION:  XXXX = identifier.

         COMPILER ACTION:  Mode of formal is set to default.


SIM163 E FORMAL PARAMETER XXXX ILLEGALLY SPECIFIED

         EXPLANATION:  XXXX = identifier.


SIM164 E XXXX HAS MORE THAN 255 FORMAL PARAMETERS

         EXPLANATION:  XXXX = identifier.


SIM165 E XXXX HAS MORE THAN 255 VIRTUALS

         EXPLANATION:  XXXX = identifier.


SIM166 E TOO LARGE BLOCK LENGTH

         EXPLANATION:  See Chapter 6.1
DECsystem-10 SIMULA Language Handbook, part II           Page 122
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM167 E TOO MANY REDUCED SUBBLOCKS

         EXPLANATION:  See Chapter 6.1

         USER ACTION:  Divide large block at program, CLASS or
         PROCEDURE block level.


SIM170 E EXTERNAL MUST BE COPIED INTO MAIN

         EXPLANATION:  External declarations must not precede a
         main program.


SIM171 E EXTERNAL MUST NOT BE COPIED INDIRECTLY

         EXPLANATION:  This external declaration must precede the
         start of an external CLASS or PROCEDURE.


SIM172 E EXTERNAL MUST NOT BE ATTRIBUTE



SIM173 E XXXX HAS ILLEGAL FORTRAN SPECIFICATION



SIM174 E PPN IN EXTERNAL IDENTIFIER NOT OCTAL DIGIT



SIM175 E PPN IN EXTERNAL IDENTIFIER MORE THAN SIX DIGITS



SIM176 E CONFLICT BETWEEN SPECIFICATIONS

         EXPLANATION:  In the protection part there exists
         specification both with and without NOT.

         USER ACTION:  Change the specifications so that they
         have the same form.

         COMPILER ACTION:  The last specification is skipped.
DECsystem-10 SIMULA Language Handbook, part II           Page 123
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM177 E ENTRY NAME CONFLICT BETWEEN EXTERNALS XXXX AND XXXX

         EXPLANATION:  The externals have unfortunately been
         assigned the same entry point name by the compiler.

         USER ACTION:  Re-compile one of the externals after
         deleting the corresponding ATR-file.


SIM200 E EXTERNAL XXXX DECLARED TWICE

         EXPLANATION:  Externals must only be copied once into a
         main program.


SIM201 E DISPLAY SIZE OVERFLOW, TOO MANY BLOCK LEVELS

         EXPLANATION:  More than 30 block levels including FOR
         loops and inspection blocks.


SIM202 E ATTRBUTE XXXX IN PROTECTION LIST NOT FOUND



SIM240 T ?INVALID DEVICE, ONLY DSK IS ALLOWED

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM241 T ?COMMA MISSING IN PPN

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM242 T ?RIGHT SQUARE BRACKET MISSING IN PPN

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM243 T ?MORE THAN 6 DIGITS IN PPN

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM244 T ?= OR  MISSING IN COMMAND

         EXPLANATION:  See corresponding message in Appendix C.1.
DECsystem-10 SIMULA Language Handbook, part II           Page 124
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM245 T ?RIGHT PARENTHESIS MISSING IN SWITCH EXPRESSION

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM246 T ?LOOKUP ERROR IN COMMAND FILE

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM247 T ?CANNOT OPEN DISK

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM251 T ?SWITCH WITHOUT FILE SPECIFICATION, SWITCH IGNORED

         EXPLANATION:  See corresponding message in Appendix C.1.


SIM252 T ?TOO MANY SOURCE FILES

         EXPLANATION:  This error may occur if the user tries to
         concatenate more than six small source files, the sum of
         which does not exceed 135 characters.

         COMPILER ACTION:  The compilation is terminated after
         the fifth file.


SIM255 T ?IMPROPER ATR LIBRARY FORMAT - FILE AAAA

         EXPLANATION:  The first (possibly a following) block of
         the file is not an index block.

         USER ACTION:  Make an index to the file with FUDGE2 or
         MAKLIB, or substitute another ATR library.


SIM256 T ?FILE NOT FOUND OR DUPLICATE DECLARATION - AAAA

         EXPLANATION:  Source or attribute file not found.  This
         error message is also issued when the same EXTERNAL
         declaration is repeated more than once, so that the
         external module is multiply declared.

         COMPILER ACTION:  This is a terminating error.  No rel
         file is generated and the list file is only generated
         when a source file has been found.

         USER ACTION:  Search for duplicate EXTERNAL declarations
DECsystem-10 SIMULA Language Handbook, part II           Page 125
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


         in your source program.


SIM260 T ?CANNOT ENTER FILE *.TMP



SIM261 T ?INTERNAL I/O ERROR

         EXPLANATION:  Probable reasons are that another job on
         the same ppn has deleted or protected the compiler TMP
         files, or that no space is available on DSK:.  It could
         also be a system software or hardware error.


SIM264 T ?MORE THAN 3072 IDENTIFIERS

         USER ACTION:  Redeclare quantities where possible or
         split the program into separately compiled modules.


SIM265 T ?NO PROGRAM FOUND

         EXPLANATION:  Source file is not a SIMULA program.


SIM266 T ?NOT ENOUGH CORE PASS 1

         EXPLANATION:  Too many declarations found.

         USER ACTION:  Split into separetely compiled modules.


SIM267 T ?TYPE AND/OR KIND OF EXTERNAL XXXX DOES NOT MATCH

         USER ACTION:  Check if the correct ATR-file is used, and
         that the external declaration is correct.


SIM270 T ?NAME OF EXTERNAL XXXX DOES NOT MATCH

         USER ACTION:  Check if the correct ATR-file is used.


SIM271 T ?EXTERNAL XXXX COMPILED AT WRONG LEVEL, LEVEL SHOULD BE
         NNNN

         USER ACTION:  Re-compile EXTERNAL with value of /E
         switch as given in error message, or move declaration to
         another block level.
DECsystem-10 SIMULA Language Handbook, part II           Page 126
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM272 T ?EXTERNAL XXXX NOT FOUND IN ATR LIBRARY XXXX

         USER ACTION:  Make sure the library is correct.


SIM274 T ?FIXUP TABLE OVERFLOW

         EXPLANATION:  Not more than 4096 fixups can be allocated
         in a module.

         USER ACTION:  Split the module into several separately
         compiled modules.


SIM301 W INTERMEDIATE QUANTITIES SAVED IN SLOW MEMORY, EXPRESSION
         SHOULD BE SIMPLIFIED



SIM303 W IMPLICIT ARITHMETIC CONVERSION

         EXPLANATION:  A conversion between types INTEGER and
         LONG REAL is performed by a relatively slow subroutine
         in order not to lose precision.


SIM304 W INTEGER BASE CONVERTED TO REAL BEFORE EXPONENTIATION

         EXPLANATION:  This conversion is made to avoid run-time
         overflow when the result is larger than 2^35.  Integer
         precision may be lost if the base is larger than 134 258
         569.

         USER ACTION:  If you want to retain full integer
         precision then convert the base to LONG REAL before
         exponentiation.


SIM305 W IMPLICIT QUALIFICATION CHECK

         EXPLANATION:  Extra code has been emitted to check the
         qualification in a reference denotes statement or a
         parameter transmission.


SIM307 W EXPRESSION OR CONVERSION AFTER UNTIL

         EXPLANATION:  The quantity after UNTIL must be evaluated
         once for each repetition.
DECsystem-10 SIMULA Language Handbook, part II           Page 127
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM310 W STANDARD FUNCTION XXXX HAS ONLY SINGLE PRECISION

         EXPLANATION:  XXXX = function identifier.


SIM311 W CONNECTED LABEL OR SWITCH XXXX

         EXPLANATION:  The transfer to a connected label may
         cause unexpected effects.


SIM331 E QUALIFICATION XXXX IS NOT A CLASS

         EXPLANATION:  XXXX = identifier.


SIM332 E INVALID 2ND OPERAND KIND OF OPERATOR XXXX

         EXPLANATION:  XXXX = operator.


SIM333 E PREFIX XXXX IS NOT A CLASS

         EXPLANATION:  XXXX = identifier.


SIM334 E PREFIX XXXX IS NOT ON THIS BLOCK LEVEL

         EXPLANATION:  XXXX = identifier.


SIM335 E VIRTUAL MATCH TO XXXX HAS WRONG KIND

         EXPLANATION:  XXXX = identifier.


SIM336 E VIRTUAL MATCH TO XXXX HAS WRONG TYPE OR QUALIFICATION

         EXPLANATION:  XXXX = identifier.


SIM337 E INCORRECT NUMBER OF PARAMETERS TO XXXX

         EXPLANATION:  XXXX = identifier.
DECsystem-10 SIMULA Language Handbook, part II           Page 128
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM340 E DOUBLE DECLARATION OF XXXX

         EXPLANATION:  XXXX = identifier.


SIM341 E INCORRECT NUMBER OF SUBSCRIPTS TO XXXX

         EXPLANATION:  XXXX = identifier.


SIM342 E IDENTIFIER AFTER XXXX IS NOT A CLASS

         EXPLANATION:  XXXX = operator.


SIM343 E OPERAND OF ACTIVATE OR REACTIVATE IS NOT PROCESS



SIM344 E CONTROLLED VARIABLE OF TYPE TEXT IS NOT PERMITTED



SIM345 E INVALID LEFT HAND SIDE EXPRESSION TO OPERATOR XXXX

         EXPLANATION:  XXXX = :- or :=.


SIM346 E CONTROLLED VARIABLE XXXX IS OF NAME MODE

         EXPLANATION:  XXXX = identifier.


SIM347 E STANDARD (OR "QUICK") FUNCTION OR PROCEDURE XXXX CANNOT
         BE PASSED AS AN ACTUAL PARAMETER

         EXPLANATION:  XXXX = procedure name.


SIM350 E NON-ARITHMETIC SUBSCRIPT TO ARRAY XXXX

         EXPLANATION:  XXXX = ARRAY identifier.


SIM351 E PARAMETERS OR SUBSCRIPTS TO XXXX OMITTED

         EXPLANATION:  XXXX = identifier.
DECsystem-10 SIMULA Language Handbook, part II           Page 129
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM352 E THIS XXXX IS NOT A VALID LOCAL OBJECT, CLASS HAS BEEN
         USED AS BLOCK PREFIX

         EXPLANATION:  XXXX = identifier.


SIM353 E THIS XXXX IS NOT A VALID LOCAL OBJECT, NO ENCLOSING
         INSTANCE

         EXPLANATION:  XXXX = identifier.


SIM354 E BRACKETS AFTER XXXX SHOULD BE PARENTHESES

         EXPLANATION:  The identifier XXXX is a function or
         PROCEDURE, not a SWITCH or an ARRAY.


SIM355 E SIMPLE QUANTITY XXXX IS USED AS ARRAY, FUNCTION OR
         SWITCH

         EXPLANATION:  XXXX = identifier.


SIM356 E RESULT OVERFLOW OR DIVISION BY ZERO IN CONSTANT
         EXPRESSION



SIM357 E INCOMPATIBLE OPERAND TYPES OF OPERATOR XXXX

         EXPLANATION:  XXXX = operator.


SIM360 E INVALID OPERAND TYPE OF OPERATOR XXXX

         EXPLANATION:  XXXX = operator.


SIM361 E INVALID REMOTE ACCESS, CLASS XXXX HAS LOCAL CLASS
         ATTRIBUTES

         EXPLANATION:  XXXX = identifier.


SIM362 E IDENTIFIER XXXX IS NOT DECLARED

         EXPLANATION:  XXXX = identifier.
DECsystem-10 SIMULA Language Handbook, part II           Page 130
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM363 E INCOMPATIBLE QUALIFICATIONS XXXX AND XXXX TO OPERATOR
         XXXX

         EXPLANATION:  XXXX = identifier,identifier and operator,
         respectively.


SIM364 E OPERAND OF UNTIL IS NOT SIMPLE



SIM365 E INVALID OPERAND KIND OF OPERATOR XXXX

         EXPLANATION:  XXXX = operator.


SIM366 E TEXT CONSTANT IS NOT A VALID ACTUAL PARAMETER FOR
         REFERENCE MODE FORMAL XXXX OF XXXX

         EXPLANATION:  XXXX = identifier,identifier.

         USER ACTION:  Declare the formal parameter as NAME (if
         only used a few times) or VALUE (if used many times).


SIM367 E INVALID ACTUAL PARAMETER KIND CORRESPONDING TO FORMAL
         PARAMETER XXXX OF XXXX

         EXPLANATION:  XXXX = identifier.


SIM370 E INVALID ACTUAL PARAMETER TYPE CORRESPONDING TO FORMAL
         PARAMETER XXXX OF XXXX

         EXPLANATION:  XXXX = identifier,identifier.

SIM371 E EXPRESSION IS NOT A VALID STATEMENT

         EXPLANATION:  The expression is not a procedure call or
         an object generator, which are the only expressions
         allowed at statement level.


SIM372 E BLOCK TOO LARGE
DECsystem-10 SIMULA Language Handbook, part II           Page 131
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM373 E EXPRESSION TOO COMPLICATED



SIM374 E CANNOT SAVE INTERMEDIATE QUANTITIES, EXPRESSION TOO
         COMPLICATED



SIM375 E DETACH NOT ON OUTERMOST LEVEL IN CLASS



SIM376 E OPERAND SUCCEEDING BEFORE/AFTER NOT QUALIFIED AS PROCESS



SIM377 E CHAR PARAMETER ERROR

         EXPLANATION:  The parameter is a constant outside the
         range [0,127].


SIM400 E PREFIX XXXX TO XXXX IS NOT PREVIOUSLY DECLARED OR IS
         REDEFINED LATER

         EXPLANATION:  A prefix CLASS must be declared before its
         subclass.


SIM401 E INVALID REMOTE ACCESS, XXXX IS NOT AN ATTRIBUTE OF XXXX

         EXPLANATION:  The attribute XXXX does not exist in the
         CLASS qualifying the expression before the dot.


SIM402 E INCOMPATIBLE QUALIFICATION OF PARAMETER CORRESPONDING TO
         FORMAL XXXX OF XXXX

         EXPLANATION:  XXXX = identifier,identifier.


SIM403 E INVALID ACTUAL PARAMETER MODE CORRESPONDING TO FORMAL
         PARAMETER XXXX OF XXXX

         EXPLANATION:  A name mode parameter must not be passed
         to random drawing procedures or ACCUM as a parameter on
         which side effects may occur.
DECsystem-10 SIMULA Language Handbook, part II           Page 132
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM404 E ILLEGAL EXPRESSION AS ACTUAL PARAMETER CORRESPONDING TO
         FORMAL PARAMETER XXXX OF XXXX

         EXPLANATION:  XXXX = identifier,identifier.


SIM405 E PREFIX CLASS HAS LOCAL OBJECT

         EXPLANATION:  A class, say CLASS C, which contains a
         reference like "THIS C" (=local object) cannot be used
         as a prefix, since the prefixed block is NOT a C object,
         implying that "THIS C" would be an error.  To avoid the
         necessity of run-time checks for this, using the class
         as prefix to a block is disallowed.


SIM406 E CONSTANT BEFORE DOT



SIM407 E INVALID ACCESS OF EXTERNAL XXXX FROM XXXX

         EXPLANATION:  Either the first EXTERNAL is invisible,
         not declared or mixed with another EXTERNAL with the
         same name, or the second EXTERNAL needs re-compilation.

         EXAMPLE:  An EXTERNAL can become invisible, if it is
         superseded by a local identifier in your program with
         the same identifier.  This local identifier can also be
         in another separately compiled module which you are also
         using.


SIM410 E CONNECTED PREFIX

         EXPLANATION:  A class which has become visible via
         inspection cannot be used as prefix.  Use block
         prefixing (C BEGIN ...) instead of INSPECT .., if
         possible.


SIM411 E CONNECTED QUANTITY HAS NO QUALIFICATION



SIM412 E DISPLAY SIZE OVERFLOW, TOO MANY LEVELS OR PARAMETER
         NESTINGS

         EXPLANATION:  More than 30 block levels including FOR
         loops, inspection blocks and thunk save areas used for
         certain parameters passed by name.
DECsystem-10 SIMULA Language Handbook, part II           Page 133
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM413 E TEXT STRING AFTER DENOTES



SIM414 E LOCAL QUANTITY IN ARRAY DECLARATION



SIM415 E PROGRAM TOO LARGE, CAPACITY LIMIT EXCEEDED

         EXPLANATION:  At least one of the five code streams
         generated in PASS 2 exceeds 32767 words.

         USER ACTION:  Try separate compilation!


SIM416 E TOO MANY ACCUMULATORS NNNN NEEDED FOR PARAMETERS

         EXPLANATION:  A "QUICK" MACRO-10 procedure requires its
         parameters in consecutive accumulators.  Only 10
         accumulators are available for this purpose.

         USER ACTION:  Do not use name mode unnecessarily.  Two
         ac's are required for each name mode parameter.  Place
         more information in some parameters.


SIM417 E TOO COMPLICATED ACTUAL PARAMETER CORRESPONDING TO FORMAL
         PARAMETER XXXX OF "QUICK" PROCEDURE XXXX

         EXPLANATION:  The actual parameter corresponding to a
         name mode formal parameter of a "QUICK" procedure may
         not have a thunk, which means that expressions,
         procedures, labels and switches are disallowed.  Note
         that this only applies to name mode.

         USER ACTION:  Compute the expression, if possible, to a
         variable and pass this instead.  Otherwise change the
         specifications of the procedure.  Note that "CODE" (not
         "QUICK") procedures permit any valid parameters
         according to the SIMULA definition, at the expense of
         the overhead incurred with a general procedure call.


SIM420 E ACTUAL/FORMAL TYPE MISMATCH FOR PARAMETER XXXX OF
         "QUICK" PROCEDURE XXXX

         EXPLANATION:  In name mode, the type of an actual
         parameter to a "QUICK" procedure must be identical to
         the formal type.
DECsystem-10 SIMULA Language Handbook, part II           Page 134
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


         USER ACTION:  Copy the actual parameter to a variable
         with the correct type and use the variable as parameter.
         If side effects are wanted, copy back the value after
         the call.


SIM421 E ATTRIBUTE XXXX HIDDEN BUT NOT PROTECTED



SIM422 E NO ATTRIBUTE XXXX VISIBLE



SIM423 E NEW XXXX IS AN ILLEGAL OBJECT GENERATOR

         EXPLANATION:  See this handbook section 4.1.  SIMSET,
         SIMULATION and their subclasses cannot occur after NEW,
         only as prefix.


SIM424 E ILLEGAL VIRTUAL SPECIFICATION OF XXXX

         EXPLANATION:  Either there are two virtual
         specifications of the same identifier visible
         simultaneously or a formal parameter is specified
         virtual.


SIM425 E VIRTUAL MATCH XXXX MUST NOT BE PROTECTED

         EXPLANATION:  The virtual match inherits the protection
         mode of the virtual specification.

         USER ACTION:  Remove the illegal protection.


SIM426 E ILLEGAL USE OF TEXT VALUE CONSTANT



SIM461 T ?STACK OVERFLOW, STATEMENT TOO COMPLICATED



SIM462 T ?CORE FAILURE, PROGRAM HAS TOO MANY DECLARATIONS AND
         INSPECTIONS FOR THE AVAILABLE MEMORY

         USER ACTION:  Split the program into separately compiled
         modules.
DECsystem-10 SIMULA Language Handbook, part II           Page 135
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM463 T TOO COMPLICATED PROGRAM STRUCTURE

         EXPLANATION:  The compiler ran out of "fixups".
         Probably too many branches in a conditional expression
         (or statement).

         USER ACTION:  Try splitting conditional expression into
         several conditional statements.


SIM467 T ?STACK UNDERFLOW



SIM530 E INTERNAL ERROR:  NON-EXISTENT ERROR NUMBER

         EXPLANATION:  Error should never occur.  The wrong
         version of SIMDDT may be in use, or SIMDDT needs
         updating.

         USER ACTION:  Call a systems programmer.


SIM560 T ?NOT ENOUGH CORE PASS 3

         EXPLANATION:  Not enough core to create line number
         table for listing, cross reference listing or attribute
         file.


SIM561 T ?UNRECOVERABLE ERRORS

         EXPLANATION:  Too many severe errors of type termination
         have occurred.

         USER ACTION:  Contact a systems programmer.


SIM566 T ?INTERNAL ERROR:  STACK UNDERFLOW PASS AAAA

         EXPLANATION:  Same number in all three passes.  This
         message should never occur.  AAAA is pass number.

         USER ACTION:  Contact a systems programmer.
DECsystem-10 SIMULA Language Handbook, part II           Page 136
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM567 T ?  STACK OVERFLOW PASS AAAA

         EXPLANATION:  AAAA is pass number.  A capacity
         restriction has been violated.  Stack overflow pass 3 is
         often caused by too many BEGINs placed after each other
         without any closing ENDs.  The error may also be an
         internal error.

         USER ACTION:  See SIM157.


SIM570 T ?OPEN ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.


SIM571 T ?LOOKUP ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.


SIM572 T ?ENTER ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  Another
         explanation may be that no space is available because
         you are exceeding your disk quota.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.


SIM573 T ?INPUT ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.
DECsystem-10 SIMULA Language Handbook, part II           Page 137
APPENDIX C.2 COMPILER SOURCE CODE DIAGNOSTICS


SIM574 T ?OUTPUT ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.


SIM575 T ?CLOSE ERROR ON FILE AAAA

         EXPLANATION:  This may occur if the file is protected.
         AAAA is the name of the file.  This error may have
         occurred in any of the three passes.  The error may also
         be an internal compiler or system failure.

         USER ACTION:  Check protection and recompile program.
         2,f,g
DECsystem-10 SIMULA Language Handbook, part II           Page 138
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS
=========================================


D.1  DIALOGUE MESSAGES


     These messages are printed by the I/O subsystem of the RTS.
     Some of them start a dialogue with the user and some are
     only warnings.  A few messages also terminate execution.
     The messages are unnumbered.

     You can transfer from the i/o error dialogue to SIMDDT by
     pushing the ALTMODE (ESCAPE) button on your terminal.


?APPEND OR RONLY EXPECTED AFTER ACCESS

     EXPLANATION:  ACCESS switch must be followed by :APPEND or
     :RONLY

     RTS ACTION:  The user is asked in dialoque to enter a new
     file definition.


?CANNOT OPEN:  device

     EXPLANATION:  Device specified for SYSIN or SYSOUT not
     defined.

     USER ACTION:  Retype correct device.


?CANNOT OPEN DSK

     EXPLANATION:  OPEN failed for a disk-like device.

     RTS ACTION:  EXIT to monitor.


CANNOT DO INPUT FROM DEVICE:  devicename
CANNOT DO OUTPUT TO DEVICE:  devicename

     EXPLANATION:  Illegal file class type - device type
     combination.

     USER ACTION:  Retype correct device.
DECsystem-10 SIMULA Language Handbook, part II           Page 139
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


CANNOT SWITCH DEVICE AT THIS STAGE

     EXPLANATION:  This message is printed if the user tries to
     change a directory device (i.e.  DECtape or disk) after a
     LOOKUP or ENTER error.  It is only possible to switch
     between disk devices, e.g.  from DSKB to DSKD, or between
     DECtapes.

     USER ACTION:  Retype correct device.


?CLOSE ERROR ON:  filename

     EXPLANATION:  CLOSE error on specification file.

     RTS ACTION:  EXIT to monitor.


CLOSE ERROR ON SIMRTS.HLP

     RTS ACTION:  HELP switch ignored.


?CORE NOT AVAILABLE

     EXPLANATION:  RTS tried to allocate core according to the
     file definitions and switches in the specification file, but
     this core request could not be met by the monitor.

     RTS ACTION:  EXIT to monitor.


?DEVICE devicename ILLEGAL

     EXPLANATION:  Devicename does not exist.

     USER ACTION:  Retype correct device name.


?FILE filename NOT FOUND

     EXPLANATION:  LOOKUP failure on specification file.

     RTS ACTION:  RTS reads new file descriptor from TTY.

     USER ACTION:  Retype file descriptor.
DECsystem-10 SIMULA Language Handbook, part II           Page 140
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


HELP SWITCH MISPLACED.  IGNORED

     EXPLANATION:  The HELP switch is relevant only when file
     definitions are read from TTY.  HELP is also ignored in file
     parameters.


I SWITCH IGNORED.  FILE:  logicalname IS NOT DIRECTFILE

     EXPLANATION:  This is a warning message.  IMAGESIZE is
     relevant for directfiles only.


ILL DELIM AFTER LAST SWITCH

     EXPLANATION:  Valid delimiter after a run-time switch is
     either space or carriage return.

     RTS ACTION:  This is just a warning message.


?ILL DELIM AFTER LOGICAL NAME

     EXPLANATION:  Delimiter after logical name must be space,
     tab or carriage return.

     USER ACTION:  Retype file definition.


?ILLEGAL DELIMITER:  "byte" IN FILE DESCRIPTOR

     EXPLANATION:  Valid delimiters after a file descriptor are
     carriage return, space, tab or slash.

     USER ACTION:  Retype file definition.


?ILLEGAL PPN

     EXPLANATION:  Right square bracket missing or ppn contains a
     digit > 7.

     USER ACTION:  Retype correct ppn.
DECsystem-10 SIMULA Language Handbook, part II           Page 141
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


?ILLEGAL PROTECTION CODE

     EXPLANATION:  Right angle bracket missing or protection code
     contains a digit > 7.

     USER ACTION:  Retype correct protection code.


?ILL FILE DESC.  ENTER NEW FILE DESC

     EXPLANATION:  Illegal file descriptor was typed after LOOKUP
     or ENTER error.

     USER ACTION:  Retype correct file descriptor.


?ILL FILE DESCRIPTOR IN FILE PARAMETER

     EXPLANATION:  The file descriptor in the parameter to NEW
     ...FILE("...") is illegal.  This message is normally
     preceded by one or more messages specifying the error(s).

     USER ACTION:  Retype file class argument including logical
     name.


IND SPEC FILE NOT FOUND

     EXPLANATION:  LOOKUP error on indirect specification file.

     USER ACTION:  Retype file descriptor for indirect
     specification file.


L SWITCH IGNORED.  FILE:  logical name IS NOT AN OUTFILE OR
     PRINTFILE

     EXPLANATION:  LIMIT is not relevant for infile and
     directfile.


LOCAL SWITCH:  switch USED AS GLOBAL.  IGNORED
DECsystem-10 SIMULA Language Handbook, part II           Page 142
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


LOGICAL NAME:  logical name ALREADY DEFINED

     EXPLANATION:  This message is printed in connection with the
     SIMDDT USE command.  A USE file may not exist when the USE
     command is given.

     RTS ACTION:  Retype the USE command.


LOGICAL NAME:  logical name ALREADY DEFINED.  IGNORED

     EXPLANATION:  Logical names must be unique in the
     specification file.

     RTS ACTION:  The file definition is ignored.


LOOKUP FAILURE ON SIMRTS.HLP

     RTS ACTION:  HELP switch ignored.


?LOOKUP OR ENTER ERROR (nnn) ON FILE:  file specification

     EXPLANATION:  The code nnn indicates the type of error.  The
     following codes are used:
     000  File not found
     010  User file directory does not exist on current file
          structure, usually incorrect ppn.
     020  Protection failure or directory full on DECtape
     003  File being modified
     014  Disk quota exceeded
     015  Write-lock error
     016  Not enough table space in monitor
     017  Partial allocation only.  The requested space
     allocation
          could not be met.
     021  Cannot supersede an existing directory
     023  Sub-directory not found.

     Other error codes usually indicate internal RTS error.

     The file specification contains the information which is
     currently known about the file.  Empty fields indicate
     standard value.

     USER ACTION:  Retype file descriptor (no logical name!)
DECsystem-10 SIMULA Language Handbook, part II           Page 143
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


NESTED IND FILES NOT ALLOWED.  IGNORED

     EXPLANATION:  An indirect specification file contains a
     specification file definition.


?NULL ARG AFTER SWITCH:  switch

     EXPLANATION:  Argument after colon is either 0 or missing.

     USER ACTION:  Retype the entire file definition.


ONLY DSK ALLOWED

     EXPLANATION:  Device can only be disk after retyping the
     definition of a specification file.

     RTS ACTION:  DSK assumed.


?PROJ NO NOT FOLLOWED BY COMMA

     USER ACTION:  Retype file definition.


?PROT CODE EXCEEDS THREE DIGITS

     USER ACTION:  Retype file definition.


?READ ERROR ON:  filename

     EXPLANATION:  Read error occurred on a specification file.

     RTS ACTION:  EXIT to monitor.


?READ ERROR ON SIMRTS.HLP

     RTS ACTION:  HELP switch ignored.


SPEC FILE STILL OPEN AS SYSIN.  LINE IGNORED

     EXPLANATION:  When SYSIN is used as indirect specification
     file, no more indirect files are allowed.
DECsystem-10 SIMULA Language Handbook, part II           Page 144
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


SWITCH:  switch MISSPELLED

     RTS ACTION:  Switch processed according to first letter.


SWITCH:  switch NOT FOLLOWED BY COLON

     EXPLANATION:  All run-time switches except HELP must be
     followed by colon and an argument.

     USER ACTION:  Retype file definition.


SWITCH:  switch NOT FOLLOWED BY DECIMAL NUMBER

     USER ACTION:  Retype file definition.


SWITCH:  switch NOT RECOGNIZED

     EXPLANATION:  First letter of the switch not a legal switch
     name.

     USER ACTION:  Retype file definition.


SYSIN ALREADY READ.  LINE IGNORED

     EXPLANATION:  File definitions can be read from SYSIN only
     once.


?TOO DEEP SFD NESTING

     EXPLANATION:  The maximum number of sub-file directories (an
     installation defined parameter) is exceeded.

     USER ACTION:  Retype the file definition.


?TTY END OF FILE OR TTY INPUT ERROR

     EXPLANATION:  The user has typed a ^Z or an input error was
     detected.

     RTS ACTION:  EXIT to monitor, i.e.  ^Z works as ^C.  A
     CONTINUE command, if given, will cause a final EXIT from the
     program, i e  execution cannot then be continued any more.

     USER ACTION:  Use ^C instead of ^Z.  It is then possible to
     resume execution with the CONTINUE command.
DECsystem-10 SIMULA Language Handbook, part II           Page 145
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


WARNING:  APPEND MODE IGNORED FOR DIRECTFILE
WARNING:  APPEND MODE IGNORED FOR INFILE
WARNING:  APPEND MODE IGNORED FOR NON-DISK DEVICES

     EXPLANATION:  Append mode is valid only for printfiles and
     outfiles on disk.


WARNING:  DEVICE NOT DSK FOR DIRECTFILE.  DSK ASSUMED.

     EXPLANATION:   Device can only be disk for directfile.


WARNING:  DEVICE NOT DSK FOR SPECIFICATION FILE.  DSK ASSUMED.

     EXPLANATION:  Specification files can only be read from disk
     or TTY.

     RTS ACTION:  RTS tries to lookup the file on DSK.


WARNING:  FILES MUST BE A GLOBAL SWITCH.  FILES IGNORED


WARNING:  NO SWITCH NAME FOUND.  IGNORED

     EXPLANATION:  Slash is followed by slash, space, tab or
     carriage return.


WARNING:  PROJ OR PROG NUMBER TRUNCATED

     EXPLANATION:  Project or programmer number exceeds 6 digits.

     RTS ACTION:  Only the first 6 digits are used.


WARNING:  SFD IGNORED

     EXPLANATION:  Sub-file directories cannot be used for
     specification files.


WARNING:  SWITCHES IGNORED

     EXPLANATION:   Switches do not apply to definitions of a
     specification file.
DECsystem-10 SIMULA Language Handbook, part II           Page 146
APPENDIX D RUN-TIME AND DEBUG DIAGNOSTICS


WARNING:  TOO MANY BUFFERS FOR FILE:  logical name.  2 STANDARD
     BUFFERS ASSUMED

     EXPLANATION:  A value greater than 32 of the BUFFER switch
     argument is applicable to magnetic tape only.  
DECsystem-10 SIMULA Language Handbook, part II           Page 147
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


D.2 RUN-TIME AND DEBUG DIAGNOSTICS:


         The messages starting with ZYQ apply to the run time
         system (RTS), except for SIMDDT, which has its own
         messages starting with ZYD.  A few of the ZYQ messages
         may be issued by SIMDDT, with ZYQ changed to ZYD.  The
         RTS action on any of the ZYQ errors is to invoke SIMDDT
         in error mode.  SIMDDT prints the error message and
         indicates where the error occurred.  Commands can be
         entered to SIMDDT to find out more information about
         variables, state of execution etc.  By the EXIT command
         to SIMDDT, files are closed and the SIMULA program is
         terminated.  If you do not want to close files, exit via
         ^C.


         For some of the ZYQ messages it is possible to continue
         execution of the SIMULA program with the SIMDDT command
         "PROCEED".  Note that SIMDDT may be used to investigate
         the cause of the error before the execution is
         continued.


         In addition to the numbered messages, the following
         messages may appear on the TTY or the batch log:

[ZYQCCS Current SIMDDT command suppressed]

         EXPLANATION:  REENTER was issued while SIMDDT was
         active.  This is a way of suppressing lengthy output
         resulting from a SIMDDT command and to return to SIMDDT
         command level as quickly as possible.  Preferred to
         using ^O, which only suppresses the actual output, but
         does not stop the command execution.


[ZYQCSH Cannot stop here]

         EXPLANATION:  REENTER was attempted at a point where
         SIMDDT cannot be called because data may not be
         consistent.

         USER ACTION:  Try again to stop and reenter.


%ZYQCUF CORE UUO failed.  Cannot load SIMDDT

         EXPLANATION:  The program is too big to allow for
         SIMDDT.
DECsystem-10 SIMULA Language Handbook, part II           Page 148
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


%ZYQEDO nn EDIT OVERFLOW(S)

         EXPLANATION:  In nn cases, the field width in an output
         editing operation, e g PUTREAL, was too small to hold
         the number.  Asterisks were edited into the field.

         USER ACTION:  Examine output fields for asterisks.
         Correct the program.


[ZYQEIR Error in routine:  XXXXXX]

         EXPLANATION:  An error has occurred in a subroutine such
         as SQRT taken from the FORTRAN library.  XXXXXX should
         be the name of the entry point of the routine.

         A subsequent ZYQ message issued by SIMDDT gives more
         information.  Some library routines have inline messages
         for errors.  Such a message will be typed following the
         above message.


%ZYQFLE <text>

         EXPLANATION:  An error has occurred in a subroutine such
         as SQRT taken from the FORTRAN library.  <text> is a
         string provided by the subroutine.  This message is
         preceded by a ZYQEIR message.


%ZYQIUF IN UUO failed.  Cannot load SIMDDT

         EXPLANATION:  Probably a DECsystem-10 error.  Consult a
         systems programmer.


%ZYQLUF LOOKUP UUO failed.  Cannot load SIMDDT

         EXPLANATION:  SIMDDT.ABS is not available on the device
         (normally SYS), or a system error has occurred.  Consult
         a systems programmer.


?ZYQNCA No core available - can not proceed

         EXPLANATION:  The program cannot run with too small core
         size.

         USER ACTION:  If possible, allocate more core (virtual
         and/or physical) and try again.
DECsystem-10 SIMULA Language Handbook, part II           Page 149
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


%ZYQNEC Not enough core.  Cannot load SIMDDT

         EXPLANATION:  The program is too big to allow for
         SIMDDT.

         USER ACTION:  See ZYQNCA.

         RTS ACTION:   The program continues without SIMDDT.


%ZYQNIO No free I/O channel.  Cannot load SIMDDT

         EXPLANATION:  Probably a SIMULA system or user error.
         If an external MACRO-10 procedure is doing I/O, check
         it.  Consult a systems programmer if the error cannot be
         located.


[ZYQNYI RTS not yet initialised, continuing ...]

         EXPLANATION:  REENTER was used too early after program
         start.  Try later.


%ZYQOUF OPEN UUO failed.  Cannot load SIMDDT

         EXPLANATION:  Probably a DECsystem-10 error.  Consult a
         systems programmer.


[ZYQPID Please input a line of data so SIMDDT can be entered]

         EXPLANATION:  The program was interrupted by ^C while
         waiting for input from the terminal.  SIMDDT cannot be
         entered until Inimage has returned with a line of data.
         The data given should be valid input to the program.
         Usually, hitting carriage return will do (a blank line).


?ZYQREZ SIMULA RTS Error ZYQnnn

         EXPLANATION:  Since SIMDDT could not be loaded, the
         proper error message could not be issued.  Look up the
         message ZYQnnn in this handbook.


%ZYQSFS STOP statement executed or EXIT called in FORTRAN
         subprogram

         EXPLANATION:  An external FORTRAN subroutine attempted
         to stop execution by a STOP statement or CALL EXIT.
DECsystem-10 SIMULA Language Handbook, part II           Page 150
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         Handled as if control had passed through the final END
         of the SIMULA main program.


%ZYQUFL nn UNDERFLOW(S)

         EXPLANATION:  In nn cases, an arithmetic operation has
         given a result too small to be normalized.  Zero was
         substituted as result.


The following messages are issued by SIMDDT:


ZYQ001   Source program error

         EXPLANATION:  An incorrect part of the source program
         has been compiled as an error UUO.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The execution continues with the next
         compiled statement.  The effect of continuing execution
         is unpredictable except in very simple cases.


ZYQ002   Array index out of bounds


ZYQ003   QUA error

         EXPLANATION:  In an expression of the form "X QUA C", X
         does not refer to a C object or an object belonging to a
         subclass of C.


ZYQ004   Illegal denotes or wrong parameter qualification

         EXPLANATION:  See explanation for ZYQ003.  ZYQ004
         results from an implicit QUA check generated for a
         denotes (:-) statement or when a REF(...) parameter is
         passed to a class or procedure.
DECsystem-10 SIMULA Language Handbook, part II           Page 151
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ005   No match for virtual quantity

         EXPLANATION:  The quantity (procedure, switch or label)
         was specified virtual, but no matching declaration is
         available at any prefix level of the class object to
         which the quantity should belong, i e the current class,
         prefixed block, inspection block or the class object
         referred to by the quantity before the dot in case of
         remote access.


ZYQ006   CHAR argument out of bounds

         EXPLANATION:  Argument must be >= 0 and <=127.


         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ007   Wrong number of subscripts

         EXPLANATION:  A formal array was used with wrong number
         of subscripts.


ZYQ010   OCERC   0,Too many files

         EXPLANATION:  At most 14 files can be active at the same
         time.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  When the execution is resumed RTS will
DECsystem-10 SIMULA Language Handbook, part II           Page 152
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         again try to assign a free I/O channel.

         USER ACTION:  The user must close one or more files with
         the SIMDDT command CLOSE before the PROCEED command is
         used.


ZYQ011   OCERR   1,Pushdown list underflow

         EXPLANATION:  Should not occur.  Wild jumps may have
         been executed as a result of removing the checking of
         array subscripts (-A) or qualification (-Q), or an
         external MACRO-10 or FORTRAN procedure may have run
         wild.

         USER ACTION:  If none of the above applies, report the
         error.


ZYQ012   OCERC   12,SIMDDT entered after file spec error

         EXPLANATION:  This error occurs when the user escapes
         the dialogue with altmode.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  If the user types PROCEED the dialogue is
         restarted.


ZYQ013   OCERR   3,OPEN failure

         EXPLANATION:  Failure when trying to OPEN the channel
         for SYSIN or SYSOUT.


ZYQ014   OCERR   4,FILE(S) OPEN AT EXIT.  DO [STOP] CLOSE OR EXIT

         EXPLANATION:  At end of execution some files other than
         SYSIN and SYSOUT were open.

         USER ACTION:  Use the [STOP] CLOSE command in SIMDDT to
         close all or some of files.
DECsystem-10 SIMULA Language Handbook, part II           Page 153
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ015   OCERR   5,Object NONE

         EXPLANATION:  An attempt was made to refer to an
         attribute of a non-existent class object (or to a not
         yet allocated array object).


ZYQ016   OCERR   6,Illegal memory reference

         EXPLANATION:  Probably a SIMULA system error or a user
         error in an external MACRO-10 or FORTRAN procedure.  It
         may also be a user error in the SIMULA program or an
         external SIMULA procedure or class, if compile-time
         checking was partially turned off (-A or -Q switches).
         If so, try running with those checks on.  If the error
         persists, check any external MACRO 10 or FORTRAN
         procedure for errors before reporting the trouble.


ZYQ017   OCERC   7,Integer overflow or division by zero

         EXPLANATION:  An arithmetic operation has exceeded the
         valid number range, or attempted to divide by zero.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.  The
         operation will return maxint = 2^35-1.


ZYQ020   OCERC   10,Floating point overflow or division by zero

         EXPLANATION:  A floating point operation gives a result
         outside of the available number range, or division by
         zero is attempted.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.  The
         operation will return maxreal = approx 1.7&38.
DECsystem-10 SIMULA Language Handbook, part II           Page 154
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ021   CPERC   0,RESUME:  object NONE

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ022   CPERC   1,RESUME:  terminated class instance

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ023   CPERC   2,RESUME:  attached class instance

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ024   CPERR   3,RESUME:  operating class instance


ZYQ025   CPERC   4,CALL:  object NONE

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ026   CPERC   5,CALL:  terminated class instance

         SIMDDT ACTION:  The error message is followed by the
         text:
DECsystem-10 SIMULA Language Handbook, part II           Page 155
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ027   CPERC   6,CALL:  attached class instance

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.


ZYQ030   CPERR   7,CALL:  operating class instance


ZYQ036   CSERR   1,Undefined GOTO

         EXPLANATION:  The target of the GOTO statement is not
         operating.


ZYQ037   CSERR   2,Illegal GOTO

         EXPLANATION:  Attempt to leave a detached class instance
         by a GOTO.


ZYQ040   CSERR   3,Too big array

         EXPLANATION:  The size of the array would be > 2^18
         words.


ZYQ041   CSERR   4,Upper bound of array < lower bound



ZYQ042   CSERR   5,Cannot use switch in terminated class

         EXPLANATION:  Cannot use a switch in a terminated class
         instance.
DECsystem-10 SIMULA Language Handbook, part II           Page 156
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ043   CSERR   6,Procedure should have no parameters

         EXPLANATION:  Attempt to call a parameterless formal or
         virtual procedure with an actual parameter list.


ZYQ044   CSERR   7,Parameters missing

         EXPLANATION:  Attempt to call a formal or virtual
         procedure with specified parameters without supplying an
         actual parameter list.


ZYQ051   IOERR   0,File not open

         EXPLANATION:  File not opened when (a) OUTIMAGE, OUTTEXT
         or another output procedure was called.  (b) LOCATE was
         called.


ZYQ052   IOERR   1,OPEN failure

         EXPLANATION:
         a) The requested device is in use and cannot be shared
         b) The requested device does not exist
         c) The device is restricted and has not been assigned
         via a MOUNT command.


ZYQ053   IOERR   2,File already assigned to TTY

         EXPLANATION:  Only one file may be assigned to the
         output or the input side of the TTY.


ZYQ054   IOERR   3,Transfer failure

         EXPLANATION:  A read or write operation failure.


ZYQ055   IOERC   4,File already open

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The OPEN call is ignored after PROCEED.
DECsystem-10 SIMULA Language Handbook, part II           Page 157
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ056   IOERC   5,File already closed

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The CLOSE call is ignored after PROCEED.


ZYQ057   IOERC   6,CLOSE failure

         EXPLANATION:  Write operation failure in CLOSE
         procedure.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The CLOSE call is ignored after PROCEED.


ZYQ060   IOERR   7,EOF in INIMAGE

         EXPLANATION:  ENDFILE procedure returned TRUE when
         INIMAGE was called.


ZYQ061   IOERR   10,External image too long

         EXPLANATION:  The external image (string of characters
         finished by LF, FF, VT, or altmode) cannot fit into the
         image text.


ZYQ062   IOERR   11,Image too large

         EXPLANATION:  The internal image is too long for
         imagesize of a directfile.
DECsystem-10 SIMULA Language Handbook, part II           Page 158
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ063   IOERC   12,EJECT:  argument out of range

         EXPLANATION:  The argument to EJECT is <= 0.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ064   IOERC   13,SPACING:  argument out of range

         EXPLANATION:  The argument to SPACING is < 0 or >
         LINESPERPAGE.


         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ065   IOERC   14,Output field width out of range

         EXPLANATION:  For an output editing procedure, the
         requested field width is negative or zero or does not
         fit into an output image.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED
DECsystem-10 SIMULA Language Handbook, part II           Page 159
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ066   IOERC   15,Output limit exceeded

         EXPLANATION:  The number of blocks written to an outfile
         (printfile) has reached the limit established with a
         LIMIT switch in the file specification.

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The limit is set to 0, i.e.  no limit if
         the user continues execution.


ZYQ067   IOERR   16,OUTIMAGE (DIRECTFILE):  LOC <= 0

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ070   IOERR   17,OUTIMAGE (DIRECTFILE).  File is read-only
DECsystem-10 SIMULA Language Handbook, part II           Page 160
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ071   IOERR   20,INCHAR:  end of file


ZYQ072   IOERR   21,ININT:  INREAL:  INFRAC:  end of file


ZYQ074   IOERR   23,INTEXT:  end of file


ZYQ075   IOERC   24,INTEXT:  length out of range

         EXPLANATION:  The specified length must be >= 0 and <
         2^18

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ076   IOERC   25,Too long input line

         EXPLANATION:  The input line cannot fit into the image
         text.

         USER ACTION:  A new input line can be given after the
         PROCEED command.


ZYQ100   PHERR   0,Actual parameter is an expression - assignment
         is illegal


ZYQ101   PHERR   1,Function name passed as actual parameter -
         value needed

         EXPLANATION:  The actual parameter is just a procedure
         name, but a value is required.
DECsystem-10 SIMULA Language Handbook, part II           Page 161
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ102   PHERR   2,Invalid actual parameter to "QUICK" procedure
         - incorrect type or too complicated

         EXPLANATION:  This corresponds to either of the
         compile-time errors SIM417 or SIM420.  See these.  The
         error could not be determined at compile time.


ZYQ103   PHERR   3,Assignment to formal parameter - r.h.s.  not
         subclass of l.h.s.


ZYQ104   PHERR   4,Illegal use of a parameter which is a text
         constant

         EXPLANATION:  A text constant, passed as an actual
         parameter which matches a text parameter by name, is
         used in a place where a text constant is not allowed,
         e g on the right or left hand side of an (implied or
         explicit) denotes (:-) statement, on the left hand side
         of an assignment statement or in another context which
         would affect the contents of the text constant or change
         its position indicator.

         USER ACTION:  Specify the formal parameter by value or
         use COPY on the calling side.


ZYQ106   PHERR   6,Wrong number of parameters to formal or
         virtual procedure


ZYQ107   PHERR   7,Wrong actual parameter type


ZYQ110   PHERR   10,Text constant by reference is illegal

         USER ACTION:  See app.  C, message SIM366.


ZYQ111   PHERR   11,Wrong qualification on actual parameter


ZYQ112   PHERR   12, Actual/formal types incompatible


ZYQ113   PHERR   13,Wrong kind of actual parameter
DECsystem-10 SIMULA Language Handbook, part II           Page 162
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ121   RDERR   1,DISCRETE:  wrong number of subscripts


ZYQ122   RDERR   2,ERLANG:  first parameter not positive


ZYQ123   RDERR   3,ERLANG:  second parameter not positive


ZYQ124   RDERR   4,HISTD:  wrong number of subscripts


ZYQ125   RDERR   5,HISTO:  wrong number of subscripts


ZYQ126   RDERR   6,HISTO:  incompatible array parameters


ZYQ127   RDERR   7,LINEAR:  wrong number of subscripts


ZYQ130   RDERR   10,LINEAR:  array bounds do not match


ZYQ131   RDERR   11,NEGEXP:  first argument not positive


ZYQ132   RDERR   12,NORMAL:  standard deviation not positive


ZYQ133   RDERR   13,RANDINT or UNIFORM:  interval negative


ZYQ134   RDERR   14,RANDINT or UNIFORM:  too long interval


ZYQ135   SAERR   0,Garbage collection not possible

         EXPLANATION:  The SIMDDT command USE may invoke the
         Garbage Collector in a state when a garbage collection
         cannot be done.  This can occur after certain run time
         errors.

         USER ACTION:  Do not issue the USE command in this case.


ZYQ136   SAERR   1,Cannot get enough core for object pool

         EXPLANATION:  The requisite data area could not be
         allocated for the SIMULA program to run.  This error
         will sometimes occur when a separately compiled module
DECsystem-10 SIMULA Language Handbook, part II           Page 163
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         used by your program was not loaded.

         USER ACTION:  Obtain more core if possible or try to
         make core requirements smaller.


ZYQ144   SUERR   1,EVTIME:  object NONE


ZYQ145   SUERR   2,EVTIME:  passive process


ZYQ146   SUERR   3,Reactivation of terminated process


ZYQ147   SUERR   4,SQS empty

         EXPLANATION:  The last active process has been taken out
         of the sequencing set, and no process can be resumed.
         This is usually caused by cancelling or passivating the
         main program of SIMULATION.

         USER ACTION:  Activate the main program at some remote
         time.  Do not cancel or passivate main.


ZYQ154   TXERR   0,NOTEXT in editing procedure


ZYQ155   TXERR   1,PUTFRAC or OUTFRAC:  number of digits negative


ZYQ156   TXERC   2,PUTFIX or OUTFIX:  number of digits negative

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.
DECsystem-10 SIMULA Language Handbook, part II           Page 164
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ157   TXERC   3,PUTREAL or OUTREAL:  number of digits negative

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ160   TXERC   4,PUTCHAR:  pos out of range

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ161   TXERC   5,GETCHAR:  pos out of range

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.
DECsystem-10 SIMULA Language Handbook, part II           Page 165
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ162   TXERC   6,SUB:  1st parameter out of range

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ163   TXERC   7,SUB:  2nd parameter out of range

         SIMDDT ACTION:  See above message ZYQ162.


ZYQ164   TXERC   10,Text assignment:  r.h.s.  text too long

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the SIMULA program.

         RTS ACTION:  The text is truncated to the right after
         PROCEED.


ZYQ165   TXERR   11,GETINT:  no digits found or number too large

         EXPLANATION:  The first character that caused the error
         is printed.  If this character is a digit, then the
         number is too large.


ZYQ166   TXERR   12,GETREAL:  did not find digits


ZYQ167   TXERR   13,GETREAL:  item too large
DECsystem-10 SIMULA Language Handbook, part II           Page 166
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ170   TXERR   14,GETFRAC:  no item found or item too large

         EXPLANATION:  The first character that caused the error
         is printed.  If this character is a digit, then the
         number is too large.


ZYQ171   TXERC   15,BLANKS:  parameter out of range

         SIMDDT ACTION:  The error message is followed by the
         text:

         TO CONTINUE TYPE PROCEED

         At exit from SIMDDT the user may give a PROCEED command
         to continue the execution of the simula program.  If
         PROCEED is given the following text is issued:

         GIVE NEW INTEGER ARGUMENT

         after which the user must enter an integer.  The
         execution is then continued.


ZYQ172   TXERR   16,LOWTEN:  Illegal parameter


ZYQ173   TXERC   17,ININT:  no digits found or number too large

         EXPLANATION:  The first character that caused the error
         is printed.  If this character is a digit, then the
         number is too large.

         USER ACTION:  After the PROCEED command the input text
         where the error occurred is displayed and the user can
         give a new input line to replace this text.


ZYQ174   TXERC   20,INREAL:  did not find digits

         USER ACTION:  After the PROCEED command the input text
         where the error occurred is displayed and the user can
         give a new input line to replace this text.


ZYQ175   TXERC   21,INREAL:  item too large

         USER ACTION:  After the PROCEED command the input text
         where the error occurred is displayed and the user can
         give a new input line to replace this text.
DECsystem-10 SIMULA Language Handbook, part II           Page 167
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYQ176   TXERC   22,INFRAC:  no item found or item too large

         EXPLANATION:  The first character that caused the error
         is printed.  If this character is a digit, then the
         number is too large.

         USER ACTION:  After the PROCEED command the input text
         where the error occurred is displayed and the user can
         give a new input line to replace this text.


ZYQ212   Debug mode entered from line

         EXPLANATION:  SIMDDT was entered via the ENTERDEBUG
         procedure.  Execution may continue after issuing any
         SIMDDT commands which may be useful.


ZYQ213   Execution terminated via ABORT procedure

         EXPLANATION:  Invoked via the ABORT utility procedure.
         If a message was given as parameter, ABORT has output
         that message to the terminal and to Sysout if Sysout is
         not the terminal.


ZYQ214   Error in utility procedure

         EXPLANATION:  Reserved error number for errors in
         utility procedures (usually written in MACRO-10)


ZYQ215   Error in FORTRAN library subroutine

         EXPLANATION:  An error occurred in a mathematical
         procedure like SQRT or SIN which SIMULA has taken
         directly from the FORTRAN library.  The procedure name,
         which is usually different from the SIMULA name, was
         given in a preceding message to the TTY.


ZYQ216   Illegal UUO executed

         EXPLANATION:  Either a MACRO-10 or FORTRAN subroutine
         used an UUO which is not recognized by the SIMULA
         system, or a unexpected error occurred such that
         execution got out of control.  See explanation for
         ZYQ016.

         USER ACTION:  Check especially for I/O in external
         FORTRAN procedures.  This is not allowed.  If the error
DECsystem-10 SIMULA Language Handbook, part II           Page 168
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         cannot be traced to subroutines outside the SIMULA
         system, report to the SIMULA maintenance group.


ZYQ217   RTS logic error

         EXPLANATION:  This message indicates that the run time
         system has encountered a situation with which it cannot
         cope, i e the data structures are inconsistent or a
         coding error exists in the RTS.

         USER ACTION:  Report to the SIMULA maintenance group,
         after making the checks suggested for ZYQ016.


         SIMDDT DIAGNOSTICS


         The messages starting with ZYD apply to the SIMDDT
         system.
         Some of the messages ZYD001 to ZYD177 may also appear.
         The description is found in the corresponding ZYQ entry,
         ZYD signals that the error occurred while SIMDDT was
         active.  SIMDDT uses some of the RTS routines, e.g.  the
         GETINT routine which is called when an integer is
         expected in the input command.  If no integer is found
         the message ZYD165 is issued.  Note that SIMDDT
         processing may continue in most cases.


         SIMDDT will output the command followed by an
         appropriate message when an error is detected in an
         input command.  The input command will be reproduced up
         to and including the last character that was analysed by
         SIMDDT.


?ZYD476 ERROR WHILE INITIATING SIMDDT

         EXPLANATION:  It was not possible to initiate SIMDDT and
         processing can not continue.

         USER ACTION:  Report the problem to the SIMULA
         maintenance group.


?ZYD477 ERROR WHILE PROCESSING ERROR

         EXPLANATION:  A new error was detected while SIMDDT was
         processing an error.  It is not possible to continue.
DECsystem-10 SIMULA Language Handbook, part II           Page 169
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         USER ACTION:  Report the problem to the SIMULA
         maintenance group.


         INFORMATION TEXT

         The messages ZYD500 to ZYD547 are used in SIMDDT to
         create information text.  The ZYDnnn number is
         suppressed.


ZYD500   CHAR


ZYD501   =


ZYD502   CURRENT BLOCK POINTER AT LINE

         EXPLANATION:  The approximate line on which the current
         block starts is given after each INSPECT command.  


ZYD503   LENGTH=


ZYD504   POS=


ZYD505   SUBTEXT STARTS AT POSITION=


ZYD506   TERMINATED


ZYD507   INSPECT BLOCK


ZYD510   PREFIXED BLOCK


ZYD511   EVTIME=


ZYD512   TO CONTINUE TYPE PROCEED

         EXPLANATION:  This message is issued after the error
         message for errors where a possibility to continue
         exist.
DECsystem-10 SIMULA Language Handbook, part II           Page 170
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD513   GIVE NEW INPUT LINE TO REPLACE THE LINE GIVEN ABOVE:

         EXPLANATION:  This message is output after PROCEED after
         an error with continuation code = QDSNIM.


ZYD514   GIVE NEW INTEGER ARGUMENT:

         EXPLANATION:  This message is output after PROCEED after
         an error with continuation code =QDSNIN.


ZYD515   FILE:


ZYD516   CLOSED


ZYD517   PROCEDURE VALUE


ZYD540   SIMDDT STARTED

         EXPLANATION:  This message is issued before any user
         program statement has been executed.  SIMDDT and SIMRTS
         are initialized.

         USER ACTION:  Issue a HELP, set breakpoint, USE or
         PROCEED command.

         SIMDDT ACTION:  SIMDDT outputs an asterisk (*) on a new
         line and waits for a command.  User program execution
         will commence when SIMDDT receives a PROCEED command.


ZYD541   ?  ERROR IN JOB

         EXPLANATION:  When an error occurs SIMDDT is invoked and
         an error message is routed both to TTY and SYSOUT.  The
         line on which the error occurred will be given and a
         ZYQnnn message will follow.

         USER ACTION:  To get information on the cause of the
         error the user can issue any of the commands OUTPUT,
         CHAIN, SCHEDULED, USE and ALL.  The EXIT command should
         be issued to terminate the program and close all files.
         ^C can be used to exit without closing any files.
DECsystem-10 SIMULA Language Handbook, part II           Page 171
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD542   DETACHED


ZYD543   NO SCHEDULED PROCESSES


ZYD544   SCHEDULED PROCESSES


ZYD545   OPERATING CHAIN


ZYD547   VARIABLES


ZYD550   LINE OVERFLOW ON INPUT

         EXPLANATION:  A maximum of 135 characters are allowed in
         the input command.

         USER ACTION:  Give new command.

         SIMDDT ACTION:  Command is not processed.


ZYD551   COMMAND NOT RECOGNIZED

         EXPLANATION:  Either the command is misspelled or the
         name given is not unique.  Example:  The INPUT command
         must be given as INP while OUTPUT can be shortened to a
         single O.  SIMDDT has a table of all special keywords
         and IN is one of them.


ZYD552   NOT VALID IN DEBUG MODE


ZYD553   NOT VALID IN ERROR MODE

         EXPLANATION:  It is not possible to continue processing
         after an error with a zero continuation code has
         ocurred.  The set breakpoints, INPUT, REMOVE and PROCEED
         commands cannot be used.


ZYD554   PROCEED NOT ALLOWED AFTER THIS ERROR OR AFTER A
         NOPROCEED COMMAND

         EXPLANATION:  PROCEED in error mode is allowed only for
         errors with a non zero continuation code (i.e.  errors
         starting with xxERC not xxERR in the error message,
DECsystem-10 SIMULA Language Handbook, part II           Page 172
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         where xx is a module name).


ZYD556   ASSIGNMENT TO SYSTEM PROCEDURE IS NOT POSSIBLE

         EXPLANATION:  System procedures are not allowed as left
         hand side operands.  The only exception is text.MAIN.


ZYD557   TEXT ATTRIBUTE IS NOT MAIN

         EXPLANATION:  The only text attribute handled by SIMDDT
         is MAIN.


ZYD560   IDENTIFIER IS A LABEL

         EXPLANATION:  Labels are not handled by SIMDDT.

         SIMDDT ACTION:  Command is ignored.


ZYD561   IDENTIFIER IS A NAME PARAMETER

         EXPLANATION:  Parameters of mode name are not handled by
         SIMDDT.

         SIMDDT ACTION:  Command is ignored.


ZYD562   IDENTIFIER IS A PROCEDURE, NOT HANDLED BY SIMDDT IN THIS
         SITUATION

         EXPLANATION:  Procedures handled by SIMDDT are MAIN,
         SYSIN, SYSOUT, FIRST, LAST, SUC, PRED, PREV, EVTIME,
         NEXTEV, TIME and CURRENT.
         A type procedure identifier is handled by SIMDDT if the
         current block is the procedure block.  The identifier
         can however not be used in connection with the IF and
         the IFCHANGED features in a breakpoint command or on the
         right hand side in an INPUT command.

         SIMDDT ACTION:  Command is ignored.


ZYD563   IDENTIFIER IS A CLASS

         EXPLANATION:  Class identifier can only be handled by
         SIMDDT in connection with the relation operators IS and
         IN or the keywords THIS and QUA.
DECsystem-10 SIMULA Language Handbook, part II           Page 173
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         SIMDDT ACTION:  Command is ignored.


ZYD564   IDENTIFIER IS UNDEFINED

         EXPLANATION:  The identifier is not in the symbol table.

         SIMDDT ACTION:  Command is ignored.


ZYD565   DOT NOTATION ONLY VALID WITH REF OR TEXT

         SIMDDT ACTION:  Command is ignored.


ZYD566   IDENTIFIER EXPECTED IN INPUT

         SIMDDT ACTION:  Command is ignored.


ZYD567   IDENTIFIER NOT VISIBLE IN SYMBOL TABLE

         EXPLANATION:  
         1) The identifier name is misspelled
         2) The identifier is not visible from the current
         program block (CB).  For an INPUT or OUTPUT command CB
         is the block in which program execution was interrupted
         or the block which the CB was moved to with the INSPECT
         command and for a breakpoint command CB is the block
         which contains the statement referenced via the line
         number.  Note that no identifiers can be reached via the
         OUTPUT or INPUT commands before the user program has
         been started.
         3) The generation of linenumber or symbol table was
         suppressed during compilation.

         SIMDDT ACTION:  Command is ignored.


ZYD570   SUBSCRIPTS VALID ONLY WITH ARRAY IDENTIFIER

         SIMDDT ACTION:  Command is ignored.


ZYD571   SUBSCRIPTS MISSING AFTER ARRAY IDENTIFIER

         SIMDDT ACTION:  Command is ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 174
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD572   , OR ) OR ] EXPECTED AFTER SUBSCRIPTS

         SIMDDT ACTION:  Command is ignored.


ZYD573   ATTRIBUTE IDENTIFIER EXPECTED AFTER DOT

         SIMDDT ACTION:  Command is ignored.


ZYD574   WRONG NUMBER OF SUBSCRIPTS IN IDENTIFICATION

         EXPLANATION:  When an array element is referenced in a
         breakpoint command the number of subscripts cannot be
         checked until the breakpoint statement is reached.

         SIMDDT ACTION:  The breakpoint command is removed.  


ZYD575   SUBSCRIPT LESS THAN LOWER BOUND

         SIMDDT ACTION:  See previous message.


ZYD576   SUBSCRIPT GREATER THAN UPPER BOUND

         SIMDDT ACTION:  See previous message.


ZYD577   END OF INPUT OR COMMA EXPECTED

         EXPLANATION:  The COMMA should precede the next
         identification.


ZYD600   NO MORE FREE WORK AREA , REMOVE BREAKPOINTS

         EXPLANATION:  The area in which an internal form of the
         breakpoint commands are saved is full.

         SIMDDT ACTION:  The new command is ignored.

         USER ACTION:  Give a STOP BREAKS command and REMOVE the
         less useful breakpoints.


ZYD601   QUALIFICATION ERROR (NONE?)

         EXPLANATION:  A common error is that a reference type
         variable used via dot notation has the value NONE.
DECsystem-10 SIMULA Language Handbook, part II           Page 175
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         SIMDDT ACTION:  See message ZYD574.


ZYD602   RELATION OPERATOR EXPECTED

         EXPLANATION:  The keyword IF has been found in the
         command and a <RELATION OPERATOR> is expected after the
         identification.

         SIMDDT ACTION:  Command is ignored.


ZYD603   END OF INPUT EXPECTED

         EXPLANATION:  This is often a command syntax error.

         SIMDDT ACTION:  An AT or BREAKS command is ignored.  An
         INPUT command is processed.


ZYD604   MORE THAN ONE LOOP COUNTER

         SIMDDT ACTION:  Command is ignored.


ZYD605   INVALID LOOP COUNTER VALUE

         SIMDDT ACTION:  Command is ignored.


ZYD606   NO MORE FREE BREAKPOINT ENTRIES

         EXPLANATION:  The maximum number of different
         breakpoints that can be set up is 20.

         SIMDDT ACTION:  The new breakpoint command is ignored.

         USER ACTION:  Use STOP BREAKS and remove some of the
         uninteresting breakpoints.


ZYD611   COLON MISSING AFTER MODULE NAME

         SIMDDT ACTION:  Command is ignored.


ZYD612   CHARACTER CONSTANT, CLOSING ' MISSING

         SIMDDT ACTION:  Command is ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 176
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD613   := OR :- EXPECTED

         EXPLANATION:  The INPUT command must contain an
         assignment operator.

         SIMDDT ACTION:  Command is ignored.


ZYD614   DENOTES ONLY VALID AFTER REF OR TEXT VARIABLE

         SIMDDT ACTION:  Command is ignored.


ZYD615   := NOT VALID AFTER REF VARIABLE

         SIMDDT ACTION:  Command is ignored.


ZYD616   TEXT VALUE CONSTANT NOT VALID IN TEXT REFERENCE
         ASSIGNMENT

         SIMDDT ACTION:  Command is ignored.


ZYD617   DIFFERENT TYPES IN INPUT COMMAND

         EXPLANATION:  No conversion between real and integer or
         vice versa is made by SIMDDT.  The types must be equal
         except for LONG REAL and REAL variables which can be
         mixed.

         SIMDDT ACTION:  Command is ignored.


ZYD620   NO BREAKPOINT

         EXPLANATION:  No breakpoint has been set at the
         statement specified via the linenumber.

         SIMDDT ACTION:  Command is ignored.


ZYD621   AT OR END OF INPUT EXPECTED

         SIMDDT ACTION:  Command is ignored.


ZYD622   REMOVE OR END OF INPUT EXPECTED

         EXPLANATION:  The command STOP BREAKS was given.
DECsystem-10 SIMULA Language Handbook, part II           Page 177
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         SIMDDT ACTION:  The last listed breakpoint command is
         kept.


ZYD623   SIMDDT ENTERED, PROGRAM INTERRUPTED AT

         EXPLANATION:  The program was interrupted, probably via
         ^C and then entered via the REENTER monitor command.
         This message also appears when the program was entered
         via the CONTINUE command after program exit.  The SIMRTS
         routine fetched SIMDDT from disk if it was not already
         started and entered SIMDDT.  This feature can be used to
         detect where a program is looping.


ZYD625   FINAL " MISSING IN TEXT CONSTANT

         SIMDDT ACTION:  Command is ignored.


ZYD626   LENGTH OF RIGHT HAND SIDE > LEFT HAND SIDE IN TEXT VALUE
         ASSIGNMENT

         SIMDDT ACTION:  Command is ignored.


ZYD627   ATTRIBUTE IDENTIFIER NOT FOUND IN SYMBOL TABLE

         SIMDDT ACTION:  The input command up to the last
         character which has been processed by SIMDDT is written
         to the TTY to help the user find the invalid attribute
         identifier.  Command is ignored.


ZYD630   IDENTIFICATION OR CONSTANT OF CORRECT TYPE EXPECTED IN
         INPUT

         EXPLANATION:  See message ZYD617.  No type conversion is
         done by SIMDDT.

         SIMDDT ACTION:  Command is ignored.


ZYD631   TYPE ERROR IN DYNAMIC RECORD

         EXPLANATION:  This message should not normally be given.
         One of the dynamic records in the storage pool has a
         type which is not recognized by SIMDDT.  The message may
         appear while processing the VARIABLES or the ALL
         commands.
DECsystem-10 SIMULA Language Handbook, part II           Page 178
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         SIMDDT ACTION:  Command processing is terminated.

         USER ACTION:  If you cannot explain the error, e.g.  use
         of MACRO 10 procedures, use of the switches -A or -Q in
         compilation of the main program or any external
         procedure or class, please report the problem to the
         SIMULA maintenance group.


ZYD632   GARBAGE COLLECTOR NOT CALLED BEFORE VARIABLES TYPED

         EXPLANATION:  SIMDDT will call the garbage collector
         routine unless the /-GC switch, the program was
         interrupted (see ZYD623) or a critical error occurred
         (e.g.  storage allocation error).


ZYD635   SIMDDT IN DEBUG MODE AND USE FILE USED BY USER PROGRAM

         EXPLANATION:  It is only possible to let SIMDDT continue
         to write on an open user file if an error has occurred.

         SIMDDT ACTION:  Command is ignored.


ZYD636   INVALID MODULE NAME

         EXPLANATION:  MAIN or the SIMULA name of a separately
         compiled class or procedure are valid module names.

         SIMDDT ACTION:  Command is ignored.


ZYD637   LINE NUMBER NOT FOUND IN TABLE

         EXPLANATION:  The line is not found in the current line
         number table.  That is the line number table found via
         the module name if any, or found via the module in which
         the current block is placed.  The line number must fall
         within the table but if no exact match is found the
         first larger number is chosen.  One reason may be that
         the source module was compiled with the switch -I.

         SIMDDT ACTION:  Command is ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 179
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD640   NO MORE WORK AREA FOR TEXT OR REF VARIABLE, REMOVE
         BREAKPOINTS 

         EXPLANATION:  The number of text and ref identifiers
         which can be used in the breakpoint commands is limited.

         SIMDDT ACTION:  The command is ignored.

         USER ACTION:  See message ZYD600


ZYD641   IDENTIFIER AND OPERATOR INCOMPATIBLE

         SIMDDT ACTION:  Command is ignored.


ZYD642   VALID CLASS IDENTIFIER EXPECTED

         EXPLANATION:  The class identifier must follow the IS or
         IN operator in the breakpoint command or the keywords
         THIS and QUA.  A class identifier must be declared in
         the same module in which the breakpoint is placed.

         SIMDDT ACTION:  Command is ignored.


ZYD643   REF OR ARRAY VARIABLE NOT INITIALIZED

         EXPLANATION:  An unusual situation has occurred.  The
         user program execution was interrupted while setting up
         a dynamic record.


ZYD644   COMMAND NOT ALLOWED WHEN PROGRAM EXECUTION WAS
         INTERRUPTED

         EXPLANATION:  There are some command restrictions when
         SIMDDT was entered after the user program was
         interrupted.  The restrictions hold only when the
         message ZYD623 was given at entry to SIMDDT.  The USE
         command, the DISPLAY command, the @ command and a set
         breakpoint command which contains a text constant are
         not allowed as they may lead to a garbage collection.

         USER ACTION:  Find a statement in the program which will
         be executed immediately or very soon after the
         interrupted point.  Set a STOP AT breakpoint there and
         PROCEED to it.

         A hint:  INSPECT/START will tell you where your program
         was interrupted.  Try to set a breakpoint on the next
DECsystem-10 SIMULA Language Handbook, part II           Page 180
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


         line!


ZYD645   CURRENT BLOCK IS TERMINATED

         EXPLANATION:  It is an unusual case that the current
         block is terminated.

         SIMDDT ACTION:  The garbage collection is inhibited.


ZYD646   USE FILE IS NOT AN OUTFILE

         EXPLANATION:  The use file is used by the program but it
         is not an outfile.

         SIMDDT ACTION:  Command is ignored.


ZYD647   - OR END OF LINE EXPECTED

         EXPLANATION:  Line or line interval expected in DISPLAY
         command.

         SIMDDT ACTION:  Command is ignored.


ZYD650   LINE INTERVAL ERROR

         EXPLANATION:  Line or line interval is not correct in a
         DISPLAY command.

         SIMDDT ACTION:  Command is ignored.


ZYD651   LINE NOT FOUND IN MODULE

         EXPLANATION:  The line or lines that were requested in a
         DISPLAY command was not found in the source program
         file.  


ZYD652   /RETURN OR /UP NOT ALLOWED

         EXPLANATION:  The command INSPECT /RETURN or /UP is not
         valid if the current block is terminated or /RETURN
         given when the current block is a detached class
         instance.

         SIMDDT ACTION:  The current block is unchanged.
DECsystem-10 SIMULA Language Handbook, part II           Page 181
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD653   KEYWORD EXPECTED AFTER /

         EXPLANATION:  /UP, /RETURN, /START or /RESET expected in
         the INSPECT command.

         SIMDDT action:  Command is ignored.


ZYD654   OBJECT REFERENCE EXPECTED

         EXPLANATION:  Object reference or /keyword expected in
         an INSPECT command.  This message is also given when the
         object reference variable has the value NONE.

         SIMDDT ACTION:  Command is ignored.


ZYD655   VALUE NOT ACCESSIBLE FROM TERMINATED BLOCK

         EXPLANATION:  The only variables that are accessible in
         a terminated class instance are the class attributes.

         SIMDDT ACTION:  Command is ignored.


ZYD656   * NOT VALID

         EXPLANATION:  * not valid after IF or IFCHANGED in a
         breakpoint command.

         SIMDDT ACTION:  Command ignored.


ZYD657   CLOSE OR END OF INPUT EXPECTED

         EXPLANATION:  The command STOP CLOSE was given.

         SIMDDT ACTION:  The file name is given again.

         USER ACTION:  Answer CLOSE or carriage return.


ZYD660   YOU MAY ISSUE THE NOPROCEED COMMAND AND REENTER CURRENT
         COMMAND AGAIN



SIMDDT ACTION:  Command is ignored.
DECsystem-10 SIMULA Language Handbook, part II           Page 182
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD661   INVALID KEYWORD AFTER / IN OUTPUT, VARIABLES OR ALL
         COMMAND

         EXPLANATION:  /-ARRAY, /-TEXT and /-GC are allowed.

         SIMDDDT ACTION:  Rest of command ignored.


ZYD662   SIMDDT EXPECTS INPUT FROM TERMINAL:

         EXPLANATION:  End of input file found.


ZYD663   SIMDDT ENTERED AT A BREAKPOINT

         EXPLANATION:  The program was interrupted via the
         control-C-REENTER monitor commands.


ZYD664   NO TYPE PROCEDURE

         EXPLANATION:  Only type procedure identifiers can be
         handled by SIMDDT.


ZYD674   BREAKPOINT UUO FOUND, BUT BREAKPOINT NOT KNOWN TO SIMDDT

         EXPLANATION:  It is probably a SIMDDT error.


ZYD675   SIMDDT TERMINATION ERROR

         SIMDDT ACTION:  The program is terminated.

         USER ACTION:  Report the problem to the SIMULA
         maintenance group.


ZYD676   INVALID MESSAGE NUMBER

         EXPLANATION:  An message number that is new to the
         SIMDDT program has been detected.  The unknown message
         number is placed at the start of this message, e.g.
         ZYD700 ZYD676 INVALID MESSAGE NUMBER

         USER ACTION:  Report the problem to the SIMULA
         maintenance group.
DECsystem-10 SIMULA Language Handbook, part II           Page 183
APPENDIX D.2 RUN-TIME AND DEBUG DIAGNOSTICS


ZYD677   COMMAND OR FEATURE NOT IMPLEMENTED

         EXPLANATION:  The command is recognized but the
         implementation is not part of this version of SIMDDT.

         SIMDDT ACTION:  The command is ignored.




    END OF RUN-TIME AND DEBUG DIAGNOSTICS
DECsystem-10 SIMULA Language Handbook, part II           Page 184
APPENDIX E HOW TO WRITE AN EXTERNAL FORTRAN OR MACRO-10 PROCEDURE





APPENDIX E HOW TO WRITE AN EXTERNAL FORTRAN OR MACRO-10 PROCEDURE
=================================================================


     The handling of external FORTRAN and MACRO-10 procedures may
     be visualized by the aid of the following figure which shows
     the relation between the processors and files involved:


                             proc.sim            proc.for/mac
                                !                     !
                                v                     v
                        -----------------    ------------------
                        [SIMULA COMPILER]    [FORTRAN/MACRO-10]
                        -----------------    ------------------
                                !                     !
                                v                     !
                             proc.atr                 !
                                !                     !
                                v                     !
                        -----------------             !
             main.sim-->[SIMULA COMPILER]             !
                        -----------------             !
                                !                     !
                                !                     !
                                v       --------      v
                             main.rel-->[LOADER]<--proc.rel
                                        --------
                                           !
                                           v
                                        main.sav


     IMPORTANT:  The .ATR and .REL file names for an external
     FORTRAN or MACRO-10 procedure should be identical except for
     the extension, and should be stored under the same ppn.  If
     they are stored in library files, the libraries should be
     identical except for the extension (.ATR for ATR-file
     libraries and .REL for REL-file libraries) and be stored
     under the same ppn.
DECsystem-10 SIMULA Language Handbook, part II           Page 185
APPENDIX E.1  EXTERNAL FORTRAN PROCEDURES.


E.1  EXTERNAL FORTRAN PROCEDURES


     To create an attribute file, a corresponding procedure
     heading must be compiled by the SIMULA compiler.  Preceding
     the procedure heading there must be an OPTIONS statement of
     the form:

             OPTIONS(/nEXTERNAL:codeword,entry);

     where codeword is FORTRAN or F40.  FORTRAN signals that the
     procedure is compiled with the FORTRAN-10 compiler and F40
     that the procedure is compiled with the old FORTRAN
     compiler.
     The entry point of the procedure is named "entry".  It is
     the same as the name of the SUBROUTINE or FUNCTION in the
     FORTRAN program.

     *****  IMPORTANT:  You are strongly recommended to use the
     same identifier for the following entities:

   > The "entry" in the OPTIONS statement above,
   > The name of the FORTRAN SUBROUTINE or FUNCTION,
   > The name of the FORTRAN source program file,
   > The name of the SIMULA specification file (containing the
     SIMULA heading corresponding to the FORTRAN SUBROUTINE),
   > The SIMULA name for the procedure,
     even though certain combinations where some of these
     identifiers are different will sometimes work.

     Parameter restrictions:
     Only the types ( SHORT ) INTEGER, ( LONG ) REAL, CHARACTER
     and BOOLEAN can be transmitted.  An argument of type
     CHARACTER should be treated as an integer in the FORTRAN
     program.

     Allowed transmission modes:
     Simple types:  VALUE default, NAME optional.
     ARRAYs:  VALUE optional, reference default.

     The effect of a call by NAME is:  before the FORTRAN
     procedure is entered, the actual parameter is evaluated.  If
     it is a variable, a reference to that variable is
     transmitted, otherwise (constant or expression) the value is
     stored in a cell and a reference to that cell is
     transmitted.

     In an external FORTRAN procedure one must not use any
     facilities that demand the FORTRAN high segment (e.g.  I/O).
     However, calls to the FORTRAN high segment in FORTRAN
     subroutines to SIMULA programs can often be intercepted,
DECsystem-10 SIMULA Language Handbook, part II           Page 186
APPENDIX E.1  EXTERNAL FORTRAN PROCEDURES.


     using the programs FORSIM in the libraries LIBSIM.ATR and
     LIBSIM.REL.  You need only insert a call to these procedures
     in your SIMULA program.

     Errors may occur for FORTRAN procedures with more than one
     entry point, if parameters are passed to the procedure using
     one entry point and used by the procedure after a call to
     another entry point.

     The SIMULA compiler will generate an attribute file but no
     rel-file.
     A SIMULA procedure heading has to be compiled before the
     main program and this should be done via the COMPILE or R
     monitor commands since no rel file is generated.  Care must
     be taken when giving an EXECUTE or LOAD command to ensure
     that the correct REL files are loaded.
DECsystem-10 SIMULA Language Handbook, part II           Page 187
APPENDIX E.2  FORTRAN PROGRAMMING EXAMPLE.


E.2  FORTRAN PROGRAMMING EXAMPLE


     In this example we have a FORTRAN procedure which compares
     two real arrays of the same size.

     FORTRAN program:

                     LOGICAL FUNCTION equala(a1,a2,n)
             C
                     DIMENSION a1(n),a2(n)
             C
                     equala=.TRUE.
             C
                     DO 1 i=1,n
                     IF( a1(i) .NE. a2(i) ) GOTO 2
             1       CONTINUE
                     RETURN
             2       equala=.FALSE.
                     RETURN
                     END


     The SIMULA specification program (1):

             OPTIONS(/E:FORTRAN,equala);
             BOOLEAN PROCEDURE equala(a1,a2,n);
             ARRAY a1,a2;
             INTEGER n;;


     If we have a declaration ARRAY a,b[c:d,e:f] then

             equala(a,b,(d-c+1)*(f-e+1))

     is true if and only if the arrays a and b are equal element
     for element.






              ------------------------------------
(1) Note that the SIMULA specification  may  be  built  into  the
FORTRAN code by disguising SIMULA code as comments:
COMMENT;  OPTIONS(/E:  ....);
COMMENT;  ...
and then making the whole FORTRAN code a SIMULA comment:
COMMENT
        <FORTRAN code>
COMMENT;
DECsystem-10 SIMULA Language Handbook, part II           Page 188
APPENDIX E.3  EXTERNAL MACRO-10 PROCEDURES.


E.3  EXTERNAL MACRO-10 PROCEDURES


     To create an attribute file, a corresponding procedure
     heading (1) must be separately compiled by the SIMULA
     compiler.  The procedure heading must be preceded by an
     OPTIONS statement of one of the following forms:

             OPTIONS(/nEXTERNAL:codeword,entry);
             OPTIONS(/nEXTERNAL:codeword,checkoption,entry);

     where codeword is CODE or QUICK, checkoption is CHECK or
     NOCHECK (-CHECK is also a valid form).  Here CODE or QUICK
     signals that the procedure is written in MACRO-10.  The
     entry point is named "entry" in the MACRO-10 module.

     If checkoption is the word CHECK, or checkoption is not
     given, the SIMULA compiler will check all actual parameters.
     The exact meaning of this is:
     All parameters must be specified.  The SIMULA compiler will
     check the actual parameters versus the formal and they must
     correspond in number and have compatible types.  All
     necessary type conversions will be performed by the system.

     If checkoption is NOCHECK (-CHECK), the procedure heading
     must not specify any formal parameters, implying that the
     formal parameters are unknown to the compiler.  The compiler
     can thus not perform any parameter checking.  This implies
     the following:
     All parameters are transmitted by NAME.  The number of
     actual parameters may vary from call to call but may not
     exceed 31 (5 if codeword is QUICK).

     If codeword is CODE, the procedure is called in the same way
     as a procedure coded in SIMULA.  If codeword is QUICK,
     however, a special, very efficient calling sequence is used,
     where all parameters are passed in accumulators, and no
     procedure block is allocated.  The procedure is called
     directly without run time system intervention (see calling
     standard, E.5.1).
     - A maximum of 5 to 10 parameters, depending on the types,
     kinds and modes of actual parameters, is allowed.
     - Parameters specified PROCEDURE, LABEL or SWITCH may not be
     specified by NAME.


                     ----------------------
(1) By judicious use  of  the  comment  conventions,  the  SIMULA
specification  for  an external MACRO-10 procedure can be written
in the same file as the MACRO-10 code.  See E.6 for examples.
DECsystem-10 SIMULA Language Handbook, part II           Page 189
APPENDIX E.3  EXTERNAL MACRO-10 PROCEDURES.


     - The actual parameter corresponding to a formal parameter
     by NAME may not be an expression.  Exact type correspondence
     is required for arithmetic parameters by NAME.

     Note that QUICK,NOCHECK implies that all parameters (at most
     5) are transmitted by name, subject to the special
     restrictions on name mode parameters.

     In all cases, the SIMULA compiler will generate an attribute
     file but no rel-file.
DECsystem-10 SIMULA Language Handbook, part II           Page 190
APPENDIX E.4  MACRO-10 CALLING STANDARD.


E.4  MACRO-10 CALLING STANDARD


E.4.1  Accumulator conventions:

     At entry:

     AC17(XPDP) is a stack pointer.
     AC15(XCB)  points to the procedure instance of this call
     (see appendix B).

     When calling a RTS-routine:

     Three conventions TA1, TA2 and TA3 are used in the run-time
     system.
     For all routines:  The accumulators 0,1,2 and 16 are
     destroyed.  AC15 and AC17 must have the same value as on
     entry.
     For type TA1 routines:  All the other accumulators may also
     be destroyed.
     For type TA2 routines:  All the other accumulators are
     preserved over the call.
     For type TA3 routines:  The accumulators 3 up to N are
     preserved over the call.  N and a map of which accumulators
     point directly at dynamic objects are parameters in the
     call.  No accumulator may point into a dynamic object.


     During execution of the MACRO-10 procedure:

     If correct error diagnostics are desired, AC15 should not be
     touched inside the procedure.  AC17 may be used as push-down
     stack pointer but for no other purpose.  If any action is
     requested from the RTS which may lead to garbage collection,
     any ac's which contain pointers into the dynamic data area
     must be saved in an accumulator stack.  Note that the right
     hand side of such an ac must point to the start of a record
     in the stack.  Any offset should be in the left half or in
     another ac.  Addresses in the left halves of ac's cannot be
     relocated by the garbage collector.

     At exit:

     AC15 and AC17 must have the same value as on entry.  All the
     other ac's may be destroyed.
DECsystem-10 SIMULA Language Handbook, part II           Page 191
APPENDIX E.4  MACRO-10 CALLING STANDARD.


E.4.2  Calling sequence to "QUICK" procedures

     A MACRO-10 procedure corresponding to a specification file
     of the form
        OPTIONS(/EXTERNAL:QUICK,[,NOCHECK],entry);
        [<type>] PROCEDURE <SIMULA-name>[<parameter list>;
        <parameter specifications>;]
     is called very efficiently by a SIMULA program.


     Parameters to QUICK procedures

     All parameters are computed to accumulators, starting with
     the first ac not occupied by temporary results, normally
     XWAC1=AC3.  The representation of parameters is as shown in
     App B.3.  Depending on the specification, a parameter may
     occupy one or two ac's.  Since at most 10 ac's are
     available, this means that the maximum number of parameters
     ranges from 5 to 10.  If NOCHECK is specified, all
     parameters are transmitted by name, and since a parameter
     descriptor for a name parameter occupies two words, at most
     5 parameters may be passed.


     Entering a QUICK procedure

     After computation of parameters, the procedure is called by
     PUSHJ  XPDP,entry, where XPDP=AC17.

     If the procedure has no type (pure procedure), no
     intermediate results will exist in ac's when the procedure
     is called.  Thus the first parameter is always in XWAC1
     (AC3).  Subject to the restrictions in E.4.1, the ac's may
     be used freely within the MACRO-10 procedure.

     If the procedure is a function, i e has a type, it may be
     used in an expression, which means that temporary results
     may exist in accumulators.  Thus the first parameter may be
     in some other ac than XWAC1, and the MACRO-10 procedure must
     be told where to find the first parameter.  This is done via
     AC2 (XTAC), which is loaded with the number of the first
     parameter ac.  XTAC may thus contain the number 3, 4, etc.
     For example, the first parameter may be loaded by
     MOVE   x,(XTAC), the second by MOVE   y,1(XTAC), assuming
     single length parameters.  When only a few parameters are
     involved, they may be loaded to standard ac's (XWAC1, XWAC2,
     etc) by EXCH instructions, at the same time saving the
     standard ac's.  Any extra registers must be saved on the
     stack (XPDP) before use.  On return, unstacking is followed
     by the same EXCH instructions in reverse order.
DECsystem-10 SIMULA Language Handbook, part II           Page 192
APPENDIX E.4  MACRO-10 CALLING STANDARD.


     If NOCHECK was specified, AC2 is used to specify the number
     of actual parameters as follows:
     The left half is -n, where n is the number of actual
     parameters.  The right half contains the number of the top
     ac as explained above.  AC2 is loaded also for pure
     procedures in this case.


     Exit from QUICK procedures

     On exit from a pure procedure, nothing is assumed about the
     contents of ac's except AC15 and AC17, which must be
     preserved.  On exit from a function, however, the following
     conditions must hold:
     - The result must be in the top ac, i e the one pointed to
     by XTAC on entry.  For double length results the next ac is
     also implied.
     - AC0, AC1, AC2 and AC16 may be destroyed.
     - The parameter ac's not used for the result may be
     destroyed.
     - All other ac's must be preserved over the call.


     Restrictions

     Some restrictions are given in E.3.  Since intermediate
     results may exist in ac's, core allocation must be avoided.
     Procedures as parameters should be avoided.  Typical
     applications of QUICK procedures are:
     - Small procedures to give access to monitor information
     related to the current job, such as cpu time used, time of
     day, core available.
     - Additional text handling procedures, etc.
     Any complicated MACRO-10 procedure should be written as a
     CODE procedure.
DECsystem-10 SIMULA Language Handbook, part II           Page 193
APPENDIX E.5  STANDARD MACROS AND CONSTANTS IN MACSIM.


E.5  STANDARD MACROS


     To facilitate communication between SIMULA and MACRO-10
     programs, some macros and assembly-time constants are
     defined in the UNIVERSAL MACSIM.  They are:


             MACRO   SPECIFY(specifications)

     The argument of this macro is a list of specifications of
     the procedure and parameters.  As a result all parameters
     not called by NAME (and the function value) are directly
     accessible through their names.  Parameters called by NAME
     are operated on through the macros GETADD, GETTADD, GETAADD,
     GETVAL, ASSIGN, GETTYPE, GETKIND and SETTYPE.  SPECIFY may
     be used also for QUICK procedures if the macro QUICKPROC is
     invoked or the assembly parameter QUICK is defined > 0.


             MACRO   PROC    name,parameters

     This macro should be the first macro inside the SPECIFY
     argument.  It gives the name of the procedure and of the
     parameters.


             MACRO   VALUE     par1,par2...
             MACRO   NAME      par1,par2...
             MACRO   INTEGER   par1,par2...
             MACRO   REAL      par1,par2...
             MACRO   LONGREAL  par1,par2...
             MACRO   CHARACTER par1,par2...
             MACRO   BOOLEAN   par1,par2...
             MACRO   TEXT      par1,par2...
             MACRO   REF       par1,par2...
             MACRO   ARRAY     par1,par2...
             MACRO   PROCEDURE par1,par2...
             MACRO   LABEL     par1,par2...
             MACRO   SWITCH    par1,par2...

     These macros are valid as arguments to the SPECIFY macro.
     They specify the type, kind and mode of the parameters and
     of the procedure value.
DECsystem-10 SIMULA Language Handbook, part II           Page 194
APPENDIX E.5  STANDARD MACROS AND CONSTANTS IN MACSIM.


             MACRO   RETURN

     This macro returns control to the calling SIMULA program.


             MACRO   GETCHANNEL

     This macro expands into a call to a RTS-routine which
     reserves a free I/O-channel and returns it in AC1.  It is a
     type TA1 routine.


             MACRO   FREECHANNEL chan [,ac<16>]

     This macro returns the channel in location chan to the pool.
     ac is a temporary accumulator used by the macro.


             MACRO   INIMAGE

     This macro expands into a call to a RTS-routine which
     performs INIMAGE on the file object pointed to by AC3.  It
     is a type TA1 routine.


             MACRO   OUTIMAGE

     This macro expands into a call to a RTS-routine which
     performs OUTIMAGE on the file object pointed to by AC3.  It
     is a type TA1 routine.


             MACRO   IFEOF   ac

     This macro causes the next instruction to be skipped if
     ENDFILE=FALSE in the file object pointed to by ac.


             MACRO   IFNEOF  ac

     This macro causes the next instruction to be skipped if
     ENDFILE=TRUE in the file object pointed to by ac.
DECsystem-10 SIMULA Language Handbook, part II           Page 195
APPENDIX E.5  STANDARD MACROS AND CONSTANTS IN MACSIM.


     The following macros define access to name mode parameters.
     They should not be used in QUICK procedures.


             MACRO   GETADD  par [,N,maprh]

     This macro expands into a call to a RTS-routine which loads
     the dynamic address of a parameter called by NAME (not TEXT
     or ARRAY) to ac N+1 (AC3 if N is missing) (and ac N+2 (AC4)
     if double word).  N is the highest ac saved.  maprh is a
     list of those ac's which need relocation of their right
     halfword in case of garbage collection.  The left halfwords
     must not contain any relocatable information.  Thus the
     routine is of type TA3.


             MACRO   GETTADD par[,N,maprh]

     This macro expands into a call to a RTS-routine which loads
     the dynamic address of a TEXT parameter called by NAME.  For
     the rest see GETADD.


             MACRO   GETAADD par[,N,maprh]

     This macro expands into a call to a RTS-routine which loads
     the dynamic address of an ARRAY called by NAME.  It is the
     only way of accessing such a parameter.  For the rest see
     GETADD.


             MACRO   GETVAL  par[,N,maprh]

     This macro expands into a call to a RTS-routine which loads
     the value of a parameter called by name.  For the rest see
     GETADD.


             MACRO   ASSIGN  par,aclhs,acrhs

     This macro expands into a call to a RTS-routine which
     performs an assignment to a parameter called by NAME.  The
     dynamic address of the parameter has previously been
     computed to AC aclhs (and aclhs+1 if dynamic address is 2
     words).  The value to be assigned has been computed to AC
     acrhs (and acrhs+1 if doubleword value).  The SIMRTS-routine
     performs all necessary type conversion and qualification
     checking.  It is a type TA2 routine.
DECsystem-10 SIMULA Language Handbook, part II           Page 196
APPENDIX E.5  STANDARD MACROS AND CONSTANTS IN MACSIM.


             MACRO   GETTYPE ac,par

     This macro loads ac with the type of an actual parameter
     called by NAME.


             MACRO   GETKIND ac,par

     This macro loads ac with the kind of an actual parameter
     called by NAME.


             MACRO   SETTYPE typ,par[,ac<16>]

     This macro sets the formal type to typ for a parameter
     called by NAME.  It is used to force type conversion in
     GETVAL and ASSIGN.  ac is a temporary accumulator.


     The macros GETTYPE, GETKIND and SETTYPE are useful in
     NOCHECK procedures.


     The following macros can be used in procedures called with
     all parameters in ac's (QUICK procedures):

             MACRO   QUICKPROC

     This macro should be called directly after "search MACSIM"
     in a QUICK procedure.  It defines QUICK=1.




     Some useful constants:


             CONSTANT   QNOTYPE
             CONSTANT   QINTEGER
             CONSTANT   QREAL
             CONSTANT   QLONGREAL
             CONSTANT   QCHARACTER
             CONSTANT   QBOOLEAN
             CONSTANT   QTEXT
             CONSTANT   QREF
             CONSTANT   QLABEL

     These constants define the type codes.


             CONSTANT   QSIMPLE
DECsystem-10 SIMULA Language Handbook, part II           Page 197
APPENDIX E.5  STANDARD MACROS AND CONSTANTS IN MACSIM.


             CONSTANT   QARRAY
             CONSTANT   QCLASS
             CONSTANT   QPROCEDURE

     These constants define the kind codes.  SWITCH has type
     QLABEL and kind QPROCEDURE.




             CONSTANT   NONE

     This constant defines the representation of the object
     constant NONE.


             CONSTANT   IMAGE

     This constant defines the offset of the attribute IMAGE in a
     file object.
DECsystem-10 SIMULA Language Handbook, part II           Page 198
APPENDIX E.6  MACRO-10 PROGRAMMING EXAMPLES.


E.6  MACRO-10 PROGRAMMING EXAMPLES


E.6.1  Example on CODE procedures

     In this example we have a MACRO-10 procedure which performs
     a summation utilizing Jensens device.


     The file contains both the SIMULA specification and the
     MACRO-10 code.  Note the use of COMMENT and !.  Since
     COMMENT in MACRO-10 is terminated by a second occurrence of
     the first non-blank character following the word COMMENT,
     the whole SIMULA heading is taken to be a comment by the
     MACRO-10 compiler.  In MACRO-10, a semicolon turns the rest
     of a line into a comment.  If every semicolon in the
     MACRO-10 code part is followed by !, the MACRO-10 code is
     regarded as a series of comments by SIMULA.  The last
     comment is terminated by the semicolon following END.  The
     file extension should be .MAC, which means that the SIMULA
     specification must be compiled via .R SIMULA, since the MAC
     extension forces MACRO-10 to be used if a COMPILE, EXECUTE,
     or DEBUG command is issued.


             COMMENT * SIMULA specification;
             OPTIONS(/E:CODE,CHECK,sument);
             REAL PROCEDURE sum(m,n,f,i);
             NAME f,i;
             REAL f;
             INTEGER m,n,i;

             COMMENT The corresponding SIMULA code would be:

     !      BEGIN
     !         REAL s;
     !         FOR i:=m STEP 1 UNTIL n DO
     !         s:=s+f;
     !         sum:=s;
     !      END;
DECsystem-10 SIMULA Language Handbook, part II           Page 199
APPENDIX E.6  MACRO-10 PROGRAMMING EXAMPLES.


             !*;! MACRO-10 code !*;!

             TITLE   sum
             SEARCH  macsim
             ENTRY   sument

             SPECIFY<
                     PROC    sum,<m,n,f,i>
                     NAME    f,i
                     REAL    sum,f
                     INTEGER m,n,i
                     >

     sument: MOVE    3,m     ;! Start index of loop

     loop:   CAMLE   3,n
             RETURN          ;! at end of interval
             GETADD  i,3
             ASSIGN  i,4,3
             GETVAL  f,3
             FADRM   4,sum   ;! add f into sum
             AOJA    3,loop  ;! STEP 1, go to start of loop
             END;


     Note that the END statement must not contain any start
     address.  The ENTRY statement gives the start address of the
     procedure and the start address for the main program is
     created by the SIMULA compiler.  Then sum(1,n,i,i) =
     n*(n+1)/2 and sqrt(sum(1,n,a(i)**2,i)) = length of vector a


     The following monitor commands will compile and execute the
     modules in the example (assuming MACSIM.UNV is available on
     DSK:, UNV:  or SYS:):

     .R SIMULA
     *sum.mac
     *^C
     .EXECUTE sum.mac,main

     Note that the ATR file must be generated by SIMULA before
     the EXECUTE command can be used.
DECsystem-10 SIMULA Language Handbook, part II           Page 200
APPENDIX E.6  MACRO-10 PROGRAMMING EXAMPLES.


E.6.2  Example on QUICK procedures

     This example shows how a QUICK procedure is written to
     perform a text handling task.  Refer to B.1 for the text
     variable representation.  Note that MACSIM is used with the
     assembly parameter QUICK=1.  Since the text parameter is
     used also to return the result, the procedure name is not
     used.  The dot in the procedure name avoids name clashes.
     Note also that one file, e g REST.MAC, can be compiled both
     with SIMULA and MACRO-10 through use of the comment
     conventions.  See E.6.1.


     COMMENT * SIMULA specification;

             OPTIONS(/EXTERN:QUICK,REST);
             TEXT PROCEDURE rest(t); TEXT t;
             COMMENT Computes t.sub(t.pos,t.length+1-pos);


     !*;! MACRO-10 code !*;!

             TITLE   REST
             SUBTTL  Compute text reference to text after pos
             SALL
             SEARCH  MACSIM
             ENTRY   REST
             QUICK==1
             SPECIFY<
             PROC    .REST,T
             TEXT    .REST,T
             >

     REST:   EXCH    T,(XTAC)        ;!Parameter to standard ac's
             EXCH    T+1,1(XTAC)
             HLRZ    X0,T+1          ;!Length
             SUBI    X0,(T+1)        ;! - pos + 1
             JUMPLE  X0,L1           ;!Anything left?
             HLRZ    X1,T            ;!Subtext offset
             ADDI    X1,(T+1)        ;! + pos - 1 gives
             HRLM    X1,T            ;!New offset
             HRLZM   X0,T+1          ;!New length, Pos=1
             GOTO    L2
     L1:     SETZB   T,T+1           ;!NOTEXT
     L2:     EXCH    T+1,1(XTAC)
             EXCH    T,(XTAC)
             RETURN
             END;
DECsystem-10 SIMULA Language Handbook, part II           Page 201
APPENDIX E.6  MACRO-10 PROGRAMMING EXAMPLES.


     REST could be called by the following piece of code:

     BEGIN
         EXTERNAL TEXT PROCEDURE rest;
         TEXT t1,t2;
         t1:-Copy("1234567");
         t1.setpos(5);
         t2:-rest(t1);
         Outtext("rest(t1)="); Outtext(t2); Outimage;
     END;


     The statement t2:-rest(t1) is compiled to:

             DMOVE   3,2(15) ;t1
             MOVEI   2,3     ;Indicate top ac=3
             PUSHJ   17,rest
             DMOVEM  3,4(15) ;t2


     The program output will be:

     rest(t1)=567
DECsystem-10 SIMULA Language Handbook, part II           Page 202
APPENDIX F RUN-TIME SYSTEM COMPONENTS


APPENDIX F RUN-TIME SYSTEM COMPONENTS
=====================================


     The Run-Time System contains several modules corresponding
     to files with extension MAC and the compiled REL files.  The
     most frequently used modules are loaded in the high segment,
     and the rest is loaded with the SIMULA program in the low
     segment.  In this appendix the modules are listed with their
     most important entry points, corresponding to system
     classes, procedures or special SIMULA constructs.

     The following modules are loaded in the high segment
     (SIMRTS).


     CP     handles classes and prefixed blocks.

            Subroutine          SIMULA notation

             .CPCA              CALL
             .CPDT              DETACH
             .CPNE              NEW <class identifier>
             .CPRS              RESUME
             .CPSP              <class id> BEGIN


     CS     central part, handles some run-time tasks performed
            in most SIMULA programs.


     IO and IONF perform I/O handling.

            Subroutine          SIMULA notation

             .IOBO              BREAKOUTIMAGE
             .IOCL              CLOSE
             .IOEJ              EJECT
             .IOFD              FIELD
             .IOIG              INIMAGE
             .IOLI              LASTITEM
             .IOLP              LINES PER PAGE
             .IOLT              LOCATE
             .IOOG              OUTIMAGE
             .IOOP              OPEN
             .IOSP              SPACING
DECsystem-10 SIMULA Language Handbook, part II           Page 203
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     IOED   performs I/O handling in connection with text
            handling (editing functions)

            Subroutine          SIMULA notation

             .IOIC              INCHAR
             .IOIF              INFRAC
             .IOII              ININT
             .IOIR              INREAL
             .IOIT              INTEXT
             .IOOC              OUTCHAR
             .IOOF              OUTFRAC
             .IOOI              OUTINT
             .IOOR              OUTREAL
             .IOOT              OUTTEXT
             .IOOX              OUTFIX


     PH     handles parameter transmissions for procedures.


     OCIN and OCIO initialize a SIMULA program execution, handle
            file specifications.


     OCEP   handles end of SIMULA programs, traps and UUO's and
            loads SIMDDT


     SA     handles storage allocation, garbage collection.


     SIMRT1 and SIMRT2 contain transfer vectors for references to
            the high segment from the low segment and the code to
            swap high segments.  The modules are used in the two
            high segments version of the run time system.


     SIMRTS contains the transfer vector for references to the
            high segment from the low segment.  This module is
            used in the single high segment version of the run
            time system.
DECsystem-10 SIMULA Language Handbook, part II           Page 204
APPENDIX F RUN-TIME SYSTEM COMPONENTS


            TX and TXBL perform text handling.


            Subroutine          SIMULA notation

             .TXBL              BLANKS
             .TXCY              COPY
             .TXGC              GETCHAR
             .TXGF              GETFRAC
             .TXGI              GETINT
             .TXGR              GETREAL
             .TXLT              LOWTEN
             .TXMN              MAIN
             .TXPC              PUTCHAR
             .TXPF              PUTFRAC
             .TXPI              PUTINT
             .TXPR              PUTREAL
             .TXPX              PUTFIX
             .TXRE              Value relation (e.g. T1<=T2)
             .TXSE              SETPOS
             .TXST              STRIP
             .TXSU              SUB
             .TXVA              Value assignment (e.g. T1:=T2)
DECsystem-10 SIMULA Language Handbook, part II           Page 205
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     The following modules contain routines to be loaded into the
     low segment with the SIMULA program.  The corresponding rel
     files are collected by FUDGE2 into the library file
     SIMLIB.REL.  Some routines are taken from SYS:FORLIB.  These
     are marked with an asterisk (*).



     ACOS.  ARCCOSINE single precision

            subroutine          SIMULA name
            * ACOS.             ARCCOS


     ALOG.  contains logarithm function single precision.

            subroutine          SIMULA name
            * ALOG.             LN


     ASIN.  contains ARCSINE function single precision.

            subroutine          SIMULA name
            * ASIN.             ARCSIN


     ATAN.  contains ARCTANGENT single precision.

            subroutine          SIMULA name
            * ATAN.             ARCTAN


     CFRXIT FORTRAN interface

            subroutine
            * CEXIT.            used when returning from F40
            library subroutine


     COSH.  hyperbolic COSINE single precision

            subroutine          SIMULA name
            * COSH.             COSH


     DATAN. contains ARCTANGENT double precision

            subroutine          SIMULA name
            * DATAN.            ARCTAN
DECsystem-10 SIMULA Language Handbook, part II           Page 206
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     DEXP.  contains exponential function double precision

            subroutine          SIMULA name
            * DEXP.             EXP


     DEXP.2 computes a floating point number in double precision
            raised to an integer power.

            subroutine          SIMULA notation
            * DEXP2.            A**B


     DEXP.3 computes a floating point number in double precision
            raised to a floating point number in double
            precision.

            subroutine          SIMULA notation
            * DEXP.3            A**B


     DLOG.  logarithm function double precision.

            subroutines         SIMULA name
            * DLOG.             LN


     DSIN.  contains SINE and COSINE double precision

            subroutines         SIMULA name
            * DCOS.             COS
            * DSIN.             SIN


     DSQRT. computes square root double precision.

            subroutine          SIMULA name
            * DSQRT.            SQRT


     EXIDOT FORTRAN interface

            subroutine
     * EXIT.                     Performs EXIT UUO - FORTRAN
                     program (final) exit


     EXP.   exponential function single precision

            subroutine          SIMULA name
            * EXP.              EXP
DECsystem-10 SIMULA Language Handbook, part II           Page 207
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     EXP1   calculates an integer raised to an integer power,
            single precision.

            subroutine          SIMULA notation
            * EXP1.             A**B


     EXP2   calculates a floating point number raised to a fixed
            point power.

            subroutine          SIMULA notation
            * EXP2.             A**B


     EXP3   calculates a floating point number raised to a
            floating point power, single precision.

            subroutine          SIMULA name
            * EXP3.             A**B

     FORXIT handles FORTRAN interface

            subroutine
     * EXIT                      Program exit initiated from F40
                     library subroutine


     MA     contains auxiliary mathematical subroutines.

            subroutines         function
             .MACI              convert from long real to integer
             .MACL              convert from integer to long real


     OCSP   sets up the environment for a SIMULA program, loads
            the (initial) high segment and passes control to
            OCIN.


     PHFO   handles interface between SIMULA and FORTRAN.


     PHPT   handles parameter transmission to formal, virtual and
            external MACRO-10 procedures.
DECsystem-10 SIMULA Language Handbook, part II           Page 208
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     RD     random drawing routines.

            subroutine          SIMULA name
             .RDDI              DISCRETE
             .RDDR              DRAW
             .RDER              ERLANG
             .RDHI              HISTD
             .RDHO              HISTO
             .RDLI              LINEAR
             .RDNE              NEGEXP
             .RDNO              NORMAL
             .RDPO              POISSON
             .RDRA              RANDINT
             .RDUN              UNIFORM


     SANE   allocates event notices for SIMULATION.


     SIN    contains routines to handle SINE and COSINE, single
            precision.

            subroutine          SIMULA name
            * COS.              COS
            * SIN.              SIN


     SINH   hyperbolic SINE function, single precision.

            subroutine          SIMULA name
            * SINH.             SINH


     SQRT   square root single precision

            subroutine          SIMULA name
            * SQRT.             SQRT
DECsystem-10 SIMULA Language Handbook, part II           Page 209
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     SS     implements SIMSET


            subroutine          SIMULA name
             .SSCA               CARDINAL
             .SSCL               CLEAR
             .SSEY               EMPTY
             .SSFO               FOLLOW
             .SSHD               HEAD
             .SSIT               INTO
             .SSLG               LINKAGE
             .SSLK               LINK
             .SSOU               OUT
             .SSPC               PRECEDE
             .SSPD               PRED
             .SSSC               SUC
             .SSST               SIMSET

     SU     implements SIMULATION.

            subroutine          SIMULA name
             .SUAC              ACTIVATE,REACTIVATE
             .SUAM              ACCUM
             .SUCA              CANCEL
             .SUEV              EVTIME
             .SUHO              HOLD
             .SUMA              MAIN PROGRAM
             .SUNE              NEXTEV
             .SUPA              PASSIVATE
             .SUPS              PROCESS
             .SUSI              SIMULATION
             .SUWA              WAIT


     TAN    contains TANGENT single precision

            subroutine          SIMULA name
            TAN.                 TAN


     TANH   hyperbolic TANGENT single precision.

            subroutine          SIMULA name
            * TANH.             TANH
DECsystem-10 SIMULA Language Handbook, part II           Page 210
APPENDIX F RUN-TIME SYSTEM COMPONENTS


     Run-Time module sizes (may be changed in the future).

            Module              Size(octal)

            ACOS.               55
            ALOG.               111
            ASIN.               54
            ATAN.               66
            CFRXIT              6
            COSH.               45
            CP                  370
            CS                  704
            DATAN.              141
            DEXP.               163
            DEXP.2              74
            DEXP.3              62
            DLOG.               205
            DSIN.               211
            DSQRT.              101
            EXIDOT              1
            EXP.                74
            EXP1                102
            EXP2                143
            EXP3                111
            FORXIT              5
            IO                  2411
            IOED                321
            IONF                1557
            MA                  40
            OCEP                1260
            OCIN                3445
            OCIO                545
            OCSP                367
            PH                  330
            PHFO                300
            PHPT                577
            RD                  567
            SA                  1772
            SANE                67
            SIMRT1              306
            SIMRT2              306
            SIMRTS              210
            SIN.                113
            SINH.               74
            SQRT                46
            SS                  274
            SU                  677
            TAN                 61
            TANH.               63
            TX                  2006
            TXBL                402
DECsystem-10 SIMULA Language Handbook, part II           Page 211
APPENDIX F RUN-TIME SYSTEM COMPONENTS


APPENDIX G RESERVED SIMULA WORDS AND STANDARD IDENTIFIERS
=========================================================


     The following words are reserved SIMULA words and must not
     be used for other purposes.


               ACTIVATE            LE
               AFTER               LONG
               AND                 LT
               ARRAY               NAME
               AT                  NE
               BEFORE              NEW
               BEGIN               NONE
               BOOLEAN             NOT
               CHARACTER           NOTEXT
               CLASS               OR
               COMMENT             OPTIONS
               DELAY               OTHERWISE
               DO                  PRIOR
               ELSE                PROCEDURE
               END                 PROTECTED
               EQ                  QUA
               EQV                 REACTIVATE
               EXTERNAL            REAL
               FALSE               REF
               FOR                 SHORT
               GE                  STEP
               GO                  SWITCH
               GOTO                TEXT
               GT                  THEN
               HIDDEN              THIS
               IF                  TO
               IMP                 TRUE
               IN                  UNTIL
               INNER               VALUE
               INSPECT             VIRTUAL
               INTEGER             WHEN
               IS                  WHILE
               LABEL
DECsystem-10 SIMULA Language Handbook, part II           Page 212
APPENDIX G RESERVED SIMULA WORDS AND STANDARD IDENTIFIERS


     The following words are SIMULA standard identifiers and not
     reserved words, i.e.  they may be redeclared.


          ABS               HOLD              OUTREAL
          ACCUM             IDLE              OUTTEXT
          ARCCOS            IMAGE             PASSIVATE
          ARCSIN            INCHAR            POISSON
          ARCTAN            INFILE            POS
          BLANKS            INFRAC            PRECEDE
          BREAKOUTIMAGE     INIMAGE           PRED
          CALL              ININT             PREV
          CANCEL            INREAL            PRINTFILE
          CARDINAL          INTEXT            PROCESS
          CHAR              INTO              PUTCHAR
          CLEAR             LAST              PUTFIX
          CLOSE             LASTITEM          PUTFRAC
          COPY              LENGTH            PUTINT
          COS               LETTER            PUTREAL
          COSH              LINE              RANDINT
          CURRENT           LINEAR            RANK
          DETACH            LINESPERPAGE      RESUME
          DIGIT             LINK              SETPOS
          DIRECTFILE        LINKAGE           SIGN
          DISCRETE          LN                SIMSET
          DRAW              LOCATE            SIMULATION
          EJECT             LOCATION          SIN
          EMPTY             LOWTEN            SINH
          ENDFILE           MAIN              SPACING
          ENTIER            MOD               SQRT
          ERLANG            MORE              STRIP
          EVTIME            NEGEXP            SUB
          EXP               NEXTEV            SUC
          FIRST             NORMAL            SYSIN
          FOLLOW            OPEN              SYSOUT
          GETCHAR           OUT               TAN
          GETFRAC           OUTCHAR           TANH
          GETINT            OUTFILE           TERMINATED
          GETREAL           OUTFIX            TIME
          HEAD              OUTFRAC           UNIFORM
          HISTD             OUTIMAGE          WAIT
          HISTO             OUTINT
DECsystem-10 SIMULA Language Handbook, part II                Page 213
APPENDIX H  SAMPLE JOB LISTINGS


APPENDIX H SAMPLE JOB LISTINGS
==============================


H.1 THE R COMMAND
     The following command cause the system to input to the compiler
     the concatenation of two source files, SRC1.SIM and SRC2.SIM.
     The compiler produces object code in the file OBJECT.REL and
     LIST.LST contains a listing of the complete input file together
     with a cross reference table.

  .R SIMULA

  *OBJECT.REL,LIST.LST=SRC1/C,SRC2

  NO ERRORS DETECTED
  *SIMPRO/C/I

         8     OPTIONS(/H);
  SIM005  W LINE     8     HELP NOT VALID IN OPTIONS STATEMENT,
                           IGNORED
 
        17     LOOP:
        18     SYSUT.OUTTEXT("WHICH RECORD?");
  SIM362  E LINE    17     IDENTIFIER SYSUT IS NOT DECLARED 
        23    LOCATION(I);
  SIM337  E LINE    23     INCORRECT NUMBER OF PARAMETERS TO LOCATION 

  ERRORS DETECTED:
      1 TYPE W MESSAGES
      2 TYPE E MESSAGES

  *^C
  .


     The last command to the compiler caused the source program
     SIMPRO.SIM to be compiled.  A cross reference listing was
     generated and named SIMPRO.LST and the created object code file
     was called SIMPRO.REL.  A line number table in the rel file was
     also generated.  The program contains errors and messages were
     output on the TTY.
DECsystem-10 SIMULA Language Handbook, part II                Page 214
APPENDIX H  SAMPLE JOB LISTINGS


H.2 THE COMPILE COMMAND
     To concatenate source files when using the COMPILE command, a
     + sign  should  be  used.   A cross reference listing of both
     source files, named SRC1.LST, will be created.

  .COMPILE/CREF SRC1+SRC2

  SIMULA:  SRC1

  EXIT

  .


H.3 THE LOAD COMMAND

     SIMPRO, the same source file  as  above,  is  compiled.   The  -W
     switch  suppresses the warning message.  The switch -A suppresses
     code for array bounds checking.  Switches  given in this  way  
     (via COMPIL) must not be separated by comma or slash.

  .LOAD SIMPRO(-W-A)

  SIMULA:  SIMPRO
   LOOP:
      SYSUT.OUTTEXT("WHICH RECORD?");
  SIM362  E LINE    17     IDENTIFIER SYSUT IS NOT DECLARED 
      LOCATION(I);
  SIM337  E LINE    23     INCORRECT NUMBER OF PARAMETERS TO LOCATION 

  ERRORS DETECTED:
      1 TYPE W MESSAGES
      2 TYPE E MESSAGES
  LINK:  Loading

  EXIT

  .
DECsystem-10 SIMULA Language Handbook, part II                Page 215
APPENDIX H  SAMPLE JOB LISTINGS


H.4 THE EXECUTE COMMAND

  .EXECUTE DF1A

  SIMULA:  DF1A
  LINK:  Loading
  [LNKXCT DF1A Execution]
  NUMBER OF RECORDS IN DF1.DAT =    49

  1 Garbage collection executed during 0 ms

  End of SIMULA program execution.
  CPU time: 1.45  Elapsed time: 7.84 

  .


H.5 THE DEBUG COMMAND

     The SIMULA compiler may also be invoked using the debug  command.
     For further examples on the use of SIMDDT see paragraph 9 of this
     appendix!

  .DEBUG DF1A

  SIMULA:  DF1A
  LINK:  Loading
  [LNKXCT DF1A Execution]
  SIMDDT STARTED 
  *P
  NUMBER OF RECORDS IN DF1.DAT =    49

  1 Garbage collection executed during 18 ms

  End of SIMULA program execution.
  CPU time: 1.41  Elapsed time: 3.60 

  .
DECsystem-10 SIMULA Language Handbook, part II                Page 216
APPENDIX H  SAMPLE JOB LISTINGS


H.6 CONTROL CARDS IN BATCH

     The $SIMULA card can be used if the SPRINT program (Spooling
     PRocessor for INpuT) is modified to recognize this control card.
     The general format of the $SIMULA card is:
     $SIMULA dev:prog.sim[PPN](SS...)/SW1/SW2.../SWn
     where
     (SS...) is processor switches in short notation
     /SW1/SW2.../SWn is the switches that control the mode of input
     interpretation and the listing of the compiled program.
     For a detailed description refer to 3.4.

     The example below illustrates how data can be input to a SIMULA
     program when the program is executing in the batch system.


  $JOB name [proj,prog]
  $PASSWORD:password
  $DECK SYSIN
  SYSIN ON DSK
  $EOD
  $SIMULA PROG.SIM(-WC)
  BEGIN
        SYSIN.IMAGE:-SYSOUT.IMAGE;
        INIMAGE;
        OUTIMAGE;
  END
  $EOD
  $EXECUTE
  *DEFAULT IS SYSIN FROM TTY
  .ASS DSK SYSIN
  $EXECUTE
  ;DSK:SYSIN created by the $DECK SYSIN card is read.
  .ASS CDR SYSIN
  $DATA
  SYSIN ON SPOOLED CDR
  $EOD
  ;The $DATA card will generate a funny named spooled CDR file.
  ;In this example SYSIN is used, but other files can be used in
  ;the same way.
  $EOJ
DECsystem-10 SIMULA Language Handbook, part II                Page 217
APPENDIX H  SAMPLE JOB LISTINGS


     When the file above on cards or on a disk file is input to SPRINT
     the following CTL file will be generated and submitted.


  .COMPIL /COMP/SIM DSK:PROG.SIM(-WC)/LIST
  .EXECUT /LINK/REL DSK:PROG.REL
  *DEFAULT IS SYSIN FROM TTY
  .ASS DSK SYSIN
  .EXECUT /LINK/REL DSK:PROG.REL
  ;DSK:SYSIN created by the $DECK SYSIN card is read
  .ASS CDR SYSIN
  .SET CDR TD9
  .EXECUT /LINK/REL DSK:PROG.REL
  ;The $DATA card will generate a funny named spooled CDR file.
  ;In this example SYSIN is used, but other files can be used in
  ;the same way.
  %FIN:: .DELETE DSK:TD9.CDR


     The job will produce the following log file:


  12:42:52 STDAT 16-OCT-74 QZ 601A7vm  SPRINT Version 1(634)
                 Running on DSK
  12:42:52 STCRD $JOB name [proj,prog]
  12:42:52 STERR %SPTEPF Extraneous Password Card Found - Ignored
  12:42:52 STCRD $DECK SYSIN
  12:42:52 STMSG File  DSK:SYSIN.  Created - 1 Cards Read - 
                1 Blocks Written
  12:42:52 STCRD $EOD
  12:42:52 STCRD $SIMULA PROG.SIM(-WC)
  12:42:53 STMSG File  DSK:PROG.SIM  Created - 5 Cards Read - 
                1 Blocks Written
  12:42:53 STCRD $EOD
  12:42:53 STCRD $EXECUTE
  12:42:53 STCRD $EXECUTE
  12:42:53 STCRD $DATA
  12:42:53 STMSG File  DSK:TD9.CDR  Created - 1 Cards Read - 
                1 Blocks Written
  12:42:53 STCRD $EOD
  12:42:53 STCRD $EOJ
  12:42:53 STSUM End of File After 26 Cards
  12:42:53 STSUM Batch Input Request Created
  12:42:58 BVERS  BATCON 10(107) INP: SUBJOB 01 OF 14
  12:42:58 BDATE  16-Oct-74
  12:42:58 BASUM  name[proj,prog] FOR **[proj,prog]
                 Log file in [proj,prog] 
                Request created at  12:42:55 16-Oct-74
                Unique: 2 Restart: 1
  12:42:58 MONTR  
  12:42:58 MONTR  .LOGIN proj/prog
DECsystem-10 SIMULA Language Handbook, part II                Page 218
APPENDIX H  SAMPLE JOB LISTINGS


  12:43:02 USER   JOB 18 QZ 601A7vm TTY76
  12:43:04 USER   Means left: -291607,50 Kr
  12:43:04 USER   [LGNJSP Other jobs same PPN]
  12:43:07 USER   1243 16-Oct-74 Wed
  12:43:12 USER   
  12:43:12 USER   QZ 601A7vm 12:43:08 TTY76
  12:43:12 USER   Job 18   User OWNER
  12:43:12 USER   .SET TIME 0
  12:43:12 MONTR  .SET TIME 300
  12:43:12 MONTR  
  12:43:12 MONTR  .SET SPOOL ALL
  12:43:13 MONTR  
  12:43:13 MONTR  ..COMPIL /COMP/SIM DSK:PROG.SIM(-WC)/LIST
  12:43:17 USER   
  12:43:17 USER   SIMULA:  PROG
  12:43:24 MONTR  
  12:43:24 MONTR  EXIT
  12:43:24 MONTR  
  12:43:24 MONTR  ..EXECUT /LINK/REL DSK:PROG.REL
  12:43:26 USER   LINK: Loading
  12:43:28 USER   [LNKXCT PROG Execution]
  12:43:29 USER   *DEFAULT IS SYSIN FROM TTY
  12:43:29 USER   DEFAULT IS SYSIN FROM TTY
  12:43:29 USER   
  12:43:29 USER   End of SIMULA program execution.
  12:43:29 USER   CPU time: 0.11 Elapsed time: 0.62 
  12:43:29 MONTR  
  12:43:29 MONTR  ..ASS DSK SYSIN
  12:43:29 MONTR  DSK assigned
  12:43:29 MONTR  
  12:43:29 MONTR  ..EXECUT /LINK/REL DSK:PROG.REL
  12:43:30 USER   LINK: Loading
  12:43:33 USER   [LNKXCT PROG Execution]
  12:43:33 USER   SYSIN ON DSK
  12:43:33 USER    
  12:43:33 USER   1 Garbage collection executed during 19 ms
  12:43:33 USER   
  12:43:33 USER   End of SIMULA program execution.
  12:43:33 USER   CPU time: 0.13 Elapsed time: 1.06 
  12:43:34 MONTR  
  12:43:34 MONTR  .
                ;DSK:SYSIN created by the $DECK SYSIN card is read
  12:43:34 MONTR  .ASS CDR SYSIN
  12:43:34 MONTR  %Logical name was in use, Spooled CDR assigned
  12:43:34 MONTR  
  12:43:34 MONTR  ..SET CDR TD9
  12:43:34 MONTR  
  12:43:34 MONTR  ..EXECUT /LINK/REL DSK:PROG.REL
  12:43:35 USER   LINK: Loading
  12:43:36 USER   [LNKXCT PROG Execution]
  12:43:37 USER   SYSIN ON SPOOLED CDR
DECsystem-10 SIMULA Language Handbook, part II                Page 219
APPENDIX H  SAMPLE JOB LISTINGS


  12:43:37 USER    
  12:43:37 USER   1 Garbage collection executed during 0 ms
  12:43:37 USER   
  12:43:37 USER   End of SIMULA program execution.
  12:43:37 USER   CPU time: 0.12 Elapsed time: 0.28 
  12:43:37 MONTR  
  12:43:37 MONTR  .
                ;The $DATA card will generate a funny named spooled
                 CDR file.
                ;In this example SYSIN is used, but other files can be
                 used in
                ;the same way.


  H.7 EXAMPLE OF CTL FILE IN BATCH

       The following CTL file was used:

   .execute df2a
   .execute df2d
   *5
   *000000
   *150
   *old end
   *160
   *new end
   *155
   *000000
   *-1


       The following LOG file was generated:
       (Only relevant parts of LOG file shown)

  14:39:15 MONTR  ..execute df2a
  14:39:22 USER   
  14:39:22 USER   SIMULA:  DF2A
  14:39:40 USER   LINK:   Loading
  14:39:40 USER   [LNKXCT DF2A Execution]
  14:39:53 USER   NUMBER OF RECORDS IN DF2.DAT =   150
  14:39:53 USER     
  14:39:53 USER   1 Garbage collection executed during 30 ms
  14:39:53 USER   
  14:39:53 USER   End of SIMULA program execution.
  14:39:53 USER   CPU time: 1.52   Elapsed time: 13.06 
  14:39:58 MONTR  
  14:39:58 MONTR  ..execute df2d
  14:40:00 USER   
  14:40:00 USER   SIMULA:  DF2D
  14:40:10 USER   LINK:   Loading
  14:40:10 USER   [LNKXCT DF2D Execution]
DECsystem-10 SIMULA Language Handbook, part II                Page 220
APPENDIX H  SAMPLE JOB LISTINGS


  14:40:10 USER   WHICH RECORD?
  14:40:10 USER   *5
  14:40:10 USER   OLD RECORD:
  14:40:10 USER   000153040110020
  14:40:10 USER   NEW RECORD:
  14:40:10 USER   *000000
  14:40:10 USER   WHICH RECORD?
  14:40:10 USER   *150
  14:40:10 USER   OLD RECORD:
  14:40:10 USER   001683100614210
  14:40:10 USER   NEW RECORD:
  14:40:10 USER   *old end
  14:40:11 USER   WHICH RECORD?
  14:40:11 USER   *160
  14:40:11 USER   OLD RECORD:
  14:40:11 USER   --NON-EXISTENT--
  14:40:11 USER   NEW RECORD:
  14:40:11 USER   *new end
  14:40:11 USER   WHICH RECORD?
  14:40:11 USER   *155
  14:40:11 USER   OLD RECORD:
  14:40:11 USER   /*
  14:40:11 USER   NEW RECORD:
  14:40:11 USER   *000000
  14:40:12 USER   WHICH RECORD?
  14:40:12 USER   *-1
  14:40:12 USER   END OF UPDATE
  14:40:12 USER     
  14:40:12 USER   1 Garbage collection executed during 11 ms
  14:40:12 USER   
  14:40:12 USER   End of SIMULA program execution.
  14:40:12 MONTR  CPU time: 0.26   Elapsed time: 2.66 
  14:40:12 MONTR  
  14:40:12 MONTR  .
DECsystem-10 SIMULA Language Handbook, part II                Page 221
APPENDIX H  SAMPLE JOB LISTINGS


  H.8 SOURCE CODE LISTING WITH ERRORS AND
             CROSS REFERENCE TABLE


     The first line of the header shows the version of the compiler
     and the creation date and time of the listing.  The second line
     contains information on the source text:  Name, PPN, creation
     date and time.  Text given in a PAGE switch will be added to the
     standard header.  The page number consists of a main number
     updated at form feeds in the source text and a secondary number
     updated at line overflow or PAGE switches.  The default value is
     55 lines per page including the header.  The BEGIN/END numbers
     are printed in the left margin.  If several BEGINs and/or ENDs
     appear on the same line, only the numbers of the first BEGIN and
     last END are printed.  Line numbers are provided if they are not
     present in the source text.  If there are faulty line numbers
     present they are replaced by correct ones.  An error message is
     inserted in the listing after the source code line to which it
     refers.  If a faulty statement covers more than one line the
     error message appears after the last faulty line.  If, on the
     other hand, there are several statements on a line the faulty one
     is marked like the one in line 22 below.
DECsystem-10 SIMULA Language Handbook, part II                Page 222
APPENDIX H  SAMPLE JOB LISTINGS


     SIMULA    1   2-OCT-1974  13:22             PAGE    1
     SIMPRO.SIM   [13,325]   2-OCT-1974  12:52  

     B1   1      BEGIN
          2 
          3 COMMENT  ***  DF2D         ***
          4    ***  THIS PROGRAM UPDATES  ***
          5    ***  RECORDS IN DF2.DAT    ***
          6 ;
          7 
          8    OPTIONS(/H);

     SIM005  W LINE     8     HELP NOT VALID IN OPTIONS STATEMENT,
                              IGNORED 

          9 
         10    REF(DIRECTFILE) FIL1;
         11    INTEGER  I;
         12    FIL1:-NEW DIRECTFILE("FIL1 DF2.DAT/I:15");
         13 
         14    INSPECT FIL1 DO
     B2  15        BEGIN
         16       OPEN(BLANKS(15));
         17    LOOP:
         18       SYSUT.OUTTEXT("WHICH RECORD?");

     SIM362  E LINE    17     IDENTIFIER SYSUT IS NOT DECLARED 

         19       SYSOUT.OUTIMAGE;
         20       SYSIN.INIMAGE;
         21       I:=SYSIN.ININT;
         22       IF I = -1 THEN GOTO 0VER;  LOCATION(I);

     SIM154  E LINE    22     MISSING BINARY OPERATOR 
     SIM362  E LINE    22     IDENTIFIER VER IS NOT DECLARED 
     SIM360  E LINE    22     INVALID OPERAND TYPE OF OPERATOR GOTO 
     SIM337  E LINE    22:1   INCORRECT NUMBER OF PARAMETERS TO
                              LOCATION 

         23       SYSOUT.OUTTEXT("OLD RECORD:"); SYSOUT.OUTIMAGE;
         24       IF ENDFILE THEN
         25          SYSOUT.OUTTEXT("--NON-EXISTENT--")
     B3  26           ELSE  BEGIN
         27          INIMAGE;
         28          SYSOUT.OUTTEXT(IMAGE.STRIP)
     E3  29              END;
         30       SYSOUT.OUTIMAGE;
         31       OUTTEXT(BLANKS(15));
         32       SETPOS(1);
         33       SYSOUT.OUTTEXT("NEW RECORD:");
DECsystem-10 SIMULA Language Handbook, part II                Page 223
APPENDIX H  SAMPLE JOB LISTINGS


     SIMULA    1   2-OCT-1974  13:22             PAGE   1-1
     SIMPRO.SIM   [13,325]   2-OCT-1974  12:52  

         34       SYSOUT.OUTIMAGE;
         35       SYSIN.INIMAGE;
         36       LOCATE(I);
         37       OUTTEXT(SYSIN.IMAGE.STRIP); OUTIMAGE;
         38       GOTO LOOP;
         39    OVER: CLOSE;
     E2  40        END;
         41    OUTTEXT("END OF UPDATE"); OUTIMAGE;
     E1  42     END


     DEFAULT SWITCHES USED


     ERRORS DETECTED:
         1 TYPE W MESSAGES
         5 TYPE E MESSAGES
DECsystem-10 SIMULA Language Handbook, part II                Page 224
APPENDIX H  SAMPLE JOB LISTINGS


     SIMULA    1   2-OCT-1974  13:22             PAGE    2
     SIMPRO.SIM   [13,325]   2-OCT-1974  12:52   CROSS REFERENCE TABLE


     BLANKS           16       31   
     CLOSE            39   
     DIRECTFILE       10       12   
     ENDFILE          24   
     FIL1             10D      12       14   
     I                11D      21       22M      36   
     IMAGE            28       37   
     INIMAGE          20       27       35   
     ININT            21   
     LOCATE           36   
     LOCATION         22   
     LOOP             17D      38   
     OPEN             16   
     OUTIMAGE         19       23       30       34       37       41
     OUTTEXT          18       23       25       28       31       33
                      37       41   
     OVER             39D  
     SETPOS           32   
     STRIP            28       37   
     SYSIN            20       21       35       37   
     SYSOUT           19       23M      25       28       30       33
                      34   
     SYSUT            18   
     VER              22   

     The cross reference table shows where identifiers  were  declared
     and used.  For each identifier the line numbers of all references
     are listed.  The line number may be  succeeded  by  one  or  more
     letters with the following meaning:

     D  line contains declaration
     E  external identifier
     M  more than one reference to same identifier on this line
DECsystem-10 SIMULA Language Handbook, part II                Page 225
APPENDIX H.9 SIMDDT EXAMPLES, PROGRAM LISTING


     SIMULA    1A(121)  30-SEP-1974  20:50     PAGE    1
     DEMDDT.SIM     [13,127]  27-SEP-1974  11:50
     B1     1   BEGIN  COMMENT simddt demonstration program;
            2       INTEGER indexb1;  REAL rb1;  BOOLEAN bb1;
            3       TEXT tb1;  TEXT ARRAY tab1[1:3];
            4   
            5       TEXT PROCEDURE p1(fip1);
            6       INTEGER fip1;
     B2     7       BEGIN
            8           p2("TYPE INPUT TEXT");
            9           p1:-Intext(fip1);
     E2    10       END p1;
           11 
           12       PROCEDURE p2(ftp2);
           13       VALUE ftp2; TEXT ftp2;
     B3    14       BEGIN
           15           Outtext(ftp2);
           16           Outimage;
     E3    17       END p2;
           18 
     B4    19       Simulation BEGIN
           20           INTEGER isb;  REF (pc) refpc;
           21 
           22           Process CLASS pc;
     B5    23           BEGIN
           24               INTEGER ipc;  LONG REAL lrpc;
           25               CHARACTER ARRAY chapc[-1:2,0:1];
           26 
           27               ls: ipc:=ipc+1;
           28               Hold (10);
           29               GOTO ls;
     E5    30           END of pc;
           31 
           32           p2("ENTER SIMULATION");
           33           isb:=10;
           34           refpc:-NEW pc;
           35           ACTIVATE refpc;
           36           REACTIVATE Current AT 100;
           37           INSPECT refpc DO
           38           lrpc:=-1;
           39           p2("EXIT SIMULATION");
     E4    40       END of simulation block;
           41   
           42       tb1:-p1(3);
           43       p2("PROGRAM IS LOOPING WHEN BB1 IS FALSE");
           44       l:IF NOT bb1 THEN GOTO l;
           45       p2("ERROR WHEN INDEXB1 IS 0");
           46       tab1[indexb1]:-tb1;
           47       p2("ERROR CORRECTED");
     E1    48   END of simddt demonstration program;
DECsystem-10 SIMULA Language Handbook, part II                Page 226
APPENDIX H.9 SIMDDT EXAMPLES, ERROR DETECTED


     ;in appendix H.9 all user input
     ;is given with lower case letters
     ;and the output from the system with
     ;upper case.
     ;
     ;Terminal dialogue, error is found
     .debug demddt/list
     LINK: Loading
     [LNKXCT DEMDDT Execution]
     SIMDDT STARTED 
     *; set breakpoints
     stop at 27 ,6 "6"
     *stop at 38 if ipc=isb
     *proceed
     ENTER SIMULATION
     STOP AT MAIN:27 "6    " ,6
     *scheduled
     SCHEDULED PROCESSES 
         EVTIME=  5.0000000E+01 PC O 022157  DETACHED MAIN:29
         EVTIME=  1.0000000E+02 MAINPROGRAM O 021517  DETACHED 
     *input chapc[0,1]:='c'
     *input  chapc[-1,0]:=' '
     *proceed
     STOP AT MAIN:38 IPC = 10
     *chain
     OPERATING CHAIN 
         PC O 022157  DETACHED MAIN:29 INSPECT BLOCK 
         PREFIXED BLOCK SIMULATION O 021502  DETACHED MAIN:37
     *output refpc.lrpc,chapc,isb
     REFPC.LRPC = 0
     CHAPC[-1:2,0:1]
         [-1,0] = CHAR 9 
         [0,1] = 'c'
     ISB = 10
     *proceed
     EXIT SIMULATION
     TYPE INPUT TEXT
     123
     PROGRAM IS LOOPING WHEN BB1 IS FALSE
     ^C
     ^C
     .reenter
     ZYD623 SIMDDT ENTERED, PROGRAM INTERRUPTED AT MAIN:43
     *input bb1:=true
     *input tab1[1]:-tb1
     *input tb1:="56"
     *proceed
      ... CONTINUING ...
     ERROR WHEN INDEXB1 IS 0
     ? ERROR IN JOB 10 AT  MAIN:46
     ZYQ002 ARRAY INDEX OUT OF BOUNDS 
DECsystem-10 SIMULA Language Handbook, part II                Page 227
APPENDIX H.9 SIMDDT EXAMPLES, ERROR DETECTED


     *variables
     VARIABLES 
     MAIN O 000243  DETACHED O 000000
         BB1 = TRUE
         TB1 == O 022132 LENGTH= 3 POS= 4 "56
         TAB1[1:3]
             [1] == O 022132 LENGTH= 3 POS= 4 "56
     INFILE O 021130  TERMINATED 
         IMAGE == O 021154 LENGTH= 72 POS= 4 "123
     PRINTFILE O 021175  TERMINATED 
         IMAGE == O 021224 LENGTH= 72 POS= 1 " 
     PREFIXED BLOCK SIMULATION O 021451  TERMINATED 
         ISB = 10
         REFPC == PC O 022101  DETACHED MAIN:29
         MAIN == MAINPROGRAM O 021466  DETACHED O 003350
     MAINPROGRAM O 021466  DETACHED O 003350
     PC O 022101  DETACHED MAIN:29
         IPC = 10
         LRPC = -1.000000000000000E+00
         CHAPC[-1:2,0:1]
             [-1,0] = CHAR 9 
             [0,1] = 'c'
     *exit
     1 Garbage collection executed during 17 ms
     End of SIMULA program execution.
     CPU time: 0.77 Elapsed time: 17.24 
     .
DECsystem-10 SIMULA Language Handbook, part II                Page 228
APPENDIX H.9 SIMDDT EXAMPLES, ERROR CORRECTED


     ;terminal dialogue, error is corrected
     ;
     .execute demddt
     LINK: Loading
     [LNKXCT DEMDDT Execution]
     ENTER SIMULATION
     EXIT SIMULATION
     TYPE INPUT TEXT
     ^C
     .reenter
     190
     ZYD623 SIMDDT ENTERED, PROGRAM INTERRUPTED AT MAIN:9
     *; enter simddt via ^C and reenter
     ; monitor commands, note that user input must
     ; be given before simddt can start
     input bb1:=true
     *input indexb1:=3
     *proceed
     PROGRAM IS LOOPING WHEN BB1 IS FALSE
     ERROR WHEN INDEXB1 IS 0
     ERROR CORRECTED
     End of SIMULA program execution.
     CPU time: 0.29 Elapsed time: 12.74 
     .continue
     ZYD623 SIMDDT ENTERED, PROGRAM INTERRUPTED AT MAIN:49
     *; enter simddt after normal program exit
     noarrays
     VARIABLES EXCEPT ARRAYS 
     ZYD632 GARBAGE COLLECTOR NOT CALLED BEFORE VARIABLES TYPED 
     MAIN O 000243  DETACHED O 000000
         INDEXB1 = 3
         BB1 = TRUE
     INFILE O 021130  TERMINATED 
         IMAGE == O 021154 LENGTH= 72 POS= 4 "190
     PRINTFILE O 021175  TERMINATED 
     PREFIXED BLOCK SIMULATION O 021502  TERMINATED 
         ISB = 10
         REFPC == PC O 022157  DETACHED MAIN:29
         MAIN == MAINPROGRAM O 021517  DETACHED O 003350
     MAINPROGRAM O 021517  DETACHED O 003350
     P2 O 022131  MAIN:33
         FTP2 == O 022142 LENGTH= 16 POS= 1 "ENTER SIMULATION"
     PC O 022157  DETACHED MAIN:29
         IPC = 10
         LRPC = -1.000000000000000E+00
     P2 O 022226  MAIN:40
         FTP2 == O 022237 LENGTH= 15 POS= 1 "EXIT SIMULATION"
     P1 O 022253  MAIN:42
         FIP1 = 3
     P2 O 022266  MAIN:9
         FTP2 == O 022277 LENGTH= 15 POS= 1 "TYPE INPUT TEXT"
DECsystem-10 SIMULA Language Handbook, part II                Page 229
APPENDIX H.9 SIMDDT EXAMPLES, ERROR CORRECTED


     P2 O 022315  MAIN:44
         FTP2 == O 022326 LENGTH= 36 POS= 1 "PROGRAM IS LOOPING
     WHEN BB1 IS FALSE"
     P2 O 022346  MAIN:46
         FTP2 == O 022357 LENGTH= 23 POS= 1 "ERROR WHEN INDEXB1
     IS 0"
     P2 O 022374  MAIN:48
         FTP2 == O 022405 LENGTH= 15 POS= 1 "ERROR CORRECTED"
     *^C
     .
DECsystem-10 SIMULA Language Handbook, part II                Page 230
APPENDIX H.9 SIMDDT EXAMPLES, TRACING


     ;terminal dialogue, use simddt for tracing
     ;
     .load demddt
     LINK: Loading
     EXIT
     .save
     Job saved
     .reenter
     SIMDDT STARTED 
     *; use simddt for program tracing
     ; set breakpoints
     at 8 fip1
     *at 14 ftp2
     *at 28 if ipc<=4
     *at 39 ifchanged refpc.lrpc
     *stop at 43 if tb1 =/=notext
     *; direct simddt output to file
     use demtra.lst
     *; list the breakpoints
     breaks
     *proceed
     ENTER SIMULATION
     EXIT SIMULATION
     TYPE INPUT TEXT
     *111
     STOP AT MAIN:43 TB1 == O 022736 LENGTH= 3 POS= 4 "111"
     *output bb1,indexb1
     BB1 = FALSE
     INDEXB1 = 0
     *input bb1:=true
     *input indexb1:=2
     *proceed
     PROGRAM IS LOOPING WHEN BB1 IS FALSE
     ERROR WHEN INDEXB1 IS 0
     ERROR CORRECTED
     1 Garbage collection executed during 0 ms
     FILE: DEMTRA CLOSED AT TERMINATION
     End of SIMULA program execution.
     CPU time: 0.71 Elapsed time: 7.72 
     ;
     ;
     ;
     ;
     .type demtra.lst
     STOP AT MAIN:43 IF TB1 =/= NOTEXT
     AT MAIN:39 IFCHANGED REFPC.LRPC
     AT MAIN:28 IF IPC <= 4
     AT MAIN:15 FTP2
     AT MAIN:8 FIP1
      
     AT MAIN:15 FTP2 == O 022574 LENGTH= 16 POS= 1 "ENTER
DECsystem-10 SIMULA Language Handbook, part II                Page 231
APPENDIX H.9 SIMDDT EXAMPLES, TRACING


     SIMULATION"
     AT MAIN:28 IPC = 1
     AT MAIN:28 IPC = 2
     AT MAIN:28 IPC = 3
     AT MAIN:28 IPC = 4
     AT MAIN:39 REFPC.LRPC = -1.000000000000000E+00
     AT MAIN:15 FTP2 == O 022671 LENGTH= 15 POS= 1 "EXIT
     SIMULATION"
     AT MAIN:8 FIP1 = 3
     AT MAIN:15 FTP2 == O 022731 LENGTH= 15 POS= 1 "TYPE INPUT
     TEXT"
     STOP AT MAIN:43 TB1 == O 022736 LENGTH= 3 POS= 4 "111"
      
     BB1 = FALSE
     INDEXB1 = 0
      
     AT MAIN:15 FTP2 == O 022760 LENGTH= 36 POS= 1 "PROGRAM IS
     LOOPING WHEN BB1 IS FALSE"
     AT MAIN:15 FTP2 == O 023011 LENGTH= 23 POS= 1 "ERROR WHEN
     INDEXB1 IS 0"
     AT MAIN:15 FTP2 == O 023037 LENGTH= 15 POS= 1 "ERROR
     CORRECTED"
DECsystem-10 SIMULA Language Handbook, part II                Page 232
APPENDIX H.9 SIMDDT EXAMPLES, BATCH  


     .type demct4.ctl
     ;
     ;
     ;
     ;simula batch job with input
     ; data placed in the control file.
     ;demddb is equal to demddt with loop
     ; removed, lines 43 and 44 start with !.
     ;simddt will be called when the error is detected
     ; and when simddt requests input the batch control
     ; system will stop the execution (? in output) and
     ; start the monitor command after the 
     ; .if (noerror) batch command.
     ;the reenter command will cause simddt
     ; to continue where it was interrupted.
     .execute demddb
     *888
     *999
     .IF (NOERROR) .GOTO OK
     .REENTER
     *;simddt  will read the commands
     *;placed after the reenter monitor
     *;command.
     *output indexb1
     *exit
     OK::.


     .submit demct4.ctl
     ;
     ;
     ;
     ;
     ;terminal dialogue, run batch job
     ;
     .type demct4.log
     .
     .
     .
     20:27:24 MONTR  .
     20:27:24 MONTR  .execute demddb
     20:27:28 USER   
     20:27:29 USER   SIMULA:  DEMDDB
     20:27:35 USER   LINK: Loading
     20:27:37 USER   [LNKXCT DEMDDB Execution]
     20:27:40 USER   ENTER SIMULATION
     20:27:40 USER   EXIT SIMULATION
     20:27:40 USER   TYPE INPUT TEXT
     20:27:40 USER   *888
     20:27:44 USER   ERROR WHEN INDEXB1 IS 0
     20:27:44 USER   
DECsystem-10 SIMULA Language Handbook, part II                Page 233
APPENDIX H.9 SIMDDT EXAMPLES, BATCH  


     20:27:44 USER   ? ERROR IN JOB 13 AT  MAIN:46
     20:27:44 USER   ZYQ002 ARRAY INDEX OUT OF BOUNDS 
     20:27:44 USER   *
                     *999
     20:27:44 BATCH  .IF (NOERROR) .GOTO OK
     20:27:45 MONTR  .REENTER
     20:27:45 USER   
     20:27:45 USER    ... continuing ...
     20:27:45 USER   *;simddt  will read the commands
     20:27:47 USER   *;placed after the reenter monitor
     20:27:47 USER   *;command.
     20:27:47 USER   *output indexb1
     20:27:48 USER   0
     20:27:48 USER   *exit
     20:27:49 USER   
     20:27:49 USER   End of SIMULA program execution.
     20:27:49 USER   CPU time: 0.25 Elapsed time: 9.04 
     20:27:49 MONTR  
     20:27:49 MONTR  .
                     OK:
     20:27:50 MONTR  .
DECsystem-10 SIMULA Language Handbook, part II                Page 234
APPENDIX H.9 SIMDDT EXAMPLES, SEPARATE COMPILATION


     SIMULA    1A(121)  30-SEP-1974  20:50     PAGE    1
     p2.SIM [13,127]  25-SEP-1974  22:22 
       
           1   OPTIONS(/EXTERNAL);
           2  PROCEDURE p2(ftp2);
           3         VALUE ftp2; TEXT ftp2;
     B1    4         BEGIN
           5               Outtext(ftp2);
           6               Outimage;
     E1    7         END of p2;
      
     SWITCHES CHANGED FROM DEFAULT:
      
        E EXTERNAL CLASS/PROCEDURE
      
     NO ERRORS DETECTED





     SIMULA    1A(121)  30-SEP-1974  20:50     PAGE    1
     DEMDDE.SIM     [13,127]  27-SEP-1974  11:50
     B1     1   BEGIN  COMMENT simddt demonstration program;
            2       INTEGER indexb1;  REAL rb1;  BOOLEAN bb1;
            3       TEXT tb1;  TEXT ARRAY tab1[1:3];
            4   
            5       TEXT PROCEDURE p1(fip1);
            6       INTEGER fip1;
     B2     7       BEGIN
            8           p2("TYPE INPUT TEXT");
            9           p1:-Intext(fip1);
     E2    10       END p1;
           11 
           12       EXTERNAL PROCEDURE p2;
           13
           14
           15
           16
     E3    17
           18
     B3    19       Simulation BEGIN
     .
     .
     .
     .
DECsystem-10 SIMULA Language Handbook, part II                Page 235
APPENDIX H.9 SIMDDT EXAMPLES, SEPARATE COMPILATION


     ;terminal dialogue, separate compilation
     ; of simula modules.
     ;
     ;when no special switches are set (see next page)
     ;the extension of the first file in the debug
     ;command determines which debug system is used.
     ;
     ;
     ;
     .debug p2,demdde
     SIMULA:p2
     SIMULA:demdde
     LINK: Loading
     [LNKXCT DEMDDE Execution]
     SIMDDT STARTED 
     *;debugging external modules
     stop at p2:6
     *proceed
     STOP AT P2:6 
     *chain
     OPERATING CHAIN 
         P2 O 022137  MAIN:33
         PREFIXED BLOCK SIMULATION O 021510  DETACHED MAIN:20
     *remove at 6
     *stop at 42
      stop at 42
     ZYD637 INVALID LINE NUMBER 
     *stop at main:42
     *proceed
     ENTER SIMULATION
     EXIT SIMULATION
     STOP AT MAIN:42 
     *output bb1
     FALSE
     *exit
     End of SIMULA program execution.
     CPU time: 0.29 Elapsed time: 11.88 
     .
DECsystem-10 SIMULA Language Handbook, part II                Page 236
APPENDIX H.9 SIMDDT EXAMPLES, BOTH DDT AND SIMDDT


     ;terminal dialogue, use of both ddt and simddt
     ;
     .debug %"debug:ddt" demddt
     LINK: Loading
     [LINKDEB DDT Execution]
         
     $g
     simddt STARTED
     *stop at 7
     *proceed
     STOP AT MAIN:7
     *;exit SIMddt and enter DDT
     ^C
     .ddt
     15/ 27030
     jrst 2,@.jbren$x
     ... CONTINUING ...
     ;simddt entered from ddt
     ;simddt still expecting command
     output bb1
     FALSE
     *;continue normal processing
     .
     .
     .
     .
DECsystem-10 SIMULA Language Handbook, part II                Page 237
APPENDIX I ERROR REPORT


APPENDIX I  ERROR REPORT
========================


     Software errors in the SIMULA system should be reported to
     SIMULA maintenance, Section 142, Swedish National Defence
     Research Institute, S-104 50 STOCKOLM 80, SWEDEN using the
     error report form on the next page (or a copy of it).

     The failing program and relevant input data (listings and,
     if necessary, convenient storage medium) should be submitted
     together with the report.  If the error can be isolated in a
     smaller and simpler program, this program should be
     submitted.

     If there has been any changes made to the SIMULA system at
     your installation, please indicate this on the error report
     and submit listings of changed software components with all
     modifications indicated.
DECsystem-10 SIMULA Language Handbook, part II                Page 238
APPENDIX I ERROR REPORT


                   DECsystem-10 SIMULA ERROR REPORT

------------------------------------------------------------------
 Send report to SIMULA maintenance, Section 142, Swedish National   
    Defence Research Institute, S-104 50, STOCKHOLM 80, SWEDEN.  
------------------------------------------------------------------
INSTALLATION:                                RELEASE NO:
CUSTOMER'S NAME:                             TELEPHONE:
ADDRESS:                                     YOUR REFERENCE:

ATTACHED TO THIS REPORT ARE:                  COMPILATION LISTING []
TTY OR LOG LISTING   []   SOURCE PROGRAM []   OBJECT PROGRAM      []
TEST MATERIAL        []            OTHER []:

PLEASE INDICATE MODIFICATIONS TO THE SIMULA SYSTEM:
NO []     YES [] COMPONENTS:

PROBLEM DESCRIPTION:


















                                                     CONTINUED []
-----------------------------------------------------------------
                   For use by FOA/ENEA:           
-----------------------------------------------------------------
PROBLEM ANALYSIS:




CORRECTIVE ACTION TAKEN:                     DATE:




CORRECTED IN RELEASE NO:
DATE FOR CUSTOMER CONTACT:
-----------------------------------------------------------------
                !  !  !  !  !  !  !  PLEASE REFER TO THIS NUMBER
REGISTRATION NO !  !  !  !  !  !  !  IN FURTHER CORRESPONDENCE.
DECsystem-10 SIMULA Language Handbook, part II           Page 239
APPENDIX J PROGRAM MEASUREMENT SYSTEM


APPENDIX J:  PROGRAM MEASUREMENT SYSTEM.
=======================================

     FQC - MEASUREMENT AND TRACING SYSTEM FOR SIMULA PROGRAMS
     ========================================================

     If a SIMULA program has been developed which will be used
     very often, e.g.  as a part in a regularly used production
     system, it is often profitable to make some efforts to
     optimize the program.

     A central and sometimes non-trivial problem in program
     optimization is to find the innermost loops of the program.
     Once the execution profile of a program is known it is
     usually easy to make it faster with a few changes such as
     modifications in processing algorithms or by using a small
     machine language subroutine.

     DEC-10 SIMULA is delivered with a frequency measurement
     system which assists in spotting frequently executed parts
     of a SIMULA program.  The system consists of two SIMULA
     programs, FQCRED and FQCLST.

     The system is used as follows:

     The program to be analyzed must have been tested well enough
     to run to normal completion.  It is read by the program
     FQCRED which produces two modified versions of it, one of
     which is a compilable SIMULA program (.FQ1+.FQ2) and the
     other a listing later used to produce the frequency listing
     (.FQD).  The modified compilable program is automatically
     compiled (.FQR), linked and started.  It will, if normally
     terminated, produce a file of measured frequencies (.FQS)
     (subsequent runs will optionally update the frequencies in
     .FQS).  This file is merged with the listing output from
     FQCRED by the program FQCLST, which produces the final
     output (.FQL).

     The user may also measure the execution time for different
     parts of his program by editing calls to a procedure Z_T(I)
     into his program.  A call with I > 0 initiates a timing
     which is ended by a call with the corresponding negative I.
     The logic is as follows:
     +100>=I>0 T0[I]:= cptime;
     -100<=I<0 J:=-I;  ACC[J]:= ACC[J]+(cptime-T0[J]);
     Calls to Z_T may be overlapping (even partly).
DECsystem-10 SIMULA Language Handbook, part II           Page 240
APPENDIX J PROGRAM MEASUREMENT SYSTEM


     For example:

     BEGIN
      ....
      Z_T(+1);------------+
      ....                |
      Z_T(+2);---------+  |
      ....             |  |
      Z_T(+3);------+  |  |
      ....          |  |  |
      Z_T(-2);------)--+  |
      ....          |     |
      Z_T(-3);------+     |
      ....                |
      Z_T(-1);------------+
      ....
     END

     The resulting CPU-times will be presented at the end of the
     result file (.FQL).  For reliable results, do not try to
     measure too small intervals (depending on the precision of
     the timing).  Note that only such measurements that yielded
     accumulated times > 0 will be printed.

     The measured program should satisfy some restrictions:


     1.  The program must not contain the identifiers Z_Q, Z_T or
         Z__.


     2.  The program should not use any files on DSK:  named
         <program name>.FQ1 .FQ2 .FQR .FQD .FQS .FQL or .FQT.


     3.  The program should terminate through its last END.  I.e.
         not through a call to Exit or via SIMDDT.
DECsystem-10 SIMULA Language Handbook, part II           Page 241
APPENDIX J PROGRAM MEASUREMENT SYSTEM


     4.  The source code lines should preferably not contain any
         internal TABs (leading TABs are OK).  If so, the
         produced frequency indicators (|) might be misplaced
         (within such a line).  TABs may be removed with .COPY
         temp.sim=prog.sim(W).


     Note that the frequency indicators will be positioned at the
     first position of the symbol counted.  Its related number
     should be interpreted as the number of times this symbol has
     been PASSED during the execution.  An indicated label (L:)
     will thus tell how many times control passed the label from
     left, excluding explicit jumps (GO TO L).

     TRACING

     By adding the switch /T to the file specification requested
     by FQCRED a trace file (.FQT) will be produced, containing
     the number of each executed (counted) statement.  This may
     be useful when debugging Simulation programs or programs
     making use of Resume/Detach.  If the program terminates with
     an error the file with logical name TRACE must be closed
     before leaving SIMDDT (*Close TRACE).

     The result file (.FQL) will contain information about the
     number of the first traced statement on each source line.
     Consecutive numbers will be indicated as xx-yy in .FQT.
     Note that the file is created in APPEND mode adding new
     traces to the end of the file.  The trace file will contain
     the first six characters of the traced symbol followed by
     its statement number.

     Adding a number to the trace switch (/T:x) will trace the
     executed statements the first x times.  Every statement
     number will be displayed (no xx-yy compacting).  X must be
     >= 0, /T:0 is equivalent to /T.

     The use of tracing will considerably increase the execution
     time of the modified program.  Thus it is not recommended to
     use timing (Z_T) together with tracing.  The tracing may be
     switched off by calling the procedure TRACEOFF.  It may be
     activated again by calling TRACEON.

     If you want to include any of your external modules in the
     analysis, run the program SIMEXP prior to FQCRED.

     The following session illustrates the use of the system on
     the SIMULA program FLOPY.SIM.

          .RUN PUB:FQCRED
DECsystem-10 SIMULA Language Handbook, part II           Page 242
APPENDIX J PROGRAM MEASUREMENT SYSTEM


          Program:flopy

          FQCRED: CPU time: 1.40]
          Running modified program: SIMULA:  FLOPY
          LINK: Loading
          [LNKXCT FLOPY Execution]

          If you want to have the result run FQCLST.
          To accumulate the frequencies just type: START

          End of SIMULA program execution.
          CPU time: 1.44 Elapsed time: 3.08 

          ; The program may also be rerun
          ; with .EX[/REL flopy.FQR]

          .RUN PUB:FQCLST

          Program:flopy

          Result on file: DSK:FLOPY.FQL

          .DIRECT/F flopy

          FLOPY.SIM    User program
          FLOPY.FQ1    Modified file part 1 (prolog)
          FLOPY.FQ2    Modified file part 2 (epilog)
          FLOPY.FQD    Edited skeleton file with bars (|)
          FLOPY.FQR    REL-file from compilation of FQ1+FQ2
          FLOPY.FQS    Frequency + timing data (binary)
          FLOPY.FQL    Result file (merged FQS+FQD)


          .TYPE flopy.fql

                  BEGIN COMMENT FREQUENCY MEASUREMENT EXAMPLE;
                      INTEGER u,k;   TEXT t;
                      z_t(+1);
               1      |1
                      WHILE Draw(0.999,u) DO u:= u+2;
            1636      |1                     |1636
                      z_t(-1);
               1      |1
                      z_t(+2);
               1      |1
                      FOR u:= 1 STEP 1 UNTIL 5000 DO
               1      |1
                      IF t = NOTEXT THEN k:=k+1;
            5000      |5000              |5000
                      z_t(-2);
               1      |1
DECsystem-10 SIMULA Language Handbook, part II           Page 243
APPENDIX J PROGRAM MEASUREMENT SYSTEM


                      z_t(+3);
               1      |1
                      FOR u:= 1 step 1 UNTIL 5000 DO
               1      |1
                      IF t == NOTEXT THEN k:=k+1;
            5000      |5000               |5000
                      z_t(-3);
               1      |1
                      z_t(+4);
               1      |1
                      FOR u:= 1 step 1 UNTIL 5000 DO
               1      |1
                      IF TRUE THEN k:=k+1;
            5000      |5000        |5000
                      z_t(-4);
               1      |1
                  END;
               1  |1

          FQC results:
          Max frequency:      5000
          Sum frequency:     31649
          No. of executions:     1

          CPU timing: Total   1.08 sec.

          Call no.    Time spent    % of runtime
              1          0.095           8.77
              2          0.499          46.08
              3          0.250          23.08
              4          0.239          22.07


     Cleaning up afterwards might be done with .DELETE *.FQ?  
DECsystem-10 SIMULA Language Handbook, part II           Page 244
APPENDIX K TECO, SOS OR EDITS ON SIMULA PROGRAMS


K.   USING TECO, SOS OR EDITS ON SIMULA PROGRAMS
     ===========================================



K.1  WHY LINE NUMBERED SIMULA SOURCE PROGRAMS?

     Run time error messages in SIMULA include the number of the
     source program line at which the error occurred.  With the
     SIMULA debugging system (SIMDDT) you can place breakpoints
     at given lines in the source pogram.

     It is possible to use SIMDDT without line numbered source
     programs.  The SIMULA compiler will then number all lines in
     the source program seqentially starting with 1.  This
     numbering is printed on source program listings produced by
     the compiler.

     However, every time you insert a new line into a source
     program, the numbers of all later lines will be changed.
     This means that you cannot always use a slightly out-of-date
     program listing to decide where to put your breakpoints or
     to find out at which line the error occurred.

     If you use line numbered source files, the line number is
     usually incremented by 10 or more between successive lines.
     This gives you the possibility to insert new lines into a
     source program without changing all following line numbers.
     An old source program listing is then often sufficient when
     debugging with SIMDDT.

     If you have a line numbered file with the line number
     incremented by 10 between successive lines, you can even
     insert more than 9 new lines between two old lines with TECO
     and SIMULA.

     You can give the new lines blank line numbers.  The SIMULA
     compiler will then assign line numbers to the blank numbered
     lines during the compilation.

     The SIMULA compiler will increment the line number by 1
     until a source line is encountered which has a number larger
     than that incremented by the SIMULA compiler.  If a file has
     three lines with numbers 140, 150 and 160, and 15 lines with
     blank number fields are put between line 140 and 150, then
     the SIMULA compiler will assign the numbers 141 to 155 to
     the new lines, and the old line 150 will be numbered 156.
     Line 160 and later lines in the source file will keep their
     original numbers.

     The algorithm in the SIMULA compiler is to compare the line
     number in the source file (if any) with the previous line
     number incremented by 1, and assign the larger of the two
     numbers to the line.
DECsystem-10 SIMULA Language Handbook, part II           Page 245
APPENDIX K TECO, SOS OR EDITS ON SIMULA PROGRAMS


     You can also let TECO or PIP renumber the file instead of
     accepting the automatic renumbering done by the SIMULA
     compiler.

     Example:

     File with 15 inserted new lines between two old lines:
     00140   comment line before insertion;
             comment first inserted line with blank line number;
             comment second inserted line with blank line number;
      . . . etc . . .
             comment 15th inserted line;
     00150   comment line after insertion;
     00160   comment line after line after insertion;

     File as numbered by the SIMULA compiler:
     00140   comment line before insertion;
       141   comment first inserted line with blank line number;
       142   comment second inserted line with blank line number;
      . . . etc . . .
       155   comment 15th inserted line;
       156   comment line after insertion;
     00160   comment line after line after insertion;

     As you can see from the example above, only one line after
     the insertion had to be renumbered by the SIMULA compiler.
     All succeeding lines keep their old numbers.


K.2  WHICH TEXT EDITOR SHOULD YOU USE?

     You may find it natural to use a line number oriented text
     editor like SOS or EDITS for line numbered files.  TECO has,
     however, the advantage of blank line numbers which means
     that there is no limit to the number of new lines you can
     insert between successive old lines in the file without
     renumbering the file.  WARNING:  SOS does not accept such
     files with blank line numbers that TECO can produce.


K.3 HOW TO USE SOS OR EDITS ON SIMULA SOURCE PROGRAMS

     When using SOS or EDITS you often split a file into several
     pages, each with its own line sequencing.  When given such a
     file, however, the SIMULA compiler will have to renumber
     parts of pages with overlapping line numbers and this might
     cause a lot of warning messages.  To avoid this you are
     advised to resequence the file monotonically by using the
     NP-command of SOS or N-command of EDITS:
                       NP <step> ,/1:/*,M
     where    2<=   step   <=entier(65535/number of lines).
     If there are less than 650 lines in your file you may
     accordingly use the default step size of 100.  The step size
     must not be 1, because the page marks that EDITS or SOS
DECsystem-10 SIMULA Language Handbook, part II           Page 246
APPENDIX K TECO, SOS OR EDITS ON SIMULA PROGRAMS


     inserts will be given line numbers by the SIMULA compiler
     and a step size of 1 would cause the rest of the file to be
     resequenced.

     If you prefer to use TECO, you should read the rest of this
     appendix.


K.4  HOW TO GIVE A FILE NEW LINE NUMBERS WITH TECO

     If you want to put line numbers on a previously unnumbered
     file, or if you want to resequence a file with new line
     numbers with the increment 10 between succeeding lines, then
     you should use the switch GENLSN with the .TECO or EB
     commands.

     Example:

     TECO simprg.sim/genlsn

     R TECO
     EBsimprg.sim/genlsn$y$$


K.5  EDITING A LINE NUMBERED FILE WITH TECO

     Editing a line numbered file is very similar to editing a
     file without line numbers.  You only have to remember that
     each line begins with a line number.  This line number is
     either five digits followed by a TAB or five spaces followed
     by a TAB.

     When you insert new lines into a file, you need not give
     them any line number.  TECO will automatically give them a
     line number of five spaces and a TAB when the file is output
     on disk.

     If you wish, you can give new lines explicit line numbers by
     inserting the new line number, followed by a tab, into the
     beginning of the new line.

     Example:

     File before editing:
     00140   Comment line before insertion;
     00150   Comment line after insertion;

     to insert a new line with blank line number you can write:
     s00150$0licomment new line to get a blank line number;$$

     to insert a new line with the line number 145 you can write:
     s00150$0li145   comment new line with line number and TAB;$$

     If you want a new line to begin with a sequence consisting
DECsystem-10 SIMULA Language Handbook, part II           Page 247
APPENDIX K TECO, SOS OR EDITS ON SIMULA PROGRAMS


     of five or less spaces or digits followed by a TAB, but do
     not want the sequence to be interpreted by TECO as a line
     number, then just insert five spaces and a TAB in front of
     that sequence.
DECsystem-10 SIMULA Language Handbook, part II           Page 248
APPENDIX L AUTOMATIC EDITING OF SIMULA PROGRAMS


     APPENDIX L AUTOMATIC EDITING OF SIMULA PROGRAMS
     ===============================================


     The SIMED program converts SIMULA source program files.  The
     program is able to


     1.  Indent the program (for better readability), and at the
         same time -

     2.  Count the number of BEGIN-END pairs.

     3.  Convert reserved words, standard and user identifiers to
         1) UPPER CASE 2) lower case or 3) Edit Case (1st char.
         upper case).

     4.  [Re]number the output file.


     Lines which become too long at indentation are split up at
     an appropriate position.  Long text constants will be split
     up according to the new, concatenated text constant format:
     "ABC"
     "DEF"

     Split up lines will not be indented properly if they contain
     BEGIN or END.  Also, numerical constants containing blanks
     may occasionally be improperly split.  The programmer is
     recommended to start source code lines with BEGIN and END
     resp.

     New command format for SIMED version 2:

     [outfile=]infile[/switches...]

     for example:

     outfile=infile/i:4/r:80/e:13200
     (Devices NUL:  and TTY:  are accepted.)

     Default switches:
     /I:4                Indent step 4.  Removes leading blanks
                         and tabs.  If negative then leading
                         blanks and tabs will be kept.

     /E:13200(UEL00)     Perform editing on the following items:
                         reserved words, standard ids, own ids,
                         Comments&Options, Text&Character
                         constants resp.  1 (U) = Upper CASE, 2
                         (L) = Lower Case, 3 (E) = Edit case, 0 =
DECsystem-10 SIMULA Language Handbook, part II           Page 249
APPENDIX L AUTOMATIC EDITING OF SIMULA PROGRAMS


                         no change.

     /R:80               Outfile record length 80.

     Other switches:
     /SIMSET             Recognize SIMSET identifiers (default
                         for SIMSET and SIMULATION blocks)

     /-SIMSET            Do not recognize SIMSET ids

     /SIMULATION         Recognize SIMULATION identifiers
                         (default for SIMULATION blocks)

     /-SIMULATION        Do not recognize SIMULATION ids

     /TABS               Use tabs in indentation (default)

     /-TABS              Do not use tabs

     /NUMBERED:xx        Produce line numbered output, incr.  xx
                         (default 100).  Explicit increment will
                         renumber the file.  The switch is
                         default if input file has line numbers.

     /-NUMBERED          Suppress line numbers on output.
                         (default if input file lacks line
                         numbers).

     /Z:n                Suppress indentation for n block levels
                         (default 0).  May be < 0 (>= -10),
                         assuming surrounding levels.

     /G                  Perform last COMPIL command after
                         processing

     !xxx                Run program XXX after processing

     Your own default switches can also be given in a file
     SWITCH.INI on your area with format:

     SIMED               /switch/switch...

     Example:  If you want files to be edited with reserved words
     in lower case, your own identifiers in upper case, and
     standard identifiers with upper case initial letter,
     standard indentation=2, record length=100, put the following
     line in SWITCH.INI:

     SIMED               /E:LEU/I:2/R:100

     Trailing zeros in the E switch may be omitted - the system
DECsystem-10 SIMULA Language Handbook, part II           Page 250
APPENDIX L AUTOMATIC EDITING OF SIMULA PROGRAMS


     default will be used in those positions.  You can always
     override the default values in the command to SIMED.

     Default extension is SIM.  Default outfile name is infile
     name.

     If you want only default values, the command string to edit
     the file X.SIM with the same output file name is simply X.

     The shortest possible command to apply SIMED to a file X.SIM
     is -

                         .R SIMED-X

     SIMED will take what follows after a minus sign as the first
     command and exit after editing.  CONTINUE will put SIMED in
     command mode, expecting further commands.  START or
     START-<command-string> may also be used in that situation.

     Exit from SIMED by entering ^Z or ^C.

     [The file SYS:SIMED.DAT used by SIMED version 1 is no longer
     required.]
DECsystem-10 SIMULA Language Handbook, part II           Page 251
APPENDIX M CONVERSION OF SIMULA PROGRAMS


     APPENDIX M CONVERSION OF SIMULA PROGRAMS
     ========================================


M.1 CONVERSION FROM IBM 360/370 SIMULA TO DEC SYSTEM-10 SIMULA

M.1.1 WHAT IS DONE BY THE IBMSIM PROGRAM

     The program IBMSIM can be used to perform the following
     conversion tasks:

   > Change the IBM source input control records like %PAGE,
     %TITLE, %SOURCE etc.  to their DEC 10 equivalents.

   > Eliminate IBM source control cards %(NO)LIST, %INDENT=n and
     %(NO)RESWD etc.  In order to indent your program, use the
     SIMED program (see appendix L) afterwards.

   > Convert long real constants to DEC 10 format.

   > Issue a warning if numerical constants are out of range.

   > Eliminate card sequence numbers if present.


M.1.2 WHAT IS NOT CONSIDERED BY THE IBMSIM PROGRAM

   > Conversion of hexadecimal constants to DEC 10 format.

   > IBM file names longer than six characters will not be unique
     if the first parts of two of more filenames are equal.

   > Maximal number of subscripts is 10 on DEC 10 and 127 on IBM.

   > Virtual quantities may may only be of the types defined in
     the COMMON BASE:  LABEL, SWITCH or PROCEDURE.  This problem
     is due to the extension of the IBM system and could often be
     overcome by the use of virtual type procedures.

   > Subscript checking is done for each element separately in
     the DEC 10 SIMULA system.  In the IBM system only the
     resulting index is checked.

   > The standard procedures RANK and CHAR return different
     results due to different collating sequences.  However,
     programs could often be written to be independent of this
     effect.

   > The facilities for creating and using EXTERNAL modules are
     much more powerful, and thus different, on the DEC 10.
DECsystem-10 SIMULA Language Handbook, part II           Page 252
APPENDIX M CONVERSION OF SIMULA PROGRAMS


   > Some of the mathematical standard procedures are not
     supplied in double precision in the first DEC 10 SIMULA
     release.  (The compiler will warn you in such cases.)

   > The maximum floating point number is approx.  1.7&+38, while
     for IBM it is about &+75.  A warning will be issued if the
     program contains real constants out of range.

   > The input file must not contain line numbers.




M.2 CONVERSION FROM DEC SYSTEM-10 TO IBM 360/370 SIMULA

M.2.1 WHAT IS DONE BY THE SIMIBM PROGRAM

     The program SIMIBM can be used to perform the following
     conversion tasks:

   > All lower case letters are translated to upper case.

   > Long real numerical constants are converted to IBM format.

   > All calls to standard procedure BREAKOUTIMAGE are replaced
     with OUTIMAGE.

   > The special COMMENT symbol '!' is converted to "COMMENT ".

   > The exponentiation symbol '^' is converted to "**".

   > All square brackets are converted to parentheses.

   > All lines longer than 72 characters are split.  The program
     tries to split the line at an appropriate position.
     However, numerical constants containing blanks or tabs could
     occasionally be improperly split.

   > The NOT symbol '\' and the NOT-EQUAL symbol '\=' are
     converted to NOT and NE respectively.

   > All tabs are translated to blank(s).

   > OPTIONS is translated to COMMENT.

M.2.2 WHAT IS NOT DONE BY THE SIMIBM PROGRAM

   > External declarations must be removed before processing.
     Use the SIMEXP program before running SIMIBM.

   > The input file must not contain line numbers.
DECsystem-10 SIMULA Language Handbook, part II           Page 253
APPENDIX M CONVERSION OF SIMULA PROGRAMS


M.3  CONVERSION FROM CDC SIMULA TO DEC SYSTEM-10 SIMULA

M.3.1 WHAT IS DONE BY THE CDCSIM PROGRAM

     The program CDCSIM can be used to perform the following
     conversion tasks:

   > Change characters from the CDC to the ASCII character set.

   > Change certain SIMULA words which are differently spelled on
     CDC and DEC (e.g.  "POWER" to "**", ".," to ";").

   > Find CDC identifiers longer than 12 characters, which are
     different but equal in their first 12 characters, and rename
     a few characters in one of them since only the first 12
     characters are significant on DEC SIMULA.

   > Rename identifiers which are reserved words on DEC but not
     on CDC (e.g.  ELSE or THEN).

   > Remove the delimiters surrounding operator words on CDC.

   > Optionally change CDC REAL variables and constants to
     DECsystem-10 LONG REAL, because of the smaller precision of
     REAL on the DECsystem-10.

   > Remove blanks inside identifiers.

M.3.2 WHAT IS NOT DONE BY THE CDCSIM PROGRAM

     Here is an incomplete list of things not done by the CDCSIM
     program:

   > Conversion of TEXT and CHARACTER constants.

   > Conversion of COMMENTS.

   > Conversion of the format of declarations of external FORTRAN
     and ASSEMBLY procedures.

   > Conversion because RANK and CHAR work differently with the
     CDC and the ASCII character codes.

M.3.3 PROBLEMS WHICH MAY OCCUR

     You may have trouble with multi-line text constants in some
     special cases.

     Since the conversion of the CDCSIM program from IBM to DEC
     SIMULA, it has only been tested on one very large CDC
     program, which program however was converted correctly.
DECsystem-10 SIMULA Language Handbook, part II           Page 254
APPENDIX M CONVERSION OF SIMULA PROGRAMS


     CDCSIM has however been tested very thoroughly on many IBM
     SIMULA installations before conversion to DEC.

M.3.4 HOW TO USE THE CDCSIM PROGRAM

     Just run the program and answer the questions put to you.
     The program will ask for:
   > File name for input CDC program and output DEC program.
   > If you want to list the output program on the TTY.
   > If you want the program to modify long identifiers to avoid
     name clashes.
   > If you want to modify yourself the first 8 characters of
     such clashing identifiers.

     The program will use default values for all input parameters
     except the file name of the CDC program.  Help is available
     by answering ?  to the questions given by the program.

     If you modify long identifiers, then the program will
     produce a temporary file TEMP.TMP.

     The program also has a facility to convert from UNIVAC to
     IBM SIMULA, but this facility has not been tested on DEC.
     The facility is triggered by a line "%CON" in the input
     file.

M.3.5 ACKNOWLEDGEMENT

     CDCSIM was originally produced by the Norwegian Computing
     Center for converting UNIVAC and CDC SIMULA programs to IBM.
     We are very grateful for their permission to modify it for
     CDC to DEC conversion.
DECsystem-10 SIMULA Language Handbook, part II           Page 255
APPENDIX N, THE DEC SYSTEM-10 SIMULA PROGRAM LIBRARY





APPENDIX N:  THE DEC SYSTEM-10 SIMULA PROGRAM LIBRARY
=====================================================


     This APPENDIX has been moved to the DECsystem-10 SIMULA
     Language Handbook Part III.  
DECsystem-10 SIMULA Language Handbook, part II           Page 256
APPENDIX O DUMP OF GENERATED CODE


     APPENDIX O DUMP OF CODE GENERATED BY THE SIMULA COMPILER
     ========================================================



     ;The simula compiler does not contain any
     ;built-in routine for generating a Macro 10
     ;listing of the generated code.
     ;It is possible to get such a listing with the
     ;help of the monitor command DUMP (or the DUMP program).
     ;You need a program listing with the
     ;line number table (Y switch set on
     ;during compilation) and a link map listing.
     ;
     ;
     .load /map simcod(ly)
     SIMULA: SIMCOD
     LINK: Loading
     EXIT
     .save
     Job saved
     .type simcod.lst

     SIMULA    1A(121)   1-OCT-1974  17:40     PAGE    1
     SIMCOD.SIM          [13,127]   1-OCT-1974  17:35 

     B1                      1 BEGIN
                             2     INTEGER ARRAY a[1:2];
                             3     PROCEDURE p;;
                             4     a[1]:=a[1]+1;
                             5     p;
     E1                      6 END

     DEFAULT SWITCHES USED

     NO ERRORS DETECTED


     SIMULA    1A(121)   1-OCT-1974  17:40     PAGE    2
     SIMCOD.SIM          [13,127]   1-OCT-1974  17:35  LINE
     NUMBER TABLE

     0  000052
     1  000060
     2  000062
     3  000067
     3  000070
     4  000071
     5  000100
     6  000102
     7  000104
DECsystem-10 SIMULA Language Handbook, part II           Page 257
APPENDIX O DUMP OF GENERATED CODE


     .type simcod.map


                          LINK-10 symbol map of SIMCOD  page 1
                         Produced by LINK-10 version 1B(131) on 
     1-Oct-74

     Low  segment starts at  0 ends at 710 length 711 = 1P
                         Start address is    212, located in
     program .MAIN
         
                          *************
     JOBDAT-INITIAL-SYMBOLS
                         Zero length module
                          *************

     .MAIN               from DSK:SIMCOD.REL[13,127] created by
     SIMULA /KI10
                         Low  segment starts at 140 ends at 363
     length 224 

                         .MAIN          212 Global symbol
     Relocatable         
                         .MAINL         313 Global symbol
     Relocatable         
                          *************
     OCSP                from SYS:SIMLIB.REL[1,4]
     .
     .
     ;Suppose that you want to get a listing of the
     ;code generated from statements in lines 4-6 in the
     ;simcod program. Then look at the line number table
     ;entries for these lines and also at the LINK-10 map
     ; for the program, where you find the .MAIN module 
     ;start address which is usually 140.
     ;Line 4 starts at address 000071 and
     ;line 6 ends at 000103.
     .get simcod
     Job setup

     .dump /OUT:TTY:/MODE:SYM/WIDTH:30/JUSTIFY:L/IRADIX:8
      /d [(140+71) & (140+103)

     231/                MOVE   5,2(15)                
     232/                MOVEI  6,1                    
     233/                CAML   6,4(5)                 
     234/                CAMLE  6,5(5)                 
     235/                UUO001 2                      
     236/                ADD    6,2(5)                 
     237/                AOS    3,(6)                  
     240/                MOVEI  1,251                  
DECsystem-10 SIMULA Language Handbook, part II           Page 258
APPENDIX O DUMP OF GENERATED CODE


     241/                PUSHJ  17,400011              
     242/                MOVEI  1,                     
     243/                DPB    1,143                  

     EXIT
DECsystem-10 SIMULA Language Handbook, part II           Page 259
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA





APPENDIX P:  CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA
=========================================================


P.1  WHY TRANSLATE FROM ALGOL TO SIMULA?

     Here are some reasons why you may want to go over from
     DECsystem-10 ALGOL to DECsystem-10 SIMULA:

   > To use facilities which SIMULA has but not ALGOL, e.g.
     better data structuring, a garbage collector, simulation
     facilities, the SIMDDT system, higher security against
     programming errors, direct access i/o.

   > To use the text string handling in SIMULA, which is roughly
     five times faster than in ALGOL.

   > To use the formatted i/o in SIMULA, which is roughly twice
     as fast in SIMULA as in ALGOL.

     On the other hand, a SIMULA compilation takes nearly twice
     as long CPU time and requires about twice as much core as an
     ALGOL compilation.  For vector and matrix operations, SIMULA
     is faster with array bound check, ALGOL is faster without
     array bound check.

     What is said above applies to ALGOL version 3B and SIMULA
     version 3.

     If you want to make your own comparisons of the efficiency
     of ALGOL versus SIMULA, you are advised to compile the
     SIMULA programs with the option settings
     options(/-q/-a/-i/-d).  This will remove some debugging
     features from SIMULA which ALGOL version 3B does not have,
     and thus give a more just comparison.

P.2  WHY SIMULA IS NOT COMPATIBLE WITH DEC 10 ALGOL?

     The DECsystem-10 SIMULA system is made highly compatible
     with SIMULA on other computers, in order to make it easy to
     transfer SIMULA programs between computers of different
     manufacture.  Unfortunately, this compatibility with other
     SIMULA systems had to mean less good compatibility with
     DECsystem-10 ALGOL.

     The main areas of bad compatibility between ALGOL and SIMULA
     on the DECsystem-10 are input-output and text string
     handling.
DECsystem-10 SIMULA Language Handbook, part II           Page 260
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA


     This appendix does not give a complete description of all
     that has to be changed to translate a program from ALGOL to
     SIMULA but some of the major points of difficulty are
     illustrated with examples.

P.3  TEXT STRING HANDLING

     Change STRING to TEXT when declaring text string variables.

     In SIMULA, a TEXT variable may not refer to a constant.
     Change T:= "TEXT CONSTANT" to T:- COPY("TEXT CONSTANT").

     Redeclare all INTEGER variables, which you use to store
     single characters, as CHARACTER variables.  In the
     following, the letter C indicates such a variable.

     Change C:= T.[N] into C:= FETCHAR(T,N).  Often repeated such
     ALGOL statements can be replaced by a single T.SUB operation
     in SIMULA.  (FETCHAR must be declared as an EXTERNAL
     CHARACTER PROCEDURE.)

     Instead of the procedure LINK, use the concatenation
     procedure CONC.  (CONC must be declared as an EXTERNAL TEXT
     PROCEDURE.)

     Replace LENGTH(T) by T.LENGTH.  Often, the SIMULA procedure
     MORE can be used instead of the ALGOL procedure LENGTH as in
     the following example:
     Change
     FOR I:= 1 UNTIL LENGTH(T) DO IF T.[I] = " ".[1] THEN ...
     into
     WHILE T.MORE DO IF T.GETCHAR = ' ' THEN ...

     Replace COPY(T,M) by COPY(T.SUB(1,M)), or by only
     T.SUB(1,M), if you are not going to independently modify the
     two texts.

     Replace NEWSTRING(N,7) by BLANKS(N).  Only 7-bit byte
     strings can be handled using the TEXT concept of SIMULA.

     Remove DELETE procedure calls from your program.  SIMULA has
     a garbage collector, so you need not bother with
     deallocation of core.  However, at a few special occasions,
     it might be worthwile to replace DELETE(T) by T:-NOTEXT.
DECsystem-10 SIMULA Language Handbook, part II           Page 261
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA


P.4  INPUT/OUTPUT

     Replace INSYMBOL(C) by C:= INCHAR.  (Sometimes, the
     procedure GETCH is preferable.  GETCH must be declared as an
     EXTERNAL CHARACTER PROCEDURE.)

     Replace NEXTSYMBOL(C) by
     C:= IF MORE THEN IMAGE.SUB(POS,1).GETCHAR ELSE CHAR(13);

     Replace OUTSYMBOL(C) by OUTCHAR(C).  (Sometimes, OUTSYMBOL
     is better replaced by OUTCHR(SYSOUT,C,1).  OUTCHR must be
     declared as an EXTERNAL PROCEDURE.)

     Replace BREAKOUTPUT by BREAKOUTIMAGE.

     Replace WRITE(T) where T is a string variable or constant,
     by OUTTEXT(T).

     IMPORTANT:  You cannot use the special line editing
     characters inside output strings in SIMULA.  Replace them by
     calls to the corresponding explicit procedures.  For
     example, convert
     WRITE("FIRST LINE[N]SECOND LINE");
     into
     OUTTEXT("FIRST LINE");  OUTIMAGE;  OUTTEXT("SECOND LINE");

     Replace PAGE by EJECT(1) and NEWLINE by OUTIMAGE.

     Replace SPACE(N) by SETPOS(POS+N) and TAB by
     OUTCHAR(CHAR(9)).

     Instead of READ and PRINT you must choose the appropriate
     SIMULA procedure depending on the type of the argument.  For
     example, if R is a real value, PRINT(R,10,5) is converted
     into OUTFIX(R,5,17) and PRINT(R,0,5) is converted into
     OUTREAL(R,6,12).

     Note that SIMULA normally expects that the letter E is used
     in input data for the power-of-ten symbol.  This can however
     be changed to other characters with the SIMULA built-in
     procedure LOWTEN.

     BACKSPACE, ENDFILE and REWIND are not currently available in
     DECsystem-10 SIMULA (version 3).

     READOCTAL must be programmed in SIMULA, IOCHAN must be
     programmed in MACRO 10, except when you use IOCHAN to test
     for end-of-file.  In the latter case, use the SIMULA
     built-in procedure ENDFILE.

     For ordinary input and output to the TTY, you can in SIMULA
DECsystem-10 SIMULA Language Handbook, part II           Page 262
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA


     directly use ININT, INREAL, OUTINT etc.  If you want to use
     other devices, the following information may be helpful:

     Instead of

     OUTPUT(5,"DSK");
     OPENFILE(5,"TEST.DAT",%177,%000011000050);

     write for example

     REF (OUTFILE) CHANNEL5;
     CHANNEL5:- NEW OUTFILE("DSK:  TEST.DAT[11,50] <177>");
     CHANNEL5.OPEN(BLANKS(130));

     Instead of CLOSEFILE(5) write for example CHANNEL5.CLOSE.

     Remove calls to the procedure RELEASE, since this function
     is automatically performed by the garbage collector in
     SIMULA.  In some cases, you might have to replace RELEASE(5)
     by CHANNEL5:- NONE.

     Instead of SELECTINPUT(5) you can for example write
     INSPECT CHANNEL5 DO
     BEGIN ...  END;

     The effect of SELECTINPUT might be simulated by:
                         REF (Outfile) ARRAY outchannels[1:10];
                         REF (Outfile) outchannel;
                         PROCEDURE selectinput(i); INTEGER i;
                         outchannel:-outchannels[i];
                         ...
                         outchannel.Outtext(...)
                         etc...

P.5  MISCELLANEOUS

     The so called "fat comma" method of inserting comments into
     procedure statements is not allowed in SIMULA.  Use ordinary
     comments instead.  Example:
     SPUR (A) ORDER:(7) RESULT TO:(V)
     can be changed to:
     SPUR (A, !ORDER;  7, !RESULT TO;  V);

     If you use "." as a readability symbol in identifiers,
     change it to "_".  Example:  TOP.OF.STACK in ALGOL is
     changed to TOP_OF_STACK in SIMULA.

     Not equal is "#" in ALGOL, "NE" in SIMULA.

     Octal constants in SIMULA begin with "8R", not with "%".
DECsystem-10 SIMULA Language Handbook, part II           Page 263
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA


     "_" may not be used in SIMULA as an alternative to ":=".

     "DIV" in ALGOL is "//" in SIMULA.

     The operator "REM" in ALGOL should be changed to use the
     built-in INTEGER PROCEDURE "MOD" in SIMULA.

     SIMULA does not have the ALGOL built-in procedures BOOL,
     INT, IMIN, IMAX, RMIN, RMAX.

     The LONG REAL and REAL standard procedures (SIN etc.) have
     the same name in SIMULA.  The type of the procedure depends
     on the type of the argument.  Some of them are however
     always REAL.

     "CHECKON 1" in ALGOL is "OPTIONS(/ARRAY)" in SIMULA,
     "CHECKOFF 1" in ALGOL is "OPTIONS(/-ARRAY)" in SIMULA.
     Unlike ALGOL, checking of array bounds is default in SIMULA,
     and must be explicitly set off if you do not want it.

     FORWARD declarations in ALGOL can be removed in SIMULA.

     "LISTON" in ALGOL is "OPTIONS(/LIST)" in SIMULA.
     "LISTOFF" in ALGOL is "OPTIONS(/-LIST)" in SIMULA.

     SIMULA does not have the OWN concept of ALGOL.  You can get
     something similar (but much more powerful) by using a SIMULA
     class.

     Only the twelve first characters of an identifier are
     significant in SIMULA.

     The "@" symbol cannot be used for powers-of-ten in SIMULA
     source programs.  Use "&" instead.  The power-of-ten symbol
     for input data can be set dynamically with the SIMULA
     built-in procedure LOWTEN.  Default is "E".

     Do not double the characters [, ] and ;  in SIMULA TEXT
     constants.  However, " is doubled just as in ALGOL.

     Assignments inside expressions are not allowed in SIMULA.
     Change e.g. A:= B + (C:= D + E);  into C:= D + E;  A:= B +
     C;

     You cannot in SIMULA omit the STEP in FOR-statements.
     Change FOR V:= E1 UNTIL E3 DO S into FOR V:= E1 STEP 1 UNTIL
     E3 DO S.

     Simple variables (not TEXTs or ARRAYs) are in SIMULA by
     default transferred by VALUE in procedure calls, not by
     NAME.  If you need NAME transmission, this must be
DECsystem-10 SIMULA Language Handbook, part II           Page 264
APPENDIX P, CONVERSION FROM DEC 10 ALGOL TO DEC 10 SIMULA


     explicitly declared, e.g.
     PROCEDURE P(X);  NAME X;  REAL X;

     If an actual TEXT parameter is a constant, the corresponding
     formal parameter must in SIMULA always be declared as either
     VALUE or NAME in the procedure heading.

     The procedures DIM, LB, UB, GFIELD, SFIELD are not available
     in SIMULA but can easily be written as external MACRO 10
     procedures to SIMULA.

     The method of calling external FORTRAN procedures is
     slightly different in SIMULA.  For example instead of
     CALL(FORT,X,Y) you write in SIMULA:

     OPTIONS(/E:F40,FORT);                 -\  In a file called
     PROCEDURE FORT(A,B); REAL A, B;;      -/  FORT.SIM
      ...
     EXTERNAL PROCEDURE FORT;
      ...
     FORT(X,Y);

     Input-output is not allowed in FORTRAN when called from
     SIMULA.

     Further information about calling FORTRAN is given in
     appendix E.
DECsystem-10 SIMULA Language Handbook, part II           Page 265
INDEX


     INDEX
     =====



       in file name at run-time  .  51

     $  in logical name  . . . . .  50
     $, in file name at run time .  51
     $SIMULA card  . . . . . . . .  20, 216

     % in logical name . . . . . .  50
     %, in file name at run time .  51

     * (asterisk) in run-time file descriptor  51

     .SIM extension  . . . . . . .  17

     /SIMULA . . . . . . . . . . .  17

     10, power of, symbol  . . . .  261, 263

     <CR>  . . . . . . . . . . . .  15
     <IDENTIFICATION2> in SIMDDT .  69
     <IDENTIFICATION2> used in OUTPUT SIMDDT command  71
     <IDENTIFICATION> in SIMDDT  .  69
     <LINE> in SIMDDT  . . . . . .  68
     <MODULE> in SIMDDT  . . . . .  68
     <NNNNN> in SIMDDT . . . . . .  68
     <RELATION OPERATOR> . . . . .  70
     <STRING> in SIMDDT  . . . . .  69
     <SUBSCRIPT LIST> in SIMDDT  .  69

     ?LNKUGS undefined global symbols  18

     @ delimiter . . . . . . . . .  53
     @, SIMDDT command . . . . . .  75

     ABORT procedure, SIMDDT message  167
     ABS, system function  . . . .  29
     ACCESS switch . . . . . . . .  54, 57
     ACCUM, parameters . . . . . .  37
     actual record size in directfile  59
     ALGOL, conversion from ALGOL to SIMULA  259
     ALL, SIMDDT command . . . . .  75
     ALTMODE character . . . . . .  62
     altmode, object time I/O  . .  56
     Antithetic variables  . . . .  30
     append mode . . . . . . . . .  54, 57
     ARCCOS, system function . . .  29
     ARCCOSINE single precision, entry point  205
     ARCSIN, system function . . .  29
     ARCSINE function single precision, entry point  205
     ARCTAN, system function . . .  29
     ARCTANGENT single precision, entry point  205
     Arithmetic constants in source programs  88
     array bound checking, efficiency of  259
     ARRAY dimensions, number of, error message  118
     Array record, internal representation  93
     ARRAY size, error message . .  155
     ARRAY subscript, error message  150
     ARRAY switch  . . . . . . . .  23
     Array variables, internal representation  93
     ARRAY, utility macro for external MACRO-10 procedures  193
     ASCII device control characters  61
     ASCII mode I/O  . . . . . . .  49
     Assembly language procedures called from SIMULA  188
     Assembly language, external procedure  184
     ASSIGN command  . . . . . . .  50
     ASSIGN, utility macro for external MACRO-10 procedures  195
     asterisk (*) in run-time file descriptor  51
     AT, SIMDDT command  . . . . .  70
     ATR libraries . . . . . . . .  42
     Attributes, internal order  .  102
     Automatic editing of SIMULA programs by the SIMED program  248
     automatic library search  . .  24

     BACKSPACE (DECsystem-10 ALGOL)  261
     Basic symbols . . . . . . . .  88
     BASICIO . . . . . . . . . . .  61
     Batch . . . . . . . . . . . .  20, 216
     Bibliograhpy  . . . . . . . .  9
     Binary constants  . . . . . .  32
     binary mode I/O . . . . . . .  49
     blank line numbers  . . . . .  244
     Block instance, internal representation  98
     block level . . . . . . . . .  23
     Block level for external module  45
     BOOL (DECsystem-10 ALGOL) . .  263
     Boolean constants . . . . . .  89
     Boolean variables, internal representation  91
     BOOLEAN, utility macro for external MACRO-10 procedures  193
     BREAKOUTIMAGE . . . . . . . .  33, 57
     BREAKOUTPUT (DECsystem-10 ALGOL)  261
     breakpoint  . . . . . . . . .  63
     breakpoint in SIMDDT  . . . .  70
     breakpoints, line numbers for  244
     BREAKS, SIMDDT command  . . .  70
     buffer area . . . . . . . . .  54
     buffer ring . . . . . . . . .  54
     BUFFER switch . . . . . . . .  54

     CALL system procedure . . . .  33
     Capacity limitations, error message  125, 133, 155
     Capacity restrictions . . . .  35
     CARD batch example  . . . . .  216
     Card input to the compiler  .  86
     Cardinal function, efficiency of  79
     carriage return . . . . . . .  15
     CARRIAGE RETURN character . .  62
     carriage return, object time I/O  56
     CDC REAL precision higher than on DEC  253
     CDC SIMULA program conversion to DEC  253
     CDCSIM conversion program . .  253
     CHAIN, SIMDDT command . . . .  73
     CHAR built-in function  . . .  61
     CHAR, system function . . . .  29
     Character constants . . . . .  89
     CHARACTER constants, allowed characters in  61
     character conversion during I/O  61
     Character representation  . .  29, 87
     Character representation of special characters  87
     Character representation, initialization  29
     Character set, error message   115
     Character variables, internal representation  91
     CHARACTER, utility macro for external MACRO-10 procedures  193
     characters, device control, in ASCII-ISO  61
     CHECK . . . . . . . . . . . .  25
     CHECKOFF (DECsystem-10 ALGOL)  263
     CHECKON (DECsystem-10 ALGOL)   263
     class BASICIO . . . . . . . .  61
     class directfile  . . . . . .  59
     class infile  . . . . . . . .  56
     class instance  . . . . . . .  24
     Class instance, internal representation  99
     class outfile . . . . . . . .  57
     class printfile . . . . . . .  58
     close files . . . . . . . . .  152
     CLOSE, SIMDDT command . . . .  75
     CLOSEFILE (DECsystem-10 ALGOL)  262
     CODE  . . . . . . . . . . . .  25
     CODE MACRO-10 procedures, example  198
     Collating sequence  . . . . .  29
     colon, error message  . . . .  108
     comma . . . . . . . . . . . .  15
     command examples  . . . . . .  17
     command syntax (SIMDDT) . . .  68
     commands (COMPIL) . . . . . .  17
     comment . . . . . . . . . . .  34
     Comment conventions . . . . .  32
     Comment in source programs  .  89
     Common base definition  . . .  8
     Compatibility of programs to other computers  81
     compatibility with DECsystem-10 ALGOL  259
     compatibility with SIMULA on other computers  259
     COMPIL CUSP . . . . . . . . .  17
     COMPIL-class commands . . . .  17
     compilation core requirements  11
     COMPILE . . . . . . . . . . .  17
     Compile monitor command, example  214
     compiler commands . . . . . .  14
     Compiler input  . . . . . . .  86
     COMPILER SOURCE CODE DIAGNOSTICS  107
     compiler switches . . . . . .  15
     compiler switches DEBUGS and IDENTIFICATION  64
     Components, Run-Time system, entry points  202
     concatenation of source files  17
     Constants in source programs   88
     contents, table of  . . . . .  3
     CONTINUE command  . . . . . .  65
     Control cards in batch  . . .  216
     Control cards to SPRINT . . .  22
     Control Data SIMULA program conversion  253
     Control-C . . . . . . . . . .  16
     Control-Z character . . . . .  62
     Controlled variable, restrictions  37
     conversational input and output  261
     conversion from ALGOL to SIMULA  259
     conversion from CDC to DEC of SIMULA programs  253
     conversion of SIMULA programs  11, 252
     Conversion of SIMULA programs from UNIVAC to DEC  254
     conversion of source code . .  11
     CONVERT source program conversion program  254
     COPY TEXT procedure . . . . .  260
     Copyright . . . . . . . . . .  2
     Copyright of the SIMULA system  2
     core requirements . . . . . .  11
     Core size of run time system, entry points  210
     core usage, optimization of .  80
     Coroutine handling, error message  154
     COS, system function  . . . .  29
     COSH, system function . . . .  29
     cost of using SIMULA as compared to ALGOL  259
     CP module, entry points . . .  202
     Creating line numbered files in SIMULA  55
     CREF (in COMPIL)  . . . . . .  17
     CREF switch . . . . . . . . .  23
     cross reference listing . . .  23
     CS module, entry points . . .  202
     CTL file, example . . . . . .  219

     DATA TRANSMISSION in ALGOL versus SIMULA  261
     Ddt   . . . . . . . . . . . .  236
     DDT when you wanted SIMDDT  .  64
     debug mode (SIMDDT) . . . . .  68
     DEBUG monitor command . . . .  17, 45, 64
     DEBUG monitor command, example  215
     Debugging system (SIMDDT) . .  63
     debugging system (SIMDDT) and line numbers  244
     DEBUGS switch . . . . . . . .  23
     DEC monitors  . . . . . . . .  10
     DECsystem-10 ALGOL, conversion into SIMULA  259
     DECUS library . . . . . . . .  9
     defining documents  . . . . .  8
     DELETE (DECsystem-10 ALGOL) .  260
     delimiters in file descriptor  15
     DETACH, error message . . . .  154
     device control characters in ASCII-ISO  61
     device, in run-time file descriptor  50
     device, source  . . . . . . .  14
     devices for directfile  . . .  60
     devices for infile  . . . . .  57
     devices for outfile . . . . .  57
     devices for printfile . . . .  58
     Diagnostic messages at run time  147
     Diagnostic messages from the compiler  107
     Dimensions, number of, error message  118
     directfile  . . . . . . . . .  59
     DISCRETE, parameters  . . . .  37
     disk block  . . . . . . . . .  59
     Display record, internal representation  97
     Display terminals, how to avoid automatic eject  85
     DISPLAY, SIMDDT command . . .  72
     distribution of library programs  255
     DIV operator (DECsystem-10 ALGOL)  263
     dollar in logical name  . . .  50
     dollar, in file name at run-time  51
     double precision  . . . . . .  34
     DUMP monitor command  . . . .  256
     Dynamic addresses, internal representation  94
     Dynamic records, internal representation  97

     Edit overflow . . . . . . . .  28
     Editing characters in source programs  90
     editing of SIMULA source programs  244
     Editing SIMULA programs automatically by the SIMED program  248
     EDITS text editor . . . . . .  245
     efficiency of SIMULA compared to ALGOL  259
     Efficient call on MACRO-10 procedures  188
     Efficient program writing . .  78
     EJECT . . . . . . . . . . . .  58
     END comment warnings  . . . .  90
     END comments in source programs  90
     end of file record  . . . . .  56, 60
     ENDFILE (DECsystem-10 ALGOL)   261
     ENDFILE, for directfile . . .  60
     ENDFILE, for infile . . . . .  56
     ENTERDEBUG procedure, SIMDDT message  167
     ENTIER, system function . . .  29
     equal sign  . . . . . . . . .  15
     Erroneous programs, treatment of, error message  150
     error messages  . . . . . . .  24
     error messages from LINK-10 .  18
     Error messages from the compiler  107
     Error messages, at run time .  147
     error mode (SIMDDT) . . . . .  68
     Error report  . . . . . . . .  237
     ESCAPE character  . . . . . .  62
     escape from run-time dialogue  49
     Eventnotice record, internal representation  100
     Eventnotice, internal representation  101
     examples of SIMDDT commands .  76
     EXECUTE . . . . . . . . . . .  17
     EXECUTE monitor command . . .  45
     Execution time error messages  147
     EXIT, SIMDDT command  . . . .  75
     EXP, system function  . . . .  29
     exponent part of PUTREAL and OUTREAL  28
     exponential function double precision, entry point  206
     extension, in run-time file descriptor  50
     extension, listfile . . . . .  14
     extensions  . . . . . . . . .  34
     external class  . . . . . . .  23
     EXTERNAL declaration  . . . .  39
     EXTERNAL FORTRAN or MACRO, error message  109
     external image  . . . . . . .  59
     external libraries for ATR and REL files  44
     external library specification  24
     External module, block level of  45
     external modules  . . . . . .  39
     external procedure in FORTRAN  185
     External procedure in MACRO-10  188
     external procedure in MACRO-10 or FORTRAN  184
     external program  . . . . . .  23
     EXTERNAL switch . . . . . . .  23, 25
     External switch in options statement  45

     fat comma comment convention of ALGOL 60  262
     file allocation . . . . . . .  57
     file definitions  . . . . . .  49
     file descriptor . . . . . . .  50
     file descriptor delimiters  .  15
     file descriptor format  . . .  14
     File handling at run time, error message  151, 156
     file name, in run-time file descriptor  50
     file object . . . . . . . . .  49
     file specification at run time  49, 54
     file specification in /RUNSWITCHES  24
     File specifications in /RUNSWITCHES  26
     filename, listfile  . . . . .  14
     FILES switch  . . . . . . . .  54
     FOR statement, controlled variable, restrictions  37
     FOR statements, efficiency considerations  79
     FORLIB functions, entry points  205
     FORM FEED character . . . . .  62
     form feed, in printfile . . .  58
     form feed, object I/O . . . .  56
     Formal parameter, specifications  38
     formatted i/o, efficiency of   259
     FORSIM utility program  . . .  185
     FORTRAN calls, ALGOL versus SIMULA  264
     FORTRAN external procedure  .  185
     FORTRAN external procedures using i/o  185
     FORTRAN external procedures using the FORTRAN high segment  185
     FORTRAN interface, entry points  207
     FORTRAN library functions used in SIMULA, entry points  205
     FORTRAN library, error message  167
     FORTRAN programming example .  187
     FORTRAN, error message  . . .  109
     FORTRAN, external procedure .  184
     FORWARD declarations  . . . .  263
     FORWARD declarations (DECsystem-10 ALGOL)  263
     FQC program for program measurements  239
     Fraction format, input  . . .  28
     FREECHANNEL, utility macro for external MACRO-10 procedures  194
     Frequency count on program execution  239
     FUDGE2 program for handling libraries  44
     Function designator instance, internal representation  99
     Functions, standard . . . . .  211
     Funny file name at run-time .  51

     garbage collection  . . . . .  54
     garbage collection, optimization of  80
     generated code  . . . . . . .  256
     GENLSN switch for TECO  . . .  246
     GET monitor command . . . . .  64
     GETAADD, utility macro for external MACRO-10 procedures  195
     GETADD, utility macro for external MACRO-10 procedures  195
     GETCHANNEL, utility macro for external MACRO-10 procedures  194
     GETREAL precision . . . . . .  79
     GETTADD, utility macro for external MACRO-10 procedures  195
     GETTYPE, utility macro for external MACRO-10 procedures  196
     GETVAL, utility macro for external MACRO-10 procedures  195
     global run-time switches  . .  54
     GO TO, error message  . . . .  155

     Hardware representation . . .  86
     help files  . . . . . . . . .  12
     HELP switch . . . . . . . . .  23
     HELP switch at run-time . . .  55
     HELP, SIMDDT command  . . . .  75
     Hexadecimal constants . . . .  32
     HIDDEN specification  . . . .  34
     High segment  . . . . . . . .  11
     High segment at run time, entry points  202
     high segment components, Run Time System, entry points  202
     high segment of FORTRAN . . .  185
     HISTD, parameters . . . . . .  37

     I/O at run time, error message  152, 156
     I/O in SIMULA programs  . . .  49
     I/O, in FORTRAN subroutines called from SIMULA  185
     IBM 360/370 . . . . . . . . .  8
     IDENTIFICATION switch . . . .  24
     Identifier representation . .  88
     Identifiers, number of, error message  125
     Identifiers, standard . . . .  211
     IF-statement, error messages   118
     IFCHANGED, SIMDDT command keyword  70
     IFEOF, utility macro for external MACRO-10 procedures  194
     IFNEOF, utility macro for external MACRO-10 procedures  194
     image size in directfile  . .  59
     image size of SYSIN . . . . .  61
     image size of SYSOUT  . . . .  61
     IMAGESIZE switch  . . . . . .  55, 59
     IMAX (DECsystem-10 ALGOL) . .  263
     IMIN (DECsystem-10 ALGOL) . .  263
     Improving the layout of SIMULA programs automatically (SIMED program)  248
     index . . . . . . . . . . . .  265
     indirect delimiter  . . . . .  53
     indirect specification file .  53
     infile  . . . . . . . . . . .  56
     INIMAGE, for infile . . . . .  56
     INIMAGE, utility macro for external MACRO-10 procedures  194
     Initialization of random number streams  30
     INPUT (DECsystem-10 ALGOL)  .  262
     input to SIMDDT . . . . . . .  66
     Input to the compiler . . . .  86
     INPUT, SIMDDT command . . . .  72
     Input-output at run time, error message  152, 156
     input-output, efficiency of .  259
     INPUT/OUTPUT in ALGOL versus SIMULA  261
     input/output in SIMULA  . . .  49
     input/output, in FORTRAN subroutines called from SIMULA  185
     INREAL precision  . . . . . .  79
     Inspect statement, efficiency of  79
     INSPECT, SIMDDT command . . .  72
     INSYMBOL (DECsystem-10 ALGOL)  261
     INT (DECsystem-10 ALGOL)  . .  263
     Integer constants . . . . . .  88
     integer constants . . . . . .  34
     integer to long real, entry point  207
     Integer variables, internal representation  91
     INTEGER, utility macro for external MACRO-10 procedures  193
     Internal representation . . .  91
     IO module, entry points . . .  202
     IOCHAN (DECsystem-10 ALGOL) .  261
     IOED module, entry points . .  203
     IONF module, entry points . .  202
     ISO device control characters  61
     ISO-7 . . . . . . . . . . . .  49

     Jumps, error message  . . . .  155

     KA10 CPU  . . . . . . . . . .  9
     Keywords  . . . . . . . . . .  88
     KI10 CPU  . . . . . . . . . .  9
     KL10 CPU  . . . . . . . . . .  9

     LABEL, utility macro for external MACRO-10 procedures  193
     Labels, unsigned integer  . .  38
     language extensions . . . . .  34
     leading spaces in command . .  15
     leading tabs in commands  . .  15
     left arrow  . . . . . . . . .  15
     legal characters in command .  15
     libraries of attribute files   42
     library of programs . . . . .  255
     library search at compile-time  24
     LIMIT switch  . . . . . . . .  55, 57
     Line editing characters in source programs  90
     LINE FEED character . . . . .  62
     line feed, object I/O . . . .  56
     line number in SIMDDT . . . .  68
     line number table . . . . . .  24-25
     Line number, error message  .  110
     line numbered files . . . . .  244
     Line numbering of files . . .  55
     Line numbers in input files .  86
     line numbers, blank . . . . .  244
     line numbers, format of . . .  246
     LINEAR, parameters  . . . . .  37
     LINED text editor . . . . . .  245
     LINESPERPAGE  . . . . . . . .  58
     LINK as used in DECsystem-10 ALGOL  260
     LINK-10 error messages  . . .  18
     LINK-10 error messages, explanation  17
     LINK-10 Linking loader  . . .  10
     Linkage class, internal representation  102
     LIST (in COMPIL)  . . . . . .  17
     LIST switch . . . . . . . . .  15, 24
     listfile  . . . . . . . . . .  14
     listfile extension  . . . . .  14
     listfile, default extension .  14
     listfile, page heading  . . .  25
     LISTOFF (DECsystem-10 ALGOL)   263
     LISTON (DECsystem-10 ALGOL) .  263
     Literature list . . . . . . .  9
     LN, system function . . . . .  29
     LNKUGS error message, explanation of  17
     LNKUGS undefined global symbols  18
     LOAD commands, errors caused by  17
     LOAD monitor command  . . . .  17, 45, 64
     LOAD monitor command without SIMULA-modified COMPIL  18
     LOAD monitor command, example  214
     Loading and executing programs with external modules  44
     local run-time switches . . .  54
     LOCATION  . . . . . . . . . .  60
     logarithm function double precision, entry point  206
     logarithm function single precision, entry point  205
     logical name  . . . . . . . .  50
     LONG REAL . . . . . . . . . .  34
     Long real constants . . . . .  89
     long real to integer, entry point  207
     Long real variables, internal representation  91
     LONGREAL, utility macro for external MACRO-10 procedures  193
     Low segment, RTS, entry points  205
     Lower case letters  . . . . .  88
     Lower case letters, use in portable program  29
     Lowered ten symbol  . . . . .  88
     lstfile . . . . . . . . . . .  14
     lstfile extension . . . . . .  14
     lstfile, default filename . .  14
     lstfile, page heading . . . .  25

     MA module, entry points . . .  207
     Macro 10 listing of generated code  256
     MACRO-10 procedures called from SIMULA  188
     MACRO-10 procedures, external, entry points  207
     Macro-10 procedures, how to write simula specifications  198
     MACRO-10 programming examples  198
     MACRO-10, external procedure   184
     magnetic tape . . . . . . . .  54
     main program  . . . . . . . .  23
     MAKLIB program for handling libraries  44
     Mathematical functions available  29
     Mathematical functions, argument and result type  29
     Mathematical functions, error message  167
     Mathematical subroutines in SIMLIB, entry points  205
     memory allocation, optimization of  80
     Messages, error, at run time   147
     Messages, error, from the compiler  107
     minus, error message  . . . .  108
     MOD, system function  . . . .  29
     monitor . . . . . . . . . . .  10

     NAME parameter transmission, ALGOL versus SIMULA  263
     NAME, utility macro for external MACRO-10 procedures  193
     National characters . . . . .  32
     NEW . . . . . . . . . . . . .  49
     NEWSTRING (DECsystem-10 ALGOL)  260
     NEXTSYMBOL (DECsystem-10 ALGOL)  261
     NOERR switch  . . . . . . . .  24
     NONE, internal representation  92
     NOPROCEED, SIMDDT command . .  75
     Norwegian Computing Center  .  254
     NULL character  . . . . . . .  62
     Null character  . . . . . . .  29
     Number sign, in file name at run-time  51
     Numbered lines in source programs  86
     NUMBERED switch . . . . . . .  55

     object program execution  . .  24
     object program I/O  . . . . .  49
     Object time error messages  .  147
     Object time system  . . . . .  11
     Object time system, entry points  202
     OCEP module, entry points . .  203
     OCIN module, entry points . .  203
     OCIO module, entry points . .  203
     OCSP module, entry points . .  207
     Octal constants . . . . . . .  32
     Octal digits in file name at run-time  51
     old source program listings, validity of line numbers  244
     OPENFILE (DECsystem-10 ALGOL)  262
     Operator words  . . . . . . .  88
     Operator words in SIMULA  . .  211
     Optimization of programs  . .  78, 239
     optimization, degree of in the compiler  259
     OPTIONS statement . . . . . .  25
     OPTIONS statement, error messages  108
     Options statement, external switch  45
     ordering SIMULA . . . . . . .  9
     outfile . . . . . . . . . . .  57
     OUTIMAGE, for infile  . . . .  56
     OUTIMAGE, for outfile . . . .  57
     OUTIMAGE, utility macro for external MACRO-10 procedures  194
     OUTPUT (DECsystem-10 ALGOL) .  262
     output from SIMDDT  . . . . .  66
     OUTPUT in ALGOL versus SIMULA  261
     output in FORTRAN subroutines called from SIMULA  185
     output, efficiency of . . . .  259
     OUTPUT, SIMDDT command  . . .  71
     OUTSYMBOL (DECsystem-10 ALGOL)  261
     Overflow, error message . . .  111, 115
     OWN . . . . . . . . . . . . .  38
     OWN (DECsystem-10 ALGOL)  . .  263
     OWN declaration . . . . . . .  263

     PAGE (DECsystem-10 ALGOL) . .  261
     page heading, list file . . .  25
     PAGE switch . . . . . . . . .  24-25
     Page, new, in program listing  221
     parameter delimiter . . . . .  38
     parameter transmision, ALGOL versus SIMULA  263
     Parameter transmission efficiency  79
     Parameter transmission to procedures  37
     Parameters to PROCEDUREs, error message  160
     Parameters, internal order  .  102
     Parameters, internal representation  96
     Part-compilation  . . . . . .  39
     percent, in file name at run-time  51
     percent, in logical name  . .  50
     Performance measurements  . .  239
     PH module, entry points . . .  203
     PHFO module, entry points . .  207
     physical block size . . . . .  59
     physical record size in directfile  59
     Portability of programs to other computers  81
     Portability of SIMULA from CDC to DEC  253
     power of ten symbol . . . . .  28
     power-of-ten symbol . . . . .  261, 263
     ppn, in run-time file descriptor  51
     precision, of REAL's: CDC compared to DEC  253
     Prefix block instance, internal representation  100
     PREV, system function . . . .  34
     PRINT (DECsystem-10 ALGOL)  .  261
     printfile . . . . . . . . . .  58
     PROC, utility macro for external MACRO-10 procedures  193
     PROCEDURE call, error message  160
     procedure in MACRO-10 or FORTRAN  184
     Procedure instance, internal representation  98
     Procedure parameter transmission  37
     Procedure parameter transmission efficiency  79
     PROCEDURE parameters, ALGOL versus SIMULA  263
     PROCEDURE, utility macro for external MACRO-10 procedures  193
     PROCEED, SIMDDT command . . .  73
     Process class, internal representation  102
     Program input to the compiler  86
     program library . . . . . . .  255
     Program listing . . . . . . .  25, 221
     Program measurement and optimization  239
     Program, source, input to the compiler  86
     Programs on cards . . . . . .  86
     PROTECTED specification . . .  34
     protection, in run-time file descriptor  51
     Pseudo random number generator  30
     Pseudo-random drawing, error message  162

     QUALIFICATION switch  . . . .  24
     Quasi-parallel processing, error message  154
     QUICK . . . . . . . . . . . .  25
     QUICK MACRO-10 procedures, example  200
     QUICK, assembly parameter in MACSIM  193
     QUICK, external MACRO-10 procedure  188
     QUICKPROC, macro in MACSIM  .  193, 196

     R command . . . . . . . . . .  14
     Radix constants . . . . . . .  88
     radix representation  . . . .  34
     random access . . . . . . . .  49, 59
     Random drawing procedures, parameters  37
     random drawing routines, entry points  208
     Random drawing, error message  162
     Random drawing, generator . .  30
     Random number generator . . .  30
     RANK, system function . . . .  29
     RD module, entry points . . .  208
     READ (DECsystem-10 ALGOL) . .  261
     read only file  . . . . . . .  54
     READOCTAL (DECsystem-10 ALGOL)  261
     Real constants  . . . . . . .  88
     REAL precision on CDC and on DEC  253
     Real variables, internal representation  91
     REAL, utility macro for external MACRO-10 procedures  193
     record size in directfile . .  55, 59
     REENTER monitor command . . .  10, 64
     REENTER, error message  . . .  177
     Reentrant code, generation of  11
     Reentrant high segment  . . .  11
     REF, utility macro for external MACRO-10 procedures  193
     Reference variables, internal representation  92
     References  . . . . . . . . .  9
     relative record number  . . .  59
     RELEASE (DECsystem-10 ALGOL)   262
     Release of SIMULA, conditions of  2
     Release version of SIMULA . .  1
     relfile . . . . . . . . . . .  14
     REM operator (DECsystem-10 ALGOL)  263
     REMOVE, SIMDDT command  . . .  70
     renumbering of source program lines  244
     Representation in hardware  .  86
     Representation of identifiers  88
     Representation of special characters  87
     Reserved SIMULA words . . . .  211
     Responsibility for errors . .  2
     Restrictions on the compiler   35
     restrictions with FORTRAN as called from SIMULA  185
     RESUME, error message . . . .  154
     RETURN, utility macro for external MACRO-10 procedures  194
     REWIND (DECsystem-10 ALGOL) .  261
     RMAX (DECsystem-10 ALGOL) . .  263
     RMIN (DECsystem-10 ALGOL) . .  263
     RONLY . . . . . . . . . . . .  54
     RTS I/O . . . . . . . . . . .  49
     Run time error messages . . .  147
     run time errors . . . . . . .  65
     run-time core requirements  .  11
     run-time dialoque, escape from  49
     run-time I/O  . . . . . . . .  49
     Run-Time module sizes, entry points  210
     run-time switches . . . . . .  52, 54
     Run-time system . . . . . . .  11
     Run-Time systems components, entry points  202
     RUNSWITCHES switch  . . . . .  24, 26, 52

     SA module, entry points . . .  203
     SANE module, entry points . .  208
     SAVE monitor command  . . . .  64
     SCHEDULED, SIMDDT command . .  74
     search list for ATR files . .  42
     SEARCH switch . . . . . . . .  24, 26
     segmentation into separately compiled parts  39
     SELECTINPUT (DECsystem-10 ALGOL)  262
     Separate compilation  . . . .  39
     Separate compilation, simddt example  235
     separately compiled FORTRAN procedure  185
     Separately compiled module, block level of  45
     Separately compiled procedure in MACRO-10  188
     separately compiled procedure in MACRO-10 or FORTRAN  184
     sequential access . . . . . .  56-57
     SETTYPE, utility macro for external MACRO-10 procedures  196
     SFD in run-time file descriptor  51
     Sharable reentrant code, generation of  11
     SHORT INTEGER . . . . . . . .  34
     Short integer variables, internal representation  91
     SIGN, system function . . . .  29
     SIMCOM.HLP  . . . . . . . . .  12
     SIMDDT  . . . . . . . . . . .  23, 63
     Simddt and ddt  . . . . . . .  236
     SIMDDT command examples . . .  76
     SIMDDT commands . . . . . . .  70
     Simddt examples . . . . . . .  225
     SIMDDT, automatic loading of   11
     SIMDDT, handling of line numbered source programs  244
     SIMDDT, loading of  . . . . .  64
     SIMDDT.HLP  . . . . . . . . .  12
     SIMDIR program  . . . . . . .  11
     SIMED program for editing SIMULA program files  248
     SIMLIB  . . . . . . . . . . .  10
     SIMLIB, library file, entry points  205
     SIMRT1, SIMRT2 modules, entry points  203
     SIMRTS module, entry points .  203
     SIMRTS, entry points  . . . .  202
     SIMRTS.HLP  . . . . . . . . .  12, 55
     SIMULA debugging system . . .  63
     SIMULA program conversion . .  11
     SIMULA program library  . . .  255
     SIMULA Standard identifiers .  212
     SIMULA Standards group  . . .  8
     SIMULA, reserved words  . . .  211
     SIMULA.HLP  . . . . . . . . .  12
     Simulation block, internal representation  101
     SIMULATION, CLASS, error message  163
     SIMULATION, concurrent instances of  27
     SIN, system function  . . . .  29
     SINH, system function . . . .  29
     SIZE switch . . . . . . . . .  55, 57-58
     Software performance report .  237
     Software problem report . . .  237
     SON OF STOPGAP text editor  .  245
     SOS text editor . . . . . . .  245
     source code conversion  . . .  11
     source device . . . . . . . .  14
     Source program conversion . .  253
     Source program input to the compiler  86
     Source program listing  . . .  25, 221
     SPACE (DECsystem-10 ALGOL)  .  261
     spaces in commands  . . . . .  15
     Spaces in source programs . .  90
     SPACING . . . . . . . . . . .  58
     Special character representation  87
     Special characters in file name at run-time  51
     specification file  . . . . .  52
     SPECIFY, utility macro for external MACRO-10 procedures  193
     speed of SIMULA as compared to ALGOL  259
     Spooled CDR data file . . . .  20
     spooled devices . . . . . . .  49
     SPR . . . . . . . . . . . . .  237
     SPRINT control cards  . . . .  22
     SQRT, system function . . . .  29
     square brackets . . . . . . .  15
     square root single precision, entry point  208
     SS module, entry points . . .  209
     Standard functions  . . . . .  79
     Standard identiiers . . . . .  212
     Standardization of SIMULA . .  8
     star (*) in run-time file descriptor  51
     STOP AT, SIMDDT command . . .  70
     STOPGAP, SON OF, text editor   245
     string  . . . . . . . . . . .  38
     STRING concept of ALGOL 60  .  260
     string handling in ALGOL versus SIMULA  260
     string handling, efficiency of  259
     Structured programming  . . .  78
     SU module, entry points . . .  209
     sub-file directories in run-time file descriptor  51
     Subclass instance, internal representation  100
     Subclass, order of declarations  38
     switch designator, side effects  38
     switch value  . . . . . . . .  55
     SWITCH, attribute of terminated class instance  38
     SWITCH, utility macro for external MACRO-10 procedures  193
     Switches for the $SIMULA card  21
     switches, compiler  . . . . .  15, 23
     SWITCHes, error messages  . .  108, 155
     symbol table for SIMDDT . . .  23
     syntax of commands  . . . . .  14
     SYSIN . . . . . . . . . . . .  61
     SYSIN, used as specification file  53
     SYSOUT  . . . . . . . . . . .  61
     System prefixes, level of declaration  27
     System prefixes, restrictions  27

     TAB (DECsystem-10 ALGOL)  . .  261
     TAB character, use after line numbers  247
     tabs in commands  . . . . . .  15
     TAN module, entry point . . .  209
     TAN, system function  . . . .  29
     TANGENT single precision, entry point  209
     TANH, system function . . . .  29
     TECO text editor  . . . . . .  244-245
     ten, power of, symbol . . . .  261, 263
     terminal input and output . .  261
     TEXT constant . . . . . . . .  32
     TEXT constant used in assignments  260
     TEXT constant, error message   108, 111
     TEXT constant, length of, error message  115
     Text constants  . . . . . . .  89
     TEXT constants, allowed characters in  61
     text constants, multi-line  .  82
     text editing of SIMULA source programs  244
     TEXT editing, error message .  164
     text editor . . . . . . . . .  245
     text editor, selection of . .  245
     Text record, internal representation  92
     TEXT string handling in ALGOL versus SIMULA  260
     text string handling, efficiency of  259
     TEXT value constant . . . . .  32
     Text variables, internal representation  92
     TEXT, utility macro for external MACRO-10 procedures  193
     TIME procedure  . . . . . . .  31
     Title in program listing  . .  221
     Tracing of programs . . . . .  239
     Transmission mode for parameters, default  38
     Transport of SIMULA programs from CDC  253
     Transportability of programs to other computers  81
     TTY input and output  . . . .  261
     TX module, entry points . . .  204
     TXBL module, entry points . .  204

     UFD file access at run-time .  51
     Undefined global symbols, LINK-10 error message  18
     Underline . . . . . . . . . .  15
     unique logical name . . . . .  50, 52
     UNIVAC SIMULA programs conversion to DEC  254
     Unreduced subblock, internal representation  98
     unsigned integer labels . . .  38
     unspooled devices . . . . . .  49
     unwritten record in directfile  60
     USE, SIMDDT command . . . . .  73
     utility programs  . . . . . .  11
     utility programs library  . .  255

     VALUE parameter transmission, ALGOL versus SIMULA  263
     VALUE, utility macro for external MACRO-10 procedures  193
     Variables, internal order . .  102
     VARIABLES, SIMDDT command . .  74
     VERTICAL TAB character  . . .  62
     vertical tab, object I/O  . .  56
     Virtual matches, restrictions and rules  28
     VIRTUAL, error message  . . .  117

     warning message . . . . . . .  24
     Warning messages from the compiler  78
     WARNING switch  . . . . . . .  24
     WHILE statement . . . . . . .  34
     WHILE statements, efficiency considerations  79
     WORDALIGNED switch  . . . . .  55
     WRITE (DECsystem-10 ALGOL)  .  261

     Y switch  . . . . . . . . . .  25

     [ (DECsystem-10 ALGOL)  . . .  261, 263
     [STOP] BREAKS . . . . . . . .  63

     _ (DECsystem-10 ALGOL)  . . .  263
     # (DECsystem-10 ALGOL)  . . .  262
     ^C - REENTER in SIMDDT  . . .  67
     ^O monitor command in SIMDDT   67
     ^C monitor command  . . . . .  64