Sindbad~EG File Manager
#!/bin/sh
#
# shutil: some shared utilities used by all status scripts
#
# Copyright (C) 2011-2014 Dustin Kirkland
#
# Authors: Dustin Kirkland <kirkland@byobu.org>
# Scott Moser <smoser@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Define colors
color_screen() {
ESC="\005"
case "$1" in
"") return 0 ;;
-) printf "$ESC{-}" ;;
--) printf "$ESC{-} " ;;
esc) printf "$ESC" ;;
bold1) printf "$ESC{=b }" || printf "$ESC{= }" ;;
bold2) printf "$ESC{+b }" || printf "$ESC{= }" ;;
none) printf "$ESC{= }" ;;
invert) printf "$ESC{=r }" ;;
*)
local attr fg bg
case $# in
2)
attr= ; fg=$1 ; bg=$2
;;
3)
attr=$1 ; fg=$2 ; bg=$3
;;
esac
if [ "$MONOCHROME" = "1" ]; then
fg=
bg=
fi
printf "$ESC{=$attr $fg$bg}"
;;
esac
}
color_map() {
case "$1" in
"k") _RET="black" ;;
"r") _RET="red" ;;
"g") _RET="green" ;;
"y") _RET="yellow" ;;
"b") _RET="blue" ;;
"m") _RET="magenta" ;;
"c") _RET="cyan" ;;
"w") _RET="white" ;;
"d") _RET="black" ;;
"K") _RET="brightblack" ;;
"R") _RET="brightred" ;;
"G") _RET="brightgreen" ;;
"Y") _RET="brightyellow" ;;
"B") _RET="brightblue" ;;
"M") _RET="brightmagenta" ;;
"C") _RET="brightcyan" ;;
"W") _RET="brightwhite" ;;
*) _RET="$1" ;;
esac
}
attr_map() {
case "$1" in
"d") _RET=,dim ;;
"u") _RET=,underscore ;;
"b") _RET=,bold ;;
"r") _RET=,reverse ;;
"s") _RET=,standout ;;
"B") _RET=,blinking ;;
"h") _RET=,hidden ;;
"i") _RET=,italics ;;
*) _RET= ;;
esac
}
color_tmux() {
local back fore attr
case "$1" in
"") return 0 ;;
-) printf "#[default]#[fg=$BYOBU_LIGHT,bg=$BYOBU_DARK]" ;;
--) printf "#[default]#[fg=$BYOBU_LIGHT]#[bg=$BYOBU_DARK] " ;;
esc) printf "" ;;
bold*) printf "#[default]#[fg=bold]" ;;
none) printf "#[default]#[fg=$BYOBU_LIGHT,bg=$BYOBU_DARK]" ;;
invert) printf "#[default]#[reverse]" ;;
*)
if [ "$#" = "2" ]; then
color_map "$1"; back="$_RET"
color_map "$2"; fore="$_RET"
else
attr_map "$1"; attr="$_RET"
color_map "$2"; back="$_RET"
color_map "$3"; fore="$_RET"
fi
[ "$MONOCHROME" = "1" ] && printf "#[default]" || printf "#[default]#[fg=$fore$attr,bg=$back]"
;;
esac
}
color() {
case "$BYOBU_BACKEND" in
tmux)
color_tmux "$@"
;;
screen)
color_screen "$@"
;;
esac
}
# uncommented_lines(char=#)
# does the standard input have lines that do not start with 'char'?
uncommented_lines() {
local line chr="${1:-#}"
while read line; do
[ "${line#${chr}}" = "${line}" ] && return 0;
done
return 1
}
# newest(file,file,file..)
# return the newest file in the list
newest() {
local c="$1" i
for i in "$@"; do [ "$i" -nt "$c" ] && c="$i"; done
[ -e "$c" ] && _RET="$c"
}
error() {
printf "%s\n" "ERROR: " "$@" 1>&2
}
fail() {
[ $# -eq 0 ] || error "$@"; exit 1;
}
find_script() {
# Allow for local status scripts
if [ -x "$BYOBU_CONFIG_DIR/bin/$1" ]; then
_RET="$BYOBU_CONFIG_DIR/bin/$1"
elif [ -x "$BYOBU_PREFIX/lib/$PKG/$1" ]; then
_RET="$BYOBU_PREFIX/lib/$PKG/$1"
elif [ -x "$BYOBU_PREFIX/libexec/$PKG/$1" ]; then
_RET="$BYOBU_PREFIX/libexec/$PKG/$1"
else
_RET="/dev/null"
fi
}
# divide 2 integers and return a floating point number
# third argument indicates how many digits after the decimal
fpdiv() {
local a=$1 b=$2 pres=${3:-3}
local i=0 mp="10" whole="" part="" chunk="" n=0
while i=$(($i+1)) && [ $i -le $pres ]; do
mp="${mp}0"
chunk="${chunk}?"
done
n=$(((${mp}*${a})/${b}))
# round up if necessary
[ $((($n-5)/10)) = $(($n/10)) ] && n=$(($n+5))
# drop the last digit, which was only there for rounding
n=${n%?}
whole=${n%${chunk}}
part=${n#${whole}}
_RET=${whole:-0}${part:+.${part}}
return
}
# rtrim(string,chars)
rtrim() {
local tab=' ' cr="
"
local cur="${1}" set="[${2:- ${tab}${cr}}]" n=""
while n=${cur%${set}} && [ "$n" != "$cur" ]; do cur=${n}; done
_RET=${cur}
}
readfile() {
local c="" r="" cr="
"
OIFS="$IFS"; IFS="";
while read c; do
r="$r${cr}$c"
done
IFS=$OIFS
_RET=${r}
return 0
}
metadata_available() {
# This is really ugly. We need a reliable, fast way of determining
# if a metadata service is available, that does NOT slow down non-ec2
# machines.
local x=0 cache="$BYOBU_CONFIG_DIR/.metadata_available"
# First, check the cache
if [ -s "$cache" ]; then
# Metadata is non-empty, so we have metadata available
x=1
else
# Must seed the cache
if [ -e /etc/ec2_version ] || [ -e /usr/sbin/update-grub-legacy-ec2 ]; then
# This *looks* like a machine with metadata, so background a potentially slow check
timeout 1 wget -q -O- --tries=1 http://169.254.169.254 </dev/null >"$cache" 2>/dev/null &
sleep 0.02
[ -s "$cache" ] && x=1
fi
fi
[ "$x" = "1" ]
}
status_freq() {
# Define status frequencies
# Use prime number intervals, to decrease collisions, which
# yields some less expensive status updates.
# ~86000 ~1 day
# ~600 ~10 minutes
# ~180 ~3 minutes
# ~60 ~1 minute
case "$1" in
apport) _RET=67 ;;
arch) _RET=9999991 ;;
battery) _RET=61 ;;
color) _RET=9999991 ;;
cpu_count) _RET=5 ;;
cpu_freq) _RET=2 ;;
cpu_temp) _RET=19 ;;
custom) _RET=5 ;;
date) _RET=9999991 ;;
disk) _RET=13 ;;
disk_io) _RET=3 ;;
distro) _RET=9999991 ;;
ec2_cost) _RET=601 ;;
entropy) _RET=5 ;;
fan_speed) _RET=23 ;;
hostname) _RET=607 ;;
ip_address) _RET=127 ;;
load_average) _RET=2 ;;
logo) _RET=9999991 ;;
mail) _RET=5 ;;
memory) _RET=13 ;;
menu) _RET=9999991 ;;
network) _RET=3 ;;
notify_osd) _RET=9999991 ;;
processes) _RET=7 ;;
raid) _RET=59 ;;
rcs_cost) _RET=613 ;;
reboot_required) _RET=5 ;;
release) _RET=599 ;;
services) _RET=53 ;;
session) _RET=9999991 ;;
swap) _RET=19 ;;
time) _RET=9999991 ;;
time_binary) _RET=23 ;;
time_utc) _RET=11 ;;
trash) _RET=9999991 ;;
updates_available) _RET=7 ;;
uptime) _RET=29 ;;
users) _RET=11 ;;
whoami) _RET=86029 ;;
wifi_quality) _RET=17 ;;
*) _RET=9999991 ;;
esac
}
get_now() {
if [ -r /proc/uptime ]; then
# return the integer part of the first item in /proc/uptime
local s c
read s c < /proc/uptime
_RET=${s%.*}
else
_RET=$(date +%s);
fi
}
get_network_interface() {
if [ -n "$MONITORED_NETWORK" ]; then
# Manual override
_RET="$MONITORED_NETWORK"
elif [ -e /proc/net/route ]; then
# Linux systems, read route and interface from procfs
local Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
while read Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT; do
[ "$Mask" = "00000000" ] && break
done < /proc/net/route
_RET="$Iface"
elif eval $BYOBU_TEST route >/dev/null 2>&1; then
# Route command on path
_RET=$(route get default|grep interface:|awk '{print $2}')
elif [ -x "/sbin/route" ]; then
# Mac OSX, shell out to the route command
_RET=$(/sbin/route get default|grep interface:|awk '{print $2}')
fi
}
get_distro() {
local distro="${DISTRO}"
if [ -n "$DISTRO" ]; then
# user defined
true
elif [ -r "/etc/os-release" ]; then
distro=$(. /etc/os-release && echo "$NAME")
elif [ -r "/etc/issue" ]; then
# lsb_release is *really* slow; try to use /etc/issue first
local issue
IFS="" read issue < /etc/issue
case "$issue" in
Ubuntu*)
distro="Ubuntu";
;;
Debian*)
distro="Debian"
;;
Red\ Hat\ Enterprise*)
distro="RHEL"
;;
*)
# assume first field is what we want
distro="${issue%% *}";
;;
esac
elif eval $BYOBU_TEST lsb_release >/dev/null 2>&1; then
# If lsb_release is available, use it
local r=$(lsb_release -s -d)
case "$r" in
Ubuntu*)
# Use the -d if an Ubuntu LTS
distro="Ubuntu"
;;
*)
# But for other distros the description
# is too long, so build from -i and -r
distro=$(lsb_release -s -i)
;;
esac
elif eval $BYOBU_TEST sw_vers >/dev/null 2>&1; then
distro="$(sw_vers -productName)"
elif eval $BYOBU_TEST uname >/dev/null 2>&1; then
distro="$(uname -s)"
else
distro="Byobu"
fi
_RET="$distro"
}
# vi: syntax=sh ts=4 noexpandtab
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists