diff --git a/oec/keyboard.py b/oec/keyboard.py index 5a20012..8f80e49 100644 --- a/oec/keyboard.py +++ b/oec/keyboard.py @@ -50,96 +50,79 @@ class Key(Enum): DELETE = 265 LEFT = 266 - LEFT_2 = 410 - UP = 267 - RIGHT = 268 - RIGHT_2 = 411 - DOWN = 269 - ROLL_UP = 270 - ROLL_DOWN = 271 + LEFT_2 = 267 + UP = 268 + RIGHT = 269 + RIGHT_2 = 270 + DOWN = 271 HOME = 272 DUP = 273 - BLANK_4 = 274 - JUMP = 275 # Alt + BLANK_4 - SWAP = 276 # Alt + BACKTAB + JUMP = 274 # Function - PF1 = 277 - PF2 = 278 - PF3 = 279 - PF4 = 280 - PF5 = 281 - PF6 = 282 - PF7 = 283 - PF8 = 284 - PF9 = 285 - PF10 = 286 - PF11 = 287 - PF12 = 288 - PF13 = 289 - PF14 = 290 - PF15 = 291 - PF16 = 292 - PF17 = 293 - PF18 = 294 - PF19 = 295 - PF20 = 296 - PF21 = 297 - PF22 = 298 - PF23 = 299 - PF24 = 300 + PF1 = 275 + PF2 = 276 + PF3 = 277 + PF4 = 278 + PF5 = 279 + PF6 = 280 + PF7 = 281 + PF8 = 282 + PF9 = 283 + PF10 = 284 + PF11 = 285 + PF12 = 286 + PF13 = 287 + PF14 = 288 + PF15 = 289 + PF16 = 290 + PF17 = 291 + PF18 = 292 + PF19 = 293 + PF20 = 294 + PF21 = 295 + PF22 = 296 + PF23 = 297 + PF24 = 298 # Control - ENTER = 301 - FIELD_EXIT = 302 - RESET = 303 - QUIT = 304 + ENTER = 299 + RESET = 300 + QUIT = 301 + DEVICE_CANCEL = 302 - SYS_RQ = 305 - ATTN = 306 - BLANK_1 = 307 - CLEAR = 308 # Alt + BLANK_1 - BLANK_2 = 309 - ERASE_INPUT = 310 - PRINT = 311 - HELP = 312 - HEX = 313 # Alt + HELP - BLANK_3 = 314 - PLAY = 315 - TEST = 316 # Alt + PLAY - SET_UP = 317 - RECORD = 318 - PAUSE = 319 # Alt + RECORD + SYS_RQ = 303 + ATTN = 304 + CLEAR = 305 + ERASE_INPUT = 306 + PRINT = 307 + TEST = 308 - FIELD_MARK = 401 - CURSOR_SELECT = 402 - CURSOR_BLINK = 403 - ERASE_EOF = 404 - CLICKER = 405 - ALT_CURSOR = 406 - IDENT = 407 + FIELD_MARK = 309 + CURSOR_SELECT = 310 + CURSOR_BLINK = 311 + ERASE_EOF = 312 + CLICKER = 313 + ALT_CURSOR = 314 + IDENT = 315 + EXTEND_SELECT = 316 + CTRL = 317 - PA1 = 408 - PA2 = 409 + PA1 = 318 + PA2 = 319 + PA3 = 320 # Number Pad - NUMPAD_BLANK_1 = 320 - NUMPAD_BLANK_2 = 321 - NUMPAD_BLANK_3 = 322 - NUMPAD_BLANK_4 = 323 NUMPAD_SEVEN = ord('7') NUMPAD_EIGHT = ord('8') NUMPAD_NINE = ord('9') - NUMPAD_FIELD_MINUS = 327 NUMPAD_FOUR = ord('4') NUMPAD_FIVE = ord('5') NUMPAD_SIX = ord('6') - NUMPAD_BLANK_5 = 331 NUMPAD_ONE = ord('1') NUMPAD_TWO = ord('2') NUMPAD_THREE = ord('3') - NUMPAD_FIELD_PLUS = 335 NUMPAD_ZERO = ord('0') NUMPAD_PERIOD = ord('.') diff --git a/oec/keymap_3278_2.py b/oec/keymap_3278_2.py index 16c2cd1..a3727f8 100644 --- a/oec/keymap_3278_2.py +++ b/oec/keymap_3278_2.py @@ -9,8 +9,8 @@ KEYMAP_DEFAULT = { # Control Keys 80: Key.ATTN, 81: Key.CURSOR_SELECT, - 82: Key.BLANK_1, - 83: Key.BLANK_2, + 82: None, # Blank + 83: None, # Blank 84: Key.CURSOR_BLINK, 85: Key.ERASE_EOF, 86: Key.PRINT, @@ -62,7 +62,7 @@ KEYMAP_DEFAULT = { 126: Key.SEMICOLON, 18: Key.SINGLE_QUOTE, 15: Key.LEFT_BRACE, - 8: Key.FIELD_EXIT, + 8: Key.NEWLINE, # Fourth Row 77: Key.LEFT_SHIFT, @@ -88,7 +88,7 @@ KEYMAP_DEFAULT = { # Right 95: Key.DUP, 94: Key.FIELD_MARK, - 12: Key.INSERT, # TODO: Confirm this mapping + 12: Key.INSERT, 13: Key.DELETE, 14: Key.UP, 19: Key.DOWN, diff --git a/oec/keymap_3483.py b/oec/keymap_3483.py index 4daf0e8..46fae36 100644 --- a/oec/keymap_3483.py +++ b/oec/keymap_3483.py @@ -5,6 +5,9 @@ oec.keymap_3483 from .keyboard import Key, Keymap +# I have a 5250 keyboard for my 3483-V, this mapping is based on photographs +# of the 3270 keyboard and may not be correct. + KEYMAP_DEFAULT = { # Function Keys 7: Key.PF1, @@ -34,15 +37,15 @@ KEYMAP_DEFAULT = { # Control Keys 5: Key.ATTN, - 6: Key.BLANK_1, - 4: Key.BLANK_2, - 12: None, # ERASE_INPUT - 3: Key.PRINT, - 11: Key.HELP, - 131: Key.BLANK_3, - 10: Key.PLAY, - 1: Key.SET_UP, - 9: Key.RECORD, + 6: Key.CLEAR, + 4: Key.CURSOR_SELECT, + 12: None, # Pause + 3: Key.EXTEND_SELECT, + 11: Key.ERASE_EOF, + 131: Key.PRINT, + 10: None, # Play + 1: Key.PRINT, + 9: Key.CTRL, # First Row 14: Key.BACKTICK, @@ -74,7 +77,7 @@ KEYMAP_DEFAULT = { 77: Key.LOWER_P, 84: Key.CENT, 91: Key.BACKSLASH, - 90: Key.FIELD_EXIT, + 90: Key.NEWLINE, # Third Row 20: Key.CAPS_LOCK, @@ -114,36 +117,36 @@ KEYMAP_DEFAULT = { 88: Key.ENTER, # Center - 103: Key.BACKTAB, - 110: Key.DUP, - 111: Key.BLANK_4, - 100: Key.NEWLINE, + 103: Key.PA1, + 110: Key.PA2, + 111: Key.JUMP, + 100: Key.BACKTAB, 101: Key.INSERT, 109: Key.DELETE, 99: Key.UP, 97: Key.LEFT, - 98: None, # RULE + 98: None, # Rule 106: Key.RIGHT, 96: Key.DOWN, # Number Pad - 118: Key.NUMPAD_BLANK_1, - 119: Key.NUMPAD_BLANK_2, - 126: Key.NUMPAD_BLANK_3, - 132: Key.NUMPAD_BLANK_4, + 118: None, # Blank + 119: None, # Blank + 126: Key.COMMA, + 132: Key.SPACE, 108: Key.NUMPAD_SEVEN, 117: Key.NUMPAD_EIGHT, 125: Key.NUMPAD_NINE, - 124: Key.NUMPAD_FIELD_MINUS, + 124: Key.TAB, 107: Key.NUMPAD_FOUR, 115: Key.NUMPAD_FIVE, 116: Key.NUMPAD_SIX, - 123: Key.NUMPAD_BLANK_5, + 123: Key.MINUS, 105: Key.NUMPAD_ONE, 114: Key.NUMPAD_TWO, 122: Key.NUMPAD_THREE, - 121: Key.NUMPAD_FIELD_PLUS, + 121: Key.ENTER, 112: Key.NUMPAD_ZERO, 113: Key.NUMPAD_PERIOD } @@ -152,8 +155,7 @@ KEYMAP_SHIFT = { **KEYMAP_DEFAULT, # Control Keys - 5: Key.SYS_RQ, - 12: Key.ERASE_INPUT, + 10: None, # Copy # First Row 14: Key.TILDE, @@ -207,23 +209,30 @@ KEYMAP_SHIFT = { 50: Key.UPPER_B, 49: Key.UPPER_N, 58: Key.UPPER_M, - 65: Key.COMMA, # TODO: ??? - 73: Key.CENTER_PERIOD, # TODO: ??? + 65: Key.COMMA, # TODO: Confirm this mapping + 73: Key.CENTER_PERIOD, # TODO: Confirm this mapping 74: Key.QUESTION, # Center - 99: Key.ROLL_UP, - 96: Key.ROLL_DOWN + 103: Key.DUP, + 110: Key.FIELD_MARK } KEYMAP_ALT = { **KEYMAP_DEFAULT, # Control Keys - 6: Key.CLEAR, + 5: Key.SYS_RQ, + 12: Key.ERASE_INPUT, + 131: Key.IDENT, + 10: Key.TEST, # Center - 98: Key.HOME + 111: Key.PA3, + + 97: Key.LEFT_2, + 98: Key.HOME, + 106: Key.RIGHT_2 } KEYMAP = Keymap('3483', KEYMAP_DEFAULT, KEYMAP_SHIFT, KEYMAP_ALT, modifier_release=240) diff --git a/oec/tn3270.py b/oec/tn3270.py index 5468689..2d43acf 100644 --- a/oec/tn3270.py +++ b/oec/tn3270.py @@ -15,9 +15,9 @@ from .keyboard import Key, get_ebcdic_character_for_key AID_KEY_MAP = { Key.CLEAR: AID.CLEAR, Key.ENTER: AID.ENTER, - #Key.PA1: AID.PA1, - #Key.PA2: AID.PA2, - #Key.PA3: AID.PA3, + Key.PA1: AID.PA1, + Key.PA2: AID.PA2, + Key.PA3: AID.PA3, Key.PF1: AID.PF1, Key.PF2: AID.PF2, Key.PF3: AID.PF3, @@ -111,7 +111,7 @@ class TN3270Session(Session): self.emulator.tab() elif key == Key.BACKTAB: self.emulator.tab(direction=-1) - elif key in [Key.NEWLINE, Key.FIELD_EXIT]: + elif key == Key.NEWLINE: self.emulator.newline() elif key == Key.HOME: self.emulator.home() diff --git a/oec/vt100.py b/oec/vt100.py index 33a4dc8..7add941 100644 --- a/oec/vt100.py +++ b/oec/vt100.py @@ -22,7 +22,6 @@ VT100_KEY_MAP = { Key.NEWLINE: b'\r', Key.ENTER: b'\r', - Key.FIELD_EXIT: b'\r', Key.BACKSPACE: b'\b', Key.TAB: b'\t', diff --git a/tests/test_tn3270.py b/tests/test_tn3270.py index 3a7f5b5..9ac6a34 100644 --- a/tests/test_tn3270.py +++ b/tests/test_tn3270.py @@ -144,13 +144,6 @@ class SessionHandleKeyTestCase(unittest.TestCase): # Assert self.session.emulator.newline.assert_called() - def test_field_exit(self): - # Act - self.session.handle_key(Key.FIELD_EXIT, KeyboardModifiers.NONE, None) - - # Assert - self.session.emulator.newline.assert_called() - def test_home(self): # Act self.session.handle_key(Key.HOME, KeyboardModifiers.NONE, None)