# # Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 LucĂ­a Andrea Illanes Albornoz # set +o errexit -o noglob -o nounset is assumed. # # # rtl_export_vars() - export or unset list of variables # @[-u]: unset instead of exporting variables # @...: list of variable name-value pairs # # Returns: zero (0) on success, non-zero (>0) on failure # rtl_export_vars() { local _rev_unsetfl=0; if [ "x${1}" = "x-u" ]; then _rev_unsetfl=1; shift; fi; while [ "${#}" -ge 2 ]; do if [ "${2:+1}" = 1 ]\ || [ "${_rev_unsetfl}" -eq 1 ]; then case "${_rev_unsetfl}" in 0) rtl_set_var_unsafe "${1}" "${2}"; export "${1}"; ;; 1) unset "${1}"; ;; esac; fi; shift 2; done; return 0; }; # # rtl_percentage() - calculate percentage of two numbers # @_in: input number # @_max: input maximum # @_rs_out: out reference to percentage number # # Returns: zero (0) on success, non-zero (>0) on failure # rtl_percentage() { local _rp_in="${1}" _rp_max="${2}" _rp_rs_out="${3#\$}" \ _rp_perc; _rp_perc=$((100 * ${_rp_in} + ${_rp_max} / 2)); _rp_perc=$((${_rp_perc} ? ${_rp_perc} / ${_rp_max} : ${_rp_perc})); eval ${_rp_rs_out}='${_rp_perc}'; return 0; }; # # rtl_percentage2() - calculate percentage of two numbers # @_rin: in reference to input number # @_rmax: in reference to input maximum # @_rs_out: out reference to percentage number # # Returns: zero (0) on success, non-zero (>0) on failure # rtl_percentage2() { local _rp_rin="${1#\$}" _rp_rmax="${2#\$}" _rp_rs_out="${3#\$}" \ _rp_in=0 _rp_max=0 _rp_perc; eval _rp_in=\"\${${_rp_rin}}\"; eval _rp_max=\"\${${_rp_rmax}}\"; _rp_perc=$((100 * ${_rp_in} + ${_rp_max} / 2)); _rp_perc=$((${_rp_perc} ? ${_rp_perc} / ${_rp_max} : ${_rp_perc})); eval ${_rp_rs_out}='${_rp_perc}'; return 0; }; # # rtl_sunset() - unset variables # @_rset: in reference to list of variables to unset # # Returns: zero (0) on success, non-zero (>0) on failure # rtl_sunset() { local _rs_rset="${1#\$}" \ IFS=" "; eval set -- "\${${_rs_rset}}"; while [ "${#}" -gt 0 ]; do unset "${_rs_rset}"; shift; done; unset "${_rs_rset}"; return 0; }; # vim:filetype=sh textwidth=0