Home » Archimedes archive » Archimedes World » AW-1993-04.adf » AWApril93 » !AWApril93/Goodies/WordSq/!WordSq/!RunImage
!AWApril93/Goodies/WordSq/!WordSq/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Archimedes World » AW-1993-04.adf » AWApril93 |
Filename: | !AWApril93/Goodies/WordSq/!WordSq/!RunImage |
Read OK: | ✔ |
File size: | F30B bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >WordSq$Dir.!RunImage 20REM WordSquare Creation and Solving program 30REM By Matthew Eglise 40REM 50REM Copyright held by Archimedes World magazine 60REM This program is NOT Public Domain 70REM 80REM Version 3.12 - 26th September 1992 90REM 100mem1%=9042:mem2%=17100:filetype%=&03C 110PROCautoload 120SYS"Hourglass_On" 130PROCStart("WordSq",mem1%,mem2%) 140PROCinit 150PROCCreate_Windows 160PROCCreate_Menus 170PROCloadprefs 180IFd$<>"" PROCLoadOwn(d$) 190SYS"Hourglass_Off" 200ON ERROR PROCError:GOTO200 210REPEAT 220PROCpoll 230UNTIL FNnew("quit")<>0 240PROCCloseDown 250END 260: 270DEFPROCinit 280DIM word$(168),len%(168),grid%(2400),show%(168),b$(60) 290DIM selected%(168),start%(168),dir%(168),temp$(168) 300DIM sx%(168),sy%(168),ex%(168),ey%(168) 310DIM valid% 32:$valid%="b1,0,15,4,0,1,14,12" 320DIM text% 8:$text%="" 330wordswind%=0:words%=0:grid%=0:selection%=0:ef%=0:high%=0 340nofit%=0:dimx=0:dimy=0:maxh=0:a=0:needs%=0:gaps=25:len%=0 350wsqtitle$="":selectedword$="":saveformat$="text":solveformat$="":temp$="" 360mainwind%=0:solvewind%=0:dispwind%=0:wsqx=0:wsqy=0:wsqwords%=0 370wordssaved%=1:gridsaved%=1:flag%=0:show%=0:found%=0:done%=0 380startx%=0:starty%=0:dispx%=0 390dispbox%=0:wordsbox%=0 400ENDPROC 410: 420DEFPROCCreate_Windows 430PROCSpritesLoad 440solve_Window%=FNWindowLoad("solve") 450info_Window%=FNWindowLoad("info") 460savewords_Window%=FNWindowLoad("savewords") 470display_Window%=FNWindowLoad("display") 480words_Window%=FNWindowLoad("words") 490main_Window%=FNWindowLoad("main") 500savewsq_Window%=FNWindowLoad("savewsq") 510prefs_Window%=FNWindowLoad("prefs") 520Bar_Icon%=FNIconBar("!WordSq") 530FORI%=4TO171:PROCIconPutText(words_Window%,I%,""):NEXT 540PROCww 550ENDPROC 560: 570DEFFNEvent_Save(window%) 580CASE window% OF 590WHEN savewords_Window% :=TRUE 600WHEN savewsq_Window% :=TRUE 610OTHERWISE :=FALSE 620ENDCASE 630: 640DEFPROCCreate_Menus 650DIM prefs_Menu%(1) 660menu$="WordSq\Info>info_Window%\Edit\Solve\Preferences\Clear\Quit" 670Bar_Menu%=FNMenuCreate(menu$) 680menu$ ="Solve\Info>info_Window%\Show Words\" 690menu$+="Quit" 700solve_Menu%=FNMenuCreate(menu$) 710menu$ ="Display\Info>info_Window%\Show Words\Quit" 720display_Menu%=FNMenuCreate(menu$) 730menu$ ="Words\Info>info_Window%\Save Words>savewords_Window%\" 740menu$+="Quit" 750words_Menu%=FNMenuCreate(menu$) 760WlMenu%=FNMenuCreate("Colours") 770SmMenu%=FNMenuCreate("Colours") 780LMenu%=FNMenuCreate("Colours") 790ClMenu%=FNMenuCreate("Colours") 800menu$="Colours\Words list>WlMenu%\Start mark>SmMenu%\Lines>LMenu%\Latest line>ClMenu%" 810prefs_Menu%(1)=FNMenuCreate(menu$) 820menu$ ="Prefs\Info>info_Window%\Colours>prefs_Menu%(1)\Quit" 830prefs_Menu%=FNMenuCreate(menu$) 840menu$ ="Create\Info>info_Window%\Show Words\" 850menu$+="Save Words>savewords_Window%\Save Square>savewsq_Window%\Print Words\Print Square\Quit" 860main_Menu%=FNMenuCreate(menu$) 870savewsq_Menu%=0:info_Menu%=0:savewords_Menu%=0 880PROCMenuDisable(main_Menu%,2) 890PROCMenuDisable(main_Menu%,3) 900PROCMenuDisable(main_Menu%,4) 910PROCMenuDisable(main_Menu%,5) 920PROCMenuDisable(main_Menu%,6) 930PROCMenuDisable(solve_Menu%,2) 940PROCMenuDisable(display_Menu%,2) 950ENDPROC 960: 970DEFFNEvent_Menu(window%) 980CASE window% OF 990WHEN Bar_Window%:=Bar_Menu% 1000WHEN solve_Window%:=solve_Menu% 1010WHEN display_Window%:=display_Menu% 1020WHEN words_Window%:=words_Menu% 1030WHEN main_Window%:=main_Menu% 1040WHEN prefs_Window%:=prefs_Menu% 1050OTHERWISE:=FALSE 1060ENDCASE 1070: 1080DEFPROCEvent_WindowClose(window%,buttons%) 1090CASE window% OF 1100WHEN solve_Window%:solvewind%=0 1110WHEN info_Window% 1120WHEN savewords_Window% 1130WHEN display_Window%:dispwind%=0 1140WHEN words_Window%:wordswind%=0:PROCMenuTick(main_Menu%,2):PROCMenuTick(solve_Menu%,2):PROCMenuTick(display_Menu%,2) 1150WHEN main_Window%:mainwind%=0 1160WHEN savewsq_Window% 1170WHEN prefs_Window% 1180ENDCASE 1190ENDPROC 1200: 1210DEFPROCEvent_Draw(window%,x_origin%,y_origin%) 1220CASE window% OF 1230WHEN savewsq_Window%:PROCDrawsavewsqWindow 1240WHEN solve_Window%:PROCDrawsolveWindow 1250WHEN info_Window%:PROCDrawinfoWindow 1260WHEN savewords_Window%:PROCDrawsavewordsWindow 1270WHEN prefs_Window%:PROCDrawprefsWindow 1280WHEN display_Window%:PROCDrawdisplayWindow 1290WHEN words_Window%:PROCDrawwordsWindow 1300WHEN main_Window%:PROCDrawmainWindow 1310ENDCASE 1320ENDPROC 1330: 1340DEFPROCDrawsavewsqWindow 1350ENDPROC 1360: 1370DEFPROCDrawsolveWindow 1380ENDPROC 1390: 1400DEFPROCDrawinfoWindow 1410ENDPROC 1420: 1430DEFPROCDrawsavewordsWindow 1440ENDPROC 1450: 1460DEFPROCDrawprefsWindow 1470ENDPROC 1480: 1490DEFPROCDrawwordsWindow 1500ENDPROC 1510: 1520DEFPROCDrawmainWindow 1530ENDPROC 1540: 1550DEFPROCDrawdisplayWindow 1560IFstartx%<>0 AND starty%<>0 SYS"Wimp_SetColour",mcol%:RECTANGLE FILL x_origin%+startx%,y_origin%+starty%,22,32 1570FORI%=1TOwords% 1580IFshow%(I%)=0 OR (start%(I%)=0 AND dir%(I%)=0) GOTO1610 1590IFI%=show% SYS"Wimp_SetColour",lcol% ELSE SYS"Wimp_SetColour",col% 1600LINE x_origin%+sx%(I%),y_origin%-sy%(I%),x_origin%+ex%(I%),y_origin%-ey%(I%) 1610NEXT 1620dispx%=x_origin%-18 1630ENDPROC 1640: 1650DEFPROCEvent_MouseClick(window%,icon%,button%,x%,y%) 1660CASE window% OF 1670WHEN Bar_Window%:PROCMouseBar 1680WHEN solve_Window%:PROCMousesolve(button%,icon%) 1690WHEN info_Window%:PROCMouseinfo(button%,icon%) 1700WHEN display_Window%:PROCMousedisplay(button%,icon%) 1710WHEN prefs_Window%:PROCMouseprefs(button%,icon%) 1720WHEN words_Window%:PROCMousewords(button%,icon%) 1730WHEN main_Window%:PROCMousemain(button%,icon%) 1740ENDCASE 1750ENDPROC 1760: 1770DEFPROCMouseBar 1780PROCBringToTop(main_Window%):mainwind%=1 1790ENDPROC 1800: 1810DEFPROCMouseprefs(button%,icon%) 1820CASE icon% OF 1830WHEN 1:PROCsaveprefs:PROCWindowClose(prefs_Window%) 1840WHEN 11:PROCgetprefs:PROCWindowClose(prefs_Window%) 1850WHEN 12:PROCWindowClose(prefs_Window%) 1860IFtempdbl%<>dbl% PROCSetIcon(prefs_Window%,3):tempdbl%=dbl% 1870IFtempcaps%<>caps% PROCSetIcon(prefs_Window%,29):PROCSetIcon(prefs_Window%,30):tempcaps%=caps% 1880IFtempforce%<>force% PROCSetIcon(prefs_Window%,45):PROCSetIcon(prefs_Window%,46):tempforce%=force% 1890IFtemptitlept%<>titlept% temptitlept%=titlept% 1900IFtempgridpt%<>gridpt% tempgridpt%=gridpt% 1910IFtempwordspt%<>wordspt% tempwordspt%=wordspt% 1920IFtempcol%<>col% tempcol%=col% 1930IFtempmcol%<>mcol% tempmcol%=mcol% 1940IFtempwcol%<>wcol% tempwcol%=wcol% 1950IFtemplcol%<>lcol% templcol%=lcol% 1960PROCsetprefs 1970WHEN 3:IF tempdbl%=-1 tempdbl%=0 ELSE tempdbl%=-1 1980WHEN 29:IFbutton%=1 AND tempcaps%=-1 PROCSetIcon(prefs_Window%,29) 1990tempcaps%=-1 2000WHEN 30:IFbutton%=1 AND tempcaps%=0 PROCSetIcon(prefs_Window%,30) 2010tempcaps%=0 2020WHEN 31,33:temptitlept%=FNbumppt(icon%-32,temptitlept%,32) 2030WHEN 34,36:tempgridpt%=FNbumppt(icon%-35,tempgridpt%,35) 2040WHEN 37,39:tempwordspt%=FNbumppt(icon%-38,tempwordspt%,38) 2050WHEN 45:IF button%=1 AND tempforce%=-1 PROCSetIcon(prefs_Window%,45) 2060tempforce%=-1 2070WHEN 46:IF button%=1 AND tempforce%=0 PROCSetIcon(prefs_Window%,45) 2080tempforce%=0 2090OTHERWISE:PROCAlert("WordSq","Invalid Templates file.") 2100ENDCASE 2110ENDPROC 2120: 2130DEFPROCMousesolve(button%,icon%) 2140IFbutton%<>1 AND button%<>4 ENDPROC 2150IFsolveformat$="" PROCAlert("WordSq","No wordsquare is currently available - either create one or load a plain text wordsquare."):ENDPROC 2160IFicon%=9 AND (selection%=0 AND FNIconText(solve_Window%,17)="") ENDPROC 2170CASE icon% OF 2180WHEN 8:PROCBringToTop(display_Window%):dispwind%=1:PROCremovepressed 2190WHEN 9:PROCBringToTop(display_Window%):dispwind%=1:PROCshowpressed 2200WHEN 11:PROCBringToTop(display_Window%):dispwind%=1:PROCshowall 2210WHEN 10:PROCremoveall 2220OTHERWISE:PROCAlert("WordSq","Invalid Templates file.") 2230ENDCASE 2240ENDPROC 2250: 2260DEFPROCMousedisplay(button%,icon%) 2270IFbutton%<>4 AND button%<>1 ENDPROC 2280IFicon%-1>wsqy ENDPROC 2290!wimp%=display_Window%:SYS "Wimp_GetWindowState",,wimp%:dispx%=wimp%!4-wimp%!20-2 2300IFbutton%=4 startpos%=0:startx%=0:starty%=0:endpos%=0 ELSE IFbutton%=1 AND startpos%=0 button%=4:startx%=0:starty%=0:endpos%=0 2310icon%-=1:i%=((24+((x%-dispx%)/16))/2)-12 2320IFi%>wsqx ENDPROC 2330p%=((icon%-1)*wsqx)+i% 2340CASE button% OF 2350WHEN 4:startpos%=p% 2360startx%=22+((i%-1)*32)-8:starty%=-84-((icon%-1)*44) 2370WHEN 1:endpos%=p% 2380d$=FNgetword(startpos%,endpos%):PROCIconPutText(solve_Window%,17,d$) 2390IFstartpos%<>endpos% AND o%=1 AND d$<>"" THEN 2400PROCcaret((LENd$/2)+1000) 2410ex%=FNexists(d$):p%=FNpalindrome(d$) 2420IFex%=0 PROCAlert("WordSq","The word '"+d$+"' does not exist in the current word list."):GOTO2460 2430IFex%>0 AND startpos%<>0 AND endpos%<>0 AND startpos%<>start%(ex%) AND p%=0 PROCAlert("WordSq","Although the word "+d$+" does exist in the current wordsquare, it is not at this position."):GOTO2460 2440IFex%>0 AND startpos%<>0 AND endpos%<>0 AND startpos%<>start%(ex%) AND p%=1 SWAP startpos%,endpos% 2450IFex%>0:IFshow%(ex%)=0 high%+=1:show%(ex%)=2:PROCsic(words_Window%,ex%+3,wcol%):show%=ex%:found%+=1 2460startx%=0:starty%=0:startpos%=0:endpos%=0 2470ENDIF 2480ENDCASE 2490PROCWindowForceDraw(display_Window%) 2500PROCupdatesolvestate 2510IFsolveformat$<>"own" ENDPROC 2520IFfound%=wsqwords% AND done%=0 ANDwsqwords%=1 PROCAlert("WordSq","Well Done, you've found the word."):done%=1:ENDPROC 2530IFhigh%=wsqwords% AND found%<wsqwords% AND done%=0 AND wsqwords%=1 AND found%>0 PROCAlert("WordSq","Although you have found the word, you had to seek help with it."):done%=1:ENDPROC 2540IFfound%=wsqwords% AND done%=0 PROCAlert("WordSq","Well Done, you've found all "+FNoneormore(wsqwords%)+"in the grid."):done%=1 2550IFhigh%=wsqwords% AND found%<wsqwords% AND done%=0 AND found%>0 PROCAlert("WordSq","Although you have found all "+FNoneormore(wsqwords%)+"in the grid, you had to seek help with "+STR$(wsqwords%-found%)+" of them."):done%=1 2560ENDPROC 2570: 2580DEFPROCshowpressed 2590IFsolveformat$="" PROCIconPutText(solve_Window%,17,""):ENDPROC 2600gibbet$=FNIconText(solve_Window%,17):need%=0:F%=0 2610ex%=FNexists(gibbet$) 2620IFcaps%=-1 PROCIconPutText(main_Window%,26,FNcaps(gibbet$)):PROCIconPutText(solve_Window%,17,FNcaps(gibbet$)) 2630IFFNlen(gibbet$)<3 AND selection%=0 GOTO2830 2640IFselection%=0 AND solveformat$="text" AND ex%=0 PROCfind(FNcaps(gibbet$)):PROCIconPutText(main_Window%,20,STR$gaps):GOTO2820 2650IFselection%=0 AND solveformat$="own" THEN 2660IFex%=0 PROCAlert("WordSq","The word '"+gibbet$+"' does not exist in the current word list."):GOTO2690 2670IFex%>0 AND startpos%<>0 AND endpos%<>0 AND startpos%<>start%(ex%) PROCAlert("WordSq","Although the word "+gibbet$+" does exist in the current wordsquare, it is not at this position."):GOTO2690 2680IFex%>0 need%=1:IFshow%(ex%)=0 high%+=1:show%(ex%)=1:PROCsic(words_Window%,ex%+3,wcol%):show%=ex% 2690ENDIF 2700IFselection%=0 AND solveformat$="own" GOTO 2830 2710IFselection%>0 THEN 2720o%=0:FORI%=1TOwords%:IFselected%(I%)=1 AND start%(I%)=0 AND dir%(I%)=0 o%+=1 ELSE IFselected%(I%)=1 AND show%(I%)=0 high%+=1:show%(I%)=1:need%=1:PROCsic(words_Window%,I%+3,wcol%) 2730NEXT 2740IFselection%>1 show%=0 2750IFo%>0 THEN 2760IFo%=1 o$=" does " ELSE o$=" do " 2770IFo%=1 AND selection%=1 d$="This word does ":ELSE d$=FNoneormore(o%)+"amongst the selection"+o$:o$="they" 2780IFo%=1 o$="it" 2790PROCAlert("WordSq",d$+"not appear in the current wordsquare so "+o$+" will not be shown.") 2800ENDIF 2810ENDIF 2820o%=selection% 2830PROCclearall:PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCcaret(0) 2840IFwords%=1:PROCMenuEnable(main_Menu%,2):PROCMenuEnable(main_Menu%,3):PROCMenuEnable(main_Menu%,5):PROCMenuEnable(solve_Menu%,2):PROCMenuEnable(words_Menu%,2):PROCMenuEnable(display_Menu%,2) 2850IFwords%=0 done%=0 2860startx%=0:starty%=0 2870PROCWindowForceDraw(display_Window%) 2880PROCupdatesolvestate:IFsolveformat$<>"own" ORo%>=wsqwords% ORdone%=1 ENDPROC 2890IFhigh%=wsqwords% AND found%<wsqwords% ANDwsqwords%=1 PROCAlert("WordSq","Although you found the word, you had to seek help with it."):done%=1:ENDPROC 2900IFhigh%=wsqwords% AND found%<wsqwords% AND found%>0 PROCAlert("WordSq","Although you have found all "+FNoneormore(wsqwords%)+"in the grid, you had to seek help with "+STR$(wsqwords%-found%)+" of them."):done%=1 2910ENDPROC 2920: 2930DEFPROCremovepressed 2940IFsolveformat$="" PROCIconPutText(solve_Window%,17,""):PROCcaret(0):ENDPROC 2950IFselection%=0 ENDPROC 2960need%=0:FORI%=1TOwords% 2970IFshow%(I%)=2 AND selected%(I%)=1 found%-=1 2980IFselected%(I%)=1 AND show%(I%)>0 high%-=1:show%(I%)=0:need%=1:PROCsic(words_Window%,I%+3,7):IFI%=show% show%=0 2990NEXT 3000done%=0 3010PROCclearall:PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCcaret(0) 3020IFneed% PROCWindowForceDraw(display_Window%) 3030PROCupdatesolvestate 3040ENDPROC 3050: 3060DEFPROCMouseinfo(button%,icon%) 3070ENDPROC 3080: 3090DEFPROCMousewords(button%,icon%) 3100IFicon%>3 AND icon%<=words%+3 THEN 3110CASE button% OF 3120WHEN 4: 3130FORI%=1TOwords%:IFselected%(I%)=1 PROCSetIcon(words_Window%,I%+3):selected%(I%)=0 3140NEXT:PROCSetIcon(words_Window%,icon%):selected%(icon%-3)=1:selection%=1:selectedword$=word$(icon%-3):PROCsetbutton 3150WHEN 1: 3160PROCSetIcon(words_Window%,icon%) 3170IFselected%(icon%-3)=0 selected%(icon%-3)=1:selection%+=1:ELSE selected%(icon%-3)=0:selection%-=1:PROCsetbutton 3180IFselection%<>1 GOTO3200 3190FORI%=1TOwords%:IFselected%(I%)=1 selectedword$=word$(I%):NEXT:ELSENEXT 3200ENDCASE 3210CASE selection% OF 3220WHEN 0:PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):selectedword$="" 3230WHEN 1:PROCIconPutText(main_Window%,26,selectedword$):PROCIconPutText(solve_Window%,17,selectedword$) 3240OTHERWISE:PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):selectedword$="" 3250ENDCASE 3260ENDIF 3270IF icon%=2 PROCselectall 3280IF icon%=3 PROCclearall 3290PROCupdatesolvestate 3300PROCcaret(LENselectedword$/2) 3310PROCsetbutton 3320ENDPROC 3330: 3340DEFPROCMousemain(button%,icon%) 3350IF button%<>1 AND button%<>4 ENDPROC 3360IFicon%=24 AND FNIconText(main_Window%,26)="" ENDPROC 3370CASE icon% OF 3380WHEN 24:PROCaddword 3390WHEN 25:PROCdeleteword 3400WHEN 28:PROCamendword 3410WHEN 29:PROCcreate 3420WHEN 11,13:PROCbumpx(icon%-12) 3430WHEN 15,17:PROCbumpy(-(icon%-16)) 3440WHEN 19,21:PROCbumpgaps(-(icon%-20)) 3450WHEN 30:IFbutton%=1 AND saveformat$="text" PROCSetIcon(main_Window%,30) 3460saveformat$="text":d%=FNIconPutSprite(savewsq_Window%,0,"file_fff") 3470WHEN 32:IFbutton%=1 AND saveformat$="draw" PROCSetIcon(main_Window%,32) 3480saveformat$="draw":d%=FNIconPutSprite(savewsq_Window%,0,"file_fff") 3490WHEN 33:IFbutton%=1 AND saveformat$="own" PROCSetIcon(main_Window%,33) 3500saveformat$="own":d%=FNIconPutSprite(savewsq_Window%,0,"file_03c") 3510WHEN 34:IFbutton%=1 AND saveformat$="imp" PROCSetIcon(main_Window%,34) 3520saveformat$="imp":d%=FNIconPutSprite(savewsq_Window%,0,"file_fff") 3530OTHERWISE:PROCAlert("WordSq","Invalid Templates file.") 3540ENDCASE 3550ENDPROC 3560: 3570DEFPROCselectall 3580FORI%=4TOwords%+3:IFselected%(I%-3)=0 PROCSetIcon(words_Window%,I%):selected%(I%-3)=1 3590NEXT:selection%=words%:PROCsetbutton 3600ENDPROC 3610: 3620DEFPROCclearall 3630FORI%=4TOwords%+3:IFselected%(I%-3)=1 PROCSetIcon(words_Window%,I%):selected%(I%-3)=0 3640NEXT:selection%=0:PROCsetbutton 3650ENDPROC 3660: 3670DEFPROCshowall 3680FORI%=1TOwords%:IFstart%(I%)<>0 AND dir%(I%)<>0 show%(I%)=1:PROCsic(words_Window%,I%+3,wcol%) 3690NEXT:PROCWindowForceDraw(display_Window%) 3700high%=wsqwords%:done%=1:show%=0:PROCupdatesolvestate 3710ENDPROC 3720: 3730DEFPROCremoveall 3740FORI%=1TOwords%:show%(I%)=0:PROCsic(words_Window%,I%+3,7):IFI%=show% show%=0 3750NEXT 3760PROCWindowForceDraw(display_Window%) 3770high%=0:found%=0:done%=0:PROCupdatesolvestate 3780ENDPROC 3790: 3800DEFPROCEvent_KeyPress(window%,icon%,key%) 3810CASE window% OF 3820WHEN solve_Window%:PROCKeyPresssolve(icon%,key%) 3830WHEN info_Window% 3840WHEN display_Window% 3850WHEN words_Window% 3860WHEN main_Window%:PROCKeyPressmain(icon%,key%) 3870WHEN prefs_Window%:PROCKeyPressprefs(icon%,key%) 3880ENDCASE 3890key%=0:wsqtitle$=FNIconText(main_Window%,9) 3900ENDPROC 3910: 3920DEFPROCKeyPresssolve(icon%,key%) 3930IFkey%<>13 SYS"Wimp_ProcessKey",key% 3940IFkey%=13 AND icon%=17 AND (selection%<>0 OR FNIconText(solve_Window%,17)<>"") PROCshowpressed 3950IFkey%=13 AND icon%=17 AND solveformat$="" PROCcaret(0) 3960ENDPROC 3970: 3980DEFPROCKeyPressmain(icon%,key%) 3990d%=icon% 4000IFkey%=399 AND icon%=26 icon%=9 ELSE IF key%=398 AND icon%=9 icon%=26 4010IFd%<>icon% PROCIconCaret(main_Window%,icon%,INT(LENFNIconText(main_Window%,icon%)/2)):ENDPROC 4020IFkey%=13 AND icon%=26 AND FNIconText(main_Window%,26)<>"" AND solveformat$<>"text" PROCaddword:ENDPROC 4030SYS"Wimp_ProcessKey",key% 4040ENDPROC 4050: 4060DEFPROCKeyPressprefs(icon%,key%) 4070d%=icon% 4080CASE key% OF 4090WHEN 399 4100IFicon%=24 OR icon%=25 OR icon%=26 OR icon%=27 icon%-=1 ELSE IF icon%=23 icon%=17 ELSE IF icon%=41 icon%=27 ELSE IF icon%=43 icon%=41 ELSE IF icon%=9 icon%=7 ELSE IF icon%=13 icon%=9 ELSE IF icon%=17 icon%=13 4110WHEN 398 4120IFicon%=23 OR icon%=24 OR icon%=25 OR icon%=26 icon%+=1 ELSE IF icon%=41 icon%=43 ELSE IF icon%=27 icon%=41 ELSE IF icon%=17 icon%=23 ELSE IF icon%=7 icon%=9 ELSE IF icon%=9 icon%=13 ELSE IF icon%=13 icon%=17 4130OTHERWISE SYS"Wimp_ProcessKey",key% 4140ENDCASE 4150IFicon%<>d% PROCIconCaret(prefs_Window%,icon%,INT(LENFNIconText(prefs_Window%,icon%)/2)) 4160ENDPROC 4170: 4180DEFPROCEvent_MenuChoice(menu%) 4190CASE menu% OF 4200WHEN Bar_Menu%:PROCMenuChoiceBar 4210WHEN savewsq_Menu% 4220WHEN solve_Menu%:PROCMenuChoicesolve 4230WHEN info_Menu% 4240WHEN savewords_Menu% 4250WHEN prefs_Menu%:PROCMenuChoiceprefs 4260WHEN display_Menu%:PROCMenuChoicedisplay 4270WHEN words_Menu%:PROCMenuChoicewords 4280WHEN main_Menu%:PROCMenuChoicemain 4290ENDCASE 4300ENDPROC 4310: 4320DEFPROCMenuChoiceBar 4330CASE FNMenuChoice(0) OF 4340WHEN 1 4350WHEN 2:PROCBringToTop(main_Window%):mainwind%=1 4360WHEN 3:IFsolveformat$<>"" PROCBringToTop(display_Window%):dispwind%=1 4370PROCBringToTop(solve_Window%):solvewind%=1 4380WHEN 4:PROCBringToTop(prefs_Window%) 4390WHEN 5: 4400IFFNnew("clear all variables")=1 PROCreset 4410WHEN 6:finished%=TRUE 4420ENDCASE 4430ENDPROC 4440: 4450DEFPROCMenuChoiceprefs 4460CASE FNMenuChoice(0) OF 4470WHEN 1 4480WHEN 2:CASE FNMenuChoice(1) OF 4490WHEN 1:IFFNMenuChoice(2)<>0 tempwcol%=FNMenuChoice(2)-1 4500WHEN 2:IFFNMenuChoice(2)<>0 tempmcol%=FNMenuChoice(2)-1 4510WHEN 3:IFFNMenuChoice(2)<>0 tempcol%=FNMenuChoice(2)-1 4520WHEN 4:IFFNMenuChoice(2)<>0 templcol%=FNMenuChoice(2)-1 4530ENDCASE 4540WHEN 3:finished%=TRUE 4550ENDCASE 4560PROCsib(prefs_Window%,50,tempcol%):PROCsib(prefs_Window%,51,tempmcol%) 4570PROCsib(prefs_Window%,53,tempwcol%):PROCsib(prefs_Window%,54,templcol%) 4580ENDPROC 4590: 4600DEFPROCMenuChoicesolve 4610CASE FNMenuChoice(0) OF 4620WHEN 1 4630WHEN 2:PROCMenuTick(solve_Menu%,2):PROCMenuTick(main_Menu%,2):PROCMenuTick(display_Menu%,2):IFwordswind%=0 wordswind%=1 ELSE wordswind%=0 4640WHEN 3:finished%=TRUE 4650ENDCASE 4660IF wordswind%=1 PROCBringToTop(words_Window%) ELSE PROCWindowClose(words_Window%) 4670ENDPROC 4680: 4690DEFPROCMenuChoicedisplay 4700CASE FNMenuChoice(0) OF 4710WHEN 1 4720WHEN 2:PROCMenuTick(solve_Menu%,2):PROCMenuTick(main_Menu%,2):PROCMenuTick(display_Menu%,2):IFwordswind%=0 wordswind%=1 ELSE wordswind%=0 4730WHEN 3:finished%=TRUE 4740ENDCASE 4750IF wordswind%=1 PROCBringToTop(words_Window%) ELSE PROCWindowClose(words_Window%) 4760ENDPROC 4770: 4780DEFPROCMenuChoicewords 4790CASE FNMenuChoice(0) OF 4800WHEN 1 4810WHEN 2 4820WHEN 3:finished%=TRUE 4830ENDCASE 4840ENDPROC 4850: 4860DEFPROCMenuChoicemain 4870CASE FNMenuChoice(0) OF 4880WHEN 1 4890WHEN 2:PROCMenuTick(main_Menu%,2):PROCMenuTick(solve_Menu%,2):PROCMenuTick(display_Menu%,2):IFwordswind%=0 wordswind%=1:PROCBringToTop(words_Window%) ELSE wordswind%=0:PROCWindowClose(words_Window%) 4900WHEN 3 4910WHEN 4 4920WHEN 5:old$=saveformat$:saveformat$="print":VDU2:PROCpre:PROCsavewords(""):PROCpost:VDU3:saveformat$=old$ 4930WHEN 6:old$=saveformat$:saveformat$="print":VDU2:PROCpre:PROCsavesquare:PROCpost:VDU3:saveformat$=old$ 4940WHEN 7:finished%=TRUE 4950ENDCASE 4960ENDPROC 4970: 4980DEFPROCEvent_LoadFile(file$,type%) 4990SYS"Hourglass_On" 5000CASE type% OF 5010WHEN &FFF:IFFNnew("load a new file")=1 PROCreset:PROCLoadWords(file$) 5020WHEN filetype%:IFFNnew("load a new set of words and grid")=1 PROCreset:PROCLoadOwn(file$) 5030ENDCASE 5040SYS"Hourglass_Off" 5050ENDPROC 5060: 5070DEFPROCLoadWords(file$) 5080file=OPENINfile$ 5090dummy$=FNcaps(GET$#file) 5100IFINSTR(dummy$,"ORD") AND INSTR(dummy$,"UARE"):dimx=LENGET$#file:words%=0:solveformat$="text":PROCloadsquare:ENDPROC 5110CLOSE#file:file=OPENINfile$ 5120words%=1:REPEAT 5130dummy$=GET$#file 5140IFFNlen(dummy$)>2 THEN 5150word$(words%)=LEFT$(dummy$,18):len%(words%)=FNlen(word$(words%)) 5160IFcaps% word$(words%)=FNcaps(word$(words%)) 5170words%+=1 5180ENDIF 5190UNTILEOF#file ORwords%=169 5200words%-=1:needs%=SUMlen%() 5210CLOSE#file 5220IFwords%=0 ENDPROC 5230PROCsort(1) 5240PROCMenuDisable(main_Menu%,4):PROCMenuDisable(main_Menu%,6) 5250PROCrec(2) 5260PROCafterload 5270PROCWindowClose(display_Window%) 5280IFINSTR(file$,"Wimp$Scrap")=0 PROCIconPutText(savewords_Window%,1,file$) 5290ENDPROC 5300: 5310DEFPROCafterload 5320PROCMenuEnable(main_Menu%,2):PROCMenuEnable(main_Menu%,3):PROCMenuEnable(main_Menu%,5):PROCMenuEnable(solve_Menu%,2):PROCMenuEnable(display_Menu%,2) 5330FORI%=1TO168:PROCIconPutText(words_Window%,I%+3,word$(I%)):NEXT 5340wordstatus$=STR$(words%)+" words loaded.":PROCIconPutText(main_Window%,5,wordstatus$) 5350PROCIconPutText(main_Window%,9,FNGetFileFromPathname(temp$)) 5360high%=0:PROCupdatesolvestate 5370FORI%=1TO168:IFwords%<I% PROCIconPutText(words_Window%,I%+3,""):NEXT 5380PROCww 5390PROCBringToTop(main_Window%):PROCBringToTop(words_Window%) 5400IFwordswind%=0 PROCMenuTick(main_Menu%,2):PROCMenuTick(solve_Menu%,2):PROCMenuTick(display_Menu%,2) 5410wordswind%=1:mainwind%=1:len%=FNlong 5420PROCMenuEnable(words_Menu%,2) 5430PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy):PROCIconPutText(main_Window%,20,STR$gaps) 5440ENDPROC 5450: 5460DEFPROCLoadOwn(file$) 5470file=OPENINfile$ 5480wsqtitle$=GET$#file:gaps=VALGET$#file:dimx=VALGET$#file:dimy=VALGET$#file 5490words%=VALGET$#file 5500FORI%=1TOwords% 5510word$(I%)=GET$#file:len%(I%)=VALGET$#file 5520start%(I%)=VALGET$#file:dir%(I%)=VALGET$#file 5530show%(I%)=VALGET$#file 5540sx%(I%)=VALGET$#file:sy%(I%)=VALGET$#file 5550ex%(I%)=VALGET$#file:ey%(I%)=VALGET$#file 5560NEXT 5570FORI%=1TOdimx*dimy 5580grid%(I%)=BGET#file 5590NEXT 5600CLOSE#file 5610solveformat$="own" 5620PROCafterload 5630PROCIconPutText(main_Window%,9,wsqtitle$) 5640PROCMenuEnable(main_Menu%,4):PROCMenuEnable(main_Menu%,6) 5650PROCIconPutText(main_Window%,6,FNoneormore(words%)+"placed - "+STR$gaps+"% gaps. ") 5660IFINSTR(file$,"Wimp$Scrap")=0 PROCIconPutText(savewsq_Window%,1,file$) 5670PROCdisplay:PROCIconPutText(solve_Window%,5,"Using wordsquare from creator program.") 5680wsqx=dimx:wsqy=dimy:wsqwords%=words%:needs%=SUMlen%() 5690FORI%=1TOwords%:IFshow%(I%)>0 high%+=1:PROCsic(words_Window%,I%+3,wcol%) 5700NEXT 5710PROCupdatesolvestate 5720ENDPROC 5730: 5740DEFPROCloadsquare 5750CLOSE#file:file=OPENINfile$:d$=GET$#file 5760dimy=0:d%=0:REPEAT:d$=GET$#file 5770IFLENd$>0 dimy+=1:FORI%=1TOdimx:d%+=1:grid%(d%)=ASCMID$(d$,I%,1):NEXT 5780UNTILEOF#file 5790wsqx=dimx:wsqy=dimy 5800CLOSE#file 5810RESTORE:FORI%=1TO10:READd%:PROCIconDisable(main_Window%,d%):NEXT 5820wordstatus$="No words found.":PROCIconPutText(main_Window%,5,wordstatus$) 5830FORI%=4TO6STEP2:PROCMenuEnable(main_Menu%,I%):NEXT 5840high%=0 5850PROCBringToTop(solve_Window%):PROCBringToTop(display_Window%):PROCWindowClose(words_Window%):wordswind%=0:dispwind%=1 5860solvewind%=1:PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy):PROCIconPutText(main_Window%,20,"100") 5870PROCdisplay:PROCIconPutText(solve_Window%,5,"Using textfile wordsquare '"+FNGetFileFromPathname(temp$)+"'.") 5880PROCIconPutText(main_Window%,6,"Using textfile wordsquare '"+FNGetFileFromPathname(temp$)+"'.") 5890PROCIconPutText(solve_Window%,6,"No words found.") 5900IFINSTR(file$,"Wimp$Scrap")=0 PROCIconPutText(savewsq_Window%,1,file$) 5910ENDPROC 5920: 5930DEFPROCloadprefs 5940file=OPENIN"<WordSq$Dir>.Prefs" 5950dbl%=VALGET$#file:force%=VALGET$#file:caps%=VALGET$#file 5960REM dbl%=0 for spacing off, -1 for spacing on 5970REM caps%=0 for preserve case, -1 for capitalise 5980REM force%=0 for force single column, -1 for automatic selection 5990col%=VALGET$#file:mcol%=VALGET$#file 6000wcol%=VALGET$#file:lcol%=VALGET$#file 6010titlefont$=GET$#file:titlept%=VALGET$#file 6020gridfont$=GET$#file:gridpt%=VALGET$#file 6030wordsfont$=GET$#file:wordspt%=VALGET$#file 6040pre$=GET$#file:post$=GET$#file 6050overon$=GET$#file:overoff$=GET$#file 6060underon$=GET$#file:underoff$=GET$#file 6070emphon$=GET$#file:emphoff$=GET$#file 6080CLOSE#file 6090tempdbl%=dbl%:tempcaps%=caps%:tempforce%=force% 6100tempcol%=col%:tempwcol%=wcol%:templcol%=lcol%:tempmcol%=mcol% 6110temptitlept%=titlept%:tempgridpt%=gridpt%:tempwordspt%=wordspt% 6120PROCsetprefs 6130IFdbl%=0 PROCSetIcon(prefs_Window%,3) 6140IFcaps%=-1 PROCSetIcon(prefs_Window%,29):PROCSetIcon(prefs_Window%,30) 6150IFforce%=0 PROCSetIcon(prefs_Window%,45):PROCSetIcon(prefs_Window%,46) 6160PROCsib(prefs_Window%,50,col%):PROCsib(prefs_Window%,51,mcol%) 6170PROCsib(prefs_Window%,53,wcol%):PROCsib(prefs_Window%,54,lcol%) 6180ENDPROC 6190: 6200: 6210DEFPROCsetprefs 6220PROCIconPutText(prefs_Window%,7,titlefont$):PROCIconPutText(prefs_Window%,32,STR$titlept%+" pt") 6230PROCIconPutText(prefs_Window%,9,gridfont$):PROCIconPutText(prefs_Window%,35,STR$gridpt%+" pt") 6240PROCIconPutText(prefs_Window%,13,wordsfont$):PROCIconPutText(prefs_Window%,38,STR$wordspt%+" pt") 6250PROCIconPutText(prefs_Window%,17,pre$):PROCIconPutText(prefs_Window%,23,post$):PROCIconPutText(prefs_Window%,24,overon$):PROCIconPutText(prefs_Window%,25,overoff$) 6260PROCIconPutText(prefs_Window%,26,underon$):PROCIconPutText(prefs_Window%,27,underoff$):PROCIconPutText(prefs_Window%,41,emphon$):PROCIconPutText(prefs_Window%,43,emphoff$) 6270PROCsib(prefs_Window%,50,col%):PROCsib(prefs_Window%,51,mcol%) 6280PROCsib(prefs_Window%,53,wcol%):PROCsib(prefs_Window%,54,lcol%) 6290FORI%=1TO168:IFshow%(I%)>0 PROCsic(words_Window%,I%+3,wcol%) 6300NEXT 6310PROCWindowForceDraw(display_Window%) 6320ENDPROC 6330: 6340DEFPROCgetprefs 6350dbl%=tempdbl%:caps%=tempcaps%:force%=tempforce% 6360col%=tempcol%:mcol%=tempmcol%:wcol%=tempwcol%:lcol%=templcol% 6370titlefont$=FNIconText(prefs_Window%,7):titlept%=VALFNIconText(prefs_Window%,32) 6380gridfont$=FNIconText(prefs_Window%,9):gridpt%=VALFNIconText(prefs_Window%,35) 6390wordsfont$=FNIconText(prefs_Window%,13):wordspt%=VALFNIconText(prefs_Window%,38) 6400pre$=FNIconText(prefs_Window%,17):post$=FNIconText(prefs_Window%,23) 6410overon$=FNIconText(prefs_Window%,24):overoff$=FNIconText(prefs_Window%,25) 6420underon$=FNIconText(prefs_Window%,26):underoff$=FNIconText(prefs_Window%,27) 6430emphon$=FNIconText(prefs_Window%,41):emphoff$=FNIconText(prefs_Window%,43) 6440FORI%=1TO168:IFshow%(I%)>0 PROCsic(words_Window%,I%+3,wcol%) 6450NEXT 6460PROCWindowForceDraw(display_Window%) 6470ENDPROC 6480: 6490DEFPROCEvent_SaveFile(file$,window%) 6500CASE window% OF 6510WHEN savewsq_Window%:PROCsavesquare 6520WHEN solve_Window% 6530WHEN info_Window% 6540WHEN prefs_Window% 6550WHEN savewords_Window%:PROCsavewords(file$) 6560WHEN display_Window% 6570WHEN words_Window% 6580WHEN main_Window% 6590ENDCASE 6600PROCMenuClose 6610ENDPROC 6620: 6630DEFPROCsavewords(file$) 6640IFsaveformat$<>"print" file=OPENOUTfile$ 6650FORI%=1TOwords%:PROCput(word$(I%),0):NEXT 6660IFsaveformat$<>"print" CLOSE#file:OSCLI"SETTYPE "+file$+" Text":wordssaved%=1 6670ENDPROC 6680: 6690DEFPROCsaveown(file$) 6700SWAP dimx,wsqx:SWAP dimy,wsqy:SWAP words%,wsqwords% 6710file=OPENOUTfile$ 6720BPUT#file,wsqtitle$:BPUT#file,STR$gaps:BPUT#file,STR$dimx:BPUT#file,STR$dimy 6730BPUT#file,STR$words% 6740FORI%=1TOwords% 6750BPUT#file,word$(I%):BPUT#file,STR$len%(I%) 6760BPUT#file,STR$start%(I%):BPUT#file,STR$dir%(I%) 6770BPUT#file,STR$show%(I%) 6780BPUT#file,STR$sx%(I%):BPUT#file,STR$sy%(I%) 6790BPUT#file,STR$ex%(I%):BPUT#file,STR$ey%(I%) 6800NEXT 6810FORI%=1TOdimx*dimy 6820BPUT#file,grid%(I%) 6830NEXT 6840CLOSE#file 6850OSCLI"SETTYPE "+file$+" 03C" 6860SWAP dimx,wsqx:SWAP dimy,wsqy:SWAP words%,wsqwords% 6870gridsaved%=1:wordssaved%=1 6880ENDPROC 6890: 6900DEFPROCsavesquare 6910IFsaveformat$="own" PROCsaveown(file$):ENDPROC 6920PROCcopyover 6930SWAP dimx,wsqx:SWAP dimy,wsqy:SWAP words%,wsqwords% 6940IFsaveformat$="draw" pad$=CHR$160 ELSE pad$=" " 6950len%=FNlong:b$()="":dummy%=0:IFdbl%=-1 d%=dimx*2 ELSE d%=dimx 6960FORI%=1TOdimy:FORJ%=1TOdimx:dummy%+=1 6970b$(I%)+=CHR$(grid%(dummy%)):IFdbl%=-1 AND J%<>dimx b$(I%)+=pad$ 6980NEXT:NEXT 6990dimx+=-(dbl%*dimx):IFdbl%=-1 dimx-=1 7000IFforce%=0 AND words%<=60 c%=1:GOTO7050 7010IF(words%>(4*dimy) OR words%>120) c%=4:GOTO7050 7020IFsaveformat$="draw" AND dimx<(len%*2) c%=1:GOTO7050 7030IFwords%>(1.3*dimy) OR words%>60 c%=2:GOTO7050 7040c%=1 7050IFsaveformat$="imp" PROCtabs 7060IFsaveformat$<>"print" file=OPENOUTfile$:PROCheader 7070IFsaveformat$<>"print" BPUT#file,wsqtitle$:ELSE PROCprinttitle 7080CASE c% OF 7090WHEN 1:PROCformat1 7100WHEN 2:PROCformat2 7110WHEN 4:PROCformat3 7120ENDCASE 7130IFdbl%=-1 AND dimx/2=INT(dimx/2) dimx=dimx/2:ELSE IFdbl%=-1 AND dimx/2<>INT(dimx/2) dimx=INT(dimx/2)+1 7140SWAP dimx,wsqx:SWAP dimy,wsqy:SWAP words%,wsqwords% 7150PROCcopyback 7160IFsaveformat$<>"print" BPUT#file,CHR$10:CLOSE#file:OSCLI"SETTYPE "+file$+" Text" ELSE PRINT 7170gridsaved%=1:wordssaved%=1 7180ENDPROC 7190: 7200DEFPROCsaveprefs 7210PROCgetprefs 7220file=OPENOUT"<WordSq$Dir>.Prefs" 7230BPUT#file,STR$dbl%:BPUT#file,STR$force%:BPUT#file,STR$caps% 7240BPUT#file,STR$col%:BPUT#file,STR$mcol% 7250BPUT#file,STR$wcol%:BPUT#file,STR$lcol% 7260BPUT#file,titlefont$:BPUT#file,STR$titlept% 7270BPUT#file,gridfont$:BPUT#file,STR$gridpt% 7280BPUT#file,wordsfont$:BPUT#file,STR$wordspt% 7290BPUT#file,pre$:BPUT#file,post$ 7300BPUT#file,overon$:BPUT#file,overoff$ 7310BPUT#file,underon$:BPUT#file,underoff$ 7320BPUT#file,emphon$:BPUT#file,emphoff$ 7330CLOSE#file 7340ENDPROC 7350: 7360DEFPROCSetIcon(w%,i%) 7370wimp%!0=w%:wimp%!4=i%:wimp%!8=&200000:wimp%!12=0 7380SYS "Wimp_SetIconState",,wimp% 7390ENDPROC 7400: 7410DEFPROCrec(type%) 7420IFwords%<1 dimx=0:dimy=0:ENDPROC 7430IFtype%=2 gaps=25 7440needs%=SUMlen%() 7450a=(1/(1-(gaps/100)))*needs%:dimy=FNround(SQR(a/1.2)):dimx=FNround(a/dimy) 7460IF words%<=120 maxh=60 ELSE maxh=INT(59-((words%-120)/2)) 7470len%=FNlong 7480IFlen%>FNmax PROCdrec:ENDPROC 7490IFdimy<3 dimy=3 ELSE IF dimx>40 dimx=40:dimy=FNround(a/40) 7500IFmaxh<dimy dimy=maxh 7510IFFNgaps<10 OR (dimx<len% AND dimy<len%) PROCAlert("WordSq","All of these words will not fit into the largest size grid - you must delete a few, or shorten some of the longer ones.") 7520IFtype%=2 gaps=FNgaps 7530IFgaps<0 gaps=0 7540PROCIconPutText(main_Window%,20,STR$gaps) 7550ENDPROC 7560: 7570DEFPROCdrec 7580I%=0:REPEAT:I%+=1:UNTILI%*len%>a*0.95:dimx=len%:dimy=I%:IFdimy<3 dimy=3 7590IFtype%=2 gaps=FNgaps:PROCIconPutText(main_Window%,20,STR$gaps) 7600ENDPROC 7610: 7620DEFFNlen(dummy$) 7630J%=LENdummy$:FORI%=1TOLENdummy$:C=ASC(MID$(dummy$,I%,1)):IF C<65 OR C>122 OR (C>90 AND C<97) J%-=1 7640NEXT:=J% 7650: 7660DEFFNlong 7670D=0:FORI%=1TOwords%:IFLENword$(I%)>D D=LENword$(I%) 7680NEXT:=D 7690: 7700DEFFNmax 7710IFdimx>dimy =dimx ELSE =dimy 7720: 7730DEFFNround(num)=INT(num+0.5) 7740: 7750DEFPROCaddword 7760w$=FNIconText(main_Window%,26):IFFNlen(w$)<3 PROCAlert("WordSq","Words must be three alphabetical characters long or more."):ENDPROC 7770SYS"Hourglass_On" 7780IFwords%=0 PROCMenuEnable(main_Menu%,2):PROCMenuEnable(main_Menu%,3):PROCMenuEnable(main_Menu%,5):PROCMenuEnable(solve_Menu%,2):PROCMenuEnable(display_Menu%,2) 7790words%+=1:word$(words%)=w$ 7800PROCclearall 7810PROCupdatesolvestate:IFcaps% word$(words%)=FNcaps(word$(words%)) 7820len%(words%)=FNlen(word$(words%)) 7830PROCsort(1) 7840FORI%=1TOwords%:PROCIconPutText(words_Window%,I%+3,word$(I%)):NEXT 7850PROCww 7860PROCrec(2):PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy) 7870IFwords%=1 PROCMenuEnable(words_Menu%,2):IFwordswind%=0 wordswind%=1:PROCBringToTop(words_Window%):PROCMenuTick(solve_Menu%,2):PROCMenuTick(main_Menu%,2):PROCMenuTick(display_Menu%,2) 7880PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCcaret(0) 7890wordssaved%=0 7900SYS"Hourglass_Off" 7910ENDPROC 7920: 7930DEFPROCdeleteword 7940IFselection%=0 ENDPROC 7950IFsolveformat$<>"own" GOTO8020 7960o%=-1:number%=0:FORI%=1TOwords%:IFselected%(I%)=1 AND start%(I%)<>0 AND dir%(I%)<>0 number%+=1:NEXT:ELSE NEXT 7970IFnumber%>0 THEN 7980IFselection%=1 d$="This word forms " ELSE d$=FNoneormore(number%)+"amongst the selection form " 7990o%=FNWindowCancel("WordSq",d$+"part of the current wordsquare. Continuing with this operation will cause the wordsquare to be deleted. Click OK to delete.") 8000ENDIF 8010IFo%=0 ENDPROC ELSE IFo%=-1 AND number%>0 PROCWindowClose(display_Window%):PROCng 8020SYS"Hourglass_On" 8030number%=0:FORI%=1TOwords%:IFselected%(I%)=1 word$(I%)="~~":number%+=1:PROCSetIcon(words_Window%,I%+3):selected%(I%)=0:IFshow%(I%)>0 show%(I%)=0:high%-=1 8040NEXT:selection%=0:PROCsetbutton 8050PROCsort(1):PROCrep(0) 8060FORI%=1TOwords%:PROCIconPutText(words_Window%,I%+3,word$(I%)):NEXT 8070words%-=number%:IFsolveformat$="text" wsqwords%-=number% 8080PROCupdatesolvestate:needs%=SUMlen%() 8090IFwords%=0 THEN 8100PROCMenuDisable(main_Menu%,3):PROCMenuDisable(main_Menu%,2):PROCMenuDisable(solve_Menu%,2):PROCMenuDisable(main_Menu%,5):PROCMenuDisable(display_Menu%,2):PROCWindowClose(words_Window%) 8110PROCMenuTick(main_Menu%,2):PROCMenuTick(solve_Menu%,2):PROCMenuTick(display_Menu%,2) 8120wordswind%=0:wordssaved%=1 8130ENDIF 8140IFwords%>0 wordssaved%=0 8150PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCcaret(0) 8160PROCww:IFdispwind%=1 PROCWindowForceDraw(display_Window%) 8170IFsolveformat$="text" gaps=FNgaps:PROCIconPutText(main_Window%,20,STR$gaps):SYS"Hourglass_Off":ENDPROC 8180gaps=25:PROCIconPutText(main_Window%,20,STR$gaps) 8190PROCrec(2):PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy) 8200SYS"Hourglass_Off" 8210ENDPROC 8220: 8230DEFPROCamendword 8240IFselection%<>1 ENDPROC 8250w$=FNIconText(main_Window%,26):IFFNlen(w$)<3 PROCAlert("WordSq","Words must be three alphabetical characters long or more."):ENDPROC 8260IFsolveformat$="" GOTO8330 8270o%=-1:number%=0:FORI%=1TOwords%:IFselected%(I%)=1 AND start%(I%)<>0 AND dir%(I%)<>0 number%+=1:NEXT:ELSE NEXT 8280IFnumber%>0 THEN 8290IFselection%=1 d$="This word forms " ELSE d$=FNoneormore(number%)+"amongst the selection form " 8300o%=FNWindowCancel("WordSq",d$+"part of the current wordsquare. Continuing with this operation will cause the wordsquare to be deleted. Click OK to amend.") 8310ENDIF 8320IFo%=0 ENDPROC ELSE IFo%=-1 AND number%>0 PROCWindowClose(display_Window%):PROCng 8330SYS"Hourglass_On" 8340FORI%=1TOwords%:IFselected%(I%)=1 dummy%=I% 8350NEXT:word$(dummy%)=FNIconText(main_Window%,26):len%(dummy%)=FNlen(word$(dummy%)) 8360PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCcaret(0) 8370PROCSetIcon(words_Window%,dummy%+3) 8380PROCsort(1):FORI%=1TOwords%:PROCIconPutText(words_Window%,I%+3,word$(I%)):NEXT 8390PROCww 8400selected%(dummy%)=0:selection%=0:PROCsetbutton 8410PROCupdatesolvestate 8420PROCrec(2):PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy) 8430wordssaved%=0 8440SYS"Hourglass_Off" 8450ENDPROC 8460: 8470DEFPROCsort(type%) 8480IFtype%=2 type%=1:r%=1 ELSE r%=0 8490P%=words%DIV2:IFP%=0ENDPROC 8500REPEAT:R%=words%-P%:Q%=1 8510REPEAT:W%=Q% 8520REPEAT:U%=W%+P% 8530IFtype%=1ANDword$(W%)<=word$(U%)ef%=1:GOTO8580 8540IFtype%=0ANDlen%(W%)>=len%(U%)ef%=1:GOTO8580 8550SWAPword$(W%),word$(U%) 8560IFr%=0 SWAPlen%(W%),len%(U%):SWAPstart%(W%),start%(U%):SWAPdir%(W%),dir%(U%):SWAPshow%(W%),show%(U%):SWAPsx%(W%),sx%(U%):SWAPsy%(W%),sy%(U%):SWAPex%(W%),ex%(U%):SWAPey%(W%),ey%(U%) 8570W%-=P% 8580UNTILW%<1ORef%=1:ef%=0:Q%+=1 8590UNTILQ%>R%:P%=P%DIV2 8600UNTILP%=0 8610ENDPROC 8620: 8630DEFPROCrep(type%) 8640FORI%=1TOwords%:IFword$(I%)="~~" THEN 8650word$(I%)="" 8660IFtype%=0 len%(I%)=0:start%(I%)=0:dir%(I%)=0:selected%(I%)=0:show%(I%)=0:sx%(I%)=0:sy%(I%)=0:ex%(I%)=0:ey%(I%)=0 8670ENDIF 8680NEXT 8690ENDPROC 8700: 8710DEFPROCbumpx(inc%) 8720IFwords%=0 ENDPROC 8730IFbutton%=1 inc%=-inc% 8740IF (dimx*dimy)<(needs%*1.12) AND inc%=-1 ENDPROC 8750IF (dimx=40 AND inc%>0) OR (dimx=0 AND inc%<0) ENDPROC 8760dimx+=inc%:IF FNgaps<10:dimx-=inc%:ENDPROC 8770PROCIconPutText(main_Window%,12,STR$dimx) 8780gaps=FNgaps:PROCIconPutText(main_Window%,20,STR$gaps) 8790ENDPROC 8800: 8810DEFPROCbumpy(inc%) 8820IFwords%=0 ENDPROC 8830IFbutton%=1 inc%=-inc% 8840IF (dimx*dimy)<(needs%*(1+(gaps/100))) AND inc%=-1 ENDPROC 8850IF (dimy=maxh AND inc%>0) OR (dimy=0 AND inc%<0) ENDPROC 8860dimy+=inc%:IF FNgaps<10:dimy-=inc%:ENDPROC 8870PROCIconPutText(main_Window%,16,STR$dimy) 8880gaps=FNgaps:PROCIconPutText(main_Window%,20,STR$gaps) 8890ENDPROC 8900: 8910DEFPROCbumpgaps(inc%) 8920IFgaps<10 PROCrec(0):ENDPROC 8930IFbutton%=1 inc%=-inc% 8940IF (gaps=10 AND inc%=-1) ENDPROC 8950IF (gaps=maxh AND inc%=1) ENDPROC 8960gaps+=inc% 8970PROCIconPutText(main_Window%,20,STR$gaps) 8980PROCrec(0):PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy) 8990ENDPROC 9000: 9010DEFFNbumppt(inc%,dummy%,d%) 9020IF (dummy%=6 AND inc%=-1) OR (dummy%=24 AND inc%=1):=dummy% 9030IFbutton%=1 inc%=-inc% 9040dummy%+=inc%:PROCIconPutText(prefs_Window%,d%,STR$dummy%+" pt") 9050=dummy% 9060: 9070DEFFNgaps 9080IFdimx*dimy=0 =gaps 9090=FNround((((dimx*dimy)-needs%)/(dimx*dimy))*100) 9100: 9110DEFFNoneormore(dummy%) 9120IF dummy%=1 ="1 word " 9130IF dummy%=0 ="No words " 9140=STR$dummy%+" words " 9150: 9160DEFFNnone(dummy%) 9170IFdummy%=0 ="None " ELSE =STR$dummy%+" " 9180: 9190DEFPROCcreate 9200IF words%<1 PROCAlert("WordSq","There are no words to be placed in a wordsquare!"):ENDPROC 9210d%=0:IFwords%<121 GOTO9250 ELSE:IF(dbl%=0 AND dimx<((len%*2)+1)) OR (dbl%=-1 AND dimx<(len%+1)) THEN 9220IF dbl%=0 d%=(len%*2)+1 ELSE d%=len%+1 9230PROCAlert("WordSq","The number of words means that the grid must be at least "+STR$d%+" characters across. Please reset this value and try again.") 9240ENDIF 9250IFd%>0 ENDPROC 9260wsqtitle$=FNIconText(main_Window%,9) 9270IF(dimx*dimy)<(1.1*needs%) OR (dimx<len% AND dimy<len%) PROCAlert("WordSq","All of these words will not fit into the largest size grid - you must delete a few, or shorten some of the longer ones."):ENDPROC 9280SYS"Hourglass_On" 9290wsqx=dimx:wsqy=dimy 9300not%=0:pla%=0:F%=0:startx%=0:starty%=0 9310grid%()=0:start%()=0:dir%()=0:PROCsort(0) 9320Z%=0:FORI%=1TOwords%:w$=FNstrip(word$(I%)) 9330A%=0:tr%=0:F%=0 9340REPEAT:tr%+=1 9350IFINKEY-113 PROCAlert("WordSq","Creation interrupted."):Z%=1 9360A%=RND(dimx*dimy) 9370IF grid%(A%)<>0 AND grid%(A%)<>ASC(LEFT$(w$,1)) GOTO9360 9380PROCends:PROCfit 9390UNTILF%=1 OR Z%=1 OR tr%>=(dimx*dimy)+dimx+dimy 9400IFZ%=1 I%=words%+1:NEXT:PROCng:Z%=0:ENDPROC 9410IFtr%>=(dimx*dimy)+dimx+dimy not%+=1:start%(I%)=0:dir%(I%)=99:ELSE pla%+=1 9420PROCIconPutText(main_Window%,6,"Creating - "+FNoneormore(pla%)+"placed so far.") 9430IFdir%(I%)<>99 PROCpositions(I%,dir%(I%)) 9440SYS"Hourglass_Percentage",FNround((pla%+not%)/words%*100) 9450NEXT:PROCgaps:PROCsort(1):PROCIconPutText(main_Window%,6,FNoneormore(pla%)+"placed - "+STR$wsqgaps+"% gaps. ") 9460SYS"Hourglass_Off":wsqwords%=pla% 9470IF pla%=0 PROCAlert("WordSq","In fact, no words could be placed. Try increasing the grid size."):PROCIconPutText(main_Window%,6,"No grid formed."):ENDPROC 9480IFnot%>0 THEN 9490IFnot%=1 d$="It " ELSE d$="They " 9500PROCAlert("WordSq","When creating the wordsquare, "+FNoneormore(not%)+"could not be placed. "+d$+"will remain in memory and appear selected in the word list window, but will not show up on the wordsquare.") 9510PROCclearall:selectedword$="":FORI%=1TOwords% 9520IFdir%(I%)=99 dir%(I%)=0:PROCSetIcon(words_Window%,I%+3):selected%(I%)=1:selection%+=1:selectedword$=word$(I%) 9530NEXT:PROCsetbutton 9540IFselection%=1 d$=selectedword$ ELSE d$="" 9550PROCIconPutText(main_Window%,26,d$):PROCIconPutText(solve_Window%,17,d$):PROCcaret(LENd$/2) 9560ENDIF 9570PROCMenuEnable(main_Menu%,4):PROCMenuEnable(main_Menu%,5):PROCMenuEnable(main_Menu%,6) 9580PROCdisplay:solveformat$="own":PROCupdatesolvestate 9590PROCIconPutText(solve_Window%,5,"Using wordsquare from creator program.") 9600IFsolvewind% PROCBringToTop(display_Window%) 9610wsqx=dimx:wsqy=dimy:gridsaved%=0 9620ENDPROC 9630: 9640DEFFNcaps(d$) 9650LOCALK% 9660IFLENd$=0 ="" 9670FORK%=1TOLENd$:ch%=ASC(MID$(d$,K%,1)) 9680IFch%>96 AND ch%<123 MID$(d$,K%,1)=CHR$(ch%AND223) 9690NEXT 9700=d$ 9710: 9720DEFPROCends 9730po=A%:po-=1:REPEAT:po+=1:UNTILINT(po/dimx)=po/dimx:me%=po:mw%=me%-(dimx-1) 9740ENDPROC 9750: 9760DEFPROCfit 9770L%=LENw$-1 9780IFA%-L%>=mw% AND A%-(dimx*L%)>=1 PROCfill(-1,-dimx):dir%(I%)=8:IF F% ENDPROC 9790IFA%-L%>=mw% AND A%+(dimx*L%)<=dimx*dimy PROCfill(-1,dimx):dir%(I%)=6:IF F% ENDPROC 9800IFA%+L%<=me% AND A%+(dimx*L%)<=dimx*dimy PROCfill(1,dimx):dir%(I%)=4:IF F% ENDPROC 9810IFA%+L%<=me% AND A%-(dimx*L%)>=1 PROCfill(1,-dimx):dir%(I%)=2:IF F% ENDPROC 9820IFA%-L%>=mw% PROCfill(-1,0):dir%(I%)=7:IF F% ENDPROC 9830IFA%-(dimx*L%)>=1 PROCfill(0,-dimx):dir%(I%)=1:IF F% ENDPROC 9840IFA%+(dimx*L%)<=dimx*dimy PROCfill(0,dimx):dir%(I%)=5:IF F% ENDPROC 9850IFA%+L%<=me%:PROCfill(1,0):dir%(I%)=3:IF F% ENDPROC 9860ENDPROC 9870: 9880DEFPROCfill(x,y) 9890p%=A%:FORK%=2TOLENw$:p%+=(x+y) 9900IFgrid%(p%)<>ASC(MID$(w$,K%,1))AND grid%(p%)<>0 K%=LENw$+1:NEXT:ENDPROC 9910NEXT 9920start%(I%)=A% 9930p%=A%:FORK%=1TOLENw$:grid%(p%)=ASC(MID$(w$,K%,1)):p%+=(x+y):NEXT:F%=1 9940ENDPROC 9950: 9960DEFPROCgaps 9970wsqgaps=0:FORI%=1TOdimx*dimy:IFgrid%(I%)=0 grid%(I%)=RND(26)+64:wsqgaps+=1 9980NEXT:wsqgaps=FNround((wsqgaps/(dimx*dimy))*100) 9990ENDPROC 10000: 10010DEFPROCformat1 10020FORI%=1TOwords% 10030IFI%=1 PROCunder ELSE IFI%=dimy+1 PROCover:GOTO10070 10040IFsaveformat$="draw" BPUT#file,"\1";:ELSEIFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10050IFI%<=dimy PROCput(b$(I%),1):ELSE IFsaveformat$<>"imp" PROCput(FNpad(dimx),1) 10060IFsaveformat$="draw" BPUT#file,"\2";:ELSEIFsaveformat$="imp" BPUT#file,"{""Words"" on}"; 10070PROCput(FNpad(3),1) 10080PROCput(word$(I%),0):NEXT 10090IFwords%=dimy PROCover:ENDPROC:ELSEIF words%>=dimy ENDPROC 10100FORI%=words%+1 TO dimy:IFsaveformat$="draw" BPUT#file,"\1";:ELSEIFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10110PROCput(b$(I%),0):NEXT 10120ENDPROC 10130ENDPROC 10140: 10150DEFPROCformat2 10160IFINT(words%/2)<>words%/2 C1=INT(words%/2)+1:C2=words%-C1:ELSE C1=words%/2:C2=C1 10170FORI%=1TOC1 10180IFI%=1 PROCunder ELSE IFI%=dimy+1 PROCover:GOTO10220 10190IFsaveformat$="draw" BPUT#file,"\1";:ELSE IFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10200IFI%<=dimy PROCput(b$(I%),1):ELSE IFsaveformat$<>"imp" PROCput(FNpad(dimx),1) 10210IFsaveformat$="draw" BPUT#file,"\2";:ELSE IFsaveformat$="imp" BPUT#file,"{""Words"" on}"; 10220PROCput(FNpad(3),1):PROCput(word$(I%),1):PROCput(FNpad(len%-LENword$(I%)+1),1):PROCput(word$(C1+I%),0):NEXT 10230IFC1=dimy PROCover:ENDPROC:ELSEIF C1>=dimy ENDPROC 10240IFsaveformat$="draw" BPUT#file,"\1";:ELSE IFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10250FORI%=C1+1 TO dimy:PROCput(b$(I%),0):NEXT 10260PROCover 10270ENDPROC 10280: 10290DEFPROCformat3 10300C%=words%-((dimy+1)*2):D%=C%+1:REPEAT:D%-=1:UNTILINT(D%/4)=D%/4:E%=C%-D% 10310IF E%=0:E%=4:C1=D%/4:C2=C1:C3=C1:C4=C3 10320IF E%=1:C1=(D%/4)+1:C2=D%/4:C3=C2:C4=C3 10330IF E%=2:C1=(D%/4)+1:C2=(D%/4)+1:C3=D%/4:C4=C3 10340IF E%=3:C1=(D%/4)+1:C2=(D%/4)+1:C3=(D%/4)+1:C4=D%/4 10350FORI%=1TOdimy 10360IFI%=1PROCunder 10370IFsaveformat$="draw" BPUT#file,"\1";:ELSE IFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10380PROCput(b$(I%),1):PROCput(FNpad(3),1):IFsaveformat$="draw" BPUT#file,"\2";:ELSE IFsaveformat$="imp" BPUT#file,"{""Words"" on}"; 10390PROCput(word$(C1+C2+I%),1):PROCput(FNpad(len%+1-LENword$(C1+C2+I%)),1):PROCput(word$(dimy+C1+C2+C3+1+I%),0):NEXT 10400IFsaveformat$="draw" BPUT#file,"\1";:ELSE IFsaveformat$="imp" BPUT#file,"{""Grid"" on}"; 10410PROCover:PROCput(FNpad(3),1) 10420IFsaveformat$="draw" BPUT#file,"\2";:ELSE IFsaveformat$="imp" BPUT#file,"{""Words"" on}"; 10430PROCput(word$(dimy+C1+C2+1),1):PROCput(FNpad(len%+1-LENword$(dimy+C1+C2+1)),1):PROCput(word$(dimy+dimy+C1+C2+C3+2),0) 10440FORI%=1TOC1 10450IFsaveformat$="draw" BPUT#file,"\2";:ELSE IFsaveformat$="imp" BPUT#file,"{""Words"" on}"; 10460PROCput(word$(I%),1):PROCput(FNpad(len%+1-LENword$(I%)),1) 10470IFI%<C1 OR (I%=C1 AND E%>=2) PROCput(word$(C1+I%),1):PROCput(FNpad(dimx+3-(len%+1-LENword$(I%)+LENword$(I%)+LENword$(C1+I%))),1) 10480IFI%<C1 OR (I%=C1 AND E%>=3) PROCput(word$(dimy+C1+C2+1+I%),1):PROCput(FNpad(len%+1-LENword$(dimy+C1+C2+1+I%)),1) 10490IFI%<C1 OR (I%=C1 AND E%>=4) PROCput(word$(dimy+dimy+C1+C2+C3+2+I%),0) 10500NEXT 10510ENDPROC 10520: 10530DEFPROCtabs 10540case%=FNcase 10550IFcase%=0 a=2.7:b=0.44 ELSE a=4:b=0.65 10560CASE c% OF 10570WHEN 1:t1%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:tab$="tabs "+STR$t1%+"pt" 10580WHEN 2:t1%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:t2%=t1%+5+(len%*(a+((wordspt%-6)*b))):tab$="tabs "+STR$t1%+"pt,"+STR$t2%+"pt" 10590WHEN 4:t1%=15+(len%*(a+((wordspt%-6)*b))):t2%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:t3%=t2%+15+(len%*(a+((wordspt%-6)*b))):tab$="tabs "+STR$t1%+"pt,"+STR$t2%+"pt,"+STR$t3%+"pt" 10600ENDCASE 10610ENDPROC 10620: 10630DEFPROCheader 10640CASE saveformat$ OF 10650WHEN "text" 10660WHEN "draw":header$="\! 1"+CHR$10+"\F 0 "+titlefont$+" "+STR$titlept%+CHR$10+"\F 1 "+gridfont$+" "+STR$gridpt%+CHR$10+"\F 2 "+wordsfont$+" "+STR$wordspt%+CHR$10+"\L"+STR$(FNround(gridpt%*1.08))+CHR$10 10670header$+="\P"+STR$(FNround((gridpt%*1.08)/1.75))+CHR$10+"\0" 10680BPUT#file,header$ 10690WHEN "imp":header$="{define style ""Title"";font "+titlefont$+";fontsize "+STR$titlept%+"pt;"+tab$+"}{define style ""Grid"";font "+gridfont$+";fontsize "+STR$gridpt%+"pt;"+tab$+"}" 10700header$+="{define style ""Words"";font "+wordsfont$+";fontsize "+STR$wordspt%+"pt;"+tab$+"}{""Title"" on}" 10710BPUT#file,header$; 10720ENDCASE 10730ENDPROC 10740: 10750DEFFNpad(d%) 10760IF saveformat$="imp" ="{tab}" 10770IF saveformat$="draw" =STRING$(d%,CHR$160) 10780=STRING$(d%," ") 10790: 10800DEFPROCput(d$,d%) 10810IFsaveformat$="print" PRINTd$;:IFd%=0 PRINT 10820IFsaveformat$<>"print" BPUT#file,d$;:IFd%=0 BPUT#file,"" 10830ENDPROC 10840: 10850DEFPROCover 10860IFsaveformat$="draw" a$="\1":b$=FNpad(dimx):c$="\2" 10870IFsaveformat$="imp" THEN 10880IFc%=4 b$="{tab}" ELSE b$="" 10890a$="{""Grid"" on}":c$="{""Words"" on}" 10900ENDIF 10910IFsaveformat$="text" a$="":b$=FNpad(dimx):c$="" 10920IFsaveformat$<>"print" OR overon$="" OR overoff$="" PROCput(a$+b$+c$,1):ENDPROC 10930PROCgetecho(overon$):PROCput(FNpad(dimx),1):PROCgetecho(overoff$) 10940ENDPROC 10950: 10960DEFPROCunder 10970IFsaveformat$<>"print" OR underon$="" OR underoff$="" PROCput("",0):ENDPROC 10980PROCgetecho(underon$):PROCput(FNpad(dimx),0):PROCgetecho(underoff$) 10990ENDPROC 11000: 11010DEFPROCpre 11020IFsaveformat$<>"print" OR pre$="" ENDPROC 11030PROCgetecho(pre$) 11040ENDPROC 11050: 11060DEFPROCpost 11070IFsaveformat$<>"print" OR post$="" ENDPROC 11080PROCgetecho(post$) 11090ENDPROC 11100: 11110DEFPROCprinttitle 11120IFemphon$="" OR emphoff$="" PRINTwsqtitle$:ENDPROC 11130PROCgetecho(emphon$):PRINTwsqtitle$:PROCgetecho(emphoff$) 11140ENDPROC 11150: 11160DEFPROCgetecho(d$) 11170d%=1 11180FORK%=1TOLENd$:dummy$="":IFMID$(d$,K%,1)="," dummy$=MID$(d$,d%,K%-d%):d%=K%+1:ELSE IF K%=LENd$ dummy$=MID$(d$,d%,K%-d%+1) 11190IFdummy$<>"" PRINTCHR$1;CHR$VALdummy$; 11200NEXT 11210ENDPROC 11220: 11230DEFPROCcaret(c%) 11240IFc%>1000 AND solvewind% c%-=1000:PROCIconCaret(solve_Window%,17,c%):ENDPROC ELSE IFc%>1000 ENDPROC 11250IFsolvewind% PROCIconCaret(solve_Window%,17,c%) 11260IFmainwind% AND solveformat$<>"text" PROCIconCaret(main_Window%,26,c%) 11270ENDPROC 11280: 11290DEFFNnew(extra$) 11300message$="You have not saved your ":IFwordssaved%=0 message$+="words":IFgridsaved%=0 message$+=" or" 11310IFgridsaved%=0 message$+=" grid. " ELSE message$+=". " 11320message$+="Are you sure you want to "+extra$+"?" 11330IFwordssaved%=1 AND gridsaved%=1 message$="" 11340IF message$<>"":IFFNWindowCancel("WordSq",message$)=0 =0 11350=1 11360: 11370DEFPROCreset 11380SYS"Hourglass_On" 11390PROCcloseall 11400selection%=0:word$()="":grid%()=0:start%()=0:dir%()=0:len%()=0:PROCsetbutton 11410words%=0:gaps=25:dimx=0:dimy=0:solveformat$="":high%=0:show%()=0 11420sx%()=0:sy%()=0:ex%()=0:ey%()=0:show%=0:found%=0:done%=0 11430wsqx=0:wsqy=0:wsqwords%=0:wordssaved%=1:gridsaved%=1:startx%=0:starty%=0 11440RESTORE:FORI%=1TO10:READd%:PROCIconEnable(main_Window%,d%):NEXT 11450PROCIconPutText(main_Window%,5,"No words entered."):PROCIconPutText(main_Window%,6,"No grid formed.") 11460PROCIconPutText(main_Window%,12,STR$dimx):PROCIconPutText(main_Window%,16,STR$dimy):PROCIconPutText(main_Window%,20,STR$gaps) 11470PROCIconPutText(solve_Window%,5,"No wordsquare currently available."):PROCIconPutText(solve_Window%,6,"No words available - None shown.") 11480PROCIconPutText(main_Window%,26,""):PROCIconPutText(solve_Window%,17,""):PROCIconPutText(main_Window%,9,"<Untitled>") 11490FORI%=4 TO 171:PROCIconPutText(words_Window%,I%,""):PROCsic(words_Window%,I%,7):IFselected%(I%-3)=1 selected%(I%-3)=0:PROCSetIcon(words_Window%,I%):NEXT:ELSE NEXT 11500PROCww 11510IFwordswind%=1 PROCMenuTick(display_Menu%,2):PROCMenuTick(main_Menu%,2):PROCMenuTick(solve_Menu%,2) 11520PROCMenuDisable(main_Menu%,2):PROCMenuDisable(main_Menu%,3):PROCMenuDisable(main_Menu%,4):PROCMenuDisable(main_Menu%,5):PROCMenuDisable(display_Menu%,2) 11530PROCMenuDisable(solve_Menu%,2) 11540PROCMenuDisable(words_Menu%,2) 11550selected%()=0:mainwind%=0:solvewind%=0:dispwind%=0 11560SYS"Hourglass_Off" 11570ENDPROC 11580: 11590DEFPROCng 11600grid%()=0:start%()=0:dir%()=0:solveformat$="":high%=0:show%()=0 11610wsqx=0:wsqy=0:wsqwords%=0:gridsaved%=1:show%=0:found%=0:done%=0 11620PROCIconPutText(main_Window%,6,"No grid formed.") 11630PROCIconPutText(solve_Window%,5,"No wordsquare currently available."):PROCIconPutText(solve_Window%,6,"No words available - None shown.") 11640PROCMenuDisable(main_Menu%,4):PROCMenuDisable(main_Menu%,5):PROCMenuDisable(main_Menu%,6) 11650FORI%=4TO171:PROCsic(words_Window%,I%,7):NEXT 11660IFZ%=1 SYS"Hourglass_On":PROCsort(1):SYS"Hourglass_Off":ENDPROC 11670gaps=25:dimx=0:dimy=0 11680PROCIconPutText(main_Window%,20,STR$gaps) 11690ENDPROC 11700: 11710DEFPROCcloseall 11720PROCWindowClose(display_Window%):PROCWindowClose(main_Window%):PROCWindowClose(solve_Window%):PROCWindowClose(words_Window%):PROCWindowClose(prefs_Window%) 11730wordswind%=0:solvewind%=0:dispwind%=0 11740ENDPROC 11750: 11760DEFPROCdisplay 11770dummy%=0:FORI%=1TOdimy:dummy$="":FORJ%=1TOdimx:dummy%+=1 11780dummy$+=CHR$(grid%(dummy%)):IFJ%<>dimx dummy$+=" " 11790NEXT:IFLENdummy$<79 dummy$+=STRING$(79-LENdummy$," ") 11800PROCIconPutText(display_Window%,I%+1,dummy$):NEXT 11810IFdimy<60 FORI%=dimy+1TO60:PROCIconPutText(display_Window%,I%+1,STRING$(79," ")):NEXT 11820PROCresize(display_Window%,0,-84-(dimy*44),54+(dimx*32),0) 11830ENDPROC 11840: 11850DEFPROCupdatesolvestate 11860CASE solveformat$ OF 11870WHEN "own" 11880wordstatus$=FNoneormore(wsqwords%)+"in the grid - "+FNnone(high%)+"shown - "+FNnone(selection%)+"selected.":PROCIconPutText(solve_Window%,6,wordstatus$) 11890wordstatus$=FNoneormore(words%)+"entered - "+FNnone(selection%)+"selected.":PROCIconPutText(main_Window%,5,wordstatus$) 11900WHEN "text" 11910wordstatus$=FNoneormore(wsqwords%)+"in the grid - "+FNnone(high%)+"shown - "+FNnone(selection%)+"selected.":PROCIconPutText(solve_Window%,6,wordstatus$) 11920wordstatus$=FNoneormore(wsqwords%)+"found - "+FNnone(selection%)+"selected.":PROCIconPutText(main_Window%,5,wordstatus$) 11930WHEN "" 11940wordstatus$=FNoneormore(words%)+"entered - "+FNnone(selection%)+"selected.":PROCIconPutText(main_Window%,5,wordstatus$) 11950ENDCASE 11960ENDPROC 11970: 11980DEFPROCsetbutton 11990IFselection%<2 d$=" Word" ELSE d$=" Selection" 12000PROCIconPutText(main_Window%,25,"Delete"+d$) 12010PROCIconPutText(solve_Window%,8,"Remove"+d$) 12020PROCIconPutText(solve_Window%,9,"Show"+d$) 12030ENDPROC 12040: 12050DEFPROCfind(d$) 12060SYS"Hourglass_On" 12070w$=FNstrip(d$) 12080F%=0:I%=words%+1 12090FORA%=1TOdimx*dimy 12100SYS"Hourglass_Percentage",A%/(dimx*dimy)*100 12110IFgrid%(A%)=ASCLEFT$(d$,1) PROCnextstep 12120NEXT 12130SYS"Hourglass_Off" 12140IFF%=0 PROCAlert("WordSq","The word '"+d$+"' does not exist in the currently loaded wordsquare."):ENDPROC 12150IFF%>1 AND FNpalindrome(d$)=0 PROCAlert("WordSq","More than one occurrence of "+gibbet$+" has been found, so it will be ignored"):ENDPROC 12160SYS"Hourglass_On" 12170d$=FNIconText(solve_Window%,17):IFcaps%=-1 d$=FNcaps(d$) 12180words%+=1:wsqwords%+=1:word$(words%)=d$:len%(words%)=FNlen(d$):dir%(words%)=d%:needs%=SUMlen%():gaps=FNgaps 12190PROCpositions(words%,dir%(words%)) 12200high%+=1:show%(words%)=1:PROCsort(1):FORI%=1TOwords%:PROCIconPutText(words_Window%,I%+3,word$(I%)):NEXT 12210PROCww 12220need%=1:wordssaved%=0 12230SYS"Hourglass_Off" 12240ENDPROC 12250: 12260DEFPROCnextstep 12270PROCends:L%=LENd$-1 12280IFA%-L%>=mw%ANDA%-(dimx*L%)>=1:dir%(I%)=8:PROCgetstring(-1,-dimx) 12290IFA%-L%>=mw%ANDA%+(dimx*L%)<=dimx*dimy:dir%(I%)=6:PROCgetstring(-1,dimx) 12300IFA%+L%<=me% AND A%+(dimx*L%)<=dimx*dimy:dir%(I%)=4:PROCgetstring(1,dimx) 12310IFA%+L%<=me% AND A%-(dimx*L%)>=1:dir%(I%)=2:PROCgetstring(1,-dimx) 12320IFA%-L%>=mw%:dir%(I%)=7:PROCgetstring(-1,0) 12330IFA%-(dimx*L%)>=1:dir%(I%)=1:PROCgetstring(0,-dimx) 12340IFA%+(dimx*L%)<=dimx*dimy:dir%(I%)=5:PROCgetstring(0,dimx) 12350IFA%+L%<=me%:dir%(I%)=3:PROCgetstring(1,0) 12360ENDPROC 12370: 12380DEFPROCgetstring(x,y) 12390dummy$=LEFT$(d$,1):p%=A%:FORJ%=2TOLENd$:p%+=x+y:dummy$+=CHR$grid%(p%):NEXT 12400IF dummy$=d$ F%+=1:start%(I%)=A%:d%=dir%(I%) 12410ENDPROC 12420: 12430DEFFNexists(d$) 12440SYS"Hourglass_On" 12450e%=0:FORW%=1TOwords%:IF d$=FNstrip(FNcaps(word$(W%))) e%=W% 12460NEXT 12470SYS"Hourglass_Off" 12480=e% 12490: 12500DEFFNpalindrome(o$) 12510dummy$="":FORo%=LENo$TO1 STEP-1:dummy$+=MID$(o$,o%,1):NEXT 12520IFo$=dummy$ =1 ELSE =0 12530: 12540DEFPROCcopyover 12550temp$()="" 12560FORI%=1TOwords%:temp$(I%)=word$(I%) 12570IFstart%(I%)=0 AND dir%(I%)=0 word$(I%)="~~" 12580NEXT:PROCsort(2):PROCrep(1) 12590ENDPROC 12600: 12610DEFPROCcopyback 12620word$()="" 12630FORI%=1TOwords%:SWAPtemp$(I%),word$(I%):NEXT 12640ENDPROC 12650: 12660DEFPROCautoload 12670SYS "OS_GetEnv" TO d$ 12680d$=RIGHT$(d$,LENd$-20) 12690WHILE LEFT$(d$,1)<>" " AND LENd$<>0 12700d$=RIGHT$(d$,LENd$-1) 12710ENDWHILE 12720IFd$=" " d$="" 12730ENDPROC 12740: 12750DEFPROCcrossout(d%) 12760xpos%=x_origin%+14:ypos%=y_origin%-((d%-2)*36)-252+6 12770MOVE xpos%,ypos%:DRAW xpos%+(len%(d%)*16)+2,ypos% 12780ENDPROC 12790: 12800DEFPROCsic(w%,i%,c%) 12810!wimp%=w%:wimp%!4=i%:wimp%!8=c%<<24:wimp%!12=&0F000000 12820SYS"Wimp_SetIconState",0,wimp% 12830ENDPROC 12840: 12850DEFPROCsib(w%,i%,c%) 12860!wimp%=w%:wimp%!4=i%:wimp%!8=c%<<28:wimp%!12=&F0000000 12870SYS"Wimp_SetIconState",0,wimp% 12880ENDPROC 12890: 12900DEFFNgetword(startpos%,endpos%) 12910A%=startpos%:SWAPwsqx,dimx:SWAPwsqy,dimy:PROCends:SWAPwsqx,dimx:SWAPwsqy,dimy 12920scol%=startpos%MODwsqx:IFscol%=0 scol%=wsqx 12930ecol%=endpos%MODwsqx:IFecol%=0 ecol%=wsqx 12940srow%=((startpos%-1)DIVwsqx):erow%=((endpos%-1)DIVwsqx) 12950IFsrow%>erow% AND scol%=ecol% dx%=0:dy%=-wsqx:GOTO13030 12960IFsrow%>erow% AND scol%<ecol% dx%=1:dy%=-wsqx:GOTO13030 12970IFsrow%=erow% AND scol%<ecol% dx%=1:dy%=0:GOTO13030 12980IFsrow%<erow% AND scol%<ecol% dx%=1:dy%=wsqx:GOTO13030 12990IFsrow%<erow% AND scol%=ecol% dx%=0:dy%=wsqx:GOTO13030 13000IFsrow%<erow% AND scol%>ecol% dx%=-1:dy%=wsqx:GOTO13030 13010IFsrow%=erow% AND scol%>ecol% dx%=-1:dy%=0:GOTO13030 13020IFsrow%>erow% AND scol%>ecol% dx%=-1:dy%=-wsqx 13030dummy$="":p%=startpos%:o%=0 13040REPEAT 13050dummy$+=CHR$grid%(p%) 13060p%+=dx%+dy% 13070IFp%=endpos% o%=1:dummy$+=CHR$grid%(p%):p%=-1 13080UNTIL p%<0 OR p%>(wsqx*wsqy) 13090IFo%=1 ANDLENdummy$<19 AND LENdummy$>2 =dummy$ ELSE ="" 13100: 13110DEFFNstrip(o$) 13120c$=FNcaps(o$):o%=LENc$:o$="":FORJ%=1TOo%:e$=MID$(c$,J%,1):IFe$<="Z"ANDe$>="A" o$+=e$ 13130NEXT 13140=o$ 13150: 13160DEFPROCpositions(d%,dir%) 13170IFstart%(d%)MODwsqx=0 xpos%=wsqx-1 ELSE xpos%=(start%(d%)MODwsqx)-1 13180ypos%=(start%(d%)DIVwsqx) 13190IFstart%(d%)/wsqx=INT(start%(d%)/wsqx) ypos%-=1 13200xpos%=(xpos%*32)+25:ypos%=(ypos%*44)+68 13210CASE dir% OF 13220WHEN 1:dx%=0:dy%=44 13230WHEN 2:dx%=32:dy%=44 13240WHEN 3:dx%=32:dy%=0 13250WHEN 4:dx%=32:dy%=-44 13260WHEN 5:dx%=0:dy%=-44 13270WHEN 6:dx%=-32:dy%=-44 13280WHEN 7:dx%=-32:dy%=0 13290WHEN 8:dx%=-32:dy%=44 13300ENDCASE 13310dy%=-dy% 13320sx%(d%)=xpos%:sy%(d%)=ypos%:ex%(d%)=xpos%+((len%(d%)-1)*dx%):ey%(d%)=ypos%+((len%(d%)-1)*dy%) 13330ENDPROC 13340: 13350DEFFNcase 13360d%=0 13370FORI%=1TOwords%:FORJ%=1TOLENword$(I%):d$=MID$(word$(I%),J%,1):IF d$>="A" AND d$<="Z" d%+=1 13380NEXT:NEXT 13390IFd%>(words%*2.5) =1 ELSE =0 13400: 13410DEFFNorigin 13420=16+wimp%!4-wimp%!20-18 13430: 13440DATA 11,13,15,17,19,21,24,26,28,29 13450: 13460DEFPROCAlert(title$,message$) 13470PROCAlertBox(title$,message$,0) 13480ENDPROC 13490: 13500DEFPROCAlertBox(title$,message$,button%) 13510LOCALresponse%:$(wimp%+4)=message$:CASE button% OF 13520WHEN 1:response%=15 13530WHEN 2:response%=1 13540WHEN 3:response%=(1<<5)+16 13550WHEN 4:response%=(1<<6)+16 13560OTHERWISE:response%=16 13570ENDCASE 13580SYS "Wimp_ReportError",wimp%,response%,title$ TO ,response% 13590ENDPROC 13600: 13610DEFFNWindowCancel(title$,message$) 13620$(wimp%+4)=message$:response%=23 13630SYS "Wimp_ReportError",wimp%,response%,title$ TO ,response% 13640=response%-2 13650: 13660DEFFNWindowTitle(window%) 13670wimp%!0=window% 13680SYS "Wimp_GetWindInfo",,wimp% 13690IF ((wimp%!60)AND&100)=0 ERROR 1,"Title isn't indirected" 13700=$(wimp%!76) 13710: 13720DEFFNWindowLoad(window$) 13730=FNWindowLoadFrom(window$,"<WordSq$Dir>.Templates") 13740: 13750DEFFNWindowLoadFrom(window$,template$) 13760LOCAL c%,i%,n%,j%,sp$,sp2$ 13770SYS "Wimp_OpenTemplate",,template$ 13780SYS "Wimp_LoadTemplate",,wimp%,icons%,icon_memory%,-1,window$,0 TO ,,icons% 13790CASE sprites% OF 13800WHEN 1:wimp%!64=sprites% 13810OTHERWISE:wimp%!64=sprites% 13820ENDCASE 13830SYS "Wimp_CreateWindow",,wimp% TO c% 13840SYS "Wimp_CloseTemplate" 13850SYS "Wimp_WhichIcon",c%,wimp%+40,1+2+(1<<8),2+(1<<8) 13860CASE wimp%!40 OF 13870WHEN -1 13880OTHERWISE:i%=40 13890REPEAT 13900wimp%!4=wimp%!i%:wimp%!0=c% 13910SYS "Wimp_GetIconState",,wimp% 13920sp$=FNGetStringAtAddress(wimp%!28) 13930SYS "Wimp_DeleteIcon",,wimp% 13940CASE sprites% OF 13950WHEN 1:wimp%!32=1 13960OTHERWISE 13970SYS "OS_SpriteOp",&108,sprites% TO ,,,n% 13980j%=0 13990REPEAT:j%+=1 14000SYS "OS_SpriteOp",&10D,sprites%,pointer_block%,20,j% 14010sp2$=FNGetStringAtAddress(pointer_block%) 14020UNTIL j%=n% OR sp$=sp2$ 14030IF sp$=sp2$ THEN wimp%!32=sprites% ELSE wimp%!32=1 14040ENDCASE 14050wimp%!4=c% 14060SYS "Wimp_CreateIcon",,wimp%+4 TO handle% 14070i%+=4 14080UNTIL (wimp%!i%)=-1 14090ENDCASE 14100=c% 14110: 14120DEFPROCBringToTop(window%) 14130!wimp%=window% 14140SYS "Wimp_GetWindowState",,wimp% 14150wimp%!28=-1 14160SYS "Wimp_OpenWindow",,wimp% 14170IFwindow%=display_Window% dispwind%=1 14180ENDPROC 14190: 14200DEFPROCWindowClose(window%) 14210!wimp%=window% 14220SYS "Wimp_CloseWindow",,wimp% 14230IFwindow%=display_Window% dispwind%=0 14240ENDPROC 14250: 14260DEFPROCWindowForceDraw(window%) 14270CASE window% OF 14280WHEN -1:SYS "Wimp_ForceRedraw",-1,0,0,2*1280,2*1024 14290OTHERWISE:SYS "Wimp_ForceRedraw",window%,0,-2*1024,2*1280,0 14300ENDCASE 14310ENDPROC 14320: 14330DEFPROCWindowOpen(window%) 14340!wimp%=window% 14350SYS "Wimp_GetWindowState",,wimp% 14360SYS "Wimp_OpenWindow",,wimp% 14370ENDPROC 14380: 14390PROCWindowInterface 14400SYS"Wimp_BorderWindow",,wimp% 14410ENDPROC 14420: 14430DEFFNIconBar(Sprite$) 14440LOCAL icon% 14450wimp%!0=-1 14460wimp%!4=0:wimp%!8=0 14470wimp%!12=68:wimp%!16=68 14480wimp%!20=&3002 14490$(wimp%+24)=Sprite$ 14500SYS "Wimp_CreateIcon",,wimp% TO icon% 14510=icon% 14520: 14530DEFPROCIconCaret(window%,icon%,chars%) 14540SYS "Wimp_SetCaretPosition",window%,icon%,,,-1,chars% 14550ENDPROC 14560: 14570DEFFNIconText(window%,icon%) 14580wimp%!0=window%:wimp%!4=icon% 14590SYS "Wimp_GetIconState",,wimp% 14600IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon "+STR$icon%+" in window "+STR$window%+" isn't indirected" 14610=$(wimp%!28) 14620: 14630DEFFNIconValidation(window%,icon%) 14640wimp%!0=window%:wimp%!4=icon% 14650SYS "Wimp_GetIconState",,wimp% 14660IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon "+STR$icon%+" in window "+STR$window%+" isn't indirected" 14670=$(wimp%!32) 14680: 14690DEFPROCIconDisable(window%,icon%) 14700wimp%!0=window%:wimp%!4=icon% 14710wimp%!8=1<<22:wimp%!12=1<<22 14720SYS "Wimp_SetIconState",,wimp% 14730ENDPROC 14740: 14750DEFPROCIconEnable(window%,icon%) 14760wimp%!0=window%:wimp%!4=icon% 14770wimp%!8=0:wimp%!12=1<<22 14780SYS "Wimp_SetIconState",,wimp% 14790ENDPROC 14800: 14810DEFFNIconPutSprite(window%,icon%,sprite$) 14820wimp%!0=window%:wimp%!4=icon% 14830SYS "Wimp_GetIconState",,wimp% 14840SYS "Wimp_DeleteIcon",,wimp% 14850wimp%!4=wimp%!8:wimp%!8=wimp%!12:wimp%!12=wimp%!16 14860wimp%!16=wimp%!20:wimp%!20=wimp%!24:$(wimp%+24)=sprite$ 14870SYS "Wimp_CreateIcon",,wimp% TO icon% 14880=icon% 14890: 14900DEFPROCIconPutText(window%,icon%,text$) 14910wimp%!0=window% : wimp%!4=icon% 14920SYS "Wimp_GetIconState",,wimp% 14930IF ((wimp%!24) AND &100)=0 ERROR 1,"Icon "+STR$icon%+" in window "+STR$window%+" isn't indirected" 14940$(wimp%!28)=text$ 14950wimp%!0=window%:wimp%!4=icon% 14960wimp%!8=0:wimp%!12=0 14970SYS "Wimp_SetIconState",,wimp% 14980ENDPROC 14990: 15000DEFPROCIconInterfaceStart 15010SYS"Wimp_BorderIcon",,wimp% 15020ENDPROC 15030: 15040DEFPROCIconInterfaceFinish 15050wimp%!8=0 15060SYS"Wimp_BorderIcon",,wimp% 15070ENDPROC 15080: 15090DEFPROCMenuAdjustOn(menu%) 15100SYS "Wimp_GetPointerInfo",,pointer_block% 15110IF ((pointer_block%!8)AND1)=1 THEN SYS "Wimp_CreateMenu",,menu%,pointer_block%!0,pointer_block%!4 15120ENDPROC 15130: 15140DEFFNMenuChoice(level%) 15150=(wimp%!(4*level%))+1 15160: 15170DEFFNMenuCreate(menu$) 15180IF menu$="Colours" THEN=FNMenuCreateColours(" ") 15190LOCAL menu%,index%,width%,length%,k%,s% 15200DIM menu% 28+FNMenuNoOfEntries(menu$)*24 15210menu%?12=7:menu%?13=2:menu%?14=7:menu%?15=0 15220menu%!16=140:menu%!20=44:menu%!24=0 15230index%=menu%+28 15240$menu%=LEFT$(menu$,INSTR(menu$,"\")-1) 15250width%=LEN(LEFT$(menu$,INSTR(menu$,"\")-1)) 15260menu$+="\":Menu_NoOfEntries%=0 15270WHILE menu$<>"" 15280menu$=MID$(menu$,INSTR(menu$,"\")+1) 15290CASE menu$ OF 15300WHEN "" 15310OTHERWISE 15320!index%=0:index%!4=-1:index%!8=&7000021 15330length%=INSTR(menu$,"\")-1 15340k%=INSTR(LEFT$(menu$,length%),">") 15350CASE k% OF 15360WHEN 0 15370OTHERWISE 15380s%=EVAL(MID$(menu$,k%+1,length%-k%)) 15390index%!4=s% 15400length%=k%-1 15410ENDCASE 15420$(index%+12)=LEFT$(menu$,length%) 15430IF length%>width% THEN width%=length% 15440index%+=24 15450ENDCASE 15460ENDWHILE 15470menu%!16=16*(width%+1) 15480index%!-24=index%!-24 OR &80:=menu% 15490: 15500DEFFNMenuNoOfEntries(menu$) 15510LOCAL n%,j%:n%=0:j%=0 15520REPEAT 15530j%=INSTR(menu$,"\",j%+1) 15540IF j%<>0 THEN n%+=1 15550UNTIL j%=0 15560=n% 15570: 15580DEFPROCMenuClose 15590SYS "Wimp_CreateMenu",-1 15600ENDPROC 15610: 15620DEFPROCMenuDisable(menu%,item%) 15630menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<22) 15640ENDPROC 15650: 15660DEFPROCMenuEnable(menu%,item%) 15670PROCMenuDisable(menu%,item%) 15680menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)EOR(1<<22) 15690ENDPROC 15700: 15710DEFPROCMenuTick(menu%,item%) 15720menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))EOR1 15730ENDPROC 15740: 15750DEFPROCSpritesLoad 15760PROCSpritesPathLoad("<WordSq$Dir>.Sprites") 15770direct_sprites%=sprites% 15780ENDPROC 15790: 15800DEFPROCSpritesPathLoad(pathname$) 15810LOCALS%,T% 15820S%=OPENIN"<WordSq$Dir>.Sprites":T%=EXT#S%+16:CLOSE#S% 15830DIMsprites%T%,spname%12 15840!sprites%=T%:sprites%!8=0 15850SYS"OS_SpriteOp",&109,sprites% 15860SYS"OS_SpriteOp",&10A,sprites%,pathname$ 15870ENDPROC 15880: 15890DEFFNGetFilePathName 15900=FNGetStringAtAddress(wimp%+44) 15910: 15920DEFFNGetStringAtAddress(array%) 15930LOCALs$:s$="" 15940WHILE(?array%<>13)AND(?array%<>0):s$+=CHR$(?array%):array%+=1:ENDWHILE: 15950=s$ 15960: 15970DEFFNGetFileFromPathname(f$) 15980CASE INSTR(f$,".") OF 15990WHEN 0:=f$ 16000OTHERWISE:=FNGetFileFromPathname(RIGHT$(f$,LEN(f$)-INSTR(f$,"."))) 16010ENDCASE 16020: 16030DEFPROCStart(TaskName$,wimp_memory%,icon%) 16040DIM wimp% wimp_memory%,icons% icon% 16050IF wimp_memory%<256 THEN wimp_memory%=256 16060icon_memory%=icons%+icon% 16070task$=TaskName$ 16080indirect_sprites%=1:direct_sprites%=1 16090PROCSetEventVariables 16100SYS"Wimp_Initialise",200,&4B534154,TaskName$ TO version%,task% 16110ENDPROC 16120: 16130DEFPROCSetEventVariables 16140DIM pointer_block% 20 16150null%=1:draw%=2:pointer_leaving%=1<<4 16160pointer_entering%=1<<5:mouse%=1<<6:drag%=1<<7 16170key%=1<<8:menu%=1<<9:scroll%=1<<10 16180lose_caret%=1<<11:gain_caret%=1<<12:message%=(1<<17)+(1<<18) 16190recorder%=1<<18:acknowledge%=1<<19:window%=0 16200sprites%=1:version%=0:task%=0 16210Bar_Window%=-2:Bar_Icon%=0:Bar_Menu%=0 16220x_origin%=0:y_origin%=0:SaveWindow%=-3 16230message_quit%=0:message_save%=2:message_load%=3 16240mouse_button%=2:save_event%=0 16250top_line%=0:bottom_line%=0 16260ENDPROC 16270: 16280DEFPROCError 16290LOCALX$,x% 16300VDU3 16310ON ERROR OFF 16320SYS"Hourglass_Smash" 16330PROCMenuClose 16340x%=ERL 16350DIMErrorMsg%36 16360ErrorMsg%!0=36:ErrorMsg%!12=0:ErrorMsg%!16=&81080:ErrorMsg%!20=x% 16370$(ErrorMsg%+24)="!RunImage" 16380SYS"Wimp_SendMessage",17,ErrorMsg% 16390PROCAlert(task$,REPORT$+STR$ERL) 16400ENDCASE 16410ENDPROC 16420: 16430DEFPROCCloseDown 16440VDU3:SYS"Hourglass_Smash" 16450SYS"Wimp_CloseDown",task%,"TASK" 16460ENDPROC 16470: 16480DEFPROCQuit 16490finished%=TRUE 16500ENDPROC 16510: 16520DEFPROCpoll 16530LOCAL mask%,event% 16540finished%=FALSE 16550mask%=%111000011001 16560REPEAT 16570SYS"Wimp_Poll",mask%,wimp% TO event% 16580CASE event% OF 16590WHEN0 16600WHEN1:PROCPollDrawWindow 16610WHEN2:SYS "Wimp_OpenWindow",,wimp% 16620WHEN3:PROCPollCloseWindow 16630WHEN4 16640WHEN5 16650WHEN6:PROCPollMouseClick 16660WHEN7:PROCPollSaveMessage 16670WHEN8:PROCPollKeyPress 16680WHEN9:PROCEvent_MenuChoice(menu%) 16690WHEN10 16700WHEN11 16710WHEN12 16720WHEN17,18:PROCPollMessages 16730WHEN19 16740ENDCASE 16750UNTIL finished% 16760ENDPROC 16770: 16780DEFPROCPollDrawWindow 16790LOCAL more% 16800SYS"Wimp_RedrawWindow",,wimp%TOmore% 16810window%=wimp%!0 16820x_origin%=16+wimp%!4-wimp%!20:y_origin%=-16+wimp%!16-wimp%!24 16830WHILEmore% 16840SYS"Wimp_BorderWindow",,wimp% 16850PROCEvent_Draw(window%,x_origin%,y_origin%) 16860SYS"Wimp_GetRectangle",,wimp%TOmore% 16870ENDWHILE 16880ENDPROC 16890: 16900DEFPROCPollCloseWindow 16910SYS "Wimp_GetPointerInfo",,wimp% 16920window%=wimp%!12:buttons%=wimp%!8 16930PROCEvent_WindowClose(window%,buttons%) 16940!wimp%=window%:SYS "Wimp_CloseWindow",,wimp% 16950ENDPROC 16960: 16970DEFPROCPollMouseClick 16980button%=wimp%!8:window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4 16990x_origin%=wimp%!4-wimp%!20+16 17000CASE button% OF 17010WHEN2:PROCPollMenuPopUp 17020OTHERWISE:CASE FNEvent_Save(window%) OF 17030WHEN TRUE:PROCPollMouseSave 17040WHEN FALSE:PROCPollEventMouseClick 17050ENDCASE 17060ENDCASE 17070ENDPROC 17080: 17090DEFPROCPollMenuPopUp 17100menu%=FNEvent_Menu(window%) 17110CASE menu% OF 17120WHEN FALSE 17130OTHERWISE 17140CASE window% OF 17150WHEN -2:n%=0 17160WHILE ((Bar_Menu%!(28+n%*24))AND%10000000)=0 17170n%+=1 17180ENDWHILE 17190SYS "Wimp_CreateMenu",,Bar_Menu%,x%-64,96+n%*44+44 17200OTHERWISE:SYS"Wimp_CreateMenu",,menu%,x%-64,y%+20 17210ENDCASE 17220ENDCASE 17230wsqtitle$=FNIconText(main_Window%,9) 17240ENDPROC 17250: 17260DEFPROCPollMouseSave 17270CASE icon% OF 17280WHEN 0:IF button% AND &50 THEN PROCPollDragBox(window%) 17290WHEN 2:IF button% AND 5 THEN PROCPollSaveFile(window%) 17300ENDCASE 17310ENDPROC 17320: 17330DEFPROCPollEventMouseClick 17340SYS"Wimp_BorderIcon",,wimp% 17350PROCEvent_MouseClick(window%,icon%,button%,x%,y%) 17360wimp%!0=x%:wimp%!4=y%:wimp%!8=0 17370wimp%!12=window%:wimp%!16=icon% 17380SYS"Wimp_BorderIcon",,wimp% 17390ENDPROC 17400: 17410DEFPROCPollSaveFile(window%) 17420LOCALfile$ 17430wimp%!0=window%:wimp%!4=1:SYS "Wimp_GetIconState",,wimp% 17440file$=$(wimp%!28) 17450CASE INSTR(file$,".") OF 17460WHEN 0 17470$(wimp%+4)="To save, drag the icon to a directory window" 17480SYS "Wimp_ReportError",wimp%,16,task$ 17490OTHERWISE 17500PROCEvent_SaveFile(file$,window%) 17510ENDCASE 17520SYS"Wimp_CreateMenu",-1 17530ENDPROC 17540: 17550DEFPROCPollDragBox(window%) 17560LOCALx%,y% 17570save%=window% 17580!wimp%=window% 17590SYS"Wimp_GetWindowState",,wimp% 17600x%=wimp%!4-wimp%!20:y%=wimp%!16-wimp%!24 17610wimp%!4=0 17620SYS"Wimp_GetIconState",,wimp% 17630!wimp%=window% 17640wimp%!4=5 17650wimp%!8=x%+wimp%!8:wimp%!12=y%+wimp%!12 17660wimp%!16=x%+wimp%!16:wimp%!20=y%+wimp%!20 17670wimp%!24=0:wimp%!28=0 17680wimp%!32=&7FFFFFFF:wimp%!36=&7FFFFFFF 17690SYS"Wimp_DragBox",,wimp% 17700ENDPROC 17710: 17720DEFPROCPollKeyPress 17730window%=wimp%!0:icon%=wimp%!4:key%=wimp%!24 17740CASE FNEvent_Save(window%) OF 17750WHEN TRUE:PROCWimpPoll_SaveFile(window%) 17760WHEN FALSE:PROCEvent_KeyPress(window%,icon%,key%) 17770ENDCASE 17780ENDPROC 17790: 17800DEFPROCPollSaveMessage 17810LOCALfile$,window%,icon%,x%,y% 17820SYS"Wimp_GetPointerInfo",,wimp% 17830window%=wimp%!12:icon%=wimp%!16:x%=wimp%!0:y%=wimp%!4 17840wimp%!0=save%:wimp%!4=1:SYS "Wimp_GetIconState",,wimp% 17850file$=$(wimp%!28) 17860file$=FNGetFileFromPathname(file$) 17870wimp%!20=window% 17880wimp%!24=icon% 17890wimp%!28=x%:wimp%!32=y% 17900wimp%!36=length% 17910wimp%!0=64 17920wimp%!12=0 17930wimp%!16=1 17940wimp%!40=&FFF 17950$(wimp%+44)=file$ 17960SYS"Wimp_SendMessage",17,wimp%,wimp%!20,wimp%!24 17970ENDPROC 17980: 17990DEFPROCPollMessages 18000LOCAL file$ 18010file$=FNGetStringAtAddress(wimp%+44) 18020block%=wimp%!16:CASE block% OF 18030WHEN 0:finished%=TRUE 18040WHEN 1 18050!wimp%=(48+16) ANDNOT3:wimp%!12=wimp%!8:wimp%!16=2:wimp%!36=-1 18060temp$=file$:$(wimp%+44)="<Wimp$Scrap>"+CHR$0 18070SYS"Wimp_SendMessage",17,wimp%,wimp%!4 18080GOTO18200 18090WHEN 2 18100PROCEvent_SaveFile(file$,save%) 18110wimp%!12=wimp%!8:wimp%!16=3 18120SYS"Wimp_SendMessage",17,wimp%,wimp%!20,wimp%!24 18130IFINSTR(file$,"Wimp$Scrap")=0 PROCIconPutText(save%,1,file$) 18140WHEN 3 18150IFtemp$="" temp$=file$ 18160type%=wimp%!40:PROCEvent_LoadFile(file$,type%) 18170OSCLI"REMOVE <Wimp$Scrap>" 18180temp$="" 18190WHEN &502:PROChelp 18200ENDCASE 18210ENDPROC 18220: 18230DEFPROChelp 18240window%=wimp%!32:icon%=wimp%!36 18250IFwindow%=-2 PROCsend("This is the WordSq icon.|MClick SELECT to create or edit a wordsquare.|MClick MENU to edit a wordsquare, solve a wordsquare, set your preferences or clear all words and grid from memory."):ENDPROC 18260IFwindow%=display_Window% PROCsend("This is the display window.|MThe positions of any highlighted words will be shown."):ENDPROC 18270IFwindow%=words_Window% AND icon%<>2 AND icon%<>3 PROCsend("This is the words window.|MIt shows a complete list of all the words in memory."):ENDPROC 18280SYS "Wimp_SendInformation",,wimp% 18290ENDPROC 18300: 18310DEFPROCsend(d$) 18320wimp%!12=wimp%!8:wimp%!16=&503:$(wimp%+20)=d$+CHR$0 18330!wimp%=(25+LENd$)ANDNOT3 18340SYS"Wimp_SendMessage",17,wimp%,wimp%!4 18350ENDPROC 18360: 18370DEF FNMenuCreateColours(title$) 18380LOCAL x$,men%,j%,i% 18390x$=title$+"\0\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15" 18400men%=FNMenuCreate(x$) 18410FOR i%=0 TO 15 18420CASE TRUE OF 18430WHEN i%<4,i%=9,i%=12,i%=14,i%=15 : j%=7 18440OTHERWISE : j%=0 18450ENDCASE 18460men%?(39+i%*24)=i%*16+j% 18470PROCMenuCentre(men%,i%+1) 18480NEXT 18490=men% 18500: 18510DEF PROCMenuCentre(menu%,item%) 18520menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)OR(1<<3) 18530ENDPROC 18540: 18550DEFPROCresize(w%,a%,b%,c%,d%) 18560!wimp%=a%:wimp%!4=b%:wimp%!8=c%:wimp%!12=d% 18570SYS"Wimp_SetExtent",w%,wimp% 18580wimp%!0=display_Window%:wimp%!4=dispbox%:SYS"Wimp_DeleteIcon",,wimp% 18590wimp%!0=display_Window%:wimp%!4=22:wimp%!8=b%+24 18600wimp%!12=c%-24:wimp%!16=-36:wimp%!20=&17000101:wimp%!24=text% 18610wimp%!28=valid%:wimp%!32=12 18620SYS"Wimp_CreateIcon",,wimp% TO dispbox% 18630PROCWindowForceDraw(display_Window%) 18640IFdispwind% PROCBringToTop(display_Window%) 18650ENDPROC 18660: 18670DEFPROCww 18680a%=-240-(words%*36):b%=352 18690!wimp%=0:wimp%!4=a%:wimp%!8=b%:wimp%!12=0 18700SYS"Wimp_SetExtent",words_Window%,wimp% 18710wimp%!0=words_Window%:wimp%!4=wordsbox%:SYS"Wimp_DeleteIcon",,wimp% 18720wimp%!0=words_Window%:wimp%!4=22:wimp%!8=a%+24 18730wimp%!12=b%-24:wimp%!16=-36:wimp%!20=&17000101:wimp%!24=text% 18740wimp%!28=valid%:wimp%!32=12 18750SYS"Wimp_CreateIcon",,wimp% TO wordsbox% 18760PROCWindowForceDraw(words_Window%) 18770IFwordswind% PROCBringToTop(words_Window%) 18780ENDPROC
� >WordSq$Dir.!RunImage -� WordSquare Creation and Solving program � By Matthew Eglise (� 21� Copyright held by Archimedes World magazine <'� This program is NOT Public Domain F� P(� Version 3.12 - 26th September 1992 Z� d)mem1%=9042:mem2%=17100:filetype%=&03C n �autoload xș"Hourglass_On" � �Start("WordSq",mem1%,mem2%) � �init ��Create_Windows ��Create_Menus ��loadprefs ��d$<>"" �LoadOwn(d$) �ș"Hourglass_Off" �� � �Error:�dH@ �� � �poll �� �new("quit")<>0 ��CloseDown �� : ��init 8� word$(168),len%(168),grid%(2400),show%(168),b$(60) "5� selected%(168),start%(168),dir%(168),temp$(168) ,)� sx%(168),sy%(168),ex%(168),ey%(168) 6-� valid% 32:$valid%="b1,0,15,4,0,1,14,12" @� text% 8:$text%="" J<wordswind%=0:words%=0:grid%=0:selection%=0:ef%=0:high%=0 T=nofit%=0:dimx=0:dimy=0:maxh=0:a=0:needs%=0:gaps=25:len%=0 ^Mwsqtitle$="":selectedword$="":saveformat$="text":solveformat$="":temp$="" hBmainwind%=0:solvewind%=0:dispwind%=0:wsqx=0:wsqy=0:wsqwords%=0 r?wordssaved%=1:gridsaved%=1:flag%=0:show%=0:found%=0:done%=0 | startx%=0:starty%=0:dispx%=0 �dispbox%=0:wordsbox%=0 �� �: ���Create_Windows ��SpritesLoad �&solve_Window%=�WindowLoad("solve") �$info_Window%=�WindowLoad("info") �.savewords_Window%=�WindowLoad("savewords") �*display_Window%=�WindowLoad("display") �&words_Window%=�WindowLoad("words") �$main_Window%=�WindowLoad("main") �*savewsq_Window%=�WindowLoad("savewsq") �&prefs_Window%=�WindowLoad("prefs") !Bar_Icon%=�IconBar("!WordSq") 1�I%=4�171:�IconPutText(words_Window%,I%,""):� �ww &� 0: :ݤEvent_Save(window%) DȎ window% � N� savewords_Window% :=� X� savewsq_Window% :=� b :=� l� v: ���Create_Menus �� prefs_Menu%(1) �Fmenu$="WordSq\Info>info_Window%\Edit\Solve\Preferences\Clear\Quit" � Bar_Menu%=�MenuCreate(menu$) �0menu$ ="Solve\Info>info_Window%\Show Words\" �menu$+="Quit" �"solve_Menu%=�MenuCreate(menu$) �6menu$ ="Display\Info>info_Window%\Show Words\Quit" �$display_Menu%=�MenuCreate(menu$) �Bmenu$ ="Words\Info>info_Window%\Save Words>savewords_Window%\" �menu$+="Quit" �"words_Menu%=�MenuCreate(menu$) �"WlMenu%=�MenuCreate("Colours") "SmMenu%=�MenuCreate("Colours") !LMenu%=�MenuCreate("Colours") "ClMenu%=�MenuCreate("Colours") Zmenu$="Colours\Words list>WlMenu%\Start mark>SmMenu%\Lines>LMenu%\Latest line>ClMenu%" *%prefs_Menu%(1)=�MenuCreate(menu$) 4@menu$ ="Prefs\Info>info_Window%\Colours>prefs_Menu%(1)\Quit" >"prefs_Menu%=�MenuCreate(menu$) H1menu$ ="Create\Info>info_Window%\Show Words\" Rcmenu$+="Save Words>savewords_Window%\Save Square>savewsq_Window%\Print Words\Print Square\Quit" \!main_Menu%=�MenuCreate(menu$) f2savewsq_Menu%=0:info_Menu%=0:savewords_Menu%=0 p�MenuDisable(main_Menu%,2) z�MenuDisable(main_Menu%,3) ��MenuDisable(main_Menu%,4) ��MenuDisable(main_Menu%,5) ��MenuDisable(main_Menu%,6) ��MenuDisable(solve_Menu%,2) �!�MenuDisable(display_Menu%,2) �� �: �ݤEvent_Menu(window%) �Ȏ window% � �� Bar_Window%:=Bar_Menu% � � solve_Window%:=solve_Menu% �$� display_Window%:=display_Menu% � � words_Window%:=words_Menu% � main_Window%:=main_Menu% � prefs_Window%:=prefs_Menu% :=� $� .: 8)��Event_WindowClose(window%,buttons%) BȎ window% � L � solve_Window%:solvewind%=0 V� info_Window% `� savewords_Window% j!� display_Window%:dispwind%=0 tl� words_Window%:wordswind%=0:�MenuTick(main_Menu%,2):�MenuTick(solve_Menu%,2):�MenuTick(display_Menu%,2) ~� main_Window%:mainwind%=0 �� savewsq_Window% �� prefs_Window% �� �� �: �-��Event_Draw(window%,x_origin%,y_origin%) �Ȏ window% � �(� savewsq_Window%:�DrawsavewsqWindow �$� solve_Window%:�DrawsolveWindow �"� info_Window%:�DrawinfoWindow �,� savewords_Window%:�DrawsavewordsWindow �$� prefs_Window%:�DrawprefsWindow (� display_Window%:�DrawdisplayWindow $� words_Window%:�DrawwordsWindow "� main_Window%:�DrawmainWindow � (� 2: <��DrawsavewsqWindow F� P: Z��DrawsolveWindow d� n: x��DrawinfoWindow �� �: ���DrawsavewordsWindow �� �: ���DrawprefsWindow �� �: ���DrawwordsWindow �� �: ���DrawmainWindow �� : ��DrawdisplayWindow e�startx%<>0 � starty%<>0 ș"Wimp_SetColour",mcol%:ȓ Ȑ x_origin%+startx%,y_origin%+starty%,22,32 "�I%=1�words% ,4�show%(I%)=0 � (start%(I%)=0 � dir%(I%)=0) �DJF 6@�I%=show% ș"Wimp_SetColour",lcol% � ș"Wimp_SetColour",col% @M� x_origin%+sx%(I%),y_origin%-sy%(I%),x_origin%+ex%(I%),y_origin%-ey%(I%) J� Tdispx%=x_origin%-18 ^� h: r3��Event_MouseClick(window%,icon%,button%,x%,y%) |Ȏ window% � �� Bar_Window%:�MouseBar �.� solve_Window%:�Mousesolve(button%,icon%) �,� info_Window%:�Mouseinfo(button%,icon%) �2� display_Window%:�Mousedisplay(button%,icon%) �.� prefs_Window%:�Mouseprefs(button%,icon%) �.� words_Window%:�Mousewords(button%,icon%) �,� main_Window%:�Mousemain(button%,icon%) �� �� �: ���MouseBar �)�BringToTop(main_Window%):mainwind%=1 �� : ��Mouseprefs(button%,icon%) Ȏ icon% � &.� 1:�saveprefs:�WindowClose(prefs_Window%) 0.� 11:�getprefs:�WindowClose(prefs_Window%) :$� 12:�WindowClose(prefs_Window%) D;�tempdbl%<>dbl% �SetIcon(prefs_Window%,3):tempdbl%=dbl% N[�tempcaps%<>caps% �SetIcon(prefs_Window%,29):�SetIcon(prefs_Window%,30):tempcaps%=caps% X_�tempforce%<>force% �SetIcon(prefs_Window%,45):�SetIcon(prefs_Window%,46):tempforce%=force% b1�temptitlept%<>titlept% temptitlept%=titlept% l-�tempgridpt%<>gridpt% tempgridpt%=gridpt% v1�tempwordspt%<>wordspt% tempwordspt%=wordspt% �!�tempcol%<>col% tempcol%=col% �%�tempmcol%<>mcol% tempmcol%=mcol% �%�tempwcol%<>wcol% tempwcol%=wcol% �%�templcol%<>lcol% templcol%=lcol% � �setprefs �.� 3:� tempdbl%=-1 tempdbl%=0 � tempdbl%=-1 �=� 29:�button%=1 � tempcaps%=-1 �SetIcon(prefs_Window%,29) �tempcaps%=-1 �<� 30:�button%=1 � tempcaps%=0 �SetIcon(prefs_Window%,30) �tempcaps%=0 �:� 31,33:temptitlept%=�bumppt(icon%-32,temptitlept%,32) �8� 34,36:tempgridpt%=�bumppt(icon%-35,tempgridpt%,35) �:� 37,39:tempwordspt%=�bumppt(icon%-38,tempwordspt%,38) ?� 45:� button%=1 � tempforce%=-1 �SetIcon(prefs_Window%,45) tempforce%=-1 >� 46:� button%=1 � tempforce%=0 �SetIcon(prefs_Window%,45) tempforce%=0 *0:�Alert("WordSq","Invalid Templates file.") 4� >� H: R��Mousesolve(button%,icon%) \�button%<>1 � button%<>4 � f��solveformat$="" �Alert("WordSq","No wordsquare is currently available - either create one or load a plain text wordsquare."):� p@�icon%=9 � (selection%=0 � �IconText(solve_Window%,17)="") � zȎ icon% � �?� 8:�BringToTop(display_Window%):dispwind%=1:�removepressed �=� 9:�BringToTop(display_Window%):dispwind%=1:�showpressed �:� 11:�BringToTop(display_Window%):dispwind%=1:�showall �� 10:�removeall �0:�Alert("WordSq","Invalid Templates file.") �� �� �: �!��Mousedisplay(button%,icon%) ��button%<>4 � button%<>1 � ��icon%-1>wsqy � �T!wimp%=display_Window%:ș "Wimp_GetWindowState",,wimp%:dispx%=wimp%!4-wimp%!20-2 �{�button%=4 startpos%=0:startx%=0:starty%=0:endpos%=0 � �button%=1 � startpos%=0 button%=4:startx%=0:starty%=0:endpos%=0 ,icon%-=1:i%=((24+((x%-dispx%)/16))/2)-12 �i%>wsqx � p%=((icon%-1)*wsqx)+i% $Ȏ button% � .� 4:startpos%=p% 87startx%=22+((i%-1)*32)-8:starty%=-84-((icon%-1)*44) B� 1:endpos%=p% LDd$=�getword(startpos%,endpos%):�IconPutText(solve_Window%,17,d$) V)�startpos%<>endpos% � o%=1 � d$<>"" � `�caret((�d$/2)+1000) j&ex%=�exists(d$):p%=�palindrome(d$) t^�ex%=0 �Alert("WordSq","The word '"+d$+"' does not exist in the current word list."):�t\I ~��ex%>0 � startpos%<>0 � endpos%<>0 � startpos%<>start%(ex%) � p%=0 �Alert("WordSq","Although the word "+d$+" does exist in the current wordsquare, it is not at this position."):�t\I �[�ex%>0 � startpos%<>0 � endpos%<>0 � startpos%<>start%(ex%) � p%=1 Ȕ startpos%,endpos% �b�ex%>0:�show%(ex%)=0 high%+=1:show%(ex%)=2:�sic(words_Window%,ex%+3,wcol%):show%=ex%:found%+=1 �-startx%=0:starty%=0:startpos%=0:endpos%=0 �� �� �%�WindowForceDraw(display_Window%) ��updatesolvestate ��solveformat$<>"own" � �k�found%=wsqwords% � done%=0 �wsqwords%=1 �Alert("WordSq","Well Done, you've found the word."):done%=1:� ��high%=wsqwords% � found%<wsqwords% � done%=0 � wsqwords%=1 � found%>0 �Alert("WordSq","Although you have found the word, you had to seek help with it."):done%=1:� �|�found%=wsqwords% � done%=0 �Alert("WordSq","Well Done, you've found all "+�oneormore(wsqwords%)+"in the grid."):done%=1 ���high%=wsqwords% � found%<wsqwords% � done%=0 � found%>0 �Alert("WordSq","Although you have found all "+�oneormore(wsqwords%)+"in the grid, you had to seek help with "+�(wsqwords%-found%)+" of them."):done%=1 � : ��showpressed 8�solveformat$="" �IconPutText(solve_Window%,17,""):� (4gibbet$=�IconText(solve_Window%,17):need%=0:F%=0 2ex%=�exists(gibbet$) <h�caps%=-1 �IconPutText(main_Window%,26,�caps(gibbet$)):�IconPutText(solve_Window%,17,�caps(gibbet$)) F)�len(gibbet$)<3 � selection%=0 �TNK Po�selection%=0 � solveformat$="text" � ex%=0 �find(�caps(gibbet$)):�IconPutText(main_Window%,20,�gaps):�TDK Z(�selection%=0 � solveformat$="own" � dc�ex%=0 �Alert("WordSq","The word '"+gibbet$+"' does not exist in the current word list."):�tBJ n��ex%>0 � startpos%<>0 � endpos%<>0 � startpos%<>start%(ex%) �Alert("WordSq","Although the word "+gibbet$+" does exist in the current wordsquare, it is not at this position."):�tBJ x`�ex%>0 need%=1:�show%(ex%)=0 high%+=1:show%(ex%)=1:�sic(words_Window%,ex%+3,wcol%):show%=ex% �� �-�selection%=0 � solveformat$="own" � �TNK ��selection%>0 � ��o%=0:�I%=1�words%:�selected%(I%)=1 � start%(I%)=0 � dir%(I%)=0 o%+=1 � �selected%(I%)=1 � show%(I%)=0 high%+=1:show%(I%)=1:need%=1:�sic(words_Window%,I%+3,wcol%) �� ��selection%>1 show%=0 ��o%>0 � �!�o%=1 o$=" does " � o$=" do " �f�o%=1 � selection%=1 d$="This word does ":� d$=�oneormore(o%)+"amongst the selection"+o$:o$="they" ��o%=1 o$="it" �[�Alert("WordSq",d$+"not appear in the current wordsquare so "+o$+" will not be shown.") �� �� o%=selection% Z�clearall:�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�caret(0) ��words%=1:�MenuEnable(main_Menu%,2):�MenuEnable(main_Menu%,3):�MenuEnable(main_Menu%,5):�MenuEnable(solve_Menu%,2):�MenuEnable(words_Menu%,2):�MenuEnable(display_Menu%,2) "�words%=0 done%=0 ,startx%=0:starty%=0 6%�WindowForceDraw(display_Window%) @D�updatesolvestate:�solveformat$<>"own" �o%>=wsqwords% �done%=1 � J��high%=wsqwords% � found%<wsqwords% �wsqwords%=1 �Alert("WordSq","Although you found the word, you had to seek help with it."):done%=1:� T��high%=wsqwords% � found%<wsqwords% � found%>0 �Alert("WordSq","Although you have found all "+�oneormore(wsqwords%)+"in the grid, you had to seek help with "+�(wsqwords%-found%)+" of them."):done%=1 ^� h: r��removepressed |B�solveformat$="" �IconPutText(solve_Window%,17,""):�caret(0):� ��selection%=0 � �need%=0:�I%=1�words% �,�show%(I%)=2 � selected%(I%)=1 found%-=1 �l�selected%(I%)=1 � show%(I%)>0 high%-=1:show%(I%)=0:need%=1:�sic(words_Window%,I%+3,7):�I%=show% show%=0 �� �done%=0 �Z�clearall:�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�caret(0) �,�need% �WindowForceDraw(display_Window%) ��updatesolvestate �� �: ���Mouseinfo(button%,icon%) �� : ��Mousewords(button%,icon%) �icon%>3 � icon%<=words%+3 � &Ȏ button% � 0� 4: :N�I%=1�words%:�selected%(I%)=1 �SetIcon(words_Window%,I%+3):selected%(I%)=0 Dm�:�SetIcon(words_Window%,icon%):selected%(icon%-3)=1:selection%=1:selectedword$=word$(icon%-3):�setbutton N� 1: X!�SetIcon(words_Window%,icon%) bl�selected%(icon%-3)=0 selected%(icon%-3)=1:selection%+=1:� selected%(icon%-3)=0:selection%-=1:�setbutton l�selection%<>1 �t@L v>�I%=1�words%:�selected%(I%)=1 selectedword$=word$(I%):�:�� �� �Ȏ selection% � �[� 0:�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):selectedword$="" �`� 1:�IconPutText(main_Window%,26,selectedword$):�IconPutText(solve_Window%,17,selectedword$) �Y:�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):selectedword$="" �� �� �� icon%=2 �selectall �� icon%=3 �clearall ��updatesolvestate ��caret(�selectedword$/2) ��setbutton �� : ��Mousemain(button%,icon%) � button%<>1 � button%<>4 � /�icon%=24 � �IconText(main_Window%,26)="" � *Ȏ icon% � 4� 24:�addword >� 25:�deleteword H� 28:�amendword R� 29:�create \� 11,13:�bumpx(icon%-12) f� 15,17:�bumpy(-(icon%-16)) p"� 19,21:�bumpgaps(-(icon%-20)) zB� 30:�button%=1 � saveformat$="text" �SetIcon(main_Window%,30) �Fsaveformat$="text":d%=�IconPutSprite(savewsq_Window%,0,"file_fff") �B� 32:�button%=1 � saveformat$="draw" �SetIcon(main_Window%,32) �Fsaveformat$="draw":d%=�IconPutSprite(savewsq_Window%,0,"file_fff") �A� 33:�button%=1 � saveformat$="own" �SetIcon(main_Window%,33) �Esaveformat$="own":d%=�IconPutSprite(savewsq_Window%,0,"file_03c") �A� 34:�button%=1 � saveformat$="imp" �SetIcon(main_Window%,34) �Esaveformat$="imp":d%=�IconPutSprite(savewsq_Window%,0,"file_fff") �0:�Alert("WordSq","Invalid Templates file.") �� �� �: ���selectall �R�I%=4�words%+3:�selected%(I%-3)=0 �SetIcon(words_Window%,I%):selected%(I%-3)=1 "�:selection%=words%:�setbutton � : $��clearall .R�I%=4�words%+3:�selected%(I%-3)=1 �SetIcon(words_Window%,I%):selected%(I%-3)=0 8�:selection%=0:�setbutton B� L: V ��showall `X�I%=1�words%:�start%(I%)<>0 � dir%(I%)<>0 show%(I%)=1:�sic(words_Window%,I%+3,wcol%) j'�:�WindowForceDraw(display_Window%) t5high%=wsqwords%:done%=1:show%=0:�updatesolvestate ~� �: ���removeall �I�I%=1�words%:show%(I%)=0:�sic(words_Window%,I%+3,7):�I%=show% show%=0 �� �%�WindowForceDraw(display_Window%) �.high%=0:found%=0:done%=0:�updatesolvestate �� �: �(��Event_KeyPress(window%,icon%,key%) �Ȏ window% � �.� solve_Window%:�KeyPresssolve(icon%,key%) �� info_Window% � display_Window% � words_Window% ,� main_Window%:�KeyPressmain(icon%,key%) .� prefs_Window%:�KeyPressprefs(icon%,key%) (� 2.key%=0:wsqtitle$=�IconText(main_Window%,9) <� F: P��KeyPresssolve(icon%,key%) Z&�key%<>13 ș"Wimp_ProcessKey",key% dX�key%=13 � icon%=17 � (selection%<>0 � �IconText(solve_Window%,17)<>"") �showpressed n3�key%=13 � icon%=17 � solveformat$="" �caret(0) x� �: ���KeyPressmain(icon%,key%) �d%=icon% �@�key%=399 � icon%=26 icon%=9 � � key%=398 � icon%=9 icon%=26 �S�d%<>icon% �IconCaret(main_Window%,icon%,�(��IconText(main_Window%,icon%)/2)):� �Z�key%=13 � icon%=26 � �IconText(main_Window%,26)<>"" � solveformat$<>"text" �addword:� �ș"Wimp_ProcessKey",key% �� �: ���KeyPressprefs(icon%,key%) �d%=icon% � Ȏ key% � � � 399 ��icon%=24 � icon%=25 � icon%=26 � icon%=27 icon%-=1 � � icon%=23 icon%=17 � � icon%=41 icon%=27 � � icon%=43 icon%=41 � � icon%=9 icon%=7 � � icon%=13 icon%=9 � � icon%=17 icon%=13 � 398 ��icon%=23 � icon%=24 � icon%=25 � icon%=26 icon%+=1 � � icon%=41 icon%=43 � � icon%=27 icon%=41 � � icon%=17 icon%=23 � � icon%=7 icon%=9 � � icon%=9 icon%=13 � � icon%=13 icon%=17 " ș"Wimp_ProcessKey",key% ,� 6S�icon%<>d% �IconCaret(prefs_Window%,icon%,�(��IconText(prefs_Window%,icon%)/2)) @� J: T��Event_MenuChoice(menu%) ^Ȏ menu% � h� Bar_Menu%:�MenuChoiceBar r� savewsq_Menu% |"� solve_Menu%:�MenuChoicesolve �� info_Menu% �� savewords_Menu% �"� prefs_Menu%:�MenuChoiceprefs �&� display_Menu%:�MenuChoicedisplay �"� words_Menu%:�MenuChoicewords � � main_Menu%:�MenuChoicemain �� �� �: ���MenuChoiceBar �Ȏ �MenuChoice(0) � �� 1 �-� 2:�BringToTop(main_Window%):mainwind%=1 B� 3:�solveformat$<>"" �BringToTop(display_Window%):dispwind%=1 +�BringToTop(solve_Window%):solvewind%=1 "� 4:�BringToTop(prefs_Window%) &� 5: 0)�new("clear all variables")=1 �reset :� 6:finished%=� D� N� X: b��MenuChoiceprefs lȎ �MenuChoice(0) � v� 1 �� 2:Ȏ �MenuChoice(1) � �5� 1:�MenuChoice(2)<>0 tempwcol%=�MenuChoice(2)-1 �5� 2:�MenuChoice(2)<>0 tempmcol%=�MenuChoice(2)-1 �4� 3:�MenuChoice(2)<>0 tempcol%=�MenuChoice(2)-1 �5� 4:�MenuChoice(2)<>0 templcol%=�MenuChoice(2)-1 �� �� 3:finished%=� �� �D�sib(prefs_Window%,50,tempcol%):�sib(prefs_Window%,51,tempmcol%) �E�sib(prefs_Window%,53,tempwcol%):�sib(prefs_Window%,54,templcol%) �� �: ���MenuChoicesolve Ȏ �MenuChoice(0) � � 1 }� 2:�MenuTick(solve_Menu%,2):�MenuTick(main_Menu%,2):�MenuTick(display_Menu%,2):�wordswind%=0 wordswind%=1 � wordswind%=0 � 3:finished%=� *� 4K� wordswind%=1 �BringToTop(words_Window%) � �WindowClose(words_Window%) >� H: R��MenuChoicedisplay \Ȏ �MenuChoice(0) � f� 1 p}� 2:�MenuTick(solve_Menu%,2):�MenuTick(main_Menu%,2):�MenuTick(display_Menu%,2):�wordswind%=0 wordswind%=1 � wordswind%=0 z� 3:finished%=� �� �K� wordswind%=1 �BringToTop(words_Window%) � �WindowClose(words_Window%) �� �: ���MenuChoicewords �Ȏ �MenuChoice(0) � �� 1 �� 2 �� 3:finished%=� �� �� �: ���MenuChoicemain Ȏ �MenuChoice(0) � � 1 �� 2:�MenuTick(main_Menu%,2):�MenuTick(solve_Menu%,2):�MenuTick(display_Menu%,2):�wordswind%=0 wordswind%=1:�BringToTop(words_Window%) � wordswind%=0:�WindowClose(words_Window%) $� 3 .� 4 8]� 5:old$=saveformat$:saveformat$="print":�2:�pre:�savewords(""):�post:�3:saveformat$=old$ BZ� 6:old$=saveformat$:saveformat$="print":�2:�pre:�savesquare:�post:�3:saveformat$=old$ L� 7:finished%=� V� `� j: t!��Event_LoadFile(file$,type%) ~ș"Hourglass_On" �Ȏ type% � �>� &FFF:�new("load a new file")=1 �reset:�LoadWords(file$) �R� filetype%:�new("load a new set of words and grid")=1 �reset:�LoadOwn(file$) �� �ș"Hourglass_Off" �� �: ���LoadWords(file$) �file=�file$ �dummy$=�caps(�#file) �]�dummy$,"ORD") � �dummy$,"UARE"):dimx=��#file:words%=0:solveformat$="text":�loadsquare:� ��#file:file=�file$ words%=1:� dummy$=�#file �len(dummy$)>2 � >word$(words%)=�dummy$,18):len%(words%)=�len(word$(words%)) (-�caps% word$(words%)=�caps(word$(words%)) 2 words%+=1 <� F��#file �words%=169 Pwords%-=1:needs%=Ǝlen%() Z �#file d�words%=0 � n�sort(1) x9�MenuDisable(main_Menu%,4):�MenuDisable(main_Menu%,6) ��rec(2) ��afterload �!�WindowClose(display_Window%) �C�file$,"Wimp$Scrap")=0 �IconPutText(savewords_Window%,1,file$) �� �: ���afterload ȉ�MenuEnable(main_Menu%,2):�MenuEnable(main_Menu%,3):�MenuEnable(main_Menu%,5):�MenuEnable(solve_Menu%,2):�MenuEnable(display_Menu%,2) �:�I%=1�168:�IconPutText(words_Window%,I%+3,word$(I%)):� �Swordstatus$=�(words%)+" words loaded.":�IconPutText(main_Window%,5,wordstatus$) �<�IconPutText(main_Window%,9,�GetFileFromPathname(temp$)) �high%=0:�updatesolvestate �>�I%=1�168:�words%<I% �IconPutText(words_Window%,I%+3,""):� �ww 8�BringToTop(main_Window%):�BringToTop(words_Window%) ]�wordswind%=0 �MenuTick(main_Menu%,2):�MenuTick(solve_Menu%,2):�MenuTick(display_Menu%,2) "'wordswind%=1:mainwind%=1:len%=�long ,�MenuEnable(words_Menu%,2) 6o�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy):�IconPutText(main_Window%,20,�gaps) @� J: T��LoadOwn(file$) ^file=�file$ h;wsqtitle$=�#file:gaps=��#file:dimx=��#file:dimy=��#file rwords%=��#file |�I%=1�words% �%word$(I%)=�#file:len%(I%)=��#file �'start%(I%)=��#file:dir%(I%)=��#file �show%(I%)=��#file �#sx%(I%)=��#file:sy%(I%)=��#file �#ex%(I%)=��#file:ey%(I%)=��#file �� ��I%=1�dimx*dimy �grid%(I%)=�#file �� � �#file �solveformat$="own" ��afterload �*�IconPutText(main_Window%,9,wsqtitle$) 7�MenuEnable(main_Menu%,4):�MenuEnable(main_Menu%,6) P�IconPutText(main_Window%,6,�oneormore(words%)+"placed - "+�gaps+"% gaps. ") A�file$,"Wimp$Scrap")=0 �IconPutText(savewsq_Window%,1,file$) &S�display:�IconPutText(solve_Window%,5,"Using wordsquare from creator program.") 08wsqx=dimx:wsqy=dimy:wsqwords%=words%:needs%=Ǝlen%() :E�I%=1�words%:�show%(I%)>0 high%+=1:�sic(words_Window%,I%+3,wcol%) D� N�updatesolvestate X� b: l��loadsquare v �#file:file=�file$:d$=�#file �dimy=0:d%=0:�:d$=�#file �:�d$>0 dimy+=1:�I%=1�dimx:d%+=1:grid%(d%)=��d$,I%,1):� ���#file �wsqx=dimx:wsqy=dimy � �#file �2�:�I%=1�10:�d%:�IconDisable(main_Window%,d%):� �Jwordstatus$="No words found.":�IconPutText(main_Window%,5,wordstatus$) �*�I%=4�6�2:�MenuEnable(main_Menu%,I%):� �high%=0 �p�BringToTop(solve_Window%):�BringToTop(display_Window%):�WindowClose(words_Window%):wordswind%=0:dispwind%=1 �|solvewind%=1:�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy):�IconPutText(main_Window%,20,"100") �i�display:�IconPutText(solve_Window%,5,"Using textfile wordsquare '"+�GetFileFromPathname(temp$)+"'.") �_�IconPutText(main_Window%,6,"Using textfile wordsquare '"+�GetFileFromPathname(temp$)+"'.") 3�IconPutText(solve_Window%,6,"No words found.") A�file$,"Wimp$Scrap")=0 �IconPutText(savewsq_Window%,1,file$) � : *��loadprefs 4file=�"<WordSq$Dir>.Prefs" >-dbl%=��#file:force%=��#file:caps%=��#file H/� dbl%=0 for spacing off, -1 for spacing on R2� caps%=0 for preserve case, -1 for capitalise \B� force%=0 for force single column, -1 for automatic selection fcol%=��#file:mcol%=��#file pwcol%=��#file:lcol%=��#file z&titlefont$=�#file:titlept%=��#file �$gridfont$=�#file:gridpt%=��#file �&wordsfont$=�#file:wordspt%=��#file �pre$=�#file:post$=�#file �"overon$=�#file:overoff$=�#file �$underon$=�#file:underoff$=�#file �"emphon$=�#file:emphoff$=�#file � �#file �3tempdbl%=dbl%:tempcaps%=caps%:tempforce%=force% �Atempcol%=col%:tempwcol%=wcol%:templcol%=lcol%:tempmcol%=mcol% �Ctemptitlept%=titlept%:tempgridpt%=gridpt%:tempwordspt%=wordspt% � �setprefs �%�dbl%=0 �SetIcon(prefs_Window%,3) �C�caps%=-1 �SetIcon(prefs_Window%,29):�SetIcon(prefs_Window%,30) C�force%=0 �SetIcon(prefs_Window%,45):�SetIcon(prefs_Window%,46) <�sib(prefs_Window%,50,col%):�sib(prefs_Window%,51,mcol%) =�sib(prefs_Window%,53,wcol%):�sib(prefs_Window%,54,lcol%) $� .: 8: B��setprefs L[�IconPutText(prefs_Window%,7,titlefont$):�IconPutText(prefs_Window%,32,�titlept%+" pt") VY�IconPutText(prefs_Window%,9,gridfont$):�IconPutText(prefs_Window%,35,�gridpt%+" pt") `\�IconPutText(prefs_Window%,13,wordsfont$):�IconPutText(prefs_Window%,38,�wordspt%+" pt") j��IconPutText(prefs_Window%,17,pre$):�IconPutText(prefs_Window%,23,post$):�IconPutText(prefs_Window%,24,overon$):�IconPutText(prefs_Window%,25,overoff$) t��IconPutText(prefs_Window%,26,underon$):�IconPutText(prefs_Window%,27,underoff$):�IconPutText(prefs_Window%,41,emphon$):�IconPutText(prefs_Window%,43,emphoff$) ~<�sib(prefs_Window%,50,col%):�sib(prefs_Window%,51,mcol%) �=�sib(prefs_Window%,53,wcol%):�sib(prefs_Window%,54,lcol%) �9�I%=1�168:�show%(I%)>0 �sic(words_Window%,I%+3,wcol%) �� �%�WindowForceDraw(display_Window%) �� �: ���getprefs �3dbl%=tempdbl%:caps%=tempcaps%:force%=tempforce% �Acol%=tempcol%:mcol%=tempmcol%:wcol%=tempwcol%:lcol%=templcol% �Otitlefont$=�IconText(prefs_Window%,7):titlept%=��IconText(prefs_Window%,32) �Mgridfont$=�IconText(prefs_Window%,9):gridpt%=��IconText(prefs_Window%,35) �Pwordsfont$=�IconText(prefs_Window%,13):wordspt%=��IconText(prefs_Window%,38) Fpre$=�IconText(prefs_Window%,17):post$=�IconText(prefs_Window%,23) Loveron$=�IconText(prefs_Window%,24):overoff$=�IconText(prefs_Window%,25) Nunderon$=�IconText(prefs_Window%,26):underoff$=�IconText(prefs_Window%,27) Lemphon$=�IconText(prefs_Window%,41):emphoff$=�IconText(prefs_Window%,43) (9�I%=1�168:�show%(I%)>0 �sic(words_Window%,I%+3,wcol%) 2� <%�WindowForceDraw(display_Window%) F� P: Z#��Event_SaveFile(file$,window%) dȎ window% � n!� savewsq_Window%:�savesquare x� solve_Window% �� info_Window% �� prefs_Window% �)� savewords_Window%:�savewords(file$) �� display_Window% �� words_Window% �� main_Window% �� ��MenuClose �� �: ���savewords(file$) �%�saveformat$<>"print" file=�file$ �$�I%=1�words%:�put(word$(I%),0):� H�saveformat$<>"print" �#file:�"SETTYPE "+file$+" Text":wordssaved%=1 � : "��saveown(file$) ,1Ȕ dimx,wsqx:Ȕ dimy,wsqy:Ȕ words%,wsqwords% 6file=�file$ @;�#file,wsqtitle$:�#file,�gaps:�#file,�dimx:�#file,�dimy J�#file,�words% T�I%=1�words% ^%�#file,word$(I%):�#file,�len%(I%) h'�#file,�start%(I%):�#file,�dir%(I%) r�#file,�show%(I%) |#�#file,�sx%(I%):�#file,�sy%(I%) �#�#file,�ex%(I%):�#file,�ey%(I%) �� ��I%=1�dimx*dimy ��#file,grid%(I%) �� � �#file ��"SETTYPE "+file$+" 03C" �1Ȕ dimx,wsqx:Ȕ dimy,wsqy:Ȕ words%,wsqwords% �gridsaved%=1:wordssaved%=1 �� �: ���savesquare �(�saveformat$="own" �saveown(file$):� �copyover 1Ȕ dimx,wsqx:Ȕ dimy,wsqy:Ȕ words%,wsqwords% ,�saveformat$="draw" pad$=�160 � pad$=" " &<len%=�long:b$()="":dummy%=0:�dbl%=-1 d%=dimx*2 � d%=dimx 0#�I%=1�dimy:�J%=1�dimx:dummy%+=1 :=b$(I%)+=�(grid%(dummy%)):�dbl%=-1 � J%<>dimx b$(I%)+=pad$ D�:� N'dimx+=-(dbl%*dimx):�dbl%=-1 dimx-=1 X%�force%=0 � words%<=60 c%=1:�tJ[ b.�(words%>(4*dimy) � words%>120) c%=4:�tJ[ l2�saveformat$="draw" � dimx<(len%*2) c%=1:�tJ[ v-�words%>(1.3*dimy) � words%>60 c%=2:�tJ[ �c%=1 ��saveformat$="imp" �tabs �-�saveformat$<>"print" file=�file$:�header �8�saveformat$<>"print" �#file,wsqtitle$:� �printtitle �Ȏ c% � �� 1:�format1 �� 2:�format2 �� 4:�format3 �� �[�dbl%=-1 � dimx/2=�(dimx/2) dimx=dimx/2:� �dbl%=-1 � dimx/2<>�(dimx/2) dimx=�(dimx/2)+1 �1Ȕ dimx,wsqx:Ȕ dimy,wsqy:Ȕ words%,wsqwords% � �copyback �I�saveformat$<>"print" �#file,�10:�#file:�"SETTYPE "+file$+" Text" � � gridsaved%=1:wordssaved%=1 � : ��saveprefs * �getprefs 4file=�"<WordSq$Dir>.Prefs" >-�#file,�dbl%:�#file,�force%:�#file,�caps% H�#file,�col%:�#file,�mcol% R�#file,�wcol%:�#file,�lcol% \&�#file,titlefont$:�#file,�titlept% f$�#file,gridfont$:�#file,�gridpt% p&�#file,wordsfont$:�#file,�wordspt% z�#file,pre$:�#file,post$ �"�#file,overon$:�#file,overoff$ �$�#file,underon$:�#file,underoff$ �"�#file,emphon$:�#file,emphoff$ � �#file �� �: ���SetIcon(w%,i%) �4wimp%!0=w%:wimp%!4=i%:wimp%!8=&200000:wimp%!12=0 �!ș "Wimp_SetIconState",,wimp% �� �: ���rec(type%) ��words%<1 dimx=0:dimy=0:� �type%=2 gaps=25 needs%=Ǝlen%() Ia=(1/(1-(gaps/100)))*needs%:dimy=�round(�(a/1.2)):dimx=�round(a/dimy) $7� words%<=120 maxh=60 � maxh=�(59-((words%-120)/2)) .len%=�long 8�len%>�max �drec:� B8�dimy<3 dimy=3 � � dimx>40 dimx=40:dimy=�round(a/40) L�maxh<dimy dimy=maxh V��gaps<10 � (dimx<len% � dimy<len%) �Alert("WordSq","All of these words will not fit into the largest size grid - you must delete a few, or shorten some of the longer ones.") `�type%=2 gaps=�gaps j�gaps<0 gaps=0 t'�IconPutText(main_Window%,20,�gaps) ~� �: � ��drec �AI%=0:�:I%+=1:�I%*len%>a*0.95:dimx=len%:dimy=I%:�dimy<3 dimy=3 �;�type%=2 gaps=�gaps:�IconPutText(main_Window%,20,�gaps) �� �: �ݤlen(dummy$) �TJ%=�dummy$:�I%=1��dummy$:C=�(�dummy$,I%,1)):� C<65 � C>122 � (C>90 � C<97) J%-=1 � �:=J% �: � ݤlong �/D=0:�I%=1�words%:�word$(I%)>D D=�word$(I%) �:=D : ݤmax �dimx>dimy =dimx � =dimy (: 2ݤround(num)=�(num+0.5) <: F ��addword P|w$=�IconText(main_Window%,26):�len(w$)<3 �Alert("WordSq","Words must be three alphabetical characters long or more."):� Zș"Hourglass_On" d��words%=0 �MenuEnable(main_Menu%,2):�MenuEnable(main_Menu%,3):�MenuEnable(main_Menu%,5):�MenuEnable(solve_Menu%,2):�MenuEnable(display_Menu%,2) nwords%+=1:word$(words%)=w$ x �clearall �?�updatesolvestate:�caps% word$(words%)=�caps(word$(words%)) �$len%(words%)=�len(word$(words%)) ��sort(1) �=�I%=1�words%:�IconPutText(words_Window%,I%+3,word$(I%)):� ��ww �S�rec(2):�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy) ���words%=1 �MenuEnable(words_Menu%,2):�wordswind%=0 wordswind%=1:�BringToTop(words_Window%):�MenuTick(solve_Menu%,2):�MenuTick(main_Menu%,2):�MenuTick(display_Menu%,2) �P�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�caret(0) �wordssaved%=0 �ș"Hourglass_Off" �� �: ���deleteword �selection%=0 � �solveformat$<>"own" �DT_ `o%=-1:number%=0:�I%=1�words%:�selected%(I%)=1 � start%(I%)<>0 � dir%(I%)<>0 number%+=1:�:� � "�number%>0 � ,^�selection%=1 d$="This word forms " � d$=�oneormore(number%)+"amongst the selection form " 6�o%=�WindowCancel("WordSq",d$+"part of the current wordsquare. Continuing with this operation will cause the wordsquare to be deleted. Click OK to delete.") @� JB�o%=0 � � �o%=-1 � number%>0 �WindowClose(display_Window%):�ng Tș"Hourglass_On" ^�number%=0:�I%=1�words%:�selected%(I%)=1 word$(I%)="~~":number%+=1:�SetIcon(words_Window%,I%+3):selected%(I%)=0:�show%(I%)>0 show%(I%)=0:high%-=1 h�:selection%=0:�setbutton r�sort(1):�rep(0) |=�I%=1�words%:�IconPutText(words_Window%,I%+3,word$(I%)):� �;words%-=number%:�solveformat$="text" wsqwords%-=number% �%�updatesolvestate:needs%=Ǝlen%() ��words%=0 � ���MenuDisable(main_Menu%,3):�MenuDisable(main_Menu%,2):�MenuDisable(solve_Menu%,2):�MenuDisable(main_Menu%,5):�MenuDisable(display_Menu%,2):�WindowClose(words_Window%) �O�MenuTick(main_Menu%,2):�MenuTick(solve_Menu%,2):�MenuTick(display_Menu%,2) �wordswind%=0:wordssaved%=1 �� ��words%>0 wordssaved%=0 �P�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�caret(0) �6�ww:�dispwind%=1 �WindowForceDraw(display_Window%) �[�solveformat$="text" gaps=�gaps:�IconPutText(main_Window%,20,�gaps):ș"Hourglass_Off":� �/gaps=25:�IconPutText(main_Window%,20,�gaps) �S�rec(2):�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy) ș"Hourglass_Off" � : &��amendword 0�selection%<>1 � :|w$=�IconText(main_Window%,26):�len(w$)<3 �Alert("WordSq","Words must be three alphabetical characters long or more."):� D�solveformat$="" �tJ` N`o%=-1:number%=0:�I%=1�words%:�selected%(I%)=1 � start%(I%)<>0 � dir%(I%)<>0 number%+=1:�:� � X�number%>0 � b^�selection%=1 d$="This word forms " � d$=�oneormore(number%)+"amongst the selection form " l�o%=�WindowCancel("WordSq",d$+"part of the current wordsquare. Continuing with this operation will cause the wordsquare to be deleted. Click OK to amend.") v� �B�o%=0 � � �o%=-1 � number%>0 �WindowClose(display_Window%):�ng �ș"Hourglass_On" �+�I%=1�words%:�selected%(I%)=1 dummy%=I% �O�:word$(dummy%)=�IconText(main_Window%,26):len%(dummy%)=�len(word$(dummy%)) �P�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�caret(0) �$�SetIcon(words_Window%,dummy%+3) �F�sort(1):�I%=1�words%:�IconPutText(words_Window%,I%+3,word$(I%)):� ��ww �/selected%(dummy%)=0:selection%=0:�setbutton ��updatesolvestate �S�rec(2):�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy) �wordssaved%=0 �ș"Hourglass_Off" !� !: !��sort(type%) ! �type%=2 type%=1:r%=1 � r%=0 !*P%=words%�2:�P%=0� !4�:R%=words%-P%:Q%=1 !>�:W%=Q% !H�:U%=W%+P% !R,�type%=1�word$(W%)<=word$(U%)ef%=1:�tDa !\*�type%=0�len%(W%)>=len%(U%)ef%=1:�tDa !fȔword$(W%),word$(U%) !p��r%=0 Ȕlen%(W%),len%(U%):Ȕstart%(W%),start%(U%):Ȕdir%(W%),dir%(U%):Ȕshow%(W%),show%(U%):Ȕsx%(W%),sx%(U%):Ȕsy%(W%),sy%(U%):Ȕex%(W%),ex%(U%):Ȕey%(W%),ey%(U%) !z W%-=P% !��W%<1�ef%=1:ef%=0:Q%+=1 !��Q%>R%:P%=P%�2 !� �P%=0 !�� !�: !���rep(type%) !�"�I%=1�words%:�word$(I%)="~~" � !�word$(I%)="" !�s�type%=0 len%(I%)=0:start%(I%)=0:dir%(I%)=0:selected%(I%)=0:show%(I%)=0:sx%(I%)=0:sy%(I%)=0:ex%(I%)=0:ey%(I%)=0 !�� !�� !�� !�: "��bumpx(inc%) "�words%=0 � "�button%=1 inc%=-inc% "$+� (dimx*dimy)<(needs%*1.12) � inc%=-1 � "..� (dimx=40 � inc%>0) � (dimx=0 � inc%<0) � "8&dimx+=inc%:� �gaps<10:dimx-=inc%:� "B'�IconPutText(main_Window%,12,�dimx) "L2gaps=�gaps:�IconPutText(main_Window%,20,�gaps) "V� "`: "j��bumpy(inc%) "t�words%=0 � "~�button%=1 inc%=-inc% "�5� (dimx*dimy)<(needs%*(1+(gaps/100))) � inc%=-1 � "�0� (dimy=maxh � inc%>0) � (dimy=0 � inc%<0) � "�&dimy+=inc%:� �gaps<10:dimy-=inc%:� "�'�IconPutText(main_Window%,16,�dimy) "�2gaps=�gaps:�IconPutText(main_Window%,20,�gaps) "�� "�: "���bumpgaps(inc%) "��gaps<10 �rec(0):� "��button%=1 inc%=-inc% "�� (gaps=10 � inc%=-1) � "�� (gaps=maxh � inc%=1) � # gaps+=inc% # '�IconPutText(main_Window%,20,�gaps) #S�rec(0):�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy) #� #(: #2ݤbumppt(inc%,dummy%,d%) #<9� (dummy%=6 � inc%=-1) � (dummy%=24 � inc%=1):=dummy% #F�button%=1 inc%=-inc% #P=dummy%+=inc%:�IconPutText(prefs_Window%,d%,�dummy%+" pt") #Z=dummy% #d: #n ݤgaps #x�dimx*dimy=0 =gaps #�3=�round((((dimx*dimy)-needs%)/(dimx*dimy))*100) #�: #�ݤoneormore(dummy%) #�� dummy%=1 ="1 word " #�� dummy%=0 ="No words " #�=�dummy%+" words " #�: #�ݤnone(dummy%) #�%�dummy%=0 ="None " � =�dummy%+" " #�: #���create #�T� words%<1 �Alert("WordSq","There are no words to be placed in a wordsquare!"):� #�Xd%=0:�words%<121 �Tbd �:�(dbl%=0 � dimx<((len%*2)+1)) � (dbl%=-1 � dimx<(len%+1)) � $&� dbl%=0 d%=(len%*2)+1 � d%=len%+1 $��Alert("WordSq","The number of words means that the grid must be at least "+�d%+" characters across. Please reset this value and try again.") $� $"�d%>0 � $,'wsqtitle$=�IconText(main_Window%,9) $6��(dimx*dimy)<(1.1*needs%) � (dimx<len% � dimy<len%) �Alert("WordSq","All of these words will not fit into the largest size grid - you must delete a few, or shorten some of the longer ones."):� $@ș"Hourglass_On" $Jwsqx=dimx:wsqy=dimy $T*not%=0:pla%=0:F%=0:startx%=0:starty%=0 $^*grid%()=0:start%()=0:dir%()=0:�sort(0) $h*Z%=0:�I%=1�words%:w$=�strip(word$(I%)) $rA%=0:tr%=0:F%=0 $|�:tr%+=1 $�8�-113 �Alert("WordSq","Creation interrupted."):Z%=1 $�A%=�(dimx*dimy) $�/� grid%(A%)<>0 � grid%(A%)<>�(�w$,1)) �tPd $��ends:�fit $�-�F%=1 � Z%=1 � tr%>=(dimx*dimy)+dimx+dimy $�"�Z%=1 I%=words%+1:�:�ng:Z%=0:� $�J�tr%>=(dimx*dimy)+dimx+dimy not%+=1:start%(I%)=0:dir%(I%)=99:� pla%+=1 $�P�IconPutText(main_Window%,6,"Creating - "+�oneormore(pla%)+"placed so far.") $�)�dir%(I%)<>99 �positions(I%,dir%(I%)) $�;ș"Hourglass_Percentage",�round((pla%+not%)/words%*100) $�b�:�gaps:�sort(1):�IconPutText(main_Window%,6,�oneormore(pla%)+"placed - "+�wsqgaps+"% gaps. ") $�$ș"Hourglass_Off":wsqwords%=pla% $��� pla%=0 �Alert("WordSq","In fact, no words could be placed. Try increasing the grid size."):�IconPutText(main_Window%,6,"No grid formed."):� % �not%>0 � %!�not%=1 d$="It " � d$="They " %��Alert("WordSq","When creating the wordsquare, "+�oneormore(not%)+"could not be placed. "+d$+"will remain in memory and appear selected in the word list window, but will not show up on the wordsquare.") %&+�clearall:selectedword$="":�I%=1�words% %0n�dir%(I%)=99 dir%(I%)=0:�SetIcon(words_Window%,I%+3):selected%(I%)=1:selection%+=1:selectedword$=word$(I%) %:�:�setbutton %D*�selection%=1 d$=selectedword$ � d$="" %NT�IconPutText(main_Window%,26,d$):�IconPutText(solve_Window%,17,d$):�caret(�d$/2) %X� %bQ�MenuEnable(main_Menu%,4):�MenuEnable(main_Menu%,5):�MenuEnable(main_Menu%,6) %l1�display:solveformat$="own":�updatesolvestate %vJ�IconPutText(solve_Window%,5,"Using wordsquare from creator program.") %�,�solvewind% �BringToTop(display_Window%) %�$wsqx=dimx:wsqy=dimy:gridsaved%=0 %�� %�: %�ݤcaps(d$) %��K% %��d$=0 ="" %��K%=1��d$:ch%=�(�d$,K%,1)) %�*�ch%>96 � ch%<123 �d$,K%,1)=�(ch%�223) %�� %�=d$ %�: %� ��ends &Cpo=A%:po-=1:�:po+=1:��(po/dimx)=po/dimx:me%=po:mw%=me%-(dimx-1) &� &: & ��fit &*L%=�w$-1 &4C�A%-L%>=mw% � A%-(dimx*L%)>=1 �fill(-1,-dimx):dir%(I%)=8:� F% � &>J�A%-L%>=mw% � A%+(dimx*L%)<=dimx*dimy �fill(-1,dimx):dir%(I%)=6:� F% � &HI�A%+L%<=me% � A%+(dimx*L%)<=dimx*dimy �fill(1,dimx):dir%(I%)=4:� F% � &RB�A%+L%<=me% � A%-(dimx*L%)>=1 �fill(1,-dimx):dir%(I%)=2:� F% � &\-�A%-L%>=mw% �fill(-1,0):dir%(I%)=7:� F% � &f5�A%-(dimx*L%)>=1 �fill(0,-dimx):dir%(I%)=1:� F% � &p<�A%+(dimx*L%)<=dimx*dimy �fill(0,dimx):dir%(I%)=5:� F% � &z,�A%+L%<=me%:�fill(1,0):dir%(I%)=3:� F% � &�� &�: &���fill(x,y) &�p%=A%:�K%=2��w$:p%+=(x+y) &�7�grid%(p%)<>�(�w$,K%,1))� grid%(p%)<>0 K%=�w$+1:�:� &�� &�start%(I%)=A% &�;p%=A%:�K%=1��w$:grid%(p%)=�(�w$,K%,1)):p%+=(x+y):�:F%=1 &�� &�: &� ��gaps &�Hwsqgaps=0:�I%=1�dimx*dimy:�grid%(I%)=0 grid%(I%)=�(26)+64:wsqgaps+=1 &�/�:wsqgaps=�round((wsqgaps/(dimx*dimy))*100) '� ': ' ��format1 '$�I%=1�words% '.)�I%=1 �under � �I%=dimy+1 �over:�DVg '8P�saveformat$="draw" �#file,"\1";:��saveformat$="imp" �#file,"{""Grid"" on}"; 'BE�I%<=dimy �put(b$(I%),1):� �saveformat$<>"imp" �put(�pad(dimx),1) 'LQ�saveformat$="draw" �#file,"\2";:��saveformat$="imp" �#file,"{""Words"" on}"; 'V�put(�pad(3),1) '`�put(word$(I%),0):� 'j*�words%=dimy �over:�:�� words%>=dimy � 'td�I%=words%+1 � dimy:�saveformat$="draw" �#file,"\1";:��saveformat$="imp" �#file,"{""Grid"" on}"; '~�put(b$(I%),0):� '�� '�� '�: '� ��format2 '�L�(words%/2)<>words%/2 C1=�(words%/2)+1:C2=words%-C1:� C1=words%/2:C2=C1 '��I%=1�C1 '�)�I%=1 �under � �I%=dimy+1 �over:�dlg '�Q�saveformat$="draw" �#file,"\1";:� �saveformat$="imp" �#file,"{""Grid"" on}"; '�E�I%<=dimy �put(b$(I%),1):� �saveformat$<>"imp" �put(�pad(dimx),1) '�R�saveformat$="draw" �#file,"\2";:� �saveformat$="imp" �#file,"{""Words"" on}"; '�\�put(�pad(3),1):�put(word$(I%),1):�put(�pad(len%-�word$(I%)+1),1):�put(word$(C1+I%),0):� '�"�C1=dimy �over:�:�� C1>=dimy � ( Q�saveformat$="draw" �#file,"\1";:� �saveformat$="imp" �#file,"{""Grid"" on}"; ( $�I%=C1+1 � dimy:�put(b$(I%),0):� ( �over (� ((: (2 ��format3 (<AC%=words%-((dimy+1)*2):D%=C%+1:�:D%-=1:��(D%/4)=D%/4:E%=C%-D% (F)� E%=0:E%=4:C1=D%/4:C2=C1:C3=C1:C4=C3 (P*� E%=1:C1=(D%/4)+1:C2=D%/4:C3=C2:C4=C3 (Z0� E%=2:C1=(D%/4)+1:C2=(D%/4)+1:C3=D%/4:C4=C3 (d6� E%=3:C1=(D%/4)+1:C2=(D%/4)+1:C3=(D%/4)+1:C4=D%/4 (n�I%=1�dimy (x�I%=1�under (�Q�saveformat$="draw" �#file,"\1";:� �saveformat$="imp" �#file,"{""Grid"" on}"; (�q�put(b$(I%),1):�put(�pad(3),1):�saveformat$="draw" �#file,"\2";:� �saveformat$="imp" �#file,"{""Words"" on}"; (�e�put(word$(C1+C2+I%),1):�put(�pad(len%+1-�word$(C1+C2+I%)),1):�put(word$(dimy+C1+C2+C3+1+I%),0):� (�Q�saveformat$="draw" �#file,"\1";:� �saveformat$="imp" �#file,"{""Grid"" on}"; (��over:�put(�pad(3),1) (�R�saveformat$="draw" �#file,"\2";:� �saveformat$="imp" �#file,"{""Words"" on}"; (�m�put(word$(dimy+C1+C2+1),1):�put(�pad(len%+1-�word$(dimy+C1+C2+1)),1):�put(word$(dimy+dimy+C1+C2+C3+2),0) (��I%=1�C1 (�R�saveformat$="draw" �#file,"\2";:� �saveformat$="imp" �#file,"{""Words"" on}"; (�5�put(word$(I%),1):�put(�pad(len%+1-�word$(I%)),1) (�s�I%<C1 � (I%=C1 � E%>=2) �put(word$(C1+I%),1):�put(�pad(dimx+3-(len%+1-�word$(I%)+�word$(I%)+�word$(C1+I%))),1) (�h�I%<C1 � (I%=C1 � E%>=3) �put(word$(dimy+C1+C2+1+I%),1):�put(�pad(len%+1-�word$(dimy+C1+C2+1+I%)),1) (�C�I%<C1 � (I%=C1 � E%>=4) �put(word$(dimy+dimy+C1+C2+C3+2+I%),0) )� )� ): )" ��tabs ),case%=�case )6&�case%=0 a=2.7:b=0.44 � a=4:b=0.65 )@Ȏ c% � )JE� 1:t1%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:tab$="tabs "+�t1%+"pt" )Tv� 2:t1%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:t2%=t1%+5+(len%*(a+((wordspt%-6)*b))):tab$="tabs "+�t1%+"pt,"+�t2%+"pt" )^�� 4:t1%=15+(len%*(a+((wordspt%-6)*b))):t2%=(dimx*(3.65+((gridpt%-6)*0.6)))+22:t3%=t2%+15+(len%*(a+((wordspt%-6)*b))):tab$="tabs "+�t1%+"pt,"+�t2%+"pt,"+�t3%+"pt" )h� )r� )|: )���header )�Ȏ saveformat$ � )�� "text" )��� "draw":header$="\! 1"+�10+"\F 0 "+titlefont$+" "+�titlept%+�10+"\F 1 "+gridfont$+" "+�gridpt%+�10+"\F 2 "+wordsfont$+" "+�wordspt%+�10+"\L"+�(�round(gridpt%*1.08))+�10 )�9header$+="\P"+�(�round((gridpt%*1.08)/1.75))+�10+"\0" )��#file,header$ )¯� "imp":header$="{define style ""Title"";font "+titlefont$+";fontsize "+�titlept%+"pt;"+tab$+"}{define style ""Grid"";font "+gridfont$+";fontsize "+�gridpt%+"pt;"+tab$+"}" )�kheader$+="{define style ""Words"";font "+wordsfont$+";fontsize "+�wordspt%+"pt;"+tab$+"}{""Title"" on}" )��#file,header$; )�� )�� )�: )� ݤpad(d%) * � saveformat$="imp" ="{tab}" *#� saveformat$="draw" =�d%,�160) * =�d%," ") *&: *0��put(d$,d%) *:%�saveformat$="print" �d$;:�d%=0 � *D4�saveformat$<>"print" �#file,d$;:�d%=0 �#file,"" *N� *X: *b ��over *l5�saveformat$="draw" a$="\1":b$=�pad(dimx):c$="\2" *v�saveformat$="imp" � *��c%=4 b$="{tab}" � b$="" *�*a$="{""Grid"" on}":c$="{""Words"" on}" *�� *�1�saveformat$="text" a$="":b$=�pad(dimx):c$="" *�G�saveformat$<>"print" � overon$="" � overoff$="" �put(a$+b$+c$,1):� *�;�getecho(overon$):�put(�pad(dimx),1):�getecho(overoff$) *�� *�: *���under *�C�saveformat$<>"print" � underon$="" � underoff$="" �put("",0):� *�=�getecho(underon$):�put(�pad(dimx),0):�getecho(underoff$) *�� *�: + ��pre +%�saveformat$<>"print" � pre$="" � +�getecho(pre$) + � +*: +4 ��post +>&�saveformat$<>"print" � post$="" � +H�getecho(post$) +R� +\: +f��printtitle +p*�emphon$="" � emphoff$="" �wsqtitle$:� +z3�getecho(emphon$):�wsqtitle$:�getecho(emphoff$) +�� +�: +���getecho(d$) +�d%=1 +�e�K%=1��d$:dummy$="":�d$,K%,1)="," dummy$=�d$,d%,K%-d%):d%=K%+1:� � K%=�d$ dummy$=�d$,d%,K%-d%+1) +��dummy$<>"" �1;��dummy$; +�� +�� +�: +���caret(c%) +�Q�c%>1000 � solvewind% c%-=1000:�IconCaret(solve_Window%,17,c%):� � �c%>1000 � +�/�solvewind% �IconCaret(solve_Window%,17,c%) +�D�mainwind% � solveformat$<>"text" �IconCaret(main_Window%,26,c%) ,� ,: ,ݤnew(extra$) ,$fmessage$="You have not saved your ":�wordssaved%=0 message$+="words":�gridsaved%=0 message$+=" or" ,.6�gridsaved%=0 message$+=" grid. " � message$+=". " ,84message$+="Are you sure you want to "+extra$+"?" ,B-�wordssaved%=1 � gridsaved%=1 message$="" ,L9� message$<>"":�WindowCancel("WordSq",message$)=0 =0 ,V=1 ,`: ,j��reset ,tș"Hourglass_On" ,~ �closeall ,�Mselection%=0:word$()="":grid%()=0:start%()=0:dir%()=0:len%()=0:�setbutton ,�Dwords%=0:gaps=25:dimx=0:dimy=0:solveformat$="":high%=0:show%()=0 ,�<sx%()=0:sy%()=0:ex%()=0:ey%()=0:show%=0:found%=0:done%=0 ,�Lwsqx=0:wsqy=0:wsqwords%=0:wordssaved%=1:gridsaved%=1:startx%=0:starty%=0 ,�1�:�I%=1�10:�d%:�IconEnable(main_Window%,d%):� ,�c�IconPutText(main_Window%,5,"No words entered."):�IconPutText(main_Window%,6,"No grid formed.") ,�o�IconPutText(main_Window%,12,�dimx):�IconPutText(main_Window%,16,�dimy):�IconPutText(main_Window%,20,�gaps) ,·�IconPutText(solve_Window%,5,"No wordsquare currently available."):�IconPutText(solve_Window%,6,"No words available - None shown.") ,�p�IconPutText(main_Window%,26,""):�IconPutText(solve_Window%,17,""):�IconPutText(main_Window%,9,"<Untitled>") ,��I%=4 � 171:�IconPutText(words_Window%,I%,""):�sic(words_Window%,I%,7):�selected%(I%-3)=1 selected%(I%-3)=0:�SetIcon(words_Window%,I%):�:� � ,��ww ,�]�wordswind%=1 �MenuTick(display_Menu%,2):�MenuTick(main_Menu%,2):�MenuTick(solve_Menu%,2) - ��MenuDisable(main_Menu%,2):�MenuDisable(main_Menu%,3):�MenuDisable(main_Menu%,4):�MenuDisable(main_Menu%,5):�MenuDisable(display_Menu%,2) - �MenuDisable(solve_Menu%,2) -�MenuDisable(words_Menu%,2) -6selected%()=0:mainwind%=0:solvewind%=0:dispwind%=0 -(ș"Hourglass_Off" -2� -<: -F��ng -PCgrid%()=0:start%()=0:dir%()=0:solveformat$="":high%=0:show%()=0 -ZCwsqx=0:wsqy=0:wsqwords%=0:gridsaved%=1:show%=0:found%=0:done%=0 -d2�IconPutText(main_Window%,6,"No grid formed.") -n��IconPutText(solve_Window%,5,"No wordsquare currently available."):�IconPutText(solve_Window%,6,"No words available - None shown.") -xT�MenuDisable(main_Menu%,4):�MenuDisable(main_Menu%,5):�MenuDisable(main_Menu%,6) -�(�I%=4�171:�sic(words_Window%,I%,7):� -�7�Z%=1 ș"Hourglass_On":�sort(1):ș"Hourglass_Off":� -�gaps=25:dimx=0:dimy=0 -�'�IconPutText(main_Window%,20,�gaps) -�� -�: -���closeall -Ȑ�WindowClose(display_Window%):�WindowClose(main_Window%):�WindowClose(solve_Window%):�WindowClose(words_Window%):�WindowClose(prefs_Window%) -�)wordswind%=0:solvewind%=0:dispwind%=0 -�� -�: -� ��display -�6dummy%=0:�I%=1�dimy:dummy$="":�J%=1�dimx:dummy%+=1 .2dummy$+=�(grid%(dummy%)):�J%<>dimx dummy$+=" " .*�:�dummy$<79 dummy$+=�79-�dummy$," ") ./�IconPutText(display_Window%,I%+1,dummy$):� ."H�dimy<60 �I%=dimy+1�60:�IconPutText(display_Window%,I%+1,�79," ")):� .,;�resize(display_Window%,0,-84-(dimy*44),54+(dimx*32),0) .6� .@: .J��updatesolvestate .TȎ solveformat$ � .^� "own" .h�wordstatus$=�oneormore(wsqwords%)+"in the grid - "+�none(high%)+"shown - "+�none(selection%)+"selected.":�IconPutText(solve_Window%,6,wordstatus$) .rvwordstatus$=�oneormore(words%)+"entered - "+�none(selection%)+"selected.":�IconPutText(main_Window%,5,wordstatus$) .|� "text" .��wordstatus$=�oneormore(wsqwords%)+"in the grid - "+�none(high%)+"shown - "+�none(selection%)+"selected.":�IconPutText(solve_Window%,6,wordstatus$) .�wwordstatus$=�oneormore(wsqwords%)+"found - "+�none(selection%)+"selected.":�IconPutText(main_Window%,5,wordstatus$) .�� "" .�vwordstatus$=�oneormore(words%)+"entered - "+�none(selection%)+"selected.":�IconPutText(main_Window%,5,wordstatus$) .�� .�� .�: .���setbutton .�.�selection%<2 d$=" Word" � d$=" Selection" .�-�IconPutText(main_Window%,25,"Delete"+d$) .�-�IconPutText(solve_Window%,8,"Remove"+d$) .�+�IconPutText(solve_Window%,9,"Show"+d$) .�� /: /��find(d$) /ș"Hourglass_On" /&w$=�strip(d$) /0F%=0:I%=words%+1 /:�A%=1�dimx*dimy /D/ș"Hourglass_Percentage",A%/(dimx*dimy)*100 /N �grid%(A%)=��d$,1) �nextstep /X� /bș"Hourglass_Off" /lc�F%=0 �Alert("WordSq","The word '"+d$+"' does not exist in the currently loaded wordsquare."):� /v��F%>1 � �palindrome(d$)=0 �Alert("WordSq","More than one occurrence of "+gibbet$+" has been found, so it will be ignored"):� /�ș"Hourglass_On" /�9d$=�IconText(solve_Window%,17):�caps%=-1 d$=�caps(d$) /�lwords%+=1:wsqwords%+=1:word$(words%)=d$:len%(words%)=�len(d$):dir%(words%)=d%:needs%=Ǝlen%():gaps=�gaps /�#�positions(words%,dir%(words%)) /�_high%+=1:show%(words%)=1:�sort(1):�I%=1�words%:�IconPutText(words_Window%,I%+3,word$(I%)):� /��ww /�need%=1:wordssaved%=0 /�ș"Hourglass_Off" /�� /�: /���nextstep /��ends:L%=�d$-1 /�?�A%-L%>=mw%�A%-(dimx*L%)>=1:dir%(I%)=8:�getstring(-1,-dimx) 0F�A%-L%>=mw%�A%+(dimx*L%)<=dimx*dimy:dir%(I%)=6:�getstring(-1,dimx) 0G�A%+L%<=me% � A%+(dimx*L%)<=dimx*dimy:dir%(I%)=4:�getstring(1,dimx) 0@�A%+L%<=me% � A%-(dimx*L%)>=1:dir%(I%)=2:�getstring(1,-dimx) 0 +�A%-L%>=mw%:dir%(I%)=7:�getstring(-1,0) 0*3�A%-(dimx*L%)>=1:dir%(I%)=1:�getstring(0,-dimx) 04:�A%+(dimx*L%)<=dimx*dimy:dir%(I%)=5:�getstring(0,dimx) 0>*�A%+L%<=me%:dir%(I%)=3:�getstring(1,0) 0H� 0R: 0\��getstring(x,y) 0f>dummy$=�d$,1):p%=A%:�J%=2��d$:p%+=x+y:dummy$+=�grid%(p%):� 0p/� dummy$=d$ F%+=1:start%(I%)=A%:d%=dir%(I%) 0z� 0�: 0�ݤexists(d$) 0�ș"Hourglass_On" 0�9e%=0:�W%=1�words%:� d$=�strip(�caps(word$(W%))) e%=W% 0�� 0�ș"Hourglass_Off" 0�=e% 0�: 0�ݤpalindrome(o$) 0�/dummy$="":�o%=�o$�1 �-1:dummy$+=�o$,o%,1):� 0��o$=dummy$ =1 � =0 0�: 0���copyover 1temp$()="" 1$�I%=1�words%:temp$(I%)=word$(I%) 1-�start%(I%)=0 � dir%(I%)=0 word$(I%)="~~" 1$�:�sort(2):�rep(1) 1.� 18: 1B��copyback 1Lword$()="" 1V(�I%=1�words%:Ȕtemp$(I%),word$(I%):� 1`� 1j: 1t��autoload 1~ș "OS_GetEnv" � d$ 1�d$=�d$,�d$-20) 1�ȕ �d$,1)<>" " � �d$<>0 1�d$=�d$,�d$-1) 1�� 1��d$=" " d$="" 1�� 1�: 1���crossout(d%) 1�8xpos%=x_origin%+14:ypos%=y_origin%-((d%-2)*36)-252+6 1�/� xpos%,ypos%:� xpos%+(len%(d%)*16)+2,ypos% 1�� 1�: 2 ��sic(w%,i%,c%) 2 :!wimp%=w%:wimp%!4=i%:wimp%!8=c%<<24:wimp%!12=&0F000000 2!ș"Wimp_SetIconState",0,wimp% 2� 2(: 22��sib(w%,i%,c%) 2<:!wimp%=w%:wimp%!4=i%:wimp%!8=c%<<28:wimp%!12=&F0000000 2F!ș"Wimp_SetIconState",0,wimp% 2P� 2Z: 2d ݤgetword(startpos%,endpos%) 2nFA%=startpos%:Ȕwsqx,dimx:Ȕwsqy,dimy:�ends:Ȕwsqx,dimx:Ȕwsqy,dimy 2x,scol%=startpos%�wsqx:�scol%=0 scol%=wsqx 2�*ecol%=endpos%�wsqx:�ecol%=0 ecol%=wsqx 2�7srow%=((startpos%-1)�wsqx):erow%=((endpos%-1)�wsqx) 2�4�srow%>erow% � scol%=ecol% dx%=0:dy%=-wsqx:�dfr 2�4�srow%>erow% � scol%<ecol% dx%=1:dy%=-wsqx:�dfr 2�0�srow%=erow% � scol%<ecol% dx%=1:dy%=0:�dfr 2�3�srow%<erow% � scol%<ecol% dx%=1:dy%=wsqx:�dfr 2�3�srow%<erow% � scol%=ecol% dx%=0:dy%=wsqx:�dfr 2�4�srow%<erow% � scol%>ecol% dx%=-1:dy%=wsqx:�dfr 2�1�srow%=erow% � scol%>ecol% dx%=-1:dy%=0:�dfr 2�/�srow%>erow% � scol%>ecol% dx%=-1:dy%=-wsqx 2�dummy$="":p%=startpos%:o%=0 2�� 2�dummy$+=�grid%(p%) 3p%+=dx%+dy% 3-�p%=endpos% o%=1:dummy$+=�grid%(p%):p%=-1 3� p%<0 � p%>(wsqx*wsqy) 3"/�o%=1 ��dummy$<19 � �dummy$>2 =dummy$ � ="" 3,: 36ݤstrip(o$) 3@Kc$=�caps(o$):o%=�c$:o$="":�J%=1�o%:e$=�c$,J%,1):�e$<="Z"�e$>="A" o$+=e$ 3J� 3T=o$ 3^: 3h��positions(d%,dir%) 3r?�start%(d%)�wsqx=0 xpos%=wsqx-1 � xpos%=(start%(d%)�wsqx)-1 3|ypos%=(start%(d%)�wsqx) 3�0�start%(d%)/wsqx=�(start%(d%)/wsqx) ypos%-=1 3�+xpos%=(xpos%*32)+25:ypos%=(ypos%*44)+68 3� Ȏ dir% � 3�� 1:dx%=0:dy%=44 3�� 2:dx%=32:dy%=44 3�� 3:dx%=32:dy%=0 3�� 4:dx%=32:dy%=-44 3�� 5:dx%=0:dy%=-44 3�� 6:dx%=-32:dy%=-44 3�� 7:dx%=-32:dy%=0 3�� 8:dx%=-32:dy%=44 3�� 3�dy%=-dy% 4asx%(d%)=xpos%:sy%(d%)=ypos%:ex%(d%)=xpos%+((len%(d%)-1)*dx%):ey%(d%)=ypos%+((len%(d%)-1)*dy%) 4� 4: 4& ݤcase 40d%=0 4:P�I%=1�words%:�J%=1��word$(I%):d$=�word$(I%),J%,1):� d$>="A" � d$<="Z" d%+=1 4D�:� 4N�d%>(words%*2.5) =1 � =0 4X: 4bݤorigin 4l=16+wimp%!4-wimp%!20-18 4v: 4�#� 11,13,15,17,19,21,24,26,28,29 4�: 4���Alert(title$,message$) 4� �AlertBox(title$,message$,0) 4�� 4�: 4�'��AlertBox(title$,message$,button%) 4�/�response%:$(wimp%+4)=message$:Ȏ button% � 4�� 1:response%=15 4�� 2:response%=1 4�� 3:response%=(1<<5)+16 4�� 4:response%=(1<<6)+16 4�:response%=16 5� 5=ș "Wimp_ReportError",wimp%,response%,title$ � ,response% 5� 5 : 5*#ݤWindowCancel(title$,message$) 54$$(wimp%+4)=message$:response%=23 5>=ș "Wimp_ReportError",wimp%,response%,title$ � ,response% 5H=response%-2 5R: 5\ݤWindowTitle(window%) 5fwimp%!0=window% 5p ș "Wimp_GetWindInfo",,wimp% 5z6� ((wimp%!60)�&100)=0 � 1,"Title isn't indirected" 5�=$(wimp%!76) 5�: 5�ݤWindowLoad(window$) 5�6=�WindowLoadFrom(window$,"<WordSq$Dir>.Templates") 5�: 5�'ݤWindowLoadFrom(window$,template$) 5�� c%,i%,n%,j%,sp$,sp2$ 5�%ș "Wimp_OpenTemplate",,template$ 5�Mș "Wimp_LoadTemplate",,wimp%,icons%,icon_memory%,-1,window$,0 � ,,icons% 5�Ȏ sprites% � 5�� 1:wimp%!64=sprites% 5�:wimp%!64=sprites% 5�� 6&ș "Wimp_CreateWindow",,wimp% � c% 6ș "Wimp_CloseTemplate" 67ș "Wimp_WhichIcon",c%,wimp%+40,1+2+(1<<8),2+(1<<8) 6$Ȏ wimp%!40 � 6.� -1 68:i%=40 6B� 6Lwimp%!4=wimp%!i%:wimp%!0=c% 6V!ș "Wimp_GetIconState",,wimp% 6`%sp$=�GetStringAtAddress(wimp%!28) 6jș "Wimp_DeleteIcon",,wimp% 6tȎ sprites% � 6~� 1:wimp%!32=1 6� 6�*ș "OS_SpriteOp",&108,sprites% � ,,,n% 6�j%=0 6��:j%+=1 6�7ș "OS_SpriteOp",&10D,sprites%,pointer_block%,20,j% 6�,sp2$=�GetStringAtAddress(pointer_block%) 6�� j%=n% � sp$=sp2$ 6�/� sp$=sp2$ � wimp%!32=sprites% � wimp%!32=1 6�� 6�wimp%!4=c% 6�+ș "Wimp_CreateIcon",,wimp%+4 � handle% 6� i%+=4 7 � (wimp%!i%)=-1 7 � 7=c% 7: 7(��BringToTop(window%) 72!wimp%=window% 7<#ș "Wimp_GetWindowState",,wimp% 7Fwimp%!28=-1 7Pș "Wimp_OpenWindow",,wimp% 7Z(�window%=display_Window% dispwind%=1 7d� 7n: 7x��WindowClose(window%) 7�!wimp%=window% 7� ș "Wimp_CloseWindow",,wimp% 7�(�window%=display_Window% dispwind%=0 7�� 7�: 7���WindowForceDraw(window%) 7�Ȏ window% � 7�3� -1:ș "Wimp_ForceRedraw",-1,0,0,2*1280,2*1024 7�6:ș "Wimp_ForceRedraw",window%,0,-2*1024,2*1280,0 7�� 7�� 7�: 7���WindowOpen(window%) 8!wimp%=window% 8#ș "Wimp_GetWindowState",,wimp% 8ș "Wimp_OpenWindow",,wimp% 8"� 8,: 86�WindowInterface 8@ ș"Wimp_BorderWindow",,wimp% 8J� 8T: 8^ݤIconBar(Sprite$) 8h� icon% 8rwimp%!0=-1 8|wimp%!4=0:wimp%!8=0 8�wimp%!12=68:wimp%!16=68 8�wimp%!20=&3002 8�$(wimp%+24)=Sprite$ 8�'ș "Wimp_CreateIcon",,wimp% � icon% 8� =icon% 8�: 8�%��IconCaret(window%,icon%,chars%) 8�8ș "Wimp_SetCaretPosition",window%,icon%,,,-1,chars% 8�� 8�: 8�ݤIconText(window%,icon%) 8�!wimp%!0=window%:wimp%!4=icon% 8�!ș "Wimp_GetIconState",,wimp% 9Y� ((wimp%!24) � &100)=0 � 1,"Icon "+�icon%+" in window "+�window%+" isn't indirected" 9=$(wimp%!28) 9: 9&#ݤIconValidation(window%,icon%) 90!wimp%!0=window%:wimp%!4=icon% 9:!ș "Wimp_GetIconState",,wimp% 9DY� ((wimp%!24) � &100)=0 � 1,"Icon "+�icon%+" in window "+�window%+" isn't indirected" 9N=$(wimp%!32) 9X: 9b ��IconDisable(window%,icon%) 9l!wimp%!0=window%:wimp%!4=icon% 9v wimp%!8=1<<22:wimp%!12=1<<22 9�!ș "Wimp_SetIconState",,wimp% 9�� 9�: 9���IconEnable(window%,icon%) 9�!wimp%!0=window%:wimp%!4=icon% 9�wimp%!8=0:wimp%!12=1<<22 9�!ș "Wimp_SetIconState",,wimp% 9�� 9�: 9�*ݤIconPutSprite(window%,icon%,sprite$) 9�!wimp%!0=window%:wimp%!4=icon% 9�!ș "Wimp_GetIconState",,wimp% 9�ș "Wimp_DeleteIcon",,wimp% :6wimp%!4=wimp%!8:wimp%!8=wimp%!12:wimp%!12=wimp%!16 :;wimp%!16=wimp%!20:wimp%!20=wimp%!24:$(wimp%+24)=sprite$ :'ș "Wimp_CreateIcon",,wimp% � icon% : =icon% :*: :4&��IconPutText(window%,icon%,text$) :>#wimp%!0=window% : wimp%!4=icon% :H!ș "Wimp_GetIconState",,wimp% :RY� ((wimp%!24) � &100)=0 � 1,"Icon "+�icon%+" in window "+�window%+" isn't indirected" :\$(wimp%!28)=text$ :f!wimp%!0=window%:wimp%!4=icon% :pwimp%!8=0:wimp%!12=0 :z!ș "Wimp_SetIconState",,wimp% :�� :�: :���IconInterfaceStart :�ș"Wimp_BorderIcon",,wimp% :�� :�: :���IconInterfaceFinish :� wimp%!8=0 :�ș"Wimp_BorderIcon",,wimp% :�� :�: :���MenuAdjustOn(menu%) :�,ș "Wimp_GetPointerInfo",,pointer_block% ;^� ((pointer_block%!8)�1)=1 � ș "Wimp_CreateMenu",,menu%,pointer_block%!0,pointer_block%!4 ;� ;: ;$ݤMenuChoice(level%) ;.=(wimp%!(4*level%))+1 ;8: ;BݤMenuCreate(menu$) ;L/� menu$="Colours" �=�MenuCreateColours(" ") ;V'� menu%,index%,width%,length%,k%,s% ;`)� menu% 28+�MenuNoOfEntries(menu$)*24 ;j/menu%?12=7:menu%?13=2:menu%?14=7:menu%?15=0 ;t'menu%!16=140:menu%!20=44:menu%!24=0 ;~index%=menu%+28 ;� $menu%=�menu$,�menu$,"\")-1) ;�#width%=�(�menu$,�menu$,"\")-1)) ;�"menu$+="\":Menu_NoOfEntries%=0 ;�ȕ menu$<>"" ;�menu$=�menu$,�menu$,"\")+1) ;�Ȏ menu$ � ;�� "" ;� ;�+!index%=0:index%!4=-1:index%!8=&7000021 ;�length%=�menu$,"\")-1 ;�k%=��menu$,length%),">") ;�Ȏ k% � <