#!/usr/bin/ksh # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (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 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # # get a list of the Models for this Model from the ppdcache # # Input: # make model # HP OfficeJet 4200 # Output: # <label>(<repository letter>): <driver> # userlabel(U): Foomatic/hpijs (recommended) # SUNWhpijs(S): Foomatic/hpijs (recommended) SaveIFS="$IFS" NoSpaceTabIFS=' ' SEP=": " # # Return cache entries matching the specified make # and model from the specified cache file. # # $1 - Make # $2 - Model # $3 - cachefile ppd_make_entries() { for hit in $(/bin/grep "${1}" "${3}" | /bin/grep ":${2}:") do echo "${hit#*:*:}" done } if [[ $# -lt 2 ]]; then exit 1 fi cachefile=/var/lp/ppd/ppdcache [[ -f $cachefile ]] || exit 1 make=$1 shift model="$*" system= vendor= admin= user= # # Ensure each ppdcache entry is processed as a single string # otherwise it would be split up by spaces. # IFS="$NoSpaceTabIFS" for pentry in $(ppd_make_entries "${make}" "${model}" "${cachefile}") do IFS="$SaveIFS" ppdpath="${pentry##*:}" ppdlpath="${ppdpath%/*/*}" ppdlabel="${ppdlpath##*/}" driver="${pentry%%:*}" case "${ppdpath}" in "/usr/share/ppd/"*) system="${system}${ppdlabel}(S)${SEP}${driver}\n" ;; "/opt/share/ppd/"*) vendor="${vendor}${ppdlabel}(V)${SEP}${driver}\n" ;; "/usr/local/share/ppd/"*) admin="${admin}${ppdlabel}(A)${SEP}${driver}\n" ;; "/var/lp/ppd/"*) user="${user}${ppdlabel}(U)${SEP}${driver}\n" ;; esac IFS="$NoSpaceTabIFS" done IFS="$SaveIFS" echo "${user}${admin}${vendor}${system}" exit 0