[Allegro] acon: if Del ... nach fetch record

Bernhard Eversberg ev at biblio.tu-bs.de
Mi Jun 16 08:33:41 CEST 2010


Thomas Berger schrieb:
>>>
>> "if del" bezieht sich auf den aktuellen, regulär geladenen Satz. Das
>> darf nicht mit dem per "fetch rec" gelesenen vermengt werden.
> 
> ah, ich dachte er sei geladen, nur halt unter Verzicht des
> Ausbreitens der Kategorien in den Arbeitsspeicher.
> 
Hm, wie Sie das jetzt genau meinen, erschließt sich mir nicht.

Hier nochmal zusammengefaßt alles, was zu "fetch record" wichtig ist:
(Doku xfetch.rtf ist in SVN erneuert)

Programm acon hat zu jedem Zeitpunkt genau einen aktuellen Satz im
Arbeitsspeicher (der kann leer sein). Mit "fetch" wird ganz allgemein
aus einer Datei gelesen, das kann irgendeine sein, die mit allegro
nichts zu tun hat und die man vorher mit "open name" geöffnet hat.
Was gelesen wird, landet in der iV.
Ist es eine allegro-Datei (.ALG, .ADT, .LOG, .ALD), wird mit dem
Spezialbefehl "fetch rec" der Satz in definierter Weise eingelesen,
aber eben auch in die iV, nirgends sonst, und die Variable iR wird
mit seiner Satznummer belegt - falls es .LOG oder .ALD ist. Die
Bedingung "Deleted" wird gesetzt, falls es ein als gelöscht markierter
Satz einer .ALD oder .LOG ist, iR ist dann negativ.
Das ist alles.
Denkbar ist also, und man sollte es nicht ausschließen, daß das
Einlesen den aktuellen Satz nicht stören soll, sondern daß man es
nebenbei, aus welchem Grund auch immer, veranstaltet.

In einem zweiten Schritt kann man sonstwas mit dem iV-Inhalt anstellen.
Z.B. können Sie "set obj 2" machen und den Satz mit "insert" dort
zu einem regulären Satz im Arbeitsspeicherformat machen. Dann haben Sie
alle Information, die Sie in Ihren weiteren Ausführungen reklamieren
wollen. Infolgedessen sehe ich keinen weiteren Handlungsbedarf.
Welcher Dateityp es nun gerade ist, dazu bedarf's keiner weiteren
cstring-Sondervariablen, das kann man sich in $Dateityp merken oder,
wenn man faul ist, in $t, falls man sich das überhaupt merken muß
und nicht aufgrund der Umstände gar kein Zweifel aufkommen kann,
was der Normalfall sein dürfte.

Kurz: Warum umständlich, wenn's auch einfach geht?

Daß "fetch" momentan in acon keine andere Aktion machen kann als
"fetch rec", das tut der Sache keinen Abbruch, es wird bei Bedarf
auf den Funktionsumfang von a99 erweitert, mit dem es dann
natürlich kompatibel sein sollte. Momentan ist es das nicht.
In a99 muß man folgende Sequenz nehmen, wenn man eine .ALD liest und
Satznummer und Satzstatus haben will:

fet b     // liefert 9 in iV, wenn gelöscht, sonst 1 oder 8 (gesperrt)
fet b4    // liefert interne Satznr in iV
z=        // kopiert sie in den internen Zähler
fet rec
Und hiermit steht dann der Satz mit Zeilentrennern in der iV, nicht mit
statt dessen ;# (Code 00 wird in a99 durch 10 35 ersetzt)

Das ist natürlich noch unbefriedigend, wird aber z.B. in ftr.flx 
verwendet. Irgendwas muß da noch geschehen.
Zunächst muß man, nach den jetzt erfolgten Änderungen, in dem
Job  update.job  die Sequenz "var z" ersetzen durch "var iR",
was aber nur bei LOG-Einspeisung wichtig ist. update.job ist in
SVN erneuert.

B.Eversberg



Mehr Informationen über die Mailingliste Allegro