A problem with DB's line command is the jagged edges. I wrote a function which used Bresenham's algorithm to draw a line so I could write it to a memblock, but this algorithm also had the problem of jagged edges. I came across Xiaolin Wu's algorithm, which uses antialiasing. Below is a picture comparing the 3 different lines.
REM ********************************
REM * Title: Anti-aliased lines *
REM * Author: Phaelax *
REM * Date: Nov 22, 2009 *
REM ********************************
hide mouse
sync on
DO
cls
mx = mousex()
my = mousey()
wuline(320,240,mx,my)
ink rgb(255,255,255),0
ax = 320 - (mx - 320)
ay = 240 - (my - 240)
bline(320,240,ax,ay)
ax = 320 + (my - 240)
ay = 240 - (mx - 320)
line 320,240,ax,ay
set cursor 0,0
print mousex()
print mousey()
sync
loop
REM Xiaolin Wu's line algorithm
function wuline(x1,y1,x2,y2)
local dx as float
local dy as float
local xend as float
local yend as float
local xgap as float
local ygap as float
local xpxl1 as float
local ypxl1 as float
local xpxl2 as float
local ypxl2 as float
local intery as float
local interx as float
dx = x2-x1
dy = y2-y1
if abs(dx) > abs(dy)
rem handle horizontal lines
if x2 < x1
ax = x1
x1 = x2
x2 = ax
ay = y1
y1 = y2
y2 = ay
endif
gradient# = dy / dx
rem handle first endpoint
xend = ceil(x1)
yend = y1 + gradient# * (xend-x1)
xgap = 1.0 - fract#(x1 + 0.5)
xpxl1 = xend : `used in main loop
ypxl1 = int(yend)
f# = 1-fract#(yend)*xgap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl1, ypxl1
rem brightness: fract#(yend)*xgap
f# = fract#(yend)*xgap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl1, ypxl1+1
intery = yend + gradient# : `first y-intersection for main loop
rem handle second endpoint
xend = ceil(x2)
yend = y2 + gradient# * (xend-x2)
xgap = 1.0 - fract#(x2 + 0.5)
xpxl2 = xend : `used in main loop
ypxl2 = int(yend)
f# = 1-fract#(yend)*xgap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl2, ypxl2
f# = fract#(yend)*xgap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl2, ypxl2+1
rem main loop
a = xpxl1+1
b = xpxl2-1
for x = a to b
f# = 1-fract#(intery) : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot x, intery
f# = fract#(intery) : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot x, intery+1
intery = intery + gradient#
next x
else
rem handle vertical lines
if y2 < y1
ax = x1
x1 = x2
x2 = ax
ay = y1
y1 = y2
y2 = ay
endif
gradient# = dx / dy
ink rgb(255,0,0),0
rem handle first endpoint
yend = ceil(y1)
xend = x1 + gradient# * (yend-y1)
ygap = 1.0 - fract#(y1 + 0.5)
xpxl1 = int(xend)
ypxl1 = yend
f# = 1-fract#(xend)*ygap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl1, ypxl1
f# = fract#(xend)*ygap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl1, ypxl1+1
interx = xend + gradient# : `first y-intersection for main loop
rem handle second endpoint
yend = ceil(y2)
xend = x2 + gradient# * (yend-y2)
ygap = fract#(y2 + 0.5)
xpxl2 = int(xend)
ypxl2 = yend
f# = 1-fract#(xend)*ygap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl2, ypxl2
f# = fract#(xend)*ygap : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot xpxl2, ypxl2+1
rem main loop
a = ypxl1+1
b = ypxl2-1
for y = a to b
f# = 1-fract#(interx) : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot interx, y
f# = fract#(interx) : `brightness
c = 255*f#
ink rgb(c,c,c),0
dot interx+1, y
interx = interx + gradient#
next y
endif
endfunction
function fract#(x as float)
a# = x - int(x)
endfunction a#
REM draws a line
function bline(x1,y1,x2,y2)
dx = x2-x1
dy = y2-y1
dot x1, y1
if abs(dx) > abs(dy)
m# = (0.0 + dy)/dx
b# = y1 - m#*x1
if dx < 0
dx = -1
else
dx = 1
endif
while x1 <> x2
x1 = x1 + dx
dot x1, m#*x1+b#
endwhile
else
if dy <> 0
m# = (0.0 + dx)/dy
b# = x1 - m#*y1
if dy < 0
dy = -1
else
dy = 1
endif
while y1 <> y2
y1 = y1 + dy
dot m#*y1+b#, y1
endwhile
endif
endif
endfunction

> SELECT * FROM users WHERE clue > 0
> 0 rows returned