1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
* "$Id: testconflicts.c 3755 2012-03-30 05:59:14Z msweet $"
*
* PPD constraint test program for CUPS.
*
* Copyright 2008-2012 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
* which should have been included with this file. If this file is
* file is missing or damaged, see the license at "http://www.cups.org/".
*
* This file is subject to the Apple OS-Developed Software exception.
*
* Contents:
*
* main() - Main entry.
*/
/*
* Include necessary headers...
*/
#include "cups.h"
#include "ppd.h"
#include "string-private.h"
/*
* 'main()' - Main entry.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
ppd_file_t *ppd; /* PPD file loaded from disk */
char line[256], /* Input buffer */
*ptr, /* Pointer into buffer */
*optr, /* Pointer to first option name */
*cptr; /* Pointer to first choice */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
char *option, /* Current option */
*choice; /* Current choice */
if (argc != 2)
{
puts("Usage: testconflicts filename.ppd");
return (1);
}
if ((ppd = ppdOpenFile(argv[1])) == NULL)
{
ppd_status_t err; /* Last error in file */
int linenum; /* Line number in file */
err = ppdLastError(&linenum);
printf("Unable to open PPD file \"%s\": %s on line %d\n", argv[1],
ppdErrorString(err), linenum);
return (1);
}
ppdMarkDefaults(ppd);
option = NULL;
choice = NULL;
for (;;)
{
num_options = 0;
options = NULL;
if (!cupsResolveConflicts(ppd, option, choice, &num_options, &options))
puts("Unable to resolve conflicts!");
else if ((!option && num_options > 0) || (option && num_options > 1))
{
fputs("Resolved conflicts with the following options:\n ", stdout);
for (i = 0; i < num_options; i ++)
if (!option || _cups_strcasecmp(option, options[i].name))
printf(" %s=%s", options[i].name, options[i].value);
putchar('\n');
cupsFreeOptions(num_options, options);
}
if (option)
{
free(option);
option = NULL;
}
if (choice)
{
free(choice);
choice = NULL;
}
printf("\nNew Option(s): ");
fflush(stdout);
if (!fgets(line, sizeof(line), stdin) || line[0] == '\n')
break;
for (ptr = line; isspace(*ptr & 255); ptr ++);
for (optr = ptr; *ptr && *ptr != '='; ptr ++);
if (!*ptr)
break;
for (*ptr++ = '\0', cptr = ptr; *ptr && !isspace(*ptr & 255); ptr ++);
if (!*ptr)
break;
*ptr++ = '\0';
option = strdup(optr);
choice = strdup(cptr);
num_options = cupsParseOptions(ptr, 0, &options);
ppdMarkOption(ppd, option, choice);
if (cupsMarkOptions(ppd, num_options, options))
puts("Options Conflict!");
cupsFreeOptions(num_options, options);
}
if (option)
free(option);
if (choice)
free(choice);
return (0);
}
/*
* End of "$Id: testconflicts.c 3755 2012-03-30 05:59:14Z msweet $".
*/
|