#!/usr/bin/env perl

# Make a simple data file of a argv[0]-specified size (understand "k",
# "m", and "g" suffixes) of a repeating pattern.

use strict;

my $size_arg = $ARGV[0];
$size_arg =~ m/^(\d+)/;
my $size = $1;
$size_arg =~ m/([mkg])$/i;
my $size_unit = lc($1);

if ($size_unit eq "k") {
    $size *= 1024;
} elsif ($size_unit eq "m") {
    $size *= 1048576;
} elsif ($size_unit eq "g") {
    $size *= 1073741824;
}
print "Generating size $size\n";

my $file = "data-" . lc($size_arg);
unlink($file);

my $line = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-;";
my $line_len = length($line);
$line .= $line;

open(FILE, ">$file") || die "Can't open file $file";
my $count = 0;
my $line_count = 0;
while ($count < $size) {
    my $offset = $line_count % $line_len;
    my $num_to_print = 
        ($size - $count < $line_len) ? $size - $count : $line_len;
    if ($num_to_print > 0) {
        my $printable = substr($line, $offset, $num_to_print - 1);
        print FILE $printable . "\n";
        $count += $num_to_print;
    }
    ++$line_count;
}
close(FILE);

exit(0);
