Test output for honu [ok]
Testing time: 0s
/home/mario/local/chicken-4.8.0.3/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