# set -o posix # ksh, not portable
setopt -o OCTAL_ZEROES 2>&-
+# Integrated webserver request timeout
+cgilite_timeout=2
+
+# General environment variables
+# $_EXEC - directory containing application itself
+# $_DATA - direcotry where application data may be stored
+# $_BASE - optional prefix for http path, e.g. "/myapp"
+#
+# Programmers should take care to use those variables throughout the
+# application.
+# Variables may be set via CLI argument, in environment, or left as default.
+
+for cgilite_arg in "$@"; do case $cgilite_arg in
+ --exec=*) _EXEC="${cgilite_arg#*=}";;
+ --data=*) _DATA="${cgilite_arg#*=}";;
+ --base=*) _BASE="${cgilite_arg#*=}";;
+esac; done
+unset cgilite_arg
+
+_EXEC="${EXEC:-${0%/*}}"
+_DATA="${DATA:-.}"
+_EXEC="${_EXEC%/}" _DATA="${_DATA%/}" _BASE="${BASE%/}"
+
+# Carriare Return and Line Break characters for convenience
CR="\r"
BR='
'
-cgilite_timeout=2
PATH(){
local str seg out
debug(){ [ $# -gt 0 ] && printf '%s\n' "$@" >&2 || tee -a /dev/stderr; }
[ "${DEBUG+x}" ] && env >&2
+# general helper functions, see GET, POST, and REF below
+
cgilite_count(){
printf %s "&$1" \
| grep -oE '&'"$2"'=[^&]*' \
| sort -u
}
+# Read arguments from GET, POST, or the query string of the referrer (REF).
+# Example:
+# GET varname n
+#
+# where n is number for the Nth occurence of a variable and defaults to 1
+#
+# *_COUNT varname
+# -> returns number of ocurences
+# *_KEYS
+# -> returns list of available varnames
+
GET(){ cgilite_value "${QUERY_STRING}" "$@"; }
GET_COUNT(){ cgilite_count "${QUERY_STRING}" $1; }
GET_KEYS(){ cgilite_keys "${QUERY_STRING}"; }
}
COOKIE(){
+ # Read value of cookie
HEX_DECODE % "$(
HEADER Cookie \
| grep -oE '(^|; ?)'"$1"'=[^;]*' \
}
REDIRECT(){
+ # Trigger redirct and terminate script
printf '%s: %s\r\n' \
Status "303 See Other" \
Content-Length 0 \