#pragma TextEncoding = "UTF-8" #pragma rtGlobals = 3 #pragma IgorVersion = 8.0 #pragma DefaultTab = {3,20,4} //________________________________________________________________________________________________ // Written by Stephan Thuermer - https://www.wavemetrics.com/user/chozo // version 2025-04-17 //________________________________________________________________________________________________ function/S readIBWname(string path) // reads wave name from .ibw file int fileID, version Open/Z/R fileID as path if (V_flag != 0) return "" endif FBinRead/B=3/F=2/U fileID, version int length = 20 + 12*(version>3) int offset = 6 + 8*(version==1) + 16*(version==2) + 20*(version==3) + (64 + 22)*(version>3) if (version > 5) FSetPos fileID, 56 FBinRead/B=3/F=2/U fileID, length FStatus fileID offset = V_logEOF-length endif string name = PadString("", length, char2num(" ")) FSetPos fileID, offset FBinRead fileID, name Close fileID return UnpadString(name,0) end // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function/S readIBWnotes(string path) // reads wave notes from .ibw file int fileID, version, chckSum = 0, wSize = 0, nSize = 0, fSize = 0 Open/Z/R fileID as path if (V_flag != 0) return "" endif FBinRead/B=3/F=2/U fileID, version if (version < 2) return "" endif if (version > 3) FBinRead/B=3/F=2/U fileID, chckSum // chckSum is only read to move position forward endif FBinRead/B=3/F=3/U fileID, wSize if (version > 3) FBinRead/B=3/F=3/U fileID, fSize endif FBinRead/B=3/F=3/U fileID, nSize if (version <= 3) FBinRead/B=3/F=3/U fileID, fSize endif int offset = wSize + fSize + 8*(version==1) + 16*(version==2) + 20*(version==3) + 64*(version>3) string notes = PadString("", nSize, char2num(" ")) FSetPos fileID, offset FBinRead fileID, notes Close fileID return notes end // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function/Wave readIBWdimensions(string path) // reads total no. of points and dimension size (if available) from .ibw file into free wave int fileID, version, points Open/Z/R fileID as path if (V_flag != 0) return $"" endif FBinRead/B=3/F=2/U fileID, version int offset = version > 3 ? 12 + 64 : 42 + 8*(version==1) + 16*(version==2) + 20*(version==3) Make/D/Free/N=(version > 3 ? 5 : 1) output // output is: [total points, p, q, r, s] or just [total points] for files with version < 5. FSetPos fileID, offset FBinRead/B=3/F=3/U fileID, points output[0] = points if (version > 3) offset = 68 + 64 Make/D/Free/N=(4) dims FSetPos fileID, offset FBinRead/B=3/F=3/U fileID, dims output[1,4] = dims[p-1] endif Close fileID return output end