#!/bin/sh
set -e; unset nm || true; nm='page';
export NNX_STACK="${NNX_STACK}${nm}:";

# usage: "${nm}"'[--] [r [arg...]]'

unset r s t || true;

me_rmtmp()
(
 trap - EXIT;
 if [ ! "${t}" = '' ] && [ -e "${t}" ]; then
  s=''; rm -rf -- "${t}" || s="${?}";
  if ! [ "${s}" = '' ]; then
   echo "${NNX_STACK} tmp ${t}: rm returned ${s}" 1>&2; exit 4;
  fi;
 fi;
);

me_mktmp()
(
 s=''; mktemp "${@}" || s="${?}";
 if ! [ "${s}" = '' ]; then
  echo "${NNX_STACK} mktemp returned ${s}" 1>&2; exit 3;
 fi;
);

trap me_rmtmp EXIT; 

t="$(me_mktmp -td "${nm}".XXXXXXXXXXXX)" || exit "${?}";

if ! [ -e "${t}" ]; then
 echo "${NNX_STACK} tmp ${t}: nonexistent" 1>&2;
 exit 69; # EX_UNAVAILABLE
fi;

cat >"${t}/f" || s="${?}";

if ! [ "${s}" = '' ]; then
 echo "${NNX_STACK} read: cat returned ${s}" 1>&2; exit 2;
fi;

if [ "${1}" = '--' ]; then shift; fi;

if [ "${#}" = 0 ]; then r=cat; else r="${1}"; shift; fi;

<"${t}/f" "${r}" "${@}" || s="${?}";

if ! [ "${s}" = '' ]; then
 echo "${NNX_STACK} write: ${r} returned ${s}"; exit 1;
fi;

exit 0;
