CLS : SCREEN 7 DIM p%(17152), p2%(150), p3%(150), rv%(15, 15) FOR a = 0 TO 127 GET (0, 0)-(15, 15), p%(a * 134) NEXT LINE (0, 0)-(15, 15), 3, BF: GET (0, 0)-(15, 15), p3% CLS GOSUB dispblks LINE (-1, -1)-(16, 16), 15, B GOSUB grid DO a$ = INPUT$(1) PSET (x, y), oc: LINE (x * 3 + 20, y * 3)-(x * 3 + 21, y * 3 + 1), oc, BF IF a$ = "c" THEN GET (0, 0)-(15, 15), p2%: GOSUB file IF a$ = "i" AND y > 0 THEN y = y - 1 IF a$ = "m" AND y < 15 THEN y = y + 1 IF a$ = "j" AND x > 0 THEN x = x - 1 IF a$ = "k" AND x < 15 THEN x = x + 1 IF a$ = "r" THEN GOSUB reverse IF a$ = "b" THEN LOCATE 20: INPUT "Back G color"; bc%: PALETTE: PALETTE 0, bc%: PALETTE 6, 0: GOSUB dispblks IF a$ = "s" THEN GOSUB save IF a$ = "l" THEN GOSUB load IF a$ = "d" THEN PSET (x, y), c IF a$ = " " THEN cc = cc XOR 1 IF a$ = "," THEN c = c - 1 IF a$ = "." THEN c = c + 1 IF a$ = "q" THEN CLOSE #1: END IF a$ = "a" THEN orit% = orit% XOR 1 IF a$ = "1" THEN GOSUB shiftr IF orit% = 1 THEN PSET (x, y), c OR POINT(x, y) IF c < 0 THEN c = 15 IF c > 15 THEN c = 0 IF cc = 1 THEN oc = c ELSE oc = POINT(x, y) PSET (x, y), 15: LINE (x * 3 + 20, y * 3)-(x * 3 + 21, y * 3 + 1), 15, BF LINE (300, 0)-(319, 20), c, BF LOOP grid: FOR x = 0 TO 16 LINE (x * 3 + 19, 0)-(x * 3 + 19, 48), 8 LINE (19, x * 3 - 1)-(68, x * 3 - 1), 8 NEXT FOR x = 0 TO 15 FOR y = 0 TO 15 LINE (x * 3 + 20, y * 3)-(x * 3 + 21, y * 3 + 1), POINT(x, y), BF NEXT: NEXT x = 0 RETURN file: PUT (cx * 16, cy * 16 + 50), p3%, XOR DO a$ = INPUT$(1) PUT (cx * 16, cy * 16 + 50), p3%, XOR IF a$ = "i" AND cy > 0 THEN cy = cy - 1 IF a$ = "m" AND cy < 6 THEN cy = cy + 1 IF a$ = "j" AND cx > 0 THEN cx = cx - 1 IF a$ = "k" AND cx < 19 THEN cx = cx + 1 IF a$ = "c" AND cy * 20 + cx < 128 THEN GET (cx * 16, cy * 16 + 50)-(cx * 16 + 15, cy * 16 + 65), p2%: PUT (0, 0), p2%, PSET: GOSUB grid: RETURN IF a$ = " " AND cy * 20 + cx < 128 THEN PUT (cx * 16, cy * 16 + 50), p2%, PSET: GET (0, 0)-(15, 15), p%((cy * 20 + cx) * 134) PUT (cx * 16, cy * 16 + 50), p3%, XOR LOOP dispblks: pln% = 0 FOR y = 0 TO 6 FOR x = 0 TO 19 IF pln% > 127 THEN RETURN PUT (x * 16, y * 16 + 50), p%(pln% * 134), PSET pln% = pln% + 1 NEXT: NEXT RETURN save: LOCATE 20: INPUT "file"; f$ DEF SEG = VARSEG(p%(0)) BSAVE f$, VARPTR(p%(0)), VARPTR(p%(0)) + 34304 DEF SEG GOSUB dispblks RETURN load: LOCATE 20: INPUT "file"; f$ DEF SEG = VARSEG(p%(0)) BLOAD f$, VARPTR(p%(0)) DEF SEG GOSUB dispblks RETURN reverse: FOR x = 0 TO 15: FOR y = 0 TO 15 rv%(x, y) = POINT(x, y) NEXT: NEXT FOR x = 0 TO 15: FOR y = 0 TO 15 PSET (x, y), rv%(15 - x, y) NEXT: NEXT GOSUB grid RETURN shiftr: FOR x = 0 TO 15: FOR y = 0 TO 15 rv%(x, y) = POINT(x, y) NEXT: NEXT FOR x = 1 TO 15: FOR y = 1 TO 15 PSET (x, y), rv%(x - 1, y) NEXT: NEXT FOR y = 1 TO 15 PSET (0, y), rv%(15, y) NEXT RETURN