diff options
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mp')
-rw-r--r-- | graphics/mcf2graph/mcf2graph.mp | 102 |
1 files changed, 55 insertions, 47 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mp b/graphics/mcf2graph/mcf2graph.mp index 75ae74cf07..a0fec4985f 100644 --- a/graphics/mcf2graph/mcf2graph.mp +++ b/graphics/mcf2graph/mcf2graph.mp @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.84 Copyright (c) 2013-2022 Akira Yamaji +% mcf2graph ver 4.85 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,13 +33,13 @@ % Set output MOL file (V3000) : mpost -s ahlength=6 FILENAME % Set output report : mpost -s ahlength=7 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -message "* This is mcf2graph ver 4.84 2022.05.08"; +message "* This is mcf2graph ver 4.85 2022.06.12"; tracingstats:=1; prologues:=3; warningcheck:=0; %------------------------------------------------------------------------------------------------- numeric save_num[],parts_com[][],parts_par[][],parts_cnt[],tbl_atom[],tbl_group[][],tbl_atom_wt[], - tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[]; -string save_str[],tbl_atom_str[],str_tbl[],tag[],aux_delimiter,default_library, - default_temp_file,mpfont,atomfont,tempc,temps,blanks; + tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],at_char[]; +string save_str[],tbl_atom_str[],str_tbl[],tag[],info_s[],arg_s[],aux_delimiter,default_library, + file_input,file_output,default_temp_file,mpfont,atomfont,tempc,temps,blanks; pair save_pair[],msize,mposition,fsize,fmargin,dum,save_mposition; %------------------------------------------------------------------------------------------------- fig_num:=str_cnt:=tbl_cnt:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0; @@ -182,16 +182,16 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def beginfigm(text s)= begingroup - save ',mc,f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,info_cnt,group_num,info_s,bond_cntA, + save ',mc,f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,info_cnt,group_num,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, - file_input,file_output,cal_FM,cal_MW,cal_MI,inf_Cat,inf_NO,inf_EN,inf_JN,inf_FM,inf_CAS, + 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,mol_pic,sC,sI,sS,sT,sV,color_list,unit_cnt,f_end,semic_cnt, - f_match,var_n,tag_a,var_a,at_char,arg_s; + f_match,var_n,tag_a,var_a; numeric mc_indent[],hideH[],lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],strA[],sumA[], - bond_num[],wdM[],htM[],chargeA[],addA[],add_rot[],at_char[]; + bond_num[],wdM[],htM[],chargeA[],addA[],add_rot[]; pair posA[],posM[][]; - string info_s[],mc[],tag_a[],var_a[],arg_s[],mc,filter_s,file_input,file_output,cal_FM,cal_MW, + string mc[],tag_a[],var_a[],mc,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, sC,sI,sS,sT,sV; picture mol_pic[]; @@ -205,7 +205,7 @@ def beginfigm(text s)= mc:=temps:=cal_MW:=cal_MI:=cal_FM:=filter_s:=""; file_input:=default_library; %------------------------------------------------------------------------------------------------ parts_num:=parts_usr_start; parts_int:=parts_int_start; - fig_num:=fig_num+1; f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=at_char[0]:=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); @@ -316,7 +316,7 @@ def pickup_data_unit(expr t,v,f)= endfor fi else: - inf_num:=split_char(sS,";")+1; + inf_num:=split_char(sS,";"); 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; @@ -1553,17 +1553,20 @@ def proc_err(expr e,n)= err_adr[incr err_cnt]:=n; err_code[err_cnt]:=e; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def mc_query(text s)= begingroup - 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_char,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_char[]; - unit_row:=f_mcf:=mc_row:=info_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,max_n, + sign_at,sign_n,filter_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,lib_unit_cnt, + at_colon,at_equal,at_less,at_greater,at_n,sort_tbl,key_s,sort_s,sign_s,sV,sS,sT,sort_oder; + string line_s[][],sort_s,sort_tbl[],key_s,filter_tag[],filter_var[],sign_s[],sV,sS,sT; + numeric row_cnt[],order[],order_tbl[],filter_sign[],filter_p[]; + unit_row:=f_mcf:=mc_row:=info_cnt:=filter_cnt:=lib_unit_cnt:=0; unit_cnt:=1; file_input:=default_library; file_output:=default_temp_file; + sign_s[1]:="="; sign_s[2]:="<>"; sign_s[3]:="<"; sign_s[4]:=">"; sign_s[5]:="<="; + sign_s[6]:=">="; %----------------------------------------------------------------------------------------------- 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); + key_s:=""; %--------------------------------------------------------------------------------------------- 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; @@ -1577,7 +1580,9 @@ def mc_query(text s)= if sign_n=0: 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_s[incr key_cnt]:=sV; fi + ef sT="a": key_s:=sV; sort_oder:=0; + ef sT="d": key_s:=sV; sort_oder:=1; + fi else: filter_tag[incr 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); @@ -1591,13 +1596,11 @@ def mc_query(text s)= 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 + sort_s:=""; for i=1 upto info_cnt: - 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]=sT: if is_num(sV)=1: sort_s[j]:=fix_num(sV); else: sort_s[j]:=sV; fi fi - endfor + 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]; + 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: filter_p[j]:=1; @@ -1610,28 +1613,37 @@ def mc_query(text s)= ef filter_sign[j]=6: if not(temps>=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]); fi endfor - info_cnt:=0; if filter_n=1: unit_cnt:=unit_cnt+1; fi + info_cnt:=0; lib_unit_cnt:=lib_unit_cnt+1; + 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,";")+1; for i=1 upto info_cnt: info_s[i]:=arg_s[i]; endfor fi - fi + if f_mcf=1: mc_row:=mc_row+1; else: info_cnt:=split_char(temps,";"); fi fi fi endfor - %============================================================================================= unit_cnt:=unit_cnt-1; - if key_cnt>=1: + %============================================================================================= + printf "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"; + printf "% Input : "&file_input&" ["&decimal(lib_unit_cnt)&"]";; + printf "% Output : "&file_output&" ["&decimal(unit_cnt)&"]"; + if filter_cnt>=1: + for i=1 upto filter_cnt: + printf "% Filter("&decimal(i)&"): "&filter_tag[i]&" "&sign_s[filter_sign[i]]&filter_var[i]; + endfor + if key_s<>"": printf "% Sort key : "&key_s&iif(sort_oder=0," (ascending)"," (descending)"); fi + printf "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"; + %----------------------------------------------------------------------------------------- + if key_s<>"": for i=1 upto unit_cnt: order[i]:=0; endfor - for i=1 upto unit_cnt: temps:="~"; - for j=1 upto unit_cnt: - 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; + for i=1 upto unit_cnt: + if sort_oder=0: temps:="~"; + for j=1 upto unit_cnt: + if order[j]=0: if sort_tbl[j]<temps: temps:=sort_tbl[j]; min_n:=j; fi fi endfor + order[min_n]:=i; order_tbl[i]:=min_n; + ef sort_oder=1: temps:=" "; + for j=1 upto unit_cnt: + if order[j]=0: if sort_tbl[j]>temps: temps:=sort_tbl[j]; max_n:=j; fi fi endfor + order[max_n]:=i; order_tbl[i]:=max_n; + fi endfor for i=1 upto unit_cnt: for j=1 upto row_cnt[order_tbl[i]]: printf line_s[order_tbl[i]][j]; endfor @@ -1641,10 +1653,6 @@ def mc_query(text s)= endgroup; enddef; %============================================================================================= -vardef fix_str(expr n,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)= sS:=s; nN:=scan_char(".",sS,0,1); if nN=0: sS:=fsr(4)(sS); ef nN=1: sS:=" 0"&sS; @@ -1667,6 +1675,6 @@ 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_char(expr s,c)= - nN:=scan_chars(s,c); at_char[nN+1]:=length(s)+1; - for i=1 upto nN+1: arg_s[i]:=substring(at_char[i-1],at_char[i]-1) of s; endfor nN enddef; + 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; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |