BSD 4_4_Lite1 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 14 Jan 1987 03:15:15 +0000 (19:15 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 14 Jan 1987 03:15:15 +0000 (19:15 -0800)
Work on file usr/src/contrib/xns/examples/print/getprintstatus.c

Synthesized-from: CSRG/cd2/4.4BSD-Lite1

usr/src/contrib/xns/examples/print/getprintstatus.c [new file with mode: 0644]

diff --git a/usr/src/contrib/xns/examples/print/getprintstatus.c b/usr/src/contrib/xns/examples/print/getprintstatus.c
new file mode 100644 (file)
index 0000000..541dacf
--- /dev/null
@@ -0,0 +1,169 @@
+/* $Header: getprintstatus.c,v 2.1 87/01/14 13:12:50 ed Exp $ */
+
+/*
+ * $Log:       getprintstatus.c,v $
+ * Revision 2.1  86/10/11  15:42:11  jqj
+ * Some convenience changes from B Jackson @ PARC
+ * 
+ * Revision 2.0  85/11/21  07:23:10  jqj
+ * 4.3BSD standard release
+ * 
+ * Revision 1.1  85/11/20  13:56:47  jqj
+ * Initial revision
+ * 
+ */
+#include <stdio.h>
+#include <sys/types.h>
+#include <netns/ns.h>
+#include "Printing3_defs.h"
+#include <xnscourier/Clearinghouse2.h>
+#include <xnscourier/except.h>
+
+main(argc, argv)
+       int argc;
+       char *argv[];
+{
+       GetPrinterStatusResults result;
+       struct ns_addr *destaddr;
+       CourierConnection *conn;
+       char *xnshost;
+       extern struct ns_addr *getXNSaddr();
+       extern struct ns_addr *CH_LookupAddr();
+       Clearinghouse2_Name hostname;
+       Clearinghouse2_Name defaultname;
+       extern Clearinghouse2_Name CH_StringToName();
+       extern char *getenv();
+
+       CH_NameDefault(&defaultname);
+       xnshost = getenv("PRINTER");
+       switch (argc) {
+       case 2: xnshost = argv[1];
+       case 1: hostname = CH_StringToName(xnshost,&defaultname);
+               if ((destaddr = CH_LookupAddr(hostname)) != NULL)
+                       break;          /* got a valid host name */
+               else
+                       fprintf(stderr,"Invalid machine name: [%s:%s:%s]\n",
+                               hostname.object,
+                               hostname.domain,
+                               hostname.organization);
+       default:
+               fprintf(stderr,"Usage: %s [machine]\n",argv[0]);
+               exit(1);
+       }
+
+       if ((conn = CourierOpen(destaddr)) == NULL) {
+               fprintf(stderr,"Can't open connection to %s\n",xnshost);
+               exit(1);
+       }
+
+       DURING
+               result = GetPrinterStatus(conn,NULL);
+       HANDLER {
+               switch (Exception.Code) {
+               case ServiceUnavailable:
+                       fprintf(stderr,"Service unavailable\n");
+                       break;
+               case SystemError:
+                       fprintf(stderr,"System Error\n");
+                       break;
+               case Undefined:
+                       fprintf(stderr,"Undefined error, number %d\n",
+                               CourierErrArgs(UndefinedArgs,problem));
+
+               case REJECT_ERROR:
+                       fprintf(stderr,"REJECT:  type = %d\n",
+                               CourierErrArgs(rejectionDetails, designator));
+                       break;
+               default:
+                       fprintf(stderr,"Some random error, code %d\n",
+                               Exception.Code);
+                       break;
+               }
+       exit(1);
+       } END_HANDLER;
+
+       CourierClose(conn);
+       printf("[%s:%s:%s]\n",
+               hostname.object,
+               hostname.domain,
+               hostname.organization);
+       printresults(result.status);
+}
+
+printresults(status)
+       PrinterStatus status;
+{
+       int i, typ;
+       static char *spoollist[] = {"available","busy","disabled","full"};
+       static char *formatlist[] = {"available","busy","disabled"};
+       static char *printlist[] = {"available","busy","disabled",
+                       "needs attention","needs key operator"};
+
+       for (i = 0; i < status.length; i++) {
+               switch (status.sequence[i].designator) {
+               case spooler:
+                       typ = (int) status.sequence[i].spooler_case;
+                       printf("Spooling status:  %s\n", spoollist[typ]);
+                       break;
+               case formatter:
+                       typ = (int) status.sequence[i].formatter_case;
+                       printf("Formatting status:  %s\n", formatlist[typ]);
+                       break;
+               case printer:
+                       typ = (int) status.sequence[i].printer_case;
+                       printf("Printer status:  %s\n", printlist[typ]);
+                       break;
+               case media:
+                       printmedia(status.sequence[i].media_case);
+                       break;
+               }
+       }
+}
+
+printmedia(media)
+       Media media;
+{
+       int j;
+       for (j = 0; j <media.length; j++) {
+               switch (media.sequence[j].designator) {
+               case paper:
+                       printf("Paper #%d:  ", j+1);
+                       printpaper(media.sequence[j].paper_case);
+                       break;
+               default:
+                       printf("Unknown medium type\n");
+                       break;
+               }
+       }
+}
+
+printpaper(paper)
+       Paper paper;
+{
+       switch (paper.designator) {
+       case unknown:
+               printf("unknown\n");
+               break;
+       case knownSize:
+               switch (paper.knownSize_case) {
+               case usLetter:
+                       printf("US letter\n");
+                       break;
+               case usLegal:
+                       printf("US legal\n");
+                       break;
+               default:
+                       printf("known size %d\n", paper.knownSize_case);
+                       break;
+               }
+               break;
+       case otherSize:
+               printf("\tother size: width = %dmm, length = %d mm\n",
+                       paper.otherSize_case.width,
+                       paper.otherSize_case.length);
+               break;
+       default:
+               printf("Unknown paper type");
+               break;
+       }
+}