#!/bin/sh
# -*- perl -*-
# This code allows us to start perl from our path or an environment variable
# rather than hardcoding a path into the #! line.  It works from sh or csh.
(exit $?0) && eval 'exec ${QPERLQ-perl} -x $0 ${1+"$@"}'
if (! $?QPERLQ) setenv QPERLQ perl
exec $QPERLQ -x $0 $argv:q

#!/usr/local/bin/perl -w
#
# $Id: read_one_block,v 1.2 1998/05/10 14:29:51 ejb Exp $
# $Source: /home/ejb/scripts/RCS/read_one_block,v $
# $Author: ejb $
#


use POSIX;
use strict;

my $whoami = ($0 =~ m,([^/]*)$,) ? $1 : $0;

my $blocksize = 18 * 1024;
my @blocks = @ARGV;
my $floppy = $ENV{"FLOPPY"} || die "$whoami: \$FLOPPY must be defined.\n";

for (@blocks)
{
    eval
    {
	open(F, "<$floppy") || die "$whoami: open $floppy: $!\n";
	my $buf = "";
	my $count = 0;
      loop:
	for ($count = 1; $count <= 5; $count++)
	{
	    eval
	    {
		seek(F, $_ * $blocksize, &SEEK_SET());
		sysread(F, $buf, $blocksize) || die "$whoami: sysread: $!\n";
		die "$whoami: short block\n" if (length($buf) != $blocksize);
	    };
	    last loop unless $@;
	}
	my $e = $@;
	close(F);
	die "$whoami: while writing block $_: $e" if ($e);
	open(B, ">$_") || die "$whoami: open $_: $!";
	print B $buf;
	close(B);
	printf("Wrote block $_ (after %d %s)\n", $count,
	       ($count == 1 ? 'try' : 'tries'));
    };
    warn $@ if $@;
}

sub usage
{
    die "Usage: $whoami block\n";
}
