Patch title: Release 87 bulk changes
Abstract:
File: /pliant/graphic/image/frame_buffer.pli
Key:
    Removed line
    Added line
   
abstract
  [Mapping Linux frame buffer as a Pliant image so that you 
  [frame buffer using standard Pliant drawing instructions.]


function build p
  arg_w ImageFrameBuffer p
abstract
  [Mapping Linux frame buffer as a Pliant image so that you 
  [frame buffer using standard Pliant drawing instructions.]


function build p
  arg_w ImageFrameBuffer p
  p buffer := null
  if (file_query "device:/fb0" standard)=undefined
    kernel_make_device "device:/fb0"
  p handle := os_open "/dev/fb0" os_O_RDWR 0
  if p:handle<0
  if (file_query "device:/fb0" standard)=undefined
    kernel_make_device "device:/fb0"
  p handle := os_open "/dev/fb0" os_O_RDWR 0
  if p:handle<0
    console "no frame buffer" eol
    p buffer := null
    return
  var Int err := os_ioctl p:handle FBIOGET_VSCREENINF0 addre
  if err<>0
    return
  var Int err := os_ioctl p:handle FBIOGET_VSCREENINF0 addre
  if err<>0
    console "failed to query the frame buffer" eol
    return
    return
  info xres := 1024
  info yres := 768
  info bits_per_pixel := 32
  var Int err := os_ioctl p:handle FBIOPUT_VSCREENINF0 addre
  if err<>0
    console "failed to set the frame buffer" eol
    return
  var Int err := os_ioctl p:handle FBIOGET_VSCREENINF0 addre
  if err<>0
    console "failed to query the frame buffer" eol
    return
  console "screen is " (cast info:xres Int) " x " (cast info
  addressof:p map ImagePrototype := image_prototype 0 0 info
  p line_size := p:pixel_size*p:size_x
  addressof:p map ImagePrototype := image_prototype 0 0 info
  p line_size := p:pixel_size*p:size_x
  console "buffer size is " info:xres*info:bits_per_pixel\8*
  p buffer := os_mmap null info:xres*info:bits_per_pixel\8*i
  p buffer := os_mmap null info:xres*info:bits_per_pixel\8*i
  console "buffer at " string:(cast p:buffer Int) eol




method p setup proto options -> status
  oarg_rw ImageFrameBuffer p ; arg ImagePrototype proto ; arg Str options ; arg ExtendedStatus status
  if p:handle<0
    return failure:"no frame buffer"
  var Int err := os_ioctl p:handle FBIOGET_VSCREENINF0 addressof:(var fb_var_screeninfo info)
  if err<>0
    return failure:"failed to query video mode"
  info xres := proto size_x
  info yres := proto size_y
  info bits_per_pixel := proto:pixel_size*8
  if not (options option "noset")
    var Int err := os_ioctl p:handle FBIOPUT_VSCREENINF0 addressof:(var fb_var_screeninfo info)
    if err<>0
      return (failure "failed to set video mode to "+(string proto:size_x)+"x"+(string proto:size_y)+"x"+(string proto:pixel_size*8))
    var Int err := os_ioctl p:handle FBIOGET_VSCREENINF0 addressof:(var fb_var_screeninfo info)
    if err<>0
      return failure:"failed to query video mode (2)"
  os_munmap p:buffer p:line_size*p:size_y
  addressof:p map ImagePrototype := image_prototype 0 0 info:xres/75*25.4 info:yres/75*25.4 info:xres info:yres color_gamut:(shunt info:bits_per_pixel=24 "bgr" "bgr32")
  p line_size := p:pixel_size*p:size_x
  p buffer := os_mmap null info:xres*info:bits_per_pixel\8*info:yres os_PROT_READ+os_PROT_WRITE os_MAP_SHARED p:handle 0
  if p:buffer=null
    return failure:"failed to map video memory"
  status := success


method p pixel x y -> adr
  arg ImageFrameBuffer p ; arg Int x y ; arg Address adr
  check x>=0 and x<p:size_x
  check y>=0 and y<p:size_y
  adr := p:buffer translate Byte x*p:pixel_size+y*p:line_siz


function framebuffer_test
  var Link:ImagePrototype p :> new ImageFrameBuffer
  for (var Int y) 0 p:size_y-1
    for (var Int x) 0 p:size_x-1
      var uInt c := (x\4)%256+(y\4)%256*256
      p write x y 1 addressof:c
export framebuffer_test
method p pixel x y -> adr
  arg ImageFrameBuffer p ; arg Int x y ; arg Address adr
  check x>=0 and x<p:size_x
  check y>=0 and y<p:size_y
  adr := p:buffer translate Byte x*p:pixel_size+y*p:line_siz


function framebuffer_test
  var Link:ImagePrototype p :> new ImageFrameBuffer
  for (var Int y) 0 p:size_y-1
    for (var Int x) 0 p:size_x-1
      var uInt c := (x\4)%256+(y\4)%256*256
      p write x y 1 addressof:c
export framebuffer_test