Test output for honu

Testing time: 0.0s

CHICKEN_INSTALL_PREFIX=/root/src/salmonella/salmonella-4.5.0/repo CHICKEN_INCLUDE_PATH=/root/src/salmonella/salmonella-4.5.0/repo/share/chicken CHICKEN_REPOSITORY=/root/src/salmonella/salmonella-4.5.0/repo/lib/chicken/5 /usr/local/chicken-4.5.0/bin/csi -script run.scm
import
java
|.|
applet
|.|
Applet
;
import
java
|.|
awt
.*
;
import
java
|.|
io
.*
;
public
class
Toplevel
extends
Applet
implements
SchanReader
(#%braces
  Terminal
  myterminal
  ;
  public
  void
  init
  (#%parens)
  (#%braces
    myterminal
    =
    new
    Terminal
    (#%parens)
    ;
    HalServer
    |.|
    registerReader
    (#%parens this)
    ;
    resize
    (#%parens 800 , 400)
    ;
    GridBagLayout
    gb
    =
    new
    GridBagLayout
    (#%parens)
    ;
    setLayout
    (#%parens gb)
    ;
    GridBagConstraints
    cn
    =
    new
    GridBagConstraints
    (#%parens)
    ;
    cn
    |.|
    weightx
    =
    1
    ;
    cn
    |.|
    weighty
    =
    1
    ;
    cn
    |.|
    fill
    =
    cn
    |.|
    BOTH
    ;
    gb
    |.|
    setConstraints
    (#%parens myterminal , cn)
    ;
    add
    (#%parens myterminal)
    ;
    validate
    (#%parens)
    ;
    show
    (#%parens)
    ;
    myterminal
    |.|
    init
    (#%parens)
    ;
    myterminal
    |.|
    write
    (#%parens "Hal Applet Compiled by MLj 0.2
" , 0)
    ;)
  public
  void
  handlechan
  (#%parens String thedata)
  (#%braces myterminal |.| write (#%parens thedata , 0) ;)
  public
  void
  stop
  (#%parens)
  (#%braces
    if
    (#%parens
      Terminal
      |.|
      computeThread
      !=
      null
      &&
      Terminal
      |.|
      computeThread
      |.|
      isAlive
      (#%parens))
    (#%braces
      Terminal
      |.|
      computeThread
      |.|
      stop
      (#%parens)
      ;
      myterminal
      |.|
      write
      (#%parens "**background computation stopped**
" , 0)
      ;)
    Terminal
    |.|
    computeThread
    =
    null
    ;)
  public
  void
  start
  (#%parens)
  (#%braces Terminal |.| computeThread = null ;))
class
Terminal
extends
Canvas
(#%braces
  public
  static
  Thread
  computeThread
  =
  null
  ;
  static
  final
  boolean
  DEBUG
  =
  false
  ;
  static
  final
  int
  OUTF_RAW
  =
  1
  <<
  0
  ;
  static
  final
  int
  OUTF_PARTIAL
  =
  1
  <<
  1
  ;
  static
  final
  int
  STYLE_PLAIN
  =
  0
  ;
  static
  final
  int
  STYLE_INVERSE
  =
  1
  <<
  0
  ;
  static
  final
  int
  STYLE_BOLD
  =
  1
  <<
  1
  ;
  static
  final
  int
  STYLE_ITALIC
  =
  1
  <<
  2
  ;
  static
  final
  int
  STYLE_UNDERSCORE
  =
  1
  <<
  3
  ;
  static
  final
  int
  INNER_SIZE
  =
  4
  ;
  static
  final
  int
  ACTIVE_SIZE
  =
  2
  ;
  static
  final
  int
  BORDER_WIDTH
  =
  (#%parens INNER_SIZE + ACTIVE_SIZE)
  ;
  static
  final
  int
  BORDER_HEIGHT
  =
  (#%parens INNER_SIZE + ACTIVE_SIZE)
  ;
  int
  fontsize
  =
  -
  1
  ;
  Color
  defBackground
  ,
  defForeground
  ;
  Toolkit
  toolkit
  ;
  Font
  fontPlain
  ,
  fontBold
  ,
  fontItalic
  ,
  fontBoldItalic
  ;
  int
  charWidth
  ,
  charHeight
  ;
  int
  fontAscent
  ,
  fontDescent
  ;
  int
  numRows
  ,
  numCols
  ;
  int
  curRow
  ,
  curCol
  ;
  int
  curStyle
  =
  STYLE_PLAIN
  ;
  int
  regionTop
  ,
  regionBottom
  ,
  regionLeft
  ,
  regionRight
  ;
  int
  lastRow
  ,
  lastCol
  ;
  int
  dirtyTop
  =
  -
  1
  ,
  dirtyBottom
  =
  -
  1
  ;
  int
  scrollCount
  =
  0
  ;
  boolean
  overChar
  =
  false
  ;
  boolean
  cursorVisible
  =
  true
  ;
  char
  page
  (#%brackets)
  (#%brackets)
  ;
  int
  style
  (#%brackets)
  (#%brackets)
  ;
  public
  Terminal
  (#%parens)
  (#%braces fontsize = 12 ;)
  public
  void
  init
  (#%parens)
  (#%braces
    Graphics
    g
    =
    getGraphics
    (#%parens)
    ;
    Font
    f
    =
    g
    |.|
    getFont
    (#%parens)
    ;
    int
    size
    =
    f
    |.|
    getSize
    (#%parens)
    ;
    if
    (#%parens fontsize > 0)
    size
    =
    fontsize
    ;
    fontPlain
    =
    f
    ;
    try
    (#%braces
      fontPlain
      =
      new
      Font
      (#%parens "Courier" , Font |.| PLAIN , size)
      ;)
    finally
    (#%braces)
    if
    (#%parens fontPlain == null)
    fontPlain
    =
    f
    ;
    if
    (#%parens DEBUG)
    (#%braces
      System
      |.|
      out
      |.|
      println
      (#%parens
        "StdFont name="
        +
        fontPlain
        |.|
        getName
        (#%parens)
        +
        " size="
        +
        fontPlain
        |.|
        getSize
        (#%parens)
        +
        " style="
        +
        fontPlain
        |.|
        getStyle
        (#%parens))
      ;)
    fontBold
    =
    fontPlain
    ;
    try
    (#%braces
      fontBold
      =
      new
      Font
      (#%parens
        fontPlain
        |.|
        getName
        (#%parens)
        ,
        Font
        |.|
        BOLD
        ,
        fontPlain
        |.|
        getSize
        (#%parens))
      ;)
    finally
    (#%braces)
    fontItalic
    =
    fontBoldItalic
    =
    fontBold
    ;
    try
    (#%braces
      fontItalic
      =
      new
      Font
      (#%parens
        fontPlain
        |.|
        getName
        (#%parens)
        ,
        Font
        |.|
        ITALIC
        ,
        fontPlain
        |.|
        getSize
        (#%parens))
      ;)
    finally
    (#%braces)
    try
    (#%braces
      fontBoldItalic
      =
      new
      Font
      (#%parens
        fontPlain
        |.|
        getName
        (#%parens)
        ,
        Font
        |.|
        BOLD
        +
        Font
        |.|
        ITALIC
        ,
        fontPlain
        |.|
        getSize
        (#%parens))
      ;)
    finally
    (#%braces)
    if
    (#%parens DEBUG)
    (#%braces
      System
      |.|
      out
      |.|
      println
      (#%parens
        "BldFont name="
        +
        fontBold
        |.|
        getName
        (#%parens)
        +
        " size="
        +
        fontBold
        |.|
        getSize
        (#%parens)
        +
        " style="
        +
        fontBold
        |.|
        getStyle
        (#%parens))
      ;
      System
      |.|
      out
      |.|
      println
      (#%parens
        "ItlFont name="
        +
        fontItalic
        |.|
        getName
        (#%parens)
        +
        " size="
        +
        fontItalic
        |.|
        getSize
        (#%parens)
        +
        " style="
        +
        fontItalic
        |.|
        getStyle
        (#%parens))
      ;)
    g
    |.|
    setFont
    (#%parens fontPlain)
    ;
    setFont
    (#%parens fontPlain)
    ;
    defBackground
    =
    getBackground
    (#%parens)
    ;
    defForeground
    =
    getForeground
    (#%parens)
    ;
    toolkit
    =
    getToolkit
    (#%parens)
    ;
    screenInit
    (#%parens)
    ;
    repaint
    (#%parens)
    ;)
  FontMetrics
  get_metrics
  (#%parens boolean install)
  (#%braces
    Graphics
    g
    ;
    FontMetrics
    m
    ;
    Dimension
    d
    ;
    g
    =
    getGraphics
    (#%parens)
    ;
    m
    =
    g
    |.|
    getFontMetrics
    (#%parens fontPlain)
    ;
    if
    (#%parens install)
    (#%braces
      charWidth
      =
      m
      |.|
      charWidth
      (#%parens #\W)
      ;
      charHeight
      =
      m
      |.|
      getHeight
      (#%parens)
      ;
      fontAscent
      =
      m
      |.|
      getAscent
      (#%parens)
      ;
      fontDescent
      =
      m
      |.|
      getDescent
      (#%parens)
      ;)
    return
    m
    ;)
  public
  Dimension
  minimumSize
  (#%parens)
  (#%braces return (#%parens new Dimension (#%parens 800 , 400)) ;)
  public
  Dimension
  preferredSize
  (#%parens)
  (#%braces return minimumSize (#%parens) ;)
  public
  void
  screenInit
  (#%parens)
  (#%braces
    Dimension
    d
    ;
    int
    rows
    ,
    cols
    ;
    get_metrics
    (#%parens true)
    ;
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Initializing screen...")
    ;
    d
    =
    size
    (#%parens)
    ;
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens
      "size: "
      +
      d
      +
      " bh: "
      +
      BORDER_HEIGHT
      +
      "bw: "
      +
      BORDER_WIDTH
      +
      "cw:"
      +
      charWidth
      +
      " ch: "
      +
      charHeight)
    ;
    cols
    =
    (#%parens d |.| width - (#%parens BORDER_WIDTH * 2))
    /
    charWidth
    ;
    rows
    =
    (#%parens d |.| height - (#%parens BORDER_HEIGHT * 2))
    /
    charHeight
    ;
    if
    (#%parens cols < 4)
    cols
    =
    4
    ;
    if
    (#%parens rows < 2)
    rows
    =
    2
    ;
    if
    (#%parens numRows == rows && numCols == cols)
    return
    ;
    numRows
    =
    rows
    ;
    numCols
    =
    cols
    ;
    curCol
    =
    0
    ;
    curRow
    =
    0
    ;
    lastCol
    =
    0
    ;
    lastRow
    =
    0
    ;
    scrollCount
    =
    0
    ;
    setRegion
    (#%parens)
    ;
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Width = " + d |.| width + ", Height = " + d |.| height)
    ;
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Columns = " + numCols + ", Rows = " + numRows)
    ;
    page
    =
    new
    char
    (#%brackets numRows)
    (#%brackets numCols)
    ;
    style
    =
    new
    int
    (#%brackets numRows)
    (#%brackets numCols)
    ;
    for
    (#%parens int r = 0 ; r < numRows ; r ++)
    (#%braces
      for
      (#%parens int c = 0 ; c < numCols ; c ++)
      (#%braces
        page
        (#%brackets r)
        (#%brackets c)
        =
        #\space
        ;
        style
        (#%brackets r)
        (#%brackets c)
        =
        STYLE_PLAIN
        ;))
    dirtyTop
    =
    0
    ;
    dirtyBottom
    =
    numRows
    -
    1
    ;)
  public
  int
  getCursorRow
  (#%parens)
  (#%braces return curRow ;)
  public
  int
  getCursorCol
  (#%parens)
  (#%braces return curCol ;)
  public
  int
  getNumRows
  (#%parens)
  (#%braces return numRows ;)
  public
  int
  getNumCols
  (#%parens)
  (#%braces return numCols ;)
  public
  void
  setCursorPos
  (#%parens int row , int col)
  (#%braces
    if
    (#%parens row < 0)
    row
    =
    0
    ;
    if
    (#%parens row >= numRows)
    row
    =
    numRows
    -
    1
    ;
    if
    (#%parens col < 0)
    col
    =
    0
    ;
    if
    (#%parens col >= numCols)
    col
    =
    numCols
    -
    1
    ;
    curRow
    =
    row
    ;
    curCol
    =
    col
    ;)
  public
  void
  setCursorVisible
  (#%parens boolean state)
  (#%braces cursorVisible = state ;)
  public
  boolean
  getCursorVisible
  (#%parens)
  (#%braces return cursorVisible ;)
  public
  void
  setRegion
  (#%parens)
  (#%braces
    regionTop
    =
    0
    ;
    regionBottom
    =
    numRows
    -
    1
    ;
    regionLeft
    =
    0
    ;
    regionRight
    =
    numCols
    -
    1
    ;)
  public
  void
  setRegion
  (#%parens int top , int bottom)
  (#%braces setRegion (#%parens top , bottom , 0 , numCols - 1) ;)
  public
  void
  setRegion
  (#%parens int top , int bottom , int left , int right)
  (#%braces
    if
    (#%parens top < 0)
    top
    =
    0
    ;
    if
    (#%parens top >= numRows)
    top
    =
    numRows
    -
    1
    ;
    if
    (#%parens bottom < 0)
    bottom
    =
    0
    ;
    if
    (#%parens bottom >= numRows)
    bottom
    =
    numRows
    -
    1
    ;
    if
    (#%parens top >= bottom - 2)
    (#%braces if (#%parens top > 2) top = 0 ; else bottom = numRows - 1 ;)
    if
    (#%parens left < 0)
    left
    =
    0
    ;
    if
    (#%parens left >= numCols)
    left
    =
    numCols
    -
    1
    ;
    if
    (#%parens right < 0)
    right
    =
    0
    ;
    if
    (#%parens right >= numCols)
    right
    =
    numCols
    -
    1
    ;
    if
    (#%parens left >= right - 2)
    (#%braces if (#%parens left > 2) left = 0 ; else right = numCols - 1 ;)
    regionTop
    =
    top
    ;
    regionBottom
    =
    bottom
    ;
    regionLeft
    =
    left
    ;
    regionRight
    =
    right
    ;)
  public
  int
  getRegionTop
  (#%parens)
  (#%braces return regionTop ;)
  public
  int
  getRegionBottom
  (#%parens)
  (#%braces return regionBottom ;)
  public
  int
  getRegionLeft
  (#%parens)
  (#%braces return regionLeft ;)
  public
  int
  getRegionRight
  (#%parens)
  (#%braces return regionRight ;)
  public
  void
  setStyle
  (#%parens int style)
  (#%braces curStyle = style ;)
  public
  int
  getStyle
  (#%parens)
  (#%braces return curStyle ;)
  public
  void
  setChar
  (#%parens char c)
  (#%braces
    page
    (#%brackets curRow)
    (#%brackets curCol)
    =
    c
    ;
    style
    (#%brackets curRow)
    (#%brackets curCol)
    =
    curStyle
    ;)
  public
  void
  setChar
  (#%parens char c , int row , int col)
  (#%braces
    page
    (#%brackets row)
    (#%brackets col)
    =
    c
    ;
    style
    (#%brackets row)
    (#%brackets col)
    =
    curStyle
    ;)
  public
  char
  getChar
  (#%parens)
  (#%braces return page (#%brackets curRow) (#%brackets curCol) ;)
  public
  char
  getChar
  (#%parens int row , int col)
  (#%braces return page (#%brackets row) (#%brackets col) ;)
  public
  int
  getCharStyle
  (#%parens)
  (#%braces return style (#%brackets curRow) (#%brackets curCol) ;)
  public
  int
  getCharStyle
  (#%parens int row , int col)
  (#%braces return style (#%brackets row) (#%brackets col) ;)
  Font
  get_style_font
  (#%parens int style)
  (#%braces
    switch
    (#%parens style & (#%parens STYLE_BOLD | STYLE_ITALIC))
    (#%braces
      case
      STYLE_PLAIN
      :
      return
      fontPlain
      ;
      case
      STYLE_BOLD
      :
      return
      fontBold
      ;
      case
      STYLE_ITALIC
      :
      return
      fontItalic
      ;
      case
      STYLE_BOLD
      |
      STYLE_ITALIC
      :
      return
      fontBoldItalic
      ;
      default
      :
      return
      fontPlain
      ;))
  void
  drawRowCol
  (#%parens Graphics g , int row , int col)
  (#%braces
    int
    x
    =
    (#%parens col * charWidth)
    +
    BORDER_WIDTH
    ;
    int
    y
    =
    (#%parens row * charHeight)
    +
    BORDER_HEIGHT
    ;
    g
    |.|
    setFont
    (#%parens
      get_style_font
      (#%parens style (#%brackets row) (#%brackets col)))
    ;
    if
    (#%parens
      (#%parens curRow != row |\|\|| curCol != col |\|\|| ! cursorVisible)
      ^
      (#%parens
        (#%parens style (#%brackets row) (#%brackets col) & STYLE_INVERSE)
        ==
        STYLE_INVERSE))
    (#%braces
      g
      |.|
      clearRect
      (#%parens x , y , charWidth , charHeight)
      ;
      g
      |.|
      setColor
      (#%parens getForeground (#%parens))
      ;
      g
      |.|
      drawChars
      (#%parens page (#%brackets row) , col , 1 , x , y + fontAscent)
      ;)
    else
    (#%braces
      g
      |.|
      setColor
      (#%parens getForeground (#%parens))
      ;
      g
      |.|
      fillRect
      (#%parens x , y , charWidth , charHeight)
      ;
      g
      |.|
      setColor
      (#%parens getBackground (#%parens))
      ;
      g
      |.|
      drawChars
      (#%parens page (#%brackets row) , col , 1 , x , y + fontAscent)
      ;)
    if
    (#%parens
      (#%parens style (#%brackets row) (#%brackets col) & STYLE_UNDERSCORE)
      !=
      0)
    (#%braces
      g
      |.|
      drawLine
      (#%parens x , y + fontAscent , x + charWidth - 1 , y + fontAscent)
      ;))
  public
  void
  drawRow
  (#%parens Graphics g , int row)
  (#%braces
    int
    (#%brackets)
    rowStyles
    =
    style
    (#%brackets row)
    ;
    int
    col
    =
    0
    ;
    int
    y
    =
    BORDER_HEIGHT
    +
    (#%parens row * charHeight)
    ;
    if
    (#%parens rowStyles == null |\|\|| page (#%brackets row) == null)
    (#%braces
      System
      |.|
      out
      |.|
      println
      (#%parens "*** null entry at row " + row)
      ;
      return
      ;)
    while
    (#%parens col < numCols)
    (#%braces
      int
      first
      =
      col
      ;
      int
      cur_style
      =
      rowStyles
      (#%brackets col)
      ;
      while
      (#%parens col < numCols && cur_style == rowStyles (#%brackets col))
      (#%braces col ++ ;)
      int
      x
      =
      BORDER_WIDTH
      +
      (#%parens first * charWidth)
      ;
      g
      |.|
      setFont
      (#%parens get_style_font (#%parens cur_style))
      ;
      if
      (#%parens (#%parens cur_style & STYLE_INVERSE) == 0)
      (#%braces g |.| setColor (#%parens getBackground (#%parens)) ;)
      else
      (#%braces g |.| setColor (#%parens getForeground (#%parens)) ;)
      g
      |.|
      fillRect
      (#%parens
        x
        ,
        y
        ,
        (#%parens (#%parens col - first) * charWidth)
        ,
        charHeight)
      ;
      if
      (#%parens (#%parens cur_style & STYLE_INVERSE) == 0)
      (#%braces g |.| setColor (#%parens getForeground (#%parens)) ;)
      else
      (#%braces g |.| setColor (#%parens getBackground (#%parens)) ;)
      g
      |.|
      drawChars
      (#%parens
        page
        (#%brackets row)
        ,
        first
        ,
        col
        -
        first
        ,
        x
        ,
        y
        +
        fontAscent)
      ;
      if
      (#%parens (#%parens cur_style & STYLE_UNDERSCORE) != 0)
      (#%braces
        g
        |.|
        drawLine
        (#%parens
          x
          ,
          y
          +
          fontAscent
          ,
          x
          +
          (#%parens (#%parens col - first) * charWidth)
          ,
          y
          +
          fontAscent)
        ;))
    if
    (#%parens cursorVisible && row == curRow)
    (#%braces
      if
      (#%parens DEBUG)
      System
      |.|
      out
      |.|
      println
      (#%parens "Drawing cursor: row=" + curRow + ", col=" + curCol)
      ;
      drawRowCol
      (#%parens g , curRow , curCol)
      ;))
  public
  void
  screenRedraw
  (#%parens Graphics g , int top , int bot)
  (#%braces
    if
    (#%parens top < 0)
    top
    =
    0
    ;
    if
    (#%parens bot >= numRows)
    bot
    =
    numRows
    -
    1
    ;
    g
    |.|
    setFont
    (#%parens fontPlain)
    ;
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Redrawing: " + top + " to " + bot)
    ;
    for
    (#%parens int i = top ; i <= bot ; i ++)
    (#%braces
      if
      (#%parens DEBUG)
      System
      |.|
      out
      |.|
      println
      (#%parens "Drawing: " + i + ", curRow: " + curRow)
      ;
      drawRow
      (#%parens g , i)
      ;)
    scrollCount
    =
    0
    ;)
  public
  void
  screenRedraw
  (#%parens Graphics g)
  (#%braces screenRedraw (#%parens g , 0 , numRows - 1) ;)
  public
  void
  screenClean
  (#%parens Graphics g)
  (#%braces
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Cleaning screen: " + dirtyTop + " to " + dirtyBottom)
    ;
    if
    (#%parens dirtyTop >= 0 && dirtyBottom >= 0)
    (#%braces
      drawRowCol
      (#%parens g , lastRow , lastCol)
      ;
      screenRedraw
      (#%parens g , dirtyTop , dirtyBottom)
      ;)
    if
    (#%parens lastRow != curRow |\|\|| lastCol != curCol)
    (#%braces
      drawRowCol
      (#%parens g , lastRow , lastCol)
      ;
      drawRowCol
      (#%parens g , curRow , curCol)
      ;)
    dirtyTop
    =
    -
    1
    ;
    dirtyBottom
    =
    -
    1
    ;
    lastRow
    =
    curRow
    ;
    lastCol
    =
    curCol
    ;
    toolkit
    |.|
    sync
    (#%parens)
    ;)
  void
  screenDirty
  (#%parens int top , int bottom)
  (#%braces
    if
    (#%parens dirtyTop < 0 |\|\|| top < dirtyTop)
    dirtyTop
    =
    top
    ;
    if
    (#%parens bottom > dirtyBottom)
    dirtyBottom
    =
    bottom
    ;)
  public
  void
  screenScrollRegion
  (#%parens int top , int bottom , int amount)
  (#%braces
    if
    (#%parens top >= bottom)
    return
    ;
    if
    (#%parens amount < 0)
    (#%braces
      amount
      =
      -
      amount
      ;
      for
      (#%parens int i = top ; i < (#%parens bottom - amount + 1) ; i ++)
      (#%braces
        page
        (#%brackets i)
        =
        page
        (#%brackets i + amount)
        ;
        style
        (#%brackets i)
        =
        style
        (#%brackets i + amount)
        ;)
      for
      (#%parens int i = bottom - amount + 1 ; i < bottom + 1 ; i ++)
      (#%braces
        page
        (#%brackets i)
        =
        new
        char
        (#%brackets numCols)
        ;
        style
        (#%brackets i)
        =
        new
        int
        (#%brackets numCols)
        ;
        for
        (#%parens int j = 0 ; j < numCols ; j ++)
        (#%braces
          page
          (#%brackets i)
          (#%brackets j)
          =
          #\space
          ;
          style
          (#%brackets i)
          (#%brackets j)
          =
          STYLE_PLAIN
          ;))
      screenDirty
      (#%parens top , bottom)
      ;)
    else
    if
    (#%parens amount > 0)
    (#%braces
      for
      (#%parens int i = bottom ; i >= top + amount ; i --)
      (#%braces
        page
        (#%brackets i)
        =
        page
        (#%brackets i - amount)
        ;
        style
        (#%brackets i)
        =
        style
        (#%brackets i - amount)
        ;)
      for
      (#%parens int i = top ; i < top + amount ; i ++)
      (#%braces
        page
        (#%brackets i)
        =
        new
        char
        (#%brackets numCols)
        ;
        style
        (#%brackets i)
        =
        new
        int
        (#%brackets numCols)
        ;
        for
        (#%parens int j = 0 ; j < numCols ; j ++)
        (#%braces
          page
          (#%brackets i)
          (#%brackets j)
          =
          #\space
          ;
          style
          (#%brackets i)
          (#%brackets j)
          =
          STYLE_PLAIN
          ;))
      screenDirty
      (#%parens top , bottom)
      ;))
  public
  void
  screenScroll
  (#%parens int amount)
  (#%braces screenScrollRegion (#%parens regionTop , regionBottom , amount) ;)
  public
  void
  screenClearEOL
  (#%parens)
  (#%braces
    for
    (#%parens int i = curCol ; i <= regionRight ; i ++)
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets i)
      =
      #\space
      ;
      style
      (#%brackets curRow)
      (#%brackets i)
      =
      STYLE_PLAIN
      ;)
    screenDirty
    (#%parens curRow , curRow)
    ;)
  public
  void
  screenClearBOL
  (#%parens)
  (#%braces
    for
    (#%parens int i = regionLeft ; i <= curCol ; i ++)
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets i)
      =
      #\space
      ;
      style
      (#%brackets curRow)
      (#%brackets i)
      =
      STYLE_PLAIN
      ;)
    screenDirty
    (#%parens curRow , curRow)
    ;)
  public
  void
  screenClearLine
  (#%parens)
  (#%braces
    for
    (#%parens int i = regionLeft ; i <= regionRight ; i ++)
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets i)
      =
      #\space
      ;
      style
      (#%brackets curRow)
      (#%brackets i)
      =
      STYLE_PLAIN
      ;)
    screenDirty
    (#%parens curRow , curRow)
    ;)
  public
  void
  screenClearEOD
  (#%parens)
  (#%braces
    int
    left
    =
    curCol
    ;
    for
    (#%parens int j = curRow ; j <= regionBottom ; j ++)
    (#%braces
      for
      (#%parens int i = left ; i <= regionRight ; i ++)
      (#%braces
        page
        (#%brackets j)
        (#%brackets i)
        =
        #\space
        ;
        style
        (#%brackets j)
        (#%brackets i)
        =
        STYLE_PLAIN
        ;)
      left
      =
      regionLeft
      ;)
    screenDirty
    (#%parens curRow , regionBottom)
    ;)
  public
  void
  screenClearBOD
  (#%parens)
  (#%braces
    for
    (#%parens int j = regionTop ; j < curRow ; j ++)
    (#%braces
      for
      (#%parens int i = regionLeft ; i <= regionRight ; i ++)
      (#%braces
        page
        (#%brackets j)
        (#%brackets i)
        =
        #\space
        ;
        style
        (#%brackets j)
        (#%brackets i)
        =
        STYLE_PLAIN
        ;))
    for
    (#%parens int i = regionLeft ; i < curCol ; i ++)
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets i)
      =
      #\space
      ;
      style
      (#%brackets curRow)
      (#%brackets i)
      =
      STYLE_PLAIN
      ;)
    screenDirty
    (#%parens regionTop , curRow)
    ;)
  public
  void
  screenClear
  (#%parens)
  (#%braces
    for
    (#%parens int j = regionTop ; j <= regionBottom ; j ++)
    (#%braces
      for
      (#%parens int i = regionLeft ; i <= regionRight ; i ++)
      (#%braces
        page
        (#%brackets j)
        (#%brackets i)
        =
        #\space
        ;
        style
        (#%brackets j)
        (#%brackets i)
        =
        STYLE_PLAIN
        ;))
    screenDirty
    (#%parens regionTop , regionBottom)
    ;)
  public
  synchronized
  void
  write
  (#%parens char (#%brackets) d , int off , int len , int flags)
  (#%braces
    if
    (#%parens DEBUG)
    (#%braces
      if
      (#%parens d == null)
      d
      =
      new
      char
      (#%brackets 0)
      ;
      System
      |.|
      out
      |.|
      println
      (#%parens "Write: " + new String (#%parens d , off , len))
      ;)
    if
    (#%parens len == 1)
    (#%braces write (#%parens d (#%brackets off) , flags) ;)
    else
    if
    (#%parens len > 1)
    (#%braces
      while
      (#%parens len > 0)
      (#%braces
        int
        last_row
        =
        curRow
        ;
        boolean
        do_redraw
        ;
        if
        (#%parens (#%parens flags & OUTF_RAW) != 0)
        do_redraw
        =
        put_char
        (#%parens d (#%brackets off))
        ;
        else
        do_redraw
        =
        put_std_char
        (#%parens d (#%brackets off))
        ;
        if
        (#%parens do_redraw)
        (#%braces
          if
          (#%parens last_row < curRow)
          screenDirty
          (#%parens last_row , curRow)
          ;
          else
          screenDirty
          (#%parens curRow , last_row)
          ;)
        off
        ++
        ;
        len
        --
        ;)
      if
      (#%parens (#%parens flags & OUTF_PARTIAL) == 0)
      screenClean
      (#%parens getGraphics (#%parens))
      ;)
    else
    if
    (#%parens (#%parens flags & OUTF_PARTIAL) == 0)
    screenClean
    (#%parens getGraphics (#%parens))
    ;)
  public
  void
  write
  (#%parens String str , int flags)
  (#%braces
    write
    (#%parens
      str
      |.|
      toCharArray
      (#%parens)
      ,
      0
      ,
      str
      |.|
      length
      (#%parens)
      ,
      flags)
    ;)
  public
  synchronized
  void
  write
  (#%parens char c , int flags)
  (#%braces
    int
    last_col
    =
    curCol
    ,
    last_row
    =
    curRow
    ;
    boolean
    do_redraw
    ;
    if
    (#%parens (#%parens flags & OUTF_RAW) != 0)
    do_redraw
    =
    put_char
    (#%parens c)
    ;
    else
    do_redraw
    =
    put_std_char
    (#%parens c)
    ;
    if
    (#%parens do_redraw)
    (#%braces
      if
      (#%parens last_row < curRow)
      screenDirty
      (#%parens last_row , curRow)
      ;
      else
      screenDirty
      (#%parens curRow , last_row)
      ;)
    if
    (#%parens (#%parens flags & OUTF_PARTIAL) == 0)
    screenClean
    (#%parens getGraphics (#%parens))
    ;)
  boolean
  put_char
  (#%parens char c)
  (#%braces
    if
    (#%parens curCol >= regionRight && ! overChar)
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets curCol)
      =
      c
      ;
      style
      (#%brackets curRow)
      (#%brackets curCol)
      =
      curStyle
      ;
      curCol
      =
      regionRight
      ;
      overChar
      =
      true
      ;)
    else
    if
    (#%parens curCol >= regionRight && overChar)
    (#%braces
      overChar
      =
      false
      ;
      screenScroll
      (#%parens - 1)
      ;
      curRow
      =
      regionBottom
      ;
      curCol
      =
      1
      ;
      page
      (#%brackets curRow)
      (#%brackets 0)
      =
      c
      ;
      style
      (#%brackets curRow)
      (#%brackets 0)
      =
      curStyle
      ;
      screenDirty
      (#%parens regionBottom - 1 , regionBottom)
      ;)
    else
    (#%braces
      page
      (#%brackets curRow)
      (#%brackets curCol)
      =
      c
      ;
      style
      (#%brackets curRow)
      (#%brackets curCol)
      =
      curStyle
      ;
      curCol
      ++
      ;
      overChar
      =
      false
      ;)
    return
    true
    ;)
  static
  final
  char
  CTRL_A
  =
  (#%parens char)
  1
  ;
  static
  final
  char
  CTRL_B
  =
  (#%parens char)
  2
  ;
  static
  final
  char
  CTRL_C
  =
  (#%parens char)
  3
  ;
  static
  final
  char
  CTRL_D
  =
  (#%parens char)
  4
  ;
  static
  final
  char
  CTRL_E
  =
  (#%parens char)
  5
  ;
  static
  final
  char
  CTRL_F
  =
  (#%parens char)
  6
  ;
  static
  final
  char
  CTRL_G
  =
  (#%parens char)
  7
  ;
  static
  final
  char
  CTRL_H
  =
  (#%parens char)
  8
  ;
  static
  final
  char
  CTRL_I
  =
  (#%parens char)
  9
  ;
  static
  final
  char
  CTRL_J
  =
  (#%parens char)
  10
  ;
  static
  final
  char
  CTRL_K
  =
  (#%parens char)
  11
  ;
  static
  final
  char
  CTRL_L
  =
  (#%parens char)
  12
  ;
  static
  final
  char
  CTRL_M
  =
  (#%parens char)
  13
  ;
  static
  final
  char
  CTRL_N
  =
  (#%parens char)
  14
  ;
  static
  final
  char
  CTRL_O
  =
  (#%parens char)
  15
  ;
  static
  final
  char
  CTRL_P
  =
  (#%parens char)
  16
  ;
  static
  final
  char
  CTRL_Q
  =
  (#%parens char)
  17
  ;
  static
  final
  char
  CTRL_R
  =
  (#%parens char)
  18
  ;
  static
  final
  char
  CTRL_S
  =
  (#%parens char)
  19
  ;
  static
  final
  char
  CTRL_T
  =
  (#%parens char)
  20
  ;
  static
  final
  char
  CTRL_U
  =
  (#%parens char)
  21
  ;
  static
  final
  char
  CTRL_V
  =
  (#%parens char)
  22
  ;
  static
  final
  char
  CTRL_W
  =
  (#%parens char)
  23
  ;
  static
  final
  char
  CTRL_X
  =
  (#%parens char)
  24
  ;
  static
  final
  char
  CTRL_Y
  =
  (#%parens char)
  25
  ;
  static
  final
  char
  CTRL_Z
  =
  (#%parens char)
  26
  ;
  boolean
  put_std_char
  (#%parens char c)
  (#%braces
    boolean
    do_redraw
    =
    false
    ;
    switch
    (#%parens c)
    (#%braces
      case
      0
      :
      break
      ;
      case
      CTRL_G
      :
      break
      ;
      case
      CTRL_I
      :
      break
      ;
      case
      #\newline
      :
      if
      (#%parens curRow >= regionBottom)
      (#%braces
        screenScroll
        (#%parens - 1)
        ;
        curRow
        =
        regionBottom
        ;
        screenDirty
        (#%parens regionBottom , regionBottom)
        ;)
      else
      (#%braces curRow ++ ;)
      overChar
      =
      false
      ;
      curCol
      =
      regionLeft
      ;
      break
      ;
      case
      #\return
      :
      break
      ;
      case
      #\page
      :
      screenInit
      (#%parens)
      ;
      break
      ;
      case
      CTRL_H
      :
      case
      0
      x7f
      :
      if
      (#%parens DEBUG)
      System
      |.|
      out
      |.|
      println
      (#%parens "Delete pressed:" + curCol + "," + regionRight)
      ;
      if
      (#%parens curCol > 0)
      (#%braces
        for
        (#%parens int i = curCol - 1 ; (#%parens i < regionRight) ; i ++)
        (#%braces
          page
          (#%brackets curRow)
          (#%brackets i)
          =
          page
          (#%brackets curRow)
          (#%brackets i + 1)
          ;
          style
          (#%brackets curRow)
          (#%brackets i)
          =
          style
          (#%brackets curRow)
          (#%brackets i + 1)
          ;)
        page
        (#%brackets curRow)
        (#%brackets regionRight)
        =
        #\space
        ;
        style
        (#%brackets curRow)
        (#%brackets regionRight)
        =
        STYLE_PLAIN
        ;
        screenDirty
        (#%parens curRow , curRow)
        ;
        curCol
        =
        curCol
        -
        1
        ;
        do_redraw
        =
        true
        ;)
      else
      (#%braces do_redraw = false ;)
      break
      ;
      default
      :
      do_redraw
      =
      put_char
      (#%parens c)
      ;
      break
      ;)
    return
    do_redraw
    ;)
  public
  synchronized
  boolean
  keyDown
  (#%parens Event e , int key)
  (#%braces
    if
    (#%parens DEBUG)
    System
    |.|
    out
    |.|
    println
    (#%parens "Key event: " + key)
    ;
    if
    (#%parens computeThread != null)
    (#%braces
      if
      (#%parens computeThread |.| isAlive (#%parens))
      (#%braces
        computeThread
        |.|
        stop
        (#%parens)
        ;
        write
        (#%parens "**interrupted**
" , 0)
        ;
        computeThread
        =
        null
        ;
        return
        true
        ;)
      computeThread
      =
      null
      ;)
    if
    (#%parens key == #\newline)
    (#%braces
      String
      s
      =
      new
      String
      (#%parens)
      ;
      for
      (#%parens int i = 0 ; i < curCol ; i ++)
      (#%braces s += page (#%brackets curRow) (#%brackets i) ;)
      write
      (#%parens (#%parens char) key , 0)
      ;
      computeThread
      =
      HalServer
      |.|
      processline
      (#%parens s)
      ;)
    else
    (#%braces write (#%parens (#%parens char) key , 0) ;)
    return
    true
    ;)
  public
  boolean
  mouseDown
  (#%parens Event evt , int x , int y)
  (#%braces requestFocus (#%parens) ; return true ;)
  boolean
  have_focus
  =
  false
  ;
  void
  draw_border
  (#%parens Graphics g)
  (#%braces
    Dimension
    d
    =
    size
    (#%parens)
    ;
    if
    (#%parens have_focus)
    (#%braces g |.| setColor (#%parens getForeground (#%parens)) ;)
    else
    (#%braces g |.| setColor (#%parens getBackground (#%parens)) ;)
    g
    |.|
    drawRect
    (#%parens 0 , 0 , d |.| width , d |.| height)
    ;
    g
    |.|
    drawRect
    (#%parens 1 , 1 , d |.| width - 2 , d |.| height - 2)
    ;
    g
    |.|
    setColor
    (#%parens Color |.| white)
    ;
    g
    |.|
    draw3DRect
    (#%parens 2 , 2 , d |.| width - 4 , d |.| height - 4 , true)
    ;
    g
    |.|
    draw3DRect
    (#%parens 3 , 3 , d |.| width - 6 , d |.| height - 6 , true)
    ;)
  public
  void
  paint
  (#%parens Graphics g)
  (#%braces draw_border (#%parens g) ; screenRedraw (#%parens g) ;)
  public
  boolean
  gotFocus
  (#%parens Event evt , Object what)
  (#%braces
    Graphics
    g
    =
    getGraphics
    (#%parens)
    ;
    have_focus
    =
    true
    ;
    if
    (#%parens g != null)
    draw_border
    (#%parens g)
    ;
    return
    true
    ;)
  public
  boolean
  lostFocus
  (#%parens Event evt , Object what)
  (#%braces
    Graphics
    g
    =
    getGraphics
    (#%parens)
    ;
    have_focus
    =
    false
    ;
    if
    (#%parens g != null)
    draw_border
    (#%parens g)
    ;
    return
    true
    ;)
  public
  final
  synchronized
  void
  update
  (#%parens Graphics g)
  (#%braces paint (#%parens g) ;))
#!eof