671af8c4a2d223c7d2e2ede3a0154975

Nintendo DS roms and saves rename utility.
I hope someone give general erlang ideas about code. I'm a new erlanger.
Best regards.

endsrename.erl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
-module(endsrename).
-author('Eduard Bondarenko <edbond@gmail.com>').

-compile(export_all).

cleanup_title(C,A) when (C>64) and (C<123) -> A++[C];
cleanup_title(C,A) when (C>47) and (C<58) -> A++[C];
cleanup_title(_C, A) ->
  %% squeeze
  L=lists:last(A),
  case L of
    $_ -> A;
    _ -> A++[$_]
  end.

matches(Romname, Save) ->
  Regexp = ".*"++string:to_lower(Romname)++".*",
  case regexp:first_match(Save, Regexp) of
    {match, _Start, _Length} -> true;
    _ -> false
  end.

rename_save(Romname, CleanRomname) ->
  Saves = lists:map(fun(F) -> string:to_lower(filename:basename(F)) end, filelib:wildcard("../SAVE/*.*")),
  %% find savename that matches original romname
  Savename = lists:filter(fun(S) -> matches(Romname, S) end, Saves),
  case length(Savename) of
    0 -> Cmd = void;
    _ -> Cmd = "mv '../SAVE/"++hd(Savename)++"' '../SAVE/"++CleanRomname++".sav'"
  end,
  Cmd.

rename_rom(Filename) ->
  Romname = filename:rootname(Filename),
  {ok, FH}=file:open(Filename, [read,binary]),

  {ok, <<Offset:32/little>>}=file:pread(FH, 16#68, 4),
  {ok, <<UCSTitle/binary>>}=file:pread(FH, Offset+4+28+512+32+256, 256),
  Title = lists:filter(fun(X) -> X /= 0 end, binary_to_list(UCSTitle)),
  CleanRomname = lists:foldl(fun(X, A) -> cleanup_title(X,A) end, [], Title),

  if Romname /= CleanRomname ->
    Cmd = "mv '"++Romname++".nds' '"++CleanRomname++".nds'",
    SaveCmd = rename_save(Romname,CleanRomname);
  true ->
    Cmd = void,
    SaveCmd = void
  end,
  [Cmd, SaveCmd].

output(void) -> true;
output(Cmd) -> io:format("~s~n", [Cmd]).

init() ->
  Roms = filelib:wildcard("*.nds"),

  %% TODO: spawn process for each file?
  Cmds = lists:flatmap(fun(X) -> rename_rom(X) end, Roms),
  %% output
  lists:map(fun(C) -> output(C) end, Cmds),
  halt().

Refactorings

No refactoring yet !

Your refactoring





Format Copy from initial code

or Cancel