#!/bin/bash

function store_xw_default_settings {
	RES=320
	PAPER=plain
	INK=normal
	XWDESCFILE=canon_bjc6000
	SCALE=1.0
	XWSPOOLDIR=/var/spool/xw_tools
	XWPORT=/dev/lp0
	XWHOST=localhost
	LTHR=31
	INSTALLPATH=/usr/local/bin
	DIALOG=/usr/bin/dialog
	XWUSERRC=$HOME/.conmen/xwrc
	XWDESCDIR=/tmp
}

function save_xw_userrc {
	[ -f ${XWUSERRC} ] && cp ${XWUSERRC} ${XWUSERRC}.old
        [ ! -z "$RES" ] && echo RES="'"${RES}"'" >> ${XWUSERRC}
        [ ! -z "$PAPER" ] && echo PAPER="'"${PAPER}"'" >> ${XWUSERRC}
        [ ! -z "$INK" ] && echo INK="'"${INK}"'" >> ${XWUSERRC}
        [ ! -z "$FILE" ] && echo FILE="'"${FILE}"'" >> ${XWUSERRC}
        [ ! -z "$XWDESCFILE" ] && echo XWDESCFILE="'"${XWDESCFILE}"'" >> ${XWUSERRC}
        [ ! -z "$RASTERFILE" ] && echo RASTERFILE="'"${RASTERFILE}"'" >> ${XWUSERRC}
        [ ! -z "$XWPRINTER" ] && echo XWPRINTER="'"${XWPRINTER}"'" >> ${XWUSERRC}
        [ ! -z "$SCALE" ] && echo SCALE="'"${SCALE}"'" >> ${XWUSERRC}
        [ ! -z "$XWSPOOLDIR" ] && echo XWSPOOLDIR="'"${XWSPOOLDIR}"'" >> ${XWUSERRC}
        [ ! -z "$XWHOST" ] && echo XWHOST="'"${XWHOST}"'" >> ${XWUSERRC}
        [ ! -z "$XWPORT" ] && echo XWPORT="'"${XWPORT}"'" >> ${XWUSERRC}
        [ ! -z "$X" ] && echo X="'"${X}"'" >> ${XWUSERRC}
        [ ! -z "$Y" ] && echo Y="'"${Y}"'" >> ${XWUSERRC}
        [ ! -z "$W" ] && echo W="'"${W}"'" >> ${XWUSERRC}
        [ ! -z "$H" ] && echo H="'"${H}"'" >> ${XWUSERRC}
        [ ! -z "$SAT" ] && echo SAT="'"${SAT}"'" >> ${XWUSERRC}
        [ ! -z "$LTHR" ] && echo LTHR="'"${LTHR}"'" >> ${XWUSERRC}
        [ ! -z "$PSIZE" ] && echo PSIZE="'"${PSIZE}"'" >> ${XWUSERRC}
        [ ! -z "$LB" ] && echo LB="'"${LB}"'" >> ${XWUSERRC}
        [ ! -z "$RB" ] && echo RB="'"${RB}"'" >> ${XWUSERRC}
        [ ! -z "$TB" ] && echo TB="'"${TB}"'" >> ${XWUSERRC}
        [ ! -z "$BB" ] && echo BB="'"${BB}"'" >> ${XWUSERRC}
        [ ! -z "$GRAY" ] && echo GRAY="'"${GRAY}"'" >> ${XWUSERRC}
        [ ! -z "$COMP" ] && echo COMP="'"${COMP}"'" >> ${XWUSERRC}
        [ ! -z "$FORMAT" ] && echo FORMAT="'"${FORMAT}"'" >> ${XWUSERRC}
        [ ! -z "$TMPFORMAT" ] && echo TMPFORMAT="'"${TMPFORMAT}"'" >> ${XWUSERRC}
        [ ! -z "$AROT" ] && echo AROT="'"${AROT}"'" >> ${XWUSERRC}
        [ ! -z "$SOFT" ] && echo SOFT="'"${SOFT}"'" >> ${XWUSERRC}
        [ ! -z "$XWDESCDIR" ] && echo XWDESCDIR="'"${XWDESCDIR}"'" >> ${XWUSERRC}
        [ ! -z "$DIALOG" ] && echo DIALOG="'"${DIALOG}"'" >> ${XWUSERRC}
        [ ! -z "$INSTALLPATH" ] && echo INSTALLPATH="'"${INSTALLPATH}"'" >> ${XWUSERRC}
        [ ! -z "$XWUSERRC" ] && echo XWUSERRC="'"${XWUSERRC}"'" >> ${XWUSERRC}
}

