Home | History | Annotate | Download | only in lpadmin
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 1991 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28 /*	  All Rights Reserved  	*/
     29 
     30 
     31 #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.11	*/
     32 
     33 #include <stdio.h>
     34 #include <string.h>
     35 #include <errno.h>
     36 #include <sys/types.h>
     37 #include <stdlib.h>
     38 #include <libintl.h>
     39 
     40 #include "lp.h"
     41 #include "printers.h"
     42 #include "msgs.h"
     43 
     44 #define	WHO_AM_I	I_AM_LPADMIN
     45 #include "oam.h"
     46 
     47 #include "lpadmin.h"
     48 
     49 
     50 extern char		*nameit(),
     51 			*label;
     52 
     53 static void		configure_pwheel();
     54 
     55 /**
     56  ** do_pwheel() - SET ALERT FOR NEED TO MOUNT PRINT WHEEL
     57  **/
     58 
     59 void			do_pwheel ()
     60 {
     61 	int			rc;
     62 
     63 
     64 	if (A && STREQU(A, NAME_NONE)) {
     65 		BEGIN_CRITICAL
     66 			if (delpwheel(*S) == -1) {
     67 				LP_ERRMSG1 (WARNING, E_ADM_BADPWHEEL, *S);
     68 				return;
     69 			}
     70 		END_CRITICAL
     71 
     72 	} else if (strlen(modifications))
     73 		configure_pwheel (modifications);
     74 
     75 	if (A && STREQU(A, NAME_LIST)) {
     76 		if (label)
     77 			(void) printf(gettext("Print wheel %s: "), label);
     78 		printalert (stdout, &(oldS->alert), 0);
     79 		return;
     80 	}
     81 
     82 	if (A && STREQU(A, NAME_QUIET)) {
     83 
     84 		send_message(S_QUIET_ALERT, *S, (char *)QA_PRINTWHEEL, "");
     85 		rc = output(R_QUIET_ALERT);
     86 
     87 		switch(rc) {
     88 		case MOK:
     89 			break;
     90 
     91 		case MNODEST:	/* not quite, but not a lie either */
     92 		case MERRDEST:
     93 			LP_ERRMSG1 (WARNING, E_LP_NOQUIET, *S);
     94 			break;
     95 
     96 		case MNOPERM:	/* taken care of up front */
     97 		default:
     98 			LP_ERRMSG1 (ERROR, E_LP_BADSTATUS, rc);
     99 			done (1);
    100 			/*NOTREACHED*/
    101 		}
    102 
    103 		return;
    104 	}
    105 
    106 	if (A && STREQU(A, NAME_NONE)) {
    107 		send_message(S_UNLOAD_PRINTWHEEL, *S);
    108 		rc = output(R_UNLOAD_PRINTWHEEL);
    109 	} else {
    110 		send_message(S_LOAD_PRINTWHEEL, *S);
    111 		rc = output(R_LOAD_PRINTWHEEL);
    112 	}
    113 
    114 	switch(rc) {
    115 	case MOK:
    116 		break;
    117 
    118 	case MNODEST:
    119 		/*
    120 		 * Should only occur if we're deleting a print wheel
    121 		 * alert that doesn't exist.
    122 		 */
    123 		break;
    124 
    125 	case MERRDEST:
    126 		LP_ERRMSG (ERROR, E_ADM_ERRDEST);
    127 		done (1);
    128 		/*NOTREACHED*/
    129 
    130 	case MNOSPACE:
    131 		LP_ERRMSG (WARNING, E_ADM_NOPWSPACE);
    132 		break;
    133 
    134 	case MNOPERM:	/* taken care of up front */
    135 	default:
    136 		LP_ERRMSG1 (ERROR, E_LP_BADSTATUS, rc);
    137 		done (1);
    138 		/*NOTREACHED*/
    139 	}
    140 	return;
    141 }
    142 
    143 /**
    144  ** configure_pwheel() - SET OR CHANGE CONFIGURATION OF A PRINT WHEEL
    145  **/
    146 
    147 static void		configure_pwheel (list)
    148 	char			*list;
    149 {
    150 	register PWHEEL		*ppw;
    151 
    152 	PWHEEL			pwheel_buf;
    153 
    154 	char			type;
    155 
    156 
    157 	if (oldS)
    158 		ppw = oldS;
    159 	else {
    160 		ppw = &pwheel_buf;
    161 		ppw->alert.shcmd = 0;
    162 		ppw->alert.Q = 0;
    163 		ppw->alert.W = 0;
    164 	}
    165 
    166 	while ((type = *list++) != '\0')  switch(type) {
    167 
    168 	case 'A':
    169 		if (STREQU(A, NAME_MAIL) || STREQU(A, NAME_WRITE))
    170 			ppw->alert.shcmd = nameit(A);
    171 		else
    172 			ppw->alert.shcmd = A;
    173 
    174 		break;
    175 
    176 	case 'Q':
    177 		ppw->alert.Q = Q;
    178 		break;
    179 
    180 	case 'W':
    181 		ppw->alert.W = W;
    182 		break;
    183 
    184 	}
    185 
    186 	BEGIN_CRITICAL
    187 		if (putpwheel(*S, ppw) == -1) {
    188 			LP_ERRMSG2 (
    189 				ERROR,
    190 				E_ADM_PUTPWHEEL,
    191 				*S,
    192 				PERROR
    193 			);
    194 			done(1);
    195 		}
    196 	END_CRITICAL
    197 
    198 	return;
    199 }
    200