Dokumentation für WRITE 3.848 vom 16 August 1994
************************************************

Einige wichtige Bemerkungen
***************************

   - WRITE läuft nur unter OS 2.0 oder höher !!!

   - Lesen sie bitte ausführlich die Anleitung bevor sie WRITE das erste
     Mal benutzen.Vor allen Dingen die Kapitel Copyright,Registrierung
     und Installation.

Autor
*****

Geld,Kritik,Vorschläge,Lob und Tadel in Deutsch oder English an:

Postadresse
               Tim Teulings
               An der Dorndelle 16
               59192 Bergkamen
               DEUTSCHLAND

EMailaddresse
     MausNet :

          Tim Teulings @ UN

     InterNet :

          rael@edge.ping.de

Bankverbindung
          Sparkasse Berkamen - Bönen
          BLZ     : 410 518 45
          KontoNr.: 16186496
          Tim Teulings

Danksagungen
************

                                Danke...

Chris Gray
     Für den grandiosen Draco-Compiler mit dem WRITE bis zur Version 2.50
     geschrieben wurde.

A + L
     Für ihren Oberon-Compiler, der das Schreiben von WRITE noch
     einfacher machte.

Lars Hanke
     Für Tips, Ktitik und Beta-Testing.

Thomas Lottermoser
     Für Tips, Kritik und die Literatur.

Thomas Stuff
     Für Tips, Ktitik und Beta-Testing.

Andreas Schulz
     Für den sagenumwobenden DRACO-Club Deutschland.

COMMODORE
     Für diesen schnuckeligen, kleinen Rechner, mit dem man Tag und
     Nacht viel Spaß haben kann. (Hehe...)

Einleitung
**********

