lpr.c revision 355b4669e025ff377602b6fc7caaf30dbc218371
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * CDDL HEADER START
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * The contents of this file are subject to the terms of the
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Common Development and Distribution License (the "License").
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * You may not use this file except in compliance with the License.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * or http://www.opensolaris.org/os/licensing.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * See the License for the specific language governing permissions
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * and limitations under the License.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner]
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * CDDL HEADER END
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/*
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Use is subject to license terms.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis *
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis/* $Id: lpr.c 146 2006-03-24 00:26:54Z njacobs $ */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#pragma ident "%Z%%M% %I% %E% SMI"
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <stdio.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <stdlib.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <unistd.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <string.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <locale.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <libintl.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <papi.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include "common.h"
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#ifdef HAVE_LIBMAGIC /* for mimetype auto-detection */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include <magic.h>
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#endif /* HAVE_LIBMAGIC */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisstatic void
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisusage(char *program)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis{
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe char *name;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if ((name = strrchr(program, '/')) == NULL)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis name = program;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis else
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis name++;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fprintf(stdout,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis gettext("Usage: %s [-P printer] [-# copies] [-C class] "
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe "[-J job] [-T title] "
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "[-p [-i indent] [-w width]] "
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "[-1|-2|-3|-4 font] [-m] [-h] [-s] "
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "[-filter_option] [file ..]\n"), name);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis exit(1);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis}
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtisint
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtismain(int ac, char *av[])
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe{
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papi_status_t status;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papi_service_t svc = NULL;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papi_attribute_t **list = NULL;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papi_job_t job = NULL;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int exit_code = 0;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis char *printer = NULL;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papi_encryption_t encryption = PAPI_ENCRYPT_NEVER;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int dump = 0;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int validate = 0;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int remove = 0;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int copy = 1; /* default is to copy the data */
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe char *document_format = "application/octet-stream";
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis int c;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis (void) setlocale(LC_ALL, "");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis (void) textdomain("SUNW_OST_OSCMD");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis while ((c = getopt(ac, av,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "EP:#:C:DVJ:T:w:i:hplrstdgvcfmn1:2:3:4:")) != EOF)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis switch (c) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'E':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis encryption = PAPI_ENCRYPT_REQUIRED;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'P':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis printer = optarg;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case '#':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddInteger(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "copies", atoi(optarg));
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'C':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-class", optarg);
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'D':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis dump = 1;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'J':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "job-name", optarg);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'T':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "pr-title", optarg);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'p':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-pr");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddBoolean(&list, PAPI_ATTR_EXCL,
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe "pr-filter", 1);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'i':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddInteger(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "pr-indent", atoi(optarg));
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'w':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddInteger(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "pr-width", atoi(optarg));
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'h':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "job-sheets", "none");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe case 'l':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/octet-stream");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'o':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/postscript");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'c':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-cif");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'd':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-dvi");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe case 'f':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-fortran");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'g':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-plot");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'n':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-ditroff");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 't':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe "document-format", "application/x-troff");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'v':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "document-format", "application/x-raster");
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'm':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddBoolean(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-mail", 1);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'r':
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe remove = 1;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 's':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis copy = 0;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case 'V': /* validate */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis validate = 1;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case '1':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-font-r", optarg);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case '2':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-font-i", optarg);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case '3':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-font-b", optarg);
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis case '4':
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "rfc-1179-font-s", optarg);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis break;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis default:
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis usage(av[0]);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis }
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if ((remove != 0) && (copy == 0)) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis fprintf(stderr, gettext(
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis "-r and -s may not be used together\n"));
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis exit(1);
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe }
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if ((printer == NULL) &&
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ((printer = getenv("PRINTER")) == NULL) &&
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis ((printer = getenv("LPDEST")) == NULL))
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis printer = DEFAULT_DEST;
7f11fd00fc23e2af7ae21cc8837a2b86380dcfa7Richard Lowe
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#ifdef MAGIC_MIME
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if (optind != ac) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis /* get the mime type of the file data */
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis magic_t ms;
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis if ((ms = magic_open(MAGIC_MIME)) != NULL) {
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis document_format = magic_file(ms, av[optind]);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis magic_close(ms);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis }
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis }
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#endif
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis
papiAttributeListAddInteger(&list, PAPI_ATTR_EXCL, "copies", 1);
papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
"document-format", document_format);
papiAttributeListAddString(&list, PAPI_ATTR_EXCL,
"job-sheets", "standard");
status = papiServiceCreate(&svc, printer, NULL, NULL, cli_auth_callback,
encryption, NULL);
if (status != PAPI_OK) {
fprintf(stderr, gettext(
"Failed to contact service for %s: %s\n"), printer,
verbose_papi_message(svc, status));
exit(1);
}
if (validate == 1) /* validate the request can be processed */
status = papiJobValidate(svc, printer, list,
NULL, &av[optind], &job);
else if (optind == ac) /* no file list, use stdin */
status = jobSubmitSTDIN(svc, printer, list, &job);
else if (copy == 0) /* reference the files in the job, default */
status = papiJobSubmitByReference(svc, printer, list,
NULL, &av[optind], &job);
else /* copy the files before return, -c */
status = papiJobSubmit(svc, printer, list,
NULL, &av[optind], &job);
papiAttributeListFree(list);
if (status != PAPI_OK) {
fprintf(stderr, gettext("%s: %s\n"), printer,
verbose_papi_message(svc, status));
papiJobFree(job);
papiServiceDestroy(svc);
exit(1);
}
if (dump != 0) {
list = papiJobGetAttributeList(job);
printf("job attributes:\n");
papiAttributeListPrint(stdout, list, "\t");
printf("\n");
}
papiJobFree(job);
papiServiceDestroy(svc);
return (exit_code);
}