Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet f55da0db17 Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.0.3@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
80 arquivos alterados com 26533 adições e 6218 exclusões
+98
Ver Arquivo
@@ -0,0 +1,98 @@
CHANGES.txt - 11/04/1999
------------------------
CHANGES IN CUPS v1.0.2
- The HP-GL/2 filter didn't always scale the output
correctly.
- The HP-GL/2 filter now supports changing the page size
automatically when the "fitplot" option is not used.
- The cancel-job operation was expecting a resource name
of the form "/job/#" instead of "/jobs/#"; this
prevented the cancel and lprm commands from working.
- The backends didn't log pages when files were printed
using the "-oraw" option.
- The authorization code did not work with the Slackware
long shadow password package because its crypt() can
return NULL.
- The chunking code didn't work for reading the response
of a POST request.
- cupsGetPPD() now does authentication as needed.
- The N-up code in the PostScript filter didn't work
with some printers (grestoreall would restore the
default blank page and device settings).
- The N-up code in the PostScript filter didn't scale
the pages to fit within the imageable area of the
page.
- Wasn't doing an fchown() on the request files. This
caused problems when the default root account group
and CUPS group were not the same.
CHANGES IN CUPS v1.0.1
- Documentation updates.
- Fixed a bunch of possible buffer-overflow conditions.
- The scheduler now supports authentication using PAM.
- Updated the Italian message file.
- httpEncode64() didn't add an extra "=" if there was
only one byte in the last three-byte group.
- Now drop any trailing character set from the locale
string (e.g. "en_US.ISO_8859-1" becomes "en_US")
- Fixed "timezone" vs "tm_gmtoff" usage for BSD-based
operating systems.
- Updated IPP security so that "get" operations can be
done from any resource name; this allows the CGIs to
work with printer authentication enabled so long as
authentication isn't turned on for the whole "site".
- The IPP code didn't properly handle the "unsupported"
group; this caused problems with the HP JetDirect since
it doesn't seem to support the "copies" attribute.
- The HTTP chunking code was missing a CR LF pair at the
end of a 0-length chunk.
- The httpSeparate() function didn't handle embedded
usernames and passwords in the URI properly.
- Doing "lpadmin -p printer -E" didn't restart printing
if there were pending jobs.
- The cancel-job operation now requires either a
requesting-user-name attribute or an authenticated
username.
- The add-printer code did not report errors if the
interface script or PPD file could not be renamed.
- Request files are now created without world read
permissions.
- Added a cupsLastError() function to the CUPS API to
retrieve the IPP error code from the last request.
- Options are now case-insensitive.
- The lpq command now provides 10 characters for the
username instead of the original (Berkeley standard)
7.
- The cancel command needed a local CUPS server to work
(or the appropriate ServerName in cupsd.conf)
- The cancel and lprm commands didn't report the IPP
error if the job could not be cancelled.
- The lp and lpr commands didn't intercept SIGTERM to
remove temporary files when printing from stdin.
- The lp and lpr commands didn't report the IPP error if
the job could not be printed.
+24 -8
Ver Arquivo
@@ -38,7 +38,7 @@ DIRS = cups backend berkeley cgi-bin filter man pstoraster \
all:
for dir in $(DIRS); do\
echo Making all in $$dir... ;\
(cd $$dir; make);\
(cd $$dir; $(MAKE));\
done
#
@@ -48,7 +48,7 @@ all:
clean:
for dir in $(DIRS); do\
echo Cleaning in $$dir... ;\
(cd $$dir; make clean);\
(cd $$dir; $(MAKE) clean);\
done
#
@@ -58,18 +58,34 @@ clean:
install:
for dir in $(DIRS); do\
echo Installing in $$dir... ;\
(cd $$dir; make install);\
(cd $$dir; $(MAKE) install);\
done
echo Installing in conf...
(cd conf; make install)
(cd conf; $(MAKE) install)
echo Installing in data...
(cd data; make install)
(cd data; $(MAKE) install)
echo Installing in doc...
(cd doc; make install)
(cd doc; $(MAKE) install)
echo Installing in fonts...
(cd fonts; make install)
(cd fonts; $(MAKE) install)
echo Installing in ppd...
(cd ppd; make install)
(cd ppd; $(MAKE) install)
#
# Make a software distribution...
#
epm:
epm -v cups
rpm:
epm -v -f rpm cups
deb:
epm -v -f deb cups
tardist:
epm -v -f tardist cups
#
# End of "$Id$".
+21 -5
Ver Arquivo
@@ -1,4 +1,4 @@
README - CUPS v1.0.1 - 10/26/1999
README - CUPS v1.0.3 - 12/15/1999
---------------------------------
INTRODUCTION
@@ -46,7 +46,7 @@ the binary distributions from Easy Software Products:
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
- HP-UX 10.20 or higher
- IRIX 5.3 or higher
- Linux 2.0 with glibc2 or higher (tested with RedHat 5.2)
- Linux 2.0 with glibc2 or higher
- Solaris 2.5 or higher (SPARC or Intel)
@@ -54,8 +54,9 @@ INSTALLING CUPS
We are currently distributing CUPS binary distributions in TAR format
with installation and removal scripts generated by our ESP Package
Manager (EPM) software, which is also included with the source
distribution.
Manager (EPM) software, which is available from:
http://www.easysw.com/epm
WARNING: Installing CUPS will overwrite your existing printing system.
Backup files are made by the installation script and restored by the
@@ -74,6 +75,20 @@ After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically.
READING THE DOCUMENTATION
Once you have installed the software you can access the documentation
(and a bunch of other stuff) on-line at:
http://localhost:631
If you're having trouble getting that far, the documentation is located
in the "/usr/share/cups/doc" directory in the binary distributions, and
under the "doc" directory in the source archives.
Please read the documentation before asking questions.
SETTING UP PRINTER QUEUES
CUPS works best with PPD (PostScript Printer Description) files. In a
@@ -150,7 +165,8 @@ REPORTING PROBLEMS
If you have problems, please send an email to cups-support@cups.org.
Include your operating system and version, compiler and version, and
any errors or problems you've run into.
any errors or problems you've run into. If you are running a version
of Linux, be sure to provide the Linux distribution you have, too.
OTHER RESOURCES
+463 -228
Ver Arquivo
@@ -68,16 +68,19 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char password[255], /* Password info */
uri[HTTP_MAX_URI];/* Updated URI without user/pass */
http_status_t status; /* Status of HTTP job */
ipp_status_t ipp_status; /* Status of IPP request */
FILE *fp; /* File to print */
http_t *http; /* HTTP connection */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *job_id; /* job-id attribute */
ipp_attribute_t *copies_sup; /* copies-supported attribute */
cups_lang_t *language; /* Default language */
struct stat fileinfo; /* File statistics */
size_t nbytes, /* Number of bytes written */
tbytes; /* Total bytes written */
char buffer[8192]; /* Output buffer */
int copies; /* Number of copies remaining */
if (argc < 6 || argc > 7)
@@ -89,18 +92,55 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
/*
* If we have 7 arguments, print the file named on the command-line.
* Otherwise, print stdin...
* Otherwise, copy stdin to a temporary file and print the temporary
* file.
*/
if (argc == 6)
fp = stdin;
else if ((fp = fopen(argv[6], "rb")) == NULL)
{
/*
* Copy stdin to a temporary file...
*/
FILE *fp; /* Temporary file */
char buffer[8192]; /* Buffer for copying */
int bytes; /* Number of bytes read */
if ((fp = fopen(cupsTempFile(filename, sizeof(filename)), "w")) == NULL)
{
perror("ERROR: unable to create temporary file");
return (1);
}
while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
if (fwrite(buffer, 1, bytes, fp) < bytes)
{
perror("ERROR: unable to write to temporary file");
fclose(fp);
unlink(filename);
return (1);
}
fclose(fp);
}
else
{
strncpy(filename, argv[6], sizeof(filename) - 1);
filename[sizeof(filename) - 1] = '\0';
}
/*
* Open the print file...
*/
if ((fp = fopen(filename, "rb")) == NULL)
{
perror("ERROR: Unable to open print file");
return (1);
}
else
stat(argv[6], &fileinfo);
stat(filename, &fileinfo);
/*
* Extract the hostname and printer name from the URI...
@@ -112,16 +152,24 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Try connecting to the remote server...
*/
fprintf(stderr, "INFO: Connecting to %s...\n", hostname);
if ((http = httpConnect(hostname, port)) == NULL)
do
{
perror("ERROR: Unable to connect to IPP host");
fprintf(stderr, "INFO: Connecting to %s...\n", hostname);
if (fp != stdin)
fclose(fp);
return (1);
if ((http = httpConnect(hostname, port)) == NULL)
if (errno == ECONNREFUSED)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...",
hostname);
sleep(30);
}
else
{
perror("ERROR: Unable to connect to IPP host");
sleep(30);
}
}
while (http == NULL);
/*
* Build a URI for the printer and fill the standard IPP attributes for
@@ -129,262 +177,451 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* might contain username:password information...
*/
request = ippNew();
request->request.op.operation_id = IPP_PRINT_JOB;
request->request.op.request_id = 1;
snprintf(uri, sizeof(uri), "%s://%s:%d%s", method, hostname, port, resource);
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language != NULL ? language->language : "C");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, argv[2]);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, argv[3]);
/*
* Handle options on the command-line...
* First validate the destination and see if the device supports multiple
* copies. We have to do this because some IPP servers (e.g. HP JetDirect)
* don't support the copies attribute...
*/
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
language = cupsLangDefault();
copies_sup = NULL;
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
if (fp != stdin)
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
for (i = 0; i < num_options; i ++)
do
{
/*
* Skip the "raw" option - handled above...
* Build the IPP request...
*/
if (strcasecmp(options[i].name, "raw") == 0)
continue;
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language != NULL ? language->language : "C");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
* Now fill in the HTTP request stuff...
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
if (username[0])
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
httpEncode64(password, username);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
/*
* String value(s)...
*/
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
}
else
/*
* Boolean value...
*/
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
/*
* Now fill in the HTTP request stuff...
*/
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
if (username[0])
{
httpEncode64(password, username);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
}
if (fp != stdin)
{
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
sprintf(buffer, "%u", ippLength(request));
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
}
else
httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked");
/*
* Do the request...
*/
for (;;)
{
/*
* POST the request, retrying as needed...
*/
if (httpPost(http, resource))
{
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
sleep(10);
httpReconnect(http);
continue;
}
fputs("INFO: POST successful, sending IPP request...\n", stderr);
/*
* Send the IPP request...
* Do the request...
*/
request->state = IPP_IDLE;
if (ippWrite(http, request) == IPP_ERROR)
for (;;)
{
fputs("ERROR: Unable to send IPP request!\n", stderr);
status = HTTP_ERROR;
/*
* POST the request, retrying as needed...
*/
if (httpPost(http, resource))
{
fputs("INFO: Unable to POST get-printer-attributes request; retrying...\n", stderr);
sleep(10);
httpReconnect(http);
continue;
}
fputs("INFO: POST successful, sending IPP request...\n", stderr);
/*
* Send the IPP request...
*/
request->state = IPP_IDLE;
if (ippWrite(http, request) == IPP_ERROR)
{
fputs("ERROR: Unable to send IPP request!\n", stderr);
status = HTTP_ERROR;
break;
}
fputs("INFO: IPP request sent, getting status...\n", stderr);
/*
* Finally, check the status from the HTTP server...
*/
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_OK)
{
response = ippNew();
ippRead(http, response);
ipp_status = response->request.status.status_code;
if (ipp_status > IPP_OK_CONFLICT)
{
if (ipp_status == IPP_PRINTER_BUSY ||
ipp_status == IPP_SERVICE_UNAVAILABLE)
{
fputs("INFO: Printer busy; will retry in 10 seconds...\n", stderr);
sleep(10);
}
else
{
fprintf(stderr, "ERROR: Printer will not accept print file (%x)!\n",
ipp_status);
status = HTTP_ERROR;
}
}
else if ((copies_sup = ippFindAttribute(response, "copies-supported",
IPP_TAG_RANGE)) != NULL)
{
/*
* Has the "copies-supported" attribute - does it have an upper
* bound > 1?
*/
if (copies_sup->values[0].range.upper <= 1)
copies_sup = NULL; /* No */
}
ippDelete(response);
}
else
{
if (status == HTTP_ERROR)
{
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
errno);
status = HTTP_OK;
ipp_status = IPP_PRINTER_BUSY;
}
else
fprintf(stderr, "ERROR: Validate request was not accepted (%d)!\n", status);
}
httpFlush(http);
break;
}
fputs("INFO: IPP request sent, sending print file...\n", stderr);
/*
* Then send the file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
if (status != HTTP_OK)
{
tbytes += nbytes;
fprintf(stderr, "INFO: Sending print file, %uk...\n", tbytes / 1024);
if (fp != stdin)
fclose(fp);
if (httpWrite(http, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
status = HTTP_ERROR;
break;
}
httpClose(http);
return (1);
}
}
while (ipp_status > IPP_OK_CONFLICT);
/*
* See if the printer supports multiple copies...
*/
if (copies_sup)
copies = 1;
else
copies = atoi(argv[4]);
/*
* Then issue the print-job request...
*/
while (copies > 0)
{
/*
* If we are chunking the output from stdin, make sure we end up with
* a 0-length chunk at the end...
* Build the IPP request...
*/
if (fp == stdin)
httpWrite(http, buffer, 0);
request = ippNew();
request->request.op.operation_id = IPP_PRINT_JOB;
request->request.op.request_id = 1;
fputs("INFO: Print file sent; checking status...\n", stderr);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
language != NULL ? language->language : "C");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
fprintf(stderr, "DEBUG: printer-uri = \"%s\"\n", uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, argv[2]);
fprintf(stderr, "DEBUG: requesting-user-name = \"%s\"\n", argv[2]);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
argv[3]);
fprintf(stderr, "DEBUG: job-name = \"%s\"\n", argv[3]);
/*
* Finally, check the status from the HTTP server...
* Handle options on the command-line...
*/
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if (status == HTTP_OK)
{
response = ippNew();
ippRead(http, response);
if (response->request.status.status_code > IPP_OK_CONFLICT)
fprintf(stderr, "ERROR: Print file was not accepted (%04x)!\n",
response->request.status.status_code);
else if ((job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
else
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n",
job_id->values[0].integer);
}
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
{
response = NULL;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
if (status == HTTP_ERROR)
if (copies_sup)
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
errno);
status = HTTP_OK;
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
fprintf(stderr, "ERROR: Print request was not accepted (%d)!\n", status);
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
/*
* String value(s)...
*/
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
}
else
/*
* Boolean value...
*/
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
break;
/*
* Now fill in the HTTP request stuff...
*/
httpClearFields(http);
httpSetField(http, HTTP_FIELD_CONTENT_TYPE, "application/ipp");
if (username[0])
{
httpEncode64(password, username);
httpSetField(http, HTTP_FIELD_AUTHORIZATION, password);
}
sprintf(buffer, "%u", ippLength(request) + (size_t)fileinfo.st_size);
httpSetField(http, HTTP_FIELD_CONTENT_LENGTH, buffer);
/*
* Do the request...
*/
for (;;)
{
/*
* POST the request, retrying as needed...
*/
httpReconnect(http);
if (httpPost(http, resource))
{
fputs("INFO: Unable to POST print request; retrying...\n", stderr);
sleep(10);
continue;
}
fputs("INFO: POST successful, sending IPP request...\n", stderr);
/*
* Send the IPP request...
*/
request->state = IPP_IDLE;
if (ippWrite(http, request) == IPP_ERROR)
{
fputs("ERROR: Unable to send IPP request!\n", stderr);
status = HTTP_ERROR;
break;
}
fputs("INFO: IPP request sent, sending print file...\n", stderr);
/*
* Then send the file...
*/
rewind(fp);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
tbytes += nbytes;
fprintf(stderr, "INFO: Sending print file, %uk...\n", tbytes / 1024);
if (httpWrite(http, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
status = HTTP_ERROR;
break;
}
}
fputs("INFO: Print file sent; checking status...\n", stderr);
/*
* Finally, check the status from the HTTP server...
*/
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_OK)
{
response = ippNew();
ippRead(http, response);
if ((ipp_status = response->request.status.status_code) > IPP_OK_CONFLICT)
{
if (ipp_status == IPP_SERVICE_UNAVAILABLE ||
ipp_status == IPP_PRINTER_BUSY)
{
fputs("INFO: Printer is busy; retrying print job...\n", stderr);
sleep(10);
}
else
fprintf(stderr, "ERROR: Print file was not accepted (%04x)!\n",
response->request.status.status_code);
}
else if ((job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) == NULL)
fputs("INFO: Print file accepted - job ID unknown.\n", stderr);
else
fprintf(stderr, "INFO: Print file accepted - job ID %d.\n",
job_id->values[0].integer);
}
else
{
response = NULL;
ipp_status = IPP_PRINTER_BUSY;
if (status == HTTP_ERROR)
{
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
errno);
status = HTTP_OK;
}
else
fprintf(stderr, "ERROR: Print request was not accepted (%d)!\n", status);
}
httpFlush(http);
break;
}
if (request != NULL)
ippDelete(request);
if (response != NULL)
ippDelete(response);
if (ipp_status <= IPP_OK_CONFLICT)
{
fprintf(stderr, "PAGE: 1 %d\n", copies_sup ? atoi(argv[4]) : 1);
copies --;
}
}
/*
@@ -392,17 +629,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*/
httpClose(http);
if (request != NULL)
ippDelete(request);
if (response != NULL)
ippDelete(response);
/*
* Close the print file as needed...
* Close and remove the temporary file if necessary...
*/
if (fp != stdin)
fclose(fp);
fclose(fp);
if (argc < 7)
unlink(filename);
/*
* Return the queue status...
+16 -5
Ver Arquivo
@@ -140,8 +140,17 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Queue the job...
*/
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, atoi(argv[4]) /* copies */);
if (argc > 6)
{
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, atoi(argv[4]) /* copies */);
if (!status)
fprintf(stderr, "PAGE: 1 %d\n", atoi(argv[4]));
}
else
status = lpd_queue(hostname, resource + 1, filename,
argv[2] /* user */, 1);
/*
* Remove the temporary file if necessary...
@@ -253,8 +262,9 @@ lpd_queue(char *hostname, /* I - Host to connect to */
{
if ((fd = rresvport(&port)) < 0)
{
perror("ERROR: Unable to connect to printer");
return (1);
perror("ERROR: Unable to reserve port");
sleep(30);
continue;
}
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
@@ -278,7 +288,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
else
{
perror("ERROR: Unable to connect to printer");
return (1);
sleep(30);
}
}
else
@@ -316,6 +326,7 @@ lpd_queue(char *hostname, /* I - Host to connect to */
while (copies > 0)
{
snprintf(cptr, sizeof(control) - (cptr - control), "ldfA%03.3d%s\n",
getpid() % 1000, localhost);
cptr += strlen(cptr);
+30 -13
Ver Arquivo
@@ -63,6 +63,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*options; /* Pointer to options */
int port; /* Port number (not used) */
FILE *fp; /* Print file */
int copies; /* Number of copies to print */
int fd; /* Parallel device */
int error; /* Error code (if any) */
size_t nbytes, /* Number of bytes written */
@@ -83,7 +84,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*/
if (argc == 6)
fp = stdin;
{
fp = stdin;
copies = 1;
}
else
{
/*
@@ -95,6 +99,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
perror("ERROR: unable to open print file");
return (1);
}
copies = atoi(argv[4]);
}
/*
@@ -143,23 +149,34 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Finally, send the print file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
while (copies > 0)
{
/*
* Write the print data to the printer...
*/
copies --;
if (write(fd, buffer, nbytes) < nbytes)
if (fp != stdin)
{
perror("ERROR: Unable to send print file to printer");
break;
fputs("PAGE: 1 1\n", stderr);
rewind(fp);
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
if (write(fd, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
break;
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
}
/*
+30 -13
Ver Arquivo
@@ -66,6 +66,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*ptr; /* Pointer into name or value */
int port; /* Port number (not used) */
FILE *fp; /* Print file */
int copies; /* Number of copies to print */
int fd; /* Parallel device */
int error; /* Error code (if any) */
size_t nbytes, /* Number of bytes written */
@@ -86,7 +87,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*/
if (argc == 6)
fp = stdin;
{
fp = stdin;
copies = 1;
}
else
{
/*
@@ -98,6 +102,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
perror("ERROR: unable to open print file");
return (1);
}
copies = atoi(argv[4]);
}
/*
@@ -261,23 +267,34 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Finally, send the print file...
*/
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
while (copies > 0)
{
/*
* Write the print data to the printer...
*/
copies --;
if (write(fd, buffer, nbytes) < nbytes)
if (fp != stdin)
{
perror("ERROR: Unable to send print file to printer");
break;
fputs("PAGE: 1 1\n", stderr);
rewind(fp);
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
if (write(fd, buffer, nbytes) < nbytes)
{
perror("ERROR: Unable to send print file to printer");
break;
}
else
tbytes += nbytes;
if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
}
/*
+87 -65
Ver Arquivo
@@ -66,6 +66,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
username[255], /* Username info (not used) */
resource[1024]; /* Resource info (not used) */
FILE *fp; /* Print file */
int copies; /* Number of copies to print */
int port; /* Port number */
int fd; /* AppSocket */
int error; /* Error code (if any) */
@@ -93,7 +94,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
*/
if (argc == 6)
fp = stdin;
{
fp = stdin;
copies = 1;
}
else
{
/*
@@ -105,6 +109,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
perror("ERROR: unable to open print file");
return (1);
}
copies = atoi(argv[4]);
}
/*
@@ -135,91 +141,107 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
addr.sin_family = hostaddr->h_addrtype;
addr.sin_port = htons(port);
for (;;)
while (copies > 0)
{
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
for (;;)
{
perror("ERROR: Unable to connect to printer");
return (1);
}
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
error = errno;
close(fd);
fd = -1;
if (error == ECONNREFUSED)
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
hostname);
sleep(30);
perror("ERROR: Unable to create socket");
return (1);
}
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
error = errno;
close(fd);
fd = -1;
if (error == ECONNREFUSED)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
hostname);
sleep(30);
}
else
{
perror("ERROR: Unable to connect to printer");
sleep(30);
}
}
else
{
perror("ERROR: Unable to connect to printer");
return (1);
}
}
else
break;
}
/*
* Finally, send the print file...
*/
fputs("INFO: Connected to host, sending print job...\n", stderr);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Write the print data to the printer...
*/
tbytes += nbytes;
bufptr = buffer;
while (nbytes > 0)
{
if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
{
perror("ERROR: Unable to send print file to printer");
break;
}
nbytes -= wbytes;
bufptr += wbytes;
}
/*
* Check for possible data coming back from the printer...
* Finally, send the print file...
*/
timeout.tv_sec = 0;
timeout.tv_usec = 0;
FD_ZERO(&input);
FD_SET(fd, &input);
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
copies --;
if (fp != stdin)
{
fputs("PAGE: 1 1\n", stderr);
rewind(fp);
}
fputs("INFO: Connected to host, sending print job...\n", stderr);
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
{
/*
* Grab the data coming back and spit it out to stderr...
* Write the print data to the printer...
*/
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
nbytes);
tbytes += nbytes;
bufptr = buffer;
while (nbytes > 0)
{
if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
{
perror("ERROR: Unable to send print file to printer");
break;
}
nbytes -= wbytes;
bufptr += wbytes;
}
/*
* Check for possible data coming back from the printer...
*/
timeout.tv_sec = 0;
timeout.tv_usec = 0;
FD_ZERO(&input);
FD_SET(fd, &input);
if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
{
/*
* Grab the data coming back and spit it out to stderr...
*/
if ((nbytes = recv(fd, buffer, sizeof(buffer), 0)) > 0)
fprintf(stderr, "INFO: Received %u bytes of back-channel data!\n",
nbytes);
}
else if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
}
else if (argc > 6)
fprintf(stderr, "INFO: Sending print file, %u bytes...\n", tbytes);
/*
* Close the socket connection...
*/
close(fd);
}
/*
* Close the socket connection and input file and return...
* Close the input file and return...
*/
close(fd);
if (fp != stdin)
fclose(fp);
+2 -2
Ver Arquivo
@@ -109,8 +109,8 @@ main(int argc, /* I - Number of command-line arguments */
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
#else
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
+2 -2
Ver Arquivo
@@ -109,8 +109,8 @@ main(int argc, /* I - Number of command-line arguments */
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
#else
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
+2 -2
Ver Arquivo
@@ -109,8 +109,8 @@ main(int argc, /* I - Number of command-line arguments */
puts("<AREA SHAPE=\"RECT\" COORDS=\"88,10,158,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"170,10,210,30\" HREF=\"/jobs\" ALT=\"Current Jobs Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"222,10,354,30\" HREF=\"/documentation.html\" ALT=\"Read CUPS Documentation On-Line\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/printpro/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/printpro/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"366,10,442,30\" HREF=\"http://www.easysw.com/software.html\" ALT=\"Download the Current ESP Print Pro Software\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"454,10,530,30\" HREF=\"http://www.easysw.com/support.html\" ALT=\"Get Tech Support for Current ESP Print Pro\">");
#else
puts("<AREA SHAPE=\"RECT\" COORDS=\"10,10,85,30\" HREF=\"/printers\" ALT=\"Current Printer Status\">");
puts("<AREA SHAPE=\"RECT\" COORDS=\"95,10,175,30\" HREF=\"/classes\" ALT=\"Current Printer Classes Status\">");
+5 -2
Ver Arquivo
@@ -50,18 +50,21 @@ clean:
install:
-$(MKDIR) $(SERVERROOT)/conf
for file in $(KEEP); do \
if test -e $(SERVERROOT)/conf/$$file ; then \
if test -r $(SERVERROOT)/conf/$$file ; then \
$(CP) $$file $(SERVERROOT)/conf/$$file.N ; \
else \
$(CP) $$file $(SERVERROOT)/conf ; \
fi ; \
done
for file in $(REPLACE); do \
if test -e $(SERVERROOT)/conf/$$file ; then \
if test -r $(SERVERROOT)/conf/$$file ; then \
$(MV) $(SERVERROOT)/conf/$$file $(SERVERROOT)/conf/$$file.O ; \
fi ; \
$(CP) $$file $(SERVERROOT)/conf ; \
done
if test -r /etc/printcap -a ! -r /etc/printcap.O; then \
$(CP) /etc/printcap /etc/printcap.O ; \
fi
#
# End of "$Id$".
+9 -1
Ver Arquivo
@@ -28,7 +28,7 @@
* Version of software...
*/
#define CUPS_SVERSION "CUPS v1.0.1"
#define CUPS_SVERSION "CUPS v1.0.3"
/*
* Where are files stored?
@@ -62,6 +62,14 @@
#undef HAVE_SYS_NDIR_H
#undef HAVE_NDIR_H
/*
* Do we have PAM stuff?
*/
#ifndef HAVE_LIBPAM
#define HAVE_LIBPAM 0
#endif /* !HAVE_LIBPAM */
/*
* Do we have <shadow.h>?
*/
+25 -8
Ver Arquivo
@@ -42,7 +42,7 @@ AC_SUBST(OPTIM)
PICFLAG=1
CFLAGS="${CFLAGS:=}"
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[if eval "test x$enable_debug = xyes"; then
OPTIM="-g "
fi])
AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [default=yes]])
@@ -88,6 +88,8 @@ else
DSO=":"
fi
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
dnl Checks for programs...
AC_PROG_AWK
AC_PROG_CC
@@ -133,6 +135,10 @@ dnl Check for libraries...
AC_CHECK_LIB(c,crypt,LIBS="$LIBS",AC_CHECK_LIB(crypt,crypt))
AC_CHECK_HEADER(crypt.h, AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_LIB(sec,getspent)
if test "$enable_pam" != "no"; then
AC_CHECK_LIB(dl,dlopen)
AC_CHECK_LIB(pam,pam_start)
fi
NETLIBS=""
AC_SUBST(NETLIBS)
@@ -149,6 +155,11 @@ else
echo "Not using -lnsl since you are running IRIX."
fi)
dnl Save the current libraries since we don't want the image libraries
dnl included with every program...
SAVELIBS="$LIBS"
dnl Check for image libraries...
LIBJPEG=""
LIBPNG=""
LIBTIFF=""
@@ -159,10 +170,18 @@ AC_SUBST(LIBPNG)
AC_SUBST(LIBTIFF)
AC_SUBST(LIBZ)
dnl AC_CHECK_HEADER(jpeglib.h,
AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
AC_DEFINE(HAVE_LIBJPEG)
LIBJPEG="-ljpeg")
LIBJPEG="-ljpeg"
LIBS="$LIBS -ljpeg")
AC_CHECK_LIB(z, deflate,
AC_DEFINE(HAVE_LIBZ)
LIBZ="-lz"
LIBS="$LIBS -lz")
dnl PNG library uses math library functions...
AC_CHECK_LIB(m, pow)
dnl AC_CHECK_HEADER(png.h,
AC_CHECK_LIB(png, png_read_info,
@@ -174,10 +193,8 @@ AC_CHECK_LIB(tiff, TIFFReadScanline,
AC_DEFINE(HAVE_LIBTIFF)
LIBTIFF="-ltiff")
dnl AC_CHECK_HEADER(zlib.h,
AC_CHECK_LIB(z, deflateInit,
AC_DEFINE(HAVE_LIBZ)
LIBZ="-lz")
dnl Restore original LIBS settings...
LIBS="$SAVELIBS"
dnl Checks for header files.
AC_HEADER_STDC
@@ -200,7 +217,7 @@ AC_CHECK_FUNCS(waitpid)
AC_CHECK_FUNCS(wait3)
dnl Update compiler options...
if test -n "$GXX"; then
if test -n "$GXX" -o $uname = Linux; then
if test -z "$OPTIM"; then
OPTIM="-O2"
fi
+319
Ver Arquivo
@@ -0,0 +1,319 @@
#
# "$Id: cups.list 823 1999-12-15 21:16:02Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
#
# EPM can be found in the "epm" subdirectory of this distribution.
# Please report problems and fixes to "epm@easysw.com".
#
# Copyright 1997-1999 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
# copyright law. Distribution and use rights are outlined in the file
# "LICENSE.txt" which should have been included with this file. If this
# file is missing or damaged please contact Easy Software Products
# at:
#
# Attn: CUPS Licensing Information
# Easy Software Products
# 44141 Airport View Drive, Suite 204
# Hollywood, Maryland 20636-3111 USA
#
# Voice: (301) 373-9603
# EMail: cups-info@cups.org
# WWW: http://www.cups.org
#
%product Common UNIX Printing System
%copyright 1993-1999 by Easy Software Products, All Rights Reserved.
%vendor Easy Software Products
%license LICENSE.cups
%readme README.cups
%version 1.0.3
%incompat printpro
%system all
# Server files
f 0555 root sys /var/cups/backend/ipp backend/ipp
l 0555 root sys /var/cups/backend/http ipp
f 4550 root sys /var/cups/backend/lpd backend/lpd
f 0555 root sys /var/cups/backend/parallel backend/parallel
f 0555 root sys /var/cups/backend/serial backend/serial
f 0555 root sys /var/cups/backend/socket backend/socket
f 0500 root sys /usr/sbin/cupsd scheduler/cupsd
f 0555 root sys /var/cups/cgi-bin/classes.cgi cgi-bin/classes.cgi
f 0555 root sys /var/cups/cgi-bin/jobs.cgi cgi-bin/jobs.cgi
f 0555 root sys /var/cups/cgi-bin/printers.cgi cgi-bin/printers.cgi
f 0555 root sys /var/cups/filter/pstoraster pstoraster/pstoraster
l 0555 root sys /var/cups/filter/pdftops pstoraster
f 0555 root sys /var/cups/filter/imagetops filter/imagetops
f 0555 root sys /var/cups/filter/pstops filter/pstops
f 0555 root sys /var/cups/filter/texttops filter/texttops
f 0555 root sys /var/cups/filter/rastertohp filter/rastertohp
f 0555 root sys /var/cups/filter/hpgltops filter/hpgltops
f 0555 root sys /var/cups/filter/imagetoraster filter/imagetoraster
# Admin commands
l 0555 root sys /usr/bin/disable /usr/sbin/accept
l 0555 root sys /usr/bin/enable /usr/sbin/accept
l 0555 root sys /usr/lib/accept /usr/sbin/accept
l 0555 root sys /usr/lib/lpadmin /usr/sbin/lpadmin
l 0555 root sys /usr/lib/reject accept
f 0555 root sys /usr/sbin/accept systemv/accept
f 0555 root sys /usr/sbin/esplicense license/esplicense
f 0555 root sys /usr/sbin/lpadmin systemv/lpadmin
f 0555 root sys /usr/sbin/lpc berkeley/lpc
l 0555 root sys /usr/sbin/reject accept
# User commands
f 0555 root sys /usr/bin/cancel systemv/cancel
f 0555 root sys /usr/bin/lp systemv/lp
f 0555 root sys /usr/bin/lpq berkeley/lpq
f 0555 root sys /usr/bin/lpr berkeley/lpr
f 0555 root sys /usr/bin/lprm berkeley/lprm
f 0555 root sys /usr/bin/lpstat systemv/lpstat
f 0555 root sys /usr/bin/lpwin gui/lpwin
# DSOs
%system hpux
f 0555 root sys /usr/lib/libcups.sl.1 cups/libcups.sl.1
l 0555 root sys /usr/lib/libcups.sl libcups.sl.1
f 0555 root sys /usr/lib/libcupsimage.sl.1 filter/libcupsimage.sl.1
l 0555 root sys /usr/lib/libcupsimage.sl libcupsimage.sl.1
%system irix-6.5
f 0555 root sys /usr/lib32/libcups.so.1 cups/libcups.so.1
l 0555 root sys /usr/lib32/libcups.so libcups.so.1
f 0555 root sys /usr/lib32/libcupsimage.so.1 filter/libcupsimage.so.1
l 0555 root sys /usr/lib32/libcupsimage.so libcupsimage.so.1
%system !irix-6.5 !hpux
f 0555 root sys /usr/lib/libcups.so.1 cups/libcups.so.1
l 0555 root sys /usr/lib/libcups.so libcups.so.1
f 0555 root sys /usr/lib/libcupsimage.so.1 filter/libcupsimage.so.1
l 0555 root sys /usr/lib/libcupsimage.so libcupsimage.so.1
%system all
# Directories
d 0755 root sys /var/cups/interfaces
d 0755 root sys /var/cups/logs
d 0755 root sys /var/cups/ppd
d 0755 root sys /var/cups/requests
# Data files
f 0444 root sys /usr/lib/locale/C/cups_C locale/C/cups_C
f 0444 root sys /usr/lib/locale/de/cups_de locale/de/cups_de
f 0444 root sys /usr/lib/locale/en/cups_en locale/en/cups_en
f 0444 root sys /usr/lib/locale/es/cups_es locale/es/cups_es
f 0444 root sys /usr/lib/locale/fr/cups_fr locale/fr/cups_fr
f 0444 root sys /usr/lib/locale/it/cups_it locale/it/cups_it
f 0444 root sys /usr/share/cups/data/8859-1 data/8859-1
f 0444 root sys /usr/share/cups/data/8859-14 data/8859-14
f 0444 root sys /usr/share/cups/data/8859-15 data/8859-15
f 0444 root sys /usr/share/cups/data/8859-2 data/8859-2
f 0444 root sys /usr/share/cups/data/8859-3 data/8859-3
f 0444 root sys /usr/share/cups/data/8859-4 data/8859-4
f 0444 root sys /usr/share/cups/data/8859-5 data/8859-5
f 0444 root sys /usr/share/cups/data/8859-6 data/8859-6
f 0444 root sys /usr/share/cups/data/8859-7 data/8859-7
f 0444 root sys /usr/share/cups/data/8859-8 data/8859-8
f 0444 root sys /usr/share/cups/data/8859-9 data/8859-9
f 0444 root sys /usr/share/cups/data/HPGLprolog data/HPGLprolog
f 0444 root sys /usr/share/cups/data/psglyphs data/psglyphs
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Book fonts/AvantGarde-Book
f 0444 root sys /usr/share/cups/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
f 0444 root sys /usr/share/cups/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
f 0444 root sys /usr/share/cups/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
f 0444 root sys /usr/share/cups/fonts/Bookman-Demi fonts/Bookman-Demi
f 0444 root sys /usr/share/cups/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
f 0444 root sys /usr/share/cups/fonts/Bookman-Light fonts/Bookman-Light
f 0444 root sys /usr/share/cups/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
f 0444 root sys /usr/share/cups/fonts/Courier fonts/Courier
f 0444 root sys /usr/share/cups/fonts/Courier-Bold fonts/Courier-Bold
f 0444 root sys /usr/share/cups/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Courier-Oblique fonts/Courier-Oblique
f 0444 root sys /usr/share/cups/fonts/Helvetica fonts/Helvetica
f 0444 root sys /usr/share/cups/fonts/Helvetica-Bold fonts/Helvetica-Bold
f 0444 root sys /usr/share/cups/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
f 0444 root sys /usr/share/cups/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
f 0444 root sys /usr/share/cups/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
f 0444 root sys /usr/share/cups/fonts/Palatino-Bold fonts/Palatino-Bold
f 0444 root sys /usr/share/cups/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Palatino-Italic fonts/Palatino-Italic
f 0444 root sys /usr/share/cups/fonts/Palatino-Roman fonts/Palatino-Roman
f 0444 root sys /usr/share/cups/fonts/Symbol fonts/Symbol
f 0444 root sys /usr/share/cups/fonts/Times-Bold fonts/Times-Bold
f 0444 root sys /usr/share/cups/fonts/Times-BoldItalic fonts/Times-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Times-Italic fonts/Times-Italic
f 0444 root sys /usr/share/cups/fonts/Times-Roman fonts/Times-Roman
f 0444 root sys /usr/share/cups/fonts/Utopia-Bold fonts/Utopia-Bold
f 0444 root sys /usr/share/cups/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
f 0444 root sys /usr/share/cups/fonts/Utopia-Italic fonts/Utopia-Italic
f 0444 root sys /usr/share/cups/fonts/Utopia-Regular fonts/Utopia-Regular
f 0444 root sys /usr/share/cups/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
f 0444 root sys /usr/share/cups/fonts/ZapfDingbats fonts/ZapfDingbats
f 0444 root sys /usr/share/cups/pstoraster/Fontmap pstoraster/Fontmap
f 0444 root sys /usr/share/cups/pstoraster/gs_l2img.ps pstoraster/gs_l2img.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
f 0444 root sys /usr/share/cups/pstoraster/pfbtogs.ps pstoraster/pfbtogs.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf_e.ps pstoraster/gs_pdf_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdf.ps pstoraster/gs_pdf.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_sec.ps pstoraster/pdf_sec.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_res.ps pstoraster/gs_res.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_base.ps pstoraster/pdf_base.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_2ps.ps pstoraster/pdf_2ps.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_init.ps pstoraster/gs_init.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_draw.ps pstoraster/pdf_draw.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_font.ps pstoraster/pdf_font.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_pdfwr.ps pstoraster/gs_pdfwr.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
f 0444 root sys /usr/share/cups/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
f 0444 root sys /usr/share/cups/pstoraster/pdf_main.ps pstoraster/pdf_main.ps
f 0444 root sys /usr/share/cups/model/deskjet.ppd ppd/deskjet.ppd
f 0444 root sys /usr/share/cups/model/laserjet.ppd ppd/laserjet.ppd
# Config files
c 0644 root sys /var/cups/conf/classes.conf conf/classes.conf
c 0644 root sys /var/cups/conf/cupsd.conf conf/cupsd.conf
f 0644 root sys /var/cups/conf/mime.convs conf/mime.convs
f 0644 root sys /var/cups/conf/mime.types conf/mime.types
c 0644 root sys /var/cups/conf/printers.conf conf/printers.conf
# Dummy printcap file for Digital UNIX and Linux...
%system dunix linux
%format !rpm
f 0644 root sys /etc/printcap conf/printcap
%system all
%format all
# Developer files
f 0444 root sys /usr/include/cups/cups.h cups/cups.h
f 0444 root sys /usr/include/cups/http.h cups/http.h
f 0444 root sys /usr/include/cups/ipp.h cups/ipp.h
f 0444 root sys /usr/include/cups/language.h cups/language.h
f 0444 root sys /usr/include/cups/mime.h cups/mime.h
f 0444 root sys /usr/include/cups/ppd.h cups/ppd.h
f 0444 root sys /usr/include/cups/raster.h cups/raster.h
%system irix-6.5
f 0444 root sys /usr/lib32/libcups.a cups/libcups.a
%system !irix-6.5
f 0444 root sys /usr/lib/libcups.a cups/libcups.a
%system all
# Documentation files
f 0444 root sys /usr/share/cups/doc/cmp.html doc/cmp.html
f 0444 root sys /usr/share/cups/doc/cmp.pdf doc/cmp.pdf
f 0444 root sys /usr/share/cups/doc/cupsdoc.css doc/cupsdoc.css
f 0444 root sys /usr/share/cups/doc/cups.css doc/cups.css
f 0444 root sys /usr/share/cups/doc/documentation.html doc/documentation.html
f 0444 root sys /usr/share/cups/doc/idd.html doc/idd.html
f 0444 root sys /usr/share/cups/doc/idd.pdf doc/idd.pdf
f 0444 root sys /usr/share/cups/doc/images/classes.gif doc/images/classes.gif
f 0444 root sys /usr/share/cups/doc/images/cups-bar.gif doc/images/cups-bar.gif
f 0444 root sys /usr/share/cups/doc/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
f 0444 root sys /usr/share/cups/doc/images/cups-large.gif doc/images/cups-large.gif
f 0444 root sys /usr/share/cups/doc/images/cups-medium.gif doc/images/cups-medium.gif
f 0444 root sys /usr/share/cups/doc/images/cups-small.gif doc/images/cups-small.gif
f 0444 root sys /usr/share/cups/doc/images/logo.gif doc/images/logo.gif
f 0444 root sys /usr/share/cups/doc/images/navbar.gif doc/images/navbar.gif
f 0444 root sys /usr/share/cups/doc/images/printer-idle.gif doc/images/printer-idle.gif
f 0444 root sys /usr/share/cups/doc/images/printer-processing.gif doc/images/printer-processing.gif
f 0444 root sys /usr/share/cups/doc/images/printer-stopped.gif doc/images/printer-stopped.gif
f 0444 root sys /usr/share/cups/doc/index.html doc/index.html
f 0444 root sys /usr/share/cups/doc/overview.html doc/overview.html
f 0444 root sys /usr/share/cups/doc/overview.pdf doc/overview.pdf
f 0444 root sys /usr/share/cups/doc/sam.html doc/sam.html
f 0444 root sys /usr/share/cups/doc/sam.pdf doc/sam.pdf
f 0444 root sys /usr/share/cups/doc/sdd.html doc/sdd.html
f 0444 root sys /usr/share/cups/doc/sdd.pdf doc/sdd.pdf
f 0444 root sys /usr/share/cups/doc/spm.html doc/spm.html
f 0444 root sys /usr/share/cups/doc/spm.pdf doc/spm.pdf
f 0444 root sys /usr/share/cups/doc/ssr.html doc/ssr.html
f 0444 root sys /usr/share/cups/doc/ssr.pdf doc/ssr.pdf
f 0444 root sys /usr/share/cups/doc/sum.html doc/sum.html
f 0444 root sys /usr/share/cups/doc/sum.pdf doc/sum.pdf
# Man pages
%system irix
f 0444 root sys /usr/share/catman/a_man/cat1/accept.z man/accept.z
l 0444 root sys /usr/share/catman/a_man/cat1/reject.z accept.z
f 0444 root sys /usr/share/catman/u_man/cat1/backend.z man/backend.z
f 0444 root sys /usr/share/catman/u_man/cat5/classes.conf.z man/classes.conf.z
f 0444 root sys /usr/share/catman/u_man/cat5/cupsd.conf.z man/cupsd.conf.z
f 0444 root sys /usr/share/catman/a_man/cat1/cupsd.z man/cupsd.z
f 0444 root sys /usr/share/catman/a_man/cat1/enable.z man/enable.z
l 0444 root sys /usr/share/catman/a_man/cat1/disable.z enable.z
f 0444 root sys /usr/share/catman/u_man/cat1/filter.z man/filter.z
f 0444 root sys /usr/share/catman/a_man/cat1/lpadmin.z man/lpadmin.z
f 0444 root sys /usr/share/catman/a_man/cat1/lpc.z man/lpc.z
f 0444 root sys /usr/share/catman/u_man/cat1/lpq.z man/lpq.z
f 0444 root sys /usr/share/catman/u_man/cat1/lprm.z man/lprm.z
f 0444 root sys /usr/share/catman/u_man/cat1/lpr.z man/lpr.z
f 0444 root sys /usr/share/catman/u_man/cat1/lpstat.z man/lpstat.z
f 0444 root sys /usr/share/catman/u_man/cat1/lp.z man/lp.z
l 0444 root sys /usr/share/catman/u_man/cat1/cancel.z lp.z
f 0444 root sys /usr/share/catman/u_man/cat5/mime.convs.z man/mime.convs.z
f 0444 root sys /usr/share/catman/u_man/cat5/mime.types.z man/mime.types.z
f 0444 root sys /usr/share/catman/u_man/cat5/printers.conf.z man/printers.conf.z
%system !irix
f 0444 root sys /usr/man/man8/accept.8 man/accept.8
l 0444 root sys /usr/man/man8/reject.8 accept.8
f 0444 root sys /usr/man/man1/backend.1 man/backend.1
f 0444 root sys /usr/man/man1/classes.conf.5 man/classes.conf.5
f 0444 root sys /usr/man/man8/cupsd.8 man/cupsd.8
f 0444 root sys /usr/man/man5/cupsd.conf.5 man/cupsd.conf.5
f 0444 root sys /usr/man/man8/enable.8 man/enable.8
l 0444 root sys /usr/man/man8/disable.8 enable.8
f 0444 root sys /usr/man/man1/filter.1 man/filter.1
f 0444 root sys /usr/man/man8/lpadmin.8 man/lpadmin.8
f 0444 root sys /usr/man/man8/lpc.8 man/lpc.8
f 0444 root sys /usr/man/man1/lpq.1 man/lpq.1
f 0444 root sys /usr/man/man1/lprm.1 man/lprm.1
f 0444 root sys /usr/man/man1/lpr.1 man/lpr.1
f 0444 root sys /usr/man/man1/lpstat.1 man/lpstat.1
f 0444 root sys /usr/man/man1/lp.1 man/lp.1
l 0444 root sys /usr/man/man1/cancel.1 lp.1
f 0444 root sys /usr/man/man5/mime.convs.5 man/mime.convs.5
f 0444 root sys /usr/man/man5/mime.types.5 man/mime.types.5
f 0444 root sys /usr/man/man5/printers.conf.5 man/printers.conf.5
# Startup script
%system all
i 0555 root sys cups cups.sh
#
# End of "$Id: cups.list 823 1999-12-15 21:16:02Z mike $".
#
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cups.spec 755 1999-10-26 20:40:13Z mike $"
# "$Id: cups.spec 775 1999-11-04 13:35:01Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
@@ -26,11 +26,11 @@
Summary: Common Unix Printing System
Name: cups
Version: 1.0.1
Version: 1.0.2
Release: 0
Copyright: GPL
Group: System Environment/Daemons
Source: ftp://ftp.easysw.com/pub/cups/1.0.1/cups-1.0.1-source.tar.gz
Source: ftp://ftp.easysw.com/pub/cups/1.0.2/cups-1.0.2-source.tar.gz
Url: http://www.cups.org
Packager: Michael Sweet <mike@easysw.com>
Vendor: Easy Software Products
@@ -130,5 +130,5 @@ rm -rf $RPM_BUILD_ROOT
/usr/include/cups/*
#
# End of "$Id: cups.spec 755 1999-10-26 20:40:13Z mike $".
# End of "$Id: cups.spec 775 1999-11-04 13:35:01Z mike $".
#
+1
Ver Arquivo
@@ -68,6 +68,7 @@ install: all
-$(MKDIR) $(LIBDIR)
$(CP) $(LIBCUPS) $(LIBDIR)
if test $(LIBCUPS) != "libcups.a"; then \
$(RM) `basename $(LIBCUPS) .1`; \
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .1`; \
fi
+17 -16
Ver Arquivo
@@ -687,12 +687,15 @@ httpRead(http_t *http, /* I - HTTP data */
return (0);
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
http->data_remaining <= 0 &&
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
http->data_remaining <= 0)
{
DEBUG_puts("httpRead: Getting chunk length...");
if (httpGets(len, sizeof(len), http) == NULL)
{
DEBUG_puts("httpRead: Could not get length!");
return (0);
}
http->data_remaining = strtol(len, NULL, 16);
}
@@ -706,9 +709,7 @@ httpRead(http_t *http, /* I - HTTP data */
* data, go idle...
*/
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
httpGets(len, sizeof(len), http);
if (http->state == HTTP_POST_RECV)
@@ -750,9 +751,7 @@ httpRead(http_t *http, /* I - HTTP data */
if (http->data_remaining == 0)
{
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
httpGets(len, sizeof(len), http);
if (http->data_encoding != HTTP_ENCODE_CHUNKED)
@@ -787,9 +786,7 @@ httpWrite(http_t *http, /* I - HTTP data */
http->activity = time(NULL);
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
{
if (httpPrintf(http, "%x\r\n", length) < 0)
return (-1);
@@ -834,9 +831,7 @@ httpWrite(http_t *http, /* I - HTTP data */
http->data_remaining -= bytes;
}
if (http->data_encoding == HTTP_ENCODE_CHUNKED &&
(http->state == HTTP_GET_SEND || http->state == HTTP_POST_RECV ||
http->state == HTTP_POST_SEND || http->state == HTTP_PUT_RECV))
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
if (httpPrintf(http, "\r\n") < 0)
return (-1);
@@ -1358,14 +1353,18 @@ httpEncode64(char *out, /* I - String to write to */
int /* O - Content length */
httpGetLength(http_t *http) /* I - HTTP data */
{
DEBUG_printf(("httpGetLength(%08x)\n", http));
if (strcasecmp(http->fields[HTTP_FIELD_TRANSFER_ENCODING], "chunked") == 0)
{
DEBUG_puts("httpGetLength: chunked request!");
http->data_encoding = HTTP_ENCODE_CHUNKED;
http->data_remaining = 0;
}
else
{
http->data_encoding = HTTP_ENCODE_LENGTH;
http->data_encoding = HTTP_ENCODE_LENGTH;
/*
* The following is a hack for HTTP servers that don't send a
@@ -1379,6 +1378,8 @@ httpGetLength(http_t *http) /* I - HTTP data */
http->data_remaining = 2147483647;
else
http->data_remaining = atoi(http->fields[HTTP_FIELD_CONTENT_LENGTH]);
DEBUG_printf(("httpGetLength: content_length = %d\n", http->data_remaining));
}
return (http->data_remaining);
+44 -16
Ver Arquivo
@@ -367,6 +367,7 @@ cupsGetClasses(char ***classes) /* O - Classes */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char **temp; /* Temporary pointer */
/*
@@ -392,10 +393,10 @@ cupsGetClasses(char ***classes) /* O - Classes */
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
@@ -404,26 +405,39 @@ cupsGetClasses(char ***classes) /* O - Classes */
n = 0;
*classes = NULL;
if ((response = cupsDoRequest(cups_server, request, "/classes/")) != NULL)
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
{
last_error = response->request.status.status_code;
for (attr = response->attrs; attr != NULL; attr = attr->next)
if (strcasecmp(attr->name, "printer-name") == 0 &&
if (attr->name != NULL &&
strcasecmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
{
if (n == 0)
*classes = malloc(sizeof(char *));
temp = malloc(sizeof(char *));
else
*classes = realloc(*classes, sizeof(char *) * (n + 1));
temp = realloc(*classes, sizeof(char *) * (n + 1));
if (*classes == NULL)
if (temp == NULL)
{
/*
* Ran out of memory!
*/
while (n > 0)
{
n --;
free((*classes)[n]);
}
free(*classes);
ippDelete(response);
return (0);
}
(*classes)[n] = strdup(attr->values[0].string.text);
*classes = temp;
temp[n] = strdup(attr->values[0].string.text);
n ++;
}
@@ -646,6 +660,7 @@ cupsGetPrinters(char ***printers) /* O - Printers */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
cups_lang_t *language; /* Default language */
char **temp; /* Temporary pointer */
/*
@@ -671,10 +686,10 @@ cupsGetPrinters(char ***printers) /* O - Printers */
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
"attributes-natural-language", NULL, language->language);
/*
* Do the request and get back a response...
@@ -683,26 +698,39 @@ cupsGetPrinters(char ***printers) /* O - Printers */
n = 0;
*printers = NULL;
if ((response = cupsDoRequest(cups_server, request, "/printers/")) != NULL)
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
{
last_error = response->request.status.status_code;
for (attr = response->attrs; attr != NULL; attr = attr->next)
if (strcasecmp(attr->name, "printer-name") == 0 &&
if (attr->name != NULL &&
strcasecmp(attr->name, "printer-name") == 0 &&
attr->value_tag == IPP_TAG_NAME)
{
if (n == 0)
*printers = malloc(sizeof(char *));
temp = malloc(sizeof(char *));
else
*printers = realloc(*printers, sizeof(char *) * (n + 1));
temp = realloc(*printers, sizeof(char *) * (n + 1));
if (*printers == NULL)
if (temp == NULL)
{
/*
* Ran out of memory!
*/
while (n > 0)
{
n --;
free((*printers)[n]);
}
free(*printers);
ippDelete(response);
return (0);
}
(*printers)[n] = strdup(attr->values[0].string.text);
*printers = temp;
temp[n] = strdup(attr->values[0].string.text);
n ++;
}
+12 -3
Ver Arquivo
@@ -41,8 +41,8 @@ include ../Makedefs
# Document files...
#
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml ssr.shtml \
stp.shtml sum.shtml
DOCUMENTS = cmp.shtml idd.shtml sam.shtml sdd.shtml spm.shtml \
ssr.shtml stp.shtml sum.shtml
DOCIMAGES = images/cups-block-diagram.gif images/cups-large.gif \
images/cups-medium.gif images/cups-small.gif
WEBPAGES = cups.css cupsdoc.css index.html documentation.html
@@ -81,7 +81,8 @@ install:
$(CP) $(DOCIMAGES) $(DATADIR)/doc/images
#
# The overview, admin guide, and user's guide get special attention...
# The overview, admin manual, programmers manual, and users manual get
# special attention...
#
overview.pdf: overview.html
@@ -96,6 +97,14 @@ sam.pdf: sam.shtml
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
spm.html: spm.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif -f $@ $<
spm.pdf: spm.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif --duplex --compression=9 \
--jpeg -f $@ $<
sum.html: sum.shtml
echo Formatting $@...
htmldoc --title images/cups-large.gif -f $@ $<
+218 -116
Ver Arquivo
@@ -1,111 +1,213 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>CUPS Configuration Management Plan</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-CMP-1.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Configuration Management Plan</H1></A><BR>
<CENTER><A HREF="#CONTENTS"><H1>CUPS Configuration Management Plan</H1></A><BR>
CUPS-CMP-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 File Management</A></B>
<B><A HREF="#3">3 File Management</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Directory Structure</A></LI>
<LI><A HREF=#3_2>3.2 Source Files</A></LI>
<LI><A HREF=#3_3>3.3 Configuration Management</A></LI>
<LI><A HREF="#3_1">3.1 Directory Structure</A></LI>
<LI><A HREF="#3_2">3.2 Source Files</A></LI>
<LI><A HREF="#3_3">3.3 Configuration Management</A></LI>
</UL>
<B><A HREF=#4>4 Trouble Report Processing</A></B>
<B><A HREF="#4">4 Trouble Report Processing</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Classification</A></LI>
<LI><A HREF=#4_2>4.2 Identification</A></LI>
<LI><A HREF=#4_3>4.3 Correction</A></LI>
<LI><A HREF=#4_4>4.4 Notification</A></LI>
<LI><A HREF="#4_1">4.1 Classification</A></LI>
<LI><A HREF="#4_2">4.2 Identification</A></LI>
<LI><A HREF="#4_3">4.3 Correction</A></LI>
<LI><A HREF="#4_4">4.4 Notification</A></LI>
</UL>
<B><A HREF=#5>5 Software Releases</A></B>
<B><A HREF="#5">5 Software Releases</A></B>
<UL>
<LI><A HREF=#5_1>5.1 Version Numbering</A></LI>
<LI><A HREF=#5_2>5.2 Generation</A></LI>
<LI><A HREF=#5_3>5.3 Testing</A></LI>
<LI><A HREF=#5_4>5.4 Release</A></LI>
<LI><A HREF="#5_1">5.1 Version Numbering</A></LI>
<LI><A HREF="#5_2">5.2 Generation</A></LI>
<LI><A HREF="#5_3">5.3 Testing</A></LI>
<LI><A HREF="#5_4">5.4 Release</A></LI>
</UL>
<B><A HREF=#6>A Glossary</A></B>
<B><A HREF="#6">A Glossary</A></B>
<UL>
<LI><A HREF=#6_1>A.1 Terms</A></LI>
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
<LI><A HREF="#6_1">A.1 Terms</A></LI>
<LI><A HREF="#6_2">A.2 Acronyms</A></LI>
</UL>
<B><A HREF=#7>B Coding Requirements</A></B>
<B><A HREF="#7">B Coding Requirements</A></B>
<UL>
<LI><A HREF=#7_1>B.1 Source Files</A></LI>
<LI><A HREF="#7_1">B.1 Source Files</A></LI>
<UL>
<LI><A HREF=#7_1_1>B.1.1 Naming</A></LI>
<LI><A HREF=#7_1_2>B.1.2 Documentation</A></LI>
<LI><A HREF="#7_1_1">B.1.1 Naming</A></LI>
<LI><A HREF="#7_1_2">B.1.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_2>B.2 Functions</A></LI>
<LI><A HREF="#7_2">B.2 Functions</A></LI>
<UL>
<LI><A HREF=#7_2_1>B.2.1 Naming</A></LI>
<LI><A HREF=#7_2_2>B.2.2 Documentation</A></LI>
<LI><A HREF="#7_2_1">B.2.1 Naming</A></LI>
<LI><A HREF="#7_2_2">B.2.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_3>B.3 Methods</A></LI>
<LI><A HREF="#7_3">B.3 Methods</A></LI>
<UL>
<LI><A HREF=#7_3_1>B.3.1 Naming</A></LI>
<LI><A HREF=#7_3_2>B.3.2 Documentation</A></LI>
<LI><A HREF="#7_3_1">B.3.1 Naming</A></LI>
<LI><A HREF="#7_3_2">B.3.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_4>B.4 Variables</A></LI>
<LI><A HREF="#7_4">B.4 Variables</A></LI>
<UL>
<LI><A HREF=#7_4_1>B.4.1 Naming</A></LI>
<LI><A HREF=#7_4_2>B.4.2 Documentation</A></LI>
<LI><A HREF="#7_4_1">B.4.1 Naming</A></LI>
<LI><A HREF="#7_4_2">B.4.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_5>B.5 Types</A></LI>
<LI><A HREF="#7_5">B.5 Types</A></LI>
<UL>
<LI><A HREF=#7_5_1>B.5.1 Naming</A></LI>
<LI><A HREF=#7_5_2>B.5.2 Documentation</A></LI>
<LI><A HREF="#7_5_1">B.5.1 Naming</A></LI>
<LI><A HREF="#7_5_2">B.5.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_6>B.6 Structures</A></LI>
<LI><A HREF="#7_6">B.6 Structures</A></LI>
<UL>
<LI><A HREF=#7_6_1>B.6.1 Naming</A></LI>
<LI><A HREF=#7_6_2>B.6.2 Documentation</A></LI>
<LI><A HREF="#7_6_1">B.6.1 Naming</A></LI>
<LI><A HREF="#7_6_2">B.6.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_7>B.7 Classes</A></LI>
<LI><A HREF="#7_7">B.7 Classes</A></LI>
<UL>
<LI><A HREF=#7_7_1>B.7.1 Naming</A></LI>
<LI><A HREF=#7_7_2>B.7.2 Documentation</A></LI>
<LI><A HREF="#7_7_1">B.7.1 Naming</A></LI>
<LI><A HREF="#7_7_2">B.7.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_8>B.8 Constants</A></LI>
<LI><A HREF="#7_8">B.8 Constants</A></LI>
<UL>
<LI><A HREF=#7_8_1>B.8.1 Naming</A></LI>
<LI><A HREF=#7_8_2>B.8.2 Documentation</A></LI>
<LI><A HREF="#7_8_1">B.8.1 Naming</A></LI>
<LI><A HREF="#7_8_2">B.8.2 Documentation</A></LI>
</UL>
<LI><A HREF=#7_9>B.9 Code</A></LI>
<LI><A HREF="#7_9">B.9 Code</A></LI>
<UL>
<LI><A HREF=#7_9_1>B.9.1 Documentation</A></LI>
<LI><A HREF=#7_9_2>B.9.2 Style</A></LI>
<LI><A HREF="#7_9_1">B.9.1 Documentation</A></LI>
<LI><A HREF="#7_9_2">B.9.2 Style</A></LI>
</UL>
</UL>
<B><A HREF=#8>C Software Trouble Report Form</A></B><HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
<B><A HREF="#8">C Software Trouble Report Form</A></B><HR>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
This configuration management plan document provides the guidelines
for development and maintainance of the Common UNIX Printing System
(&quot;CUPS&quot;) Version 1.0 software.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -121,7 +223,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
This configuration management document is organized into the following
sections:
<UL>
@@ -133,8 +235,8 @@ sections:
<LI>A - Glossary</LI>
<LI>B - Coding Requirements</LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
@@ -147,7 +249,7 @@ sections:
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
@@ -157,22 +259,22 @@ sections:
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
</UL>
<H1><A NAME=3>3 File Management</A></H1>
<H2><A NAME=3_1>3.1 Directory Structure</A></H2>
<H1><A NAME="3">3 File Management</A></H1>
<H2><A NAME="3_1">3.1 Directory Structure</A></H2>
Each source file shall be placed a sub-directory corresponding to the
software sub-system it belongs to (&quot;scheduler&quot;, &quot;libcups&quot;, etc.) To
remain compatible with older UNIX filesystems, directory names shall
not exceed 16 characters in length.
<H2><A NAME=3_2>3.2 Source Files</A></H2>
<H2><A NAME="3_2">3.2 Source Files</A></H2>
Source files shall be documented and formatted as described in
Appendix B, Coding Requirements.
<H2><A NAME=3_3>3.3 Configuration Management</A></H2>
<H2><A NAME="3_3">3.3 Configuration Management</A></H2>
Source files shall be placed under the control of the Concurrent
Versions System (&quot;CVS&quot;) software. Source files shall be &quot;checked in&quot;
with each change so that modifications can be tracked.
<P>Documentation on the CVS software is included with the whitepaper,
&quot;CVS II: Parallelizing Software Development&quot;. </P>
<H1><A NAME=4>4 Trouble Report Processing</A></H1>
<H1><A NAME="4">4 Trouble Report Processing</A></H1>
A Software Trouble Report (&quot;STR&quot;) shall be submitted every time a user
or vendor experiences a problem with the CUPS software. Trouble reports
are maintained in a database with one of the following states:
@@ -183,7 +285,7 @@ are maintained in a database with one of the following states:
<LI>STR is pending (new STR or additional information available)</LI>
</OL>
Trouble reports shall be processed using the following steps.
<H2><A NAME=4_1>4.1 Classification</A></H2>
<H2><A NAME="4_1">4.1 Classification</A></H2>
When a trouble report is received it must be classified at one of the
following levels:
<OL>
@@ -199,7 +301,7 @@ following levels:
<LI>Specific to an operating system</LI>
<LI>Applies to all machines and operating systems</LI>
</OL>
<H2><A NAME=4_2>4.2 Identification</A></H2>
<H2><A NAME="4_2">4.2 Identification</A></H2>
Once the level and scope of the trouble report is determined the
software sub-system(s) involved with the problem are determined. This
may involve additional communication with the user or vendor to isolate
@@ -207,16 +309,16 @@ the problem to a specific cause.
<P>When the sub-system(s) involved have been identified, an engineer
will then determine the change(s) needed and estimate the time required
for the change(s). </P>
<H2><A NAME=4_3>4.3 Correction</A></H2>
<H2><A NAME="4_3">4.3 Correction</A></H2>
Corrections are scheduled based upon the severity and complexity of
the problem. Once all changes have been made, documented, and tested
successfully a new software release snapshot is generated. Additional
tests are added as necessary for proper testing of the changes.
<H2><A NAME=4_4>4.4 Notification</A></H2>
<H2><A NAME="4_4">4.4 Notification</A></H2>
The user or vendor is notified when the fix is available or if the
problem was caused by user error.
<H1><A NAME=5>5 Software Releases</A></H1>
<H2><A NAME=5_1>5.1 Version Numbering</A></H2>
<H1><A NAME="5">5 Software Releases</A></H1>
<H2><A NAME="5_1">5.1 Version Numbering</A></H2>
CUPS uses a three-part version number separated by periods to
represent the major, minor, and patch release numbers:
<UL>
@@ -261,22 +363,22 @@ numbers reset to 0:
2.0.0 Production release of 2.0.0
</PRE>
</UL>
<H2><A NAME=5_2>5.2 Generation</A></H2>
<H2><A NAME="5_2">5.2 Generation</A></H2>
Software releases shall be generated for each successfully completed
software trouble report. All object and executable files shall be
deleted prior to performing a full build to ensure that source files
are recompiled.
<H2><A NAME=5_3>5.3 Testing</A></H2>
<H2><A NAME="5_3">5.3 Testing</A></H2>
Software testing shall be conducted according to the CUPS Software
Test Plan, CUPS-STP-1.0. Failed tests cause STRs to be generated to
correct the problems found.
<H2><A NAME=5_4>5.4 Release</A></H2>
<H2><A NAME="5_4">5.4 Release</A></H2>
When testing has been completed successfully a new distribution image
is created from the current CVS code &quot;snapshot&quot;. No production release
shall contain software that has not passed the appropriate software
tests.
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
<H2><A NAME=6_1>A.1 Terms</A></H2>
<H1 TYPE="A" VALUE="1"><A NAME="6">A Glossary</A></H1>
<H2><A NAME="6_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
@@ -289,7 +391,7 @@ tests.
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
<H2><A NAME="6_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
@@ -324,18 +426,18 @@ tests.
<DT>TFTP </DT>
<DD>Trivial File Transfer Protocol </DD>
</DL>
<H1><A NAME=7>B Coding Requirements</A></H1>
<H1><A NAME="7">B Coding Requirements</A></H1>
These coding requirements provide detailed information on source file
formatting and documentation content. These guidelines shall be applied
to all C and C++ source files provided with CUPS.
<H2><A NAME=7_1>B.1 Source Files</A></H2>
<H3><A NAME=7_1_1>B.1.1 Naming</A></H3>
<H2><A NAME="7_1">B.1 Source Files</A></H2>
<H3><A NAME="7_1_1">B.1.1 Naming</A></H3>
All source files names shall be 16 characters or less in length to
ensure compatibility with older UNIX filesystems. Source files
containing functions shall have an extension of &quot;.c&quot; for ANSI C and
&quot;.cpp&quot; for C++ source files. All other &quot;include&quot; files shall have an
extension of &quot;.h&quot;.
<H3><A NAME=7_1_2>B.1.2 Documentation</A></H3>
<H3><A NAME="7_1_2">B.1.2 Documentation</A></H3>
The top of each source file shall contain a header giving the name of
the file, the purpose or nature of the source file, the copyright and
licensing notice, and the functions contained in the file. The file
@@ -387,8 +489,8 @@ been lost near the end of the file:
*/
</PRE>
</UL>
<H2><A NAME=7_2>B.2 Functions</A></H2>
<H3><A NAME=7_2_1>B.2.1 Naming</A></H3>
<H2><A NAME="7_2">B.2 Functions</A></H2>
<H3><A NAME="7_2_1">B.2.1 Naming</A></H3>
Functions with a global scope shall be capitalized (&quot;DoThis&quot;,
&quot;DoThat&quot;, &quot;DoSomethingElse&quot;, etc.) The only exception to this rule
shall be the CUPS interface library functions which may begin with a
@@ -396,7 +498,7 @@ prefix word in lowercase (&quot;cupsDoThis&quot;, &quot;cupsDoThat&quot;, etc.)
<P>Functions with a local scope shall be declared &quot;static&quot; and be
lowercase with underscores between words (&quot;do_this&quot;, &quot;do_that&quot;,
&quot;do_something_else&quot;, etc.) </P>
<H3><A NAME=7_2_2>B.2.2 Documentation</A></H3>
<H3><A NAME="7_2_2">B.2.2 Documentation</A></H3>
Each function shall begin with a comment header describing what the
function does, the possible input limits (if any), and the possible
output values (if any), and any special information needed:
@@ -416,11 +518,11 @@ do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
}
</PRE>
</UL>
<H2><A NAME=7_3>B.3 Methods</A></H2>
<H3><A NAME=7_3_1>B.3.1 Naming</A></H3>
<H2><A NAME="7_3">B.3 Methods</A></H2>
<H3><A NAME="7_3_1">B.3.1 Naming</A></H3>
Methods shall be in lowercase with underscores between words
(&quot;do_this&quot;, &quot;do_that&quot;, &quot;do_something_else&quot;, etc.)
<H3><A NAME=7_3_2>B.3.2 Documentation</A></H3>
<H3><A NAME="7_3_2">B.3.2 Documentation</A></H3>
Each method shall begin with a comment header describing what the
method does, the possible input limits (if any), and the possible
output values (if any), and any special information needed:
@@ -440,8 +542,8 @@ class::do_this(float x) /* I - Power value (0.0 &lt;= x &lt;= 1.0) */
}
</PRE>
</UL>
<H2><A NAME=7_4>B.4 Variables</A></H2>
<H3><A NAME=7_4_1>B.4.1 Naming</A></H3>
<H2><A NAME="7_4">B.4 Variables</A></H2>
<H3><A NAME="7_4_1">B.4.1 Naming</A></H3>
Variables with a global scope shall be capitalized (&quot;ThisVariable&quot;,
&quot;ThatVariable&quot;, &quot;ThisStateVariable&quot;, etc.) The only exception to this
rule shall be the CUPS interface library global variables which must
@@ -452,7 +554,7 @@ possible.
between words (&quot;this_variable&quot;, &quot;that_variable&quot;, etc.) Any local
variables shared by functions within a source file shall be declared
&quot;static&quot;. </P>
<H3><A NAME=7_4_2>B.4.2 Documentation</A></H3>
<H3><A NAME="7_4_2">B.4.2 Documentation</A></H3>
Each variable shall be declared on a separate line and shall be
immediately followed by a comment block describing the variable:
<UL>
@@ -461,12 +563,12 @@ int this_variable; /* The current state of this */
int that_variable; /* The current state of that */
</PRE>
</UL>
<H2><A NAME=7_5>B.5 Types</A></H2>
<H3><A NAME=7_5_1>B.5.1 Naming</A></H3>
<H2><A NAME="7_5">B.5 Types</A></H2>
<H3><A NAME="7_5_1">B.5.1 Naming</A></H3>
All type names shall be lowercase with underscores between words and
&quot;_t&quot; appended to the end of the name (&quot;this_type_t&quot;, &quot;that_type_t&quot;,
etc.)
<H3><A NAME=7_5_2>B.5.2 Documentation</A></H3>
<H3><A NAME="7_5_2">B.5.2 Documentation</A></H3>
Each type shall have a comment block immediately before the typedef:
<UL>
<PRE>
@@ -476,12 +578,12 @@ etc.)
typedef int cups_this_type_t;
</PRE>
</UL>
<H2><A NAME=7_6>B.6 Structures</A></H2>
<H3><A NAME=7_6_1>B.6.1 Naming</A></H3>
<H2><A NAME="7_6">B.6 Structures</A></H2>
<H3><A NAME="7_6_1">B.6.1 Naming</A></H3>
All structure names shall be lowercase with underscores between words
and &quot;_str&quot; appended to the end of the name (&quot;this_struct_str&quot;,
&quot;that_struct_str&quot;, etc.)
<H3><A NAME=7_6_2>B.6.2 Documentation</A></H3>
<H3><A NAME="7_6_2">B.6.2 Documentation</A></H3>
Each structure shall have a comment block immediately before the
struct and each member shall be documented in accordance with the
variable naming policy above:
@@ -497,11 +599,11 @@ struct cups_this_struct_str
};
</PRE>
</UL>
<H2><A NAME=7_7>B.7 Classes</A></H2>
<H3><A NAME=7_7_1>B.7.1 Naming</A></H3>
<H2><A NAME="7_7">B.7 Classes</A></H2>
<H3><A NAME="7_7_1">B.7.1 Naming</A></H3>
All class names shall be lowercase with underscores between words
(&quot;this_class&quot;, &quot;that_class&quot;, etc.)
<H3><A NAME=7_7_2>B.7.2 Documentation</A></H3>
<H3><A NAME="7_7_2">B.7.2 Documentation</A></H3>
Each class shall have a comment block immediately before the class and
each member shall be documented in accordance with the variable naming
policy above:
@@ -517,15 +619,15 @@ class cups_this_class
};
</PRE>
</UL>
<H2><A NAME=7_8>B.8 Constants</A></H2>
<H3><A NAME=7_8_1>B.8.1 Naming</A></H3>
<H2><A NAME="7_8">B.8 Constants</A></H2>
<H3><A NAME="7_8_1">B.8.1 Naming</A></H3>
All constant names shall be uppercase with underscored between words
(&quot;THIS_CONSTANT&quot;, &quot;THAT_CONSTANT&quot;, etc.) Constants defined for the CUPS
interface library must begin with an uppercase prefix
(&quot;CUPS_THIS_CONSTANT&quot;, &quot;CUPS_THAT_CONSTANT&quot;, etc.)
<P>Typed enumerations shall be used whenever possible to allow for type
checking by the compiler. </P>
<H3><A NAME=7_8_2>B.8.2 Documentation</A></H3>
<H3><A NAME="7_8_2">B.8.2 Documentation</A></H3>
Comment blocks shall immediately follow each constant:
<UL>
<PRE>
@@ -536,8 +638,8 @@ enum
};
</PRE>
</UL>
<H2><A NAME=7_9>B.9 Code</A></H2>
<H3><A NAME=7_9_1>B.9.1 Documentation</A></H3>
<H2><A NAME="7_9">B.9 Code</A></H2>
<H3><A NAME="7_9_1">B.9.1 Documentation</A></H3>
All source code shall utilize block comments within functions to
describe the operations being performed by a group of statements:
<UL>
@@ -564,8 +666,8 @@ do
} while (i == (sizeof(array) / sizeof(array[0])));
</PRE>
</UL>
<H3><A NAME=7_9_2>B.9.2 Style</A></H3>
<H4 TYPE=a>B.9.2.a Indentation</H4>
<H3><A NAME="7_9_2">B.9.2 Style</A></H3>
<H4 TYPE="a">B.9.2.a Indentation</H4>
All code blocks enclosed by brackets shall begin with the opening
brace on a new line. The code then follows starting on a new line after
the brace and is indented 2 spaces. The closing brace is then placed on
@@ -626,20 +728,20 @@ for (i = sizeof(array) / sizeof(array[0]) - 1; i &gt;= 0; i --)
array[i] = STATE_IDLE;
</PRE>
</UL>
<H1 ALIGN=RIGHT><A NAME=8>C Software Trouble Report Form</A></H1>
<H1 ALIGN="RIGHT"><A NAME="8">C Software Trouble Report Form</A></H1>
<CENTER>
<TABLE WIDTH=80%>
<TR><TH ALIGN=RIGHT>Summary of Problem:</TH><TD ALIGN=LEFT>
<TABLE WIDTH="80%">
<TR><TH ALIGN="RIGHT">Summary of Problem:</TH><TD ALIGN="LEFT">
________________________________________</TD></TR>
<TR><TH ALIGN=RIGHT>Problem Severity:</TH><TD ALIGN=LEFT>__1=RFE
<TR><TH ALIGN="RIGHT">Problem Severity:</TH><TD ALIGN="LEFT">__1=RFE
<BR>__2=Documentation-Error
<BR>__3=Unable-to-Print-a-File
<BR>__4=Unable-to-Print-to-a-Printer
<BR>__5=Unable-to-Print-at-All</TD></TR>
<TR><TH ALIGN=RIGHT>Problem Scope:</TH><TD ALIGN=LEFT>__1=Machine
<TR><TH ALIGN="RIGHT">Problem Scope:</TH><TD ALIGN="LEFT">__1=Machine
__2=Operating-System __3=All</TD></TR>
<TR><TH ALIGN=RIGHT VALIGN=TOP>Detailed Description of Problem:</TH><TD ALIGN=LEFT>
________________________________________
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Detailed Description of Problem:</TH><TD
ALIGN="LEFT">________________________________________
<BR>________________________________________
<BR>________________________________________
<BR>________________________________________
+726 -745
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4
Ver Arquivo
@@ -35,6 +35,10 @@ The following documentation for CUPS is available on this server:
<A HREF="sam.html">HTML</A> |
<A HREF="sam.pdf">PDF</A> )
<LI>Software Programmers Manual (
<A HREF="spm.html">HTML</A> |
<A HREF="spm.pdf">PDF</A> )
<LI>Configuration Management Plan (
<A HREF="cmp.html">HTML</A> |
<A HREF="cmp.pdf">PDF</A> )
+213 -111
Ver Arquivo
@@ -1,91 +1,193 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>CUPS Interface Design Description</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-IDD-1.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Interface Design Description</H1></A><BR>
<CENTER><A HREF="#CONTENTS"><H1>CUPS Interface Design Description</H1></A><BR>
CUPS-IDD-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Internal Interfaces</A></B>
<B><A HREF="#3">3 Internal Interfaces</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Character Set Files</A></LI>
<LI><A HREF=#3_2>3.2 Language Files</A></LI>
<LI><A HREF=#3_3>3.3 MIME Files</A></LI>
<LI><A HREF="#3_1">3.1 Character Set Files</A></LI>
<LI><A HREF="#3_2">3.2 Language Files</A></LI>
<LI><A HREF="#3_3">3.3 MIME Files</A></LI>
<UL>
<LI><A HREF=#3_3_1>3.3.1 mime.types</A></LI>
<LI><A HREF=#3_3_2>3.3.2 mime.convs</A></LI>
<LI><A HREF="#3_3_1">3.3.1 mime.types</A></LI>
<LI><A HREF="#3_3_2">3.3.2 mime.convs</A></LI>
</UL>
<LI><A HREF=#3_4>3.4 PostScript Printer Description Files</A></LI>
<LI><A HREF="#3_4">3.4 PostScript Printer Description Files</A></LI>
<UL>
<LI><A HREF=#3_4_1>3.4.1 CUPS Extensions to PPD Files</A></LI>
<LI><A HREF="#3_4_1">3.4.1 CUPS Extensions to PPD Files</A></LI>
</UL>
<LI><A HREF=#3_5>3.5 Scheduler Configuration Files</A></LI>
<LI><A HREF="#3_5">3.5 Scheduler Configuration Files</A></LI>
<UL>
<LI><A HREF=#3_5_1>3.5.1 classes.conf</A></LI>
<LI><A HREF=#3_5_2>3.5.2 cupsd.conf</A></LI>
<LI><A HREF=#3_5_3>3.5.3 printers.conf</A></LI>
<LI><A HREF="#3_5_1">3.5.1 classes.conf</A></LI>
<LI><A HREF="#3_5_2">3.5.2 cupsd.conf</A></LI>
<LI><A HREF="#3_5_3">3.5.3 printers.conf</A></LI>
</UL>
</UL>
<B><A HREF=#4>4 External Interfaces</A></B>
<B><A HREF="#4">4 External Interfaces</A></B>
<UL>
<LI><A HREF=#4_1>4.1 AppSocket Protocol</A></LI>
<LI><A HREF=#4_2>4.2 CUPS Browsing Protocol</A></LI>
<LI><A HREF=#4_3>4.3 CUPS PostScript File</A></LI>
<LI><A HREF=#4_4>4.4 CUPS Raster File</A></LI>
<LI><A HREF=#4_5>4.5 CUPS Raw Files</A></LI>
<LI><A HREF=#4_6>4.6 Internet Printing Protocol</A></LI>
<LI><A HREF="#4_1">4.1 AppSocket Protocol</A></LI>
<LI><A HREF="#4_2">4.2 CUPS Browsing Protocol</A></LI>
<LI><A HREF="#4_3">4.3 CUPS PostScript File</A></LI>
<LI><A HREF="#4_4">4.4 CUPS Raster File</A></LI>
<LI><A HREF="#4_5">4.5 CUPS Raw Files</A></LI>
<LI><A HREF="#4_6">4.6 Internet Printing Protocol</A></LI>
<UL>
<LI><A HREF=#4_6_1>4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
<LI><A HREF="#4_6_1">4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></LI>
<LI><A HREF=#4_6_2>4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
<LI><A HREF=#4_6_3>4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
<LI><A HREF=#4_6_4>4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
<LI><A HREF="#4_6_2">4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></LI>
<LI><A HREF="#4_6_3">4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></LI>
<LI><A HREF="#4_6_4">4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</LI>
<LI><A HREF=#4_6_5>4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
<LI><A HREF=#4_6_6>4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
<LI><A HREF=#4_6_7>4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
<LI><A HREF=#4_6_8>4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
<LI><A HREF=#4_6_9>4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
<LI><A HREF=#4_6_10>4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></LI>
<LI><A HREF="#4_6_5">4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></LI>
<LI><A HREF="#4_6_6">4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></LI>
<LI><A HREF="#4_6_7">4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></LI>
<LI><A HREF="#4_6_8">4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></LI>
<LI><A HREF="#4_6_9">4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></LI>
<LI><A HREF="#4_6_10">4.6.10 Set Default Destination (CUPS_SET_DEFAULT
= 0x400A)</A></LI>
</UL>
<LI><A HREF=#4_7>4.7 Line Printer Daemon Protocol</A></LI>
<LI><A HREF=#4_8>4.8 Server Message Block Protocol</A></LI>
<LI><A HREF="#4_7">4.7 Line Printer Daemon Protocol</A></LI>
<LI><A HREF="#4_8">4.8 Server Message Block Protocol</A></LI>
</UL>
<B><A HREF=#5>5 5 - Directories</A></B>
<B><A HREF="#5">5 5 - Directories</A></B>
<BR>
<BR><B><A HREF=#6>A Glossary</A></B>
<BR><B><A HREF="#6">A Glossary</A></B>
<UL>
<LI><A HREF=#6_1>A.1 Terms</A></LI>
<LI><A HREF=#6_2>A.2 Acronyms</A></LI>
<LI><A HREF="#6_1">A.1 Terms</A></LI>
<LI><A HREF="#6_2">A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
<P>This interface design description document provides detailed file
formats, message formats, and program conventions for the Common UNIX
Printing System (&quot;CUPS&quot;) Version 1.0. </P>
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
<P>The Common UNIX Printing System provides a portable printing layer
for UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -101,7 +203,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
<P>This interface design description document is organized into the
following sections: </P>
<UL>
@@ -112,8 +214,8 @@ following sections: </P>
<LI>5 - Directories </LI>
<LI>A - Glossary </LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
<P>The following CUPS documentation is referenced by this document: </P>
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
@@ -126,7 +228,7 @@ following sections: </P>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
<P>The following non-CUPS documents are referenced by this document: </P>
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
@@ -136,8 +238,8 @@ following sections: </P>
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
</UL>
<H1><A NAME=3>3 Internal Interfaces</A></H1>
<H2><A NAME=3_1>3.1 Character Set Files</A></H2>
<H1><A NAME="3">3 Internal Interfaces</A></H1>
<H2><A NAME="3_1">3.1 Character Set Files</A></H2>
<P>The character set files define a mapping between 8-bit characters
and the Unicode character set. They are named using the ISO standard
number defined for the character set. Each file consists of up to 256
@@ -145,7 +247,7 @@ lines of ASCII text. Each line consists of two hexadecimal numbers; the
first number is the character number in the character set (0x00 to
0xff), and the second number is the Unicode character number (0x0000 to
0xffff). </P>
<H2><A NAME=3_2>3.2 Language Files</A></H2>
<H2><A NAME="3_2">3.2 Language Files</A></H2>
<P>The language files define the default character set and a collection
of text messages in that language. They are named by prefixing the
string &quot;cups_&quot; to the front of the language specifier (e.g. &quot;cups_en&quot;,
@@ -170,9 +272,9 @@ messages. The currently recognized values are: </P>
<P>The second and succeeding lines define text messages. If the message
text is preceded by a number, then the current message number is
updated and the text after the number is used. </P>
<H2><A NAME=3_3>3.3 MIME Files</A></H2>
<H2><A NAME="3_3">3.3 MIME Files</A></H2>
<P>CUPS uses two MIME files in its standard configuration. </P>
<H3><A NAME=3_3_1>3.3.1 mime.types</A></H3>
<H3><A NAME="3_3_1">3.3.1 mime.types</A></H3>
<P>The mime.types file defines the recognized file types and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. The backslash (&quot;\&quot;) character can be used at the end
@@ -203,7 +305,7 @@ operator := &quot;+&quot; | [ logical AND ]
<P>The <CODE>int</CODE> and <CODE>short</CODE> rules match look for
integers in network byte order (a.k.a. big-endian) with the
most-significant byte first. </P>
<H3><A NAME=3_3_2>3.3.2 mime.convs</A></H3>
<H3><A NAME="3_3_2">3.3.2 mime.convs</A></H3>
<P>The mime.types file defines the recognized file filters and consists
of 1 or more lines of ASCII text. Comment lines start with the pound
(&quot;#&quot;) character. </P>
@@ -212,12 +314,12 @@ of 1 or more lines of ASCII text. Comment lines start with the pound
the MIME types are a cost value (0 to 100) and the filter program to
use. If the filter program is not specified using the full path then it
must reside in the CUPS filter directory. </P>
<H2><A NAME=3_4>3.4 PostScript Printer Description Files</A></H2>
<H2><A NAME="3_4">3.4 PostScript Printer Description Files</A></H2>
<P>The PostScript Printer Description (PPD) file format is described in <A
HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf>
Adobe TechNote #5003: PostScript Printer Description File Format
HREF="http://partners.adobe.com/supportservice/devrelations/PDFS/TN/5003.PPD_Spec_v4.3.pdf">
Adobe TechNote #5003: PostScript Printer Description File Format
Specification Version 4.3</A>. </P>
<H3><A NAME=3_4_1>3.4.1 CUPS Extensions to PPD Files</A></H3>
<H3><A NAME="3_4_1">3.4.1 CUPS Extensions to PPD Files</A></H3>
<P>CUPS adds several new attributes that are described below. </P>
<H4>3.4.1.1 cupsFilter</H4>
<P>This string attribute provides a conversion rule of the form: </P>
@@ -261,7 +363,7 @@ after</I> the CMY transformation. </P>
<P>This required attribute describes which version of the CUPS IDD was
used for the PPD file extensions. Currently it must be the string
&quot;1.0&quot;. </P>
<H2><A NAME=3_5>3.5 Scheduler Configuration Files</A></H2>
<H2><A NAME="3_5">3.5 Scheduler Configuration Files</A></H2>
<P>The scheduler reads three configuration files that define the
available printers, classes, and services: </P>
<DL>
@@ -273,15 +375,15 @@ the scheduler. </DD>
<DT>printers.conf </DT>
<DD>This file defines all of the printers known to the system. </DD>
</DL>
<H3><A NAME=3_5_1>3.5.1 classes.conf</A></H3>
<H3><A NAME="3_5_1">3.5.1 classes.conf</A></H3>
<P>The classes.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TABLE BORDER="1" WIDTH="90%">
<TR><TH WIDTH="25%">Directive</TH><TH>Description</TH></TR>
<TR><TD>&lt;Class name&gt;
<BR> &lt;/Class&gt;</TD><TD>Surrounds a class definition.</TD></TR>
<TR><TD>&lt;DefaultClass name&gt;
@@ -298,15 +400,15 @@ class.</TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_2>3.5.2 cupsd.conf</A></H3>
<H3><A NAME="3_5_2">3.5.2 cupsd.conf</A></H3>
<P>The cupsd.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Default</TH><TH>Description</TH></TR>
<TABLE BORDER="1" WIDTH="90%">
<TR><TH WIDTH="25%">Directive</TH><TH>Default</TH><TH>Description</TH></TR>
<TR><TD>AccessLog</TD><TD>logs/access_log</TD><TD>Specifies the
location of the access log file.</TD></TR>
<TR><TD>Allow</TD><TD>-</TD><TD>Allows connections from the specified
@@ -396,15 +498,15 @@ running external programs.</TD></TR>
</TABLE>
</CENTER>
</P>
<H3><A NAME=3_5_3>3.5.3 printers.conf</A></H3>
<H3><A NAME="3_5_3">3.5.3 printers.conf</A></H3>
<P>The printers.conf file consists of 1 or more lines of ASCII text.
Comment lines start with the pound (&quot;#&quot;) character. </P>
<P>Each non-blank line starts with the name of a configuration
directive followed by its value. The following directives are
understood:
<CENTER>
<TABLE BORDER=1 WIDTH=90%>
<TR><TH WIDTH=25%>Directive</TH><TH>Description</TH></TR>
<TABLE BORDER="1" WIDTH="90%">
<TR><TH WIDTH="25%">Directive</TH><TH>Description</TH></TR>
<TR><TD>Accepting</TD><TD>Specifies whether the printer is accepting
new jobs. May be the names &quot;Yes&quot; or &quot;No&quot;.</TD></TR>
<TR><TD>&lt;DefaultPrinter name&gt;
@@ -423,11 +525,11 @@ be &quot;Idle&quot; or &quot;Stopped&quot;.</TD></TR>
</TABLE>
</CENTER>
</P>
<H1><A NAME=4>4 External Interfaces</A></H1>
<H2><A NAME=4_1>4.1 AppSocket Protocol</A></H2>
<H1><A NAME="4">4 External Interfaces</A></H1>
<H2><A NAME="4_1">4.1 AppSocket Protocol</A></H2>
<P>The AppSocket protocol is an 8-bit clean TCP/IP socket connection.
The default IP service port is 9100. The URI method name is &quot;socket&quot;. </P>
<H2><A NAME=4_2>4.2 CUPS Browsing Protocol</A></H2>
<H2><A NAME="4_2">4.2 CUPS Browsing Protocol</A></H2>
<P>The CUPS Browsing Protocol is a UDP/IP-based broadcast service. By
default this service operates on IP service port 631. </P>
<P>Each broadcast packet describes the state of a single printer or
@@ -443,8 +545,8 @@ printer-state</CODE> and <CODE>printer-uri-supported</CODE> attributes. </P>
<P>The <I>type</I> value is a hexadecimal number string representing
capability/type bits:
<CENTER>
<TABLE BORDER=1 WIDTH=40%>
<TR><TH WIDTH=8%>Bit</TH><TH>Description</TH></TR>
<TABLE BORDER="1" WIDTH="40%">
<TR><TH WIDTH="8%">Bit</TH><TH>Description</TH></TR>
<TR><TD>0</TD><TD>0 = printer
<BR> 1 = class</TD></TR>
<TR><TD>1</TD><TD>0 = local
@@ -467,13 +569,13 @@ capability/type bits:
</TABLE>
</CENTER>
</P>
<H2><A NAME=4_3>4.3 CUPS PostScript File</A></H2>
<H2><A NAME="4_3">4.3 CUPS PostScript File</A></H2>
<P>CUPS PostScript files are device-dependent Adobe PostScript program
files. The PostScript language is described in the <A HREF=http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf>
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
files. The PostScript language is described in the <A HREF="http://partners.adobe.com/supportservice/devrelations/PDFS/TN/PLRM.pdf">
Adobe PostScript Language Reference Manual, Third Edition</A>. </P>
<P>The MIME type for CUPS PostScript files is <CODE>
application/vnd.cups-postscript</CODE>. </P>
<H2><A NAME=4_4>4.4 CUPS Raster File</A></H2>
<H2><A NAME="4_4">4.4 CUPS Raster File</A></H2>
<P>CUPS raster files are device-dependent raster image files that
contain a PostScript page device dictionary and device-dependent raster
imagery for each page in the document. These files are used to
@@ -491,8 +593,8 @@ automatically. </P>
Each page starts with a page device dictionary header and is followed
immediately by the raster data for that page.
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TR><TH WIDTH=10%>Bytes</TH><TH WIDTH=20%>Description</TH><TH>Values</TH>
<TABLE BORDER="1" WIDTH="80%">
<TR><TH WIDTH="10%">Bytes</TH><TH WIDTH="20%">Description</TH><TH>Values</TH>
</TR>
<TR><TD>0-63</TD><TD>MediaClass</TD><TD>Nul-terminated ASCII string</TD></TR>
<TR><TD>64-127</TD><TD>MediaColor</TD><TD>Nul-terminated ASCII string</TD>
@@ -599,40 +701,40 @@ CMYK CMYK)
</P>
<P>The MIME type for CUPS Raster files is <CODE>
application/vnd.cups-raster</CODE>. </P>
<H2><A NAME=4_5>4.5 CUPS Raw Files</A></H2>
<H2><A NAME="4_5">4.5 CUPS Raw Files</A></H2>
<P>Raw files are printer-dependent print files that are in a format
suitable to the destination printer (e.g. HP-PCL, HP-RTL, etc.) The
MIME type for CUPS Raw files is <CODE>application/vnd.cups-raw</CODE>. </P>
<H2><A NAME=4_6>4.6 Internet Printing Protocol</A></H2>
<H2><A NAME="4_6">4.6 Internet Printing Protocol</A></H2>
<P>The Internet Printing Protocol is described by the following RFCs: </P>
<UL>
<LI><A HREF=http://www.ietf.org/rfc/rfc2565.txt>RFC 2565: Internet
<LI><A HREF="http://www.ietf.org/rfc/rfc2565.txt"> RFC 2565: Internet
Printing Protocol/1.0: Encoding and Transport</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2566.txt>RFC 2566: Internet
<LI><A HREF="http://www.ietf.org/rfc/rfc2566.txt"> RFC 2566: Internet
Printing Protocol/1.0: Model and Semantics</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2567.txt>RFC 2567: Design Goals
for an Internet Printing Protocol</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2568.txt>RFC 2568: Rationale for
the Structure of the Model and Protocol for the Internet Printing
<LI><A HREF="http://www.ietf.org/rfc/rfc2567.txt"> RFC 2567: Design
Goals for an Internet Printing Protocol</A></LI>
<LI><A HREF="http://www.ietf.org/rfc/rfc2568.txt"> RFC 2568: Rationale
for the Structure of the Model and Protocol for the Internet Printing
Protocol</A></LI>
<LI><A HREF=http://www.ietf.org/rfc/rfc2569.txt>RFC 2569: Mapping
<LI><A HREF="http://www.ietf.org/rfc/rfc2569.txt"> RFC 2569: Mapping
between LPD and IPP Protocols</A></LI>
</UL>
<P>The URI method name for IPP is &quot;ipp&quot;. </P>
<P>CUPS defines the following extension operations to IPP. </P>
<H3><A NAME=4_6_1>4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
<H3><A NAME="4_6_1">4.6.1 Get Default Destination (CUPS_GET_DEFAULT =
0x4001)</A></H3>
<P>The get default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
are <CODE>attributes-charset</CODE> and <CODE>
attributes-natural-language</CODE>. </P>
<P>Get default destination will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_6_2>4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
<H3><A NAME="4_6_2">4.6.2 Get Printers (CUPS_GET_PRINTERS = 0x4002)</A></H3>
<P>The get printers operation returns the printer attributes for all
printers known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get printers will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_6_3>4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
<H3><A NAME="4_6_3">4.6.3 Add Printer (CUPS_ADD_PRINTER = 0x4003)</A></H3>
<P>The add printer operation adds or replaces the specified printer.
The <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
and <CODE>printer-uri</CODE> attributes are required. </P>
@@ -645,19 +747,19 @@ body. If a valid interface script or PPD file is not provided then the
printer is treated as a generic PostScript device. </P>
<P>Add printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_6_4>4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
<H3><A NAME="4_6_4">4.6.4 Delete Printer (CUPS_DELETE_PRINTER = 0x4004)</A>
</H3>
<P>The delete printer operation removes the specified printer. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete printer will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_6_5>4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
<H3><A NAME="4_6_5">4.6.5 Get Classes (CUPS_GET_CLASSES = 0x4005)</A></H3>
<P>The get classes operation returns the printer attributes for all
classes known to the system. The only required attributes are <CODE>
attributes-charset</CODE> and <CODE>attributes-natural-language</CODE>. </P>
<P>Get classes will only return <CODE>ipp-ok</CODE>. </P>
<H3><A NAME=4_6_6>4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
<H3><A NAME="4_6_6">4.6.6 Add Class (CUPS_ADD_CLASS = 0x4006)</A></H3>
<P>The add class operation adds or replaces the specified class. The <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE> attributes are required. </P>
@@ -667,27 +769,27 @@ required when initially adding a printer and optional when modifying a
printer. </P>
<P>Add class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-authorized</CODE>
, <CODE>ipp-bad-request</CODE>, or <CODE>ipp-attributes</CODE>. </P>
<H3><A NAME=4_6_7>4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
<H3><A NAME="4_6_7">4.6.7 Delete Class (CUPS_DELETE_CLASS = 0x4007)</A></H3>
<P>The delete class operation removes the specified class. The only
required attributes are <CODE>attributes-charset</CODE>, <CODE>
attributes-natural-language</CODE>, and <CODE>printer-uri</CODE>. </P>
<P>Delete class will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_6_8>4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
<H3><A NAME="4_6_8">4.6.8 Accept Jobs (CUPS_ACCEPT_JOBS = 0x4008)</A></H3>
<P>The accept jobs operation allows jobs to be accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Accept jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_6_9>4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
<H3><A NAME="4_6_9">4.6.9 Reject Jobs (CUPS_REJECT_JOBS = 0x4009)</A></H3>
<P>The reject jobs operation prevents jobs from being accepted by the
specified destination. The only required attributes are <CODE>
attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>,
and <CODE>printer-uri</CODE>. </P>
<P>Reject jobs will return <CODE>ipp-ok</CODE>, <CODE>ipp-not-found</CODE>
, or <CODE>ipp-not-authorized</CODE>. </P>
<H3><A NAME=4_6_10>4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
<H3><A NAME="4_6_10">4.6.10 Set Default Destination (CUPS_SET_DEFAULT =
0x400A)</A></H3>
<P>The set default destination operation returns the printer attributes
for the system default printer or class. The only required attributes
@@ -696,16 +798,16 @@ are <CODE>attributes-charset</CODE>, <CODE>attributes-natural-language</CODE>
<P>Set default destination will return <CODE>ipp-ok</CODE>, <CODE>
ipp-not-authorized</CODE>, <CODE>ipp-bad-request</CODE>, or <CODE>
ipp-not-found</CODE>. </P>
<H2><A NAME=4_7>4.7 Line Printer Daemon Protocol</A></H2>
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF=http://www.ietf.org/rfc/rfc1179.txt>
<H2><A NAME="4_7">4.7 Line Printer Daemon Protocol</A></H2>
<P>The Line Printer Daemon (LPD) protocol is described by <A HREF="http://www.ietf.org/rfc/rfc1179.txt">
RFC 1179: Line Printer Daemon Protocol</A>. </P>
<P>The URI method name for LPD is &quot;lpd&quot;. </P>
<H2><A NAME=4_8>4.8 Server Message Block Protocol</A></H2>
<H2><A NAME="4_8">4.8 Server Message Block Protocol</A></H2>
<P>The Server Message Block (SMB) and related Common Internet File
System (CIFS) protocols are described at <A HREF=http://anu.samba.org/cifs>
System (CIFS) protocols are described at <A HREF="http://anu.samba.org/cifs">
http://anu.samba.org/cifs</A>. </P>
<P>The URI method name for SMB is &quot;smb&quot;. </P>
<H1><A NAME=5>5 5 - Directories</A></H1>
<H1><A NAME="5">5 5 - Directories</A></H1>
<DL>
<DT>/usr/bin </DT>
<DD>The <CODE>cancel</CODE>, <CODE>lp</CODE>, <CODE>lpq</CODE>, <CODE>
@@ -746,8 +848,8 @@ page_log</CODE> files reside here. </DD>
<DT>/var/cups/requests </DT>
<DD>This directory contains pending print job files. </DD>
</DL>
<H1 TYPE=A VALUE=1><A NAME=6>A Glossary</A></H1>
<H2><A NAME=6_1>A.1 Terms</A></H2>
<H1 TYPE="A" VALUE="1"><A NAME="6">A Glossary</A></H1>
<H2><A NAME="6_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
@@ -760,7 +862,7 @@ page_log</CODE> files reside here. </DD>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=6_2>A.2 Acronyms</A></H2>
<H2><A NAME="6_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
+1169 -1170
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
Arquivo binário não exibido.
+265 -116
Ver Arquivo
@@ -1,99 +1,207 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>CUPS Software Administrators Manual</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.1">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.3">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Software Administrators Manual</H1></A><BR>
CUPS-SAM-1.0.1<BR>
<CENTER><A HREF="#CONTENTS"><H1>CUPS Software Administrators Manual</H1></A><BR>
CUPS-SAM-1.0.3<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>Preface</A></B>
<BR><B><A HREF="#1">Preface</A></B>
<UL>
<LI><A HREF=#1_1>System Overview</A></LI>
<LI><A HREF=#1_2>Document Overview</A></LI>
<LI><A HREF="#1_1">System Overview</A></LI>
<LI><A HREF="#1_2">Document Overview</A></LI>
</UL>
<B><A HREF=#2>1 - Printing System Overview</A></B>
<B><A HREF="#2">1 - Printing System Overview</A></B>
<UL>
<LI><A HREF=#2_1>The Printing Problem</A></LI>
<LI><A HREF=#2_2>The Technology</A></LI>
<LI><A HREF=#2_3>Jobs</A></LI>
<LI><A HREF=#2_4>Classes</A></LI>
<LI><A HREF=#2_5>Filters</A></LI>
<LI><A HREF=#2_6>Printer Drivers</A></LI>
<LI><A HREF=#2_7>Networking</A></LI>
<LI><A HREF="#2_1">The Printing Problem</A></LI>
<LI><A HREF="#2_2">The Technology</A></LI>
<LI><A HREF="#2_3">Jobs</A></LI>
<LI><A HREF="#2_4">Classes</A></LI>
<LI><A HREF="#2_5">Filters</A></LI>
<LI><A HREF="#2_6">Printer Drivers</A></LI>
<LI><A HREF="#2_7">Networking</A></LI>
</UL>
<B><A HREF=#3>2 - Building and Installing CUPS</A></B>
<B><A HREF="#3">2 - Building and Installing CUPS</A></B>
<UL>
<LI><A HREF=#3_1>Installing a Source Distribution</A></LI>
<LI><A HREF="#3_1">Installing a Source Distribution</A></LI>
<UL>
<LI><A HREF=#3_1_1>Requirements</A></LI>
<LI><A HREF=#3_1_2>Compiling CUPS</A></LI>
<LI><A HREF=#3_1_3>Installing the Software</A></LI>
<LI><A HREF=#3_1_4>Running the Software</A></LI>
<LI><A HREF="#3_1_1">Requirements</A></LI>
<LI><A HREF="#3_1_2">Compiling CUPS</A></LI>
<LI><A HREF="#3_1_3">Installing the Software</A></LI>
<LI><A HREF="#3_1_4">Running the Software</A></LI>
</UL>
<LI><A HREF=#binary>Installing a Binary Distribution</A></LI>
<LI><A HREF="#binary">Installing a Binary Distribution</A></LI>
</UL>
<B><A HREF=#4>3 - Printer Queue Management</A></B>
<B><A HREF="#4">3 - Printer Queue Management</A></B>
<UL>
<LI><A HREF=#4_1>The lpadmin Command</A></LI>
<LI><A HREF=#4_2>Adding and Modifying Printers</A></LI>
<LI><A HREF="#4_1">The lpadmin Command</A></LI>
<LI><A HREF="#4_2">Adding and Modifying Printers</A></LI>
<UL>
<LI><A HREF=#4_2_1>Using Standard Printer Drivers</A></LI>
<LI><A HREF="#4_2_1">Using Standard Printer Drivers</A></LI>
</UL>
<LI><A HREF=#4_3>Removing Printers</A></LI>
<LI><A HREF=#4_4>Printer Classes</A></LI>
<LI><A HREF=#4_5>Setting the Default Printer</A></LI>
<LI><A HREF=#4_6>Starting and Stopping Printers</A></LI>
<LI><A HREF=#4_7>Accepting and Rejecting Print Jobs</A></LI>
<LI><A HREF="#4_3">Removing Printers</A></LI>
<LI><A HREF="#4_4">Printer Classes</A></LI>
<LI><A HREF="#4_5">Setting the Default Printer</A></LI>
<LI><A HREF="#4_6">Starting and Stopping Printers</A></LI>
<LI><A HREF="#4_7">Accepting and Rejecting Print Jobs</A></LI>
</UL>
<B><A HREF=#5>4 - Printing System Management</A></B>
<B><A HREF="#5">4 - Printing System Management</A></B>
<UL>
<LI><A HREF=#5_1>Changing the Configuration Files</A></LI>
<LI><A HREF=#5_2>Temporary Files</A></LI>
<LI><A HREF=#5_3>Network Configuration</A></LI>
<LI><A HREF="#5_1">Changing the Configuration Files</A></LI>
<LI><A HREF="#5_2">Temporary Files</A></LI>
<LI><A HREF="#5_3">Network Configuration</A></LI>
<UL>
<LI><A HREF=#5_3_1>Port</A></LI>
<LI><A HREF=#5_3_2>Listen</A></LI>
<LI><A HREF=#5_3_3>BrowsePort</A></LI>
<LI><A HREF=#5_3_4>BrowseAddress</A></LI>
<LI><A HREF="#5_3_1">Port</A></LI>
<LI><A HREF="#5_3_2">Listen</A></LI>
<LI><A HREF="#5_3_3">BrowsePort</A></LI>
<LI><A HREF="#5_3_4">BrowseAddress</A></LI>
</UL>
<LI><A HREF=#5_4>Printer Security</A></LI>
<LI><A HREF="#5_4">Printer Security</A></LI>
<UL>
<LI><A HREF=#5_4_1>Location</A></LI>
<LI><A HREF=#5_4_2>Order</A></LI>
<LI><A HREF=#5_4_3>Allow</A></LI>
<LI><A HREF=#5_4_4>Deny</A></LI>
<LI><A HREF=#5_4_5>AuthType</A></LI>
<LI><A HREF=#5_4_6>AuthClass</A></LI>
<LI><A HREF=#5_4_7>AuthGroupName</A></LI>
<LI><A HREF=#5_4_8>SystemGroup</A></LI>
<LI><A HREF="#5_4_1">Location</A></LI>
<LI><A HREF="#5_4_2">Order</A></LI>
<LI><A HREF="#5_4_3">Allow</A></LI>
<LI><A HREF="#5_4_4">Deny</A></LI>
<LI><A HREF="#5_4_5">AuthType</A></LI>
<LI><A HREF="#5_4_6">AuthClass</A></LI>
<LI><A HREF="#5_4_7">AuthGroupName</A></LI>
<LI><A HREF="#5_4_8">SystemGroup</A></LI>
</UL>
<LI><A HREF=#5_5>File Formats</A></LI>
<LI><A HREF="#5_5">File Formats</A></LI>
<UL>
<LI><A HREF=#5_5_1>mime.types</A></LI>
<LI><A HREF=#5_5_2>mime.convs</A></LI>
<LI><A HREF="#5_5_1">mime.types</A></LI>
<LI><A HREF="#5_5_2">mime.convs</A></LI>
</UL>
</UL>
<B><A HREF=#6>5 - Printer Accounting</A></B>
<B><A HREF="#6">5 - Printer Accounting</A></B>
<UL>
<LI><A HREF=#6_1>Where to Find the Log Files</A></LI>
<LI><A HREF=#6_2>The access_log File</A></LI>
<LI><A HREF=#6_3>The error_log File</A></LI>
<LI><A HREF=#6_4>The page_log File</A></LI>
<LI><A HREF="#6_1">Where to Find the Log Files</A></LI>
<LI><A HREF="#6_2">The access_log File</A></LI>
<LI><A HREF="#6_3">The error_log File</A></LI>
<LI><A HREF="#6_4">The page_log File</A></LI>
</UL>
<B><A HREF="#7">A - Using CUPS with SAMBA</A></B>
<UL>
<LI><A HREF="#7_1">What is SAMBA?</A></LI>
<LI><A HREF="#7_2">How Do I Configure SAMBA for CUPS?</A></LI>
<LI><A HREF="#7_3">How Do I Configure CUPS for SAMBA?</A></LI>
</UL>
<HR>
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1 ALIGN="RIGHT"><A NAME="1">Preface</A></H1>
This software administrators manual provides printer administration
information for the Common UNIX Printing System (&quot;CUPS&quot;) Version 1.0.1.
<H2><A NAME=1_1>System Overview</A></H2>
information for the Common UNIX Printing System (&quot;CUPS&quot;) Version 1.0.3.
<H2><A NAME="1_1">System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -109,7 +217,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_2>Document Overview</A></H2>
<H2><A NAME="1_2">Document Overview</A></H2>
<P>This software administrators manual is organized into the following
sections:</P>
<UL>
@@ -118,11 +226,12 @@ sections:</P>
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
<LI>A - Using CUPS with SAMBA</LI>
</UL>
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
<H1 ALIGN="RIGHT"><A NAME="2">1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing
System works. </P>
<H2><A NAME=2_1>The Printing Problem</A></H2>
<H2><A NAME="2_1">The Printing Problem</A></H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or system
in place for supporting printers. Among the solutions previously
@@ -144,7 +253,7 @@ that supports a wide range of file formats with little or no effort.
Since CUPS provides both the System V and Berkeley printing commands,
users (and applications) can reap the benefits of this new technology
with no changes. </P>
<H2><A NAME=2_2>The Technology</A></H2>
<H2><A NAME="2_2">The Technology</A></H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
@@ -164,17 +273,17 @@ using their web browser. </P>
Basic authentication and domain or IP-based access control. Digest
authentication and TLS encryption will be available in future versions
of CUPS. </P>
<H2><A NAME=2_3>Jobs</A></H2>
<H2><A NAME="2_3">Jobs</A></H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority. </P>
<H2><A NAME=2_4>Classes</A></H2>
<H2><A NAME="2_4">Classes</A></H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
sent to a class are forwarded to the first available printer in the
class. </P>
<H2><A NAME=2_5>Filters</A></H2>
<H2><A NAME="2_5">Filters</A></H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
@@ -190,13 +299,13 @@ printer. </P>
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols. </P>
<H2><A NAME=2_6>Printer Drivers</A></H2>
<H2><A NAME="2_6">Printer Drivers</A></H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS. </P>
<H2><A NAME=2_7>Networking</A></H2>
<H2><A NAME="2_7">Networking</A></H2>
<P>Printers and classes on the local system are automatically shared
with other systems on the network. This allows you to setup one system
to print to a printer and use this system as a printer server or spool
@@ -212,13 +321,13 @@ example, so that you aren't relying on a single system for printing.
Because this also works with printer classes, you can setup multiple
servers and printers and never worry about a &quot;single point of failure&quot;
unless all of the printers and servers goes down! </P>
<H1 ALIGN=RIGHT><A NAME=3>2 - Building and Installing CUPS</A></H1>
<H1 ALIGN="RIGHT"><A NAME="3">2 - Building and Installing CUPS</A></H1>
<P>This chapter shows how to build and install the Common UNIX Printing
System. If you are installing a binary distribution from the CUPS web
site, proceed to the section titled, <A HREF=#binary>Installing a
site, proceed to the section titled, <A HREF="#binary">Installing a
Binary Distribution</A>. </P>
<H2><A NAME=3_1>Installing a Source Distribution</A></H2>
<H3><A NAME=3_1_1>Requirements</A></H3>
<H2><A NAME="3_1">Installing a Source Distribution</A></H2>
<H3><A NAME="3_1_1">Requirements</A></H3>
<P>You'll need an ANSI C compiler to build CUPS on your system. As its
name implies, CUPS is designed to run on the UNIX operating system,
however the CUPS interface library and most of the filters and backends
@@ -229,24 +338,24 @@ reduced functionality. Easy Software Products maintains a mirror of the
current versions of these libraries at: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.easysw.com/pub/libraries>ftp://ftp.easysw.com/pub/libraries</A>
<A HREF="ftp://ftp.easysw.com/pub/libraries">ftp://ftp.easysw.com/pub/libraries</A>
</PRE>
</UL>
<P>If you make changes to the man pages you'll need GNU groff or
another nroff-like package. GNU groff is available from: </P>
<UL>
<PRE>
<A HREF=ftp://ftp.gnu.org/pub/groff>ftp://ftp.gnu.org/pub/groff</A>
<A HREF="ftp://ftp.gnu.org/pub/groff">ftp://ftp.gnu.org/pub/groff</A>
</PRE>
</UL>
<P>The documentation is formatted using the HTMLDOC software. If you
need to make changes you can get the HTMLDOC software from: </P>
<UL>
<PRE>
<A HREF=http://www.easysw.com/htmldoc>http://www.easysw.com/htmldoc</A>
<A HREF="http://www.easysw.com/htmldoc">http://www.easysw.com/htmldoc</A>
</PRE>
</UL>
<H3><A NAME=3_1_2>Compiling CUPS</A></H3>
<H3><A NAME="3_1_2">Compiling CUPS</A></H3>
<P>CUPS uses GNU autoconf to configure the makefiles and source code
for your system. To configure CUPS for your system type: </P>
<UL>
@@ -281,14 +390,14 @@ LDFLAGS</CODE> environment variables prior to running configure: </P>
</PRE>
</UL>
<P>to build the software. </P>
<H3><A NAME=3_1_3>Installing the Software</A></H3>
<H3><A NAME="3_1_3">Installing the Software</A></H3>
<P>To install the software type: </P>
<UL>
<PRE>
% make install ENTER
</PRE>
</UL>
<H3><A NAME=3_1_4>Running the Software</A></H3>
<H3><A NAME="3_1_4">Running the Software</A></H3>
Once you have installed the software you can start the CUPS daemon by
typing:
<UL>
@@ -296,7 +405,7 @@ typing:
% /usr/sbin/cupsd &amp; ENTER
</PRE>
</UL>
<H2><A NAME=binary>Installing a Binary Distribution</A></H2>
<H2><A NAME="binary">Installing a Binary Distribution</A></H2>
<P>We are currently distributing CUPS binary distributions in TAR
format with installation and removal scripts. </P>
<UL><B>WARNING:</B>
@@ -316,16 +425,16 @@ installation script with: </P>
</UL>
<P>After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically. </P>
<H1 ALIGN=RIGHT><A NAME=4>3 - Printer Queue Management</A></H1>
<H1 ALIGN="RIGHT"><A NAME="4">3 - Printer Queue Management</A></H1>
<P>This chapter discusses how to add, modify, and delete print queues
on your system. </P>
<H2><A NAME=4_1>The lpadmin Command</A></H2>
<H2><A NAME="4_1">The lpadmin Command</A></H2>
<P>The <CODE>lpadmin</CODE> command allows you to perform most printer
administration tasks from the command-line. Since <CODE>lpadmin</CODE>
is also a System V printing system command, it is located in the <CODE>
/usr/lib</CODE> directory instead of a more common one like <CODE>
/usr/bin</CODE> or <CODE>/usr/sbin</CODE>. </P>
<H2><A NAME=4_2>Adding and Modifying Printers</A></H2>
<H2><A NAME="4_2">Adding and Modifying Printers</A></H2>
<P>To add a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-p&quot; option: </P>
<UL>
@@ -366,6 +475,7 @@ character:
</UL>
</DD>
<DT>smb://[username:password@]hostname/queue </DT>
<DT>smb://[username:password@]workgroup/hostname/queue </DT>
<DD>Sends all output to the specified SMB (Windows) printer queue
using the SAMBA software. </DD>
<DT>socket://hostname[:port] </DT>
@@ -376,7 +486,7 @@ protocol. The <I>port</I> parameter defaults to 9100. </DD>
file to use for this printer. Many options (such as media size, etc.)
will not be available if you omit this part of the <CODE>lpadmin</CODE>
command. </P>
<H3><A NAME=4_2_1>Using Standard Printer Drivers</A></H3>
<H3><A NAME="4_2_1">Using Standard Printer Drivers</A></H3>
<P>The <CODE>lpadmin</CODE> command allows you to use &quot;standard&quot; PPD
files and interface scripts located in the <CODE>/usr/share/cups/model</CODE>
directory with the &quot;-m&quot; option: </P>
@@ -394,7 +504,7 @@ would use: </P>
% /usr/lib/lpadmin -pDeskJet -E -vparallel:/dev/par1 -mdeskjet.ppd ENTER
</PRE>
</UL>
<H2><A NAME=4_3>Removing Printers</A></H2>
<H2><A NAME="4_3">Removing Printers</A></H2>
<P>To remove a printer to CUPS you simply run the <CODE>lpadmin</CODE>
command with the &quot;-x&quot; option: </P>
<UL>
@@ -402,7 +512,7 @@ would use: </P>
% /usr/lib/lpadmin -x<I>printer</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_4>Printer Classes</A></H2>
<H2><A NAME="4_4">Printer Classes</A></H2>
<P>CUPS allows you to group similar printers in a <I>printer class</I>.
When a user sends a print job to a class, the job will be processed by
the first available printer in that class. </P>
@@ -420,7 +530,7 @@ remove a class just use the &quot;-x&quot; option: </P>
% /usr/lib/lpadmin -x<I>class</I> ENTER
</PRE>
</UL>
<H2><A NAME=4_5>Setting the Default Printer</A></H2>
<H2><A NAME="4_5">Setting the Default Printer</A></H2>
<P>To set the default printer or class simply run the <CODE>lpadmin</CODE>
command with the &quot;-d&quot; option: </P>
<UL>
@@ -429,7 +539,7 @@ remove a class just use the &quot;-x&quot; option: </P>
</PRE>
</UL>
<P>The <I>destination</I> argument is the name of the printer or class. </P>
<H2><A NAME=4_6>Starting and Stopping Printers</A></H2>
<H2><A NAME="4_6">Starting and Stopping Printers</A></H2>
<P>The <CODE>enable</CODE> and <CODE>disable</CODE> commands start and
stop printer queues, respectively: </P>
<UL>
@@ -442,7 +552,7 @@ stop printer queues, respectively: </P>
won't actually print any files until they are restarted. This is useful
if the printer malfunctions and you need time to correct the problem.
Any queues jobs are printed after the printer is enabled (started). </P>
<H2><A NAME=4_7>Accepting and Rejecting Print Jobs</A></H2>
<H2><A NAME="4_7">Accepting and Rejecting Print Jobs</A></H2>
<P>The <CODE>accept</CODE> and <CODE>reject</CODE> commands accept and
reject print jobs for the named printer, respectively: </P>
<UL>
@@ -456,9 +566,9 @@ jobs. A printer can also be rejecting new print jobs while it finishes
those that have been queued. This is useful for when you must perform
maintenance on the printer and will not have it available to users for
a long period of time. </P>
<H1 ALIGN=RIGHT><A NAME=5>4 - Printing System Management</A></H1>
<H1 ALIGN="RIGHT"><A NAME="5">4 - Printing System Management</A></H1>
<P>This chapter shows how you can configure the CUPS server. </P>
<H2><A NAME=5_1>Changing the Configuration Files</A></H2>
<H2><A NAME="5_1">Changing the Configuration Files</A></H2>
<P>All of the server configuration files are located in the <CODE>
/var/cups/conf</CODE> directory. Once you have made a change to a file
you need to restart the CUPS server by sending it a HUP signal or using
@@ -471,7 +581,7 @@ the supplied script &quot;<CODE>cups.sh</CODE>&quot;: </P>
<P>The binary distribution installs the script in the <CODE>init.d</CODE>
directory with the name <CODE>lp</CODE> or <CODE>lpd</CODE> depending
on the vendor-supplied printing system. </P>
<H2><A NAME=5_2>Temporary Files</A></H2>
<H2><A NAME="5_2">Temporary Files</A></H2>
<P>Normally CUPS puts all of its temporary files in <CODE>/var/tmp</CODE>
. If you'd like to change this directory you'll need to edit the <CODE>
/var/cups/conf/cupsd.conf</CODE> file. </P>
@@ -492,19 +602,19 @@ TempDir <I>/foo/bar/tmp</I>
</UL>
<P>Finally, restart the server as outlined in the first section of this
chapter. </P>
<H2><A NAME=5_3>Network Configuration</A></H2>
<H2><A NAME="5_3">Network Configuration</A></H2>
<P>The default configuration of the CUPS server listens for connections
from all network interfaces on port 631 (the standard IPP port).
Administration functions are limited to local connections with the
appropriate username and password. </P>
<P>If you'd like to limit access to your system you'll need to edit the <CODE>
/var/cups/conf/cupsd.conf</CODE> file. </P>
<H3><A NAME=5_3_1>Port</A></H3>
<H3><A NAME="5_3_1">Port</A></H3>
<P>The <CODE>Port</CODE> directive specifies a port to listen on for
all interfaces. Besides the standard IPP port (631) you can also setup
your server to listen on the HTTP port (80) to use your CUPS server as
a standard web server as well. </P>
<H3><A NAME=5_3_2>Listen</A></H3>
<H3><A NAME="5_3_2">Listen</A></H3>
<P>The <CODE>Listen</CODE> directive specifies a listening address and
port, extending the functionality of the <CODE>Port</CODE> directive.
If you want to allow connections only from the local machine you can
@@ -518,7 +628,7 @@ Listen 127.0.0.1:631
<P>If you want to limit access to a specific network/subnet, make sure
you specify only the network address and not your system's network
address! </P>
<H3><A NAME=5_3_3>BrowsePort</A></H3>
<H3><A NAME="5_3_3">BrowsePort</A></H3>
<P>The <CODE>BrowsePort</CODE> directive controls which port is
monitored for remote printers. By default it is set to the IPP port
(631), however you can change it as needed. </P>
@@ -526,7 +636,7 @@ monitored for remote printers. By default it is set to the IPP port
<P>You must set the <CODE>BrowsePort</CODE> to the same value on all
of the systems that you want to see. </P>
</UL>
<H3><A NAME=5_3_4>BrowseAddress</A></H3>
<H3><A NAME="5_3_4">BrowseAddress</A></H3>
<P>The <CODE>BrowseAddress</CODE> directive specifies a broadcast
address to use when sending printer status updates over the network.
The default browse address is <CODE>255.255.255.255</CODE> which will
@@ -536,10 +646,10 @@ send printer information to all subnets. </P>
bits, printer browsing (and in fact all broadcast reception) will not
work. This problem appears to be fixed in HP-UX 11.0. </P>
</UL>
<H2><A NAME=5_4>Printer Security</A></H2>
<H2><A NAME="5_4">Printer Security</A></H2>
<P>CUPS provides IP and domain-name based access control and Basic
authentication for authentication. </P>
<H3><A NAME=5_4_1>Location</A></H3>
<H3><A NAME="5_4_1">Location</A></H3>
<P>The <CODE>Location</CODE> directive defines access control for a
specific HTTP directory. The following pseudo directories are provided
by the CUPS server: </P>
@@ -570,7 +680,7 @@ Allow From 127.0.0.1
&lt;/Location&gt;
</PRE>
</UL>
<H3><A NAME=5_4_2>Order</A></H3>
<H3><A NAME="5_4_2">Order</A></H3>
<P>The <CODE>Order</CODE> directive defines the default access control.
The following values are supported: </P>
<UL>
@@ -581,7 +691,7 @@ listed in an <CODE>Allow</CODE> directive. </LI>
</UL>
<P>The <CODE>Order</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_3>Allow</A></H3>
<H3><A NAME="5_4_3">Allow</A></H3>
<P>The <CODE>Allow</CODE> directive specifies a hostname, IP address,
or network that is allowed access to the server: </P>
<UL>
@@ -603,7 +713,7 @@ Allow from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
Allow</CODE> directives can be used to allow access for multiple hosts
or networks. The <CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TABLE BORDER="1" WIDTH="80%">
<TR><TH>mm</TH><TH>netmask</TH></TR>
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
@@ -618,7 +728,7 @@ or networks. The <CODE>/mm</CODE> notation specifies a CIDR netmask:
</P>
<P>The <CODE>Allow</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_4>Deny</A></H3>
<H3><A NAME="5_4_4">Deny</A></H3>
<P>The <CODE>Deny</CODE> directive specifies a hostname, IP address, or
network that is allowed access to the server: </P>
<UL>
@@ -640,7 +750,7 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
directives can be used to allow access for multiple hosts or networks.
The <CODE>/mm</CODE> notation specifies a CIDR netmask:
<CENTER>
<TABLE BORDER=1 WIDTH=80%>
<TABLE BORDER="1" WIDTH="80%">
<TR><TH>mm</TH><TH>netmask</TH></TR>
<TR><TD>0</TD><TD>0.0.0.0</TD></TR>
<TR><TD>1</TD><TD>128.0.0.0</TD></TR>
@@ -655,7 +765,7 @@ Deny from nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
</P>
<P>The <CODE>Deny</CODE> directive must appear inside a <CODE>Location</CODE>
directive. </P>
<H3><A NAME=5_4_5>AuthType</A></H3>
<H3><A NAME="5_4_5">AuthType</A></H3>
<P>The <CODE>AuthType</CODE> directive defines the type of
authentication to perform: </P>
<UL>
@@ -666,7 +776,7 @@ using the UNIX password and group files. </LI>
</UL>
<P>The <CODE>AuthType</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_6>AuthClass</A></H3>
<H3><A NAME="5_4_6">AuthClass</A></H3>
<P>The <CODE>AuthClass</CODE> directive defines what level of <CODE>
Basic</CODE> access is required: </P>
<UL>
@@ -682,21 +792,21 @@ AuthGroupName</CODE> directive. </LI>
</UL>
<P>The <CODE>AuthClass</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_7>AuthGroupName</A></H3>
<H3><A NAME="5_4_7">AuthGroupName</A></H3>
<P>The <CODE>AuthGroupName</CODE> directive sets the group to use for <CODE>
Group</CODE> authentication. </P>
<P>The <CODE>AuthGroupName</CODE> directive must appear inside a <CODE>
Location</CODE> directive. </P>
<H3><A NAME=5_4_8>SystemGroup</A></H3>
<H3><A NAME="5_4_8">SystemGroup</A></H3>
<P>The <CODE>SystemGroup</CODE> directive sets the administration group
used when authenticating the <CODE>System</CODE> type. It defaults to
the &quot;sys&quot; group. </P>
<H2><A NAME=5_5>File Formats</A></H2>
<H2><A NAME="5_5">File Formats</A></H2>
<P>CUPS provides a MIME-based file typing and filtering mechanism to
convert files to a printable format for each printer. The <CODE>
mime.types</CODE> and <CODE>mime.convs</CODE> files define the file
type and filters that are available on the system. </P>
<H3><A NAME=5_5_1>mime.types</A></H3>
<H3><A NAME="5_5_1">mime.types</A></H3>
<P>The <CODE>mime.types</CODE> defines the known file types. Each line
of the file starts with the MIME type and may be followed by one or
more file type recognition rules. For example, the <CODE>text/html</CODE>
@@ -738,7 +848,7 @@ identical (network or &quot;big-endian&quot; byte order) </LI>
<LI><CODE>locale(&quot;string&quot;)</CODE> - True if current locale matches
string </LI>
</UL>
<H3><A NAME=5_5_2>mime.convs</A></H3>
<H3><A NAME="5_5_2">mime.convs</A></H3>
<P>The <CODE>mime.convs</CODE> file defines all of the filter programs
that are known to the system. Each line consists of: </P>
<UL>
@@ -775,13 +885,13 @@ program job user title options [filename]
<P>If specified, the <I>filename</I> argument defines a file to read
when filtering, otherwise the filter must read from the standard input.
All filtered output must go to the standard output. </P>
<H1 ALIGN=RIGHT><A NAME=6>5 - Printer Accounting</A></H1>
<H1 ALIGN="RIGHT"><A NAME="6">5 - Printer Accounting</A></H1>
This chapter describes the CUPS log files.
<H2><A NAME=6_1>Where to Find the Log Files</A></H2>
<H2><A NAME="6_1">Where to Find the Log Files</A></H2>
<P>The log files are normally stored in the <CODE>/var/cups/logs</CODE>
directory. You can change this by editing the <CODE>
/var/cups/conf/cupsd.conf</CODE> configuration file. </P>
<H2><A NAME=6_2>The access_log File</A></H2>
<H2><A NAME="6_2">The access_log File</A></H2>
<P>The <CODE>access_log</CODE> file lists each HTTP resource that is
accessed by a web browser or CUPS/IPP client. Each line is in the
so-called &quot;Common Log Format&quot; used by many web servers and web
@@ -820,7 +930,7 @@ above. </P>
<P>The <I>bytes</I> field contains the number of bytes in the request.
For POST requests the <I>bytes</I> field contains the number of bytes
of non-IPP data that is received from the client. </P>
<H2><A NAME=6_3>The error_log File</A></H2>
<H2><A NAME="6_3">The error_log File</A></H2>
<P>The <CODE>error_log</CODE> file lists messages from the scheduler
(errors, warnings, etc.): </P>
<UL>
@@ -843,7 +953,7 @@ I [20/May/1999:19:22:24 +0000] Job 2 was cancelled by 'mike'.
page started printing. The format of this field is identical to the <I>
data-time</I> field in the <CODE>access_log</CODE> file. </P>
<P>The <I>message</I> fields contains a free-form textual message. </P>
<H2><A NAME=6_4>The page_log File</A></H2>
<H2><A NAME="6_4">The page_log File</A></H2>
<P>The <CODE>page_log</CODE> file lists each page that is sent to a
printer. Each line contains the following information: </P>
<UL>
@@ -869,5 +979,44 @@ data-time</I> field in the <CODE>access_log</CODE> file. </P>
number and number of copies being printed of that page. For printer
that can not produce copies on their own, the <I>num-pages</I> field
will always be 1. </P>
<H1 ALIGN="RIGHT"><A NAME="7">A - Using CUPS with SAMBA</A></H1>
<P>This appendix describes how to use CUPS with SAMBA. </P>
<H2><A NAME="7_1">What is SAMBA?</A></H2>
<P>In case you haven't heard of SAMBA, it is basically a software
package that allows you to configure your UNIX system as a Windows file
and printer server. It also allows you to access files and printers on
a Windows system. Like CUPS, SAMBA is free software. </P>
<P>SAMBA version 2.0.6 is the first release of SAMBA that supports
CUPS. You can download SAMBA from: </P>
<P ALIGN="CENTER"><A HREF="http://www.samba.org">http://www.samba.org</A>
</P>
<H2><A NAME="7_2">How Do I Configure SAMBA for CUPS?</A></H2>
<P>To configure SAMBA for CUPS, edit the <CODE>smb.conf</CODE> file and
replace the existing printing commands and options with the line: </P>
<UL>
<PRE>
printing = cups
</PRE>
</UL>
<P>That's all there is to it! Remote users will now be able to browse
and print to printers on your system. </P>
<H2><A NAME="7_3">How Do I Configure CUPS for SAMBA?</A></H2>
<P>To configure CUPS for SAMBA, run the following command: </P>
<UL>
<PRE>
% ln -s `which smbspool` /var/cups/backend/smb ENTER
</PRE>
</UL>
<P>The <CODE>smbspool</CODE> program is provided with SAMBA starting
with SAMBA 2.0.6. Once you have made the link you can use the <CODE>smb</CODE>
method in the device URI for your printers: </P>
<UL>
<PRE>
% lpadmin -p <I>printer</I> -v smb://<I>hostname/printer</I> ... ENTER
% lpadmin -p <I>printer</I> -v smb://<I>workgroup/hostname/printer</I> ... ENTER
</PRE>
</UL>
<P>The second form only needs to be used if the Windows system is in a
different workgroup. </P>
</BODY>
</HTML>
+1018 -932
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+52 -2
Ver Arquivo
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.1">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.0.3">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Administrators Manual</TITLE>
</HEAD>
@@ -10,7 +10,7 @@
<H1 ALIGN=RIGHT>Preface</H1>
This software administrators manual provides printer administration
information for the Common UNIX Printing System ("CUPS") Version 1.0.1.
information for the Common UNIX Printing System ("CUPS") Version 1.0.3.
<H2>System Overview</H2>
@@ -42,6 +42,7 @@ can be used to support non-PostScript printers.
<LI>3 - Printer Queue Management</LI>
<LI>4 - Printing System Management</LI>
<LI>5 - Printer Accounting</LI>
<LI>A - Using CUPS with SAMBA</LI>
</UL>
<H1 ALIGN=RIGHT>1 - Printing System Overview</H1>
@@ -344,6 +345,7 @@ CUPS:
</UL>
<DT>smb://[username:password@]hostname/queue
<DT>smb://[username:password@]workgroup/hostname/queue
<DD>Sends all output to the specified SMB (Windows) printer queue
using the SAMBA software.
@@ -1034,5 +1036,53 @@ field in the <CODE>access_log</CODE> file.
and number of copies being printed of that page. For printer that can not
produce copies on their own, the <I>num-pages</I> field will always be 1.
<H1 ALIGN="RIGHT">A - Using CUPS with SAMBA</H1>
<P>This appendix describes how to use CUPS with SAMBA.
<H2>What is SAMBA?</H2>
<P>In case you haven't heard of SAMBA, it is basically a software package
that allows you to configure your UNIX system as a Windows file and printer
server. It also allows you to access files and printers on a Windows system.
Like CUPS, SAMBA is free software.
<P>SAMBA version 2.0.6 is the first release of SAMBA that supports CUPS.
You can download SAMBA from:
<P ALIGN="CENTER"><A HREF="http://www.samba.org">http://www.samba.org</A></P>
<H2>How Do I Configure SAMBA for CUPS?</H2>
<P>To configure SAMBA for CUPS, edit the <CODE>smb.conf</CODE> file and
replace the existing printing commands and options with the line:
<UL><PRE>
printing = cups
</PRE></UL>
<P>That's all there is to it! Remote users will now be able to browse and
print to printers on your system.
<H2>How Do I Configure CUPS for SAMBA?</H2>
<P>To configure CUPS for SAMBA, run the following command:
<UL><PRE>
% ln -s `which smbspool` /var/cups/backend/smb ENTER
</PRE></UL>
<P>The <CODE>smbspool</CODE> program is provided with SAMBA starting with
SAMBA 2.0.6. Once you have made the link you can use the <CODE>smb</CODE>
method in the device URI for your printers:
<UL><PRE>
% lpadmin -p <I>printer</I> -v smb://<I>hostname/printer</I> ... ENTER
% lpadmin -p <I>printer</I> -v smb://<I>workgroup/hostname/printer</I> ... ENTER
</PRE></UL>
<P>The second form only needs to be used if the Windows system is in a
different workgroup.
</BODY>
</HTML>
+227 -125
Ver Arquivo
@@ -1,110 +1,212 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>CUPS Software Design Description</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SDD-1.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Software Design Description</H1></A><BR>
<CENTER><A HREF="#CONTENTS"><H1>CUPS Software Design Description</H1></A><BR>
CUPS-SDD-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Design Overview</A></B>
<B><A HREF="#3">3 Design Overview</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Backends</A></LI>
<LI><A HREF="#3_1">3.1 Backends</A></LI>
<UL>
<LI><A HREF=#3_1_1>3.1.1 ipp</A></LI>
<LI><A HREF=#3_1_2>3.1.2 lpd</A></LI>
<LI><A HREF=#3_1_3>3.1.3 parallel</A></LI>
<LI><A HREF=#3_1_4>3.1.4 serial</A></LI>
<LI><A HREF=#3_1_5>3.1.5 socket</A></LI>
<LI><A HREF="#3_1_1">3.1.1 ipp</A></LI>
<LI><A HREF="#3_1_2">3.1.2 lpd</A></LI>
<LI><A HREF="#3_1_3">3.1.3 parallel</A></LI>
<LI><A HREF="#3_1_4">3.1.4 serial</A></LI>
<LI><A HREF="#3_1_5">3.1.5 socket</A></LI>
</UL>
<LI><A HREF=#3_2>3.2 Berkeley Commands</A></LI>
<LI><A HREF="#3_2">3.2 Berkeley Commands</A></LI>
<UL>
<LI><A HREF=#3_2_1>3.2.1 lpc</A></LI>
<LI><A HREF=#3_2_2>3.2.2 lpr</A></LI>
<LI><A HREF=#3_2_3>3.2.3 lprm</A></LI>
<LI><A HREF="#3_2_1">3.2.1 lpc</A></LI>
<LI><A HREF="#3_2_2">3.2.2 lpr</A></LI>
<LI><A HREF="#3_2_3">3.2.3 lprm</A></LI>
</UL>
<LI><A HREF=#3_3>3.3 CGI</A></LI>
<LI><A HREF="#3_3">3.3 CGI</A></LI>
<UL>
<LI><A HREF=#3_3_1>3.3.1 classes.cgi</A></LI>
<LI><A HREF=#3_3_2>3.3.2 jobs.cgi</A></LI>
<LI><A HREF=#3_3_3>3.3.3 printers.cgi</A></LI>
<LI><A HREF="#3_3_1">3.3.1 classes.cgi</A></LI>
<LI><A HREF="#3_3_2">3.3.2 jobs.cgi</A></LI>
<LI><A HREF="#3_3_3">3.3.3 printers.cgi</A></LI>
</UL>
<LI><A HREF=#3_4>3.4 CUPS Interface Library</A></LI>
<LI><A HREF="#3_4">3.4 CUPS Interface Library</A></LI>
<UL>
<LI><A HREF=#3_4_1>3.4.1 Convenience Functions</A></LI>
<LI><A HREF=#3_4_2>3.4.2 HTTP Functions</A></LI>
<LI><A HREF=#3_4_3>3.4.3 IPP Functions</A></LI>
<LI><A HREF=#3_4_4>3.4.4 Language Functions</A></LI>
<LI><A HREF=#3_4_5>3.4.5 MIME Functions</A></LI>
<LI><A HREF=#3_4_6>3.4.6 PPD Functions</A></LI>
<LI><A HREF=#3_4_7>3.4.7 Raster Functions</A></LI>
<LI><A HREF="#3_4_1">3.4.1 Convenience Functions</A></LI>
<LI><A HREF="#3_4_2">3.4.2 HTTP Functions</A></LI>
<LI><A HREF="#3_4_3">3.4.3 IPP Functions</A></LI>
<LI><A HREF="#3_4_4">3.4.4 Language Functions</A></LI>
<LI><A HREF="#3_4_5">3.4.5 MIME Functions</A></LI>
<LI><A HREF="#3_4_6">3.4.6 PPD Functions</A></LI>
<LI><A HREF="#3_4_7">3.4.7 Raster Functions</A></LI>
</UL>
<LI><A HREF=#3_5>3.5 Filters</A></LI>
<LI><A HREF="#3_5">3.5 Filters</A></LI>
<UL>
<LI><A HREF=#3_5_1>3.5.1 hpgltops</A></LI>
<LI><A HREF=#3_5_2>3.5.2 imagetops</A></LI>
<LI><A HREF=#3_5_3>3.5.3 imagetoraster</A></LI>
<LI><A HREF=#3_5_4>3.5.4 pstops</A></LI>
<LI><A HREF=#3_5_5>3.5.5 pstoraster</A></LI>
<LI><A HREF=#3_5_6>3.5.6 rastertohp</A></LI>
<LI><A HREF=#3_5_7>3.5.7 texttops</A></LI>
<LI><A HREF="#3_5_1">3.5.1 hpgltops</A></LI>
<LI><A HREF="#3_5_2">3.5.2 imagetops</A></LI>
<LI><A HREF="#3_5_3">3.5.3 imagetoraster</A></LI>
<LI><A HREF="#3_5_4">3.5.4 pstops</A></LI>
<LI><A HREF="#3_5_5">3.5.5 pstoraster</A></LI>
<LI><A HREF="#3_5_6">3.5.6 rastertohp</A></LI>
<LI><A HREF="#3_5_7">3.5.7 texttops</A></LI>
</UL>
<LI><A HREF=#3_6>3.6 Scheduler</A></LI>
<LI><A HREF="#3_6">3.6 Scheduler</A></LI>
<UL>
<LI><A HREF=#3_6_1>3.6.1 Authorization</A></LI>
<LI><A HREF=#3_6_2>3.6.2 Classes</A></LI>
<LI><A HREF=#3_6_3>3.6.3 Client</A></LI>
<LI><A HREF=#3_6_4>3.6.4 Configuration</A></LI>
<LI><A HREF=#3_6_5>3.6.5 Directory Services</A></LI>
<LI><A HREF=#3_6_6>3.6.6 IPP</A></LI>
<LI><A HREF=#3_6_7>3.6.7 Jobs</A></LI>
<LI><A HREF=#3_6_8>3.6.8 Logging</A></LI>
<LI><A HREF=#3_6_9>3.6.9 Main</A></LI>
<LI><A HREF=#3_6_10>3.6.10 Printers</A></LI>
<LI><A HREF="#3_6_1">3.6.1 Authorization</A></LI>
<LI><A HREF="#3_6_2">3.6.2 Classes</A></LI>
<LI><A HREF="#3_6_3">3.6.3 Client</A></LI>
<LI><A HREF="#3_6_4">3.6.4 Configuration</A></LI>
<LI><A HREF="#3_6_5">3.6.5 Directory Services</A></LI>
<LI><A HREF="#3_6_6">3.6.6 IPP</A></LI>
<LI><A HREF="#3_6_7">3.6.7 Jobs</A></LI>
<LI><A HREF="#3_6_8">3.6.8 Logging</A></LI>
<LI><A HREF="#3_6_9">3.6.9 Main</A></LI>
<LI><A HREF="#3_6_10">3.6.10 Printers</A></LI>
</UL>
<LI><A HREF=#3_7>3.7 System V Commands</A></LI>
<LI><A HREF="#3_7">3.7 System V Commands</A></LI>
<UL>
<LI><A HREF=#3_7_1>3.7.1 accept</A></LI>
<LI><A HREF=#3_7_2>3.7.2 cancel</A></LI>
<LI><A HREF=#3_7_3>3.7.3 disable</A></LI>
<LI><A HREF=#3_7_4>3.7.4 enable</A></LI>
<LI><A HREF=#3_7_5>3.7.5 lp</A></LI>
<LI><A HREF=#3_7_6>3.7.6 lpadmin</A></LI>
<LI><A HREF=#3_7_7>3.7.7 lpstat</A></LI>
<LI><A HREF=#3_7_8>3.7.8 reject</A></LI>
<LI><A HREF="#3_7_1">3.7.1 accept</A></LI>
<LI><A HREF="#3_7_2">3.7.2 cancel</A></LI>
<LI><A HREF="#3_7_3">3.7.3 disable</A></LI>
<LI><A HREF="#3_7_4">3.7.4 enable</A></LI>
<LI><A HREF="#3_7_5">3.7.5 lp</A></LI>
<LI><A HREF="#3_7_6">3.7.6 lpadmin</A></LI>
<LI><A HREF="#3_7_7">3.7.7 lpstat</A></LI>
<LI><A HREF="#3_7_8">3.7.8 reject</A></LI>
</UL>
</UL>
<B><A HREF=#4>A Glossary</A></B>
<B><A HREF="#4">A Glossary</A></B>
<UL>
<LI><A HREF=#4_1>A.1 Terms</A></LI>
<LI><A HREF=#4_2>A.2 Acronyms</A></LI>
<LI><A HREF="#4_1">A.1 Terms</A></LI>
<LI><A HREF="#4_2">A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,ŹťÖ«Çl:źĐ¨”ů ŻŘ¬ÖXNżŕ°xL~¬Ű´zmxËđ¸|N§ŮřĽ(Pďű˙€bwz…jn‚‰Š‹ŚŤ9„†‘!-->
;&plusmn;&Yacute;&iacute;nd&yacute; !&cedil; ž&sup3;w&agrave;…MY~&iquest;{,g&Uacute;\&auml;&eacute;
Ś&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;Ť&aacute;&Ntilde;ź:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)š‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:ŤRe!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZˇYŘřˇ‡D}¤–Uj±á
^âä™ć`Ú@¦5b|šŕ«Á±§3Ń KwÔ\ŞB¨±H)+Ź=ˇÓ©"
©˘ 8u¸öŠD§•lţ:„dRXťilĚ:Ë!´;ąt+„e<
‡;řô+‚bbhaÚ0Ę6é.D™đ޹̹ńÖkoę({ďľü{fż-->
&cedil;1N&ocirc;&macr;b&quot;śŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Ś
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;Ź™X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;ŤKv`
&Ccedil;+d&ordf;– ś79sť&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;ś&yuml;&brvbar;śe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŚ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMśŽaO
<!--x‹ŚÖ3 ˝4 °XT'Ş®:TŁ uéWeşádËeú¸č¬Ů7
ëŇĎ;„sśĺµ7m(ýĐźtl¤RVť)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;śb h`Ť&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(\ {&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€ś&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAźcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;ź-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;ŤM&Igrave;&Ccedil;&Uuml;c&micro;3
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnU[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;ť&not;sP[&yuml;nn&frac34;&ccedil;PŤ…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;x&uacute;Ť'&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;
<!--•¤7 yţ D-->
ť
jl&copy;&Igrave;u&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;3&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;žŤ&Ouml;&uuml;VŹ“&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;‡Ź&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;ś
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CCc&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽŕ•?śýáużţáŻ~!ŇźżÍĎüýĎťIw1ßţZ ČNĄExŁ&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Ś&Aacute;&cedil;D5&copy;D aŤ&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;Ź&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;d&quot;8$&Yacute;`Ki0…O&eth;n&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
ŤP&atilde;—Š&Eacute;&oslash;t &cent;&yen;&not;&egrave;†Ky™FŚ&euml;`š”y&uml;š €š‰M&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŚŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC śwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8ź&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;źfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;ZI?&iexcl;&icirc;&Agrave;v:“a&brvbar;6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!ź&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7Źu&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1Ź&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;ś&uacute;
<!--pvł2<jŁ·«É¦kÉ 1Š:¬Če ”«ÉÚlŃ•ŞÍZnŻŠ2Ě­‹s«Á­ÖÚŕé¨Űş=¤zŽźú­6­áU­ä
Řš¨żújá
¦0®éJ«
ŻNŐäş•ö ĐVeζŻőbm¶7ů´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Ś‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ˝YUŔśăŔ©%
Ěró)Á0¨§—ł˝Ç…Á¬ ̤LŰ6řK!<Á:Ŕę*Ş…ĂÁî…Á.‡˛
ĄĽ‘z Âä ¦ýËŔ~¸7<,´GóĂý‹ÂöęŔe:̉°ë«ŁmŁ,žyAIˇ…Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,ź&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Ś&para;i&ecirc;P&Acirc;bA&Acirc;&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RśCWRo&igrave;Š&aring; MŚŠť”&aring;t™ Ś›Źr&eacute;&Eacute;q
<!--Zva&Z¤jzĘŠ¬‡7čV)“‹|›káť!¦*€Á¶öÄ84’Wž¶LĘń˝FŞ6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+č•L˘
%|۬Ĺ$-->
&aring;&gt;}ŤL&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Ś|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
ťŚ&not;&Euml;&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;ŤŤ‚&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;Ź&ecirc;!i!Ź&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;O&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;ť&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;&Uuml;@&oacute;Ž2?&ugrave;&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;ź\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Ś&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;Ť4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;ź&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;ŤM&Oslash;hZ&brvbar;:&deg;ś*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.˛ę}mywu#|YcX|jŽŹxdE“)0U
Ť T–<W€o  zbQ`FĄ2ł:ť°CtŞ·‰!™˛*¨…ş»˘~аz¬ÁŻÄ‡´Ő޶Ó(iĂm˛F›ÍÚhÜޓơօäc|ŘËUŇŮţ˛ëřçőłÜŘ<î™w‰ÖżEéhä›@đÂ
-->
kBŹ_g 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?ť[†
&Auml;&auml;hN6ZM&cent;D:c*BR!$&plusmn;ckV&shy;-u&Ucirc;@[&oslash;p„ź]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;Ť&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;ŤN–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;ťtxŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……ˇ×ŤŹŕ¨âŠęÄő#哎:Ĺ(ă4Ö¸Ź:@Ůw¸ YÝ‹t Iă’Ö”$…a(ĺ‹X ĄF7×IČbŠ["Y€M縹K~`¶Řä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
&Acirc;wśŤ&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6&igrave;&frac12;s&THORN;XźŤ&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;k&sup1;Ś({I&egrave;Ź^!&aacute;&cedil;N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;źz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Ś&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;•S3x*&ucirc;&iacute;ŹP&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-J&uacute;
&aring;AF{#\”g…&Aacute;ś)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1śŚ&thorn;h&copy;&sup2;K„9$Y&egrave;)Ž A &Egrave;
—‡)#1‰&Oacute;p&quot;&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^śß­âxŻ
€±peŚ-->
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
This software design description document provides detailed
information on the architecture and coding of the Common UNIX Printing
System (&quot;CUPS&quot;) Version 1.0.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -120,7 +222,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
This software design description document is organized into the
following sections:
<UL>
@@ -129,8 +231,8 @@ can be used to support non-PostScript printers. </P>
<LI>3 - Design Overview </LI>
<LI>A - Glossary </LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
@@ -143,7 +245,7 @@ can be used to support non-PostScript printers. </P>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
@@ -153,7 +255,7 @@ can be used to support non-PostScript printers. </P>
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
</UL>
<H1><A NAME=3>3 Design Overview</A></H1>
<H1><A NAME="3">3 Design Overview</A></H1>
CUPS is composed of 7 software sub-systems that operate together to
perform common printing tasks:
<UL>
@@ -165,7 +267,7 @@ can be used to support non-PostScript printers. </P>
<LI>Scheduler </LI>
<LI>System V Commands </LI>
</UL>
<H2><A NAME=3_1>3.1 Backends</A></H2>
<H2><A NAME="3_1">3.1 Backends</A></H2>
The backends implement communications over a number of different
interfaces. All backends are called with a common set of arguments:
<UL>
@@ -184,18 +286,18 @@ interfaces. All backends are called with a common set of arguments:
</UL>
Backends are named using the method of the URI, so a URI of
&quot;ipp://hostname/resource&quot; would be processed by the &quot;ipp&quot; backend.
<H3><A NAME=3_1_1>3.1.1 ipp</A></H3>
<H3><A NAME="3_1_1">3.1.1 ipp</A></H3>
The ipp backend sends the specified job to a network printer or host
using the Internet Printing Protocol. The URI is as specified by the <CODE>
printer-uri-supported</CODE> attribute from the printer or host.
<H3><A NAME=3_1_2>3.1.2 lpd</A></H3>
<H3><A NAME="3_1_2">3.1.2 lpd</A></H3>
The lpd backend sends the specified job to a network printer or host
using the Line Printer Daemon protocol. The URI is of the form:
<UL>
<PRE>lpd://hostname/queue
</PRE>
</UL>
<H3><A NAME=3_1_3>3.1.3 parallel</A></H3>
<H3><A NAME="3_1_3">3.1.3 parallel</A></H3>
The parallel backend sends the specified job to a local printer
connected via the specified parallel port device. The URI is of the
form:
@@ -203,7 +305,7 @@ form:
<PRE>parallel:/dev/file
</PRE>
</UL>
<H3><A NAME=3_1_4>3.1.4 serial</A></H3>
<H3><A NAME="3_1_4">3.1.4 serial</A></H3>
The serial backend sends the specified job to a local printer
connected via the specified serial port device. The URI is of the
form:
@@ -219,7 +321,7 @@ form:
<LI><CODE>parity=<I>odd</I></CODE> - Sets odd parity checking. </LI>
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off. </LI>
</UL>
<H3><A NAME=3_1_5>3.1.5 socket</A></H3>
<H3><A NAME="3_1_5">3.1.5 socket</A></H3>
The socket backend sends the specified job to a network host using the
AppSocket protocol commonly used by Hewlett-Packard and Tektronix
printers. The URI is of the form:
@@ -228,11 +330,11 @@ printers. The URI is of the form:
</PRE>
</UL>
The default port number is 9100.
<H2><A NAME=3_2>3.2 Berkeley Commands</A></H2>
<H2><A NAME="3_2">3.2 Berkeley Commands</A></H2>
The Berkeley commands provide a simple command-line interface to CUPS
to submit and control print jobs. It is provided for compatibility with
existing software that is hard coded to use the Berkeley commands.
<H3><A NAME=3_2_1>3.2.1 lpc</A></H3>
<H3><A NAME="3_2_1">3.2.1 lpc</A></H3>
The lpc command allows users and administrators to check the status
and control print queues. The version provided with CUPS supports the
following commands:
@@ -240,57 +342,57 @@ following commands:
<LI>quit - Quits the lpc command. </LI>
<LI>status - Shows the status of printers and jobs in the queue. </LI>
</UL>
<H3><A NAME=3_2_2>3.2.2 lpr</A></H3>
<H3><A NAME="3_2_2">3.2.2 lpr</A></H3>
The lpr command submits a job for printing. The CUPS version of lpr
silently ignores the &quot;i&quot;, &quot;t&quot;, &quot;m&quot;, &quot;h&quot;, and &quot;s&quot; options.
<H3><A NAME=3_2_3>3.2.3 lprm</A></H3>
<H3><A NAME="3_2_3">3.2.3 lprm</A></H3>
The lprm removes one or more print jobs.
<H2><A NAME=3_3>3.3 CGI</A></H2>
<H2><A NAME="3_3">3.3 CGI</A></H2>
The Common Gateway Interface (CGI) programs provide a web-based status
interface to monitor the status of printers, classes, and jobs.
<H3><A NAME=3_3_1>3.3.1 classes.cgi</A></H3>
<H3><A NAME="3_3_1">3.3.1 classes.cgi</A></H3>
The classes CGI lists the available printer classes and any pending
jobs for the class. The user can click on individual classes to limit
the display and click on jobs to see the job status.
<H3><A NAME=3_3_2>3.3.2 jobs.cgi</A></H3>
<H3><A NAME="3_3_2">3.3.2 jobs.cgi</A></H3>
The jobs CGI lists the queued print jobs in order of priority. The
list can be limited by printer or job. When the user displays the
status of an individual print job all job options are displayed.
<H3><A NAME=3_3_3>3.3.3 printers.cgi</A></H3>
<H3><A NAME="3_3_3">3.3.3 printers.cgi</A></H3>
The printers CGI lists the available printer queues and any pending
jobs for the printer. The user can click on individual printers to
limit the display and click on jobs to see the job status.
<H2><A NAME=3_4>3.4 CUPS Interface Library</A></H2>
<H2><A NAME="3_4">3.4 CUPS Interface Library</A></H2>
The CUPS interface library provides common convenience, HTTP, IPP,
language, MIME, PPD, and raster functions used by the CUPS software.
<H3><A NAME=3_4_1>3.4.1 Convenience Functions</A></H3>
<H3><A NAME="3_4_1">3.4.1 Convenience Functions</A></H3>
Convenience functions are provided to submit an IPP request, send a
print file, cancel a job, get a list of available printers, get a list
of available classes, get the default printer or class, get the default
server name, get the local username, and get a password string.
<H3><A NAME=3_4_2>3.4.2 HTTP Functions</A></H3>
<H3><A NAME="3_4_2">3.4.2 HTTP Functions</A></H3>
The HTTP functions provide functions to connect to HTTP servers, issue
requests, read data from a server, and write data to a server.
<H3><A NAME=3_4_3>3.4.3 IPP Functions</A></H3>
<H3><A NAME="3_4_3">3.4.3 IPP Functions</A></H3>
The IPP function provide functions to manage IPP request data and
attributes, read IPP responses from a server, and write IPP requests to
a server.
<H3><A NAME=3_4_4>3.4.4 Language Functions</A></H3>
<H3><A NAME="3_4_4">3.4.4 Language Functions</A></H3>
The language functions provide a standard interface for retrieving
common textual messages for a particular locale and determining the
correct encoding (e.g. US ASCII, ISO-8859-1, etc.)
<H3><A NAME=3_4_5>3.4.5 MIME Functions</A></H3>
<H3><A NAME="3_4_5">3.4.5 MIME Functions</A></H3>
The Multimedia Internet Mail Exchange functions manage a MIME type and
conversion database that supports file typing by extension and content,
and least-cost file filtering from a source to a destination file type.
<H3><A NAME=3_4_6>3.4.6 PPD Functions</A></H3>
<H3><A NAME="3_4_6">3.4.6 PPD Functions</A></H3>
The PostScript Printer Description functions manage PPD files, select
options, check for option conflicts, and emit selected options in the
correct order.
<H3><A NAME=3_4_7>3.4.7 Raster Functions</A></H3>
<H3><A NAME="3_4_7">3.4.7 Raster Functions</A></H3>
The raster functions manage streams of CUPS raster data (described in
the Interface Design Document) used by non-PostScript printer drivers.
<H2><A NAME=3_5>3.5 Filters</A></H2>
<H2><A NAME="3_5">3.5 Filters</A></H2>
The filters implement file conversion services for CUPS. All filters
are called with a common set of arguments:
<UL>
@@ -307,37 +409,37 @@ are called with a common set of arguments:
</UL>
Filters are added to the MIME conversion data file and implement all
necessary conversions from one file type to another.
<H3><A NAME=3_5_1>3.5.1 hpgltops</A></H3>
<H3><A NAME="3_5_1">3.5.1 hpgltops</A></H3>
The hpgltops filter converts HP-GL/2 files into PostScript.
<H3><A NAME=3_5_2>3.5.2 imagetops</A></H3>
<H3><A NAME="3_5_2">3.5.2 imagetops</A></H3>
The imagetops filter converts image files into PostScript.
<H3><A NAME=3_5_3>3.5.3 imagetoraster</A></H3>
<H3><A NAME="3_5_3">3.5.3 imagetoraster</A></H3>
The imagetoraster filter converts image files into CUPS raster data.
<H3><A NAME=3_5_4>3.5.4 pstops</A></H3>
<H3><A NAME="3_5_4">3.5.4 pstops</A></H3>
The pstops filter inserts printer-specific commands from PPD files and
performs page filtering as requested by the user.
<H3><A NAME=3_5_5>3.5.5 pstoraster</A></H3>
<H3><A NAME="3_5_5">3.5.5 pstoraster</A></H3>
The pstoraster filter converts PostScript program data into CUPS
raster data.
<H3><A NAME=3_5_6>3.5.6 rastertohp</A></H3>
<H3><A NAME="3_5_6">3.5.6 rastertohp</A></H3>
The rastertohp filter handles converting CUPS raster data to HP PCL
and supports both color and black-and-white printers.
<H3><A NAME=3_5_7>3.5.7 texttops</A></H3>
<H3><A NAME="3_5_7">3.5.7 texttops</A></H3>
The texttops filter converts text files into PostScript.
<H2><A NAME=3_6>3.6 Scheduler</A></H2>
<H2><A NAME="3_6">3.6 Scheduler</A></H2>
The scheduler is a fully-functional HTTP/1.1 and IPP/1.0 server that
manages the printers, classes, and jobs in the system. It also handles
a simple broadcast-based directory service so that remote print queues
and classes can be accessed transparently from the local system.
<H3><A NAME=3_6_1>3.6.1 Authorization</A></H3>
<H3><A NAME="3_6_1">3.6.1 Authorization</A></H3>
The authorization module is responsible for performing access control
and authentication for all HTTP and IPP requests entering the system.
<H3><A NAME=3_6_2>3.6.2 Classes</A></H3>
<H3><A NAME="3_6_2">3.6.2 Classes</A></H3>
The classes module is responsible for managing printer classes in the
system. Each class is a collection of local and/or remote printers.
The classes module also reads and writes the classes configuration
file.
<H3><A NAME=3_6_3>3.6.3 Client</A></H3>
<H3><A NAME="3_6_3">3.6.3 Client</A></H3>
The client module is responsible for all HTTP client communications.
It handles listening on selected interfaces, accepting connections
from prospective clients, processing incoming HTTP requests, and
@@ -345,13 +447,13 @@ sending HTTP responses to those requests. The client module also is
responsible for executing the external CGI programs as needed to
support web-based printer, class, and job status monitoring.
<P>Once authorized, all IPP requests are sent to the IPP module. </P>
<H3><A NAME=3_6_4>3.6.4 Configuration</A></H3>
<H3><A NAME="3_6_4">3.6.4 Configuration</A></H3>
The configuration module is responsible for reading the CUPS
configuration file and initializing the appropriate data structures and
values. The configuration module also stops CUPS services before
reading the configuration file and restarts them after the
configuration file has been read.
<H3><A NAME=3_6_5>3.6.5 Directory Services</A></H3>
<H3><A NAME="3_6_5">3.6.5 Directory Services</A></H3>
The directory services module sends and recieves printer state
information over a broadcast socket. Remote printers and classes are
automatically added to or removed from the local printer and class
@@ -359,63 +461,63 @@ lists as needed.
<P>The directory services module can only recieve printer state
information over a single UDP port, however it can broadcast to
multiple addresses and ports as needed. </P>
<H3><A NAME=3_6_6>3.6.6 IPP</A></H3>
<H3><A NAME="3_6_6">3.6.6 IPP</A></H3>
The IPP module handles IPP requests and acts accordingly. URI
validation is also performed here, as a client can post IPP data to any
URI on the server which might sidestep the access control or
authentication of the HTTP server.
<H3><A NAME=3_6_7>3.6.7 Jobs</A></H3>
<H3><A NAME="3_6_7">3.6.7 Jobs</A></H3>
The jobs module manages print jobs, starts filter and backend
processes for jobs to be printed, and monitors status messages from
those filters and backends.
<H3><A NAME=3_6_8>3.6.8 Logging</A></H3>
<H3><A NAME="3_6_8">3.6.8 Logging</A></H3>
The logging module manages the access, error, and page log files that
are generated by the scheduler.
<H3><A NAME=3_6_9>3.6.9 Main</A></H3>
<H3><A NAME="3_6_9">3.6.9 Main</A></H3>
The main module is responsible for timing out and dispatching input
and output for client connections. It also watches for incoming <CODE>
SIGHUP</CODE> and <CODE>SIGCHLD</CODE> signals, reloads the server
configuration files as needed, and handles child process errors and
exits.
<H3><A NAME=3_6_10>3.6.10 Printers</A></H3>
<H3><A NAME="3_6_10">3.6.10 Printers</A></H3>
The printers module is responsible for managing printers and PPD files
in the system. The printers module also reads and writes the printers
configuration file.
<H2><A NAME=3_7>3.7 System V Commands</A></H2>
<H2><A NAME="3_7">3.7 System V Commands</A></H2>
The System V commands provide a robust command-line interface to CUPS
to submit and control printers and jobs.
<H3><A NAME=3_7_1>3.7.1 accept</A></H3>
<H3><A NAME="3_7_1">3.7.1 accept</A></H3>
The accept command tells the scheduler to accept new jobs for specific
printers.
<H3><A NAME=3_7_2>3.7.2 cancel</A></H3>
<H3><A NAME="3_7_2">3.7.2 cancel</A></H3>
The cancel command tells the scheduler to cancel one or more jobs that
are queued for printing.
<H3><A NAME=3_7_3>3.7.3 disable</A></H3>
<H3><A NAME="3_7_3">3.7.3 disable</A></H3>
The disable command tells the scheduler to stop printing jobs on the
specified printers.
<H3><A NAME=3_7_4>3.7.4 enable</A></H3>
<H3><A NAME="3_7_4">3.7.4 enable</A></H3>
The enable command tells the scheduler to start printing jobs on the
specified printers.
<H3><A NAME=3_7_5>3.7.5 lp</A></H3>
<H3><A NAME="3_7_5">3.7.5 lp</A></H3>
The lp command submits submits files for printing. Unlike the
standard System V lp command, a single CUPS lp command will generate a
separate job ID for each file that is printed. Also, the Solaris &quot;f&quot;,
&quot;H&quot;, &quot;P&quot;, &quot;S&quot;, and &quot;y&quot; options are silently ignored.
<H3><A NAME=3_7_6>3.7.6 lpadmin</A></H3>
<H3><A NAME="3_7_6">3.7.6 lpadmin</A></H3>
The lpadmin command manages printer queues and classes. The Solaris
&quot;A&quot;, &quot;F&quot;, &quot;I&quot;, &quot;M&quot;, &quot;P&quot;, &quot;Q&quot;, &quot;S&quot;, &quot;T&quot;, &quot;U&quot;, &quot;W&quot;, &quot;f&quot;, &quot;l&quot;, &quot;m&quot;, &quot;o&quot;,
&quot;s&quot;, &quot;t&quot;, and &quot;u&quot; options are not supported, and new options &quot;P&quot; (PPD
file), &quot;F&quot; (filter), and &quot;E&quot; (enable and accept) are provided to
configure CUPS-specific features such as PPD file and conversion
filters.
<H3><A NAME=3_7_7>3.7.7 lpstat</A></H3>
<H3><A NAME="3_7_7">3.7.7 lpstat</A></H3>
The lpstat command lists printers, classes, and jobs as requested by
the user.
<H3><A NAME=3_7_8>3.7.8 reject</A></H3>
<H3><A NAME="3_7_8">3.7.8 reject</A></H3>
The reject command tells the scheduler not to accept new jobs for
specific printers.
<H1 TYPE=A VALUE=1><A NAME=4>A Glossary</A></H1>
<H2><A NAME=4_1>A.1 Terms</A></H2>
<H1 TYPE="A" VALUE="1"><A NAME="4">A Glossary</A></H1>
<H2><A NAME="4_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
@@ -428,7 +530,7 @@ specific printers.
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=4_2>A.2 Acronyms</A></H2>
<H2><A NAME="4_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
+749 -786
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4090
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+9119
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+4555
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+135 -33
Ver Arquivo
@@ -1,52 +1,154 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>DRAFT - CUPS Software Security Report</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SSR-1.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>DRAFT - CUPS Software Security Report</H1></A><BR>
<CENTER><A HREF="#CONTENTS"><H1>DRAFT - CUPS Software Security Report</H1></A><BR>
CUPS-SSR-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Local Access Risks</A></B>
<B><A HREF="#3">3 Local Access Risks</A></B>
<UL>
<LI><A HREF=#3_1>3.1 Security Breaches</A></LI>
<LI><A HREF="#3_1">3.1 Security Breaches</A></LI>
</UL>
<B><A HREF=#4>4 Remote Access Risks</A></B>
<B><A HREF="#4">4 Remote Access Risks</A></B>
<UL>
<LI><A HREF=#4_1>4.1 Denial of Service Attacks</A></LI>
<LI><A HREF=#4_2>4.2 Security Breaches</A></LI>
<LI><A HREF="#4_1">4.1 Denial of Service Attacks</A></LI>
<LI><A HREF="#4_2">4.2 Security Breaches</A></LI>
</UL>
<B><A HREF=#5>A Glossary</A></B>
<B><A HREF="#5">A Glossary</A></B>
<UL>
<LI><A HREF=#5_1>A.1 Terms</A></LI>
<LI><A HREF=#5_2>A.2 Acronyms</A></LI>
<LI><A HREF="#5_1">A.1 Terms</A></LI>
<LI><A HREF="#5_2">A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
This software security report provides an analysis of possible
security concerns for the Common UNIX Printing System (&quot;CUPS&quot;) Version
1.0.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -62,7 +164,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
<P>This software security report is organized into the following
sections:</P>
<UL>
@@ -72,8 +174,8 @@ sections:</P>
<LI>4 - Remote Access Risks</LI>
<LI>A - Glossary</LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
@@ -86,7 +188,7 @@ sections:</P>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
@@ -96,12 +198,12 @@ sections:</P>
<LI>RFC 2566, IPP/1.0: Model and Semantics </LI>
<LI>RFC 2639, IPP/1.0: Implementers Guide </LI>
</UL>
<H1><A NAME=3>3 Local Access Risks</A></H1>
<H1><A NAME="3">3 Local Access Risks</A></H1>
<P>Local access risks are those that can be exploited only with a local
user account. This section does not address issues related to
dissemination of the root password or other security issues associated
with the UNIX operating system. </P>
<H2><A NAME=3_1>3.1 Security Breaches</A></H2>
<H2><A NAME="3_1">3.1 Security Breaches</A></H2>
<P>There are two known security vulnerabilities with local access: </P>
<OL>
<LI>Since the default installation creates a world-readable request
@@ -122,11 +224,11 @@ can be minimized. </P>
exploit this vulnerability. </P>
</LI>
</OL>
<H1><A NAME=4>4 Remote Access Risks</A></H1>
<H1><A NAME="4">4 Remote Access Risks</A></H1>
<P>Remote access risks are those that can be exploited without a local
user account and/or from a remote system. This section does not address
issues related to network or firewall security. </P>
<H2><A NAME=4_1>4.1 Denial of Service Attacks</A></H2>
<H2><A NAME="4_1">4.1 Denial of Service Attacks</A></H2>
<P>Like all Internet services, the CUPS server is vulnerable to denial
of service attacks, including: </P>
<OL>
@@ -168,7 +270,7 @@ large attribute values. </P>
user-level access control as needed for expensive printers. </P>
</LI>
</OL>
<H2><A NAME=4_2>4.2 Security Breaches</A></H2>
<H2><A NAME="4_2">4.2 Security Breaches</A></H2>
<P>The current CUPS server only supports Basic authentication with
usernames and passwords. This essentially places the clear text of the
username and password on the network. Since CUPS uses the UNIX username
@@ -183,8 +285,8 @@ restricted accordingly. </P>
the entire message body using separate MD5-based username and password
files. This will protect password information and prevent unauthorized
access due to compromised account passwords. </P>
<H1 TYPE=A VALUE=1><A NAME=5>A Glossary</A></H1>
<H2><A NAME=5_1>A.1 Terms</A></H2>
<H1 TYPE="A" VALUE="1"><A NAME="5">A Glossary</A></H1>
<H2><A NAME="5_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
@@ -197,7 +299,7 @@ access due to compromised account passwords. </P>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=5_2>A.2 Acronyms</A></H2>
<H2><A NAME="5_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
+315 -327
Ver Arquivo
@@ -1,7 +1,7 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 2.0b1 Copyright 1997-1999 Michael Sweet, All Rights Reserved.)/CreationDate(D:19990922200511Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/BaseEncoding/WinAnsiEncoding>>endobj
1 0 obj<</Producer(htmldoc 1.8.3 Copyright 1997-1999 Easy Software Products, All Rights Reserved.)/CreationDate(D:19991214182636Z)/Title(DRAFT - CUPS Software Security Report)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
@@ -9,49 +9,49 @@
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
10 0 obj<</Subtype/Link/Rect[72.0 673.2 80.2 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
11 0 obj<</Subtype/Link/Rect[80.2 673.2 107.8 686.2]/Border[0 0 0]/Dest[79 0 R/XYZ null 818 0]>>endobj
12 0 obj<</Subtype/Link/Rect[108.0 660.0 124.5 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
13 0 obj<</Subtype/Link/Rect[124.5 660.0 183.8 673.0]/Border[0 0 0]/Dest[79 0 R/XYZ null 737 0]>>endobj
14 0 obj<</Subtype/Link/Rect[108.0 646.8 124.5 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
15 0 obj<</Subtype/Link/Rect[124.5 646.8 159.6 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
16 0 obj<</Subtype/Link/Rect[159.6 646.8 203.0 659.8]/Border[0 0 0]/Dest[79 0 R/XYZ null 658 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 633.6 124.5 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 633.6 173.1 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 633.6 216.4 646.6]/Border[0 0 0]/Dest[79 0 R/XYZ null 434 0]>>endobj
20 0 obj<</Subtype/Link/Rect[72.0 607.2 80.2 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[80.2 607.2 131.6 620.2]/Border[0 0 0]/Dest[85 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[108.0 594.0 124.5 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
23 0 obj<</Subtype/Link/Rect[124.5 594.0 154.8 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
24 0 obj<</Subtype/Link/Rect[154.8 594.0 222.6 607.0]/Border[0 0 0]/Dest[85 0 R/XYZ null 737 0]>>endobj
25 0 obj<</Subtype/Link/Rect[108.0 580.8 124.5 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
26 0 obj<</Subtype/Link/Rect[124.5 580.8 152.3 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
27 0 obj<</Subtype/Link/Rect[152.3 580.8 202.4 593.8]/Border[0 0 0]/Dest[85 0 R/XYZ null 540 0]>>endobj
28 0 obj<</Subtype/Link/Rect[72.0 554.4 80.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[80.2 554.4 109.3 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[109.3 554.4 143.2 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[143.2 554.4 168.9 567.4]/Border[0 0 0]/Dest[91 0 R/XYZ null 818 0]>>endobj
32 0 obj<</Subtype/Link/Rect[108.0 541.2 124.5 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
33 0 obj<</Subtype/Link/Rect[124.5 541.2 163.9 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
34 0 obj<</Subtype/Link/Rect[163.9 541.2 204.2 554.2]/Border[0 0 0]/Dest[91 0 R/XYZ null 690 0]>>endobj
35 0 obj<</Subtype/Link/Rect[72.0 514.8 80.2 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
36 0 obj<</Subtype/Link/Rect[80.2 514.8 119.0 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
37 0 obj<</Subtype/Link/Rect[119.0 514.8 152.9 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
38 0 obj<</Subtype/Link/Rect[152.9 514.8 178.6 527.8]/Border[0 0 0]/Dest[97 0 R/XYZ null 818 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 501.6 124.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
40 0 obj<</Subtype/Link/Rect[124.5 501.6 156.6 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
41 0 obj<</Subtype/Link/Rect[156.6 501.6 168.5 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
42 0 obj<</Subtype/Link/Rect[168.5 501.6 204.2 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
43 0 obj<</Subtype/Link/Rect[204.2 501.6 237.8 514.6]/Border[0 0 0]/Dest[97 0 R/XYZ null 704 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 488.4 124.5 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
45 0 obj<</Subtype/Link/Rect[124.5 488.4 163.9 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
46 0 obj<</Subtype/Link/Rect[163.9 488.4 204.2 501.4]/Border[0 0 0]/Dest[97 0 R/XYZ null 255 0]>>endobj
47 0 obj<</Subtype/Link/Rect[72.0 462.0 82.7 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
48 0 obj<</Subtype/Link/Rect[82.7 462.0 124.2 475.0]/Border[0 0 0]/Dest[103 0 R/XYZ null 818 0]>>endobj
49 0 obj<</Subtype/Link/Rect[108.0 448.8 126.9 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
50 0 obj<</Subtype/Link/Rect[126.9 448.8 155.0 461.8]/Border[0 0 0]/Dest[103 0 R/XYZ null 737 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 435.6 126.9 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[126.9 435.6 172.8 448.6]/Border[0 0 0]/Dest[103 0 R/XYZ null 434 0]>>endobj
10 0 obj<</Subtype/Link/Rect[72.0 670.8 80.2 683.8]/Border[0 0 0]/Dest[81 0 R/XYZ null 818 0]>>endobj
11 0 obj<</Subtype/Link/Rect[80.2 670.8 107.8 683.8]/Border[0 0 0]/Dest[81 0 R/XYZ null 818 0]>>endobj
12 0 obj<</Subtype/Link/Rect[108.0 657.6 124.5 670.6]/Border[0 0 0]/Dest[81 0 R/XYZ null 735 0]>>endobj
13 0 obj<</Subtype/Link/Rect[124.5 657.6 183.8 670.6]/Border[0 0 0]/Dest[81 0 R/XYZ null 735 0]>>endobj
14 0 obj<</Subtype/Link/Rect[108.0 644.4 124.5 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
15 0 obj<</Subtype/Link/Rect[124.5 644.4 159.6 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
16 0 obj<</Subtype/Link/Rect[159.6 644.4 203.0 657.4]/Border[0 0 0]/Dest[81 0 R/XYZ null 654 0]>>endobj
17 0 obj<</Subtype/Link/Rect[108.0 631.2 124.5 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
18 0 obj<</Subtype/Link/Rect[124.5 631.2 173.1 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
19 0 obj<</Subtype/Link/Rect[173.1 631.2 216.4 644.2]/Border[0 0 0]/Dest[81 0 R/XYZ null 429 0]>>endobj
20 0 obj<</Subtype/Link/Rect[72.0 604.8 80.2 617.8]/Border[0 0 0]/Dest[87 0 R/XYZ null 818 0]>>endobj
21 0 obj<</Subtype/Link/Rect[80.2 604.8 131.6 617.8]/Border[0 0 0]/Dest[87 0 R/XYZ null 818 0]>>endobj
22 0 obj<</Subtype/Link/Rect[108.0 591.6 124.5 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
23 0 obj<</Subtype/Link/Rect[124.5 591.6 154.8 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
24 0 obj<</Subtype/Link/Rect[154.8 591.6 222.6 604.6]/Border[0 0 0]/Dest[87 0 R/XYZ null 735 0]>>endobj
25 0 obj<</Subtype/Link/Rect[108.0 578.4 124.5 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
26 0 obj<</Subtype/Link/Rect[124.5 578.4 152.3 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
27 0 obj<</Subtype/Link/Rect[152.3 578.4 202.4 591.4]/Border[0 0 0]/Dest[87 0 R/XYZ null 535 0]>>endobj
28 0 obj<</Subtype/Link/Rect[72.0 552.0 80.2 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
29 0 obj<</Subtype/Link/Rect[80.2 552.0 109.3 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
30 0 obj<</Subtype/Link/Rect[109.3 552.0 143.2 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
31 0 obj<</Subtype/Link/Rect[143.2 552.0 168.9 565.0]/Border[0 0 0]/Dest[93 0 R/XYZ null 818 0]>>endobj
32 0 obj<</Subtype/Link/Rect[108.0 538.8 124.5 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
33 0 obj<</Subtype/Link/Rect[124.5 538.8 163.9 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
34 0 obj<</Subtype/Link/Rect[163.9 538.8 204.2 551.8]/Border[0 0 0]/Dest[93 0 R/XYZ null 702 0]>>endobj
35 0 obj<</Subtype/Link/Rect[72.0 512.4 80.2 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
36 0 obj<</Subtype/Link/Rect[80.2 512.4 119.0 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
37 0 obj<</Subtype/Link/Rect[119.0 512.4 152.9 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
38 0 obj<</Subtype/Link/Rect[152.9 512.4 178.6 525.4]/Border[0 0 0]/Dest[99 0 R/XYZ null 818 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 499.2 124.5 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
40 0 obj<</Subtype/Link/Rect[124.5 499.2 156.6 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
41 0 obj<</Subtype/Link/Rect[156.6 499.2 168.5 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
42 0 obj<</Subtype/Link/Rect[168.5 499.2 204.2 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
43 0 obj<</Subtype/Link/Rect[204.2 499.2 237.8 512.2]/Border[0 0 0]/Dest[99 0 R/XYZ null 715 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 486.0 124.5 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
45 0 obj<</Subtype/Link/Rect[124.5 486.0 163.9 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
46 0 obj<</Subtype/Link/Rect[163.9 486.0 204.2 499.0]/Border[0 0 0]/Dest[99 0 R/XYZ null 279 0]>>endobj
47 0 obj<</Subtype/Link/Rect[72.0 459.6 82.7 472.6]/Border[0 0 0]/Dest[105 0 R/XYZ null 818 0]>>endobj
48 0 obj<</Subtype/Link/Rect[82.7 459.6 124.2 472.6]/Border[0 0 0]/Dest[105 0 R/XYZ null 818 0]>>endobj
49 0 obj<</Subtype/Link/Rect[108.0 446.4 126.9 459.4]/Border[0 0 0]/Dest[105 0 R/XYZ null 735 0]>>endobj
50 0 obj<</Subtype/Link/Rect[126.9 446.4 155.0 459.4]/Border[0 0 0]/Dest[105 0 R/XYZ null 735 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 433.2 126.9 446.2]/Border[0 0 0]/Dest[105 0 R/XYZ null 430 0]>>endobj
52 0 obj<</Subtype/Link/Rect[126.9 433.2 172.8 446.2]/Border[0 0 0]/Dest[105 0 R/XYZ null 430 0]>>endobj
53 0 obj[10 0 R
11 0 R
12 0 R
@@ -98,341 +98,329 @@
]endobj
54 0 obj<</Dests 55 0 R>>endobj
55 0 obj<</Kids[56 0 R]>>endobj
56 0 obj<</Limits[(1)(5_2)]/Names[(1)57 0 R(1_1)58 0 R(1_2)59 0 R(1_3)60 0 R(2)61 0 R(2_1)62 0 R(2_2)63 0 R(3)64 0 R(3_1)65 0 R(4)66 0 R(4_1)67 0 R(4_2)68 0 R(5)69 0 R(5_1)70 0 R(5_2)71 0 R]>>endobj
57 0 obj<</D[79 0 R/XYZ null 818 null]>>endobj
58 0 obj<</D[79 0 R/XYZ null 737 null]>>endobj
59 0 obj<</D[79 0 R/XYZ null 658 null]>>endobj
60 0 obj<</D[79 0 R/XYZ null 434 null]>>endobj
61 0 obj<</D[85 0 R/XYZ null 818 null]>>endobj
62 0 obj<</D[85 0 R/XYZ null 737 null]>>endobj
63 0 obj<</D[85 0 R/XYZ null 540 null]>>endobj
64 0 obj<</D[91 0 R/XYZ null 818 null]>>endobj
65 0 obj<</D[91 0 R/XYZ null 690 null]>>endobj
66 0 obj<</D[97 0 R/XYZ null 818 null]>>endobj
67 0 obj<</D[97 0 R/XYZ null 704 null]>>endobj
68 0 obj<</D[97 0 R/XYZ null 255 null]>>endobj
69 0 obj<</D[103 0 R/XYZ null 818 null]>>endobj
70 0 obj<</D[103 0 R/XYZ null 737 null]>>endobj
71 0 obj<</D[103 0 R/XYZ null 434 null]>>endobj
72 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[73 0 R
76 0 R
109 0 R
112 0 R
79 0 R
82 0 R
85 0 R
88 0 R
91 0 R
94 0 R
97 0 R
100 0 R
103 0 R
106 0 R
56 0 obj<</Limits[(1)(ssr.shtml)]/Names[(1)57 0 R(1_1)58 0 R(1_2)59 0 R(1_3)60 0 R(2)61 0 R(2_1)62 0 R(2_2)63 0 R(3)64 0 R(3_1)65 0 R(4)66 0 R(4_1)67 0 R(4_2)68 0 R(5)69 0 R(5_1)70 0 R(5_2)71 0 R(cups-large.gif)72 0 R(ssr.shtml)73 0 R]>>endobj
57 0 obj<</D[81 0 R/XYZ null 818 null]>>endobj
58 0 obj<</D[81 0 R/XYZ null 735 null]>>endobj
59 0 obj<</D[81 0 R/XYZ null 654 null]>>endobj
60 0 obj<</D[81 0 R/XYZ null 429 null]>>endobj
61 0 obj<</D[87 0 R/XYZ null 818 null]>>endobj
62 0 obj<</D[87 0 R/XYZ null 735 null]>>endobj
63 0 obj<</D[87 0 R/XYZ null 535 null]>>endobj
64 0 obj<</D[93 0 R/XYZ null 818 null]>>endobj
65 0 obj<</D[93 0 R/XYZ null 702 null]>>endobj
66 0 obj<</D[99 0 R/XYZ null 818 null]>>endobj
67 0 obj<</D[99 0 R/XYZ null 715 null]>>endobj
68 0 obj<</D[99 0 R/XYZ null 279 null]>>endobj
69 0 obj<</D[105 0 R/XYZ null 818 null]>>endobj
70 0 obj<</D[105 0 R/XYZ null 735 null]>>endobj
71 0 obj<</D[105 0 R/XYZ null 430 null]>>endobj
72 0 obj<</D[81 0 R/XYZ null 698 null]>>endobj
73 0 obj<</D[81 0 R/XYZ null 698 null]>>endobj
74 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 14/Kids[75 0 R
78 0 R
111 0 R
114 0 R
81 0 R
84 0 R
87 0 R
90 0 R
93 0 R
96 0 R
99 0 R
102 0 R
105 0 R
108 0 R
]>>endobj
73 0 obj<</Type/Page/Parent 72 0 R/Contents 74 0 R/Resources<</ProcSet[/PDF/Text/ImageB/ImageC/ImageI]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
74 0 obj<</Length 75 0 R/Filter/FlateDecode>>stream
íßÜ8rÇ%µúÅOšÙíwNH€ØîO{Ï@pgF›ì[I¢‡]_r‡ öÎë½`ÿûô¯éÖRª*R57<à°¶Én~Äâ·ŠdQý·W7b½ýßøîV¼ÿ ~üßW÷òU"_ýM¼_ÿîíwû|ÿáÃÛµøÝÇ··âööæíݾÖïòÿ|÷ûìßîÅæ_×ûò~_>ìËÇ}yØ—ï÷å÷ÿõîñõ˯Ÿßý‡¸{óîßÅæææÝ=<ˆ;ñÃã«âyxá2+òñv¹\^]ìÊö?–wSç’Ë‹ÈS•‹ËëÇirÉÛ+5R ny71.yÛÅôT.¯“©pᡎhwSàz¸òÈÅ_&ŽsÝG¯\næºåRÙ4Gpf¬ìŽ™e®á™—oǸò+ÏJñ¯âºõ¬•`ã žÍrí—±^Ø2K\òʳ^ü×£så‘×Gùfd®{¯§$crÝx½3—e´ncmËëQ¸däy.“BX-ßÎ5 &€Åƒ)`1ÀÀiÉà‹LËóVqõî·Ì4›k`¬-X2×Ú¼p}òF(³Þ¹2o”òmÏ\y4AÁ}…giLA
ÚÑ ê£såÞ¨eÓW4.rŠÁ2Ç‹Á4<Yì‰\r|,ÏïK8Àå…Ö¹2ω²±Ì%#7¸Ë\kÏ‘²°Ê•yΔÄ"—+Vˆrb®Øs¨l¬qå.auJLO4PQLP40QL*ÒÀk=–+u
«cÀ`z0˜ Æcœ3ŽKºˆÕ×Ã51Ã`z.5Ã`¸áº¸\._?îÊýîâC¿ƒ ùº9Éw÷ z¸ü–¤ùpÕÏ€AßÃuÙ¹Tº7@[p­ûªò¨-­‡õÐãpÒ%77xÃæb‡´tq&ÙŒËÅ
5èé¹9kÉ0¹˜ÃÅJ§æ YÈäbòÜlHÆù<®´m·8d+W4”
ž¼YdEêÁþ®†IÚ;'Ù`ÃàƒM-~æUHçÊGÀ"ƒùt.²Èûv®H
cåhç 6£r¥#"— ¶ qåV<$,2ra`oáõmaµdF†Ö"yËX¤ÛW
Wj!œ1*kƒ/Kªá'ö¹=Hð\Ò<H3-9ßõ\0êä:”OlC++” è©®!
™íerÑ&ÃËåf8+z,gˆ`n†ýY!EW8®µVHèIˆãr@ iÒ᣸²‘=2CÁ6†Eï'as Wä†hP´>@peüÀl¼Kº¹bWDƒ2`«n®È'õ'ìäÊÜ.ä€\±cÃ…ôaIWäØp!Ÿô¢ƒ+wÆ%Óºvp¥Î
.J :¸„c³ -eI+—tp¸ps~ÕÊ•98\¸m¤°• ©òþ X(+
Z¹"‡"C¢r´qaU~`,ÔôØ´p!U>š« ÙpU~38Âg-\ì­±
1Ðse.Š<ZÐ-¸(òh´Òr GUgJs—tU5pS¦ãÊh¡aÕ“ÿT3ö§¿‡ã3M+ªœaýüß1`Q ×BË%+7nKh%ºÖDÃ%h±F+×LËuüš²Îa‡ÄOàL¯Çåé¹ ¤^9>ÜhKÎôZ!¹VZ®¼ô|k†˜Yª¹€è¼Ú¹B-×Áö‚ó –”>Ps ¢ójç
ô\g­”Uú™#8\a¹žŒKÁuÖö o†¥OT\95†êàZh¹Î"SöJRìCúÚ+ÄsÍô\ñÓ#Š(‹ï+ˆ@^kWBù.OÏ•?+§˜!b¢„*®ˆh†\+-×á»æ‡¿ÂoÙu
ÛLÁ%©fØÉê¹Ö Ñ<C5Únó\Õ ;¹|=×áˉ˃ )ˆ@öÊ –kvª­ä:Ç!Õ+–k=É“’«$R”UªÀÙPec犟ƒš+e­R;CÄyƒ+'a;WVÁipIÖfIŠÓ5 ÊFPà¹ä“Y¨¹N&EÚ,Éq=âZ9$pí;ê¹RÖž(+
¿FÃ%Y{v½lp1ÒÛ¹ò£(h¸Ž]$îÙŨ.M6‚‚ÂU•^Çœ§eR@“9ë¨ô:®˜3^ÊM6V4®£Òë¸"Îü’¨gÜA×Qé5\ï #ÂH6¢€ÈuTz
WÌÛìïzþ³*—dL¯N®ƒÒk¸"ÞáLŒyø@’•ë ôj®œyŠ‘b3ö6
*×AéÕ\ 7³HªÊ3¦W7×^éÕ\‚™¹#1Ž(QTHçÚ[w¬_W.†Ø%p
ëP¹[)¸ö½*®ƒÝKFÈ!ÝJ•¨]R6¿ÊuîDK4YÐ
q8€•EPåZ•M 4\OE8MÁnÃÌË\ˆ=›™Æ$eE
j\¹†+=òätCL29\hLbÖüC}ÿ³Éµ~zèÓJ´§­p ŽlTކeÉ•¸b%—<õ`M6D‰°+ D‡Z“K«:W¦äJO•Szì‹ÐÀG‡Þ÷ï^isSÖ̆Ÿªs­O#éùVž+çxåóWøUxE\Qå*}¢ Ǿ¢;@|t¸Àø’y“+Up•SQb²!®»' àåpƒÑ¦¤É•+¸Êz“‘a€çZ³d£a³¢Éu´Õ
WTž°äE˜|l/%.Á’úÄ<ÝÞS¬‹Ë\ÕŒ¨u@O«•O*§ØÇ(sÅÃN{Hý´jç÷š¼.”\²ÁU,/ï!UÐQ¯ÞNòý‹OýË®R¹R¦>•Ãdu«;š÷‹IÀÊ|0I.Á‹¢œçŠxQ”ë\ÒDæÊ
åÐU®Œ:Ε>79<rÅìèÐm®5?:tšK<7™?rEÏM\œ­ù pÉg'ó®ìÙÉ<–k2_^Î-»ÍËï•\nJ\1[æËu.7ª¿õ.®+Û~çÝÞÆu>e´ÝÕH³É8·¼Bp÷mê“3Qr-8\ 5Wy&}{âl÷¥Æ×¨N­‹3×LÉ•«Ï—#¶ûRh̸ÖEÃå)¹„úÜ¿i£¶W]nj­‹+×JÁ•6UPn9ÀrÍ4áËJÅr¸BWÔ|Œ–¹«Ë«u1àpM®'Ñð/¢“ÝÊ-‡h®•šËWqÕ¯ó¡¸wOr¾ó'ÑÑlp\óV®ý=¯ÒƒyÕ±$*®…ÒUãQD£²“y:lT¸±èæ:¾Ö8uøäU®”»8ãp5epü:@mb¯\¥´”êŸs{ê]ô8\FÕC§c Â¨
†ëœF¤È’Ÿ+»¸âpÕ‰j`¾§ ¡ \žmç’®XÏr¸êj3eo– Â¨Ãuþƒ"û_Íås¸jêO%žËïƒKq¯›KÑ(«;Øå¶\&< Ì¹šº¡¸Î×Í¥»ªÖËž.©áZ«u^qÁÕl+,`¨°0ÑÃè”s[íbó:‚«ÙH(ŠkŽâÊÔþ+ÓÄQŠë|®f#-Wf‰+VÆç0¤ÖÅæu>W³Q¤tD(®†Kz
En]§(®óa¸´\)?Œ*õáø+ôºRqÃÕhT®~þFצ0\-”]l\çÃp5i¹€FêÑìª6ºxmW½‘Wæ
Uë'š.Ö¯ó¡¸ê´\±E®zuë×ùP\õFZ®5?<,Ô§ÙÞot±~ÅUoÕÒTO\—Ÿh¸J¡j¥‹µë|8®Z#>W€äòW¥¿=úåã¶ÇBÝÅÚu>W­‘()v…+²ÃUÊ?,LJmPÝÅÚu>W­Q#ŽJ±\a*®Òû¡]Ü‹6•«Úh]ˆâ#—×/WÖÆU½Î‡äRÜ,wqåšqåºxþT
"WµQZŸ*ÑKöÌ%5·8×ù\ÕFYM²¥‡åZq­\Àáª4’µÐ<u+çpUEÕ &Ž\ݹ‡«¹*×ù°\ÕF±"Ë•Ës¸*Òó©òy“wt®ŒÃUi$˽ÌNñ†É²Ò—äpU‰óù×½GàJúä*_çCsU¥óJ¸RWµQ-{.“å2Š+jçÊ9\ÕFÕ•q¸v‚«tÏUkT°$k£ïbÌáª6ª¦Áž«s{Ã7ä^y‹v®ø©\µFŸÊ‹Åt®Ó›4]”®z£ûÒV„.wÊÃ>ÿð›óûç;¹¦’+Ëw¡{›mr¹½.ñÂõÂ5®Ù3å
§É½p½p½p½p½pá¸æ/\/\ýsyæ\Û•ú^)¥î¸\÷ûw˜ùטîRêŽÌuU¿¾V}ÙPé
sŠºêÓõI•§¸(¥í1—h¤oTóôËÇSͺ ®Mu3´'®OÍMõe^ùù°ãæFU'תú@ûá’Š¥ê
ÓÓ¿DÝ<êäZ Áª¥µ(O°ZúF­.ƒk^T¦f?\‘ê¨ Êó ª¤ÉÔë2¸Âª¥ô•?<]”ë–_]{>­WÖep•¯î‡+=ʛҗ–$ðœ]¡¬ËçÊúäŠK'Öë³w)¹¬sò¹¦®j_ý­Õã´O.QyžUg
YS—ÆåŸŽO·“8è+*oÉšÒŸ'i©Kã
N#îâ2‰ç+ÿ gµ8M°¬š¤­ªKâšÇöÉ„Ãp¥ç?R` š¤­ªKâ
ËnnÆÕ‘~xúçüb[%±JJw¤ôuI\»û_§Ç´è•+ÐýÃŽ§”TܶÕçÇIº›Â«Þ¸"]:ÎñL9/ÁD-©;x®õñóvŸ¼éë n4qcP™FÚº$®ø(C;KOzã:žu^nÔÖ>“âIεuI\pÎ~õ‹Þ¸N!z£·‡~ˆJ¾X_WÉÕLìÜS¤Çùºs_ýq•òAj½Ÿ¼ÍÉëëR¸²£¬wlÆÕv®W®Wy/qÚÌ¢ÕÖ¥påÇ?îܲ!WÛ9l¬¼ÇQY'u)\Ò;½}ÞÎet¾,µ™¥¢‘Õ¢¯Kà*ŽŽyÿ·ýqÕ²hý¤1’!¢.…ëà˜÷n¹O®Ò‹¶ªª™ÓÕ¥ps¶÷ñ}r=]„mäR©’M[ë⸎9Û×7ãêÌûºT³F(Šº.Þ/ïÝ`²û¿ƒËF>ÛÃUsQ“j9ªº®to{·Ü?×¹·³Z(µAÕ%póÞ-Áõ$
75 0 obj<</Type/Page/Parent 74 0 R/Contents 76 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
76 0 obj<</Length 77 0 R/Filter/FlateDecode>>stream
MŽ;Â0D{ŸbJ°É&&Á%ßbs”8|
8”ÛcCi‹ÑÌ›½3BD(Rd9ª+6^+¤ L9Á/¤0õ`YÎÖ‹ÝFC·í…¶ÕÃ|ÒÞZç‡æD@“©(À) œ@ˆM®uÉI$1Èi"Vû®ÿ7®­•ï>A™‰üÓÞzw:=H©‚‡£F˜].(£Ù…W:ëž¶ŽÕ•a[ö3œ>¬endstream
endobj
Wz¸Y˜s­Ú—_‹ò:d¦åj«KáÊÎN½7®´<žëÚ×Ô:ÛV—•ŸW­\&÷mý»ó¡ÖJËÕV·#ž¯¼mKVO
¸ç°çCHýb±­.…«ô^Øþ¸â–µZ«¥.‰Kฌîeç-Uë\-u\‰9×—nSý±Š¾.‰+nüM\¹^a\9w?ªJ§§ÒÊeôþê^Ì·E+—¾.‰K÷~V»\¥Î^\Úº$®ìäÓÛ¹Œ6²wÞè*Ò”˜Ô5*†ïí9ÊÏë
77 0 obj
183
endobj
´Ð;!樈
´Ð‡‘Ãy™ !ôŽ ì
78 0 obj<</Type/Page/Parent 74 0 R/Contents 79 0 R/Resources<</ProcSet[/PDF/Text]>>>>endobj
79 0 obj<</Length 80 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
¨Ss4CDØÒL˵v×iÛ/PÐ'ØÂQ3,ÇB@vé#bJ3$ ¯pF2Ä5íyÝŠG1DI ]¼ÄÇSâㆂ1ÁFˆqz@Á™`¡‹fXYiçÁ ¿XI©
endobj
80 0 obj
31
œåöÐ1‡ Ï àl sd Þ$Tê׌ ÌÇ3 ÔKÎcîç ÇÜi:Ü€±¦;peu°ÃõfŽàB*ý@±ž1ð?j˜c† ÀŸ©Ã ë€í°”éL/AƒÈ)Qà¸ÖX°•Ã5CreŽ ˜Œ¸A8F†Xû©¥qB
Õ*
3Cìuá,ùV…™!öªõا»@sá
±GéÈ l
endobj
81 0 obj<</Type/Page/Parent 74 0 R/Contents 82 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
82 0 obj<</Length 83 0 R/Filter/FlateDecode>>stream
UKo1¾ó+F9%Rز@!é-o!¥í6¨.Æ;œx=[Û ¢¿¾cïRREM<¯ïûæÁN
=þ¤0îÃ`²ìœÏ:®O¡ßƒYÁ–Ñx³ü0…©¤
fOÑšŽkw”&ýhOR˜äh¼*”^i\‡¦­k”ÄT³¥rà¨ðkaÊÚ*¿Y•¥•ÊÑzãØ›
¨È9µÐ/$‰Ö8(È‚_"\PYû/“ï¡8—L
ºÌ*FfaºqK˜\ÜgÓƒù< uŒÒ¤—üÅnØKNvýmè×Ú•Âõôþ@ûµw!SµõÑbƒ6
±óþǰêVD£‹ \Káö8.
š‹µÓÑ“Æ'6¹rg¸…M.g´ç’ÑT4žÆÅÝÂA4h\NHö¼—Â%'c…4.,}tHâÝñY4®|"VHå9þ%`¹FµDJî •kLïL9~¢rØ“’æÈ\£M1ZÚ k¤)FL,cp3ňg» ®Q¦5Ë€ÃEIC3Ø\ƒk=UŽÇ5°v02™\R¸+…&\CŠ"+u˜Ë5/“ŒÍÅHûÄqs
´cÞ80àÂ?ûÜ‹&\ý›"?KÓˆ«o0ƒäS3®~UÑ$YØ«Om”mÊÕ˜Y2¾19‡º§…‰}®>–-†éêv¸ìË¢ù½ +\…´k‹×æ=²ÃµµE{Cl
ä¸BÍ9,6p%ܦ[¡3Ky-½OCI‚óÂäÂæ;ŽtúQ­+49ÙЕ|¯níXÁ‚ž;n¡-߇çhŸQcèZYòCW+ƒÀ%ÑB¢KÚ¬[c:Nݤš?ƒ~'&³ñ$Is+'W³ëî$˸™¢q_ˆ04?—Á?Òƒ'ZD
ð£Æš‹7kÎmÀËp#.†>Îo³Ëc¸»¾HÓñéüè¦<lÿŒÎ‰G„sMò™Ý¦ŸÏƒ5T8«ª)?bœè•+s„v´WÒÕU˜nÚZù%/÷‰µ‘¡B󴿪Ès,ËšìsÃ1-,­] PdäüTZUù'tñAEbYvÉkÐeÉðÅP´‡Yy¸®ÎAT•nwÞAmrl†÷uÄÌž».uÝl€¬§RýäÚ«vy×o¾ÜÃÍr}~È+où¸è
4@©øÛk˜ôó£=¼A¾$ª m*ïÚÝ$ã!$¿/0 YvbËÌé¾­•Õ½upI².࿜‡·®_¸uöQ˜¨¦8ÏiM븜GÂ}jòË6ÿ„Ùþ.1ïÆð'¾ßÝ—\î€m•z-Š“ÂÈÚó޾+tÀ¡·$yJÎ$Ç:¸Sîù})†±z<TÿãŒsÜhþïvÓ˜NZS·­·ýÛé3<é%§œ9¼†ßW³Î·Î/ ó7@endstream
yåÎ`Ùä²4d—›Â5®BÞËàk[}±ÉÅO­>R]Ûë‰].ƒôjDêö˜\\2»T}pqÈ._ÛîC\ļxÙÃ{.úáÚ–G\v¼y×Ë×÷Ƶµƒ¼X>öõÝ}rí‡ívy¡§ëÇ>¿·o®ÃÀín8,¯.vår¹¼~|ìý+á¡@òëôÕ½|õîûâæ£›ïÞ~wë·wBþôOÙ§ï¥x#
ÈEþó¿þß¾|ùçýò§¯¿‰ìó_þòõŸåŸ·íïÄÍÍ®ýÍÝGñææýÛÛ]û]»7yž½¹y»ÞU{s³Ù~ú›ÛOþðËoç…/?ÿôë_ÙW¼{ÿöCés~þëo_þôßÿóuÛÉß½ÙþßÇŸþò‘íþò—mG~ùüåïŸÚ5MäéÿiÁñ½endstream
endobj
83 0 obj
820
endobj
84 0 obj<</Type/Page/Parent 74 0 R/Contents 85 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
85 0 obj<</Length 86 0 R/Filter/FlateDecode>>stream
76 0 obj<</Type/Page/Parent 72 0 R/Contents 77 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2‰˜˜˜é™)€ù†
ár
á
äHendstream
ÁÉù© Q×®@.ü7 £endstream
endobj
86 0 obj
118
endobj
78 0 obj
31
87 0 obj<</Type/Page/Parent 74 0 R/Contents 88 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
88 0 obj<</Length 89 0 R/Filter/FlateDecode>>stream
xÚ­•]“š0†ïýçÒ êU·ãL¥‚{åM
79 0 obj<</Type/Page/Parent 72 0 R/Contents 80 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
80 0 obj<</Length 81 0 R/Filter/FlateDecode>>stream
Ä&q¶þû&¬¶îL±;\€rò¼çã=ú£‡ÀÓ‚ȇaYÕû”öŸÇà{úMæ}Ö¤ ‚°ŒÈ‡ô{‚"â„Èõë Ál'0çÙ±"LaE9³á Ô„û¡[3Ó=‚—%£lgæ—J­jßN öú«6fbÁYöG:‰3{ë‡\+÷3[År½‰Õ›qVÐÝQX½fxG â³k¾N
mï—óù<9IE*X2ED3s"鎙[&èáwoºH$Ó•‘p¶"¼PoX˜æeT*] ÒÔrÄåüëZú‡¤¯n¡cÁwW•1ÁÝY'ë[è„dGAÕI›÷À…ºƒ›Æ·¸)‘÷Z$Ù¼3¿$ÿ3¶×ùm쫦oÿ5¹v»8çŽìûð¢öDœ—Xþã3Μ«%–`øÈ
^. @ÃQäƒv½.|¯kh;Q¦L>Û~.p¡¶º¹ŒãÇzâÓ<§†ˆKx9œˆ•‘àhs)@Øëç™~ŒÆøB±™šFcRé é=P<ãeg¤ÿ>
àœø‚e<7
À,‡T`&;{¿¡†ÔÏIY#RaÝáLvG†ÃñrYÊú×Öÿó‘æÄž5ggúã ±æÿAÁÈsÇZW¿šÏ‹´÷µ÷ dÃßÎendstream
endobj
81 0 obj
89 0 obj
541
endobj
82 0 obj<</Type/Page/Parent 72 0 R/Contents 83 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
83 0 obj<</Length 84 0 R/Filter/FlateDecode>>stream
+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2‰˜˜˜é™)€ù†
90 0 obj<</Type/Page/Parent 74 0 R/Contents 91 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
91 0 obj<</Length 92 0 R/Filter/FlateDecode>>stream
-‹Í1…÷÷)Î’E™[Ͱ5˜5Óë¤n3TE¼½©È9›óó=ˆQb,êâp£FhÞ®À ‰`ÇXÚ
ržl»u+0Ø÷~ˆù}J
¯á•.ùƒNïCÊS¹’)ùS®4Îò¬Æ/Ûñ5iôY¦Ð¾­u"§endstream
endobj
84 0 obj
endobj
92 0 obj
121
endobj
85 0 obj<</Type/Page/Parent 72 0 R/Contents 86 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>>>endobj
endobj
93 0 obj<</Type/Page/Parent 74 0 R/Contents 94 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
94 0 obj<</Length 95 0 R/Filter/FlateDecode>>stream
xÚ}T]oÛ0 |ϯ úÔ'iÚîmÝP`ºÖŬ{P$&Ñ"K©$;ó~ýHÙNZc°t"w$ŸF9Lè—ÃÅf å躽þxÓ +ºY\Ì¡P§3øä¤0ðVJ ît؆³â'Açç-t<]d ÜBE õ áâÆþ¤°°DÀ_;ãtDΚö:n@€IÏ«€žc¸ÊÆ ŠPFí,(‡¬‹L€Òæ³lÊi…Rž3ê*x4‚CGŠŽ°ÔV¤çnE$¼sv"„½óDÀƒ£SÏI*¯cÓ‡!€“:EJüøéÃç›oƒän‡žÂÛ5„&D,³V+È/:uæ“ì2I™åpß'¹ö(äÿ­eAœ°•oï`kÝÞ)Ö•±”v©Žš¸&‚æ™úo8îôü.Ï€Nﵕ˜jQ¸•‰ mˆÂ˜V"I´"$ŽQcúTbiH4|"Q")êÉ ç›W ém€ A3bEJL…QQÈ
–RKg#ÚØ‘×6ÂJʺD
•ðº¿<+#ÁÑöRàµb¯^¦úq÷à eÄVjH¥g¤7Añœ—­‘þ0öàRøœå †!ˆÉÖî?SÃuÉ1)OÈ”THw8—í‘a7j_ž~oõ?(&6':çœéÇñ½¡AÔwc­ª_æó<ë|íü ÕàIendstream
’Ø5©òt‡*ë$?JÃy½£¬eßQTÖ­[ËJ±eG’ÛCâp¨)õ¡–º.ìPꕦÚlfÌ»‡Û{æ¾ÒëÊ·z1ïDoü¼Öi'ö{¢Dj?ÜÝ´ƒÀM×6æRÈ-ZÅï#‰Eù°®¿O~€°*}Z@[kïlIRA-¼fÒ´ªz(rÊÄŠ°Â‚¢pYV”ì(…í›>°w¥hX¸þ½˜A¢¹æÝ<Ó§ˆâ±t‘%®ò‡>}å+éÊ’+Mã/ls 1&#YB8¯JDºÈ©ØÉ¨Œ.u'B.­É µ¦ZƒkÓ±i‡ú”(_v
C[Âýþ[wõê²qÜâ'AXš3žÀãiß-,ë U“ÅL¼Fõxû
òÄ’w¬œ…›Û[FÓÁ€yÏVôU'õ‰&mº~S‚ˆ<û¦[4—ÝêÓÏÎÿ[ÚóËIvEK† çüý¡}ý†‚ýíendstream
536
endobj
88 0 obj<</Type/Page/Parent 72 0 R/Contents 89 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
89 0 obj<</Length 90 0 R/Filter/FlateDecode>>stream
xÚ-‹Í1…÷÷)Î’E™[Ͱ5˜5Óë¤n3TE¼½©È9›óó=ˆQb,êâp£FhÞ®À ‰`ÇXÚ
ržl»u+0Ø÷~ˆù}J
¯á•.ùƒNïCÊS¹’)ùS®4Îò¬Æ/Ûñ5iôY¦Ð¾­u"§endstream
endobj
95 0 obj
757
endobj
96 0 obj<</Type/Page/Parent 74 0 R/Contents 97 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
97 0 obj<</Length 98 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…ê2[ëìò|ò“s““S‹‹‚2‹³‹AJ\C¸¹Ñ€%3endstream
endobj
98 0 obj
131
90 0 obj
121
endobj
99 0 obj<</Type/Page/Parent 74 0 R/Contents 100 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
100 0 obj<</Length 101 0 R/Filter/FlateDecode>>stream
91 0 obj<</Type/Page/Parent 72 0 R/Contents 92 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
92 0 obj<</Length 93 0 R/Filter/FlateDecode>>stream
xÚ}T]oÛ0 |ϯ úÔW'mÚìmÝP`º6Ŭ{P,%Ñ"K©$;ó~ý޲¶Æ6`éDïH>Žr:Å/§‹ MgT”£«ÅèõÇ9åsZ¬p3»8£…<žÒ'WCoB…@·:lÃÉâ' g”ç-t<g3·PÑB=CIxEqãÿ‹H…°´T¤~íŒÓQIrÖ4´×qC‚Lz^å9†«lÌh±Ñ‚*¢v–¤S¬‹Liói6á´BJÏu^Á¡£#‰#Uj+Òs· EÞ¹H;ÂÞyðäpê9Iåulú0¸B§H‰?½ÿ|ýmÜí”Gx»¦Ð„¨Ê¬UBžg—Oú´bf9Ýõi®¼ÅFý[ÍX©VÀ½£­u{ûD²®ŒEâ¥6:j°MÍ3ýßpÜÉ9'³6yžßi[¨TT+Q™HÚ†(ŒiE*@+rùãSŠ¥²Dhêa‡óÍ+ÒxhçBÐŒXAË'Sa(ê üà`)uálT6ödçµ´ÒY—
A»&Užî”Ì:ÑûZRWì¼CÖ²ï)T êÖ¯eC¥Ø²'Éï!q:Ô”ºh†¥¾ ;Uè•F mF3æÝýÍs_éuå[½˜w¢7~^ë¤û=(AíûÛëv¸íÚÖ\Šb«¬ä÷b!ëúûéV¦OKÊÖÚ;[B*ª…×L:£ÖA™BEN™XVX
xÚ}WÛnÜ6}÷WÌ£¬×ÞµãKûT· ` -RÛAûà®ÄÝeL‘
IYÞ|}Ï ©½ÈI`À°¥á\Î93}=šÑ~ft5§óKªš£ÛÇ£Ó74?£Ç%Þ\^]Ðc}|A÷ºñIÓoU¥c¤{Ÿã»Ç/°½ Ù,ÛžÌ/§b]lU¶
lK*hJkù·JT)G MúµµÞ$]Soð¶K¤ÈúJYê¢ìÁw]}ê-ƒo`²û¸‰I7SαgçÓ9Ç~\›HQWÉxGµ×‘œ‡ƒºœ‹‰±Ã£ ­â É“Ó©÷á™Ø½ ºWÖòñ.˜´™æ
ohvU*¼8^ Óý¡A¢~I:¼˜
तªŸàò§y*pç’ˆŒHr2N€Š¦ß?zG(U¼tÖé Vs¢õ6\9D*‡›q•íjãV¿pèùû]ÄÙ”øÑñ‡˜àÇÄ5Œ¨él2-¼VÞ¹ŒTäœB‰ÐÝФ̈́¶ €RãƒtPã6˜@bppÛ°T1Ìj¥Œ‹x¸7h°ý2õÐÅ”î×Ûú
Yv©ƒf<J‚(‡GlgÄŠÔÓÙšC£°¥Yá¸PlMcDv]³@1pµ_:ñ=L‹¼"0BÐjšŒÂ­aÇhH11&½Ää’Û€w,VPzã¸táH :a¬OóB̽n5KÑnÈ·`ô@ìTYÏiü„!i©€©ÚáöB4P1ܤUÜP¯6\|aF‚jsgÜž ð¥öVù†2\#|ÐÀÑÔZìsí³Zgalyöè9 ¬(vÕ…— €ö®ÊÞv@ŒBýh
Z;ôv¥Í  /jú tŒW"«¸,æCç9%À£¨_{”;Š7غÕ[RÏ ©­÷ÜŽYs‡oQ§Nµ!Ñåùì
ÀNnD­ÈèRwpp´†rZƒkÓ±i‡ú¤(_v
ƒ½€p¿ÿÖ]½ºl·øQsì=÷ݲ¾P5YÌÄk%Nh¿Q<±ðŽ•³t}sC…Ñ80ïÙŠ¾ê¤>hb×õ»y>öM·j.»Õ1ÆO§ùÿÖöÙåi6Ç’䜿?,F_F¼qþbendstream
w?­6Q¦¼õ"³Ì"¹ÚHø‡U(íW€8 u ñ¨<ñĪá~²*¬†¦‰Y8†'ZæE+9xwPå–H»ò¡ë¦T€ôÜsî5¦°(«ƒ¾âáÀ%õkpÉÒÔ
]D/Êššº¶F³ˆåB³Õ@ö[..
Ú ­
93 0 obj
760
endobj
94 0 obj<</Type/Page/Parent 72 0 R/Contents 95 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
‰ççݧOT4¥ØêÊ,
”j7HegËåfA³ètZš3qj1ù¶…ñÀÙ7åbƒ{, wÓ^?n‡_åki͘BW¥aT©1z€—•¿—0¡zÄOðüd)ûB×®ÉGàrËÃqiùÃ~_âÒËÊŒoñ|?ÂSÎZÏp±*è‹_Ä)kd2 D¶öœ¥Üé1šèíÌõñØæ±¬*c¡jþÎðÊ5ì¥ñtÌÈå{ø¬ÜÃÇ©×ûŒãƒù¦/éãOï~<õ™\„yÜgD·=!u5Ðie|K±ÌeN H¬4ßë{Ý9ì%5t?îC^†"ç¶S+P­¡œ´ê5kß7
èÀ_P‘ɘ”t†å „<;ß;¹Î8ÎЩq\%gŠ5‰}pê'5ÛÁ
K
Þòmã´®™¸Âö¦]DÿmAmL'Ø)÷v¦96¥¼YÑ-”^­õw¥ý^Ùß‹¼ÃU»–‡f¤[MEªã–Lhc™}2i¹§](P1¢ê(Ê–‚šø·ý†ÖªJxBx\`]¿¦²|løÀ)=¾µ$iȾ>ÿ}÷ßÁñqØÁÙ°ò)(/‡£"÷Þïö1Â}±§€âs|•=—KeÃü½@ŸõJo3ˆOï†Ê2ôß›fµ^*l“¹ØaëÊI•K*뺪±5U^Oé_œöÒI;!Kwdû±:N˧ƒc÷Yˆ¼S‹Àw›ï°@Š0d#Ï’½m?v ÞÀË÷È›Ý"÷U%psØá«àz§ÙóëŸ~#]\ŸMo`›+þÿÃãÑ?Gÿß+‰aendstream
endobj
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
101 0 obj
1459
endobj
endobj
96 0 obj
102 0 obj<</Type/Page/Parent 74 0 R/Contents 103 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R>>>>>>endobj
103 0 obj<</Length 104 0 R/Filter/FlateDecode>>stream
xÚ]ÁRÂ0†ï}Šÿ¨‡–j©G¹9£ $[§Mj’Šøô&àÈŒ“\v÷ÿw¿ÝŒ¡ŒaQ§/‡lų٦càm¬ÔMU4àê†wC_ƒ6ÖÁQOÂl‹Ç·—Žºïá§q´.`­äÄ:2AK´5Ic¤Œ# ä½8öV0ymð4
'Ýò÷¬DÎÅ<M~^ßåû8KE9#0
£ðþhB«{òx§ýct6 W…6­uÃ…âluô10™„hþ&õo¨2BM„`!í:AĊ̵»/u¶i~oÆ*†šuê²Þ>l8òˉv¶
98 0 obj<</Length 99 0 R/Filter/FlateDecode>>stream
GWß‘œœ'l)+ÙóäÊ—ó2¹š”Y,ï‹
縊Hž•#!;òIóij×ì+e¶endstream
endobj
ø¸I!A¯WÐ5¸eìàŒ ÝGÆÛ¸tBËY¶±…kzgÆJàiMÅ©l©W¸žD6ºÖ1e¶m½„Ú‡E\‡£Å`¡¸5ŽéÖ8Çl¤CdNº”“!7¿±]!ä­µeèI£DÕ˜¹ê#ÍŠ0ªQlF³!×@aÈ»“4ŽËø‰B"ÐR€S±ãíAXÑܤDØP'6 ¾(“’i"k§íž
wâ$â Ž&]ÍW™®?há +•ÎçFî ÔzµÎÆØêìÐu\QhåÀK’õD;+s´ƒ”^}GOGZƒˆ…RÝ-•~õÅm}?¡€–ùŠdT".›ù0x. ð0êÖpùú³võVÔó"êgã·cö\a€G•äô
[[ðá#]Oßèwÿi•i* Z—l¢—Y@Wé„ÿ`¦ö+DȺ¥x/Eb×p?áW}Ó„lÍ“ -ó"´I58{€r+¤Y9 Ñu] <ûœûF %,Îê  “<R·†–lM%ÐEô"Œ®¨m*4K:¹P|ªû­EGe“ð‘ççý—/T<~¥Ð(©—N5›¬²;Ëp³!½^´HŠ
Z•š3ri!º¦Áá^³>oô†/
Tè_§½~Ü?éªÔš!úVÆ~Tù„9:¿W0½ãc|/SŮȵkò¹Üò\Zþ°ß—xö²Æ˜á-Ÿ—>Ó½Sã˜.v}s‹3eŒúȧW™^õÇl:Õ7ÑÛ™•ÜÇc›Ç²ÚÀÕ*üÎðÊöÊx:fæò;|VÞáã¿ÄëCæñQÿP‡ôñާ“§>8Ka÷™ÑmO$\5|*µkCËZæÂ0é€ uÀJñ»²×­ÅfRÁ÷Ã>äu(àrn;±‚$ØÊM3¢N±÷]]Cü
.Ò™“RN¿~Agë:›ž3ÎÓwj¢äJ±(q .}l€Ùôa0X¢w†_«TŪ ö7eúoK›iŒ½rokšaWÊÛÝÁër­>Þ–ö»e3rehîDÐ’DËMÑÈiú¥YË(¬¨UA„ÜxL{
104 0 obj
303
endobj
105 0 obj<</Type/Page/Parent 74 0 R/Contents 106 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
106 0 obj<</Length 107 0 R/Filter/FlateDecode>>stream
”ÁŽ›0†ï<ÅÛl IŽ)J²‘V[*X©×Y3aÝ`›ÚN£¼}h¥®,µ2²°føæÿíÁ?¢<RXeð)¡¢Ïuô°ß@¶€úÄ‘|µ„ºù°…CgœC{ûXÒÕ”çi’)I
5Y妌ÒtÈ`jœåÉH)¦ÐòNh ¨þâÉB‡º½`KÉ{Püwz»Žºy`Eº‘ºcÁ’ ùsX4è”±þ
5Û~•ðR… ÊžBê¦øŠ·Á…ºh)ÐK£.£©ƒWòW"
þj ·¦µ¨\¨œ#+ñ¿Üýƒ'gÄ™|ÈË]i–oìyÆ]ò¾'bî¥x¹HÖSWd°Öè[¨1¶Uq<„(ÞÁVyÔ
îŒ=”˜ÃÇìé¸<+­Vj[Ax:é‘eêß›g•Z
ì“l¿wå¢Ê3ú•]TØ4¬š~žÐ¿¸íR/í¬œú#ŸÏƸÙcvñáÿŽ\ÜœMnqg®ùߟæGÿýŒÊUendstream
Ú
ÓœØýQó¬F=üÎí3hj)àºx)«ùR;dÔËóñ”Vj?llusžT€¹«Š‡rº+«/ÏwÄȺy_¸{ÙÔµ;Ñ@3ÞÓhe|xšç=Òµ#ïãÅyz°Ø¿Iáàé÷/9}ºþƒúÎý°\/’
ß
99 0 obj
1405
Ø ë]}~ùÏ6åendstream
endobj
107 0 obj
424
endobj
xÚ]Q]o0}çWœÇU4NXš=®Ëò6ikØÜÍ|ífÙ¯ßuˆZ©Âºæ|ÝßBa%Âf›™ŠÇ¦¸?ÔP
108 0 obj<</Type/Page/Parent 74 0 R/Contents 109 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R>>>>>>endobj
109 0 obj<</Length 110 0 R/Filter/FlateDecode>>stream
’MSÂ0†ïý{ÔC+ÅRË‘v„¡C¤ñÄj¤$˜½IU“œö}v÷Ý}õBè˜Âml?ÝxCìÝd1„!à•
endobj
102 0 obj
381
endobj
103 0 obj<</Type/Page/Parent 72 0 R/Contents 104 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
104 0 obj<</Length 105 0 R/Filter/FlateDecode>>stream
T]o›0}çWÜÇíZÒ4…Ç %i¤ªcJ}uÍ
õâf;‹òïwZ©ÝŠ¥N „uçžã{ð¯$‡Kºr¸™ÁÕ¸J¾µÉꄼ„vG•ÅÍÚîË6Ò8Çìékûs\gÅI¯‹le9´h•1 Èó€ Þt¶!ÕXšPZ7j8x´ ™î¬Çì=Qú>0ˤD9MØ î„îÁX°ÈQü‹ŽyÊXÿÌ4Ýà…Š7ÆÔé‘ uЂ3/ŒvÀ©F OèˆüÑÀ`Mo™r±v­`ÿåîžœá{ô1W$÷ìJ“|c÷S‘RžÒ«ò53Xrkô)eSm·)Š6„ÓÈÏtÇl•é«é©ÎŠèñ]=ÔÍt«Š<ÕÃýöj+´[ÛœœGá\5ÕE=Mºª›ï÷ˆ?7@ë"Ìë6»¡µL»
72Âv[§›»i¾[<Jô>­ß¡ˆgÁܽü”ã§Å+uô¼  ÿsJ̋ˬ¤ó
eX¯ÚäGòE8%endstream
endobj
105 0 obj
426
endobj
106 0 obj<</Type/Page/Parent 72 0 R/Contents 107 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F6 6 0 R/F8 7 0 R>>>>>>endobj
107 0 obj<</Length 108 0 R/Filter/FlateDecode>>stream
’MSÂ0†ïý{ÔC+ÅRË‘v„¡C¤ñÄj¤$˜½IU“œö}v÷Ý}õBè˜Âml?ÝxCìÝd1„!à•
ÅI$€—W÷ÈG£Ù5~1ztÖýnDÎÓÚG„®‰ZR\h¦`$…V²‚厔ì“ð]Á¿@˜Ó”˜Ê§ßà')ÎÚáLC*J.0©×IE\„~mšµL¤¤–TV.b1ÿ‰H4—‚TPh"–ÆŒæª$‚¿7‚ƒ=CãvöÌL~²uLØÆ‰Ê'yÚÎÊw•æ¶äN&ä„W¾Ñg³-—¥ÎKCfÍ9+äšÉZTñ­>ÏÍê&àö±È‡íÔ‚©½!嬮m³ÃJÒµƒ…3ì8!¬øž›Ug¼b€õʰ/Ï(ùÊ‹ûÐKúAlóÆ‹A†Á‡Ñ#* +} ŠAÁèNq}„ÛJ¥mºF!øwÝŽÍ
ÅI$€—W÷ÈG£Ù5~1ztÖýnDÎÓÚG„®‰ZR\h¦`$…V²‚厔ì“ð]Á¿@˜Ó”˜Ê§ßà')ÎÚáLC*J.0©×IE\„~mšµL¤¤–TV.b1ÿ‰H4—‚TPh"–ÆŒæª$‚¿7‚ƒ=CãvöÌL~²uLØÆ‰Ê'yÚÎÊw•æ¶äN&ä„W¾Ñg³-—¥ÎKCfÍ9+äšÉZTñ­>ÏÍê&àö±È‡íÔ‚©½!嬮m³ÃJÒµƒ…3ì8!¬øž›Ug¼b€õʰ/Ï(ùÊ‹ûÐKúAlóÆ‹A†Á‡Ñ#* +} ŠAÁèNq}„ÛJ¥mºF!øwÝŽÍ
;6…IЃ&0º0 JŠã¦¶RнïõG%¿endstream
endobj
110 0 obj
383
endobj
111 0 obj<</Type/Page/Parent 74 0 R/Contents 112 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 53 0 R>>endobj
112 0 obj<</Length 113 0 R/Filter/FlateDecode>>stream
xÚ͘Ûr›0†ïýºl/BÐ ¡ËšLg:“ÖvÀ%rã6˜Ófòö]I+26´W!™ÁÈ‹>£_»?¿”äðO‰b„¤ª—ëÅù&,'ë-¡R“B ²¾·Þ|{4¤Ù’«fß™}wx¿þ±ø°^äY{ ö°¼µ
Rp™•¤&eÆðü‘¬,ûÕåíwr~# ¥ö×l·.…_£ä$~@ÖÄ}$|EʪjžŒ1 pø"›ý=9nÄXVÀÀ%Ë$6pàç7e„y,‡ˆÕ1Q2‚ÔЗZ-c$Æõñf}·ÝUn×ì-T*è1#]§´Ëu&zí\j£y&¼blJ1ä”
„I8>H«—Cgê‘Dúƒüœö·RÙÅíîiÿì̳ŠšéY?¡¸Ô¨‰ŠûÆ ¸Ô
ÚNq>¡xàÐÜæsÂ8¢®›êw
izš#(¨›ÃHLdgðÝËNGmWº·]Þ»Ã`²RåÞٸɘԇ ÍEei¶¦5ûʸ'‚Йš¹×ò‰¤•Å`±¾qÌb¥TÞÙ¤ÅbÉ@±„ˆa$]}ý¼™’¡7$®Ìí¤Ä,Œ#+TBoÖEñ¶Ó2¥ºàƒ9ûFd®LÖSæ8e®’p0Œ¤»îÁ´#bÝ­7[N`GX;TEðq« 
Žhîü˜UPWâ|Â(Å•%fù¨c|jªÍãiNÔ·&о¾) ;ÒE^s8Šz׬]§( {ïÚ~üøs³-9Q29÷þìÛ5ŽU.¼Qói£B¢¶ë‹„ˆa$­Lõ»Ýu/§qÁÖ­Û„‡qä]¶fS=ø·6‡™£å#”ò>#óçGÊG¨Ò/ ª'GÔS–¦n:suw¨S–Pjª†¢ÞvÙe3é}ùx¸±¾Œø¼vY¦ÆkHbX¡úƱ…ôËA1YCX
«YLÄ0’®Í~7fˆQçb¯nÃmùéR,¢»ò¥˜0ޤ•]îV#I€Wؽw  ð¢ë6•Ïþf;•’º‡…Ÿ!×BâÌO-=Åy[BÁ0ûï 0T3¦aœÍÖ9Õ¸s2á—°9ì|ã˜uÂÙ-d/Æör=ÁÍOqFÎícs8lÚ§”Îèü_鉤¥Ô¯˜…M×8j]”¡åëâ=>$°#imÚÚÛ½š›Ýÿ£v\—Þöí¸|c(x®5Z×hÉ]m.ÛÍpÂx@Um³ñªÁ®avkM§×0ȼ7[b&
ÅÄîù¯—7krFÜŽuÕl»çMkHomKóÔ´«4aßž)æÆ»C5¿,þì‰òendstream
endobj
113 0 obj
1019
endobj
endobj
114 0 obj<</Type/Page/Parent 74 0 R/Contents 115 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
115 0 obj<</Length 116 0 R/Filter/FlateDecode>>stream
endobj
109 0 obj<</Type/Page/Parent 72 0 R/Contents 110 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 53 0 R>>endobj
110 0 obj<</Length 111 0 R/Filter/FlateDecode>>stream
xÚÕ˜ÍnÔ0Çïû4þNŽ…R„„ì.°/,4ÈŒ»jìܶRkâßÄ3žÿ8ýµÁ¨ÔI‚¨@M»y¹ß\ÝÖ×hDXЂ !¹¾î¿<Û>ß)ÔÑ«î<¨ópy¾ÿ¾y½ß”E©)æ‚ÍeûÆ  •žÖ"su÷whgøï¿¢«[Ž06Í´ÚyÃh?![DyQÅ|gÊ®é~*š(%x%\»Ó«ÿáÙHPa"M¸¾¶ˆ“‚à j¡ÖùDØH‰XÐVÏÄ&Ú¡ °[ÐÛ/zWœŽ§æ0œºóãQç²kŠ{.¶vÅ>¶v0[QLô6¦$S W²1Ì@ÚÝ_Õ&Šaš¯DñøÒ¾œhïÿ¨þÏIý}<9 õ*’“É
¯+½(ÈŠ¤²Â뺀N3Yñd\šªˆÐ`ÔM×ünõvŸç…
d¬`1Ð?ÄLjˆÞQOœœ|.É(øî~‘àsIT“´à{<7áŠøÎ
”­:ª^u™‰c½.ýyäG3_G`”{7X&÷\Øu“¬Ü{ȃ3;ΫOv‰”Msõæç¥IZHrvGòµ”hB<mÒr9a|jn$&œ“l›ðäªÔÚ‘Á ¤÷Ã7Õ'Ò1M7]¢4ZÂÀù"«¨!š$\ëe ÙûeDLtôâhFO¥ ]È·VOy×5‡»yR0»E?|Ugö¬ëFëÚeÌoQ-t3`ÎìaÛÓåÇeîh¬½®M$y¦Káúƒ- ;X(‹¥t­ƒæ…|Ôæœù3vªùÝŸ†ûy\@0õht âx/{uh¾Íµ4jNxkÈO–#“µS2½&w¿¨™–&+J,]ŽÏäè+(Ç‘²Um7¨yT0ÝŠn³˜œP¹j f›¥ÐYŠßËÚÇK”#Õ¬ªÓùÜ
–Õ"Ò†Y¶½Š™¸†>À ¤u>¥8˜o5óÁ ƒ`Ý1QÒ"x+WÒ ì@Ú™Ã~“؈!Aó„iÖÏ?Àëa84s;ˆ>™œçv
§¶Y¹œÙAêàÄ8sÍ‹eNžl•4"ƒH µÚã ê!ìÀûO´Z¦µšHwp/õ×’,kâ”1õU<mÖIŒ³¥¼¹ë.—C?ɺÀëÿ^Ùþ˜ºï,JÌ  %…rÂj¡¤£C_Î ¤½êÛ¹$×Ö€–Æ·,]#²+µƒ¤¼”Ä4)/ÌTˆéßìÕôÝù~.²Œ­ï¤mczu[ÁncX—$Å•“·›íõí½@öëׇ¿‡^¡QD·êg×@Õx!‰]Ý ¢ùqóã×ï<endstream
endobj
111 0 obj
1027
endobj
112 0 obj<</Type/Page/Parent 72 0 R/Contents 113 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
113 0 obj<</Length 114 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…êÊÌ ¹†pr‡Âµendstream
endobj
114 0 obj
103
endobj
115 0 obj<</Count 6/First 116 0 R/Last 129 0 R>>endobj
116 0 obj<</Parent 115 0 R/Title(Table of Contents)/Dest[109 0 R/XYZ null 756 null]/Next 117 0 R>>endobj
117 0 obj<</Parent 115 0 R/Count -3/First 118 0 R/Last 120 0 R/Title(1 Scope)/Dest[79 0 R/XYZ null 743 null]/Prev 116 0 R/Next 121 0 R>>endobj
118 0 obj<</Parent 117 0 R/Title(1.1 Identification)/Dest[79 0 R/XYZ null 693 null]/Next 119 0 R>>endobj
119 0 obj<</Parent 117 0 R/Title(1.2 System Overview)/Dest[79 0 R/XYZ null 613 null]/Prev 118 0 R/Next 120 0 R>>endobj
120 0 obj<</Parent 117 0 R/Title(1.3 Document Overview)/Dest[79 0 R/XYZ null 389 null]/Prev 119 0 R>>endobj
121 0 obj<</Parent 115 0 R/Count -2/First 122 0 R/Last 123 0 R/Title(2 References)/Dest[85 0 R/XYZ null 743 null]/Prev 117 0 R/Next 124 0 R>>endobj
122 0 obj<</Parent 121 0 R/Title(2.1 CUPS Documentation)/Dest[85 0 R/XYZ null 693 null]/Next 123 0 R>>endobj
123 0 obj<</Parent 121 0 R/Title(2.2 Other Documents)/Dest[85 0 R/XYZ null 495 null]/Prev 122 0 R>>endobj
124 0 obj<</Parent 115 0 R/Count -1/First 125 0 R/Last 125 0 R/Title(3 Local Access Risks)/Dest[91 0 R/XYZ null 743 null]/Prev 121 0 R/Next 126 0 R>>endobj
125 0 obj<</Parent 124 0 R/Title(3.1 Security Breaches)/Dest[91 0 R/XYZ null 646 null]>>endobj
126 0 obj<</Parent 115 0 R/Count -2/First 127 0 R/Last 128 0 R/Title(4 Remote Access Risks)/Dest[97 0 R/XYZ null 743 null]/Prev 124 0 R/Next 129 0 R>>endobj
127 0 obj<</Parent 126 0 R/Title(4.1 Denial of Service Attacks)/Dest[97 0 R/XYZ null 659 null]/Next 128 0 R>>endobj
128 0 obj<</Parent 126 0 R/Title(4.2 Security Breaches)/Dest[97 0 R/XYZ null 210 null]/Prev 127 0 R>>endobj
129 0 obj<</Parent 115 0 R/Count -2/First 130 0 R/Last 131 0 R/Title(A Glossary)/Dest[103 0 R/XYZ null 743 null]/Prev 126 0 R>>endobj
130 0 obj<</Parent 129 0 R/Title(A.1 Terms)/Dest[103 0 R/XYZ null 693 null]/Next 131 0 R>>endobj
131 0 obj<</Parent 129 0 R/Title(A.2 Acronyms)/Dest[103 0 R/XYZ null 389 null]/Prev 130 0 R>>endobj
132 0 obj<</Type/Catalog/Pages 72 0 R/Names 54 0 R/ViewerPreferences<</PageLayout/TwoColumnRight>>/Outlines 115 0 R/PageMode/UseOutlines/OpenAction[79 0 R/XYZ null null null]>>endobj
xref
0 133
0000000000 65535 f
0000000015 00000 n
0000000221 00000 n
0000000282 00000 n
0000000356 00000 n
0000000434 00000 n
0000000511 00000 n
0000000590 00000 n
0000000666 00000 n
0000000747 00000 n
0000000805 00000 n
0000000907 00000 n
0000001010 00000 n
0000001114 00000 n
0000001218 00000 n
0000001322 00000 n
0000001426 00000 n
0000001530 00000 n
0000001634 00000 n
0000001738 00000 n
0000001842 00000 n
0000001944 00000 n
0000002047 00000 n
0000002151 00000 n
0000002255 00000 n
0000002359 00000 n
0000002463 00000 n
0000002567 00000 n
0000002671 00000 n
0000002773 00000 n
0000002876 00000 n
0000002980 00000 n
0000003084 00000 n
0000003188 00000 n
0000003292 00000 n
0000003396 00000 n
0000003498 00000 n
0000003601 00000 n
0000003705 00000 n
0000003809 00000 n
0000003913 00000 n
0000004017 00000 n
0000004121 00000 n
0000004225 00000 n
0000004329 00000 n
0000004433 00000 n
0000004537 00000 n
0000004641 00000 n
0000004744 00000 n
0000004848 00000 n
0000004953 00000 n
0000005058 00000 n
0000005163 00000 n
0000005268 00000 n
0000005586 00000 n
0000005618 00000 n
0000005650 00000 n
0000005849 00000 n
0000005896 00000 n
0000005943 00000 n
0000005990 00000 n
0000006037 00000 n
0000006084 00000 n
0000006131 00000 n
0000006178 00000 n
0000006225 00000 n
0000006272 00000 n
0000006319 00000 n
0000006366 00000 n
0000006413 00000 n
0000006461 00000 n
0000006509 00000 n
0000006557 00000 n
0000006728 00000 n
0000006877 00000 n
0000013254 00000 n
0000013275 00000 n
0000013385 00000 n
0000013485 00000 n
0000013504 00000 n
0000013641 00000 n
0000014534 00000 n
0000014554 00000 n
0000014664 00000 n
0000014851 00000 n
0000014871 00000 n
0000015008 00000 n
0000015613 00000 n
0000015633 00000 n
xÚ+ä2T0BCc3JÎår
áÒw³P04TIS041T072PIÑp rt QÐUp
VÎO+)O,JUNM.-Ê,©TJ-È/*Ñ ÉâÒiÒ…êÊÌ ¹†pr‡Âµendstream
endobj
116 0 obj
103
endobj
117 0 obj<</Count 6/First 118 0 R/Last 131 0 R>>endobj
118 0 obj<</Parent 117 0 R/Title(Table of Contents)/Dest[111 0 R/XYZ null 756 null]/Next 119 0 R>>endobj
119 0 obj<</Parent 117 0 R/Count -3/First 120 0 R/Last 122 0 R/Title(1 Scope)/Dest[81 0 R/XYZ null 746 null]/Prev 118 0 R/Next 123 0 R>>endobj
120 0 obj<</Parent 119 0 R/Title(1.1 Identification)/Dest[81 0 R/XYZ null 694 null]/Next 121 0 R>>endobj
121 0 obj<</Parent 119 0 R/Title(1.2 System Overview)/Dest[81 0 R/XYZ null 613 null]/Prev 120 0 R/Next 122 0 R>>endobj
122 0 obj<</Parent 119 0 R/Title(1.3 Document Overview)/Dest[81 0 R/XYZ null 388 null]/Prev 121 0 R>>endobj
123 0 obj<</Parent 117 0 R/Count -2/First 124 0 R/Last 125 0 R/Title(2 References)/Dest[87 0 R/XYZ null 746 null]/Prev 119 0 R/Next 126 0 R>>endobj
124 0 obj<</Parent 123 0 R/Title(2.1 CUPS Documentation)/Dest[87 0 R/XYZ null 694 null]/Next 125 0 R>>endobj
125 0 obj<</Parent 123 0 R/Title(2.2 Other Documents)/Dest[87 0 R/XYZ null 495 null]/Prev 124 0 R>>endobj
126 0 obj<</Parent 117 0 R/Count -1/First 127 0 R/Last 127 0 R/Title(3 Local Access Risks)/Dest[93 0 R/XYZ null 746 null]/Prev 123 0 R/Next 128 0 R>>endobj
127 0 obj<</Parent 126 0 R/Title(3.1 Security Breaches)/Dest[93 0 R/XYZ null 661 null]>>endobj
128 0 obj<</Parent 117 0 R/Count -2/First 129 0 R/Last 130 0 R/Title(4 Remote Access Risks)/Dest[99 0 R/XYZ null 746 null]/Prev 126 0 R/Next 131 0 R>>endobj
129 0 obj<</Parent 128 0 R/Title(4.1 Denial of Service Attacks)/Dest[99 0 R/XYZ null 675 null]/Next 130 0 R>>endobj
130 0 obj<</Parent 128 0 R/Title(4.2 Security Breaches)/Dest[99 0 R/XYZ null 238 null]/Prev 129 0 R>>endobj
131 0 obj<</Parent 117 0 R/Count -2/First 132 0 R/Last 133 0 R/Title(A Glossary)/Dest[105 0 R/XYZ null 746 null]/Prev 128 0 R>>endobj
132 0 obj<</Parent 131 0 R/Title(A.1 Terms)/Dest[105 0 R/XYZ null 694 null]/Next 133 0 R>>endobj
133 0 obj<</Parent 131 0 R/Title(A.2 Acronyms)/Dest[105 0 R/XYZ null 389 null]/Prev 132 0 R>>endobj
134 0 obj<</Type/Catalog/Pages 74 0 R/Names 54 0 R/PageLayout/SinglePage/Outlines 117 0 R/OpenAction[81 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</P(eltit)>>2<</S/r>>4<</S/D>>]>>>>endobj
xref
0 135
0000000000 65535 f
0000000015 00000 n
0000000230 00000 n
0000001787 00000 n
0000001861 00000 n
0000001939 00000 n
0000002016 00000 n
0000002095 00000 n
0000002171 00000 n
0000002252 00000 n
0000002310 00000 n
0000002412 00000 n
0000002515 00000 n
0000002619 00000 n
0000002723 00000 n
0000002827 00000 n
0000002931 00000 n
0000003035 00000 n
0000003139 00000 n
0000003243 00000 n
0000003347 00000 n
0000003449 00000 n
0000003552 00000 n
0000003656 00000 n
0000003760 00000 n
0000003864 00000 n
0000003968 00000 n
0000004072 00000 n
0000004176 00000 n
0000004278 00000 n
0000004381 00000 n
0000004485 00000 n
0000004589 00000 n
0000004693 00000 n
0000004797 00000 n
0000004901 00000 n
0000005003 00000 n
0000005106 00000 n
0000005210 00000 n
0000005314 00000 n
0000005418 00000 n
0000005522 00000 n
0000005626 00000 n
0000005730 00000 n
0000005834 00000 n
0000005938 00000 n
0000006042 00000 n
0000006146 00000 n
0000006249 00000 n
0000006353 00000 n
0000006458 00000 n
0000006563 00000 n
0000006668 00000 n
0000006773 00000 n
0000007091 00000 n
0000007123 00000 n
0000007155 00000 n
0000007399 00000 n
0000007446 00000 n
0000007493 00000 n
0000007540 00000 n
0000007587 00000 n
0000007634 00000 n
0000007681 00000 n
0000007728 00000 n
0000007775 00000 n
0000007822 00000 n
0000007869 00000 n
0000007916 00000 n
0000007963 00000 n
0000008011 00000 n
0000008059 00000 n
0000008107 00000 n
0000008154 00000 n
0000008201 00000 n
0000008372 00000 n
0000008500 00000 n
0000008752 00000 n
0000008772 00000 n
0000008864 00000 n
0000008964 00000 n
0000008983 00000 n
0000009120 00000 n
0000010009 00000 n
0000010029 00000 n
0000010139 00000 n
0000010326 00000 n
0000010346 00000 n
0000010483 00000 n
0000011093 00000 n
0000011113 00000 n
0000011223 00000 n
0000011413 00000 n
0000011433 00000 n
0000011561 00000 n
0000012387 00000 n
0000012407 00000 n
0000012517 00000 n
0000012717 00000 n
0000012737 00000 n
0000012875 00000 n
0000014405 00000 n
0000014427 00000 n
0000014548 00000 n
0000014922 00000 n
0000014943 00000 n
0000015082 00000 n
0000015933 00000 n
0000015577 00000 n
0000015598 00000 n
0000016081 00000 n
0000015728 00000 n
0000016182 00000 n
+129 -27
Ver Arquivo
@@ -1,47 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>DRAFT - CUPS Software Test Plan</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-STP-1.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>DRAFT - CUPS Software Test Plan</H1></A><BR>
<CENTER><A HREF="#CONTENTS"><H1>DRAFT - CUPS Software Test Plan</H1></A><BR>
CUPS-STP-1.0<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>1 Scope</A></B>
<BR><B><A HREF="#1">1 Scope</A></B>
<UL>
<LI><A HREF=#1_1>1.1 Identification</A></LI>
<LI><A HREF=#1_2>1.2 System Overview</A></LI>
<LI><A HREF=#1_3>1.3 Document Overview</A></LI>
<LI><A HREF="#1_1">1.1 Identification</A></LI>
<LI><A HREF="#1_2">1.2 System Overview</A></LI>
<LI><A HREF="#1_3">1.3 Document Overview</A></LI>
</UL>
<B><A HREF=#2>2 References</A></B>
<B><A HREF="#2">2 References</A></B>
<UL>
<LI><A HREF=#2_1>2.1 CUPS Documentation</A></LI>
<LI><A HREF=#2_2>2.2 Other Documents</A></LI>
<LI><A HREF="#2_1">2.1 CUPS Documentation</A></LI>
<LI><A HREF="#2_2">2.2 Other Documents</A></LI>
</UL>
<B><A HREF=#3>3 Local Tests</A></B>
<B><A HREF="#3">3 Local Tests</A></B>
<BR>
<BR><B><A HREF=#4>4 Remote Tests</A></B>
<BR><B><A HREF="#4">4 Remote Tests</A></B>
<BR>
<BR><B><A HREF=#5>A Glossary</A></B>
<BR><B><A HREF="#5">A Glossary</A></B>
<UL>
<LI><A HREF=#5_1>A.1 Terms</A></LI>
<LI><A HREF=#5_2>A.2 Acronyms</A></LI>
<LI><A HREF="#5_1">A.1 Terms</A></LI>
<LI><A HREF="#5_2">A.2 Acronyms</A></LI>
</UL>
<HR>
<H1><A NAME=1>1 Scope</A></H1>
<H2><A NAME=1_1>1.1 Identification</A></H2>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1><A NAME="1">1 Scope</A></H1>
<H2><A NAME="1_1">1.1 Identification</A></H2>
This software test plan provides detailed tests that are used to
evaluate the stability of the Common UNIX Printing System (&quot;CUPS&quot;)
Version 1.0.
<H2><A NAME=1_2>1.2 System Overview</A></H2>
<H2><A NAME="1_2">1.2 System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -57,7 +159,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_3>1.3 Document Overview</A></H2>
<H2><A NAME="1_3">1.3 Document Overview</A></H2>
This software test plan is organized into the following sections:
<UL>
<LI>1 - Scope</LI>
@@ -66,8 +168,8 @@ can be used to support non-PostScript printers. </P>
<LI>4 - Remote Tests</LI>
<LI>A - Glossary</LI>
</UL>
<H1><A NAME=2>2 References</A></H1>
<H2><A NAME=2_1>2.1 CUPS Documentation</A></H2>
<H1><A NAME="2">2 References</A></H1>
<H2><A NAME="2_1">2.1 CUPS Documentation</A></H2>
The following CUPS documentation is referenced by this document:
<UL>
<LI>CUPS-CMP-1.0: CUPS Configuration Management Plan </LI>
@@ -80,7 +182,7 @@ can be used to support non-PostScript printers. </P>
<LI>CUPS-SUM-1.0.x: CUPS Software Users Manual </LI>
<LI>CUPS-SVD-1.0.x: CUPS Software Version Description </LI>
</UL>
<H2><A NAME=2_2>2.2 Other Documents</A></H2>
<H2><A NAME="2_2">2.2 Other Documents</A></H2>
The following non-CUPS documents are referenced by this document:
<UL>
<LI>IEEE 1387.4, System Administration: Printing (draft) </LI>
@@ -90,10 +192,10 @@ can be used to support non-PostScript printers. </P>
<LI>IPP/1.0: Model and Semantics </LI>
<LI>RFC 1179, Line Printer Daemon Protocol </LI>
</UL>
<H1><A NAME=3>3 Local Tests</A></H1>
<H1><A NAME=4>4 Remote Tests</A></H1>
<H1 TYPE=A VALUE=1><A NAME=5>A Glossary</A></H1>
<H2><A NAME=5_1>A.1 Terms</A></H2>
<H1><A NAME="3">3 Local Tests</A></H1>
<H1><A NAME="4">4 Remote Tests</A></H1>
<H1 TYPE="A" VALUE="1"><A NAME="5">A Glossary</A></H1>
<H2><A NAME="5_1">A.1 Terms</A></H2>
<DL>
<DT>C </DT>
<DD>A computer language. </DD>
@@ -106,7 +208,7 @@ can be used to support non-PostScript printers. </P>
<DT>socket </DT>
<DD>A two-way network communications channel. </DD>
</DL>
<H2><A NAME=5_2>A.2 Acronyms</A></H2>
<H2><A NAME="5_2">A.2 Acronyms</A></H2>
<DL>
<DT>ASCII </DT>
<DD>American Standard Code for Information Interchange </DD>
BIN
Ver Arquivo
Arquivo binário não exibido.
+189 -86
Ver Arquivo
@@ -1,77 +1,179 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>CUPS Software Users Manual</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.0.1">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.0.3">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 20.0pt }
H3 { font-family: sans-serif; font-size: 20.0pt }
H4 { font-family: sans-serif; font-size: 20.0pt }
H5 { font-family: sans-serif; font-size: 20.0pt }
H6 { font-family: sans-serif; font-size: 20.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
</HEAD>
<BODY>
<CENTER><A HREF=#contents><IMG SRC="images/cups-large.gif" BORDER=0><BR>
<H1>CUPS Software Users Manual</H1></A><BR>
CUPS-SUM-1.0.1<BR>
<CENTER><A HREF="#CONTENTS"><H1>CUPS Software Users Manual</H1></A><BR>
CUPS-SUM-1.0.3<BR>
Easy Software Products<BR>
Copyright 1997-1999, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN=CENTER><A NAME=CONTENTS>Table of Contents</A></H1>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF=#1>Preface</A></B>
<BR><B><A HREF="#1">Preface</A></B>
<UL>
<LI><A HREF=#1_1>System Overview</A></LI>
<LI><A HREF=#1_2>Document Overview</A></LI>
<LI><A HREF="#1_1">System Overview</A></LI>
<LI><A HREF="#1_2">Document Overview</A></LI>
</UL>
<B><A HREF=#2>1 - Printing System Overview</A></B>
<B><A HREF="#2">1 - Printing System Overview</A></B>
<UL>
<LI><A HREF=#2_1>The Printing Problem</A></LI>
<LI><A HREF=#2_2>The Technology</A></LI>
<LI><A HREF=#2_3>Jobs</A></LI>
<LI><A HREF=#2_4>Classes</A></LI>
<LI><A HREF=#2_5>Filters</A></LI>
<LI><A HREF=#2_6>Printer Drivers</A></LI>
<LI><A HREF=#2_7>Networking</A></LI>
<LI><A HREF="#2_1">The Printing Problem</A></LI>
<LI><A HREF="#2_2">The Technology</A></LI>
<LI><A HREF="#2_3">Jobs</A></LI>
<LI><A HREF="#2_4">Classes</A></LI>
<LI><A HREF="#2_5">Filters</A></LI>
<LI><A HREF="#2_6">Printer Drivers</A></LI>
<LI><A HREF="#2_7">Networking</A></LI>
</UL>
<B><A HREF=#3>2 - Using the Printing System</A></B>
<B><A HREF="#3">2 - Using the Printing System</A></B>
<UL>
<LI><A HREF=#3_1>Submitting Files for Printing</A></LI>
<LI><A HREF=#3_2>Choosing a Printer</A></LI>
<LI><A HREF=#3_3>Setting Printer Options</A></LI>
<LI><A HREF=#3_4>Printing Multiple Copies</A></LI>
<LI><A HREF=#3_5>Checking the Printer Status from the Command-Line</A></LI>
<LI><A HREF=#3_6>Checking the Printer Status from the Web</A></LI>
<LI><A HREF=#3_7>Canceling a Print Job</A></LI>
<LI><A HREF="#3_1">Submitting Files for Printing</A></LI>
<LI><A HREF="#3_2">Choosing a Printer</A></LI>
<LI><A HREF="#3_3">Setting Printer Options</A></LI>
<LI><A HREF="#3_4">Printing Multiple Copies</A></LI>
<LI><A HREF="#3_5">Checking the Printer Status from the Command-Line</A></LI>
<LI><A HREF="#3_6">Checking the Printer Status from the Web</A></LI>
<LI><A HREF="#3_7">Canceling a Print Job</A></LI>
</UL>
<B><A HREF=#4>3 - Standard Printer Options</A></B>
<B><A HREF="#4">3 - Standard Printer Options</A></B>
<UL>
<LI><A HREF=#4_1>General Options</A></LI>
<LI><A HREF="#4_1">General Options</A></LI>
<UL>
<LI><A HREF=#4_1_1>Selecting the Media Size, Type, and Source</A></LI>
<LI><A HREF=#4_1_2>Setting the Orientation</A></LI>
<LI><A HREF=#4_1_3>Printing On Both Sides of the Paper</A></LI>
<LI><A HREF=#4_1_4>Selecting a Range of Pages</A></LI>
<LI><A HREF=#4_1_5>N-Up Printing</A></LI>
<LI><A HREF=#4_1_6>Setting the Brightness</A></LI>
<LI><A HREF=#4_1_7>Setting the Gamma Correction</A></LI>
<LI><A HREF="#4_1_1">Selecting the Media Size, Type, and Source</A></LI>
<LI><A HREF="#4_1_2">Setting the Orientation</A></LI>
<LI><A HREF="#4_1_3">Printing On Both Sides of the Paper</A></LI>
<LI><A HREF="#4_1_4">Selecting a Range of Pages</A></LI>
<LI><A HREF="#4_1_5">N-Up Printing</A></LI>
<LI><A HREF="#4_1_6">Setting the Brightness</A></LI>
<LI><A HREF="#4_1_7">Setting the Gamma Correction</A></LI>
</UL>
<LI><A HREF=#4_2>Text Options</A></LI>
<LI><A HREF="#4_2">Text Options</A></LI>
<UL>
<LI><A HREF=#4_2_1>Setting the Number of Characters Per Inch</A></LI>
<LI><A HREF=#4_2_2>Setting the Number of Lines Per Inch</A></LI>
<LI><A HREF=#4_2_3>Setting the Number of Columns</A></LI>
<LI><A HREF=#4_2_4>Setting the Page Margins</A></LI>
<LI><A HREF=#4_2_5>Pretty Printing</A></LI>
<LI><A HREF="#4_2_1">Setting the Number of Characters Per Inch</A></LI>
<LI><A HREF="#4_2_2">Setting the Number of Lines Per Inch</A></LI>
<LI><A HREF="#4_2_3">Setting the Number of Columns</A></LI>
<LI><A HREF="#4_2_4">Setting the Page Margins</A></LI>
<LI><A HREF="#4_2_5">Pretty Printing</A></LI>
</UL>
<LI><A HREF=#4_3>Image Options</A></LI>
<LI><A HREF="#4_3">Image Options</A></LI>
<UL>
<LI><A HREF=#4_3_1>Scaling the Image</A></LI>
<LI><A HREF=#4_3_2>Adjusting the Hue (Tint) of an Image</A></LI>
<LI><A HREF=#4_3_3>Adjusting the Saturation (Color) of an Image</A></LI>
<LI><A HREF="#4_3_1">Scaling the Image</A></LI>
<LI><A HREF="#4_3_2">Adjusting the Hue (Tint) of an Image</A></LI>
<LI><A HREF="#4_3_3">Adjusting the Saturation (Color) of an Image</A></LI>
</UL>
</UL>
<HR>
<H1 ALIGN=RIGHT><A NAME=1>Preface</A></H1>
GIF89a&macr;&yuml;&ograve;&Igrave;&Igrave;&Igrave;™™™fff333&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;!&ugrave;,&macr;&yuml;B&thorn;X&ordm;&Uuml;&thorn;0&Ecirc;I&laquo;&frac12;8&euml;&Iacute;&raquo;&yuml;`(Ždižh&ordf;2€0p,&Iuml;tm&szlig;x&reg;&iuml;
<!--=•pH,Ö«Çl:ŸÐ¨”ù ¯Ø¬ÖXN¿à°xL~¬Û´zmxËð¸|N§Ùø¼(Pïûÿ€bwz…jn‚‰Š‹Œ9„†‘!-->
;&plusmn;&Yacute;&iacute;ˆnd&yacute; !&cedil; ž&sup3;w&agrave;…MƒƒY~&iquest;{,g&Uacute;\&auml;&eacute;
Œ&times;&Oslash;(t&Ugrave;&icirc;!&Iuml;=&Ntilde;.&ucirc;z&macr;&aacute;&Ntilde;Ÿ:&igrave;;&Atilde;9q&ouml;&iacute;&Eacute;&euml;]/&iquest;&ordm;&Eacute;&curren;Et/†'&Icirc;&thorn;t9&Agrave;&Oslash;–ž_&Ugrave;&Ccedil;\|W•wAr&ouml;&cedil;&Yacute;2&Ocirc;&times;
tN&deg;0T&iuml;}&iexcl;&ucirc;‰$!yMx&icirc;)ˆš‰&Ocirc;&oslash;@nB&deg;U&frac12;&Ecirc;wE„&sect;!ŠF H&nbsp;L8B
c‰;ždŠ-&aelig;DVWd&ETH;&sup3;€h&plusmn;&auml;&Uacute;“P&para;%#(4Fi&aring;&Iuml;\hŠ:Re!\&Ograve;&Auml;—X^&brvbar;%&yen;&Agrave;-$E€&Ouml;/&uacute;HŽšl&acirc;&acirc;&ouml;&Igrave;QX
<!--äÇ"iL :a7]0IZ¡YØø¡‡D}¤–Uj±á
^â䙿`Ú@¦5b|šà«Á±§3Ñ KwÔ\ªB¨±H)+=¡Ó©"
©¢ 8uƒ†¸öŠD§•lþ:„dRXilÌ:Ë!´;¹t+„e<
‡;øô+‚bbhaÚ0Ê6é.D™ð޹̹ñÖkoê({ï¾ü{f¿-->
&cedil;1N&ocirc;&macr;b&quot;œŠ&uuml;j&aring;&Aacute;&Acirc;E0…&Egrave;8&ouml;5GkZ|&Ograve;&Aacute;wt„C&raquo;&Ocirc;QS&Ccedil;o6&Ocirc;&Ugrave;[W„$&sup2;*Ž+4Pb-8&sup1;P1&thorn;'8&quot;‘Š&curren;&Auml;$&nbsp;Cy&ecirc;)&gt;&atilde;Št&egrave;`&ETH;3&Acirc;‡‹&frac34;z&quot;&laquo;rE'&Acirc;qf&auml;&deg;&Euml;
q&Acirc;\|€„Ž&iexcl;&ocirc;&ouml;&raquo;%&Eacute;(.—b&Uacute;&frac12;&Egrave;&iacute;&Eacute;`{&not;E&Ccedil;1w &raquo;[H&szlig;`(B6&ouml;&nbsp;
†')&Ecirc;&Icirc;a[&Atilde;rbC!T&aring;&deg;Œ
2Q&middot;&Egrave;HZ&ecirc;#–&reg;&uuml;&Euml;/&agrave;&ocirc;&macr;F&Yacute;&ecirc;(&Ucirc;&sup2;%&nbsp;&ordm;X&Euml;9&ouml;&Agrave;b&Aacute;4f.&ugrave;-o&yacute;X&Euml;B…I&Icirc;&Ograve;7&sup1;*@&Atilde;&Oacute;Ž&Iacute;T€h&agrave;&Igrave;W&acirc;&Atilde;$f:&micro;yžn†&oacute;†r„'t&eacute;Kv`
&Ccedil;+d&ordf;– œ79s&ograve;|'=&times;&cent;&Igrave;x&para;&ograve;œ&yuml;&brvbar;œˆe&Icirc;;*&agrave;$&thorn;” I&Yacute;&AElig;a&Iuml;{–3Ž&Aring;&Aacute;
P“&Iacute;S[&Ugrave;L&uml;3&copy;&ograve;Q7&eacute;&AElig;&ograve;#&atilde;&ucirc;&ocirc;0F&times;&eth;sE&deg;t&sect;@&Oslash;Q&Uuml;&acute;&acute;&nbsp;&copy;:3&Oacute;R&iacute;d&nbsp;&yen;*MITnŒ&pound;&uml;H]&Oslash;Q&Aacute;d
@&ograve;&thorn;&not;rMœŽaO
<!--x‹ŒÖ3 ½4 °XT'ª®ƒ:T£ uéWeºádËeú¸è¬Ù7
ëÒÏ;„sœåµ7m(ýПtl¤RV)-->
r&euml;^y&Agrave;&middot;(&cedil;&icirc;&eacute;&ecirc;&ucirc;$uD&ograve;r&atilde;/a,I.&deg;&Ugrave;U&Agrave;œb hˆ`&frac34;B&nbsp;&euml;&quot;
&Uuml;`H&Oslash;x&Egrave;&cedil;o1&thorn;[&aacute;\8f^&aelig;|\&yacute;&cent;&cent;z&oslash;0(ˆ\ {ƒ&Auml;g&auml;&THORN;&otilde;&ccedil;&acirc;&sect;&Aacute;˜0*\&sup3;n&frac14;m&para;/&Auml;e&ordf;&plusmn;&yuml;&igrave;
&Ccedil;,&frac12;DN2€œ&ordm;+&ugrave;&Eacute;|&iacute;0L&iexcl;Le*&eth;&cedil;&Atilde;&gt;&shy;2&euml;f,eIPO&Euml;&Aring;&agrave;r—&plusmn;”80SAŸcF&ordf;at&ccedil;&raquo;&atilde;y&curren;&cedil;&ccedil;&Igrave;&iexcl;5&iuml;o&otilde;&Euml;&iuml;|&iquest;8&Euml;&Icirc;&brvbar;&not;&thorn;,&iuml;&frac14;&egrave;&agrave;)&Aacute;&Igrave;;&oslash;k&iexcl;—†dDp&Ntilde;&ograve;&oslash;2&cent;qfH&atilde;!&Euml;“~&Ugrave;Ÿ-&iacute;
'g:,&aelig;4y?&yacute;&auml;PZ›ž#&Iuml;&Otilde;&acute;&Icirc;5AK‰k]&ucirc;š›&Ograve;K&otilde;&macr;‡m&euml;&otilde;z&Oslash;&Egrave;&AElig;&laquo;&Oslash;Ž&Yacute;&gt;B{P&ETH;&ordf;.6hf]&ordm;?&copy;&Igrave;IŽuO„&iacute;M&Igrave;&Ccedil;&Uuml;c&micro;3˜
61N&Ograve;[†W&pound; &brvbar;m&iquest;&shy;{&Acirc;P&acirc;v&Icirc;&para;KnUˆ[ &ograve;n&Auml;&frac12;&plusmn;&divide;n?l:&Aacute;ž3uš&euml;&not;sP[&yuml;nn&frac34;&ccedil;P…W&otilde;&Ocirc;Fj[&Acirc;&divide;
&sup1;v&Iuml;&agrave;‰˜x&uacute;'ˆ&pound;&Agrave;&Agrave;†p&cedil;4.&ecirc;&atilde;K&Ccedil;&iquest;&Acirc;&Aacute;&plusmn;o&sect;&cent;&uuml;&quot;&Aacute;|Nk`&icirc;&Ecirc;˜
<!--•¤7 yþ D-->

jl&copy;&Igrave;uˆ&Euml;i™0pmC&acute;&laquo;+‰&divide;6&curren;2&shy;&eacute;&Iuml;e`(ŽJ]&yen;i&otilde;&eth;&Oslash;&iacute;&quot;p|&ordf;!:q&oslash;F&Oslash;&sup3; 6&pound;
@&shy;,&thorn;Šq&uuml;&atilde;o&Igrave;&Ccedil;&reg;ž&Ouml;&uuml;V&para;Q&Ccedil;Ev&icirc;&sup1;&sup2;&Eacute;8&Ugrave;&ordf;S&quot;&aelig;&Agrave;&ccedil;‡x&plusmn; &agrave;&thorn;&gt;—I&atilde;g
&iuml;&Yacute;&gt;Y‰&ccedil;N80&aelig;&sect;&nbsp;&plusmn;&frac34;GLL&igrave;&Otilde;&micro;…(1&THORN;&frac14;!8}&thorn;&not;“*…&ordf;&Ugrave;&igrave;:e&raquo;&acute;œ
&ordf;&iquest;&ecirc;n_6&Acirc;&Atilde;S&Agrave;`eG;&Ouml;„CƒCcˆ&iquest;‡4&cedil;ye&icirc;&macr;&Iacute;)o&oslash;ByRm&frac12;0?&iacute;L&icirc;&Aring;`Q&yuml;j&Oacute;&Ugrave;/&ordm;&ocirc;&Oacute;N|&Yacute;
<!--â9ço‘SŽà•?œýáu¿þá¯~!ÒŸ¿ÍÏüýÏIw1ßþZ ÈN¥Ex£&\(¤á[ɤ€v2€WW-->
&thorn;&Ugrave;A&Uuml;Œ&Aacute;&cedil;D5&copy;D a&aelig;vx ?Š&para;x&deg;DM@•!h‰&agrave;&Egrave;€Ž&sect;&reg;
&nbsp;&aacute;&times;B`&eth;&curren;&ordf;E?›“”&THORN;&quot;8$&Yacute;`Ki0…O&eth;ƒn&Icirc;&plusmn;&micro;v&egrave;€I([,&sup1;Nd&Eacute;&uml;h\'6X
P&atilde;—Š&Eacute;&oslash;t &cent;&yen;˜&not;&egrave; €ˆ†Ky™FˆŒ&euml;`š”yƒ„&uml;š €š‰ƒM&copy;&oslash;FQhY„
9&para;X&macr;&times;&iacute;&curren;™Y\)&quot;&sup1;AN]‰x&eacute;z&divide;Gq07)&copy;&ntilde;™•Y€r&deg;ŒŽi z ™&Ccedil;&auml;F&Iacute;&Eacute;T&ugrave;
&Euml;ŽC œwI&uuml;X]&sup1;\&euml;Y]&thorn;f l&iuml;Ybj8Ÿ&Egrave;&Iacute;&Aring;t&uacute;&copy;f&THORN;&times;ŸfBI—“*&oslash;&eacute;:&Ucirc;&Oslash;Uj&nbsp;&Ograve;
ˆ&otilde;&sup1;&nbsp;&Otilde;p&nbsp;$(~ &iexcl;&Uacute; &iexcl;g&ugrave;{&icirc;pZI?&iexcl;ƒ&icirc;&Agrave;v:“a&brvbar;˜6&cent;&sect;&Ocirc;]&Yacute;(&ordf;&ecirc;)!Ÿ&Uacute;&cent;:
jw&micro;&iexcl;4&Uacute;v&iacute;H&Ucirc;&Ccedil;˜9&ordm;Xh&oacute;&uuml;&ugrave;&pound;&yen;&Aacute;&cent;V&Eacute;{D&ordm;2š‰(&deg;&curren;&curren;a&divide;&nbsp;+&ETH;&pound;&yen;“p&cent;&thorn;&ograve;4V&ordm;
E&acute;&yen;&egrave;&curren;k&deg;7&ordm;hT*€&iquest;&egrave;w`&Uacute;ži&Auml; …S&brvbar;&AElig;&brvbar;m&ecirc; N&ecirc;ƒ#&uacute;&cent;f€ x&ecirc;&yacute;
8z&copy;7u&Uacute;p{&Uacute;=~]7`&laquo;h‡&Uacute;s&Uacute;g:…zd˜&oacute;&sect;&Icirc;A-v&thorn;A&ntilde;r&brvbar;'–A&Uacute;)9–š&cent;&acirc;Si;&pound;…š 1&ordf;o&quot;&ordf;
&brvbar;J;“&ordm; r&ordm;8Ui|&eacute;&gt;&iexcl;&Uacute;œ&uacute;
<!--pv³2<ƒj£·«É¦kÉ 1Š:¬Èe ”«ÉÚlÑ•ªÍZn¯Š2Ì­‹s«Á­ÖÚàé¨Ûº=¤zŽŸú­6­áU­ä
Øš¨¿újá
¦0®éJ«
¯NÕ井ö ÐVeζ¯õbm¶7ù´Ž-->
&euml;&yen;Dfn&yacute;2&raquo;ƒ–0j&laquo;&reg;&raquo;&ordm;K;z&euml;&cent;&Iacute;&ouml;&raquo;—!&micro;—S&raquo;&sup3;r&gt;K+6ˆ‹&uml;X&Ograve;&raquo;; C&Egrave;
8&Ecirc;;&cent;&raquo;&Atilde;&Ucirc;/Œ‹&yen;ž!&not;s&frac12;VR&frac12;&oacute;&otilde;&Iuml;O&acirc;[/&ccedil;K&uml;&thorn;˜&Ntilde;:&Iacute;\&Yacute;+&nbsp;Sc:&iuml;&Euml;ž’&ordm;&para;&euml;9&AElig;&raquo;
<!--뽤tj ½YUÀœãÀ©%
Ìró)Á0¨§—³½Ç…Á¬ ̤LÛ6øK!<Á:Àê*ª…ÃÁî…Á.‡²
¥¼‘z Âä ¦ýËÀ~¸7<,´GóÃý‹ÂöêÀe:Ä¢‰°ë«£m£,žyAI¡…˜Q!8-->
&ocirc; 8ly$
8&copy;&Ugrave;&Aring;mX2&Ugrave;h&gt;?&macr;H&uuml;&Aacute;^LsP,Ÿ&laquo;Y&acirc;&aacute;&iquest;&yuml;&igrave;&pound;Y
r&brvbar;&Eacute;š&yen;9&Ccedil;jž&Auml;8-&AElig;&Ccedil;Œ&para;i&ecirc;P&Acirc;bA&Acirc;˜&ugrave;&Atilde;&cedil;š&raquo;&sup3;7RœCWRo&igrave;Š&aring; MŒŠ&aring;t™ Œ›r&eacute;&Eacute;q
<!--Zva&Z¤jzÊŠ¬‡7èV)“‹|›ká!¦*€Á¶öÄ84’Wž¶LÊñ½Fª6ÄOq̰Š}Ŭ—|žÎ|4!ÍAh+è•L¢
%|Û¬Å$-->
&aring;&gt;}L&ecirc;}&Icirc;&Ccedil;&uml;&nbsp;5:&agrave;Œ|&quot;&thorn;&Ccedil;w&ETH;s&oslash;&aelig;N&Icirc;&deg;&sup1;#R&gt;~-N‰&reg;&egrave;ƒ&nbsp;&szlig;c&eth;&THORN;&Atilde;š&Icirc;&Ntilde;&yen;&reg;&aring;G&Icirc;&acirc;&iacute;ˆ‰&Yacute;&egrave;*&cedil;
=‚ž &ordm;&euml;&acirc;&shy;&euml;&Agrave;&gt;&Ucirc;&middot;ž&euml;n^žm&egrave;&Ecirc;&euml;&eth;&frac14;&atilde;&gt;&aring;&times;&Icirc;&laquo;}&ecirc;&Oslash;&divide;
Œ&not;&Euml;I&Aacute;&middot;A&Ocirc;N&Iacute;&euml;v&gt;]t.&acirc;&Uacute;L&ETH;&laquo;&thorn;&iacute;&iuml;&frac34;&ntilde;n&auml;&Ouml;&Uuml;&aelig;s&sup1;&iquest;&plusmn;&acirc;&deg;+†
&not;U&Oslash;&iuml;&icirc;•.&ccedil;&not;&Icirc;&igrave;&Iacute;.&egrave;&acute;&THORN;ŠG=&eth;&ugrave;&sect;ž&macr;&euml;^&auml;&Ucirc;&reg;&ecirc;h-&ecirc;&ecirc;!i!&Otilde;vM&iacute;i&ordf;&icirc;&thorn;&frac34;&ograve;&icirc;&aacute;/&thorn;&icirc;&cedil;&Ntilde;-O&Ouml;G&eth;,o&ntilde;&ordm;!&aring;gO&acirc;&nbsp;PO&igrave;O&ocirc;B&thorn;&Egrave;&agrave;h&acirc;+?&iuml;&gt;&szlig;&Ecirc;VH&Agrave;sa&otilde;™€&otilde;$&oacute;S&icirc;&otilde;&raquo;&oacute;8.ž&szlig;&sup1;
~&aacute;&szlig;&Egrave;&copy;&ouml;&raquo;]&ograve;3&euml;&AElig;t_&divide;[&iuml;&ocirc;b&macr;&ccedil;&Uuml;&divide;&Otilde;&laquo;@u™&eth;;z&Uuml;˜‘&Uuml;@&oacute;Ž2?&ugrave;ƒ&cedil;&Ugrave;l&ugrave;F&nbsp;&para;&macr;&ugrave;N&nbsp;ž&uacute;&pound;&para;&curren;&yuml;0#9:&szlig;&sect;&frac12;ž&copy;Ÿ\#&Atilde;&Ugrave;&aelig;&oacute;2&eacute;+&ucirc;&Agrave;&Oacute;&cedil;_&auml;M/&Oacute;ta&Uacute;&yacute;3”]&Ugrave;&laquo;&iquest;&cedil;i&icirc;aF&gt;&ordf;&Oslash;v&Iacute;&iuml;M&Iacute;&divide;&ETH;&euml;&auml;&copy;&icirc;r&Uuml;Œ&ouml;q&ntilde;_&Agrave;&uuml;&ordf;r&acirc;F&reg;&ograve;
&yacute;&thorn;&cedil;—hT_&atilde;4sx”&yacute;&Yacute;&icirc;)&ccedil;.Qg&Atilde;&raquo;&agrave;Ÿ&Iuml;%&igrave;}i&acute;AS&ucirc;|&thorn;&eth;@Q&Uuml;
$J9€&raquo;-&Igrave;&plusmn;&divide;&Uuml;&ocirc;M&Oslash;hZ˜&brvbar;:&deg;œ*&Iuml;l&szlig;x&Ograve;|&Iuml;&frac14;&iexcl;&Aring;L&Agrave; &not;&Aacute;f&ugrave;9B&Ntilde;d&igrave;&Aacute;|&laquo;VV„&cent;&eacute;nKv
<!--u贮̮iiçͦt›šV/.²ê}mywu#|YcX|jŽxdE“)0U
 T–<W€o  zbQ`F¥2³:°Ctª·‰!™²*¨…º»¢~аz¬Á¯Ä‡´Õ޶Ó(iÃm²F›ÍÚhÜޓơօäc|ØËUÒÙþ²ëøçõƒ³ÜØ<î™w‰Ö¿Eéhä›@ðÂ
-->
kB_ƒg 3&Ecirc;&sup3;8#&THORN;&not;L=0;J&curren;&auml;&Egrave;@&curren;F|'i~&plusmn;&copy; ža&Ecirc;Š&AElig;g;d*3&sup2;&copy;bP&Iuml;&cent;T&auml;H&ocirc;&brvbar;?[†
&Auml;&auml;ƒhN6ZM&cent;D:c*BR!$&plusmn;ckƒ’V&shy;-u&Ucirc;@[&oslash;p„Ÿ]&frac14;8&ouml;-1{T&Icirc;&reg;W&Iuml;2&ntilde;&nbsp;Šp=&cedil;q&laquo;&Ntilde;&frac12;es.‰„4+#&Euml;e&brvbar;&yen;W5&micro;ekxr&auml;›“/X&Iacute;š5I&Ccedil;ƒ=k&Yacute;&uacute;&micro;&igrave;&Euml;&deg;&ucirc;N–2q&Aring;&brvbar;yZ&pound;QŽ›&Ccedil;&THORN;txŠ&auml;cK—&Iacute;&iacute;&Eacute;&sup1;
i&thorn;&iexcl;9&frac14;m1o&ntilde;&cent;&copy;/&sup2;8&icirc;&igrave;St&eacute;4lWm&frac34;9&oacute;&eacute;&Ouml;&Ucirc;&ETH;&atilde;&atilde;{{&uuml;z&THORN;&iquest;&ccedil;&oslash;&ecirc;&ouml;&THORN;z&agrave;&agrave;L&uml;&nbsp;&quot;˜
&Auml;&ETH;s&agrave;&para;PGLU&uacute;&aring;`M&THORN; &nbsp;&iexcl;†9&not;&sect;&Ucirc;{pX&cedil;&iexcl;w&Uacute;w&szlig;&iexcl;&uml;&nbsp;&iacute; &quot;MUXNx
<!--É……¡×ƒà¨âŠêÄõ#ƒå“Ž:Å(ã4Ö¸Až˜:@Ùw¸ YÝ‹t Iã’Ö”˜$…a(å‹X ¥F7×IÈbŠ["Y€M縹K~`¶Øä-->
+l&acute;&aacute;&brvbar;
j&sup2;F:&Aacute;.&ecirc;&AElig;&Ucirc;j&curren;&sup3;B&uacute;&icirc; &frac14;&Ecirc;&laquo;/&pound;&Ouml;[&ETH;&frac12;#&iacute;+&eth;&yen;&aelig;nJ&THORN;&cedil;&laquo;&aelig;;&eth;&Acirc;&copy;&otilde;&uml; _&Euml;&eth;&Auml;Š&Ograve;&raquo;*&ordm;?
ƒ&Acirc;&Atilde;yzh&plusmn;&deg;&Oslash;zl2,#oZ2&Egrave;r|&ograve;&Euml;&deg;&frac14;$&Ccedil;)&euml;
&oacute;&Iacute;&Ugrave;&Ocirc;,&eacute;fs€1&Icirc;@/&oslash;&icirc;&Iuml;P&otilde;&Igrave;i&ETH;H&middot;&eth;&Atilde;BkLt&Ograve;P&macr;b&ocirc;S;N&Yacute;W&Ocirc;X&Iuml;
&oacute;dl&Iacute;t&Ouml;`&deg;tžOc&nbsp;&oacute;&Aring;a&sect;}A&Auml;&sup2;1v&Euml;j&Ccedil;m&thorn;u+`&Iacute;&Iacute;&Aacute;&middot;qw&uuml;6˜‚&igrave;&frac12;s&THORN;&uml;&Euml;$xM6&agrave;P&sup3;-i&Eacute;S&Uacute;&frac12;A&Ugrave;ˆ&iuml;&euml;84–&oslash;=x&auml;8^!&auml;*L&gt;&THORN;˜ƒk&sup1;Œ({I&egrave;^!&aacute;&cedil;˜N$&ecirc;
&laquo;&reg;&ccedil;!&ordm;&ucirc;&Acirc;&yuml;&Yacute;&nbsp;&euml;&macr;&szlig;o&icirc;—O&uuml;&uml;&frac34;&yuml;&icirc;9&iacute;]&ntilde;&THORN;{&ntilde;&Ugrave;&Ecirc;&reg;&atilde;lhŽ(&egrave;&Igrave;&Atilde;&ecirc;&frac14;~&Ocirc;S&cent;|&ouml;&Otilde;Ÿz&yacute;w&not;&Euml;&sect;|&oslash;&Yacute;—*&frac12;Œ&Egrave;&times;&shy;|&uacute;&aring;wz&thorn;&aelig;“)Nr&ucirc;&frac34;&Ecirc;?*&ocirc;&yen;
&iquest;*&divide;&ocirc;7&uacute;&frac12;~M&uacute;&uacute;&uacute;&divide;&ordf;&divide;&Eacute;ˆ•S3x*&ucirc;&iacute;P&ugrave;H&pound;&deg;&deg;&agrave;&oacute;(&egrave;&frac34;&iacute;-Jƒ&uacute;
&aring;AF{#\”g…&Aacute;œ)!),&Ocirc; #&Oacute;&Acirc;&Ccedil;&frac14;j&thorn;1œŒ&thorn;h&copy;&sup2;K„9$ƒY&egrave;)Ž ˆA &Egrave;
—‡)#1‰&Oacute;p&quot;˜&eth;'&Atilde;%n‰P&acute;&Ugrave;&uml;-1&sup3;&cent;^\%&AElig;ˆ&Ocirc;p„CL&Ouml;5&Atilde;
<!--a^œß­âx¯
€±peŒ-->
<HR>
<H1 ALIGN="RIGHT"><A NAME="1">Preface</A></H1>
This software users manual describes how to use the Common UNIX
Printing System (&quot;CUPS&quot;) Version 1.0.1.
<H2><A NAME=1_1>System Overview</A></H2>
Printing System (&quot;CUPS&quot;) Version 1.0.3.
<H2><A NAME="1_1">System Overview</A></H2>
The Common UNIX Printing System provides a portable printing layer for
UNIX&reg; operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX vendors
@@ -87,7 +189,7 @@ applications under UNIX. </P>
<P>CUPS also includes a customized version of GNU GhostScript
(currently based off GNU GhostScript 4.03) and an image file RIP that
can be used to support non-PostScript printers. </P>
<H2><A NAME=1_2>Document Overview</A></H2>
<H2><A NAME="1_2">Document Overview</A></H2>
<P>This software users manual is organized into the following sections:</P>
<UL>
<LI>1 - Printing System Overview</LI>
@@ -95,10 +197,10 @@ can be used to support non-PostScript printers. </P>
<LI>3 - Standard Printer Options</LI>
<LI>4 - Checking the Status Via the Web</LI>
</UL>
<H1 ALIGN=RIGHT><A NAME=2>1 - Printing System Overview</A></H1>
<H1 ALIGN="RIGHT"><A NAME="2">1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing
System works. </P>
<H2><A NAME=2_1>The Printing Problem</A></H2>
<H2><A NAME="2_1">The Printing Problem</A></H2>
<P>For years <I>the printing problem</I> has plagued UNIX&reg;. Unlike
Microsoft&reg; Windows&reg; or MacOS, UNIX has no standard interface or system
in place for supporting printers. Among the solutions previously
@@ -120,7 +222,7 @@ that supports a wide range of file formats with little or no effort.
Since CUPS provides both the System V and Berkeley printing commands,
users (and applications) can reap the benefits of this new technology
with no changes. </P>
<H2><A NAME=2_2>The Technology</A></H2>
<H2><A NAME="2_2">The Technology</A></H2>
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol, or IPP. IPP has been embraced by dozens of printer
and printer server manufacturers, and will be supported by the next
@@ -140,17 +242,17 @@ using their web browser. </P>
Basic authentication and domain or IP-based access control. Digest
authentication and TLS encryption will be available in future versions
of CUPS. </P>
<H2><A NAME=2_3>Jobs</A></H2>
<H2><A NAME="2_3">Jobs</A></H2>
<P>Each file that is submitted for printing is called a <I>job</I>.
Jobs are identified by a unique number starting at 1 and are assigned
to a particular destination (usually a printer). Jobs can also have
options associated with them such as media size, number of copies, and
priority. </P>
<H2><A NAME=2_4>Classes</A></H2>
<H2><A NAME="2_4">Classes</A></H2>
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
sent to a class are forwarded to the first available printer in the
class. </P>
<H2><A NAME=2_5>Filters</A></H2>
<H2><A NAME="2_5">Filters</A></H2>
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
@@ -166,13 +268,13 @@ printer. </P>
<P>CUPS provides backends for printing over parallel and serial ports,
and over the network via the JetDirect (AppSocket), Server Message
Block, and Line Printer Daemon protocols. </P>
<H2><A NAME=2_6>Printer Drivers</A></H2>
<H2><A NAME="2_6">Printer Drivers</A></H2>
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes a sample printer driver for Hewlett-Packard
LaserJet and DeskJet printers. While this driver does not generate
optimal output for different printer models, it does demonstrate how
you can write your own printer drivers and incorporate them into CUPS. </P>
<H2><A NAME=2_7>Networking</A></H2>
<H2><A NAME="2_7">Networking</A></H2>
<P>Printers and classes on the local system are automatically shared
with other systems on the network. This allows you to setup one system
to print to a printer and use this system as a printer server or spool
@@ -188,10 +290,10 @@ example, so that you aren't relying on a single system for printing.
Because this also works with printer classes, you can setup multiple
servers and printers and never worry about a &quot;single point of failure&quot;
unless all of the printers and servers goes down! </P>
<H1 ALIGN=RIGHT><A NAME=3>2 - Using the Printing System</A></H1>
<H1 ALIGN="RIGHT"><A NAME="3">2 - Using the Printing System</A></H1>
<P>This chapter shows you how to submit, query, and cancel print jobs
to different printers. </P>
<H2><A NAME=3_1>Submitting Files for Printing</A></H2>
<H2><A NAME="3_1">Submitting Files for Printing</A></H2>
<P>CUPS provides both the System V (<CODE>lp</CODE>) and Berkeley (<CODE>
lpr</CODE>) printing commands. To print a file to the default printer
on the system (or your only printer if you have only one) you just need
@@ -210,7 +312,7 @@ to type: </P>
<P>CUPS understands many different types of files directly, including
PostScript and image files. This allows you to print from inside your
applications or at the command-line, whichever is most convenient! </P>
<H2><A NAME=3_2>Choosing a Printer</A></H2>
<H2><A NAME="3_2">Choosing a Printer</A></H2>
<P>Many systems will have more than one printer available to the user.
These printers can be attached to the local system via a parallel or
serial port, or available over the network. </P>
@@ -237,7 +339,7 @@ class. </P>
% lpr -P printer filename ENTER
</PRE>
</UL>
<H2><A NAME=3_3>Setting Printer Options</A></H2>
<H2><A NAME="3_3">Setting Printer Options</A></H2>
<P>For many types of files, the default printer options may be
sufficient for your needs. However, there may be times when you need to
change the options for a particular file you are printing. </P>
@@ -251,8 +353,8 @@ the &quot;-o&quot; option: </P>
<P>The <CODE>lpr</CODE> command has no command-line option for printer
options. </P>
<P>The available printer options vary depending on the printer. The
standard options are described in <A HREF=#4>Chapter 3</A>. </P>
<H2><A NAME=3_4>Printing Multiple Copies</A></H2>
standard options are described in <A HREF="#4">Chapter 3</A>. </P>
<H2><A NAME="3_4">Printing Multiple Copies</A></H2>
<P>Both the <CODE>lp</CODE> and <CODE>lpr</CODE> commands have options
for printing more than one copy of a file: </P>
<UL>
@@ -269,7 +371,7 @@ option: </P>
% lp -n num-copies -o Collate=True filename ENTER
</PRE>
</UL>
<H2><A NAME=3_5>Checking the Printer Status from the Command-Line</A></H2>
<H2><A NAME="3_5">Checking the Printer Status from the Command-Line</A></H2>
<P>The <CODE>lpstat</CODE> command can be used to check for jobs that
you have submitted for printing: </P>
<UL>
@@ -298,13 +400,13 @@ Printer-3 johndoe 372842
printer DeskJet now printing DeskJet-1.
</PRE>
</UL>
<H2><A NAME=3_6>Checking the Printer Status from the Web</A></H2>
<H2><A NAME="3_6">Checking the Printer Status from the Web</A></H2>
<P>Since CUPS uses the Internet Printing Protocol, it is also a
full-featured web server. To use your web browser to monitor the
printers on your system, open the URL &quot;<A HREF=http://localhost:631>
printers on your system, open the URL &quot;<A HREF="http://localhost:631">
http://localhost:631</A>&quot;. From there you can view the status of
classes, jobs, and printers with the click of a button! </P>
<H2><A NAME=3_7>Canceling a Print Job</A></H2>
<H2><A NAME="3_7">Canceling a Print Job</A></H2>
<P>The <CODE>cancel</CODE> command cancels a print job: </P>
<UL>
<PRE>
@@ -313,12 +415,12 @@ classes, jobs, and printers with the click of a button! </P>
</UL>
<P>The <I>job-id</I> is a number that was reported to you by the <CODE>
lp</CODE> or <CODE>lpstat</CODE> commands. </P>
<H1 ALIGN=RIGHT><A NAME=4>3 - Standard Printer Options</A></H1>
<H1 ALIGN="RIGHT"><A NAME="4">3 - Standard Printer Options</A></H1>
<P>This chapter describes the standard printer options that are
available when printing with the <CODE>lp</CODE> command. </P>
<H2><A NAME=4_1>General Options</A></H2>
<H2><A NAME="4_1">General Options</A></H2>
<P>The following options apply when printing all types of files. </P>
<H3><A NAME=4_1_1>Selecting the Media Size, Type, and Source</A></H3>
<H3><A NAME="4_1_1">Selecting the Media Size, Type, and Source</A></H3>
<P>The &quot;-o media=xyz&quot; option sets the media size, type, and/or source: </P>
<UL>
<PRE>
@@ -346,7 +448,7 @@ but most support the following options (case is significant): </P>
<P>The actual options supported are defined in the printer's PPD file
in the <CODE>PageSize</CODE>, <CODE>InputSlot</CODE>, and <CODE>
MediaType</CODE> options. </P>
<H3><A NAME=4_1_2>Setting the Orientation</A></H3>
<H3><A NAME="4_1_2">Setting the Orientation</A></H3>
<P>The &quot;-o landscape&quot; option will rotate the page 90 degrees to print
in landscape orientation: </P>
<UL>
@@ -354,7 +456,7 @@ in landscape orientation: </P>
% lp -o landscape filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_3>Printing On Both Sides of the Paper</A></H3>
<H3><A NAME="4_1_3">Printing On Both Sides of the Paper</A></H3>
<P>The &quot;-o sides=two-sided-short-edge&quot; and &quot;-o
sides=two-sided-long-edge&quot; options will enable duplexing on the printer
(if the printer supports it.) The &quot;two-sided-short&quot; option is suitable
@@ -366,7 +468,7 @@ portrait pages: </P>
% lp -o sides=two-sided-long-edge filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_4>Selecting a Range of Pages</A></H3>
<H3><A NAME="4_1_4">Selecting a Range of Pages</A></H3>
<P>The &quot;-o page-ranges=pages&quot; option selects a range of pages for
printing: </P>
<UL>
@@ -387,7 +489,7 @@ of the order of the pages in the &quot;page-range&quot; option. </P>
% lp -o page-set=even filename ENTER
</PRE>
</UL>
<H3><A NAME=4_1_5>N-Up Printing</A></H3>
<H3><A NAME="4_1_5">N-Up Printing</A></H3>
<P>The &quot;-o number-up=value&quot; option selects N-Up printing. N-Up
printing places multiple document pages on a single printed page. CUPS
supports 1-Up, 2-Up, and 4-Up formats: </P>
@@ -399,7 +501,7 @@ supports 1-Up, 2-Up, and 4-Up formats: </P>
</PRE>
</UL>
<P>The default format is 1-Up. </P>
<H3><A NAME=4_1_6>Setting the Brightness</A></H3>
<H3><A NAME="4_1_6">Setting the Brightness</A></H3>
<P>You can control the overall brightness of the printed output using
the &quot;-o brightness=percent&quot; option: </P>
<UL>
@@ -409,7 +511,7 @@ the &quot;-o brightness=percent&quot; option: </P>
</UL>
<P>Values greater than 100 will lighten the print, while values less
than 100 will darken it. </P>
<H3><A NAME=4_1_7>Setting the Gamma Correction</A></H3>
<H3><A NAME="4_1_7">Setting the Gamma Correction</A></H3>
<P>You can control the overall gamma correction of the printed output
using the &quot;-o gamma=value&quot; option: </P>
<UL>
@@ -418,31 +520,32 @@ using the &quot;-o gamma=value&quot; option: </P>
</PRE>
</UL>
<P>Values greater than 1000 will lighten the print, while values less
than 1000 will darken it. </P>
<H2><A NAME=4_2>Text Options</A></H2>
than 1000 will darken it. The default gamma is 2200 which matches the
sRGB specification. </P>
<H2><A NAME="4_2">Text Options</A></H2>
<P>The following options apply when printing text files. </P>
<H3><A NAME=4_2_1>Setting the Number of Characters Per Inch</A></H3>
<H3><A NAME="4_2_1">Setting the Number of Characters Per Inch</A></H3>
<P>The &quot;-o cpi=value&quot; option sets the number of characters per inch: </P>
<UL>
<PRE>
% lp -o cpi=12 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_2>Setting the Number of Lines Per Inch</A></H3>
<H3><A NAME="4_2_2">Setting the Number of Lines Per Inch</A></H3>
<P>The &quot;-o lpi=value&quot; option sets the number of lines per inch: </P>
<UL>
<PRE>
% lp -o lpi=8 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_3>Setting the Number of Columns</A></H3>
<H3><A NAME="4_2_3">Setting the Number of Columns</A></H3>
<P>The &quot;-o columns=value&quot; option sets the number of text columns: </P>
<UL>
<PRE>
% lp -o columns=2 filename ENTER
</PRE>
</UL>
<H3><A NAME=4_2_4>Setting the Page Margins</A></H3>
<H3><A NAME="4_2_4">Setting the Page Margins</A></H3>
<P>Normally the page margins are set to the hard limits of the printer.
To adjust the page margins use the &quot;-o page-left=value&quot;, &quot;-o
page-right=value&quot;, &quot;-o page-top=value&quot;, and &quot;-o page-bottom=value&quot;
@@ -457,7 +560,7 @@ options: </P>
</UL>
<P>The <I>value</I> argument is the margin in points; each point is
1/72 inch or 0.35mm. </P>
<H3><A NAME=4_2_5>Pretty Printing</A></H3>
<H3><A NAME="4_2_5">Pretty Printing</A></H3>
<P>The &quot;-o prettyprint&quot; option puts a header at the top of each page
with the page number, job title (usually the filename), and the date.
Also, C and C++ keywords are highlighted, and comment lines are
@@ -467,9 +570,9 @@ italicized: </P>
% lp -o prettyprint filename ENTER
</PRE>
</UL>
<H2><A NAME=4_3>Image Options</A></H2>
<H2><A NAME="4_3">Image Options</A></H2>
<P>The following options apply when printing image files. </P>
<H3><A NAME=4_3_1>Scaling the Image</A></H3>
<H3><A NAME="4_3_1">Scaling the Image</A></H3>
<P>The &quot;-o scaling=percent&quot; and &quot;-o ppi=value&quot; options change the size
of a printed image: </P>
<UL>
@@ -487,7 +590,7 @@ resolution of the image in pixels per inch. An image that is 3000x2400
pixels will print 10x8 inches at 300 pixels per inch, for example. If
the specified resolution makes the image larger than the page, multiple
pages will be printed to satisfy the request. </P>
<H3><A NAME=4_3_2>Adjusting the Hue (Tint) of an Image</A></H3>
<H3><A NAME="4_3_2">Adjusting the Hue (Tint) of an Image</A></H3>
<P>The &quot;-o hue=value&quot; option will adjust the hue of the printed image,
much like the tint control on your television: </P>
<UL>
@@ -499,7 +602,7 @@ much like the tint control on your television: </P>
represents the color hue rotation. The following table summarizes the
change you'll see with different colors:
<CENTER>
<TABLE BORDER=1 WIDTH=50%>
<TABLE BORDER="1" WIDTH="50%">
<TR><TH>Original</TH><TH>hue=-45</TH><TH>hue=45</TH></TR>
<TR><TD>Red</TD><TD>Purple</TD><TD>Yellow-orange</TD></TR>
<TR><TD>Green</TD><TD>Yellow-green</TD><TD>Blue-green</TD></TR>
@@ -510,7 +613,7 @@ change you'll see with different colors:
</TABLE>
</CENTER>
</P>
<H3><A NAME=4_3_3>Adjusting the Saturation (Color) of an Image</A></H3>
<H3><A NAME="4_3_3">Adjusting the Saturation (Color) of an Image</A></H3>
<P>The &quot;-o saturation=percent&quot; option adjusts the saturation of the
colors in an image, much like the color knob on your television: </P>
<UL>
+703 -717
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+4 -3
Ver Arquivo
@@ -2,7 +2,7 @@
<HEAD>
<META NAME="Description" CONTENT="Common UNIX Printing System Software Users Manual">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-1999, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.0.1">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.0.3">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Users Manual</TITLE>
</HEAD>
@@ -11,7 +11,7 @@
<H1 ALIGN=RIGHT>Preface</H1>
This software users manual describes how to use the Common UNIX Printing
System ("CUPS") Version 1.0.1.
System ("CUPS") Version 1.0.3.
<H2>System Overview</H2>
@@ -428,7 +428,8 @@ using the "-o gamma=value" option:
</PRE></UL>
<P>Values greater than 1000 will lighten the print, while values less
than 1000 will darken it.
than 1000 will darken it. The default gamma is 2200 which matches the
sRGB specification.
<H2>Text Options</H2>
+1
Ver Arquivo
@@ -58,6 +58,7 @@ install:
-$(MKDIR) $(LIBDIR)
$(CP) $(LIBCUPSIMAGE) $(LIBDIR)
-if test $(LIBCUPSIMAGE) != "libcupsimage.a"; then \
$(RM) `basename $(LIBCUPSIMAGE) .1`; \
$(LN) $(LIBCUPSIMAGE) `basename $(LIBCUPSIMAGE) .1`; \
fi
+72 -35
Ver Arquivo
@@ -131,17 +131,16 @@ LA_line_attributes(int num_params, /* I - Number of parameters */
if (num_params == 0)
{
Outputf("3.0 setmiterlimit\n");
Outputf("0 setlinecap\n");
Outputf("0 setlinejoin\n");
MiterLimit = 3.0f;
LineCap = 0;
LineJoin = 0;
}
else for (i = 0; i < (num_params - 1); i += 2)
switch ((int)params[i].value.number)
{
case 1 :
Outputf("%d setlinecap\n",
params[i + 1].value.number == 1 ? 0 :
params[i + 1].value.number == 4 ? 1 : 2);
LineCap = params[i + 1].value.number == 1 ? 0 :
params[i + 1].value.number == 4 ? 1 : 2;
break;
case 2 :
switch ((int)params[i + 1].value.number)
@@ -149,21 +148,27 @@ LA_line_attributes(int num_params, /* I - Number of parameters */
case 1 :
case 2 :
case 3 :
Outputf("0 setlinejoin\n");
LineJoin = 0;
break;
case 5 :
Outputf("2 setlinejoin\n");
LineJoin = 2;
break;
default :
Outputf("1 setlinejoin\n");
LineJoin = 1;
break;
}
break;
case 3 :
Outputf("%f setmiterlimit\n",
1.0 + 0.5 * (params[i + 1].value.number - 1.0));
MiterLimit = 1.0 + 0.5 * (params[i + 1].value.number - 1.0);
break;
}
if (PageDirty)
{
printf("%.1f setmiterlimit\n", MiterLimit);
printf("%d setlinecap\n", LineCap);
printf("%d setlinejoin\n", LineJoin);
}
}
@@ -197,16 +202,16 @@ NP_number_pens(int num_params, /* I - Number of parameters */
if (num_params == 0)
PenCount = 8;
else if (num_params == 1)
else if (num_params == 1 && params[0].value.number <= 1024)
PenCount = (int)params[0].value.number;
else
fprintf(stderr, "WARNING: HP-GL/2 \'NP\' command with invalid number of parameters (%d)!\n",
num_params);
PC_pen_color(0, NULL);
for (i = 0; i <= PenCount; i ++)
Outputf("/W%d { DefaultPenWidth PenScaling mul setlinewidth } bind def\n", i);
Pens[i].width = PenWidth;
PC_pen_color(0, NULL);
}
@@ -235,26 +240,45 @@ PC_pen_color(int num_params, /* I - Number of parameters */
{
for (i = 0; i <= PenCount; i ++)
if (i < 8)
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
i, standard_colors[i][0],
standard_colors[i][1], standard_colors[i][2]);
{
Pens[i].rgb[0] = standard_colors[i][0];
Pens[i].rgb[1] = standard_colors[i][1];
Pens[i].rgb[2] = standard_colors[i][2];
}
else
Outputf("/P%d { 0.0 0.0 0.0 setrgbcolor } bind def\n", i);
{
Pens[i].rgb[0] = 0.0f;
Pens[i].rgb[1] = 0.0f;
Pens[i].rgb[2] = 0.0f;
}
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
else if (num_params == 1)
else if (num_params == 1 || num_params == 4)
{
i = (int)params[0].value.number;
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
i, standard_colors[i & 7][0], standard_colors[i & 7][1],
standard_colors[i & 7][2]);
if (num_params == 1)
{
Pens[i].rgb[0] = standard_colors[i & 7][0];
Pens[i].rgb[1] = standard_colors[i & 7][1];
Pens[i].rgb[2] = standard_colors[i & 7][2];
}
else
{
Pens[i].rgb[0] = params[1].value.number;
Pens[i].rgb[1] = params[2].value.number;
Pens[i].rgb[2] = params[3].value.number;
}
if (PageDirty && i == PenNumber)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
else if (num_params == 4)
Outputf("/P%d { %.3f %.3f %.3f setrgbcolor } bind def\n",
(int)params[0].value.number,
(params[1].value.number - ColorRange[0][0]) / ColorRange[0][1],
(params[2].value.number - ColorRange[1][0]) / ColorRange[1][1],
(params[3].value.number - ColorRange[2][0]) / ColorRange[2][1]);
else
fprintf(stderr, "WARNING: HP-GL/2 \'PC\' command with invalid number of parameters (%d)!\n",
num_params);
@@ -299,8 +323,16 @@ PW_pen_width(int num_params, /* I - Number of parameters */
}
if (num_params == 2)
Outputf("/W%d { %.1f PenScaling mul setlinewidth } bind def W%d\n",
(int)params[1].value.number, w, (int)params[1].value.number);
{
pen = (int)params[1].value.number;
Pens[pen].width = w;
if (PageDirty && pen == PenNumber)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
else if (num_params < 2)
{
/*
@@ -308,10 +340,12 @@ PW_pen_width(int num_params, /* I - Number of parameters */
*/
for (pen = 0; pen <= PenCount; pen ++)
Outputf("/W%d { %.1f PenScaling mul setlinewidth } bind def\n",
pen, w);
Pens[pen].width = w;
Outputf("W%d\n", PenNumber);
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
else
fprintf(stderr, "WARNING: HP-GL/2 \'PW\' command with invalid number of parameters (%d)!\n",
@@ -365,7 +399,10 @@ SP_select_pen(int num_params, /* I - Number of parameters */
fprintf(stderr, "WARNING: HP-GL/2 \'SP\' command with invalid number or value of parameters (%d, %d)!\n",
num_params, (int)params[0].value.number);
Outputf("P%d W%d\n", PenNumber, PenNumber);
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
+112 -47
Ver Arquivo
@@ -60,20 +60,16 @@ AD_define_alternate(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
int typeface, /* Typeface number */
posture, /* Posture number */
weight; /* Weight number */
float height; /* Height/size of font */
/*
* Set default font attributes...
*/
typeface = 48;
posture = 0;
weight = 0;
height = 11.5;
AlternateFont.typeface = 48;
AlternateFont.posture = 0;
AlternateFont.weight = 0;
AlternateFont.height = 11.5;
/*
* Loop through parameter value pairs...
@@ -83,16 +79,16 @@ AD_define_alternate(int num_params, /* I - Number of parameters */
switch ((int)params[i].value.number)
{
case 4 :
height = params[i + 1].value.number;
AlternateFont.height = params[i + 1].value.number;
break;
case 5 :
posture = (int)params[i + 1].value.number;
AlternateFont.posture = (int)params[i + 1].value.number;
break;
case 6 :
weight = (int)params[i + 1].value.number;
AlternateFont.weight = (int)params[i + 1].value.number;
break;
case 7 :
typeface = (int)params[i + 1].value.number;
AlternateFont.typeface = (int)params[i + 1].value.number;
break;
}
@@ -100,14 +96,22 @@ AD_define_alternate(int num_params, /* I - Number of parameters */
* Define the font...
*/
Outputf("/SA { /%s%s%s%s findfont %.1f scalefont setfont } def\n",
typeface == 48 ? "Courier" : "Helvetica",
(weight != 0 || posture != 0) ? "-" : "",
weight != 0 ? "Bold" : "",
posture != 0 ? "Oblique" : "",
height);
if (PageDirty)
printf("/SA {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
AlternateFont.typeface == 48 ? "Courier" : "Helvetica",
(AlternateFont.weight != 0 || AlternateFont.posture != 0) ? "-" : "",
AlternateFont.weight != 0 ? "Bold" : "",
AlternateFont.posture != 0 ? "Oblique" : "",
AlternateFont.x * AlternateFont.height,
-AlternateFont.y * AlternateFont.height,
AlternateFont.y * AlternateFont.height,
AlternateFont.x * AlternateFont.height);
CharHeight[1] = height;
CharHeight[1] = AlternateFont.height;
}
@@ -171,12 +175,56 @@ void
DI_absolute_direction(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
Outputf(CharFont == 0 ? "SS\n" : "SA\n");
if (CharFont)
{
if (num_params == 2)
{
AlternateFont.x = params[0].value.number;
AlternateFont.y = params[1].value.number;
}
if (num_params == 2)
Outputf("currentfont [ %f %f %f %f 0.0 0.0 ] makefont setfont\n",
params[0].value.number, -params[1].value.number,
params[1].value.number, params[0].value.number);
if (PageDirty)
{
printf("/SA {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
AlternateFont.typeface == 48 ? "Courier" : "Helvetica",
(AlternateFont.weight != 0 || AlternateFont.posture != 0) ? "-" : "",
AlternateFont.weight != 0 ? "Bold" : "",
AlternateFont.posture != 0 ? "Oblique" : "",
AlternateFont.x * AlternateFont.height,
-AlternateFont.y * AlternateFont.height,
AlternateFont.y * AlternateFont.height,
AlternateFont.x * AlternateFont.height);
}
}
else
{
if (num_params == 2)
{
StandardFont.x = params[0].value.number;
StandardFont.y = params[1].value.number;
}
if (PageDirty)
{
printf("/SS {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
StandardFont.typeface == 48 ? "Courier" : "Helvetica",
(StandardFont.weight != 0 || StandardFont.posture != 0) ? "-" : "",
StandardFont.weight != 0 ? "Bold" : "",
StandardFont.posture != 0 ? "Oblique" : "",
StandardFont.x * StandardFont.height,
-StandardFont.y * StandardFont.height,
StandardFont.y * StandardFont.height,
StandardFont.x * StandardFont.height);
}
}
}
@@ -249,7 +297,7 @@ LB_label(int num_params, /* I - Number of parameters */
return;
Outputf("gsave\n");
Outputf("currentmiterlimit 1.0 setmiterlimit\n");
Outputf("currentmiterlimit 1.0 \n");
Outputf("MP\n");
Outputf("%.3f %.3f MO\n", PenPosition[0], PenPosition[1]);
@@ -264,7 +312,14 @@ LB_label(int num_params, /* I - Number of parameters */
if (CharFillMode != 1)
Outputf("FI\n");
if (CharFillMode == 1 || CharFillMode == 3)
Outputf("P%d ST\n", CharPen);
{
Outputf("%.3f %.3f %.3f %.2f SP ST\n", Pens[CharPen].rgb[0],
Pens[CharPen].rgb[CharPen], Pens[CharPen].rgb[2],
Pens[CharPen].width * PenScaling);
Outputf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
}
Outputf("setmiterlimit\n");
Outputf("grestore\n");
@@ -295,7 +350,9 @@ SA_select_alternate(int num_params, /* I - Number of parameters */
(void)num_params;
(void)params;
Outputf("SA\n");
if (PageDirty)
puts("SA");
CharFont = 1;
}
@@ -309,20 +366,18 @@ SD_define_standard(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
int i; /* Looping var */
int typeface, /* Typeface number */
posture, /* Posture number */
weight; /* Weight number */
float height; /* Height/size of font */
/*
* Set default font attributes...
*/
typeface = 48;
posture = 0;
weight = 0;
height = 11.5;
StandardFont.typeface = 48;
StandardFont.posture = 0;
StandardFont.weight = 0;
StandardFont.height = 11.5;
StandardFont.x = 1.0;
StandardFont.y = 0.0;
/*
* Loop through parameter value pairs...
@@ -332,16 +387,16 @@ SD_define_standard(int num_params, /* I - Number of parameters */
switch ((int)params[i].value.number)
{
case 4 :
height = params[i + 1].value.number;
StandardFont.height = params[i + 1].value.number;
break;
case 5 :
posture = (int)params[i + 1].value.number;
StandardFont.posture = (int)params[i + 1].value.number;
break;
case 6 :
weight = (int)params[i + 1].value.number;
StandardFont.weight = (int)params[i + 1].value.number;
break;
case 7 :
typeface = (int)params[i + 1].value.number;
StandardFont.typeface = (int)params[i + 1].value.number;
break;
}
@@ -349,14 +404,22 @@ SD_define_standard(int num_params, /* I - Number of parameters */
* Define the font...
*/
Outputf("/SS { /%s%s%s%s findfont %.1f scalefont setfont } def\n",
typeface == 48 ? "Courier" : "Helvetica",
(weight != 0 || posture != 0) ? "-" : "",
weight != 0 ? "Bold" : "",
posture != 0 ? "Oblique" : "",
height);
if (PageDirty)
printf("/SS {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
StandardFont.typeface == 48 ? "Courier" : "Helvetica",
(StandardFont.weight != 0 || StandardFont.posture != 0) ? "-" : "",
StandardFont.weight != 0 ? "Bold" : "",
StandardFont.posture != 0 ? "Oblique" : "",
StandardFont.x * StandardFont.height,
-StandardFont.y * StandardFont.height,
StandardFont.y * StandardFont.height,
StandardFont.x * StandardFont.height);
CharHeight[0] = height;
CharHeight[0] = StandardFont.height;
}
@@ -410,7 +473,9 @@ SS_select_standard(int num_params, /* I - Number of parameters */
(void)num_params;
(void)params;
Outputf("SS\n");
if (PageDirty)
puts("SS");
CharFont = 0;
}
+227 -53
Ver Arquivo
@@ -51,54 +51,153 @@
void
update_transform(void)
{
float width, /* Plot width */
height; /* Plot height */
float page_width, /* Actual page width in points */
page_length; /* Actual page length in points */
float page_width, /* Actual page width */
page_height; /* Actual page height */
float scaling; /* Scaling factor */
float left, right, /* Scaling window */
bottom, top;
float width, height; /* Scaling width and height */
float iw1[2], iw2[2]; /* Clipping window */
/*
* Get the page and input window sizes...
*/
width = IW2[0] - IW1[0];
height = IW2[1] - IW1[1];
if (FitPlot)
{
page_width = PageRight - PageLeft;
page_height = PageTop - PageBottom;
}
else
{
page_width = (P2[0] - P1[0]) * 72.0f / 1016.0f;
page_height = (P2[1] - P1[1]) * 72.0f / 1016.0f;
}
fprintf(stderr, "DEBUG: page_width = %.0f, page_height = %.0f\n",
page_width, page_height);
if (page_width == 0 || page_height == 0)
return;
/*
* Set the scaling window...
*/
switch (ScalingType)
{
case -1 : /* No user scaling */
left = P1[0];
bottom = P1[1];
right = P2[0];
top = P2[1];
break;
case 0 : /* Anisotropic (non-uniform) scaling */
left = Scaling1[0];
bottom = Scaling1[1];
right = Scaling2[0];
top = Scaling2[1];
break;
case 1 : /* Isotropic (uniform) scaling */
left = Scaling1[0];
bottom = Scaling1[1];
right = Scaling2[0];
top = Scaling2[1];
width = right - left;
height = top - bottom;
if (width == 0 || height == 0)
return;
if ((width * page_height) != (height * page_width))
{
scaling = height * page_width / page_height;
if (width < scaling)
{
width = scaling;
left = 0.5f * (left + right - width);
right = left + width;
}
else
{
height = width * page_height / page_width;
bottom = 0.5f * (bottom + top - height);
top = bottom + height;
}
}
break;
case 2 :
left = Scaling1[0];
bottom = Scaling1[1];
right = left + page_width * Scaling2[0];
top = bottom + page_height * Scaling2[1];
break;
}
width = right - left;
height = top - bottom;
if (width == 0 || height == 0)
return;
/*
* Scale the plot as needed...
* Rotate the plot as needed...
*/
if (FitPlot)
if (Rotation == 0 || Rotation == 180)
{
page_width = PageRight - PageLeft;
page_length = PageTop - PageBottom;
if (Rotation == 0 || Rotation == 180)
if ((width > height && page_width < page_height) ||
(width < height && page_width > page_height))
{
scaling = page_width / width;
if (scaling > (page_length / width))
scaling = page_length / width;
}
else
{
scaling = page_width / height;
if (scaling > (page_length / height))
scaling = page_length / height;
fputs("DEBUG: Automatically rotating the page...\n", stderr);
Rotation += 90;
}
}
else
{
page_width = PlotSize[0];
page_length = PlotSize[1];
if ((width > height && page_width > page_height) ||
(width < height && page_width < page_height))
{
fputs("DEBUG: Automatically rotating the page...\n", stderr);
Rotation = (Rotation + 90) % 360;
}
}
/*
* Scale the plot as needed...
*/
if (Rotation == 0 || Rotation == 180)
scaling = page_width / width;
else
scaling = page_width / height;
if (FitPlot)
{
if (Rotation == 0 || Rotation == 180)
scaling = page_width / width;
scaling *= page_width / PlotSize[1];
else
scaling = page_width / height;
scaling *= page_width / PlotSize[0];
}
/*
* Offset for the current P1 location...
*/
if (FitPlot)
{
left = 0;
bottom = 0;
}
else
{
left = P1[0] * 72.0f / 1016.0f;
bottom = P1[1] * 72.0f / 1016.0f;
}
/*
@@ -110,47 +209,74 @@ update_transform(void)
case 0 :
Transform[0][0] = scaling;
Transform[0][1] = 0.0;
Transform[0][2] = -IW1[0] * scaling;
Transform[0][2] = -left;
Transform[1][0] = 0.0;
Transform[1][1] = scaling;
Transform[1][2] = -IW1[1] * scaling;
Transform[1][2] = -bottom;
break;
case 90 :
Transform[0][0] = 0.0;
Transform[0][1] = -scaling;
Transform[0][2] = (height - IW1[0]) * scaling;
Transform[0][2] = PageLength - left;
Transform[1][0] = scaling;
Transform[1][1] = 0.0;
Transform[1][2] = -IW1[1] * scaling;
Transform[1][2] = -bottom;
break;
case 180 :
Transform[0][0] = -scaling;
Transform[0][1] = 0.0;
Transform[0][2] = (height - IW1[0]) * scaling;
Transform[0][2] = PageLength - left;
Transform[1][0] = 0.0;
Transform[1][1] = -scaling;
Transform[1][2] = (width - IW1[1]) * scaling;
Transform[1][2] = PageWidth - bottom;
break;
case 270 :
Transform[0][0] = 0.0;
Transform[0][1] = scaling;
Transform[0][2] = -IW1[0] * scaling;
Transform[0][2] = -left;
Transform[1][0] = -scaling;
Transform[1][1] = 0.0;
Transform[1][2] = (width - IW1[1]) * scaling;
Transform[1][2] = PageWidth - bottom;
break;
}
PenScaling = Transform[0][0] + Transform[0][1];
fprintf(stderr, "DEBUG: Transform = [ %.3f %.3f\n"
"DEBUG: %.3f %.3f\n"
"DEBUG: %.3f %.3f ]\n",
Transform[0][0], Transform[1][0], Transform[0][1],
Transform[1][1], Transform[0][2], Transform[1][2]);
if (FitPlot)
{
if (Rotation == 0 || Rotation == 180)
PenScaling *= page_width / PlotSize[1];
else
PenScaling *= page_width / PlotSize[0];
}
else
PenScaling = 1.0;
if (PenScaling < 0.0)
PenScaling = -PenScaling;
if (PageDirty)
printf("/PenScaling %.3f def W%d\n", PenScaling, PenNumber);
{
printf("%.2f setlinewidth\n", Pens[PenNumber].width * PenScaling);
if (IW1[0] != IW2[0] && IW1[1] != IW2[1])
{
iw1[0] = IW1[0] * 72.0f / 1016.0f;
iw1[1] = IW1[1] * 72.0f / 1016.0f;
iw2[0] = IW2[0] * 72.0f / 1016.0f;
iw2[1] = IW2[1] * 72.0f / 1016.0f;
printf("initclip MP %.3f %.3f MO %.3f %.3f LI %.3f %.3f LI %.3f %.3f LI CP clip\n",
iw1[0], iw1[1], iw1[0], iw2[1], iw2[0], iw2[1], iw2[0], iw1[1]);
}
}
}
@@ -219,7 +345,8 @@ IN_initialize(int num_params, /* I - Number of parameters */
PS_plot_size(0, NULL);
WU_width_units(0, NULL);
PW_pen_width(0, NULL);
SP_select_pen(0, NULL);
PenWidth = 1;
PenPosition[0] = PenPosition[1] = 0.0;
}
@@ -235,10 +362,10 @@ IP_input_absolute(int num_params, /* I - Number of parameters */
{
if (num_params == 0)
{
P1[0] = 0.0;
P1[1] = 0.0;
P2[0] = PlotSize[0] / 72.0f * 1016.0f;
P2[1] = PlotSize[1] / 72.0f * 1016.0f;
P1[0] = PageLeft / 72.0f * 1016.0f;
P1[1] = PageBottom / 72.0f * 1016.0f;
P2[0] = PageRight / 72.0f * 1016.0f;
P2[1] = PageTop / 72.0f * 1016.0f;
}
else if (num_params == 2)
{
@@ -262,6 +389,14 @@ IP_input_absolute(int num_params, /* I - Number of parameters */
IW2[0] = P2[0];
IW2[1] = P2[1];
if (ScalingType < 0)
{
Scaling1[0] = P1[0];
Scaling1[0] = P1[1];
Scaling2[0] = P2[0];
Scaling2[1] = P2[1];
}
update_transform();
}
@@ -303,6 +438,14 @@ IR_input_relative(int num_params, /* I - Number of parameters */
IW2[0] = P2[0];
IW2[1] = P2[1];
if (ScalingType < 0)
{
Scaling1[0] = P1[0];
Scaling1[0] = P1[1];
Scaling2[0] = P2[0];
Scaling2[1] = P2[1];
}
update_transform();
}
@@ -317,19 +460,44 @@ IW_input_window(int num_params, /* I - Number of parameters */
{
if (num_params == 0)
{
IW1[0] = P1[0];
IW1[1] = P1[1];
IW2[0] = P2[0];
IW2[1] = P2[1];
IW1[0] = PageLeft / 72.0f * 1016.0f;
IW1[1] = PageBottom / 72.0f * 1016.0f;
IW2[0] = PageRight / 72.0f * 1016.0f;
IW2[1] = PageTop / 72.0f * 1016.0f;
}
else if (num_params == 4)
{
IW1[0] = params[0].value.number;
IW1[1] = params[1].value.number;
IW2[0] = params[2].value.number;
IW2[1] = params[3].value.number;
if (ScalingType < 0)
{
IW1[0] = params[0].value.number;
IW1[1] = params[1].value.number;
IW2[0] = params[2].value.number;
IW2[1] = params[3].value.number;
}
else
{
IW1[0] = (Transform[0][0] * params[0].value.number +
Transform[0][1] * params[1].value.number +
Transform[0][2]) / 72.0f * 1016.0f;
IW1[1] = (Transform[1][0] * params[0].value.number +
Transform[1][1] * params[1].value.number +
Transform[1][2]) / 72.0f * 1016.0f;
IW2[0] = (Transform[0][0] * params[2].value.number +
Transform[0][1] * params[3].value.number +
Transform[0][2]) / 72.0f * 1016.0f;
IW2[1] = (Transform[1][0] * params[2].value.number +
Transform[1][1] * params[3].value.number +
Transform[1][2]) / 72.0f * 1016.0f;
}
fprintf(stderr, "DEBUG: IW%.0f,%.0f,%.0f,%.0f = [ %.0f %.0f %.0f %.0f ]\n",
params[0].value.number, params[1].value.number,
params[2].value.number, params[3].value.number,
IW1[0], IW1[1], IW2[0], IW2[1]);
}
update_transform();
}
@@ -368,13 +536,13 @@ PS_plot_size(int num_params, /* I - Number of parameters */
case 0 :
if (Rotation == 0 || Rotation == 180)
{
PlotSize[0] = PageRight - PageLeft;
PlotSize[1] = PageTop - PageBottom;
PlotSize[0] = PageWidth;
PlotSize[1] = PageLength;
}
else
{
PlotSize[0] = PageTop - PageBottom;
PlotSize[1] = PageRight - PageLeft;
PlotSize[0] = PageLength;
PlotSize[1] = PageWidth;
}
break;
case 1 :
@@ -450,7 +618,13 @@ SC_scale(int num_params, /* I - Number of parameters */
param_t *params) /* I - Parameters */
{
if (num_params == 0)
{
ScalingType = -1;
Scaling1[0] = P1[0];
Scaling1[0] = P1[1];
Scaling2[0] = P2[0];
Scaling2[1] = P2[1];
}
else if (num_params > 3)
{
Scaling1[0] = params[0].value.number;
@@ -461,7 +635,7 @@ SC_scale(int num_params, /* I - Number of parameters */
if (num_params > 4)
ScalingType = (int)params[4].value.number;
else
ScalingType = 0;
ScalingType = 1;
}
update_transform();
+7 -7
Ver Arquivo
@@ -128,7 +128,6 @@ main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
FILE *fp; /* Input file */
ppd_file_t *ppd; /* PPD file */
int num_params; /* Number of parameters */
param_t *params; /* Command parameters */
name_t *command, /* Command */
@@ -137,7 +136,6 @@ main(int argc, /* I - Number of command-line arguments */
cups_option_t *options; /* Print options */
const char *val; /* Option value */
int shading; /* -1 = black, 0 = grey, 1 = color */
float penwidth; /* Default pen width */
if (argc < 6 || argc > 7)
@@ -173,11 +171,13 @@ main(int argc, /* I - Number of command-line arguments */
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if ((ppd = SetCommonOptions(num_options, options, 1)) != NULL)
ppdClose(ppd);
PPD = SetCommonOptions(num_options, options, 1);
PlotSize[0] = PageWidth;
PlotSize[1] = PageLength;
shading = 1;
penwidth = 1.0;
PenWidth = 1.0;
if ((val = cupsGetOption("blackplot", num_options, options)) != NULL)
shading = 0;
@@ -186,13 +186,13 @@ main(int argc, /* I - Number of command-line arguments */
FitPlot = 1;
if ((val = cupsGetOption("penwidth", num_options, options)) != NULL)
penwidth = (float)atof(val);
PenWidth = (float)atof(val);
/*
* Write the PostScript prolog and initialize the plotting "engine"...
*/
OutputProlog(argv[3], argv[2], shading, penwidth);
OutputProlog(argv[3], argv[2], shading);
IP_input_absolute(0, NULL);
+182 -5
Ver Arquivo
@@ -44,8 +44,7 @@
void
OutputProlog(char *title, /* I - Job title */
char *user, /* I - Username */
int shading, /* I - Type of shading */
float penwidth) /* I - Default pen width */
int shading) /* I - Type of shading */
{
FILE *prolog; /* Prolog file */
char line[255]; /* Line from prolog file */
@@ -73,7 +72,7 @@ OutputProlog(char *title, /* I - Job title */
puts("%%Orientation: Landscape");
puts("%%EndComments");
puts("%%BeginProlog");
printf("/DefaultPenWidth %.2f def\n", penwidth * 72.0 / 25.4);
printf("/DefaultPenWidth %.2f def\n", PenWidth * 72.0 / 25.4);
puts("3.0 setmiterlimit");
if (!shading) /* Black only */
puts("/setrgbcolor { pop pop pop } bind def");
@@ -124,6 +123,13 @@ Outputf(const char *format, /* I - Printf-style string */
{
va_list ap; /* Argument pointer */
int bytes; /* Number of bytes written */
float iw1[2], iw2[2]; /* Clipping window */
int i; /* Looping var */
ppd_size_t *size; /* Page size */
ppd_option_t *option; /* Page size option */
ppd_choice_t *choice; /* Page size choice */
float width, length; /* Page dimensions */
int landscape; /* Rotate for landscape orientation? */
/*
@@ -136,11 +142,171 @@ Outputf(const char *format, /* I - Printf-style string */
PageCount ++;
printf("%%%%Page: %d %d\n", PageCount, PageCount);
if (PPD != NULL && !FitPlot)
{
/*
* Set the page size for this page...
*/
if (Rotation == 0 || Rotation == 180)
{
width = PlotSize[0];
length = PlotSize[1];
}
else
{
width = PlotSize[1];
length = PlotSize[0];
}
landscape = 0;
/*
* Lookup the closest PageSize and set it...
*/
for (i = PPD->num_sizes, size = PPD->sizes; i > 0; i --, size ++)
if ((fabs(length - size->length) < 36.0 && size->width >= width) ||
(fabs(length - size->width) < 36.0 && size->length >= width))
break;
if (i == 0 && PPD->variable_sizes)
{
for (i = PPD->num_sizes, size = PPD->sizes; i > 0; i --, size ++)
if (strcasecmp(size->name, "custom") == 0)
break;
}
if (i > 0)
{
/*
* Found a matching size...
*/
option = ppdFindOption(PPD, "PageSize");
choice = ppdFindChoice(option, size->name);
puts("%%BeginPageSetup");
printf("%%%%BeginFeature: PageSize %s\n", size->name);
if (strcasecmp(size->name, "custom") == 0)
{
PageLeft = PPD->custom_margins[0];
PageRight = width - PPD->custom_margins[2];
PageWidth = width;
PageBottom = PPD->custom_margins[1];
PageTop = length - PPD->custom_margins[3];
PageLength = length;
printf("%.0f %.0f 0 0 0\n", width, length);
if (choice->code == NULL)
{
/*
* This can happen with certain buggy PPD files that don't include
* a CustomPageSize command sequence... We just use a generic
* Level 2 command sequence...
*/
puts("pop pop pop");
puts("<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice\n");
}
else
{
/*
* Use the vendor-supplied command...
*/
printf("%s\n", choice->code);
}
}
else
{
if (choice->code)
printf("%s\n", choice->code);
if (fabs(length - size->width) < 36.0)
{
/*
* Do landscape orientation...
*/
PageLeft = size->bottom;
PageRight = size->top;
PageWidth = size->length;
PageBottom = size->left;
PageTop = size->right;
PageLength = size->width;
landscape = 1;
}
else
{
/*
* Do portrait orientation...
*/
PageLeft = size->left;
PageRight = size->right;
PageWidth = size->width;
PageBottom = size->bottom;
PageTop = size->top;
PageLength = size->length;
}
}
puts("%%EndFeature");
puts("%%EndSetup");
}
}
printf("/PenScaling %.3f def\n", PenScaling);
printf("/SA {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
AlternateFont.typeface == 48 ? "Courier" : "Helvetica",
(AlternateFont.weight != 0 || AlternateFont.posture != 0) ? "-" : "",
AlternateFont.weight != 0 ? "Bold" : "",
AlternateFont.posture != 0 ? "Oblique" : "",
AlternateFont.x * AlternateFont.height,
-AlternateFont.y * AlternateFont.height,
AlternateFont.y * AlternateFont.height,
AlternateFont.x * AlternateFont.height);
printf("/SS {\n"
" /%s%s%s%s findfont\n"
" [ %f %f %f %f 0.0 0.0 ] makefont\n"
" setfont\n"
"} bind def\n",
StandardFont.typeface == 48 ? "Courier" : "Helvetica",
(StandardFont.weight != 0 || StandardFont.posture != 0) ? "-" : "",
StandardFont.weight != 0 ? "Bold" : "",
StandardFont.posture != 0 ? "Oblique" : "",
StandardFont.x * StandardFont.height,
-StandardFont.y * StandardFont.height,
StandardFont.y * StandardFont.height,
StandardFont.x * StandardFont.height);
if (CharFont)
puts("SA");
else
puts("SS");
printf("%.1f setmiterlimit\n", MiterLimit);
printf("%d setlinecap\n", LineCap);
printf("%d setlinejoin\n", LineJoin);
printf("%.3f %.3f %.3f %.2f SP\n", Pens[1].rgb[0], Pens[1].rgb[1],
Pens[1].rgb[2], Pens[1].width * PenScaling);
puts("gsave");
if (Duplex && (PageCount & 1) == 0)
switch ((PageRotation / 90) & 3)
switch ((PageRotation / 90 + landscape) & 3)
{
case 0 :
printf("%.1f %.1f translate\n", PageWidth - PageRight, PageBottom);
@@ -157,7 +323,7 @@ Outputf(const char *format, /* I - Printf-style string */
break;
}
else
switch ((PageRotation / 90) & 3)
switch ((PageRotation / 90 + landscape) & 3)
{
case 0 :
printf("%.1f %.1f translate\n", PageLeft, PageBottom);
@@ -173,6 +339,17 @@ Outputf(const char *format, /* I - Printf-style string */
printf("%.1f %.1f translate\n", PageLength - PageTop, PageLeft);
break;
}
if (IW1[0] != IW2[0] && IW1[1] != IW2[1])
{
iw1[0] = IW1[0] * 72.0f / 1016.0f;
iw1[1] = IW1[1] * 72.0f / 1016.0f;
iw2[0] = IW2[0] * 72.0f / 1016.0f;
iw2[1] = IW2[1] * 72.0f / 1016.0f;
printf("initclip MP %.3f %.3f MO %.3f %.3f LI %.3f %.3f LI %.3f %.3f LI CP clip\n",
iw1[0], iw1[1], iw1[0], iw2[1], iw2[0], iw2[1], iw2[0], iw1[1]);
}
}
/*
+5 -2
Ver Arquivo
@@ -380,8 +380,11 @@ PE_polyline_encoded(int num_params, /* I - Number of parameters */
break;
case ':' : /* Select pen */
s ++;
temp = (int)decode_number(&s, base_bits, 1.0);
Outputf("P%d W%d\n", temp, temp);
PenNumber = (int)decode_number(&s, base_bits, 1.0);
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],
Pens[PenNumber].rgb[PenNumber], Pens[PenNumber].rgb[2],
Pens[PenNumber].width * PenScaling);
break;
case '<' : /* Next coords are a move-to */
draw = 0;
+38 -2
Ver Arquivo
@@ -52,6 +52,31 @@ typedef struct
#define PARAM_STRING 2
/*
* Font information...
*/
typedef struct
{
int typeface, /* Typeface number */
posture, /* Posture number */
weight; /* Weight number */
float height; /* Height/size of font */
float x, y; /* X and Y direction/scaling */
} font_t;
/*
* Pen information...
*/
typedef struct
{
float rgb[3]; /* Pen color */
float width; /* Pen width */
} pen_t;
/*
* Globals...
*/
@@ -66,6 +91,8 @@ typedef struct
# define VALUE2(x,y)
#endif /* _HPGL_MAIN_C_ */
VAR ppd_file_t *PPD VALUE(NULL); /* PPD file */
VAR float P1[2], /* Lower-lefthand physical limit */
P2[2], /* Upper-righthand physical limit */
IW1[2], /* Window lower-lefthand limit */
@@ -78,9 +105,13 @@ VAR float Transform[2][3]; /* Transform matrix */
VAR int PageRotation VALUE(0); /* Page/plot rotation */
VAR char StringTerminator VALUE('\003'); /* Terminator for labels */
VAR font_t StandardFont, /* Standard font */
AlternateFont; /* Alternate font */
VAR float PenPosition[2] VALUE2(0.0f, 0.0f),
/* Current pen position */
PenScaling VALUE(1.0f); /* Pen width scaling factor */
PenScaling VALUE(1.0f), /* Pen width scaling factor */
PenWidth VALUE(1.0f); /* Default pen width */
VAR pen_t Pens[1024]; /* State of each pen */
VAR int PenMotion VALUE(0), /* 0 = absolute, 1 = relative */
PenNumber VALUE(1), /* Current pen number */
PenCount VALUE(8), /* Number of pens */
@@ -107,6 +138,11 @@ VAR float ColorRange[3][2] /* Range of color values */
#endif /* _HPGL_MAIN_C_ */
;
VAR int LineCap VALUE(0); /* Line capping */
VAR int LineJoin VALUE(0); /* Line joining */
VAR float MiterLimit VALUE(3.0f); /* Miter limit at joints */
/*
* Prototypes...
*/
@@ -187,7 +223,7 @@ extern void UL_user_line_type(int num_params, param_t *params);
extern void WU_width_units(int num_params, param_t *params);
/* hpgl-prolog.c */
extern void OutputProlog(char *title, char *user, int shading, float penwidth);
extern void OutputProlog(char *title, char *user, int shading);
extern void OutputTrailer(void);
extern int Outputf(const char *format, ...);
+9 -37
Ver Arquivo
@@ -322,8 +322,7 @@ ImageRGBToCMYK(const ib_t *in, /* I - Input pixels */
{
int c, m, y, k, /* CMYK values */
km, /* Maximum K value */
diff, /* Color differences */
divk; /* Color divisor */
diff; /* Color differences */
int cc, cm, cy; /* Calibrated CMY values */
@@ -338,24 +337,9 @@ ImageRGBToCMYK(const ib_t *in, /* I - Input pixels */
if ((km = max(c, max(m, y))) > k)
k = k * k / km;
if (k == 255)
c = m = y = 0;
else if (k > 0)
{
divk = 255 - k;
c = 255 * (c - k) / divk;
m = 255 * (m - k) / divk;
y = 255 * (y - k) / divk;
if (c > 255)
c = 255;
if (m > 255)
m = 255;
if (y > 255)
y = 255;
}
c -= k;
m -= k;
y -= k;
cc = (ImageMatrix[0][0][c] +
ImageMatrix[0][1][m] +
@@ -400,24 +384,12 @@ ImageRGBToCMYK(const ib_t *in, /* I - Input pixels */
y = 255 - *in++;
k = min(c, min(m, y));
if (k == 255)
c = m = y = 0;
else if (k > 0)
{
divk = 255 - k;
c = 255 * (c - k) / divk;
m = 255 * (m - k) / divk;
y = 255 * (y - k) / divk;
if ((km = max(c, max(m, y))) > k)
k = k * k / km;
if (c > 255)
c = 255;
if (m > 255)
m = 255;
if (y > 255)
y = 255;
}
c -= k;
m -= k;
y -= k;
*out++ = c;
*out++ = m;
+2 -2
Ver Arquivo
@@ -135,8 +135,8 @@ ImageReadTIFF(image_t *img, /* IO - Image */
}
else
{
img->xppi = xres * 0.0254;
img->yppi = yres * 0.0254;
img->xppi = 128;
img->yppi = 128;
}
}
+20
Ver Arquivo
@@ -664,12 +664,32 @@ get_tile(image_t *img, /* I - Image */
}
if (ic == img->first)
{
if (ic->next != NULL)
ic->next->prev = NULL;
img->first = ic->next;
ic->next = NULL;
ic->prev = NULL;
}
else if (img->first == NULL)
img->first = ic;
if (ic != img->last)
{
/*
* Remove the cache entry from the list...
*/
if (ic->prev != NULL)
ic->prev->next = ic->next;
if (ic->next != NULL)
ic->next->prev = ic->prev;
/*
* And add it to the end...
*/
if (img->last != NULL)
img->last->next = ic;
+81 -7
Ver Arquivo
@@ -68,7 +68,9 @@ main(int argc, /* I - Number of command-line arguments */
xinches, /* Total size in inches */
yinches;
float xsize, /* Total size in points */
ysize;
ysize,
xsize2,
ysize2;
int xpages, /* # x pages */
ypages, /* # y pages */
xpage, /* Current x page */
@@ -176,12 +178,12 @@ main(int argc, /* I - Number of command-line arguments */
* Scale as necessary...
*/
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
if (zoom == 0.0 && ppi == 0)
ppi = img->xppi;
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
if (ppi > 0)
{
/*
@@ -190,6 +192,33 @@ main(int argc, /* I - Number of command-line arguments */
xinches = (float)img->xsize / (float)ppi;
yinches = (float)img->ysize / (float)ppi;
/*
* Rotate the image if it will fit landscape but not portrait...
*/
if ((xinches > xprint || yinches > yprint) &&
xinches <= yprint && yinches <= xprint)
{
/*
* Rotate the image as needed...
*/
Orientation = (Orientation + 1) & 3;
xsize = yprint;
yprint = xprint;
xprint = xsize;
xsize = PageLeft;
PageLeft = PageBottom;
PageBottom = PageWidth - PageRight;
PageRight = PageTop;
PageTop = PageLength - xsize;
xsize = PageWidth;
PageWidth = PageLength;
PageLength = xsize;
}
}
else
{
@@ -206,8 +235,52 @@ main(int argc, /* I - Number of command-line arguments */
xsize = ysize * img->xsize / img->ysize;
}
xinches = xsize;
yinches = ysize;
xsize2 = yprint * zoom;
ysize2 = xsize2 * img->ysize / img->xsize;
if (ysize2 > (xprint * zoom))
{
ysize2 = xprint * zoom;
xsize2 = ysize2 * img->xsize / img->ysize;
}
/*
* Choose the rotation with the largest area, but prefer
* portrait if they are equal...
*/
if ((xsize * ysize) < (xsize2 * xsize2))
{
/*
* Do landscape orientation...
*/
Orientation = 1;
xinches = xsize2;
yinches = ysize2;
xprint = (PageTop - PageBottom) / 72.0;
yprint = (PageRight - PageLeft) / 72.0;
xsize = PageLeft;
PageLeft = PageBottom;
PageBottom = PageWidth - PageRight;
PageRight = PageTop;
PageTop = PageLength - xsize;
xsize = PageWidth;
PageWidth = PageLength;
PageLength = xsize;
}
else
{
/*
* Do portrait orientation...
*/
Orientation = 0;
xinches = xsize;
yinches = ysize;
}
}
xpages = ceil(xinches / xprint);
@@ -469,7 +542,8 @@ ps_ascii85(ib_t *data, /* I - Data to print */
{
if (length > 0)
{
for (b = 0, i = length; i > 0; b = (b << 8) | data[0], data ++, i --);
memset(data + length, 0, 4 - length);
b = (((((data[0] << 8) | data[1]) << 8) | data[2]) << 8) | data[3];
c[4] = (b % 85) + '!';
b /= 85;
+141 -18
Ver Arquivo
@@ -150,7 +150,9 @@ main(int argc, /* I - Number of command-line arguments */
xinches, /* Total size in inches */
yinches;
float xsize, /* Total size in points */
ysize;
ysize,
xsize2,
ysize2;
int xpages, /* # x pages */
ypages, /* # y pages */
xpage, /* Current x page */
@@ -165,6 +167,7 @@ main(int argc, /* I - Number of command-line arguments */
char *resolution, /* Output resolution */
*media_type; /* Media type */
ppd_profile_t *profile; /* Color profile */
ppd_profile_t userprofile; /* User-specified profile */
cups_raster_t *ras; /* Raster stream */
cups_page_header_t header; /* Page header */
int num_options; /* Number of print options */
@@ -274,6 +277,12 @@ main(int argc, /* I - Number of command-line arguments */
if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL)
exec_choice(&header, choice);
if ((choice = ppdFindMarkedChoice(ppd, "CutMedia")) != NULL)
exec_choice(&header, choice);
if ((choice = ppdFindMarkedChoice(ppd, "ESPFinishing")) != NULL)
exec_choice(&header, choice);
if ((choice = ppdFindMarkedChoice(ppd, "InputSlot")) != NULL)
exec_choice(&header, choice);
@@ -386,7 +395,31 @@ main(int argc, /* I - Number of command-line arguments */
* Find a color profile matching the current options...
*/
if (ppd != NULL)
if ((val = cupsGetOption("profile", num_options, options)) != NULL)
{
profile = &userprofile;
sscanf(val, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f",
&(userprofile.density), &(userprofile.gamma),
userprofile.matrix[0] + 0, userprofile.matrix[0] + 1,
userprofile.matrix[0] + 2,
userprofile.matrix[1] + 0, userprofile.matrix[1] + 1,
userprofile.matrix[1] + 2,
userprofile.matrix[2] + 0, userprofile.matrix[2] + 1,
userprofile.matrix[2] + 2);
userprofile.density *= 0.001f;
userprofile.gamma *= 0.001f;
userprofile.matrix[0][0] *= 0.001f;
userprofile.matrix[0][1] *= 0.001f;
userprofile.matrix[0][2] *= 0.001f;
userprofile.matrix[1][0] *= 0.001f;
userprofile.matrix[1][1] *= 0.001f;
userprofile.matrix[1][2] *= 0.001f;
userprofile.matrix[2][0] *= 0.001f;
userprofile.matrix[2][1] *= 0.001f;
userprofile.matrix[2][2] *= 0.001f;
}
else if (ppd != NULL)
{
fprintf(stderr, "DEBUG: Searching for profile \"%s/%s\"...\n",
resolution, media_type);
@@ -412,10 +445,13 @@ main(int argc, /* I - Number of command-line arguments */
* If we found a color profile, use it!
*/
if (i < ppd->num_profiles)
ImageSetProfile(profile->density, profile->gamma, profile->matrix);
if (i >= ppd->num_profiles)
profile = NULL;
}
if (profile)
ImageSetProfile(profile->density, profile->gamma, profile->matrix);
/*
* Create a gamma/brightness LUT...
*/
@@ -439,17 +475,6 @@ main(int argc, /* I - Number of command-line arguments */
* Scale as necessary...
*/
if (Orientation & 1)
{
xprint = (PageTop - PageBottom) / 72.0;
yprint = (PageRight - PageLeft) / 72.0;
}
else
{
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
}
if (zoom == 0.0 && ppi == 0)
ppi = img->xppi;
@@ -459,8 +484,36 @@ main(int argc, /* I - Number of command-line arguments */
* Scale the image as neccesary to match the desired pixels-per-inch.
*/
if (Orientation & 1)
{
xprint = (PageTop - PageBottom) / 72.0;
yprint = (PageRight - PageLeft) / 72.0;
}
else
{
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
}
xinches = (float)img->xsize / (float)ppi;
yinches = (float)img->ysize / (float)ppi;
/*
* Rotate the image if it will fit landscape but not portrait...
*/
if ((xinches > xprint || yinches > yprint) &&
xinches <= yprint && yinches <= xprint)
{
/*
* Rotate the image as needed...
*/
Orientation = (Orientation + 1) & 3;
xsize = yprint;
yprint = xprint;
xprint = xsize;
}
}
else
{
@@ -468,6 +521,9 @@ main(int argc, /* I - Number of command-line arguments */
* Scale percentage of page size...
*/
xprint = (PageRight - PageLeft) / 72.0;
yprint = (PageTop - PageBottom) / 72.0;
xsize = xprint * zoom;
ysize = xsize * img->ysize / img->xsize;
@@ -477,8 +533,42 @@ main(int argc, /* I - Number of command-line arguments */
xsize = ysize * img->xsize / img->ysize;
}
xinches = xsize;
yinches = ysize;
xsize2 = yprint * zoom;
ysize2 = xsize2 * img->ysize / img->xsize;
if (ysize2 > (xprint * zoom))
{
ysize2 = xprint * zoom;
xsize2 = ysize2 * img->xsize / img->ysize;
}
/*
* Choose the rotation with the largest area, but prefer
* portrait if they are equal...
*/
if ((xsize * ysize) < (xsize2 * xsize2))
{
/*
* Do landscape orientation...
*/
Orientation = 1;
xinches = xsize2;
yinches = ysize2;
xprint = (PageTop - PageBottom) / 72.0;
yprint = (PageRight - PageLeft) / 72.0;
}
else
{
/*
* Do portrait orientation...
*/
Orientation = 0;
xinches = xsize;
yinches = ysize;
}
}
xpages = ceil(xinches / xprint);
@@ -517,6 +607,37 @@ main(int argc, /* I - Number of command-line arguments */
header.PageSize[1] = PageLength;
}
header.Margins[0] = PageLeft;
header.Margins[1] = PageBottom;
switch (Orientation)
{
case 0 :
header.ImagingBoundingBox[0] = PageLeft;
header.ImagingBoundingBox[1] = PageBottom;
header.ImagingBoundingBox[2] = PageLeft + xprint * 72;
header.ImagingBoundingBox[3] = PageBottom + yprint * 72;
break;
case 1 :
header.ImagingBoundingBox[0] = PageRight - yprint * 72;
header.ImagingBoundingBox[1] = PageBottom;
header.ImagingBoundingBox[2] = PageRight;
header.ImagingBoundingBox[3] = PageBottom + xprint * 72;
break;
case 2 :
header.ImagingBoundingBox[0] = PageRight - xprint * 72;
header.ImagingBoundingBox[1] = PageTop - yprint * 72;
header.ImagingBoundingBox[2] = PageRight;
header.ImagingBoundingBox[3] = PageTop;
break;
case 3 :
header.ImagingBoundingBox[0] = PageLeft;
header.ImagingBoundingBox[1] = PageTop - xprint * 72;
header.ImagingBoundingBox[2] = PageLeft + yprint * 72 + 0.5f;
header.ImagingBoundingBox[3] = PageTop;
break;
}
switch (header.cupsColorOrder)
{
case CUPS_ORDER_CHUNKED :
@@ -945,6 +1066,8 @@ exec_choice(cups_page_header_t *header, /* I - Page header */
header->cupsRowFeed = atoi(value);
else if (strcmp(name, "cupsRowStep") == 0)
header->cupsRowStep = atoi(value);
else if (strcmp(name, "CutMedia") == 0)
header->CutMedia = (cups_cut_t)atoi(value);
else if (strcmp(name, "HWResolution") == 0)
sscanf(value, "%d%d", header->HWResolution + 0, header->HWResolution + 1);
else if (strcmp(name, "cupsMediaPosition") == 0)
@@ -990,7 +1113,7 @@ format_CMY(cups_page_header_t *header, /* I - Page header */
bitoffset = 0;
ptr = row + bitoffset / 8;
bandwidth = header->cupsBytesPerLine / 4;
bandwidth = header->cupsBytesPerLine / 3;
switch (header->cupsColorOrder)
{
+106 -38
Ver Arquivo
@@ -98,6 +98,9 @@ main(int argc, /* I - Number of command-line arguments */
int nbytes, /* Number of bytes read */
tbytes; /* Total bytes to read for binary data */
int page; /* Current page sequence number */
int page_count; /* Page count for NUp */
int subpage; /* Sub-page number */
int copy; /* Current copy */
if (argc < 6 || argc > 7)
@@ -337,7 +340,7 @@ main(int argc, /* I - Number of command-line arguments */
if (!sloworder)
{
if ((NumPages % NUp) == 0)
if ((NumPages & (NUp - 1)) == 0)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", page, Copies);
@@ -375,6 +378,8 @@ main(int argc, /* I - Number of command-line arguments */
tbytes -= nbytes;
}
}
else if (strcmp(line, "%%Trailer") == 0 && level == 0)
break;
else
{
if (!sloworder)
@@ -392,7 +397,15 @@ main(int argc, /* I - Number of command-line arguments */
}
if (!sloworder)
end_nup((NumPages + NUp - 1) & (NUp - 1));
{
end_nup(NumPages - 1);
if (NumPages & (NUp - 1))
{
start_nup(NUp - 1);
end_nup(NUp - 1);
}
}
if (slowcollate || sloworder)
{
@@ -407,7 +420,7 @@ main(int argc, /* I - Number of command-line arguments */
for (number = 0; number < NumPages; number ++)
{
if ((number % NUp) == 0)
if ((number & (NUp - 1)) == 0)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d 1\n", page);
@@ -422,37 +435,65 @@ main(int argc, /* I - Number of command-line arguments */
end_nup(number);
}
if (NumPages & (NUp - 1))
{
start_nup(NUp - 1);
end_nup(NUp - 1);
}
Copies --;
}
}
else
{
page_count = (NumPages + NUp - 1) / NUp;
copy = 0;
do
{
for (number = NumPages - 1; number >= 0; number --)
for (page = page_count - 1; page >= 0; page --)
{
if ((number % NUp) == 0)
{
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", page,
slowcollate ? 1 : Copies);
if (ppd == NULL || ppd->num_filters == 0)
fprintf(stderr, "PAGE: %d %d\n", page + 1,
slowcollate ? 1 : Copies);
printf("%%%%Page: %d %d\n", page, page);
page ++;
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
if (slowcollate)
printf("%%%%Page: %d %d\n", page + 1,
page_count - page + copy * page_count);
else
printf("%%%%Page: %d %d\n", page + 1, page_count - page);
ppdEmit(ppd, stdout, PPD_ORDER_PAGE);
for (subpage = 0, number = page * NUp;
subpage < NUp && number < NumPages;
subpage ++, number ++)
{
start_nup(number);
fseek(temp, Pages[number], SEEK_SET);
copy_bytes(temp, Pages[number + 1] - Pages[number]);
end_nup(number);
}
start_nup(NumPages - 1 - number);
fseek(temp, Pages[number], SEEK_SET);
copy_bytes(temp, Pages[number + 1] - Pages[number]);
end_nup(NumPages - 1 - number);
if (number & (NUp - 1))
{
start_nup(NUp - 1);
end_nup(NUp - 1);
}
}
Copies --;
copy ++;
}
while (Copies > 0 || !slowcollate);
while (copy < Copies && slowcollate);
}
}
/*
* Copy the trailer, if any...
*/
while ((nbytes = fread(line, 1, sizeof(line), fp)) > 0)
fwrite(line, 1, nbytes, stdout);
}
else
{
@@ -599,7 +640,12 @@ copy_bytes(FILE *fp, /* I - File to read from */
while (nleft > 0 || length == 0)
{
if ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) < 1)
if (nleft > sizeof(buffer))
nbytes = sizeof(buffer);
else
nbytes = nleft;
if ((nbytes = fread(buffer, 1, nbytes, fp)) < 1)
return;
nleft -= nbytes;
@@ -617,7 +663,7 @@ static void
end_nup(int number) /* I - Page number */
{
if (Flip || Orientation || NUp > 1)
puts("grestoreall");
puts("ESPsave restore");
switch (NUp)
{
@@ -702,14 +748,18 @@ start_nup(int number) /* I - Page number */
int x, y; /* Relative position of subpage */
float w, l, /* Width and length of subpage */
tx, ty; /* Translation values for subpage */
float pw, pl; /* Printable width and length of full page */
if (Flip || Orientation || NUp > 1)
puts("gsave");
puts("/ESPsave save def");
if (Flip)
printf("%.0f 0 translate -1 1 scale\n", PageWidth);
pw = PageRight - PageLeft;
pl = PageTop - PageBottom;
switch (Orientation)
{
case 1 : /* Landscape */
@@ -731,44 +781,49 @@ start_nup(int number) /* I - Page number */
if (Orientation & 1)
{
x = 1 - x;
w = PageLength;
w = pl;
l = w * PageLength / PageWidth;
if (l > (PageWidth * 0.5))
if (l > (pw * 0.5))
{
l = PageWidth * 0.5;
l = pw * 0.5;
w = l * PageWidth / PageLength;
}
tx = PageWidth * 0.5 - l;
ty = (PageLength - w) * 0.5;
tx = pw * 0.5 - l;
ty = (pl - w) * 0.5;
}
else
{
l = PageWidth;
l = pw;
w = l * PageWidth / PageLength;
if (w > (PageLength * 0.5))
if (w > (pl * 0.5))
{
w = PageLength * 0.5;
w = pl * 0.5;
l = w * PageLength / PageWidth;
}
tx = PageLength * 0.5 - w;
ty = (PageWidth - l) * 0.5;
tx = pl * 0.5 - w;
ty = (pw - l) * 0.5;
}
if (Duplex && (number & 2))
printf("%.0f %.0f translate\n", PageWidth - PageRight, PageBottom);
else
printf("%.0f %.0f translate\n", PageLeft, PageBottom);
if (Orientation & 1)
{
printf("0 %.0f translate -90 rotate\n", PageLength);
printf("0 %.0f translate -90 rotate\n", pl);
printf("%.0f %.0f translate %.3f %.3f scale\n",
ty, tx + l * x, w / PageWidth, l / PageLength);
ty, tx + l * x, w / pw, l / pl);
}
else
{
printf("%.0f 0 translate 90 rotate\n", PageWidth);
printf("%.0f 0 translate 90 rotate\n", pw);
printf("%.0f %.0f translate %.3f %.3f scale\n",
tx + w * x, ty, w / PageWidth, l / PageLength);
tx + w * x, ty, w / pw, l / pl);
}
printf("newpath\n"
@@ -783,10 +838,23 @@ start_nup(int number) /* I - Page number */
case 4 :
x = number & 1;
y = 1 - ((number & 2) != 0);
w = PageWidth * 0.5;
l = PageLength * 0.5;
printf("%.0f %.0f translate 0.5 0.5 scale\n", x * w, y * l);
w = pw * 0.5;
l = w * PageLength / PageWidth;
if (l > (pl * 0.5))
{
l = pl * 0.5;
w = l * PageWidth / PageLength;
}
if (Duplex && (number & 4))
printf("%.0f %.0f translate\n", PageWidth - PageRight, PageBottom);
else
printf("%.0f %.0f translate\n", PageLeft, PageBottom);
printf("%.0f %.0f translate %.3f %.3f scale\n", x * w, y * l,
w / PageWidth, l / PageLength);
printf("newpath\n"
"0 0 moveto\n"
"%.0f 0 lineto\n"
+1 -1
Ver Arquivo
@@ -28,7 +28,7 @@ include ../Makedefs
# Man pages...
#
MAN1 = backend.1 filter.1 lprm.1 lpr.1 lpstat.1 lp.1
MAN1 = backend.1 filter.1 lp.1 lpq.1 lprm.1 lpr.1 lpstat.1
MAN5 = classes.conf.5 cupsd.conf.5 mime.convs.5 mime.types.5 \
printers.conf.5
MAN8 = accept.8 cupsd.8 enable.8 lpadmin.8 lpc.8
+4 -4
Ver Arquivo
@@ -1,5 +1,5 @@
.\"
.\" "$Id: cupsd.8 680 1999-09-22 20:06:43Z mike $"
.\" "$Id: cupsd.8 814 1999-12-14 20:46:19Z mike $"
.\"
.\" cupsd man page for the Common UNIX Printing System (CUPS).
.\"
@@ -25,13 +25,13 @@
.SH NAME
cupsd \- common unix printing system daemon
.SH SYNOPSIS
.B cups
.B cupsd
.I [ \-c config-file ]
.SH DESCRIPTION
\fIcupsd\fR is the scheduler for the Common UNIX Printing System. It implements
a printing system based upon the Internet Printing Protocol, version 1.0. If
no options are specified on the command-line then the default configuration file
(usually \fI/var/cups/conf/cupsf.conf\fR) will be used.
(usually \fI/var/cups/conf/cupsd.conf\fR) will be used.
.SH COMPATIBILITY
\fIcupsd\fR implements all of the required IPP/1.0 attributes and operations.
It also implements optional operation set 1 and several CUPS-specific
@@ -44,5 +44,5 @@ CUPS Interface Design Description
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: cupsd.8 680 1999-09-22 20:06:43Z mike $".
.\" End of "$Id: cupsd.8 814 1999-12-14 20:46:19Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
+6 -6
Ver Arquivo
@@ -1,5 +1,5 @@
.\"
.\" "$Id: enable.8 680 1999-09-22 20:06:43Z mike $"
.\" "$Id: enable.8 814 1999-12-14 20:46:19Z mike $"
.\"
.\" enable/disable man page for the Common UNIX Printing System (CUPS).
.\"
@@ -23,17 +23,17 @@
.\"
.TH enable 8 "Common UNIX Printing System" "22 September 1999" "Easy Software Products"
.SH NAME
disable, disable \- stop/start printers and classes
disable, enable \- stop/start printers and classes
.SH SYNOPSIS
.B enable
destination(s)
.br
.B disable
[ \-c ] [ -h
.I server
] [ \-r [
.I reason
] ] destination(s)
.br
.B enable
destination(s)
.SH DESCRIPTION
\fIenable\fR starts the named printers or classes.
.LP
@@ -60,5 +60,5 @@ CUPS Software Administrators Manual
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: enable.8 680 1999-09-22 20:06:43Z mike $".
.\" End of "$Id: enable.8 814 1999-12-14 20:46:19Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
+3 -3
Ver Arquivo
@@ -1,5 +1,5 @@
.\"
.\" "$Id: lp.1 660 1999-09-09 14:58:01Z mike $"
.\" "$Id: lp.1 814 1999-12-14 20:46:19Z mike $"
.\"
.\" lp/cancel man page for the Common UNIX Printing System (CUPS).
.\"
@@ -60,7 +60,7 @@ cancel \- cancel jobs
\fBcancel\fR cancels existing print jobs. The \fI-a\fR option will remove
all jobs from the specified destination.
.SH OPTIONS
The following options are recognized by \fBlpr\fR:
The following options are recognized by \fBlp\fR:
.TP 5
\-d \fIdestination\fR
.br
@@ -107,5 +107,5 @@ CUPS Software Users Manual
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: lp.1 660 1999-09-09 14:58:01Z mike $".
.\" End of "$Id: lp.1 814 1999-12-14 20:46:19Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
+52
Ver Arquivo
@@ -0,0 +1,52 @@
.\"
.\" "$Id: lpq.1 797 1999-12-07 19:04:57Z mike $"
.\"
.\" lpq man page for the Common UNIX Printing System (CUPS).
.\"
.\" Copyright 1997-1999 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" property of Easy Software Products and are protected by Federal
.\" copyright law. Distribution and use rights are outlined in the file
.\" "LICENSE.txt" which should have been included with this file. If this
.\" file is missing or damaged please contact Easy Software Products
.\" at:
.\"
.\" Attn: CUPS Licensing Information
.\" Easy Software Products
.\" 44141 Airport View Drive, Suite 204
.\" Hollywood, Maryland 20636-3111 USA
.\"
.\" Voice: (301) 373-9603
.\" EMail: cups-info@cups.org
.\" WWW: http://www.cups.org
.\"
.TH lpq 1 "Common UNIX Printing System" "7 December 1999" "Easy Software Products"
.SH NAME
lpq \- show printer queue status
.SH SYNOPSIS
.B lpq
[ \-P
.I dest
] [ \-l ] [
.I +interval
]
.SH DESCRIPTION
\fIlpq\fR shows the current print queue status on the named printer.
Jobs queued on the default destination will be shown if no printer or
class is specified on the command-line.
.LP
The \fIinterval\fR option allows you to continuously report the jobs
in the queue until the queue is empty; the list of jobs is show one
every \fIinterval\fR seconds.
.LP
The \fI-l\fR option requests a more verbose reporting format.
.SH SEE ALSO
cancel(1), lp(1), lpr(1), lprm(1), lpstat(1)
.br
CUPS Software Users Manual
.SH COPYRIGHT
Copyright 1993-1999 by Easy Software Products, All Rights Reserved.
.\"
.\" End of "$Id: lpq.1 797 1999-12-07 19:04:57Z mike $".
.\"
BIN
Ver Arquivo
Arquivo binário não exibido.
+82 -178
Ver Arquivo
@@ -62,6 +62,13 @@
#include <math.h>
/*
* Globals...
*/
extern const char *cupsProfile;
/*
* Macros...
*/
@@ -579,8 +586,7 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
{
gx_color_index i; /* Temporary index */
gx_color_value ic, im, iy, ik, mk; /* Integral CMYK values */
float divk, /* Black "divisor" */
diff; /* Average color difference */
float diff; /* Average color difference */
int tc, tm, ty, tk; /* Temporary color values */
@@ -696,26 +702,9 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
break;
case CUPS_CSPACE_CMY :
if (cups->header.cupsBitsPerColor == 1)
{
ic = lut_rgb_color[gx_max_color_value - r];
im = lut_rgb_color[gx_max_color_value - g];
iy = lut_rgb_color[gx_max_color_value - b];
}
else
{
ic = gx_max_color_value - r;
im = gx_max_color_value - g;
iy = gx_max_color_value - b;
ik = min(ic, min(im, iy));
ic = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - g / 4) /
(float)gx_max_color_value * (float)(ic - ik)) + ik];
im = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - b / 4) /
(float)gx_max_color_value * (float)(im - ik)) + ik];
iy = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - r / 4) /
(float)gx_max_color_value * (float)(iy - ik)) + ik];
}
ic = lut_rgb_color[gx_max_color_value - r];
im = lut_rgb_color[gx_max_color_value - g];
iy = lut_rgb_color[gx_max_color_value - b];
switch (cups->header.cupsBitsPerColor)
{
@@ -735,26 +724,9 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
break;
case CUPS_CSPACE_YMC :
if (cups->header.cupsBitsPerColor == 1)
{
ic = lut_rgb_color[gx_max_color_value - r];
im = lut_rgb_color[gx_max_color_value - g];
iy = lut_rgb_color[gx_max_color_value - b];
}
else
{
ic = gx_max_color_value - r;
im = gx_max_color_value - g;
iy = gx_max_color_value - b;
ik = min(ic, min(im, iy));
ic = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - g / 4) /
(float)gx_max_color_value * (float)(ic - ik)) + ik];
im = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - b / 4) /
(float)gx_max_color_value * (float)(im - ik)) + ik];
iy = lut_rgb_color[(gx_color_value)((float)(gx_max_color_value - r / 4) /
(float)gx_max_color_value * (float)(iy - ik)) + ik];
}
ic = lut_rgb_color[gx_max_color_value - r];
im = lut_rgb_color[gx_max_color_value - g];
iy = lut_rgb_color[gx_max_color_value - b];
switch (cups->header.cupsBitsPerColor)
{
@@ -783,44 +755,10 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
if (mk > ik)
ik = ik * ik / mk;
if (ik == gx_max_color_value)
{
ik = lut_rgb_color[ik];
ic = 0;
im = 0;
iy = 0;
}
else if (cups->header.cupsBitsPerColor == 1)
{
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
}
else
{
divk = (float)gx_max_color_value / (float)(gx_max_color_value - ik);
tc = (float)(ic - ik) * divk;
tm = (float)(im - ik) * divk;
ty = (float)(iy - ik) * divk;
if (tc >= gx_max_color_value)
ic = lut_rgb_color[gx_max_color_value];
else
ic = lut_rgb_color[tc];
if (tm >= gx_max_color_value)
im = lut_rgb_color[gx_max_color_value];
else
im = lut_rgb_color[tm];
if (ty >= gx_max_color_value)
iy = lut_rgb_color[gx_max_color_value];
else
iy = lut_rgb_color[ty];
ik = lut_rgb_color[ik];
}
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
switch (cups->header.cupsBitsPerColor)
{
@@ -855,44 +793,10 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
if (mk > ik)
ik = ik * ik / mk;
if (ik == gx_max_color_value)
{
ik = lut_rgb_color[ik];
ic = 0;
im = 0;
iy = 0;
}
else if (cups->header.cupsBitsPerColor == 1)
{
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
}
else
{
divk = (float)gx_max_color_value / (float)(gx_max_color_value - ik);
tc = (float)(ic - ik) * divk;
tm = (float)(im - ik) * divk;
ty = (float)(iy - ik) * divk;
if (tc >= gx_max_color_value)
ic = lut_rgb_color[gx_max_color_value];
else
ic = lut_rgb_color[tc];
if (tm >= gx_max_color_value)
im = lut_rgb_color[gx_max_color_value];
else
im = lut_rgb_color[tm];
if (ty >= gx_max_color_value)
iy = lut_rgb_color[gx_max_color_value];
else
iy = lut_rgb_color[ty];
ik = lut_rgb_color[ik];
}
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
switch (cups->header.cupsBitsPerColor)
{
@@ -952,44 +856,10 @@ cups_map_rgb_color(gx_device *pdev, /* I - Device info */
if (mk > ik)
ik = ik * ik / mk;
if (ik == gx_max_color_value)
{
ik = lut_rgb_color[ik];
ic = 0;
im = 0;
iy = 0;
}
else if (cups->header.cupsBitsPerColor == 1)
{
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
}
else
{
divk = (float)gx_max_color_value / (float)(gx_max_color_value - ik);
tc = (float)(ic - ik) * divk;
tm = (float)(im - ik) * divk;
ty = (float)(iy - ik) * divk;
if (tc >= gx_max_color_value)
ic = lut_rgb_color[gx_max_color_value];
else
ic = lut_rgb_color[tc];
if (tm >= gx_max_color_value)
im = lut_rgb_color[gx_max_color_value];
else
im = lut_rgb_color[tm];
if (ty >= gx_max_color_value)
iy = lut_rgb_color[gx_max_color_value];
else
iy = lut_rgb_color[ty];
ik = lut_rgb_color[ik];
}
ic = lut_rgb_color[ic - ik];
im = lut_rgb_color[im - ik];
iy = lut_rgb_color[iy - ik];
ik = lut_rgb_color[ik];
switch (cups->header.cupsBitsPerColor)
{
@@ -1441,6 +1311,7 @@ cups_set_color_info(gx_device *pdev) /* I - Device info */
{
int i, j, k; /* Looping vars */
float d, g; /* Density and gamma correction */
float m[3][3]; /* Color correction matrix */
char resolution[41]; /* Resolution string */
ppd_profile_t *profile; /* Color profile information */
@@ -1548,7 +1419,33 @@ cups_set_color_info(gx_device *pdev) /* I - Device info */
cupsHaveProfile = 0;
if (cups->ppd != NULL && cups->header.cupsBitsPerColor == 8)
if (cupsProfile && cups->header.cupsBitsPerColor == 8)
{
fprintf(stderr, "DEBUG: Using user-defined profile \"%s\"...\n", cupsProfile);
if (sscanf(cupsProfile, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f", &d, &g,
m[0] + 0, m[0] + 1, m[0] + 2,
m[1] + 0, m[1] + 1, m[1] + 2,
m[2] + 0, m[2] + 1, m[2] + 2) != 11)
fputs("DEBUG: User-defined profile does not contain 11 integers!\n", stderr);
else
{
cupsHaveProfile = 1;
d *= 0.001f;
g *= 0.001f;
m[0][0] *= 0.001f;
m[0][1] *= 0.001f;
m[0][2] *= 0.001f;
m[1][0] *= 0.001f;
m[1][1] *= 0.001f;
m[1][2] *= 0.001f;
m[2][0] *= 0.001f;
m[2][1] *= 0.001f;
m[2][2] *= 0.001f;
}
}
else if (cups->ppd != NULL && cups->header.cupsBitsPerColor == 8)
{
/*
* Find the appropriate color profile...
@@ -1581,32 +1478,39 @@ cups_set_color_info(gx_device *pdev) /* I - Device info */
cupsHaveProfile = 1;
for (i = 0; i < 3; i ++)
for (j = 0; j < 3; j ++)
for (k = 0; k <= gx_max_color_value; k ++)
{
cupsMatrix[i][j][k] = (int)((float)k * profile->matrix[i][j] + 0.5);
#ifdef DEBUG
if ((k & 4095) == 0)
fprintf(stderr, "DEBUG: cupsMatrix[%d][%d][%d] = %d\n",
i, j, k, cupsMatrix[i][j][k]);
#endif /* DEBUG */
}
d = profile->density;
g = profile->gamma;
memcpy(m, profile->matrix, sizeof(m));
}
}
if (cupsHaveProfile)
{
for (i = 0; i < 3; i ++)
for (j = 0; j < 3; j ++)
for (k = 0; k <= gx_max_color_value; k ++)
{
cupsMatrix[i][j][k] = (int)((float)k * m[i][j] + 0.5);
for (k = 0; k <= gx_max_color_value; k ++)
{
cupsDensity[k] = (int)((float)gx_max_color_value * d *
pow((float)k / (float)gx_max_color_value, g) +
0.5);
#ifdef DEBUG
if ((k & 4095) == 0)
fprintf(stderr, "DEBUG: cupsDensity[%d] = %d\n", k, cupsDensity[k]);
if ((k & 4095) == 0)
fprintf(stderr, "DEBUG: cupsMatrix[%d][%d][%d] = %d\n",
i, j, k, cupsMatrix[i][j][k]);
#endif /* DEBUG */
}
for (k = 0; k <= gx_max_color_value; k ++)
{
cupsDensity[k] = (int)((float)gx_max_color_value * d *
pow((float)k / (float)gx_max_color_value, g) +
0.5);
#ifdef DEBUG
if ((k & 4095) == 0)
fprintf(stderr, "DEBUG: cupsDensity[%d] = %d\n", k, cupsDensity[k]);
#endif /* DEBUG */
}
}
}
}
+22 -1
Ver Arquivo
@@ -39,18 +39,22 @@
* Include necessary headers...
*/
#include <cups/string.h>
#define bool bool_ /* (maybe not needed) */
#define uchar uchar_
#define uint uint_
#define ushort ushort_
#define ulong ulong_
#include <cups/cups.h>
#include <cups/string.h>
#include <stdlib.h>
#undef bool
#undef uchar
#undef uint
#undef ushort
#undef ulong
#include "ghost.h"
#include "imain.h"
#include "iminst.h"
@@ -59,6 +63,13 @@
#include "store.h"
/*
* Globals...
*/
const char *cupsProfile = NULL;
/*
* Local functions...
*/
@@ -81,6 +92,8 @@ main(int argc, /* I - Number of command-line arguments */
int exit_code; /* Exit code */
ref error_object; /* Error object */
char *content_type; /* CONTENT_TYPE environment variable */
int num_options; /* Number of job options */
cups_option_t *options; /* Job options */
/*
@@ -101,6 +114,14 @@ main(int argc, /* I - Number of command-line arguments */
gs_get_real_stdio(stdfiles);
/*
* Grab any job options...
*/
num_options = cupsParseOptions(argv[5], 0, &options);
cupsProfile = cupsGetOption("profile", num_options, options);
/*
* Initialize basic interpreter stuff and read from the named file or
* from stdin...
+20 -9
Ver Arquivo
@@ -52,7 +52,7 @@
#ifdef HAVE_CRYPT_H
# include <crypt.h>
#endif /* HAVE_CRYPT_H */
#ifdef HAVE_LIBPAM
#if HAVE_LIBPAM
# include <security/pam_appl.h>
#endif /* HAVE_LIBPAM */
@@ -65,7 +65,7 @@ static authmask_t *add_allow(location_t *loc);
static authmask_t *add_deny(location_t *loc);
static int check_auth(unsigned ip, char *name, int namelen,
int num_masks, authmask_t *masks);
#ifdef HAVE_LIBPAM
#if HAVE_LIBPAM
static int pam_func(int, const struct pam_message **,
struct pam_response **, void *);
#endif /* HAVE_LIBPAM */
@@ -270,10 +270,11 @@ IsAuthorized(client_t *con) /* I - Connection */
hostlen; /* Length of hostname */
struct passwd *pw; /* User password data */
struct group *grp; /* Group data */
char *pass; /* Encrypted password */
#ifdef HAVE_SHADOW_H
struct spwd *spw; /* Shadow password data */
#endif /* HAVE_SHADOW_H */
#ifdef HAVE_LIBPAM
#if HAVE_LIBPAM
pam_handle_t *pamh; /* PAM authentication handle */
int pamerr; /* PAM error code */
struct pam_conv pamdata; /* PAM conversation data */
@@ -378,7 +379,7 @@ IsAuthorized(client_t *con) /* I - Connection */
return (HTTP_UNAUTHORIZED);
}
#ifdef HAVE_LIBPAM
#if HAVE_LIBPAM
/*
* Only use PAM to do authentication. This allows MD5 passwords, among
* other things...
@@ -421,7 +422,11 @@ IsAuthorized(client_t *con) /* I - Connection */
endspent();
if (spw == NULL && strcmp(pw->pw_passwd, "x") == 0)
{ /* Don't allow blank passwords! */
LogMessage(LOG_WARN, "IsAuthorized: Username \"%s\" has no shadow password; access denied.",
con->username);
return (HTTP_UNAUTHORIZED); /* No such user or bad shadow file */
}
# ifdef DEBUG
if (spw != NULL)
@@ -447,7 +452,10 @@ IsAuthorized(client_t *con) /* I - Connection */
DEBUG_printf(("IsAuthorized: pw_passwd = %s, crypt = %s\n",
pw->pw_passwd, crypt(con->password, pw->pw_passwd)));
if (strcmp(pw->pw_passwd, crypt(con->password, pw->pw_passwd)) != 0)
pass = crypt(con->password, pw->pw_passwd);
if (pass == NULL ||
strcmp(pw->pw_passwd, crypt(con->password, pw->pw_passwd)) != 0)
{
# ifdef HAVE_SHADOW_H
if (spw != NULL)
@@ -455,7 +463,10 @@ IsAuthorized(client_t *con) /* I - Connection */
DEBUG_printf(("IsAuthorized: sp_pwdp = %s, crypt = %s\n",
spw->sp_pwdp, crypt(con->password, spw->sp_pwdp)));
if (strcmp(spw->sp_pwdp, crypt(con->password, spw->sp_pwdp)) != 0)
pass = crypt(con->password, spw->sp_pwdp);
if (pass == NULL ||
strcmp(spw->sp_pwdp, crypt(con->password, spw->sp_pwdp)) != 0)
return (HTTP_UNAUTHORIZED);
}
else
@@ -466,10 +477,10 @@ IsAuthorized(client_t *con) /* I - Connection */
/*
* OK, the password is good. See if we need normal user access, or group
* access...
* access... (root always matches)
*/
if (best->level == AUTH_USER)
if (best->level == AUTH_USER || strcmp(con->username, "root") == 0)
return (HTTP_OK);
/*
@@ -643,7 +654,7 @@ check_auth(unsigned ip, /* I - Client address */
}
#ifdef HAVE_LIBPAM
#if HAVE_LIBPAM
/*
* 'pam_func()' - PAM conversation function.
*/
+20 -2
Ver Arquivo
@@ -776,6 +776,7 @@ ReadClient(client_t *con) /* I - Client to read from */
snprintf(con->filename, sizeof(con->filename), "%s/requests/XXXXXX", ServerRoot);
con->file = mkstemp(con->filename);
fchmod(con->file, 0640);
fchown(con->file, User, Group);
LogMessage(LOG_DEBUG, "ReadClient() %d REQUEST %s", con->http.fd,
con->filename);
@@ -1226,7 +1227,7 @@ decode_basic_auth(client_t *con) /* I - Client to decode to */
/*
* Decode the string and pull the username and password out...
* Decode the string...
*/
s = con->http.fields[HTTP_FIELD_AUTHORIZATION];
@@ -1239,7 +1240,24 @@ decode_basic_auth(client_t *con) /* I - Client to decode to */
httpDecode64(value, s);
sscanf(value, "%31[^:]:%31s", con->username, con->password);
/*
* Pull the username and password out...
*/
if ((s = strchr(value, ':')) == NULL)
{
LogMessage(LOG_DEBUG, "decode_basic_auth() %d no colon in auth string \"%s\"",
con->http.fd, value);
return;
}
*s++ = '\0';
strncpy(con->username, value, sizeof(con->username) - 1);
con->username[sizeof(con->username) - 1] = '\0';
strncpy(con->password, s, sizeof(con->password) - 1);
con->password[sizeof(con->password) - 1] = '\0';
LogMessage(LOG_DEBUG, "decode_basic_auth() %d username=\"%s\"",
con->http.fd, con->username);
+47 -13
Ver Arquivo
@@ -122,6 +122,8 @@ ReadConfiguration(void)
char directory[1024];/* Configuration directory */
struct rlimit limit; /* Runtime limit */
char *language; /* Language string */
struct passwd *user; /* Default user */
struct group *group; /* Default group */
/*
@@ -194,21 +196,53 @@ ReadConfiguration(void)
* Find the default system group: "sys", "system", or "root"...
*/
if (getgrnam("sys") != NULL)
strcpy(SystemGroup, "sys");
else
{
endgrent();
if (getgrnam("system") != NULL)
strcpy(SystemGroup, "system");
else
strcpy(SystemGroup, "root");
}
group = getgrnam("sys");
endgrent();
User = DEFAULT_UID;
Group = DEFAULT_GID;
if (group != NULL)
{
strcpy(SystemGroup, "sys");
Group = group->gr_gid;
}
else
{
group = getgrnam("system");
endgrent();
if (group != NULL)
{
strcpy(SystemGroup, "system");
Group = group->gr_gid;
}
else
{
group = getgrnam("root");
endgrent();
if (group != NULL)
{
strcpy(SystemGroup, "root");
Group = group->gr_gid;
}
else
{
strcpy(SystemGroup, "unknown");
Group = 0;
}
}
}
/*
* Find the default user...
*/
if ((user = getpwnam("lp")) == NULL)
User = 1; /* Force to a non-priviledged account */
else
User = user->pw_uid;
endpwent();
LogLevel = LOG_ERROR;
HostNameLookups = FALSE;
Timeout = DEFAULT_TIMEOUT;
+2 -2
Ver Arquivo
@@ -65,9 +65,9 @@ VAR char ConfigurationFile[256] VALUE(CUPS_SERVERROOT "/conf/cupsd.conf"),
/* Amount of memory for RIPs */
TempDir[32] VALUE("/var/tmp");
/* Temporary directory */
VAR int User VALUE(DEFAULT_UID),
VAR int User VALUE(1),
/* User ID for server */
Group VALUE(DEFAULT_GID),
Group VALUE(0),
/* Group ID for server */
LogLevel VALUE(LOG_ERROR),
/* Log level */
-22
Ver Arquivo
@@ -34,7 +34,6 @@
#include <time.h>
#include <signal.h>
#include <fcntl.h>
/*#include <bstring.h>*/
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>
@@ -91,27 +90,6 @@
#define DEFAULT_CHARSET "iso-8859-1"
/* Default charset */
#ifdef __sgi
# define DEFAULT_UID 9 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#elif defined(__hpux)
# define DEFAULT_UID 9 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#elif defined(__sun)
# define DEFAULT_UID 71 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#elif defined(__linux)
# define DEFAULT_UID 4 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#elif defined(__osf__)
# define DEFAULT_UID 8 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#else
# define DEFAULT_UID 9 /* Default user ID */
# define DEFAULT_GID 0 /* Default group ID */
#endif /* __sgi */
/*
* Global variable macros...
*/
+2 -2
Ver Arquivo
@@ -521,8 +521,8 @@ SendBrowseList(void)
if (p->browse_time < to)
{
DEBUG_printf(("Printer \"%s\" has timed out (%d < %d...)\n",
p->name, p->browse_time, to));
LogMessage(LOG_INFO, "Remote destination \"%s\" has timed out; deleting it...",
p->name);
DeletePrinter(p);
}
}
+63 -18
Ver Arquivo
@@ -50,6 +50,8 @@
*/
#include "cupsd.h"
#include <pwd.h>
#include <grp.h>
/*
@@ -287,7 +289,12 @@ ProcessIPPRequest(client_t *con) /* I - Client connection */
}
SendHeader(con, HTTP_OK, "application/ipp");
httpPrintf(HTTP(con), "Content-Length: %d\r\n\r\n", ippLength(con->response));
con->http.data_encoding = HTTP_ENCODE_LENGTH;
con->http.data_remaining = ippLength(con->response);
httpPrintf(HTTP(con), "Content-Length: %d\r\n\r\n",
con->http.data_remaining);
FD_SET(con->http.fd, &OutputSet);
}
@@ -324,7 +331,7 @@ accept_jobs(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "accept_jobs: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -396,7 +403,7 @@ add_class(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "add_class: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -621,7 +628,7 @@ add_printer(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "add_printer: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -861,6 +868,16 @@ add_printer(client_t *con, /* I - Client connection */
SetPrinterAttrs(printer);
SaveAllPrinters();
if (printer->job != NULL)
{
/*
* Stop the current job and then restart it below...
*/
StopJob(((job_t *)printer->job)->id);
}
CheckJobs();
LogMessage(LOG_INFO, "New printer \'%s\' added by \'%s\'.", printer->name,
@@ -901,7 +918,7 @@ cancel_all_jobs(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "cancel_all_jobs: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -956,6 +973,7 @@ static void
cancel_job(client_t *con, /* I - Client connection */
ipp_attribute_t *uri) /* I - Job or Printer URI */
{
int i; /* Looping var */
ipp_attribute_t *attr; /* Current attribute */
int jobid; /* Job ID */
char method[HTTP_MAX_URI],
@@ -968,6 +986,8 @@ cancel_job(client_t *con, /* I - Client connection */
/* Resource portion of URI */
int port; /* Port portion of URI */
job_t *job; /* Job information */
struct passwd *user; /* User info */
struct group *group; /* System group info */
DEBUG_printf(("cancel_job(%08x, %08x)\n", con, uri));
@@ -977,11 +997,11 @@ cancel_job(client_t *con, /* I - Client connection */
*/
if (strncmp(con->uri, "/classes/", 9) != 0 &&
strncmp(con->uri, "/job/", 5) != 0 &&
strncmp(con->uri, "/jobs/", 5) != 0 &&
strncmp(con->uri, "/printers/", 10) != 0)
{
LogMessage(LOG_ERROR, "cancel_job: cancel request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -1059,10 +1079,35 @@ cancel_job(client_t *con, /* I - Client connection */
if (strcmp(username, job->username) != 0 && strcmp(username, "root") != 0)
{
LogMessage(LOG_ERROR, "cancel_job: \"%s\" not authorized to delete job id %d owned by \"%s\"!",
username, jobid, job->username);
send_ipp_error(con, IPP_FORBIDDEN);
return;
/*
* Not the owner or root; check to see if the user is a member of the
* system group...
*/
user = getpwnam(username);
endpwent();
group = getgrnam(SystemGroup);
endgrent();
if (group != NULL)
for (i = 0; group->gr_mem[i]; i ++)
if (strcmp(username, group->gr_mem[i]) == 0)
break;
if (user == NULL || group == NULL ||
(group->gr_mem[i] == NULL && group->gr_gid != user->pw_gid))
{
/*
* Username not found, group not found, or user is not part of the
* system group...
*/
LogMessage(LOG_ERROR, "cancel_job: \"%s\" not authorized to delete job id %d owned by \"%s\"!",
username, jobid, job->username);
send_ipp_error(con, IPP_FORBIDDEN);
return;
}
}
/*
@@ -1237,7 +1282,7 @@ delete_printer(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "delete_printer: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -1843,7 +1888,7 @@ print_job(client_t *con, /* I - Client connection */
strncmp(con->uri, "/printers/", 10) != 0)
{
LogMessage(LOG_ERROR, "print_job: cancel request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -2088,7 +2133,7 @@ reject_jobs(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "reject_jobs: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -2194,7 +2239,7 @@ set_default(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "set_default: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -2270,7 +2315,7 @@ start_printer(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "start_printer: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -2357,7 +2402,7 @@ stop_printer(client_t *con, /* I - Client connection */
if (strncmp(con->uri, "/admin/", 7) != 0)
{
LogMessage(LOG_ERROR, "stop_printer: admin request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
@@ -2500,7 +2545,7 @@ validate_job(client_t *con, /* I - Client connection */
strncmp(con->uri, "/printers/", 10) != 0)
{
LogMessage(LOG_ERROR, "validate_job: request on bad resource \'%s\'!",
resource);
con->uri);
send_ipp_error(con, IPP_NOT_AUTHORIZED);
return;
}
+7 -5
Ver Arquivo
@@ -742,17 +742,19 @@ StopJob(int id)
if (current->status)
SetPrinterState(current->printer, IPP_PRINTER_STOPPED);
else
else if (current->printer->state == IPP_PRINTER_BUSY)
SetPrinterState(current->printer, IPP_PRINTER_IDLE);
current->state = IPP_JOB_STOPPED;
current->printer->job = NULL;
current->printer = NULL;
current->state = IPP_JOB_STOPPED;
current->printer->job = NULL;
current->printer = NULL;
for (i = 0; current->procs[i]; i ++)
if (current->procs[i] > 0)
{
kill(current->procs[i], SIGTERM);
current->procs[0] = 0;
current->procs[i] = 0;
}
if (current->pipe)
{
+1 -1
Ver Arquivo
@@ -354,7 +354,7 @@ get_datetime(time_t t) /* I - Time value */
date = localtime(&t);
sprintf(s, "[%02d/%s/%04d:%02d:%02d:%02d %+02d%02d]",
sprintf(s, "[%02d/%s/%04d:%02d:%02d:%02d %+03d%02d]",
date->tm_mday, months[date->tm_mon], 1900 + date->tm_year,
date->tm_hour, date->tm_min, date->tm_sec,
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
+12 -3
Ver Arquivo
@@ -364,8 +364,17 @@ sigchld_handler(int sig) /* I - Signal number */
{
DEBUG_printf(("sigcld_handler: pid = %d, status = %d\n", pid, status));
if (status && status != SIGTERM)
LogMessage(LOG_ERROR, "PID %d crashed with status %d!", pid, status);
if (status == SIGTERM)
status = 0;
if (status)
{
if (status < 256)
LogMessage(LOG_ERROR, "PID %d crashed on signal %d!", pid, status);
else
LogMessage(LOG_ERROR, "PID %d crashed with status %d!", pid,
status / 256);
}
for (job = Jobs; job != NULL; job = job->next)
if (job->state == IPP_JOB_PROCESSING)
@@ -382,7 +391,7 @@ sigchld_handler(int sig) /* I - Signal number */
job->procs[i] = -pid;
if (status)
if (status && !job->procs[i + 1])
{
/*
* A fatal error occurred; save the exit status so we know to stop
+30 -3
Ver Arquivo
@@ -62,6 +62,8 @@ AddPrinter(char *name) /* I - Name of printer */
*prev; /* Previous printer in list */
DEBUG_printf(("AddPrinter(\"%s\")\n", name));
/*
* Range check input...
*/
@@ -241,7 +243,8 @@ DeletePrinter(printer_t *p) /* I - Printer to delete */
if (current == NULL)
{
fputs("cupsd: WARNING - tried to delete a non-existent printer!\n", stderr);
LogMessage(LOG_ERROR, "Tried to delete a non-existent printer %s!\n",
p->name);
return;
}
@@ -748,7 +751,7 @@ SetPrinterAttrs(printer_t *p) /* I - Printer to setup */
"job-priority-supported", 100);
ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"job-priority-default", 50);
ippAddRange(p->attrs, IPP_TAG_PRINTER, "copies-supported", 1, 100);
ippAddRange(p->attrs, IPP_TAG_PRINTER, "copies-supported", 1, 65535);
ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"copies-default", 1);
ippAddBoolean(p->attrs, IPP_TAG_PRINTER, "page-ranges-supported", 1);
@@ -761,7 +764,22 @@ SetPrinterAttrs(printer_t *p) /* I - Printer to setup */
ippAddInteger(p->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
"orientation-requested-default", IPP_PORTRAIT);
if (!(p->type & CUPS_PRINTER_REMOTE))
if (p->type & CUPS_PRINTER_REMOTE)
{
/*
* Tell the client this is a remote printer of some type...
*/
if (p->type & CUPS_PRINTER_CLASS)
snprintf(filename, sizeof(filename), "Remote Printer Class on %s",
p->hostname);
else
snprintf(filename, sizeof(filename), "Remote Printer on %s", p->hostname);
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-make-and-model", NULL, filename);
}
else
{
/*
* Assign additional attributes depending on whether this is a printer
@@ -776,6 +794,9 @@ SetPrinterAttrs(printer_t *p) /* I - Printer to setup */
* Add class-specific attributes...
*/
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-make-and-model", NULL, "Local Printer Class");
if (p->num_printers > 0)
{
/*
@@ -961,6 +982,9 @@ SetPrinterAttrs(printer_t *p) /* I - Printer to setup */
* Yes, we have a System V style interface script; use it!
*/
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-make-and-model", NULL, "Local System V Printer");
sprintf(filename, "*/* 0 %s/interfaces/%s", ServerRoot, p->name);
AddPrinterFilter(p, filename);
}
@@ -971,6 +995,9 @@ SetPrinterAttrs(printer_t *p) /* I - Printer to setup */
* with no PPD file...
*/
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-make-and-model", NULL, "Local Raw Printer");
AddPrinterFilter(p, "*/* 0 -");
}
}
+43
Ver Arquivo
@@ -60,6 +60,7 @@ main(int argc, /* I - Number of command-line arguments */
ipp_t *response; /* IPP response */
ipp_op_t op; /* Operation */
cups_lang_t *language; /* Language */
int cancel; /* Cancel jobs? */
/*
@@ -71,6 +72,8 @@ main(int argc, /* I - Number of command-line arguments */
else
command = argv[0];
cancel = 0;
if (strcmp(command, "accept") == 0)
op = CUPS_ACCEPT_JOBS;
else if (strcmp(command, "reject") == 0)
@@ -96,6 +99,10 @@ main(int argc, /* I - Number of command-line arguments */
if (argv[i][0] == '-')
switch (argv[i][1])
{
case 'c' : /* Cancel jobs */
cancel = 1;
break;
case 'h' : /* Connect to host */
if (http != NULL)
httpClose(http);
@@ -204,6 +211,42 @@ main(int argc, /* I - Number of command-line arguments */
fprintf(stderr, "%s: Operation failed!\n", command);
return (1);
}
/*
* Cancel all jobs if requested...
*/
if (cancel)
{
/*
* Build an IPP_PURGE_JOBS request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_PURGE_JOBS;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(uri, sizeof(uri), "ipp://%s:%d/printers/%s", hostname, ippPort(), printer);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
if ((response = cupsDoRequest(http, request, "/admin/")) != NULL)
ippDelete(response);
}
}
if (http != NULL)
+20 -1
Ver Arquivo
@@ -34,6 +34,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <cups/cups.h>
#include <cups/string.h>
#ifndef WIN32
@@ -75,10 +76,11 @@ main(int argc, /* I - Number of command-line arguments */
int silent; /* Silent or verbose output? */
char buffer[8192]; /* Copy buffer */
FILE *temp; /* Temporary file pointer */
char server[1024]; /* Server name */
silent = 0;
dest = cupsGetDefault();
dest = NULL;
num_options = 0;
options = NULL;
num_files = 0;
@@ -101,6 +103,17 @@ main(int argc, /* I - Number of command-line arguments */
}
break;
case 'h' : /* Destination host */
if (argv[i][2] != '\0')
snprintf(server, sizeof(server), "CUPS_SERVER=%s", argv[i] + 2);
else
{
i ++;
snprintf(server, sizeof(server), "CUPS_SERVER=%s", argv[i]);
}
putenv(server);
break;
case 'm' : /* Send email when job is done */
case 'w' : /* Write to console or email */
break;
@@ -178,6 +191,9 @@ main(int argc, /* I - Number of command-line arguments */
* Print a file...
*/
if (dest == NULL)
dest = cupsGetDefault();
if (dest == NULL)
{
fputs("lp: error - no default destination available.\n", stderr);
@@ -215,6 +231,9 @@ main(int argc, /* I - Number of command-line arguments */
if (num_files == 0)
{
if (dest == NULL)
dest = cupsGetDefault();
if (dest == NULL)
{
fputs("lp: error - no default destination available.\n", stderr);
+2 -2
Ver Arquivo
@@ -277,7 +277,7 @@ show_accepting(http_t *http, /* I - HTTP connection to server */
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
/*
* Skip leading attributes until we hit a job...
* Skip leading attributes until we hit a printer...
*/
while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
@@ -287,7 +287,7 @@ show_accepting(http_t *http, /* I - HTTP connection to server */
break;
/*
* Pull the needed attributes from this job...
* Pull the needed attributes from this printer...
*/
printer = NULL;