//$MENU window=entry;popup=VNTR;insertpopupafter=Sequence;name=Show VNTR report XMLNODE xmldoc,rootnode,node,node1,node2; string error,rp,vntrcharsetname,vntrfragsetname,key; integer i,nr,nr2; integer vntrcount; string vntr_name[],vntr_fprint[]; integer vntr_offset[],vntr_length[],vntr_minval[],vntr_maxval[],vntr_tol[]; DIALOG dlg; CHARSET cs,cs2; float vl; vntrcharsetname="VNTR_vals"; vntrfragsetname="VNTR_frags"; key=DbCurrentKey; if key="" then key="MLVA-001"; //read file vntrcount=0; xmldoc=XMLNodeReadFile(DbGetPath+"\VNTR_sett.xml",error); if (error="") and XMLNodeIsValid(xmldoc) then { rootnode=XMLNodeGetChild(xmldoc,"VNTRSETT"); if XMLNodeIsValid(rootnode) then { node1=XMLNodeGetChild(rootnode,"VNTRS"); if XMLNodeIsValid(node1) then { for i=1 to XMLNodeGetChildCount(node1) do { node2=XMLNodeGetChildByNr(node1,i); vntrcount=vntrcount+1; vntr_name[vntrcount]=XMLNodeGetText(XMLNodeGetChild(node2,"Name")); vntr_fprint[vntrcount]=XMLNodeGetText(XMLNodeGetChild(node2,"FprintType")); vntr_offset[vntrcount]=val(XMLNodeGetAttrib(node2,"Offset")); vntr_length[vntrcount]=val(XMLNodeGetAttrib(node2,"RepeatLength")); vntr_minval[vntrcount]=val(XMLNodeGetAttrib(node2,"MinCount")); vntr_maxval[vntrcount]=val(XMLNodeGetAttrib(node2,"MaxCount")); vntr_tol[vntrcount]=val(XMLNodeGetAttrib(node2,"Tolerance")); } } } } XMLNodeCloseDocument(xmldoc); ChrLoad(cs,key,vntrcharsetname); ChrLoad(cs2,key,vntrfragsetname); for i=1 to vntrcount do { rp=rp+vntr_name[i]+" : "; nr=ChrFindName(cs,vntr_name[i]); if (nr=0) or not(ChrGetPresent(cs,nr)) then rp=rp+"?"; else { vl=ChrGetVal(cs,nr); rp=rp+str(vl,2,0)+" ; predicted: "+str(vntr_offset[i]+vl*vntr_length[i],3,0); nr2=ChrFindName(cs,vntr_name[i]); if (nr2=0) or not(ChrGetPresent(cs2,nr2)) then rp=rp+" ; ?"; else { vl=ChrGetVal(cs2,nr2); rp=rp+" ; observed: "+str(vl,4,1); } } rp=rp+"~n"; } DlgAddEdit(dlg,rp,15,15,400,400); dlgshow(dlg,key,430,550);