home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / fj / comp / oops / 345 < prev    next >
Encoding:
Internet Message Format  |  1992-12-14  |  60.5 KB

  1. Path: sparky!uunet!stanford.edu!sun-barr!sh.wide!wnoc-tyo-news!sranha!sran265!hironobu
  2. From: hironobu@sra.co.jp (Hironobu Suzuki)
  3. Newsgroups: fj.comp.oops
  4. Subject: What is true OOPS? Answer is "BETA".
  5. Message-ID: <HIRONOBU.92Dec14213001@sran265.sra.co.jp>
  6. Date: 14 Dec 92 12:30:01 GMT
  7. Sender: news@sran265.sra.co.jp
  8. Distribution: fj
  9. Organization: Software Research Associates, Inc., Japan
  10. Lines: 1340
  11.  
  12.  
  13.  
  14. BETA$B$H$$$&(B$B$N$O(BSimula$B$+$iL.!9$HN.$l$k%*%V%8%'%/%H;X8~$NNr;K$r0z$-$D$$$F(B
  15. $B$$$kKL2$$G:n$i$l$?%*%V%8%'%/%H;X8~8@8l$G(B$B$9!#(B
  16.  
  17. $B$H!"$$$C$F$b<B:]$K;H$C$?$3$H$,$J$$(B($B$=$NJU$,Ha$7$$$s$@$J(B)$B%7%9%F%`$@$1$I!"(B
  18. $B$3$$$D$NOC$rJ9$$$F$$$k(B$B$H!V$3$l$>??$N%*%V%8%'%/%H;X8~8@8l$+$J(B?$B!W$H;W$o(B
  19. $B$;$F$/$l$^$9!#(B
  20.  
  21. $BKL2$$N;:3X6(F1$N%W%m%8%'%/%H(BMjolner($B%_(B$B%h%k%J!<(B)$B$N@.2LJ*$G$9!#J#?t$N4k(B
  22. $B6H$HBg3X$G:n$C$F$$$kAH?%$G$9!#(BMjolner$B$H$$$&$N$O!"KL2$$NMr$N?@MM$N;}$D(B
  23. $B6bDH$N$3$H$G!"$3$l$r0l?6$j$9$k$H!"6/NO$J%$%+%E%A$,Mn$A$k$=$&$G$9!#$G!"(B
  24. $B%=%U%H%&%(%"9)3X$H$$$&$N$b$NBP(B$B$7$F%*%V%8%'%/%H;X8~5;=Q$r?)$i$o$=$&$H$$(B
  25. $B$&$N$@$=$&$G$9!#(B
  26.  
  27. Mjolner$B$NK\It$K%a!<%k$r=P$7$FJV;v$,$-$?$N$G(B$B!"$=$NJV;v$N(BBETA$B$N:G?7$N%7(B
  28. $B%9%F%`$K4X$7$F$N>pJs$NItJ,$b:\$;$^$9!#$A$g$C$HBg$-$$$G$9!#%W%i%$%9%j%9(B
  29. $B%H$b(B$B?=$79~$_@h$b$<$s$VF~$C$F$$$k$N$G!"Bg3X$d8&5f=j$G6=L#$N$"$kJ}$O$3$N(B
  30. $B>pJs$G9XF~$9$k$3$H$b$3$l$G$G$-$k$G(B$B$7$g$&!#(B
  31.  
  32. BETA$B$OF|K\=iEP>l$+$J(B?  $B%3%s%T%e!<%?$N$3$H$H8@$($P!"KM$b$=$&$@$1$I!"%"(B
  33. $B%a%j%+$7$+$_$F$$$J$$!#(B$B%h!<%m%C%Q$K$b?'!9$$$$$b$N$,$"$k$s$G$9!#;DG0$J$,(B
  34. $B$iF|K\$K$=$N>pJs$,KX$IN.$l$F$-$^$;$s$7!"N.$l$F$b$"$s(B$B$^$j6=L#$r<($7$^$;(B
  35. $B$s$1$I!#(B
  36.  
  37.                         $B$R$m$N$V(B
  38. ----------------------------( cut here)-------------------------------
  39.                         Mjolner Informatics
  40.                        is happy to announce
  41.                     the commercial release of:
  42.                                  
  43.                       The Mjolner BETA System
  44.                                  
  45.            A software development environment supporting
  46.                     object-oriented programming
  47.                  in the BETA programming language
  48.                                  
  49. BETA  is  a  modern object-oriented language from the Scandinavian
  50. School  of object-orientation with powerful abstraction mechanisms
  51. for identification of objects, classification and composition.  It
  52. has  strong  typing,  whole/part  objects,  reference  attributes,
  53. general block structure, coroutines and concurrency.
  54. The  BETA  implementation  has  native  code  generation,  garbage
  55. collection, separate compilation, configuration control, interface
  56. to C and assembly, source-level debugger, and persistent objects.
  57. There  is  a  large  library  of class  patterns  and  application
  58. frameworks.
  59.  - Class patterns for text, file, set, multiset, set with subsets,
  60.    hashtable, list, stack, queue, priority queue, deque, etc.
  61.  - Powerful and easy to use application frameworks on top of the X
  62.    Window System, Athena Widgets, and Motif.
  63.  - Powerful and easy to use application frameworks on top  of  the
  64.    Macintosh Toolbox.
  65.  - Powerful  metaprogramming system for manipulating  programs  as
  66.    data.
  67.  - Interface to operating system and external languages.
  68.  - Powerful graphical system based on the Stencil & Paint  imaging
  69.    model.
  70. A  pre-release  is  available of the Hyper  Structure  Editor  for
  71. programs  and text documents supporting integrated syntax directed
  72. and  textual  editing, incremental parsing, abstract  presentation
  73. and browsing, integration of documentation and comments, hypertext
  74. facilities, and adaptive pretty printing.
  75. A  demo  version is available of the Mjolner BETA CASE Tool,  with
  76. support  for  design diagrams and simultaneous editing  of  design
  77. diagrams and program text. Eliminates CASE gap by using one single
  78. abstract language-BETA for design as well as for implementation.
  79. The  system  has  taken its name from the Nordic  mythology  where
  80. Mjolner  is the name of the hammer of the god Thor.  According  to
  81. the  mythology, this hammer is the perfect tool that cannot  fail,
  82. grows with the task, and always comes back in the hand of Thor.
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.                          The BETA Language
  93. BETA  is  developed  within  the Scandinavian  School  of  object-
  94. orientation, where the first object-oriented language, Simula, was
  95. developed. BETA is a modern language in the Simula tradition.  The
  96. resulting  language  is  smaller than Simula  in  spite  of  being
  97. considerably  more expressive. BETA is a strongly  typed  language
  98. like Simula, Eiffel and C++, with most type checking being carried
  99. out  at  compile-time. It is well know that it is not possible  to
  100. obtain  all type checking at compile time without sacrificing  the
  101. expressiveness  of the language. BETA has optimum balance  between
  102. compile-time type checking and run-time type checking.
  103.  
  104. Powerful Abstraction Mechanisms
  105. BETA  has  powerful abstraction mechanisms that provides excellent
  106. support  for design and implementation, including data  definition
  107. for  persistent data. The powerful abstraction mechanisms  greatly
  108. enhances reusability of designs and implementations.
  109. The  abstraction  mechanisms include: class, procedure,  function,
  110. coroutine, process, exception, and many more, all unified  to  the
  111. ultimate  abstraction mechanism: the pattern. In addition  to  the
  112. pattern,   BETA  has  subpattern,  virtual  pattern  and   pattern
  113. variable.
  114. This   unification  of  abstraction  mechanisms  gives  a  uniform
  115. treatment   of  abstraction  mechanisms  and  a  number   of   new
  116. abstraction   mechanisms.  Most  object-oriented  languages   have
  117. classes, subclasses and virtual procedures and some have procedure
  118. variables.  Since  a  pattern is a generalization  of  abstraction
  119. mechanisms  like class, procedure, function, etc., the notions  of
  120. subpattern,  virtual pattern and pattern variable  also  apply  to
  121. these  abstraction mechanisms. The following table shows  some  of
  122. the possible combinations supported by BETA:
  123.  
  124.              class  proce-   func-    co-   process   excep-
  125.                      dure    tion   routine           tion
  126. pattern        +       +       +       +       +        +
  127. subpattern     +       +       +       +       +        +
  128. virtual pat.   +       +       +       +       +        +
  129. pattern var.   +       +       +       +       +        +
  130.  
  131.  
  132. Pattern:  The  pattern is the ultimate abstraction mechanism  that
  133. generalizes   class,  procedure,  function,  coroutine,   process,
  134. exception, etc.
  135. Subpattern:  The  subpattern covers subclasses as  in  most  other
  136. languages.  In  addition,  procedures  may  be  organized   in   a
  137. subprocedure hierarchy in the same way as classes may be organized
  138. in  a  subclass  hierarchy. Since patterns may  also  be  used  to
  139. describe   functions,   coroutines,  concurrent   processes,   and
  140. exceptions, these may also be organized in a pattern hierarchy.
  141. Virtual  pattern:  The  notion of virtual pattern  covers  virtual
  142. procedures  like  in Simula, Eiffel and C++. In addition,  virtual
  143. patterns  cover  virtual  classes,  virtual  coroutines,   virtual
  144. concurrent  processes,  and  virtual exceptions.  Virtual  classes
  145. provide a more general alternative to generic classes as in Eiffel
  146. or templates as in C++.
  147. Pattern  variable:  BETA includes the notion of pattern  variable.
  148. This  implies that patterns are first class values,  that  may  be
  149. passed  around  as parameters to other patterns. By using  pattern
  150. variables  instead of virtual patterns, it is possible dynamically
  151. to change the behaviour of an object after its generation. Pattern
  152. variables cover procedure variables (i.e. a variable that  may  be
  153. assigned  different  procedures). Since pattern  may  be  used  as
  154. classes,  it  is  also  possible to have  variables  that  may  be
  155. assigned different classes, etc.
  156.  
  157. Coroutines and Concurrent Processes
  158. BETA does not only allow for passive objects as in Smalltalk,  C++
  159. and  Eiffel.  BETA objects may also act as coroutines,  making  it
  160. possible  to  model  alternating sequential processes  and  quasi-
  161. parallel processes.
  162. BETA  coroutines  may  be  executed  concurrent  (non  pre-emptive
  163. scheduling   in   current  version).  The  basic   mechanism   for
  164. synchronization  is  semaphores, but high-level  abstractions  for
  165. synchronization  and  communication,  hiding  all  details   about
  166. semaphores,  are  easy  to  implement, and  the  standard  library
  167. includes  monitors and Ada-like rendezvous. The  user  may  easily
  168. define  new  concurrency  abstractions  including  schedulers  for
  169. processes.
  170.  
  171. Support for subfunctions of abstraction
  172. BETA supports the three main subfunctions of abstraction:
  173.                 It  is  possible to describe objects that are  not
  174. Identification  generated  as  instances of a class  pattern,  so-
  175. of Objects      called  "class-less objects". This is in the  many
  176.                 cases  useful when there is only one object  of  a
  177.                 kind.  In  most object-oriented languages,  it  is
  178.                 necessary to define superfluous classes  for  such
  179.                 objects.  In analysis and design, it is absolutely
  180.                 necessary to be able to describe singular  objects
  181.                 without  having  to define them  as  instances  of
  182.                 classes.
  183.                 Classification   is   supported    by    patterns,
  184. Classification  subpatterns  and virtual patterns  that  makes  it
  185.                 possible to describe a classification hierarchy of
  186.                 objects   and  patterns  (i.e.  objects,  classes,
  187.                 procedures,   functions,  coroutines,   processes,
  188.                 exceptions, etc.).
  189.                 Objects   and  patterns  may  be  defined   as   a
  190. Composition     composition  of  other objects and  patterns.  The
  191. (Aggregation)   support for composition includes:
  192.                 An  attribute  of an object may be a part  object.
  193. Whole/part      This  makes  it  possible to describe  objects  in
  194. composition     terms of their physical parts.
  195.                 An  attribute  of an object may be a reference  to
  196. Reference       another  object. Reference composition  forms  the
  197. composition     basis  for  modeling arbitrary  relations  between
  198.                 objects.
  199.                 In the form of block-structure: An attribute of an
  200. Localization    object  may  be  a  (nested) pattern.  The  block-
  201.                 structure  mechanism makes it possible  to  create
  202.                 arbitrary nested patterns. This makes it  possible
  203.                 for  objects  to  have  local  patterns  used   as
  204.                 classes,  procedures, etc. Local patterns  greatly
  205.                 enhances  the modeling capabilities of an  object-
  206.                 oriented language.
  207.  
  208. Inheritance
  209. In  BETA,  inheritance is not only restricted to inheritance  from
  210. superpatterns. It is also possible to inherit from a part  object.
  211. Virtual  patterns in the part object may be redefined to influence
  212. the  enclosing  object. Multiple inheritance is supported  through
  213. inheritance from multiple part objects. This gives a much  cleaner
  214. structure than inheritance from multiple superpatterns.
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.                     The Implementation of BETA
  224.                                  
  225. The  Mjolner  BETA System includes an implementation of  the  BETA
  226. programming   language.  The  implementation  has  the   following
  227. characteristics:
  228.  
  229. - Native code generation
  230.   The compiler generates assembly code.
  231.  
  232. - Garbage collection
  233.   Automatic storage management and garbage collection is used. The
  234.   techniques  used  for  garbage collection  are  generation-based
  235.   scavenging and mark-sweep.
  236.  
  237. - Separate compilation
  238.   Programs  may  be divided into smaller fragments  (modules)  for
  239.   separate compilation. The compiler makes an automatic dependency
  240.   analysis  on the fragments structure. When a fragments has  been
  241.   changed, the system keeps track of the dependent fragments  that
  242.   must be recompiled.
  243.  
  244. - Interface to C and assembly language
  245.   There  is  a general interface to C and assembly language.  This
  246.   includes  call of C procedures, call-back and parameter transfer
  247.   of  simple types, text and C structures. For Macintosh, there is
  248.   also a Pascal interface.
  249.  
  250. - Source-level debugger
  251.   A  source-level debugger for the BETA language is  available  on
  252.   the  Unix  platform. Contains facilities for  specifying  break-
  253.   points, single stepping, inspection of object states, inspecting
  254.   the  run-time organization, etc. The debugger uses  a  graphical
  255.   interface running under the X Window System.
  256.  
  257. - Persistent objects
  258.   Support  for  saving  any kind of object  generated  by  a  BETA
  259.   program  execution  on secondary storage and restoring  them  in
  260.   another  BETA program execution. The persistent store  is  fully
  261.   typesafe.  An  object-oriented  database  for  BETA  objects  is
  262.   currently under development.
  263.  
  264. - Distributed objects
  265.   Support  for  distribution of objects to support a client-server
  266.   model is being developed.
  267.  
  268. - Platforms
  269.   The Mjolner BETA System is available on the following platforms:
  270.     Macintosh,  with at least 5 MB RAM, at least a 68020  CPU,  and
  271.     with MPW
  272.     Sun-3, Sun SPARC, 8 MB, SunOS 4.0
  273.     HP  9000/300  series, HP9000/400 series, HP/UX 7 and  HP/UX  8.
  274.     HP9000/700 (to appear)
  275.     Apollo 3000 series, with at least Domain OS 10.1
  276.   Mjolner  Informatics  ApS  offers  to  port  the  MBS  to  other
  277.     platforms. Ask for more information.
  278. - Implementation Language
  279.   The entire Mjolner BETA System is written in BETA, except for  a
  280.   few run-time routines.
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.                          The Mjolner BETA
  289.                           Fragment System
  290.                           
  291. The  fragment  system  is used for splitting  BETA  programs  into
  292. smaller pieces (fragments). The fragment system is responsible for
  293. the  dependencies  between different fragment  files,  defining  a
  294. given  library or program. Due to the generality of  the  fragment
  295. system, a BETA program can be divided into smaller pieces in  many
  296. different ways:
  297. Modularization         Programs   can  be  split  into  modules   of
  298.                        logically     related    elements,     called
  299.                        fragments. A fragment is not restricted to  a
  300.                        specific  BETA element such as a  pattern.  A
  301.                        fragment  may  e.g.  contain  one   or   more
  302.                        patterns,  a set of attributes of a  pattern,
  303.                        or  the  imperative bodies  of  one  or  more
  304.                        procedure patterns.
  305. Separation of          A   fragment  can  be  split  into  interface
  306. interface and          fragments  and  implementation fragments.  It
  307. implementation         is  thus  possible to hide the implementation
  308.                        details   of  a  fragment  from  the   client
  309.                        fragments using the fragment.
  310. Alternative            It    is   possible   to   have   alternative
  311. implementations and    implementations   of   a    fragment.    Such
  312. variant control        alternative   fragments   may   be    machine
  313.                        dependent  and used for organizing  different
  314.                        variants of the same fragment.
  315. Configuration control  The   system   automatically   combines   the
  316.                        necessary  fragments needed  for  a  complete
  317.                        program.  This includes selection of  machine
  318.                        dependent   fragments.  The  system   handles
  319.                        organization of code for different machines.
  320. Units for separate     A  fragment  may be separately compiled.  The
  321. compilation            compiler   makes   an  automatic   dependency
  322.                        analysis  on  the  fragment  structure.  When
  323.                        fragments  have  been  changed,  the   system
  324.                        keeps track of dependent fragments that  must
  325.                        be recompiled.
  326. Grammar based          The  fragment system is grammar based in  the
  327.                        sense that a fragment is a legal sequence  of
  328.                        terminal  and  nonterminal  symbols  of   the
  329.                        grammar.  The  fragment system  may  thus  be
  330.                        used  to  implement a fragment structure  for
  331.                        any   language,  based  on  its  context-free
  332.                        syntax.
  333. Metaprogramming        The   fragment   system  is   part   of   the
  334.                        metaprogramming   system    Yggdrasil,    and
  335.                        enables  the  management and manipulation  of
  336.                        coherent  BETA programs located in  different
  337.                        files.
  338.  
  339.  
  340.  
  341.  
  342.  
  343.                         Mj|lner BETA System
  344.                                  
  345.                         The Basic Libraries
  346.  
  347. The Container Patterns
  348. The   standard  container  datastructures  are  organized  in  the
  349. following inheritance hierarchy of patterns:
  350.  
  351.                          container
  352.              _________________|_______________________
  353.              |             |          |              |
  354.          collection  arrayContainer  list   sequentialContainer
  355.        ______|_______                     ___________|_______________
  356.        |        |                     |       |       |         |
  357.     multiset    hashTable               stack   queue   deque  prioQueue
  358.        |
  359.       set
  360.      __|_____________________ 
  361.      |                       |
  362. classificationSet   classificationSubSet
  363.     
  364.  
  365.  
  366. Container  patterns  are generic patterns in the  sense  that  the
  367. element  type  of  the  elements kept in the  container  can  vary
  368. between different container instances.
  369. MultiSet  is  an  unstructured collection of  element  references,
  370. where duplicates are allowed.
  371. Set is like multiSet, except that duplicated are not allowed.
  372. ClassificationSet  (and the accompanying classificationSubset)  is
  373. used for dynamic classification of objects.
  374. HashTable implements a standard hash table datastructure.
  375. ArrayContainer  is  an  abstraction  of  an  element   repetition,
  376. augmented with sorting operations
  377. Stack implements a stack datastructure.
  378. Queue implements a queue datastructure.
  379. Deque implements a double-ended queue datastructure.
  380. PrioQueue implements a priority queue datastructure.
  381. List  implements  a list data structure.  Lists may  be  recursive
  382. (i.e. lists may have sublists).
  383.  
  384. The Basic Patterns
  385. The  basic  patterns  are  the  object-oriented  variants  of  the
  386. standard  simple  datatypes, such as char,  boolean,  integer  and
  387. real.   These patterns make it possible to treat e.g. integers  as
  388. ordinary  objects.   The basic patterns also includes  the  Object
  389. patterns, which is the implicit superpattern for all patterns that
  390. have no explicit  superpattern.
  391.  
  392. The Streams Patterns
  393. A  Stream  is  a  generalization of  internal  and  external  text
  394. objects. An internal text object (Text) is a sequence (repetition)
  395. of  chars.  An  external  text  object  (File)  corresponds  to  a
  396. traditional text file. Stream, Text and File are organized in  the
  397. following hierarchy:
  398.  Stream: (# ... #);
  399.    Text: Stream(# ... #);
  400.    File: Stream(# ... #);
  401.      UnixFile: File(# ... #);
  402.      MacFile: File(# ... #);
  403. As  part  of  the  interface to the operating  system,  the  basic
  404. libraries  include patterns for accessing the directory structures
  405. of hierarchical file systems:
  406.  Directory: (# ... #);
  407.    UnixDirectory: Directory(# ... #);
  408.    MacDirectory: Directory(# ... #);
  409.  
  410. The Process Patterns
  411. The  Process  interface  facilitates  execution  of  subprocesses,
  412. communication between several independent processes, client/server
  413. architectures, and it is even possible to establish  communication
  414. between Unix and Macintosh processes.
  415.  
  416. The Concurrency Patterns
  417. The  basic  libraries defines various patterns  for  dealing  with
  418. concurrency,  synchronization and communication.   These  patterns
  419. are:  system,  semaphore,  fork,  monitor,  port,  restrictedPort,
  420. objectPort, qualifiedPort, conc, and alt.
  421.  
  422. The External Language Interface Patterns
  423. To  enable  interfacing into external languages (such as  C),  the
  424. basic  libraries defines the external, cStruct, and externalRecord
  425. patterns.
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.                              Yggdrasil
  435.                                  
  436.               The Mjolner BETA Metaprogramming System
  437.                                  
  438. A  metaprogram  is  a  program  that  manipulate  other  programs.
  439. Yggdrasil  is a metaprogramming system, that supports creation  of
  440. metaprograms.   Yggdrasil  is  grammar  based:  a  metaprogramming
  441. environment may be generated from the grammar of any language
  442.  
  443. The  metaprograms  manipulate programs through a  common  represen
  444. tation called abstract syntax trees (ASTs)
  445. An AST is modelled as an instance of a pattern. There is a pattern
  446. corresponding  to  each syntactic category (non-terminal)  of  the
  447. grammar.  The  grammar hierarchy is modelled  by  a  corresponding
  448. pattern hierarchy, derived automatically from the grammar.
  449.  
  450. Grammar Based Interface
  451. The  grammar  for  a specific language result in a  grammar  based
  452. interface-a metaprogramming environment with a set of patterns for
  453. the language. A metaprogram using the grammar based interface will
  454. thus  be  language specific. Examples of tools that  benefit  from
  455. using  the grammar based interface are: semantic checkers, program
  456. analyzers,  interpreters,  browsers,  and  graphical  presentation
  457. tools.
  458.  
  459. Three Levels of Support
  460. The AST may be manipulated at different levels of specialization:
  461.    - Tree  level:  Here  the AST is viewed as a tree.  Examples  of
  462.      tools  accessing the AST using the tree level are table-driven
  463.      parsers and syntax-directed editors
  464.    - Context-free  level:  This  is the  grammars  based  interface
  465.      generated    automatically   from   the   grammar.   Graphical
  466.      presentation tools and browsers and examples  of  tools  using
  467.      the context-free level.
  468.    - Semantic  level:  At  this level semantic  attributes  may  be
  469.      added  to the AST. The compiler is an example of a tool  using
  470.      the semantic level to access the AST.
  471.  
  472. Users may develop their own metaprogramming tools.
  473. Yggdrasil supports generation of metaprogramming environments from
  474. a  grammar.  Users can then use this environment to develop  their
  475. own metaprogramming tools-tools that manipulate other programs.
  476.  
  477. The Fragment System
  478. The  fragment  system  is  a part of Yggdrasil,  and  enables  the
  479. management and manipulation of coherent ASTs located in  different
  480. files.  The functionality of the fragment system allows  splitting
  481. of  an AST into a number of sub-ASTs (sub-trees) by allowing  some
  482. inferior  nodes  in  the original AST to be  replaced  by  special
  483. nodes.  The  AST,  originally positioned at the position  of  that
  484. node,  is  called  a  fragment and may be  located  in  a  totally
  485. different file.
  486.  
  487.  
  488.  
  489. "Yggdrasil  is  the tree of the world. The ash tree  of  which  the
  490. crown  covers the whole world. The tree gets power from the  gods,
  491. from the evil giants and from the kingdom of the death. Everything
  492. in the world happens under the mighty crown of Yggdrasil."
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.                                  
  502.                              Valhalla
  503.                      The Mjolner BETA Debugger
  504. The Mjolner BETA Debugger is a symbolic source level debugger with
  505. an easy-to-use graphical user interface.
  506.                                  
  507.  
  508. Using the Mjolner BETA Debugger you may
  509.  - Trace  the  execution of a BETA program by setting  breakpoints
  510.    and  stepping at the level of single BETA sourcelines, stepping
  511.    over  procedure-calls  and  even singlestep  at  the  level  of
  512.    machine code instructions.
  513.  - Simultaneously examine the state of any number of objects.
  514.  - Examine  the execution stack and view code and objects  on  the
  515.    stack.
  516.                                  
  517.  - Examine the program heaps and view objects on the heaps.
  518.  - Relative to any object find and display the object that is  the
  519.    value of an expression.
  520.  - Simultaneously   view   any  number   of   windows   containing
  521.    sourcecode.
  522.                                  
  523.  - Execute  the  program  until a runtime error  occurs  and  then
  524.    examine the program state.
  525. The  Mjolner  BETA  Debugger is currently available  on  the  UNIX
  526. systems supported by the Mjolner BETA System. It runs under the  X
  527. Window System.
  528.  
  529.  
  530.  
  531. "Valhalla  is Odins hall whereto all the dead warriors  come,  when
  532. they  have fallen as heros in battle. Odin is the highest  of  all
  533. gods in Asgaard."
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.                                  
  545.                                  
  546.                                XtEnv
  547.                                  
  548. Mjolner BETA Interface to X Toolkit Widgets
  549.     
  550. The  Mjolner  BETA  object oriented interface  to  the  X  Toolkit
  551. Intrinsics (Xt) is called XtEnv. This pattern contains  the  basic
  552. patterns common for many user-interface toolkits build upon the  X
  553. Window  System,  but  it does not contain any  higher  level  user
  554. interface  elements. It is typically used together with  a  widget
  555. set  containing such user interface elements build on top  of  it.
  556. Examples  of such widget sets are the Athena Widgets,  OPEN  LOOK,
  557. and  Motif.  The  Mjolner BETA system currently  includes  object-
  558. oriented  interfaces to the Athena Widgets (AwEnv)  and  to  Motif
  559. (MwEnv).
  560. XtEnv     XtEnv includes patterns corresponding to the widgets of
  561.           the   X  Toolkit  Intrinsics,  i.e.,  Core,  Composite,
  562.           Constraint, and the various Shell subclasses.  Also  it
  563.           includes   interface   to   Xt   resources,   displays,
  564.           translations, actions, timers and work procedures.
  565.           An  application  is created by specializing  the  XtEnv
  566.           pattern,  creating  various widgets and  initializating
  567.           them. When the XtEnv pattern starts executing, it  does
  568.           some  initialization itself. Then  it  calls  the  BETA
  569.           construct  INNER,  thus allowing the specialization  to
  570.           initialize itself. When the control returns to XtEnv, a
  571.           global  event  handler  is started,  which  distributes
  572.           events to the various widgets.
  573.           In   Xt,  the  widgets  form  a  hierarchy,  used   for
  574.           distributing events and when specifying resources.  The
  575.           block-structure  of  the  BETA  program  is   used   to
  576.           determine the hierarchy automatically. This is a  major
  577.           enhancement compared to the C interface to Xt.
  578. AwEnv     AwEnv  is  a  specialization of XtEnv, which  adds  the
  579.           patterns  corresponding  to the  Athena  Widgets.  This
  580.           includes  the  simple widgets Label,  Scrollbar,  Grip,
  581.           Stripchart, Command, Toggle and List. It also  includes
  582.           the  text  editor called AsciiText, menus and submenus.
  583.           Finally  it  includes the layout widgets  called  Form,
  584.           Dialog, and Box.
  585. MwEnv     MwEnv  is  a  specialization of XtEnv, which  adds  the
  586.           patterns   corresponding  to  the  Motif  widgets   and
  587.           gadgets.  This  includes the primitive  widgets  Label,
  588.           Cascadebutton,  Drawnbutton, Pushbutton,  Togglebutton,
  589.           Arrowbutton, List, Scrollbar, Separator, and Text;  the
  590.           Motif  specific Shells like DialogShell and  MenuShell;
  591.           the    Manager   widgets   BulletinBoard,    RowColumn,
  592.           ScrolledWindow,  DrawingArea,  VPaned,  Frame,   Scale,
  593.           SelectionBox,  MessageBox, Form, FileSelectionBox,  and
  594.           CommandBox.  Patterns also exist for the  corresponding
  595.           gadgets (windowless widgets), and finally interface  to
  596.           the  Motif  specific resources, like Motif Strings,  is
  597.           included.
  598. Example
  599. This  is  a  realistic example of using AwEnv. It is a small  text
  600. editor  with full support for loading, editing, and saving  files.
  601. The  screen snapshot following the code shows how this application
  602. appears  on the screen after another small AwEnv program has  been
  603. loaded into it for editing.
  604.  
  605. ORIGIN '~beta/Xt/current/awenv' (* Fragment to fill slots in is AwEnv *)
  606. [[
  607.     (* Include interface to disk files *)
  608. --  INCLUDE '~beta/basiclib/current/file' 
  609.  
  610. --  PROGRAM:   Descriptor  --   (* Specify  PROGRAM  slot *)     
  611. AwEnv
  612. (#   Main: @Form (* Main window is a  Form widget *)
  613.      (#  dirty: @boolean;  (* Have there  been changes since last save? *)
  614.        Bell: (# do ascii.bel -> put #); (* Pattern to invoke the bell of the machine *)
  615.        DoLoad: (*  Load the file named in Filename into Buffer *)
  616.         (# theFile: @File;
  617.         do (if dirty // true then Bell else
  618.             (* Clear Buffer *)
  619.             Buffer.asciiString-> Buffer.type;
  620.                         '' -> Buffer.string;
  621.             (* Load new file *)
  622.             filename.string -> theFile.name;
  623.             (if  theFile.entry.exists // false then theFile.touch if);
  624.             Buffer.asciiFile -> Buffer.type;
  625.             theFile.name -> Buffer.string;
  626.         if)#);
  627.         Filename: @AsciiText (* AsciiText widget used to specify file name *)
  628.         (# init::<
  629.           (# do edit -> editType;
  630.               true -> resize; true -> resizable;
  631.                'Untitled' -> string; (* Initial file name is 'Untitled' *)
  632.         #)#);
  633.        ShapedCommand: Command  (* Pattern for an oval shaped command widget *)
  634.         (# init::< (# do oval -> shapeStyle; INNER #)#);
  635.        Quit: @ShapedCommand (* Quit button: quit if changes are saved *)
  636.          (#  callback::< 
  637.                     (# do (if dirty//true then Bell else Stop if)#)
  638.                  #);
  639.        Load: @ShapedCommand (* Load button: invoke instance of DoLoad *)
  640.         (# callback::< (# do DoLoad #)#);
  641.        Save: @ShapedCommand (* Save button: save and clear dirty-flag *)
  642.         (# callback::< (# do Buffer.save; false -> dirty #)#);
  643.        Buffer: @AsciiText (* AsciiText widget holding text to be edited *)
  644.         (# callback::< (# do true -> dirty #);
  645.            init::<
  646.             (# do scrollAlways -> scrollVertical;
  647.                 scrollWhenNeeded -> scrollHorizontal;
  648.                 edit -> editType; 200 -> width;
  649.                 true -> resize; ChainTop -> top;
  650.         #)#);
  651.       init::<
  652.         (# do (* Initialize the widgets and specify geometric relations among them *)
  653.             Quit.init;
  654.             Filename.init; Quit -> filename.fromVert;
  655.             Load.init; Quit -> Load.fromVert; Filename -> Load.fromHoriz;
  656.             Save.init; Quit -> Save.fromVert; Load -> Save.fromHoriz;
  657.             Buffer.init; Load -> Buffer.fromVert;
  658.     #)#);
  659. do (* Initialize the main window *)
  660.   Main.init;
  661. #)
  662. --]]
  663.  
  664.                                  
  665.                                  
  666.                                  
  667.  
  668.  
  669.  
  670.  
  671.                                MacEnv
  672.                                   
  673. An object-oriented interface to the Macintosh Toolbox.
  674.  
  675. MacEnv  is  a family of libraries abstracting the Macintosh  Toolbox
  676. into  an  object-oriented framework. Every object in  the  Macintosh
  677. user  interface,  like windows and menus, has a  corresponding  BETA
  678. pattern definition in MacEnv. In order to create, say, a new window,
  679. you  just  create an instance of the Window pattern and tell  it  to
  680. display  itself. All the other Macintosh user interface objects  can
  681. be  created and displayed in the same way. User defined objects like
  682. dialog boxes, are easily created by specializing the Dialog pattern,
  683. and using the various Control patterns defined in MacEnv.
  684. MacEnv  includes  a series of predefined patterns  for  making  text
  685. editors,  scrolling windows with pictures, object-oriented  graphics
  686. with  QuickDraw,  easy interface to the Macintosh resources,  files,
  687. clipboard, sound, and QuickTime.
  688. The   object-oriented  abstractions  in  MacEnv  is  more   general,
  689. flexible,  and  easier to use, than e.g. MacApp of  Apple  Computer,
  690. Inc.,  due to the strengths and powerfulness of the BETA programming
  691. language.
  692.    
  693. Highlights of the object-oriented abstractions in MacEnv:
  694. User interface  All  interface objects (menus, windows,  graphical
  695. objects         objects)  are  subpatterns of the  InterfaceObject
  696.                 pattern.  The InterfaceObject defines  two  common
  697.                 properties   of   all  interface  objects:   event
  698.                 handling and access to Macintosh resources.
  699. Event handling  One  of  the strengths of MacEnv is the ease  with
  700.                 which  the  event  handling is  conducted.  MacEnv
  701.                 takes  care  of  all the details of the  Macintosh
  702.                 event  dispatching and handling.  MacEnv  converts
  703.                 all Macintosh event occurrences into invocation of
  704.                 special  virtual patterns (event patterns)  within
  705.                 the   appropriate  user  interface   object.   The
  706.                 application  programmer only has to  further  bind
  707.                 these  event  patterns  of  the  individual   user
  708.                 interface  objects to specify the  actions  to  be
  709.                 taken in response to user interaction.
  710. Windows         Macintosh   windows   are   easily   created   and
  711.                 manipulated  using  the BETA pattern  Window.  The
  712.                 Window   includes  definitions  of  all   standard
  713.                 actions, such as dragging, resizing, and scrolling
  714.                 (using  the Scroller pattern). A window  can  have
  715.                 subwindows   called  canvases.  A  Canvas   is   a
  716.                 subwindow  inside  a  window,  defining  its   own
  717.                 coordinate  system  and  event  handler.  Floating
  718.                 windows can also easily be created using MacEnv.
  719. Menus           The Menu pattern interfaces to the Macintosh menu.
  720.                 Menus   defined  using  resources  can  be  easily
  721.                 created. Actions are bound to the items by virtual
  722.                 procedures. The standard menus:  , File, and  Edit
  723.                 are  predefined in MacEnv, and will always  appear
  724.                 in a MacEnv application.
  725. Object-Oriented MacEnv  defines an object-oriented abstraction  on
  726. QuickDraw       top  of  the Macintosh QuickDraw graphics library.
  727.                 For  each  graphical  entity  (rectangle,  region,
  728.                 line,  text,  etc.)  a  corresponding  BETA   user
  729.                 interface   pattern   is  defined.   Direct   user
  730.                 interaction   with   these   graphical   entities,
  731.                 including interactive creation is fully defined in
  732.                 the corresponding BETA pattern.
  733.  
  734. The  following  example  shows a complete  MacEnv  application.  The
  735. example program defines a window, DrawWindow, with definition  of  a
  736. graphical object OvalClass, and with the EventHandler of the  window
  737. further  bound. Finally, the standard item New in the File  menu  is
  738. further  bound to create the DrawWindow. In the example,  the  ovals
  739. can  be  moved by direct manipulation with the mouse, and new  ovals
  740. are created by direct rubberbanding in the window background.
  741.  
  742. ORIGIN '~beta/macenv/v3.1/basicmacenv' (* use the basic MacEnv environment *)
  743. [[
  744.    (* include the figureitem library *)
  745. -- Include '~beta/macenv/v3.1/figureitem' 
  746. -- Program: Descriptor --
  747. Macenv (* execute one instance of pattern MacEnv *)
  748.  (#  (* specialized with: *)
  749.    DrawWindow: Window (* a window *)
  750.      (# HasClose::< TrueObject; (* the window has closebox *)
  751.        (* Action to be bound in Close menu item in File menu *)
  752.        DoClose: @theFileMenu.Action (# hit::< (# do Close #)#);
  753.        OvalClass: Oval
  754.          (# eventHandler::< 
  755.                     (* called when the mouse is pressed inside the Oval *)
  756.              (# MouseDown::< (# do DragOutline #)#)
  757.          #);
  758.        EventHandler::<
  759.          (# MouseDown::< 
  760.                      (* called when the mouse is pressed inside the window *)
  761.              (# theOval: ^OvalClass;
  762.              do (* create a dynamic instance of the OvalClass *)
  763.                             &OvalClass[] -> theOval[]; 
  764.                (* open and attach the oval to the window so it can 
  765.                             * receive events*)
  766.                theOval.open;
  767.                theOval[] -> Attach;
  768.                (EventInfo.localPosition,EventInfo.localPosition)
  769.                             -> theOval.Frame;
  770.                (2,3) -> theOval.pen.size; (* set border width *)
  771.                (*set fill to a gray pattern *)
  772.                                 patterns.gray[] -> theOval.fill.FillPattern;
  773.                Colors.Red -> theOval.fill.ForeGroundColor;
  774.                            (* display rubber feedback until the mouse is released *)
  775.                theOval.dragResize;
  776.              #);
  777.            
  778.            Activate::< 
  779.                      (# (* called when the window (de)activate: 
  780.                              * binds close action to Close menu *)
  781.                          do DoClose[] -> theFileMenu.CloseItem.Attach
  782.                          #);
  783.            Deactivate::< (# do theFileMenu.CloseItem.detach #);
  784.          #);
  785.        Open::<
  786.          (#
  787.          do 'Draw' -> Title; (300,200) -> Size;
  788.          #);
  789.      #);
  790.    FileMenu::< (* a virtual further binding *)
  791.      (# iNew::< (* called when New is selected in File Menu *)
  792.          (# hit::< (* create, open, and display the window *)
  793.              (# theWindow: ^DrawWindow;
  794.              do &DrawWindow[] -> theWindow[];
  795.                theWindow.open;
  796.              #);
  797.      #)#);
  798.  #)
  799. --]]
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.                                  
  808.                               Bifrost
  809.  
  810. An interactive object-oriented graphics system
  811.  
  812. Bifrost  is  based on the Stencil & Paint imaging  model.  Bifrost
  813. models  computer graphics images by abstracting the geometric  and
  814. color  properties of graphical objects. The important new  concept
  815. introduced  in  Bifrost  is  that  there  is  one  basic   drawing
  816. primitive,  the  graphical  object.  The  graphical  object  unite
  817. interaction,  graphics  modelling and  graphics  context.  Bifrost
  818. includes  extensive  support  for various  kinds  of  interaction:
  819. interactive   creation,  reshaping,  translation,   scaling,   and
  820. rotation of graphical objects. The object-oriented approach  makes
  821. extensibility  and  tailorability a simple task,  and  facilitates
  822. object-oriented drawing applications. One of the main goals of the
  823. development of Bifrost was to make the graphics system independent
  824. of underlying graphics and hardware systems.
  825.  
  826. Important concepts of Bifrost
  827. Canvas         Representation  of the drawing surface,  and  is  the
  828.                connection  between the display device  and  Bifrost.
  829.                The  canvas  contains  a picture,  and  all  graphics
  830.                shown in the canvas must be in the canvas picture.
  831. Picture        Is  a  collection of graphical objects, and  realizes
  832.                the  concept  of  graphics modelling.  The  graphical
  833.                object  is the smallest possible entity that  can  be
  834.                drawn,  and  is  complete  in  the  sense,  that   it
  835.                contains  all  necessary information  about  how  the
  836.                graphical  object  appears  on  the  canvas,  and  is
  837.                therefore independent of any other graphical  objects
  838.                in a picture.
  839. Graphical      The  graphical object concept is a composition of two
  840. Object         concepts: shape and paint:
  841. Shape          The  shape  describes the outline of the object,  and
  842.                the  paint describes the color or raster to be pushed
  843.                through  the  shape  of the object,  thus  making  it
  844.                appear  in  the  canvas. The  shape  of  a  graphical
  845.                object  is described by segments. A segment is either
  846.                a  straight line segment or a spline segment.  Spline
  847.                segments  are used to describe curves. The  shape  is
  848.                analogous  to  the  stencil in the  Stencil  &  Paint
  849.                imaging model.
  850. Paint          The   paint  of  Bifrost  represent  what  is  pushed
  851.                through the shape of the graphical object. The  Paint
  852.                can  be  simple solid colors using a predefined  name
  853.                of  the  color or relative to some color space,  e.g.
  854.                RGB,  HSV,  CMY.  Tiles  and  rasters,  e.g.  scanned
  855.                images, can also be used as paint,
  856. The  basic imaging model of Bifrost is thus very simple: define  a
  857. shape  that represents the outline of the object you want to draw,
  858. select  a paint as the color for the object, construct a graphical
  859. object  with the shape and paint just defined, and draw the object
  860. in  a  canvas,  i.e. insert the graphical object into  the  canvas
  861. picture.  If  the  object must have several different  colors  the
  862. object must be split into more graphical objects and assembled  in
  863. a  picture. The picture is a graphical object itself, and can thus
  864. be drawn in a canvas.
  865. Bifrost is currently avaliable on Unix models only.
  866.  
  867.  
  868. The  following complete program is a small example showing how  to
  869. make  a  simple Shape consisting of Line- and SplineSegments,  and
  870. then filling the Shape with a pink SolidColor:
  871. ORIGIN '../bifrost';
  872. [[
  873. --- INCLUDE '../ColorNames'
  874. --- PROGRAM: descriptor ---
  875. bifrost
  876. (#
  877.  application::<
  878.   (# (* define two object representing the back- and *)
  879.          canvasbordercolor:     @SolidColor;
  880.          (* foreground color of the canvas *)
  881.          canvasbackgroundcolor: @SolidColor;
  882.          myCanvas: @Canvas (* create a singular Canvas object *)
  883.            (#  aGO:     @GraphicalObject;
  884.            aSolidColor: @SolidColor;
  885.            myshape:     @Shape
  886.                  (#
  887.                  do     (100,100) -> open; (* start     defining the shape *)
  888.                         (100,150) -> lineto; (* create a line segment *)
  889.                         (125,200) -> splineto;  (* create a     spline segment *)
  890.                         (200,170) -> splineto;
  891.                         (195,100) -> splineto;
  892.                         close;
  893.              #);
  894.            onOpen::<
  895.                 (* called when the canvas is initialized and 
  896.                  * ready to show graphics *)
  897.                  (#
  898.                  do aSolidColor.init; (* initialize the solid color *)
  899.                         pink -> aSolidColor.name;
  900.                         aGO.init;
  901.                          (* set the shape in the graphical object *)
  902.                          myshape ->     aGO.setShape;
  903.                         aSolidColor[]-> aGO.setpaint;
  904.                         (* draw the graphical object in the     canvas *)
  905.                          aGO[]  -> draw;  
  906.                         aGO[] -> hilite; (*     and     hilite it *)
  907.                   #);
  908.                 onButtonPress::< 
  909.                   (* when user presses a mouse button: stop program execution *)
  910.                  (#     do (normal,     '')     -> stop #);
  911.          #);
  912.   do (* application     *)
  913.         myCanvas.init;
  914.         4 -> myCanvas.Borderwidth;
  915.         lightblue -> canvasbackgroundcolor.name;
  916.         canvasbackgroundcolor[] -> myCanvas.backgroundpaint;
  917.         violet -> canvasbordercolor.name;
  918.         canvasbordercolor[]     -> myCanvas.borderpaint;
  919.         (100,100) -> myCanvas.Position;
  920.         (300,300) -> myCanvas.Size;
  921.         myCanvas.open;   (*     show the canvas *)
  922.   #);
  923. #)
  924. --- ]]
  925.  
  926.  
  927.  
  928. "Bifrost  is  the  luminous bridge, the rainbow,  that  leads  from
  929. Midgaard  to  Asgaard.  Midgaard is the place  where  the  human  beings
  930. live.  Asgaard  is  the habitat of the gods in  the  middle  of  the
  931. world."
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.                                 Sif
  941.               The Mjolner BETA Hyper Structure Editor
  942.  
  943. Syntax-directed editing
  944. Syntax  directed editing makes it possible to construct  and  edit
  945. programs  or  other documents without introducing  syntax  errors.
  946. Syntax-directed  editing  is especially  useful  for  application-
  947. oriented   languages  intended  for end-users,  casual  users  and
  948. beginners  that may have difficulties in remembering the  concrete
  949. syntax.   Also  a  program constructed by syntax-directed  editing
  950. needs not be parsed, thereby saving time in the development phase.
  951. One   characteristic  of  syntax-directed  editing   is   choosing
  952. templates  from a menu, containing only the legal choices  at  any
  953. time.
  954.                                  
  955.  
  956.  
  957. Abstract presentation and browsing
  958. The editor is able to present a program at any level of detail. At
  959. the top-level of a program the user may get an overview of classes
  960. and  procedures. It is then possible to browse through modules and
  961. procedures  to  see  more  and  more details.  This  mechanism  is
  962. completely  general  since  the  user  may  decide  the  level  of
  963. granularity.  The  three dots ... , called contractions,  indicate
  964. details that are suppressed. By clicking on contractions the  next
  965. level of detail is shown.
  966.  
  967. Adaptive pretty-printing
  968. The  editor  includes an adaptive pretty-printing algorithm  which
  969. prints the program or document such that it always fits within the
  970. size  of  the  window  or  paper.  An  example  is  the  different
  971. presentation of Record and Person.
  972.  
  973. Text editing and incremental parsing
  974. The  programmer  may  freely  alternate  between  syntax  directed
  975. editing  and  textual editing.  Any program part may be  textually
  976. edited  using keyboard, mouse and menus in the usual  style  known
  977. from  the  Macintosh  or  the X Window System,  respectively.  Any
  978. program part that has been textually edited is immediately parsed.
  979.  
  980. Fragment manipulation and browsing
  981. The  editor  provides an interface to the fragment system.  It  is
  982. possible  to  browse in the fragment structure and to  create  and
  983. combine fragments.
  984.  
  985. Grammar basis
  986. The editor is generic. It may be adapted to specific languages. An
  987. editor  for  a  given language is generated from  a  context  free
  988. grammar  for  that  language.  Grammars  exist  for  a  number  of
  989. programming  languages, including BETA, Simula, Modula-2,  Pascal,
  990. Standard ML and Object-Oriented SDL. Grammars have also been  made
  991. the query language SQL and for various document types in the style
  992. of SGML and ODA.
  993.  
  994. Integration of program and documentation
  995. The  user  may add a comment at any place in a program.  The  user
  996. decides whether or not to display a comment. Also the user decides
  997. whether  to display a comment as part of the program or in another
  998. window; in the latter case a comment is indicated by means of (*).
  999. Using  abstract  presentation it is possible to obtain  a  pretty-
  1000. print  of  a program which includes just the classes and procedure
  1001. headings  and  corresponding comments. This makes it  possible  to
  1002. extract a functional specification from the program.
  1003.  
  1004. This  facility together with abstract presentation has turned  out
  1005. to  be  one of the most useful features of the editor. Programmers
  1006. are  motivated for integrating code and documentation since it  is
  1007. easy to extract part of the program and the comments as functional
  1008. specifications and other documentation.
  1009.  
  1010. Hypertext facilities
  1011. The   editor  includes  hypertext  facilities.  The  facility  for
  1012. handling  comments is an example of a hyperlink between a  program
  1013. and  a text document. Another type of hyperlink is a link from the
  1014. use  of  a  name  to  the declaration of the name  (this  is  only
  1015. implemented for BETA). Examples of such semantic links are  putInt
  1016. and  putText  that  are used in Employee and  defined  in  Stream.
  1017. Another kind of links are links between program and documentation.
  1018. Anchors,  i.e.  link  end-points are indicated  by  means  of  the
  1019. special symbol (^).
  1020.  
  1021.  
  1022.  
  1023.  
  1024. Fragment manipulation and browsing
  1025. The  editor  provides an interface to the fragment system.  It  is
  1026. possible  to  browse in the fragment structure and to  create  and
  1027. combine fragments.
  1028.  
  1029. Grammar basis
  1030. The editor is generic. It may be adapted to specific languages. An
  1031. editor  for  a  given language is generated from  a  context  free
  1032. grammar  for  that  language.  Grammars  exist  for  a  number  of
  1033. programming  languages, including BETA, Simula, Modula-2,  Pascal,
  1034. Standard ML and Object-Oriented SDL. Grammars have also been  made
  1035. the query language SQL and for various document types in the style
  1036. of SGML and ODA.
  1037.  
  1038. Availability
  1039. Sif is currently available as a pre-release only.
  1040.  
  1041. "The wife of Thor is Sif with the golden hair."
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.                     The Mjolner BETA CASE Tool
  1052.  
  1053. The Mjolner BETA CASE Tool provides
  1054. - graphical structure editing of design diagrams
  1055. - textual structure editing of programs
  1056. - automatic program generation from design diagrams
  1057. - reverse engineering from programs to design diagrams
  1058. - simultaneous editing of design diagrams and programs
  1059. No CASE gap
  1060. One  single abstract language is used throughout analysis,  design
  1061. and implementation.
  1062. Different  concrete  syntaxes are used to  present  the  different
  1063. models:
  1064. - graphical syntax for design
  1065. - textual syntax for programs.
  1066. This  gives  a  significant advantage compared  to  other  object-
  1067. oriented  CASE  tools that support object-oriented  notations  for
  1068. analysis  and design that are isolated from the language used  for
  1069. implementation.  Isolated  notations  for  analysis   and   design
  1070. introduce  a  new  CASE gap because there are  still   consistency
  1071. problems between design and implementation
  1072. The  single  language  approach puts strong  requirements  on  the
  1073. language  used.  It  must be executable and it  must  be  powerful
  1074. enough  to  model  the  application  domain.  BETA   meets   these
  1075. requirements.
  1076.  
  1077.                                  
  1078.  
  1079. Implementation
  1080. - common representation for design diagrams and programs
  1081. - graphical abstract presentations of the common representation in
  1082.   the graphical structure editor Freja
  1083. - textual abstract and detailed  presentations of the common
  1084.   representation in
  1085.   the textual structure editor Sif
  1086. - the common representation is abstract syntax trees
  1087. - experimental version exists on Unix workstations
  1088. - Freja is implemented on top of Design/OA
  1089.  
  1090. Example
  1091. In  the  example a class library containing a record hierarchy  is
  1092. shown  in  each editor simultaneously. Freja shows the library  at
  1093. two levels of abstraction. Sif shows the corresponding example  in
  1094. textual and more detailed form, but abstract presentation is  also
  1095. used  in  the textual presentation to provide overview. The  three
  1096. dots  (...)  indicate  that some details  are  suppressed  by  the
  1097. editor.  In  both editors the definition of the variable  Key  has
  1098. been selected. Whenever the user changes the current selection  in
  1099. either  of  the  two editors the current selection  in  the  other
  1100. editor  is updated accordingly. In the case that the corresponding
  1101. construct  is  not  visible  the  proper  abstraction   level   is
  1102. automatically chosen.
  1103.  
  1104.  
  1105.  
  1106. Availability
  1107. The  Mjolner  BETA Case Tools is available on Unix systems  as  an
  1108. experimental version. The CASE Tool requires Design/OA.
  1109.  
  1110.  
  1111. "Freja is the goddess of love, she lives in Folkvang and is the most 
  1112. beautiful of all women in Asgaard. She owns the golden piece of jewelry
  1113. Brisingemen."
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.                           Mjolner BETA System
  1123.                                    
  1124.                               ORDER FORM*
  1125.  
  1126.  
  1127. Name:________________________________ Title:________________________
  1128.  
  1129. Organization:_______________________________________________________
  1130.  
  1131. Address:____________________________________________________________
  1132.  
  1133. Phone:_______________________________ Fax:__________________________
  1134.  
  1135. E-mail:______________________________ Signature:____________________
  1136.  
  1137.  
  1138. Please ship the following items:
  1139.  
  1140. ____________________________________________________________________
  1141. |# Description                  | Quant. | Machine |Media | Price   |
  1142. |                               |        |  and OS |      |         |
  1143. |_______________________________|________|_________|______|_________|
  1144. |1 Unix Workstation models      |        |         |      |         |
  1145. |_______________________________|________|_________|______|_________|
  1146. |2 Unix Server models           |        |         |      |         |
  1147. |_______________________________|________|_________|______|_________|
  1148. |3 Manual set                   |        |                |         |
  1149. |_______________________________|________|________________|_________|
  1150. |4 BETA book pre-print          |        |                |         |
  1151. |_______________________________|________|________________|_________|
  1152. |5 Delivery Cost                |                         |         |
  1153. |_______________________________|_________________________|_________|
  1154.                                                           |         |
  1155.                                                  Total:   |_________|
  1156.  
  1157. The purchase will be delivered through air-mail.
  1158. Delivery through courier services is available on request (see item #6)
  1159.  
  1160.  
  1161. Credit Card Payment:
  1162. ====================
  1163. Please tick the appropriate card type, and fill in the form properly.
  1164. Remember to sign the form
  1165. ____________________________________________________________________
  1166. |MasterCard: |  |  Card Number:                                     |
  1167. |____________|__|___________________________________________________|
  1168. |VISA:       |  |  Expiration date:                                 |
  1169. |____________|__|___________________________________________________|
  1170. |EuroCard:   |  |  Total amount:       US $                         |
  1171. |____________|__|___________________________________________________|
  1172. |JCB:        |  |  Date:          Signature:                        |
  1173. |____________|__|___________________________________________________|
  1174.  
  1175.  
  1176. _______________________________
  1177. * Please note, that the ordfer form will only be processed if accompanied
  1178.  with a signed licence agreement. Please fill-in this order form with care
  1179.  to ensure correct processing of the request.  Please use capital letters
  1180.  or typewriter and make sure that the information entered is complete
  1181.  and correct.  Please send the order form to Mjolner Informatics,
  1182.  Science Park Aarhus, Gustav Wiedsvej 10, DK-8000 Aarhus C, Denmark, or
  1183.  fax to: +45 86 20 12 22.  In case of questions or difficulties,
  1184.  please contact Kim Jensen Moller, Mjolner Informatics using phone:
  1185.  +45 86 20 20 00, fax: +45 86 20 12 22, or e-mail: support@mjolner.dk.
  1186.  
  1187.  
  1188. Supported Unix models:  Sun-3, Sun SPARC, HP 9000/300 series,
  1189.   HP 9000/400 series, and Apollo 3000 series.
  1190.   Supported Unix OS versions:  SunOS 4, HP-UX 7 and 8, and DomainOS 10.
  1191.   Requires 8Mb RAM.
  1192. Media is for Unix models either stream or DAT tape, and for Macintosh
  1193. diskettes.
  1194. _______________________________
  1195.  
  1196.  
  1197.                           Mjolner BETA System
  1198.                                    
  1199.                               PRICE LIST
  1200.                         All prices are in US $
  1201.  
  1202. ______________________________________________________________________
  1203. |Description            |   1 CPU |  5 CPUs  | 10 CPUs  |  20 CPUs   |
  1204. |_______________________|_________|__________|__________|____________|
  1205. |Unix workstation models| $ 2.890 | $  7.700 | $ 11.550 |   $ 17.325 |
  1206. |_______________________|_________|__________|__________|____________|
  1207. |Unix server models     | $ 7.450 | $ 19.860 |          |            |
  1208. |_______________________|_________|__________|__________|____________|
  1209.                          incl. 1    incl. 2    incl. 3    incl. 4
  1210.                          man. set   man. sets  man. sets  man. sets
  1211.  
  1212.  
  1213. _____________________________________________
  1214. |Additional documentation | 1 set  | 10 sets |
  1215. |_________________________|________|_________|
  1216. |Additional manual sets   | $ 50   |  $ 400  |
  1217. |_________________________|________|_________|
  1218. |BETA book preprint       | $ 40   |  $ 300  |
  1219. |_________________________|________|_________|
  1220. If ordered separately, add $ 10 for handling and shipment of the order.
  1221.  
  1222. Educational prices:  25% of the above prices.
  1223. ==================   ===
  1224.  
  1225. Upgrade:  30% of the above prices.
  1226.  
  1227. Hot-line support:  $ 500 pr. month pr. CPU licence.  Ask for details.
  1228.  
  1229. The  Mjolner  BETA  System  includes  the  BETA  compiler,  the  basic
  1230. libraries,  the graphics libraries, the user interface libraries,  the
  1231. operating system interface, the external language interface,  and  the
  1232. metaprogramming  system.   The  system also  includes  a  source-level
  1233. debugger (only on the Unix platforms).  Finally, the system contains a
  1234. demo version of the hyper structure editor for the BETA language.
  1235. The  purchase  of  the Mjolner BETA System includes access  to  e-mail
  1236. support.   This support will be open to all questions related  to  the
  1237. purchased  system  (installation, use  and  error  reports).   Mjolner
  1238. Informatics  will  respond to the questions on the e-mail  support  as
  1239. quickly as possible.  However, note that this e-mail support is not  a
  1240. hotline.
  1241. Mjolner  Informatics is offering consultancy services and training  in
  1242. connection with the Mjolner BETA System.  Ask for details.
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.                           Mj|lner BETA System
  1249.                                    
  1250.                          Macintosh Order Form 
  1251.  
  1252. Name:________________________________ Title:________________________
  1253.  
  1254. Organization:_______________________________________________________
  1255.  
  1256. Address:____________________________________________________________
  1257.  
  1258. Phone:_______________________________ Fax:__________________________
  1259.  
  1260. E-mail:______________________________ Signature:____________________
  1261.  
  1262.  
  1263. Please ship the following items:
  1264.  
  1265. ____________________________________________________________________
  1266. |# Description                  | Quant. | Machine |  OS  | Price   |
  1267. |                               |        |         |      |         |
  1268. |_______________________________|________|_________|______|_________|
  1269. |1 Macintosh models             |        |         |      |         |
  1270. |_______________________________|________|_________|______|_________|
  1271. |2 Additional Manual set        |        |                |         |
  1272. |_______________________________|________|________________|_________|
  1273. |4 BETA book pre-print          |        |                |         |
  1274. |_______________________________|________|________________|_________|
  1275. |5 Delivery Cost                |                         |         |
  1276. |_______________________________|_________________________|_________|
  1277.                                                           |         |
  1278.                                                  Total:   |_________|
  1279.  
  1280. The purchase will be delivered through air-mail.
  1281. Delivery through courier services is available on request.
  1282.  
  1283.  
  1284. Credit Card Payment:
  1285. ====================
  1286. Please tick the appropriate card type, and fill in the form properly.
  1287. Remember to sign the form
  1288. ____________________________________________________________________
  1289. |MasterCard: |  |  Card Number:                                     |
  1290. |____________|__|___________________________________________________|
  1291. |VISA:       |  |  Expiration date:                                 |
  1292. |____________|__|___________________________________________________|
  1293. |EuroCard:   |  |  Total amount:       US $                         |
  1294. |____________|__|___________________________________________________|
  1295. |JCB:        |  |  Date:          Signature:                        |
  1296. |____________|__|___________________________________________________|
  1297.  
  1298. _______________________________
  1299.  Supported Macintosh models:  at least 68020 CPU, OS versions:
  1300.  System 6 and 7.  Requires MPW 3.2 and 5Mb RAM.
  1301.  Please fill-in the order form with care to ensure correct processing
  1302.  of the order.  Please use capital letters or typewriter and make
  1303.  sure that the information entered is complete and correct.  Please
  1304.  send the order form to Mj|lner Informatics, Science Park Aarhus,
  1305.  Gustav Wiedsvej 10, DK-8000 ]rhus C, Denmark, or fax to: +45 86 20
  1306.  12 22.  In case of questions or difficulties, please contact Kim
  1307.  Jensen M|ller, Mj|lner Informatics using phone: +45 86 20 20 00,
  1308.  fax: +45 86 20 12 22, or e-mail: support@mjolner.dk.
  1309.  *      Price list on reverse side (all prices are in US $). Please
  1310.  note that delivery cost will be added.
  1311.  
  1312.  
  1313.  
  1314.  
  1315.                           Mj|lner BETA System
  1316.                                    
  1317.                       Macintosh System Price List
  1318.                         All prices are in US $
  1319.  
  1320. ______________________________________________________________________
  1321. |Description            |   1 CPU |  5 CPUs  | 10 CPUs  |  20 CPUs   |
  1322. |_______________________|_________|__________|__________|____________|
  1323. |Basic Package          |   $ 295 |    $ 775 |   $ 1575 |     $ 2950 |
  1324. |_______________________|_________|__________|__________|____________|
  1325. |Meta programming System|   $ 200 |    $ 675 |   $ 1275 |     $ 2050 |
  1326. |_______________________|_________|__________|__________|____________|
  1327.                          incl. 1    incl. 2    incl. 3    incl. 4
  1328.                          man. set   man. sets  man. sets  man. sets
  1329.  
  1330.  
  1331. _____________________________________________
  1332. |Additional documentation | 1 set  | 10 sets |
  1333. |_________________________|________|_________|
  1334. |Additional manual sets   | $ 50   |  $ 400  |
  1335. |_________________________|________|_________|
  1336. |BETA book preprint       | $ 40   |  $ 300  |
  1337. |_________________________|________|_________|
  1338.  
  1339. Upgrade:  30% of the above prices.
  1340.  
  1341. Hot-line support available.  Ask for details.  The Mj|lner BETA Basic
  1342. Package includes the BETA compiler, the basic libraries, the container
  1343. libraries, the persistent store, the user interface library MacEnv,
  1344. the interface to the Macintosh Toolbox, and the external language
  1345. interface.  The purchase of the Mj|lner BETA System includes access to
  1346. e-mail support.  This support will be open to all questions related to
  1347. the purchased system (installation, use and error reports).  Mj|lner
  1348. Informatics will respond to the questions on the e-mail support as
  1349. quickly as possible.  However, note that this e-mail support is not a
  1350. hotline.  Mj|lner Informatics is offering consultancy services and
  1351. training in connection with the Mj|lner BETA System.  Ask for details.
  1352.