1 #!/bin/sh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License, Version 1.0 only 7 # (the "License"). You may not use this file except in compliance 8 # with the License. 9 # 10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 11 # or http://www.opensolaris.org/os/licensing. 12 # See the License for the specific language governing permissions 13 # and limitations under the License. 14 # 15 # When distributing Covered Code, include this CDDL HEADER in each 16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 17 # If applicable, add the following below this CDDL HEADER, with the 18 # fields enclosed by brackets "[]" replaced with your own identifying 19 # information: Portions Copyright [yyyy] [name of copyright owner] 20 # 21 # CDDL HEADER END 22 # 23 # 24 # Copyright (c) 1994, 1995, 1996 by Sun Microsystems, Inc. 25 # All Rights Reserved 26 # 27 # Printcap <-> Printers.conf conversion utility... 28 # 29 # Usage: conv_lpd [ -c (printers|printcap) ] [ -n ] (file) 30 # 31 32 TEXTDOMAIN="SUNW_OST_OSCMD" 33 export TEXTDOMAIN 34 35 USAGE=`gettext "Usage: conv_lpd [ -c (printers|printcap) ] [ -n ] (file)\n"` 36 37 PATH=/usr/bin:/bin:/usr/sbin export PATH 38 conversion="printers" 39 namelist=0 40 41 umask 022 42 43 for i in $* 44 do 45 case $1 in 46 -c*) 47 conversion=$2; 48 shift ; shift ; 49 ;; 50 -n*) 51 namelist=1; 52 shift ; 53 ;; 54 *) 55 break ; 56 ;; 57 esac 58 done 59 60 TMPF1=/tmp/tinput1.$$ 61 TMPF2=/tmp/tinput2.$$ 62 FILE=/tmp/input.$$ 63 64 # Any remaining arg is the "file" specification. It is a required arg. 65 if [ -z "$1" ]; then 66 echo $USAGE 67 exit 1 68 else 69 cp $1 $TMPF1 70 fi 71 72 echo >>$TMPF1 73 echo "_done" >>$TMPF1 74 75 # 76 # First, strip all continuation characters, leaving one, single line 77 # for each printer entry. 78 # 79 CONV_FIX=/usr/lib/print/conv_fix 80 81 if [ -f $CONV_FIX ]; then 82 $CONV_FIX -f $TMPF1 -o $TMPF2 83 if [ $? != 0 ]; then 84 echo "$0:" 85 gettext "Fatal Error: $CONV_FIX failed.\n" 86 gettext "Please contact your Sun support representative.\n" 87 exit 1 88 fi 89 else 90 gettext "$0: Fatal: Cannot locate $CONV_FIX binary.\n" 91 gettext "Please contact your Sun support representative.\n" 92 exit 1 93 fi 94 95 # 96 # Continuation characters are now stripped. Continue processing. 97 # 98 /bin/sed -e "s/:[ ]*:/:/g" $TMPF2 > $FILE 99 100 # 101 # Empty colons ":[ <TAB>]*:" are now stripped. Continue processing. 102 # 103 104 /usr/xpg4/bin/awk ' 105 BEGIN { 106 "uname -n" | getline ; 107 host = $0 ; 108 found = 0 ; 109 local_pr = 0; 110 } 111 112 { 113 FS=":"; OFS=":" ; 114 if ($0 !~ /^#/) 115 { 116 if ($0 ~ /^[_a-zA-Z0-9_]/) { # New entry 117 if ( found != 0 ) { 118 if ( "'$namelist'" == 1 ) 119 printer = names ; 120 else 121 printer = name[1] ; 122 123 if ( "'$conversion'" == "printers" ) { 124 printf "\n%s:", names ; 125 for (key in values) { 126 if ((key != "rp") && 127 (key != "rm")) { 128 printf "\\\n\t:%s=%s:", 129 key, values[key] ; 130 delete values[key]; 131 } 132 } 133 if (values["rm"] != "") { 134 printf "\\\n\t:bsdaddr=%s,%s:", \ 135 values["rm"], \ 136 values["rp"] ; 137 if (values["rm"] == host) local_pr++; 138 } else { 139 printf "\\\n\t:bsdaddr=%s,%s:", \ 140 host, printer ; 141 local_pr++; 142 } 143 delete values["rp"]; 144 delete values["rm"]; 145 } else { 146 printf "\n%s:", names ; 147 for (key in values) { 148 if (key == "bsdaddr") { 149 split(values[key], 150 pair, ","); 151 printf "\\\n\t:%s=%s:", \ 152 "rm", pair[1] ; 153 if (pair[2] == "") 154 pair[2] = printer; 155 printf "\\\n\t:%s=%s:", \ 156 "rp", pair[2] ; 157 158 } else if ((key == "br") || \ 159 (key == "fc") || \ 160 (key == "fs") || \ 161 (key == "mc") || \ 162 (key == "mx") || \ 163 (key == "pc") || \ 164 (key == "pl") || \ 165 (key == "pw") || \ 166 (key == "px") || \ 167 (key == "py") || \ 168 (key == "xc") || \ 169 (key == "xs")) 170 printf "\\\n\t:%s#%s:", \ 171 key, \ 172 values[key] ; 173 else if (values[key] == "true") 174 printf "\\\n\t:%s:", \ 175 key ; 176 else if (values[key] != "false") 177 printf "\\\n\t:%s=%s:", \ 178 key, \ 179 values[key] ; 180 delete values[key]; 181 } 182 } 183 } 184 split( $1, name, "|"); 185 names = $1 ; 186 found++; 187 } 188 189 for ( i = 1 ; i <= NF ; i++ ) { 190 if (($i == names) || ($i == "") || \ 191 ($i == "\t")) 192 continue ; 193 if ((split( $i, pair, "=" ) != 2) && \ 194 (split( $i, pair, "\#") != 2)) 195 pair[2] = "true"; 196 197 if (pair[1] != "" && pair[1] != " ") 198 values[pair[1]] = pair[2] ; 199 } 200 } 201 } 202 END { 203 printf "\n" ; 204 if (local_pr != 0) 205 printf "One or more printers are local, you may want to run lpadmin to configure LP server side operation\n" | "cat 1>&2" ; 206 207 }' ${FILE} 208 209 /bin/rm -f ${TMPF1} ${TMP2} ${FILE} 210 211 exit 0