texlive[62101] Master/texmf-dist/doc/metapost/mcf2graph: mcf2graph

commits+karl at tug.org commits+karl at tug.org
Sun Feb 20 22:13:58 CET 2022


Revision: 62101
          http://tug.org/svn/texlive?view=revision&revision=62101
Author:   karl
Date:     2022-02-20 22:13:58 +0100 (Sun, 20 Feb 2022)
Log Message:
-----------
mcf2graph (20feb22)

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/mcf2graph.mp
    trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf
    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_man_soc.mp
    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

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,6 +1,11 @@
 *******************************************************************************
- Changelog of mcf2graph software package          by Akira Yamaji 2022-01-22
+ Changelog of mcf2graph software package          by Akira Yamaji 2022-02-20
 *******************************************************************************
+[ver. 4.80  / 2022-02-20]
+  -update mcf2graph.mp
+  -update mcf_data_base.mcf
+  -update MCF manual,example
+
 [ver. 4.79  / 2022-01-22]
   -fix bug in numbering atom,bond
 

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/README
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/README	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,7 +1,7 @@
 ********************************************************************************
  mcf2graph  : Convert Molecular Coding Format to graphics with MetaPost
  Author     : Akira Yamaji
- version    : 4.79 2022-01-22
+ version    : 4.80 2022-02-20
  E-mail     : mcf2graph at gmail.com
  Located at : http://www.ctan.org/pkg/mcf2graph
 ********************************************************************************
@@ -33,24 +33,20 @@
 3. How to use mcf2graph with MetaPost
  Minimum requirement to use mcf2graph : mpost.exe,mpost.dll,mpost.mp,plain.mp
  ( 1) >mpost                  FILENAME  => output eps(.mps) file
- ( 2) >mpost -s bboxmargin=1  FILENAME  => output first figure only (for test)
- ( 3) >mpost -s ahangle=1     FILENAME  => output png file (600dpi)
- ( 4) >mpost -s ahangle=11    FILENAME  => output png file (1200dpi)
- ( 5) >mpost -s ahangle=2     FILENAME  => output svg file 
- ( 6) >mpost -s ahangle=3     FILENAME  => output eps(.eps) file
- ( 7) >mpost -s ahlength=1    FILENAME  => output information-aux file
-                                             tag1:var1;tag2:var2;
- ( 8) >mpost -s ahlength=2    FILENAME  => output information-aux file
-                                             tag1;tag2;
-                                             var1;var2;
- ( 9) >mpost -s ahlength=3    FILENAME  => output data-base-aux file
- (10) >mpost -s ahlength=5    FILENAME  => output mol file(V2000)
- (11) >mpost -s ahlength=6    FILENAME  => output mol file(V3000)
- (12) >mpost -s ahlength=7    FILENAME  => output report file
- (13) >mpost -s labeloffset=2 FILENAME  => atomfont="uhvr8r"
+ ( 2) >mpost -s ahangle=1     FILENAME  => output png file (600dpi)
+ ( 3) >mpost -s ahangle=11    FILENAME  => output png file (1200dpi)
+ ( 4) >mpost -s ahangle=2     FILENAME  => output svg file 
+ ( 5) >mpost -s ahangle=3     FILENAME  => output eps(.eps) file
+ ( 6) >mpost -s ahlength=1    FILENAME  => output information-aux file(for tex)
+ ( 7) >mpost -s ahlength=2    FILENAME  => output information-aux file
+                                                  (for spread sheet)
+ ( 8) >mpost -s ahlength=3    FILENAME  => output data-base-aux file
+ ( 9) >mpost -s ahlength=5    FILENAME  => output mol file(V2000)
+ (10) >mpost -s ahlength=6    FILENAME  => output mol file(V3000)
+ (11) >mpost -s ahlength=7    FILENAME  => output report file
 
 4. License
- mcf2graph ver 4.78    Copyright (c) 2013-2022   Akira Yamaji
+ mcf2graph ver 4.80    Copyright (c) 2013-2022   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/mcf2graph.mp
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.79    Copyright (c) 2013-2022   Akira Yamaji
+% mcf2graph ver 4.80    Copyright (c) 2013-2022   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,18 +17,17 @@
 % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %  mcf2graph is MetaPost macro package convert Molecular Coding Format(MCF) to graphic file
-%  font(pk)/eps/sgv/png/mdl molfile
+%  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 
 %--------------------------------------------------------------------------------------------------
-% Set outputformat to "eps"(.mps)                       : mpost                   FILENAME
-% Set output first font only                            : mpost -s bboxmargin=1   FILENAME
-% Set outputformat to "png"                             : mpost -s ahangle=1      FILENAME
-% Set outputformat to "svg"                             : mpost -s ahangle=2      FILENAME
+% Set outputformat to "eps" (.mps)                      : mpost                   FILENAME
+% Set outputformat to "png" (.png)                      : mpost -s ahangle=1      FILENAME
+% Set outputformat to "svg" (.svg)                      : mpost -s ahangle=2      FILENAME
 % Set outputformat to "eps" (.eps)                      : mpost -s ahangle=3      FILENAME
-% Set output information aux file (tag1:var1;tag2:var2) : mpost -s ahlength=1     FILENAME
-% Set output information aux file (tag1;tag2 var1;var2) : mpost -s ahlength=2     FILENAME
+% Set output information aux file (for TeX)             : mpost -s ahlength=1     FILENAME
+% Set output information aux file (for spread sheet)    : mpost -s ahlength=2     FILENAME
 % Set output aux data-base file                         : mpost -s ahlength=3     FILENAME
 % Set output MOL file (V2000)                           : mpost -s ahlength=5     FILENAME
 % Set output MOL file (V3000)                           : mpost -s ahlength=6     FILENAME
@@ -35,67 +34,60 @@
 % Set output report                                     : mpost -s ahlength=7     FILENAME
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 tracingstats:=1;
-message "* This is mcf2graph ver 4.79  2022.01.22";
+message "* This is mcf2graph ver 4.80  2022.02.20";
 %-------------------------------------------------------------------------------------------------
-newinternal cntA,cntB,cntM,minX,minY,maxX,maxY,sftX,sftY,com,par,envT,envB,lenT,lineT,angT,rotT,
-            crR,nA,nB,nC,nD,nE,nF,nS,nL,nR,nU,nP,xpos,ypos,markA,markB,saveA,saveB,bondL;
-numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_char[],
-        tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],addA[],add_rot[],chargeA[],
-        com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],lineB[],
-        sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[],
-        cmm_adr[],mc_indent[],at_semicol[];
-string  save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,aux_delimiter,atomfont,
-        temps,default_data_file,default_temp_file,mpfont,tag_s,var_s,cal_FM,cal_MW,cal_MI,
-        inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW;
-pair    save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe,dum;
-picture mol_stru[],atom_picture,save_picture,temp_picture;
+newinternal numeric nA,nB,nC,nD,nE,nF,nH,nN,nL,nR,nS,nU,nP,nW,nX,nY,mc_row;
+newinternal string tempc,temps,blanks,aux_delimiter,atomfont,sC,sI,sS,sT,sV,cC,cH,cO,cN,cS,cF,cP,
+                   file_input,file_output;
+numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],tbl_atom_wt[],
+        tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[];
+string  mc[],mc,save_str[],tbl_atom_str[],strD[],tag[],default_data_file,default_temp_file,mpfont;
+pair    save_pair[],msize,mposition,fsize,fmargin,dum,mpos;
+picture mol_pic[];
+color color_list[];
 %-------------------------------------------------------------------------------------------------
-char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0;
+fig_num:=str_cnt:=tbl_cnt:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0;
 sw_abbreviate:=sw_numbering:=sw_output:=0; numbering_start:=1; numbering_end:=4095;
 %-------------------------------------------------------------------------------------------------
-aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= "                    "; dum:=(-4091,0);
+aux_max:=max_inf_num:=20; aux_delimiter:=";"; blanks:= "            "; dum:=(-4091,0);
 for i=1 upto aux_max: tag[i]:=""; endfor
 Fig:=1; Mcode:=2; Calc:=4; Info:=8; Table:=16; Report:=32; MOL2k:=64; MOL3k:=128;
 Atom:=8; Bond:=16; Group:=32; Mol:=64; Outside:=1; Inside:=2; Bothside:=Outside+Inside;
 %-------------------------------------------------------------------------------------------------
 a_prn_s:=ASCII("("); a_prn_e:=ASCII(")"); a_brc_s:=ASCII("{"); a_brc_e:=ASCII("}");
