# all others are a minimum of 5
#
case $2 in
- list)
+ list|listall)
check_parm_count $# 2
;;
slots)
check_parm_count $# 2
;;
+ transfer)
+ check_parm_count $# 4
+ if [ $slot -gt $maxslot ]; then
+ echo "Slot ($slot) out of range (1-$maxslot)"
+ exit 1
+ fi
+ ;;
*)
check_parm_count $# 5
if [ $drive -gt $maxdrive ]; then
exit 0
;;
+ listall)
+ make_temp_file
+ debug "Doing disk -f $ctl -- to list volumes"
+ get_dir
+ if [ ! -f $dir/barcodes ]; then
+ exit 0
+ fi
+
+ # we print drive content seen by autochanger
+ # and we also remove loaded media from the barcode list
+ for i in $dir/loaded*
+ do
+ d=${i##$dir/loaded}
+ s=$(cat $i)
+ v=$(awk -F: "/^$s:/"' { print $2 }' $dir/barcodes)
+ echo "D:$d:F:$s:$v"
+ echo "^$s:" >> $TMPFILE
+ done
+
+ # Empty slots are not in barcodes file
+ # When we detect a gap, we print missing rows as empty
+ # At the end, we fill the gap between the last entry and maxslot
+ grep -v -f $TMPFILE $dir/barcodes | \
+ perl -ne 'BEGIN { $cur=1 }
+ if (/(\d+):(.+)?/) {
+ if ($cur == $1) {
+ print "S:$1:F:$2\n"
+ } else {
+ while ($cur < $1) {
+ print "S:$cur:E\n";
+ $cur++;
+ }
+ }
+ $cur++;
+ }
+ END { while ($cur < '"$maxslot"') { print "S:$cur:E\n"; $cur++; } } '
+
+ rm -f $TMPFILE
+ exit 0
+ ;;
+ transfer)
+ get_dir
+ make_temp_file
+ slotdest=$device
+ if [ -f $dir/slot{$slotdest} ]; then
+ echo "destination Element Address $slot is Full"
+ exit 1
+ fi
+ if [ ! -f $dir/slot${slot} ] ; then
+ echo "source Element Address $slot is Empty"
+ exit 1
+ fi
+
+ echo "Transfering $slot to $slotdest"
+ mv $dir/slot${slot} $dir/slot{$slotdest}
+
+ if [ -f $dir/barcodes ]; then
+ sed "s/^$slot:/$slotdest:/" > $TMPFILE
+ sort -n $TMPFILE > $dir/barcodes
+ fi
+ exit 0
+ ;;
loaded)
debug "Doing disk -f $ctl $drive -- to find what is loaded"
get_dir
# loaded which slot is loaded?
# list list Volume names (requires barcode reader)
# slots how many slots total?
+# listall list all info
+# transfer
#
# Slots are numbered from 1 ...
# Drives are numbered from 0 ...
# all others are a minimum of 5
#
case $2 in
- list)
+ list|listall)
check_parm_count $# 2
;;
slots)
check_parm_count $# 2
;;
+ transfer)
+ check_parm_count $# 4
+ ;;
*)
check_parm_count $# 5
;;
exit $rtn
;;
+ listall)
+ debug "Doing mtx -f $ctl -- to list all"
+ make_temp_file
+ if test ${inventory} -ne 0 ; then
+ ${MTX} -f $ctl inventory
+ fi
+ ${MTX} -f $ctl status >${TMPFILE}
+ rtn=$?
+ # can be converted to awk+sed+cut, contributions are welcome
+ perl -ne '
+/Data Transfer Element (\d+):Empty/ && print "D:$1:E\n";
+/Data Transfer Element (\d+):Full \(Storage Element (\d+) Loaded\)(:VolumeTag =\s*(.+))?/ && print "D:$1:F:$2:$4\n";
+/Storage Element (\d+):Empty/ && print "S:$1:E\n";
+/Storage Element (\d+):Full( :VolumeTag=(.+))?/ && print "S:$1:F:$3\n";
+/Storage Element (\d+) IMPORT.EXPORT:Empty/ && print "I:$1:E\n";
+/Storage Element (\d+) IMPORT.EXPORT:Full( :VolumeTag=(.+))?/ && print "I:$1:F:$3\n";' ${TMPFILE}
+ rm -f ${TMPFILE} >/dev/null 2>&1
+ exit $rtn
+ ;;
+
+ transfer)
+ slotdest=$device
+ debug "Doing transfer from $slot to $slotdest"
+ ${MTX} -f $ctl transfer $slot $slotdest
+ rtn=$?
+ exit $rtn
+ ;;
+
loaded)
debug "Doing mtx -f $ctl $drive -- to find what is loaded"
make_temp_file