ASNA Mobile RPG® Reference Manual

5250 Terminal Keyboard Mapping

This topic contains multiple sections.

Default Keyboard Setting
Customizing the Keyboard
Adding Hot-keys for International Characters

Note that some of these keyboard actions are accessible through the Menu bar.

Default Keyboard Settings

The following keyboard 'actions' are identified and mapped to either an IBM Aid key that gets submitted or a terminal command to edit field content or to move the cursor position.

Action Description Default
Mapping
JavaScript
Keycode
Comment
'ATTN' Alerts the host system that a requested function is not being honored. Ctrl + F5 Ctrl + 116 Sets Bit 1 on Telnet flags header field and submits the page to the IBM i. See the Telnet flags below.
Also accessible on the menu bar.
'BEGIN' Place cursor at the start of field. Ctrl + F9 120
'CLEAR' Submit QSN_CLEAR (0xbd) to IBM i. Scroll Lock 145 Also accessible on the menu bar.
'COPY' Copy selected text to the Windows clipboard. Ctrl + C
IE Menu 'Copy'
String.fromCharCode(key.code).toUpperCase() == 'C'
key.ctrlKey true
Context menus do not work. IE Browser Edit menu is supported.
'CURSOR' Toggle between normal cursor and cross-hair cursor. (None) (None) Cross-hair cursor not implemented.
'CUT' Cut selected text (inside input capable field). Ctrl + X
IE Menu 'Cut'
String.fromCharCode(key.code).toUpperCase() == 'X
key.ctrlKey true
Context menus do not work. IE Browser Edit menu is supported.
'DELETE' Delete character at cursor position. Delete
Del
46 JavaScript does not distinguish between 'Delete' and 'Del'.
'DOWN' Move cursor one position down. any Down Arrow 40 JavaScript does not distinguish between the different 'Down Arrow' keys on the keyboard.
'DUP' If field has DUP attribute, the field is filled with the DUP characters from the cursor postion. Ctrl + F6 (None)
'END' Place cursor at the end of a field.
(Note: this is different from LAST, which positions the cursor at the last character entered into the field).
Ctrl + F11 122
'ENTER' Submit QSN_ENTER (0xf1) to IBMi. any Enter 13 JavaScript does not distinguish between the different 'Enter' keys on the keyboard.
'ERASE' Clears all input fields and sets them to their default value. (None) (None) Not mapped to a key. On the Menu bar.
'F1' ... 'F24' Submit QSN_F1 (0x31)... QSN_F24 (0xbc) to IBMi. F1 ... F12
Shift + F1 ... Shift + F12
112 ... 123
Shift + 112 ... Shift + 123
'FASTDOWN' Move cursor three positions down. Ctrl + Down Arrow 40
key.ctrlKey true
'FASTLEFT' Move cursor three positions left. Ctrl + Left Arrow 37
key.ctrlKey true
'FASTRIGHT' Move cursor three positions right. Ctrl + Right Arrow 39
key.ctrlKey true
'FASTUP' Move cursor three positions up. Ctrl + Up Arrow 38
key.ctrlKey true
'FIELDMINUS' Erase the rest of the field and move the cursor to the next field.
For numeric fields, change the sign to negative.
Shift + - (numeric keypad) (None) Not mapped to a key.
'FIELDPLUS' Erase the rest of the field and move the cursor to the next field.
For numeric fields, change the sign to positive.
Shift + + (numeric keypad) (None) Not mapped to a key.
'FIELDEXIT' Erase the rest of the field and move the cursor to the next field. Shift + Enter (None) Not mapped to a key.
'FIELDEXITENTER' Justify the field and send the ENTER command to the IBM i. Ctrl + Enter 13
key.ctrlKey true
'HELP' Help in error state. When input validation fails, error codes are set and a help on error request is sent to the IBM i. (None) (None) Not mapped to a key.
Sets Bit 7 on Telnet flags header field. Sets error code in 5250 data stream and submits the page to the IBM i.
Also accessible on the menu bar.
'HEX' Shows a dialog where Hex can be typed to enter a character not on the keyboard. If only one character is entered, the character will be taken verbatim. (None) (None) Not mapped to a key.
Accessible on the menu bar.
'INSERT' Toggle insert mode. Insert
Ins
45
'LAST' Jump to the last character of a field. any End 35 JavaScript does not distinguish between the different 'End' keys on the keyboard.
'LEFT' Move cursor one position left. any Left Arrow 37 JavaScript does not distinguish between the different 'Left Arrow' keys on the keyboard.
'LEFTDELETE' Delete character left of the cursor. Backspace 8
'NEWLINE' Jump to next line Shift + Enter 13
key.shiftKey true
'NEXT' Jump to the next field. Tab 9
'PASTE' Copy the contents of the Clipboard to the current cursor's position. Ctrl + V (IE 'Paste' menu)
'PGDN' Roll UP the screen Page Down
'PGUP' Roll DOWN the screen Page Up
'PREVIOUS' Jump to the previous field. Shift + Tab 9
key.shiftKey true
'PRINT' Submit QSN_PRINT (0xf6) to the IBM i. (None) (None) Not mapped to a key.
'RECORD' Record Backspace (Home). Put cursor at the Home position (first input field, position 1). any Home 36 JavaScript does not distinguish between the different 'Home' keys on the keyboard.
'RESET' Opens the keyboard for input (if keyboard is LOCKED due to error). Esc 27 May be re-mapped to Ctrl + R. See Customizing the Keyboard.
'REDIRECT:Page' Navigate to new Page (None) (None) Page is relative to the location of the Asna5250Terminal.aspx. It could specify a folder but make sure to provide a way to get back to the Asna5250Terminal.aspx page.
'RIGHT' Move cursor one position right. any Right Arrow 39 JavaScript does not distinguish between the different 'Right Arrow' keys on the keyboard.
'SYSREQ' System request interrupt. Shift + Esc
Ctrl + F4
(None) Not implemented.
'UP' Move cursor one position Up. any Up Arrow 38 JavaScript does not distinguish between the different 'Up Arrow' keys on the keyboard.

