ED kann auch über ARexx gesteuert werden, indem Befehle über den ARexx-Port von ED gesendet und empfangen werden. Jede laufende ED-Sitzung hat für ihren ARexx-Port einen eigenen Namen, der angegeben werden muß, damit Informationen für die jeweilige Sitzung bearbeitet werden können. Die Namen für die ARexx-Ports werden wie folgt vergeben:
Viele der erweiterten ED-Befehle können Sie auch von ARexx aus geben. Mit dem ED-Befehl RV in ARexx-Programmen können Informationen von ED an ARexx übertragen werden. Sie können so den Status von ED abrufen (z.B. die Nummer der aktuellen Zeile oder den Namen der Datei, die gerade ediert wird.)
Bei dem Befehl RV wird als Argument der Name der ARexx-Variablen "stem" angegeben, in der die Informationen gespeichert werden sollen. Zum Beispiel in ARexx werden mit
den folgenden Variablen Werte zugeordnet:
Sie können für "stem" auch jedes andere gültige ARexx-Symbol verwenden. Geben Sie dieses aber zwischen Begrenzungszeichen ein. Diese Variablen können dann als normale "stem"-Variablen verwendet werden.
Das Beispielprogramm "Transpose.ed" zeigt die Verwendung verschiedener erweiterter Befehle von ARexx. Dieses Programm stellt zwei Zeichen um, wenn es von ED aus aufgerufen wird. Enthält eine Zeile zum Beispiel die Zeichenfolge 123 und steht der Cursor auf der 3, ändert Transpose.ed die Zeichenfolge in 213.
Geben Sie dieses Programm ein und speichern Sie es unter REXX:Transpose.ed. Öffnen Sie dann ED und edieren Sie eine vorhandene Datei oder erstellen Sie eine neue. Stellen Sie den Cursor rechts von den beiden Zeichen, die umgestellt (transportiert) werden sollen, drücken Sie Esc und geben Sie folgendes ein:
Das Programm wird ausgeführt, und die Zeichen werden umgestellt, wenn ARexx läuft und alle Angaben richtig eingegeben werden. Zur Ausführung des Programms muß der gesamte Dateiname einschließlich Erweiterung eingegeben werden.
/*Transpose.ed: Beispielprogramm zum Vertauschen zweier Zueichen */
/*Gegeben:Zeichenfolge `123', Bedingung: Cursor steht auf 3; */
/* Ergebnis: Zeichenfolge `213'. */
HOST = address () /* Welche ED-Sitzung hat Programm aufgerufen? */
address VALUE HOST /* .Mit dieser Sitzung kommunizieren */
`rv' `/CURR/' /* Daten in stem-Variable CURR speichern */
/* Zwei Informationen abrufen: */
currpos = CURR.X /* 1. Position des Cursors in Zeile */
currlin = CURR.CURRENT /* 2. Inhalt der aktuellen Zeile */
if (currpos > 2) then currpos = currpos - 1 /* Nur in aktueller Zeile */
else do /* Sonst: Fehlermeldung und verlassen */
`sm/Cursor muß mindestens auf Position 2 stehen/'
exit 10
end
/* Die Zeichen auf CURRPOS und CURRPOS-1 werden dann vertauscht, */
/* und die aktuelle Zeile wird durch die neue ersetzt.. */
drop CURR/*. CURR nicht mehr erforderlich; Löschen spart Speicher */
`d' /* ED löscht aktuelle Zeile */
currlin = swapch (currpos,currlin) /* Zeichen vertauschen */
`i/'||currlin||'/' /* Geänderte Zeilen einfügen */
do i = 1 to currpos /* Cursor an Ausgangsposition setzen */
`cr' /* Befehl `Cursor nach rechts' */
end
Exit /* Programm beendet */
/* Funktion zum Vertauschen der Zeichen */
swapch:Procedure
parse arg. Cpos,clin
ch1 = substr(clin,cpos,1) /* Zeichen erfassen */
clin = delstr(clin,cpos,1) /* Aus Zeichenfolge löschen */
clin = insert(ch1,clin,cpos-2,1) /* Wieder einfügen */
return clin /* Geänderte Zeichenfolge zurückgeben