summaryrefslogtreecommitdiff
path: root/graphics/mcf2graph/mcf2graph.mp
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mp')
-rw-r--r--graphics/mcf2graph/mcf2graph.mp277
1 files changed, 140 insertions, 137 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mp b/graphics/mcf2graph/mcf2graph.mp
index ba2c36b292..4f38b05612 100644
--- a/graphics/mcf2graph/mcf2graph.mp
+++ b/graphics/mcf2graph/mcf2graph.mp
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 5.11 Copyright (c) 2013-2024 Akira Yamaji
+% mcf2graph ver 5.12 Copyright (c) 2013-2024 Akira Yamaji
%
% Permission is hereby granted, free of charge, to any person obtaining a copy of this software
% and associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -22,7 +22,7 @@
% This package is located at : http://www.ctan.org/pkg/mcf2graph
% Suggestion or request mail to : mcf2graph@gmail.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-message "* This is mcf2graph ver 5.11 2024.01.21";
+message "* This is mcf2graph ver 5.12 2024.02.25";
tracingstats:=1; prologues:=3; warningcheck:=0;
%-------------------------------------------------------------------------------------------------
newinternal string EN_;
@@ -33,13 +33,13 @@ string row[][],save_str[],tbl_atom_str[],str_tbl[],arg_s[],mc[],ex[],ad[],op[],
lib_tag[][],lib_val[][],mc,ex,ad,op,aux_delimiter,default_library,EN,FM,MW,MI,CAT,JN,CAS,
USE,EXA,EXB,file_input,file_output,default_temp_file,mpfont,atomfont,tempc,temps,blanks,
sC,sI,sS,sT,sV,forbiddens;
-pair save_pair[],msize,mposition,fsize,fmargin,dum,save_mposition,?,?O,?w,?z;
+pair save_pair[],msize,mposition,fsize,fmargin,save_mposition,?,?wf,?zf,?w,?z,?O,?NH;
%-------------------------------------------------------------------------------------------------
fig_num:=str_cnt:=tbl_cnt:=mangle:=sw_frame:=sw_trimming:=sw_ext_all:=sw_abbreviate:=sw_expand:=0;
sw_comment:=sw_output:=sw_numbering:=tag_cnt:=rw_cnt:=pcode_all:=0;
numbering_start:=1; numbering_end:=4095;
%-------------------------------------------------------------------------------------------------
-aux_delimiter:=";"; blanks:= " "; forbiddens:=" &()[]{}^=;!'+,`~"; dum:=(-4091,0);
+aux_delimiter:=";"; blanks:= " "; forbiddens:=" &()[]{}^=;!'+,`~";
for s="No","EN","JN","MW","MI","FM","CAT","CAS","USE","EXA","EXB": tag[incr tag_cnt]:=s; endfor
MW_n:=0; 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;
@@ -109,8 +109,7 @@ if ahlength=5: message "* output MOL file(V2000)"; message "* "&jobname&"-nnn-"&
ef ahlength=6: message "* output MOL file(V3000)"; message "* "&jobname&"-nnn-"&"EN"&".mol";
ef ahlength=7: message "* output report file"; message "* file name="&jobname&"-report.txt"; fi
clearit;
-%--------------------------------------------------------------------------------------------------
-?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;
@@ -121,12 +120,12 @@ fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5);
ahangle:=45; ahlength:=4; defaultsize:=8; defaultscale:=1; labeloffset:=3; ext_defaultline:=0.5;
lonepairdiam:=lonepairspace:=circlediam:=circlepen:=bboxmargin:=0; mc_length:=100;
outputformatoptions:="";
-%==================================================================================================
-pcode_emb_start:=1000; % 1001 => 1900 for embedded pcode (max 1900)
-pcode_emi_start:=1900; % 1901 => 2000 for embedded internal pcode (max 100)
-pcode_usr_start:=2000; % 2001 => 3000 for user pcode (max 1000)
+%=================================================================================================
+pcode_emb_start:=1001; % 1001 => 1900 for embedded pcode (max 900)
+pcode_emi_start:=1901; % 1901 => 2000 for embedded internal pcode (max 100)
+pcode_usr_start:=2001; % 2001 => 3000 for user pcode (max 1000)
pcode_int_start:=3000; % 3001 => 4000 for internal pcode (max 1000)
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
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,
@@ -135,7 +134,7 @@ def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_t
_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,
@@ -144,7 +143,7 @@ def parameter_list=
thickness_frame,offset_thickness,numbering_start,numbering_end,defaultsize,defaultscale,
labeloffset,mangle,blength,fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap
enddef;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
def init_par(text t)= nA:=nB:=nC:=0;
for list=t: if numeric list: save_num[incr nA]:=list;
ef pair list: save_pair[incr nB]:=list;
@@ -152,7 +151,7 @@ def init_par(text t)= nA:=nB:=nC:=0;
fi
endfor
enddef;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
def store_par(text t)= nA:=nB:=nC:=0;
for list=t: if numeric list: if save_num[incr nA]<>list: save_num[nA]:=list; fi
ef pair list: if save_pair[incr nB]<>list: save_pair[nB]:=list; fi
@@ -160,7 +159,7 @@ def store_par(text t)= nA:=nB:=nC:=0;
fi
endfor
enddef;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
def restore_par(text t)= nA:=nB:=nC:=0;
forsuffixes list=t: if numeric list: if list<>save_num[incr nA]: list:=save_num[nA]; fi
ef pair list: if list<>save_pair[incr nB]: list:=save_pair[nB]; fi
@@ -168,10 +167,10 @@ def restore_par(text t)= nA:=nB:=nC:=0;
fi
endfor
enddef;
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
def beginfigm=
begingroup
- save ','',//,@,#,#@,##,\,\\,\*,|=,|<,**,++,_,f_ext,blen,ext,add,ang_br,fw_n,bw_n,
+ save ','',`,``,//,@,#,#@,##,\,\\,\*,|=,|<,**,++,_,f_ext,blen,ext,add,ang_br,fw_n,bw_n,
info_cnt,bond_cntA,firstc,warning_cnt,hideH,hideH_cnt,cntM,cntA,cntB,
minX,minY,maxX,maxY,posA,posM,lineB,sB,eB,angB,angA,lenB,angX,numS,sumA,bond_num,wdM,htM,
chargeA,addA,add_rot,mol_pic,color_list,filter_s,no,mw,mi,fm;
@@ -181,21 +180,22 @@ def beginfigm=
string mi,no,fm,mw,firstc,filter_s;
picture mol_pic[];
color color_list[];
- %------------------------------------------------------------------------------------------------
+ %-----------------------------------------------------------------------------------------------
store_par(parameter_list);
no:=mc:=ex:=ad:=op:=temps:=mw:=mi:=fm:=filter_s:="";
EN:=JN:=MW:=FM:=MI:=CAS:=CAT:=EXA:=EXB:=USE:="-";
f_ext:=cntM:=mc_row:=ex_row:=ad_row:=op_row:=info_cnt:=err_cnt:=0;
let ext=ext_to_fig; let add=add_to_molecule; let ++=add_to_molecule; let **=ext_to_fig;
- def ' = read_ud enddef; def '' = readm enddef; def \ = drawm enddef; def \\ = putm enddef;
+ def ' = define_parts enddef; def '' = readm enddef; def \ = drawm enddef; def \\ = putm enddef;
def \* = checkm enddef; def $ = getm enddef; def @ expr p = mposition:=p; enddef;
- def # expr p = fsize:=p; enddef; def #@ expr p = fmargin:=p; enddef;
+ def # expr p = fsize:=p; enddef; def #@ expr p = fmargin:=p; enddef;
+ def `(expr s) = define_group_string(s)() enddef; def `` = define_group_string enddef;
def ## expr p = msize:=p; enddef; def |=(expr n) = blength:=n; enddef;
def |<(expr n) = max_blength:=n; enddef; def _ expr s = EN:=s; enddef;
pcode_num:=pcode_usr_start; pcode_int:=pcode_int_start; fig_num:=fig_num+1;
mol_pic[0]:=nullpicture;
enddef;
-%--------------------------------------------------------------------------------------------------
+%-------------------------------------------------------------------------------------------------
def endfigm=
%--------------------------------------------------------------------------------------------
if cntM>=1:
@@ -306,14 +306,10 @@ def putm=
if ex_row>=1: ext(scantokens(ex)) fi
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-vardef '(text t)= pcode_num:=pcode_num+-1; read_mcf(pcode_num)(t); pcode_num enddef;
-vardef read_id(text t)= pcode_num:=pcode_num+-1;
- read_mcf(pcode_num)(|,#rate_cr,t,##,(_com,_rest)); pcode_num enddef;
-vardef read_ud(text t)= pcode_num:=pcode_num+-1;
- read_mcf(pcode_num)(dum,dum,|,t,(_com,_rest)); pcode_num enddef;
+vardef define_parts(text t)= pcode_num:=pcode_num+-1; read_mcf(pcode_num)(t); pcode_num 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;
-primarydef a op_plus b = read_id(a,b) enddef;
+primarydef a op_plus b = define_parts(a,b) enddef;
tertiarydef a bond__bond b = (a,b) enddef;
tertiarydef a bond___bond b = (a+-2000,b) enddef;
tertiarydef a bond____bond b = (a+-2000,b+-2000) enddef;
@@ -338,19 +334,18 @@ def group_wv secondary n = /n~wv enddef; def group_nb secondary n = /n~nb endde
def read_mcf(expr n)(text t)=
begingroup
if unknown inside_mc::
- save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,+,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,
+ save /,//,/*,*/,**,*/*,~,^,`,<,>,:,=,+,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,
--,---,----,CP,CA,CC,DL,FR,inside_mc;
inside_mc:=1; | :=mark_adress; || :=reset_adress; ##:=reset_length; _:=NO_ATOM;
\:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv;
- let = ==op_equ; let : ==op_col; let ^==op_hat; let ~==op_til; let > ==op_lth; let `==op_bqu;
- let -- == bond__bond; let --- == bond___bond; let ---- == bond____bond;
- let }==); let @$==jump_atom_abs; let < ==rot_angle; let @==jump_atom; let &==cyc_atom;
- let #==chg_length; let /==group_si; let //==group_dm; let */==group_wf; let /*==group_zf;
+ let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lth; let `==op_bqu;
+ let -- == bond__bond; let --- == bond___bond; let ---- == bond____bond; let + ==op_plus;
+ let } ==); let @$ ==jump_atom_abs; let < ==rot_angle; let @ ==jump_atom; let & ==cyc_atom;
+ let # ==chg_length; let / ==group_si; let // ==group_dm; let */ ==group_wf; let /* ==group_zf;
let */*==group_wv; let **==group_nb; let CP == pcode_add; let CA == pcode_add_adr;
let FR == fuse_ring_bonds; def DL(expr p)==CA(_set_line,dl,p) enddef;
def CB(expr p)==CP(_mk_bond,p) enddef; def CC(expr p)==CP(_com,p) enddef;
- def $==abs_adress enddef; def &$==&.$ enddef; def '==read_id enddef; let +==op_plus;
- def {==read_number( enddef;
+ def $==abs_adress enddef; def &$==&.$ enddef; def {==read_number( enddef;
fi
%----------------------------------------------------------------------------------------------
pcode_cnt[n]:=0;
@@ -388,8 +383,8 @@ def expand_pcode(expr n,a)=
enddef;
%-------------------------------------------------------------------------------------------------
vardef read_number(text t)=
- save :,','`;
- let : == from_until; def ' == +-2000 enddef; def '` == +-2000` enddef;
+ save :,';
+ let : == from_until; def ' == +-2000 enddef;
pcode_int:=pcode_int+-1;
nA:=0;
for list==t::
@@ -509,7 +504,7 @@ enddef;
vardef change_atom(expr a,b)=
if known b:: pcode_int:=pcode_int+-1; nC:=0;
if numeric b::
- if (b GT pcode_emb_start)and(b<=pcode_atom_end):: CA(_chg_atom,b,a)
+ if (b GT pcode_emb_start)and(b<=pcode_atm_end):: CA(_chg_atom,b,a)
ef b==NH:: CA(_chg_atom,N,a) if sw_expand==0:: CP(_tmp_line,nl) fi
CC(_group_s) CA(_group_si,H,a) CC(_group_e)
ef b==N?:: CA(_chg_atom,N,a) CC(_group_s) CA(_group_si,_,a) CC(_group_e)
@@ -812,7 +807,9 @@ enddef;
%-------------------------------------------------------------------------------------------------
def add_group=
if f_at=1: nE:=getA(adrT); check_adrA(nE); else: nE:=cntA+1; fi
- group_cnt[incr group_num]:=0; store_group(_jp_absA,nE) store_group(_com,_len_s)
+ group_cnt[incr group_num]:=0; store_group(_jp_absA,nE)
+ store_group(_com,_mark)
+ 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<>rate_cr: store_group(_chg_len,lenT)
@@ -825,6 +822,7 @@ def add_group=
for i=1 upto pcode_cnt[nP]: store_group(pcode_com[nP][i],pcode_par[nP][i]) endfor
fi
store_group(_com,_len_e) store_group(_chg_env,hz) store_group(_com,_term)
+ store_group(_com,_rest)
if f_lineT=0: lineT:=si; fi
if f_lenT=0: lenT:=rate_cr; fi
if f_rotT=0: rotT:=0; fi
@@ -898,12 +896,12 @@ enddef;
%-------------------------------------------------------------------------------------------------
vardef arrange_ang(expr n)=
if cntB=0: angT:=(angT-180) mod 360; 180
- else: if envB>=pcode_emb_start: pcode_par[envB][cntB-temp_cntB+3]
- else: if envB=hz: if n=0: 60 ef n<=90: -60 ef n<=180: 60 ef n<270: -60 else: 60 fi
- ef envB=vt: if n=0: -60 ef n<90: 60 ef n<=180: -60 ef n<=270: 60 else: -60 fi
- ef abs(envB)<=180: envB
- fi
- fi
+ else: if envB>=pcode_emb_start: pcode_par[envB][cntB-temp_cntB]
+ else: if envB=hz: if n=0: 60 ef n<=90: -60 ef n<=180: 60 ef n<270: -60 else: 60 fi
+ ef envB=vt: if n=0: -60 ef n<90: 60 ef n<=180: -60 ef n<=270: 60 else: -60 fi
+ ef abs(envB)<=180: envB
+ fi
+ fi
fi
enddef;
%-------------------------------------------------------------------------------------------------
@@ -1351,14 +1349,14 @@ vardef bond_stereo(expr n)=
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 TA(expr s,WT,MI)=
+vardef define_atom(expr s,WT,MI)=
str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; pcode_num:=pcode_num+1;
pcode_com[pcode_num][1]:=_set_atom; pcode_par[pcode_num][1]:=str_cnt; pcode_cnt[pcode_num]:=1;
str_tbl[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; pcode_num
enddef;
%-------------------------------------------------------------------------------------------------
-vardef TB(expr s)(text t)=
+vardef define_group_string(expr s)(text t)=
str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; pcode_num:=pcode_num+1;
pcode_com[pcode_num][1]:=_set_atom; pcode_par[pcode_num][1]:=str_cnt; pcode_cnt[pcode_num]:=1;
str_tbl[str_cnt]:=tbl_atom_str[tbl_cnt]:=s; tbl_atom[tbl_cnt]:=0;
@@ -1366,98 +1364,103 @@ vardef TB(expr s)(text t)=
pcode_num
enddef;
%=================================================================================================
-pcode_int:=pcode_emi_start; pcode_num:=pcode_emb_start;
-%-------------------------------------------------------------------------------------------------
-C:= TA("C" ,12.0107, 12.0000000); H:= TA("H" , 1.00794, 1.00782503223);
-D:= TA("D" ,2.012, 2.01410177812); Ag:=TA("{Ag}",107.868, 106.905095);
-Al:=TA("{Al}",26.9815, 26.98153853); As:=TA("{As}",74.9216, 74.92159457);
-B:= TA("B" ,10.811, 11.00930536); Ba:=TA("{Ba}",137.33, 136.905816);
-Be:=TA("{Be}",9.01218, 0);
-Bi:=TA("{Bi}",208.9804, 208.980338); Br:=TA("{Br}",79.904, 78.9183376);
-Ca:=TA("{Ca}",40.078, 39.962590863); Cd:=TA("{Cd}",112.41, 110.904182);
-Cl:=TA("{Cl}",35.453, 34.968852); Co:=TA("{Co}",58.933194, 58.93319429);
-Cr:=TA("{Cr}",51.9961, 51.94050623); Cs:=TA("{Cs}",132.905, 132.90543);
-Cu:=TA("{Cu}",63.546, 62.92959772);
-F:= TA("F" ,18.9984, 18.99840316273); Fe:=TA("{Fe}",55.845, 55.93493633);
-Hg:=TA("{Hg}",200.59, 201.97064340); I:= TA("I" ,126.90447,126.9044719);
-K:= TA("K" ,39.0983, 38.9637064864); Li:=TA("{Li}",6.941, 7.0160034366);
-Mg:=TA("{Mg}",24.305, 23.985041697); Mn:=TA("{Mn}",54.938044, 54.93804391);
-Mo:=TA("{Mo}",95.95, 0);
-N:= TA("N" ,14.0067, 14.00307400443); Na:=TA("{Na}",22.98977, 22.9897692820);
-Ni:=TA("{Ni}",58.693, 57.93534241); O:= TA("O" ,15.9994, 15.99491461957);
-P:= TA("P" ,30.973762, 30.97376199842); Pb:=TA("{Pb}",207.2, 205.974455);
-Pd:=TA("{Pd}",106.4, 107.905075);
-S:= TA("S" ,32.065, 31.9720711744); Sb:=TA("{Sb}",121.75, 120.90381);
-Se:=TA("{Se}",78.971, 79.9165218); Si:=TA("{Si}",28.0855, 27.97692653465);
-Sn:=TA("{Sn}",118.71, 119.90220163); Ta:=TA("{Ta}",180.948, 0);
-Te:=TA("{Te}",127.60, 129.90623); Ti:=TA("{Ti}",47.867, 47.94794198);
-U:= TA("U", 238.0289, 238.05079); V:= TA("V", 50.9415, 50.943957);
-W:= TA("W", 183.85, 181.948225); Zn:=TA("{Zn}",65.409, 63.92914201);
-NO_ATOM:=TA("",0,0);
-tbl_atom_end:=tbl_cnt;
-%-------------------------------------------------------------------------------------------------
-if sw_expand=0:
- CH3:=TB("C{H_3_}")(C,H,H,H); CH2:=TB("C{H_3_}")(C,H,H); CN:=TB("CN")(C,N); OH:=TB("OH")(O,H);
- COOH:=TB("COOH")(C,O,O,H); COONa:=TB("COO{Na}")(C,O,O,Na); CHO:=TB("CHO")(C,H,O);
- NO:=TB("NO")(N,O); NO2:=TB("N{O_2_}")(N,O,O); NH2:=TB("N{H_2_}")(N,H,H);
- SH:= TB("SH")(S,H); SO2H:=TB("S{O_2_}H")(S,O,O,H); SO3H:=TB("S{O_3_}H")(S,O,O,O,H);
- ONa:=TB("O{Na}")(O,Na); SO3Na:=TB("S{O_3_}{Na}")(S,O,O,O,Na);
-fi
-%-------------------------------------------------------------------------------------------------
-tbl_group_end:=tbl_cnt; pcode_atom_end:=pcode_num;
-%=================================================================================================
-?:=(_group_si,NO_ATOM); ?w:=(_group_wf,NO_ATOM); ?z:=(_group_zf,NO_ATOM); ?O:=(_group_dm,O);
-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=5,6,7,8: for j=11 upto 15: ?[i][j]:='((i,j)); endfor endfor
-%-------------------------------------------------------------------------------------------------
-!:=!1:='((_mk_bond,_arrange_ang)); !db:=!d:='(!~db); !tm:=!t:='(!~tm); !wf:=!w:='(!~wf);
-!zf:=!z:='(!~zf); !wb:='(!~wb); !zb:='(!~zb); !dl:='(!~dl); !dr:='(!~dr); !dm:='(!~dm);
-for i==2 upto 20:
- ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee));
-endfor
-?!:='(/_,!); ?!d:='(/_,!d); ?!2:='(/_,!2); ??!:='(/_,/_^60,60); ??:='(/_^35,/_^-35);
-!?:='(!,/_); !?!:='(!?,!); !??!:='(!,??,!); ?2:='(/!); !?2:='(!,?2); ?2!:='(?2,!); !?2!:='(!?2,!);
-NH:='(N,/H~nl); n_:='((_set_add,MIS)); p_:='((_set_add,PLS));
-zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv);
-mark_adress:='((_com,_mark)); reset_adress:='((_com,_moff)); reset_length:='((_com,_len_e));
-%-------------------------------------------------------------------------------------------------
-if sw_expand=1:
- CH3:='(/H,/H^60,/H^-60); NH:='(N,/H); NH2:='(N,/H^60,/H^-60); NO2:='(N,//O^60,//O^-60);
- OH:='(O,!,H); NO:='(N,//O); CONH2:='(//O,!,NH2); SH:='(S,!,H); SO2H:='(S,//O^60,/OH^-60);
- SO3H:='(S,/OH,//O^60,//O^-60); CHO:='(//O^-60,/H^60); COOH:='(//O^-60,/OH^60); CN:='(!~tm,N);
- ONa:='(O,!,Na); SO3Na:='(S,/ONa,//O^60,//O^-60);
-fi
-%-------------------------------------------------------------------------------------------------
-?F!F:='(/F,60,F); ?Cl!Cl:='(/Cl,60,Cl); ?Br!Br:='(/Br,60,Br); ?F?F!F:='(/F,/F^60,60,F);
-?Cl?Cl!Cl:='(/Cl,/Cl^60,60,Cl);
-%-------------------------------------------------------------------------------------------------
-N!:='(N,!); N?:='(N,/_); N!2:='(N,!3); N!2:='(N,!3); !N:='(!,N);
-N?!:='(N,?!); N?2:='(N,?2); N?2!:='(N?2,!); N?!2:='(N,?!2);
-S?O:='(S,?O); S?O!:='(S?O,!); ?O?O:='(?O^-35,?O^35); S?O?O:='(S,?O?O); S?O?O!:='(S?O?O,!);
-O!:='(O,!); O!2:='(O,!2); O!3:='(O,!3); S!:='(S,!); S!2:='(S,!2); S!3:='(S,!3);
-%-------------------------------------------------------------------------------------------------
-?O!:='(?O,!); ?O!2:='(?O,!2); ?O!3:='(?O,!3); !?O:='(!,?O); !?O!:='(!,?O!);
-NH!:='(NH,!); NH!2:='(NH,!2); !NH:='(!,NH);!NH!:='(!,NH!); ?NH2:='(/NH2); ?NH:='(//NH);
-%-------------------------------------------------------------------------------------------------
-!OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !S?O:='(!,S?O); !O:='(!,O); !dO:='(!d,O);
-!O!:='(!,O!); !O!2:='(!,O!2); !O!3:='(!,O!3); !S!:='(!,S!); !S!2:='(!,S!2); !S!3:='(!,S!3);
-!COOH:='(!,COOH); ?COOH:='(/COOH); !CH3:='(!,CH3); !CN:='(!,CN); !CHO:='(!,CHO); !NO2:='(!,NO2);
-!Cl:='(!,Cl); !Br:='(!,Br); !F:='(!,F); !?F!F:='(!,?F!F); !?Cl!Cl:='(!,?Cl!Cl);
-!?F?F!F:='(!,?F?F!F); !?Cl?Cl!Cl:='(!,?Cl?Cl!Cl);
-!?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); !?7:='(!,?7); !?8:='(!,?8); !Ph:='(!,Ph);
-?H:='(/H); ?F:='(/F); ?Cl:='(/Cl); ?OH:='(/OH); !?OH:='(!,?OH); ?OH!:='(?OH,!);
-%-------------------------------------------------------------------------------------------------
-lr:='(0,0,0,60 for i==1 upto 10:: ,-60,60 endfor);
-rl:='(0,0,0,-60 for i==1 upto 10:: ,60,-60 endfor);
-%-------------------------------------------------------------------------------------------------
-R:='("R"); R1:='("{R^1^}"); R2:='("{R^2^}"); R3:='("{R^3^}"); R4:='("R^4^"); R5:='("{R^5^}");
-R6:='("R6"); R7:='("{R^7^}"); R8:='("{R^8^}"); R9:='("{R^9^}"); R10:='("R^10^");R11:='("{R^11^}");
+def define_atom_group_parts=
+ save `,``,';
+ def `=define_atom enddef; def ``=define_group_string enddef; def '= define_parts enddef;
+ pcode_int:=pcode_emi_start; pcode_num:=pcode_emb_start;
+ ?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1;
+ %-----------------------------------------------------------------------------------------------
+ C:= `("C" ,12.0107, 12.0000000); H:= `("H" , 1.00794, 1.00782503223);
+ D:= `("D" ,2.012, 2.01410177812); Ag:=`("{Ag}",107.868, 106.905095);
+ Al:=`("{Al}",26.9815, 26.98153853); As:=`("{As}",74.9216, 74.92159457);
+ B:= `("B" ,10.811, 11.00930536); Ba:=`("{Ba}",137.33, 136.905816);
+ Be:=`("{Be}",9.01218, 0);
+ Bi:=`("{Bi}",208.9804, 208.980338); Br:=`("{Br}",79.904, 78.9183376);
+ Ca:=`("{Ca}",40.078, 39.962590863); Cd:=`("{Cd}",112.41, 110.904182);
+ Cl:=`("{Cl}",35.453, 34.968852); Co:=`("{Co}",58.933194, 58.93319429);
+ Cr:=`("{Cr}",51.9961, 51.94050623); Cs:=`("{Cs}",132.905, 132.90543);
+ Cu:=`("{Cu}",63.546, 62.92959772);
+ F:= `("F" ,18.9984, 18.99840316273); Fe:=`("{Fe}",55.845, 55.93493633);
+ Hg:=`("{Hg}",200.59, 201.97064340); I:= `("I" ,126.90447,126.9044719);
+ K:= `("K" ,39.0983, 38.9637064864); Li:=`("{Li}",6.941, 7.0160034366);
+ Mg:=`("{Mg}",24.305, 23.985041697); Mn:=`("{Mn}",54.938044, 54.93804391);
+ Mo:=`("{Mo}",95.95, 0);
+ N:= `("N" ,14.0067, 14.00307400443); Na:=`("{Na}",22.98977, 22.9897692820);
+ Ni:=`("{Ni}",58.693, 57.93534241); O:= `("O" ,15.9994, 15.99491461957);
+ P:= `("P" ,30.973762, 30.97376199842); Pb:=`("{Pb}",207.2, 205.974455);
+ Pd:=`("{Pd}",106.4, 107.905075);
+ S:= `("S" ,32.065, 31.9720711744); Sb:=`("{Sb}",121.75, 120.90381);
+ Se:=`("{Se}",78.971, 79.9165218); Si:=`("{Si}",28.0855, 27.97692653465);
+ Sn:=`("{Sn}",118.71, 119.90220163); Ta:=`("{Ta}",180.948, 0);
+ Te:=`("{Te}",127.60, 129.90623); Ti:=`("{Ti}",47.867, 47.94794198);
+ U:= `("U", 238.0289, 238.05079); V:= `("V", 50.9415, 50.943957);
+ W:= `("W", 183.85, 181.948225); Zn:=`("{Zn}",65.409, 63.92914201);
+ NO_ATOM:=`("",0,0);
+ tbl_atom_end:=tbl_cnt;
+ %-----------------------------------------------------------------------------------------------
+ if sw_expand=0:
+ CH3:=``("C{H_3_}")(C,H,H,H); CH2:=``("C{H_3_}")(C,H,H); CN:=``("CN")(C,N); OH:=``("OH")(O,H);
+ COOH:=``("COOH")(C,O,O,H); COONa:=``("COO{Na}")(C,O,O,Na); CHO:=``("CHO")(C,H,O);
+ NO:=``("NO")(N,O); NO2:=``("N{O_2_}")(N,O,O); NH2:=``("N{H_2_}")(N,H,H);
+ SH:= ``("SH")(S,H); SO2H:=``("S{O_2_}H")(S,O,O,H); SO3H:=``("S{O_3_}H")(S,O,O,O,H);
+ ONa:=``("O{Na}")(O,Na); SO3Na:=``("S{O_3_}{Na}")(S,O,O,O,Na);
+ fi
+ %-----------------------------------------------------------------------------------------------
+ tbl_group_end:=tbl_cnt; pcode_atm_end:=pcode_num;
+ ?:=(_group_si,NO_ATOM); ?wf:=?w:=(_group_si,NO_ATOM); ?zf:=?z:=(_group_si,NO_ATOM);
+ ?O:=(_group_dm,O); NH:='(N,/H~nl); ?NH:=(_group_dm,NH);
+ %-----------------------------------------------------------------------------------------------
+ ?H:='(/H); ?F:='(/F); ?Cl:='(/Cl); ?OH:='(/OH); ?OH:='(/COOH); ?NH2:='(/NH2);
+ 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=5,6,7,8: for j=11 upto 15: ?[i][j]:='((i,j)); endfor endfor
+ %-----------------------------------------------------------------------------------------------
+ !:=!1:='((_mk_bond,_arrange_ang)); !db:=!d:='(!~db); !tm:=!t:='(!~tm); !wf:=!w:='(!~wf);
+ !zf:=!z:='(!~zf); !wb:='(!~wb); !zb:='(!~zb); !dl:='(!~dl); !dr:='(!~dr); !dm:='(!~dm);
+ for i==2 upto 20:
+ ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee));
+ endfor
+ ?!:='(/_,!); ?!d:='(/_,!d); ?!2:='(/_,!2); ??!:='(/_,/_^60,60); ??:='(/_^35,/_^-35);
+ !?:='(!,/_); !?!:='(!?,!); !??!:='(!,??,!); ?2:='(/!); !?2:='(!,?2); ?2!:='(?2,!);
+ n_:='((_set_add,MIS)); p_:='((_set_add,PLS));
+ zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv);
+ mark_adress:='((_com,_mark)); reset_adress:='((_com,_moff)); reset_length:='((_com,_len_e));
+ %-----------------------------------------------------------------------------------------------
+ if sw_expand=1:
+ CH3:='(/H,/H^60,/H^-60); NH:='(N,/H); NH2:='(N,/H^60,/H^-60); NO2:='(N,//O^60,//O^-60);
+ OH:='(O,!,H); NO:='(N,//O); CONH2:='(//O,!,NH2); SH:='(S,!,H); SO2H:='(S,//O^60,/OH^-60);
+ SO3H:='(S,/OH,//O^60,//O^-60); CHO:='(//O^-60,/H^60); COOH:='(//O^-60,/OH^60); CN:='(!~tm,N);
+ ONa:='(O,!,Na); SO3Na:='(S,/ONa,//O^60,//O^-60);
+ fi
+ %-----------------------------------------------------------------------------------------------
+ ?F!F:='(/F,60,F); ?Cl!Cl:='(/Cl,60,Cl); ?Br!Br:='(/Br,60,Br); ?F?F!F:='(/F,/F^60,60,F);
+ ?Cl?Cl!Cl:='(/Cl,/Cl^60,60,Cl);
+ %-----------------------------------------------------------------------------------------------
+ N!:='(N,!); N?:='(N,/_); N!2:='(N,!3); N!2:='(N,!3); !N:='(!,N);
+ N?!:='(N,?!); N?2:='(N,?2); N?2!:='(N?2,!); N?!2:='(N,?!2);
+ S?O:='(S,?O); S?O!:='(S?O,!); ?O?O:='(?O^-35,?O^35); S?O?O:='(S,?O?O); S?O?O!:='(S?O?O,!);
+ O!:='(O,!); O!2:='(O,!2); O!3:='(O,!3); S!:='(S,!); S!2:='(S,!2); S!3:='(S,!3);
+ %-----------------------------------------------------------------------------------------------
+ ?O!:='(?O,!); ?O!2:='(?O,!2); ?O!3:='(?O,!3); !?O:='(!,?O); !?O!:='(!,?O!);
+ NH!:='(NH,!); NH!2:='(NH,!2); !NH:='(!,NH); !NH!:='(!,NH!);
+ %-----------------------------------------------------------------------------------------------
+ !OH:='(!,OH); !SH:='(!,SH); !NH2:='(!,NH2); !S?O:='(!,S?O); !O:='(!,O); !dO:='(!d,O);
+ !O!:='(!,O!); !O!2:='(!,O!2); !O!3:='(!,O!3); !S!:='(!,S!); !S!2:='(!,S!2); !S!3:='(!,S!3);
+ !COOH:='(!,COOH); ?COOH:='(/COOH); !CH3:='(!,CH3); !CN:='(!,CN); !CHO:='(!,CHO); !NO2:='(!,NO2);
+ !Cl:='(!,Cl); !Br:='(!,Br); !F:='(!,F); !?F!F:='(!,?F!F); !?Cl!Cl:='(!,?Cl!Cl);
+ !?F?F!F:='(!,?F?F!F); !?Cl?Cl!Cl:='(!,?Cl?Cl!Cl);
+ !?3:='(!,?3); !?4:='(!,?4); !?5:='(!,?5); !?6:='(!,?6); !?7:='(!,?7); !?8:='(!,?8);
+ !Ph:='(!,Ph); !?OH:='(!,?OH); ?OH!:='(?OH,!);
+ %-----------------------------------------------------------------------------------------------
+ lr:='(60 for i==1 upto 10:: ,-60,60 endfor); rl:='(-60 for i==1 upto 10:: ,60,-60 endfor);
+ %-----------------------------------------------------------------------------------------------
+ hexose_hp:='(#1.4,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##);
+ Pyranose_hp:='(#1.4,-35~wf_r,35~bd_r`1,30~wb_r,130`1.66,O,&1,##);
+enddef;
%-------------------------------------------------------------------------------------------------
-hexose_hp:='(#1.4,-30~wf_r,30~bd_r`1,30~wb_r,120,O,30,&1,##);
-Pyranose_hp:='(#1.4,-35~wf_r,35~bd_r`1,30~wb_r,130`1.66,O,&1,##);
+define_atom_group_parts;
%=================================================================================================
init_par(parameter_list);
%-------------------------------------------------------------------------------------------------