[Allegro] Revision der Lock-Befehle
Bernhard Eversberg
ev at biblio.tu-bs.de
Mi Mai 9 09:25:00 CEST 2012
Wir haben jetzt erst mal eine Revision der Lock-Befehle gemacht.
Zunächst ist acon.zip mit den neuen Eigenschaften ausgestattet
und liegt bereit.
Es mußte, um allen uns einfallenden (also nicht allen) Gegebenheiten
gerecht zu werden, ein Eingriff in die Klassenbibliothek erfolgen, was
nicht so gern mehr gemacht wird, und es gibt eine neue Sondervariable
namens sL (status of Locking), die den Status der zuletzt erfolgten
Lock- oder Unlock-Aktion wiedergibt. Mit var sL ruft man sie ab
und kann sie dann pruefen, siehe unten.
Peinlich genau wurde drauf gesehen, daß zwischen Prüfen und Locken
keine Mikrosekunde verstreicht, die ein Saboteur ausnutzen könnte.
Mag natürlich sein, daß das Programm nun aus anderen Gründen, die
uns nicht auffielen, völlig nutzlos ist - dann widmen wir uns lieber
erst mal der archivierenden Aufarbeitung der Vergangenheit...
Automatisch wird gelockt bei get edit first... usw. und auch
beim nächsten solchen Befehl bzw. find ... (der dann aktuelle Satz),
und auch am Ende des FLEXes der Satz wieder freigegeben.
Keine automatische Freigabe erfolgt aber NICHT, wenn man ausdrücklich
einen Befehl set lock #nummer gibt, d.h. einen anderen als den
aktuellen Satz sperrt. Die Syntax
var "123"
set lock # bzw. set unlock #
geht übrigens auch, sowie gleichermaßen if Lock #
Hier die erweiterte Doku zu den Befehlen set lock und set unlock
(die für den aktuellen Satz entfallen können nach get edit ...)
set lock avanti
set unlock avanti
Datensatz für Schreibzugriff blockieren (lock) bzw. freigeben
Mit if yes ... bzw. if no ... kann man testen, ob es geklappt hat.
Statt mit set unlock kann man einen Satz auch mit put unlock
wieder freigeben, d.h. er wird dann geschrieben, obwohl er gesperrt ist.
Automatisch, etwa am Ende des Jobs, wieder freigegeben wird der Satz
nicht, d.h. das muß man mit set unlock selber tun.
Hinweis: Bei avanti kann man einen Satz schon beim Einlesen mit get
sperren lassen: get edit ...
Ab V32.4 :
Wichtige Zusatzfunktion: Hinter beide Befehle kann man noch #Num
setzen, mit einer internen Satznummer Num . Fehlt diese, wird der
iV-Inhalt genommen, d.h man kann z.B. schreiben, wenn in $nummer die
Satznummer steht:
var $nummer\set lock #
Noch eine Zusatzfunktion: Im Anschluß an diese Befehle kann man die
Sondervariable sL auswerten, aus der noch etwas mehr zu entnehmen ist:
var sL
Werte von sL (einige treten nur bei set lock auf:
1 = Sperren/freigeben hat geklappt
0 = Satznummer zu klein oder zu groß (Minimum 1)
-1 = lock geht nicht (TBL gesperrt)
-2 = .TBL-Eintrag falsch
-3 = .ALD-Datei oeffnet nicht
-4 = Falsches Byte am Satzbeginn
-6 = Keine Schreibberechtigung
8 = Satz war (schon) gesperrt
9 = Satz ist geloescht (Sperren geht nicht)
Mehr Informationen über die Mailingliste Allegro