home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Modula / Information / GUIDE.TEXT next >
Text File  |  1985-05-03  |  44KB  |  1,417 lines

  1. User Guide to the Modula-2 System
  2. ---------------------------------
  3.  
  4. Table of Contents
  5.  
  6. 4.     MODULA-2 Compiler, Linker, Debugger
  7. 4.1.   A User Guide to the MODULA-2 System
  8. 4.1.1. Glossary and examples
  9. 4.1.2. (** The M3 MODULA-2 base **)
  10. 4.1.3. Compiling
  11. 4.1.4. Linking
  12. 4.1.5. Running a program
  13. 4.1.5A   Call by command interpreter
  14. 4.1.5B   overlay organization
  15. 4.1.5C   call from a program
  16. 4.1.5D   run time support for program management
  17. 4.1.5E   (** converting from .LOD to .IMA format **)
  18. 4.1.6. Debugging
  19. 4.1.7. Library Searching Strategies
  20. 4.1.8. The module SYSTEM
  21. 4.1.8A Workfiles
  22. 4.1.8B Commandfiles
  23. 4.1.8C History (Acknowledgements)
  24. 4.1.9. Compiler error messages
  25.  
  26.  
  27.  
  28. (MODLIB:GUIDE.TEXT    23.04.85)
  29.  
  30. 4. MODULA-2 Compiler, Linker, Debugger
  31. --------------------------------------
  32.  
  33. adapted by Institut fuer Elektronik.
  34. Version 5.8.1983, prepared by P. Fink ETH Zuerich.
  35.  
  36.  
  37. In diesem Kapitel erklaeren wir detailliert die
  38. MODULA-2 Programmierumgebung . Da viele der Prinzipien
  39. des PDP-11 MODULA gelten, wurde die Originaldokumentation "A
  40. User Guide to the MODULA-2 System" als Grundlage gewaehlt
  41. (in englischer Sprache).
  42.  
  43. (* parts which are not valid for the portable MC68000 Compiler,
  44.    have been put into comment brackets by P. Fink.(**...**)
  45.    Some remarks about the SMAKY8 have been added when necessary
  46. *)
  47.  
  48.  
  49. 4.1 A User Guide to the MODULA-2 System
  50. ---------------------------------------
  51.  
  52. The Modula system consists of a compiler, a linker, a debugger
  53. and possibly some support utilities.
  54. the compiler and linker are themself modula programs.
  55. On the SMAKY 8, a modula program is simply called by
  56. typing
  57.   X progname     in the CLE line.
  58.  
  59. Therefore, the compiler is called by
  60.   X modula
  61. .
  62. The linker is called by
  63.   X linker
  64. .
  65.  
  66. A program may be stopped with the CLEAR key on the numerical
  67. pad. This works almost anytime, except in tight loops.
  68. The CLEAR key is checked on every system request.
  69. (**
  70. MODULA-2/68K is a resident programming environment for
  71. MODULA-2 that runs on the MC68000 based "M3" system. The
  72. software consists of a compiler, a linker, a debugger and
  73. utility modules, which are all linked to the operating
  74. system.
  75.  
  76. The operating system first gives control to the command
  77. interpreter,  which accepts  the  file  name of the next
  78. program to be executed. The command interpreter then terminates
  79. and calls the loader,  which  is also embedded  in  the
  80. operating system. It loads the named file and transfers
  81. control to  that  program. Upon  termination  of  the
  82. program, control returns to the operating system, and the
  83. command interpreter asks for the next program. In an error
  84. situation control returns to the operating system, too. The
  85. exception handling part has to correct the system state (e.g.
  86. correct the stack pointer). Therefore at the command
  87. interpreter level the system is always in a consistent state.
  88. **)
  89. Compiler, linker, and debugger are Modula-2 programs.  They
  90. are treated by the operating system like any other user program.
  91.  
  92.  
  93. The following chapters require a sound knowledge of the
  94. language itself.
  95.  
  96. Reference literature:
  97.  
  98.      N.Wirth: Programming with  MODULA-2, Springer Verlag.
  99.  
  100.  
  101. 4.1.1. Glossary and examples
  102. ----------------------------
  103.  
  104. compilation unit  : Unit accepted by compiler for compilation,
  105.                     i.e. definition module or program module
  106.                     (see Modula-2 syntax).
  107. definition module : Part  of  a separate module specifying the
  108.                     exported objects.
  109. program module    : Implementation  part  of a separate module
  110.                     or main module.
  111. source file       : Input  file  of  the compiler (compilation
  112.                     unit) (default extension MOD).
  113. symbol file       : Compiler  output  file  with  symbol table
  114.                     information; information generated  during
  115.                     compilation   of   a   definition   module
  116.                     (default extension SYM).
  117. reference file    : Compiler   output   file   with   debugger
  118.                     information, generated during  compilation
  119.                     of  a  program  module  (default extension
  120.                     REF).
  121. link file         : Compiler output file with code in Modula-2
  122.                     linker format (default extension LNK).
  123. load file         : Linker  output  file with code in Modula-2
  124.                     loader format (default extension LOD).
  125. map file          : Linker  output  file  with  storage layout
  126.                     information (default extension MAP).
  127.  
  128. (* system dependent definitions: specific for the SMAKY 8 *)
  129.  
  130. filename          : File names are at most 11 characters long
  131.                     (plus device, plus extension). When a module
  132.                     name is longer, then its corresponding filename
  133.                     is truncated to 11 characters.
  134.  
  135. default device    : a device name needs not to be specified on
  136.                     the SMAKY 8.
  137.  
  138. default extension : when a filename doesnt contain an extension
  139.                     or is terminated with a point, then this
  140.                     default extension is appended to the name
  141.  
  142. default libraries : on the SMAKY8, the default libraries searched
  143.                     are the directory of the source file, then
  144.                     <empty>, i.e. #MM0:, and then MODLIB:
  145.  
  146.  
  147.  
  148. Examples:
  149. ---------
  150.  
  151. The following examples are used in the description:
  152.  
  153.  
  154.   MODULE Prog1;
  155.     ...
  156.   END Prog1.
  157.  
  158.  
  159.   MODULE Prog2;
  160.   BEGIN
  161.     a := 2
  162.   END PROG2.
  163.  
  164.  
  165.   DEFINITION MODULE Prog3;
  166.     EXPORT QUALIFIED ...
  167.     ...
  168.   END Prog3.
  169.  
  170.   IMPLEMENTATION MODULE Prog3;
  171.     ...
  172.   END Prog3.
  173.  
  174.  
  175.   DEFINITION MODULE Prog4;
  176.     IMPORT SystemTypes;
  177.     EXPORT QUALIFIED ...
  178.     ...
  179.   END Prog4.
  180.  
  181.   IMPLEMENTATION MODULE Prog4;
  182.     IMPORT SystemTypes, Loader, Exceptions;
  183.     ...
  184.   END Prog4.
  185.  
  186.  
  187.   MODULE Prog5;
  188.     IMPORT Prog3, Prog4;
  189.     ...
  190.   END Prog5.
  191.  
  192.  
  193. (**
  194. 4.1.2 The M3 MODULA-2 base
  195. --------------------------
  196.  
  197. The operating system is loaded and started when the M3 system
  198. is booted (e.g. after GO23000).
  199.  
  200. Immediately  the command interpreter is executed. The
  201. command interpreter displays the prompt symbol "->" to
  202. indicate that it waits for a command (which can result in a utility
  203. program call).
  204.  
  205. Normally a user program can be interrupted by twice <ctrl>C;
  206. then control returns to the operating system.
  207. **)
  208. 4.1.3 Compiling
  209. ---------------
  210.  
  211. Compilation of a program module:
  212. --------------------------------
  213. The compiler is  called  by  typing  X  MODULA, in the CLE line.
  214. After displaying  the  string  "source file>" the compiler
  215. is ready to accept the filename of the 'compilation unit' to
  216. be compiled.
  217.  
  218. Default device    : --
  219.  
  220. Default extension : MOD
  221.  
  222.  
  223.   ->X MODULA<cr>
  224.   source file> PROG1<cr>     (* name PROG1.MOD is assumed*)
  225.   p1
  226.   p2                         (* indicates succession of   *)
  227.   p3                         (* activated compiler passes *)
  228.   p4
  229.   p5
  230.   end compilation
  231.   ->
  232.  
  233. If  syntactical  errors  occur in the compiled unit,
  234. compilation stops after the third pass and a listing with
  235. error messages  is generated:
  236.  
  237.   ->X MODULA<cr>
  238.   source file> PROG2<cr>
  239.   p1
  240.    ---- error                 (* error detected by pass 1 *)
  241.   p2
  242.   p3
  243.    ---- error
  244.   lister
  245.   end compilation
  246.   ->
  247.  
  248.  
  249.  
  250. Compilation of a definition module:
  251. -----------------------------------
  252. For  definition  modules   the   filename   extension   DEF
  253. is recommended.  The  definition  part of a module must be
  254. compiled prior to its implementation part. A symbol file is
  255. generated for definition modules.
  256.  
  257.  
  258.  
  259.   ->MODULA<cr>
  260.   source file> PROG3.DEF<cr>  (* definition module *)
  261.   p1
  262.   p2
  263.   symfile
  264.   lister
  265.   end compilation
  266.   ->
  267.  
  268.  
  269.  
  270. Symbol files needed for compilation
  271. -----------------------------------
  272. At  the  compilation  of  a  definition  module,  a  symbol
  273. file containing  symbol  table  information  for  the
  274. compiler   is generated.  This  information  is  needed by
  275. the compiler in two cases:
  276.  
  277. -  At compilation of the implementation part of the module.
  278.  
  279. -  At compilation of another unit, importing  objects  from
  280.    this separate module.
  281.  
  282. According  to  a  program  option  set  at  the beginning of
  283. the compilation (Q option), the compiler asks for the
  284. needed symbol  files  or  attaches  them by a default name
  285. (the first n characters of the module name, see glossary).
  286.   ->X MODULA<cr>
  287.   source file> PROG3<cr>      (* implementation module *)
  288.   p1
  289.    Prog3: DK:PROG3.SYM
  290.   p2
  291.   p3
  292.   p4
  293.   p5
  294.   end compilation
  295.   ->
  296.  
  297.   ->X MODULA<cr>
  298.   source file> PROG4.DEF/QUERY<cr>
  299.   p1
  300.    SystemTypes> SY:SYTY<cr>
  301.   p2
  302.   symfile
  303.   lister
  304.   end compilation
  305.   ->
  306.  
  307.   ->X MODULA<cr>
  308.   source file> PROG5/QUERY<cr>
  309.   p1
  310.    Prog3> PROG3<cr>
  311.    Prog4> PROG4<cr>
  312.   p2
  313.   p3
  314.   p4
  315.   p5
  316.   end compilation
  317.  
  318.  
  319.     X MODULA
  320.    source file> PROG6/L
  321.   library prefixes> D:,XY:
  322.    p1
  323.    .....
  324.   ->
  325.  
  326.  
  327.  
  328. Files generated by the compiler:
  329. --------------------------------
  330. Several files are generated by the compiler. They all obtain
  331. the same device:filename as the source file with the following
  332. extensions:
  333.  
  334.   for definition modules :  listing         *.LST
  335.                             symbol file     *.SYM
  336.  
  337.   for program modules    :  listing         *.LST
  338.                             reference file  *.REF
  339.                             code file       *.LNK
  340.  
  341.  
  342.  
  343. Program options for the compiler
  344. --------------------------------
  345. When reading the source file name,  the  compiler  also
  346. accepts some  program  options from keyboard. Program
  347. options are marked with a leading character '/'  and  must
  348. be  typed  sequentially after the file name.
  349.  
  350. The compiler accepts the options:
  351.  
  352. /QUERY    : Compiler  explicitly  asks  for  the  names of
  353.             the needed symbol files belonging to modules
  354.             imported by the compiled unit.
  355.             /Q is a short form for this option.
  356.  
  357. /NOQUERY  : No query for symbol  file  names.  The  files
  358.             are searched  corresponding to a default
  359.             strategy.
  360.  
  361. /LISTING  : A listing file must be generated.
  362.             /LIST is accepted for this option.
  363.  
  364. /NOLISTING: No listing file must be generated.
  365.             /N is a short form for this option.
  366.  
  367. /EL       : A listing will only be generated when there are
  368.             compilation errors.
  369.             Note all errors are also displayed on the terminal.
  370.  
  371. /VERSION  : Compiler has  to  display  information  about  its
  372.             version.
  373.             /V is a short form for this option.
  374.  
  375. /LIBQUERY : library query: the compiler has to ask for the libraries
  376.             it should search when looking for symbol files.
  377.             Up to 5 user libraries may be specified, separated by comma.
  378.             Note: <empty> and MODLIB: are always searched in addition to
  379.             these 5 libraries and need not to be specified.
  380.             Normally, the directory of the source file, <empty> and
  381.             MODLIB: are searched.
  382.             /L is an abbreviation for /LIBQUERY.
  383.  
  384.  
  385. /LARGE    : Large program option. Normally the compiler allocates tables and
  386.             files for a small to medium sized program. This option forces
  387.             it to allocate large tables and files.
  388.             /LA is an abbreviation for /LARGE.
  389.  
  390.  
  391.  
  392. Defaults:
  393.  
  394. *  NOQUERY and EL are set as default options.
  395.  
  396.  
  397. Compilation options in compilation units
  398. ----------------------------------------
  399.  
  400. Comments in a Modula-2 compilation unit may be used  to
  401. specify certain compilation options for tests.
  402.  
  403. The following syntax is accepted for compilation options:
  404.  
  405.   Options = Option { "," Option } .
  406.   Option  = "$" Letter Switch .
  407.   Switch  = "+" | "-" | "=" .
  408.  
  409. Options  must be the first information in a comment clause.
  410. They are  not  recognized  by  the  compiler,  if  other
  411. information preceedes the options in the clause.
  412.  
  413. Options :
  414.  
  415.   T   Array index and case label boundary test.
  416.   S   Stack overflow test.
  417.   P   No generation of procedure entry and exit code.
  418.   C   CLR option. C- means the compiler must not generate CLR instructions.
  419.  
  420. Switches:
  421.  
  422.   +   Test code is generated.
  423.   -   No test code is generated.
  424.   =   Previous switch becomes valid again.
  425.  
  426. Defaults :
  427.  
  428.   All switches are set to "+" by default.
  429.  
  430. Example :
  431.  
  432.   MODULE x; (* $T+ *)
  433.     ...                           test code generated
  434.     ...
  435.     (*$T- *)
  436.     a[i] := a[i+1];               no test code is generated
  437.     (*$T= *)
  438.     ...                           test code is generated
  439.     ...
  440.   END x
  441.  
  442.  
  443. Remark concerning the C option:
  444.   This option is useful when writing device drivers.
  445.   Since the CLR instruction of the MC68000 does a READ/WRITE cycle, it should
  446.   not be generated for absolute variables which are device registers (e.g.
  447.     UADATA [300h]: CHAR;) When such a variable is passed to a procedure
  448.   as an argument, then within the procedure, the compiler doesn't know it
  449.   is an absolute variable and may erronously generate the CLR instruction.
  450.   With C- in the procedure, it is instructed to generate a MOVE #0,...
  451.   instead.
  452.  
  453.  
  454. Module key:
  455. ----------
  456.  
  457. To each compilation unit the  compiler  generates  a  so
  458. called "module  key".  This  key is unique and is needed to
  459. distinguish different compiled versions of the same module.
  460. The  module  key is written on the symbol file, the link
  461. file and the load file.
  462.  
  463. For an implementation module no new key is generated. It
  464. gets the same key as  the  definition  module.  The  module
  465. keys  of imported  modules  are also recorded on the symbol
  466. files and the link files.
  467.  
  468. Any mismatch of module keys belonging to the  same  module
  469. will cause an error message at compilation or link time.
  470.  
  471. CAUTION : Recompilation  of  a  definition module will
  472.           produce a new symbol file with a new module key.
  473.           In  this  case the implementation module and all
  474.           units importing this module directly or indirectly
  475.           must be recompiled.
  476.  
  477.           Recompilation of an  implementation  module  does
  478.           not affect the module key.
  479.  
  480.  
  481.  
  482. Differences and restrictions in implementation:
  483. ----------------------------------------------
  484.  
  485. For the implementation of Modula-2 for MC68000-based computers
  486. some differences and restrictions must be considered.
  487.  
  488. FOR statement
  489. -------------
  490.  
  491. The control variable must not be of type CHAR or any
  492. enumeration type (byte size), if step is not -1, or 1.
  493.  
  494. The step must not be greater than 77777B.
  495.  
  496. CASE statement
  497. --------------
  498.  
  499. The labels of a case statement must not be greater than
  500. 77777B.
  501.  
  502. Dynamic arrays
  503. --------------
  504. In a procedure declaration, only the form    VAR  ARRAY OF <anytype>   is
  505. available, but not  ARRAY OF <anytype>   .
  506.  
  507. For this reason, the compatibility rules between formal and actual
  508. parameters have been lowered for VAR ARRAY OF CHAR and VAR ARRAY OF WORD:
  509. - strings are considered compatible with VAR ARRAY OF CHAR.
  510. - everything is compatible with VAR ARRAY OF WORD.
  511.  
  512. Type Transfer Functions between types of unequal size
  513. -----------------------------------------------------
  514.  
  515. The type transfer functions to a shorter size (e.g. CHAR(cardinal)) transfer
  516. the lower order bits of the source. Type transfers to a longer size
  517. transfer the 'value'. For unsigned source types, zeroes are filled into the
  518. higher bits (e.g. ADDRESS(char), ADDRESS(cardinal)). For a signed source type,
  519. the sign is extended (e.g. ADDRESS(integer));
  520.  
  521.  
  522. PROCESS, NEWPROCESS, TRANSFER, IOTRANSFER, LISTEN, SYSRESET,
  523. module priorities.
  524. ------------------------------------------------------------
  525.  
  526. These language concepts for concurrent processing are implemented.
  527. SMAKY 8 notes: The implementation assumes the tasks are running
  528. in User Mode. All processes are part of the same NTREL task.
  529. PROCESS, NEWPROCESS and TRANSFER may be used freely, even for
  530. structuring application programs.
  531. Before using IOTRANSFER (which handles peripheral interrupts),
  532. it is recommended to consult the actual implementation listings.
  533. IOTRANSFER may interfere with the operating system PSos.
  534.  
  535.  
  536.  
  537.  
  538.  
  539. Compatibility with SMILERX V4
  540. -----------------------------
  541. Symbol Files and Link Files produced by SMILERX V4 are acceptable when
  542. transferred properly from a CYBER to the SMAKY 8 and converted.
  543.  
  544.  
  545.  
  546. MC68000 Modula-2 compiler profile
  547. ---------------------------------
  548.  
  549. INTEGER  :   -32768..32767
  550. CARDINAL :   0..65535
  551. ADDRESS  :   0..4294967295
  552. REAL     :   -3.4028232E38..-1.1754943E-38, 0.0,
  553.              +1.175494E-38..+3.4028232E38  (IEEE 32-bit Format)
  554.  
  555. Max. Index : -32768..65535
  556. Max. Range : 32767
  557.  
  558. ARRAY size      : 32766 max.
  559. RECORD size     : 32766 max.
  560. Global Variables: 32766 max.
  561.  
  562.  
  563. Allocation of Modula-2 types:
  564.  
  565. BOOLEAN  :                Byte (1)
  566. CHAR     :                Byte (1)
  567. INTEGER  :                Word (2)
  568. CARDINAL :                Word (2)
  569. REAL     :                Long (4)
  570. WORD     :                Word (2)
  571. ADDRESS  :                Long (4)
  572. BITSET   :                Word (2)
  573. pointer  :                Long (4)
  574. enum. ( <= 256 elem. ) :  Byte (1)
  575. enum. ( >  256 elem. ) :  Word (2)
  576. set   ( <= 8 members ) :  Byte (1)
  577. set   ( >  8 members ) :  Word (2)
  578.  
  579.             
  580. 4.1.4 Linking
  581. -------------
  582.  
  583. Compiler code output files (called  link  file,  with
  584. extension LNK)  must be linked before run time. One or more
  585. link files can be linked to a program. The generated  code
  586. file  (called  load file, with extension LOD) may be loaded
  587. by the loader.
  588.  
  589. Call  the  linker  by typing X LINKER in the CLE line. After
  590. displaying the string "master file>" the linker  is  ready
  591. to  accept  the filename of the master file (main program).
  592.  
  593.   ->X LINKER<cr>
  594.    master file> PROG1<cr>     (* PROG1.LNK is assumed *)
  595.  
  596. The linker generates two files with the same name as the
  597. master file and the following extensions:
  598.  
  599.   LOD  : Load file with code to be loaded.
  600.   MAP  : Map with allocation addresses of linked modules
  601.          (only when program option M is set).
  602.  
  603. A  program (overlay) may  be  linked  to an already linked
  604. base. Information about this base is needed by the linker.
  605. To get this information,  the  linker has to attach the load
  606. file (extension LOD) of this base.
  607.  
  608. (**
  609. Normally the base is the resident part of the  basic
  610. executive. The  file SY:MODULA.MXS is the default base file
  611. attached by the linker, if no other base file is specified
  612. (see  program  option B).
  613. **)
  614.  
  615. All  separate  modules  imported  by the master module (or
  616. other linked modules) must be  linked.  If  a  needed
  617. module  is  not already  linked (e.g. in the base), then the
  618. linker requests the corresponding link file. To search this
  619. file a default  strategy or a query strategy can be chosen
  620. (see program option Q).
  621. There is also an option the change the libraries for
  622. searching (see option /L)
  623.  
  624. When reading the name of the master file the linker also
  625. accepts some program options from keyboard. Program options
  626. are  marked with  a  leading  character  '/'  and must be
  627. typed sequentially after the file name.
  628.  
  629. The linker accepts the options:
  630.  
  631. /B    : Linker has to ask for the name of the base file.
  632.  
  633. /Q    : Linker  has  to  ask  for  the  names  of  link  files
  634.         belonging to imported modules. If Q is not set, then the
  635.         files are searched corresponding  to a default
  636.         strategy.
  637.  
  638. /L    : Linker has to ask for the names of the libraries to be
  639.         searched. Up to 5 user libraries may be specified, separated
  640.         by comma. In addition to these libraries, <empty> and MODLIB:
  641.         will always be searched when looking for imported modules.
  642.         Normally, the directory of the master file, <empty> and MODLIB:
  643.         are searched.
  644.  
  645. /M    : A map file must be generated.
  646.  
  647. /D    : Drop Tables Option: The Linker is inhibited from writing certain 
  648.         information to the load file. The load file becomes shorter. The 
  649.         following two tables are omitted, and the consequences are:
  650.         a) the Linker Tables. Overlays cannot be linked above this program.
  651.         b) the Debugger Tables. The symbolic Debugger cannot be used for
  652.            this program (unless linked again without the /D option).
  653.  
  654. /V    : Linker  has  to  display  information  about  its version.
  655.  
  656. (**S     : System  will  be  generated,  i.e. there is no base to
  657.         link to it.
  658.  
  659. A     : Use only with option S.
  660.         Linker  has  to  ask for the start (lowest) address of
  661.         the new generated system.
  662.         If  A  is  not  set  then  a  default value (40000H) is
  663.         substituted to the start address.
  664.   **)
  665.  
  666. ->X LINKER<cr>
  667.  master file> PROG4/Q<cr>   (* base is the operating system  *)
  668.  end linkage                 (* imported modules are already *)
  669. ->                           (* linked in the resident part  *)
  670.  
  671. ->X LINKER<cr>
  672.   master file> PROG5/B/Q/M<cr>
  673.   base file> PROG4<cr>        (* DK:PROG4.LOD is accepted *)
  674.    files linked:
  675.   Prog3> PROG3<cr>            (* DK:PROG3.LNK is accepted *)
  676.  end linkage                  (* DK:PROG5.MAP is generated *)
  677. ->
  678.  
  679.  
  680.  
  681. 4.1.5 Running a program
  682. -----------------------
  683.  
  684. A  linked  program  is  ready  to  be  called  (i.e.  loaded
  685. and executed). There are  two  different  possibilities  to
  686. call  a program:
  687.  
  688. - pass a file name to the command interpreter.
  689. - activate the procedure Call, exported from module SM8Loader.
  690.   (by a program)
  691.  
  692.  
  693. (**
  694. 4.1.5A Call by command interpreter
  695. ----------------------------------
  696.  
  697. A program linked to the resident part  of  the  basic
  698. executive (MODULA.MXS)  is  called  by passing its filename
  699. to the command interpreter.  After  displaying  an  "->" the
  700. command interpreter is ready to accept a file name.
  701.  
  702. For the search strategy refer to (2.2.2 Utility-Programme).
  703.  
  704. If an error occurs during loading or execution, then the
  705. command interpreter  displays  an  error  message. If enabled,
  706. a dump of the core image will be written on file SY:DUMP.COR
  707. after an execution-error.
  708. (refer to 2.1.2 Command DON/DOFF)
  709.  
  710.  
  711. ->PROG1.LOD<cr>              PROG1.LOD is loaded and executed
  712. ...
  713. ->PROG5.LOD<cr>
  714. ---- wrong load key     program not linked to operating system
  715. ->
  716. **)
  717.  
  718.  
  719. 4.1.5B Overlay organisation:
  720. ---------------------------
  721.  
  722. A  so called overlay organisation is implemented in the
  723. Modula-2 system. It is a simple instrument to overlay
  724. program parts.
  725.  
  726. An overlay part is a load  file,  produced  by  the  linker.
  727. It consists  of  one  or  more  linked  modules. An overlay
  728. part is loaded and executed, when it is called from that
  729. base  part,  to which it has been linked (the base file).
  730.  
  731. This  simple  rule  allows  to  have program overlays on
  732. several levels.
  733.  
  734. (**In the Modula-2 system the operating system is the first
  735. overlay level.  All programs started via command interpreter
  736. are running on the second overlay level. **)
  737.  
  738. Example : Storage layout by code during execution of a
  739.           program
  740.  
  741.                                           storage
  742.                      ------------------------------>
  743.                      |     |
  744.   B is called from A |     |-------------
  745.                      |     |     B      |
  746.   B is finished      |     |-------------
  747.                      |     |
  748.   C is called from A |     |--------
  749.   D is called from C |     |       |------------
  750.                      |     |       |           |
  751.                      |  A  |       |     D     |
  752.                      |     |       |           |
  753.   D is finished      |     |   C   |------------
  754.                      |     |       |
  755.   E is called from C |     |       |--------
  756.                      |     |       |   E   |
  757.   E is finished      |     |       |--------
  758.   C is finished      |     |--------
  759.                      |     |
  760.  
  761.  
  762.  
  763. 4.1.5C Call from a program:
  764. --------------------------
  765.  
  766. If a program P2 is not linked to the basic  executive,  then
  767. it must  be  called directly from the base part P1, to
  768. which it has been linked, i.e.  the  procedure  Call,
  769. exported  from  module Loader, must be activated (see
  770. DEFINITION MODULE Loader).
  771.  
  772. 4.1.5D Run time support for program management:
  773. ----------------------------------------------
  774.  
  775. Some functions for abnormal termination and for program
  776. recovery are available from the module Exceptions.
  777.  
  778. (**If  P2  terminates  by  an  error,  then  it  is
  779. recommended to propagate the error from P1 to the basic
  780. executive  to  cause  a core  image dump and reinstallation
  781. of the underlaying operating system (see DEFINITION MODULE
  782. Exceptions).
  783.  
  784. Example : Fragments from module PROG4.
  785.  
  786.   VAR loadres : SystemTypes.LoadResultType;
  787.       exerror : SystemTypes.ErrorType;
  788.  
  789.   ...
  790.  
  791.   Loader.Call("DK PROG5 LOD",loadres,exerror);
  792.   IF exerror <> SystemTypes.NormalReturn THEN
  793.     (* cancel execution *)
  794.     Exceptions.PropagateError;
  795.   ELSE
  796.     ...
  797. **)
  798.  
  799. (**
  800. 4.1.5E Converting from .LOD to .IMA format
  801. ------------------------------------------
  802.  
  803. The M3 utility program LODIMA allows to transform the .LOD
  804. output file produced by the linker into a fast loadable
  805. format .IMA (refer to 2.5).
  806. **)
  807.  
  808. 4.1.6. Debugging
  809. ----------------
  810.  
  811. If a run time error occurs and a program terminates
  812. irregularly, then -if switched on- the Modula-2 system writes
  813. the current image of the memory onto the dump file
  814. DUMP.COR . This 'post mortem dump' can be inspected with
  815. the debugger.
  816.  
  817.  
  818.  
  819. Starting the debugger
  820. ---------------------
  821.  
  822. To run the the debugger type    X DEBUG   in the CLE line.
  823.  
  824. The debugger first asks for two file names: the dump file and
  825. the load file of the crashed program. Yyou may hit <RETURN>
  826. twice and accept the defaults. For the dump file, the
  827. default is DUMP.COR, and for the load file, it is the load
  828. file name of the crashed program, taken from the dump file.
  829. With the load file name, you may set the query or libquery
  830. option to steer the access to the reference and source files.
  831.  
  832. The options which may be given with the load file name are:
  833.  
  834. /Q       query option. DEBUG should ask for the names of
  835.          the reference and source files (REF and MOD)
  836.  
  837. /L       library query option. DEBUG should ask for the names
  838.          of libraries to be searched for REF and MOD files.
  839.  
  840. When no options are given, then REF and MOD files are searched
  841. automatically of the library of the load file.
  842.  
  843. Example:
  844.  
  845. ->X DEBUG<cr>
  846.  dump file> DUMP.COR
  847.  crashed program XY:PROG1.LOD
  848.  load file> XY:PROG1.LOD
  849.  
  850.     or
  851.  
  852.  load file> XY:PROG1.LOD/L
  853.  libraries> A:,AB:
  854.  
  855.  
  856.  ... generating P-chain
  857.  
  858.    Prog1.REF> XY:PROG1.REF<cr>
  859.  
  860.  
  861. Files of the debugger
  862. ---------------------
  863.  
  864. The debugger needs the following files:
  865. -  the dump file, DUMP.COR.
  866. -  the load file of the crashed program
  867. -  the .REF and the .MOD files of the modules to be debugged.
  868.  
  869. The dump file must be created explicitly be the user, otherwise 
  870. no dumps can be taken.
  871.  
  872.  
  873.  
  874. Windows of the debugger
  875. -----------------------
  876.  
  877. The debugger shows the crashed program through five windows (one at a time):
  878.  
  879. P(rocess window : shows the active procedures at the moment of the dump.
  880.                Also, the procedure chains of other PROCESSes may be
  881.                shown.
  882.  
  883. M(odule window : shows the list of all linked modules. After choosing a module,
  884.                the T and D window will display data of the selected module rather
  885.                than the procedure selected in the P window.
  886.  
  887. D(ata window : shows the value of the variables of the active procedures
  888.                and the value of the global variables of the modules.
  889.                Even local modules, structured variables and pointer
  890.                chains may be inspected.
  891.  
  892. T(ext window : shows the source file, located at the point in error.
  893.                For the T window, the debugger needs the source file
  894.                and the reference file,
  895.                which are searched or asked for (depending on options).
  896.                Example:
  897.                    PROG1.MOD> XY:PROG1.MOD <cr>
  898.  
  899. C(ore window : shows an absolute memory dump.
  900.  
  901.  
  902.  
  903. Commands of the debugger (DEBUG V1D)
  904. ------------------------------------
  905.  
  906. window switching commands:
  907.             "P":  switch to P window
  908.             "M":  switch to M window
  909.             "D":  switch to D window
  910.             "T":  switch to T window
  911.             "C":  switch to C window
  912.             "Q":  quit from debugger
  913.  
  914. window specific commands:
  915.  
  916.   P window: "@":  re-generate the P-chain of the process which
  917.                   was running when the program was aborted
  918.  
  919.   M window: none
  920.  
  921.   D window: "S":  go to the son level (down)
  922.             "F":  go back to the father level (up)
  923.             "V":  go back to the last level with variables
  924.             "A":  show address of the currently selected
  925.                   data element
  926.             "@":  generate the P-chain of the currently
  927.                   selected variable or field of type
  928.                   PROCESS or POINTER TO PROCESS, or of a
  929.                   PROCESS variable specified by its address
  930.                   and switch to the P window
  931.  
  932.   T window: none
  933.  
  934.   C window: "A":  ask for a new address and show its
  935.                   environment in the core
  936.             "@":  take the currently selected word as a new
  937.                   address (indirect addressing)
  938.             changing the data representation type:
  939.                   "#C": CHAR
  940.                   "#B": byte (octal)
  941.                   "#W": WORD (octal, default)
  942.                   "#I": INTEGER
  943.                   "#U": CARDINAL (unsigned)
  944.                   "#R": REAL
  945.  
  946.  
  947. general commands (legal in all windows):
  948.  
  949.   change position:
  950.             "+",<ESC>"B" (VT52/VT100 down arrow):
  951.                   increment position
  952.             "-",<ESC>"A" (VT52/VT100 up arrow):
  953.                   decrement position
  954.             "^":  increment position by half a screen length
  955.             "_":  decrement position by half a screen length
  956.          number:  set a new window position (line number)
  957.  
  958.   terminal: <ESC>"H": hardcopy terminal
  959.             <ESC>"V": VT52/VT100 terminal (default)
  960.  
  961.  
  962.  
  963.  
  964. 4.1.7 Library Searching Strategies
  965. ---------------------------------- 
  966.  
  967. The following strategies are applied by the compiler and
  968. linker to search the needed symbol or link files. The default
  969. strategy or the query strategy can be chosen. Both strategies
  970. refer by default to the default libraries (source or master
  971. file directory, <empty> and MODLIB:).
  972.  
  973. A default name is generated from the module name. If the module
  974. name is longer than 11 characters, then the first 11 characters
  975. are taken for the file name  (SMAKY 8).
  976.  
  977. Default strategy
  978. ----------------
  979.  
  980. All  needed  files  are  searched by the default name (11
  981. leading characters of the module name). A file is searched
  982. in the same directory as the source/master file first. If this
  983. search fails, then the file issearched on devices #MM0: and
  984. MODLIB:.
  985.  
  986. For  each file a message is displayed, where is was found or
  987. that it was not found. In the latter case the user has no
  988. possibility to type another file name.
  989.  
  990. The libraries to be searched by the default strategy may
  991. be changed for the compiler and the linker by the /L options.
  992.  
  993. Query strategy
  994. --------------
  995.  
  996. For each searched file the user has to type a file name
  997. (default device is <empty>).  If  search  fails,  then  an  error
  998. message  is displayed  and  another file name must be
  999. typed. If only <cr> is typed, then  the  file  is  searched
  1000. as in the default strategy.
  1001.  
  1002. Query  for  a  file  name is repeated until the file is
  1003. found or <esc> is typed. Typing <esc> means, that no file is
  1004. supplied.
  1005. On the SMAKY8, <esc> means the END key, <can> means the UNDO/ESC key.
  1006.  
  1007.  
  1008.  
  1009. 4.1.8 The module SYSTEM
  1010. -----------------------
  1011.  
  1012. The module SYSTEM offers further tools of Modula-2.
  1013. Most of them  are  implementation  dependent  and/or  refer
  1014. to the given processor. Such kind of tools are sometimes
  1015. necessary for the so called  "low  level programming".
  1016. SYSTEM contains also types and procedures which allow a very
  1017. basic coroutine handling.
  1018.  
  1019. The module SYSTEM is directly known to the compiler, because
  1020. its exported objects obey special rules, that must be
  1021. checked by the compiler. If a compilation  unit  imports
  1022. objects  from  module SYSTEM, then no symbol file must be
  1023. supplied for this module.
  1024.  
  1025. Objects exported from module SYSTEM for this 68K Version:
  1026.  
  1027. Types
  1028. -----
  1029.  
  1030. WORD
  1031.  
  1032. Representation of an individually  accessible  storage  unit
  1033. (one word = 16 Bit on MC68000). No operations are allowed
  1034. for  variables  of  type  WORD, except assignment.  A  WORD
  1035. parameter  may  be substituted by an actual parameter of any
  1036. type that uses one
  1037. word in storage. If the parameter is a value parameter, then
  1038. values   of  types  using  one  byte  are  allowed  too  for
  1039. substitution. The same  holds  for  the  substitution  of  a
  1040. dynamic ARRAY OF WORD parameter by a value of a type with an
  1041. odd size.
  1042.  
  1043. ADDRESS
  1044.  
  1045. Byte address of  any  location  in  the  storage.  The  type
  1046. ADDRESS  is  compatible with all pointer types and is itself
  1047. defined as POINTER TO WORD. All cardinal arithmetic operators
  1048. apply to this type, as well as INC and DEC.
  1049. ADDRESS may be used in the sense of "long cardinal (32bit)".
  1050. The type ADDRESS is not compatible with the type CARDINAL.
  1051. Type transfer functions (zero-filling resp. truncating) have to
  1052. be used in mixed arithmetic expressions. 
  1053.  
  1054. Under the $T- option, INC and DEC are allowed for any pointer
  1055. variables, not only for ADDRESS.
  1056.  
  1057. PROCESS
  1058.  
  1059. Type used for process handling. (points to the (moving) top of
  1060. the process stack)
  1061.  
  1062.  
  1063. Procedures
  1064. ----------
  1065.  
  1066. NEWPROCESS(p:PROC; a: ADDRESS; n: ADDRESS; VAR p1: PROCESS;
  1067.            ip: ADDRESS)
  1068.  
  1069. Procedure to instantiate a new process. At  least  300  words
  1070. are needed for the workspace of a process. ip is the initial
  1071. priority (optional, may be omitted. default is zero).
  1072.  
  1073. TRANSFER(VAR p1, p2: PROCESS)
  1074.  
  1075. Transfer of control between two processes.
  1076.  
  1077. IOTRANSFER(VAR p1, p2: PROCESS; va: ADDRESS)
  1078.  
  1079. Transfer  procedure  for processes operating on a peripheral
  1080. device. va is an interrupt vector address (not the vector
  1081. number).
  1082.  
  1083. LISTEN
  1084.  
  1085. Procedure  to  allow  an interrupt. The priority is set to 0
  1086. and afterwards back to the current priority.
  1087.  
  1088. SYSRESET
  1089.  
  1090. Procedure to initialise the system.
  1091.  
  1092. CODE(c: CARDINAL)
  1093.  
  1094. Procedure to allow the use of assembly code. c must be constant.
  1095.  
  1096. SETREG (r: CARDINAL; v: ....);
  1097.  
  1098. Procedure to set a register to a 32-bit value.
  1099. r = constant (0..7 = D0..D7, 8..15 = A0..A7).
  1100. v may be: a variable or constant (the value is put into the register),
  1101. or a procedure (the entry address is put into the register).
  1102.  
  1103. Functions
  1104. ---------
  1105.  
  1106. ADR(variable): ADDRESS
  1107.  
  1108. Storage address of the substituted variable.
  1109.  
  1110. SIZE(variable): CARDINAL
  1111.  
  1112. Number  of  bytes  used  by  the substituted variable in the
  1113. storage. If the variable is of a record type with  variants,
  1114. then the variant with maximal size is assumed.
  1115. IF variable is not a dynamic array, then SIZE is compatible
  1116. to CARDINAL, INTEGER and ADDRESS (like a numerical constant).
  1117. If variable is a dynamicarray, then SIZE is compatible to
  1118. CARDINAL only (like a CARDINAL variable).
  1119.  
  1120. TSIZE(type): CARDINAL
  1121. TSIZE(type, tag1const, tag2const, ... ): CARDINAL
  1122.  
  1123. Number of bytes used by a variable of the  substituted  type
  1124. in  the storage. If the type is a record with variants, then
  1125. tag constants of the last FieldList  (see  Modula-2  syntax)
  1126. may  be substituted in their nesting order. If no or not all
  1127. tag constants are specified, then the remaining variant with
  1128. maximal size is assumed. TSIZE is compatible to CARDINAL,
  1129. INTEGER and ADDRESS (like a numerical constant).
  1130.  
  1131.  
  1132. REGISTER(num: CARDINAL): ADDRESS
  1133.  
  1134. Content of the specified register.
  1135. num must be a constant: 0..7 = D0..D7, 8..15 = A0..A7.
  1136. Register A5 points to the process descriptor record, A6
  1137. to the data of the current procedure (dynamic link),and
  1138. A7 to the top of stack.
  1139.  
  1140.  
  1141. function ASH (x, k):
  1142.  
  1143. shift x arithmetically by k bits. x may be CARDINAL, INTEGER, ADDRESS
  1144. or a set. ASH assumes the type of x.
  1145. k may be INTEGER or CARDINAL.  k>0 shifts left, k<0 shifts right.
  1146. k is only evaluated MOD 64.
  1147.  
  1148.  
  1149. BIT(i: CARDINAL OR INTEGER): BITSET;
  1150.  
  1151. Dynamic bit set function for {i}. i may be variable or constant.
  1152. (whereas in {i} of standard MODULA, i must be a constant;
  1153. only a procedure is provided for variable i (INCL)).
  1154.  
  1155.  
  1156.  
  1157. 4.1.8A Workfiles
  1158. ----------------
  1159.  
  1160. The compiler and the linker require workfiles, which can be
  1161. permanently on the disk. With a fixed disk, or with small programs
  1162. this is recommended. They should be created (MAKE) by the user when
  1163. installing Modula-2. Otherwise the compiler and linker will
  1164. create (and delete) them as required.
  1165.  
  1166. Debugging needs a dump file, where a memory dump can be written.
  1167. This file must be created explicitely (MAKE) by you when debugging
  1168. is desired.
  1169.  
  1170.  
  1171. File names and maximal file sizes:
  1172.  
  1173.       IL1.WORK        70 KB
  1174.       IL2.WORK        50 KB
  1175.       ASCII.WORK       9 KB
  1176.       LINKER.WORK     10 KB
  1177.       DEBUG.COR        memory size + 0.25 KB
  1178.  
  1179.  
  1180.  
  1181.  
  1182. 4.1.8B Command File Execution
  1183. -----------------------------
  1184.  
  1185. On the SMAKY 8, command files are handled by the executive X, by
  1186. typing a file name with @, e.g.
  1187.      X @ORDERS
  1188. The file ORDERS.COM would then contain a list of programs to be run,
  1189. intermixed with the terminal input those programs expect.
  1190. Example for contents of ORDERS.COM (compile, link, execute ANYPROG):
  1191.      MODULA
  1192.      ANYPROG.MOD
  1193.      LINKER
  1194.      ANYPROG.LNK
  1195.      ANYPROG
  1196.      <eof>
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202. 4.1.8C History (Acknowledgements)
  1203. ---------------------------------
  1204. This implementation is a combination and translation of the compilers
  1205. written by Leo Geissmann (PDP 11 Modula-2 compiler) and Hermann Seiler
  1206. (MC68000 code generation) .
  1207.  
  1208.  
  1209. 4.1.9 Compiler error messages
  1210. -----------------------------
  1211.  
  1212.   0 :  illegal character
  1213.   1 :  eof in E+ option
  1214.   2 :  constant out of range
  1215.   3 :  open comment at end of file
  1216.   4 :  string terminator not in this line
  1217.   5 :  too many errors
  1218.   6 :  string too long
  1219.   7 :  too many identifiers (identifier table full)
  1220.   8 :  too many identifiers (hash table full)
  1221.  
  1222.  20 :  identifier expected
  1223.  21 :  INTEGER constant expected
  1224.  22 :  ']' expected
  1225.  23 :  ';' expected
  1226.  24 :  block name at the END does not match
  1227.  25 :  error in block
  1228.  26 :  ':=' expected
  1229.  27 :  error in expression
  1230.  28 :  THEN expected
  1231.  29 :  error in LOOP statement
  1232.  30 :  constant must not bee CARDINAL
  1233.  31 :  error in REPEAT statement
  1234.  32 :  UNTIL expected
  1235.  33 :  error in WHILE statement
  1236.  34 :  DO expected
  1237.  35 :  error in CASE statement
  1238.  36 :  OF expected
  1239.  37 :  ':' expected
  1240.  38 :  BEGIN expected
  1241.  39 :  error in WITH statement
  1242.  40 :  END expected
  1243.  41 :  ')' expected
  1244.  42 :  error in constant
  1245.  43 :  '=' expected
  1246.  44 :  error in TYPE declaration
  1247.  45 :  '(' expected
  1248.  46 :  MODULE expected
  1249.  47 :  QUALIFIED expected
  1250.  48 :  error in factor
  1251.  49 :  error in simple type
  1252.  50 :  ',' expected
  1253.  51 :  error in formal type
  1254.  52 :  error in statement sequence
  1255.  53 :  '.' expected
  1256.  54 :  export at global level not allowed
  1257.  55 :  body in definition module not allowed
  1258.  56 :  TO expected
  1259.  57 :  nested module in definition module not allowed
  1260.  58 :  '}' expected
  1261.  59 :  '..' expected
  1262.  60 :  error in FOR statement
  1263.  61 :  IMPORT expected
  1264.  
  1265.  70 :  identifier specified twice in importlist
  1266.  71 :  identifier not exported from qualifying module
  1267.  72 :  identifier declared twice
  1268.  73 :  identifier not declared
  1269.  74 :  type not declared
  1270.  75 :  identifier already declared in module environment
  1271.  76 :  dynamic array must not be value parameter
  1272.  77 :  too many nesting levels
  1273.  78 :  value of absolute address must be of type CARDINAL
  1274.  79 :  scope table overflow in compiler
  1275.  80 :  illegal priority
  1276.  81 :  definition module belonging to implementation  module
  1277.        not found
  1278.  82 :  structure  not  allowed  for implementation or hidden
  1279.        type
  1280.  83 :  procedure implementation different from definition
  1281.  84 :  not   all   defined   procedures   or   hidden  types
  1282.        implemented
  1283.  86 :  incompatible versions of symbolic modules
  1284.  
  1285.  88 :  function type is not scalar or basic type
  1286.  
  1287.  90 :  pointer-referenced type not declared
  1288.  91 :  tagfieldtype expected
  1289.  92 :  incompatible type of variant-constant
  1290.  93 :  constant used twice
  1291.  94 :  arithmetic error in evaluation of constant expression
  1292.  95 :  range not correct
  1293.  96 :  range only with scalar types
  1294.  97 :  type-incompatible constructor element
  1295.  98 :  element value out of bounds
  1296.  99 :  set-type identifier expected
  1297.  
  1298. 101 :  undeclared identifier in export-list of the module
  1299.  
  1300. 103 :  wrong class of identifier
  1301. 104 :  no such module name found
  1302. 105 :  module name expected
  1303. 106 :  scalar type expected
  1304. 107 :  set too large
  1305. 108 :  type must not be INTEGER or CARDINAL or ADDRESS
  1306. 109 :  scalar or subrange type expected
  1307. 110 :  variant value out of bounds
  1308. 111 :  illegal export from program module
  1309.  
  1310. 120 :  incompatible types in conversion
  1311. 121 :  this type is not expected
  1312. 122 :  variable expected
  1313. 123 :  incorrect constant
  1314. 124 :  no procedure found for substitution
  1315. 125 :  unsatisfying parameters of substituted procedure
  1316. 126 :  set constant out of range
  1317. 127 :  error in standard procedure parameters
  1318. 128 :  type incompatibility
  1319. 129 :  type identifier expected
  1320. 130 :  type impossible to index
  1321. 131 :  field not belonging to a record variable
  1322. 132 :  too many parameters
  1323.  
  1324. 134 :  reference not to a variable
  1325. 135 :  illegal parameter substitution
  1326. 136 :  constant expected
  1327. 137 :  expected parameters
  1328. 138 :  BOOLEAN type expected
  1329. 139 :  scalar types expected
  1330. 140 :  operation with incompatible type
  1331. 141 :  only global procedure or function allowed in expression
  1332. 142 :  incompatible element type
  1333. 143 :  type incompatible operands
  1334. 144 :  no selectors allowed for procedures
  1335. 145 :  only function call allowed in expression
  1336. 146 :  arrow not belonging to a pointer variable
  1337. 147 :  standard function or procedure must not be assigned
  1338. 148 :  constant not allowed as variant
  1339. 149 :  SET type expected
  1340. 150 :  illegal substitution to WORD parameter
  1341. 151 :  EXIT only in LOOP
  1342. 152 :  RETURN only in procedure or function
  1343. 153 :  expression expected
  1344. 154 :  expression not allowed
  1345. 155 :  type of function expected
  1346. 156 :  INTEGER constant expected
  1347. 157 :  procedure call expected (or ':=' misspelled)
  1348. 158 :  identifier not exported from qualifying module
  1349.  
  1350. 161 :  call of procedure with lower priority not allowed
  1351.  
  1352. 198 :  CARDINAL constant expected
  1353. 199 :  BITSET type expected
  1354. 200 :  size of structured type too large for this processor
  1355. 201 :  array index too large for this element type
  1356. 202 :  array element size too large for this processor
  1357. 203 :  array index type too large for this processor
  1358. 204 :  subrange too large for this processor
  1359.  
  1360. 206 :  illegal subrange type
  1361. 207 :  case label range too large, use IF statement
  1362. 208 :  global data too large for this processor
  1363. 209 :  local data too large for this processor
  1364. 210 :  parameter data too large for this processor
  1365. 211 :  offset of record field too large for this processor
  1366.  
  1367. 225 :  too many unnamed types (typetable full)
  1368. 226 :  reference file too long
  1369.  
  1370. 300 :  index out of range
  1371. 301 :  division by zero
  1372.  
  1373. 303 :  CASE label defined twice
  1374. 304 :  this constant is not allowed as case label
  1375.  
  1376. 400 :  expression too complicated (register overflow)
  1377. 401 :  expression too complicated (codetable overflow)
  1378. 402 :  expression too complicated (branch too long)
  1379. 403 :  expression too complicated (jumptable overflow)
  1380. 404 :  too many globals, externals and calls
  1381. 405 :  procedure or module body too long (codetable)
  1382.  
  1383. 410 :  (UNIX only) no priority specification allowed
  1384. 411 :  (UNIX only) global variable expected
  1385.  
  1386. 923 :  standard procedure  or function not implemented
  1387. 924 :  parameter must not be accessed with a WITH
  1388.  
  1389. 940 :  compiler error, adr. cat. violation in PASS4
  1390. 941 :  displacement overflow in ari addressing mode
  1391. 942 :  32bit by 32bit multiply/divide not yet implemented
  1392. 943 :  index range must not exceed positive integer range
  1393. 944 :  jump too long (overflow in pc-relative offset)
  1394. 945 :  offset too long (overflow in pc-relative offset)
  1395. 946 :  FOR control variable is not of simple addressing mode
  1396.  
  1397. 974 :  step 0 in FOR statement
  1398.  
  1399. 981 :  constant out of legal range
  1400. 982 :  overflow / underflow    in   index / offset / address
  1401.        calculation
  1402. 983 :  use UNIXCALL instead of standard procedure call
  1403.  
  1404. 990 :  too many WITH nested
  1405. 991 :  CARDINAL divisor too large ( > 8000H )
  1406. 992 :  FOR  control  variable  must  not have byte size (for
  1407.        step # -1, 1)
  1408. 993 :  INC,  DEC  not  implemented with 2. argument for byte
  1409.        variable
  1410. 994 :  too many nested procedures
  1411. 995 :  FOR step too large ( > 7FFFH )
  1412. 996 :  CASE label too large ( > 7FFFH )
  1413. 997 :  type transfer function not implemented
  1414. 998 :  FOR limit too large
  1415. 999 :  missing symbol file(s)
  1416.  
  1417.