anchor.diff:  file(File) ->
       file(File, []).
   
  -%% @spec file(File) -> ok | {error, Reason}
  +%% @spec file(File, Opts) -> ok | {error, Reason}
   %%            File = string()
   %%            Opts = [Opt]
  -%%            Opt  = {i,directory()}
  +%%            Opt  = {i,directory()} |
  +%%                   {type_specs, boolean()}
  +%%
  +%% Compile a .proto file to a .erl file and to a .hrl file.
  +%%
  +%% The generated .erl file will use the `gpb' module for runtime
  +%% support for encoding and decoding.
  +%%
  +%% The File must not include path to the .proto file. Example:
  +%% "SomeDefinitions.proto" is ok, while "/path/to/SomeDefinitions.proto"
  +%% is not ok.
  +%%
  +%% The .proto file is expected to be found in a directories specified by an
  +%% `{i,directory()}' option. It is possible to specify `{i,directory()}'
  +%% several times, they will be search in the order specified.
  +%%
  +%% The `{type_specs,boolean()}' option enables or disables `::Type()'
  +%% annotations in the generated .hrl file. Default is currently
  +%% `false'. If you set it to `true', you may get into troubles for
  +%% messages referencing other messages, when compiling the generated
  +%% files.
   file(File, Opts) ->
       case parse_file(File, Opts) of
           {ok, Defs} ->
  
positive.code:                               true               -> "" %% last entry
                             end,
                  FieldTxt1 = indent(Indent, f("~w~s", [Name, DefaultStr])),
                  LineUpStr1 = lineup(iolist_size(FieldTxt1), 32),
                  FieldTxt2 = f("~s~s:: ~s~s", [FieldTxt1, LineUpStr1,
                                                TypeStr, CommaSep]),
                  LineUpStr2 = lineup(iolist_size(FieldTxt2), 54),
                  f("~s~s% = ~w, ~w",
                    [FieldTxt2, LineUpStr2, FNum, Type])
  
negative.code:             Mod = list_to_atom(filename:basename(File, Ext)),
              Erl = change_ext(File, ".erl"),
              Hrl = change_ext(File, ".hrl"),
              file:write_file(Erl, format_erl(Mod, Defs, Opts)),
              file:write_file(Hrl, format_hrl(Mod, Defs, Opts));
          {error, _Reason} = Error ->
              Error
      end.
  