90 WIDTH "scrn:", 80 95 SCREEN 0,1,0,0 100 TITLE$ = "Display Program" 105 TITLE$ = TITLE$ + " ON DISPLAY" 110 VERSION$ = "Version 2.0" 115 COPY1$ = "Copyright (c) 1983, 1984, by:" 120 COPY2$ = "Melvin O. Duke" 125 PRICE$ = "$35" 130 ADDR1$ = "Melvin O. Duke" 135 ADDR2$ = "P. O. Box 20836" 140 ADDR3$ = "San Jose, CA 95160" 145 REM Dimension Statements go here 150 DIM PA.ID(1000), CH.ID(1000), PERS.NO(400), M.NO(400) 160 DIM PERS(15), CH(55) 170 REM Produce the first screen 175 KEY OFF : CLS 180 REM Draw the outer double box 185 R1 = 1 : C1 = 1 : R2 = 24 : C2 = 79 : GOSUB 400 190 REM Find the title location 195 TITLE.POS = 40 - INT(LEN(TITLE$)/2) 200 REM Draw the title box 205 R1=3:C1=TITLE.POS-2:R2=6:C2=TITLE.POS+LEN(TITLE$)+1:GOSUB 600 210 REM Print the title 215 LOCATE 4,TITLE.POS : PRINT TITLE$ 220 LOCATE 5,40-INT(LEN(VERSION$)/2) : PRINT VERSION$; 225 REM Draw the Contribution box 230 R1 = 8 : C1 = 19 : R2 = 17 : C2 = 62 : GOSUB 400 235 REM Request the Contribution 240 LOCATE 9,23 : PRINT "If you are using these programs, and" 245 LOCATE 10,21 : PRINT "finding them of value, your contribution" 250 LOCATE 11,23 : PRINT "("+PRICE$+" suggested) will be anticipated." 255 REM Draw the Mailing Label 260 R1 = 12 : C1 = 28 : R2 = 16 : C2 = 52 : GOSUB 600 265 REM Print the Name and Address 270 LOCATE 13,40-INT(LEN(ADDR1$)/2) : PRINT ADDR1$; 275 LOCATE 14,40-INT(LEN(ADDR2$)/2) : PRINT ADDR2$; 280 LOCATE 15,40-INT(LEN(ADDR3$)/2) : PRINT ADDR3$; 285 REM Draw the Copyright box 290 R1 = 19 : C1 = 24 : R2 = 22 : C2 = 56 : GOSUB 400 295 REM Print the Copyright 300 LOCATE 20,40-INT(LEN(COPY1$)/2) : PRINT COPY1$; 305 LOCATE 21,40-INT(LEN(COPY2$)/2) : PRINT COPY2$; 310 GOTO 740 400 REM subroutine to print a double box 410 FOR I = R1 + 1 TO R2 - 1 420 LOCATE I, C1 : PRINT CHR$(186); 430 LOCATE I, C2 : PRINT CHR$(186); 440 NEXT I 450 FOR J = C1 + 1 TO C2 - 1 460 LOCATE R1, J : PRINT CHR$(205); 470 LOCATE R2, J : PRINT CHR$(205); 480 NEXT J 490 LOCATE R1, C1 : PRINT CHR$(201); 500 LOCATE R1, C2 : PRINT CHR$(187); 510 LOCATE R2, C1 : PRINT CHR$(200); 520 LOCATE R2, C2 : PRINT CHR$(188); 530 RETURN 600 REM subroutine to print a single box 610 FOR I = R1 + 1 TO R2 - 1 620 LOCATE I, C1 : PRINT CHR$(179); 630 LOCATE I, C2 : PRINT CHR$(179); 640 NEXT I 650 FOR J = C1 + 1 TO C2 - 1 660 LOCATE R1, J : PRINT CHR$(196); 670 LOCATE R2, J : PRINT CHR$(196); 680 NEXT J 690 LOCATE R1, C1 : PRINT CHR$(218); 700 LOCATE R1, C2 : PRINT CHR$(191); 710 LOCATE R2, C1 : PRINT CHR$(192); 720 LOCATE R2, C2 : PRINT CHR$(217); 730 RETURN 740 REM ask user to press a key to continue 750 LOCATE 25,1 760 PRINT "Have Data Diskette(s) in Place, then Press any key to continue."; 770 K$ = INKEY$ : IF K$ = "" THEN 770 780 CLS 840 CLS 850 GOTO 2450 1000 REM Display (showgene) Program. 1010 REM By: Melvin O. Duke. Last Updated: 18 February 1984. 1020 REM Draw the form on the display 1030 R1= 1 : C1= 1 : R2=21 : C2=79: GOSUB 400 'Double box 1040 R1= 3 : C1= 1 : R2= 3 : C2=79: GOSUB 2170 'Horizontal Double 1050 LOCATE 2,3 : PRINT "Pedigree Chart for:" 1060 LOCATE 4,68 : COLOR 1 : PRINT "Birthdate:" : COLOR 7 1070 LOCATE 12, 3 : I = 1 : GOSUB 1470 1080 LOCATE 8,11 : PRINT CHR$(218)+CHR$(196); 1090 LOCATE 9,11 : PRINT CHR$(179); 1100 LOCATE 10,11 : PRINT CHR$(179); 1110 LOCATE 11,11 : PRINT CHR$(179); 1120 LOCATE 8,13 : I = 2 : GOSUB 1510 1130 LOCATE 16,11 : PRINT CHR$(192)+CHR$(196); 1140 LOCATE 13,11 : PRINT CHR$(179); 1150 LOCATE 14,11 : PRINT CHR$(179); 1160 LOCATE 15,11 : PRINT CHR$(179); 1170 LOCATE 16,13 : I = 3 : GOSUB 1510 1180 LOCATE 6,21 : PRINT CHR$(218)+CHR$(196); 1190 LOCATE 7,21 : PRINT CHR$(179); 1200 LOCATE 6,23 : I = 4 : GOSUB 1540 1210 LOCATE 10,21 : PRINT CHR$(192)+CHR$(196); 1220 LOCATE 9,21 : PRINT CHR$(179); 1230 LOCATE 10,23 : I = 5 : GOSUB 1540 1240 LOCATE 14,21 : PRINT CHR$(218)+CHR$(196); 1250 LOCATE 15,21 : PRINT CHR$(179); 1260 LOCATE 14,23 : I = 6 : GOSUB 1540 1270 LOCATE 18,21 : PRINT CHR$(192)+CHR$(196); 1280 LOCATE 17,21 : PRINT CHR$(179); 1290 LOCATE 18,23 : I = 7 : GOSUB 1540 1300 LOCATE 5,31 : PRINT CHR$(218)+CHR$(196); 1310 LOCATE 5,33 : I = 8 : GOSUB 1570 1320 LOCATE 7,31 : PRINT CHR$(192)+CHR$(196); 1330 LOCATE 7,33 : I = 9 : GOSUB 1570 1340 LOCATE 9,31 : PRINT CHR$(218)+CHR$(196); 1350 LOCATE 9,33 : I = 10 : GOSUB 1570 1360 LOCATE 11,31 : PRINT CHR$(192)+CHR$(196); 1370 LOCATE 11,33 : I = 11 : GOSUB 1570 1380 LOCATE 13,31 : PRINT CHR$(218)+CHR$(196); 1390 LOCATE 13,33 : I = 12 : GOSUB 1570 1400 LOCATE 15,31 : PRINT CHR$(192)+CHR$(196); 1410 LOCATE 15,33 : I = 13 : GOSUB 1570 1420 LOCATE 17,31 : PRINT CHR$(218)+CHR$(196); 1430 LOCATE 17,33 : I = 14 : GOSUB 1570 1440 LOCATE 19,31 : PRINT CHR$(192)+CHR$(196); 1450 LOCATE 19,33 : I = 15 : GOSUB 1570 1460 RETURN 1470 REM Routine to print the lines 1480 COLOR 0,7 : PRINT RIGHT$(STR$(I),2); 1490 COLOR 1,0 : PRINT STRING$(62,95); : COLOR 7 1500 RETURN 1510 COLOR 0,7 : PRINT RIGHT$(STR$(I),2); 1520 COLOR 1,0 : PRINT STRING$(52,95); : COLOR 7 1530 RETURN 1540 COLOR 0,7 : PRINT RIGHT$(STR$(I),2); 1550 COLOR 1,0 : PRINT STRING$(42,95); : COLOR 7 1560 RETURN 1570 COLOR 0,7 : PRINT RIGHT$(STR$(I),2); 1580 COLOR 1,0 : PRINT STRING$(32,95); : COLOR 7 1590 RETURN 1600 REM Draw the Personal Information Chart 1610 CLS 1620 R1 = 1 : C1 = 1 : R2 = 21 : C2 = 79 : GOSUB 400 'Double box 1630 R1 = 3 : C1 = 1 : R2 = 3 : C2 = 79 : GOSUB 2170 'Horizontal double 1640 LOCATE 2,3 : PRINT "Personal Information for:" 1650 R1 = 3 : C1 = 40 : R2 = 21 : C2 = 40 : GOSUB 2310 'Vertical Double 1660 LOCATE 4,3 : PRINT "Person:"; 1665 LOCATE 5,3 : PRINT "Record-no.:"; 1670 LOCATE 6,3 : PRINT "Surname:"; 1680 LOCATE 7,3 : PRINT "Given-names:"; 1690 LOCATE 8,3 : PRINT "Sex:"; 1700 R1 = 9 : C1 = 1 : R2 =11 : C2 = 40 : GOSUB 2170 'Horizontal Double 1710 LOCATE 10,3 : PRINT "Person's Father:"; 1715 LOCATE 11,3 : PRINT "Record-no.:"; 1720 LOCATE 12,3 : PRINT "Surname:"; 1730 LOCATE 13,3 : PRINT "Given-names:"; 1740 LOCATE 14,3 : PRINT "Birth-date:"; 1750 R1 = 15 : C1 = 1 : R2 = 15 : C2 = 40 : GOSUB 2240 'Horizontal Single 1760 LOCATE 16,3 : PRINT "Person's Mother:"; 1765 LOCATE 17,3 : PRINT "Record-no.:"; 1770 LOCATE 18,3 : PRINT "Surname:"; 1780 LOCATE 19,3 : PRINT "Given-names:"; 1790 LOCATE 20,3 : PRINT "Birth-date:"; 1800 LOCATE 4,42 : PRINT "Person's Vital Statistics:"; 1810 LOCATE 6,42 : PRINT "Birth-date:"; 1820 LOCATE 7,42 : PRINT "Birth-city:"; 1830 LOCATE 8,42 : PRINT "Birth-county:"; 1840 LOCATE 9,42 : PRINT "Birth-state:"; 1850 LOCATE 11,42 : PRINT "Death-date:"; 1860 LOCATE 12,42 : PRINT "Death-city:"; 1870 LOCATE 13,42 : PRINT "Death-county:"; 1880 LOCATE 14,42 : PRINT "Death-state:"; 1890 LOCATE 16,42 : PRINT "Burial-date:"; 1900 LOCATE 17,42 : PRINT "Burial-city:"; 1910 LOCATE 18,42 : PRINT "Burial-county:"; 1920 LOCATE 19,42 : PRINT "Burial-state:"; 1930 RETURN 1940 REM draw a Family Group Sheet 1950 CLS 1960 R1 = 1 : C1 = 1 : R2 = 21 : C2 = 79 : GOSUB 400 'Double box 1970 R1 = 3 : C1 = 1 : R2 = 3 : C2 = 79 : GOSUB 2170 'Double Horizontal 1980 LOCATE 2,3 : PRINT "Family Group Record"; 1985 LOCATE 2,64 : PRINT "Marriage:"; 1990 LOCATE 4,3 : COLOR 1 : PRINT "Father"; : COLOR 7 : PRINT ":"; 2000 LOCATE 4,56 : PRINT "Birthdate:"; 2010 LOCATE 5,3 : COLOR 1 : PRINT "Mother"; : COLOR 7 : PRINT ":"; 2020 LOCATE 5,56 : PRINT "Birthdate:"; 2030 R1 = 6 : C1 = 1 : R2 = 6 : C2 = 79 : GOSUB 2240 'Single Horizontal 2040 LOCATE 7,3 : PRINT "Marriage Date:"; 2050 LOCATE 7,35 : PRINT "Location:"; 2060 R1 = 8 : C1 = 1 : R2 = 8 : C2 = 79 : GOSUB 2170 'Double Horizontal 2070 R1 = 8 : C1 = 4 : R2 = 21 : C2 = 4 : GOSUB 2380 'Single Vertical 2080 R1 = 8 : C1 = 6 : R2 = 21 : C2 = 6 : GOSUB 2380 'Single Vertical 2090 R1 = 8 : C1 = 40 : R2 = 21 : C2 = 40 : GOSUB 2380 'Single Vertical 2100 LOCATE 9,2 : COLOR 1 : PRINT "NO"; : COLOR 7 2110 LOCATE 9,5 : COLOR 1 : PRINT "S"; : COLOR 7 2120 LOCATE 9,7 : COLOR 1 : PRINT "Children:"; : COLOR 7 2130 LOCATE 9,41 : COLOR 1 : PRINT "Birthdate:"; : COLOR 7 2140 R1 = 8 : C1 = 52 : R2 = 21 : C2 = 52 : GOSUB 2380 'Single Vertical 2150 LOCATE 9,53 : COLOR 1 : PRINT "Birth Location:"; : COLOR 7 2160 RETURN 2170 REM Subroutine to draw a double horizontal line. Attach to double. 2180 FOR J = C1 + 1 TO C2 - 1 2190 LOCATE R1,J : PRINT CHR$(205); 2200 NEXT J 2210 LOCATE R1,C1 : PRINT CHR$(204); 2220 LOCATE R1,C2 : PRINT CHR$(185); 2230 RETURN 2240 REM Subroutine to draw a single horizontal line. Attach to double. 2250 FOR J = C1 + 1 TO C2 - 1 2260 LOCATE R1,J : PRINT CHR$(196); 2270 NEXT J 2280 LOCATE R1,C1 : PRINT CHR$(199); 2290 LOCATE R1,C2 : PRINT CHR$(182); 2300 RETURN 2310 REM Subroutine to draw a double vertical line. Attach to double. 2320 FOR I = R1 + 1 TO R2 - 1 2330 LOCATE I,C1 : PRINT CHR$(186); 2340 NEXT I 2350 LOCATE R1,C1 : PRINT CHR$(203); 2360 LOCATE R2,C1 : PRINT CHR$(202); 2370 RETURN 2380 REM Subroutine to draw a single vertical line. Attach to double. 2390 FOR I = R1 + 1 TO R2 - 1 2400 LOCATE I,C1 : PRINT CHR$(179); 2410 NEXT I 2420 LOCATE R1,C1 : PRINT CHR$(209); 2430 LOCATE R2,C1 : PRINT CHR$(207); 2440 RETURN 2450 REM Program begins here 2460 REM By: Melvin O. Duke. 2470 REM Read the Parent/Child Index 2480 OPEN "a:pcindex" FOR INPUT AS #1 2490 LOCATE 4,1 : PRINT "Open the Parent/Child Index"; 2500 INPUT #1, PC.COUNT 2510 FOR I = 1 TO PC.COUNT 2520 LOCATE 5,1 : PRINT "Reading Index Record #:";I; 2530 INPUT #1, PA.ID(I), CH.ID(I) 2540 NEXT I 2550 CLOSE #1 2560 REM Read the Marriage Index 2570 LOCATE 7,1 : PRINT "Open the Marriage Index"; 2580 OPEN "a:mindex" FOR INPUT AS #2 2590 INPUT #2, M.COUNT 2600 FOR I = 1 TO M.COUNT 2610 LOCATE 8,1 : PRINT "Reading Marriage Index Record #:";I: 2620 INPUT #2,PERS.NO(I), M.NO(I) 2630 NEXT I 2640 CLOSE #2 2650 REM Open the Persons File 2660 LOCATE 10,1 : PRINT "Open the Persons File" 2670 OPEN "a:persfile" AS #1 LEN = 256 2680 FIELD 1, 5 AS F1$, 20 AS F2$, 30 AS F3$, 2 AS F4$, 5 AS F5$, 5 AS F6$, 5 AS F7$, 11 AS F8$, 18 AS F9$, 16 AS F10$, 16 AS F11$, 11 AS F12$, 18 AS F13$, 16 AS F14$, 16 AS F15$, 11 AS F16$, 18 AS F17$, 16 AS F18$, 16 AS F19$ 2690 REM open the Marriages File 2700 LOCATE 12,1 : PRINT "Open the Marriage File" 2710 OPEN "a:marrfile" AS #2 LEN = 128 2720 FIELD 2, 5 AS M1$, 5 AS M2$, 5 AS M3$, 5 AS M4$, 11 AS M5$, 18 AS M6$, 16 AS M7$, 16 AS M8$, 45 AS M9$ 2730 REM Open the Ordinance File 2740 LOCATE 14,1 : PRINT "Open the Ordinances File"; 2750 OPEN "a:ordfile" AS #3 LEN = 256 2760 FIELD 3,5ASO1$,11ASO2$,11ASO3$,11ASO4$,5ASO5$,5ASO6$,11ASO7$,11ASO8$,11ASO9$,11ASO10$,11ASO11$,5ASO12$,11ASO13$,11ASO14$,11ASO15$,11ASO16$,11ASO17$,11ASO18$,11ASO19$,11ASO20$,11ASO21$,11ASO22$,11ASO23$,26ASO24$ 2770 REM Obtain a Person Record from the User 2780 LOCATE 20,1 : PRINT SPACE$(79); 2790 LOCATE 20,1 : INPUT "Enter the Record-number of a Person (0 to quit)";PERS(1) 2800 IF PERS(1) < 0 OR PERS(1) > 500 THEN CLS: GOTO 2770 2805 IF PERS(1) = 0 THEN 7390 2810 REM Obtain the information about a person 2820 GET #1, PERS(1) 2830 GOSUB 3300 'Extract Personal Information 2840 GOSUB 1600 2850 LOCATE 2,30 : PRINT T3$ + " " + T2$; 2854 LOCATE 2,66 : PRINT "Person:";T1 2855 LOCATE 5,16 : PRINT T1 2860 LOCATE 6,16 : PRINT T2$; 2870 LOCATE 7,16 : PRINT T3$; 2880 LOCATE 8,16 : PRINT T4$; 2890 LOCATE 6,57 : PRINT T8$; 2900 LOCATE 7,57 : PRINT T9$; 2910 LOCATE 8,57 : PRINT T10$; 2920 LOCATE 9,57 : PRINT T11$; 2930 LOCATE 11,57 : PRINT T12$; 2940 LOCATE 12,57 : PRINT T13$; 2950 LOCATE 13,57 : PRINT T14$; 2960 LOCATE 14,57 : PRINT T15$; 2970 LOCATE 16,57 : PRINT T16$; 2980 LOCATE 17,57 : PRINT T17$; 2990 LOCATE 18,57 : PRINT T18$; 3000 LOCATE 19,57 : PRINT T19$; 3010 PERS(2) = T6 3020 PERS(3) = T7 3030 REM Check if Father is known 3040 IF PERS(2) = 0 THEN GOSUB 3590 : GOTO 3065 3050 GET #1, PERS(2) 3060 GOSUB 3300 'Extract 3065 LOCATE 11,16 : PRINT T1; 3070 LOCATE 12,16 : PRINT T2$; 3080 LOCATE 13,16 : PRINT T3$; 3090 LOCATE 14,16 : PRINT T8$; 3100 REM Check if Mother is known 3110 IF PERS(3) = 0 THEN GOSUB 3590 : GOTO 3135 3120 GET #1, PERS(3) 3130 GOSUB 3300 'Extract 3135 LOCATE 17,16 : PRINT T1; 3140 LOCATE 18,16 : PRINT T2$; 3150 LOCATE 19,16 : PRINT T3$; 3160 LOCATE 20,16 : PRINT T8$; 3170 LOCATE 23,1 : PRINT SPACE$(79); 3180 LOCATE 24,1 : PRINT SPACE$(79); 3190 LOCATE 24,1 : PRINT "(Possible Actions: ps, pc, fg, "; 3191 PRINT "o, "; 3192 PRINT "p1...pn, m1...mn, q)"; 3200 LOCATE 23,1 : INPUT "Next Action"; REPLY$ 3210 IF REPLY$ = "ps" THEN GOSUB 6080 : GOTO 3170 3220 IF REPLY$ = "sp" THEN GOSUB 6080 : GOTO 3170 3230 IF REPLY$ = "pc" THEN 3800 'Pedigree Chart 3240 IF REPLY$ = "fg" THEN 5070 'Family Group 3250 IF REPLY$ = "o" THEN 6220 'Ordinances 3260 IF LEFT$(REPLY$,1) = "p" THEN PERS(1) = VAL(RIGHT$(REPLY$,LEN(REPLY$)-1)) : CLS : GOTO 2800 3270 IF LEFT$(REPLY$,1) = "m" THEN 7260 3280 IF LEFT$(REPLY$,1) = "q" THEN 7390 3290 LOCATE 22,1 : PRINT "Error in Previous Reply ";REPLY$; : GOTO 3170 3300 REM Routine to Extract Personal Information 3310 T1 = CVS(F1$) 3320 T2$ = F2$ 3330 FOR J = 1 TO LEN(F2$) -1 3340 IF RIGHT$(T2$,1)=" " THEN T2$ = LEFT$(T2$,LEN(T2$)-1) ELSE J = LEN(F2$)-1 3350 NEXT J 3360 T3$ = F3$ 3370 FOR J = 1 TO LEN(F3$) -1 3380 IF RIGHT$(T3$,1)=" " THEN T3$ = LEFT$(T3$,LEN(T3$)-1) ELSE J = LEN(F3$)-1 3390 NEXT J 3400 T4$ = F4$ 3410 IF LEFT$(T4$,1) = "M" THEN T4$ = "Male" 3420 IF LEFT$(T4$,1) = "F" THEN T4$ = "Female" 3430 T5 = CVS(F5$) 3440 T6 = CVS(F6$) 3450 T7 = CVS(F7$) 3460 T8$ = F8$ 3470 T9$ = F9$ 3480 T10$ = F10$ 3490 T11$ = F11$ 3500 T12$ = F12$ 3510 T13$ = F13$ 3520 T14$ = F14$ 3530 T15$ = F15$ 3540 T16$ = F16$ 3550 T17$ = F17$ 3560 T18$ = F18$ 3570 T19$ = F19$ 3580 RETURN 3590 REM Blank out a Record 3600 T1 = 0 3610 T2$ = "" 3620 T3$ = "" 3630 T4$ = "" 3640 T5 = 0 3650 T6 = 0 3660 T7 = 0 3670 T8$ = "" 3680 T9$ = "" 3690 T10$ = "" 3700 T11$ = "" 3710 T12$ = "" 3720 T13$ = "" 3730 T14$ = "" 3740 T15$ = "" 3750 T16$ = "" 3760 T17$ = "" 3770 T18$ = "" 3780 T19$ = "" 3790 RETURN 3800 REM Routine to Produce a Pedigree Chart 3810 CLS 3820 GOSUB 1000 'Draw the Chart 3830 GET #1, PERS(1) 3840 GOSUB 3300 'Extract the Person 3850 LOCATE 2,23 : PRINT T3$ + " " + T2$; 3855 LOCATE 2,66 : PRINT "Person:"; PERS(1); 3859 THIS.PERS = PERS(1) : GOSUB 7460 3860 LOCATE 12,6 : COLOR 1 : PRINT VALUE$; : COLOR 7 3870 LOCATE 12,68 : PRINT T8$; 3880 PERS(2) = T6 3890 PERS(3) = T7 3900 REM Get 11 3910 IF PERS(2) = 0 THEN GOSUB 3590 : GOTO 3960 3920 GET #1, PERS(2) 3930 GOSUB 3300 'Extract 3939 THIS.PERS = PERS(2) : GOSUB 7460 3940 LOCATE 8,16 : COLOR 1 : PRINT VALUE$; : COLOR 7 3950 LOCATE 8,68 : PRINT T8$; 3960 PERS(4) = T6 3970 PERS(5) = T7 3980 REM Get 10 3990 IF PERS(3) = 0 THEN GOSUB 3590 : GOTO 4040 4000 GET #1, PERS(3) 4010 GOSUB 3300 'Extract 4019 THIS.PERS = PERS(3): GOSUB 7460 4020 LOCATE 16,16 : COLOR 1 : PRINT VALUE$; : COLOR 7 4030 LOCATE 16,68 : PRINT T8$; 4040 PERS(6) = T6 4050 PERS(7) = T7 4060 REM Get 111 4070 IF PERS(4) = 0 THEN GOSUB 3590 : GOTO 4120 4080 GET #1, PERS(4) 4090 GOSUB 3300 'Extract 4099 THIS.PERS = PERS(4): GOSUB 7460 4100 LOCATE 6,26 : COLOR 1 : PRINT VALUE$; : COLOR 7 4110 LOCATE 6,68 : PRINT T8$; 4120 PERS(8) = T6 4130 PERS(9) = T7 4140 REM Get 110 4150 IF PERS(5) = 0 THEN GOSUB 3590 : GOTO 4200 4160 GET #1, PERS(5) 4170 GOSUB 3300 'Extract 4179 THIS.PERS = PERS(5): GOSUB 7460 4180 LOCATE 10,26 : COLOR 1 : PRINT VALUE$; : COLOR 7 4190 LOCATE 10,68 : PRINT T8$; 4200 PERS(10) = T6 4210 PERS(11) = T7 4220 REM Get 101 4230 IF PERS(6) = 0 THEN GOSUB 3590 : GOTO 4280 4240 GET #1, PERS(6) 4250 GOSUB 3300 'Extract 4259 THIS.PERS = PERS(6): GOSUB 7460 4260 LOCATE 14,26 : COLOR 1 : PRINT VALUE$; : COLOR 7 4270 LOCATE 14,68 : PRINT T8$; 4280 PERS(12) = T6 4290 PERS(13) = T7 4300 REM Get 100 4310 IF PERS(7) = 0 THEN GOSUB 3590 : GOTO 4360 4320 GET #1, PERS(7) 4330 GOSUB 3300 'Extract 4339 THIS.PERS = PERS(7): GOSUB 7460 4340 LOCATE 18,26 : COLOR 1 : PRINT VALUE$; : COLOR 7 4350 LOCATE 18,68 : PRINT T8$; 4360 PERS(14) = T6 4370 PERS(15) = T7 4380 REM Get 1111 4390 IF PERS(8) = 0 THEN GOSUB 3590 : GOTO 4440 4400 GET #1, PERS(8) 4410 GOSUB 3300 'Extract 4419 THIS.PERS = PERS(8): GOSUB 7460 4420 LOCATE 5,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4430 LOCATE 5,68 : PRINT T8$; 4440 REM 4450 REM Get 1110 4460 IF PERS(9) = 0 THEN GOSUB 3590 : GOTO 4510 4470 GET #1, PERS(9) 4480 GOSUB 3300 'Extract 4489 THIS.PERS = PERS(9): GOSUB 7460 4490 LOCATE 7,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4500 LOCATE 7,68 : PRINT T8$; 4510 REM 4520 REM Get 1101 4530 IF PERS(10) = 0 THEN GOSUB 3590 : GOTO 4580 4540 GET #1, PERS(10) 4550 GOSUB 3300 'Extract 4559 THIS.PERS = PERS(10): GOSUB 7460 4560 LOCATE 9,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4570 LOCATE 9,68 : PRINT T8$; 4580 REM 4590 REM Get 1100 4600 IF PERS(11) = 0 THEN GOSUB 3590 : GOTO 4650 4610 GET #1, PERS(11) 4620 GOSUB 3300 'Extract 4629 THIS.PERS = PERS(11): GOSUB 7460 4630 LOCATE 11,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4640 LOCATE 11,68 : PRINT T8$; 4650 REM 4660 REM Get 1011 4670 IF PERS(12) = 0 THEN GOSUB 3590 : GOTO 4720 4680 GET #1, PERS(12) 4690 GOSUB 3300 'Extract 4699 THIS.PERS = PERS(12): GOSUB 7460 4700 LOCATE 13,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4710 LOCATE 13,68 : PRINT T8$; 4720 REM 4730 REM Get 1010 4740 IF PERS(13) = 0 THEN GOSUB 3590 : GOTO 4790 4750 GET #1, PERS(13) 4760 GOSUB 3300 'Extract 4769 THIS.PERS = PERS(13): GOSUB 7460 4770 LOCATE 15,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4780 LOCATE 15,68 : PRINT T8$; 4790 REM 4800 REM Get 1001 4810 IF PERS(14) = 0 THEN GOSUB 3590 : GOTO 4860 4820 GET #1, PERS(14) 4830 GOSUB 3300 'Extract 4839 THIS.PERS = PERS(14): GOSUB 7460 4840 LOCATE 17,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4850 LOCATE 17,68 : PRINT T8$; 4860 REM 4870 REM Get 1000 4880 IF PERS(15) = 0 THEN GOSUB 3590 : GOTO 4930 4890 GET #1, PERS(15) 4900 GOSUB 3300 'Extract 4909 THIS.PERS = PERS(15): GOSUB 7460 4910 LOCATE 19,36 : COLOR 1 : PRINT VALUE$; : COLOR 7 4920 LOCATE 19,68 : PRINT T8$; 4930 REM 4940 LOCATE 23,1 : PRINT SPACE$(79); 4950 LOCATE 24,1 : PRINT SPACE$(79); 4960 LOCATE 24,1 : PRINT "(Possible Actions: ps, pc, fg, l1...ln, p1...pn, m1...mn, q)"; 4970 LOCATE 23,1 : INPUT "Next Action"; REPLY$ 4980 IF REPLY$ = "ps" THEN GOSUB 6080 : GOTO 4940 4990 IF REPLY$ = "sp" THEN GOSUB 6080 : GOTO 4940 5000 IF REPLY$ = "pc" THEN 3800 5010 IF REPLY$ = "fg" THEN 5070 5020 IF LEFT$(REPLY$,1) = "l" THEN PERS(1) = PERS(VAL(RIGHT$(REPLY$,LEN(REPLY$)-1))) : GOTO 2810 5030 IF LEFT$(REPLY$,1) = "p" THEN PERS(1) = VAL(RIGHT$(REPLY$,LEN(REPLY$)-1)) : GOTO 2800 5040 IF LEFT$(REPLY$,1) = "m" THEN 7260 5050 IF LEFT$(REPLY$,1) = "q" THEN 7390 5060 LOCATE 22,1 : PRINT "Error in Previous Reply ";REPLY$; : GOTO 4940 5070 REM Routine to Produce a Family Group Record 5080 CLS 5090 GOSUB 1940 'Draw the form 5100 REM search the marriage index for the Person's Marriage 5110 FOUND = 0 5120 FOR L = 1 TO M.COUNT 5130 IF PERS(1) > PERS.NO(L) THEN 5190 5140 IF PERS(1) < PERS.NO(L) THEN L = M.COUNT : GOTO 5190 5150 REM found a Marriage 5160 FOUND = 1 5170 GET #2, M.NO(L) 5180 L = M.COUNT 5190 NEXT L 5200 IF FOUND = 1 THEN 5260 5210 REM No marriage found 5220 LOCATE 22,1 : PRINT "No Marriage Found"; 5230 LOCATE 23,1 : PRINT "Press any key to continue"; 5240 A$ = INKEY$ : IF A$ = "" THEN 5240 5250 CLS : GOTO 2810 5260 REM extract Information from the Marriage Record 5270 TT1 = CVS(M1$) 5275 IF TT1 < 1 THEN 5210 5280 TT2 = CVS(M2$) 5290 TT3 = CVS(M3$) 5300 TT4 = CVS(M4$) 5310 TT5$ = M5$ 5320 TT6$ = M6$ 5330 TT7$ = M7$ 5340 TT8$ = M8$ 5350 TT9$ = M9$ 5360 REM print the Marriage Information 5365 LOCATE 2,73 : PRINT TT1 5370 LOCATE 7,18 : PRINT TT5$ 5380 LOCATE 7,45 : PRINT TT6$ 5390 REM get the Husband's Record 5400 GET #1, TT2 5410 GOSUB 3300 'Extract 5419 THIS.PERS = TT2 : GOSUB 7460 5420 LOCATE 4,11 : PRINT VALUE$; 5430 LOCATE 4,67 : PRINT T8$; 5440 REM get the Wife's Record 5450 GET #1, TT3 5460 GOSUB 3300 'Extract 5469 THIS.PERS = TT3 : GOSUB 7460 5470 LOCATE 5,11 : PRINT VALUE$; 5480 LOCATE 5,67 : PRINT T8$; 5490 REM now find the children 5500 CHILD.COUNT = 0 5510 FOR IC = 1 TO 55 5520 CH(IC) = 0 5530 NEXT IC 5540 REM search the parent/child index 5550 FOR LL = 1 TO PC.COUNT 5560 IF TT2 > PA.ID(LL) THEN 5890 5570 IF TT2 < PA.ID(LL) THEN LL = PC.COUNT : GOTO 5890 5580 REM found a child 5590 GET #1, CH.ID(LL) 5600 GOSUB 3300 'Extract 5610 REM verify that Mother is the same 5620 IF TT3 <> T7 THEN 5890 5630 REM Found a valid child 5640 CHILD.COUNT = CHILD.COUNT + 1 5650 SHOW.COUNT = CHILD.COUNT 5660 IF CHILD.COUNT = 1 THEN 5820 5670 IF CHILD.COUNT > 11 THEN SHOW.COUNT = CHILD.COUNT - 11 5680 IF CHILD.COUNT > 22 THEN SHOW.COUNT = CHILD.COUNT - 22 5690 IF CHILD.COUNT > 33 THEN SHOW.COUNT = CHILD.COUNT - 33 5700 IF CHILD.COUNT > 44 THEN SHOW.COUNT = CHILD.COUNT - 44 5710 IF (CHILD.COUNT-1) MOD 11 = 0 THEN 5720 ELSE 5820 5720 LOCATE 23,1 : PRINT SPACE$(79); 5730 LOCATE 23,1 : PRINT "Press any key to continue" 5740 A$ = INKEY$ : IF A$ = "" THEN 5740 5750 REM blank the previous children 5760 FOR ROW = 9 TO 20 5770 LOCATE ROW,2 : PRINT SPACE$(77); 5780 NEXT ROW 5790 REM restore the rest of the display 5800 GOSUB 2070 5810 LOCATE 23,1 : PRINT SPACE$(79) 5820 CH(CHILD.COUNT) = CH.ID(LL) 5830 LOCATE 9+SHOW.COUNT,2 : COLOR 0,7 5840 PRINT RIGHT$(STR$(CHILD.COUNT),2); : COLOR 7,0 5850 LOCATE 9+SHOW.COUNT,5 : PRINT LEFT$(F4$,1); 'Sex 5860 LOCATE 9+SHOW.COUNT,7 : PRINT T2$+", "+T3$; 5870 LOCATE 9+SHOW.COUNT,41 : PRINT T8$; 5880 LOCATE 9+SHOW.COUNT,53 : PRINT T9$; 5890 NEXT LL 5900 LOCATE 23,1 : PRINT SPACE$(79); 5910 LOCATE 24,1 : PRINT SPACE$(79); 5920 LOCATE 24,1 : PRINT "(Possible Actions: ps, f, m, p1...pn, c1...cn, m1...mn, q)"; 5930 LOCATE 23,1 : INPUT "Next Action";REPLY$ 5940 IF REPLY$ = "ps" THEN GOSUB 6080 : GOTO 5900 5950 IF REPLY$ = "sp" THEN GOSUB 6080 : GOTO 5900 5960 IF REPLY$ = "pc" THEN LOCATE 22,1 : PRINT "Error in Previous Reply ";REPLY$; : GOTO 5900 5970 IF REPLY$ = "f" THEN PERS(1) = TT2 : GOTO 2810 5980 IF REPLY$ = "m" THEN PERS(1) = TT3 : GOTO 2810 5990 IF LEFT$(REPLY$,1) = "p" THEN PERS(1) = VAL(RIGHT$(REPLY$,LEN(REPLY$)-1)) : GOTO 2800 6000 IF LEFT$(REPLY$,1) = "c" THEN 6010 ELSE 6050 6010 CHLD = VAL(RIGHT$(REPLY$,LEN(REPLY$)-1)) 6020 IF CHLD < 1 OR CHLD > CHILD.COUNT THEN 6070 6030 PERS(1) = CH(CHLD) 6040 GOTO 2810 'for personal 6050 IF LEFT$(REPLY$,1) = "m" THEN 7260 'marriage 6060 IF LEFT$(REPLY$,1) = "q" THEN 7390 6070 LOCATE 22,1 : PRINT "Error in Previous Reply ";REPLY$; : GOTO 5900 6080 REM Routine to Print the Screen 6090 REM Accessed by users 'ps' reply 6100 FOR ROW = 1 TO 20 6110 THIS$ = SPACE$(79) 6120 FOR COL = 1 TO 79 6130 X = SCREEN(ROW,COL) 6140 IF X > 125 THEN X = 32 6150 IF X < 32 THEN X = 32 6160 MID$(THIS$,COL,1) = CHR$(X) 6170 NEXT COL 6180 LPRINT THIS$ 6190 NEXT ROW 6200 LPRINT CHR$(12); 6210 RETURN 6220 REM Routine to Display the Ordinances 6230 GET #1, PERS(1) : GOSUB 3300 6240 GET #3, PERS(1) 6250 SEX$ = LEFT$(T4$,1) 6260 REM Extract the Ordinance Information 6270 U1 = CVS(O1$) 6280 U2$ = O2$ 6290 U3$ = O3$ 6300 U4$ = O4$ 6310 U5 = CVS(O5$) 6320 U6 = CVS(O6$) 6330 U7$ = O7$ 6340 U8$ = O8$ 6350 U9$ = O9$ 6360 U10$ = O10$ 6370 U11$ = O11$ 6380 U12 = CVS(O12$) 6390 U13$ = O13$ 6400 U14$ = O14$ 6410 U15$ = O15$ 6420 U16$ = O16$ 6430 U17$ = O17$ 6440 U18$ = O18$ 6450 U19$ = O19$ 6460 U20$ = O20$ 6470 U21$ = O21$ 6480 U22$ = O22$ 6490 U23$ = O23$ 6500 U24$ = O24$ 6510 CLS 6520 R1 = 1 : C1 = 1 : R2 = 21 : C2 = 79 : GOSUB 400 'Double Box 6530 R1 = 3 : C1 = 1 : R2 = 3 : C2 = 79 : GOSUB 2170 'Horizontal Double 6540 R1 = 19 : C1 = 1 : R2 = 19 : C2 = 79 : GOSUB 2170 'Horizontal Double 6550 LOCATE 2,3 : PRINT "Ordinance Information for:"; 6560 LOCATE 4,7 : COLOR 1 : PRINT "Personal Record"; : COLOR 7 6570 LOCATE 5,3 : PRINT "Christening:"; 6580 LOCATE 6,3 : PRINT "Blessing:"; 6590 LOCATE 7,3 : PRINT "Sealed to Parents:"; 6600 LOCATE 8,5 : PRINT "Father's Id:"; 6610 LOCATE 9,6 : PRINT "Name:"; 6620 LOCATE 10,5 : PRINT "Mother's Id:"; 6630 LOCATE 11,6 : PRINT "Name:"; 6640 LOCATE 12,3 : PRINT "Baptism:"; 6650 LOCATE 13,3 : PRINT "Confirmation:"; 6660 LOCATE 14,3 : PRINT "Patriarchical Blessing:"; 6670 LOCATE 15,3 : PRINT "Endowment:"; 6674 REM Test for male. Skip if male. 6675 IF SEX$ = "M" THEN 6710 6680 LOCATE 16,3 : PRINT "Sealed to Husband:"; 6690 LOCATE 17,5 : PRINT "Husband's Id.:"; 6700 LOCATE 18,6 : PRINT "Name:"; 6710 REM Test for Male. Skip if not 6720 IF SEX$ <> "M" THEN 6860 6730 R1 = 3 : R2 = 19 : C1 = 40 : C2 = 40 : GOSUB 2310 "Vertical Double 6740 LOCATE 4,46 : COLOR 1 : PRINT "Priesthood Record"; : COLOR 7 6750 LOCATE 5,42 : PRINT "Aaronic Priesthood:"; 6760 LOCATE 6,44 : PRINT "Deacon:"; 6770 LOCATE 7,44 : PRINT "Teacher:"; 6780 LOCATE 8,44 : PRINT "Priest:"; 6790 LOCATE 10,42 : PRINT "Melchizedek Priesthood:"; 6800 LOCATE 11,44 : PRINT "Elder:"; 6810 LOCATE 12,44 : PRINT "Seventy:"; 6820 LOCATE 13,44 : PRINT "High Priest:"; 6830 LOCATE 15,42 : PRINT "Bishop:"; 6840 LOCATE 16,42 : PRINT "Patriarch:"; 6850 LOCATE 17,42 : PRINT "Apostle:"; 6860 LOCATE 20,3 : PRINT "Occupation:"; 6870 REM Print the Information Currently Present 6880 LOCATE 2,30 : PRINT T3$ + " " + T2$; 6890 LOCATE 2,66 : PRINT "Person:";T1; 6900 LOCATE 5,28 : PRINT U2$; 6910 LOCATE 6,28 : PRINT U3$; 6920 LOCATE 7,28 : PRINT U4$; 6940 LOCATE 8,18 : PRINT U5; 6950 IF U5 = 0 THEN 6980 6960 GET #1, U5 : GOSUB 3300 'Extract Father Information 6970 LOCATE 9,12 : PRINT T3$ + " " + T2$; 6980 LOCATE 10,18 : PRINT U6; 6990 IF U6 = 0 THEN 7020 7000 GET #1, U6 : GOSUB 3300 'Extract Mother Information 7010 LOCATE 11,12 : PRINT T3$ + " " + T2$; 7020 LOCATE 12,28 : PRINT U7$; 7030 LOCATE 13,28 : PRINT U8$; 7040 LOCATE 14,28 : PRINT U9$; 7050 LOCATE 15,28 : PRINT U10$; 7054 REM Test for male. Skip if male. 7055 IF SEX$ = "M" THEN 7110 7060 LOCATE 16,28 : PRINT U11$; 7070 LOCATE 17,19 : PRINT U12; 7080 IF U12 = 0 THEN 7110 7090 GET #1, U12 : GOSUB 3300 'Extract Spouse Information 7100 LOCATE 18,12 : PRINT T3$ + " " + T2$; 7110 REM Test for Male. Bypass if not. 7120 IF SEX$ <> "M" THEN 7240 7130 LOCATE 5,67 : PRINT U13$; 7140 LOCATE 6,67 : PRINT U14$; 7150 LOCATE 7,67 : PRINT U15$; 7160 LOCATE 8,67 : PRINT U16$; 7170 LOCATE 10,67 : PRINT U17$; 7180 LOCATE 11,67 : PRINT U18$; 7190 LOCATE 12,67 : PRINT U19$; 7200 LOCATE 13,67 : PRINT U20$; 7210 LOCATE 14,67 : PRINT U21$; 7220 LOCATE 15,67 : PRINT U22$; 7230 LOCATE 16,67 : PRINT U23$; 7240 LOCATE 20,15 : PRINT U24$; 7250 GOTO 3170 'For User Action 7260 REM Marriage was requested by Number 7270 MARRIAGE = VAL(RIGHT$(REPLY$,LEN(REPLY$)-1)) 7280 CLS 7290 IF MARRIAGE > 0 AND MARRIAGE <= 200 THEN 7360 7300 LOCATE 22,1 : PRINT SPACE$(79); 7310 LOCATE 22,1 : PRINT "Invalid Marriage Number"; 7320 LOCATE 23,1 : PRINT SPACE$(79); 7330 LOCATE 23,1 : PRINT "Press any key to continue." 7340 A$ = INKEY$ : IF A$ = "" THEN 7340 7350 GOTO 2810 7360 GOSUB 1940 'Print the form 7370 GET #2, MARRIAGE 7380 GOTO 5260 7390 REM Wrapup 7400 CLOSE #1 7410 CLOSE #2 7420 CLOSE #3 7430 CLS : LOCATE 21,1 7440 PRINT "End of Program" 7450 RUN "a:menu" 7460 REM Routine to Convert a number to a string. This.pers is input 7470 REM value$ is output, with record number and persons name. 7480 VALUE$ = STR$(THIS.PERS) 7490 WIDE = LEN(VALUE$) 7500 VALUE$ = RIGHT$(VALUE$,WIDE-1) 7510 VALUE$ = "("+VALUE$+") "+T2$+", "+T3$ 7520 RETURN