texlive[47911] Master/texmf-dist: mcf2graph (3jun18)

commits+karl at tug.org commits+karl at tug.org
Sun Jun 3 23:16:34 CEST 2018


Revision: 47911
          http://tug.org/svn/texlive?view=revision&revision=47911
Author:   karl
Date:     2018-06-03 23:16:34 +0200 (Sun, 03 Jun 2018)
Log Message:
-----------
mcf2graph (3jun18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
    trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,6 +1,19 @@
 *******************************************************************************
- Changelog of mcf2graph software package          by Akira Yamaji 2018-04-16
+ Changelog of mcf2graph software package          by Akira Yamaji 2018-06-03
 *******************************************************************************
+[ver. 4.32  / 2018-06-03]
+  -add commands C[],N[],O[],S[]
+     X[1]  : "{X^+^}"
+     X[-1] : "{X^-^}"
+  -change option parameter name
+     sw_MOLout => sw_mol_out
+     sw_auxout => sw_aux_out
+  -improve MOL file output
+     sw_mol_out=0 : no MOL file
+     sw_mol_out=1 : MOL file V2000
+     sw_mol_out=2 : MOL file V3000
+  -update MCF manual and examples
+
 [ver. 4.31  / 2018-04-16]
   -add command */*n , n:*\* , |<=n
      */*n  : /n~wv

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,7 +1,7 @@
 ********************************************************************************
  mcf2graph  : Convert Molecular Coding Format to graphics with METAFONT/METAPOST
  Author     : Akira Yamaji
- version    : 4.31 2018-04-16
+ version    : 4.32 2018-06-03
  E-mail     : mcf2graph at gmail.com
  Located at : http://www.ctan.org/pkg/mcf2graph
 ********************************************************************************
@@ -11,7 +11,7 @@
  structure diagrams. This 'Coding' is named from coding(programing) technique
  adressing,grouping,macro,etc. There are no Meta language commands in MCF.
  mcf2graph.mf(METAFONT/METAPOST macro) convert MCF file to graphics file
- (pk font/PNG/SVG/EPS) or MDL MOL file(V2000).
+ (pk font/PNG/SVG/EPS) or MDL MOL file.
 
 2. The distribution of software
  ( 1) README                 This file
@@ -35,9 +35,10 @@
  ( 2) >mpost -s ahangle=1  FILENAME  => output PNG file (default:eps)
  ( 3) >mpost -s ahangle=2  FILENAME  => output SVG file 
  ( 4) >mpost -s ahangle=3  FILENAME  => output MDL Molfile(V2000)
- ( 5) >mpost -s ahlength=1 FILENAME  => output first definition only (for test)
- ( 6) >mpost -s ahlength=2 FILENAME  => output report
- ( 7) >mpost -s ahlength=3 FILENAME  => use plain.mp 'label','drawarrow'
+ ( 5) >mpost -s ahangle=4  FILENAME  => output MDL Molfile(V3000)
+ ( 6) >mpost -s ahlength=1 FILENAME  => output first definition only (for test)
+ ( 7) >mpost -s ahlength=2 FILENAME  => output report
+ ( 8) >mpost -s ahlength=3 FILENAME  => use plain.mp 'label','drawarrow'
 
 4. License
  Permission is hereby granted, free of charge, to any person obtaining a copy

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2018.04.16
+% Molecular Coding Format for mcf_example.tex   by Akira Yamaji  2018.06.03
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %%% it must be version 4.31 or later
+input mcf2graph.mf;   %%% it must be version 4.32 or later
 %-------------------------------------------------------------------------
 font_wd:=33mm;
 font_ht:=24mm;
@@ -8,7 +8,7 @@
 max_bond_length:=4.5mm;
 %-------------------------------------------------------------------------
 sw_select:=1;
-sw_auxout:=1;
+sw_aux_out:=1;
 sw_font_frame:=0;
 sw_atom_frame:=0;
 %%%% sw_expand:=1;
@@ -25,7 +25,7 @@
 %%%% var9:="inf_EXA"; tag9:="EXA";
 %%%% auxtag_out;
 %%%% sw_report:=1;
-%%%% sw_MOLout:=1;
+%%%% sw_mol_out:=1;
 %%%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png";
 %***************************************************************************
 beginfont("EN:Acetamiprid","MW:222.676")
@@ -222,7 +222,7 @@
 beginfont("EN:Gibberellin A3","MW:346.379");
   MCf(<18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb,
      5:@,40~zf`1,O,50,//O^180,14~zb:&,
-     2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H)
+     2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60)
 endfont;
 %**************************************************************************
 beginfont("EN:Cholesterol","MW:386.664")

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,8 +1,8 @@
 %!PS-Adobe-3.0 EPSF-3.0
 %%BoundingBox: -1 -1 212 60 
 %%HiResBoundingBox: -0.09962 -0.09962 211.90288 59.64348 
-%%Creator: MetaPost 2.000
-%%CreationDate: 2017.08.27:1449
+%%Creator: MetaPost 2.00
+%%CreationDate: 2018.06.03:2010
 %%Pages: 1
 %%DocumentResources: procset mpost-minimal
 %%+ font NJFVSO-NimbusSanL-Regu ICXWUR-CMR8

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,9 +1,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2018.04.16
+% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2018.06.03
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph.mf;   %% it must be version 4.31 or later
+input mcf2graph.mf;   %% it must be version 4.32 or later
 %------------------------------------------------------------------------
-sw_auxout:=0;
+sw_aux_out:=0;
 sw_mol_frame:=0;
 sw_expand:=0;
 sw_solid:=2;
@@ -273,22 +273,13 @@
   sw_clip:=1;
   ratio_chain_ring:=1;
   margin_top_bottom:=3mm;
-  MCf(<30,!3,1=dt,3=wv)
+  MCf(<30,!7,1=dt,3=wv,5=bd,7=bz)
 endfont
 %***********************************************************************
 beginfont("EN:change bond 4")
   font_ht:=12mm;
   bond_len:=8mm;
-  sw_clip:=1;
-  ratio_chain_ring:=1;
   margin_top_bottom:=3mm;
-  MCf(<30,!3,1=bd,3=bz)
-endfont
-%***********************************************************************
-beginfont("EN:change bond 5")
-  font_ht:=12mm;
-  bond_len:=8mm;
-  margin_top_bottom:=3mm;
   sw_clip:=1;
   ratio_chain_ring:=1;
   MCf(<30,!7,{2,4,6}=dr)
@@ -322,16 +313,17 @@
 endfont
 %***********************************************************************
 beginfont("EN:Insert atom")
-  sw_clip:=1;
-  font_ht:=10mm;
+  font_wd:=70mm;
+  font_ht:=12mm;
   MCf(<30,!2,O,!2,N,!2)
 endfont
 %***********************************************************************
 beginfont("EN:change atom")
-  font_ht:=18mm;
-  MCa(.5,1)(<30,!6,2:O,{3,5}:N)
+  font_wd:=70mm;
+  font_ht:=10mm;
+  MCa(0,0.5)(<-30,!4,2:O,{3,4}:N)
   sw_numberA:=1;
-  MCa(.5,.05)(<30,!6,2:O,{3,5}:N)
+  MCa(1,0.5)(<-30,!4,2:O,{3,4}:N)
 endfont
 %***********************************************************************
 beginfont("EN:change atom brock address 1")
@@ -366,6 +358,13 @@
   MCd(1,.88)(1,.5)(?6,4:\,?6)
 endfont
 %***********************************************************************
+beginfont("EN:Charged atom")
+  sw_clip:=1;
+  font_wd:=60mm;
+  font_ht:=15mm;
+  MCf(<-30,!2,N[1],!2,O[-1])
+endfont
+%***********************************************************************
 beginfont("EN:fused ring")
   font_ht:=18mm;
   margin_top_bottom:=1.5mm;
@@ -953,6 +952,8 @@
   font_ht:=30mm;
   ratio_bond_width:=0.065;
   sw_solid:=1;
+  sw_label_emu:=1;
+  %
   MCa(0.1,0.5)(<-210,60`1,60`1,60`1,{1,3}=dl,1:/R1,4:/R2^-60)
   ext(
    defaultscale:=0.6;
@@ -968,6 +969,7 @@
     drawarrow (0.52w,0.5h)..(0.6w,0.5h);
     defaultscale:=0.7;
     label("+",(0.25w,0.5h));
+    ratio_thickness_char:=0.125;
     label.bot("Diels-Alder Reaction",(0.5w,h));
   )
 endfont
@@ -1055,7 +1057,7 @@
   font_ht:=20mm;
   MCf(<18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb,
      5:@,40~zf`1,O,50,//O^180,14~zb:&,
-     2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H)
+     2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60)
 endfont
 %***************************************************************************
 beginfont("EN:Quinine","CAS:130-95-0","FM:C20H24N2O2","MW:324.42")

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  Molecular Coding Format manual           by  Akira Yamaji 2018.04.16
+%  Molecular Coding Format manual           by  Akira Yamaji 2018.06.03
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[a4paper]{article}
 %%%%\documentclass[a4paper,twoside]{article}
@@ -85,7 +85,6 @@
 \linethickness{0.08mm}%
 %----------------------------------------------------------------------------
 \newpage
-\setcounter{page}{1}
 \section{Introduction}
 Molecular Coding Format(MCF) is new linear notation
 represent chemical structure diagrams.
@@ -93,7 +92,7 @@
 like adressing,grouping,macro,etc. 
 There are no Meta language commands in MCF.
 mcf2graph convert MCF file to graphics file
-pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\
+pk font,PNG,SVG,EPS or MDL MOL file.\\
 %-----------------------------------------------------------------------------
 \section{MCF syntax}
 \subsection{Make bond}
@@ -227,28 +226,17 @@
 \begin{verbatim}
   Bn=bond type : change bond type at Bn
   dt : dotted  /  wv : wave
-
-  <30,!3,1=dt,3=wv
-\end{verbatim}
-\MCFstructure
-\vspace{-3mm}%
-\begin{verbatim}
-    dt        wv
-\end{verbatim}
-%-----------------------------------------------------------------------------
-\subsubsection{Broad}
-\begin{verbatim}
   bd : broad  /  bz : broad dotted 
 
-  <30,!3,1=bd,3=bz
+  <30,!7,1=dt,3=wv,5=bd,7=bz
 \end{verbatim}
 \MCFstructure
 \vspace{-3mm}%
 \begin{verbatim}
-    bd        bz
+    dt      wv       bd       bz
 \end{verbatim}
 %-----------------------------------------------------------------------------
-\subsubsection{Change multi bond type}
+\subsubsection{Change multiple bond type}
 \begin{verbatim}
   {2,4,6}=dr : 2=dr,4=dr,6=dr
 
@@ -294,7 +282,6 @@
 \end{verbatim}
 \MCFstructure
 %-----------------------------------------------------------------------------
-\newpage
 \subsection{Change atom}
 \subsubsection{Insert atom}
 \begin{verbatim}
@@ -307,9 +294,9 @@
 \subsubsection{Addressed atom}
 \begin{verbatim}
   2:O : change A2 C to O
-  {3,5}:N : change  A3,A5 C to N
+  {3,4}:N : change  A3,A4 C to N
 
-  <30,!6,2:O,{3,5}:N
+  <30,!4,2:O,{3,4}:N
 \end{verbatim}
 \MCFstructure
 %-----------------------------------------------------------------------------
@@ -346,6 +333,14 @@
 \end{verbatim}
 \MCFstructure
 %-----------------------------------------------------------------------------
+\subsubsection{Charged atom}
+\begin{verbatim}
+  N[1]:N+ / O[-1]:O-
+
+  <-30,!2,N[1],!2,O[-1]
+\end{verbatim}
+\MCFstructure
+%-----------------------------------------------------------------------------
 \subsection{Fuse ring}
 \subsubsection{Attached 1 bond}
 \begin{verbatim}
@@ -1053,6 +1048,8 @@
  p[m]: molecular origin position
  w[m]: molecular width
  h[m]: molecular height
+ ratio_thickness_char:
+   pen thickness / char width
 
 %----------------------------------------
 beginfont()
@@ -1064,17 +1061,13 @@
  MCd(1,1)(0.1,0.5)
   (<-210,60`1,60`1,60`1,{1,3}=dl,
    1:/R1,4:/R2^-60)
- ext(
-   defaultscale:=0.6;
-   label.bot("Diene",p0+(0.5w,0));
- )
+   ext(defaultscale:=0.6;
+     label.bot("Diene",p0+(0.5w,0));)
  %---------------------------------------
  MCd(1,1)(0.4,0.5)
   (<-30,-60`1,1=dl,1:/R3,2:/R4^60)
- ext(
-   defaultscale:=0.6;
-   label.bot("Dienophile",p0+(0.5w,0));
- )
+   ext(defaultscale:=0.6;
+     label.bot("Dienophile",p0+(0.5w,0));)
  %---------------------------------------
  MCd(1,1)(0.9,0.5)
   (<30,?6,6=dl,2:/R2,3:/R4,4:/R3,5:/R1)
@@ -1083,6 +1076,7 @@
    drawarrow (0.52w,0.5h)..(0.6w,0.5h);
    defaultscale:=0.7;
    label("+",(0.25w,0.5h));
+   ratio_thickness_char:=0.125;
    label.bot("Diels-Alder Reaction",
             (0.5w,h));
  )
@@ -1245,7 +1239,7 @@
   13=dl,6=wf,8=wb,
   5:@,40~zf`1,O,60,//O^180,14~zb:&,
   2:/COOH,7://_,13:*/OH,8:/*OH,
-  14:*/_,{1^60,4^60}:*/H
+  14:*/_,{1,4}:*/H^60
 \end{verbatim}
 \MCFstructure
 %-----------------------------------------------------------------------------
@@ -1494,15 +1488,17 @@
 \newpage
 %------------------------------------------------------------------------
 \noindent%
-\subsection{Molfile output}
+\subsection{MOL file output}
 \paragraph{(Insert option parameter setting)}
 \begin{verbatim}
-  sw_MOLout:=1;
-  ** default : sw_MOLout=0
+  sw_mol_out:=1; (V2000)
+  sw_mol_out:=2; (V3000)
+  ** default : sw_mol_out=0
 \end{verbatim}
 \paragraph{(Command line)}
 \begin{verbatim}
-  >mpost -s ahangle=3  FILENAME (molecular definition file)
+  >mpost -s ahangle=3  FILENAME (molecular definition file) V2000
+  >mpost -s ahangle=4  FILENAME (molecular definition file) V3000
 \end{verbatim}
 \paragraph{(Output)}
 \begin{verbatim}

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2018.04.16
+% Example of  MCF typest with LuaLaTeX(luamplib)     by A.Yamaji    2018.06.03
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% mcf2graph.mf it must be version 4.31 or later
+%%% mcf2graph.mf it must be version 4.32 or later
 \documentclass{article}
 %------------------------------------------------------------------------------
 \usepackage{luamplib}%
@@ -10,7 +10,7 @@
 \mplibcodeinherit{enable}%
 \mplibverbatim{enable}%
 \everymplib{if unknown Ph1: input mcf2graph.mf; fi
-            sw_auxout:=1;
+            sw_aux_out:=1;
             sw_label_emu:=1;
             sw_font_frame:=4;
             max_bond_length:=4.5mm;
@@ -138,7 +138,7 @@
   MCa(0.8,0.5)(
    <18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb,
    5:@,40~zf`1,O,60,//O^180,14~zb:&,
-   2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H)
+   2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60)
     EXT(
       label.lrt("("&inf_EN&")",(0,h));
       defaultscale:=0.8;
@@ -154,7 +154,7 @@
 13=dl,6=wf,8=wb,
 5:@,40~zf`1,O,60,//O^180,14~zb:&,
 2:/COOH,7://_,13:*/OH,8:/*OH,
-14:*/_,{1^60,4^60}:*/H)
+14:*/_,{1,4}:*/H^60)
 \end{verbatim}
 \end{minipage}
 \vspace{7mm}\\
@@ -256,7 +256,7 @@
 %----------------------------------------------------------------------------
 \noindent
 \begin{mplibcode}
-font_wd:=80mm; font_ht:=65mm;
+font_wd:=80mm; font_ht:=70mm;
 beginfont("NO:6","EN:Vancomycin","MW:1449.25");
   MCa(0.9,0)(
     <30,
@@ -357,17 +357,16 @@
 font_ht:=75mm;
 max_bond_length:=5mm;
 %------------------------------------------------------------------------
-Om:='("{O^-^}");
-MCa(0.33,   1)(<30,Om,!0,//O,!,//O,!2,//O,!,Om)
-MCa(0.66,   1)(<30,Om,!0,//O,!4,//O,!,Om,-4`1:\,//O,!,Om,4:/OH^-165)
-MCa(1,      1)(<30,Om,!0,//O,!2,!~dr,!,//O,!,Om,-4`1:\,//O,!,Om)
-MCa(1,   0.55)(<30,Om,!0,//O,!4,//O,!,Om,-4:\`1,//O,!,Om)
-MCa(1,   0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om,-4:\`1,//O,!,Om)
-MCa(0.66,0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om)
-MCa(0.33,0.05)(<30,Om,!0,//O,!3,//O,!,"{S-CoA}")
-MCa(0,   0.05)(<30,Om,!0,//O,!3,//O,!,Om)
-MCa(0,   0.55)(<30,Om,!0,//O,!,!~dr,!,//O,!,Om)
-MCa(0,      1)(<30,Om,!0,//O,!3,//O,!,Om,3:/OH)
+MCa(0.33,   1)(<30,O[-1],!0,//O,!,//O,!2,//O,!,O[-1])
+MCa(0.66,   1)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4`1:\,//O,!,O[-1],4:/OH^-165)
+MCa(1,      1)(<30,O[-1],!0,//O,!2,!~dr,!,//O,!,O[-1],-4`1:\,//O,!,O[-1])
+MCa(1,   0.55)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4:\`1,//O,!,O[-1])
+MCa(1,   0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1],-4:\`1,//O,!,O[-1])
+MCa(0.66,0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1])
+MCa(0.33,0.05)(<30,O[-1],!0,//O,!3,//O,!,"{S-CoA}")
+MCa(0,   0.05)(<30,O[-1],!0,//O,!3,//O,!,O[-1])
+MCa(0,   0.55)(<30,O[-1],!0,//O,!,!~dr,!,//O,!,O[-1])
+MCa(0,      1)(<30,O[-1],!0,//O,!3,//O,!,O[-1],3:/OH)
 %-------------------------------------------------------------------------
 EXT(
 defaultfont:="uhvr8r";
@@ -418,17 +417,16 @@
 font_wd:=160mm;
 font_ht:=75mm;
 max_bond_length:=5mm;
-Om:='("{O^-^}");
-MCa(0.33,   1)(<30,Om,!0,//O,!,//O,!2,//O,!,Om)
-MCa(0.66,   1)(<30,Om,!0,//O,!4,//O,!,Om,-4`1:\,//O,!,Om,4:/OH^-165)
-MCa(1,      1)(<30,Om,!0,//O,!2,!~dr,!,//O,!,Om,-4`1:\,//O,!,Om)
-MCa(1,   0.55)(<30,Om,!0,//O,!4,//O,!,Om,-4:\`1,//O,!,Om)
-MCa(1,   0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om,-4:\`1,//O,!,Om)
-MCa(0.66,0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om)
-MCa(0.33,0.05)(<30,Om,!0,//O,!3,//O,!,"{S-CoA}")
-MCa(0,   0.05)(<30,Om,!0,//O,!3,//O,!,Om)
-MCa(0,   0.55)(<30,Om,!0,//O,!,!~dr,!,//O,!,Om)
-MCa(0,      1)(<30,Om,!0,//O,!3,//O,!,Om,3:/OH)
+MCa(0.33,   1)(<30,O[-1],!0,//O,!,//O,!2,//O,!,O[-1])
+MCa(0.66,   1)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4`1:\,//O,!,O[-1],4:/OH^-165)
+MCa(1,      1)(<30,O[-1],!0,//O,!2,!~dr,!,//O,!,O[-1],-4`1:\,//O,!,O[-1])
+MCa(1,   0.55)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4:\`1,//O,!,O[-1])
+MCa(1,   0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1],-4:\`1,//O,!,O[-1])
+MCa(0.66,0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1])
+MCa(0.33,0.05)(<30,O[-1],!0,//O,!3,//O,!,"{S-CoA}")
+MCa(0,   0.05)(<30,O[-1],!0,//O,!3,//O,!,O[-1])
+MCa(0,   0.55)(<30,O[-1],!0,//O,!,!~dr,!,//O,!,O[-1])
+MCa(0,      1)(<30,O[-1],!0,//O,!3,//O,!,O[-1],3:/OH)
 EXT(
 defaultfont:="uhvr8r";
 defaultscale:=0.75;

Modified: trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf
===================================================================
--- trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2018-06-03 21:16:16 UTC (rev 47910)
+++ trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf	2018-06-03 21:16:34 UTC (rev 47911)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.31     Copyright (c) 2013-2018   Akira Yamaji
+% mcf2graph ver 4.32     Copyright (c) 2013-2018   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,
@@ -17,7 +17,7 @@
 % 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(pk)/eps/sgv/png/mdl molfile(V2000)
+%  Molecular Coding Format(MCF) to font(pk)/eps/sgv/png/mdl molfile
 %----------------------------------------------------------------------------------------------
 % This package is located at : http://www.ctan.org/pkg/mcf2graph
 % Suggestion or request mail to : mcf2graph at gmail.com 
@@ -25,17 +25,18 @@
 % Set output no image file        : mpost -s ahangle=0  FILENAME
 % 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 outputformat to MOL(V2000)  : mpost -s ahangle=3  FILENAME
+% Set outputformat to MOL(V3000)  : mpost -s ahangle=4  FILENAME
 % Set make first font only        : mpost -s ahlength=1 FILENAME
 % Set output report               : mpost -s ahlength=2 FILENAME
 % Set to use plain.mp label,arrow : mpost -s ahlength=3 FILENAME
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 tracingstats:=1;
-message " This is mcf2graph ver 4.3  2018.04";
+message " This is mcf2graph ver 4.3  2018.06";
 %-------------------------------------------------------------------------------------------------
 newinternal nA,nB,nC,nD,nE,nF,char_num,str_cnt,sub_usr,sub_int,tbl_cnt;
 numeric save_para[],comD[][],parD[][],cntD[],tbl_str_wd[],tbl_atom[],tbl_subst[][],tbl_atom_wt[],
-        tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[];
+        tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],chgA[];
 string  tbl_atom_str[],strD[],var[],tag[],mp_log_name,aux_delimiter,atomfont,
         save_atomfont,save_defaultfont;
 picture mol_stru[];
@@ -42,8 +43,8 @@
 path    arrow_path,arrow_head;
 %-------------------------------------------------------------------------------------------------
 char_num:=str_cnt:=proc_end:=sw_label_emu:=0;
-sw_numberA:=sw_numberB:=sw_mol_frame:=sw_auxout:=sw_solid:=sw_expand:=sw_font_frame:=sw_clip:=0;
-sw_atom_frame:=sw_report:=sw_MOLout:=sw_subst_off:=sw_bond_single:=sw_auxfix:=sw_arrow:=0;
+sw_numberA:=sw_numberB:=sw_mol_frame:=sw_aux_out:=sw_solid:=sw_expand:=sw_font_frame:=sw_clip:=0;
+sw_atom_frame:=sw_report:=sw_mol_out:=sw_subst_off:=sw_bond_single:=sw_auxfix:=sw_arrow:=0;
 numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; aux_max:=max_inf_num:=20;
 aux_delimiter:=";";  var1:="jobname";  tag1:="F";  var2:="char_num"; tag2:="C";
 for i=3 upto aux_max: var[i]:=tag[i]:=""; endfor
@@ -60,8 +61,9 @@
   fi
   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_MOLout:=1; def shipit = enddef;              % MDL Molefile on
+  elseif ahangle=2: outputformat:="svg"; prologues:=3;              % SVG format
+  elseif ahangle=3: sw_mol_out:=1;  def shipit = enddef;            % output MOL V2000
+  elseif ahangle=4: sw_mol_out:=2;  def shipit = enddef;            % output MOL V3000
   fi
   outputtemplate:="%j-%3c."&outputformat;
   def beginchar(expr a,b,c,d)= beginfig(a) w:=b*pt; h:=c*pt; enddef;
@@ -77,7 +79,6 @@
   def Cp(expr s) = enddef;
   def color = transform enddef;
   def printf expr s= message s enddef;
-  %-----------------------------------------------------------------------
   sw_arrow:=0;
   dotlabeldiam:=3bp;
   %-----------------------------------------------------------------------
@@ -88,11 +89,12 @@
 clearit;
 for i=0 upto 20: mol_stru[i]:=nullpicture; endfor
 %--------------------------------------------------------------------------------------------------
-let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =;
+let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
 %--------------------------------------------------------------------------------------------------
 ?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1;
-margin_left_right:=margin_top_bottom:=0.4mm;             ratio_bond_width:=0.1;
-ratio_chain_ring:= 0.66;      ratio_atom_bond:=0.36;     ratio_thickness_bond:=0.015;  
+margin_left_right:=margin_top_bottom:=0.4mm;
+ratio_bond_width:=0.1;        ratio_chain_ring:= 0.66;   ratio_atom_bond:=0.36;
+ratio_thickness_bond:=0.015;  ratio_thickness_char:=0.1;
 ratio_char_bond:=1.5;         ratio_bondgap_bond:=0.15;  ratio_zebragap_bond:=0.12;
 ratio_zebra_black:=0.4;       ratio_wedge_bond:=0.12;    ratio_atomgap_atom:=0.050;
 offset_thickness:=0.2pt;      offset_bond_gap:=0.3pt;    offset_zebra_gap:=0.1pt;
@@ -121,10 +123,10 @@
 def_com(1)(si,dl,dr,db,dm,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,si_,wf_,wb_,bd_);
 %--------------------------------------------------------------------------------------------------
 def parameter_list=
-  sw_report,sw_numberA,sw_numberB,sw_mol_frame,sw_auxout,sw_solid,sw_expand,sw_MOLout,
+  sw_report,sw_numberA,sw_numberB,sw_mol_frame,sw_aux_out,sw_solid,sw_expand,sw_mol_out,
   sw_atom_frame,sw_font_frame,sw_subst_off,sw_bond_single,sw_clip,sw_arrow,sw_label_emu,
   margin_left_right,margin_top_bottom,ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,
-  ratio_chain_ring,ratio_bondgap_bond,ratio_zebra_black,ratio_zebragap_bond,
+  ratio_chain_ring,ratio_bondgap_bond,ratio_zebra_black,ratio_zebragap_bond,ratio_thickness_char,
   ratio_wedge_bond,ratio_atomgap_atom,ratio_bond_width,font_wd,font_ht,
   bond_len,offset_atom,offset_wedge,max_bond_length,offset_zebra_gap,offset_bond_gap,
   thickness_font_frame,offset_thickness,numberA_start,numberA_end,numberB_start,numberB_end,
@@ -396,7 +398,7 @@
       elseif sA="^": if nC= 0.5: nC:=0; else: nC:= 0.5;  fi
       else:
         if defaultfont="draw":
-          draw_char(sA,cp+(0,nB*nC),nB,0.35*ratio_char_bond*bp,0);
+          draw_char(sA,cp+(0,nB*nC),nB,ratio_thickness_char*defaultscale*defaultsize,0);
           cp:=cp+(nB*tbl_char_wd[nA],0);
         else:
           pC:=sA infont defaultfont scaled defaultscale;
@@ -404,8 +406,9 @@
           cp:=cp+(lrcorner pC-llcorner pC);
         fi
       fi
-    else:   draw_char(sA,cp,nB,0.35*ratio_char_bond*bp,0);
-            cp:=cp+(nB*tbl_char_wd[nA],0);
+    else:
+      draw_char(sA,cp,nB,ratio_thickness_char*defaultscale*defaultsize,0);
+      cp:=cp+(nB*tbl_char_wd[nA],0);
     fi
   endfor
   endgroup;
@@ -499,7 +502,7 @@
   begingroup
   save com,par,adrA,adrB,f_bra,envT,envB,lenT,lineT,strAT,stkA,stkB,stkL,stkM,cntP,bondL,temp_len,
        temp_cntB,f_end,f_term,rotT,adrS,f_at,f_lineT,f_rotT,f_lenT,f_envT,angT,tempB,tempA,
-       glu,xpos,ypos,str_len,max_x,max_y,par_s,par_e,score_u,hat,f_char,ps_adr,ps_com,
+       glu,xpos,ypos,str_len,max_x,max_y,par_s,par_e,score_u,hat,f_char,ps_adr,ps_com,sA,
        op_com,op_par,op_cnt,crR,colorA,colorB,PA,PO,PP,PX;
   %-----------------------------------------------------------------------------------------------
   def PA= sub_add enddef;
@@ -509,9 +512,10 @@
   %-----------------------------------------------------------------------------------------------
   numeric stkB[],stkA[],stkL[],stkM[],f_char[],ps_adr[],ps_com[],colorA[],colorB[],
           op_com[][],op_par[][],op_cnt[];
+  string sA;
   %-----------------------------------------------------------------------------------------------
   if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi
-  if (sw_expand=1)or(sw_MOLout=1): expand_set; fi
+  if (sw_expand=1)or(sw_mol_out>=1): expand_set; fi
   sub_usr:=sub_usr_start;
   sub_int:=sub_int_start;
   par_s:=ASCII("{"); par_e:=ASCII("}"); score_u:=ASCII("_"); hat:=ASCII("^");
@@ -540,6 +544,8 @@
   for i=1 upto cntB: if lineB[i]>=si_: draw_bond(i,sB[i],eB[i],angB[i],lineB[i]); fi endfor
   %-----------------------------------------------------------------------------------------------
   for i=1 upto cntA:
+    sA:=substring(3,4) of strD[numS[i]];
+    if sA="+": chgA[i]:=1; ef sA="-": chgA[i]:=-1; else: chgA[i]:=0; fi
     if (sw_numberA>=1)and(i>=numberA_start)and(i<=numberA_end):
        if     sw_numberA=2: nA:=i-numberA_start+1;
        elseif sw_numberA=3: if numberA_end<cntA: nA:=numberA_end-i+1; else: nA:=cntA-i+1; fi
@@ -561,7 +567,7 @@
   addto mol_stru[cntM] also currentpicture;
   clearit;
   endgroup;
-  if ((sw_auxout=1)or(sw_report=1)or(sw_MOLout=1))and(f_MP=1): proc_calc_out; fi
+  if ((sw_aux_out=1)or(sw_report=1)or(sw_mol_out>=1))and(f_MP=1): proc_calc_out; fi
   %-----------------------------------------------------------------------------------------------
 %%%%  message "count of usr ="& decimal(sub_usr) &" "& decimal(sub_usr-sub_usr_start);
 %%%%  message "count of int ="& decimal(sub_int) &" "& decimal(sub_int-sub_int_start);
@@ -657,58 +663,58 @@
   for i=0 upto 5: stkA[i]:=stkB[i]:=0; endfor
   %-----------------------------------------------------------------------------------------------
   for i=n upto cntD[0]:
-  com:=comD[0][i]; par:=parD[0][i];
-  if     com=_push: 
+  nC:=comD[0][i]; par:=parD[0][i];
+  if     nC=_push: 
     if     par=1: stkL[adrS]:=bondL; stkA[incr adrS]:=adrA:=cntA; stkB[adrS]:=adrB:=cntB;
     elseif par=0: temp_len:=bondL;
     elseif par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
     fi
-  elseif com=_pop: if     par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS];
-                   elseif par=0: bondL:=temp_len;
-                   elseif par=2: stkA[adrS+1]:=0;
+  ef nC=_pop: if     par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS];
+                   ef par=0: bondL:=temp_len;
+                   ef par=2: stkA[adrS+1]:=0;
                    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=_postA:            ps_put;
-  elseif com=_postB: lineT:=dm; ps_put;
-  elseif com=_postC: lineT:=wf; ps_put;
-  elseif com=_postD: lineT:=zf; ps_put;
-  elseif com=_postE: lineT:=nl; ps_put;
-  elseif com=_postF: lineT:=0;  ps_put;
-  elseif com=_postG: lineT:=wv; ps_put;
-  elseif com=_postH: lineT:=nl; lenT:=_size_a; ps_put;
-  elseif com=_jp_bond: termA; tempB:=getB(par); check_adrB(tempB); sB[cntB+1]:=sB[tempB]; f_bra:=1;
-  elseif com=_jp_atom: termA; tempA:=getA(par); check_adrA(tempA); sB[cntB+1]:=tempA; f_bra:=1;
-  elseif com=_jp_atom_abs: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB;
-  elseif com=_chg_atom:   numS[getA(adrT)]:=parD[par][1];
-  elseif com=_N:          numS[getA(par)]:=parD[N][1];
-  elseif com=_O:          numS[getA(par)]:=parD[O][1];
-  elseif com=_S:          numS[getA(par)]:=parD[S][1];
-  elseif com=_chg_len: if par=_ring_len: bondL:=ringL;
-                       elseif par=0: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi
+  ef nC=_mk_bond:  if (par=0)and(rotT<>0): rotT:=0; fi  add_atom;
+  ef nC=_set_adr:  adrT:=par;
+  ef nC=_set_atom: strAT:=par;
+  ef nC=_postA:            ps_put;
+  ef nC=_postB: lineT:=dm; ps_put;
+  ef nC=_postC: lineT:=wf; ps_put;
+  ef nC=_postD: lineT:=zf; ps_put;
+  ef nC=_postE: lineT:=nl; ps_put;
+  ef nC=_postF: lineT:=0;  ps_put;
+  ef nC=_postG: lineT:=wv; ps_put;
+  ef nC=_postH: lineT:=nl; lenT:=_size_a; ps_put;
+  ef nC=_jp_bond: termA; tempB:=getB(par); check_adrB(tempB); sB[cntB+1]:=sB[tempB]; f_bra:=1;
+  ef nC=_jp_atom: termA; tempA:=getA(par); check_adrA(tempA); sB[cntB+1]:=tempA; f_bra:=1;
+  ef nC=_jp_atom_abs: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB;
+  ef nC=_chg_atom:   numS[getA(adrT)]:=parD[par][1];
+  ef nC=_N:          numS[getA(par)]:=parD[N][1];
+  ef nC=_O:          numS[getA(par)]:=parD[O][1];
+  ef nC=_S:          numS[getA(par)]:=parD[S][1];
+  ef nC=_chg_len: if par=_ring_len: bondL:=ringL;
+                       ef par=0: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi
                        else: bondL:=par; fi
-  elseif com=_get_len: if par=0: if bondL=crR: bondL:=lenT; fi else: ringL:=lenB[getB(par)]; fi
-  elseif com=_tmp_len: lenT:=par;
-  elseif com=_set_line: lineB[getB(adrT)]:=par;
-  elseif com=_dl:       lineB[getB(par)]:=dl;
-  elseif com=_mb:       lineB[getB(-1)]:=par;
-  elseif (com=_chg_line)or(com=_tmp_line): lineT:=par;
-  elseif com=_tmp_rot:    rotT:=par;
-  elseif com=_cyc:     f_end:=getA(par); check_adrA(f_end); add_atom;
-  elseif com=_cyc_eB:  f_end:=eB[getB(par)]; add_atom;
-  elseif com=_cyc_sB:  f_end:=sB[getB(par)]; add_atom;
-  elseif com=_chg_env: envB:=par;
-  elseif com=_tmp_env: envT:=par;
-  elseif com=_set_clr:
+  ef nC=_get_len: if par=0: if bondL=crR: bondL:=lenT; fi else: ringL:=lenB[getB(par)]; fi
+  ef nC=_tmp_len: lenT:=par;
+  ef nC=_set_line: lineB[getB(adrT)]:=par;
+  ef nC=_dl:       lineB[getB(par)]:=dl;
+  ef nC=_mb:       lineB[getB(-1)]:=par;
+  ef (nC=_chg_line)or(nC=_tmp_line): lineT:=par;
+  ef nC=_tmp_rot:    rotT:=par;
+  ef nC=_cyc:     f_end:=getA(par); check_adrA(f_end); add_atom;
+  ef nC=_cyc_eB:  f_end:=eB[getB(par)]; add_atom;
+  ef nC=_cyc_sB:  f_end:=sB[getB(par)]; add_atom;
+  ef nC=_chg_env: envB:=par;
+  ef nC=_tmp_env: envT:=par;
+  ef nC=_set_clr:
      f_at:=par;
      if     par=1: if lineT<>si: f_lineT:=1; fi if rotT<>0:  f_rotT:=1; fi
                    if lenT<>crR: f_lenT:=1;  fi if envT<>hz: f_envT:=1; fi
-     elseif par=0: f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; lineT:=si; lenT:=crR;
+     ef par=0: f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; lineT:=si; lenT:=crR;
      fi
-  elseif com=_term:       termA;
-  elseif com=_set_colorA: colorA[getA(adrT)]:=par;
-  elseif com=_set_colorB: colorB[getB(adrT)]:=par;
+  ef nC=_term:       termA;
+  ef nC=_set_colorA: colorA[getA(adrT)]:=par;
+  ef nC=_set_colorB: colorB[getB(adrT)]:=par;
   fi
   endfor
 enddef;
@@ -734,36 +740,35 @@
   for i=0 upto 5: stkA[i]:=stkB[i]:=0; endfor
   %----------------------------------------------------------------------------------------------
   for i=1 upto cntD[0]:
-  com:=comD[0][i]; par:=parD[0][i];
-  if com=_push: if     par=1: stkM[adrS]:=envB; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA;
+  nC:=comD[0][i]; par:=parD[0][i];
+  if nC=_push: if     par=1: stkM[adrS]:=envB; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA;
                           stkB[adrS]:=adrB:=cntB;
-                elseif par=0: temp_len:=bondL;
-                elseif par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
+                ef par=0: temp_len:=bondL;
+                ef par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB;
                 fi
-  elseif com=_pop:     if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS];
-                       elseif par=0: temp_len:=bondL;
-                       elseif par=2: stkA[adrS+1]:=0;
+  ef nC=_pop:     if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS];
+                       ef par=0: temp_len:=bondL;
+                       ef par=2: stkA[adrS+1]:=0;
                        fi
-  elseif com=_jp_bond:  termB; tempB:=getB(par); posBs:=posA[sB[tempB]];
+  ef nC=_jp_bond:  termB; tempB:=getB(par); posBs:=posA[sB[tempB]];
                         angT:=angB[tempB]; f_bra:=1; rotT:=0;
-  elseif com=_jp_atom:     termB; adrT:=getA(par); posBs:=posA[adrT];
+  ef nC=_jp_atom:     termB; adrT:=getA(par); posBs:=posA[adrT];
                            angT:=ang_br[adrT]; f_bra:=1; rotT:=0;
-  elseif com=_jp_atom_abs: adrT:=par; posBs:=posA[adrT];
+  ef nC=_jp_atom_abs: adrT:=par; posBs:=posA[adrT];
                            angT:=ang_br[adrT]; f_bra:=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_bond(par);
-  elseif com=_rot_ang:  angT:=(angT+par) mod 360;
-  elseif com=_tmp_rot:  rotT:=par;
-  elseif (com>=_postA)and(com<=_postH): rotT:=0;
-  elseif com=_chg_env: envB:=par;
-  elseif com=_tmp_env: envT:=par;
-  elseif com=_set_clr: f_at:=par; if par=0: lineT:=si; lenT:=crR; rotT:=envT:=0; fi
-  elseif com=_cyc:     f_end:=1; proc_cyc(getA(par));
-  elseif com=_cyc_sB:  f_end:=1; proc_cyc(sB[getB(par)]);
-  elseif com=_cyc_eB:  f_end:=1; proc_cyc(eB[getB(par)]);
-  elseif com=_term:    termB;
-%%%%%%%%%  elseif com=_stack_reset:   stkA[adrS+1]:=0;
+  ef nC=_adj_ang:  if (angT<40)or(angT>320): angT:=0; ef angT<140: angT:=90;
+                        ef angT<220: angT:=180; else: angT:=270; fi
+  ef nC=_mk_bond:  if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par);
+  ef nC=_rot_ang:  angT:=(angT+par) mod 360;
+  ef nC=_tmp_rot:  rotT:=par;
+  ef (nC>=_postA)and(nC<=_postH): rotT:=0;
+  ef nC=_chg_env: envB:=par;
+  ef nC=_tmp_env: envT:=par;
+  ef nC=_set_clr: f_at:=par; if par=0: lineT:=si; lenT:=crR; rotT:=envT:=0; fi
+  ef nC=_cyc:     f_end:=1; proc_cyc(getA(par));
+  ef nC=_cyc_sB:  f_end:=1; proc_cyc(sB[getB(par)]);
+  ef nC=_cyc_eB:  f_end:=1; proc_cyc(eB[getB(par)]);
+  ef nC=_term:    termB;
   fi
   endfor
 enddef;
@@ -790,11 +795,11 @@
 enddef;
 %==================================================================================================
 vardef getA(expr n)=
- if n>=0: stkA[adrS+1]+n elseif n>=-999: cntA+n+1 else: stkA[adrS]+n+4095 fi
+ if n>=0: stkA[adrS+1]+n ef n>=-999: cntA+n+1 else: stkA[adrS]+n+4095 fi
 enddef;
 %--------------------------------------------------------------------------------------------------
 vardef getB(expr n)=
- if n>=1: stkB[adrS+1]+n elseif n=0: tempB elseif n>=-999: cntB+n+1 else: stkB[adrS]+n+4095 fi
+ if n>=1: stkB[adrS+1]+n ef n=0: tempB ef n>=-999: cntB+n+1 else: stkB[adrS]+n+4095 fi
 enddef;
 %--------------------------------------------------------------------------------------------------
 def termA= if f_term=0: if f_bra=0: numS[incr cntA]:=strAT; strAT:=0;
@@ -809,9 +814,9 @@
 %--------------------------------------------------------------------------------------------------
 vardef proc_env(expr n,m,a,b)=  r:=(n mod 360);
   if m>=sub_emb_start: parD[m][cntB-temp_cntB] 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
+    if     m=hz:if r=0:a ef r<=90:b ef r<=180:a ef r<270:b  else:a fi
+    ef m=vt:if r=0:b ef r<90:a  ef r<=180:b ef r<=271:a else:b fi
+    ef (m>=-180)and(m<=180): m fi fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def draw_atom(expr NUM,POS,ANG,STR,WD)=
@@ -829,9 +834,9 @@
     if dx<0: if nB=par_s: k:=i+1; nC:=1; forever: exitif pic_c(i+(incr nC),STR)="}";endfor fi
              if nC>0: sB:=pic_c(k+(decr nC),STR); nB:=ASCII(sB); fi
     fi
-    if     nB=score_u: if nE=0: nE:=-.5; else: nE:=0; fi;
-    elseif nB=hat:     if nE=0: nE:= .5; else: nE:=0; fi;
-    elseif (nB<>par_s)and(nB<>par_e):
+    if nB=score_u: if nE=0: nE:=-.5; else: nE:=0; fi;
+    ef nB=hat:     if nE=0: nE:= .5; else: nE:=0; fi;
+    ef (nB<>par_s)and(nB<>par_e):
       nA:=atom_wd*tbl_char_wd[nB];
       if (atomfont<>"draw")and(f_MP=1):
         pC:=sB infont atomfont scaled (atom_wd/atomfontsize);
@@ -863,12 +868,13 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def draw_bond(expr NN,BP,EP,ANG,LN)=
   begingroup
-  save ww,ap,am,hpt,Ls,Le,pA,pB,pC,pT;
+  save ww,ap,am,hpt,Ls,Le,pA,pB,pC,pT,nL,nC;
   pair Ls,Le;
   path pA,pB,pC,pT;
   %----------------------------------------------------------------------------------------------
+  nL:=LN;
   nC:=length(posA[EP]-posA[BP]);
-  if (nC>0)and(LN<>0):
+  if (nC>0)and(nL<>0):
     ww:=wedge_wd; hpt:=.5bond_pen_wd; ap:=ANG+90; am:=ANG-90;
     if sw_numberB>=1: clipping(0,0,posA[BP],posA[EP],nC);
     else: clipping(numS[BP],numS[EP],posA[BP],posA[EP],nC); fi
@@ -875,40 +881,40 @@
     pickup pencircle scaled bond_pen_wd;
     if known colorB[NN]: nB:=colorB[NN]; fi
     %---------------------------------------------------------------------------------------------
-    if     (LN=si)or(sw_bond_single=1): draw pA Cp(nB);
-    elseif LN=dl:draw pA Cp(nB); draw sfB(pC,bondgap,ap) Cp(nB);
-    elseif LN=dr:draw pA Cp(nB); draw sfB(pC,bondgap,am) Cp(nB);
-    elseif LN=dm:draw sfB(pB,bondgap/1.75,ap) Cp(nB); draw sfB(pB,bondgap/1.75,am) Cp(nB);
-    elseif LN=db:if ((ANG-ang_br[BP]) mod 360)<=180: nA:=ap; else: nA:=am; fi
+    if     (nL=si)or(sw_bond_single=1): draw pA Cp(nB);
+    ef nL=dl: draw pA Cp(nB); draw sfB(pC,bondgap,ap) Cp(nB);
+    ef nL=dr: draw pA Cp(nB); draw sfB(pC,bondgap,am) Cp(nB);
+    ef nL=dm: draw sfB(pB,bondgap/1.75,ap) Cp(nB); draw sfB(pB,bondgap/1.75,am) Cp(nB);
+    ef nL=db: if ((ANG-ang_br[BP]) mod 360)<=180: nA:=ap; else: nA:=am; fi
                  draw pA Cp(nB); draw sfB(pC,bondgap,nA) Cp(nB);
-    elseif LN=tm:draw pA Cp(nB);draw sfB(pA,bondgap,ap) Cp(nB); draw sfB(pA,bondgap,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 bondgap Cp(nB);
-    elseif LN=bz:bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am),nB);
-    elseif LN=zf:wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB);
-    elseif LN=zb:wz_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:nB:=3bond_pen_wd; nA:=nB/length(Le-Ls);
+    ef nL=tm: draw pA Cp(nB);draw sfB(pA,bondgap,ap) Cp(nB); draw sfB(pA,bondgap,am) Cp(nB);
+    ef nL=wf: fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle;
+    ef nL=wb: fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle;
+    ef nL=bd: draw pA withpen penrazor rotated ap scaled bondgap Cp(nB);
+    ef nL=bz: bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am),nB);
+    ef nL=zf: wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB);
+    ef nL=zb: wz_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap),nB);
+    ef nL=dt: for i=0 step .75zebra_gap/length(Le-Ls) until 1: drawdot i[Ls,Le]; endfor
+    ef nL=wv: nB:=3bond_pen_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;
-    elseif LN=vf:draw pA Cp(nB);draw sfB(Le,bondgap,ANG-150)--Le--sfB(Le,bondgap,ANG+150) Cp(nB);
-    elseif LN=vb:draw pA Cp(nB);draw sfB(Ls,bondgap,ANG-30)--Ls--sfB(Ls,bondgap,ANG+30) Cp(nB);
-    elseif LN=si_:erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 0.8bondgap; draw pA Cp(nB);
-    elseif LN=wf_:erase fill sfB(0.15[Ls,Le],.5ww,ap)--sfB(0.15[Ls,Le],.5ww,am)--
+    ef nL=vf: draw pA Cp(nB);draw sfB(Le,bondgap,ANG-150)--Le--sfB(Le,bondgap,ANG+150) Cp(nB);
+    ef nL=vb: draw pA Cp(nB);draw sfB(Ls,bondgap,ANG-30)--Ls--sfB(Ls,bondgap,ANG+30) Cp(nB);
+    ef nL=si_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 0.8bondgap; draw pA Cp(nB);
+    ef nL=wf_: erase fill sfB(0.15[Ls,Le],.5ww,ap)--sfB(0.15[Ls,Le],.5ww,am)--
                              sfB(0.85[Ls,Le],1.3ww,am)--sfB(0.85[Ls,Le],1.3ww,ap)--cycle;
                   fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle;
-    elseif LN=wb_:erase fill sfB(0.15[Ls,Le],1.3ww,ap)--sfB(0.15[Ls,Le],1.3ww,am)--
+    ef nL=wb_: erase fill sfB(0.15[Ls,Le],1.3ww,ap)--sfB(0.15[Ls,Le],1.3ww,am)--
                              sfB(0.85[Ls,Le],.5ww,am)--sfB(0.85[Ls,Le],.5ww,ap)--cycle;
                   fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle;
-    elseif LN=bd_:erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 1.6bondgap;
+    ef nL=bd_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 1.6bondgap;
                   draw pA withpen penrazor rotated ap scaled bondgap Cp(nB);
     fi
     if (sw_numberB>=1)and(NN>=numberB_start)and(NN<=numberB_end):
         if     sw_numberB=2: nB:=NN-numberB_start+1;
-        elseif sw_numberB=3: if numberB_end<cntB: nB:=numberB_end-NN+1; else: nB:=cntB-NN+1; fi
+        ef sw_numberB=3: if numberB_end<cntB: nB:=numberB_end-NN+1; else: nB:=cntB-NN+1; fi
         else:                nB:=NN; fi
         draw_atom(NN,.5[posA[BP],posA[EP]],0,decimal(nB),1); fi
   fi
@@ -933,9 +939,9 @@
 def clipping(expr SA,SB,PA,PB,LEN)=
   pT:=PA--PB; nA:=0.6atom_wd/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,atom_wd*tbl_str_wd[SB],atom_wd,PB); 
+  ef SA=0: Ls:=PA; Le:=cut_off(pT,atom_wd*tbl_str_wd[SB],atom_wd,PB); 
      pA:=Ls--Le; pB:=Ls--nA[PB,PA]; pC:=0.1[PA,PB]--Le;
-  elseif SB=0: Ls:= cut_off(pT,atom_wd*tbl_str_wd[SA],atom_wd,PA); Le:=PB;
+  ef SB=0: Ls:= cut_off(pT,atom_wd*tbl_str_wd[SA],atom_wd,PA); Le:=PB;
      pA:=Ls--Le; pB:=nA[PA,PB]--Le; pC:=Ls--(0.1)[PB,PA];
   else: Ls:=cut_off(pT,atom_wd*tbl_str_wd[SA],atom_wd,PA);
         Le:=cut_off(pT,atom_wd*tbl_str_wd[SB],atom_wd,PB);
@@ -956,7 +962,11 @@
 for i=4,5,6:   for j=2 upto i-2: ?[i][j]:='((_fuse,i),(j,0)); endfor endfor
 for i=5,6,7,8: for j=11 upto 15: ?[i][j]:='((_fuse,i),(j,0)); endfor endfor
 %=================================================================================================
-H :='("H");C:='("C");N:='("N");O:='("O");F:='("F");S:='("S");P:='("P");I:='("I");
+H :='("H");C:='("C");N:='("N");O:='("O");S:='("S");P:='("P");
+H[1]:='("{H^+^}");H[-1]:='("{H^-^}");C[1]:='("{C^+^}");C[-1]:='("{C^-^}");
+O[1]:='("{O^+^}");O[-1]:='("{O^-^}");N[1]:='("{N^+^}");N[-1]:='("{N^-^}");
+S[1]:='("{S^+^}");S[-1]:='("{S^-^}");P[1]:='("{P^+^}");P[-1]:='("{P^-^}");
+F:='("F");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");
@@ -965,8 +975,8 @@
 %-------------------------------------------------------------------------------------------------
 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_}"); NH:='(N,(_postE,H));
-NMe:=N!:='(N,/Me); iPr:=Me!:='(/Me,60); tBu:='(/Me,/Me^60,60); SO:='(S,//O);
-SOO :='(S,//O^-35,//O^35);
+NMe:=N!:='(N,/Me); iPr:=Me!:='(/Me,60); tBu:='(/Me,/Me^60,60);
+SO:='(S,//O); SOO :='(S,//O^-35,//O^35);
 OMe:=O!:='(O,!); OEt:=O!2:='(O,!x2); OPr:=O!3:='(O,!x3); OiPr:=OMe!:='(O,!,iPr); 
 SMe:=S!:='(S,!); SEt:=S!2:='(S,!x2); SPr:=S!3:='(S,!x3); SiPr:=SMe!:='(S,!,iPr);
 COO:='(//O,!,O); COOMe:=COO!:='(COO,!); COOEt:=COO!2:='(COO,!x2); COOiPr:=COOMe!:='(COO,!,iPr);
@@ -996,19 +1006,22 @@
 enddef;
 %---------------------------------------------------------------
 char_size_set( 1)( 1)("CGHMNOQ");
-char_size_set(.9)( 1)("ABDEFIJKLPRSTUVWXYZ-+/><m");
-char_size_set(.7)( 1)(" ()[]0123456789nhj=_bdtfgpq");
-char_size_set(.7)(.7)("*");
-char_size_set(.5)( 1)("il");
-char_size_set(.7)(.8)("acekosuvxzwry");
+char_size_set(.9)( 1)("ABDEFIJKLPRSTUVWXYZ/><m");
+char_size_set(.7)( 1)(" ()[]0123456789nhj=_tfgpq");
+char_size_set(.7)(.7)("-+*");
+char_size_set(.45)(.95)("l");
+char_size_set(.75)(.8)("o");
+char_size_set(.8)(.8)("e");
+char_size_set(.7)(.8)("abdcksuvxzwry");
+char_size_set(.35)(.9)("i");
 char_size_set(.4)( 1)(".,:;'`^");
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_char(expr c,POS,WD,PEN,NUM)=
-save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,pathO,pathOh,ef,pos,ppcs,sbp,dw,dwh,dwv,cdw;
+def draw_char(expr CHR,POS,WD,PEN,NUM)=
+save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,pathO,pathOh,pos,dw,dwh,dwv,cdw,ppcs,sbp;
 path pathO,pathOh;
+string sC;
 pair Z[],pos;
 %-------------------------------------------------------------------------------------------------
-let ef=elseif;
 def ppcs expr n= pickup pencircle scaled n enddef;
 def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef;
 def dw expr p  = draw (p) shifted pos Cp(colorA[NUM]) enddef;
@@ -1018,9 +1031,9 @@
 def dwh expr p=draw (p) withpen penrazor rotated 90 scaled fP shifted pos Cp(colorA[NUM]) enddef;
 def cdw expr p=cutdraw (p) shifted pos Cp(colorA[NUM]) enddef;
 %-------------------------------------------------------------------------------------------------
-fP:=PEN; hP:=0.5fP;
-aW:=WD*tbl_char_wd[ASCII(c)]*(1-2ratio_atomgap_atom);
-aH:=WD*tbl_char_ht[ASCII(c)]*(1-2ratio_atomgap_atom);
+sC:=CHR; fP:=PEN; hP:=0.5fP;
+aW:=WD*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom);
+aH:=WD*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom);
 pos:=POS+(WD*ratio_atomgap_atom,WD*ratio_atomgap_atom);
 fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH;
 Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0);
@@ -1030,91 +1043,91 @@
 pathOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle;
 %-------------------------------------------------------------------------------------------------
 ppcs fP;
-if c="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06];
-ef c="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH)..
-          {left}Z19--Z03; dwv Z02--Z18;
-ef c="C": cdw sbp(.05,.95)pathO;
-ef c="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18;
-ef c="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--(fW,fH); dw Z09--Z10;
-ef c="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13;
-ef c="G": cdw sbp(.06,.97)pathO; dwh bot Z20-- bot Z17;
-ef c="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15;
-ef c="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH);
-ef c="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15;
-ef c="K": cdw Z02--Z18; cdw .5[.45[Z02,Z18],Z16]--Z05; cdw .45[Z02,Z18]--Z16;
-ef c="L": dwh Z04--Z01; dwv Z02--Z18;
-ef c="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05;
-ef c="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0);
-ef c="O": dw pathO;
-ef c="P": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
-ef c="Q": dw pathO; dw (.6aW,.4aH)--Z05;
-ef c="R": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
-          cdw Z05{up}..{left}(hW,.44aH);
-ef c="S": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
-ef c="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07;
-ef c="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15;
-ef c="V": dwvs(1.2) Z18--Z07--Z15;
-ef c="W": dwvs(1.08) Z18--(.25aW,0)--Z06--(.75aW,0)--Z15;
-ef c="X": dwvs(1.4) Z18..Z05; dwvs(1.4) Z02..Z15;
-ef c="Y": dwvs(1.2) Z18--Z20--Z15; dwv Z20--Z07;
-ef c="Z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04;
-ef c="a": dw Z19..Z10..Z14..Z09..cycle; dwv Z05--Z15;
-ef c="b": dw Z19..Z10..Z11..Z09..cycle; dwv Z02--(hP,1.2aH)
-ef c="c": cdw sbp(.06,.94)Z10..Z14..Z09..Z19..cycle;
-ef c="d": dw Z19..Z10..Z11..Z09..cycle; dwv Z05--(fW,1.2aH);
-ef c="e": cdw sbp(0,.92)Z10..Z14..Z09..Z19..cycle; dw Z10--Z09;
-ef c="f": cdw (hW,0)--(hW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17;
-ef c="g": dw Z19..Z10..Z11..Z09..cycle; cdw (Z15--Z21..(hW,0)..(.1aW,fP)) shifted (0,-.3aH);
-ef c="h": dw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--Z18;
-ef c="i": dwv Z07--(hW,.63aH); ppcs 1.4fP; dw Z14;
-ef c="j": dwv Z19--(hW,.63aH); dw Z19..(.25aW,-hP)..Z01; ppcs 1.4fP; dw Z14;
-ef c="k": dwv Z02--Z18; cdw .5[.45[Z02,Z18],Z16]--Z05; cdw .45[Z02,Z18]--Z16;
-ef c="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21;
-ef c="m": cdw Z02..(hP,.3aH){up}..(.28aW,.7fH)..{down}(hW,.3aH)..Z07;
-          cdw (hW,.3aH){up}..(.7aW,.7aH-hP)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--(hP,.7aH);
-ef c="n": cdw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--(hP,.7aH);
-ef c="o": dw Z19..Z10..Z14..Z09..cycle;
-ef c="p": dw Z19..Z10..Z11..Z09..cycle; dwv (hP,.7aH)--(hP,-.3aH);
-ef c="q": dw Z19..Z10..Z11..Z09..cycle; dwv (fW,.7aH)--(fW,-.3aH);
-ef c="r": cdw (sbp(.35,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-fP); dwv Z02--Z18;
-ef c="s": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
-ef c="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH);
-ef c="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05;
-ef c="v": dwv Z18--Z07--Z15;
-ef c="w": dwv Z18--(.25aW,0)--Z06--(.75aW,0)--Z15;
-ef c="x": dwvs(1.4) Z18--Z05; dwvs(1.4) Z15--Z02;
-ef c="y": dwvs(1.4) (Z18--Z20) shifted (0,-.3aH); dwvs(1.4) (Z15--Z02) shifted (0,-.3aH);
-ef c="z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04;
-ef c="0": dw Z09...Z14...Z10...Z19...cycle;
-ef c="1": dwv Z07--Z06--(hW-hP,fH)--(hW-hP,aH-2.5hP);
-ef c="2": cdw sbp(0,.71)(hP,1.3hP)--(fW,.55aH)..Z14..(hP,.5aH)..(hW,.27aH); dwh Z04--Z01;
-ef c="3": cdw sbp(0,.77)pathOh; cdw sbp(.23,.95)pathOh shifted (0,.5aH-hP); dwh (.3aW,hH)--Z20;
-ef c="4": dwh (0,.3aH)--(aW,.3aH); dwv (.7aW,0)--(.7aW,aH)--(1.2hP,.3aH+hP);
-ef c="5": dwh Z12--Z16; dwv Z13--(hP,.49aH);
-          cdw (.5hP,.15aH)..(.65aW,1.3hP)..(fW,.3aH)..(hW,.6aH)..(.6hP,.53aH);
-ef c="6": dw Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle; cdw (hP,.4aH)--Z06;
-ef c="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0);
-ef c="8": dw pathOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle;
-ef c="9": dw (Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW,.6aH)--Z07;
-ef c=" ":
-ef c=".": ppcs 1.4fP; dw Z19;
-ef c=",": dw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP); ppcs 1.4fP; dw Z19;
-ef c="'": dw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP); ppcs 1.4fP; dw Z14;
-ef c="`": dw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH); ppcs 1.4fP; dw (hW,fH-2fP);
-ef c=":": ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH);
-ef c=";": dw (hW+hP,.2aH)..(hW-hP,.2aH-2fP); ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH);
-ef c="(": dw Z19...Z09...Z14;
-ef c=")": dw Z19...Z10...Z14;
-ef c="[": dwv Z07--Z06; dwh Z14--(fW,fH); dwh Z19--Z21;
-ef c="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19;
-ef c="<": cdw Z01--Z17--Z12;
-ef c=">": cdw Z16--Z08--Z04;
-ef c="-": dwh Z09--Z10;
-ef c="_": dwh Z03--Z21;
-ef c="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH);
-ef c="/": dw (fW,fH)..Z01;
-ef c="+": dwv Z19--Z14; dwh Z09--Z10;
-ef c="*": dw Z19--Z14; dw Z09--Z10; dw (fW,fH)--Z01; dw Z13--Z21;
+if sC="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06];
+ef sC="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH)..
+           {left}Z19--Z03;  dwv Z02--Z18;
+ef sC="C": cdw sbp(.05,.95)pathO;
+ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18;
+ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--(fW,fH); dw Z09--Z10;
+ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13;
+ef sC="G": cdw sbp(.06,.97)pathO; dwh bot Z20-- bot Z17;
+ef sC="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15;
+ef sC="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH);
+ef sC="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15;
+ef sC="K": cdw Z02--Z18; cdw .5[.45[Z02,Z18],Z16]--Z05; cdw .45[Z02,Z18]--Z16;
+ef sC="L": dwh Z04--Z01; dwv Z02--Z18;
+ef sC="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05;
+ef sC="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0);
+ef sC="O": dw pathO;
+ef sC="P": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
+ef sC="Q": dw pathO; dw (.6aW,.4aH)--Z05;
+ef sC="R": dwv Z02--Z18; dw Z13--(.3aW,fH){right}..(fW,.7aH)..{left}(.3aW,.44aH)..(hP,.44aH);
+           cdw Z05{up}..{left}(hW,.44aH);
+ef sC="S": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef sC="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07;
+ef sC="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15;
+ef sC="V": dwvs(1.2) Z18--Z07--Z15;
+ef sC="W": dwvs(1.08) Z18--(.25aW,0)--Z06--(.75aW,0)--Z15;
+ef sC="X": dwvs(1.4) Z18..Z05; dwvs(1.4) Z02..Z15;
+ef sC="Y": dwvs(1.2) Z18--Z20--Z15; dwv Z20--Z07;
+ef sC="Z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04;
+ef sC="a": dw Z19..Z10..Z14..Z09..cycle; dwv Z05--Z15;
+ef sC="b": dw Z19..Z10..Z11..Z09..cycle; dwv Z02--(hP,1.3aH)
+ef sC="c": cdw sbp(.06,.94)Z10..Z14..Z09..Z19..cycle;
+ef sC="d": dw Z19..Z10..Z11..Z09..cycle; dwv Z05--(fW,1.3aH);
+ef sC="e": cdw sbp(0,.92)Z10..Z14..Z09..Z19..cycle; dw Z10--Z09;
+ef sC="f": cdw (hW,0)--(hW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17;
+ef sC="g": dw Z19..Z10..Z11..Z09..cycle; cdw (Z15--Z21..(hW,0)..(.1aW,fP)) shifted (0,-.3aH);
+ef sC="h": cdw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--Z18;
+ef sC="i": dwv Z07--(hW,.7aH); ppcs 1.4fP; dw Z14;
+ef sC="j": dwv Z19--(hW,.63aH); dw Z19..(.25aW,-hP)..Z01; ppcs 1.4fP; dw Z14;
+ef sC="k": dwv Z02--Z18; cdw .5[.45[Z02,Z18],Z16]--Z05; cdw .45[Z02,Z18]--Z16;
+ef sC="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21;
+ef sC="m": cdw Z02..(hP,.3aH){up}..(.28aW,.7fH)..{down}(hW,.3aH)..Z07;
+           cdw (hW,.3aH){up}..(.7aW,.7aH-hP)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--(hP,.7aH);
+ef sC="n": cdw Z02{up}..(hW,.8fH)..{down}(fW,.5aH)..Z05; dwv (hP,.4aH)--(hP,.8aH);
+ef sC="o": dw Z19..Z10..Z14..Z09..cycle;
+ef sC="p": dw Z19..Z10..Z11..Z09..cycle; dwv (hP,.7aH)--(hP,-.3aH);
+ef sC="q": dw Z19..Z10..Z11..Z09..cycle; dwv (fW,.7aH)--(fW,-.3aH);
+ef sC="r": cdw (sbp(.35,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-fP); dwv Z02--Z18;
+ef sC="s": cdw sbp(.05,.45)pathO; cdw sbp(.55,.95)pathO; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef sC="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH);
+ef sC="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05;
+ef sC="v": dwv Z18--Z07--Z15;
+ef sC="w": dwv Z18--(.25aW,0)--Z06--(.75aW,0)--Z15;
+ef sC="x": dwvs(1.4) Z18--Z05; dwvs(1.4) Z15--Z02;
+ef sC="y": dwvs(1.4) (Z18--Z20) shifted (0,-.3aH); dwvs(1.4) (Z15--Z02) shifted (0,-.3aH);
+ef sC="z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04;
+ef sC="0": dw Z09...Z14...Z10...Z19...cycle;
+ef sC="1": dwv Z07--Z06--(hW-hP,fH)--(hW-hP,aH-2.5hP);
+ef sC="2": cdw sbp(0,.71)(hP,1.3hP)--(fW,.55aH)..Z14..(hP,.5aH)..(hW,.27aH); dwh Z04--Z01;
+ef sC="3": cdw sbp(0,.77)pathOh; cdw sbp(.23,.95)pathOh shifted (0,.5aH-hP); dwh (.3aW,hH)--Z20;
+ef sC="4": dwh (0,.3aH)--(aW,.3aH); dwv (.7aW,0)--(.7aW,aH)--(1.2hP,.3aH+hP);
+ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.49aH); cdw (.5hP,.15aH)..(.65aW,1.3hP)..(fW,.3aH)..
+           (hW,.6aH)..(.6hP,.53aH);
+ef sC="6": dw Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle; cdw (hP,.4aH)--Z06;
+ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0);
+ef sC="8": dw pathOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle;
+ef sC="9": dw (Z19..(fW,.5fW)..(hW,fW)..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW,.6aH)--Z07;
+ef sC=" ":
+ef sC=".": ppcs 1.4fP; dw Z19;
+ef sC=",": dw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP); ppcs 1.4fP; dw Z19;
+ef sC="'": dw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP); ppcs 1.4fP; dw Z14;
+ef sC="`": dw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH); ppcs 1.4fP; dw (hW,fH-2fP);
+ef sC=":": ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH);
+ef sC=";": dw (hW+hP,.2aH)..(hW-hP,.2aH-2fP); ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH);
+ef sC="(": dw Z19...Z09...Z14;
+ef sC=")": dw Z19...Z10...Z14;
+ef sC="[": dwv Z07--Z06; dwh Z14--(fW,fH); dwh Z19--Z21;
+ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19;
+ef sC="<": cdw Z01--Z17--Z12;
+ef sC=">": cdw Z16--Z08--Z04;
+ef sC="-": dwh Z09--Z10;
+ef sC="_": dwh Z03--Z21;
+ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH);
+ef sC="/": dw (fW,fH)..Z01;
+ef sC="+": dwv Z19--Z14; dwh Z09--Z10;
+ef sC="*": dw Z19--Z14; dw Z09--Z10; dw (fW,fH)--Z01; dw Z13--Z21;
 else:
 fi
 enddef;
@@ -1131,7 +1144,12 @@
     warning("A"&decimal(a)&" ( "&fixed_l(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds");
   fi
 enddef;
-vardef stripP(expr a)=if length(a)=4: substring (1,3) of a else: a fi enddef;
+vardef stripP(expr a)=
+ if     length(a)=4: substring (1,3) of a
+ elseif length(a)=6: substring (1,2) of a
+ else: a
+ fi
+enddef;
 %==================================================================================================
 def STa(expr a,b,c)=
   tbl_atom_str[incr tbl_cnt]:=a; tbl_atom[tbl_cnt]:=0;
@@ -1158,9 +1176,13 @@
 STa("{Hg}",200.59,   201.97064340);     STa("I"   ,126.90447,126.9044719);
 STa("K"   ,39.0983,   38.9637064864);   STa("{Li}",6.941,      7.0160034366);
 STa("{Mg}",24.305,    23.985041697);    STa("{Mn}",54.938044, 54.93804391);
-STa("N"   ,14.0067,   14.00307400443);  STa("{Na}",22.98977,  22.9897692820);
-STa("{Ni}",58.693,    57.93534241);     STa("O"   ,15.9994,   15.99491461957);
-STa("P"   ,30.973762, 30.97376199842);  STa("S"   ,32.065,    31.9720711744);
+STa("N"   ,14.0067,   14.00307400443);  STa("{N^+^}",14.0067, 14.00307400443);
+STa("{N^-^}",14.0067, 14.00307400443);
+STa("{Na}",22.98977,  22.9897692820);   STa("{Ni}",58.693,    57.93534241);
+STa("O"   ,15.9994,   15.99491461957);  STa("{O^-^}",15.9994, 15.99491461957);
+STa("{O^p^}",15.9994, 15.99491461957);  STa("P"   ,30.973762, 30.97376199842);
+STa("S"   ,32.065,    31.9720711744);   STa("{S^p^}",32.065,    31.9720711744);
+STa("{S^m^}",32.065,    31.9720711744);
 STa("{Se}",78.971,    79.9165218);      STa("{Si}",28.0855,   27.97692653465);
 STa("{Sn}",118.71,   119.90220163);     STa("{Ti}",47.867,    47.94794198);
 STa("{Zn}",65.409,    63.92914201);
@@ -1190,10 +1212,10 @@
   for i=1 upto cntA:
     knownA:=bond_cnt:=0;
     for j=1 upto cntB:
-      if     (lineB[j]>=dl)and(lineB[j]<=dm): bondC[j]:=2;
-      elseif lineB[j]=tm:                     bondC[j]:=3;
-      elseif (lineB[j]=vf)or(lineB[j]=vb):    bondC[j]:=0;
-      else:                                   bondC[j]:=1;
+      if (lineB[j]>=dl)and(lineB[j]<=dm): bondC[j]:=2;
+      ef lineB[j]=tm:                     bondC[j]:=3;
+      ef (lineB[j]=vf)or(lineB[j]=vb):    bondC[j]:=0;
+      else:                               bondC[j]:=1;
       fi
       if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi
     endfor
@@ -1202,19 +1224,19 @@
     if (strD[numS[i]]="C")and(bond_cnt<4):
       hideH[i]:=4-bond_cnt; cnt_hide_H:=cnt_hide_H+hideH[i]; else: hideH[i]:=0;
     fi
-    if     strD[numS[i]]="C":       bond_check(i)(1,2,3,4);
-    elseif strD[numS[i]]="N":       bond_check(i)(3,5);
-    elseif strD[numS[i]]="H":       bond_check(i)(1);
-    elseif strD[numS[i]]="O":       bond_check(i)(2);
-    elseif strD[numS[i]]="S":       bond_check(i)(2,4,6);
-    elseif strD[numS[i]]="P":       bond_check(i)(5);
-    elseif strD[numS[i]]="OH":      bond_check(i)(1);
-    elseif strD[numS[i]]="COOH":    bond_check(i)(1);
-    elseif strD[numS[i]]="CN":      bond_check(i)(1);
-    elseif strD[numS[i]]="N{H_2_}": bond_check(i)(1);
-    elseif strD[numS[i]]="F":       bond_check(i)(1);
-    elseif strD[numS[i]]="{Cl}":    bond_check(i)(1);
-    elseif strD[numS[i]]="{Br}":    bond_check(i)(1);
+    if strD[numS[i]]="C":       bond_check(i)(1,2,3,4);
+    ef strD[numS[i]]="N":       bond_check(i)(3,5);
+    ef strD[numS[i]]="H":       bond_check(i)(1);
+    ef strD[numS[i]]="O":       bond_check(i)(2);
+    ef strD[numS[i]]="S":       bond_check(i)(2,4,6);
+    ef strD[numS[i]]="P":       bond_check(i)(5);
+    ef strD[numS[i]]="OH":      bond_check(i)(1);
+    ef strD[numS[i]]="COOH":    bond_check(i)(1);
+    ef strD[numS[i]]="CN":      bond_check(i)(1);
+    ef strD[numS[i]]="N{H_2_}": bond_check(i)(1);
+    ef strD[numS[i]]="F":       bond_check(i)(1);
+    ef strD[numS[i]]="{Cl}":    bond_check(i)(1);
+    ef strD[numS[i]]="{Br}":    bond_check(i)(1);
     fi
     for j=1 upto tbl_cnt:
       if strD[numS[i]]=tbl_atom_str[j]:
@@ -1234,9 +1256,9 @@
   endfor
   cal_MI:=substring (0,10) of decimal(MI_num);
   cal_MW:=substring (0,8)  of decimal(MW_num);
-  if sw_auxout=1:    proc_auxfile_out;   fi
+  if sw_aux_out=1:    proc_auxfile_out;   fi
   if sw_report=1:    proc_report_out; fi
-  if sw_MOLout=1:    proc_MOLfile_out;    fi
+  if sw_mol_out>=1:   proc_mol_out;    fi
   endgroup
 enddef;
 %==================================================================================================
@@ -1270,11 +1292,13 @@
   message " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)&
           " Ring count="&fdr(3)(cntB-cntA+1)&" Hide H count="&fdr(3)(cnt_hide_H);
   message "------------------------------------------------------------------";
-  message "< NO. >(  x axis   ,   y axis   )< atom  >< bond >< hide_H >";
+  message "< NO. >(  x axis   ,   y axis   )< atom  >< bond >< hideH >< chg >";
   for i=1 upto cntA:
     message " A"&fdl(4)(i)&" ("&fdr(10)(round_auto(xpart(posA[i])/bond_len))&" , "&
             fdr(10)(round_auto(ypart(posA[i])/bond_len))&" )  "&fixed_l(8)(strD[numS[i]])&
-            "  "&fdr(3)(Bcnt[i]) if hideH[i]>0: &fdr(8)(hideH[i]) fi;
+            "  "&fdr(3)(Bcnt[i])
+            if hideH[i]>0: &fdr(8)(hideH[i]) else: &"        " fi
+            if chgA[i]<>0: &fdr(8)(chgA[i]) fi;
   endfor
   message "------------------------------------------------------------------";
   message "< NO. ><  bond   (sdt)><angle + (  +-  )><length (   pt   )>";
@@ -1314,20 +1338,60 @@
   message "==================================================================";
 enddef;
 %==================================================================================================
-def proc_MOLfile_out=
+def proc_mol_out=
+  save chg_cnt,chg_atm,chg_chg;
+  numeric chg_atm,chg_chg;
+  chg_cnt:=0;
+  %-V2000------------------------------------------------------------------------------------------
+  if sw_mol_out=1:
   mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".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])/bond_len)& fdr(10)(ypart(posA[i])/bond_len)&
-           fdr(10)(0)&" "&fixed_l(2)(stripP(strD[numS[i]]))&"  0  0  0  0"; endfor
+  for i=1 upto cntA:
+    printf fdr(10)(xpart(posA[i])/bond_len)& fdr(10)(ypart(posA[i])/bond_len)&
+           fdr(10)(0)&" "&fixed_l(2)(stripP(strD[numS[i]]))&"  0  0  0  0";
+    if chgA[i]<>0: chg_atm[incr chg_cnt]:=i; chg_chg[chg_cnt]:=chgA[i]; fi
+  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
+    ef lineB[i]=tm: nA:=3;
+    ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1;
+    ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6;
+    ef 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
+  if chg_cnt>0:
+    printf "M  CHG"&fdr(3)(chg_cnt)
+    for i=1 upto chg_cnt: &fdr(4)(chg_atm[i])&fdr(4)(chg_chg[i]) endfor;
+  fi
   printf "M  END";
+  %-V3000-----------------------------------------------------------------------------------------
+  elseif sw_mol_out=2:
+  mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".mol";
+  printf ""; printf "  -MCFtoMOL- "&fixed_l(20)(info[1]); printf "";
+  printf "  0  0  0     0  0     999 V3000";
+  printf "M  V30 BEGIN CTAB";
+  printf "M  V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0";
+  printf "M  V30 BEGIN ATOM";
+  for i=1 upto cntA:
+     printf "M  V30 "&decimal(i)&" "&stripP(strD[numS[i]])&" "&
+            decimal(xpart(posA[i])/bond_len)&" "&decimal(ypart(posA[i])/bond_len)&" 0 0"
+            if chgA[i]<>0: &" CHG="&decimal(chgA[i]) fi;
+  endfor
+  printf "M  V30 END ATOM";
+  printf "M  V30 BEGIN BOND";
+  for i=1 upto cntB: if lineB[i]<>0:
+    if     (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2;
+    ef lineB[i]=tm: nA:=3;
+    ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1;
+    ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6;
+    ef lineB[i]=wv: nB:=4;  else: nA:=1; nB:=0; fi
+    printf "M  V30 "&decimal(i)&" "&decimal(nA)&" "&decimal(sB[i])&" "&decimal(eB[i]); fi endfor
+  printf "M  V30 END BOND";
+  printf "M  V30 END CTAB";
+  printf "M  END";
+  fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" fi enddef;



More information about the tex-live-commits mailing list