determining scan codes for key sequences

AJB - I wrote this while working on code to handle menus, and editors, in the raw console mode. It will simply print out the hex code for the given key sequence. Press ESC twice to exit. It will work on linux varients, I assume it will work on unix. It does rely on having the stty utility. A bit of warning: different terminals often have different scan codes for complex sequences, ie: linux console versus xterm console.

 exec stty raw -echo
 fconfigure stdin -buffering none -blocking 1
 fconfigure stdout -translation crlf
 while 1 {
   set key [format "0x%02X" [scan [read stdin 1] %c]]
   if {$key == 0x1B} {
     set term 0
     while {(! [fblocked stdin] ) && $term == 0} {
       set chr [format "0x%02X" [scan [read stdin 1] %c]]
       if {$chr >= 0x41 && $chr <= 0x48} {set term 1}
       if {$chr >= 0x50 && $chr <= 0x53} {set term 1}
       if {$chr == 0x7E} {set term 1}
       if {$chr == 0x1B} {exec stty -raw echo; exit}
       lappend key $chr
     }
   }
   puts $key
   flush stdout
   after 20
 }

example: this is the output given for a up arrow, down arrow, left arrow, and right arrow:

 0x1B 0x5B 0x41
 0x1B 0x5B 0x42
 0x1B 0x5B 0x44
 0x1B 0x5B 0x43