Tektronix Binary File Loader
ikonen
function loadTEKbinary(filenamestr)
string filenamestr
variable fileref
if (strlen(filenamestr))
Open /R /T=".isf" fileref as filenamestr
else
Open /R /T=".isf" fileref
endif
if (!(strlen(S_filename)))
print "Cancelled"
return 0
endif
// string shortname = S_filename[StrSearchBack(S_filename, ":") + 1, strlen(S_filename) - 5]
string shortname = S_filename[strsearch(S_filename, ":",Inf,1) + 1, strlen(S_filename) - 5]
string preamble,curvestring
FreadLine /N=8 fileref, preamble
if (!stringmatch(preamble, ":WFMPRE:" ))
print "Missing preamble"
endif
FreadLine /T=":" fileref, preamble
// print preamble
// The Tek form preamble can be used as a keyword string list with list separator ";" and keyseparator " "
variable delx,ptoff,xzero,ymult,yoff,yzero,sizeitemsnum,numbytes,byteorder,bytetype
variable numitems
delx = NumberByKey("XINCR", preamble," ",";")
ptoff = NumberByKey("PT_OFF", preamble," ",";")
xzero = NumberByKey("XZERO", preamble," ",";")
ymult = NumberByKey("YMULT", preamble," ",";")
yoff = NumberByKey("YOFF", preamble," ",";")
yzero = NumberByKey("YZERO", preamble," ",";")
FreadLine /N=7 fileref, curvestring
if (!stringmatch(curvestring, "CURVE #" ))
print "Missing Binary Start String, 'CURVE #'"
return 0
endif
FreadLine /N = 1 fileref, curvestring
sizeitemsnum = str2num(curvestring)
FreadLine /N = (sizeitemsnum) fileref, curvestring
numbytes = str2num(curvestring)
strswitch(StringByKey("BYT_OR", preamble," ",";"))
case "MSB": // execute if case matches expression
byteorder = 2
break // exit from switch
case "LSB": // execute if case matches expression
byteorder = 3
break
endswitch
switch(NumberByKey("BYT_NR", preamble," ",";"))
case 1: // execute if case matches expression
bytetype = 1
numitems = numbytes
// make /o /b /n = (numbytes) intwave
break // exit from switch
case 2: // execute if case matches expression
bytetype = 2
numitems = numbytes / 2
// make /o /i /n = (numbytes / 2) intwave
break
endswitch
make /o /d /n = (numitems) $shortname
wave thewave = $shortname
if (stringmatch(StringByKey("BN_FMT", preamble," ",";"),"RI"))
Fbinread /B=(byteorder) /F=(bytetype) fileref, thewave
else
Fbinread /B=(byteorder) /F=(bytetype) /U fileref, thewave
endif
thewave = (thewave - yoff) * ymult + yzero
SetScale d, -10, 10, StringByKey("YUNIT",preamble," ",";") thewave
SetScale /P x, (xzero - ptoff *delx), delx, StringByKey("XUNIT",preamble," ",";") thewave
// SetScale /P x, ptoff, delx, "" thewave
Note /K thewave, StringByKey("WFID",preamble," ",";")
close fileref
return 1
end
string filenamestr
variable fileref
if (strlen(filenamestr))
Open /R /T=".isf" fileref as filenamestr
else
Open /R /T=".isf" fileref
endif
if (!(strlen(S_filename)))
print "Cancelled"
return 0
endif
// string shortname = S_filename[StrSearchBack(S_filename, ":") + 1, strlen(S_filename) - 5]
string shortname = S_filename[strsearch(S_filename, ":",Inf,1) + 1, strlen(S_filename) - 5]
string preamble,curvestring
FreadLine /N=8 fileref, preamble
if (!stringmatch(preamble, ":WFMPRE:" ))
print "Missing preamble"
endif
FreadLine /T=":" fileref, preamble
// print preamble
// The Tek form preamble can be used as a keyword string list with list separator ";" and keyseparator " "
variable delx,ptoff,xzero,ymult,yoff,yzero,sizeitemsnum,numbytes,byteorder,bytetype
variable numitems
delx = NumberByKey("XINCR", preamble," ",";")
ptoff = NumberByKey("PT_OFF", preamble," ",";")
xzero = NumberByKey("XZERO", preamble," ",";")
ymult = NumberByKey("YMULT", preamble," ",";")
yoff = NumberByKey("YOFF", preamble," ",";")
yzero = NumberByKey("YZERO", preamble," ",";")
FreadLine /N=7 fileref, curvestring
if (!stringmatch(curvestring, "CURVE #" ))
print "Missing Binary Start String, 'CURVE #'"
return 0
endif
FreadLine /N = 1 fileref, curvestring
sizeitemsnum = str2num(curvestring)
FreadLine /N = (sizeitemsnum) fileref, curvestring
numbytes = str2num(curvestring)
strswitch(StringByKey("BYT_OR", preamble," ",";"))
case "MSB": // execute if case matches expression
byteorder = 2
break // exit from switch
case "LSB": // execute if case matches expression
byteorder = 3
break
endswitch
switch(NumberByKey("BYT_NR", preamble," ",";"))
case 1: // execute if case matches expression
bytetype = 1
numitems = numbytes
// make /o /b /n = (numbytes) intwave
break // exit from switch
case 2: // execute if case matches expression
bytetype = 2
numitems = numbytes / 2
// make /o /i /n = (numbytes / 2) intwave
break
endswitch
make /o /d /n = (numitems) $shortname
wave thewave = $shortname
if (stringmatch(StringByKey("BN_FMT", preamble," ",";"),"RI"))
Fbinread /B=(byteorder) /F=(bytetype) fileref, thewave
else
Fbinread /B=(byteorder) /F=(bytetype) /U fileref, thewave
endif
thewave = (thewave - yoff) * ymult + yzero
SetScale d, -10, 10, StringByKey("YUNIT",preamble," ",";") thewave
SetScale /P x, (xzero - ptoff *delx), delx, StringByKey("XUNIT",preamble," ",";") thewave
// SetScale /P x, ptoff, delx, "" thewave
Note /K thewave, StringByKey("WFID",preamble," ",";")
close fileref
return 1
end
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More