RUN ENTRY=string-entry [, MODLIB=string-dll] [,par1 [,par2,.... ] ]
Mit der Anweisung @RUN wird eine vom Anwender geschriebene Routine (Anwenderroutine) ausgeführt.
string-entry entry_name[,CDECL]
Der String kann entweder direkt in Hochkommas, als Stringvariable oder als zusammengesetzter String angegeben werden.
entry_name Name der Benutzerroutine als String.
CDECL Aufrufkonvention. Als Standard wird die Methode STDCALL verwendet. Soll in Ausnahmefällen die Methode CDECL verwendet werden, kann die Option CDECL durch Komma getrennt hinter dem Namen der Benutzerroutine angegeben werden.
Beispiel: ENTRY='TEST,CDECL',......
string-dll Name der DLL als String, die den Einsprungpunkt enthält. Der String kann entweder direkt in Hochkommas, als Stringvariable oder als zusammengesetzter String angegeben werden. Der Name der DLL kann mit einer relativen oder absoluten Pfadangabe beginnen
Wird keine DLL angegeben, wird die DLL mit dem Namen EDTUSER.DLL im Installationsverzeichnis verwendet.
Wird kein Pfad angegeben, wird die DLL zuerst im Installationsverzeichnis, danach in dem vom jeweiligen System vorgegebenen Verzeichnissen gesucht.
par1 [,par2,..... ] Ein oder mehrere Parameter für die Funktion. Maximal sind 32 Parameter möglich. Soweit Stringvariable oder Integervariable verwendet werden, kann die Funktion auch Werte zurückgeben. Es sind folgende Parameter zulässig:
a) Beliebige UTF16-Zeichenfolgen. Soweit der Arbeitsbereich nicht in Unicode codiert ist, werden die Daten von dem Arbeitsbereichs-Code in Unicode UTF16 umgewandelt.
Es sind alle Varianten eines Strings erlaubt, also direkte Angabe einer Zeichenfolge, Stringvariablen, Zeilennummer-Variablen, direkte Angabe einer Zeilennummer, Spaltenangabe und mit "+" verknüpfte Zeichenfolgen.
Die gesamte Zeichenfolge kann max. 32.768 Zeichen lang sein. Die Zeichenfolge kann auch das String-Endezeichen X'0000' enthalten, da die Parameter mit Längenfeld übergeben werden.
Soweit die Funktion in einen Parameter Werte zurückgeben will, muß die Zeichenfolge als Stringvariable angegeben werden, damit der Rückgabewert danach verarbeitet werden kann. Da die Stringvariablen immer in Unicode codiert sind, werden die Rückgabewerte ohne Umcodierung in die Stringvariable übertragen. Erst bei der Verwendung der Stringvariablen werden gegebenenfalls die Daten von UTF16 in den Arbeitsbereichs-Code umgewandelt.
b) Integervariable. Eine Integer-Variable kann einen Wert zwischen -4,6118 und +4,6118 enthalten.
Ein Integer darf nicht direkt angegeben werden, weil die Zahl nicht von einer Zeilennummer unterschieden werden kann.
Rückgabewerte:
a) Returncode und Integervariable #i99:
Falls der Returncode einen Wert ungleich 0 enthält, wird der EDT Fehlerschalter gesetzt, der mit dem Kommando IF ERROR abgefragt und mit dem Kommando RESET gelöscht werden kann. Der Returncode wird zusätzlich in die Integervariable #i99 übertragen.
b) Meldung und Stringvariable #s99:
Wird im Kontrollblock eine Meldung in UTF16 zurückgegeben, so wird im Prozedurmodus die Meldung in den Arbeitsbereich 32 geschrieben und im Dialogmodus in einer Messagebox ausgegeben. Die Meldung wird zusätzlich in die Stringvariable #s99 übertragen. In der Regel wird hier eine Fehlermeldung zurückgegeben. Es kann jedoch auch im OK-Fall eine Meldung ausgegeben werden.
c) Rückgabewerte in den Parametern:
Alle Parameter, die als Stringvariable oder als Integervariable angegeben wurden, können mit einem Rückgabewert überschrieben werden, der nach dem Rücksprung wieder in die entsprechenden Variablen zurück übertragen wird. Das Format und die Nummer der Variable darf nicht geändert werden. Die Strings sind in UTF16 kodiert.
Beispiele:
@run entry='test1',modlib=#s1+'.dll','par1',#s2,#i1
@run entry=#s1,'p1',#l1,#i1,1:50-100:
#l1=Inhalt der Zeile der Zeilennummer-Variablen #l1
1:50-100:=Inhalt der Zeile 1, Spalte 50-100
@run e='test2',m='test.dll','p1',25:4-5:,#i1
25:4-5:=Inhalt der Zeile 25 Spalte 4 bis 5
@run e='test3',m='test.dll','par1'+#s1+'x',#s20,#i1
@if #i99 = 1 goto err1
@if #i99 = 2 goto err2
@if #i1  = 1 goto verarbeitung1
Beschreibung der Unterprogramm-Schnittstelle:
Funktionsaufruf:
benutzerroutine(kontrollblockparmeterliste)
Alle Bereiche werden vom EDTW in der max. Länge bereitgestellt. Der Benutzermodul muß also keine statischen Felder für die Rückgabewerte definieren.
Kontrollblock:
Distanz Länge Beschreibung
0 4 Version, Format Integer, aktuelle Version 1
4 4 Adresse Meldung in UTF16, Abschluß String mit X'0000', max. Länge 2048 Zeichen. Das Feld wird vor dem Ansprung mit der Adresse eines Bereiches mit 4KB versorgt. Der Bereich enthält einen Leerstring (X'0000').
Die Meldung wird im Dialogmodus in einer Messagebox, im Batch-Modus in den Arbeitsbereich 32 ausgegeben.
keine Meldung = Leerstring (X'0000').

