#!/bin/csh -f
set device = /dev/nrst0
set mt = "mt -t $device"
alias do 'echo + "\!*"; \!*'
#
# This script examines a tape drive to determine:
#
# 1. does an empty file prevent access to the rest of the tape
# 2. must files be multiples of 512 bytes long?
#
set td = /tmp/et$$
mkdir $td
cd $td
foreach i (1 2 3 4)
echo "THIS IS SHORT ODD-SIZE FILE NUMBER $i ..." > so$i
echo "THIS IS LONG REGULAR FILE NUMBER $i ..." \
| dd conv=sync obs=10b > rf$i
end
do $mt rew
do dd if=so1 of=$device obs=112b
do dd if=so2 of=$device obs=112b
do dd if=so3 of=$device obs=112b
do dd if=so4 of=$device obs=112b
do $mt rew
do dd if=$device of=unload1 bs=112b
do dd if=$device of=unload2 bs=112b
do dd if=$device of=unload3 bs=112b
do dd if=$device of=unload4 bs=112b
foreach i (1 2 3 4)
cmp -s unload$i so$i
@ diff = $status
if ($diff) then
echo "FILES MUST BE MULTIPLES OF 512 BYTES"
goto test_zero
endif
end
echo "SHORT (<512 byte) BLOCKS ARE SUPPORTED"
set short_blocks
test_zero:
do $mt rew
do dd if=rf1 of=$device bs=10b
do dd if=rf2 of=$device bs=10b
set echo
dd of=$device bs=10b < /dev/null
unset echo
do dd if=rf3 of=$device bs=10b
do dd if=rf4 of=$device bs=10b
do $mt rew
rm -f unload*
do dd if=$device of=unload1
do dd if=$device of=unload2
do dd if=$device of=unload3
do dd if=$device of=unload4
foreach i (1 2)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "CANNOT DO EXPECTED THINGS"
goto cleanup
endif
end
foreach i (3 4)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "NULL FILES ARE NOT IGNORED WHEN READING"
goto try_fsf
endif
end
echo "NULL FILES ARE IGNORED WHEN READING"
set null_ignore_read
try_fsf:
do $mt rew
do $mt fsf 2
do dd if=$device of=unload3
do dd if=$device of=unload4
foreach i (3 4)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "NULL FILES ARE NOT IGNORED WHEN FORWARDING"
goto get_past
endif
end
echo "NULL FILES ARE IGNORED WHEN FORWARDING"
set null_ignore_fwd
get_past:
if (! $?null_ignore_read) then
do $mt rew
rm -f unload*
do dd if=$device of=unload1
do dd if=$device of=unload2
do dd if=$device of=unload_null
do dd if=$device of=unload3
do dd if=$device of=unload4
foreach i (1 2)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "CANNOT DO EXPECTED THINGS"
goto cleanup
endif
end
foreach i (3 4)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "CANNOT READ PAST NULL FILE"
goto try_fsf2
endif
end
echo "CAN READ PAST NULL FILE"
set null_read_past
endif
try_fsf2:
if (! $?null_ignore_fwd) then
$mt rew
$mt fsf 3
dd if=$device of=unload3
dd if=$device of=unload4
foreach i (3 4)
cmp -s unload$i rf$i
@ diff = $status
if ($diff) then
echo "CANNOT FAST FORWARD PAST NULL FILE"
goto done
endif
end
echo "CAN FAST FORWARD PAST NULL FILE"
set null_fwd_past
endif
done:
echo ''
echo 'put the following in the configuration section of frogbak:'
echo ''
if ($?null_ignore_fwd && $?null_ignore_read) then
echo '$null_file_action = "compensate"'
else if ($?null_ignore_fwd) then
echo '# you must mt fsf to the file you want'
echo '$null_file_action = "compensate"'
else if ($?null_ignore_read) then
echo '# you must mt fsf to the file you want'
echo '$null_file_action = "ignore"'
else if ($?null_fwd_past && $?null_read_past) then
echo '$null_file_action = "ignore"'
else if ($?null_fwd_past) then
echo '# you must mt fsf to the file you want'
echo '$null_file_action = "ignore"'
else if ($?null_read_past) then
echo '# can only get past a null file by reading it, sigh'
echo '$null_file_action = "abort"'
else
echo '$null_file_action = "abort"'
endif
if ($?short_blocks) then
echo '$do_compress = 1'
else
echo '$do_compress = 0'
endif
cleanup:
cd
rm -r $td