.st0{fill:#FFFFFF;}

DSPF function keys in fully free RPGLE 

 February 1, 2016

By  NickLitten

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;

NickLitten


IBM i Software Developer, Digital Dad, AS400 Anarchist, RPG Modernizer, Shameless Trekkie, Belligerent Nerd, Englishman Abroad and Passionate Eater of Cheese and Biscuits. Nick Litten Dot Com is a mixture of blog posts that can be sometimes serious, frequently playful and probably down-right pointless all in the space of a day. Enjoy your stay, feel free to comment and remember: If at first you don't succeed then skydiving probably isn't a hobby you should look into.

Nick Litten

related posts:

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
__CONFIG_colors_palette__{"active_palette":0,"config":{"colors":{"cff50":{"name":"Main Accent","parent":-1},"a344d":{"name":"Accent Transparent","parent":"cff50"}},"gradients":[]},"palettes":[{"name":"Default","value":{"colors":{"cff50":{"val":"var(--tcb-skin-color-0)"},"a344d":{"val":"rgba(46, 138, 229, 0.85)","hsl_parent_dependency":{"h":210,"l":0.54,"s":0.78}}},"gradients":[]},"original":{"colors":{"cff50":{"val":"rgb(0, 178, 255)","hsl":{"h":198,"s":1,"l":0.5}},"a344d":{"val":"rgba(0, 178, 255, 0.85)","hsl_parent_dependency":{"h":198,"s":1,"l":0.5}}},"gradients":[]}}]}__CONFIG_colors_palette__

Get In Touch

Iā€™m always looking for awesome input, feedback and critique!

>