anchor.diff:              match rowlist with
               | [] -> failwith "Error parsing rates."
               | hd::tl ->
  +                // flds will be two entries: rate, endsample
                   let flds = splitstr hd 
                   try 
                       // newrate        ,    newsmpl                      , newrows
  
positive.code:                 | (r, e, s)::_ -> e + (float (newsmpl - s)/newrate) 
              (newrate, endtime, newsmpl)::acc
          // If finished with rates, return the accumulated list
          if n >= nrates then {finfo with Rates = (List.rev acc')}, newrows
          else parseRate newrows acc' (n+1)
      parseRate (List.tail rows) [] 1 
  
  
negative.code: // Read header information from the chf file. 
  let readComtradeHeader (finfo:UdFileInformation) = 
      // Create a new Comtrade file info record
      let cinfo = {Version = 0u 
                   StationName = ""
                   RecorderName = ""
                   NumAnalogs = 0u
                   Analogs = []
                   NumDigitals = 0u
                   Digitals = []
                   NominalFreq = 0.0
                   Rates = [] // Each entry of list is a tuple: rate, endTimeForThisRate, endSampleForThisRate
                   NumSamples = 0u // This is identical to endSample for the last entry of the rates list
                   StartTime = DateTime(1970,1,1)
                   TrigTime = DateTime(1970,1,1)
                   FileType = ComtradeDatFileFmt.Ascii
                   TimeMult = None
                   TimeCode = None
                   TimeQual = None
                   DataPtr = []}
      // Get a view into a memory-mapped file
      use mm = getMMView 0L finfo.FileName 
      // Make a TextReader out of the mmview stream
  