#!/usr/bin/perl

my %loop = (boot => 'loop0', always => 'loop1', totem => 'loop2');

sub check {
    my ($loop, $file) = @_;
    `sudo losetup /dev/$loop 2>/dev/null` =~ m!/$file!;
}

sub name2file { 
    my ($name) = @_;
    "live_tree_$name.clp";
}

sub to_memory {
    my ($loop, $file) = @_;

    return if -e "/tmp/$file";

    if (-e "/$file") {
	system("sudo mv /$file /tmp");
    } else {
	system("sudo cp /image_raw/$file /tmp");
    }
    system("sudo losetup /dev/$loop /tmp/$file");
}

sub to_cdrom {
    my ($loop, $file) = @_;
    my $f = -e "/$file" ? "/$file" : -e "/tmp/$file" ? "/tmp/$file" : return;
    system("sudo losetup /dev/$loop /image_raw/$file");
    system("sudo rm $f");
}

sub usage() { die "usage: mdk_move_loop <to_cdrom | to_memory> [names ...]\n" }

my ($direction, @names) = @ARGV;
my $f = $direction eq 'to_memory' && \&to_memory || $direction eq 'to_cdrom' && \&to_cdrom;
$f && @names or usage();

foreach my $name (@names) {
    my $loop = $loop{$name} or die "unknown name $name\n";
    my $file = name2file($name);
    check($loop, $file) or next;
    $f->($loop, $file);
}