While I was writing that previous blog about handling wide fat screens I stumbled across another useful API (QSNRTVMOD) for retrieving the current screen mode that we are displaying. This means we could find our screen width programmatically. Why isnt that a word?
I’m not too sure why anyone would want to do this but… in the spirit of sharing stuff on the same theme as the widescreen gubbins I was mumbling about earlier…
We can find out if we are displaying a 24×80 or a 27×132 screen with this little gem:
QSNRTVMOD
The QueueueuSinnerTeevumMod API will return a code and tell us what screen format we are using in our 5250 session.
We can add some error handling to the RPG program without changing any DDS in our *DSPF..
Procedure – Retrieve the Screen Mode
// // Procedure to retrieve current screen mode ('3'=24x80 '4'=27x132) // dcl-proc #RtvScrnMode export; dcl-pi #RtvScrnMode char(1) end-pi;
// Too lazy to add error handling for 'myApiError' but you could do that here
Return currentScrnSize;
end-proc;
(obviously this code should be in a service program to make it reusable but for code readability in this blog I’ve copy/pasted it separately)
Mainline – Check screen size before doing something
So, now we just need to check our screen size before doing something.
I’m not too sure if this is ever helpful technique really… I mean I have never had to use it in anger… but that doesnt mean that somebody out there might be looking for exactly this solution 🙂
// Procedure to retrieve current screen mode (3=24x80; 4=27x132)
If RtvScreenMode() = '3';
// do some stuff for 24x80 screens
If RtvScreenMode() = '4';
// do some stuff for 27x132 screens
else;
// do some error handling stuff or perhaps handle totally weird screen sizes
endif;
*inlr = *on;
NOTE: This API is telling you the last screen size displayed not the screen size that the 2520 terminal is capable of. In other words – if you are logged into a 27×132 terminal but displaying a 24×80 screen and run this code it will tell you its 24×80. Go to a main IBM i menu like (GO MAIN) and it will say it’s 24×80 but call it from a widescreen format (like SEU-WIDE for example) and it will tell you it’s 27×132