                                   Der GME                                     1
________________________________________________________











             Der Golem-Megamax-Editor

                                    GME







                         Version 1.0 ohne GEM-Fenster

                        (C) 1989 by Johannes Leckebusch

                        Lizenziert fr Megamax Modula-2
                                   Der GME                                     2
________________________________________________________


Inhalt

1         Einfhrung
1.2       Die wichtigsten Eigenschaften

2.1       Installieren des GME als Shell-Editor

3.1       Eine einfache Programmiersitzung
3.2       Starten des Editors mit einem Text

4.        bersicht ber alle Befehle des GME
4.1       Men "GME"
4.2       Datei-Men
4.3       Block-Men
4.4       Marken-Men
4.5       Suchen-Men
4.6       Editieren-Men
4.7       Programm-Men
4.8       Reine Tastaturbefehle

5.1       Tastatur konfigurieren
5.2       Editor mit/ohne GME.GME konfigurieren

6.        Nachwort
                                   Der GME                                     3
________________________________________________________


1.1  Einfhrung

Der  GME  ist  ein  professioneller  Programmeditor.  Er  wurde  aus  dem  G2E
(Golden Two Editor) abgeleitet, der seinerseits ein Nachkomme des legendren
TLGE (The Little Golem Editor) ist.

Der  GME  wurde   speziell   an   das   Megamax-Modula-Programmiersystem
angepat. Die 1001 Features des G2E wurden einerseits auf das wesentliche
reduziert, andererseits so ergnzt, da der Editor optimal mit der Shell des
MM2-Systems  zusammenarbeitet.  Die  Benutzerfhrung  ist  ein  Kompromi
zwischen allgemeinen GEM- Konventionen (natrlich Mausbedienung!) und den
Eigenheiten eines besonderen Editorkonzeptes.


1.2  Die wichtigsten Eigenschaften:

        Wertet Fehlermeldungen des MM2-Compilers aus (direkte Anzeige der
        Fehlerposition in der Source, Anzeige der Fehlermeldung im Klartext)

        Kann Compiler, Make und Loadtime-Linker starten (offline, das heit,
        die Dateien werden gespeichert und der Editor verlassen)

        Startet  Compiler  (online)  aus  dem  Speicher  (ohne  den  Editor  zu
        verlassen, Compiler liest Text aus dem Speicher)

        Fullscreeneditor auch mit seitwrts scrollen, dh. auch Zeilen mit mehr
        als 80 Zeichen knnen bearbeitet werden

        Alle blichen Grundfunktionen wie Suchen/Tauschen, Block markieren,
        Cut/Copy-Paste oder Block sichern, Block einrcken

        Bedienung  ber  Maus  und  Tastatur  parallel,  volle  Ausnutzung  der
        Cursor- und Funktionstasten, zustzlich konfigurierbare Belegung von
        Control- und Alternate-Kombinationen

        Ldt  beliebig  viele  Texte  in  den  Speicher  (soweit  Speicher  reicht),
        schnelles   Umschalten   zwischen   Vorder-   und   Hintergrundtext,
        bernehmen von Textteilen aus einem Text in einen anderen, direktes
        Compilieren des jeweils angezeigten Textes aus dem Speicher

        Abspeichern  der  Konfiguration  (Autoindent,  Overwrite/Insert,  Wort-
        oder   Mustersuche   usw.),   wahlweise   Abspeichern   der   aktuellen
        Textpositionen und Merkpositionen in Zusatzdatei zu jedem Text
                                   Der GME                                     4
________________________________________________________


2.1 Installieren des GME als Shell-Editor

Um mit dem Editor arbeiten zu knnen, sollte dieser in der Shell installiert
werden. Dies geschieht einfach durch Anmelden des Editors als Arbeitseditor
(Eintragen  des  Namens  "GME"  in  den  Shell-Parametern  fr  den  Editor).
Weitere Parameter: Shell braucht weder fr den Editor nach den Sourcen zu
suchen  noch  die  Fehlermeldung  nach  einem  Compiler-Fehler  anzuzeigen.
Temporre Dateien sind nicht ntig, in der Argumentzeile knnen alle Infor~
mationen bergeben werden. Vorteilhaft ist es, den Editor resident zu laden
(sofern gengend Speicher vorhanden ist) - das geschieht durch die Anweisung
"Load GME" in der Batch-Datei (blicherweise "MM2SHELL.M2B").

Zum Editor gehrt das Resource-File "GMEMENUE.RSC", das sich im gleichen
Ordner  wie  die  Shell  oder  auf  einem  der  in  DefaultPath  (s.  Shell-Batch)
eingetragenen Pfade befinden sollte.
                                   Der GME                                     5
________________________________________________________


3.1 Eine einfache Programmiersitzung

Um ein Programm einzugeben, zu compilieren (in Maschinenkode bersetzen)
und von Textfehlern zu befreien, brauchen Sie den Editor nicht zu verlassen.
Auch  nicht,  um  verschiedene  Module,  die  eventuell  zu  einem  Programm
gehren, zu bearbeiten. Doch fangen wir mit dem einfachsten Fall an.

Wenn Sie ein neues Programm eingeben wollen, also keine vorhandene Datei
bearbeitet werden soll, ist eine neue, leere Arbeitsdatei anzulegen (mit Taste
N) oder ein Leername bei einer bestehenden Arbeitsdatei oder der aktuellen
Datei einzugeben. Starten Sie den Editor durch E (fr die Arbeitsdatei) bzw.
Control-E (wenn Sie die 'aktuelle Datei' bearbeiten wollen).

Bild 1








Der Editor ist, wenn  er  resident  geladen  wurde,  nach  etwa  1,5  Sekunden
arbeitsbereit. Er zeigt die GEM-Menleiste (in Bild 1 und den folgenden), einen
grauen Balken und darunter, schwarz unterlegt, die Statuszeile. In dieser Zeile
wird normalerweise die Anzahl Zeilen der Datei nach "ZL" angezeigt, danach
die Zeile, in der sich der Cursor befindet, die Spalte und der Arbeitsmodus
(Einfgen oder berschreiben, Indent  oder  keine  Anzeige  fr  die  halbauto~
matische  Einrckung).  In  bestimmten  Situationen  erscheinen  auch  andere
Meldungen  in  dieser  Zeile,  wie  zum  Beispiel  "Compiler  luft..."  oder  eine
Fehlermeldung (siehe unten). In Bild 1 sehen Sie ein Rufzeichen, das andeutet,
da der Text bearbeitet wurde und in dieser Fassung noch nicht gesichert ist.
Besitzt  der  Text  bereits  einen  Dateinamen,  unter  dem  er  gesichert  oder
geladen  wurde,  so  wird  auch  dieser  zusammen  mit  dem  gesamten  Pfad
angezeigt.

Bild 2






Geben Sie nun den in Bild 1 zu erkennenden Programmtext ein. Dann whlen
Sie im Programm-Men den Eintrag "Compilieren" (Bild 2). Sie knnen statt
dessen  auch  Alternate-D  drcken,  also  die  Alternate-Taste  festhalten  und
dann D. Dies wird durch die Raute und das D im Meneintrag angezeigt. Ein
                                   Der GME                                     6
________________________________________________________


"^" in der Tastenbezeichnung bedeutet die Control-Taste, ein kleines "s" die
Shift-Taste. Einige der Tastenbefehle knnen je nach Konfiguration verschieden
sein, beachten Sie die Anzeige in der GEM-Menleiste.

Bild 3



Es erscheint sofort die Anzeige "Compiler luft" in der Statuszeile (Bild 3).
Diese Anzeige bleibt so lange  erhalten,  wie  der  Compiler  zur  bersetzung
braucht oder bis er einen Fehler findet. In unserem Fall (Bild 4) erscheint sehr
rasch eine Fehlermeldung und der Cursor springt auf den ersten Buchstaben
des inkriminierten "Bezeichners".

Bild 4






