xref: /aosp_15_r20/external/libcups/ppdc/ppdi.cxx (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker //
2*5e7646d2SAndroid Build Coastguard Worker // PPD file import utility for the CUPS PPD Compiler.
3*5e7646d2SAndroid Build Coastguard Worker //
4*5e7646d2SAndroid Build Coastguard Worker // Copyright 2007-2011 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker // Copyright 2002-2005 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker //
7*5e7646d2SAndroid Build Coastguard Worker // Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker //
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker //
11*5e7646d2SAndroid Build Coastguard Worker // Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker //
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker #include "ppdc-private.h"
15*5e7646d2SAndroid Build Coastguard Worker #include <unistd.h>
16*5e7646d2SAndroid Build Coastguard Worker #include <sys/stat.h>
17*5e7646d2SAndroid Build Coastguard Worker #include <sys/types.h>
18*5e7646d2SAndroid Build Coastguard Worker 
19*5e7646d2SAndroid Build Coastguard Worker 
20*5e7646d2SAndroid Build Coastguard Worker //
21*5e7646d2SAndroid Build Coastguard Worker // Local functions...
22*5e7646d2SAndroid Build Coastguard Worker //
23*5e7646d2SAndroid Build Coastguard Worker 
24*5e7646d2SAndroid Build Coastguard Worker static void	usage(void) _CUPS_NORETURN;
25*5e7646d2SAndroid Build Coastguard Worker 
26*5e7646d2SAndroid Build Coastguard Worker 
27*5e7646d2SAndroid Build Coastguard Worker //
28*5e7646d2SAndroid Build Coastguard Worker // 'main()' - Main entry for the PPD import utility.
29*5e7646d2SAndroid Build Coastguard Worker //
30*5e7646d2SAndroid Build Coastguard Worker 
31*5e7646d2SAndroid Build Coastguard Worker int					// O - Exit status
main(int argc,char * argv[])32*5e7646d2SAndroid Build Coastguard Worker main(int  argc,				// I - Number of command-line arguments
33*5e7646d2SAndroid Build Coastguard Worker      char *argv[])			// I - Command-line arguments
34*5e7646d2SAndroid Build Coastguard Worker {
35*5e7646d2SAndroid Build Coastguard Worker   int		i;			// Looping var
36*5e7646d2SAndroid Build Coastguard Worker   char		*opt;			// Current option
37*5e7646d2SAndroid Build Coastguard Worker   const char	*srcfile;		// Output file
38*5e7646d2SAndroid Build Coastguard Worker   ppdcSource	*src;			// PPD source file data
39*5e7646d2SAndroid Build Coastguard Worker 
40*5e7646d2SAndroid Build Coastguard Worker 
41*5e7646d2SAndroid Build Coastguard Worker   _cupsSetLocale(argv);
42*5e7646d2SAndroid Build Coastguard Worker 
43*5e7646d2SAndroid Build Coastguard Worker   // Scan the command-line...
44*5e7646d2SAndroid Build Coastguard Worker   srcfile = NULL;
45*5e7646d2SAndroid Build Coastguard Worker   src     = NULL;
46*5e7646d2SAndroid Build Coastguard Worker 
47*5e7646d2SAndroid Build Coastguard Worker   for (i = 1; i < argc; i ++)
48*5e7646d2SAndroid Build Coastguard Worker     if (argv[i][0] == '-')
49*5e7646d2SAndroid Build Coastguard Worker     {
50*5e7646d2SAndroid Build Coastguard Worker       for (opt = argv[i] + 1; *opt; opt ++)
51*5e7646d2SAndroid Build Coastguard Worker         switch (*opt)
52*5e7646d2SAndroid Build Coastguard Worker 	{
53*5e7646d2SAndroid Build Coastguard Worker 	  case 'o' :			// Output file
54*5e7646d2SAndroid Build Coastguard Worker               if (srcfile || src)
55*5e7646d2SAndroid Build Coastguard Worker 	        usage();
56*5e7646d2SAndroid Build Coastguard Worker 
57*5e7646d2SAndroid Build Coastguard Worker 	      i ++;
58*5e7646d2SAndroid Build Coastguard Worker 	      if (i >= argc)
59*5e7646d2SAndroid Build Coastguard Worker         	usage();
60*5e7646d2SAndroid Build Coastguard Worker 
61*5e7646d2SAndroid Build Coastguard Worker 	      srcfile = argv[i];
62*5e7646d2SAndroid Build Coastguard Worker 	      break;
63*5e7646d2SAndroid Build Coastguard Worker 
64*5e7646d2SAndroid Build Coastguard Worker 	  case 'I' :			// Include dir
65*5e7646d2SAndroid Build Coastguard Worker 	      i ++;
66*5e7646d2SAndroid Build Coastguard Worker 	      if (i >= argc)
67*5e7646d2SAndroid Build Coastguard Worker         	usage();
68*5e7646d2SAndroid Build Coastguard Worker 
69*5e7646d2SAndroid Build Coastguard Worker 	      ppdcSource::add_include(argv[i]);
70*5e7646d2SAndroid Build Coastguard Worker 	      break;
71*5e7646d2SAndroid Build Coastguard Worker 
72*5e7646d2SAndroid Build Coastguard Worker 	  default :			// Unknown
73*5e7646d2SAndroid Build Coastguard Worker 	      usage();
74*5e7646d2SAndroid Build Coastguard Worker 	      break;
75*5e7646d2SAndroid Build Coastguard Worker         }
76*5e7646d2SAndroid Build Coastguard Worker     }
77*5e7646d2SAndroid Build Coastguard Worker     else
78*5e7646d2SAndroid Build Coastguard Worker     {
79*5e7646d2SAndroid Build Coastguard Worker       // Open and load the driver info file...
80*5e7646d2SAndroid Build Coastguard Worker       if (!srcfile)
81*5e7646d2SAndroid Build Coastguard Worker         srcfile = "ppdi.drv";
82*5e7646d2SAndroid Build Coastguard Worker 
83*5e7646d2SAndroid Build Coastguard Worker       if (!src)
84*5e7646d2SAndroid Build Coastguard Worker       {
85*5e7646d2SAndroid Build Coastguard Worker         if (access(srcfile, 0))
86*5e7646d2SAndroid Build Coastguard Worker 	  src = new ppdcSource();
87*5e7646d2SAndroid Build Coastguard Worker 	else
88*5e7646d2SAndroid Build Coastguard Worker           src = new ppdcSource(srcfile);
89*5e7646d2SAndroid Build Coastguard Worker       }
90*5e7646d2SAndroid Build Coastguard Worker 
91*5e7646d2SAndroid Build Coastguard Worker       // Import the PPD file...
92*5e7646d2SAndroid Build Coastguard Worker       src->import_ppd(argv[i]);
93*5e7646d2SAndroid Build Coastguard Worker     }
94*5e7646d2SAndroid Build Coastguard Worker 
95*5e7646d2SAndroid Build Coastguard Worker   // If no drivers have been loaded, display the program usage message.
96*5e7646d2SAndroid Build Coastguard Worker   if (!src)
97*5e7646d2SAndroid Build Coastguard Worker     usage();
98*5e7646d2SAndroid Build Coastguard Worker 
99*5e7646d2SAndroid Build Coastguard Worker   // Write the driver info file back to disk...
100*5e7646d2SAndroid Build Coastguard Worker   src->write_file(srcfile);
101*5e7646d2SAndroid Build Coastguard Worker 
102*5e7646d2SAndroid Build Coastguard Worker   // Delete the printer driver information...
103*5e7646d2SAndroid Build Coastguard Worker   src->release();
104*5e7646d2SAndroid Build Coastguard Worker 
105*5e7646d2SAndroid Build Coastguard Worker   // Return with no errors.
106*5e7646d2SAndroid Build Coastguard Worker   return (0);
107*5e7646d2SAndroid Build Coastguard Worker }
108*5e7646d2SAndroid Build Coastguard Worker 
109*5e7646d2SAndroid Build Coastguard Worker 
110*5e7646d2SAndroid Build Coastguard Worker //
111*5e7646d2SAndroid Build Coastguard Worker // 'usage()' - Show usage and exit.
112*5e7646d2SAndroid Build Coastguard Worker //
113*5e7646d2SAndroid Build Coastguard Worker 
114*5e7646d2SAndroid Build Coastguard Worker static void
usage(void)115*5e7646d2SAndroid Build Coastguard Worker usage(void)
116*5e7646d2SAndroid Build Coastguard Worker {
117*5e7646d2SAndroid Build Coastguard Worker   _cupsLangPuts(stdout, _("Usage: ppdi [options] filename.ppd [ ... "
118*5e7646d2SAndroid Build Coastguard Worker 			  "filenameN.ppd ]"));
119*5e7646d2SAndroid Build Coastguard Worker   _cupsLangPuts(stdout, _("Options:"));
120*5e7646d2SAndroid Build Coastguard Worker   _cupsLangPuts(stdout, _("  -I include-dir          Add include directory to "
121*5e7646d2SAndroid Build Coastguard Worker                           "search path."));
122*5e7646d2SAndroid Build Coastguard Worker   _cupsLangPuts(stdout, _("  -o filename.drv         Set driver information "
123*5e7646d2SAndroid Build Coastguard Worker                           "file (otherwise ppdi.drv)."));
124*5e7646d2SAndroid Build Coastguard Worker 
125*5e7646d2SAndroid Build Coastguard Worker   exit(1);
126*5e7646d2SAndroid Build Coastguard Worker }
127