summaryrefslogtreecommitdiff
path: root/deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c')
-rw-r--r--deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c256
1 files changed, 256 insertions, 0 deletions
diff --git a/deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c b/deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c
new file mode 100644
index 0000000000..8b5b42fe46
--- /dev/null
+++ b/deleted_files/usr/src/cmd/print/lpstat/bsd-functions.c
@@ -0,0 +1,256 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (c) 1998 by Sun Microsystems, Inc.
+ * All rights reserved.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/fcntl.h>
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <syslog.h>
+#ifndef SUNOS_4
+#include <libintl.h>
+#endif
+extern char *getenv(const char *);
+
+#include <print/ns.h>
+#include <print/network.h>
+#include <print/misc.h>
+#include <print/list.h>
+#include <print/job.h>
+
+#include "bsd-functions.h"
+
+
+static char *order[] = {
+ "", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th" };
+
+static char *
+show_rank(int i)
+{
+ static char rank[12];
+ if ((i%100)/10 == 1)
+ (void) sprintf(rank, "%dth", i);
+ else
+ (void) sprintf(rank, "%d%s", i, order[i%10]);
+ return (rank);
+}
+
+
+static int
+vadd_file(jobfile_t *file, va_list ap)
+{
+ char *mesg = va_arg(ap, char *);
+
+ if (file != NULL) {
+ (void) strlcat(mesg, file->jf_name, BUFSIZ);
+ (void) strlcat(mesg, " ", BUFSIZ);
+ return (file->jf_size);
+ }
+ return (0);
+}
+
+/*ARGSUSED*/
+static int
+vprint_file(jobfile_t *file, va_list ap)
+{
+ if (file != NULL)
+ (void) printf("\t%-33.33s%ld bytes\n", file->jf_name,
+ file->jf_size);
+ return (0);
+}
+
+static int
+vprint_job(job_t *job, va_list ap)
+{
+ int jobSize = 0,
+ *rank,
+ format,
+ curr,
+ printIt = 0,
+ ac;
+ char fileList[BUFSIZ],
+ *printer,
+ **av;
+
+ printer = va_arg(ap, char *);
+ format = va_arg(ap, int);
+ rank = va_arg(ap, int *);
+ ac = va_arg(ap, int);
+ av = va_arg(ap, char **);
+
+ if (strcmp(job->job_printer, printer) != 0)
+ return (0);
+
+ if (ac > 0) {
+ for (curr = 0; curr < ac; curr++)
+ if ((av[curr][0] >= '0') && (av[curr][0] <= '9') &&
+ (job->job_id == atoi(av[curr])) ||
+ (strcmp(job->job_user, av[curr]) == 0)) {
+ printIt++;
+ break;
+ }
+ } else
+ printIt++;
+
+ if (printIt != 0) {
+ if (format == SHOW_QUEUE_SHORT_REQUEST) {
+ (void) memset(fileList, 0, sizeof (fileList));
+ jobSize = list_iterate((void **)job->job_df_list,
+ (VFUNC_T)vadd_file, fileList);
+ (void) printf(
+ "%-7.7s%-8.8s %3.3d %-38.38s%d bytes\n",
+ show_rank((*rank)++), job->job_user,
+ job->job_id, fileList, jobSize);
+ } else {
+ (void) printf("%s: %-7.7s \t\t\t\t [job %.3d%s]\n",
+ job->job_user, show_rank((*rank)++),
+ job->job_id, job->job_host);
+ (void) list_iterate((void **)job->job_df_list,
+ (VFUNC_T)vprint_file);
+ (void) printf("\n");
+ }
+ }
+ return (0);
+}
+
+static int
+vjob_count(job_t *job, va_list ap)
+{
+ int curr,
+ ac;
+ char *printer,
+ **av;
+
+ printer = va_arg(ap, char *);
+ ac = va_arg(ap, int);
+ av = va_arg(ap, char **);
+
+ if (strcmp(job->job_printer, printer) != 0)
+ return (0);
+
+ if (ac == 0)
+ return (1);
+
+ for (curr = 0; curr < ac; curr++)
+ if ((av[curr][0] >= '0') && (av[curr][0] <= '9') &&
+ (job->job_id == atoi(av[curr])) ||
+ (strcmp(job->job_user, av[curr]) == 0))
+ return (1);
+
+ return (0);
+}
+
+
+void
+clear_screen() /* for now use tput rather than link in UCB stuff */
+{
+ (void) system("/bin/tput clear");
+}
+
+
+int
+bsd_queue(ns_bsd_addr_t *binding, int format, int ac, char *av[])
+{
+ char *server = NULL,
+ *printer = NULL;
+ job_t **list = NULL;
+ int nd = -1,
+ idle = 0,
+ rc;
+
+ server = binding->server;
+ printer = binding->printer;
+
+ if ((nd = net_open(server, 15)) >= 0) {
+ char buf[BUFSIZ];
+
+ (void) memset(buf, 0, sizeof (buf));
+ while (ac--) { /* potential SEGV if av's are more than BUFSIZ */
+ (void) strlcat(buf, av[ac], sizeof (buf));
+ if (strlcat(buf, " ", sizeof (buf)) >= sizeof (buf)) {
+ syslog(LOG_ERR, "bsd_queue: buffer overflow");
+ }
+ }
+
+ rc = net_printf(nd, "%c%s %s\n", format, printer, buf);
+ if (rc < 0)
+ syslog(LOG_ERR, "net_printf() failed: %m");
+#ifdef SUNOS_4
+ do {
+ (void) memset(buf, 0, sizeof (buf));
+ if ((ac = net_read(nd, buf, sizeof (buf))) > 0)
+ (void) printf("%s", buf);
+ } while (ac > 0);
+#else
+ while (memset(buf, 0, sizeof (buf)) &&
+ (net_read(nd, buf, sizeof (buf)) > 0)) {
+ (void) printf("%s", buf);
+ if (strstr(buf, "no entries") != 0)
+ idle = 1;
+ }
+#endif
+
+ (void) net_close(nd);
+ }
+
+ if (nd < 0) {
+ if (server != NULL)
+ (void) fprintf(stderr, gettext(
+ "could not talk to print service at %s\n"),
+ server);
+ else
+ (void) fprintf(stderr, gettext(
+ "could not locate server for printer: %s\n"),
+ printer);
+ }
+
+ if (((list = job_list_append(NULL, printer,
+ server, SPOOL_DIR)) != NULL) &&
+ (list_iterate((void **)list, (VFUNC_T)vjob_count, printer,
+ ac, av) != 0)) {
+ if ((nd < 0) && (format == SHOW_QUEUE_SHORT_REQUEST))
+ (void) printf(gettext(
+ "Rank\tOwner Job\tFiles\t\t\t\t\tTotal Size\n"));
+ }
+
+ if (format == SHOW_QUEUE_LONG_REQUEST)
+ (void) printf("\n");
+
+ nd = 1;
+ (void) list_iterate((void **)list, (VFUNC_T)vprint_job, printer, format,
+ &nd, ac, av);
+
+ if ((idle == 1) && (list == NULL))
+ return (1);
+ else
+ return (0);
+}