Home » Archimedes archive » Acorn User » AU 1998-13 (Christmas).adf » Regulars » StarInfo/Granger/Carbon/!CarbonDem/decoPROCS
StarInfo/Granger/Carbon/!CarbonDem/decoPROCS
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1998-13 (Christmas).adf » Regulars |
Filename: | StarInfo/Granger/Carbon/!CarbonDem/decoPROCS |
Read OK: | ✔ |
File size: | 33DB bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM Decode 20REM LEN A.Granger 98 30END 40DEFPROCdecode_control(n$,display) 50PROCclear_vars:n$=FNcase(n$,1):PROCmetsearch 60poly=FNfindtext("POLY"):cis=FNfindtext("CIS") 70trans=FNfindtext("TRANS"):cyclic=FNfindtext("CYCLO") 80n$=FNremovespaces(n$):pos=LENn$:fn=FNfunctional_group:pos-=LENfn$(fn,0) 90IFfn=0 THENerror$+="N" 100PROCextrafnstuff 110IFfnposs(1)=0 THENfnposs(1)=FNattr(fn,6) 120length=FNattr(fn,3):benz=FNattr(fn,2) 130IFFNattr(fn,0) THEN length=FNchainlength:pos-=LENlength$(length) 140IFlength=0 THENerror$+="L" 150IFlength THEN 160PROCcleanfnposs 170IFbenz THENcyclic=1 180IFFNattr(fn,2)=0 THENPROCifphenyl 190IFpos>0 THENPROCbreak_down_beginning 200IFester THENlength2=length:length=ester+length+1 210PROCsortbonds 220PROCclean_up_data 230pos$=FNpositions 240PROCassign_positions 250IFfnposs(2) THENPROCsortpos 260prev$=FNputbacktogether(0):prevs$=FNstructural(1,length) 270IFphenyl THENPROCphenolize 280IFmet THENPROCifmet 290IFester THENPROCester 300IFpoly THENPROCparrot 310IFcis OR trans THENPROCcistrans 320PROCerrorreport(error$) 330IFfatal=0 ANDdisplay THEN 340PROCcarbon_cords 350PROCplotcarbs 360IFlength>1 THENPROCdrawbonds 370PROCsticks 380PROCextragraphics 390pass=1 400s$=FNstructural(1,length) 410IFpoly THENs$="-[-"+prevs$+"-]n-" 420name$=FNputbacktogether(1) 430IFdisplay<2 THEN 440IFFNattr(fn,5) THENpst$=FNprimary ELSEpst$="" 450PROCmemprint(mn_x+10,mn_y-30,8,name$+" "+pst$):PROCmemprint(mn_x+10,mn_y-10,8,s$):mn_y-=10 460PROCtitle(drawwin%,name$) 470ENDIF 480ENDIF 490ENDIF 500IFerror$>"" THENPROCerrorreport(error$):pass=0 510IFdisplay=0 THENname$=FNputbacktogether(1) 520PROCclosewin(drawwin%) 530IFerror$="" ANDdisplay THENPROCopenwin(drawwin%) 540ENDPROC 550DEFFNcase(t$,what) 560b$="" 570FORc1=1 TOLENt$ 580m$=MID$(t$,c1,1) 590c=ASC(m$) 600IFwhat=1 ANDc>96 ANDc<123 THENc=c-32 610IF(what=2 OR what=3) ANDc>64 ANDc<91 THENc=c+32 620IFwhat=2 ANDc>96 ANDc<123 ANDc1=1 THENc=c-32 630IFc>0 THENb$=b$+CHR$(c) 640NEXTc1 650=b$ 660DEFFNfunctional_group 670match=0:best=0 680FORc2=1 TOnp_fns 690len=LENfn$(c2,0) 700IFfn$(c2,0)=RIGHT$(n$,len) ANDlen ANDlen>best THENbest=len:match=c2 710NEXTc2 720=match 730DEFPROCextrafnstuff 740best=0 750FORc3=1 TOnp_mul 760len=LENmultiple$(c3) 770IFlen ANDpos-len+1>0 ANDmultiple$(c3)=MID$(n$,pos-len+1,len) ANDlen>best THENmultbond=c3:best=len 780NEXTc3 790IFmultbond THENpos-=LENmultiple$(multbond) 800num$="":c4=pos:curc$=MID$(n$,c4,1):type=FNletter(curc$) 810IFtype=0 THEN 820REPEAT 830IFtype=0 OR type=3 THEN num$+=curc$:lastpos=c4 840c4-=1:curc$=MID$(n$,c4,1):type=FNletter(curc$) 850UNTIL type=1 OR c4<1 860PROCstoreposs(FNreverse(num$)):pos=c4 870ENDIF 880best=0 890FORc5=1 TO10 900len=LENmore$(c5) 910IFlen>best ANDlen ANDMID$(n$,pos-len+1,len)=more$(c5) THENbest=len 920IF MID$(n$,pos-len+1,len)="YL" ANDfndetail$(fn,2)<>"YL" THEN best=0 930NEXTc5 940pos=pos-best 950ENDCASE 960ENDPROC 970DEFPROCstoreposs(t$) 980num$="":c2=1 990FORc1=1 TOLENt$ 1000m$=MID$(t$,c1,1):type=FNletter(m$) 1010IFtype=3 THEN 1020fnposs(c2)=VAL(num$):c2+=1:num$="" 1030ELSE 1040num$+=m$ 1050IFnum$="0" THENerror$+="B" 1060ENDIF 1070NEXTc1 1080fnposs(c2)=VAL(num$) 1090ENDPROC 1100DEFFNchainlength 1110best=0 1120FORc1=1 TOnp_len 1130len=LENlength$(c1) 1140IFlen ANDMID$(n$,pos-len+1,len)=length$(c1) ANDlen>best THENlength=c1:best=len 1150NEXTc1 1160=length 1170DEFFNletter(ch$) 1180chc=ASC(ch$) 1190out=-1 1200IFchc>47 ANDchc<58 THENout=0 1210IF(chc>64 ANDchc<91) OR (chc>96 ANDchc<123) THENout=1 1220IFchc=44 THENout=3 1230IFchc=45 THENout=4 1240=out 1250DEFFNreverse(text$) 1260textout$="" 1270FORc2=LENtext$ TO1 STEP -1 1280textout$+=MID$(text$,c2,1) 1290NEXTc2 1300=textout$ 1310DEFPROCbreak_down_beginning 1320bg$=LEFT$(n$,pos) 1330n=1 1340FORc1=1 TOLENbg$ 1350m$=MID$(bg$,c1,1):type=FNletter(m$) 1360IFtype=0 THEN 1370n2=1:num$="" 1380REPEAT 1390IFtype=0 THENnum$+=m$ 1400IFtype=1 OR type=3 OR c1=pos THEN 1410nums(n,n2)=VAL(num$):num$="":n2+=1 1420ENDIF 1430c1=c1+1:m$=MID$(bg$,c1,1):type=FNletter(m$) 1440UNTIL type=1 OR c1>=pos 1450nums(n,n2)=VAL(num$) 1460ENDIF 1470mult=0:best=0 1480FORc2=1 TOnp_mul 1490len=LENmultiple$(c2) 1500IFMID$(bg$,c1,len)=multiple$(c2) ANDlen ANDlen>best THENmult=c2:best=len 1510NEXTc2 1520IFmult THEN 1530details(n,0)=mult:c1+=LENmultiple$(mult) 1540ENDIF 1550side=0:best=0 1560FORc2=1 TOnp_len 1570len=LENlength$(c2) 1580IFlen ANDlen>best THEN 1590IFlength$(c2)+"YL"=MID$(bg$,c1,len+2) THENside=c2:best=len 1600IFlength$(c2)+"OXY"=MID$(bg$,c1,len+3) THENester=c2:best=len 1610ENDIF 1620NEXTc2 1630IFside THEN details(n,1)=-side:c1=c1+LENlength$(side)+2 1640IFester THENc1+=LENlength$(ester)+3 1650halo=0 1660IFside=0 ANDester=0 THEN 1670best=0 1680FORc2=1 TOnp_hal 1690len=LENhalogen$(c2,0) 1700IFlen>best ANDlen ANDhalogen$(c2,0)=MID$(bg$,c1,len) THENhalo=c2:best=len 1710NEXTc2 1720IFhalo THEN details(n,1)=halo:c1+=LENhalogen$(halo,0) 1730ENDIF 1740n+=1 1750IFhalo+side+ester THENc1=c1-1 1760IFhalo+side+ester=0 THENerror$+="U" 1770NEXTc1 1780ENDPROC 1790DEFFNremovespaces(text$) 1800out$="" 1810FORc8=1 TOLENtext$ 1820m$=MID$(text$,c8,1):type=FNletter(m$) 1830IFtype<4 ANDtype>-1 THENout$=out$+m$ 1840NEXTc8 1850=out$ 1860DEFFNremove2(text$) 1870out$="" 1880FORc8=1 TOLENtext$ 1890m$=MID$(text$,c8,1) 1900IFm$<>" " THENout$=out$+m$ 1910NEXTc8 1920=out$ 1930DEFPROCclean_up_data 1940IFcyclic ANDlength<3 THENerror$+="C" 1950FORn=1 TOnp_num 1960IFdetails(n,0)=0 THENdetails(n,0)=1 1970IFfn$(fn,0)="ONE" AND(fnposs(1)=1 OR fnposs(1)=len) THENerror$+="k" 1980IFlength<3 ANDdetails(n,1)<0 THENerror$+="D" 1990c=0 2000REPEAT 2010IF(nums(n,c)=1 OR nums(n,c)=length) ANDdetails(n,1)<0 ANDcyclic=0 THENerror$+="E" 2020IFnums(n,c)>length THENerror$+="P" 2030c+=1 2040UNTIL nums(n,c)=0 OR c=np_num 2050IFdetails(n,0)>c-1 THEN 2060IFdetails(n,1)<0 ANDcyclic=0 THENsure=2 ELSEsure=1 2070count=FNfree(sure) 2080FORc1=c TOdetails(n,0) 2090IFcount=0 THENsure+=1:count=FNfree(sure) 2100count-=1 2110nums(n,c1)=sure 2120NEXTc1 2130ENDIF 2140NEXTn 2150ENDPROC 2160DEFPROCcleanfnposs 2170FORn3=1 TOnp_num 2180IFfnposs(n3) ANDfnposs(n3)>length THENerror$+="G" 2190NEXTn3 2200ENDPROC 2210DEFPROCassign_positions 2220FORn=1 TOlength 2230FORn2=1 TOnp_bgs 2240n3=1 2250REPEAT 2260IFn=nums(n2,n3) THEN 2270IFdetails(n2,1)>0 THENPROCcarbon(n,halogen$(details(n2,1),2)) 2280IFdetails(n2,1)<0 THENPROCcarbon(n,STR$(-details(n2,1))+"#") 2290ENDIF 2300n3+=1 2310UNTIL nums(n2,n3)=0 2320NEXTn2 2330FORn2=1 TOnp_num 2340IFfnposs(n2)=n THEN 2350FORn3=0 TO1 2360IFfnbond(fn,n3)>1 THEN 2370ex$=STR$(fnbond(fn,n3))+"/" 2380FORn4=1 TOfnbond(fn,n3)-1 2390PROCcarbon(n,">") 2400NEXTn4 2410ELSE 2420ex$="" 2430ENDIF 2440IFfnbond(fn,n3) THENPROCcarbon(n,fndetail$(fn,n3)+ex$) 2450NEXTn3 2460ENDIF 2470NEXTn2 2480NEXTn 2490FORn=1 TOlength 2500FORn2=1 TO4 2510IFcarbons$(n,n2)="" THENcarbons$(n,n2)="H" 2520NEXTn2 2530NEXTn 2540ENDPROC 2550DEFPROCcarbon(cb,item$) 2560c=0 2570REPEAT 2580c+=1 2590UNTIL carbons$(cb,c)="" OR c=4 2600IFcarbons$(cb,4)>"" THENerror$=error$+"F":full=cb 2610carbons$(cb,c)=item$ 2620ENDPROC 2630DEFPROCsortbonds 2640IFFNattr(fn,4)>1 AND(multbond>length-1 ANDcyclic=0) OR (cyclic ANDmultbond>length) THENerror$+="B" 2650IFfnposs(2)=0 ANDmultbond>1 THEN 2660FORn=2 TOmultbond:bonds(n)=FNattr(fn,4) 2670fnposs(n)=n 2680NEXTn 2690ENDIF 2700IFlength>1 THEN 2710IFFNattr(fn,4)>1 THEN 2720FORn2=1 TOlength 2730FORc8=1 TOnp_bgs 2740IFfnposs(c8)=length ANDcyclic=0 THENfnposs(c8)=length-1 2750IFfnposs(c8)>length THENerror$+="B" 2760IFn2=fnposs(c8) THENbonds(n2)=FNattr(fn,4) 2770IFfnposs(c8)=0 THENc8=np_bgs 2780NEXTc8 2790NEXTn2 2800ENDIF 2810FORn2=1 TOlength 2820PROCcarbon(n2,">") 2830type=2 2840IFn2=1 THENtype=1 2850IFn2=length THENtype=3 2860IFtype=2 OR cyclic OR benz THENPROCcarbon(n2,">") 2870IFbenz THENPROCcarbon(n2,">") 2880IFbonds(n2)>1 THEN 2890FORc3=2 TObonds(n2) 2900next=0 2910IFn2<length THENnext=n2+1 2920IFn2=length ANDcyclic THENnext=1 2930PROCcarbon(n2,">") 2940IFnext THENPROCcarbon(next,">") 2950NEXTc3 2960ENDIF 2970NEXTn2 2980ENDIF 2990ENDPROC 3000DEFFNused(cbn) 3010used=0 3020FORc1=1 TO4 3030IFcarbons$(cbn,c1)<>">" THENused+=1 3040NEXTc1 3050=used 3060DEFFNstructural(start,finish) 3070stru$="" 3080FORn2=start TOfinish 3090IFbonds(n2-1)=2 ANDn2-1 THENstru$+="=" 3100stru$+=cs$(n2):many=FNhowmany(n2,"H"):carb$="H" 3110IFmany THENstru$+="H":PROCcountersystem 3120FORc3=1 TO4 3130carb$=carbons$(n2,c3) 3140IFINSTR(carb$,"*") THENMID$(carb$,INSTR(carb$,"*"),2)=" ":carb$=FNremove2(carb$) 3150IFcarb$<>">" ANDcarb$<>"H" ANDVAL(carb$)=0 THEN 3160IFINSTR(carb$,"/") THENMID$(carb$,INSTR(carb$,"/")-1,2)=" ":carb$=FNremove2(carb$) 3170stru$+=carb$ 3180PROCcountersystem 3190ENDIF 3200NEXTc3 3210count=0 3220lcarb$="" 3230FORc3=1 TO4 3240carb$=carbons$(n2,c3) 3250methyl=VAL(carb$) 3260IFmethyl THEN 3270IFmethyl>1 THENnotone$=STR$(methyl) ELSEnotone$="" 3280IFcount=0 THENstru$=stru$+"(C"+notone$+"H"+STR$((methyl*2)+1)+")" 3290PROCcountersystem 3300ENDIF 3310NEXTc3 3320NEXTn2 3330=stru$ 3340DEFPROCcountersystem 3350many=FNhowmany(n2,carb$) 3360IFmany>1 ANDcarb$>"" THENstru$=stru$+STR$(many):c3+=(many-1) 3370ENDPROC 3380DEFFNfindtext(text$) 3390check=INSTR(n$,text$) 3400IFcheck THENpos=pos-LENtext$:MID$(n$,check,LENtext$)=STRING$(LENtext$," ") 3410=SGN(check) 3420DEFPROCparrot 3430polypos=0 3440FORn2=1 TOlength 3450IFbonds(n2)=2 THENpolypos=n2 3460NEXTn2 3470bonds(polypos)=1 3480IFpolypos=0 THEN 3490error$+="H" 3500ELSE 3510PROCreduce(polypos) 3520FORrep=0 TO1 3530loc=FNfind(polypos+rep,">"):carbons$(polypos+rep,loc)="1/" 3540SWAP carbons$(polypos+rep,loc),carbons$(polypos+rep,2+FNfind(polypos+rep,">")) 3550NEXTrep 3560PROCshiftdata(polypos-1) 3570length=2 3580ENDIF 3590ENDPROC 3600DEFPROCreduce(polypos) 3610IFlength>polypos+1 THEN 3620where=FNfind(polypos+1,">") 3630IFlength-polypos>2 THENex$="*3" ELSEex$="" 3640carbons$(polypos+1,where)=FNstructural(polypos+2,length)+ex$ 3650IFbonds(polypos+1)>1 THENcarbons$(polypos+1,where)=carbons$(polypos+1,where)+STR$(bonds(polypos+1))+"/" 3660ENDIF 3670IFpolypos>1 THEN 3680where=FNfind(polypos,">") 3690IFpolypos>2 THENex$="*1" ELSEex$="" 3700carbons$(polypos,where)=FNstructural(1,polypos-1)+ex$ 3710IFbonds(polypos-1)>1 THENcarbons$(polypos,where)=carbons$(polypos,where)+STR$(bonds(polypos-1))+"/" 3720ENDIF 3730ENDPROC 3740DEFPROCshiftdata(shift) 3750FORn=1 TOlength 3760FORc3=1 TO4 3770carbons$(n,c3)=carbons$(n+shift,c3):bonds(n)=bonds(n+shift) 3780NEXTc3 3790NEXTn 3800ENDPROC 3810DEFPROCmetsearch 3820met=0 3830FORc8=1 TOnp_met 3840IFFNfindtext(metal$(c8,0)) ANDmetal$(c8,0)>"" THENmet=c8 3850NEXTc8 3860ENDPROC 3870DEFFNfind(n,text$) 3880pos=0 3890FORc8=1 TO4 3900IFcarbons$(n,c8)=text$ THENpos=c8 3910NEXTc8 3920=pos 3930DEFFNhowmany(n,text$) 3940many=0 3950FORc8=1 TO4 3960IFcarbons$(n,c8)=text$ THENmany+=1 3970NEXTc8 3980=many 3990DEFPROCester 4000cs$(ester+1)="O":carbons$(ester+1,3)="":carbons$(ester+1,4)="" 4010ENDPROC 4020DEFPROCphenolize 4030f=4:f=FNfind(1,"H"):carbons$(1,f)="" 4040rest$=FNstructural(1,length):length=6:cyclic=1:benz=1:fnposs()=0:fn=0:nums()=0:bonds()=0 4050carbons$()="":PROCsortbonds:PROCassign_positions:carbons$(1,4)=rest$ 4060ENDPROC 4070DEFPROCcistrans 4080polypos=0 4090FORn=1 TOlength 4100IFbonds(n)=2 THENpolypos=n 4110NEXTn 4120IFpolypos THEN 4130PROCreduce(polypos) 4140length=2 4150IFcis THEN 4160IFcarbons$(polypos,3)=carbons$(polypos+1,4) THENSWAP carbons$(polypos,3),carbons$(polypos,4) 4170ELSE 4180IFcarbons$(polypos,3)=carbons$(polypos+1,3) THENSWAP carbons$(polypos,3),carbons$(polypos,4) 4190IFcarbons$(polypos,4)=carbons$(polypos+1,4) THENSWAP carbons$(polypos,4),carbons$(polypos,3) 4200ENDIF 4210PROCshiftdata(polypos-1) 4220ELSE 4230error$+="T" 4240ENDIF 4250ENDPROC 4260DEFPROCerrorreport(err$) 4270err$=FNcase(err$,1) 4280errout$="" 4290FORn2=1 TOLENerr$ 4300FORc8=1 TOnp_err 4310IFMID$(err$,n2,1)=FNcase(errort$(c8,0),1) ANDMID$(errk$,c8,1)="0" THEN 4320asc=ASC(errort$(c8,0)) 4330IFasc>64 ANDasc<91 THENfatal=1 4340MID$(errk$,c8,1)="1" 4350errout$=errort$(c8,1) 4360IFerrort$(c8,0)="f" THENextra$=STR$(full) ELSEextra$="" 4370ENDIF 4380NEXTc8 4390NEXTn2 4400IFerrout$>"" ANDdisplay THEN 4410PROCicontext(mess%,0,LEFT$(errout$,INSTR(errout$,"#")-1)) 4420PROCicontext(mess%,1,RIGHT$(errout$,LENerrout$-INSTR(errout$,"#"))+extra$) 4430PROCopenwin(mess%) 4440ENDIF 4450ENDPROC 4460DEFFNputbacktogether(time) 4470neat$="" 4480IFester THEN 4490=FNcase(length$(ester),2)+"oxy"+FNcase(length$(length2),2)+"ane" 4500ELSE 4510IFphenyl+cis+trans+poly ANDtime THEN 4520IFphenyl THENneat$+="Phenyl"+prev$ 4530IFcis THENneat$+="Cis"+prev$ 4540IFtrans THENneat$+="Trans"+prev$ 4550IFpoly THENneat$+="Poly("+prev$+")" 4560ELSE 4570IFcyclic ANDFNattr(fn,2)=0 THENneat$+="Cyclo" 4580IFFNattr(fn,0) THENneat$+=FNcase(length$(length),2) 4590neat$+=FNcase(fndetail$(fn,2),3) 4600IFfnposs(2) ANDFNattr(fn,4)>1 THENneat$+="a" 4610pos$=FNpositions 4620IF(length>1 ANDFNattr(fn,1) AND(fndetail$(fn,0)<>"" OR FNattr(fn,4)>1)) OR (FNattr(fn,1)=0 AND(LENpos$>1 OR VAL(pos$)>1)) THENneat$+="-"+pos$+"-" 4630count=0 4640REPEAT 4650count+=1 4660UNTIL fnposs(count)=0 4670count-=1 4680IFcount>1 THENneat$+=FNcase(multiple$(count),2) 4690IFLENfn$(fn,0)>4 THENstyle=2 ELSEstyle=3 4700neat$+=FNcase(fn$(fn,0),style) 4710ENDIF 4720PROCorderinit 4730bg$="" 4740IFgroup THEN 4750IF((cis+trans+phenyl+poly) ANDtime=0) OR (poly+cis+trans+phenyl)=0 THENPROCbeginningstuff 4760ENDIF 4770IFmet THENexmetal$=FNcase(metal$(met,0),2)+" " ELSEexmetal$="" 4780=exmetal$+bg$+neat$ 4790ENDIF 4800DEFPROCorderinit 4810FORn=1 TOnp_bgs 4820det=details(n,1) 4830IFdet>0 THENorder$(n)=halogen$(det,0) 4840IFdet<0 THENorder$(n)=length$(-det)+"YL" 4850IFdet=0 THENgroup=n-1:n=np_bgs 4860NEXTn 4870FORn2=1 TOgroup 4880orderpos(n2)=n2 4890NEXTn2 4900IFgroup>1 THEN 4910FORn2=1 TOgroup 4920FORn=1 TOgroup-1 4930IFASC(order$(n))>ASC(order$(n+1)) THEN 4940SWAP order$(n),order$(n+1) 4950SWAP orderpos(n),orderpos(n+1) 4960ENDIF 4970NEXTn 4980NEXTn2 4990ENDIF 5000ENDPROC 5010DEFPROCsort 5020c3=0 5030REPEAT 5040c3+=1 5050UNTIL nums(ref,c3)=0 5060many=c3-1 5070FORc3=1 TOmany 5080FORc4=1 TOmany-1 5090IFnums(ref,c4)>nums(ref,c4+1) THENSWAP nums(ref,c4),nums(ref,c4+1) 5100NEXTc4 5110NEXTc3 5120ENDPROC 5130DEFPROCbeginningstuff 5140bg$="" 5150FORn=1 TOgroup 5160ref=orderpos(n):det=details(ref,1) 5170IFnums(ref,2) THENPROCsort 5180c3=1 5190pos2$="" 5200REPEAT 5210pos2$+=STR$(nums(ref,c3))+"," 5220c3+=1 5230UNTIL nums(ref,c3)=0 5240bg$=bg$+LEFT$(pos2$,LENpos2$-1)+"-" 5250IFc3-1<=np_mul THENbg$=bg$+FNcase(multiple$(c3-1),2) 5260IFdet>0 THENbg$=bg$+FNcase(halogen$(det,0),2) ELSEbg$=bg$+FNcase(length$(-det)+"YL",2) 5270IFn<group THENbg$=bg$+"-" 5280NEXTn 5290ENDPROC 5300DEFFNbrack(t$) 5310t2$="" 5320FORc4=1 TOLENt$ 5330m$=MID$(t$,c4,1) 5340IFm$<>"(" ANDm$<>")" THENt2$+=m$ 5350NEXTc4 5360=t2$ 5370DEFPROCsortpos 5380c1=0 5390REPEAT 5400c1+=1 5410UNTIL fnposs(c1)=0 5420many=c1-1 5430FORc1=1 TOmany 5440FORc2=1 TOmany-1 5450IFfnposs(c2)>fnposs(c2+1) THENSWAP fnposs(c2),fnposs(c2+1) 5460NEXTc2 5470NEXTc1 5480ENDPROC 5490DEFFNpositions 5500pos$="":c1=1 5510REPEAT 5520pos$=pos$+STR$(fnposs(c1))+",":c1+=1 5530UNTIL fnposs(c1)=0 5540=LEFT$(pos$,LENpos$-1) 5550DEFPROCifmet 5560IFmet THEN:found=FNfind(fnposs(1),"O-"): carbons$(fnposs(1),found)=carbons$(fnposs(1),found)+metal$(met,1) 5570ENDPROC 5580DEFPROCifphenyl 5590IFFNfindtext("PHENYL") THENphenyl=1:n$=FNremovespaces(n$) 5600ENDPROC 5610DEFFNfree(carb) 5620free=0 5630FORc4=1 TO4 5640IFcarbons$(carb,c4)="" THENfree+=1 5650NEXTc4 5660=free 5670DEFFNprimary 5680prim=0:where=fnposs(1) 5690IFcyclic THENprim+=2 5700IFcyclic=0 AND(where=length OR where=1) THENprim+=1 ELSEprim+=2 5710FORn=1 TO4 5720IFINSTR(carbons$(where,n),"#") THENprim+=1 5730NEXTn 5740prim$="(Primary)" 5750IFprim=2 THENprim$="(Secondary)" 5760IFprim=3 THENprim$="(Tertiary)" 5770=prim$ 5780DEFFNattr(fn,bit) 5790IFbit<3 THEN=attr(fn)AND(2^bit) 5800IFbit=3 THEN=(attr(fn)DIV8)AND31 5810IFbit=4 THEN=(attr(fn)DIV256)AND7 5820IFbit=5 THEN=(attr(fn)DIV2048)AND1 5830IFbit=6 THEN=(attr(fn)DIV4096)AND7 5840DEFPROCdemo 5850R=RND(np_dem) 5860c=0 5870f=OPENIN("<Carbon$Dir>.demo") 5880REPEAT:c+=1:A$=GET$#f:UNTILR=c OREOF#f 5890CLOSE#f 5900PROCdecode_control(A$,1) 5910TIME=0 5920ENDPROC
� Decode � � A.Granger 98 � ( ��decode_control(n$,display) 2)�clear_vars:n$=�case(n$,1):�metsearch </poly=�findtext("POLY"):cis=�findtext("CIS") F6trans=�findtext("TRANS"):cyclic=�findtext("CYCLO") PEn$=�removespaces(n$):pos=�n$:fn=�functional_group:pos-=�fn$(fn,0) Z�fn=0 �error$+="N" d�extrafnstuff n'�fnposs(1)=0 �fnposs(1)=�attr(fn,6) x'length=�attr(fn,3):benz=�attr(fn,2) �<�attr(fn,0) � length=�chainlength:pos-=�length$(length) ��length=0 �error$+="L" � �length � ��cleanfnposs ��benz �cyclic=1 ��attr(fn,2)=0 ��ifphenyl �!�pos>0 ��break_down_beginning �0�ester �length2=length:length=ester+length+1 ��sortbonds ��clean_up_data �pos$=�positions ��assign_positions ��fnposs(2) ��sortpos :prev$=�putbacktogether(0):prevs$=�structural(1,length) �phenyl ��phenolize �met ��ifmet "�ester ��ester ,�poly ��parrot 6�cis � trans ��cistrans @�errorreport(error$) J�fatal=0 �display � T�carbon_cords ^�plotcarbs h�length>1 ��drawbonds r�sticks |�extragraphics � pass=1 �s$=�structural(1,length) �!�poly �s$="-[-"+prevs$+"-]n-" �name$=�putbacktogether(1) ��display<2 � �(�attr(fn,5) �pst$=�primary �pst$="" �X�memprint(mn_x+10,mn_y-30,8,name$+" "+pst$):�memprint(mn_x+10,mn_y-10,8,s$):mn_y-=10 ��title(drawwin%,name$) �� �� �� �+�error$>"" ��errorreport(error$):pass=0 �)�display=0 �name$=�putbacktogether(1) �closewin(drawwin%) +�error$="" �display ��openwin(drawwin%) � &ݤcase(t$,what) 0 b$="" :�c1=1 ��t$ Dm$=�t$,c1,1) Nc=�(m$) X �what=1 �c>96 �c<123 �c=c-32 b*�(what=2 � what=3) �c>64 �c<91 �c=c+32 l&�what=2 �c>96 �c<123 �c1=1 �c=c-32 v�c>0 �b$=b$+�(c) ��c1 �=b$ �ݤfunctional_group �match=0:best=0 ��c2=1 �np_fns �len=�fn$(c2,0) �9�fn$(c2,0)=�n$,len) �len �len>best �best=len:match=c2 ��c2 � =match ���extrafnstuff � best=0 ��c3=1 �np_mul �len=�multiple$(c3) W�len �pos-len+1>0 �multiple$(c3)=�n$,pos-len+1,len) �len>best �multbond=c3:best=len �c3 (�multbond �pos-=�multiple$(multbond) 6num$="":c4=pos:curc$=�n$,c4,1):type=�letter(curc$) * �type=0 � 4� >-�type=0 � type=3 � num$+=curc$:lastpos=c4 H-c4-=1:curc$=�n$,c4,1):type=�letter(curc$) R� type=1 � c4<1 \%�storeposs(�reverse(num$)):pos=c4 f� p best=0 z �c5=1 �10 �len=�more$(c5) �:�len>best �len ��n$,pos-len+1,len)=more$(c5) �best=len �=� �n$,pos-len+1,len)="YL" �fndetail$(fn,2)<>"YL" � best=0 ��c5 �pos=pos-best �� �� ���storeposs(t$) �num$="":c2=1 ��c1=1 ��t$ �!m$=�t$,c1,1):type=�letter(m$) � �type=3 � �$fnposs(c2)=�(num$):c2+=1:num$="" � num$+=m$ �num$="0" �error$+="B" $� .�c1 8fnposs(c2)=�(num$) B� Lݤchainlength V best=0 `�c1=1 �np_len jlen=�length$(c1) tF�len ��n$,pos-len+1,len)=length$(c1) �len>best �length=c1:best=len ~�c1 �=length �ݤletter(ch$) �chc=�(ch$) � out=-1 ��chc>47 �chc<58 �out=0 �0�(chc>64 �chc<91) � (chc>96 �chc<123) �out=1 ��chc=44 �out=3 ��chc=45 �out=4 �=out �ݤreverse(text$) �textout$="" ��c2=�text$ �1 � -1 textout$+=�text$,c2,1) �c2 =textout$ ��break_down_beginning (bg$=�n$,pos) 2n=1 <�c1=1 ��bg$ F"m$=�bg$,c1,1):type=�letter(m$) P �type=0 � Zn2=1:num$="" d� n�type=0 �num$+=m$ x�type=1 � type=3 � c1=pos � �$nums(n,n2)=�(num$):num$="":n2+=1 �� �*c1=c1+1:m$=�bg$,c1,1):type=�letter(m$) �� type=1 � c1>=pos �nums(n,n2)=�(num$) �� �mult=0:best=0 ��c2=1 �np_mul �len=�multiple$(c2) �@�bg$,c1,len)=multiple$(c2) �len �len>best �mult=c2:best=len ��c2 ��mult � �*details(n,0)=mult:c1+=�multiple$(mult) � side=0:best=0 �c2=1 �np_len "len=�length$(c2) ,�len �len>best � 66�length$(c2)+"YL"=�bg$,c1,len+2) �side=c2:best=len @8�length$(c2)+"OXY"=�bg$,c1,len+3) �ester=c2:best=len J� T�c2 ^5�side � details(n,1)=-side:c1=c1+�length$(side)+2 h!�ester �c1+=�length$(ester)+3 r halo=0 |�side=0 �ester=0 � � best=0 ��c2=1 �np_hal �len=�halogen$(c2,0) �A�len>best �len �halogen$(c2,0)=�bg$,c1,len) �halo=c2:best=len ��c2 �3�halo � details(n,1)=halo:c1+=�halogen$(halo,0) �� �n+=1 ��halo+side+ester �c1=c1-1 �#�halo+side+ester=0 �error$+="U" ��c1 �� �ݤremovespaces(text$) out$="" �c8=1 ��text$ $m$=�text$,c8,1):type=�letter(m$) &"�type<4 �type>-1 �out$=out$+m$ 0�c8 : =out$ Dݤremove2(text$) Nout$="" X�c8=1 ��text$ bm$=�text$,c8,1) l�m$<>" " �out$=out$+m$ v�c8 � =out$ ���clean_up_data �"�cyclic �length<3 �error$+="C" ��n=1 �np_num �#�details(n,0)=0 �details(n,0)=1 �@�fn$(fn,0)="ONE" �(fnposs(1)=1 � fnposs(1)=len) �error$+="k" �*�length<3 �details(n,1)<0 �error$+="D" �c=0 �� �L�(nums(n,c)=1 � nums(n,c)=length) �details(n,1)<0 �cyclic=0 �error$+="E" �"�nums(n,c)>length �error$+="P" �c+=1 �� nums(n,c)=0 � c=np_num �details(n,0)>c-1 � -�details(n,1)<0 �cyclic=0 �sure=2 �sure=1 count=�free(sure) �c1=c �details(n,0) *'�count=0 �sure+=1:count=�free(sure) 4count-=1 >nums(n,c1)=sure H�c1 R� \�n f� p��cleanfnposs z�n3=1 �np_num �/�fnposs(n3) �fnposs(n3)>length �error$+="G" ��n3 �� ���assign_positions ��n=1 �length ��n2=1 �np_bgs �n3=1 �� ��n=nums(n2,n3) � �:�details(n2,1)>0 ��carbon(n,halogen$(details(n2,1),2)) �6�details(n2,1)<0 ��carbon(n,�(-details(n2,1))+"#") �� � n3+=1 � nums(n2,n3)=0 �n2 �n2=1 �np_num $�fnposs(n2)=n � .�n3=0 �1 8�fnbond(fn,n3)>1 � Bex$=�(fnbond(fn,n3))+"/" L�n4=1 �fnbond(fn,n3)-1 V�carbon(n,">") `�n4 j� t ex$="" ~� �3�fnbond(fn,n3) ��carbon(n,fndetail$(fn,n3)+ex$) ��n3 �� ��n2 ��n ��n=1 �length ��n2=1 �4 �*�carbons$(n,n2)="" �carbons$(n,n2)="H" ��n2 ��n �� ���carbon(cb,item$) c=0 � c+=1 � carbons$(cb,c)="" � c=4 (1�carbons$(cb,4)>"" �error$=error$+"F":full=cb 2carbons$(cb,c)=item$ <� F��sortbonds PZ�attr(fn,4)>1 �(multbond>length-1 �cyclic=0) � (cyclic �multbond>length) �error$+="B" Z�fnposs(2)=0 �multbond>1 � d'�n=2 �multbond:bonds(n)=�attr(fn,4) nfnposs(n)=n x�n �� ��length>1 � ��attr(fn,4)>1 � ��n2=1 �length ��c8=1 �np_bgs �5�fnposs(c8)=length �cyclic=0 �fnposs(c8)=length-1 �#�fnposs(c8)>length �error$+="B" �)�n2=fnposs(c8) �bonds(n2)=�attr(fn,4) ��fnposs(c8)=0 �c8=np_bgs ��c8 ��n2 �� ��n2=1 �length �carbon(n2,">") type=2 �n2=1 �type=1 "�n2=length �type=3 ,,�type=2 � cyclic � benz ��carbon(n2,">") 6�benz ��carbon(n2,">") @�bonds(n2)>1 � J�c3=2 �bonds(n2) T next=0 ^�n2<length �next=n2+1 h�n2=length �cyclic �next=1 r�carbon(n2,">") |�next ��carbon(next,">") ��c3 �� ��n2 �� �� �ݤused(cbn) � used=0 ��c1=1 �4 �#�carbons$(cbn,c1)<>">" �used+=1 ��c1 � =used �ݤstructural(start,finish) �stru$="" �n2=start �finish $�bonds(n2-1)=2 �n2-1 �stru$+="=" 2stru$+=cs$(n2):many=�howmany(n2,"H"):carb$="H" &$�many �stru$+="H":�countersystem 0�c3=1 �4 :carb$=carbons$(n2,c3) DB�carb$,"*") ��carb$,�carb$,"*"),2)=" ":carb$=�remove2(carb$) N)�carb$<>">" �carb$<>"H" ��(carb$)=0 � XD�carb$,"/") ��carb$,�carb$,"/")-1,2)=" ":carb$=�remove2(carb$) bstru$+=carb$ l�countersystem v� ��c3 �count=0 � lcarb$="" ��c3=1 �4 �carb$=carbons$(n2,c3) �methyl=�(carb$) � �methyl � �,�methyl>1 �notone$=�(methyl) �notone$="" �>�count=0 �stru$=stru$+"(C"+notone$+"H"+�((methyl*2)+1)+")" ��countersystem �� ��c3 ��n2 =stru$ ��countersystem many=�howmany(n2,carb$) 7�many>1 �carb$>"" �stru$=stru$+�(many):c3+=(many-1) *� 4ݤfindtext(text$) >check=�n$,text$) H9�check �pos=pos-�text$:�n$,check,�text$)=ĩtext$," ") R =�(check) \��parrot f polypos=0 p�n2=1 �length z�bonds(n2)=2 �polypos=n2 ��n2 �bonds(polypos)=1 ��polypos=0 � �error$+="H" �� ��reduce(polypos) � �rep=0 �1 �=loc=�find(polypos+rep,">"):carbons$(polypos+rep,loc)="1/" �OȔ carbons$(polypos+rep,loc),carbons$(polypos+rep,2+�find(polypos+rep,">")) ��rep ��shiftdata(polypos-1) �length=2 �� � ��reduce(polypos) �length>polypos+1 � $where=�find(polypos+1,">") .'�length-polypos>2 �ex$="*3" �ex$="" 8?carbons$(polypos+1,where)=�structural(polypos+2,length)+ex$ Bd�bonds(polypos+1)>1 �carbons$(polypos+1,where)=carbons$(polypos+1,where)+�(bonds(polypos+1))+"/" L� V�polypos>1 � `where=�find(polypos,">") j �polypos>2 �ex$="*1" �ex$="" t8carbons$(polypos,where)=�structural(1,polypos-1)+ex$ ~`�bonds(polypos-1)>1 �carbons$(polypos,where)=carbons$(polypos,where)+�(bonds(polypos-1))+"/" �� �� ���shiftdata(shift) ��n=1 �length ��c3=1 �4 �?carbons$(n,c3)=carbons$(n+shift,c3):bonds(n)=bonds(n+shift) ��c3 ��n �� ���metsearch � met=0 ��c8=1 �np_met 5�findtext(metal$(c8,0)) �metal$(c8,0)>"" �met=c8 �c8 � ݤfind(n,text$) ( pos=0 2�c8=1 �4 <!�carbons$(n,c8)=text$ �pos=c8 F�c8 P=pos Zݤhowmany(n,text$) d many=0 n�c8=1 �4 x"�carbons$(n,c8)=text$ �many+=1 ��c8 � =many ���ester �Bcs$(ester+1)="O":carbons$(ester+1,3)="":carbons$(ester+1,4)="" �� ���phenolize �'f=4:f=�find(1,"H"):carbons$(1,f)="" �[rest$=�structural(1,length):length=6:cyclic=1:benz=1:fnposs()=0:fn=0:nums()=0:bonds()=0 �Bcarbons$()="":�sortbonds:�assign_positions:carbons$(1,4)=rest$ �� ���cistrans � polypos=0 ��n=1 �length �bonds(n)=2 �polypos=n �n �polypos � "�reduce(polypos) ,length=2 6 �cis � @Z�carbons$(polypos,3)=carbons$(polypos+1,4) �Ȕ carbons$(polypos,3),carbons$(polypos,4) J� TZ�carbons$(polypos,3)=carbons$(polypos+1,3) �Ȕ carbons$(polypos,3),carbons$(polypos,4) ^Z�carbons$(polypos,4)=carbons$(polypos+1,4) �Ȕ carbons$(polypos,4),carbons$(polypos,3) h� r�shiftdata(polypos-1) |� �error$+="T" �� �� ���errorreport(err$) �err$=�case(err$,1) �errout$="" ��n2=1 ��err$ ��c8=1 �np_err �;�err$,n2,1)=�case(errort$(c8,0),1) ��errk$,c8,1)="0" � �asc=�(errort$(c8,0)) ��asc>64 �asc<91 �fatal=1 ��errk$,c8,1)="1" �errout$=errort$(c8,1) 1�errort$(c8,0)="f" �extra$=�(full) �extra$="" � �c8 &�n2 0�errout$>"" �display � :0�icontext(mess%,0,�errout$,�errout$,"#")-1)) D>�icontext(mess%,1,�errout$,�errout$-�errout$,"#"))+extra$) N�openwin(mess%) X� b� lݤputbacktogether(time) vneat$="" ��ester � �B=�case(length$(ester),2)+"oxy"+�case(length$(length2),2)+"ane" �� �"�phenyl+cis+trans+poly �time � �"�phenyl �neat$+="Phenyl"+prev$ ��cis �neat$+="Cis"+prev$ � �trans �neat$+="Trans"+prev$ �#�poly �neat$+="Poly("+prev$+")" �� �*�cyclic ��attr(fn,2)=0 �neat$+="Cyclo" �1�attr(fn,0) �neat$+=�case(length$(length),2) �#neat$+=�case(fndetail$(fn,2),3) �)�fnposs(2) ��attr(fn,4)>1 �neat$+="a" pos$=�positions ��(length>1 ��attr(fn,1) �(fndetail$(fn,0)<>"" � �attr(fn,4)>1)) � (�attr(fn,1)=0 �(�pos$>1 � �(pos$)>1)) �neat$+="-"+pos$+"-" count=0 � *count+=1 4� fnposs(count)=0 >count-=1 H.�count>1 �neat$+=�case(multiple$(count),2) R#�fn$(fn,0)>4 �style=2 �style=3 \!neat$+=�case(fn$(fn,0),style) f� p�orderinit z bg$="" ��group � �S�((cis+trans+phenyl+poly) �time=0) � (poly+cis+trans+phenyl)=0 ��beginningstuff �� �:�met �exmetal$=�case(metal$(met,0),2)+" " �exmetal$="" �=exmetal$+bg$+neat$ �� ���orderinit ��n=1 �np_bgs �det=details(n,1) �%�det>0 �order$(n)=halogen$(det,0) �(�det<0 �order$(n)=length$(-det)+"YL" ��det=0 �group=n-1:n=np_bgs ��n �n2=1 �group orderpos(n2)=n2 �n2 $�group>1 � .�n2=1 �group 8�n=1 �group-1 B"�(order$(n))>�(order$(n+1)) � LȔ order$(n),order$(n+1) V Ȕ orderpos(n),orderpos(n+1) `� j�n t�n2 ~� �� � ��sort �c3=0 �� � c3+=1 �� nums(ref,c3)=0 � many=c3-1 ��c3=1 �many ��c4=1 �many-1 �@�nums(ref,c4)>nums(ref,c4+1) �Ȕ nums(ref,c4),nums(ref,c4+1) ��c4 ��c3 � ��beginningstuff bg$="" �n=1 �group (&ref=orderpos(n):det=details(ref,1) 2�nums(ref,2) ��sort <c3=1 Fpos2$="" P� Zpos2$+=�(nums(ref,c3))+"," d c3+=1 n� nums(ref,c3)=0 x bg$=bg$+�pos2$,�pos2$-1)+"-" �3�c3-1<=np_mul �bg$=bg$+�case(multiple$(c3-1),2) �Q�det>0 �bg$=bg$+�case(halogen$(det,0),2) �bg$=bg$+�case(length$(-det)+"YL",2) ��n<group �bg$=bg$+"-" ��n �� �ݤbrack(t$) � t2$="" ��c4=1 ��t$ �m$=�t$,c4,1) ��m$<>"(" �m$<>")" �t2$+=m$ ��c4 �=t2$ � ��sortpos c1=0 � c1+=1 "� fnposs(c1)=0 , many=c1-1 6�c1=1 �many @�c2=1 �many-1 J8�fnposs(c2)>fnposs(c2+1) �Ȕ fnposs(c2),fnposs(c2+1) T�c2 ^�c1 h� rݤpositions |pos$="":c1=1 �� �%pos$=pos$+�(fnposs(c1))+",":c1+=1 �� fnposs(c1)=0 �=�pos$,�pos$-1) ���ifmet �i�met �:found=�find(fnposs(1),"O-"): carbons$(fnposs(1),found)=carbons$(fnposs(1),found)+metal$(met,1) �� ���ifphenyl �7�findtext("PHENYL") �phenyl=1:n$=�removespaces(n$) �� �ݤfree(carb) � free=0 ��c4=1 �4 "�carbons$(carb,c4)="" �free+=1 �c4 =free & ݤprimary 0prim=0:where=fnposs(1) :�cyclic �prim+=2 D9�cyclic=0 �(where=length � where=1) �prim+=1 �prim+=2 N�n=1 �4 X%�carbons$(where,n),"#") �prim+=1 b�n lprim$="(Primary)" v �prim=2 �prim$="(Secondary)" ��prim=3 �prim$="(Tertiary)" � =prim$ �ݤattr(fn,bit) ��bit<3 �=attr(fn)�(2^bit) ��bit=3 �=(attr(fn)�8)�31 ��bit=4 �=(attr(fn)�256)�7 ��bit=5 �=(attr(fn)�2048)�1 ��bit=6 �=(attr(fn)�4096)�7 � ��demo �R=�(np_dem) �c=0 �f=�("<Carbon$Dir>.demo") ��:c+=1:A$=�#f:�R=c ��#f �#f �decode_control(A$,1) �=0 � �
00000000 0d 00 0a 0c f4 20 44 65 63 6f 64 65 0d 00 14 14 |..... Decode....| 00000010 f4 20 a9 20 41 2e 47 72 61 6e 67 65 72 20 39 38 |. . A.Granger 98| 00000020 0d 00 1e 05 e0 0d 00 28 20 dd f2 64 65 63 6f 64 |.......( ..decod| 00000030 65 5f 63 6f 6e 74 72 6f 6c 28 6e 24 2c 64 69 73 |e_control(n$,dis| 00000040 70 6c 61 79 29 0d 00 32 29 f2 63 6c 65 61 72 5f |play)..2).clear_| 00000050 76 61 72 73 3a 6e 24 3d a4 63 61 73 65 28 6e 24 |vars:n$=.case(n$| 00000060 2c 31 29 3a f2 6d 65 74 73 65 61 72 63 68 0d 00 |,1):.metsearch..| 00000070 3c 2f 70 6f 6c 79 3d a4 66 69 6e 64 74 65 78 74 |</poly=.findtext| 00000080 28 22 50 4f 4c 59 22 29 3a 63 69 73 3d a4 66 69 |("POLY"):cis=.fi| 00000090 6e 64 74 65 78 74 28 22 43 49 53 22 29 0d 00 46 |ndtext("CIS")..F| 000000a0 36 74 72 61 6e 73 3d a4 66 69 6e 64 74 65 78 74 |6trans=.findtext| 000000b0 28 22 54 52 41 4e 53 22 29 3a 63 79 63 6c 69 63 |("TRANS"):cyclic| 000000c0 3d a4 66 69 6e 64 74 65 78 74 28 22 43 59 43 4c |=.findtext("CYCL| 000000d0 4f 22 29 0d 00 50 45 6e 24 3d a4 72 65 6d 6f 76 |O")..PEn$=.remov| 000000e0 65 73 70 61 63 65 73 28 6e 24 29 3a 70 6f 73 3d |espaces(n$):pos=| 000000f0 a9 6e 24 3a 66 6e 3d a4 66 75 6e 63 74 69 6f 6e |.n$:fn=.function| 00000100 61 6c 5f 67 72 6f 75 70 3a 70 6f 73 2d 3d a9 66 |al_group:pos-=.f| 00000110 6e 24 28 66 6e 2c 30 29 0d 00 5a 16 e7 66 6e 3d |n$(fn,0)..Z..fn=| 00000120 30 20 8c 65 72 72 6f 72 24 2b 3d 22 4e 22 0d 00 |0 .error$+="N"..| 00000130 64 11 f2 65 78 74 72 61 66 6e 73 74 75 66 66 0d |d..extrafnstuff.| 00000140 00 6e 27 e7 66 6e 70 6f 73 73 28 31 29 3d 30 20 |.n'.fnposs(1)=0 | 00000150 8c 66 6e 70 6f 73 73 28 31 29 3d a4 61 74 74 72 |.fnposs(1)=.attr| 00000160 28 66 6e 2c 36 29 0d 00 78 27 6c 65 6e 67 74 68 |(fn,6)..x'length| 00000170 3d a4 61 74 74 72 28 66 6e 2c 33 29 3a 62 65 6e |=.attr(fn,3):ben| 00000180 7a 3d a4 61 74 74 72 28 66 6e 2c 32 29 0d 00 82 |z=.attr(fn,2)...| 00000190 3c e7 a4 61 74 74 72 28 66 6e 2c 30 29 20 8c 20 |<..attr(fn,0) . | 000001a0 6c 65 6e 67 74 68 3d a4 63 68 61 69 6e 6c 65 6e |length=.chainlen| 000001b0 67 74 68 3a 70 6f 73 2d 3d a9 6c 65 6e 67 74 68 |gth:pos-=.length| 000001c0 24 28 6c 65 6e 67 74 68 29 0d 00 8c 1a e7 6c 65 |$(length).....le| 000001d0 6e 67 74 68 3d 30 20 8c 65 72 72 6f 72 24 2b 3d |ngth=0 .error$+=| 000001e0 22 4c 22 0d 00 96 0d e7 6c 65 6e 67 74 68 20 8c |"L".....length .| 000001f0 0d 00 a0 10 f2 63 6c 65 61 6e 66 6e 70 6f 73 73 |.....cleanfnposs| 00000200 0d 00 aa 13 e7 62 65 6e 7a 20 8c 63 79 63 6c 69 |.....benz .cycli| 00000210 63 3d 31 0d 00 b4 1d e7 a4 61 74 74 72 28 66 6e |c=1......attr(fn| 00000220 2c 32 29 3d 30 20 8c f2 69 66 70 68 65 6e 79 6c |,2)=0 ..ifphenyl| 00000230 0d 00 be 21 e7 70 6f 73 3e 30 20 8c f2 62 72 65 |...!.pos>0 ..bre| 00000240 61 6b 5f 64 6f 77 6e 5f 62 65 67 69 6e 6e 69 6e |ak_down_beginnin| 00000250 67 0d 00 c8 30 e7 65 73 74 65 72 20 8c 6c 65 6e |g...0.ester .len| 00000260 67 74 68 32 3d 6c 65 6e 67 74 68 3a 6c 65 6e 67 |gth2=length:leng| 00000270 74 68 3d 65 73 74 65 72 2b 6c 65 6e 67 74 68 2b |th=ester+length+| 00000280 31 0d 00 d2 0e f2 73 6f 72 74 62 6f 6e 64 73 0d |1.....sortbonds.| 00000290 00 dc 12 f2 63 6c 65 61 6e 5f 75 70 5f 64 61 74 |....clean_up_dat| 000002a0 61 0d 00 e6 13 70 6f 73 24 3d a4 70 6f 73 69 74 |a....pos$=.posit| 000002b0 69 6f 6e 73 0d 00 f0 15 f2 61 73 73 69 67 6e 5f |ions.....assign_| 000002c0 70 6f 73 69 74 69 6f 6e 73 0d 00 fa 18 e7 66 6e |positions.....fn| 000002d0 70 6f 73 73 28 32 29 20 8c f2 73 6f 72 74 70 6f |poss(2) ..sortpo| 000002e0 73 0d 01 04 3a 70 72 65 76 24 3d a4 70 75 74 62 |s...:prev$=.putb| 000002f0 61 63 6b 74 6f 67 65 74 68 65 72 28 30 29 3a 70 |acktogether(0):p| 00000300 72 65 76 73 24 3d a4 73 74 72 75 63 74 75 72 61 |revs$=.structura| 00000310 6c 28 31 2c 6c 65 6e 67 74 68 29 0d 01 0e 17 e7 |l(1,length).....| 00000320 70 68 65 6e 79 6c 20 8c f2 70 68 65 6e 6f 6c 69 |phenyl ..phenoli| 00000330 7a 65 0d 01 18 10 e7 6d 65 74 20 8c f2 69 66 6d |ze.....met ..ifm| 00000340 65 74 0d 01 22 12 e7 65 73 74 65 72 20 8c f2 65 |et.."..ester ..e| 00000350 73 74 65 72 0d 01 2c 12 e7 70 6f 6c 79 20 8c f2 |ster..,..poly ..| 00000360 70 61 72 72 6f 74 0d 01 36 1b e7 63 69 73 20 84 |parrot..6..cis .| 00000370 20 74 72 61 6e 73 20 8c f2 63 69 73 74 72 61 6e | trans ..cistran| 00000380 73 0d 01 40 18 f2 65 72 72 6f 72 72 65 70 6f 72 |s..@..errorrepor| 00000390 74 28 65 72 72 6f 72 24 29 0d 01 4a 17 e7 66 61 |t(error$)..J..fa| 000003a0 74 61 6c 3d 30 20 80 64 69 73 70 6c 61 79 20 8c |tal=0 .display .| 000003b0 0d 01 54 11 f2 63 61 72 62 6f 6e 5f 63 6f 72 64 |..T..carbon_cord| 000003c0 73 0d 01 5e 0e f2 70 6c 6f 74 63 61 72 62 73 0d |s..^..plotcarbs.| 000003d0 01 68 19 e7 6c 65 6e 67 74 68 3e 31 20 8c f2 64 |.h..length>1 ..d| 000003e0 72 61 77 62 6f 6e 64 73 0d 01 72 0b f2 73 74 69 |rawbonds..r..sti| 000003f0 63 6b 73 0d 01 7c 12 f2 65 78 74 72 61 67 72 61 |cks..|..extragra| 00000400 70 68 69 63 73 0d 01 86 0a 70 61 73 73 3d 31 0d |phics....pass=1.| 00000410 01 90 1c 73 24 3d a4 73 74 72 75 63 74 75 72 61 |...s$=.structura| 00000420 6c 28 31 2c 6c 65 6e 67 74 68 29 0d 01 9a 21 e7 |l(1,length)...!.| 00000430 70 6f 6c 79 20 8c 73 24 3d 22 2d 5b 2d 22 2b 70 |poly .s$="-[-"+p| 00000440 72 65 76 73 24 2b 22 2d 5d 6e 2d 22 0d 01 a4 1d |revs$+"-]n-"....| 00000450 6e 61 6d 65 24 3d a4 70 75 74 62 61 63 6b 74 6f |name$=.putbackto| 00000460 67 65 74 68 65 72 28 31 29 0d 01 ae 10 e7 64 69 |gether(1).....di| 00000470 73 70 6c 61 79 3c 32 20 8c 0d 01 b8 28 e7 a4 61 |splay<2 ....(..a| 00000480 74 74 72 28 66 6e 2c 35 29 20 8c 70 73 74 24 3d |ttr(fn,5) .pst$=| 00000490 a4 70 72 69 6d 61 72 79 20 8b 70 73 74 24 3d 22 |.primary .pst$="| 000004a0 22 0d 01 c2 58 f2 6d 65 6d 70 72 69 6e 74 28 6d |"...X.memprint(m| 000004b0 6e 5f 78 2b 31 30 2c 6d 6e 5f 79 2d 33 30 2c 38 |n_x+10,mn_y-30,8| 000004c0 2c 6e 61 6d 65 24 2b 22 20 22 2b 70 73 74 24 29 |,name$+" "+pst$)| 000004d0 3a f2 6d 65 6d 70 72 69 6e 74 28 6d 6e 5f 78 2b |:.memprint(mn_x+| 000004e0 31 30 2c 6d 6e 5f 79 2d 31 30 2c 38 2c 73 24 29 |10,mn_y-10,8,s$)| 000004f0 3a 6d 6e 5f 79 2d 3d 31 30 0d 01 cc 1a f2 74 69 |:mn_y-=10.....ti| 00000500 74 6c 65 28 64 72 61 77 77 69 6e 25 2c 6e 61 6d |tle(drawwin%,nam| 00000510 65 24 29 0d 01 d6 05 cd 0d 01 e0 05 cd 0d 01 ea |e$).............| 00000520 05 cd 0d 01 f4 2b e7 65 72 72 6f 72 24 3e 22 22 |.....+.error$>""| 00000530 20 8c f2 65 72 72 6f 72 72 65 70 6f 72 74 28 65 | ..errorreport(e| 00000540 72 72 6f 72 24 29 3a 70 61 73 73 3d 30 0d 01 fe |rror$):pass=0...| 00000550 29 e7 64 69 73 70 6c 61 79 3d 30 20 8c 6e 61 6d |).display=0 .nam| 00000560 65 24 3d a4 70 75 74 62 61 63 6b 74 6f 67 65 74 |e$=.putbacktoget| 00000570 68 65 72 28 31 29 0d 02 08 17 f2 63 6c 6f 73 65 |her(1).....close| 00000580 77 69 6e 28 64 72 61 77 77 69 6e 25 29 0d 02 12 |win(drawwin%)...| 00000590 2b e7 65 72 72 6f 72 24 3d 22 22 20 80 64 69 73 |+.error$="" .dis| 000005a0 70 6c 61 79 20 8c f2 6f 70 65 6e 77 69 6e 28 64 |play ..openwin(d| 000005b0 72 61 77 77 69 6e 25 29 0d 02 1c 05 e1 0d 02 26 |rawwin%).......&| 000005c0 13 dd a4 63 61 73 65 28 74 24 2c 77 68 61 74 29 |...case(t$,what)| 000005d0 0d 02 30 09 62 24 3d 22 22 0d 02 3a 0e e3 63 31 |..0.b$=""..:..c1| 000005e0 3d 31 20 b8 a9 74 24 0d 02 44 10 6d 24 3d c1 74 |=1 ..t$..D.m$=.t| 000005f0 24 2c 63 31 2c 31 29 0d 02 4e 0b 63 3d 97 28 6d |$,c1,1)..N.c=.(m| 00000600 24 29 0d 02 58 20 e7 77 68 61 74 3d 31 20 80 63 |$)..X .what=1 .c| 00000610 3e 39 36 20 80 63 3c 31 32 33 20 8c 63 3d 63 2d |>96 .c<123 .c=c-| 00000620 33 32 0d 02 62 2a e7 28 77 68 61 74 3d 32 20 84 |32..b*.(what=2 .| 00000630 20 77 68 61 74 3d 33 29 20 80 63 3e 36 34 20 80 | what=3) .c>64 .| 00000640 63 3c 39 31 20 8c 63 3d 63 2b 33 32 0d 02 6c 26 |c<91 .c=c+32..l&| 00000650 e7 77 68 61 74 3d 32 20 80 63 3e 39 36 20 80 63 |.what=2 .c>96 .c| 00000660 3c 31 32 33 20 80 63 31 3d 31 20 8c 63 3d 63 2d |<123 .c1=1 .c=c-| 00000670 33 32 0d 02 76 14 e7 63 3e 30 20 8c 62 24 3d 62 |32..v..c>0 .b$=b| 00000680 24 2b bd 28 63 29 0d 02 80 07 ed 63 31 0d 02 8a |$+.(c).....c1...| 00000690 07 3d 62 24 0d 02 94 16 dd a4 66 75 6e 63 74 69 |.=b$......functi| 000006a0 6f 6e 61 6c 5f 67 72 6f 75 70 0d 02 9e 12 6d 61 |onal_group....ma| 000006b0 74 63 68 3d 30 3a 62 65 73 74 3d 30 0d 02 a8 11 |tch=0:best=0....| 000006c0 e3 63 32 3d 31 20 b8 6e 70 5f 66 6e 73 0d 02 b2 |.c2=1 .np_fns...| 000006d0 12 6c 65 6e 3d a9 66 6e 24 28 63 32 2c 30 29 0d |.len=.fn$(c2,0).| 000006e0 02 bc 39 e7 66 6e 24 28 63 32 2c 30 29 3d c2 6e |..9.fn$(c2,0)=.n| 000006f0 24 2c 6c 65 6e 29 20 80 6c 65 6e 20 80 6c 65 6e |$,len) .len .len| 00000700 3e 62 65 73 74 20 8c 62 65 73 74 3d 6c 65 6e 3a |>best .best=len:| 00000710 6d 61 74 63 68 3d 63 32 0d 02 c6 07 ed 63 32 0d |match=c2.....c2.| 00000720 02 d0 0a 3d 6d 61 74 63 68 0d 02 da 12 dd f2 65 |...=match......e| 00000730 78 74 72 61 66 6e 73 74 75 66 66 0d 02 e4 0a 62 |xtrafnstuff....b| 00000740 65 73 74 3d 30 0d 02 ee 11 e3 63 33 3d 31 20 b8 |est=0.....c3=1 .| 00000750 6e 70 5f 6d 75 6c 0d 02 f8 16 6c 65 6e 3d a9 6d |np_mul....len=.m| 00000760 75 6c 74 69 70 6c 65 24 28 63 33 29 0d 03 02 57 |ultiple$(c3)...W| 00000770 e7 6c 65 6e 20 80 70 6f 73 2d 6c 65 6e 2b 31 3e |.len .pos-len+1>| 00000780 30 20 80 6d 75 6c 74 69 70 6c 65 24 28 63 33 29 |0 .multiple$(c3)| 00000790 3d c1 6e 24 2c 70 6f 73 2d 6c 65 6e 2b 31 2c 6c |=.n$,pos-len+1,l| 000007a0 65 6e 29 20 80 6c 65 6e 3e 62 65 73 74 20 8c 6d |en) .len>best .m| 000007b0 75 6c 74 62 6f 6e 64 3d 63 33 3a 62 65 73 74 3d |ultbond=c3:best=| 000007c0 6c 65 6e 0d 03 0c 07 ed 63 33 0d 03 16 28 e7 6d |len.....c3...(.m| 000007d0 75 6c 74 62 6f 6e 64 20 8c 70 6f 73 2d 3d a9 6d |ultbond .pos-=.m| 000007e0 75 6c 74 69 70 6c 65 24 28 6d 75 6c 74 62 6f 6e |ultiple$(multbon| 000007f0 64 29 0d 03 20 36 6e 75 6d 24 3d 22 22 3a 63 34 |d).. 6num$="":c4| 00000800 3d 70 6f 73 3a 63 75 72 63 24 3d c1 6e 24 2c 63 |=pos:curc$=.n$,c| 00000810 34 2c 31 29 3a 74 79 70 65 3d a4 6c 65 74 74 65 |4,1):type=.lette| 00000820 72 28 63 75 72 63 24 29 0d 03 2a 0d e7 74 79 70 |r(curc$)..*..typ| 00000830 65 3d 30 20 8c 0d 03 34 05 f5 0d 03 3e 2d e7 74 |e=0 ...4....>-.t| 00000840 79 70 65 3d 30 20 84 20 74 79 70 65 3d 33 20 8c |ype=0 . type=3 .| 00000850 20 6e 75 6d 24 2b 3d 63 75 72 63 24 3a 6c 61 73 | num$+=curc$:las| 00000860 74 70 6f 73 3d 63 34 0d 03 48 2d 63 34 2d 3d 31 |tpos=c4..H-c4-=1| 00000870 3a 63 75 72 63 24 3d c1 6e 24 2c 63 34 2c 31 29 |:curc$=.n$,c4,1)| 00000880 3a 74 79 70 65 3d a4 6c 65 74 74 65 72 28 63 75 |:type=.letter(cu| 00000890 72 63 24 29 0d 03 52 13 fd 20 74 79 70 65 3d 31 |rc$)..R.. type=1| 000008a0 20 84 20 63 34 3c 31 0d 03 5c 25 f2 73 74 6f 72 | . c4<1..\%.stor| 000008b0 65 70 6f 73 73 28 a4 72 65 76 65 72 73 65 28 6e |eposs(.reverse(n| 000008c0 75 6d 24 29 29 3a 70 6f 73 3d 63 34 0d 03 66 05 |um$)):pos=c4..f.| 000008d0 cd 0d 03 70 0a 62 65 73 74 3d 30 0d 03 7a 0d e3 |...p.best=0..z..| 000008e0 63 35 3d 31 20 b8 31 30 0d 03 84 12 6c 65 6e 3d |c5=1 .10....len=| 000008f0 a9 6d 6f 72 65 24 28 63 35 29 0d 03 8e 3a e7 6c |.more$(c5)...:.l| 00000900 65 6e 3e 62 65 73 74 20 80 6c 65 6e 20 80 c1 6e |en>best .len ..n| 00000910 24 2c 70 6f 73 2d 6c 65 6e 2b 31 2c 6c 65 6e 29 |$,pos-len+1,len)| 00000920 3d 6d 6f 72 65 24 28 63 35 29 20 8c 62 65 73 74 |=more$(c5) .best| 00000930 3d 6c 65 6e 0d 03 98 3d e7 20 c1 6e 24 2c 70 6f |=len...=. .n$,po| 00000940 73 2d 6c 65 6e 2b 31 2c 6c 65 6e 29 3d 22 59 4c |s-len+1,len)="YL| 00000950 22 20 80 66 6e 64 65 74 61 69 6c 24 28 66 6e 2c |" .fndetail$(fn,| 00000960 32 29 3c 3e 22 59 4c 22 20 8c 20 62 65 73 74 3d |2)<>"YL" . best=| 00000970 30 0d 03 a2 07 ed 63 35 0d 03 ac 10 70 6f 73 3d |0.....c5....pos=| 00000980 70 6f 73 2d 62 65 73 74 0d 03 b6 05 cb 0d 03 c0 |pos-best........| 00000990 05 e1 0d 03 ca 13 dd f2 73 74 6f 72 65 70 6f 73 |........storepos| 000009a0 73 28 74 24 29 0d 03 d4 10 6e 75 6d 24 3d 22 22 |s(t$)....num$=""| 000009b0 3a 63 32 3d 31 0d 03 de 0e e3 63 31 3d 31 20 b8 |:c2=1.....c1=1 .| 000009c0 a9 74 24 0d 03 e8 21 6d 24 3d c1 74 24 2c 63 31 |.t$...!m$=.t$,c1| 000009d0 2c 31 29 3a 74 79 70 65 3d a4 6c 65 74 74 65 72 |,1):type=.letter| 000009e0 28 6d 24 29 0d 03 f2 0d e7 74 79 70 65 3d 33 20 |(m$).....type=3 | 000009f0 8c 0d 03 fc 24 66 6e 70 6f 73 73 28 63 32 29 3d |....$fnposs(c2)=| 00000a00 bb 28 6e 75 6d 24 29 3a 63 32 2b 3d 31 3a 6e 75 |.(num$):c2+=1:nu| 00000a10 6d 24 3d 22 22 0d 04 06 05 cc 0d 04 10 0c 6e 75 |m$="".........nu| 00000a20 6d 24 2b 3d 6d 24 0d 04 1a 1a e7 6e 75 6d 24 3d |m$+=m$.....num$=| 00000a30 22 30 22 20 8c 65 72 72 6f 72 24 2b 3d 22 42 22 |"0" .error$+="B"| 00000a40 0d 04 24 05 cd 0d 04 2e 07 ed 63 31 0d 04 38 16 |..$.......c1..8.| 00000a50 66 6e 70 6f 73 73 28 63 32 29 3d bb 28 6e 75 6d |fnposs(c2)=.(num| 00000a60 24 29 0d 04 42 05 e1 0d 04 4c 11 dd a4 63 68 61 |$)..B....L...cha| 00000a70 69 6e 6c 65 6e 67 74 68 0d 04 56 0a 62 65 73 74 |inlength..V.best| 00000a80 3d 30 0d 04 60 11 e3 63 31 3d 31 20 b8 6e 70 5f |=0..`..c1=1 .np_| 00000a90 6c 65 6e 0d 04 6a 14 6c 65 6e 3d a9 6c 65 6e 67 |len..j.len=.leng| 00000aa0 74 68 24 28 63 31 29 0d 04 74 46 e7 6c 65 6e 20 |th$(c1)..tF.len | 00000ab0 80 c1 6e 24 2c 70 6f 73 2d 6c 65 6e 2b 31 2c 6c |..n$,pos-len+1,l| 00000ac0 65 6e 29 3d 6c 65 6e 67 74 68 24 28 63 31 29 20 |en)=length$(c1) | 00000ad0 80 6c 65 6e 3e 62 65 73 74 20 8c 6c 65 6e 67 74 |.len>best .lengt| 00000ae0 68 3d 63 31 3a 62 65 73 74 3d 6c 65 6e 0d 04 7e |h=c1:best=len..~| 00000af0 07 ed 63 31 0d 04 88 0b 3d 6c 65 6e 67 74 68 0d |..c1....=length.| 00000b00 04 92 11 dd a4 6c 65 74 74 65 72 28 63 68 24 29 |.....letter(ch$)| 00000b10 0d 04 9c 0e 63 68 63 3d 97 28 63 68 24 29 0d 04 |....chc=.(ch$)..| 00000b20 a6 0a 6f 75 74 3d 2d 31 0d 04 b0 1a e7 63 68 63 |..out=-1.....chc| 00000b30 3e 34 37 20 80 63 68 63 3c 35 38 20 8c 6f 75 74 |>47 .chc<58 .out| 00000b40 3d 30 0d 04 ba 30 e7 28 63 68 63 3e 36 34 20 80 |=0...0.(chc>64 .| 00000b50 63 68 63 3c 39 31 29 20 84 20 28 63 68 63 3e 39 |chc<91) . (chc>9| 00000b60 36 20 80 63 68 63 3c 31 32 33 29 20 8c 6f 75 74 |6 .chc<123) .out| 00000b70 3d 31 0d 04 c4 12 e7 63 68 63 3d 34 34 20 8c 6f |=1.....chc=44 .o| 00000b80 75 74 3d 33 0d 04 ce 12 e7 63 68 63 3d 34 35 20 |ut=3.....chc=45 | 00000b90 8c 6f 75 74 3d 34 0d 04 d8 08 3d 6f 75 74 0d 04 |.out=4....=out..| 00000ba0 e2 14 dd a4 72 65 76 65 72 73 65 28 74 65 78 74 |....reverse(text| 00000bb0 24 29 0d 04 ec 0f 74 65 78 74 6f 75 74 24 3d 22 |$)....textout$="| 00000bc0 22 0d 04 f6 16 e3 63 32 3d a9 74 65 78 74 24 20 |".....c2=.text$ | 00000bd0 b8 31 20 88 20 2d 31 0d 05 00 1a 74 65 78 74 6f |.1 . -1....texto| 00000be0 75 74 24 2b 3d c1 74 65 78 74 24 2c 63 32 2c 31 |ut$+=.text$,c2,1| 00000bf0 29 0d 05 0a 07 ed 63 32 0d 05 14 0d 3d 74 65 78 |).....c2....=tex| 00000c00 74 6f 75 74 24 0d 05 1e 1a dd f2 62 72 65 61 6b |tout$......break| 00000c10 5f 64 6f 77 6e 5f 62 65 67 69 6e 6e 69 6e 67 0d |_down_beginning.| 00000c20 05 28 10 62 67 24 3d c0 6e 24 2c 70 6f 73 29 0d |.(.bg$=.n$,pos).| 00000c30 05 32 07 6e 3d 31 0d 05 3c 0f e3 63 31 3d 31 20 |.2.n=1..<..c1=1 | 00000c40 b8 a9 62 67 24 0d 05 46 22 6d 24 3d c1 62 67 24 |..bg$..F"m$=.bg$| 00000c50 2c 63 31 2c 31 29 3a 74 79 70 65 3d a4 6c 65 74 |,c1,1):type=.let| 00000c60 74 65 72 28 6d 24 29 0d 05 50 0d e7 74 79 70 65 |ter(m$)..P..type| 00000c70 3d 30 20 8c 0d 05 5a 10 6e 32 3d 31 3a 6e 75 6d |=0 ...Z.n2=1:num| 00000c80 24 3d 22 22 0d 05 64 05 f5 0d 05 6e 15 e7 74 79 |$=""..d....n..ty| 00000c90 70 65 3d 30 20 8c 6e 75 6d 24 2b 3d 6d 24 0d 05 |pe=0 .num$+=m$..| 00000ca0 78 1f e7 74 79 70 65 3d 31 20 84 20 74 79 70 65 |x..type=1 . type| 00000cb0 3d 33 20 84 20 63 31 3d 70 6f 73 20 8c 0d 05 82 |=3 . c1=pos ....| 00000cc0 24 6e 75 6d 73 28 6e 2c 6e 32 29 3d bb 28 6e 75 |$nums(n,n2)=.(nu| 00000cd0 6d 24 29 3a 6e 75 6d 24 3d 22 22 3a 6e 32 2b 3d |m$):num$="":n2+=| 00000ce0 31 0d 05 8c 05 cd 0d 05 96 2a 63 31 3d 63 31 2b |1........*c1=c1+| 00000cf0 31 3a 6d 24 3d c1 62 67 24 2c 63 31 2c 31 29 3a |1:m$=.bg$,c1,1):| 00000d00 74 79 70 65 3d a4 6c 65 74 74 65 72 28 6d 24 29 |type=.letter(m$)| 00000d10 0d 05 a0 16 fd 20 74 79 70 65 3d 31 20 84 20 63 |..... type=1 . c| 00000d20 31 3e 3d 70 6f 73 0d 05 aa 16 6e 75 6d 73 28 6e |1>=pos....nums(n| 00000d30 2c 6e 32 29 3d bb 28 6e 75 6d 24 29 0d 05 b4 05 |,n2)=.(num$)....| 00000d40 cd 0d 05 be 11 6d 75 6c 74 3d 30 3a 62 65 73 74 |.....mult=0:best| 00000d50 3d 30 0d 05 c8 11 e3 63 32 3d 31 20 b8 6e 70 5f |=0.....c2=1 .np_| 00000d60 6d 75 6c 0d 05 d2 16 6c 65 6e 3d a9 6d 75 6c 74 |mul....len=.mult| 00000d70 69 70 6c 65 24 28 63 32 29 0d 05 dc 40 e7 c1 62 |iple$(c2)...@..b| 00000d80 67 24 2c 63 31 2c 6c 65 6e 29 3d 6d 75 6c 74 69 |g$,c1,len)=multi| 00000d90 70 6c 65 24 28 63 32 29 20 80 6c 65 6e 20 80 6c |ple$(c2) .len .l| 00000da0 65 6e 3e 62 65 73 74 20 8c 6d 75 6c 74 3d 63 32 |en>best .mult=c2| 00000db0 3a 62 65 73 74 3d 6c 65 6e 0d 05 e6 07 ed 63 32 |:best=len.....c2| 00000dc0 0d 05 f0 0b e7 6d 75 6c 74 20 8c 0d 05 fa 2a 64 |.....mult ....*d| 00000dd0 65 74 61 69 6c 73 28 6e 2c 30 29 3d 6d 75 6c 74 |etails(n,0)=mult| 00000de0 3a 63 31 2b 3d a9 6d 75 6c 74 69 70 6c 65 24 28 |:c1+=.multiple$(| 00000df0 6d 75 6c 74 29 0d 06 04 05 cd 0d 06 0e 11 73 69 |mult).........si| 00000e00 64 65 3d 30 3a 62 65 73 74 3d 30 0d 06 18 11 e3 |de=0:best=0.....| 00000e10 63 32 3d 31 20 b8 6e 70 5f 6c 65 6e 0d 06 22 14 |c2=1 .np_len..".| 00000e20 6c 65 6e 3d a9 6c 65 6e 67 74 68 24 28 63 32 29 |len=.length$(c2)| 00000e30 0d 06 2c 14 e7 6c 65 6e 20 80 6c 65 6e 3e 62 65 |..,..len .len>be| 00000e40 73 74 20 8c 0d 06 36 36 e7 6c 65 6e 67 74 68 24 |st ...66.length$| 00000e50 28 63 32 29 2b 22 59 4c 22 3d c1 62 67 24 2c 63 |(c2)+"YL"=.bg$,c| 00000e60 31 2c 6c 65 6e 2b 32 29 20 8c 73 69 64 65 3d 63 |1,len+2) .side=c| 00000e70 32 3a 62 65 73 74 3d 6c 65 6e 0d 06 40 38 e7 6c |2:best=len..@8.l| 00000e80 65 6e 67 74 68 24 28 63 32 29 2b 22 4f 58 59 22 |ength$(c2)+"OXY"| 00000e90 3d c1 62 67 24 2c 63 31 2c 6c 65 6e 2b 33 29 20 |=.bg$,c1,len+3) | 00000ea0 8c 65 73 74 65 72 3d 63 32 3a 62 65 73 74 3d 6c |.ester=c2:best=l| 00000eb0 65 6e 0d 06 4a 05 cd 0d 06 54 07 ed 63 32 0d 06 |en..J....T..c2..| 00000ec0 5e 35 e7 73 69 64 65 20 8c 20 64 65 74 61 69 6c |^5.side . detail| 00000ed0 73 28 6e 2c 31 29 3d 2d 73 69 64 65 3a 63 31 3d |s(n,1)=-side:c1=| 00000ee0 63 31 2b a9 6c 65 6e 67 74 68 24 28 73 69 64 65 |c1+.length$(side| 00000ef0 29 2b 32 0d 06 68 21 e7 65 73 74 65 72 20 8c 63 |)+2..h!.ester .c| 00000f00 31 2b 3d a9 6c 65 6e 67 74 68 24 28 65 73 74 65 |1+=.length$(este| 00000f10 72 29 2b 33 0d 06 72 0a 68 61 6c 6f 3d 30 0d 06 |r)+3..r.halo=0..| 00000f20 7c 16 e7 73 69 64 65 3d 30 20 80 65 73 74 65 72 ||..side=0 .ester| 00000f30 3d 30 20 8c 0d 06 86 0a 62 65 73 74 3d 30 0d 06 |=0 .....best=0..| 00000f40 90 11 e3 63 32 3d 31 20 b8 6e 70 5f 68 61 6c 0d |...c2=1 .np_hal.| 00000f50 06 9a 17 6c 65 6e 3d a9 68 61 6c 6f 67 65 6e 24 |...len=.halogen$| 00000f60 28 63 32 2c 30 29 0d 06 a4 41 e7 6c 65 6e 3e 62 |(c2,0)...A.len>b| 00000f70 65 73 74 20 80 6c 65 6e 20 80 68 61 6c 6f 67 65 |est .len .haloge| 00000f80 6e 24 28 63 32 2c 30 29 3d c1 62 67 24 2c 63 31 |n$(c2,0)=.bg$,c1| 00000f90 2c 6c 65 6e 29 20 8c 68 61 6c 6f 3d 63 32 3a 62 |,len) .halo=c2:b| 00000fa0 65 73 74 3d 6c 65 6e 0d 06 ae 07 ed 63 32 0d 06 |est=len.....c2..| 00000fb0 b8 33 e7 68 61 6c 6f 20 8c 20 64 65 74 61 69 6c |.3.halo . detail| 00000fc0 73 28 6e 2c 31 29 3d 68 61 6c 6f 3a 63 31 2b 3d |s(n,1)=halo:c1+=| 00000fd0 a9 68 61 6c 6f 67 65 6e 24 28 68 61 6c 6f 2c 30 |.halogen$(halo,0| 00000fe0 29 0d 06 c2 05 cd 0d 06 cc 08 6e 2b 3d 31 0d 06 |).........n+=1..| 00000ff0 d6 1d e7 68 61 6c 6f 2b 73 69 64 65 2b 65 73 74 |...halo+side+est| 00001000 65 72 20 8c 63 31 3d 63 31 2d 31 0d 06 e0 23 e7 |er .c1=c1-1...#.| 00001010 68 61 6c 6f 2b 73 69 64 65 2b 65 73 74 65 72 3d |halo+side+ester=| 00001020 30 20 8c 65 72 72 6f 72 24 2b 3d 22 55 22 0d 06 |0 .error$+="U"..| 00001030 ea 07 ed 63 31 0d 06 f4 05 e1 0d 06 fe 19 dd a4 |...c1...........| 00001040 72 65 6d 6f 76 65 73 70 61 63 65 73 28 74 65 78 |removespaces(tex| 00001050 74 24 29 0d 07 08 0b 6f 75 74 24 3d 22 22 0d 07 |t$)....out$=""..| 00001060 12 11 e3 63 38 3d 31 20 b8 a9 74 65 78 74 24 0d |...c8=1 ..text$.| 00001070 07 1c 24 6d 24 3d c1 74 65 78 74 24 2c 63 38 2c |..$m$=.text$,c8,| 00001080 31 29 3a 74 79 70 65 3d a4 6c 65 74 74 65 72 28 |1):type=.letter(| 00001090 6d 24 29 0d 07 26 22 e7 74 79 70 65 3c 34 20 80 |m$)..&".type<4 .| 000010a0 74 79 70 65 3e 2d 31 20 8c 6f 75 74 24 3d 6f 75 |type>-1 .out$=ou| 000010b0 74 24 2b 6d 24 0d 07 30 07 ed 63 38 0d 07 3a 09 |t$+m$..0..c8..:.| 000010c0 3d 6f 75 74 24 0d 07 44 14 dd a4 72 65 6d 6f 76 |=out$..D...remov| 000010d0 65 32 28 74 65 78 74 24 29 0d 07 4e 0b 6f 75 74 |e2(text$)..N.out| 000010e0 24 3d 22 22 0d 07 58 11 e3 63 38 3d 31 20 b8 a9 |$=""..X..c8=1 ..| 000010f0 74 65 78 74 24 0d 07 62 13 6d 24 3d c1 74 65 78 |text$..b.m$=.tex| 00001100 74 24 2c 63 38 2c 31 29 0d 07 6c 1a e7 6d 24 3c |t$,c8,1)..l..m$<| 00001110 3e 22 20 22 20 8c 6f 75 74 24 3d 6f 75 74 24 2b |>" " .out$=out$+| 00001120 6d 24 0d 07 76 07 ed 63 38 0d 07 80 09 3d 6f 75 |m$..v..c8....=ou| 00001130 74 24 0d 07 8a 13 dd f2 63 6c 65 61 6e 5f 75 70 |t$......clean_up| 00001140 5f 64 61 74 61 0d 07 94 22 e7 63 79 63 6c 69 63 |_data...".cyclic| 00001150 20 80 6c 65 6e 67 74 68 3c 33 20 8c 65 72 72 6f | .length<3 .erro| 00001160 72 24 2b 3d 22 43 22 0d 07 9e 10 e3 6e 3d 31 20 |r$+="C".....n=1 | 00001170 b8 6e 70 5f 6e 75 6d 0d 07 a8 23 e7 64 65 74 61 |.np_num...#.deta| 00001180 69 6c 73 28 6e 2c 30 29 3d 30 20 8c 64 65 74 61 |ils(n,0)=0 .deta| 00001190 69 6c 73 28 6e 2c 30 29 3d 31 0d 07 b2 40 e7 66 |ils(n,0)=1...@.f| 000011a0 6e 24 28 66 6e 2c 30 29 3d 22 4f 4e 45 22 20 80 |n$(fn,0)="ONE" .| 000011b0 28 66 6e 70 6f 73 73 28 31 29 3d 31 20 84 20 66 |(fnposs(1)=1 . f| 000011c0 6e 70 6f 73 73 28 31 29 3d 6c 65 6e 29 20 8c 65 |nposs(1)=len) .e| 000011d0 72 72 6f 72 24 2b 3d 22 6b 22 0d 07 bc 2a e7 6c |rror$+="k"...*.l| 000011e0 65 6e 67 74 68 3c 33 20 80 64 65 74 61 69 6c 73 |ength<3 .details| 000011f0 28 6e 2c 31 29 3c 30 20 8c 65 72 72 6f 72 24 2b |(n,1)<0 .error$+| 00001200 3d 22 44 22 0d 07 c6 07 63 3d 30 0d 07 d0 05 f5 |="D"....c=0.....| 00001210 0d 07 da 4c e7 28 6e 75 6d 73 28 6e 2c 63 29 3d |...L.(nums(n,c)=| 00001220 31 20 84 20 6e 75 6d 73 28 6e 2c 63 29 3d 6c 65 |1 . nums(n,c)=le| 00001230 6e 67 74 68 29 20 80 64 65 74 61 69 6c 73 28 6e |ngth) .details(n| 00001240 2c 31 29 3c 30 20 80 63 79 63 6c 69 63 3d 30 20 |,1)<0 .cyclic=0 | 00001250 8c 65 72 72 6f 72 24 2b 3d 22 45 22 0d 07 e4 22 |.error$+="E"..."| 00001260 e7 6e 75 6d 73 28 6e 2c 63 29 3e 6c 65 6e 67 74 |.nums(n,c)>lengt| 00001270 68 20 8c 65 72 72 6f 72 24 2b 3d 22 50 22 0d 07 |h .error$+="P"..| 00001280 ee 08 63 2b 3d 31 0d 07 f8 1c fd 20 6e 75 6d 73 |..c+=1..... nums| 00001290 28 6e 2c 63 29 3d 30 20 84 20 63 3d 6e 70 5f 6e |(n,c)=0 . c=np_n| 000012a0 75 6d 0d 08 02 17 e7 64 65 74 61 69 6c 73 28 6e |um.....details(n| 000012b0 2c 30 29 3e 63 2d 31 20 8c 0d 08 0c 2d e7 64 65 |,0)>c-1 ....-.de| 000012c0 74 61 69 6c 73 28 6e 2c 31 29 3c 30 20 80 63 79 |tails(n,1)<0 .cy| 000012d0 63 6c 69 63 3d 30 20 8c 73 75 72 65 3d 32 20 8b |clic=0 .sure=2 .| 000012e0 73 75 72 65 3d 31 0d 08 16 15 63 6f 75 6e 74 3d |sure=1....count=| 000012f0 a4 66 72 65 65 28 73 75 72 65 29 0d 08 20 17 e3 |.free(sure).. ..| 00001300 63 31 3d 63 20 b8 64 65 74 61 69 6c 73 28 6e 2c |c1=c .details(n,| 00001310 30 29 0d 08 2a 27 e7 63 6f 75 6e 74 3d 30 20 8c |0)..*'.count=0 .| 00001320 73 75 72 65 2b 3d 31 3a 63 6f 75 6e 74 3d a4 66 |sure+=1:count=.f| 00001330 72 65 65 28 73 75 72 65 29 0d 08 34 0c 63 6f 75 |ree(sure)..4.cou| 00001340 6e 74 2d 3d 31 0d 08 3e 13 6e 75 6d 73 28 6e 2c |nt-=1..>.nums(n,| 00001350 63 31 29 3d 73 75 72 65 0d 08 48 07 ed 63 31 0d |c1)=sure..H..c1.| 00001360 08 52 05 cd 0d 08 5c 06 ed 6e 0d 08 66 05 e1 0d |.R....\..n..f...| 00001370 08 70 11 dd f2 63 6c 65 61 6e 66 6e 70 6f 73 73 |.p...cleanfnposs| 00001380 0d 08 7a 11 e3 6e 33 3d 31 20 b8 6e 70 5f 6e 75 |..z..n3=1 .np_nu| 00001390 6d 0d 08 84 2f e7 66 6e 70 6f 73 73 28 6e 33 29 |m.../.fnposs(n3)| 000013a0 20 80 66 6e 70 6f 73 73 28 6e 33 29 3e 6c 65 6e | .fnposs(n3)>len| 000013b0 67 74 68 20 8c 65 72 72 6f 72 24 2b 3d 22 47 22 |gth .error$+="G"| 000013c0 0d 08 8e 07 ed 6e 33 0d 08 98 05 e1 0d 08 a2 16 |.....n3.........| 000013d0 dd f2 61 73 73 69 67 6e 5f 70 6f 73 69 74 69 6f |..assign_positio| 000013e0 6e 73 0d 08 ac 10 e3 6e 3d 31 20 b8 6c 65 6e 67 |ns.....n=1 .leng| 000013f0 74 68 0d 08 b6 11 e3 6e 32 3d 31 20 b8 6e 70 5f |th.....n2=1 .np_| 00001400 62 67 73 0d 08 c0 08 6e 33 3d 31 0d 08 ca 05 f5 |bgs....n3=1.....| 00001410 0d 08 d4 14 e7 6e 3d 6e 75 6d 73 28 6e 32 2c 6e |.....n=nums(n2,n| 00001420 33 29 20 8c 0d 08 de 3a e7 64 65 74 61 69 6c 73 |3) ....:.details| 00001430 28 6e 32 2c 31 29 3e 30 20 8c f2 63 61 72 62 6f |(n2,1)>0 ..carbo| 00001440 6e 28 6e 2c 68 61 6c 6f 67 65 6e 24 28 64 65 74 |n(n,halogen$(det| 00001450 61 69 6c 73 28 6e 32 2c 31 29 2c 32 29 29 0d 08 |ails(n2,1),2))..| 00001460 e8 36 e7 64 65 74 61 69 6c 73 28 6e 32 2c 31 29 |.6.details(n2,1)| 00001470 3c 30 20 8c f2 63 61 72 62 6f 6e 28 6e 2c c3 28 |<0 ..carbon(n,.(| 00001480 2d 64 65 74 61 69 6c 73 28 6e 32 2c 31 29 29 2b |-details(n2,1))+| 00001490 22 23 22 29 0d 08 f2 05 cd 0d 08 fc 09 6e 33 2b |"#").........n3+| 000014a0 3d 31 0d 09 06 13 fd 20 6e 75 6d 73 28 6e 32 2c |=1..... nums(n2,| 000014b0 6e 33 29 3d 30 0d 09 10 07 ed 6e 32 0d 09 1a 11 |n3)=0.....n2....| 000014c0 e3 6e 32 3d 31 20 b8 6e 70 5f 6e 75 6d 0d 09 24 |.n2=1 .np_num..$| 000014d0 13 e7 66 6e 70 6f 73 73 28 6e 32 29 3d 6e 20 8c |..fnposs(n2)=n .| 000014e0 0d 09 2e 0c e3 6e 33 3d 30 20 b8 31 0d 09 38 16 |.....n3=0 .1..8.| 000014f0 e7 66 6e 62 6f 6e 64 28 66 6e 2c 6e 33 29 3e 31 |.fnbond(fn,n3)>1| 00001500 20 8c 0d 09 42 1c 65 78 24 3d c3 28 66 6e 62 6f | ...B.ex$=.(fnbo| 00001510 6e 64 28 66 6e 2c 6e 33 29 29 2b 22 2f 22 0d 09 |nd(fn,n3))+"/"..| 00001520 4c 1a e3 6e 34 3d 31 20 b8 66 6e 62 6f 6e 64 28 |L..n4=1 .fnbond(| 00001530 66 6e 2c 6e 33 29 2d 31 0d 09 56 12 f2 63 61 72 |fn,n3)-1..V..car| 00001540 62 6f 6e 28 6e 2c 22 3e 22 29 0d 09 60 07 ed 6e |bon(n,">")..`..n| 00001550 34 0d 09 6a 05 cc 0d 09 74 0a 65 78 24 3d 22 22 |4..j....t.ex$=""| 00001560 0d 09 7e 05 cd 0d 09 88 33 e7 66 6e 62 6f 6e 64 |..~.....3.fnbond| 00001570 28 66 6e 2c 6e 33 29 20 8c f2 63 61 72 62 6f 6e |(fn,n3) ..carbon| 00001580 28 6e 2c 66 6e 64 65 74 61 69 6c 24 28 66 6e 2c |(n,fndetail$(fn,| 00001590 6e 33 29 2b 65 78 24 29 0d 09 92 07 ed 6e 33 0d |n3)+ex$).....n3.| 000015a0 09 9c 05 cd 0d 09 a6 07 ed 6e 32 0d 09 b0 06 ed |.........n2.....| 000015b0 6e 0d 09 ba 10 e3 6e 3d 31 20 b8 6c 65 6e 67 74 |n.....n=1 .lengt| 000015c0 68 0d 09 c4 0c e3 6e 32 3d 31 20 b8 34 0d 09 ce |h.....n2=1 .4...| 000015d0 2a e7 63 61 72 62 6f 6e 73 24 28 6e 2c 6e 32 29 |*.carbons$(n,n2)| 000015e0 3d 22 22 20 8c 63 61 72 62 6f 6e 73 24 28 6e 2c |="" .carbons$(n,| 000015f0 6e 32 29 3d 22 48 22 0d 09 d8 07 ed 6e 32 0d 09 |n2)="H".....n2..| 00001600 e2 06 ed 6e 0d 09 ec 05 e1 0d 09 f6 16 dd f2 63 |...n...........c| 00001610 61 72 62 6f 6e 28 63 62 2c 69 74 65 6d 24 29 0d |arbon(cb,item$).| 00001620 0a 00 07 63 3d 30 0d 0a 0a 05 f5 0d 0a 14 08 63 |...c=0.........c| 00001630 2b 3d 31 0d 0a 1e 1d fd 20 63 61 72 62 6f 6e 73 |+=1..... carbons| 00001640 24 28 63 62 2c 63 29 3d 22 22 20 84 20 63 3d 34 |$(cb,c)="" . c=4| 00001650 0d 0a 28 31 e7 63 61 72 62 6f 6e 73 24 28 63 62 |..(1.carbons$(cb| 00001660 2c 34 29 3e 22 22 20 8c 65 72 72 6f 72 24 3d 65 |,4)>"" .error$=e| 00001670 72 72 6f 72 24 2b 22 46 22 3a 66 75 6c 6c 3d 63 |rror$+"F":full=c| 00001680 62 0d 0a 32 18 63 61 72 62 6f 6e 73 24 28 63 62 |b..2.carbons$(cb| 00001690 2c 63 29 3d 69 74 65 6d 24 0d 0a 3c 05 e1 0d 0a |,c)=item$..<....| 000016a0 46 0f dd f2 73 6f 72 74 62 6f 6e 64 73 0d 0a 50 |F...sortbonds..P| 000016b0 5a e7 a4 61 74 74 72 28 66 6e 2c 34 29 3e 31 20 |Z..attr(fn,4)>1 | 000016c0 80 28 6d 75 6c 74 62 6f 6e 64 3e 6c 65 6e 67 74 |.(multbond>lengt| 000016d0 68 2d 31 20 80 63 79 63 6c 69 63 3d 30 29 20 84 |h-1 .cyclic=0) .| 000016e0 20 28 63 79 63 6c 69 63 20 80 6d 75 6c 74 62 6f | (cyclic .multbo| 000016f0 6e 64 3e 6c 65 6e 67 74 68 29 20 8c 65 72 72 6f |nd>length) .erro| 00001700 72 24 2b 3d 22 42 22 0d 0a 5a 1e e7 66 6e 70 6f |r$+="B"..Z..fnpo| 00001710 73 73 28 32 29 3d 30 20 80 6d 75 6c 74 62 6f 6e |ss(2)=0 .multbon| 00001720 64 3e 31 20 8c 0d 0a 64 27 e3 6e 3d 32 20 b8 6d |d>1 ...d'.n=2 .m| 00001730 75 6c 74 62 6f 6e 64 3a 62 6f 6e 64 73 28 6e 29 |ultbond:bonds(n)| 00001740 3d a4 61 74 74 72 28 66 6e 2c 34 29 0d 0a 6e 0f |=.attr(fn,4)..n.| 00001750 66 6e 70 6f 73 73 28 6e 29 3d 6e 0d 0a 78 06 ed |fnposs(n)=n..x..| 00001760 6e 0d 0a 82 05 cd 0d 0a 8c 0f e7 6c 65 6e 67 74 |n..........lengt| 00001770 68 3e 31 20 8c 0d 0a 96 14 e7 a4 61 74 74 72 28 |h>1 .......attr(| 00001780 66 6e 2c 34 29 3e 31 20 8c 0d 0a a0 11 e3 6e 32 |fn,4)>1 ......n2| 00001790 3d 31 20 b8 6c 65 6e 67 74 68 0d 0a aa 11 e3 63 |=1 .length.....c| 000017a0 38 3d 31 20 b8 6e 70 5f 62 67 73 0d 0a b4 35 e7 |8=1 .np_bgs...5.| 000017b0 66 6e 70 6f 73 73 28 63 38 29 3d 6c 65 6e 67 74 |fnposs(c8)=lengt| 000017c0 68 20 80 63 79 63 6c 69 63 3d 30 20 8c 66 6e 70 |h .cyclic=0 .fnp| 000017d0 6f 73 73 28 63 38 29 3d 6c 65 6e 67 74 68 2d 31 |oss(c8)=length-1| 000017e0 0d 0a be 23 e7 66 6e 70 6f 73 73 28 63 38 29 3e |...#.fnposs(c8)>| 000017f0 6c 65 6e 67 74 68 20 8c 65 72 72 6f 72 24 2b 3d |length .error$+=| 00001800 22 42 22 0d 0a c8 29 e7 6e 32 3d 66 6e 70 6f 73 |"B"...).n2=fnpos| 00001810 73 28 63 38 29 20 8c 62 6f 6e 64 73 28 6e 32 29 |s(c8) .bonds(n2)| 00001820 3d a4 61 74 74 72 28 66 6e 2c 34 29 0d 0a d2 1c |=.attr(fn,4)....| 00001830 e7 66 6e 70 6f 73 73 28 63 38 29 3d 30 20 8c 63 |.fnposs(c8)=0 .c| 00001840 38 3d 6e 70 5f 62 67 73 0d 0a dc 07 ed 63 38 0d |8=np_bgs.....c8.| 00001850 0a e6 07 ed 6e 32 0d 0a f0 05 cd 0d 0a fa 11 e3 |....n2..........| 00001860 6e 32 3d 31 20 b8 6c 65 6e 67 74 68 0d 0b 04 13 |n2=1 .length....| 00001870 f2 63 61 72 62 6f 6e 28 6e 32 2c 22 3e 22 29 0d |.carbon(n2,">").| 00001880 0b 0e 0a 74 79 70 65 3d 32 0d 0b 18 11 e7 6e 32 |...type=2.....n2| 00001890 3d 31 20 8c 74 79 70 65 3d 31 0d 0b 22 16 e7 6e |=1 .type=1.."..n| 000018a0 32 3d 6c 65 6e 67 74 68 20 8c 74 79 70 65 3d 33 |2=length .type=3| 000018b0 0d 0b 2c 2c e7 74 79 70 65 3d 32 20 84 20 63 79 |..,,.type=2 . cy| 000018c0 63 6c 69 63 20 84 20 62 65 6e 7a 20 8c f2 63 61 |clic . benz ..ca| 000018d0 72 62 6f 6e 28 6e 32 2c 22 3e 22 29 0d 0b 36 1a |rbon(n2,">")..6.| 000018e0 e7 62 65 6e 7a 20 8c f2 63 61 72 62 6f 6e 28 6e |.benz ..carbon(n| 000018f0 32 2c 22 3e 22 29 0d 0b 40 12 e7 62 6f 6e 64 73 |2,">")..@..bonds| 00001900 28 6e 32 29 3e 31 20 8c 0d 0b 4a 14 e3 63 33 3d |(n2)>1 ...J..c3=| 00001910 32 20 b8 62 6f 6e 64 73 28 6e 32 29 0d 0b 54 0a |2 .bonds(n2)..T.| 00001920 6e 65 78 74 3d 30 0d 0b 5e 19 e7 6e 32 3c 6c 65 |next=0..^..n2<le| 00001930 6e 67 74 68 20 8c 6e 65 78 74 3d 6e 32 2b 31 0d |ngth .next=n2+1.| 00001940 0b 68 1e e7 6e 32 3d 6c 65 6e 67 74 68 20 80 63 |.h..n2=length .c| 00001950 79 63 6c 69 63 20 8c 6e 65 78 74 3d 31 0d 0b 72 |yclic .next=1..r| 00001960 13 f2 63 61 72 62 6f 6e 28 6e 32 2c 22 3e 22 29 |..carbon(n2,">")| 00001970 0d 0b 7c 1c e7 6e 65 78 74 20 8c f2 63 61 72 62 |..|..next ..carb| 00001980 6f 6e 28 6e 65 78 74 2c 22 3e 22 29 0d 0b 86 07 |on(next,">")....| 00001990 ed 63 33 0d 0b 90 05 cd 0d 0b 9a 07 ed 6e 32 0d |.c3..........n2.| 000019a0 0b a4 05 cd 0d 0b ae 05 e1 0d 0b b8 0f dd a4 75 |...............u| 000019b0 73 65 64 28 63 62 6e 29 0d 0b c2 0a 75 73 65 64 |sed(cbn)....used| 000019c0 3d 30 0d 0b cc 0c e3 63 31 3d 31 20 b8 34 0d 0b |=0.....c1=1 .4..| 000019d0 d6 23 e7 63 61 72 62 6f 6e 73 24 28 63 62 6e 2c |.#.carbons$(cbn,| 000019e0 63 31 29 3c 3e 22 3e 22 20 8c 75 73 65 64 2b 3d |c1)<>">" .used+=| 000019f0 31 0d 0b e0 07 ed 63 31 0d 0b ea 09 3d 75 73 65 |1.....c1....=use| 00001a00 64 0d 0b f4 1e dd a4 73 74 72 75 63 74 75 72 61 |d......structura| 00001a10 6c 28 73 74 61 72 74 2c 66 69 6e 69 73 68 29 0d |l(start,finish).| 00001a20 0b fe 0c 73 74 72 75 24 3d 22 22 0d 0c 08 15 e3 |...stru$="".....| 00001a30 6e 32 3d 73 74 61 72 74 20 b8 66 69 6e 69 73 68 |n2=start .finish| 00001a40 0d 0c 12 24 e7 62 6f 6e 64 73 28 6e 32 2d 31 29 |...$.bonds(n2-1)| 00001a50 3d 32 20 80 6e 32 2d 31 20 8c 73 74 72 75 24 2b |=2 .n2-1 .stru$+| 00001a60 3d 22 3d 22 0d 0c 1c 32 73 74 72 75 24 2b 3d 63 |="="...2stru$+=c| 00001a70 73 24 28 6e 32 29 3a 6d 61 6e 79 3d a4 68 6f 77 |s$(n2):many=.how| 00001a80 6d 61 6e 79 28 6e 32 2c 22 48 22 29 3a 63 61 72 |many(n2,"H"):car| 00001a90 62 24 3d 22 48 22 0d 0c 26 24 e7 6d 61 6e 79 20 |b$="H"..&$.many | 00001aa0 8c 73 74 72 75 24 2b 3d 22 48 22 3a f2 63 6f 75 |.stru$+="H":.cou| 00001ab0 6e 74 65 72 73 79 73 74 65 6d 0d 0c 30 0c e3 63 |ntersystem..0..c| 00001ac0 33 3d 31 20 b8 34 0d 0c 3a 19 63 61 72 62 24 3d |3=1 .4..:.carb$=| 00001ad0 63 61 72 62 6f 6e 73 24 28 6e 32 2c 63 33 29 0d |carbons$(n2,c3).| 00001ae0 0c 44 42 e7 a7 63 61 72 62 24 2c 22 2a 22 29 20 |.DB..carb$,"*") | 00001af0 8c c1 63 61 72 62 24 2c a7 63 61 72 62 24 2c 22 |..carb$,.carb$,"| 00001b00 2a 22 29 2c 32 29 3d 22 20 20 22 3a 63 61 72 62 |*"),2)=" ":carb| 00001b10 24 3d a4 72 65 6d 6f 76 65 32 28 63 61 72 62 24 |$=.remove2(carb$| 00001b20 29 0d 0c 4e 29 e7 63 61 72 62 24 3c 3e 22 3e 22 |)..N).carb$<>">"| 00001b30 20 80 63 61 72 62 24 3c 3e 22 48 22 20 80 bb 28 | .carb$<>"H" ..(| 00001b40 63 61 72 62 24 29 3d 30 20 8c 0d 0c 58 44 e7 a7 |carb$)=0 ...XD..| 00001b50 63 61 72 62 24 2c 22 2f 22 29 20 8c c1 63 61 72 |carb$,"/") ..car| 00001b60 62 24 2c a7 63 61 72 62 24 2c 22 2f 22 29 2d 31 |b$,.carb$,"/")-1| 00001b70 2c 32 29 3d 22 20 20 22 3a 63 61 72 62 24 3d a4 |,2)=" ":carb$=.| 00001b80 72 65 6d 6f 76 65 32 28 63 61 72 62 24 29 0d 0c |remove2(carb$)..| 00001b90 62 10 73 74 72 75 24 2b 3d 63 61 72 62 24 0d 0c |b.stru$+=carb$..| 00001ba0 6c 12 f2 63 6f 75 6e 74 65 72 73 79 73 74 65 6d |l..countersystem| 00001bb0 0d 0c 76 05 cd 0d 0c 80 07 ed 63 33 0d 0c 8a 0b |..v.......c3....| 00001bc0 63 6f 75 6e 74 3d 30 0d 0c 94 0d 6c 63 61 72 62 |count=0....lcarb| 00001bd0 24 3d 22 22 0d 0c 9e 0c e3 63 33 3d 31 20 b8 34 |$="".....c3=1 .4| 00001be0 0d 0c a8 19 63 61 72 62 24 3d 63 61 72 62 6f 6e |....carb$=carbon| 00001bf0 73 24 28 6e 32 2c 63 33 29 0d 0c b2 13 6d 65 74 |s$(n2,c3)....met| 00001c00 68 79 6c 3d bb 28 63 61 72 62 24 29 0d 0c bc 0d |hyl=.(carb$)....| 00001c10 e7 6d 65 74 68 79 6c 20 8c 0d 0c c6 2c e7 6d 65 |.methyl ....,.me| 00001c20 74 68 79 6c 3e 31 20 8c 6e 6f 74 6f 6e 65 24 3d |thyl>1 .notone$=| 00001c30 c3 28 6d 65 74 68 79 6c 29 20 8b 6e 6f 74 6f 6e |.(methyl) .noton| 00001c40 65 24 3d 22 22 0d 0c d0 3e e7 63 6f 75 6e 74 3d |e$=""...>.count=| 00001c50 30 20 8c 73 74 72 75 24 3d 73 74 72 75 24 2b 22 |0 .stru$=stru$+"| 00001c60 28 43 22 2b 6e 6f 74 6f 6e 65 24 2b 22 48 22 2b |(C"+notone$+"H"+| 00001c70 c3 28 28 6d 65 74 68 79 6c 2a 32 29 2b 31 29 2b |.((methyl*2)+1)+| 00001c80 22 29 22 0d 0c da 12 f2 63 6f 75 6e 74 65 72 73 |")".....counters| 00001c90 79 73 74 65 6d 0d 0c e4 05 cd 0d 0c ee 07 ed 63 |ystem..........c| 00001ca0 33 0d 0c f8 07 ed 6e 32 0d 0d 02 0a 3d 73 74 72 |3.....n2....=str| 00001cb0 75 24 0d 0d 0c 13 dd f2 63 6f 75 6e 74 65 72 73 |u$......counters| 00001cc0 79 73 74 65 6d 0d 0d 16 1b 6d 61 6e 79 3d a4 68 |ystem....many=.h| 00001cd0 6f 77 6d 61 6e 79 28 6e 32 2c 63 61 72 62 24 29 |owmany(n2,carb$)| 00001ce0 0d 0d 20 37 e7 6d 61 6e 79 3e 31 20 80 63 61 72 |.. 7.many>1 .car| 00001cf0 62 24 3e 22 22 20 8c 73 74 72 75 24 3d 73 74 72 |b$>"" .stru$=str| 00001d00 75 24 2b c3 28 6d 61 6e 79 29 3a 63 33 2b 3d 28 |u$+.(many):c3+=(| 00001d10 6d 61 6e 79 2d 31 29 0d 0d 2a 05 e1 0d 0d 34 15 |many-1)..*....4.| 00001d20 dd a4 66 69 6e 64 74 65 78 74 28 74 65 78 74 24 |..findtext(text$| 00001d30 29 0d 0d 3e 14 63 68 65 63 6b 3d a7 6e 24 2c 74 |)..>.check=.n$,t| 00001d40 65 78 74 24 29 0d 0d 48 39 e7 63 68 65 63 6b 20 |ext$)..H9.check | 00001d50 8c 70 6f 73 3d 70 6f 73 2d a9 74 65 78 74 24 3a |.pos=pos-.text$:| 00001d60 c1 6e 24 2c 63 68 65 63 6b 2c a9 74 65 78 74 24 |.n$,check,.text$| 00001d70 29 3d c4 a9 74 65 78 74 24 2c 22 20 22 29 0d 0d |)=..text$," ")..| 00001d80 52 0d 3d b4 28 63 68 65 63 6b 29 0d 0d 5c 0c dd |R.=.(check)..\..| 00001d90 f2 70 61 72 72 6f 74 0d 0d 66 0d 70 6f 6c 79 70 |.parrot..f.polyp| 00001da0 6f 73 3d 30 0d 0d 70 11 e3 6e 32 3d 31 20 b8 6c |os=0..p..n2=1 .l| 00001db0 65 6e 67 74 68 0d 0d 7a 1c e7 62 6f 6e 64 73 28 |ength..z..bonds(| 00001dc0 6e 32 29 3d 32 20 8c 70 6f 6c 79 70 6f 73 3d 6e |n2)=2 .polypos=n| 00001dd0 32 0d 0d 84 07 ed 6e 32 0d 0d 8e 14 62 6f 6e 64 |2.....n2....bond| 00001de0 73 28 70 6f 6c 79 70 6f 73 29 3d 31 0d 0d 98 10 |s(polypos)=1....| 00001df0 e7 70 6f 6c 79 70 6f 73 3d 30 20 8c 0d 0d a2 0f |.polypos=0 .....| 00001e00 65 72 72 6f 72 24 2b 3d 22 48 22 0d 0d ac 05 cc |error$+="H".....| 00001e10 0d 0d b6 14 f2 72 65 64 75 63 65 28 70 6f 6c 79 |.....reduce(poly| 00001e20 70 6f 73 29 0d 0d c0 0d e3 72 65 70 3d 30 20 b8 |pos).....rep=0 .| 00001e30 31 0d 0d ca 3d 6c 6f 63 3d a4 66 69 6e 64 28 70 |1...=loc=.find(p| 00001e40 6f 6c 79 70 6f 73 2b 72 65 70 2c 22 3e 22 29 3a |olypos+rep,">"):| 00001e50 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 |carbons$(polypos| 00001e60 2b 72 65 70 2c 6c 6f 63 29 3d 22 31 2f 22 0d 0d |+rep,loc)="1/"..| 00001e70 d4 4f c8 94 20 63 61 72 62 6f 6e 73 24 28 70 6f |.O.. carbons$(po| 00001e80 6c 79 70 6f 73 2b 72 65 70 2c 6c 6f 63 29 2c 63 |lypos+rep,loc),c| 00001e90 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2b |arbons$(polypos+| 00001ea0 72 65 70 2c 32 2b a4 66 69 6e 64 28 70 6f 6c 79 |rep,2+.find(poly| 00001eb0 70 6f 73 2b 72 65 70 2c 22 3e 22 29 29 0d 0d de |pos+rep,">"))...| 00001ec0 08 ed 72 65 70 0d 0d e8 19 f2 73 68 69 66 74 64 |..rep.....shiftd| 00001ed0 61 74 61 28 70 6f 6c 79 70 6f 73 2d 31 29 0d 0d |ata(polypos-1)..| 00001ee0 f2 0c 6c 65 6e 67 74 68 3d 32 0d 0d fc 05 cd 0d |..length=2......| 00001ef0 0e 06 05 e1 0d 0e 10 15 dd f2 72 65 64 75 63 65 |..........reduce| 00001f00 28 70 6f 6c 79 70 6f 73 29 0d 0e 1a 17 e7 6c 65 |(polypos).....le| 00001f10 6e 67 74 68 3e 70 6f 6c 79 70 6f 73 2b 31 20 8c |ngth>polypos+1 .| 00001f20 0d 0e 24 1e 77 68 65 72 65 3d a4 66 69 6e 64 28 |..$.where=.find(| 00001f30 70 6f 6c 79 70 6f 73 2b 31 2c 22 3e 22 29 0d 0e |polypos+1,">")..| 00001f40 2e 27 e7 6c 65 6e 67 74 68 2d 70 6f 6c 79 70 6f |.'.length-polypo| 00001f50 73 3e 32 20 8c 65 78 24 3d 22 2a 33 22 20 8b 65 |s>2 .ex$="*3" .e| 00001f60 78 24 3d 22 22 0d 0e 38 3f 63 61 72 62 6f 6e 73 |x$=""..8?carbons| 00001f70 24 28 70 6f 6c 79 70 6f 73 2b 31 2c 77 68 65 72 |$(polypos+1,wher| 00001f80 65 29 3d a4 73 74 72 75 63 74 75 72 61 6c 28 70 |e)=.structural(p| 00001f90 6f 6c 79 70 6f 73 2b 32 2c 6c 65 6e 67 74 68 29 |olypos+2,length)| 00001fa0 2b 65 78 24 0d 0e 42 64 e7 62 6f 6e 64 73 28 70 |+ex$..Bd.bonds(p| 00001fb0 6f 6c 79 70 6f 73 2b 31 29 3e 31 20 8c 63 61 72 |olypos+1)>1 .car| 00001fc0 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2b 31 2c |bons$(polypos+1,| 00001fd0 77 68 65 72 65 29 3d 63 61 72 62 6f 6e 73 24 28 |where)=carbons$(| 00001fe0 70 6f 6c 79 70 6f 73 2b 31 2c 77 68 65 72 65 29 |polypos+1,where)| 00001ff0 2b c3 28 62 6f 6e 64 73 28 70 6f 6c 79 70 6f 73 |+.(bonds(polypos| 00002000 2b 31 29 29 2b 22 2f 22 0d 0e 4c 05 cd 0d 0e 56 |+1))+"/"..L....V| 00002010 10 e7 70 6f 6c 79 70 6f 73 3e 31 20 8c 0d 0e 60 |..polypos>1 ...`| 00002020 1c 77 68 65 72 65 3d a4 66 69 6e 64 28 70 6f 6c |.where=.find(pol| 00002030 79 70 6f 73 2c 22 3e 22 29 0d 0e 6a 20 e7 70 6f |ypos,">")..j .po| 00002040 6c 79 70 6f 73 3e 32 20 8c 65 78 24 3d 22 2a 31 |lypos>2 .ex$="*1| 00002050 22 20 8b 65 78 24 3d 22 22 0d 0e 74 38 63 61 72 |" .ex$=""..t8car| 00002060 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2c 77 68 |bons$(polypos,wh| 00002070 65 72 65 29 3d a4 73 74 72 75 63 74 75 72 61 6c |ere)=.structural| 00002080 28 31 2c 70 6f 6c 79 70 6f 73 2d 31 29 2b 65 78 |(1,polypos-1)+ex| 00002090 24 0d 0e 7e 60 e7 62 6f 6e 64 73 28 70 6f 6c 79 |$..~`.bonds(poly| 000020a0 70 6f 73 2d 31 29 3e 31 20 8c 63 61 72 62 6f 6e |pos-1)>1 .carbon| 000020b0 73 24 28 70 6f 6c 79 70 6f 73 2c 77 68 65 72 65 |s$(polypos,where| 000020c0 29 3d 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 |)=carbons$(polyp| 000020d0 6f 73 2c 77 68 65 72 65 29 2b c3 28 62 6f 6e 64 |os,where)+.(bond| 000020e0 73 28 70 6f 6c 79 70 6f 73 2d 31 29 29 2b 22 2f |s(polypos-1))+"/| 000020f0 22 0d 0e 88 05 cd 0d 0e 92 05 e1 0d 0e 9c 16 dd |"...............| 00002100 f2 73 68 69 66 74 64 61 74 61 28 73 68 69 66 74 |.shiftdata(shift| 00002110 29 0d 0e a6 10 e3 6e 3d 31 20 b8 6c 65 6e 67 74 |).....n=1 .lengt| 00002120 68 0d 0e b0 0c e3 63 33 3d 31 20 b8 34 0d 0e ba |h.....c3=1 .4...| 00002130 3f 63 61 72 62 6f 6e 73 24 28 6e 2c 63 33 29 3d |?carbons$(n,c3)=| 00002140 63 61 72 62 6f 6e 73 24 28 6e 2b 73 68 69 66 74 |carbons$(n+shift| 00002150 2c 63 33 29 3a 62 6f 6e 64 73 28 6e 29 3d 62 6f |,c3):bonds(n)=bo| 00002160 6e 64 73 28 6e 2b 73 68 69 66 74 29 0d 0e c4 07 |nds(n+shift)....| 00002170 ed 63 33 0d 0e ce 06 ed 6e 0d 0e d8 05 e1 0d 0e |.c3.....n.......| 00002180 e2 0f dd f2 6d 65 74 73 65 61 72 63 68 0d 0e ec |....metsearch...| 00002190 09 6d 65 74 3d 30 0d 0e f6 11 e3 63 38 3d 31 20 |.met=0.....c8=1 | 000021a0 b8 6e 70 5f 6d 65 74 0d 0f 00 35 e7 a4 66 69 6e |.np_met...5..fin| 000021b0 64 74 65 78 74 28 6d 65 74 61 6c 24 28 63 38 2c |dtext(metal$(c8,| 000021c0 30 29 29 20 80 6d 65 74 61 6c 24 28 63 38 2c 30 |0)) .metal$(c8,0| 000021d0 29 3e 22 22 20 8c 6d 65 74 3d 63 38 0d 0f 0a 07 |)>"" .met=c8....| 000021e0 ed 63 38 0d 0f 14 05 e1 0d 0f 1e 13 dd a4 66 69 |.c8...........fi| 000021f0 6e 64 28 6e 2c 74 65 78 74 24 29 0d 0f 28 09 70 |nd(n,text$)..(.p| 00002200 6f 73 3d 30 0d 0f 32 0c e3 63 38 3d 31 20 b8 34 |os=0..2..c8=1 .4| 00002210 0d 0f 3c 21 e7 63 61 72 62 6f 6e 73 24 28 6e 2c |..<!.carbons$(n,| 00002220 63 38 29 3d 74 65 78 74 24 20 8c 70 6f 73 3d 63 |c8)=text$ .pos=c| 00002230 38 0d 0f 46 07 ed 63 38 0d 0f 50 08 3d 70 6f 73 |8..F..c8..P.=pos| 00002240 0d 0f 5a 16 dd a4 68 6f 77 6d 61 6e 79 28 6e 2c |..Z...howmany(n,| 00002250 74 65 78 74 24 29 0d 0f 64 0a 6d 61 6e 79 3d 30 |text$)..d.many=0| 00002260 0d 0f 6e 0c e3 63 38 3d 31 20 b8 34 0d 0f 78 22 |..n..c8=1 .4..x"| 00002270 e7 63 61 72 62 6f 6e 73 24 28 6e 2c 63 38 29 3d |.carbons$(n,c8)=| 00002280 74 65 78 74 24 20 8c 6d 61 6e 79 2b 3d 31 0d 0f |text$ .many+=1..| 00002290 82 07 ed 63 38 0d 0f 8c 09 3d 6d 61 6e 79 0d 0f |...c8....=many..| 000022a0 96 0b dd f2 65 73 74 65 72 0d 0f a0 42 63 73 24 |....ester...Bcs$| 000022b0 28 65 73 74 65 72 2b 31 29 3d 22 4f 22 3a 63 61 |(ester+1)="O":ca| 000022c0 72 62 6f 6e 73 24 28 65 73 74 65 72 2b 31 2c 33 |rbons$(ester+1,3| 000022d0 29 3d 22 22 3a 63 61 72 62 6f 6e 73 24 28 65 73 |)="":carbons$(es| 000022e0 74 65 72 2b 31 2c 34 29 3d 22 22 0d 0f aa 05 e1 |ter+1,4)="".....| 000022f0 0d 0f b4 0f dd f2 70 68 65 6e 6f 6c 69 7a 65 0d |......phenolize.| 00002300 0f be 27 66 3d 34 3a 66 3d a4 66 69 6e 64 28 31 |..'f=4:f=.find(1| 00002310 2c 22 48 22 29 3a 63 61 72 62 6f 6e 73 24 28 31 |,"H"):carbons$(1| 00002320 2c 66 29 3d 22 22 0d 0f c8 5b 72 65 73 74 24 3d |,f)=""...[rest$=| 00002330 a4 73 74 72 75 63 74 75 72 61 6c 28 31 2c 6c 65 |.structural(1,le| 00002340 6e 67 74 68 29 3a 6c 65 6e 67 74 68 3d 36 3a 63 |ngth):length=6:c| 00002350 79 63 6c 69 63 3d 31 3a 62 65 6e 7a 3d 31 3a 66 |yclic=1:benz=1:f| 00002360 6e 70 6f 73 73 28 29 3d 30 3a 66 6e 3d 30 3a 6e |nposs()=0:fn=0:n| 00002370 75 6d 73 28 29 3d 30 3a 62 6f 6e 64 73 28 29 3d |ums()=0:bonds()=| 00002380 30 0d 0f d2 42 63 61 72 62 6f 6e 73 24 28 29 3d |0...Bcarbons$()=| 00002390 22 22 3a f2 73 6f 72 74 62 6f 6e 64 73 3a f2 61 |"":.sortbonds:.a| 000023a0 73 73 69 67 6e 5f 70 6f 73 69 74 69 6f 6e 73 3a |ssign_positions:| 000023b0 63 61 72 62 6f 6e 73 24 28 31 2c 34 29 3d 72 65 |carbons$(1,4)=re| 000023c0 73 74 24 0d 0f dc 05 e1 0d 0f e6 0e dd f2 63 69 |st$...........ci| 000023d0 73 74 72 61 6e 73 0d 0f f0 0d 70 6f 6c 79 70 6f |strans....polypo| 000023e0 73 3d 30 0d 0f fa 10 e3 6e 3d 31 20 b8 6c 65 6e |s=0.....n=1 .len| 000023f0 67 74 68 0d 10 04 1a e7 62 6f 6e 64 73 28 6e 29 |gth.....bonds(n)| 00002400 3d 32 20 8c 70 6f 6c 79 70 6f 73 3d 6e 0d 10 0e |=2 .polypos=n...| 00002410 06 ed 6e 0d 10 18 0e e7 70 6f 6c 79 70 6f 73 20 |..n.....polypos | 00002420 8c 0d 10 22 14 f2 72 65 64 75 63 65 28 70 6f 6c |..."..reduce(pol| 00002430 79 70 6f 73 29 0d 10 2c 0c 6c 65 6e 67 74 68 3d |ypos)..,.length=| 00002440 32 0d 10 36 0a e7 63 69 73 20 8c 0d 10 40 5a e7 |2..6..cis ...@Z.| 00002450 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 |carbons$(polypos| 00002460 2c 33 29 3d 63 61 72 62 6f 6e 73 24 28 70 6f 6c |,3)=carbons$(pol| 00002470 79 70 6f 73 2b 31 2c 34 29 20 8c c8 94 20 63 61 |ypos+1,4) ... ca| 00002480 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2c 33 |rbons$(polypos,3| 00002490 29 2c 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 |),carbons$(polyp| 000024a0 6f 73 2c 34 29 0d 10 4a 05 cc 0d 10 54 5a e7 63 |os,4)..J....TZ.c| 000024b0 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2c |arbons$(polypos,| 000024c0 33 29 3d 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 |3)=carbons$(poly| 000024d0 70 6f 73 2b 31 2c 33 29 20 8c c8 94 20 63 61 72 |pos+1,3) ... car| 000024e0 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2c 33 29 |bons$(polypos,3)| 000024f0 2c 63 61 72 62 6f 6e 73 24 28 70 6f 6c 79 70 6f |,carbons$(polypo| 00002500 73 2c 34 29 0d 10 5e 5a e7 63 61 72 62 6f 6e 73 |s,4)..^Z.carbons| 00002510 24 28 70 6f 6c 79 70 6f 73 2c 34 29 3d 63 61 72 |$(polypos,4)=car| 00002520 62 6f 6e 73 24 28 70 6f 6c 79 70 6f 73 2b 31 2c |bons$(polypos+1,| 00002530 34 29 20 8c c8 94 20 63 61 72 62 6f 6e 73 24 28 |4) ... carbons$(| 00002540 70 6f 6c 79 70 6f 73 2c 34 29 2c 63 61 72 62 6f |polypos,4),carbo| 00002550 6e 73 24 28 70 6f 6c 79 70 6f 73 2c 33 29 0d 10 |ns$(polypos,3)..| 00002560 68 05 cd 0d 10 72 19 f2 73 68 69 66 74 64 61 74 |h....r..shiftdat| 00002570 61 28 70 6f 6c 79 70 6f 73 2d 31 29 0d 10 7c 05 |a(polypos-1)..|.| 00002580 cc 0d 10 86 0f 65 72 72 6f 72 24 2b 3d 22 54 22 |.....error$+="T"| 00002590 0d 10 90 05 cd 0d 10 9a 05 e1 0d 10 a4 17 dd f2 |................| 000025a0 65 72 72 6f 72 72 65 70 6f 72 74 28 65 72 72 24 |errorreport(err$| 000025b0 29 0d 10 ae 16 65 72 72 24 3d a4 63 61 73 65 28 |)....err$=.case(| 000025c0 65 72 72 24 2c 31 29 0d 10 b8 0e 65 72 72 6f 75 |err$,1)....errou| 000025d0 74 24 3d 22 22 0d 10 c2 10 e3 6e 32 3d 31 20 b8 |t$="".....n2=1 .| 000025e0 a9 65 72 72 24 0d 10 cc 11 e3 63 38 3d 31 20 b8 |.err$.....c8=1 .| 000025f0 6e 70 5f 65 72 72 0d 10 d6 3b e7 c1 65 72 72 24 |np_err...;..err$| 00002600 2c 6e 32 2c 31 29 3d a4 63 61 73 65 28 65 72 72 |,n2,1)=.case(err| 00002610 6f 72 74 24 28 63 38 2c 30 29 2c 31 29 20 80 c1 |ort$(c8,0),1) ..| 00002620 65 72 72 6b 24 2c 63 38 2c 31 29 3d 22 30 22 20 |errk$,c8,1)="0" | 00002630 8c 0d 10 e0 18 61 73 63 3d 97 28 65 72 72 6f 72 |.....asc=.(error| 00002640 74 24 28 63 38 2c 30 29 29 0d 10 ea 1c e7 61 73 |t$(c8,0)).....as| 00002650 63 3e 36 34 20 80 61 73 63 3c 39 31 20 8c 66 61 |c>64 .asc<91 .fa| 00002660 74 61 6c 3d 31 0d 10 f4 14 c1 65 72 72 6b 24 2c |tal=1.....errk$,| 00002670 63 38 2c 31 29 3d 22 31 22 0d 10 fe 19 65 72 72 |c8,1)="1"....err| 00002680 6f 75 74 24 3d 65 72 72 6f 72 74 24 28 63 38 2c |out$=errort$(c8,| 00002690 31 29 0d 11 08 31 e7 65 72 72 6f 72 74 24 28 63 |1)...1.errort$(c| 000026a0 38 2c 30 29 3d 22 66 22 20 8c 65 78 74 72 61 24 |8,0)="f" .extra$| 000026b0 3d c3 28 66 75 6c 6c 29 20 8b 65 78 74 72 61 24 |=.(full) .extra$| 000026c0 3d 22 22 0d 11 12 05 cd 0d 11 1c 07 ed 63 38 0d |=""..........c8.| 000026d0 11 26 07 ed 6e 32 0d 11 30 1a e7 65 72 72 6f 75 |.&..n2..0..errou| 000026e0 74 24 3e 22 22 20 80 64 69 73 70 6c 61 79 20 8c |t$>"" .display .| 000026f0 0d 11 3a 30 f2 69 63 6f 6e 74 65 78 74 28 6d 65 |..:0.icontext(me| 00002700 73 73 25 2c 30 2c c0 65 72 72 6f 75 74 24 2c a7 |ss%,0,.errout$,.| 00002710 65 72 72 6f 75 74 24 2c 22 23 22 29 2d 31 29 29 |errout$,"#")-1))| 00002720 0d 11 44 3e f2 69 63 6f 6e 74 65 78 74 28 6d 65 |..D>.icontext(me| 00002730 73 73 25 2c 31 2c c2 65 72 72 6f 75 74 24 2c a9 |ss%,1,.errout$,.| 00002740 65 72 72 6f 75 74 24 2d a7 65 72 72 6f 75 74 24 |errout$-.errout$| 00002750 2c 22 23 22 29 29 2b 65 78 74 72 61 24 29 0d 11 |,"#"))+extra$)..| 00002760 4e 13 f2 6f 70 65 6e 77 69 6e 28 6d 65 73 73 25 |N..openwin(mess%| 00002770 29 0d 11 58 05 cd 0d 11 62 05 e1 0d 11 6c 1b dd |)..X....b....l..| 00002780 a4 70 75 74 62 61 63 6b 74 6f 67 65 74 68 65 72 |.putbacktogether| 00002790 28 74 69 6d 65 29 0d 11 76 0c 6e 65 61 74 24 3d |(time)..v.neat$=| 000027a0 22 22 0d 11 80 0c e7 65 73 74 65 72 20 8c 0d 11 |"".....ester ...| 000027b0 8a 42 3d a4 63 61 73 65 28 6c 65 6e 67 74 68 24 |.B=.case(length$| 000027c0 28 65 73 74 65 72 29 2c 32 29 2b 22 6f 78 79 22 |(ester),2)+"oxy"| 000027d0 2b a4 63 61 73 65 28 6c 65 6e 67 74 68 24 28 6c |+.case(length$(l| 000027e0 65 6e 67 74 68 32 29 2c 32 29 2b 22 61 6e 65 22 |ength2),2)+"ane"| 000027f0 0d 11 94 05 cc 0d 11 9e 22 e7 70 68 65 6e 79 6c |........".phenyl| 00002800 2b 63 69 73 2b 74 72 61 6e 73 2b 70 6f 6c 79 20 |+cis+trans+poly | 00002810 80 74 69 6d 65 20 8c 0d 11 a8 22 e7 70 68 65 6e |.time ....".phen| 00002820 79 6c 20 8c 6e 65 61 74 24 2b 3d 22 50 68 65 6e |yl .neat$+="Phen| 00002830 79 6c 22 2b 70 72 65 76 24 0d 11 b2 1c e7 63 69 |yl"+prev$.....ci| 00002840 73 20 8c 6e 65 61 74 24 2b 3d 22 43 69 73 22 2b |s .neat$+="Cis"+| 00002850 70 72 65 76 24 0d 11 bc 20 e7 74 72 61 6e 73 20 |prev$... .trans | 00002860 8c 6e 65 61 74 24 2b 3d 22 54 72 61 6e 73 22 2b |.neat$+="Trans"+| 00002870 70 72 65 76 24 0d 11 c6 23 e7 70 6f 6c 79 20 8c |prev$...#.poly .| 00002880 6e 65 61 74 24 2b 3d 22 50 6f 6c 79 28 22 2b 70 |neat$+="Poly("+p| 00002890 72 65 76 24 2b 22 29 22 0d 11 d0 05 cc 0d 11 da |rev$+")"........| 000028a0 2a e7 63 79 63 6c 69 63 20 80 a4 61 74 74 72 28 |*.cyclic ..attr(| 000028b0 66 6e 2c 32 29 3d 30 20 8c 6e 65 61 74 24 2b 3d |fn,2)=0 .neat$+=| 000028c0 22 43 79 63 6c 6f 22 0d 11 e4 31 e7 a4 61 74 74 |"Cyclo"...1..att| 000028d0 72 28 66 6e 2c 30 29 20 8c 6e 65 61 74 24 2b 3d |r(fn,0) .neat$+=| 000028e0 a4 63 61 73 65 28 6c 65 6e 67 74 68 24 28 6c 65 |.case(length$(le| 000028f0 6e 67 74 68 29 2c 32 29 0d 11 ee 23 6e 65 61 74 |ngth),2)...#neat| 00002900 24 2b 3d a4 63 61 73 65 28 66 6e 64 65 74 61 69 |$+=.case(fndetai| 00002910 6c 24 28 66 6e 2c 32 29 2c 33 29 0d 11 f8 29 e7 |l$(fn,2),3)...).| 00002920 66 6e 70 6f 73 73 28 32 29 20 80 a4 61 74 74 72 |fnposs(2) ..attr| 00002930 28 66 6e 2c 34 29 3e 31 20 8c 6e 65 61 74 24 2b |(fn,4)>1 .neat$+| 00002940 3d 22 61 22 0d 12 02 13 70 6f 73 24 3d a4 70 6f |="a"....pos$=.po| 00002950 73 69 74 69 6f 6e 73 0d 12 0c 82 e7 28 6c 65 6e |sitions.....(len| 00002960 67 74 68 3e 31 20 80 a4 61 74 74 72 28 66 6e 2c |gth>1 ..attr(fn,| 00002970 31 29 20 80 28 66 6e 64 65 74 61 69 6c 24 28 66 |1) .(fndetail$(f| 00002980 6e 2c 30 29 3c 3e 22 22 20 84 20 a4 61 74 74 72 |n,0)<>"" . .attr| 00002990 28 66 6e 2c 34 29 3e 31 29 29 20 84 20 28 a4 61 |(fn,4)>1)) . (.a| 000029a0 74 74 72 28 66 6e 2c 31 29 3d 30 20 80 28 a9 70 |ttr(fn,1)=0 .(.p| 000029b0 6f 73 24 3e 31 20 84 20 bb 28 70 6f 73 24 29 3e |os$>1 . .(pos$)>| 000029c0 31 29 29 20 20 8c 6e 65 61 74 24 2b 3d 22 2d 22 |1)) .neat$+="-"| 000029d0 2b 70 6f 73 24 2b 22 2d 22 0d 12 16 0b 63 6f 75 |+pos$+"-"....cou| 000029e0 6e 74 3d 30 0d 12 20 05 f5 0d 12 2a 0c 63 6f 75 |nt=0.. ....*.cou| 000029f0 6e 74 2b 3d 31 0d 12 34 15 fd 20 66 6e 70 6f 73 |nt+=1..4.. fnpos| 00002a00 73 28 63 6f 75 6e 74 29 3d 30 0d 12 3e 0c 63 6f |s(count)=0..>.co| 00002a10 75 6e 74 2d 3d 31 0d 12 48 2e e7 63 6f 75 6e 74 |unt-=1..H..count| 00002a20 3e 31 20 8c 6e 65 61 74 24 2b 3d a4 63 61 73 65 |>1 .neat$+=.case| 00002a30 28 6d 75 6c 74 69 70 6c 65 24 28 63 6f 75 6e 74 |(multiple$(count| 00002a40 29 2c 32 29 0d 12 52 23 e7 a9 66 6e 24 28 66 6e |),2)..R#..fn$(fn| 00002a50 2c 30 29 3e 34 20 8c 73 74 79 6c 65 3d 32 20 8b |,0)>4 .style=2 .| 00002a60 73 74 79 6c 65 3d 33 0d 12 5c 21 6e 65 61 74 24 |style=3..\!neat$| 00002a70 2b 3d a4 63 61 73 65 28 66 6e 24 28 66 6e 2c 30 |+=.case(fn$(fn,0| 00002a80 29 2c 73 74 79 6c 65 29 0d 12 66 05 cd 0d 12 70 |),style)..f....p| 00002a90 0e f2 6f 72 64 65 72 69 6e 69 74 0d 12 7a 0a 62 |..orderinit..z.b| 00002aa0 67 24 3d 22 22 0d 12 84 0c e7 67 72 6f 75 70 20 |g$="".....group | 00002ab0 8c 0d 12 8e 53 e7 28 28 63 69 73 2b 74 72 61 6e |....S.((cis+tran| 00002ac0 73 2b 70 68 65 6e 79 6c 2b 70 6f 6c 79 29 20 80 |s+phenyl+poly) .| 00002ad0 74 69 6d 65 3d 30 29 20 84 20 28 70 6f 6c 79 2b |time=0) . (poly+| 00002ae0 63 69 73 2b 74 72 61 6e 73 2b 70 68 65 6e 79 6c |cis+trans+phenyl| 00002af0 29 3d 30 20 8c f2 62 65 67 69 6e 6e 69 6e 67 73 |)=0 ..beginnings| 00002b00 74 75 66 66 0d 12 98 05 cd 0d 12 a2 3a e7 6d 65 |tuff........:.me| 00002b10 74 20 8c 65 78 6d 65 74 61 6c 24 3d a4 63 61 73 |t .exmetal$=.cas| 00002b20 65 28 6d 65 74 61 6c 24 28 6d 65 74 2c 30 29 2c |e(metal$(met,0),| 00002b30 32 29 2b 22 20 22 20 8b 65 78 6d 65 74 61 6c 24 |2)+" " .exmetal$| 00002b40 3d 22 22 0d 12 ac 17 3d 65 78 6d 65 74 61 6c 24 |=""....=exmetal$| 00002b50 2b 62 67 24 2b 6e 65 61 74 24 0d 12 b6 05 cd 0d |+bg$+neat$......| 00002b60 12 c0 0f dd f2 6f 72 64 65 72 69 6e 69 74 0d 12 |.....orderinit..| 00002b70 ca 10 e3 6e 3d 31 20 b8 6e 70 5f 62 67 73 0d 12 |...n=1 .np_bgs..| 00002b80 d4 14 64 65 74 3d 64 65 74 61 69 6c 73 28 6e 2c |..det=details(n,| 00002b90 31 29 0d 12 de 25 e7 64 65 74 3e 30 20 8c 6f 72 |1)...%.det>0 .or| 00002ba0 64 65 72 24 28 6e 29 3d 68 61 6c 6f 67 65 6e 24 |der$(n)=halogen$| 00002bb0 28 64 65 74 2c 30 29 0d 12 e8 28 e7 64 65 74 3c |(det,0)...(.det<| 00002bc0 30 20 8c 6f 72 64 65 72 24 28 6e 29 3d 6c 65 6e |0 .order$(n)=len| 00002bd0 67 74 68 24 28 2d 64 65 74 29 2b 22 59 4c 22 0d |gth$(-det)+"YL".| 00002be0 12 f2 1e e7 64 65 74 3d 30 20 8c 67 72 6f 75 70 |....det=0 .group| 00002bf0 3d 6e 2d 31 3a 6e 3d 6e 70 5f 62 67 73 0d 12 fc |=n-1:n=np_bgs...| 00002c00 06 ed 6e 0d 13 06 10 e3 6e 32 3d 31 20 b8 67 72 |..n.....n2=1 .gr| 00002c10 6f 75 70 0d 13 10 13 6f 72 64 65 72 70 6f 73 28 |oup....orderpos(| 00002c20 6e 32 29 3d 6e 32 0d 13 1a 07 ed 6e 32 0d 13 24 |n2)=n2.....n2..$| 00002c30 0e e7 67 72 6f 75 70 3e 31 20 8c 0d 13 2e 10 e3 |..group>1 ......| 00002c40 6e 32 3d 31 20 b8 67 72 6f 75 70 0d 13 38 11 e3 |n2=1 .group..8..| 00002c50 6e 3d 31 20 b8 67 72 6f 75 70 2d 31 0d 13 42 22 |n=1 .group-1..B"| 00002c60 e7 97 28 6f 72 64 65 72 24 28 6e 29 29 3e 97 28 |..(order$(n))>.(| 00002c70 6f 72 64 65 72 24 28 6e 2b 31 29 29 20 8c 0d 13 |order$(n+1)) ...| 00002c80 4c 1c c8 94 20 6f 72 64 65 72 24 28 6e 29 2c 6f |L... order$(n),o| 00002c90 72 64 65 72 24 28 6e 2b 31 29 0d 13 56 20 c8 94 |rder$(n+1)..V ..| 00002ca0 20 6f 72 64 65 72 70 6f 73 28 6e 29 2c 6f 72 64 | orderpos(n),ord| 00002cb0 65 72 70 6f 73 28 6e 2b 31 29 0d 13 60 05 cd 0d |erpos(n+1)..`...| 00002cc0 13 6a 06 ed 6e 0d 13 74 07 ed 6e 32 0d 13 7e 05 |.j..n..t..n2..~.| 00002cd0 cd 0d 13 88 05 e1 0d 13 92 0a dd f2 73 6f 72 74 |............sort| 00002ce0 0d 13 9c 08 63 33 3d 30 0d 13 a6 05 f5 0d 13 b0 |....c3=0........| 00002cf0 09 63 33 2b 3d 31 0d 13 ba 14 fd 20 6e 75 6d 73 |.c3+=1..... nums| 00002d00 28 72 65 66 2c 63 33 29 3d 30 0d 13 c4 0d 6d 61 |(ref,c3)=0....ma| 00002d10 6e 79 3d 63 33 2d 31 0d 13 ce 0f e3 63 33 3d 31 |ny=c3-1.....c3=1| 00002d20 20 b8 6d 61 6e 79 0d 13 d8 11 e3 63 34 3d 31 20 | .many.....c4=1 | 00002d30 b8 6d 61 6e 79 2d 31 0d 13 e2 40 e7 6e 75 6d 73 |.many-1...@.nums| 00002d40 28 72 65 66 2c 63 34 29 3e 6e 75 6d 73 28 72 65 |(ref,c4)>nums(re| 00002d50 66 2c 63 34 2b 31 29 20 8c c8 94 20 6e 75 6d 73 |f,c4+1) ... nums| 00002d60 28 72 65 66 2c 63 34 29 2c 6e 75 6d 73 28 72 65 |(ref,c4),nums(re| 00002d70 66 2c 63 34 2b 31 29 0d 13 ec 07 ed 63 34 0d 13 |f,c4+1).....c4..| 00002d80 f6 07 ed 63 33 0d 14 00 05 e1 0d 14 0a 14 dd f2 |...c3...........| 00002d90 62 65 67 69 6e 6e 69 6e 67 73 74 75 66 66 0d 14 |beginningstuff..| 00002da0 14 0a 62 67 24 3d 22 22 0d 14 1e 0f e3 6e 3d 31 |..bg$="".....n=1| 00002db0 20 b8 67 72 6f 75 70 0d 14 28 26 72 65 66 3d 6f | .group..(&ref=o| 00002dc0 72 64 65 72 70 6f 73 28 6e 29 3a 64 65 74 3d 64 |rderpos(n):det=d| 00002dd0 65 74 61 69 6c 73 28 72 65 66 2c 31 29 0d 14 32 |etails(ref,1)..2| 00002de0 17 e7 6e 75 6d 73 28 72 65 66 2c 32 29 20 8c f2 |..nums(ref,2) ..| 00002df0 73 6f 72 74 0d 14 3c 08 63 33 3d 31 0d 14 46 0c |sort..<.c3=1..F.| 00002e00 70 6f 73 32 24 3d 22 22 0d 14 50 05 f5 0d 14 5a |pos2$=""..P....Z| 00002e10 1e 70 6f 73 32 24 2b 3d c3 28 6e 75 6d 73 28 72 |.pos2$+=.(nums(r| 00002e20 65 66 2c 63 33 29 29 2b 22 2c 22 0d 14 64 09 63 |ef,c3))+","..d.c| 00002e30 33 2b 3d 31 0d 14 6e 14 fd 20 6e 75 6d 73 28 72 |3+=1..n.. nums(r| 00002e40 65 66 2c 63 33 29 3d 30 0d 14 78 20 62 67 24 3d |ef,c3)=0..x bg$=| 00002e50 62 67 24 2b c0 70 6f 73 32 24 2c a9 70 6f 73 32 |bg$+.pos2$,.pos2| 00002e60 24 2d 31 29 2b 22 2d 22 0d 14 82 33 e7 63 33 2d |$-1)+"-"...3.c3-| 00002e70 31 3c 3d 6e 70 5f 6d 75 6c 20 8c 62 67 24 3d 62 |1<=np_mul .bg$=b| 00002e80 67 24 2b a4 63 61 73 65 28 6d 75 6c 74 69 70 6c |g$+.case(multipl| 00002e90 65 24 28 63 33 2d 31 29 2c 32 29 0d 14 8c 51 e7 |e$(c3-1),2)...Q.| 00002ea0 64 65 74 3e 30 20 8c 62 67 24 3d 62 67 24 2b a4 |det>0 .bg$=bg$+.| 00002eb0 63 61 73 65 28 68 61 6c 6f 67 65 6e 24 28 64 65 |case(halogen$(de| 00002ec0 74 2c 30 29 2c 32 29 20 8b 62 67 24 3d 62 67 24 |t,0),2) .bg$=bg$| 00002ed0 2b a4 63 61 73 65 28 6c 65 6e 67 74 68 24 28 2d |+.case(length$(-| 00002ee0 64 65 74 29 2b 22 59 4c 22 2c 32 29 0d 14 96 19 |det)+"YL",2)....| 00002ef0 e7 6e 3c 67 72 6f 75 70 20 8c 62 67 24 3d 62 67 |.n<group .bg$=bg| 00002f00 24 2b 22 2d 22 0d 14 a0 06 ed 6e 0d 14 aa 05 e1 |$+"-".....n.....| 00002f10 0d 14 b4 0f dd a4 62 72 61 63 6b 28 74 24 29 0d |......brack(t$).| 00002f20 14 be 0a 74 32 24 3d 22 22 0d 14 c8 0e e3 63 34 |...t2$="".....c4| 00002f30 3d 31 20 b8 a9 74 24 0d 14 d2 10 6d 24 3d c1 74 |=1 ..t$....m$=.t| 00002f40 24 2c 63 34 2c 31 29 0d 14 dc 1e e7 6d 24 3c 3e |$,c4,1).....m$<>| 00002f50 22 28 22 20 80 6d 24 3c 3e 22 29 22 20 8c 74 32 |"(" .m$<>")" .t2| 00002f60 24 2b 3d 6d 24 0d 14 e6 07 ed 63 34 0d 14 f0 08 |$+=m$.....c4....| 00002f70 3d 74 32 24 0d 14 fa 0d dd f2 73 6f 72 74 70 6f |=t2$......sortpo| 00002f80 73 0d 15 04 08 63 31 3d 30 0d 15 0e 05 f5 0d 15 |s....c1=0.......| 00002f90 18 09 63 31 2b 3d 31 0d 15 22 12 fd 20 66 6e 70 |..c1+=1..".. fnp| 00002fa0 6f 73 73 28 63 31 29 3d 30 0d 15 2c 0d 6d 61 6e |oss(c1)=0..,.man| 00002fb0 79 3d 63 31 2d 31 0d 15 36 0f e3 63 31 3d 31 20 |y=c1-1..6..c1=1 | 00002fc0 b8 6d 61 6e 79 0d 15 40 11 e3 63 32 3d 31 20 b8 |.many..@..c2=1 .| 00002fd0 6d 61 6e 79 2d 31 0d 15 4a 38 e7 66 6e 70 6f 73 |many-1..J8.fnpos| 00002fe0 73 28 63 32 29 3e 66 6e 70 6f 73 73 28 63 32 2b |s(c2)>fnposs(c2+| 00002ff0 31 29 20 8c c8 94 20 66 6e 70 6f 73 73 28 63 32 |1) ... fnposs(c2| 00003000 29 2c 66 6e 70 6f 73 73 28 63 32 2b 31 29 0d 15 |),fnposs(c2+1)..| 00003010 54 07 ed 63 32 0d 15 5e 07 ed 63 31 0d 15 68 05 |T..c2..^..c1..h.| 00003020 e1 0d 15 72 0f dd a4 70 6f 73 69 74 69 6f 6e 73 |...r...positions| 00003030 0d 15 7c 10 70 6f 73 24 3d 22 22 3a 63 31 3d 31 |..|.pos$="":c1=1| 00003040 0d 15 86 05 f5 0d 15 90 25 70 6f 73 24 3d 70 6f |........%pos$=po| 00003050 73 24 2b c3 28 66 6e 70 6f 73 73 28 63 31 29 29 |s$+.(fnposs(c1))| 00003060 2b 22 2c 22 3a 63 31 2b 3d 31 0d 15 9a 12 fd 20 |+",":c1+=1..... | 00003070 66 6e 70 6f 73 73 28 63 31 29 3d 30 0d 15 a4 13 |fnposs(c1)=0....| 00003080 3d c0 70 6f 73 24 2c a9 70 6f 73 24 2d 31 29 0d |=.pos$,.pos$-1).| 00003090 15 ae 0b dd f2 69 66 6d 65 74 0d 15 b8 69 e7 6d |.....ifmet...i.m| 000030a0 65 74 20 8c 3a 66 6f 75 6e 64 3d a4 66 69 6e 64 |et .:found=.find| 000030b0 28 66 6e 70 6f 73 73 28 31 29 2c 22 4f 2d 22 29 |(fnposs(1),"O-")| 000030c0 3a 20 63 61 72 62 6f 6e 73 24 28 66 6e 70 6f 73 |: carbons$(fnpos| 000030d0 73 28 31 29 2c 66 6f 75 6e 64 29 3d 63 61 72 62 |s(1),found)=carb| 000030e0 6f 6e 73 24 28 66 6e 70 6f 73 73 28 31 29 2c 66 |ons$(fnposs(1),f| 000030f0 6f 75 6e 64 29 2b 6d 65 74 61 6c 24 28 6d 65 74 |ound)+metal$(met| 00003100 2c 31 29 0d 15 c2 05 e1 0d 15 cc 0e dd f2 69 66 |,1)...........if| 00003110 70 68 65 6e 79 6c 0d 15 d6 37 e7 a4 66 69 6e 64 |phenyl...7..find| 00003120 74 65 78 74 28 22 50 48 45 4e 59 4c 22 29 20 8c |text("PHENYL") .| 00003130 70 68 65 6e 79 6c 3d 31 3a 6e 24 3d a4 72 65 6d |phenyl=1:n$=.rem| 00003140 6f 76 65 73 70 61 63 65 73 28 6e 24 29 0d 15 e0 |ovespaces(n$)...| 00003150 05 e1 0d 15 ea 10 dd a4 66 72 65 65 28 63 61 72 |........free(car| 00003160 62 29 0d 15 f4 0a 66 72 65 65 3d 30 0d 15 fe 0c |b)....free=0....| 00003170 e3 63 34 3d 31 20 b8 34 0d 16 08 22 e7 63 61 72 |.c4=1 .4...".car| 00003180 62 6f 6e 73 24 28 63 61 72 62 2c 63 34 29 3d 22 |bons$(carb,c4)="| 00003190 22 20 8c 66 72 65 65 2b 3d 31 0d 16 12 07 ed 63 |" .free+=1.....c| 000031a0 34 0d 16 1c 09 3d 66 72 65 65 0d 16 26 0d dd a4 |4....=free..&...| 000031b0 70 72 69 6d 61 72 79 0d 16 30 1a 70 72 69 6d 3d |primary..0.prim=| 000031c0 30 3a 77 68 65 72 65 3d 66 6e 70 6f 73 73 28 31 |0:where=fnposs(1| 000031d0 29 0d 16 3a 14 e7 63 79 63 6c 69 63 20 8c 70 72 |)..:..cyclic .pr| 000031e0 69 6d 2b 3d 32 0d 16 44 39 e7 63 79 63 6c 69 63 |im+=2..D9.cyclic| 000031f0 3d 30 20 80 28 77 68 65 72 65 3d 6c 65 6e 67 74 |=0 .(where=lengt| 00003200 68 20 84 20 77 68 65 72 65 3d 31 29 20 8c 70 72 |h . where=1) .pr| 00003210 69 6d 2b 3d 31 20 8b 70 72 69 6d 2b 3d 32 0d 16 |im+=1 .prim+=2..| 00003220 4e 0b e3 6e 3d 31 20 b8 34 0d 16 58 25 e7 a7 63 |N..n=1 .4..X%..c| 00003230 61 72 62 6f 6e 73 24 28 77 68 65 72 65 2c 6e 29 |arbons$(where,n)| 00003240 2c 22 23 22 29 20 8c 70 72 69 6d 2b 3d 31 0d 16 |,"#") .prim+=1..| 00003250 62 06 ed 6e 0d 16 6c 15 70 72 69 6d 24 3d 22 28 |b..n..l.prim$="(| 00003260 50 72 69 6d 61 72 79 29 22 0d 16 76 20 e7 70 72 |Primary)"..v .pr| 00003270 69 6d 3d 32 20 8c 70 72 69 6d 24 3d 22 28 53 65 |im=2 .prim$="(Se| 00003280 63 6f 6e 64 61 72 79 29 22 0d 16 80 1f e7 70 72 |condary)".....pr| 00003290 69 6d 3d 33 20 8c 70 72 69 6d 24 3d 22 28 54 65 |im=3 .prim$="(Te| 000032a0 72 74 69 61 72 79 29 22 0d 16 8a 0a 3d 70 72 69 |rtiary)"....=pri| 000032b0 6d 24 0d 16 94 12 dd a4 61 74 74 72 28 66 6e 2c |m$......attr(fn,| 000032c0 62 69 74 29 0d 16 9e 1d e7 62 69 74 3c 33 20 8c |bit).....bit<3 .| 000032d0 3d 61 74 74 72 28 66 6e 29 80 28 32 5e 62 69 74 |=attr(fn).(2^bit| 000032e0 29 0d 16 a8 1c e7 62 69 74 3d 33 20 8c 3d 28 61 |).....bit=3 .=(a| 000032f0 74 74 72 28 66 6e 29 81 38 29 80 33 31 0d 16 b2 |ttr(fn).8).31...| 00003300 1d e7 62 69 74 3d 34 20 8c 3d 28 61 74 74 72 28 |..bit=4 .=(attr(| 00003310 66 6e 29 81 32 35 36 29 80 37 0d 16 bc 1e e7 62 |fn).256).7.....b| 00003320 69 74 3d 35 20 8c 3d 28 61 74 74 72 28 66 6e 29 |it=5 .=(attr(fn)| 00003330 81 32 30 34 38 29 80 31 0d 16 c6 1e e7 62 69 74 |.2048).1.....bit| 00003340 3d 36 20 8c 3d 28 61 74 74 72 28 66 6e 29 81 34 |=6 .=(attr(fn).4| 00003350 30 39 36 29 80 37 0d 16 d0 0a dd f2 64 65 6d 6f |096).7......demo| 00003360 0d 16 da 0f 52 3d b3 28 6e 70 5f 64 65 6d 29 0d |....R=.(np_dem).| 00003370 16 e4 07 63 3d 30 0d 16 ee 1c 66 3d 8e 28 22 3c |...c=0....f=.("<| 00003380 43 61 72 62 6f 6e 24 44 69 72 3e 2e 64 65 6d 6f |Carbon$Dir>.demo| 00003390 22 29 0d 16 f8 1b f5 3a 63 2b 3d 31 3a 41 24 3d |").....:c+=1:A$=| 000033a0 be 23 66 3a fd 52 3d 63 20 84 c5 23 66 0d 17 02 |.#f:.R=c ..#f...| 000033b0 07 d9 23 66 0d 17 0c 19 f2 64 65 63 6f 64 65 5f |..#f.....decode_| 000033c0 63 6f 6e 74 72 6f 6c 28 41 24 2c 31 29 0d 17 16 |control(A$,1)...| 000033d0 07 d1 3d 30 0d 17 20 05 e1 0d ff |..=0.. ....| 000033db