summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/README113
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf564
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdfbin0 -> 284895 bytes
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex80
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-030.eps71
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf262
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdfbin0 -> 187999 bytes
-rw-r--r--Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex572
-rw-r--r--Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf764
9 files changed, 2426 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/README b/Master/texmf-dist/doc/metapost/mcf2graph/README
new file mode 100644
index 00000000000..66dbc7dfcf2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/README
@@ -0,0 +1,113 @@
+*******************************************************************************
+ mcf2graph : Metapost/Metafont macro convert Molecular Coding Format to graphic
+ Author : Akira Yamaji
+ DATE : 2015/07/11
+ E-mail : akira.yamaji5@gmail.com
+ Web site : http://molecoding.cocolog-nifty.com/blog/
+*******************************************************************************
+
+1. Introduction
+
+ Molecular Coding Format(MCF) is new linear notation represent chmical
+ structure diagram.
+ mcf2graph(metapost/metafont macro) convert MCF file to
+ graphic file(pk font/PNG/SVG/EPS) or MDL MOL file(V2000).
+ The software, MCF syntax manual,TeX example can get from authors web site.
+
+
+2. The distribution of software
+
+( 1) README This file
+
+( 2) mcf_graph.mf Macro of Metapost / Metafont
+
+( 3) mcf_manual.tex MCF syntax manual(LaTeX file)
+( 4) mcf_man_soc.mf MCF file for mcf_manual.tex
+( 5) mcf_man_soc-030.eps No.30 EPS(with color) file from (4)
+( 6) mcf_manual.pdf PDF file of mcf_manual.tex
+
+( 7) mcf_example.tex LaTeX example
+( 8) mcf_exa_soc.mf MCF file for mcf_example.tex
+( 9) mcf_exa_soc-info.log Infomation file from (8)
+(10) mcf_example.pdf PDF file of mcf_example.tex
+
+
+3. Use mcf2graph.mf
+
+(1) mpost -s ahangle=1 FILENAME output PNG file. (default value is eps)
+(2) mpost -s ahangle=2 FILENAME output SVG file.
+(3) mpost -s ahangle=3 FILENAME output MDL Molfile(V2000)
+(4) mpost -s ahangle=0 FILENAME output no graphic file.
+(5) mpost -s ahlength=1 FILENAME output first definition only (for test)
+(6) mpost -s ahlength=2 FILENAME output checklist.
+(7) Large number of molecular structures can be gathering by using TEX.
+ mcf_example.tex is example of use LaTeX.
+
+
+4. Molecular Coding Format example
+
+input mcf2graph.mf; % input main system
+font_wd#:=30mm#; % font width
+font_ht#:=20mm#; % font height
+max_bond_width:=0.2; % max fond length/font width
+sw_logout:=1; % log file out
+sw_frame:=0; % add frame
+sw_expand:=0; % expand substituent mode
+sw_start_vecor:=0; % start vector mode
+sw_numberingA:=0; % atom adress mode
+sw_numberingB:=0; % bond adress mode
+%%sw_checklist:=1; % check list mode
+%%sw_MOLfile:=1; % Mdl molfile(V2000)
+%***********************************************************************
+beginfont("EN:Acetamiprid") % Molecular name 1
+ MCf(^^30,Ph,4\,!,NH,!,!~dr,N,!,CN)% % Molecular Coding Format
+endfont
+%***********************************************************************
+bye
+
+5. Use TeX(latex)
+
+
+\documentclass[a4paper]{article}
+\usepackage{graphicx}
+\pagestyle{empty}
+
+% insert part of info LOG file
+
+%-------------------------------------------------------------------------
+\MOLinfo{EN:Acetamiprid}{:}{:}{:}%
+{:}{:}{:}{:}%
+{:}{:}{:}{:}%
+\MCFinfo{MCF_SOC2}{0}{MCF_SOC2-000.eps}{419.14972}{145.32037}{159.04236}{12}{0}{}%
+%-------------------------------------------------------------------------
+
+%% filename of souce file : mcf_exa_soc.mf
+
+\input mcf_exa_soc-info.log
+
+\end{document}
+
+\end{verbatim}
+%----------------------------------------------------------------------------
+
+
+6. License
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
new file mode 100644
index 00000000000..2c73bcf67c3
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
@@ -0,0 +1,564 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Molecular Coding Format souce No.2 by Akira Yamaji 2015.5
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+input mcf2graph.mf;
+%-------------------------------------------------------------------------
+font_wd#:=35mm#;
+font_ht#:=25mm#;
+max_bond_width:=0.15;
+%-------------------------------------------------------------------------
+sw_logout:=1;
+sw_frame:=0;
+sw_atom_frame:=0;
+sw_numberB:=0;
+sw_expand:=0;
+sw_start_vector:=0;
+%%%%sw_checklist:=1;
+%%%%sw_MOLfile:=1;
+%***********************************************************************
+beginfont("EN:Acetamiprid")
+ MCf(^^30,
+ Ph,4\,!,NH,!,!~dr,N,!,CN
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Imidacloprid")
+ MCf(^^30,
+ Ph1,1:N,6:/Cl,3\,!,?5,1:N,3:NH,-4\\,!,NO2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Ethofenprox")
+ MCf(^^30,
+ Ph,5\,!,Ph,-4\,O,!3,/Me^35,/Me^-35,!,Ph,-3:/OEt
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Thiamethoxam")
+ MCf(^^30,
+ ?6,@(4,6)N,2:O,6:/Me,5\\,!,NO2,4\,!,?5,$(1,3)d,3:N,5:S,4:/Cl
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Tebufenozide")
+ MCf(^^30,
+ Ph,6:/Et,3\,//O,!,NH,!,N,/tBu,!,//O,!,Ph,@(3,5)/Me
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Pyridaphenthion")
+ MCf(^^-30,
+ !2,O,!,P,//S,/OEt^160>rl,!,O,!,?6,$(1,5)dl,@(2,3)N,4://O,3:/Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Fenitrothion")
+ MCf(^^30,
+ !,O,!,P,//S,/OMe^160,!,O,!,Ph,3:/Me,4:/NO2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Permethrin")
+ MCf(
+ ^^-30,
+ ?3,2^-35:*/Me,2^35:/*Me,1\,!~dl,/Cl,!,Cl,
+ 3\,//O,!,O,!2,Ph,-4\>rl,O,!,Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Bensultap")
+ MCf(^^30,
+ Ph,4\,SOO,!,S,!2,N,/Me,!2,S,!,SOO,!,Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Azoxystorbin")
+ MCf(^^30,
+ Ph,2:/OH,3\,O,!,Ph,@(4,6)N,-4\,O,!,Ph,-5\,/OMe,!,//O,!,O,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Isoprothiolane")
+ MCf(^^30,
+ !,/Me,!,O,!,//O,!2,//O,!,O,!,/Me,!,-5\\,?5,@(2,5)S
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Iprodion")
+ MCf(^^18,
+ ?5,@(3,5)N,2://O,3\,Ph,@(3,5)/Cl,#5\,!,NHiPr
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Etridiazole")
+ MCf(^^18,
+ ?5,$(1,3)dl,@(2,4)N,5:S,1:/OEt,3:/CCl3,1:/Me
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Oxine-Copper")
+ MCf(
+ Ph,4:N,-2=Ph,-4\,O,-60,^^90,Cu,-90,O,60,Ph,-2=Ph,4:N,
+ #4*,&(#12)~vf,#23*,&(#12)~vf
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Captan")
+ MCf(^^0,
+ ?6,6=d,-4=?5,2:N,@(1,3)//O,#8\,S,!,CCl3
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Chlorothalonil")
+ MCf(^^30,
+ Ph,@(1,2,4,6)/Cl,@(3,5)/CN
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Tetraconazole")
+ MCf(^^-6,
+ ?5,$(2,5)d,@(1,2,4)N,4\,!4,4:O,/F^35,/F^-35,!,CF2,#7\,Ph,@(4,6)/Cl
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Endosulfan");
+ MCf(^^30,
+ {,``1.3,?6,3=?7,},2*,210~wf`1.45,&5~wb,6=d,
+ @(1,2,5,6,12^-210,12^-150)/Cl,@(8,10)O,9:S,9://O
+ )
+endfont;
+%***********************************************************************
+beginfont("EN:Flutolanil")
+ MCf(^^30,
+ Ph,2:/CF3,3\,//O,!,NH,!,Ph,-1:/OiPr
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Propiconazole")
+ MCf(^^-6,
+ ?5,$(2,5)d,@(1,3,4)N,4\,!2,Ph,@(4,6)/Cl,#7\,?5,@(2,5)O,-3^24:/Bu
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Pencycuron")
+ MCf(^^30,
+ Ph,6:/Cl,3\,!,N,/?6,!,//O,!,NH,!,Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Asulam")
+ MCf(^^30,
+ Ph,6:/NH2,3\,SOO,!,NH,!,//O,!,O,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Oxadixyl")
+ MCf(^^30,
+ Ph,@(1,3)/Cl,4\,?5,2=d,@(1,2)N,4:O,5://O,-3:/tBu,#6\,O,!2,!~tm
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Oxaziclomefone")
+ MCf(^^30,
+ ?6,4:N,2:O,1:/Me,5://O,6:/Ph,4\,/Me^35,/Me^-35,!,Ph,@(3,5)/Cl
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Cafenstrole")
+ MCf(^^30,
+ Ph,@(2,4,6)/Me,3\,SOO,!,?5,$(2,5)d,@(2,4,5)N,-2\,!,N,/Me,!2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Cyclosulfamuron")
+ MCf(^^30,
+ Ph,5\,//O,!,?3,#4\,NH,!,SOO,!,NH,!,//O,!,NH,!,Ph,@(2,6)N,@(3,5)/OMe
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Napropamide")
+ MCf(^^-30,
+ Ph,-4=Ph,#10\,O,!,/Me^35,/Me^-35,!,//O,!,N,/Et,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Pyributicarb")
+ MCf(^^30,
+ Ph,5:/tBu,3\,//O,!,S,!,N,/Me,!,Ph,@(5,6)/Me,3:/OMe
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Propyzamide")
+ MCf(^^30,
+ Ph,@(1,5)/Cl,3\,//O,!,NH,!,/Me^35,/Me^-35,!,!~tm
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Pendimethalin")
+ MCf(^^30,
+ Ph,@(1,2)/Me,6:/Cl,@(3,5)/NO2,4\,NH,!,/Et,!2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Benfluralin")
+ MCf(^^30,
+ Ph,@(1,3)/NO2,5:/CF3,2\,N,/Et,!4
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Trinexapac-ethyl")
+ MCf(^^30,
+ ?6,@(2,4)//O,6:/COOEt,3\\,/OH,!,?3
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Buprofezin")
+ MCf(^^-30,
+ ?6,@(1,5)N,3:S,6://O,5:/tBu,4\\,N,!,tBu,1:/Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Tricyclazole")
+ MCf(^^30,
+ Ph,2:/Me,-4=?5,1:N,3:S,-3=?5,$(2,4)d,@(2,3)N
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Phthalide")
+ MCf(^^30,
+ Ph,@(1,2,5,6)/Cl,-4=?5,2:O,3://O
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Probenazole")
+ MCf(^^12,
+ Ph,3:d,-4=?5,1:SOO,2:N,3\,O,!2,!~dr
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Esprocarb")
+ MCf(^^30,
+ Ph,3\,!,S,!,//O,!,N,/Et,!,/iPr,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Simetryn")
+ MCf(^^30,
+ Ph,@(2,4,6)N,5:/SMe,@(1,3)/NHEt
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Bromobutide")
+ MCf(^^30,
+ Ph,3\,!,NH,!,//O,!,/Br,!,/Me^35,/Me^-35,!,tBu
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Mefenacet")
+ MCf(^^12,
+ Ph,-4=?5,3=d,3:N,1:S,2\,O,!2,//O,!,N,/Me,!,Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Rifampicin")
+ MCf(^^30,
+ Ph,6:/Me^30,5:/OH,-6=?5,1:O,3://O,2:/*Me^60,#3=?6,@(2,4)d,@(1,4)/OH,
+ {,``1,-2\,NH,60,//O,-60,/Me,60~dl,60,60~dl,-60,
+ */Me,60,/*OH,-60,/*Me,60,/*OH,60,*/Me^30,-60,
+ 60,/*Me^30,-53,/*OMe,66,-53~dl,66`1.2,O,},&(#8),
+ #11\,!~dr,N,!,?6,@(1,4)N,4:/Me
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Wortmanin")
+ MCf(^^30,
+ {,?6,-4=?6,-2=?6,-4=?5,(#2,#7)=?5[3],},
+ 6:O,1://O,$(7,10)dl,8://O,17://O,-3=d,-1:O,
+ @(4,12)*/Me^60,11:/*H^-60,
+ #5\*,60,O,!,#14\*^-25,//O,!,O,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Ampicillin")
+ MCf(^^45,
+ ?4,-3=??5,2:N,7:S,
+ @(3^45,4^-45)/*H,1://O^15,5:/*COOH^-18,@(6^35,6^-35)/Me,
+ ,4\^75,NH,!,//O,!,NH,!,Ph,
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Validamycin")
+ MCf(^^30,
+ ?6,@(5,6)/OH,3\,-60,OH,
+ #4\,O,-60,?6,2:O,@(3,4,5,6)/OH,
+ #1\,NH,!,?6,2=d,@(4,5,6)/OH,-4\,!,OH
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Oceltamivir")
+ MCf(^^30,
+ ?6,3=dl,1:/NH2,3:/COOEt,6:/NHCOMe,5\~zf,O,!,/Et,!2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Etyprostontromethamine")
+ MCf(^^0,
+ ?5,@(2,5)/*OH,
+ #3*\^6,!~dl,!3,O,0,Ph,#8*,?5,@(1,4)O,#4\*^-6,!,30~dl,30,!3,COOH
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Chlorophyll a")
+MCf(^^54,
+ {,``1,?5,$(2,5)dl,4:N,3\,54~dl,?5,$(2,4)dl,5:N,
+ -2\,54~dl,?5,2=d,5:N,-2\~dl,54,?5,5=d,5:N,-2\~dl,&(#5),
+ -1*,24,/*COOMe^15,72,//O,&(#1),},
+ @(2,9,15,20~zf)/Me,8:/Et,14\,!~dr,
+ #4\`1.45,Mg,&17,-1*,&11~vb,-1*,&23~vb,
+ #21*,-6~wf,!2,//O,!,O,!2,!~dl,!13,@(1,5,9,13)/Me
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Gibberellin");
+ MCf(^^12,
+ {,``1.3,?6,3=??5,9=??7,},12\^160`1.6,&8,
+ 4\^155~zf`-1.2,O,55,//O^180`1,&(#2)~zb,
+ 3=dr,11=wf,13=wb,7:/COOH,11://Me,1:*/OH,12:/*OH,2:*/Me,
+ @(3^-60,9^60)*/H)
+endfont;
+%**********************************************************************
+beginfont("EN:Cholesterol")
+ MCf(^^30,
+ ?6,$(-4,-2)??6,-4=??5,7=dl,
+ 1:*/OH,@(4,12)*/Me^60,
+ 10:/*H^180,@(11,-1)/*H^-60,9:*/H^60,
+ -1\^17,/*Me,!4,/Me,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Lycorine")
+ MCf(^^30,
+ Ph,-4=??6,-2=??6,6=??5,(9,12)=??5[3],13=dl,8:N,@(15,17)O,
+ 9:/*H^180,10:*/H^60,13:*/OH,14:/*OH
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Tetrodotoxine")
+ MCf({,``1,^^60,-90,60,-30`1.15,150,60,&(#1),#3*,-135,60,-30`1.15,150,&(#4),
+ #10\,O,60`1.33,60,&(#3)~ov,#8*,-15~ov,O,&(#12),},#9*,45,-60,OH,1^120://NH,
+ @(5~zf^-15,7,9^-75,12,13~zf)/OH,@(2,6^180)NH
+ )
+endfont
+%***********************************************************************
+beginfont("EN:beta-Carotene")
+ MCf(^^30,
+ ?6,3=d,@(3,5^35,5^-35)/Me,
+ 4\,,!18,$(1,3,5,7,9,11,13,15,17)dr,@(3,7,12,16)/Me,
+ ?6,6=d,@(6,2^35,2^-35)/Me
+ )
+endfont
+%**********************************************************************
+beginfont("EN:alfa-Tocopherol")
+ MCf(^^30,
+ Ph,3=??6,7:O,@(1,2,5)/Me,8:/*Me^60,6:/OH,
+ 8\,!12,@(4,8)/*Me,12:/Me
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Qercetin")
+ MCf(^^30,
+ Ph,3=??6,9\,ph,9=dl,10:O,7://O,@(2,6,8,13,14)/OH
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Limonin")
+MCf(^^30,
+ {,?6,-3=?6,-4=?6,3:O,-5=?3,1:O,1=wf,2=wb,#6=?5,2:O,-4=?6,2:O,-5=wf,
+ #14\*,?5,$(1,4)dl,3:O,},@(3,12,21)//O,
+ @(4~wf^60,8~zf^60,18^35,18^-35)/Me,@(1^60,5^180,16^60)/*H
+)
+endfont
+%**********************************************************************
+beginfont("EN:Cromolyn")
+ MCf(^^30,
+ Ph,-1=?6,3:d,-4:O,-1://O,-3:/COOH,
+ #2\,O,!2,/OH,!2,O,60,Ph,-5=?6,3=d,-1:O,-4://O,-2:/COOH
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Emetine")
+ MCf(^^30,
+ {,Ph,-4=?6,2:N,-4=?6,},@(1,6)/OMe,-2:/*Et,@(7^-60,12^-60)/*H,
+ -3\,!~zb,^^-60,?6,5=d,2:NH,-6^-60:*/H,-2=?6,$(2,4)dl
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Colchicine")
+ MCf(^^30,
+ Ph,@(1,2,6)/OMe,-4=?7,-5=?7,$(-1,-4,-6)dl,-2://O,-3:/OMe,
+ #9\,NH,!,//O,!
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Caffeine")
+ MCf(^^30,
+ ?6,3=d,@(2,6)N,@(2,6)/Me,@(1,5)//O,-4=?5,2=d,@(1,3)N,3:/Me
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Acronycine")
+ MCf(^^30,
+ Ph,-4=?6,1:N,4://O,,1:/Me,-3=Ph2,-1:/OMe,
+ -4=?6,2=d,4:O,-2^-35:/Me,-2^35:/Me
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Ibotenic acid")
+ MCf(^^18,
+ ?5,4=d,3:O,2:NH,1://O,4\^-24,/NH2,!,COOH
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Piperine")
+ MCf(^^30,
+ Ph,-1=?5,@(1,3)O,#4\,!~dr,!,!~dr,!,//O,!,?6,1:N
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Febrifugine")
+ MCf(^^30,
+ Ph,-4=?6,2=d,@(1,3)N,4://O,#9\,!,//O,!,!~zf,?6,2:NH,-1:*/OH
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Mitomycine C")
+ MCf(^^30,
+ ?6,$(3,6)dl,@(2,5)//O,1:/Me,-4=?5,1:N,#6:/NH2,-3=?5,-2=?3,-1=wb,-2=wf,-1:NH,
+ #8:/*OMe^35,#9\`1^17.9,!,O,!,//O,!,NH2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Podophyllotoxin");
+MCf(^^0,
+ {,?5,@(2,5)O,-3=Ph2,-3=Ph1,-3=?5,2:O,},-1=wb,-3://O,
+ 10\*,Ph,@(-2,-3,-4)/OMe,#13:/*OH,@(#11~wf^-60,#12~zf^60)/H
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Warfarin");
+MCf(^^30,
+ Ph,3=??6,10:O,7:/OH,9://O,8\,/Ph`1,60,!,//O,!
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Genistein");
+MCf(^^30,
+ Ph,3=??6,10:O,@(2,6)/OH,9://O,8\,Ph,-3:/OH
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Baicalein");
+MCf(^^30,
+ Ph,3=??6,10:O,@(1,2,6)/OH,9://O,8\,Ph
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Baicalein");
+MCf(^^30,
+ Ph,3=??6,9=d,10:O,@(1,2,6)/OH,7://O,-2\,Ph
+ )
+endfont;
+%***********************************************************************
+beginfont("EN:Reserpine");
+MCf(^^30,
+ {,Ph,-4=?5,3=d,-2=?6,2:N,-4=?6,-3=?6,},7:NH,10:*/H^-60,
+ @(15^-60,16^60)/*H,
+ #20*\,O,!,//O,!,Ph,@(-2,-3,-4)/OMe,@(#1,#19~zf>rl)/OMe,
+ #18*\,//O,!,O,!
+ )
+endfont;
+%***********************************************************************
+beginfont("EN:Rotenone");
+MCf(^^-60,
+ ?5,$(-3,-2,-3,-4)??6,$(7,9,-2,-4)dl,$(3,17)dr,
+ @(2,13,16)O,10://O,@(11^-60,12^60)*/H,
+ @(-2,-3)/OMe,1*\,/Me,!~dl
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Pyrethrin I");
+MCf(^^30,
+ ?3,@(3^35~wf,3^-35~zf)/Me,1*\,!~dl,iPr,
+ 2\*,//O,!,O,-36~zb,?5,-2=d,-1:/Me,-3://O,
+ -2\,!4,$(-1,-3)dl
+)
+endfont;
+%***********************************************************************
+beginfont("EN:Erythromycin");
+MCf(^^30,
+ {,``1,^^-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,},&1,
+ 14:O,13:/*Et,@(1,9)//O,@(2,10)*/Me,@(4,6^-35,8,12^35)/*Me,
+ @(6^35,11,12^-35)*/OH,
+ #3\*,O,30,{,``.7,?6,},2:O,@(3,5^35)/Me,4:/OH,5^-35:/OMe,
+ #5\*^30`1.7,O,!,{,``.7,?6,},6:O,5:/Me,2:/OH,3:/NMeMe
+)
+endfont;
+%**********************************************************************
+beginfont("EN:Paclitaxel")
+ MCf(^^0,
+ {,?6,5=d,3*,{,``1,36,45,45,45,45,},&(#5),#9=?6,-4=?4,},-1=wb,-3=wf,-1:O,
+ @(4^35,4^-35,6)/Me,@(3^-60,15)*/OH,8:/*H^-60,9:*/Me^60,10://O,
+ #1\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,
+ #7\*,O,-45,//O,60,Ph,
+ #11*\,O,-60,//O,60,
+ #12\*^-15,O,60,//O,-60
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Mevastatin")
+ MCf(^^30,
+ ?6,2=d,4:*/H^60,,3=?6,2=d,9:*/Me,
+ #10*\,!,60~wb,?6,6:O,-2://O,-4:/*OH,
+ #5\*,O,60,//O,!,*/Me,!2
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Sesamine")
+ MCf(^^54,
+ ?5,1=??5,@(4,7)O,@(1^-54,2^54)*/H,
+ #5*\^-12,Ph,-3=?5,@(-1,-3)O,
+ #8*\^-12,Ph,-3=?5,@(-1,-3)O
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Morphine")
+ MCf(^^30,
+ {,Ph,2=?6,-4=?6,(#1,#12)=?5[2],1:O,},-1=zb,
+ 7*,60~wf`0.75,70~ov`1.3,45,N,/Me,&9~wb,
+ 15=d,6:/OH,8^180:*/H,12:/*OH
+ )
+endfont
+%**********************************************************************
+beginfont("EN:Capsaicin")
+ MCf(^^30,
+ Ph,1:/OH,6:/OMe,4\,!,NH,!,//O,!8,-3=dr,-1:/Me
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Quinine")
+ MCf(^^30,
+ {,Ph,3=Ph,},7:N,6:/OMe,
+ 10\,*/OH,/H~zf^-60,!,
+ ?6,2:N,1:*/H^60,4*\,!~dr,2*,165~zf,60,&5~zb
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Atoropin")
+ MCf(^^-30,
+ O,!,//O,!,!,Ph,
+ #1\~zb^-120,?7,-2*\^-170`1.2,N,/Me,&-5~wb,
+ #3\~wv,!,OH
+ )
+endfont
+%***********************************************************************
+bye
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
new file mode 100644
index 00000000000..bca1f0085dd
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
new file mode 100644
index 00000000000..f82dd499f38
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
@@ -0,0 +1,80 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Molecular Coding Format file for mcf_examples.tex by A.Yamaji 2015.7
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[a4paper]{article}
+\usepackage{graphicx}
+\pagestyle{empty}
+\topmargin=-20mm
+\oddsidemargin=-14mm
+\textwidth=210mm
+\textheight=290mm
+\parindent=0mm
+\setlength\columnsep{8mm}
+%-------------------------------------------------------------------------------
+\makeatletter%
+\newbox \@stringbox%
+\newcount \fontnum%
+\newcount \tnum%
+\newcount \Cnt@xlen%
+\newcount \Cnt@row%
+\newcount \fontw%
+\newdimen \font@dim%
+%-------------------------------------------------------------------------------
+\def\mol@sel#1{%
+ \if#1\empty\relax\else%
+ \edef\@first{\expandafter\@first@param#1;}%
+ \edef\@second{\expandafter\@second@param#1;}%
+ \ifx\@first\@EN@ \edef\MOL@nameE{\@second}\fi%
+ \ifx\@first\@JN@ \edef\MOL@nameJ{\@second}\fi%
+ \ifx\@first\@NO@ \edef\MOL@number{\@second}\fi%
+ \ifx\@first\@CAS@ \edef\MOL@CAS{\@second}\fi%
+ \ifx\@first\@MW@ \edef\MOL@MW{\@second}\fi%
+ \ifx\@first\@FM@ \edef\MOL@fomura{\@second}\fi%
+ \ifx\@first\@USE@ \edef\MOL@use{\@second}\fi%
+ \ifx\@first\@XLogP@ \edef\MOL@XLogP{\@second}\fi%
+ \ifx\@first\@EXA@ \edef\MOL@extA{\@second}\fi%
+ \ifx\@first\@EXB@ \edef\MOL@extB{\@second}\fi%
+ \fi%
+}%
+%-------------------------------------------------------------------------------
+\def\@first@param#1:#2;{#1}\def\@second@param#1:#2;{#2}%
+\def\MOLinfo#1#2#3#4#5#6#7#8#9{%
+\def\@EN@{EN}\def\@JN@{JN}\def\@CAS@{CAS}\def\@NO@{NO}\def\@MW@{MW}\def\@FM@{FM}%
+\def\@USE@{USE}\def\@XLogP@{XLogP}\def\@EXA@{EXA}\def\@EXB@{EXB}%
+\edef\MOL@nameE{}\edef\MOL@nameJ{}\edef\MOL@number{}\edef\MOL@CAS{}\edef\MOL@MW{}%
+\edef\MOL@fomura{}\edef\MOL@use{}\edef\MOL@XLogP{}\edef\MOL@extA{}\edef\MOL@extB{}%
+\mol@sel{#1}\mol@sel{#2}\mol@sel{#3}\mol@sel{#4}\mol@sel{#5}\mol@sel{#6}%
+\mol@sel{#7}\mol@sel{#8}\mol@sel{#9}\MOLaux}%
+\def\MOLaux#1#2#3{\mol@sel{#1}\mol@sel{#2}\mol@sel{#3}}%
+%--------------------------------------------------------------------------------
+\def\@stru#1[#2]{\font\@strufont=#1\relax\hbox{\@strufont\char#2}}%
+\def\MCFinfo#1#2#3#4#5#6#7#8#9{%
+ \unitlength=0.01mm\relax \@tempcnta=3200\relax \@tempcntb=3800\relax%
+ \begin{picture}(\@tempcntb,\@tempcnta)%
+ \advance\@tempcnta -300\relax%
+ \put(20,\@tempcnta){\tiny\bf [\the\fontnum] \MOL@nameE}%
+%---------------------------------------------------------------------------
+% for METAFONT
+ \put( 0,0){\makebox(\@tempcntb,\@tempcnta){\@stru{#1}[#2]}}%
+%%%% for METAPOST
+%%%% \put( 0,0){\makebox(\@tempcntb,\@tempcnta){\includegraphics{#3}}}%
+%---------------------------------------------------------------------------
+ \end{picture}%
+ \advance\fontnum\@ne\relax\advance\tnum\@ne\relax%
+ \ifnum\tnum=5 \\ \tnum=0\relax \fi%
+ }%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+{\hspace{20mm} \LARGE\bf Molecular Coding Format examples \hspace{20mm} }%
+{\footnotesize\bf by Akira Yamaji 2015.7} \vspace{5mm}\\
+\fontnum=1%
+\noindent%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%% Copy & Paste here from log-file %%%%%%%%%%%%%%%
+%%%%%%%%% or \input 'filename'-info.log %%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%------------------------------------------------------------------------
+\input mcf_exa_soc-info.log
+%------------------------------------------------------------------------
+\end{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-030.eps b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-030.eps
new file mode 100644
index 00000000000..566a268d63e
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-030.eps
@@ -0,0 +1,71 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 47 7 112 78
+%%HiResBoundingBox: 47.18906 7.2196 111.88002 77.81963
+%%Creator: MetaPost 1.999
+%%CreationDate: 2015.07.12:0850
+%%Pages: 1
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor 0 0.65842 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 58.52762 27.21318 moveto
+79.09938 15.33614 lineto stroke
+newpath 90.97905 15.33603 moveto
+111.55081 27.21318 lineto stroke
+ 1 0 0 setrgbcolor 0.65842
+ 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 111.55081 27.21318 moveto
+111.55081 57.82605 lineto stroke
+ 0 0 0 setrgbcolor 0 0.65842 dtransform truncate idtransform setlinewidth pop
+newpath 111.55081 57.82605 moveto
+90.97905 69.7031 lineto stroke
+newpath 79.09938 69.7032 moveto
+58.52762 57.82605 lineto stroke
+ 0.65842 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 58.52762 57.82605 moveto
+58.52762 27.21318 lineto stroke
+ 1 0 0 setrgbcolor
+newpath 80.35208 7.2196 moveto
+81.27386 7.2196 lineto
+81.27386 16.59387 lineto
+80.35208 16.59387 lineto
+ closepath fill
+newpath 88.80457 7.2196 moveto
+89.72635 7.2196 lineto
+89.72635 16.59387 lineto
+88.80457 16.59387 lineto
+ closepath fill
+newpath 81.64258 16.59387 moveto
+80.35208 16.59387 lineto
+88.43585 7.2196 lineto
+89.72635 7.2196 lineto
+ closepath fill
+ 0 1 0 setrgbcolor
+newpath 80.35208 68.44536 moveto
+81.27386 68.44536 lineto
+81.27386 77.81963 lineto
+80.35208 77.81963 lineto
+ closepath fill
+newpath 88.80457 68.44536 moveto
+89.72635 68.44536 lineto
+89.72635 77.81963 lineto
+88.80457 77.81963 lineto
+ closepath fill
+newpath 81.64258 77.81963 moveto
+80.35208 77.81963 lineto
+88.43585 68.44536 lineto
+89.72635 68.44536 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 55.69298 26.07932 moveto
+55.69298 28.34705 lineto
+47.18906 28.34705 lineto
+47.18906 26.07932 lineto
+ closepath fill
+newpath 52.85834 24.37854 moveto
+58.52762 27.21318 lineto
+52.85834 30.04782 lineto
+ closepath fill
+showpage
+%%EOF
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
new file mode 100644
index 00000000000..27e88b9ee1f
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
@@ -0,0 +1,262 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2015.2
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+input mcf2graph.mf;
+%-----------------------------------------------------------------------
+font_wd#:=60mm#;% font width
+font_ht#:=30mm#;% font height
+max_bond_width:=0.18;
+%-----------------------------------------------------------------------
+sw_logout:=1;
+sw_frame:=0;
+sw_expand:=0;
+sw_start_vector:=0;
+%%%%%sw_checklist:=1;
+%***********************************************************************
+beginfont("EN:Chain")
+sw_numberB:=1;
+ ratio_cr:=1;
+ sw_start_vector:=1;
+ MCf(^^30,-60,60,-60,60,-60,60)
+endfont
+%***********************************************************************
+beginfont("EN:Chain")
+ sw_numberB:=1;
+ ratio_cr:=1;
+ sw_start_vector:=1;
+ MCf(^^30,!,!,!,!,!,!)
+endfont
+%***********************************************************************
+beginfont("EN:ring")
+ sw_numberB:=1;
+ sw_start_vector:=1;
+ MCf(?6)
+endfont
+%***********************************************************************
+beginfont("EN:rotate 1")
+ sw_start_vector:=1;
+ MCf(^^30,!4,^^30,?6)
+endfont
+%***********************************************************************
+beginfont("EN:change bond 1")
+ ratio_cr:=1;
+ MCf(^^30,!~dm,!~dl,!~dr,!~wf,!~wb,!~zf,!~zb)
+endfont
+%***********************************************************************
+beginfont("EN:change bond 2")
+ ratio_cr:=1;
+ MCf(^^30,!9,1=vf,2=vb,3=tm,4=dt,5=wv,@(7~bd^-45`2,9~ov^45`2)/Me)
+endfont
+%***********************************************************************
+beginfont("EN:change bond length")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,!3,!`1.2,!2)
+endfont
+%***********************************************************************
+beginfont("EN:change bond length")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,!3,``1.2,!3)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 1")
+ sw_start_vector:=1;
+ MCf(^^30,!2,O,!2)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 2")
+ sw_start_vector:=1;
+ MCf(^^30,!6,2:O,@(3,5)N)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 3")
+ sw_start_vector:=1;
+ MCf(?6,4\,?6,2:N)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 4")
+ sw_start_vector:=1;
+ MCf(?6,4\,??6,2:N)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 5")
+ sw_start_vector:=1;
+ MCf(?6,4\,?6,#2:N)
+endfont
+%***********************************************************************
+beginfont("EN:change atom 6")
+ sw_start_vector:=1;
+ MCf(?6,4\,?6,-2:N)
+endfont
+%***********************************************************************
+beginfont("EN:fused ring 1")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,?6,$(3,3,3)?6)
+endfont
+%***********************************************************************
+beginfont("EN:fused ring 2")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,?6,$(3,9,14)??6)
+endfont
+%***********************************************************************
+beginfont("EN:fused ring 3")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,?6,$(3,9)??6,(11,4)=??6[4],(16,17)=??6[3],(20,5)=??4[2])
+endfont
+%***********************************************************************
+beginfont("EN:fused ring 4")
+ sw_start_vector:=1;
+ sw_numberB:=1;
+ MCf(^^30,?6,$(3,9)??6,(11,4)=??6[4],(20,5)=??5[3],(16,17)=??5[2])
+endfont
+%***********************************************************************
+beginfont("EN:Spiro ring ")
+ sw_start_vector:=1;
+ ratio_cr:=1;
+ MCf(^^30,!6,4*,?5)
+endfont
+%***********************************************************************
+beginfont("EN:branch")
+ sw_numberB:=1;
+ sw_start_vector:=1;
+ MCf(^^30,!3,/!2,!3)
+endfont
+%***********************************************************************
+beginfont("EN:branch")
+ sw_numberB:=1;
+ sw_start_vector:=1;
+ MCf(^^30,!6,4\,!2)
+endfont
+%***********************************************************************
+beginfont("EN:substituent 1")
+ sw_start_vector:=1;
+ MCf(^^30,!,//O,!,/*H,!,*/H,!,/?3,!,**?3,!)
+endfont
+%***********************************************************************
+beginfont("EN:substituent 2")
+ sw_start_vector:=1;
+ MCf(^^30,!,/Me,!,/Et,!3,/Pr,!,/iPr,!3,/tBu,!)
+endfont
+%***********************************************************************
+beginfont("EN:substituent 3")
+ sw_start_vector:=1;
+ MCf(^^30,!10,2:/Me,3:/Et,6:/Pr,7:/iPr,10:/tBu)
+endfont
+%***********************************************************************
+beginfont("EN:substituent 4")
+ sw_start_vector:=1;
+ MCf(^^30,?6,@(3`2^30,3~wf,4~zf,6~wf^-30,6~zf^30)/H)
+endfont
+%***********************************************************************
+beginfont("EN:substituent 5")
+ sw_start_vector:=1;
+ MCf(^^30,{,``1,!7,},@(2,3)/*Me`2^30,5:*/Pr>lr,7:*/Pr>rl
+)
+endfont
+%***********************************************************************
+beginfont("EN:change atom and substituent")
+ sw_start_vector:=1;
+ MCf(^^30,!3,NH,!,SOO,!3)
+endfont
+%***********************************************************************
+beginfont("EN:chain strech direction mode 1")
+ MCf(
+ ?4,@(3^-90,3^-30,3^90)/'(!3,"{>hz}")>hz,
+ @(1^-60,1`1.5,1^60)/'(!2,"{>vt}")>vt
+ )
+endfont
+%***********************************************************************
+beginfont("EN:chain strech direction mode 2")
+ MCf(
+ ^^30,!6,@(3^-30,3,3^30)/'(!,!,!,"{>lr}")>lr,
+ @(5^-30,5,5^30)/'(!,!,!,"{>rl}")>rl
+ )
+endfont
+%***********************************************************************
+beginfont("EN:chain strech direction mode 3")
+ sw_start_vector:=1;
+ MCf(^^-30,!6,@(6>45)/'(!3,"{>45}"),
+ @(3>'(90,-90,90))/'(!,!,!,"{>'(90,-90,90)}")
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Change color")
+ sw_start_vector:=1;
+ MCf(^^30,?6,@(2,5)N,2:red,5:green,3=red)
+endfont
+%***********************************************************************
+beginfont("EN:Chain start multi characters")
+% sw_start_vector:=1;
+ MCf(^^30,COOH,!0,!,/OH^-30,/COOH^30,!2,COOH)
+endfont
+%***********************************************************************
+beginfont("EN:User definition")
+ sw_start_vector:=1;
+ iBuOH:='(!,/Me,!,OH);
+ MCf(^^30,?6,@(4,6)/iBuOH)
+endfont
+%***********************************************************************
+beginfont("EN:Inline definition")
+ sw_start_vector:=1;
+ MCf(^^30,!3,/'(!,/Me,!,OH),!3)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch start vector")
+ sw_start_vector:=0;
+ MCd(.7,.7)( 0, 0)(^^30,Ph,4:/Cl,3:/F)
+ sw_start_vector:=1;
+ MCd(.7,.7)( 1, 1)(^^30,Ph,4:/Cl,3:/F)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch numberingA")
+ sw_numberA:=1;
+ sw_start_vector:=1;
+ MCf(^^30,?6,-4=?6,-3\,!,?6,#10:/Et)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch numberingB")
+ sw_numberB:=1;
+ sw_start_vector:=1;
+ MCf(^^30,?6,-4=?6,-3\,!,?6,#10:/Et)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch Frame")
+ MCd(.7,.7)( 0, 0)(^^30,Ph,4:/Cl,3:/F)
+ sw_frame:=1;
+ MCd(.7,.7)( 1, 1)(^^30,Ph,4:/Cl,3:/F)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch Solid ratio")
+ MCd(.7,.7)( 0, 0)(^^30,Ph,4:/Cl,3:/F)
+ sw_solid:=1; ratio_bond_width:=0.08;
+ MCd(.7,.7)( 1, 1)(^^30,Ph,4:/Cl,3:/F)
+endfont
+%***********************************************************************
+beginfont("EN:Switwch Expand")
+ MCd(.6,.6)(0, 0)(^^30,Ph,4:/COOH,3:/NH2)
+ sw_expand:=1;
+ MCd(.6,.6)(1, 1)(^^30,Ph,4:/COOH,3:/NH2)
+endfont
+%***********************************************************************
+beginfont("EN:Ampicillin")
+ MCf(^^45,
+ ?4,2:N,2=??5,-1:S,
+ @(3^45,4^-45)/*H,1://O^15,5:/*COOH^-18,@(6^35,6^-35)/Me,
+ 4\^75,NH,!,//O,!,NH,!,Ph
+ )
+endfont
+%***********************************************************************
+beginfont("EN:Cholesterol","MW:386.65")
+ MCf(
+ ^^30,?6,$(-4,-2)??6,-4=??5,7=dl,
+ 1:*/OH,@(4,12)*/Me^60,9:*/H^60,
+ 10:/*H^180,@(11,-1)/*H^-60,
+ -1\^17,/*Me,!4,/Me,!,
+ )
+endfont
+%***********************************************************************
+bye
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
new file mode 100644
index 00000000000..6468b687ad7
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
new file mode 100644
index 00000000000..2b0c4e507c6
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
@@ -0,0 +1,572 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Molecular Coding Format manual by Akira Yamaji 2015.7
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[a4paper]{article}
+\usepackage{graphicx}
+\pagestyle{empty}
+\topmargin=-17mm
+\textheight=27.5cm
+\textwidth=18cm
+\oddsidemargin=-9mm
+\parindent=0mm
+\unitlength=1mm%
+\makeatletter
+%----------------------------------------------------------------------------
+\newcount \fontnum%
+\newcount \tempnum%
+\fontnum=0%
+\tempnum=1%
+%----------------------------------------------------------------------------
+\font\@strufont=mcf_man_soc\relax%
+%----------------------------------------------------------------------------
+\def\MCFtitle#1{\framebox{\bf No.\the\tempnum}\hspace{2mm}#1}
+%----------------------------------------------------------------------------
+\def\MCFstructure{%
+ \makebox(75,0)[t]{\frame{\makebox(70,35){\@strufont\char\fontnum}}}
+ \advance\fontnum\@ne\relax\advance\tempnum\@ne\relax%
+}%
+%----------------------------------------------------------------------------
+\def\MCFstructureEPS{%
+ \makebox(75,0)[t]%
+ {\frame{\makebox(70,35){%
+ \ifnum\fontnum<10\includegraphics{mcf_man_soc-00\the\fontnum}%
+ \else\ifnum\fontnum<100\includegraphics{mcf_man_soc-0\the\fontnum}\fi\fi}}}%
+ \advance\fontnum\@ne\relax\advance\tempnum\@ne\relax%
+}%
+%----------------------------------------------------------------------------
+\begin{document}
+\noindent%
+\begin{picture}(180,0)
+ \put(50,12){{\LARGE Molecular coding format manual}\hspace{20mm}
+ by Akira Yamaji 2015.7}
+\end{picture}\vspace{-6mm}\\
+%----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain (1)}
+\begin{verbatim}
+plus(+):anticlockwize,minus(-)clockwize
+bold arrow is default angle and position
+
+ ^^30,-60,60,-60,60,-60,60
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%1----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain (2)}
+\begin{verbatim}
+!,!!: take 60 or -60 depend on
+ current angle and enviroment
+
+ !6 (!!6)
+
+ ** !!6: !,!,!,!,!,!
+ !6: {,!!6,}
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Ring}
+\begin{verbatim}
+six membered ring
+
+ ?6 (??6)
+
+ ** ??6 :^^-120,60,60,60,60,60,&(-5)
+ ?6 : {,??6,}
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{rotate}
+\begin{verbatim}
+^^angle:rotate current angle
+
+ ^^30,!4,^^30,?6
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change bond (1)}
+\begin{verbatim}
+~bond change bond
+ dm:double,dl:double(left),dr:double(right),
+ wf:wedge forward,wb:wedge backward,
+ zf:wedge dotted,zb:wedge dotted backward
+
+ ^^30,!~dm,!~dl,!~dr,!~wf,!~wb,!~zf,!~zb
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change bond (2)}
+\begin{verbatim}
+ Bn=bond : change bond
+ dm:double,dl:double(left),dr:double(right),
+ wf:wedge forward,wb:wedge backward,
+ zf:wedge dotted,zb:wedge dotted backward
+
+ ^^30,!9,1=vf,2=vb,3=tm,4=dt,5=wv,
+ @(7~bd^-45`2,9~ov^45`2)/Me
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\newpage
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change bond length (1)}
+\begin{verbatim}
+B`length : change bond length of B
+
+ ^^30,!3,!`1.2,!2
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change bond length (2)}
+\begin{verbatim}
+``length : change all bond length after
+
+ ^^30,!3,``1.2,!3
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (1)}
+\begin{verbatim}
+Insert hetero atom
+
+ ^^30,!2,O,!2
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (2)}
+\begin{verbatim}
+2:O : change A2 C to O
+@(3,5)N : change A3,A5 C to N
+
+ ^^30,!6,2:O,@(3,5)N
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (3)}
+\begin{verbatim}
+2:N : change A2(brock ahead) C to N
+
+ ?6,4\,?6,2:N
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (4)}
+\begin{verbatim}
+2:N : change A2(brock ahead) C to N
+??6 is not brock
+ ?6,4\,??6,2:N
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (5)}
+\begin{verbatim}
+#2:N : change A#2 C to N
+
+ ?6,4\,?6,#2:N
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom (6)}
+\begin{verbatim}
+-2:N : change A(-2) C to N
+
+ ?6,4\,?6,-2:N
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Fused ring (1)}
+\begin{verbatim}
+
+ ?6,$(3,3,3)??6 NG
+ ?6,$(3,9,14)??6 OK
+ ?6,$(-4,-3,-3)??6 OK
+ ?6,$(#3,#9,#14)??6 OK
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Fused ring (2)}
+\begin{verbatim}
+
+ ?6,$(3,3,3)?6 OK
+ ?6,$(3,9,14)?6 NG
+ ?6,$(-4,-3,-3)?6 OK
+ ?6,$(#3,#9,#14)?6 OK
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Fused ring (3)}
+\begin{verbatim}
+(4,11)=??6[4] : fuse 4/6 ring to B4 ..B11
+(16,17)=??6[3] : fuse 3/6 ring to B16..B17
+(20,5)=??4[2] : fuse 2/4 ring to B20.. B5
+
+ ^^30,?6,$(3,9)??6,(4,11)=??6[4],
+ (16,17)=??6[3],(20,5)=??4[2]
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Fused ring (4)}
+\begin{verbatim}
+(20,5)=??5[3] : fuse 3/5 ring to B20..B5
+(16,17)=??5[2] : fuse 2/5 ring to B16..B17
+
+ ^^30,?6,$(3,9)??6,(4,11)=??6[4],
+ (20,5)=??5[3],(16,17)=??5[2]
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Spiro ring}
+\begin{verbatim}
+4*,?5 : add ?5(5 membered ring) to A4
+
+ ^^30,!6,4*,?5
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Branch (1)}
+\begin{verbatim}
+/ : branch bond
+/ : process at last
+
+ ^^30,!3,/!2,!3
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Branch (2)}
+\begin{verbatim}
+4\ : branch bond at A4
+
+ ^^30,!6,4\,!2
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Substituent (1)}
+\begin{verbatim}
+/ : single // : double
+*/ : wedge forward /* : wedge backward
+** : direct
+
+ ^^30,!,//O,!,/*H,!,*/H,!,/?3,!,**?3,!
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Substituent (2)}
+\begin{verbatim}
+Insert substituent
+
+ ^^30,!,/Me,!,/Et,!3,/Pr,!,/iPr,!3,/tBu,!
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Substituent (3)}
+\begin{verbatim}
+Add substituent
+
+ ^^30,!10,2:/Me,3:/Et,6:/Pr,7:/iPr,10:/tBu
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Substituent (4)}
+\begin{verbatim}
+~,^,`,> : change type,angle,length,enviroment
+ of substituent
+
+ ^^30,?6,
+ @(3`2^30,3~wf,4~zf,6~wf^-30,6~zf^30)/H
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Substituent (5)}
+\begin{verbatim}
+~,^,`,> : change type,angle,length,enviroment
+ of substituent
+
+ ^^30,{,``1,!7,},
+ @(2,3)/*Me`2^30,5:*/Pr>lr,7:*/Pr>rl
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change atom and Substituent}
+\begin{verbatim}
+NH,SOO : inset hetero atom and substituent
+ simultaneously
+
+ ^^30,!3,NH,!,SOO,!3
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain strech direction environment (1)}
+\begin{verbatim}
+>hz : horizontal enviroment (default)
+>vt : vertical enviroment
+
+ ?4,
+ @(3^-90,3^-30,3^90)/'(!3,"{>hz}")>hz,
+ @(1^-60,1`1.5,1^60)/'(!2,"{>vt}")>vt
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain strech direction environment (2)}
+\begin{verbatim}
+>lr : left-right enviroment
+>rl : right-left enviroment
+
+ ^^30,!6,
+ @(3^-30,3,3^30)/'(!3,"{>lr}")>lr,
+ @(5^-30,5,5^30)/'(!3,"{>rl}")>rl
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain strech direction environment (3)}
+\begin{verbatim}
+>45 : fixed angle enviroment
+>'(-90,90,-90) : multi angle enviroment
+
+ ^^-30,!6,@(2>45)/'(!3,"{>45}"),
+ @(6>'(-90,90,-90))/'(!2,"{>(-90,90,-90)}")
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Change color}
+\begin{verbatim}
+@(5)green : change color of A5 green
+$(3)red : change color of B3 red
+
+ ^^30,?6,@(2,5)N,
+ 2:red,5:green,3=red
+
+\end{verbatim}
+\end{minipage}
+\MCFstructureEPS
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Chain start multiple characters}
+\begin{verbatim}
+Use !0 instead of !,
+if begin with multi charactor string
+
+ ^^30,COOH,!0,!,/OH^-30,/COOH^30,!2,COOH
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{User definition}
+\begin{verbatim}
+iBuOH : user defined substructure
+
+ iBuOH:='(!,/Me,!,OH)
+ MCf(^^30,?6,@(4,6)/iBuOH)
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Inline definition}
+\begin{verbatim}
+Insert user defined substructure
+
+ ^^30,!3,/'(!,/Me,!,OH),!3
+
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch Start Vector}
+\begin{verbatim}
+
+ MCd(.8,.8)( 0, 0)(^^30,Ph,4:/Cl,3:/F)
+ sw_start_vector:=1;
+ MCd(.8,.8)( 1, 1)(^^30,Ph,4:/Cl,3:/F)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch NumberingA}
+\begin{verbatim}
+
+ sw_numberA:=1;
+ MCf(^^30,
+ Ph,-4=Ph1,-3\,!,Ph,10:/Et)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch NumberingB}
+\begin{verbatim}
+
+ sw_numberB:=1;
+ MCf(^^30,
+ Ph,-4=Ph1,-3\,!,Ph,10:/Et)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch Frame}
+\begin{verbatim}
+
+ MCd(.8,.8)(0,0)(^^30,Ph,4:/Cl,3:/F)
+ sw_frame:=1;
+ MCd(.8,.8)(1,1)(^^30,Ph,4:/Cl,3:/F)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch Solid ratio}
+\begin{verbatim}
+
+ MCd(.8,.8)( 0, 0)(^^30,Ph,4:/Cl,3:/F)
+ sw_solid:=1; ratio_bond_width:=0.08;
+ MCd(.8,.8)( 1, 1)(^^30,Ph,4:/Cl,3:/F)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Switch Expand}
+\begin{verbatim}
+
+ MCd(.6,.6)(0,0)(^^30,Ph,4:/COOH,3:/NH2)
+ sw_expand:=1;
+ MCd(.6,.6)(1,1)(^^30,Ph,4:/COOH,3:/NH2)
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Example(1) Ampicillin}
+\begin{verbatim}
+ ^^45,?4,2:N,2=??5,-1:S,
+ @(3^45,4^-45)/*H,1://O^15,
+ 5:/*COOH^-18,@(6^35,6^-35)/Me,
+ 4\^75,NH,!,//O,!,NH,!,Ph
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\begin{minipage}[t][38mm]{100mm}
+\MCFtitle{Example(2) Cholesterol}
+\begin{verbatim}
+ ^^30,?6,$(-4,-2)??6,-4=??5,7=dl,
+ 1:*/OH,@(4,12)*/Me^60,9:*/H^60,
+ 10:/*H^180,@(11,-1)/*H^-60,
+ -1\^17,/*Me,!4,/Me,!,
+\end{verbatim}
+\end{minipage}
+\MCFstructure
+\vspace{6mm}\\
+%-----------------------------------------------------------------------------
+\end{document}
diff --git a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf
new file mode 100644
index 00000000000..bd05e6e2a1d
--- /dev/null
+++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf
@@ -0,0 +1,764 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% mcf2graph ver 3.50 Copyright (c) 2013,2014,2015 Akira Yamaji
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+% and associated documentation files (the "Software"), to deal in the Software without restriction,
+% including without limitation the rights to use, copy, modify, merge, publish, distribute,
+% sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+% furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all copies
+% or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,EXPRESS OR IMPLIED,
+% INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE
+% AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% mcf2graph is METAFONT/METAPOST macro package convert
+% Molecular Coding Format(MCF) to font/eps/sgv/png/mdl molfile(V2000)
+%---------------------------------------------------------------------------------------------
+% Web page of author: http://molecoding.cocolog-nifty.com/blog/
+% Suggestion or request mail to: akira.yamaji5@gmail.com
+%---------------------------------------------------------------------------------------------
+% Set outputformat to "png" : mpost -s ahangle=1 FILENAME
+% Set outputformat to "svg" : mpost -s ahangle=2 FILENAME
+% Set outputformat to MDL Molfile : mpost -s ahangle=3 FILENAME
+% Set output no image file : mpost -s ahangle=0 FILENAME
+% Set first font only (for test) : mpost -s ahlength=1 FILENAME
+% Set output checklist : mpost -s ahlength=2 FILENAME
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+tracingstats:=1;
+message " This is mcf2graph ver 3.5 2015.7 ";
+newinternal com,par,cntA,cntB,adrS,adrA,adrB,dx,nX,i,u,j,k,v,xp,yp,nA,nB;
+%-------------------------------------------------------------------------------------------------
+pair posB[],posA[],pairT,Ls,Le,pairA;
+numeric angB[],angA[],br_ang[],sB[],eB[],f_FON[],atom_w[],atom_h[],atom_d[],strA[],stkB[],
+ stkA[],stkL[],stkM[],strW[],lineB[],lenB[],ps_com[],ps_adr[],ps_len[],ps_rot[],
+ ps_env[],comMC[][],parMC[][],stock_p[],cntMC[],colorA[],colorB[],tblN[],tblB[][],
+ wtA[],sumA[],CH[],NH[],NO[],SO[],CCl[],CF[],CBr[],?[],??[],![],!![],Ph[],ph[];
+path pA,pB,pC,pT;
+string info[],tblA[],com_str[],fomula_str,mp_log_name,mol_name;
+picture atom_font[],chem_structure,temp_picture;
+%-------------------------------------------------------------------------------------------------
+sw_numberA:=sw_numberB:=sw_frame:=sw_logout:=sw_solid:=sw_expand:=sw_start_vector:=0;
+sw_atom_frame:=sw_checklist:=sw_MOLfile:=char_num:=str_cnt:=size_changed:=proc_end:=0;
+if known outputtemplate:
+ f_MP:=1;
+ if known SAVfile: % for MePoTeX
+ mp_log_name:="@MCF_INFO.log"; outputtemplate:="%j.%c.";
+ def beginchar(text s)= enddef; def endchar = enddef; sw_logout:=1;
+ else: % for METAPOST
+ mp_log_name:=jobname&"-info.log";
+ if ahlength=1: proc_end:=1; fi % first molecular only
+ if ahlength=2: sw_checklist:=1; def shipit = enddef; fi % checklist on
+ if ahangle=0: def shipit = enddef; % No image file
+ elseif ahangle=1: outputformat:="png"; hppp:=vppp:=0.1; % PNG format
+ elseif ahangle=2: outputformat:="svg"; % SVG format
+ elseif ahangle=3: sw_MOLfile:=1; def shipit = enddef; % MDL Molefile on
+ fi
+ outputtemplate:="%j-%3c."&outputformat;
+ def beginchar(text s)= beginfig(char_num) enddef; def endchar = endfig enddef;
+ fi
+ vardef mp_filename = jobname&"-"&fit_zero(char_num)&decimal(char_num)&"."&outputformat enddef;
+ def printf expr s= write s to mp_log_name enddef;
+ ahangle:=45; ahlength:=4; def # = enddef; color color_list[];
+ def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef;
+ def define_pixels(text s) = enddef;
+else: f_MP:=0; def Cp(expr s) = enddef; def color = transform enddef;
+ mode_setup; def printf expr s= message s enddef; def mp_filename= "" enddef; fi
+clearit; chem_structure:=currentpicture;
+%-------------------------------------------------------------------------------------------------
+let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =;
+?3:=?20:=??3:=??20:=Ph:=Ph1:=Ph2:=ph:=ph1:=ph2:=hz:=0; vt:=1;
+first_def_number:=500; user_def_number:=2500; ab_def_number:=3000; unit_e:=1/2048;
+lr_margin:=tb_margin:=0.4mm; ratio_cr:=-0.66; ratio_atom_bond:=0.33;
+ratio_thickness_bond:=0.015; offset_atom#:=0.7pt#; max_bond_width:=0.15;
+ratio_pen_wd:=1.4; ratio_bondgap_bond:=0.15; ratio_zebra_gap:=0.12;
+ratio_zebra_black:=0.4; ratio_wedge_bond:=0.15; font_gap:=.066;
+offset_thick#:=0.2pt#; offset_gap#:=0.3pt#; offset_zebra_gap#:=0.1pt#;
+par_s=ASCII("{"); par_e=ASCII("}"); score_u=ASCII("_"); hat=ASCII("^");
+for i:=1 upto 16: info[i]:=":"; endfor
+def def_com(expr n)(text tx)= nA:=n; forsuffixes list=tx:: list:=nA; nA:=nA+1; endfor enddef;
+def_com(-4000)(_term,_jp_atom,_jp_atom_abs,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_chg_line,
+ _dl,_tmp_line,_chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_set_ang,_adj_ang,_chg_env,
+ _tmp_env,_set_colorA,_set_colorB,_postA,_postB,_postC,_postD,_postE,_postF,_set_psA,
+ _set_clr,_set_adr,_mk_bond,_set_atom,_arg_ang,_chg_atom,_tmp_rot,_fuse,_push,_pop,_size_a);
+def_com(1)(si,dl,dr,dm,tm,wf,wb,bd,zf,zb,ov,dt,no,ar,vf,vb,wv,nl);
+%-------------------------------------------------------------------------------------------------
+def parameter_list= sw_checklist,sw_numberA,sw_numberB,sw_frame,sw_logout,sw_solid,sw_expand,
+ sw_MOLfile,sw_start_vector,sw_atom_frame,lr_margin,tb_margin,ratio_atom_bond,ratio_thickness_bond,
+ ratio_cr,offset_atom,max_bond_width,ratio_pen_wd,ratio_bondgap_bond,ratio_zebra_black,
+ ratio_zebra_gap,ratio_wedge_bond,font_gap,offset_zebra_gap,offset_gap,offset_thick
+enddef;
+%-------------------------------------------------------------------------------------------------
+nA:=0; for list=parameter_list: st_p[incr nA]:=list; endfor
+def store_par(text t)= nA:=0; for list=t: if st_p[incr nA]<>list: st_p[nA]:=list; fi endfor enddef;
+def restore_par(text t)= nA:=0;
+ forsuffixes list=t: if list<>st_p[incr nA]: list:=st_p[nA]; fi endfor enddef;
+%-------------------------------------------------------------------------------------------------
+def beginfont(text s)= mol_name:=""; len_x:=len_y:=cntA:=0;
+ store_par(parameter_list); ratio_bond_width:=1mm#/font_wd#;
+ for i:=1 upto 12: if info[i]<>":": info[i]:=":"; fi endfor
+ for list=s: cntA:=cntA+1; info[cntA]:=list;
+ if substring (0,2) of list="EN":
+ mol_name:=substring (3,length(list)) of list; fi exitif cntA=11; endfor
+ ratio_hw:=font_ht#/font_wd#;
+ if f_MP=0:
+ if mode=proof:
+ if font_wd#>=font_ht#:
+ if font_wd#>35mm#:font_wd#:=35mm#;font_ht#:=ratio_hw*35mm#; fi
+ else: if font_ht#>35mm#:font_ht#:=35mm#;font_wd#:=35mm#/ratio_hw; fi fi fi fi
+ beginchar(char_num,font_wd#,font_ht#,0); clearit;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def endfont=
+ if sw_frame=1: AUX(draw_frame(len_x,len_y,(min_x,min_y),0.2pt);) fi
+ if sw_start_vector=1: AUX(start_vector) fi if sw_logout=1: logfile_out; fi
+ if sw_checklist=1: mol_check; checklist_out; fi if sw_MOLfile=1: mol_check; MOL_out; fi
+ char_num:=char_num+1; currentpicture:=chem_structure; chem_structure:=nullpicture;
+ restore_par(parameter_list);
+ if size_changed=1: font_wd#:=stock_wd#; font_ht#:=stock_ht#; size_changed:=0; fi
+ endchar;
+ if proc_end=1: scantokens("bye"); fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def size_setup= BL# := font_wd#*ratio_bond_width;
+ wedge_wd# := ratio_wedge_bond*BL#;
+ zebra_gap# := ratio_zebra_gap*BL#+offset_zebra_gap#;
+ AL# := ratio_atom_bond*BL#+offset_atom#;
+ gap# := ratio_bondgap_bond*BL#+offset_gap#;
+ pen_wd# := ratio_thickness_bond*BL#+offset_thick#;
+ Apen_wd# := ratio_pen_wd*pen_wd#;
+ define_pixels(BL,zebra_gap,wedge_wd,AL,gap,pen_wd,Apen_wd,font_wd,font_ht);
+ font_size_setup;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def scaling= min_x:=min_y:= 4095.999; max_x:=max_y:=-4095.999;
+for i=1 upto cntA: xpos:=xpart(posA[i]); ypos:=ypart(posA[i]);
+ if strA[i]<>0: str_len:=nC:=num_d:=0;
+ for j=0 upto length(com_str[strA[i]])-1: nA:=ASCII(pic_c(j,com_str[strA[i]]));
+ if (nA=score_u)or(nA=hat)or(nA=par_s)or(nA=par_e):
+ if (nA=hat)and(nC<.5AL): nC:=.5AL; fi;
+ if (nA=score_u)and(num_d<.5AL): num_d:=.5AL; fi;
+ else: str_len:=str_len+atom_w[nA]; fi
+ endfor
+ str_ang:=(br_ang[i] mod 360); num_f:=str_len;
+ if (str_ang<=91)or(str_ang>=269): num_f:=0; else: str_len:=0; fi
+ if (xpos-num_f+.5AL)<min_x: min_x:=xpos-num_f+.5AL;
+ elseif (xpos+str_len-.5AL)>max_x: max_x:=xpos+str_len-.5AL; fi
+ if (ypos-num_d-.5AL)<min_y: min_y:=ypos-num_d-.5AL;
+ elseif (ypos+nC+.5AL)>max_y: max_y:=ypos+nC+.5AL; fi
+ else: if xpos<min_x: min_x:=xpos; elseif xpos>max_x: max_x:=xpos; fi
+ if ypos<min_y: min_y:=ypos; elseif ypos>max_y: max_y:=ypos; fi fi
+ endfor
+ len_x:=max_x-min_x; len_y:=max_y-min_y;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def resize(expr WD,HT)=
+ if (len_y/len_x)>ratio_hw: factor:=(font_ht*HT-2tb_margin)/len_y;
+ else: factor:=(font_wd*WD-2lr_margin)/len_x; fi
+ ratio_bond_width:=ratio_bond_width*factor; len_x:=len_x*factor; len_y:=len_y*factor;
+enddef;
+%-------------------------------------------------------------------------------------------------
+for i=1 upto 128: f_FON[i]=0; endfor asc0:=ASCII("0"); asc9:=ASCII("9");
+def font_use_check=
+ for i=1 upto 128: if f_FON[i]<>0: f_FON[i]:=0; fi endfor
+ if (sw_numberA=1)or(sw_numberB=1): for j=asc0 upto asc9: f_FON[j]:=1; endfor
+ else: for i=1 upto cntA: if strA[i]<>0: for j=0 upto length(com_str[strA[i]])-1:
+ f_FON[ASCII(pic_c(j,com_str[strA[i]]))]:=1; endfor fi endfor fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+vardef '(text s)= ''(incr mc_num)(s); mc_num enddef;
+def set_def_MC=
+ save /,*,//,/*,*/,**,~,^,`,{,},<,>,&,:,=,\,\\,*\,\*,@,$,#,##,d,w,z,inside_def_MC;
+ inside_def_MC:=1; d:=dl; w:=wf; z:=zf;
+ vardef $(text a)tertiary b == $$(a)(b) enddef; vardef @(text a)tertiary b == @@(a)(b) enddef;
+ vardef #primary n == n MUL unit_e enddef; vardef ##primary n == -n MUL unit_e enddef;
+ tertiarydef a^b == (_tmp_rot,b),a enddef; tertiarydef a`b == (_tmp_len,b),a enddef;
+ tertiarydef a>b == (_tmp_env,b),a enddef; tertiarydef a~b == (_tmp_line,b),a enddef;
+ tertiarydef a=b == $$(a)(b) enddef; tertiarydef a:b == @@(a)(b) enddef;
+ def &primary n ==(_cyc,n) enddef; def /primary n ==(_postA,n) enddef;
+ def * == (0,1) enddef; def \ == *,0 enddef; def \\ == *,0~dm enddef;
+ def *\ == (0,1),0~wf enddef; def \* == (0,1),0~zf enddef;
+ def { == (_push,1) enddef; def } == (_pop,1) enddef;
+ def {{ == (_push,0) enddef; def }} == (_pop,0) enddef;
+ def >>primary n == (_chg_env,n) enddef; def ``primary n == (_chg_len,n) enddef;
+ def ^^primary n == (_rot_ang,n) enddef; def ~~primary n == (_chg_line,n) enddef;
+ def /secondary n == (_postA,n) enddef; def //secondary n == (_postB,n) enddef;
+ def */secondary n == (_postC,n) enddef; def /*secondary n == (_postD,n) enddef;
+ def **secondary n == (_postE,n) enddef; def */*secondary n == (_postF,n) enddef;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def PM(expr a,b,c)= comMC[a][incr cntMC[a]]:=b; parMC[a][cntMC[a]]:=c; enddef;
+def ''(expr k)(text s)= begingroup
+ if unknown inside_def_MC:: set_def_MC fi cntMC[k]:=0;
+ for list==s::
+ if known list::
+ if pair list:: PM(k,xpart(list),ypart(list))
+ elseif numeric list::
+ if list>=first_def_number::
+ for i==1 upto cntMC[list]:: PM(k,comMC[list][i],parMC[list][i]) endfor
+ else:: PM(k,_mk_bond,list) fi
+ elseif string list:: com_str[incr str_cnt]:=list; PM(k,_set_atom,str_cnt)
+ if pic_c(0,list)=="{":: strW[str_cnt]:=1.7; else:: strW[str_cnt]:=1; fi fi fi
+ endfor
+ endgroup
+enddef;
+%-------------------------------------------------------------------------------------------------
+def !?(expr a)(expr b)(expr c) = PB(_jp_bond,a) PB(_get_len,a) PB(_push,c)
+ PB(_chg_len,_ring_len) for i==1 upto b-2:: PB(_mk_bond,360 DIV b) endfor PB(_pop,c)
+ if a>=1:: PB(_cyc_eB,0) elseif a<=0:: PB(_cyc_eB,a-b+2) else:: PB(_cyc_eB,a) fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def !!?(expr a)(expr b)(expr c)(expr n) = PB(_jp_bond,xpart(a)) PB(_push,n)
+ if b==6:: PB(_chg_len,0) for i==1 upto c-1:: PB(_mk_bond,60) endfor
+ elseif b==5:: if c==2:: PB(_chg_len,1.25) PB(_mk_bond,80)
+ elseif c==3:: PB(_chg_len,1.1) PB(_mk_bond,78) PB(_mk_bond,72) fi
+ elseif b==4:: PB(_chg_len,1.225) PB(_mk_bond,105) fi
+ PB(_pop,n) if ypart(a)<=0:: PB(_cyc_eB,ypart(a)-c+1) else:: PB(_cyc_eB,ypart(a)) fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def PB(expr b,c)= comMC[ab_num][incr cntBS]:=b; parMC[ab_num][cntBS]:=c; enddef;
+def $$(text t)(expr e) = begingroup save cntBS; cntBS:=0; ab_num:=ab_num+1;
+ if known e:: if numeric e::
+ if (e>=si)and(e<=nl):: if e==dl:: for list==t:: PB(_dl,list) endfor
+ else:: for list==t:: PB(_set_adr,list) PB(_set_line,e) endfor fi
+ elseif (e>=?3)and(e<=?20):: for list==t:: !?(list)(e-?3+3)(1) endfor
+ elseif (e>=??3)and(e<=??20):: for list==t:: !?(list)(e-??3+3)(0) endfor
+ elseif e==Ph1:: !?(t)(6)(1) PB(_dl,-2) PB(_dl,-4)
+ elseif e==Ph2:: !?(t)(6)(1) PB(_dl,-1) PB(_dl,-3) PB(_dl,-5)
+ elseif e==ph1:: !?(t)(6)(0) PB(_dl,-2) PB(_dl,-4)
+ elseif e==ph2:: !?(t)(6)(0) PB(_dl,-1) PB(_dl,-3) PB(_dl,-5)
+ elseif comMC[e][1]==_fuse::
+ for list==t:: !!?(list)(parMC[e][1])(comMC[e][2])(parMC[e][2]) endfor fi
+ elseif color e:: color_list[incr cntC]:=e;
+ for list==t:: PB(_set_adr,list) PB(_set_colorB,cntC) endfor fi fi
+ cntMC[ab_num]:=cntBS;
+ ab_num %--- Retern value -------
+ endgroup
+enddef;
+%-------------------------------------------------------------------------------------------------
+def PA(expr b,c)= comMC[ab_num][incr cntAS]:=b; parMC[ab_num][cntAS]:=c; enddef;
+def @@(text t)(expr s)= begingroup save cntAS; cntAS:=0; ab_num:=ab_num+1;
+ if known s:: if numeric s::
+ if (s>=H)and(s<=U):: for list==t:: PA(_set_adr,list) PA(_chg_atom,s) endfor
+ elseif s==NH:: for list==t::
+ if numeric list:: PA(_set_adr,list) PA(_chg_atom,N)
+ PA(_tmp_line,no) PA(_tmp_len,_size_a) PA(_set_psA,H)
+ elseif pair list:: PA(xpart(list),ypart(list)) fi endfor
+ elseif s==SOO:: for list==t:: PA(_set_adr,list) PA(_chg_atom,S)
+ PA(_tmp_rot,35) PA(_tmp_line,dm) PA(_set_psA,O)
+ PA(_tmp_rot,-35) PA(_tmp_line,dm) PA(_set_psA,O) endfor
+ fi
+ elseif pair s:: xs:=xpart(s); ys:=ypart(s); PA(_set_clr,1)
+ for list==t::
+ if numeric list::
+ if xs==_postA:: elseif xs==_postB:: PA(_tmp_line,dm)
+ elseif xs==_postC:: PA(_tmp_line,wf) elseif xs==_postD:: PA(_tmp_line,zf)
+ elseif xs==_postE:: PA(_tmp_line,nl) elseif xs==_postF:: PA(_tmp_line,no) fi
+ PA(_set_adr,list) PA(_set_psA,ys)
+ elseif pair list:: PA(xpart(list),ypart(list)) fi
+ endfor
+ PA(_set_clr,0)
+ elseif color s:: color_list[incr cntC]:=s;
+ for list==t:: PA(_set_adr,list) PA(_set_colorA,cntC) endfor fi fi
+ cntMC[ab_num]:=cntAS;
+ ab_num %--- Retern value -------
+ endgroup
+enddef;
+%-------------------------------------------------------------------------------------------------
+def PS(expr a,b)= comMC[0][incr cntMC[0]]:=a; parMC[0][cntMC[0]]:=b; enddef;
+def ps_get(expr n)= cntC:=cntMC[0]; cntPS:=cntP;
+ for i=n upto cntP: PS(_jp_atom_abs,ps_adr[i]) PS(_push,1)
+ if ps_rot[i]<>0: PS(_rot_ang,ps_rot[i]) fi
+ if ps_env[i]<>hz: PS(_chg_env,ps_env[i]) fi
+ if (ps_line[i]<>0)and(ps_line[i]<>nl): PS(_tmp_line,ps_line[i]) fi
+ if ps_len[i]<>ratio_cr: PS(_tmp_len,ps_len[i]) fi PS(_chg_len,ratio_cr)
+ if ps_line[i]<>nl: if ps_line[i]=no: PS(_adj_ang,0) fi PS(_mk_bond,0) fi
+ for j=1 upto cntMC[ps_com[i]]: PS(comMC[ps_com[i]][j],parMC[ps_com[i]][j]) endfor
+ PS(_pop,1) PS(_term,0)
+ endfor
+ proc_atom(cntC+1); if cntP>cntPS: ps_get(cntPS+1); fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def AUX(text s)=s addto chem_structure also currentpicture shifted(sft_X,sft_Y); clearit; enddef;
+def MCf(text s)= MCd(1,1)(.5,.5)(s); enddef;
+%-------------------------------------------------------------------------------------------------
+def MCd(expr RW,RH)(expr FW,FH)(text s)= mc_num:=user_def_number; ab_num:=ab_def_number;
+ adrA:=adrB:=cntA:=cntB:=adrS:=cntPS:=angA[0]:=angB[0]:=br_ang[0]:=sB[0]:=cntC:=cntP:=0;
+ stkA[0]:=stkB[0]:=stkL[0]:=stkM[0]:=strAT:=f_lineT:=f_lenT:=f_envT:=f_rotT:=0;
+ eB[0]:=1; com_str[0]:=""; lineT:=si; str_cnt:=2000; posA[0]:=posB[0]:=posB[1]:=(0,0);
+ if (sw_numberA=1)or(sw_numberB=1):
+ ratio_atom_bond:=0.25; ratio_thickness_bond:=0.005; offset_atomn:=0; fi
+ if (sw_expand=1)or(sw_MOLfile=1): expand_set; fi
+ ''(0)(s,(_term,0)); proc_atom(1); if cntP>0: ps_get(1); fi font_use_check;
+ if sw_solid=1: size_setup; proc_skelton; scaling;
+ else: size_setup; proc_skelton; scaling; resize(RW,RH); size_setup;
+ if ratio_bond_width>max_bond_width:
+ ratio_bond_width:=max_bond_width; size_setup; proc_skelton; scaling;
+ else: for i=1 upto 4: proc_skelton; scaling; resize(RW,RH); size_setup; endfor fi fi
+ font_setup;
+ for i=1 upto cntB: put_bond(i,sB[i],eB[i],angB[i],lineB[i]); endfor
+ for i=1 upto cntA:
+ if sw_numberA=1: put_string(i,posA[i],0,decimal(i),1); elseif sw_numberB=1:
+ else: put_string(i,posA[i],br_ang[i],com_str[strA[i]],strW[strA[i]]); fi endfor
+ sft_X:=-min_x+(font_wd-len_x)*FW; sft_Y:=-min_y+(font_ht-len_y)*FH;
+ addto chem_structure also currentpicture shifted (sft_X,sft_Y);
+ clearit;
+enddef;
+%------------------------------------------------------------------------------------------------
+def draw_frame(expr LX,LY,PS,PN)=
+ draw unitsquare xscaled LX yscaled LY shifted PS wpcs PN; enddef;
+def start_vector= draw (posA[1] shifted (-1mm,0))--(posA[1] shifted (-4mm,0))
+ withpen penrazor rotated 90 scaled .8mm;
+ fill (posA[1] shifted (-2mm,-1mm))--posA[1]--(posA[1] shifted (-2mm,1mm))--cycle;
+enddef;
+%------------------------------------------------------------------------------------------------
+def proc_atom(expr n)=
+ f_Br:=f_En:=f_T:=rotT:=adrS:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=env:=0;
+ stkL[0]:=B_len:=ratio_cr; lenT:=ratio_cr; stkA[1]:=stkB[1]:=1;
+ for i=n upto cntMC[0]: com:= comMC[0][i]; par:=parMC[0][i];
+ if com=_push:
+ if par=1: stkL[adrS]:=B_len; stkA[incr adrS]:=adrA:=cntA; stkB[adrS]:=adrB:=cntB;
+ elseif par=0: temp_len:=B_len; fi
+ elseif com=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; B_len:=stkL[adrS];
+ elseif par=0: B_len:=temp_len; fi
+ elseif com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom;
+ elseif com=_set_adr: adrT:=par;
+ elseif com=_set_atom: strAT:=par;
+ elseif com=_set_psA: ps_put(getA(adrT),par);
+ elseif (com>=_postA)and(com<=_postF):
+ if com=_postA: elseif com=_postB: lineT:=dm; elseif com=_postC: lineT:=wf;
+ elseif com=_postD: lineT:=zf; elseif com=_postE: lineT:=nl;
+ elseif com=_postF: lineT:=no; lenT:=_size_a; fi ps_put(cntA+1,par);
+ elseif com=_jp_bond: tempB:=getB(par); sB[cntB+1]:=sB[tempB]; f_Br:=1;
+ elseif com=0or_jp_atom: termA; sB[cntB+1]:=getA(par); f_Br:=1;
+ elseif com=_jp_atom_abs: sB[cntB+1]:=par; f_Br:=1; temp_cntB:=cntB;
+ elseif com=_chg_atom: strA[getA(adrT)]:=parMC[par][1];
+ elseif com=_chg_len: if par=_ring_len: B_len:=ring_len;
+ elseif par=0: if B_len<0: B_len:=1; fi else: B_len:=par; fi
+ elseif com=_get_len: ring_len:=lenB[getB(par)];
+ elseif com=_tmp_len: lenT:=par;
+ elseif com=_set_line: lineB[getB(adrT)]:=par;
+ elseif com=_dl: lineB[getB(par)]:=dl;
+ elseif (com=_chg_line)or(com=_tmp_line): lineT:=par;
+ elseif com=_tmp_rot: rotT:=par;
+ elseif com=_cyc: f_En:=getA(par); add_atom;
+ elseif com=_cyc_eB: f_En:=eB[getB(par)]; add_atom;
+ elseif com=_cyc_sB: f_En:=sB[getB(par)]; add_atom;
+ elseif com=_chg_env: env:=par;
+ elseif com=_tmp_env: envT:=par;
+ elseif com=_set_clr:
+ if par=1: if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi
+ if lenT<>ratio_cr: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi fi
+ if par=0: f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; lineT:=si; lenT:=ratio_cr; fi
+ elseif com=_term: termA;
+ elseif com=_set_colorA: colorA[getA(adrT)]:=par;
+ elseif com=_set_colorB: colorB[getB(adrT)]:=par;
+ fi
+ endfor
+enddef;
+%-------------------------------------------------------------------------------------------------
+def ps_put(expr n,p)= ps_adr[incr cntP]:=n; ps_com[cntP]:=p; ps_len[cntP]:=lenT;
+ ps_line[cntP]:=lineT; ps_rot[cntP]:=rotT; ps_env[cntP]:=envT;
+ if f_lineT=0: lineT:=si; fi if f_lenT=0: lenT:=ratio_cr; fi
+ if f_rotT=0: rotT:=0; fi if f_envT=0: envT:=hz; fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def add_atom= lineB[incr cntB]:=lineT; lineT:=si;
+ if lenT=ratio_cr: lenB[cntB]:=B_len; else: lenB[cntB]:=lenT; lenT:=ratio_cr; fi
+ if f_Br=0: cntA:=cntA+1; sB[cntB]:=cntA; strA[cntA]:=strAT; strAT:=0;
+ if f_MP=1: colorA[cntA]:=colorB[cntA]:=0; fi else: f_Br:=0; fi
+ if f_En=0: eB[cntB]:=cntA+1; f_T:=0; else: eB[cntB]:=f_En; f_En:=0; f_T:=1; fi
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def proc_skelton= stkA[1]:=stkB[1]:=1; envT:=env:=f_lineT:=f_rotT:=f_lenT:=f_envT:=0;
+ adrA:=adrB:=cntA:=cntB:=angT:=adrS:=f_En:=f_Br:=rotT:=f_T:=0;
+ for i=1 upto cntMC[0]: com:=comMC[0][i]; par:=parMC[0][i];
+ if com=_push: if par=1: stkM[adrS]:=env; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA;
+ stkB[adrS]:=adrB:=cntB;
+ elseif par=0: temp_len:=B_len; fi
+ elseif com=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; env:=stkM[adrS];
+ elseif par=0: temp_len:=B_len; fi
+ elseif com=_jp_bond: tempB:=getB(par); posB[cntB+1]:=posA[sB[tempB]];
+ angT:=angB[tempB]-180; f_Br:=1; rotT:=0;
+ elseif com=0or_jp_atom: termB; adrT:=getA(par); posB[cntB+1]:=posA[adrT];
+ angT:=br_ang[adrT]; f_Br:=1; rotT:=0;
+ elseif com=_jp_atom_abs: adrT:=par; posB[cntB+1]:=posA[adrT];
+ angT:=br_ang[adrT]; f_Br:=1; rotT:=0; temp_cntB:=cntB;
+ elseif com=_adj_ang: if (angT<40)or(angT>320): angT:=0; elseif angT<140: angT:=90;
+ elseif angT<220: angT:=180; else: angT:=270; fi
+ elseif com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_B(par);
+ elseif com=_rot_ang: angT:=(angT+par) mod 360;
+ elseif com=_tmp_rot: rotT:=par;
+ elseif (com>=_postA)and(com<=_postF): rotT:=0;
+ elseif com=_chg_env: env:=par;
+ elseif com=_tmp_env: envT:=par;
+ elseif com=_set_clr: f_clr:=par; if par=0: lineT:=si; lenT:=ratio_cr; rotT:=envT:=0; fi
+ elseif com=_cyc: f_En:=1; proc_cyc(getA(par));
+ elseif com=_cyc_sB: f_En:=1; proc_cyc(sB[getB(par)]);
+ elseif com=_cyc_eB: f_En:=1; proc_cyc(eB[getB(par)]);
+ elseif com=_term: termB;
+ fi
+ endfor
+enddef;
+%-------------------------------------------------------------------------------------------------
+vardef getA(expr n)= if n>=1: stkA[adrS+1]+n elseif n<=-1: cntA+n+1
+ elseif n>0: stkA[adrS]+2048n elseif n<0: -2048n fi enddef;
+vardef getB(expr n)= if n>=1: stkB[adrS+1]+n elseif n<=-1: cntB+n+1 elseif n=0: tempB
+ elseif n>0: stkB[adrS]+2048n elseif n<0: -2048n fi enddef;
+def termA= if f_T=0: if f_Br=0: strA[incr cntA]:=strAT; strAT:=0;
+ if f_MP=1: colorA[cntA]:=0; fi else: f_Br:=0; fi f_T:=1; fi enddef;
+def termB= if f_T=0: if f_Br=0: br_ang[incr cntA]:=angT; else: f_Br:=0; fi f_T:=1; fi enddef;
+def proc_cyc(expr n)= add_B(angle(posA[n]-posB[cntB+1])-angT); enddef;
+def glu_c(expr n)= if strA[n]<>0: nB:=angT mod 180; nC:=.5strW[strA[n]]*AL;
+ if (nB<45)or(nB>135):glu:=glu+((sind(nB)*nC)++nC);
+ else :glu:=glu+((cosd(nB)*.5AL)++.5AL) fi fi enddef;
+%-------------------------------------------------------------------------------------------------
+def add_B(expr m)=
+ cntB:=cntB+1; if m=_arg_ang: tn:=proc_env(angT,env,60,-60); else: tn:=m; fi
+ if f_Br=0: adrT:=cntA:=cntA+1; posA[cntA]:=posB[cntB]; angA[cntA]:=angT;
+ if tn>=0: br_ang[cntA]:=angT+tn/2-90; else: br_ang[cntA]:=angT+tn/2+90; fi
+ else: f_Br:=0; fi
+ angB[cntB]:=angT:=(angT+tn) mod 360;
+ if f_En=0: if lenB[cntB]=_size_a: posB[cntB+1]:=sfB(posB[cntB],AL,angT);
+ else: nA:=lenB[cntB];glu:=0; if nA<0: nA:=-nA; glu_c(adrT);glu_c(cntA+1); fi
+ posB[cntB+1]:=sfB(posB[cntB],nA*BL+glu,angT); fi
+ posA[cntA+1]:=posB[cntB+1]; f_T:=0;
+ else: f_En:=0; f_T:=1; fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+vardef proc_env(expr n,m,a,b)= r:=(n mod 360);
+ if m>=first_def_number: parMC[m][cntB-temp_cntB-1] else:
+ if m=hz:if r=0:a elseif r<=90:b elseif r<=180:a elseif r<270:b else:a fi
+ elseif m=vt:if r=0:b elseif r<90:a elseif r<=180:b elseif r<=271:a else:b fi
+ elseif (m>=-180)and(m<=180): m fi fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def pic_c(expr i,s)= substring(i,i+1) of s enddef;
+def put_string(expr n,p,r,s,w)=
+ if ((r mod 360)<=90+1)or((r mod 360)>=270-1): dx:=1; else: dx:=-1; fi
+ pairT:=p-(.5AL*w*dx,.5AL); u:=j:=0;
+ for i=0 upto length(s)-1: nB:=ASCII(pic_c(i,s));
+ if dx<0: if nB=par_s:k:=i+1;j:=1;forever:exitif pic_c(i+(incr j),s)="}";endfor fi
+ if j>0: nB:=ASCII(pic_c(k+(decr j),s)); fi fi
+ if nB=score_u: if u=0: u:=-.5; else:u:=0; fi;
+ elseif nB=hat: if u=0: u:= .5; else:u:=0; fi;
+ elseif (nB<>par_s)and(nB<>par_e): nA:=atom_w[nB]; pairA:=pairT+(.5*((dx-1)*nA),u*AL);
+ if sw_atom_frame=1: draw_frame(nA,AL,pairA,0.01pt); fi
+ if (sw_numberA=1)or(sw_numberB=1):
+ erase fill unitsquare xscaled nA yscaled AL shifted pairA wpcs 0.01pt; fi
+ addto currentpicture also atom_font[nB] shifted (pairA-(0,atom_d[nB])) Cp(colorA[n]);
+ pairT:=pairT+(nA*dx,0); fi endfor
+enddef;
+%-------------------------------------------------------------------------------------------------
+def wpcs expr n= withpen pencircle scaled n enddef;
+def sqr(expr WD,HT)= ((0,0)--(WD,0)--(WD,HT)--(0,HT)--cycle) enddef;
+def sfB(expr p,l,r)= p shifted ((l,0) rotated r) enddef;
+def z_put(expr PA,PB,PD,CL)= save nA,nC,nD; nC:=length(Le-Ls);
+ for i=0 upto nC/zebra_gap:
+ nA:=zebra_gap*i/nC; nD:=(zebra_gap*i+ratio_zebra_black*zebra_gap)/nC;
+ if nD>((nC-zebra_gap)/nC): nD:=1; fi
+ fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(CL); endfor
+enddef;
+def cut_off(expr p,w,h,s)=
+ p intersectionpoint sqr(1.1w,1.1h) shifted (s-(.5(1.1w),.5(1.1h))); enddef;
+def clipping(expr SA,SB,PA,PB,LEN)= pT:=PA--PB; tn:=0.6AL/LEN;
+ if (SA=0)and(SB=0): Ls:=PA; Le:=PB; pA:=pB:=pT; pC:=0.1[PA,PB]--0.1[PB,PA];
+ elseif SA=0: Ls:=PA; Le:=cut_off(pT,AL*strW[SB],AL,PB);
+ pA:=Ls--Le; pB:=Ls--tn[PB,PA]; pC:=0.1[PA,PB]--Le;
+ elseif SB=0: Ls:= cut_off(pT,AL*strW[SA],AL,PA); Le:=PB;
+ pA:=Ls--Le; pB:=tn[PA,PB]--Le; pC:=Ls--(0.1)[PB,PA];
+ else: Ls:=cut_off(pT,AL*strW[SA],AL,PA); Le:=cut_off(pT,AL*strW[SB],AL,PB);
+ pB:=tn[PA,PB]--tn[PB,PA]; pC:=pA:=Ls--Le; fi
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def draw_wv= nB:=3pen_wd; nA:=nB/length(Le-Ls);
+ draw Le for i=1 upto 1/nA: if odd(i): ..controls(((i-.5)*nA)[sfB(Le,nB,ap),sfB(Ls,nB,ap)])
+ else: ..controls(((i-.5)*nA)[sfB(Le,nB,am),sfB(Ls,nB,am)]) fi ..(i*nA)[Le,Ls] endfor ..Ls;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def put_bond(expr n,BP,EP,ANG,LN)= nC:=length(posA[EP]-posA[BP]);
+if (nC>0)and(LN<>0): ww:=wedge_wd; hpt:=.5pen_wd; ap:=ANG+90; am:=ANG-90;
+ if sw_numberB=1: clipping(0,0,posA[BP],posA[EP],nC);
+ else: clipping(strA[BP],strA[EP],posA[BP],posA[EP],nC); fi
+ pickup pencircle scaled pen_wd;
+ if known colorB[n]: nB:=colorB[n]; fi
+ if LN=si:draw pA Cp(nB);
+ elseif LN=dl:draw pA Cp(nB); draw sfB(pC,gap,ap) Cp(nB);
+ elseif LN=dr:draw pA Cp(nB); draw sfB(pC,gap,am) Cp(nB);
+ elseif LN=dm:draw sfB(pB,gap/1.75,ap) Cp(nB); draw sfB(pB,gap/1.75,am) Cp(nB);
+ elseif LN=tm:draw pA Cp(nB);draw sfB(pA,gap,ap) Cp(nB); draw sfB(pA,gap,am) Cp(nB);
+ elseif LN=wf:fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle;
+ elseif LN=wb:fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle;
+ elseif LN=bd:draw pA withpen penrazor rotated ap scaled gap Cp(nB);
+ elseif LN=zf:z_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB);
+ elseif LN=zb:z_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap),nB);
+ elseif LN=dt:for i=0 step .75zebra_gap/length(Le-Ls) until 1: drawdot i[Ls,Le]; endfor
+ elseif LN=wv:draw_wv;
+ elseif LN=ov:erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs gap; draw pA Cp(nB);
+ elseif LN=vf:draw pA Cp(nB);draw sfB(Le,gap,ANG-150)--Le--sfB(Le,gap,ANG+150) Cp(nB);
+ elseif LN=vb:draw pA Cp(nB);draw sfB(Ls,gap,ANG-30)--Ls--sfB(Ls,gap,ANG+30) Cp(nB); fi
+ if sw_numberB=1: put_string(n,.5[posA[BP],posA[EP]],0,decimal(n),1); fi fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" fi enddef;
+def logfile_out=
+ printf "%------------------------------------------------------------------";
+ printf "\MOLinfo{"&info[1]&"}{"&info[2]&"}{"&info[3]&"}{"&info[4]&"}%";
+ printf "{"&info[5]&"}{"&info[ 6]&"}{"&info[ 7]&"}{"&info[ 8]&"}"&
+ "{"&info[9]&"}{"&info[10]&"}{"&info[11]&"}{"&info[12]&"}%";
+ printf "\MCFinfo{"&jobname&"}"&"{"&decimal(char_num)&"}"&"{"&mp_filename&"}"&"{"&decimal(len_x)
+ &"}"&"{"&decimal(len_y)&"}"&"{"&decimal(ratio_bond_width)&"}"&"{"&decimal(cntA)&"}"&"{}{}%";
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+mc_num:=first_def_number;
+lr:='(60 for i==1 upto 10:: ,-60,60 endfor); rl:='(-60,lr);
+def ring expr n=^^((-180 DIV n)-90),(_chg_len,0)
+ for i==2 upto n:: ,(360 DIV n) endfor,(_cyc_sB,1-n) enddef;
+for i=3 upto 20: ??[i]:='({{,ring i,}}); endfor
+for i=3 upto 20: ?[i]:='({,ring i,}); endfor
+Ph:=Ph1:='( ?6,(_dl,-2),(_dl,-4),(_dl,-6)); Ph2:='( ?6,(_dl,-1),(_dl,-3),(_dl,-5));
+ph:=ph1:='(??6,(_dl,-2),(_dl,-4),(_dl,-6)); ph2:='(??6,(_dl,-1),(_dl,-3),(_dl,-5));
+!:='((_mk_bond,_arg_ang)); !0:='(^^180,180);
+for i=1 upto 20: !![i]:='(! for j==2 upto i::,! endfor); endfor
+for i=1 upto 20: ![i]:='({,!![i],}); endfor
+!!:=!!1; Me:='(); Et:=!; Pr:='(!,!); Bu:='(!,!,!);
+for i=4,5,6: for j=2 upto i-2: ?[i][j]:='((_fuse,i),(j,1)); endfor endfor
+for i=4,5,6: for j=2 upto i-2: ??[i][j]:='((_fuse,i),(j,0)); endfor endfor
+%-------------------------------------------------------------------------------------------------
+H :='("H");C:='("C");N:='("N");O:='("O");F:='("F");S:='("S");P:='("P");I:='("I");
+Si:='("{Si}");Al:='("{Al}");Mg:='("{Mg}");Zn:='("{Zn}");As:='("{As}");Cu:='("{Cu}");
+Ag:='("{Ag}");Au:='("{Au}");Sn:='("{Sn}");Cl:='("{Cl}");Br:='("{Br}");Li:='("{Li}");
+Na:='("{Na}");Ca:='("{Ca}");Hg:='("{Hg}");Ni:='("{Ni}");Ti:='("{Ti}");U:='("U");
+%-------------------------------------------------------------------------------------------------
+plus:='("+"); minus:='("-"); HH:='("H{_2_}"); NH:='(N,*/*H); NnoH:='(); SO:='(S,//O);
+SOO :='(S,//O^-35,//O^35); CHO:='("CHO"); OH:='("OH"); COOH:='("COOH"); CH2:='("C{H_2_}");
+CH3:='("C{H_3_}"); CN:='("CN"); NH2:='("N{H_2_}"); NO2:='("N{O_2_}"); SH:='("SH");
+SO3:='("S{O_3_}"); NMe:='(N,/Me); tBu:='(60,-2\,-3*,60); iPr:='(60,-2\); OMe:='(O,!);
+SMe:='(S,!); OEt:='(O,!,Et); SEt:='(S,!,Et); OiPr:='(O,!,iPr); SiPr:='(S,!,iPr);
+OPr:='(O,!,Pr); SPr:='(S,!,Pr); COO:='(//O,!,O); COOMe:='(COO,!); COMe:='(//O,!);
+OCOMe:='(O,!,//O,!); COOEt:='(COO,!,Et); COOiPr:='(COO,!,iPr); COOPr:='(COO,!,Pr);
+COOtBu:='(COO,!,tBu); NMeMe:='(N,/Me,!); NHCOMe:='(NH,!,//O,!); NHiPr:='(NH,!,iPr);
+NHtBu:='(NH,!,tBu);NHH:='(N,/H,!,H); NHMe:='(NH,!); NHEt:='(NH,!,Et);
+CF2:='(/F,60,F); CCl2:='(/Cl,60,Cl); CBr2:='(/Br,60,Br); CF3:='(/F,/F^60,60,F);
+CCl3:='(/Cl,/Cl^60,60,Cl);CBr3:='(/Br,/Br^60,60,Br);O_H:='(O,!,H);CO_H:='(//O,!,H);
+%------------------------------------------------------------------------------------------------
+CO_OH:='(//O,!,O,!,H); C_N:='(!~tm,N); N_HH:='(N,/H,60,H); N_OO:='(N,//O,60~dm,O);
+S_H:='(S,!,H); N_H:='(N,/H); C_HHH:='(/H,/H^60,60,H);
+%------------------------------------------------------------------------------------------------
+def expand_set= save CH,NH,NO,OH,CHO,COOH,CN,SH;
+ CH3:=C_HHH; NH:=N_H; NH2:=N_HH; NO2:=N_OO; OH:=O_H; CHO:=CO_H; COOH:=CO_OH; CN:=C_N; SH:=S_H;
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def font_size_set(expr m)(expr n)(expr o)(expr s)=%
+ for j=0 upto length(s)-1: num_a:=ASCII(pic_c(j,s));
+ if f_FON[num_a]=1: atom_w[num_a]:=m*AL; atom_h[num_a]:=n*AL; atom_d[num_a]:=o*AL; fi
+ endfor
+enddef;
+def font_size_setup= font_size_set( 1)( 1)(0)("CGHMNOQ");
+ font_size_set( .9)( 1)(0)("ABDEFIJKLPRSTUVWXYZ-+/><m");
+ font_size_set( .7)( 1)(0)(" ()0123456789nhj=*bdiltf");
+ font_size_set( .7)( 1)(.15)("pqg");
+ font_size_set( .7)( .8)(0)("acekosuvxzwry");
+ font_size_set( .4)( 1)(0)(".,:;'`");
+enddef;
+%------------------------------------------------------------------------------------------------
+def SP(expr a,b)expr p=subpath(a*length(p),b*length(p)) of p enddef;
+def vL= withpen penrazor scaled fP enddef; def hL= withpen penrazor rotated 90 scaled fP enddef;
+def sH expr a= shifted (0,a) enddef;
+def PO= z10..(.8aW,fH)..tension 1.5..(.2aW,fH)..z09..(.2aW,hP)..tension 1.5..(.8aW,hP)..cycle
+enddef;
+def POh= (hP,.25aH)..z19..(fW,.25aH)..(hW,hH)..cycle enddef;
+def FD(expr c)(text s)=
+if f_FON[ASCII(c)]=1:
+ aW:=atom_w[ASCII(c)]*(1-font_gap*2); aH:=atom_h[ASCII(c)]*(1-font_gap*2);
+ fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH;
+ z01=( 0,hP); z02=(hP, 0); z03=(hP,hP); z05=(aW,hP); z07=(fW, 0); z08=( 0,hH); z09=(hP,hH);
+ z10=(fW,hH); z12=( 0,fH); z13=(hP,fH); z14=(hW,fH); z16=(aW,fH); z18=(hP,aH); z19=(hW,hP);
+ s;
+ atom_font[ASCII(c)]:=currentpicture shifted (font_gap*AL,font_gap*AL);
+ clearxy; save x,y; clearit; fi
+enddef;
+%-------------------------------------------------------------------------------------------------
+def font_setup= pickup pencircle scaled Apen_wd; fP:=Apen_wd; hP:=.5Apen_wd;
+FD(" ")();
+FD(".")(drawdot z19 wpcs fP);
+FD(",")(drawdot z19 wpcs fP; draw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP));
+FD("'")(drawdot z14 wpcs fP; draw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP));
+FD("`")(drawdot (hW,fH-2fP) wpcs fP;draw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH));
+FD(":")(drawdot (hW,.2aH) wpcs fP; drawdot (hW,.8aH) wpcs fP);
+FD(";")(drawdot (hW,.2aH) wpcs fP; drawdot (hW,.8aH) wpcs fP;draw (hW+hP,.2aH)..(hW-hP,.2aH-2fP));
+FD("(")(draw z19...z09...z14);
+FD(")")(draw z19...z10...z14);
+FD(">")(cutdraw z01--(aW,hH)--z12);
+FD("<")(cutdraw z16--z08--z05);
+FD("0")(draw z09...z14...z10...z19...cycle);
+FD("1")(draw (hW, 0)--(hW,aH)--(hW-hP,fH)--(hW-hP,aH-2.5hP) vL);
+FD("2")(cutdraw SP(0,.71)(hP,1.3hP)--(fW,.55aH)..z14..(hP,.5aH)..(hW,.27aH); draw z05--z01 hL);
+FD("3")(cutdraw SP(0,.77)POh; cutdraw SP(.23,.95)POh sH .5aH-hP; draw (.3aW,hH)--(hW,hH) hL);
+FD("4")(draw (0,.3aH)--(aW,.3aH) hL; draw (.7aW,0)--(.7aW,aH)--(1.2hP,.3aH+hP) vL);
+FD("5")(draw z12--z16 hL; draw z13--(hP,.49aH) vL;
+ cutdraw (.5hP,.15aH)..(.65aW,1.3hP)..(fW,.3aH)..(hW,.6aH)..(.6hP,.53aH));
+FD("6")(draw z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle; cutdraw (hP,.4aH)--(hW,aH));
+FD("7")(draw (0,.fH)--(aW,fH) hL; draw (aW-1.2hP,aH-fP)--(.4aW,0) vL scaled 1.2);
+FD("8")(draw POh; draw (hP,.75aH)...z14...(fW,.75aH)...(hW,hH)...cycle;);
+FD("9")(draw z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle sH .32aH; cutdraw (fW,.6aH)--(hW, 0));
+FD("A")(draw z02--(hW,aH)--z07 vL scaled 1.14; draw .33[z02,(hW,aH)]--.33[z07,(hW,aH)]);
+FD("B")(draw z13--z14{right}..(.9fH,.75aH)..{left}(.5aW,hH)--z09--(.5aW,hH){right}..
+ (.9fH,.25aH)..{left}z19--z03; draw z02--z18 vL);
+FD("C")(cutdraw SP(.05,.95)PO);
+FD("D")(draw z13--z14..z10..z19--z03; draw z02--z18 vL);
+FD("E")(draw z05--z01 hL;draw z12--z16 hL;draw z08--(aW,hH) hL;draw z02--z18 vL);
+FD("F")(draw z12--z16 hL; draw (0,.45aH)--(fW,.45aH) hL; draw z02--z13 vL);
+FD("G")(cutdraw SP(.06,.97)PO; draw bot (hW,hH)-- bot (aW,hH) hL);
+FD("H")(draw z02--z18 vL; draw z09--z10; draw z07--(fW,aH) vL);
+FD("I")(draw z19--z14 vL; draw (hW-fP,hP)--(hW+fP,hP) hL; draw (hW-fP,fH)--(hW+fP,fH) hL);
+FD("J")(cutdraw z09..(hP,.4aH){down}..{right}z19{right}..{up}(fW,.4aH)..(fW,aH));
+FD("K")(cutdraw z02--z18; cutdraw .5[.45[z02,z18],z16]--z07; cutdraw .45[z02,z18]--z16);
+FD("L")(draw z05--z01 hL; draw z02--z18 vL);
+FD("M")(draw z02--z18 vL; draw z18--z19--(fW,aH) vL scaled 1.14; draw (fW,aH)--z07 vL);
+FD("N")(draw z02--z18 vL; draw z07--(fW,aH) vL;draw (1.4hP,aH)--(aW-1.4hP,0) vL scaled 1.4);
+FD("O")(draw PO);
+FD("P")(draw z02--z18 vL; draw z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH))
+FD("Q")(draw PO; draw (.6aW,.4aH)--z07);
+FD("R")(draw z02--z18 vL; draw z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
+ cutdraw z07{up}..{left}(hW,.44aH));
+FD("S")(cutdraw SP(.05,.45)PO; cutdraw SP(.55,.95)PO; draw (fW,.3aH){up}..{up}(hP,.7aH));
+FD("T")(draw z12--z16 hL;draw .5[z12,z16]--(hW, 0) vL);
+FD("U")(cutdraw z18..z09{down}..{right}z19{right}..{up}z10..(fW,aH));
+FD("V")(draw z18--(hW, 0) vL scaled 1.2; draw (hW, 0)--(fW,aH) vL scaled 1.2);
+FD("W")(draw z18--(.25aW,0)--(hW,aH)--(.75aW,0)--(fW,aH) vL scaled 1.08);
+FD("X")(draw z18..z07 vL scaled 1.4; draw z02..(fW,aH) vL scaled 1.4);
+FD("Y")(draw z18--(hW,hH)--(fW,aH) vL scaled 1.2; draw (hW,hH)--(hW, 0) vL);
+FD("Z")(draw z12--z16 hL;draw (1.4hP,fP)--(aW-1.4hP,aH-fP) vL scaled 1.4;draw z01--z05 hL);
+FD("-")(draw z09--z10 hL);
+FD("=")(draw (hP,.3aH)--(fW,.3aH) hL;draw (hP,.6aH)--(fW,.6aH) hL);
+FD("/")(draw (fW,fH)..z01);
+FD("+")(draw z19--z14 vL; draw z09--z10 hL);
+FD("a")(draw z19..z10..z14..z09..cycle; draw z07--(fW,aH) vL);
+FD("b")(draw z19..z10..(hW,aW)..z09..cycle; draw z02--(hP,1.2aH) vL);
+FD("c")(cutdraw SP(.06,.94)z10..z14..z09..z19..cycle);
+FD("d")(draw z19..z10..(hW,aW)..z09..cycle; draw z07--(fW,1.2aH) vL);
+FD("e")(cutdraw SP(0,.92)z10..z14..z09..z19..cycle; draw z10--z09);
+FD("f")(cutdraw (.5aW,0)--(.5aW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); draw z08--(aW,hH) hL);
+FD("g")(draw z19..z10..(hW,aW)..z09..cycle sH .3aH; cutdraw (fW,aH)--(fW,hP)..(hW,0)..(.1aW,fP));
+FD("h")(draw z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..z07; draw (hP,.3aH)--z18 vL);
+FD("i")(draw (hW, 0)--(hW,.63aH) vL; draw z14 wpcs 1.4fP);
+FD("j")(draw z19--(hW,.63aH) vL; draw z19..(.25aW,-hP)..z01; draw z14 wpcs 1.4fP);
+FD("k")(draw z02--z18 vL; cutdraw .5[.45[z02,z18],z16]--z07; cutdraw .45[z02,z18]--z16);
+FD("l")(draw (hW, 0)--(hW,aH) vL; draw z14--z13 hL; draw z19--(fW,hP) hL);
+FD("m")(cutdraw z02..(hP,.3aH){up}..(.28aW,.7fH)..{down}(hW,.3aH)..(hW, 0);
+ cutdraw (hW,.3aH){up}..(.7aW,.7aH-hP)..{down}(fW,.3aH)..z07; draw (hP,.3aH)--(hP,.7aH) vL);
+FD("n")(cutdraw z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..z07; draw (hP,.3aH)--(hP,.7aH) vL);
+FD("o")(draw z19..z10..z14..z09..cycle);
+FD("p")(draw z19..z10..(hW,aW)..z09..cycle sH .3aH; draw (hP,0)--z18 vL);
+FD("q")(draw z19..z10..(hW,aW)..z09..cycle sH .3aH; draw (fW,0)--(fW,aH) vL);
+FD("r")(cutdraw SP(.35,.72)z19..z10..z14..z09..cycle sH -fP; draw z02--z18 vL);
+FD("s")(cutdraw SP(.05,.45)PO; cutdraw SP(.55,.95)PO; draw (fW,.3aH){up}..{up}(hP,.7aH));
+FD("t")(draw (hW, 0)--(hW,aH) vL; draw (0,.66aH)--(aW,.66aH) hL);
+FD("u")(cutdraw z18..(hP,.55aH){down}..z19..(fW,.55aH){up}..(fW,aH); draw (fW,aH)--z07 vL);
+FD("v")(draw z18--(hW, 0)--(fW,aH) vL);
+FD("w")(draw z18--(.25aW,0)--(hW,aH)--(.75aW,0)--(fW,aH) vL);
+FD("x")(draw z18--z07 vL scaled 1.4; draw (fW,aH)--z02 vL scaled 1.4);
+FD("y")(draw z18--(hW,hH) vL scaled 1.4; draw (fW,aH)--z02 vL scaled 1.4);
+FD("z")(draw z12--z16 hL;draw (1.4hP,fP)--(aW-1.4hP,aH-fP) vL scaled 1.4; draw z01--z05 hL);
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def blank_str:= " " enddef;
+def fixed_r(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef;
+def fixed_l(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef;
+def fdr(expr n)(expr s)=fixed_r(n)(decimal(s)) enddef;
+def warning(expr s)= message "%"&fdr(3)(incr warning_cnt)&")"&s&" !!!"; enddef;
+def B_check(expr s)(expr t)(expr n)=
+ if com_str[strA[s]]=t: if nA>n:
+ warning(fdr(4)(s)&" ["&com_str[strA[s]]&"] has "&fdr(3)(nA)&" bonds"); fi fi enddef;
+vardef stripP(expr a)=if length(a)=4: substring (1,3) of a else: a fi enddef;
+def STa(expr a,b)= tblA[incr tbl_cnt]:=a; tblN[tbl_cnt]:=0; wtA[tbl_cnt]:=b; enddef;
+def STb(expr a)(text s)= tblA[incr tbl_cnt]:=a; tblN[tbl_cnt]:=0;
+ for list=s: tblN[tbl_cnt]:=tblN[tbl_cnt]+1;
+ for j=1 upto tbl_max: if list=tblA[j]: tblB[tbl_cnt][tblN[tbl_cnt]]:=j; fi endfor
+ endfor
+enddef;
+%-------------------------------------------------------------------------------------------------
+tbl_cnt:=0;
+STa("C",12.0107); STa("H",1.00794); STa("{Al}",26.9815); STa("{As}",74.9236); STa("B",10.811);
+STa("{Br}",79.904); STa("{Ca}",40.078); STa("{Cl}",35.453); STa("{Cu}",63.546); STa("D",2.012);
+STa("F",18.9984); STa("{Fe}",55.845); STa("{Hg}",200.59); STa("I",126.90447); STa("K",39.0983);
+STa("{Li}",6.941); STa("{Mg}",24.305); STa("N",14.007); STa("{Na}",22.990); STa("{Ni}",58.693);
+STa("O",15.9994); STa("P",30.973761); STa("S",32.065); STa("{Si}",28.0855); STa("{Sn}",118.71);
+STa("{Ti}",47.867); STa("{Zn}",65.409);
+tbl_max:=tbl_cnt;;
+STb("{H_2_}")("H","H"); STb("OH")("O","H"); STb("O{Na}")("O","{Na}"); STb("CN")("C","N");
+STb("CHO")("C","H","O"); STb("N{O_2_}")("N","O","O"); STb("N{H_2_}")("N","H","H");
+STb("S{O_3_}")("S","O","O","O"); STb("COOH")("C","O","O","H");
+STb("C{H_3_}")("C","H","H","H"); STb("C{F_3_}")("C","F","F","F");
+%-------------------------------------------------------------------------------------------------
+def mol_check= hide_H:=warning_cnt:=0; for i=1 upto tbl_max: sumA[i]:=0; endfor
+ for i=1 upto cntA: knownA:=nA:=0;
+ for j=1 upto cntB: if (lineB[j]=dl)or(lineB[j]=dr)or(lineB[j]=dm): nB:=2;
+ elseif (lineB[j]=tm): nB:=3; elseif lineB[j]=nl: nB:=0;
+ elseif lineB[j]=0: nB:=0; else: nB:=1; fi
+ if (sB[j]=i)or(eB[j]=i): nA:=nA+nB; fi endfor
+ Bcnt[i]:=nA;
+ if com_str[strA[i]]="": com_str[strA[i]]:="C"; fi
+ if com_str[strA[i]]="C": if nA<4: hide_H:=hide_H+(4-nA); fi fi
+ B_check(i)("C")(4); B_check(i)("H")(1); B_check(i)("O")(2);
+ B_check(i)("F")(1); B_check(i)("{Cl}")(1); B_check(i)("{Br}")(1);
+ for j=1 upto tbl_cnt:
+ if com_str[strA[i]]=tblA[j]:
+ if tblN[j]=0: sumA[j]:=sumA[j]+1;
+ else: for k=1 upto tblN[j]: sumA[tblB[j][k]]:=sumA[tblB[j][k]]+1; endfor fi
+ knownA:=1; fi endfor
+ if knownA=0: warning(" Unknown Str("&com_str[strA[i]]&") is used "&decimal(i)); fi
+ endfor
+ sumA[2]:=sumA[2]+hide_H;
+enddef;
+%-------------------------------------------------------------------------------------------------
+def checklist_out= Mol_wt:=Mol_wtp:=nA:=0; fomula_str:="";
+ message "% There were "&fdr(3)(warning_cnt)&" warnings";
+ message "% width * height = " & fdr(8)(max_x-min_x)&" * "&fdr(8)(max_y-min_y);
+ message "% Shift width * height = "& fdr(8)(min_x)&" * "&fdr(8)(min_y);
+ message "% Bond length = "&fdr(3)(BL)&" Atom size = "&fdr(3)(AL);
+ message "% Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)&
+ " Ring count = "&fdr(3)(cntB-cntA+1);
+ message "%-----------------------------------< atom >< bond >-------";
+ for i=1 upto cntA: message "% "&fdr(3)(i)&" ("&fdr(10)(xpart(posA[i])/BL)&" ) ("&
+ fdr(10)(ypart(posA[i])/BL)&" ) "&fixed_l(8)(com_str[strA[i]])&" "&fdr(3)(Bcnt[i]); endfor
+ message "%Bond list---------------------------------------------------------";
+ for i=1 upto cntB: if lineB[i]<>0: message "% "&fdr(3)(incr nA)&" "&fdr(3)(sB[i])&
+ " -> "&fdr(3)(eB[i])&" ("&fdr(3)(lineB[i]-si+1)&")"; fi endfor
+ message "%Fomula -----------------------------------------------------------";
+ for i=1 upto tbl_max:
+ if sumA[i]>=1: tmp_wtp:=(wtA[i]/100)*sumA[i];
+ if (tmp_wtp<=40)and(Mol_wtp<=40): Mol_wt:=Mol_wt+(wtA[i]*sumA[i]);
+ else: Mol_wtp:=Mol_wtp+tmp_wtp; fi
+ fomula_str:=fomula_str&stripP(tblA[i])&decimal(sumA[i]);
+ message "% "&fixed_l(4)(stripP(tblA[i]))&"("&fdr(9)(wtA[i])&") * "&fdr(6)(sumA[i])&" = "
+ if tmp_wtp<=40: &fdr(12)(wtA[i]*sumA[i]); else: &fdr(12)(tmp_wtp)&" * 100"; fi fi
+ endfor
+ message "% Hide H = "&fdr(3)(hide_H);
+ message "% Molecular Weight: "
+ if Mol_wtp<=40: &fdr(10)(Mol_wt); else: &fdr(10)(Mol_wtp)&" * 100"; fi
+ message "% --------------------------------------";
+ message "% Molecular Fomula: "&fomula_str;
+ message "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%";
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def MOL_out= mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&mol_name&".mol";
+ printf ""; printf " -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+ printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000";
+ for i=1 upto cntA: printf fdr(10)(xpart(posA[i])/BL)& fdr(10)(ypart(posA[i])/BL)&
+ fdr(10)(0)&" "&fixed_l(2)(stripP(com_str[strA[i]]))&" 0 0 0 0"; endfor
+ for i=1 upto cntB: if lineB[i]<>0:
+ if (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2;
+ elseif lineB[i]=tm: nA:=3;
+ elseif (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1;
+ elseif (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6;
+ elseif lineB[i]=wv: nB:=4; else: nA:=1; nB:=0; fi
+ printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(nA)&fdr(3)(nB)&" 0 0"; fi endfor
+ printf "M END";
+enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%