From d4c47140de27cad1436dd90b4363fb001354b34c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 20 Feb 2022 21:13:58 +0000 Subject: mcf2graph (20feb22) git-svn-id: svn://tug.org/texlive/trunk@62101 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG | 7 +- Master/texmf-dist/doc/metapost/mcf2graph/README | 30 +- .../texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp | 1980 ++++++++------------ .../doc/metapost/mcf2graph/mcf_data_base.mcf | 12 +- .../doc/metapost/mcf2graph/mcf_exa_soc.mp | 13 +- .../doc/metapost/mcf2graph/mcf_example.pdf | Bin 431882 -> 431593 bytes .../doc/metapost/mcf2graph/mcf_example.tex | 8 +- .../doc/metapost/mcf2graph/mcf_man_soc.mp | 176 +- .../doc/metapost/mcf2graph/mcf_manual.pdf | Bin 292526 -> 292313 bytes .../doc/metapost/mcf2graph/mcf_manual.tex | 2 +- .../doc/metapost/mcf2graph/mcf_mplib_exa.pdf | Bin 197137 -> 197089 bytes .../doc/metapost/mcf2graph/mcf_mplib_exa.tex | 57 +- 12 files changed, 955 insertions(+), 1330 deletions(-) diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG index e7f8ff63c82..5ef0c1644db 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG +++ b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG @@ -1,6 +1,11 @@ ******************************************************************************* - Changelog of mcf2graph software package by Akira Yamaji 2022-01-22 + Changelog of mcf2graph software package by Akira Yamaji 2022-02-20 ******************************************************************************* +[ver. 4.80 / 2022-02-20] + -update mcf2graph.mp + -update mcf_data_base.mcf + -update MCF manual,example + [ver. 4.79 / 2022-01-22] -fix bug in numbering atom,bond diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/README b/Master/texmf-dist/doc/metapost/mcf2graph/README index 32076c3ab16..7cf9d4cbbc4 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/README +++ b/Master/texmf-dist/doc/metapost/mcf2graph/README @@ -1,7 +1,7 @@ ******************************************************************************** mcf2graph : Convert Molecular Coding Format to graphics with MetaPost Author : Akira Yamaji - version : 4.79 2022-01-22 + version : 4.80 2022-02-20 E-mail : mcf2graph@gmail.com Located at : http://www.ctan.org/pkg/mcf2graph ******************************************************************************** @@ -33,24 +33,20 @@ 3. How to use mcf2graph with MetaPost Minimum requirement to use mcf2graph : mpost.exe,mpost.dll,mpost.mp,plain.mp ( 1) >mpost FILENAME => output eps(.mps) file - ( 2) >mpost -s bboxmargin=1 FILENAME => output first figure only (for test) - ( 3) >mpost -s ahangle=1 FILENAME => output png file (600dpi) - ( 4) >mpost -s ahangle=11 FILENAME => output png file (1200dpi) - ( 5) >mpost -s ahangle=2 FILENAME => output svg file - ( 6) >mpost -s ahangle=3 FILENAME => output eps(.eps) file - ( 7) >mpost -s ahlength=1 FILENAME => output information-aux file - tag1:var1;tag2:var2; - ( 8) >mpost -s ahlength=2 FILENAME => output information-aux file - tag1;tag2; - var1;var2; - ( 9) >mpost -s ahlength=3 FILENAME => output data-base-aux file - (10) >mpost -s ahlength=5 FILENAME => output mol file(V2000) - (11) >mpost -s ahlength=6 FILENAME => output mol file(V3000) - (12) >mpost -s ahlength=7 FILENAME => output report file - (13) >mpost -s labeloffset=2 FILENAME => atomfont="uhvr8r" + ( 2) >mpost -s ahangle=1 FILENAME => output png file (600dpi) + ( 3) >mpost -s ahangle=11 FILENAME => output png file (1200dpi) + ( 4) >mpost -s ahangle=2 FILENAME => output svg file + ( 5) >mpost -s ahangle=3 FILENAME => output eps(.eps) file + ( 6) >mpost -s ahlength=1 FILENAME => output information-aux file(for tex) + ( 7) >mpost -s ahlength=2 FILENAME => output information-aux file + (for spread sheet) + ( 8) >mpost -s ahlength=3 FILENAME => output data-base-aux file + ( 9) >mpost -s ahlength=5 FILENAME => output mol file(V2000) + (10) >mpost -s ahlength=6 FILENAME => output mol file(V3000) + (11) >mpost -s ahlength=7 FILENAME => output report file 4. License - mcf2graph ver 4.78 Copyright (c) 2013-2022 Akira Yamaji + mcf2graph ver 4.80 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 diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp b/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp index 0ddf0b3c224..b440e07e06d 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf2graph.mp @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.79 Copyright (c) 2013-2022 Akira Yamaji +% mcf2graph ver 4.80 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, @@ -17,85 +17,77 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % mcf2graph is MetaPost macro package convert Molecular Coding Format(MCF) to graphic file -% font(pk)/eps/sgv/png/mdl molfile +% eps/sgv/png/mdl molfile %-------------------------------------------------------------------------------------------------- % This package is located at : http://www.ctan.org/pkg/mcf2graph % Suggestion or request mail to : mcf2graph@gmail.com %-------------------------------------------------------------------------------------------------- -% Set outputformat to "eps"(.mps) : mpost FILENAME -% Set output first font only : mpost -s bboxmargin=1 FILENAME -% Set outputformat to "png" : mpost -s ahangle=1 FILENAME -% Set outputformat to "svg" : mpost -s ahangle=2 FILENAME +% Set outputformat to "eps" (.mps) : mpost FILENAME +% Set outputformat to "png" (.png) : mpost -s ahangle=1 FILENAME +% Set outputformat to "svg" (.svg) : mpost -s ahangle=2 FILENAME % Set outputformat to "eps" (.eps) : mpost -s ahangle=3 FILENAME -% Set output information aux file (tag1:var1;tag2:var2) : mpost -s ahlength=1 FILENAME -% Set output information aux file (tag1;tag2 var1;var2) : mpost -s ahlength=2 FILENAME +% Set output information aux file (for TeX) : mpost -s ahlength=1 FILENAME +% Set output information aux file (for spread sheet) : mpost -s ahlength=2 FILENAME % Set output aux data-base file : mpost -s ahlength=3 FILENAME % Set output MOL file (V2000) : mpost -s ahlength=5 FILENAME % Set output MOL file (V3000) : mpost -s ahlength=6 FILENAME % Set output report : mpost -s ahlength=7 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracingstats:=1; -message "* This is mcf2graph ver 4.79 2022.01.22"; +message "* This is mcf2graph ver 4.80 2022.02.20"; %------------------------------------------------------------------------------------------------- -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; -numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],f_char[], - tbl_atom_wt[],tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],addA[],add_rot[],chargeA[], - com_group[][],par_group[][],cnt_group[],colorA[],colorB[],sumA[],bondC[],hideH[],lineB[], - sB[],eB[],angB[],angA[],lenB[],angX[],numS[],wdM[],htM[],wdA[],dxA[], - cmm_adr[],mc_indent[],at_semicol[]; -string save_str[],tbl_atom_str[],strD[],tag[],file_name_output,blank_str,aux_delimiter,atomfont, - temps,default_data_file,default_temp_file,mpfont,tag_s,var_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; -pair save_pair[],posA[],posM[][],msize,mposition,fsize,fmargin,save_mposition,posBs,posBe,dum; -picture mol_stru[],atom_picture,save_picture,temp_picture; +newinternal numeric nA,nB,nC,nD,nE,nF,nH,nN,nL,nR,nS,nU,nP,nW,nX,nY,mc_row; +newinternal string tempc,temps,blanks,aux_delimiter,atomfont,sC,sI,sS,sT,sV,cC,cH,cO,cN,cS,cF,cP, + file_input,file_output; +numeric save_num[],comD[][],parD[][],adrD[][],cntD[],tbl_atom[],tbl_group[][],tbl_atom_wt[], + tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[]; +string mc[],mc,save_str[],tbl_atom_str[],strD[],tag[],default_data_file,default_temp_file,mpfont; +pair save_pair[],msize,mposition,fsize,fmargin,dum,mpos; +picture mol_pic[]; +color color_list[]; %------------------------------------------------------------------------------------------------- -char_num:=str_cnt:=tbl_cnt:=proc_end:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0; +fig_num:=str_cnt:=tbl_cnt:=mangle:=sw_expand:=sw_frame:=sw_trimming:=sw_ext_all:=0; sw_abbreviate:=sw_numbering:=sw_output:=0; numbering_start:=1; numbering_end:=4095; %------------------------------------------------------------------------------------------------- -aux_max:=max_inf_num:=20; aux_delimiter:=";"; blank_str:= " "; dum:=(-4091,0); +aux_max:=max_inf_num:=20; aux_delimiter:=";"; blanks:= " "; dum:=(-4091,0); for i=1 upto aux_max: tag[i]:=""; endfor 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; %------------------------------------------------------------------------------------------------- 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("="); -a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&"); -a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`"); -a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'"); +a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("="); +a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&"); +a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`"); +a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'"); a_bar:=ASCII("|"); a_plus:=ASCII("+"); a_minus:=ASCII("-"); -%-------------------------------------------------------------------------------------------------- +cC:="C"; cH:="H"; cO:="O"; cN:="N"; cS:="S"; cF:="F"; cP:="P"; +%------------------------------------------------------------------------------------------------- let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif; -def ]]]=] ] ] enddef; -%-------------------------------------------------------------------------------------------------- -primarydef a at b = fat(a,b) enddef; -def fat(expr a,b)= mposition:=b; a enddef; -def ext(text TXT)= sw_ext_all:=1; def EXT_ALL = TXT enddef; enddef; +let ISP=intersectionpoint; def ]]]=] ] ] enddef; +%------------------------------------------------------------------------------------------------- +def ext(text t)= sw_ext_all:=1; def EXT_ALL = t enddef; enddef; def ext_clear= sw_ext_all:=0; def EXT_ALL = enddef; enddef; -%-------------------------------------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- vardef frac primary n= n-floor n enddef; vardef iif(expr a,b,c)=if a: b else: c fi enddef; vardef subc(expr i,s)= substring(i-1,i) of s enddef; vardef sfrt(expr a,b,c)= a shifted ((b,0) rotated c) enddef; +%------------------------------------------------------------------------------------------------- def wpcs expr n= withpen pencircle scaled n enddef; def ppcs expr n= pickup pencircle scaled n enddef; def sbp(expr m,n)expr p=subpath(m*length(p),n*length(p)) of p enddef; %------------------------------------------------------------------------------------------------- -vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blank_str)&s enddef; -vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blank_str) enddef; +vardef fsr(expr n)(expr s)= (substring(0,n-length(s)) of blanks)&s enddef; +vardef fsl(expr n)(expr s)= s&(substring(0,n-length(s)) of blanks) enddef; vardef fdr(expr n)(expr s)= fsr(n)(decimal(s)) enddef; vardef fdl(expr n)(expr s)= fsl(n)(decimal(s)) enddef; -def warning(expr s)= message "% "&decimal(char_num)&fdr(3)(incr warning_cnt)&")"&s; enddef; +def printf expr s= write s to file_output enddef; +def warning(expr s)= message "% "&decimal(fig_num)&fdr(3)(incr warning_cnt)&")"&s; enddef; %================================================================================================= -color color_list[]; -for i=1 upto 100: colorA[i]:=colorB[i]:=0; endfor prologues:=3; warningcheck:=0; -default_data_file:="mcf_data_base.mcf"; -default_temp_file:="temp.mcf"; -mpfont:="uhvr8r"; -atomfont:="draw"; -defaultfont:=mpfont; +default_data_file:="mcf_data_base.mcf"; default_temp_file:="temp.mcf"; +mpfont:="uhvr8r"; atomfont:="draw"; defaultfont:=mpfont; %--default ahangle=45--------------------------------------------------------------------- if ahangle=0: outputformat:="eps"; % eps format(.mps) ef ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi) @@ -114,8 +106,7 @@ ef ahlength=6: sw_output:=MOL3k; % output MOL(V3000) ef ahlength=7: sw_output:=Report; % output report fi %-- default bboxmargin=2------------------------------------------------------------------ -if bboxmargin=1: proc_end:=1; % output first font only -ef bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) +if bboxmargin=3: ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) ef bboxmargin=4: sw_output:=Fig+Calc; ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) @@ -125,12 +116,7 @@ if (outputformat="eps")and(ahangle<>3): outputtemplate:="%j-%3c."&"mps"; else: outputtemplate:="%j-%3c."&outputformat; fi %----------------------------------------------------------------------------------------- -def printf expr s= write s to file_name_output enddef; -vardef totalweight expr a= 0 enddef; -def Cp(expr s) = if known s: if s<>0: withcolor color_list[s] fi fi enddef; -%----------------------------------------------------------------------------------------- if sw_output>=Info: - if bboxmargin=1: message "* output first font only"; fi message "* jobname="&jobname; message "* numbersystem="&numbersystem; if (ahlength=1)or(ahlength=2): @@ -155,23 +141,17 @@ 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; -offset_thickness:=0.2; offset_bond_gap:=0.3; offset_hash_gap:=0.1; -offset_atom:=0.8; offset_wedge:=0.4; thickness_frame:=0.2; +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; +offset_thickness:=0.2; offset_bond_gap:=0.3; offset_hash_gap:=0.1; offset_atom:=0.8; +offset_wedge:=0.4; thickness_frame:=0.2; max_blength:=10mm; blength:=mangle:=0; max_labelsize:=20mm; dottedline_gap:=1.5; %-------------------------------------------------------------------------------------------------- fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5); %================================================================================================== bboxmargin:=0; % 2bp => 0 -ahangle:=45; -ahlength:=4; -defaultsize:=8; -defaultscale:=1; -labeloffset:=3; -ext_defaultline:=0.5; +ahangle:=45; ahlength:=4; defaultsize:=8; defaultscale:=1; labeloffset:=3; ext_defaultline:=0.5; lonepairdiam:=lonepairspace:=circlediam:=circlepen:=0; %================================================================================================== parts_emb_start:=1000; % 1001 => 2000 for embedded parts (max 1900) @@ -181,31 +161,28 @@ parts_int_start:=3000; % 3001 => 4000 for internal parts (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,_group_si,_group_dm,_group_wf,_group_zf, - _set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom,_tmp_rot,_fuse,_size_atom,_numeric, - _jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s,_len_e,_len_ss,_len_ee, - _group_s,_group_e,_rest,_charge,_from,_until, + _chg_len,_get_len,_ring_len,_tmp_len,_rot_ang,_adj_ang,_chg_env,_tmp_env,_set_colorA,_set_colorB, _group_si,_group_dm,_group_wf,_group_zf,_set_adr,_mk_bond,_set_atom,_arrange_ang,_chg_atom, + _tmp_rot,_fuse,_size_atom,_numeric,_jump_at,_set_add,_chg_add,_nop,_mark,_moff,_term,_len_s, + _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,ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom, - lonepairdiam,lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap, - offset_bond_gap,thickness_frame,offset_thickness, - numbering_start,numbering_end,defaultsize,defaultscale,labeloffset,mangle,blength, - fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap, + 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, + ratio_hashgap_bond,ratio_thickness_char,ratio_wedge_bond,ratio_atomgap_atom,lonepairdiam, + lonepairspace,offset_atom,offset_wedge,max_blength,offset_hash_gap,offset_bond_gap, + thickness_frame,offset_thickness,numbering_start,numbering_end,defaultsize,defaultscale, + labeloffset,mangle,blength,fsize,fmargin,msize,mposition,defaultfont,atomfont,dottedline_gap, Me,Et,CH3,NH,NH2,NO,NO2,OH,CHO,COOH,CN,SH,!CH3,!NH2,!NO2,!OH,!CHO,!COOH,!CN,!SH enddef; %-------------------------------------------------------------------------------------------------- def init_par(text t)= nA:=nB:=nC:=0; for list=t: - if numeric list: nA:=nA+1; save_num[nA]:=list; - elseif pair list: nB:=nB+1; save_pair[nB]:=list; - elseif string list: nC:=nC+1; save_str[nC]:=list; + if numeric list: nA:=nA+1; save_num[nA]:=list; + ef pair list: nB:=nB+1; save_pair[nB]:=list; + ef string list: nC:=nC+1; save_str[nC]:=list; fi endfor enddef; @@ -213,9 +190,9 @@ enddef; def store_par(text t)= nA:=nB:=nC:=0; for list=t: - if numeric list: nA:=nA+1; if save_num[nA]<>list: save_num[nA]:=list; fi - elseif pair list: nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi - elseif string list: nC:=nC+1; if save_str[nC]<>list: save_str[nC]:=list; fi + if numeric list: nA:=nA+1; if save_num[nA]<>list: save_num[nA]:=list; fi + ef pair list: nB:=nB+1; if save_pair[nB]<>list: save_pair[nB]:=list; fi + ef string list: nC:=nC+1; if save_str[nC]<>list: save_str[nC]:=list; fi fi endfor enddef; @@ -223,68 +200,64 @@ enddef; def restore_par(text t)= nA:=nB:=nC:=0; forsuffixes list=t: - if numeric list: nA:=nA+1; if list<>save_num[nA]: list:=save_num[nA]; fi - elseif pair list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi - elseif string list: nC:=nC+1; if list<>save_str[nC]: list:=save_str[nC]; fi + if numeric list: nA:=nA+1; if list<>save_num[nA]: list:=save_num[nA]; fi + ef pair list: nB:=nB+1; if list<>save_pair[nB]: list:=save_pair[nB]; fi + ef string list: nC:=nC+1; if list<>save_str[nC]: list:=save_str[nC]; fi fi endfor enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def beginfigm(text s)= begingroup - save ',f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,temp_tag,info_cnt, - mc,info,file_name_input,bond_cnt,warning_cnt,hideH_cnt,bondC,filter_s; - string info[],mc[],mc,file_name_input,temp_tag,filter_s; + save ',f_ext,blen,ext,add,ang_br,fw_n,bw_n,at_colon,info_cnt,group_num,info_s,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,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; + numeric mc_indent[],hideH[],lineB[],sB[],eB[],angB[],angA[],lenB[],angX[],numS[],sumA[], + bond_num[],wdM[],htM[],chargeA[],addA[],add_rot[]; + pair posA[],posM[][]; + string info_s[],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; %------------------------------------------------------------------------------------------------ - def ext=ext_to_font enddef; - def add=add_to_molecule enddef; - def '=read_ud enddef; + def ext=ext_to_fig enddef; def add=add_to_molecule enddef; def '=read_ud enddef; %------------------------------------------------------------------------------------------------ inf_NO:=inf_EN:=inf_JN:=inf_MW:=inf_FM:=inf_CAS:=inf_Cat:=inf_EXA:=inf_EXB:="-"; - mc:=temp_tag:=cal_MW:=cal_MI:=cal_FM:=filter_s:=""; - file_name_input:=default_data_file; + mc:=temps:=cal_MW:=cal_MI:=cal_FM:=filter_s:=""; + file_input:=default_data_file; %------------------------------------------------------------------------------------------------ - parts_cnt:=parts_usr_start; - parts_int:=parts_int_start; + parts_cnt:=parts_usr_start; parts_int:=parts_int_start; %------------------------------------------------------------------------------------------------ - char_num:=char_num+1; store_par(parameter_list); - f_ext:=cntM:=mc_row:=info_cnt:=f_EOF:=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); if at_colon=1: - fw_n:=scan_char(" ",list,1,2); - bw_n:=scan_char(" ",list,-1,2); - mc_row:=mc_row+1; - mc_indent[mc_row]:=fw_n-2; - mc[mc_row]:=substring (fw_n-1,bw_n) of list; - mc:=mc&mc[mc_row]; + fw_n:=scan_char(" ",list,1,2); bw_n:=scan_char(" ",list,-1,2); + mc_row:=mc_row+1; mc_indent[mc_row]:=fw_n-2; + mc[mc_row]:=substring(fw_n-1,bw_n) of list; mc:=mc&mc[mc_row]; ef at_colon>=1: - info_cnt:=info_cnt+1; info[info_cnt]:=list; - tag_s:=substring (0,at_colon-1) of list; - var_s:=substring (at_colon,length(list)) of list; - if tag_s="f": - if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; - else: file_name_input:=var_s; - fi - ef tag_s="t": temp_tag:=var_s; - ef tag_s="v": pickup_data_unit(temp_tag,var_s,1); - ef tag_s="v+": pickup_data_unit(temp_tag,var_s,0); - else: if known scantokens("inf_"&tag_s): scantokens("inf_"&tag_s):=var_s; fi + info_cnt:=info_cnt+1; info_s[info_cnt]:=list; + sT:=substring(0,at_colon-1) of list; sV:=substring(at_colon,length(list)) of list; + if sT="f": if scan_char(".",sV,0,1)=0: file_input:=sV&".mcf"; else: file_input:=sV; fi + ef sT="t": temps:=sV; + ef sT="v": pickup_data_unit(temps,sV,1); + ef sT="v+": pickup_data_unit(temps,sV,0); + else: if known scantokens("inf_"&sT): scantokens("inf_"&sT):=sV; fi fi fi endfor %------------------------------------------------------------------------------------------------ - mol_stru[0]:=nullpicture; + mol_pic[0]:=nullpicture; enddef; %================================================================================================== def endfigm= if f_EOF=0: %-------------------------------------------------------------------------------------------- if scan_bit(sw_output,Fig): + beginfig(fig_num) + %------------------------------------------------------------------------------------------ if cntM>=1: - if sw_ext_all=1: ext_to_font(EXT_ALL); fi + if sw_ext_all=1: ext_to_fig(EXT_ALL); fi if sw_trimming>=1: nA:=nC:=4095; nB:=nD:=-4095; for i=1 upto cntM: @@ -293,8 +266,7 @@ def endfigm= if ypart(posM[1][i])nD: nD:=ypart(posM[2][i]); fi endfor - fig_wd:=nB-nA+2margin_lr; - fig_ht:=nD-nC+2margin_tb; + fig_wd:=nB-nA+2margin_lr; fig_ht:=nD-nC+2margin_tb; fsize:=(fig_wd,fig_ht); for i=1 upto cntM: posM[0][i]:=posM[0][i]+(margin_lr-nA,margin_tb-nC); @@ -302,22 +274,20 @@ def endfigm= endfor fi %---------------------------------------------------------------------------------------- - beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht; chardp:=0; - if scan_bit(sw_frame,Outside): else: draw_corner((0,0),w,h,0.05); fi - if scan_bit(sw_frame,Outside): draw_frame((0,0),w,h,thickness_frame); 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.05); + fi if scan_bit(sw_frame,Inside): - draw_frame((margin_lr,margin_tb),w-2margin_lr,h-2margin_tb,thickness_frame); + draw_frame((margin_lr,margin_tb),fig_wd-2margin_lr,fig_ht-2margin_tb,thickness_frame); fi for i=1 upto cntM: - addto currentpicture also mol_stru[i] shifted posM[0][i]; mol_stru[i]:=nullpicture; + addto currentpicture also mol_pic[i] shifted posM[0][i]; mol_pic[i]:=nullpicture; if scan_bit(sw_frame,Mol): ext(draw_frame(p[i],w[i],h[i],thickness_frame)) fi endfor - if f_ext=1: addto currentpicture also mol_stru[0]; mol_stru[0]:=nullpicture; fi - %---------------------------------------------------------------------------------------- + if f_ext=1: addto currentpicture also mol_pic[0]; mol_pic[0]:=nullpicture; fi else: - fig_wd:=xpart(fsize); fig_ht:=ypart(fsize); - beginfig(char_num) w:=charwd:=fig_wd; h:=charht:=fig_ht; - draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h)--(w,0) wpcs thickness_frame; + draw_frame((0,0),fig_wd,fig_ht,thickness_frame); + draw (0,fig_ht)--(fig_wd,0) wpcs thickness_frame; fi %----------------------------------------------------------------------------------------- endfig; @@ -325,9 +295,9 @@ def endfigm= fi %------------------------------------------------------------------------------------------- if scan_bit(sw_output,Info): - if scan_bit(sw_output,Table): proc_info_out(2); - ef scan_bit(sw_output,Mcode): proc_info_out(3); - else: proc_info_out(1); + if scan_bit(sw_output,Table): proc_info_out(2); + ef scan_bit(sw_output,Mcode): proc_info_out(3); + else: proc_info_out(1); fi fi if scan_bit(sw_output,Mcode): proc_mc_out(0); fi @@ -341,38 +311,28 @@ def endfigm= fi %--------------------------------------------------------------------------------------------- restore_par(parameter_list); - if proc_end=1: scantokens("bye"); fi endgroup; enddef; %------------------------------------------------------------------------------------------------- def pickup_data_unit(expr t,v,f)= begingroup - save unit_cnt,f_end,semicol_cnt,f_match,var_n,tag_a,var_a,info_s; - string tag_a[],var_a[],info_s; - f_end:=unit_cnt:=semicol_cnt:=f_match:=inf_num:=0; + save unit_cnt,f_end,semic_cnt,f_match,var_n,tag_a,var_a,at_semic; + string tag_a[],var_a[]; + numeric at_semic[]; + f_end:=unit_cnt:=semic_cnt:=f_match:=inf_num:=0; if t="n": var_n:=scantokens(v); fi forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - if subc(1,temps)="%": - ef (subc(1,temps)="+")and(subc(2,temps)<>"-"): - unit_cnt:=unit_cnt+1; - if v="*": f_match:=1; - ef t="n": if unit_cnt=var_n: f_match:=1; fi - fi + sS:=readfrom file_input; if sS=EOF: f_EOF:=1; fi exitif sS=EOF; + if subc(1,sS)="%": + ef (subc(1,sS)="+")and(subc(2,sS)<>"-"): + unit_cnt:=unit_cnt+1; if v="*": f_match:=1; ef t="n": if unit_cnt=var_n: f_match:=1; fi fi if f_match=1: forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - exitif subc(1,temps)="+"; - if subc(1,temps)<>"%": - mc_row:=mc_row+1; - fw_n:=scan_char(" ",temps,1,1); - mc_indent[mc_row]:=fw_n-1; - mc[mc_row]:=substring (fw_n-1,length(temps)) of temps; - mc:=mc&mc[mc_row]; + sS:=readfrom file_input; + if sS=EOF: f_EOF:=1; fi exitif sS=EOF; exitif subc(1,sS)="+"; + if subc(1,sS)<>"%": + fw_n:=scan_char(" ",sS,1,1); mc_row:=mc_row+1; mc_indent[mc_row]:=fw_n-1; + mc[mc_row]:=substring(fw_n-1,length(sS)) of sS; mc:=mc&mc[mc_row]; fi endfor for i=1 upto inf_num: @@ -381,60 +341,41 @@ def pickup_data_unit(expr t,v,f)= f_end:=1; else: forever: - temps:=readfrom file_name_input; - if temps=EOF: f_EOF:=1; fi - exitif temps=EOF; - exitif (subc(1,temps)="+")and(subc(2,temps)="-"); + sS:=readfrom file_input; if sS=EOF: f_EOF:=1; fi + exitif sS=EOF; exitif (substring(0,2) of sS)="+-"; endfor fi else: - semicol_cnt:=count_semicol(temps); - inf_num:=semicol_cnt+1; + semic_cnt:=split_semic(sS); inf_num:=semic_cnt+1; for i=1 upto inf_num: - if i<=semicol_cnt: info_s:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; - else: info_s:=substring (at_semicol[semicol_cnt],length(temps)) of temps; + if i<=semic_cnt: sI:=substring(at_semic[i-1],at_semic[i]-1) of sS; + else: sI:=substring(at_semic[semic_cnt],length(sS)) of sS; fi - at_colon:=scan_char(":",info_s,0,1); - tag_a[i]:=substring (0,at_colon-1) of info_s; - var_a[i]:=substring (at_colon,length(info_s)) of info_s; + nA:=scan_char(":",sI,0,1); + tag_a[i]:=substring(0,nA-1) of sI; var_a[i]:=substring(nA,length(sI)) of sI; if t=tag_a[i]: if v=var_a[i]: f_match:=1; fi fi endfor fi exitif f_end=1; endfor - if f=1: closefrom file_name_input; fi + if f=1: closefrom file_input; fi endgroup; enddef; %-------------------------------------------------------------------------------------------------- vardef scan_bit(expr n,b)= if b>=1: odd(floor(n/b)) else: odd(floor((frac n)/b)) fi enddef; %-------------------------------------------------------------------------------------------------- vardef scan_char(expr c,s,d,n)= - save k,n_s; - n_s:=0; - if d=0: for k=n upto length(s): if subc(k,s)=c: n_s:=k; fi exitif n_s>0; endfor - ef d=1: for k=n upto length(s): if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor - ef d=-1: for k=length(s) downto n: if subc(k,s)<>c: n_s:=k; fi exitif n_s>0; endfor + nN:=0; + if d=0: for i=n upto length(s): if subc(i,s)=c: nN:=i; fi exitif nN>0; endfor + ef d=1: for i=n upto length(s): if subc(i,s)<>c: nN:=i; fi exitif nN>0; endfor + ef d=-1: for i=length(s) downto n: if subc(i,s)<>c: nN:=i; fi exitif nN>0; endfor fi - n_s + nN enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def set_def_MC= - save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_def_MC; - inside_def_MC:=1; - pair |,||,##; - | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e); - _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv; - let = ==op_equ; let : ==op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq; - def @$ == jump_atom_abs enddef; def { == read_number( enddef; let } == ); def '==read_id enddef; - def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef; - def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef; - def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef; - def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef; -enddef; -%------------------------------------------------------------------------------------------------- -vardef '(text TXT)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(TXT); parts_cnt enddef; -vardef read_id(text TXT)=read_mcf(incr parts_cnt)(|,#crR,TXT,##,(_com,_rest)); parts_cnt enddef; -vardef read_ud(text TXT)=read_mcf(incr parts_cnt)(dum,dum,|,TXT,(_com,_rest)); parts_cnt enddef; +vardef '(text t)= parts_cnt:=parts_cnt+1; read_mcf(parts_cnt)(t); parts_cnt enddef; +vardef read_id(text t)=read_mcf(incr parts_cnt)(|,#rate_cr,t,##,(_com,_rest)); parts_cnt enddef; +vardef read_ud(text t)=read_mcf(incr parts_cnt)(dum,dum,|,t,(_com,_rest)); parts_cnt 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; tertiarydef a op_equ b = if (known a)and(known b):: change_bond(a,b) else:: _nop fi enddef; @@ -461,24 +402,37 @@ def group_nb secondary n = /n~nb enddef; %------------------------------------------------------------------------------------------------- def CP = com_par enddef; def CPe = com_par_ex(0) enddef; def CPx = com_par_ex(1) enddef; %================================================================================================= -def read_mcf(expr n)(text TXT)= +def read_mcf(expr n)(text t)= begingroup - save list_cnt,nCP; - if unknown inside_def_MC:: set_def_MC fi - nCP:=list_cnt:=0; - for list==TXT:: + save nCP; + if unknown inside_MC:: + save /,//,/*,*/,**,*/*,~,^,',`,<,>,:,=,\,\\,*\,\*,*\*,@,@$,$,&,&$,#,##,{,},|,||,_,inside_MC; + pair |,||,##; + | :=(_com,_mark); || := (_com,_moff); ##:=(_com,_len_e); + _:=Me; \:=0; \\:=zero_dm; *\:=zero_wf; \*:=zero_zf; *\*:=zero_wv; + let = ==op_equ; let : == op_col; let ^ ==op_hat; let ~ ==op_til; let > ==op_lt; let ` ==op_bq; + def { == read_number( enddef; let } == ); + def @$ == jump_atom_abs enddef; def ' == read_id enddef; + def < == rot_angle enddef; def @ == jump_atom enddef; def & == cyc_atom enddef; + def # == chg_length enddef; def $ == abs_adress enddef; def &$ == &.$ enddef; + def / == group_si enddef; def // == group_dm enddef; def */ == group_wf enddef; + def /* == group_zf enddef; def */* == group_wv enddef; def ** == group_nb enddef; + inside_MC:=1; + fi + %---------------------------------------------------------------------------------------------- + nCP:=0; + for list==t:: if known list:: - list_cnt:=list_cnt+1; if pair list:: nCP:=nCP+1; comD[n][nCP]:=xpart(list); parD[n][nCP]:=ypart(list); - elseif numeric list:: - if list==_nop:: message "unknown command in "AND decimal(n); - elseif list>=parts_emb_start:: + ef numeric list:: + if list==_nop:: message "unknown command in "AND decimal(n); + ef list>=parts_emb_start:: for i==1 upto cntD[list]:: nCP:=nCP+1; comD[n][nCP]:=comD[list][i]; parD[n][nCP]:=parD[list][i]; endfor else:: nCP:=nCP+1; comD[n][nCP]:=_mk_bond; parD[n][nCP]:=list; fi - elseif string list:: + ef string list:: str_cnt:=str_cnt+1; strD[str_cnt]:=list; nCP:=nCP+1; comD[n][nCP]:=_set_atom; parD[n][nCP]:=str_cnt; fi @@ -489,21 +443,18 @@ def read_mcf(expr n)(text TXT)= endgroup enddef; %------------------------------------------------------------------------------------------------- -vardef read_number(text TXT)= - save ','`,:,nA,nB,nC; - let : == from_until; - def ' == +0.5 enddef; - def '` == +0.5` enddef; - parts_int:=parts_int+1; +vardef read_number(text t)= + save :,','`; + let : == from_until; def ' == +0.5 enddef; def '` == +0.5` enddef; parts_int:=parts_int+1; nA:=0; - for list==TXT:: + for list==t:: if known list:: if numeric list:: if list==_nop:: message "unknown command in "AND decimal(parts_int); else:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=list; fi - elseif pair list:: - if xpart(list)==_from:: nB:=ypart(list); + ef pair list:: + if xpart(list)==_from:: nB:=ypart(list); ef xpart(list)==_until:: nC:=ypart(list); for i==nB upto nC:: nA:=nA+1; comD[parts_int][nA]:=_numeric; parD[parts_int][nA]:=i; @@ -514,8 +465,7 @@ vardef read_number(text TXT)= else:: message "unknown command in "AND decimal(parts_int); fi endfor - cntD[parts_int]:=nA; - parts_int %------- Retern value ------- + cntD[parts_int]:=nA; parts_int enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def fuse_ring(expr a,b) = @@ -526,270 +476,203 @@ enddef; %------------------------------------------------------------------------------------------------- def fuse_ring_bonds(expr a,b,c) = CP(_jp_bond,xpart(a)) CP(_rot_ang,180) CP(_com,_len_s) - if b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor - elseif b==5:: if c==2:: CP(_chg_len,1.25) CP(_mk_bond,80) - elseif c==3:: CP(_chg_len,1.1) CP(_mk_bond,78) CP(_mk_bond,72) fi - elseif b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi - CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi + if b==6:: CP(_chg_len,1) for i==1 upto c-1:: CP(_mk_bond,60) endfor + ef b==5:: if c==2:: CP(_chg_len,1.25) CP(_mk_bond,80) + ef c==3:: CP(_chg_len,1.1) CP(_mk_bond,78) CP(_mk_bond,72) fi + ef b==4:: CP(_chg_len,1.225) CP(_mk_bond,105) fi + CP(_com,_len_e) if ypart(a)<=0:: CP(_cyc_eB,ypart(a)-c+1) else:: CP(_cyc_eB,ypart(a)) fi enddef; %------------------------------------------------------------------------------------------------- def fuse_ring_size(expr a,b,c) = CP(_jp_bond,a) CP(_rot_ang,180) CP(_com,_len_s) CP(_chg_len,c DIV 10) - if b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9)) - elseif b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor - elseif b==7:: CP(_mk_bond,360 DIV 7-(c-8)) + if b==5:: CP(_mk_bond,72-((c-9) MUL 1.5)) CP(_mk_bond,72+(c-9)) CP(_mk_bond,72+(c-9)) + ef b==6:: CP(_mk_bond,60-(c-8)) for i==1 upto 3:: CP(_mk_bond,60+((c-8) DIV 2)) endfor + ef b==7:: CP(_mk_bond,360 DIV 7-(c-8)) for i==1 upto 4:: CP(_mk_bond,360 DIV 7+((c-8) DIV 2.5)) endfor - elseif b==8:: CP(_mk_bond,45-(c-8)) for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi + ef b==8:: CP(_mk_bond,45-(c-8)) for i==1 upto 5:: CP(_mk_bond,45+((c-8) DIV 3)) endfor fi CP(_com,_len_e) if a<=0:: CP(_cyc_eB,a-b+2) else:: CP(_cyc_eB,a) fi enddef; %================================================================================================= vardef change_bond(expr a,b) = - save nCP; - if known b:: - parts_int:=parts_int+1; - nCP:=0; - if numeric b:: - if (b>=si)and(b<=bd_):: - if a>=parts_int_start:: - for i==1 upto cntD[a]:: - if comD[a][i]==_numeric:: - if frac parD[a][i]==0:: - com_par(_set_adr,parD[a][i]) com_par(_set_line,b) - ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr) - ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl) - else:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b) - fi - fi - endfor - else:: com_par(_set_adr,a) com_par(_set_line,b) - fi - elseif (b>=?3)and(b<=?8[15]):: - if numeric a:: + if known b:: parts_int:=parts_int+1; nC:=0; + if numeric b:: + if (b>=si)and(b<=bd_):: if a>=parts_int_start:: for i==1 upto cntD[a]:: if comD[a][i]==_numeric:: - if b==Ph1:: fuse_ring(parD[a][i],6) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) - ef b==Ph2:: fuse_ring(parD[a][i],6) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - CP(_set_adr,-5) CP(_set_line,dl) - ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) - ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) - ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) - ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) - else:: fuse_ring(parD[a][i],b-?3+3) + if frac parD[a][i]==0:: com_par(_set_adr,parD[a][i]) com_par(_set_line,b) + ef b==dl:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dr) + ef b==dr:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,dl) + else:: com_par(_set_adr,floor parD[a][i]) com_par(_set_line,b) fi - else:: - if b==?6:: - if (frac comD[a][i]==0)and(frac parD[a][i]==0):: - fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3) - ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3) - else:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2) + fi + endfor + else:: com_par(_set_adr,a) com_par(_set_line,b) + fi + elseif (b>=?3)and(b<=?8[15]):: + if numeric a:: + if a>=parts_int_start:: + for i==1 upto cntD[a]:: + if comD[a][i]==_numeric:: + if b==Ph1:: fuse_ring(parD[a][i],6) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + ef b==Ph2:: fuse_ring(parD[a][i],6) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + CP(_set_adr,-5) CP(_set_line,dl) + ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) + ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) + ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) + ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) + else:: fuse_ring(parD[a][i],b-?3+3) fi - ef b==?5:: - if (frac comD[a][i]==0)and(frac parD[a][i]==0):: - fuse_ring_bonds((comD[a][i],parD[a][i]),5,3) - ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2) - ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2) + else:: + if b==?6:: + if (frac comD[a][i]==0)and(frac parD[a][i]==0):: + fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),6,3) + ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],parD[a][i]),6,3) + else:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),6,2) + fi + ef b==?5:: + if (frac comD[a][i]==0)and(frac parD[a][i]==0):: + fuse_ring_bonds((comD[a][i],parD[a][i]),5,3) + ef frac comD[a][i]==0:: fuse_ring_bonds((comD[a][i],floor parD[a][i]),5,2) + ef frac parD[a][i]==0:: fuse_ring_bonds((floor comD[a][i],floor parD[a][i]),5,2) + fi + ef b==?4:: fuse_ring_bonds((comD[a][i],parD[a][i]),4,2) + ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3) + ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2) + ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2) + ef b==Ph1:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + ef b==Ph2:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) fi - ef b==?4:: fuse_ring_bonds((comD[a][i],parD[a][i]),4,2) - ef b==?6[3]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,3) - ef b==?6[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,2) - ef b==?5[2]:: fuse_ring_bonds((comD[a][i],parD[a][i]),5,2) - ef b==Ph1:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - ef b==Ph2:: fuse_ring_bonds((comD[a][i],parD[a][i]),6,4) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) fi + endfor + else:: + if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl) + CP(_set_adr,-4) CP(_set_line,dl) + ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl) + CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl) + ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) + ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) + ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) + ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) + else:: fuse_ring(a,b-?3+3) fi - endfor - else:: - if b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl) - CP(_set_adr,-4) CP(_set_line,dl) - ef b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl) - CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl) - ef (b>=?5[11])and(b<=?5[15]):: fuse_ring_size(a,5,b-?5[11]+11) - ef (b>=?6[11])and(b<=?6[15]):: fuse_ring_size(a,6,b-?6[11]+11) - ef (b>=?7[11])and(b<=?7[15]):: fuse_ring_size(a,7,b-?7[11]+11) - ef (b>=?8[11])and(b<=?8[15]):: fuse_ring_size(a,8,b-?8[11]+11) - else:: fuse_ring(a,b-?3+3) fi - fi - ef pair a:: - if b==?6:: fuse_ring_bonds(a,6,4) - ef b==?5:: fuse_ring_bonds(a,5,3) - ef b==?4:: fuse_ring_bonds(a,4,2) - ef b==?6[3]:: fuse_ring_bonds(a,6,3) - ef b==?6[2]:: fuse_ring_bonds(a,6,2) - ef b==?5[2]:: fuse_ring_bonds(a,5,2) - ef b==Ph1:: fuse_ring_bonds(a,6,4) - CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) - ef b==Ph2:: fuse_ring_bonds(a,6,4) - CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + ef pair a:: + if b==?6:: fuse_ring_bonds(a,6,4) + ef b==?5:: fuse_ring_bonds(a,5,3) + ef b==?4:: fuse_ring_bonds(a,4,2) + ef b==?6[3]:: fuse_ring_bonds(a,6,3) + ef b==?6[2]:: fuse_ring_bonds(a,6,2) + ef b==?5[2]:: fuse_ring_bonds(a,5,2) + ef b==Ph1:: fuse_ring_bonds(a,6,4) + CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl) + ef b==Ph2:: fuse_ring_bonds(a,6,4) + CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl) + fi fi fi + elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC) fi - elseif color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorB,cntC) - fi - cntD[parts_int]:=nCP; - parts_int %------- Retern value ------- + cntD[parts_int]:=nC; parts_int fi enddef; %------------------------------------------------------------------------------------------------- vardef change_atom(expr a,b)= - save nCP; - if known b:: - parts_int:=parts_int+1; - nCP:=0; - if numeric b:: - if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b) - ef b==NH:: CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi - CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e) - ef b==N!:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e) - ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e) - ef b==??:: CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_si,_) - CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e) - ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_dm,O) - CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e) - ef b==SO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e) - ef b==n_:: CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e) - ef b==p_:: CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e) - fi - ef pair b:: - CP(_com,_group_s) - if a>=parts_emb_start:: - for i==1 upto cntD[a]:: - if comD[a][i]==_numeric:: - if xpart(b)==_group_wf:: - if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b)) - else:: CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b)) - fi - ef xpart(b)==_group_zf:: - if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b)) - else:: CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b)) - fi - else:: - CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b)) - fi - else:: - CP(comD[a][i],parD[a][i]) - fi - endfor - else:: CP(_set_adr,a) CP(xpart(b),ypart(b)) + if known b:: parts_int:=parts_int+1; nC:=0; + if numeric b:: + if (b GT parts_emb_start)and(b<=parts_atom_end):: CPe(a)(_chg_atom,b) + ef b==NH:: CPe(a)(_chg_atom,N) if NH<>xNH:: CP(_tmp_line,nl) fi + CP(_com,_group_s) CPx(a)(_group_si,H) CP(_com,_group_e) + ef b==N!:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,_) CP(_com,_group_e) + ef b==N!2:: CPe(a)(_chg_atom,N) CP(_com,_group_s) CPx(a)(_group_si,!) CP(_com,_group_e) + ef b==??:: CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_si,_) + CP(_tmp_rot,-35) CPx(a)(_group_si,_) CP(_com,_group_e) + ef b==SOO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CP(_tmp_rot,35) CPx(a)(_group_dm,O) + CP(_tmp_rot,-35) CPx(a)(_group_dm,O) CP(_com,_group_e) + ef b==SO:: CPe(a)(_chg_atom,S) CP(_com,_group_s) CPx(a)(_group_dm,O) CP(_com,_group_e) + ef b==n_:: CP(_com,_group_s) CP(_set_add,a_minus) CP(_chg_add,a) CP(_com,_group_e) + ef b==p_:: CP(_com,_group_s) CP(_set_add,a_plus) CP(_chg_add,a) CP(_com,_group_e) + fi + ef pair b:: + CP(_com,_group_s) + if a>=parts_emb_start:: + for i==1 upto cntD[a]:: + if comD[a][i]==_numeric:: + if xpart(b)==_group_wf:: + if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_wf,ypart(b)) + else:: CP(_set_adr,floor parD[a][i]) CP(_group_zf,ypart(b)) fi + ef xpart(b)==_group_zf:: + if frac parD[a][i]==0:: CP(_set_adr,parD[a][i]) CP(_group_zf,ypart(b)) + else:: CP(_set_adr,floor parD[a][i]) CP(_group_wf,ypart(b)) fi + else:: CP(_set_adr,parD[a][i]) CP(xpart(b),ypart(b)) fi + else:: CP(comD[a][i],parD[a][i]) fi + endfor + else:: CP(_set_adr,a) CP(xpart(b),ypart(b)) + fi + CP(_com,_group_e) + ef color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC) fi - CP(_com,_group_e) - ef color b:: color_list[incr cntC]:=b; CPe(a)(_set_colorA,cntC) - fi - cntD[parts_int]:=nCP; - parts_int %------- Retern value ------- + cntD[parts_int]:=nC; parts_int fi enddef; %------------------------------------------------------------------------------------------------- -def com_par(expr a,b)= nCP:=nCP+1; comD[parts_int][nCP]:=a; parD[parts_int][nCP]:=b; enddef; +def com_par(expr a,b)= nC:=nC+1; comD[parts_int][nC]:=a; parD[parts_int][nC]:=b; enddef; %------------------------------------------------------------------------------------------------- def com_par_ex(expr f)(expr c)(expr a,b)= if c>=parts_emb_start:: for i==1 upto cntD[c]:: if comD[c][i]==_numeric:: com_par(_set_adr,parD[c][i]) com_par(a,b) - ef f==1:: com_par(comD[c][i],parD[c][i]) fi + ef f==1:: com_par(comD[c][i],parD[c][i]) fi endfor else:: com_par(_set_adr,c) com_par(a,b) fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def puts(expr POS)(expr STR)= - begingroup - save temp_c,temp_p; - pair temp_p; - string temp_c; - temp_p:=POS; - nC:=defaultscale*defaultsize; - if defaultfont="draw": - for i=1 upto length(STR): - temp_c:=subc(i,STR); - draw_char(temp_c,temp_p,nC,ratio_thickness_char*nC,0); - temp_p:=temp_p+(nC*tbl_char_wd[ASCII(temp_c)],0); - endfor - else: - for i=1 upto length(STR): - temp_c:=subc(i,STR); - temp_picture:=temp_c infont defaultfont scaled defaultscale; - addto currentpicture also temp_picture shifted temp_p; - temp_p:=temp_p+(lrcorner temp_picture-llcorner temp_picture); - endfor - fi - endgroup -enddef; -%================================================================================================= def ext_setup= pickup pencircle scaled ext_defaultline; - dotlabeldiam:=3; - labeloffset:=3; - save em; - em=defaultscale*defaultsize; - defaultfont:=mpfont; + dotlabeldiam:=3; labeloffset:=3; em:=defaultscale*defaultsize; defaultfont:=mpfont; + let ** = scaled; let << = rotated; let => = shifted; __ = (1,0); An:=cntA; Bn:=cntB; + primarydef a /* b = point b of a enddef; enddef; %------------------------------------------------------------------------------------------------- -def add_to_molecule(text TXT)= +def add_to_molecule(text t)= begingroup save w,h,n,l,p,am,aw,A,B,plus,minus,lonepair,__,**,=>,<<,/*; numeric A[]dir,B[]up,A[]ang,B[]ang; pair __,p[],A[],B[]s,B[]e,B[]m,A[]up,A[]left,A[]right,A[]down,B[]up,B[]left,B[]right,B[]down; path B[]; - ext_setup; - def plus = circled_plus_add enddef; - def minus = circled_minus_add enddef; + def plus = circled_plus_add enddef; def minus = circled_minus_add enddef; def lonepair = lone_pair_add enddef; - let ** = scaled; - let << = rotated; - let => = shifted; - __ = (1,0); - primarydef a /* b = point b of a enddef; - %---------------------------------------------- - w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd; - p0:=(minX,minY); - An:=cntA; Bn:=cntB; - lonepairdiam:=0.3aw; - lonepairspace:=.7aw; - circlediam:=.6aw; - circlepen:=.2; + ext_setup; + w:=mol_wd; h:=mol_ht; l:=blen; aw:=atom_wd; p0:=(minX,minY); + lonepairdiam:=0.3aw; lonepairspace:=.7aw; circlediam:=.6aw; circlepen:=.2; for i=1 upto cntA: A[i]:=posA[i]; A[i]ang:=angX[i]; A[i]up:=dir(angX[i]); A[i]left:=dir(angX[i]+90); A[i]right:=dir(angX[i]-90); A[i]down:=dir(angX[i]+180); endfor for i=1 upto cntB: - B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e]; - B[i]:=B[i]s--B[i]e; + B[i]s:=posA[sB[i]]; B[i]e:=posA[eB[i]]; B[i]m:=0.5[B[i]s,B[i]e]; B[i]:=B[i]s--B[i]e; B[i]ang:=angB[i]; B[i]up:=dir(angB[i]); B[i]down:=dir(angB[i]+180); B[i]left:=dir(angB[i]+90); B[i]right:=dir(angB[i]-90); endfor - TXT addto mol_stru[cntM] also currentpicture; clearit; + t addto mol_pic[cntM] also currentpicture; clearit; endgroup; enddef; %------------------------------------------------------------------------------------------------- -def ext_to_font(text TXT)= +def ext_to_fig(text t)= begingroup save w,h,An,Bn,wd,ht,n,p,am,aw,__,**,<<,=>,/*; pair __,p[]; - let ** = scaled; - let << = rotated; - let => = shifted; - primarydef a /* b = point b of a enddef; - __ = (1,0); - %---------------------------------------------------------------------- ext_setup; - w:=xpart(fsize); - h:=ypart(fsize); - An:=cntA; - Bn:=cntB; - w0:=w-2margin_lr; - h0:=h-2margin_tb; - p0:=(margin_lr,margin_tb); - aw:=atom_wd; - n:=cntM; + w:=xpart(fsize); h:=ypart(fsize); + w0:=w-2margin_lr; h0:=h-2margin_tb; p0:=(margin_lr,margin_tb); aw:=atom_wd; n:=cntM; for i=1 upto n: p[i]:=posM[1][i]; w[i]:=wdM[i]; h[i]:=htM[i]; endfor - TXT addto mol_stru[0] also currentpicture; clearit; f_ext:=1; + t addto mol_pic[0] also currentpicture; clearit; f_ext:=1; endgroup; enddef; %------------------------------------------------------------------------------------------------- @@ -798,40 +681,39 @@ vardef circled_plus_add= image(draw fullcircle scaled nA wpcs nB; draw (-.5nA,0)--(.5nA,0) wpcs nB; draw (0,-.5nA)--(0,.5nA) wpcs nB;) enddef; -%-------------------------------------------------------------------- +%------------------------------------------------------------------------------------------------- vardef circled_minus_add= nA:=circlediam; nB:=circlepen; image(draw fullcircle scaled nA wpcs nB; draw (-.5nA,0)--(.5nA,0) wpcs nB;) enddef; -%-------------------------------------------------------------------- -vardef lone_pair_add expr ANG= - image(draw (0,0) wpcs lonepairdiam; draw ((0,lonepairspace) rotated ANG) wpcs lonepairdiam;) +%------------------------------------------------------------------------------------------------- +vardef lone_pair_add expr n= + image(draw (0,0) wpcs lonepairdiam; draw ((0,lonepairspace) rotated n) wpcs lonepairdiam;) enddef; %================================================================================================= -def MCat(expr FW,FH)(text TXT)= - save_mposition:=mposition; mposition:=(FW,FH); MC(TXT) mposition:=save_mposition; -enddef; +def MCat(expr w,h)(text t)= mpos:=mposition; mposition:=(w,h); MC(t) mposition:=mpos; enddef; %------------------------------------------------------------------------------------------------- -def MC(text TXT)= +def MC(text t)= begingroup - save f_bra,strAT,cnt_group,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT, - f_lenT,f_envT,temp_c,factor,m_wd,m_ht,temp_p,nH,nW; - string temp_c; - pair temp_p; + save f_bra,strAT,temp_lenE,temp_lenF,temp_cntB,f_term,f_at,f_lineT,f_rotT,angL,lenL,cpos,tpos, + f_lenT,f_envT,factor,m_wd,m_ht,raise_pos,slen,sdir,char_wd,char_ht,tcol,f_col,knownA, + markA,markB,saveA,saveB,bondL,lenT,lineT,angT,rotT,envT,envB,rate_cr,posBs,posBe, + f_char,group_par,group_cnt,group_com,colorA,colorB; + numeric f_char[],group_com[][],group_par[][],group_cnt[],colorA[],colorB[]; + pair cpos,tpos,raise_pos,posBs,posBe; + path frameA[]; %----------------------------------------------------------------------------------------------- if (sw_expand=1)or(scan_bit(sw_output,MOL2k))or(scan_bit(sw_output,MOL3k)): - expand_set; crR:=1; else: crR:=-ratio_chain_ring; + expand_set; rate_cr:=1; else: rate_cr:=-ratio_chain_ring; fi - cntA:=cntB:=cntC:=cnt_group:=0; strD[0]:="C"; str_cnt:=2000; + cntA:=cntB:=cntC:=group_num:=0; strD[0]:=cC; str_cnt:=2000; %----------------------------------------------------------------------------------------------- - fig_wd:=xpart(fsize); - fig_ht:=ypart(fsize); - margin_lr:=xpart(fmargin); - margin_tb:=ypart(fmargin); + fig_wd:=xpart(fsize); fig_ht:=ypart(fsize); + margin_lr:=xpart(fmargin); margin_tb:=ypart(fmargin); %=============================================================================================== - read_mcf(0)(TXT,(_com,_term)); + read_mcf(0)(t,(_com,_term)); proc_bond_atom(0)(1); - if (cnt_group>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi + if (group_num>0)and(not scan_bit(sw_abbreviate,Group)): read_group(0)(1); fi char_use_check; %-scaling--------------------------------------------------------------------------------------- if blength>1: blen:=blength; proc_size_setup; proc_skeleton(0); proc_scaling; @@ -845,11 +727,11 @@ def MC(text TXT)= proc_skeleton(0); proc_scaling; if (mol_ht/mol_wd)>(m_ht/m_wd): if ypart(msize)>1: factor:=ypart(msize)/mol_ht; - else: factor:=((fig_ht-2margin_tb)*ypart(msize))/mol_ht; + else: factor:=((fig_ht-2margin_tb)*ypart(msize))/mol_ht; fi else: if xpart(msize)>1: factor:=xpart(msize)/mol_wd; - else: factor:=((fig_wd-2margin_lr)*xpart(msize))/mol_wd; + else: factor:=((fig_wd-2margin_lr)*xpart(msize))/mol_wd; fi fi exitif (factor>=1-eps)and(factor<=1+eps); blen:=blen*factor; proc_size_setup; @@ -859,25 +741,22 @@ def MC(text TXT)= %----------------------------------------------------------------------------------------------- for i=1 upto cntA: if addA[i]<>0: - temp_c:=char(addA[i]); - if temp_c="+": chargeA[i]:=1; elseif temp_c="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi + tempc:=char(addA[i]); + if tempc="+": chargeA[i]:=1; ef tempc="-": chargeA[i]:=-1; else: chargeA[i]:=0; fi else: chargeA[i]:=0; fi endfor %=============================================================================================== if scan_bit(sw_output,Fig): %-draw atom----------------------------------------------------------------------------------- - if sw_numbering=0: for i=1 upto cntA: draw_atom(i); endfor fi + if sw_numbering=0: for i=1 upto cntA: if numS[i]<>0: draw_atom(i); fi endfor fi %-draw add to atom---------------------------------------------------------------------------- if (not scan_bit(sw_numbering,Atom))and(not scan_bit(sw_numbering,Bond)): for i=1 upto cntA: if addA[i]<>0: nA:=angX[i]+add_rot[i]; nC:=nA mod 90; - if numS[i]=0: nB:=.5atom_wd; - else: nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i]; - fi - temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA); - draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0); + if numS[i]=0: nB:=.5atom_wd; else: nB:=atom_wd; fi + draw_char(char(addA[i]),sfrt(posA[i],nB,nA)); fi endfor fi @@ -888,8 +767,7 @@ def MC(text TXT)= if scan_bit(sw_numbering,Atom): for i=1 upto cntA: if (i>=numbering_start)and(i<=numbering_end): - defaultscale:=.18blen/defaultsize; - nH:=1.2defaultsize*defaultscale; + defaultscale:=.18blen/defaultsize; nH:=1.2defaultsize*defaultscale; if i<=9: nW:=nH; ef i<=99: nW:=1.3nH; else: nW:=1.9nH; fi erase fill unitsquare xscaled nW yscaled nH shifted (posA[i]-(nW/2,nH/2)); draw unitsquare xscaled nW yscaled nH shifted (posA[i]-(nW/2,nH/2)) wpcs 0.1; @@ -901,35 +779,25 @@ def MC(text TXT)= if scan_bit(sw_numbering,Bond): for i=1 upto cntB: if (i>=numbering_start)and(i<=numbering_end): - defaultscale:=.18blen/defaultsize; - nH:=1.2defaultsize*defaultscale; + defaultscale:=.18blen/defaultsize; nH:=1.2defaultsize*defaultscale; if i<=9: nW:=nH; ef i<=99: nW:=1.3nH; else: nW:=1.9nH; fi - nH:=defaultsize*defaultscale; temp_p:=.5[posA[sB[i]],posA[eB[i]]]; - erase fill unitsquare xscaled nW yscaled nH shifted (temp_p-(nW/2,nH/2)); - draw unitsquare xscaled nW yscaled nH shifted (temp_p-(nW/2,nH/2)) wpcs 0.1; - label(decimal(i),temp_p); + nH:=defaultsize*defaultscale; tpos:=.5[posA[sB[i]],posA[eB[i]]]; + erase fill unitsquare xscaled nW yscaled nH shifted (tpos-(nW/2,nH/2)); + draw unitsquare xscaled nW yscaled nH shifted (tpos-(nW/2,nH/2)) wpcs 0.1; + label(decimal(i),tpos); fi endfor fi %--------------------------------------------------------------------------------------------- - if xpart(mposition)>1: sftX:=xpart(mposition)-minX; - else: sftX:=margin_lr-minX+(fig_wd-mol_wd-2margin_lr)*xpart(mposition); - fi - if ypart(mposition)>1: sftY:=ypart(mposition)-minY; - else: sftY:=margin_tb-minY+(fig_ht-mol_ht-2margin_tb)*ypart(mposition); - fi - cntM:=cntM+1; - posM[0][cntM]:=(sftX,sftY); - posM[1][cntM]:=(minX+sftX,minY+sftY); - posM[2][cntM]:=(maxX+sftX,maxY+sftY); - wdM[cntM]:=mol_wd; - htM[cntM]:=mol_ht; - mol_stru[cntM]:=currentpicture; + if xpart(mposition)>1: nX:=xpart(mposition)-minX; + else: nX:=margin_lr-minX+(fig_wd-mol_wd-2margin_lr)*xpart(mposition); fi + if ypart(mposition)>1: nY:=ypart(mposition)-minY; + else: nY:=margin_tb-minY+(fig_ht-mol_ht-2margin_tb)*ypart(mposition); fi + cntM:=cntM+1; posM[0][cntM]:=(nX,nY); + posM[1][cntM]:=(minX+nX,minY+nY); posM[2][cntM]:=(maxX+nX,maxY+nY); + wdM[cntM]:=mol_wd; htM[cntM]:=mol_ht; + mol_pic[cntM]:=currentpicture; clearit; - if cntC>=1: - for i=1 upto cntA: if colorA[i]<>0: colorA[i]:=0; fi endfor - for i=1 upto cntB: if colorB[i]<>0: colorB[i]:=0; fi endfor - fi fi if sw_output>=Calc: proc_calc(0); fi endgroup; @@ -937,51 +805,48 @@ enddef; %------------------------------------------------------------------------------------------------- def add_group= if f_at=1: nE:=getA(adrT); check_adrA(nE); else: nE:=cntA+1; fi - cnt_group:=cnt_group+1; cnt_group[cnt_group]:=0; - store_group(_jp_absA,nE) - store_group(_com,_len_s) + group_num:=group_num+1; group_cnt[group_num]:=0; + store_group(_jp_absA,nE) 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<>crR: store_group(_chg_len,lenT) - ef bondL<>crR: if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi + if lenT<>rate_cr: store_group(_chg_len,lenT) + ef bondL<>rate_cr: + if bondL>=0: store_group(_chg_len,-bondL) else: store_group(_chg_len,bondL) fi fi if envT<>hz: store_group(_chg_env,envT) fi if lineT=nl: store_group(_chg_len,_size_atom) store_group(_adj_ang,0) fi if lineT<>nb: store_group(_mk_bond,0) fi - for i=1 upto cntD[par]: store_group(comD[par][i],parD[par][i]) endfor - store_group(_com,_len_e) - store_group(_chg_env,hz) - store_group(_com,_term) + for i=1 upto cntD[nP]: store_group(comD[nP][i],parD[nP][i]) endfor + store_group(_com,_len_e) store_group(_chg_env,hz) store_group(_com,_term) if f_lineT=0: lineT:=si; fi - if f_lenT=0: lenT:=crR; fi + if f_lenT=0: lenT:=rate_cr; fi if f_rotT=0: rotT:=0; fi if f_envT=0: envT:=hz; fi enddef; %------------------------------------------------------------------------------------------------- def store_group(expr a,b)= - cnt_group[cnt_group]:=cnt_group[cnt_group]+1; - com_group[cnt_group][cnt_group[cnt_group]]:=a; par_group[cnt_group][cnt_group[cnt_group]]:=b; + group_cnt[group_num]:=group_cnt[group_num]+1; + group_com[group_num][group_cnt[group_num]]:=a; group_par[group_num][group_cnt[group_num]]:=b; enddef; %================================================================================================= def read_group(expr a)(expr n)= - save_cnt_group:=cnt_group; - save_cntD:=cntD[a]; - for i=n upto cnt_group: - for j=1 upto cnt_group[i]: - cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=com_group[i][j]; parD[a][cntD[a]]:=par_group[i][j]; + save_group_cnt:=group_num; save_cntD:=cntD[a]; + for i=n upto group_num: + for j=1 upto group_cnt[i]: + cntD[a]:=cntD[a]+1; comD[a][cntD[a]]:=group_com[i][j]; parD[a][cntD[a]]:=group_par[i][j]; endfor endfor proc_bond_atom(a)(save_cntD+1); - if cnt_group>save_cnt_group: read_group(a)(save_cnt_group+1); fi + if group_num>save_group_cnt: read_group(a)(save_group_cnt+1); fi enddef; %================================================================================================= -def draw_frame(expr PS,LX,LY,PN)= - draw ((0,0)--(LX,0)--(LX,LY)--(0,LY)--cycle) shifted PS withpen pensquare scaled PN; +def draw_frame(expr p,x,y,n)= + draw ((0,0)--(x,0)--(x,y)--(0,y)--cycle) shifted p withpen pensquare scaled n; enddef; %------------------------------------------------------------------------------------------------- -def draw_corner(expr PS,LX,LY,PN)= - draw( 0, 0) shifted PS wpcs PN; draw(LX, 0) shifted PS wpcs PN; - draw(LX,LY) shifted PS wpcs PN; draw( 0,LY) shifted PS wpcs PN; +def draw_corner(expr p,x,y,n)= + draw(0,0) shifted p wpcs n; draw(x,0) shifted p wpcs n; + draw(x,y) shifted p wpcs n; draw(0,y) shifted p wpcs n; enddef; %------------------------------------------------------------------------------------------------- def proc_size_setup= @@ -993,27 +858,25 @@ def proc_size_setup= enddef; %------------------------------------------------------------------------------------------------- def proc_scaling= - minX:=minY:=4095; - maxX:=maxY:=-4095; + minX:=minY:=4095; maxX:=maxY:=-4095; for i=1 upto cntA: - xpos:=xpart(posA[i]); - ypos:=ypart(posA[i]); + nX:=xpart(posA[i]); nY:=ypart(posA[i]); if numS[i]<>0: nU:=nD:=nP:=nL:=nR:=0; for j=1 upto length(strD[numS[i]]): - temp_c:=subc(j,strD[numS[i]]); - if (temp_c="^"): nU:=.5atom_wd; - elseif (temp_c="_"): nD:=.5atom_wd; - elseif (temp_c<>"{")and(temp_c<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(temp_c)]; + tempc:=subc(j,strD[numS[i]]); + if tempc="^": nU:=.5atom_wd; + ef tempc="_": nD:=.5atom_wd; + ef (tempc<>"{")and(tempc<>"}"): nP:=nP+atom_wd*tbl_char_wd[ASCII(tempc)]; fi endfor if (angX[i]<=90)or(angX[i]>=270): nR:=nP; else: nL:=nP; fi - if (xpos-nL+.5atom_wd)maxX: maxX:=xpos+nR-.5atom_wd; fi - if (ypos-nD-.5atom_wd)maxY: maxY:=ypos+nU+.5atom_wd; fi - else: if xposmaxX: maxX:=xpos; fi - if yposmaxY: maxY:=ypos; fi + if (nX-nL+.5atom_wd)maxX: maxX:=nX+nR-.5atom_wd; fi + if (nY-nD-.5atom_wd)maxY: maxY:=nY+nU+.5atom_wd; fi + else: if nXmaxX: maxX:=nX; fi + if nYmaxY: maxY:=nY; fi fi endfor mol_wd:=maxX-minX; mol_ht:=maxY-minY; @@ -1033,49 +896,50 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def proc_bond_atom(expr a)(expr n)= f_bra:=f_term:=rotT:=f_lineT:=f_rotT:=f_lenT:=f_envT:=envT:=envB:=strAT:=f_at:=0; - bondL:=crR; lenT:=crR; sB[0]:=0; eB[0]:=1; lineT:=si; + bondL:=rate_cr; lenT:=rate_cr; sB[0]:=0; eB[0]:=1; lineT:=si; addAT:=markA:=markB:=saveA:=saveB:=0; %----------------------------------------------------------------------------------------------- - for i=n upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; - if com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom(0); - ef com=_set_adr: adrT:=par; - ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; - ef par=_rest: markA:=saveA; markB:=saveB; - ef par=_moff: markA:=markB:=0; - ef par=_term: termA; - ef par=_len_s: temp_lenE:=bondL; ef par=_len_e: bondL:=temp_lenE; - ef par=_len_ss: temp_lenF:=bondL; ef par=_len_ee: bondL:=temp_lenF; - ef par=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi - if lenT<>crR: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi - ef par=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; - lineT:=si; lenT:=crR; - fi - ef com=_set_atom: strAT:=par; - ef com=_group_si: add_group; - ef com=_group_dm: lineT:=dm; add_group; - ef com=_group_wf: lineT:=wf; add_group; - ef com=_group_zf: lineT:=zf; add_group; - ef com=_jp_bond: termA; nA:=getB(par); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1; - ef com=_jp_atom: termA; nA:=getA(par); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1; - ef com=_jp_absA: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB; - ef com=_chg_atom: numS[getA(adrT)]:=parD[par][1]; - ef com=_chg_len: if par=_ring_len: bondL:=ringL; else: bondL:=par; fi - ef com=_get_len: if par=_tmp_len: if bondL=crR: bondL:=lenT; fi - ef par=_ring_len: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi - else: ringL:=lenB[getB(par)]; fi - ef com=_tmp_len: lenT:=par; - ef com=_set_line: lineB[getB(adrT)]:=par; - ef com=_tmp_line: lineT:=par; - ef com=_tmp_rot: rotT:=par; - ef com=_cyc: check_adrA(getA(par)); add_atom(getA(par)); - ef com=_cyc_eB: add_atom(eB[getB(par)]); - ef com=_cyc_sB: add_atom(sB[getB(par)]); - ef com=_chg_env: envB:=par; - ef com=_tmp_env: envT:=par; - ef com=_set_colorA: colorA[getA(adrT)]:=par; - ef com=_set_colorB: colorB[getB(adrT)]:=par; - ef com=_set_add: addAT:=par; - ef com=_chg_add: addA[getA(par)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(par)]:=rotT; fi + for i=n upto cntD[a]: nC:=comD[a][i]; nP:=parD[a][i]; + if nC=_mk_bond: if (nP=0)and(rotT<>0): rotT:=0; fi add_atom(0); + ef nC=_set_adr: adrT:=nP; + ef nC=_com: if nP=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; + ef nP=_rest: markA:=saveA; markB:=saveB; + ef nP=_moff: markA:=markB:=0; + ef nP=_term: termA; + ef nP=_len_s: temp_lenE:=bondL; ef nP=_len_e: bondL:=temp_lenE; + ef nP=_len_ss: temp_lenF:=bondL; ef nP=_len_ee: bondL:=temp_lenF; + ef nP=_group_s: f_at:=1; if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi + if lenT<>rate_cr: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi + ef nP=_group_e: f_at:=0; f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; + lineT:=si; lenT:=rate_cr; + fi + ef nC=_set_atom: strAT:=nP; + ef nC=_group_si: add_group; + ef nC=_group_dm: lineT:=dm; add_group; + ef nC=_group_wf: lineT:=wf; add_group; + ef nC=_group_zf: lineT:=zf; add_group; + ef nC=_jp_bond: termA; nA:=getB(nP); check_adrB(nA); sB[cntB+1]:=sB[nA]; f_bra:=1; + ef nC=_jp_atom: termA; nA:=getA(nP); check_adrA(nA); sB[cntB+1]:=nA; f_bra:=1; + ef nC=_jp_absA: sB[cntB+1]:=nP; f_bra:=1; temp_cntB:=cntB; + ef nC=_chg_atom: numS[getA(adrT)]:=parD[nP][1]; + ef nC=_chg_len: if nP=_ring_len: bondL:=ringL; else: bondL:=nP; fi + ef nC=_get_len: if nP=_tmp_len: if bondL=rate_cr: bondL:=lenT; fi + ef nP=_ring_len: + if lenT<>rate_cr: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi + else: ringL:=lenB[getB(nP)]; fi + ef nC=_tmp_len: lenT:=nP; + ef nC=_set_line: lineB[getB(adrT)]:=nP; + ef nC=_tmp_line: lineT:=nP; + ef nC=_tmp_rot: rotT:=nP; + ef nC=_cyc: check_adrA(getA(nP)); add_atom(getA(nP)); + ef nC=_cyc_eB: add_atom(eB[getB(nP)]); + ef nC=_cyc_sB: add_atom(sB[getB(nP)]); + ef nC=_chg_env: envB:=nP; + ef nC=_tmp_env: envT:=nP; + ef nC=_set_colorA: colorA[getA(adrT)]:=nP; + ef nC=_set_colorB: colorB[getB(adrT)]:=nP; + ef nC=_set_add: addAT:=nP; + ef nC=_chg_add: addA[getA(nP)]:=addAT; addAT:=0; if rotT<>0: add_rot[getA(nP)]:=rotT; fi else: fi endfor @@ -1083,7 +947,7 @@ enddef; %------------------------------------------------------------------------------------------------- def add_atom(expr n)= cntB:=cntB+1; lineB[cntB]:=lineT; lineT:=si; - if lenT=crR: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=crR; fi + if lenT=rate_cr: lenB[cntB]:=bondL; else: lenB[cntB]:=lenT; lenT:=rate_cr; fi if f_bra=0: cntA:=cntA+1; sB[cntB]:=cntA; numS[cntA]:=strAT; addA[cntA]:=addAT; addAT:=strAT:=add_rot[cntA]:=0; if rotT<>0: add_rot[cntA]:=rotT; rotT:=0; fi @@ -1096,39 +960,39 @@ def check_adrA(expr n)= enddef; def check_adrB(expr n)= if (n>cntB)or(n<=0): errmessage("cntB=[ "&decimal(n)&" ]"); fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def proc_skeleton(expr a)= +def proc_skeleton(expr n)= markA:=markB:=cntA:=cntB:=f_bra:=rotT:=f_term:=0; envT:=envB:=f_lineT:=f_rotT:=f_lenT:=f_envT:=0; lineT:=si; angT:=mangle; angA[0]:=angB[0]:=angX[0]:=0; posA[0]:=posBs:=posBe:=(0,0); %----------------------------------------------------------------------------------------------- - for i=1 upto cntD[a]: com:=comD[a][i]; par:=parD[a][i]; - if com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par,1); - ef com=_com: if par=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; - ef par=_rest: markA:=saveA; markB:=saveB; - ef par=_moff: markA:=markB:=0; ef par=_term: termB; - ef par=_group_e: lineT:=si; lenT:=crR; rotT:=envT:=0; - fi - ef com=_jp_bond: termB; nA:=getB(par); posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0; - ef com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0; - ef com=_jp_absA: adrT:=par; posBs:=posA[adrT]; - angT:=angX[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB; - ef com=_adj_ang: angT:=adjust_ang(angT); - ef com=_rot_ang: if par>-3700: angT:=(angT+par) mod 360; else: angT:=(par+4095) mod 360; fi - ef com=_tmp_rot: rotT:=par; - ef com=_group_si: rotT:=0; - ef com=_group_wf: rotT:=0; - ef com=_chg_env: envB:=par; - ef com=_tmp_env: envT:=par; - ef com=_cyc: add_bond(angle(posA[getA(par)]-posBs)-angT,0); - ef com=_cyc_sB: add_bond(angle(posA[sB[getB(par)]]-posBs)-angT,0); - ef com=_cyc_eB: add_bond(angle(posA[eB[getB(par)]]-posBs)-angT,0); + for i=1 upto cntD[n]: nC:=comD[n][i]; nP:=parD[n][i]; + if nC=_mk_bond: if (nP=0)and(rotT<>0):nP:=rotT; rotT:=0; fi add_bond(nP,1); + ef nC=_com: if nP=_mark: saveA:=markA; saveB:=markB; markA:=cntA; markB:=cntB; + ef nP=_rest: markA:=saveA; markB:=saveB; + ef nP=_moff: markA:=markB:=0; ef nP=_term: termB; + ef nP=_group_e: lineT:=si; lenT:=rate_cr; rotT:=envT:=0; + fi + ef nC=_jp_bond: termB; nA:=getB(nP); posBs:=posA[sB[nA]]; angT:=angB[nA]; f_bra:=1; rotT:=0; + ef nC=_jp_atom: termB; adrT:=getA(nP); posBs:=posA[adrT]; angT:=angX[adrT]; f_bra:=1; rotT:=0; + ef nC=_jp_absA: adrT:=nP; posBs:=posA[adrT]; angT:=angX[adrT]; + f_bra:=1; rotT:=0; temp_cntB:=cntB; + ef nC=_adj_ang: angT:=adjust_ang(angT); + ef nC=_rot_ang: if nP>-3700: angT:=(angT+nP) mod 360; else: angT:=(nP+4095) mod 360; fi + ef nC=_tmp_rot: rotT:=nP; + ef nC=_group_si: rotT:=0; + ef nC=_group_wf: rotT:=0; + ef nC=_chg_env: envB:=nP; + ef nC=_tmp_env: envT:=nP; + ef nC=_cyc: add_bond(angle(posA[getA(nP)]-posBs)-angT,0); + ef nC=_cyc_sB: add_bond(angle(posA[sB[getB(nP)]]-posBs)-angT,0); + ef nC=_cyc_eB: add_bond(angle(posA[eB[getB(nP)]]-posBs)-angT,0); else: fi endfor enddef; %------------------------------------------------------------------------------------------------- -def add_bond(expr ROT,FLG)= - if ROT=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=ROT; fi +def add_bond(expr n,f)= + if n=_arrange_ang: nA:=arrange_ang(angT mod 360); else: nA:=n; fi if f_bra=0: adrT:=cntA:=cntA+1; posA[cntA]:=posBs; angA[cntA]:=angT; angX[cntA]:=(angT+nA/2+iif(nA>=0,-90,90)) mod 360; @@ -1136,11 +1000,10 @@ def add_bond(expr ROT,FLG)= fi cntB:=cntB+1; if nA>-3700: angB[cntB]:=angT:=(angT+nA) mod 360; else: angB[cntB]:=angT:=nA+4095; fi - if FLG=1: + if f=1: if lenB[cntB]=_size_atom: posBe:=sfrt(posBs,atom_wd,angT); else: - nA:=lenB[cntB]; - if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi + nA:=lenB[cntB]; if nA<0: nB:=glu_atom(adrT)+glu_atom(cntA+1); nA:=abs(nA); else: nB:=0; fi posBe:=sfrt(posBs,nA*blen+nB,angT); fi posA[cntA+1]:=posBe; f_term:=0; @@ -1168,7 +1031,7 @@ vardef getB(expr n)= if n>=0: markB+n ef n>=-999: cntB+n+1 else: n+4095 fi endde def termA= if f_term=0: if f_bra=0: - cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT; + cntA:=cntA+1; numS[cntA]:=strAT; addA[cntA]:=addAT; add_rot[cntA]:=rotT; addAT:=strAT:=rotT:=0; else: f_bra:=0; fi @@ -1180,114 +1043,99 @@ def termB= if f_term=0: if f_bra=0:cntA:=cntA+1; angX[cntA]:=angT mod 360; else:f_bra:=0; fi f_term:=1; fi enddef; %------------------------------------------------------------------------------------------------- -vardef glu_atom(expr NUM)= - if numS[NUM]<>0: nE:=angT mod 90; nF:=0.5atom_wd;(iif(nE<45,sind(nE),cosd(nE))*nF)++nF else: 0 fi +vardef glu_atom(expr n)= + if numS[n]<>0: nE:=angT mod 90; nF:=0.5atom_wd; (iif(nE<45,sind nE,cosd nE)*nF)++nF else: 0 fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_atom(expr NUM)= - begingroup - if numS[NUM]<>0: - save slen,f_wd,f_ht,r_ff,pos_a,pos_c,temp_c,temp_s,dir_str; - string temp_c,temp_s; - pair pos_a,pos_c; - %------------------------------------------------------- - temp_s:=strD[numS[NUM]]; slen:=length(temp_s); nA:=angX[NUM]; - dxA[NUM]:=dir_str:=iif((nA<=90)or(nA>=270),1,-1); - wdA[NUM]:=nC:=0; pos_c:=(0,0); - pos_a:=posA[NUM]-(.5atom_wd*dir_str,.5atom_wd); - if atomfont<>"draw": - atom_picture:="C" infont atomfont; - r_ff:=atom_wd/(ypart(ulcorner atom_picture)-ypart(llcorner atom_picture)); - fi - for i=1 upto slen: - if nC=0: - temp_c:=subc(i,temp_s); - if (dir_str=-1)and(temp_c="{"): - nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temp_s)="}"; endfor - fi - else: nC:=nC-1; temp_c:=subc(nD+nC,temp_s); +def draw_atom(expr n)= + if atomfont<>"draw": defaultfont:=atomfont; defaultsize:=atom_wd; fi + temps:=strD[numS[n]]; slen:=length(temps); nC:=nS:=0; raise_pos:=(0,0); tpos:=posA[n]; + if (angX[n]<=90)or(angX[n]>=270): sdir:=1; else: sdir:=-1; fi + for i=1 upto slen: + if nC=0: + tempc:=subc(i,temps); + if (sdir=-1)and(tempc="{"): + nD:=i; nC:=0; for j=nD upto slen: nC:=nC+1; exitif subc(j,temps)="}"; endfor fi - if temp_c="_": pos_c:=iif(pos_c=(0,0),(0,-.5atom_wd),(0,0)); - elseif temp_c="^": pos_c:=iif(pos_c=(0,0),(0, .5atom_wd),(0,0)); - elseif (temp_c<>"{")and(temp_c<>"}"): - if atomfont="draw": - f_wd:=atom_wd*tbl_char_wd[ASCII(temp_c)]; - if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi - draw_char(temp_c,pos_a+pos_c,atom_wd,bond_pen_wd*ratio_char_bond,NUM); - if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,atom_wd,thickness_frame); fi - if dir_str=1: pos_a:=pos_a+(f_wd,0); fi - else: - atom_picture:=temp_c infont atomfont; - f_wd:=(xpart(lrcorner atom_picture)-xpart(llcorner atom_picture))*r_ff; - f_ht:=(ypart(urcorner atom_picture)-ypart(llcorner atom_picture))*r_ff; - if dir_str=-1: pos_a:=pos_a-(f_wd,0); fi - addto currentpicture also atom_picture scaled (r_ff*(1-2ratio_atomgap_atom)) - shifted (pos_a+pos_c+(f_wd*ratio_atomgap_atom,f_ht*ratio_atomgap_atom)) - Cp(colorA[NUM]); - if scan_bit(sw_frame,Atom): draw_frame(pos_a+pos_c,f_wd,f_ht,thickness_frame); fi - if dir_str=1: pos_a:=pos_a+(f_wd,0); fi - fi - wdA[NUM]:=wdA[NUM]+f_wd; + else: nC:=nC-1; tempc:=subc(nD+nC,temps); + fi + if tempc="_": raise_pos:=iif(raise_pos=(0,0),(0,-.5atom_wd),(0,0)); + ef tempc="^": raise_pos:=iif(raise_pos=(0,0),(0, .5atom_wd),(0,0)); + ef (tempc<>"{")and(tempc<>"}"): + nS:=nS+1; + char_wd:=atom_wd*tbl_char_wd[ASCII(tempc)]; char_ht:=atom_wd; + if nS=1: if (sdir=-1)and(char_wd0: drawoptions(withcolor color_list[tcol]); f_col:=1; fi fi + if atomfont="draw": draw_char(tempc,tpos+raise_pos); else: label(tempc,tpos+raise_pos); fi + if f_col=1: drawoptions(); fi + tpos:=tpos+(.5char_wd*sdir,0); + fi + endfor + nA:=0.56atom_wd; nB:=0.06atom_wd; + if sdir=1: frameA[n]:=posA[n]-(nA,nA)--tpos+(nB,-nA)--tpos+(nB,nA)--posA[n]+(-nA,nA)--cycle; + else: frameA[n]:=tpos-(nB,nA)--posA[n]+(nA,-nA)--posA[n]+(nA,nA)--tpos+(-nB,nA)--cycle; fi - endgroup + if scan_bit(sw_frame,Atom): draw frameA[n] wpcs thickness_frame; fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_bond(expr NUM)= +def draw_bond(expr n)= begingroup - save ww,aw,ap,am,ang,col,len,Ls,Le,pA,zA,zL; + save ww,aw,ap,am,Ls,Le,pA,zA,zL; pair pA,Ls,Le; path zA,zL; %----------------------------------------------------------------------------------------------- - nL:=lineB[NUM]; ang:=angB[NUM]; nS:=sB[NUM]; nE:=eB[NUM]; - col:=colorB[NUM]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=ang+90; am:=ang-90; aw:=atom_wd; + nL:=lineB[n]; angL:=angB[n]; nS:=sB[n]; nE:=eB[n]; f_col:=0; + tcol:=colorB[n]; zL:=posA[nS]--posA[nE]; ww:=wedge_wd; ap:=angL+90; am:=angL-90; aw:=atom_wd; %----------------------------------------------------------------------------------------------- if (numS[nS]=0)and(numS[nE]=0)or(sw_numbering>=1): - Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9); - ef numS[nS]=0: Le:=zL intersectionpoint frame_str(nE); Ls:=posA[nS]; pA:=(.15,1); - ef numS[nE]=0: Ls:=zL intersectionpoint frame_str(nS); Le:=posA[nE]; pA:=(0,.85); - else: Ls:=zL intersectionpoint frame_str(nS); Le:=zL intersectionpoint frame_str(nE); pA:=(0,1); + Ls:=posA[nS]; Le:=posA[nE]; pA:=(.1,.9); + ef numS[nS]=0: Ls:=posA[nS]; Le:=zL ISP frameA[nE]; pA:=(.15,1); + ef numS[nE]=0: Ls:=zL ISP frameA[nS]; Le:=posA[nE]; pA:=(0,.85); + else: Ls:=zL ISP frameA[nS]; Le:=zL ISP frameA[nE]; pA:=(0,1); fi - zA:=Ls--Le; len:=length(Le-Ls); + zA:=Ls--Le; lenL:=length(Le-Ls); %----------------------------------------------------------------------------------------------- + if known tcol: if tcol<>0: drawoptions(withcolor color_list[tcol]); f_col:=1;fi fi pickup pencircle scaled bond_pen_wd; - if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA Cp(col); - ef nL=dl: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); - ef nL=dr: draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); - ef nL=dm: draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); - ef nL=db: nA:=iif(((ang-angX[nS]) mod 360)<=180,ap,am); - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,nA) Cp(col); - ef nL=tm: draw zA Cp(col);draw sfrt(zA,bondgap,ap) Cp(col); draw sfrt(zA,bondgap,am) Cp(col); - ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); - ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); - ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap Cp(col); + if (nL=si)or(scan_bit(sw_abbreviate,Bond)): draw zA; + ef nL=dl: draw zA; draw sfrt(subpath pA of zA,bondgap,ap); + ef nL=dr: draw zA; draw sfrt(subpath pA of zA,bondgap,am); + ef nL=dm: draw sfrt(zA,bondgap/1.75,ap); draw sfrt(zA,bondgap/1.75,am); + ef nL=db: nA:=iif(((angL-angX[nS]) mod 360)<=180,ap,am); + draw zA; draw sfrt(subpath pA of zA,bondgap,nA); + ef nL=tm: draw zA; draw sfrt(zA,bondgap,ap); draw sfrt(zA,bondgap,am); + ef nL=wf: fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle; + ef nL=wb: fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle; + ef nL=bd: draw zA withpen penrazor rotated ap scaled bondgap; ef nL=bz: bz_put(sfrt(Ls,ww,ap),sfrt(Le,ww,ap),sfrt(Ls,ww,am),sfrt(Le,ww,am)); ef nL=zf: wz_put(Ls,sfrt(Le,ww,ap),sfrt(Le,ww,am)); ef nL=zb: wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); - ef nL=dt: for i=0 step .75hash_gap/len until 1: drawdot i[Ls,Le] Cp(col); endfor - ef nL=wv: nA:=3bond_pen_wd; nB:=len/nA; + ef nL=dt: for i=0 step .75hash_gap/lenL until 1: drawdot i[Ls,Le]; endfor + ef nL=wv: nA:=3bond_pen_wd; nB:=lenL/nA; draw Le for i=1 upto nB: ..controls(((i-.5)/nB)[sfrt(Le,nA,iif(odd(i),ap,am)),sfrt(Ls,nA,iif(odd(i),ap,am))]) - ..(i/nB)[Le,Ls] endfor ..Ls Cp(col); - ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww Cp(col); - ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww Cp(col); - ef nL=bd_r: draw zA wpcs .65bondgap Cp(col); - ef nL=vf: draw zA Cp(col);draw sfrt(Le,bondgap,ang-150)--Le--sfrt(Le,bondgap,ang+150) Cp(col); - ef nL=vb: draw zA Cp(col);draw sfrt(Ls,bondgap,ang-30)--Ls--sfrt(Ls,bondgap,ang+30) Cp(col); - ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA Cp(col); + ..(i/nB)[Le,Ls] endfor ..Ls; + ef nL=wf_r: filldraw Ls--sfrt(Le,.35ww,am)--sfrt(Le,.35ww,ap)--cycle wpcs .05ww; + ef nL=wb_r: filldraw sfrt(Ls,.35ww,am)--Le--sfrt(Ls,.35ww,ap)--cycle wpcs .05ww; + ef nL=bd_r: draw zA wpcs .65bondgap; + ef nL=vf: draw zA;draw sfrt(Le,bondgap,angL-150)--Le--sfrt(Le,bondgap,angL+150); + ef nL=vb: draw zA;draw sfrt(Ls,bondgap,angL-30)--Ls--sfrt(Ls,bondgap,angL+30); + ef nL=si_: erase draw subpath (.15,.85) of zA wpcs 0.8bondgap; draw zA; ef nL=dl_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,ap) wpcs 1.8bondgap; - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,ap) Cp(col); + draw zA; draw sfrt(subpath pA of zA,bondgap,ap); ef nL=dr_: erase draw subpath (.15,.85) of sfrt(subpath pA of zA,.5bondgap,am) wpcs 1.8bondgap; - draw zA Cp(col); draw sfrt(subpath pA of zA,bondgap,am) Cp(col); + draw zA; draw sfrt(subpath pA of zA,bondgap,am); ef nL=dm_: erase draw subpath(0.15,0.85) of zA wpcs 1.8 bondgap; - draw sfrt(zA,bondgap/1.75,ap) Cp(col); draw sfrt(zA,bondgap/1.75,am) Cp(col); + draw sfrt(zA,bondgap/1.75,ap); draw sfrt(zA,bondgap/1.75,am); ef nL=wf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; - fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle Cp(col); + fill Ls--sfrt(Le,ww,am)--sfrt(Le,ww,ap)--cycle; ef nL=wb_: erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,am)--Le) wpcs 0.8bondgap; erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; - fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle Cp(col); + fill sfrt(Ls,ww,am)--Le--sfrt(Ls,ww,ap)--cycle; ef nL=zf_: erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,am)) wpcs 0.8bondgap; erase draw subpath (0.15,0.85) of zA wpcs 0.8bondgap; erase draw subpath (0.15,0.85) of (Ls--sfrt(Le,ww,ap)) wpcs 0.8bondgap; @@ -1297,200 +1145,153 @@ def draw_bond(expr NUM)= erase draw subpath (0.15,0.85) of (sfrt(Ls,ww,ap)--Le) wpcs 0.8bondgap; wz_put(Le,sfrt(Ls,ww,am),sfrt(Ls,ww,ap)); ef nL=bd_: erase draw subpath(0.15,0.85) of zA wpcs 1.6bondgap; - draw zA withpen penrazor rotated ap scaled bondgap Cp(col); + draw zA withpen penrazor rotated ap scaled bondgap; ef nL=nb: %-- bond type for glycan ---------------------------------------------------------------------- - ef nL=arc_lb: draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0) Cp(col); - ef nL=arc_br: draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le Cp(col); + ef nL=arc_lb: draw Ls--Ls-(0,aw)..posA[nE]+(-1.2aw,0)..posA[nE]-(.6aw,0); + ef nL=arc_br: draw posA[nS]+(.6aw,0)..posA[nS]+(1.2aw,0)..Le-(0,aw)--Le; ef nL=arc_lbr: draw posA[nS]+(0,iif(numS[nS]=0,0,-.6aw))--posA[nS]+(0,-.8aw) ..0.5[posA[nS],posA[nE]]+(0,-1.7aw)..posA[nE]+(0,-.8aw) - --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw)) Cp(col); + --posA[nE]+(0,iif(numS[nE]=0,0,-.6aw)); ef nL=arc_ltr: draw posA[nS]+(0,iif(numS[nS]=0,0,0.6aw))--posA[nS]+(0,.8aw) ..0.5[posA[nS],posA[nE]]+(0,1.7aw)..posA[nE]+(0,.8aw) - --posA[nE]+(0,iif(numS[nE]=0,0,.6aw)) Cp(col); + --posA[nE]+(0,iif(numS[nE]=0,0,.6aw)); %---------------------------------------------------------------------------------------------- fi + if f_col=1: drawoptions(); fi endgroup enddef; %------------------------------------------------------------------------------------------------ -def wz_put(expr PA,PB,PD)= - for i=0 upto len/hash_gap: - nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; - if nD>((len-hash_gap)/len): nD:=1; fi - fill nA[PB,PA]--nA[PD,PA]--nD[PD,PA]--nD[PB,PA]--cycle Cp(col); +def wz_put(expr a,b,c)= + for i=0 upto lenL/hash_gap: + nA:=hash_gap*i/lenL; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/lenL; + if nD>((lenL-hash_gap)/lenL): nD:=1; fi + fill nA[b,a]--nA[c,a]--nD[c,a]--nD[b,a]--cycle; endfor enddef; %------------------------------------------------------------------------------------------------ -def bz_put(expr PA,PB,PC,PD)= - for i=0 upto len/hash_gap: - nA:=hash_gap*i/len; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/len; - fill nA[PB,PA]--nA[PD,PC]--nD[PD,PC]--nD[PB,PA]--cycle Cp(col); +def bz_put(expr a,b,c,d)= + for i=0 upto lenL/hash_gap: + nA:=hash_gap*i/lenL; nD:=(hash_gap*i+ratio_hash_black*hash_gap)/lenL; + fill nA[b,a]--nA[d,c]--nD[d,c]--nD[b,a]--cycle; endfor enddef; -%------------------------------------------------------------------------------------------------ -vardef frame_str(expr NUM)= - nA:=1.12atom_wd; nB:=wdA[NUM]+.12atom_wd; - ((0,0)--(nB,0)--(nB,nA)--(0,nA)--cycle) shifted - (posA[NUM]-(.5nA+iif((dxA[NUM]=-1)and(wdA[NUM]>atom_wd),nB-nA,0),.5nA)) -enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def char_size_set(expr WD)(expr HT)(expr STR)= - for j=1 upto length(STR): - nA:=ASCII(subc(j,STR)); tbl_char_wd[nA]:=WD; tbl_char_ht[nA]:=HT; - endfor +def char_size_set(expr w,h)(expr s)= + for j=1 upto length(s): nN:=ASCII(subc(j,s)); tbl_char_wd[nN]:=w; tbl_char_ht[nN]:=h; endfor enddef; %------------------------------------------------------------------------------------------------- -char_size_set( 1)( 1)("CGHMNOQW"); -char_size_set( .9)( 1)("ABDFIJKPRSTUVXY/><#\%@"); -char_size_set( .8)( 1)("ELZ&"); -char_size_set( .7)( 1)(" ()[]{}0123456789nh=tfg?~^"); -char_size_set( .7)( .9)("$"); -char_size_set( .7)( .7)("-+*_"); -char_size_set(.45)(.95)("l"); -char_size_set(.75)( .8)("opq"); -char_size_set( .8)( .8)("e"); -char_size_set( .9)( .8)("wm"); -char_size_set( .7)( .8)("abdcksuvrxyz"); -char_size_set(.35)( .9)("i"); -char_size_set( .5)( .9)("j"); -char_size_set(.35)( 1)("!|"); -char_size_set( .4)( 1)(".,:;'`"); -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -def draw_char(expr CHR,POS,WD,PEN,NUM)= -begingroup -save Z,aW,aH,fW,fH,hW,hW,hH,fP,hP,zO,zOh,pos,dw,dwh,dwv,cdw,sC; -path zO,zOh,zOa; -string sC; -pair Z[],pos; +char_size_set( 1, 1)("CGHMNOQW"); +char_size_set( 0.9, 1)("ABDFIJKPRSTUVXY"); +char_size_set( 0.8, 1)("ELZ"); +char_size_set( 0.7, 1)("0123456789nhtfg"); +char_size_set( 0.7, 0.7)("-+"); +char_size_set(0.45,0.95)("l"); +char_size_set(0.75, 0.8)("opq"); +char_size_set( 0.8, 0.8)("e"); +char_size_set( 0.9, 0.8)("wm"); +char_size_set( 0.7, 0.8)("abdcksuvrxyz"); +char_size_set(0.35, 0.9)("i"); +char_size_set( 0.5, 0.9)("j"); %------------------------------------------------------------------------------------------------- -def dw expr p = draw (p) shifted pos Cp(colorA[NUM]) enddef; -def dwv expr p = draw (p) withpen penrazor scaled fP shifted pos Cp(colorA[NUM]) enddef; -def dwvs (expr n)expr p= - draw (p) withpen penrazor scaled fP scaled n shifted pos Cp(colorA[NUM]) enddef; -def dwh expr p=draw (p) withpen penrazor rotated 90 scaled fP shifted pos Cp(colorA[NUM]) enddef; -def cdw expr p=cutdraw (p) shifted pos Cp(colorA[NUM]) enddef; +def dw expr p = draw p shifted cpos enddef; +def dwv expr p = draw p withpen penrazor scaled fP shifted cpos enddef; +def dwvs(expr n) expr p = draw p withpen penrazor scaled (fP*n) shifted cpos enddef; +def dwh expr p = draw p withpen penrazor rotated 90 scaled fP shifted cpos enddef; +def cdw expr p = cutdraw p shifted cpos enddef; %------------------------------------------------------------------------------------------------- -sC:=CHR; fP:=PEN; hP:=0.5fP; -aW:=WD*tbl_char_wd[ASCII(sC)]*(1-2ratio_atomgap_atom); -aH:=WD*tbl_char_ht[ASCII(sC)]*(1-2ratio_atomgap_atom); -pos:=POS+(WD*ratio_atomgap_atom,WD*ratio_atomgap_atom); +def Z_a=( 0,hP) enddef; def Z_b=(hP, 0) enddef; def Z_c=(hP,hP) enddef; def Z_d=(aW,hP) enddef; +def Z_e=(fW, 0) enddef; def Z_f=(hW,aH) enddef; def Z_g=(hW, 0) enddef; def Z_h=( 0,hH) enddef; +def Z_i=(hW,fW) enddef; def Z_j=( 0,qH) enddef; def Z_k=(aW,qH) enddef; def Z_l=(.75aW,0) enddef; +def Z_m=(hP,hH) enddef; def Z_n=(fW,fH) enddef; def Z_o=(fW,hH) enddef; def Z_p=(hW,aW) enddef; +def Z_q=( 0,fH) enddef; def Z_r=(hP,fH) enddef; def Z_s=(hW,fH) enddef; def Z_t=(fW,aH) enddef; +def Z_u=(aW,fH) enddef; def Z_v=(aW,hH) enddef; def Z_w=(hP,aH) enddef; def Z_x=(hW,hP) enddef; +def Z_y=(hW,hH) enddef; def Z_z=(fW,hP) enddef; %------------------------------------------------------------------------------------------------- -fW:=aW-hP; hW:=.5aW; fH:=aH-hP; hH:=.5aH; -Z01:=( 0,hP); Z02:=(hP, 0); Z03:=(hP,hP); Z04:=(aW,hP); Z05:=(fW, 0); Z06:=(hW,aH); Z07:=(hW, 0); -Z08:=( 0,hH); Z09:=(hP,hH); Z10:=(fW,hH); Z11:=(hW,aW); Z12:=( 0,fH); Z13:=(hP,fH); Z14:=(hW,fH); -Z15:=(fW,aH); Z16:=(aW,fH); Z17:=(aW,hH); Z18:=(hP,aH); Z19:=(hW,hP); Z20:=(hW,hH); Z21:=(fW,hP); -Z22:=(fW,fH); Z23:=(hW,fW); +def circ_O = Z_o..(.8aW,fH-qP)..tension 1.5..(.2aW,fH-qP)..Z_m.. + (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle enddef; +def circ_Oh = (hP,qH)..Z_x..(fW,qH)..Z_y..cycle enddef; +def circ_Oa = (hP,0.35aH)..Z_x..(fW,0.35aH)..(hW,.7aH)..cycle enddef; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +def draw_char(expr s,p)= +begingroup +save aW,aH,fW,fH,hW,hW,hH,qH,fP,hP; %------------------------------------------------------------------------------------------------- -zO:=Z10..(.8aW,fH-.5hP)..tension 1.5..(.2aW,fH-.5hP)..Z09.. - (.2aW,1.5hP)..tension 1.5..(.8aW,1.5hP)..cycle; -zOh:=(hP,.25aH)..Z19..(fW,.25aH)..Z20..cycle; -zOa:=(hP,.35aH)..(hW,hP)..(fW,.35aH)..(hW,.7aH)..cycle; +aW:=atom_wd*tbl_char_wd[ASCII(s)]*(1-2ratio_atomgap_atom); +aH:=atom_wd*tbl_char_ht[ASCII(s)]*(1-2ratio_atomgap_atom); +cpos:=p-(aW/2,atom_wd/2*(1-2ratio_atomgap_atom)); +fP:=bond_pen_wd*ratio_char_bond; +hP:=fP/2; qP:=fP/4; fW:=aW-hP; hW:=aW/2; fH:=aH-hP; hH:=aH/2; qH:=aH/4; %------------------------------------------------------------------------------------------------- -ppcs fP; -if sC="A": dwvs(1.14) Z02--Z06--Z05; dw .33[Z02,Z06]--.33[Z05,Z06]; -ef sC="B": dw Z13--Z14{right}..(.9fH,.75aH)..{left}Z20--Z09--Z20{right}..(.9fH,.25aH).. - {left}Z19--Z03; dwv Z02--Z18; -ef sC="C": cdw sbp(.05,.95)zO; -ef sC="D": dw Z13--Z14..Z10..Z19--Z03; dwv Z02--Z18; -ef sC="E": pickup pensquare scaled fP; dw Z21--Z03--Z13--Z22; dw Z09--Z10; -ef sC="F": dwh Z12--Z16; dwh (0,.45aH)--(fW,.45aH); dw Z02--Z13; -ef sC="G": cdw sbp(.06,.97)zO; dwh bot Z20-- bot Z17; -ef sC="H": dwv Z02--Z18; dw Z09--Z10; dwv Z05--Z15; -ef sC="I": dwv Z19--Z14; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH); -ef sC="J": cdw Z09..(hP,.4aH){down}..{right}Z19{right}..{up}(fW,.4aH)..Z15; -ef sC="K": cdw Z02--Z18; cdw .35[.45[Z02,Z18],Z16]--Z05; cdw .35[Z02,Z18]--Z16; -ef sC="L": dwh Z04--Z01; dwv Z02--Z18; -ef sC="M": dwv Z02--Z18; dwvs(1.14) Z18--Z19--Z15; dwv Z15--Z05; -ef sC="N": dwv Z02--Z18; dwv Z05--Z15; dwvs(1.4) (1.4hP,aH)--(aW-1.4hP,0); -ef sC="O": dw zO; -ef sC="P": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); -ef sC="Q": dw zO; dw (.6aW,.4aH)--Z05; -ef sC="R": dwv Z02--Z18; dw Z13--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); - cdw Z05{up}..{left}(hW,.44aH); -ef sC="S": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); -ef sC="T": dwh Z12--Z16; dwv .5[Z12,Z16]--Z07; -ef sC="U": cdw Z18..Z09{down}..{right}Z19{right}..{up}Z10..Z15; -ef sC="U": cdw Z18..(hP,.4fH){down}..{right}Z19{right}..{up}(fW,.4fH)..Z15; -ef sC="V": dwvs(1.2) Z18--Z07--Z15; -ef sC="W": dwvs(1.08) Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; -ef sC="X": dwvs(1.4) Z18..Z05; dwvs(1.4) Z02..Z15; -ef sC="Y": dwvs(1.2) Z18--Z20--Z15; dwv Z20--Z07; -ef sC="Z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; -ef sC="a": dw Z19..Z10..Z14..Z09..cycle; dwv Z05--Z15; -ef sC="b": dw Z19..Z10..Z11..Z09..cycle; dwv Z02--(hP,1.3aH) -ef sC="c": cdw sbp(.06,.94)Z10..Z14..Z09..Z19..cycle; -ef sC="d": dw Z19..Z10..Z11..Z09..cycle; dwv Z05--(fW,1.3aH); -ef sC="e": cdw sbp(0,.92)Z10..Z14..Z09..Z19..cycle; dw Z10--Z09; -ef sC="f": cdw (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z08--Z17; -ef sC="g": dw zOa; dw sbp(0,.5)zOh shifted (0,-.5fH); cdw (aW-hP,.7aH)--(aW-hP,-.25aH); -ef sC="h": cdw Z02..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z05; dwv (hP,.3aH)--Z18; -ef sC="i": dwv Z07--(hW,.7aH); ppcs 1.4fP; dw Z14; -ef sC="j": cdw (fW,.7aH)--Z21..(.25aW,-.66fP)..Z03; ppcs 1.4fP; dw Z22; -ef sC="k": dwv Z02--(hP,1.3fH); cdw .5[Z02,Z18]--Z05; cdw .5[Z02,Z18]--Z16; -ef sC="l": dwv Z07--Z06; dwh Z14--Z13; dwh Z19--Z21; -ef sC="m": cdw Z02..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z07; - cdw (hW,.6aH){up}..(.7aW,aH-hP)..{down}(fW,.6aH)..Z05; dwv (hP,.3aH)--(hP,aH); -ef sC="n": cdw Z02{up}..(hW,.8fH)..{down}(fW,.5aH)..Z05; dwv (hP,0)--(hP,.8aH); -ef sC="o": dw Z19..Z10..Z14..Z09..cycle; -ef sC="p": dw Z19..Z10..Z14..Z09..cycle; dwv (hP,aH)--(hP,-.3aH); -ef sC="q": dw Z19..Z10..Z14..Z09..cycle; dwv (fW,aH)--(fW,-.3aH); -ef sC="r": cdw (sbp(.33,.72)Z19..Z10..Z14..Z09..cycle) shifted(0,-hP); dwv Z02--Z18; -ef sC="s": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); -ef sC="t": dwv Z07--Z06; dwh (0,.66aH)--(aW,.66aH); -ef sC="u": cdw Z18..(hP,.55aH){down}..Z19..(fW,.55aH){up}..Z15; dwv Z15--Z05; -ef sC="v": dwv Z18--Z07--Z15; -ef sC="w": dwv Z18--(.25aW,0)--Z06--(.75aW,0)--Z15; -ef sC="x": dwvs(1.4) Z18--Z05; dwvs(1.4) Z15--Z02; -ef sC="y": dwvs(1.4) (Z18--Z20) shifted (0,-.3aH); dwvs(1.4) (Z15--Z02) shifted (0,-.3aH); -ef sC="z": dwh Z12--Z16; dwvs(1.4) (1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z01--Z04; -ef sC="0": dw Z09...Z14...Z10...Z19...cycle; -ef sC="1": dwv Z07--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP); -ef sC="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z14..(hP,.65aH); dwh Z04--Z01; -ef sC="3": cdw sbp(0,.75)zOh; cdw sbp(.25,.98)zOh shifted (0,hH-hP); dwh (.3aW,hH)--Z20; -ef sC="4": dwh (0,.25aH)--(aW,.25aH); dwv (.75aW,0)--(.75aW,aH)--(1.2hP,.25aH+hP); - dwv (.75aW+.5hP,aH)--(1.7hP,.25aH+hP); -ef sC="5": dwh Z12--Z16; dwv Z13--(hP,.55fH); - cdw (.5hP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH); -ef sC="6": dw Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z06; -ef sC="7": dwh (0,.fH)--Z16; dwvs(1.2) (aW-1.2hP,aH-fP)--(.4aW,0); -ef sC="8": dw zOh; dw (hP,.75aH)...Z14...(fW,.75aH)...Z20...cycle; -ef sC="9": dw (Z19..(fW,.5fW)..Z23..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--Z07; -ef sC=" ": -ef sC=".": ppcs 1.4fP; dw Z19; -ef sC=",": dw (hW+.5fP,hP)..(hW+.3fP,-fP)..(hW-.5fP,hP-2fP); ppcs 1.4fP; dw Z19; -ef sC="'": dw (hW+.5fP,fH)..(hW+.3fP,fH-fP)..(hW-.5fP,fH-2fP); ppcs 1.4fP; dw Z14; -ef sC="`": dw (hW-.5fP,fH-2fP)..(hW-.3fP,fH-fP)..(hW+.5fP,fH); ppcs 1.4fP; dw (hW,fH-2fP); -ef sC=":": ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); -ef sC=";": dw (hW+hP,.2aH)..(hW-hP,.2aH-2fP); ppcs 1.4fP; dw (hW,.2aH); dw (hW,.8aH); -ef sC="(": dw Z19...Z09...Z14; -ef sC=")": dw Z19...Z10...Z14; -ef sC="[": dwv Z07--Z06; dwh Z14--Z22; dwh Z19--Z21; -ef sC="]": dwv Z07--Z06; dwh Z14--Z13; dwh Z03--Z19; -ef sC="{": dw Z19..(.3aW,.2aH)..(.3aW,.45aH)..(.2aW,.5aH)..(.3aW,.55aH)..(.3aW,.8aH)..Z14; -ef sC="}": dw Z19..(.7aW,.2aH)..(.7aW,.45aH)..(.8aW,.5aH)..(.7aW,.55aH)..(.7aW,.8aH)..Z14; -ef sC="<": cdw Z16--Z08--Z04; -ef sC=">": cdw Z01--Z17--Z12; -ef sC="-": dwh Z09--Z10; -ef sC="=": dwh (hP,.3aH)--(fW,.3aH); dwh (hP,.6aH)--(fW,.6aH); -ef sC="/": dw Z22..Z01; -ef sC="+": dwv Z19--Z14; dwh Z09--Z10; -ef sC="*": dw Z19--Z14; dw Z09--Z10; dw (.2aW,.2aH)--(.8aW,.8aH); dw (.2aW,.8aH)--(.8aW,.2aH); -ef sC="$": cdw sbp(.05,.45)zO; cdw sbp(.55,.95)zO; dw (fW,.3aH){up}..{up}(hP,.7aH); - dwv (hW,-fP)--(hW,fH+1.5fP); -ef sC="#": dwv (.3aW,0)--(.3aW,aH); dwv (.7aW,0)--(.7aW,aH); - dwh (0,.3aH)--(aW,.3aH); dwh (0,.7aH)--(aW,.7aH); -ef sC="!": dwv Z06--(hW,.25aH); ppcs 1.4fP; dw Z07; -ef sC="?": cdw (hP,.75fH)..(hW,aH)..(fW,.75fH)..(hW,.4fH)--(hW,.2fH); ppcs 1.4fP; dw Z07; -ef sC="|": dwv Z07--Z06; -ef sC="\": dw Z13--Z21; -ef sC="%": dw Z22..Z01; dw fullcircle scaled 2.7fP shifted (.2fH,.9fH); - dw fullcircle scaled 2.7fP shifted (.73fH,.20fH); -ef sC="~": dw (hP,.8aH)..(.3aW,.9aH)..(.6aW,.7aH)..(fW,.8aH); -ef sC="&": cdw Z21..(hW,.35aH)..(.25aW,.75aH)..(hW,.fH)..(.75aW,.75fH)..(hP,.3aH)..(hW,.hP)..Z10; -ef sC="@": cdw sbp(0,.7)zO; dwv (fW,hH)--(fW,0); - dw (fW,.45aH)..(.7aW,.75aH)..(.3aW,.45aH)..(.7aW,.15aH)..cycle; -ef sC="_": dwh Z01--Z04; -ef sC="^": dw (hP,.6aH)--(.5aW,fH)--(fW,.6aH); +pickup pencircle scaled fP; +if s=cC: cdw sbp(.05,.95)circ_O; +ef s=cH: dwv Z_b--Z_w; dw Z_m--Z_o; dwv Z_e--Z_t; +ef s=cO: dw circ_O; +ef s=cN: dwv Z_b--Z_w; dwv Z_e--Z_t; dwvs(1.4)(1.4hP,aH)--(aW-1.4hP,0); +ef s=cS: cdw sbp(.05,.45)circ_O; cdw sbp(.55,.95)circ_O; dw (fW,.3aH){up}..{up}(hP,.7aH); +ef s=cF: dwh Z_q--Z_u; dwh (0,.45aH)--(fW,.45aH); dw Z_b--Z_r; +ef s=cP: dwv Z_b--Z_w; dw Z_r--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); +ef s="I": dwv Z_x--Z_s; dwh (hW-fP,hP)--(hW+fP,hP); dwh (hW-fP,fH)--(hW+fP,fH); +ef s="l": dwv Z_g--Z_f; dwh Z_s--Z_r; dwh Z_x--Z_z; +ef s="2": cdw (hP,1.3hP)..(.4fW,.35fH)..(fW,.65aH)..Z_s..(hP,.65aH); dwh Z_d--Z_a; +ef s="3": cdw sbp(0,.75)circ_Oh; cdw sbp(.25,.98)circ_Oh shifted (0,hH-hP); dwh (.3aW,hH)--Z_y; +ef s="4": dwh Z_j--Z_k; dwv Z_l--(0.75aW,aH)--(1.2hP,qH+hP); dwv (.75aW+qP,aH)--(1.7hP,qH+hP); +ef s="A": dwvs(1.14)Z_b--Z_f--Z_e; dw .33[Z_b,Z_f]--.33[Z_e,Z_f]; +ef s="B": dw Z_r--Z_s{right}..(.9fH,.75aH)..{left}Z_y--Z_m--Z_y{right}..(.9fH,qH)..{left}Z_x--Z_c; + dwv Z_b--Z_w; +ef s="D": dw Z_r--Z_s..Z_o..Z_x--Z_c; dwv Z_b--Z_w; +ef s="E": pickup pensquare scaled fP; dw Z_z--Z_c--Z_r--Z_n; dw Z_m--Z_o; +ef s="G": cdw sbp(.06,.97)circ_O; dwh bot Z_y-- bot Z_v; +ef s="J": cdw Z_m..(hP,.4aH){down}..{right}Z_x{right}..{up}(fW,.4aH)..Z_t; +ef s="K": cdw Z_b--Z_w; cdw .35[.45[Z_b,Z_w],Z_u]--Z_e; cdw .35[Z_b,Z_w]--Z_u; +ef s="L": dwh Z_d--Z_a; dwv Z_b--Z_w; +ef s="M": dwv Z_b--Z_w; dwvs(1.14)Z_w--Z_x--Z_t; dwv Z_t--Z_e; +ef s="Q": dw circ_O; dw (.6aW,.4aH)--Z_e; +ef s="R": dwv Z_b--Z_w; dw Z_r--(.65aW,fH){right}..(fW,.7aH)..{left}(.65aW,.44aH)..(hP,.44aH); + cdw Z_e{up}..{left}(hW,.44aH); +ef s="T": dwh Z_q--Z_u; dwv .5[Z_q,Z_u]--Z_g; +ef s="U": cdw Z_w..Z_m{down}..{right}Z_x{right}..{up}Z_o..Z_t; +ef s="V": dwvs(1.2)Z_w--Z_g--Z_t; +ef s="W": dwvs(1.08)Z_w--(aW/4,0)--Z_f--Z_l--Z_t; +ef s="X": dwvs(1.4)Z_w..Z_e; dwvs(1.4) Z_b..Z_t; +ef s="Y": dwvs(1.2)Z_w--Z_y--Z_t; dwv Z_y--Z_g; +ef s="Z": dwh Z_q--Z_u; dwvs(1.4)(1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z_a--Z_d; +ef s="a": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_e--Z_t; +ef s="b": dw Z_x..Z_o..Z_p..Z_m..cycle; dwv Z_b--(hP,1.3aH) +ef s="c": cdw sbp(.06,.94)Z_o..Z_s..Z_m..Z_x..cycle; +ef s="d": dw Z_x..Z_o..Z_p..Z_m..cycle; dwv Z_e--(fW,1.3aH); +ef s="e": cdw sbp(0,.92)Z_o..Z_s..Z_m..Z_x..cycle; dw Z_o--Z_m; +ef s="f": cdw (.4fW,0)--(.4fW,.75aH){up}..(.75aW,fH)..{down}(fW,.8aH); dwh Z_h--Z_v; +ef s="g": dw circ_Oa; dw sbp(0,.5)circ_Oh shifted (0,-.5fH); cdw (fW,.7aH)--(fW,-qH); +ef s="h": cdw Z_b..(hP,.3aH){up}..(hW,.7fH)..{down}(fW,.3aH)..Z_e; dwv (hP,.3aH)--Z_w; +ef s="i": dwv Z_g--(hW,.7aH); ppcs 1.4fP; dw Z_s; +ef s="j": cdw (fW,.7aH)--Z_z..(aW/4,-.66fP)..Z_c; ppcs 1.4fP; dw Z_n; +ef s="k": dwv Z_b--(hP,1.3fH); cdw .5[Z_b,Z_w]--Z_e; cdw .5[Z_b,Z_w]--Z_u; +ef s="m": cdw Z_b..(hP,.3aH){up}..(.28aW,fH)..{down}(hW,.3aH)..Z_g; + cdw (hW,.6aH){up}..(.7aW,fH)..{down}(fW,.6aH)..Z_e; dwv (hP,.3aH)--Z_w; +ef s="n": cdw Z_b{up}..(hW,.8fH)..{down}Z_o..Z_e; dwv Z_b--(hP,.8aH); +ef s="o": dw Z_x..Z_o..Z_s..Z_m..cycle; +ef s="p": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_w--(hP,-.3aH); +ef s="q": dw Z_x..Z_o..Z_s..Z_m..cycle; dwv Z_t--(fW,-.3aH); +ef s="r": cdw (sbp(.33,.72)Z_x..Z_o..Z_s..Z_m..cycle) shifted(0,-hP); dwv Z_b--Z_w; +ef s="s": cdw sbp(.05,.45)circ_O; cdw sbp(.55,.95)circ_O; dw (fW,.3aH){up}..{up}(hP,.7aH); +ef s="t": dwv Z_g--Z_f; dwh (0,.66aH)--(aW,.66aH); +ef s="u": cdw Z_w..(hP,.55aH){down}..Z_x..(fW,.55aH){up}..Z_t; dwv Z_t--Z_e; +ef s="v": dwv Z_w--Z_g--Z_t; +ef s="w": dwv Z_w--(aW/4,0)--Z_f--Z_l--Z_t; +ef s="x": dwvs(1.4)Z_w--Z_e; dwvs(1.4) Z_t--Z_b; +ef s="y": dwvs(1.4)(Z_w--Z_y) shifted (0,-.3aH); dwvs(1.4)(Z_t--Z_b) shifted (0,-.3aH); +ef s="z": dwh Z_q--Z_u; dwvs(1.4)(1.4hP,fP)--(aW-1.4hP,aH-fP); dwh Z_a--Z_d; +ef s="0": dw Z_m...Z_s...Z_o...Z_x...cycle; +ef s="1": dwv Z_g--(hW,aH-.3hP)--(hW-fP,aH-fP)--(hW-fP,aH-1.5fP); +ef s="5": dwh Z_q--Z_u; dwv Z_r--(hP,.55fH); + cdw (qP,.18aH)..(.65aW,1.3hP)..(fW,.4aH)..(hW,.63aH)..(.7hP,.56aH); +ef s="6": dw Z_x..(fW,.5fW)..Z_i..(hP,.5fW)..cycle; cdw (.8fP,hH)--Z_f; +ef s="7": dwh (0,.fH)--Z_u; dwvs(1.2)(aW-1.2hP,aH-fP)--(.4aW,0); +ef s="8": dw circ_Oh; dw (hP,.75aH)...Z_s...(fW,.75aH)...Z_y...cycle; +ef s="9": dw (Z_x..(fW,.5fW)..Z_i..(hP,.5fW)..cycle) shifted (0,.32aH); cdw (fW-.45fP,hH)--Z_g; +ef s="-": dwh Z_m--Z_o; +ef s="+": dwv Z_x--Z_s; dwh Z_m--Z_o; else: fi endgroup @@ -1498,73 +1299,55 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def warning_bond(expr a)= if addA[a]=0: - warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cnt)&" bonds"); + warning("A"&decimal(a)&" ( "&fsl(8)(strD[numS[a]])&") has"&fdr(2)(bond_cntA)&" bonds"); fi enddef; %------------------------------------------------------------------------------------------------- -vardef erase_brace(expr ATOM)= - save temp_c,temp_s; - string temp_c,temp_s; - temp_s:=""; - if (length(ATOM)>=4)and(ATOM<>"COOH"): - for i=1 upto length(ATOM): - temp_c:=subc(i,ATOM); - if (temp_c<>"{")and(temp_c<>"}")and(temp_c<>"_")and(temp_c<>"^") - and(temp_c<>"+")and(temp_c<>"-"): - temp_s:=temp_s&temp_c; fi +vardef erase_brace(expr s)= + sS:=""; + if (length(s)>=4)and(s<>"COOH"): + for i=1 upto length(s): + sC:=subc(i,s); + if (sC<>"{")and(sC<>"}")and(sC<>"_")and(sC<>"^")and(sC<>"+")and(sC<>"-"): sS:=sS&sC; fi endfor - temp_s - else: ATOM + sS + else: s fi enddef; %------------------------------------------------------------------------------------------------- -vardef erase_space(expr TXT)= - save temp_c,temp_s; - string temp_c,temp_s; - temp_s:=""; - for i=1 upto length(TXT): - temp_c:=subc(i,TXT); - if temp_c=" ": temp_s:=temp_s&"_"; else: temp_s:=temp_s&temp_c; fi - endfor - temp_s +vardef erase_space(expr t)= + sS:=""; for i=1 upto length(t): sC:=subc(i,t); if sC=" ": sS:=sS&"_"; else: sS:=sS&sC; fi endfor + sS enddef; %================================================================================================= def proc_calc(expr n)= - begingroup - save knownA,tmp_wtp; - num_MW:=num_MI:=tbl_atom_max:=warning_cnt:=hideH_cnt:=0; - nE:=parts_emb_start; + num_MW:=num_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: - knownA:=bond_cnt:=0; + knownA:=bond_cntA:=0; nS:=numS[i]; for j=1 upto cntB: - if (lineB[j]>=dl)and(lineB[j]<=dm_): bondC[j]:=2; - ef lineB[j]=tm: bondC[j]:=3; - ef (lineB[j]=vf)or(lineB[j]=vb): bondC[j]:=0; - ef lineB[j]=0: bondC[j]:=0; - else: bondC[j]:=1; - fi - if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi + bond_num[j]:=bond_type(lineB[j]); + if (sB[j]=i)or(eB[j]=i): bond_cntA:=bond_cntA+bond_num[j]; fi endfor - Bcnt[i]:=bond_cnt; - if ((nS=0)or(nS=(C-nE)))and(bond_cnt<4): - hideH[i]:=4-bond_cnt; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0; + Bcnt[i]:=bond_cntA; + if ((nS=0)or(nS=(C-nE)))and(bond_cntA<4): + hideH[i]:=4-bond_cntA; hideH_cnt:=hideH_cnt+hideH[i]; else: hideH[i]:=0; fi - if nS=0: if bond_cnt>4: warning_bond(i) fi - ef nS=(O-nE): if bond_cnt<>2: warning_bond(i) fi - ef nS=(N-nE): if (bond_cnt<>3)and(bond_cnt<>5): warning_bond(i) fi - ef nS=(S-nE): if (bond_cnt<>2)and(bond_cnt<>4)and(bond_cnt<>6): warning_bond(i) fi - ef nS=(H-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(OH-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(COOH-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(NH2-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(CN-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(P-nE): if bond_cnt<>5: warning_bond(i) fi - ef nS=(C-nE): if bond_cnt>4: warning_bond(i) fi - ef nS=(F-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(Cl-nE): if bond_cnt<>1: warning_bond(i) fi - ef nS=(Br-nE): if bond_cnt<>1: warning_bond(i) fi + if nS=0: if bond_cntA>4: warning_bond(i) fi + ef nS=(O-nE): if bond_cntA<>2: warning_bond(i) fi + ef nS=(N-nE): if (bond_cntA<>3)and(bond_cntA<>5): warning_bond(i) fi + ef nS=(S-nE): if (bond_cntA<>2)and(bond_cntA<>4)and(bond_cntA<>6): warning_bond(i) fi + ef nS=(H-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(OH-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(COOH-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(NH2-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(CN-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(P-nE): if bond_cntA<>5: warning_bond(i) fi + ef nS=(C-nE): if bond_cntA>4: warning_bond(i) fi + ef nS=(F-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(Cl-nE): if bond_cntA<>1: warning_bond(i) fi + ef nS=(Br-nE): if bond_cntA<>1: warning_bond(i) fi fi for j=1 upto tbl_group_end: if strD[nS]=tbl_atom_str[j]: @@ -1590,72 +1373,53 @@ def proc_calc(expr n)= cal_FM:=cal_FM&erase_brace(tbl_atom_str[i]) if sumA[i]>=2: &decimal(sumA[i]) fi; fi endfor - cal_MW:=substring (0,8) of decimal(num_MW); cal_MI:=substring (0,10) of decimal(num_MI); - %--------------------------------------------------------------------------------------- - endgroup + cal_MW:=substring(0,8) of decimal(num_MW); cal_MI:=substring(0,10) of decimal(num_MI); enddef; %================================================================================================= def proc_info_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - if (f=1)or(f=2): file_name_output:=jobname&"-info.aux"; - ef f=3: file_name_output:=jobname&"-data.aux"; - fi - %-------------------------------------------------------------------------------------- - if (char_num=1)and(f=2): + message "["&decimal(fig_num)&"]:"&inf_EN; + if (f=1)or(f=2): file_output:=jobname&"-info.aux"; ef f=3: file_output:=jobname&"-data.aux"; fi + if (fig_num=1)and(f=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 (f=1)or(f=3): &tag[i]&":" fi - %------------------------------------------- - if tag[i]="J": & jobname - ef tag[i]="C": & decimal(char_num) - ef tag[i]="mw": & cal_MW - ef tag[i]="fm": & cal_FM - ef tag[i]="mi": & cal_MI - ef tag[i]="w": & decimal(xpart(fsize)) - ef tag[i]="h": & decimal(ypart(fsize)) - ef tag[i]="w1": & decimal(mol_wd) - ef tag[i]="h1": & decimal(mol_ht) - ef tag[i]="An": & decimal(cntA) - ef tag[i]="Bn": & decimal(cntB) - ef tag[i]="mc": & mc - %------------------------------------------- - ef tag[i]="NO": & inf_NO - ef tag[i]="EN": & inf_EN - ef tag[i]="JN": & inf_JN - ef tag[i]="MW": & inf_MW - ef tag[i]="MI": & inf_MI - ef tag[i]="FM": & inf_FM - ef tag[i]="CAS": & inf_CAS - ef tag[i]="USE": & inf_USE - ef tag[i]="EXA": & inf_EXA - ef tag[i]="EXB": & inf_EXB + %--------------------------------------------------------------------------------- + if tag[i]="J": & jobname ef tag[i]="C": & decimal(fig_num) + ef tag[i]="mw": & cal_MW ef tag[i]="fm": & cal_FM + ef tag[i]="mi": & cal_MI ef tag[i]="mc": & mc + ef tag[i]="w": & decimal(xpart(fsize)) ef tag[i]="h": & decimal(ypart(fsize)) + ef tag[i]="w1": & decimal(mol_wd) ef tag[i]="h1": & decimal(mol_ht) + ef tag[i]="An": & decimal(cntA) ef tag[i]="Bn": & decimal(cntB) + %--------------------------------------------------------------------------------- + ef tag[i]="NO": & inf_NO ef tag[i]="EN": & inf_EN + ef tag[i]="JN": & inf_JN ef tag[i]="MW": & inf_MW + ef tag[i]="MI": & inf_MI ef tag[i]="FM": & inf_FM + ef tag[i]="CAS": & inf_CAS ef tag[i]="USE": & inf_USE + ef tag[i]="EXA": & inf_EXA ef tag[i]="EXB": & inf_EXB fi endfor ; if f=3: printf "+"; - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor printf "+-----------------------------------------------------------------------------"; fi enddef; %================================================================================================= def proc_report_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - if f=1: file_name_output:="temp-report.aux"; - else: file_name_output:=jobname&"-report.txt"; - fi + message "["&decimal(fig_num)&"]:"&inf_EN; + if f=1: file_output:="temp-report.aux"; else: file_output:=jobname&"-report.txt"; fi printf "==========================================================================="; - printf " No."&fdr(4)(char_num)&" / Name = "& inf_EN&" / file = "& file_name_input; + printf " No."&fdr(4)(fig_num)&" / Name = "& inf_EN&" / file = "& file_input; if mc_row>=1: printf "---------------------------------------------------------------------------"; - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor - printf "---------------------------------------------------------------------------"; - printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))& - " / commands="&fdr(3)(cnt_cmm); - printf " {}=X ="&fdr(3)(cnt_chg_bonds)&" / {}:X ="&fdr(3)(cnt_chg_atoms)& - " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)& - " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn); + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor + printf "---------------------------------------------------------------------------"; + printf " row="&fdr(3)(mc_row)&" / length="&fdr(4)(length(mc))&" / commands="&fdr(3)(cnt_cmm); + printf " {}=X ="&fdr(3)(cnt_chgB)&" / {}:X ="&fdr(3)(cnt_chgA)& + " / '() ="&fdr(3)(cnt_inline_def)&" / @ ="&fdr(3)(cnt_at)& + " / & ="&fdr(3)(cnt_and)&" / < ="&fdr(3)(cnt_gtn); fi printf "---------------------------------------------------------------------------"; printf " Warnings = "&fdr(3)(warning_cnt)&" / Code= "&decimal(cntD[0]); @@ -1668,8 +1432,8 @@ def proc_report_out(expr f)= printf "< NO. >( x axis , y axis )"; for i=1 upto cntA: printf " A"&fdl(6)(i)&fsl(8)(erase_brace(strD[numS[i]]))& - " ("&fdr(10)(round_auto(xpart(posA[i])/blen))&" , "& - fdr(10)(round_auto(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])& + " ("&fdr(10)(round(xpart(posA[i])/blen))&" , "& + fdr(10)(round(ypart(posA[i])/blen))&" ) "&fdr(4)(Bcnt[i])& iif(hideH[i]>0,fdr(6)(hideH[i])," ") if chargeA[i]<>0: &fdr(4)(chargeA[i]) fi; endfor @@ -1679,8 +1443,8 @@ def proc_report_out(expr f)= nC:=lenB[i]; if nC=_size_atom: nC:=ratio_atom_bond; elseif nC<0: nC:=-nC; fi nB:=angB[i]; if nB>180: nB:=nB-360; fi printf " B"&fdl(4)(i)&fdr(3)(sB[i])&" -> "&fdr(3)(eB[i])& - " ("&fdr(3)(bondC[i])&")"&fdr(8)(round_auto(angB[i]))& - " ("&fdr(6)(round_auto(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round_auto(nC*blen))&")"; + " ("&fdr(3)(bond_num[i])&")"&fdr(8)(round(angB[i]))& + " ("&fdr(6)(round(nB))&")"&fdr(8)(nC)&" ("&fdr(8)(round(nC*blen))&")"; endfor printf "---------------------------------------------------------------------------"; printf "( atom wt )[ mi wt ] < cnt > < sum wt >[ sum mi wt ]"; @@ -1704,33 +1468,27 @@ def proc_report_out(expr f)= printf "==========================================================================="; if f=1: printf EOF; fi enddef; -%------------------------------------------------------------------------------------------------- -vardef round_auto(expr n)= - if (n<4) and(n>-4): round(n*1000)/1000 elseif (n<40) and(n>-40): round(n*100)/100 - elseif (n<400)and(n>-400): round(n*10)/10 else: round(n) fi -enddef; %================================================================================================= def proc_mol_out(expr n)= - message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:=jobname&"-"&fit_zero(char_num)&"-"&erase_space(inf_EN)&".mol"; + message "["&decimal(fig_num)&"]:"&inf_EN; + file_output:=jobname&"-"&fit_zero(fig_num)&"-"&erase_space(inf_EN)&".mol"; %-V2000--------------------------------------------------------------------------------------- if n=1: - printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; + printf ""; printf " -MCFtoMOL- "&fsl(20)(info_s[1]); printf ""; printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000"; for i=1 upto cntA: printf fdr(10)(xpart(posA[i])/blen)& fdr(10)(ypart(posA[i])/blen)&fdr(10)(0)&" "& fsl(2)(erase_brace(strD[numS[i]]))&" 0"&fdr(3)(bond_charge(chargeA[i]))&" 0 0"; endfor for i=1 upto cntB: - if lineB[i]<>0: - printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))& - fdr(3)(bond_stereo(lineB[i]))&" 0 0"; + if lineB[i]<>0: printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(bond_type(lineB[i]))& + fdr(3)(bond_stereo(lineB[i]))&" 0 0"; fi endfor printf "M END"; %-V3000--------------------------------------------------------------------------------------- elseif n=2: - printf ""; printf " -MCFtoMOL- "&fsl(20)(info[1]); printf ""; + printf ""; printf " -MCFtoMOL- "&fsl(20)(info_s[1]); printf ""; printf " 0 0 0 0 0 999 V3000"; printf "M V30 BEGIN CTAB"; printf "M V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0"; @@ -1753,48 +1511,40 @@ def proc_mol_out(expr n)= enddef; %================================================================================================= def proc_mc_out(expr f)= - message "["&decimal(char_num)&"]:"&inf_EN; - file_name_output:="temp-mc.aux"; - for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blank_str)&mc[i]; endfor + message "["&decimal(fig_num)&"]:"&inf_EN; + file_output:="temp-mc.aux"; + for i=1 upto mc_row: printf (substring(0,mc_indent[i]) of blanks)&mc[i]; endfor printf EOF; enddef; %================================================================================================= -vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" else: "" fi &decimal(n) enddef; -%------------------------------------------------------------------------------------------------- -vardef bond_type(expr n)= - if (n=dl)or(n=dr)or(n=dm)or(n=db)or(n=dl_)or(n=dr_)or(n=dm_): 2 ef n=tm: 3 else: 1 fi enddef; -%------------------------------------------------------------------------------------------------- +vardef fit_zero(expr n)= if n<=9: "00" ef n<=99: "0" else: "" fi &decimal(n) enddef; +vardef bond_type(expr n)= if (n>=dl)and(n<=dm_):2 ef n=tm:3 ef n=0: 0 else: 1 fi enddef; vardef bond_charge(expr n)= if n=2: 1 ef n=1: 3 ef n=-1: 5 ef n=-2: 6 else: 0 fi enddef; -%------------------------------------------------------------------------------------------------- vardef bond_stereo(expr n)= if (n=wf)or(n=zb)or(n=bd): 1 ef (n=zf)or(n=wb)or(n=dt): 6 ef n=wv: 4 else: 0 fi enddef; -%------------------------------------------------------------------------------------------------- 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 ATOM,WT,MI)= +vardef STa(expr s,WT,MI)= str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; - strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; - tbl_atom[tbl_cnt]:=0; - tbl_atom_wt[tbl_cnt]:=WT; tbl_atom_mi[tbl_cnt]:=MI; + strD[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_cnt enddef; %------------------------------------------------------------------------------------------------- -vardef STb(expr ATOM)(text TXT)= +vardef STb(expr s)(text t)= str_cnt:=str_cnt+1; tbl_cnt:=tbl_cnt+1; parts_cnt:=parts_cnt+1; comD[parts_cnt][1]:=_set_atom; parD[parts_cnt][1]:=str_cnt; cntD[parts_cnt]:=1; - strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=ATOM; - tbl_atom[tbl_cnt]:=0; - for list=TXT: + strD[str_cnt]:=tbl_atom_str[tbl_cnt]:=s; tbl_atom[tbl_cnt]:=0; + for list=t: tbl_atom[tbl_cnt]:=tbl_atom[tbl_cnt]+1; tbl_group[tbl_cnt][tbl_atom[tbl_cnt]]:=list-parts_emb_start; endfor parts_cnt enddef; %================================================================================================= -parts_int:=parts_emi_start; -parts_cnt:=parts_emb_start; +parts_int:=parts_emi_start; parts_cnt:=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); @@ -1825,13 +1575,10 @@ NO:=STb("NO")(N,O); NO2:=STb("N{O_2_}")(N,O,O); NH2:=STb("N{H_2_}")(N,H,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); %------------------------------------------------------------------------------------------------- -tbl_group_end:=tbl_cnt; -parts_atom_end:=parts_cnt; +tbl_group_end:=tbl_cnt; parts_atom_end:=parts_cnt; %================================================================================================= -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 +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=4,5,6: for j=2 upto i-2: ?[i][j]:='(); endfor endfor for i=5,6,7,8: for j=11 upto 15: ?[i][j]:='(); endfor endfor @@ -1841,8 +1588,7 @@ for i==2 upto 20: ![i]:='((_com,_len_ss),(_get_len,_tmp_len),! for j==2 upto i::,! endfor ,(_com,_len_ee)); endfor Me:='(); Et:='(!); iPr:=?!:='(/_,!); ?!2:='(/_,!2); tBu:=??!:='(/_,/_^60,60); -!?:='(!,/_); !?!:='(!,/_,!); -n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus)); +!?:='(!,/_); !?!:='(!,/_,!); n_:='((_set_add,a_minus)); p_:='((_set_add,a_plus)); zero_wf:='(0~wf); zero_zf:='(0~zf); zero_dm:='(0~dm); zero_wv:='(0~wv); %------------------------------------------------------------------------------------------------- NH:='(N,/H~nl); N!:='(N,/_); N!2:='(N,/!); SO:='(S,//O); SOO:='(S,//O^-35,//O^35); @@ -1891,133 +1637,95 @@ def expand_set= enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vardef check(expr s)= - save mc_char,mc_char,temp_c,err_cnt,char_cnt,f_depth, - cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s,cnt_brk_e; - string temp_c,err_str[],err_type[]; - numeric mc_char[],err_adr[],err_code[]; - err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chg_atoms:=cnt_chg_bonds:=0; - err_type[0]:="no mc-row "; - err_type[1]:=" '(' > ')' "; err_type[2]:=" '(' < ')' "; - err_type[3]:=" '{' > '}' "; err_type[4]:=" '{' < '}' "; - err_type[5]:=" '[' > ']' "; err_type[6]:=" '[' < ']' "; - err_type[7]:="missing arg"; err_type[8]:="extra arg "; + save mc_char,err_cnt,char_cnt,f_depth,cnt_prn_s,cnt_prn_e,cnt_brc_s,cnt_brc_e,cnt_brk_s, + cnt_brk_e,cmm_adr; + string err_str[],err_type[]; + numeric mc_char[],err_adr[],err_code[],cmm_adr[]; + err_cnt:=char_cnt:=code_cnt:=f_depth:=cnt_cmm:=cnt_chgA:=cnt_chgB:=0; + err_type[0]:="no mc-row "; err_type[1]:=" '(' > ')' "; err_type[2]:=" '(' < ')' "; + err_type[3]:=" '{' > '}' "; err_type[4]:=" '{' < '}' "; err_type[5]:=" '[' > ']' "; + err_type[6]:=" '[' < ']' "; err_type[7]:="missing arg"; err_type[8]:="extra arg "; %--------------------------------------------------------------------------------------------- if mc_row>=1: - %--------------------------------------------------------------------------------------------- - for i=1 upto length(s): - temp_c:=subc(i,s); - if temp_c<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(temp_c); fi - endfor - mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm; - %-- argument missing chkeck ---------------------------------------------------------------- - cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0; - cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0; - forever: - nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1]; - %----------------------------------------------------------------------------------------- - if nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi - ef nC=a_ast: - if nD=a_sls: - if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi % */* x - ef mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % */ x - ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi % ** x - ef nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % // x - ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % /* x - ef nD=a_cmm: proc_err(7,nA) fi % / x - ef nC=a_hsh: if nD=a_hsh: nA:=nA+1; % ## - ef nD=a_cmm: proc_err(7,nA) fi % # x - if nB<>a_cmm: proc_err(8,nA) fi % a # - ef nC=a_dol: if nD=a_cmm: proc_err(7,nA) fi % $ x - ef nC=a_equ: if nD= a_cmm: proc_err(7,nA) fi % = x - if nB= a_cmm: proc_err(7,nA) fi % x = - ef nC=a_cln: if nD= a_cmm: proc_err(7,nA) fi % : x - if nB= a_cmm: proc_err(7,nA) fi % x : - ef nC=a_amk: cnt_at:=cnt_at+1; - if nD= a_cmm: proc_err(7,nA) fi % @ x - if nB<>a_cmm: proc_err(8,nA) fi % a @ - ef nC=a_and: cnt_and:=cnt_and+1; - if nD= a_cmm: proc_err(7,nA) fi % & x - if nB<>a_cmm: proc_err(8,nA) fi % a & - ef nC=a_gtn: cnt_gtn:=cnt_gtn+1; - ef nC=a_ltn: if nD= a_cmm: proc_err(7,nA) fi % > x - if nB= a_cmm: proc_err(7,nA) fi % x > - ef nC=a_tld: if nD= a_cmm: proc_err(7,nA) fi % ~ x - if nB= a_cmm: proc_err(7,nA) fi % x ~ - ef nC=a_hat: if nD= a_cmm: proc_err(7,nA) fi % ^ x - if nB= a_cmm: proc_err(7,nA) fi % x ^ - ef nC=a_bqt: if nD= a_cmm: proc_err(7,nA) fi % ` x - if nB= a_cmm: proc_err(7,nA) fi % x ` - ef nC=a_bar: if nD= a_bar: - if mc_char[nA+2]=a_bar: nA:=nA+1; % || - ef mc_char[nA+2]<>a_cmm: proc_err(8,nA) % | a - fi - if nB<>a_cmm: proc_err(8,nA) fi % a | - fi - %------------------------------------------------------------------------------------------ - ef nC=a_prn_s: if nD= a_cmm: proc_err(7,nA) fi % ( x - cnt_prn_s:=cnt_prn_s+1; f_depth:=1; - if nB=a_qut: cnt_inline_def:=cnt_inline_def+1; fi - ef nC=a_prn_e: cnt_prn_e:=cnt_prn_e+1; f_depth:=0; - ef nC=a_brc_s: if nD= a_cmm: proc_err(7,nA) fi % { x - cnt_brc_s:=cnt_brc_s+1; f_depth:=1; - ef nC=a_brc_e: if nD= a_cmm: proc_err(7,nA) fi % } x - cnt_brc_e:=cnt_brc_e+1; f_depth:=0; - if nD=a_cln: cnt_chg_atoms:=cnt_chg_atoms+1; - ef nD=a_equ: cnt_chg_bonds:=cnt_chg_bonds+1; + for i=1 upto length(s): + tempc:=subc(i,s); if tempc<>" ": char_cnt:=char_cnt+1; mc_char[char_cnt]:=ASCII(tempc); fi + endfor + mc_char[0]:=mc_char[char_cnt+1]:=mc_char[char_cnt+2]:=a_cmm; + %-- argument missing chkeck -------------------------------------------------------------- + cnt_prn_s:=cnt_prn_e:=cnt_brc_s:=cnt_brc_e:=cnt_brk_s:=cnt_brk_e:=cnt_inline_def:=cnt_at:=0; + cnt_cmm:=cnt_and:=cnt_gtn:=cnt_gtn:=nA:=f_depth:=0; + forever: + nA:=nA+1; nB:=mc_char[nA-1]; nC:=mc_char[nA]; nD:=mc_char[nA+1]; + if nC=a_cmm: if f_depth=0: cnt_cmm:=cnt_cmm+1; cmm_adr[cnt_cmm]:=nA; fi + ef nC=a_ast: + if nD=a_sls: + if mc_char[nA+2]=a_ast: if mc_char[nA+3]=a_cmm: proc_err(7,nA) nA:=nA+2; fi % */* x + ef mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % */ x + ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi fi % ** x + ef nC=a_sls: if nD=a_sls: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % // x + ef nD=a_ast: if mc_char[nA+2]=a_cmm: proc_err(7,nA) nA:=nA+1; fi % /* x + ef nD=a_cmm: proc_err(7,nA) fi % / x + ef nC=a_hsh: if nD=a_hsh: nA:=nA+1; % ## + ef nD=a_cmm: proc_err(7,nA) fi if nB<>a_cmm: proc_err(8,nA) fi % a # x + ef nC=a_dol: if nD=a_cmm: proc_err(7,nA) fi % $ x + ef nC=a_equ: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x = x + ef nC=a_cln: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x : x + ef nC=a_amk: cnt_at:=cnt_at+1; + if nD= a_cmm: proc_err(7,nA) fi if nB<>a_cmm: proc_err(8,nA) fi % a @ x + ef nC=a_and: cnt_and:=cnt_and+1; + if nD= a_cmm: proc_err(7,nA) fi if nB<>a_cmm: proc_err(8,nA) fi % a & x + ef nC=a_gtn: cnt_gtn:=cnt_gtn+1; + ef nC=a_ltn: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x > x + ef nC=a_tld: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x ~ x + ef nC=a_hat: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x ^ x + ef nC=a_bqt: if nD= a_cmm: proc_err(7,nA) fi if nB= a_cmm: proc_err(7,nA) fi % x ` x + ef nC=a_bar: if nD= a_bar: if mc_char[nA+2]=a_bar: nA:=nA+1; % || + ef mc_char[nA+2]<>a_cmm: proc_err(8,nA) % | a + fi + if nB<>a_cmm: proc_err(8,nA) fi % a | fi - ef nC=a_brk_s: if nD= a_cmm: proc_err(7,nA) fi % [ x - cnt_brk_s:=cnt_brk_s+1; f_depth:=1; - ef nC=a_brk_e: if nB= a_cmm: proc_err(7,nA) fi % x ] - cnt_brk_e:=cnt_brk_e+1; f_depth:=0; - %------------------------------------------------------------------------------------------- - fi - exitif nA>=char_cnt+1; - endfor - %-- brackets balance check ------------------------------------------------------------------- - if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_scnt_brc_e: proc_err(3,0) ef cnt_brc_scnt_brk_e: proc_err(5,0) ef cnt_brk_s=char_cnt+1; + endfor + %-- brackets balance check ----------------------------------------------------------------- + if cnt_prn_s>cnt_prn_e: proc_err(1,0) ef cnt_prn_scnt_brc_e: proc_err(3,0) ef cnt_brc_scnt_brk_e: proc_err(5,0) ef cnt_brk_s0: readstring; - %--------------------------------------------------------------------------------------------- err_cnt enddef; %------------------------------------------------------------------------------------------------- -def proc_err(expr ERR_CODE,ADR)= - err_cnt:=err_cnt+1; err_adr[err_cnt]:=ADR; err_code[err_cnt]:=ERR_CODE; - if ERR_CODE<=6: err_str[err_cnt]:=" "; - else: err_str[err_cnt]:=substring (ADR-3,ADR+2) of mc; - fi +def proc_err(expr e,n)= err_cnt:=err_cnt+1; err_adr[err_cnt]:=n; err_code[err_cnt]:=e; + if e<=6: err_str[err_cnt]:=" "; else: err_str[err_cnt]:=substring(n-3,n+2) of mc; fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def query(text s)= begingroup - save file_name,f_mcf,f_line,unit_row,unit_cnt,line_s,unit_row_cnt,mc_row,line_cnt, - semicol_cnt,info_cnt,info_s,filter_n,order,min_s,min_n,par_cnt,key_cnt,var_n,info_s, - sign_at,sign_n,filter_tag,filter_var,filter_sign,filter_cnt,filter_p,temp_s,par_s, - at_colon,at_equal,at_less,at_greater,at_n,info_cnt; - string line_s[][],sort_s[],par_s[],sort_all[],key_s[],filter_s[],filter_tag[],filter_var[], - info_s[],file_name_input,temp_s,min_s; - numeric unit_row_cnt[],order[],order_tbl[],filter_sign[],filter_p[]; - unit_row:=f_mcf:=mc_row:=line_cnt:=info_cnt:=par_cnt:=key_cnt:=filter_cnt:=0; - unit_cnt:=1; - %----------------------------------------------------------------------------------------------- - file_name_input:=default_data_file; - file_name_output:=default_temp_file; + 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_semic, + 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_semic[]; + unit_row:=f_mcf:=mc_row:=info_cnt:=key_cnt:=filter_cnt:=0; unit_cnt:=1; + file_input:=default_data_file; file_output:=default_temp_file; %----------------------------------------------------------------------------------------------- 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); + 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); %--------------------------------------------------------------------------------------------- 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; @@ -2027,93 +1735,66 @@ def query(text s)= else: sign_at:=at_greater; sign_n:=4; at_n:=1; fi ef at_less>=2: sign_at:=at_less; sign_n:=3; at_n:=1; fi - tag_s:=substring (0,sign_at-at_n) of list; - var_s:=substring (sign_at,length(list)) of list; + sT:=substring(0,sign_at-at_n) of list; sV:=substring(sign_at,length(list)) of list; %--------------------------------------------------------------------------------------------- if sign_n=0: - if tag_s="f": - if scan_char(".",var_s,0,1)=0: file_name_input:=var_s&".mcf"; - else: file_name_input:=var_s; - fi - ef tag_s="o": - if scan_char(".",var_s,0,1)=0: file_name_output:=var_s&".aux"; - else: file_name_output:=var_s; - fi - ef tag_s="s": key_cnt:=key_cnt+1; key_s[key_cnt]:=var_s; + 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_cnt:=key_cnt+1; key_s[key_cnt]:=sV; fi - %--------------------------------------------------------------------------------------------- else: - filter_cnt:=filter_cnt+1; - filter_tag[filter_cnt]:=tag_s; - filter_sign[filter_cnt]:=sign_n; - if (sign_n>=3)and(is_num(var_s)=1): filter_var[filter_cnt]:=fix_num(var_s); - else: filter_var[filter_cnt]:=var_s; + filter_cnt:=filter_cnt+1; filter_tag[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); + else: filter_var[filter_cnt]:=sV; fi fi endfor %----------------------------------------------------------------------------------------------- forever: - temps:=readfrom file_name_input; exitif temps=EOF; + temps:=readfrom file_input; exitif temps=EOF; if subc(1,temps)<>"%": - line_cnt:=line_cnt+1; unit_row:=unit_row+1; - line_s[unit_cnt][unit_row]:=temps; - if (subc(1,temps)="+")and(subc(2,temps)<>"-"): f_mcf:=1; mc_row:=1; - ef (subc(1,temps)="+")and(subc(2,temps)="-"): - unit_row_cnt[unit_cnt]:=unit_row; - f_mcf:=unit_row:=0; - filter_n:=1; + unit_row:=unit_row+1; line_s[unit_cnt][unit_row]:=temps; + 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 - %--------------------------------------------------------------------------------------- for i=1 upto info_cnt: - at_colon:=scan_char(":",info_s[i],0,1); - tag_s:=substring (0,at_colon-1) of info_s[i]; - var_s:=substring (at_colon,length(info_s[i])) of info_s[i]; - %------------------------------------------------------------------------------------- + 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]=tag_s: - if is_num(var_s)=1: sort_s[j]:=fix_num(var_s); else: sort_s[j]:=var_s; fi - fi + if key_s[j]=sT: if is_num(sV)=1: sort_s[j]:=fix_num(sV); else: sort_s[j]:=sV; fi fi endfor - %------------------------------------------------------------------------------------- for j=1 upto filter_cnt: - if filter_tag[j]=tag_s: + if filter_tag[j]=sT: filter_p[j]:=1; - if (filter_sign[j]>=3)and(is_num(var_s)=1): temp_s:=fix_num(var_s); - else: temp_s:=var_s; - fi - if filter_sign[j]=1: if not(temp_s= filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=2: if not(temp_s<>filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=3: if not(temp_s< filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=4: if not(temp_s> filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=5: if not(temp_s<=filter_var[j]): filter_n:=0; fi - ef filter_sign[j]=6: if not(temp_s>=filter_var[j]): filter_n:=0; fi + if (filter_sign[j]>=3)and(is_num(sV)=1): temps:=fix_num(sV); else: temps:=sV; fi + if filter_sign[j]=1: if not(temps= filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=2: if not(temps<>filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=3: if not(temps< filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=4: if not(temps> filter_var[j]): filter_n:=0; fi + ef filter_sign[j]=5: if not(temps<=filter_var[j]): filter_n:=0; fi + 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]); + 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 - %------------------------------------------------------------------------------------- - ef (subc(1,temps)<>"+")and(subc(1,temps)<>"%"): + info_cnt:=0; if filter_n=1: 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: - semicol_cnt:=count_semicol(temps); - for i=1 upto semicol_cnt+1: + semic_cnt:=split_semic(temps); + for i=1 upto semic_cnt+1: info_cnt:=info_cnt+1; - if i<=semicol_cnt: - info_s[info_cnt]:=substring (at_semicol[i-1],at_semicol[i]-1) of temps; - else: - info_s[info_cnt]:=substring (at_semicol[semicol_cnt],length(temps)) of temps; + if i<=semic_cnt: info_s[info_cnt]:=substring(at_semic[i-1],at_semic[i]-1) of temps; + else: info_s[info_cnt]:=substring(at_semic[semic_cnt],length(temps)) of temps; fi endfor fi @@ -2122,59 +1803,42 @@ def query(text s)= endfor %============================================================================================= unit_cnt:=unit_cnt-1; - %--------------------------------------------------------------------------------------------- if key_cnt>=1: for i=1 upto unit_cnt: order[i]:=0; endfor - for i=1 upto unit_cnt: min_s:="~"; + for i=1 upto unit_cnt: temps:="~"; for j=1 upto unit_cnt: - if order[j]=0: if sort_all[j]n: temp_s:=substring(0,n) of s; - fi - temp_s + if length(s)n: sS:=substring(0,n) of s; fi sS enddef; %--------------------------------------------------------------------------------------------- vardef fix_num(expr s)= - save temp_s,at_dot; - string temp_s; - temp_s:=s; - at_dot:=scan_char(".",temp_s,0,1); - if at_dot=0: temp_s:=fsr(4)(temp_s); ef at_dot=1: temp_s:=" 0"&temp_s; - ef at_dot=2: temp_s:=" "&temp_s; ef at_dot=3: temp_s:=" "&temp_s; - ef at_dot=4: temp_s:=" "&temp_s; - fi - temp_s + sS:=s; nN:=scan_char(".",sS,0,1); + if nN=0: sS:=fsr(4)(sS); ef nN=1: sS:=" 0"&sS; + ef nN=2: sS:=" "&sS; ef nN=3: sS:=" "&sS; ef nN=4: sS:=" "&sS; fi sS enddef; %--------------------------------------------------------------------------------------------- vardef is_num(expr s)= - save numeric_n; - numeric_n:=1; for i=1 upto length(s): - if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): else: numeric_n:=0; fi - endfor - numeric_n + if ((subc(i,s)>="0")and(subc(i,s)<="9"))or(subc(i,s)="."): nN:=1; else: nN:=0; fi endfor nN enddef; %------------------------------------------------------------------------------------------------- -vardef count_semicol(expr s)= - save nS; - nS:=at_semicol[0]:=0; - for i=1 upto length(s): if subc(i,s)=";": nS:=nS+1; at_semicol[nS]:=i; fi endfor - nS +vardef split_semic(expr s)= + nN:=at_semic[0]:=0; + for i=1 upto length(s): if subc(i,s)=";": nN:=nN+1; at_semic[nN]:=i; fi endfor nN enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf index 6c7897a6ffb..5f94cc711c9 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_data_base.mcf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% molecular data base file mcf_data_base.mcf by Akira Yamaji 2022.01.17 +% molecular data base file mcf_data_base.mcf by Akira Yamaji 2022.02.20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tag1:var1;tag2:var2;tag3:var3 ..... % first character of line "%" comment out @@ -358,7 +358,7 @@ Cat:biological;EN:Cholesterol;MW:386.664;EXA:1 Cat:biological;EN:Riboflavin;MW:376.37;EXA:1 + <30,Ph,{3,9}=?6,{8,16}=dl,{7,10,14}:N,12:NH,{11,13}://O,{1,6}:/_, - @10,\`1.2,!,*/OH,!,/*OH,!,*/OH,!2,OH + @10,\`1.5,!,*/OH,!,/*OH,!,*/OH,!2,OH +------------------------------------------------------------------------------ Cat:biological;EN:Resveratrol;MW:228.24;EXA:1 + @@ -925,10 +925,10 @@ Cat:antibiotics;EN:Tiamulin;MW:493.74;EXA:1 +------------------------------------------------------------------------------ Cat:antibiotics;EN:Rifampicin;MW:822.94;EXA:1 + -<30,Ph,6:/_^30,5:/OH,|,-6=?5,1:O,3://O,2:/*_^60,|,-8=?6,{2,4}=dl,{1,4}:/OH, - #1,@-2,\,NH,60,//O,-60,/_,60~dl,60,60~dl,-60, - */_,60,/*OH,-60,/*_,60,/*OH,60,*/_^30,-60, - 60,/*_^30,-53,66,-53~dl,66`1.2,O,##,&$8, +<30,Ph,6:/_^30,5:/OH,-6=?5,-3:O,-8=?6,{-2,-4}=dl,{-1,-4}:/OH, + #1,@-2,\,NH,60,-60,60~dl,60,60~dl,-60, + 60,-60,60,60,-60,60,-53,66,-53~dl,66`1.2,O,##,&$8, + ||,{9,15}://O,16:/_,{20,24^30}:*/_,{21,23}:/*OH,{8^60,22,26^30}:/*_, -4:/*O!,@-6,-30,O,!,//O,!,@$11,\,!!,N,!,|,?6,1:N,4:N! +------------------------------------------------------------------------------ %============================================================================== diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp index 27e479c840a..1e8edddf013 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mp @@ -1,20 +1,21 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format by Akira Yamaji 2022.01.22 +% Molecular Coding Format by Akira Yamaji 2022.02.20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph; %%% it must be version 4.79 -message "* mcf_exa_soc 2022.01.22"; +input mcf2graph; %%% it must be version 4.80 +message "* mcf_exa_soc 2022.02.20"; message ""; %------------------------------------------------------------------------------ %%%%sw_frame:=Outside; %%%%sw_numbering:=Bond; %%%%sw_numbering:=Atom; +%%%%sw_frame:=Atom; tag1:="J"; tag2:="C"; tag3:="fm"; tag4:="mw"; tag5:="EN"; tag6:="MW"; %------------------------------------------------------------------------------ %% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png"; %------------------------------------------------------------------------------ -%%%%ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) +%ext(defaultfont:=mpfont; defaultscale:=.3; label.rt(inf_EN,(0,0));) %------------------------------------------------------------------------------ -%sw_output:=Font+Info; +%sw_output:=Fig+Info; %ext(defaultfont:=mpfont; defaultscale:=.3; %label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));) %------------------------------------------------------------------------------ @@ -28,7 +29,7 @@ max_blength:=4mm; %%%% beginfigm("t:EN","v:Caffeine") % select EN=Caffeine forever: %%%% beginfigm("f:mcf_data_base","v+:*") % 'mcf_data_base.mcf'(default) -%%%% beginfigm("f:temp","v+:*") % use query output +%%%%beginfigm("f:temp","v+:*") % use query output 'temp.mcf' %%%% beginfigm("v+:*") % select all beginfigm("t:EXA","v+:1") % 'v+:1': select EXA=1 if f_EOF=0: if check(mc)=0: MC(scantokens(mc)) fi fi diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf index eda1e4dc70a..0996b2358aa 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex index cb1a429f1be..de26f8df1d7 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.tex @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF Typeset with LuaLaTeX(luamplib) by A.Yamaji 2022.01.22 +% Example of MCF Typeset with LuaLaTeX(luamplib) by A.Yamaji 2022.02.20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ** mcf2graph.mf must be version 4.79 +% ** mcf2graph.mf must be version 4.80 % ** use mcf_data_base.mcf % ** typeset by LuaLaTeX(luamplib) \documentclass{article} @@ -47,7 +47,7 @@ \newcount \t@num% \font\labelM=cmtt8 at 6pt\relax% %------------------------------------------------------------------------- -\f@num=0% +\f@num=1% \t@num=0% \unitlength=0.01mm% \noindent% @@ -79,7 +79,7 @@ \advance\f@num\@ne\relax% \advance\t@num\@ne\relax% \ifnum\t@num=5 \\ \t@num=\z@ \fi% -\ifnum\f@num=155 \CONT@false \fi% +\ifnum\f@num=156 \CONT@false \fi% \ifCONT@ \repeat% %------------------------------------------------------------------------------ \end{document} diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp index 5c53bc8fb4f..219f78c5a93 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mp @@ -1,9 +1,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2022.01.22 +% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2022.02.20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph; %% it must be version 4.79 +input mcf2graph; %% it must be version 4.80 % ** use data base file 'mcf_data_base.mcf' -message "mcf_man_soc 2022.01.22"; message ""; +message "mcf_man_soc 2022.02.20"; message ""; %------------------------------------------------------------------------ sw_mframe:=0; sw_expand:=0; @@ -358,48 +358,48 @@ beginfigm("EN:Insert atom") MC(<-30,!2,O,!2,N,!2) endfigm %*********************************************************************** -beginfigm("EN:change atom") +beginfigm("EN:change atom",":<30,!5,2:O,{3:5}:N") fsize:=(70mm,10mm); msize:=(0.48,1); - MCat(0,0.5)(<30,!5,2:O,{3:5}:N) + MCat(0,0.5)(scantokens(mc)) sw_numbering:=Atom; - MCat(1,0.5)(<30,!5,2:O,{3:5}:N) + MCat(1,0.5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:change atom brock address 1") +beginfigm("EN:change atom brock address 1",":?6,@4,\,|,?6,2:O") fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,|,?6,2:O) + MCat(0,.5)(scantokens(mc)) sw_numbering:=Atom; msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) + MCat(1,.5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:change atom brock address 2") +beginfigm("EN:change atom brock address 2",":?6,@4,\,|,?6,||,2:N") fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,|,?6,||,2:N) + MCat(0,.5)(scantokens(mc)) sw_numbering:=Atom; msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) + MCat(1,.5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:change atom absolute address") +beginfigm("EN:change atom absolute address",":?6,@4,\,?6,$2:N") fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,?6,$2:N) + MCat(0,.5)(scantokens(mc)) sw_numbering:=Atom; msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) + MCat(1,.5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:change atom relative adress") +beginfigm("EN:change atom relative adress",":?6,@4,\,?6,-2:N") fsize:=(70mm,14mm); fmargin:=(3mm,1.5mm); - MCat(0,.5)(?6,@4,\,?6,-2:N) + MCat(0,.5)(scantokens(mc)) sw_numbering:=Atom; msize:=(1,.88); - MCat(1,.5)(?6,@4,\,?6) + MCat(1,.5)(scantokens(mc)) endfigm %*********************************************************************** beginfigm("EN:Charged atom") @@ -770,11 +770,11 @@ beginfigm("EN:fmargin") ) endfigm %*********************************************************************** -beginfigm("EN:offset_thickness") +beginfigm("EN:offset_thickness",":<30,Ph") fsize:=(60mm,12mm); - offset_thickness:=0.0pt; MCat(0.1,0.5)(<30,Ph) - offset_thickness:=0.2pt; MCat(0.55,0.5)(<30,Ph) - offset_thickness:=0.5pt; MCat(1,0.5)(<30,Ph) + offset_thickness:=0.0pt; MCat(0.1,0.5)(scantokens(mc)) + offset_thickness:=0.2pt; MCat(0.55,0.5)(scantokens(mc)) + offset_thickness:=0.5pt; MCat(1,0.5)(scantokens(mc)) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.0pt",(0,1bp)); label.urt("0.2pt",(0.36w,1bp)); @@ -782,14 +782,11 @@ beginfigm("EN:offset_thickness") ) endfigm %*********************************************************************** -beginfigm("EN:offset_bond_gap") +beginfigm("EN:offset_bond_gap",":<30,Ph") fsize:=(60mm,12mm); - offset_bond_gap:=0.0pt; - MCat(0.1, .5)(<30,Ph) - offset_bond_gap:=0.3pt; %<<== default - MCat(.55, .5)(<30,Ph) - offset_bond_gap:=1.0pt; - MCat(1, .5)(<30,Ph) + offset_bond_gap:=0.0pt; MCat(0.1, 0.5)(scantokens(mc)) + offset_bond_gap:=0.3pt; MCat(0.55,0.5)(scantokens(mc)) %<<== default + offset_bond_gap:=1.0pt; MCat(1, 0.5)(scantokens(mc)) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.0pt",(0,1bp)); label.urt("0.3pt",(0.36w,1bp)); @@ -799,12 +796,9 @@ endfigm %*********************************************************************** beginfigm("EN:offset_atom") fsize:=(60mm,12mm); - offset_atom:=0.0pt; - MCat(0.1, .5)(<30,?6,3:O) - offset_atom:=0.8pt; %<<== default - MCat(.55, .5)(<30,?6,3:O) - offset_atom:=2.0pt; - MCat(1, .5)(<30,?6,3:O) + offset_atom:=0.0pt; MCat(0.1, .5)(<30,?6,3:O) + offset_atom:=0.8pt; MCat(.55, .5)(<30,?6,3:O) %<<== default + offset_atom:=2.0pt; MCat(1, .5)(<30,?6,3:O) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.0pt",(0,1bp)); label.urt("0.8pt",(0.36w,1bp)); @@ -814,12 +808,9 @@ endfigm %*********************************************************************** beginfigm("EN:offset_wedge") fsize:=(60mm,12mm); - offset_wedge:=0.0pt; - MCat(0.1,0.5)(<30,?6,5:*/_) - offset_wedge:=0.4pt; %<<== default - MCat(0.55,0.5)(<30,?6,5:*/_) - offset_wedge:=1.0pt; - MCat(1, 0.5)(<30,?6,5:*/_) + offset_wedge:=0.0pt; MCat(0.1,0.5)(<30,?6,5:*/_) + offset_wedge:=0.4pt; MCat(0.55,0.5)(<30,?6,5:*/_) %<<== default + offset_wedge:=1.0pt; MCat(1, 0.5)(<30,?6,5:*/_) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.0pt",(0,1bp)); label.urt("0.4pt",(0.36w,1bp)); @@ -830,12 +821,9 @@ endfigm beginfigm("EN:max_blength") fsize:=(60mm,20mm); sw_frame:=sw_frame+Mol; - max_blength:=5mm; - MCat(0, .5)(<30,Ph) - max_blength:=8mm; - MCat(.4,.5)(<30,Ph) - max_blength:=10mm; - MCat(1, .5)(<30,Ph) %<<== default + max_blength:=5mm; MCat(0, .5)(<30,Ph) + max_blength:=8mm; MCat(.4,.5)(<30,Ph) + max_blength:=10mm; MCat(1, .5)(<30,Ph) %<<== default ext(defaultscale:=0.6; labeloffset:=1bp; label("5mm", (0.1w,0.5h)); label("8mm", (0.42w,0.5h)); @@ -845,12 +833,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_thickness_bond") fsize:=(60mm,12mm); - ratio_thickness_bond:=0.005; - MCat(0.1,0.5)(<30,Ph) - ratio_thickness_bond:=0.015; %<<== default - MCat(.55,0.5)(<30,Ph) - ratio_thickness_bond:=0.03; - MCat(1, 0.5)(<30,Ph) + ratio_thickness_bond:=0.005; MCat(0.1,0.5)(<30,Ph) + ratio_thickness_bond:=0.015; MCat(.55,0.5)(<30,Ph) %<<== default + ratio_thickness_bond:=0.03; MCat(1, 0.5)(<30,Ph) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.005",(0,1bp)); label.urt("0.015",(0.36w,1bp)); @@ -860,12 +845,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_char_bond") fsize:=(60mm,12mm); - ratio_char_bond:=1.0; - MCat(0, .5)(<30,?6,6:O,3:NH) - ratio_char_bond:=1.5; %<<== default - MCat(.5, .5)(<30,?6,6:O,3:NH) - ratio_char_bond:=2.0; - MCat( 1, .5)(<30,?6,6:O,3:NH) + ratio_char_bond:=1.0; MCat(0, .5)(<30,?6,6:O,3:NH) + ratio_char_bond:=1.5; MCat(.5, .5)(<30,?6,6:O,3:NH) %<<== default + ratio_char_bond:=2.0; MCat( 1, .5)(<30,?6,6:O,3:NH) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("1.0",(0,1bp)); label.urt("1.5",(0.36w,1bp)); @@ -875,12 +857,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_bondgap_bond") fsize:=(60mm,12mm); - ratio_bondgap_bond:=0.10; - MCat(0.1, .5)(<30,Ph) - ratio_bondgap_bond:=0.15; %<<== default - MCat(.55, .5)(<30,Ph) - ratio_bondgap_bond:=0.20; - MCat(1 , .5)(<30,Ph) + ratio_bondgap_bond:=0.10; MCat(0.1, .5)(<30,Ph) + ratio_bondgap_bond:=0.15; MCat(.55, .5)(<30,Ph) %<<== default + ratio_bondgap_bond:=0.20; MCat(1 , .5)(<30,Ph) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.10",(0,1bp)); label.urt("0.15",(0.36w,1bp)); @@ -890,12 +869,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_atom_bond") fsize:=(60mm,12mm); - ratio_atom_bond:=0.25; - MCat(0.1, .5)(<30,?6,3:O) - ratio_atom_bond:=0.33; %<<== default - MCat(.55, .5)(<30,?6,3:O) - ratio_atom_bond:=0.45; - MCat(1, .5)(<30,?6,3:O) + ratio_atom_bond:=0.25; MCat(0.1, .5)(<30,?6,3:O) + ratio_atom_bond:=0.33; MCat(.55, .5)(<30,?6,3:O) %<<== default + ratio_atom_bond:=0.45; MCat(1, .5)(<30,?6,3:O) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.25",(0,1bp)); label.urt("0.33",(0.36w,1bp)); @@ -905,12 +881,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_wedge_bond") fsize:=(70mm,12mm); - ratio_wedge_bond:=0.1; - MCat(0.05, .5)(?6,4:*/_) - ratio_wedge_bond:=0.12; %<<== default - MCat(.55, .5)(?6,4:*/_) - ratio_wedge_bond:=0.2;; - MCat(1 , .5)(?6,4:*/_) + ratio_wedge_bond:=0.1; MCat(0.05,.5)(?6,4:*/_) + ratio_wedge_bond:=0.12; MCat(.55, .5)(?6,4:*/_) %<<== default + ratio_wedge_bond:=0.2; MCat(1 , .5)(?6,4:*/_) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.10",(0,1bp)); label.urt("0.12",(0.36w,1bp)); @@ -918,15 +891,12 @@ beginfigm("EN:ratio_wedge_bond") ) endfigm %*********************************************************************** -beginfigm("EN:ratio_atomgap_atom") +beginfigm("EN:ratio_atomgap_atom",":<30,!2`0.5,2:O") fsize:=(70mm,12mm); sw_frame:=sw_frame+Atom; - ratio_atomgap_atom:=0.00; - MCat(0, .5)(<30,!2`0.5,2:O) - ratio_atomgap_atom:=0.050; %<<== default - MCat(.5,.5)(<30,!2`0.5,2:O) - ratio_atomgap_atom:=0.12; - MCat(1, .5)(<30,!2`0.5,2:O) + ratio_atomgap_atom:=0.00; MCat(0, .5)(scantokens(mc)) + ratio_atomgap_atom:=0.050; MCat(.5,.5)(scantokens(mc)) %<<== default + ratio_atomgap_atom:=0.12; MCat(1, .5)(scantokens(mc)) ext(defaultscale:=0.75; labeloffset:=1bp; label.urt("0.00",(0.05w,1bp)); label.urt("0.05",(0.45w,1bp)); @@ -936,12 +906,9 @@ endfigm %*********************************************************************** beginfigm("EN:ratio_chain_ring") fsize:=(70mm,12mm); - ratio_chain_ring:= 0.4; - MCat(0.05, .5)(<30,?6,4:/!) - ratio_chain_ring:= 0.66; %<<== default - MCat(.45, .5)(<30,?6,4:/!) - ratio_chain_ring:= 1; - MCat(1, .5)(<30,?6,4:/!) + ratio_chain_ring:= 0.4; MCat(0.05,.5)(<30,?6,4:/!) + ratio_chain_ring:= 0.66; MCat(.45, .5)(<30,?6,4:/!) %<<== default + ratio_chain_ring:= 1; MCat(1, .5)(<30,?6,4:/!) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.40",(0,1bp)); label.urt("0.66",(0.3w,1bp)); @@ -949,14 +916,11 @@ beginfigm("EN:ratio_chain_ring") ) endfigm %*********************************************************************** -beginfigm("EN:ratio_hashgap_bond") +beginfigm("EN:ratio_hashgap_bond",":<30,!2,2:/*_`1.5") fsize:=(70mm,15mm); - ratio_hashgap_bond:=0.06; - MCat(0.08, .5)(<30,!2,2:/*_`1.5) - ratio_hashgap_bond:=0.12; %<<== default - MCat( .55, .5)(<30,!2,2:/*_`1.5) - ratio_hashgap_bond:=0.20; - MCat(1, .5)(<30,!2,2:/*_`1.5) + ratio_hashgap_bond:=0.06; MCat(0.08,.5)(scantokens(mc)) + ratio_hashgap_bond:=0.12; MCat( .55,.5)(scantokens(mc)) %<<== default + ratio_hashgap_bond:=0.20; MCat(1, .5)(scantokens(mc)) ext(defaultscale:=0.6; labeloffset:=1bp; label.urt("0.06",(0,1bp)); label.urt("0.12",(0.4w,1bp)); @@ -994,25 +958,25 @@ beginfigm("EN:Switwch trimming") MCat(.8,.7)(Ph) endfigm %*********************************************************************** -beginfigm("EN:Switwch Expand") +beginfigm("EN:Switwch Expand",":<30,Ph,4:/COOH,3:/NH2") fsize:=(60mm,20mm); - MCat(0, .5)(<30,Ph,4:/COOH,3:/NH2) + MCat(0, .5)(scantokens(mc)) sw_expand:=1; - MCat(1, .5)(<30,Ph,4:/COOH,3:/NH2) + MCat(1, .5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:Switwch abbreviate group") +beginfigm("EN:Switwch abbreviate group",":<30,Ph,4:/Cl,3:/F") fsize:=(60mm,12mm); - MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) + MCat(.15, .5)(scantokens(mc)) sw_abbreviate:=Group; - MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) + MCat(.85, .5)(scantokens(mc)) endfigm %*********************************************************************** -beginfigm("EN:Switwch abbreviate bondtype") +beginfigm("EN:Switwch abbreviate bondtype",":<30,Ph,4:/Cl,3:/F") fsize:=(60mm,12mm); - MCat(.15, .5)(<30,Ph,4:/Cl,3:/F) + MCat(.15, .5)(scantokens(mc)) sw_abbreviate:=Bond; - MCat(.85, .5)(<30,Ph,4:/Cl,3:/F) + MCat(.85, .5)(scantokens(mc)) endfigm %*********************************************************************** beginfigm("EN:Switwch font frame 1") diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf index 9ed8f10d2b6..021454e35db 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex index b7e40578547..123b478879b 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format manual by Akira Yamaji 2022.01.22 +% Molecular Coding Format manual by Akira Yamaji 2022.02.13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[a4paper]{article} \usepackage[pdftex]{graphicx} diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf index 3e5dcc6e0a6..e72c6890155 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex index 8033148e4cb..998d7378b47 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2022.01.22 +% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2022.02.20 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% ** mcf2graph.mp must be version 4.79 +% ** mcf2graph.mp must be version 4.80 % ** use mcf_data_base.mcf \documentclass{article} %------------------------------------------------------------------------------ @@ -50,35 +50,26 @@ \begin{verbatim} beginfigm("EN:Erythromycin","MW:733.93") fsize:=(120mm,30mm); - MC( - <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, - 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, - {6^35,11,12^-35}:*/OH, - @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, - @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! - ) - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm));) + MC(<30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, + 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, + {6^35,11,12^-35}:*/OH, + @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, + @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!) + ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm)); + label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));) endfigm; \end{verbatim} %---------------------------------------------------------------------------- \begin{mplibcode} beginfigm("EN:Erythromycin","MW:733.93") fsize:=(120mm,30mm); - MC( - <30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, - 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, - {6^35,11,12^-35}:*/OH, - @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, - @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?! - ) - ext(defaultscale:=0.8; - label.lrt("fm: "&cal_FM,(0,h-5mm)); - label.lrt("mw: "&cal_MW,(0,h-9mm)); - label.lrt("MW: "&inf_MW,(0,h-13mm)); - ) + MC(<30,#1,<-120,60,60,60,-60,60,60,-60,60,60,60,-60,60,60,##,&1, + 14:O,13:/*Et,{1,9}://O,{2',4,6^-35,8,10',12^35}:/*_, + {6^35,11,12^-35}:*/OH, + @$3,\*,O,30~zb,|,?6`.7,6:O,#.5,{5~wf,3^35}:/_,4:/*OH,3^-35:/*O!,##, + @$5,\*^30`1.7,O,!~zb,|,?6`.7,6:O,#.5,5:/*_,2:*/OH,3:/*N?!) + ext(defaultscale:=0.8; label.lrt("fm: "&cal_FM,(0,h-5mm)); + label.lrt("mw: "&cal_MW,(0,h-9mm)); label.lrt("MW: "&inf_MW,(0,h-13mm));) endfigm; \end{mplibcode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -93,9 +84,11 @@ beginfigm("EN:Paclitaxel","MW:853.918", ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph, ", ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr ") %--------------------------------------------------------------------- - fsize:=(140mm,30mm); if check(mc)=0: MCat(0,0.5)(scantokens(mc)) fi - sw_numbering:=Atom; if check(mc)=0: MCat(0.6,0.5)(scantokens(mc)) fi - sw_numbering:=Bond; if check(mc)=0: MCat(1,0.5)(scantokens(mc)) fi + fsize:=(140mm,30mm); + if check(mc)=0: MCat(0,0.5)(scantokens(mc)) + sw_numbering:=Atom; MCat(0.6,0.5)(scantokens(mc)) + sw_numbering:=Bond; MCat(1,0.5)(scantokens(mc)) + fi endfigm \end{verbatim} %---------------------------------------------------------------------------- @@ -107,9 +100,11 @@ beginfigm("EN:Paclitaxel","MW:853.918", ": @1,\,O,!,//O,!,*/OH,!,/Ph,60~wf,NH,-60,//O,60,Ph, ", ": @7,\*,O,-45,//O,60,Ph,11:*/OCO!>rl,12:/*OCO!^-15>lr ") %--------------------------------------------------------------------- - fsize:=(140mm,30mm); if check(mc)=0: MCat(0,0.5)(scantokens(mc)) fi - sw_numbering:=Atom; if check(mc)=0: MCat(0.6,0.5)(scantokens(mc)) fi - sw_numbering:=Bond; if check(mc)=0: MCat(1,0.5)(scantokens(mc)) fi + fsize:=(140mm,30mm); + if check(mc)=0: MCat(0,0.5)(scantokens(mc)) + sw_numbering:=Atom; MCat(0.6,0.5)(scantokens(mc)) + sw_numbering:=Bond; MCat(1,0.5)(scantokens(mc)) + fi endfigm \end{mplibcode} %---------------------------------------------------------------------------- -- cgit v1.2.3