Patch title: Release 85 bulk changes
Abstract:
File: /pliant/graphic/sample/browser.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/context.pli"
module "/pliant/protocol/http/client.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/image/packed.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/image/convert.pli"
module "/pliant/graphic/browser/prototype.pli"
module "/pliant/graphic/browser/parser.pli"
module "/pliant/graphic/os/x11.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/graphic/browser/common.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/context.pli"
module "/pliant/protocol/http/client.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/image/packed.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/image/convert.pli"
module "/pliant/graphic/browser/prototype.pli"
module "/pliant/graphic/browser/parser.pli"
module "/pliant/graphic/os/x11.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/graphic/browser/common.pli"
# module "/pliant/graphic/browser/debug.pli"



function browse url0 user password
  arg Str url0 user password
  var List:BrowserPage backward
  var List:BrowserPage forward
  var Str url := url0 ; var Str form := ""
  var Str options := ""
  if user<>""
    options := "user "+string:user+" password "+string:passw
  var Int tx := -margin ; var Int ty := -margin
  var DateTime dt := datetime
  var Link:D2Box drawing :> html_parse url form options
  console "loaded in " string:(cast (datetime:seconds-dt:sec
  (var D2Context context) bind (image_prototype 0 0 page_mm_
  drawing position context



function browse url0 user password
  arg Str url0 user password
  var List:BrowserPage backward
  var List:BrowserPage forward
  var Str url := url0 ; var Str form := ""
  var Str options := ""
  if user<>""
    options := "user "+string:user+" password "+string:passw
  var Int tx := -margin ; var Int ty := -margin
  var DateTime dt := datetime
  var Link:D2Box drawing :> html_parse url form options
  console "loaded in " string:(cast (datetime:seconds-dt:sec
  (var D2Context context) bind (image_prototype 0 0 page_mm_
  drawing position context
  # drawing display_position ""
  var Int memo_x memo_y ; var CBool scroll
  var XSetWindowAttributes a
  a background_pixel := x11_ground pixel
  a override_redirect := false # true
  a event_mask := PointerMotionMask+ButtonPressMask+ButtonRe
  var uInt mask := CWBackPixel+CWBorderPixel+CWOverrideRedir
  var XWindow window := XCreateWindow display screen:root 0 
  XStoreName display window "Pliant browser"
  XMapWindow display window
  while true
    XNextEvent display (var XEvent event)
    if event:type=Expose or event:type=GraphicsExpose
      var Pointer:XExposeEvent expose :> addressof:event map
      if trace
        console "redraw " expose:x " " expose:y " " expose:x
      var DateTime dt := datetime
      redraw drawing 25.4/dpi 25.4/dpi expose:x+tx expose:y+
      # console (cast (datetime:seconds-dt:seconds)*1000 Int
      if event:type=GraphicsExpose and expose:count=0
        scroll := true
    eif event:type=NoExpose
      if trace
        console "noexpose" eol
      scroll := true
    eif event:type=KeyPress or event:type=KeyRelease
      var Pointer:XKeyEvent k :> addressof:event map XKeyEve
      console "key " k:keycode " state " k:state
      var Str key := "                     "
      memory_clear addressof:(var XComposeStatus cstatus) XC
      XLookupString k key:characters key:len (var XKeySym ke
      key := key 0 (key search "[0]" 0)
      (var Str compose) set cstatus:compose_ptr cstatus:char
      console " -> keysym " keysym:id " [dq]" key "[dq] comp
      var D2Event ev
      ev type := shunt event:type=KeyPress event_key event_o
      ev key := undefined
      if key:len=1
        ev key := key:0:number
      ev status := shunt (k:state .and. 256)<>0 mouse_button
      ev status += shunt (k:state .and. 512)<>0 mouse_button
      ev status += shunt (k:state .and. 1024)<>0 mouse_butto
      ev x := (k:x+tx)*25.4/dpi
      ev y := (k:y+ty)*25.4/dpi
      ev options := "x11_key_"+(shunt event:type=KeyPress "p
      ev url := ""
      drawing event ev
      if event:type=KeyPress
        if keysym:id=XK_F0+1 and (exists backward:last)
          var BrowserPage bp ; bp url := url ; bp form := fo
          forward += bp
          url := backward:last url
          form := backward:last form
          tx := backward:last tx
          ty := backward:last ty
          backward remove backward:last
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console "backward " url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
        eif keysym:id=XK_F0+2 and (exists forward:last)
          var BrowserPage bp ; bp url := url ; bp form := fo
          backward += bp
          url := forward:last url
          form := forward:last form
          tx := forward:last tx
          ty := forward:last ty
          forward remove forward:last
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console "forward " url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
    eif event:type=ButtonPress or event:type=ButtonRelease
      var Pointer:XButtonEvent button :> addressof:event map
      if true # trace
        console "button " button:button " state " button:sta
      if event:type=ButtonPress and button:button=2
        memo_x := button x ; memo_y := button y ; scroll := 
      var D2Event ev
      ev type := event_mouse
      ev key := undefined
      ev status := shunt (button:button=1 and event:type=But
      ev status += shunt (button:button=2 and event:type=But
      ev status += shunt (button:button=3 and event:type=But
      ev x := (button:x+tx)*25.4/dpi
      ev y := (button:y+ty)*25.4/dpi
      ev options := "x11_state "+(string button:state)+" x11
      ev url := "" ; ev form := ""
      drawing event ev
      if event:type=ButtonPress
        if button:button=1 and ev:url<>""
          var BrowserPage bp ; bp url := url ; bp form := fo
          backward += bp
          forward := var List:BrowserPage empty_list
          url := url_concat url ev:url
          form :=  ev form
          tx := -margin ; ty := -margin
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
    eif event:type=MotionNotify
      var Pointer:XMotionEvent motion :> addressof:event map
      if trace
        console "motion " motion:x " " motion:y " (" motion:
      if motion:state=512 and scroll # middle button is down
        var Int delta_x := min motion:x-memo_x tx+margin ; v
        if delta_x<>0 or delta_y<>0
          var XGC gc := XCreateGC display window 0 (var XGCV
          XCopyArea display window window gc -delta_x -delta
          XFreeGC display gc
          scroll := false
        tx -= delta_x ; ty -= delta_y
        memo_x := motion x ; memo_y := motion y
    else
      console "unknown event " event:type eol


  var Int memo_x memo_y ; var CBool scroll
  var XSetWindowAttributes a
  a background_pixel := x11_ground pixel
  a override_redirect := false # true
  a event_mask := PointerMotionMask+ButtonPressMask+ButtonRe
  var uInt mask := CWBackPixel+CWBorderPixel+CWOverrideRedir
  var XWindow window := XCreateWindow display screen:root 0 
  XStoreName display window "Pliant browser"
  XMapWindow display window
  while true
    XNextEvent display (var XEvent event)
    if event:type=Expose or event:type=GraphicsExpose
      var Pointer:XExposeEvent expose :> addressof:event map
      if trace
        console "redraw " expose:x " " expose:y " " expose:x
      var DateTime dt := datetime
      redraw drawing 25.4/dpi 25.4/dpi expose:x+tx expose:y+
      # console (cast (datetime:seconds-dt:seconds)*1000 Int
      if event:type=GraphicsExpose and expose:count=0
        scroll := true
    eif event:type=NoExpose
      if trace
        console "noexpose" eol
      scroll := true
    eif event:type=KeyPress or event:type=KeyRelease
      var Pointer:XKeyEvent k :> addressof:event map XKeyEve
      console "key " k:keycode " state " k:state
      var Str key := "                     "
      memory_clear addressof:(var XComposeStatus cstatus) XC
      XLookupString k key:characters key:len (var XKeySym ke
      key := key 0 (key search "[0]" 0)
      (var Str compose) set cstatus:compose_ptr cstatus:char
      console " -> keysym " keysym:id " [dq]" key "[dq] comp
      var D2Event ev
      ev type := shunt event:type=KeyPress event_key event_o
      ev key := undefined
      if key:len=1
        ev key := key:0:number
      ev status := shunt (k:state .and. 256)<>0 mouse_button
      ev status += shunt (k:state .and. 512)<>0 mouse_button
      ev status += shunt (k:state .and. 1024)<>0 mouse_butto
      ev x := (k:x+tx)*25.4/dpi
      ev y := (k:y+ty)*25.4/dpi
      ev options := "x11_key_"+(shunt event:type=KeyPress "p
      ev url := ""
      drawing event ev
      if event:type=KeyPress
        if keysym:id=XK_F0+1 and (exists backward:last)
          var BrowserPage bp ; bp url := url ; bp form := fo
          forward += bp
          url := backward:last url
          form := backward:last form
          tx := backward:last tx
          ty := backward:last ty
          backward remove backward:last
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console "backward " url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
        eif keysym:id=XK_F0+2 and (exists forward:last)
          var BrowserPage bp ; bp url := url ; bp form := fo
          backward += bp
          url := forward:last url
          form := forward:last form
          tx := forward:last tx
          ty := forward:last ty
          forward remove forward:last
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console "forward " url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
    eif event:type=ButtonPress or event:type=ButtonRelease
      var Pointer:XButtonEvent button :> addressof:event map
      if true # trace
        console "button " button:button " state " button:sta
      if event:type=ButtonPress and button:button=2
        memo_x := button x ; memo_y := button y ; scroll := 
      var D2Event ev
      ev type := event_mouse
      ev key := undefined
      ev status := shunt (button:button=1 and event:type=But
      ev status += shunt (button:button=2 and event:type=But
      ev status += shunt (button:button=3 and event:type=But
      ev x := (button:x+tx)*25.4/dpi
      ev y := (button:y+ty)*25.4/dpi
      ev options := "x11_state "+(string button:state)+" x11
      ev url := "" ; ev form := ""
      drawing event ev
      if event:type=ButtonPress
        if button:button=1 and ev:url<>""
          var BrowserPage bp ; bp url := url ; bp form := fo
          backward += bp
          forward := var List:BrowserPage empty_list
          url := url_concat url ev:url
          form :=  ev form
          tx := -margin ; ty := -margin
          var Str options := ""
          if user<>"" and (url0 parse "http://" any:(var Str
            options := "user "+string:user+" password "+stri
          console url eol
          drawing :> html_parse url form options
          (var D2Context context) bind (image_prototype 0 0 
          drawing position context
          XClearArea display window 0 0 window_max_x window_
    eif event:type=MotionNotify
      var Pointer:XMotionEvent motion :> addressof:event map
      if trace
        console "motion " motion:x " " motion:y " (" motion:
      if motion:state=512 and scroll # middle button is down
        var Int delta_x := min motion:x-memo_x tx+margin ; v
        if delta_x<>0 or delta_y<>0
          var XGC gc := XCreateGC display window 0 (var XGCV
          XCopyArea display window window gc -delta_x -delta
          XFreeGC display gc
          scroll := false
        tx -= delta_x ; ty -= delta_y
        memo_x := motion x ; memo_y := motion y
    else
      console "unknown event " event:type eol