10 *TV255 20 MODE2 30 VDU23,1,0;0;0;0; 40 PROCSI 50 DIM C(8,8),B(8),V(8),R(8,8) 60 COLOUR3:PROCROMREAD(224):PROCGRID 70 PROCCALCULATE(224) 80 x=32:y=32:GCOL3,5 90 X=1:Y=1 100 REPEAT:PROCCURSOR:PROCCURSOR 110 IF INKEY-86 PROCCHANGE 120 IF INKEY-74 PROCCALCULATE(0) 130 IF INKEY-38 PROCINVERT 140 IF INKEY-83 PROCERASE 150 IF INKEY-54 PROCMIRROR 160 IF INKEY-102 PROCMIRROR2 170 IF INKEY-52 PROCROTATE 180 IF INKEY-17 CALL !-4 190 IF INKEY-82 THEN GOTO 1790 200 IF INKEY-72 THEN GOTO 1630 210 UNTIL TRUE=FALSE 220 DEFPROCROMREAD(NUM):LOCAL x,y,i,d 230 IFNUM<>0THEN c1=NUM:GOTO320 240 VDU23,1,1;0;0;0;:*FX21,0 250 VDU31,0,11:PRINTSPC(20); 260 IFNUM<>0THEN c1=NUM:GOTO320 270 SOUND1,-8,200,1 280 VDU31,0,11:PRINT"Read chr$ no. " 290 VDU31,13,11:INPUT c1 300 IF c1<32 OR c1>255 GOTO 250 310 VDU23,1,0;0;0;0; 320 ?&0B00=c1:A%=10:X%=0:Y%=11 330 CALL &FFF1:FOR i=1 TO 8 340 V(i)=?(&0B00+i):NEXT 350 FOR i=1 TO 8:B(i)=2^(i-1):NEXT 360 FOR x=1 TO 8:d=V(x):FOR y=1 TO 8 370 IF d>=B(9-y) C(y,x)=-1:d=d-B(9-y) ELSE C(y,x)=0 380 NEXT:NEXT:ENDPROC 390 DEFPROCGRID:LOCAL x,y,i 400 FOR i=0 TO 10:VDU31,0,i 410 PRINT" ";:NEXT 420 COLOUR6:PRINTTAB(10,0);"Definer" 430 COLOUR3 440 GCOL0,7:FOR i=1 TO 9 450 MOVE32*i,1024-32 460 DRAW32*i,1024-(32*9):NEXT i 470 FOR i=1 TO 9:MOVE32,1024-(32*i) 480 DRAW32*9,1024-(32*i):NEXT:GCOL3,1 490 FOR x=1 TO 8:FOR y=1 TO 8 500 IF C(x,y) PROCB(0,x*32,y*32) 510 NEXT:NEXT 520 GCOL0,5:MOVE700,900:DRAW900,900 530 DRAW900,800:DRAW700,800 540 DRAW700,900:MOVE100,400 550 DRAW550,400:DRAW550,160 560 DRAW100,160:DRAW100,400:ENDPROC 570 DEFPROCB(c,x,y) :IF c=0 GOTO 590 580 C(X,Y)= NOT C(X,Y) 590 FOR i=1 TO 32 STEP 4 600 MOVEx+4,1024-(y-i)-32 610 DRAWx+28,1024-(y-i)-32:NEXT 620 ENDPROC 630 DEFPROCCALCULATE(N):LOCAL i,x,y 640 FORi=1 TO 8:B(i)=2^(i-1):NEXT i 650 FOR x=1TO8:V(x)=0:FOR y=1TO8 660 IF C(y,x)=-1 V(x)=V(x)+B(9-y) 670 NEXT:NEXT:FOR i=1 TO 8 680 VDU31,5,i:PRINT;~V(i):NEXT i 690 VDU23,1,1;0;0;0;:*FX21,0 700 VDU31,12,13:PRINTSPC(6); 710 IF N<>0 c2=N:GOTO 740 ELSE SOUND1,-8,170,1 720 VDU31,0,13:PRINT"Redefine no."; 730 INPUTc2:IFc2<224 OR c2>255THEN700 740 VDU23,1,0;0;0;0; 750 VDU23,c2:FOR i=1 TO 8:VDUV(i) 760 z=2:x=20 770 NEXT:VDU31,12,5,c2 780 VDU31,z,x,224,225,226,227,228,229 790 VDU31,z,x+1,230,231,232,233,234,235 800 VDU31,z,x+2,236,237,238,239,240,241 810 VDU31,z,x+3,242,243,244,245,246,247 820 VDU31,z,x+4,248,249,250,251,252,253 830 VDU31,z,x+5,254,255 840 REPEAT UNTIL NOT INKEY-74:ENDPROC 850 DEFPROCCURSOR:*FX4,1 860 GCOL3,2:PROCBLOCK(x,y) 870 IF INKEY-58 PROCUP 880 IF INKEY-42 PROCDOWN 890 IF INKEY-26 PROCLEFT 900 IF INKEY-122 PROCRIGHT 910 IF INKEY-1 GCOL3,1:PROCB(1,x,y) 920 GCOL3,2:PROCBLOCK(x,y):*FX4 930 ENDPROC 940 DEFPROCBLOCK(x,y) 950 FORi=1 TO 16 STEP 4 960 MOVEx+16,1024-y-8-i 970 DRAWx+20,1024-y-8-i:NEXT i:ENDPROC 980 DEFPROCUP :IF Y=1 THEN ENDPROC 990 Y=Y-1:y=y-32:GCOL3,2 1000 PROCBLOCK(x,y+32):PROCBLOCK(x,y) 1010 ENDPROC 1020 DEFPROCDOWN 1030 IF Y=8 THEN ENDPROC 1040 Y=Y+1:y=y+32:GCOL3,2 1050 PROCBLOCK(x,y-32):PROCBLOCK(x,y) 1060 ENDPROC 1070 DEFPROCLEFT :IF X=1 THEN ENDPROC 1080 X=X-1:x=x-32:GCOL3,2 1090 PROCBLOCK(x+32,y):PROCBLOCK(x,y) 1100 ENDPROC 1110 DEFPROCRIGHT 1120 IF X=8 THEN ENDPROC 1130 X=X+1:x=x+32:GCOL3,2 1140 PROCBLOCK(x-32,y):PROCBLOCK(x,y) 1150 ENDPROC 1160 DEFPROCCHANGE 1170 PROCROMREAD(0):PROCGRID 1180 PROCCALCULATE(0) 1190 X=1:Y=1:x=32:y=32:ENDPROC 1200 DEFPROCINVERT 1210 FORi=1TO8:FORj=1TO8 1220 C(i,j)=NOT(C(i,j)):NEXT, 1230 PROCGRID:PROCCALCULATE(0) 1240 ENDPROC 1250 DEFPROCERASE 1260 FORi=1TO8:FORj=1TO8:C(i,j)=0 1270 NEXT,:PROCGRID:PROCCALCULATE(0) 1280 ENDPROC 1290 DEFPROCMIRROR 1300 FORi=1TO8:FORj=1TO8 1310 R(i,j)=C(i,9-j) :NEXT, 1320 FORi=1TO8:FORj=1TO8 1330 C(i,j)=R(i,j):NEXT,:PROCGRID 1340 PROCCALCULATE(0):ENDPROC 1350 DEFPROCMIRROR2 1360 FORi=1TO8:FORj=1TO8 1370 R(j,i)=C(9-j,i) :NEXT, 1380 FORi=1TO8:FORj=1TO8 1390 C(i,j)=R(i,j):NEXT,:PROCGRID 1400 PROCCALCULATE(0):ENDPROC 1410 DEFPROCROTATE 1420 FORi=1TO8:FORj=1TO8 1430 R(i,j)=C(j,9-i):NEXT, 1440 FORi=1TO8:FORj=1TO8 1450 C(i,j)=R(i,j):NEXT,:PROCGRID 1460 PROCCALCULATE(0):ENDPROC 1470 DEFPROCSI 1480 VDU28,10,30,19,15 1490 F=3:S=2 1500 COLOURF:PRINT"R";:COLOURS:PRINT"otate" 1510 COLOURF:PRINT"M";:COLOURS:PRINT"irror" 1520 COLOURF:PRINT"U";:COLOURS:PRINT"pside dwn"; 1530 COLOURF:PRINT"I";:COLOURS:PRINT"nvert" 1540 COLOURF:PRINT"C";:COLOURS:PRINT"lear all" 1550 COLOURF:PRINT"N";:COLOURS:PRINT"ew char" 1560 COLOURF:PRINT"R";:COLOURS:PRINT"et calc" 1570 COLOURF:PRINT"Q";:COLOURS:PRINT"uit" 1580 COLOURF:PRINT"S";:COLOURS:PRINT"pool" 1590 COLOURF:PRINT"@";:COLOURS:PRINT"Save" 1600 COLOUR6:PRINT'"Author: " 1610 PRINT"J.Henson." 1620 COLOUR1:VDU26:ENDPROC 1630 REMsave 1640 *FX21,0 1650 VDU28,0,31,17,30,12 1660 CLS:INPUT NAME$ 1670 IF LEN(NAME$)>10 OR LEN(NAME$)<1 THEN CLS:GOTO 1660 1680 *OPT1,0 1690 ON ERROR PROCerror 1700 CLS:PRINT"Saving" 1710 OSCLI("SAVE"+CHR$34+NAME$+CHR$34+" 0C00 0D00") 1720 ON ERROR OFF 1730 *OPT1,1 1740 PRINTCHR$12;"Saved data." 1750 I=INKEY(400) 1760 CLS 1770 VDU26 1780 GOTO100 1790 REMspool 1800 Z=c1 1810 *FX21,0 1820 VDU28,0,31,17,30,12 1830 REPEAT 1840 CLS:INPUT"Name:"N$ 1850 INPUT"Start:"line 1860 INPUT"Inc. :"nc 1870 UNTIL LEN(N$)<11 AND LEN(N$)>=1 1880 ON ERROR PROCerror 1890 CLS:OSCLI("SPOOL "+N$) 1900 ON ERROR OFF 1910 FOR I%=224 TO 255:m=&C00:FORI=224 TO 255 1920 PRINTSTR$(line);"VDU23,";STR$(I); 1930 FOR J=m TO m+7:PRINT",";STR$(?J);:NEXT 1940 PRINT:line=line+nc:m=m+8:NEXT:*SPOOL 1950 VDU12,26:PROCROMREAD(Z):PROCGRID:VDU31,12,5,c2:GOTO100 1960 DEFPROCerror 1970 IF ERR<>201 GOTO 2010 1980 PRINT"Disk read only.":I=INKEY(900) 1990 PRINT"Make disk R/W.":I=INKEY(900) 2000 PRINT"Space when done.":REPEAT:UNTIL INKEY$(0)=" ":ENDPROC 2010 CLS:REPORT:PRINT;" at line ";ERL:END