Ich besitze den AMIGA nun seit mehreren Jahren.  In dieser Zeit bin ich
mit vielen Texteditoren in Berührung gekommen.  Anfangs das NOTEPAD und
ED, später mit verschieden Version von EMACS sowie PD-Editoren wie DME,
AZ, DED und JED als auch einige komerziellen Produkte.  Mit allen konnte
man Texte schreiben, doch auch alle ließen endweder bei der
Geschwindigkeit oder beim Bediehnungskomfort zu wünschen übrig.  So
erschütterten einige durch eine unerträgliche Scrollgeschwindigkeit,
andere erschwerten einem die Arbeit durch unerträgliche und unmögliche
Tastaturbelegungen und - kombinationen.  Wieder andere erschlugen mich
durch viele, für einen Texteditor unnötige Funktionen, die zu Lasten
der Größe des Editors gingen, oder glänzten durch unzureichende
Editiermöglichkeiten.  So beschloß ich alle Vorteile in einem Programm
zu vereinen (was sonst !) und einen Editor zu schreiben, der allen
[3mmeinen[0m Anforderungen entsprach.

   * WRITE als reiner Texteditor ist dazu gedacht Texte oder Programme zu
     schreiben.

   * Er besitzt alle gängigen Blockoperationen (Cut, Copy, Paste...),
     sowie umfangreiche Funktionen zum Suchen und Ersetzen von Wörtern
     etc...

   * Seine Speicherverwaltung ist völlig dynamisch.  Es können somit
     beliebig viele Textfenster geöffnet werden, der Text kann, ebenso
     wie jede Zeile beliebig lang sein.  Einzige Begrenzung ist der
     vorhandene Speicherplatz.

   * WRITE wird voll von Intuition unterstützt.  D.h. alle Funktionen
     können über Menüs aufgerufen werden, der Cursor kann mit der Maus
     gesetzt, Blöcke mit ihr markiert werden.

   * Menüs und Tastatur können über eine Textdatei beliebig
     konfiguriert werden.  Auch ist WRITE darüber hinaus weiter
     programmierbar.  WRITE kann somit selbst in Details den
     Erfordernissen und Wünschen des Benutzers vollständig angepaßt
     werden.

   * WRITE besitzt eine Undo-Funktion, mit der eine beliebige,
     voreinstellbare Zahl von Textveränderungen wieder rückgängig
     gemacht werden kann.

   * WRITE beherrscht das automatische generieren von Backups. Dabei kann
     einfach eine Endung an die Datei angehangen, die Datei unbenannt
     oder in ein angegebenes Verzeichnis unter einen festen Namen
     abgespeichert werden.

   * Es können unterschiedliche Konfigurationen [3mgleichzeitig[0m benutzt
     werden.  So kann man in einem Fenster mit einer TeX-Konfiguration
     arbeiten, während gleichzeitig in einem anderen Fenster typische
     Einstellungen zur Programmierung in C verwendet werden. Gleichzeitig
     kann man mit der [1mMAILER.CONFIG[0m eine Mail mit Wordwrap etc.
     schreiben.

   * Jede Konfiguration kann auf einem eigenen Screen mit einem eigenen
     Font in den eigenen Farben arbeiten.  WRITE ist in allen seinen
     Fenstern und Requestern völlig auflösungs- und fontsensitiv.  Es
     wird immer der eingestellte DefaultFont eines Screen verwendet.
     Dabei kann es sich sogar um einen Proportionalfont handeln.

   * WRITE kann Textefalten. Verschachtelte Textfalten sind möglich.

   * WRITE läuft unter OS 2.0, OS 2.1 und OS 3.0

   * WRITE unterstützt daher viele Features von OS 2.0, wie z.B.
     AppWindows, -menus und -icons, sowie auch einige Features von 3.0.

   * WRITE unterstützt die [1mlocale.library[0m ab OS 2.1 und ist dadurch
     fast völlig lokalisierbar.

   * WRITE besitzt eine komfortable AREXX-Schnittstelle und kann so
     beliebig weiter ausgebaut werden. Über diese Schnittstelle kann man
     voll auf die über 150 Funktionen und mehr als 80 Variablen
     zugreifen.

   * WRITE beinhaltet einige konfortable AREXX-Scripts für SAS C, DFA,
     und den OBERON-Compiler der Firma A+L AG.  Desweiteren liegen
     Scripts für umfangreichere Textverarbeitungoperationen sowie einige
     Beispielscripts für komplexere Funktionen bei.

   * WRITE besticht in vielen Funktionen durch seine Schnelligkeit.

   * WRITE ist völlig über eine eingebaute GUI vollständig
     konfigurierbar.  Wahlweise kann aber auch direkt in dem
     Konfigurationsfile editiert werden.

Copyright
*********

Demoversion
===========

   * Die Demoversion von WRITE ist Shareware.  Sie darf unter folgenden
     Bedingungen benutzt und weitergereicht werden:

   * Eine Diskette, die dieses Demo von WRITE in irgendeiner Form
     beinhaltet, darf [3mnicht[0m für mehr als 5 DM oder deren Gegenwert in
     einer ausländischen Währung kopiert, verkauft, weitergereicht
     werden.

   * Fred Fish ist es ausdrücklich erlaubt diese Demoversion in seine
     Sammlung aufzunehmen.

   * Ebenso ist es erlaubt die Demoversion auf Aminet zu packen.
     Desweiteren darf sie auch auf einer AminetCD erscheinen.

   * Das Paket darf nur vollständig weitergereicht werden !

   * Dem Benutzer wird es gestattet, WRITE ein bis zwei Monate zu
     benutzen, dann muß er sich registrieren lassen oder den Gebrauch
     von WRITE einstellen.

Vollversion
===========

   * Diese Version von WRITE fällt ebenfalls unter dem Begriff Shareware.
     Es gelten jedoch folgende Einschränkungen

   * WRITE darf nicht...

        ... in irgendeiner Form weitergereicht werden.

        ... von jemand anders als mir persönlich verkauft oder
          vertrieben werden.

   * Eine vollständige Version ist bei mir unter der oben genannten
     Adresse für 30DM zu erhalten.

   * Alle Limitierungen in der Demoversion sind in der vollständigen
     Version aufgehoben.

   * Jeder, der eine voll funktionsfähige Version von WRITE mehr als
     [3meinmal[0m benutzt ohne sie offiziell gekauft zu haben, wird
     aufgefordert, ja sollte sich von seinem Gewissen gezwungen fühlen,
     diese nachträglich zu erwerben, da in WRITE mittlerweile mehr als
     [3mvier[0m Jahre Programierarbeit stecken !

   * Besitzer der vollständigen Version werden über Updates informiert
     und können diese für ein weiteres Entgeld erwerben.

   * Ich (als der Autor von WRITE) verpflichte mich [3mgravierende[0m Mängel
     zu beheben.

   * WRITE darf nur auf einen einzigen Rechner installiert sein.  Er darf
     z.B. also nicht in Netzwerken oder auf Mehrplatzsystem benutzt
     werden. Sollte dies jedoch erforderlich sein, so bitte ich um
     Rücksprache.

Ich möchte hier außerdem ausdrücklich bemerken, daß ich nicht
verpflichtet bin an WRITE weiterzuarbeiten.  Ich kann jederzeit Teile des
Editors ändern, rauschmeißen, neues einfügen.  Das Format des
Konfigurationsfiles kann sich jedezeit ändern.  Kompatibilität zu
älteren Versionen kann somit auch auf Grund der Leistungsoptimierung
nicht immer gewährleistet werden.  Ich kann jeder Zeit Preise und
Kaufbedingungen ändern.

Das heißt natürlich nicht, daß ich mich nicht den Wünschen der User
beuge.  Einige Teile von WRITE wie z.B. die Undofunktion und Folds
währen ohne die Wünsche meiner Betatester nicht implementiert worden.
Dies heißt eher, daß ich, um den Editor zu verbessern, schlechtere
onzepte etc. bereit bin herauszuschmeißen.

Ich mache darauf aufmerksam, daß die Programmiererei nur eines meiner
Hobbies ist und ich auch noch nebenbei studiere.  Sollte also nicht
sofort am nächsten Tag WRITE in der Post liegen, so gilt der klassische
Spruch: [3mKEINE PANIK !!![0m.  Einen bis eineinhalb Monate Bearbeitungszeit
nehme ich mir in [3mAusnahmefällen[0m schon heraus.  Möglicherweise
programmiere ich auch gerade an einer neuen Version mit doppelt so vielen
Features... ?

Schließlich bin ich nicht in der Lage nach jedem Bugfix allen Besitzer
eine neue Version zuzuschicken (ich habe einfach nicht das Geld !).
Sollte es jedoch bei einzelnen Personen zu gravierenden, unumgehbaren
Fehlern in hochwichtigen Funktionen kommen, so sollte sich immer etwas
machen lassen.  Spätestens dann, wenn man mir mit der ausführlichen
Fehlerbeschreibung einen Rückantwortbrief beilegt.

Registierte Besitzer erhalten einen Keyfile, mit dem sie in der Lage sind
jede neu herausgekommene Version sofort ohne weitere Umstände zu
benutzen.  Über größere Updates weren alle registrierten Benutzer
postalisch/EMail benachrichtigt. Ein Update kann man auch direkt von mir
gegen eine Gebühr von 5DM bzw. 10DM für alle Länder außerhalb Europas
erhalten.

Die Zeit die ich in WRITE investiere, sowie die Höhe der
Registrierungsgebühr hängen entscheidend von der Zahl der
Registrierungen ab. Also ...  Je mehr sich registrieren lassen ...

Allgemein
=========

   * Ich kann [3mkeine[0m Haftung für jegliche Schäden, die direkt oder
     indirekt durch WRITE enststehen, übernehmen.  So bin ich z.B. nicht
     für versehendlich gelöschte oder durch Absturz verlorengegangende
     wichtige Dokumente, noch für qualmende Hardware, defekte Software,
     verwirrte Geister, gescheiterten Ehen etc., die irgendwie berechtigt
     oder unberechtigt mit WRITE in Verbindung gebracht werden können,
     verantwortlich zu machen.  WRITE ist gut aber nicht perfekt. ( noch
     nicht ! )

   * Jegliche Änderungen an Teilen dieses Paketes (Docs...) sind
     [3mverboten[0m !

   * Das widerrechtliche Benutzen (klauen) von Teilen dieses Paketes ist
     ebenfalls [3mverboten[0m !

   * Es ist verboten WRITE zu dissassemblieren, decodieren,
     decompilieren...

   * Der Käufer akzeptiert mit der Benutzung von WRITE obige Konditionen.

   * Jeder, der gegen diese Bedingungen verstößt, sollte sich bewust
     sein, daß damit gegebenenfalls eine strafbare Handlung begeht,
     gegen die ich entsprechend vorgehen werde. Speziell das Vertreiben
     der Vollversion von WRITE als Raubkopie fällt unter diesen Punkt.

Registrierung
*************

Wie bekomme ich den nun die Vollversion von WRITE ?

  1. Sie schicken mir offiziell eine Bestellung per Post oder EMail mit
     ungefähr folgenden Wortlaut

     "Hiermit bestelle ich die neuste Vollversion von WRITE. Ich
     akzeptiere die in der Anleitung unter den Punkten Copyright und
     Registrierung genannten Kaufbedingungen und Hinweise."

     Fügen sie dem Brief auf jeden Fall ihre komplette Adresse, wenn
     möglich auch ihre EMailadresse und ihre Telephonnummer bei.  Sollte
     es zu Rückfragen kommen, ist es sicherlich im ihren Sinne, wenn ich
     sie so schnell wie möglich erreiche.

     Geben sie an, wie viele Versionen sie von WRITE haben wollen.

     Geben sie an, für welchen Prozessor die Vollversion kompiliert
     werden soll.  Momentan habe ich die Möglichkeit Code für den 68000
     aber auch für 68020 und 68030 zu erzeugen.

     Geben sie an, ob sie WRITE sofort bekommen wollen, oder noch
     gegebenenfalls auf eine neue Version warten wollen.

  2. Lassen sie mir das Geld zukommen. Sie können mir das Geld in Form
     von Bargeld oder auch als Scheck zukommen lassen. Auch eine
     Überweisung auf das unter Autor angegebene Konto sowie eine
     postalische Zustellung sind möglich.  Naturalien nehme ich nicht
     an. Im Einzelfall läßt sich aber auch über eine Begleichung durch
     ein eigenes, sharewarebehaftetes Profukt reden.

     Für Versendung auserhalb Europas bitte ich sie, weitere 5DM zu
     überweisen !

     Stellen sie auf jeden Fall sicher das ich mit dem Geld auch ihren
     Namen und Addresse erhalte, damit ich ihnen auch WRITE zustellen
     kann.

  3. Warten sie darauf, daß der Postbote ihnen WRITE in Haus bringt.

  4. Klatschen sie in die Hände, freuen sie sich und werden sie sich
     bewußt, daß sie einen weiteren, entscheidenen Schritt in ihrem
     Leben getan haben.

  5. Ich möchte noch einmal darauf hinweisen, daß wenn sie über einen
     Netzanschluß (InterNet,Fido,Zerberus,Maus etc.) mir ihre Addresse
     unbedingt mitteilen sollten. Dies ermöglicht es mir ihnen Updates
     ggf.  zuzuschicken, sie um ihre Meinenung zu Fragen, ihnen bei
     Problemen zu Helfen etc.


Installation
************

Folgende Sachen sind unbedingt zu beachten:

   * Auf ihren System muß OS 2.0 oder höher installiert sein ! Einige
     (unwesendliche) Features lassen erst ab 3.0 nutzen.

   * Folgende Libraries sollten sich im LIBS:-Verzeichnis befinden.  Sie
     sind Bestandteil des Betriebssystems.

    [1masl.library[0m
    [1mdiskfont.library[0m
    [1mcommodities.library[0m
    [1miffparse.library[0m          (optional)
     optional für REXX:

    [1mrexxsyslib.library[0m
    [1mrexxsupport.library[0m
   * Es sollte genügend Speicher vorhanden sein !  Obwohl WRITE
     speichersparsam programmiert ist, braucht er doch einige 100KByte an
     Speicher. Doch ist es möglich durch Verzicht auf ein weinig Komfort
     den Speicherbedarf zu verinngern.

   * WRITE braucht recht viel Stack (ca. 20000 Bytes).  Sollte dieser
     nicht vorhanden sein, setzt WRITE ihn selbst auf 30000 Bytes herauf.

   * Auf der Diskette, die sie bekommen haben, sollte sich ein
     Installer-Skript für den Installer, den sie mit ihren
     Betriebssystemdisketten bekommen haben, befinden.  Alles was sie
     also im Normalfall zu tun haben, ist mit einem Doppelklick auf das
     entsprechende Icon das automatische Installationsprogramm zu starten
     und die Fragen ihren Wünschen entsprechend zu beantworten.

     Wollen sie dennoch WRITE manuell installieren, sollten sie wie folgt
     vorgehen.

       1. Einige Dateien auf der Diskette sind mit [1mlha[0m gepackt und
          müssen gegebenenfalls entpackt werden. Sollten sie eine Version
          von [1mLha[0m besitzen, benutzen sie das Programm im
          [1mc[0m-Verzeichnis.

       2. Der(Die) Konfigurationsfile(s) sollte(n) auf folgende Weise
          installiert werden:

            1. Schaffen sie auf ihrer Platte ein neues Verzeichnis mit
               beliebigem Namen.

            2. Kopieren sie alle Konfigurationsdateien dort hinein.

            3. In der Umgebungsvariable [1mWRITE.CONFIG[0m des Betriebsystems
               sollte der [3mvollständige[0m Pfad dieses Verzeichnisses
               stehen.  Dies kann dadurch erreicht werden,...

                  ... daß man diese mit dem Befehl [1mSetEnv[0m ( oder
                    [1mSet[0m für eine COMMODORE-SHELL ) manuell nach
                    jedem Bootvorgang setzt.

                  ... daß man einen diese Befehle in seine
                    [1mstartup-sequence[0m oder noch besser in die
                    [1muser-startup[0m einfügt.

                  ... daß man nach Setzen dieser Variable den File
                    [1mWRITE.CONFIG[0m aus dem [1mENV:[0m-Verzeichniss ins
                    [1mENVARC:[0m-Verzeichnis kopiert, so daß die
                    Umgebungsvariable automatisch nach jedem Boot-Vorgang
                    gesetzt wird.

               (Letzteres ist meiner Meinung nach die geschickteste
               Methode ! )


          WRITE such nun alle Konfigurationsdateien in diesen
          Verzeichnis, oder, falls die Umgebungsvariable nicht gesetzt
          wurde, im aktuellen.  Zur Referenz des Konfigurationsfiles
          brauchen sie somit immer nur den Dateinamen ohne Pfad.

       3. Kopieren sie die [1mgarbagecollector.library[0m ins
          LIBS:-Verzeichnis.

       4. Kopieren sie die Datei [1mWRITE.guide[0m in ein Verzeichnis, wo sie
          von AmigaGuide bzw. MultiView gefunden wird.  Der Guide-File
          ist für die Online-Hilfe wichtig.

          Es besteht auch die Möglichkeit die Umgebungsvariabel
          [1mWRITE.guide[0m mit dem kompletten Pfad Des Guide-Files zu
          setzten.

       5. Kopieren sie die [1m.catalog[0m-Files in die entsprechenden
          Verzeichnisse ihrer Workbench.

       6. Kopieren sie die [1mREXX[0m-Scripts in ein Verzeichnis, welches im
          Suchpfad von REXX liegt.

       7. Kopieren sie nun WRITE selbst samt seinem Icon in das von ihnen
          gewünschte Verzeichnis.  Setzen sie die Umgebungsvariable
          [1mWRITE[0m nach einer der oben beschriebenen Methoden
          dauerhaft auf den vollständigen Pfad von WRITE (z.B.
          [1mdh0:WRITE[0m oder [1mC:WRITE[0m). Einige AREXx-Scripts lesen
          diese Variable aus, um WRITE, wenn noch nicht gestartet,
          hochzufahren.


   * Beenden sie möglichst alle weiteren Programme, oder machen sie einen
     Reset, starten sie das [1mGarbagePrefs[0m-Programm in der
     [1mPrefs[0m-Schublade der Installationsdiskette, wählen sie den
     Menüpunkt [1mEditieren/Werte vorschlagen[0m bestätigen sie mit
     [1mSpeichern[0m und verlassen das Programm.

   * Starten sie WRITE.

Schließlich (auch nach der Installation durch das Installationsscript)
sollten unbedinngt noch folgende Dinge getan werden :

   * Kontrollieren sie, ob die Einstellungen im File [1mSTARTUP.CONFIG[0m in
     in dem Icon von WRITE ihren Wünschen entsprechen. Es kann sein,
     daß die dort definierten Hotkeys sich mit bereits vorhandenen
     Hotkeys überschneiden, oder das die eingestelleten Backup-Modi auf
     nicht existierende Verzeichnisse zeigen.

Konzept
*******

Das Prinzip
===========

Viele Texteditoren sind durch eine feste Tastatur- und Menübelegung
recht beschränkt in ihren Möglichkeiten.  Stört den Benutzer
irgendetwas an der Handhabung so muß er sich daran gewöhnen oder mit
einen anderen Texteditor vorlieb nehmen.

Bei der Programmierung von WRITE wurde versucht dem Benutzer
Möglichkeiten zur Beeinflussung der Handhabung, des äußeren
Erscheinungsbildes, mitzugeben.

Dies wird dadurch erreicht,daß WRITE mittels einer kleinen in den Editor
eingebauten Interpretersprache, einer Mischung aus der Batchsprache des
Betriebssystems und AREXX, programmierbar ist.

Der Editor führt also direkt keine Tastaturkommandos oder Menüpunkte
aus, sondern nur noch Befehlsfolgen, die der Tastatur und Menü beliebig
zugewiesen werden können.  Der Benutzer kann frei bestimmen, was
passiert, wenn diese Taste gedrückt oder jener Menüpunkt ausgewählt
wird.  Ja selbst die Menüs an sich sind frei definierbar; und sollten die
Möglichkeiten des internen Interpreters nicht reichen, so können
AREXX-Makros verwendet werden. Jeder interne Befehl ist auch über AREXX
erreichbar.

Der Ed
======

Die interne Struktur zum Verwalten eines Textes wird Ed genannt.  Für
jeden Text, der geladen wird, gibt es einen Ed.  Im Prinzip kann man
einen Ed mit einem Editorfenster identifizieren (Obwohl nicht jeder Ed
ein offenes Fenster besitzen muß).

Jedem Ed kann bei seiner Erschaffung (mittels NewEd) ein eigene
Konfigurationsdatei zugewiesen werden. WRITE läd diese Datei, wenn sie
nicht schon bereits für einen anderen Ed benutzt wurde, automatisch nach.
D.h., startet man WRITE so, daß er keinen Ed öffnet, läd er auch keinen
Konfigurationsfile.

Dies klingt alles recht kompliziert. Sie vermuten, daß sie nun vor der
ersten Benutzung erst einmal stundenlang die Anleitung studieren müssen.
Doch keine Panik!  Es liegt ein dokumentierter Beispielfile bei, der die
Möglichkeiten von WRITE ausführlich demonstriert.  Spielen sie mit
diesem ein wenig herum, merken sie sich Dinge, die sie stören, schauen
sie sich ihre Realisierung im Konfigurationsfile an, versuchen sie
mittels der Dokumentation zu verstehen, was passiert und Überlegen sie
sich , wie sich dies anders machen ließe, um dann schließlich den
Konfigurationsfile zu ändern.  Achten sie dabei darauf, daß sie immer
einen lauffähigen Konfigurationsfile parat haben, da WRITE sich mit
einem fehlerhaften Konfigurationsfile nicht starten läßt. Sie währen
somit nicht in der Lage WRITE zu benutzen, um die Fehler zu korriegieren.
Das Beste ist es, die geänderte Stelle zu markieren und sie mit dem
Menüpunkt [1mINTERN/Parse block[0m auf ihre syntaktische Richtigkeit zu
überprüfen.

Die Syntax des internen Interpreters
************************************

Allgemeine Syntax
=================

Der interne Interpreter verarbeitet beliebig lange Befehlsfolgen.  Diese
bestehen aus einer Liste von Befehlen, im weiteren auch Funktionen
genannt, samt ihrer Argumente.  Dabei besitzt jeder Befehl eine feste
Zahl von Argumenten von jeweils klar definiertem Typ.  Argumente dürfen
also z.B. nicht einfach weggelassen werden.  Ein Beispiel:

     Befehl1 Argument1
     Befehl2 Argument1 Argument2 Argument3

Dem interne Parser (im Gegensatz zu AREXX) ist es dabei egal wie die
Befehlsfolge formatiert ist.  So kann obriges Beispiel auch
folgenderweise geschrieben werden:

     Befehl1 Argument1 Befehl2
     Argument1 Argument2
     Argument3

Der Interpreter arbeitet nun die Befehlsfolge von oben nach unten ab.
Doch ist es dies nicht immer sinnvoll.  So öffnet der 1. Befehl z.B. ein
Fenster, während der 2. in dieses einen Text schreibt.  Was würde
passieren wenn z.B. das Fenster wegen Speichermangel nicht geöffnet
werden kann ?  Es würde versucht in ein nicht vorhandenes Fenster eine
Text zu schreiben.  Deshalb geben einige Befehle einen Fehler zurück Ist
ein Fehler aufgetreten, so wird die Abarbeitung der Befehlsfolge sofort
abgebrochen.

Eine komplette Auflistung aller Funktionen finden sie im Kapitel
Funktionsbeschreibung

Die verschieden Typen
=====================

Der Interpreter unterscheidet zwischen 4 verschieden Typen:

  1. Zahlen. Zahlen sind vorzeichenlose Dezimalzahlen von 0 bis 214783647.
     Einige Beispiele:

          1234 , 4567 , 229874 , 0

     Zahlen sind zuweisungskompatibel zu Zeichenketten. Ihr Inhalt wird
     bei einer Zuweisung automatisch in einen String umgewandelt.

  2. Strings. Es gibt zwei unterschiedliche Arten

       1. Wörter.  Wörter bestehen aus einem optionalen Unterstrich
          oder Klammeraffen ([1m@[0m), einem Buchstaben und weiteren
          Buchstaben oder Ziffern. Bei jedem Wort schaut der Interpreter
          nach, ob es sich bei dem Wort nicht um einen Befehl oder eine
          Variable handelt. Befehle werden ausgeführt, Variablen durch
          ihren Inhalt ersetzt. Beispiele:

               _EinWort , W2345r , _w2swd

       2. Zeichenketten.  Zeichenketten können im Gegensatz zu Wörtern
          aus belieben Zeichen bestehen.  Sie werden durch sogenannte
          Quotes umschlossen. Quotes können sein: [1m"",(),`'[0m.Variablen
          können mittels [1m$VariableName$[0m in die Zeichenkette eingefügt
          werden.  Auch können Zeichenketten mittels folgender Syntax
          über mehrere Zeilen verteilt werden:

               "1. Teil des Strings"+
               (2. Teil des Strings)

     Zeichenketten sind bedingt zuweisungskompatibel zu Zahlen. D.h.
     steht in dem String eine Zahl und nur diese Zahl, dann kann dieser
     String auch einer Zahl zugewiesen werden, ansonsten beschwert sich
     der Parser mit einer entsprechenden Meldung. Beachten sie daß ihr
     String zwar auch negative Zahlen beinhalten darf, diese jedoch vom
     Interpreter wiedder in positive Zahlen umgebandelt werden. Auch ist
     es möglich, daß der String nicht eine Dezimalzahl sondern eine
     Hexadezimalzahl der Form "[1m4E75H[0m" beinhalten kann.

  3. Tags. Tags bestehen aus einer einleitenden,geschweiften Klammer
     [1m{[0m beliebig vielen Zahlen oder Konstanten und einer
     abschließenden, geschweiften Klammer [1m}[0m. Leere Tags können und
     sollten weggelassen werden.

  4. Funktionsliste. Funktionlisten bestehen aus einer Befehlsfolge (d.H.
     einer Reihe von Befehlen sammt ihren Argumenten) und einem
     abschließenden Semikolon.  Beispiel:

          Befehl1 Argument 1 Befehl2 Argument1 Argument2 Argument3;

  5. Kommentare. Kommentare fangen mit [1m/*[0m an und hören mit [1m*/[0m auf.
     Alles, was im Kommentar steht wird vom Parser ignoriert.  Kommentare
     können überall gesetzt werden.  Kommentare können auch
     verschachtelt werden.  Folgendes Konstrukt ist deshalb erlaubt :

          /* Ein paar Sachen zum Debugen
          
            /* Aufruf 1 */
          
            blabla 1 2 3
          
            /* Aufruf 2 */
          
            blupblup "Eine Wasserblase "
          
          */

Variablen
=========

Damit der Benutzer nicht nur die internen Funktionen aufrufen, sondern
auch auf interne Einstellungen zugreifen und diese verändern kann, gibt
es Variablen.  Variablen sind vom Typ [1mZeichenkette[0m oder [1mZahl[0m.  Auch
hier gilt : Zahlen sind zuweisungskompatibel zu Zeichenketten,
Zeichenketten bedingt zuweisungskompatibel zu Zahlen. Dies ist mit
Vorsicht zu behandeln. Da der Parser wärend des Parsens nicht
feststellen kann, ob die Variable nun eine Zeichenkette oder eine Zahl
beinhaltet, fällt diese Aufgabe dem Interpreter zu, der dann einfach mit
einem Fehler abbrechen wird.

Möchte man nun z.B. als Parameter einer Funktion statt einer Zahl eine
Variablen angeben, so tätigt man dies einfach durch die Nennung des
Variablenamens.  Hat zum Beispiel die Variable [1mx[0m den Inhalt [1m25[0m so
sind die Funktionsaufrufe

     MacheMitZahl 25
     MacheMitZahl x

identisch.

Im Zusammenhang mit Funktionen gibt es zwei spezielle Variablen: _RS und
_RN. Sie existieren, da einige Funktionen ein Resultat zurückgeben.  Ist
der Rückgabewert vom Typ [1mZahl[0m, dann steht er in _RN, ist er vom Typ
[1mZeichenkette[0m, dann steht er in der Variable _RS.  Auf den Rückgabewert
einer Funktion kann also solange zugegriffen werden, bis er von einer
Funktion selben Rückgabetyps überschrieben wird.

Wie schon in Typen erwähnt können Variablen durch [1m$VariableName$[0m in
einen String eingefügt werden.  So ergibt [1mMessage "Zeit : $_Time$"[0m zum
Beispiel einen Requester mit der aktuellen Zeit.

Bitte beachten sie, daß einige Variabeln nur geschrieben/ausgelesen
werden können, wenn der entsprechende Ed/die entsprechende Konfiguration
aktiviert ist. Dies geschieht mit LockWindow und GetConfig.

Eine ausführliche Auflistung aller Variablen finden sie im Kapitel
Variablebeschreibung.

Konstanten
==========

Konstanten wurden hauptsächlich für den Typ [1mTag[0m eingeführt. Durch
Kombination der beiden ist es möglich, auf äußerst einfache Weise das
Verhalten von Funktionen zu beeinflussen. Konstanten verhalten sie für
den Benutzer genauso wie Variablen. Der einzige Unterschied ist halt der,
das der Inhalt einer Variablen nach dem Start von WRITE immer gleich
bleibt und das sie nicht geändert werden kann. Von REXX aus können
Konstanten mit dem Befehl GetConst ausgelesen werden.

ToolTypes
*********

Über die Toltypes können einige wichtige Einstellungnen von WRITE gleich
beim Starten von WRITE getätigt werden.

Beachten sie, das WRITE, im Gegensatz zum üblichen Vorgehen, seine
ToolTypes [3mimmer[0m analysiert.  D.H., sowohl beim Start von der Workbench,
als auch beim Start aus einer Shell, werden die ToolTypes gelesen.

Die ToolTypes und ihre Bedeutung :

   * APPMENU Setzt die Variable _AppMenu.

   * APPICON Setzt die Variable _AppMenu.

   * APPWIN Setzt die Variable _AppWindow.

   * SLEEPMODE Setzt die Variable _SleepMode.

   * SOUND Setzt die Variable _Sound.

   * STDCONFIG Setzt die Variable _DefaultConfig

   * GUIDEMODE Ist diese Variable FALSE, so öffnet WRITE beim Hochfahren
     gleich den Hilffile [1mWRITE.guide[0m.  Ist die Variable TRUE, so wird
     der Guidefile erst exeplizit beim Aufruf der Hilfe geöffnet und
     anschließend wieder geschlossen.

     Die erste Methode ist schneller. Der Guide wird einmal geladen und
     steht dann immer schnell da speicherresident zur Verfügung. Der
     Nachteil ist, daß der Guidefile permanent im Speicher gehalten
     wird. Nach groben Schätzungen müßten dies mindesten 300 - 400 KB
     sein.  Die zweite Methode ist wesendlich langsamer (auf meinen 68020
     dauert es schon ein paar Sekunden bis AmigaGuide da ist) aber halt
     speicherplatzsparend, da der GuideFile bei jeder Anfrage neu geladen
     wird.

Sound
*****

Neben der Tonausgabe mittels des Befehls Beep unterstützt WRITE in
bestimmten Situationen das Abspielen von Samples über das Programm
[1mUpd[0m ((C) Jonas Petersson).  Dazu müssen in [1mUpd.ids[0m folgende
weitere id`s definiert werden, die dann in den entsprechenden Situationen
falls vorhanden abgespielt werden.

   * write_start Wird beim Start von WRITE gespielt.

   * write_ask Wird jedesmal, wenn der Ask-Requester erscheint, gespielt.

   * write_message Ertönt bei jedem Message-Requester.

   * write_getstring Für den GetString-Requester.

   * write_getnumber Entsprechend für den GetNumber-Requester.

   * write_list Für die List-Requester.

   * write_manager Beim Erscheinen des WinManagers

   * write_help Wird bei Erscheinen des Help-Requesters gespielt.

   * write_about Ebenso für den About-Requester.

   * write_getfile FileRequester.

   * write_getfont FontRequester.

   * write_gprefs Wird beim Öffnen des GlobalPreferences-Requesters
     geöffnet.

   * write_prefs Wird beim Öffnen des Preferences-Requesters geöffnet.

   * write_end Wird bei Verlassen des Editor gespielt.

   * write_macropannel Wird beim Öffnen des MacroPannels gestartet.

   * write_getfindreplace Wird beim Öffnen des GetFindReplace-Requesters
     abgespielt.

Editorfenster
*************

Das Editorfenster gliedert sich in drei wesendliche Teile : Die
Titelzeile mit einigen wichtigen Informationen über den Text, den
Scrollbalken auf der rechten Seite, so wie der eigendliche
Editierbereich. Dr Scrollbalken verhält sich wie üblich und bedarf wohl
keiner weiteren Erklärung, ähnlich wie der Editierbereich. Im weitern
soll auf die Bedeutung der verschieden Mauszeiger und der kryptischen
Zeichen in der Titelzeile des Fensters eingegangen werden.

  1. Der normale Mauszeiger. Dies ist der Betriebssystemmauszeiger der
     normalerweise benutzt wird.

  2. Der Busy-Mauszeiger, eine kleine Uhr. Dieser Mauszeiger erscheint
     immer dann, wenn WRITE gerade arbeitet (z.B. beim Abspeichern) und
     auf die Eingaben des Benutzers nicht reagieren kann. Bitte warten
     sie dann mit ihren Eingaben bis der normale Mauszeiger wieder
     erscheint.

  3. Der Sleep-Mauszeiger. Dieser Mauszeiger erscheint immer dann, wenn
     die graphische Ausgabe von WRITE abgechaltet ist. Dies ist sinnvoll,
     wenn ein Script viele Änderungen am Text vornimmt, da das
     Abschalten zu einem nicht unwesendlichen Performancegewinn führt.
     Der Benutzer sollte auch hier alle Eingaben unterlassen.

  4. Der Markierungs-Mauszeiger, ein Visier. Dieser Mauszeiger erschein
     immer dann, wenn man eine Blockmarke gesetzt hat. WRITE erwartet
     dann, daß man eine zweite Marke setzt, um einen Block zu markieren.

Die Titelzeile gliedert sich ebenfalls in vier Teile.

Im ersten Teil zeigen einige Buchstaben wesendliche Informationen zum
Text. Erschein an der ersten Stelle eine [1mM[0m so wurde eine Marke gesetzt,
erscheint ein [1mB[0m so wurde eine zweite Marke gesetzt und damit ein Block
markiert. Erscheint an der zweiten Stelle ein [1m*[0m, so wurde der Text nach
dem letzten Abspeichern oder Laden verändert. Ein [1mR[0m an vierter Stelle
bedeutet, das REXX installiert wurde und WRITE REXX-Scripts ausführen
kann. Ein [1mC[0m an vierter Stelle bedeutet, daß WRITE beim Suchen zwischen
Groß- und Kleinschreibung unterscheidet. Ein [1mS[0m an fünfter Stelle
zeigt an, daß sich WRITE im Sleep-Modus befindet. Und ein [1mE[0m an
Position 6, zeigt an das der Text editiert werden kann.

Als nächstest folgen drei Zahlen. Diese stehen für die Spalte und die
Zeile  im Text, in der sich der Cursor befindet, und die Länge des
Textes in Zeilen.

Anschließend folgt, wenn die Undo-Funktion aktiviert ist (_Undo), in
eckigen Klammern die Zahl der Textänderungen die WRITE sich gemerkt hat
und die man rückgängig machen kann.

SAchließlich, als letztes, steht in der Titelzeile der Name des
aktuellen Files.

Requester
*********

   * Die Rquester von WRITE sind alle fontsensitiv. Das heißt, daß sie
     sich an die Größe des eingestellten Systemfonts anpassen. So ist
     selbst bei großen Fontgrößen, wie man sie z.B. als Besitzer einer
     GraphiKkarte benutzt, ein übersichtliches, lesbares, komfortables
     Layout gewährleistet.

   * Alle Requester unterstützen Shortcuts. Das bedeutet, daß die
     meisten Gadgettypen  nicht nur mittels der Maus, sondern auch über
     die Tastatur selelktiert werden können. Angezeigt wird der Shortcut
     durch einen Strich unter dem entsprechenden Buchstaben. Außerdem
     gibt es für jedes Fenster meist ein Gadget, welches über die
     Return-Taste selektiert werden kann, und eins, welches man mit der
     Escape-Taste erreichen kann. Ersteres wird durch angezeigt, daß der
     Text des Gadgets fettgedruckt, zweiteres dadurch, daß der Text
     fettgedruckt und kursiv ist. Bitte machen sie sich bei der Belegung
     der Shortcuts, der Belegung von Return- und Esacapegadgets der
     Reihenfolge Gedanken, versuchen sie möglich die Logik der
     Betriebssystemsrequester zu kopieren...

   * Man kann für die internen Requesteraufrufe global über die Variable
     _ReqToMouse, bzw. für die meisten Requester bei extrenen Aufrufen
     über das Tag [1m@TOMOUSE[0m WRITE so konfigurieren, daß Requester immer
     unter dem Mauszeiger geöffntet werden. Dies ist vorteilhaft für
     Leute mit Tools, die das Fenster unter dem Mauszeiger automatisch
     aktivieren, oder auch für Leute mit großen Screens.

Listen und Buffer
*****************

Listen und Buffer werden in WRiTE dynamisch verwaltet. Dies bedeutet,
daß man beliebig viele Listen und Buffer haben kann, deren Größe nur
durch den vorhandenen Speicher begrenzt ist. Alle Listen und Buffer haben
einen Namen, über den sie jederzeit referenziert werden können. Eine
Liste oder Buffer mit einem bestimmten Namen erzeugt man dadurch, daß
man etwas reinschreibt oder löscht.

Ein Eintrag in eine Liste darf maximal 255 Zeichen lang sein. Alles
darüber wird abgeschnitten.

WRITE besitzt intern beim Programmstart schon einige Listen:

   * List-List Eine Liste, in der alle Listen stehen.

   * Buffer-List Die Liste aller Buffer, die momentan existieren.

   * FindHistory Liste aller Suchwörter seit dem Programmstart.

   * ReplaceHistory Liste aller Ersetzungswörter seit dem Programmstart.

   * DeleleteLine-History Liste aller durch DeleteLine gelöschter Zeilen.

Listen sind sehr leistungsfähig. Ein Beispiel dafür ist das REXX-Script
[1mListDemo.wrx[0m.

Ein anderes Beispiel, welches eine DeleteWord / UndeleteWord-Funktion als
ein Menüpunt implementiert, soll folgen:


     ITEM "Delete word" "control delete"
       IF
         COMPARE _CURRENTWORD "";
         NOP;
         PUSH "CED-Word-History" _CURRENTWORD
         DELETEAREA @SOW @SOW @EOW @EOW {@SILENT};
       ;
     
     ITEM "Undelete word" "control alt delete"
       POP "CED-Word-History"
       WRITETEXT _RS
       ;

Public Screens
**************

Wenn nicht anders angeben, öffnet WRITE seine Fenster immer auf der
Workbench.  Es ist aber auch möglich Fenster auch auf anderen,
öffentlichen Screens ([1mPublic Screens)[0m zu öffnen. WRITE besitzt dabei
keinen eigenen Screenmanager, daß heißt, daß WRITE nicht in der Lage
ist selbst Screens zu öffnen, sondern ist darauf angewiesen, daß andere
Programme diese Screens für ihn öffnen.

So kann man in dem entsprechenen Konfigurationsfile ein Programm starten,
welches einen öffentlichen Screen öffnet, oder über AREXX ein bereits
laufendes Programm dazu veranlassen. Anschließend wird dieser Screen
über die Funktion Screen angemeldet. Der Screen wird gelockt, d.h. dem
Screenmanager wird nicht erlaubt das Fenster wieder zu schließen. Dieser
wird erst wieder freigegeben, wenn man für diese Konfiguration einen
anderen Screen anmeldet oder die Konfiguration beendet. WRITE  wird also
immer, wenn die Konfiguration aktiv ist, alle seine Fenster auf diesem
Screen öffnen. Über die [1mUserFunktion[0m 4 , die mittels SetUserFkt
gesetzt werden kann, kann man nun das Screenmanagerprogramm dazu
veranlassen, den Screen wieder zu schließen, wenn die Konfiguration
freigegeben wird.

Konstantenbeschreibung
**********************

TRUE
====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist immer 1.  Dient dazu Variablen, die das
Verhalten eines Schalters haben (0 = AUS, #0 = AN), verständlich einen
Wert zuzuweisen.

FALSE
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist immer 0.  Dient dazu Variablen, die das
Verhalten eines Schalters haben (0 = AUS, #0 = AN), verständlich einen
Wert zuzuweisen.

LOWER
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist immer 1.  Möglicher Rückgabewert der Funktion
Compare.

HIGHER
======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist immer 2.  Möglicher Rückgabewert der Funktion
Compare.

EQUAL
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist immer 0.  Möglicher Rückgabewert der Funktion
Compare.

CURSOR
======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht die x-, bzw. y-Koordinaten des Cursors.

MARKA
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die Position der Blockanfangsmarke. Nur
gültig, wenn eine entsprechende marke gesetzt wurde. Siehe auch _Marked

MARKB
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die Position der Blockendemarke. Nur
gültig, wenn eine entsprechende marke gesetzt wurde. Siehe auch _Marked

SOL
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Zeilenanfanges
der aktuellen Zeile. Identisch mit(1,_YPos).

EOL
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Zeilenendes der
aktuellen Zeile. Identisch mit(Länge der aktuellen zeile+1,_YPos).

SOW
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Anfanges des
aktuellen Wortes. Nur gültig, wenn Cursor auf einem Wort steht. Siehe
auch _CurrentWord.

EOW
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Endes des
aktuellen Wortes. Nur gültig, wenn Cursor auf einem Wort steht. Siehe
auch _CurrentWord.

SOT
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Textanfanges.
Identisch mit (1,1).

EOT
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Textendes.
Identisch mit (Länge der letzten Zeile+1,_Length).

SOP
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Anfanges des
aktuellen Paragraphen. Paragraphen sind durch Leerzeilen getrennte
Textblöcke.

EOP
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten des Endes des
aktuellen Paragraphen. Paragraphen sind durch Leerzeilen getrennte
Textblöcke.

SOS
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten der oberen, linken
Ecke des aktuellen Fensters.

MOS
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten der Mitte des
aktuellen Fensters.

EOS
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Steht für die x-,y-Koordinaten der unteren, rechten
Ecke des aktuellen Fensters.

Variablebeschreibung
********************

_AColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Setzt die aktuelle Vordergrundfarbe (Farbe der
Schrift) auf die entsprechende Farbnummer (0..MAXCOLOR-1).  Die Farben
werden anhand der Reihenfolge im Paletterequester von 0 an aufwärts
durchnummeriert.

_BColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Setzt die aktuelle Hintergrund auf die entsprechende
Farbnummer (0 ... MAXCOLOR-1).  Die Farben werden anhand der Reihenfolge
im Paletterequester von 0 an aufwärts durchnummeriert.

_CColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Setzt die aktuelle Vordergrundfarbe (Farbe der
Schrift) für markierten Text auf die entsprechende Farbnummer
(0..MAXCOLOR-1).  Die Farben werden anhand der Reihenfolge im
Paletterequester von 0 an aufwärts durchnummeriert.

_DColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Setzt die aktuelle Hintergrundfarbe für markierten
Text auf die entsprechende Farbnummer (0..MAXCOLOR-1).  Die Farben werden
anhand der Reihenfolge im Paletterequester von 0 an aufwärts
durchnummeriert.

_ReadTabs
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable , die angibt, ob beim Einlesen eines Files
gefundene Tabulatoren in die entsprechende Anzahl von Spaces umgewandelt
werden soll.  0=NEIN, ansonsten JA.

_WriteTabs
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable , die angibt, ob beim Schreiben eines Files
Spaces in Tabulatoren umgewandelt werden sollen.  Die Files werden
dadurch kürzer.  Doch nicht alle Programme konvertieren Tabulatoren
wieder richtig zurück.  0=NEIN, ansonsten JA.

_CaseSense
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable, die angibt, ob beim Suchen ein Unterschied
zwischen Groß- und Kleinschreibung gemacht werden soll.  0=NEIN,
ansonsten JA.

_Optimize
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn gesetzt, werden beim Abspeichern Spaces hinter
dem letzten Buchstaben einer Zeile gelöscht.  0=NEIN, ansonsten JA.

_XPos
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Gibt aktuelle Spalte, in der sich der Cursor
befindet, an.

_YPos
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Gibt aktuelle Spalte, in der sich der Cursor
befindet, an.

_Changed
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn ungleich 0, ist der Text seit dem letzten
Abspeichern verändert worden.

_FileName
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Beinhaltet den Namen des Textes im aktuellen Ed.

_FindString
===========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Zeichenfolge, nach der Find suchen soll.

_ReplaceString
==============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Zeichenfolge, die Replace für ein Vorkommen von
_FindString einsetzten soll.

_Length
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Länge des Textes in Zeilen.

_RS
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Variable, in die Funktionen ein eine Variable vom Typ
Zeichenkette zurückgeben.

_RN
===

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Nummerischer Rückgabewert von Funktionen.

_WBStarted
==========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist [1m_WBStarted[0m ungleich null, so ist WRITE von der
Workbench gestartet worden, ansonsten aus einer Shell.

_LoadTab
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Umrechnungfaktor für die Konvertierung von
Tabulatoren zu Spaces beim Laden eines Textes.  Im Zusammenhang mit
_SaveTab können Texte durch Laden und anschließendes Abspeichern von
einer Tabulatorgröße zu einer anderen konvertiert werden.

_SaveTab
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Umrechnungfaktor für die Konvertierung von
Tabulatoren zu Spaces beim Speichern eines Textes.  Im Zusammenhang mit
_LoadTab können Texte durch Laden und anschließendes Abspeichern von
einer Tabulatorgröße zu einer anderen konvertiert werden.

_Version
========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Gibt die Kompatibilitäsversion von WRITE in Form
einer Zahl an.

_ChipMem
========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Momentan verfügbarer CHIP/Graphik-Speicher.

_FastMem
========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Momentan verfügbarer FAST-Speicher.

_PublicMem
==========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Momentan verfügbarer Gesamt-Speicher.

_Wins
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Anzahl der Momentan verfügbarer
CHIP/Graphik-Speicher.

_Time
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Die aktuelle Zeit in Form eines String, der
Tagesnamen Datum und Zeit beinhaltet.

_Path
=====

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Die Pfad des Filerequesters.

_FRPattern
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Das Auswahlpattern für den Filerequester.

_PatCase
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Pattern für die Funktion FindPattern.

_ConfigPath
===========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Das Verzeichnis, in dem WRITE alle
Konfigurationsdateien sucht.

_ShowSpace
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, werden Spaces durch das Zeichen [1m·[0m
angezeigt.

_ShowEOL
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, wird das Ende einer Zeile im Text durch das
Zeichen [1m¶[0m angezeigt.

_PatNoCase
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Pattern für die Funktion FindPattern.

_CurrentChar
============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m ASCII-Code des Zeichens unter dem Cursor.  0 wenn
kein Zeichen.

_CurrentWord
============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Das Wort unter dem Cursor.  Definition eines Wortes
ist abhängig vom Inhalt der Variable _WordDef.

_CurrentLine
============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Inhalt der aktuellen Zeile.

_TabLength
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Abstand zwischen Tabulatoren wärend des Editierens.
Wird von den Funktionen Tab und BackTab benutzt.

_MaxBuffer
==========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Zahl der Textbufer minus 1.  Textbuffere gehen also
von 0..[1m_MaxBuffer[0m-1.

_REXX
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Wenn #0, so ist REXX installiert und es können
REXX-Sripte gestartet  werden.  (WRITE kontrolliert allerdings nur das
Vorhandensein von [1mLIBS:rexxsyslib.library[0m.)

_WordDef
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Definiert, was WRITE unter einem Wort zu verstehen
hat.  Ist [1m_WordDef[0m=0, dann besteht ein Wort nur aus Buchstaben, d.h.
[1ma[0m-[1mz[0m, [1mA[0m-[1mZ[0m, [1m_[0m, Umlaute etc.  Ist [1m_WordDef[0m=1, werden Wörter
durch sogenannte Trennzeichen getrennt.  Trennzeichen sind : [1m [0m, [1m.[0m,
[1m,[0m, [1m;[0m, [1m: [0m, [1m![0m, [1m?[0m, [1m'[0m,  [1m`[0m, [1m([0m, [1m)[0m und [1m"[0m.  Ist [1m_WordDef[0m=2,
so werden Wörter ausschließlich durch Spaces getrennt.

_WriteIcon
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, so wird beim Abspeichern auch ein
entsprechendes Icon kreiert.  Siehe auch _OverwriteIcon

_AppIcon
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, so wird auf der Workbench ein AppIcon
installiert, über welches der WinManager aufgerufen und Texte geladen
werden können.

_AppWindow
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, so wird jedes Editorfenster auch zu einem
AppWindow.  D.h. mit dem ziehen von Workbenchicons in dieses Fenster,
können diese geladen werden.

_AppMenu
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, wird im [1mHilfsmittel[0mmenü der Workbench
ein Menüpunkt installiert, über den man den WinManager aufgerufen und
selektierte Texte laden kann.

_Cursor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Je nach Wert wird der Cursor auf verschiedene Weise
dargestellt.

_AutoIndent
===========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m AutoIndent heißt, das noch einem Return der Cursor
automatisch nicht am Anfang der Zeile, sondern unter dem ersten
Buchstaben der Zeile darüber steht.  Dies ist besonders paktisch, wenn
man mit WRITE Programme schreibt, da hier besonders oft mit
Texteinrückungen gearbeitet wird.  [1m_AutoIndent[0m  sagt WRITE nun, wie
wieviele Leerzeilen er rückwärts suchen soll, um nach dem Indent, dem
Maß der Einrückung, zu suchen.  Beispiel : DerCursor steht an der
Position %.
        Hier steht ein Text !!!
     
     
                 %
     1  2
Ist [1m_AutoIndent[0m größer als 2, so steht der Cursor nach einem Return
an der Position 2, ansonsten an der Position 1.  Ist [1m_AutoIndent[0m=0, so
ist dieses Feature abgeschaltet.

_OverwriteIcon
==============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Diese Variable gibt an, ob WRITE, wenn _WriteIcon#0
ist, ein bestehendes Icon überschreiben soll.  Ist [1m_OverwriteIcon[0m=0,
so wird nur, wenn nicht bereits vorhanden, in das bestehende Icon WRITE
als DefaultTool eingetragen, ansonsten schreibt WRITE sein eigenes Icon.

_SleepMode
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Ist diese Variable ungleich null, so wird WRITE
[3mnicht[0m beendet, wenn der letzte Ed geschlossen worden ist.  Dieser
Modus wird empfohlen und sollte immer eingeschaltet sein, wenn es der
Speicherplatz zuläßt.

_EditMode
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn#0, kann der Text auch verändert werden.  Gilt
für alle Fenster !

_Marked
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist [1m_Marked[0m=0 so ist weder eine Blockmarke gesetzt,
noch ein Block markiert. Ist [1m_Marked[0m=1, so ist eine Blockmarke gesetzt
und ist [1m_Marked[0m=2, so ist ein Block markiert worden.

_MarkAx
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Spaltennummer der 1. Blockmarke.  0, wenn keine
Marke gesetzt.

_MarkAy
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Zeilennummer der 1. Blockmarke.  0, wenn keine Marke
gesetzt.

_MarkBx
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Spaltennummer der 2. Blockmarke.  0, wenn keine
Marke gesetzt.

_MarkBy
=======

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Zeilennummer der 1. Blockmarke.  0, wenn keine Marke
gesetzt.

_WinMode
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Hier kann ausgelesen weren, ob der aktuelle Ed ein
Fenster geöffnet hat (0) (Window), ikonifiziert worden ist(1) (Iconify),
kein Fenster offen hat  (2) (Hide), oder schließlich ein Fenster offen
hat, aber die graphische Ausgabe unterdrückt wird (3) (Silent).

_CurrentID
==========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m ID des aktuellen Eds. Ist der ID 0, so ist kein Ed
aktiviert.

_VersionString
==============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Versionsstring von WRITE.

_File
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Dateiname des aktuellen Textes, ohne kompletten Pfad.

_FilePath
=========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Directory des aktuellen Textes.

_REXXPortName
=============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Name des globalen REXX-Ports von WRITE.

_REG1
=====

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable, die für die eigene Verwendung
freigestellt ist.

_REG2
=====

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable, die für die eigene Verwendung
freigestellt ist.

_Sound
======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wenn #0, so ruft WRITE für einige Requester Upd
auf, um Samples abzuspielen.  Siehe auch Sound.

_DefaultTool
============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Bestimmt, was als DefaultTool in Icons abgespeichert
werden soll.  Voreigestellt ist WRITE (inclusive kompletten Pfad) selbst.

_Language
=========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Hier steht, auf welche Sprache WRITE eingestellt ist.

_CurrentConfig
==============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Der Name der aktuellen Konfiguration. Ist er "", so
ist keine Konfiguration aktiviert. Eine Konfiguration läßt sich mit
GetConfig aktivieren.

_DefaultConfig
==============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Der Name der Konfiguration, die immer dann benutzt
wird, wenn expliziet eine bestimmte Konfiguration vorgegeben wird.

_AutoFree
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Ist diese Variable ungleich Null, so wird eine
Konfiguration, die von keinem Ed mehr gebraucht wird, automatisch
freigegeben.

_WinWidth
=========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m In dieser Variable steht die Breite des aktuellen
Fensters in Zeichen.

_WinHeight
==========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m In dieser Variable steht die Höhe des aktuellen
Fensters in Zeichen.

_WordWrap
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m [1m_WordWrap[0m steuert das WordWrapping von WRITE.  Ist
[1m_WordWrap[0m=0, so gibt es kein WordWrap. Ist [1m_WrdWrap[0m=1, so ertönt ein
Beepen, wenn der Text einer Zeile über den in _RightMargin angegebenen
Rand geht. Dies ist ähnlich dem Verhalten einer Schreibmaschine.  Ist
[1m_WordWrap[0m=2, so bricht WRITE eine Zeile, wer sie über den Rand geht,
automatisch um. Der Inhalt der Variable _AutoIndent wird dabei beachtet.

_RightMargin
============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Gibt den rechten Rand für die WordWrap-Funktion
(_WordWrap) an.

_ScreenWidth
============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Breiten des aktuellen Screens.

_ScreenHeight
=============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Höhe des aktuellen Screens.

_Undo
=====

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Gibt die Größe des Undo-Puffers an. WRITE merkt
dich alle Veränderungen am Text. [1mUndo[0m gibt nun an, wieviele
Veränderungen er sich behalten soll. Ist [1m_Undo[0m=0, so ist die
Undo-Funktion ausgeschaltet.

_ScrRelWidth
============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wird beim Aufruf des Befehls Window das Tag
[1m@SCREENREL[0m übergeben, so beziehen sich alle Größenangaben nicht
auf die reale Screengröße sondern auf den hier angegebenen Wert. Dies
ist zum Beispiel nützlich, wenn ein Script [1mWINDOW 0 0 0 0[0m zum öffnen
eines bildschrimfüllenden Fenster benutzt. Auf großen Bildschirmen ist
dies aber nicht unbedingt erwünscht. Mit dieser Variablen kann man nun
einen Screen der angegebenen Größe vortäuschen.

_ScrRelHeight
=============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Wird beim Aufruf des Befehls Window das Tag
[1m@SCREENREL[0m übergeben, so beziehen sich alle Größenangaben nicht
auf die reale Screengröße sondern auf den hier angegebenen Wert. Dies
ist zum Beispiel nützlich, wenn ein Script [1mWINDOW 0 0 0 0[0m zum öffnen
eines bildschrimfüllenden Fenster benutzt. Auf großen Bildschirmen ist
dies aber nicht unbedingt erwünscht. Mit dieser Variablen kann man nun
einen Screen der angegebenen Größe vortäuschen.

_WordOnly
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable, die angibt, ob beim Suchen nur nach ganzen
Wörtern oder auch nach Wortteilen gesucht werden soll.  0=NEIN,
ansonsten JA. Die Definition eines Wortes hängt von dem Inhalt der
Variable _WordDef ab.

_ReqToMouse
===========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Variable, die angibt, ob bei internen
Requesteraufrufen, diese unter dem Mauszeiger geöffnet werden. Siehe
auch Requester

_EColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Eine Falte wird durch zwei horizontale Linien
angezeigt.  Durch diese Variable kann man die Farbe der oberen bestimmen.

_FColor
=======

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Eine Falte wird durch zwei horizontale Linien
angezeigt.  Durch diese Variable kann man die Farbe der unteren bestimmen.

_AutoFold
=========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Folds werden beim Abspeichern im Text durch die
Markierungen _FoldStart und _FoldEnd angezeigt. Ist [1m_AutoFold[0m [1mTRUE[0m so
wird nach dem Einladen eines Textes automatisch nach diesen Markierungen
gesucht und diese wieder zu Falten konvertiert.

_FoldStart
==========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Folds werden beim Abspeichern im Text durch die
Markierungen angezeigt. [1mFoldStart[0m zeigt den Anfang einer Falte,
_FoldEnd das Ende einer Falte an. Diese Markierungen können durch den
Benutzer frei definiert werden, damit gewährleistet werden kann, daß
diese Markierungen z.B. einen Compiler nicht stören.  C Programmierer
würden z.B. [1m/*S*/[0m und [1m/*E*/[0m wählen, Oberon Programmierer [1m(*S*)[0m und
[1m(*E*)[0m, Leute, die mit TeX arbeiten einfach [1m/%S[0m und [1m%E[0m.

_FoldEnd
========

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Folds werden beim Abspeichern im Text durch die
Markierungen angezeigt. _FoldStart zeigt den Anfang einer Falte,
[1m_FoldEnd[0m das Ende einer Falte an. Diese Markierungen können durch
den Benutzer frei definiert werden, damit gewährleistet werden kann,
daß diese Markierungen z.B. einen Compiler nicht stören.  C
Programmierer würden z.B. [1m/*S*/[0m und [1m/*E*/[0m wählen, Oberon
Programmierer [1m(*S*)[0m und [1m(*E*)[0m, Leute, die mit tex arbeiten einfach
[1m/%S[0m und [1m%E[0m.

_DelFoldMark
============

    [3mSchreiben    :[0m Ja

    [3mBeschreibung :[0m Folds werden beim Abspeichern im Text durch die
Markierungen angezeigt. _FoldStart zeigt den Anfang einer Falte _FoldEnd
das Ende einer Falte an. Werden diese Faltenmarkierungen  anschließend
durch das _AutoFold-Feature der durch die Funktion ReFold in Falten
umgewandelt, kann es erwünscht sein, daß die Faltenmakierungen
gelöscht werden. Ist die variable [1mDelFoldMark[0m ungleich [1mTRUE[0m, so
geschieht dies. Nach einem anschließenden Entfalten sind die
Markierungen wieder verschwunden.

_Fold
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Ist diese Variable ungleich 0, so handelt es sich
bei der aktuelllen Zeile um eine Falte. Bevor man auf den Inhalt der
aktuellen Zeile zugreifen will, sollte man immer diese Variable
kontrollieren.

_Screenname
===========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Names des Screens, auf den die aktuelle onfiguration
ihre Fenster öffnet.

_PathPath
=========

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Der Pfadanteil des Filerequesterpfades.

_User
=====

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Falls es sich um eine registrierte Version handelt,
steht hier der Name des Besitzers.

_CollectorMem
=============

    [3mSchreiben    :[0m Nein

    [3mBeschreibung :[0m Größe des Speichers, welcher vom GarbageCollector
benutzt wird.

Funktionenbeschreibung
**********************

NOP
===

    [3mAufruf       :[0m NOP

    [3mBenötigt     :[0m

    [3mSetzt Fehler :[0m

    [3mErgebnisse   :[0m

    [3mBeschreibung :[0m NOP steht für `no operation'.  Diese Funktion macht
gar nichts.

    [3mSiehe auch[0m =>

Open
====

    [3mAufruf       :[0m Open Dateiname/S Tags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Diese Funktion versucht den Text mit dem angegebenen
Dateinamen in den aktuellen Ed zu laden.  Ist dies nicht möglich, so
bricht dies Funktion mit einer Fehlermeldung ab.  Diese Funktion mach
keine Sicherheitsabfrage, falls der alte Text verändert sein sollte! Die
Fehlermeldung durch Requester kann mittels des Tags [1m@SILENT[0m
unterdrückt werden. [1mOpen[0m gibt dann einfach nur einen Fehler zurück.

    [3mSiehe auch[0m => GetFile, Save, LoadBuffer, SaveBuffer

Save
====

    [3mAufruf       :[0m Save Dateiname/S Tags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Keine

    [3mBeschreibung :[0m Save speichert den Text im aktuellen Ed unter dem
angegebenen Namen ab.  Namensangaben wie [1mPRT:[0m zum Drucken sind möglich.
WRITE restauriert dabei die ursprünglichen Protection-Flags mit Ausnahme
des Archive-Flags ([1mA[0m).  Ist in [1mMode[0m [1m@RAW[0m gesetzt, werden LF nur bei
leeren Zeilen abgespeichert.  WRITE erzeugt so überlange Zeilen die aus
jeweils einem ganzen Absatz bestehen.  Dies ist praktisch, falls man den
Text anschließend in eine Textverarbeitung einlesen will.

Kann der Text nicht abgespeichert werden, so wird das Abspeichern mit
einem Fehler und dem entsprechenden Fehlerrequester abgebochen. Der
Requester kann durch das Setzten des Tags [1m@SILENT[0m unterdrückt werden.

    [3mSiehe auch[0m => GetFile, Open, LoadBuffer, SaveBuffer

SetBackUp
=========

    [3mAufruf       :[0m SetBackUp Mode/N Pattern/S To/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m SetBackUp stellt die verschiedenen BackUpmodi von
WRITE ein.  BackUp bedeutet, daß, wenn ein Text unter einem Dateinamen,
der bereits existiert, abgespeichert werden soll, von der bereits
bestehenden Datei eine Sicherheitskopie gemacht wird.  Momentan gibt es 3
Modi :

  1. Modus 0 : Entspricht die Datei dem angegebenen DOS-Pattern, so wird
     sie als angegebe Datei [1mTo[0m umbenannt bzw. kopiert.

  2. Modus 1 : Entspricht die Datei dem Pattern, so wird die angegebene
     Endung angehangen.

  3. Modus 2 : Entspricht die Datei dem Pattern, so wird sie in das
     angegebene Directory kopiert.

WRITE vergleicht die Pattern in absteigender Reihenfolge, d.h. 2...
1...0.

    [3mSiehe auch[0m =>

New
===

    [3mAufruf       :[0m New

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m New löscht den aktuellen Text [3munwiederruflich[0m.
Eine eingebaute Sicherheitsabfrage gibt es dabei nicht. Diese muß
programmiert werden. Für ein Beispiel, wie dies zu tun ist, schauen sie
bitte in die beigelegten Standardkonfigurationen.

    [3mSiehe auch[0m =>

NewEd
=====

    [3mAufruf       :[0m NewEd Konfiguration/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mNewEd[0m öffnet einen neuen Ed mit der angegebenen
Konfiguration. Wird als Konfigurations(file) [1m""[0m angegeben, so die
Konfiguration aus der Variable _DefaultConfig benutzt.  Kann der
Konfigurationfile nicht gefunden werden, oder tritt beim Parsen des selben
ein Fehler auf, so bricht [1mNewEd[0m ab und gibt einen Fehler zurück.

    [3mSiehe auch[0m => Der Ed

QuitEd
======

    [3mAufruf       :[0m QuitEd

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Die Funktion schließt den aktuellen Ed, den
dazugehörigen Text sowie, wenn geöffnet, das Fenster.

Eine Sicherheitsabfrage gibt es nicht. Zu Realisierung einer
Sicherheitsabfrage schauen sie bitte in einen beliebigen beigelegten
Konfigurationsfile nach.

    [3mSiehe auch[0m => NewEd

Window
======

    [3mAufruf       :[0m Window dx1/N dy1/N dx2/N dy2/N Tags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Window öffnet für den aktuellen Ed ein Fenster mit
den angegebenen Maßen.  Dabei steht (x1,y1) für die linke obere Ecke
relativ zur linken oberen Ecke des Bildschirms und (x2/y2) für die
rechte untere Ecke relativ zur rechten unteren Ecke.
     Window  0  0  0  0
öffnet ein Fenster über den ganzen Screen.
     WINDOW 50 50 50 50
öffnet ein Fenster, dessen Seiten jeweils 50 Pixel vom Bildschirmrand
entfernt sind.  Hatte der Ed schon einmal ein geöffnetes Fenster, so
werden dessen Maße benutzt.  Konnte das Fenster nicht geöffnet werden,
so wird ein Fehler zurückgegeben.

Ist in Tags das [1m@SCREENREL[0m gesetzt, so beziehen sich die
Größenangaben nicht auf die tatsächliche Screengröße sondern auf einen
Screen der bei _ScrRelWidth und _ScrRelHeight angegebenen Größe. Dies
ist nützlich für übergroße Screen wie man sie bei Grafikkarten
besitzt.

    [3mSiehe auch[0m => Iconify, Hide, Silent

Iconify
=======

    [3mAufruf       :[0m Iconify

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Schließt ein eventuell vorhandenes Fenster und
öffnet ein iconifiziertes Fenster für den aktuellen Ed.  Dieses ist ein
kleines Fenster mit einen Schließsymbol in der rechten, oberen Ecke des
Screens.  Betätigt man dieses Schließsymbol, so wird wieder ein Fenster
der alten Größe geöffnet.  Mehere Icons werden untereinander plaziert.
Kann das Iconfenster nicht geöffnet werden, so wird ein Fehler
zurückgegeben.

    [3mSiehe auch[0m => Window, Hide, Silent

Hide
====

    [3mAufruf       :[0m Hide

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Schließt das Icon oder Fenster des aktuellen Eds.
Der Text ist [3mnicht[0m verloren, er besitzt nur kein Fenster mehr.  Es gibt
mehrere Möglichkeiten das Fenster wieder zu öffnen :
  1. Über den WinManager

  2. In dem REXX-Script , das in den Hidemodus geschaltet hat, mittels
     Window oder Iconify (Da die Befehle an das aktuelle Fenster gehen !)

  3. Oder ähnlich über den PrivatePort (dessen Namen man über OpenPort
     bekommen hat, oder den man mit dem ID, der von NewEd zurückgegeben
     wird, öffnet.

    [3mSiehe auch[0m => Window, Iconify, Silent

Silent
======

    [3mAufruf       :[0m Silent

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Das Fenster des aktuellen Ed (wenn er eins geöffnet
hat) wird in den Silentmode geschaltet.  D.h., daß alle graphischen
Ausgaben unterdrückt werden.  Einige Funktionen wie z.B. Replace
erreichen so ein vielfaches ihrer Geschwindigkeit.

    [3mSiehe auch[0m => Window, Iconify, Hide

Font
====

    [3mAufruf       :[0m Font Name/S yGröße/N DiskFont/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Der Text im Editierfenster wird in dem angegebenen
Font dargestellt.  [1mName[0m und [1myGröße[0m stehen dabei für den Namen und
die Höhe des Textes.  Ist [1mDiskFont[0m#0, so wird der Font von Diskette
geladen, ansonsten wird er im ROM gesucht.  Kann der Font nicht gefunden
werden,wird ein Fehler zurückgegeben

    [3mSiehe auch[0m => GetFont

WinArranger
===========

    [3mAufruf       :[0m WinArranger Gewichtung/N Tags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m WinArranger versucht alle geöffneten Fenster
übersichtlich, flächendeckend und ohne Überlappungen auf dem Screen zu
plazieren.  Momentan werden zwei Modi unterstützt :

   * [1m@VERT[0m - Alle offenen Fenster werden untereinander plaziert und
     nach vorne gebracht.

   * [1m@HORIZ[0m - Alle Fenster werden nebeneinander plaziert und nach vorne
     gebracht.

WinArranger beachtet beim Plazieren der Fenster auch den Inhalt der
Variablen _ScrRelWidth und _ScrRelHeight.

Über [1mGewichtung[0m kann man einstellen, wie viel das aktuelle Fenster
größer als alle anderen sein soll. Bei dem Wert [1m2[0m z.B. ist das atuelle
Fenster genau zweimal so groß wie die anderen Fenster. Eine interessante
Einstellung ist z.B.  [1mWinArranger _Wins[0m.

    [3mSiehe auch[0m =>

SetTitle
========

    [3mAufruf       :[0m SetTitle Titel/S NoHold/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m SetTitle setzt den Fenstertitel aud [1mTitel[0m.  Die
Flags und Positionsangaben bleiben dabei sichtbar.  Ist [1mNoHold[0m=0, so
wird der Titel nach Ausführung der aktuellen Befehlsfolge gelöscht,
ansonsten nicht.

    [3mSiehe auch[0m =>

Screen
======

    [3mAufruf       :[0m Screen Data/S Titel/S Flags/T

    [3mBenötigt     :[0m Konfiguration

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mScreen[0m gibt an, auf welchem Screen eine
Konfiguration ihre Fenster öffnen soll.  Momentan werden nur fremde
PublicScreens unterstützt.  Dabei ist [1mTitel[0m der Name des PublicScreens.
In Flags muß [1m@PUBLIC[0m gesetzt sein.

Der neue Screen gilt erst für alle [3mneu[0m geöffneten Fenster der
aktuellen Konfiguration.  [1mScreen[0m sollte deshalb schon bereits im
Konfigurationsfile aufgerufen werden.

Kann [1mScreen[0m auf einen Screen nicht zugreifen, so wird der
"DefaultPublicScreen" benutzt.  Dies ist meißtens die Workbench.
Außerdem gibt [1mScreen[0m dann einen Fehler zurück.

Es sollte hier noch einmal außdrücklich erwähnt werden, daß WRITE sich
völlig an die Gegebenheiten eines beliebigen Screens anpaßt.  Dies sind
vor allem die Auflösung, so wie der eingestellte Zeichensatz des Screens.
Alle Fenster und Requester von WRITE sind fontsensitiv und passen sich
sogar Proportionalfonts problemlos an.

    [3mSiehe auch[0m => PublicScreens

About
=====

    [3mAufruf       :[0m About

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m About öffnet ein kleines Fenster, in dem die
Versionsnummer, mein Name und meine Adresse, sowie ein kleiner Hinweis in
Sachen Raubkopien und dem legalen Besitz von Originalen stehen.

    [3mSiehe auch[0m => Copyright, Vollversion, Requester

Prefs
=====

    [3mAufruf       :[0m Prefs

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hier kann man einige konfigurationsspezifische
Einstellungen ändern und abspeichern.

Dabei werden die Einstellung nach einzelnen Themenbereichen aufgeteilt.
Alle Einstellungen in den Unterrequestern werden bei drücken der
[1mOK[0m-Taste übernommen. Drückt man im Preferencerequester
[1mSpeichern...[0m, so wird automatisch ein neuer Konfigurationsfile mit
dem angegebenen Namen erzeugt. Durch Drücken von [1mEnde[0m werden die
Einstellung nur übernommen, aber nicht abgespeichert.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => GPrefs, Requester

GPrefs
======

    [3mAufruf       :[0m GPrefs

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hier kann man einige globale Einstellungen ändern.

Hier gilt das gleiche wie auch für wie für den Prefsrequester :
Drückt man im Preferencerequester [1mSpeichern[0m, so wird automatisch eine
neue [1mSTARTUP.CONFIG[0m erzeugen. Durch Drücken von [1mEnde[0m werden die
Einstellung nur übernommen, aber nicht abgespeichert.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => Prefs, Requester

Help
====

    [3mAufruf       :[0m Help

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Help öffnet ein kleines Fenster mit verschieden
Gadgets über die einige weitere Hilfrequester geöffnet werden können.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => ShowVars, ShowFunctions, ShowASCII, Requester

WinManager
==========

    [3mAufruf       :[0m WinManager

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m WinManager öffnet ein Fenster mit einem
Listrequester, in dem alle geöffneten Eds gezeigt werden. Da bei
bedeutet die erste Zahl der ID, ein anschließendes Sternchen zeigt an,
daß der Text verändert wurde, und ein abschließendes [1mh[0m, [1mi[0m, [1ms[0m
gibt an, ob sich der Ed im Hiden-, Iconify- oder im Silent-Mode befindet.
Der Eintrag schließt mit dem Dateinamen des aktuellen Textes ab.  Mit
den darunter angebrachten Gadgets kann der Requester wieder verlassen,
ein neues Fenster geöffnet, ein selektierter Ed gezeigt, gelöscht ,
oder, falls kein Ed vorhanden, WRITE verlassen werden.  Ein Eintrag kann
durch anklicken mit der Maus, oder (ab OS 3.0) über die CursorUp bzw.
CursorDown Tasten selektiert werden.

Das Verlassen von WRITE geht nur, wenn alle Fenster geschlossen sind.

die Taste [1mNeues Fenster[0m führt bei Selektion die Userfunktion 2
(SetUserFkt,GPrefs) aus.  Damit läßt sich konfigurieren, was für ein
Fenster (Konfiguration, Größe) geöffnet werden soll.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => Requester

ShowVars
========

    [3mAufruf       :[0m ShowVars

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Öffnet ein Fenster mit einem Listgadget, in dem alle
internen Variablen mit ihren Namen sowie dem aktuellen Wert stehen.

Steht hinter dem Variablennamen ein [1mP[0m, so ist die Variable nur
auslesbar, wenn eine Konfiguration aktiviert ist. Steht hinter dem Namen
ein [1mE[0m, sogar nur, wenn ein Ed aktiviert ist.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => HelpFkt, ShowFunctions, ShowASCII, ShowConstants,
Requester, GetConfig

ShowFunctions
=============

    [3mAufruf       :[0m ShowFunctions

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Eine Liste mit allen internen Funktionen samt ihrer
Parameter.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

Hinter dem Variablennamen stehen einige Buchstaben :

   * [1mC[0m : Die Funktion kann nur mit aktiver Konfiguration ausgeführt
     werden.

   * [1mE[0m : Die Funktion kann nur mit aktiven Ed ausgeführt werden.

   * [1mW[0m : Die Funktion kann nur mit aktivem Fenster ausgeführt werden.

   * [1m*[0m : Die Funktion ändert den Text.

   * [1mS[0m : Die Funktion gibt einen String zurück.

   * [1mN[0m : Die Funktion bit eine Zahl zurück.

   * [1m![0m : Die Funktion gibt gegebenenfalls einen Fehler zurück.

    [3mSiehe auch[0m => HelpFkt, ShowVars, ShowASCII, ShowConstants, Requester

ShowConstants
=============

    [3mAufruf       :[0m ShowConstants

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Eine Liste mit allen internen Konstanten.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => HelpFkt, ShowVars, ShowASCII, ShowFunctions, Requester

ShowASCII
=========

    [3mAufruf       :[0m ShowASCII

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Öffnet ein Fenster mit einem Listgadget, in dem alle
dastellbaren Zeichen samt ihrer ASCIInummer in dezimaler Schreibweise
stehen.  Diese Nummern können dann z.B. als Parameter für WriteChar
übergeben werden.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => WriteChar, HelpFkt, ShowFunctions, ShowVars,
ShowConstants, Requester

ShowIndex
=========

    [3mAufruf       :[0m ShowIndex Pattern/S Flags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Sucht im gesamten Text nach dem angegebenen
DOS-Pattern.  Wenn [1m@CASE[0m in [1mFlags[0m gesetzt ist, so wird dabei zwischen
Groß- und Kleinschreibung unterschieden. Wenn [1m@NOCASE[0m gesetzt ist ,
nicht. Ansonsten wird die Preferenceseinstellung benutzt.  Anschließend
werden alle Zeilen, in den das Pattern gefunden wurde, in einem Requester
mit ihrer Zeilennummer angezeigt.  Durch Selektion einer Zeile kann dann
zu dieser gesprungen werden.

Für Oberon/Modula2-Programmierer ist zum Beispiel nützlich :
     ShowIndex "#?PROCEDURE#?" 1

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m =>, Requester

GetString
=========

    [3mAufruf       :[0m GetString Title/S Vorbelegung/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mGetString[0m öffnet einen Requester mit dem
angegebenen Titel und einem Stringgadget mit dem angegebenen Inhalt.
Wird im Stringgadget RETURN gedrückt oder das Bestätigungsgadget
betätigt, so wird in der Variablen _RS der eingegebene String
zurückgegeben.  Andernfalls wird ein Fehler zurückgegeben.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => GetNumber, Requester

GetNumber
=========

    [3mAufruf       :[0m GetNumber Titel/S Vorbelegung/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mGetNumber[0m öffnet einen Requester mit dem
angegebenen Titel und einem Integergadget mit dem angegebenen Inhalt.
Wird im Integergadget RETURN gedrückt oder das Bestätigungsgadget
betätigt, so wird in der Variablen _RN die eingegebene Zahl
zurückgegeben.  Andernfalls wird ein Fehler zurückgegeben.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => GetString, Requester

GetFindReplace
==============

    [3mAufruf       :[0m GetFindReplace FindWord/S ReplaceWord/S Flags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mGetFindReplace[0m öffnet einen Requester in dem
kompfortabel die Variablen [3m[1m_FindString[0m[0m, _CaseSense und, falls
[1m@REPLACE[0m in [1mFlags[0m gesetzt ist, auch die Variable
[3m[1m_ReplaceString[0m[0m gesetzt werden können. Drückt man in einen
der beiden StringGadgets die HELP-Taste, so öffnet sich ein
ListRequester, über den man eins der vorher eingebenen Wörter
selektieren kann.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => Find, Replace, FindPattern, Requester

GetFile
=======

    [3mAufruf       :[0m GetFile Pfad,Pattern/S Typ/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mGetFile[0m öffnet einen Filerequester mit dem Pfad
[1mPfad[0m oder, falls dieser leer ist ([1m""[0m) mit dem Pfad, der in der
Variable _Path steht. Es werden dabei nur Files, die dem Suchmuster
[1mPattern[0m entsprechen, oder, falls dieser leer ist, dem Muster in der
Variablen _FRPattern.

Ist in [1mTyp[0m [1m@SAVE[0m gesetzt, so wird ein Save-Filerequester benutzt (Es
wird helle Schrift auf dunklem Hintergrund benutzt).

Wird eine Datei selektiert, so wird der dazugehörige Dateiname ,falls
[1mPfad[0m leer ist, in der Variablen _Path zurückgegeben, ansonsten in _RS.

Andernfalls wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => GetFiles

GetFiles
========

    [3mAufruf       :[0m GetFiles Liste,Pfad,Pattern/S Typ/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Gleiches Verhalten wie GetFile. Nur das hier nicht
nur ein File sondern mehrere seletiert werden können, und diese nicht in
_Path oder _RS sondern in der angegebenen Liste eingetragen werden. Diese
muß vorher existieren.

    [3mSiehe auch[0m => GetFile

GetFont
=======

    [3mAufruf       :[0m GetFont

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mGetFont[0m öffnet einen Fontrequester.  Wird ein
Font selektiert, so wird versucht, diesen als neuen Font für die
Textdarstellung zu benutzen. Wird kein Font selektiert, oder kann dieser
nicht geladen dargestellt etc. werden, wird die Abarbeitung abgebrochen.

    [3mSiehe auch[0m =>

Ask
===

    [3mAufruf       :[0m Ask Title/S Gadgets/S Flags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mAsk[0m öffnet einen Requester mit [1mTitle[0m als Text
und den in [1mGadgets[0m beschriebenen Gadgets als mögliche Antwort.  Ist in
Flags das Tag [1m@VERT[0m gesetzt, so wird rechts neben dem Text die
Gadgeliste vertikal erzeugt, sonst horzontal unter dem Text.

Die Beschreibung der Gadgets folgt folgender Konvention: Die Gadgettitel
werden hintereinander aufgelistet und durch das Zeichen [1m|[0m von einander
getrennt.  Mittels eines Unterstriches im Titel kann der nächste
Buchstabe als Tastaturkürzel markiert werden.  Ein [1m^[0m bedeutet, daß
dieses Gadget auch über die Esacape-Taste selectiert werden kann.
Dieses Gadget sollte demnach für einen Abruch oder für das sichere
Verlassen des Requester stehen.  Ein [1m*[0m bedeutet, daß dieses Gadget
auch mit RETURN beantwortet werden kann.  Dieses Gadget sollte also für
die vorgeschlagene Standardbeanwortung stehen.

Die Gadgets werden von Links nach Rechts von 0 aufwärts durchnummeriert.
[1mAsk[0m gibt in _RN die Nummer des selektierten Gadgets zurück.  Ein
Beispiel:
     Ask "Dies ist ein Test !!!" "Echt _super man !*|_Nicht so toll^"

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => Requester, Message, MessageOK

Message
=======

    [3mAufruf       :[0m Message Text/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Message öffnet einen Requester mit dem angegebenen
Text.  Nach kurzer Zeit verschwindet der Requester wieder.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => MessageOK, Requester

MessageOK
=========

    [3mAufruf       :[0m MessageOK Text/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Funktioniert wie Message, nur das hier die Meldung
erst durch ein Gadget bestätigt werden muß bevor sie verschwindet.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => Message, Requester

Flash
=====

    [3mAufruf       :[0m Flash

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Läßt den Bildschirm einmal aufblinken.

    [3mSiehe auch[0m => Beep

Beep
====

    [3mAufruf       :[0m Beep Deep/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mBeep[0m erzeugt einen kurzen Ton.  Ist [1mDeep[0m=0, dann
ist der Ton relativ hoch, sonst tief.

    [3mSiehe auch[0m => Flash

ParseBuffer
===========

    [3mAufruf       :[0m ParseBuffer Nummer/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mParseBuffer[0m behandelt den Text in dem Puffer mit
der angegebenen Nummer als WRITE-Script und prüft es auf seine
syntaktische Richtigkeit ohne es dabei jedoch auszuführen.  Eventuell
auftretende Fehler werden wie üblich im Textfenster gemeldet.  Sind
Fehler aufgetreten, so wird dementsprechend von der Funktion ein Fehler
zurückgegeben.

Diese Funktion ist sinnvoll, wenn man Teile des Konfigurationsfiles
ändert, und sie anschließend auf ihre Richtigkeit überprüfen will.

    [3mSiehe auch[0m => DoBuffer, DoString, PreparseString

DoBuffer
========

    [3mAufruf       :[0m DoBuffer Nummer/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Führt den angegebenen Puffer als WRITE-Script aus.
Treten dabei Fehler auf, so gibt die Funktion ebenfalls einen Fehler aus.

    [3mSiehe auch[0m => ParseBuffer, DoString, PreparseString

DoString
========

    [3mAufruf       :[0m DoString String/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Führt den angegebenen String als WRITE-Script aus.
Natürlich gibt auch diese Funktion dabei auftretene Fehler als Fehler
zurück.

    [3mSiehe auch[0m => ParseBuffer, DoBuffer, PreparseString

PreparseString
==============

    [3mAufruf       :[0m PreparseString String/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mPreparseBuffer[0m parsed den String, kontrolliert auf
Richtigkeit und ersetzt dabei Variablen durch ihre Inhalte.  Der String
wird in _RS zurückgegeben.

    [3mSiehe auch[0m => DoBuffer, DoString, ParseBuffer

SetUserFkt
==========

    [3mAufruf       :[0m SetUserFkt Nummer/N Funktionsliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Userfunktionen sind Stellen im internen Ablauf, wo
der Benutzer konfigurierend eingreifen kann.  Momentan gibt es folgende
Userfunktionen:

0 : Diese Funktion wird für jeden Commandlineparameter einmal aufgerufen.
Der Parameter steht dabei in der Variablen _RS.  Diese Funktion sollte
ein Fenster öffnen und die angegebene Textdatei laden.

1 : Diese Funktion wird aufgerufen, wenn das Schließ-Gadget eines
Fenster angeklickt wird.  Die Funktion sollte eventuell eine
Sicherheitsabfrage machen und anschließend das Fenster schließen.

2 : Diese Funktion wird bei Selektion des Gadgets [1mNeues Fenster[0m im
WinManager aufgerufen. Sie sollte ein Editorfenster öffnen.

3 : Diese Funtion wird nicht mehr unterstützt.

4 : Diese Funktion wird aufgerufen, wenn eine Konfiguration aus dem
Speicher befreit wird. Gibt diese Funktion einen Fehler zurück. So wird
die Freigabe abgebrochen. Hat man z.B. im entsprechenen
Konfigurationsfile z.B. einem externen Screenmanager gesagt, daß er
einen Screen für unsere Konfiguration öffnen soll, kann man ihn in
dieser Funktion sagen, daß der Screen nicht mehr gebraucht wird und somit
geschlossen werden kann. Sehen sie hirzu auch bei der Funktion Screen und
im Kapitel PublicScreens nach. Für diesen Zweck existieren mittlerweile
die Befehle Begin/Closefür Konfigurationsfiles und Start/Quit für die
[1mSTARTUP.CONFIG[0m. Bitte diese Befehle nutzen !

Für Beispiele hierzu schauen sie bitte in die Konfigurationsdateien.

    [3mSiehe auch[0m =>

Compare
=======

    [3mAufruf       :[0m Compare String1/S String2 /S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Vergleicht die beiden Strings und gibt je nach
Ergebnis die Werte [3mLOWER[0m,[3mHIGHER[0m oder [3mEQUAL[0m in _RN zurück.  Da
Zahlen bei der Übergabe automatisch in Zeichenketten umgewandelt werden,
kann man mit dieser Funktion auch Zahlen untereinander als auch Zahlen
und Zeichenketten miteinander vergleichen.

    [3mSiehe auch[0m => If, Break

If
==

    [3mAufruf       :[0m If Command/F Then/F Else/F Tags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mIf[0m führt die angegebene Funktionsliste
[1mCommand[0m aus.  Gibt diese Funktion keinen Fehler zurück und ist
_RN=0, so wird die Funktionsliste [1mThen[0m ausgeführt, ansonsten die
Funktionsliste [1mElse[0m. Ist das Tag [1m@CLEARRN[0m gesetzt, so wird _RN vor
der Ausführung von [1mCommand[0m gelöscht. Dies ist z.B. wichtig, wenn _RN
ungleich 0 ist, [1mCommand[0m _RN nicht ändert und [1mIf[0m dementsprechend nur
auf die Rückgabe eines Fehlers reagieren soll.

    [3mSiehe auch[0m => Break

Break
=====

    [3mAufruf       :[0m Break Compare/N String1/S String2/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mBreak[0m vergleicht [1mString1[0m und [1mString2[0m Und
stellt, das sie gleich ([3mEQUAL[0m), [1mString1[0m kleiner als [1mString2[0m
([3mLOWER[0m) oder größer ([3mEQUAL[0m) ist.  Ist nun [1mCompare[0m gleich dem
Resultat, so gibt [1mBreak[0m einen Fehler zurück und die aktuelle
Befehlsfolge wird abgebrochen.  Beispiel :
     Break EQUAL "Hallo" "Hallo"
     Break LOWER 255 13
Das erste Beispiel bricht ab, das Zweite nicht.

    [3mSiehe auch[0m => If

SetError
========

    [3mAufruf       :[0m SetError

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Bricht die anktuelle Anweisungsfolge ab.

    [3mSiehe auch[0m => Break, If, Compare

SetVar
======

    [3mAufruf       :[0m SetVar Variable/S Wert/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Setzt den Inhalt der einer internen Variable auf den
Wert [1mWert[0m.  [1mVariable[0m ist dabei der gequotete Name der Variable.
Existiert die Variable nichts, so wird ein Fehler zurückgegeben.
Beispiel :
     SetEnv "_FileName" "s:startup-sequence"
Setzt den Dateinamen des aktuellen Textes auf [1ms:startup-sequence[0m.

    [3mSiehe auch[0m => GetVar

GetVar
======

    [3mAufruf       :[0m GetVar Variable/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Liest den Wert der Variablen [1mVariable[0m aus und
schreibt ihn als String in die Variable _RS.  Existiert die angegebene
Variable nicht, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => SetVar

GetConst
========

    [3mAufruf       :[0m GetConst Konstante/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Liest den Wert der Konstante [1mKonstante[0m aus und
schreibt ihn als String in die Variable _RS.  Existiert die angegebene
Konstante nicht, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => SetVar

SetEnv
======

    [3mAufruf       :[0m SetEnv Variable/S Wert/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Setzt den Wert einer lokalen DOS-Enviromentvariabeln
auf den Wert [1mWert[0m.

    [3mSiehe auch[0m =>

GetEnv
======

    [3mAufruf       :[0m GetEnv Variable/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Ließt den Wert der angegebenen
Dos-Enviromentvariabeln aus und schreibt ihn in die Variable _RS

    [3mSiehe auch[0m =>

System
======

    [3mAufruf       :[0m System Befehl/S Flags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m System startet einen Befehl (mit Argumenten).  Ist
[1m@ASYNC[0m ind [1mFlags[0m gesetzt, so wird der Befehl im Hintergrund gestartet.
D.h., daß mit WRITE während das Programm läuft, weiter gearbeitet
werden kann.  Ansonsten wartet WRITE darauf, daß das Programm beendet
wird.  Aus leicht einsichtigen Gründen, kann nur ein Fehler
zurückgegeben werden, wenn [1m@ASYNC[0m nicht gesetzt ist.

    [3mSiehe auch[0m =>

SetMark
=======

    [3mAufruf       :[0m SetMark

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Setzt den Anfang bzw. das Ende eines Blockes,welcher
dann mit [1mCut[0m, [1mCopy[0m ... bearbeitet werden kann.  Setzt mann zum ersten
Mal eine Marke, so verändert sich der Mauszeiger in ein Visier (???) und
ein [1mM[0m erscheint bei den Flags in der Titelzeile.  Desweiteren ist ein
zeichengroßes Kästen unter dem Cursor zu sehen.  Man ist im Mark-Modus.
Dieser bleibt solange erhalten , wie man nicht auf irgendeine Art einen
Zeilenumbruch tätigt.  Nun kann mit den gleichen Verfahren das Ende des
Blockes gewählt werden.  Ist das Ende des Blockes vor dem Anfang, so
werden Anfangs- und Endmarken automatisch vertauscht.  Ist dies getan, so
wird der Block als Ganzes farblich hervorgehoben.  Der Block ist markiert
und bleibt dies auch, bis ein Zeilenumbruch durchgeführt wurde.  Nun
kann der Block mit den Blockfunktionen bearbeitet werden.

Mit einen Doppelklick mit der linken Maustaste ist es z.B. möglich
Marken zu setzen.

    [3mSiehe auch[0m => UnMark,Mark

Mark
====

    [3mAufruf       :[0m Mark VonX,VonY,BisX,BisY/N Tags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Markiert den angegebenen Block.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => Mark, UnMark, Konstantenbeschreibung

UnMark
======

    [3mAufruf       :[0m UnMark

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mUnMark[0m löscht den markierten Block.  Diese
Funktion wird auch aufgerufen, wenn der rechte Mausknopf gedrückt wurde,
ohne ein Menü auszuwählen.

    [3mSiehe auch[0m => SetMark,Mark

DeleteBlock
===========

    [3mAufruf       :[0m DeleteBlock

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht den markierten Block.  Ist kein Block
markiert, so wird mit einem Fehler abgebrochen.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => CopyBlock, InsertBlock, CopyArea, DeleteArea

CopyBlock
=========

    [3mAufruf       :[0m CopyBlock Puffername/S

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Kopiert den markierten Block in den angegebenen
Zwischenspeicher.  Ist kein Block markiert, so wird mit einem Fehler
abgebrochen.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => DeleteBlock, InsertBlock, CopyArea, DeleteArea

InsertBlock
===========

    [3mAufruf       :[0m InsertBlock Puffername/S

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Fügt den Inhalt des angegebenen Blocks an der
aktuellen Cursorposition in den Text ein.  Ist der angegebene Block leer,
so wird mit einem Fehler abgebrochen.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => CopyBlock, DeleteBlock, CopyArea, DeleteArea

DeleteArea
==========

    [3mAufruf       :[0m DeleteArea VonX,VonY,BisX,BisY/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Genau die gleiche Funtion wie DeleteBlock, nur das
hier ein beliebiger Block angegeben werden kann.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => CopyBlock, InsertBlock, CopyArea,
Konstantenbeschreibung

CopyArea
========

    [3mAufruf       :[0m CopyArea Buffername/S VonX,VonY,BisX,BisY/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Genau die gleiche Funtion wie CopyBlock, nur das
hier ein beliebiger Block angegeben werden kann.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => DeleteBlock, InsertBlock, DeleteArea,
Konstantenbeschreibung

SaveBuffer
==========

    [3mAufruf       :[0m SaveBuffer Dateiname/S Puffername/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Speichert den Inhalt des angegebenen Puffers als
Datei mit dem Namen [1mDateiname[0m ab.  Treten beim Abspeichern Fehler auf,
so wird mit einem Fehler abgebrochen.  Achtung !  Die
Einstellungsmöglichkeiten für Textfiles, wie z.B. die Abspeicherung von
Tabs, gelten hier nicht.  Blöcke werden immer im Standard-ADSCII-Format
abgespeichert.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => LoadBuffer

LoadBuffer
==========

    [3mAufruf       :[0m LoadBuffer Dateiname/S Puffername/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Läd die Datei [1mDateiname[0m in den angegebenen Block.
Treten beim Laden Fehler auf, so wird mit einem Fehler abgebrochen.
Achtung !  Die Einstellungsmöglichkeiten für Textfiles, wie z.B. die
Abspeicherung von Tabs, gelten hier nicht.  Blöcke werden immer im
Standard-ADSCII-Format abgespeichert.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => SaveBuffer

ClearBuffer
===========

    [3mAufruf       :[0m ClearBuffer Puffername/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht den angegebenen Puffer. Ist der Buffer noch
nicht vorhanden wird er erzeugt.

    [3mSiehe auch[0m =>

StrToBuffer
===========

    [3mAufruf       :[0m StrToBuffer String/S Puffername/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Der angegebene Buffer wird mit dem angegebenen
String belegt.

    [3mSiehe auch[0m =>

BufferToStr
===========

    [3mAufruf       :[0m BufferToStr Puffername/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Die maximal ersten 256 Zeichen des angegebenen
Buffers werden in [1m_RS[0m zurückgegeben.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m =>

ClipToBuffer
============

    [3mAufruf       :[0m ClipToBuffer Puffername/S Clipboardnummer/N

    [3mBenötigt     :[0m [1miffparse.library[0m

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Kopiert den Inhalt des angebenen Clipboarddevices in
eine internen Puffer.  Für weitere Informationen über die Funktion und
die Arbeitsweise des Clipboarddevices schauen sie bitte in die
Handbücher, die sie mit ihrem Amiga erhalten haben.

    [3mSiehe auch[0m => BufferToClip

BufferToClip
============

    [3mAufruf       :[0m BufferToClip Puffername/S Clipboardnummer/N

    [3mBenötigt     :[0m [1miffparse.library[0m

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Kopiert den angegeben internen Puffer in ein
Clipboarddevice.  Für weitere Informationen über die Funktion und die
Arbeitsweise des Clipboarddevices schauen sie bitte in die Handbücher,
die sie mit ihrem Amiga erhalten haben.

Durch das Setzten des Tags [1m@SILENT[0m können eventuelle Fehlerrequester
unterdrückt werden.

    [3mSiehe auch[0m => BufferToClip

BlockLeft
=========

    [3mAufruf       :[0m BlockLeft x/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Verschiebt den markierten Block als Ganzes um [1mx[0m
Zeichen nach links.

    [3mSiehe auch[0m => BlockRight

BlockRight
==========

    [3mAufruf       :[0m BlockRight x/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Verschiebt den markierten Block als Ganzes um [1mx[0m
Zeichen nach rechts.

    [3mSiehe auch[0m => BlockRight

BlockLftAlig
============

    [3mAufruf       :[0m BlockLftAlig Spalte/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Versucht alle Zeilen im markierten Block linksbündig
auf die angegebene Spalte auszurichten.

    [3mSiehe auch[0m => BlockRghtAlig

BlockRghtAlig
=============

    [3mAufruf       :[0m BlockRghtAlig Spalte/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Versucht alle Zeilen im markierten Block
rechtsbündig auf die angegebene Spalte auszurichten.

    [3mSiehe auch[0m =>

BlockCenter
===========

    [3mAufruf       :[0m Diese Funktion ist noch nicht implementiert

    [3mBenötigt     :[0m

    [3mSetzt Fehler :[0m

    [3mErgebnisse   :[0m

    [3mBeschreibung :[0m

    [3mSiehe auch[0m =>

CursorUp
========

    [3mAufruf       :[0m CursorUp Mode/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Ist [1mMode[0m=0, so wird der Cursor einfach eine Zeile
nach oben bewegt.  Ist [1mMode[0m=1, so wird der Cursor ebenfalls eine Zeile
nach oben bewegt und, falls der Cursor dann hinter dem letzten Zeichen in
dieser Zeile steht, einen Buchstaben hinter dem Ende der Zeile
positioniert.  Steht der Cursor bereits in der ersten Zeile, so wird ein
Fehler zurückgegeben.

    [3mSiehe auch[0m =>

CursorDown
==========

    [3mAufruf       :[0m CursorDown Mode/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Funktioniert wie CursorUp, nur daß der Cursor eine
Zeile nach unten bewegt wird.

    [3mSiehe auch[0m =>

CursorRight
===========

    [3mAufruf       :[0m CursorRight Mode/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Ist [1mMode[0m=0, so wird der Cursor eine Stelle nach
rechts bewegt.  Ist [1mMode[0m=1, so wird der Cursor ebenfalls eine Stelle
nach rechts bewegt.  Steht er dann jedoch hinter dem letzten Zeichen der
Zeile, springt er an der Anfang der nächsten.  Existiert diese nicht, so
wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m =>

CursorLeft
==========

    [3mAufruf       :[0m CursorLeft

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m  Ist [1mMode[0m=0, so wird der Cursor eine Stelle nach
links bewegt.  Steht der Cursor bereits in der ersten Spalte, so wird ein
Fehler zurückgegeben.  Ist [1mMode[0m=1, so wird der Cursor ebenfalls eine
Stelle nach links bewegt.  Steht er jedoch in der ersten Spalte der
Zeile, springt er ans Ende der letzten.  Existiert diese nicht, so wird
ein Fehler zurückgegeben.

    [3mSiehe auch[0m =>

NextWord
========

    [3mAufruf       :[0m NextWord

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Springt zum nächsten Wort.  Die aktuelle
Wortdefinition wird durch den Inhalt der Variable _WordDef angegeben.
Schauen sie für weitere Information bitte dort nach.  Kann keine
nächstes Word gefunden werden, so gibt [1mNextWord[0m einen Fehler zurück.

    [3mSiehe auch[0m => LastWord

LastWord
========

    [3mAufruf       :[0m LastWord

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Springt zum nächsten Wort.  Die aktuelle
Wortdefinition wird durch den Inhalt der Variable _WordDef angegeben.
Schauen sie für weitere Information bitte dort nach.  Kann keine
vorheriges Wort gefunden werden, so gibt [1mNextWord[0m einen Fehler zurück.

    [3mSiehe auch[0m => NextWord

PageUp
======

    [3mAufruf       :[0m PageUp Percent/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Blättert [1mPercent[0m Prozent einer dargestellten Seite
nach oben.  Beispiel :
     PageUp 75
Blättert 75% der dargestellten Seite nach oben.  Bei einem Fenster von
z.B. 30 Zeilen sind dies 21 Zeilen.

    [3mSiehe auch[0m => PageDown

PageDown
========

    [3mAufruf       :[0m PageDown Percent/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Blättert [1mPercent[0m Prozent einer dargestellten Seite
nach unten.  Beispiel :
     PageDown 75
Blättert 75% der dargestellten Seite nach unten.  Bei einem Fenster von
z.B. 30 Zeilen sind dies 21 Zeilen.

    [3mSiehe auch[0m => PageUp

Goto
====

    [3mAufruf       :[0m Goto x/N y/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Goto springt, wenn vorhanden zur x. Zeile und y.
Spalte.  Dabei werden auch Positionsangaben mittels der Konstanten
[1m@CURSOR[0m bis [1m@EOT[0m unterstützt.

    [3mSiehe auch[0m => Konstantenbeschreibung

GotoMouse
=========

    [3mAufruf       :[0m GotoMouse Tags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Positioniert den Cursor unter den Mauszeiger. Ist
das Tag [1m@SAMEPOS[0m gesetzt, wird der Cursor nur gesetzt, wenn sich die
Maus bereits über dem Cursor befindet. Dies ist in Zusammenhang mit
Doppelklicks (DoubleKey und SetMark nützlich.

    [3mSiehe auch[0m =>

SetTextMark
===========

    [3mAufruf       :[0m SetTextMark Nummer/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mSetTextMark[0m setzt in der aktuellen Zeile eine
(nämliche Nummer [1mNummer[0m) temporäre Marke.  Beachten sie bitte, daß
sich WRITE nur die Zeilennummer merkt, so daß nach Veränderungen im
Text die Marke auf die falsche Stelle zeigt.

    [3mSiehe auch[0m => GoTextMark

GoTextMark
==========

    [3mAufruf       :[0m GoTextMark Nummer/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Springt zur angegebenen Textmarke.

    [3mSiehe auch[0m => SetTextMark

Find
====

    [3mAufruf       :[0m Find VonX/N VonY/N BisX/N BisY/N Mode/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mFind[0m sucht ab der aktuellen Cursorposition nach den
Inhalt der Variable _FindString.  Ist der Inhalt der Variable _CaseSense
ungleich 0, so unterscheidet [1mFind[0m dabei zwischen Groß- und
Kleinschreibung, ansonsten nicht.  Kann das gesuchte Wort nicht gefunden
werden, so wird ein Fehler zurückgegeben.

Ist der Inhalt der Variable _WordDef ungleich 0, so sucht [1mFind[0m nur nach
ganzen Wörtern, ansonsten auch nach Wortteilen. Die Definition eines
Wortes hängt von dem Inhalt der Variable _WordDef ab.

Kann das gesuchte Wort nicht gefunden werden, so wird ein Fehler
zurückgegeben.

Ist in [1mMode[0m [1m@SILENT[0m gesetzt, so wird das Nichtfinden des Wortes nicht
mittels eines Requesters angezeigt.

Mittels der Tags [1m@CASE[0m, [1m@NOCASE[0m, [1m@WORD[0m und [1m@NOWORD[0m kann der Wert
der Variablen _CaseSense und _WordDef für diesen Funktionaufruf direkt
geändert werden, ohne daß globale Einstellungen verändert werden.

Über die Variablen VonX/Y und BisX/Y kann der Textbereich angegeben
werden, auf den sich die Suche beziehen soll. [1m@CURSOR @CURSOR @EOT
@EOT[0m steht z.B. für die Suche von der Cursorposition bis zum Ende des
Textes.  [1m@MARKA @MARKA @MARKB @MARKB[0m für die Suche in dem markierten
Block.

Beachten sie, daß, wenn VonX/Y gleich der Cursorposition ist, [1mFind[0m aus
einsichtigen Gründen erst ab den nachfolgenden Buchstaben sucht. Dieses
Verhalten kann durch das Setzten des Tags [1m@FIRST[0m abgestellt werden.

Wird das Tag [1m@COUNT[0m gesetzt, so springt [1mFind[0m nicht zum ersten
Vorkommnis sondert die die zahl der gefundenen Wörter im angegebenen
Bereich in _RN zurück.

    [3mSiehe auch[0m => Replace, FindPattern, Konstantenbeschreibung

Replace
=======

    [3mAufruf       :[0m Replace VonX/N VonY/N BisX/N BisY/N Mode/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m [1mReplace[0m sucht nach dem unter Find angegebenen
Schema nach dem angegebenen Wort und ersetzt es durch den Inhalt der
Variable _ReplaceString.

Ist [1m@NOREQ[0m nicht in [1mMode[0mgesetzt, so wird vorher ein Requester
geöffnet, in dem das Ersetzen explizit bestätigt werden muß.

Ist auch hier in [1mMode[0m [1m@SILENT[0m gesetzt, so wird das Nichtfinden des
Wortes nicht mittels eines Requesters angezeigt.

Ist [1m@ALL[0m gesetzt, so ersetzt die Funktion nicht nur das nächste
Vorkommen, sonndern alle Vorkommen bis des Ende des Textes erreicht ist
oder die Suche abgebrochen wurde.

Ist bei gesetztem [1m@ALL[0m [1m@NOREQ[0m nicht in [1mMode[0mgesetzt, so wird bei
jedem gefundenen Wort ein Requester geöffnet, in dem man [1mReplace[0m
abbrechen kann, das aktuelle Wort uberspringen oder ersetzten kann.

Für die Parameter VonX/Y, BisX/Y sowie weitere Tags sehen sie Bitte bei
der Beschreibung der Funktion Find nach.

Die Zahl der Ersetzungen wird in [1m_RN[0m zurückgegeben.

    [3mSiehe auch[0m => Find, FindPattern, Konstantenbeschreibung

ReplaceList
===========

    [3mAufruf       :[0m ReplaceList xStart/N yStart/N xEnd/N yEnd/N Liste/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Noch nicht implementiert.

    [3mSiehe auch[0m => Konstantenbeschreibung

FindPattern
===========

    [3mAufruf       :[0m FindPattern Von,Bis/N Flags/T

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Sucht von der Zeile [1mvon[0m bis zur Zeile [1mbis[0m nach
dem DOS-Pattern, welches in der Variable _PatCase bzw.  _PatNoCase
angegeben ist. Dies hängt davon ab, ob [1m@CASE[0m oder [1m@NOCASE[0m in
[1mFlags[0m angegeben wird. Wird kein von beiden angegeben, so wird die
aktuelle Preferenceseinstellung benutzt. Durch das setzten von
[1m@SILENT[0m kann die Meldung des Nichtfindens des Patterns abgeschaltet
werden.

Steht der Cursor in der Startzeile, so wird es ab der Position hinter dem
Cursor gesucht.

    [3mSiehe auch[0m => Find, Replace, Konstantenbeschreibung

MatchBracket
============

    [3mAufruf       :[0m MatchBracket

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mMatchBracket[0m sucht zu dem Zeichen unter dem Cursor
das konjugierte.  Unterstützt werden folgende Paare : [1m([0m[1m)[0m, [1m{[0m[1m}[0m,
[1m[[0m[1m][0m, [1m<[0m[1m>[0m, [1m«[0m[1m»[0m.  [1mMatchBracket[0m unterstützt dabei auch
Verschachtelungen.  Im folgenden Beispiel springt [1mMatchBracket[0m, wenn
der Cursor auf dem ersten Zeichen steht, zum letzten :
     {
       {
         /* Dies ist ein Test */
         arg[0]:=0;
       }
     }
Desweiteren wird für die folgenden Zeichen, zum nächsten Vorkommen
gesprungen : ', `, ".

Eine interessante Tastaturbelegung ist:


     KEY ")"
       WRITETEXT ")"
       CURSORLEFT 0
       MATCHBRACKET
       DELAY 10
       MATCHBRACKET
       CURSORRIGHT 0
       ;

Was dafür sorgt, daß der Cursor, immer wenn man [1m)[0m drückt, der Cursor
kurz zu entsprechenden öffnenden Klammer springt.

    [3mSiehe auch[0m =>

Return
======

    [3mAufruf       :[0m Return

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Bricht die aktuelle Zeile an der Cursorposition um.
Beispiel :
       sadlkjsadf asf gra htrhtrzrtgre
                           ^
                           Cursor
     
      wird zu...
     
       sadlkjsadf asf gra h
     trhtrzrtgre

    [3mSiehe auch[0m => _AutoIndent

Delete
======

    [3mAufruf       :[0m Delete

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht das Zeichen unter dem Cursor.  Steht der
Cursor hinter dem letzten Zeichen einer Zeile, so wird die nächste Zeile
in die Aktuelle geholt.

    [3mSiehe auch[0m =>

DeleteToEOL
===========

    [3mAufruf       :[0m DeleteToEOL

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mDeleteToEOL[0m löscht die aktuelle Zeile von der
aktuellen Cursorposition bis zum Ende der Zeile.

    [3mSiehe auch[0m => Delete, DeleteLine, UnDelLine

DeleteLine
==========

    [3mAufruf       :[0m DeleteLine

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mDeleteLine[0m löscht die aktuelle Zeile.  Die
zuletzt gelöschte Zeile kann kann mit UnDelLine wieder eingefügt
werden. Desweitern wird sie an den Anfang der Liste
[1mDeleteLine-History[0m angefügt.

    [3mSiehe auch[0m => Delete, DeleteToEOL, UnDelLine

UnDelLine
=========

    [3mAufruf       :[0m UnDelLine

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mUnDelLine[0m fügt die zuletzt mit DeleteLine
gelöschte Zeile wieder über der aktuellen ein. Ist das Tag [1m@NODUP[0m
gesetzt, wird diese Zeile gleichzeitig aus der Liste
[1mDeleteLine-History[0m gelöscht.

    [3mSiehe auch[0m => Delete, DeleteToEOL, DeleteLine

BackSpace
=========

Tab
===

    [3mAufruf       :[0m Tab Mode/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mTab[0m springt zur nächsten Tabulatormarke.  Diese
sind gerade _TabLength Zeichen von einander entfehrnt.  Ist Mode=0, so
springt nur der Cursor zum Tabulator.  Ist Mode=1 so der Text unter dem
Cursor bis zum Tabulator bewegt.

    [3mSiehe auch[0m => BackTab

BackTab
=======

    [3mAufruf       :[0m BackTab

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nichts

    [3mErgebnisse   :[0m Nichts

    [3mBeschreibung :[0m [1mBackTab[0m springt zur vorherigen Tabulatormarke.
Diese sind gerade _TabLength Zeichen von einander entfehrnt.

    [3mSiehe auch[0m =>

UpperBlock
==========

    [3mAufruf       :[0m UpperBlock VonX,VonY,BisX,BisY/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Konvertiert alle Buchstaben im angebenen Textbereich
in Großbuchstaben. Dabei werden auch internationale Zeichen je nach der
aktuellen Ländereinstellung des Betriebssystems berücksichtigt.

Die Positionen werden dabei mittels der Konstanten [1m@CURSOR[0m bis
[1m@EOT[0m angegeben.

    [3mSiehe auch[0m => LowerBlock, Konstantenbeschreibung

LowerBlock
==========

    [3mAufruf       :[0m LowerBlock VonX,VonY,BisX,BisY/N

    [3mBenötigt     :[0m

    [3mSetzt Fehler :[0m

    [3mErgebnisse   :[0m

    [3mBeschreibung :[0m Konvertiert alle Buchstaben im angegebenen
Textbereich zu Kleinbuchstaben. Dabei werden auch internationale Zeichen
je nach der aktuellen Ländereinstellung des Betriebssystems
berücksichtigt.

Die Positionen werden dabei mittels der Konstanten [1m@CURSOR[0m bis
[1m@EOT[0m angegeben.

    [3mSiehe auch[0m => UpperBlock, Konstantenbeschreibung

WriteChar
=========

    [3mAufruf       :[0m WriteChar DecimalCode/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m WriteChar schreibt das Zeichen mit dem ASCII-Code
[1mDecimalCode[0m an die aktuelle CursorPosition.  Das Zeichen geht dabei an
die gleiche Routine die auch für die über die Tastatur eingegebenen
Zeichen zuständig ist.  D. h. alle nicht dastellbaren Zeichen, werden
auch nicht gedruckt.  Diese Funktion ist auch völlig unabhängig von der
aktuellen Tastaturbelegung.  Ist [1mA[0m mit einer Funktion belegt, so wird
[1mWriteChar 65[0m dennoch ein [1mA[0m schreiben.

    [3mSiehe auch[0m => WriteText

WriteText
=========

    [3mAufruf       :[0m WriteText Zeichenkette/S

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m WriteText funktioniert genauso wie WriteChar.  Nur
wird hier ein ganzer String ausgegeben.  Auch hier weren nicht
dastellbare Zeichen herausgefiltert.  Die Möglichkeit der Angabe von
Steuersequencen in der Zeichenkette besteht also nicht.

    [3mSiehe auch[0m => WriteChar

Key
===

    [3mAufruf       :[0m Key Definition/S Befehlsfolge/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Key belegt eine beliebige Taste mit einer
Funktionsfolge.  Bei [1mDefinition[0m handelt es sich um eine Tastatur- oder
Mausbeschreibung, wie sie auch für die [1mCommodities[0m des Betriebssystem
verwendet wird. Schauen sie bitte für eine genauere Beschreibung in ihren
Handbüchern unter dem Stichwort [1mCommodities[0m nach.  Erlaubt ist
momentan nur der Typ [1mrawkey[0m.

    [3mSiehe auch[0m => DoubleKey

DoubleKey
=========

    [3mAufruf       :[0m DoubleKey Definition1,Definition2/S Befehlsfolge/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Diese Funktion arbeitet im Prinzip genauso, nur das
hier die Befehlsfolge nur dann ausgeführt wird, wenn erst die
Befehlsfoge 1 und dann im Zeitintervall eines Doppellickes die Definition
2 (die unterschiedlich zu der Definition 1 sein kann) gedrückt wird.

    [3mSiehe auch[0m => Key

ClearKeys
=========

    [3mAufruf       :[0m ClearKeys

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht die komplette mit Key eingegebene
Tastaturbelegung. Diese Funktion sollte mit Vorsicht benutzt werden, da
nach ihrem Aufruf ein sinnvolles Arbeiten mit WRITE kaum noch möglich
ist.

    [3mSiehe auch[0m => Key

SetHotKey
=========

    [3mAufruf       :[0m SetHotKey Nummer/N Tastensequenz/S Funktion/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m WRITE besitzt intern eine Reihe von Hotkeys, die mit
einer beliebigen Tastenkombinationsbeschreibung über die
[1mcommodities.library[0m mit einer beliebigen WRITE-internen Funktion
belegt werden können.  Da die [1mcommodities.library[0m benutzt wird, muß
die Tastensequenz den Richtlinien, die auch für alle anderen Commodities
gelten, folgen.  Für das genaue Format der Tastensequenz schauen sie
demnach in ihrer Dokumentation, die sie beim Kauf ihres Computers
bekommen haben, nach.  Funktion ist eine beliebige Funktionsfolge.  Ein
bereits bestehender HotKey wird durch eine Redefinition überschrieben.

    [3mSiehe auch[0m =>

ClearHotKey
===========

    [3mAufruf       :[0m

    [3mBenötigt     :[0m

    [3mSetzt Fehler :[0m

    [3mErgebnisse   :[0m

    [3mBeschreibung :[0m

    [3mSiehe auch[0m => DoBuffer, DoString, ParseBuffer

Menu
====

    [3mAufruf       :[0m Menu Titel/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mMenu[0m hängt an die Menüleiste ein neues Menü mit
dem Titel [1mTitel[0m an.

    [3mSiehe auch[0m => Item, Sub, ItemBar, SubBar, ClearMenu

Item
====

    [3mAufruf       :[0m Item Titel/S ShortCut/S Funktionliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mItem[0m hängt an den zuletzt initialisierten Menü
einen Menüpunkt mit dem Titel [1mTitel[0m und dem Shortcut [1mShortCut[0m an und
belegt diesen mit der angegeben Funktionsliste.  Diese wird immer dann
automatisch ausgeführt, wenn der Menüpunkt selektiert wird. Anstelle
eines ShortCut-Buchstabens kann auch eine Kommodities-Tastenbeschreiben
angegeben werden. Diese erscheint dann ab OS 3.0 neben dem Menüpunkt.
Gleichzeitig wird die entsprechenden Taste mit der Funktion des
Menüpunktest belegt.

Wird (ab OS3.0) die Helptaste während der Mauszeiger über einem Menü
ist gedrückt, so wird ein Requester geöffnet, der die Funktionsbelegung
dieses Menüpunktes zeigt. c

    [3mSiehe auch[0m => Menu, Sub, ItemBar, SubBar, ClearMenu

Sub
===

    [3mAufruf       :[0m Sub Titel/S ShortCut/S Funktionliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mSub[0m hängt an den zuletzt initialisierten
Menüpunkt ein Untermenü mit dem Titel [1mTitel[0m und dem Shortcut
[1mShortCut[0m an und belegt diesen mit der angegeben Funktionsliste.
Diese wird immer dann automatisch ausgeführt, wenn das Untermenü
selektiert wird.

Weitere Informationen, siehe Item

Für Menüpunkte gibt es auch eine Onlinehilfe. Siehe Item.

    [3mSiehe auch[0m => Menu, Item, ItemBar, SubBar, ClearMenu

ItemBar
=======

    [3mAufruf       :[0m Itembar

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hängt an den letzten Menüpunkt einen nicht
selektierbaren Querstricht an.  Diese Funktion sollte zur optischen
Aufteilung eines Menüs benutzt werden.

    [3mSiehe auch[0m => Menu, Item, Sub, SubBar, ClearMenu

SubBar
======

    [3mAufruf       :[0m SubBar

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hängt an das letzte Untermenü einen nicht
selektierbaren Querstricht an.  Diese Funktion sollte zur optischen
Aufteilung eines Menüs benutzt werden.

    [3mSiehe auch[0m => Menu, Item, Sub, ItemBar, ClearMenu

ClearMenu
=========

    [3mAufruf       :[0m ClearMenu

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht die komplette eingegebene Menübelegung.
Diese Funktion sollte mit Vorsicht benutzt werden, da nach ihrem Aufruf
ein sinnvolles Arbeiten mit WRITE kaum noch möglich ist.

    [3mSiehe auch[0m => Menu, Item, Sub, ItemBar, SubBar

WaitPointer
===========

    [3mAufruf       :[0m WaitPointer

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Setzt für alle Fenster den Warte-Mauszeiger.
Sinnvoll, wenn z.B. ein Makro oder REXX-Script etwas länger dauert und
man dem Benutzer zeigen möchte, daß WRITE noch arbeitet und nicht etwa
abgestürzt ist.

    [3mSiehe auch[0m => NormalPointer

NormalPointer
=============

    [3mAufruf       :[0m NormalPointer

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Setzt Setzt den Mauszeiger wieder in den
Normalzustand.

    [3mSiehe auch[0m => WaitPointer

DoREXX
======

    [3mAufruf       :[0m DoREXX DateiName/S Flags/T

    [3mBenötigt     :[0m REXX-Libraries im [1mlibs:[0m-Verzeichnis. RX-Befehl.

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Führt die angegebe Datei als REXX-Script aus.  Je
nach dem, ob [1m@ASYNC[0m in [1mFlags[0m gesetzt ist oder nicht, wartet WRITE auf
Beendigung des Scripts oder nicht.  Soll das Script auf auch Kommandos an
WRITE schicken, so sollte [1m@ASYNC[0m gesetzt (das Script wartet sonst
darauf, daß WRITE die Befehle ausführt, während WRITE darauf wartet
das das Script ausgeführt wird), außerdem sollte man vorher eventuell
LockWindow aufrufen, da die Befehle immer an das aktive Fenster gehen und
wenn während der Ausführung ein anderes Fenster aktiviert wird, gibt es
ein heilloses Chaos.

    [3mSiehe auch[0m => LockWindow, OpenPort, ClosePort, WaitPort

LockWindow
==========

    [3mAufruf       :[0m LockWindow ID/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m LockWindow lockt den Ed mit dem zugehörigen ID.
Das heißt, daß alle Befehle, die über die REXX-Schnittstelle kommen,
auf den gelockten Ed wirken, selbst wenn zwischendurch andere Fenster
aktiviert werden etc.

Ein gelocktes Fenster sollte mit [1mLockWindow 0[0m vor Verlassen des
REXX-Script wieder entlockt werden, da sonst Scripte, die ein Fenster
nicht explizit locken, alle Nachrichten ebenfalls an diesen Ed schicken.
Ein erneuter Aufruf von [1mLockWindow[0m überschreibt einen alten Lock.
Kann der angegebene ID nicht gefunden werden, so wird ein Fehler
zurückgegeben.

Sollen mehrere Script gleichzeitig gestartet werden und diese auf
verschiedene Fenster wirken, so benutzen sie bitte die Funktionen
OpenPort, ClosePort, WaitPort.

    [3mSiehe auch[0m => OpenPort, ClosePort, WaitPort

NextEd
======

    [3mAufruf       :[0m NextEd ID/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Aktiviert den nächsten Ed, dessen ID nach dem
angegebenen kommt.  Kann kein weiterer ID gefunden werden, so gibt
[1mNextEd[0m einen Fehler zurück.

    [3mSiehe auch[0m =>

OpenPort
========

    [3mAufruf       :[0m OpenPort ID/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m OpenPort öffnet einen persönlichen REXX-Port für
den Ed mit dem angegebenen ID.  Der Name des Ports wird in _RS
zurückgegeben.  Kann der Port nicht geöffnet werden (ein Task kann nur
eine begrenzte Zahl von Ports verwalten) so wird ein Fehler
zurückgegeben.

Bitte beachten sie das man für einen Ed nicht eines zweiten PrivtaePort
öffnen kann. Ein zweiter Aufruf von OpenPort gibt nur einenFehler
zurück.

    [3mSiehe auch[0m => ClosePort, WaitPort

ClosePort
=========

    [3mAufruf       :[0m ClosePort ID/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mClosePort[0m schließt den mit OpenPort geöffneten
REXX-Port wieder.  Kann der Ed mit dem angegebenen ID nicht gefunden
werden, oder existiert kein Port, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => OpenPort, WaitPort

WaitPort
========

    [3mAufruf       :[0m WaitPort ID/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Wird dieser Befehl von einem REXX-Script aus
aufgerufen, so kehrt er erst zurück wenn der REXX-Port des Ed
geschlossen wird.  Dies passiert im algemeinen, wenn der Ed verlassen
(d.h. meisten, das Fenster geschlossen) wird.

    [3mSiehe auch[0m => OpenPort, ClosePort

ModifyWin
=========

    [3mAufruf       :[0m ModifyWin Mode/N

    [3mBenötigt     :[0m Fenster

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Mit [1mModifyWin[0m läßt sich ein offenes Fenster auf
verschiedene Weise manipulieren.  Mode=0 : Fenster wird gezipt.  Mode=1 :
Fenster wird aktiviert.  Mode=2 : Fenster wird nach vorne gebracht.
Mode=3 : Fenster wird nach hinten gebracht.

    [3mSiehe auch[0m => ModifyScreen

ModifyScreen
============

    [3mAufruf       :[0m ModifyScreen Mode/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Mit [1mModifyScreen[0m läßt sich der Screen, auf
welchen alle Fenster und Requester geöffnet werden, nach vorne und nach
hinten bringen.  Mode=0 : Screen nach vorne.  Mode=1 : Screen nach hinten.

    [3mSiehe auch[0m => ModifyWin

SetREXXClip
===========

    [3mAufruf       :[0m SetREXXClip ClipName/S Typ/N Nummer/N

    [3mBenötigt     :[0m Nichts/Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mSetREXXClip[0m kopiert den Inhalt einer Zeile/eines
Puffers in das REXXClipboard unter dem angegebenen Namen, wo sie dann mit
[1mgetclip(Name)[0m wider ausgelesen werden kann. Ist [1mTyp[0m=0, so wird die
Zeile mit der angegebenen [1mNummer[0m gelesen. Ist [1mTyp[0m= 1, so wird der
angegebene Puffer ins REXXClipboard geschrieben. Dabei markieren
Linefeets den Zeilenumbruch. Ist beim Auslesen der Zeile kein Ed
aktiviert, oder existiert die angegebene Zeile/der angegebene Puffer
nicht, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m =>

GetConfig
=========

    [3mAufruf       :[0m GetConfig Name/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mGetConfig[0m aktiviert die Konfiguration mit dem
angegebenen Namen, damit auf dessen Einstellungen/Variabeln
zurückgegriffen werden kann. [1mGetConfig[0m läd nicht nocht nicht geladene
Konfigurationen nach, auch kann nicht [1m""[0m für die Standardkonfiguration
angegeben werden.

    [3mSiehe auch[0m =>

SetREXXVar
==========

    [3mAufruf       :[0m SetREXXVar Name/S Which/N Welcher/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Schreibt den Inhalt einiger WRITE-internen Werte
direkt in eine AREXX-Variable. Dadurch wird die 256 Bytes Limtierung des
Parsers von WRITE bei Strings umgangen.

    [1mWhich[0m=0 schreibt den Inhalt der Zeile [1mWelcher[0m in die angegebene
Variable.  [1mWhich[0m=1 schreibt den Inhalt des Buffers [1mWelcher[0m in die
Variable.

    [3mSiehe auch[0m => GetREXXVar

GetREXXVar
==========

    [3mAufruf       :[0m GetREXXVar Name/S Which/N Welcher/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Im Gegensatz zu SetREXXVar wird hier der Inhalt einer
REXX-Variablen in eine WRITE-interne Varaile geschrieben. Die
Übergabeparameter sind die gleichen wie bei SetREXXVar

    [3mSiehe auch[0m =>

Refresh
=======

    [3mAufruf       :[0m Refresh

    [3mBenötigt     :[0m Fenster

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Aktuallisiert das EditorFenster, d.h. der sichtbare
Text wird neu geschrieben.

    [3mSiehe auch[0m =>

ChangeConfig
============

    [3mAufruf       :[0m ChangeConfig ConfigName/S

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Ändert die Konfiguration eines Eds auf die
Konfiguration [1mConfigName[0m. Die genannte Konfiguration wird ggf.
nachgeladen.  Diese Funktion ist nützlich, wenn man zum Beispiel mit
einer minimalen Konfiguration arbeitet (Mailer etc.) und die
Leistungfähigkeit einer komplexeren Konfiguration braucht.

    [3mSiehe auch[0m =>

MacroRec
========

    [3mAufruf       :[0m MacroRec

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mMacroRec[0m startet die Aufzeichnung eines Macros.
D. h. Alle Komandos nach dem Befehl [1mMacroRec[0m bis ausschließlich dem
Befehl [1mMacroStop[0m werden aufgezeichnet.  Dabei sind ein paar Dinge zu
beachten:
  1. Mausbewegungen, sowie Aktionen die mit Mausdrücken verbunden sind,
     als auch Bewegungen am Scrollbalken werden [3mnicht[0m aufgezeichnet.

  2. Fensterwechsel etc. werden nicht aufgezeichnet.

  3. Der MacroSaver speichert nicht den (im Konfigurationsfile
     angegebenen) Quelltext, sondern den erzeugten Zwischencode.  So
     haben z.B. Variablen den Wert zum Zeitpunkt des Abspeicherns nicht
     den zum Zeitpunkt der Macroausführung.

  4. Macros können nicht rekursiv verschachtelt werden.  Erneutes
     Aufrufen von [1mMacroRec[0m löscht das alte und beginnt ein neues Makro.

    [3mSiehe auch[0m => MacroStop, MacroPlay, SetMacro, ExecuteMacro,
MacroPannel

MacroStop
=========

    [3mAufruf       :[0m MacroStop

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Stopt die Aufzeichnung eines Makros.

    [3mSiehe auch[0m => MacroRec, MacroPlay, SetMacro, ExecuteMacro,
MacroPannel

MacroPlay
=========

    [3mAufruf       :[0m MacroPlay Anzahl/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Führt das aufgezeichnete Makro [1mAnzahl[0m mal aus.

    [3mSiehe auch[0m => MacroRec, MacroStop, SetMacro, ExecuteMacro,
MacroPannel

SetMacro
========

    [3mAufruf       :[0m SetMacro Nummer/N Name/S Funktionsliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mSetMacro[0m weist einem internen Array (0...19) eine
Funktionsliste mit den angegebenen Namen als Referenz zu. Dieses kann
dann anschließen über diesen Namen wieder mit der Funktion ExecuteMacro
aufgerufen oder mittels der Funktion MacroPannel selektiert werden.

    [3mSiehe auch[0m => MacroRec, MacroStop, ExecuteMacro, MacroPannel

ExecuteMacro
============

    [3mAufruf       :[0m ExecuteMacro Name/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Führt das mittels SetMacro definierte Makro mit den
Namen [1mName[0m aus.

    [3mSiehe auch[0m => MacroRec, MacroStop, SetMacro, MacroPannel

MacroPannel
===========

    [3mAufruf       :[0m MacroPannel

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Nach dem Aufruf dieser Funktion öffnet sich ein
Requester, in dem alle mit SetMacro definierten Makros namendlich in Form
von einem Gadgetpannel aufgeführt werden. Durch drücken eines Gadgets
startet man das entsprechende Makro. Das MacroPannel kann auch mit einem
Doppelklick der rechten Maustaste geöffnet werden.

Durch das Setzen des Tags [1m@TOMOUSE[0m wird der Requester zentriert unter
dem Mauszeiger geöffnet. Siehe dazu auch das Kapitel Requester

    [3mSiehe auch[0m => MacroRec, MacroStop, SetMacro, ExecuteMacro, Requester

Undo
====

    [3mAufruf       :[0m Undo Count/S

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Mittels dieses Befehles, kann man die angegebene
Anzahl von Textveränderungen rückgängig machen. Beachten sie, daß die
maximale Anzahl der gespeicherten Veränderungen vom Wert der Variablen
_Undo abhängt.

    [3mSiehe auch[0m =>

ClearList
=========

    [3mAufruf       :[0m ClearList List/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Lösche die angegebene Liste.

    [3mSiehe auch[0m =>

Addlist
=======

    [3mAufruf       :[0m AddList String/S List/N Tags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hängt an die angegebene Liste den String
[1mString[0m an. Ist in [1mTags[0m [1m@NODUP[0m gesetzt, wird der String nun an
die Liste angehängt, wenn er nicht schon bereits vorhanden ist.

    [3mSiehe auch[0m =>

RemoveList
==========

    [3mAufruf       :[0m RemoveList Name/S Element/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Löscht das n-te Element aus der angegebenen Liste.
Die Elemente weden von 1 bis zur Größe der Liste heraufgezählt.

    [3mSiehe auch[0m =>

Push
====

    [3mAufruf       :[0m Push Name/S Eintrag/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Fügt den Eintrag an Position 1 der Liste ein.

    [3mSiehe auch[0m =>

Pop
===

    [3mAufruf       :[0m Pop Name/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Gibt den Inhalt des ersten Elementes der Liste in
_RS zurück und löscht den Eintrag anschließend.

    [3mSiehe auch[0m =>

ShowList
========

    [3mAufruf       :[0m ShowList Lists/N Zahl/N Tags/T

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Zeigt die angegebene Liste mittels eines
Listerequester.  Ist [1m@Select[0m in Tags gesetzt, so kann einer der Strings
selektiert werden. Ist ein String selektiert worden, so gibt
[1mShowList[0m keinen Fehler zurück. Der String ist aus der Variable _RS
auslesbar.

    [3mSiehe auch[0m =>

ListToBuffer
============

    [3mAufruf       :[0m ListToBuffer List/N Buffer/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Konvertiert die angegebene list zu einem Block.

Ist die Liste leer, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => BufferToList

BufferToList
============

    [3mAufruf       :[0m BufferToList Buffer/N List /N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Konvertiert den angegebenen Buffer in eine Liste.

Ist der angegebene Buffer leer, so wird ein Fehler zurückgegeben.

Folds werden nicht konvertiert.

    [3mSiehe auch[0m => ListToBuffer

DoList
======

    [3mAufruf       :[0m DoList

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Noch nicht implementiert.

    [3mSiehe auch[0m =>

ListSize
========

    [3mAufruf       :[0m ListSize List/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Gibt die Zahl der Einträge in der angegebenen Liste
zurück.

    [3mSiehe auch[0m =>

GetListEntry
============

    [3mAufruf       :[0m GetListEntry List/N Entry/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Die den angegebenen Eintrag in einer Liste in _RS
zurück.

    [3mSiehe auch[0m =>

FindListEntry
=============

    [3mAufruf       :[0m FindListEntry List/N String/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Such nach dem Eintrag [1mString[0m und gibt, wenn
gefunden, seine Position in der Liste zurück.

kann der Eintrag nicht gefunden werden, wird ein Fehler zurückgegegen.

    [3mSiehe auch[0m =>

Exists
======

    [3mAufruf       :[0m Exists FileName/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Schaut nach, ob der angegebene File existiert. Wenn
nicht, wird ein Fehler zurückgegeben.  [3mSiehe auch[0m =>

Delay
=====

    [3mAufruf       :[0m Delay Time/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Wartet die angegebene Zahl von 1/50 Sekunden. Auf
Grund des Parser/Executeroverheads von WRITE, wartet diese Funtion
natürlich nie genau die angegebene Zeit.

    [3mSiehe auch[0m =>

GuideHelp
=========

    [3mAufruf       :[0m GuideHelp Keyword/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Dieser Befehl versucht die Anleitung im Guide-Format
über AmigaGuide bzw. MultiView zu laden und versucht eine Referenz zu dem
angegebenen Wort zu finden.

    [3mSiehe auch[0m =>

VersionCheck
============

    [3mAufruf       :[0m VersionCheck Version/N Name/S

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Kontrolliert, ob die übergebene Versionsnummer
kompatibel zur der aktuellen Versionsnummer von WRITE ist. Ist dem nicht
so, wird ein Requester geöffnet, der darauf hinweist, daß das
angegebene Programme/Konfiguration etc. [3mmöglicherweise[0m nicht
kompatibel ist. Der Benutzer kann dann entscheiden, ob er weiter machen,
oder abbrechen möchte. Bircht er ab, gibt [1mVersionCheck[0m einen Fehler
zurück. Durch Setzten des Tags [1m@SILENT[0m kann der Requester unterbunden
werden. VersionChec gibt dann bei unterschiedlichen Versionsnummern
gleich einen Fehler zurück.

Die aktuelle Kompatibilitätsversionsnummer steht auch in der Variablen
_Version.

    [3mSiehe auch[0m =>

Inc
===

    [3mAufruf       :[0m Inc Zahl,Wert/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Erhöht [1mZahl[0m um [1mWert[0m. Das Ergebnis wird in _RN
zurückgegeben.

    [3mSiehe auch[0m => Dec, RangeCheck, RangeRound

Dec
===

    [3mAufruf       :[0m Dec Zahl,Wert/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Erniedrigt [1mZahl[0m um [1mWert[0m. Ist das Ergebnis
kleiner als null, so wird ein Fehler zurückgegeben, ansonsten enthlt _RN
das Ergebnis.

    [3mSiehe auch[0m => Inc, RangeCheck, RangeRound

RangeCheck
==========

    [3mAufruf       :[0m RangeCheck Zahl,Min,Max/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Liegt [1mZahl[0m außerhalb des durch [1mMin[0m und [1mMax[0m
angegebenen Intervalls, so wird ein Fehler zurückgegeben.

    [3mSiehe auch[0m => Inc, Dec, RangeRound

RangeRound
==========

    [3mAufruf       :[0m RangeRound Zahl,Min,Max/N

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Ja

    [3mBeschreibung :[0m Ist [1mZahl[0m < [1mMin[0m, so wird [1mZahl[0m gleich [1mMin[0m
gesetzt. Ist [1mZahl[0m > [1mMax[0m, so wird [1mZahl[0m gleich [1mMax[0m gesetzt.
Ansonsten bleibt [1mZahl[0m unverändert. Das Ergebnis wird in _RN
zurückgegeben.

Beispiel : Setzten des Cursor 12 Zeilen niedriger


     INC _YPos 12
     RANGECHECK _RN 1 _Length
     GOTO _xPos _RN

    [3mSiehe auch[0m =>

Begin
=====

    [3mAufruf       :[0m Begin Funktionsliste/F

    [3mBenötigt     :[0m Konfiguration

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Die angegebene Funtionsliste wird ausgeführt, wenn
eine Konfiguration geladen wird.  Sollte am Anfang der Konfiguration
stehen. Hier können manuell Befehle eingefügt werden, die durch die
Benutzeroberfläche nicht direkt programmiert werden können. (Was nicht
heißt, daß man den Inhalt der Funktionsliste nicht über die
Oberfläche geändert werden kann). Alle manuell eingefügten Befehle
müssen hier eingefügt werden, da sie an anderer Stelle eingefügt, von
WRITE vergessen, und beim nächsten Abspeichern der Konfiguration
vergessen werden.

    [3mSiehe auch[0m => Screen, PublicScreens

Close
=====

    [3mAufruf       :[0m Close Funktionsliste/F

    [3mBenötigt     :[0m Konfiguration

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Hier können Funktionen angegeben werden, die
ausgeführt werden, wenn die Konfiguration oder der Editor beendet
werden. Hier kann z.B. ein Screenmanager dazu bewegt werden, einen Screen
zu schließen.

    [3mSiehe auch[0m => Screen, PublicScreens

Start
=====

    [3mAufruf       :[0m Start Funktionsliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m  Die angegebene Funtionsliste wird ausgeführt, wenn
der Editor gestartet wird.  Sollte am Anfang der [1mSTARTUP.CONFIG[0m stehen.
Hier können manuell Befehle eingefügt werden, die durch die
Benutzeroberfläche nicht direkt programmiert werden können. (Was nicht
heißt, daß man den Inhalt der Funktionsliste nicht über die
Oberfläche geändert werden kann). Alle manuell eingefügten Befehle
müssen hier eingefügt werden, da sie an anderer Stelle eingefügt, von
WRITE vergessen, und beim nächsten Abspeichern der Konfiguration
vergessen werden.

    [3mSiehe auch[0m =>

Quit
====

    [3mAufruf       :[0m Quit Funktionsliste/F

    [3mBenötigt     :[0m Nichts

    [3mSetzt Fehler :[0m Nichts

    [3mErgebnisse   :[0m Nichts

    [3mBeschreibung :[0m Hier können Funktionen angegeben werden, die
ausgeführt werden, wenn der Editor beendet wird. Hier kann z.B. ein
Screenmanager dazu bewegt werden, einen Screen zu schließen.

    [3mSiehe auch[0m =>

Fold
====

    [3mAufruf       :[0m Fold Von/N Bis/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Ja

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m [1mFold[0m faltet den Text von Zeile [1mVon[0m bis Zeile
[1mBis[0m. Verschachtelte Falten sind möglich.  [3mSiehe auch[0m =>
Konstantenbeschreibung

UnFold
======

    [3mAufruf       :[0m Unfold Von/N Bis/N Ebenen/N

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Entfaltet in dem angegebenen Bereich alle Falten bis
zur angegebenenTiefe.

    [3mSiehe auch[0m => Konstantenbeschreibung

AutoFold
========

    [3mAufruf       :[0m AutoFold

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Such im ganzen Text nach Foldmarkierungen und faltet
die entsprechenen Textteile.

    [3mSiehe auch[0m =>

ReFold
======

    [3mAufruf       :[0m ReFold

    [3mBenötigt     :[0m Ed

    [3mSetzt Fehler :[0m Nein

    [3mErgebnisse   :[0m Nein

    [3mBeschreibung :[0m Schaut, ob der Cursor  zwischen zwei Faltmarken
steht und faltet den entsprechenden Block.

Können keine Markierungen gefunden werden, wird ein Fehler
zurückgegeben.

    [3mSiehe auch[0m =>

Hier endet die Anleitung...

Viel Spaß...

                                   TIM

RexxScripts
***********

   * [1mautodoc.wrx[0m Versucht zu dem Wort unter dem Cursor über AmigaGuide
     bzw. MultiView Informationen zu bekommen.

   * [1mClearUmlauts.wrx[0m Wandelt alle deutschen Umlaute in der Form
     [1mä[0m => ae etc. um.

   * [1mCloseDown.wrx[0m Schließt alle Fenster nach Sicherheitsabfrage und
     beendet WRITE.

   * [1mdefine.wrx[0m Ein Script für den SAS C-Compiler. Renumiert #defines
     (z.B. für Lcale-Files) und sucht zu dem Wort unter dem Cursor
     [3mmodulübergreifend[0m das entsprechenden #define.

   * [1mListeDemo.wrx[0m Demonstriert den Umgang mit den WRITE-internen
     Funktionen zur Listenverwaltung.

   * [1mlocale.wrx[0m Diverse Routinen für das Arbeiten mit Locale-Files
     für den SAS C-Compiler.

   * [1mmailer.wrx[0m Startet die Konfiguration [1mMailer.config[0m. Dieses
     Script kann z.B. als Editor aus einem NewsReader heraus in der Form
     [1mrx mailer.wrx[0m gestartet werden.  [1mMailer.config[0m ist schnell, hat
     wenig Menüs,WordWrap eingeschaltet etc.

   * [1mOberonError.wrx[0m Script für den Oberon2-Compiler der Firma A+L.
     Zeigt die Fehler im Quelltext an.

   * [1mopen.wrx[0m Läd WRITE, wenn noch nicht gestartet, Öffnet ein
     Fenster der Standardkonfiguration und läd den übergebenen Text. Es
     ist nützlich auf diese Funktion einen Alias (z.B. [1malias ED rx
     open.wrx[0m) zu legen.

   * [1mOpenWrite.wrx[0m Script ähnlich wie [1mopen.wrx[0m, nur kann hier die
     gewünschte Konfiguration mit angegeben werden.

   * [1mPrivatePortDemo.wrx[0m Demonstriert den Umgang mit PrivatePorts.
     Siehe auch OpenPort, ClosePort und WaitPort.

   * [1mRenumber.wrx[0m Renummiert eine eine Reihe untereinanderstehender
     Zahlen so, daß sie sowohl rechtsbündig als auch aufeinanderfilgend
     sind.

   * [1mResortIcon.wrx[0m Resortiert iconifizierte Fenster, so daß Lücken
     zwischen den Fenstern verschwinden.

   * [1msc.wrx[0m Komfortable Fehler-Anzeige für den SAS c_Compiler.

   * [1mscman.wrx[0m Zeigt den entsprechende AmigaGuideeintrag zu der
     SAS-Libraryfunktion unter dem Cursor.

   * [1mSetRexxClipDemo.wrx[0m

     Demonstriert die Funktion SetREXXClip. Mit dieser Funktion ist es
     möglich. Zeilen und Buffer beliebiger Länge nach REXX zu
     exportieren.

   * [1mShowConfig.wrx[0m Zeigt alle geladenen Konfigurationen.

   * [1mtemplates.wrx[0m Erzeugt automatische Funktionsbeschreibungen /
     Autodocsfür / Manpages für den SAS C-Compiler.

   * [1mtexadr.wrx[0m Script, um Addressen von DFA nach WRITE im TeX-Format
     zu importieren.

   * [1mView.wrx[0m Ähnlich wie [1mmailer.wrx[0m. Nur wird die die Konfiguration
     [1mView.config[0m benutzt. Diese dient zu reinen Darstellung von Texten.
     Hier kann z.B. nicht editiert werden.

Index
*****



 Adresse                                Autor
 Allgemeine Syntax                      allgemeine Syntax
 APPICON                                ToolTypes
 APPMENU                                ToolTypes
 APPWIN                                 ToolTypes
 Autor                                  Autor
 Betriebssystem                         Installation
 Buffer                                 Listen und Buffer
 Copyright                              Copyright
 Copyright allgemein                    Allgemein
 Credits                                Danksagungen
 Danksagungen                           Danksagungen
 Das Prinzip                            Das Prinzip
 Demoversion                            Demoversion
 Der Ed                                 Der Ed
 Einleitung                             Einleitung
 EMail                                  Autor
 Fehlerreport                           Autor
 Fred Fish                              Demoversion
 Funktionen                             Funktionsbeschreibung
 Geld                                   Autor
 GUIDEMODE                              ToolTypes
 Haftung                                Allgemein
 Index                                  Index
 Installation                           Installation
 Installer                              Installation
 Kaufkonditionen                        Vollversion
 KaufPreis                              Vollversion
 Kommentare                             Autor
 Konfigurationsfile                     Installation
 Konstanten                             Konstanten
 Konstantenbeschreibung                 Konstantenbeschreibung
 Konzept                                Konzept
 Kritik                                 Autor
 Libraries                              Installation
 Listen                                 Listen und Buffer
 MausNet                                Autor
 Mauszeiger                             Editorfenster
 Mousepointer                           Editorfenster
 OS 2.0                                 Installation
 Preis                                  Vollversion
 Public Screens                         PublicScreens
 Registrierung                          Registrierung
 Requester                              Requester
 RexxScripts                            RexxScripts
 Samples                                Sound
 Screenmanager                          PublicScreens
 Scrollbalken                           Editorfenster
 Scrollgadgets                          Editorfenster
 Shortcuts                              Requester
 SLEEPMODE                              ToolTypes
 Sound                                  Sound
 SOUND                                  ToolTypes
 Speicher                               Installation
 Stack                                  Installation
 Syntax                                 Syntax
 System                                 Installation
 Tastaturshortcuts                      Requester
 Titelzeile                             Editorfenster
 Ton                                    Sound
 ToolTypes                              ToolTypes
 Upd                                    Sound
 Update                                 Vollversion
 Variablen                              Variablen
 Variablen                              Variablebeschreibung
 Vollversion                            Vollversion
 Warum WRITE ?                          Einleitung
 Wichtig                                Wichtig
 Workbench                              PublicScreens

Funktionsindex
**************



 About                                  About
 AddList                                AddList
 Ask                                    Ask
 AutoFold                               AutoFold
 BackTab                                BackTab
 Beep                                   Beep
 Begin                                  Begin
 BlockCenter                            BlockCenter
 BlockLeft                              BlockLeft
 BlockLftAlig                           BlockLftAlig
 BlockRghtAlig                          BlockRghtAlig
 BlockRight                             BlockRight
 Break                                  Break
 BufferToClip                           BufferToClip
 BufferToList                           BufferToList
 BufferToStr                            BufferToStr
 ChangeConfig                           ChangeConfig
 ClearBuffer                            ClearBuffer
 ClearHotKey                            ClearHotKey
 ClearKeys                              ClearKeys
 ClearList                              ClearList
 ClearMenu                              ClearMenu
 CliptoBuffer                           ClipToBuffer
 Close                                  Close
 ClosePort                              ClosePort
 Compare                                Compare
 CopyArea                               CopyArea
 CopyBlock                              CopyBlock
 CursorDown                             CursorDown
 CursorLeft                             CursorLeft
 CursorRight                            CursorRight
 CursorUp                               CursorUp
 Dec                                    Dec
 Delay                                  Delay
 Delete                                 Delete
 DeleteArea                             DeleteArea
 DeleteBlock                            DeleteBlock
 DeleteLine                             DeleteLine
 DeleteToEOL                            DeleteToEOL
 DoBuffer                               DoBuffer
 DoList                                 DoList
 DoREXX                                 DoREXX
 DoString                               DoString
 DoubleKey                              DoubleKey
 ExecuteMacro                           ExecuteMacro
 Exists                                 Exists
 Find                                   Find
 FindListEntry                          FindListEntry
 FindPattern                            FindPattern
 Flash                                  Flash
 Fold                                   Fold
 Font                                   Font
 GetConfig                              GetConfig
 GetConst                               GetConst
 GetEnv                                 GetEnv
 GetFile                                GetFile
 GetFiles                               GetFiles
 GetFindReplace                         GetFindReplace
 GetFont                                GetFont
 GetListEntry                           GetListEntry
 GetNumber                              GetNumber
 GetREXXVar                             GetREXXVar
 GetString                              GetString
 GetVar                                 GetVar
 GoTextMark                             GoTextMark
 Goto                                   Goto
 GotoMouse                              GotoMouse
 GPrefs                                 GPrefs
 GuideHelp                              GuideHelp
 Help                                   HelpFkt
 Hide                                   Hide
 Iconify                                Iconify
 If                                     If
 Inc                                    Inc
 InsertBlock                            InsertBlock
 Item                                   Item
 ItemBar                                ItemBar
 Key                                    Key
 LastWord                               LastWord
 ListSize                               ListSize
 ListToBuffer                           ListToBuffer
 LoadBuffer                             LoadBuffer
 LockWindow                             LockWindow
 LowerBlock                             LowerBlock
 MacroPannel                            MacroPannel
 MacroPlay                              MacroPlay
 MacroRec                               MacroRec
 MacroStop                              MacroStop
 Mark                                   Mark
 MatchBracket                           MatchBracket
 Menu                                   Menu
 Message                                Message
 MessageOK                              MessageOK
 ModifyScreen                           ModifyScreen
 ModifyWin                              ModifyWin
 New                                    New
 NewEd                                  NewEd
 NextEd                                 NextEd
 NextWord                               NextWord
 NOP                                    NOP
 NormalPointer                          NormalPointer
 Open                                   Open
 OpenPort                               OpenPort
 PageDown                               PageDown
 PageUp                                 PageUp
 ParseBuffer                            ParseBuffer
 Pop                                    Pop
 Prefs                                  Prefs
 PreparseString                         PreparseString
 Push                                   Push
 Quit                                   Quit
 QuitEd                                 QuitEd
 RangeCheck                             RangeCheck
 RangeRound                             RangeRound
 ReFold                                 ReFold
 Refresh                                Refresh
 RemoveList                             RemoveList
 Replace                                Replace
 ReplaceList                            ReplaceList
 Return                                 Return
 Save                                   Save
 SaveBuffer                             SaveBuffer
 Screen                                 Screen
 SetBackUp                              SetBackUp
 SetEnv                                 SetEnv
 SetError                               SetError
 SetHotKey                              SetHotKey
 SetMacro                               SetMacro
 SetMark                                SetMark
 SetREXXClip                            SetREXXClip
 SetREXXVar                             SetREXXVar
 SetTextMark                            SetTextMark
 SetTitle                               SetTitle
 SetUserFkt                             SetUserFkt
 SetVar                                 SetVar
 ShowASCII                              ShowASCII
 ShowConstants                          ShowConstants
 ShowFunctions                          ShowFunctions
 ShowIndex                              ShowIndex
 ShowList                               ShowList
 ShowVars                               ShowVars
 Silent                                 Silent
 Start                                  Start
 StrToBuffer                            StrToBuffer
 Sub                                    Sub
 SubBar                                 SubBar
 System                                 System
 Tab                                    Tab
 UnDelLine                              UnDelLine
 Undo                                   Undo
 UnFold                                 UnFold
 UnMark                                 UnMark
 UpperBlock                             UpperBlock
 VersionCheck                           VersionCheck
 WaitPointer                            WaitPointer
 WaitPort                               WaitPort
 WinArranger                            WinArranger
 Window                                 Window
 WinManager                             WinManager
 WriteChar                              WriteChar
 WriteText                              WriteText

Variableindex
*************



 CURSOR                                 CURSOR
 EOL                                    EOL
 EOP                                    EOP
 EOS                                    EOS
 EOT                                    EOT
 EOW                                    EOW
 EQUAL                                  EQUAL
 FALSE                                  FALSE
 HIGHER                                 HIGHER
 LOWER                                  LOWER
 MARKA                                  MARKA
 MARKB                                  MARKB
 MOS                                    MOS
 SOL                                    SOL
 SOP                                    SOP
 SOS                                    SOS
 SOT                                    SOT
 SOW                                    SOW
 TRUE                                   TRUE
 _AColor                                _AColor
 _AppIcon                               _AppIcon
 _AppMenu                               _AppMenu
 _AppWindow                             _AppWindow
 _AutoFold                              _AutoFold
 _AutoFree                              _AutoFree
 _AutoIndent                            _AutoIndent
 _BColor                                _BColor
 _CaseSense                             _CaseSense
 _CColor                                _CColor
 _Changed                               _Changed
 _ChipMem                               _ChipMem
 _CollectorMem                          _CollectorMem
 _ConfigPath                            _ConfigPath
 _CurrentChar                           _CurrentChar
 _CurrentConfig                         _CurrentConfig
 _CurrentID                             _CurrentID
 _CurrentLine                           _CurrentLine
 _CurrentWord                           _CurrentWord
 _Cursor                                _Cursor
 _DColor                                _DColor
 _DefaultConfig                         _DefaultConfig
 _DefaultTool                           _DefaultTool
 _DelFoldMark                           _DelFoldMark
 _EColor                                _EColor
 _EditMode                              _EditMode
 _FastMem                               _FastMem
 _FColor                                _FColor
 _File                                  _File
 _FileName                              _FileName
 _FilePath                              _FilePath
 _FindString                            _FindString
 _Fold                                  _Fold
 _FoldEnd                               _FoldEnd
 _FoldStart                             _FoldStart
 _FRPattern                             _FRPattern
 _Language                              _Language
 _Length                                _Length
 _LoadTab                               _LoadTab
 _MarkAx                                _MarkAx
 _MarkAy                                _MarkAy
 _MarkBx                                _MarkBx
 _MarkBy                                _MarkBy
 _Marked                                _Marked
 _MaxBuffer                             _MaxBuffer
 _Optimize                              _Optimize
 _OverwriteIcon                         _OverwriteIcon
 _PatCase                               _PatCase
 _Path                                  _Path
 _PathPath                              _PathPath
 _PatNoCase                             _PatNoCase
 _PublicMem                             _PublicMem
 _ReadTabs                              _ReadTabs
 _REG1                                  _REG1
 _REG2                                  _REG2
 _ReplaceString                         _ReplaceString
 _ReqToMouse                            _ReqToMouse
 _REXX                                  _REXX
 _REXXPortName                          _REXXPortName
 _RightMargin                           _RightMargin
 _RN                                    _RN
 _RS                                    _RS
 _SaveTab                               _SaveTab
 _ScreenHeight                          _ScreenHeight
 _Screenname                            _Screenname
 _ScreenWidth                           _ScreenWidth
 _ScrRelHeight                          _ScrRelHeight
 _ScrRelWidth                           _ScrRelWidth
 _ShowEOL                               _ShowEOL
 _ShowSpace                             _ShowSpace
 _SleepMode                             _SleepMode
 _Sound                                 _Sound
 _TabLength                             _TabLength
 _Time                                  _Time
 _Undo                                  _Undo
 _User                                  _User
 _Version                               _Version
 _VersionString                         _VersionString
 _WBStarted                             _WBStarted
 _WinHeight                             _WinHeight
 _WinMode                               _WinMode
 _Wins                                  _Wins
 _WinWidth                              _WinWidth
 _WordDef                               _WordDef
 _WordOnly                              _WordOnly
 _WordWrap                              _WordWrap
 _WriteIcon                             _WriteIcon
 _WriteTabs                             _WriteTabs
 _XPos                                  _XPos
 _YPos                                  _YPos

