10 REM > ConvCSV
   20 REM Convert 1861 spreadsheet into standard format
   30 :
   40 verbose%=TRUE
   50 max%=19:year%=1861:month%=4
   60 :
   70 A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
   80 s$=".":fmax%=255:IFos%AND32:d$="\" ELSE IFos%AND8:d$="/" ELSE s$="/":d$=".":fmax%=10
   90 DIM head$(max%),info$(max%),source$(max%)
  100 FOR A%=0 TO max%:READ head$(A%):NEXT
  110 DATA "HOUSEHOLD NUMBER","SURNAME","NAME","AGE","RELATIONSHIP","SEX","MARITAL STATUS","STREET ADDRESS"
  120 DATA "OCCUPATION","BIRTH YEAR","BIRTH PLACE","BIRTH COUNTY","BIRTH COUNTRY","INDIVIDUAL NUMBER"
  130 DATA "CIVIL PARISH","SUB-REGISTRATION DISTRICT","ENUMERATION DISTRICT","PIECE","PAGE","FOLIO"
  140 :
  150 ON ERROR REPORT:PROCClose_All:PRINT" at line ";ERL:IF ERR=17:QUIT ELSE END
  160 age$="":laststreet$=""
  170 in%=OPENIN("1861 Census Whitby.csv")
  180 out%=OPENOUT(LEFT$("Whitby"+STR$year%+s$+"csv",fmax%))
  190 IF out%=0:PRINT"Couldn't open output file, is it already open?":END
  200 PROCcsv_wr(out%,head$())
  210 IF verbose%:CLS:PRINT':FOR A%=0 TO max%:PRINTFNd0(A%,2);": ";head$(A%);":":NEXT:OFF
  220 :
  230 PROCcsv_rd(in%,source$()):REM Skip header
  240 REPEAT
  250   PROCcsv_rd(in%,source$())
  260   IF source$(3)<>"":PROCprocess:PROCcsv_wr(out%,info$())
  270 UNTILEOF#in%
  280 CLOSE#out%:out%=0
  290 CLOSE#in%:in%=0
  300 QUIT
  310 :
  320 DEFPROCprocess
  330 IF verbose%:VDU30:PRINT source$(4);", ";source$(3);SPC(60-LENsource$(4)-LENsource$(3))'source$(1);SPC(75-LENsource$(1))
  340 :
  350 REM Tidy young ages
  360 A$=source$(7)
  370 IF RIGHT$(A$,1)="m":A$=A$+"th":IFVALA$>1:A$=A$+"s"
  380 IF RIGHT$(A$,1)="w":A$=A$+"eek":IFVALA$>1:A$=A$+"s"
  390 IF RIGHT$(A$,1)="d":A$=A$+"ay":IFVALA$>1:A$=A$+"s"
  400 source$(7)=A$
  410 :
  420 REM Regularise relationship, and try to assign a sex
  430 REM Note this fails with, eg, Daughter-in-Law's Son, but these don't occur
  440 A$=source$(5):sex$=""
  450 REPEAT:A$=FNswap(A$,"`","'"):UNTILINSTR(A$,"`")=0
  460 IFFNuc(RIGHT$(A$,3))="DAU"  :A$=A$+"ghter"            :sex$="F"
  470 IFRIGHT$(A$,4)="Vist" :A$=LEFT$(A$,LENA$-1)+"itor"
  480 IFRIGHT$(A$,5)="Board":A$=A$+"er"
  490 IFFNuc(LEFT$(A$,2))="GC" :A$="Grandc"+MID$(A$,3)
  500 IFFNuc(LEFT$(A$,2))="GD" :A$="Grandd"+MID$(A$,3)      :sex$="F"
  510 IFFNuc(LEFT$(A$,2))="GS" :A$="Grands"+MID$(A$,3)      :sex$="M"
  520 IFFNuc(LEFT$(A$,3))="GTN":A$="Great-N"+MID$(A$,4)
  530 IFFNuc(RIGHT$(A$,4))="GSON":A$=LEFT$(A$,LENA$-4)+"Grandson":sex$="M"
  540 IFLEFT$(A$,7)="Grand M":A$="Grandm"+MID$(A$,8)
  550 IFRIGHT$(A$,5)="Broth":A$=A$+"er"                     :sex$="M"
  560 IFRIGHT$(A$,4)="Fath" :A$=A$+"er"                     :sex$="M"
  570 IFRIGHT$(A$,3)="Mot"  :A$=A$+"her"                    :sex$="F"
  580 IFRIGHT$(A$,4)="Cous" :A$=A$+"in"
  590 IFFNuc(LEFT$(A$,3)) ="MIL":A$="Mother-in-Law"+MID$(A$,6)
  600 IFFNuc(LEFT$(A$,3)) ="FIL":A$="Father-in-Law"+MID$(A$,6)
  610 IFFNuc(LEFT$(A$,3)) ="DIL":A$="Daughter-in-Law"+MID$(A$,6)
  620 IFFNuc(RIGHT$(A$,3))="DIL":A$=LEFT$(A$,LENA$-3)+"Daughter-in-Law"
  630 IFFNuc(LEFT$(A$,3)) ="BIL":A$="Brother-in-Law"+MID$(A$,6)
  640 IFRIGHT$(A$,3)="Sit"  :A$=LEFT$(A$,LENA$-1)+"ster"    :sex$="F"
  650 IFRIGHT$(A$,4)="Lodg" :A$=A$+"er"
  660 IFLEFT$(A$,4) ="Sons" :A$="Son's"+MID$(A$,5)
  670 IFLEFT$(A$,4) ="St D" :A$="Step-d"+MID$(A$,5)         :sex$="F"
  680 IFLEFT$(A$,5) ="St So":A$="Step-s"+MID$(A$,5)         :sex$="M"
  690 IFLEFT$(A$,5) ="St Si":A$="Step-s"+MID$(A$,5)         :sex$="F"
  700 IFLEFT$(A$,6) ="Step-D":A$="Step-d"+MID$(A$,7)        :sex$="F"
  710 IFLEFT$(A$,5) ="Stepd":A$="Step-"+MID$(A$,5)          :sex$="F"
  720 IFLEFT$(A$,3) ="StD"  :A$="Step-d"+MID$(A$,4)         :sex$="F"
  730 IFLEFT$(A$,2) ="Sd"   :A$="Step-"+MID$(A$,2):sex$="F"
  740 IFFNuc(LEFT$(A$,4))="STSO":A$="Step-so"+MID$(A$,5)    :sex$="M"
  750 IFLEFT$(A$,4) ="StSi" :A$="Step-si"+MID$(A$,5)        :sex$="F"
  760 IFRIGHT$(A$,4)="Sist" :A$=A$+"er"                     :sex$="F"
  770 IFRIGHT$(A$,4)="Serv" :A$=A$+"ant"
  780 IFLEFT$(A$,4) ="WifS" :A$="Wife's "+MID$(A$,4)        :sex$="F"
  790 IFLEFT$(A$,4) ="Wif " :A$="Wife's"+MID$(A$,4)
  800 IFLEFT$(A$,3) ="Wi "  :A$="Wife's"+MID$(A$,3)
  810 IFRIGHT$(A$,4)="Neic" :A$=A$+"e"                      :sex$="F"
  820 IFRIGHT$(A$,4)="Moth" :A$=A$+"er"                     :sex$="F"
  830 IFRIGHT$(A$,4)="Neph" :A$=A$+"ew"                     :sex$="M"
  840 IFLEFT$(A$,5) ="Neph ":A$="Nephew's"+MID$(A$,5)
  850 IFLEFT$(A$,4) ="Nep " :A$="Nephew's"+MID$(A$,4)
  860 IFLEFT$(A$,4) ="LodW" :A$="Lodger's "+MID$(A$,4)
  870 IFLEFT$(A$,5) ="Lodg ":A$="Lodger's"+MID$(A$,5)
  880 IFLEFT$(A$,4) ="Lod " :A$="Lodger's"+MID$(A$,4)
  890 IFLEFT$(A$,5) ="Lod's":A$="Lodger's"+MID$(A$,6)
  900 IFLEFT$(A$,5) ="Wifes":A$="Wife's"+MID$(A$,6)
  910 IFLEFT$(A$,5) ="Vist ":A$="Visitor's"+MID$(A$,5)
  920 IFRIGHT$(A$,3)="App"  :A$=A$+"rentice"
  930 IFRIGHT$(A$,4)="Asst" :A$=LEFT$(A$,LENA$-1)+"istant"
  940 IFRIGHT$(A$,6)="Assist":A$=A$+"ant"
  950 IFRIGHT$(A$,5)="Servt":A$=LEFT$(A$,LENA$-1)+"ant"
  960 IFLEFT$(A$,2)="Hk"    :A$="House"+MID$(A$,2)
  970 IFA$="Houskeep"       :A$="Housekeeper"
  980 IFA$="F Wife"         :A$="Father's Wife"             :sex$="F"
  990 IFA$="Dau/Lodger"     :A$="Daughter/Lodger"           :sex$="F"
 1000 IFA$="Dau(Step)"      :A$="Step-Daughter"             :sex$="F"
 1010 IFA$="Bro I Law"      :A$="Brother-in-Law"            :sex$="M"
 1020 IFA$="U"              :A$="Uncle"                     :sex$="M"
 1030 IFA$="Wofe"           :A$="Wife"                      :sex$="F"
 1040 IFA$="Srv"            :A$="Servant"
 1050 IFA$="Teach"          :A$="Teacher"
 1060 source$(5)=A$
 1070 :
 1080 REM Tidy name
 1090 source$(4)=FNuc(LEFT$(source$(4),1))+MID$(source$(4),2)
 1100 A$=source$(3)
 1110 RESTORE +0
 1120 READ nick$,name$
 1130 REPEAT
 1140   A$=FNswap(A$,nick$+" ",name$+" ")
 1150   IF A$=nick$:A$=FNswap(A$,nick$,name$)
 1160   READ nick$,name$
 1170 UNTILnick$="*"
 1180 source$(3)=FNuc(LEFT$(A$,1))+MID$(A$,2)
 1190 DATA Chas,Charles,Wm,William,Geo,George,Elizth,Elizabeth,Fredk,Frederick,Hannh,Hannah
 1200 DATA Thos,Thomas,Benj,Benjamin,Charlot,Charlotte,Eliz,Elizabeth,Elizth,Elizabeth
 1210 DATA Johnathan,Jonathan,Robt,Robert,Hanh,Hannah,Hanna,Hannah,Richd,Richard,Ths,Thomas
 1220 DATA Margt,Margeret,Thomsa,Thomas
 1230 DATA *,*
 1240 :
 1250 REM Create a Sex field
 1260 IFsex$="" THEN
 1270   A$=source$(5):REM Look at relationship
 1280   IFA$="Son"              :sex$="M"
 1290   IFA$="Wife"             :sex$="F"
 1300   IFLEFT$(A$,7)="Brother" :sex$="M"
 1310   IFRIGHT$(A$,4)="iece"   :sex$="F"
 1320   IFRIGHT$(A$,5)="ephew"  :sex$="M"
 1330   IFLEFT$(A$,6)="Mother"  :sex$="F"
 1340   IFLEFT$(A$,8)="Daughter":sex$="F"
 1350   IFFNuc(LEFT$(A$,3))="SON ":sex$="M"
 1360 ENDIF
 1370 IF sex$="" THEN
 1380   A$=source$(11):REM Look at occupation
 1390   IFA$="Wife"          :sex$="F"
 1400   IFINSTR(A$,"Wife ")  :sex$="F"
 1410   IFINSTR(A$,"Widower"):sex$="M"
 1420   IFINSTR(A$,"Widow ") :sex$="F"
 1430   IFA$="Widow"         :sex$="F"
 1440   IFA$="Widr"          :sex$="M"
 1450   IFA$="Wid"           :sex$="F"
 1460 ENDIF
 1470 REM Difficult to assign a sex if nothing to match
 1480 REM Will have to try and match personal names
 1490 IF sex$="" THEN
 1500   A$=source$(3):REM Look at personal name
 1510   RESTORE +0
 1520   READ s$
 1530   REPEAT
 1540     READ n$
 1550     REPEAT
 1560       IF A$=n$ OR LEFT$(A$,LENn$+1)=n$+" " OR RIGHT$(A$,LENn$+1)=" "+n$:sex$=s$
 1570       READ n$
 1580     UNTILn$="*" OR sex$<>""
 1590     READ s$
 1600   UNTILs$="*" OR sex$<>""
 1610 ENDIF
 1620 IF FNuc(source$(5))="SILAW":IFsex$="M":source$="Son-in-Law"
 1630 IF FNuc(source$(5))="SILAW":IFsex$="F":source$="Sister-in-Law"
 1640 IF sex$="F":sex$="Female"
 1650 IF sex$="M":sex$="Male"
 1660 DATA M
 1670 DATA Aaron,Abel,Abraham,Adam,Albert,Alexander,Alfred,Algenon,Allan,Ambrose,Andrew,August,Amos
 1680 DATA Benjamin,Christopher,Daniel,David,Edgar,Edward,Edwin,Charles,Charley,Anthony,Archibald,Augustus
 1690 DATA Austin,Bernard,Charlie,Cornelius,Cuthbert.Dennis,Ebenezer,Edmond,Elijah,Ernest,Enoch,Enock
 1700 DATA Eustace,Frederick,George,Gilbert,Harry,Harrison,Henry,Hugo,Isaac,Jackson,James,Jacob,John
 1710 DATA Joseph,Joshua,Mark,Matthew,Michael,Nathaniel,Nicholas,Oliver,Patrick,Paul,Peter,Philip
 1720 DATA Ralph,Richard,Robert,Samuel,Soloman,Stephen,Thomas,Victor,William,Walter,Anderson
 1730 DATA Dennis,Edmund,Jonathan,Cuthbert,Gideon,Godfrey,Hamilton,Hugh,Jeremiah,Jerimiah,Luke
 1740 DATA Neil,Randolph,Percival,Stewart,Timothy,Tom,Elisha,Estill,Francis,Frank,Hamilton,Israel
 1750 DATA Johann,Johnson,Lancelot,Leonard,Levi,Louis,Luke,Marmaduke,Martin,Matthias,Miles,Moses,Randolph
 1760 DATA Robinson,Roderick,Rodrick,Sampson,Silvester,Simon,Simpson,Snowdon,Stephenson,Theophilius
 1770 DATA Vallance,Wilson,Jasper,Seth,Stevenson,Elmer,William?,Pearson
 1780 DATA *,F
 1790 DATA Ada,Agnes,Alice,Allice,Amelia,Ann,Annie,Ninah,Amy,Anna,Anne,Grace,Hannah,Hanna,Harriet
 1800 DATA Bridget,Caroline,Catherine,Charlotte,Barbara,Christiana,Esther,Euphemia,Faith,Fanny,Florence
 1810 DATA Elizabeth,Jane,Betsy,Bettina,Diana,Dianah,Dinah,Dorothy,Eleanor,Eliza,Ellen,Emily,Emma
 1820 DATA Henrietta,Isabella,Katherine,Julia,Lucy,Lydia,Margeret,Maria,Martha,Mary,Matilda,Rachel
 1830 DATA Rebecca,Ruth,Sarah,Sophia,Susan,Susanna,Susannah,Elleanor,Allicia,Betty,Charlottete
 1840 DATA Christine,Elizabetha,Diane,Georgiana,Gertrude,Isabel,Janet,Jemima,Kate,Louisa,Jean
 1850 DATA Margaret,Miriam,Rachael,Priscilla,Phoebe,Ursulla,Elvira,Frances,Louisa,Lucia,Marianne,Mirriam
 1860 DATA Marsha,May,Meg,Mercy,Nancy,Rosana,Rosetta,Selina,Susanne,Tabatha,Tabitha,Ursulla?,Mademouselle
 1870 DATA Phillis,Emilly,Janice
 1880 DATA *,*
 1890 :
 1900 REM Regularise Marital Status
 1910 A$=source$(6)
 1920 IFA$="Spins"    :A$="Spinster"
 1930 IFA$="Vist"     :A$="Visitor"
 1940 IFA$="Widr"     :A$="Widower"
 1950 IFA$="Wid"      :A$="Widow"
 1960 IFA$="W"ORA$="w":A$="Widow"
 1970 IFA$="M"ORA$="m":A$="Married"
 1980 IFA$="U"ORA$="u":A$="Single"
 1990 IFA$=""         :A$="Single"
 2000 source$(6)=A$
 2010 :
 2020 REM Tidy address
 2030 A$=FNs(source$(1))
 2040 :
 2050 REM Ensure correct apostophication
 2060 RESTORE +0
 2070 READ B$:REPEAT
 2080   A$=FNswap(A$,"s "+B$,"'s "+B$)
 2090   READ B$
 2100 UNTILB$="*"
 2110 DATA B,C,G,I,L,R,S,T,W,Y,*
 2120 REPEAT:A$=FNswap(A$,"`","'"):UNTILINSTR(A$,"`")=0
 2130 REPEAT:A$=FNswap(A$,"''","'"):UNTILINSTR(A$,"''")=0
 2140 :
 2150 REM Correct spelling mistakes
 2160 A$=FNswap(A$,"St A","St. A")
 2170 A$=FNswap(A$,"St M","St. M")
 2180 A$=FNswap(A$,"St H","St. H")
 2190 A$=FNswap(A$,"St. Ann ","St. Ann's ")
 2200 A$=FNswap(A$,"St. Hilda ","St. Hilda's ")
 2210 A$=FNswap(A$,"OfficeYard","Office Yard")
 2220 IFINSTR(A$,"Yard")=0:A$=FNswap(A$,"Old Post Office","Old Post Office Yard")
 2230 IFINSTR(A$,"Street")=0:IFINSTR(A$,"St "OR RIGHT$(A$,2)="St":A$=FNswap(A$,"St","Street")
 2240 IFINSTR(A$,"Square")=0:A$=FNswap(A$,"Sq","Square")
 2250 A$=FNswap(A$,"M Chapel","Methodist Chapel")
 2260 A$=FNswap(A$,"2and","2 and")
 2270 A$=FNswap(A$,"Hill H","Hill, H")
 2280 A$=FNswap(A$,"Inn H","Inn, H")
 2290 A$=FNswap(A$,"Hotel ","Hotel, ")
 2300 A$=FNswap(A$,"gg P","gg, P")
 2310 A$=FNswap(A$,"Cros's","Cross")
 2320 A$=FNswap(A$,"Bark T","Park T")
 2330 A$=FNswap(A$,"Yard ","Yard, ")
 2340 A$=FNswap(A$,"Mc Locklin's","McLachlin's")
 2350 A$=FNswap(A$,"Easterley's","Easterby")
 2360 A$=FNswap(A$,"Muncarter","Muncaster")
 2370 A$=FNswap(A$,"Water Stead","Waterstead")
 2380 A$=FNswap(A$,"Stokesley","Stakesby")
 2390 A$=FNswap(A$,"Stokesly","Stakesby")
 2400 A$=FNswap(A$,"VueT","Vue T")
 2410 A$=FNswap(A$,"Tce","Terrace")
 2420 A$=FNswap(A$,"Trc","Terrace")
 2430 A$=FNswap(A$,"Place ","Place, ")
 2440 A$=FNswap(A$,"Street ","Street, ")
 2450 A$=FNswap(A$,"Square ","Square, ")
 2460 A$=FNswap(A$,"Terrace ","Terrace, ")
 2470 A$=FNswap(A$,"Cottage ","Cottage, ")
 2480 A$=FNswap(A$,"Esplanade ","Esplanade, ")
 2490 A$=FNswap(A$,"Briggewath","Briggswath")
 2500 A$=FNswap(A$,"Bruson's","Benson's")
 2510 A$=FNswap(A$,"7H","7 H")
 2520 A$=FNswap(A$,"Daltwick","Saltwick")
 2530 :
 2540 REM Remove brackets
 2550 A$=FNswap(A$,")","")
 2560 A$=FNswap(A$,"(","")
 2570 :
 2580 REM Swap addresses around
 2590 READ street$
 2600 REPEAT
 2610   IF LEFT$(A$,LENstreet$)=street$ AND A$<>street$ THEN
 2620     A$=FNs(MID$(A$,LENstreet$+2))+", "+street$
 2630   ENDIF
 2640   READ street$
 2650 UNTIL street$="*"
 2660 DATA "Baxtergate","Church Street","Cliff Street","Flowergate","8 Flowergate","St. Ann's Staith"
 2670 DATA "Haggersgate","Victoria Road","Waterstead Lane"
 2680 DATA *
 2690 :
 2700 REM Ensure plain number at start
 2710 IFLEFT$(A$,2)="No":IFVALMID$(A$,3):A$=FNs(MID$(A$,3))
 2720 IFLEFT$(A$,3)="Nos":IFVALMID$(A$,4):A$=FNs(MID$(A$,4))
 2730 IFVALRIGHT$(A$,2) THEN
 2740   A$=STR$VALRIGHT$(A$,2)+" "+FNs(LEFT$(A$,LENA$-2))
 2750 ENDIF
 2760 IFRIGHT$(A$,3)=" no":A$=LEFT$(A$,LENA$-3)
 2770 IFRIGHT$(A$,1)=",":A$=LEFT$(A$,LENA$-1)
 2780 :
 2790 REM Canonicalise addresses
 2800 READ street$
 2810 REPEAT
 2820   READ yard$
 2830   REPEAT
 2840     A$=FNadd(A$,yard$,street$)
 2850     READ yard$
 2860   UNTILyard$="*"
 2870   READ street$
 2880 UNTILstreet$="*"
 2890 :
 2900 DATA "Church Street"
 2910 DATA "Kiln","New Way","Smith's","Black Horse Yard","Fish Ghaut","St. Michael's Church"
 2920 DATA "Black Horse Yard","Dispensary","Blackburn's","Lee's","Chapel","Benson's","Argument's"
 2930 DATA "Timber"
 2940 DATA *
 2950 DATA "Baxtergate"
 2960 DATA "Black Horse Inn","Talbot Hotel"
 2970 DATA *
 2980 DATA "Flowergate"
 2990 DATA "Little Angel","United Free Church"
 3000 DATA *
 3010 DATA "St. Ann's Staith"
 3020 DATA "Buck Inn Yard","Old Post Office Yard","Burnett"
 3030 DATA *
 3040 DATA "Haggersgate"
 3050 DATA "Paradise","Bakehouse","Elephant","Muncaster"
 3060 DATA *
 3070 DATA "Bagdale"
 3080 DATA "Carr's"
 3090 DATA *
 3100 DATA "Waterstead Lane"
 3110 DATA "Bogg Hall"
 3120 DATA *
 3130 DATA "Green Lane"
 3140 DATA "New Gardens","Folly"
 3150 DATA *
 3160 DATA "Larpool"
 3170 DATA "Cock","Crowdy"
 3180 DATA *
 3190 DATA "Spital Bridge"
 3200 DATA "Patent","White Hall"
 3210 DATA *
 3220 DATA *
 3230 :
 3240 IFINSTR(A$,"Hudson Street")=0:A$=FNswap(A$,"Abbey Terrace","Abbey Terrace East, Church Lane")
 3250 :
 3260 REM Special case for two different Miller's Yards
 3270 IF A$="Flowergate" OR A$="Haggersgate":laststreet$=A$
 3280 IF A$="Miller's Yard":A$=A$+", "+laststreet$
 3290 :
 3300 REPEAT:A$=FNswap(A$,"  "," "):UNTILINSTR(A$,"  ")=0
 3310 source$(1)=A$
 3320 :
 3330 REM Calculate Parish and District
 3340 A%=VALsource$(0)
 3350 parish$="":ed$=""
 3360 IF A%>=171587:parish$="Whitby" :ed$="1"
 3370 IF A%>=172399:parish$="Whitby" :ed$="2"
 3380 IF A%>=173179:parish$="Whitby" :ed$="3"
 3390 IF A%>=174139:parish$="Whitby" :ed$="4"
 3400 IF A%>=174800:parish$="Whitby" :ed$="5"
 3410 IF A%>=175442:parish$="Whitby" :ed$="6"
 3420 IF A%>=176186:parish$="Whitby" :ed$="7"
 3430 IF A%>=176994:parish$="Whitby" :ed$="8"
 3440 IF A%>=177795:parish$="Whitby" :ed$="9"
 3450 IF A%>=178533:parish$="Whitby" :ed$="10"
 3460 IF A%>=179264:parish$="Whitby" :ed$="11"
 3470 IF A%>=179710:parish$="Ruswarp":ed$="11"
 3480 IF A%>=180015:parish$="Ruswarp":ed$="12"
 3490 IF A%>=180088:parish$="Whitby" :ed$="12"
 3500 IF A%>=180696:parish$="Ruswarp":ed$="13"
 3510 IF A%>=181307:parish$="Whitby" :ed$="13"
 3520 IF A%>=181368:parish$="Ruswarp":ed$="14"
 3530 IF A%>=182013:parish$="Ruswarp":ed$="15"
 3540 IF A%>=182676:parish$="Ruswarp":ed$="16"
 3550 IF A%>=182713:parish$="":ed$=""
 3560 REM 17
 3570 REM 18
 3580 REM 19-Hawsker
 3590 REM 20-Hawsker
 3600 REM IFLENsource$(14)>1:parish$=source$(14) ELSE parish$=source$(2)
 3610 IFLENsource$(14)>1:parish$=source$(14)
 3620 IFVALsource$(15)  :ed$=source$(15)
 3630 :
 3640 REM Tweek folio
 3650 A$=source$(13)
 3660 IFRIGHT$(A$,1)>"@":A$=STR$VALA$+RIGHT$(A$,1) ELSE IF A$<>"":A$=STR$VALA$
 3670 source$(13)=A$
 3680 :
 3690 IFVALsource$(8)=0:source$(8)=""
 3700 :
 3710 REM Arrange in output array
 3720 info$()=""
 3730 info$(0) =source$(8)                :REM HOUSEHOLD NUMBER
 3740 info$(1) =source$(4)                :REM SURNAME
 3750 info$(2) =source$(3)                :REM NAME
 3760 age$=source$(7):info$(3)=age$       :REM AGE
 3770 info$(4) =source$(5)                :REM RELATIONSHIP
 3780 info$(5) =sex$                      :REM GENDER
 3790 info$(6) =source$(6)                :REM MARITAL STATUS
 3800 info$(7) =source$(1)                :REM STREET ADDRESS
 3810 info$(8) =source$(9)                :REM OCCUPATION
 3820 IF VALage$ THEN
 3830   info$(9) ="abt "+STR$(year%-VALage$-1)
 3840   IF INSTR(age$,"m"THEN
 3850     info$(9)=STR$(year%-(VALage$-month%+13)DIV12)
 3860   ENDIF
 3870   IF INSTR(age$,"d"OR INSTR(age$,"w"):info$(9)=STR$year%
 3880   SAVE                               :REM BIRTH YEAR
 3890   IFsource$(11)<>"":IFsource$(10)<>"":info$(10)=source$(11)+", "+source$(10)
 3900   IFinfo$(9)="":info$(10)=source$(11)+source$(10)
 3910   IFinfo$(9)="":info$(10)=source$(17) :REM BIRTH PLACE
 3920   A$=info$(10)
 3930   IF MID$(A$,4,2)=", " THEN
 3940     info$(11)=LEFT$(A$,3)             :REM BIRTH COUNTY
 3950     info$(12)="England"               :REM BIRTH COUNTRY
 3960     IF info$(11)="WLS":info$(12)="Wales"
 3970     IF info$(11)="IRL":info$(12)="Ireland"
 3980     IF info$(11)="SCT":info$(12)="Scotland"
 3990     A$=MID$(A$,6)
 4000   ENDIF
 4010   A%=INSTR(A$,", "):IF A%:IF info$(11)="":info$(11)=LEFT$(A$,A%-1):A$=MID$(A$,A%+2)
 4020   IF LEFT$(A$,2)="N ":A$="North"+MID$(A$,2)
 4030   IF LEFT$(A$,2)="S ":A$="South"+MID$(A$,2)
 4040   IF LEFT$(A$,2)="E ":A$="East"+MID$(A$,2)
 4050   IF LEFT$(A$,2)="W ":A$="West"+MID$(A$,2)
 4060   info$(10)=A$                        :REM BIRTH PLACE
 4070   info$(13)=source$(0)                :REM INDIVIDUAL NUMBER
 4080   info$(14)=parish$                   :REM CIVIL PARISH
 4090   REM info$(15)="Whitby"              :REM REGISTRATION DISTRICT
 4100   REM info$(16)=""                    :REM REGISTRATION DISTRICT NUMBER
 4110   info$(15)="Whitby"                  :REM SUB-REGISTRATION DISTRICT
 4120   info$(16)=ed$                       :REM ED, INSTITUTION, OR VESSEL
 4130   info$(17)=source$(12)               :REM PIECE
 4140   info$(18)=""                        :REM PAGE
 4150   info$(19)=source$(13)               :REM FOLIO
 4160   :
 4170   IF verbose%:FOR A%=0 TO max%:PRINTTAB(36,A%+2);LEFT$(info$(A%),40);SPC(40-LENLEFT$(info$(A%),40)):NEXT
 4180   ENDPROC
 4190   :
 4200   DEFFNadd(addr$,yard$,street$)
 4210   IF INSTR(addr$,yard$+" "):IF INSTR(addr$,street$)=0:=addr$+", "+street$
 4220   IF RIGHT$(addr$,LENyard$)=yard$:IF INSTR(addr$,street$)=0:=addr$+", "+street$
 4230   =addr$
 4240   :
 4250   DEFFNswap(in$,match$,swap$)
 4260   A%=INSTR(in$,match$):IF A%:in$=LEFT$(in$,A%-1)+swap$+MID$(in$,A%+LENmatch$)
 4270   =in$
 4280   :
 4290   :
 4300   DEFPROCClose_All
 4310   out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
 4320   in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
 4330   ENDPROC
 4340   :
 4350   DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
 4360   DEFFNuc(A$):LOCAL B$:IFA$="":=""
 4370   REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
 4380   DEFFNlc(A$):LOCAL B$:IFA$="":=""
 4390   REPEATB$=B$+CHR$(ASCA$OR((A$<"_")AND&20)):A$=MID$(A$,2):UNTILA$="":=B$
 4400   DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
 4410   IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
 4420   =A$
 4430   :
 4440   DEFPROCcsv_wr(o%,array$())
 4450   LOCAL n%,q%:n%=DIM(array$(),1)
 4460   FOR A%=0 TO n%:A$=array$(A%)
 4470     q%=INSTR(A$,","):IFq%=0:q%=ASCA$=48:IFq%=0:q%=LENSTR$VALA$>8:IFq%=0:IFVALA$:q%=INSTR(A$,"/")
 4480     IF q%:A$=""""+A$+"""":IFINSTR(A$,",")=0:A$="="+A$
 4490     BPUT#o%,A$;:IF A%<>n%:BPUT#o%,",";
 4500   NEXT A%:BPUT#o%,""
 4510   ENDPROC
 4520   :
 4530   DEFPROCcsv_rd(i%,array$())
 4540   n%=0:array$()="":A$=GET$#i%:IFA$="":A$=GET$#i%
 4550   REPEAT:A%=INSTR(A$+",",",")
 4560     IF LEFT$(A$,1)="""" THEN
 4570       A%=INSTR(A$+",",""",")+1:array$(n%)=MID$(A$,2,A%-3)
 4580     ELSE
 4590       A%=INSTR(A$+",",","):array$(n%)=LEFT$(A$,A%-1)
 4600     ENDIF
 4610     A$=MID$(A$,A%+1):n%=n%+1
 4620   UNTILA$=""
 4630   ENDPROC