Test output for honu [ok]

Testing time: 0s

/root/salmonella-run-publish/chicken/bin/csi -script run.scm < /dev/null
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\n" |,| 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**\n" |,| 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
      127
      :
      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**\n" |,| 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