[Allegro] HFM : Neue Lösung, a99-Prototyp zum Testen
Bernhard Eversberg
ev at biblio.tu-bs.de
Mo Jun 23 07:23:28 CEST 2014
2014-06-23
HFM : Neue Lösung
-----------------
Am Freitag war entschieden worden, sich nochmal "einen Kopf zu machen"
hinsichtlich der Hochfrequenz-Mehrfachfelder (HFM).
(Standard-Anwender sind von der Thematik nicht betroffen, sondern nur
jene, die bei einigen Feldern mehr als die bisher möglichen
Mehrfachbelegungen brauchen.)
Hiermit wird eine Lösung vorgelegt, die zunächst mehr oder weniger
prototypisch in a99 umgesetzt wurde, also realistisch ist.
http://www.allegro-c.de/aktuelle-version/a99hfm.zip
[Der neue FTP-Service muß noch weiter verbessert werden ...]
Die ZIP-Datei enthält ein a99hfm.exe zum Ausprobieren.
Uns scheint nach tiefschürfender Beschäftigung mit der Materie die
hier beschriebene Lösung das Äußerste zu sein, was wir unter den
gegebenen Umständen und Randbedingungen realisieren können.
Bei Zustimmung versuchen wir uns, so schnell's eben geht, an einer
vollständigen Implementierung.
Bei substantiellen Bedenken oder Ablehnung nicht, dann bleibt's bei der
vorige Woche beschriebenen Kompromißlösung, die mit einem FLEX auskommt
und die Quellprogramme nicht ändert.
Zu den Details der Lösung:
(Am Ende unter ABER stehen drei noch nicht klappende Sachen)
o Die bisher möglichen Mehrfachfeld-Kennungen bleiben voll erhalten,
d.h. keine Änderungen bestehender Daten werden fällig.
o Anwendungen arbeiten mit den neuen Programmen unbetroffen weiter,
also auch keine Änderungen nötig in Parametern, FLEXen und Jobs.
o Neu hinzu kommt eine mehrstellige Mehrfachkennung aus Ziffern, die
wie folgt aussieht und auch in Altanwendungen ohne neue Vorkehrungen
sofort anwendbar ist, und zwar bei jeder CFG ohne Änderung (!):
#nn.zzz (z.B. $a.cfg)
bzw. #nnn.zzz (z.B. $n.cfg, $u.cfg)
bzw. #nnnn.zzz (z.B. $p.cfg)
mit beliebigen Ziffern z, und zwar auch mehr als 3
(Max. 5 werden empfohlen; mehr sind möglich - aber sinnvoll?)
Nur Ziffern, also auch keine Dezimalzahlen! Die erste Nichtziffer
ist dann das erste Zeichen des Feldinhalts.
Dafür wird der neue Terminus HFM-Feld eingeführt.
o Ältere Programme können damit nicht umgehen, sie lassen beim
Einlesen eines derartigen Satzes nur das letzte Feld mit dem .
übrig!
o Wenn dem Punkt keine Ziffer folgt, wird er als normale Mehrfach-
kennung behandelt - wie bisher! D.h. auch wo ein Punkt schon
in den Daten verwendet wurde, ändert sich nichts.
o Die neuen Kennungen werden im Datensatz unterhalb der bestehenden
eingeordnet, also #nnn.1 unter #nnn.z, und zwar nach ihrem
Zahlenwert, d.h. .10 folgt auf .9
o Achtung: Zahlen nicht mit führenden Nullen schreiben, das ist
sinnlos! Wenn man das tut, werden die weggenommen.
o Die Zahlen müssen nicht lückenlos aufeinander folgen.
Daher könnte man Nummern auch mit einer Semantik ausstatten.
o Bei der Eingabe gilt:
Hinter .zzz kann ein, muß aber kein Spatium stehen. Nur wenn der
Inhalt des Feldes mit Ziffer beginnt, dann muß hinter .zzz ein
Spatium stehen, das versteht sich von selbst. Ansonsten wird,
wenn es fehlt, das Spatium automatisch ergänzt, d.h. gespeichert
wird in jedem Fall mit Spatium.
o Mit var #nnn.zzz ergibt sich stets der hinter .zzz stehende
Inhalt, ohne das Spatium.
o Auch var "abc"\ins #nnn.zzz ergibt stets #nnn.zzz abc,
also mit Spatium vor dem Inhalt.
o Und ganz wie bei "normalen" Feldern:
Bei Eingabe von #nnn.zzz ohne Text wird das betr. Feld beseitigt;
ebenso im FLEX bei var ""\ins #nnn.zzz
o Mit var #nnn~ erhält man in FLEX das letzte der Mehrfachfelder
des Feldes #nnn - wie schon bisher
o Wenn in der CFG bei der betr. Felddefinition eine Angabe $M steht,
womit die zulässigen Mehrfachkennungen eingeschränkt werden, dann
muß der Punkt hinter dem $M vorkommen, wenn er bei dem Feld
verwendbar sein soll. (Versteht sich eigentlich von selbst)
o In Parameterdateien kann man, wie bisher, ak=nnn."xyz"+B schreiben,
um alle Einzelfelder abzuarbeiten, also auch die mit .zzz
o Ebenso ist #nnn. ++ ... möglich, um eine schleifenförmige
Abarbeitung aller Mehrfachfelder zu erreichen; s. aber unter ABER!
o Der FLEX-Befehl var kr bzw. var kn wirft die .-Felder
alle mit aus.
o Für den Hintergrundspeicher gilt die Neuerung zunächst nicht!
Dort entstehen drei Mehrfachfelder mit . / 0, die sich zyklisch
verschieben. (Das entspricht bisheriger Funktionsweise und ist
vermutlich weder besonders nützlich noch überhaupt bekannt.)
o Für die #u-Variablen gibt es keine Änderung, d.h. man kann nicht
#uxy.1 und #uxy.123 usw. verwenden. Das macht, denken wir,
nichts aus, denn es sind ja nur temporäre Variablen, und in
FLEXen verwendet man eh lieber $- oder &-Variablen, die anderen
Gesetzen folgen.
ABER:
- Noch nicht funktionabel: Ein HFM-Feld in der Kategorieliste der
Parameter direkt ansprechen, also z.B.
#98.123 p"Feld 123" ..
Dann kommt nur das erste von mehreren .-Feldern raus, samt Zahl,
und bei
#98. ++ ...
kommen alle raus, jedoch gleichfalls MIT der Zahl am Anfang.
Mit diesem Misfeature könnte man u.U. leben, die Realisierbarkeit
wird aber noch geprüft.
(Im Gegensatz dazu, aber ungleich wichtiger:
ak=98.+X und ak=98."..."+X klappen korrekt )
- In a99 geht noch nicht: if #nnn.zzz
Es ergibt sich stets "no", bei var #77. kommt aber das erste
von mehreren #77 raus, und zwar auch, wenn es eine ohne . ist.
Auch hiermit könnte man wohl leben, weil damit keine existierenden
FLEXe betroffen sind, und für neue könnte man auch z.B. schreiben:
var #77.zzz
if not "" ...
- Bei Eingabe von #nnn.~ xyz hätte man gerne folgendes noch nicht
realisiertes Verhalten:
Es wird die letzte #nnn.zzz gesucht und auf die Zahl dann 1
aufaddiert, um die nachfolgende HFM-Kennung zu bilden.
B.E.
Mehr Informationen über die Mailingliste Allegro