10 REM "ADDRESS" by Douglas Ambrose, January 1995 20 REM Uses overlay procedure - see Acorn User Nov 1983 p.67. 30 REM Written for three DATA blocks (i.e. files - DAT1, DAT2, DAT3) 40 REM Enter ten items for each entry on DATA lines as follows: 50 REM number of members for entry (negative for guests) [num%],Name [name$], 60 REM five components of address including postcode (ad$), 70 REM telephone number [phone$],date sub paid [date$],amount of sub [sub$], 80 REM A(nnual) or L(ife) [AorL$]. Each DATA block ends with "100" 90 REM Put adjacent commas if item is blank or "0" for unpaid sub. 100 REM Original program published in Beebug Vol.9 (9) p.10 (1991). 110 MODE3 120 C%=TOP:LOMEM=TOP+&1000 130 ON ERROR GOTO 350 140 DIM name$(3),ad$(15) 150 C1$="Kingston upon Thames":C2$="Surbiton":C3$="Kingston" 160 PROCclear:PROCchoice 170 IF J%=1 PRINT"Press any key after each row of labels has been printed" 180 IF H%=-1 VDU15:VDU2 190 REPEAT 200 B%=B%+1:A%=0 210 IF B%=1 f$="DAT1" 220 IF B%=2 f$="DAT2" 230 IF B%=3 f$="DAT3" 240 PROCovly(f$) 250 RESTORE 260 IF J%=1 PROClabel 270 IF J%>1 PROClist 280 UNTIL B%=3 290 IF J%=5 PROCclear:END 300 IF J%=1 VDU3:PRINT"Number of addressees "K%'"Number of labels "M% 310 IF J%>2 AND H%=-1 PRINT"Press any key for summary":A=GET 320 IF J%>1 PROCtot 330 PROCclear:END 340 350 PROCclear:REPORT:PRINT" at line ";ERL:END 360 1000 DEF PROCchoice 1010 PRINT"PRINTER ON?":H%=(CHR$(GET AND &DF)="Y"):REM "y" also 1020 PRINT 1030 PRINT"LABELS (1) ?" 1040 PRINT"COUNT (2) ?" 1050 PRINT"LIST MEMBERS WITH ADDRESSES (3) ?" 1060 PRINT"LIST MEMBERS WITHOUT ADDRESSES (4) ?" 1070 PRINT"LIST MEMBERS NOT PAID ONLY (5) ?" 1080 PRINT 1090 PRINT" TYPE NUMBER OF CHOICE" 1100 J%=GET-48 1110 ENDPROC 1120 1130 DEF PROClist 1140 REPEAT PROCreadlist:IF J%=2 GOTO 1160 1150 PROCprintlist 1160 UNTIL A%=1 1170 REMIF J%=5 ENDPPROC 1180 REMIF B%=3 AND J%<>2 AND H%=-1 A=GET 1190 ENDPROC 1200 1210 DEF PROCtot 1220 PRINT 1230 PRINTTAB(54)"Subs" 1240 PRINTTAB(52)"collected" 1250 PRINTTAB(56)"#" 1260 PRINTTAB(15)"Annual members"TAB(35)STR$P%TAB(55)STR$T% 1270 PRINTTAB(15)"Life members"TAB(35)STR$L%TAB(45)STR$(P%+L%)TAB(55)STR$V% 1280 PRINTTAB(15)"Yet to pay"TAB(45)STR$(K%-P%-L%-F%) 1290 PRINTTAB(15)"Nominal Membership",TAB(45)STR$(K%-F%):PRINT 1300 PRINTTAB(15)"Guest members",TAB(45)STR$F% 1310 PRINTTAB(15)"Total of list"TAB(45)STR$(K%)TAB(55)STR$(T%+V%):PRINT 1320 PRINTTAB(15)"Number of names"TAB(45)STR$M% 1330 PRINT:ENDPROC 1340 1350 DEF PROCreadlist 1360 A%=0:READ num%:IF num%>=100 num%=0:A%=1:ENDPROC 1370 IF num%<0 num%=-num%:F%=F%+num% 1380 K%=K%+num%:M%=M%+1 1390 READ name$,ad$(1),ad$(2),ad$(3),ad$(4),ad$(5) 1400 READ phone$,date$,sub$,AorL$:S%=VAL(sub$) 1410 IF AorL$="L" AorL$="Life" 1420 IF AorL$="Life" AND sub$="0" sub$="" 1430 IF AorL$="Life":V%=V%+S%:L%=L%+num% 1440 IF AorL$="A" AorL$="Annual" 1450 IF AorL$="Annual" AND sub$="0" sub$="" 1460 IF AorL$="Annual" AND sub$="" AorL$="NOT PAID" 1470 IF AorL$="Annual" T%=T%+S%:IF S%>0 P%=P%+num% 1480 IF AorL$="F" AorL$="Free":sub$="" 1490 ENDPROC 1500 1510 DEF PROCprintlist 1520 IF A%=1 ENDPROC 1530 IF J%=5 AND AorL$<>"NOT PAID" ENDPROC 1540 IF ad$(2)="K" ad$(2)=C3$ ELSEIF ad$(3)="K" ad$(3)=C3$ ELSEIF ad$(4)="K" ad$(4)=C3$ 1550 IF ad$(2)="S" ad$(2)=C2$ ELSEIF ad$(3)="S" ad$(3)=C2$ ELSEIF ad$(4)="S" ad$(4)=C2$ 1560 @%=&15:PRINTTAB(8)name$; 1570 @%=&0A:PRINTTAB(40)phone$TAB(50)AorL$;:@%=&03:PRINTTAB(58)sub$; 1580 @%=&0A:PRINTTAB(62)date$;:E%=E%+1:IF J%=5 GOTO 1600 1590 @%=&03:PRINTTAB(72)K% 1600 IF J%=4 OR J%=5 GOTO 1670 1610 IF ad$(1)=""PRINTTAB(12)"Address not known":GOTO 1670 1620 IF ad$(2)=""PRINTTAB(12)ad$(1):GOTO 1670 1630 IF ad$(3)=""PRINTTAB(12)ad$(1)","ad$(2):GOTO 1670 1640 IF ad$(4)=""PRINTTAB(12)ad$(1)","ad$(2)","ad$(3):GOTO 1670 1650 IF ad$(5)=""PRINTTAB(12)ad$(1)","ad$(2)","ad$(3)","ad$(4):GOTO 1670 1660 PRINTTAB(12)ad$(1)","ad$(2)","ad$(3)","ad$(4)","ad$(5) 1670 E%=E%+1:IF E%>=55 AND H%=-1 PRINT"Press any key":A=GET:E%=0 1680 *FX15,1 1690 ENDPROC 1700 1710 DEF PROClabel 1720 VDU15:REPEAT 1730 FOR I%=1 TO 15:ad$(I%)="":NEXT:FOR I%=1 TO 3:name$(I%)="":NEXT 1740 A%=0:FOR I%=1 TO 12 STEP 5 1750 READ num%:IF num%>=100 num%=0:A%=1:IF I%=1 ENDPROC 1760 IF A%=1 GOTO 1820 1770 IF num%<0 num%=-num% 1780 K%=K%+num%:M%=M%+1:READ name$(I%/4+3/4) 1790 READ ad$(I%),ad$(I%+1),ad$(I%+2),ad$(I%+3),ad$(I%+4) 1800 READ phone$,date$,sub$,AorL$ 1810 NEXT 1820 FOR I%=2 TO 12 STEP 5 1830 IF ad$(I%)="K" ad$(I%)=C1$ 1840 IF ad$(I%)="S" ad$(I%)=C2$ 1850 IF ad$(I%+1)="K" ad$(I%+1)=C1$ 1860 IF ad$(I%+1)="S" ad$(I%+1)=C2$ 1870 IF ad$(I%+2)="K" ad$(I%+2)=C1$ 1880 IF ad$(I%+2)="S" ad$(I%+2)=C2$ 1890 NEXT 1900 PRINT 1910 PRINTTAB(2)name$(1) TAB(30)name$(2) TAB(58)name$(3) 1920 FOR I%=1 TO 5 1930 PRINTTAB(2)ad$(I%) TAB(30)ad$(I%+5) TAB(58)ad$(I%+10) 1940 NEXT 1950 PRINT:PRINT:A=GET 1960 UNTIL A%=1 1970 ENDPROC 1980 1990 DEF PROCovly(f$):LOCAL X%,Y% 2000 DIM X%-1:Y%=X%DIV&100 2010 $X%="LOAD "+f$+" "+STR$~(C%-2) 2020 CALL &FFF7 2030 ENDPROC 2040 2050 DEF PROCclear 2060 ?(C%-1)=&FF:REM Removes appended DATA. 2070 B%=0:E%=0:F%=0:H%=0:J%=0:K%=0:L%=0:M%=0:P%=0:S%=0:T%=0:V%=0 2080 VDU3:PRINT:PRINT "CLEAR":VDU14:ENDPROC 2090 REM B%=marker for data blocks, E%=line counter, H%=print marker 2100 REM J%=number in PROCchoice, K%=total of list, L%=number of life 2110 REM members, M%=no. of labels, num%=no. of each entry, negative 2120 REM for guest members, P%=number of paid annual members 2130 REM S%,T%(annual),V%(life)=subscriptions collected 2140 2150 DEF FNN="ADDRESS"