summaryrefslogtreecommitdiff
path: root/graphics/mcf2graph/mcf2graph.mf
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mf')
-rw-r--r--graphics/mcf2graph/mcf2graph.mf284
1 files changed, 147 insertions, 137 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mf b/graphics/mcf2graph/mcf2graph.mf
index 2388b2f278..0c935ab56a 100644
--- a/graphics/mcf2graph/mcf2graph.mf
+++ b/graphics/mcf2graph/mcf2graph.mf
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.62 Copyright (c) 2013-2021 Akira Yamaji
+% mcf2graph ver 4.63 Copyright (c) 2013-2021 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,9 +22,8 @@
% This package is located at : http://www.ctan.org/pkg/mcf2graph
% Suggestion or request mail to : mcf2graph@gmail.com
%--------------------------------------------------------------------------------------------------
-% Set output no image file : mpost -s bboxmargin=0 FILENAME
+% Set outputformat to "eps"(.mps) : mpost FILENAME
% Set output first font only : mpost -s bboxmargin=1 FILENAME
-% Set outputformat to "eps"(.mps) : mpost -s ahangle=0 FILENAME
% Set outputformat to "png" : mpost -s ahangle=1 FILENAME
% Set outputformat to "svg" : mpost -s ahangle=2 FILENAME
% Set outputformat to "eps" (.eps) : mpost -s ahangle=3 FILENAME
@@ -33,12 +32,12 @@
% Set output report : mpost -s ahlength=3 FILENAME
% Set output MOL(V2000) : mpost -s ahlength=5 FILENAME
% Set output MOL(V3000) : mpost -s ahlength=6 FILENAME
-% Set output souce file for metafont : mpost -s ahlength=7 FILENAME
+% Set output aux file for metafont : mpost -s ahlength=7 FILENAME
% Set to use plain.mp (label,arrow) : mpost -s labeloffset=1 FILENAME
% Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tracingstats:=1;
-message "* This is mcf2graph ver 4.62 2021.04.04";
+message "* This is mcf2graph ver 4.63 2021.04.18";
%-------------------------------------------------------------------------------------------------
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;
@@ -47,23 +46,22 @@ numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_
com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],
lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[],
mc_indent[],cmm_adr[];
-string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,out_file_aux,blank_str,temp_str,
- out_file_rep,out_file_mpc,aux_delimiter,atomfont,mpfont,s_tag,s_var,cal_FM,cal_MW,cal_MI,
+string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,temps,aux_delimiter,
+ atomfont,mpfont,s_tag,s_var,cal_FM,cal_MW,cal_MI,
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;
path arrow_path,dottedline_path,line_path,arrow_head;
%-------------------------------------------------------------------------------------------------
-char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_calc:=sw_ext_all:=0;
-sw_numberA:=sw_numberB:=sw_aux_out:=sw_expand:=sw_fframe:=sw_mframe:=sw_aframe:=sw_trimming:=0;
-sw_rep_out:=sw_mol_out:=sw_group_off:=sw_single:=sw_arrow_emu:=sw_file_open:=0;
+char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=0;
+sw_numberA:=sw_numberB:=sw_expand:=sw_fframe:=sw_mframe:=sw_aframe:=sw_trimming:=sw_ext_all:=0;
+sw_group_off:=sw_single:=sw_arrow_emu:=sw_output:=0;
numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095;
%-------------------------------------------------------------------------------------------------
-aux_max:=max_inf_num:=20;
-aux_delimiter:=";";
+aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= " ";
for i=1 upto aux_max: tag[i]:=""; endfor
-blank_str:= " ";
dum:=(-4091,0);
+None:=11; Info1:=21; Info2:=22; Report:=31; MOL2k:=41; MOL3k:=42; Mfont:=51;
%-------------------------------------------------------------------------------------------------
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("=");
@@ -98,35 +96,25 @@ if (known green)and(known ahlength):
color color_list[];
prologues:=3;
mpfont:="uhvr8r";
- %-----------------------------------------------------------------------------------------
atomfont:=defaultfont:="";
- out_file_aux:=jobname&"-info.aux";
- out_file_mpc:=jobname&"-mpc.txt";
- out_file_rep:=jobname&"-report.txt";
- def file_mol_output= jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol" enddef;
%--default ahangle=45---------------------------------------------------------------------
if ahangle=0: outputformat:="eps"; % eps format(.mps)
- elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.24; % png format(300dpi)
elseif ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi)
- elseif ahangle=12: outputformat:="png"; hppp:=vppp:=0.10; % png format(720dpi)
- elseif ahangle=13: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
- elseif ahangle=14: outputformat:="png"; hppp:=vppp:=0.04; % png format(1800dpi)
- elseif ahangle=15: outputformat:="png"; hppp:=vppp:=0.03; % png format(2400dpi)
+ elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
elseif ahangle=2: outputformat:="svg"; % svg format
elseif ahangle=3: outputformat:="eps"; % eps format(.eps)
+ elseif ahangle=45: outputformat:="eps"; % eps format(.eps)
fi
%--default ahlength=4---------------------------------------------------------------------
- if ahlength=1: sw_aux_out:=1; bboxmargin:=0; % output aux file
- elseif ahlength=2: sw_aux_out:=2; bboxmargin:=0; % output aux file(fixed mode)
- elseif ahlength=3: sw_rep_out:=1; bboxmargin:=0; % output report
- elseif ahlength=5: sw_mol_out:=1; bboxmargin:=0; % output MOL(V2000)
- elseif ahlength=6: sw_mol_out:=2; bboxmargin:=0; % output MOL(V3000)
+ if ahlength=1: sw_output:=Info1; % output aux file
+ elseif ahlength=2: sw_output:=Info2; % output aux file(fixed mode)
+ elseif ahlength=3: sw_output:=Report; % output report
+ elseif ahlength=5: sw_output:=MOL2k; % output MOL(V2000)
+ elseif ahlength=6: sw_output:=MOL3k; % output MOL(V3000)
+ elseif ahlength=7: sw_output:=Mfont; % output Mfont
fi
%-- default bboxmargin=2------------------------------------------------------------------
- if bboxmargin=0: def shipit = enddef; % No image file
- elseif bboxmargin=1: proc_end:=1; % output first font only
- elseif bboxmargin=3: def shipit = enddef;proc_end:=1; % No image file ,first font only
- fi
+ if bboxmargin=1: proc_end:=1; fi % output first font only
%--default labeloffset=3------------------------------------------------------------------
if labeloffset=1: defaultfont:=mpfont; % mpost label
elseif labeloffset=2: defaultfont:=atomfont:=mpfont; % mpost label,atom
@@ -163,21 +151,20 @@ fi
clearit;
%--------------------------------------------------------------------------------------------------
if f_MP=1:
- if bboxmargin=0: message "* output no image file";
- elseif bboxmargin=1: message "* output first font only";
- elseif bboxmargin=3: message "* no image,first only";
- fi
+ if bboxmargin=1: message "* output first font only"; fi
message "* jobname="&jobname;
message "* numbersystem="&numbersystem;
- if ahlength=1: message "* output aux file";
- message "* out_file_aux="&out_file_aux;
- message "* aux_delimiter="&aux_delimiter;
- elseif ahlength=2: message "* output report file";
- message "* out_file_rep="&out_file_rep;
- elseif ahlength=5: message "* output MOL file(V2000)";
- message "* "&jobname&"-nnn-"&"inf_EN"&".mol";
- elseif ahlength=6: message "* output MOL file(V3000)";
- message "* "&jobname&"-nnn-"&"inf_EN"&".mol";
+ if ahlength=1: message "* output info file";
+ message "* file name="&jobname&"-info.aux";
+ message "* info delimiter="&aux_delimiter;
+ ef ahlength=2: message "* output report file";
+ message "* file name="jobname&"-report.txt";
+ ef ahlength=5: message "* output MOL file(V2000)";
+ message "* "&jobname&"-nnn-"&"inf_EN"&".mol";
+ ef ahlength=6: message "* output MOL file(V3000)";
+ message "* "&jobname&"-nnn-"&"inf_EN"&".mol";
+ ef ahlength=7: message "* output mf file";
+ message "* mf file name="&jobname&"-mf.aux";
fi
message "* outputformat="&outputformat;
if outputformat="png": message "* hppp="&decimal(hppp)&"/vppp="&decimal(vppp); fi
@@ -221,8 +208,8 @@ def_com(-4090)(_com,_jp_atom,_jp_absA,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_line,_t
si,dl,dl_,dr,dr_,db,dm,dm_,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,nb,si_,wf_,wb_,zf_,zb_,wv_,bd_);
%--------------------------------------------------------------------------------------------------
def parameter_list=
- sw_rep_out,sw_numberA,sw_numberB,sw_mframe,sw_aux_out,sw_expand,sw_mol_out,sw_calc,
- sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu,sw_file_open,
+ sw_numberA,sw_numberB,sw_mframe,sw_expand,sw_output,
+ sw_single,sw_ext_all,sw_aframe,sw_fframe,sw_group_off,sw_trimming,sw_arrow_emu,
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,blength,offset_atom,offset_wedge,max_blength,offset_hash_gap,
@@ -265,23 +252,23 @@ enddef;
def beginfont(text s)=
begingroup
save ',f_beginchar,f_ext,blen,ext,add,ang_br,n_fw,n_bw,at_colon,at_semicol,info,mc,temps,
- file_name_input,temps_a,t_tag;
+ file_name_input,t_tag,f_close;
numeric at_semicol[];
- string info[],mc[],temps,temps_a,mc,file_name_input,t_tag;
+ string info[],mc[],temps,mc,file_name_input,t_tag;
%------------------------------------------------------------------------------------------------
def ext=ext_to_font enddef;
def add=add_to_molecule enddef;
def '=read_ud enddef;
%------------------------------------------------------------------------------------------------
inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_USE:=inf_EXA:=inf_EXB:="-";
- mc:=cal_MW:=cal_MI:=cal_FM:="";
+ mc:=t_tag:=file_name_input:=cal_MW:=cal_MI:=cal_FM:="";
%------------------------------------------------------------------------------------------------
parts_cnt:=parts_usr_start;
parts_int:=parts_int_start;
%------------------------------------------------------------------------------------------------
char_num:=char_num+1;
store_par(parameter_list);
- f_ext:=cntM:=mc_row:=inf_num:=0;
+ f_ext:=cntM:=mc_row:=inf_num:=f_EOF:=0; f_close:=1;
for list=s: inf_num:=inf_num+1; info[inf_num]:=list; mc[inf_num]:=""; endfor
%------------------------------------------------------------------------------------------------
for j=1 upto inf_num:
@@ -296,9 +283,10 @@ def beginfont(text s)=
ef at_colon>=1:
s_tag:=substring (0,at_colon-1) of info[j];
s_var:=substring (at_colon,length(info[j])) of info[j];
- if s_tag="f": if f_MP=1: file_name_input:=s_var&".mcf"; fi
- ef s_tag="t": if f_MP=1: t_tag:=s_var; fi
- ef s_tag="v": if f_MP=1: nA:=extract_data(t_tag,s_var); fi
+ if s_tag="f": if f_MP=1: file_name_input:=s_var&".mcf"; fi
+ ef s_tag="f+": if f_MP=1: file_name_input:=s_var&".mcf"; f_close:=0; fi
+ ef s_tag="t": if f_MP=1: t_tag:=s_var; fi
+ ef s_tag="v": if f_MP=1: pickup_data_unit(t_tag,s_var); fi
else: if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi
fi
fi
@@ -308,77 +296,77 @@ def beginfont(text s)=
enddef;
%==================================================================================================
def endfont=
- if cntM>=1:
- %-----------------------------------------------------------------------------------------
- if sw_ext_all=1: ext_to_font(EXT_ALL); fi
- if sw_trimming>=1:
- nA:=nC:=4095; nB:=nD:=-4095;
- for i=1 upto cntM:
- if xpart(posM[1][i])<nA: nA:=xpart(posM[1][i]); fi
- if xpart(posM[2][i])>nB: nB:=xpart(posM[2][i]); fi
- 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
- font_wd:=nB-nA+2margin_lr;
- font_ht:=nD-nC+2margin_tb;
- fsize:=(font_wd,font_ht);
+ if (sw_output=0)or(sw_output=None):
+ if cntM>=1:
+ if sw_ext_all=1: ext_to_font(EXT_ALL); fi
+ if sw_trimming>=1:
+ nA:=nC:=4095; nB:=nD:=-4095;
+ for i=1 upto cntM:
+ if xpart(posM[1][i])<nA: nA:=xpart(posM[1][i]); fi
+ if xpart(posM[2][i])>nB: nB:=xpart(posM[2][i]); fi
+ 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
+ font_wd:=nB-nA+2margin_lr;
+ font_ht:=nD-nC+2margin_tb;
+ fsize:=(font_wd,font_ht);
+ for i=1 upto cntM:
+ posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC);
+ posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC);
+ endfor
+ fi
+ %----------------------------------------------------------------------------------------
+ if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
+ else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; chardp:=0;
+ if (sw_fframe<>1)and(sw_fframe<>3): draw_corner((0,0),w,h,0.05bp); fi
+ fi
+ if (sw_fframe=1)or(sw_fframe=3): draw_frame((0,0),w,h,thickness_fframe); fi
+ if (sw_fframe=2)or(sw_fframe=3):
+ draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_fframe);
+ fi
for i=1 upto cntM:
- posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC);
- posM[1][i]:=posM[1][i]+(margin_lr-nA,margin_tb-nC);
+ addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
+ if sw_mframe=1: ext(draw_frame(p[i],w[i],h[i],thickness_mframe)) fi
endfor
+ if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
+ %-----------------------------------------------------------------------------------------
+ else:
+ font_wd:=xpart(fsize); font_ht:=ypart(fsize);
+ if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
+ else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht;
+ fi
+ draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_fframe;
fi
- %----------------------------------------------------------------------------------------
- if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
- else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht; chardp:=0;
- if (sw_fframe<>1)and(sw_fframe<>3): draw_corner((0,0),w,h,0.05bp); fi
- fi
- if (sw_fframe=1)or(sw_fframe=3): draw_frame((0,0),w,h,thickness_fframe); fi
- if (sw_fframe=2)or(sw_fframe=3):
- draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_fframe);
- fi
- for i=1 upto cntM:
- addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture;
- if sw_mframe=1: ext(draw_frame(p[i],w[i],h[i],thickness_mframe)) fi
- endfor
- if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi
%-----------------------------------------------------------------------------------------
- else:
- font_wd:=xpart(fsize); font_ht:=ypart(fsize);
- if f_MP=0: beginchar(char_num,font_wd/bp*bp#,font_ht/bp*bp#,0)
- else: beginfig(char_num) w:=charwd:=font_wd; h:=charht:=font_ht;
- fi
- draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_fframe;
+ endchar;
+ clearit;
+ %-----------------------------------------------------------------------------------------------
+ %% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start);
+ %% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start);
+ %-----------------------------------------------------------------------------------------------
fi
- %-----------------------------------------------------------------------------------------
- endchar;
- clearit;
restore_par(parameter_list);
- endgroup;
if proc_end=1: scantokens("bye"); fi
- %-----------------------------------------------------------------------------------------------
-%% message "* parts_cnt (0)="& decimal(parts_cnt) &" "& decimal(parts_usr-parts_usr_start);
-%% message "* parts_int (0)="& decimal(parts_int) &" "& decimal(parts_int-parts_int_start);
- %-----------------------------------------------------------------------------------------------
+ endgroup;
enddef;
%-------------------------------------------------------------------------------------------------
-vardef extract_data(expr t,v)=
- save data_cnt,f_end,semicol_cnt,cond,n_var;
- f_end:=data_cnt:=semicol_cnt:=cond:=at_semicol[0]:=0;
+def pickup_data_unit(expr t,v)=
+ begingroup
+ save data_unit_cnt,f_end,semicol_cnt,cond,n_var;
+ f_end:=data_unit_cnt:=semicol_cnt:=cond:=at_semicol[0]:=inf_num:=0;
if t="n": n_var:=scantokens(v); fi
forever:
- temps:=readfrom file_name_input;
- exitif temps=EOF;
+ temps:=readfrom file_name_input; if temps=EOF: f_EOF:=1; fi exitif temps=EOF;
if subc(1,temps)="%":
- ef subc(1,temps)="*": f_end:=1;
ef subc(1,temps)="+":
- data_cnt:=data_cnt+1;
- if t="n": if n_var=0: cond:=1; else: if data_cnt=n_var: cond:=1; fi fi
+ data_unit_cnt:=data_unit_cnt+1;
+ if v="*": cond:=1;
+ ef t="n": if data_unit_cnt=n_var: cond:=1; fi
else: if v=scantokens("inf_"&t): cond:=1; fi
fi
if cond=1:
forever:
- temps:=readfrom file_name_input;
- exitif subc(1,temps)="-";
+ temps:=readfrom file_name_input; exitif temps=EOF; exitif subc(1,temps)="+";
mc_row:=mc_row+1;
n_fw:=scan_char(" ",temps,1,1);
mc_indent[mc_row]:=n_fw-1;
@@ -387,27 +375,30 @@ vardef extract_data(expr t,v)=
endfor
f_end:=1;
else:
- forever: temps:=readfrom file_name_input; exitif subc(1,temps)="-"; endfor
+ forever:
+ temps:=readfrom file_name_input; exitif temps=EOF; exitif subc(1,temps)="+";
+ endfor
fi
else:
semicol_cnt:=0;
for i=1 upto length(temps):
if subc(i,temps)=";": semicol_cnt:=semicol_cnt+1; at_semicol[semicol_cnt]:=i; fi
endfor
- for i=1 upto semicol_cnt+1:
- if i<=semicol_cnt: temps_a:=substring (at_semicol[i-1],at_semicol[i]-1) of temps;
- else: temps_a:=substring (at_semicol[semicol_cnt],length(temps)) of temps;
+ inf_num:=semicol_cnt+1;
+ for i=1 upto inf_num:
+ if i<=semicol_cnt: info[i]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps;
+ else: info[i]:=substring (at_semicol[semicol_cnt],length(temps)) of temps;
fi
- at_colon:=scan_char(":",temps_a,0,1);
- s_tag:=substring (0,at_colon-1) of temps_a;
- s_var:=substring (at_colon,length(temps_a)) of temps_a;
+ at_colon:=scan_char(":",info[i],0,1);
+ s_tag:=substring (0,at_colon-1) of info[i];
+ s_var:=substring (at_colon,length(info[i])) of info[i];
if known scantokens("inf_"&s_tag): scantokens("inf_"&s_tag):=s_var; fi
endfor
fi
exitif f_end=1;
endfor
- if sw_file_open=0: closefrom file_name_input; fi
- data_cnt
+ if f_close=1: closefrom file_name_input; fi
+ endgroup;
enddef;
%--------------------------------------------------------------------------------------------------
vardef scan_char(expr c,s,d,n)=
@@ -845,7 +836,9 @@ def MC(text TXT)=
pair temp_p;
%-----------------------------------------------------------------------------------------------
if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi
- if (sw_expand=1)or(sw_mol_out>=1): expand_set; crR:=1; else: crR:=-ratio_chain_ring; fi
+ if (sw_expand=1)or(sw_output=MOL2k)or(sw_output=MOL3k):
+ expand_set; crR:=1; else: crR:=-ratio_chain_ring;
+ fi
cntA:=cntB:=cnt_group:=cntC:=0; strD[0]:="C"; str_cnt:=2000;
%-----------------------------------------------------------------------------------------------
font_wd:=xpart(fsize);
@@ -944,7 +937,7 @@ def MC(text TXT)=
mol_stru[cntM]:=currentpicture;
clearit;
endgroup;
- if ((sw_aux_out>=1)or(sw_rep_out=1)or(sw_mol_out>=1)or(sw_calc=1)): proc_calc; fi
+ if cntM=1: if (sw_output>=None)and(sw_output<=Mfont): proc_output(sw_output); fi fi
enddef;
%-------------------------------------------------------------------------------------------------
def add_group=
@@ -1516,10 +1509,10 @@ vardef erase_brace(expr ATOM)=
fi
enddef;
%=================================================================================================
-def proc_calc=
+def proc_output(expr n)=
begingroup
- save warning_cnt,knownA,bondC,tmp_wtp,bond_cnt,hideH_cnt;
- hideH_cnt:=warning_cnt:=num_MW:=num_MI:=cen_MW:=cen_MI:=tbl_atom_max:=0;
+ save knownA,bondC,tmp_wtp,bond_cnt,warning_cnt,hideH_cnt;
+ num_MW:=num_MI:=cen_MW:=cen_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:
@@ -1587,23 +1580,28 @@ def proc_calc=
else: num_MW:=cen_MW; cal_MW:=fdr(6)(cen_MW)&"*100"; fi
if cen_MI<40: cal_MI:=substring (0,10) of decimal(num_MI);
else: num_MI:=cen_MI; cal_MI:=fdr(8)(cen_MI)&"*100"; fi
- if (sw_aux_out>=1)and(cntM=1): proc_auxfile_out; fi
- if (sw_rep_out=1)and(cntM=1): proc_report_out; fi
- if (sw_mol_out>=1)and(cntM=1): proc_mol_out; fi
+ %-------------------------------------------------------------------------------------
+ if n=Report: proc_report_out(0);
+ ef n=Info1: proc_auxfile_out(1);
+ ef n=Info2: proc_auxfile_out(2);
+ ef n=MOL2k: proc_mol_out(1);
+ ef n=MOL3k: proc_mol_out(2);
+ ef n=Mfont: proc_mf_out(0);
+ fi
endgroup
enddef;
%=================================================================================================
-def proc_auxfile_out=
+def proc_auxfile_out(expr n)=
message "["&decimal(char_num)&"]:"&inf_EN;
- file_name_output:=out_file_aux;
+ file_name_output:=jobname&"-info.aux";
%--------------------------------------------------------------------------------------
- if (char_num=1)and(sw_aux_out=2):
+ if (char_num=1)and(n=2):
printf tag[1] for i=2 upto aux_max: exitif tag[i]=""; &aux_delimiter&tag[i] endfor ;
fi
%--------------------------------------------------------------------------------------
for i=1 upto aux_max: exitif tag[i]="";
if i=1: printf "" else: &aux_delimiter fi
- if (sw_aux_out=1)or(sw_aux_out=3): &tag[i]&":" fi
+ if n=1: &tag[i]&":" fi
%-------------------------------------------
if tag[i]="J": & jobname
ef tag[i]="C": & decimal(char_num)
@@ -1630,7 +1628,6 @@ def proc_auxfile_out=
ef tag[i]="MC": & inf_MC
fi
endfor
- if sw_aux_out=3: for i=1 upto inf_num: &aux_delimiter&info[i] endfor; fi
enddef;
%=================================================================================================
vardef round_auto(expr n)=
@@ -1638,11 +1635,11 @@ vardef round_auto(expr n)=
elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi
enddef;
%-------------------------------------------------------------------------------------------------
-def proc_report_out=
+def proc_report_out(expr n)=
message "["&decimal(char_num)&"]:"&inf_EN;
- file_name_output:=out_file_rep;
+ file_name_output:=jobname&"-report.txt";
printf "===========================================================================";
- printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN;
+ printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input;
if mc_row>=1:
printf "---------------------------------------------------------------------------";
for i=1 upto mc_row:
@@ -1702,11 +1699,11 @@ def proc_report_out=
printf "===========================================================================";
enddef;
%=================================================================================================
-def proc_mol_out=
+def proc_mol_out(expr n)=
message "["&decimal(char_num)&"]:"&inf_EN;
- file_name_output:=file_mol_output;
+ file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&inf_EN&".mol";
%-V2000---------------------------------------------------------------------------------------
- if sw_mol_out=1:
+ if n=1:
printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf "";
printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000";
for i=1 upto cntA:
@@ -1721,7 +1718,7 @@ def proc_mol_out=
endfor
printf "M END";
%-V3000---------------------------------------------------------------------------------------
- elseif sw_mol_out=2:
+ elseif n=2:
printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf "";
printf " 0 0 0 0 0 999 V3000";
printf "M V30 BEGIN CTAB";
@@ -1743,6 +1740,19 @@ def proc_mol_out=
printf "M V30 END BOND"; printf "M V30 END CTAB"; printf "M END";
fi
enddef;
+%=================================================================================================
+def proc_mf_out(expr n)=
+ message "["&decimal(char_num)&"]:"&inf_EN;
+ file_name_output:=jobname&"-mf.aux";
+ printf "beginfont("
+ for i=1 upto inf_num: &ditto&info[i]&ditto&"," endfor ;
+ for i=1 upto mc_row:
+ printf ditto&": " if i=mc_row: &mc[i]&ditto&")"; else: &mc[i]&ditto&","; fi
+ endfor
+ printf "if check(mc)=0: MC(scantokens(mc)) fi";
+ printf "endfont";
+ if n=1: printf "%-------------------------------------------------------------------------"; fi
+enddef;
%-------------------------------------------------------------------------------------------------
vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef;
%-------------------------------------------------------------------------------------------------