home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: jef@well.sf.ca.us (Jef Poskanzer)
- Subject: v26i110: pbmplus - Extended Portable Bitmap Toolkit, Patch10dec91, Part05/05
- Message-ID: <1991Dec15.014905.20660@sparky.imd.sterling.com>
- X-Md4-Signature: 7ad8dc1c1fb7ee58f943138250dae404
- Date: Sun, 15 Dec 1991 01:49:05 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: jef@well.sf.ca.us (Jef Poskanzer)
- Posting-number: Volume 26, Issue 110
- Archive-name: pbmplus/patch10dec91/part05
- Environment: UNIX
- Patch-To: pbmplus: Volume 23, Issue 36-59
-
- #!/bin/sh
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file ppm/sldtoppm.c continued
- #
- if test ! -r _shar_seq_.tmp; then
- echo 'Please unpack part 1 first!'
- exit 1
- fi
- (read Scheck
- if test "$Scheck" != 5; then
- echo Please unpack part "$Scheck" next!
- exit 1
- else
- exit 0
- fi
- ) < _shar_seq_.tmp || exit 1
- if test ! -f _shar_wnt_.tmp; then
- echo 'x - still skipping ppm/sldtoppm.c'
- else
- echo 'x - continuing file ppm/sldtoppm.c'
- sed 's/^X//' << 'SHAR_EOF' >> 'ppm/sldtoppm.c' &&
- }
- X
- /* FLOOD -- Draw a filled polygon. */
- X
- static void flood(poly, colour)
- X struct spolygon *poly;
- X int colour;
- {
- X int i;
- X char *handle = ppmd_fill_init();
- X pixel rgbcolour;
- X
- X if (blither) {
- X pm_message("Polygon: %d points, fill type %d, colour %d",
- X poly->npoints, poly->fill, colour);
- X for (i = 0; i < poly->npoints; i++) {
- X pm_message(" Point %d: (%d, %d)", i + 1,
- X poly->pt[i].x, poly->pt[i].y);
- X }
- X }
- X
- X PPM_ASSIGN(rgbcolour,
- X acadcol[colour][0], acadcol[colour][1], acadcol[colour][2]);
- X for (i = 0; i < poly->npoints; i++) {
- X assert(poly->pt[i].x >= 0 && poly->pt[i].x < pixcols);
- X assert(poly->pt[i].y >= 0 && poly->pt[i].y < pixrows);
- X ppmd_line(pixels, pixcols, pixrows, pixmaxval,
- X poly->pt[i].x, iydots - poly->pt[i].y,
- X poly->pt[(i + 1) % poly->npoints].x,
- X iydots - poly->pt[(i + 1) % poly->npoints].y,
- X ppmd_fill_drawproc, handle);
- X }
- X ppmd_fill(pixels, pixcols, pixrows, pixmaxval,
- X handle, PPMD_NULLDRAWPROC, (char *) &rgbcolour);
- }
- X
- /* Main program. */
- X
- int main(argc, argv)
- X int argc;
- X char *argv[];
- {
- X int argn;
- X char *usage = "[-verbose] [-info] [-adjust] [-scale <s>]\n\
- X [-dir] [-lib|-Lib <name>]\n\
- X [-xsize|-width <x>] [-ysize|-height <y>] [sldfile]";
- X int scalespec = FALSE, widspec = FALSE, hgtspec = FALSE, dironly = FALSE,
- X ucasen;
- X char *slobber = (char *) 0; /* Slide library item */
- X
- X ppm_init(&argc, argv);
- X argn = 1;
- X
- X while (argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0') {
- X if (pm_keymatch(argv[argn], "-verbose", 2)) {
- X blither = TRUE;
- X } else if (pm_keymatch(argv[argn], "-adjust", 2)) {
- X adjust = TRUE;
- X } else if (pm_keymatch(argv[argn], "-dir", 2)) {
- X dironly = TRUE;
- X } else if (pm_keymatch(argv[argn], "-info", 2)) {
- X info = TRUE;
- X } else if (pm_keymatch(argv[argn], "-lib", 2)) {
- X if (slobber != (char *) 0) {
- X pm_error("already specified a library item");
- X }
- X ucasen = argv[argn][1] != 'L';
- X argn++;
- X if (argn == argc) {
- X pm_usage(usage);
- X }
- X slobber = argv[argn];
- X } else if (pm_keymatch(argv[argn], "-scale", 2)) {
- X if (scalespec) {
- X pm_error("already specified a scale factor");
- X }
- X argn++;
- X if ((argn == argc) || (sscanf(argv[argn], "%lf", &uscale) != 1))
- X pm_usage(usage);
- X if (uscale <= 0.0) {
- X pm_error("scale factor must be greater than 0");
- X }
- X scalespec = TRUE;
- X } else if (pm_keymatch(argv[argn], "-xsize", 2) ||
- X pm_keymatch(argv[argn], "-width", 2)) {
- X if (widspec) {
- X pm_error("already specified a width/xsize");
- X }
- X argn++;
- X if ((argn == argc) || (sscanf(argv[argn], "%d", &sxsize) != 1))
- X pm_usage(usage);
- X widspec = TRUE;
- X } else if (pm_keymatch(argv[argn], "-ysize", 2) ||
- X pm_keymatch(argv[argn], "-height", 2)) {
- X if (hgtspec) {
- X pm_error("already specified a height/ysize");
- X }
- X argn++;
- X if ((argn == argc) || (sscanf(argv[argn], "%d", &sysize) != 1))
- X pm_usage(usage);
- X hgtspec = TRUE;
- X } else {
- X pm_usage(usage);
- X }
- X argn++;
- X }
- X
- X /* If a file name is specified, open it. Otherwise read from
- X standard input. */
- X
- X if (argn < argc) {
- X slfile = pm_openr(argv[argn]);
- X argn++;
- X } else {
- X slfile = stdin;
- X }
- X
- X if (argn != argc) { /* Extra bogus arguments ? */
- X pm_usage(usage);
- X }
- X
- X /* If we're extracting an item from a slide library, position the
- X input stream to the start of the chosen slide. */
- X
- X if (dironly || (slobber != (char *) 0)) {
- X slidefind(slobber, dironly, ucasen);
- X }
- X
- X if (!dironly) {
- X slider(draw, flood);
- X ppm_writeppm(stdout, pixels, pixcols, pixrows, pixmaxval, FALSE);
- X }
- X pm_close(slfile);
- X pm_close(stdout);
- X exit(0);
- }
- SHAR_EOF
- echo 'File ppm/sldtoppm.c is complete' &&
- chmod 0664 ppm/sldtoppm.c ||
- echo 'restore of ppm/sldtoppm.c failed'
- Wc_c="`wc -c < 'ppm/sldtoppm.c'`"
- test 17951 -eq "$Wc_c" ||
- echo 'ppm/sldtoppm.c: original size 17951, current size' "$Wc_c"
- rm -f _shar_wnt_.tmp
- fi
- rm -f _shar_seq_.tmp
- echo You have unpacked the last part
- exit 0
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-