-a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(",");   a_equ:=ASCII("=");
-a_ast:=ASCII("*"); a_sls:=ASCII("/");  a_gtn:=ASCII("<");   a_ltn:=ASCII(">");  a_and:=ASCII("&");
-a_dol:=ASCII("$"); a_hsh:=ASCII("#");  a_hat:=ASCII("^");   a_tld:=ASCII("~");  a_bqt:=ASCII("`");
-a_cln:=ASCII(":"); a_amk:=ASCII("@");  a_zero:=ASCII("0");  a_nine:=ASCII("9"); a_qut:=ASCII("'");
+a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("=");
+a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&");
+a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`");
+a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'");
 a_bar:=ASCII("|"); a_plus:=ASCII("+"); a_minus:=ASCII("-");
-%--------------------------------------------------------------------------------------------------
+cC:="C"; cH:="H"; cO:="O"; cN:="N"; cS:="S"; cF:="F"; cP:="P"; 
+%-------------------------------------------------------------------------------------------------
 let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
-def ]]]=] ] ] enddef;
-%--------------------------------------------------------------------------------------------------
-primarydef a at b = fat(a,b) enddef;
-def fat(expr a,b)= mposition:=b; a enddef;
-def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef;
+let ISP=intersectionpoint; def ]]]=] ] ] enddef;
+%-------------------------------------------------------------------------------------------------
+def ext(text t)= sw_ext_all:=1; def EXT_ALL = t enddef; enddef;
 def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
 vardef frac primary n= n-floor n enddef;
 vardef iif(expr a,b,c)=if a: b else: c fi enddef;
 vardef subc(expr i,s)= substring(i-1,i) of s enddef;
 vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef;
+%-------------------------------------------------------------------------------------------------
 def wpcs expr n= withpen pencircle scaled n enddef;
 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;
 %-------------------------------------------------------------------------------------------------
-vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef;
-vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef;
+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)= fsr(n)(decimal(s)) enddef;
 vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef;
-def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef;
+def printf expr s= write s to file_output enddef;
+def warning(expr s)= message "% "&decimal(fig_num)&fdr(3)(incr warning_cnt)&")"&s; enddef;
 %=================================================================================================
-color color_list[];
-for i=1 upto 100: colorA[i]:=colorB[i]:=0; endfor
 prologues:=3;
 warningcheck:=0;
-default_data_file:="mcf_data_base.mcf";
-default_temp_file:="temp.mcf";
-mpfont:="uhvr8r";
-atomfont:="draw";
-defaultfont:=mpfont;
+default_data_file:="mcf_data_base.mcf"; default_temp_file:="temp.mcf";
+mpfont:="uhvr8r"; atomfont:="draw"; defaultfont:=mpfont;
 %--default ahangle=45---------------------------------------------------------------------
 if ahangle=0:  outputformat:="eps";                     % eps format(.mps)
 ef ahangle=1:  outputformat:="png"; hppp:=vppp:=0.12;   % png format(600dpi)
@@ -114,8 +106,7 @@
 ef ahlength=7:  sw_output:=Report;                      % output report
 fi
 %-- default bboxmargin=2------------------------------------------------------------------
-if bboxmargin=1: proc_end:=1;                         % output first font only
-ef bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));)
+if bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));)
 ef bboxmargin=4: sw_output:=Fig+Calc;
   ext(defaultfont:=mpfont; defaultscale:=.3;
   label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));)
@@ -125,12 +116,7 @@
 else:                                   outputtemplate:="%j-%3c."&outputformat;
 fi
 %-----------------------------------------------------------------------------------------
-def printf expr s= write s to file_name_output enddef;
-vardef totalweight expr a= 0 enddef;
-def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef;
-%-----------------------------------------------------------------------------------------
 if sw_output>=Info:
-  if bboxmargin=1: message "* output first font only"; fi
   message "* jobname="&jobname;
   message "* numbersystem="&numbersystem;
   if (ahlength=1)or(ahlength=2):
@@ -155,23 +141,17 @@
 clearit;
 %--------------------------------------------------------------------------------------------------
 ?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=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_hashgap_bond:=0.12;   ratio_hash_black:=0.4;   ratio_wedge_bond:=0.12;
-ratio_atomgap_atom:=0.04;
-offset_thickness:=0.2; offset_bond_gap:=0.3; offset_hash_gap:=0.1;
-offset_atom:=0.8; offset_wedge:=0.4; thickness_frame:=0.2;
+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_hashgap_bond:=0.12; ratio_hash_black:=0.4; ratio_wedge_bond:=0.12; ratio_atomgap_atom:=0.04;
+offset_thickness:=0.2; offset_bond_gap:=0.3; offset_hash_gap:=0.1; offset_atom:=0.8;
+offset_wedge:=0.4; thickness_frame:=0.2;
 max_blength:=10mm; blength:=mangle:=0; max_labelsize:=20mm; dottedline_gap:=1.5;
 %--------------------------------------------------------------------------------------------------
 fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5);
 %==================================================================================================
 bboxmargin:=0; % 2bp => 0
-ahangle:=45;
-ahlength:=4;
-defaultsize:=8;
-defaultscale:=1;
-labeloffset:=3;
-ext_defaultline:=0.5;
+ahangle:=45; ahlength:=4; defaultsize:=8; defaultscale:=1; labeloffset:=3; ext_defaultline:=0.5;
 lonepairdiam:=lonepairspace:=circlediam:=circlepen:=0;
 %==================================================================================================
 parts_emb_start:=1000;     % 1001 => 2000   for embedded parts (max 1900)
@@ -181,22 +161,19 @@
 %--------------------------------------------------------------------------------------------------
 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,
-  _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env,
-  _set_colorA,_set_colorB,_group_si,_group_dm,_group_wf,_group_zf,
-  _set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric,
-  _jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,_len_e,_len_ss,_len_ee,
-  _group_s,_group_e,_rest,_charge,_from,_until,
+  _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env,_set_colorA,_set_colorB,  _group_si,_group_dm,_group_wf,_group_zf,_set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,
+  _tmp_rot,_fuse,_size_atom,_numeric,_jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,
+  _len_e,_len_ss,_len_ee,_group_s,_group_e,_rest,_charge,_from,_until,
   si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,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_expand,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_abbreviate,
-  ratio_atom_bond,ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond,
-  ratio_hash_black,ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom,
-  lonepairdiam,lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap,
-  offset_bond_gap,thickness_frame,offset_thickness,
-  numbering_start,numbering_end,defaultsize,defaultscale,labeloffset,mangle,blength,
-  fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap,
+  sw_numbering,sw_expand,sw_output,sw_ext_all,sw_frame,sw_trimming,sw_abbreviate,ratio_atom_bond,
+  ratio_thickness_bond,ratio_char_bond,ratio_chain_ring,ratio_bondgap_bond,ratio_hash_black,
+  ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom,lonepairdiam,
+  lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap,offset_bond_gap,
+  thickness_frame,offset_thickness,numbering_start,numbering_end,defaultsize,defaultscale,
+  labeloffset,mangle,blength,fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap,
   Me,Et,CH3,NH,NH2,NO,NO2,OH,CHO,COOH,CN,SH,!CH3,!NH2,!NO2,!OH,!CHO,!COOH,!CN,!SH
 enddef;
 %--------------------------------------------------------------------------------------------------
@@ -203,9 +180,9 @@
 def init_par(text t)=
   nA:=nB:=nC:=0;
   for list=t:
-    if     numeric list: nA:=nA+1; save_num[nA]:=list;
-    elseif pair list:    nB:=nB+1; save_pair[nB]:=list;
-    elseif string list:  nC:=nC+1; save_str[nC]:=list;
+    if numeric list: nA:=nA+1; save_num[nA]:=list;
+    ef pair list:    nB:=nB+1; save_pair[nB]:=list;
+    ef string list:  nC:=nC+1; save_str[nC]:=list;
     fi
   endfor
 enddef;
@@ -213,9 +190,9 @@
 def store_par(text t)=
   nA:=nB:=nC:=0;
   for list=t:
-    if     numeric list: nA:=nA+1; if save_num[nA]<>list:  save_num[nA]:=list; fi
-    elseif pair list:    nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi
-    elseif string list:  nC:=nC+1; if save_str[nC]<>list:  save_str[nC]:=list; fi
+    if numeric list: nA:=nA+1; if save_num[nA]<>list:  save_num[nA]:=list; fi
+    ef pair list:    nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi
+    ef string list:  nC:=nC+1; if save_str[nC]<>list:  save_str[nC]:=list; fi
     fi
   endfor
 enddef;
@@ -223,9 +200,9 @@
 def restore_par(text t)=
   nA:=nB:=nC:=0;
   forsuffixes list=t:
-    if    numeric list: nA:=nA+1; if list<>save_num[nA]:  list:=save_num[nA]; fi
-    elseif pair   list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi
-    elseif string list: nC:=nC+1; if list<>save_str[nC]:  list:=save_str[nC]; fi
+    if numeric list: nA:=nA+1; if list<>save_num[nA]:  list:=save_num[nA]; fi
+    ef pair    list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi
+    ef string  list: nC:=nC+1; if list<>save_str[nC]:  list:=save_str[nC]; fi
     fi
   endfor
 enddef;
@@ -232,51 +209,45 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def beginfigm(text s)=
   begingroup
-  save ',f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,temp_tag,info_cnt,
-        mc,info,file_name_input,bond_cnt,warning_cnt,hideH_cnt,bondC,filter_s;
-  string info[],mc[],mc,file_name_input,temp_tag,filter_s;
+  save ',f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,info_cnt,group_num,info_s,bond_cntA,
+       warning_cnt,hideH_cnt,filter_s,mc_indent,cntM,cntA,cntB,minX,minY,maxX,maxY,posA,posM,hideH,       lineB,sB,eB,angB,angA,lenB,angX,numS,sumA,bond_num,wdM,htM,chargeA,addA,add_rot,cal_FM,
+       cal_MW,cal_MI,inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,inf_USE,inf_EXA,inf_EXB,inf_MW;
+  numeric mc_indent[],hideH[],lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],sumA[],
+          bond_num[],wdM[],htM[],chargeA[],addA[],add_rot[];
+  pair posA[],posM[][];
+  string info_s[],filter_s,cal_FM,cal_MW,cal_MI,inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS,
+         inf_USE,inf_EXA,inf_EXB,inf_MW;
   %------------------------------------------------------------------------------------------------
-  def ext=ext_to_font enddef;
-  def add=add_to_molecule enddef;
-  def '=read_ud enddef;
+  def ext=ext_to_fig enddef; def add=add_to_molecule enddef; def '=read_ud enddef;
   %------------------------------------------------------------------------------------------------
   inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_Cat:=inf_EXA:=inf_EXB:="-";
-  mc:=temp_tag:=cal_MW:=cal_MI:=cal_FM:=filter_s:="";
-  file_name_input:=default_data_file;
+  mc:=temps:=cal_MW:=cal_MI:=cal_FM:=filter_s:="";
+  file_input:=default_data_file;
   %------------------------------------------------------------------------------------------------
-  parts_cnt:=parts_usr_start;
-  parts_int:=parts_int_start;
+  parts_cnt:=parts_usr_start; parts_int:=parts_int_start;
   %------------------------------------------------------------------------------------------------
-  char_num:=char_num+1;
   store_par(parameter_list);
-  f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=0;
+  fig_num:=fig_num+1; f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=0;
   %------------------------------------------------------------------------------------------------
   for list=s:
     at_colon:=scan_char(":",list,0,1);
     if at_colon=1:
-      fw_n:=scan_char(" ",list,1,2);
-      bw_n:=scan_char(" ",list,-1,2);
-      mc_row:=mc_row+1;
-      mc_indent[mc_row]:=fw_n-2;
-      mc[mc_row]:=substring (fw_n-1,bw_n) of list;
-      mc:=mc&mc[mc_row];
+      fw_n:=scan_char(" ",list,1,2); bw_n:=scan_char(" ",list,-1,2);
+      mc_row:=mc_row+1; mc_indent[mc_row]:=fw_n-2;
+      mc[mc_row]:=substring(fw_n-1,bw_n) of list; mc:=mc&mc[mc_row];
     ef at_colon>=1:
-      info_cnt:=info_cnt+1; info[info_cnt]:=list;
-      tag_s:=substring (0,at_colon-1) of list;
-      var_s:=substring (at_colon,length(list)) of list;
-      if tag_s="f":
-        if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf";
-        else:                          file_name_input:=var_s;
-        fi
-      ef tag_s="t":  temp_tag:=var_s;
-      ef tag_s="v":  pickup_data_unit(temp_tag,var_s,1);
-      ef tag_s="v+": pickup_data_unit(temp_tag,var_s,0);
-      else: if known scantokens("inf_"&tag_s): scantokens("inf_"&tag_s):=var_s; fi
+      info_cnt:=info_cnt+1; info_s[info_cnt]:=list;
+      sT:=substring(0,at_colon-1) of list; sV:=substring(at_colon,length(list)) of list;
+      if sT="f":  if scan_char(".",sV,0,1)=0: file_input:=sV&".mcf"; else: file_input:=sV; fi
+      ef sT="t":  temps:=sV;
+      ef sT="v":  pickup_data_unit(temps,sV,1);
+      ef sT="v+": pickup_data_unit(temps,sV,0);
+      else: if known scantokens("inf_"&sT): scantokens("inf_"&sT):=sV; fi
       fi
     fi
   endfor
   %------------------------------------------------------------------------------------------------
-  mol_stru[0]:=nullpicture;
+  mol_pic[0]:=nullpicture;
 enddef;
 %==================================================================================================
 def endfigm=
@@ -283,8 +254,10 @@
   if f_EOF=0:
     %--------------------------------------------------------------------------------------------
     if scan_bit(sw_output,Fig):
+      beginfig(fig_num)
+      %------------------------------------------------------------------------------------------
       if cntM>=1:
-        if sw_ext_all=1: ext_to_font(EXT_ALL); fi
+        if sw_ext_all=1: ext_to_fig(EXT_ALL); fi
         if sw_trimming>=1:
           nA:=nC:=4095; nB:=nD:=-4095;
           for i=1 upto cntM:
@@ -293,8 +266,7 @@
             if ypart(posM[1][i])<nC: nC:=ypart(posM[1][i]); fi
             if ypart(posM[2][i])>nD: nD:=ypart(posM[2][i]); fi
           endfor
-          fig_wd:=nB-nA+2margin_lr;
-          fig_ht:=nD-nC+2margin_tb;
+          fig_wd:=nB-nA+2margin_lr; fig_ht:=nD-nC+2margin_tb;
           fsize:=(fig_wd,fig_ht);
           for i=1 upto cntM:
             posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC);
@@ -302,22 +274,20 @@
           endfor
         fi
         %----------------------------------------------------------------------------------------
-        beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht; chardp:=0;
-        if scan_bit(sw_frame,Outside): else: draw_corner((0,0),w,h,0.05); fi
-        if scan_bit(sw_frame,Outside): draw_frame((0,0),w,h,thickness_frame); fi
+        if scan_bit(sw_frame,Outside): draw_frame((0,0),fig_wd,fig_ht,thickness_frame);
+        else:                          draw_corner((0,0),fig_wd,fig_ht,0.05);
+        fi
         if scan_bit(sw_frame,Inside):
-          draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_frame);
+          draw_frame((margin_lr,margin_tb),fig_wd-2margin_lr,fig_ht-2margin_tb,thickness_frame);
         fi
         for i=1 upto cntM:
-          addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
+          addto currentpicture also mol_pic[i] shifted posM[0][i]; mol_pic[i]:=nullpicture;
           if scan_bit(sw_frame,Mol): ext(draw_frame(p[i],w[i],h[i],thickness_frame)) fi
         endfor
-        if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
-        %----------------------------------------------------------------------------------------
+        if f_ext=1: addto currentpicture also mol_pic[0]; mol_pic[0]:=nullpicture; fi
       else:
-        fig_wd:=xpart(fsize); fig_ht:=ypart(fsize);
-        beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht;
-        draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_frame;
+        draw_frame((0,0),fig_wd,fig_ht,thickness_frame);
+        draw (0,fig_ht)--(fig_wd,0) wpcs thickness_frame;
       fi
       %-----------------------------------------------------------------------------------------
       endfig;
@@ -325,9 +295,9 @@
     fi
     %-------------------------------------------------------------------------------------------
     if scan_bit(sw_output,Info):
-      if scan_bit(sw_output,Table):  proc_info_out(2);
-      ef scan_bit(sw_output,Mcode):  proc_info_out(3);
-      else:                          proc_info_out(1);
+      if scan_bit(sw_output,Table): proc_info_out(2);
+      ef scan_bit(sw_output,Mcode): proc_info_out(3);
+      else: proc_info_out(1);
       fi
     fi
     if scan_bit(sw_output,Mcode):  proc_mc_out(0); fi
@@ -341,38 +311,28 @@
   fi
   %---------------------------------------------------------------------------------------------
   restore_par(parameter_list);
-  if proc_end=1: scantokens("bye"); fi
   endgroup;
 enddef;
 %-------------------------------------------------------------------------------------------------
 def pickup_data_unit(expr t,v,f)=
   begingroup
-  save unit_cnt,f_end,semicol_cnt,f_match,var_n,tag_a,var_a,info_s;
-  string tag_a[],var_a[],info_s;
-  f_end:=unit_cnt:=semicol_cnt:=f_match:=inf_num:=0;
+  save unit_cnt,f_end,semic_cnt,f_match,var_n,tag_a,var_a,at_semic;
+  string tag_a[],var_a[];
+  numeric at_semic[];
+  f_end:=unit_cnt:=semic_cnt:=f_match:=inf_num:=0;
   if t="n": var_n:=scantokens(v); fi
   forever:
-    temps:=readfrom file_name_input;
-    if temps=EOF: f_EOF:=1; fi
-    exitif temps=EOF;
-    if subc(1,temps)="%":
-    ef (subc(1,temps)="+")and(subc(2,temps)<>"-"):
-      unit_cnt:=unit_cnt+1;
-      if v="*": f_match:=1;
-      ef t="n": if unit_cnt=var_n: f_match:=1; fi
-      fi
+    sS:=readfrom file_input; if sS=EOF: f_EOF:=1; fi exitif sS=EOF;
+    if subc(1,sS)="%":
+    ef (subc(1,sS)="+")and(subc(2,sS)<>"-"):
+      unit_cnt:=unit_cnt+1; if v="*": f_match:=1; ef t="n": if unit_cnt=var_n: f_match:=1; fi fi
       if f_match=1:
         forever:
-          temps:=readfrom file_name_input;
-          if temps=EOF: f_EOF:=1; fi
-          exitif temps=EOF;
-          exitif subc(1,temps)="+";
-          if subc(1,temps)<>"%":
-            mc_row:=mc_row+1;
-            fw_n:=scan_char(" ",temps,1,1);
-            mc_indent[mc_row]:=fw_n-1;
-            mc[mc_row]:=substring (fw_n-1,length(temps)) of temps;
-            mc:=mc&mc[mc_row];
+          sS:=readfrom file_input; 
+          if sS=EOF: f_EOF:=1; fi exitif sS=EOF; exitif subc(1,sS)="+";
+          if subc(1,sS)<>"%":
+            fw_n:=scan_char(" ",sS,1,1); mc_row:=mc_row+1; mc_indent[mc_row]:=fw_n-1;
+            mc[mc_row]:=substring(fw_n-1,length(sS)) of sS; mc:=mc&mc[mc_row];
           fi
         endfor
         for i=1 upto inf_num:
@@ -381,28 +341,24 @@
         f_end:=1;
       else:
         forever: 
-          temps:=readfrom file_name_input;
-          if temps=EOF: f_EOF:=1; fi
-          exitif temps=EOF;
-          exitif (subc(1,temps)="+")and(subc(2,temps)="-");
+          sS:=readfrom file_input; if sS=EOF: f_EOF:=1; fi
+          exitif sS=EOF; exitif (substring(0,2) of sS)="+-";
         endfor
       fi
     else:
-      semicol_cnt:=count_semicol(temps);
-      inf_num:=semicol_cnt+1;
+      semic_cnt:=split_semic(sS); inf_num:=semic_cnt+1;
       for i=1 upto inf_num:
-        if i<=semicol_cnt: info_s:=substring (at_semicol[i-1],at_semicol[i]-1) of temps;
-        else:              info_s:=substring (at_semicol[semicol_cnt],length(temps)) of temps;
+        if i<=semic_cnt: sI:=substring(at_semic[i-1],at_semic[i]-1) of sS;
+        else: sI:=substring(at_semic[semic_cnt],length(sS)) of sS;
         fi
-        at_colon:=scan_char(":",info_s,0,1);
-        tag_a[i]:=substring (0,at_colon-1) of info_s;
-        var_a[i]:=substring (at_colon,length(info_s)) of info_s;
+        nA:=scan_char(":",sI,0,1);
+        tag_a[i]:=substring(0,nA-1) of sI; var_a[i]:=substring(nA,length(sI)) of sI;
         if t=tag_a[i]: if v=var_a[i]: f_match:=1; fi fi
       endfor
     fi
     exitif f_end=1;
   endfor
-  if f=1: closefrom file_name_input; fi
+  if f=1: closefrom file_input; fi
   endgroup;
 enddef;
 %--------------------------------------------------------------------------------------------------
@@ -409,32 +365,17 @@
 vardef scan_bit(expr n,b)= if b>=1: odd(floor(n/b)) else: odd(floor((frac n)/b)) fi enddef;
 %--------------------------------------------------------------------------------------------------
 vardef scan_char(expr c,s,d,n)=
-  save k,n_s;
-  n_s:=0;
-  if d=0:  for k=n upto length(s):   if subc(k,s)=c:  n_s:=k; fi exitif n_s>0; endfor
-  ef d=1:  for k=n upto length(s):   if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor
-  ef d=-1: for k=length(s) downto n: if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor
+  nN:=0;
+  if d=0:  for i=n upto length(s):   if subc(i,s)=c:  nN:=i; fi exitif nN>0; endfor
+  ef d=1:  for i=n upto length(s):   if subc(i,s)<>c: nN:=i; fi exitif nN>0; endfor
+  ef d=-1: for i=length(s) downto n: if subc(i,s)<>c: nN:=i; fi exitif nN>0; endfor
   fi
-  n_s
+  nN
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def set_def_MC=
-  save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_def_MC;
-  inside_def_MC:=1;
-  pair |,||,##;
-  | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e);
-  _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv;
-  let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq;
-  def @$ == jump_atom_abs enddef; def { == read_number( enddef; let } == ); def '==read_id enddef;
-  def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef;
-  def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef;
-  def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef;
-  def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef;
-enddef;
-%-------------------------------------------------------------------------------------------------
-vardef '(text TXT)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(TXT); parts_cnt enddef;
-vardef read_id(text TXT)=read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef;
-vardef read_ud(text TXT)=read_mcf(incr parts_cnt)(dum,dum,|,TXT,(_com,_rest)); parts_cnt enddef;
+vardef '(text t)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(t); parts_cnt enddef;
+vardef read_id(text t)=read_mcf(incr parts_cnt)(|,#rate_cr,t,##,(_com,_rest)); parts_cnt enddef;
+vardef read_ud(text t)=read_mcf(incr parts_cnt)(dum,dum,|,t,(_com,_rest)); parts_cnt enddef;
 vardef abs_adress primary n = if n LT 0:: (n+360)-4095 else:: n-4095 fi enddef;
 primarydef a from_until b = (_from,a),(_until,b) enddef;
 tertiarydef a op_equ b = if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; 
@@ -461,24 +402,37 @@
 %-------------------------------------------------------------------------------------------------
 def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef;
 %=================================================================================================
-def read_mcf(expr n)(text TXT)=
+def read_mcf(expr n)(text t)=
   begingroup
-  save list_cnt,nCP;
-  if unknown inside_def_MC:: set_def_MC fi
-  nCP:=list_cnt:=0;
-  for list==TXT::
+  save nCP;
+  if unknown inside_MC::
+    save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_MC;
+    pair |,||,##;
+    | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e);
+    _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv;
+    let = ==op_equ; let : == op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq;
+    def { == read_number( enddef; let } == ); 
+    def @$ == jump_atom_abs enddef; def ' == read_id enddef;
+    def < == rot_angle enddef;  def @ == jump_atom enddef;  def & == cyc_atom enddef;
+    def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef;
+    def / == group_si enddef;   def // == group_dm enddef;  def */ == group_wf enddef;
+    def /* == group_zf enddef;  def */* == group_wv enddef; def ** == group_nb enddef;
+    inside_MC:=1;
+  fi
+  %----------------------------------------------------------------------------------------------
+  nCP:=0;
+  for list==t::
     if known list::
-      list_cnt:=list_cnt+1;
       if pair list:: nCP:=nCP+1; comD[n][nCP]:=xpart(list); parD[n][nCP]:=ypart(list);
-      elseif numeric list::
-        if     list==_nop:: message "unknown command in "AND decimal(n);
-        elseif list>=parts_emb_start::
+      ef numeric list::
+        if list==_nop:: message "unknown command in "AND decimal(n);
+        ef list>=parts_emb_start::
           for i==1 upto cntD[list]::
             nCP:=nCP+1; comD[n][nCP]:=comD[list][i]; parD[n][nCP]:=parD[list][i];
           endfor 
         else:: nCP:=nCP+1; comD[n][nCP]:=_mk_bond; parD[n][nCP]:=list;
         fi
-      elseif string list::
+      ef string list::
         str_cnt:=str_cnt+1; strD[str_cnt]:=list;
         nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt;
       fi
@@ -489,21 +443,18 @@
   endgroup
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef read_number(text TXT)=
-  save ','`,:,nA,nB,nC;
-  let : == from_until;
-  def ' == +0.5 enddef;
-  def '` == +0.5` enddef;
-  parts_int:=parts_int+1;
+vardef read_number(text t)=
+  save :,','`;
+  let : == from_until; def ' == +0.5 enddef; def '` == +0.5` enddef; parts_int:=parts_int+1;
   nA:=0;
-  for list==TXT::
+  for list==t::
     if known list::
       if numeric list::
         if list==_nop:: message "unknown command in "AND decimal(parts_int);
         else:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=list;
         fi
-      elseif pair list::
-        if xpart(list)==_from::  nB:=ypart(list);
+      ef pair list::
+        if xpart(list)==_from:: nB:=ypart(list);
         ef xpart(list)==_until:: nC:=ypart(list);
            for i==nB upto nC::
              nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=i;
@@ -514,8 +465,7 @@
     else:: message "unknown command in "AND decimal(parts_int);
     fi
   endfor
-  cntD[parts_int]:=nA;
-  parts_int    %------- Retern value -------
+  cntD[parts_int]:=nA; parts_int
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def fuse_ring(expr a,b) =
@@ -526,270 +476,203 @@
 %-------------------------------------------------------------------------------------------------
 def fuse_ring_bonds(expr a,b,c) =
   CP(_jp_bond,xpart(a)) CP(_rot_ang,180) CP(_com,_len_s)
-  if     b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor
-  elseif b==5:: if     c==2:: CP(_chg_len,1.25) CP(_mk_bond,80)
-                elseif c==3:: CP(_chg_len,1.1)  CP(_mk_bond,78) CP(_mk_bond,72) fi
-  elseif b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi
-  CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi
+  if b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor
+  ef b==5:: if c==2:: CP(_chg_len,1.25) CP(_mk_bond,80)
+            ef c==3:: CP(_chg_len,1.1)  CP(_mk_bond,78) CP(_mk_bond,72) fi
+  ef b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi
+      CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 def fuse_ring_size(expr a,b,c) =
   CP(_jp_bond,a) CP(_rot_ang,180) CP(_com,_len_s) CP(_chg_len,c DIV 10)
-  if     b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9))
-  elseif b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor
-  elseif b==7:: CP(_mk_bond,360 DIV 7-(c-8))
+  if b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9))
+  ef b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor
+  ef b==7:: CP(_mk_bond,360 DIV 7-(c-8))
                 for i==1 upto 4:: CP(_mk_bond,360 DIV 7+((c-8) DIV 2.5)) endfor
-  elseif b==8:: CP(_mk_bond,45-(c-8))  for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi
+  ef b==8:: CP(_mk_bond,45-(c-8))  for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi
   CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi
 enddef;
 %=================================================================================================
 vardef change_bond(expr a,b) =
-  save nCP;
-  if known b::
-  parts_int:=parts_int+1;
-  nCP:=0;
-  if numeric b::
-    if     (b>=si)and(b<=bd_)::
-      if a>=parts_int_start::
-        for i==1 upto cntD[a]::
-          if comD[a][i]==_numeric::
-            if frac parD[a][i]==0::
-                       com_par(_set_adr,parD[a][i]) com_par(_set_line,b)
-            ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr)
-            ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl)
-            else::     com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b)
-            fi
-          fi
-        endfor
-      else:: com_par(_set_adr,a) com_par(_set_line,b)
-      fi
-    elseif (b>=?3)and(b<=?8[15])::
-      if numeric a::
+  if known b:: parts_int:=parts_int+1; nC:=0;
+    if numeric b::
+      if     (b>=si)and(b<=bd_)::
         if a>=parts_int_start::
           for i==1 upto cntD[a]::
             if comD[a][i]==_numeric::
-              if b==Ph1:: fuse_ring(parD[a][i],6)
-                  CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
-              ef b==Ph2:: fuse_ring(parD[a][i],6)
-                  CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
-                  CP(_set_adr,-5) CP(_set_line,dl)
-              ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11)
-              ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11)
-              ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11)
-              ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11)
-              else:: fuse_ring(parD[a][i],b-?3+3)
+              if frac parD[a][i]==0:: com_par(_set_adr,parD[a][i]) com_par(_set_line,b)
+              ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr)
+              ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl)
+              else::     com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b)
               fi
-            else::
-              if b==?6:: 
-                if (frac comD[a][i]==0)and(frac parD[a][i]==0)::
-                  fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
-                ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3)
-                ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3)
-                else::                  fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2)
+            fi
+          endfor
+        else:: com_par(_set_adr,a) com_par(_set_line,b)
+        fi
+      elseif (b>=?3)and(b<=?8[15])::
+        if numeric a::
+          if a>=parts_int_start::
+            for i==1 upto cntD[a]::
+              if comD[a][i]==_numeric::
+                if b==Ph1:: fuse_ring(parD[a][i],6)
+                    CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
+                ef b==Ph2:: fuse_ring(parD[a][i],6)
+                    CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+                    CP(_set_adr,-5) CP(_set_line,dl)
+                ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11)
+                ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11)
+                ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11)
+                ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11)
+                else:: fuse_ring(parD[a][i],b-?3+3)
                 fi
-              ef b==?5::
-                if (frac comD[a][i]==0)and(frac parD[a][i]==0)::
-                  fuse_ring_bonds((comD[a][i],parD[a][i]),5,3)
-                ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2)
-                ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2)
+              else::
+                if b==?6:: 
+                  if (frac comD[a][i]==0)and(frac parD[a][i]==0)::
+                    fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
+                  ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3)
+                  ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3)
+                  else::                  fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2)
+                  fi
+                ef b==?5::
+                  if (frac comD[a][i]==0)and(frac parD[a][i]==0)::
+                                          fuse_ring_bonds((comD[a][i],parD[a][i]),5,3)
+                  ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2)
+                  ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2)
+                  fi
+                ef b==?4::    fuse_ring_bonds((comD[a][i],parD[a][i]),4,2)
+                ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3)
+                ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2)
+                ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2)
+                ef b==Ph1::   fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
+                                CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+                ef b==Ph2::   fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
+                                CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
                 fi
-              ef b==?4::    fuse_ring_bonds((comD[a][i],parD[a][i]),4,2)
-              ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3)
-              ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2)
-              ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2)
-              ef b==Ph1::   fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
-                              CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
-              ef b==Ph2::   fuse_ring_bonds((comD[a][i],parD[a][i]),6,4)
-                              CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
               fi
+            endfor
+          else::
+            if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl)
+                                       CP(_set_adr,-4) CP(_set_line,dl)
+            ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl)
+                          CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl)
+            ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11)
+            ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11)
+            ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11)
+            ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11)
+            else:: fuse_ring(a,b-?3+3)
             fi
-          endfor
-        else::
-          if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl)
-                                     CP(_set_adr,-4) CP(_set_line,dl)
-          ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl)
-                        CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl)
-          ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11)
-          ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11)
-          ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11)
-          ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11)
-          else:: fuse_ring(a,b-?3+3)
           fi
+        ef pair a::
+          if b==?6::    fuse_ring_bonds(a,6,4)
+          ef b==?5::    fuse_ring_bonds(a,5,3)
+          ef b==?4::    fuse_ring_bonds(a,4,2)
+          ef b==?6[3]:: fuse_ring_bonds(a,6,3)
+          ef b==?6[2]:: fuse_ring_bonds(a,6,2)
+          ef b==?5[2]:: fuse_ring_bonds(a,5,2)
+          ef b==Ph1::   fuse_ring_bonds(a,6,4)
+                          CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+          ef b==Ph2::   fuse_ring_bonds(a,6,4)
+                          CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
+          fi
         fi
-      ef pair a::
-        if b==?6::    fuse_ring_bonds(a,6,4)
-        ef b==?5::    fuse_ring_bonds(a,5,3)
-        ef b==?4::    fuse_ring_bonds(a,4,2)
-        ef b==?6[3]:: fuse_ring_bonds(a,6,3)
-        ef b==?6[2]:: fuse_ring_bonds(a,6,2)
-        ef b==?5[2]:: fuse_ring_bonds(a,5,2)
-        ef b==Ph1::   fuse_ring_bonds(a,6,4)
-                        CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
-        ef b==Ph2::   fuse_ring_bonds(a,6,4)
-                        CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
-        fi
       fi
+    elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC)
     fi
-  elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC)
+    cntD[parts_int]:=nC; parts_int
   fi
-  cntD[parts_int]:=nCP;
-  parts_int    %------- Retern value -------
-  fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 vardef change_atom(expr a,b)=
-  save nCP;
-  if known b::
-  parts_int:=parts_int+1;
-  nCP:=0;
-  if numeric b::
-    if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b)
-    ef b==NH::  CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi
-                CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e)
-    ef b==N!::  CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e)
-    ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e)
-    ef b==??::  CP(_com,_group_s) CP(_tmp_rot,35)  CPx(a)(_group_si,_)
-                CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e)
-    ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35)  CPx(a)(_group_dm,O)
-                CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e)
-    ef b==SO::  CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e)
-    ef b==n_::  CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e)
-    ef b==p_::  CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e)
+  if known b:: parts_int:=parts_int+1; nC:=0;
+    if numeric b::
+      if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b)
+      ef b==NH::  CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi
+                  CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e)
+      ef b==N!::  CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e)
+      ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e)
+      ef b==??::  CP(_com,_group_s) CP(_tmp_rot,35)  CPx(a)(_group_si,_)
+                  CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e)
+      ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35)  CPx(a)(_group_dm,O)
+                  CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e)
+      ef b==SO::  CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e)
+      ef b==n_::  CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e)
+      ef b==p_::  CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e)
+      fi
+    ef pair b::
+      CP(_com,_group_s)
+      if a>=parts_emb_start::
+        for i==1 upto cntD[a]::
+          if comD[a][i]==_numeric::
+            if xpart(b)==_group_wf::
+              if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b))
+              else:: CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b)) fi
+            ef xpart(b)==_group_zf::
+              if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b))
+              else:: CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b)) fi
+            else:: CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b)) fi
+          else:: CP(comD[a][i],parD[a][i]) fi
+        endfor
+      else:: CP(_set_adr,a) CP(xpart(b),ypart(b))
+      fi
+      CP(_com,_group_e)
+    ef color b::  color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC)
     fi
-  ef pair b::
-    CP(_com,_group_s)
-    if a>=parts_emb_start::
-      for i==1 upto cntD[a]::
-        if comD[a][i]==_numeric::
-          if xpart(b)==_group_wf::
-            if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b))
-            else::                  CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b))
-            fi
-          ef xpart(b)==_group_zf::
-            if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b))
-            else::                  CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b))
-            fi
-          else::
-            CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b))
-          fi
-        else::
-          CP(comD[a][i],parD[a][i])
-        fi
-      endfor
-    else:: CP(_set_adr,a) CP(xpart(b),ypart(b))
-    fi
-    CP(_com,_group_e)
-  ef color b::  color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC)
+    cntD[parts_int]:=nC; parts_int
   fi
-  cntD[parts_int]:=nCP;
-  parts_int  %------- Retern value -------
-  fi
 enddef;
 %-------------------------------------------------------------------------------------------------
-def com_par(expr a,b)= nCP:=nCP+1; comD[parts_int][nCP]:=a; parD[parts_int][nCP]:=b; enddef;
+def com_par(expr a,b)= nC:=nC+1; comD[parts_int][nC]:=a; parD[parts_int][nC]:=b; enddef;
 %-------------------------------------------------------------------------------------------------
 def com_par_ex(expr f)(expr c)(expr a,b)=
   if c>=parts_emb_start::
     for i==1 upto cntD[c]::
       if comD[c][i]==_numeric:: com_par(_set_adr,parD[c][i]) com_par(a,b)
-      ef f==1::                 com_par(comD[c][i],parD[c][i]) fi
+      ef f==1:: com_par(comD[c][i],parD[c][i]) fi
     endfor
   else:: com_par(_set_adr,c) com_par(a,b)
   fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def puts(expr POS)(expr STR)=
-  begingroup
-  save temp_c,temp_p;
-  pair temp_p;
-  string temp_c;
-  temp_p:=POS;
-  nC:=defaultscale*defaultsize;
-  if defaultfont="draw":
-    for i=1 upto length(STR):
-      temp_c:=subc(i,STR);
-      draw_char(temp_c,temp_p,nC,ratio_thickness_char*nC,0);
-      temp_p:=temp_p+(nC*tbl_char_wd[ASCII(temp_c)],0);
-    endfor
-  else:
-    for i=1 upto length(STR):
-      temp_c:=subc(i,STR);
-      temp_picture:=temp_c infont defaultfont scaled defaultscale;
-      addto currentpicture also temp_picture shifted temp_p;
-      temp_p:=temp_p+(lrcorner temp_picture-llcorner temp_picture);
-    endfor
-  fi
-  endgroup
-enddef;
-%=================================================================================================
 def ext_setup=
   pickup pencircle scaled ext_defaultline;
-  dotlabeldiam:=3;
-  labeloffset:=3;
-  save em;
-  em=defaultscale*defaultsize;
-  defaultfont:=mpfont;
+  dotlabeldiam:=3; labeloffset:=3; em:=defaultscale*defaultsize; defaultfont:=mpfont;
+  let ** = scaled; let << = rotated; let => = shifted; __ = (1,0); An:=cntA; Bn:=cntB;
+  primarydef a /* b = point b of a enddef;
 enddef;
 %-------------------------------------------------------------------------------------------------
-def add_to_molecule(text TXT)=
+def add_to_molecule(text t)=
   begingroup
   save w,h,n,l,p,am,aw,A,B,plus,minus,lonepair,__,**,=>,<<,/*;
   numeric A[]dir,B[]up,A[]ang,B[]ang;
   pair __,p[],A[],B[]s,B[]e,B[]m,A[]up,A[]left,A[]right,A[]down,B[]up,B[]left,B[]right,B[]down;
   path B[];
+  def plus = circled_plus_add enddef; def minus = circled_minus_add enddef;
+  def lonepair = lone_pair_add enddef;
   ext_setup;
-  def plus     = circled_plus_add enddef;
-  def minus    = circled_minus_add enddef;
-  def lonepair = lone_pair_add enddef;
-  let ** = scaled;
-  let << = rotated;
-  let => = shifted;
-  __ = (1,0);
-  primarydef a /* b = point b of a enddef;
-  %----------------------------------------------
-  w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd;
-  p0:=(minX,minY);
-  An:=cntA; Bn:=cntB;
-  lonepairdiam:=0.3aw;
-  lonepairspace:=.7aw;
-  circlediam:=.6aw;
-  circlepen:=.2;
+  w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd; p0:=(minX,minY);
+  lonepairdiam:=0.3aw; lonepairspace:=.7aw; circlediam:=.6aw; circlepen:=.2;
   for i=1 upto cntA:
     A[i]:=posA[i]; A[i]ang:=angX[i]; A[i]up:=dir(angX[i]);
     A[i]left:=dir(angX[i]+90); A[i]right:=dir(angX[i]-90); A[i]down:=dir(angX[i]+180);
   endfor
   for i=1 upto cntB:
-    B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e];
-    B[i]:=B[i]s--B[i]e;
+    B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e]; B[i]:=B[i]s--B[i]e;
     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
-  TXT addto mol_stru[cntM] also currentpicture; clearit;
+  t addto mol_pic[cntM] also currentpicture; clearit;
   endgroup;
 enddef;
 %-------------------------------------------------------------------------------------------------
-def ext_to_font(text TXT)=
+def ext_to_fig(text t)=
   begingroup
   save w,h,An,Bn,wd,ht,n,p,am,aw,__,**,<<,=>,/*;
   pair __,p[];
-  let ** = scaled;
-  let << = rotated;
-  let => = shifted;
-  primarydef a /* b = point b of a enddef;
-  __ = (1,0);
-  %----------------------------------------------------------------------
   ext_setup;
-  w:=xpart(fsize);
-  h:=ypart(fsize);
-  An:=cntA;
-  Bn:=cntB;
-  w0:=w-2margin_lr;
-  h0:=h-2margin_tb;
-  p0:=(margin_lr,margin_tb);
-  aw:=atom_wd;
-  n:=cntM;
+  w:=xpart(fsize); h:=ypart(fsize);
+  w0:=w-2margin_lr; h0:=h-2margin_tb; p0:=(margin_lr,margin_tb); aw:=atom_wd; n:=cntM;
   for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor
-  TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1;
+  t addto mol_pic[0] also currentpicture; clearit; f_ext:=1;
   endgroup;
 enddef;
 %-------------------------------------------------------------------------------------------------
@@ -798,40 +681,39 @@
   image(draw fullcircle scaled nA wpcs nB;
         draw (-.5nA,0)--(.5nA,0) wpcs nB; draw (0,-.5nA)--(0,.5nA) wpcs nB;)
 enddef;
-%--------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
 vardef circled_minus_add=
   nA:=circlediam; nB:=circlepen;
   image(draw fullcircle scaled nA wpcs nB; draw (-.5nA,0)--(.5nA,0) wpcs nB;)
 enddef;
-%--------------------------------------------------------------------
-vardef lone_pair_add expr ANG=
-  image(draw (0,0) wpcs lonepairdiam; draw ((0,lonepairspace) rotated ANG) wpcs lonepairdiam;)
+%-------------------------------------------------------------------------------------------------
+vardef lone_pair_add expr n=
+  image(draw (0,0) wpcs lonepairdiam; draw ((0,lonepairspace) rotated n) wpcs lonepairdiam;)
 enddef;
 %=================================================================================================
-def MCat(expr FW,FH)(text TXT)=
-  save_mposition:=mposition; mposition:=(FW,FH); MC(TXT) mposition:=save_mposition;
-enddef;
+def MCat(expr w,h)(text t)= mpos:=mposition; mposition:=(w,h); MC(t) mposition:=mpos; enddef;
 %-------------------------------------------------------------------------------------------------
-def MC(text TXT)=
+def MC(text t)=
   begingroup
-  save f_bra,strAT,cnt_group,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT,
-       f_lenT,f_envT,temp_c,factor,m_wd,m_ht,temp_p,nH,nW;
-  string temp_c;
-  pair temp_p;
+  save f_bra,strAT,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT,angL,lenL,cpos,tpos,
+       f_lenT,f_envT,factor,m_wd,m_ht,raise_pos,slen,sdir,char_wd,char_ht,tcol,f_col,knownA,
+       markA,markB,saveA,saveB,bondL,lenT,lineT,angT,rotT,envT,envB,rate_cr,posBs,posBe,
+       f_char,group_par,group_cnt,group_com,colorA,colorB;
+  numeric f_char[],group_com[][],group_par[][],group_cnt[],colorA[],colorB[];
+  pair cpos,tpos,raise_pos,posBs,posBe;
+  path frameA[];
   %-----------------------------------------------------------------------------------------------
   if (sw_expand=1)or(scan_bit(sw_output,MOL2k))or(scan_bit(sw_output,MOL3k)):
-    expand_set; crR:=1; else: crR:=-ratio_chain_ring;
+    expand_set; rate_cr:=1; else: rate_cr:=-ratio_chain_ring;
   fi
-  cntA:=cntB:=cntC:=cnt_group:=0; strD[0]:="C"; str_cnt:=2000;
+  cntA:=cntB:=cntC:=group_num:=0; strD[0]:=cC; str_cnt:=2000;
   %-----------------------------------------------------------------------------------------------
-  fig_wd:=xpart(fsize);
-  fig_ht:=ypart(fsize);
-  margin_lr:=xpart(fmargin);
-  margin_tb:=ypart(fmargin);
+  fig_wd:=xpart(fsize); fig_ht:=ypart(fsize);
+  margin_lr:=xpart(fmargin); margin_tb:=ypart(fmargin);
   %===============================================================================================
-  read_mcf(0)(TXT,(_com,_term));
+  read_mcf(0)(t,(_com,_term));
   proc_bond_atom(0)(1);
-  if (cnt_group>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi
+  if (group_num>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi
   char_use_check;
   %-scaling---------------------------------------------------------------------------------------
   if     blength>1: blen:=blength;        proc_size_setup; proc_skeleton(0); proc_scaling;
@@ -845,11 +727,11 @@
       proc_skeleton(0); proc_scaling;
       if (mol_ht/mol_wd)>(m_ht/m_wd):
         if ypart(msize)>1: factor:=ypart(msize)/mol_ht;
-        else:              factor:=((fig_ht-2margin_tb)*ypart(msize))/mol_ht;
+        else: factor:=((fig_ht-2margin_tb)*ypart(msize))/mol_ht;
         fi
       else:
         if xpart(msize)>1: factor:=xpart(msize)/mol_wd;
-        else:              factor:=((fig_wd-2margin_lr)*xpart(msize))/mol_wd;
+        else: factor:=((fig_wd-2margin_lr)*xpart(msize))/mol_wd;
         fi
       fi
       exitif (factor>=1-eps)and(factor<=1+eps); blen:=blen*factor; proc_size_setup;
@@ -859,8 +741,8 @@
   %-----------------------------------------------------------------------------------------------
   for i=1 upto cntA:
     if addA[i]<>0:
-      temp_c:=char(addA[i]);
-      if temp_c="+": chargeA[i]:=1; elseif temp_c="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi
+      tempc:=char(addA[i]);
+      if tempc="+": chargeA[i]:=1; ef tempc="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi
     else: chargeA[i]:=0;
     fi
   endfor
@@ -867,17 +749,14 @@
   %===============================================================================================
   if scan_bit(sw_output,Fig):
     %-draw atom-----------------------------------------------------------------------------------
-    if sw_numbering=0: for i=1 upto cntA: draw_atom(i); endfor fi
+    if sw_numbering=0: for i=1 upto cntA: if numS[i]<>0: draw_atom(i); fi endfor fi
     %-draw add to atom----------------------------------------------------------------------------
     if (not scan_bit(sw_numbering,Atom))and(not scan_bit(sw_numbering,Bond)):
       for i=1 upto cntA:
         if addA[i]<>0:
           nA:=angX[i]+add_rot[i]; nC:=nA mod 90;
-          if numS[i]=0: nB:=.5atom_wd;
-          else:         nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i];
-          fi
-          temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
-          draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0);
+          if numS[i]=0: nB:=.5atom_wd; else: nB:=atom_wd; fi
+          draw_char(char(addA[i]),sfrt(posA[i],nB,nA));
         fi
       endfor
     fi
@@ -888,8 +767,7 @@
     if scan_bit(sw_numbering,Atom):
       for i=1 upto cntA:
         if (i>=numbering_start)and(i<=numbering_end):
-          defaultscale:=.18blen/defaultsize;
-          nH:=1.2defaultsize*defaultscale;
+          defaultscale:=.18blen/defaultsize; nH:=1.2defaultsize*defaultscale;
           if i<=9: nW:=nH; ef i<=99: nW:=1.3nH; else: nW:=1.9nH; fi
           erase fill unitsquare xscaled nW yscaled nH shifted (posA[i]-(nW/2,nH/2));
           draw unitsquare xscaled nW yscaled nH shifted (posA[i]-(nW/2,nH/2)) wpcs 0.1;
@@ -901,35 +779,25 @@
     if scan_bit(sw_numbering,Bond):
       for i=1 upto cntB:
         if (i>=numbering_start)and(i<=numbering_end):
-          defaultscale:=.18blen/defaultsize;
-          nH:=1.2defaultsize*defaultscale;
+          defaultscale:=.18blen/defaultsize; nH:=1.2defaultsize*defaultscale;
           if i<=9: nW:=nH; ef i<=99: nW:=1.3nH; else: nW:=1.9nH; fi
-          nH:=defaultsize*defaultscale; temp_p:=.5[posA[sB[i]],posA[eB[i]]];
-          erase fill unitsquare xscaled nW yscaled nH shifted (temp_p-(nW/2,nH/2));
-          draw unitsquare xscaled nW yscaled nH shifted (temp_p-(nW/2,nH/2)) wpcs 0.1;
-          label(decimal(i),temp_p);
+          nH:=defaultsize*defaultscale; tpos:=.5[posA[sB[i]],posA[eB[i]]];
+          erase fill unitsquare xscaled nW yscaled nH shifted (tpos-(nW/2,nH/2));
+          draw unitsquare xscaled nW yscaled nH shifted (tpos-(nW/2,nH/2)) wpcs 0.1;
+          label(decimal(i),tpos);
         fi
       endfor
     fi
     %---------------------------------------------------------------------------------------------
-    if xpart(mposition)>1: sftX:=xpart(mposition)-minX;
-    else:                  sftX:=margin_lr-minX+(fig_wd-mol_wd-2margin_lr)*xpart(mposition);
-    fi
-    if ypart(mposition)>1: sftY:=ypart(mposition)-minY;
-    else:                  sftY:=margin_tb-minY+(fig_ht-mol_ht-2margin_tb)*ypart(mposition);
-    fi
-    cntM:=cntM+1;
-    posM[0][cntM]:=(sftX,sftY);
-    posM[1][cntM]:=(minX+sftX,minY+sftY);
-    posM[2][cntM]:=(maxX+sftX,maxY+sftY);
-    wdM[cntM]:=mol_wd;
-    htM[cntM]:=mol_ht;
-    mol_stru[cntM]:=currentpicture;
+    if xpart(mposition)>1: nX:=xpart(mposition)-minX;
+    else: nX:=margin_lr-minX+(fig_wd-mol_wd-2margin_lr)*xpart(mposition); fi
+    if ypart(mposition)>1: nY:=ypart(mposition)-minY;
+    else: nY:=margin_tb-minY+(fig_ht-mol_ht-2margin_tb)*ypart(mposition); fi
+    cntM:=cntM+1; posM[0][cntM]:=(nX,nY);
+    posM[1][cntM]:=(minX+nX,minY+nY); posM[2][cntM]:=(maxX+nX,maxY+nY);
+    wdM[cntM]:=mol_wd; htM[cntM]:=mol_ht;
+    mol_pic[cntM]:=currentpicture;
     clearit;
-    if cntC>=1:
-    for i=1 upto cntA: if colorA[i]<>0: colorA[i]:=0; fi endfor
-    for i=1 upto cntB: if colorB[i]<>0: colorB[i]:=0; fi endfor
-    fi
   fi
   if sw_output>=Calc: proc_calc(0); fi
   endgroup;
@@ -937,51 +805,48 @@
 %-------------------------------------------------------------------------------------------------
 def add_group=
   if f_at=1: nE:=getA(adrT); check_adrA(nE); else: nE:=cntA+1; fi
-  cnt_group:=cnt_group+1; cnt_group[cnt_group]:=0;
-  store_group(_jp_absA,nE)
-  store_group(_com,_len_s)
+  group_num:=group_num+1; group_cnt[group_num]:=0;
+  store_group(_jp_absA,nE) store_group(_com,_len_s)
   if lineT<>nb: store_group(_tmp_line,lineT) fi
   if rotT<>0:   store_group(_rot_ang,rotT) fi
-  if lenT<>crR: store_group(_chg_len,lenT)
-  ef bondL<>crR: if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi
+  if lenT<>rate_cr: store_group(_chg_len,lenT)
+  ef bondL<>rate_cr:
+    if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi
   fi
   if envT<>hz:  store_group(_chg_env,envT) fi
   if lineT=nl:  store_group(_chg_len,_size_atom) store_group(_adj_ang,0) fi
   if lineT<>nb: store_group(_mk_bond,0) fi
-  for i=1 upto cntD[par]: store_group(comD[par][i],parD[par][i]) endfor 
-  store_group(_com,_len_e)
-  store_group(_chg_env,hz)
-  store_group(_com,_term)
+  for i=1 upto cntD[nP]: store_group(comD[nP][i],parD[nP][i]) endfor 
+  store_group(_com,_len_e) store_group(_chg_env,hz) store_group(_com,_term)
   if f_lineT=0: lineT:=si; fi
-  if f_lenT=0:  lenT:=crR; fi 
+  if f_lenT=0:  lenT:=rate_cr; fi 
   if f_rotT=0:  rotT:=0;   fi
   if f_envT=0:  envT:=hz;  fi
 enddef;
 %-------------------------------------------------------------------------------------------------
 def store_group(expr a,b)=
-  cnt_group[cnt_group]:=cnt_group[cnt_group]+1;
-  com_group[cnt_group][cnt_group[cnt_group]]:=a; par_group[cnt_group][cnt_group[cnt_group]]:=b;
+  group_cnt[group_num]:=group_cnt[group_num]+1;
+  group_com[group_num][group_cnt[group_num]]:=a; group_par[group_num][group_cnt[group_num]]:=b;
 enddef;
 %=================================================================================================
 def read_group(expr a)(expr n)=
-  save_cnt_group:=cnt_group;
-  save_cntD:=cntD[a];
-  for i=n upto cnt_group:
-    for j=1 upto cnt_group[i]:
-      cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=com_group[i][j]; parD[a][cntD[a]]:=par_group[i][j];
+  save_group_cnt:=group_num; save_cntD:=cntD[a];
+  for i=n upto group_num:
+    for j=1 upto group_cnt[i]:
+      cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=group_com[i][j]; parD[a][cntD[a]]:=group_par[i][j];
     endfor
   endfor
   proc_bond_atom(a)(save_cntD+1);
-  if cnt_group>save_cnt_group: read_group(a)(save_cnt_group+1); fi
+  if group_num>save_group_cnt: read_group(a)(save_group_cnt+1); fi
 enddef;
 %=================================================================================================
-def draw_frame(expr PS,LX,LY,PN)=
-  draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN;
+def draw_frame(expr p,x,y,n)=
+  draw ((0,0)--(x,0)--(x,y)--(0,y)--cycle) shifted p withpen pensquare scaled n;
 enddef;
 %-------------------------------------------------------------------------------------------------
-def draw_corner(expr PS,LX,LY,PN)=
-  draw( 0, 0) shifted PS wpcs PN; draw(LX, 0) shifted PS wpcs PN;
-  draw(LX,LY) shifted PS wpcs PN; draw( 0,LY) shifted PS wpcs PN;
+def draw_corner(expr p,x,y,n)=
+  draw(0,0) shifted p wpcs n; draw(x,0) shifted p wpcs n;
+  draw(x,y) shifted p wpcs n; draw(0,y) shifted p wpcs n;
 enddef;
 %-------------------------------------------------------------------------------------------------
 def proc_size_setup=
@@ -993,27 +858,25 @@
 enddef;
 %-------------------------------------------------------------------------------------------------
 def proc_scaling=
-  minX:=minY:=4095;
-  maxX:=maxY:=-4095;
+  minX:=minY:=4095; maxX:=maxY:=-4095;
   for i=1 upto cntA:
-    xpos:=xpart(posA[i]);
-    ypos:=ypart(posA[i]);
+    nX:=xpart(posA[i]); nY:=ypart(posA[i]);
     if numS[i]<>0:
       nU:=nD:=nP:=nL:=nR:=0;
       for j=1 upto length(strD[numS[i]]):
-        temp_c:=subc(j,strD[numS[i]]);
-        if     (temp_c="^"): nU:=.5atom_wd;
-        elseif (temp_c="_"): nD:=.5atom_wd;
-        elseif (temp_c<>"{")and(temp_c<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(temp_c)];
+        tempc:=subc(j,strD[numS[i]]);
+        if tempc="^": nU:=.5atom_wd;
+        ef tempc="_": nD:=.5atom_wd;
+        ef (tempc<>"{")and(tempc<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(tempc)];
         fi  
       endfor
       if (angX[i]<=90)or(angX[i]>=270): nR:=nP; else: nL:=nP; fi
-      if (xpos-nL+.5atom_wd)<minX: minX:=xpos-nL+.5atom_wd; fi
-      if (xpos+nR-.5atom_wd)>maxX: maxX:=xpos+nR-.5atom_wd; fi
-      if (ypos-nD-.5atom_wd)<minY: minY:=ypos-nD-.5atom_wd; fi
-      if (ypos+nU+.5atom_wd)>maxY: maxY:=ypos+nU+.5atom_wd; fi
-    else: if xpos<minX: minX:=xpos; fi if xpos>maxX: maxX:=xpos; fi
-          if ypos<minY: minY:=ypos; fi if ypos>maxY: maxY:=ypos; fi
+      if (nX-nL+.5atom_wd)<minX: minX:=nX-nL+.5atom_wd; fi
+      if (nX+nR-.5atom_wd)>maxX: maxX:=nX+nR-.5atom_wd; fi
+      if (nY-nD-.5atom_wd)<minY: minY:=nY-nD-.5atom_wd; fi
+      if (nY+nU+.5atom_wd)>maxY: maxY:=nY+nU+.5atom_wd; fi
+    else: if nX<minX: minX:=nX; fi if nX>maxX: maxX:=nX; fi
+          if nY<minY: minY:=nY; fi if nY>maxY: maxY:=nY; fi
     fi
   endfor
   mol_wd:=maxX-minX; mol_ht:=maxY-minY;
@@ -1033,49 +896,50 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def proc_bond_atom(expr a)(expr n)=
   f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=envB:=strAT:=f_at:=0;
-  bondL:=crR; lenT:=crR; sB[0]:=0; eB[0]:=1; lineT:=si;
+  bondL:=rate_cr; lenT:=rate_cr; sB[0]:=0; eB[0]:=1; lineT:=si;
   addAT:=markA:=markB:=saveA:=saveB:=0;
   %-----------------------------------------------------------------------------------------------
-  for i=n upto cntD[a]: com:=comD[a][i]; par:=parD[a][i];
-  if com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom(0);
-  ef com=_set_adr: adrT:=par;
-  ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
-               ef par=_rest: markA:=saveA; markB:=saveB;
-               ef par=_moff: markA:=markB:=0;
-               ef par=_term: termA;
-               ef par=_len_s:  temp_lenE:=bondL; ef par=_len_e:  bondL:=temp_lenE;
-               ef par=_len_ss: temp_lenF:=bondL; ef par=_len_ee: bondL:=temp_lenF;
-               ef par=_group_s: f_at:=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
-               ef par=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0;
-                                lineT:=si; lenT:=crR;
-               fi
-  ef com=_set_atom: strAT:=par;
-  ef com=_group_si: add_group;
-  ef com=_group_dm: lineT:=dm; add_group;
-  ef com=_group_wf: lineT:=wf; add_group;
-  ef com=_group_zf: lineT:=zf; add_group;
-  ef com=_jp_bond:  termA; nA:=getB(par); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1;
-  ef com=_jp_atom:  termA; nA:=getA(par); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1;
-  ef com=_jp_absA:  sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB;
-  ef com=_chg_atom: numS[getA(adrT)]:=parD[par][1];
-  ef com=_chg_len:  if par=_ring_len: bondL:=ringL; else: bondL:=par; fi
-  ef com=_get_len:  if par=_tmp_len:  if bondL=crR: bondL:=lenT; fi
-                    ef par=_ring_len: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi
-                    else: ringL:=lenB[getB(par)]; fi
-  ef com=_tmp_len:  lenT:=par;
-  ef com=_set_line: lineB[getB(adrT)]:=par;
-  ef com=_tmp_line: lineT:=par;
-  ef com=_tmp_rot:  rotT:=par;
-  ef com=_cyc:      check_adrA(getA(par)); add_atom(getA(par));
-  ef com=_cyc_eB:   add_atom(eB[getB(par)]);
-  ef com=_cyc_sB:   add_atom(sB[getB(par)]);
-  ef com=_chg_env:  envB:=par;
-  ef com=_tmp_env:  envT:=par;
-  ef com=_set_colorA: colorA[getA(adrT)]:=par;
-  ef com=_set_colorB: colorB[getB(adrT)]:=par;
-  ef com=_set_add: addAT:=par;
-  ef com=_chg_add: addA[getA(par)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(par)]:=rotT; fi
+  for i=n upto cntD[a]: nC:=comD[a][i]; nP:=parD[a][i];
+  if nC=_mk_bond: if (nP=0)and(rotT<>0): rotT:=0; fi add_atom(0);
+  ef nC=_set_adr: adrT:=nP;
+  ef nC=_com: if nP=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
+              ef nP=_rest: markA:=saveA; markB:=saveB;
+              ef nP=_moff: markA:=markB:=0;
+              ef nP=_term: termA;
+              ef nP=_len_s:  temp_lenE:=bondL; ef nP=_len_e:  bondL:=temp_lenE;
+              ef nP=_len_ss: temp_lenF:=bondL; ef nP=_len_ee: bondL:=temp_lenF;
+              ef nP=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi
+                              if lenT<>rate_cr: f_lenT:=1;  fi if envT<>hz: f_envT:=1; fi
+              ef nP=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0;
+                              lineT:=si; lenT:=rate_cr;
+              fi
+  ef nC=_set_atom: strAT:=nP;
+  ef nC=_group_si: add_group;
+  ef nC=_group_dm: lineT:=dm; add_group;
+  ef nC=_group_wf: lineT:=wf; add_group;
+  ef nC=_group_zf: lineT:=zf; add_group;
+  ef nC=_jp_bond:  termA; nA:=getB(nP); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1;
+  ef nC=_jp_atom:  termA; nA:=getA(nP); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1;
+  ef nC=_jp_absA:  sB[cntB+1]:=nP; f_bra:=1; temp_cntB:=cntB;
+  ef nC=_chg_atom: numS[getA(adrT)]:=parD[nP][1];
+  ef nC=_chg_len:  if nP=_ring_len: bondL:=ringL; else: bondL:=nP; fi
+  ef nC=_get_len:  if nP=_tmp_len: if bondL=rate_cr: bondL:=lenT; fi
+                   ef nP=_ring_len: 
+                     if lenT<>rate_cr: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi
+                   else: ringL:=lenB[getB(nP)]; fi
+  ef nC=_tmp_len:  lenT:=nP;
+  ef nC=_set_line: lineB[getB(adrT)]:=nP;
+  ef nC=_tmp_line: lineT:=nP;
+  ef nC=_tmp_rot:  rotT:=nP;
+  ef nC=_cyc:      check_adrA(getA(nP)); add_atom(getA(nP));
+  ef nC=_cyc_eB:   add_atom(eB[getB(nP)]);
+  ef nC=_cyc_sB:   add_atom(sB[getB(nP)]);
+  ef nC=_chg_env:  envB:=nP;
+  ef nC=_tmp_env:  envT:=nP;
+  ef nC=_set_colorA: colorA[getA(adrT)]:=nP;
+  ef nC=_set_colorB: colorB[getB(adrT)]:=nP;
+  ef nC=_set_add: addAT:=nP;
+  ef nC=_chg_add: addA[getA(nP)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(nP)]:=rotT; fi
   else:
   fi
   endfor
@@ -1083,7 +947,7 @@
 %-------------------------------------------------------------------------------------------------
 def add_atom(expr n)=
   cntB:=cntB+1; lineB[cntB]:=lineT; lineT:=si;
-  if lenT=crR: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=crR; fi
+  if lenT=rate_cr: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=rate_cr; fi
   if f_bra=0:  cntA:=cntA+1; sB[cntB]:=cntA; numS[cntA]:=strAT;
                addA[cntA]:=addAT; addAT:=strAT:=add_rot[cntA]:=0;
                if rotT<>0: add_rot[cntA]:=rotT; rotT:=0; fi
@@ -1096,39 +960,39 @@
 enddef;
 def check_adrB(expr n)= if (n>cntB)or(n<=0): errmessage("cntB=[ "&decimal(n)&" ]"); fi enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def proc_skeleton(expr a)=
+def proc_skeleton(expr n)=
   markA:=markB:=cntA:=cntB:=f_bra:=rotT:=f_term:=0;
   envT:=envB:=f_lineT:=f_rotT:=f_lenT:=f_envT:=0; lineT:=si; angT:=mangle;
   angA[0]:=angB[0]:=angX[0]:=0; posA[0]:=posBs:=posBe:=(0,0);
   %-----------------------------------------------------------------------------------------------
-  for i=1 upto cntD[a]: com:=comD[a][i]; par:=parD[a][i];
-  if com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par,1);
-  ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
-               ef par=_rest: markA:=saveA; markB:=saveB;
-               ef par=_moff: markA:=markB:=0; ef par=_term: termB;
-               ef par=_group_e: lineT:=si; lenT:=crR; rotT:=envT:=0;
-               fi
-  ef com=_jp_bond: termB; nA:=getB(par);   posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0;
-  ef com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0;
-  ef com=_jp_absA: adrT:=par; posBs:=posA[adrT];
-                   angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB;
-  ef com=_adj_ang: angT:=adjust_ang(angT);
-  ef com=_rot_ang: if par>-3700: angT:=(angT+par) mod 360; else: angT:=(par+4095) mod 360; fi
-  ef com=_tmp_rot: rotT:=par;
-  ef com=_group_si: rotT:=0;
-  ef com=_group_wf: rotT:=0;
-  ef com=_chg_env: envB:=par;
-  ef com=_tmp_env: envT:=par;
-  ef com=_cyc:     add_bond(angle(posA[getA(par)]-posBs)-angT,0);
-  ef com=_cyc_sB:  add_bond(angle(posA[sB[getB(par)]]-posBs)-angT,0);
-  ef com=_cyc_eB:  add_bond(angle(posA[eB[getB(par)]]-posBs)-angT,0);
+  for i=1 upto cntD[n]: nC:=comD[n][i]; nP:=parD[n][i];
+  if nC=_mk_bond: if (nP=0)and(rotT<>0):nP:=rotT; rotT:=0; fi add_bond(nP,1);
+  ef nC=_com: if nP=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB;
+              ef nP=_rest: markA:=saveA; markB:=saveB;
+              ef nP=_moff: markA:=markB:=0; ef nP=_term: termB;
+              ef nP=_group_e: lineT:=si; lenT:=rate_cr; rotT:=envT:=0;
+              fi
+  ef nC=_jp_bond: termB; nA:=getB(nP); posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0;
+  ef nC=_jp_atom: termB; adrT:=getA(nP); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0;
+  ef nC=_jp_absA: adrT:=nP; posBs:=posA[adrT]; angT:=angX[adrT];
+                  f_bra:=1; rotT:=0; temp_cntB:=cntB;
+  ef nC=_adj_ang: angT:=adjust_ang(angT);
+  ef nC=_rot_ang: if nP>-3700: angT:=(angT+nP) mod 360; else: angT:=(nP+4095) mod 360; fi
+  ef nC=_tmp_rot: rotT:=nP;
+  ef nC=_group_si: rotT:=0;
+  ef nC=_group_wf: rotT:=0;
+  ef nC=_chg_env: envB:=nP;
+  ef nC=_tmp_env: envT:=nP;
+  ef nC=_cyc:     add_bond(angle(posA[getA(nP)]-posBs)-angT,0);
+  ef nC=_cyc_sB:  add_bond(angle(posA[sB[getB(nP)]]-posBs)-angT,0);
+  ef nC=_cyc_eB:  add_bond(angle(posA[eB[getB(nP)]]-posBs)-angT,0);
   else:
   fi
   endfor
 enddef;
 %-------------------------------------------------------------------------------------------------
-def add_bond(expr ROT,FLG)=
-  if ROT=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi
+def add_bond(expr n,f)=
+  if n=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=n; fi
   if f_bra=0:
     adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT;
     angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360;
@@ -1136,11 +1000,10 @@
   fi
   cntB:=cntB+1;
   if nA>-3700: angB[cntB]:=angT:=(angT+nA) mod 360; else: angB[cntB]:=angT:=nA+4095; fi
-  if FLG=1:
+  if f=1:
     if lenB[cntB]=_size_atom: posBe:=sfrt(posBs,atom_wd,angT);
     else:
-      nA:=lenB[cntB]; 
-      if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi
+      nA:=lenB[cntB]; if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi
       posBe:=sfrt(posBs,nA*blen+nB,angT);
     fi
     posA[cntA+1]:=posBe; f_term:=0;
@@ -1168,7 +1031,7 @@
 def termA=
   if f_term=0:
     if f_bra=0:
-      cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT;
+      cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT; 
       addAT:=strAT:=rotT:=0;
     else: f_bra:=0;
     fi
@@ -1180,114 +1043,99 @@
   if f_term=0: if f_bra=0:cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi f_term:=1; fi
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef glu_atom(expr NUM)=
- if numS[NUM]<>0: nE:=angT mod 90; nF:=0.5atom_wd;(iif(nE<45,sind(nE),cosd(nE))*nF)++nF else: 0 fi
+vardef glu_atom(expr n)=
+ if numS[n]<>0: nE:=angT mod 90; nF:=0.5atom_wd; (iif(nE<45,sind nE,cosd nE)*nF)++nF else: 0 fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_atom(expr NUM)=
-  begingroup
-  if numS[NUM]<>0:
-    save slen,f_wd,f_ht,r_ff,pos_a,pos_c,temp_c,temp_s,dir_str;
-    string temp_c,temp_s;
-    pair pos_a,pos_c;
-    %-------------------------------------------------------
-    temp_s:=strD[numS[NUM]]; slen:=length(temp_s); nA:=angX[NUM];
-    dxA[NUM]:=dir_str:=iif((nA<=90)or(nA>=270),1,-1);
-    wdA[NUM]:=nC:=0; pos_c:=(0,0);
-    pos_a:=posA[NUM]-(.5atom_wd*dir_str,.5atom_wd);
-    if atomfont<>"draw":
-      atom_picture:="C" infont atomfont;
-      r_ff:=atom_wd/(ypart(ulcorner atom_picture)-ypart(llcorner atom_picture));
+def draw_atom(expr n)=
+  if atomfont<>"draw": defaultfont:=atomfont; defaultsize:=atom_wd; fi
+  temps:=strD[numS[n]]; slen:=length(temps); nC:=nS:=0; raise_pos:=(0,0); tpos:=posA[n];
+  if (angX[n]<=90)or(angX[n]>=270): sdir:=1; else: sdir:=-1; fi
+  for i=1 upto slen:
+    if nC=0:
+      tempc:=subc(i,temps);
+      if (sdir=-1)and(tempc="{"):
+        nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temps)="}"; endfor
+      fi
+    else: nC:=nC-1; tempc:=subc(nD+nC,temps);
     fi
-    for i=1 upto slen:
-      if nC=0:
-        temp_c:=subc(i,temp_s);
-        if (dir_str=-1)and(temp_c="{"):
-          nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temp_s)="}"; endfor
-        fi
-      else: nC:=nC-1; temp_c:=subc(nD+nC,temp_s);
+    if tempc="_": raise_pos:=iif(raise_pos=(0,0),(0,-.5atom_wd),(0,0));
+    ef tempc="^": raise_pos:=iif(raise_pos=(0,0),(0, .5atom_wd),(0,0));
+    ef (tempc<>"{")and(tempc<>"}"):
+      nS:=nS+1;
+      char_wd:=atom_wd*tbl_char_wd[ASCII(tempc)]; char_ht:=atom_wd;
+      if nS=1: if (sdir=-1)and(char_wd<atom_wd): tpos:=tpos+((atom_wd-char_wd)/2,0); fi 
+      else:    tpos:=tpos+(.5char_wd*sdir,0);
       fi
-      if     temp_c="_": pos_c:=iif(pos_c=(0,0),(0,-.5atom_wd),(0,0));
-      elseif temp_c="^": pos_c:=iif(pos_c=(0,0),(0, .5atom_wd),(0,0));
-      elseif (temp_c<>"{")and(temp_c<>"}"):
-        if atomfont="draw":
-          f_wd:=atom_wd*tbl_char_wd[ASCII(temp_c)];
-          if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi
-          draw_char(temp_c,pos_a+pos_c,atom_wd,bond_pen_wd*ratio_char_bond,NUM);
-          if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,atom_wd,thickness_frame); fi
-          if dir_str=1: pos_a:=pos_a+(f_wd,0); fi
-        else:
-          atom_picture:=temp_c infont atomfont;
-          f_wd:=(xpart(lrcorner atom_picture)-xpart(llcorner atom_picture))*r_ff;
-          f_ht:=(ypart(urcorner atom_picture)-ypart(llcorner atom_picture))*r_ff;
-          if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi
-          addto currentpicture also atom_picture scaled (r_ff*(1-2ratio_atomgap_atom))
-            shifted (pos_a+pos_c+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom))
-            Cp(colorA[NUM]);
-          if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,f_ht,thickness_frame); fi
-          if dir_str=1: pos_a:=pos_a+(f_wd,0); fi
-        fi
-        wdA[NUM]:=wdA[NUM]+f_wd;
-      fi
-    endfor
+      tcol:=colorA[n]; f_col:=0;
+      if known tcol: if tcol<>0: drawoptions(withcolor color_list[tcol]); f_col:=1; fi fi
+      if atomfont="draw": draw_char(tempc,tpos+raise_pos); else: label(tempc,tpos+raise_pos); fi
+      if f_col=1: drawoptions(); fi
+      tpos:=tpos+(.5char_wd*sdir,0);
+    fi
+  endfor
+  nA:=0.56atom_wd; nB:=0.06atom_wd;
+  if sdir=1: frameA[n]:=posA[n]-(nA,nA)--tpos+(nB,-nA)--tpos+(nB,nA)--posA[n]+(-nA,nA)--cycle;
+  else:      frameA[n]:=tpos-(nB,nA)--posA[n]+(nA,-nA)--posA[n]+(nA,nA)--tpos+(-nB,nA)--cycle;
   fi
-  endgroup
+  if scan_bit(sw_frame,Atom): draw frameA[n] wpcs thickness_frame; fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_bond(expr NUM)=
+def draw_bond(expr n)=
   begingroup
-  save ww,aw,ap,am,ang,col,len,Ls,Le,pA,zA,zL;
+  save ww,aw,ap,am,Ls,Le,pA,zA,zL;
   pair pA,Ls,Le;
   path zA,zL;
   %-----------------------------------------------------------------------------------------------
-  nL:=lineB[NUM]; ang:=angB[NUM]; nS:=sB[NUM]; nE:=eB[NUM];
-  col:=colorB[NUM]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=ang+90; am:=ang-90; aw:=atom_wd;
+  nL:=lineB[n]; angL:=angB[n]; nS:=sB[n]; nE:=eB[n]; f_col:=0;
+  tcol:=colorB[n]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=angL+90; am:=angL-90; aw:=atom_wd;
   %-----------------------------------------------------------------------------------------------
   if (numS[nS]=0)and(numS[nE]=0)or(sw_numbering>=1):
-    Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9);
-  ef numS[nS]=0: Le:=zL intersectionpoint frame_str(nE); Ls:=posA[nS]; pA:=(.15,1);
-  ef numS[nE]=0: Ls:=zL intersectionpoint frame_str(nS); Le:=posA[nE]; pA:=(0,.85);
-  else: Ls:=zL intersectionpoint frame_str(nS); Le:=zL intersectionpoint frame_str(nE); pA:=(0,1);
+                 Ls:=posA[nS];          Le:=posA[nE];          pA:=(.1,.9);
+  ef numS[nS]=0: Ls:=posA[nS];          Le:=zL ISP frameA[nE]; pA:=(.15,1);
+  ef numS[nE]=0: Ls:=zL ISP frameA[nS]; Le:=posA[nE];          pA:=(0,.85);
+  else:          Ls:=zL ISP frameA[nS]; Le:=zL ISP frameA[nE]; pA:=(0,1);
   fi
-  zA:=Ls--Le; len:=length(Le-Ls);
+  zA:=Ls--Le; lenL:=length(Le-Ls);
   %-----------------------------------------------------------------------------------------------
+  if known tcol: if tcol<>0: drawoptions(withcolor color_list[tcol]); f_col:=1;fi fi
   pickup pencircle scaled bond_pen_wd;
-  if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA Cp(col);
-  ef nL=dl: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col);
-  ef nL=dr: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col);
-  ef nL=dm: draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col);
-  ef nL=db: nA:=iif(((ang-angX[nS]) mod 360)<=180,ap,am);
-            draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,nA) Cp(col);
-  ef nL=tm: draw zA Cp(col);draw sfrt(zA,bondgap,ap) Cp(col); draw sfrt(zA,bondgap,am) Cp(col);
-  ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col);
-  ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col);
-  ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap Cp(col);
+  if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA;
+  ef nL=dl: draw zA; draw sfrt(subpath pA of zA,bondgap,ap);
+  ef nL=dr: draw zA; draw sfrt(subpath pA of zA,bondgap,am);
+  ef nL=dm: draw sfrt(zA,bondgap/1.75,ap); draw sfrt(zA,bondgap/1.75,am);
+  ef nL=db: nA:=iif(((angL-angX[nS]) mod 360)<=180,ap,am);
+            draw zA; draw sfrt(subpath pA of zA,bondgap,nA);
+  ef nL=tm: draw zA; draw sfrt(zA,bondgap,ap); draw sfrt(zA,bondgap,am);
+  ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle;
+  ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle;
+  ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap;
   ef nL=bz: bz_put(sfrt(Ls,ww,ap),sfrt(Le,ww,ap),sfrt(Ls,ww,am),sfrt(Le,ww,am));
   ef nL=zf: wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am));
   ef nL=zb: wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap));
-  ef nL=dt: for i=0 step .75hash_gap/len until 1: drawdot i[Ls,Le] Cp(col); endfor
-  ef nL=wv: nA:=3bond_pen_wd; nB:=len/nA;
+  ef nL=dt: for i=0 step .75hash_gap/lenL until 1: drawdot i[Ls,Le]; endfor
+  ef nL=wv: nA:=3bond_pen_wd; nB:=lenL/nA;
             draw Le for i=1 upto nB:
               ..controls(((i-.5)/nB)[sfrt(Le,nA,iif(odd(i),ap,am)),sfrt(Ls,nA,iif(odd(i),ap,am))])
-              ..(i/nB)[Le,Ls] endfor ..Ls Cp(col);
-  ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww Cp(col);
-  ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww Cp(col);
-  ef nL=bd_r: draw zA wpcs .65bondgap Cp(col);
-  ef nL=vf:  draw zA Cp(col);draw sfrt(Le,bondgap,ang-150)--Le--sfrt(Le,bondgap,ang+150) Cp(col);
-  ef nL=vb:  draw zA Cp(col);draw sfrt(Ls,bondgap,ang-30)--Ls--sfrt(Ls,bondgap,ang+30) Cp(col);
-  ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA Cp(col);
+              ..(i/nB)[Le,Ls] endfor ..Ls;
+  ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww;
+  ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww;
+  ef nL=bd_r: draw zA wpcs .65bondgap;
+  ef nL=vf:  draw zA;draw sfrt(Le,bondgap,angL-150)--Le--sfrt(Le,bondgap,angL+150);
+  ef nL=vb:  draw zA;draw sfrt(Ls,bondgap,angL-30)--Ls--sfrt(Ls,bondgap,angL+30);
+  ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA;
   ef nL=dl_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,ap) wpcs 1.8bondgap;
-             draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col);
+             draw zA; draw sfrt(subpath pA of zA,bondgap,ap);
   ef nL=dr_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,am) wpcs 1.8bondgap;
-             draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col);
+             draw zA; draw sfrt(subpath pA of zA,bondgap,am);
   ef nL=dm_: erase draw subpath(0.15,0.85) of zA wpcs 1.8 bondgap;
-             draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col);
+             draw sfrt(zA,bondgap/1.75,ap); draw sfrt(zA,bondgap/1.75,am);
   ef nL=wf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap;
              erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap;
-             fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col);
+             fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle;
   ef nL=wb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap;
              erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap;
-             fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col);
+             fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle;
   ef nL=zf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap;
              erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap;
              erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap;
@@ -1297,200 +1145,153 @@
              erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap;
              wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap));
   ef nL=bd_: erase draw subpath(0.15,0.85) of zA wpcs 1.6bondgap;
-             draw zA withpen penrazor rotated ap scaled bondgap Cp(col);
+             draw zA withpen penrazor rotated ap scaled bondgap;
   ef nL=nb:
   %-- bond type for glycan ----------------------------------------------------------------------
-  ef nL=arc_lb:  draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0) Cp(col);
-  ef nL=arc_br:  draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le Cp(col);
+  ef nL=arc_lb:  draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0);
+  ef nL=arc_br:  draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le;
   ef nL=arc_lbr: draw posA[nS]+(0,iif(numS[nS]=0,0,-.6aw))--posA[nS]+(0,-.8aw)
                       ..0.5[posA[nS],posA[nE]]+(0,-1.7aw)..posA[nE]+(0,-.8aw)
-                      --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw)) Cp(col);
+                      --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw));
   ef nL=arc_ltr: draw posA[nS]+(0,iif(numS[nS]=0,0,0.6aw))--posA[nS]+(0,.8aw)
                       ..0.5[posA[nS],posA[nE]]+(0,1.7aw)..posA[nE]+(0,.8aw)
-                      --posA[nE]+(0,iif(numS[nE]=0,0,.6aw)) Cp(col);
+                      --posA[nE]+(0,iif(numS[nE]=0,0,.6aw));
   %----------------------------------------------------------------------------------------------
   fi
+  if f_col=1: drawoptions(); fi
   endgroup
 enddef;
 %------------------------------------------------------------------------------------------------
-def wz_put(expr PA,PB,PD)=
-  for i=0 upto len/hash_gap: 
-    nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len;
-    if nD>((len-hash_gap)/len): nD:=1; fi
-    fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(col);
+def wz_put(expr a,b,c)=
+  for i=0 upto lenL/hash_gap: 
+    nA:=hash_gap*i/lenL; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/lenL;
+    if nD>((lenL-hash_gap)/lenL): nD:=1; fi
+    fill nA[b,a]--nA[c,a]--nD[c,a]--nD[b,a]--cycle;
   endfor
 enddef;
 %------------------------------------------------------------------------------------------------
-def bz_put(expr PA,PB,PC,PD)=
-  for i=0 upto len/hash_gap: 
-    nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len;
-    fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(col);
+def bz_put(expr a,b,c,d)=
+  for i=0 upto lenL/hash_gap: 
+    nA:=hash_gap*i/lenL; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/lenL;
+    fill nA[b,a]--nA[d,c]--nD[d,c]--nD[b,a]--cycle;
   endfor
 enddef;
-%------------------------------------------------------------------------------------------------
-vardef frame_str(expr NUM)=
-  nA:=1.12atom_wd; nB:=wdA[NUM]+.12atom_wd;
-  ((0,0)--(nB,0)--(nB,nA)--(0,nA)--cycle) shifted
-  (posA[NUM]-(.5nA+iif((dxA[NUM]=-1)and(wdA[NUM]>atom_wd),nB-nA,0),.5nA))
-enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def char_size_set(expr WD)(expr HT)(expr STR)=
-  for j=1 upto length(STR):
-    nA:=ASCII(subc(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT;
-  endfor
+def char_size_set(expr w,h)(expr s)=
+  for j=1 upto length(s): nN:=ASCII(subc(j,s)); tbl_char_wd[nN]:=w; tbl_char_ht[nN]:=h; endfor
 enddef;
 %-------------------------------------------------------------------------------------------------
-char_size_set(  1)(  1)("CGHMNOQW");
-char_size_set( .9)(  1)("ABDFIJKPRSTUVXY/><#\%@");
-char_size_set( .8)(  1)("ELZ&");
-char_size_set( .7)(  1)(" ()[]{}0123456789nh=tfg?~^");
-char_size_set( .7)( .9)("$");
-char_size_set( .7)( .7)("-+*_");
-char_size_set(.45)(.95)("l");
-char_size_set(.75)( .8)("opq");
-char_size_set( .8)( .8)("e");
-char_size_set( .9)( .8)("wm");
-char_size_set( .7)( .8)("abdcksuvrxyz");
-char_size_set(.35)( .9)("i");
-char_size_set( .5)( .9)("j");
-char_size_set(.35)(  1)("!|");
-char_size_set( .4)(  1)(".,:;'`");
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-def draw_char(expr CHR,POS,WD,PEN,NUM)=
-begingroup
-save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,sC;
-path zO,zOh,zOa;
-string sC;
-pair Z[],pos;
+char_size_set(   1,   1)("CGHMNOQW");
+char_size_set( 0.9,   1)("ABDFIJKPRSTUVXY");
+char_size_set( 0.8,   1)("ELZ");
+char_size_set( 0.7,   1)("0123456789nhtfg");
+char_size_set( 0.7, 0.7)("-+");
+char_size_set(0.45,0.95)("l");
+char_size_set(0.75, 0.8)("opq");
+char_size_set( 0.8, 0.8)("e");
+char_size_set( 0.9, 0.8)("wm");
+char_size_set( 0.7, 0.8)("abdcksuvrxyz");
+char_size_set(0.35, 0.9)("i");
+char_size_set( 0.5, 0.9)("j");
 %-------------------------------------------------------------------------------------------------
