texlive[76139] Master/texmf-dist: mcf2graph (24aug25)

commits+karl at tug.org commits+karl at tug.org
Sun Aug 24 22:51:28 CEST 2025


Revision: 76139
          https://tug.org/svn/texlive?view=revision&revision=76139
Author:   karl
Date:     2025-08-24 22:51:28 +0200 (Sun, 24 Aug 2025)
Log Message:
-----------
mcf2graph (24aug25)

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.mp
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
    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_to_graph.cmd
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/template_lib.mcf
    trunk/Master/texmf-dist/metapost/mcf2graph/main_lib.mcf
    trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mp

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,6 +1,15 @@
 *******************************************************************************
- Changelog of mcf2graph software package          by Akira Yamaji 2025-07-27
+ Changelog of mcf2graph software package          by Akira Yamaji 2025-08-24
 *******************************************************************************
+[ver. 5.26  / 2025-08-24]
+  -improve mcf_to_graph.cmd
+   output formats can be selected
+  -update mcf2graph.mp
+   fix bug in mol file output
+   delete eps file output
+  -update MCF manual,example
+   remove unnecessary package,option
+
 [ver. 5.25  / 2025-07-27]
   -improve atom,bond adress check
   -update mcf2graph.mp

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,7 +1,7 @@
 ********************************************************************************
  mcf2graph  : Convert Molecular Coding Format to graphics with MetaPost
  Author     : Akira Yamaji
- version    : 5.25 2025-07-27
+ version    : 5.26 2025-08-24
  E-mail     : mcf2graph at gmail.com
  Located at : http://www.ctan.org/pkg/mcf2graph
 ********************************************************************************
@@ -11,7 +11,7 @@
  chemical structure diagrams.
  This Coding is named from programing technique
  such as operator,array,scope,macro,adressing,etc.
- mcf2graph convert from MCF to SVG,PNG,EPS,MOL file.
+ mcf2graph convert from MCF to SVG,PNG,MOL file.
  It is also able to calculate molecular weight,exact mass,molecular formula.
 
 2. The distribution of software
@@ -20,9 +20,9 @@
  ( 3) mcf_to_graph.cmd   Batch file for compile mcf library file
                          drag and drop library file on this batch
                           >mcf_to_graph main_lib.mcf
-                           create svg(default) in ./main_lib
+                           create graphic files in ./main_lib-(format)
                           >mcf_to_graph template_lib.mcf
-                           create svg(default) in ./template_lib
+                           create graphic files in ./template_lib-(format)
  ( 4) mcf2graph.mp       Main macro of Metapost
  ( 5) main_lib.mcf       MCF library file
  ( 6) template_lib.mcf   Template library file
@@ -46,18 +46,16 @@
 
 4. Use mcf2graph with MetaPost
      -command line-
- (1) >mcf_to_graph        filename.mp  => output svg(default),png,mol,report
+ (1) >mcf_to_graph        filename.mp  => output svg,png,mol,report
  (2) >mpost               filename.mp  => output svg file
  (3) >mpost -s ahangle=1  filename.mp  => output png file (600dpi)
- (4) >mpost -s ahangle=11 filename.mp  => output png file (1200dpi)
- (5) >mpost -s ahangle=2  filename.mp  => output eps(.mps) file
- (6) >mpost -s ahangle=3  filename.mp  => output eps(.eps) file
- (7) >mpost -s ahlength=5 filename.mp  => output mol file(V2000)
- (8) >mpost -s ahlength=6 filename.mp  => output mol file(V3000)
- (9) >mpost -s ahlength=7 filename.mp  => output report file
+ (4) >mpost -s ahangle=2  filename.mp  => output png file (1200dpi)
+ (5) >mpost -s ahlength=5 filename.mp  => output mol file(V2000)
+ (6) >mpost -s ahlength=6 filename.mp  => output mol file(V3000)
+ (7) >mpost -s ahlength=7 filename.mp  => output report file
 
 5. License
- mcf2graph ver 5.25   Copyright (c) 2013-2025   Akira Yamaji
+ mcf2graph ver 5.26   Copyright (c) 2013-2025   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

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,17 +1,16 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% MCF metapost souce file example                 by Akira Yamaji  2025.07.27
+% MCF metapost souce file example                 by Akira Yamaji  2025.08.24
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %------------------------------------------------------------------------------
 %%%%ahlength:=3;  %%% output figure(expanded)
-%%%%ahlength:=5;  %%% output MOL(V2000) ** max 500files
-%%%%ahlength:=6;  %%% output MOL(V3000) ** max 500files
+%%%%ahlength:=5;  %%% output MOL(V2000)
+%%%%ahlength:=6;  %%% output MOL(V3000)
 %%%%ahlength:=7;  %%% output report
 %------------------------------------------------------------------------------
-input mcf2graph;  %%% it must be version 5.25
-message "* mcf_template 2025.07.27";
-message "";
+input mcf2graph;  %%% it must be version 5.26
+message "* mcf_template 2025.08.24"; message "";
 %------------------------------------------------------------------------------
-%%%%sw_output:=Fig+Report;
+%%%%sw_output:=Report;
 fsize:=(30mm,20mm);
 max_blength:=4mm;
 %%%%sw_numbering:=Atom+Bond;

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

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,13 +1,12 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of MCF   Typeset with LuaLaTeX(luamplib)   by A.Yamaji   2025.07.27
+% Example of MCF   Typeset with LuaLaTeX(luamplib)   by A.Yamaji   2025.08.24
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% ** mcf2graph.mf must be version 5.25
+% ** mcf2graph.mf must be version 5.26
 % ** use mcf_library.mcf
 % ** typeset by LuaLaTeX(luamplib)
 %-------------------------------------------------------------------------
 \documentclass{article}
 \usepackage{luamplib}
-\usepackage[T1]{fontenc}
 \mplibcodeinherit{enable}
 \mplibnumbersystem{double}
 \mpliblegacybehavior{disabled}

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	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,14 +1,13 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  Molecular Coding Format manual                by  Akira Yamaji 2025.07.27
+%  Molecular Coding Format manual                by  Akira Yamaji 2025.08.24
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% ** mcf2graph.mf must be version 5.25
+% ** mcf2graph.mf must be version 5.26
 % ** use main_lib.mcf
 % ** typeset by LuaLaTeX(luamplib)
 %----------------------------------------------------------------------------
 \documentclass[a4paper]{article}
-\usepackage{textcomp,verbatim}%
-\usepackage[luatex]{graphicx}
-\usepackage[luatex]{hyperref}
+\usepackage{verbatim}
+\usepackage{hyperref}
 \usepackage{makeidx}
 \usepackage{luamplib}
 \mplibnumbersystem{double}
@@ -37,7 +36,7 @@
 \author{Akira Yamaji}
 \date{\today}
 \maketitle
-\begin{center} mcf2graph version 5.25 \end{center}
+\begin{center} mcf2graph version 5.26 \end{center}
 \begin{center} Located at http://www.ctan.org/pkg/mcf2graph \end{center}
 \begin{center} Suggestion or request mail to: mcf2graph at gmail.com \end{center}
 %-----------------------------------------------------------------------------
@@ -141,7 +140,7 @@
 represent chemical structure diagrams.
 This Coding is named from programing technique
 such as operator, array, scope, macro, adressing, etc.
-mcf2graph convert from MCF to PNG, SVG, EPS, MOL file.
+mcf2graph convert from MCF to PNG, SVG, MOL file.
 It is also able to calculate molecular weight,
 exact mass, molecular formula.
 %-----------------------------------------------------------------------------
@@ -364,7 +363,6 @@
 \index{"!dr}%
 \begin{verbatim}
 (Double,triple)
-a~type : ~~type,a
 dm  : double middle
 dl  : double left side
 dr  : double right side
@@ -511,7 +509,7 @@
 
 #1.25,-30~wf_r,30~bd_r`1,30~wb_r,
  120,O,30,&1,##,#.5,6^$90:/!OH,
- 1^$270'2^$90'3^$270'4^$90:/OH,
+ 1^$270'2^$90'3^$270'4^$90:/OH
 \end{verbatim}
 %-----------------------------------------
 \begin{mplibcode}
@@ -519,7 +517,7 @@
   #(75mm,16mm);
   @(0.05,0.5)
   drawm("#1.25,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##,"&
-         "#.5,1^$270'2^$90'3^$270'4^$90:/OH,6^$90:/!OH");
+        "#.5,1^$270'2^$90'3^$270'4^$90:/OH,6^$90:/!OH");
   defaultscale:=0.6;
   @(0.5,0.7)  drawm("0~wf_r") ++(label.lft("wf_r:",A1);)
   @(0.5,0.2)  drawm("0~wf")   ++(label.lft("wf:",A1);)
@@ -1216,7 +1214,7 @@
 endfigm
 \end{mplibcode}
 %-----------------------------------------------------------------------------
