env/mblaze/m.sh

113 lines
1.7 KiB
Bash

#!/bin/sh
# mblaze.env
# Written in 2020 by Lucas
# CC0 1.0 Universal/Public domain - No rights reserved
#
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any
# warranty. You should have received a copy of the CC0 Public Domain
# Dedication along with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.
usage()
{
cat - <<. >&2
Usage:
${0##*/} f|fetch
${0##*/} l|list [dirs...]
${0##*/} r|read dir [dirs...]
${0##*/} s|scan [-a] dir [dirs...]
.
exit 1
}
m_fetch_usage()
{
printf "Usage: %s f|fetch\n" "${0##*/}" >&2
exit 1
}
m_read_usage()
{
printf "Usage: %s r|read dir [dirs...]\n" "${0##*/}" >&2
exit 1
}
m_scan_usage()
{
printf "Usage: %s s|scan [-a] dir [dirs...]\n" "${0##*/}" >&2
exit 1
}
m_fetch()
{
if [ $# -ne 0 ]; then
m_fetch_usage
fi
printf "%s: fetch TBD.\n" >&2
exit 1
}
m_list()
{
pwd=$(pwd)
# cut(1) lists are 1-based, and +1 for leading slash
mdirs "${@:-.}" | sort -t / | cut -c $((${#pwd} + 2))- | mlist -i
}
m_read()
{
if [ $# -eq 0 ]; then
m_read_usage
fi
mdirs "$@" | mlist -s | msort -d | mthread | mless
}
m_scan()
{
mlist_flags=-s
while getopts a flag; do
case $flag in
a)
mlist_flags=
;;
*)
m_scan_usage
;;
esac
done
shift $(($OPTIND - 1))
if [ $# -eq 0 ]; then
m_scan_usage
fi
mdirs "$@" | mlist $mlist_flags | msort -d | mthread | mseq -S | mscan
}
if [ $# -lt 1 ]; then
usage
fi
cmd=$1
shift
case $cmd in
f|fetch)
m_fetch "$@"
;;
l|list)
m_list "$@"
;;
r|read)
m_read "$@"
;;
s|scan)
m_scan "$@"
;;
*)
usage
;;
esac