Telnet Flags

A few of the 'Actions' that submit but do not send Aid Key to the IBM i need to effect the Telnet message header instead. According to http://www.ietf.org/rfc/rfc1205.txt, there is a 16 bit flag field in the Telnet header. Eight of those bits are reserved and should be set to zero.

Bit Description
0 ERR This bit is set to indicate a data stream output error. The negative response code is sent as data following the op code field.
1 ATN This bit is set to indicate that the 5250 attention key was pressed.
2, 3, 4 * These bits are reserved (set to zero).
5 SRQ This bit is set to indicate that the 5250 System Request key was pressed.
6 TRQ This bit is set to indicate that the 5250 Test Request key was pressed.
7 HLP This bit is set to indicate the Help in Error State function. The error code is sent as data following the header and is a four digit packed decimal number. For example, an error code of '0005'X indicates the operator attempted to type in an area of the display that is not enabled for input.
8 thru 15 * These bits are reserved (set to zero).

Return to the top

Customizing the Keyboard

To map Actions not set by default or to customize keyboard mapping, you can add a few lines of JavaScript code to the ~/Themes/Current/Monarch/Asna5250Terminal.aspx markup. The JavaScript code that implements the ASNA 5250 Terminal emulator subscribes to the following browser events:

  • document.body.onkeydown
  • document.body.onkeypress

When keyboard input is identified, the input is normalized into a Key object with the following properties:

Key = function (code, ctrlKey, altKey, shiftKey) {
      this.code     = code;
      this.ctrlKey  = ctrlKey;
      this.altKey   = altKey;
      this.shiftKey = shiftKey;
   }

This Key object needs to be mapped into either an Action, as noted above, or a character to be added to the field at the cursor's position. Before applying the Defaults above, the ASNA 5250 Terminal emulator JavaScript code checks for the global function WingsTerminalMapKey. If it exists as a function, then it is called with the following parameters:

inputKey, wasKeyPress, outEvent

Where:

Parameter Description
inputKey Key object described above with the properties populated with information from the Browser event that caused it.
wasKeyPress Boolean indicating the origin of the input. True if the event originated from onkeypress, False if the event originated from onkeydown.
outEvent Input event object instance. This is the object we need to change to indicate the mapping. the two properties are:
InputEvent = function ( action, character) {
   this.action = action;
   this.character = character;
}

Where action should be assigned a string value and character should be assigned a string value with one character to be added at the cursor's position (if positioned at an input field).

Only one of the properties should be changed unless that key event should be processed by the default action or character.

For example, the following implementation of global function WingsTerminalMapKey will map the 'RESET' action to the Ctrl + R key combination. Note: the default 'Esc' mapping would still work. To disable the default code, map it to a blank action.

<script type="text/javascript">
   WingsTerminalMapKey = function (inputKey, wasKeyPress, outEvent) {
      if (inputKey.ctrlKey && String.fromCharCode(inputKey.code).toUpperCase() === 'R' ) { // Ctrl R
         outEvent.action = 'RESET';
      }
   }
   WingsTerminal.renderDisplay_init("85%","100%");
</script>

Return to the top

Adding Hot-keys for International Characters
(when not available on keyboard)

Even the numeric keypad (when Num Lock is ON), may be used to enter characters – giving its ascii code. For example, Alt 164 on US keyboard produces the 'ñ' symbol - it may be simpler to remember to produce these, by a combination with the Ctrl key. You can easily map 'ñ' or accent on vowels with a sequence such as Ctrl, like in the following example:

<script type="text/javascript">
   WingsTerminalMapKey = function (inputKey, wasKeyPress, outEvent) {
      if ( inputKey.ctrlKey ) {
         switch( String.fromCharCode(inputKey.code).toUpperCase() ) {
            case 'N' :
               outEvent.character = 'ñ';
            break;
            case 'A' :
               outEvent.character = 'á';
            break;
            case 'E' :
               outEvent.character = 'é';
            break;
            case 'I' :
               outEvent.character = 'í';
           break;
           case 'O' :
               outEvent.character = 'ó';
           break;
           case 'U' :
              outEvent.character = 'ú';
           break;
         }
      }
   }
</script>

Note: When re-mapping the keyboard, please test under the three supported Browsers: IE7+, Chrome, and Firefox.

Special Note:

The references to the directory location of Asna5250Terminal.aspx in the above information specifies ~/Themes/Current/ as the location used. Refer to Setting the location of the Asna5250Terminal.aspx page for more information.

See Also

5250 Terminal Branding
Keyboard Macros
Terminal Menus