Der Compiler kennt das Wort "WriteString" nicht. Das liegt daran, da Modula
eine bibliotheksorientierte Sprache ist - alle Ein-/Ausgabeprozeduren mssen
aus einer geeigneten Library "importiert" werden.

Bild 5










    Beachte:  Bei  der  Bearbeitung  von  umfangreichen  Texten  kann  es
    vorkommen, da Sie die letzte Fehlermeldung noch einmal anschauen
    wollen.  Sobald  Sie  die  Fehlerzeile  mit  dem  Cursor  verlassen,
    verschwindet die Fehlermeldung jedoch aus der Anzeige der Statuszeile.
    Rufen Sie einfach den Befehl "Zur Fehlermeldung" (Bild 5) auf. Der
    Cursor  springt  wieder  an  die  Fehlerstelle,  und  diese  wird  erneut
    angezeigt.  Dies  ist  so  lange  mglich,  wie  kein  neuer  Compilerlauf
    stattgefunden hat (der entweder einen anderen Fehler meldet oder das
    Programm fehlerfrei bersetzt).
                                   Der GME                                     7
________________________________________________________



Bld 6







Tragen Sie nun die in Bild 6 gezeigte "FROM...IMPORT"-Anweisung nach. Wenn
Sie keinen weiteren Fehler gemacht haben, so erscheint nach einem  neuen
Compilerlauf  die  Anzeige  des  Pfades,  auf  den  die  bersetzte  Codedatei
geschrieben wurde, sowie deren Lnge in Bytes.

Bild 7













Wenn Sie den Editor verlassen wollen, geben Sie (Bild 7) den "Beenden"-Befehl
ein (es gibt noch andere, eventuell elegantere Mglichkeiten,  den  Editor  zu
verlassen,  die  in  der  Gesamtbersicht  des  Datei-Mens  weiter  unten
beschrieben werden). Statt dessen knnen Sie auch Alternate-X drcken.

Bild 8







Der GME wacht sorgfltig darber, da keine Arbeit verlorengeht. Obwohl Sie
ihm keinen Auftrag gegeben haben, den soeben eingegebenen Text (der sich
bisher nur im Speicher befindet!) zu sichern, ermahnt er Sie (Bild  8),  ihn
zu speichern. Sie haben hier drei Mglichkeiten. Zunchst einmal erkennen Sie
an der Anzeige Text "" editiert! , da der Text noch keinen Dateinamen besitzt
- dieser wrde nmlich  sonst  zwischen  den  Anfhrungszeichen  erscheinen.
                                   Der GME                                     8
________________________________________________________


Klicken sie auf JA (oder drcken Sie die Return-Taste, da dies der Default~
button ist - erkennbar an der dickeren Umrandung), so wird der Editor den
Text ungefragt speichern - sofern er den Dateinamen schon kennt. In diesem
Fall wrde allerdings die Filebox erscheinen und die Eingabe eines Dateinamens
verlangen (Bild 9). Mchten Sie den Text nicht unter dem angezeigten Namen
speichern, oder wollen Sie berhaupt in den Editor zurck, so klicken Sie auf
ABBRUCH. Falls Sie aber auf NEIN klicken, wird der Text gelscht und der
Editor verlassen.

    Genaugenommen   wird   die   im   Speicher   befindliche   Textversion
    verworfen. Sollte der Text bereits frher gesichert worden sein, so
    wird diese Datei natrlich nicht gelscht!

Bild 9
                                   Der GME                                     9
________________________________________________________


3.2 Starten des Editors mit einem Text

Der Editor kann auf verschiedene  Weise  bereits  mit  einem  Text  gestartet
werden, den er automatisch ldt und anzeigt. Beispielsweise knnen Sie aus
einem der Fenster in der Shell einfach mit der Maus einen Textnamen auf das
Editor-Icon  "ziehen".  Ziehen  Sie  einen  Textnamen  statt  dessen  auf  den
Compiler, so wird der Text bersetzt. Wenn dabei ein Fehler erkannt wird,
startet  die  Shell  anschlieend  automatisch  den  Editor  mit  diesem  Text,
natrlich wird dabei auch sogleich die Fehlerstelle angezeigt. Die weitere Arbeit
geschieht wie oben beschrieben, dh. Sie knnen z. B. den Fehler korrigieren
und  zur  Kontrolle  aus  dem  Speicher  compilieren.  Da  der  Text  bearbeitet
wurde, achtet der Editor automatisch darauf, da Sie die vernderte Fassung
abspeichern - oder willkrlich verwerfen.

    Beachte: Beim Compilieren  aus  dem  Speicher  drfen  keine  Include-
    Anweisungen  im  Programmtext  stehen,  in  diesem  Fall  kommt  eine
    Fehlermeldung. Sie mssen solche Quellen offline compilieren, also mit
    dem Befehl "Ende & Comp." im Programm-Men. Dabei werden alle
    bearbeiteten  Texte  vorher  abgespeichert  und  der  Editor  verlassen,
    danach startet automatisch der Compiler.
                                   Der GME                                    10
________________________________________________________


4. bersicht ber alle Befehle in der GEM-Menleiste

Im folgenden finden Sie eine bersicht der Editorbefehle in der Ordnung, wie
sie in der GEM-Menleiste erscheinen. Der Editor besitzt ber 100 Befehle, die
meisten davon werden in der Menleiste aufgefhrt. Fast alle Befehle knnen
auerdem  ber   Funktionstasten   oder/und   Steuerzeichenfolgen   ausgelst
werden.  Wir  sprechen  im  folgenden  immer  beispielsweise  von  dem  Befehl
"Sichern" (s. unten), wobei es gleichgltig ist, ob dieser durch Anklicken der
betreffenden Menleiste, durch Eingabe der dort angezeigten Tastenkombination
oder durch eine Funktionstaste ausgelst wird.

    Beachte: Die Befehle werden wie folgt notiert (Beispiele aus dem Men
    "Editieren" u. "Programm"):

        Insert:     Taste "Insert"
        sInsert:    Taste "Insert" mit festgehaltener Shift-Taste
        ^J:         Taste "J" mit festgehaltener Control-Taste
         Raute D: Taste "D" mit festgehaltener Alternate-Taste

Die Steuerzeichenfolgen orientieren sich an Wordstar beziehungsweise an den
Turbo-Editoren von Borland, jedoch ist der GME weitaus  komfortabler.  Alle
wichtigen Befehle sind jedoch ber Funktionstasten (Cursortasten) erreichbar,
auch  knnen  die  Steuertasten-  und  Funktionstasten-Zuordnungen  gendert
werden (siehe Abschnitt "Anpassen der Tastaturbelegung").

    Beachte: Falls in den Mens Ihres Editors andere Tastenabkrzungen
    fr  die  Befehle  angezeigt  werden,  haben  Sie  einen  abweichend
    konfigurierten Editor erhalten. Falls Sie selbst die Tastaturbelegung der
    Befehle  ndern,  mssen  Sie  die  entsprechende  Anzeige  mit  dem
    KResource-Programm   "NRSC_ASH.PRG"   selbst   im   Resource-File
    nachtragen (falls Sie dies wnschen).
                                   Der GME                                     11
________________________________________________________


4.1 Men "GME"












Der erste Eintrag ruft eine Box mit der Copyright-Anzeige des Editors und der
Versionsnummer. Eventuelle weitere Eintrge sind fr Accessories vorgesehen.

    Sollten Sie Probleme mit oder Fragen zu Ihrem GME haben, so ist es
    ntzlich,  stets  die  Versionsnummer  anzugeben.  Sollte  diese  durch
    Manipulieren der Resource-Datei verndert sein, so gilt im Zweifelsfalle
    die beim Laden oder Speichern in der Statuszeile angezeigte Version!
    Diese ist fest im Programmcode enthalten.
                                   Der GME                                    12
________________________________________________________


4.2 Das Datei-Men