-def dw expr p  = draw (p) shifted pos Cp(colorA[NUM]) enddef;
-def dwv expr p = draw (p) withpen penrazor scaled fP shifted pos Cp(colorA[NUM]) enddef;
-def dwvs (expr n)expr p=
-      draw (p) withpen penrazor scaled fP scaled n shifted pos Cp(colorA[NUM]) enddef;
-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;
+def dw expr p = draw p shifted cpos enddef;
+def dwv expr p = draw p withpen penrazor scaled fP shifted cpos enddef;
+def dwvs(expr n) expr p = draw p withpen penrazor scaled (fP*n) shifted cpos enddef;
+def dwh expr p = draw p withpen penrazor rotated 90 scaled fP shifted cpos enddef;
+def cdw expr p = cutdraw p shifted cpos enddef;
 %-------------------------------------------------------------------------------------------------
-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);
+def Z_a=( 0,hP) enddef; def Z_b=(hP, 0) enddef; def Z_c=(hP,hP) enddef; def Z_d=(aW,hP) enddef;
+def Z_e=(fW, 0) enddef; def Z_f=(hW,aH) enddef; def Z_g=(hW, 0) enddef; def Z_h=( 0,hH) enddef;
+def Z_i=(hW,fW) enddef; def Z_j=( 0,qH) enddef; def Z_k=(aW,qH) enddef; def Z_l=(.75aW,0) enddef;
+def Z_m=(hP,hH) enddef; def Z_n=(fW,fH) enddef; def Z_o=(fW,hH) enddef; def Z_p=(hW,aW) enddef;
+def Z_q=( 0,fH) enddef; def Z_r=(hP,fH) enddef; def Z_s=(hW,fH) enddef; def Z_t=(fW,aH) enddef;
+def Z_u=(aW,fH) enddef; def Z_v=(aW,hH) enddef; def Z_w=(hP,aH) enddef; def Z_x=(hW,hP) enddef;
+def Z_y=(hW,hH) enddef; def Z_z=(fW,hP) enddef; 
 %-------------------------------------------------------------------------------------------------
