home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume20 / imagemgc / part37 < prev    next >
Encoding:
Text File  |  1993-07-13  |  50.4 KB  |  1,463 lines

  1. Newsgroups: comp.sources.x
  2. From: cristy@eplrx7.es.duPont.com (Cristy)
  3. Subject: v20i093:  imagemagic - X11 image processing and display, Part37/38
  4. Message-ID: <1993Jul14.232343.23853@sparky.sterling.com>
  5. X-Md4-Signature: be6397075fc3493b9e9d567f342e3b05
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Wed, 14 Jul 1993 23:23:43 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: cristy@eplrx7.es.duPont.com (Cristy)
  12. Posting-number: Volume 20, Issue 93
  13. Archive-name: imagemagic/part37
  14. Environment: X11
  15. Supersedes: imagemagic: Volume 13, Issue 17-37
  16.  
  17. #!/bin/sh
  18. # this is magick.37 (part 37 of ImageMagick)
  19. # do not concatenate these parts, unpack them in order with /bin/sh
  20. # file ImageMagick/encode.c continued
  21. #
  22. if test ! -r _shar_seq_.tmp; then
  23.     echo 'Please unpack part 1 first!'
  24.     exit 1
  25. fi
  26. (read Scheck
  27.  if test "$Scheck" != 37; then
  28.     echo Please unpack part "$Scheck" next!
  29.     exit 1
  30.  else
  31.     exit 0
  32.  fi
  33. ) < _shar_seq_.tmp || exit 1
  34. if test ! -f _shar_wnt_.tmp; then
  35.     echo 'x - still skipping ImageMagick/encode.c'
  36. else
  37. echo 'x - continuing file ImageMagick/encode.c'
  38. sed 's/^X//' << 'SHAR_EOF' >> 'ImageMagick/encode.c' &&
  39. X        if (*event.xclient.data.l == delete_property)
  40. X          if (event.xclient.window == window_info.id)
  41. X            break;
  42. X    if (event.type == Expose)
  43. X      XRefreshWindow(display,&window_info,&event);
  44. X  }
  45. X  /*
  46. X    Free X resources.
  47. X  */
  48. X  XWithdrawWindow(display,window_info.id,window_info.screen);
  49. X  XDestroyWindow(display,window_info.id);
  50. X  XDestroyImage(window_info.ximage);
  51. X  XFreeCursor(display,window_info.cursor);
  52. X  XFreeCursor(display,window_info.busy_cursor);
  53. X  XFree((void *) visual_info);
  54. X  XFree((void *) map_info);
  55. X  XCloseDisplay(display);
  56. X  return(True);
  57. }
  58. X
  59. /*
  60. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  61. %                                                                             %
  62. %                                                                             %
  63. %                                                                             %
  64. %   W r i t e X B M I m a g e                                                 %
  65. %                                                                             %
  66. %                                                                             %
  67. %                                                                             %
  68. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  69. %
  70. %  Procedure WriteXBMImage writes an image to a file in the X bitmap format.
  71. %
  72. %  The format of the WriteXBMImage routine is:
  73. %
  74. %      status=WriteXBMImage(image)
  75. %
  76. %  A description of each parameter follows.
  77. %
  78. %    o status: Function WriteXBMImage return True if the image is written.
  79. %      False is returned is there is a memory shortage or if the image file
  80. %      fails to write.
  81. %
  82. %    o image:  A pointer to a Image structure.
  83. %
  84. %
  85. */
  86. static unsigned int WriteXBMImage(image)
  87. Image
  88. X  *image;
  89. {
  90. X  char
  91. X    name[2048];
  92. X
  93. X  register int
  94. X    i,
  95. X    j,
  96. X    x;
  97. X
  98. X  register char
  99. X    *q;
  100. X
  101. X  register RunlengthPacket
  102. X    *p;
  103. X
  104. X  register unsigned char
  105. X    bit,
  106. X    byte;
  107. X
  108. X  register unsigned short
  109. X    polarity;
  110. X
  111. X  unsigned int
  112. X    count;
  113. X
  114. X  /*
  115. X    Open output image file.
  116. X  */
  117. X  OpenImage(image,"w");
  118. X  if (image->file == (FILE *) NULL)
  119. X    {
  120. X      Warning("unable to open file",image->filename);
  121. X      return(False);
  122. X    }
  123. X  /*
  124. X    Write X bitmap header.
  125. X  */
  126. X  (void) strcpy(name,image->filename);
  127. X  q=name;
  128. X  while ((*q != '.') && (*q != '\0'))
  129. X    q++;
  130. X  if (*q == '.')
  131. X    *q='\0';
  132. X  (void) fprintf(image->file,"#define %s_width %u\n",name,image->columns);
  133. X  (void) fprintf(image->file,"#define %s_height %u\n",name,image->rows);
  134. X  (void) fprintf(image->file,"static char %s_bits[] = {\n",name);
  135. X  (void) fprintf(image->file," ");
  136. X  /*
  137. X    Convert MIFF to X bitmap pixels.
  138. X  */
  139. X  QuantizeImage(image,2,8,False,GRAYColorspace,True);
  140. X  p=image->pixels;
  141. X  polarity=(Intensity(image->colormap[0]) >
  142. X    Intensity(image->colormap[1]) ? 0 : 1);
  143. X  bit=0;
  144. X  byte=0;
  145. X  count=0;
  146. X  x=0;
  147. X  (void) fprintf(image->file," ");
  148. X  for (i=0; i < image->packets; i++)
  149. X  {
  150. X    for (j=0; j <= ((int) p->length); j++)
  151. X    {
  152. X      byte>>=1;
  153. X      if (p->index == polarity)
  154. X        byte|=0x80;
  155. X      bit++;
  156. X      if (bit == 8)
  157. X        {
  158. X          /*
  159. X            Write a bitmap byte to the image file.
  160. X          */
  161. X          (void) fprintf(image->file,"0x%02x, ",~byte & 0xff);
  162. X          count++;
  163. X          if (count == 12)
  164. X            {
  165. X              (void) fprintf(image->file,"\n  ");
  166. X              count=0;
  167. X            };
  168. X          bit=0;
  169. X          byte=0;
  170. X        }
  171. X      x++;
  172. X      if (x == image->columns)
  173. X        {
  174. X          if (bit != 0)
  175. X            {
  176. X              /*
  177. X                Write a bitmap byte to the image file.
  178. X              */
  179. X              byte>>=(8-bit);
  180. X              (void) fprintf(image->file,"0x%02x, ",~byte & 0xff);
  181. X              count++;
  182. X              if (count == 12)
  183. X                {
  184. X                  (void) fprintf(image->file,"\n  ");
  185. X                  count=0;
  186. X                };
  187. X              bit=0;
  188. X              byte=0;
  189. X            };
  190. X          x=0;
  191. X        }
  192. X    }
  193. X    p++;
  194. X  }
  195. X  (void) fprintf(image->file,"};\n");
  196. X  CloseImage(image);
  197. X  return(True);
  198. }
  199. X
  200. /*
  201. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  202. %                                                                             %
  203. %                                                                             %
  204. %                                                                             %
  205. %   W r i t e X C I m a g e                                                   %
  206. %                                                                             %
  207. %                                                                             %
  208. %                                                                             %
  209. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  210. %
  211. %  Function WriteXCImage writes an image in the X constant image format.
  212. %
  213. %  The format of the WriteXCImage routine is:
  214. %
  215. %      status=WriteXCImage(image)
  216. %
  217. %  A description of each parameter follows.
  218. %
  219. %    o status: Function WriteXCImage return True if the image is written.
  220. %      False is returned is there is a memory shortage or if the image file
  221. %      fails to write.
  222. %
  223. %    o image:  A pointer to a Image structure.
  224. %
  225. %
  226. */
  227. static unsigned int WriteXCImage(image)
  228. Image
  229. X  *image;
  230. {
  231. X  unsigned int
  232. X    status;
  233. X
  234. X  Warning("Cannot write XC images",image->filename);
  235. X  status=WriteMIFFImage(image);
  236. X  return(status);
  237. }
  238. X
  239. /*
  240. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  241. %                                                                             %
  242. %                                                                             %
  243. %                                                                             %
  244. %   W r i t e Y U V I m a g e                                                 %
  245. %                                                                             %
  246. %                                                                             %
  247. %                                                                             %
  248. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  249. %
  250. %  Function WriteYUVImage writes an image to a file in Y, U, and V rasterfile
  251. %  format.  U and V, normally -0.5 through 0.5, is normalized to the range
  252. %  0 through 255 to fit within a byte.
  253. %
  254. %  The format of the WriteYUVImage routine is:
  255. %
  256. %      status=WriteYUVImage(image,interlace)
  257. %
  258. %  A description of each parameter follows.
  259. %
  260. %    o status: Function WriteYUVImage return True if the image is written.
  261. %      False is returned is there is a memory shortage or if the image file
  262. %      fails to write.
  263. %
  264. %    o image:  A pointer to a Image structure.
  265. %
  266. %    o interlace:  An unsigned integer that specifies the interlacing
  267. %      scheme.
  268. %
  269. %
  270. */
  271. static unsigned int WriteYUVImage(image,interlace)
  272. Image
  273. X  *image;
  274. X
  275. unsigned int
  276. X  interlace;
  277. {
  278. X  register int
  279. X    i,
  280. X    j;
  281. X
  282. X  register RunlengthPacket
  283. X    *p;
  284. X
  285. X  register unsigned char
  286. X    *q;
  287. X
  288. X  unsigned char
  289. X    *yuv_pixels;
  290. X
  291. X  /*
  292. X    Open output image file.
  293. X  */
  294. X  OpenImage(image,"w");
  295. X  if (image->file == (FILE *) NULL)
  296. X    {
  297. X      Warning("unable to open file",image->filename);
  298. X      return(False);
  299. X    }
  300. X  /*
  301. X    Convert MIFF to YUV raster pixels.
  302. X  */
  303. X  yuv_pixels=(unsigned char *)
  304. X    malloc(3*image->columns*image->rows*sizeof(unsigned char));
  305. X  if (yuv_pixels == (unsigned char *) NULL)
  306. X    {
  307. X      Warning("unable to allocate memory",(char *) NULL);
  308. X      return(False);
  309. X    }
  310. X  RGBTransformImage(image,YUVColorspace);
  311. X  q=yuv_pixels;
  312. X  switch (interlace)
  313. X  {
  314. X    case NoneInterlace:
  315. X    default:
  316. X    {
  317. X      /*
  318. X        No interlacing:  YUVYUVYUVYUVYUVYUV...
  319. X      */
  320. X      p=image->pixels;
  321. X      for (i=0; i < image->packets; i++)
  322. X      {
  323. X        for (j=0; j <= ((int) p->length); j++)
  324. X        {
  325. X          *q++=p->red;
  326. X          *q++=p->green;
  327. X          *q++=p->blue;
  328. X        }
  329. X        p++;
  330. X      }
  331. X      break;
  332. X    }
  333. X    case LineInterlace:
  334. X    {
  335. X      register int
  336. X        x,
  337. X        y;
  338. X
  339. X      /*
  340. X        Line interlacing:  YYY...UUU...VVV...YYY...UUU...VVV...
  341. X      */
  342. X      if (!UncompressImage(image))
  343. X        return(False);
  344. X      for (y=0; y < image->rows; y++)
  345. X      {
  346. X        p=image->pixels+(y*image->columns);
  347. X        for (x=0; x < image->columns; x++)
  348. X        {
  349. X          *q++=p->red;
  350. X          p++;
  351. X        }
  352. X        p=image->pixels+(y*image->columns);
  353. X        for (x=0; x < image->columns; x++)
  354. X        {
  355. X          *q++=p->green;
  356. X          p++;
  357. X        }
  358. X        p=image->pixels+(y*image->columns);
  359. X        for (x=0; x < image->columns; x++)
  360. X        {
  361. X          *q++=p->blue;
  362. X          p++;
  363. X        }
  364. X      }
  365. X      break;
  366. X    }
  367. X    case PlaneInterlace:
  368. X    {
  369. X      /*
  370. X        Plane interlacing:  YYYYYY...UUUUUU...VVVVVV...
  371. X      */
  372. X      p=image->pixels;
  373. X      for (i=0; i < image->packets; i++)
  374. X      {
  375. X        for (j=0; j <= ((int) p->length); j++)
  376. X          *q++=p->red;
  377. X        p++;
  378. X      }
  379. X      p=image->pixels;
  380. X      for (i=0; i < image->packets; i++)
  381. X      {
  382. X        for (j=0; j <= ((int) p->length); j++)
  383. X          *q++=p->green;
  384. X        p++;
  385. X      }
  386. X      p=image->pixels;
  387. X      for (i=0; i < image->packets; i++)
  388. X      {
  389. X        for (j=0; j <= ((int) p->length); j++)
  390. X          *q++=p->blue;
  391. X        p++;
  392. X      }
  393. X      break;
  394. X    }
  395. X  }
  396. X  (void) fwrite((char *) yuv_pixels,3,(int) (image->columns*image->rows),
  397. X    image->file);
  398. X  (void) free((char *) yuv_pixels);
  399. X  TransformRGBImage(image,YUVColorspace);
  400. X  CloseImage(image);
  401. X  return(True);
  402. }
  403. X
  404. /*
  405. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  406. %                                                                             %
  407. %                                                                             %
  408. %                                                                             %
  409. %   W r i t e X W D I m a g e                                                 %
  410. %                                                                             %
  411. %                                                                             %
  412. %                                                                             %
  413. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  414. %
  415. %  Function WriteXWDImage writes an image to a file in X window dump
  416. %  rasterfile format.
  417. %
  418. %  The format of the WriteXWDImage routine is:
  419. %
  420. %      status=WriteXWDImage(image)
  421. %
  422. %  A description of each parameter follows.
  423. %
  424. %    o status: Function WriteXWDImage return True if the image is written.
  425. %      False is returned is there is a memory shortage or if the image file
  426. %      fails to write.
  427. %
  428. %    o image:  A pointer to a Image structure.
  429. %
  430. %
  431. */
  432. static unsigned int WriteXWDImage(image)
  433. Image
  434. X  *image;
  435. {
  436. X  int
  437. X    x;
  438. X
  439. X  register int
  440. X    i,
  441. X    j;
  442. X
  443. X  register RunlengthPacket
  444. X    *p;
  445. X
  446. X  register unsigned char
  447. X    *q;
  448. X
  449. X  unsigned char
  450. X    *xwd_pixels;
  451. X
  452. X  unsigned int
  453. X    scanline_pad;
  454. X
  455. X  unsigned long
  456. X    packets;
  457. X
  458. X  XWDFileHeader
  459. X    xwd_header;
  460. X
  461. X  /*
  462. X    Open output image file.
  463. X  */
  464. X  OpenImage(image,"w");
  465. X  if (image->file == (FILE *) NULL)
  466. X    {
  467. X      Warning("unable to open file",image->filename);
  468. X      return(False);
  469. X    }
  470. X  /*
  471. X    Initialize XWD file header.
  472. X  */
  473. X  xwd_header.header_size=100+strlen(image->filename)+1;
  474. X  xwd_header.file_version=(unsigned long) XWD_FILE_VERSION;
  475. X  xwd_header.pixmap_format=(unsigned long) ZPixmap;
  476. X  xwd_header.pixmap_depth=(unsigned long)
  477. X    (image->class == DirectClass ? 24 : 8);
  478. X  xwd_header.pixmap_width=(unsigned long) image->columns;
  479. X  xwd_header.pixmap_height=(unsigned long) image->rows;
  480. X  xwd_header.xoffset=(unsigned long) 0;
  481. X  xwd_header.byte_order=(unsigned long) MSBFirst;
  482. X  xwd_header.bitmap_unit=(unsigned long) (image->class == DirectClass ? 32 : 8);
  483. X  xwd_header.bitmap_bit_order=(unsigned long) MSBFirst;
  484. X  xwd_header.bitmap_pad=(unsigned long) (image->class == DirectClass ? 32 : 8);
  485. X  xwd_header.bits_per_pixel=(unsigned long)
  486. X    (image->class == DirectClass ? 24 : 8);
  487. X  xwd_header.bytes_per_line=(unsigned long) ((((xwd_header.bits_per_pixel*
  488. X    xwd_header.pixmap_width)+((xwd_header.bitmap_pad)-1))/
  489. X    (xwd_header.bitmap_pad))*((xwd_header.bitmap_pad) >> 3));
  490. X  xwd_header.visual_class=(unsigned long)
  491. X    (image->class == DirectClass ? DirectColor : PseudoColor);
  492. X  xwd_header.red_mask=(unsigned long)
  493. X    (image->class == DirectClass ? 0xff0000 : 0);
  494. X  xwd_header.green_mask=(unsigned long)
  495. X    (image->class == DirectClass ? 0xff00 : 0);
  496. X  xwd_header.blue_mask=(unsigned long) (image->class == DirectClass ? 0xff : 0);
  497. X  xwd_header.bits_per_rgb=(unsigned long)
  498. X    (image->class == DirectClass ? 24 : 8);
  499. X  xwd_header.colormap_entries=(unsigned long)
  500. X    (image->class == DirectClass ? 256 : image->colors);
  501. X  xwd_header.ncolors=(image->class == DirectClass ? 0 : image->colors);
  502. X  xwd_header.window_width=(unsigned long) image->columns;
  503. X  xwd_header.window_height=(unsigned long) image->rows;
  504. X  xwd_header.window_x=0;
  505. X  xwd_header.window_y=0;
  506. X  xwd_header.window_bdrwidth=(unsigned long) 0;
  507. X  /*
  508. X    Write XWD header.
  509. X  */
  510. X  MSBFirstWriteLong(xwd_header.header_size,image->file);
  511. X  MSBFirstWriteLong(xwd_header.file_version,image->file);
  512. X  MSBFirstWriteLong(xwd_header.pixmap_format,image->file);
  513. X  MSBFirstWriteLong(xwd_header.pixmap_depth,image->file);
  514. X  MSBFirstWriteLong(xwd_header.pixmap_width,image->file);
  515. X  MSBFirstWriteLong(xwd_header.pixmap_height,image->file);
  516. X  MSBFirstWriteLong(xwd_header.xoffset,image->file);
  517. X  MSBFirstWriteLong(xwd_header.byte_order,image->file);
  518. X  MSBFirstWriteLong(xwd_header.bitmap_unit,image->file);
  519. X  MSBFirstWriteLong(xwd_header.bitmap_bit_order,image->file);
  520. X  MSBFirstWriteLong(xwd_header.bitmap_pad,image->file);
  521. X  MSBFirstWriteLong(xwd_header.bits_per_pixel,image->file);
  522. X  MSBFirstWriteLong(xwd_header.bytes_per_line,image->file);
  523. X  MSBFirstWriteLong(xwd_header.visual_class,image->file);
  524. X  MSBFirstWriteLong(xwd_header.red_mask,image->file);
  525. X  MSBFirstWriteLong(xwd_header.green_mask,image->file);
  526. X  MSBFirstWriteLong(xwd_header.blue_mask,image->file);
  527. X  MSBFirstWriteLong(xwd_header.bits_per_rgb,image->file);
  528. X  MSBFirstWriteLong(xwd_header.colormap_entries,image->file);
  529. X  MSBFirstWriteLong(xwd_header.ncolors,image->file);
  530. X  MSBFirstWriteLong(xwd_header.window_width,image->file);
  531. X  MSBFirstWriteLong(xwd_header.window_height,image->file);
  532. X  MSBFirstWriteLong(xwd_header.window_x,image->file);
  533. X  MSBFirstWriteLong(xwd_header.window_y,image->file);
  534. X  MSBFirstWriteLong(xwd_header.window_bdrwidth,image->file);
  535. X  (void) fwrite((char *) image->filename,1,strlen(image->filename)+1,
  536. X    image->file);
  537. X  if (image->class == PseudoClass)
  538. X    {
  539. X      unsigned long
  540. X        lsb_first;
  541. X
  542. X      XColor
  543. X        *colors;
  544. X
  545. X      /*
  546. X        Dump colormap to file.
  547. X      */
  548. X      colors=(XColor *) malloc(image->colors*sizeof(XColor));
  549. X      if (colors == (XColor *) NULL)
  550. X        {
  551. X          Warning("unable to allocate memory",(char *) NULL);
  552. X          return(False);
  553. X        }
  554. X      lsb_first=1;
  555. X      for (i=0; i < image->colors; i++)
  556. X      {
  557. X        colors[i].pixel=i;
  558. X        colors[i].red=image->colormap[i].red << 8;
  559. X        colors[i].green=image->colormap[i].green << 8;
  560. X        colors[i].blue=image->colormap[i].blue << 8;
  561. X        colors[i].flags=DoRed | DoGreen | DoBlue;
  562. X        colors[i].pad=0;
  563. X        if (*(char *) &lsb_first)
  564. X          {
  565. X            MSBFirstOrderLong((char *) &colors[i].pixel,sizeof(long));
  566. X            MSBFirstOrderShort((char *) &colors[i].red,3*sizeof(short));
  567. X          }
  568. X      }
  569. X      (void) fwrite((char *) colors,sizeof(XColor),(int) image->colors,
  570. X        image->file);
  571. X      (void) free((char *) colors);
  572. X    }
  573. X  /*
  574. X    Convert MIFF to XWD raster pixels.
  575. X  */
  576. X  packets=xwd_header.bytes_per_line*xwd_header.pixmap_height;
  577. X  xwd_pixels=(unsigned char *)
  578. X    malloc((unsigned int) packets*sizeof(unsigned char));
  579. X  if (xwd_pixels == (unsigned char *) NULL)
  580. X    {
  581. X      Warning("unable to allocate memory",(char *) NULL);
  582. X      return(False);
  583. X    }
  584. X  scanline_pad=(unsigned int) (xwd_header.bytes_per_line-
  585. X    ((xwd_header.pixmap_width*xwd_header.bits_per_pixel) >> 3));
  586. X  x=0;
  587. X  p=image->pixels;
  588. X  q=xwd_pixels;
  589. X  for (i=0; i < image->packets; i++)
  590. X  {
  591. X    for (j=0; j <= ((int) p->length); j++)
  592. X    {
  593. X      if (image->class == PseudoClass)
  594. X        *q++=p->index;
  595. X      else
  596. X        {
  597. X          *q++=p->red;
  598. X          *q++=p->green;
  599. X          *q++=p->blue;
  600. X        }
  601. X      x++;
  602. X      if (x == image->columns)
  603. X        {
  604. X          q+=scanline_pad;
  605. X          x=0;
  606. X        }
  607. X    }
  608. X    p++;
  609. X  }
  610. X  /*
  611. X    Dump pixels to file.
  612. X  */
  613. X  (void) fwrite((char *) xwd_pixels,1,(int) packets,image->file);
  614. X  (void) free((char *) xwd_pixels);
  615. X  CloseImage(image);
  616. X  return(True);
  617. }
  618. X
  619. /*
  620. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  621. %                                                                             %
  622. %                                                                             %
  623. %                                                                             %
  624. %   W r i t e A l i e n I m a g e                                             %
  625. %                                                                             %
  626. %                                                                             %
  627. %                                                                             %
  628. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  629. %
  630. %  Function WriteImage writes an image to a file.  You can specify a
  631. %  particular image format by prefixing the file with the image type and a
  632. %  colon (i.e. ps:image) or specify the image type as the filename suffix
  633. %  (i.e. image.ps).
  634. %
  635. %  The format of the WriteImage routine is:
  636. %
  637. %      status=WriteImage(image_info,image)
  638. %
  639. %  A description of each parameter follows:
  640. %
  641. %    o status: Function WriteImage return True if the image is written.
  642. %      False is returned is there is a memory shortage or if the image file
  643. %      fails to write.
  644. %
  645. %    o image_info: Specifies a pointer to an ImageInfo structure.
  646. %
  647. %    o image: A pointer to a Image structure.
  648. %
  649. %
  650. */
  651. unsigned int WriteImage(image_info,image)
  652. ImageInfo
  653. X  *image_info;
  654. X
  655. Image
  656. X  *image;
  657. {
  658. X  static char
  659. X    *ImageTypes[]=
  660. X    {
  661. X      "ALPHA",
  662. X      "AVS",
  663. X      "BMP",
  664. X      "CMYK",
  665. X      "EPS",
  666. X      "FAX",
  667. X      "GIF",
  668. X      "GRAY",
  669. X      "HISTOGRAM",
  670. X      "IRIS",
  671. X      "JPEG",
  672. X      "JPG",
  673. X      "MIFF",
  674. X      "MTV",
  675. X      "PBM",
  676. X      "PCX",
  677. X      "PGM",
  678. X      "PICT",
  679. X      "PPM",
  680. X      "PNM",
  681. X      "PS",
  682. X      "PS2",
  683. X      "RAS",
  684. X      "RGB",
  685. X      "RLE",
  686. X      "SUN",
  687. X      "TGA",
  688. X      "TEXT",
  689. X      "TIFF",
  690. X      "VICAR",
  691. X      "VIFF",
  692. X      "X",
  693. X      "XBM",
  694. X      "XC",
  695. X      "XV",
  696. X      "XWD",
  697. X      "YUV",
  698. X      (char *) NULL,
  699. X    };
  700. X
  701. X  char
  702. X    magick[12],
  703. X    *p;
  704. X
  705. X  Image
  706. X    encode_image;
  707. X
  708. X  register char
  709. X    c,
  710. X    *q;
  711. X
  712. X  register int
  713. X    i;
  714. X
  715. X  unsigned int
  716. X    status;
  717. X
  718. X  /*
  719. X    Look for 'image.format' in filename.
  720. X  */
  721. X  encode_image=(*image);
  722. X  p=encode_image.filename+strlen(encode_image.filename)-1;
  723. X  while ((*p != '.') && (p > encode_image.filename))
  724. X    p--;
  725. X  if ((*p == '.') && (strlen(p) < sizeof(magick)))
  726. X    {
  727. X      /*
  728. X        User specified image format.
  729. X      */
  730. X      (void) strcpy(magick,p+1);
  731. X      for (q=magick; *q != '\0'; q++)
  732. X      {
  733. X        c=(*q);
  734. X        if (isascii(c) && islower(c))
  735. X          *q=toupper(c);
  736. X      }
  737. X      for (i=0; ImageTypes[i] != (char *) NULL; i++)
  738. X        if (strcmp(magick,ImageTypes[i]) == 0)
  739. X          {
  740. X            (void) strcpy(encode_image.magick,magick);
  741. X            break;
  742. X          }
  743. X    }
  744. X  /*
  745. X    Look for explicit 'format:image' in filename.
  746. X  */
  747. X  p=encode_image.filename;
  748. X  while ((*p != ':') && (*p != '\0'))
  749. X    p++;
  750. X  if ((*p == ':') && ((p-encode_image.filename) < sizeof(magick)))
  751. X    {
  752. X      /*
  753. X        User specified image format.
  754. X      */
  755. X      (void) strncpy(magick,encode_image.filename,p-encode_image.filename);
  756. X      magick[p-encode_image.filename]='\0';
  757. X      for (q=magick; *q != '\0'; q++)
  758. X      {
  759. X        c=(*q);
  760. X        if (isascii(c) && islower(c))
  761. X          *q=toupper(c);
  762. X      }
  763. X      for (i=0; ImageTypes[i] != (char *) NULL; i++)
  764. X        if (strcmp(magick,ImageTypes[i]) == 0)
  765. X          {
  766. X            /*
  767. X              Strip off image format prefix.
  768. X            */
  769. X            p++;
  770. X            (void) strcpy(encode_image.filename,p);
  771. X            (void) strcpy(encode_image.magick,magick);
  772. X            break;
  773. X          }
  774. X    }
  775. X  /*
  776. X    Call appropriate image writer based on image type.
  777. X  */
  778. X  switch (*encode_image.magick)
  779. X  {
  780. X    case 'A':
  781. X    {
  782. X      if (strcmp(magick,"ALPHA") == 0)
  783. X        status=WriteALPHAImage(&encode_image);
  784. X      else
  785. X        status=WriteAVSImage(&encode_image);
  786. X      break;
  787. X    }
  788. X    case 'B':
  789. X    {
  790. X      status=WriteBMPImage(&encode_image);
  791. X      break;
  792. X    }
  793. X    case 'C':
  794. X    {
  795. X      status=WriteCMYKImage(&encode_image,image_info->interlace,
  796. X        image_info->undercolor);
  797. X      break;
  798. X    }
  799. X    case 'E':
  800. X    {
  801. X      status=WritePSImage(&encode_image,image_info->page,
  802. X        image_info->density,True);
  803. X      break;
  804. X    }
  805. X    case 'F':
  806. X    {
  807. X      status=WriteFAXImage(&encode_image);
  808. X      break;
  809. X    }
  810. X    case 'G':
  811. X    {
  812. X      if (strcmp(encode_image.magick,"GIF") == 0)
  813. X        status=WriteGIFImage(&encode_image);
  814. X      else
  815. X        status=WriteGRAYImage(&encode_image);
  816. X      break;
  817. X    }
  818. X    case 'H':
  819. X    {
  820. X      status=WriteHISTOGRAMImage(&encode_image);
  821. X      break;
  822. X    }
  823. X    case 'I':
  824. X    {
  825. X      status=WriteIRISImage(&encode_image);
  826. X      break;
  827. X    }
  828. X    case 'J':
  829. X    {
  830. X      status=WriteJPEGImage(&encode_image,image_info->quality);
  831. X      break;
  832. X    }
  833. X    case 'M':
  834. X    {
  835. X      if (strcmp(encode_image.magick,"MTV") == 0)
  836. X        status=WriteMTVImage(&encode_image);
  837. X      else
  838. X        status=WriteMIFFImage(&encode_image);
  839. X      break;
  840. X    }
  841. X    case 'P':
  842. X    {
  843. X      if (strcmp(encode_image.magick,"PCX") == 0)
  844. X        status=WritePCXImage(&encode_image);
  845. X      else
  846. X        if (strcmp(encode_image.magick,"PICT") == 0)
  847. X          status=WritePICTImage(&encode_image);
  848. X        else
  849. X          if (strcmp(encode_image.magick,"PS") == 0)
  850. X            status=WritePSImage(&encode_image,image_info->page,
  851. X              image_info->density,False);
  852. X          else
  853. X            if (strcmp(encode_image.magick,"PS2") == 0)
  854. X              status=WritePS2Image(&encode_image,image_info->page,
  855. X                image_info->density,False);
  856. X            else
  857. X              status=WritePNMImage(&encode_image);
  858. X      break;
  859. X    }
  860. X    case 'R':
  861. X    {
  862. X      if (strcmp(encode_image.magick,"RAS") == 0)
  863. X        status=WriteSUNImage(&encode_image);
  864. X      else
  865. X        if (strcmp(encode_image.magick,"RGB") == 0)
  866. X          status=WriteRGBImage(&encode_image,image_info->interlace);
  867. X        else
  868. X          status=WriteRLEImage(&encode_image);
  869. X      break;
  870. X    }
  871. X    case 'S':
  872. X    {
  873. X      status=WriteSUNImage(&encode_image);
  874. X      break;
  875. X    }
  876. X    case 'T':
  877. X    {
  878. X      if (strcmp(encode_image.magick,"TGA") == 0)
  879. X        status=WriteTARGAImage(&encode_image);
  880. X      else
  881. X        if (strcmp(encode_image.magick,"TIFF") == 0)
  882. X          status=WriteTIFFImage(&encode_image,image_info->verbose);
  883. X        else
  884. X          status=WriteTEXTImage(&encode_image);
  885. X      break;
  886. X    }
  887. X    case 'V':
  888. X    {
  889. X      if (strcmp(encode_image.magick,"VICAR") == 0)
  890. X        status=WriteVICARImage(&encode_image);
  891. X      else
  892. X        status=WriteVIFFImage(&encode_image);
  893. X      break;
  894. X    }
  895. X    case 'X':
  896. X    {
  897. X      if (strcmp(encode_image.magick,"X") == 0)
  898. X        status=WriteXImage(&encode_image,image_info->server_name);
  899. X      else
  900. X        if (strcmp(encode_image.magick,"XBM") == 0)
  901. X          status=WriteXBMImage(&encode_image);
  902. X        else
  903. X          if (strcmp(encode_image.magick,"XC") == 0)
  904. X            status=WriteXCImage(&encode_image);
  905. X          else
  906. X            if (strcmp(encode_image.magick,"XV") == 0)
  907. X              status=WriteVIFFImage(&encode_image);
  908. X            else
  909. X              status=WriteXWDImage(&encode_image);
  910. X      break;
  911. X    }
  912. X    case 'Y':
  913. X    {
  914. X      status=WriteYUVImage(&encode_image,image_info->interlace);
  915. X      break;
  916. X    }
  917. X    default:
  918. X      status=WriteMIFFImage(&encode_image);
  919. X  }
  920. X  if (image->status)
  921. X    {
  922. X      Warning("an error has occurred writing to file",image->filename);
  923. X      return(False);
  924. X    }
  925. X  return(status);
  926. }
  927. SHAR_EOF
  928. echo 'File ImageMagick/encode.c is complete' &&
  929. chmod 0644 ImageMagick/encode.c ||
  930. echo 'restore of ImageMagick/encode.c failed'
  931. Wc_c="`wc -c < 'ImageMagick/encode.c'`"
  932. test 175688 -eq "$Wc_c" ||
  933.     echo 'ImageMagick/encode.c: original size 175688, current size' "$Wc_c"
  934. rm -f _shar_wnt_.tmp
  935. fi
  936. # ============= ImageMagick/patchlevel.h ==============
  937. if test -f 'ImageMagick/patchlevel.h' -a X"$1" != X"-c"; then
  938.     echo 'x - skipping ImageMagick/patchlevel.h (File already exists)'
  939.     rm -f _shar_wnt_.tmp
  940. else
  941. > _shar_wnt_.tmp
  942. echo 'x - extracting ImageMagick/patchlevel.h (Text)'
  943. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/patchlevel.h' &&
  944. #define PATCHLEVEL  0
  945. SHAR_EOF
  946. chmod 0644 ImageMagick/patchlevel.h ||
  947. echo 'restore of ImageMagick/patchlevel.h failed'
  948. Wc_c="`wc -c < 'ImageMagick/patchlevel.h'`"
  949. test 22 -eq "$Wc_c" ||
  950.     echo 'ImageMagick/patchlevel.h: original size 22, current size' "$Wc_c"
  951. rm -f _shar_wnt_.tmp
  952. fi
  953. # ============= ImageMagick/scenes/Makefile ==============
  954. if test ! -d 'ImageMagick/scenes'; then
  955.     echo 'x - creating directory ImageMagick/scenes'
  956.     mkdir 'ImageMagick/scenes'
  957. fi
  958. if test -f 'ImageMagick/scenes/Makefile' -a X"$1" != X"-c"; then
  959.     echo 'x - skipping ImageMagick/scenes/Makefile (File already exists)'
  960.     rm -f _shar_wnt_.tmp
  961. else
  962. > _shar_wnt_.tmp
  963. echo 'x - extracting ImageMagick/scenes/Makefile (Text)'
  964. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/Makefile' &&
  965. #
  966. #  If your rayshade(1) produces MTV files rather than RLE, change
  967. #  'rle' to 'mtv' below.
  968. #
  969. all:
  970. X    rayshade < dna.script > dna.rle
  971. X    convert +alpha dna.rle miff:dna
  972. X    /bin/mv dna dna.0
  973. X    mogrify -verbose -colors 256 -dither dna.[0-9]*
  974. X
  975. clean:
  976. X    /bin/rm -f dna.[0-9]* dna.rle dna.log
  977. SHAR_EOF
  978. chmod 0644 ImageMagick/scenes/Makefile ||
  979. echo 'restore of ImageMagick/scenes/Makefile failed'
  980. Wc_c="`wc -c < 'ImageMagick/scenes/Makefile'`"
  981. test 281 -eq "$Wc_c" ||
  982.     echo 'ImageMagick/scenes/Makefile: original size 281, current size' "$Wc_c"
  983. rm -f _shar_wnt_.tmp
  984. fi
  985. # ============= ImageMagick/scenes/README ==============
  986. if test -f 'ImageMagick/scenes/README' -a X"$1" != X"-c"; then
  987.     echo 'x - skipping ImageMagick/scenes/README (File already exists)'
  988.     rm -f _shar_wnt_.tmp
  989. else
  990. > _shar_wnt_.tmp
  991. echo 'x - extracting ImageMagick/scenes/README (Text)'
  992. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/README' &&
  993. DNA sequence useful for testing the `animate' program from
  994. contrib/ImageMagick.tar.Z on export.lcs.mit.edu.  `animate' is a
  995. program that can display image sequences on any X server:
  996. X
  997. X  animate dna.[0-9]*
  998. X
  999. ImageMagick requires Craig Kolb's RAYSHADE software available via FTP
  1000. as princeton.edu:/pub/Graphics/rayshade.4.0 to generate the DNA image
  1001. sequence.  Alternately, you can get the image sequence from
  1002. contrib/ImageMagick.animation.tar.Z on export.lcs.mit.edu.
  1003. SHAR_EOF
  1004. chmod 0644 ImageMagick/scenes/README ||
  1005. echo 'restore of ImageMagick/scenes/README failed'
  1006. Wc_c="`wc -c < 'ImageMagick/scenes/README'`"
  1007. test 464 -eq "$Wc_c" ||
  1008.     echo 'ImageMagick/scenes/README: original size 464, current size' "$Wc_c"
  1009. rm -f _shar_wnt_.tmp
  1010. fi
  1011. # ============= ImageMagick/scenes/dna.script ==============
  1012. if test -f 'ImageMagick/scenes/dna.script' -a X"$1" != X"-c"; then
  1013.     echo 'x - skipping ImageMagick/scenes/dna.script (File already exists)'
  1014.     rm -f _shar_wnt_.tmp
  1015. else
  1016. > _shar_wnt_.tmp
  1017. echo 'x - extracting ImageMagick/scenes/dna.script (Text)'
  1018. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/dna.script' &&
  1019. /*
  1020. X  Rayshade script for creating a spinning DNA molecule image sequence.
  1021. X
  1022. X  Copyright 1992 E. I. du Pont de Nemours & Company
  1023. X
  1024. X  Permission to use, copy, modify, distribute, and sell this software and
  1025. X  its documentation for any purpose is hereby granted without fee,
  1026. X  provided that the above Copyright notice appear in all copies and that
  1027. X  both that Copyright notice and this permission notice appear in
  1028. X  supporting documentation, and that the name of E. I. du Pont de Nemours
  1029. X  & Company not be used in advertising or publicity pertaining to
  1030. X  distribution of the software without specific, written prior
  1031. X  permission.  E. I. du Pont de Nemours & Company makes no representations
  1032. X  about the suitability of this software for any purpose.  It is provided
  1033. X  "as is" without express or implied warranty.
  1034. X
  1035. X  E. I. du Pont de Nemours & Company disclaims all warranties with regard
  1036. X  to this software, including all implied warranties of merchantability
  1037. X  and fitness, in no event shall E. I. du Pont de Nemours & Company be
  1038. X  liable for any special, indirect or consequential damages or any
  1039. X  damages whatsoever resulting from loss of use, data or profits, whether
  1040. X  in an action of contract, negligence or other tortious action, arising
  1041. X  out of or in connection with the use or performance of this software.
  1042. */
  1043. X
  1044. name atom.O
  1045. X  list
  1046. X  surface O
  1047. X    ambient 0.20 0.20 0.20 
  1048. X    diffuse 0.90 0.00 0.00 
  1049. X    specular 0.32 0.32 0.32 
  1050. X    specpow 100
  1051. X    reflect 0.00
  1052. X    transp 0.00
  1053. X    index 1.00
  1054. X  sphere O 2.22429 0.0 0.0 0.0
  1055. end
  1056. name atom.C
  1057. X  list
  1058. X  surface C
  1059. X    ambient 0.09 0.09 0.09 
  1060. X    diffuse 0.32 0.32 0.32 
  1061. X    specular 0.32 0.32 0.32 
  1062. X    specpow 100
  1063. X    reflect 0.00
  1064. X    transp 0.00
  1065. X    index 1.00
  1066. X  sphere C 2.70093 0.0 0.0 0.0
  1067. end
  1068. name atom.N
  1069. X  list
  1070. X  surface N
  1071. X    ambient 0.00 0.00 0.22 
  1072. X    diffuse 0.00 0.00 0.90 
  1073. X    specular 0.32 0.32 0.32 
  1074. X    specpow 100
  1075. X    reflect 0.00
  1076. X    transp 0.00
  1077. X    index 1.00
  1078. X  sphere N 2.44672 0.0 0.0 0.0
  1079. end
  1080. name atom.P
  1081. X  list
  1082. X  surface P
  1083. X    ambient 0.22 0.22 0.00 
  1084. X    diffuse 0.90 0.90 0.00 
  1085. X    specular 0.32 0.32 0.32 
  1086. X    specpow 100
  1087. X    reflect 0.00
  1088. X    transp 0.00
  1089. X    index 1.00
  1090. X  sphere P 2.85981 0.0 0.0 0.0
  1091. end
  1092. name molecule.dna
  1093. X  grid 22 22 22
  1094. X  object atom.O translate 40.71169 7.07008 -19.96654
  1095. X  object atom.C translate 37.85082 6.08080 -20.30633
  1096. X  object atom.C translate 37.49451 3.45211 -18.52562
  1097. X  object atom.O translate 38.32873 3.99314 -15.61836
  1098. X  object atom.C translate 34.51841 2.21794 -18.35552
  1099. X  object atom.O translate 34.71203 -0.70266 -17.64078
  1100. X  object atom.C translate 33.52023 3.89230 -15.79419
  1101. X  object atom.C translate 35.99492 3.13117 -13.87875
  1102. X  object atom.N translate 36.03749 4.88010 -11.25832
  1103. X  object atom.C translate 36.92636 3.82070 -8.70081
  1104. X  object atom.O translate 37.67140 1.31954 -8.53515
  1105. X  object atom.N translate 36.90455 5.49210 -6.42207
  1106. X  object atom.C translate 36.01080 8.17164 -6.60404
  1107. X  object atom.N translate 35.88624 9.80427 -4.23124
  1108. X  object atom.C translate 35.07702 9.31980 -9.15562
  1109. X  object atom.C translate 35.11621 7.59035 -11.53816
  1110. X  object atom.P translate 32.73897 -3.13710 -18.92938
  1111. X  object atom.O translate 29.80989 -2.23849 -19.56130
  1112. X  object atom.O translate 34.33516 -4.55303 -21.20071
  1113. X  object atom.O translate 32.36465 -5.16714 -16.25599
  1114. X  object atom.C translate 34.68449 -6.67585 -15.05636
  1115. X  object atom.C translate 33.44990 -7.80960 -12.35628
  1116. X  object atom.O translate 33.48803 -5.51646 -10.36331
  1117. X  object atom.C translate 30.39753 -8.91307 -12.52532
  1118. X  object atom.O translate 30.15646 -11.74682 -11.38013
  1119. X  object atom.C translate 28.79095 -6.59705 -10.89502
  1120. X  object atom.C translate 30.95784 -5.60459 -8.70737
  1121. X  object atom.N translate 30.48375 -2.56366 -7.96425
  1122. X  object atom.C translate 29.88446 -0.41012 -9.80639
  1123. X  object atom.N translate 29.66034 2.12028 -8.53303
  1124. X  object atom.C translate 30.14777 1.53858 -5.78062
  1125. X  object atom.C translate 30.16726 3.41715 -3.42393
  1126. X  object atom.O translate 29.73977 5.98547 -3.38453
  1127. X  object atom.N translate 30.81315 2.01606 -0.96259
  1128. X  object atom.C translate 31.39126 -0.79990 -0.67407
  1129. X  object atom.N translate 31.97508 -1.77965 1.97941
  1130. X  object atom.N translate 31.35694 -2.55942 -2.88353
  1131. X  object atom.C translate 30.71889 -1.25853 -5.35568
  1132. X  object atom.P translate 27.18967 -13.35212 -11.00221
  1133. X  object atom.O translate 24.95945 -12.07411 -12.77593
  1134. X  object atom.O translate 27.65550 -16.41021 -11.43097
  1135. X  object atom.O translate 26.44294 -12.83249 -7.74902
  1136. X  object atom.C translate 28.26284 -13.92642 -5.58891
  1137. X  object atom.C translate 27.19094 -12.70136 -2.86786
  1138. X  object atom.O translate 27.28097 -9.69644 -3.05915
  1139. X  object atom.C translate 24.15446 -13.41398 -2.19782
  1140. X  object atom.O translate 24.03245 -15.73678 -0.25823
  1141. X  object atom.C translate 22.93004 -10.68657 -0.99606
  1142. X  object atom.C translate 25.39159 -8.62645 -0.97000
  1143. X  object atom.N translate 24.47540 -5.90836 -2.20523
  1144. X  object atom.C translate 24.37583 -3.55252 -0.56794
  1145. X  object atom.O translate 25.00690 -3.78935 1.95505
  1146. X  object atom.N translate 23.63546 -1.07084 -1.72330
  1147. X  object atom.C translate 22.98385 -0.89290 -4.46935
  1148. X  object atom.N translate 22.33986 1.67034 -5.64907
  1149. X  object atom.C translate 23.04486 -3.27183 -6.20960
  1150. X  object atom.C translate 23.81722 -5.84799 -5.00678
  1151. X  object atom.P translate 21.07498 -17.05505 0.69737
  1152. X  object atom.O translate 19.00914 -16.62078 -1.59916
  1153. X  object atom.O translate 21.56136 -19.97883 1.65593
  1154. X  object atom.O translate 20.24712 -15.15063 3.33009
  1155. X  object atom.C translate 21.99478 -15.13029 5.81049
  1156. X  object atom.C translate 20.63542 -13.14177 7.88163
  1157. X  object atom.O translate 20.53564 -10.34467 6.68305
  1158. X  object atom.C translate 17.59046 -13.83490 8.68555
  1159. X  object atom.O translate 16.87848 -12.69585 11.35873
  1160. X  object atom.C translate 16.01778 -12.28213 6.34665
  1161. X  object atom.C translate 17.63071 -9.50409 6.55298
  1162. X  object atom.N translate 17.27461 -7.72805 3.98975
  1163. X  object atom.C translate 16.68422 -8.53303 1.26467
  1164. X  object atom.N translate 16.49314 -6.32441 -0.51244
  1165. X  object atom.C translate 16.97529 -4.07067 1.17570
  1166. X  object atom.C translate 16.99393 -1.13354 0.49422
  1167. X  object atom.O translate 16.58699 0.01229 -1.80549
  1168. X  object atom.N translate 17.49090 0.48744 2.85070
  1169. X  object atom.C translate 17.95037 -0.45587 5.54718
  1170. X  object atom.N translate 18.32702 1.52121 7.61366
  1171. X  object atom.N translate 17.95016 -3.20531 6.18481
  1172. X  object atom.C translate 17.44875 -4.85278 3.91900
  1173. X  object atom.P translate 14.40654 -14.08572 13.19219
  1174. X  object atom.O translate 12.08692 -15.04852 11.28078
  1175. X  object atom.O translate 15.64346 -16.22316 15.08623
  1176. X  object atom.O translate 13.38739 -11.39665 14.97056
  1177. X  object atom.C translate 15.46552 -9.51574 16.17613
  1178. X  object atom.C translate 14.23962 -6.60806 15.89333
  1179. X  object atom.O translate 14.04176 -5.99458 12.94285
  1180. X  object atom.C translate 11.24889 -6.21298 17.06288
  1181. X  object atom.O translate 11.17284 -4.12533 19.27532
  1182. X  object atom.C translate 9.47899 -5.52515 14.41470
  1183. X  object atom.C translate 11.68973 -4.12130 12.55964
  1184. X  object atom.N translate 10.96842 -4.45219 9.52973
  1185. X  object atom.C translate 10.62673 -6.91459 8.03436
  1186. X  object atom.N translate 10.25093 -6.48032 5.24531
  1187. X  object atom.C translate 10.32740 -3.63534 4.99598
  1188. X  object atom.C translate 10.07828 -1.81905 2.59628
  1189. X  object atom.N translate 9.69379 -2.83079 -0.08007
  1190. X  object atom.N translate 10.23292 0.96280 3.05300
  1191. X  object atom.C translate 10.63626 1.93514 5.67767
  1192. X  object atom.N translate 10.91313 0.48871 8.07864
  1193. X  object atom.C translate 10.72671 -2.33170 7.56048
  1194. X  object atom.P translate 8.31198 -3.29196 20.86833
  1195. X  object atom.O translate 6.27092 -5.65183 20.68340
  1196. X  object atom.O translate 9.05468 -2.20142 23.70442
  1197. X  object atom.O translate 7.11319 -0.67280 19.11326
  1198. X  object atom.C translate 8.46386 2.03449 19.34734
  1199. X  object atom.C translate 6.80708 3.92239 17.43551
  1200. X  object atom.O translate 6.64948 2.42512 14.80935
  1201. X  object atom.C translate 3.74942 4.50790 18.29154
  1202. X  object atom.O translate 3.21834 7.48825 18.68979
  1203. X  object atom.C translate 2.07442 3.06804 15.92807
  1204. X  object atom.C translate 4.11929 3.35636 13.47880
  1205. X  object atom.N translate 3.58122 1.22718 11.22993
  1206. X  object atom.C translate 3.44924 -1.65403 11.49982
  1207. X  object atom.N translate 3.14759 -2.98627 9.00861
  1208. X  object atom.C translate 3.10204 -0.85985 7.09783
  1209. X  object atom.C translate 2.93406 -0.87277 4.07067
  1210. X  object atom.N translate 2.81606 -3.31441 2.52680
  1211. X  object atom.N translate 3.00714 1.62289 2.75770
  1212. X  object atom.C translate 3.20966 3.99335 4.28526
  1213. X  object atom.N translate 3.38675 4.28759 7.08385
  1214. X  object atom.C translate 3.32108 1.73071 8.36653
  1215. X  object atom.P translate 0.10285 8.68725 19.28421
  1216. X  object atom.O translate -1.69587 6.55595 20.74822
  1217. X  object atom.O translate 0.29880 11.49346 20.66306
  1218. X  object atom.O translate -1.00951 9.18168 16.15198
  1219. X  object atom.C translate 0.56804 10.97234 14.29226
  1220. X  object atom.C translate -1.14106 10.93951 11.62650
  1221. X  object atom.O translate -1.18576 8.11889 10.59294
  1222. X  object atom.C translate -4.23792 11.67035 12.09402
  1223. X  object atom.O translate -4.76306 14.57527 11.41508
  1224. X  object atom.C translate -5.84132 9.46702 10.31819
  1225. X  object atom.C translate -3.45581 8.05449 8.64679
  1226. X  object atom.N translate -3.87737 5.00297 8.04369
  1227. X  object atom.C translate -3.90893 4.12427 5.31352
  1228. X  object atom.O translate -3.72337 5.86854 3.37203
  1229. X  object atom.N translate -4.09281 1.28395 4.78774
  1230. X  object atom.C translate -4.29554 -0.69673 6.89743
  1231. X  object atom.O translate -4.34892 -3.22205 6.21828
  1232. X  object atom.C translate -4.37074 0.25018 9.69644
  1233. X  object atom.C translate -4.70417 -1.80803 12.10652
  1234. X  object atom.C translate -4.12056 3.14431 10.23620
  1235. X  object atom.P translate -7.89085 15.85287 11.39983
  1236. X  object atom.O translate -9.72324 14.49224 13.55316
  1237. X  object atom.O translate -7.60254 18.95671 11.65319
  1238. X  object atom.O translate -8.95745 15.10741 8.26315
  1239. X  object atom.C translate -7.40150 16.18715 5.85244
  1240. X  object atom.C translate -8.71765 14.83838 3.29831
  1241. X  object atom.O translate -8.79370 11.86863 3.87853
  1242. X  object atom.C translate -11.80158 15.64463 2.76046
  1243. X  object atom.O translate -12.16064 17.46813 0.32030
  1244. X  object atom.C translate -13.35668 12.77995 2.71915
  1245. X  object atom.C translate -10.93262 10.75500 2.07516
  1246. X  object atom.N translate -11.38384 7.79605 3.06720
  1247. X  object atom.C translate -11.18132 5.60056 1.20154
  1248. X  object atom.O translate -10.81908 6.04013 -1.33648
  1249. X  object atom.N translate -11.24996 2.90154 2.22196
  1250. X  object atom.C translate -11.58995 2.32153 5.04025
  1251. X  object atom.O translate -11.53488 -0.18493 5.76834
  1252. X  object atom.C translate -11.91936 4.58141 6.92688
  1253. X  object atom.C translate -12.36613 4.07491 10.05064
  1254. X  object atom.C translate -11.73273 7.34632 5.90116
  1255. X  object atom.P translate -15.22212 18.21168 -0.93759
  1256. X  object atom.O translate -17.41443 18.11148 1.28818
  1257. X  object atom.O translate -15.04037 20.86283 -2.55879
  1258. X  object atom.O translate -15.62313 15.69229 -3.13922
  1259. X  object atom.C translate -13.58462 15.32857 -5.38322
  1260. X  object atom.C translate -14.53767 12.82126 -7.11054
  1261. X  object atom.O translate -14.70058 10.42008 -5.26183
  1262. X  object atom.C translate -17.43349 13.06021 -8.49893
  1263. X  object atom.O translate -17.30872 12.41135 -11.46274
  1264. X  object atom.C translate -19.26123 11.06004 -6.71123
  1265. X  object atom.C translate -17.10917 8.76690 -6.07995
  1266. X  object atom.N translate -17.84065 7.03830 -3.52921
  1267. X  object atom.C translate -17.77837 4.14757 -3.70737
  1268. X  object atom.O translate -17.39896 3.04580 -6.03547
  1269. X  object atom.N translate -18.08934 2.57171 -1.37038
  1270. X  object atom.C translate -18.52488 3.80079 1.13248
  1271. X  object atom.N translate -18.80832 2.16223 3.48240
  1272. X  object atom.C translate -18.71342 6.74258 1.39622
  1273. X  object atom.C translate -18.34058 8.38877 -1.02085
  1274. X  object atom.P translate -19.67389 13.58197 -13.60464
  1275. X  object atom.O translate -21.14785 16.07657 -12.37047
  1276. X  object atom.O translate -18.27830 13.88998 -16.41424
  1277. X  object atom.O translate -21.90920 11.05030 -13.75610
  1278. X  object atom.C translate -21.09341 8.41631 -15.05869
  1279. X  object atom.C translate -23.35880 6.29836 -14.39437
  1280. X  object atom.O translate -23.15946 5.68000 -11.42927
  1281. X  object atom.C translate -26.43257 7.23214 -14.84410
  1282. X  object atom.O translate -28.10651 4.95912 -15.90731
  1283. X  object atom.C translate -27.31466 8.06720 -11.86079
  1284. X  object atom.C translate -26.00402 5.53108 -10.44698
  1285. X  object atom.N translate -25.97373 5.66899 -7.33000
  1286. X  object atom.C translate -26.11396 7.92569 -5.52472
  1287. X  object atom.N translate -26.05380 7.14020 -2.79435
  1288. X  object atom.C translate -25.85595 4.29289 -2.92294
  1289. X  object atom.C translate -25.68944 2.25544 -0.69864
  1290. X  object atom.O translate -25.67440 2.63844 1.87519
  1291. X  object atom.N translate -25.50154 -0.43660 -1.76101
  1292. X  object atom.C translate -25.47464 -1.20938 -4.54370
  1293. X  object atom.N translate -25.26407 -4.01093 -5.17392
  1294. X  object atom.N translate -25.61191 0.68402 -6.61569
  1295. X  object atom.C translate -25.77990 3.34979 -5.64102
  1296. X  object atom.P translate -28.94263 4.89154 -19.18211
  1297. X  object atom.O translate -31.69737 6.36064 -19.42847
  1298. X  object atom.O translate -26.58594 5.98590 -20.93951
  1299. X  object atom.O translate -29.17777 1.57904 -19.78521
  1300. X  object atom.C translate -26.58657 -0.06292 -19.97396
  1301. X  object atom.C translate -27.00368 -2.86765 -18.48792
  1302. X  object atom.O translate -27.59047 -2.24378 -15.58553
  1303. X  object atom.C translate -29.44532 -4.74304 -19.46004
  1304. X  object atom.O translate -28.63949 -7.67318 -19.74305
  1305. X  object atom.C translate -31.71431 -4.16727 -17.22388
  1306. X  object atom.C translate -29.82981 -4.05097 -14.63311
  1307. X  object atom.N translate -31.15294 -2.47511 -12.26519
  1308. X  object atom.C translate -31.40058 -3.74571 -9.69729
  1309. X  object atom.O translate -30.63331 -6.22273 -9.49414
  1310. X  object atom.N translate -32.39304 -2.28086 -7.48168
  1311. X  object atom.C translate -33.15524 0.42855 -7.77825
  1312. X  object atom.N translate -34.03838 1.95166 -5.48702
  1313. X  object atom.C translate -32.98386 1.78050 -10.38491
  1314. X  object atom.C translate -31.93886 0.25654 -12.67869
  1315. X  object atom.P translate -30.57823 -9.74750 -21.58138
  1316. X  object atom.O translate -32.10706 -8.03818 -23.70442
  1317. X  object atom.O translate -28.82951 -12.12135 -22.65328
  1318. X  object atom.O translate -32.82625 -10.98759 -19.37043
  1319. X  object atom.C translate -32.08164 -13.32416 -17.54015
  1320. X  object atom.C translate -34.59107 -13.75525 -15.62557
  1321. X  object atom.O translate -34.97344 -11.13779 -14.18867
  1322. X  object atom.C translate -37.50214 -14.33738 -16.99891
  1323. X  object atom.O translate -38.51388 -17.17622 -16.55998
  1324. X  object atom.C translate -39.41101 -12.06097 -15.67344
  1325. X  object atom.C translate -37.74406 -11.30514 -13.02928
  1326. X  object atom.N translate -38.39165 -8.41800 -12.04403
  1327. X  object atom.C translate -38.78164 -6.02847 -13.64425
  1328. X  object atom.N translate -39.31568 -3.73576 -12.05970
  1329. X  object atom.C translate -39.23582 -4.71847 -9.37699
  1330. X  object atom.C translate -39.57624 -3.22756 -6.75889
  1331. X  object atom.O translate -40.03593 -0.69334 -6.35407
  1332. X  object atom.N translate -39.40232 -5.03030 -4.48503
  1333. X  object atom.C translate -38.94434 -7.87294 -4.55430
  1334. X  object atom.N translate -38.95958 -9.27107 -2.03957
  1335. X  object atom.N translate -38.53654 -9.25794 -6.98598
  1336. X  object atom.C translate -38.69881 -7.55392 -9.28590
  1337. X  object atom.O translate -43.67996 2.27662 12.88651
  1338. X  object atom.C translate -45.27319 -0.20591 13.69297
  1339. X  object atom.C translate -43.85134 -2.82549 12.52342
  1340. X  object atom.O translate -43.94963 -2.75410 9.47931
  1341. X  object atom.C translate -40.77376 -3.28984 13.31166
  1342. X  object atom.O translate -40.23019 -6.16490 14.04801
  1343. X  object atom.C translate -39.22968 -2.33106 10.64526
  1344. X  object atom.C translate -41.20358 -3.45910 8.38178
  1345. X  object atom.N translate -41.00255 -1.74109 5.76135
  1346. X  object atom.C translate -40.31704 -2.94391 3.22459
  1347. X  object atom.O translate -39.78299 -5.47982 3.15702
  1348. X  object atom.N translate -40.33695 -1.38796 0.86387
  1349. X  object atom.C translate -41.04830 1.33182 0.94628
  1350. X  object atom.N translate -41.18367 2.82613 -1.51612
  1351. X  object atom.C translate -41.75711 2.65835 3.48897
  1352. X  object atom.C translate -41.73804 1.03695 5.94861
  1353. X  object atom.P translate -37.51845 -6.92349 15.94247
  1354. X  object atom.O translate -35.70618 -4.38123 16.17084
  1355. X  object atom.O translate -38.39589 -8.24366 18.66776
  1356. X  object atom.O translate -35.97670 -9.20286 13.97938
  1357. X  object atom.C translate -37.52226 -11.58222 12.87824
  1358. X  object atom.C translate -35.67229 -12.66111 10.56159
  1359. X  object atom.O translate -35.61192 -10.58531 8.37055
  1360. X  object atom.C translate -32.61124 -13.03755 11.46084
  1361. X  object atom.O translate -31.72236 -15.89142 11.06280
  1362. X  object atom.C translate -30.99343 -10.85371 9.66064
  1363. X  object atom.C translate -32.87540 -10.64590 7.07305
  1364. X  object atom.N translate -32.65042 -7.79499 5.81770
  1365. X  object atom.C translate -32.75656 -5.27327 7.23701
  1366. X  object atom.N translate -32.64238 -3.03161 5.50015
  1367. X  object atom.C translate -32.44833 -4.17977 2.89751
  1368. X  object atom.C translate -32.28628 -2.78291 0.21671
  1369. X  object atom.O translate -32.33415 -0.22285 -0.29551
  1370. X  object atom.N translate -32.03885 -4.69114 -1.96098
  1371. X  object atom.C translate -31.99373 -7.56811 -1.73029
  1372. X  object atom.N translate -31.63805 -9.09461 -4.14820
  1373. X  object atom.N translate -32.19328 -8.87176 0.78062
  1374. X  object atom.C translate -32.43139 -7.06923 2.99665
  1375. X  object atom.P translate -28.56810 -16.87456 11.72267
  1376. X  object atom.O translate -27.31085 -14.90235 13.79317
  1377. X  object atom.O translate -28.69542 -19.90659 12.48338
  1378. X  object atom.O translate -27.03863 -16.55130 8.71140
  1379. X  object atom.C translate -27.92687 -18.21803 6.31318
  1380. X  object atom.C translate -26.44697 -16.92540 3.81731
  1381. X  object atom.O translate -27.05156 -13.97810 3.83426
  1382. X  object atom.C translate -23.24526 -16.98662 4.01919
  1383. X  object atom.O translate -22.15747 -19.60705 2.99793
  1384. X  object atom.C translate -22.38986 -14.46745 2.23722
  1385. X  object atom.C translate -25.08253 -12.74627 1.95632
  1386. X  object atom.N translate -24.77451 -9.81740 2.97971
  1387. X  object atom.C translate -24.86179 -7.68462 1.05601
  1388. X  object atom.O translate -25.00288 -8.32818 -1.46232
  1389. X  object atom.N translate -24.81159 -4.99492 1.92391
  1390. X  object atom.C translate -24.63788 -4.38589 4.67653
  1391. X  object atom.N translate -24.64678 -1.63708 5.55396
  1392. X  object atom.C translate -24.48324 -6.51803 6.70699
  1393. X  object atom.C translate -24.58259 -9.31513 5.80456
  1394. X  object atom.P translate -18.85514 -20.22117 2.69775
  1395. X  object atom.O translate -17.23987 -18.76966 4.94471
  1396. X  object atom.O translate -18.57911 -23.30425 2.53887
  1397. X  object atom.O translate -18.08595 -18.96921 -0.33237
  1398. X  object atom.C translate -19.12290 -20.31756 -2.84837
  1399. X  object atom.C translate -18.37935 -18.30807 -5.17901
  1400. X  object atom.O translate -19.10680 -15.57155 -4.06834
  1401. X  object atom.C translate -15.28483 -18.12334 -6.02890
  1402. X  object atom.O translate -14.94123 -18.09856 -9.04907
  1403. X  object atom.C translate -14.22987 -15.49211 -4.45389
  1404. X  object atom.C translate -16.82976 -13.61777 -4.58713
  1405. X  object atom.N translate -16.80412 -11.59048 -2.17155
  1406. X  object atom.C translate -16.19403 -12.09847 0.62132
  1407. X  object atom.N translate -16.40460 -9.77546 2.25310
  1408. X  object atom.C translate -17.12591 -7.72021 0.40715
  1409. X  object atom.C translate -17.62966 -4.77779 0.89078
  1410. X  object atom.O translate -17.51060 -3.43664 3.10935
  1411. X  object atom.N translate -18.20946 -3.37606 -1.58730
  1412. X  object atom.C translate -18.35224 -4.53057 -4.21620
  1413. X  object atom.N translate -18.80853 -2.75791 -6.44092
  1414. X  object atom.N translate -17.95292 -7.28531 -4.66170
  1415. X  object atom.C translate -17.35744 -8.73915 -2.28530
  1416. X  object atom.P translate -11.90707 -17.62044 -10.43893
  1417. X  object atom.O translate -9.71053 -18.33052 -8.31060
  1418. X  object atom.O translate -11.68507 -19.09970 -13.18541
  1419. X  object atom.O translate -12.06235 -14.34246 -11.16935
  1420. X  object atom.C translate -14.36058 -13.41059 -12.94540
  1421. X  object atom.C translate -13.91318 -10.41330 -13.86689
  1422. X  object atom.O translate -14.06040 -8.57349 -11.45025
  1423. X  object atom.C translate -11.09404 -9.82482 -15.27900
  1424. X  object atom.O translate -11.32791 -7.70305 -17.41559
  1425. X  object atom.C translate -9.31969 -8.95755 -12.71704
  1426. X  object atom.C translate -11.41413 -7.12240 -11.11872
  1427. X  object atom.N translate -10.86314 -7.14338 -7.99984
  1428. X  object atom.C translate -10.17424 -9.37106 -6.26001
  1429. X  object atom.N translate -9.99249 -8.61988 -3.51354
  1430. X  object atom.C translate -10.58923 -5.82426 -3.53070
  1431. X  object atom.C translate -10.79069 -3.74550 -1.32399
  1432. X  object atom.N translate -10.42167 -4.36025 1.47714
  1433. X  object atom.N translate -11.38786 -1.08927 -2.09423
  1434. X  object atom.C translate -11.81599 -0.48045 -4.82608
  1435. X  object atom.N translate -11.73761 -2.20417 -7.06351
  1436. X  object atom.C translate -11.09976 -4.86527 -6.22654
  1437. X  object atom.P translate -8.58800 -6.64619 -19.06411
  1438. X  object atom.O translate -6.35057 -8.85396 -18.84359
  1439. X  object atom.O translate -9.36608 -5.77321 -21.97646
  1440. X  object atom.O translate -7.84763 -3.85714 -17.32196
  1441. X  object atom.C translate -9.95457 -1.68496 -17.07983
  1442. X  object atom.C translate -8.60580 0.80308 -15.64251
  1443. X  object atom.O translate -8.27279 0.23599 -12.67636
  1444. X  object atom.C translate -5.72947 1.72415 -16.78855
  1445. X  object atom.O translate -5.69515 4.70682 -17.31603
  1446. X  object atom.C translate -3.75175 0.72639 -14.42762
  1447. X  object atom.C translate -5.55746 1.23904 -11.82350
  1448. X  object atom.N translate -4.77239 -0.67195 -9.45558
  1449. SHAR_EOF
  1450. true || echo 'restore of ImageMagick/scenes/dna.script failed'
  1451. fi
  1452. echo 'End of ImageMagick part 37'
  1453. echo 'File ImageMagick/scenes/dna.script is continued in part 38'
  1454. echo 38 > _shar_seq_.tmp
  1455. exit 0
  1456.  
  1457. exit 0 # Just in case...
  1458. -- 
  1459.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  1460. \X/  Amiga - The only way to fly! |    sources-x@sterling.com
  1461.  "It's intuitively obvious to the |
  1462.   most casual observer..."        | GCS d+/-- p+ c++ l+ m+ s++/+ g+ w+ t+ r+ x+
  1463.