Das Datei-Men enthlt alle Befehle zum Laden und Speichern von  Texten.
Wenn  der  Editor  infolge  eines  bersetzungsfehlers  gestartet  wird  oder
dadurch, da man das Icon einer Textdatei auf das Editor-Icon schiebt, ldt er
automatisch den betreffenden Text. Unabhngig davon knnen jederzeit weitere
Texte geladen werden. Alle Texte befinden sich gleichzeitig im Speicher (dieser
mu ausreichend gro sein). Von einem Text zum anderen gelangen Sie ber
das "Editieren"-Men (siehe unten).

Die ersten beiden Eintrge, von denen einer mit einem Hkchen gekennzeichnet
ist, stellen "Schalter" dar. Schalter sind stets die ersten Eintrge in einem
Men (in Datei, Block, Suchen und Editieren).

    Beachte: Die Hkchen-Einstellungen knnen mit dem -->  "Parameter
    sichern"-Befehl in die Datei GME.GME gespeichert werden, so da sie
    beim nchsten Start des  Editors  automatisch  wiederkehren  -  siehe
    unten!

                                Neu

Es wird ein neuer Text im Speicher angelegt. Damit knnen Sie jederzeit, auch
wenn der Editor bereits mehrere Programmdateien geladen hat, den Entwurf
eines neuen Programm-Moduls beginnen. Es erscheint  ein  leerer  Bildschirm
(die anderen Texte sind nach wie vor vorhanden, siehe Men "Editieren"). Dazu
wird  ein  neuer  "Textpuffer"  angelegt.  Siehe  auch  -->  Schlieen.  Beim
Verlassen des  Editors  oder  bei  Eingabe  eines  Sicherungs-Befehls  wird  die
Eingabe eines Dateinamens verlangt.

                              ffnen...

Es wird eine neue Datei geladen, dh. es erscheint die Filebox. Whlen Sie die
gewnschte Datei aus oder klicken Sie auf Abbruch (in diesem Fall verbleibt
ein leerer Textpuffer, der eventuell beim nchsten ffnen-Befehl  verwendet
wird). Auf jeden Fall bleiben vorher im Editor geladene Texte erhalten - siehe
Men "Editieren". Beachten Sie, da nur so viele und so lange Texte geladen
                                   Der GME                                    13
________________________________________________________


werden  knnen,  wie  der  noch  freie  verfgbare  Arbeitsspeicher  Ihres
Computers erlaubt. Kann eine Datei nicht mehr vollstndig geladen werden, so
erscheint eine Fehlermeldung ("Speicher reicht nicht"). In so einem Fall sollten
Sie unbedingt andere Texte lschen (--> Schlieen), ehe Sie weiterarbeiten und
die betreffende Datei neu laden.

    Beachte:  Der  GME  benutzt  eine  sehr  flexible  interne  Speicher~
    verwaltung.  Dadurch  kann  er  beliebig  viele  Texte  "durcheinander"
    verwalten, die sich den Arbeitsspeicher je nach Bedarf teilen - dh. ein
    Text kann sehr gro, ein anderer sehr klein sein, der gesamte freie
    Speicher  steht  potentiell  allen  Texten  zur  Verfgung.  Mit  anderen
    Worten:  Es  gibt  keine  feste  Aufteilung  des  freien  Speichers  in  n
    gleichgroe  Abschnitte  oder  dergleichen.  Allerdings  hat  dies  zur
    Konsequenz, da die Texte im Speicher mehr Platz brauchen, als dies
    ihrer Lnge auf Diskette entspricht (besonders dann, wenn die Texte
    sehr viele kurze Zeilen enthalten).

                             Einfgen...

Eine Disk- oder Festplattendatei wird in den gerade bearbeiteten Text ab der
aktuellen Cursorposition eingefgt. Sie erscheint dort als markierter Block (und
kann mit den --> Block-Befehlen im Clipboard gemerkt werden).

                              Sichern

Der gerade bearbeitete Text wird unter dem schon vorhandenen Dateinamen
gespeichert (es wird eine .BAK-Datei angelegt, auer wenn diese Betriebsart
abgeschaltet  ist  -->  "Backup  anlegen"  oben).  Wurde  noch  kein  Dateiname
vergeben, so fragt der Editor durch Anzeige der Filebox danach.

                          Sichern als...

Es wird in jedem Fall die Filebox angezeigt, so da man einen abweichenden
Dateinamen angeben kann. Bei Return wird der vorgewhlte Dateiname benutzt.
Fehlt dieser oder klickt man auf ABBRUCH, so wird die Datei nicht gesichert.

                         Block sichern...

Es wird ein markierter Block als Datei herausgeschrieben, der Dateiname wird
abgefragt. Wenn kein Block markiert ist, erscheint eine Alarmbox.

                             Schlieen

Ein Textpuffer soll aus dem Speicher entfernt werden. Wenn der Text seit der
letzten Sicherung verndert wurde, wird  automatisch  die  Sequenz  "Sichern
als..." vorgeschaltet, danach wird der Textpuffer gelscht und entfernt (der
                                   Der GME                                    14
________________________________________________________


letzte Puffer kann nicht entfernt werden, dh. es mu immer mindestens einen
Textpuffer geben solange der Editor luft). Wenn der Puffer editiert wurde
und nicht gespeichert wird, kann er nicht entfernt werden.

                      Konfiguration speichern

Je nachdem, ob dieser Eintrag mit einem Hkchen gekennzeichnet  ist  oder
nicht, wird zu einem Text der Form "DATEI.M" eine Zusatzdatei "DATEI.GME"
gespeichert,  die  individuelle  Einstellungen,  Cursor-  und  Merkpositionen  etc.
enthlt. Durch Anklicken dieses Eintrags wird das Hkchen ein-  oder  aus~
geschaltet.

        Beachte: Wenn Sie, damit der Editor schneller startet, keine GME.GME-
        Datei verwenden wollen, knnen Sie die Voreinstellungen  beim  Start
        des Editors auch im Modul GMEConfig ("GMECONFI.I") ndern, wie im
        Abschnitt 5.2 beschrieben.

                          Backup anlegen

Je nachdem, ob dieser Eintrag mit einem Hkchen gekennzeichnet  ist  oder
nicht, wird  beim  Sichern  eines  Textes  DATEI.XXX  eine  alte  Datei  gleichen
Namens in DATEI.BAK umbenannt (die alte .BAK-Datei geht verloren).

                       Einstellungen sichern

Es  werden  die  aktuellen  Einstellungen  (Hkchen!)  in  der  Datei  GME.GME
gesichert (und zwar die Werte, die fr den gerade angezeigten Text eingestellt
sind). Beim nchsten Start des Editors ist dies die Standard-Voreinstellung
aller  Parameter.  Fr  Tastaturbelegungen  siehe  Abschnitt  "Tastatur  konfi~
gurieren" unten.

                              Beenden

Verlassen  des  Editors,  ohne  Dateien  zu  speichern.  Falls  jedoch  Texte
bearbeitet  wurden,  verlangt  der  Editor  zur  Sicherheit  das  Speichern  oder
ausdrckliche Verwerfen der Texte, siehe Bild 8 oben.
                                   Der GME                                    15
________________________________________________________


4.3 Das Block-Men









Das Block-Men enthlt Befehle, mit denen Textabschnitte gemerkt, kopiert,
verschoben, gelscht oder in andere Texte bertragen werden knnen. Dabei
wird  das  Copy/Cut  &  Paste-Konzept  nach  dem  Vorbild  des  Macintosh
angewandt (mit kleinen Abweichungen).  Das  bedeutet  grundstzlich  folgende
Befehlsfolge:

(1)     Textabschnitt  mit  der  Maus,   Tastenbefehlen   oder   Menbefehlen
        markieren. Der "Block" erscheint auf dem Bildschirm hervorgehoben.

(2)     Nun wird der Block gemerkt, indem man ihn ins "Klemmbrett" (eine Art
        Notizblatt oder Pinwand) ablegt - dabei kann er aus dem aktuellen Text
        an der alten Position "ausgeschnitten" werden, oder es wird lediglich
        eine Kopie angefertigt (Merken).