-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);
-Z08:=( 0,hH); Z09:=(hP,hH); Z10:=(fW,hH); Z11:=(hW,aW); Z12:=( 0,fH); Z13:=(hP,fH); Z14:=(hW,fH);
-Z15:=(fW,aH); Z16:=(aW,fH); Z17:=(aW,hH); Z18:=(hP,aH); Z19:=(hW,hP); Z20:=(hW,hH); Z21:=(fW,hP);
-Z22:=(fW,fH); Z23:=(hW,fW);
+def circ_O = Z_o..(.8aW,fH-qP)..tension 1.5..(.2aW,fH-qP)..Z_m..
+     (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle enddef;
+def circ_Oh = (hP,qH)..Z_x..(fW,qH)..Z_y..cycle enddef;
+def circ_Oa = (hP,0.35aH)..Z_x..(fW,0.35aH)..(hW,.7aH)..cycle enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+def draw_char(expr s,p)=
+begingroup
+save aW,aH,fW,fH,hW,hW,hH,qH,fP,hP;
 %-------------------------------------------------------------------------------------------------
-zO:=Z10..(.8aW,fH-.5hP)..tension 1.5..(.2aW,fH-.5hP)..Z09..
-         (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle;
-zOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle;
-zOa:=(hP,.35aH)..(hW,hP)..(fW,.35aH)..(hW,.7aH)..cycle;
+aW:=atom_wd*tbl_char_wd[ASCII(s)]*(1-2ratio_atomgap_atom);
+aH:=atom_wd*tbl_char_ht[ASCII(s)]*(1-2ratio_atomgap_atom);
+cpos:=p-(aW/2,atom_wd/2*(1-2ratio_atomgap_atom));
+fP:=bond_pen_wd*ratio_char_bond;
+hP:=fP/2; qP:=fP/4; fW:=aW-hP; hW:=aW/2; fH:=aH-hP; hH:=aH/2; qH:=aH/4;
 %-------------------------------------------------------------------------------------------------
-ppcs fP;
-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)zO;
-ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18;
-ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--Z22; dw Z09--Z10;
-ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13;
-ef sC="G": cdw sbp(.06,.97)zO; 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 .35[.45[Z02,Z18],Z16]--Z05; cdw .35[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 zO;
-ef sC="P": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH);
-ef sC="Q": dw zO; dw (.6aW,.4aH)--Z05;
-ef sC="R": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH);
-           cdw Z05{up}..{left}(hW,.44aH);
-ef sC="S": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; 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="U": cdw Z18..(hP,.4fH){down}..{right}Z19{right}..{up}(fW,.4fH)..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 (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17;
-ef sC="g": dw zOa; dw sbp(0,.5)zOh shifted (0,-.5fH); cdw (aW-hP,.7aH)--(aW-hP,-.25aH);
-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": cdw (fW,.7aH)--Z21..(.25aW,-.66fP)..Z03; ppcs 1.4fP; dw Z22;
-ef sC="k": dwv Z02--(hP,1.3fH); cdw .5[Z02,Z18]--Z05; cdw .5[Z02,Z18]--Z16;
-ef sC="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21;
-ef sC="m": cdw Z02..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z07;
-           cdw (hW,.6aH){up}..(.7aW,aH-hP)..{down}(fW,.6aH)..Z05; dwv (hP,.3aH)--(hP,aH);
-ef sC="n": cdw Z02{up}..(hW,.8fH)..{down}(fW,.5aH)..Z05; dwv (hP,0)--(hP,.8aH);
-ef sC="o": dw Z19..Z10..Z14..Z09..cycle;
-ef sC="p": dw Z19..Z10..Z14..Z09..cycle; dwv (hP,aH)--(hP,-.3aH);
-ef sC="q": dw Z19..Z10..Z14..Z09..cycle; dwv (fW,aH)--(fW,-.3aH);
-ef sC="r": cdw (sbp(.33,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-hP); dwv Z02--Z18;
-ef sC="s": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; 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--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP);
-ef sC="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z14..(hP,.65aH); dwh Z04--Z01;
-ef sC="3": cdw sbp(0,.75)zOh; cdw sbp(.25,.98)zOh shifted (0,hH-hP); dwh (.3aW,hH)--Z20;
-ef sC="4": dwh (0,.25aH)--(aW,.25aH); dwv (.75aW,0)--(.75aW,aH)--(1.2hP,.25aH+hP);
-           dwv (.75aW+.5hP,aH)--(1.7hP,.25aH+hP);
-ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.55fH);
-           cdw (.5hP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH);
-ef sC="6": dw Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z06;
-ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0);
-ef sC="8": dw zOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle;
-ef sC="9": dw (Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--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--Z22; dwh Z19--Z21;
-ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19;
-ef sC="{": dw Z19..(.3aW,.2aH)..(.3aW,.45aH)..(.2aW,.5aH)..(.3aW,.55aH)..(.3aW,.8aH)..Z14;
-ef sC="}": dw Z19..(.7aW,.2aH)..(.7aW,.45aH)..(.8aW,.5aH)..(.7aW,.55aH)..(.7aW,.8aH)..Z14;
-ef sC="<": cdw Z16--Z08--Z04;
-ef sC=">": cdw Z01--Z17--Z12;
-ef sC="-": dwh Z09--Z10;
-ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH);
-ef sC="/": dw Z22..Z01;
-ef sC="+": dwv Z19--Z14; dwh Z09--Z10;
-ef sC="*": dw Z19--Z14; dw Z09--Z10; dw (.2aW,.2aH)--(.8aW,.8aH); dw (.2aW,.8aH)--(.8aW,.2aH);
-ef sC="$": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH);
-           dwv (hW,-fP)--(hW,fH+1.5fP);
-ef sC="#": dwv (.3aW,0)--(.3aW,aH); dwv (.7aW,0)--(.7aW,aH);
-           dwh (0,.3aH)--(aW,.3aH); dwh (0,.7aH)--(aW,.7aH);
-ef sC="!": dwv Z06--(hW,.25aH); ppcs 1.4fP; dw Z07;
-ef sC="?": cdw (hP,.75fH)..(hW,aH)..(fW,.75fH)..(hW,.4fH)--(hW,.2fH); ppcs 1.4fP; dw Z07;
-ef sC="|": dwv Z07--Z06;
-ef sC="\": dw Z13--Z21;
-ef sC="%": dw Z22..Z01; dw fullcircle scaled 2.7fP shifted (.2fH,.9fH);
-                        dw fullcircle scaled 2.7fP shifted (.73fH,.20fH);
-ef sC="~": dw (hP,.8aH)..(.3aW,.9aH)..(.6aW,.7aH)..(fW,.8aH);
-ef sC="&": cdw Z21..(hW,.35aH)..(.25aW,.75aH)..(hW,.fH)..(.75aW,.75fH)..(hP,.3aH)..(hW,.hP)..Z10;
-ef sC="@": cdw sbp(0,.7)zO; dwv (fW,hH)--(fW,0);
-           dw (fW,.45aH)..(.7aW,.75aH)..(.3aW,.45aH)..(.7aW,.15aH)..cycle;
-ef sC="_": dwh Z01--Z04;
-ef sC="^": dw (hP,.6aH)--(.5aW,fH)--(fW,.6aH);
+pickup pencircle scaled fP;
+if s=cC:  cdw sbp(.05,.95)circ_O;
+ef s=cH:  dwv Z_b--Z_w; dw Z_m--Z_o; dwv Z_e--Z_t;
+ef s=cO:  dw circ_O;
+ef s=cN:  dwv Z_b--Z_w; dwv Z_e--Z_t; dwvs(1.4)(1.4hP,aH)--(aW-1.4hP,0);
+ef s=cS:  cdw sbp(.05,.45)circ_O; cdw sbp(.55,.95)circ_O; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef s=cF:  dwh Z_q--Z_u; dwh (0,.45aH)--(fW,.45aH); dw Z_b--Z_r;
+ef s=cP:  dwv Z_b--Z_w; dw Z_r--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH);
+ef s="I": dwv Z_x--Z_s; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH);
+ef s="l": dwv Z_g--Z_f; dwh Z_s--Z_r; dwh Z_x--Z_z;
+ef s="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z_s..(hP,.65aH); dwh Z_d--Z_a;
+ef s="3": cdw sbp(0,.75)circ_Oh; cdw sbp(.25,.98)circ_Oh shifted (0,hH-hP); dwh (.3aW,hH)--Z_y;
+ef s="4": dwh Z_j--Z_k; dwv Z_l--(0.75aW,aH)--(1.2hP,qH+hP); dwv (.75aW+qP,aH)--(1.7hP,qH+hP);
+ef s="A": dwvs(1.14)Z_b--Z_f--Z_e; dw .33[Z_b,Z_f]--.33[Z_e,Z_f];
+ef s="B": dw Z_r--Z_s{right}..(.9fH,.75aH)..{left}Z_y--Z_m--Z_y{right}..(.9fH,qH)..{left}Z_x--Z_c;
+          dwv Z_b--Z_w;
+ef s="D": dw Z_r--Z_s..Z_o..Z_x--Z_c; dwv Z_b--Z_w;
+ef s="E": pickup pensquare scaled fP; dw Z_z--Z_c--Z_r--Z_n; dw Z_m--Z_o;
+ef s="G": cdw sbp(.06,.97)circ_O; dwh bot Z_y-- bot Z_v;
+ef s="J": cdw Z_m..(hP,.4aH){down}..{right}Z_x{right}..{up}(fW,.4aH)..Z_t;
+ef s="K": cdw Z_b--Z_w; cdw .35[.45[Z_b,Z_w],Z_u]--Z_e; cdw .35[Z_b,Z_w]--Z_u;
+ef s="L": dwh Z_d--Z_a; dwv Z_b--Z_w;
+ef s="M": dwv Z_b--Z_w; dwvs(1.14)Z_w--Z_x--Z_t; dwv Z_t--Z_e;
+ef s="Q": dw circ_O; dw (.6aW,.4aH)--Z_e;
+ef s="R": dwv Z_b--Z_w; dw Z_r--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH);
+          cdw Z_e{up}..{left}(hW,.44aH);
+ef s="T": dwh Z_q--Z_u; dwv .5[Z_q,Z_u]--Z_g;
+ef s="U": cdw Z_w..Z_m{down}..{right}Z_x{right}..{up}Z_o..Z_t;
+ef s="V": dwvs(1.2)Z_w--Z_g--Z_t;
+ef s="W": dwvs(1.08)Z_w--(aW/4,0)--Z_f--Z_l--Z_t;
+ef s="X": dwvs(1.4)Z_w..Z_e; dwvs(1.4) Z_b..Z_t;
+ef s="Y": dwvs(1.2)Z_w--Z_y--Z_t; dwv Z_y--Z_g;
+ef s="Z": dwh Z_q--Z_u; dwvs(1.4)(1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z_a--Z_d;
+ef s="a": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_e--Z_t;
+ef s="b": dw Z_x..Z_o..Z_p..Z_m..cycle; dwv Z_b--(hP,1.3aH)
+ef s="c": cdw sbp(.06,.94)Z_o..Z_s..Z_m..Z_x..cycle;
+ef s="d": dw Z_x..Z_o..Z_p..Z_m..cycle; dwv Z_e--(fW,1.3aH);
+ef s="e": cdw sbp(0,.92)Z_o..Z_s..Z_m..Z_x..cycle; dw Z_o--Z_m;
+ef s="f": cdw (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z_h--Z_v;
+ef s="g": dw circ_Oa; dw sbp(0,.5)circ_Oh shifted (0,-.5fH); cdw (fW,.7aH)--(fW,-qH);
+ef s="h": cdw Z_b..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z_e; dwv (hP,.3aH)--Z_w;
+ef s="i": dwv Z_g--(hW,.7aH); ppcs 1.4fP; dw Z_s;
+ef s="j": cdw (fW,.7aH)--Z_z..(aW/4,-.66fP)..Z_c; ppcs 1.4fP; dw Z_n;
+ef s="k": dwv Z_b--(hP,1.3fH); cdw .5[Z_b,Z_w]--Z_e; cdw .5[Z_b,Z_w]--Z_u;
+ef s="m": cdw Z_b..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z_g;
+          cdw (hW,.6aH){up}..(.7aW,fH)..{down}(fW,.6aH)..Z_e; dwv (hP,.3aH)--Z_w;
+ef s="n": cdw Z_b{up}..(hW,.8fH)..{down}Z_o..Z_e; dwv Z_b--(hP,.8aH);
+ef s="o": dw Z_x..Z_o..Z_s..Z_m..cycle;
+ef s="p": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_w--(hP,-.3aH);
+ef s="q": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_t--(fW,-.3aH);
+ef s="r": cdw (sbp(.33,.72)Z_x..Z_o..Z_s..Z_m..cycle) shifted(0,-hP); dwv Z_b--Z_w;
+ef s="s": cdw sbp(.05,.45)circ_O; cdw sbp(.55,.95)circ_O; dw (fW,.3aH){up}..{up}(hP,.7aH);
+ef s="t": dwv Z_g--Z_f; dwh (0,.66aH)--(aW,.66aH);
+ef s="u": cdw Z_w..(hP,.55aH){down}..Z_x..(fW,.55aH){up}..Z_t; dwv Z_t--Z_e;
+ef s="v": dwv Z_w--Z_g--Z_t;
+ef s="w": dwv Z_w--(aW/4,0)--Z_f--Z_l--Z_t;
+ef s="x": dwvs(1.4)Z_w--Z_e; dwvs(1.4) Z_t--Z_b;
+ef s="y": dwvs(1.4)(Z_w--Z_y) shifted (0,-.3aH); dwvs(1.4)(Z_t--Z_b) shifted (0,-.3aH);
+ef s="z": dwh Z_q--Z_u; dwvs(1.4)(1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z_a--Z_d;
+ef s="0": dw Z_m...Z_s...Z_o...Z_x...cycle;
+ef s="1": dwv Z_g--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP);
+ef s="5": dwh Z_q--Z_u; dwv Z_r--(hP,.55fH);
+          cdw (qP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH);
+ef s="6": dw Z_x..(fW,.5fW)..Z_i..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z_f;
+ef s="7": dwh (0,.fH)--Z_u; dwvs(1.2)(aW-1.2hP,aH-fP)--(.4aW,0);
+ef s="8": dw circ_Oh; dw (hP,.75aH)...Z_s...(fW,.75aH)...Z_y...cycle;
+ef s="9": dw (Z_x..(fW,.5fW)..Z_i..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--Z_g;
+ef s="-": dwh Z_m--Z_o;
+ef s="+": dwv Z_x--Z_s; dwh Z_m--Z_o;
 else:
 fi
 endgroup
@@ -1498,73 +1299,55 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def warning_bond(expr a)=
   if addA[a]=0:
-    warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds");
+    warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cntA)&" bonds");
   fi
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef erase_brace(expr ATOM)=
-  save temp_c,temp_s;
-  string temp_c,temp_s;
-  temp_s:="";
-  if (length(ATOM)>=4)and(ATOM<>"COOH"):
-    for i=1 upto length(ATOM):
-      temp_c:=subc(i,ATOM);
-      if (temp_c<>"{")and(temp_c<>"}")and(temp_c<>"_")and(temp_c<>"^")
-                      and(temp_c<>"+")and(temp_c<>"-"):
-        temp_s:=temp_s&temp_c; fi
+vardef erase_brace(expr s)=
+  sS:="";
+  if (length(s)>=4)and(s<>"COOH"):
+    for i=1 upto length(s):
+      sC:=subc(i,s);
+      if (sC<>"{")and(sC<>"}")and(sC<>"_")and(sC<>"^")and(sC<>"+")and(sC<>"-"): sS:=sS&sC; fi
     endfor
-    temp_s
-  else: ATOM
+    sS
+  else: s
   fi
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef erase_space(expr TXT)=
-  save temp_c,temp_s;
-  string temp_c,temp_s;
-  temp_s:="";
-  for i=1 upto length(TXT):
-    temp_c:=subc(i,TXT);
-    if temp_c=" ": temp_s:=temp_s&"_"; else: temp_s:=temp_s&temp_c; fi
-  endfor
-  temp_s
+vardef erase_space(expr t)=
+  sS:=""; for i=1 upto length(t): sC:=subc(i,t); if sC=" ": sS:=sS&"_"; else: sS:=sS&sC; fi endfor
+  sS
 enddef;
 %=================================================================================================
 def proc_calc(expr n)=
-  begingroup
-  save knownA,tmp_wtp;
-  num_MW:=num_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0;
-  nE:=parts_emb_start;
+  num_MW:=num_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0; nE:=parts_emb_start;
   for i=1 upto tbl_atom_end: sumA[i]:=0; endfor
   for i=1 upto cntA:
-    knownA:=bond_cnt:=0;
+    knownA:=bond_cntA:=0;
     nS:=numS[i];
     for j=1 upto cntB:
-      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;
-      ef lineB[j]=0:                       bondC[j]:=0;
-      else:                                bondC[j]:=1;
-      fi
-      if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi
+      bond_num[j]:=bond_type(lineB[j]);
+      if (sB[j]=i)or(eB[j]=i): bond_cntA:=bond_cntA+bond_num[j]; fi
     endfor
-    Bcnt[i]:=bond_cnt;
-    if ((nS=0)or(nS=(C-nE)))and(bond_cnt<4):
-      hideH[i]:=4-bond_cnt; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0;
+    Bcnt[i]:=bond_cntA;
+    if ((nS=0)or(nS=(C-nE)))and(bond_cntA<4):
+      hideH[i]:=4-bond_cntA; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0;
     fi
-    if nS=0:         if bond_cnt>4:  warning_bond(i) fi
-    ef nS=(O-nE):    if bond_cnt<>2: warning_bond(i) fi
-    ef nS=(N-nE):    if (bond_cnt<>3)and(bond_cnt<>5): warning_bond(i) fi
-    ef nS=(S-nE):    if (bond_cnt<>2)and(bond_cnt<>4)and(bond_cnt<>6): warning_bond(i) fi
-    ef nS=(H-nE):    if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(OH-nE):   if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(COOH-nE): if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(NH2-nE):  if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(CN-nE):   if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(P-nE):    if bond_cnt<>5: warning_bond(i) fi
-    ef nS=(C-nE):    if bond_cnt>4:  warning_bond(i) fi
-    ef nS=(F-nE):    if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(Cl-nE):   if bond_cnt<>1: warning_bond(i) fi
-    ef nS=(Br-nE):   if bond_cnt<>1: warning_bond(i) fi
+    if nS=0:         if bond_cntA>4:  warning_bond(i) fi
+    ef nS=(O-nE):    if bond_cntA<>2: warning_bond(i) fi
+    ef nS=(N-nE):    if (bond_cntA<>3)and(bond_cntA<>5): warning_bond(i) fi
+    ef nS=(S-nE):    if (bond_cntA<>2)and(bond_cntA<>4)and(bond_cntA<>6): warning_bond(i) fi
+    ef nS=(H-nE):    if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(OH-nE):   if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(COOH-nE): if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(NH2-nE):  if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(CN-nE):   if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(P-nE):    if bond_cntA<>5: warning_bond(i) fi
+    ef nS=(C-nE):    if bond_cntA>4:  warning_bond(i) fi
+    ef nS=(F-nE):    if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(Cl-nE):   if bond_cntA<>1: warning_bond(i) fi
+    ef nS=(Br-nE):   if bond_cntA<>1: warning_bond(i) fi
     fi
     for j=1 upto tbl_group_end:
       if strD[nS]=tbl_atom_str[j]:
@@ -1590,18 +1373,13 @@
       cal_FM:=cal_FM&erase_brace(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi;
     fi
   endfor
-  cal_MW:=substring (0,8) of decimal(num_MW); cal_MI:=substring (0,10) of decimal(num_MI);
-  %---------------------------------------------------------------------------------------
-  endgroup
+  cal_MW:=substring(0,8) of decimal(num_MW); cal_MI:=substring(0,10) of decimal(num_MI);
 enddef;
 %=================================================================================================
 def proc_info_out(expr f)=
-  message "["&decimal(char_num)&"]:"&inf_EN;
-  if (f=1)or(f=2): file_name_output:=jobname&"-info.aux";
-  ef f=3: file_name_output:=jobname&"-data.aux";
-  fi
-  %--------------------------------------------------------------------------------------
-  if (char_num=1)and(f=2):
+  message "["&decimal(fig_num)&"]:"&inf_EN;
+  if (f=1)or(f=2): file_output:=jobname&"-info.aux"; ef f=3: file_output:=jobname&"-data.aux"; fi
+  if (fig_num=1)and(f=2):
     printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ;
   fi
   %--------------------------------------------------------------------------------------
@@ -1608,54 +1386,40 @@
   for i=1 upto aux_max: exitif tag[i]="";
     if i=1: printf "" else: &aux_delimiter fi
     if (f=1)or(f=3): &tag[i]&":" fi
-    %-------------------------------------------
-    if tag[i]="J":   & jobname
-    ef tag[i]="C":   & decimal(char_num)
-    ef tag[i]="mw":  & cal_MW
-    ef tag[i]="fm":  & cal_FM
-    ef tag[i]="mi":  & cal_MI
-    ef tag[i]="w":   & decimal(xpart(fsize))
-    ef tag[i]="h":   & decimal(ypart(fsize))
-    ef tag[i]="w1":  & decimal(mol_wd)
-    ef tag[i]="h1":  & decimal(mol_ht)
-    ef tag[i]="An":  & decimal(cntA)
-    ef tag[i]="Bn":  & decimal(cntB)
-    ef tag[i]="mc":  & mc
-    %-------------------------------------------
-    ef tag[i]="NO":  & inf_NO
-    ef tag[i]="EN":  & inf_EN
-    ef tag[i]="JN":  & inf_JN
-    ef tag[i]="MW":  & inf_MW
-    ef tag[i]="MI":  & inf_MI
-    ef tag[i]="FM":  & inf_FM
-    ef tag[i]="CAS": & inf_CAS
-    ef tag[i]="USE": & inf_USE
-    ef tag[i]="EXA": & inf_EXA
-    ef tag[i]="EXB": & inf_EXB
+    %---------------------------------------------------------------------------------
+    if tag[i]="J":   & jobname                ef tag[i]="C":   & decimal(fig_num)
+    ef tag[i]="mw":  & cal_MW                 ef tag[i]="fm":  & cal_FM
+    ef tag[i]="mi":  & cal_MI                 ef tag[i]="mc":  & mc
+    ef tag[i]="w":   & decimal(xpart(fsize))  ef tag[i]="h":   & decimal(ypart(fsize))
+    ef tag[i]="w1":  & decimal(mol_wd)        ef tag[i]="h1":  & decimal(mol_ht)
+    ef tag[i]="An":  & decimal(cntA)          ef tag[i]="Bn":  & decimal(cntB)
+    %---------------------------------------------------------------------------------
+    ef tag[i]="NO":  & inf_NO                 ef tag[i]="EN":  & inf_EN
+    ef tag[i]="JN":  & inf_JN                 ef tag[i]="MW":  & inf_MW
+    ef tag[i]="MI":  & inf_MI                 ef tag[i]="FM":  & inf_FM
+    ef tag[i]="CAS": & inf_CAS                ef tag[i]="USE": & inf_USE
+    ef tag[i]="EXA": & inf_EXA                ef tag[i]="EXB": & inf_EXB
     fi
   endfor ;
   if f=3: printf "+";
-          for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor
+          for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor
           printf "+-----------------------------------------------------------------------------";
   fi
 enddef;
 %=================================================================================================
 def proc_report_out(expr f)=
-  message "["&decimal(char_num)&"]:"&inf_EN;
-  if f=1: file_name_output:="temp-report.aux";
-  else:   file_name_output:=jobname&"-report.txt";
-  fi
+  message "["&decimal(fig_num)&"]:"&inf_EN;
+  if f=1: file_output:="temp-report.aux"; else: file_output:=jobname&"-report.txt"; fi
   printf "===========================================================================";
-  printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input;
+  printf " No."&fdr(4)(fig_num)&" / Name = "& inf_EN&" / file = "& file_input;
   if mc_row>=1:
     printf "---------------------------------------------------------------------------";
-    for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor
-  printf "---------------------------------------------------------------------------";
-  printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))&
-         " / commands="&fdr(3)(cnt_cmm);
-  printf " {}=X ="&fdr(3)(cnt_chg_bonds)&" / {}:X ="&fdr(3)(cnt_chg_atoms)&
-         " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)&
-         " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn);
+    for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor
+    printf "---------------------------------------------------------------------------";
+    printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))&" / commands="&fdr(3)(cnt_cmm);
+    printf " {}=X ="&fdr(3)(cnt_chgB)&" / {}:X ="&fdr(3)(cnt_chgA)&
+           " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)&
+           " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn);
   fi
   printf "---------------------------------------------------------------------------";
   printf " Warnings = "&fdr(3)(warning_cnt)&" / Code= "&decimal(cntD[0]);
