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