#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use feature 'unicode_strings';
use POSIX;
my $base = $ARGV[0];
if (!$base) {
$base = 16;
}
print("Base is $base\n");
my $row;
my $column;
my $code;
print " ";
for (my $i = 0; $i < $base; $i++) {
if ($base == 16) {
printf(" %x ", $i);
} else {
printf(" %d ", $i);
}
}
print "\n";
my $num_rows = ceil(127 / $base);
for ($row = 0; $row < $num_rows; $row++) {
my $rowstring;
if ($base == 16) {
$rowstring = sprintf(" %x ", $row);
} else {
$rowstring = sprintf(" %2d ", $row);
}
for ($column = 0; $column < $base; $column++) {
$code = ($row * $base) + $column;
if ($code < 32 or $code > 126) {
if ($code == 127) {
$code = 0x2421;
} elsif ($code > 127) {
$code = $code;
} else {
$code += 0x2400;
}
$rowstring .= (' '.chr($code).' ');
} else {
$rowstring .= (' '.chr($code).' ');
}
}
print("$rowstring\n");
}