-CHANGES.txt - 2007-09-13
+CHANGES.txt - 2007-09-18
------------------------
+CHANGES IN CUPS V1.3.2
+
+ - The 1.3.1 release was incorrectly created from the
+ 1.4.x source tree (STR #2519)
+ - Added support for 32/64-bit libraries on HP-UX
+ (STR #2520)
+ - The scheduler incorrectly used portrait as the default
+ orientation (STR #2513)
+ - The scheduler no longer writes the printcap file for
+ every remote printer update (STR #2512)
+ - Remote raw printing with multiple copies did not work
+ (STR #2518)
+ - Updated the configure script to require at least autoconf
+ 2.60 (STR #2515)
+ - Some gzip'd PPD files were not read in their entirety
+ (STR #2510)
+
+
CHANGES IN CUPS V1.3.1
- Documentation updates.
-INSTALL - CUPS v1.3.1 - 2007-09-14
+INSTALL - CUPS v1.3.2 - 2007-09-18
----------------------------------
This file describes how to compile and install CUPS from source
-README - CUPS v1.3.1 - 2007-09-14
+README - CUPS v1.3.2 - 2007-09-18
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt"
/*
- * "$Id: ipp.c 6911 2007-09-04 20:35:08Z mike $"
+ * "$Id: ipp.c 6967 2007-09-17 23:30:52Z mike $"
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
ipp_attribute_t *printer_accepting; /* printer-is-accepting-jobs */
int copies, /* Number of copies for job */
copies_remaining; /* Number of copies remaining */
- const char *content_type; /* CONTENT_TYPE environment variable */
+ const char *content_type, /* CONTENT_TYPE environment variable */
+ *final_content_type; /* FINAL_CONTENT_TYPE environment var */
#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
struct sigaction action; /* Actions for POSIX signals */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
* Get the (final) content type...
*/
- if ((content_type = getenv("FINAL_CONTENT_TYPE")) == NULL)
- if ((content_type = getenv("CONTENT_TYPE")) == NULL)
- content_type = "application/octet-stream";
+ if ((content_type = getenv("CONTENT_TYPE")) == NULL)
+ content_type = "application/octet-stream";
- if (!strncmp(content_type, "printer/", 8))
- content_type = "application/vnd.cups-raw";
+ if ((final_content_type = getenv("FINAL_CONTENT_TYPE")) == NULL)
+ {
+ final_content_type = content_type;
+
+ if (!strncmp(final_content_type, "printer/", 8))
+ final_content_type = "application/vnd.cups-raw";
+ }
/*
* Extract the hostname and printer name from the URI...
* Point to the single file from stdin...
*/
- filename = tmpfilename;
- files = &filename;
- num_files = 1;
-
+ filename = tmpfilename;
+ num_files = 1;
+ files = &filename;
send_options = 0;
}
else
* Point to the files on the command-line...
*/
- num_files = argc - 6;
- files = argv + 6;
-
- send_options = strncasecmp(content_type, "application/vnd.cups-", 21) != 0;
+ num_files = argc - 6;
+ files = argv + 6;
+ send_options = 1;
#ifdef HAVE_LIBZ
if (compression)
num_options = cupsParseOptions(argv[5], 0, &options);
#ifdef __APPLE__
- if (content_type != NULL &&
- !strcasecmp(content_type, "application/pictwps") && num_files == 1)
+ if (!strcasecmp(content_type, "application/pictwps") && num_files == 1)
{
if (format_sup != NULL)
{
* number of copies to 1...
*/
- content_type = "application/postscript";
- copies = 1;
- copies_remaining = 1;
- send_options = 0;
+ final_content_type = "application/postscript";
+ copies = 1;
+ copies_remaining = 1;
+ send_options = 0;
}
}
#endif /* __APPLE__ */
- if (content_type != NULL && format_sup != NULL)
+ if (format_sup != NULL)
{
for (i = 0; i < format_sup->num_values; i ++)
- if (!strcasecmp(content_type, format_sup->values[i].string.text))
+ if (!strcasecmp(final_content_type, format_sup->values[i].string.text))
break;
if (i < format_sup->num_values)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE,
- "document-format", NULL, content_type);
+ "document-format", NULL, final_content_type);
}
if (copies_sup && version > 0 && send_options)
/*
- * End of "$Id: ipp.c 6911 2007-09-04 20:35:08Z mike $".
+ * End of "$Id: ipp.c 6967 2007-09-17 23:30:52Z mike $".
*/
dnl
-dnl "$Id: cups-common.m4 6946 2007-09-12 18:28:16Z mike $"
+dnl "$Id: cups-common.m4 6965 2007-09-17 21:34:07Z mike $"
dnl
dnl Common configuration stuff for the Common UNIX Printing System (CUPS).
dnl
dnl file is missing or damaged, see the license at "http://www.cups.org/".
dnl
-dnl We need at least autoconf 2.50...
-AC_PREREQ(2.50)
+dnl We need at least autoconf 2.60...
+AC_PREREQ(2.60)
dnl Set the name of the config header file...
AC_CONFIG_HEADER(config.h)
dnl Versio number information...
-CUPS_VERSION="1.3.1"
+CUPS_VERSION="1.3.2"
CUPS_REVISION=""
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_IPP_PORT,$DEFAULT_IPP_PORT)
dnl
-dnl End of "$Id: cups-common.m4 6946 2007-09-12 18:28:16Z mike $".
+dnl End of "$Id: cups-common.m4 6965 2007-09-17 21:34:07Z mike $".
dnl
dnl
-dnl "$Id: cups-compiler.m4 6698 2007-07-20 14:15:44Z mike $"
+dnl "$Id: cups-compiler.m4 6976 2007-09-18 20:39:31Z mike $"
dnl
dnl Compiler stuff for the Common UNIX Printing System (CUPS).
dnl
if test $PICFLAG = 1; then
OPTIM="+z $OPTIM"
fi
+
+ if test "x$enable_32bit" = xyes; then
+ # Build 32-bit libraries, 64-bit base...
+ if test -z "$with_arch32flags"; then
+ ARCH32FLAGS="+DD32"
+ else
+ ARCH32FLAGS="$with_arch32flags"
+ fi
+
+ if test -z "$with_archflags"; then
+ if test -z "$with_arch64flags"; then
+ ARCHFLAGS="+DD64"
+ else
+ ARCHFLAGS="$with_arch64flags"
+ fi
+ fi
+ fi
+
+ if test "x$enable_64bit" = xyes; then
+ # Build 64-bit libraries, 32-bit base...
+ if test -z "$with_arch64flags"; then
+ ARCH64FLAGS="+DD64"
+ else
+ ARCH64FLAGS="$with_arch64flags"
+ fi
+
+ if test -z "$with_archflags"; then
+ if test -z "$with_arch32flags"; then
+ ARCHFLAGS="+DD32"
+ else
+ ARCHFLAGS="$with_arch32flags"
+ fi
+ fi
+ fi
;;
IRIX)
if test -z "$OPTIM"; then
esac
dnl
-dnl End of "$Id: cups-compiler.m4 6698 2007-07-20 14:15:44Z mike $".
+dnl End of "$Id: cups-compiler.m4 6976 2007-09-18 20:39:31Z mike $".
dnl
dnl
-dnl "$Id: cups-directories.m4 6838 2007-08-22 20:00:19Z mike $"
+dnl "$Id: cups-directories.m4 6976 2007-09-18 20:39:31Z mike $"
dnl
dnl Directory stuff for the Common UNIX Printing System (CUPS).
dnl
fi
fi
-dnl Fix "libdir" variable for IRIX 6.x...
+dnl Fix "libdir" variable...
if test "$libdir" = "\${exec_prefix}/lib"; then
- if test "$uname" = "IRIX"; then
- libdir="$exec_prefix/lib32"
- else
- if test "$uname" = Linux -a -d /usr/lib64; then
- libdir="$exec_prefix/lib64"
- else
- libdir="$exec_prefix/lib"
- fi
- fi
+ case "$uname" in
+ IRIX*)
+ libdir="$exec_prefix/lib32"
+ ;;
+ Linux*)
+ if test -d /usr/lib64; then
+ libdir="$exec_prefix/lib64"
+ fi
+ ;;
+ HP-UX*)
+ if test -d /usr/lib/hpux32; then
+ libdir="$exec_prefix/lib/hpux32"
+ fi
+ ;;
+ esac
fi
dnl Setup init.d locations...
HP-UX*)
INITDIR="/sbin"
RCLEVELS="2"
- RCSTART="620"
- RCSTOP="380"
+ RCSTART="380"
+ RCSTOP="620"
;;
IRIX*)
AC_SUBST(CUPS_FONTPATH)
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$CUPS_FONTPATH")
-# Locale data
-if test "$localedir" = "\${datarootdir}/locale"; then
+# Locale data (initial assignment allows us not to require autoconf 2.60)
+localedir="${localedir:=}"
+if test "$localedir" = "\${datarootdir}/locale" -o "$localedir" = ""; then
case "$uname" in
Linux | GNU | *BSD* | Darwin*)
- CUPS_LOCALEDIR="$datarootdir/locale"
+ CUPS_LOCALEDIR="$datadir/locale"
;;
OSF1* | AIX*)
AC_SUBST(CUPS_STATEDIR)
dnl
-dnl End of "$Id: cups-directories.m4 6838 2007-08-22 20:00:19Z mike $".
+dnl End of "$Id: cups-directories.m4 6976 2007-09-18 20:39:31Z mike $".
dnl
/*
- * "$Id: cups.h 6946 2007-09-12 18:28:16Z mike $"
+ * "$Id: cups.h 6965 2007-09-17 21:34:07Z mike $"
*
* API definitions for the Common UNIX Printing System (CUPS).
*
* Constants...
*/
-# define CUPS_VERSION 1.0301
+# define CUPS_VERSION 1.0302
# define CUPS_VERSION_MAJOR 1
# define CUPS_VERSION_MINOR 3
-# define CUPS_VERSION_PATCH 1
+# define CUPS_VERSION_PATCH 2
# define CUPS_DATE_ANY -1
#endif /* !_CUPS_CUPS_H_ */
/*
- * End of "$Id: cups.h 6946 2007-09-12 18:28:16Z mike $".
+ * End of "$Id: cups.h 6965 2007-09-17 21:34:07Z mike $".
*/
/*
- * "$Id: file.c 6649 2007-07-11 21:46:42Z mike $"
+ * "$Id: file.c 6963 2007-09-17 20:35:54Z mike $"
*
* File functions for the Common UNIX Printing System (CUPS).
*
if (fp->ptr >= fp->end)
if (cups_fill(fp) <= 0)
{
- DEBUG_printf((" cups_fill() returned -1, total=%d\n", total));
+ DEBUG_printf((" cups_fill() returned -1, total=%d\n", (int)total));
if (total > 0)
return ((ssize_t)total);
* Return the total number of bytes read...
*/
- DEBUG_printf((" total=%d\n", total));
+ DEBUG_printf((" total=%d\n", (int)total));
return ((ssize_t)total);
}
{
ssize_t bytes; /* Number of bytes read */
#ifdef HAVE_LIBZ
+ int status; /* Decompression status */
const unsigned char *ptr, /* Pointer into buffer */
*end; /* End of buffer */
#endif /* HAVE_LIBZ */
fp->stream.next_out = (Bytef *)fp->buf;
fp->stream.avail_out = sizeof(fp->buf);
- if (inflate(&(fp->stream), Z_NO_FLUSH) == Z_STREAM_END)
+ status = inflate(&(fp->stream), Z_NO_FLUSH);
+
+ if (fp->stream.next_out > (Bytef *)fp->buf)
+ fp->crc = crc32(fp->crc, (Bytef *)fp->buf,
+ fp->stream.next_out - (Bytef *)fp->buf);
+
+ if (status == Z_STREAM_END)
{
/*
* Read the CRC and length...
* Bad CRC, mark end-of-file...
*/
+ DEBUG_printf(("cups_fill: tcrc=%08x, fp->crc=%08x\n",
+ (unsigned int)tcrc, (unsigned int)fp->crc));
+
fp->eof = 1;
return (-1);
/*
- * End of "$Id: file.c 6649 2007-07-11 21:46:42Z mike $".
+ * End of "$Id: file.c 6963 2007-09-17 20:35:54Z mike $".
*/
/*
- * "$Id: testfile.c 6649 2007-07-11 21:46:42Z mike $"
+ * "$Id: testfile.c 6963 2007-09-17 20:35:54Z mike $"
*
* File test program for the Common UNIX Printing System (CUPS).
*
*
* Contents:
*
- * main() - Main entry.
+ * main() - Main entry.
+ * read_write_tests() - Perform read/write tests.
*/
/*
unsigned char readbuf[8192], /* Read buffer */
writebuf[8192]; /* Write buffer */
int byte; /* Byte from file */
+ static const char *partial_line = "partial line";
+ /* Partial line */
/*
fputs("cupsFileWrite(): ", stdout);
- for (i = 0; i < 100; i ++)
+ for (i = 0; i < 10000; i ++)
if (cupsFileWrite(fp, (char *)writebuf, sizeof(writebuf)) < 0)
break;
- if (i >= 100)
+ if (i >= 10000)
+ puts("PASS");
+ else
+ {
+ printf("FAIL (%s)\n", strerror(errno));
+ status ++;
+ }
+
+ /*
+ * cupsFilePuts() with partial line...
+ */
+
+ fputs("cupsFilePuts(\"partial line\"): ", stdout);
+
+ if (cupsFilePuts(fp, partial_line) > 0)
puts("PASS");
else
{
fputs("cupsFileRead(): ", stdout);
- for (i = 0; i < 100; i ++)
+ for (i = 0; i < 10000; i ++)
if ((byte = cupsFileRead(fp, (char *)readbuf, sizeof(readbuf))) < 0)
break;
else if (memcmp(readbuf, writebuf, sizeof(readbuf)))
break;
- if (i >= 100)
+ if (i >= 10000)
puts("PASS");
else if (byte > 0)
{
status ++;
}
+ /*
+ * cupsFileGetChar() with partial line...
+ */
+
+ fputs("cupsFileGetChar(partial line): ", stdout);
+
+ for (i = 0; i < strlen(partial_line); i ++)
+ if ((byte = cupsFileGetChar(fp)) < 0)
+ break;
+ else if (byte != partial_line[i])
+ break;
+
+ if (!partial_line[i])
+ puts("PASS");
+ else
+ {
+ printf("FAIL (got '%c', expected '%c')\n", byte, partial_line[i]);
+ status ++;
+ }
+
/*
* cupsFileClose()
*/
/*
- * End of "$Id: testfile.c 6649 2007-07-11 21:46:42Z mike $".
+ * End of "$Id: testfile.c 6963 2007-09-17 20:35:54Z mike $".
*/
--- /dev/null
+button-accept-jobs.gif green Aceptar trabajos
+button-add-class.gif standard Añadir clase
+button-add-printer.gif standard Añadir impresora
+button-add-rss-subscription.gif standard Añadir subscripción RSS
+button-add-this-printer.gif standard Añadir esta impresora
+button-cancel-all-jobs.gif black Cancelar todos los trabajos
+button-cancel-job.gif black Cancelar trabajo
+button-cancel-subscription.gif standard Cancelar subscripción
+button-change-settings.gif standard Cambiar especificaciones
+button-clean-print-heads.gif standard Limpiar cabezales de impresión
+button-clear.gif standard Borrar
+button-continue.gif standard Siguiente
+button-delete-class.gif black Borrar clase
+button-delete-printer.gif black Borrar impresora
+button-edit-configuration-file.gif standard Editar archivo configuración
+button-export-samba.gif standard Exportar impresoras a Samba
+button-find-new-printers.gif standard Encontrar nuevas impresoras
+button-help.gif standard Ayuda
+button-hold-job.gif red Retener trabajo
+button-manage-classes.gif standard Administrar clases
+button-manage-jobs.gif standard Administrar trabajos
+button-manage-printers.gif standard Administrar impresoras
+button-manage-server.gif standard Administrar servidor
+button-modify-class.gif standard Modificar clase
+button-modify-printer.gif standard Modificar impresora
+button-move-job.gif standard Mover trabajo
+button-move-jobs.gif standard Mover todos los trabajos
+button-print-self-test-page.gif standard Imprimir página de auto prueba
+button-print-test-page.gif standard Imprimir página de prueba
+button-publish-printer.gif standard Publicar impresora
+button-reject-jobs.gif red Rechazar trabajos
+button-release-job.gif green Liberar trabajo
+button-restart-job.gif standard Reimprimir trabajo
+button-save-changes.gif standard Guardar cambios
+button-search.gif standard Buscar
+button-set-allowed-users.gif standard Cambiar usuarios permitidos
+button-set-as-default.gif standard Poner como predeterminada
+button-set-printer-options.gif standard Cambiar opciones impresora
+button-show-active.gif standard Mostrar trabajos activos
+button-show-all.gif standard Mostrar todos los trabajos
+button-show-completed.gif standard Mostrar trabajos completados
+button-show-next.gif standard Mostrar siguiente
+button-show-previous.gif standard Mostrar anterior
+button-sort-ascending.gif standard @UP Orden ascendente @UP
+button-sort-descending.gif standard @DOWN Orden descendente @DOWN
+button-start-class.gif green Iniciar clase
+button-start-printer.gif green Iniciar impresora
+button-stop-class.gif red Detener clase
+button-stop-printer.gif red Detener impresora
+button-unpublish-printer.gif standard No publicar impresora
+button-use-default-config.gif standard Usar archivo de configuración predeterminado
+button-view-access-log.gif standard Ver archivo de registro de accesos
+button-view-error-log.gif standard Ver archivo de registro de errores
+button-view-page-log.gif standard Ver archivo de registro de páginas
+button-view-printable-version.gif standard Ver versión imprimible
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="438.75"
+ height="315"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mike/c/cups-trunk/doc/images"
+ sodipodi:docname="raster.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/mike/c/cups-trunk/doc/images/raster.png"
+ inkscape:export-xdpi="128"
+ inkscape:export-ydpi="128">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.90444444"
+ inkscape:cx="225"
+ inkscape:cy="177.5167"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="351pt"
+ height="252pt"
+ units="pt"
+ showgrid="true"
+ gridspacingx="9pt"
+ gridspacingy="9pt"
+ gridanglex="24pt"
+ gridanglez="24pt"
+ grid_units="pt"
+ inkscape:object-bbox="true"
+ inkscape:object-points="true"
+ inkscape:object-nodes="true"
+ inkscape:grid-points="true"
+ inkscape:guide-points="true"
+ inkscape:window-width="872"
+ inkscape:window-height="622"
+ inkscape:window-x="0"
+ inkscape:window-y="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3338"
+ transform="translate(0.5,-1.3515625)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3336"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot2357"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2359"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect2361" /></flowRegion><flowPara
+ id="flowPara2363">Back</flowPara><flowPara
+ id="flowPara2365">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3346"
+ transform="translate(113,-1.3515625)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3348"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3350"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3352"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3354" /></flowRegion><flowPara
+ id="flowPara3356">Back</flowPara><flowPara
+ id="flowPara3358">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3360"
+ transform="translate(226,-1.8515625)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3362"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3364"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3366"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3368" /></flowRegion><flowPara
+ id="flowPara3370">Back</flowPara><flowPara
+ id="flowPara3372">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3374"
+ transform="matrix(-1,0,0,-1,428,111.14844)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3376"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3378"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3380"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3382" /></flowRegion><flowPara
+ id="flowPara3384">Back</flowPara><flowPara
+ id="flowPara3386">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3388"
+ transform="matrix(-1,0,0,-1,90.5,279.89844)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3390"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3392"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3394"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3396" /></flowRegion><flowPara
+ id="flowPara3398">Back</flowPara><flowPara
+ id="flowPara3400">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3402"
+ transform="translate(113,167.39844)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3404"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3406"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3408"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3410" /></flowRegion><flowPara
+ id="flowPara3412">Back</flowPara><flowPara
+ id="flowPara3414">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3416"
+ transform="matrix(1,0,0,-1,226,279.39844)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3418"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3420"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3422"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3424" /></flowRegion><flowPara
+ id="flowPara3426">Back</flowPara><flowPara
+ id="flowPara3428">Side</flowPara></flowRoot> </g>
+ <g
+ id="g3430"
+ transform="matrix(-1,0,0,1,428,167.39844)">
+ <rect
+ y="11.25"
+ x="11.25"
+ height="90"
+ width="67.5"
+ id="rect3432"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <flowRoot
+ transform="translate(11.34082,17.328046)"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ id="flowRoot3434"
+ xml:space="preserve"><flowRegion
+ id="flowRegion3436"><rect
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Monospace"
+ y="12.162162"
+ x="9.95086"
+ height="128.25552"
+ width="86.240784"
+ id="rect3438" /></flowRegion><flowPara
+ id="flowPara3440">Back</flowPara><flowPara
+ id="flowPara3442">Side</flowPara></flowRoot> </g>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="47.503906"
+ y="119.83008"
+ id="text3444"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3446"
+ x="47.503906"
+ y="119.83008">Normal</tspan><tspan
+ sodipodi:role="line"
+ x="47.503906"
+ y="134.83008"
+ id="tspan3448">false</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="160.00391"
+ y="119.83008"
+ id="text3450"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3452"
+ x="160.00391"
+ y="119.83008">Normal</tspan><tspan
+ sodipodi:role="line"
+ x="160.00391"
+ y="134.83008"
+ id="tspan3454">true</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="273.00391"
+ y="119.83008"
+ id="text3456"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3458"
+ x="273.00391"
+ y="119.83008">ManualTumble</tspan><tspan
+ sodipodi:role="line"
+ x="273.00391"
+ y="134.83008"
+ id="tspan3460">false</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="385.39062"
+ y="119.83008"
+ id="text3462"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3464"
+ x="385.39062"
+ y="119.83008">ManualTumble</tspan><tspan
+ sodipodi:role="line"
+ x="385.39062"
+ y="134.83008"
+ id="tspan3466">true</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="43.847656"
+ y="288.51562"
+ id="text3468"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3470"
+ x="43.847656"
+ y="288.51562">Rotated</tspan><tspan
+ sodipodi:role="line"
+ x="43.847656"
+ y="303.51562"
+ id="tspan3472">false</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="156.84766"
+ y="288.51562"
+ id="text3474"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3476"
+ x="156.84766"
+ y="288.51562">Rotated</tspan><tspan
+ sodipodi:role="line"
+ x="156.84766"
+ y="303.51562"
+ id="tspan3478">true</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="269.34766"
+ y="288.58008"
+ id="text3480"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3482"
+ x="269.34766"
+ y="288.58008">Flipped</tspan><tspan
+ sodipodi:role="line"
+ x="269.34766"
+ y="303.58008"
+ id="tspan3484">false</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Monospace"
+ x="381.84766"
+ y="288.58008"
+ id="text3486"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3488"
+ x="381.84766"
+ y="288.58008">Flipped</tspan><tspan
+ sodipodi:role="line"
+ x="381.84766"
+ y="303.58008"
+ id="tspan3490">true</tspan></text>
+ </g>
+</svg>
--- /dev/null
+/*
+ * "$Id: checkpo.c 6926 2007-09-06 14:34:31Z mike $"
+ *
+ * Verify that translations in the .po file have the same number and type of
+ * printf-style format strings.
+ *
+ * Usage:
+ *
+ * checkpo filename.po [... filenameN.po]
+ *
+ * Compile with:
+ *
+ * gcc -o checkpo checkpo.c `cups-config --libs`
+ *
+ * Contents:
+ *
+ * main() - Validate .po files.
+ * abbreviate() - Abbreviate a message string as needed.
+ * collect_formats() - Collect all of the format strings in the msgid.
+ * free_formats() - Free all of the format strings.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <cups/string.h>
+#include <cups/i18n.h>
+
+
+/*
+ * Local functions...
+ */
+
+static char *abbreviate(const char *s, char *buf, int bufsize);
+static cups_array_t *collect_formats(const char *id);
+static void free_formats(cups_array_t *fmts);
+
+
+/*
+ * 'main()' - Validate .po files.
+ */
+
+int /* O - Exit code */
+main(int argc, /* I - Number of command-line args */
+ char *argv[]) /* I - Command-line arguments */
+{
+ int i; /* Looping var */
+ cups_array_t *po; /* .po file */
+ _cups_message_t *msg; /* Current message */
+ cups_array_t *idfmts, /* Format strings in msgid */
+ *strfmts; /* Format strings in msgstr */
+ char *idfmt, /* Current msgid format string */
+ *strfmt; /* Current msgstr format string */
+ int fmtidx, /* Format index */
+ fmtcount; /* Format count */
+ int status, /* Exit status */
+ pass, /* Pass/fail status */
+ untranslated; /* Untranslated messages */
+ char idbuf[80], /* Abbreviated msgid */
+ strbuf[80]; /* Abbreviated msgstr */
+
+
+ if (argc < 2)
+ {
+ puts("Usage: checkpo filename.po [... filenameN.po]");
+ return (1);
+ }
+
+ /*
+ * Check every .po file on the command-line...
+ */
+
+ for (i = 1, status = 0; i < argc; i ++)
+ {
+ /*
+ * Use the CUPS .po loader to get the message strings...
+ */
+
+ if ((po = _cupsMessageLoad(argv[i])) == NULL)
+ {
+ perror(argv[i]);
+ return (1);
+ }
+
+ printf("%s: ", argv[i]);
+ fflush(stdout);
+
+ /*
+ * Scan every message for a % string and then match them up with
+ * the corresponding string in the translation...
+ */
+
+ pass = 1;
+ untranslated = 0;
+
+ for (msg = (_cups_message_t *)cupsArrayFirst(po);
+ msg;
+ msg = (_cups_message_t *)cupsArrayNext(po))
+ {
+ if (!msg->str || !msg->str[0])
+ {
+ untranslated ++;
+ continue;
+ }
+ else if (strchr(msg->id, '%'))
+ {
+ idfmts = collect_formats(msg->id);
+ strfmts = collect_formats(msg->str);
+ fmtidx = 0;
+
+ for (strfmt = (char *)cupsArrayFirst(strfmts);
+ strfmt;
+ strfmt = (char *)cupsArrayNext(strfmts))
+ {
+ if (isdigit(strfmt[1] & 255) && strfmt[2] == '$')
+ {
+ /*
+ * Handle positioned format stuff...
+ */
+
+ fmtidx = strfmt[1] - '1';
+ strfmt += 3;
+ if ((idfmt = (char *)cupsArrayIndex(idfmts, fmtidx)) != NULL)
+ idfmt ++;
+ }
+ else
+ {
+ /*
+ * Compare against the current format...
+ */
+
+ idfmt = (char *)cupsArrayIndex(idfmts, fmtidx);
+ }
+
+ fmtidx ++;
+
+ if (!idfmt || strcmp(strfmt, idfmt))
+ break;
+
+ fmtcount ++;
+ }
+
+ if (cupsArrayCount(strfmts) != cupsArrayCount(idfmts) || strfmt)
+ {
+ if (pass)
+ {
+ pass = 0;
+ puts("FAIL");
+ }
+
+ printf(" Bad translation string \"%s\"\n for \"%s\"\n",
+ abbreviate(msg->str, strbuf, sizeof(strbuf)),
+ abbreviate(msg->id, idbuf, sizeof(idbuf)));
+ fputs(" Translation formats:", stdout);
+ for (strfmt = (char *)cupsArrayFirst(strfmts);
+ strfmt;
+ strfmt = (char *)cupsArrayNext(strfmts))
+ printf(" %s", strfmt);
+ fputs("\n Original formats:", stdout);
+ for (idfmt = (char *)cupsArrayFirst(idfmts);
+ idfmt;
+ idfmt = (char *)cupsArrayNext(idfmts))
+ printf(" %s", idfmt);
+ putchar('\n');
+ }
+
+ free_formats(idfmts);
+ free_formats(strfmts);
+ }
+
+ if ((!strncmp(msg->id, "ALERT:", 6) && strncmp(msg->str, "ALERT:", 6)) ||
+ (!strncmp(msg->id, "CRIT:", 5) && strncmp(msg->str, "CRIT:", 5)) ||
+ (!strncmp(msg->id, "DEBUG:", 6) && strncmp(msg->str, "DEBUG:", 6)) ||
+ (!strncmp(msg->id, "DEBUG2:", 7) && strncmp(msg->str, "DEBUG2:", 7)) ||
+ (!strncmp(msg->id, "EMERG:", 6) && strncmp(msg->str, "EMERG:", 6)) ||
+ (!strncmp(msg->id, "ERROR:", 6) && strncmp(msg->str, "ERROR:", 6)) ||
+ (!strncmp(msg->id, "INFO:", 5) && strncmp(msg->str, "INFO:", 5)) ||
+ (!strncmp(msg->id, "NOTICE:", 7) && strncmp(msg->str, "NOTICE:", 7)) ||
+ (!strncmp(msg->id, "WARNING:", 8) && strncmp(msg->str, "WARNING:", 8)))
+ {
+ if (pass)
+ {
+ pass = 0;
+ puts("FAIL");
+ }
+
+ printf(" Bad prefix on filter message \"%s\"\n for \"%s\"\n",
+ abbreviate(msg->str, strbuf, sizeof(strbuf)),
+ abbreviate(msg->id, idbuf, sizeof(idbuf)));
+ }
+ }
+
+ if (pass)
+ {
+ if ((untranslated * 10) >= cupsArrayCount(po))
+ {
+ /*
+ * Only allow 10% of messages to be untranslated before we fail...
+ */
+
+ pass = 0;
+ puts("FAIL");
+ printf(" Too many untranslated messages (%d of %d)\n", untranslated,
+ cupsArrayCount(po));
+ }
+ else if (untranslated > 0)
+ printf("PASS (%d of %d untranslated)\n", untranslated,
+ cupsArrayCount(po));
+ else
+ puts("PASS");
+ }
+
+ if (!pass)
+ status = 1;
+
+ _cupsMessageFree(po);
+ }
+
+ return (status);
+}
+
+
+/*
+ * 'abbreviate()' - Abbreviate a message string as needed.
+ */
+
+static char * /* O - Abbreviated string */
+abbreviate(const char *s, /* I - String to abbreviate */
+ char *buf, /* I - Buffer */
+ int bufsize) /* I - Size of buffer */
+{
+ char *bufptr; /* Pointer into buffer */
+
+
+ for (bufptr = buf, bufsize -= 4; *s && bufsize > 0; s ++)
+ {
+ if (*s == '\n')
+ {
+ if (bufsize < 2)
+ break;
+
+ *bufptr++ = '\\';
+ *bufptr++ = 'n';
+ bufsize -= 2;
+ }
+ else if (*s == '\t')
+ {
+ if (bufsize < 2)
+ break;
+
+ *bufptr++ = '\\';
+ *bufptr++ = 't';
+ bufsize -= 2;
+ }
+ else if (*s >= 0 && *s < ' ')
+ {
+ if (bufsize < 4)
+ break;
+
+ sprintf(bufptr, "\\%03o", *s);
+ bufptr += 4;
+ bufsize -= 4;
+ }
+ else
+ {
+ *bufptr++ = *s;
+ bufsize --;
+ }
+ }
+
+ if (*s)
+ strcpy(bufptr, "...");
+ else
+ *bufptr = '\0';
+
+ return (buf);
+}
+
+
+/*
+ * 'collect_formats()' - Collect all of the format strings in the msgid.
+ */
+
+static cups_array_t * /* O - Array of format strings */
+collect_formats(const char *id) /* I - msgid string */
+{
+ cups_array_t *fmts; /* Array of format strings */
+ char buf[255], /* Format string buffer */
+ *bufptr; /* Pointer into format string */
+
+
+ fmts = cupsArrayNew(NULL, NULL);
+
+ while ((id = strchr(id, '%')) != NULL)
+ {
+ if (id[1] == '%')
+ {
+ /*
+ * Skip %%...
+ */
+
+ id += 2;
+ continue;
+ }
+
+ for (bufptr = buf; *id && bufptr < (buf + sizeof(buf) - 1); id ++)
+ {
+ *bufptr++ = *id;
+
+ if (strchr("CDEFGIOSUXcdeifgopsux", *id))
+ {
+ id ++;
+ break;
+ }
+ }
+
+ *bufptr = '\0';
+ cupsArrayAdd(fmts, strdup(buf));
+ }
+
+ return (fmts);
+}
+
+
+/*
+ * 'free_formats()' - Free all of the format strings.
+ */
+
+static void
+free_formats(cups_array_t *fmts) /* I - Array of format strings */
+{
+ char *s; /* Current string */
+
+
+ for (s = (char *)cupsArrayFirst(fmts); s; s = (char *)cupsArrayNext(fmts))
+ free(s);
+
+ cupsArrayDelete(fmts);
+}
+
+
+/*
+ * End of "$Id: checkpo.c 6926 2007-09-06 14:34:31Z mike $".
+ */
#
-# "$Id: cups.list.in 6777 2007-08-08 17:43:14Z mike $"
+# "$Id: cups.list.in 6960 2007-09-14 21:15:04Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
%subpackage pt
f 0644 root sys $LOCALEDIR/pt/cups_pt.po locale/cups_pt.po
f 0644 root sys $LOCALEDIR/pt_BR/cups_pt_BR.po locale/cups_pt_BR.po
-f 0644 root sys $LOCALEDIR/pt_PT/cups_pt_PT.po locale/cups_pt_PT.po
%subpackage ru
f 0644 root sys $LOCALEDIR/ru/cups_ru.po locale/cups_ru.po
%subpackage sv
%subpackage
#
-# End of "$Id: cups.list.in 6777 2007-08-08 17:43:14Z mike $".
+# End of "$Id: cups.list.in 6960 2007-09-14 21:15:04Z mike $".
#
#
-# "$Id: cups.spec.in 6778 2007-08-08 19:27:51Z mike $"
+# "$Id: cups.spec.in 6960 2007-09-14 21:15:04Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
%defattr(-,root,root)
/usr/share/locale/pt/cups_pt.po
/usr/share/locale/pt_BR/cups_pt_BR.po
-/usr/share/locale/pt_PT/cups_pt_PT.po
%files ru
%defattr(-,root,root)
#
-# End of "$Id: cups.spec.in 6778 2007-08-08 19:27:51Z mike $".
+# End of "$Id: cups.spec.in 6960 2007-09-14 21:15:04Z mike $".
#
/*
- * "$Id: dirsvc.c 6691 2007-07-19 19:09:46Z mike $"
+ * "$Id: dirsvc.c 6974 2007-09-18 17:51:32Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
ipp_pstate_t state, const char *location,
const char *info, const char *make_model,
int num_attrs, cups_option_t *attrs);
-static void process_implicit_classes(void);
+static void process_implicit_classes(int *write_printcap);
static void send_cups_browse(cupsd_printer_t *p);
#ifdef HAVE_LDAP
static void send_ldap_browse(cupsd_printer_t *p);
* Do auto-classing if needed...
*/
- process_implicit_classes();
+ process_implicit_classes(NULL);
}
cups_option_t *attrs) /* I - Attributes */
{
int i; /* Looping var */
- int update; /* Update printer attributes? */
+ int update, /* Update printer attributes? */
+ write_printcap; /* Write the printcap file? */
char finaluri[HTTP_MAX_URI], /* Final URI for printer */
name[IPP_MAX_NAME], /* Name of printer */
newname[IPP_MAX_NAME], /* New name of printer */
* See if we already have it listed in the Printers list, and add it if not...
*/
- type |= CUPS_PRINTER_REMOTE | CUPS_PRINTER_DISCOVERED;
- type &= ~CUPS_PRINTER_IMPLICIT;
- update = 0;
- hptr = strchr(host, '.');
- sptr = strchr(ServerName, '.');
+ type |= CUPS_PRINTER_REMOTE | CUPS_PRINTER_DISCOVERED;
+ type &= ~CUPS_PRINTER_IMPLICIT;
+ update = 0;
+ write_printcap = 0;
+ hptr = strchr(host, '.');
+ sptr = strchr(ServerName, '.');
if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
{
cupsdSetString(&p->device_uri, uri);
cupsdSetString(&p->hostname, host);
- update = 1;
+ update = 1;
+ write_printcap = 1;
}
}
else
cupsdSetString(&p->uri, uri);
cupsdSetString(&p->device_uri, uri);
- update = 1;
+ write_printcap = 1;
+ update = 1;
}
}
if (info && (!p->info || strcmp(p->info, info)))
{
cupsdSetString(&p->info, info);
- update = 1;
+ update = 1;
+ write_printcap = 1;
}
if (!make_model || !make_model[0])
cupsdDeletePrinter(p, 1);
cupsdUpdateImplicitClasses();
+ write_printcap = 1;
}
else if (update)
{
if (p->type & CUPS_PRINTER_DEFAULT)
{
DefaultPrinter = p;
+ write_printcap = 1;
break;
}
}
* Do auto-classing if needed...
*/
- process_implicit_classes();
+ process_implicit_classes(&write_printcap);
/*
* Update the printcap file...
*/
- cupsdWritePrintcap();
+ if (write_printcap)
+ cupsdWritePrintcap();
}
*/
static void
-process_implicit_classes(void)
+process_implicit_classes(
+ int *write_printcap) /* O - Write printcap file? */
{
int i; /* Looping var */
int update; /* Update printer attributes? */
update = 1;
+ if (write_printcap)
+ *write_printcap = 1;
+
cupsdLogMessage(CUPSD_LOG_DEBUG, "Added implicit class \"%s\"...",
name);
cupsdAddEvent(CUPSD_EVENT_PRINTER_ADDED, p, NULL,
/*
- * End of "$Id: dirsvc.c 6691 2007-07-19 19:09:46Z mike $".
+ * End of "$Id: dirsvc.c 6974 2007-09-18 17:51:32Z mike $".
*/
/*
- * "$Id: printers.c 6678 2007-07-16 18:03:35Z mike $"
+ * "$Id: printers.c 6971 2007-09-17 23:59:05Z mike $"
*
* Printer routines for the Common UNIX Printing System (CUPS).
*
* data has come from...
*/
- cupsFilePuts(fp, "# This file was automatically generated by cupsd(8) from the\n");
+ cupsFilePuts(fp,
+ "# This file was automatically generated by cupsd(8) from the\n");
cupsFilePrintf(fp, "# %s/printers.conf file. All changes to this file\n",
ServerRoot);
cupsFilePuts(fp, "# will be lost.\n");
if (DefaultPrinter)
cupsFilePrintf(fp, "%s|%s:rm=%s:rp=%s:\n", DefaultPrinter->name,
- DefaultPrinter->info, ServerName, DefaultPrinter->name);
+ DefaultPrinter->info, ServerName,
+ DefaultPrinter->name);
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
if (p != DefaultPrinter)
cupsFilePrintf(fp, "%s|%s:rm=%s:rp=%s:\n", p->name, p->info,
- ServerName, p->name);
+ ServerName, p->name);
break;
case PRINTCAP_SOLARIS:
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
cupsFilePrintf(fp, "%s:\\\n"
- "\t:bsdaddr=%s,%s:\\\n"
- "\t:description=%s:\n",
- p->name, ServerName, p->name, p->info ? p->info : "");
+ "\t:bsdaddr=%s,%s:\\\n"
+ "\t:description=%s:\n",
+ p->name, ServerName, p->name,
+ p->info ? p->info : "");
break;
}
}
"number-up-default", 1);
if (!cupsGetOption("orientation-requested", p->num_options, p->options))
- ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
- "orientation-requested-default", IPP_PORTRAIT);
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NOVALUE,
+ "orientation-requested-default", NULL, NULL);
if (!cupsGetOption("notify-lease-duration", p->num_options, p->options))
ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
/*
- * End of "$Id: printers.c 6678 2007-07-16 18:03:35Z mike $".
+ * End of "$Id: printers.c 6971 2007-09-17 23:59:05Z mike $".
*/
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-rss-subscription">
+
+<H2 CLASS="title">Añadir subscripción RSS</H2>
+
+<TABLE SUMMARY="Formulario de añadir subscripción RSS">
+<TR>
+<TH CLASS="label">Nombre:</TH>
+<TD COLSPAN="5"><INPUT TYPE="TEXT" NAME="SUBSCRIPTION_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?SUBSCRIPTION_NAME}"><BR>
+<SMALL>(Puede contener cualquier carácter imprimible excepto espacio, "/", "?", y "#")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Cola:</TH>
+<TD COLSPAN="5"><SELECT NAME="PRINTER_URI" SIZE="10"><OPTION VALUE="#ALL#"{?PRINTER_URI=#ALL#? SELECTED:}>Todas las colas</OPTION>{[printer_name]<OPTION VALUE="{printer_uri_supported}"{?PRINTER_URI={printer_uri_supported}? SELECTED:}>{printer_name}</OPTION>}</SELECT></TD>
+</TR>
+<TR VALIGN="TOP">
+<TH CLASS="label">Eventos:</TH>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_CREATED" {?EVENT_JOB_CREATED}>Trabajo creado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_COMPLETED" {?EVENT_JOB_COMPLETED}>Trabajo completado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_STOPPED" {?EVENT_JOB_STOPPED}>Trabajo parado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_CONFIG_CHANGED" {?EVENT_JOB_CONFIG_CHANGED}>Opciones de trabajo cambiadas</TD>
+<TD> </TD>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_STOPPED" {?EVENT_PRINTER_STOPPED}>Cola parada<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_ADDED" {?EVENT_PRINTER_ADDED}>Cola añadida<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_MODIFIED" {?EVENT_PRINTER_MODIFIED}>Cola modificada<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_DELETED" {?EVENT_PRINTER_DELETED}>Cola borrada</TD>
+<TD> </TD>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STARTED" {?EVENT_SERVER_STARTED}>Servidor iniciado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STOPPED" {?EVENT_SERVER_STOPPED}>Servidor parado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_RESTARTED" {?EVENT_SERVER_RESTARTED}>Servidor reiniciado<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_AUDIT" {?EVENT_SERVER_AUDIT}>AuditorÃa de seguridad del servidor</TD>
+</TR>
+<TR>
+<TH CLASS="label">Número máximo de eventos del canal:</TH>
+<TD COLSPAN="5"><INPUT TYPE="TEXT" NAME="MAX_EVENTS" SIZE="4" MAXLENGTH="4" VALUE="{MAX_EVENTS?{MAX_EVENTS}:20}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD COLSPAN="5"><INPUT TYPE="IMAGE" SRC="/images/button-add-rss-subscription.gif" ALT="Añadir subscripción RSS"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<H2 CLASS="title">Impresoras disponibles</H2>
+
+{#device_uri=0?<P>No se encuentran impresoras.</P>
+:<UL>{[device_uri]
+<LI><A HREF="/admin?op=add-printer&{device_options}"><IMG
+SRC="/images/button-add-this-printer.gif" ALT="Añadir esta impresora" CLASS="button"
+ALIGN="MIDDLE"></A>
+{device_make_and_model} ({device_info})</LI>
+}</UL>}
+
--- /dev/null
+<P>Se ha añadido con éxito la subscripción {subscription_name}.</P>
--- /dev/null
+<P>La subscripción #{notify_subscription_id} ha sido cancelada.</P>