February 1

0 comments

DSPF function keys in fully free RPGLE

By NickLitten

February 1, 2016

aidz, cmdkey, dspf, pfkey

Picking up user keyboard interactions in RPG is easy

But as usual there are many ways of doing it. Three main techniques are

(1) Assign a numeric value to the function keys

Probably the most common is to assign an indicator value to a function so that CMD01 sets on *IN01, CMD02 sets on *IN02 and so on.

(2) Leave the internal indicators for function keys

I see this a lot and I still sometimes use it if my program has simple function key handling. Basically, if you do not assign a numeric indicator to the function key, good ole’ IBM i will assign a free one for us. Namely CMD01 sets on *INKA, CMD02 sets on *INKB, CMD03 sets on *INKC and so on. But… but… beware of the missing alphabet letters 😉

(3) Indicators smell. Dont use them

Define an information data structre in a /copybook and then you can reuse this simple technique where you like. This is my preferred technique.

dcl-f dspf workstn infds(dspfinfo);

 // Use INFDS to pickup the AID value (hex value for keypresses)
 dcl-ds dspfinfo;
 pressedKey char(1) pos(369);
 end-ds;

 // Define Constants with HEX value of keypresses
 dcl-c PF1 const(x'31');
 dcl-c PF2 const(x'32');
 dcl-c PF3 const(x'33');
 dcl-c PF4 const(x'34');
 dcl-c PF5 const(x'35');
 dcl-c PF6 const(x'36');
 dcl-c PF7 const(x'37');
 dcl-c PF8 const(x'38');
 dcl-c PF9 const(x'39');
 dcl-c PF10 const(x'3A');
 dcl-c PF11 const(x'3B');
 dcl-c PF12 const(x'3C');
 dcl-c PF13 const(x'B1');
 dcl-c PF14 const(x'B2');
 dcl-c PF15 const(x'B3');
 dcl-c PF16 const(x'B4');
 dcl-c PF17 const(x'B5');
 dcl-c PF18 const(x'B6');
 dcl-c PF19 const(x'B7');
 dcl-c PF20 const(x'B8');
 dcl-c PF21 const(x'B9');
 dcl-c PF22 const(x'BA');
 dcl-c PF23 const(x'BB');
 dcl-c PF24 const(x'BC');
 dcl-c Clear const(x'BD');
 dcl-c Enter const(x'F1');
 dcl-c Help const(x'F3');
 dcl-c Up const(x'F4');
 dcl-c Down const(x'F5');
 dcl-c Print const(x'F6');
 
 Exfmt Screen;
 
 If pressedKey = Enter;
 // do some ENTER stuff
 else pressedKey = Help;
 // do some HELP stuff
 else pressedKey = PF03;
 // Exit or something?
 Else;
 // ... do other stuff for other keys
 EndIf;
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Join the IBM i Community for FREE Presentations, Lessons, Hints and Tips

>