+ }
+
+ my $units = do $datafile;
+ die "Cannot open unit data: $_\n" for $@ || $! || ();
+ my $grouped = !exists $get{order};
+ if (exists $get{order}) {
+ $get{order} ||= '';
+ if ($get{order} eq 'size') {
+ $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units;
+ }
+ elsif ($get{order} eq 'cost') {
+ $_->{order} = $_->{gas}*1.5 + $_->{min} + $_->{unit}/8 + $_->{build}/256/8 for @$units;
+ }
+ else {
+ $units->[$_]->{order} = $_ for 0 .. $#$units;
+ }
+ }
+ my @rows = $grouped ? @$units : sort {$a->{order} <=> $b->{order}} @$units;
+
+ my ($race, $cat) = ('', '');
+ for (@rows) {
+ $race = $_->{race},
+ printf '<tbody id="%s"><tr class="race"><th colspan="18"><h2>%s</h2>'."\n", $race, ucfirst $race
+ if $grouped and $race ne $_->{race};
+ $_->{cat} = $_->{race} if not $grouped;
+ print(
+ '<tr>',
+ sprintf('<t%s class="cat">%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')),
+ '<td>' . $_->{name},
+ showunitcols($_),
+ );