Patch title: Release 89 bulk changes
Abstract:
File: /linux/input/record.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/os.pli"
module "mapping.pli"
module "/pliant/language/ui/ansi_terminal.pli"
module "keyboard.pli"
module "/pliant/fullpliant/this_computer.pli"

constant os_KDSKBMODE 4B45h
constant os_K_RAW 0
constant os_K_XLAT 1

function keyboard_record_mapping layout
  arg Str layout
  keyboard_database:data:layout create layout
  var Data:KeyboardLayout l :> keyboard_database:data:layout layout
  (var Stream kbd) open "device:/tty0" in
  os_ioctl kbd:stream_handle os_KDSKBMODE (cast os_K_RAW Address)
  while true
    var Str mapping := keyboard_input "record "
    if mapping="" or mapping="try"
      console "try "
      part read
        kbd raw_read addressof:(var uInt8 ch1) 1
        if ch1>=128
          restart read
      kbd raw_read addressof:(var uInt8 ch2) 1
      console (cast ch1 Int) " " (cast ch2 Int) "=128+" (cast ch2 Int)-128 eol
      os_ioctl kbd:stream_handle os_KDSKBMODE (cast os_K_XLAT Address)
    eif (mapping parse word:"modifier" (var Int key) _ any:(var Str name))
      l:modifier create string:key
      l:modifier string:key := name
      console "recorded modifier key " key " as " name eol
    eif (mapping parse word:"switch" (var Int key) _ any:(var Str name))
      l:switch create string:key
      l:switch string:key := name
      console "recorded switch key " key " as " name eol
    eif (mapping parse any:(var Str modifier) (var Int key) _ any:(var Str name))
      var Str id := modifier+(shunt modifier<>"" and (modifier modifier:len-1 1)<>" " " " "")+string:key
      l:key create id
      l:key id := name
      console "recorded key " id " as " name eol
    else
      console "unsupported." eol


function keyboard_test layout
  arg Str layout
  keyboard_set_layout layout
  while true
    var Str c := keyboard_read
    console c
    if (c parse (var Int i)) and i<256
      console " = " character:i
    console eol


export keyboard_record_mapping keyboard_test