@@ -1668,8 +1432,8 @@
   printf "< NO. ><atom(s) >(  x axis   ,   y axis   )<bond><hideH><chg>";
   for i=1 upto cntA:
     printf " A"&fdl(6)(i)&fsl(8)(erase_brace(strD[numS[i]]))&
-           " ("&fdr(10)(round_auto(xpart(posA[i])/blen))&" , "&
-            fdr(10)(round_auto(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])&
+           " ("&fdr(10)(round(xpart(posA[i])/blen))&" , "&
+            fdr(10)(round(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])&
             iif(hideH[i]>0,fdr(6)(hideH[i]),"        ")
             if chargeA[i]<>0: &fdr(4)(chargeA[i]) fi;
   endfor
@@ -1679,8 +1443,8 @@
     nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi
       nB:=angB[i]; if nB>180: nB:=nB-360; fi
       printf " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])&
-              " ("&fdr(3)(bondC[i])&")"&fdr(8)(round_auto(angB[i]))&
-              " ("&fdr(6)(round_auto(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round_auto(nC*blen))&")";
+              " ("&fdr(3)(bond_num[i])&")"&fdr(8)(round(angB[i]))&
+              " ("&fdr(6)(round(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round(nC*blen))&")";
   endfor
   printf "---------------------------------------------------------------------------";
   printf "<atom>( atom wt )[ mi wt   ]  < cnt > < sum wt   >[ sum mi wt  ]";
@@ -1704,18 +1468,13 @@
   printf "===========================================================================";
   if f=1: printf EOF; fi
 enddef;
-%-------------------------------------------------------------------------------------------------
-vardef round_auto(expr n)=
-  if     (n<4)  and(n>-4):   round(n*1000)/1000  elseif (n<40) and(n>-40): round(n*100)/100
-  elseif (n<400)and(n>-400): round(n*10)/10      else: round(n) fi
-enddef;
 %=================================================================================================
 def proc_mol_out(expr n)=
-  message "["&decimal(char_num)&"]:"&inf_EN;
-  file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&erase_space(inf_EN)&".mol";
+  message "["&decimal(fig_num)&"]:"&inf_EN;
+  file_output:=jobname&"-"&fit_zero(fig_num)&"-"&erase_space(inf_EN)&".mol";
   %-V2000---------------------------------------------------------------------------------------
   if n=1:
-    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info[1]); printf "";
+    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info_s[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])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "&
@@ -1722,15 +1481,14 @@
              fsl(2)(erase_brace(strD[numS[i]]))&"  0"&fdr(3)(bond_charge(chargeA[i]))&"  0  0";
     endfor
     for i=1 upto cntB:
