|
|
1.1 root 1: /* $Header: getprintstatus.c,v 2.1 87/01/14 13:12:50 ed Exp $ */
2:
3: /*
4: * $Log: getprintstatus.c,v $
5: * Revision 2.1 86/10/11 15:42:11 jqj
6: * Some convenience changes from B Jackson @ PARC
7: *
8: * Revision 2.0 85/11/21 07:23:10 jqj
9: * 4.3BSD standard release
10: *
11: * Revision 1.1 85/11/20 13:56:47 jqj
12: * Initial revision
13: *
14: */
15: #include <stdio.h>
16: #include <sys/types.h>
17: #include <netns/ns.h>
18: #include "Printing3_defs.h"
19: #include <xnscourier/Clearinghouse2.h>
20: #include <xnscourier/except.h>
21:
22: main(argc, argv)
23: int argc;
24: char *argv[];
25: {
26: GetPrinterStatusResults result;
27: struct ns_addr *destaddr;
28: CourierConnection *conn;
29: char *xnshost;
30: extern struct ns_addr *getXNSaddr();
31: extern struct ns_addr *CH_LookupAddr();
32: Clearinghouse2_Name hostname;
33: Clearinghouse2_Name defaultname;
34: extern Clearinghouse2_Name CH_StringToName();
35: extern char *getenv();
36:
37: CH_NameDefault(&defaultname);
38: xnshost = getenv("PRINTER");
39: switch (argc) {
40: case 2: xnshost = argv[1];
41: case 1: hostname = CH_StringToName(xnshost,&defaultname);
42: if ((destaddr = CH_LookupAddr(hostname)) != NULL)
43: break; /* got a valid host name */
44: else
45: fprintf(stderr,"Invalid machine name: [%s:%s:%s]\n",
46: hostname.object,
47: hostname.domain,
48: hostname.organization);
49: default:
50: fprintf(stderr,"Usage: %s [machine]\n",argv[0]);
51: exit(1);
52: }
53:
54: if ((conn = CourierOpen(destaddr)) == NULL) {
55: fprintf(stderr,"Can't open connection to %s\n",xnshost);
56: exit(1);
57: }
58:
59: DURING
60: result = GetPrinterStatus(conn,NULL);
61: HANDLER {
62: switch (Exception.Code) {
63: case ServiceUnavailable:
64: fprintf(stderr,"Service unavailable\n");
65: break;
66: case SystemError:
67: fprintf(stderr,"System Error\n");
68: break;
69: case Undefined:
70: fprintf(stderr,"Undefined error, number %d\n",
71: CourierErrArgs(UndefinedArgs,problem));
72:
73: case REJECT_ERROR:
74: fprintf(stderr,"REJECT: type = %d\n",
75: CourierErrArgs(rejectionDetails, designator));
76: break;
77: default:
78: fprintf(stderr,"Some random error, code %d\n",
79: Exception.Code);
80: break;
81: }
82: exit(1);
83: } END_HANDLER;
84:
85: CourierClose(conn);
86: printf("[%s:%s:%s]\n",
87: hostname.object,
88: hostname.domain,
89: hostname.organization);
90: printresults(result.status);
91: }
92:
93: printresults(status)
94: PrinterStatus status;
95: {
96: int i, typ;
97: static char *spoollist[] = {"available","busy","disabled","full"};
98: static char *formatlist[] = {"available","busy","disabled"};
99: static char *printlist[] = {"available","busy","disabled",
100: "needs attention","needs key operator"};
101:
102: for (i = 0; i < status.length; i++) {
103: switch (status.sequence[i].designator) {
104: case spooler:
105: typ = (int) status.sequence[i].spooler_case;
106: printf("Spooling status: %s\n", spoollist[typ]);
107: break;
108: case formatter:
109: typ = (int) status.sequence[i].formatter_case;
110: printf("Formatting status: %s\n", formatlist[typ]);
111: break;
112: case printer:
113: typ = (int) status.sequence[i].printer_case;
114: printf("Printer status: %s\n", printlist[typ]);
115: break;
116: case media:
117: printmedia(status.sequence[i].media_case);
118: break;
119: }
120: }
121: }
122:
123: printmedia(media)
124: Media media;
125: {
126: int j;
127: for (j = 0; j <media.length; j++) {
128: switch (media.sequence[j].designator) {
129: case paper:
130: printf("Paper #%d: ", j+1);
131: printpaper(media.sequence[j].paper_case);
132: break;
133: default:
134: printf("Unknown medium type\n");
135: break;
136: }
137: }
138: }
139:
140: printpaper(paper)
141: Paper paper;
142: {
143: switch (paper.designator) {
144: case unknown:
145: printf("unknown\n");
146: break;
147: case knownSize:
148: switch (paper.knownSize_case) {
149: case usLetter:
150: printf("US letter\n");
151: break;
152: case usLegal:
153: printf("US legal\n");
154: break;
155: default:
156: printf("known size %d\n", paper.knownSize_case);
157: break;
158: }
159: break;
160: case otherSize:
161: printf("\tother size: width = %dmm, length = %d mm\n",
162: paper.otherSize_case.width,
163: paper.otherSize_case.length);
164: break;
165: default:
166: printf("Unknown paper type");
167: break;
168: }
169: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.