home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume26 / pbmplus / patch10dec91 / part05 < prev    next >
Encoding:
Text File  |  1991-12-14  |  5.6 KB  |  190 lines

  1. Newsgroups: comp.sources.misc
  2. From: jef@well.sf.ca.us (Jef Poskanzer)
  3. Subject:  v26i110:  pbmplus - Extended Portable Bitmap Toolkit, Patch10dec91, Part05/05
  4. Message-ID: <1991Dec15.014905.20660@sparky.imd.sterling.com>
  5. X-Md4-Signature: 7ad8dc1c1fb7ee58f943138250dae404
  6. Date: Sun, 15 Dec 1991 01:49:05 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: jef@well.sf.ca.us (Jef Poskanzer)
  10. Posting-number: Volume 26, Issue 110
  11. Archive-name: pbmplus/patch10dec91/part05
  12. Environment: UNIX
  13. Patch-To: pbmplus: Volume 23, Issue 36-59
  14.  
  15. #!/bin/sh
  16. # do not concatenate these parts, unpack them in order with /bin/sh
  17. # file ppm/sldtoppm.c continued
  18. #
  19. if test ! -r _shar_seq_.tmp; then
  20.     echo 'Please unpack part 1 first!'
  21.     exit 1
  22. fi
  23. (read Scheck
  24.  if test "$Scheck" != 5; then
  25.     echo Please unpack part "$Scheck" next!
  26.     exit 1
  27.  else
  28.     exit 0
  29.  fi
  30. ) < _shar_seq_.tmp || exit 1
  31. if test ! -f _shar_wnt_.tmp; then
  32.     echo 'x - still skipping ppm/sldtoppm.c'
  33. else
  34. echo 'x - continuing file ppm/sldtoppm.c'
  35. sed 's/^X//' << 'SHAR_EOF' >> 'ppm/sldtoppm.c' &&
  36. }
  37. X
  38. /*  FLOOD  --  Draw a filled polygon.  */
  39. X
  40. static void flood(poly, colour)
  41. X  struct spolygon *poly;
  42. X  int colour;
  43. {
  44. X    int i;
  45. X    char *handle = ppmd_fill_init();
  46. X    pixel rgbcolour;
  47. X
  48. X    if (blither) {
  49. X        pm_message("Polygon: %d points, fill type %d, colour %d",
  50. X           poly->npoints, poly->fill, colour);
  51. X    for (i = 0; i < poly->npoints; i++) {
  52. X           pm_message("   Point %d:  (%d, %d)", i + 1,
  53. X              poly->pt[i].x, poly->pt[i].y);
  54. X    }
  55. X    }
  56. X
  57. X    PPM_ASSIGN(rgbcolour,
  58. X           acadcol[colour][0], acadcol[colour][1], acadcol[colour][2]);
  59. X    for (i = 0; i < poly->npoints; i++) {
  60. X    assert(poly->pt[i].x >= 0 && poly->pt[i].x < pixcols);
  61. X    assert(poly->pt[i].y >= 0 && poly->pt[i].y < pixrows);
  62. X    ppmd_line(pixels, pixcols, pixrows, pixmaxval,
  63. X          poly->pt[i].x, iydots - poly->pt[i].y, 
  64. X          poly->pt[(i + 1) % poly->npoints].x,
  65. X          iydots - poly->pt[(i + 1) % poly->npoints].y,
  66. X          ppmd_fill_drawproc, handle);
  67. X    }
  68. X    ppmd_fill(pixels, pixcols, pixrows, pixmaxval,
  69. X          handle, PPMD_NULLDRAWPROC, (char *) &rgbcolour);
  70. }
  71. X
  72. /*  Main program. */
  73. X
  74. int main(argc, argv)
  75. X  int argc;
  76. X  char *argv[];
  77. {
  78. X    int argn;
  79. X    char *usage = "[-verbose] [-info] [-adjust] [-scale <s>]\n\
  80. X                 [-dir] [-lib|-Lib <name>]\n\
  81. X                 [-xsize|-width <x>] [-ysize|-height <y>] [sldfile]";
  82. X    int scalespec = FALSE, widspec = FALSE, hgtspec = FALSE, dironly = FALSE,
  83. X    ucasen;
  84. X    char *slobber = (char *) 0;          /* Slide library item */
  85. X
  86. X    ppm_init(&argc, argv);
  87. X    argn = 1;
  88. X
  89. X    while (argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0') {
  90. X        if (pm_keymatch(argv[argn], "-verbose", 2)) {
  91. X        blither = TRUE;
  92. X        } else if (pm_keymatch(argv[argn], "-adjust", 2)) {
  93. X        adjust = TRUE;
  94. X        } else if (pm_keymatch(argv[argn], "-dir", 2)) {
  95. X        dironly = TRUE;
  96. X        } else if (pm_keymatch(argv[argn], "-info", 2)) {
  97. X        info = TRUE;
  98. X        } else if (pm_keymatch(argv[argn], "-lib", 2)) {
  99. X        if (slobber != (char *) 0) {
  100. X                pm_error("already specified a library item");
  101. X        }
  102. X            ucasen = argv[argn][1] != 'L';
  103. X        argn++;
  104. X        if (argn == argc) {
  105. X        pm_usage(usage);
  106. X        }
  107. X        slobber = argv[argn];
  108. X        } else if (pm_keymatch(argv[argn], "-scale", 2)) {
  109. X        if (scalespec) {
  110. X                pm_error("already specified a scale factor");
  111. X        }
  112. X        argn++;
  113. X            if ((argn == argc) || (sscanf(argv[argn], "%lf", &uscale) != 1))
  114. X        pm_usage(usage);
  115. X        if (uscale <= 0.0) {
  116. X                pm_error("scale factor must be greater than 0");
  117. X        }
  118. X        scalespec = TRUE;
  119. X        } else if (pm_keymatch(argv[argn], "-xsize", 2) ||
  120. X                   pm_keymatch(argv[argn], "-width", 2)) {
  121. X        if (widspec) {
  122. X                pm_error("already specified a width/xsize");
  123. X        }
  124. X        argn++;
  125. X            if ((argn == argc) || (sscanf(argv[argn], "%d", &sxsize) != 1))
  126. X        pm_usage(usage);
  127. X        widspec = TRUE;
  128. X        } else if (pm_keymatch(argv[argn], "-ysize", 2) ||
  129. X                   pm_keymatch(argv[argn], "-height", 2)) {
  130. X        if (hgtspec) {
  131. X                pm_error("already specified a height/ysize");
  132. X        }
  133. X        argn++;
  134. X            if ((argn == argc) || (sscanf(argv[argn], "%d", &sysize) != 1))
  135. X        pm_usage(usage);
  136. X        hgtspec = TRUE;
  137. X    } else {
  138. X        pm_usage(usage);
  139. X    }
  140. X    argn++;
  141. X    }
  142. X
  143. X    /* If a file name is specified, open it.  Otherwise read from
  144. X       standard input. */
  145. X
  146. X    if (argn < argc) {
  147. X    slfile = pm_openr(argv[argn]);
  148. X    argn++;
  149. X    } else {
  150. X    slfile = stdin;
  151. X    }
  152. X
  153. X    if (argn != argc) {           /* Extra bogus arguments ? */
  154. X    pm_usage(usage);
  155. X    }
  156. X
  157. X    /* If we're extracting an item from a slide library, position the
  158. X       input stream to the start of the chosen slide. */
  159. X
  160. X    if (dironly || (slobber != (char *) 0)) {
  161. X    slidefind(slobber, dironly, ucasen);
  162. X    }
  163. X
  164. X    if (!dironly) {
  165. X    slider(draw, flood);
  166. X    ppm_writeppm(stdout, pixels, pixcols, pixrows, pixmaxval, FALSE);
  167. X    }
  168. X    pm_close(slfile);
  169. X    pm_close(stdout);
  170. X    exit(0);
  171. }
  172. SHAR_EOF
  173. echo 'File ppm/sldtoppm.c is complete' &&
  174. chmod 0664 ppm/sldtoppm.c ||
  175. echo 'restore of ppm/sldtoppm.c failed'
  176. Wc_c="`wc -c < 'ppm/sldtoppm.c'`"
  177. test 17951 -eq "$Wc_c" ||
  178.     echo 'ppm/sldtoppm.c: original size 17951, current size' "$Wc_c"
  179. rm -f _shar_wnt_.tmp
  180. fi
  181. rm -f _shar_seq_.tmp
  182. echo You have unpacked the last part
  183. exit 0
  184. exit 0 # Just in case...
  185. -- 
  186. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  187. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  188. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  189. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  190.