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