anchor.diff:                                 , {<<"utf8">>,encoding,utf8}
                                  , {<<"ansi">>,encoding,ansi}
                                  % , {<<"123">>,columnCount,123}  % specially treated
  +                               % , {<<"skip123">>,skip,123}
                                  ]).
   
   % gen_server
  
positive.code:     % ?LogDebug("select UnquotedFN ~p",[UnquotedFN]),
      {ok, Io} = file:open(UnquotedFN, [raw, read, binary]),
      CsvOpts = file_info(UnquotedFN, schema_to_opts(Schema)),
      ?LogDebug("CSV Schema Opts : ~p", [CsvOpts]),    
      read_blocks(Io, 0, ?CSV_INFO_BYTES, RowLimit, CsvOpts).
  
  select(#{io := Io, pos := Pos, blockSize := BlockSize, rowLimit := RowLimit, opts := CsvOpts}) ->
      read_blocks(Io, Pos, BlockSize, RowLimit, CsvOpts).
  
  read_blocks(Io, Pos, BlockSize, RowLimit, CsvOpts) ->
      read_blocks(Io, Pos, BlockSize, RowLimit, CsvOpts, []).
  
  read_blocks(Io, Pos, BlockSize, RowLimit, CsvOpts, Rows) -> 
      #{ lineSeparator := LineSeparator
       , columnSeparator := ColumnSeparator
       , columnCount := ColumnCount
       , columns := _Columns
       , header := _Header
       , encoding := _Encoding
       } = CsvOpts,
      LSL = byte_size(LineSeparator),
      case file:pread(Io, Pos, BlockSize) of
  
negative.code: -include_lib("kernel/include/file.hrl").
  
  -define(CSV_INFO_BYTES, 2 * 1024).
  -define(ALL_CSV_OPTS, [lineSeparator, columnSeparator, columnCount, columns, header, encoding, skip])).
  -define(ALL_CSV_SCHEMA_TOKENS, [ {<<"crlf">>,lineSeparator,<<"\r\n">>}
                                 , {<<"lf">>,lineSeparator,<<"\n">>}
                                 , {<<"tab">>,columnSeparator,<<"\t">>}
  