100 '**************************************************
110 '*
120 '* ADDRESS MANAGEMENT
130 '*
140 '**************************************************
150 '
160 CLEAR 2000
170 HD$=" ADDRESS DIRECTORY"
180 DIM NN$(99),VN$(99),TI&(99),ST$(99),NR$(99),PL$(99),OT$(99)
200 'READ ADDRESS LIST
210 GOSUB 2450
220 OPEN "MAILBOX",0
238 FOR N=8 TO 100
240 IN# "MAILBOX",A$
250 IF A$ = "" THEN 280
260 IN# "MAILBOX", NN$(N),VN$(N),TI$(N),ST$(N),NR$(N),PL$(N),OT$(N)
270 NEXT N
280 CLOSE "MAILBOX"
300 'PRINT MENU
310 GOSUB 2400
320 PRINT
330 PRINT TAB(4);"(1) NEW ENTRY"
340 PRINT TAB(4);"(2) UPDATE ENTRY"
350 PRINT TAB(4);"(3) DELETE ENTRY"
360 PRINT TAB(4);"(4) READ ENTRY"
370 PRINT TAB(4);"(5) SORTED LIST"
380 PRINT TAB(4);"(6) EXIT PROGRAM"
390 GOSUB 2500
400 A$=INKEY$: IF A$ < "1" OR A$ > "6" THEN 400
410 IF A$ = "1" THEN 500
420 IF A$ = "2" THEN 700
430 IF A$ = "3" THEN 1200
440 IF A$ = "4" THEN 1380
450 IF A$ = "5" THEN 1500
460 IF 50 = 1 GOSUB 2200
470 IF MO = 1 60TO 1800
480 CLS: END
500 'NEW ENTRY
510 GOSUB 2400
520 IF N = 99 PRINT "FILE MAILBOX ALREADY FULL": GOTO 2450
530 INPUT "LAST NAME ";NN$: IF NN$ = "" THEN 510
540 INPUT "FIRST NAME ";VN$
550 INPUT "TITLE ";TI$
560 INPUT "STREET ";ST$
570 INPUT "HOUSE NUMBER ";NR
580 INPUT "ZIPCODE ";PL$
590 INPUT "LOCATION ";OT$
600 GOSUB 2000
610 IF GF = 1 THEN 2550
620 NN$(N)=NN$: VN$(N)=VN$: TI$(N)=TI$: ST$(N)=ST$: NR(N)=NO
630 PL$(N)=PL$: OT$(N)=OT$
640 N = N +1
650 MO = 1: SO = 1
660 PRINT: PRINT "ENTRY COMPLETED"
670 GOTO 2600
700 'UPDATE ENTRY
710 GOSUB 2100: GOSUB 2000
720 IF GF = 0 THEN 2700
730 GOSUB 2400
740 PRINT "1. LAST NAME: ";NN$(I)
750 PRINT "2. FIRST NAME: ";VN$(I)
768 PRINT "3. TITLE: "TI$(I)
770 PRINT "4. STREET: ";ST$(I)
780 PRINT "5, HOUSE NUMBER: ";NR(I)
790 PRINT "6. ZIPCODE : ";PL$(I)
800 PRINT "7. LOCATION: ";OT$(I)
810 GOSUB 2500
820 A$=INKEY$: IF A$ < "0" OR A$ > "7" THEN 820
830 IF A$ = "0" THEN 300
840 IF A$ > "1" THEN 890
850 INPUT "LAST NAME ";NN$
860 IF NN$ = "" THEN 730
870 IF NN$<>NN$(I) THEN NN$(I) = NN$: SO = 1: MO = 1
880 GOTO 730
890 IF A$ > "2" THEN 930
900 INPUT "FIRST NAME ";VN$
910 IF VN$<>VN$(I) THEN VN$(I)=VN$: SO = 1: MO = 1
920 GOTO 730
930 IF A$ > "3" THEN 970
940 INPUT "TITLE ";TI$
950 IF TI$<> TI$(I) THEN TI$(I)=TI$: MO = 1
960 GOTO 730
970 IF A$ > "4" THEN 1010
980 INPUT "STREET ";ST$
990 IF ST$<>ST$(I) THEN ST$(I)=ST$: MO = 1
1000 GOTO 730
1010 IF A$ > "5" THEN 1050
1020 INPUT "HOUSE NUMBER ";NR
1030 IF NR<>NR(I) THEN NR(I)=NR: MO = 1
1040 GOTO 730
1050 IF A$ > "6" THEN 1090
1060 INPUT "ZIP CODE ";PL$
1070 IF PL$<>PL$(I) THEN PL$(I)=PL$: MO = 1
1080 GOTO 730
1090 INPUT "LOCATION ";OT$
1100 ІҒ OT$<>OT$(I) THEN OT$(I)=OT$: MO = 1
1110 GOTO 730
1200 'DELETE ENTRY
1210 GOSUB 2100: GOSUB 2000
1220 IF GF = 0 THEN 2700
1230 PL$(I) = "XXXX"
1240 PRINT: PRINT "ENTRY DELETED"
1250 MO = 1: GOTO 2600
1300 'READ ENTRY
1305 IF SO = 1 GOSUB 2200
1310 GOSUB 2100: GOSUB 2000
1320 IF GF = 0 THEN 2700
1330 GOSUB 2400
1340 PRINT TI$(1)
1350 PRINT VN$(I)" "NN$(I)
1360 IF ST$(I) = "" THEN 1390
1370 PRINT ST$(1);
1380 IF NR(I) = 0 PRINT " " ELSE PRINT NR(I)
1390 IF PL$(I) = "" THEN 1395 ELSE PRINT PL$(I)" ";
1395 PRINT OT$(I)
1400 I = I + 1: G0SUB 1610
1410 IF I < N THEN 1330 ELSE 300
1500 'OUTPUT LIST
1510 IF SO = 1 GOSUB 2200
1520 I=0
1530 GOSUB 2400
1540 IF N = 0 PRINT "NO ENTRIES EXIST": GOTO 2600
1550 FOR J = 1 TO 12
1560 IF I = N THEN 1600
1570 IF PL$(I) = "XXXX" THEN 1590
1580 PRINT NN$(I)", "VN$(I)
1590 I= I + 1: NEXT J
1600 GOSUB 1610: IF I < N THEN 1530 ELSE 300
1610 PRINT AT 480, "<RETURN> = CONTINUE, <E> = EDN";
1620 A$ = INKEY$
1630 A$ = INKEY$: IF A$ = "" THEN 1630
1640 IF A$ = "E" THEN I = N: RETURN
1650 IF A$ <> CHR$(13) THEN 1630
1660 RETURN
1800 'WRITE DATA TO DISK
1810 GOSUB 2450
1820 OPEN "TEMP",1
1830 IF N = 0 THEN 1890
1840 FOR I = 0 TO N-1
1850 IF PL${I) = "XXXX" THEN 1880
1860 PR# "TEMP", "A"
1870 PR# "TEMP",NN$(I),VN$(I),TI$(I),,ST$(I),NR(I),PL$(I),OT$(I)
1880 NEXT I
1890 CLOSE "TEMP"
1900 ERA "MAILBOX"
1910 REN "TEMP", "MAILBOX"
1920 CLS: END
2000 'SEARCH ENTRY IN LIST
2010 FOR I = 0 TO N-1
2020 IF PL$(I) = "XXXX" THEN 2060
2030 IF NN$ <> NN$(I) THEN 2060
2040 IF VN$ = "" THEN 2070
2050 IF VN$ = VN$(I) THEN 2070
2060 NEXT I: GF = 0: RETURN
2070 GF = 1: RETURN
2100 'READ SEARCH CRITERIA
2110 GOSUB 2400
2120 INPUT "LAST NAME ";NN$
2130 IF NN$ = "" THEN 2110
2140 INPUT "FIRST NAME ";VN$
2150 RETURN
2200 'SORT THE ENTRIES
2210 GOSUR 2450: SO = 0
2220 IF N < 2 RETURN
2230 M = N
2240 M = INT (M/2): IF M = 0 RETURN
2250 J = 1: K= N-M
2260 I = J
2270 L = I + M
2280 X = I - 1: Y = L - 1
2290 IF NN$(X) < NN$(Y) THEN 2390
2300 IF NN$(X) > NN$(Y) THEN 2320
2310 IF VN$(X) <= VN$(Y) THEN 2390
2320 NN$=NN$(X): VN$=VN$(X): TI$=TI${(X): ST$=ST$(X): NR=NR(X)
2330 PL$=PL$(X):OT$=OT$(X):NN$(X)=NN$(Y):VN$(X)=VN$(Y)
2340 TI$(X)=TI$(Y):ST$(X)=ST$(Y):NR(X)=NR(Y)
2350 PL$(X)=PL$(Y): OT${X)=0T$(Y): NN$(Y)=NN$
2360 VN$(Y)=VN$: TI$(Y)=TI$: ST$(Y)=ST$: NR(Y)=NR
2370 PL$(Y)=PL$: OT$(Y)=OT$
2380 I = I - M: IF I > 0 THEN 2270
2390 J = J +1: IFJ >K THEN 2240 ELSE 2260
2400 'HEADER OUT
2410 CLS: PRINT HD$: PRINT: RETURN
2420 'PLEASE WAIT
2460 CLS: PRINT @228,"***** PLEASE WAIT *****"
2470 RETURN
2500 'READ DIGIT
2510 PRINT: PRINT "PLEASE ENTER NUMBER (0=END)": PRINT
2520 A$ = INKEY$
2530 RETURN
2550 'MESSAGE "ADDRESS EXISTS"
2560 PRINT: PRINT "ADDRESS ALREADY EXISTS"
2600 'WAIT FOR RETURN
2610 PRINT: INPUT "CONTINUE WITH <RETURN>";X
2620 GOTO 300
2700 'MESSAGE "ADDRESS NOT AVAILABLE"
2710 PRINT: PRINT "ADDRESS NOT AVAILABLE"
2720 GOTO 2600
3000 OPEN "MAILBOX",1
3010 CLOSE "MAILBOX"
3020 END