1712 lines
45 KiB
Plaintext
Executable File
1712 lines
45 KiB
Plaintext
Executable File
XCOMM! DTKORNSHELL
|
|
XCOMM $TOG: dtlp.src /main/17 1998/07/31 17:03:31 mgreess $
|
|
XCOMM
|
|
XCOMM (c) Copyright 1996 Digital Equipment Corporation.
|
|
XCOMM (c) Copyright 1993-1996 Hewlett-Packard Company.
|
|
XCOMM (c) Copyright 1993-1996 International Business Machines Corp.
|
|
XCOMM (c) Copyright 1993-1996 Sun Microsystems, Inc.
|
|
XCOMM (c) Copyright 1993-1996 Novell, Inc.
|
|
XCOMM (c) Copyright 1996 FUJITSU LIMITED.
|
|
XCOMM (c) Copyright 1996 Hitachi.
|
|
|
|
#define HASH #
|
|
|
|
XCOMM ###################################################################
|
|
XCOMM
|
|
XCOMM File: dtlp
|
|
XCOMM
|
|
XCOMM Default Location: /usr/dt/bin/dtlp
|
|
XCOMM
|
|
XCOMM Purpose: Set up print spooler options and print.
|
|
XCOMM
|
|
XCOMM Description: This shell script provides a graphical interface
|
|
XCOMM for a print spooler dialog by default. If
|
|
XCOMM DTPRINTSILENT is "true", however, then it processes
|
|
XCOMM the file and directly invokes "lp".
|
|
XCOMM
|
|
XCOMM Invoked by: The default Print action or custom print actions.
|
|
XCOMM
|
|
XCOMM Product: @(#)Common Desktop Environment 1.0
|
|
XCOMM
|
|
XCOMM Note: Please do not modify this file.
|
|
XCOMM Later product updates will overwrite this file.
|
|
XCOMM
|
|
XCOMM ###################################################################
|
|
set -u
|
|
|
|
XCOMM #################################################################
|
|
XCOMM
|
|
XCOMM Following are the environmental options we support
|
|
XCOMM
|
|
XCOMM #################################################################
|
|
|
|
XCOMM LPDEST
|
|
XCOMM DTPRINTCWD
|
|
XCOMM DTPRINTFILEREMOVE
|
|
XCOMM DTPRINTSILENT
|
|
XCOMM DTPRINTTESTOUTPUT
|
|
XCOMM DTPRINTUSERFILENAME
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## Internal Globals
|
|
XCOMM ##
|
|
XCOMM ## Actually, most variables in this script are global.
|
|
XCOMM ##
|
|
XCOMM ## Most are defined in the Initialize() routine.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
COMMAND_NAME=dtlp
|
|
|
|
PATH=/bin:/usr/bin:/usr/ucb
|
|
export PATH
|
|
|
|
XCOMM
|
|
XCOMM Exit/Return codes
|
|
XCOMM
|
|
CANCEL_EXIT=-1
|
|
SUCCESS=0
|
|
USAGE_EXIT=2
|
|
NO_FILE_ERR=3
|
|
NO_INIT_FILE_ERR=4
|
|
NO_REGULAR_FILE_ERR=5
|
|
NO_READABLE_FILE_ERR=6
|
|
NO_DEFAULT_PRINTER=7
|
|
PRINTER_DOES_NOT_EXIST=8
|
|
PRINTER_NOT_ENABLED=9
|
|
NO_PRINTER_AVAILABLE=10
|
|
PRINTER_NOT_ACCEPT_REQ=11
|
|
NOT_POS_INTEGER=12
|
|
|
|
XCOMM
|
|
XCOMM For string processing
|
|
XCOMM
|
|
MINUS_T="-t"
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## Initialize()
|
|
XCOMM ##
|
|
XCOMM ## Set a number of key variables to their defaults.
|
|
XCOMM ##
|
|
XCOMM ## Examples
|
|
XCOMM ## ----------------------
|
|
XCOMM ## File to print: Stdin
|
|
XCOMM ## Number of copies: 1
|
|
XCOMM ## Print Command: lp
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
Initialize()
|
|
{
|
|
typeset -u Uppercase_string
|
|
|
|
Uppercase_string=""
|
|
|
|
banner_title_flag=0
|
|
banner_title=""
|
|
|
|
copy_count_flag=0
|
|
copy_count=1
|
|
|
|
failure_flag=$SUCCESS
|
|
|
|
format_flag=0
|
|
|
|
other_options_flag=0
|
|
other_options=""
|
|
|
|
print_command=lp
|
|
|
|
print_cwd_flag=0
|
|
print_cwd=""
|
|
|
|
HASH
|
|
HASH Assume print file is stdin, unless told otherwise...
|
|
HASH
|
|
print_file="-"
|
|
|
|
print_page_allowed=1
|
|
|
|
print_man_flag=0
|
|
|
|
printer_name_flag=0
|
|
printer_name=""
|
|
|
|
print_raw_flag=0
|
|
|
|
remove_flag=0
|
|
|
|
send_mail_flag=false
|
|
|
|
silent_flag=0
|
|
|
|
test_flag=0
|
|
|
|
verbose_flag=0
|
|
|
|
user_filename_flag=0
|
|
user_filename=""
|
|
|
|
CAT_MESG_STRING=""
|
|
|
|
HASH
|
|
HASH directory for temporary files used by dtlp
|
|
HASH
|
|
DTLPDIR="$HOME/.dt/tmp"
|
|
|
|
if [ ! -d "$DTLPDIR" ]
|
|
then
|
|
mkdir -p "$DTLPDIR"
|
|
fi
|
|
|
|
LPOPTIONS=""
|
|
|
|
catopen CAT_ID $COMMAND_NAME
|
|
|
|
SetPreEnvironment
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## SetPreEnvironment()
|
|
XCOMM ##
|
|
XCOMM ## Check the ENVIRONMENT values we care about, and
|
|
XCOMM ## set the corresponding internal variable values.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
SetPreEnvironment()
|
|
{
|
|
if (( ${#LPDEST} ))
|
|
then
|
|
printer_name=$LPDEST
|
|
printer_name_flag=1
|
|
fi
|
|
|
|
if (( ${#DTPRINTCWD} ))
|
|
then
|
|
print_cwd=$DTPRINTCWD
|
|
print_cwd_flag=1
|
|
fi
|
|
|
|
if (( ${#DTPRINTFILEREMOVE} ))
|
|
then
|
|
HASH check for True
|
|
Uppercase_string=$DTPRINTFILEREMOVE
|
|
if [[ "$Uppercase_string" = "TRUE" ]]
|
|
then
|
|
remove_flag=1
|
|
fi
|
|
Uppercase_string=""
|
|
fi
|
|
|
|
if (( ${#DTPRINTSILENT} ))
|
|
then
|
|
HASH check for True
|
|
Uppercase_string=$DTPRINTSILENT
|
|
if [[ "$Uppercase_string" = "TRUE" ]]
|
|
then
|
|
silent_flag=1
|
|
fi
|
|
Uppercase_string=""
|
|
fi
|
|
|
|
if (( ${#DTPRINTUSERFILENAME} ))
|
|
then
|
|
user_filename=$DTPRINTUSERFILENAME
|
|
user_filename_flag=1
|
|
fi
|
|
|
|
if (( ${#DTPRINTTESTOUTPUT} ))
|
|
then
|
|
test_flag=1
|
|
fi
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## ReconcileOptions()
|
|
XCOMM ##
|
|
XCOMM ## Arbitrate when there are two or more conflicting
|
|
XCOMM ## print options.
|
|
XCOMM ##
|
|
XCOMM ## The order of precedence is: -w > -a > -r.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
ReconcileOptions()
|
|
{
|
|
HASH
|
|
HASH The RAW option takes precedence over all others.
|
|
HASH
|
|
if (( print_raw_flag ))
|
|
then
|
|
format_flag=0
|
|
print_man_flag=0
|
|
print_page_allowed=0
|
|
|
|
HASH
|
|
HASH Next, this MAN option comes into play
|
|
HASH
|
|
elif (( print_man_flag ))
|
|
then
|
|
format_flag=0
|
|
print_page_allowed=0
|
|
fi
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## DoParameterCollectionSilent()
|
|
XCOMM ##
|
|
XCOMM ## Collect the silent lp options, mimicking the GUI
|
|
XCOMM ## collection process.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
DoParameterCollectionSilent()
|
|
{
|
|
HASH printer_name has to be set at this point so no need to check
|
|
LPOPTIONS=-d${printer_name}
|
|
|
|
if (( banner_title_flag ))
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" "${MINUS_T}${SINGLE_QUOTE}${banner_title}${SINGLE_QUOTE}
|
|
fi
|
|
|
|
if (( copy_count_flag ))
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" -n${copy_count}"
|
|
fi
|
|
|
|
if (( other_options_flag ))
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" ${other_options}"
|
|
fi
|
|
|
|
if [[ "$send_mail_flag" == "true" ]]
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" -m"
|
|
fi
|
|
|
|
if (( verbose_flag ))
|
|
then
|
|
echo "Print Command is $print_command and Options are $LPOPTIONS"
|
|
fi
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## EchoDtlpSetupOptions()
|
|
XCOMM ##
|
|
XCOMM ## Echo all the command settings.
|
|
XCOMM ## If dtlp is run stand-alone, the invoker may redirect
|
|
XCOMM ## the test output to a log file. Under the test harness
|
|
XCOMM ## this is done automatically by the "record" function.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
EchoDtlpSetupOptions()
|
|
{
|
|
if (( remove_flag ))
|
|
then
|
|
echo Remove file flag is SET.
|
|
fi
|
|
if (( print_man_flag ))
|
|
then
|
|
echo Manpage flag is SET.
|
|
fi
|
|
if (( print_raw_flag ))
|
|
then
|
|
echo Raw print flag is SET.
|
|
fi
|
|
if (( print_cwd_flag ))
|
|
then
|
|
echo "Print working directory is $print_cwd."
|
|
fi
|
|
if (( print_page_allowed ))
|
|
then
|
|
echo Page printing is allowed.
|
|
else
|
|
echo Page printing is NOT allowed.
|
|
fi
|
|
if (( format_flag ))
|
|
then
|
|
echo Format flag is SET.
|
|
fi
|
|
if (( silent_flag ))
|
|
then
|
|
echo Silent flag is SET.
|
|
fi
|
|
if (( user_filename_flag ))
|
|
then
|
|
echo User-visible filename is \"$user_filename\".
|
|
fi
|
|
if (( verbose_flag ))
|
|
then
|
|
echo Verbose flag is SET.
|
|
fi
|
|
if (( other_options_flag ))
|
|
then
|
|
echo Other options include \"$other_options\".
|
|
fi
|
|
if [[ "$send_mail_flag" == "true" ]]
|
|
then
|
|
echo Send Mail flag is SET.
|
|
fi
|
|
echo Copies is set to $copy_count.
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintIt()
|
|
XCOMM ##
|
|
XCOMM ## Do the actual spooling, based on the value of LPOPTIONS.
|
|
XCOMM ##
|
|
XCOMM ## If possible, log the results.
|
|
XCOMM #################################################################
|
|
PrintIt()
|
|
{
|
|
if (( print_cwd_flag )) && [[ (-d "$print_cwd") && (-x "$print_cwd") ]]
|
|
then
|
|
cd "$print_cwd" || exit
|
|
fi
|
|
|
|
if (( test_flag ))
|
|
then
|
|
HASH then don't do any printing--instead log the results
|
|
EchoDtlpSetupOptions
|
|
echo ""
|
|
echo "Command that will be invoked is..."
|
|
INVOKER='echo'
|
|
else
|
|
INVOKER='eval'
|
|
fi
|
|
|
|
if (( print_raw_flag ))
|
|
then
|
|
HASH Nothing special is required for raw mode on this platform.
|
|
LPOPTIONS="${LPOPTIONS}"
|
|
fi
|
|
|
|
if (( format_flag ))
|
|
then
|
|
HASH set page header
|
|
if (( banner_title_flag ))
|
|
then
|
|
PAGEHEADER="$banner_title"
|
|
elif (( user_filename_flag ))
|
|
then
|
|
PAGEHEADER="$user_filename"
|
|
else
|
|
PAGEHEADER="$print_file"
|
|
fi
|
|
|
|
$INVOKER "cat $print_file | pr -f -h '${PAGEHEADER}' | ${print_command} ${LPOPTIONS}"
|
|
elif (( print_man_flag ))
|
|
then
|
|
$INVOKER "cat $print_file | tbl | nroff -man | col | ${print_command} ${LPOPTIONS}"
|
|
|
|
else
|
|
if [ "$print_file" = "-" ]
|
|
then
|
|
$INVOKER "cat $print_file | ${print_command} ${LPOPTIONS}"
|
|
else
|
|
$INVOKER "${print_command} -c ${LPOPTIONS} $print_file"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## CleanUp()
|
|
XCOMM ##
|
|
XCOMM ## End the show
|
|
XCOMM #################################################################
|
|
CleanUp()
|
|
{
|
|
if (( remove_flag )) && [[ "$print_file" != "-" ]]
|
|
then
|
|
rm -f $print_file >/dev/null 2>&1
|
|
fi
|
|
|
|
if (( verbose_flag ))
|
|
then
|
|
PrintEndLog
|
|
fi
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ##
|
|
XCOMM ## Ensure that the supplied file name references a
|
|
XCOMM ## valid file.
|
|
XCOMM ##
|
|
XCOMM ## Returns true or false.
|
|
XCOMM #################################################################
|
|
CheckValidFile()
|
|
{
|
|
if [[ "$1" == "-" ]]
|
|
then
|
|
return $SUCCESS
|
|
fi
|
|
|
|
HASH check whether file exists and is a regular file
|
|
if [[ ! -f "$1" ]]
|
|
then
|
|
return $NO_REGULAR_FILE_ERR
|
|
fi
|
|
|
|
HASH check whether file is readable by the user
|
|
if [[ ! -r "$1" ]]
|
|
then
|
|
return $NO_READABLE_FILE_ERR
|
|
fi
|
|
return $SUCCESS
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## CheckValidPrinter()
|
|
XCOMM ##
|
|
XCOMM ## Ensure that the supplied printer name references a printer
|
|
XCOMM ## that exists and is enabled or a default printer exists,
|
|
XCOMM ## if no printer is specified.
|
|
XCOMM ##
|
|
XCOMM ## Returns true or false.
|
|
XCOMM #################################################################
|
|
CheckValidPrinter()
|
|
{
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 10 "Default"
|
|
|
|
if [[ "$printer_name" = "" ]]
|
|
then
|
|
printer_name=$CAT_MESG_STRING
|
|
fi
|
|
|
|
if [[ "$printer_name" = "$CAT_MESG_STRING" ]]
|
|
then
|
|
GetDefaultPrinter
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
printer_name=$default_printer
|
|
else
|
|
return $failure_flag
|
|
fi
|
|
fi
|
|
|
|
tmpfile=$DTLPDIR/$printer_name$$
|
|
LANG=C lpstat -p"$printer_name" > "$tmpfile" 2>&1
|
|
if [[ $? != "$SUCCESS" ]]
|
|
then
|
|
HASH printer does not exist
|
|
failure_flag=$PRINTER_DOES_NOT_EXIST
|
|
rm -f "$tmpfile"
|
|
return $failure_flag
|
|
else
|
|
if grep disabled "$tmpfile" > /dev/null 2>&1
|
|
then
|
|
failure_flag=$PRINTER_NOT_ENABLED
|
|
rm -f "$tmpfile"
|
|
return $failure_flag
|
|
else
|
|
status=$DTLPDIR/status$$
|
|
LANG=C lpstat -a > "$tmpfile" 2>&1
|
|
grep "$printer_name" "$tmpfile" > "$status" 2>&1
|
|
if grep "not accepting" "$status" > /dev/null 2>&1
|
|
then
|
|
failure_flag=$PRINTER_NOT_ACCEPT_REQ
|
|
rm -f "$status"
|
|
return $failure_flag
|
|
fi
|
|
rm -f "$status"
|
|
fi
|
|
fi
|
|
rm -f "$tmpfile"
|
|
|
|
failure_flag=$SUCCESS
|
|
return $failure_flag
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## GetDefaultPrinter()
|
|
XCOMM ##
|
|
XCOMM ## Looks up the default printer destination. Returns value of
|
|
XCOMM ## LPDEST if set; otherwise, checks if there is a system default
|
|
XCOMM ## printer destination.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
GetDefaultPrinter()
|
|
{
|
|
#if defined(_AIX)
|
|
prfld=1
|
|
flddelim=' '
|
|
#else
|
|
prfld=2
|
|
flddelim=':'
|
|
#endif
|
|
|
|
default_printer=""
|
|
if (( ${#LPDEST} ))
|
|
then
|
|
default_printer=$LPDEST
|
|
else
|
|
#if defined(_AIX)
|
|
t1="`LANG=C lpstat -d | head -3 | tail -1`"
|
|
#else
|
|
t1="$(LANG=C lpstat -d)"
|
|
#endif
|
|
t2="$(echo "$t1" | cut -d' ' -f1)"
|
|
HASH
|
|
HASH "no system default destination" is expected if no default is defined;
|
|
HASH otherwise, "system default destination: <printer_name>" is expected.
|
|
HASH
|
|
if [[ "$t2" != "no" ]]
|
|
then
|
|
default_printer="$(echo "$t1" | cut -f"$prfld" -d"$flddelim")"
|
|
HASH remove leading space
|
|
default_printer=${default_printer##+( )}
|
|
fi
|
|
|
|
if [[ "$default_printer" = "" ]]
|
|
then
|
|
failure_flag=$NO_DEFAULT_PRINTER
|
|
return $failure_flag
|
|
fi
|
|
fi
|
|
failure_flag=$SUCCESS
|
|
return $failure_flag
|
|
}
|
|
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintStartLog()
|
|
XCOMM ##
|
|
XCOMM ## Print the start of the log
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintStartLog() {
|
|
print "$COMMAND_NAME..."
|
|
print ""
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## CheckIsPosInteger()
|
|
XCOMM ##
|
|
XCOMM ## Checks whether a given value is a positive integer.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
CheckIsPosInteger()
|
|
{
|
|
val=$1
|
|
HASH Strip any leading or trailing spaces
|
|
val=${val##+( )}
|
|
val=${val%%+( )}
|
|
|
|
if [[ ${#val} && "$val" = +([0-9]) ]]
|
|
then
|
|
failure_flag=$SUCCESS
|
|
else
|
|
failure_flag=$NOT_POS_INTEGER
|
|
fi
|
|
return $failure_flag
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## GetErrorMessageString()
|
|
XCOMM ##
|
|
XCOMM ## Looks up the appropriate error message based on the value of
|
|
XCOMM ## failure_flag.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
GetErrorMessageString()
|
|
{
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 130 "Sorry--Unable to print:"
|
|
|
|
if (( user_filename_flag ))
|
|
then
|
|
CAT_MESG_STRING=${CAT_MESG_STRING}" \"$user_filename\"."
|
|
else
|
|
CAT_MESG_STRING=${CAT_MESG_STRING}" \"$print_file\"."
|
|
fi
|
|
|
|
case $failure_flag in
|
|
$NO_REGULAR_FILE_ERR)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 210 "That file is either not printable or it does not exist."
|
|
;;
|
|
$NO_READABLE_FILE_ERR)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 134 "You don't have permission to read that file."
|
|
;;
|
|
$NO_PRINTER_AVAILABLE)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 220 "There is either no printer defined for this system or no printer is enabled."
|
|
;;
|
|
$PRINTER_DOES_NOT_EXIST)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 230 "The printer does not exist."
|
|
;;
|
|
$PRINTER_NOT_ENABLED)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 240 "The printer is not enabled."
|
|
;;
|
|
$NO_DEFAULT_PRINTER)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 250 "There is no default printer destination."
|
|
;;
|
|
$PRINTER_NOT_ACCEPT_REQ)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 260 "The printer is currently not accepting requests."
|
|
;;
|
|
$NOT_POS_INTEGER)
|
|
catgets TEMP_MESG_STRING "$CAT_ID" 1 270 "Number of copies must be a positive number."
|
|
;;
|
|
*)
|
|
echo ""
|
|
;;
|
|
esac
|
|
|
|
if (( failure_flag == NO_PRINTER_AVAILABLE ))
|
|
then
|
|
CAT_MESG_STRING="${TEMP_MESG_STRING}"
|
|
else
|
|
CAT_MESG_STRING="${CAT_MESG_STRING}""
|
|
${TEMP_MESG_STRING}"
|
|
fi
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## DisplayErrorMessage()
|
|
XCOMM ##
|
|
XCOMM ## We have detected an error. Write out a message to
|
|
XCOMM ## that effect.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
DisplayErrorMessage()
|
|
{
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 130 "Sorry--Unable to print:"
|
|
|
|
GetErrorMessageString
|
|
|
|
print ""
|
|
print "$(date)"
|
|
print "${CAT_MESG_STRING}"
|
|
print ""
|
|
}
|
|
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintEndLog()
|
|
XCOMM ##
|
|
XCOMM ## Print the end of the log.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintEndLog() {
|
|
print ""
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
print "...successfully completed."
|
|
else
|
|
print "...completed unsuccessfully."
|
|
fi
|
|
print ""
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintUsage()
|
|
XCOMM ##
|
|
XCOMM ## Print a usage message.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintUsage() {
|
|
print ""
|
|
print "Usage: $COMMAND_NAME [-b <banner_title>] [-d <printer_name>]"
|
|
print " [-m <print_command>] [-n <copy_count>]"
|
|
print " [-o <other_options>] [-u <user_filename>]"
|
|
print " [-a] [-e] [-h] [-i] [-r] [-s] [-v] [-w]"
|
|
print " <print_file>"
|
|
print " where:"
|
|
print ""
|
|
print " <banner_title>"
|
|
print " Specifies the title to put on the banner page."
|
|
print ""
|
|
print " <printer_name>"
|
|
print " Specifies the printer name as known to the lp spooler."
|
|
print ""
|
|
print " <print_command>"
|
|
print " Specifies the command with which to invoke the printer."
|
|
print ""
|
|
print " <copy_count>"
|
|
print " Specifies the number of copies to print."
|
|
print ""
|
|
print " <other_options>"
|
|
print " Specifies the other print options."
|
|
print ""
|
|
print " <user_filename>"
|
|
print " Specifies the title of the file to display to the user."
|
|
print ""
|
|
print " -a"
|
|
print " Formats the file with \"man\" before printing."
|
|
print ""
|
|
print " -e"
|
|
print " Removes the file after printing."
|
|
print ""
|
|
print " -h"
|
|
print " Displays this help message."
|
|
print ""
|
|
print " -i"
|
|
print " Requests the spooler to sent mail to the user when the print job is completed."
|
|
print ""
|
|
print " -r"
|
|
print " Formats the file with "pr -f" before printing."
|
|
print ""
|
|
print " -s"
|
|
print " Prints silently (no dialog box)."
|
|
print ""
|
|
print " -v"
|
|
print " Directs verbose messages to standard output."
|
|
print ""
|
|
print " -w"
|
|
print " Prints the data raw (uninterpreted)."
|
|
print ""
|
|
print " <print_file>"
|
|
print " Specifies the name of file(s) to print."
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## Exit()
|
|
XCOMM ##
|
|
XCOMM ## All exits should go through this routine.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
Exit()
|
|
{
|
|
exit "$1"
|
|
}
|
|
|
|
XCOMM ################# GUI Callbacks ####################
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintHelpCB()
|
|
XCOMM ##
|
|
XCOMM ## This is the callback for the Help button in the Print dialog;
|
|
XCOMM ## it will post a help dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintHelpCB()
|
|
{
|
|
DtkshDisplayQuickHelpDialog "dtlp_help" HELP_TYPE_TOPIC \
|
|
"Printmgr" "dtlpPrintDialog"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## DoParameterCollection()
|
|
XCOMM ##
|
|
XCOMM ## Gathers and validates print options set using the command line
|
|
XCOMM ## and the Print dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
DoParameterCollection()
|
|
{
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 10 "Default"
|
|
|
|
GetCurrentPrinterName
|
|
CheckValidPrinter
|
|
if (( failure_flag != SUCCESS ))
|
|
then
|
|
DisplayErrorMessageDialog
|
|
return $failure_flag
|
|
fi
|
|
|
|
if [[ ("$printer_name" != "") && "$printer_name" != "$CAT_MESG_STRING" ]]
|
|
then
|
|
LPOPTIONS="-d"$printer_name
|
|
fi
|
|
|
|
HASH
|
|
HASH Get current value from textfield resource rather than from position
|
|
HASH resource because the user may have changed the value using the former
|
|
HASH instead of the up/down arrow.
|
|
HASH
|
|
HASH We must make sure the value is a positive integer in this case.
|
|
HASH
|
|
XtGetValues "$COPIES_SB" textField:COPIES_TF
|
|
XmTextFieldGetString copy_val "$COPIES_TF"
|
|
|
|
CheckIsPosInteger "$copy_val"
|
|
if (( failure_flag == NOT_POS_INTEGER ))
|
|
then
|
|
DisplayErrorMessageDialog
|
|
return $failure_flag
|
|
else
|
|
copy_count=$copy_val
|
|
fi
|
|
|
|
HASH Strip any leading or trailing spaces
|
|
HASH This should be validated, to make sure it is a valid integer.
|
|
copy_count=${copy_count##+( )}
|
|
copy_count=${copy_count%%+( )}
|
|
if [ "$copy_count" != "" ] ; then
|
|
copy_count_flag=1
|
|
LPOPTIONS=${LPOPTIONS}" -n$copy_count"
|
|
fi
|
|
|
|
XmTextGetString banner_title "$BANNER_TF"
|
|
|
|
HASH Strip any leading or trailing spaces
|
|
banner_title=${banner_title##+( )}
|
|
banner_title=${banner_title%%+( )}
|
|
if [ "$banner_title" != "" ] ; then
|
|
banner_title_flag=1
|
|
LPOPTIONS=${LPOPTIONS}" "${MINUS_T}${SINGLE_QUOTE}${banner_title}${SINGLE_QUOTE}
|
|
fi
|
|
|
|
XmTextGetString other_options "$OPTIONS_TF"
|
|
|
|
HASH Strip any leading or trailing spaces
|
|
other_options=${other_options##+( )}
|
|
other_options=${other_options%%+( )}
|
|
if [ "$other_options" != "" ]
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" $other_options"
|
|
fi
|
|
|
|
XtGetValues "$SEND_MAIL_BTN" set:send_mail_flag
|
|
|
|
if [[ "$send_mail_flag" == "true" ]]
|
|
then
|
|
LPOPTIONS=${LPOPTIONS}" -m"
|
|
fi
|
|
|
|
if (( verbose_flag ))
|
|
then
|
|
echo The LP options are \"${LPOPTIONS}\".
|
|
fi
|
|
|
|
return $SUCCESS
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## DestroyDialogs()
|
|
XCOMM ##
|
|
XCOMM ## Destroys the Select Printer dialog, if it exists, and the
|
|
XCOMM ## Print dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
DestroyDialogs()
|
|
{
|
|
if [[ "$SELECT_PRINTER_FORM" != "" ]]
|
|
then
|
|
XtDestroyWidget "$(XtParent "-" "$SELECT_PRINTER_FORM")"
|
|
fi
|
|
XtDestroyWidget "$(XtParent "-" "$PDIALOG")"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintCB()
|
|
XCOMM ##
|
|
XCOMM ## Callback for the Print button in the Print dialog. Submits
|
|
XCOMM ## print request to lp if all is well; otherwise, simply returns.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintCB()
|
|
{
|
|
XSync "$DISPLAY" True
|
|
|
|
DoParameterCollection
|
|
if [ $? != $SUCCESS ]
|
|
then
|
|
return
|
|
fi
|
|
PrintIt
|
|
CleanUp
|
|
DestroyDialogs
|
|
Exit $failure_flag
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrintCancelCB()
|
|
XCOMM ##
|
|
XCOMM ## This is the callback for the Cancel button in the Print dialog.
|
|
XCOMM ## It will send an empty string to stdout, and will then exit with
|
|
XCOMM ## a value of -1.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrintCancelCB()
|
|
{
|
|
echo ""
|
|
DestroyDialogs
|
|
Exit $CANCEL_EXIT
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## UpdatePrinterDescription()
|
|
XCOMM ##
|
|
XCOMM ## Updates Printer Description in the Print dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
UpdatePrinterDescription()
|
|
{
|
|
CheckValidPrinter
|
|
if (( failure_flag != SUCCESS ))
|
|
then
|
|
XtSetValues "$PRINTER_DESC_LABEL" labelString:""
|
|
return
|
|
fi
|
|
|
|
GetPrinterInfo "$printer_name"
|
|
XtSetValues "$PRINTER_DESC_LABEL" labelString:"$printer_info"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## SelectPrinterCB()
|
|
XCOMM ##
|
|
XCOMM ## Callback for the Select Printer button in the Select Printer
|
|
XCOMM ## dialog. Updates Printer Name and Description in the Print
|
|
XCOMM ## dialog and unmanages the Select Printer dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
SelectPrinterCB()
|
|
{
|
|
XtSetValues "$PRINTER_TF" value:"$selected_printer"
|
|
printer_name=$selected_printer
|
|
UpdatePrinterDescription
|
|
XtUnmanageChild "$SELECT_PRINTER_FORM"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## SelectPrinterHelpCB()
|
|
XCOMM ##
|
|
XCOMM ## This is the callback for the Help button in the Select Printer
|
|
XCOMM ## dialog; it will post a help dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
SelectPrinterHelpCB()
|
|
{
|
|
DtkshDisplayQuickHelpDialog "dtlp_help" HELP_TYPE_TOPIC \
|
|
"Printmgr" "dtlpSelectPrinterDialog"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## ListSelectCB()
|
|
XCOMM ##
|
|
XCOMM ## Callback for the items in the printer list in the Select Printer
|
|
XCOMM ## dialog. Updates Printer Information when a printer is selected.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
ListSelectCB()
|
|
{
|
|
GetPrinterInfo "${CB_CALL_DATA.ITEM}"
|
|
XtSetValues "$INFO_TEXT" value:"$printer_info"
|
|
selected_printer=${CB_CALL_DATA.ITEM}
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## ListDblSelectCB()
|
|
XCOMM ##
|
|
XCOMM ## Callback for the double-clicks on the printer list items in the
|
|
XCOMM ## Select Printer dialog. Simulates selection of the Select Printer
|
|
XCOMM ## button when a printer item is double-clicked on.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
ListDblSelectCB()
|
|
{
|
|
if [ "${CB_CALL_DATA.EVENT.TYPE}" != KeyPress ]
|
|
then
|
|
XtCallCallbacks "$SELECT_PRINTER_BTN" activateCallback
|
|
fi
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## GetCurrentPrinterName()
|
|
XCOMM ##
|
|
XCOMM ## Reads value of Printer Name textfield and strips off any
|
|
XCOMM ## leading and trailing spaces.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
GetCurrentPrinterName()
|
|
{
|
|
XmTextFieldGetString printer_name "$PRINTER_TF"
|
|
|
|
HASH Strip any leading or trailing spaces
|
|
printer_name=${printer_name##+( )}
|
|
printer_name=${printer_name%%+( )}
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## GetAvailPrinters()
|
|
XCOMM ##
|
|
XCOMM ## Gets the list of enabled printers.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
GetAvailPrinters()
|
|
{
|
|
typeset -i num_printers=0
|
|
printer_items=''
|
|
comma=''
|
|
HASH
|
|
HASH get a sorted list of all enabled printers
|
|
HASH
|
|
tmpfile=$DTLPDIR/printers$$
|
|
|
|
#if defined(_AIX)
|
|
LANG=C lpstat -p | \
|
|
grep READY | cut -f1 -d" " | \
|
|
sort | uniq > $tmpfile 2>&1
|
|
#else
|
|
LANG=C lpstat -p | \
|
|
grep enabled | cut -f2 -d" " | \
|
|
sort | uniq > "$tmpfile" 2>&1
|
|
#endif
|
|
|
|
if [ -s "$tmpfile" ]
|
|
then
|
|
while read -r "$tmpfile"
|
|
do
|
|
printer_items=$printer_items$comma$i
|
|
comma=','
|
|
((num_printers=num_printers+1))
|
|
done
|
|
fi
|
|
rm -f "$tmpfile"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## GetPrinterInfo()
|
|
XCOMM ##
|
|
XCOMM ## Gets the printer description.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
GetPrinterInfo()
|
|
{
|
|
#if defined(sun)
|
|
t1="$DTLPDIR/d1$$"
|
|
t2="$DTLPDIR/d2$$"
|
|
|
|
lpstat -p$1 > $t1 2>/dev/null
|
|
lpstat -p$1 -D > $t2 2>/dev/null
|
|
printer_info="`diff $t1 $t2 | sed -e '1d' -e 's/\(.*\)://'`"
|
|
rm -f $t1 $t2
|
|
#else
|
|
printer_info=$1
|
|
#endif
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## SelectPrinterProc()
|
|
XCOMM ##
|
|
XCOMM ## This is called when the Select Printer... button in the Print
|
|
XCOMM ## dialog is selected. It posts the Select Printer dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
SelectPrinterProc()
|
|
{
|
|
if [[ "$SELECT_PRINTER_FORM" != "" ]]
|
|
then
|
|
HASH
|
|
HASH dialog already exists, update printer info. if necessary
|
|
HASH
|
|
GetCurrentPrinterName
|
|
|
|
HASH get index of printer in the list
|
|
XmListItemPos index "$PRINTER_LIST" "$printer_name"
|
|
|
|
HASH
|
|
HASH If printer is in the list, select it and display info. on it;
|
|
HASH otherwise, just re-manage the dialog.
|
|
HASH
|
|
if [[ $index -gt 0 ]]
|
|
then
|
|
GetPrinterInfo "$printer_name"
|
|
HASH
|
|
HASH display printer information and select the printer specified in
|
|
HASH the Printer Name textfield
|
|
HASH
|
|
XmTextSetString "$INFO_TEXT" "$printer_info"
|
|
XmListSelectItem "$PRINTER_LIST" "$printer_name" true
|
|
XmListSetPos "$PRINTER_LIST" "$index"
|
|
fi
|
|
|
|
XtManageChild "$SELECT_PRINTER_FORM"
|
|
return
|
|
fi
|
|
|
|
GetAvailPrinters
|
|
|
|
XmCreateFormDialog SELECT_PRINTER_FORM "$TOPLEVEL" form
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 180 "Select Printer"
|
|
|
|
XmInternAtom DEL_ATOM "$DISPLAY" WM_DELETE_WINDOW false
|
|
XmAddWMProtocolCallback "$(XtParent "-" "$SELECT_PRINTER_FORM")" \
|
|
"$DEL_ATOM" SelectPrinterCancelCB
|
|
|
|
XtSetValues "$(XtParent "-" "$SELECT_PRINTER_FORM")" \
|
|
title:"$CAT_MESG_STRING" \
|
|
allowShellResize:False \
|
|
deleteResponse:DO_NOTHING
|
|
|
|
XtSetValues "$SELECT_PRINTER_FORM" \
|
|
noResize:True \
|
|
autoUnmanage:False \
|
|
helpCallback:SelectPrinterHelpCB
|
|
|
|
XmCreateWorkArea WORK_AREA "$SELECT_PRINTER_FORM" work_area \
|
|
orientation:XmVERTICAL
|
|
|
|
XmCreateWorkArea LIST_RC "$WORK_AREA" list_rc orientation:XmHORIZONTAL
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 190 "Available Printers:"
|
|
|
|
XmCreateLabelGadget LIST_LABEL "$LIST_RC" list_label \
|
|
labelString:"$CAT_MESG_STRING"
|
|
XtManageChild "$LIST_LABEL"
|
|
|
|
XmCreateScrolledList PRINTER_LIST "$LIST_RC" printer_list \
|
|
selectionPolicy:XmSINGLE_SELECT \
|
|
singleSelectionCallback:ListSelectCB \
|
|
defaultActionCallback:ListDblSelectCB \
|
|
itemCount:$num_printers \
|
|
items:"$printer_items" \
|
|
visibleItemCount:5
|
|
XtManageChild "$PRINTER_LIST"
|
|
|
|
XmCreateWorkArea INFO_RC "$WORK_AREA" info_rc orientation:XmVERTICAL
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 200 "Printer Information:"
|
|
|
|
XmCreateLabelGadget INFO_LABEL "$INFO_RC" info_label \
|
|
labelString:"$CAT_MESG_STRING"
|
|
XtManageChild "$INFO_LABEL"
|
|
|
|
printer_info=""
|
|
XmCreateScrolledText INFO_TEXT "$INFO_RC" info_text \
|
|
editMode:XmMULTI_LINE_EDIT \
|
|
value:"$printer_info" \
|
|
rows:5 \
|
|
columns:80 \
|
|
wordWrap:True \
|
|
editable:False
|
|
|
|
XmCreateSeparator BTN_SEP "$SELECT_PRINTER_FORM" sep \
|
|
separatorType:XmSHADOW_ETCHED_IN \
|
|
"$(DtkshUnder "$WORK_AREA" 4)" \
|
|
"$(DtkshSpanWidth)"
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 180 "Select Printer"
|
|
|
|
XmCreatePushButtonGadget SELECT_PRINTER_BTN "$SELECT_PRINTER_FORM" \
|
|
ok_button \
|
|
labelString:"$CAT_MESG_STRING" \
|
|
"$(DtkshUnder "$BTN_SEP" 5)" \
|
|
"$(DtkshFloatLeft 10)" \
|
|
"$(DtkshFloatRight 30)" \
|
|
"$(DtkshAnchorBottom 5)"
|
|
|
|
XtAddCallback "$SELECT_PRINTER_BTN" activateCallback "SelectPrinterCB"
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 110 "Cancel"
|
|
|
|
XmCreatePushButtonGadget CANCEL_BTN "$SELECT_PRINTER_FORM" cancel_button \
|
|
labelString:"$CAT_MESG_STRING" \
|
|
"$(DtkshUnder "$BTN_SEP" 5)" \
|
|
"$(DtkshFloatLeft 40)" \
|
|
"$(DtkshFloatRight 60)" \
|
|
"$(DtkshAnchorBottom 5)"
|
|
|
|
XtAddCallback "$CANCEL_BTN" activateCallback "SelectPrinterCancelCB"
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 120 "Help"
|
|
|
|
XmCreatePushButtonGadget HELP_BTN "$SELECT_PRINTER_FORM" help_button \
|
|
labelString:"$CAT_MESG_STRING" \
|
|
"$(DtkshUnder "$BTN_SEP" 5)" \
|
|
"$(DtkshFloatLeft 70)" \
|
|
"$(DtkshFloatRight 90)" \
|
|
"$(DtkshAnchorBottom 5)"
|
|
|
|
XtAddCallback "$HELP_BTN" activateCallback "SelectPrinterHelpCB"
|
|
|
|
XtSetValues "$SELECT_PRINTER_FORM" \
|
|
initialFocus:"$SELECT_PRINTER_BTN" \
|
|
defaultButton:"$SELECT_PRINTER_BTN" \
|
|
cancelButton:"$CANCEL_BTN" \
|
|
navigationType:EXCLUSIVE_TAB_GROUP
|
|
|
|
XtManageChild "$BTN_SEP"
|
|
XtManageChild "$SELECT_PRINTER_BTN"
|
|
XtManageChild "$CANCEL_BTN"
|
|
XtManageChild "$HELP_BTN"
|
|
XtManageChild "$INFO_TEXT"
|
|
XtManageChild "$LIST_RC"
|
|
XtManageChild "$INFO_RC"
|
|
XtManageChild "$WORK_AREA"
|
|
XtManageChild "$SELECT_PRINTER_FORM"
|
|
|
|
if (( num_printers ))
|
|
then
|
|
GetCurrentPrinterName
|
|
CheckValidPrinter
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
GetPrinterInfo "$printer_name"
|
|
HASH
|
|
HASH display printer information and select the printer specified in
|
|
HASH the Printer Name textfield
|
|
HASH
|
|
XmTextSetString "$INFO_TEXT" "$printer_info"
|
|
XmListSelectItem "$PRINTER_LIST" "$printer_name" true
|
|
XmListSetItem "$PRINTER_LIST" "$printer_name"
|
|
fi
|
|
else
|
|
HASH
|
|
HASH no available printer, desensitize Select Printer button in
|
|
HASH the Select Printer dialog
|
|
HASH
|
|
XtSetSensitive "$SELECT_PRINTER_BTN" false
|
|
failure_flag=$NO_PRINTER_AVAILABLE
|
|
DisplayErrorMessageDialog
|
|
fi
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## SelectPrinterCancelCB()
|
|
XCOMM ##
|
|
XCOMM ## Callback for the Cancel button in Select Printer dialog.
|
|
XCOMM ## It simply unmanages the dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
SelectPrinterCancelCB()
|
|
{
|
|
XtUnmanageChild "$SELECT_PRINTER_FORM"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## PrinterNameFocusCB()
|
|
XCOMM ##
|
|
XCOMM ## Focus callback for the Printer Name textfield to determine when
|
|
XCOMM ## a printer name is changed so that printer description is updated
|
|
XCOMM ## when the user changes the printer name in the Print dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
PrinterNameFocusCB()
|
|
{
|
|
HASH If Printer Name textfield gained focus, save the current printer name.
|
|
HASH When it loses focus, compare the saved printer name with the new one
|
|
HASH to determine if the user has changed it. If so, update the printer
|
|
HASH description.
|
|
if [ "${CB_CALL_DATA.REASON}" = CR_FOCUS ]
|
|
then
|
|
GetCurrentPrinterName
|
|
old_printer=$printer_name
|
|
else
|
|
if [ "${CB_CALL_DATA.REASON}" = CR_LOSING_FOCUS ]
|
|
then
|
|
GetCurrentPrinterName
|
|
if [ "$old_printer" != "$printer_name" ]
|
|
then
|
|
UpdatePrinterDescription
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## UseGui()
|
|
XCOMM ##
|
|
XCOMM ## Creates the Print dialog and sets up the callbacks.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
UseGui()
|
|
{
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 10 "Default"
|
|
|
|
if (( printer_name_flag ))
|
|
then
|
|
printer=$printer_name
|
|
else
|
|
GetDefaultPrinter
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
printer=$default_printer
|
|
printer_name=$default_printer
|
|
else
|
|
printer=$CAT_MESG_STRING
|
|
fi
|
|
fi
|
|
|
|
if [[ "$printer_name" != "" ]]
|
|
then
|
|
GetPrinterInfo "$printer_name"
|
|
else
|
|
printer_info=""
|
|
fi
|
|
|
|
DtCreatePrintSetupDialog PDIALOG "$TOPLEVEL" pdialog \
|
|
printCallback:PrintCB \
|
|
cancelCallback:PrintCancelCB \
|
|
helpCallback:PrintHelpCB \
|
|
selectPrinterProc:SelectPrinterProc \
|
|
workAreaLocation:DtWORK_AREA_TOP_AND_BOTTOM \
|
|
printSetupMode:DtPRINT_SETUP_PLAIN \
|
|
printDestination:DtPRINT_TO_PRINTER \
|
|
printerName:"$printer" \
|
|
description:"$printer_info"
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 20 "Print"
|
|
|
|
XmInternAtom DEL_ATOM "$DISPLAY" WM_DELETE_WINDOW false
|
|
XmAddWMProtocolCallback "$(XtParent "-" "$PDIALOG")" "$DEL_ATOM" PrintCancelCB
|
|
|
|
XtSetValues "$(XtParent "-" "$PDIALOG")" \
|
|
title:"$CAT_MESG_STRING" \
|
|
allowShellResize:False \
|
|
deleteResponse:DO_NOTHING
|
|
|
|
XtSetValues "$PDIALOG" autoUnmanage:False
|
|
|
|
XmCreateWorkArea FILE_NAME_RC "$PDIALOG" file_name_rc \
|
|
marginWidth:0 \
|
|
marginHeight:0 \
|
|
orientation:XmHORIZONTAL
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 170 "File Name(s): "
|
|
|
|
XmCreateLabel FILE_NAME_LABEL "$FILE_NAME_RC" file_name_label \
|
|
labelString:"$CAT_MESG_STRING"
|
|
|
|
if (( user_filename_flag ))
|
|
then
|
|
LABEL_STRING="${user_filename}"
|
|
else
|
|
LABEL_STRING="${print_file}"
|
|
fi
|
|
XmCreateLabel FILE_NAME "$FILE_NAME_RC" file_name \
|
|
labelString:"$LABEL_STRING"
|
|
|
|
XtManageChild "$FILE_NAME_RC"
|
|
XtManageChild "$FILE_NAME_LABEL"
|
|
XtManageChild "$FILE_NAME"
|
|
|
|
|
|
HASH
|
|
HASH Unmanage unneeded widgets
|
|
HASH
|
|
XtNameToWidget TOP_SEP "$PDIALOG" "TopWorkAreaSeparator"
|
|
XtUnmanageChild "$TOP_SEP"
|
|
|
|
XtNameToWidget INFO_BTN "$PDIALOG" "Info"
|
|
XtUnmanageChild "$INFO_BTN"
|
|
|
|
XtNameToWidget SELECT_FILE_BTN "$PDIALOG" "SelectFile"
|
|
XtUnmanageChild "$SELECT_FILE_BTN"
|
|
|
|
XtNameToWidget SETUP_BTN "$PDIALOG" "Setup"
|
|
XtUnmanageChild "$SETUP_BTN"
|
|
|
|
DtCreatePDMJobSetup JOB "$PDIALOG"
|
|
|
|
HASH
|
|
HASH Get widget handles
|
|
HASH
|
|
XtNameToWidget PRINTER_COMBO "$PDIALOG" "Name"
|
|
XtNameToWidget PRINTER_TF "$PRINTER_COMBO" "Text"
|
|
XtNameToWidget PRINTER_DESC_LABEL "$PDIALOG" "Description"
|
|
XtNameToWidget COPIES_SB "$PDIALOG" "*Copies"
|
|
XtNameToWidget SEND_MAIL_CB "$JOB" "*SendMail"
|
|
XtNameToWidget BANNER_TF "$JOB" "*Banner"
|
|
XtNameToWidget OPTIONS_TF "$JOB" "*Options"
|
|
XtNameToWidget SEND_MAIL_BTN "$SEND_MAIL_CB" "button_0"
|
|
XtNameToWidget PRINT_BTN "$PDIALOG" "Print"
|
|
XtNameToWidget PRINT_CANCEL_BTN "$PDIALOG" "Cancel"
|
|
|
|
HASH
|
|
HASH move cursor to end of printer name
|
|
HASH
|
|
XtSetValues "$PRINTER_TF" cursorPosition:${#PRINTER}
|
|
|
|
HASH
|
|
HASH set focus callbacks to track printer name changes
|
|
HASH
|
|
XtAddCallback "$PRINTER_TF" focusCallback "PrinterNameFocusCB"
|
|
XtAddCallback "$PRINTER_TF" losingFocusCallback "PrinterNameFocusCB"
|
|
|
|
HASH
|
|
HASH initialize SELECT_PRINTER_FORM to be used in SelectPrinterProc
|
|
HASH to determine if the Select Printer dialog already exists.
|
|
HASH
|
|
SELECT_PRINTER_FORM=""
|
|
|
|
if (( banner_title_flag ))
|
|
then
|
|
XtSetValues "$BANNER_TF" value:"$banner_title"
|
|
fi
|
|
if (( other_options_flag ))
|
|
then
|
|
XtSetValues "$OPTIONS_TF" value:"$other_options"
|
|
fi
|
|
|
|
XtManageChild "$PDIALOG"
|
|
|
|
if (( copy_count_flag ))
|
|
then
|
|
XtSetValues "$COPIES_SB" position:"$copy_count"
|
|
fi
|
|
|
|
if [[ "$send_mail_flag" == "true" ]]
|
|
then
|
|
XtSetValues "$SEND_MAIL_BTN" set:true
|
|
fi
|
|
|
|
XtGetValues "$COPIES_SB" textField:COPIES_TF
|
|
|
|
DtkshSetReturnKeyControls "$PRINTER_TF" "$COPIES_TF" "$PDIALOG" "$PRINT_BTN"
|
|
DtkshSetReturnKeyControls "$COPIES_TF" "$BANNER_TF" "$PDIALOG" "$PRINT_BTN"
|
|
DtkshSetReturnKeyControls "$BANNER_TF" "$OPTIONS_TF" "$PDIALOG" "$PRINT_BTN"
|
|
|
|
XtMainLoop
|
|
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## BadFileCB()
|
|
XCOMM ##
|
|
XCOMM ## This is the callback for the OK button in the error message
|
|
XCOMM ## dialog and is used when the file to print is invalid. It will
|
|
XCOMM ## exit the program.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
BadFileCB()
|
|
{
|
|
Exit "$bad_file_flag"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## ErrorDialogCB()
|
|
XCOMM ##
|
|
XCOMM ## This is the callback for the OK button in the error message
|
|
XCOMM ## dialog and is used for non-fatal error messages. It simply
|
|
XCOMM ## destroys the message dialog.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
ErrorDialogCB()
|
|
{
|
|
XtDestroyWidget "$INFORMATION"
|
|
}
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## DisplayErrorMessageDialog()
|
|
XCOMM ##
|
|
XCOMM ## We have detected an error. Post a dialog to that effect.
|
|
XCOMM ##
|
|
XCOMM ## Upon entry, check the failure_flag value for the proper
|
|
XCOMM ## message to print.
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
DisplayErrorMessageDialog()
|
|
{
|
|
XmCreateErrorDialog INFORMATION "$TOPLEVEL" information
|
|
|
|
catgets CAT_MESG_STRING "$CAT_ID" 1 160 "Print Information"
|
|
|
|
XtSetValues "$(XtParent "-" "$INFORMATION")" title:"$CAT_MESG_STRING"
|
|
|
|
GetErrorMessageString
|
|
|
|
if ((failure_flag == NO_FILE_ERR )) ||
|
|
(( failure_flag == NO_REGULAR_FILE_ERR )) ||
|
|
(( failure_flag == NO_READABLE_FILE_ERR ))
|
|
then
|
|
bad_file_flag=$failure_flag
|
|
cb="BadFileCB"
|
|
else
|
|
cb="ErrorDialogCB"
|
|
fi
|
|
|
|
XtSetValues "$INFORMATION" \
|
|
okCallback:$cb \
|
|
messageString:"${CAT_MESG_STRING}" \
|
|
noResize:True \
|
|
defaultButtonType:DIALOG_OK_BUTTON \
|
|
dialogStyle:DIALOG_FULL_APPLICATION_MODAL \
|
|
messageAlignment:ALIGNMENT_CENTER
|
|
|
|
XtUnmanageChild "$(XmMessageBoxGetChild "-" "$INFORMATION" \
|
|
DIALOG_CANCEL_BUTTON)"
|
|
|
|
XtUnmanageChild "$(XmMessageBoxGetChild "-" "$INFORMATION" \
|
|
DIALOG_HELP_BUTTON)"
|
|
|
|
XtManageChild "$INFORMATION"
|
|
|
|
XtMainLoop
|
|
}
|
|
|
|
|
|
XCOMM #################################################################
|
|
XCOMM ## Main()
|
|
XCOMM ##
|
|
XCOMM ## Set up and call either the silent or the GUI routines.
|
|
XCOMM ##
|
|
XCOMM ##
|
|
XCOMM #################################################################
|
|
|
|
Initialize
|
|
|
|
while getopts b:d:m:n:o:u:aehirsvw argument
|
|
do
|
|
case $argument in
|
|
a) print_man_flag=1
|
|
;;
|
|
b) banner_title=$OPTARG
|
|
banner_title_flag=1
|
|
;;
|
|
d) printer_name=$OPTARG
|
|
printer_name_flag=1
|
|
;;
|
|
e) remove_flag=1
|
|
;;
|
|
h) PrintUsage
|
|
Exit $SUCCESS
|
|
;;
|
|
i) send_mail_flag=true
|
|
;;
|
|
m) print_command=$OPTARG
|
|
;;
|
|
n) copy_count=$OPTARG
|
|
copy_count_flag=1
|
|
;;
|
|
o) other_options=$OPTARG
|
|
other_options_flag=1
|
|
;;
|
|
r) format_flag=1
|
|
;;
|
|
s) silent_flag=1
|
|
;;
|
|
u) user_filename=$OPTARG
|
|
user_filename_flag=1
|
|
;;
|
|
v) verbose_flag=1
|
|
;;
|
|
w) print_raw_flag=1
|
|
;;
|
|
\?) PrintUsage
|
|
Exit $USAGE_EXIT
|
|
;;
|
|
esac
|
|
done
|
|
|
|
((shift_positions = OPTIND - 1))
|
|
|
|
let npf=0
|
|
|
|
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 filename.
|
|
HASH At some later point, may want to parse a list of filenames.
|
|
HASH
|
|
print_file=""
|
|
|
|
while (($# > 0))
|
|
do
|
|
nw=$(echo "$1" | wc -w)
|
|
if ((nw > 1))
|
|
then
|
|
file="\"$1\""
|
|
else
|
|
file="$1"
|
|
fi
|
|
|
|
if [ "" = "$print_file" ]
|
|
then
|
|
print_file="$file"
|
|
else
|
|
print_file="$print_file $file"
|
|
fi
|
|
files[$npf]=$1
|
|
let npf=$npf+1
|
|
shift
|
|
done
|
|
fi
|
|
|
|
XCOMM
|
|
XCOMM make sure copy_count is a positive integer
|
|
XCOMM
|
|
if (( copy_count_flag ))
|
|
then
|
|
CheckIsPosInteger "$copy_count"
|
|
if (( failure_flag != SUCCESS ))
|
|
then
|
|
DisplayErrorMessage
|
|
Exit $USAGE_EXIT
|
|
fi
|
|
fi
|
|
|
|
XCOMM
|
|
XCOMM Make sure all these settings line up consistently.
|
|
XCOMM
|
|
ReconcileOptions
|
|
|
|
if (( verbose_flag ))
|
|
then
|
|
PrintStartLog
|
|
fi
|
|
|
|
XCOMM
|
|
XCOMM Do we have enough information to do our job?
|
|
XCOMM This step may cause us to exit.
|
|
XCOMM
|
|
|
|
XCOMM
|
|
XCOMM Have we been given a valid file(s)?
|
|
XCOMM
|
|
let i=0
|
|
while ((i < npf))
|
|
do
|
|
CheckValidFile "${files[$i]}"
|
|
failure_flag=$?
|
|
if (( failure_flag != SUCCESS ))
|
|
then
|
|
print_file="\"${files[$i]}\""
|
|
break
|
|
fi
|
|
let i=i+1
|
|
done
|
|
|
|
if (( silent_flag ))
|
|
then
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
CheckValidPrinter
|
|
failure_flag=$?
|
|
if (( failure_flag != SUCCESS ))
|
|
then
|
|
DisplayErrorMessage
|
|
Exit $failure_flag
|
|
fi
|
|
|
|
DoParameterCollectionSilent
|
|
PrintIt
|
|
CleanUp
|
|
Exit $failure_flag
|
|
else
|
|
DisplayErrorMessage
|
|
Exit $failure_flag
|
|
fi
|
|
else
|
|
if [[ -r CDE_INSTALLATION_TOP/lib/dtksh/DtFuncs.dtsh ]]
|
|
then
|
|
. CDE_INSTALLATION_TOP/lib/dtksh/DtFuncs.dtsh
|
|
else
|
|
failure_flag=1
|
|
echo Sorry--cannot find initialization file.
|
|
Exit $NO_INIT_FILE_ERR
|
|
fi
|
|
|
|
XtInitialize TOPLEVEL printerConfig Dtlp "${@:-}"
|
|
XtDisplay DISPLAY "$TOPLEVEL"
|
|
|
|
if (( failure_flag == SUCCESS ))
|
|
then
|
|
UseGui
|
|
else
|
|
DisplayErrorMessageDialog
|
|
fi
|
|
fi
|
|
|
|
XCOMM
|
|
XCOMM Never reached.
|
|
XCOMM
|
|
XCOMM #################### eof ##############################
|