#include <stdio.h>
#include <cups/string.h>
#include <cups/cups.h>
static int cat_ppd(const char *uri);
static int list_ppds(const char *name);
static const char *models[][2] =
{
{ "foojet.ppd", "Foo Printer" },
{ "barjet.ppd", "Bar Printer" },
{ "foobar.ppd", "Foo/Bar Multifunction Printer" }
};
int
main(int argc,
char *argv[])
{
if (argc == 2 && !strcmp(argv[1], "list"))
return (list_ppds(argv[0]));
else if (argc == 3 && !strcmp(argv[1], "cat"))
return (cat_ppd(argv[2]));
fprintf(stderr, "ERROR: Usage: %s cat URI\n", argv[0]);
fprintf(stderr, "ERROR: Usage: %s list\n", argv[0]);
return (1);
}
static int
cat_ppd(const char *uri)
{
int i;
char scheme[255],
userpass[255],
hostname[255],
resource[1024];
int port;
const char *name;
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
userpass, sizeof(userpass), hostname, sizeof(hostname),
&port, resource, sizeof(resource)) < HTTP_URI_OK)
{
fprintf(stderr, "ERROR: Bad URI \"%s\"!\n", uri);
return (1);
}
name = resource + 1;
for (i = 0 ; i < (int)(sizeof(models) / sizeof(models[0])); i ++)
if (!strcmp(name, models[i][0]))
{
puts("*PPD-Adobe: \"4.3\"");
puts("*LanguageEncoding: ISOLatin1");
puts("*LanguageVersion: English");
puts("*Manufacturer: \"Test\"");
puts("*FileVersion: \"1.0\"");
puts("*FormatVersion: \"4.3\"");
puts("*PSVersion: \"(3010) 1\"");
printf("*PCFileName: \"%s\"\n", models[i][0]);
printf("*Product: \"(%s)\"\n", models[i][1]);
printf("*ModelName: \"Test %s\"\n", models[i][1]);
printf("*NickName: \"Test %s\"\n", models[i][1]);
printf("*ShortNickName: \"Test %s\"\n", models[i][1]);
puts("*OpenUI PageSize: PickOne");
puts("*OrderDependency: 10 AnySetup *PageSetup");
puts("*DefaultPageSize: Letter");
puts("*PageSize Letter: \"<</PageSize[612 792]>>setpagedevice\"");
puts("*PageSize A4: \"<</PageSize[585 842]>>setpagedevice\"");
puts("*CloseUI: *PageSize");
puts("*OpenUI PageRegion: PickOne");
puts("*OrderDependency: 10 AnySetup *PageRegion");
puts("*DefaultPageRegion: Letter");
puts("*PageRegion Letter: \"<</PageRegion[612 792]>>setpagedevice\"");
puts("*PageRegion A4: \"<</PageRegion[585 842]>>setpagedevice\"");
puts("*CloseUI: *PageRegion");
puts("*DefaultImageableArea: Letter");
puts("*ImageableArea Letter: \"0 0 612 792\"");
puts("*ImageableArea A4: \"0 0 595 842\"");
puts("*DefaultPaperDimension: Letter");
puts("*PaperDimension Letter: \"612 792\"");
puts("*PaperDimension A4: \"595 842\"");
return (0);
}
fprintf(stderr, "ERROR: Unknown URI \"%s\"!\n", uri);
return (1);
}
static int
list_ppds(const char *name)
{
int i;
const char *base;
if ((base = strrchr(name, '/')) != NULL)
base ++;
else
base = name;
for (i = 0; i < (int)(sizeof(models) / sizeof(models[0])); i ++)
printf("\"%s:///%s\" en \"Test\" \"Test %s\" \"1284 device id\"\n",
base, models[i][0], models[i][1]);
return (0);
}