XCOMM!KORNSHELL XCOMM $XConsortium: dtprintegrate.src /main/5 1996/04/23 12:02:04 drk $ XCOMM #################################################################### XCOMM ## File: dtprintegrate XCOMM ## XCOMM ## Default Location: /usr/dt/bin/dtprintegrate XCOMM ## XCOMM ## Purpose: Set up the desktop configuration files for XCOMM ## the desktop components. XCOMM ## XCOMM ## Description: This script is invoked as a means to create the XCOMM ## desktop configuration files for newly installed XCOMM ## printers on a given host. XCOMM ## XCOMM ## Invoked by: System administrators, either by hand or by means XCOMM ## of the printer installation script. XCOMM ## XCOMM ## Product: @(#)Common Desktop Environment 1.0 XCOMM ## XCOMM ## (c) Copyright 1993, 1994 Hewlett-Packard Company XCOMM ## (c) Copyright 1993, 1994 International Business XCOMM ## Machines Corp. XCOMM ## (c) Copyright 1993, 1994 Sun Microsystems, Inc. XCOMM ## XCOMM ## XCOMM ## Note: Please do not modify this file. XCOMM ## Later product updates will overwrite this file. XCOMM ## XCOMM #################################################################### #define HASH # XCOMM ################################################################# XCOMM ## Internal Globals XCOMM ## XCOMM ## Set default values. XCOMM ## COMMAND_NAME=dtprintegrate ACTION_STUB_FILE=/usr/dt/appconfig/appmanager/C/Desktop_Apps/Dtcalc base_icon_name="Fpprnt" XCOMM XCOMM Return codes XCOMM SUCCESS=0 USAGE_ERR=1 CREATE_ERR=2 NO_WRITE_ERR=3 XCOMM ################################################################# XCOMM ## Initialize() XCOMM ## XCOMM ## Do upfront processing. XCOMM ## XCOMM ################################################################# Initialize() { if (( ${#LANG} )) then if [[ $LANG != C ]] then non_default_lang=1 fi fi HASH HASH Location for Print action files... HASH DEFAULT_FOLDER=/etc/dt/appconfig/appmanager/C/Printers DTPRINTERFOLDER=${DTPRINTERFOLDER:-$DEFAULT_FOLDER} if (( ${#DTUSERPRINTERFOLDER} )) then DTPRINTERFOLDER="$DTUSERPRINTERFOLDER" fi if [ ! -d $DTPRINTERFOLDER ] then mkdir -p $DTPRINTERFOLDER > /dev/null 2>/dev/null fi HASH HASH Location for Print definition (*.dt) files... HASH DEFAULT_FOLDER=/etc/dt/appconfig/types/C DTPRINTACTIONFOLDER=${DTPRINTACTIONFOLDER:-$DEFAULT_FOLDER} if [ ! -d $DTPRINTACTIONFOLDER ] then mkdir -p $DTPRINTACTIONFOLDER > /dev/null 2>/dev/null fi HASH HASH Search path for printer icons... HASH DEFAULT_PATH=.,$HOME/.dt/icons,/usr/dt/appconfig/icons/C DTPRINTICONPATH=${DTPRINTICONPATH:-$DEFAULT_PATH} HASH HASH Location for printer icons... HASH DEFAULT_FOLDER=/etc/dt/appconfig/icons/C DTPRINTERICONFOLDER=${DTPRINTERICONFOLDER:-$DEFAULT_FOLDER} HASH HASH Other... HASH database_file=${printer_name}.dt databasefile_path=$DTPRINTACTIONFOLDER/$database_file action_file=${printer_name}_Print action_path=$DTPRINTERFOLDER/$action_file } XCOMM ################################################################# XCOMM ## CheckOptions() XCOMM ## XCOMM ## Check the options supplied in the command line XCOMM ## interface XCOMM ## XCOMM ################################################################# CheckOptions() { if (( $printer_flag == "0" )) HASH HASH We require a printer specification HASH then PrintUsage Exit $USAGE_ERR fi } XCOMM ################################################################# XCOMM ## AddHelpFileContents XCOMM ## XCOMM ## Add the contents of the help file to $1 XCOMM ## XCOMM ################################################################# AddHelpFileContents() { if [[ ! -r $help_file || ! -s $help_file ]] then print "" print " Sorry--Unable to read the help file: " print " \"$help_file\"." print "" failure_flag=1 if (( $verbose_flag )) then PrintEndLog fi Exit $CREATE_ERR fi echo " DESCRIPTION \\" >> $databasefile_path exec 8< $help_file while read -u8 this_line do print $this_line " \\" >> $databasefile_path done print "**" >> $databasefile_path exec 8<&- } XCOMM ################################################################# XCOMM ## MakeDatabaseFile() XCOMM ## XCOMM ## Make the *.dt file for the printer XCOMM ## XCOMM ################################################################# MakeDatabaseFile() { touch $databasefile_path > /dev/null 2>/dev/null chmod +w $databasefile_path > /dev/null 2>/dev/null if [[ ! -f $databasefile_path || ! -w $databasefile_path ]] then failure_flag=1 PrintCreateError "$DTPRINTACTIONFOLDER" "$database_file" if (( $verbose_flag )) then PrintEndLog fi Exit $CREATE_ERR fi HASH HASH First, write the preamble for this *.dt file HASH ( echo "################################################################" echo "# " echo "# Actions and Datatypes for Printer \"$printer_name\"" echo "# " echo "# Common Desktop Environment 1.0" echo "# " echo "# This file created by the \"dtprintegrate\" utility." echo "# " echo "# Date of integration: `date`. " echo "# " echo "################################################################" echo " " ) > $databasefile_path HASH HASH Now, create the Print action for the printer HASH ( echo "ACTION ${printer_name}_Print" echo "{" echo " ARG_TYPE *" echo " LABEL $printer_name" echo " ICON ${base_icon_name}" echo " TYPE COMMAND" echo " WINDOW_TYPE NO_STDIO" if (( destination_flag )) then echo " EXEC_STRING env LPDEST=$destination \\" else echo " EXEC_STRING env LPDEST=$printer_name \\" fi echo " /usr/dt/bin/dtaction Print %(File)Arg_1%" ) >> $databasefile_path if (( $help_flag )) then echo " DESCRIPTION $help_text" >> $databasefile_path elif (( $helpfile_flag )) then AddHelpFileContents $databasefile_path fi echo "}" >> $databasefile_path HASH HASH Next, create the print manager action for the printer HASH ( echo "" echo "ACTION ${printer_name}_Print" echo "{" echo " ARG_COUNT 0" echo " TYPE COMMAND" echo " WINDOW_TYPE NO_STDIO" if (( destination_flag )) then echo " EXEC_STRING env LPDEST=$destination \\" else echo " EXEC_STRING env LPDEST=$printer_name \\" fi echo " /usr/dt/bin/dtaction Dtqueueinfo" echo "}" ) >> $databasefile_path } XCOMM ################################################################# XCOMM ## XCOMM ## TraversePath() XCOMM ## XCOMM ## Parse a given search path, using comma (,) and colon (:) as XCOMM ## delimiters. Pass each path element to another XCOMM ## function. XCOMM ## XCOMM ################################################################# TraversePath () { gotahost=0 typeset -i path=0 IFSsave=$IFS search_path=$1 dir_function=$2 if [[ -n "$search_path" && -n "$dir_function" ]]; then HASH HASH look for colon and comma delimiters HASH IFS=':,' set -A dir_array $search_path while ((path<=${#dir_array[*]}-1)) ;do $dir_function ${dir_array[$path]} path=path+1 done else return fi IFS=$IFSsave } XCOMM ################################################################# XCOMM ## XCOMM ## GetIconBaseName() XCOMM ## XCOMM ## Given a file name of the form "base.l.bm" where size XCOMM ## can be ".l", ".m", ".s.", or ".t" and visual type can be XCOMM ## ".bm" or ".pm", set $base_icon_name to just the base. XCOMM ## XCOMM ################################################################# GetIconBaseName() { base_icon_name=`basename $1 .bm` base_icon_name=`basename $base_icon_name .pm` base_icon_name=`basename $base_icon_name .l` base_icon_name=`basename $base_icon_name .m` base_icon_name=`basename $base_icon_name .s` base_icon_name=`basename $base_icon_name .t` } XCOMM ################################################################# XCOMM ## XCOMM ## DoTheActualIconCopy() XCOMM ## XCOMM ## Once we've determined the base name, and we've got the XCOMM ## source icon directory ($1), then copy all the icons XCOMM ## with the same base name into the destination $DTPRINTERICONFOLDER. XCOMM ## XCOMM ################################################################# DoTheActualIconCopy() { for i in $1/${base_icon_name}.* do if [ -f $i ] then simple_icon_name=${i##*/} if [ -f $DTPRINTERICONFOLDER/$simple_icon_name ] then mv -f $DTPRINTERICONFOLDER/$simple_icon_name $DTPRINTERICONFOLDER/#$simple_icon_name fi cp $i $DTPRINTERICONFOLDER if (( $verbose_flag )) then print " Copied icon file $i " print " to $DTPRINTERICONFOLDER." fi fi done } XCOMM ################################################################# XCOMM ## CopyIconFiles() XCOMM ## XCOMM ## Given $icon_name, get its base name, ensure that XCOMM ## the destination icon folder exists, and march down XCOMM ## the icon path, looking for matching icons, and copying XCOMM ## them to the destination folder. XCOMM ## XCOMM ################################################################# CopyIconFiles() { GetIconBaseName $icon_name touch $DTPRINTERICONFOLDER/$icon_name.install > /dev/null 2>/dev/null if [[ ! -f $DTPRINTERICONFOLDER/$icon_name.install ]] then failure_flag=1 PrintCreateError "$DTPRINTERICONFOLDER" "$DTPRINTERICONFOLDER/$icon_name.*" if (( $verbose_flag )) then PrintEndLog fi Exit $CREATE_ERR fi rm -f $DTPRINTERICONFOLDER/$icon_name.install TraversePath "$DTPRINTICONPATH" DoTheActualIconCopy XCOMM ## install default icon if none found above. ### } XCOMM ################################################################# XCOMM ## MakeActionFile() XCOMM ## XCOMM ## Make the Action file for the printer in the XCOMM ## $DTPRINTERFOLDER XCOMM ## XCOMM ################################################################# MakeActionFile() { touch $action_path > /dev/null 2>/dev/null chmod +x $action_path > /dev/null 2>/dev/null if [[ ! -f $action_path || ! -x $action_path ]] then failure_flag=1 PrintCreateError "$DTPRINTERFOLDER" "$action_file" if (( $verbose_flag )) then PrintEndLog fi Exit $CREATE_ERR fi if [ -x $ACTION_STUB_FILE ] then cp $ACTION_STUB_FILE "$action_path" else failure_flag=1 PrintCreateError "$DTPRINTERFOLDER" "$action_file" if (( $verbose_flag )) then PrintEndLog fi Exit $CREATE_ERR fi } XCOMM ################################################################# XCOMM ## PrintStartLog() XCOMM ## XCOMM ## Print the start of the log XCOMM ## XCOMM ################################################################# PrintStartLog() { print "$COMMAND_NAME..." print "" } XCOMM ################################################################# XCOMM ## PrintEndLog() XCOMM ## XCOMM ## Print the values of the variables. XCOMM ## XCOMM ################################################################# PrintEndLog() { print " DTPRINTACTIONFOLDER == $DTPRINTACTIONFOLDER" print "" print " DTPRINTERFOLDER == $DTPRINTERFOLDER" print "" if (( $failure_flag == 0 )) && (( $unintegrate_flag == 0)) then print " Created one database file," print " \"$databasefile_path\"," print " and one action file, " print " \"$action_path\"." print "" fi if (( $failure_flag ==0 )) then print "...successfully completed." else print "...completed UNsuccessfully." fi print "" } XCOMM ################################################################# XCOMM ## PrintCreateError() XCOMM ## XCOMM ## Print an error message XCOMM ## XCOMM ################################################################# PrintCreateError() { print "" print " Sorry--Unable to create the file \"$2\" under subdirectory" print " \"$1\"." print "" failure_flag=1 } XCOMM ################################################################# XCOMM ## PrintUsage() XCOMM ## XCOMM ## Print a usage message. XCOMM ## XCOMM ################################################################# PrintUsage() { print "" print "Usage: $COMMAND_NAME [-d ] [-i ]" print " [-h | -f ]" print " [-r] [-u] [-v] printer_name" print " where:" print " specifies print destination known to the print" print " specifies the icon to use to represent the printer" print " specifies the help text for the printer" print " specifies the help file for the printer" print " -r forces reloading of the action database" print " -u unintegrates the printer" print " -v directs verbose messages to standard out" print " printer_name specifies the printer name" print "" print " All parameters except \"\" are optional." print "" } XCOMM ################################################################# XCOMM ## ReloadActions() XCOMM ## XCOMM ## XCOMM ################################################################# ReloadActions() { HASH HASH Shorten forms like "host:0.0" to "host" HASH display_host=${DISPLAY%:*} display_host=${display_host%%.*} HASH HASH Shorten forms like "host.dom.com" to "host" HASH session_host=`uname -n` session_host=${session_host%%.*} if (( reloadactions_flag )) then HASH HASH User wants to force reloading actions HASH if [[ -x /usr/dt/bin/dtaction && -n "$DISPLAY" ]] then /usr/dt/bin/dtaction ReloadActions fi elif [[ "$display_host" = "$session_host" ]] HASH HASH Our session server is running on the desktop HASH then if [ -x /usr/dt/bin/dtaction ] then /usr/dt/bin/dtaction ReloadActions fi elif [[ -z "$display_host" && -n "$DISPLAY" ]] then HASH HASH Covers the case in which the simple value ":0.0" is our $DISPLAY HASH if [ -x /usr/dt/bin/dtaction ] then /usr/dt/bin/dtaction ReloadActions fi fi } XCOMM ################################################################# XCOMM ## UnintegratePrinter() XCOMM ## XCOMM ## XCOMM ################################################################# UnintegratePrinter() { if [[ -f $action_path ]] then rm -fr $action_path if (( verbose_flag )) then print " Removed one action file: " print " \"$action_path\"." fi fi if [[ -f $databasefile_path ]] then rm -fr $databasefile_path if (( verbose_flag )) then print " Removed one database file:" print " \"$databasefile_path\"." print "" fi fi } XCOMM ################################################################# XCOMM ## Exit() XCOMM ## XCOMM ## XCOMM ################################################################# Exit() { exit $1 } XCOMM ################################################################# XCOMM ## Main() XCOMM ## XCOMM ## Set up and call the routines XCOMM ## XCOMM ################################################################# printer_name="" printer_flag=0 help_flag=0 helpfile_flag=0 icon_flag=0 language_flag=0 verbose_flag=0 unintegrate_flag=0 failure_flag=0 destination_flag=0 destination="" reloadactions_flag=0 while getopts d:f:h:i:ruv argument do case $argument in d) destination=$OPTARG destination_flag=1 HASH print the destination name is $destination. ;; f) help_file=$OPTARG helpfile_flag=1 ;; h) help_text=$OPTARG help_flag=1 ;; i) icon_name=$OPTARG icon_flag=1 ;; r) reloadactions_flag=1 ;; u) unintegrate_flag=1 ;; v) verbose_flag=1 ;; \?) PrintUsage Exit 1 ;; esac done ((shift_positions = OPTIND - 1)) if (( $shift_positions < $# )) then XCOMM XCOMM We have at least one remaining non-switch command line argument XCOMM shift $shift_positions HASH HASH We assume that any remaining arguments constitute the HASH filename. HASH At some later point, may want to parse a list of filenames. HASH printer_name=$* printer_flag=1 fi XCOMM XCOMM Time to get to work. XCOMM Initialize if (( $verbose_flag )) then PrintStartLog fi CheckOptions if (( $unintegrate_flag )) then UnintegratePrinter else if (( $icon_flag )) then CopyIconFiles HASH Doing so will set the $base_icon_name for inclusion in the HASH filetypes action definition fi MakeDatabaseFile MakeActionFile ReloadActions fi if (( $verbose_flag )) then PrintEndLog fi Exit 0 XCOMM ######################### eof ##############################