-\subsubsection{Move position [ @{ }]}
+\subsubsection{Move position [ @() ]}
 \index{@}%
 \begin{verbatim}
 @(x'y) : Move l*(x,y) from current position

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_to_graph.cmd
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_to_graph.cmd	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_to_graph.cmd	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,20 +1,41 @@
 @echo off
-rem  Batch file for compile MCF  2025.06.08
+rem  Batch file for compile MCF  2025.08.24
 rem  rename batch name by purpose
 rem  <drag and drop library files on this batch>
 if not %~x1 == .mcf goto end
-echo input mcf2graph; default_library:="%~n1.mcf"; > temp_soc.mp
-echo loadm("EXA<>-"); allm; bye >> temp_soc.mp
-mkdir %~n1
-rem  *** mcf_to_svg  create svg in ./filename (default)
-mpost -output-directory=./%~n1 ./temp_soc.mp
-rem  *** mcf_to_png  create png in ./filename
-rem  mpost -output-directory=./%~n1 -s ahangle=1 ./temp_soc.mp
-rem  *** mcf_to_mol2k  create MOL(V2000) in ./filename
-rem  mpost -output-directory=./%~n1 -s ahlength=5 ./temp_soc.mp
-rem  *** mcf_to_mol3k  create MOL(V3000) in ./filename
-rem  mpost -output-directory=./%~n1 -s ahlength=6 ./temp_soc.mp
-rem  *** mcf_to_report  create report
-rem  mpost -numbersystem=double -s ahlength=7 ./temp_soc.mp
+echo **** Select output format / Library file [%~n1] ****
+choice /c 1234560 /n /m "1:svg 2:png(600) 3:png(1200) 4:MOL(v2k) 5:MOL(v3k) 6:report 0:cancel"
+if %errorlevel% == 7 goto end
+echo input mcf2graph; default_library:="%~n1.mcf"; loadm("EXA<>-"); allm; bye> temp_soc.mp
+if %errorlevel% == 1 goto svg
+if %errorlevel% == 2 goto png600
+if %errorlevel% == 3 goto png1200
+if %errorlevel% == 4 goto molv2k
+if %errorlevel% == 5 goto molv3k
+if %errorlevel% == 6 goto report
+:svg
+mkdir %~n1-svg
+mpost -output-directory=./%~n1-svg ./temp_soc.mp
+goto skip
+:png600
+mkdir %~n1-pn0600
+mpost -output-directory=./%~n1-pn0600 -s ahangle=1 ./temp_soc.mp
+goto skip
+:png1200
+mkdir %~n1-pn1200
+mpost -output-directory=./%~n1-pn1200 -s ahangle=2 ./temp_soc.mp
+goto skip
+:molv2k
+mkdir %~n1-molv2k
+mpost -output-directory=./%~n1-molv2k -s ahlength=5 ./temp_soc.mp
+goto skip
+:molv3k
+mkdir %~n1-molv3k
+mpost -output-directory=./%~n1-molv3k -s ahlength=6 ./temp_soc.mp
+goto skip
+:report
+mkdir %~n1-report
+mpost -output-directory=./%~n1-report -numbersystem=double -s ahlength=7 ./temp_soc.mp
+:skip
 del temp_soc.mp
 :end
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/template_lib.mcf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/template_lib.mcf	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/template_lib.mcf	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf template file    mcf_template.mcf   by Akira Yamaji   2025.07.27
+% mcf template file    mcf_template.mcf   by Akira Yamaji   2025.08.24
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  must use version 5.25
+%  must use version 5.26
 %  tag1:var1;tag2:var2;tag3:var3 .....
 %  first character of line "%" comment out
 %  first character of line ":"  start MCF

Modified: trunk/Master/texmf-dist/metapost/mcf2graph/main_lib.mcf
===================================================================
--- trunk/Master/texmf-dist/metapost/mcf2graph/main_lib.mcf	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/metapost/mcf2graph/main_lib.mcf	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% molecular library file    main_lib.mcf   by Akira Yamaji   2025.07.27
+% molecular library file    main_lib.mcf   by Akira Yamaji   2025.08.24
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  must use version 5.25
+%  must use version 5.26
 %  tag1:var1;tag2:var2;tag3:var3 .....
 %  first character of line "%" comment out
 %  first character of line ":"  start MCF
@@ -218,7 +218,7 @@
 %------------------------------------------------------------------------------
 CAT:biological;EN:Fumarate;MW:116.07;EXA:1
 :
-<30,COOH,!,!d,!COOH
+<30,COOH,!!d,!COOH
 ;
 %------------------------------------------------------------------------------
 CAT:biological;EN:Malate;MW:134.09;EXA:1
@@ -354,7 +354,7 @@
 %------------------------------------------------------------------------------
 CAT:biological;EN:Allicin;MW:162.28;EXA:1
 :
-<-30,!d,!2,S?O,!,S,!2,!d
+<-30,!d,!2,S?O,!S,!2,!d
 ;
 %------------------------------------------------------------------------------
 CAT:biological;EN:Benzoic acid;MW:122.12;EXA:1
@@ -708,7 +708,7 @@
 %------------------------------------------------------------------------------
 CAT:biological;EN:Piperine;MW:285.343;EXA:1
 :
-<30,Ph,-1=?5,-1'-3:O, at 4,!,!d,!,!d,!?O!,?6,-6:N
+<30,Ph,-1=?5,-1'-3:O, at 4,!!d,!!d,!?O!,?6,-6:N
 ;
 %------------------------------------------------------------------------------
 CAT:biological;EN:Febrifugine;MW:301.34;EXA:1
@@ -774,7 +774,7 @@
 CAT:biological;EN:Pyrethrin I;MW:328.452;EXA:1
 :
 <30,?3,3^35'*3^-35:?w, at 1,!w,!d,?!,
- @2,!z,?O!,O,-36~zb,|,?5,-2=dl,-1:?,-3:?O, at -2,!5,-1'-3=dl
+ @2,!z,?O!O,-36~zb,|,?5,-2=dl,-1:?,-3:?O, at -2,!5,-1'-3=dl
 ;
 %------------------------------------------------------------------------------
 CAT:biological;EN:Oseltamivir;MW:312.40;EXA:1
@@ -1377,7 +1377,7 @@
 %------------------------------------------------------------------------------
 CAT:antibiotics;EN:Cefalonium;MW:458.5107;EXA:1
 :
-<45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1:?O^15, at 5,!z,?O!,O,n_^40,
+<45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1:?O^15, at 5,!z,?O!O,n_^40,
  @4,15~wf,NH!,?O!2,?5,-1'-3=dl,-4:S, at 6,!2,|,Ph,1:N,1:p_^180,4:/?O!'NH2
 ;
 %------------------------------------------------------------------------------
@@ -1385,7 +1385,7 @@
 :
 <45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1^15:?O,5:/*COOH,
  @4,15~wf,NH!,?O!2,?5,-2'-4=dl,-1'-2'-3'-5:N,
- @6,!2,S,!,?5,-3'-5=dl,-1:S,-2:?,-3'-4:N
+ @6,!2,S!,?5,-3'-5=dl,-1:S,-2:?,-3'-4:N
 ;
 %------------------------------------------------------------------------------
 CAT:antibiotics;EN:Cefoperazone;MW:645.67;EXA:9
@@ -1392,12 +1392,12 @@
 :
 <45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1:?O^15,5:/*COOH,
  @4,15~wf,NH!,?O!,/*Ph'(4:/OH),!NH!,?O!,?6,-3'-6:N,-4'-5:?O,-3:/!,
- @6,!2,S,!,?5,-3'-5=dl,-1:?,-1'-2'-3'-4:N,
+ @6,!2,S!,?5,-3'-5=dl,-1:?,-1'-2'-3'-4:N,
 ;
 %------------------------------------------------------------------------------
 CAT:antibiotics;EN:Cefquinome;MW:528.6;EXA:1
 :
-<45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1:?O^15, at 5,!z,?O!,O,n_^40,
+<45,?4,2=?6,6=db,2:N,8:S,3^45:/*H,1:?O^15, at 5,!z,?O!O,n_^40,
  @4,15~wf,NH!,?O!,//N!'O!,!,?5,-2'-5=dl,-3:S,-1:N,-2:/NH2,
  @6,!2,Ph,-2=?6,-10:N,-10:p_^180
 ;
@@ -1607,7 +1607,7 @@
  #1, at -2,!,NH,60,-60,60~dl,60,60~dl,-60,
  60,-60,60,60,-60,60,-53,66,-53~dl,66`1.2,O,##,&$8,
  ||,9'15:?O,16:?,20'24^30:?w,21'23:/*OH,8^60'22'26^30:?z,
- -4:/*O!, at -6,-30,O!,?O!,@$11,!,!d,N!,|,?6,1:N,4:N?
+ -4:/*O!, at -6,-30,O!,?O!,@$11,!!d,N!,|,?6,1:N,4:N?
 ;
 %==============================================================================
 CAT:pesticide;EN:BHC;MW:290.83;EXA:1
@@ -1643,7 +1643,7 @@
 CAT:pesticide;EN:Acrinathrin;MW:541.45;EXA:1
 :
 <-30,?3,2^-35'*2^35:?w,
- @1,!,!d,!?O,!O!,/?F?F!F,!,?F?F!F, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
+ @1,!!d,!?O,!O!,/?F?F!F,!,?F?F!F, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Azaconazole;MW:300.139;EXA:1
@@ -1678,12 +1678,12 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Iprobenfos;MW:288.34;EXA:1
 :
-<30,!?!,O!,P,?O,/O'!?!^170,!,S,!2,Ph
+<30,!?!,O!,P,?O,/O'!?!^170,!S,!2,Ph
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Uninnazole-P;MW:291.779;EXA:1
 :
-<30,Ph,6:/Cl, at 3,!,!d,!,/OH,!,??!, at 8,!,|,?5,2'4=dl,1'2'4:N
+<30,Ph,6:/Cl, at 3,!!d,!,/OH,!,??!, at 8,!,|,?5,2'4=dl,1'2'4:N
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Esprocarb;MW:265.4;EXA:1
@@ -1769,12 +1769,12 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Chlorpropham;MW:213.7;EXA:1
 :
-<30,Ph,6:/Cl, at 4,!NH!,?O!,O,!?!
+<30,Ph,6:/Cl, at 4,!NH!,?O!O,!?!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Chlorbenside;MW:269.183;EXA:1
 :
-<30,Ph, at 3,!,S,!2,Ph,6'12:/Cl
+<30,Ph, at 3,!S,!2,Ph,6'12:/Cl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Chlorobenzilate;MW:325.2;EXA:1
@@ -1815,7 +1815,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Thiuram;MW:240.43;EXA:1
 :
-<30,!,N?!,?S,!,S,!,S,!,?S,!,N?!
+<30,!,N?!,?S,!S,!,S!,?S,!,N?!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Probenazole;MW:223.25;EXA:1
@@ -1872,7 +1872,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Diethofencarb;MW:267.3;EXA:1
 :
-<30,Ph, at 4,!NH!,?O!,O,!?!,1'6:/O!2
+<30,Ph, at 4,!NH!,?O!O,!?!,1'6:/O!2
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Diclofop-methyl;MW:341.2;EXA:1
@@ -1882,12 +1882,12 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Cyhalothrin;MW:449.86;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,/?F?F!F,!Cl, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,/?F?F!F,!Cl, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Cyhalofop-Buthyl;MW:357.381;EXA:1
 :
-<30,Ph,1:/CN,4:/F, at 3,!O!,Ph, at -3,!O,!?!,?O!,O,!4
+<30,Ph,1:/CN,4:/F, at 3,!O!,Ph, at -3,!O,!?!,?O!O,!4
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Diphenamid;MW:239.3;EXA:1
@@ -1898,7 +1898,7 @@
 CAT:pesticide;EN:Cyfluthrin;MW:434.3;EXA:1
 :
 <-30,?3,2^-35'*2^35:?w,
- @1,!,!d,/Cl,!Cl, at 3,!?O,!O!,/CN,!Ph,-3:/F,-4:/O!'Ph>rl
+ @1,!!d,?Cl!Cl, at 3,!?O,!O!,/CN,!Ph,-3:/F,-4:/O!'Ph>rl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Diflufenican;MW:394.29;EXA:1
@@ -1913,7 +1913,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Cypermethrin;MW:416.3;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,/Cl,!Cl, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,?Cl!Cl, at 3,!?O,!O!,/CN,!Ph,-4:/O!'Ph>rl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Simazine;MW:201.7;EXA:1
@@ -2011,7 +2011,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Tefluthrin;MW:418.736;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,/?F?F!F,!Cl, at 3,!?O!,O!2,|,Ph,2'3'5'6:/F,4:?
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,/?F?F!F,!Cl, at 3,!?O!,O!2,|,Ph,2'3'5'6:/F,4:?
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Terbutryn;MW:241.4;EXA:1
@@ -2036,7 +2036,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Triallate;MW:304.7;EXA:1
 :
-<-30,!?!,N,/?!,!?O!,S!2,/Cl,!d,/Cl,!Cl
+<-30,!?!,N,/?!,!?O!,S!2,/Cl,!d,?Cl!Cl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Dimethylvinphos;MW:331.52;EXA:1
@@ -2086,7 +2086,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Bifenthrin;MW:422.88;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,/Cl,!,?F?F!F, at 3,!?O,!O!,-60,Ph,-1:?,-2:/Ph
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,/Cl,!,?F?F!F, at 3,!?O,!O!,-60,Ph,-1:?,-2:/Ph
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Pyraflufen-ethyl;MW:413.174;EXA:1
@@ -2097,7 +2097,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Pyridaben;MW:364.9;EXA:1
 :
-<30,?6,2'4=dl,5'6:N,6:/??!,1:?O,2:/Cl, at -4,!,S,!2,Ph,-3:/??!
+<30,?6,2'4=dl,5'6:N,6:/??!,1:?O,2:/Cl, at -4,!S,!2,Ph,-3:/??!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Pyridaphenthion;MW:340.34;EXA:1
@@ -2187,7 +2187,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Phenthoate;MW:320.358;EXA:1
 :
-<-30,!O!,P,?S,/O!^160,!,S,!,/Ph,!?O!,O!2
+<-30,!O!,P,?S,/O!^160,!S,!,/Ph,!?O!,O!2
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Prothyophos;MW:329.18;EXA:1
@@ -2207,7 +2207,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Bromophos;MW:365.99;EXA:1
 :
-<-30,!O!, P,?S,/O!^160,!O!,|,Ph,3'6:/Cl,4:/Br
+<-30,!O!,P,?S,/O!^160,!O!,|,Ph,3'6:/Cl,4:/Br
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Phosalone;MW:367.80;EXA:1
@@ -2217,7 +2217,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Phosmet;MW:317.32;EXA:1
 :
-<-30,!O!,P,?S,/O!^160,!,S,!2,|,?5,3=Ph2,1:N,2'5:?O
+<-30,!O!,P,?S,/O!^160,!S,!2,|,?5,3=Ph2,1:N,2'5:?O
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Phorate;MW:260.4;EXA:1
@@ -2252,7 +2252,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Cadusafos;MW:270.386;EXA:1
 :
-<-30,!2,?!,S!,P,?O,/O!2^160>rl,!,S,!?,!2
+<-30,!2,?!,S!,P,?O,/O!2^160>rl,!S,!?,!2
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Dimethoate;MW:229.25;EXA:1
@@ -2262,7 +2262,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Tribufos;MW:314.50;EXA:1
 :
-<30,!4,S,!,P,?O,/S'!4^160>rl,!,S,!4
+<30,!4,S!,P,?O,/S'!4^160>rl,!S,!4
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Tolclofos-methyl;MW:301.13;EXA:1
@@ -2292,7 +2292,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Anilofos;MW:367.9;EXA:1
 :
-<-30,!O!,P,?S,/O!^160,!,S,!2,?O!,N,/?!,!Ph,-3:/Cl
+<-30,!O!,P,?S,/O!^160,!S,!2,?O!,N,/?!,!Ph,-3:/Cl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Isazofos;MW:313.74;EXA:1
@@ -2302,17 +2302,17 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Ethion;MW:384.46;EXA:1
 :
-<30,!2,O!,P,?S,/O!2^160>rl,!,S,!2,S,!,P,?S,/O!2^200>lr,!,O!2
+<30,!2,O!,P,?S,/O!2^160>rl,!S,!2,S!,P,?S,/O!2^200>lr,!,O!2
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Edifenphos;MW:310.37;EXA:1
 :
-<30,Ph, at 3,!O!,P,?S,/O!2>rl^160,!,S,!Ph
+<30,Ph, at 3,!O!,P,?S,/O!2>rl^160,!S,!Ph
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Ethoprophos;MW:242.33;EXA:1
 :
-<-30,!3,S,!,P,?O,/S!3^160>rl,!,O!2
+<-30,!3,S!,P,?O,/S!3^160>rl,!,O!2
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Ethrimfos;MW:292.29;EXA:1
@@ -2472,7 +2472,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Bromopropylate;MW:428.12;EXA:1
 :
-<30,Ph, at 3,!2,Ph,6'11:/Br,7:/OH^-45, at 7,30,?O!,O,-60,?!
+<30,Ph, at 3,!2,Ph,6'11:/Br,7:/OH^-45, at 7,30,?O!O,-60,?!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Hexaconazole;MW:314.2;EXA:1
@@ -2492,7 +2492,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Benoxacor;MW:260.1;EXA:1
 :
-<90,Ph,3=?6,7:N,10:O,8:?, at 7,!?O!,/Cl,!Cl
+<90,Ph,3=?6,7:N,10:O,8:?, at 7,!?O!,?Cl!Cl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Heptachlor;MW:373.35;EXA:1
@@ -2502,7 +2502,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Permethrin;MW:391.30;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,/Cl,!Cl, at 3,!?O!,O!2,Ph,-4:/O!'Ph>rl
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,?Cl!Cl, at 3,!?O!,O!2,Ph,-4:/O!'Ph>rl
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Penconazole;MW:284.184;EXA:1
@@ -2567,7 +2567,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Resmethrin;MW:338.4;EXA:1
 :
-<-30,?3,2^-35'*2^35:?w, at 1,!,!d,?!,3:/?O!'O!2,|,?5,3'5=dl,2:O,3:/!Ph
+<-30,?3,2^-35'*2^35:?w, at 1,!!d,?!,3:/?O!'O!2,|,?5,3'5=dl,2:O,3:/!Ph
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Lenacil;MW:234.3;EXA:1
@@ -2582,7 +2582,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Paraquat;MW:257.16;EXA:1
 :
-Ph, at 4,!Ph,1'10:N?,1:p_^-90,10:p_^90, at 1,@(0'1.2),Cl,n_^15, at 10,@(0'1.2),Cl,n_^15
+Ph, at 4,!Ph,1'10:N?,1^-90'10^90:p_, at 1,@(0'1.2),Cl,n_^15, at 10,@(0'1.2),Cl,n_^15
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Oxine-Copper;MW:351.852;EXA:1
@@ -2598,7 +2598,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Uniconazole-P;MW:291.779;EXA:1
 :
-<30,Ph,6:/Cl, at 3,!,!d,!,/OH,!??!, at 8,!,|,?5,2'4=dl,1'2'4:N
+<30,Ph,6:/Cl, at 3,!!d,!,/OH,!??!, at 8,!,|,?5,2'4=dl,1'2'4:N
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Dimesulfazet;MW:336.33;EXA:1
@@ -2623,7 +2623,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Aldicarb;MW:190.3;EXA:1
 :
-<-30,!,S,!??,!,!d,N,!O!,?O,!NH!
+<-30,!S,!??,!!d,N,!O!,?O,!NH!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Aldoxycarb;MW:222.3;EXA:1
@@ -2638,7 +2638,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Iprovalicarb;MW:320.4;EXA:1
 :
-<30,Ph,6:?, at 3,!,!?!,NH!,?O!,??,!NH!,?O!,O,!?!
+<30,Ph,6:?, at 3,!,!?!,NH!,?O!,??,!NH!,?O!O,!?!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Imazalil;MW:297.2;EXA:1
@@ -2689,7 +2689,7 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Cloquintocet-methyl;MW:335.83;EXA:1
 :
-<90,Ph,4=Ph,2:N,10:/Cl, at 7,!,O!2,?O!,O,!?,!5
+<90,Ph,4=Ph,2:N,10:/Cl, at 7,!,O!2,?O!O,!?,!5
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Clotianidin;MW:249.673;EXA:1
@@ -2855,12 +2855,12 @@
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Fenpyroximate;MW:421.49;EXA:1
 :
-<-6,?5,3'5=db,1'2:N,2'5:?, at 3,-15,O,!Ph, at 4,!,!d,N!,O!2,Ph, at -3,!?O,!O,!4
+<-6,?5,3'5=db,1'2:N,2'5:?, at 3,-15,O,!Ph, at 4,!!d,N!,O!2,Ph, at -3,!?O,!O,!4
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Phenmedipham;MW:300.32;EXA:1
 :
-<30,Ph,5:?, at 3,!NH!,?O!,O,!Ph,-4:/NH!'?O!'O!
+<30,Ph,5:?, at 3,!NH!,?O!O,!Ph,-4:/NH!'?O!'O!
 ;
 %------------------------------------------------------------------------------
 CAT:pesticide;EN:Butafenacil;MW:474.817;EXA:1
@@ -3150,17 +3150,17 @@
 %------------------------------------------------------------------------------
 CAT:antibacterial;EN:Chlorsulon;MW:380.66;EXA:1
 :
-<30,Ph,6:/NH2,1'3:/S?O?O'!NH2, at 4,!,/Cl,60~dl,/Cl,!Cl
+<30,Ph,6:/NH2,1'3:/S?O?O'!NH2, at 4,!,/Cl,60~dl,?Cl!Cl
 ;
 %------------------------------------------------------------------------------
 CAT:antibacterial;EN:Florfenicol;MW:358.21;EXA:1
 :
-<30,Ph,1:/S?O?O!, at 4,!,/OH,!,/!F,!NH!,?O!,/Cl,!Cl
+<30,Ph,1:/S?O?O!, at 4,!,/OH,!,/!F,!NH!,?O!,?Cl!Cl
 ;
 %------------------------------------------------------------------------------
 CAT:antibacterial;EN:Thiamphenicol;MW:356.22;EXA:1
 :
-<30,Ph,1:/S?O?O!, at 4,!,/OH,!,/!OH,!`1.1,NH,!`1.1,?O!,/Cl,!Cl
+<30,Ph,1:/S?O?O!, at 4,!,/OH,!,/!OH,!`1.1,NH,!`1.1,?O!,?Cl!Cl
 ;
 %------------------------------------------------------------------------------
 CAT:antibacterial;EN:Oxadiargyl;MW:341.19;EXA:1
@@ -3180,7 +3180,7 @@
 %******************************************************************************
 CAT:antibiotics;EN:Vancomycin;MW:1449.25;EXA:9
 :
-<-30,#1,!12,1'3'12=zf,7=wf,60,60,Ph, at -3,!O!,Ph, at -4,!O!,Ph, at -3,!,&1,
+<-30,!12`1,1'3'12=zf,7=wf,#1,60,60,Ph, at -3,!O!,Ph, at -4,!O!,Ph, at -3,!,&1,
  @7,&26,@$1,60,60,NH,60,-60,Ph, at -1,!Ph, at -2,&4,##,
  36'3^40'6'9'12:?O,2'5'8'11:NH,1'4^180'*7^-60'*10^60'*14^60'35^-60:*/H,
  41'43'46:/OH,14'*35:*/OH,17'34^15:/Cl,38^180:*/COOH,

Modified: trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mp
===================================================================
--- trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mp	2025-08-24 20:51:15 UTC (rev 76138)
+++ trunk/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mp	2025-08-24 20:51:28 UTC (rev 76139)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 5.25    Copyright (c) 2013-2025   Akira Yamaji
+% mcf2graph ver 5.26    Copyright (c) 2013-2025   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,
@@ -22,18 +22,17 @@
 % This package is located at : http://www.ctan.org/pkg/mcf2graph
 % Suggestion or request mail to : mcf2graph at gmail.com 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-message "* This is mcf2graph ver 5.25  2025.07.27";
+message "* This is mcf2graph ver 5.26  2025.08.24";
 tracingstats:=1; prologues:=3;
 %-------------------------------------------------------------------------------------------------
-newinternal string EN_,tempc,temps,blanks,line_s,atoms,forbiddens,firstc,file_input,file_output;
+newinternal string EN_,tempc,temps,blanks,lines,atoms,forbiddens,firstc,file_input,file_output;
 newinternal numeric nA,nB,nC,nD,nE,nL,nN,nP,nR,nS,nU,nX,nY,pX,pY,pB,pcode_int;
 numeric save_num[],pcode_x[][],pcode_y[][],param_e[][],pcode_cnt[],tbl_atom[],tbl_group[][],
-        tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],at_char[],mc_indent[],op_indent[],
-        ex_indent[],ad_indent[],unit_lines[],info[],lenw[],mcode_x[],mcode_y[],mcode_b[],
-        error_type[],error_adr[],error_e[],error_b[];
+        tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],at_char[],mc_indent[],
+        unit_lines[],info[],lenw[],mcode_x[],mcode_y[],mcode_b[],error_type[],error_e[],error_b[];
 string  row[][],save_str[],tbl_atoms[],str_tbl[],arg_s[],mc[],ex[],ad[],op[],tag[],rw[],error_s[],
