[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