[Allegro] a99: erase offline nach set rec lock\put unlock

Bernhard Eversberg ev at biblio.tu-bs.de
Mo Jan 24 14:39:55 CET 2011


Am 24.01.2011 13:57, schrieb Anando Eger:
>
> schon lange bin ich auf der Jagd nach einem Fehler,
> durch den scheinbar unmotiviert Satz 1 der Datenbank
> angezeigt wird.
>
> Nun hab' ich ihn!
>
> Wird ein Satz gelöscht, danach ein anderer verriegelt und wieder
> mit "put unlock" freigegeben, "verstellt" ein folgendes
> 'erase offline' offensichtlich den internen Satzspeicher +
> zugehörige Variablen.
>
> Nachvollziehbar mit diesem Einzeiler
>
> x new 0\#00 0\put\erase\f1nd |9 sed\set rec l\put u\erase off\dis
>
> mit dem aktuellen a99 in der Demo-Datenbank (Der Satz mit der
> '#00 sed' sollte vorher vorhanden sein)
>
> Nach der Ausführung obiger Befehlsfolge erscheint Satz 1 der
> Datenbank anstatt des SED-Körperschaftsstammsatzes.
>
> Lasse ich 'set rec l\put u' weg, funktioniert alles scheinbar
> normal.
>
Es handelt sich nicht um einen Fehler, sondern ein Sicherheitsfeature.
Die Situation ist doch so:

Das "set rec lock" tut nichts zur und ändert nichts an der Sache.
Durch das "put" gelangt der Satz zusätzlich in den Reservespeicher.
Beseitigt man diesen mit "erase off" - was soll dann das Programm
machen? Wenn dieser Befehl kommt, dann prüft es nicht, ob der aktuelle
Satz einer ist, der durch "erase off" verschwände oder nicht. Daher
lädt es standardmäßig den Satz 1, den gibt es immer, und es kann nichts
schiefgehen, falls der noch in der Anzeige stehende Satz aus irgendeinem
Grunde gar nicht erwünscht ist, weil er eben (in der angezeigten Form)
nur im Offline-Speicher stand, nun aber nicht mehr steht. (Und wer
weiß, was geschähe, wollte man damit nun irgendetwas tun.)

Abhilfe, wenn hernach derselbe Satz zu sehen sein soll wie zuvor:
Vorher die interne Satznummer sichern:

var i
ins $i

und am Ende, also nach "erase off", den Satz restaurieren bzw. Satz 1
nehmen, wenn der aktuelle zum Zeitpunkt der Ausführung ein offline-Satz
war (der ja dann weg ist):

var "#" $i
if "#0" var "#1"
f1nd
dis
sho rec

B.E.



Mehr Informationen über die Mailingliste Allegro