-        warning_s[],lib_tag[][],lib_val[][],block_s[],mc,ex,ad,op,aux_delimiter,default_library,
-        EN,LN,FM,MW,MI,CAT,JN,CAS,USE,LOGP,EXA,EXB,default_temp_file,mpfont,atomfont,numberfont;
+        warning_s[],lib_tag[][],lib_val[][],block_s[],mc,op,ex,ad,default_library,No,EN,LN,FM,MW,
+        MI,CAT,JN,CAS,USE,EXA,default_temp_file,mpfont,atomfont,numberfont;
 pair    save_pair[],msize,mposition,fsize,fmargin;
 boolean bA;
 color   rgb_black,rgb_gray,rgb_silver,rgb_white,rgb_blue,rgb_navy,rgb_teal,rgb_green,rgb_lime,
@@ -48,8 +47,7 @@
 fig_num:=str_cnt:=tbl_cnt:=mangle:=sw_frame:=sw_trimming:=sw_ext_all:=sw_omit:=0;
 sw_output:=sw_numbering:=tag_cnt:=rw_cnt:=pcode_all:=MW_n:=f_expand:=0;
 %-------------------------------------------------------------------------------------------------
-for s="No","EN","JN","LN","MW","MI","FM","CAT","CAS","USE","LOGP","EXA","EXB":
- tag[incr tag_cnt]:=s; endfor
+for s="No","EN","JN","LN","MW","MI","FM","CAT","CAS","USE","EXA": tag[incr tag_cnt]:=s; endfor
 Fig:=1; Mcode:=2; Info:=4; Report:=8; MOL2k:=16; MOL3k:=32; Atom:=2; Bond:=4; All:=8;
 Group:=8; Mol:=16; Outside:=1; Inside:=2; Bothside:=Outside+Inside;
 %-------------------------------------------------------------------------------------------------
@@ -63,17 +61,15 @@
 mpfont:="uhvr8r"; atomfont:=numberfont:="draw"; defaultfont:=mpfont; let ef=elseif;
 %--default ahangle=45---------------------------------------------------------------------
 if ahangle=1:  outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi)
-ef ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
-ef ahangle=2:  outputformat:="eps";                   % eps format(.eps)
-ef ahangle=3:  outputformat:="eps";                   % eps format(.mps)
+ef ahangle=2:  outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
 ef ahangle=45: outputformat:="svg";                   % svg format  *default
 fi
 %--default ahlength=4---------------------------------------------------------------------
-if ahlength=3:  sw_output:=Fig;   f_expand:=1;       % output figure(expanded)
-ef ahlength=4:  sw_output:=Fig;                      % output figure *default
-ef ahlength=5:  sw_output:=MOL2k; f_expand:=1;       % output MOL(V2000) ** max 500files
-ef ahlength=6:  sw_output:=MOL3k; f_expand:=1;       % output MOL(V3000) ** max 500files
-ef ahlength=7:  sw_output:=Report;                   % output report
+if ahlength=3: sw_output:=Fig;   f_expand:=1;         % output figure(expanded)
+ef ahlength=4: sw_output:=Fig;                        % output figure *default
+ef ahlength=5: sw_output:=MOL2k; f_expand:=1;         % output MOL(V2000)
+ef ahlength=6: sw_output:=MOL3k; f_expand:=1;         % output MOL(V3000)
+ef ahlength=7: sw_output:=Report;                     % output report
 fi
 %-- default bboxmargin=2------------------------------------------------------------------
 if bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(EN,(0,0));)
@@ -82,10 +78,9 @@
   label.rt(EN&" / "&MW&" / "&decimal(MW_n-scantokens(MW)),(0,0));)
 fi
 %--default outputtemplate:="%j-%3c."&"svg"------------------------------------------------
-if outputformat="svg":                 outputtemplate:="s%3c-%{EN_}.svg";
-ef outputformat="png":                 outputtemplate:="p%3c-%{EN_}.png";
-ef (outputformat="eps")and(ahangle=3): outputtemplate:="%j-%3c.mps";
-else:                                  outputtemplate:="%j-%3c."&outputformat;
+if outputformat="svg":                 outputtemplate:="%3c-%{EN_}.svg";
+ef outputformat="png": if hppp=0.12:   outputtemplate:="p06_%3c-%{EN_}.png";
+                       ef hppp=0.06:   outputtemplate:="p12_%3c-%{EN_}.png"; fi
 fi
 %-----------------------------------------------------------------------------------------
 message "* jobname="&jobname;
@@ -92,10 +87,6 @@
 message "* numbersystem="&numbersystem;
 message "* outputformat="&outputformat;
 message "* outputtemplate="&outputtemplate;
-if ahlength=5: message "* output MOL file(V2000)"; message "* "&jobname&"-nnn-"&"EN"&".mol";
-ef ahlength=6: message "* output MOL file(V3000)"; message "* "&jobname&"-nnn-"&"EN"&".mol";
-ef ahlength=7: message "* output report file"; message "* file name="&jobname&"-report.txt";
-fi
 clearit;
 %-------------------------------------------------------------------------------------------------
 ratio_chain_ring:=0.66; ratio_atom_bond:=0.36; ratio_thickness_bond:=0.012; ratio_char_atom:=0.12;
