1. Window Manager Problems
--------------------------


* Window Managers twm and mwm use "SHIFT-Esc" for their own
  purposes. Therefore, "SHIFT-Esc" may no longer be used to
  escape from text/position input states. Please use the
  key "Undo" ("L4" on very old Sun keyboards) or the two 
  keystrokes "CTRL-x u" or "CTRL-x CTRL-/" instead.


* Other window managers (like olvwm) have reserved meanings
  for function keys like "Front" or "Open". These problems
  may be solved by changing key bindings of commands within
  the file ${PROGRESROOT}/data/tables/cmd.tab (for all
  users of the PROGRES installation) or within the file
  ${HOME}/progresdata/tables/cmd.tab for a specific user.
  Unfortunately, this does not affect key bindings of the
  built-in micro emacs text editor. In this case you have
  to circumvent the problem by using additionally existing
  key binding sequences. They are explained if you select
  the commands "HELP:Keyboard" and "HELP:TextEditor".



2. Language Problems
--------------------


* Attribute conditions within path expressions or restrictions
  have a keyword "valid" as prefix, as e.g. in

    path Example: C1 -> C2 =
      -Edge-> & valid( self.att = ... ) & ...
    end;


* Attribute conditions for node sets or optional nodes in
  the left-hand side of a rewrite rule are disallowed, i.e.
  you may not write 

  production p =
 
        +---------------+ 
        |               |
      +-+-------------+ |
      |               | |
      |  `1  :  C     +-+
      |               |
      +---------------+ 
  
    ::=
   
      ...
  
      condition `1.att = ...

    end;
  
  You have to use restrictions within the left-hand side for
  this purpose:
  
    production p =
   
        +---------------+ 
        |               |
      +-+-------------+ |  <== valid (self.att = ... )
      |               | |
      |  `1  :  C     +-+
      |               |
      +---------------+ 
  
    ::=
   
      ...
  
    end;


* Problems with type casts/type restrictions:

  Let us assume that we have a subclass C1 of node class C,
  an attribute A defined within node class C1, and a variable
  V : C which may or may not point to a node of class C1
  (or C1 is a type of class C).

  a) Test whether V is instance of C1 and its attribute A has
     value k:

     exist V1 := V.instance_of C1 ::
       V1.A = k
     end;

  b) Return value of attribute A if V is instance of C1, return k
     otherwise:

     [ use V1 := V.instance_of C1 ::
         V1.A
       end
     | k ]
  
  c) Return value of attribute A if V is instance of C1, stop
     execution otherwise (with runtime error):

     ( V : C1 ).A         or   [ V.instance_of C1 | halt ].A

  d) Return value of attribute A if V is instance of C1, fail
     and return empty set (backtrack) otherwise:

     ( V : C1 [0:1] ).A   or   ( V.instance_of C1 ).A



3. Interpreter Problems
------------------------

* Deleting old interpreter sessions (after crashes): 
  To get rid of old interpreter sessions (especially those with
  the default name "NoName") select the corresponding increment
  (not just the name) in the project view and activate the delete
  command INTERPRETE:KillSession. 
  
  You may also create interpreter sessions with a name unequal
  to "NoName" if the command "INTERPRETE:SessionCreate" in
  the PROGRES specification window fails. For this purpose
  select a specification in the project view and activate the
  command INTERPRETE:CreateSession.
  
* Error message "Unable to build dependency graph for Path!":

  This message may be displayed when the interpreter's start-up
  phase aborts. The current interpreter increment should then
  be a graphically defined path or restriction. Its subgraph
  pattern consists of two more or less unrelated subpatterns.
  In this case, PROGRES is not able to build an attribute
  dependency graph needed for incremental attribute evaluation
  or path/restriction materialization purposes. This is not
  an issue as long as the path/restriction is not directly or
  indirectly needed for above mentioned purposes.

  Please avoid usage of this path/restriction in derived attribute
  definitions and static path/restriction definitions.

  ATTENTION: it might also be the case that the evaluation of
  highlighted path/restriction requires reverse traversal of a
  path expression. In this case please simply reverse direction of
  path expression or make path expression "static". This simplifies
  reverse traversal of path and enables the construction of the
  corresponding attribute dependency graph.


4. Problems with Generated Prototypes
-------------------------------------

* Call of script "StartProto" results in error message

    Graph scheme of existing graph doesn't match prototype.
    Host graph can't be opened.

  The reason for this error message is that the given graph
  database for the prototype was created with a different
  prototype or a previous (schema incompatible) version
  of the currently used prototype. The default value for
  the graph database is "DemoProto/ProtoHostGraph". You
  may change the default value by calling the script

    StartProto DirectoryName FileName

  (with DirectoryName being the name of a graph pool and
   FileName being the name of a graph database in the graph
   pool).
