BEGIN FILE window;
INT maxx = 320, maxy = 200, min = 16;
PROC range = (INT a, b) INT:
( INT i = ROUND (random * (b-a+1)); i = 0 | b | i+a-1 );
INT bsr = range (min, maxx), bsl = range (min, maxy);
INT rbr := range (min, maxx), rbl := range (min, maxy), pos;
OP XSCALE = (INT i) REAL: i/maxx, YSCALE = (INT i) REAL: i/maxy;
VOID (draw device (window, "X", whole(maxx,0)+"x"+whole(maxy,0)));
VOID (open (window, "Red ball", stand draw channel));
WHILE draw background colour name (window, "green");
draw erase (window);
draw move (window, XSCALE bsr, YSCALE bsl);
draw colour name (window, "black");
draw rect (window, XSCALE (bsr-min), YSCALE (bsl-min));
draw move (window, XSCALE rbr, YSCALE rbl);
draw colour name (window, "red");
draw rect (window, XSCALE (rbr-min), YSCALE (rbl-min));
draw point (window, 0, 0); # sic #
# either a bug or something silly, but last object
isn't drawn until another one is .... #
WHILE CHAR c = readchar;
NOT char in string (c, pos, "exds")
DO SKIP OD;
bsr /= rbr OR bsl /= rbl
DO ( pos | (rbl < maxy | rbl +:= 1), (rbl > min | rbl -:= 1),
(rbr < maxx | rbr +:= 1), (rbr > min | rbr -:= 1))
OD
END