(3)     Schlielich kann der Block an anderer Stelle wieder eingefgt werden -
        auch  in  einen  anderen  Text  (siehe  -->  "Nchster  Text"  im  Men
        "Editieren")

Wenn Sie sich Bild 12 ansehen, fallen zwei Dinge auf:

*       Der Schalter "GEM-Klemmbrett" hat kein Hkchen
*       Der Eintrag "Einfgen" ist gesperrt (Schattenschrift)

Wenn wir den Schalter zunchst ignorieren, bedeutet dies, da sich derzeit
nichts auf dem Schwarzen  Brett  (Klemmbrett  oder  Clipboard)  befindet.  Es
kann daher nichts in den Text eingefgt werden. Erst nach einem der Befehle
"Ausschneiden" oder "Merken" wird der Befehl "Einfgen"  verfgbar.  Zuvor
mu  aber  ein  Block  markiert  werden  (-->  Anfang  markieren,  -->  Ende
markieren etc., s. unten).

Normalerweise ist das "Klemmbrett" ein verdeckter Textpuffer, wird also im
Speicher verwaltet (siehe --> "Block Editieren" unten). Einer GEM-Konvention
zufolge  kann  man  dieses  Klemmbrett  auch  ber  sogenannte  Scrap-Dateien
(wrtlich:  Kritzelblock  oder  Schmiertafel)  mit  anderen  Programmen  (meist
Accessories) austauschen. Der GME ist fr diese Konvention vorbereitet.
                                   Der GME                                    16
________________________________________________________


Wenn  Sie  den  Schalter  "GEM-Klemmbrett"  auf  EIN  stellen  (mit  Hkchen
versehen),  werden  gemerkte  oder  ausgeschnittene  Blcke  in  eine  Datei
geschrieben, die sich in einem Ordner "CLIPBRD" befindet. Der GME verwendet
hier   den   Dateinamen   SCRAP.TXT,   der   vollstndige   Pfad   lautet   also
"C:CLIPBRDSCRAP.TXT" (ersatzweise auch "A:CLIPBRDSCRAP.TXT"). Bei
einem "Einfgen" versucht der GME also in jedem Fall, diese Datei bei der
aktuellen Cursorposition in den gerade angezeigten Text einzufgen. Ist kein
solcher Text vorhanden bzw. der Pfad nicht zu finden, erscheint eine Alarmbox
mit der Meldung "Das Klemmbrett ist leer".

                          GEM-Klemmbrett

Ein-  und  Ausschalten  des  GEM-Clipboard-Mechanismus  (Datei  zum  Daten~
tausch mit anderen Programmen, siehe voriger Abschnitt).

                           Ausschneiden

Ein  markierter  Block  wird  aus  dem  Text  entfernt  ("ausgeschnitten")  und
gemerkt.

                              Merken

Ein markierter Block wird lediglich in das Klemmbrett kopiert und zur weiteren
Verwendung aufbewahrt.

                             Einfgen

Ein  vorher  gemerkter  Text  (-->  "Ausschneiden",  "Merken")  wird  an  der
aktuellen Cursorposition in den angezeigten Text eingefgt.

                             Editieren

Mit  diesem  Befehl  gelangen  Sie  in  den  normalerweise  unzugnglichen
Klemmbrett-Puffer und knnen diesen wie einen gewhnlichen Text editieren.
Ein  spterer  Befehl  -->  "Einfgen"  wird  den  so  vernderten  Inhalt  des
schwarzen Brettes ab der aktuellen Cursorposition in den Text einfgen, der
gerade angezeigt wird. In die normale Textbearbeitung kommen Sie mit dem
--> "Beenden"-Befehl (Men Datei) oder der Esc(ape)-Taste zurck.

                         Anfang markieren

Festlegen  eines  Blockanfangs.  Bringen  Sie  zuvor  den  Cursor  auf  die
gewnschte Anfangsposition. Geht auch mit Mausklick (linke Taste).
                                   Der GME                                    17
________________________________________________________


                          Ende markieren

Festlegen eines Blockendes. Bringen Sie zuvor den Cursor auf die gewnschte
Endposition.  Der  Textabschnitt  wird  anschlieend  hervorgehoben  dargestellt.
Danach sollten Sie einen der Befehle --> "Ausschneiden" oder --> "Merken"
whlen. Geht auch mit Mausklick (Shift und linke Taste oder mit der rechten
Maustaste).

                          Zeile markieren

Es wird die Zeile, in der sich der Cursor befindet, als Block markiert.

                          Alles markieren

Es wird der gesamte Text, der gerade angezeigt ist, als Block markiert.

    Bemerkung: Es gibt einen weiteren Befehl, der nicht in der Menleiste
    aufscheint: Blockmarken aufheben (Standardeinstellung ^KH).
                                   Der GME                                    18
________________________________________________________


4.4 Das Marken-Men








Marken erleichtern die Orientierung in einem Text. Der GME erlaubt es, in
jedem  im  Speicher  befindlichen  Text  unabhngig  von  den  anderen  drei
"Benutzermarken" zu setzen. Er merkt sich deren Position, solange die Texte
bearbeitet werden (beim Abspeichern mit --> "Konfiguration  speichern"  EIN
auch in einer Zusatzdatei). Zustzlich merkt er sich zu jedem Text die aktuelle
Cursorposition, die zuletzt editierte Textstelle und die letzte Compilerfehler~
meldung. Das kann besonders ntzlich sein, wenn man in mehreren Modulen
Compilerfehler  erhlt,  die  vielleicht  eine  gemeinsame  Ursache  haben.  Oder
wenn Sie bei der Erstellung eines Programms mehrfach bestimmte Stellen in
verschiedenen Quelltexten von Bibliotheksmodulen nachschauen wollen.

                        Setze Marke 1 bis 3

Die augenblickliche Cursorposition im angezeigten Text wird gemerkt.

                         Zu Marke 1 bis 3

Der Cursor springt auf die gemerkte Stelle im jeweiligen Text. Wurde keine
Stelle gemerkt, springt er an den Textanfang.

                            Zu Zeile...

Der  Editor  verlangt  die  Eingabe  einer  Zeilennummer  und  springt  dann  zu
dieser. Ist die Zeilennummer zu gro, springt er  an  das  Textende.  Dieser
Befehl ist oft ntzlich, wenn man eine Textstelle "ungefhr im zweiten Drittel
der Source" sucht, oder wenn ein Mitprogrammierer sagt: "ndere mal den
Befehl in Zeile 345 folgendermaen...".

                          Letzte Position

Der Cursor springt auf die zuletzt editierte Position im angezeigten Text.

                         Zur Fehlermeldung

Der Cursor springt auf die zuletzt vom Compiler gemeldete Fehlerstelle und
zeigt die Fehlermeldung an. Gibt es keine solche, springt er an den Textanfang
und  es  erscheint  lediglich  die  Meldung  "Compilerinfo"  oder  die  Daten  der
bersetzten Codedatei.
                                   Der GME                                    19
________________________________________________________


4.5 Das Suchmen









Ein Editor ohne komfortable Suchbefehle ist heute undenkbar. Der GME ist mit
einem  modernen  Suchalgorithmus  ausgestattet,  der  einen  Begriff  um  so
schneller findet, je lnger er ist (vielleicht im Gegensatz zu dem, was man
intuitiv erwarten mchte  -  bei  sehr  langen  Quellen  knnen  Sie  sich  diese
Eigenschaft  gegebenenfalls  zunutze  machen).  Selbstverstndlich  kann  man
vorwrts und rckwrts suchen, und man kann bestimmen, ob ein Begriff mit
oder  ohne  Bercksichtigung  der  Gro-/Kleinschreibung  (in  Modula  sehr
wichtig!), ob als Teilwort oder nur als ganzes Wort gefunden  werden  soll.
Natrlich lt sich ein Suchbegriff auch gegen einen anderen tauschen, und
schlielich gibt es die Mglichkeit, das gerade rechts vom Cursor befindliche
Wort auch an anderer Stelle ausfindig zu machen.

    Beachte: Der GME kann nur Suchbegriffe finden, die vollstndig in einer
    Zeile  stehen.  Er  kann  auch  nicht  Zeilenenden  in  den  Suchbegriff
    aufnehmen.  Diese  Beschrnkungen  werden  eventuell  in  knftigen
    Versionen   aufgehoben.   Aufgrund   der   Eigenart   des   optimierten
    Suchverfahrens  funktioniert  die  Suche  "rckwrts"  nur  zwischen
    verschiedenen Zeilen - derselbe Suchbegriff innerhalb einer Zeile wird
    also nicht "rckwrts" gefunden. Gehen Sie ggf. in die vorige Zeile.

                            Wort suchen

