conv_lpd revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/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