#!/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 ":[ ]*:" 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