xref: /aosp_15_r20/external/libcups/cups/testcache.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
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