Dieser  Schalter  bestimmt,  ob  nur  ein  vollstndiges  Wort  (Donaudampf~
schiffahrtskapitn wird nicht gefunden, wenn man Donau oder Dampf sucht)
oder auch ein Teilwort (Muster) gefunden wird.

                            Grossklein

Dieser  Schalter  bestimmt,  ob  der  Suchvorgang  Gro-  und  Kleinschreibung
unterscheidet.  Wenn  Sie  also  nicht  genau  wissen,  wie  der  Suchbegriff
geschrieben  wird,  stellen  Sie  am  besten  beide  Schalter  auf  AUS  (kein
Hkchen). Ist es aber lstig, da "Donau" bei allen Wortkombinationen fndig
wird, stellen Sie zumindest "Wort suchen" auf EIN.
                                   Der GME                                    20
________________________________________________________


                             Suchen...

Es  wird  ein  Suchbegriff  abgefragt.  Wurde  frher  bereits  ein  Suchbegriff
eingegeben, wird dieser angeboten (und mit Return oder Pfeil-Nach-Oben oder
-Unten  bernommen).  Er  kann  mit  allen  in  einer  Zeile  wirksamen  Tasten
(Backspace, Cursor, Delete) editiert werden. Mit  Esc(ape)  lschen  Sie  den
alten Suchbegriff und knnen einen neuen eingeben.

Schlieen Sie den Suchbegriff mit Return oder Pfeil-Nach-Unten ab, so wird
vorwrts gesucht. Um rckwrts zu suchen, schlieen Sie die  Eingabe  mit
Pfeil-Nach-Oben ab.

                            Tauschen...

Auf die Abfrage des Suchbegriffs erfolgt in gleicher Weise die Abfrage des
Wortes, gegen welches dieser getauscht werden soll. VORSICHT, wenn "Wort
suchen" und "Grossklein" ausgeschaltet sind!

Nach  der  Eingabe  eines  Such-  oder  Tauschbegriffes  erfolgt  eine  Abfrage
verschiedener  Optionen  (einmal  Suchen,  letztes  Vorkommen  oder  eine
bestimmte Anzahl von Malen suchen).

                             Pick-Wort

Entspricht --> "Suchen..." (s. o.), jedoch wird das Wort ab der Cursorposition
als Vorgabe prsentiert. Die Suche beginnt automatisch am Textanfang, man
findet also zunchst das erste Vorkommen des Wortes im Text.

                           Pick-Tauschen

Wie Pick-Wort, jedoch wird auch ein Tauschbegriff abgefragt.

                          Nochmal suchen

Der letzte Suchbegriff wird erneut gesucht (nchstes Vorkommen).
                                   Der GME                                    21
________________________________________________________


4.6 Das Editieren-Men









In diesem Men werden einige allgemeine Bearbeitungsweisen eingestellt. Dazu
kommen ein paar Befehle, die fr den GME eigentmlich sind. Dieser Editor
kann beliebig viele Texte im Speicher verwalten, zwischen denen man beliebig
hin- und herspringen und Textblcke tauschen kann. Er ist dabei nicht an eine
bestimmte  Anzahl  von  Fenstern  oder  Puffern  gebunden  -  die  Anzahl
beziehungsweise  der  Gesamtumfang  der  Texte  wird  lediglich  durch  den
verfgbaren  (freien)  Arbeitsspeicher  Ihres  Computers  beschrnkt.  Diese
Eigenschaft unterscheidet ihn von fast allen anderen Editoren, die entweder
nur so viele Texte editieren knnen, wie GEM-Fenster verfgbar sind, oder die
sonst eine willkrliche Beschrnkung aufweisen. Natrlich ist es richtig, da
man im Normalfall nicht 10, 20 oder 50 Texte gleichzeitig im Speicher braucht
- aber jede willkrliche Grenze kann sich als lstig erweisen.

                           berschreiben

Dieser Schalter bestimmt, ob der Editor im Einfge- oder berschreibmodus
arbeitet. Umschaltung auch mit der Insert-Taste.

                            Autoindent

Schaltet den halbautomatischen Einrckmodus um, dh. der Editor geht nach
einem Return unter den Anfang der vorigen Zeile (EIN) oder zurck zum linken
Bildschirmrand. Fr die Eingabe "strukturierter" Programmtexte bevorzugt man
den Autoindent-Modus.

                           Nchster Text

Die Anzeige wechselt auf den nchsten im Speicher befindlichen Text (falls
mehr als einer vorhanden ist). Wenn sich leere Puffer im Speicher befinden
(z.B.  durch  mehrere  -->  "Neu"-  Befehle,  siehe  Datei-Men),  knnen  auch
Leeranzeigen erfolgen. Die Texte sind immer zu einem "Ring" verkettet, das
heit, nach dem letzten Text fhrt dieser Befehl wieder auf den ersten. Gibt
es nur einen Text, so ist dieser selbst immer sein "nchster Text".
                                   Der GME                                    22
________________________________________________________


                            Hintergrund

Hat man mehrere Texte im Speicher, so ist das "Durchhangeln"  zu  einem
bestimmten Text recht lstig (siehe auch --> Men "Texte", das jedoch in der
Version 1.0 noch nicht existiert). Dann kann es vorteilhaft sein, sich jeweils
einen bestimmten Text auf einer  Taste  zu  merken,  so  da  man  zwischen
Vorder- und Hintergrundtext mit einem Tastendruck hin und herspringen kann.
Zum Umschalten dient eine im Men angezeigte  Funktions-Taste  (oder  das
Anklicken dieses Befehls).

Mit jeder Ausfhrung des Befehls tauschen die Texte ihre Pltze. Es knnen
sich jedoch mehrere Texte (TextA, TextB, TextC, TextD usw.) im Speicher
befinden. Auf irgendeine Weise mu man daher festlegen, zwischen welchen
beiden  Texten  diese  Schnellumschaltung  erfolgen  soll.  Dabei  gilt  folgende
einfache Regel: Der Text, der im Moment, in dem man den "Hintergrund"-
Befehl eingibt, zu sehen ist, wird in den Hintergrund bernommen. Der zuletzt
als "Hintergrund" bernommene Text gelangt zur Anzeige. Ist das nicht der
gewnschte Text,  sucht  man  diesen  einfach  durch  mehrfache  Eingabe  des
"Nchster Text"- Befehls. Erneute Eingabe des Hintergrund-Befehls fhrt dann
auf den vorigen Text zurck.

                          Block einrcken

Dies ist ein etwas ungewhnlicher Befehl. Er geht davon aus, da man zuvor
einen Block markiert hat (siehe  -->  Block-Men  oben).  Der  (noch  hervor~
gehobene) Block kann nun in einer tabellarischen Weise bearbeitet werden, dh.
jedes eingegebene oder gelschte Zeichen wirkt sich auf eine ganze Spalte
aus, die so lang ist wie der markierte Block. Jederzeit knnen Sie mit dem
Cursor  nach  rechts  oder  links  fahren.  Gelschte  Spalten  gehen  verloren.
Beendet wird diese Arbeitsweise mit dem --> "Beenden"-Befehl (Esc(ape)). Am
besten probieren Sie es einmal aus!
                                   Der GME                                    23
