#!/bin/sh -

searchH=https://kinzler.com/cgi/piconsearch.cgi/
searchU=/users+usenix+misc+domains/up/single/xpm
searchD=/domains/up/single/xpm

#se WWW::Favicon;

# urlxpm - output any picon or favicon XPM for the given domained URL
# Steve Kinzler, steve@kinzler.com, Feb 03/Nov 14
# https://kinzler.com/me/home.html#x11

case "$#^$1" in
[02-9]^*|??*^*|*^-h)	echo "usage: $0 URL" 1>&2; exit 1;;
esac

url=`echo "$1" | sed 's/[ 	]*//g; s/^[a-zA-Z_]*:\/\///
		      s/^\([^\/]*\/[^\/]*\).*/\1/; s/:.*\//\//'`

case "$url" in
*/~*)	search="$searchU"; url=`echo "$url" | sed 's/~//'`;;
*)	search="$searchD"; url=`echo "$url" | sed 's/\/.*//'`/unknown;;
esac
url=`/bin/echo -n "$url" | urlencode | sed 's/%2f/\//'`

lynx -source "$searchH$url$search" | sed -n '/^\/\* *XPM/,$p' |
	grep -s '^' && exit

url=`/bin/echo -n "$url" | sed 's/\/.*//'`
url=`perl -e 'use WWW::Favicon; $i = WWW::Favicon->new;
	print $i->detect(q|http://'"$url"'/|) ||
	      $i->detect(q|https://'"$url"'/|)' 2> /dev/null`

case "$url" in
http*)	tmp=/tmp/urlxpm$$
	trap "rm -fr $tmp; exit" 0 1 2 13 15
	(umask 077; mkdir $tmp); cd $tmp || exit $?

	lynx -source "$url" | winicontoppm -writeands -bestqual - urlxpm.ppm
	pnmscale -xysize 48 48 < urlxpm_and.pbm > urlxpm_and.pgm
	pnmscale -xysize 48 48 < urlxpm_xor.ppm | ppmquant 256 |
		ppmtoxpm -alphamask=urlxpm_and.pgm;;

*)	exit 2;;
esac 2> /dev/null | sed -n '/^\/\* *XPM/,$p' | grep -s '^'
