]> git.ipfire.org Git - thirdparty/cups.git/blob - driver/testdriver.c
Merge CUPS 1.4svn-r7319.
[thirdparty/cups.git] / driver / testdriver.c
1 /*
2 * "$Id: testdriver.c 6649 2007-07-11 21:46:42Z mike $"
3 *
4 * Sample/test driver interface program for the Common UNIX Printing
5 * System (CUPS).
6 *
7 * This program handles listing and installing both static PPD files
8 * in CUPS_DATADIR/model and dynamically generated PPD files using
9 * the driver helper programs in CUPS_SERVERBIN/driver.
10 *
11 * Copyright 2007 by Apple Inc.
12 * Copyright 1997-2006 by Easy Software Products.
13 *
14 * These coded instructions, statements, and computer programs are the
15 * property of Apple Inc. and are protected by Federal copyright
16 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
17 * which should have been included with this file. If this file is
18 * file is missing or damaged, see the license at "http://www.cups.org/".
19 *
20 * Contents:
21 *
22 * main() - Enumerate or display PPD files.
23 * cat_ppd() - Display a PPD file.
24 * list_ppds() - List PPDs.
25 */
26
27 /*
28 * Include necessary headers...
29 */
30
31 #include <stdio.h>
32 #include <cups/string.h>
33 #include <cups/cups.h>
34
35
36 /*
37 * Local functions...
38 */
39
40 static int cat_ppd(const char *uri);
41 static int list_ppds(const char *name);
42
43
44 /*
45 * Sample data...
46 */
47
48 static const char *models[][2] =
49 {
50 { "foojet.ppd", "Foo Printer" },
51 { "barjet.ppd", "Bar Printer" },
52 { "foobar.ppd", "Foo/Bar Multifunction Printer" }
53 };
54
55
56 /*
57 * 'main()' - Enumerate or display PPD files.
58 */
59
60 int /* O - Exit status */
61 main(int argc, /* I - Number of command-line args */
62 char *argv[]) /* I - Command-line arguments */
63 {
64 if (argc == 2 && !strcmp(argv[1], "list"))
65 return (list_ppds(argv[0]));
66 else if (argc == 3 && !strcmp(argv[1], "cat"))
67 return (cat_ppd(argv[2]));
68
69 fprintf(stderr, "ERROR: Usage: %s cat URI\n", argv[0]);
70 fprintf(stderr, "ERROR: Usage: %s list\n", argv[0]);
71 return (1);
72 }
73
74
75 /*
76 * 'cat_ppd()' - Display a PPD file.
77 */
78
79 static int /* O - Exit status */
80 cat_ppd(const char *uri) /* I - PPD URI */
81 {
82 int i; /* Looping var */
83 char scheme[255], /* URI scheme */
84 userpass[255], /* Username/password (unused) */
85 hostname[255], /* Hostname (unused) */
86 resource[1024]; /* Resource name */
87 int port; /* Port (unused) */
88 const char *name; /* Pointer to name in URI */
89
90
91 if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
92 userpass, sizeof(userpass), hostname, sizeof(hostname),
93 &port, resource, sizeof(resource)) < HTTP_URI_OK)
94 {
95 fprintf(stderr, "ERROR: Bad URI \"%s\"!\n", uri);
96 return (1);
97 }
98
99 name = resource + 1;
100
101 for (i = 0 ; i < (int)(sizeof(models) / sizeof(models[0])); i ++)
102 if (!strcmp(name, models[i][0]))
103 {
104 /*
105 * Actually display the PPD file...
106 */
107 puts("*PPD-Adobe: \"4.3\"");
108
109 puts("*LanguageEncoding: ISOLatin1");
110 puts("*LanguageVersion: English");
111 puts("*Manufacturer: \"Test\"");
112 puts("*FileVersion: \"1.0\"");
113 puts("*FormatVersion: \"4.3\"");
114 puts("*PSVersion: \"(3010) 1\"");
115 printf("*PCFileName: \"%s\"\n", models[i][0]);
116
117 printf("*Product: \"(%s)\"\n", models[i][1]);
118 printf("*ModelName: \"Test %s\"\n", models[i][1]);
119 printf("*NickName: \"Test %s\"\n", models[i][1]);
120 printf("*ShortNickName: \"Test %s\"\n", models[i][1]);
121
122 puts("*OpenUI PageSize: PickOne");
123 puts("*OrderDependency: 10 AnySetup *PageSetup");
124 puts("*DefaultPageSize: Letter");
125 puts("*PageSize Letter: \"<</PageSize[612 792]>>setpagedevice\"");
126 puts("*PageSize A4: \"<</PageSize[585 842]>>setpagedevice\"");
127 puts("*CloseUI: *PageSize");
128
129 puts("*OpenUI PageRegion: PickOne");
130 puts("*OrderDependency: 10 AnySetup *PageRegion");
131 puts("*DefaultPageRegion: Letter");
132 puts("*PageRegion Letter: \"<</PageRegion[612 792]>>setpagedevice\"");
133 puts("*PageRegion A4: \"<</PageRegion[585 842]>>setpagedevice\"");
134 puts("*CloseUI: *PageRegion");
135
136 puts("*DefaultImageableArea: Letter");
137 puts("*ImageableArea Letter: \"0 0 612 792\"");
138 puts("*ImageableArea A4: \"0 0 595 842\"");
139
140 puts("*DefaultPaperDimension: Letter");
141 puts("*PaperDimension Letter: \"612 792\"");
142 puts("*PaperDimension A4: \"595 842\"");
143
144 return (0);
145 }
146
147 fprintf(stderr, "ERROR: Unknown URI \"%s\"!\n", uri);
148 return (1);
149 }
150
151
152 /*
153 * 'list_ppds()' - List PPDs.
154 */
155
156 static int /* O - Exit status */
157 list_ppds(const char *name) /* I - Program name */
158 {
159 int i; /* Looping var */
160 const char *base; /* Base name of program */
161
162
163 if ((base = strrchr(name, '/')) != NULL)
164 base ++;
165 else
166 base = name;
167
168 for (i = 0; i < (int)(sizeof(models) / sizeof(models[0])); i ++)
169 printf("\"%s:///%s\" en \"Test\" \"Test %s\" \"1284 device id\"\n",
170 base, models[i][0], models[i][1]);
171
172 return (0);
173 }
174
175
176 /*
177 * End of "$Id: testdriver.c 6649 2007-07-11 21:46:42Z mike $".
178 */