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