En af mine læsere gjorde mig fornylig opmærksom på, at min SCRNSHOT REXX ikke virker, hvis man benytter en 3270 skærm med 132 tegns bredde. Variablen ZSCREENW bliver godt nok sat til 132, men indholdet af ZSCREENI er på mange skærmbilleder stadig opbygget i 80 tegns bredde. Hold da op for en overraskelse. Hvad tænker de dog på hos IBM??
Denne udfordring kunne jeg selvfølgelig ikke lade ligge, så her kommer en forbedret udgave af SCRNSHOT, som kan detektere om indholdet af ZSCREENI er formateret til en skærmbredde på 80 tegn eller 132 tegn:
Jeg har simpelthen tilføjet en pænt stor stump kode til at detektere skærmbredden. Logikken er, at det første tegn i hver linie skal indeholde en blank. Det er normalt et felt-attribut tegn, der står her, som gemmes som en blank i skærmbufferen. Der er også en ekstra kontrol på, om den vandrette streg i linie 2 er til stede i den rigtige længde. Alle disse kontroller giver en rigtig god sikkerhed for, at variablen WIDTH (som benyttes i stedet for ZSCREENW i det afsluttende loop) har den rigtige værdi i forhold til indholdet af ZSCREENI. Jeg har i øvrigt forgæves ledt efter en Z-variabel, der indeholdt den aktuelle skærmbredde i ZSCREENI, men forgæves, så derfor ovenstående algoritme.
Der er ingen sikkerhed for, at ovenstående forbedringer virker under alle forhold. Der kan sagtens være paneler, hvor den første position i hver linie indeholder noget andet en blanke. Der findes masser af produkter, der selv styrer opbygningen af sine ISPF-paneler og her kan det nemt gå galt i forhold til den logik, jeg har tilføjet. Hvis du har et endnu bedre forslag til at løse denne udfordring, så er du velkommen til at give dit besyv med!