@@ -123,13 +114,11 @@
 vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blanks)&s enddef;
 vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blanks) enddef;
 vardef fdr(expr n)(expr s)=
-  if length(decimal(s))>n: substring (0,n) of decimal(s) else: fsr(n)(decimal(s)) fi
-enddef;
+  if length(decimal(s))>n: substring (0,n) of decimal(s) else: fsr(n)(decimal(s)) fi enddef;
 vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef;
 %-------------------------------------------------------------------------------------------------
-aux_delimiter:=";"; blanks:= "            "; forbiddens:=" &()[]{}^=;!'+,`~";
+blanks:= "            "; forbiddens:=" &()[]{}^=;!'+,`~";
 for s="*/*","/*","*/","//","##","||":rw[incr rw_cnt]:=s; lenw[rw_cnt]:=length(s); endfor
-PLS:=ASCII("+"); MIS:=ASCII("-");
 %=================================================================================================
 pcode_emb_start:=1001;     % 1001 => 1900   for embedded pcode (max 900)
 pcode_emi_start:=1901;     % 1901 => 2000   for embedded internal pcode (max 100)
@@ -138,12 +127,12 @@
 %-------------------------------------------------------------------------------------------------
 def def_com(expr n)(text tx)= nA:=n; forsuffixes list=tx:: list:=nA; nA:=nA+1; endfor enddef;
 def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_tmp_line,_tmp_rot,
-  _tmp_env,_tmp_len,_set_len,_get_len,_ring,_rot_ang,_adj_ang,_chg_env,_set_colorA,_set_colorB,
+  _tmp_env,_tmp_len,_chg_len,_get_len,_set_len,_rot_ang,_adj_ang,_chg_env,_set_colorA,_set_colorB,
   _group_si,_group_dm,_group_wf,_group_zf,_set_adrA,_set_adrB,_mk_bond,_set_atom,_auto_ang,
-  _chg_atom,_fuse,_fuse_ext,_size_atom,_numeric,_numeric_inv,_numeric_rot,_jump_at,_set_add,
-  _chg_add,_nop,_mark,_moff,_term,_end,_group_s,_group_e,_rest,_charge,_chg_len,hz,vt,si,dl,
-  dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,wf_r,wb_r,bd_r,arc_lb,arc_br,arc_lbr,
-  arc_ltr,si_,wf_,wb_,zf_,zb_,wv_,bd_);
+  _set_charge,_add_charge,_chg_atom,_fuse,_fuse_ext,_size_atom,_numeric,_numeric_rot,_jump_at,
+  _nop,_mark,_moff,_term,_end,_group_s,_group_e,_rest,_ring,_chain,
+  hz,vt,si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,wf_r,wb_r,bd_r,
+  arc_lb,arc_br,arc_lbr,arc_ltr,si_,wf_,wb_,zf_,zb_,wv_,bd_);
 %-------------------------------------------------------------------------------------------------
 def parameter_list=
   sw_numbering,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_omit,ratio_atom_bond,
@@ -183,25 +172,25 @@
 def beginfigm=
   begingroup
   save '',`,``,//,@,#,#@,##,|=,|<,**,++,f_ext,blen,ext,add,ang_br,fw_n,bw_n,adr_n,at_cmm,
-    bond_cntA,warning_cnt,hideH,hideH_cnt,cntM,cntA,cntB,
-    minX,minY,maxX,maxY,posA,posM,lineB,sB,eB,angB,angA,lenB,angX,numS,sumA,bond_num,wdM,htM,
-    chargeA,addA,add_rot,mol_pic,color_list,no,mw,mi,fm,group_num,f_line,f_type,ay,bx,by,pcnt;
+    bond_cntA,warning_cnt,hideH,hideH_cnt,cntM,cntA,cntB,minX,minY,maxX,maxY,posA,posM,lineB,
+    sB,eB,angB,angA,lenB,angX,numS,sumA,bond_num,wdM,htM,chargeA,addA,add_rot,mol_pic,color_list,
+    no,mw,mi,fm,group_num,f_line,f_type,ay,bx,by,pcnt;
   numeric hideH[],lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],strA[],sumA[],bond_num[],
     wdM[],htM[],chargeA[],addA[],add_rot[];
   pair posA[],posM[][];
-  string mi,no,fm,mw;
+  string mi,fm,mw;
   picture mol_pic[];
   color color_list[];
   %-----------------------------------------------------------------------------------------------
   store_par(parameter_list);
-  no:=mc:=ex:=ad:=op:=mw:=mi:=fm:=""; EN:=JN:=LN:=MW:=FM:=MI:=CAS:=CAT:=EXA:=EXB:=USE:=LOGP:="-";
+  mc:=ex:=ad:=op:=mw:=mi:=fm:=""; No:=EN:=JN:=LN:=MW:=FM:=MI:=CAS:=CAT:=EXA:=USE:="-";
   f_ext:=cntM:=mc_row:=ex_row:=ad_row:=op_row:=param_int:=warning_cnt:=error_cnt:=0;
   let ext=ext_to_fig; let add=add_to_molecule; let ++=add_to_molecule; let **=ext_to_fig;
-  def '' = define_parts enddef; def // = drawm enddef;
-  def @ expr p = mposition:=p; enddef; def # expr p = fsize:=p; enddef;
-  def #@ expr p = fmargin:=p; enddef; def `(expr s) = define_group_string(s)() enddef;
-  def `` = define_group_string enddef; def ## expr p = msize:=p; enddef;
-  def |=(expr n) = blength:=n; enddef; def |<(expr n) = max_blength:=n; enddef;
+  def '' = define_parts enddef; def // = drawm enddef; def @ expr p = mposition:=p; enddef;
+  def # expr p = fsize:=p; enddef; def #@ expr p = fmargin:=p; enddef;
+  def `(expr s) = define_group_string(s)() enddef; def `` = define_group_string enddef;
+  def ## expr p = msize:=p; enddef; def |=(expr n) = blength:=n; enddef;
+  def |<(expr n) = max_blength:=n; enddef;
   pcode_num:=pcode_usr_start; pcode_int:=pcode_int_start; fig_num:=fig_num+1;
   mol_pic[0]:=nullpicture;
 enddef;
@@ -260,7 +249,7 @@
   endfor
 enddef;
 %=================================================================================================
-def getm(expr a)=if string a: read_unit(get_adr("EN",a)) ef numeric a: read_unit(a) fi enddef;
+def getm(expr a)=if string a:read_unit(get_adr("EN",a)) ef numeric a:read_unit(a) fi enddef;
 %-------------------------------------------------------------------------------------------------
 def read_unit(expr n)=
   f_line:=0;
@@ -269,17 +258,16 @@
       for j=1 upto tag_cnt: if lib_tag[n][i]=tag[j]: scantokens(tag[j]):=lib_val[n][i]; fi endfor
     endfor
     for i=1 upto unit_lines[n]:
-      line_s:=row[n][i]; firstc:=substring(0,1) of line_s; exitif firstc=";";
-      if firstc=":": f_line:=1; ef firstc="=": f_line:=2;
-      ef firstc="*": f_line:=3; ef firstc="+": f_line:=4;
-      ef firstc="%":
+      lines:=row[n][i]; firstc:=substring(0,1) of lines; exitif firstc=";";
+      if firstc=":": f_line:=1; ef firstc="=": f_line:=2; ef firstc="*": f_line:=3;
+      ef firstc="+": f_line:=4; ef firstc="%":
       else:
-        fw_n:=scan_char(" ",line_s,1,1)-1;
-        line_s:=substring(fw_n,length(line_s)) of line_s;
-        if f_line=1: mc_indent[incr mc_row]:=fw_n; mc[mc_row]:=line_s; mc:=mc&line_s;
-        ef f_line=2: op_indent[incr op_row]:=fw_n; op[op_row]:=line_s; op:=op&line_s;
-        ef f_line=3: ex_indent[incr ex_row]:=fw_n; ex[ex_row]:=line_s; ex:=ex&line_s;
-        ef f_line=4: ad_indent[incr ad_row]:=fw_n; ad[ad_row]:=line_s; ad:=ad&line_s;
+        fw_n:=scan_char(" ",lines,1,1)-1;
+        lines:=substring(fw_n,length(lines)) of lines;
+        if f_line=1: mc_indent[incr mc_row]:=fw_n; mc[mc_row]:=lines; mc:=mc&lines;
+        ef f_line=2: op[incr op_row]:=lines; op:=op&lines;
+        ef f_line=3: ex[incr ex_row]:=lines; ex:=ex&lines;
+        ef f_line=4: ad[incr ad_row]:=lines; ad:=ad&lines;
         fi
       fi
     endfor
@@ -327,59 +315,47 @@
 primarydef a fuse__ b = pcode_extend(_fuse_ext,a,b,2) enddef;
 primarydef a fuse___ b = pcode_extend(_fuse_ext,a,b,3) enddef;
 primarydef a fuse____ b = pcode_extend(_fuse_ext,a,b,4) enddef;
-tertiarydef a bop_equ b = 
-  if (known a)and(known b):: if numeric a:: set_bond(a,b) else:: _nop fi else:: _nop fi
-enddef;
-tertiarydef a bop_col b =
-  if (known a)and(known b):: if numeric a:: set_atom(a,b) else:: _nop fi else:: _nop fi
-enddef;
+tertiarydef a bop_equ b = if (known a)and(known b)::
+  if (numeric a)or(pair a):: set_bond(a,b) else:: _nop fi else:: _nop fi enddef;
+tertiarydef a bop_col b =  if (known a)and(known b)::
+  if (numeric a)or(pair a):: set_atom(a,b) else:: _nop fi else:: _nop fi enddef;
 tertiarydef a bop_hat b = if (known a)and(numeric b):: (_tmp_rot,b),a   else:: _nop fi enddef;
 tertiarydef a bop_til b = if (known a)and(numeric b):: (_tmp_line,b),a  else:: _nop fi enddef;
 tertiarydef a bop_lth b =
   if (known a)and(numeric b)::
-    if numeric a:: if (a>=!2)and(a<=!20) :: b for i==1 upto a-!2+1:: ,b endfor
-                   else:: (_tmp_env,b),a fi
+    if numeric a:: if (a>=!2)and(a<=!20)::b for i==0 upto a-!2::,b endfor else::(_tmp_env,b),a fi
     else:: (_tmp_env,b),a fi
   else:: _nop fi
 enddef;
-tertiarydef a bop_bqu b =
-  if (known a)and(numeric b)::
-    if numeric a:: if ((a>=!2)and(a<=!20))or((a>=?3)and(a<=?20)):: (_chg_len,b),a,(_chg_len,_end)
-                   else:: (_tmp_len,b),a fi
-    else:: (_tmp_len,b),a fi
-  else:: _nop fi
-enddef;
+tertiarydef a bop_bqu b = if (known a)and(numeric b):: (_tmp_len,b),a else:: _nop fi enddef;
 %-------------------------------------------------------------------------------------------------
-def chg_length primary n = if numeric n:: (_chg_len,n) else:: _nop fi enddef;
+def set_length primary n = if numeric n:: (_chg_len,n) else:: _nop fi enddef;
 def rot_angle  primary n = if numeric n:: (_rot_ang,n) else:: _nop fi enddef;
 def cyc_atom   primary n = if numeric n:: (_cyc,n)     else:: _nop fi enddef;
-def jump_atom secondary n = if n>=pcode_int_start:: move_pos(n) else::(_jp_atom,n) fi enddef;
-def jump_atom_abs secondary n = if numeric n::
-  if n>=pcode_int_start::(_jp_atom,$1),move_pos(n) else::(_jp_atom,$n) fi else:: _nop fi enddef;
+def jump_atom secondary n = if n>=pcode_int_start:: move_pos(n) else:: (_jp_atom,n) fi enddef;
+def jump_atom_abs secondary n = if n>=pcode_int_start:: @.$1,move_pos(n) else:: @.$n fi enddef;
 def group_si secondary n = if numeric n:: (_group_si,n) else:: _nop fi enddef;
 def group_dm secondary n = if numeric n:: (_group_dm,n) else:: _nop fi enddef;
 def group_wf secondary n = if numeric n:: (_group_wf,n) else:: _nop fi enddef;
 def group_zf secondary n = if numeric n:: (_group_zf,n) else:: _nop fi enddef;
-def group_wv secondary n = if numeric n:: /n~wv         else:: _nop fi enddef;
 %-------------------------------------------------------------------------------------------------
 def redefine_tokens=
-  save /,//,*,/*,*/,*/*,~,^,`,',<,>,:,=,@,@$,$,$$,&,&$,#,##,|,||,--,---,----,_,
-       CP,CA,MB,CB,CC,DL;
+  save /,//,*,/*,*/,*/*,~,^,`,',<,>,:,=,@,@$,$,$$,&,&$,#,##,|,||,--,---,----,_,CP,CA,MB,CB,CC,DL;
   | :=mark_adress; || :=reset_adress; ##:=reset_length; let ' == bop_qut; let = ==bop_equ;
   let : ==bop_col; let ^ ==bop_hat; let ~ ==bop_til; let > ==bop_lth; let ` ==bop_bqu;
-  let -- ==fuse__; let --- ==fuse___; let ---- ==fuse____; let @$ ==jump_atom_abs;
-  let < ==rot_angle; let @ ==jump_atom; let & ==cyc_atom; let # ==chg_length; let / ==group_si;
-  let // ==group_dm; let */ ==group_wf; let /* ==group_zf; let */* ==group_wv;
-  let CP == pcode_add; let CA ==pcode_add_adrA; let CB ==pcode_add_adrB; let _ ==from_until;
+  let -- ==fuse__; let --- ==fuse___; let ---- ==fuse____; let < ==rot_angle; let @ ==jump_atom;
+  let & ==cyc_atom; let # ==set_length; let / ==group_si; let // ==group_dm; let */ ==group_wf;
+  let /* ==group_zf; let CP == pcode_add; let CA ==pcode_add_adrA; let CB ==pcode_add_adrB;
+  let _ ==from_until; def */* expr p == /p~wv enddef;
   def DL(expr p)==CP(_set_adrB,p) CP(_set_line,dl) enddef; def MB(expr p)==CP(_mk_bond,p) enddef;
   def CC(expr p)==CP(_com,p) enddef; def $ ==abs_adress enddef; def &$ ==&.$ enddef;
-  def * primary p == (_numeric_inv,p) enddef; def $$ == read_adr enddef;
+  def $$ == read_adr enddef; def * primary n == (n+0.1) enddef; def @$ ==jump_atom_abs enddef;
 enddef;
 %=================================================================================================
 def read_mcf_string(expr s)=
   begingroup
-  save lens,at_colequ,at_binop,prs_cnt,pre_cnt,fus_cnt;
-  temps:=s; lens:=length(temps);
+  save len_block,at_colequ,at_binop,prs_cnt,pre_cnt,fus_cnt;
+  temps:=s; len_block:=length(temps);
   block_cnt:=split_str(temps,",")(block_s);
   block_s[incr block_cnt]:="(_com,_term)";
   %------------------------------------------------------------------------------
@@ -386,12 +362,11 @@
   for i=1 upto block_cnt:
     error_type[i]:=check_block(block_s[i]);
     if error_type[i]=0:
-      at_colequ:=binop_cnt:=prs_cnt:=pre_cnt:=qut_cnt:=fus_cnt:=0;
-      lens:=length(block_s[i]);
-      for j=1 upto lens:
+      at_colequ:=binop_cnt:=prs_cnt:=pre_cnt:=qut_cnt:=0;
+      len_block:=length(block_s[i]);
+      for j=1 upto len_block:
         tempc:=substring(j-1,j) of block_s[i];
-        if substring(j-1,j+1) of block_s[i]="--": fus_cnt:=fus_cnt+1;
-        ef tempc="'": qut_cnt:=qut_cnt+1;
+        if tempc="'": qut_cnt:=qut_cnt+1; 
         ef tempc="(": prs_cnt:=prs_cnt+1;
         ef tempc=")": pre_cnt:=pre_cnt+1;
         ef (tempc=":")or(tempc="="): at_colequ:=j;
@@ -398,16 +373,19 @@
         fi
         exitif at_colequ>0;
       endfor
-      if ((at_colequ>0)and(qut_cnt>0)and(prs_cnt=pre_cnt))or(fus_cnt>0):
-        binop_cnt:=fus_cnt;
+      if (at_colequ>0)and(qut_cnt>0)and(prs_cnt=pre_cnt):
+        binop_cnt:=0;
         for j=1 upto at_colequ-1:
           tempc:=substring(j-1,j) of block_s[i];
-          if (tempc="^")or(tempc="`")or(tempc="~")or(tempc=">")or(tempc="_"): binop_cnt:=1; fi
+          temps:=substring(j-1,j+1) of block_s[i];
+          if (tempc="^")or(tempc="`")or(tempc="~")or(tempc=">")or(tempc="_")or(temps="--"):
+            binop_cnt:=1;
+          fi
           exitif binop_cnt>0;
         endfor
         if binop_cnt>0:
           block_s[i]:="$$("&substring(0,at_colequ-1) of block_s[i]&")"&
