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 Workermain(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 Workerusage(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