1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * PPD cache testing program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2009-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker *
6*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
7*5e7646d2SAndroid Build Coastguard Worker */
8*5e7646d2SAndroid Build Coastguard Worker
9*5e7646d2SAndroid Build Coastguard Worker /*
10*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
11*5e7646d2SAndroid Build Coastguard Worker */
12*5e7646d2SAndroid Build Coastguard Worker
13*5e7646d2SAndroid Build Coastguard Worker #include "ppd-private.h"
14*5e7646d2SAndroid Build Coastguard Worker #include "file-private.h"
15*5e7646d2SAndroid Build Coastguard Worker
16*5e7646d2SAndroid Build Coastguard Worker
17*5e7646d2SAndroid Build Coastguard Worker /*
18*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Main entry.
19*5e7646d2SAndroid Build Coastguard Worker */
20*5e7646d2SAndroid Build Coastguard Worker
21*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])22*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line args */
23*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
24*5e7646d2SAndroid Build Coastguard Worker {
25*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
26*5e7646d2SAndroid Build Coastguard Worker const char *ppdfile = NULL;/* PPD filename */
27*5e7646d2SAndroid Build Coastguard Worker ppd_file_t *ppd; /* PPD file */
28*5e7646d2SAndroid Build Coastguard Worker int num_options = 0;/* Number of options */
29*5e7646d2SAndroid Build Coastguard Worker cups_option_t *options = NULL;/* Options */
30*5e7646d2SAndroid Build Coastguard Worker _ppd_cache_t *pc; /* PPD cache and PWG mapping data */
31*5e7646d2SAndroid Build Coastguard Worker int num_finishings, /* Number of finishing options */
32*5e7646d2SAndroid Build Coastguard Worker finishings[20]; /* Finishing options */
33*5e7646d2SAndroid Build Coastguard Worker ppd_choice_t *ppd_bin; /* OutputBin value */
34*5e7646d2SAndroid Build Coastguard Worker const char *output_bin; /* output-bin value */
35*5e7646d2SAndroid Build Coastguard Worker
36*5e7646d2SAndroid Build Coastguard Worker if (argc < 2)
37*5e7646d2SAndroid Build Coastguard Worker {
38*5e7646d2SAndroid Build Coastguard Worker puts("Usage: ./testcache filename.ppd [name=value ... name=value]");
39*5e7646d2SAndroid Build Coastguard Worker return (1);
40*5e7646d2SAndroid Build Coastguard Worker }
41*5e7646d2SAndroid Build Coastguard Worker
42*5e7646d2SAndroid Build Coastguard Worker ppdfile = argv[1];
43*5e7646d2SAndroid Build Coastguard Worker if ((ppd = ppdOpenFile(ppdfile)) == NULL)
44*5e7646d2SAndroid Build Coastguard Worker {
45*5e7646d2SAndroid Build Coastguard Worker ppd_status_t err; /* Last error in file */
46*5e7646d2SAndroid Build Coastguard Worker int line; /* Line number in file */
47*5e7646d2SAndroid Build Coastguard Worker
48*5e7646d2SAndroid Build Coastguard Worker
49*5e7646d2SAndroid Build Coastguard Worker err = ppdLastError(&line);
50*5e7646d2SAndroid Build Coastguard Worker
51*5e7646d2SAndroid Build Coastguard Worker fprintf(stderr, "Unable to open \"%s\": %s on line %d\n", ppdfile, ppdErrorString(err), line);
52*5e7646d2SAndroid Build Coastguard Worker return (1);
53*5e7646d2SAndroid Build Coastguard Worker }
54*5e7646d2SAndroid Build Coastguard Worker
55*5e7646d2SAndroid Build Coastguard Worker if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
56*5e7646d2SAndroid Build Coastguard Worker {
57*5e7646d2SAndroid Build Coastguard Worker fprintf(stderr, "Unable to create PPD cache from \"%s\".\n", ppdfile);
58*5e7646d2SAndroid Build Coastguard Worker return (1);
59*5e7646d2SAndroid Build Coastguard Worker }
60*5e7646d2SAndroid Build Coastguard Worker
61*5e7646d2SAndroid Build Coastguard Worker for (i = 2; i < argc; i ++)
62*5e7646d2SAndroid Build Coastguard Worker num_options = cupsParseOptions(argv[i], num_options, &options);
63*5e7646d2SAndroid Build Coastguard Worker
64*5e7646d2SAndroid Build Coastguard Worker ppdMarkDefaults(ppd);
65*5e7646d2SAndroid Build Coastguard Worker cupsMarkOptions(ppd, num_options, options);
66*5e7646d2SAndroid Build Coastguard Worker
67*5e7646d2SAndroid Build Coastguard Worker num_finishings = _ppdCacheGetFinishingValues(ppd, pc, (int)sizeof(finishings) / sizeof(finishings[0]), finishings);
68*5e7646d2SAndroid Build Coastguard Worker
69*5e7646d2SAndroid Build Coastguard Worker if (num_finishings > 0)
70*5e7646d2SAndroid Build Coastguard Worker {
71*5e7646d2SAndroid Build Coastguard Worker fputs("finishings=", stdout);
72*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < num_finishings; i ++)
73*5e7646d2SAndroid Build Coastguard Worker if (i)
74*5e7646d2SAndroid Build Coastguard Worker printf(",%d", finishings[i]);
75*5e7646d2SAndroid Build Coastguard Worker else
76*5e7646d2SAndroid Build Coastguard Worker printf("%d", finishings[i]);
77*5e7646d2SAndroid Build Coastguard Worker fputs("\n", stdout);
78*5e7646d2SAndroid Build Coastguard Worker }
79*5e7646d2SAndroid Build Coastguard Worker
80*5e7646d2SAndroid Build Coastguard Worker if ((ppd_bin = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL &&
81*5e7646d2SAndroid Build Coastguard Worker (output_bin = _ppdCacheGetBin(pc, ppd_bin->choice)) != NULL)
82*5e7646d2SAndroid Build Coastguard Worker printf("output-bin=\"%s\"\n", output_bin);
83*5e7646d2SAndroid Build Coastguard Worker
84*5e7646d2SAndroid Build Coastguard Worker return (0);
85*5e7646d2SAndroid Build Coastguard Worker }
86