REXX: Bibliotheken

Aus Wikibooks
Wechseln zu: Navigation, Suche
Nuvola apps bookcase 1.svg REXX

Einleitung[Bearbeiten]

Wie in den meisten Programmiersprachen kann man auch in REXX eigene Funktionen schreiben. Es lassen sich auch externe Bibliotheken erstellen. Egal ob es sich um eine eigene Funktion innerhalb des Programms handelt, oder um eine externe Bilbliothek, der Aufruf ist immer:

call funktionsname parameter

eigene Funktionen innerhalb des Programms[Bearbeiten]

Als Beispiel ein Programm zur Ausgabe der Fakultät. Die eigentliche Berechnung der Fakultät findet in der selbstgeschriebenen Funktion statt.

/* Ein Rexx-Programm */
signal on syntax
say "Bitte gib eine Zahl >= 0 ein"
pull n
do while n >= 0
  say "die Fakultät zu" n "ist" fakultaet(n)
  say "Bitte gib eine Zahl >= 0 ein"
  pull n
end
exit 0

fakultaet: procedure
  arg n
  select
     when n = 0 then
        return 1
     when n = 1 then
        return 1
  otherwise
     return n * fakultaet(n-1)
  end
syntax:
  say 'Keine Zahl'
  exit 1

Externe Bibliothek[Bearbeiten]

Eine externe Bibliothek muß erst in das Programm hinzugeladen werden. Das bewirkt die Anweisung:

call load 'datei'


/* Ein REXX-Programm */
call load 'convert.r'
do forever
  pull zahl
  pull base
  call d2n zahl,base
  say zahl'='result
end

Die externe Bibliothek ist nicht ablauffähig. Um auf diesen Umstand hinzuweisen, kann man der Bibliothek zwei Zeilen an den Anfang stellen:

say 'Only a Library!'
exit 1

Diese zwei Zeilen bewirken, das beim Starten der Bibliothek eine Meldung ausgegeben wird, daß es sich bei der ausgeführten Datei um eine Bibliothek handelt. Das exit 1 beendet dann die Datei. Beim Aufruf mit call load aus einem REXX-Programm haben diese beiden Zeilen keine Auswirkungen.

/* REXX-Programm */
say 'Only a Library!'
exit 1
/* */
/* */
D2N: procedure
  arg n,b
/* initialisierung */
  z='0123456789ABCDEFGHIJKLMNOPQRSTUVW'
  conv =
  nstart = n
  DO WHILE n > 0
    p = n // b
    conv = substr(z,(p+1),1)||conv  
    n = n % b
  END 
/* Ausgabe der Konversion in der Form: 23 = (10111)2 */
return conv