wok-next rev 20428

Port changes from cooking wok: fake-sane, sane-backends.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Jan 24 13:17:46 2018 +0200 (2018-01-24)
parents 7d149a8fe301
children 2569c3879795
files fake-sane/receipt sane-backends/receipt sane-backends/stuff/tazpanel/crop.js sane-backends/stuff/tazpanel/drag.gif sane-backends/stuff/tazpanel/sane.cgi
line diff
     1.1 --- a/fake-sane/receipt	Wed Jan 24 12:19:58 2018 +0200
     1.2 +++ b/fake-sane/receipt	Wed Jan 24 13:17:46 2018 +0200
     1.3 @@ -1,18 +1,19 @@
     1.4 -# SliTaz package receipt.
     1.5 +# SliTaz package receipt v2.
     1.6  
     1.7  PACKAGE="fake-sane"
     1.8 -VERSION="1.0"
     1.9 +VERSION="180124"
    1.10  CATEGORY="system-tools"
    1.11 -SHORT_DESC="Fake scanimage output for tazpanel/sane.cgi."
    1.12 +SHORT_DESC="Fake scanimage output for tazpanel/sane.cgi"
    1.13  MAINTAINER="pascal.bellard@slitaz.org"
    1.14  LICENSE="BSD"
    1.15  WEB_SITE="http://www.slitaz.org/"
    1.16  
    1.17 -DEPENDS="sane-backends tazpanel"
    1.18 +compile_rules() {
    1.19 +	mkdir -p    $fs/var/www/tazpanel/fake-sane
    1.20 +	cp $stuff/* $fs/var/www/tazpanel/fake-sane
    1.21 +}
    1.22  
    1.23 -# Rules to gen a SliTaz package suitable for Tazpkg.
    1.24 -genpkg_rules()
    1.25 -{
    1.26 -	mkdir -p $fs/var/www/tazpanel
    1.27 -	cp $stuff/* $fs/var/www/tazpanel/
    1.28 +genpkg_rules() {
    1.29 +	copy @std
    1.30 +	DEPENDS="sane-backends tazpanel"
    1.31  }
     2.1 --- a/sane-backends/receipt	Wed Jan 24 12:19:58 2018 +0200
     2.2 +++ b/sane-backends/receipt	Wed Jan 24 13:17:46 2018 +0200
     2.3 @@ -1,23 +1,21 @@
     2.4 -# SliTaz package receipt.
     2.5 +# SliTaz package receipt v2.
     2.6  
     2.7  PACKAGE="sane-backends"
     2.8  VERSION="1.0.22"
     2.9  CATEGORY="system-tools"
    2.10 -SHORT_DESC="Scanner Access Now Easy."
    2.11 +SHORT_DESC="Scanner Access Now Easy"
    2.12  MAINTAINER="pankso@slitaz.org"
    2.13  LICENSE="GPL2"
    2.14 +WEB_SITE="http://www.sane-project.org/"
    2.15 +
    2.16  TARBALL="$PACKAGE-$VERSION.tar.gz"
    2.17 -WEB_SITE="http://www.sane-project.org/"
    2.18  WGET_URL="ftp://ftp2.sane-project.org/pub/sane/$PACKAGE-$VERSION/$TARBALL"
    2.19  
    2.20 -DEPENDS="libusb-compat jpeg tiff zlib libgphoto2 libv4l libltdl"
    2.21 -BUILD_DEPENDS="libusb-compat-dev jpeg-dev tiff-dev zlib-dev libv4l-dev \
    2.22 -libgphoto2-dev libtool udev-dev"
    2.23 -SUGGESTED="imagemagick gocr tesseract-ocr"
    2.24 +BUILD_DEPENDS="libusb-compat-dev libjpeg-turbo-dev tiff-dev zlib-dev libv4l-dev \
    2.25 +libgphoto2-dev libtool eudev-dev"
    2.26 +SPLIT="sane-backends-dev"
    2.27  
    2.28 -# Rules to configure and make the package.
    2.29 -compile_rules()
    2.30 -{
    2.31 +compile_rules() {
    2.32  	sed -i 's|prefix}/doc|prefix}/share/doc|' configure
    2.33  	patch -Np1 -i $stuff/libv4l-0.8.3.patch
    2.34  	# fix https://bugs.archlinux.org/task/26114
    2.35 @@ -28,58 +26,61 @@
    2.36  		--mandir=/usr/share/man \
    2.37  		$CONFIGURE_ARGS &&
    2.38  	make &&
    2.39 -	make -j 1 DESTDIR=$DESTDIR install
    2.40 +	make -j 1 DESTDIR=$install install || return 1
    2.41  
    2.42  	# copy the missing udev rule
    2.43 -	[ ! -d $DESTDIR/etc/udev/rules.d ] && mkdir -p $DESTDIR/etc/udev/rules.d
    2.44 -	cp -a $src/tools/udev/libsane.rules $DESTDIR/etc/udev/rules.d/55-sane.rules
    2.45 +	mkdir -p $install/etc/udev/rules.d
    2.46 +	cp $src/tools/udev/libsane.rules $install/etc/udev/rules.d/55-sane.rules
    2.47 +
    2.48 +	# TazPanel stuff
    2.49 +	mkdir -p \
    2.50 +		$install/var/www/tazpanel/lib/ \
    2.51 +		$install/var/www/tazpanel/report.d/ \
    2.52 +		$install/var/www/tazpanel/menu.d/hardware/ \
    2.53 +		$install/var/www/tazpanel/styles/default/images
    2.54 +	cp $stuff/tazpanel/sane.cgi $install/var/www/tazpanel/
    2.55 +	cp $stuff/tazpanel/sane     $install/var/www/tazpanel/report.d/
    2.56 +	cp $stuff/tazpanel/crop.js  $install/var/www/tazpanel/lib/
    2.57 +	cp $stuff/tazpanel/drag.gif $install/var/www/tazpanel/styles/default/images/
    2.58 +	ln -s ../../sane.cgi        $install/var/www/tazpanel/menu.d/hardware/sane
    2.59 +
    2.60 +	# fix groups/permissions on /var/lock/sane ; add it to scanner group
    2.61 +	chmod 775 "$install/var/lock/sane"
    2.62 +	chgrp 96  "$install/var/lock/sane"
    2.63 +
    2.64 +	# fix hp officejets
    2.65 +	echo "hpaio" >> "$install/etc/sane.d/dll.conf"
    2.66  }
    2.67  
    2.68 -# Rules to gen a SliTaz package suitable for Tazpkg.
    2.69 -genpkg_rules()
    2.70 -{
    2.71 -	mkdir -p $fs/usr/lib $fs/usr/share \
    2.72 -	         $fs/var/lock/sane $fs/etc/sane.d \
    2.73 -	         $fs/var/www/tazpanel/lib \
    2.74 -	         $fs/var/www/tazpanel/report.d \
    2.75 -	         $fs/var/www/tazpanel/menu.d/hardware
    2.76 -	
    2.77 -	cp -a $install/etc/sane.d $fs/etc
    2.78 -	cp -a $install/usr/bin $fs/usr
    2.79 -	cp -a $install/usr/sbin $fs/usr
    2.80 -	cp -a $install/usr/lib/*.so* $fs/usr/lib
    2.81 -	cp -a $install/usr/lib/sane $fs/usr/lib
    2.82 -	cp -a $install/usr/share/sane $fs/usr/share
    2.83 -	cp $stuff/tazpanel/sane.cgi $fs/var/www/tazpanel/
    2.84 -	cp $stuff/tazpanel/sane $fs/var/www/tazpanel/report.d/
    2.85 -	cp $stuff/tazpanel/crop.js $fs/var/www/tazpanel/lib/
    2.86 -	ln -s ../../sane.cgi $fs/var/www/tazpanel/menu.d/hardware/sane
    2.87 -	
    2.88 -	# fix groups/permissions on /var/lock/sane ; add it to scanner group
    2.89 -	chmod 775 "$fs/var/lock/sane"
    2.90 -	chgrp 96 "$fs/var/lock/sane"
    2.91 -   
    2.92 -	# fix hp officejets
    2.93 -	echo "hpaio" >> "$fs/etc/sane.d/dll.conf"
    2.94 +genpkg_rules() {
    2.95 +	case $PACKAGE in
    2.96 +		sane-backends)
    2.97 +			copy @std
    2.98 +			DEPENDS="libusb-compat libjpeg-turbo tiff zlib libgphoto2 libv4l libltdl"
    2.99 +			SUGGESTED="imagemagick gocr tesseract-ocr"
   2.100 +			;;
   2.101 +		*-dev)
   2.102 +			copy @dev
   2.103 +			DEPENDS="sane-backends"
   2.104 +			;;
   2.105 +	esac
   2.106  }
   2.107  
   2.108 -post_install()
   2.109 -{
   2.110 -	tazpkg reconfigure udev --root="$1"
   2.111 -	
   2.112 +post_install_sane_backends() {
   2.113 +	tazpkg reconfigure eudev --root="$1"
   2.114 +
   2.115  	# add group scanner
   2.116  	if ! grep -q scanner "$1/etc/group" ; then
   2.117  		chroot "$1/" addgroup -g 96 scanner
   2.118  	fi
   2.119 -	
   2.120 +
   2.121  	echo " ADD yourself to group scanner to use sane: addgroup tux scanner"
   2.122 -	
   2.123 -	rm -f "$1"/var/cache/tazpanel/* 2> /dev/null
   2.124 +
   2.125 +	rm -f "$1"/var/cache/tazpanel/* 2>/dev/null
   2.126  	[ -e "$1/var/www/tazpanel/tmp" ] ||
   2.127  	ln -s /tmp "$1/var/www/tazpanel/tmp"
   2.128  }
   2.129  
   2.130 -post_remove()
   2.131 -{
   2.132 +post_remove_sane_backends() {
   2.133  	chroot "$1/" delgroup scanner & >/dev/null
   2.134  }
     3.1 --- a/sane-backends/stuff/tazpanel/crop.js	Wed Jan 24 12:19:58 2018 +0200
     3.2 +++ b/sane-backends/stuff/tazpanel/crop.js	Wed Jan 24 13:17:46 2018 +0200
     3.3 @@ -31,7 +31,7 @@
     3.4  function cropCreateDragImg(id)
     3.5  {
     3.6  	var div = document.createElement('IMG');
     3.7 -	div.src = 'drag.gif';
     3.8 +	div.src = 'styles/default/images/drag.gif';
     3.9  	div.width = 12;
    3.10  	div.style.position = 'absolute';
    3.11  	div.style.cursor = div.id = id;
     4.1 Binary file sane-backends/stuff/tazpanel/drag.gif has changed
     5.1 --- a/sane-backends/stuff/tazpanel/sane.cgi	Wed Jan 24 12:19:58 2018 +0200
     5.2 +++ b/sane-backends/stuff/tazpanel/sane.cgi	Wed Jan 24 13:17:46 2018 +0200
     5.3 @@ -2,7 +2,7 @@
     5.4  #
     5.5  # Scanner CGI interface - Scan documents via a browser
     5.6  #
     5.7 -# (C) 2015 SliTaz GNU/Linux - BSD License
     5.8 +# (C) 2018 SliTaz GNU/Linux - BSD License
     5.9  #
    5.10  
    5.11  # Common functions from libtazpanel
    5.12 @@ -24,6 +24,7 @@
    5.13  EOT
    5.14  		export TEXTDOMAIN=$TEXTDOMAIN_original
    5.15  		exit
    5.16 +		;;
    5.17  esac
    5.18  
    5.19  TITLE="$(_ 'TazPanel - Hardware') - $(_ 'Scanner')"
    5.20 @@ -34,19 +35,20 @@
    5.21  	[ $1 -gt $3 ] && n=$3
    5.22  	echo $n
    5.23  }
    5.24 -    
    5.25 +
    5.26  getgeometry() {
    5.27  	CMD=""
    5.28  	ARGS=""
    5.29 -	for i in x y l t ; do
    5.30 +	for i in x y l t; do
    5.31  		j=$(inrange $(xPOST geometry_$i) $(xPOST ${i}_min) $(xPOST ${i}_max))
    5.32  		eval "geometry_$i=$j"
    5.33  		CMD="$CMD -$i $j"
    5.34  		ARGS="$ARGS $j"
    5.35  	done
    5.36 -	for i in mode source contrast brightness ; do
    5.37 +	for i in mode source contrast brightness; do
    5.38  		[ "$(xPOST $i)" ] && CMD="$CMD --$i '$(xPOST $i)'"
    5.39  	done
    5.40 +
    5.41  	resolution=${1:-0}
    5.42  	if [ $resolution -eq 0 ]; then
    5.43  		resolution=$(xPOST res_min)
    5.44 @@ -56,21 +58,27 @@
    5.45  			resolution=$(($resolution * 2))
    5.46  		done
    5.47  	fi
    5.48 +
    5.49  	case "$(xPOST mode)" in
    5.50 -	*lack*|*ineart*) mode="-monochrome" ;;
    5.51 -	*ray*) mode="-colorspace gray" ;;
    5.52 -	*) mode="" ;;
    5.53 +		*lack*|*ineart*) mode="-monochrome";;
    5.54 +		*ray*)           mode="-colorspace gray";;
    5.55 +		*)               mode="";;
    5.56  	esac
    5.57 +
    5.58  	[ -d tmp ] || ln -s /tmp tmp
    5.59 +
    5.60  	case "$device" in
    5.61 -	fake*)	f=/usr/share/images/slitaz-banner.png
    5.62 -		c="$(echo $ARGS $(identify $f | sed \
    5.63 -		    's/.* \([0-9]*\)x.*/\1/') $(GET width) $(POST x_max) | awk '
    5.64 -function a(x) { return int(($x * $5)/ $7); }
    5.65 -{ printf "%dx%d+%d+%d -resize %dx%d",a(1),a(2),a(3),a(4),$6,int(($2*$6)/$1)}
    5.66 -')"
    5.67 -		suf="png"; [ "$1" ] && suf="pnm"
    5.68 -		cat <<EOT
    5.69 +		fake*)
    5.70 +			f=$(ls fake-sane/*.png | sed q)
    5.71 +			[ -s "$f" ] || f=/usr/share/images/slitaz-banner.png
    5.72 +			c="$(echo $ARGS $(identify $f \
    5.73 +			| sed 's/.* \([0-9]*\)x.*/\1/') $(GET width) $(POST x_max) \
    5.74 +			| awk '
    5.75 +				function a(x) { return int(($x * $5)/ $7); }
    5.76 +				{ printf "%dx%d+%d+%d -resize %dx%d",a(1),a(2),a(3),a(4),$6,int(($2*$6)/$1)}
    5.77 +				')"
    5.78 +			suf="png"; [ "$1" ] && suf="pnm"
    5.79 +			cat <<EOT
    5.80  if convert -crop $c $mode $f /tmp/sane$$.$suf 2> /dev/null ; then
    5.81  	cat /tmp/sane$$.$suf
    5.82  	rm -f /tmp/sane$$.$suf
    5.83 @@ -78,57 +86,68 @@
    5.84  	cat $f
    5.85  fi
    5.86  EOT
    5.87 -		;;
    5.88 -	*)	echo -n "scanimage -d '$(echo $device | sed 's/,.*//')' --resolution '$(inrange $resolution $(xPOST res_min) $(xPOST res_max))dpi'$CMD"
    5.89 -		if [ -z "$1" -a "$(which convert)" ]; then
    5.90 -			echo -n "> /tmp/sane$$.pnm ; convert -resize "
    5.91 -			echo $ARGS $(GET width) | awk '{ printf "%dx%d",$5,int(($2*$5)/$1)}'
    5.92 -			echo -n " /tmp/sane$$.pnm /tmp/sane$$.png ;"
    5.93 -			echo -n "cat /tmp/sane$$.png ; rm -f /tmp/sane$$.pn?"
    5.94 -		fi
    5.95 +			;;
    5.96 +		*)
    5.97 +			echo -n "scanimage -d '$(echo $device \
    5.98 +			| sed 's/,.*//')' --resolution '$(inrange $resolution $(xPOST res_min) $(xPOST res_max))dpi'$CMD"
    5.99 +			if [ -z "$1" -a "$(which convert)" ]; then
   5.100 +				echo -n "> /tmp/sane$$.pnm ; convert -resize "
   5.101 +				echo $ARGS $(GET width) | awk '{ printf "%dx%d",$5,int(($2*$5)/$1)}'
   5.102 +				echo -n " /tmp/sane$$.pnm /tmp/sane$$.png ;"
   5.103 +				echo -n "cat /tmp/sane$$.png ; rm -f /tmp/sane$$.pn?"
   5.104 +			fi
   5.105 +			;;
   5.106  	esac
   5.107  }
   5.108  
   5.109  imgformat() {
   5.110 -tmp=$(mktemp -u -t tazsane.XXXXXX)
   5.111 -while read key name type exe pkg cmd ; do
   5.112 -	case "$key" in
   5.113 -	\#*)	continue
   5.114 -	esac
   5.115 -	case "$1" in
   5.116 -	list)
   5.117 -		echo -n "<option value=\"$key\""
   5.118 -		[ "$(which $exe 2> /dev/null)" ] || 
   5.119 -		echo -n " disabled title=\"$exe not found: install $pkg\""
   5.120 -		[ "$key" == "pnm" ] &&
   5.121 -		echo -n " title=\"not supported by most browsers\""
   5.122 -		echo ">$key" ;;
   5.123 -	*)
   5.124 +	tmp=$(mktemp -u -t tazsane.XXXXXX)
   5.125 +	while read key name type exe pkg cmd; do
   5.126  		case "$key" in
   5.127 -		$(xPOST format)|'*')
   5.128 -			case "$HTTP_USER_AGENT" in
   5.129 +			\#*)	continue
   5.130 +		esac
   5.131  
   5.132 -			# Tazweb has no download support
   5.133 -			TazWe*)	rm -f /tmp/$name
   5.134 -				eval "$(getgeometry $(xPOST resolution)) $cmd >/tmp/$name" 2> $tmp.err
   5.135 -				if [ -s /tmp/$name ]; then
   5.136 -					info="Stored in /tmp/$name ($(stat -c %s /tmp/$name) bytes)."
   5.137 -				else
   5.138 -					error="$(sed 's|$|<br />|' $tmp.err)"
   5.139 -					[ "$error" ] || error="I/O error"
   5.140 -				fi
   5.141 -				rm -f $tmp.* ;;
   5.142 +		case "$1" in
   5.143 +			list)
   5.144 +				echo -n "<option value=\"$key\""
   5.145 +				[ "$(which $exe 2>/dev/null)" ] ||
   5.146 +				echo -n " disabled title=\"$exe not found: install $pkg\""
   5.147 +				[ "$key" == "pnm" ] &&
   5.148 +				echo -n " title=\"not supported by most browsers\""
   5.149 +				echo ">$key"
   5.150 +				;;
   5.151 +			*)
   5.152 +				case "$key" in
   5.153 +					$(xPOST format)|'*')
   5.154 +						case "$HTTP_USER_AGENT" in
   5.155  
   5.156 -			# Others should work
   5.157 -			*)	header	"Content-Type: $type" \
   5.158 -					"Content-Disposition: attachment; filename=$name" \
   5.159 +							# Tazweb has no download support
   5.160 +							TazWe*)
   5.161 +								rm -f /tmp/$name
   5.162 +								eval "$(getgeometry $(xPOST resolution)) $cmd >/tmp/$name" 2> $tmp.err
   5.163 +								if [ -s /tmp/$name ]; then
   5.164 +									info="Stored in /tmp/$name ($(stat -c %s /tmp/$name) bytes)."
   5.165 +								else
   5.166 +									error="$(sed 's|$|<br />|' $tmp.err)"
   5.167 +									[ "$error" ] || error="I/O error"
   5.168 +								fi
   5.169 +								rm -f $tmp.*
   5.170 +								;;
   5.171  
   5.172 -				eval "$(getgeometry $(xPOST resolution)) $cmd"
   5.173 -				rm -f $tmp.*
   5.174 -				exit ;;
   5.175 -			esac ;;
   5.176 -		esac ;;
   5.177 -	esac
   5.178 +							# Others should work
   5.179 +							*)
   5.180 +								header	"Content-Type: $type" \
   5.181 +									"Content-Disposition: attachment; filename=$name" \
   5.182 +
   5.183 +								eval "$(getgeometry $(xPOST resolution)) $cmd"
   5.184 +								rm -f $tmp.*
   5.185 +								exit
   5.186 +								;;
   5.187 +						esac
   5.188 +						;;
   5.189 +				esac
   5.190 +				;;
   5.191 +		esac
   5.192  done <<EOT
   5.193  png		tazsane.png		image/png		convert		imagemagick 	> $tmp.pnm; convert $tmp.pnm png:-
   5.194  jpeg		tazsane.jpg		image/jpeg		convert		imagemagick 	> $tmp.pnm; convert $tmp.pnm jpg:-
   5.195 @@ -155,23 +174,26 @@
   5.196  error=""
   5.197  
   5.198  case " $(POST) " in
   5.199 -*\ reset\ *)
   5.200 -	unset device tmpreview
   5.201 -	preview="reset" ;;
   5.202 -*\ preview\ *)
   5.203 -	[ "$tmpreview" ] || tmpreview=$(mktemp -u -t tazsane.XXXXXX).png
   5.204 -	tmp=$(mktemp -u -t tazsane.XXXXXX)
   5.205 -	eval "$(getgeometry)" > $tmp.pnm 2> $tmp.err
   5.206 -	if [ -s "$tmp.pnm" ]; then
   5.207 -		convert $tmp.pnm $tmpreview > /dev/null 2>&1 ||
   5.208 -		cp $tmp.pnm $tmpreview
   5.209 -	else
   5.210 -		error="$(sed 's|$|<br />|' $tmp.err)"
   5.211 -		rm -f $tmpreview
   5.212 -	fi
   5.213 -	rm -f $tmp.pnm $tmp.err ;;
   5.214 -*\ scan\ *)
   5.215 -	imgformat download ;;
   5.216 +	*\ reset\ *)
   5.217 +		unset device tmpreview
   5.218 +		preview="reset"
   5.219 +		;;
   5.220 +	*\ preview\ *)
   5.221 +		[ "$tmpreview" ] || tmpreview=$(mktemp -u -t tazsane.XXXXXX).png
   5.222 +		tmp=$(mktemp -u -t tazsane.XXXXXX)
   5.223 +		eval "$(getgeometry)" > $tmp.pnm 2> $tmp.err
   5.224 +		if [ -s "$tmp.pnm" ]; then
   5.225 +			convert $tmp.pnm $tmpreview > /dev/null 2>&1 ||
   5.226 +			cp $tmp.pnm $tmpreview
   5.227 +		else
   5.228 +			error="$(sed 's|$|<br />|' $tmp.err)"
   5.229 +			rm -f $tmpreview
   5.230 +		fi
   5.231 +		rm -f $tmp.pnm $tmp.err
   5.232 +		;;
   5.233 +	*\ scan\ *)
   5.234 +		imgformat download
   5.235 +		;;
   5.236  esac
   5.237  
   5.238  header
   5.239 @@ -179,62 +201,59 @@
   5.240  [ -n "$error" ] && msg warn "$error"
   5.241  [ -n "$info" ] && msg tip "$info"
   5.242  if [ -z "$device" ]; then
   5.243 -	all="$(scanimage -f '%d,%v %m|'|cat - sane-fake.log|sed 's/|/\n/g')"
   5.244 +	all="$(\
   5.245 +		scanimage -f '%d,%v %m|' \
   5.246 +		| cat - sane-fake.log fake-sane/sane-fake.log \
   5.247 +		| sed 's/|/\n/g')"
   5.248  	case "$(echo "$all" | wc -l)" in
   5.249 -	1)	if [ -z "$all" ]; then
   5.250 -			msg warn "$(_ "No scanner found")"
   5.251 -			msg tip "$(_ "You can test this GUI with ")\
   5.252 +		1)
   5.253 +			if [ -z "$all" ]; then
   5.254 +				msg warn "$(_ "No scanner found")"
   5.255 +				msg tip "$(_ "You can test this GUI with ")\
   5.256  <a href=\"/user/pkgs.cgi?info=fake-sane\">fake-sane</a>"
   5.257 -			xhtml_footer
   5.258 -			exit 0
   5.259 -		fi
   5.260 -		device="${all%|}" ;;
   5.261 -	*)
   5.262 -		suggested=""
   5.263 -		while read exe pkg msg; do
   5.264 -			[ "$(which $exe 2> /dev/null)" ] && continue
   5.265 -			suggested="$suggested
   5.266 +				xhtml_footer
   5.267 +				exit 0
   5.268 +			fi
   5.269 +			device="${all%|}"
   5.270 +			;;
   5.271 +		*)
   5.272 +			suggested=""
   5.273 +			while read exe pkg msg; do
   5.274 +				[ "$(which $exe 2> /dev/null)" ] && continue
   5.275 +				suggested="$suggested
   5.276  <li><a href=\"/user/pkgs.cgi?info=$pkg\">$pkg</a>&nbsp;$msg</li>"
   5.277 -		done <<EOT
   5.278 +			done <<EOT
   5.279  convert		imagemagick	$(_ "to preview images and support more image formats")
   5.280  gocr		gocr		$(_ "a basic optical character recognition")
   5.281  tesseract	tesseract-ocr	$(_ "a better optical character recognition")
   5.282  EOT
   5.283 -		[ "$suggested" ] &&
   5.284 -		msg tip "$(_ "You may need to install:") <ol>$suggested</ol>"
   5.285 -		cat <<EOT
   5.286 +			[ "$suggested" ] &&
   5.287 +			msg tip "$(_ "You may need to install:") <ol>$suggested</ol>"
   5.288 +			cat <<EOT
   5.289  <section>
   5.290  	<header>
   5.291  		<form name="scanner" method="post">
   5.292  			Scanner
   5.293  			<select name="device" size=1>
   5.294  EOT
   5.295 -		echo "$all" | awk -F, '{ if (NF > 0) print "<option value=\"" $0 "\">" 1+i++ " - " $2 }'
   5.296 -		cat <<EOT
   5.297 +			echo "$all" \
   5.298 +			| awk -F, '{ if (NF > 0) print "<option value=\"" $0 "\">" 1+i++ " - " $2 }'
   5.299 +			cat <<EOT
   5.300  			</select>
   5.301  			<button data-icon="start">$(_ "Continue")</button>
   5.302  		</form>
   5.303  	</header>
   5.304  </section>
   5.305  EOT
   5.306 -		xhtml_footer
   5.307 -		exit 0 ;;
   5.308 +			xhtml_footer
   5.309 +			exit 0
   5.310 +			;;
   5.311  	esac
   5.312  fi
   5.313  
   5.314  cat <<EOT
   5.315  <section>
   5.316 -<form name="parameters" method="post">
   5.317 -<script language="JavaScript" type="text/javascript">
   5.318 -<!--
   5.319 -function new_width() {
   5.320 -	document.parameters.action = "?width="+(document.width-30)
   5.321 -}
   5.322 -
   5.323 -window.onresize = new_width
   5.324 -new_width()
   5.325 --->
   5.326 -</script>
   5.327 +<form name="parameters" method="post" style="width:100%">
   5.328  
   5.329  <header>
   5.330  $(echo $device | sed 's/.*,//')
   5.331 @@ -245,7 +264,7 @@
   5.332  </div>
   5.333  </header>
   5.334  
   5.335 -<table class="wide">
   5.336 +<table style="width:100%">
   5.337  <tr>
   5.338  <td>
   5.339  <fieldset><legend>$(_ 'Format')</legend>
   5.340 @@ -258,7 +277,7 @@
   5.341  
   5.342  if [ "$(xPOST params)" ]; then
   5.343  	params="$(xPOST params | uudecode)"
   5.344 -else 
   5.345 +else
   5.346  	params="$({
   5.347  cat "$(echo $device | sed 's/,.*//').log" 2> /dev/null ||
   5.348  scanimage --help -d "$(echo $device | sed 's/,.*//')"
   5.349 @@ -297,7 +316,7 @@
   5.350  ')"
   5.351  fi
   5.352  output="$(n=$(echo "$params" | wc -l); echo "$params" | \
   5.353 -while read name def min max ; do
   5.354 +while read name def min max; do
   5.355  	name="${name##*-}"
   5.356  	def="${def//=/ }"
   5.357  	if [ "$min" == "enum" ]; then
   5.358 @@ -327,43 +346,52 @@
   5.359  		f="$(_ "$name") <input name=\"$name\" value=\"$def\""
   5.360  		u=""
   5.361  		case "$name" in
   5.362 -		x|y|l|t) cat <<EOT
   5.363 +			x|y|l|t)
   5.364 +				cat <<EOT
   5.365  :${name}_max=$max
   5.366  <input type="hidden" name="${name}_min" value="$min">
   5.367  <input type="hidden" name="${name}_max" value="$max">
   5.368  EOT
   5.369 -			while read name2 n2 id val; do
   5.370 -				[ "$name" == "$name2" ] || continue
   5.371 -				[ "$(xPOST geometry_$name)" ] &&
   5.372 -				val="$(xPOST geometry_$name)"
   5.373 -				f="<fieldset><legend>$(_ "$n2")</legend><input name=\"geometry_$name\" id=\"$id\" value=\"$val\""
   5.374 -				u="&nbsp;mm"
   5.375 -				break
   5.376 -			done <<EOT
   5.377 +				while read name2 n2 id val; do
   5.378 +					[ "$name" == "$name2" ] || continue
   5.379 +					[ "$(xPOST geometry_$name)" ] &&
   5.380 +					val="$(xPOST geometry_$name)"
   5.381 +					f="<fieldset><legend>$(_ "$n2")</legend><input name=\"geometry_$name\" id=\"$id\" value=\"$val\""
   5.382 +					u="&nbsp;mm"
   5.383 +					break
   5.384 +				done <<EOT
   5.385  l	X-Offset	x	0
   5.386  t	Y-Offset	y	0
   5.387  x	Width		width	$max
   5.388  y	Height		height	$max
   5.389  EOT
   5.390 +				;;
   5.391  		esac
   5.392  		[ "$name" == "resolution" ] && f="$f onchange=showGeometry()"
   5.393  		echo "<td>$f type=\"text\" title=\"$min .. $max\" size=4 maxlength=4>$u"
   5.394  		res_min=$min
   5.395  		res_max=$max
   5.396  	fi
   5.397 +
   5.398  	case "$name" in
   5.399 -	resolution) cat <<EOT
   5.400 +		resolution)
   5.401 +			cat <<EOT
   5.402  <input type="hidden" name="res_min" value="$res_min">
   5.403  <input type="hidden" name="res_max" value="$res_max">
   5.404  &nbsp;dpi
   5.405  EOT
   5.406 +			;;
   5.407  	esac
   5.408 +
   5.409  	echo "</filedset></td>"
   5.410 +
   5.411  	n=$(($n - 2))
   5.412  	case "$n" in
   5.413 -	1|2) echo "</tr><tr>"
   5.414 +		1|2) echo "</tr><tr>";;
   5.415  	esac
   5.416 +
   5.417  done)"
   5.418 +
   5.419  echo "$output" | sed '/^:/d'
   5.420  
   5.421  org_x=$(xPOST geometry_x); [ "$org_x" ] || org_x=$(echo "$output" | sed '/^:x_max=/!d;s/.*=//')