]> git.ipfire.org Git - thirdparty/cups.git/blame - ppdc/ppdhtml.cxx
License change: Apache License, Version 2.0.
[thirdparty/cups.git] / ppdc / ppdhtml.cxx
CommitLineData
ac884b6a 1//
d25e43cf 2// PPD to HTML utility for the CUPS PPD Compiler.
ac884b6a 3//
d25e43cf
MS
4// Copyright 2007-2015 by Apple Inc.
5// Copyright 2002-2005 by Easy Software Products.
ac884b6a 6//
e3101897 7// Licensed under Apache License v2.0. See the file "LICENSE" for more information.
ac884b6a
MS
8//
9
10//
11// Include necessary headers...
12//
13
38e73f87 14#include "ppdc-private.h"
ac884b6a
MS
15#include <sys/stat.h>
16#include <sys/types.h>
17
18
19//
20// Local functions...
21//
22
23static void usage(void);
24
25
26//
27// 'main()' - Main entry for the PPD compiler.
28//
29
30int // O - Exit status
31main(int argc, // I - Number of command-line arguments
32 char *argv[]) // I - Command-line arguments
33{
34 int i; // Looping var
35 ppdcSource *src; // PPD source file data
36 ppdcDriver *d; // Current driver
37 ppdcGroup *g, // Current group
38 *composite; // Composite of all drivers
39 ppdcOption *o, // Current option
40 *compo; // Composite option
41 ppdcChoice *c; // Current choice
42 char *opt; // Current option char
43 ppdcMediaSize *size; // Current media size
61cf44e2 44 char *value; // Value in option
ac884b6a
MS
45
46
61cf44e2
MS
47 _cupsSetLocale(argv);
48
ac884b6a 49 // Scan the command-line...
d25e43cf 50 src = new ppdcSource();
ac884b6a
MS
51
52 for (i = 1; i < argc; i ++)
53 if (argv[i][0] == '-')
54 {
55 for (opt = argv[i] + 1; *opt; opt ++)
56 switch (*opt)
57 {
61cf44e2
MS
58 case 'D' : // Define variable
59 i ++;
60 if (i >= argc)
61 usage();
62
63 if ((value = strchr(argv[i], '=')) != NULL)
64 {
65 *value++ = '\0';
66
67 src->set_variable(argv[i], value);
68 }
69 else
70 src->set_variable(argv[i], "1");
71 break;
72
ac884b6a
MS
73 case 'I' : // Include directory...
74 i ++;
75 if (i >= argc)
76 usage();
77
78 ppdcSource::add_include(argv[i]);
79 break;
80
81 default : // Unknown
82 usage();
83 break;
84 }
85 }
86 else
87 {
88 // Open and load the driver info file...
d25e43cf
MS
89 src->read_file(argv[i]);
90 }
91
92 if ((d = (ppdcDriver *)src->drivers->first()) != NULL)
93 {
94 // Create a composite group with all of the features from the
95 // drivers in the info file...
96 composite = new ppdcGroup("", "");
97
98 while (d != NULL)
99 {
100 for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next())
101 for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
102 {
103 if ((compo = composite->find_option(o->name->value)) == NULL)
104 composite->add_option(new ppdcOption(o));
105 }
106
107 d = (ppdcDriver *)src->drivers->next();
ac884b6a
MS
108 }
109
d25e43cf
MS
110 puts("<html>");
111 printf("<head><title>Driver Summary for %s</title></head>\n", argv[i]);
112 printf("<body><h1>Driver Summary for %s</h1>\n", argv[i]);
113 printf("<p><table border='1'><thead><tr><th>Printer</th><th>Media Size</th>");
114 for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next())
115 printf("<th>%s</th>", compo->text->value);
116 puts("</tr></thead><tbody>");
117
118 // Write HTML summary...
119 for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
120 {
121 // Write the summary for this driver...
122 printf("<tr valign='top'><td nowrap>%s</td><td nowrap>", d->model_name->value);
123 for (size = (ppdcMediaSize *)d->sizes->first(); size;
124 size = (ppdcMediaSize *)d->sizes->next())
125 printf("%s<br>", size->text->value);
126 printf("</td>");
127
128 for (compo = (ppdcOption *)composite->options->first(); compo;
129 compo = (ppdcOption *)composite->options->next())
130 if ((o = d->find_option(compo->name->value)) != NULL)
131 {
132 printf("<td nowrap>");
133 for (c = (ppdcChoice *)o->choices->first(); c;
134 c = (ppdcChoice *)o->choices->next())
135 printf("%s<br>", c->text->value);
136 printf("</td>");
137 }
138 else
139 printf("<td>N/A</td>");
140
141 puts("</tr>");
142 }
143
144 puts("</tbody></table></p>");
145 puts("</body>");
146 puts("</html>");
147
148 // Delete the printer driver information...
149 composite->release();
150 }
151 else
152 {
153 // If no drivers have been loaded, display the program usage message.
ac884b6a 154 usage();
d25e43cf
MS
155 }
156
157 src->release();
ac884b6a
MS
158
159 // Return with no errors.
160 return (0);
161}
162
163
164//
165// 'usage()' - Show usage and exit.
166//
167
168static void
169usage(void)
170{
0837b7e8
MS
171 _cupsLangPuts(stdout, _("Usage: ppdhtml [options] filename.drv "
172 ">filename.html"));
173 _cupsLangPuts(stdout, _("Options:"));
84315f46 174 _cupsLangPuts(stdout, _(" -D name=value Set named variable to "
0837b7e8 175 "value."));
84315f46
MS
176 _cupsLangPuts(stdout, _(" -I include-dir Add include directory "
177 "to search path."));
ac884b6a
MS
178
179 exit(1);
180}