@1
'Merge' invokes a structure-oriented merge tool which performs
a 3-way merge. Two alternative revisions a1 and a2 are merged
with respect to a common ancestor (called base b) from which
they have been derived. a1 and a2 are compared to each other.
Whenever a difference is detected, the base is consulted to 
find out which changes have been performed on each branch. 
Whenever possible, merge decisions are made automatically;
otherwise, the user has to decide. The merge result is stored
in merge revision m which is a successor of both a1 and a2.
'Merge' takes the context-free structure and the binding
of identifiers to their declarations into account. Merging
is performed in 3 passs the first of which deals with the
context-free structure. Phases 2 and 3 aim at detecting
inadequate merge decisions of pass 1 by analyzing bindings
of identifiers. Furthermore, inadequate merge decisions are
corrected automatically whenever this is possible.
When using 'Merge', you should be aware that the tool relies
on a heuristic algorithm. Thus, it might sometimes not behave
as expected. In order to avoid unexpected behaviour, please
follow the following guidelines:
- Don't use 'Cut & Paste'.
- Don't perform changes outside the environment (e.g.
  using ordinary Unix text editors).
Otherwise, the tool will be less useful for you.

--> 'Close', 'StartPass1', 'StartPass2', 'StartPass3'
@2
'StartPass1' starts the first merge pass which deals with the context-free
structure. The alternative revisions a1 and a2 are compared to each other.
Whenever a difference is detected, the base b is consulted to find out
which changes have been performed on each branch. If possible, a merge
decision is performed automatically. For example, if a procedure identifier
is equal in a1 and b and different in a2, it has been changed in a2;
therefore, this identifier is selected automatically. On the other hand,
the user has to decide if all identifiers are pair-wise distinct.

--> 'Merge', 'StartPass2', 'StartPass3'
@3
'StartPass2' starts the second merge pass which deals with declarations
of identifiers. The second and the third pass aim at detecting some
erroneous merge decisions performed in the first pass (and correcting
these decisions as far as possible). The second pass is mainly a
preparation of the third pass. Name clashes (multiple declarations
of identifiers) are removed under the direction of the user. He decides
whether to delete, modify or ignore the corresponding declarations.
This pass exclusively operates on the merge revision (the result of
applying the merge tool).

--> 'Merge', 'StartPass1', 'StartPass3'
@4
'StartPass3' starts the third merge pass which deals with bindings of
applied occurrences of identifiers to their declarations. Some analyses
are performed on these bindings in order to detect anomalies and conflicts.
In this way, erroneous merge decisions performed in the first phase may
be detected and (partially) corrected. The general idea is to calculate
expected bindings in the merge revision m from bindings in the input
revisions a1, a2, and b. These expected bindings are compared to the
actual binding in m. A conflict occurs if the expected bindings are not
unique. An anomaly occurs if the actual binding differs from the expected
binding. In case of an anomaly, the merge tool tries to change the actual
binding by changing the string of the applied occurrence. If this attempt
fails, the user is informed. In case of a conflict, the user has to decide
what he wants the applied occurrence to look like (i.e. which declaration
it shall refer to). All anomalies and conflicts that cannot be removed
in this phase are stored permanently in the merge revision. Thus, the
user may edit the merge revision, thereby browsing through the warnings
left behind by the merge tool.

--> 'Merge', 'StartPass1', 'StartPass2'
@5
'QuitPass1' aborts the first merge pass;
the rest of the document still unmerged 
is taken from the first revision.

--> 'Merge'
@6
'QuitPass2' aborts the second merge pass;
still multiply defined decls remain unchanged.

--> 'Merge'
@7
'QuitPass3' aborts the third merge pass;
still unbound appls are bound according
to the first revision, if possible.

--> 'Merge'
@8
'Close' closes the merge tool.

--> 'Merge'
@9
In case of a context free conflict, 'Left'
selects the first revision's alternative.

--> 'Right', .., 'RightBeforeLeft', 'QuitPass1'
@10
In case of a context free conflict, 'Right'
selects the second revision's alternative.

--> 'Left', .., 'RightBeforeLeft', 'QuitPass1'
@11
In case of a context free conflict, 'LeftBeforeRight' 
takes both alternatives, the second revision's
following the first revision's.

--> 'Left', .., 'RightBeforeLeft', 'QuitPass1'
@12
In case of a context free conflict, 'RightBeforeLeft'
takes both alternatives, the first revision's
following the second revision's.

--> 'Left', .., 'LeftBeforeRight', 'QuitPass1'
@13
In case of a context free conflict, 
'None' rejects both alternatives. 

--> 'Left', .., 'RightBeforeLeft', 'QuitPass1'
@14
In the second merge pass, 'DeleteDecl'
deletes a multiply defined declaration.

--> 'ModifyDecl', 'IgnoreDecl', 'QuitPass2'
@15
In the second merge pass, 'ModifyDecl'
changes a multiply defined declaration;
the user is requested to rename the declaration.

--> 'DeleteDecl', 'IgnoreDecl', 'QuitPass2'
@16
In the second merge pass, 'IgnoreDecl' leaves
a multiply defined declaration unchanged,
e.g. if the user wants change the counterpart 
of the declaration.

--> 'ModifyDecl', 'DeleteDecl', 'QuitPass2'
@17
In case of an ambiguity in binding an appl to
a decl, 'KeepBinding' keeps the ApplId's 
actual binding.

--> 'ChangeBinding', 'QuitPass3'
@18
In case of an ambiguity in binding an appl to
a decl, 'ChangeBinding' changes the ApplId's 
actual binding by modifying its name.

--> 'KeepBinding', 'QuitPass3'
@19
'ShowMergeErrs' activates a mode that shows all
ApplIds that have been bound anormalously or
automatically during the third pass of the merge tool.
Use 'FirstMarker', 'NextMarker', and 'PrevMarker' 
to navigate between them.

--> 'HideMergeErrs', 'ConfirmMergeErr', 'Merge'
@20
'HideMergeErrs' deactivates the mode that shows 
all anormalously or automatically bound ApplIds.

--> 'ShowMergeErrs', 'ConfirmMergeErr'
@21
'ConfirmMergeErr' removes the marking of the
current increment as to confirm that changes
to this ApplId due to the merge process are
accepted.

--> 'HideMergeErrs', 'ShowMergeErr'
@22
'Diff' opens the diff tool, a tool that
compares two documents in order to show
the parts in which they differ. 'Diff' takes the
context-free structure into account. It distinguishes
between two cases:
- An increment is contained in only one revision.
  This case applies to list elements (e.g. declarations).
- An increment is contained in both revisions, but the
  instances of this increment differ from each other
  (e.g. two different identifiers for the same
  procedure).

--> 'QuitDiff'
@23
'QuitDiff' closes the diff tool.

--> 'Diff'
