Patch title: Release 96 bulk changes
Abstract:
File: /pliant/graphic/console/framebuffer.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "prototype.pli"
module "/pliant/graphic/color/gamut.pli"


constant fb_configure false
constant console_configure false
constant use_signals false
constant shrink_queue false
constant verbose false
module "/pliant/language/compiler.pli"
module "prototype.pli"
module "/pliant/graphic/color/gamut.pli"


constant fb_configure false
constant console_configure false
constant use_signals false
constant shrink_queue false
constant verbose false
constant wheel true


method c mouse_read h
  arg_rw ConsoleFramebuffer c ; arg Int h
  os_read h addressof:(var uInt8 cmd) 1
  if (cmd .and. 8)=0
    return
  os_read h addressof:(var uInt8 x8) 1
  os_read h addressof:(var uInt8 y8) 1
  if c:mouse_extended
    os_read h addressof:(var uInt8 z8) 1


method c mouse_read h
  arg_rw ConsoleFramebuffer c ; arg Int h
  os_read h addressof:(var uInt8 cmd) 1
  if (cmd .and. 8)=0
    return
  os_read h addressof:(var uInt8 x8) 1
  os_read h addressof:(var uInt8 y8) 1
  if c:mouse_extended
    os_read h addressof:(var uInt8 z8) 1
  var Int buttons := (cmd .and. 1)+(cmd .and. 2)*2+(cmd .and
  var Int buttons := cmd .and. 7
  if (cmd .and. 0C0h)=0 # no movement overflow
    c mouse_move_x += (shunt (cmd .and. 10h)<>0 -256 0) .or.
    c mouse_move_y += (shunt (cmd .and. 20h)<>0 -256 0) .or.
    if c:mouse_extended
      var Int move_z := shunt (z8 .and. 08h)<>0 (-16 .or. (z
  if (cmd .and. 0C0h)=0 # no movement overflow
    c mouse_move_x += (shunt (cmd .and. 10h)<>0 -256 0) .or.
    c mouse_move_y += (shunt (cmd .and. 20h)<>0 -256 0) .or.
    if c:mouse_extended
      var Int move_z := shunt (z8 .and. 08h)<>0 (-16 .or. (z
      while move_z<>0
      if wheel
        var ConsoleEvent ev
        var ConsoleEvent ev
        ev event := "press"
        ev key := shunt move_z<0 "up" "down"
        ev event := "scroll"
        ev key := "wheel"
        ev buttons := c mouse_buttons
        ev buttons := c mouse_buttons
        ev x_or_x0 := c cursor_x
        ev y_or_y0 := c cursor_y
        ev x1 := undefined
        ev y1 := undefined
        ev x_or_x0 := 0
        ev y_or_y0 := move_z
        ev x1 := c cursor_x
        ev y1 := c cursor_y 
        c events += ev
        c events += ev
        move_z += shunt move_z<0 1 -1
      else
        while move_z<>0
          var ConsoleEvent ev
          ev event := "press"
          ev key := shunt move_z<0 "up" "down"
          ev buttons := c mouse_buttons
          ev x_or_x0 := c cursor_x
          ev y_or_y0 := c cursor_y
          ev x1 := undefined
          ev y1 := undefined
          c events += ev
          move_z += shunt move_z<0 1 -1
  var Int dx := c:mouse_move_x\c:mouse_divisor ; c mouse_mov
  var Int dy := c:mouse_move_y\c:mouse_divisor ; c mouse_mov
  if c:locked
    if dx<>0 or dy<>0
      if shrink_queue
        var Pointer:ConsoleEvent l :> c:events last
        if exists:l and l:event="scroll"
          dx += l x_or_x0
          dy -= l y_or_y0
          c:events remove l
          # console "*"
      var ConsoleEvent ev
      ev event := "scroll"
      ev key := ""
      ev buttons := buttons
      ev x_or_x0 := dx
      ev y_or_y0 := -dy
      ev x1 := c cursor_x
      ev y1 := c cursor_y
      c events += ev
  else
    var Int cx := min (max c:cursor_x+dx 0) c:proto:size_x-1
    var Int cy := min (max c:cursor_y-dy 0) c:proto:size_y-1
    if cx<>c:cursor_x or cy<>c:cursor_y
      if shrink_queue
        var Pointer:ConsoleEvent l :> c:events last
        if exists:l and l:event="move"
          c:events remove l
          # console "-"
      var ConsoleEvent ev
      ev event := "move"
      ev key := ""
      ev buttons := buttons
      ev x_or_x0 := cx
      ev y_or_y0 := cy
      ev x1 := undefined
      ev y1 := undefined
      c events += ev
      c:paint_sem request
      c cursor_off
      c cursor_x := cx
      c cursor_y := cy
      c cursor_on
      c:paint_sem release
  for (var Int i) 0 7
    if (buttons .and. 2^i)<>(c:mouse_buttons .and. 2^i)
      var ConsoleEvent ev
      ev event := shunt (buttons .and. 2^i)<>0 "press" "rele
      ev key := "button"+(string i+1)
      ev buttons := buttons
      ev x_or_x0 := c cursor_x
      ev y_or_y0 := c cursor_y
      ev x1 := undefined
      ev y1 := undefined
      c events += ev
  c mouse_buttons := buttons


graphic_console_record "framebuffer" ConsoleFramebuffer
  var Int dx := c:mouse_move_x\c:mouse_divisor ; c mouse_mov
  var Int dy := c:mouse_move_y\c:mouse_divisor ; c mouse_mov
  if c:locked
    if dx<>0 or dy<>0
      if shrink_queue
        var Pointer:ConsoleEvent l :> c:events last
        if exists:l and l:event="scroll"
          dx += l x_or_x0
          dy -= l y_or_y0
          c:events remove l
          # console "*"
      var ConsoleEvent ev
      ev event := "scroll"
      ev key := ""
      ev buttons := buttons
      ev x_or_x0 := dx
      ev y_or_y0 := -dy
      ev x1 := c cursor_x
      ev y1 := c cursor_y
      c events += ev
  else
    var Int cx := min (max c:cursor_x+dx 0) c:proto:size_x-1
    var Int cy := min (max c:cursor_y-dy 0) c:proto:size_y-1
    if cx<>c:cursor_x or cy<>c:cursor_y
      if shrink_queue
        var Pointer:ConsoleEvent l :> c:events last
        if exists:l and l:event="move"
          c:events remove l
          # console "-"
      var ConsoleEvent ev
      ev event := "move"
      ev key := ""
      ev buttons := buttons
      ev x_or_x0 := cx
      ev y_or_y0 := cy
      ev x1 := undefined
      ev y1 := undefined
      c events += ev
      c:paint_sem request
      c cursor_off
      c cursor_x := cx
      c cursor_y := cy
      c cursor_on
      c:paint_sem release
  for (var Int i) 0 7
    if (buttons .and. 2^i)<>(c:mouse_buttons .and. 2^i)
      var ConsoleEvent ev
      ev event := shunt (buttons .and. 2^i)<>0 "press" "rele
      ev key := "button"+(string i+1)
      ev buttons := buttons
      ev x_or_x0 := c cursor_x
      ev y_or_y0 := c cursor_y
      ev x1 := undefined
      ev y1 := undefined
      c events += ev
  c mouse_buttons := buttons


graphic_console_record "framebuffer" ConsoleFramebuffer