… | |
… | |
21 | # ./vt102 bash |
21 | # ./vt102 bash |
22 | # ./vt102 telnet towel.blinkenlights.nl |
22 | # ./vt102 telnet towel.blinkenlights.nl |
23 | # ./vt102 curl http://artscene.textfiles.com/vt100/trekvid.vt |
23 | # ./vt102 curl http://artscene.textfiles.com/vt100/trekvid.vt |
24 | # ./vt102 curl http://artscene.textfiles.com/vt100/surf.vt # in 3d! |
24 | # ./vt102 curl http://artscene.textfiles.com/vt100/surf.vt # in 3d! |
25 | |
25 | |
26 | # TODO: ctrl |
26 | # TODO: ctrl key map |
27 | |
27 | |
28 | use common::sense; |
28 | use common::sense; |
29 | |
29 | |
30 | $| = 1; |
30 | $| = 1; |
31 | |
31 | |
… | |
… | |
584 | 0x7b, -0x7b, # leave setup |
584 | 0x7b, -0x7b, # leave setup |
585 | ); |
585 | ); |
586 | |
586 | |
587 | ############################################################################# |
587 | ############################################################################# |
588 | |
588 | |
589 | # 0x80 shift, 0x100 ctrl, 0x200 toggle |
589 | # 0x080 shift, 0x100 ctrl |
590 | my %KEYMAP = ( |
590 | my %KEYMAP = ( |
591 | "\t" => 0x3a, |
591 | "\t" => 0x3a, |
592 | "\r" => 0x64, |
592 | "\r" => 0x64, |
593 | "\n" => 0x44, |
593 | "\n" => 0x44, |
|
|
594 | |
|
|
595 | "\x00" => 0x77 | 0x100, # CTRL-SPACE |
|
|
596 | "\x1c" => 0x45 | 0x100, # CTRL-\ |
|
|
597 | "\x1d" => 0x14 | 0x100, # CTRL-] |
|
|
598 | "\x1e" => 0x24 | 0x100, # CTRL-~ |
|
|
599 | "\x1f" => 0x75 | 0x100, # CTRL-? |
594 | |
600 | |
595 | # hardcoded rxvt keys |
601 | # hardcoded rxvt keys |
596 | "\e" => 0x2a, # ESC |
602 | "\e" => 0x2a, # ESC |
597 | "\e[3~" => 0x03, # DC |
603 | "\e[3~" => 0x03, # DC |
598 | "\e[5~" => 0x7e, # CAPS LOCK (prior) |
604 | "\e[5~" => 0x7e, # CAPS LOCK (prior) |
… | |
… | |
620 | "779ad5a9a8b8a755a6b5b6b466256575" . "351a3929283837273626d656e634e5f5" . "b9"; |
626 | "779ad5a9a8b8a755a6b5b6b466256575" . "351a3929283837273626d656e634e5f5" . "b9"; |
621 | |
627 | |
622 | @KEYMAP{map chr, 0x5b .. 0x7e} = unpack "C*", pack "H*", |
628 | @KEYMAP{map chr, 0x5b .. 0x7e} = unpack "C*", pack "H*", |
623 | "154514b7a5" . "244a6879591949485816574746766706" . "050a185a0817780969077a95c594a4"; |
629 | "154514b7a5" . "244a6879591949485816574746766706" . "050a185a0817780969077a95c594a4"; |
624 | |
630 | |
625 | $KEYMAP{"\x3f" & $_} ||= $KEYMAP{$_} | 0x100 for "a" .. "z"; # ctrl |
631 | $KEYMAP{"\x1f" & $_} ||= $KEYMAP{$_} | 0x100 for "a" .. "z"; # ctrl |
626 | $KEYMAP{uc $_} ||= $KEYMAP{$_} | 0x080 for "a" .. "z"; # shift |
632 | $KEYMAP{uc $_} ||= $KEYMAP{$_} | 0x080 for "a" .. "z"; # shift |
627 | |
633 | |
628 | my $KEYMATCH = join "|", map quotemeta, reverse sort keys %KEYMAP; |
634 | my $KEYMATCH = join "|", map quotemeta, reverse sort keys %KEYMAP; |
629 | $KEYMATCH = qr{^($KEYMATCH)}s; |
635 | $KEYMATCH = qr{^($KEYMATCH)}s; |
630 | |
636 | |