cdesktopenv/cde/programs/dtprintegrate/dtprintegrate.src

698 lines
17 KiB
Plaintext
Executable File

XCOMM!/bin/ksh
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 UNsuccesfully."
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 <destination>] [-i <icon_name>]"
print " [-h <help_text> | -f <help_file>]"
print " [-r] [-u] [-v] printer_name"
print " where:"
print " <destination> specifies print destination known to the print"
print " <icon_name> specifies the icon to use to represent the printer"
print " <help_text> specifies the help text for the printer"
print " <help_file> 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 \"<printer_name>\" 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 ##############################