![]() |
![]() |
Aufruf des SeL-Interpreters
Der SeL-Interpreter kann als Apache-Content-Handler oder aber direkt
von der Kommandozeile aus gestartet werden. Er erkennt folgende
Kommandozeilen-Optionen:
Interpreter, Compile- und Runtime-Modus
Ab SeL Version 0.5 kann die Compilierung von SeL-Programmen von deren
Ausführung getrennt werden. Mit dem Aufruf:
|
|
Compilierte SeL-Dateien haben einige interessante Eigenschaften:
(Die genaue Spezifikation der SeL stack machine ist beim Autor erhältlich).
|
Zum Vergleich hier der Geschwindigkeitsgewinn bei Verwendung von compilierten Objektdateien gegenüber normalen SeL-Dateien. Die Messungen wurden mehrfach mit derselben Datei durchgeführt (der GhK-Homepage); das Ausgabeformat ist das des Unix-Kommandos "time".
Timings für SeL-Quelltext:real 0m0.603s user 0m0.430s sys 0m0.100s real 0m0.570s user 0m0.440s sys 0m0.060s real 0m0.577s user 0m0.450s sys 0m0.060s real 0m0.557s user 0m0.420s sys 0m0.090s real 0m0.563s user 0m0.450s sys 0m0.070s real 0m0.572s user 0m0.450s sys 0m0.080s real 0m0.565s user 0m0.430s sys 0m0.080s real 0m0.567s user 0m0.440s sys 0m0.060s real 0m0.562s user 0m0.430s sys 0m0.080s real 0m0.555s user 0m0.430s sys 0m0.070s |
Timings für compilierte Objektdatei:real 0m0.204s user 0m0.100s sys 0m0.030s real 0m0.188s user 0m0.090s sys 0m0.050s real 0m0.172s user 0m0.090s sys 0m0.040s real 0m0.168s user 0m0.090s sys 0m0.050s real 0m0.168s user 0m0.100s sys 0m0.040s real 0m0.186s user 0m0.090s sys 0m0.060s real 0m0.170s user 0m0.100s sys 0m0.040s real 0m0.168s user 0m0.100s sys 0m0.050s real 0m0.164s user 0m0.090s sys 0m0.050s real 0m0.183s user 0m0.090s sys 0m0.040s |
=GRUSS "Hallo"; |
Jede Zuweisung endet mit einem Semikolon (";"). Das Semikolon ist für die korrekte Interpretation der Zuweisung erforderlich, weil man in SeL Zuweisungen schachteln kann (s.u.). Ein vergessenes Semikolon wird in vielen Fällen keinen Syntaxfehler hervorrufen, weil die Zuweisung aus der Sicht von SeL legal sein wird. Man wird allerdings dadurch eine unerwartete Schachtelung der Zuweisungen erhalten, die später zu Folgefehlern oder einem abenteuerlichen Verhalten der SeL-Datei führen wird. Achten Sie also bitte immer auf den korrekten Abschluß Ihrer Zuweisungen.
Einer Variable können mehrfach Werte zugewiesen werden. Die alten Werte werden dadurch überschrieben:
=GRUSS "Hallo"; =GRUSS "Guten Tag"; |
=GRUSS "Er sagte "Hallo""; |
=GRUSS <SQD>Er sagte "Hallo"</SQD>; |
=GRUSS "Zum Begrenzen von Zeichenketten kann man <SQD> benutzen!"; |
=GRUSS "Erste Zeile Zweite Zeile Dritte Zeile" ; |
Anführungsstriche und SQD sind in SeL fast immer gleichbedeutend. Der einzige Unterschied tritt bei der Verwendung von HTML-Triggern (s.u.) auf.
Kommentare werden wie in der Sprache C geschrieben, und dürfen (wie dort) nicht geschachtelt werden. Sie werden eingeleitet durch die Zeichenfolge /* und durch */ abgeschlossen:
/* Hier machen wie eine dreizeilige Zuweisung. Das hier ist übrigens ein Kommentar. */ =GRUSS "Erste Zeile Zweite Zeile Dritte Zeile" ; |
Eine weitere Form des Kommentars ist die "#if 0"-Anweisung. Da Kommentare nicht geschachtelt werden können, gibt es ein der Sprache C entlehntes Konstrukt, das in der Lage ist, ganze Blöcke von Anweisungen, einschließlich aller evtl. darin vorhandener Kommentare auszukommentieren. Das ist besonders praktisch, wenn während der Entwicklung eines SeL-Programms testweise ein Teil der Datei deaktiviert werden soll. So funktioniert es:
#if 0 /* Hier machen wie eine dreizeilige Zuweisung. Das hier ist übrigens ein Kommentar. */ =GRUSS "Erste Zeile Zweite Zeile Dritte Zeile" ; #endif =GRUSS "Hallo"; |
#if 1 /* Hier machen wie eine dreizeilige Zuweisung. Das hier ist übrigens ein Kommentar. */ =GRUSS "Erste Zeile Zweite Zeile Dritte Zeile" ; #endif =GRUSS "Hallo"; |
Im Gegensatz zur Sprache C werden keine weiteren Ausdrücke nach dem "#if" ausgewertet. Nur die Werte "0" und "1" sind zulässig.
$GRUSS |
=NAME "Andreas"; =GRUSS "Hallo, mein Name ist "$NAME; |
Durch die implizite Verkettung von Werten können Zuweisungen sehr lang und komplex werden. Innerhalb der rechten Seite einer Zuweisung können Variablenwerte eingesetzt, Funktionen aufgerufen, Schleifen durchlaufen werden (diese Dinge werden im einzelnen weiter unten besprochen), und alle diese Konstrukte geben Werte zurück, die in die Zuweisung aufgenommen werden. Hier folgt ein Beispiel für eine komplexe Zuweisung. Das Beispiel ist im Detail mit dem bisher gesagten nicht verständlich, aber es soll einen Eindruck davon vermitteln, wie eine komplexe Zuweisung in SeL aussehen kann:
=c if ($a!=$b) then "Ungleich" else "Gleich" fi " " $_env("PATH") " " <SQD>Und jetzt ein substring von "Hallo", beginnend mit Zeichen 1 und 3 Zeichen lang: </SQD> $_copy( "Hallo", 1, 3 ) <SQD> Dasselbe nur mit einer Laenge von 99 Zeichen: </SQD> $_copy( "Hallo", 1, 99 ) " Das Zeichen Nummer 4 (sollte o sein): " $_copy( "Hallo", 4, 1 ) " Mal sehen, wo de in uni-kassel.de matcht: " $_match( "uni-kassel.de", "de" ) " Mal sehen, wo com in uni-kassel.de matcht: " $_match( "uni-kassel.de", "com" ) " Mal sehen, wo kassel in uni-kassel.de matcht: " $_match( "uni-kassel.de", "kassel" ) " Und jetzt nochmal die vier letzten Zeichen von Hallo: " =startpos $_len("Hallo")-4; $_copy( "Hallo", $startpos, 999 ) ; |
=a "A"; =b =b1 "B1"; =b2 "B2"; ; =c $a$b; |
=a "Hallo "; =b "Welt"; =c $a$b; $c. |
Das Programm beginnt also seine sichtbare Ausführung beim Ausdruck "$c". Das "$c" wird evaluiert und expandiert zu "$a$b". $a wiederum ist "Hallo " und $b hat den Wert "Welt". Also ist $c gleich "Hallo Welt", und da $c der Startausdruck ist, wird dieser Wert auch als Ausgabe des SeL-Programms erscheinen.
Streng genommen muß ein SeL-Programm keinen Startausdruck haben. Folgendes Programm ist syntaktisch korrekt:
=a "Hallo "; =b "Welt"; =c $a$b; |
!a(void) "Hallo "; !b(void) "Welt"; =c $a()$b(); $c. |
Was uns hier interessiert, ist der Programmablauf. Auch hier wird zuerst das Startsymbol "$c" evaluiert, und das ruft widerum die Funktionen "a" und "b" auf, die die Werte "Hallo " und "Welt" erzeugen. Soweit klingt alles sehr ähnlich dem Programm mit den Variablen, und die Ausgaben der beiden Programme sind auch gleich. Wo nun liegt der Unterschied?
In einem Satz: Variablenzuweisungen werden in dem Moment vollzogen, wo der Interpreter der Zuweisung begegnet; Funktionen werden erst dann ausgeführt, wenn sie aufgerufen werden. Hier noch einmal die beiden Programmversionen, diesmal mit Zeilennummern. Wir werden im folgenden den Ablauf der beiden Versionen anhand dieser Zeilennummern besprechen. Die Zeilennummern dienen nur dieser Diskussion und sind natürlich nicht Teil des jeweiligen Programms.
Variante A: Variablen
A1: =a "Hallo "; A2: =b "Welt"; A3: =c $a$b; A4: $c. |
Variante B: Funktionen
B1: !a(void) "Hallo "; B2: !b(void) "Welt"; B3: =c $a()$b(); B4: $c. |
Man kann das ganze so zusammenfassen: die sicherste Art ein SeL-Programm zu schreiben, ist mit Funktionen. Sie funktionieren unter allen Bedingungen eher so, wie man das erwartet. Allerdings sind sie etwas schwerfälliger zu formulieren und sie sind langsamer in der Ausführung als Variablenzuweisungen (weil sie bei mehrfachen Aufrufen auch mehrfach durchlaufen werden). Der Autor, der das oben gesagte verstanden hat, kann also gezielt seine Programme optimieren, indem er geeignete Funktionen durch Variablenzuweisungen ersetzt.
lib "ghk.mas"; |
Bibliothek test.mas
fwd NAME; !main(void) "Ihr Name ist: "$NAME ; $main(). |
Inhaltsdatei test.sel
lib "test.mas"; =NAME "Andreas"; |
Außerdem benötigen wir in diesem Fall eine sogenannte Forward-Deklaraion des Symbols NAME (erste Zeile des Masterfiles). Die genaue Bedeutung einer solchen Forward-Deklaration wird im nächsten Abschnitt besprochen.
Es gibt weiterhin die Möglichkeit, ähnlich wie in C, Bibliotheken zu inkludieren, um bestimmte, in SeL selbst nicht enthaltene Funktionen zu nutzen. Ein Beispiel ist die mitgelieferte Datei percentbars.lib. Nachdem sie mit "lib" inkludiert wurde, steht im weiteren Programmablauf die Funktion $percentbar (da es sich nicht um eine eingebaute Funktion handelt, beginnt der Funktionsname nicht mit "$_") zur Verfügung. Diese Funktion gibt auf der Basis übergebender Argumente HTML-Code zurück, der im Browser als Prozent-Balken gerendert wird.
lib "percentbars.lib"; =BAR $percentbar("42","0","CENTER"); |
Ergebnis:
|
Anhand des mitgelieferten Beispiels können leicht weitere Bibliotheken geschrieben und weitergegeben werden. Bitte dokumentieren Sie Syntax und Funktionalität Ihrer Funktionen in einem Kommentar im Kopf der Bibliothek und beachten Sie die im Beispiel eingehaltene Namenskonvention für Variablennamen in Bibliotheken: Variablennamen beginnen hier immer mit "lib.", es folgt der Name der Bibliothek, dann einem weiteren "." und schließlich einer frei wählbaren Zeichenkette (z.B. lib.percentbars.type). Wenn Sie nützliche Funktionen entwickelt haben, die Sie mit anderen SeL-Nutzern teilen wollen, können Sie sie an uns senden und wir werden sie in der SeL-Distribution veröffentlichen (eMail-Adressen am Anfang dieser Dokumentation).
File ./test.mas Line 3: Error: Reference to undefined symbol /main/NAME at `NAME' |
"Ihr Name ist: "$NAME |
Jetzt sind wir bei der "fwd"-Anweisung angelangt. Mit
fwd NAME; |
=NAME ""; |
fwd LAYOUT INDEX URL KEYWORDS TITLE AUTHOR MAILTO DATE INSTITUTION INSTLOGO ADDRESS WIDTH UPLINK HELP HELPURL SEARCH SEARCHURL REMINDER SCRIPT CONTENT LANGUAGE LOCATION ADDTOBODY; |
Falls Sie Turbo-Pascal kennen, werden Sie die "fwd"-Anweisung, die in Pascal eine FORWARD-Deklaration ist, wiedererkennen. Auch C hat ein ähnliches Konstrukt: die extern-Deklaration von Variablen.
=GRUSS if ($NAME=="Andreas") then "Hallo" else "Guten Tag" fi ; |
Der else-Zweig ist optional und kann entfallen:
=GRUSS if ($NAME=="Andreas") then "Hallo" fi ; |
Vergleichsoperatoren
Die Vergleichsoperatoren orientieren sich an der Sprache C. Hier eine
Übersicht:
Vergleichsoperation SeL-Symbol
Gleich ==
Ungleich !=
Kleiner <
Größer >
Kleiner oder gleich <=
Größer oder gleich >=
=ZAHLEN for (i,1,9) do $i" " done ; |
Manchmal möchte man eine "for"-Schleife in anderen Schritten als 1 zählen lassen. Dazu kann man das vierte (optionale) Argument der Schleife verwenden: die Schrittweite (step). Ein Beispiel:
=ZAHLEN for (i,9,1,"-2") do $i" " done ; |
=ERGEBNIS :nochmal "Schleifeninhalt..." if ($weiter()!="nein") then goto nochmal fi ; |
Eine Positionsmarkierung (label) wird durch:
:Markierungsname |
goto Markierungsname |
Aufruf: | _hex( digits, decimal ) |
Beschreibung: | Konvertiert dezimal nach hexadezimal |
Beispiel: | $_hex(2,15) |
Ergebnis: | 0F |
Parameter: | digits: Anzahl der Stellen für das Ergebnis decimal: Dezimaler Wert, der konvertiert werden soll |
Aufruf: | _dec( digits, hex ) |
Beschreibung: | Konvertiert hexadezimal nach dezimal |
Beispiel: | $_dec(2,"A") |
Ergebnis: | 10 |
Parameter: | digits: Anzahl der Stellen für das Ergebnis hex: Hexadezimaler Wert, der konvertiert werden soll |
Aufruf: | _len( string ) |
Beschreibung: | Gibt die Länge einer Zeichenkette zurück |
Beispiel: | $_len("Hallo") |
Ergebnis: | 5 |
Parameter: | string: Zeichenkette, deren Länge bestimmt werden soll |
Aufruf: | _copy( string, startpos, count ) |
Beschreibung: | Gibt einen Teil einer Zeichenkette zurück |
Beispiel: | $_copy( "Hallo", 1, 3 ) |
Ergebnis: | all |
Parameter: | string: Ursprüngliche Zeichenkette startpos: Erstes Zeichen des Ergebnisses (Beginn mit 0!) count: Anzahl der Zeichen, die extrahiert werden sollen |
Aufruf: | _match( string, substring ) |
Beschreibung: | Sucht eine Teilzeichenkette in einer Zeichenkette. Gibt die Zeichenposition zurück, an der ein Treffer gefunden wurde, oder "-1" falls die Teilzeichenkette in der Zeichenkette nicht vorkommt. |
Beispiel: | $_match("uni-kassel.de", "de") |
Ergebnis: | 11 |
Parameter: | string: Ursprüngliche Zeichenkette substring: Teilzeichenkette, die gesucht werden soll |
Aufruf: | _bstrip( text ) |
Beschreibung: | Gibt den Teil von "text" zurück, der zwischen <BODY> und </BODY> steht. |
Beispiel: | $_bstrip($_include("http://www.uni-kassel.de")) |
Ergebnis: | Text zwischen <BODY> und </BODY> (exclusiv) |
Parameter: | text: Eine Textvariable, Konstante, oder ein Funktionswert, der sinnvollerweise HTML-Text enthalten sollte. |
Anmerkung: | Vgl. hierzu auch die Funktionen _include() und _frl(). Wenn in "text" kein <BODY> vorkommt, dann wird der ganze Inhalt von "text", ggf. inclusive eines abschließenden </BODY> zurückgegeben. Wenn in "text" zwar ein <BODY> aber kein </BODY> vorkommt, dann wird "text" vom <BODY> beginnend bis zum Dateiende zurückgegeben. |
Aufruf: | _frl( text ) |
Beschreibung: | Ersetzt relative HTTP-Links in HTML-Dokumenten durch absolute ("Fix Relative Links"). |
Beispiel: | $bstrip($_frl($_include("http://www.uni-kassel.de"))) |
Ergebnis: | Der BODY-Teil des Dokuments http://www.uni-kassel.de, in dem alle relativen Links durch absolute ersetzt wurden. |
Parameter: | text: Eine Textvariable, Konstante, oder ein Funktionswert, der sinnvollerweise HTML-Text (inclusive eines BASE-HREF-Tags) enthalten sollte. |
Anmerkung: | Vgl. hierzu auch die Funktionen _include() und _bstrip(). Zur Expansion relativer Links wird ein BASE-HREF-Tag in "text" benötigt ($_include() erzeugt eines mit Hilfe von Lynx). Wenn in "text" kein <BASE HREF> vorkommt, dann wird keine Konvertierung der Links durchgeführt. |
Aufruf: | _toupper( text ) |
Beschreibung: | Konveriert Kleinbuchstaben in "text" in Großbuchstaben. |
Beispiel: | $_toupper("SeL") |
Ergebnis: | SEL |
Parameter: | text: Eine Variable, die Text enthält, eine Textkonstante oder ein Funktionsaufruf, der Text zurückgibt. |
Anmerkung: | Vgl. Funktion _tolower(). |
Aufruf: | _tolower( text ) |
Beschreibung: | Konvertiert Großbuchstaben in "text" in Kleinbuchstaben. |
Beispiel: | $_toupper("SeL") |
Ergebnist: | sel |
Parameter: | text: Eine Variable, die Text enthält, eine Textkonstante oder ein Funktionsaufruf, der Text zurückgibt. |
Anmerkung: | Vgl. Funktion _toupper(). |
Aufruf: | _env( name ) |
Beschreibung: | Gibt den Wert einer Umgebungsvariable zurück |
Beispiel: | $_env("REMOTE_HOST") |
Ergebnis: | hrz-ws48.hrz.uni-kassel.de |
Parameter: | name: Name der Umgebungsvariable |
Aufruf: | _date( format ) |
Beschreibung: | Gibt die Systemzeit zurück |
Beispiel: | $_date("%d %h %Y: %H:%M:%S") |
Ergebnis: | 26 May 1999: 17:17:23 |
Parameter: | format: Ausgabeformatierung. Dieser Parameter wird wie der Format-Parameter der C-Funktion "strftime()" verarbeitet. Siehe dort für weitere Hinweise zur Ausgabeformatierung. |
Aufruf: | _dirname( pfad ) |
Beschreibung: | Gibt den Verzeichnisanteil einer Unix-Pfadangabe zurück |
Beispiel: | $_dirname("/home/WWW/docs/Welcome.ghk") |
Ergebnis: | /home/WWW/docs |
Parameter: | pfad: Vollständiger Pfad. Der Verzeichnisanteil entspricht der Ausgabe des Unix-Kommandos "dirname". Der Pfad muß nicht existieren. |
Aufruf: | _include( pfad ) |
Beschreibung: | Gibt den Inhalt einer Datei zurück |
Beispiel: | $_include("/etc/motd") |
Ergebnis: | [Inhalt der Datei] |
Parameter: | pfad: vollständiger Pfad zur einzufügenden Datei. Der Pfad wird auf Sicherheit geprüft und muß vom SeL-Administrator für diesen Zweck freigegeben worden sein. Im Fehlerfall wird eine Fehlermeldung anstelle des Dateiinhalts zurückgegeben. SeL-Kommandos, die sich ggf. in der Datei befinden, werden nicht ausgeführt, sondern nur als Text zitiert. Um Dateien mit SeL-Code (Bibliotheken) einzubinden, vgl. lib |
Anmerkung: | In früheren SeL-Versionen hieß diese Funktion (etwas unglücklich) _source(). Ab Version 0.4 wird _source() zwar noch erkannt, sollte aber in neuen Anwendungen nicht mehr benutzt werden. |
Aufruf: | _include( URL ) |
Beschreibung: | Gibt den HTML-Code der WWW-Adresse "URL" zurück |
Beispiel: | $_include("http://www.uni-kassel.de") |
Ergebnis: | [HTML-Text] |
Parameter: | URL: vollständige URL. Damit dieser Aufruf funktioniert, muß der Administrator diese Funktion freigeschaltet haben; andernfalls erfolgt eine Fehlermeldung. Zur Zeit wird nur das Protokoll "http" unterstützt. |
Anmerkung: | Vgl. hierzu auch die Funktionen _bstrip() und _frl(). |
Aufruf: | $_read() |
Beschreibung: | Liest CGI-Query von Standard Input. |
Beispiel: | =cgi.in $_read(); |
Ergebnis: | CGI post query string |
Parameter: | keine |
Anmerkung: | Vgl. auch $_cgiparse() zum Parsen von CGI Variablen/Werten und $_cgival() zum Auslesen einzelner Werte. |
Aufruf: | $_cgiparse() |
Beschreibung: | Zerlegt Strings in CGI-Query-Syntax in Variablen/Werte-Paare und konvertiert enthaltene hexadezimale Query-Codierungen zurück in ASCII-Darstellung. |
Beispiel: | $_cgiparse($_read) |
Ergebnis: | Intern aufgelöste CGI-Variablen und deren Werte. |
Parameter: | text: einen String in der Syntax, in der CGI-Programme empfangene Formular-Inhalte vom WWW-Server übergeben bekommen. |
Anmerkung: | $_cgiparse() erfordert typischerweise zunächst die Ausführung von $_read(). Vgl. auch $_read() zum Einlesen des CGI-Query-Strings und $_cgival() zum extrahieren eines darin übergebenen Wertes. Diese eingebaute Funktion basiert u.a. auf Programmcode aus der C-Bibliothek "cgic" von Thomas Boutell. |
Aufruf: | $_cgival() |
Beschreibung: | Gibt den Wert einer CGI-Variablen zurück. |
Beispiel: | $_cgival("element") |
Ergebnis: | Der Wert, der in dem übermittelten Formular dem Element "element" zugewiesen wurde. |
Parameter: | text: Ein CGI-Variablenname (also der Name eines verschickten Formular-Elements). |
Anmerkung: | $_cgival() erfordert typischerweise zunächst die Ausführung von $_read() und dann die Ausführung von $_cgiparse(). Vgl. auch $_read() zum Einlesen des CGI-Query-Strings und $_cgiparse() zum Zerlegen von CGI-Query-Strings. Diese eingebaute Funktion basiert u.a. auf Programmcode aus der C-Bibliothek "cgic" von Thomas Boutell. |
Aufruf: | _setcookie( name, wert ) |
Beschreibung: | Erzeugt HTML-Code für das Setzen eines Cookies mit dem Namen "name" und dem Wert "wert" |
Beispiel: | $_setcookie( "prinzen", "rolle" ) |
Ergebnis: | <meta http-equiv="set-cookie" content="prinzen=rolle;path=/;"> |
Parameter: | name: Der Name des Cookies wert: der Wert, der dem Cookie zugewiesen werden soll. |
Anmerkung: | SeL erzeugt nur den HTML-Code für das Cookie und gibt ihn zurück. Es liegt in der Verantwortung des Masterfiles, eine Variable vorzusehen, die im HEAD der HTML-Ausgabe eingefügt wird, und die diesen Code aufnehmen kann (Cookies funktionieren nicht im BODY der Datei!) Diese Funktion bietet zur Zeit keine Möglichkeit, das Expiration-Date eines Cookies zu setzen. |
Aufruf: | _getcookie( name ) |
Beschreibung: | Gibt den Wert des Cookies mit dem Namen "name" zurück |
Beispiel: | $_getcookie( "prinzen" ) |
Ergebnis: | rolle |
Parameter: | name: Der Name des Cookies |
Anmerkung: | Wenn das Cookie nicht gesetzt ist, gibt diese Funktion einen leeren String zurück. |
Aufruf: | _selversion |
Beschreibung: | Gibt die Versionsnummer des SeL-Interpreters zurück |
Beispiel: | $_selversion |
Ergebnis: | $Id: sprache.html,v 1.5 2000/03/24 23:29:39 andy Exp $ |
Parameter: | Keine |
Anmerkung: | _selversion gehört eigentlich nicht hierher: es ist eine vordefinierte Variable und keine Funktion; wird deshalb auch ohne Parameterklammern aufgrufen. |
Name: | #if |
Beschreibung: | Konditionale Compilierung von SeL-Code |
Beispiel: | #if 0 ... ... #endif |
Ergebnis: | Der zwischen "#if 0" und "#endif" stehende Code wird nicht ausgeführt. Mit "#if 1" statt "#if 0" kann er wieder aktiviert werden. |
Parameter: | 0 oder 1 |
Anmerkung: | Im Gegensatz zu C sind nur 0 und 1 als Parameter zulässig, nicht aber andere Ausdrücke. |
Aufruf: | lib "file" |
Beschreibung: | Bindet eine externe Datei mit SeL-Code (Bibliothek) in das Programm ein |
Beispiel: | lib "ghk.mas" |
Ergebnis: | [Dateiinhalt von ghk.mas] |
Parameter: | file: Dateiname. Der Name muß sich in einem vom Administrator für diesen Zweck freigegebenen Verzeichnis befinden. Er kann absolut oder relativ angegeben werden. Wenn er relativ ist, wird ein vom Administrator konfigurierter Suchpfad durchsucht. |
Anmerkung: | Im Gegensatz zu _include() wird hier der Inhalt der Datei ausgeführt und nicht bloß eingebunden. Diese Direktive hieß in früheren SeL-Versionen "#include". "#include" wird weiterhin unterstützt, sollte aber in neuen Anwendungen nicht mehr eingesetzt werden. |
Trigger entsprechen in ihrer Funktionalität damit etwa den HTML-Style-Sheets,
werden aber vollständig innerhalb von SeL (und damit serverseitig) behandelt,
ohne daß der Browser des Benutzers damit in Berührung kommt.
Trigger werden durch die Anweisung html_trigger definiert:
Arrays (Variablenfelder)
Referenzieren von ungültigen Array-Elementen
Benutzerdefinierte Funktionen
Referenzieren von Funktionen als Variablen
HTML-Trigger
Ab Version 05-11 unterstützt SeL das Konzept der Trigger: Damit kann
man auf einfache Weise bestimmte Tags (im Moment nur HTML-artig formulierte
Tags), die irgendwo in SQD-Konstanten vorkommen, durch einen Funktionsaufruf
ersetzen und diese Tags, statt sie anzuzeigen, durch beliebigen SeL-Code
ersetzen.
html_trigger tag; |
html_trigger H1; |
html_trigger H1; html_trigger H2; html_trigger BODY; |
html_start_tag( attributes ) |
html_end_tag( attributes ) |
!html_start_H1( attributes ) ... ... ; |
Die Trigger-Funktionen bekommen immer einen Parameter von SeL übergeben: die Attribute des Tags (z.B. BGCOLOR im BODY-Tag). Hat das Tag keine Attribute, so wird ein leerer String übergeben.
Der Rückgabewert der Trigger-Funktion wird statt des ursprünglichen Trigger-Tags in den Quelltext des SeL-Programms eingefügt und dann wird die Compilierung fortgesetzt. Trigger-Tags können also durch beliebig komplexe SeL-Anweisungsfolgen ersetzt werden.
Beachten Sie bitte auch, daß SeL keine Kenntnis bestimmter HTML-Tags hat, d.h. die Trigger sprechen auch auf nicht standardgemäße Pseudotags an. Man kann also bei Bedarf eigene Tags erfinden und diese mittels Trigger in SeL behandeln.
Ein Beispiel für die Verwendung von Triggern liegt als test19.sel der Distribution bei.