home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xc212os2.zip / DOC / INTRO.TXT < prev    next >
Text File  |  1996-03-06  |  24KB  |  674 lines

  1. INTRO.TXT                        Copyright (c) 1991,96 xTech Ltd
  2. ----------------------------------------------------------------
  3.  
  4.            Welcome to the pre-release version of XDS v2.12
  5.            -----------------------------------------------
  6.  
  7. XDS is a professional development system available for most popular
  8. platforms,  including  PC/MS-DOS,  Unix workstations (Sun, HP, DEC,
  9. MIPS, etc),  Macintosh, etc  via the C generation.  The native code
  10. compilers are available currently for Windows NT, Windows 95, OS/2 
  11. and Linux. The previous version of XDS was known as "Extacy".  The 
  12. native code versions of the system were distributed as "Extacy.EXE" 
  13. and "OM2".
  14.  
  15. XDS contains both Modula-2 and Oberon-2 compilers. The source
  16. language of XDS Modula-2 compiler is fully compatible with ISO
  17. Modula-2 standard. We are expecting that adaptation of the ISO
  18. standard will cause the new wave of interest to Modula-2. The ISO
  19. Modula-2 includes features important for industry programming such
  20. as standard library set, exceptions, and support of concurrency.
  21.  
  22. Oberon-2 is an object-oriented programming (OOP) language based
  23. on Modula-2. With introduction of object-oriented facilities,
  24. extensible project design became much easier. Meanwhile Oberon-2
  25. is quite simple and easy to learn and use, unlike other OOP
  26. languages such as C++ or Smalltalk.
  27.  
  28. Moving to a new language usually means throwing away or rewriting
  29. your existing library set which could have been the work of many
  30. years. XDS allows programmer to mix Modula-2, Oberon-2, C and
  31. Assembler modules and libraries in a single project.
  32.  
  33. XDS includes subsets of standard ISO and PIM Modula-2 libraries
  34. complete with ANSI C standard interface which can be accessed
  35. and used from both Modula-2 and Oberon-2.
  36.  
  37.                  About the pre_release Version
  38.                  -----------------------------
  39.  
  40. This version is a pre-release distribution of XDS OS/2 package,
  41. including:
  42.  
  43.         - "xds" - interactive programming environment
  44.         - "xc" utility, which combines Modula-2 and Oberon-2
  45.                to compilers and "make" facilities
  46.         - ISO Modula-2 Library
  47.         - A subset of the PIM Compliant Library
  48.         - A subset of the ANSI C Library Interfaces
  49.  
  50. The "xc" utility will only operate on computers that are IBM PS2
  51. or IBM AT compatible and contain an 80386 processor with numerical
  52. coprocessor or better.
  53.  
  54.                             Using XDS
  55.                             ---------
  56.  
  57. The  XDS  Modula-2  and  Oberon-2 compilers are activated from a
  58. single  utility  "xc".  When  invoked  without  parameters,  the
  59. utility shows some "help" information. The working configuration
  60. includes:
  61.  
  62.         xc.exe    Modula-2/Oberon-2 development system
  63.         xc.msg    Contains texts of error messages
  64.         xc.red    Search path redirection file (optional)
  65.         xc.cfg    Configuration file (optional)
  66.  
  67. When  invoked  the  "xc"  tries  to locate the xc.red file in the
  68. current directory or in the directory where "xc.exe" (C:\XDS\BIN)
  69. is placed.
  70.  
  71. Other system files ("xc.msg" and "xc.cfg") are sought by paths
  72. defined  by "xc.red". If "xc.red" is not found, or it does not
  73. contain paths for a system file, the system file is sought in the
  74. current  directory  or  in  the  directory where "xc.exe" is
  75. placed.
  76.  
  77.                         Redirection File
  78.                         ----------------
  79.  
  80. The file "xc.red" consists of several lines of the form:
  81.  
  82.         pattern = directory_path {";" directory_path}
  83.  
  84. Example of redirection file:
  85.  
  86.         *.def  = def
  87.         *.mod  = mod
  88.         *.sym  = sym; c:\xds\sym;
  89.         xc.cfg = .; c:\xds\bin
  90.  
  91. XDS  will  search definition modules in the "def" sub-directory,
  92. symbol files in the "sym" sub-directory and then in "c:\xds\sym"
  93. and  files  "xc.cfg",  "xc.msg"  will  be  sought in the current
  94. directory and then in "c:\xds\bin".
  95.  
  96.  
  97.                        Configuration File
  98.                        ------------------
  99.  
  100. The configuration file can be used to set the default values  of
  101. options and equations.
  102.  
  103. When  invoked,  XDS  searches  for  configuration file "xc.cfg".
  104. Every  line  in  the  configuration  file  can  contain only one
  105. compiler  option  or equation setup directive. It is possible to
  106. put  comment lines into configuration file. Comment lines should
  107. start with a "%" symbol.
  108.  
  109. setup_directive = declare_option
  110.                 | declare_synonym
  111.                 | set_option_on
  112.                 | set_option_off
  113.                 | set_equation
  114. declare_option  = '-' name ':' [ '+' | '-' ]
  115. declare_synonym = '-' name ':=' name
  116. set_option_on   = '-' name '+'
  117. set_option_off  = '-' name '-'
  118. set_equation    = '-' name ['='] value
  119.  
  120. To set an option ON, use "-OPTION+" directive.
  121. To set an equation,  use  "-OPTION = VALUE" directive.
  122.  
  123. Option and equation names are case independent. Arbitrary spaces
  124. are permitted in the configuration file.
  125.  
  126. Example:
  127.  
  128.         % this is a comment
  129.         % equation option - set Oberon-2 file extension
  130.         - Oberon = ob2
  131.         % boolean option - allow Modula-2 extensions
  132.         - M2extensions +
  133.         % end of configuration file
  134.  
  135.                           Invoking XDS
  136.                           ------------
  137.  
  138. "xc" is invoked from the command line of the following form
  139.  
  140.         xc { OPERATION MODE | OPTION | NAME }
  141.  
  142. where  NAME for different operation modes is a module name, file
  143. name or a project name.
  144.  
  145. XDS has the following modes of operation:
  146.  
  147.     Mode    |  Meaning
  148. ------------+---------------------------------------------------
  149.     COMPILE | Compile all modules given in the command line
  150.     PROJECT | Make all projects given in the command line
  151.     MAKE    | Check dependencies and recompile
  152.     GEN     | Generate makefile for all projects
  153.     BROWSE  | Extract definitions from symbol files
  154.     HELP    | Print help and abort the program
  155. ------------+---------------------------------------------------
  156.  
  157. Both the PROJECT and MAKE modes have two optional submodes of
  158. operation: BATCH and ALL. Two auxiliary operation submodes -
  159. OPTIONS and EQUATIONS can be used to inspect the set of compiler
  160. options and equations and their values.
  161.  
  162. From the command line, the compiler mode is set using '=',
  163. followed by the required mode. Only the unique portion of a name
  164. need be specified. Operation mode names are not case sensitive,
  165. thus
  166.         =PROJECT   is equivalent to   =p
  167.         =BROWSE    is equivalent to   =Bro
  168.  
  169. Operation modes and options can be placed everywhere in the
  170. command line. Thus the following two invocation are equal:
  171.     xc =make hello.mod =all -checknil+
  172.     xc -checknil+ =a =make hello.mod
  173.  
  174. COMPILE mode
  175. ------------
  176.  
  177.     xc [=compile] { FILENAME | OPTION  }
  178.  
  179. COMPILE is the default mode, and can be invoked simply by
  180. supplying "xc" with a source module(s) to compile. If xc is
  181. invoked without a given mode, COMPILE mode is assumed. In order
  182. to determine which compiler to use, xc looks at the extensions of
  183. given source files. The default mapping of extensions is given
  184. below :
  185.     .mod  - Modula-2 implementation module
  186.     .def  - Modula-2 definition module
  187.     .ob2  - Oberon-2 module
  188.  
  189. For example:
  190.         xc hello.mod
  191. will invoke Modula-2 compiler, whilst:
  192.         xc hello.ob2
  193. will invoke Oberon-2 compiler.
  194.  
  195. The user is able to reconfigure the extension mapping. It is
  196. also possible to override this extension mapping from the
  197. command line, using options M2 and O2:
  198.      xc hello.mod +o2  (* invokes O2 compiler *)
  199.      xc hello.ob2 +m2  (* invokes M2 compiler *)
  200.  
  201. MAKE mode
  202. ---------
  203.  
  204.     xc =make [=batch] [=all] { FILENAME | OPTION }
  205.  
  206. In the MAKE mode the compiler calculates module dependencies
  207. (using IMPORT clauses) and then recompiles all modules that
  208. necessary.
  209.  
  210. Starting from the files in the command line it tries to find an
  211. Oberon module or a definition and implementation module for each
  212. imported module. It then tries to do the same for each of the
  213. imported modules until all modules are located. Note that search
  214. is made for source files only, if a source file is not found, the
  215. imported modules will not be appended to the project. Usually,
  216. only a Modula-2 program module or Oberon-2 top-level module
  217. should be given in the command line.
  218.  
  219. When all modules are gathered, XDS looks to an operation submode.
  220. If the BATCH submode is specified, the XDS creates a batch file
  221. of all necessary compilations, rather than actually calling the
  222. compilers and compiling the source code.
  223.  
  224. If  the ALL submode is specified, all gathered files are
  225. recompiled, otherwise XDS calculates conditions for recompilation
  226. and recompiles only those files that necessary.
  227.  
  228. PROJECT mode
  229. ------------
  230.  
  231.    xc =project [=batch] [=all] { PROJECTFILE | OPTION }
  232.  
  233. PROJECT mode is essentially the same as MAKE mode except that the
  234. modules to be `made' are provided in a project file. A project
  235. file consists of options settings and a list of modules:
  236.  
  237.      { OPTION }
  238.      { !module { FILENAME } }
  239.  
  240. where OPTIONs are the compiler options that all modules should be
  241. compiled  with,  and  FILENAMEs  are  modules in the project. XDS
  242. recursively  looks  at  all  the  given  files  for  any imported
  243. modules.  Thus,  usually,  a  project  file  would consist of one
  244. single  module, the main program module. As in MAKE mode, ALL and
  245. BATCH submodes can be used.
  246.  
  247. GEN mode
  248. --------
  249.  
  250.     xc =gen { PROJECTFILE | OPTION }
  251.  
  252. The GEN operation mode allows you to generate a file, containing
  253. information about your project. The most important usage is to
  254. generate a makefile or task file for linker. This DEMO
  255. documentation does not contain the description of template files.
  256.  
  257. The DEMO package contains the "xds.tem" template file (See on
  258. C:\XDS\BIN) which can be used to create task file for link386.
  259.  
  260. XDS also process a template if the option MAKEFILE is set
  261. on, when invoking the xc utility in the PROJECT mode.
  262.  
  263. BROWSE mode
  264. -----------
  265.  
  266.     xc =browse { MODULENAME | OPTION }
  267.  
  268. The BROWSE operation mode allows you to generate a pseudo
  269. definition module for an Oberon-2 module. In this mode "xc" scans
  270. the corresponding symbol file and outputs definitions of all
  271. client-visible symbols in a Modula-2-like definition module in
  272. Oberon-2  syntax.  This  pseudo definition module will not
  273. necessarily contain legal Modula-2 or Oberon-2 and thus any
  274. output should not be treated as such.
  275.  
  276. The MAKEDEF option provides an alternative method of producing
  277. pseudo definition modules, preserving so-called exported
  278. comments if necessary. If the option is set the compiler will
  279. create a definition for the each Oberon module compiled.
  280.  
  281. ALL submode
  282. ----------
  283.  
  284. In both PROJECT and MAKE modes, XDS checks the time stamps of the
  285. files concerned and only recompiles when necessary. If ALL submode
  286. is set, the time stamps are ignored, and all files are compiled.
  287.  
  288. BATCH submode
  289. -------------
  290.  
  291. The BATCH submode, creates a batch file of all necessary
  292. compilations when specified from either PROJECT or MAKE modes,
  293. rather than actually calling the compilers and compiling the source
  294. code.
  295.  
  296. OPTIONS submode
  297. ---------------
  298.  
  299. The OPTIONS submode allows you to inspect the values of options set
  300. in the configuration file, project file and on the command line. It
  301. can be used along with COMPILE, MAKE and PROJECT modes.
  302.  
  303. The following invocation will print (to the standard output) the
  304. list of all defined options, including all pre-declared options,
  305. all options declared in the configuration file, in the project file
  306. "my.prj" and on the command line (XYZ option):
  307.          xc =options  -prj=my.prj -xyz:+
  308.  
  309. In the PROJECT mode options are listed for each project file
  310. given on the command line.
  311.  
  312. EQUATIONS submode
  313. -----------------
  314.  
  315. The EQUATIONS submode allows you to inspect the values of
  316. options set in the configuration file, project file and on the
  317. command line. It can be used along with COMPILE, MAKE and
  318. PROJECT modes.
  319.  
  320.  
  321.                    Using the Modula-2 Compiler
  322.                    ---------------------------
  323.  
  324. Create a file called "hello.mod", containing the following text:
  325.  
  326.         MODULE hello;
  327.         IMPORT InOut;
  328.         BEGIN
  329.           InOut.WriteString("Hello World");
  330.           InOut.WriteLn;
  331.         END hello.
  332.  
  333. Now type:
  334.         xc hello.mod
  335.  
  336. It will generate hello.obj.
  337.  
  338.  
  339.                    Using the Oberon-2 Compiler
  340.                    ---------------------------
  341.  
  342. The Modula-2 source code just  shown  is  also  perfectly  valid
  343. Oberon-2. Rename the source file to "hello.ob2".
  344.  
  345. As in Modula-2, this  source  code  in  Oberon-2  constitutes  a
  346. top-level module or program module. Unlike Modula-2, there is no
  347. syntactic distinction between a top-level module and  any  other
  348. service module. The Oberon-2 compiler must be specifically  told
  349. that this is a program module by using option "MAIN".
  350.  
  351. Type:
  352.         xc hello.ob2 +MAIN +DEF
  353.  
  354. During the compilation, the Oberon-2 compiler produces files
  355. "hello.obj" and "hello.sym".
  356.  
  357.                        Running a Program
  358.                        -----------------
  359.  
  360. After compilation of all modules composing your project you have to
  361. link the program.
  362.         link386 hello.obj, ,\xds\lib\libxds.lib+\xds\lib\os2min;
  363.  
  364. After that, one can invoke the program:
  365.         hello
  366.  
  367. It may be necessary to specify additional options to put debug
  368. information into hello.exe file, or to specify stack size.
  369. Check "link386" documentation to get help.
  370.  
  371. To simplify linking, XDS allows to specify a linker command line in
  372. the XDS environment, using the LINK equation.  A command line,
  373. specified by the equation will be executed after successful
  374. compilation of the whole project. Usually, the equation is
  375. specified in the project file.
  376.  
  377. Example of project file hello.prj:
  378.  
  379. -link="link386 hello.obj, ,\\xds\\lib\\libxds.lib;"
  380. !module hello.mod
  381.  
  382. The project file contains the LINK equation and a name of
  383. program module.
  384.  
  385. The following invokation
  386.         xc hello.prj =project
  387. will compile modules constituting the project (if required) and
  388. then execute the linker command line specified.
  389.  
  390. If your project contains more than one module, it'd be better
  391. to use universal scheme. The XDS distibution contains the template
  392. file "xds.tem" (C:\XDS\BIN\xds.tem). To use it, write a project 
  393. file hello.prj:
  394.  
  395. -template = xds.tem
  396. -mkfname = tmp
  397. -mkfext  = lnk
  398. -makefile+
  399. -link = "link386 @%s",mkfname
  400. !module hello.ob2
  401.  
  402. Then call
  403.         xc hello =p
  404. After the successful compilation xc will call linker.
  405.  
  406. See also SAMPLES.TXT for more information.
  407.  
  408.         Configuring XDS for a C Compiler
  409.         --------------------------------
  410.  
  411. XDS allows to use C functions and libraries in your projects.
  412. Different C compilers have different naming and calling
  413. conventions.  Your have to specify your C compiler in XDS
  414. environment, using the CC equation.  The equation forces XDS to
  415. call all C functions in a way compatible with the specified C
  416. compiler. Also the compiler sets default values of additional
  417. configuration options according to the value of the equation.
  418.  
  419. Currently, XDS supports Watcom compiler and SysCall calling 
  420. conventions. The corresponding values of the CC equations are 
  421. WATCOM and OS2SYSCALL (written in any case). To configure XDS 
  422. append the line
  423.  
  424. -cc=Watcom
  425.  
  426. or
  427.  
  428. -cc=OS2SYS_CALL
  429.  
  430. in your configuration file.
  431.  
  432.                      Options and Equations
  433.                      ---------------------
  434.  
  435. A  rich  set  of XDS options and equations allows one to control
  436. source   language,   code  generated  and  internal  limits  and
  437. settings.  Note:  All options in the command line are applied to
  438. all operands.
  439.  
  440. Precedence of Compiler Options
  441. ------------------------------
  442.  
  443. The "xc" utility can receive its options from
  444.      - configuration file "xc.cfg"
  445.      - command line
  446.      - project file (if present)
  447.      - inline in source text (not all options may be used there)
  448.  
  449. At  any  point  during  operation,  the  most recent option value
  450. setting will be in effect. Thus, if the compiler equation OBERON
  451. was  set to ".ob2" in the configuration file, but then set on the
  452. command line as "OBERON=.o", then XDS will recognize ".o" as the
  453. Oberon-2 module extension.
  454.  
  455. Compiler Options
  456. ----------------
  457.  
  458. The following is the subset of compiler options (default values are
  459. pointed out as [ON] or [OFF]:
  460.  
  461. CHECKDINDEX [ON]
  462.         Dynamic array bounds check
  463.  
  464. CHECKINDEX [ON]
  465.         Static array bounds check
  466.  
  467. CHECKNIL [ON]
  468.         NIL pointer dereference check
  469.  
  470. CHECKPROC [ON]
  471.         NIL formal procedure call check
  472.  
  473. CHECKRANGE [ON]
  474.         Range checks for ranges and enumerations
  475.  
  476. CHECKSET [ON]
  477.         Range check in set operations
  478.  
  479. CHECKTYPE [ON]  (Oberon-2 only)
  480.         Dynamic type guards generation
  481.  
  482. DEF [OFF]
  483.         Permission to change symbol file.
  484.  
  485.         XDS  creates  a  temporary  symbol  file  every  time  an
  486.         Oberon-2 module is compiled and compares this symbol file
  487.         with  the  existing one, overriding the file with the new
  488.         one  if  necessary.  If  option DEF is OFF (default), the
  489.         compiler  will  give an error if the symbol file (and the
  490.         module  interface respectively) had been changed and will
  491.         not replace the old symbol file.
  492.  
  493. M2ADDTYPES [OFF] (Modula-2 only)
  494.         Add SHORT and LONG types.
  495.  
  496.         When  ON,  the  compiler  will  recognize  as  pervasive
  497.         identifiers the types SHORTINT, LONGINT,  SHORTCARD  and
  498.         LONGCARD.
  499.  
  500. M2BASE16 [OFF]  (Modula-2 only)
  501.  
  502.         When  ON,  basic types (INTEGER, CARDINAL and BITSET) are
  503.         16-bits wide in Modula-2.
  504.  
  505. M2EXTENSIONS [OFF] (Modula-2 only)
  506.         XDS Modula-2 extensions.
  507.  
  508.         When ON, the compiler  will  allow  the  use  of  XDS
  509.         Modula-2 language extensions.
  510.  
  511. MAIN [OFF]      (Oberon-2 only)
  512.         Oberon-2 main module.
  513.  
  514.         When ON, the compiler  will  generate  a  program  entry
  515.         point ("main"  function)  for  this  Oberon-2  module.
  516.         Inline usage recommended, ie:
  517.  
  518.                 <*+ MAIN *>
  519.                 MODULE Example;
  520.                   ...
  521.                 END Example.
  522.  
  523. O2EXTENSIONS [OFF] (Oberon-2 only)
  524.         XDS Oberon-2 extensions.
  525.  
  526.         When ON, the compiler  will  allow  the  use  of  XDS
  527.         Oberon-2 language extensions.
  528.  
  529. O2ISOPRAGMA [OFF] (Oberon-2 only)
  530.  
  531.         When  ON, the compiler will allow the use of ISO M2 style
  532.         pragmas <* *>.
  533.  
  534.         The  option  is  set  ON  in  "C:\XDS\BIN\xc.cfg".  It is
  535.         required  to compile Oberon samples, containing ISO style
  536.         pragmas, such as <*+ MAIN *>.
  537.  
  538. O2NUMEXT [OFF]  (Oberon-2 only)
  539.  
  540.         Enables Oberon-2 numeric extensions (complex types
  541.         and in-line exponentiation operator "**").
  542.  
  543. WOFF[number] [OFF]
  544.         WOFF without parameter turn all warnings OFF.
  545.  
  546.         When WOFF<number> (i.e. WOFF301)  is  ON,  the  compiler
  547.         will not report warning <number> (i.e. 301).
  548.  
  549.         See "xc.msg" file for warning texts and numbers.
  550.  
  551.  
  552.                             Libraries
  553.                             ---------
  554.  
  555. The pre-release package contains libraries from the following library
  556. sets:
  557.         - Interface to ANSI C libraries
  558.         - PIM compliant libraries
  559.         - ISO standard Modula-2 libraries
  560.         - Interface to Oberon run-time support
  561.  
  562. All  these  libraries  can  be used in both Modula-2 and Oberon-2
  563. programs. We recommend to use ISO libraries to improve portability
  564. of your software.
  565.  
  566. This documentation does not contain the description of libraries,
  567. use corresponding definition modules instead (C:\XDS\DEF).
  568.  
  569. Interface to ANSI C libraries
  570. -----------------------------
  571.  
  572. The following libraries provides an interface to ANSI C libraries:
  573.  
  574.     stdlib       interface to <stdlib.h>
  575.     stdio        interface to <stdio.h>
  576.     math         interface to <math.h>
  577.     time         interface to <time.h>
  578.  
  579. PIM compliant libraries
  580. -----------------------
  581.  
  582. The   following   libraries   defined  in  PIM  ("Programming  in
  583. Modula-2") are provided:
  584.  
  585.     InOut        general purpose IO operations
  586.     MathLib0     mathematical functions
  587.     RealInOut    REAL numbers IO operations
  588.     LongInOut    LONGREAL numbers IO operations
  589.     Terminal     computer's terminal IO operations
  590.  
  591. Since   PIM   "Storage" library   is   not  compatible  with  the
  592. corresponding ISO library, it is omitted.
  593.  
  594. ISO standard Modula-2 libraries
  595. -------------------------------
  596.  
  597. The following ISO libraries are included in the package:
  598.  
  599.     ProgramArgs   Access to program arguments
  600.     StreamFile    Sequentional data streams
  601.     IOConsts      Types and constants for IO modules
  602.     TextIO        Character and strings type IO operations
  603.     STextIO       TextIO over default channels
  604.     WholeIO       Whole numbers IO operations
  605.     SWholeIO      WholeIO over default channels
  606.     RealIO        Real number IO operations
  607.     SRealIO       RealIO over default channels
  608.     IOResult      Read results for specified channels
  609.     SResultIO     Read results for the default input channel
  610.     ConvTypes     Common types used in the string conversion
  611.                   modules
  612.     RealStr       REAL/string conversions
  613.     WholeStr      Whole-number/string conversions
  614.     CharClass     provides predicates to test a given value
  615.                   of the character type
  616.     RealMath      Mathematical functions for the type REAL
  617.     LongMath      Mathematical functions for the type LONGREAL
  618.     Storage       Facilities for dynamically allocating
  619.                   and deallocating storage
  620.     Strings       Facilities for manipulating strings
  621.     SysClock      Facilities for accessing a system clock
  622.  
  623. The following system libraries are available in the package:
  624.  
  625.     TERMINATION   Facilities for enquiries concerning the
  626.                   occurrence of termination events.
  627.     EXCEPTIONS    Facilities for raising user exceptions
  628.                   and for making enquiries concerning
  629.                   the current execution state.
  630.     M2EXCEPTION   Facilities for identifying language exceptions.
  631.  
  632. Note:  all  these  system  libraries  are  not  embedded  in  the
  633. compiler,  ie.  the corresponding symbol files shall be available
  634. to  use  them. The system module "COROUTINES" is not available in
  635. the DEMO version.
  636.  
  637. Interface to Oberon run-time support
  638. ------------------------------------
  639.  
  640. The  "oberonRTS" library provides an interface to Oberon-2 run-time
  641. support functions, including garbage collection and meta-language
  642. facilities. See also SAMPLES.TXT.
  643.  
  644.                          Further Reading
  645.                          ---------------
  646.  
  647. [1]     H. Mossenbock, N. Wirth
  648.         The Programming Language Oberon-2
  649.         Structured Programming, 1991, 12, 179-195
  650.  
  651. [2]     N. Wirth
  652.         Programming in Modula-2 (4th edition)
  653.         Springer-Verlag, 1988. ISBN 0-387-50150-9
  654.  
  655. [3]     N. Wirth
  656.         From Modula-2 to Oberon
  657.         Software, Practice and Experience 18:7 (1988), 661-670
  658.  
  659. [4]     M. Reiser, N. Wirth
  660.         Programming in Oberon-2 - Steps Beyond Pascal and Modula
  661.         ACM Press, Addison Wessley, 1992. ISBN 0-201-56543-9
  662.  
  663. [5]     H. Mossenbock
  664.         Object-Oriented Programming in Oberon-2
  665.         Springer-Verlag, 1993.
  666.         ISBN 0-387-56411-X, 0-387-56411-X
  667.  
  668. Internet newsgroups comp.lang.modula2 and  comp.lang.oberon  are
  669. useful  not  only  for  beginners  but  for experienced Modula-2
  670. programmers as well.
  671.  
  672.  
  673.                         [end of document]
  674.