diff options
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mp')
-rw-r--r-- | graphics/mcf2graph/mcf2graph.mp | 105 |
1 files changed, 52 insertions, 53 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mp b/graphics/mcf2graph/mcf2graph.mp index a0fec4985f..d50800ebcb 100644 --- a/graphics/mcf2graph/mcf2graph.mp +++ b/graphics/mcf2graph/mcf2graph.mp @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.85 Copyright (c) 2013-2022 Akira Yamaji +% mcf2graph ver 4.86 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, @@ -33,7 +33,7 @@ % Set output MOL file (V3000) : mpost -s ahlength=6 FILENAME % Set output report : mpost -s ahlength=7 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -message "* This is mcf2graph ver 4.85 2022.06.12"; +message "* This is mcf2graph ver 4.86 2022.07.18"; tracingstats:=1; prologues:=3; warningcheck:=0; %------------------------------------------------------------------------------------------------- numeric save_num[],parts_com[][],parts_par[][],parts_cnt[],tbl_atom[],tbl_group[][],tbl_atom_wt[], @@ -250,7 +250,7 @@ def endfigm= 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.01); + else: draw_corner((0,0),fig_wd,fig_ht,0.004); fi if scan_bit(sw_frame,Inside): draw_frame((margin_lr,margin_tb),fig_wd-2margin_lr,fig_ht-2margin_tb,thickness_frame); @@ -316,10 +316,9 @@ def pickup_data_unit(expr t,v,f)= endfor fi else: - inf_num:=split_char(sS,";"); + inf_num:=split_str(sS,";")(arg_s); for i=1 upto inf_num: - sI:=arg_s[i]; nA:=scan_char(":",sI,0,1); - tag_a[i]:=substring(0,nA-1) of sI; var_a[i]:=substring(nA,length(sI)) of sI; + get_tag_var(arg_s[i])(tag_a[i],var_a[i]); if t=tag_a[i]: if v=var_a[i]: f_match:=1; fi fi endfor fi @@ -362,7 +361,7 @@ def read_mcf(expr n)(text t)= | :=mark_adress; || :=reset_adress; ##:=reset_length; _:=Me; \:=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; - def $==abs_adress enddef; def &$==&.$ enddef; def '==read_id enddef; + def $==abs_adress enddef; def &$==&.$ enddef; def '==read_id enddef; def {==read_number( enddef; def CP == com_par enddef; def CA == com_par_adr enddef; 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; @@ -1343,16 +1342,12 @@ def proc_mc_out(expr f)= message "["&decimal(fig_num)&"]:"&inf_EN; file_output:="temp-mc.aux"; if mc_length<100: - nN:=scan_chars(mc,","); nL:=length(mc); nA:=0; - forever: - for i=nN downto 1: - if at_char[i]<=nA+mc_length: - printf substring(nA,at_char[i]) of mc; nA:=at_char[i]; exitif true; fi - endfor - if nL-nA<=mc_length: printf substring(nA,nL) of mc; exitif true; fi - endfor - else: - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor fi + nN:=split_str(mc,",")(arg_s); nA:=0; temps:=""; + for i=1 upto nN: + if i=nN: temps:=temps&arg_s[i]; printf temps; + ef at_char[i+1]-nA>mc_length: nA:=at_char[i]; printf temps&arg_s[i]&","; temps:=""; + else: temps:=temps&arg_s[i]&","; fi endfor + else: for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor fi printf EOF; enddef; %================================================================================================= @@ -1365,13 +1360,13 @@ 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 STa(expr s,WT,MI)= +vardef TA(expr s,WT,MI)= str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_num:=parts_num+1; parts_com[parts_num][1]:=_set_atom; parts_par[parts_num][1]:=str_cnt; parts_cnt[parts_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; parts_num enddef; %------------------------------------------------------------------------------------------------- -vardef STb(expr s)(text t)= +vardef TB(expr s)(text t)= str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_num:=parts_num+1; parts_com[parts_num][1]:=_set_atom; parts_par[parts_num][1]:=str_cnt; parts_cnt[parts_num]:=1; str_tbl[str_cnt]:=tbl_atom_str[tbl_cnt]:=s; tbl_atom[tbl_cnt]:=0; @@ -1380,34 +1375,38 @@ enddef; %================================================================================================= parts_int:=parts_emi_start; parts_num:=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); -Al:=STa("{Al}",26.9815, 26.98153853); As:=STa("{As}",74.9216, 74.92159457); -B:= STa("B" ,10.811, 11.00930536); Ba:=STa("{Ba}",137.33, 136.905816); -Bi:=STa("{Bi}",208.9804, 208.980338); Br:=STa("{Br}",79.904, 78.9183376); -Ca:=STa("{Ca}",40.078, 39.962590863); Cd:=STa("{Cd}",112.41, 110.904182); -Cl:=STa("{Cl}",35.453, 34.968852); Co:=STa("{Co}",58.933194, 58.93319429); -Cr:=STa("{Cr}",51.9961, 51.94050623); Cu:=STa("{Cu}",63.546, 62.92959772); -F:= STa("F" ,18.9984, 18.99840316273); Fe:=STa("{Fe}",55.845, 55.93493633); -Hg:=STa("{Hg}",200.59, 201.97064340); I:= STa("I" ,126.90447,126.9044719); -K:= STa("K" ,39.0983, 38.9637064864); Li:=STa("{Li}",6.941, 7.0160034366); -Mg:=STa("{Mg}",24.305, 23.985041697); Mn:=STa("{Mn}",54.938044, 54.93804391); -N:= STa("N" ,14.0067, 14.00307400443); Na:=STa("{Na}",22.98977, 22.9897692820); -Ni:=STa("{Ni}",58.693, 57.93534241); O:= STa("O" ,15.9994, 15.99491461957); -P:= STa("P" ,30.973762, 30.97376199842); Pb:= STa("{Pb}",207.2, 205.974455); -Pd:=STa("{Pd}",106.4, 107.905075); -S:= STa("S" ,32.065, 31.9720711744); Sb:= STa("{Sb}",121.75, 120.90381); -Se:=STa("{Se}",78.971, 79.9165218); Si:=STa("{Si}",28.0855, 27.97692653465); -Sn:=STa("{Sn}",118.71, 119.90220163); Ti:=STa("{Ti}",47.867, 47.94794198); -U:= STa("U", 238.0289, 238.05079); V:= STa("V", 50.9415, 50.943957); -W:= STa("W", 183.85, 181.948225); Zn:=STa("{Zn}",65.409, 63.92914201); +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); tbl_atom_end:=tbl_cnt; %------------------------------------------------------------------------------------------------- -CH3:=STb("C{H_3_}")(C,H,H,H); CH2:=STb("C{H_3_}")(C,H,H); CN:=STb("CN")(C,N); OH:=STb("OH")(O,H); -COOH:=STb("COOH")(C,O,O,H); COONa:=STb("COO{Na}")(C,O,O,Na); CHO:=STb("CHO")(C,H,O); -NO:=STb("NO")(N,O); NO2:=STb("N{O_2_}")(N,O,O); NH2:=STb("N{H_2_}")(N,H,H); -SH:= STb("SH")(S,H); 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); +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); %------------------------------------------------------------------------------------------------- tbl_group_end:=tbl_cnt; parts_atom_end:=parts_num; %================================================================================================= @@ -1598,8 +1597,7 @@ def mc_query(text s)= for i=1 upto filter_cnt: filter_p[i]:=0; endfor sort_s:=""; for i=1 upto info_cnt: - nA:=scan_char(":",arg_s[i],0,1); - sT:=substring(0,nA-1) of arg_s[i]; sV:=substring(nA,length(arg_s[i])) of arg_s[i]; + get_tag_var(arg_s[i])(sT,sV); if sT=key_s: if is_num(sV)=1: sort_s:=fix_num(sV); else: sort_s:=sV; fi fi for j=1 upto filter_cnt: if filter_tag[j]=sT: @@ -1617,7 +1615,7 @@ def mc_query(text s)= if filter_n=1: if key_s<>"": sort_tbl[unit_cnt]:=sort_s; fi 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: info_cnt:=split_char(temps,";"); fi fi + if f_mcf=1: mc_row:=mc_row+1; else: info_cnt:=split_str(temps,";")(arg_s); fi fi fi endfor unit_cnt:=unit_cnt-1; @@ -1671,10 +1669,11 @@ vardef scan_char(expr c,s,d,n)= ef d=-1: for i=length(s) downto n: if subc(i,s)<>c: nN:=i; fi exitif nN>0; endfor fi nN enddef; %------------------------------------------------------------------------------------------------- -vardef scan_chars(expr s,c)= - nN:=0; for i=1 upto length(s): if subc(i,s)=c: at_char[incr nN]:=i; fi endfor nN enddef; +vardef split_str(expr s,c)(suffix v)= + at_char[0]:=nN:=0; for i=1 upto length(s): if subc(i,s)=c: at_char[incr nN]:=i; fi endfor + nN:=nN+1; at_char[nN]:=length(s)+1; + for i=1 upto nN: v[i]:=substring (at_char[i-1],at_char[i]-1) of s; endfor nN enddef; %------------------------------------------------------------------------------------------------- -vardef split_char(expr s,c)= - nN:=scan_chars(s,c)+1; at_char[0]:=0; at_char[nN]:=length(s)+1; - for i=1 upto nN: arg_s[i]:=substring (at_char[i-1],at_char[i]-1) of s; endfor nN enddef; +vardef get_tag_var(expr s)(suffix t,v)= + nN:=scan_char(":",s,0,1); t:=substring(0,nN-1) of s; v:=substring(nN,length(s)) of s; enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |