#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#ifdef __hpux
#include <sys/sysmacros.h>
#endif
#include "spooler.h"
#define LIST_QUEUES_AIX4 \
"lsallq | grep -v '^bsh$' | sort | uniq"
#define LIST_QUEUES_HPUX \
"LANG=C lpstat -v | " \
"awk '" \
" $2 == \"for\" " \
" { " \
" x = match($3, /:/); " \
" print substr($3, 1, x-1)" \
" }' | sort | uniq"
#define LIST_QUEUES_OSF \
"LANG=C lpstat -v | " \
"nawk '" \
" $2 == \"for\" " \
" { print $4 }' " \
" | sort | uniq"
#define LIST_QUEUES_UXP \
"LANG=C lpstat -v |" \
"nawk '" \
" $4 == \"for\" " \
" { " \
" x = match($5, /:/); " \
" print substr($5, 1, x-1)" \
" }' | sort | uniq"
#define LIST_QUEUES_BSD \
"PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \
"export PATH\n" \
\
"which_tool()\n" \
"{\n" \
" echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \
"}\n" \
\
"(\n" \
"WHICH_LPC=\"`which_tool lpc`\"\n" \
\
"if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \
" NAWK=\"nawk\"\n" \
"else\n" \
" NAWK=\"awk\"\n" \
"fi\n" \
\
"[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc status | ${NAWK} '/^[^ ]*:$/ && !/@/ && !/ / { print $1 }' | sed -e /:/s///)\n" \
"[ \"${WHICH_LPC}\" != \"\" ] && (LANG=C lpc -a status | ${NAWK} '/^[^ ]*@[^ ]/ && !/:$/ { split( $1, name, \"@\" ); print name[1]; }')\n" \
") | egrep -v -i \" |^all$\" | sort | uniq"
#define LIST_QUEUES_SYSV \
"PATH=\"${PATH}:/usr/bin:/usr/sbin:/bin:/sbin\"\n" \
"export PATH\n" \
\
"which_tool()\n" \
"{\n" \
" echo \"${PATH}\" | tr \":\" \"\n\" | while read i ; do ls -1ad \"${i}/${1}\" 2>/dev/null ; done\n" \
"}\n" \
\
"(\n" \
"WHICH_LPSTAT=\"`which_tool lpstat`\"\n" \
\
"if [ \"`which_tool nawk`\" != \"\" ] ; then\n" \
" NAWK=\"nawk\"\n" \
"else\n" \
" NAWK=\"awk\"\n" \
"fi\n" \
\
"[ \"${WHICH_LPSTAT}\" != \"\" ] && (LANG=C lpstat -v | ${NAWK} ' $2 == \"for\" { x = match($3, /:/); print substr($3, 1, x-1) }')\n" \
") | egrep -v -i \" |^all$\" | sort | uniq"
#define LIST_QUEUES_SOLARIS "LANG=C lpget -k description " \
"`lpstat -v " \
"| nawk '$2 == \"for\" { x = match($3, /:/); print substr($3, 1,x-1) }' " \
"| sort -u` " \
"| nawk -F: ' NF == 2 { name=$1 } " \
" NF == 1 { sub(\"^.*description\\( - undefined|=\\)\",\"\"); " \
" printf \"%s\txp-printerattr.descriptor=%s\\n\", name, $1 } '"
#define LIST_QUEUES_OTHER \
"LANG=C lpstat -v | " \
"nawk '" \
" $2 == \"for\" " \
" { " \
" x = match($3, /:/); " \
" print substr($3, 1, x-1)" \
" }' | sort | uniq"
#define DEFAULT_SPOOL_COMMAND_HPUX "/usr/bin/lp -d %printer-name% -o raw -n %copy-count% -t %job-name% %options%"
#define DEFAULT_SPOOL_COMMAND_BSD "/usr/bin/lpr -P %printer-name% -#%copy-count% -T %job-name% %options%"
#define DEFAULT_SPOOL_COMMAND_SYSV "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%"
#define DEFAULT_SPOOL_COMMAND_SOLARIS "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%"
#define DEFAULT_SPOOL_COMMAND_OTHER "/usr/bin/lp -d %printer-name% -n %copy-count% -t %job-name% %options%"
XpSpoolerType xpstm[] =
{
{ "aix", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER },
{ "aix4", LIST_QUEUES_AIX4, DEFAULT_SPOOL_COMMAND_OTHER },
{ "bsd", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD },
{ "osf", LIST_QUEUES_OSF, DEFAULT_SPOOL_COMMAND_OTHER },
{ "solaris", LIST_QUEUES_SOLARIS, DEFAULT_SPOOL_COMMAND_SOLARIS },
{ "sysv", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV },
{ "uxp", LIST_QUEUES_UXP, DEFAULT_SPOOL_COMMAND_OTHER },
{ "cups", LIST_QUEUES_SYSV, DEFAULT_SPOOL_COMMAND_SYSV },
{ "lprng", LIST_QUEUES_BSD, DEFAULT_SPOOL_COMMAND_BSD },
{ "other", LIST_QUEUES_OTHER, DEFAULT_SPOOL_COMMAND_OTHER },
{ "none", NULL, NULL },
{ NULL, NULL, NULL }
};
XpSpoolerTypePtr spooler_type = NULL;
XpSpoolerTypePtr XpSpoolerNameToXpSpoolerType(char *name)
{
XpSpoolerTypePtr curr = xpstm;
while( curr->name != NULL )
{
if( !strcasecmp(name, curr->name) )
return curr;
curr++;
}
return NULL;
}
static char *spooler_namelist = NULL;
char *XpGetSpoolerTypeNameList(void)
{
if( spooler_namelist )
return spooler_namelist;
return XPDEFAULTSPOOLERNAMELIST;
}
void XpSetSpoolerTypeNameList(char *namelist)
{
spooler_namelist = namelist;
}