-      if lineB[i]<>0:
-        printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))&
-               fdr(3)(bond_stereo(lineB[i]))&"     0  0";
+      if lineB[i]<>0: printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))&
+                      fdr(3)(bond_stereo(lineB[i]))&"     0  0";
       fi
     endfor
     printf "M  END";
   %-V3000---------------------------------------------------------------------------------------
   elseif n=2:
-    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info[1]); printf "";
+    printf ""; printf "  -MCFtoMOL- "&fsl(20)(info_s[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";
@@ -1753,40 +1511,33 @@
 enddef;
 %=================================================================================================
 def proc_mc_out(expr f)=
-  message "["&decimal(char_num)&"]:"&inf_EN;
-  file_name_output:="temp-mc.aux";
-  for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor
+  message "["&decimal(fig_num)&"]:"&inf_EN;
+  file_output:="temp-mc.aux";
+  for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor
   printf EOF;
 enddef;
 %=================================================================================================
-vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef;
-%-------------------------------------------------------------------------------------------------
-vardef bond_type(expr n)=
- if (n=dl)or(n=dr)or(n=dm)or(n=db)or(n=dl_)or(n=dr_)or(n=dm_): 2 ef n=tm: 3 else: 1 fi enddef;
-%-------------------------------------------------------------------------------------------------
+vardef fit_zero(expr n)= if n<=9: "00" ef n<=99: "0" else: "" fi &decimal(n) enddef;
+vardef bond_type(expr n)= if (n>=dl)and(n<=dm_):2 ef n=tm:3 ef n=0: 0 else: 1 fi enddef;
 vardef bond_charge(expr n)= if n=2: 1 ef n=1: 3 ef n=-1: 5 ef n=-2: 6 else: 0 fi enddef;
-%-------------------------------------------------------------------------------------------------
 vardef bond_stereo(expr n)=
  if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 6 ef n=wv: 4 else: 0 fi enddef;
-%-------------------------------------------------------------------------------------------------
 vardef bond_config(expr n)=
  if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 3 ef n=wv: 2 else: 0 fi enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-vardef STa(expr ATOM,WT,MI)=
+vardef STa(expr s,WT,MI)=
   str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1;
   comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1;
-  strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM;
-  tbl_atom[tbl_cnt]:=0;
-  tbl_atom_wt[tbl_cnt]:=WT; tbl_atom_mi[tbl_cnt]:=MI;
+  strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=s;
+  tbl_atom[tbl_cnt]:=0; tbl_atom_wt[tbl_cnt]:=WT; tbl_atom_mi[tbl_cnt]:=MI;
   parts_cnt
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef STb(expr ATOM)(text TXT)=
+vardef STb(expr s)(text t)=
   str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1;
   comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1;
-  strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM;
-  tbl_atom[tbl_cnt]:=0;
-  for list=TXT:
+  strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=s; tbl_atom[tbl_cnt]:=0;
+  for list=t:
     tbl_atom[tbl_cnt]:=tbl_atom[tbl_cnt]+1;
     tbl_group[tbl_cnt][tbl_atom[tbl_cnt]]:=list-parts_emb_start;
   endfor
@@ -1793,8 +1544,7 @@
   parts_cnt
 enddef;
 %=================================================================================================
-parts_int:=parts_emi_start;
-parts_cnt:=parts_emb_start;
+parts_int:=parts_emi_start; parts_cnt:=parts_emb_start;
 %-------------------------------------------------------------------------------------------------
 C:= STa("C"   ,12.0107,   12.0000000);       H:= STa("H"  , 1.00794,    1.00782503223);
 D:= STa("D"   ,2.012,      2.01410177812);   Ag:=STa("{Ag}",107.868,  106.905095);
@@ -1825,13 +1575,10 @@
 SO2H:=STb("S{O_2_}H")(S,O,O,H); SO3H:=STb("S{O_3_}H")(S,O,O,O,H);
 ONa:=STb("O{Na}")(O,Na); SO3Na:=STb("S{O_3_}{Na}")(S,O,O,O,Na);
 %-------------------------------------------------------------------------------------------------
-tbl_group_end:=tbl_cnt;
-parts_atom_end:=parts_cnt;
+tbl_group_end:=tbl_cnt; parts_atom_end:=parts_cnt;
 %=================================================================================================
-for i=3 upto 20:
-  ?[i]:='((_com,_len_ss),(_get_len,_ring_len),<((-180 DIV i)-90)
-  for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_com,_len_ee));
-endfor
+for i=3 upto 20: ?[i]:='((_com,_len_ss),(_get_len,_ring_len),<((-180 DIV i)-90)
+                 for j==2 upto i:: ,(360 DIV i) endfor,(_cyc_sB,1-i),(_com,_len_ee)); endfor
 Ph:=Ph1:='(?6,-2=dl,-4=dl,-6=dl); Ph2:='(?6,-1=dl,-3=dl,-5=dl);
 for i=4,5,6:   for j=2  upto i-2: ?[i][j]:='(); endfor endfor
 for i=5,6,7,8: for j=11 upto 15:  ?[i][j]:='(); endfor endfor
@@ -1841,8 +1588,7 @@
   ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee));
 endfor
 Me:='(); Et:='(!); iPr:=?!:='(/_,!); ?!2:='(/_,!2); tBu:=??!:='(/_,/_^60,60);