________________________________________________________


4.7 Das Programm-Men









Hier finden Sie die Befehle zusammengefat, mit denen der Editor Aktivitten
des  MM2-Programmiersystems  steuern  kann,  also  einen  Programmtext
bersetzen oder ein Make starten bzw. das fertige Programm anschlieend
laufen lassen.

                            Compilieren

Der Compiler startet. Er bersetzt den vom Editor gerade angezeigten Text
aus dem Arbeitsspeicher (der Text mu also nicht vorher gesichert sein, es
wird die im Speicher befindliche Version bersetzt). Wenn Sie mehrere Texte
im Editor geladen haben, knnen Sie diese nacheinander bersetzen, indem Sie
vorher mit dem --> "Nchster Text"- oder --> "Hintergrund"-Befehl (siehe
Men Editieren) den gewnschten Text angesprungen haben.

                               Datum

Zeigt das vom Betriebssystem vergebene Datum der gerade bearbeiteten Datei
an.  In  diesem  Zusammenhang  ist  interessant,  da  der  Editor  nach  dem
Compilieren einer Datei (aus dem Speicher) beim nachfolgenden (!) Speichern
der dazu gehrigen Textdatei deren Uhrzeit auf den Zeitpunkt der bersetzung
zurcksetzt. Anderenfalls wrde ein daraufhin aktiviertes Make (das sich am
Datums- und Uhrzeiteintrag von Text- und Codedateien orientiert) die Datei
nochmals bersetzen, was nicht notwendig wre.

                           Ende & Comp.

Heit eigentlich: "Ende und  Compilieren".  Das  heit,  der  Editor  wird  (nach
automatischem Speichern aller Quellen) verlassen und der Compiler "Offline"
gestartet.  Dies  kann  zum  Beispiel  erforderlich  sein,  wenn  der  verfgbare
Arbeitsspeicher nicht ausreicht, um Editor und Compiler gleichzeitig "resident"
zu halten. Oder auch dann, wenn man im Zusammenhang mit der bersetzung
den Editor verlassen will.
                                   Der GME                                    24
________________________________________________________


                           Ende & Ausf.

Wie  -->  "Ende  &  Comp.",  jedoch  mit  anschlieenden  Start  des  fertigen
Programms (falls keine Fehler aufgetreten sind).

                               Make

Sichert alle Dateien automatisch, verlt den Editor und startet das Make mit
der Default-Make-Datei (siehe Bedienung: Shell, Umgebungsinformationen).

                           Make & Ausf.

Wie --> "Make"; bei erfolgreicher bersetzung wird das  fertige  Programm
anschlieend gestartet.
                                   Der GME                                    25
________________________________________________________


4.8.1 Reine Tastaturbefehle

Einige wenige Befehle sind nur ber die Tastatur verfgbar - hauptschlich
wegen ihrer untergeordneten Wichtigkeit. So zum Beispiel das Lschen  von
Blockmarken ohne sonstige Wirkung. Im Abschnitt 5.1 erfahren Sie, wie Sie
die Tastenbelegungen nach Ihrem eigenen Geschmack ndern knnen.

                        Lsche Blockmarken

Hebt zuvor gesetzte Blockmarken auf, die Hervorhebung verschwindet wieder.
Standardmig auf ^KH.

                            Lsche Wort

Lscht vorwrts vom Cursor bis zur nchsten Wortgrenze. Eine Wortgrenze
definiert  sich  weitestgehend  nach  den  syntaktischen  Regeln  einer  hheren
Programmiersprache,  d.h.  Leerzeichen,  Kommata,  Semikolons,  Punkte  etc.
bilden Wortgrenzen. Standardmig auf ^T und auf sDelete.

                            Merke Zeile

Merkt sich die Zeile, in welcher der Cursor gerade steht, in einem besonderen
Speicher. Die Zeile kann durch --> "Zeile kopieren" oder --> "Zeile rckholen"
an eine andere Stelle oder in einen anderen Text kopiert werden. Home-Taste.

                           Lsche Zeile

Lscht und merkt sich die Zeile, in welcher der Cursor gerade steht, in einem
besonderen  Speicher.  Die  Zeile  kann  durch  -->  "Zeile  kopieren"  oder  -->
"Zeile rckholen" an eine andere Stelle oder in einen anderen Text kopiert
werden. ^Y und sClr.

                         Zeile wie vorher

Dieser  Befehl  wirkt  nur,  solange  man  eine  Zeile,  in  der  Vernderungen
vorgenommen wurden, nicht verlassen oder einen Befehl eingegeben hat. Unter
diesen Voraussetzungen wird der alte Zustand der Zeile wieder hergestellt.
Undo-Taste.

                          Zeile kopieren

Fgt bei der aktuellen Cursorposition eine vorher mit --> "Merke Zeile" oder
"Lsche Zeile" gemerkte Zeile ein. sUndo.
                                   Der GME                                    26
________________________________________________________


                          Zeile rckholen

Holt eine Zeile aus dem "Zeilenstack" und fgt sie bei der aktuellen Cursor~
position ein. Der Zeilenstack wird durch den wiederholt ausgefhrten Befehl
-->  "Lsche  Zeile"  oder  -->  Wirkung.  einfach  Undo,  wenn  Undo  zum
zweitenmal  gedrckt  wird  oder  vorher  die  aktuelle  Zeile  nicht  verndert
worden war. D.h. Undo bewirkt immer zuerst ein "Zeile wiederherstellen" und
dann ein "Zeile rckholen". Wenn der Zeilenstack leer ist, hat die Taste keine
Wirkung.


4.8.2 Cursor-Befehle

Die verschiedenen Cursorbefehle erscheinen nicht in einem eigenen Men, da
sie sehr leicht merkbar ber die dafr vorgesehen Pfeiltasten in Kombination
mit Shift und Control sowie teilweise auch mit der Maus ausfhrbar sind.

Alle Cursorbewegungen folgen  dem  Prinzip  der  "Dramatisierung".  Damit  ist
folgendes  gemeint:  Die  Taste  Pfeil-nach-links  bewegt  den  Cursor  um  ein
Zeichen  nach  links.  Zusammen  mit  der  Shift-  Taste  wird  der  Befehl
"dramatischer" - der Cursor springt um ein  Wort  nach  links.  Mit  Control
schlielich springt er an den Anfang der Zeile.

Pfeil  nach  oben  bewirkt  ensprechend  den  Sprung  um  eine  Zeile,  einen
Bildschirm nach oben oder an den Anfang der Datei.

                  Zeichen nach links, nach rechts

Links- oder Rechtspfeil, auch ^S oder ^D.

                      Wort links, Wort rechts

Cursor springt um ein Wort nach links, Cursor springt um ein Wort nach
rechts. Beide Befehle knnen mit Shift und der Links- bzw. Rechtspfeiltaste
ausgelst werden, oder mit den Wordstar- Kombinationen ^A, ^F.

                    Zeilenanfang und Zeilenende

Cursor springt zum Anfang oder Ende der Zeile. Befindet er sich schon dort,
geht er zum Ende der vorigen bzw. Anfang der nchsten Zeile. Auslsung auch
mit Control-Links oder Rechtspfeil und mit ^QS, ^QD.

                  Seite nach oben und nach unten

Mit Shift-Pfeil-nach-oben oder nach-unten auslsbar sowie ^R und ^C.
                                   Der GME                                    27
________________________________________________________


                      Zum Textanfang/Textende

Mit Control-Pfeil-nach-oben oder nach-unten auslsbar sowie ^QR, ^QC.

                   Hochrollen bzw. Runterrollen

Will man erreichen, da beim Scrollen der Cursor in seiner alten Textzeile
bleibt (und entsprechend mit nach oben oder unten rckt) klickt man in die
Statuszeile oder ganz nahe an den unteren Bildschirmrand. Eine entsprechende
Wirkung hat es, wenn man ganz nah an den rechten oder linken Bildschirmrand
klickt (oder wenn der Cursor diese berschreitet). WS-Kombinationen (WS:
Word-Star) sind ^W und ^Z.
                                   Der GME                                    28
