[Allegro] Nochmals: ik,x etc.

Bernhard Eversberg ev at biblio.tu-bs.de
Di Apr 19 11:34:05 CEST 2011


Am 19.04.2011 10:58, schrieb Fischer, Thomas:
>
>  1. Die Indikatorprüfungen ik,x, Ik,x, vk,x und Vk,x testen die am
>  Anfang der Zeile angegebene Variable (z.B. #30 oder #uxy) darauf, ob
>  der Wert an der Stelle k geich/ungleich x bzw. kleiner/größer als x
>  ist. Dieser Vergleich findet mit dem noch unmodifizierten Wert statt,
>  also *vor* Anwendung etwaiger Manipulationen. (Herr Eversberg: hier
>  bin ich mir nicht ganz sicher, was längenverändernde Umkodierungen
>  betrifft.) Mit #cc hat der Test per se nichts zu tun.
>
Umcodierung wirkt sich nicht aus, es wird direkt im momentanen
Aufnahmespeicher getestet, also nicht im aktuellen Arbeitstext.
Die Positionszählung bezieht sich auf den vollständigen Feldinhalt,
also auf  "#20 Titel"  und nicht auf den Feldtext "Titel"

>  Beispiel: #uxy p'Auf 5 steht ein a!' e '!' i5,a gibt 'Auf 5 steht ein
>  a!' genau dann aus, wenn auf der fünften Position von #uxy 'a' steht.
>  Bei dieser Zählung wird die Kategorienlänge tN aus der Konfiguration
>  +1 für die Mehrfachkennung eingerechnet. Kleinere Ziffern testen den
>  *Namen* der Variablen.
>
>  2. Die Variable #cc speichert den *Namen* der zuletzt aufgerufenen
>  Kategorie.
Nicht den Namen, sondern wie unter 1. den vollständigen Feldinhalt,
wie er im Aufnahmespeicher steht.
Außerdem speichert #cc nichts, d.h. es ist keine Kopie von etwas,
sondern #cc ist nur ein Zeiger auf das erste Zeichen des Feldinhalts,
d.h. auf dessen #. Wenn es dann heißt  #i4..., dann wird auf diesen
Zeiger 4 addiert und das Byte an der sich so ergebenden Stelle
wird genommen.

>  Dieser bleibt innerhalb eines Unterprogramms konstant, der
>  *Inhalt* der Variablen kann aber verändert werden. Die
>  Indikatoraktionen #ik,x und #Ik,x vergleichen mit dem *Inhalt* dieser
>  Variablen bzw. ihrem Namen, wenn die Ziffer k kleiner als tN+2 ist.
>
Das hört sich etwas verworren an. Das zuletzt vor dem Aufruf eines
UP benutzte Feld (letzte Zeile mit #nnn ...) ist die Adresse, auf
die #cc zeigt, und diese bleibt konstant. Wird im UP ein Feld
in den Arb.Speicher VOR das betr. Feld eingefügt, stimmt die
Adresse nicht mehr! Sicherer ist dann, am Beginn des UP so etwas
wie
#cc =xy e0
zu machen, dabei wird das Feld, auf das #cc zeigt, in #uxy kopiert.

>  Beispiel: #uxy P>A e0 #+# #(A 22='Auf 5 steht ein u!' #uxy p'auf' e3
>  =xy #i5,u 22 #)A gibt 'Auf 5 steht ein u!' aus, unabhängig von der
>  Belegung von #uxy vor dem Aufruf des Unterprogramms A. Natürlich muss
>  #uxy vorher definiert sein.
>
Das stimmt.

B.E.

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://bibservices.biblio.etc.tu-bs.de/pipermail/allegro/attachments/20110419/de24bb94/attachment.html>


Mehr Informationen über die Mailingliste Allegro