OpenSolaris_b135/cmd/print/scripts/conv_lpd

#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License").  You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 1994, 1995, 1996 by Sun Microsystems, Inc.
# All Rights Reserved
#
# ident	"%Z%%M%	%I%	%E% SMI"
#
#  Printcap <-> Printers.conf conversion utility...
#
#	Usage: conv_lpd [ -c (printers|printcap) ] [ -n ] (file)
#

TEXTDOMAIN="SUNW_OST_OSCMD"
export TEXTDOMAIN

USAGE=`gettext "Usage: conv_lpd [ -c (printers|printcap) ] [ -n ] (file)\n"`

PATH=/usr/bin:/bin:/usr/sbin export PATH
conversion="printers"
namelist=0

umask 022

for i in $*
do
	case $1 in
		-c*)
			conversion=$2;
			shift ; shift ;
		;;
		-n*)
			namelist=1;
			shift ;
		;;
		*)
			break ;
		;;
	esac
done

TMPF1=/tmp/tinput1.$$
TMPF2=/tmp/tinput2.$$
FILE=/tmp/input.$$

# Any remaining arg is the "file" specification.  It is a required arg.
if [ -z "$1" ]; then
	echo $USAGE
	exit 1
else
	cp $1 $TMPF1
fi

echo  >>$TMPF1
echo "_done" >>$TMPF1

#
# First, strip all continuation characters, leaving one, single line
# for each printer entry.
#
	CONV_FIX=/usr/lib/print/conv_fix

	if [ -f $CONV_FIX ]; then
		$CONV_FIX -f $TMPF1 -o $TMPF2
		if [ $? != 0 ]; then
			echo "$0:"
			gettext "Fatal Error: $CONV_FIX failed.\n"
			gettext "Please contact your Sun support representative.\n"
			exit 1
		fi
	else
		gettext "$0: Fatal: Cannot locate $CONV_FIX binary.\n"
		gettext "Please contact your Sun support representative.\n"
		exit 1
	fi

#
# Continuation characters are now stripped.  Continue processing.
#
	/bin/sed -e "s/:[ 	]*:/:/g" $TMPF2 > $FILE

#
# Empty colons ":[ <TAB>]*:" are now stripped.  Continue processing.
#

nawk '
BEGIN {
	"uname -n" | getline ; 
	host = $0 ;
	found = 0 ;
	local_pr = 0;
}

{
        FS=":"; OFS=":" ;
        if ($0 !~ /^#/)
         {
                        if ($0 ~ /^[_a-zA-Z0-9_]/) {     # New entry
				if ( found != 0 ) {
				    if ( "'$namelist'" == 1 )
					printer = names ;
				    else
					printer = name[1] ;

				    if ( "'$conversion'" == "printers" ) {
					printf "\n%s:", names ;
					for (key in values) {
						if ((key != "rp") &&
						    (key != "rm")) {
						printf "\\\n\t:%s=%s:", 
							key, values[key] ;
						delete values[key];
						}
					}
					if (values["rm"] != "") {
						printf "\\\n\t:bsdaddr=%s,%s:", \
							values["rm"], \
							values["rp"] ;
						if (values["rm"] == host) local_pr++;
					} else {
						printf "\\\n\t:bsdaddr=%s,%s:", \
							host, printer ;
						local_pr++;
					}
					delete values["rp"];
					delete values["rm"];
				    } else {
					printf "\n%s:", names ;
					for (key in values) {
						if (key == "bsdaddr") {
							split(values[key],
								pair, ",");
							printf "\\\n\t:%s=%s:", \
								"rm", pair[1] ;
							if (pair[2] == "")
								pair[2] = printer;
							printf "\\\n\t:%s=%s:", \
								"rp", pair[2] ;
							
						} else if ((key == "br") || \
							   (key == "fc") || \
							   (key == "fs") || \
							   (key == "mc") || \
							   (key == "mx") || \
							   (key == "pc") || \
							   (key == "pl") || \
							   (key == "pw") || \
							   (key == "px") || \
							   (key == "py") || \
							   (key == "xc") || \
							   (key == "xs"))
						   	printf "\\\n\t:%s#%s:", \
								key, \
								values[key] ;
						else if (values[key] == "true")
							printf "\\\n\t:%s:", \
								key ;
						else if (values[key] != "false")
						   	printf "\\\n\t:%s=%s:", \
								key, \
								values[key] ;
						delete values[key];
					}
				    }
				}
				split( $1, name, "|");
				names = $1 ;
				found++;
			}

			for ( i = 1 ; i <= NF ; i++ ) {
				if (($i == names) || ($i == "") || \
			  	    ($i == "\t"))
					continue ;
				if ((split( $i, pair, "=" ) != 2) && \
				    (split( $i, pair, "\#") != 2))
					pair[2] = "true";
				
				if (pair[1] != "" && pair[1] != "	")
					values[pair[1]] = pair[2] ;
			}
        }
}
END {
	 printf "\n" ;
	 if (local_pr != 0)
		 printf  "One or more printers are local, you may want to run lpadmin to configure LP server side operation\n" | "cat 1>&2" ;

}' ${FILE}

/bin/rm -f ${TMPF1} ${TMP2} ${FILE}

exit 0