-                            substring(at_colequ-1,lens) of block_s[i];
+                            substring(at_colequ-1,len_block) of block_s[i];
         fi
       fi
     else:  message_error(i,error_type[i]);
@@ -424,7 +402,7 @@
                          mcode_b[mcode_cnt]:=i;
           ef numeric list::
             if list==_nop:: message_error(i,6);
-            ef list>=pcode_emb_start:: expand_pcode_b(list,i);
+            ef list>=pcode_emb_start:: expand_pcode(list,i);
             else:: mcode_x[Incr mcode_cnt]:=_mk_bond; mcode_y[mcode_cnt]:=list;
                    mcode_b[mcode_cnt]:=i;
             fi
@@ -455,9 +433,9 @@
   endgroup
 enddef;
 %-------------------------------------------------------------------------------------------------
-def expand_pcode_b(expr a,b)=
+def expand_pcode(expr a,b)=
   for i==1 upto pcode_cnt[a]::
-    if pcode_x[a][i]>=pcode_emb_start:: expand_pcode_b(pcode_x[a][i],b);
+    if pcode_x[a][i]>=pcode_emb_start:: expand_pcode(pcode_x[a][i],b);
     else:: mcode_x[Incr mcode_cnt]:=pcode_x[a][i]; mcode_y[mcode_cnt]:=pcode_y[a][i];
            mcode_b[mcode_cnt]:=b;
     fi
@@ -464,15 +442,6 @@
   endfor
 enddef;
 %-------------------------------------------------------------------------------------------------
-def expand_pcode(expr a)=
-  for i==1 upto pcode_cnt[a]::
-    if pcode_x[a][i]>=pcode_emb_start:: expand_pcode(pcode_x[a][i]);
-    else:: mcode_x[Incr mcode_cnt]:=pcode_x[a][i]; mcode_y[mcode_cnt]:=pcode_y[a][i];
-           mcode_b[mcode_cnt]:=0;
-    fi
-  endfor
-enddef;
-%-------------------------------------------------------------------------------------------------
 vardef read_adr(text t)=
   save ';
   let ' == , ;
@@ -498,8 +467,7 @@
       pcode_x[pcode_int][2]:=_numeric; pcode_y[pcode_int][2]:=b; pcode_cnt[pcode_int]:=2;
     ef (a>=pcode_int_start)and(b LT pcode_int_start)::
       if b>=pcode_emb_start:: pcode_x[a][Incr pcode_cnt[a]]:=b;
-      else:: pcode_x[a][Incr pcode_cnt[a]]:=_numeric; pcode_y[a][pcode_cnt[a]]:=b;
-      fi
+      else:: pcode_x[a][Incr pcode_cnt[a]]:=_numeric; pcode_y[a][pcode_cnt[a]]:=b; fi
     else:: pcode_x[Incr pcode_int][1]:=a; pcode_x[pcode_int][2]:=b; pcode_cnt[pcode_int]:=2;
     fi
   ef (numeric a)and(pair b)::
@@ -526,15 +494,16 @@
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def fuse_ring(expr a,b) =
-  CP(_jp_bond,a) CP(_rot_ang,180) CP(_get_len,a) for i==1 upto b-2:: MB(360 DIV b) endfor
+  CP(_jp_bond,a) CP(_rot_ang,180) CP(_get_len,a) for i==3 upto b:: MB(360 DIV b) endfor
   CP(_set_len,_end) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 def fuse_ring_bonds(expr s,e,b,c) =
   CP(_jp_bond,s) CP(_rot_ang,180)
-  if b==6:: CP(_set_len,1) for i==1 upto c-1:: MB(60) endfor
+  if b==6:: CP(_set_len,1) for i==2 upto c:: MB(60) endfor
   ef b==5:: if c==2:: CP(_set_len,1.25) MB(80) ef c==3:: CP(_set_len,1.1) MB(78) MB(72) fi
-  ef b==4:: CP(_set_len,1.225) MB(105) fi
+  ef b==4:: CP(_set_len,1.225) MB(105)
+  fi
   CP(_set_len,_end) if e<=0:: CP(_cyc_eB,e-c+1) else:: CP(_cyc_eB,e) fi
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -541,7 +510,8 @@
 def fuse_ring_size(expr a,b,c) =
   CP(_jp_bond,a) CP(_rot_ang,180) CP(_set_len,c)
   if b==5:: MB(72-((10c-9) MUL 1.5)) MB(63+10c) MB(63+10c)
-  ef b==6:: MB(68-10c) for i==1 upto 3:: MB(60+(5c-4)) endfor fi
+  ef b==6:: MB(68-10c) for i==1 upto 3:: MB(60+(5c-4)) endfor
+  fi
   CP(_set_len,_end) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi
 enddef;
 %=================================================================================================
@@ -551,12 +521,7 @@
     if (b>=si)and(b<=bd_)::
       if a>=pcode_int_start::
         for i==1 upto pcode_cnt[a]::
-          if pcode_x[a][i]==_numeric:: CP(_set_adrB,pcode_y[a][i]) CP(_set_line,b)
-          elseif pcode_x[a][i]==_numeric_inv::
-            if b==dl:: CP(_set_adrB,pcode_y[a][i]) CP(_set_line,dr)
-            ef b==dr:: CP(_set_adrB,pcode_y[a][i]) CP(_set_line,dl)
-            fi
-          fi
+          if pcode_x[a][i]==_numeric:: CP(_set_adrB,pcode_y[a][i]) CP(_set_line,b) fi
         endfor
       else:: CP(_set_adrB,a) CP(_set_line,b)
       fi
@@ -568,11 +533,10 @@
             if pcode_x[a][i]==_numeric::
               if b==Ph1:: fuse_ring(ay,6) DL(-2) DL(-4)
               ef b==Ph2:: fuse_ring(ay,6) DL(-1) DL(-3) DL(-5)
-              else:: fuse_ring(ay,b-?3+3)  fi
+              else:: fuse_ring(ay,b-?3+3)
+              fi
             ef pcode_x[a][i]==_fuse_ext::
-              if b==?6:: fuse_ring_bonds(param_e[ay][1],param_e[ay][2],6,6-param_e[ay][3])
-              ef b==?5:: fuse_ring_bonds(param_e[ay][1],param_e[ay][2],5,5-param_e[ay][3])
-              ef b==?4:: fuse_ring_bonds(param_e[ay][1],param_e[ay][2],4,2)  fi
+              fuse_ring_bonds(param_e[ay][1],param_e[ay][2],b-?4+4,b-?4+4-param_e[ay][3])
             fi
           endfor
         else::
@@ -580,14 +544,21 @@
           ef b==Ph2:: fuse_ring(a,6) DL(-1) DL(-3) DL(-5)
           ef b>=pcode_int_start::
             if (pcode_x[b][1]==_chg_len)and(pcode_x[b][2]>=?5)and(pcode_x[b][2]<=?6)::
-              fuse_ring_size(a,pcode_x[b][2]-?3+3,pcode_y[b][1])  fi
+              fuse_ring_size(a,pcode_x[b][2]-?3+3,pcode_y[b][1])
+            fi
           else:: fuse_ring(a,b-?3+3)
           fi
         fi
+      ef pair a::
+        if xpart a==_fuse_ext::
+          ay:=ypart a;
+          fuse_ring_bonds(param_e[ay][1],param_e[ay][2],b-?4+4,b-?4+4-param_e[ay][3])
+        fi
       fi
       else:: message_error(block_cnt,6);
     fi
-  elseif color b:: cntC:=cntC+1; color_list[cntC]:=b; CB(_set_colorB,cntC,a) fi
+  ef color b:: cntC:=cntC+1; color_list[cntC]:=b; CB(_set_colorB,cntC,a)
+  fi
   pcode_int
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -599,32 +570,28 @@
   fi
   if f_type==0::
     if (b GT pcode_emb_start)and(b<=pcode_atm_end):: CA(_chg_atom,b,a)
-    ef b==NH::  CA(_chg_atom,N,a) if f_expand==0:: CP(_tmp_line,nl) fi
-                CC(_group_s) CA(_group_si,H,a) CC(_group_e)
-    ef b==N?::  CA(_chg_atom,N,a) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
+    ef b==NH:: CA(_chg_atom,N,a) if f_expand==0:: CP(_tmp_line,nl) fi
+               CC(_group_s) CA(_group_si,H,a) CC(_group_e)
+    ef b==N?:: CA(_chg_atom,N,a) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
     ef b==N?2:: CA(_chg_atom,N,a) CC(_group_s) CA(_group_si,!,a) CC(_group_e)
-    ef b==?O::  CC(_group_s) CA(_group_dm,O,a) CC(_group_e)
-    ef b==?NH:: CC(_group_s) CA(_group_dm,NH,a) CC(_group_e)
-    ef b==??::  CP(_tmp_rot, 35) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
-                CP(_tmp_rot,-35) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
-    ef b==n_::  CC(_group_s) CP(_set_add,MIS) CP(_chg_add,a) CC(_group_e)
-    ef b==p_::  CC(_group_s) CP(_set_add,PLS) CP(_chg_add,a) CC(_group_e)
+    ef b==??:: CP(_tmp_rot, 35) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
+               CP(_tmp_rot,-35) CC(_group_s) CA(_group_si,NO_ATOM,a) CC(_group_e)
+    ef b==n_:: CC(_group_s) CA(_set_charge,MIS,a) CC(_group_e)
+    ef b==p_:: CC(_group_s) CA(_set_charge,PLS,a) CC(_group_e)
     ef b==_nop:: message_error(block_cnt,6);
     fi
   ef f_type==1::