-!?:='(!,/_); !?!:='(!,/_,!);
-n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus));
+!?:='(!,/_); !?!:='(!,/_,!); n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus));
 zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv);
 %-------------------------------------------------------------------------------------------------
 NH:='(N,/H~nl); N!:='(N,/_); N!2:='(N,/!); SO:='(S,//O); SOO:='(S,//O^-35,//O^35);
@@ -1891,133 +1637,95 @@
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 vardef check(expr s)=
-  save mc_char,mc_char,temp_c,err_cnt,char_cnt,f_depth,
-       cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s,cnt_brk_e;
-  string temp_c,err_str[],err_type[];
-  numeric mc_char[],err_adr[],err_code[];
-  err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chg_atoms:=cnt_chg_bonds:=0;
-  err_type[0]:="no mc-row  ";
-  err_type[1]:=" '(' > ')' ";  err_type[2]:=" '(' < ')' ";
-  err_type[3]:=" '{' > '}' ";  err_type[4]:=" '{' < '}' ";
-  err_type[5]:=" '[' > ']' ";  err_type[6]:=" '[' < ']' ";
-  err_type[7]:="missing arg";  err_type[8]:="extra arg  ";
+  save mc_char,err_cnt,char_cnt,f_depth,cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s,
+       cnt_brk_e,cmm_adr;
+  string err_str[],err_type[];
+  numeric mc_char[],err_adr[],err_code[],cmm_adr[];
+  err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chgA:=cnt_chgB:=0;
+  err_type[0]:="no mc-row  ";  err_type[1]:=" '(' > ')' ";  err_type[2]:=" '(' < ')' ";
+  err_type[3]:=" '{' > '}' ";  err_type[4]:=" '{' < '}' ";  err_type[5]:=" '[' > ']' ";
+  err_type[6]:=" '[' < ']' ";  err_type[7]:="missing arg";  err_type[8]:="extra arg  ";
  %---------------------------------------------------------------------------------------------
   if mc_row>=1:
- %---------------------------------------------------------------------------------------------
-  for i=1 upto length(s):
-    temp_c:=subc(i,s);
-    if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi
-  endfor
-  mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm;
-  %-- argument missing chkeck ----------------------------------------------------------------
-  cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0;
-  cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0;
-  forever:
-    nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1];
-    %-----------------------------------------------------------------------------------------
-    if  nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi
-    ef nC=a_ast:
-      if nD=a_sls:
-        if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi % */* x
-        ef mc_char[nA+2]=a_cmm:                         proc_err(7,nA) nA:=nA+1; fi % */ x
-      ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi           % ** x
-    ef  nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi  % // x
-                  ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi  % /* x
-                  ef nD=a_cmm: proc_err(7,nA)                                   fi  % /  x
-    ef nC=a_hsh: if nD=a_hsh:        nA:=nA+1;      %  ##
-                 ef nD=a_cmm:   proc_err(7,nA) fi   %  # x
-                 if nB<>a_cmm:  proc_err(8,nA) fi   %  a #
-    ef nC=a_dol: if nD=a_cmm:   proc_err(7,nA) fi   %  $ x
-    ef nC=a_equ: if nD= a_cmm:  proc_err(7,nA) fi   %  = x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x =
-    ef nC=a_cln: if nD= a_cmm:  proc_err(7,nA) fi   %  : x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x :
-    ef nC=a_amk: cnt_at:=cnt_at+1;
-                 if nD= a_cmm:  proc_err(7,nA) fi   %  @ x
-                 if nB<>a_cmm:  proc_err(8,nA) fi   %  a @
-    ef nC=a_and: cnt_and:=cnt_and+1;
-                 if nD= a_cmm:  proc_err(7,nA) fi   %  & x
-                 if nB<>a_cmm:  proc_err(8,nA) fi   %  a &
-    ef nC=a_gtn: cnt_gtn:=cnt_gtn+1;
-    ef nC=a_ltn: if nD= a_cmm:  proc_err(7,nA) fi   %  > x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x >
-    ef nC=a_tld: if nD= a_cmm:  proc_err(7,nA) fi   %  ~ x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x ~
-    ef nC=a_hat: if nD= a_cmm:  proc_err(7,nA) fi   %  ^ x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x ^
-    ef nC=a_bqt: if nD= a_cmm:  proc_err(7,nA) fi   %  ` x
-                 if nB= a_cmm:  proc_err(7,nA) fi   %  x `
-    ef nC=a_bar: if nD= a_bar:
-                   if mc_char[nA+2]=a_bar: nA:=nA+1;       %  ||
-                   ef mc_char[nA+2]<>a_cmm: proc_err(8,nA) %  | a
+    for i=1 upto length(s):
+      tempc:=subc(i,s); if tempc<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(tempc); fi
+    endfor
+    mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm;
+    %-- argument missing chkeck --------------------------------------------------------------
+    cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0;
+    cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0;
+    forever:
+      nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1];
+      if  nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi
+      ef nC=a_ast:
+        if nD=a_sls:
+          if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi  % */* x
+          ef mc_char[nA+2]=a_cmm:                         proc_err(7,nA) nA:=nA+1; fi  % */ x
+        ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi            % ** x
+      ef nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi    % // x
+                   ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi    % /* x
+                   ef nD=a_cmm: proc_err(7,nA)                                   fi    % /  x
+      ef nC=a_hsh: if nD=a_hsh:   nA:=nA+1;                                            %  ##
+                   ef nD=a_cmm:   proc_err(7,nA) fi  if nB<>a_cmm:  proc_err(8,nA) fi  % a # x
+      ef nC=a_dol: if nD=a_cmm:   proc_err(7,nA) fi                                    %  $ x
+      ef nC=a_equ: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x = x
+      ef nC=a_cln: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x : x
+      ef nC=a_amk: cnt_at:=cnt_at+1;
+                   if nD= a_cmm:  proc_err(7,nA) fi  if nB<>a_cmm:  proc_err(8,nA) fi  % a @ x
+      ef nC=a_and: cnt_and:=cnt_and+1;
+                   if nD= a_cmm:  proc_err(7,nA) fi  if nB<>a_cmm:  proc_err(8,nA) fi  % a & x
+      ef nC=a_gtn: cnt_gtn:=cnt_gtn+1;
+      ef nC=a_ltn: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x > x
+      ef nC=a_tld: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x ~ x
+      ef nC=a_hat: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x ^ x
+      ef nC=a_bqt: if nD= a_cmm:  proc_err(7,nA) fi  if nB= a_cmm:  proc_err(7,nA) fi  % x ` x
+      ef nC=a_bar: if nD= a_bar:  if mc_char[nA+2]=a_bar: nA:=nA+1;                    %  ||
+                                  ef mc_char[nA+2]<>a_cmm: proc_err(8,nA)              %  | a
+                                  fi
+                                  if nB<>a_cmm: proc_err(8,nA) fi                      %  a |
                    fi
-                   if nB<>a_cmm: proc_err(8,nA) fi         %  a |
-                 fi
-    %------------------------------------------------------------------------------------------
-    ef nC=a_prn_s: if nD= a_cmm:  proc_err(7,nA) fi   %  ( x
-                   cnt_prn_s:=cnt_prn_s+1; f_depth:=1;
-                   if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi
-    ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0;
-    ef nC=a_brc_s: if nD= a_cmm:  proc_err(7,nA) fi   %  { x
-                   cnt_brc_s:=cnt_brc_s+1; f_depth:=1;
-    ef nC=a_brc_e: if nD= a_cmm:  proc_err(7,nA) fi   %  } x
-                   cnt_brc_e:=cnt_brc_e+1; f_depth:=0;
-                   if nD=a_cln: cnt_chg_atoms:=cnt_chg_atoms+1;
-                   ef nD=a_equ: cnt_chg_bonds:=cnt_chg_bonds+1;
-                   fi
-    ef nC=a_brk_s: if nD= a_cmm:  proc_err(7,nA) fi   %  [ x
-                   cnt_brk_s:=cnt_brk_s+1; f_depth:=1;
-    ef nC=a_brk_e: if nB= a_cmm:  proc_err(7,nA) fi   %  x ]
-                   cnt_brk_e:=cnt_brk_e+1; f_depth:=0;
-    %-------------------------------------------------------------------------------------------
-    fi
-    exitif nA>=char_cnt+1;
-  endfor
-  %-- brackets balance check -------------------------------------------------------------------
-  if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_s<cnt_prn_e: proc_err(2,0) fi
-  if cnt_brc_s>cnt_brc_e: proc_err(3,0) ef cnt_brc_s<cnt_brc_e: proc_err(4,0) fi
-  if cnt_brk_s>cnt_brk_e: proc_err(5,0) ef cnt_brk_s<cnt_brk_e: proc_err(6,0) fi
-  %---------------------------------------------------------------------------------------------
-  else:
-    proc_err(0,0)
+      ef nC=a_prn_s: if nD= a_cmm: proc_err(7,nA) fi                                   %  ( x
+                     cnt_prn_s:=cnt_prn_s+1; f_depth:=1;
+                     if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi
+      ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0;
+      ef nC=a_brc_s: if nD= a_cmm:  proc_err(7,nA) fi cnt_brc_s:=cnt_brc_s+1; f_depth:=1; % { x
+      ef nC=a_brc_e: if nD= a_cmm:  proc_err(7,nA) fi cnt_brc_e:=cnt_brc_e+1; f_depth:=0; % } x
+                     if nD=a_cln: cnt_chgA:=cnt_chgA+1; ef nD=a_equ: cnt_chgB:=cnt_chgB+1; fi
+      ef nC=a_brk_s: if nD= a_cmm: proc_err(7,nA) fi cnt_brk_s:=cnt_brk_s+1; f_depth:=1;  % [ x
+      ef nC=a_brk_e: if nB= a_cmm: proc_err(7,nA) fi cnt_brk_e:=cnt_brk_e+1; f_depth:=0;  % x ]
+      fi
+      exitif nA>=char_cnt+1;
+    endfor
+    %-- brackets balance check -----------------------------------------------------------------
+    if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_s<cnt_prn_e: proc_err(2,0) fi
+    if cnt_brc_s>cnt_brc_e: proc_err(3,0) ef cnt_brc_s<cnt_brc_e: proc_err(4,0) fi
+    if cnt_brk_s>cnt_brk_e: proc_err(5,0) ef cnt_brk_s<cnt_brk_e: proc_err(6,0) fi
+  else: proc_err(0,0)
   fi
   %---------------------------------------------------------------------------------------------
   for i=1 upto err_cnt:
     message "*"&fdr(3)(i)&" "&err_type[err_code[i]]&fdr(4)(err_adr[i])&" '"&err_str[i]&"'";
   endfor
-  %---------------------------------------------------------------------------------------------
 %%%%%%%  err_cnt>0: readstring;
-  %---------------------------------------------------------------------------------------------
   err_cnt
 enddef;
 %-------------------------------------------------------------------------------------------------
-def proc_err(expr ERR_CODE,ADR)=
-  err_cnt:=err_cnt+1; err_adr[err_cnt]:=ADR; err_code[err_cnt]:=ERR_CODE;
-  if ERR_CODE<=6: err_str[err_cnt]:="     ";
-  else:           err_str[err_cnt]:=substring (ADR-3,ADR+2) of mc;
-  fi
+def proc_err(expr e,n)=  err_cnt:=err_cnt+1; err_adr[err_cnt]:=n; err_code[err_cnt]:=e;
+  if e<=6: err_str[err_cnt]:="     "; else: err_str[err_cnt]:=substring(n-3,n+2) of mc; fi
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 def query(text s)=
   begingroup
-  save file_name,f_mcf,f_line,unit_row,unit_cnt,line_s,unit_row_cnt,mc_row,line_cnt,
-       semicol_cnt,info_cnt,info_s,filter_n,order,min_s,min_n,par_cnt,key_cnt,var_n,info_s,
-       sign_at,sign_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,temp_s,par_s,
-       at_colon,at_equal,at_less,at_greater,at_n,info_cnt;
-  string line_s[][],sort_s[],par_s[],sort_all[],key_s[],filter_s[],filter_tag[],filter_var[],
-         info_s[],file_name_input,temp_s,min_s;
-  numeric unit_row_cnt[],order[],order_tbl[],filter_sign[],filter_p[];
-  unit_row:=f_mcf:=mc_row:=line_cnt:=info_cnt:=par_cnt:=key_cnt:=filter_cnt:=0;
-  unit_cnt:=1;
+  save f_mcf,f_line,unit_row,unit_cnt,line_s,row_cnt,semic_cnt,info_cnt,order,min_n,key_cnt,info_s,       sign_at,sign_n,filter_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,at_semic,
+       at_colon,at_equal,at_less,at_greater,at_n,sort_all,key_s,sort_s;
+  string line_s[][],sort_s[],sort_all[],key_s[],filter_tag[],filter_var[],info_s[];
+  numeric row_cnt[],order[],order_tbl[],filter_sign[],filter_p[],at_semic[];
+  unit_row:=f_mcf:=mc_row:=info_cnt:=key_cnt:=filter_cnt:=0; unit_cnt:=1;
+  file_input:=default_data_file; file_output:=default_temp_file;
   %-----------------------------------------------------------------------------------------------
-  file_name_input:=default_data_file;
-  file_name_output:=default_temp_file;
-  %-----------------------------------------------------------------------------------------------
   for list=s:
-    at_colon:=scan_char(":",list,0,1);
-    at_equal:=scan_char("=",list,0,1);
-    at_less:=scan_char("<",list,0,1);
-    at_greater:=scan_char(">",list,0,1);
+    at_colon:=scan_char(":",list,0,1); at_equal:=scan_char("=",list,0,1);
+    at_less:=scan_char("<",list,0,1); at_greater:=scan_char(">",list,0,1);
     %---------------------------------------------------------------------------------------------
     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;
@@ -2027,93 +1735,66 @@
                       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
-    tag_s:=substring (0,sign_at-at_n) of list;
-    var_s:=substring (sign_at,length(list)) of list;
+    sT:=substring(0,sign_at-at_n) of list; sV:=substring(sign_at,length(list)) of list;
     %---------------------------------------------------------------------------------------------
     if sign_n=0:
-      if tag_s="f":
-        if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf";
-        else:                          file_name_input:=var_s;
-        fi
-      ef tag_s="o":
-        if scan_char(".",var_s,0,1)=0: file_name_output:=var_s&".aux";
-        else:                          file_name_output:=var_s;
-        fi
-      ef tag_s="s": key_cnt:=key_cnt+1; key_s[key_cnt]:=var_s;
+      if sT="f": if scan_char(".",sV,0,1)=0: file_input:=sV&".mcf";  else: file_input:=sV; fi
+      ef sT="o": if scan_char(".",sV,0,1)=0: file_output:=sV&".aux"; else: file_output:=sV; fi
+      ef sT="s": key_cnt:=key_cnt+1; key_s[key_cnt]:=sV;
       fi
-    %---------------------------------------------------------------------------------------------
     else:
-      filter_cnt:=filter_cnt+1;
-      filter_tag[filter_cnt]:=tag_s;
-      filter_sign[filter_cnt]:=sign_n;
-      if (sign_n>=3)and(is_num(var_s)=1): filter_var[filter_cnt]:=fix_num(var_s);
-      else:                               filter_var[filter_cnt]:=var_s;
+      filter_cnt:=filter_cnt+1; filter_tag[filter_cnt]:=sT; filter_sign[filter_cnt]:=sign_n;
+      if (sign_n>=3)and(is_num(sV)=1): filter_var[filter_cnt]:=fix_num(sV);
+      else: filter_var[filter_cnt]:=sV;
       fi
     fi
   endfor
   %-----------------------------------------------------------------------------------------------
   forever:
-    temps:=readfrom file_name_input; exitif temps=EOF;
+    temps:=readfrom file_input; exitif temps=EOF;
     if subc(1,temps)<>"%":
-      line_cnt:=line_cnt+1; unit_row:=unit_row+1;
-      line_s[unit_cnt][unit_row]:=temps;
-      if (subc(1,temps)="+")and(subc(2,temps)<>"-"): f_mcf:=1; mc_row:=1;
-      ef (subc(1,temps)="+")and(subc(2,temps)="-"):
-        unit_row_cnt[unit_cnt]:=unit_row;
-        f_mcf:=unit_row:=0;
-        filter_n:=1;
+      unit_row:=unit_row+1; line_s[unit_cnt][unit_row]:=temps;
+      if (substring(0,2) of temps)="+-":
+        row_cnt[unit_cnt]:=unit_row; f_mcf:=unit_row:=0; filter_n:=1;
         for i=1 upto filter_cnt: filter_p[i]:=0; endfor
         for i=1 upto key_cnt: sort_s[i]:=""; endfor
-        %---------------------------------------------------------------------------------------
         for i=1 upto info_cnt:
-          at_colon:=scan_char(":",info_s[i],0,1);
-          tag_s:=substring (0,at_colon-1) of info_s[i];
-          var_s:=substring (at_colon,length(info_s[i])) of info_s[i];
-          %-------------------------------------------------------------------------------------
+          nA:=scan_char(":",info_s[i],0,1); 
+          sT:=substring(0,nA-1) of info_s[i]; sV:=substring(nA,length(info_s[i])) of info_s[i];
           for j=1 upto key_cnt:
-            if key_s[j]=tag_s:
-              if is_num(var_s)=1: sort_s[j]:=fix_num(var_s); else: sort_s[j]:=var_s; fi
-            fi
+            if key_s[j]=sT: if is_num(sV)=1: sort_s[j]:=fix_num(sV); else: sort_s[j]:=sV; fi fi
           endfor
-          %-------------------------------------------------------------------------------------
           for j=1 upto filter_cnt:
-            if filter_tag[j]=tag_s:
+            if filter_tag[j]=sT:
               filter_p[j]:=1;
-              if (filter_sign[j]>=3)and(is_num(var_s)=1): temp_s:=fix_num(var_s);
-              else:                                       temp_s:=var_s;
+              if (filter_sign[j]>=3)and(is_num(sV)=1): temps:=fix_num(sV); else: temps:=sV; fi
+              if filter_sign[j]=1: if not(temps= filter_var[j]): filter_n:=0; fi
+              ef filter_sign[j]=2: if not(temps<>filter_var[j]): filter_n:=0; fi
+              ef filter_sign[j]=3: if not(temps< filter_var[j]): filter_n:=0; fi
+              ef filter_sign[j]=4: if not(temps> filter_var[j]): filter_n:=0; fi
+              ef filter_sign[j]=5: if not(temps<=filter_var[j]): filter_n:=0; fi
+              ef filter_sign[j]=6: if not(temps>=filter_var[j]): filter_n:=0; fi
               fi
-              if filter_sign[j]=1: if not(temp_s= filter_var[j]): filter_n:=0; fi
-              ef filter_sign[j]=2: if not(temp_s<>filter_var[j]): filter_n:=0; fi
-              ef filter_sign[j]=3: if not(temp_s< filter_var[j]): filter_n:=0; fi
-              ef filter_sign[j]=4: if not(temp_s> filter_var[j]): filter_n:=0; fi
-              ef filter_sign[j]=5: if not(temp_s<=filter_var[j]): filter_n:=0; fi
-              ef filter_sign[j]=6: if not(temp_s>=filter_var[j]): filter_n:=0; fi
-              fi
             fi
           endfor
         endfor
         for i=1 upto filter_cnt: if filter_p[i]=0: filter_n:=0; fi endfor
-        %-------------------------------------------------------------------------------------
         sort_all[unit_cnt]:="";
         for j=1 upto key_cnt:
           if j=key_cnt: sort_all[unit_cnt]:=sort_all[unit_cnt]&sort_s[j];
-          else:         sort_all[unit_cnt]:=fix_str(15,sort_s[1]);
+          else: sort_all[unit_cnt]:=fix_str(15,sort_s[1]);
           fi
         endfor
-        %-------------------------------------------------------------------------------------
-        info_cnt:=0;
-        if filter_n=1: unit_cnt:=unit_cnt+1; fi
-        %-------------------------------------------------------------------------------------
-      ef (subc(1,temps)<>"+")and(subc(1,temps)<>"%"):
+        info_cnt:=0; if filter_n=1: unit_cnt:=unit_cnt+1; fi
+      ef subc(1,temps)="+": f_mcf:=1; mc_row:=1;
+      ef subc(1,temps)<>"%":
         if f_mcf=1: mc_row:=mc_row+1;
         else:
-          semicol_cnt:=count_semicol(temps);
-          for i=1 upto semicol_cnt+1:
+          semic_cnt:=split_semic(temps);
+          for i=1 upto semic_cnt+1:
             info_cnt:=info_cnt+1;
-            if i<=semicol_cnt:
-              info_s[info_cnt]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps;
-            else:
-              info_s[info_cnt]:=substring (at_semicol[semicol_cnt],length(temps)) of temps;
+            if i<=semic_cnt: info_s[info_cnt]:=substring(at_semic[i-1],at_semic[i]-1) of temps;
+            else: info_s[info_cnt]:=substring(at_semic[semic_cnt],length(temps)) of temps;
             fi
           endfor
         fi
@@ -2122,59 +1803,42 @@
   endfor
   %=============================================================================================
   unit_cnt:=unit_cnt-1;
-  %---------------------------------------------------------------------------------------------
   if key_cnt>=1:
     for i=1 upto unit_cnt: order[i]:=0; endfor
-    for i=1 upto unit_cnt: min_s:="~";
+    for i=1 upto unit_cnt: temps:="~";
       for j=1 upto unit_cnt:
-        if order[j]=0: if sort_all[j]<min_s: min_s:=sort_all[j]; min_n:=j; fi fi
+        if order[j]=0: if sort_all[j]<temps: temps:=sort_all[j]; min_n:=j; fi fi
       endfor
       order[min_n]:=i; order_tbl[i]:=min_n;
     endfor
     for i=1 upto unit_cnt:
-      for j=1 upto unit_row_cnt[order_tbl[i]]: printf line_s[order_tbl[i]][j]; endfor
+      for j=1 upto row_cnt[order_tbl[i]]: printf line_s[order_tbl[i]][j]; endfor
     endfor
   else:
-    for i=1 upto unit_cnt: for j=1 upto unit_row_cnt[i]: printf line_s[i][j]; endfor endfor
+    for i=1 upto unit_cnt: for j=1 upto row_cnt[i]: printf line_s[i][j]; endfor endfor
   fi
-  closefrom file_name_input; closefrom file_name_output;
+  closefrom file_input; closefrom file_output;
   endgroup;
 enddef;
 %=============================================================================================
 vardef fix_str(expr n,s)=
-  save temp_s;
-  string temp_s;
-  if length(s)<n: temp_s:=s&substring(0,n-length(s)) of blank_str;
-  ef length(s)>n: temp_s:=substring(0,n) of s;
-  fi
-  temp_s
+  if length(s)<n: sS:=s&substring(0,n-length(s)) of blanks;
+  ef length(s)>n: sS:=substring(0,n) of s; fi sS
 enddef;
 %---------------------------------------------------------------------------------------------
 vardef fix_num(expr s)=
-  save temp_s,at_dot;
-  string temp_s;
-  temp_s:=s;
-  at_dot:=scan_char(".",temp_s,0,1);
-  if at_dot=0: temp_s:=fsr(4)(temp_s);  ef at_dot=1: temp_s:="   0"&temp_s;
-  ef at_dot=2: temp_s:="   "&temp_s;    ef at_dot=3: temp_s:="  "&temp_s;
-  ef at_dot=4: temp_s:=" "&temp_s;
-  fi
-  temp_s
+  sS:=s; nN:=scan_char(".",sS,0,1);
+  if nN=0: sS:=fsr(4)(sS); ef nN=1: sS:="   0"&sS;
+  ef nN=2: sS:="   "&sS; ef nN=3: sS:="  "&sS; ef nN=4: sS:=" "&sS; fi sS
 enddef;
 %---------------------------------------------------------------------------------------------
 vardef is_num(expr s)=
-  save numeric_n;
-  numeric_n:=1;
   for i=1 upto length(s):
-    if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): else: numeric_n:=0; fi
-  endfor
-  numeric_n
+    if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): nN:=1; else: nN:=0; fi endfor nN
 enddef;
 %-------------------------------------------------------------------------------------------------
-vardef count_semicol(expr s)=
-  save nS;
-  nS:=at_semicol[0]:=0;
-  for i=1 upto length(s): if subc(i,s)=";": nS:=nS+1; at_semicol[nS]:=i; fi endfor
-  nS
+vardef split_semic(expr s)=
+  nN:=at_semic[0]:=0;
+  for i=1 upto length(s): if subc(i,s)=";": nN:=nN+1; at_semic[nN]:=i; fi endfor nN
 enddef;
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% molecular data base file    mcf_data_base.mcf   by Akira Yamaji   2022.01.17
+% molecular data base file    mcf_data_base.mcf   by Akira Yamaji   2022.02.20
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %  tag1:var1;tag2:var2;tag3:var3 .....
 %  first character of line "%" comment out
@@ -358,7 +358,7 @@
 Cat:biological;EN:Riboflavin;MW:376.37;EXA:1
 +
 <30,Ph,{3,9}=?6,{8,16}=dl,{7,10,14}:N,12:NH,{11,13}://O,{1,6}:/_,
- @10,\`1.2,!,*/OH,!,/*OH,!,*/OH,!2,OH
+ @10,\`1.5,!,*/OH,!,/*OH,!,*/OH,!2,OH
 +------------------------------------------------------------------------------
 Cat:biological;EN:Resveratrol;MW:228.24;EXA:1
 +
@@ -925,10 +925,10 @@
 +------------------------------------------------------------------------------
 Cat:antibiotics;EN:Rifampicin;MW:822.94;EXA:1
 +
-<30,Ph,6:/_^30,5:/OH,|,-6=?5,1:O,3://O,2:/*_^60,|,-8=?6,{2,4}=dl,{1,4}:/OH,
- #1, at -2,\,NH,60,//O,-60,/_,60~dl,60,60~dl,-60,
- */_,60,/*OH,-60,/*_,60,/*OH,60,*/_^30,-60,
- 60,/*_^30,-53,66,-53~dl,66`1.2,O,##,&$8,
+<30,Ph,6:/_^30,5:/OH,-6=?5,-3:O,-8=?6,{-2,-4}=dl,{-1,-4}:/OH,
+ #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}:*/_,{21,23}:/*OH,{8^60,22,26^30}:/*_,
  -4:/*O!, at -6,-30,O,!,//O,!,@$11,\,!!,N,!,|,?6,1:N,4:N!
 +------------------------------------------------------------------------------
 %==============================================================================

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,20 +1,21 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format                      by Akira Yamaji  2022.01.22
+% Molecular Coding Format                      by Akira Yamaji  2022.02.20
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph;   %%% it must be version 4.79
-message "* mcf_exa_soc 2022.01.22";
+input mcf2graph;   %%% it must be version 4.80
+message "* mcf_exa_soc 2022.02.20";
 message "";
 %------------------------------------------------------------------------------
 %%%%sw_frame:=Outside;
 %%%%sw_numbering:=Bond;
 %%%%sw_numbering:=Atom;
+%%%%sw_frame:=Atom;
 tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW";
 %------------------------------------------------------------------------------
 %% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png";
 %------------------------------------------------------------------------------
-%%%%ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));)
+%ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));)
 %------------------------------------------------------------------------------
-%sw_output:=Font+Info;
+%sw_output:=Fig+Info;
 %ext(defaultfont:=mpfont; defaultscale:=.3;
 %label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));)
 %------------------------------------------------------------------------------
@@ -28,7 +29,7 @@
 %%%%  beginfigm("t:EN","v:Caffeine")          % select EN=Caffeine
 forever:
 %%%%  beginfigm("f:mcf_data_base","v+:*")     % 'mcf_data_base.mcf'(default)
-%%%%  beginfigm("f:temp","v+:*")              % use query output
+%%%%beginfigm("f:temp","v+:*")                % use query output 'temp.mcf'
 %%%%  beginfigm("v+:*")                       % select all
   beginfigm("t:EXA","v+:1")                   % 'v+:1': select EXA=1
     if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi

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	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of MCF   Typeset with LuaLaTeX(luamplib)   by A.Yamaji   2022.01.22
+% Example of MCF   Typeset with LuaLaTeX(luamplib)   by A.Yamaji   2022.02.20
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% ** mcf2graph.mf must be version 4.79
+% ** mcf2graph.mf must be version 4.80
 % ** use mcf_data_base.mcf
 % ** typeset by LuaLaTeX(luamplib)
 \documentclass{article}
@@ -47,7 +47,7 @@
 \newcount \t at num%
 \font\labelM=cmtt8 at 6pt\relax%
 %-------------------------------------------------------------------------
-\f at num=0%
+\f at num=1%
 \t at num=0%
 \unitlength=0.01mm%
 \noindent%
@@ -79,7 +79,7 @@
 \advance\f at num\@ne\relax%
 \advance\t at num\@ne\relax%
 \ifnum\t at num=5 \\ \t at num=\z@ \fi%
-\ifnum\f at num=155 \CONT at false \fi%
+\ifnum\f at num=156 \CONT at false \fi%
 \ifCONT@ \repeat%
 %------------------------------------------------------------------------------
 \end{document}

Modified: trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp
===================================================================
--- trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,9 +1,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2022.01.22
+% Molecular Coding Format file for mcf_manual.tex  by Akira.Yamaji 2022.02.20
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-input mcf2graph;   %% it must be version 4.79
+input mcf2graph;   %% it must be version 4.80
 % ** use data base file 'mcf_data_base.mcf'
-message "mcf_man_soc 2022.01.22"; message "";
+message "mcf_man_soc 2022.02.20"; message "";
 %------------------------------------------------------------------------
 sw_mframe:=0;
 sw_expand:=0;
@@ -358,48 +358,48 @@
   MC(<-30,!2,O,!2,N,!2)
 endfigm
 %***********************************************************************
-beginfigm("EN:change atom")
+beginfigm("EN:change atom",":<30,!5,2:O,{3:5}:N")
   fsize:=(70mm,10mm);
   msize:=(0.48,1);
-  MCat(0,0.5)(<30,!5,2:O,{3:5}:N)
+  MCat(0,0.5)(scantokens(mc))
   sw_numbering:=Atom;
-  MCat(1,0.5)(<30,!5,2:O,{3:5}:N)
+  MCat(1,0.5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:change atom brock address 1")
+beginfigm("EN:change atom brock address 1",":?6, at 4,\,|,?6,2:O")
   fsize:=(70mm,14mm);
   fmargin:=(3mm,1.5mm);
-  MCat(0,.5)(?6, at 4,\,|,?6,2:O)
+  MCat(0,.5)(scantokens(mc))
   sw_numbering:=Atom;
   msize:=(1,.88);
-  MCat(1,.5)(?6, at 4,\,?6)
+  MCat(1,.5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:change atom brock address 2")
+beginfigm("EN:change atom brock address 2",":?6, at 4,\,|,?6,||,2:N")
   fsize:=(70mm,14mm);
   fmargin:=(3mm,1.5mm);
-  MCat(0,.5)(?6, at 4,\,|,?6,||,2:N)
+  MCat(0,.5)(scantokens(mc))
   sw_numbering:=Atom;
   msize:=(1,.88);
-  MCat(1,.5)(?6, at 4,\,?6)
+  MCat(1,.5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:change atom absolute address")
+beginfigm("EN:change atom absolute address",":?6, at 4,\,?6,$2:N")
   fsize:=(70mm,14mm);
   fmargin:=(3mm,1.5mm);
-  MCat(0,.5)(?6, at 4,\,?6,$2:N)
+  MCat(0,.5)(scantokens(mc))
   sw_numbering:=Atom;
   msize:=(1,.88); 
-  MCat(1,.5)(?6, at 4,\,?6)
+  MCat(1,.5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:change atom relative adress")
+beginfigm("EN:change atom relative adress",":?6, at 4,\,?6,-2:N")
   fsize:=(70mm,14mm);
   fmargin:=(3mm,1.5mm);
-  MCat(0,.5)(?6, at 4,\,?6,-2:N)
+  MCat(0,.5)(scantokens(mc))
   sw_numbering:=Atom;
   msize:=(1,.88);
-  MCat(1,.5)(?6, at 4,\,?6)
+  MCat(1,.5)(scantokens(mc))
 endfigm
 %***********************************************************************
 beginfigm("EN:Charged atom")
@@ -770,11 +770,11 @@
   )
 endfigm
 %***********************************************************************
-beginfigm("EN:offset_thickness") 
+beginfigm("EN:offset_thickness",":<30,Ph") 
   fsize:=(60mm,12mm);
-  offset_thickness:=0.0pt; MCat(0.1,0.5)(<30,Ph)
-  offset_thickness:=0.2pt; MCat(0.55,0.5)(<30,Ph)
-  offset_thickness:=0.5pt; MCat(1,0.5)(<30,Ph)
+  offset_thickness:=0.0pt; MCat(0.1,0.5)(scantokens(mc))
+  offset_thickness:=0.2pt; MCat(0.55,0.5)(scantokens(mc))
+  offset_thickness:=0.5pt; MCat(1,0.5)(scantokens(mc))
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.0pt",(0,1bp));
     label.urt("0.2pt",(0.36w,1bp));
@@ -782,14 +782,11 @@
   )
 endfigm
 %***********************************************************************
-beginfigm("EN:offset_bond_gap")
+beginfigm("EN:offset_bond_gap",":<30,Ph")
   fsize:=(60mm,12mm);
-  offset_bond_gap:=0.0pt;
-  MCat(0.1, .5)(<30,Ph)
-  offset_bond_gap:=0.3pt;   %<<== default
-  MCat(.55, .5)(<30,Ph)
-  offset_bond_gap:=1.0pt;
-  MCat(1, .5)(<30,Ph)
+  offset_bond_gap:=0.0pt; MCat(0.1, 0.5)(scantokens(mc))
+  offset_bond_gap:=0.3pt; MCat(0.55,0.5)(scantokens(mc))  %<<== default
+  offset_bond_gap:=1.0pt; MCat(1,   0.5)(scantokens(mc))
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.0pt",(0,1bp));
     label.urt("0.3pt",(0.36w,1bp));
@@ -799,12 +796,9 @@
 %***********************************************************************
 beginfigm("EN:offset_atom")
   fsize:=(60mm,12mm);
-  offset_atom:=0.0pt;
-  MCat(0.1, .5)(<30,?6,3:O)
-  offset_atom:=0.8pt;   %<<== default
-  MCat(.55, .5)(<30,?6,3:O)
-  offset_atom:=2.0pt;
-  MCat(1, .5)(<30,?6,3:O)
+  offset_atom:=0.0pt; MCat(0.1, .5)(<30,?6,3:O)
+  offset_atom:=0.8pt; MCat(.55, .5)(<30,?6,3:O)   %<<== default
+  offset_atom:=2.0pt; MCat(1,   .5)(<30,?6,3:O)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.0pt",(0,1bp));
     label.urt("0.8pt",(0.36w,1bp));
@@ -814,12 +808,9 @@
 %***********************************************************************
 beginfigm("EN:offset_wedge") 
   fsize:=(60mm,12mm);
-  offset_wedge:=0.0pt;
-  MCat(0.1,0.5)(<30,?6,5:*/_)
-  offset_wedge:=0.4pt;       %<<== default
-  MCat(0.55,0.5)(<30,?6,5:*/_)
-  offset_wedge:=1.0pt;
-  MCat(1, 0.5)(<30,?6,5:*/_)
+  offset_wedge:=0.0pt; MCat(0.1,0.5)(<30,?6,5:*/_)
+  offset_wedge:=0.4pt; MCat(0.55,0.5)(<30,?6,5:*/_)  %<<== default
+  offset_wedge:=1.0pt; MCat(1, 0.5)(<30,?6,5:*/_)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.0pt",(0,1bp));
     label.urt("0.4pt",(0.36w,1bp));