function change_settings {
	clear
	CHANGEMENU=
	while [ "$CHANGEMENU" != "x" ] ; do
	clear
	echo -e "1)  Change resolution..................[\033[1;33m"$RES"\033[0m]"
	echo -e "2)  Paper quality......................[\033[1;33m"$PAPER"\033[0m]"
	echo -e "3)  Select ink.........................[\033[1;33m"$INK"\033[0m]"
	echo -e "4)  Select file to print...............[\033[1;33m"$RASTERFILE"\033[0m]"
	echo -e "5)  Scale..............................[\033[1;33m"$SCALE"\033[0m]"
	echo -e "6)  Select printer.....................[\033[1;33m"$XWPRINTER"\033[0m]"
	echo -e "7)  Spool directory....................[\033[1;33m"$XWSPOOLDIR"\033[0m]"
	echo -e "8)  Printer port.......................[\033[1;33m"$XWPORT"\033[0m]"
	echo -e "9)  Printerhost........................[\033[1;33m"$XWHOST"\033[0m]"
	echo -e "10) Papersize..........................[\033[1;33m"$PSIZE"\033[0m]"
	echo -e "11) X..................................[\033[1;33m"$X $TMPFORMAT"\033[0m]"
	echo -e "12) Y..................................[\033[1;33m"$Y $TMPFORMAT"\033[0m]"
	echo -e "13) Picture width......................[\033[1;33m"$W" inches\033[0m]"
	echo -e "14) Picture height.....................[\033[1;33m"$H" inches\033[0m]"
	echo -e "15) Saturation level...................[\033[1;33m"$SAT"\033[0m]"
	echo -e "16) Auto rotation......................[\033[1;33m"$AROT"\033[0m]"
	echo -e "17) Soft...............................[\033[1;33m"$SOFT"\033[0m]"
	echo -e "18) Light threshold....................[\033[1;33m"$LTHR"\033[0m]"
	echo -e "19) Print black and white..............[\033[1;33m"$GRAY"\033[0m]"
	echo -e "20) Compress for more speed............[\033[1;33m"$COMP"\033[0m]"
	echo -e "21) Left   Border......................[\033[1;33m"$LB $TMPFORMAT"\033[0m]"
	echo -e "22) Right  Border......................[\033[1;33m"$RB $TMPFORMAT"\033[0m]"
	echo -e "23) Top    Border......................[\033[1;33m"$TB $TMPFORMAT"\033[0m]"
	echo -e "24) Bottom Border......................[\033[1;33m"$BB $TMPFORMAT"\033[0m]"
	echo -e "25) Inches, centimeters or millimeters.[\033[1;33m"$TMPFORMAT"\033[0m]"
	echo -e "x) Exit"
	echo -n "? " ; read CHANGEMENU

    case $CHANGEMENU in

	1)  echo -ne "Resolution: [320/320extra/720]: " ; read RES;;
	2)  echo -ne "Paper: [plain/highres/glossy/film]: " ; read PAPER ;;
	3)  echo -ne "Ink: [normal/photo]: " ; read INK;;
	4)  TMPRASTERFILE=$RASTERFILE ; echo -ne "Specify or hit enter for [\033[1;33m"$RASTERFILE"\033[0m]: "
	    read RASTERFILE
	    [ -f $RASTERFILE ] || echo -n "[\033[1;33m"$RASTERFILE"\033[0m] does not exist, try again: "
	    [ -z "$RASTERFILE" ] && RASTERFILE=$TMPRASTERFILE
	    sleep 2;;
	5)  echo -ne "Scale [default 1.0]: " ; read SCALE;;
	6)  echo -ne "Printer: " ; read XWPRINTER;;
	7)  echo -ne "Spool directory: " ; read XWSPOOLDIR
	    [ -d "$XWSPOOLDIR" ] || echo "$XWSPOOLDIR does not exist" && sleep 2;;
	8)  echo -ne "Printer port [/dev/lp#]: " ; read XWPORT
	    [ -c "$XWPORT" ] || echo "$XWPORT does not exist" && sleep 2;;
	9)  echo -ne "Printhost: " ; read XWHOST;;
	10)  echo -ne "Papersize [A4/Legal/Letter/Executive/A3/Ledger/Tabloid]: " ; read PSIZE;;
	11)  echo -ne "X: " ; read X;;
	12)  echo -ne "Y: " ; read Y;;
	13)  echo -ne "Picture Width: " ; read W;;
	14)  echo -ne "Picture Heigth: " ; read H;;
	15)  echo -ne "Saturation []: " ; read SAT;;
	16)  echo -ne "Auto Rotate ? [y/n]: " ; read AROT
	    if [ "$AROT" = "n" ]; then
	    AROT=off
	    else
	    AROT=on
	    fi;;
	17)  echo -ne "Soft on ? [y/n]: " ; read SOFT
	    if [ "$SOFT" = "n" ]; then
	    SOFT=off
	    else
	    SOFT=on
	    fi;;
	18)  echo -ne "Light Threshold [1..63]: " ; read LTHR;;
	19)  echo -ne "Gray on ? [y/n]: " ; read GRAY
	    if [ "$GRAY" = "n" ]; then
	    GRAY=off
	    else
	    GRAY=on
	    fi;;
	20)  echo -ne "Compress ? [y/n]: " ; read COMP
	    if [ "$COMP" = "n" ]; then
	    COMP=off
	    else
	    COMP=on
	    fi;;
	21)  echo -ne "Left border []: " ; read LB;;
	22)  echo -ne "Right border []: " ; read RB;;
	23)  echo -ne "Top border []: " ; read TB;;
	24)  echo -ne "Bottom border []: " ; read BB;;
	25)  echo -ne "[i/c/m]: " ; read FORMAT
	     [ $FORMAT = "i" ] && TMPFORMAT=inch
	     [ $FORMAT = "c" ] && TMPFORMAT=cm
	     [ $FORMAT = "m" ] && TMPFORMAT=mm;;
	x)  save_xw_userrc;return;;
    esac