-    if a>=pcode_emb_start::
+    if numeric a::
       CC(_group_s)
-      for i==1 upto pcode_cnt[a]::
-        if pcode_x[a][i]==_numeric:: CP(_set_adrA,pcode_y[a][i]) CP(bx,by)
-        ef pcode_x[a][i]==_numeric_inv::
-          if bx==_group_wf::  CP(_set_adrA,pcode_y[a][i]) CP(_group_zf,by)
-          ef bx==_group_zf::  CP(_set_adrA,pcode_y[a][i]) CP(_group_wf,by)
+      if a>=pcode_emb_start::
+        for i==1 upto pcode_cnt[a]::
+          if pcode_x[a][i]==_numeric:: CP(_set_adrA,pcode_y[a][i]) CP(bx,by)
+          else:: CP(pcode_x[a][i],pcode_y[a][i])
           fi
-        else:: CP(pcode_x[a][i],pcode_y[a][i])
-        fi
-      endfor
+        endfor
+      else:: CA(bx,by,a)
+      fi
       CC(_group_e)
-    else:: CC(_group_s) CA(bx,by,a) CC(_group_e)
     fi
   ef f_type==2:: cntC:=cntC+1; color_list[cntC]:=b; CA(_set_colorA,cntC,a)
   fi
@@ -676,7 +643,8 @@
     B[i]ang:=angB[i]; B[i]up:=dir(angB[i]);
     B[i]down:=dir(angB[i]+180); B[i]left:=dir(angB[i]+90); B[i]right:=dir(angB[i]-90);
   endfor
-  t addto mol_pic[cntM] also currentpicture; clearit;
+  t addto mol_pic[cntM] also currentpicture;
+  clearit;
   endgroup;
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -710,7 +678,7 @@
   save temp_strA,temp_cntB,f_bra,f_term,f_at,f_lineT,f_rotT,f_lenT,f_envT,angL,cpos,tpos,factor,
        m_wd,m_ht,raise_pos,slen,sdir,char_wd,char_ht,tcol,f_col,knownA,markA,markB,saveA,saveB,
        lenC,lenL,lenT,lineT,angT,rotT,envT,envB,posBs,posBe,group_cnt,group_parts,group_line,
-       group_len,group_env,group_rot,colorA,colorB,save_lenL,save_lenT,
+       group_len,group_env,group_rot,colorA,colorB,save_lenS,save_lenL,
        aW,aH,fW,fH,hW,hW,hH,qH,fP,hP,ww,aw,ap,am,Ls,Le,pA,zA,zL;
   numeric group_adr[],group_line[],group_len[],group_env[],group_rot[],group_parts[],group_lenL[],
           colorA[],colorB[];
@@ -718,8 +686,7 @@
   path frameA[],zA,zL;
   %-----------------------------------------------------------------------------------------------
   if f_expand=1: lenC:=1; else: lenC:=-ratio_chain_ring; fi
-  cntA:=cntB:=cntC:=group_num:=0; str_tbl[0]:="C"; str_cnt:=2000; save_lenL:=save_lenT:=lenC;
-  %-----------------------------------------------------------------------------------------------
+  cntA:=cntB:=cntC:=group_num:=0; str_tbl[0]:="C"; str_cnt:=2000; save_lenL:=save_lenS:=lenC;
   fig_wd:=xpart(fsize); fig_ht:=ypart(fsize);
   %===============================================================================================
   read_mcf_string(s);
@@ -727,8 +694,8 @@
   backboneA:=cntA; backboneB:=cntB;
   if (group_num>0)and(not scan_bit(sw_omit,Group)): expand_group(1); fi
   %-scaling---------------------------------------------------------------------------------------
-  if     blength>1: blen:=blength;        proc_size_setup; proc_skeleton; proc_scaling;
-  elseif blength>0: blen:=fig_wd*blength; proc_size_setup; proc_skeleton; proc_scaling;
+  if blength>1: blen:=blength;        proc_size_setup; proc_skeleton; proc_scaling;
+  ef blength>0: blen:=fig_wd*blength; proc_size_setup; proc_skeleton; proc_scaling;
   else:
     blen:=3mm;
     proc_size_setup;
@@ -752,8 +719,7 @@
   %-----------------------------------------------------------------------------------------------
   for i=1 upto cntA:
     if addA[i]<>0:
-      tempc:=char(addA[i]);
-      if tempc="+": chargeA[i]:=1; ef tempc="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi
+      if addA[i]=PLS: chargeA[i]:=1; ef addA[i]=MIS: chargeA[i]:=-1; else: chargeA[i]:=0; fi
     else: chargeA[i]:=0;
     fi
   endfor
@@ -807,19 +773,20 @@
   endgroup;
 enddef;
 %-------------------------------------------------------------------------------------------------
-def add_group(expr a,y)=
-  group_adr[incr group_num]:=a;
-  if lenL<>lenC: if lenL>=0: group_len[group_num]:=group_lenL[group_num]:=-lenL;
-                 else:       group_len[group_num]:=group_lenL[group_num]:=lenL;
-                 fi
-  else: group_len[group_num]:=lenT; group_lenL[group_num]:=lenC;
+def add_group(expr p)=
+  if f_at=1: nA:=adrT; else: nA:=cntA+1; fi
+  if checkA(nA):
+    group_adr[incr group_num]:=nA;
+    if lenL<>lenC: if lenL>=0: group_len[group_num]:=group_lenL[group_num]:=-lenL;
+                   else:       group_len[group_num]:=group_lenL[group_num]:=lenL; fi
+    else: group_len[group_num]:=lenT; group_lenL[group_num]:=lenC; fi
+    group_line[group_num]:=lineT; group_env[group_num]:=envT;
+    group_rot[group_num]:=rotT; group_parts[group_num]:=p;
+    if f_lineT=0: lineT:=si; fi
+    if f_lenT=0:  lenT:=lenC; fi
+    if f_rotT=0:  rotT:=0; fi
+    if f_envT=0:  envT:=hz; fi
   fi
-  group_line[group_num]:=lineT; group_env[group_num]:=envT;
-  group_rot[group_num]:=rotT; group_parts[group_num]:=y;
-  if f_lineT=0: lineT:=si; fi
-  if f_lenT=0:  lenT:=lenC; fi
-  if f_rotT=0:  rotT:=0; fi
-  if f_envT=0:  envT:=hz; fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 def expand_group(expr n)=
@@ -834,14 +801,14 @@
     if group_env[i]<>hz: put_group(_chg_env,group_env[i]) fi
     put_group(_mk_bond,group_rot[i])
     if group_parts[i]<>NO_ATOM:
-      if group_lenL[i]<>lenC: put_group(_set_len,group_lenL[i]) fi
+      if group_lenL[i]<>lenC: put_group(_chg_len,group_lenL[i]) fi
       for j=1 upto pcode_cnt[group_parts[i]]:
-        if pcode_x[group_parts[i]][j]>=pcode_emb_start: expand_pcode(pcode_x[group_parts[i]][j])
+        if pcode_x[group_parts[i]][j]>=pcode_emb_start: expand_pcode(pcode_x[group_parts[i]][j],0)
         else: put_group(pcode_x[group_parts[i]][j],pcode_y[group_parts[i]][j])
         fi
       endfor
     fi
-    put_group(_chg_env,hz) put_group(_com,_term) put_group(_com,_rest) put_group(_set_len,_end)
+    put_group(_chg_env,hz) put_group(_com,_term) put_group(_com,_rest) put_group(_chg_len,_end)
   endfor
   proc_bond_atom(save_mcode_cnt+1);
   if group_num>save_group_num: expand_group(save_group_num+1); fi
@@ -890,44 +857,43 @@
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def proc_bond_atom(expr n)=
-  f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=temp_strA:=f_at:=0;
+  f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=temp_strA:=f_at:=f_inv:=0;
   addAT:=markA:=markB:=saveA:=saveB:=sB[0]:=0; eB[0]:=1;
   lenL:=lenT:=lenC; lineT:=si; envB:=envT:=hz;
   %-----------------------------------------------------------------------------------------------
-  for i=n upto mcode_cnt: pX:=mcode_x[i]; pY:=mcode_y[i]; pB:=mcode_b[i];
+  for i=n upto mcode_cnt:
+    pX:=mcode_x[i]; pY:=mcode_y[i]; pB:=mcode_b[i];
     if pX=_mk_bond: if (pY=0)and(rotT<>0): rotT:=0; fi add_atom(0);
-    ef pX=_set_adrA: adrT:=getA(pY);
-    ef pX=_set_adrB: adrT:=getB(pY);
+    ef pX=_set_adrA: if (pY mod 1)>0: f_inv:=1; pY:=round pY; fi adrT:=getA(pY);
+    ef pX=_set_adrB: if (pY mod 1)>0: f_inv:=1; pY:=round pY; fi adrT:=getB(pY);
     ef pX=_com: if pY=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
                 ef pY=_rest: markA:=saveA; markB:=saveB;
                 ef pY=_moff: markA:=markB:=0;
                 ef pY=_term: termA;
                 ef pY=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi
-                                if lenT<>lenC: f_lenT:=1;  fi if envT<>hz: f_envT:=1; fi
+                                if lenT<>lenC: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi
                 ef pY=_group_e: f_at:=f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=0;
-                                lineT:=si; lenT:=lenC; envT:=hz;
-                fi
+                                lineT:=si; lenT:=lenC; envT:=hz; fi
     ef pX=_set_atom: temp_strA:=pY;
-    ef pX=_group_si: if f_at=1: if checkA(adrT): add_group(adrT,pY); fi 
-                     else: add_group(cntA+1,pY); fi
-    ef pX=_group_dm: if f_at=1: if checkA(adrT): lineT:=dm; add_group(adrT,pY); fi
-                     else: lineT:=dm; add_group(cntA+1,pY); fi
-    ef pX=_group_wf: if f_at=1: if checkA(adrT): lineT:=wf; add_group(adrT,pY); fi
-                     else: lineT:=wf; add_group(cntA+1,pY); fi
-    ef pX=_group_zf: if f_at=1: if checkA(adrT): lineT:=zf; add_group(adrT,pY); fi
-                     else: lineT:=zf; add_group(cntA+1,pY); fi
-    ef pX=_jp_bond:  nB:=getB(pY); nB:=checkBn(nB); termA; sB[cntB+1]:=sB[nB]; f_bra:=1;
-    ef pX=_jp_atom:  nA:=getA(pY); nA:=checkAn(nA); termA; sB[cntB+1]:=nA; f_bra:=1;
-    ef pX=_jp_absA:  sB[cntB+1]:=pY; f_bra:=1; temp_cntB:=cntB;
+    ef pX=_group_si: add_group(pY);
+    ef pX=_group_dm: lineT:=dm; add_group(pY);
+    ef pX=_group_wf: if f_inv=1: lineT:=zf; f_inv:=0; else: lineT:=wf; fi add_group(pY);
+    ef pX=_group_zf: if f_inv=1: lineT:=wf; f_inv:=0; else: lineT:=zf; fi add_group(pY);
+    ef pX=_jp_bond: nB:=getB(pY); nB:=checkBn(nB); termA; sB[cntB+1]:=sB[nB]; f_bra:=1;
+    ef pX=_jp_atom: nA:=getA(pY); nA:=checkAn(nA); termA; sB[cntB+1]:=nA; f_bra:=1;
+    ef pX=_jp_absA: sB[cntB+1]:=pY; f_bra:=1; temp_cntB:=cntB;
     ef pX=_chg_atom: if checkA(adrT): strA[adrT]:=pcode_y[pY][1]; fi
-    ef pX=_tmp_len:  lenT:=pY;
-    ef pX=_set_len:  if pY=_end: lenL:=save_lenT;
-                     else: save_lenT:=lenL;
-                           if pY=_ring: if lenL<0: lenL:=1; fi else: lenL:=pY; fi
+    ef pX=_tmp_len: lenT:=pY;
+    ef pX=_chg_len: if pY=_end: lenL:=save_lenS; else: save_lenS:=lenL; lenL:=pY; fi
+    ef pX=_set_len: if pY=_end: lenL:=save_lenL;
+                    ef pY=_ring: save_lenL:=lenL; if lenT<>lenC:lenL:=lenT; ef lenL<0:lenL:=1; fi
+                    ef pY=_chain: save_lenL:=lenL; if lenT<>lenC:lenL:=lenT; fi
+                    else: save_lenL:=lenL; lenL:=pY; fi
+    ef pX=_get_len:  nB:=getB(pY); save_lenL:=lenL; lenL:=lenB[nB];
+    ef pX=_set_line: if checkB(adrT):
+                       if f_inv=1: f_inv:=0; if pY=dl: pY:=dr; ef pY=dr: pY:=dl; fi fi
+                       lineB[adrT]:=pY;
                      fi
