10 CLEAR:SYMBOL AFTER 124:st=HIMEM+1
20 BORDER 1
30 A=1:S=124:C=124
40 DIM G(8,8),H(8,8)
50 INK 0,0:INK 2,10
60 MODE 1
70 WINDOW#1,3,10,2,9
80 WINDOW#2,2,2,2,9
90 WINDOW#3,3,10,1,1
100 WINDOW#4,14,32,1,1
110 ORIGIN 225,304,225,238,304,319
120 PAPER 2:PEN 1:CLS
130 PEN#3,3
140 RESTORE:FOR N=11 TO 25
150 READ I,I$
160 LOCATE I,N
170 PRINT I$
180 NEXT
190 DATA 1,"ENTER : Store char",5,"N : New char"
200 DATA 3,"1-8 : Dot on/off",3,"9/0 : Cursor up/dn",5,"C : Clear grid",5,"E : Edit char",5,"V : Vert mirror",5,"H : Horiz mirror"
210 DATA 5,"R : Rotate left",5,"T : Rotate right",5,"I : Inverse",5,"Z : Nos. 124-189",5,"X : Nos. 190-255",3,"S/L : Save/load",5,"* : Reset chars"
220 GOSUB 1300
230 PAPER#1,0:CLS#1
240 PAPER#2,2:CLS#2
250 PAPER#3,1:CLS#3
260 PAPER#4,2:CLS#4
270 PRINT#3,"12345678";
280 PEN#1,3
290 FOR N=1 TO 8
300 LOCATE#1,1,N
310 PRINT#1,"########";
320 NEXT
330 PEN#2,1
340 LOCATE#2,1,A
350 PRINT#2,">";
360 LOCATE 13,5:PRINT C
370 FOR GY=1 TO 8:FOR GX=1 TO 8:G(GX,GY)=0
380 NEXT:MOVE 0,GY*2-2:DRAWR 14,0,0:NEXT
390 A$=INKEY$:IF A$="" GOTO 390
400 IF A$>"0"AND A$<"9"THEN GOTO 600
410 IF INKEY(18)=0 THEN GOSUB 1170:GOSUB 1300
420 IF INKEY(62)=0 THEN GOTO 270
430 IF INKEY(46)=0 THEN GOSUB 640
440 IF INKEY(58)=0 THEN GOSUB 680
450 IF INKEY(55)=0 THEN GOSUB 800
460 IF INKEY(44)=0 THEN GOSUB 880
470 IF INKEY(50)=0 THEN GOSUB 960
480 IF INKEY(51)=0 THEN GOSUB 1040
490 IF INKEY(35)=0 THEN GOSUB 1120
500 IF INKEY(29)=32 THEN GOSUB 1250:IF F=1 THEN RUN
510 IF INKEY(71)=0 THEN S=124:GOSUB 1300
520 IF INKEY(63)=0 THEN S=190:GOSUB 1300
530 IF INKEY(60)=0 THEN GOSUB 1380:GOTO 60
540 IF INKEY(36)=0 THEN GOSUB 1420:GOTO 60
550 LOCATE#2,1,A:PRINT#2," ";
560 IF A$="9"AND A>1 THEN A=A-1
570 IF A$="0"AND A<8 THEN A=A+1
580 LOCATE#2,1,A:PRINT#2,">";
590 GOTO 390
600 V=VAL(A$)
610 IF G(A,V)=0 THEN G(A,V)=1:PEN#1,1:LOCATE#1,V,A:PRINT#1,"#";:PLOT V*2-2,16-A*2,1:GOTO 630
620 G(A,V)=0:PEN#1,3:LOCATE#1,V,A:PRINT#1,"#";:PLOT V*2-2,16-A*2,0
630 GOTO 390
640 INPUT#4,"Character no.";C
650 IF C<124 OR C>255 THEN GOTO 640
660 CLS#4:LOCATE 13,5:PRINT C
670 RETURN
680 INPUT#4,"Character no.";D
690 IF D<124 OR D>255 THEN GOTO 680
700 CLS#4
710 PLOT 0,14,1
720 TAG:PRINT CHR$(D)
730 TAGOFF
740 FOR Y=1 TO 8:FOR X=1 TO 8
750 IF TEST(X*2-2,16-Y*2)=1 THEN P=1 ELSE P=3
760 PEN#1,P:LOCATE#1,X,Y:PRINT#1,"#";
770 G(Y,X)=P+3*(P=3)
780 NEXT:NEXT
790 RETURN
800 FOR GY=1 TO 8:FOR GX=1 TO 8
810 H(GY,GX)=G(GY,GX):NEXT:NEXT
820 FOR GY=1 TO 8:FOR GX=1 TO 8
830 G(GY,GX)=H(GY,9-GX)
840 IF G(GY,GX)=1 THEN P=1 ELSE P=3
850 GOSUB 1460
860 NEXT:NEXT
870 RETURN
880 FOR GY=1 TO 8:FOR GX=1 TO 8
890 H(GY,GX)=G(GY,GX):NEXT:NEXT
900 FOR GY=1 TO 8:FOR GX=1 TO 8
910 G(GY,GX)=H(9-GY,GX)
920 IF G(GY,GX)=1 THEN P=1 ELSE P=3
930 GOSUB 1460
940 NEXT:NEXT
950 RETURN
960 FOR GY=1 TO 8:FOR GX=1 TO 8
970 H(GY,GX)=G(GY,GX):NEXT:NEXT
980 FOR GY=1 TO 8:FOR GX=1 TO 8
990 G(GY,GX)=H(GX,9-GY)
1000 IF G(GY,GX)=1 THEN P=1 ELSE P=3
1010 GOSUB 1460
1020 NEXT:NEXT
1030 RETURN
1040 FOR GY=1 TO 8:FOR GX=1 TO 8
1050 H(GY,GX)=G(GY,GX):NEXT:NEXT
1060 FOR GY=1 TO 8:FOR GX=1 TO 8
1070 G(GY,GX)=H(9-GX,GY)
1080 IF G(GY,GX)=1 THEN P=1 ELSE P=3
1090 GOSUB 1460
1100 NEXT:NEXT
1110 RETURN
1120 FOR GY=1 TO 8:FOR GX=1 TO 8
1130 IF G(GY,GX)=1 THEN G(GY,GX)=0:P=3:GOSUB 1460:GOTO 1150
1140 G(GY,GX)=1:P=1:GOSUB 1460
1150 NEXT:NEXT
1160 RETURN
1170 FOR GY=1 TO 8
1180 L=0
1190 FOR GX=1 TO 8
1200 IF G(GY,GX)=0 THEN GOTO 1220
1210 L=L+2^(8-GX)
1220 NEXT:L(GY)=L:NEXT
1230 SYMBOL C,L(1),L(2),L(3),L(4),L(5),L(6),L(7),L(8)
1240 RETURN
1250 PRINT#4,"Are you sure (Y/N)"
1260 A$=INKEY$:IF A$="" THEN GOTO 1260
1270 IF INKEY(43)=0 THEN F=1 ELSE F=0
1280 CLS#4
1290 RETURN
1300 S1=S
1310 FOR M=0 TO 2
1320 FOR N=3 TO 24
1330 LOCATE 22+M*6,N
1340 PRINT S1;CHR$(S1)
1350 S1=S1+1
1360 NEXT:NEXT
1370 RETURN
1380 CLS
1390 INPUT "FILE NAME";F$
1400 SAVE F$,B,st,1056
1410 RETURN
1420 CLS
1430 INPUT "FILE NAME";F$
1440 LOAD F$,st
1450 RETURN
1460 PEN#1,P
1470 LOCATE#1,GX,GY
1480 PRINT#1,"#";:PLOT GX*2-2,16-GY*2,P+3*(P=3)
1490 RETURN