@@ -830,12 +821,9 @@
 beginfigm("EN:max_blength")
   fsize:=(60mm,20mm);
   sw_frame:=sw_frame+Mol;
-  max_blength:=5mm;
-  MCat(0, .5)(<30,Ph)
-  max_blength:=8mm;
-  MCat(.4,.5)(<30,Ph)
-  max_blength:=10mm;
-  MCat(1, .5)(<30,Ph)   %<<== default
+  max_blength:=5mm;  MCat(0, .5)(<30,Ph)
+  max_blength:=8mm;  MCat(.4,.5)(<30,Ph)
+  max_blength:=10mm; MCat(1, .5)(<30,Ph)   %<<== default
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label("5mm", (0.1w,0.5h));
     label("8mm", (0.42w,0.5h));
@@ -845,12 +833,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_thickness_bond")
   fsize:=(60mm,12mm);
-  ratio_thickness_bond:=0.005;
-  MCat(0.1,0.5)(<30,Ph)
-  ratio_thickness_bond:=0.015;    %<<== default
-  MCat(.55,0.5)(<30,Ph)
-  ratio_thickness_bond:=0.03;
-  MCat(1, 0.5)(<30,Ph)
+  ratio_thickness_bond:=0.005;  MCat(0.1,0.5)(<30,Ph)
+  ratio_thickness_bond:=0.015;  MCat(.55,0.5)(<30,Ph)  %<<== default
+  ratio_thickness_bond:=0.03;   MCat(1, 0.5)(<30,Ph)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.005",(0,1bp));
     label.urt("0.015",(0.36w,1bp));
@@ -860,12 +845,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_char_bond")
   fsize:=(60mm,12mm);
-  ratio_char_bond:=1.0;
-  MCat(0, .5)(<30,?6,6:O,3:NH)
-  ratio_char_bond:=1.5;   %<<== default
-  MCat(.5, .5)(<30,?6,6:O,3:NH)
-  ratio_char_bond:=2.0;
-  MCat( 1, .5)(<30,?6,6:O,3:NH)
+  ratio_char_bond:=1.0;  MCat(0, .5)(<30,?6,6:O,3:NH)
+  ratio_char_bond:=1.5;  MCat(.5, .5)(<30,?6,6:O,3:NH)   %<<== default
+  ratio_char_bond:=2.0;  MCat( 1, .5)(<30,?6,6:O,3:NH)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("1.0",(0,1bp));
     label.urt("1.5",(0.36w,1bp));
@@ -875,12 +857,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_bondgap_bond")
   fsize:=(60mm,12mm);
-  ratio_bondgap_bond:=0.10;
-  MCat(0.1, .5)(<30,Ph)
-  ratio_bondgap_bond:=0.15;   %<<== default
-  MCat(.55, .5)(<30,Ph)
-  ratio_bondgap_bond:=0.20;
-  MCat(1  , .5)(<30,Ph)
+  ratio_bondgap_bond:=0.10; MCat(0.1, .5)(<30,Ph)
+  ratio_bondgap_bond:=0.15; MCat(.55, .5)(<30,Ph)    %<<== default
+  ratio_bondgap_bond:=0.20; MCat(1  , .5)(<30,Ph)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.10",(0,1bp));
     label.urt("0.15",(0.36w,1bp));
@@ -890,12 +869,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_atom_bond")
   fsize:=(60mm,12mm);
-  ratio_atom_bond:=0.25;
-  MCat(0.1, .5)(<30,?6,3:O)
-  ratio_atom_bond:=0.33;   %<<== default
-  MCat(.55, .5)(<30,?6,3:O)
-  ratio_atom_bond:=0.45;
-  MCat(1, .5)(<30,?6,3:O)
+  ratio_atom_bond:=0.25;  MCat(0.1, .5)(<30,?6,3:O)
+  ratio_atom_bond:=0.33;  MCat(.55, .5)(<30,?6,3:O)   %<<== default
+  ratio_atom_bond:=0.45;  MCat(1, .5)(<30,?6,3:O)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.25",(0,1bp));
     label.urt("0.33",(0.36w,1bp));
@@ -905,12 +881,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_wedge_bond")
   fsize:=(70mm,12mm);
-  ratio_wedge_bond:=0.1;
-  MCat(0.05, .5)(?6,4:*/_)
-  ratio_wedge_bond:=0.12;   %<<== default
-  MCat(.55, .5)(?6,4:*/_)
-  ratio_wedge_bond:=0.2;;
-  MCat(1  , .5)(?6,4:*/_)
+  ratio_wedge_bond:=0.1;  MCat(0.05,.5)(?6,4:*/_)
+  ratio_wedge_bond:=0.12; MCat(.55, .5)(?6,4:*/_)   %<<== default
+  ratio_wedge_bond:=0.2;  MCat(1  , .5)(?6,4:*/_)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.10",(0,1bp));
     label.urt("0.12",(0.36w,1bp));
@@ -918,15 +891,12 @@
   )
 endfigm
 %***********************************************************************
-beginfigm("EN:ratio_atomgap_atom")
+beginfigm("EN:ratio_atomgap_atom",":<30,!2`0.5,2:O")
   fsize:=(70mm,12mm);
   sw_frame:=sw_frame+Atom;
-  ratio_atomgap_atom:=0.00;
-  MCat(0, .5)(<30,!2`0.5,2:O)
-  ratio_atomgap_atom:=0.050;    %<<== default
-  MCat(.5,.5)(<30,!2`0.5,2:O)
-  ratio_atomgap_atom:=0.12;
-  MCat(1, .5)(<30,!2`0.5,2:O)
+  ratio_atomgap_atom:=0.00;  MCat(0, .5)(scantokens(mc))
+  ratio_atomgap_atom:=0.050; MCat(.5,.5)(scantokens(mc))  %<<== default
+  ratio_atomgap_atom:=0.12;  MCat(1, .5)(scantokens(mc))
   ext(defaultscale:=0.75; labeloffset:=1bp;
     label.urt("0.00",(0.05w,1bp));
     label.urt("0.05",(0.45w,1bp));
@@ -936,12 +906,9 @@
 %***********************************************************************
 beginfigm("EN:ratio_chain_ring")
   fsize:=(70mm,12mm);
-  ratio_chain_ring:= 0.4;
-  MCat(0.05, .5)(<30,?6,4:/!)
-  ratio_chain_ring:= 0.66;   %<<== default
-  MCat(.45, .5)(<30,?6,4:/!)
-  ratio_chain_ring:= 1;
-  MCat(1, .5)(<30,?6,4:/!)
+  ratio_chain_ring:= 0.4;  MCat(0.05,.5)(<30,?6,4:/!)
+  ratio_chain_ring:= 0.66; MCat(.45, .5)(<30,?6,4:/!)   %<<== default
+  ratio_chain_ring:= 1;    MCat(1,   .5)(<30,?6,4:/!)
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.40",(0,1bp));
     label.urt("0.66",(0.3w,1bp));
@@ -949,14 +916,11 @@
   )
 endfigm
 %***********************************************************************
-beginfigm("EN:ratio_hashgap_bond")
+beginfigm("EN:ratio_hashgap_bond",":<30,!2,2:/*_`1.5")
   fsize:=(70mm,15mm);
-  ratio_hashgap_bond:=0.06;
-  MCat(0.08, .5)(<30,!2,2:/*_`1.5)
-  ratio_hashgap_bond:=0.12;   %<<== default
-  MCat( .55,  .5)(<30,!2,2:/*_`1.5)
-  ratio_hashgap_bond:=0.20;
-  MCat(1, .5)(<30,!2,2:/*_`1.5)
+  ratio_hashgap_bond:=0.06; MCat(0.08,.5)(scantokens(mc))
+  ratio_hashgap_bond:=0.12; MCat( .55,.5)(scantokens(mc)) %<<== default
+  ratio_hashgap_bond:=0.20; MCat(1,   .5)(scantokens(mc))
   ext(defaultscale:=0.6; labeloffset:=1bp;
     label.urt("0.06",(0,1bp));
     label.urt("0.12",(0.4w,1bp));
@@ -994,25 +958,25 @@
   MCat(.8,.7)(Ph)
 endfigm
 %***********************************************************************
-beginfigm("EN:Switwch Expand")
+beginfigm("EN:Switwch Expand",":<30,Ph,4:/COOH,3:/NH2")
   fsize:=(60mm,20mm);
-  MCat(0, .5)(<30,Ph,4:/COOH,3:/NH2)
+  MCat(0, .5)(scantokens(mc))
   sw_expand:=1;
-  MCat(1, .5)(<30,Ph,4:/COOH,3:/NH2)
+  MCat(1, .5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:Switwch abbreviate group")
+beginfigm("EN:Switwch abbreviate group",":<30,Ph,4:/Cl,3:/F")
   fsize:=(60mm,12mm);
-  MCat(.15, .5)(<30,Ph,4:/Cl,3:/F)
+  MCat(.15, .5)(scantokens(mc))
   sw_abbreviate:=Group;
-  MCat(.85, .5)(<30,Ph,4:/Cl,3:/F)
+  MCat(.85, .5)(scantokens(mc))
 endfigm
 %***********************************************************************
-beginfigm("EN:Switwch abbreviate bondtype")
+beginfigm("EN:Switwch abbreviate bondtype",":<30,Ph,4:/Cl,3:/F")
   fsize:=(60mm,12mm);
-  MCat(.15, .5)(<30,Ph,4:/Cl,3:/F)
+  MCat(.15, .5)(scantokens(mc))
   sw_abbreviate:=Bond;
-  MCat(.85, .5)(<30,Ph,4:/Cl,3:/F)
+  MCat(.85, .5)(scantokens(mc))
 endfigm
 %***********************************************************************
 beginfigm("EN:Switwch font frame 1")

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	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%  Molecular Coding Format manual                by  Akira Yamaji 2022.01.22
+%  Molecular Coding Format manual                by  Akira Yamaji 2022.02.13
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \documentclass[a4paper]{article}
 \usepackage[pdftex]{graphicx}

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	2022-02-20 21:13:18 UTC (rev 62100)
+++ trunk/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex	2022-02-20 21:13:58 UTC (rev 62101)
@@ -1,7 +1,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Example of  MCF typest with LuaLaTeX(luamplib)    by A.Yamaji    2022.01.22
+% Example of  MCF typest with LuaLaTeX(luamplib)    by A.Yamaji    2022.02.20
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% ** mcf2graph.mp must be version 4.79
+% ** mcf2graph.mp must be version 4.80
 % ** use mcf_data_base.mcf
 \documentclass{article}
 %------------------------------------------------------------------------------
@@ -50,17 +50,13 @@
 \begin{verbatim}
 beginfigm("EN:Erythromycin","MW:733.93")
   fsize:=(120mm,30mm);
-  MC(
-    <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
-    14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_,
-    {6^35,11,12^-35}:*/OH,
-    @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##,
-    @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!
-  )
-  ext(defaultscale:=0.8;
-      label.lrt("fm: "&cal_FM,(0,h-5mm));
-      label.lrt("mw: "&cal_MW,(0,h-9mm));
-      label.lrt("MW: "&inf_MW,(0,h-13mm));)
+  MC(<30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
+      14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_,
+      {6^35,11,12^-35}:*/OH,
+      @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##,
+      @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!)
+  ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm));
+      label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));)
 endfigm;
 \end{verbatim}
 %----------------------------------------------------------------------------
@@ -67,18 +63,13 @@
 \begin{mplibcode}
 beginfigm("EN:Erythromycin","MW:733.93")
   fsize:=(120mm,30mm);
-  MC(
-    <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
-    14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_,
-    {6^35,11,12^-35}:*/OH,
-    @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##,
-    @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!
-  )
-  ext(defaultscale:=0.8;
-      label.lrt("fm: "&cal_FM,(0,h-5mm));
-      label.lrt("mw: "&cal_MW,(0,h-9mm));
-      label.lrt("MW: "&inf_MW,(0,h-13mm));
-     )
+  MC(<30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1,
+      14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_,
+      {6^35,11,12^-35}:*/OH,
+      @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##,
+      @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!)
+  ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm));
+      label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));)
 endfigm;
 \end{mplibcode}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -93,9 +84,11 @@
   ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,                ",
   ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr              ")
   %---------------------------------------------------------------------
-  fsize:=(140mm,30mm); if check(mc)=0: MCat(0,0.5)(scantokens(mc)) fi
-  sw_numbering:=Atom;  if check(mc)=0: MCat(0.6,0.5)(scantokens(mc)) fi
-  sw_numbering:=Bond;  if check(mc)=0: MCat(1,0.5)(scantokens(mc)) fi
+  fsize:=(140mm,30mm);
+  if check(mc)=0:       MCat(0,0.5)(scantokens(mc))
+    sw_numbering:=Atom; MCat(0.6,0.5)(scantokens(mc))
+    sw_numbering:=Bond; MCat(1,0.5)(scantokens(mc))
+  fi
 endfigm
 \end{verbatim}
 %----------------------------------------------------------------------------
@@ -107,9 +100,11 @@
   ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph,                ",
   ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr              ")
   %---------------------------------------------------------------------
-  fsize:=(140mm,30mm); if check(mc)=0: MCat(0,0.5)(scantokens(mc)) fi
-  sw_numbering:=Atom;  if check(mc)=0: MCat(0.6,0.5)(scantokens(mc)) fi
-  sw_numbering:=Bond;  if check(mc)=0: MCat(1,0.5)(scantokens(mc)) fi
+  fsize:=(140mm,30mm);
+  if check(mc)=0:       MCat(0,0.5)(scantokens(mc))
+    sw_numbering:=Atom; MCat(0.6,0.5)(scantokens(mc))
+    sw_numbering:=Bond; MCat(1,0.5)(scantokens(mc))
+  fi
 endfigm
 \end{mplibcode}
 %----------------------------------------------------------------------------



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