1 Typ Arbeitsbereich:
U = Unicode UTF16
C = 8-Bit-Code Character, jedes Zeichen belegt 2 Bytes, das linke Byte enthält X'00'
Beispiel für das Zeichen €:
C = X'0080'
U = X'20AC'
Unabhängig davon werden die Zeichenfolgen immer in UTF16 codiert übergeben!
9 3 reserviert f. Erweiterungen
12 32 Zeichenfolge Code Arbeitsbereich, z.B. "ANSI"

Parameterliste:
Distanz Länge Beschreibung
4 var für jeden Parameter des Kommandos RUN: Adresse des Parameterbereichs.
var 4 Adresse NULL als Ende der Parameterliste

Bereich für jeden Parameter:
Distanz Länge Beschreibung
0 2 Format:
Unicode-Zeichen 'I' (Integer) Ganzzahl in der Länge 8 (Longlong)
Unicode-Zeichen 'S' (String) in UTF16 kodiert, jedes Zeichen belegt 2 Bytes.
2 2 Rückgabewert erlaubt:
' ' = kein Rückgabewert erlaubt
'R' = Rückgabewert erlaubt (#Inn oder #Snn)
4 2 Nummer der Integer- oder String-Variable für den Rückgabewert (0-99),
keine Variable = -1
6 2 reserviert
8 4 Länge Daten (ohne Längenfeld):
Integer: immer 8,
Zeichenfolge: Anzahl der UTF16-Zeichen (0 bis 32.768).
12 4 reserviert
16 8 falls Format 'I'
Integer mit Vorzeichen,
Der Rückgabewert muss ebenfalls in diesem Feld bereitgestellt werden.
24 4 falls Format 'S':
Adresse eines 64KB großen Datenbereichs für die Zeichenfolge, der vom EDTW bereitgestellt wird. Die Zeichenfolge ist immer in UTF16 codiert.
Der Rückgabewert muss in diesen Bereich kopiert werden.
28 4 Länge Daten Rückgabewert:
Integer: immer 8,
Zeichenfolge: Anzahl der UTF16--Zeichen (0 bis 32.768)
-1 = keine Rückgabe.
Das Feld wird vor dem Ansprung mit -1 gelöscht. Die Rückgabewerte müssen in das Integer-Feld (Distanz 16) bzw. in den Datenbereich (Adr. Distanz 24) übertragen werden.

Returncode:
0 OK, kein Fehler
>0 Fehler. Der Fehlerschalter des EDTW wird gesetzt. Enthält der Kontrollblock keine Fehlermeldung, wird eine allgemeine Fehlermeldung ausgegeben. Die Rückgabewerte werden nicht übertragen.
Hinweis:
Im Installationsverzeichnis ist ein Beispiel-Programm in der Sprache C unter dem Namen EXAMPLE_RUN.C zu finden.