-    ef pX=_chg_len:  if pY=_end: lenL:=save_lenL; else: save_lenL:=lenL; lenL:=pY; fi
-    ef pX=_get_len:  nB:=getB(pY); nB:=checkBn(nB); save_lenT:=lenL; lenL:=lenB[nB];
-    ef pX=_set_line: if checkB(adrT): lineB[adrT]:=pY; fi
     ef pX=_tmp_line: lineT:=pY;
     ef pX=_tmp_rot:  rotT:=pY;
     ef pX=_cyc:      nA:=getA(pY); nA:=checkAn(nA); add_atom(nA);
@@ -937,10 +903,8 @@
     ef pX=_tmp_env:  envT:=pY;
     ef pX=_set_colorA: if checkA(adrT): colorA[adrT]:=pY; fi
     ef pX=_set_colorB: if checkB(adrT): colorB[adrT]:=pY; fi
-    ef pX=_set_add: addAT:=pY;
-    ef pX=_chg_add: nA:=getA(pY); nA:=checkAn(nA);
-                    addA[nA]:=addAT; addAT:=0; if rotT<>0: add_rot[nA]:=rotT; fi
-    else:
+    ef pX=_add_charge: addAT:=pY;
+    ef pX=_set_charge: if checkA(adrT): addA[adrT]:=pY; if rotT<>0: add_rot[adrT]:=rotT; fi fi
     fi
   endfor
 enddef;
@@ -951,8 +915,7 @@
   if f_bra=0: strA[incr cntA]:=temp_strA; sB[cntB]:=cntA;
               addA[cntA]:=addAT; addAT:=temp_strA:=add_rot[cntA]:=0;
               if rotT<>0: add_rot[cntA]:=rotT; rotT:=0; fi
-  else: f_bra:=0;
-  fi
+  else: f_bra:=0; fi
   if n=0: eB[cntB]:=cntA+1; f_term:=0; else: eB[cntB]:=n; f_term:=1; fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -960,13 +923,11 @@
   markA:=markB:=cntA:=cntB:=f_bra:=rotT:=f_term:=angA[0]:=angB[0]:=angX[0]:=0;
   lineT:=si; envT:=envB:=hz; angT:=mangle; posA[0]:=posBs:=posBe:=(0,0);
   %-----------------------------------------------------------------------------------------------
-  for i=1 upto mcode_cnt:
-    pX:=mcode_x[i]; pY:=mcode_y[i]; pB:=mcode_b[i];
+  for i=1 upto mcode_cnt: pX:=mcode_x[i]; pY:=mcode_y[i]; pB:=mcode_b[i];
     if pX=_mk_bond: if (pY=0)and(rotT<>0):pY:=rotT; rotT:=0; fi add_bond(pY,1);
     ef pX=_com: if pY=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
                 ef pY=_rest: markA:=saveA; markB:=saveB;
-                ef pY=_moff: markA:=markB:=0; ef pY=_term: termB;
-                fi
+                ef pY=_moff: markA:=markB:=0; ef pY=_term: termB; fi
     ef pX=_jp_bond: adrT:=getB(pY); adrT:=checkBn(adrT);
                     termB; posBs:=posA[sB[adrT]]; angT:=angB[adrT]; f_bra:=1; rotT:=0;
     ef pX=_jp_atom: adrT:=getA(pY); adrT:=checkAn(adrT); 
@@ -981,7 +942,6 @@
     ef pX=_cyc:     nA:=getA(pY); nA:=checkAn(nA); add_bond(angle(posA[nA]-posBs)-angT,0);
     ef pX=_cyc_sB:  nA:=getB(pY); nA:=checkBn(nA); add_bond(angle(posA[sB[nA]]-posBs)-angT,0);
     ef pX=_cyc_eB:  nA:=getB(pY); nA:=checkBn(nA); add_bond(angle(posA[eB[nA]]-posBs)-angT,0);
-    else:
     fi
   endfor
 enddef;
@@ -1013,7 +973,10 @@
     else: if envB>=pcode_emb_start: pcode_y[envB][cntB-temp_cntB]
           else: if envB=hz: if n=0:  60 ef n<=90: -60 ef n<=180:  60 ef n<270: -60 else:  60 fi
                 ef envB=vt: if n=0: -60 ef n<90:   60 ef n<=180: -60 ef n<=270: 60 else: -60 fi
-                ef abs(envB)<=180: envB  fi fi fi
+                ef abs(envB)<=180: envB
+                fi
+          fi
+    fi
   fi
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -1024,8 +987,7 @@
 vardef checkA(expr n)=
   bA:=(n<=(cntA+iif(f_term=0,1,0)))and(n>=1)and(n mod 1=0); if not bA: message_error(pB,4) fi bA
 enddef;
-vardef checkB(expr n)=
-  bA:=(n<=cntB)and(n>=1)and(n mod 1=0); if not bA: message_error(pB,5) fi bA
+vardef checkB(expr n)= bA:=(n<=cntB)and(n>=1)and(n mod 1=0); if not bA: message_error(pB,5) fi bA
 enddef;
 vardef checkAn(expr n)= if checkA(n): n else: 1 fi enddef;
 vardef checkBn(expr n)= if checkB(n): n else: 1 fi enddef;
@@ -1033,7 +995,8 @@
 def termA=
   if f_term=0: if f_bra=0: strA[incr cntA]:=temp_strA; addA[cntA]:=addAT; add_rot[cntA]:=rotT;
                            addAT:=temp_strA:=rotT:=0;
-               else: f_bra:=0; fi
+               else: f_bra:=0;
+               fi
                f_term:=1;
   fi
 enddef;
@@ -1173,8 +1136,7 @@
 def bz_put(expr a,b,c,d)=
   nB:=round(lenL/hash_gap);
   for i=0 upto nB-1:
-    nA:=i/nB; nD:=nA+ratio_hash_black/nB;
-    fill nA[b,a]--nA[d,c]--nD[d,c]--nD[b,a]--cycle;
+    nA:=i/nB; nD:=nA+ratio_hash_black/nB; fill nA[b,a]--nA[d,c]--nD[d,c]--nD[b,a]--cycle;
   endfor
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1381,10 +1343,10 @@
 enddef;
 %=================================================================================================
 def proc_report_out=
+  file_output:=jobname&"-report.txt";
   block_cnt:=split_str(mc,",")(block_s);
-  file_output:=jobname&"-report.txt";
   puts "===========================================================================";
-  puts " No["&decimal(fig_num)&"],Name<"& EN&">,Category<"&CAT&">,File<"&file_input&">";
+  puts " Fig["&decimal(fig_num)&"],Name["& EN&"],Category["&CAT&"],File["&file_input&"]";
   puts "---------------------------------------------------------------------------";
   puts " Row["&decimal(mc_row)&"],Length["&decimal(length(mc))&"],Block"&
          "["&decimal(block_cnt)&"]"&",BackboneA["&decimal(backboneA)&"]"&
@@ -1392,7 +1354,7 @@
   puts "---------------------------------------------------------------------------";
   for i=1 upto mc_row: puts (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor
   puts "---------------------------------------------------------------------------";
-  for i=1 upto block_cnt: puts "["&fdl(3)(i)&"]  "&block_s[i]; endfor
+  for i=1 upto block_cnt: puts "["&fdr(3)(i)&"]  "&block_s[i]; endfor
   puts "- error , warning ---------------------------------------------------------";
   for i=1 upto error_cnt:
     puts error_s[error_e[i]]&" ["&decimal(error_b[i])&"] "&block_s[error_b[i]];
@@ -1415,7 +1377,7 @@
   puts "---------------------------------------------------------------------------";
   puts "< NO. ><  bond   (sdt)><angle +(  +-  )><length (   pt   )>";
   for i=1 upto cntB:
-    nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi
+    nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; ef nC<0: nC:=-nC; fi
     nB:=angB[i]; if nB>180: nB:=nB-360; fi
     puts " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])&
            " ("&fdr(3)(bond_num[i])&")"&fdr(8)(round(angB[i]))&
@@ -1439,14 +1401,14 @@
 %=================================================================================================
 def proc_mol_out(expr n)=
   if EN<>"-": EN_:=forbidden_to_underbar(EN); fi
-  file_output:="m"&fit_zero(fig_num)&"-"&EN_&".mol";
   %-V2000---------------------------------------------------------------------------------------
   if n=2000:
+    file_output:="m2k_"&fit_zero(fig_num)&"-"&EN_&".mol";
     puts ""; puts "  -MCFtoMOL- "&fsl(20)(EN); puts "";
     puts fdr(3)(cntA)&fdr(3)(cntB)&"  0  0  0  0  0  0  0  0999 V2000";
     for i=1 upto cntA:
       puts fdr(10)(xpart(posA[i])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "&
-             fsl(2)(erase_char(str_tbl[strA[i]]))&"  0"&fdr(3)(bond_charge(chargeA[i]))&"  0  0";
+           fsl(2)(erase_char(str_tbl[strA[i]]))&"  0"&fdr(3)(bond_charge(chargeA[i]))&"  0  0";
     endfor
     for i=1 upto cntB:
       if lineB[i]<>0: puts fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))&
@@ -1453,9 +1415,10 @@
                       fdr(3)(bond_stereo(lineB[i]))&"     0  0";
       fi
     endfor
-    puts "M  END";
+    puts "M  END"; puts EOF;
   %-V3000---------------------------------------------------------------------------------------
-  elseif n=3000:
+  ef n=3000:
+    file_output:="m3k_"&fit_zero(fig_num)&"-"&EN_&".mol";
     puts ""; puts "  -MCFtoMOL- "&fsl(20)(EN); puts "";
     puts "  0  0  0  0  0  0  0  0  0  0  0 V3000"; 
     puts "M  V30 BEGIN CTAB";
@@ -1474,7 +1437,8 @@
                if bond_stereo(lineB[i])<>0: &" CFG="&decimal(bond_config(lineB[i])) fi;
       fi
     endfor
-    puts "M  V30 END BOND"; puts "M  V30 END CTAB"; puts "M  END"; fi
+    puts "M  V30 END BOND"; puts "M  V30 END CTAB"; puts "M  END"; puts EOF;
+  fi
 enddef;
 %=================================================================================================
 def proc_mc_out=
@@ -1553,7 +1517,7 @@
   if f_expand=0:
     CH3:=``("C{H_3_}")(C,H,H,H); CH2:=``("C{H_3_}")(C,H,H); CN:=``("CN")(C,N); OH:=``("OH")(O,H);
     COOH:=``("COOH")(C,O,O,H); COONa:=``("COO{Na}")(C,O,O,Na); CHO:=``("CHO")(C,H,O);
-    NO:=``("NO")(N,O); NO2:=``("N{O_2_}")(N,O,O); NH2:=``("N{H_2_}")(N,H,H);
+    NO:=``("NO")(N,O); NO2:=``("N{O_2_}")(N,O,O); NH2:=``("N{H_2_}")(N,H,H); HO:=``("OH")(O,H);
     SH:=``("SH")(S,H); SO2H:=``("S{O_2_}H")(S,O,O,H); SO3H:=``("S{O_3_}H")(S,O,O,O,H);
     ONa:=``("O{Na}")(O,Na); SO3Na:=``("S{O_3_}{Na}")(S,O,O,O,Na);
   fi
