setscreen ("offscreenonly,nobuttonbar,graphics:480;480,position:500;500")
cls
module ASCII
export all
const maxchar := 255
var letterDensity : array 1 .. maxchar of real
fcn GetLetterDensity (c : char) : real
cls
var total : real := 0
color (7)
colorback (0)
put c
View.Update
for x : 1 .. 8
for y : maxy - 12 .. maxy
if (whatdotcolor (x, y) = 7) then
total += 1
end if
end for
end for
result total / (8 * 12)
end GetLetterDensity
var hold : int
fcn GetRow (y : int) : int
hold := (y div 12)
if (hold >= 1 and hold <= maxrow) then
result hold
else
result 1
end if
end GetRow
fcn GetCol (x : int) : int
hold := (x div 8)
if (hold >= 1 and hold <= maxcol) then
result hold
else
result 1
end if
end GetCol
proc Init
for i : 1 .. maxchar
letterDensity (i) := GetLetterDensity (chr (i))
end for
end Init
proc Swap (var x : int, var y : int)
hold := x
x := y
y := hold
end Swap
fcn InWindow (x : int, y : int) : boolean
result (x >= 0 and x <= maxx) and (y <= maxx and y >= 12)
end InWindow
var font : int := Font.New ("arial:10:bold")
proc DrawLine (x, y, x2, y2 : int, c : char)
var steep : boolean := true
var sx, sy, dx, dy : int
var e : real
var x0, y0, x1, y1 : int
var hold : int
x0 := x
y0 := y
x1 := x2
y1 := y2
dx := abs (x1 - x0)
if ((x1 - x0) > 0) then
sx := 1
else
sx := -1
end if
if ((y1 - y0) > 0) then
sy := 1
else
sy := -1
end if
dy := abs (y1 - y0)
if (dy > dx) then
steep := false
Swap (x0, y0)
Swap (dx, dy)
Swap (sx, sy)
end if
e := round (dy shl 1) - dx
for i : 0 .. dx by 10
if (steep) then
%locate (GetRow (maxy - y0), GetCol (x0))
% put c ..
Font.Draw (c, x0, y0, font, 7)
else
%locate (GetRow (maxy - x0), GetCol (y0))
% put c
Font.Draw (c, y0, x0, font, 7)
end if
loop
if (e >= 0) then
y0 += sy * 10
e -= (dx shl 1) * 10
else
exit
end if
end loop
x0 += sx * 10
e += (dy shl 1) * 10
end for
end DrawLine
end ASCII
ASCII.Init
var x, y, z : int
loop
mousewhere (x, y, z)
ASCII.DrawLine (x - 50, y - 50, x - 50, y + 50, '#')
ASCII.DrawLine (x + 50, y - 50, x + 50, y + 50, '#')
ASCII.DrawLine (x - 50, y - 50, x + 50, y - 50, '#')
ASCII.DrawLine (x - 50, y + 50, x + 50, y + 50, '#')
ASCII.DrawLine (x + 50, y + 50, maxx, maxy, '*')
ASCII.DrawLine (x - 50, y - 50, 0, 0, '$')
ASCII.DrawLine (x + 50, y - 50, maxx, 0, '@')
ASCII.DrawLine (x - 50, y + 50, 0, maxy, '!')
View.Update
cls
end loop |