# 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 \