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.mp102
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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%