AW: [Allegro] Trick 31: FLEXe verschachteln
Bernhard Eversberg
ev at biblio.tu-bs.de
Di Jan 2 11:43:57 CET 2007
Thomas Fischer schrieb:
>
> der Trick kommt mir nützlich vor, leider verstehe ich ihn nicht.
> Genauer: ich verstehe die verwendete Flex-Sprache noch nicht ganz, weil ich
> einmal wieder die Befehlsbeschreibungen nicht finde. Den include-Befehl habe
> ich in meiner Dokumentation (v.26.8) zunächst nicht gefunden, weil er nicht
> in der alphabetischen Reihenfolge aufgeführt ist. Muss das so sein?
>
Ja, denn include ist kein Befehl. Es bewirkt, daß an der Stelle, wo es
steht, beim Start der Abarbeitung etwas anderes steht, und zwar der Text
der Datei, die hinter include angegeben ist. Das "include" wird also,
m.a.W., VOR der Abarbeitung des gesamten FLEXes ausgeführt, nicht erst
zu dem Zeitpunkt, wenn die betr. Stelle erreicht wird. (Eine FLEX-Datei,
mit noch anderen Worten, wird stets zuerst als Ganzes eingelesen, bevor
die Abarbeitung mit der ersten Zeile beginnt. Und beim Einlesevorgang
wird bereits das "include" erledigt.)
Zu finden ist "include" in der ViewListe: v flex eingeben, dann "inc"
> Schwieriger ist es aber mit der Methode 2. Es wäre nett, wenn Sie noch ein
> paar Erklärungen zu den einzelnen Schritten geben könnten.
>
>
>> 2. Rückaufruf des ersten FLEXes
> ...
>> zuerst die Variable #urC löschen!
>> #urC
>> ins #urC // iV-Inhalt in #urC speichern
>> var #urC // pruefen, ob das mit "jump" anfaengt
>> if "jump" var #urC(b"jump ");jump
>> ... // beliebiger Inhalt
>> exec zweit.flx first;weiter
>> :weiter
>
> 1. Was bewirkt
> #urC
Das Löschen der Variablen #urC. Genausogut können Sie schreiben:
var ""
ins #urC
>
> 2.
> Meine Vorstellung ist:
> ins #urC: iV in #urC schreiben
> var #urC: #urC in iV schreiben
> (Mir ist das Verhältnis von "interner Variabler" zu dem Allegro-Konzept des
> Arbeitstexts nicht ganz klar.)
> So naiv interpretiert würde
> ins #urC
> var #urC
> iV in #urC und #urC in iV schreiben.
> Wofür ist das gut?
> Und was steht eigentlich nach dem insert-Befehl in der iV?
>
Entscheidend ist hier, was VORHER drinsteht. Beim Aufruf dieses
FLEXes wird ihm nämlich ein Inhalt mitgegeben, und der kommt dann
automatisch in die iV. Er wird durch das erste "ins #urC"
in #urC kopiert.
> 3.
> if "jump" var #urC(b"jump ");jump
> bewirkt, dass zu <Marke> gesprungen wird, wenn die iV "jump <Marke>"
> enthält.
> Sollte da sicherheitshalber auf
> if "jump "
> geprüft werden, weil auch b"jump " benutzt wird?
>
OK, waere besser.
> 4.
> Was ist
> exec zweit.flx first;weiter
> für eine Konstruktion? Das sieht aus als würde das "first;weiter" in dem
> #urC von zweit.flx ankommen, wieso?
Ja, der FLEX zweit.flx wird gestartet und er findet in der iV sofort
die Angabe first;weiter
Die wertet er so aus, daß hinterher "first.flx" wieder zurueckgerufen
wird und ihm das Label "weiter" übergeben wird.
B.E.
Mehr Informationen über die Mailingliste Allegro