ref: b468c65539870921fc80652f08bf1eb22c658ece
dir: /bin/cgilib.rc/
# Useful functions fn dprint { echo $* >[1=2] } fn escape_html { sed 's/&/\&/g; s/</\</g; s/>/\>/g' $* } fn perm_redirect { echo 'Status: 301 Moved Permanantly Location: '^$1^' ' exit } fn get_post_args { ifs='& ' for(pair in `{cat}) { pair = `{echo -n $pair | sed 's/=/\&/'} \ ifs=() \ if(~ $pair(1) $*) $pair(1) = `{echo $pair(2) | urldecode | tr -d ' '} } } # Is this really useful? fn awk_buffer { awk '{ buf = buf $0"\n" if(length(buf) > 8192) { printf "%s", buf buf = "" } } END{ printf "%s", buf }' } fn template { template.awk $* | rc $rcargs } # .rec parsing fn parse_rec { ifs=' ' for(i in `{sed 's/% *//g; /^$/q' < $1}) { v = `{echo -n $i | sed 's/^/rec_/; s/=.*//;'} $v = `{echo -n $i | sed 's/^[^=]*=//'} } ifs=() rec_data = `{sed -n '/^[^%]./,$p' < $1} } fn urldecode { awk ' BEGIN { hextab ["0"] = 0; hextab ["8"] = 8; hextab ["1"] = 1; hextab ["9"] = 9; hextab ["2"] = 2; hextab ["A"] = hextab ["a"] = 10 hextab ["3"] = 3; hextab ["B"] = hextab ["b"] = 11; hextab ["4"] = 4; hextab ["C"] = hextab ["c"] = 12; hextab ["5"] = 5; hextab ["D"] = hextab ["d"] = 13; hextab ["6"] = 6; hextab ["E"] = hextab ["e"] = 14; hextab ["7"] = 7; hextab ["F"] = hextab ["f"] = 15; } { decoded = "" i = 1 len = length ($0) while ( i <= len ) { c = substr ($0, i, 1) if ( c == "%" ) { if ( i+2 <= len ) { c1 = substr ($0, i+1, 1) c2 = substr ($0, i+2, 1) if ( hextab [c1] == "" || hextab [c2] == "" ) { print "WARNING: invalid hex encoding: %" c1 c2 | "cat >&2" } else { code = 0 + hextab [c1] * 16 + hextab [c2] + 0 c = sprintf ("%c", code) i = i + 2 } } else { print "WARNING: invalid % encoding: " substr ($0, i, len - i) } } else if ( c == "+" ) { c = " " } decoded = decoded c ++i } print decoded } ' }