anchor.diff:       f("~p(<<>>, AccSeq) ->~n", [FnName]),
        f("    AccSeq.~n")].
   
  -format_dpacked_vi(MsgName, #field{name=FName, type=Type}) ->
  +format_dpacked_vi(MsgName, #field{name=FName, type=Type}, Opts) ->
       FnName = mk_fn(d_packed_field_, MsgName, FName),
       BValueExpr = "X bsl (N*7) + Acc",
  -    {FValueCode, RestVar} = mk_unpack_vi(4, "FValue", BValueExpr, Type, "Rest"),
  +    {FValueCode, RestVar} = mk_unpack_vi(4, "FValue", BValueExpr, Type, "Rest",
  +                                         Opts),
       [f("~p(<<1:1, X:7, Rest/binary>>, N, Acc, AccSeq) ->~n", [FnName]),
        f("    ~p(Rest, N+1, X bsl (N*7) + Acc, AccSeq);~n", [FnName]),
        f("~p(<<0:1, X:7, Rest/binary>>, N, Acc, AccSeq) ->~n", [FnName]),
  
positive.code: %%
  %% Indent the code to Indent spaces.
  %% The resulting code contains one or more statements that ends with comma.
  mk_unpack_vi(Indent, FValueVar, BValueExpr, Type, RestVar) ->
      Rest2Var = RestVar ++ "2",
      case Type of
          sint32 ->
  
negative.code:         fixed64  -> format_dpacked_nonvi(MsgName, FieldDef, 64, 'little');
          sfixed64 -> format_dpacked_nonvi(MsgName, FieldDef, 64, 'little-signed');
          double   -> format_dpacked_nonvi(MsgName, FieldDef, 64, 'little-float');
          _        -> format_dpacked_vi(MsgName, FieldDef, Opts)
      end.
  
  format_dpacked_nonvi(MsgName, #field{name=FName}, BitLen, BitType) ->
  