1/*
2 * PPD cache testing program for CUPS.
3 *
4 * Copyright 2009-2014 by Apple Inc.
5 *
6 * These coded instructions, statements, and computer programs are the
7 * property of Apple Inc. and are protected by Federal copyright
8 * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
9 * which should have been included with this file.  If this file is
10 * missing or damaged, see the license at "http://www.cups.org/".
11 *
12 * This file is subject to the Apple OS-Developed Software exception.
13 */
14
15/*
16 * Include necessary headers...
17 */
18
19#include "ppd-private.h"
20#include "file-private.h"
21
22
23/*
24 * 'main()' - Main entry.
25 */
26
27int					/* O - Exit status */
28main(int  argc,				/* I - Number of command-line args */
29     char *argv[])			/* I - Command-line arguments */
30{
31  int			i;		/* Looping var */
32  const char		*ppdfile = NULL;/* PPD filename */
33  ppd_file_t		*ppd;		/* PPD file */
34  int			num_options = 0;/* Number of options */
35  cups_option_t		*options = NULL;/* Options */
36  _ppd_cache_t		*pc;		/* PPD cache and PWG mapping data */
37  int			num_finishings,	/* Number of finishing options */
38			finishings[20];	/* Finishing options */
39  ppd_choice_t		*ppd_bin;	/* OutputBin value */
40  const char		*output_bin;	/* output-bin value */
41
42  if (argc < 2)
43  {
44    puts("Usage: ./testcache filename.ppd [name=value ... name=value]");
45    return (1);
46  }
47
48  ppdfile = argv[1];
49  if ((ppd = ppdOpenFile(ppdfile)) == NULL)
50  {
51    ppd_status_t err;			/* Last error in file */
52    int		line;			/* Line number in file */
53
54
55    err = ppdLastError(&line);
56
57    fprintf(stderr, "Unable to open \"%s\": %s on line %d\n", ppdfile, ppdErrorString(err), line);
58    return (1);
59  }
60
61  if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
62  {
63    fprintf(stderr, "Unable to create PPD cache from \"%s\".\n", ppdfile);
64    return (1);
65  }
66
67  for (i = 2; i < argc; i ++)
68    num_options = cupsParseOptions(argv[i], num_options, &options);
69
70  ppdMarkDefaults(ppd);
71  cupsMarkOptions(ppd, num_options, options);
72
73  num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)sizeof(finishings) / sizeof(finishings[0]), finishings);
74
75  if (num_finishings > 0)
76  {
77    fputs("finishings=", stdout);
78    for (i = 0; i < num_finishings; i ++)
79      if (i)
80	printf(",%d", finishings[i]);
81      else
82	printf("%d", finishings[i]);
83    fputs("\n", stdout);
84  }
85
86  if ((ppd_bin = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL &&
87      (output_bin = _ppdCacheGetBin(pc, ppd_bin->choice)) != NULL)
88    printf("output-bin=\"%s\"\n", output_bin);
89
90  return (0);
91}
92