[Allegro] Fragen zu Flips, GND und Reihenfolge
Thomas Berger
ThB at Gymel.com
Di Jan 26 19:32:50 CET 2016
Lieber Herr Fischer, liebe Liste,
– Wirkt der t-Befehl wie das Hineinkopieren des Inhalts der Tabelle in
die Parameterdatei?
Ja. Insofern gibt es auch eine Fehlermeldung, wenn die Tabelle gar
nicht gefunden werden kann. Und es kommt bei Unterprogramm-Einbindungen
oder auch sonst auf die Reihenfolge und Position der Einbindung
an: hat die einbindende Parameterdatei (selbst oder ueber geladene
Tabellen) bereits Stopwortliste oder Hilfsabschnitt deklariert,
dann landen Anweisungen aus einer (oertlich = zeitlich) danach
geladenen .cpt-Datei nicht mehr im "Hauptteil" der Parameterdatei.
Der "dynamische" Job-Befehl "xport table" ist nicht dasselbe: Zwar
werden dann darin enthaltene Tabellen modifiziert, also p/q-Befehle
etc., aber darin enthaltene Anweisungen (etwa Unterprogramme oder
Kopf- und Fussabschnitte) kommen /nicht/ zur Wirkung.
> – Wo werden die Tabellen und Parameterdateien gesucht, und in welcher
Reihenfolge?
Vgl. VB 215:
Erst xy.cpt im Daten-, dann Arbeits-, dann Programmverzeichnis ("c"
der Name der Konfiguration).
Dann xy. at pt in eben diesen Verzeichnissen.
> – Sprungbefehle (das erste #-A in der so entstandenen Gesamtdatei
> wird erreicht, nie das zweite?)
Sie sollten davon ausgehen, dass das ein Fehler ist bzw. das
Verhalten undefiniert. Derzeit mag zwar stets das erste
Vorkommen getroffen werden (weil nach der Marke /gesucht/ wird),
eine naheliegende Optimierung in der nach-16bit-Zeit, wo man
evtl. doch noch 1kB Hauptspeicher abzweigen kann, besteht aber
darin, die Positionen beim Einlesen zu notieren. Und ob dann
das jetzige Verhalten beibehalten wird oder spaetere Vorkommen
fruehere ueberschreiben oder gar horribile dictu eine Fehlermeldung
erfolgt, weiss nur der zukuenftige Implementator der Optimierung.
> – Unterprogrammaufrufe erreichen immer die erste Definition des
> Unterprogramms, Unterprogrammaufrufe innerhalb eines Unterprogramms
> können nur nachfolgende Unterprogramme erreichen?
Ich hatte das vor einigen Jahren im Quellcode versucht zu verstehen,
m.E. kann man sich das am besten als Effekt einer gewissen
Optimierung vorstellen (oder als teilweise geglueckten Versuch,
Rekursion zu verbieten). Aus dem Gedaechtnis
Es gibt einen Zeiger "aktuelle Suchposition" der wird nur fuer die
Suche nach Unterprogramm-Einsprungmarken genutzt und
- fuer/bei jedem absoluten Sprung zu einer Sprungmarke #-x auf den
Anfang der Parameterdatei gesetzt.
- nach jedem erfolgreichen Unterprogrammaufruf auf die Einsprungstelle
gesetzt.
Der Effekt ist:
...
#>A
...
#(A
...
#>B
...
#(B
...
#>A geht nicht
#+X
#-X
#>A geht doch
Es gibt aber noch einen anderen Effekt, an den ich mich zu erinnern
glaube, ich habe ihn allerdings lange nicht mehr systematisch getestet:
Sucht das Programm eigentlich gerade nach dem Einsprung
#(A
fuer ein Unterprogramm und begegnet dabei der Endemarkierung
#)A
fuer dieses Unterprogramm, dann wird die Suche abgebrochen.
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro