1 'Word Finder
2 'By JASON BIRKETT
3 'Amstrad Action
10 MODE 1:INK 0,3:INK 1,24:GOSUB 390:LOCATE 15,2:PRINT"WORD FINDER":LOCATE 12,4
20 PRINT"BY JASON BIRKETT":PRINT:INPUT"Title";t$:INPUT"How many words";w
30 t$=UPPER$(t$):DIM d$(w):DIM w$(w):DIM k(w):FOR q=1 TO w:PRINT"Word";q;
40 INPUT w$(q):w$(q)=UPPER$(w$(q)):k(q)=LEN(w$(q)):IF k(q)>12 THEN PRINT"WORD TO LONG!":GOTO 40 ELSE NEXT q:DIM a(w):IF w<15 THEN DIM a$(15) ELSE DIM a$(w)
50 DIM k$(144):MODE 2
60 'PLACE INFO IN ORDER
70 FOR y=1 TO w:t=0:FOR j=1 TO w:IF k(y)<k(j) THEN t=t+1
80 NEXT j
90 IF a$(t+1)<>"" THEN t=t+1:GOTO 90
100 a$(t+1)=w$(y):a(t+1)=k(y):NEXT y:FOR i=1 TO w:w$(i)=a$(i):k(i)=a(i):NEXT i
110 LOCATE 22,3:PRINT"WHEN PROGRAM HAS FINISHED PRESS:-":LOCATE 24,5:PRINT"éSHIFT+Pè TO PRINT SCREEN":LOCATE 24,6:PRINT"éSHIFT+Fè TO RERUN PROGRAM":LOCATE 24,7:PRINT"éSHIFT+Aè TO REFORM THE GRID":LOCATE 34,15:PRINT"NOW WORKING":DIM b$(15):t=1
120 LOCATE 35,19:PRINT SPACE$(17):LOCATE 35,19:PRINT"WORD "w$(t):x=INT(RND(1)*12)+1:c=0:y=INT(RND(1)*12)+1:IF t=1 THEN IF y>3 AND y<9 THEN 120
130 'WORK OUT POSITION AND DIRECTION
140 p=(y-1)*12+x:IF t=1 THEN d=5 ELSE d=INT(RND(1)*8)+1
145 r=0:GOTO 190
150 IF d=1 THEN c=p+b-1:a=13-x:as=k(t) ELSE IF d=2 THEN c=p+1-b:a=x:as=k(t)
160 IF d=3 THEN c=p+((b-1)*12):a=13-y:as=k(t) ELSE IF d=4 THEN c=p-((b-1)*12):a=y:as=k(t) ELSE IF d=5 THEN c=p+((b-1)*13):a=13-x:as=13-y
170 IF d=6 THEN c=p-((b-1)*11):a=13-x:as=y ELSE IF d=7 THEN c=p+((b-1)*11):a=x:as=13-y ELSE IF d=8 THEN c=p-((b-1)*13):a=x:as=y
180 RETURN
190 GOSUB 150:IF k(t)>a OR k(t)>as THEN 240
200 FOR b=1 TO k(t):GOSUB 150:a$=LEFT$(w$(t),b):b$(b)=RIGHT$(a$,1)
210 IF k$(c)="" OR k$(c)=b$(b) THEN 220 ELSE 240
220 NEXT b:FOR b=1 TO k(t):GOSUB 150:k$(c)=b$(b):NEXT b:d$(t)=w$(t)
230 t=t+1:IF t>w THEN 310 ELSE 120
240 d=d+1:r=r+1:IF d=9 THEN d=1
250 IF r=8 THEN 260 ELSE 190
260 cb=cb+1:IF cb=144 THEN 290 ELSE 270
270 x=x+1:IF x=13 THEN x=1:y=y+2
273 IF y=14 THEN y=1
275 IF y=13 THEN y=2
280 GOTO 140
290 d$(t)="sh":cb=0:IF t=w THEN 310 ELSE t=t+1:GOTO 120
300 'PRINT SCREEN
310 MODE 1:INK 1,2:INK 0,24:FOR y=1 TO 12:FOR x=1 TO 12:y(1)=y*2:x(1)=x*2
320 s=INT(RND(1)*90)+1:IF s<65 THEN 320 ELSE qw=(y-1)*12+x:IF k$(qw)<>"" THEN 330 ELSE k$(qw)=CHR$(s)
330 LOCATE 13+x(1),y(1):PRINT k$(qw):NEXT x:NEXT y:wt=0:FOR i=1 TO w
340 IF d$(i)="sh" THEN i=i+1:wt=wt+1:IF i>w THEN 360 ELSE GOTO 340
350 LOCATE 1,1+i-wt:PRINTd$(i):NEXT i
360 LOCATE 10,1:PRINT t$
370 a$=INKEY$:IF a$="P" THEN 430 ELSE IF a$="A" THEN ERASE k$:DIM k$(144):GOTO 450
380 IF a$="F" THEN RUN ELSE 370
390 e=0:FOR i=&4E20 TO &4E33:READ a$:d=VAL("&"+a$):e=e+d:POKE i,d:NEXT i:READ b$:f=VAL("&"+b$):IF f<>e THEN PRINT"CHECK LINE WITH MACHINE CODE!!!":END
400 DATA dd,6e,02,dd,66,04,cd,75,bb,cd,60,bb,dd,6e,00,dd,66,01,77,c9,a48
410 RETURN
420 'PRINT SCREEN TO PRINTER
430 FOR y=1 TO 25:FOR x=1 TO 40:s%=0:CALL &4E20,x,y,às%:IF x=40 THEN PRINT#8,CHR$(s%) ELSE PRINT#8,CHR$(s%)" ";
440 NEXT x:NEXT y:GOTO 370
450 ERASE b$:MODE 2:GOTO 110XT x:NEXT y:GOTO 370
450 ERASE b$:MODE 2:GOTO 110