home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sources / misc / 4175 < prev    next >
Encoding:
Text File  |  1992-12-13  |  57.4 KB  |  1,598 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: cristy@eplrx7.es.duPont.com (John Cristy)
  4. Subject:  v34i035:  imagemagick - X11 image processing and display v2.2, Part07/26
  5. Message-ID: <1992Dec13.202727.9473@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 74bdb03d168713abd599dc3dfa6f1c45
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Sterling Software
  10. References: <csm-v34i028=imagemagick.141926@sparky.IMD.Sterling.COM>
  11. Date: Sun, 13 Dec 1992 20:27:27 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 1583
  14.  
  15. Submitted-by: cristy@eplrx7.es.duPont.com (John Cristy)
  16. Posting-number: Volume 34, Issue 35
  17. Archive-name: imagemagick/part07
  18. Environment: UNIX, VMS, X11, SGI, DEC, Cray, Sun, Vax
  19.  
  20. #!/bin/sh
  21. # this is Part.07 (part 7 of a multipart archive)
  22. # do not concatenate these parts, unpack them in order with /bin/sh
  23. # file ImageMagick/image.c continued
  24. #
  25. if test ! -r _shar_seq_.tmp; then
  26.     echo 'Please unpack part 1 first!'
  27.     exit 1
  28. fi
  29. (read Scheck
  30.  if test "$Scheck" != 7; then
  31.     echo Please unpack part "$Scheck" next!
  32.     exit 1
  33.  else
  34.     exit 0
  35.  fi
  36. ) < _shar_seq_.tmp || exit 1
  37. if test ! -f _shar_wnt_.tmp; then
  38.     echo 'x - still skipping ImageMagick/image.c'
  39. else
  40. echo 'x - continuing file ImageMagick/image.c'
  41. sed 's/^X//' << 'SHAR_EOF' >> 'ImageMagick/image.c' &&
  42. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  43. %
  44. %  Procedure TransformRGBImage converts the reference image from an alternate
  45. %  colorspace to RGB.
  46. %
  47. %  The format of the TransformRGBImage routine is:
  48. %
  49. %      TransformRGBImage(image,colorspace)
  50. %
  51. %  A description of each parameter follows:
  52. %
  53. %    o image: The address of a structure of type Image;  returned from
  54. %      ReadImage.
  55. %
  56. %    o colorspace: An unsigned integer value that indicates the colorspace
  57. %      the image is currently in.  On return the image is in the RGB
  58. %      color space.
  59. %
  60. %
  61. */
  62. void TransformRGBImage(image,colorspace)
  63. Image
  64. X  *image;
  65. X
  66. unsigned int
  67. X  colorspace;
  68. {
  69. #define R 0
  70. #define G (MaxRGB+1)
  71. #define B (MaxRGB+1)*2
  72. X
  73. X  long int
  74. X    *blue,
  75. X    *green,
  76. X    *red;
  77. X
  78. X  register int
  79. X    i,
  80. X    x,
  81. X    y,
  82. X    z;
  83. X
  84. X  register RunlengthPacket
  85. X    *p;
  86. X
  87. X  register unsigned char
  88. X    *range_limit;
  89. X
  90. X  unsigned char
  91. X    *range_table;
  92. X
  93. X  if (colorspace == RGBColorspace)
  94. X    return;
  95. X  if (colorspace == GRAYColorspace)
  96. X    {
  97. X      if (image->colors == 2)
  98. X        {
  99. X          unsigned int
  100. X            polarity;
  101. X
  102. X          /*
  103. X            Monochrome image.
  104. X          */
  105. X          polarity=Intensity(image->colormap[0]) >
  106. X             Intensity(image->colormap[1]);
  107. X          image->colormap[polarity].red=0;
  108. X          image->colormap[polarity].green=0;
  109. X          image->colormap[polarity].blue=0;
  110. X          image->colormap[!polarity].red=MaxRGB;
  111. X          image->colormap[!polarity].green=MaxRGB;
  112. X          image->colormap[!polarity].blue=MaxRGB;
  113. X        }
  114. X      return;
  115. X    }
  116. X  /*
  117. X    Allocate the tables.
  118. X  */
  119. X  red=(long int *) malloc(3*(MaxRGB+1)*sizeof(long int));
  120. X  green=(long int *) malloc(3*(MaxRGB+1)*sizeof(long int));
  121. X  blue=(long int *) malloc(3*(MaxRGB+1)*sizeof(long int));
  122. X  range_table=(unsigned char *) malloc(3*(MaxRGB+1)*sizeof(unsigned char));
  123. X  if ((red == (long int *) NULL) || (green == (long int *) NULL) ||
  124. X      (blue == (long int *) NULL) || (range_table == (unsigned char *) NULL))
  125. X    {
  126. X      Warning("unable to transform color space","memory allocation failed");
  127. X      return;
  128. X    }
  129. X  /*
  130. X    Initialize tables.
  131. X  */
  132. X  for (i=0; i <= MaxRGB; i++)
  133. X  {
  134. X    range_table[i]=0;
  135. X    range_table[i+(MaxRGB+1)]=(unsigned char) i;
  136. X    range_table[i+(MaxRGB+1)*2]=MaxRGB;
  137. X  }
  138. X  range_limit=range_table+(MaxRGB+1);
  139. X  switch (colorspace)
  140. X  {
  141. X    case YIQColorspace:
  142. X    {
  143. X      /*
  144. X        Initialize YIQ tables:
  145. X
  146. X          R = Y+0.95600*I+0.62100*Q
  147. X          G = Y-0.27300*I-0.64700*Q
  148. X          B = Y-1.10400*I+1.70100*Q
  149. X      */
  150. X      for (i=0; i <= MaxRGB; i++)
  151. X      {
  152. X        red[i+R]=UpShifted(1.00000)*i;
  153. X        green[i+R]=UpShifted(0.95600)*i;
  154. X        blue[i+R]=UpShifted(0.62100)*i;
  155. X        red[i+G]=UpShifted(1.00000)*i;
  156. X        green[i+G]=(-UpShifted(0.27300))*i;
  157. X        blue[i+G]=(-UpShifted(0.64700))*i;
  158. X        red[i+B]=UpShifted(1.00000)*i;
  159. X        green[i+B]=(-UpShifted(1.10400))*i;
  160. X        blue[i+B]=UpShifted(1.70100)*i;
  161. X      }
  162. X      break;
  163. X    }
  164. X    case YUVColorspace:
  165. X    default:
  166. X    {
  167. X      /*
  168. X        Initialize YUV tables:
  169. X
  170. X          R = Y          +1.40200*V
  171. X          G = Y-0.34414*U-0.71414*V
  172. X          B = Y+1.77200*U
  173. X
  174. X        U and V, normally -0.5 through 0.5, must be normalized to the range 0
  175. X        through MaxRGB.
  176. X      */
  177. X      for (i=0; i <= MaxRGB; i++)
  178. X      {
  179. X        red[i+R]=UpShifted(1.00000)*i;
  180. X        green[i+R]=0;
  181. X        blue[i+R]=UpShifted(1.40200/2)*(2*i-MaxRGB);
  182. X        red[i+G]=UpShifted(1.00000)*i;
  183. X        green[i+G]=(-UpShifted(0.34414/2))*(2*i-MaxRGB);
  184. X        blue[i+G]=(-UpShifted(0.71414/2))*(2*i-MaxRGB);
  185. X        red[i+B]=UpShifted(1.00000)*i;
  186. X        green[i+B]=UpShifted(1.77200/2)*(2*i-MaxRGB);
  187. X        blue[i+B]=0;
  188. X      }
  189. X      break;
  190. X    }
  191. X    case XYZColorspace:
  192. X    {
  193. X      /*
  194. X        Initialize XYZ tables:
  195. X
  196. X          R =  2.36444*X-0.89680*Y-0.46770*Z
  197. X          G = -0.51483*X+1.42523*Y+0.08817*Z
  198. X          B =  0.00500*X-0.01439*Y+1.00921*Z
  199. X      */
  200. X      for (i=0; i <= MaxRGB; i++)
  201. X      {
  202. X        red[i+R]=UpShifted(2.36444)*i;
  203. X        green[i+R]=(-UpShifted(0.89680))*i;
  204. X        blue[i+R]=(-UpShifted(0.46770))*i;
  205. X        red[i+G]=(-UpShifted(0.51483))*i;
  206. X        green[i+G]=UpShifted(1.42523)*i;
  207. X        blue[i+G]=UpShifted(0.08817)*i;
  208. X        red[i+B]=UpShifted(0.00500)*i;
  209. X        green[i+B]=(-UpShifted(0.01439))*i;
  210. X        blue[i+B]=UpShifted(1.00921)*i;
  211. X      }
  212. X      break;
  213. X    }
  214. X  }
  215. X  /*
  216. X    Convert to RGB.
  217. X  */
  218. X  switch (image->class)
  219. X  {
  220. X    case DirectClass:
  221. X    {
  222. X      /*
  223. X        Convert DirectClass image.
  224. X      */
  225. X      p=image->pixels;
  226. X      for (i=0; i < image->packets; i++)
  227. X      {
  228. X        x=p->red;
  229. X        y=p->green;
  230. X        z=p->blue;
  231. X        p->red=range_limit[DownShift(red[x+R]+green[y+R]+blue[z+R])];
  232. X        p->green=range_limit[DownShift(red[x+G]+green[y+G]+blue[z+G])];
  233. X        p->blue=range_limit[DownShift(red[x+B]+green[y+B]+blue[z+B])];
  234. X        p++;
  235. X      }
  236. X      break;
  237. X    }
  238. X    case PseudoClass:
  239. X    {
  240. X      /*
  241. X        Convert PseudoClass image.
  242. X      */
  243. X      for (i=0; i < image->colors; i++)
  244. X      {
  245. X        x=image->colormap[i].red;
  246. X        y=image->colormap[i].green;
  247. X        z=image->colormap[i].blue;
  248. X        image->colormap[i].red=
  249. X          range_limit[DownShift(red[x+R]+green[y+R]+blue[z+R])];
  250. X        image->colormap[i].green=
  251. X          range_limit[DownShift(red[x+G]+green[y+G]+blue[z+G])];
  252. X        image->colormap[i].blue=
  253. X          range_limit[DownShift(red[x+B]+green[y+B]+blue[z+B])];
  254. X      }
  255. X      p=image->pixels;
  256. X      for (i=0; i < image->packets; i++)
  257. X      {
  258. X        x=p->red;
  259. X        y=p->green;
  260. X        z=p->blue;
  261. X        p->red=range_limit[DownShift(red[x+R]+green[y+R]+blue[z+R])];
  262. X        p->green=range_limit[DownShift(red[x+G]+green[y+G]+blue[z+G])];
  263. X        p->blue=range_limit[DownShift(red[x+B]+green[y+B]+blue[z+B])];
  264. X        p++;
  265. X      }
  266. X      break;
  267. X    }
  268. X  }
  269. X  /*
  270. X    Free allocated memory.
  271. X  */
  272. X  (void) free((char *) range_table);
  273. X  (void) free((char *) blue);
  274. X  (void) free((char *) green);
  275. X  (void) free((char *) red);
  276. }
  277. X
  278. /*
  279. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  280. %                                                                             %
  281. %                                                                             %
  282. %                                                                             %
  283. %   W r i t e I m a g e                                                       %
  284. %                                                                             %
  285. %                                                                             %
  286. %                                                                             %
  287. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  288. %
  289. %  Function WriteImage writes an image to a file.
  290. %
  291. %  The format of the WriteImage routine is:
  292. %
  293. %      status=WriteImage(image)
  294. %
  295. %  A description of each parameter follows:
  296. %
  297. %    o status: Function WriteImage return True if the image is written.
  298. %      False is returned if there is a memory shortage or if the image file
  299. %      fails to write.
  300. %
  301. %    o image: A pointer to a Image structure.
  302. %
  303. %
  304. */
  305. unsigned int WriteImage(image)
  306. Image
  307. X  *image;
  308. {
  309. X  register int
  310. X    i;
  311. X
  312. X  register long int
  313. X    count;
  314. X
  315. X  unsigned int
  316. X    status;
  317. X
  318. X  unsigned long int
  319. X    packets;
  320. X
  321. X  if ((image->class != DirectClass) && (image->class != PseudoClass))
  322. X    {
  323. X      Warning("unable to write image","unknown image class");
  324. X      return(False);
  325. X    }
  326. X  if ((image->compression != RunlengthEncodedCompression) &&
  327. X      (image->compression != QEncodedCompression) &&
  328. X      (image->compression != NoCompression))
  329. X    {
  330. X      Warning("unable to write image","unknown image compression");
  331. X      return(False);
  332. X    }
  333. X  /*
  334. X    Open output image file.
  335. X  */
  336. X  OpenImage(image,"w");
  337. X  if (image->file == (FILE *) NULL)
  338. X    {
  339. X      Warning("unable to open file",image->filename);
  340. X      DestroyImage(image);
  341. X      return(False);
  342. X    }
  343. X  /*
  344. X    Pack image pixels.
  345. X  */
  346. X  if ((image->class == PseudoClass) &&
  347. X      (image->compression == QEncodedCompression))
  348. X    image->class=DirectClass;
  349. X  if (image->compression == RunlengthEncodedCompression)
  350. X    CompressImage(image);
  351. X  status=PackImage(image);
  352. X  if (status == False)
  353. X    {
  354. X      Warning("unable to write image",image->filename);
  355. X      DestroyImage(image);
  356. X      return(False);
  357. X    }
  358. X  packets=image->packets;
  359. X  if (image->compression != RunlengthEncodedCompression)
  360. X    packets=image->columns*image->rows;
  361. X  if (image->compression == QEncodedCompression)
  362. X    {
  363. X      unsigned char
  364. X        *compressed_pixels;
  365. X
  366. X      /*
  367. X        Compress image pixels with Q encoding.
  368. X      */
  369. X      compressed_pixels=(unsigned char *)
  370. X        malloc((unsigned int) packets*image->packet_size*sizeof(unsigned char));
  371. X      if (compressed_pixels == (unsigned char *) NULL)
  372. X        {
  373. X          Warning("unable to write image","memory allocation failed");
  374. X          DestroyImage(image);
  375. X          return(False);
  376. X        }
  377. X      packets=QEncodeImage(image->packed_pixels,compressed_pixels,
  378. X        image->columns*(int) image->packet_size,image->rows);
  379. X      (void) free((char *) image->packed_pixels);
  380. X      image->packed_pixels=compressed_pixels;
  381. X      image->packet_size=1;
  382. X    }
  383. X  if (image->class == PseudoClass)
  384. X    ColormapSignature(image);
  385. X  /*
  386. X    Write header to file.
  387. X  */
  388. X  if (image->comments != (char *) NULL)
  389. X    (void) fprintf(image->file,"{%s}\n",image->comments);
  390. X  (void) fprintf(image->file,"id=ImageMagick\n");
  391. X  if (image->class == PseudoClass)
  392. X    (void) fprintf(image->file,"class=PseudoClass  colors=%u  signature=%s\n",
  393. X      image->colors,image->signature);
  394. X  else
  395. X    if (image->alpha)
  396. X      (void) fprintf(image->file,"class=DirectClass  alpha=True\n");
  397. X    else
  398. X      (void) fprintf(image->file,"class=DirectClass\n");
  399. X  if (image->compression == RunlengthEncodedCompression)
  400. X    (void) fprintf(image->file,"compression=RunlengthEncoded  packets=%lu\n",
  401. X      packets);
  402. X  else
  403. X    if (image->compression == QEncodedCompression)
  404. X      (void) fprintf(image->file,"compression=QEncoded  packets=%lu\n",packets);
  405. X  (void) fprintf(image->file,"columns=%u  rows=%u\n",image->columns,
  406. X    image->rows);
  407. X  if (image->scene > 0)
  408. X    (void) fprintf(image->file,"scene=%u\n",image->scene);
  409. X  if (image->montage != (char *) NULL)
  410. X    (void) fprintf(image->file,"montage=%s\n",image->montage);
  411. X  (void) fprintf(image->file,"\f\n:\n");
  412. X  if (image->montage != (char *) NULL)
  413. X    {
  414. X      /*
  415. X        Write montage tile directory.
  416. X      */
  417. X      if (image->directory != (char *) NULL)
  418. X        (void) fprintf(image->file,"%s",image->directory);
  419. X      (void) fwrite("\0",1,1,image->file);
  420. X    }
  421. X  if (image->class == PseudoClass)
  422. X    {
  423. X      register unsigned char
  424. X        *q;
  425. X
  426. X      unsigned char
  427. X        *colormap;
  428. X
  429. X      /*
  430. X        Allocate colormap.
  431. X      */
  432. X      colormap=(unsigned char *) malloc(3*image->colors*sizeof(unsigned char));
  433. X      if (colormap == (unsigned char *) NULL)
  434. X        {
  435. X          Warning("unable to write image","memory allocation failed");
  436. X          DestroyImage(image);
  437. X          return(False);
  438. X        }
  439. X      q=colormap;
  440. X      for (i=0; i < image->colors; i++)
  441. X      {
  442. X        *q++=image->colormap[i].red;
  443. X        *q++=image->colormap[i].green;
  444. X        *q++=image->colormap[i].blue;
  445. X      }
  446. X      /*
  447. X        Write colormap to file.
  448. X      */
  449. X      count=fwrite((char *) colormap,sizeof(unsigned char),
  450. X        (int) (3*image->colors),image->file);
  451. X      if (count != (3*image->colors))
  452. X        {
  453. X          Warning("unable to write image","file write error");
  454. X          DestroyImage(image);
  455. X          return(False);
  456. X        }
  457. X      (void) free((char *) colormap);
  458. X    }
  459. X  /*
  460. X    Write image pixels to file.
  461. X  */
  462. X  count=fwrite((char *) image->packed_pixels,(int) image->packet_size,
  463. X    (int) packets,image->file);
  464. X  if (count != packets)
  465. X    {
  466. X      Warning("unable to write image","file write error");
  467. X      DestroyImage(image);
  468. X      return(False);
  469. X    }
  470. X  (void) free((char *) image->packed_pixels);
  471. X  image->packed_pixels=(unsigned char *) NULL;
  472. X  CloseImage(image);
  473. X  return(True);
  474. }
  475. X
  476. /*
  477. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  478. %                                                                             %
  479. %                                                                             %
  480. %                                                                             %
  481. %   U n C o m p r e s s I m a g e                                             %
  482. %                                                                             %
  483. %                                                                             %
  484. %                                                                             %
  485. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  486. %
  487. %  Function UncompressImage uncompresses runlength-encoded pixels packets to
  488. %  a rectangular array of pixels.
  489. %
  490. %  The format of the UncompressImage routine is:
  491. %
  492. %      status=UncompressImage(image)
  493. %
  494. %  A description of each parameter follows:
  495. %
  496. %    o status: Function UncompressImage returns True if the image is
  497. %      uncompressed otherwise False.
  498. %
  499. %    o image: The address of a structure of type Image.
  500. %
  501. %
  502. */
  503. unsigned int UncompressImage(image)
  504. Image
  505. X  *image;
  506. {
  507. X  register int
  508. X    i,
  509. X    j;
  510. X
  511. X  register RunlengthPacket
  512. X    *p,
  513. X    *q;
  514. X
  515. X  RunlengthPacket
  516. X    *uncompressed_pixels;
  517. X
  518. X  /*
  519. X    Uncompress runlength-encoded packets.
  520. X  */
  521. X  uncompressed_pixels=(RunlengthPacket *)
  522. X    malloc(image->columns*image->rows*sizeof(RunlengthPacket));
  523. X  if (uncompressed_pixels == (RunlengthPacket *) NULL)
  524. X    return(False);
  525. X  p=image->pixels;
  526. X  q=uncompressed_pixels;
  527. X  for (i=0; i < image->packets; i++)
  528. X  {
  529. X    for (j=0; j <= ((int) p->length); j++)
  530. X    {
  531. X      q->red=p->red;
  532. X      q->green=p->green;
  533. X      q->blue=p->blue;
  534. X      q->index=p->index;
  535. X      q->length=0;
  536. X      q++;
  537. X    }
  538. X    p++;
  539. X  }
  540. X  (void) free((char *) image->pixels);
  541. X  image->pixels=uncompressed_pixels;
  542. X  image->packets=image->columns*image->rows;
  543. X  return(True);
  544. }
  545. X
  546. /*
  547. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  548. %                                                                             %
  549. %                                                                             %
  550. %                                                                             %
  551. %   U n p a c k I m a g e                                                     %
  552. %                                                                             %
  553. %                                                                             %
  554. %                                                                             %
  555. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  556. %
  557. %  Function UnpackImage unpacks the packed image pixels into runlength-encoded
  558. %  pixel packets.  The packed image pixel memory is then freed.
  559. %
  560. %  The format of the UnpackImage routine is:
  561. %
  562. %      status=UnpackImage(image)
  563. %
  564. %  A description of each parameter follows:
  565. %
  566. %    o status: Function UnpackImage return True if the image is unpacked.
  567. %      False is returned if there is an error occurs.
  568. %
  569. %    o image: The address of a structure of type Image.
  570. %
  571. %
  572. */
  573. unsigned int UnpackImage(image)
  574. Image
  575. X  *image;
  576. {
  577. X  register int
  578. X    i;
  579. X
  580. X  register RunlengthPacket
  581. X    *q;
  582. X
  583. X  register unsigned char
  584. X    *p;
  585. X
  586. X  unsigned long int
  587. X    count;
  588. X
  589. X  if (image->packed_pixels == (unsigned char *) NULL)
  590. X    {
  591. X      Warning("unable to unpack pixels","no packed image pixels");
  592. X      return(False);
  593. X    }
  594. X  /*
  595. X    Allocate pixels.
  596. X  */
  597. X  if (image->pixels != (RunlengthPacket *) NULL)
  598. X    (void) free((char *) image->pixels);
  599. X  image->pixels=(RunlengthPacket *)
  600. X    malloc((unsigned int) image->packets*sizeof(RunlengthPacket));
  601. X  if (image->pixels == (RunlengthPacket *) NULL)
  602. X    {
  603. X      Warning("unable to unpack pixels","memory allocation failed");
  604. X      return(False);
  605. X    }
  606. X  /*
  607. X    Unpack the packed image pixels into runlength-encoded pixel packets.
  608. X  */
  609. X  p=image->packed_pixels;
  610. X  q=image->pixels;
  611. X  count=0;
  612. X  if (image->class == DirectClass)
  613. X    {
  614. X      register int
  615. X        alpha;
  616. X
  617. X      alpha=image->alpha;
  618. X      if (image->compression == RunlengthEncodedCompression)
  619. X        for (i=0; i < image->packets; i++)
  620. X        {
  621. X          q->red=(*p++);
  622. X          q->green=(*p++);
  623. X          q->blue=(*p++);
  624. X          q->index=(unsigned short) (alpha ? (*p++) : 0);
  625. X          q->length=(*p++);
  626. X          count+=(q->length+1);
  627. X          q++;
  628. X        }
  629. X      else
  630. X        for (i=0; i < image->packets; i++)
  631. X        {
  632. X          q->red=(*p++);
  633. X          q->green=(*p++);
  634. X          q->blue=(*p++);
  635. X          q->index=(unsigned short) (alpha ? (*p++) : 0);
  636. X          q->length=0;
  637. X          count++;
  638. X          q++;
  639. X        }
  640. X    }
  641. X  else
  642. X    {
  643. X      register unsigned short
  644. X        index;
  645. X
  646. X      if (image->compression == RunlengthEncodedCompression)
  647. X        {
  648. X          if (image->colors <= 256)
  649. X            for (i=0; i < image->packets; i++)
  650. X            {
  651. X              index=(*p++);
  652. X              q->red=image->colormap[index].red;
  653. X              q->green=image->colormap[index].green;
  654. X              q->blue=image->colormap[index].blue;
  655. X              q->index=index;
  656. X              q->length=(*p++);
  657. X              count+=(q->length+1);
  658. X              q++;
  659. X            }
  660. X          else
  661. X            for (i=0; i < image->packets; i++)
  662. X            {
  663. X              index=(*p++) << 8;
  664. X              index|=(*p++);
  665. X              q->red=image->colormap[index].red;
  666. X              q->green=image->colormap[index].green;
  667. X              q->blue=image->colormap[index].blue;
  668. X              q->index=index;
  669. X              q->length=(*p++);
  670. X              count+=(q->length+1);
  671. X              q++;
  672. X            }
  673. X        }
  674. X      else
  675. X        if (image->colors <= 256)
  676. X          for (i=0; i < image->packets; i++)
  677. X          {
  678. X            index=(*p++);
  679. X            q->red=image->colormap[index].red;
  680. X            q->green=image->colormap[index].green;
  681. X            q->blue=image->colormap[index].blue;
  682. X            q->index=index;
  683. X            q->length=0;
  684. X            count++;
  685. X            q++;
  686. X          }
  687. X        else
  688. X          for (i=0; i < image->packets; i++)
  689. X          {
  690. X            index=(*p++) << 8;
  691. X            index|=(*p++);
  692. X            q->red=image->colormap[index].red;
  693. X            q->green=image->colormap[index].green;
  694. X            q->blue=image->colormap[index].blue;
  695. X            q->index=index;
  696. X            q->length=0;
  697. X            count++;
  698. X            q++;
  699. X          }
  700. X    }
  701. X  /*
  702. X    Free packed pixels memory.
  703. X  */
  704. X  (void) free((char *) image->packed_pixels);
  705. X  image->packed_pixels=(unsigned char *) NULL;
  706. X  /*
  707. X    Guarentee the correct number of pixel packets.
  708. X  */
  709. X  if (count > (image->columns*image->rows))
  710. X    {
  711. X      Warning("insufficient image data in file",image->filename);
  712. X      return(False);
  713. X    }
  714. X  else
  715. X    if (count < (image->columns*image->rows))
  716. X      {
  717. X        Warning("too much image data in file",image->filename);
  718. X        return(False);
  719. X      }
  720. X  return(True);
  721. }
  722. X
  723. /*
  724. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  725. %                                                                             %
  726. %                                                                             %
  727. %                                                                             %
  728. %   Z o o m I m a g e                                                         %
  729. %                                                                             %
  730. %                                                                             %
  731. %                                                                             %
  732. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  733. %
  734. %  Function ZoomImage creates a new image that is a integral size greater
  735. %  than an existing one.  It allocates the memory necessary for the new Image
  736. %  structure and returns a pointer to the new image.
  737. %
  738. %  ZoomImage scans the reference image to create a zoomed image by bilinear
  739. %  interpolation.  The zoomed image columns and rows become:
  740. %
  741. %    number_columns << 1
  742. %    number_rows << 1
  743. %
  744. %  The format of the ZoomImage routine is:
  745. %
  746. %      zoomed_image=ZoomImage(image)
  747. %
  748. %  A description of each parameter follows:
  749. %
  750. %    o zoomed_image: Function ZoomImage returns a pointer to the image after
  751. %      zooming.  A null image is returned if there is a a memory shortage.
  752. %
  753. %    o image: The address of a structure of type Image.
  754. %
  755. %
  756. */
  757. Image *ZoomImage(image)
  758. Image
  759. X  *image;
  760. {
  761. X  ColorPacket
  762. X    *scanline;
  763. X
  764. X  Image
  765. X    *zoomed_image;
  766. X
  767. X  register ColorPacket
  768. X    *cs,
  769. X    *ns,
  770. X    *s;
  771. X
  772. X  register RunlengthPacket
  773. X    *p,
  774. X    *q;
  775. X
  776. X  register unsigned int
  777. X    x;
  778. X
  779. X  unsigned int
  780. X    y;
  781. X
  782. X  if (((image->columns*image->rows) << 1) > MaxImageSize)
  783. X    {
  784. X      Warning("unable to zoom image","image size too large");
  785. X      return((Image *) NULL);
  786. X    }
  787. X  /*
  788. X    Initialize scaled image attributes.
  789. X  */
  790. X  zoomed_image=CopyImage(image,image->columns << 1,image->rows << 1,False);
  791. X  if (zoomed_image == (Image *) NULL)
  792. X    {
  793. X      Warning("unable to zoom image","memory allocation failed");
  794. X      return((Image *) NULL);
  795. X    }
  796. X  zoomed_image->class=DirectClass;
  797. X  /*
  798. X    Allocate scan line buffer.
  799. X  */
  800. X  scanline=(ColorPacket *) malloc(4*image->columns*sizeof(ColorPacket));
  801. X  if (scanline == (ColorPacket *) NULL)
  802. X    {
  803. X      Warning("unable to zoom image","memory allocation failed");
  804. X      DestroyImage(zoomed_image);
  805. X      return((Image *) NULL);
  806. X    }
  807. X  /*
  808. X    Preload a scan line and interpolate.
  809. X  */
  810. X  p=image->pixels;
  811. X  image->runlength=p->length+1;
  812. X  s=scanline;
  813. X  for (x=0; x < image->columns; x++)
  814. X  {
  815. X    s->red=p->red;
  816. X    s->green=p->green;
  817. X    s->blue=p->blue;
  818. X    s->index=p->index;
  819. X    s++;
  820. X    if (image->runlength > 0)
  821. X      {
  822. X        image->runlength--;
  823. X        s->red=p->red;
  824. X        s->green=p->green;
  825. X        s->blue=p->blue;
  826. X        s->index=p->index;
  827. X      }
  828. X    else
  829. X      {
  830. X        p++;
  831. X        image->runlength=p->length;
  832. X        s->red=(unsigned char) ((int) (p->red+(s-1)->red) >> 1);
  833. X        s->green=(unsigned char) ((int) (p->green+(s-1)->green) >> 1);
  834. X        s->blue=(unsigned char) ((int) (p->blue+(s-1)->blue) >> 1);
  835. X        s->index=(unsigned short) ((int) (p->index+(s-1)->index) >> 1);
  836. X      }
  837. X    s++;
  838. X  }
  839. X  /*
  840. X    Zoom each row.
  841. X  */
  842. X  p=image->pixels;
  843. X  image->runlength=p->length+1;
  844. X  q=zoomed_image->pixels;
  845. X  for (y=0; y < image->rows; y++)
  846. X  {
  847. X    cs=scanline+image->columns*((y+0) % 2)*2;
  848. X    ns=scanline+image->columns*((y+1) % 2)*2;
  849. X    /*
  850. X      Read a scan line and interpolate.
  851. X    */
  852. X    s=ns;
  853. X    for (x=0; x < image->columns; x++)
  854. X    {
  855. X      s->red=p->red;
  856. X      s->green=p->green;
  857. X      s->blue=p->blue;
  858. X      s->index=p->index;
  859. X      s++;
  860. X      if (image->runlength > 0)
  861. X        {
  862. X          image->runlength--;
  863. X          s->red=p->red;
  864. X          s->green=p->green;
  865. X          s->blue=p->blue;
  866. X          s->index=p->index;
  867. X        }
  868. X      else
  869. X        {
  870. X          p++;
  871. X          image->runlength=p->length;
  872. X          s->red=(unsigned char) ((int) (p->red+(s-1)->red) >> 1);
  873. X          s->green=(unsigned char) ((int) (p->green+(s-1)->green) >> 1);
  874. X          s->blue=(unsigned char) ((int) (p->blue+(s-1)->blue) >> 1);
  875. X          s->index=(unsigned short) ((int) (p->index+(s-1)->index) >> 1);
  876. X        }
  877. X      s++;
  878. X    }
  879. X    /*
  880. X      Dump column interpolation values.
  881. X    */
  882. X    s=cs;
  883. X    for (x=0; x < zoomed_image->columns; x++)
  884. X    {
  885. X      q->red=s->red;
  886. X      q->green=s->green;
  887. X      q->blue=s->blue;
  888. X      q->index=s->index;
  889. X      q->length=0;
  890. X      q++;
  891. X      s++;
  892. X    }
  893. X    /*
  894. X      Dump row interpolation values.
  895. X    */
  896. X    for (x=0; x < zoomed_image->columns; x++)
  897. X    {
  898. X      q->red=(unsigned char) ((int) (cs->red+ns->red) >> 1);
  899. X      q->green=(unsigned char) ((int) (cs->green+ns->green) >> 1);
  900. X      q->blue=(unsigned char) ((int) (cs->blue+ns->blue) >> 1);
  901. X      q->index=(unsigned short) ((int) (cs->index+ns->index) >> 1);
  902. X      q->length=0;
  903. X      q++;
  904. X      cs++;
  905. X      ns++;
  906. X    }
  907. X  }
  908. X  (void) free((char *) scanline);
  909. X  return(zoomed_image);
  910. }
  911. SHAR_EOF
  912. echo 'File ImageMagick/image.c is complete' &&
  913. chmod 0644 ImageMagick/image.c ||
  914. echo 'restore of ImageMagick/image.c failed'
  915. Wc_c="`wc -c < 'ImageMagick/image.c'`"
  916. test 154352 -eq "$Wc_c" ||
  917.     echo 'ImageMagick/image.c: original size 154352, current size' "$Wc_c"
  918. rm -f _shar_wnt_.tmp
  919. fi
  920. # ============= ImageMagick/scenes/Makefile ==============
  921. if test ! -d 'ImageMagick/scenes'; then
  922.     echo 'x - creating directory ImageMagick/scenes'
  923.     mkdir 'ImageMagick/scenes'
  924. fi
  925. if test -f 'ImageMagick/scenes/Makefile' -a X"$1" != X"-c"; then
  926.     echo 'x - skipping ImageMagick/scenes/Makefile (File already exists)'
  927.     rm -f _shar_wnt_.tmp
  928. else
  929. > _shar_wnt_.tmp
  930. echo 'x - extracting ImageMagick/scenes/Makefile (Text)'
  931. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/Makefile' &&
  932. all:
  933. X    rayshade < dna.script > dna.rle
  934. X    convert +alpha dna.rle miff:dna
  935. X    /bin/mv dna dna.0
  936. X    mogrify -verbose -colors 256 -dither dna.[0-9]*
  937. X
  938. clean:
  939. X    /bin/rm -f dna.[0-9]* dna.rle dna.log
  940. SHAR_EOF
  941. chmod 0644 ImageMagick/scenes/Makefile ||
  942. echo 'restore of ImageMagick/scenes/Makefile failed'
  943. Wc_c="`wc -c < 'ImageMagick/scenes/Makefile'`"
  944. test 186 -eq "$Wc_c" ||
  945.     echo 'ImageMagick/scenes/Makefile: original size 186, current size' "$Wc_c"
  946. rm -f _shar_wnt_.tmp
  947. fi
  948. # ============= ImageMagick/scenes/dna.script ==============
  949. if test -f 'ImageMagick/scenes/dna.script' -a X"$1" != X"-c"; then
  950.     echo 'x - skipping ImageMagick/scenes/dna.script (File already exists)'
  951.     rm -f _shar_wnt_.tmp
  952. else
  953. > _shar_wnt_.tmp
  954. echo 'x - extracting ImageMagick/scenes/dna.script (Text)'
  955. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/dna.script' &&
  956. /*
  957. X  Rayshade script for creating a spinning DNA molecule image sequence.
  958. X
  959. X  Copyright 1992 E. I. du Pont de Nemours & Company
  960. X
  961. X  Permission to use, copy, modify, distribute, and sell this software and
  962. X  its documentation for any purpose is hereby granted without fee,
  963. X  provided that the above Copyright notice appear in all copies and that
  964. X  both that Copyright notice and this permission notice appear in
  965. X  supporting documentation, and that the name of E. I. du Pont de Nemours
  966. X  & Company not be used in advertising or publicity pertaining to
  967. X  distribution of the software without specific, written prior
  968. X  permission.  E. I. du Pont de Nemours & Company makes no representations
  969. X  about the suitability of this software for any purpose.  It is provided
  970. X  "as is" without express or implied warranty.
  971. X
  972. X  E. I. du Pont de Nemours & Company disclaims all warranties with regard
  973. X  to this software, including all implied warranties of merchantability
  974. X  and fitness, in no event shall E. I. du Pont de Nemours & Company be
  975. X  liable for any special, indirect or consequential damages or any
  976. X  damages whatsoever resulting from loss of use, data or profits, whether
  977. X  in an action of contract, negligence or other tortious action, arising
  978. X  out of or in connection with the use or performance of this software.
  979. */
  980. X
  981. name atom.O
  982. X  list
  983. X  surface O
  984. X    ambient 0.20 0.20 0.20 
  985. X    diffuse 0.90 0.00 0.00 
  986. X    specular 0.32 0.32 0.32 
  987. X    specpow 100
  988. X    reflect 0.00
  989. X    transp 0.00
  990. X    index 1.00
  991. X  sphere O 2.22429 0.0 0.0 0.0
  992. end
  993. name atom.C
  994. X  list
  995. X  surface C
  996. X    ambient 0.09 0.09 0.09 
  997. X    diffuse 0.32 0.32 0.32 
  998. X    specular 0.32 0.32 0.32 
  999. X    specpow 100
  1000. X    reflect 0.00
  1001. X    transp 0.00
  1002. X    index 1.00
  1003. X  sphere C 2.70093 0.0 0.0 0.0
  1004. end
  1005. name atom.N
  1006. X  list
  1007. X  surface N
  1008. X    ambient 0.00 0.00 0.22 
  1009. X    diffuse 0.00 0.00 0.90 
  1010. X    specular 0.32 0.32 0.32 
  1011. X    specpow 100
  1012. X    reflect 0.00
  1013. X    transp 0.00
  1014. X    index 1.00
  1015. X  sphere N 2.44672 0.0 0.0 0.0
  1016. end
  1017. name atom.P
  1018. X  list
  1019. X  surface P
  1020. X    ambient 0.22 0.22 0.00 
  1021. X    diffuse 0.90 0.90 0.00 
  1022. X    specular 0.32 0.32 0.32 
  1023. X    specpow 100
  1024. X    reflect 0.00
  1025. X    transp 0.00
  1026. X    index 1.00
  1027. X  sphere P 2.85981 0.0 0.0 0.0
  1028. end
  1029. name molecule.dna
  1030. X  grid 22 22 22
  1031. X  object atom.O translate 40.71169 7.07008 -19.96654
  1032. X  object atom.C translate 37.85082 6.08080 -20.30633
  1033. X  object atom.C translate 37.49451 3.45211 -18.52562
  1034. X  object atom.O translate 38.32873 3.99314 -15.61836
  1035. X  object atom.C translate 34.51841 2.21794 -18.35552
  1036. X  object atom.O translate 34.71203 -0.70266 -17.64078
  1037. X  object atom.C translate 33.52023 3.89230 -15.79419
  1038. X  object atom.C translate 35.99492 3.13117 -13.87875
  1039. X  object atom.N translate 36.03749 4.88010 -11.25832
  1040. X  object atom.C translate 36.92636 3.82070 -8.70081
  1041. X  object atom.O translate 37.67140 1.31954 -8.53515
  1042. X  object atom.N translate 36.90455 5.49210 -6.42207
  1043. X  object atom.C translate 36.01080 8.17164 -6.60404
  1044. X  object atom.N translate 35.88624 9.80427 -4.23124
  1045. X  object atom.C translate 35.07702 9.31980 -9.15562
  1046. X  object atom.C translate 35.11621 7.59035 -11.53816
  1047. X  object atom.P translate 32.73897 -3.13710 -18.92938
  1048. X  object atom.O translate 29.80989 -2.23849 -19.56130
  1049. X  object atom.O translate 34.33516 -4.55303 -21.20071
  1050. X  object atom.O translate 32.36465 -5.16714 -16.25599
  1051. X  object atom.C translate 34.68449 -6.67585 -15.05636
  1052. X  object atom.C translate 33.44990 -7.80960 -12.35628
  1053. X  object atom.O translate 33.48803 -5.51646 -10.36331
  1054. X  object atom.C translate 30.39753 -8.91307 -12.52532
  1055. X  object atom.O translate 30.15646 -11.74682 -11.38013
  1056. X  object atom.C translate 28.79095 -6.59705 -10.89502
  1057. X  object atom.C translate 30.95784 -5.60459 -8.70737
  1058. X  object atom.N translate 30.48375 -2.56366 -7.96425
  1059. X  object atom.C translate 29.88446 -0.41012 -9.80639
  1060. X  object atom.N translate 29.66034 2.12028 -8.53303
  1061. X  object atom.C translate 30.14777 1.53858 -5.78062
  1062. X  object atom.C translate 30.16726 3.41715 -3.42393
  1063. X  object atom.O translate 29.73977 5.98547 -3.38453
  1064. X  object atom.N translate 30.81315 2.01606 -0.96259
  1065. X  object atom.C translate 31.39126 -0.79990 -0.67407
  1066. X  object atom.N translate 31.97508 -1.77965 1.97941
  1067. X  object atom.N translate 31.35694 -2.55942 -2.88353
  1068. X  object atom.C translate 30.71889 -1.25853 -5.35568
  1069. X  object atom.P translate 27.18967 -13.35212 -11.00221
  1070. X  object atom.O translate 24.95945 -12.07411 -12.77593
  1071. X  object atom.O translate 27.65550 -16.41021 -11.43097
  1072. X  object atom.O translate 26.44294 -12.83249 -7.74902
  1073. X  object atom.C translate 28.26284 -13.92642 -5.58891
  1074. X  object atom.C translate 27.19094 -12.70136 -2.86786
  1075. X  object atom.O translate 27.28097 -9.69644 -3.05915
  1076. X  object atom.C translate 24.15446 -13.41398 -2.19782
  1077. X  object atom.O translate 24.03245 -15.73678 -0.25823
  1078. X  object atom.C translate 22.93004 -10.68657 -0.99606
  1079. X  object atom.C translate 25.39159 -8.62645 -0.97000
  1080. X  object atom.N translate 24.47540 -5.90836 -2.20523
  1081. X  object atom.C translate 24.37583 -3.55252 -0.56794
  1082. X  object atom.O translate 25.00690 -3.78935 1.95505
  1083. X  object atom.N translate 23.63546 -1.07084 -1.72330
  1084. X  object atom.C translate 22.98385 -0.89290 -4.46935
  1085. X  object atom.N translate 22.33986 1.67034 -5.64907
  1086. X  object atom.C translate 23.04486 -3.27183 -6.20960
  1087. X  object atom.C translate 23.81722 -5.84799 -5.00678
  1088. X  object atom.P translate 21.07498 -17.05505 0.69737
  1089. X  object atom.O translate 19.00914 -16.62078 -1.59916
  1090. X  object atom.O translate 21.56136 -19.97883 1.65593
  1091. X  object atom.O translate 20.24712 -15.15063 3.33009
  1092. X  object atom.C translate 21.99478 -15.13029 5.81049
  1093. X  object atom.C translate 20.63542 -13.14177 7.88163
  1094. X  object atom.O translate 20.53564 -10.34467 6.68305
  1095. X  object atom.C translate 17.59046 -13.83490 8.68555
  1096. X  object atom.O translate 16.87848 -12.69585 11.35873
  1097. X  object atom.C translate 16.01778 -12.28213 6.34665
  1098. X  object atom.C translate 17.63071 -9.50409 6.55298
  1099. X  object atom.N translate 17.27461 -7.72805 3.98975
  1100. X  object atom.C translate 16.68422 -8.53303 1.26467
  1101. X  object atom.N translate 16.49314 -6.32441 -0.51244
  1102. X  object atom.C translate 16.97529 -4.07067 1.17570
  1103. X  object atom.C translate 16.99393 -1.13354 0.49422
  1104. X  object atom.O translate 16.58699 0.01229 -1.80549
  1105. X  object atom.N translate 17.49090 0.48744 2.85070
  1106. X  object atom.C translate 17.95037 -0.45587 5.54718
  1107. X  object atom.N translate 18.32702 1.52121 7.61366
  1108. X  object atom.N translate 17.95016 -3.20531 6.18481
  1109. X  object atom.C translate 17.44875 -4.85278 3.91900
  1110. X  object atom.P translate 14.40654 -14.08572 13.19219
  1111. X  object atom.O translate 12.08692 -15.04852 11.28078
  1112. X  object atom.O translate 15.64346 -16.22316 15.08623
  1113. X  object atom.O translate 13.38739 -11.39665 14.97056
  1114. X  object atom.C translate 15.46552 -9.51574 16.17613
  1115. X  object atom.C translate 14.23962 -6.60806 15.89333
  1116. X  object atom.O translate 14.04176 -5.99458 12.94285
  1117. X  object atom.C translate 11.24889 -6.21298 17.06288
  1118. X  object atom.O translate 11.17284 -4.12533 19.27532
  1119. X  object atom.C translate 9.47899 -5.52515 14.41470
  1120. X  object atom.C translate 11.68973 -4.12130 12.55964
  1121. X  object atom.N translate 10.96842 -4.45219 9.52973
  1122. X  object atom.C translate 10.62673 -6.91459 8.03436
  1123. X  object atom.N translate 10.25093 -6.48032 5.24531
  1124. X  object atom.C translate 10.32740 -3.63534 4.99598
  1125. X  object atom.C translate 10.07828 -1.81905 2.59628
  1126. X  object atom.N translate 9.69379 -2.83079 -0.08007
  1127. X  object atom.N translate 10.23292 0.96280 3.05300
  1128. X  object atom.C translate 10.63626 1.93514 5.67767
  1129. X  object atom.N translate 10.91313 0.48871 8.07864
  1130. X  object atom.C translate 10.72671 -2.33170 7.56048
  1131. X  object atom.P translate 8.31198 -3.29196 20.86833
  1132. X  object atom.O translate 6.27092 -5.65183 20.68340
  1133. X  object atom.O translate 9.05468 -2.20142 23.70442
  1134. X  object atom.O translate 7.11319 -0.67280 19.11326
  1135. X  object atom.C translate 8.46386 2.03449 19.34734
  1136. X  object atom.C translate 6.80708 3.92239 17.43551
  1137. X  object atom.O translate 6.64948 2.42512 14.80935
  1138. X  object atom.C translate 3.74942 4.50790 18.29154
  1139. X  object atom.O translate 3.21834 7.48825 18.68979
  1140. X  object atom.C translate 2.07442 3.06804 15.92807
  1141. X  object atom.C translate 4.11929 3.35636 13.47880
  1142. X  object atom.N translate 3.58122 1.22718 11.22993
  1143. X  object atom.C translate 3.44924 -1.65403 11.49982
  1144. X  object atom.N translate 3.14759 -2.98627 9.00861
  1145. X  object atom.C translate 3.10204 -0.85985 7.09783
  1146. X  object atom.C translate 2.93406 -0.87277 4.07067
  1147. X  object atom.N translate 2.81606 -3.31441 2.52680
  1148. X  object atom.N translate 3.00714 1.62289 2.75770
  1149. X  object atom.C translate 3.20966 3.99335 4.28526
  1150. X  object atom.N translate 3.38675 4.28759 7.08385
  1151. X  object atom.C translate 3.32108 1.73071 8.36653
  1152. X  object atom.P translate 0.10285 8.68725 19.28421
  1153. X  object atom.O translate -1.69587 6.55595 20.74822
  1154. X  object atom.O translate 0.29880 11.49346 20.66306
  1155. X  object atom.O translate -1.00951 9.18168 16.15198
  1156. X  object atom.C translate 0.56804 10.97234 14.29226
  1157. X  object atom.C translate -1.14106 10.93951 11.62650
  1158. X  object atom.O translate -1.18576 8.11889 10.59294
  1159. X  object atom.C translate -4.23792 11.67035 12.09402
  1160. X  object atom.O translate -4.76306 14.57527 11.41508
  1161. X  object atom.C translate -5.84132 9.46702 10.31819
  1162. X  object atom.C translate -3.45581 8.05449 8.64679
  1163. X  object atom.N translate -3.87737 5.00297 8.04369
  1164. X  object atom.C translate -3.90893 4.12427 5.31352
  1165. X  object atom.O translate -3.72337 5.86854 3.37203
  1166. X  object atom.N translate -4.09281 1.28395 4.78774
  1167. X  object atom.C translate -4.29554 -0.69673 6.89743
  1168. X  object atom.O translate -4.34892 -3.22205 6.21828
  1169. X  object atom.C translate -4.37074 0.25018 9.69644
  1170. X  object atom.C translate -4.70417 -1.80803 12.10652
  1171. X  object atom.C translate -4.12056 3.14431 10.23620
  1172. X  object atom.P translate -7.89085 15.85287 11.39983
  1173. X  object atom.O translate -9.72324 14.49224 13.55316
  1174. X  object atom.O translate -7.60254 18.95671 11.65319
  1175. X  object atom.O translate -8.95745 15.10741 8.26315
  1176. X  object atom.C translate -7.40150 16.18715 5.85244
  1177. X  object atom.C translate -8.71765 14.83838 3.29831
  1178. X  object atom.O translate -8.79370 11.86863 3.87853
  1179. X  object atom.C translate -11.80158 15.64463 2.76046
  1180. X  object atom.O translate -12.16064 17.46813 0.32030
  1181. X  object atom.C translate -13.35668 12.77995 2.71915
  1182. X  object atom.C translate -10.93262 10.75500 2.07516
  1183. X  object atom.N translate -11.38384 7.79605 3.06720
  1184. X  object atom.C translate -11.18132 5.60056 1.20154
  1185. X  object atom.O translate -10.81908 6.04013 -1.33648
  1186. X  object atom.N translate -11.24996 2.90154 2.22196
  1187. X  object atom.C translate -11.58995 2.32153 5.04025
  1188. X  object atom.O translate -11.53488 -0.18493 5.76834
  1189. X  object atom.C translate -11.91936 4.58141 6.92688
  1190. X  object atom.C translate -12.36613 4.07491 10.05064
  1191. X  object atom.C translate -11.73273 7.34632 5.90116
  1192. X  object atom.P translate -15.22212 18.21168 -0.93759
  1193. X  object atom.O translate -17.41443 18.11148 1.28818
  1194. X  object atom.O translate -15.04037 20.86283 -2.55879
  1195. X  object atom.O translate -15.62313 15.69229 -3.13922
  1196. X  object atom.C translate -13.58462 15.32857 -5.38322
  1197. X  object atom.C translate -14.53767 12.82126 -7.11054
  1198. X  object atom.O translate -14.70058 10.42008 -5.26183
  1199. X  object atom.C translate -17.43349 13.06021 -8.49893
  1200. X  object atom.O translate -17.30872 12.41135 -11.46274
  1201. X  object atom.C translate -19.26123 11.06004 -6.71123
  1202. X  object atom.C translate -17.10917 8.76690 -6.07995
  1203. X  object atom.N translate -17.84065 7.03830 -3.52921
  1204. X  object atom.C translate -17.77837 4.14757 -3.70737
  1205. X  object atom.O translate -17.39896 3.04580 -6.03547
  1206. X  object atom.N translate -18.08934 2.57171 -1.37038
  1207. X  object atom.C translate -18.52488 3.80079 1.13248
  1208. X  object atom.N translate -18.80832 2.16223 3.48240
  1209. X  object atom.C translate -18.71342 6.74258 1.39622
  1210. X  object atom.C translate -18.34058 8.38877 -1.02085
  1211. X  object atom.P translate -19.67389 13.58197 -13.60464
  1212. X  object atom.O translate -21.14785 16.07657 -12.37047
  1213. X  object atom.O translate -18.27830 13.88998 -16.41424
  1214. X  object atom.O translate -21.90920 11.05030 -13.75610
  1215. X  object atom.C translate -21.09341 8.41631 -15.05869
  1216. X  object atom.C translate -23.35880 6.29836 -14.39437
  1217. X  object atom.O translate -23.15946 5.68000 -11.42927
  1218. X  object atom.C translate -26.43257 7.23214 -14.84410
  1219. X  object atom.O translate -28.10651 4.95912 -15.90731
  1220. X  object atom.C translate -27.31466 8.06720 -11.86079
  1221. X  object atom.C translate -26.00402 5.53108 -10.44698
  1222. X  object atom.N translate -25.97373 5.66899 -7.33000
  1223. X  object atom.C translate -26.11396 7.92569 -5.52472
  1224. X  object atom.N translate -26.05380 7.14020 -2.79435
  1225. X  object atom.C translate -25.85595 4.29289 -2.92294
  1226. X  object atom.C translate -25.68944 2.25544 -0.69864
  1227. X  object atom.O translate -25.67440 2.63844 1.87519
  1228. X  object atom.N translate -25.50154 -0.43660 -1.76101
  1229. X  object atom.C translate -25.47464 -1.20938 -4.54370
  1230. X  object atom.N translate -25.26407 -4.01093 -5.17392
  1231. X  object atom.N translate -25.61191 0.68402 -6.61569
  1232. X  object atom.C translate -25.77990 3.34979 -5.64102
  1233. X  object atom.P translate -28.94263 4.89154 -19.18211
  1234. X  object atom.O translate -31.69737 6.36064 -19.42847
  1235. X  object atom.O translate -26.58594 5.98590 -20.93951
  1236. X  object atom.O translate -29.17777 1.57904 -19.78521
  1237. X  object atom.C translate -26.58657 -0.06292 -19.97396
  1238. X  object atom.C translate -27.00368 -2.86765 -18.48792
  1239. X  object atom.O translate -27.59047 -2.24378 -15.58553
  1240. X  object atom.C translate -29.44532 -4.74304 -19.46004
  1241. X  object atom.O translate -28.63949 -7.67318 -19.74305
  1242. X  object atom.C translate -31.71431 -4.16727 -17.22388
  1243. X  object atom.C translate -29.82981 -4.05097 -14.63311
  1244. X  object atom.N translate -31.15294 -2.47511 -12.26519
  1245. X  object atom.C translate -31.40058 -3.74571 -9.69729
  1246. X  object atom.O translate -30.63331 -6.22273 -9.49414
  1247. X  object atom.N translate -32.39304 -2.28086 -7.48168
  1248. X  object atom.C translate -33.15524 0.42855 -7.77825
  1249. X  object atom.N translate -34.03838 1.95166 -5.48702
  1250. X  object atom.C translate -32.98386 1.78050 -10.38491
  1251. X  object atom.C translate -31.93886 0.25654 -12.67869
  1252. X  object atom.P translate -30.57823 -9.74750 -21.58138
  1253. X  object atom.O translate -32.10706 -8.03818 -23.70442
  1254. X  object atom.O translate -28.82951 -12.12135 -22.65328
  1255. X  object atom.O translate -32.82625 -10.98759 -19.37043
  1256. X  object atom.C translate -32.08164 -13.32416 -17.54015
  1257. X  object atom.C translate -34.59107 -13.75525 -15.62557
  1258. X  object atom.O translate -34.97344 -11.13779 -14.18867
  1259. X  object atom.C translate -37.50214 -14.33738 -16.99891
  1260. X  object atom.O translate -38.51388 -17.17622 -16.55998
  1261. X  object atom.C translate -39.41101 -12.06097 -15.67344
  1262. X  object atom.C translate -37.74406 -11.30514 -13.02928
  1263. X  object atom.N translate -38.39165 -8.41800 -12.04403
  1264. X  object atom.C translate -38.78164 -6.02847 -13.64425
  1265. X  object atom.N translate -39.31568 -3.73576 -12.05970
  1266. X  object atom.C translate -39.23582 -4.71847 -9.37699
  1267. X  object atom.C translate -39.57624 -3.22756 -6.75889
  1268. X  object atom.O translate -40.03593 -0.69334 -6.35407
  1269. X  object atom.N translate -39.40232 -5.03030 -4.48503
  1270. X  object atom.C translate -38.94434 -7.87294 -4.55430
  1271. X  object atom.N translate -38.95958 -9.27107 -2.03957
  1272. X  object atom.N translate -38.53654 -9.25794 -6.98598
  1273. X  object atom.C translate -38.69881 -7.55392 -9.28590
  1274. X  object atom.O translate -43.67996 2.27662 12.88651
  1275. X  object atom.C translate -45.27319 -0.20591 13.69297
  1276. X  object atom.C translate -43.85134 -2.82549 12.52342
  1277. X  object atom.O translate -43.94963 -2.75410 9.47931
  1278. X  object atom.C translate -40.77376 -3.28984 13.31166
  1279. X  object atom.O translate -40.23019 -6.16490 14.04801
  1280. X  object atom.C translate -39.22968 -2.33106 10.64526
  1281. X  object atom.C translate -41.20358 -3.45910 8.38178
  1282. X  object atom.N translate -41.00255 -1.74109 5.76135
  1283. X  object atom.C translate -40.31704 -2.94391 3.22459
  1284. X  object atom.O translate -39.78299 -5.47982 3.15702
  1285. X  object atom.N translate -40.33695 -1.38796 0.86387
  1286. X  object atom.C translate -41.04830 1.33182 0.94628
  1287. X  object atom.N translate -41.18367 2.82613 -1.51612
  1288. X  object atom.C translate -41.75711 2.65835 3.48897
  1289. X  object atom.C translate -41.73804 1.03695 5.94861
  1290. X  object atom.P translate -37.51845 -6.92349 15.94247
  1291. X  object atom.O translate -35.70618 -4.38123 16.17084
  1292. X  object atom.O translate -38.39589 -8.24366 18.66776
  1293. X  object atom.O translate -35.97670 -9.20286 13.97938
  1294. X  object atom.C translate -37.52226 -11.58222 12.87824
  1295. X  object atom.C translate -35.67229 -12.66111 10.56159
  1296. X  object atom.O translate -35.61192 -10.58531 8.37055
  1297. X  object atom.C translate -32.61124 -13.03755 11.46084
  1298. X  object atom.O translate -31.72236 -15.89142 11.06280
  1299. X  object atom.C translate -30.99343 -10.85371 9.66064
  1300. X  object atom.C translate -32.87540 -10.64590 7.07305
  1301. X  object atom.N translate -32.65042 -7.79499 5.81770
  1302. X  object atom.C translate -32.75656 -5.27327 7.23701
  1303. X  object atom.N translate -32.64238 -3.03161 5.50015
  1304. X  object atom.C translate -32.44833 -4.17977 2.89751
  1305. X  object atom.C translate -32.28628 -2.78291 0.21671
  1306. X  object atom.O translate -32.33415 -0.22285 -0.29551
  1307. X  object atom.N translate -32.03885 -4.69114 -1.96098
  1308. X  object atom.C translate -31.99373 -7.56811 -1.73029
  1309. X  object atom.N translate -31.63805 -9.09461 -4.14820
  1310. X  object atom.N translate -32.19328 -8.87176 0.78062
  1311. X  object atom.C translate -32.43139 -7.06923 2.99665
  1312. X  object atom.P translate -28.56810 -16.87456 11.72267
  1313. X  object atom.O translate -27.31085 -14.90235 13.79317
  1314. X  object atom.O translate -28.69542 -19.90659 12.48338
  1315. X  object atom.O translate -27.03863 -16.55130 8.71140
  1316. X  object atom.C translate -27.92687 -18.21803 6.31318
  1317. X  object atom.C translate -26.44697 -16.92540 3.81731
  1318. X  object atom.O translate -27.05156 -13.97810 3.83426
  1319. X  object atom.C translate -23.24526 -16.98662 4.01919
  1320. X  object atom.O translate -22.15747 -19.60705 2.99793
  1321. X  object atom.C translate -22.38986 -14.46745 2.23722
  1322. X  object atom.C translate -25.08253 -12.74627 1.95632
  1323. X  object atom.N translate -24.77451 -9.81740 2.97971
  1324. X  object atom.C translate -24.86179 -7.68462 1.05601
  1325. X  object atom.O translate -25.00288 -8.32818 -1.46232
  1326. X  object atom.N translate -24.81159 -4.99492 1.92391
  1327. X  object atom.C translate -24.63788 -4.38589 4.67653
  1328. X  object atom.N translate -24.64678 -1.63708 5.55396
  1329. X  object atom.C translate -24.48324 -6.51803 6.70699
  1330. X  object atom.C translate -24.58259 -9.31513 5.80456
  1331. X  object atom.P translate -18.85514 -20.22117 2.69775
  1332. X  object atom.O translate -17.23987 -18.76966 4.94471
  1333. X  object atom.O translate -18.57911 -23.30425 2.53887
  1334. X  object atom.O translate -18.08595 -18.96921 -0.33237
  1335. X  object atom.C translate -19.12290 -20.31756 -2.84837
  1336. X  object atom.C translate -18.37935 -18.30807 -5.17901
  1337. X  object atom.O translate -19.10680 -15.57155 -4.06834
  1338. X  object atom.C translate -15.28483 -18.12334 -6.02890
  1339. X  object atom.O translate -14.94123 -18.09856 -9.04907
  1340. X  object atom.C translate -14.22987 -15.49211 -4.45389
  1341. X  object atom.C translate -16.82976 -13.61777 -4.58713
  1342. X  object atom.N translate -16.80412 -11.59048 -2.17155
  1343. X  object atom.C translate -16.19403 -12.09847 0.62132
  1344. X  object atom.N translate -16.40460 -9.77546 2.25310
  1345. X  object atom.C translate -17.12591 -7.72021 0.40715
  1346. X  object atom.C translate -17.62966 -4.77779 0.89078
  1347. X  object atom.O translate -17.51060 -3.43664 3.10935
  1348. X  object atom.N translate -18.20946 -3.37606 -1.58730
  1349. X  object atom.C translate -18.35224 -4.53057 -4.21620
  1350. X  object atom.N translate -18.80853 -2.75791 -6.44092
  1351. X  object atom.N translate -17.95292 -7.28531 -4.66170
  1352. X  object atom.C translate -17.35744 -8.73915 -2.28530
  1353. X  object atom.P translate -11.90707 -17.62044 -10.43893
  1354. X  object atom.O translate -9.71053 -18.33052 -8.31060
  1355. X  object atom.O translate -11.68507 -19.09970 -13.18541
  1356. X  object atom.O translate -12.06235 -14.34246 -11.16935
  1357. X  object atom.C translate -14.36058 -13.41059 -12.94540
  1358. X  object atom.C translate -13.91318 -10.41330 -13.86689
  1359. X  object atom.O translate -14.06040 -8.57349 -11.45025
  1360. X  object atom.C translate -11.09404 -9.82482 -15.27900
  1361. X  object atom.O translate -11.32791 -7.70305 -17.41559
  1362. X  object atom.C translate -9.31969 -8.95755 -12.71704
  1363. X  object atom.C translate -11.41413 -7.12240 -11.11872
  1364. X  object atom.N translate -10.86314 -7.14338 -7.99984
  1365. X  object atom.C translate -10.17424 -9.37106 -6.26001
  1366. X  object atom.N translate -9.99249 -8.61988 -3.51354
  1367. X  object atom.C translate -10.58923 -5.82426 -3.53070
  1368. X  object atom.C translate -10.79069 -3.74550 -1.32399
  1369. X  object atom.N translate -10.42167 -4.36025 1.47714
  1370. X  object atom.N translate -11.38786 -1.08927 -2.09423
  1371. X  object atom.C translate -11.81599 -0.48045 -4.82608
  1372. X  object atom.N translate -11.73761 -2.20417 -7.06351
  1373. X  object atom.C translate -11.09976 -4.86527 -6.22654
  1374. X  object atom.P translate -8.58800 -6.64619 -19.06411
  1375. X  object atom.O translate -6.35057 -8.85396 -18.84359
  1376. X  object atom.O translate -9.36608 -5.77321 -21.97646
  1377. X  object atom.O translate -7.84763 -3.85714 -17.32196
  1378. X  object atom.C translate -9.95457 -1.68496 -17.07983
  1379. X  object atom.C translate -8.60580 0.80308 -15.64251
  1380. X  object atom.O translate -8.27279 0.23599 -12.67636
  1381. X  object atom.C translate -5.72947 1.72415 -16.78855
  1382. X  object atom.O translate -5.69515 4.70682 -17.31603
  1383. X  object atom.C translate -3.75175 0.72639 -14.42762
  1384. X  object atom.C translate -5.55746 1.23904 -11.82350
  1385. X  object atom.N translate -4.77239 -0.67195 -9.45558
  1386. X  object atom.C translate -4.18920 -3.51523 -9.53947
  1387. X  object atom.N translate -3.71701 -4.61933 -6.95865
  1388. X  object atom.C translate -4.03117 -2.38804 -5.20125
  1389. X  object atom.C translate -3.84136 -2.14676 -2.19379
  1390. X  object atom.N translate -3.28613 -4.39584 -0.48024
  1391. X  object atom.N translate -4.26059 0.40673 -1.06681
  1392. X  object atom.C translate -4.85797 2.59649 -2.73821
  1393. X  object atom.N translate -5.12022 2.65221 -5.54082
  1394. X  object atom.C translate -4.67515 0.04216 -6.63433
  1395. X  object atom.P translate -2.89106 6.35068 -18.26422
  1396. X  object atom.O translate -0.73285 4.34987 -19.31006
  1397. X  object atom.O translate -3.69816 8.70547 -20.15359
  1398. X  object atom.O translate -1.92825 7.77592 -15.36522
  1399. X  object atom.C translate -3.84644 9.66382 -13.93065
  1400. X  object atom.C translate -2.45382 10.35314 -11.15494
  1401. X  object atom.O translate -1.95346 7.74732 -9.70322
  1402. X  object atom.C translate 0.42865 11.78410 -11.40195
  1403. X  object atom.O translate 0.29414 14.70132 -10.55629
  1404. X  object atom.C translate 2.36336 9.87714 -9.65047
  1405. X  object atom.C translate 0.25367 8.35106 -7.76152
  1406. X  object atom.N translate 1.30206 5.54082 -6.83430
  1407. X  object atom.C translate 1.64587 5.00255 -4.01919
  1408. X  object atom.O translate 1.24762 6.88070 -2.24188
  1409. X  object atom.N translate 2.37544 2.32937 -3.20553
  1410. X  object atom.C translate 2.86245 0.21184 -5.11228
  1411. X  object atom.O translate 3.50517 -2.13384 -4.18210
  1412. X  object atom.C translate 2.60719 0.81960 -8.00005
  1413. X  object atom.C translate 3.19695 -1.43350 -10.16376
  1414. X  object atom.C translate 1.75624 3.51989 -8.84591
  1415. X  object atom.P translate 3.03764 16.69132 -10.55036
  1416. X  object atom.O translate 5.02595 15.78105 -12.79203
  1417. X  object atom.O translate 2.07336 19.65344 -10.65374
  1418. X  object atom.O translate 4.28833 16.15537 -7.46961
  1419. X  object atom.C translate 2.50551 16.77775 -5.08156
  1420. X  object atom.C translate 4.17754 16.06449 -2.50286
  1421. X  object atom.O translate 4.78636 13.11423 -2.53400
  1422. X  object atom.C translate 7.02951 17.52999 -2.29145
  1423. X  object atom.O translate 7.17526 19.12110 0.27030
  1424. X  object atom.C translate 9.12903 15.05890 -2.48104
  1425. X  object atom.C translate 7.38180 12.76131 -1.06660
  1426. X  object atom.N translate 8.24970 9.86718 -1.87540
  1427. X  object atom.C translate 8.62550 7.85685 0.15591
  1428. X  object atom.O translate 8.34269 8.44046 2.68970
  1429. X  object atom.N translate 9.24237 5.16248 -0.68593
  1430. X  object atom.C translate 9.46564 4.40453 -3.46715
  1431. X  object atom.O translate 10.01324 1.91078 -4.01220
  1432. X  object atom.C translate 9.06209 6.48922 -5.52515
  1433. X  object atom.C translate 9.24618 5.81812 -8.62094
  1434. X  object atom.C translate 8.44543 9.24311 -4.68246
  1435. X  object atom.P translate 9.94122 20.84397 1.13736
  1436. X  object atom.O translate 11.60499 21.50850 -1.43266
  1437. X  object atom.O translate 9.08412 23.30425 2.88205
  1438. X  object atom.O translate 11.55521 18.63853 3.11274
  1439. X  object atom.C translate 10.15645 17.60307 5.61709
  1440. X  object atom.C translate 12.29855 15.80796 7.07898
  1441. X  object atom.O translate 12.63579 13.30128 5.43130
  1442. X  object atom.C translate 15.20475 17.20842 7.19167
  1443. X  object atom.O translate 15.97181 18.05831 10.02182
  1444. X  object atom.C translate 17.15980 15.01632 5.84672
  1445. X  object atom.C translate 15.41849 12.30798 5.96323
  1446. X  object atom.N translate 15.89598 10.50503 3.44448
  1447. X  object atom.C translate 16.19488 7.67276 3.79804
  1448. X  object atom.O translate 16.24318 6.75338 6.24434
  1449. X  object atom.N translate 16.36858 5.97933 1.52460
  1450. X  object atom.C translate 16.23830 7.05991 -1.08461
  1451. X  object atom.N translate 16.33384 5.30801 -3.37415
  1452. X  object atom.C translate 15.94321 9.96378 -1.53392
  1453. X  object atom.C translate 15.74959 11.71271 0.82956
  1454. X  object atom.P translate 18.86933 19.72717 10.62196
  1455. X  object atom.O translate 19.73256 21.44792 8.12037
  1456. X  object atom.O translate 18.60538 21.27824 13.34704
  1457. X  object atom.O translate 21.09743 17.21604 10.99056
  1458. X  object atom.C translate 20.92966 15.30167 13.35700
  1459. X  object atom.C translate 23.31008 13.20426 12.99814
  1460. X  object atom.O translate 22.72985 11.47630 10.55163
  1461. X  object atom.C translate 26.25759 14.44033 12.44207
  1462. X  object atom.O translate 28.35711 12.63908 13.55824
  1463. X  object atom.C translate 26.34253 14.49287 9.22044
  1464. X  object atom.C translate 25.23484 11.52778 8.83405
  1465. X  object atom.N translate 24.50230 11.01407 5.85138
  1466. X  object atom.C translate 23.93225 12.92527 3.74550
  1467. X  object atom.N translate 23.44417 11.66907 1.24264
  1468. X  object atom.C translate 23.71469 8.87727 1.82032
  1469. X  object atom.C translate 23.46493 6.48308 -0.00741
  1470. X  object atom.O translate 22.99529 6.42143 -2.57616
  1471. X  object atom.N translate 23.89030 3.99695 1.44727
  1472. X  object atom.C translate 24.49383 3.70101 4.25433
  1473. X  object atom.N translate 24.92640 1.03822 5.27243
  1474. X  object atom.N translate 24.75587 5.93442 5.95963
  1475. X  object atom.C translate 24.32097 8.41843 4.60217
  1476. X  object atom.P translate 29.80798 13.32564 16.52121
  1477. X  object atom.O translate 31.72512 15.78275 16.08123
  1478. X  object atom.O translate 27.61187 13.65823 18.75080
  1479. X  object atom.O translate 31.59971 10.49316 17.04382
  1480. X  object atom.C translate 30.17489 7.87252 17.78461
  1481. X  object atom.C translate 31.55077 5.48342 16.16427
  1482. X  object atom.O translate 30.68457 5.91324 13.30213
  1483. X  object atom.C translate 34.79718 5.50079 16.11639
  1484. X  object atom.O translate 36.09193 3.18900 17.63336
  1485. X  object atom.C translate 35.51086 5.66390 12.97357
  1486. X  object atom.C translate 32.79490 4.64729 11.58307
  1487. X  object atom.N translate 32.46613 5.96980 8.74042
  1488. X  object atom.C translate 32.10282 4.27552 6.44410
  1489. X  object atom.O translate 32.08503 1.70148 6.82371
  1490. X  object atom.N translate 31.78549 5.42431 3.86413
  1491. X  object atom.C translate 31.80434 8.23794 3.53006
  1492. X  object atom.N translate 31.47112 9.38970 0.89925
  1493. X  object atom.C translate 32.20027 10.04725 5.83507
  1494. X  object atom.C translate 32.54259 8.85375 8.50464
  1495. X  object atom.P translate 39.47520 3.11317 17.99391
  1496. X  object atom.O translate 40.71233 5.96196 17.42089
  1497. X  object atom.O translate 40.21684 1.82943 20.75648
  1498. X  object atom.O translate 40.48883 1.07719 15.48279
  1499. X  object atom.C translate 39.71415 -1.87137 15.44000
  1500. X  object atom.C translate 40.62822 -2.85875 12.56896
  1501. X  object atom.O translate 38.89434 -1.41253 10.56116
  1502. X  object atom.C translate 43.58188 -1.93302 11.74512
  1503. X  object atom.O translate 45.74982 -3.60908 13.02547
  1504. X  object atom.C translate 43.40224 -2.34822 8.56057
  1505. X  object atom.C translate 40.37020 -1.41889 7.91764
  1506. X  object atom.N translate 40.14651 1.48689 6.79808
  1507. X  object atom.C translate 40.41321 4.03148 8.16274
  1508. X  object atom.N translate 39.94526 6.24582 6.45512
  1509. X  object atom.C translate 39.36356 5.02648 3.93658
  1510. X  object atom.C translate 38.63674 6.31340 1.30365
  1511. X  object atom.O translate 38.31496 8.83977 0.75965
  1512. X  object atom.N translate 38.32343 4.31492 -0.79121
  1513. X  object atom.C translate 38.59670 1.44770 -0.51752
  1514. X  object atom.N translate 38.36983 -0.17837 -2.89116
  1515. X  object atom.N translate 39.16803 0.25060 1.96903
  1516. X  object atom.C translate 39.50167 2.15502 4.06982
  1517. end
  1518. frames 72
  1519. object molecule.dna rotate 1 0 0 (time*5) translate 0.00 0.00 25.00
  1520. surface BlackTile
  1521. X   ambient 0.01 0.01 0.01
  1522. X   diffuse 0.02 0.02 0.02
  1523. X   specular 0.3 0.3 0.3
  1524. X   specpow 30
  1525. X   transp 0.1
  1526. X   reflect 0.2
  1527. surface GlassTile
  1528. X   ambient 0.02 0.02 0.02
  1529. X   specular 0.8 0.8 0.8
  1530. X   specpow 30
  1531. X   reflect 0.2
  1532. X   transp 0.3
  1533. X   index 1.15
  1534. plane BlackTile 0.0 0.0 0.0 0.0 0.0 1.0
  1535. X  texture marble scale 20.0 20.0 20.0
  1536. X  texture checker GlassTile translate 0.0 0.0 1.5 scale 20.0 20.0 20.0
  1537. light 0.9 extended 7.0 465.31511 -843.39145 293.64980
  1538. shadowtransp
  1539. eyep 0.00 -150.00 25.00
  1540. eyesep 5.255212
  1541. lookp 0.00 0.00 25.00
  1542. up 0.00 0.00 1.00
  1543. fov 45.00
  1544. screen 256 256
  1545. background 0.66 0.66 0.90
  1546. report verbose 25 dna.log
  1547. SHAR_EOF
  1548. chmod 0644 ImageMagick/scenes/dna.script ||
  1549. echo 'restore of ImageMagick/scenes/dna.script failed'
  1550. Wc_c="`wc -c < 'ImageMagick/scenes/dna.script'`"
  1551. test 28655 -eq "$Wc_c" ||
  1552.     echo 'ImageMagick/scenes/dna.script: original size 28655, current size' "$Wc_c"
  1553. rm -f _shar_wnt_.tmp
  1554. fi
  1555. # ============= ImageMagick/scenes/README ==============
  1556. if test -f 'ImageMagick/scenes/README' -a X"$1" != X"-c"; then
  1557.     echo 'x - skipping ImageMagick/scenes/README (File already exists)'
  1558.     rm -f _shar_wnt_.tmp
  1559. else
  1560. > _shar_wnt_.tmp
  1561. echo 'x - extracting ImageMagick/scenes/README (Text)'
  1562. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/scenes/README' &&
  1563. DNA sequence useful for testing the `animate' program from
  1564. contrib/ImageMagick.tar.Z on export.lcs.mit.edu.  `animate' is a
  1565. program that can display image sequences on any X server:
  1566. X
  1567. X  animate dna.[0-9]*
  1568. X
  1569. ImageMagick requires Craig Kolb's RAYSHADE software available via FTP
  1570. as princeton.edu:/pub/Graphics/rayshade.4.0 to generate the DNA image
  1571. sequence.  Alternately, you can get the image sequence from
  1572. contrib/ImageMagick.animation.tar.Z on export.lcs.mit.edu.
  1573. SHAR_EOF
  1574. chmod 0644 ImageMagick/scenes/README ||
  1575. echo 'restore of ImageMagick/scenes/README failed'
  1576. Wc_c="`wc -c < 'ImageMagick/scenes/README'`"
  1577. test 464 -eq "$Wc_c" ||
  1578.     echo 'ImageMagick/scenes/README: original size 464, current size' "$Wc_c"
  1579. rm -f _shar_wnt_.tmp
  1580. fi
  1581. # ============= ImageMagick/import.c ==============
  1582. if test -f 'ImageMagick/import.c' -a X"$1" != X"-c"; then
  1583.     echo 'x - skipping ImageMagick/import.c (File already exists)'
  1584.     rm -f _shar_wnt_.tmp
  1585. else
  1586. > _shar_wnt_.tmp
  1587. echo 'x - extracting ImageMagick/import.c (Text)'
  1588. sed 's/^X//' << 'SHAR_EOF' > 'ImageMagick/import.c' &&
  1589. /*
  1590. SHAR_EOF
  1591. true || echo 'restore of ImageMagick/import.c failed'
  1592. fi
  1593. echo 'End of  part 7'
  1594. echo 'File ImageMagick/import.c is continued in part 8'
  1595. echo 8 > _shar_seq_.tmp
  1596. exit 0
  1597. exit 0 # Just in case...
  1598.