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)
4count-=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)
vneat$=""
��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
Fpos2$=""
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