anchor.diff:        "    --help  -h~n"
         "          Show help~n"
         "    --version  -V~n"
  -      "          Show version~n"
  +      "          Show interface version~n"
         , [gpb:version_as_string(), ?MODULE, ?MODULE, ?MODULE]).
   
   show_version() ->
  -    io:format("gpb version ~s~n", [gpb:version_as_string()]).
  +    io:format("gpb interface version ~s~n", [gpb:version_as_string()]).
   
   parse_opts(Args, PlainArgs) ->
       arg_zf(fun parse_opt/1, Args) ++ plain_arg_zf(fun parse_opt/1, PlainArgs).
  
positive.code: %% @doc This function is intended as a command line interface for the compiler.
  %% Call it from the command line as follows:
  %% ```
  %%    erl <erlargs> [gpb-opts] -s gpb_compile c ProtoFile.proto
  %%    erl <erlargs> -s gpb_compile c ProtoFile.proto -extra [gpb-opts]
  %% '''
  %% The `<erlargs>' can be `-noshell -noinput +B -boot start_clean -pa SomeDir'
  %%
  
negative.code: %%   <dt>`--version' or `-V'</dt>
  %%   <dd>Show the version number of gpb.</dd>
  %% </dl>
  %% If several files are specified, each is compiled individually, no
  %% checking is done for instance for multiply defined messages or
  %% fields across files, such as the `protoc' does.
  -spec c([string() | atom()]) -> no_return().
  c([F | _]=Files) when is_atom(F); is_list(F) -> %% invoked with -s or -run
      FileNames = [if File == undefined -> undefined;
                      is_atom(File)     -> atom_to_list(File);
                      is_list(File)     -> File
                   end
                   || File <- Files],
      Args = init:get_arguments(),
      PlainArgs = init:get_plain_arguments(),
      Opts1 = parse_opts(Args, PlainArgs),
      Opts2 = [report_warnings, report_errors] ++ Opts1,
      [case determine_cmdline_op(Opts2, FileName) of
           error  ->
               show_help(),
               halt(1);
           show_help  ->
               show_help(),
               halt(0);
           show_version  ->
               show_version(),
               halt(0);
           compile ->
               case file(FileName, Opts2) of
                   ok ->
                       halt(0);
                   {error, _Reason} ->
                       halt(1)
               end
       end
       || FileName <- FileNames],
      timer:sleep(infinity). %% give init:stop time to do its work
  
  determine_cmdline_op(Opts, FileName) ->
  