Die in diesem Abschnitt aufgelisteten Funktionen sind Teil der Bibliothek REXXSupport.library. Sie können nur verwendet werden, wenn diese Bibliothek geöffnet ist. Das folgende Beispiel zeigt, wie Sie diese Bibliothek öffnen können.
/*Rexxsupport.library öffnen,
falls noch nicht geschehen.*/
IF (Tilde) SHOW (`L', "rexxsupport.library") TEHN DO
/*Ist sie schon geöffnet? Wenn nicht, jetzt versuchen, sie zu öffnen*/
IF ADDLIB (`rexxsupport.library', 0, -30,0)
THEN SAY "Rexxsupport.library geöffnet."
ELSE DO
SAY `ARexx-Unterstützungsbibliothek nicht verfügbar, Programm wird verlassen'
EXIT 10 /*Bei Scheitern von ADDLIB () wird das Programm verlassen*/
END
END
Reserviert einen Speicherblock der angegebenen Länge aus dem Pool des freien Symbolspeichers und gibt dessen Adresse in Form einer 4-Byte-Zeichenfolge zurück. Der wahlfrei anzugebende Parameter "Attribut" muß eine standardmäßige EXEC-Kennung sein, die als 4-Byte-Zeichenfolge anzugeben ist. Standardattribut ist 1 für "PUBLIC" für allgemein zugänglichen (nicht vorher gelöschten) Speicher. Weitere Informationen über Speichertypen und Attributparameter finden Sie in der Beschreibung von Bibliotheken in den Amiga ROM Kernel Reference Manuals (offizielle Systemdokumentation für Programmierer).
Diese Funktion sollten Sie immer dann verwenden, wenn Speicherplatz für externe Programme reserviert werden soll. Die Freigabe von nicht mehr benötigtem Speicherbereich liegt in der Verantwortung des Benutzers (siehe auch FREEMEM()). Beispiel:
SAY C2X (AALOCMEM(1000)) ->
00050000
SAY C2X (ALLOCMEM (1000, '00 01 00 0 1'X)) -> 00228400
/*1000 Byte geCLEARter (auf 0 gesetzter) allgemein zugänglicher Speicherplatz*/
Schließt den Message-Port, der im Argument "Name" angegeben wurde. Dieser muß zuvor innerhalb des aktuellen ARexx-Programms mit dem Aufruf OPENPORT() zugeordnet worden sein. Alle empfangenen Nachrichten, auf die noch nicht geantwortet (REPLY) wurde, werden automatisch mit dem Rückgabewert 10 zurückgegeben (siehe auch OPENPORT()). Beispiel:
Gibt einen Speicherblock der angegebenen Länge frei (d.h. an den Pool des freien Systemspeichers zurück). Das Argument "Adresse" ist eine 4-Byte-Zeichenfolge, die sich in der Regel aus einem vorherigen Aufruf der Funktion ALLOCMEM() ergibt. FREEMEM() kann nicht zur Freigabe von Speicherplatz verwendet werden, der mit der internen ARexx-Speicherreservierungsfunktion GET-SPACE() reserviert wurde. Der Rückgabewert ist ein boolesches Erfolgskennzeichen (siehe auch ALLOCMEM()). Beispiel:
Speicheranforderung = 1024
/*Speichergröße*/
MeinSp = ALLOCMEM (Speicheranforderung)
SAY C2X (MeinSp) -> 07C987B0
SAY FREEMEM (MeinSp, Speicheranforderung) -> 1
/*Oder: SAY FREEMEM (`07C987B0'x,1024)*/
Extrahiert ein Kommando, einen Funktionsnamen oder eine Argumentzeichenfolge aus einem Nachrichtenpaket. Das Argument "Paket" muß eine 4-Byte-Adresse sein, die sich aus einem vorherigen Aufruf der Funktion GETPKT() ergeben hat. Das wahlfreie Argument n bezeichnet die Position, an der die zu extrahierende Zeichenfolge steht, wobei n kleiner oder gleich der Gesamtzahl der Argumente in diesem Paket sein muß. Befehle und Funktionsnamen befinden sich stets an Position 0. Funktionspakete können Argumentzeichenfolgen an den Positionen 1 bis 15 aufweisen. Beispiel:
Kommando = GETARG (Paket)
Funktion = GETARG (Paket,0) /*Name Zeichenfolge*/
arg1 = GETARG (Paket,1) /*Erstes Argument*/
Überprüft, ob bei dem im Argument "Name" angegebenen Message-Port Nachrichten vorliegen. Der angegebene Message-Port muß zuvor innerhalb des aktuellen ARexx-Programms mit dem Aufruf OPENPORT() geöffnet worden sein. Der zurückgegebene Wert ist die 4-Byte-Adresse des ersten Nachrichtenpakets oder `0000 0000'x, wenn keine Pakete vorlagen.
Die Funktion meldet sofort, ob ein Paket in der Warteschlange des Message-Ports steht oder nicht. Programme sollten niemals so gestaltet sein, daß sie in einer engen Schleife permanent diese Abfrage aufrufen. Wenn das Programm bis zum Eintreffen des nächsten Nachrichtenpakets keine Aktionen auszuführen hat, sollte es die Funktion WAITPKT() aufrufen und damit die Weiterbearbeitung anderer Tasks ermöglichen (siehe auch WAITPKT()). Beispiel:
Erstellt einen allgemein zugänglichen Message-Port mit dem angegebenen Namen. Der zurückgegebene boolesche Wert gibt Aufschluß darüber, ob der Port erfolgreich geöffnet wurde. Wenn bereits ein Port mit diesem Namen existiert oder ein Signalbit nicht reserviert werden konnte, kommt es zu einem Initialisierungsfehler. Der Message-Port wird als "Port-Ressourcen-Knoten" angelegt und in die globale Datenstruktur des Programms integriert. Ports werden automatisch geschlossen, wenn das Programm verlassen wird, und alle noch nicht verarbeiteten Meldungen werden an die Absender zurückgeschickt (siehe auch CLOSEPORT()). Beispiel:
erfolg = OPENPORT ("MeinPort")
Schickt ein Nachrichtenpaket an den Absender zurück, wobei das Primärergebnisfeld auf den im Argument "rc" (Return Code) angegebenen Wert gesetzt wird. Das Sekundärresultat wird gelöscht. Das Argument "Paket" ist in Form einer 4-Byte-Adresse anzugeben, für "RC" ist eine ganze Zahl anzugeben. Beispiel:
CALL REPLY (Paket,10) /*Fehlerrückgabe*/
Gibt den Inhalt des angegebenen Verzeichnissen als eine Folge von jeweils durch Leerzeichen voneinander getrennten Namen zurück. Der zweite Parameter ist ein Optionsschlüsselwort, über das gesteuert wird, ob alle Einträge (ALL), nur Dateien (FILE) oder nur Unterverzeichnisse (DIR) des betreffenden Verzeichnisses berücksichtigt werden sollen. Beispiel:
SAY SHOWDIR (`SYS:REXXC', `f',
`;')
-> WaitForPort;TS;TE;TCO;RXSET;RXLIB;RXC;RX;HI
|
SHOWLIST({`A' | `D' | `H' | `I' | `L' | `M' | `P | `R' | `S' | `T' | `V' | `W'}[,Name][,Füllzeichen]) |
Eine Liste wird durch Angabe ihres Anfangsbuchstabens ausgewählt. Mögliche Argumente sind:
|
(ASSIGNS and Assigned Device) Zuordnungen und zugeordnete Geräte |
|
|
|