From b500b09d321e9657343e6d407c78d23c8da4b591 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Paul=20H=C3=A4nsch?= <paul@plutz.net>
Date: Sun, 12 Sep 2021 19:46:40 +0200
Subject: [PATCH] Squashed 'cgilite/' changes from dcab989..2218e82

2218e82 Set _EXEC _DATA and _BASE variables

git-subtree-dir: cgilite
git-subtree-split: 2218e82add4c42ca6ec30c49e0b9cded4dc1e14f
---
 cgilite.sh | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/cgilite.sh b/cgilite.sh
index 7f828dd..6a4a648 100755
--- a/cgilite.sh
+++ b/cgilite.sh
@@ -25,10 +25,33 @@
 # 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="
"
 BR='
 '
-cgilite_timeout=2
 
 PATH(){ 
   local str seg out
@@ -175,6 +198,8 @@ fi
 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"'=[^&]*' \
@@ -200,6 +225,17 @@ cgilite_keys(){
   | 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}"; }
@@ -228,6 +264,7 @@ HEADER(){
 }
 
 COOKIE(){
+  # Read value of cookie
   HEX_DECODE % "$(
     HEADER Cookie \
     | grep -oE '(^|; ?)'"$1"'=[^;]*' \
@@ -302,6 +339,7 @@ SET_COOKIE(){
 }
 
 REDIRECT(){
+  # Trigger redirct and terminate script
   printf '%s: %s\r\n' \
     Status "303 See Other" \
     Content-Length 0 \
-- 
2.39.5