1//
2// "$Id: ppdi.cxx 3073 2011-03-23 00:21:01Z msweet $"
3//
4//   PPD file import utility for the CUPS PPD Compiler.
5//
6//   Copyright 2007-2011 by Apple Inc.
7//   Copyright 2002-2005 by Easy Software Products.
8//
9//   These coded instructions, statements, and computer programs are the
10//   property of Apple Inc. and are protected by Federal copyright
11//   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12//   which should have been included with this file.  If this file is
13//   file is missing or damaged, see the license at "http://www.cups.org/".
14//
15// Contents:
16//
17//   main()  - Main entry for the PPD import utility.
18//   usage() - Show usage and exit.
19//
20
21//
22// Include necessary headers...
23//
24
25#include "ppdc-private.h"
26#include <unistd.h>
27#include <sys/stat.h>
28#include <sys/types.h>
29
30
31//
32// Local functions...
33//
34
35static void	usage(void);
36
37
38//
39// 'main()' - Main entry for the PPD import utility.
40//
41
42int					// O - Exit status
43main(int  argc,				// I - Number of command-line arguments
44     char *argv[])			// I - Command-line arguments
45{
46  int		i;			// Looping var
47  char		*opt;			// Current option
48  const char	*srcfile;		// Output file
49  ppdcSource	*src;			// PPD source file data
50
51
52  _cupsSetLocale(argv);
53
54  // Scan the command-line...
55  srcfile = NULL;
56  src     = NULL;
57
58  for (i = 1; i < argc; i ++)
59    if (argv[i][0] == '-')
60    {
61      for (opt = argv[i] + 1; *opt; opt ++)
62        switch (*opt)
63	{
64	  case 'o' :			// Output file
65              if (srcfile || src)
66	        usage();
67
68	      i ++;
69	      if (i >= argc)
70        	usage();
71
72	      srcfile = argv[i];
73	      break;
74
75	  case 'I' :			// Include dir
76	      i ++;
77	      if (i >= argc)
78        	usage();
79
80	      ppdcSource::add_include(argv[i]);
81	      break;
82
83	  default :			// Unknown
84	      usage();
85	      break;
86        }
87    }
88    else
89    {
90      // Open and load the driver info file...
91      if (!srcfile)
92        srcfile = "ppdi.drv";
93
94      if (!src)
95      {
96        if (access(srcfile, 0))
97	  src = new ppdcSource();
98	else
99          src = new ppdcSource(srcfile);
100      }
101
102      // Import the PPD file...
103      src->import_ppd(argv[i]);
104    }
105
106  // If no drivers have been loaded, display the program usage message.
107  if (!src)
108    usage();
109
110  // Write the driver info file back to disk...
111  src->write_file(srcfile);
112
113  // Delete the printer driver information...
114  src->release();
115
116  // Return with no errors.
117  return (0);
118}
119
120
121//
122// 'usage()' - Show usage and exit.
123//
124
125static void
126usage(void)
127{
128  _cupsLangPuts(stdout, _("Usage: ppdi [options] filename.ppd [ ... "
129			  "filenameN.ppd ]"));
130  _cupsLangPuts(stdout, _("Options:"));
131  _cupsLangPuts(stdout, _("  -I include-dir          Add include directory to "
132                          "search path."));
133  _cupsLangPuts(stdout, _("  -o filename.drv         Set driver information "
134                          "file (otherwise ppdi.drv)."));
135
136  exit(1);
137}
138
139
140//
141// End of "$Id: ppdi.cxx 3073 2011-03-23 00:21:01Z msweet $".
142//
143