#!/usr/bin/env escript
%% -*- erlang -*-
main([InFile,OutFile]) ->
{ok,In} = file:open(InFile,read),
{ok,Out} = file:open(OutFile,write),
write_file(Out, read_file(In)),
file:close(In),
file:close(Out).
write_file(D, {ok,Ms}) ->
io:format(D,'-define(dh_default_groups,~n ~p~n ).~n',[Ms]).
one_line(Line, Acc) when is_binary(Line) ->
one_line(binary_to_list(Line), Acc);
one_line("#"++_, Acc) ->
Acc;
one_line(Line, Acc) when is_list(Line) ->
try
[_Time,_Type,_Tests,_Tries,Size,G,P] = string:tokens(Line," \r\n"),
[{list_to_integer(Size),
{list_to_integer(G), list_to_integer(P,16)}
} | Acc]
catch
_:_ -> io:format("*** skip line ~p",[Line]),
Acc
end.
collect_per_size(L) ->
lists:foldr(
fun({Sz,GP}, [{Sz,GPs}|Acc]) -> [{Sz,[GP|GPs]}|Acc];
({Sz,GP}, Acc) -> [{Sz,[GP]}|Acc]
end, [], lists:sort(L)).
read_file(D) ->
read_file(D, []).
read_file(D, Acc) ->
case io:get_line(D,"") of
{error,Error} ->
{error,Error};
eof ->
{ok, collect_per_size(Acc)};
Data ->
read_file(D, one_line(Data,Acc))
end.