done
}

function make_xw_desc {
	if [ $XWPRINTER = bjc6000 ]; then
	echo -e "# Output at $RES dpi on "$PAPER"paper with $INK ink. File:"$RASTERFILE" #" > $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_PrintHost $XWHOST" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_SpoolDir $XWSPOOLDIR" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_out $XWPORT" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_Comment Canon BJC-6000" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_dev $XWPRINTER" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_IsXwd" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_greyPrinter" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_paper $PSIZE" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_Glb $LB$FORMAT" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_Grb $RB$FORMAT" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_Gtb $TB$FORMAT" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_Gbb $BB$FORMAT" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_scale $SCALE" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_textOpt" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_extra" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo "" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	echo -e "XW_graphOpt -postBlack 1.05 -minBlack 140 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ ! -z "$Y" ] && echo -e "-Y $Y \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ ! -z "$X" ] && echo -e "-X $X \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ ! -z "$W" ] && echo -e "-Y $W \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ ! -z "$H" ] && echo -e "-Y $H \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ ! -z "$SAT" ] && echo -e "-saturation $SAT \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$AROT" = "off" ] && echo -e "-noAutoRot \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$SOFT" = "on" ] && echo -e "-soft \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$GRAY" = "on" ] && echo -e "-gray \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$COMP" = "on" ] && echo -e "-compress \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$RES" = "320" ] && echo -e "-density low \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$RES" = "320extra" ] && echo -e "-density medium \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$RES" = "720" ] && echo -e "-density high \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	if [ "$PAPER" = "plain" ]; then 
	    echo -e "-media plainPaper \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-gammaW .7 -gammaB 0.3 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	else
	    echo -e "-hb -15 -hc -10 -hm -5 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	fi
	if [ "$PAPER" = "film" ]; then
	    echo -e "-media glossyFilm \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-contrast .85 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-contrastC 1 -contrastM 1 -contrastY 1 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-gammaB .35 -gammaW .7 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc 
	fi
	if [ "$PAPER" = "highres" ]; then
	    echo -e "-media highResolutionPaper \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    resolution
	fi
	if [ "$PAPER" = "glossy" ]; then
	    echo -e "-media glossyPaper \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    resolution
	fi
	[ "$INK" = "normal" -o "$INK" = "" ] && echo -e "">> $XWDESCDIR/xw_$XWDESCFILE.desc
	[ "$INK" = "photo" ] && echo -e "-photoColor -lightThreshold $LTHR" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	fi
}

function resolution {
	echo -e "-gammaB .4 -gammaW .7 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc 
	if [ "$RES" = "320" ]; then
	    echo -e "-contrast 1 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-contrastC 1 -contrastM .9 -contrastY .9 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	fi
	if [ "$RES" = "320extra" ]; then 
	    echo -e "-contrast 1 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-contrastC 1 -contrastM .90 -contrastY .8 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	fi
	if [ "$RES" = "720" ]; then 
	    echo -e "-contrast .85 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	    echo -e "-contrastC 1 -contrastM .90 -contrastY .9 \\" >> $XWDESCDIR/xw_$XWDESCFILE.desc
	fi
}

function make_test_files {
	clear
	/usr/local/bin/mkgxwd $HOME/greytest.xwd && echo "$HOME/greytest.xwd has been created"
	/usr/local/bin/mkxwd $HOME/colortest.xwd && echo "$HOME/colortest.xwd has been created"
	RASTERFILE=$HOME/colortest.xwd
	save_xw_userrc
	sleep 3
}

function print {
	clear
	$INSTALLPATH/xw_snd -d $XWDESCFILE -h localhost -s $XWSPOOLDIR \
                	    -f $RASTERFILE
	echo -e "Output at $RES dpi on "$PAPER"paper with $INK ink. File:"$RASTERFILE""
    	read
}