@@ -1562,27 +1526,26 @@
   !:=!1:='((_mk_bond,_auto_ang)); 
   if f_expand=1:
     NH:='(N,/H); CH3:='(/H,/H^60,/H^-60); NH2:='(N,/H^60,/H^-60); NO2:='(N,//O^60,//O^-60);
-    OH:='(O,!,H); NO:='(N,!~dm,O); SH:='(S,!,H); SO2H:='(S,//O,!,OH);
-    SO3H:='(S,//O^35,//O^-35,!,OH); CHO:='(//O,!,H); COOH:='(//O,!,OH); CN:='(!~tm,N);
-    ONa:='(O,!,Na); SO3Na:='(S,//O^35,//O^-35,!,Na);
+    OH:='(O,/H); NO:='(N,//O); SH:='(S,/H); SO2H:='(S,//O^60,/OH^-60);
+    SO3H:='(S,//O^90,//O^-90,/OH); CHO:='(//O^-60,/H^60); COOH:='(//O^-60,/OH^60); CN:='(/N~tm);
+    ONa:='(O,/Na); SO3Na:='(S,//O^90,//O^-90,/Na);
   else: NH:='(N,/H~nl);
   fi
-  ?:='((_group_si,NO_ATOM)); ?wf:=?w:='((_group_wf,NO_ATOM)); ?zf:=?z:='((_group_zf,NO_ATOM));
-  ?dm:=?d:='((_group_dm,NO_ATOM)); ?O:='((_group_dm,O)); ?S:='((_group_dm,S));
-  ?NH:='((_group_dm,NH));
+  ?:='(/NO_ATOM); ?wf:=?w:='(/*NO_ATOM); ?zf:=?z:='(*/NO_ATOM);
+  ?S:='(//S); ?O:='(//O); ?NH:='(//NH); ?H:='(/H); ?F:='(/F); ?OH:='(/OH); ?OH:='(/COOH);
+  ?NH2:='(/NH2); ?Cl:='(/Cl); ?2:='(/!); ?dm:=?d:='((_group_dm,NO_ATOM));
   %-----------------------------------------------------------------------------------------------
-  ?H:='(/H); ?F:='(/F); ?Cl:='(/Cl); ?OH:='(/OH); ?OH:='(/COOH); ?NH2:='(/NH2);
-  for i=3 upto 20: ?[i]:='((_set_len,_ring),<((-180 DIV i)-90)
-    for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_set_len,_end)); endfor
+  for i=3 upto 20: ?[i]:='((_set_len,_ring),<((-180 DIV i)-90) for j==2 upto i::,360 DIV i endfor
+                         ,(_cyc_sB,1-i),(_set_len,_end));
+  endfor
+  for i==2 upto 20: ![i]:='((_set_len,_chain),! for j==2 upto i:: ,! endfor ,(_set_len,_end));
+  endfor
   Ph:=Ph1:='(?6,-2=dl,-4=dl,-6=dl); Ph2:='(?6,-1=dl,-3=dl,-5=dl);
-  %-----------------------------------------------------------------------------------------------
   !db:=!d:='(!~db); !tm:=!t:='(!~tm); !wf:=!w:='(!~wf); !zf:=!z:='(!~zf); !wb:='(!~wb);
   !zb:='(!~zb); !dl:='(!~dl); !dr:='(!~dr); !dm:='(!~dm); !d!:='(!~db,!); !!d:='(!,!db);
-  !!d!:='(!,!db,!);
-  for i==2  upto 20: ![i]:='(! for j==2 upto i:: ,! endfor); endfor
-  ?!:='(?,!); ?!d:='(?,!d); ?!2:='(?,!2); ??!:='(?,?^60,60); ??:='(?^35,?^-35);
-  !?:='(!,?); !?!:='(!?,!); !??!:='(!,??,!); !??:='(!,??); ?2:='(/!); !?2:='(!,?2); ?2!:='(?2,!);
-  n_:='((_set_add,MIS)); p_:='((_set_add,PLS));
+  !!d!:='(!,!db,!); ?!:='(?,!); !?:='(!,?); ?!d:='(?,!d); ?!2:='(?,!2); ??!:='(?,?^60,60);
+  ??:='(?^35,?^-35); !?!:='(!?,!); !??!:='(!,??,!); !??:='(!,??); !?2:='(!,?2); ?2!:='(?2,!);
+  n_:='((_add_charge,MIS)); p_:='((_add_charge,PLS));
   mark_adress:='((_com,_mark)); reset_adress:='((_com,_moff)); reset_length:='((_chg_len,_end));
   %-----------------------------------------------------------------------------------------------
   ?F!F:='(/F,60,F); ?F?F!F:='(/F,/F^60,60,F); ?Br!Br:='(/Br,60,Br); ?Cl!Cl:='(/Cl,60,Cl);
@@ -1590,9 +1553,9 @@
   %-----------------------------------------------------------------------------------------------
   N!:='(N,!); N?:='(N,?); N!2:='(N,!3); N!2:='(N,!3); !N:='(!,N); N?!:='(N,?!); N?2:='(N,?2);
   S?O:='(S,?O); S?O!:='(S?O,!); ?O?O:='(?O^-35,?O^35); S?O?O:='(S,?O?O); S?O?O!:='(S?O?O,!);
-  O!:='(O,!); O!2:='(O,!2); O!3:='(O,!3); S!:='(S,!); S!2:='(S,!2); S!3:='(S,!3);
+  O!:='(O,!); O!2:='(O,!2); O!3:='(O,!3); S!:='(S,!); S!2:='(S,!2); S!3:='(S,!3); !S:='(!,S);
   %-----------------------------------------------------------------------------------------------
-  ?O!:='(?O,!); ?O!2:='(?O,!2); ?O!3:='(?O,!3); !?O:='(!,?O); !?O!:='(!,?O!);
+  ?O!:='(?O,!); ?O!2:='(?O,!2); ?O!3:='(?O,!3); !?O:='(!,?O); !?O!:='(!,?O!); ?O!O:='(?O,!,O);
   NH!:='(NH,!); NH!2:='(NH,!2); !NH:='(!,NH); !NH!:='(!,NH!);
   %-----------------------------------------------------------------------------------------------
   !OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !S?O:='(!,S?O); !O:='(!,O); !dO:='(!d,O);
@@ -1624,13 +1587,13 @@
 %-------------------------------------------------------------------------------------------------
 def loadm(text t)=
   begingroup
-  save f_mcf,lines,unit_cnt,row_s,row_cnt,info_cnt,order,min_n,max_n,sign_at,sign_n,tag_s,
+  save f_mcf,unit_cnt,row_s,row_cnt,info_cnt,order,min_n,max_n,sign_at,sign_n,tag_s,line_cnt,
        val_s,filter_n,filter_tag,filter_val,filter_sign,filter_cnt,filter_p,lib_unit_cnt,at_colon,
        at_equal,at_less,at_greater,at_n,sort_tbl,key_s,sort_s,sign_s,sV,sT,header_s,sort_oder;
   string row_s[][],sort_tbl[],key_s,filter_tag[],filter_val[],sign_s[],tag_s[][],val_s[][],sort_s,
          header_s,sV,sT;
   numeric row_cnt[],order[],order_tbl[],filter_sign[],filter_p[];
-  lines:=f_mcf:=mc_row:=info_cnt:=filter_cnt:=lib_unit_cnt:=0; unit_cnt:=1; 
+  line_cnt:=f_mcf:=mc_row:=info_cnt:=filter_cnt:=lib_unit_cnt:=0; unit_cnt:=1; 
   file_input:=default_library;
   sign_s1:="="; sign_s2:="<>"; sign_s3:="<"; sign_s4:=">"; sign_s5:="<="; sign_s6:=">=";
   header_s:="";
@@ -1642,13 +1605,10 @@
     if at_colon>=2:                               sign_at:=at_colon;   sign_n:=0; at_n:=1;
     ef at_equal>=2:   if (at_equal-1)=at_less:    sign_at:=at_equal;   sign_n:=5; at_n:=2;
                       ef (at_equal-1)=at_greater: sign_at:=at_equal;   sign_n:=6; at_n:=2;
-                      else:                       sign_at:=at_equal;   sign_n:=1; at_n:=1;
-                      fi
+                      else:                       sign_at:=at_equal;   sign_n:=1; at_n:=1; fi
     ef at_greater>=2: if (at_greater-1)=at_less:  sign_at:=at_greater; sign_n:=2; at_n:=2;
-                      else:                       sign_at:=at_greater; sign_n:=4; at_n:=1;
-                      fi
-    ef at_less>=2:                                sign_at:=at_less;    sign_n:=3; at_n:=1;
-    fi
+                      else:                       sign_at:=at_greater; sign_n:=4; at_n:=1; fi
+    ef at_less>=2:                                sign_at:=at_less;    sign_n:=3; at_n:=1; fi
     sT:=substring(0,sign_at-at_n) of list;
     sV:=substring(sign_at,length(list)) of list;
     %---------------------------------------------------------------------------------------------
@@ -1667,13 +1627,13 @@
   endfor
   %-----------------------------------------------------------------------------------------------
   forever:
-    line_s:=readfrom file_input;
-    exitif line_s=EOF;
-    firstc:=substring(0,1) of line_s;
+    lines:=readfrom file_input;
+    exitif lines=EOF;
+    firstc:=substring(0,1) of lines;
     if firstc<>"%":
-      row_s[unit_cnt][incr lines]:=line_s;
+      row_s[unit_cnt][incr line_cnt]:=lines;
       if firstc=";":
-        row_cnt[unit_cnt]:=lines; f_mcf:=lines:=0; filter_n:=1;
+        row_cnt[unit_cnt]:=line_cnt; f_mcf:=line_cnt:=0; filter_n:=1;
         for i=1 upto filter_cnt: filter_p[i]:=0; endfor
         sort_s:="";
         for i=1 upto info_cnt:
@@ -1683,13 +1643,13 @@
           for j=1 upto filter_cnt:
             if filter_tag[j]=sT:
               filter_p[j]:=1;
-              if (filter_sign[j]>=3)and(is_num(sV)=1): line_s:=fix_num(sV); else: line_s:=sV; fi
-              if filter_sign[j]=1: if not(line_s= filter_val[j]): filter_n:=0; fi
-              ef filter_sign[j]=2: if not(line_s<>filter_val[j]): filter_n:=0; fi
-              ef filter_sign[j]=3: if not(line_s< filter_val[j]): filter_n:=0; fi
-              ef filter_sign[j]=4: if not(line_s> filter_val[j]): filter_n:=0; fi
-              ef filter_sign[j]=5: if not(line_s<=filter_val[j]): filter_n:=0; fi
-              ef filter_sign[j]=6: if not(line_s>=filter_val[j]): filter_n:=0; fi
+              if (filter_sign[j]>=3)and(is_num(sV)=1): lines:=fix_num(sV); else: lines:=sV; fi
+              if filter_sign[j]=1: if not(lines= filter_val[j]): filter_n:=0; fi
+              ef filter_sign[j]=2: if not(lines<>filter_val[j]): filter_n:=0; fi
+              ef filter_sign[j]=3: if not(lines< filter_val[j]): filter_n:=0; fi
+              ef filter_sign[j]=4: if not(lines> filter_val[j]): filter_n:=0; fi
+              ef filter_sign[j]=5: if not(lines<=filter_val[j]): filter_n:=0; fi
+              ef filter_sign[j]=6: if not(lines>=filter_val[j]): filter_n:=0; fi
               fi
             fi
           endfor
@@ -1702,7 +1662,7 @@
         info[unit_cnt]:=info_cnt:=split_str(header_s,";")(arg_s);  header_s:="";
       ef firstc<>"%":
         if f_mcf=1: mc_row:=mc_row+1;
-        else: if header_s="": header_s:=line_s; else: header_s:=header_s&line_s; fi
+        else: if header_s="": header_s:=lines; else: header_s:=header_s&lines; fi
         fi
       fi
     fi
@@ -1722,14 +1682,14 @@
   if key_s<>"":
     for i=1 upto unit_cnt: order[i]:=0; endfor
     for i=1 upto unit_cnt:
-      if sort_oder=0: line_s:="~";
+      if sort_oder=0: lines:="~";
         for j=1 upto unit_cnt:
-          if order[j]=0: if sort_tbl[j]<line_s: line_s:=sort_tbl[j]; min_n:=j; fi fi
+          if order[j]=0: if sort_tbl[j]<lines: lines:=sort_tbl[j]; min_n:=j; fi fi
         endfor
         order[min_n]:=i; order_tbl[i]:=min_n;
-      ef sort_oder=1: line_s:=" ";
+      ef sort_oder=1: lines:=" ";
         for j=1 upto unit_cnt:
-          if order[j]=0: if sort_tbl[j]>line_s: line_s:=sort_tbl[j]; max_n:=j; fi fi
+          if order[j]=0: if sort_tbl[j]>lines: lines:=sort_tbl[j]; max_n:=j; fi fi
         endfor
         order[max_n]:=i; order_tbl[i]:=max_n;
       fi
@@ -1785,12 +1745,10 @@
   err_type
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%=============================================================================================
 vardef fix_num(expr s)=
   temps:=s; nN:=scan_c(".",temps);
   if nN=0: temps:=fsr(4)(temps); ef nN=1: temps:="   0"&temps;
-  ef nN=2: temps:="   "&temps;   ef nN=3: temps:="  "&temps; ef nN=4: temps:=" "&temps;
-  fi
+  ef nN=2: temps:="   "&temps; ef nN=3: temps:="  "&temps; ef nN=4: temps:=" "&temps; fi
   temps
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -1808,14 +1766,12 @@
   nN:=0; nA:=length(s);
   if d=0:  for i=n upto nA:   if substring(i-1,i) of s=c:  nN:=i; fi exitif nN>0; endfor
   ef d=1:  for i=n upto nA:   if substring(i-1,i) of s<>c: nN:=i; fi exitif nN>0; endfor
-  ef d=-1: for i=nA downto n: if substring(i-1,i) of s<>c: nN:=i; fi exitif nN>0; endfor
-  fi
+  ef d=-1: for i=nA downto n: if substring(i-1,i) of s<>c: nN:=i; fi exitif nN>0; endfor fi
   nN
 enddef;
 %-------------------------------------------------------------------------------------------------
 vardef scan_c(expr c,s)=
-  nN:=0; nA:=length(s);
-  for i=1 upto nA: if substring(i-1,i) of s=c: nN:=i; fi exitif nN>0; endfor
+  nN:=0; nA:=length(s); for i=1 upto nA: if substring(i-1,i) of s=c: nN:=i; fi exitif nN>0; endfor
   nN
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -1828,6 +1784,5 @@
 enddef;
 %-------------------------------------------------------------------------------------------------
 vardef get_tag_var(expr s)(suffix t,v)=
-  nN:=scan_c(":",s); t:=substring(0,nN-1) of s; v:=substring(nN,length(s)) of s;
-enddef;
+  nN:=scan_c(":",s); t:=substring(0,nN-1) of s; v:=substring(nN,length(s)) of s; enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



More information about the tex-live-commits mailing list.