10 REM >FillIn 20 REM by Steven Flintham 30 REM 40 REM A program to demonstrate the "automatic fill in" method of input 50 REM 60 REM Saturday 28th August 1993 70 REM Thursday 2nd September 1993 80 : 90 MODE 7 100 PROCdisable 110 PROCinit 120 PROCtitle 130 PROCset_up_choices 140 PROCshow_choices 150 PRINT'"Your choice?";CHR$131; 160 choice$=FNfill_in(choices%,FALSE) 170 PRINT'"You chose ";choice$ 180 PROCenable 190 END 200 : 210 DEF PROCdisable 220 *FX229,1 230 *FX4,2 240 ENDPROC 250 : 260 DEF PROCenable 270 *FX229 280 *FX4 290 ENDPROC 300 : 310 DEF PROCinit 320 ON ERROR MODE 7:REPORT:PRINT " at line ";ERL:PROCenable:END 330 DIM fill_in$(10) 340 ENDPROC 350 : 360 DEF PROCtitle 370 PRINTTAB(5,0);CHR$141;CHR$132;CHR$157;CHR$131;"Fill-in demonstration ";CHR$156 380 PRINTTAB(5,1);CHR$141;CHR$132;CHR$157;CHR$131;"Fill-in demonstration ";CHR$156 390 PRINTTAB(6,2);CHR$131;"(C) Steven Flintham 1993" 400 ENDPROC 410 : 420 DEF PROCset_up_choices 430 LOCAL read% 440 RESTORE 510 450 READ choices% 460 FOR read%=1 TO choices% 470 READ fill_in$(read%) 480 NEXT 490 ENDPROC 500 : 510 DATA 9 520 DATA Number,Nuts,Natural,Distinct,Adjacent,Address,Num,Print,Printout 530 : 540 DEF PROCshow_choices 550 LOCAL show%,pos% 560 PRINTTAB(0,4);"The options are:";:pos%=POS 570 FOR show%=1 TO choices% 580 PRINTTAB(pos%,3+show%);CHR$131;fill_in$(show%) 590 NEXT 600 ENDPROC 610 : 620 DEF FNfill_in(choices%,allow_null%) 630 LOCAL 640 pos%=POS:vpos%=VPOS 650 user$="" 660 longest%=-1 670 FOR check%=1 TO choices% 680 IF LEN(fill_in$(check%))>longest% THEN longest%=LEN(fill_in$(check%)) 690 NEXT 700 REPEAT 710 REPEAT 720 *FX21 730 key%=GET 740 IF key%>=ASC("a") AND key%<=ASC("z") THEN key%=key%-32 750 UNTIL key%>=ASC("A") AND key%<=ASC("Z") OR key%=13 OR key%=127 760 IF key%<>13 AND key%<>127 THEN user$=user$+CHR$(key%) 770 IF key%=127 AND LEN(user$)>0 THEN user$=LEFT$(user$,LEN(user$)-1) 780 match%=-1 790 FOR check%=1 TO choices% 800 IF FNto_upper(fill_in$(check%))=user$ THEN match%=check% 810 IF LEFT$(FNto_upper(fill_in$(check%)),LEN(user$))=user$ AND match%=-1 AND user$<>"" THEN match%=check% 820 NEXT 830 IF key%<>13 AND key%<>127 AND match%=-1 THEN user$=LEFT$(user$,LEN(user$)-1) 840 IF match%<>-1 THEN PRINTTAB(pos%,vpos%);fill_in$(match%);SPC(longest%-LEN(fill_in$(match%)));TAB(pos%+LEN(user$),vpos%); ELSE PRINTTAB(pos%,vpos%);SPC(longest%);TAB(pos%,vpos%); 850 UNTIL key%=13 AND (allow_null% OR match%<>-1) 860 IF match%=-1 THEN ="" ELSE =fill_in$(match%) 870 : 880 DEF FNto_upper(old$) 890 LOCAL new$,pos%,char% 900 IF old$="" THEN ="" 910 new$="" 920 FOR pos%=1 TO LEN(old$) 930 char%=ASC(MID$(old$,pos%,1)) 940 IF char%>=ASC("a") AND char%<=ASC("z") THEN char%=char%-32 950 new$=new$+CHR$(char%) 960 NEXT 970 =new$