| // | |
| // Sample/test driver interface program for libppd. | |
| // | |
| // This program handles listing and installing both static PPD files | |
| // in CUPS_DATADIR/model and dynamically generated PPD files using | |
| // the driver helper programs in CUPS_SERVERBIN/driver. | |
| // | |
| // Copyright 2007-2010 by Apple Inc. | |
| // Copyright 1997-2006 by Easy Software Products. | |
| // | |
| // Licensed under Apache License v2.0. See the file "LICENSE" for more | |
| // information. | |
| // | |
| // Contents: | |
| // | |
| // main() - Enumerate or display PPD files. | |
| // cat_ppd() - Display a PPD file. | |
| // list_ppds() - List PPDs. | |
| // | |
| // Compile with:gcc -o testdriver testdriver.c -I.. -lppd -lcups | |
| // | |
| // | |
| // Include necessary headers... | |
| // | |
| #include <ppd/ppd.h> | |
| #include <ppd/string-private.h> | |
| #include <cups/cups.h> | |
| // | |
| // Local functions... | |
| // | |
| static int cat_ppd(const char *uri); | |
| static int list_ppds(const char *name); | |
| // | |
| // Sample data... | |
| // | |
| static const char *models[][2] = | |
| { | |
| { "foojet.ppd", "Foo Printer" }, | |
| { "barjet.ppd", "Bar Printer" }, | |
| { "foobar.ppd", "Foo/Bar Multifunction Printer" } | |
| }; | |
| // | |
| // 'main()' - Enumerate or display PPD files. | |
| // | |
| int // O - Exit status | |
| main(int argc, // I - Number of command-line args | |
| char *argv[]) // I - Command-line arguments | |
| { | |
| 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); | |
| } | |
| // | |
| // 'cat_ppd()' - Display a PPD file. | |
| // | |
| static int // O - Exit status | |
| cat_ppd(const char *uri) // I - PPD URI | |
| { | |
| int i; // Looping var | |
| char scheme[255], // URI scheme | |
| userpass[255], // Username/password (unused) | |
| hostname[255], // Hostname (unused) | |
| resource[1024]; // Resource name | |
| int port; // Port (unused) | |
| const char *name; // Pointer to name in URI | |
| 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])) | |
| { | |
| // | |
| // Actually display the PPD file... | |
| // | |
| 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); | |
| } | |
| // | |
| // 'list_ppds()' - List PPDs. | |
| // | |
| static int // O - Exit status | |
| list_ppds(const char *name) // I - Program name | |
| { | |
| int i; // Looping var | |
| const char *base; // Base name of program | |
| 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); | |
| } |