Patch title: Release 89 bulk changes
Abstract:
File: /linux/input/mouse.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/linux/kernel/device.pli"

gvar Stream mouse
gvar Int mouse_x mouse_y
gvar Int size_x size_y
gvar Float divisor

if not (this_computer:env:"hardware":"mouse":"divisor" parse divisor)
  divisor := 1
if (this_computer:env:"hardware":"screen":"horizontal_resolution" parse size_x) and (this_computer:env:"hardware":"screen":"vertical_resolution" parse size_y)
  mouse_x := cast size_x\2*divisor Int ; mouse_y := cast size_y\2*divisor Int
else
  size_x := 2^12 ; size_y := 2^12
  mouse_x := 0 ; mouse_y := 0

function mouse_read x y buttons
  arg_w Int x y buttons
  if mouse=failure
    var Str device := this_computer:env:"hardware":"mouse":"linux_device"
    if device=""
      device := "device:/psaux"
    kernel_make_device device
    mouse open device in+safe
  part again
    mouse raw_read addressof:(var uInt8 c) 1
    if (c .and. 8)=0
      restart again
  mouse raw_read addressof:(var uInt8 x8) 1
  mouse raw_read addressof:(var uInt8 y8) 1
  if (c .and. 0C0h)=0
    var Int move_x := (shunt (c .and. 10h)<>0 -256 0) .or. x8
    var Int move_y := (shunt (c .and. 20h)<>0 -256 0) .or. y8
    mouse_x := min (max mouse_x+move_x 0) (cast (size_x-1)*divisor Int)
    mouse_y := min (max mouse_y-move_y 0) (cast (size_y-1)*divisor Int)
  x := cast mouse_x/divisor Int ; y := cast mouse_y/divisor Int ; buttons := c .and. 7
  

export mouse_read