48 lines
1 KiB
Text
48 lines
1 KiB
Text
$ENTRY Go {
|
|
, <Arg 1>: {
|
|
= <Prout 'No filename given'>;
|
|
e.File, <ReadFile 1 e.File>: e.Text,
|
|
<Tally e.Text>: e.Counts
|
|
= <ShowLetterCounts (e.Counts) <Letters>>;
|
|
};
|
|
};
|
|
|
|
Letters {
|
|
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
};
|
|
|
|
ShowLetterCounts {
|
|
(e.T) = ;
|
|
(e.T) s.L e.Ls,
|
|
<Upper s.L>: s.UL, <Item (e.T) s.UL>: s.ULN,
|
|
<Lower s.L>: s.LL, <Item (e.T) s.LL>: s.LLN,
|
|
<+ s.ULN s.LLN>: s.Total
|
|
= <Prout s.UL s.LL ': ' <Symb s.Total>>
|
|
<ShowLetterCounts (e.T) e.Ls>;
|
|
};
|
|
|
|
ReadFile {
|
|
s.Chan e.Filename =
|
|
<Open 'r' s.Chan e.Filename>
|
|
<ReadFile (s.Chan)>;
|
|
(s.Chan), <Get s.Chan>: {
|
|
0 = <Close s.Chan>;
|
|
e.Line = e.Line '\n' <ReadFile (s.Chan)>;
|
|
};
|
|
};
|
|
|
|
Tally {
|
|
(e.T) = e.T;
|
|
(e.T) s.X e.Xs = <Tally (<Inc (e.T) s.X>) e.Xs>;
|
|
e.Xs = <Tally () e.Xs>;
|
|
}
|
|
|
|
Inc {
|
|
(e.1 (s.I s.N) e.2) s.I = e.1 (s.I <+ 1 s.N>) e.2;
|
|
(e.X) s.I = e.X (s.I 1);
|
|
};
|
|
|
|
Item {
|
|
(e.1 (s.I s.N) e.2) s.I = s.N;
|
|
(e.X) s.I = 0;
|
|
};
|