Index: examples/autochangers/chio-changer-openbsd --- examples/autochangers/chio-changer-openbsd.orig +++ examples/autochangers/chio-changer-openbsd @@ -96,22 +96,17 @@ case ${cmd} in exit $? ;; listall) - # XXX only one drive is queried - _list=$(${0} ${1} list) - _loaded_s=$(${0} ${1} loaded ${slot} ${device} ${drive}) - _loaded_t=$(${CHIO} -f ${ctl} status -v | grep "drive ${drive}" | awk '{ print $NF }' | sed -e 's,<,,' -e 's,:.*,,') - - [ -n "${_list}" -a -n "${_loaded_s}" -a -n "${_loaded_t}" ] || exit 1 - - (for i in ${_list}; do - echo "S:${i}" | sed 's/\(.*\):/\1:F:/' - done - echo S:${_loaded_s}:E - if [ "${_loaded_s}" -ne 0 ]; then - echo D:${drive}:F:${_loaded_s}:${_loaded_t} - else - echo D:${drive}:E - fi) | sort + ${CHIO} -f ${ctl} status -vS | \ + sed -ne ' + s/^slot *\([0-9]*\):.*ENAB.*FULL.*voltag.*<\([^:]*\):.*/I:\1:F:\2/p;t + s/^slot *\([0-9]*\):.*FULL.*voltag.*<\([^:]*\):.*/S:\1:F:\2/p;t + s/^drive *\([0-9]*\):.*FULL.*voltag.*<\([^:]*\):.*source.*<[^0-9]*\([0-9]*\)>.*/D:\1:F:\3:\2/p;t + s/^slot *\([0-9]*\):.*ENAB.*voltag.*<\([^:]*\):.*/I:\1:E/p;t + s/^slot *\([0-9]*\):.*voltag.*<\([^:]*\):.*/S:\1:E/p;t + s/^drive *\([0-9]*\):.*voltag.*<\([^:]*\):.*/D:\1:E/p' | \ + awk -F: '{ for (n = 1; n <= NF; n++) printf "%s%s", + (n == ($1 == "D" ? 4 : 2)) ? ($n == "" ? 0 : $n + 1) : $n, + (n == NF) ? "\n" : ":" }' ;; loaded) # XXX output the first empty slot if the drive is loaded