10 REM Word Square Solver V.2.0 20 REM by M.Bobrowski for 8BS 30 : 40 MODE 129 50 INPUT'"Enter number of columns : "M% 60 INPUT'"Enter number of rows : "N% 70 IF M%>=N% K%=M% ELSE K%=N% 80 DIM L$(K%,K%),D%(7,1) 90 FOR J%=0 TO 7:READ D%(J%,0),D%(J%,1):NEXT 100 B%=19-M%/2:A$=STRING$(K%,"*") 110 FOR R%=1 TO N% 120 PRINT'"Enter ";RIGHT$(" "+STR$R%,2);" row : ";:INPUT""R$ 130 FOR C%=1 TO M% 140 L$(C%,R%)=MID$(R$,C%,1) 150 NEXT:NEXT 160 CLS:PRINTTAB(B%)STRING$(M%,"-"):COLOUR 2:FOR R%=1 TO N% 170 PRINTTAB(B%); 180 FOR C%=1 TO M% 190 PRINT L$(C%,R%); 200 NEXT:NEXT:COLOUR3:PRINT'TAB(B%)STRING$(M%,"-")TAB(0,25)STRING$(40,"-"); 210 REPEAT:VDU 28,0,31,39,26,12:COLOUR3:INPUT"Enter hidden word : "W$:L%=LENW$:IF W$="" END 220 PROCsearch:IF F% PRINT"Word starts from point (";H%;",";V%;")":PROCdisplay(H%,V%,1):PROCdisplay(H%,V%,2) 230 UNTIL FALSE 250 : 260 DEF PROCsearch:F%=FALSE 270 PROChorizontal:IF F% ENDPROC 280 PROCbackwards:IF F% ENDPROC 290 PROCdownwards:IF F% ENDPROC 300 PROCupwards:IF F% ENDPROC 310 PROCdownright:IF F% ENDPROC 320 PROCdownleft:IF F% ENDPROC 330 PROCupleft:IF F% ENDPROC 340 PROCupright:IF F% ENDPROC 350 IF NOT F% PRINT"Word not found."'"Press SPACE to continue";:REPEAT UNTIL GET=32 360 ENDPROC 370 : 380 DEF PROChorizontal 390 D%=0:FOR R%=1 TO N% 400 A$="" 410 FOR C%=1 TO M% 420 A$=A$+L$(C%,R%):I%=INSTR(A$,W$) 430 IF I%>0 H%=I%:V%=R%:R%=N%:C%=M%:F%=TRUE 440 NEXT:NEXT 460 ENDPROC 470 : 480 DEF PROCbackwards 490 D%=4:FOR R%=1 TO N% 500 A$="" 510 FOR C%=M% TO 1 STEP -1 520 A$=A$+L$(C%,R%):I%=INSTR(A$,W$) 530 IF I%>0 H%=M%-I%+1:V%=R%:R%=N%:C%=1:F%=TRUE 540 NEXT:NEXT 560 ENDPROC 570 : 580 DEF PROCdownwards 590 D%=2:FOR C%=1 TO M% 600 A$="" 610 FOR R%=1 TO N% 620 A$=A$+L$(C%,R%):I%=INSTR(A$,W$) 630 IF I%>0 H%=C%:V%=I%:R%=N%:C%=M%:F%=TRUE 640 NEXT:NEXT 660 ENDPROC 670 : 680 DEF PROCupwards 690 D%=6:FOR C%=1 TO M% 700 A$="" 710 FOR R%=N% TO 1 STEP -1 720 A$=A$+L$(C%,R%):I%=INSTR(A$,W$) 730 IF I%>0 H%=C%:V%=N%-I%+1:R%=1:C%=M%:F%=TRUE 740 NEXT:NEXT 760 ENDPROC 770 : 780 DEF PROCdownright 790 D%=1:FOR R%=1 TO N% 800 FOR C%=1 TO M% 810 A$="":X%=C%:Y%=R% 820 REPEAT:A$=A$+L$(X%,Y%):I%=INSTR(A$,W$):IF I%>0 F%=TRUE 830 X%=X%+1:Y%=Y%+1 840 UNTIL X%>M% OR Y%>N% OR F%:IF F% H%=X%-L%:V%=Y%-L%:C%=M%:R%=N% 850 NEXT:NEXT 860 ENDPROC 870 : 880 DEF PROCdownleft 890 D%=3:FOR R%=1 TO N% 900 FOR C%=M% TO 1 STEP -1 910 A$="":X%=C%:Y%=R% 920 REPEAT:A$=A$+L$(X%,Y%):I%=INSTR(A$,W$):IF I%>0 F%=TRUE 930 X%=X%-1:Y%=Y%+1 940 UNTIL X%<1 OR Y%>N% OR F%:IF F% H%=X%+L%:V%=Y%-L%:C%=1:R%=N% 950 NEXT:NEXT 960 ENDPROC 970 : 980 DEF PROCupleft 990 D%=5:FOR R%=N% TO 1 STEP -1 1000 FOR C%=M% TO 1 STEP -1 1010 A$="":X%=C%:Y%=R% 1020 REPEAT:A$=A$+L$(X%,Y%):I%=INSTR(A$,W$):IF I%>0 F%=TRUE 1030 X%=X%-1:Y%=Y%-1 1040 UNTIL X%<1 OR Y%<1 OR F%:IF F% H%=X%+L%:V%=Y%+L%:C%=1:R%=1 1050 NEXT:NEXT 1060 ENDPROC 1070 : 1080 DEF PROCupright 1090 D%=7:FOR R%=N% TO 1 STEP -1 1100 FOR C%=1 TO M% 1110 A$="":X%=C%:Y%=R% 1120 REPEAT:A$=A$+L$(X%,Y%):I%=INSTR(A$,W$):IF I%>0 F%=TRUE 1130 X%=X%+1:Y%=Y%-1 1140 UNTIL X%>M% OR Y%<1 OR F%:IF F% H%=X%-L%:V%=Y%+L%:C%=M%:R%=1 1150 NEXT:NEXT 1160 ENDPROC 1170 : 1180 DEF PROCdisplay(X%,Y%,K%) 1190 VDU26:COLOUR K%:FOR J%=1 TO LEN W$ 1200 PRINTTAB(X%+B%-1,Y%)MID$(W$,J%,1) 1210 X%=X%+D%(D%,0):Y%=Y%+D%(D%,1) 1220 NEXT 1230 IF K%=1 PRINTTAB(0,31)"Press SPACE to continue";:REPEATUNTILGET 1240 ENDPROC 1250 : 1260 DATA 1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1