#!/bin/sh ## function definitions ## ##func printlines (){ printf "<ul>\\n" l=$(echo "$@" | tr ' ' '\n') for r in $l; do printf "<li><div><a href=\"%s\" >%s</a></div></li>\\n" "$r" "$r" done printf "</ul>\\n" } ##func print_head(){ printf "Content-type: text/html\\n\\n" echo "<html><head><style type='text/css'>" echo "body{padding: 20px; margin: 40px auto;line-height: 1.6;font-size: 18px; color:#444;}" echo "</style></head>" echo "<body><div>Search for: </div><form method='GET' action='/cgi-bin/search_cgi'>" echo "<div><input type='text' name='query' autofocus /></div>" echo "<div>in: <input type='radio' name='type' id='type_url' value='url' checked /><label for='type_url'>url</label>" echo "<input type='radio' name='type' id='type_descr' value='descr' /><label for='type_descr'>description</label>" echo "<input type='radio' name='type' id='type_readme' value='read' /><label for='type_readme'>readme</label>" echo "<input type='radio' name='type' id='type_all' value='all' /><label for='type_all'>all</label>" echo "</div>" echo "<input type='submit' value='Search!' />" echo "</form>" } ##func print_foot(){ echo "</body></html>" } ##func print_results(){ for line in $@; do case "$line" in "--URL") #echo "$line<br>" if [ "$qtype" = "url" -o "$qtype" = "all" ]; then curstr="url" else curstr="" fi ;; "--DESCR") if [ -n "$curstr" ]; then if [ -n "$results" ]; then printf "<div>%s results in repo %s</div>\\n" $numres $curstr printlines "$results" else printf "<div>No results in repo %s</div>\\n" $curstr fi fi results="" numres=0 if [ "$qtype" = "descr" -o "$qtype" = "all" ]; then curstr="description" else curstr="" fi ;; "--README") #echo "$line<br>" if [ -n "$curstr" ]; then if [ -n "$results" ]; then printf "<div>%s results in repo %s</div>\\n" $numres $curstr printlines "$results" else printf "<div>No results in repo %s</div>\\n" $curstr fi fi results="" numres=0 if [ "$qtype" = "read" -o "$qtype" = "all" ]; then curstr="readme" else curstr="" fi ;; *) numres=$(($((numres)) + 1)) results="$results $line" ;; esac done if [ -n "$curstr" ]; then if [ -n "$results" ]; then printf "<div>%s results in readme files</div>\\n" $numres printlines "$results" else printf "<div>No results in readme files </div>\\n" fi fi } ## main loop ## query=$(echo "${QUERY_STRING}" | sed -E 's/["\\$^?<>@;*`|/()]//g') terms=$(echo "${query}" | tr '&' '\n' | grep -E "^query=" | sed -E 's/^query=//') qtype=$(echo "${query}" | tr '&' '\n' | grep -E "^type=" | sed -E 's/^type=//') print_head if [ -n "$terms" ]; then search=$(echo "$terms" | sed -E 's/\+/ /g') numres=0 lines=$(./search_repo ./ "$search" 2>&1 ) print_results $lines fi print_foot