10 REM G.C.S.E COMPUTER PROJECT 20 REM By Andrew Black 30 REM (C) Andrew Soft 1990 40 REM 50 REM ADDRESS BOOK 60 : 70 REM"サhis program has been placed 80 REM"ナnto Public Domain. 90 : 100 ONERRORPROCerror(0) 110 : 120 MODE7 130 VDU23;8202;0;0;0; 140 : 150 PROCinit 160 PROCtitle 170 PROCmenu 180 END 190 : 200 DEF PROCmenu 210 CLS 220 PRINT'" 1. Create data file" 230 PRINT'" 2. Browse through datafile" 240 PRINT'" 3. Search using number" 250 PRINT'" 4. Recover deleted record" 260 PRINT'" 5. Delete record" 270 PRINT'" 6. Add record" 280 PRINT'" 7. Amend record" 290 PRINT'" 8. Print records" 300 PRINT'" 9. Exit" 310 PRINT'" Which one?":temp%=GET-48 320 : 330 IF temp%=1 THEN PROCcreate 340 IF temp%=2 THEN PROCbrowse(0) 350 IF temp%=3 THEN PROCnnumber 360 IF temp%=4 THEN PROCdelete_recover(0) 370 IF temp%=5 THEN PROCdelete_recover(9) 380 IF temp%=6 THEN PROCadd 390 IF temp%=7 THEN PROCamend 400 IF temp%=8 THEN PROCbrowse(1) 410 IF temp%=9 THEN PROCexit ELSE PROCmenu 420 ENDPROC 430 : 440 DEFPROCtitle 450 CLS 460 PRINT"用pppppppppppppppppppppppppppppppppppppp"; 470 VDU134,157,141 480 PRINT"Бddress Database by Andrew Black" 490 VDU134,157,141 500 PRINT"、ddress Database by Andrew Black" 510 PRINT"覗``````````````````````````````````````" 520 VDU28,0,24,39,4 530 ENDPROC 540 : 550 DEF PROCcreate 560 CLS 570 PRINT"イreate mode" 580 PRINT 590 INPUT" How many records:"rec% 600 IF rec%<1 THEN PROCcreate 610 rec%=rec%-1 620 : 630 channel=OPENOUT("DATFILE") 640 pointer=PTR# channel 650 start%=0 660 : 670 PROCcreate_add 680 ENDPROC 690 : 700 DEF PROCstrip(var%) 710 name$=FNcheck(name$) 720 address$=FNcheck(address$) 730 town$=FNcheck(town$) 740 county$=FNcheck(county$) 750 post_code$=FNcheck(post_code$) 760 telephone$=FNcheck(telephone$) 770 ENDPROC 780 : 790 DEF FNcheck(var$) 800 length%=LEN(var$) 810 IF length%>=20 AND var%=0 THEN =LEFT$(var$,20) 820 IF length%<20 AND var%=0 THEN =var$+STRING$(20-LEN(var$),"#") 830 IF var%=1 THEN =LEFT$(var$,(INSTR(var$,"#")-1)) 840 : 850 DEF PROCbrowse(type_of_print%) 860 CLS 870 PRINT"ィrowse Mode" 880 : 890 channel=OPENIN("DATFILE") 900 IF channel=0 THEN PROCerror(1) 910 records=EXT# channel DIV 142 920 records=records-1 930 : 940 FOR num=0 TO records STEP 1 950 PTR# channel=num*142 960 IF type_of_print%=0 THEN CLS 970 : 980 PROCdisc_input 990 : 1000 IF state%=0 THEN PROCprint_record 1010 NEXT num 1020 : 1030 PROCclose 1040 CLS:PRINT'" End of file." 1050 PROCspace 1060 ENDPROC 1070 : 1080 DEF PROCspace 1090 PRINTTAB(0,19)SPC8"ケress Space to continue" 1100 REPEATUNTILGET=32 1110 ENDPROC 1120 : 1130 DEF PROCprint_record 1140 : 1150 IF type_of_print%=1 THEN VDU2 1160 : 1170 PROCstrip(1) 1180 PRINT" Record number:";record%+1 1190 PRINT' 1200 PRINT" Name : ";name$ 1210 PRINT" Address : ";address$ 1220 PRINT" Town : ";town$ 1230 PRINT" County : ";county$ 1240 PRINT" Post Code: ";post_code$ 1250 PRINT" Telephone: ";telephone$ 1260 PRINT' 1270 IF type_of_print%=1 THEN VDU3 ELSE PROCspace 1280 ENDPROC 1290 : 1300 : 1310 DEF PROCnnumber 1320 CLS 1330 PRINT"ゴearch Mode" 1340 PROCdelete_search 1350 : 1360 IF bad%=1 THEN PROCerror(2):ENDPROC 1370 : 1380 PROCclose 1390 : 1400 IF state%=9 THEN PROCerror(4):ENDPROC 1410 CLS 1420 PROCprint_record 1430 PROCspace 1440 ENDPROC 1450 : 1460 DEF PROCdelete_recover(switch%) 1470 CLS 1480 : 1490 IF switch%=0 THEN PRINT"コecover Mode" ELSE PRINT"ゥelete Mode" 1500 PROCdelete_search 1510 : 1520 IF bad%=1 THEN PROCerror(2):ENDPROC 1530 : 1540 IF state%=9 AND switch%=9 THEN PROCerror(3):ENDPROC 1550 : 1560 IF state%=0 AND switch%=0 THEN PROCerror(5):ENDPROC 1570 : 1580 PRINT:PRINT" Are you sure?" 1590 temp$=GET$ 1600 : 1610 IF temp$="N" THEN PROCclose:PROCspace:ENDPROC 1620 : 1630 PTR# channel=rec%*142 1640 : 1650 state%=switch% 1660 PROCdisc_print 1670 : 1680 IF switch%=9 PRINT'"コecord deleted" ELSE PRINT'"コecord recovered" 1690 : 1700 PROCclose 1710 PROCspace 1720 ENDPROC 1730 : 1740 DEF PROCdelete_search 1750 bad%=0 1760 PRINT 1770 INPUT" Enter record number",rec% 1780 : 1790 IF rec%<1 THEN bad%=1:ENDPROC 1800 rec%=rec%-1 1810 channel=OPENUP("DATFILE") 1820 : 1830 IF channel=0 THEN PROCerror(1) 1840 : 1850 check%=EXT# channel DIV 142 1860 : 1870 IF rec%>check% THEN bad%=1:ENDPROC 1880 : 1890 PTR# channel=rec%*142 1900 : 1910 PROCdisc_input 1920 ENDPROC 1930 : 1940 DEF PROCexit 1950 CLS 1960 PRINT" Exit?" 1970 temp$=GET$ 1980 IF temp$="Y" OR temp$="y" THEN CALL!-4 ELSE PROCmenu 1990 ENDPROC 2000 : 2010 DEF PROCcreate_add 2020 FOR num=start% TO rec% STEP 1 2030 CLS 2040 PRINT" Record number:";num+1 2050 : 2060 PROCinput 2070 : 2080 record%=num 2090 state%=0 2100 CLS:PRINT'" Writing record" 2110 PTR# channel=pointer+(num*142) 2120 : 2130 PROCdisc_print 2140 : 2150 NEXT num 2160 CLS:PRINT'" Finished writing all records." 2170 PROCclose 2180 PROCspace 2190 ENDPROC 2200 : 2210 DEF PROCadd 2220 CLS 2230 PRINT"アdd Mode" 2240 PRINT 2250 INPUT" How many extra records:"rec% 2260 IF rec%<1 THEN PROCadd 2270 rec%=rec%-1 2280 channel=OPENUP("DATFILE") 2290 IF channel=0 THEN PROCerror(1) 2300 pointer=PTR# channel 2310 : 2320 start%=EXT# channel DIV 142 2330 rec%=start%+rec% 2340 : 2350 PROCcreate_add 2360 ENDPROC 2370 : 2380 DEF PROCinput 2390 PRINT' 2400 INPUTLINE" Enter name :"name$ 2410 INPUTLINE" Enter address :"address$ 2420 INPUTLINE" Enter town :"town$ 2430 INPUTLINE" Enter county :"county$ 2440 INPUTLINE" Enter post code:"post_code$ 2450 INPUTLINE" Enter telephone:"telephone$ 2460 PROCstrip(0) 2470 ENDPROC 2480 : 2490 DEF PROCdisc_print 2500 PRINT# channel,record%,state%,name$,address$,town$,county$,post_code$,telephone$ 2510 ENDPROC 2520 : 2530 DEF PROCdisc_input 2540 INPUT# channel,record%,state%,name$,address$,town$,county$,post_code$,telephone$ 2550 ENDPROC 2560 : 2570 DEF PROCamend 2580 type_of_print%=0 2590 CLS 2600 PRINT"アmend Mode" 2610 PROCdelete_search 2620 : 2630 IF bad%=1 THEN PROCerror(2):ENDPROC 2640 : 2650 IF state%=9 THEN PROCclose:PROCerror(4):ENDPROC 2660 : 2670 CLS 2680 PROCprint_record 2690 : 2700 CLS 2710 PRINT" Are you sure?" 2720 temp$=GET$ 2730 : 2740 IF temp$="N" OR temp$="n" THEN PROCspace:PROCclose:ENDPROC 2750 CLS 2760 PRINT" Record number:";record%+1 2770 : 2780 PROCinput 2790 : 2800 PTR# channel=rec%*142 2810 : 2820 PROCdisc_print 2830 : 2840 CLS 2850 PRINT" Writing record" 2860 PROCclose 2870 PROCspace 2880 ENDPROC 2890 : 2900 DEF PROCerror(err%) 2910 : 2920 IF ERR=223 THEN PROCclose:PRINT'rec3$:ENDPROC 2930 : 2940 IF err%=1 THEN PROCclose:CLS:PRINT'"DATFILEハot found":PROCspace:PROCmenu 2950 : 2960 IF err%=0 THEN PROCclose:CLS:REPORT:PROCspace:PROCmenu 2970 : 2980 IF err%=3 OR err%=5 OR err%=2 THEN PROCclose 2990 : 3000 IF err%=3 THEN PRINT'rec1$;"already ";rec2$ 3010 : 3020 IF err%=4 THEN PRINT'rec1$;rec2$ 3030 : 3040 IF err%=5 THEN PRINT'rec1$;"not ";rec2$ 3050 : 3060 IF err%=2 THEN PRINT'rec3$ 3070 : 3080 PROCspace 3090 ENDPROC 3100 : 3110 DEF PROCclose 3120 CLOSE#0 3130 ENDPROC 3140 : 3150 DEF PROCinit 3160 rec1$="コecord has " 3170 rec2$="been deleted" 3180 rec3$="コecord does not exist" 3190 ENDPROC