#!/usr/bin/php ", "?", ",", ".", "/", " ", "\033[A", "\033[B", "\033[C", "\033[D", "\033[3~"); $k = array("Caps", "Lock", "Shift", "Shift", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "Esc", "Backspace", "Tab", "Enter", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|", "[", "]", "\\", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", ";", "'", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", ",", ".", "/", "space", "ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft", "Delete"); $x = array(4, 4, 4, 69, 14, 19, 24, 29, 37, 42, 47, 52, 60, 65, 70, 75, 4, 69, 4, 69, 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 74, 62, 67, 74, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 58, 63, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 50, 55, 60); $y = array(13, 14, 16, 16, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 10, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17); for ($i = 0; $i < 88; $i++) { if ($i > 16) echo "\033[31m"; echo "\033[$y[$i];$x[$i]H$k[$i]"; } echo "\033[0m"; // stream_set_blocking(STDIN, 0); system('stty cbreak -echo'); $ntot = 0; $nasc = 0; echo "\033[20;2H$ntot/$nasc/71 "; while ($nasc < 71) { $read = array(STDIN); $write = NULL; $except = NULL; stream_select($read, $write, $except, 1, 0); $c = ""; do { $c .= fgets(STDIN, 2); $read = array(STDIN); $write = NULL; $except = NULL; } while (stream_select($read, $write, $except, 0, 25000)); if ($c == "\177") $c = "\010"; $j = array_search(strtoupper($c), $a); if ($j !== false && $j < 88) { if (($q[$c] & 1) == 0) echo "\033[1m\033[$y[$j];$x[$j]H$k[$j]\033[0m"; else echo "\033[4m\033[1m\033[$y[$j];$x[$j]H$k[$j]\033[0m"; if ($j >= 17 && $p[$j] == 0) { $p[$j] = 1; $nasc = $nasc + 1; } } if ($q[$c] == 0) $ntot = $ntot + 1; $q[$c] = $q[$c] + 1; if ($nasc == 63) { for ($i = 17; $i < 88; $i++) if ($p[$i] == 0) echo "\033[31m\033[5m\033[$y[$i];$x[$i]H$k[$i]"; echo "\033[0m"; } echo "\033[20;2H$ntot/$nasc/71 "; if ($j !== false && ($j < 20 || $j >= 88)) echo trim($k[$j]); else for ($i = 0; $i < strlen($c); $i++) { if (substr($c, $i, 1) < " ") echo "^" . chr(ord(substr($c, $i, 1)) + 64); else if (substr($c, $i, 1) <= "~") echo substr($c, $i, 1); else echo ord(substr(substr($c, $i, 1), $i, 1)); } echo "\033[0K"; if ($c == "\003") break; }