10
20
30 :
40 verbose%=TRUE
50 max%=21:reg%=1950:year%=1951
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 A$="":in%=OPENIN("!Make"):IF in%=0:in%=OPENIN("!Make"+s$):IF in%=0:in%=OPENIN("!Make"+s$+"bat")
100 IF in%:REPEAT:A$=GET$#in%:UNTIL EOF#in% OR INSTR(A$,"rem") OR INSTR(A$,"REM"):CLOSE#in%:in%=0
110 A%=INSTR(A$,"reg=") :IF A%:reg% =VALMID$(A$,A%+4)
120 A%=INSTR(A$,"year="):IF A%:year%=VALMID$(A$,A%+5)
130 A%=INSTR(A$,"max=") :IF A%:max% =VALMID$(A$,A%+4)
140 DIM head$(max%),info$(max%),addr$(max%)
150 FOR A%=0 TO max%:READ head$(A%):NEXT
160 DATA "HOUSEHOLD NUMBER","SURNAME","NAME","AGE","RELATIONSHIP","SEX","MARITAL STATUS","STREET ADDRESS"
170 DATA "OCCUPATION","BIRTH YEAR","BIRTH PLACE","BIRTH COUNTY","BIRTH COUNTRY","INDIVIDUAL NUMBER"
180 DATA "CIVIL PARISH","SUB-REGISTRATION DISTRICT","ENUMERATION DISTRICT","PIECE","PAGE","FOLIO"
190 DATA "POSTCODE","WALK ORDER"
200 :
210 ON ERROR PRINT:REPORT:PROCClose_All:PRINT" at line ";ERL:IF ERR=17:QUIT ELSE ON:END
220 OFF:age$="":laststreet$=""
230 out%=OPENOUT(LEFT$("Whitby"+STR$year%+s$+"csv",fmax%))
240 IF out%=0:PRINT"Couldn't open output file, is it already open?":CLOSE#in%:in%=0:END
250 PROCcsv_wr(out%,head$())
260 IF verbose%:CLS:PRINT':FOR A%=0 TO max%:PRINTFNd0(A%,2);": ";head$(A%);":":NEXT
270 :
280 lookup$="Addrs"+s$+"csv"
290 lookup%=OPENIN(lookup$):IF lookup%:PROCcsv_rd(lookup%,addr$())
300 :
310 FOR pd%=ASC"a" TO ASC"}":pd$=CHR$pd%+CHR$pd%
320 IF pd%=ASC"{":pd$="aa"
330 IF pd%=ASC"|":pd$="ab"
340 IF pd%=ASC"}":pd$="ac"
350 parish$ ="Whitby"
360 name$ =""
370 surname$ =""
380 poll$ =""
390 lastpoll$ =""
400 this$ =""
410 last$ =""
420 street$ =""
430 house$ =""
440 in%=OPENIN("Whitby"+STR$reg%+pd$+".txt"):IF in%:PROCfile:CLOSE#in%:in%=0
450 NEXT pd%
460 CLOSE#out%:out%=0
470 QUIT
480 :
490 DEFPROCfile
500 pd$=FNuc(pd$)
510 REPEAT
520 A$=GET$#in%:IFA$="":IFPTR#in%>1:PTR#in%=PTR#in%-2:IFBGET#in%<>BGET#in%:A$=GET$#in%
530 IF LEFT$(A$,1)<>"#":last$=this$:this$=A$:PROCline:PROCentry
540 UNTILEOF#in%
550 ENDPROC
560 :
570 DEFPROCline
580 A%=INSTR(A$,"!"):IF A%:A$=FNs(LEFT$(A$,A%-1)):
590 A%=INSTR(A$,"+"):IF A%:A$=LEFT$(A$,A%-1)+MID$(A$,A%+1):
600 name$=""
610 IF RIGHT$(A$,1)="""":A$=LEFT$(A$,LENA$-1)+LEFT$("#",VALhouse$=0)+house$
620 A%=INSTR(A$,"#"):IF A%:IF MID$(A$,A%+1,1)<>" ":A$=LEFT$(A$,A%)+" "+MID$(A$,A%+1)
630 A%=0:REPEAT:A%=A%+1
640 IF MID$(A$,A%,1)>"@":A$=LEFT$(A$,A%-1)+FNuc(MID$(A$,A%,1))+MID$(A$,A%+1)
650 A%=INSTR(A$+" "," ",A%)
660 UNTIL A%>=LEN A$
670 IFverbose%:PRINTTAB(0,0);A$;:IF LEN A$<70:PRINTSPC(70-LENA$);
680 IF LEFT$(A$,6)="Const:" :const$ =MID$(A$,INSTR(A$," ")+1):ENDPROC
690
700 IF LEFT$(A$,5)="Ward:" :ward$ =MID$(A$,INSTR(A$," ")+1):ENDPROC
710 IF LEFT$(A$,7)="Parish:":A$=MID$(A$,INSTR(A$," ")+1):parish$=LEFT$(A$,INSTR(A$+" "," ")-1):ENDPROC
720 IF INSTR(A$,":"):ENDPROC
730 IF last$="":IF A$<>"":street$=A$:house$="":ENDPROC
740 IF A$="":ENDPROC
750 :
760 age$ =""
770 relation$ =""
780 sex$ =""
790 condition$ =""
800 address$ =""
810 occupation$=""
820 birthyear$ =""
830 birthplace$=""
840 postcode$ =""
850 walk$ =""
860 IF VALA$:A%=INSTR(A$," "):poll$=LEFT$(A$,A%-1):A$=MID$(A$,A%+1) ELSE poll$=STR$(VALpoll$+1)
870 IF poll$<>"1":IF VALpoll$<>VALlastpoll$+1:PROCmissing
880 IF MID$(A$,2,1)=" ":IF LEFT$(A$,1)=LEFT$(surname$,1):A$=surname$+MID$(A$,2)
890 A%=INSTR(A$,"#"):IF A%=0:REPEATA%=A%+1:UNTILVALMID$(A$,A%) OR A%=LEN A$
900 IF A%<>LEN A$:house$=FNs(MID$(A$,A%+1)):A$=FNs(LEFT$(A$,A%-1)):IFVALhouse$:IF INSTR(house$," ")=0:house$=FNuc(house$)
910 A%=INSTR(A$," "):surname$=LEFT$(A$,A%-1):name$=MID$(A$,A%+1)
920 surname$=FNswap(surname$,"_"," "):name$=FNswap(name$,"_"," ")
930 A%=LENhouse$:REPEAT:A%=A%-1:UNTILMID$(house$,A%,1)=" " OR A%<1
940 address$=FNs(house$+LEFT$(",",VALMID$(house$,A%+1)=0 AND house$<>"")+" "+street$)
950 IF LEFT$(address$,4)="(no)":address$=FNs(MID$(address$,6))
960 IF LEFT$(address$,5)="Nonum":address$=FNs(MID$(address$,7))
970 :
980
990
1000
1010 sex$=""
1020 A$=name$:IF MID$(A$,2,1)=" ":A$=MID$(A$,3):
1030 IF LEFT$(A$,1)="(":A%=INSTR(A$,")"):IF A%:A$=FNs(MID$(A$,A%+1))
1040 RESTORE +0
1050 READ s$
1060 REPEAT
1070 READ n$
1080 REPEAT
1090 A%=INSTR(A$,"-"):IF A%=0:A%=INSTR(A$+" "," ")
1100 IF A$=n$ OR LEFT$(A$,A%-1)=n$ OR MID$(A$,A%+1)=n$:sex$=s$
1110 READ n$
1120 UNTILn$="*" OR sex$<>""
1130 READ s$
1140 UNTILs$="*" OR sex$<>""
1150 IF sex$="F":sex$="Female"
1160 IF sex$="M":sex$="Male"
1170 :
1180 DATA M
1190 DATA John,David,Michael,Paul,Peter,Andrew,James,Richard,Robert,Stephen,Christopher,William,Ian,Mark,Alan
1200 DATA Anthony,Thomas,Brian,George,Simon,Colin,Steven,Daniel,Kenneth,Neil,Philip,Joseph,Jonathan,Kevin
1210 DATA Matthew,Raymond,Martin,Stuart,Barry,Ronald,Derek,Charles,Keith,Edward,Lee,Graham,Eric,Gary,Geoffrey
1220 DATA Trevor,Leslie,Jason,Roger,Adam,Darren,Timothy,Terence,Malcolm,Dennis,Benjamin,Arthur,Donald,Samuel
1230 DATA Nicholas,Craig,Carl,Adrian,Harold,Wayne,Nigel,Gordon,Luke,Jamie,Ryan,Frederick,Shaun,Norman,Francis
1240 DATA Duncan,Ernest,Scott,Stanley,Marc,Patrick,Rodney,Sean,Harry,Henry,Frank,Nathan,Alexander,Jack,Douglas
1250 DATA Stewart,Bernard,Jeffrey,Howard,Edwin,Allan,Garry,Albert,Gareth,Russell,Lawrence,Liam,Dean,Martyn
1260 DATA Graeme,Ralph,Jeremy,Vincent,Karl,Joshua,Clifford,Justin,Shane,Tom,Sam,Victor,Cyril,Bryan,Oliver,Hugh
1270 DATA Ben,Aaron,Fred,Jordan,Terry,Barrie,Ricky,Christian,Phillip,Gerald,Carly,Alfred,Denis,Leonard,Desmond
1280 DATA Cedric,Reginald,Clive,Sidney,Laurence,Grant,Arron,Lewis,Gregory,Glen,Callum,Danny,Owen,Wilfred,Alex
1290 DATA Louis,Marcus,Miles,Vivien,Gavin,Kieran,Jon,Damien,Ivan,Dale,Declan,Melvyn,Dominic,Warren,Walter
1300 DATA Jeffery,Julian,Mervyn,Noel,Ashley,Damian,Ross,Antony,Alec,Micheal,Iain,Herbert,Ivor,Vernon,Joel
1310 DATA Bruce,Maurice,Godfrey,Kenny,Angus,Gilbert,Neale,Neville,Alastair,Archibald,Mathew,Edgar,Mitchell
1320 DATA Gerard,Jo,Tony,Calum,Arnold,Errol,Alistair,Glenn,Derrick,Lloyd,Damon,Allen,Kelvin,Steve,Aidan,Dalton
1330 DATA Darran,Lionel,Nick,Fredrick,Alain,Glynn,Horace,Mike,Clarence,Abbi,Pete,Lancelot,Harvey,Stephan,Sammy
1340 DATA Freddie,Mohamed,Allister,Daren,Percy,Jacob,Jimmy,Cornelius,Xavier,Justine,Derick,Greg,Darron,Nicolas
1350 DATA Alfie,Marvin,Christofer,Terrence,Carlos,Bill,Dave,Andre,Winston,Emma,Edmund,Erwin,Austin,Derren,Amos
1360 DATA Clint,Billy,Kieron,Loos
1370 DATA Abdul,Brent,Byron,Calvin,Cecil,Connor,Duane,Geoff,Gerrald,Issac,Joe,Kirk,Lester,Rob,Robin,Roy,Rueben
1380 DATA Saul,Simeon,Toby,Tristan,Tyrone,Barrington,Chad,Ethan,Frankland,Frazer,Garfield,Gerry,Giles,Huw
1390 DATA Kristoffer,Morris,Rex,Rory,Stefan,Tobias,Ritson,Barnaby,Don,Josh,Les,Louie,Max,Richie,Vincente
1400 DATA Agmondisham,Angelo,Bertie,Bertram,Claude,Cuthbert,Elijah,Enoch,Humphrey,Isaac,Hephziban,Aquila,Bob
1410 DATA Seth,Moses,Denys,Willie,Jardine,Lennard,Azuban,Arthur,Roland,Hubert,William,Rowland,Edwards,Elliot
1420 DATA Jim,Hector,Bernard,Bertrand,Oscar,Geoffry,Horatio,Hughe,Cristopher,Charlie
1430 DATA Ambrose,Archie,Basil,Dudley,Emerson,Franklin,Friend,Heathcliffe,Grenville,Harrison,Ivanhoe,Johnson
1440 DATA Murray,Roderick,Ronnie,Smith,Wilson,Talfryn,Irwin,Roman,Elliott,Hoyland,Addison,Turton
1450 DATA *
1460 :
1470 DATA F
1480 DATA Margaret,Susan,Patricia,Mary,Christine,Elizabeth,Jean,Barbara,Linda,Karen,Julie,Sarah,Ann,Jane,Helen,Kathleen
1490 DATA Maureen,Joan,Jennifer,Nicola,Carol,Joyce,Dorothy,Anne,Judith,Alison,Janet,Joanne,Sheila,Wendy,Rebecca,Emma
1500 DATA Catherine,Gillian,Jacqueline,Amanda,Valerie,Pauline,Pamela,Lisa,Deborah,Victoria,Elaine,Doreen,Michelle
1510 DATA Laura,Sandra,Heather,Rachel,Sharon,Ruth,Brenda,Louise,Eileen,Audrey,Lesley,Sylvia,Angela,Samantha,Claire
1520 DATA Irene,June,Sally,Marjorie,Tracy,Amy,Maria,Shirley,Diane,Donna,Carole,Paula,Hannah,Fiona,Rosemary,Rita
1530 DATA Natalie,Hazel,Dawn,Kathryn,Beryl,Kerry,Olive,Betty,Denise,Lorraine,Caroline,Gemma,Joanna,Marion,Lynne
1540 DATA Melanie,Jill,Hilda,Lynda,Leanne,Stephanie,Florence,Sophie,Charlotte,Jessica,Yvonne,Doris,Julia,Josephine
1550 DATA Jayne,Edith,Lucy,Marie,Cheryl,Katie,Avis,Clare,Mavis,Kelly,Jeanette,Carolyn,Andrea,Winifred,Tracey,Lynn
1560 DATA Emily,Elsie,Katherine,Sara,Christina,Anna,Frances,Beverley,Zoe,Diana,Janice,Jenny,Teresa,Freda,Nora,Kate
1570 DATA Lorna,Alice,Annie,Jade,Kirsty,Stacey,Tina,Veronica,Norma,Debra,Gwendoline,Danielle,Agnes,Kim,Hayley,Ida
1580 DATA Bridget,Phyllis,Joy,Stella,Grace,Rachael,Vera,Iris,Jodie,Tanya,Eleanor,Ellen,Penelope,Marilyn,Alexandra
1590 DATA Violet,Juliet,Jillian,Jemma,Lindsey,Daphne,Nicole,Katrina,Lily,Gail,Myra,Megan,Ada,Rose,Enid,Lindsay
1600 DATA Dianne,Gladys,Janine,Mandy,Faye,Evelyn,Esther,Theresa,Thelma,Cynthia,Edna,Aileen,Vanessa,Avril,Annette
1610 DATA Gwyneth,Marian,Naomi,Nancy,Muriel,Mildred,Allison,Marlene,Olivia,Olga,Kay,Philippa,Lilian,Rosalind
1620 DATA Georgina,Toni,Lillian,Lauren,Eva,Keeley,Lyndsay,Chloe,Ruby,Rhiannon,Monica,Miriam,Abigail,Michele,Nadine
1630 DATA Bethany,Sonia,Melissa,Marina,Mollie,Rosie,Jenna,Karina,Anita,Zara,Debbie,Rosemarie,Cathryn,Carla,Jenni
1640 DATA Rikki,Lydia,Eunice,Moira,Constance,Marianne,Glynis,Cassie,Suzanne,Tiffany,Anthea,Kerrie,Vikki,Greta
1650 DATA Helena,Priscilla,Kayleigh,Mabel,Roberta,Jennie,Rosalyn,Charlene,Francesca,Gina,Jodi,Nichola,Honor,Rosina
1660 DATA Vivienne,Judy,Rebekah,Isobel,Geraldine,Beatrice,Sadie,Cordelia,Gloria,Erica,Bessie,Hope,Jasmine,Chantelle
1670 DATA Flora,Marcia,Rosaleen,Marguerite,Martha,Williamina,Eveline,Kristina,Katharine,Maxine,Elisabeth,Heidi
1680 DATA Juliette,Nina,Glenys,Jocelyn,Harriet,Deirdre,Maisie,Sybil,Nellie,Selina,Amber,Michaela,Carrie,Jeannette
1690 DATA Philomena,Laureen,Isabel,Tim,Monika,Belinda,Terri,Florance,Kimberley,Adele,Loraine,Sonja,Ingrid,May,Jackie
1700 DATA Janette,Gwendolyn,Christy,Una,Eliza,Kaylea,Vicky,Ivy,Alyson,Robyn,Tara,Kara,Rhoda,Kirstie,Celia,Molly
1710 DATA Madeline,Jaclyn,Holly,Rosalie,Noreen,Colleen,Beth,Jessie,Matilda,Lyn,Coral,Beverly,Jeannie,Myrna,Chelsie
1720 DATA Serena,Zelda,Jannette,Madeleine,Dionne,Margarette,Roslyn,Marelyn,Cassandra,Lea,Juanita,Haydn,Susannah
1730 DATA Allyson,Stephania,Kristie,Antonella,Colette,M,Berenice,Donnella,Ursula,G,Hollie,Rosamond,Jolene,Antonia
1740 DATA Yasmin,Brigette,Morag,Roseanne,Paulette,Rosaline,Kathlyn,Crystal,Cara,Kylee,Ethelinda,Adela,Cathrine
1750 DATA Sabina,Rhona,Poppy,Teri,Gertrude,Queenie,Corrine,Angelique,Peppa,Roxann,Annabel,Rosamund,Clair,Melody
1760 DATA Vicki,Helga,Ellie,Magdalena,Dinah,Kaylee,Gabrielle,Alissa,Natasha,Meg,Eve,Amelia,Bryony,Vanda,Katy,Clara
1770 DATA Siobhan,Jaqualine,Kimberly,Andrena,Nikki,Bette,Roxanne,Suzie,Ethel,Rozanne,Cherry,Sheenagh,Margot,Angie
1780 DATA Liselotte,Susanna,Bronwen,Aimee,Tessa,Sydney,Chrystal,Rosalee,Vickie,Roseanna,Delia,Johanna,Coreen,Lucille
1790 DATA Brigid,Katarina,Becky,Julianne,Tracie,Claudia,Maggie,Aleshia,Ella,Suzy,Gwennoth,Suzanna,Ava,Lana,Andreena
1800 DATA Rebecka,Kathrine,Pollyanna,Cathleen,Nicholla,Bertha,Pamala,Sheelagh,Winafrid,Wilhelmina,Stephenie,Winefride
1810 DATA Adrienne,Bettie,Camilla,Roslyne,Alisha,Louisa,Virginia,Sylvie,Peggy,Anastasia,Deb,Gwenneth,Winnie,Bessy
1820 DATA Ashlea,Caitlin,Chelcea,Cherie,Clarissa,Collette,Deirdre,Dianna,Effie,Erika,Fenella,Georgia,Gill,Glenda
1830 DATA Inmaculada,Monica,Jacinth,Jamielee,Jeana,Madge,Margo,Millicent,Nadia,Niki,Regina,Robina,Ruebina,Serendipity
1840 DATA Stefenie,Suelene,Suzette,Svetlana,Trudy,Pearl,Ana,Berverlie,Birgitta,Catriona,Claudine,Deanna,Deidre,Dolores
1850 DATA Dora,Elfrieda,Estelle,Gaynor,Isla,Katryna,Linsay,Linzi,Linzie,Lola,Lora,Lynzee,Marylyn,Tammy,Tamsin,Trudi
1860 DATA Auriel,Auriol,Beverlie,Dilys,Lizzie,Lois,Marrissa,Paige,Tyra,Xylia
1870 DATA Adelaide,Alma,Amily,Angelina,Betsy,Cecily,Christiana,Cissie,Clarice,Clarinda,Connie,Dorice,Dorothea,Elfreda
1880 DATA Faith,Fannie,Fanny,Florrie,Ina,Isabell,Isabella,Lillie,Lilly,Mathilda,Maud,Minnie,Mona,Norah,Pattie,Phoebe
1890 DATA Sophia,Tace,Thora,Winifred,Nena,Hephzibah,Zipporah,Blanche,Christania,Emmeline,Hettie,Bella,Alexandria
1900 DATA Susanne,Agatha,Illian,Hetty,Jannie,Iveagh,Annis,Isabelle,Eveagh,Kitty,Maude,Cecilia,Susie,Jeanne,Nancie
1910 DATA Henrietta,Lottie,Rosanna,Rosetta,Polly,Lena,Daisy,Lavinia,Esme,Esmee
1920 DATA Adelina,Adelle,Averil,Bernadette,Clementine,Corinne,Donaldina,Eeanor,Ena,Eugenie,Evera,Flory,Glynnis,Gwen
1930 DATA Swynne,Honora,Lilias,Lorena,Maralyn,Margery,Marguerete,Marjory,Maura,Meggie,Phillis,Robertina,Rosa
1940 DATA Shelagh,Therese,Velma,Vivenne,Wilhemina,Cicely,Gwynne,Eily
1950 DATA *
1960 DATA *
1970 :
1980
1990 A$=address$
2000 RESTORE +0
2010 READ B$:REPEAT
2020 A$=FNswap(A$,"s "+B$,"'s "+B$)
2030 READ B$
2040 UNTILB$="*"
2050 DATA B,C,G,L,S,T,Y,*
2060 A$=FNswap(A$,"Cros's","Cross")
2070 A$=FNswap(A$,"''","'")
2080 A$=FNswap(A$,",,",",")
2090 A$=FNswap(A$,"''","'")
2100 A$=FNswap(A$,"Arm's","Arms")
2110 A$=FNswap(A$,"Say's","Says")
2120 A$=FNswap(A$,"Link's","Links")
2130 A$=FNswap(A$,"Bobbie's","Bobbies")
2140 address$=A$
2150 :
2160
2170 walk$=FNlookup(13,pd$+":"+poll$,20)
2180 :
2190 ENDPROC
2200 :
2210 DEFPROCmissing:LOCAL A$,P%:info$()=""
2220 FOR P%=VALlastpoll$+1 TO VALpoll$-1:info$(13)=pd$+":"+STR$P%:PROCcsv_wr(out%,info$()):NEXT P%
2230 ENDPROC
2240 :
2250 DEFPROCentry
2260 IF name$="":ENDPROC
2270
2280 info$()=""
2290 info$(0) ="" :
2300 info$(1) =surname$ :
2310 info$(2) =name$ :
2320 info$(3) ="" :
2330 info$(4) ="" :
2340 info$(5) =sex$ :
2350 info$(6) ="" :
2360 info$(7) =address$ :
2370 IFmax%>07:info$(8) ="" :
2380 IFmax%>08:info$(9) ="" :
2390 IFmax%>09:info$(10)="" :
2400 IFmax%>10:info$(11)="" :
2410 IFmax%>11:info$(12)="" :
2420 IFmax%>12:info$(13)=pd$+":"+poll$ :
2430 IFmax%>13:info$(14)=parish$ :
2440 IFmax%>14:info$(15)="Whitby" :
2450 IFmax%>15:info$(16)="" :
2460 IFmax%>16:info$(17)="" :
2470 IFmax%>17:info$(18)="" :
2480 IFmax%>18:info$(19)="" :
2490 IFmax%>19:info$(20)="" :
2500 IFmax%>20:info$(21)=walk$ :
2510 :
2520 lastpoll$=poll$
2530 IF verbose%:FOR A%=0 TO max%:PRINTTAB(36,A%+2);LEFT$(info$(A%),56);SPC(56-LENLEFT$(info$(A%),56));:NEXT
2540 PROCcsv_wr(out%,info$())
2550 ENDPROC
2560 :
2570 DEFFNadd(addr$,yard$,street$)
2580 IF INSTR(addr$,yard$+" "):IF INSTR(addr$,street$)=0:=addr$+", "+street$
2590 IF RIGHT$(addr$,LENyard$)=yard$:IF INSTR(addr$,street$)=0:=addr$+", "+street$
2600 =addr$
2610 :
2620 DEFFNswap(in$,match$,swap$)
2630 A%=INSTR(in$,match$):IF A%:in$=LEFT$(in$,A%-1)+swap$+MID$(in$,A%+LENmatch$)
2640 =in$
2650 :
2660 DEFFNd0(A%,N%)=RIGHT$("00000000"+STR$A%,N%)
2670 DEFFNuc(A$):LOCAL B$:IFA$="":=""
2680 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
2690 DEFFNlc(A$):LOCAL B$:IFA$="":=""
2700 REPEATB$=B$+CHR$(ASCA$OR((A$<"_")AND&20)):A$=MID$(A$,2):UNTILA$="":=B$
2710 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
2720 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
2730 =A$
2740 :
2750 DEFPROCClose_All
2760 lookup%=lookup%:IFlookup%:A%=lookup%:lookup%=0:CLOSE#A%
2770 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
2780 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
2790 ENDPROC
2800 :
2810 DEFFNlookup(M%,M$,R%)
2820
2830 IF lookup%=0:=""
2840 looklast%=PTR#lookup%
2850 REPEAT
2860 IF EOF#lookup%:PTR#lookup%=0:PROCcsv_rd(lookup%,addr$())
2870 PROCcsv_rd(lookup%,addr$()):match%=(addr$(M%)=M$)
2880 UNTIL match% OR PTR#lookup%=looklast%
2890 IF match%:=addr$(R%)
2900
2910 =""
2920 :
2930 DEFPROCcsv_rd(i%,array$())
2940 LOCAL n%:n%=0:array$()="":A$=GET$#i%:IFA$="":A$=GET$#i%
2950 A$=A$+","
2960 REPEAT
2970 IF LEFT$(A$,2)="=""":A$=MID$(A$,2)
2980 IF LEFT$(A$,1)="""" THEN
2990 A%=INSTR(A$,""",",2)+1:array$(n%)=MID$(A$,2,A%-3)
3000 ELSE
3010 A%=INSTR(A$,","):array$(n%)=LEFT$(A$,A%-1)
3020 ENDIF
3030 A$=MID$(A$,A%+1):n%=n%+1
3040 UNTILA$=""
3050 ENDPROC
3060 :
3070 DEFPROCcsv_wr(o%,array$())
3080 LOCAL n%,q%:n%=DIM(array$(),1)
3090 FOR A%=0 TO n%:A$=array$(A%)
3100 q%=INSTR(A$,",")
3110 IF q%=0:q%=(ASCA$=48)AND(INSTR(A$,"/")=0) :
3120 IF q%=0:IFVALLEFT$(A$,1):q%=INSTR(A$,"E") :
3130 IF q%=0:q%=LENSTR$VALA$>8 :
3140 IF q%=0:IFVALA$:q%=INSTR(A$,"/")AND(ASCA$<>48):
3150 IF q%=0:q%=LEFT$(A$,1)="-" :
3160 IF q%=0:q%=MID$(A$,3,1)=" "ANDMID$(A$,7,1)=" ":
3170 IF q%:A$=""""+A$+"""":IFINSTR(A$,",")=0:A$="="+A$
3180 BPUT#o%,A$;:IF A%<>n%:BPUT#o%,",";
3190 NEXT A%:BPUT#o%,""
3200 ENDPROC