________________________________________________________


5.1 Tastatur konfigurieren

Die Tastatur des GME  kann,  was  die  Befehle  betrifft,  beliebig  konfiguriert
werden.  Dazu  mu  der  Quelltext  des  Moduls  GMEConfig  ("GMECONFI.I")
verndert und neu compiliert werden.

Am Ende des Moduls finden Sie den Prozeduraufruf:

     InitTastatur (Tastatur);

Diese Prozedur richtet die sogenannten Tastaturebenen ein. Eine Tastaturebene
ist zum Beispiel die ganze Tastatur, eine zweite die ganze Tastatur mit Shift,
eine dritte die ganze Tastatur mit Control usw. Auch die Kombinationen der
Statustasten, wie Shift+Control, Shift+Alternate, bilden eigene Ebenen. Durch
Ausnutzung  aller  Kombinationen  wre  es  mglich,  alle  Tasten  16fach  zu
belegen, das wird jedoch nicht ausgenutzt.

PROCEDURE InitTastatur (VAR T: eineTastatur);
VAR     index:  CARDINAL;
BEGIN
  FOR index := 0 TO cTastaturEbenen DO
    NewTastenebene (T  index );
    InitTastenebene (CAST (einStatus, index), T  index );
    InitFunktionstasten (CAST (einStatus, index), T  index );
  END (* FOR *);
  InitControl (T  CAST (CARDINAL, einStatus  Control ) );
  InitAlternate (T  CAST (CARDINAL, einStatus  Alternate ) );
END InitTastatur;

Die Prozedur ruft ihrerseits "NewTastenebene"  (fr  alle  mglichen  Ebenen)
auf.    Fr    unsere    Zwecke    interessant    sind    InitTastenebene    und
InitFunktionstasten   sowie   die   separaten   Aufrufe   von   InitControl   und
InitAlternate (auerhalb der FOR- Schleife).

Um die Arbeitsweise der Tastaturabfrage im GME zu verstehen, mssen wir
uns  kurz  den  Datentyp  "einTasteneintrag"  ansehen,  der  u.  a.  von  der
exportierten Universalprozedur "LiesTaste" zurckgegeben wird.
                                   Der GME                                    29
________________________________________________________


    einTasteneintrag = RECORD
                          CASE TT: einTastenTyp OF
                            keineTaste:    |
                            Zeichen:       zch:   CHAR |
                            Befehl:        bef:   einBefehl |
                            String:        str:   einLinePointer |
                            Makro:        mak:  einMakroPointer |
                            Mausklick:     x, y:  CARDINAL |
                            Tastenebene:  teb:   einTastaturPointer |
                          END (* CASE *);
                        END (* einTasteneintrag *);


Dieser Varianten-Record teilt zunchst jedem Tasteneintrag einen Typ zu -
beispielsweise  "Zeichen".  Wichtig  fr  uns  sind  die  Typen  "Befehl"  und
"Tastenebene". Das Legen von Strings auf Tasten (damit knnte man z. B. auf
Shift-Alternate-M das Wort MODULE etc. legen) ist im GME zur Zeit noch
nicht implementiert, auch keine Makros - es handelt sich also nur um Voraus~
deklarationen fr knftige Erweiterungen.

Eine Tastenebene ist eine Liste (Array) von lauter  Tasteneintrgen.  Da  ein
Eintrag wieder ein Pointer auf eine Tastenebene sein kann, lassen sich die
Wordstar-   oder   Turbo-(MS-DOS)-Editor-Befehlsfolgen   wie   ^KB,   ^KK
(Blockmarken setzen) usw. damit realisieren.

Die ASCII-Zeichen ("A", "B", "a", "b" usw.) werden beim GME nicht ber die
eigene Tastatur-Tabelle des Editors geholt, sondern vom TOS bernommen.
Das hat den Vorteil, da die nationalen Zeichenstze mit ihren oft vertauschten
Sonderzeichen und zum  Teil  auch  Buchstaben  automatisch  richtig  angepat
werden.

Der tiefere Grund, warum berhaupt eine eigene Tastaturtabelle benutzt wird,
liegt u. a. darin, da sich sonst die Cursortasten nicht symmetrisch mit Shift
und  Control  auswerten  lassen,  da  TOS  hier  leider  ganz  unsystematisch
vorgeht.

Die Tasten mit einer durch ihre Aufschrift oder ein Symbol (Pfeil) gekenn~
zeichneten Funktion, einschlielich F1 bis F10, werden von "InitFunktionstasten"
belegt.

Alle Tasten werden im GME mit  einem  Aufzhlungstyp  (einKey)  bezeichnet.
Zusammen  mit  der  Ebene,  die  als  Index  (0..15)  oder  als  Menge  ( Shift,
Control ,  Alternate  usw.) bezeichnet werden kann, wird ein Tastenanschlag
vollkommen eindeutig bezeichnet. Es mu nun nur jedem solchen Tasteneintrag
ein bestimmter Rckgabewert zugeordnet werden.
                                   Der GME                                    30
________________________________________________________


Man kann beim GME einen Befehl oft auf drei oder vier verschiedene Weisen
(durch eine Funktionstaste, eine Controltastenfolge, einen Mausklick oder durch
Anklicken eines Eintrags in der Menleiste) eingeben. Der Editor selbst merkt
den Unterschied nicht - die Befehle werden "normiert" an ihn zurckgegeben;
dazu   dient   der   Aufzhlungstyp   "einBefehl"(siehe   auch   die   Prozedur
InitMenuTabelle,  die  die  Verknpfung  zwischen  GEM-Meneintrgen  und
GME-Befehlen herstellt).


5.1.1 Funktionstasten

Die lokalen Prozeduren "SetzF" (alle Funktionstasten F1 bis F10) und SetzC
(alle  Tasten  von  Esc  bis  Cursor-Rechtspfeil  -  genaue  Zuordnung  siehe
Definition   im   Programmtext)   setzen   in   einer   an   "InitFunktionstasten"
bergebenen Tastaturebene die betreffenden Tasten.

  IF (keyStatus = einStatus   )
  OR (keyStatus = einStatus  Caps ) THEN
    SetzF (SuchString, StriTausch, PickWort, WeitSuch, nothing,
           Paste, zurAMark, zurEMark, zur1Mark, zur2Mark);
    SetzC (Quit, tabulator, DelLChar, DelRChar, return,
           help, RestoreCurrentLine,
           insert, cursup, PopCopyLine,
           cursleft, cursdown, cursright);
  ELSIF (keyStatus = einStatus  Shift )
  OR (keyStatus = einStatus  Shift, Caps ) THEN
    SetzF (SuchWort, WortTausch, PickTausch, zuNrZeile, QueryError,
           CopyToClipboard, setAMark, setEMark, set1Mark, set2Mark);
    SetzC (QuitCompile, backtab, DelLWort, DelRWort, return,
           EditBlock, CopyLastBufferLine,
           indent, Seitup, PopDeleteLine,
           Wortleft, Seitdown, Wortrigt);

Diese  (InitFunktionsTasten  entnommene)   Anweisungsfolge   bestimmt   zum
Beispiel, da auf der Taste F1 ohne Shift, aber mit oder ohne CapsLock, der
Befehl "SuchString" sitzt, auf F2 StriTausch usw. Mit Shift sind es dagegen
die Befehle "SuchWort" und "WortTausch". Leicht zu erkennen ist auch die
Belegung der Cursortasten ohne und mit Shift. Um die Belegung zu ndern,
braucht man nur die bei den Aufrufen eingesetzten Befehlsnamen zu ndern
(Beachten Sie, da eine Belegung der  Cursortasten  mit  Alternate-Kombina~
tionen wirkungslos ist, da der Tastaturprozessor diese bereits in simulierte
Mausbewegungen umwandelt).
                                   Der GME                                    31
