Der APL2 Object Editor ist ein eigenständiges Programm und kommuniziert mit dem Session Manager über das Shared Variable Interface. Doppelklick auf einen Funktionsnamen bedeutet, dass die Funktion über eine Shared Variable (AP120_EDIT) an den Editor geschickt wird und dort in einem eigenen Fenster angezeigt wird.
Aber was heißt hier "die Funktion"?
Nach den Problemen, die wir mit dem Editieren einer
gigantischen Funktion hatten, kann man davon ausgehen, dass die besagte Funktion in ihrer Character Representation verschickt wird. Alleine der Versuch diese Funktion, deren CR größer als 12 MB ist, in den Editor zu klicken, schlägt mit der Meldung "System Limit - Interface capacity" fehl. Erhöhung des Wertes für MAXSV auf 13 MB führt zumindest dazu, dass die Funktion ordentlich im Editor angezeigt wird.
Die CR einer Funktion zu transferieren bedeutet im vorliegenden Fall. extrem viele irrelevante Leerzeichen durch den Kanal zu schieben. Diese werden zum Auffüllen der Zeilen auf die Länge der längsten Zeile - hier der 6 KB langen Kopfzeile - produziert. Lässt man diese nichtssagenden Blanks außer Acht, ist die Funktion nur noch knapp 100 KB groß. Eine solche offensichtlich wesentlich sparsamere Darstellung einer Funktion erhält man mit 2 ⎕TF, einer Darstellung, die auch von )OUT benutzt wird.
Warum wird also die CR durch den Kanal zum Editor geschoben?
Keine Ahnung. Und zurück gilt das Gleiche: Offensichtlich wird auch hier die CR der geänderten Funktion an den Interpreter zurückgeschickt. Aber damit das auch klappt, muss vorher noch der Rückkanal so ausgebaut werden, dass auch hier ein dickes Schiff bequem durchpasst.
Denn nachdem wir unsere 13 MB Funktion mit Müh und Not in den Editor geladen haben, an Stelle von irgendwelchen Änderungen einfach ESC drücken, danach z.B. F2 für "Save", beschwert sich diesmal der Editor: "System Error - Shared Memory Shortage", der Rückkanal ist nicht breit genug.
Erhöhung von MAXSM ("Maximum amount of shared memory for all variable data") auf 26 MB bringt Erlösung. Offensichtlich wird eine weitere Shared Variable als Rückkanal verwendet.
Und hier nun ein Rezept für das störungsfreie Editieren von Monsterfunktionen:
Soweit die CR der größten zu bearbeitenden Funktion mehr als 12.000.000 Zeichen (genauer wäre 11.9xx.xxx) umfasst, müssen die Werte für MAXSV und MAXSM explizit gesetzt werden. Dazu kopiere man z.B. die Datei [...]\ibmapl2w\samples\apl2svp.prm in ein beliebiges Verzeichnis und aktualisiere die benötigten Werte:
MAXSV sollte größer sein als die Anzahl der Zeichen der CR, MAXSM sollte konsequenterweise doppelt so groß sein wie MAXSV.
Damit APL2 diese Werte auch finden kann, muss noch eine Umgebungsvariable gesetzt werden, z.B.
SET APL2SVPPARMS=C:\APL2\PROFILES\APL2SVP.PRM.
Dies kann man sich ersparen, falls sich die Datei apl2svp.prm im aktuellen Verzeichnis befindet.
Dann klappt es auch mit der Monsterfunktion.
Nach dem Start von APL2 sind werden sofort und automatisch zwei Shared Variables deklariert. Dies kann man mit dem APL2 SVP Monitor gut beobachten: Entweder die apl2svpt.exe im APL2 bin-Verzeichnis ausführen oder seit CSD 8 den Monitor 8 einfach durch
Aufgenommen: Jun 11, 17:30