' ****** START INCLUDE PUTSTRING(x%, y%, s$) ******
SUB PUTSTRING(x%, y%, s$)
  FOR c = 1 TO LEN(s$)
    sc$ = MID$(s$, c, 1)
    this$ = _GETCHR$(ASC(sc$))
    FOR yi = 0 TO 7
      FOR xi = 0 TO 7
        x_pset% = x% + xi + (c-1)*8 : y_pset% = y% + yi
        IF MID$(this$, (xi + yi*8) + 1, 1) = "X" AND BETWEEN(x_pset%, 0, _WIDTH-1) AND BETWEEN(y_pset%, 0, _HEIGHT-1)  THEN PSET (x_pset%, y_pset%)
      NEXT xi
    NEXT yi
  NEXT c
END SUB
'  ****** END INCLUDE PUTSTRING(x%, y%, s$) ******

d = 1

again:

_alert("shifting by increments of " + d)

_ALERT("whole screen, horizontal minus")

GOSUB resetimage

for i = 1 to 20
scroll -d,0,TRUE
_delay 1.5
next i

_ALERT("middle screen, horizontal plus")

GOSUB resetimage

for i = 1 to 20
scroll (4,4)-(24,24),+d,0,TRUE
_delay 1.5
next i

_ALERT("whole screen, vertical minus")

GOSUB resetimage

for i = 1 to 20
scroll 0,-d,TRUE
_delay 1.5
next i

_ALERT("middle screen, vertical plus")

GOSUB resetimage

for i = 1 to 20
scroll (4,4)-(24,24),0,+d,TRUE
_delay 1.5
next i

_ALERT("whole screen, diagonal minus")

GOSUB resetimage

for i = 1 to 20
scroll -d,-d,TRUE
_delay 1.5
next i

_ALERT("middle screen, diagonal plus")

GOSUB resetimage

for i = 1 to 20
scroll (4,4)-(24,24),+d,+d,TRUE
_delay 1.5
next i

d = d + 1
goto again:


resetimage:
screen _newimage (31,31,14)
for i = 0 to 31 step 2
line (i+1, 0) - (i+1, 30), int(i/2) + 1
next i
for i = 0 to 31 step 2
line (0, i+1) - (30, i+1), int(i/2) + 1
next i
putstring(7,10, "Hi")
_delay 1
RETURN