________________________________________________________


5.1.2 Alternate- und Controltasten

Sehr einfach zu verstehen ist die Belegung der Alternate-Tastenkombinationen:

PROCEDURE InitAlternate (T: einTastaturPointer);
BEGIN
  SetControl (T, Ta,  QuitCompileRun); (* Speichern und RETURN 4 *)
  SetControl (T, Tc,  QuitCompile); (* = Compilieren aus d. Editor! *)
  SetControl (T, Td,  Compile); (* Im Speicher compilieren *)
  SetControl (T, Tm,  Make); (* RETURN 3 *)
  SetControl (T, Tr,  MakeExec); (* Quit Return 4 *)
  SetControl (T, Tt,  ZeitUndDatum);
  SetControl (T, Tx,  ExitEditor);
END InitAlternate;


Dies wird zusammen mit dem Aufruf verstndlich:

  InitAlternate (T  CAST (CARDINAL, einStatus  Alternate ) );

Der Prozedur wird die Tastenebene "Alternate" bergeben. Es sind nur einige
Alternate-Kombinationen  belegt,  Sie  knnten  in  die  Prozedur  noch  weitere
eintragen, etwa auch, um die Tasten F1 bis F10 mit Alternate zu belegen, falls
Sie das wnschen.

Die Controltasten-Belegungen sind etwas komplizierter.

Sehen Sie sich die relativ lange Prozedur InitControl  im  Quellcode  an.  Sie
enthlt fr jede Taste einen Aufruf, die meisten sind SetControl-Aufrufe (wie
in InitAlternate), die direkt einen Befehl auf die Taste legen - zum Beispiel
Cursleft auf ^S:

  SetControl (T, Ts,  cursleft);

Bei der Taste K (wie auch bei Q und O) finden wir einen anderen Prozedur~
aufruf, der eine ganze Tastenebene, also eine Folge von zwei nacheinander zu
bettigenden Tasten, einrichtet. Stellvertretend ist hier nur der  Anfang  von
"CtrlKEbene" wiedergegeben:

PROCEDURE CtrlKEbene (t: einTastaturPointer; k: einKey);
BEGIN
  NewTastenebene (t^  k .teb); t^  k .TT := Tastenebene;
  InitTastenebene (einStatus   , t^  k .teb);
  WITH t^  k  DO
    SetControl (teb, T1, set1Mark);
    SetControl (teb, T2, set2Mark);
    SetControl (teb, T3, set3Mark);
                                   Der GME                                    32
________________________________________________________


Die ersten drei Anweisungen initialisieren eine neue  Tastenebene  -  das  ist
wichtig,  falls  Sie  selbst  Prozeduren  schreiben  wollen,  um  beispielsweise
abweichend auf ^M eine eigene Ebene einzurichten. Der zweite Parameter der
Prozedur ist die Taste, auf der die Ebene eingerichtet werden soll. Unter der
WITH-Anweisung folgen dann die Befehlseintrge fr die jeweils als zweite zu
bettigende Taste. Also ^K1 um die Marke 1 zu setzen.


5.1.3 Resourcefile - Menleiste

Wenn  Sie  das  Resource-File  verndern,  mssen  Sie  die  vom  Resource-
Construction-Programm ausgegebenen Konstanten in den Anfang des Moduls
kopieren  (unter  dem  entsprechenden  Kommentar)  und  eventuell  auch  die
Prozedur  InitMenuTabelle  ndern.  Beachten  Sie,  da  eventuell  die  darber
stehende Konstante "cMaxMenu" fr die Anzahl der  Men-Befehle  gendert
werden mu. So knnen Sie  sich  auch  die  GEM-Menleiste  und  damit  die
Bedienung des Editors ber diese nach Belieben selbst festlegen
                                   Der GME                                    33
________________________________________________________


5.2 Editor mit/ohne GME.GME konfigurieren

Der  GME  whlt  beim  erstmaligen  Start  eine  bestimmte  Voreinstellung,
beispielsweise, ob er im berschreib- oder Einfgemodus arbeitet, ob wort-
oder musterweise gesucht wird etc. Diese Einstellungen nimmt die Prozedur
"InitConfig" vor, die sich ebenfalls im Modul  GMEConfig  befindet.  In  dieser
Prozedur finden Sie zwei Beispiele fr die Initialisierung von Betriebsweisen
(eines auskommentiert):

(* Beispiel 1: Automatisch einrcken ein, BAK-Datei erzeigen ein *)
Modus := Moden  ControlZeichen, AutoIndent, TabFiltern, MakeBAK ;

(* Beispiel 2: Auerdem Konfiguration laden u. zu Texten speichern: *)
Modus := Moden  ControlZeichen, AutoIndent, TabFiltern, MakeBAK,
                   KonfigSpeichern ;

Sie  knnen  beliebige  der  Flag-Konstanten  aus  dem  Aufzhlungstyp  "Mode"
verwenden. Die restlichen Zuweisungen in der Prozedur sollten tunlichst nicht
verndert werden.

Die Arbeitsweise ist so: Zunchst wird ein zentraler Puffer angelegt, der die
Standardkonfiguration  enthlt  (ConfigInit  ist  FALSE).  Wenn  (anschlieend)
ConfigInit TRUE ist, werden spter angelegte Textpuffer durch Kopieren der
Werte aus dem ConfigPuffer initialisiert.

Wenn  im  ConfigPuffer,  also  im  oberen  Teil  der  Prozedur,  das  Flag
"KonfigSpeichern" eingefgt wurde, so ldt der Editor jedoch beim Starten die
Datei GME.GME, die individuelle Voreinstellungen enthlt, die sich auch nach
Verndern abspeichern lassen (--> 4.2 Konfiguration sichern). Auerdem wird
dann zu jeder Textdatei eine GME-Datei mit diesem Record gespeichert, der
zustzlich auch die aktuelle Postion des Cursors und der Suchmarken enthlt.
Diese Einstellung kann whrend der Sitzung mit dem Editor auch individuell
verndert werden.
                                   Der GME                                    34
________________________________________________________


Johannes Leckebusch

Besonderer  Dank  an  Hartwig  Constien  und  Peter  Hellinger,  meine  beiden
"Weggefhrten" whrend der Entwicklung des G2E, von dem der GME "nur"
eine Untermenge (mit eigenen Erweiterungen) ist. Unvergesslich wird uns die
Grillparty bleiben, auf der wir uns, nachdem wir uns seit Monaten bzw. Jahren
ber die "MAUS"-Mailbox kannten, zum erstenmal von Angesicht zu Angesicht
sahen.

Ohne diese und manche andere Freunde wre der Editor nie geworden, was er
heute ist. Erwhnen mu ich auch Wolfgang Huber, der mich Jahre zuvor -
vergeblich - warnte: "Nun fang blo nicht an, einen eigenen Editor zu program~
mieren"  -  genau  das  hat  mich  nmlich  die  folgenden  Jahre  berwiegend
beschftigt und von anderen, vielleicht wichtigeren (?) Ttigkeiten abgehalten.
Schlielich danke ich den Lesern gewisser Zeitschriften, die mir all die Jahre
die  Treue  gehalten  haben  und  die  sich  nach  so  langer  Zeit  immer  noch
sporadisch nach einer alten oder neuen Fassung des "TLGE" erkundigen. Ihnen
sei an dieser Stelle versichert: Der TLGE lebt - wenn er jetzt auch G2E heit.
Nheres wird sehr bald zu hren oder zu lesen sein!

Schlielich danke ich Thomas Tempelmann alias "TT" fr seinen Auftrag, der
zur ersten "kommerziellen" Version der Golem-Editor-Familie gefhrt hat. Und
Arnd Beiner und Julian Reschke fr ihre  nimmermde  Kritik  an  einem  so
penetranten GEM-Ignoranten, wie ich einer bin, und wem noch alles? Wen ich
vergessen habe, der fhle sich ebenfalls bedankt!
