- # defines a variable within the feisty meow environment and remembers that
- # this is a new or modified definition. if the feisty meow codebase is
- # unloaded, then so are all the variables that were defined.
- # this function always exports the variables it defines.
-# function define_yeti_variable()
-# {
-## if variable exists already, save old value for restore,
-## otherwise save null value for restore,
-## have to handle unsetting if there was no prior value of one
-## we newly defined.
-## add variable name to a list of feisty defined variables.
-#
-##hmmm: first implem just sets it up and exports the variable.
-## i.e., this method always exports.
-#export "${@}"
-#
-#
-#return 0
-# }
+ ##############
+
+#hmmm: this points to an extended functions file being needed; not all of these are core.
+
+ # displays documentation in "md" formatted files.
+ function show_md()
+ {
+ local file="$1"; shift
+ pandoc "$file" | lynx -stdin
+ }
+
+ ##############
+
+ # just shows a separator line for an 80 column console, or uses the first
+ # parameter as the number of columns to expect.
+ function separator()
+ {
+ count=$1; shift
+ if [ -z "$count" ]; then
+ count=79
+ fi
+ echo
+ local i
+ for ((i=0; i < $count - 1; i++)); do
+ echo -n "="
+ done
+ echo
+ echo
+ }
+ # alias for separator.
+ function sep()
+ {
+ separator $*
+ }
+
+ ##############
+
+ # count the number of sub-directories in a directory and echo the result.
+ function count_directories()
+ {
+ local subbydir="$1"; shift
+ numdirs="$(find "$subbydir" -mindepth 1 -maxdepth 1 -type d | wc -l)"
+ echo $numdirs
+ }
+
+ # takes a string and capitalizes just the first character. any capital letters in the remainder of
+ # the string are made lower case. the processed string is returned by an echo.
+ function capitalize_first_char()
+ {
+ local to_dromedary="$1"; shift
+ to_dromedary="$(tr '[:lower:]' '[:upper:]' <<< ${to_dromedary:0:1})$(tr '[:upper:]' '[:lower:]' <<< ${to_dromedary:1})"
+ echo "$to_dromedary"
+ }
+
+ # given a source path and a target path, this will make a symbolic link from
+ # the source to the destination, but only if the source actually exists.
+ function make_safe_link()
+ {
+ local src="$1"; shift
+ local target="$1"; shift
+
+ if [ -d "$src" ]; then
+ ln -s "$src" "$target"
+ exit_on_error "Creating symlink from '$src' to '$target'"
+ fi
+ echo "Created symlink from '$src' to '$target'."
+ }
+
+ # pretty prints the json files provided as parameters.
+ function clean_json()
+ {
+ if [ -z "$*" ]; then return; fi
+ local show_list=()
+ while true; do
+ local file="$1"; shift
+ if [ -z "$file" ]; then break; fi
+ if [ ! -f "$file" ]; then "echo File '$file' does not exist."; continue; fi
+ temp_out="$TMP/$file.view"
+ cat "$file" | python -m json.tool > "$temp_out"
+ show_list+=($temp_out)
+ continue_on_error "pretty printing '$file'"
+ done
+ filedump "${show_list[@]}"
+ rm "${show_list[@]}"
+ }
+
+ function json_text()
+ {
+ # only print our special headers or text fields.
+ local CR=$'\r'
+ local LF=$'\n'
+ clean_json $* |
+ grep -i "\"text\":\|^=.*" |
+ sed -e "s/\\\\r/$CR/g" -e "s/\\\\n/\\$LF/g"
+ }
+
+ ##############
+
+ # echoes the machine's hostname. can be used like so:
+ # local my_host=$(get_hostname)
+ function get_hostname()
+ {
+ # there used to be more variation in how to do this, but adopting mingw
+ # and cygwin tools really helped out.
+ local this_host=unknown
+ if [ "$OS" == "Windows_NT" ]; then
+ this_host=$(hostname)
+ elif [ ! -z "$(echo $MACHTYPE | grep apple)" ]; then
+ this_host=$(hostname)
+ elif [ ! -z "$(echo $MACHTYPE | grep suse)" ]; then
+ this_host=$(hostname --long)
+ elif [ -x "$(which hostname 2>/dev/null)" ]; then
+ this_host=$(hostname)
+ fi
+ echo "$this_host"
+ }
+
+ # makes sure that the provided "folder" is a directory and is writable.
+ function test_writeable()
+ {
+ local folder="$1"; shift
+ if [ ! -d "$folder" -o ! -w "$folder" ]; then return 1; fi
+ return 0
+ }