UPAM arbeitet blockorientiert. Grundlage der Verarbeitung ist bei K-PAM-Dateien der 2-KB-Standardblock, bei NK-PAM-Dateien der logische Block, dessen Größe durch den Operanden BLKSIZE im FCB und FILE-Makro bzw. durch den Operanden BUFFER-LENGTH im Kommando ADD-FILE-LINK festgelegt wird.
UPAM kann bis zu 16 2-KB-Standardblöcke gleichzeitig einlesen bzw. ausgegeben. Diese Anzahl wird mit dem Operanden LEN im Makro PAM vereinbart.
Bei der Angabe LEN=(STD,n) bzw. LEN=n*2048 gilt: n <= 16.
Für K-PAM-Dateien gilt:
Ist der Wert des Operanden LEN im PAM-Makroaufruf kein ganzzahliges Vielfaches von 2048, wird auf das nächstgrößere ganzzahlige Vielfache von 2048 aufgerundet.Bei einer Schreiboperation ist dann der Rest der letzten zu schreibenden PAM-Seite in der Datei undefiniert. Erfolgte dieses Schreiben am Ende der Datei und wird die Datei dann geschlossen, wird die Position des letzten gültigen Bytes dieser PAM-Seite im Last Byte Pointer des Katalogeintrages gespeichert.
Bei einer Leseoperation wird der Rest der letzten zu lesenden PAM-Seite nicht in den Puffer übertragen.
Für NK-PAM-Dateien gilt:
Ist der Wert des Operanden LEN im PAM-Makroaufruf kein ganzzahliges Vielfaches der Größe eines logischen Blockes, wird auf das nächstgrößere ganzzahlige Vielfache der logischen Blockgröße aufgerundet.
Bei einer Schreiboperation ist dann der Rest des logischen Blockes in der Datei undefiniert. Erfolgte dieses Schreiben am Ende der Datei und wird die Datei dann geschlossen, wird die Position des letzten gültigen Bytes des letzten logischen Blocks im Last Byte Pointer des Katalogeintrages gespeichert.
Bei einer Leseoperation wird der Rest des letzten zu lesenden logischen Blockes nicht in den Puffer übertragen und der restliche Pufferinhalt ist undefiniert.
Ein Last Byte Pointer mit dem Wert 0 bedeutet, dass der letzte logische Block der Datei komplett gültig ist (Ausnahme siehe Kommando REPAIR-DISK-FILE bzw. Makro VERIF).
Das Kommando SHOW-FILE-ATTRIBUTES gibt den Wert des Last Byte Pointers im Al-location-Teil als LAST-BYTE bzw. in S-Variablen aus, wenn das entsprechende Valid-Bit im Katalogeintrag der Datei gesetzt ist. Der Last Byte Pointer zeigt auf das letzte gültige Byte im letzten logischen Block der Datei.
Voraussetzung für die Nutzung des Last Byte Pointers bei PAM-Dateien auf Public-Space ist, dass beim OPEN der Indikator LBP_REQUIRED im Dateisteuerblock (FCB) gesetzt wurde. Mit LBP_REQUIRED wird beim OPEN der LBP im FCB zur Verfügung gestellt und bei CLOSE der aktualisierte Wert im Katalogeintrag gespeichert.
Bei PAM-Node-Files wird stets ein Last Byte Pointer versorgt, unabhängig vom Flag LBP_REQUIRED. Allerdings ist hier zu beachten, dass der LBP im CE veraltet sein kann, da die Datei von einem fremden System geändert worden sein könnte. Deshalb wird im Rahmen des OPEN der aktuell gültige Last Byte Pointer ermittelt und der Anwendung im Dateisteuerblock (FCB) zur Verfügung gestellt.
Beispiel
Für eine Datei mit BLKCTRL=NO und BLKSIZE=(STD,2) (entspricht den Angaben BLOCK-CONTROL-INFO=*NO und BUFFER-LENGTH=*STD(SIZE=2) im Kommando ADD-FILE-LINK) werden in einem PAM-Aufruf die Operanden WRT und LEN=5000 angegeben. Aus dem Puffer werden 5000 Byte übernommen, der Rest bis zum nächstgrößeren ganzzahligen Vielfachen der logischen Blockgröße (8192 Byte) ist undefiniert.
Erfolgte das Schreiben im Beispiel am Ende der Datei und wurde die Datei dann geschlossen, hat der Last Byte Pointer den Wert 904. Damit wurden 904 Bytes im 4. und gleichzeitig letzten logischen Block der Datei geschrieben. Der Last Byte Pointer wird ebenso wie der Last Byte Pointer (hier ist LPP=8) beim Schließen der Datei im Katalogeintrag vermerkt und dient der Anwendung dazu, nach erneutem Öffnen der Datei das genaue Dateiende zu ermitteln.